gbtiles 0.0.3 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +14 -0
  3. data/bin/gbm +0 -3
  4. data/bin/gbr +0 -3
  5. data/lib/gbtiles/gbm/cli/convert.rb +8 -17
  6. data/lib/gbtiles/gbm/export/asm/asm.h.erb +3 -3
  7. data/lib/gbtiles/gbm/export/asm/asm.rb +7 -1
  8. data/lib/gbtiles/gbm/export/asm/asm.s.erb +4 -4
  9. data/lib/gbtiles/gbm/import/gbm_file.rb +24 -13
  10. data/lib/gbtiles/gbm/layer.rb +9 -0
  11. data/lib/gbtiles/gbm/map/map_set.rb +22 -11
  12. data/lib/gbtiles/gbm/map/object.rb +0 -5
  13. data/lib/gbtiles/gbm/map/object_type.rb +8 -8
  14. data/lib/gbtiles/gbm/map/objects/map.rb +1 -14
  15. data/lib/gbtiles/gbm/map/objects/map_export_settings.rb +1 -28
  16. data/lib/gbtiles/gbm/map/objects/map_settings.rb +1 -26
  17. data/lib/gbtiles/gbm/map/objects/map_tile_data.rb +1 -2
  18. data/lib/gbtiles/gbm/map/objects/map_tile_data_record.rb +0 -9
  19. data/lib/gbtiles/gbm/map/objects/producer.rb +2 -7
  20. data/lib/gbtiles/gbm/map/objects/unknown.rb +0 -1
  21. data/lib/gbtiles/gbr/cli/convert.rb +2 -19
  22. data/lib/gbtiles/gbr/export/asm/asm.rb +0 -1
  23. data/lib/gbtiles/gbr/import/gbr_file.rb +37 -21
  24. data/lib/gbtiles/gbr/tile_set/color_set.rb +6 -6
  25. data/lib/gbtiles/gbr/tile_set/export_type.rb +7 -7
  26. data/lib/gbtiles/gbr/tile_set/object.rb +0 -3
  27. data/lib/gbtiles/gbr/tile_set/object_type.rb +10 -10
  28. data/lib/gbtiles/gbr/tile_set/objects/palettes.rb +1 -10
  29. data/lib/gbtiles/gbr/tile_set/objects/producer.rb +1 -6
  30. data/lib/gbtiles/gbr/tile_set/objects/tile_data.rb +2 -13
  31. data/lib/gbtiles/gbr/tile_set/objects/tile_export.rb +1 -42
  32. data/lib/gbtiles/gbr/tile_set/objects/tile_import.rb +1 -18
  33. data/lib/gbtiles/gbr/tile_set/objects/tile_pal.rb +1 -10
  34. data/lib/gbtiles/gbr/tile_set/objects/tile_settings.rb +1 -22
  35. data/lib/gbtiles/gbr/tile_set/objects/unknown.rb +0 -1
  36. data/lib/gbtiles/gbr/tile_set/sgb_palettes.rb +7 -7
  37. data/lib/gbtiles/gbr/tile_set/split_order.rb +6 -6
  38. data/lib/gbtiles/gbr/tile_set/tile_set.rb +20 -9
  39. data/lib/gbtiles/{data_type.rb → helpers/data_type.rb} +19 -11
  40. data/lib/gbtiles/version.rb +1 -1
  41. metadata +47 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5be37ad53523b74a26c967713c55cfc23b362d5a
4
- data.tar.gz: 59a53120142ede026df2e71dded36df0595b3343
3
+ metadata.gz: 5c47f1925b50e61d331766cb83c1bbc9c6212189
4
+ data.tar.gz: e4dbe6e1333ae545493ed3a307713cdb19c675fc
5
5
  SHA512:
6
- metadata.gz: b56b85838a7d43b709b0a2544146246a022f2bd636906d3a8bc13f9e945e67d2e8d54c279445ebbe7bc70bc9fdb0b3fdc5909401becc40394522bbbf86967407
7
- data.tar.gz: d203ff9cddd9eef3c29ead57f997bf6e73bb6bd8b6a9d8e0d37099592015476503b510075e548ee07d3a43a7a06f9c8d5bf65b0966597eba68f81d7ddb35808c
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
@@ -1,11 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
2
  require "gli"
3
-
4
3
  include GLI::App
5
4
 
6
5
  require "gbtiles/version"
7
- require "gbtiles/helpers/fixnum"
8
-
9
6
  require "gbtiles/gbm/cli/convert"
10
7
 
11
8
  program_desc "Converts .GBM files to different formats for the Game Boy"
data/bin/gbr CHANGED
@@ -1,11 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
2
  require "gli"
3
-
4
3
  include GLI::App
5
4
 
6
5
  require "gbtiles/version"
7
- require "gbtiles/helpers/fixnum"
8
-
9
6
  require "gbtiles/gbr/cli/convert"
10
7
 
11
8
  program_desc "Converts .GBR files to different formats for the Game Boy"
@@ -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 (*.s)"
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.producers.first.name %> (v<%= map_set.producers.first.version %>)
8
- * <%= map_set.producers.first.info %>
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.maps.each do |map| -%>
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
- @map_set
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.producers.first.name %> (v<%= map_set.producers.first.version %>)
7
- ; <%= map_set.producers.first.info %>
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.maps.each do |map| -%>
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(file)
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 "Invalid file, header does not start with GBO"
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 "Invalid file, can only import version number 1"
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 GBTiles::GBM::Map::ObjectType::PRODUCER
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 GBTiles::GBM::Map::ObjectType::MAP
64
+ when :map
54
65
  object = GBTiles::GBM::Map::Objects::Map.initFromBitString object_data
55
66
 
56
- when GBTiles::GBM::Map::ObjectType::MAP_TILE_DATA
67
+ when :map_tile_data
57
68
  object = GBTiles::GBM::Map::Objects::MapTileData.initFromBitString object_data
58
69
 
59
- when GBTiles::GBM::Map::ObjectType::MAP_SETTINGS
70
+ when :map_settings
60
71
  object = GBTiles::GBM::Map::Objects::MapSettings.initFromBitString object_data
61
72
 
62
- when GBTiles::GBM::Map::ObjectType::MAP_EXPORT_SETTINGS
73
+ when :map_export_settings
63
74
  object = GBTiles::GBM::Map::Objects::MapExportSettings.initFromBitString object_data
64
75
 
65
76
  else
@@ -0,0 +1,9 @@
1
+ module GBTiles
2
+ module GBM
3
+ LAYER = {
4
+ :bkg => 0x00,
5
+ :win => 0x80,
6
+ :sprite => 0x00
7
+ }
8
+ end
9
+ end
@@ -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 maps master_id = nil
12
+ def producer master_id = nil
14
13
  @objects.select{ |a|
15
- a.is_a? GBTiles::GBM::Map::Objects::Map
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 map_export_settings master_id = nil
20
+ def map master_id = nil
22
21
  @objects.select{ |a|
23
- a.is_a? GBTiles::GBM::Map::Objects::MapExportSettings
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 map_settings master_id = nil
28
+ def map_tile_data master_id = nil
30
29
  @objects.select{ |a|
31
- a.is_a? GBTiles::GBM::Map::Objects::MapSettings
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 map_tile_data master_id = nil
36
+ def map_settings master_id = nil
38
37
  @objects.select{ |a|
39
- a.is_a? GBTiles::GBM::Map::Objects::MapTileData
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 producers master_id = nil
44
+ def map_export_settings master_id = nil
46
45
  @objects.select{ |a|
47
- a.is_a? GBTiles::GBM::Map::Objects::Producer
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
@@ -4,13 +4,8 @@ module GBTiles
4
4
  class Object
5
5
 
6
6
  attr_accessor :object_type
7
- @object_type
8
-
9
7
  attr_accessor :object_id
10
- @object_id
11
-
12
8
  attr_accessor :master_id
13
- @master_id
14
9
 
15
10
  def initialize object_type
16
11
  @object_type = object_type
@@ -1,14 +1,14 @@
1
1
  module GBTiles
2
2
  module GBM
3
3
  module Map
4
- module ObjectType
5
- PRODUCER = 0x01
6
- MAP = 0x02
7
- MAP_TILE_DATA = 0x03
8
- MAP_SETTINGS = 0x07
9
- MAP_EXPORT_SETTINGS = 0x09
10
- DELETED = 0xFF
11
- end
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::ObjectType::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::ObjectType::MAP_EXPORT_SETTINGS
23
+ super GBTiles::GBM::Map::OBJECT_TYPE[:map_export_settings]
51
24
  end
52
25
 
53
26
  def self.initFromBitString src