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