class WolfRpg::Database::Type

Attributes

data[RW]
description[RW]
fields[RW]
name[RW]
unknown1[RW]

Public Class Methods

new(coder) click to toggle source

Initialize from project file IO

# File lib/wolfrpg/database.rb, line 89
def initialize(coder)
  @name = coder.read_string
  @fields = Array.new(coder.read_int)
  @fields.each_index do |i|
    @fields[i] = Field.new(coder)
  end
  @data = Array.new(coder.read_int)
  @data.each_index do |i|
    @data[i] = Data.new(coder)
  end
  @description = coder.read_string

  # Add misc data to fields. It's separated for some reason.

  # This appears to always be 0x64, but save it anyway
  @field_type_list_size = coder.read_int
  index = 0
  while index < @fields.size
    @fields[index].type = coder.read_byte
    index += 1
  end
  coder.skip(@field_type_list_size - index)

  coder.read_int.times do |i|
    @fields[i].unknown1 = coder.read_string
  end
  coder.read_int.times do |i|
    @fields[i].string_args = Array.new(coder.read_int)
    @fields[i].string_args.each_index do |j|
      @fields[i].string_args[j] = coder.read_string
    end
  end
  coder.read_int.times do |i|
    @fields[i].args = Array.new(coder.read_int)
    @fields[i].args.each_index do |j|
      @fields[i].args[j] = coder.read_int
    end
  end
  coder.read_int.times do |i|
    @fields[i].default_value = coder.read_int
  end
end

Public Instance Methods

dump_dat(coder) click to toggle source
# File lib/wolfrpg/database.rb, line 195
def dump_dat(coder)
  coder.write(DAT_TYPE_SEPARATOR)
  coder.write_int(@unknown1)
  coder.write_int(@fields.size)
  @fields.each do |field|
    field.dump_dat(coder)
  end
  coder.write_int(@data.size)
  @data.each do |datum|
    datum.dump_dat(coder)
  end
end
dump_project(coder) click to toggle source
# File lib/wolfrpg/database.rb, line 132
def dump_project(coder)
  coder.write_string(@name)
  coder.write_int(@fields.size)
  @fields.each do |field|
    field.dump_project(coder)
  end
  coder.write_int(@data.size)
  @data.each do |datum|
    datum.dump_project(coder)
  end
  coder.write_string(@description)

  # Dump misc field data
  coder.write_int(@field_type_list_size)
  index = 0
  while index < @fields.size
    coder.write_byte(@fields[index].type)
    index += 1
  end
  while index < @field_type_list_size
    coder.write_byte(0)
    index += 1
  end
  coder.write_int(@fields.size)
  @fields.each do |field|
    coder.write_string(field.unknown1)
  end
  coder.write_int(@fields.size)
  @fields.each do |field|
    coder.write_int(field.string_args.size)
    field.string_args.each do |arg|
      coder.write_string(arg)
    end
  end
  coder.write_int(@fields.size)
  @fields.each do |field|
    coder.write_int(field.args.size)
    field.args.each do |arg|
      coder.write_int(arg)
    end
  end
  coder.write_int(@fields.size)
  @fields.each do |field|
    coder.write_int(field.default_value)
  end
end
read_dat(coder) click to toggle source

Read the rest of the data from the dat file

# File lib/wolfrpg/database.rb, line 180
def read_dat(coder)
  coder.verify(DAT_TYPE_SEPARATOR)
  @unknown1 = coder.read_int
  fields_size = coder.read_int
  @fields = @fields[0, fields_size] if fields_size != @fields.size
  @fields.each do |field|
    field.read_dat(coder)
  end
  data_size = coder.read_int
  @data = @data[0, data_size] if data_size != @data.size
  @data.each do |datum|
    datum.read_dat(coder, @fields)
  end
end