gbtiles 0.0.3 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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