gbtiles 0.0.3 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +14 -0
- data/bin/gbm +0 -3
- data/bin/gbr +0 -3
- data/lib/gbtiles/gbm/cli/convert.rb +8 -17
- data/lib/gbtiles/gbm/export/asm/asm.h.erb +3 -3
- data/lib/gbtiles/gbm/export/asm/asm.rb +7 -1
- data/lib/gbtiles/gbm/export/asm/asm.s.erb +4 -4
- data/lib/gbtiles/gbm/import/gbm_file.rb +24 -13
- data/lib/gbtiles/gbm/layer.rb +9 -0
- data/lib/gbtiles/gbm/map/map_set.rb +22 -11
- data/lib/gbtiles/gbm/map/object.rb +0 -5
- data/lib/gbtiles/gbm/map/object_type.rb +8 -8
- data/lib/gbtiles/gbm/map/objects/map.rb +1 -14
- data/lib/gbtiles/gbm/map/objects/map_export_settings.rb +1 -28
- data/lib/gbtiles/gbm/map/objects/map_settings.rb +1 -26
- data/lib/gbtiles/gbm/map/objects/map_tile_data.rb +1 -2
- data/lib/gbtiles/gbm/map/objects/map_tile_data_record.rb +0 -9
- data/lib/gbtiles/gbm/map/objects/producer.rb +2 -7
- data/lib/gbtiles/gbm/map/objects/unknown.rb +0 -1
- data/lib/gbtiles/gbr/cli/convert.rb +2 -19
- data/lib/gbtiles/gbr/export/asm/asm.rb +0 -1
- data/lib/gbtiles/gbr/import/gbr_file.rb +37 -21
- data/lib/gbtiles/gbr/tile_set/color_set.rb +6 -6
- data/lib/gbtiles/gbr/tile_set/export_type.rb +7 -7
- data/lib/gbtiles/gbr/tile_set/object.rb +0 -3
- data/lib/gbtiles/gbr/tile_set/object_type.rb +10 -10
- data/lib/gbtiles/gbr/tile_set/objects/palettes.rb +1 -10
- data/lib/gbtiles/gbr/tile_set/objects/producer.rb +1 -6
- data/lib/gbtiles/gbr/tile_set/objects/tile_data.rb +2 -13
- data/lib/gbtiles/gbr/tile_set/objects/tile_export.rb +1 -42
- data/lib/gbtiles/gbr/tile_set/objects/tile_import.rb +1 -18
- data/lib/gbtiles/gbr/tile_set/objects/tile_pal.rb +1 -10
- data/lib/gbtiles/gbr/tile_set/objects/tile_settings.rb +1 -22
- data/lib/gbtiles/gbr/tile_set/objects/unknown.rb +0 -1
- data/lib/gbtiles/gbr/tile_set/sgb_palettes.rb +7 -7
- data/lib/gbtiles/gbr/tile_set/split_order.rb +6 -6
- data/lib/gbtiles/gbr/tile_set/tile_set.rb +20 -9
- data/lib/gbtiles/{data_type.rb → helpers/data_type.rb} +19 -11
- data/lib/gbtiles/version.rb +1 -1
- metadata +47 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5c47f1925b50e61d331766cb83c1bbc9c6212189
|
4
|
+
data.tar.gz: e4dbe6e1333ae545493ed3a307713cdb19c675fc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ff753667dc247a29dd990fdf2914aecb6c40e23fe5ec7314b92f633fe17da31cc33d5944a27c880ec3b1530dfb0b1c7b28df346febb728776f64adf583f4de9e
|
7
|
+
data.tar.gz: fae1c944cd637d8278d5e49f484bc5554994bb742365bb4850ab0ba20794c5c787543e1aa4086770661a1e846d19c0b95390e9864c9664e820974fe876837b1b
|
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# GBTiles
|
2
2
|
|
3
|
+
[![wercker status](https://app.wercker.com/status/c42dc696662599ce8eb787410c3b8780/s "wercker status")](https://app.wercker.com/project/bykey/c42dc696662599ce8eb787410c3b8780) [![Code Climate](https://codeclimate.com/github/bashaus/gbtiles/badges/gpa.svg)](https://codeclimate.com/github/bashaus/gbtiles) [![Test Coverage](https://codeclimate.com/github/bashaus/gbtiles/badges/coverage.svg)](https://codeclimate.com/github/bashaus/gbtiles/coverage)
|
4
|
+
|
3
5
|
Converts `.GBR` files created with
|
4
6
|
[Harry Mulder's Tile Designer (GBTD)](http://www.devrs.com/gb/hmgd/gbtd.html)
|
5
7
|
and `.GBM` files created with
|
@@ -32,6 +34,9 @@ a C file `*.h` for convenience.
|
|
32
34
|
|
33
35
|
gbr convert --output "sample.s" sample.gbr
|
34
36
|
|
37
|
+
Omitting the input file `.gbm` file will default to `STDIN`. Omitting the
|
38
|
+
output file `.s` will default to `STDOUT`.
|
39
|
+
|
35
40
|
### GBM (GBMB files)
|
36
41
|
|
37
42
|
Converts a Map Builder file `*.gbm` to an ASM file `*.s` and generates
|
@@ -39,6 +44,15 @@ a C file `*.h` for convenience.
|
|
39
44
|
|
40
45
|
gbm convert --output "sample.s" sample.gbm
|
41
46
|
|
47
|
+
You can also specify the target layer of a map specifying a layer flag.
|
48
|
+
Acceptable values: `bkg` for the background, `win` for the window overlay or
|
49
|
+
`sprite` for sprites. Default value: `bkg`.
|
50
|
+
|
51
|
+
gbm convert --output "sample.s" --layer=bkg sample.gbm
|
52
|
+
|
53
|
+
Omitting the input file `.gbm` file will default to `STDIN`. Omitting the
|
54
|
+
output file `.s` will default to `STDOUT`.
|
55
|
+
|
42
56
|
## Contributors
|
43
57
|
|
44
58
|
* @bashaus -- [Bashkim Isai](http://www.bashkim.com.au/)
|
data/bin/gbm
CHANGED
data/bin/gbr
CHANGED
@@ -1,29 +1,19 @@
|
|
1
|
-
require "gbtiles/data_type"
|
2
|
-
|
1
|
+
require "gbtiles/helpers/data_type"
|
3
2
|
require "gbtiles/gbm/import/gbm_file"
|
4
|
-
|
5
|
-
require "gbtiles/gbm/map/map_set"
|
6
|
-
|
7
|
-
require "gbtiles/gbm/map/object"
|
8
|
-
require "gbtiles/gbm/map/object_type"
|
9
|
-
|
10
|
-
require "gbtiles/gbm/map/objects/producer"
|
11
|
-
require "gbtiles/gbm/map/objects/map"
|
12
|
-
require "gbtiles/gbm/map/objects/map_tile_data"
|
13
|
-
require "gbtiles/gbm/map/objects/map_tile_data_record"
|
14
|
-
require "gbtiles/gbm/map/objects/map_settings"
|
15
|
-
require "gbtiles/gbm/map/objects/map_export_settings"
|
16
|
-
require "gbtiles/gbm/map/objects/unknown"
|
17
|
-
|
18
3
|
require "gbtiles/gbm/export/asm/asm"
|
19
4
|
|
20
5
|
desc "Convert a file from GBM format"
|
21
6
|
arg_name "input"
|
22
7
|
command :convert do |c|
|
23
8
|
|
24
|
-
c.desc "Output filename
|
9
|
+
c.desc "Output filename [*.s]"
|
25
10
|
c.flag :output
|
26
11
|
|
12
|
+
c.desc "Layer type of the map [bkg, win, sprite]"
|
13
|
+
c.flag :layer,
|
14
|
+
:must_match => [:bkg, :win, :sprite],
|
15
|
+
:default_value => :bkg
|
16
|
+
|
27
17
|
c.action do |global_options,options,args|
|
28
18
|
# Prepare input file
|
29
19
|
if !args[0].nil? then
|
@@ -50,6 +40,7 @@ command :convert do |c|
|
|
50
40
|
# Do export
|
51
41
|
export = GBTiles::GBM::Export::ASM::ASM.new
|
52
42
|
export.map_set = import.map_set
|
43
|
+
export.layer = options[:layer]
|
53
44
|
export.write(output_file)
|
54
45
|
output_file.close
|
55
46
|
end
|
@@ -4,11 +4,11 @@
|
|
4
4
|
* GBTiles Ruby Gem (v<%= GBTiles::VERSION %>) - GBM
|
5
5
|
*
|
6
6
|
* .GBM created with
|
7
|
-
* <%= map_set.
|
8
|
-
* <%= map_set.
|
7
|
+
* <%= map_set.producer.first.name %> (v<%= map_set.producer.first.version %>)
|
8
|
+
* <%= map_set.producer.first.info %>
|
9
9
|
*/
|
10
10
|
|
11
|
-
<% map_set.
|
11
|
+
<% map_set.map.each do |map| -%>
|
12
12
|
// Helper: Map dimensions
|
13
13
|
#define <%= map_export_settings.label_name %>Width <%= map.width %>
|
14
14
|
#define <%= map_export_settings.label_name %>Height <%= map.height %>
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require "gbtiles/gbm/layer"
|
2
|
+
|
1
3
|
require "erb"
|
2
4
|
|
3
5
|
module GBTiles
|
@@ -8,7 +10,7 @@ module GBTiles
|
|
8
10
|
include ERB::Util
|
9
11
|
|
10
12
|
attr_accessor :map_set
|
11
|
-
|
13
|
+
attr_accessor :layer
|
12
14
|
|
13
15
|
def initialize
|
14
16
|
end
|
@@ -17,6 +19,10 @@ module GBTiles
|
|
17
19
|
if @map_set.nil? then
|
18
20
|
raise "Missing required map"
|
19
21
|
end
|
22
|
+
|
23
|
+
if @layer.nil? then
|
24
|
+
raise "Missing required layer (bkg, win, sprite)"
|
25
|
+
end
|
20
26
|
end
|
21
27
|
|
22
28
|
def render_s
|
@@ -3,12 +3,12 @@
|
|
3
3
|
; GBTiles Ruby Gem (v<%= GBTiles::VERSION %>) - GBM
|
4
4
|
;
|
5
5
|
; .GBM created with
|
6
|
-
; <%= map_set.
|
7
|
-
; <%= map_set.
|
6
|
+
; <%= map_set.producer.first.name %> (v<%= map_set.producer.first.version %>)
|
7
|
+
; <%= map_set.producer.first.info %>
|
8
8
|
|
9
9
|
.area _CODE_<%= map_export_settings.bank -%>
|
10
10
|
|
11
|
-
<% map_set.
|
11
|
+
<% map_set.map.each do |map| -%>
|
12
12
|
<% map_tile_data = map_set.map_tile_data(map.master_id).first -%>
|
13
13
|
|
14
14
|
; Map <%= "(#{map.name})" unless map.name.nil? %>
|
@@ -21,7 +21,7 @@ _<%= map_export_settings.label_name %>:
|
|
21
21
|
<% row_tile_data = map_tile_data.row(row, 16) -%>
|
22
22
|
<% if !row_tile_data.nil? -%>
|
23
23
|
.db <%= row_tile_data
|
24
|
-
.map {|x| sprintf("0x%02x", x.tile_number) }
|
24
|
+
.map {|x| sprintf("0x%02x", x.tile_number + GBTiles::GBM::LAYER[layer]) }
|
25
25
|
.join(',')
|
26
26
|
%>
|
27
27
|
<% end -%>
|
@@ -1,3 +1,17 @@
|
|
1
|
+
require "gbtiles/helpers/fixnum"
|
2
|
+
|
3
|
+
require "gbtiles/gbm/map/map_set"
|
4
|
+
require "gbtiles/gbm/map/object"
|
5
|
+
require "gbtiles/gbm/map/object_type"
|
6
|
+
|
7
|
+
require "gbtiles/gbm/map/objects/producer"
|
8
|
+
require "gbtiles/gbm/map/objects/map"
|
9
|
+
require "gbtiles/gbm/map/objects/map_tile_data"
|
10
|
+
require "gbtiles/gbm/map/objects/map_tile_data_record"
|
11
|
+
require "gbtiles/gbm/map/objects/map_settings"
|
12
|
+
require "gbtiles/gbm/map/objects/map_export_settings"
|
13
|
+
require "gbtiles/gbm/map/objects/unknown"
|
14
|
+
|
1
15
|
module GBTiles
|
2
16
|
module GBM
|
3
17
|
module Import
|
@@ -6,28 +20,25 @@ module GBTiles
|
|
6
20
|
OBJECT_MARKER = "HPJMTL"
|
7
21
|
|
8
22
|
attr_accessor :version
|
9
|
-
@version
|
10
|
-
|
11
23
|
attr_accessor :map_set
|
12
|
-
@map_set
|
13
24
|
|
14
|
-
def initialize
|
25
|
+
def initialize
|
15
26
|
@map_set = GBTiles::GBM::Map::MapSet.new
|
16
27
|
end
|
17
28
|
|
18
|
-
def self.open
|
29
|
+
def self.open file
|
19
30
|
import = GBTiles::GBM::Import::GBMFile.new
|
20
31
|
|
21
32
|
# Check to see if this is a valid file type
|
22
33
|
if (file.read(3) != "GBO") then
|
23
|
-
raise
|
34
|
+
raise IOError, "Not a valid file (expected: GBO)"
|
24
35
|
end
|
25
36
|
|
26
37
|
# Version number
|
27
38
|
import.version = file.read(1)
|
28
39
|
|
29
40
|
if import.version != "1" then
|
30
|
-
raise
|
41
|
+
raise IOError, "Cannot import version #{import.version}"
|
31
42
|
end
|
32
43
|
|
33
44
|
# For each object
|
@@ -46,20 +57,20 @@ module GBTiles
|
|
46
57
|
object_len = GBTiles::DataType.long(file.read(4))
|
47
58
|
object_data = file.read(object_len)
|
48
59
|
|
49
|
-
case object_type
|
50
|
-
when
|
60
|
+
case GBTiles::GBM::Map::OBJECT_TYPE.key(object_type)
|
61
|
+
when :producer
|
51
62
|
object = GBTiles::GBM::Map::Objects::Producer.initFromBitString object_data
|
52
63
|
|
53
|
-
when
|
64
|
+
when :map
|
54
65
|
object = GBTiles::GBM::Map::Objects::Map.initFromBitString object_data
|
55
66
|
|
56
|
-
when
|
67
|
+
when :map_tile_data
|
57
68
|
object = GBTiles::GBM::Map::Objects::MapTileData.initFromBitString object_data
|
58
69
|
|
59
|
-
when
|
70
|
+
when :map_settings
|
60
71
|
object = GBTiles::GBM::Map::Objects::MapSettings.initFromBitString object_data
|
61
72
|
|
62
|
-
when
|
73
|
+
when :map_export_settings
|
63
74
|
object = GBTiles::GBM::Map::Objects::MapExportSettings.initFromBitString object_data
|
64
75
|
|
65
76
|
else
|
@@ -4,51 +4,62 @@ module GBTiles
|
|
4
4
|
class MapSet
|
5
5
|
|
6
6
|
attr_accessor :objects
|
7
|
-
@objects
|
8
7
|
|
9
8
|
def initialize
|
10
9
|
@objects = []
|
11
10
|
end
|
12
11
|
|
13
|
-
def
|
12
|
+
def producer master_id = nil
|
14
13
|
@objects.select{ |a|
|
15
|
-
a.
|
14
|
+
a.object_type == GBTiles::GBM::Map::OBJECT_TYPE[:producer]
|
16
15
|
}.select{ |a|
|
17
16
|
master_id.nil? || a.object_id = master_id
|
18
17
|
}
|
19
18
|
end
|
20
19
|
|
21
|
-
def
|
20
|
+
def map master_id = nil
|
22
21
|
@objects.select{ |a|
|
23
|
-
a.
|
22
|
+
a.object_type == GBTiles::GBM::Map::OBJECT_TYPE[:map]
|
24
23
|
}.select{ |a|
|
25
24
|
master_id.nil? || a.object_id = master_id
|
26
25
|
}
|
27
26
|
end
|
28
27
|
|
29
|
-
def
|
28
|
+
def map_tile_data master_id = nil
|
30
29
|
@objects.select{ |a|
|
31
|
-
a.
|
30
|
+
a.object_type == GBTiles::GBM::Map::OBJECT_TYPE[:map_tile_data]
|
32
31
|
}.select{ |a|
|
33
32
|
master_id.nil? || a.object_id = master_id
|
34
33
|
}
|
35
34
|
end
|
36
35
|
|
37
|
-
def
|
36
|
+
def map_settings master_id = nil
|
38
37
|
@objects.select{ |a|
|
39
|
-
a.
|
38
|
+
a.object_type == GBTiles::GBM::Map::OBJECT_TYPE[:map_settings]
|
40
39
|
}.select{ |a|
|
41
40
|
master_id.nil? || a.object_id = master_id
|
42
41
|
}
|
43
42
|
end
|
44
43
|
|
45
|
-
def
|
44
|
+
def map_export_settings master_id = nil
|
46
45
|
@objects.select{ |a|
|
47
|
-
a.
|
46
|
+
a.object_type == GBTiles::GBM::Map::OBJECT_TYPE[:map_export_settings]
|
48
47
|
}.select{ |a|
|
49
48
|
master_id.nil? || a.object_id = master_id
|
50
49
|
}
|
51
50
|
end
|
51
|
+
|
52
|
+
def deleted
|
53
|
+
@objects.select{ |a|
|
54
|
+
a.object_type == GBTiles::GBM::Map::OBJECT_TYPE[:deleted]
|
55
|
+
}
|
56
|
+
end
|
57
|
+
|
58
|
+
def unknown
|
59
|
+
@objects.select{ |a|
|
60
|
+
GBTiles::GBM::Map::OBJECT_TYPE.key(a.object_type).nil?
|
61
|
+
}
|
62
|
+
end
|
52
63
|
end
|
53
64
|
end
|
54
65
|
end
|
@@ -1,14 +1,14 @@
|
|
1
1
|
module GBTiles
|
2
2
|
module GBM
|
3
3
|
module Map
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
4
|
+
OBJECT_TYPE = {
|
5
|
+
:producer => 0x01,
|
6
|
+
:map => 0x02,
|
7
|
+
:map_tile_data => 0x03,
|
8
|
+
:map_settings => 0x07,
|
9
|
+
:map_export_settings => 0x09,
|
10
|
+
:deleted => 0xFF
|
11
|
+
}
|
12
12
|
end
|
13
13
|
end
|
14
14
|
end
|
@@ -5,28 +5,15 @@ module GBTiles
|
|
5
5
|
class Map < GBTiles::GBM::Map::Object
|
6
6
|
|
7
7
|
attr_accessor :name
|
8
|
-
@name
|
9
|
-
|
10
8
|
attr_accessor :width
|
11
|
-
@width
|
12
|
-
|
13
9
|
attr_accessor :height
|
14
|
-
@height
|
15
|
-
|
16
10
|
attr_accessor :prop_count
|
17
|
-
@prop_count
|
18
|
-
|
19
11
|
attr_accessor :tile_file
|
20
|
-
@tile_file
|
21
|
-
|
22
12
|
attr_accessor :tile_count
|
23
|
-
@tile_count
|
24
|
-
|
25
13
|
attr_accessor :prop_color_count
|
26
|
-
@prop_color_count
|
27
14
|
|
28
15
|
def initialize
|
29
|
-
super GBTiles::GBM::Map::
|
16
|
+
super GBTiles::GBM::Map::OBJECT_TYPE[:map]
|
30
17
|
end
|
31
18
|
|
32
19
|
def self.initFromBitString src
|
@@ -5,49 +5,22 @@ module GBTiles
|
|
5
5
|
class MapExportSettings < GBTiles::GBM::Map::Object
|
6
6
|
|
7
7
|
attr_accessor :file_name
|
8
|
-
@file_name
|
9
|
-
|
10
8
|
attr_accessor :file_type
|
11
|
-
@file_type
|
12
|
-
|
13
9
|
attr_accessor :section_name
|
14
|
-
@section_name
|
15
|
-
|
16
10
|
attr_accessor :label_name
|
17
|
-
@label_name
|
18
|
-
|
19
11
|
attr_accessor :bank
|
20
|
-
@bank
|
21
|
-
|
22
12
|
attr_accessor :plane_count
|
23
|
-
@plane_count
|
24
|
-
|
25
13
|
attr_accessor :plane_order
|
26
|
-
@plane_order
|
27
|
-
|
28
14
|
attr_accessor :map_layout
|
29
|
-
@map_layout
|
30
|
-
|
31
15
|
attr_accessor :split
|
32
|
-
@split
|
33
|
-
|
34
16
|
attr_accessor :split_size
|
35
|
-
@split_size
|
36
|
-
|
37
17
|
attr_accessor :split_bank
|
38
|
-
@split_bank
|
39
|
-
|
40
18
|
attr_accessor :sel_tab
|
41
|
-
@sel_tab
|
42
|
-
|
43
19
|
attr_accessor :prop_count
|
44
|
-
@prop_count
|
45
|
-
|
46
20
|
attr_accessor :tile_offset
|
47
|
-
@tile_offset
|
48
21
|
|
49
22
|
def initialize
|
50
|
-
super GBTiles::GBM::Map::
|
23
|
+
super GBTiles::GBM::Map::OBJECT_TYPE[:map_export_settings]
|
51
24
|
end
|
52
25
|
|
53
26
|
def self.initFromBitString src
|