class WolfRpg::Map
Constants
- MAGIC_NUMBER
Attributes
events[R]
filename[R]
DEBUG
height[R]
tileset_id[R]
width[R]
Public Class Methods
new(filename)
click to toggle source
# File lib/wolfrpg/map.rb, line 11 def initialize(filename) @filename = File.basename(filename, '.*') FileCoder.open(filename, :read) do |coder| coder.verify(MAGIC_NUMBER) @tileset_id = coder.read_int # Read basic data @width = coder.read_int @height = coder.read_int coder.skip(4) # skip event count @events = [] # Read tiles #TODO: interpret this data later @tiles = coder.read(@width * @height * 3 * 4) # Read events while (indicator = coder.read_byte) == 0x6F @events << Event.new(coder) end if indicator != 0x66 raise "unexpected event indicator: #{indicator.to_s(16)}" end unless coder.eof? raise "file not fully parsed" end end end
Public Instance Methods
dump(filename)
click to toggle source
# File lib/wolfrpg/map.rb, line 41 def dump(filename) FileCoder.open(filename, :write) do |coder| coder.write(MAGIC_NUMBER) coder.write_int(@tileset_id) coder.write_int(@width) coder.write_int(@height) coder.write_int(@events.size) coder.write(@tiles) @events.each do |event| next unless event coder.write_byte(0x6F) event.dump(coder) end coder.write_byte(0x66) end end
each_filename() { |fn| ... }
click to toggle source
# File lib/wolfrpg/map.rb, line 58 def each_filename @events.each do |event| event.each_filename do |fn| yield fn end end end
grep(needle)
click to toggle source
DEBUG method that searches for a string somewhere in the map
# File lib/wolfrpg/map.rb, line 67 def grep(needle) @events.each do |event| event.pages.each do |page| page.commands.each_with_index do |command, line| command.string_args.each do |arg| if m = arg.match(needle) print "#{@filename}/#{event.id}/#{page.id+1}/#{line+1}: #{command.cid}\n\t#{command.args}\n\t#{command.string_args}\n" break end end end end end end
grep_cid(cid)
click to toggle source
# File lib/wolfrpg/map.rb, line 82 def grep_cid(cid) @events.each do |event| event.pages.each do |page| page.commands.each_with_index do |command, line| if command.cid == cid print "#{@filename}/#{event.id}/#{page.id+1}/#{line+1}: #{command.cid}\n\t#{command.args}\n\t#{command.string_args}\n" end end end end end