gbtiles 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +19 -0
- data/README.md +48 -0
- data/bin/gbm +27 -0
- data/bin/gbr +27 -0
- data/lib/gbtiles/data_type.rb +73 -0
- data/lib/gbtiles/gbm/cli/convert.rb +56 -0
- data/lib/gbtiles/gbm/export/asm/asm.h.erb +19 -0
- data/lib/gbtiles/gbm/export/asm/asm.rb +52 -0
- data/lib/gbtiles/gbm/export/asm/asm.s.erb +30 -0
- data/lib/gbtiles/gbm/import/gbm_file.rb +82 -0
- data/lib/gbtiles/gbm/map/map_set.rb +55 -0
- data/lib/gbtiles/gbm/map/object.rb +21 -0
- data/lib/gbtiles/gbm/map/object_type.rb +14 -0
- data/lib/gbtiles/gbm/map/objects/map.rb +49 -0
- data/lib/gbtiles/gbm/map/objects/map_export_settings.rb +77 -0
- data/lib/gbtiles/gbm/map/objects/map_settings.rb +73 -0
- data/lib/gbtiles/gbm/map/objects/map_tile_data.rb +40 -0
- data/lib/gbtiles/gbm/map/objects/map_tile_data_record.rb +40 -0
- data/lib/gbtiles/gbm/map/objects/producer.rb +33 -0
- data/lib/gbtiles/gbm/map/objects/unknown.rb +14 -0
- data/lib/gbtiles/gbr/cli/convert.rb +58 -0
- data/lib/gbtiles/gbr/export/asm/asm.h.erb +15 -0
- data/lib/gbtiles/gbr/export/asm/asm.rb +52 -0
- data/lib/gbtiles/gbr/export/asm/asm.s.erb +17 -0
- data/lib/gbtiles/gbr/import/gbr_file.rb +70 -0
- data/lib/gbtiles/gbr/tile_set/color_set.rb +12 -0
- data/lib/gbtiles/gbr/tile_set/export_type.rb +13 -0
- data/lib/gbtiles/gbr/tile_set/object.rb +18 -0
- data/lib/gbtiles/gbr/tile_set/object_type.rb +16 -0
- data/lib/gbtiles/gbr/tile_set/objects/palettes.rb +41 -0
- data/lib/gbtiles/gbr/tile_set/objects/producer.rb +33 -0
- data/lib/gbtiles/gbr/tile_set/objects/tile_data.rb +82 -0
- data/lib/gbtiles/gbr/tile_set/objects/tile_export.rb +105 -0
- data/lib/gbtiles/gbr/tile_set/objects/tile_import.rb +57 -0
- data/lib/gbtiles/gbr/tile_set/objects/tile_pal.rb +41 -0
- data/lib/gbtiles/gbr/tile_set/objects/tile_settings.rb +65 -0
- data/lib/gbtiles/gbr/tile_set/objects/unknown.rb +14 -0
- data/lib/gbtiles/gbr/tile_set/sgb_palettes.rb +13 -0
- data/lib/gbtiles/gbr/tile_set/split_order.rb +13 -0
- data/lib/gbtiles/gbr/tile_set/tile_set.rb +57 -0
- data/lib/gbtiles/helpers/fixnum.rb +6 -0
- data/lib/gbtiles/version.rb +3 -0
- metadata +104 -0
@@ -0,0 +1,55 @@
|
|
1
|
+
module GBTiles
|
2
|
+
module GBM
|
3
|
+
module Map
|
4
|
+
class MapSet
|
5
|
+
|
6
|
+
attr_accessor :objects
|
7
|
+
@objects
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
@objects = []
|
11
|
+
end
|
12
|
+
|
13
|
+
def maps master_id = nil
|
14
|
+
@objects.select{ |a|
|
15
|
+
a.is_a? GBTiles::GBM::Map::Objects::Map
|
16
|
+
}.select{ |a|
|
17
|
+
master_id.nil? || a.object_id = master_id
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
21
|
+
def map_export_settings master_id = nil
|
22
|
+
@objects.select{ |a|
|
23
|
+
a.is_a? GBTiles::GBM::Map::Objects::MapExportSettings
|
24
|
+
}.select{ |a|
|
25
|
+
master_id.nil? || a.object_id = master_id
|
26
|
+
}
|
27
|
+
end
|
28
|
+
|
29
|
+
def map_settings master_id = nil
|
30
|
+
@objects.select{ |a|
|
31
|
+
a.is_a? GBTiles::GBM::Map::Objects::MapSettings
|
32
|
+
}.select{ |a|
|
33
|
+
master_id.nil? || a.object_id = master_id
|
34
|
+
}
|
35
|
+
end
|
36
|
+
|
37
|
+
def map_tile_data master_id = nil
|
38
|
+
@objects.select{ |a|
|
39
|
+
a.is_a? GBTiles::GBM::Map::Objects::MapTileData
|
40
|
+
}.select{ |a|
|
41
|
+
master_id.nil? || a.object_id = master_id
|
42
|
+
}
|
43
|
+
end
|
44
|
+
|
45
|
+
def producers master_id = nil
|
46
|
+
@objects.select{ |a|
|
47
|
+
a.is_a? GBTiles::GBM::Map::Objects::Producer
|
48
|
+
}.select{ |a|
|
49
|
+
master_id.nil? || a.object_id = master_id
|
50
|
+
}
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module GBTiles
|
2
|
+
module GBM
|
3
|
+
module Map
|
4
|
+
class Object
|
5
|
+
|
6
|
+
attr_accessor :object_type
|
7
|
+
@object_type
|
8
|
+
|
9
|
+
attr_accessor :object_id
|
10
|
+
@object_id
|
11
|
+
|
12
|
+
attr_accessor :master_id
|
13
|
+
@master_id
|
14
|
+
|
15
|
+
def initialize object_type
|
16
|
+
@object_type = object_type
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module GBTiles
|
2
|
+
module GBM
|
3
|
+
module Map
|
4
|
+
module Objects
|
5
|
+
class Map < GBTiles::GBM::Map::Object
|
6
|
+
|
7
|
+
attr_accessor :name
|
8
|
+
@name
|
9
|
+
|
10
|
+
attr_accessor :width
|
11
|
+
@width
|
12
|
+
|
13
|
+
attr_accessor :height
|
14
|
+
@height
|
15
|
+
|
16
|
+
attr_accessor :prop_count
|
17
|
+
@prop_count
|
18
|
+
|
19
|
+
attr_accessor :tile_file
|
20
|
+
@tile_file
|
21
|
+
|
22
|
+
attr_accessor :tile_count
|
23
|
+
@tile_count
|
24
|
+
|
25
|
+
attr_accessor :prop_color_count
|
26
|
+
@prop_color_count
|
27
|
+
|
28
|
+
def initialize
|
29
|
+
super GBTiles::GBM::Map::ObjectType::MAP
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.initFromBitString src
|
33
|
+
object = GBTiles::GBM::Map::Objects::Map.new
|
34
|
+
|
35
|
+
object.name = GBTiles::DataType.string!(src, 128)
|
36
|
+
object.width = GBTiles::DataType.long!(src)
|
37
|
+
object.height = GBTiles::DataType.long!(src)
|
38
|
+
object.prop_count = GBTiles::DataType.long!(src)
|
39
|
+
object.tile_file = GBTiles::DataType.string!(src, 256)
|
40
|
+
object.tile_count = GBTiles::DataType.long!(src)
|
41
|
+
object.prop_color_count = GBTiles::DataType.long!(src)
|
42
|
+
|
43
|
+
object
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
module GBTiles
|
2
|
+
module GBM
|
3
|
+
module Map
|
4
|
+
module Objects
|
5
|
+
class MapExportSettings < GBTiles::GBM::Map::Object
|
6
|
+
|
7
|
+
attr_accessor :file_name
|
8
|
+
@file_name
|
9
|
+
|
10
|
+
attr_accessor :file_type
|
11
|
+
@file_type
|
12
|
+
|
13
|
+
attr_accessor :section_name
|
14
|
+
@section_name
|
15
|
+
|
16
|
+
attr_accessor :label_name
|
17
|
+
@label_name
|
18
|
+
|
19
|
+
attr_accessor :bank
|
20
|
+
@bank
|
21
|
+
|
22
|
+
attr_accessor :plane_count
|
23
|
+
@plane_count
|
24
|
+
|
25
|
+
attr_accessor :plane_order
|
26
|
+
@plane_order
|
27
|
+
|
28
|
+
attr_accessor :map_layout
|
29
|
+
@map_layout
|
30
|
+
|
31
|
+
attr_accessor :split
|
32
|
+
@split
|
33
|
+
|
34
|
+
attr_accessor :split_size
|
35
|
+
@split_size
|
36
|
+
|
37
|
+
attr_accessor :split_bank
|
38
|
+
@split_bank
|
39
|
+
|
40
|
+
attr_accessor :sel_tab
|
41
|
+
@sel_tab
|
42
|
+
|
43
|
+
attr_accessor :prop_count
|
44
|
+
@prop_count
|
45
|
+
|
46
|
+
attr_accessor :tile_offset
|
47
|
+
@tile_offset
|
48
|
+
|
49
|
+
def initialize
|
50
|
+
super GBTiles::GBM::Map::ObjectType::MAP_EXPORT_SETTINGS
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.initFromBitString src
|
54
|
+
object = GBTiles::GBM::Map::Objects::MapExportSettings.new
|
55
|
+
|
56
|
+
object.file_name = GBTiles::DataType.string!(src, 255)
|
57
|
+
object.file_type = GBTiles::DataType.byte!(src)
|
58
|
+
object.section_name = GBTiles::DataType.string!(src, 40)
|
59
|
+
object.label_name = GBTiles::DataType.string!(src, 40)
|
60
|
+
object.bank = GBTiles::DataType.byte!(src)
|
61
|
+
object.plane_count = GBTiles::DataType.word!(src)
|
62
|
+
object.plane_order = GBTiles::DataType.word!(src)
|
63
|
+
object.map_layout = GBTiles::DataType.word!(src)
|
64
|
+
object.split = GBTiles::DataType.boolean!(src)
|
65
|
+
object.split_size = GBTiles::DataType.long!(src)
|
66
|
+
object.split_bank = GBTiles::DataType.boolean!(src)
|
67
|
+
object.sel_tab = GBTiles::DataType.byte!(src)
|
68
|
+
object.prop_count = GBTiles::DataType.word!(src)
|
69
|
+
object.tile_offset = GBTiles::DataType.word!(src)
|
70
|
+
|
71
|
+
object
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
module GBTiles
|
2
|
+
module GBM
|
3
|
+
module Map
|
4
|
+
module Objects
|
5
|
+
class MapSettings < GBTiles::GBM::Map::Object
|
6
|
+
|
7
|
+
attr_accessor :form_width
|
8
|
+
@form_width
|
9
|
+
|
10
|
+
attr_accessor :form_height
|
11
|
+
@form_height
|
12
|
+
|
13
|
+
attr_accessor :form_maximized
|
14
|
+
@form_maximized
|
15
|
+
|
16
|
+
attr_accessor :info_panel
|
17
|
+
@info_panel
|
18
|
+
|
19
|
+
attr_accessor :grid
|
20
|
+
@grid
|
21
|
+
|
22
|
+
attr_accessor :double_markers
|
23
|
+
@double_markers
|
24
|
+
|
25
|
+
attr_accessor :prop_colors
|
26
|
+
@prop_colors
|
27
|
+
|
28
|
+
attr_accessor :zoom
|
29
|
+
@zoom
|
30
|
+
|
31
|
+
attr_accessor :color_set
|
32
|
+
@color_set
|
33
|
+
|
34
|
+
attr_accessor :bookmarks
|
35
|
+
@bookmarks
|
36
|
+
|
37
|
+
attr_accessor :block_fill_pattern
|
38
|
+
@block_fill_pattern
|
39
|
+
|
40
|
+
attr_accessor :block_fill_width
|
41
|
+
@block_fill_width
|
42
|
+
|
43
|
+
attr_accessor :block_fill_height
|
44
|
+
@block_fill_height
|
45
|
+
|
46
|
+
def initialize
|
47
|
+
super GBTiles::GBM::Map::ObjectType::MAP_SETTINGS
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.initFromBitString src
|
51
|
+
object = GBTiles::GBM::Map::Objects::MapSettings.new
|
52
|
+
|
53
|
+
object.form_width = GBTiles::DataType.long!(src)
|
54
|
+
object.form_height = GBTiles::DataType.long!(src)
|
55
|
+
object.form_maximized = GBTiles::DataType.boolean!(src)
|
56
|
+
object.info_panel = GBTiles::DataType.boolean!(src)
|
57
|
+
object.grid = GBTiles::DataType.boolean!(src)
|
58
|
+
object.double_markers = GBTiles::DataType.boolean!(src)
|
59
|
+
object.prop_colors = GBTiles::DataType.boolean!(src)
|
60
|
+
object.zoom = GBTiles::DataType.word!(src)
|
61
|
+
object.color_set = GBTiles::DataType.word!(src)
|
62
|
+
object.bookmarks = src.slice!(3)
|
63
|
+
object.block_fill_pattern = GBTiles::DataType.long!(src)
|
64
|
+
object.block_fill_width = GBTiles::DataType.long!(src)
|
65
|
+
object.block_fill_height = GBTiles::DataType.long!(src)
|
66
|
+
|
67
|
+
object
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module GBTiles
|
2
|
+
module GBM
|
3
|
+
module Map
|
4
|
+
module Objects
|
5
|
+
class MapTileData < GBTiles::GBM::Map::Object
|
6
|
+
|
7
|
+
attr_accessor :records
|
8
|
+
@records
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
super GBTiles::GBM::Map::ObjectType::MAP_TILE_DATA
|
12
|
+
|
13
|
+
@records = []
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.initFromBitString src
|
17
|
+
object = GBTiles::GBM::Map::Objects::MapTileData.new
|
18
|
+
|
19
|
+
while !src.empty?
|
20
|
+
# Get the record
|
21
|
+
number = src.slice!(0..2) # Get 24-bits (3 bytes)
|
22
|
+
number = 0.chr + number # Convert from 24-bit to 32-bit
|
23
|
+
number = number.unpack("N").first # Unpack integer
|
24
|
+
|
25
|
+
object.records.push(
|
26
|
+
GBTiles::GBM::Map::Objects::MapTileDataRecord.initFromBitString(number)
|
27
|
+
)
|
28
|
+
end
|
29
|
+
|
30
|
+
object
|
31
|
+
end
|
32
|
+
|
33
|
+
def row width, row
|
34
|
+
@records[(width * (row - 1))..((width * row) - 1)]
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module GBTiles
|
2
|
+
module GBM
|
3
|
+
module Map
|
4
|
+
module Objects
|
5
|
+
class MapTileDataRecord
|
6
|
+
|
7
|
+
attr_accessor :tile_number
|
8
|
+
@tile_number
|
9
|
+
|
10
|
+
attr_accessor :gbc_palette
|
11
|
+
@gbc_palette
|
12
|
+
|
13
|
+
attr_accessor :sgb_palette
|
14
|
+
@sgb_palette
|
15
|
+
|
16
|
+
attr_accessor :flipped_horizontally
|
17
|
+
@flipped_horizontally
|
18
|
+
|
19
|
+
attr_accessor :flipped_vertically
|
20
|
+
@flipped_vertically
|
21
|
+
|
22
|
+
def initialize
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.initFromBitString number
|
26
|
+
record = GBTiles::GBM::Map::Objects::MapTileDataRecord.new
|
27
|
+
|
28
|
+
record.tile_number = number.bits(0..9)
|
29
|
+
record.gbc_palette = number.bits(10..14)
|
30
|
+
record.sgb_palette = number.bits(16..18)
|
31
|
+
record.flipped_horizontally = number.bits(22..22)
|
32
|
+
record.flipped_vertically = number.bits(23..23)
|
33
|
+
|
34
|
+
record
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module GBTiles
|
2
|
+
module GBM
|
3
|
+
module Map
|
4
|
+
module Objects
|
5
|
+
class Producer < GBTiles::GBM::Map::Object
|
6
|
+
|
7
|
+
attr_accessor :name
|
8
|
+
@name
|
9
|
+
|
10
|
+
attr_accessor :version
|
11
|
+
@version
|
12
|
+
|
13
|
+
attr_accessor :info
|
14
|
+
@info
|
15
|
+
|
16
|
+
def initialize
|
17
|
+
super GBTiles::GBM::Map::ObjectType::PRODUCER
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.initFromBitString(src)
|
21
|
+
object = GBTiles::GBM::Map::Objects::Producer.new
|
22
|
+
|
23
|
+
object.name = GBTiles::DataType.string!(src, 128)
|
24
|
+
object.version = GBTiles::DataType.string!(src, 10)
|
25
|
+
object.info = GBTiles::DataType.string!(src, 128)
|
26
|
+
|
27
|
+
object
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require "gbtiles/data_type"
|
2
|
+
|
3
|
+
require "gbtiles/gbr/tile_set/tile_set"
|
4
|
+
require "gbtiles/gbr/tile_set/object"
|
5
|
+
require "gbtiles/gbr/tile_set/object_type"
|
6
|
+
require "gbtiles/gbr/tile_set/split_order"
|
7
|
+
require "gbtiles/gbr/tile_set/color_set"
|
8
|
+
|
9
|
+
require "gbtiles/gbr/tile_set/objects/palettes"
|
10
|
+
require "gbtiles/gbr/tile_set/objects/producer"
|
11
|
+
require "gbtiles/gbr/tile_set/objects/tile_data"
|
12
|
+
require "gbtiles/gbr/tile_set/objects/tile_export"
|
13
|
+
require "gbtiles/gbr/tile_set/objects/tile_import"
|
14
|
+
require "gbtiles/gbr/tile_set/objects/tile_pal"
|
15
|
+
require "gbtiles/gbr/tile_set/objects/tile_settings"
|
16
|
+
require "gbtiles/gbr/tile_set/objects/unknown"
|
17
|
+
|
18
|
+
require "gbtiles/gbr/import/gbr_file"
|
19
|
+
|
20
|
+
require "gbtiles/gbr/export/asm/asm"
|
21
|
+
|
22
|
+
desc "Convert a file from GBR format"
|
23
|
+
arg_name "input"
|
24
|
+
command :convert do |c|
|
25
|
+
|
26
|
+
c.desc "Output filename (*.s)"
|
27
|
+
c.flag :output
|
28
|
+
|
29
|
+
c.action do |global_options,options,args|
|
30
|
+
# Prepare input file
|
31
|
+
if !args[0].nil? then
|
32
|
+
# Use file
|
33
|
+
input_file = File.open(args[0], "rb")
|
34
|
+
else
|
35
|
+
# Use STDIN
|
36
|
+
input_file = $stdin
|
37
|
+
end
|
38
|
+
|
39
|
+
# Prepare output file
|
40
|
+
if !options[:output].nil? then
|
41
|
+
# Use file
|
42
|
+
output_file = File.open(options[:output], "w")
|
43
|
+
else
|
44
|
+
# Use STDOUT
|
45
|
+
output_file = $stdout
|
46
|
+
end
|
47
|
+
|
48
|
+
# Do import
|
49
|
+
import = GBTiles::GBR::Import::GBRFile.open(input_file)
|
50
|
+
input_file.close
|
51
|
+
|
52
|
+
# Do export
|
53
|
+
export = GBTiles::GBR::Export::ASM::ASM.new
|
54
|
+
export.tile_set = import.tile_set
|
55
|
+
export.write(output_file)
|
56
|
+
output_file.close
|
57
|
+
end
|
58
|
+
end
|