#===============================================================================
# Filename:    rgss_internal.rb
#
# Developer:   Raku (rakudayo@gmail.com)
#
# Description: This file contains Ruby implementations of the RGSS Built-in
#    classes Table, Color, and Tone.  These classes are required to load and
#    dump the .rxdata files used by RMXP to store game data.
#===============================================================================
# These classes are based on the version provided by vgvgf on the RMXP.org 
# forums at the link below.  Thanks vgvgf!!
#
#    http://www.rmxp.org/forums/viewtopic.php?t=49838
#
# I have modified them to more closely mimic the behavior of the RGSS Built-in
# classes Table, Color, and Tone.  When these classes are dumped by the 
# importer/exporter scripts, they can now be correctly read by RMXP.
#===============================================================================

class Table
  def initialize(x, y = 0, z = 0)
    @dim = 1 + (y > 0 ? 1 : 0) + (z > 0 ? 1 : 0)
    @xsize, @ysize, @zsize = x, [y, 1].max, [z, 1].max
    @data = Array.new(x * y * z, 0)
  end
  def [](x, y = 0, z = 0)
    @data[x + y * @xsize + z * @xsize * @ysize]
  end
  def []=(*args)
    x = args[0]
    y = args.size > 2 ? args[1] : 0
    z = args.size > 3 ? args[2] : 0
    v = args.pop
    @data[x + y * @xsize + z * @xsize * @ysize] = v
  end
  def _dump(d = 0)
    [@dim, @xsize, @ysize, @zsize, @xsize * @ysize * @zsize].pack('LLLLL') <<
    @data.pack("S#{@xsize * @ysize * @zsize}")
  end
  def self._load(s)
    size, nx, ny, nz, items = *s[0, 20].unpack('LLLLL')
    t = Table.new(*[nx, ny, nz][0,size])
    t.data = s[20, items * 2].unpack("S#{items}")
    t
  end
  attr_accessor(:xsize, :ysize, :zsize, :data)
end

class Color
  def initialize(r, g, b, a = 255.0)
    self.red = r.to_f
    self.green = g.to_f
    self.blue = b.to_f
    self.alpha = a.to_f
  end
  def set(r, g, b, a = 255.0)
    self.red = r.to_f
    self.green = g.to_f
    self.blue = b.to_f
    self.alpha = a.to_f
  end
  attr_reader(:red, :green, :blue, :alpha)
  def red=(val)
    @red   = [[val.to_f, 0.0].max, 255.0].min
  end
  def green=(val)
    @green = [[val.to_f, 0.0].max, 255.0].min
  end
  def blue=(val)
    @blue  = [[val.to_f, 0.0].max, 255.0].min
  end
  def alpha=(val)
    @alpha = [[val.to_f, 0.0].max, 255.0].min
  end
  def color
    Color.new(@red, @green, @blue, @alpha)
  end
  def _dump(d = 0)
    [@red, @green, @blue, @alpha].pack('d4')
  end
  def self._load(s)
    Color.new(*s.unpack('d4'))
  end
end

class Tone
  def initialize(r, g, b, a = 0.0)
    self.red = r.to_f
    self.green = g.to_f
    self.blue = b.to_f
    self.gray = a.to_f
  end
  def set(r, g, b, a = 0.0)
    self.red = r.to_f
    self.green = g.to_f
    self.blue = b.to_f
    self.gray = a.to_f
  end
  def color
    Color.new(@red, @green, @blue, @gray)
  end
  def _dump(d = 0)
    [@red, @green, @blue, @gray].pack('d4')
  end
  def self._load(s)
    Tone.new(*s.unpack('d4'))
  end
  attr_reader(:red, :green, :blue, :gray)
  def red=(val)
    @red   = [[val.to_f, -255.0].max, 255.0].min
  end
  def green=(val)
    @green = [[val.to_f, -255.0].max, 255.0].min
  end
  def blue=(val)
    @blue  = [[val.to_f, -255.0].max, 255.0].min
  end
  def gray=(val)
    @gray  = [[val.to_f, 0.0].max, 255.0].min
  end
end


#===============================================================================
# Filename:    rgss_rpg.rb
#
# Description: This file contains the default implementations of all of the
#    RGSS classes in the RPG module.  They are needed here because we use them
#    outside of RMXP to dump and load the .rxdata files.
#===============================================================================

module RPG
  class Actor
	def initialize
	  @id = 0
	  @name = ""
	  @class_id = 1
	  @initial_level = 1
	  @final_level = 99
	  @exp_basis = 30
	  @exp_inflation = 30
	  @character_name = ""
	  @character_hue = 0
	  @battler_name = ""
	  @battler_hue = 0
	  @parameters = Table.new(6,100)
	  for i in 1..99
		@parameters[0,i] = 500+i*50
		@parameters[1,i] = 500+i*50
		@parameters[2,i] = 50+i*5
		@parameters[3,i] = 50+i*5
		@parameters[4,i] = 50+i*5
		@parameters[5,i] = 50+i*5
	  end
	  @weapon_id = 0
	  @armor1_id = 0
	  @armor2_id = 0
	  @armor3_id = 0
	  @armor4_id = 0
	  @weapon_fix = false
	  @armor1_fix = false
	  @armor2_fix = false
	  @armor3_fix = false
	  @armor4_fix = false
	end
	attr_accessor :id
	attr_accessor :name
	attr_accessor :class_id
	attr_accessor :initial_level
	attr_accessor :final_level
	attr_accessor :exp_basis
	attr_accessor :exp_inflation
	attr_accessor :character_name
	attr_accessor :character_hue
	attr_accessor :battler_name
	attr_accessor :battler_hue
	attr_accessor :parameters
	attr_accessor :weapon_id
	attr_accessor :armor1_id
	attr_accessor :armor2_id
	attr_accessor :armor3_id
	attr_accessor :armor4_id
	attr_accessor :weapon_fix
	attr_accessor :armor1_fix
	attr_accessor :armor2_fix
	attr_accessor :armor3_fix
	attr_accessor :armor4_fix
  end
  
  class Animation
	def initialize
	  @id = 0
	  @name = ""
	  @animation_name = ""
	  @animation_hue = 0
	  @position = 1
	  @frame_max = 1
	  @frames = [RPG::Animation::Frame.new]
	  @timings = []
	end
	attr_accessor :id
	attr_accessor :name
	attr_accessor :animation_name
	attr_accessor :animation_hue
	attr_accessor :position
	attr_accessor :frame_max
	attr_accessor :frames
	attr_accessor :timings

	class Frame
	  def initialize
		@cell_max = 0
		@cell_data = Table.new(0, 0)
	  end
	  attr_accessor :cell_max
	  attr_accessor :cell_data
	end

	class Timing
	  def initialize
		@frame = 0
		@se = RPG::AudioFile.new("", 80)
		@flash_scope = 0
		@flash_color = Color.new(255,255,255,255)
		@flash_duration = 5
		@condition = 0
	  end
	  attr_accessor :frame
	  attr_accessor :se
	  attr_accessor :flash_scope
	  attr_accessor :flash_color
	  attr_accessor :flash_duration
	  attr_accessor :condition
	end
  end
  
  class Armor
	def initialize
	  @id = 0
	  @name = ""
	  @icon_name = ""
	  @description = ""
	  @kind = 0
	  @auto_state_id = 0
	  @price = 0
	  @pdef = 0
	  @mdef = 0
	  @eva = 0
	  @str_plus = 0
	  @dex_plus = 0
	  @agi_plus = 0
	  @int_plus = 0
	  @guard_element_set = []
	  @guard_state_set = []
	end
	attr_accessor :id
	attr_accessor :name
	attr_accessor :icon_name
	attr_accessor :description
	attr_accessor :kind
	attr_accessor :auto_state_id
	attr_accessor :price
	attr_accessor :pdef
	attr_accessor :mdef
	attr_accessor :eva
	attr_accessor :str_plus
	attr_accessor :dex_plus
	attr_accessor :agi_plus
	attr_accessor :int_plus
	attr_accessor :guard_element_set
	attr_accessor :guard_state_set
  end
  
  class AudioFile
	def initialize(name = "", volume = 100, pitch = 100)
	  @name = name
	  @volume = volume
	  @pitch = pitch
	end
	attr_accessor :name
	attr_accessor :volume
	attr_accessor :pitch
  end
  
  class Class
	def initialize
	  @id = 0
	  @name = ""
	  @position = 0
	  @weapon_set = []
	  @armor_set = []
	  @element_ranks = Table.new(1)
	  @state_ranks = Table.new(1)
	  @learnings = []
	end
	attr_accessor :id
	attr_accessor :name
	attr_accessor :position
	attr_accessor :weapon_set
	attr_accessor :armor_set
	attr_accessor :element_ranks
	attr_accessor :state_ranks
	attr_accessor :learnings

	class Learning
	  def initialize
		@level = 1
		@skill_id = 1
	  end
	  attr_accessor :level
	  attr_accessor :skill_id
	end
  end
  
  class CommonEvent
	def initialize
	  @id = 0
	  @name = ""
	  @trigger = 0
	  @switch_id = 1
	  @list = [RPG::EventCommand.new]
	end
	attr_accessor :id
	attr_accessor :name
	attr_accessor :trigger
	attr_accessor :switch_id
	attr_accessor :list
  end
  
  class Enemy
	def initialize
	  @id = 0
	  @name = ""
	  @battler_name = ""
	  @battler_hue = 0
	  @maxhp = 500
	  @maxsp = 500
	  @str = 50
	  @dex = 50
	  @agi = 50
	  @int = 50
	  @atk = 100
	  @pdef = 100
	  @mdef = 100
	  @eva = 0
	  @animation1_id = 0
	  @animation2_id = 0
	  @element_ranks = Table.new(1)
	  @state_ranks = Table.new(1)
	  @actions = [RPG::Enemy::Action.new]
	  @exp = 0
	  @gold = 0
	  @item_id = 0
	  @weapon_id = 0
	  @armor_id = 0
	  @treasure_prob = 100
	end
	attr_accessor :id
	attr_accessor :name
	attr_accessor :battler_name
	attr_accessor :battler_hue
	attr_accessor :maxhp
	attr_accessor :maxsp
	attr_accessor :str
	attr_accessor :dex
	attr_accessor :agi
	attr_accessor :int
	attr_accessor :atk
	attr_accessor :pdef
	attr_accessor :mdef
	attr_accessor :eva
	attr_accessor :animation1_id
	attr_accessor :animation2_id
	attr_accessor :element_ranks
	attr_accessor :state_ranks
	attr_accessor :actions
	attr_accessor :exp
	attr_accessor :gold
	attr_accessor :item_id
	attr_accessor :weapon_id
	attr_accessor :armor_id
	attr_accessor :treasure_prob

	class Action
	  def initialize
		@kind = 0
		@basic = 0
		@skill_id = 1
		@condition_turn_a = 0
		@condition_turn_b = 1
		@condition_hp = 100
		@condition_level = 1
		@condition_switch_id = 0
		@rating = 5
	  end
	  attr_accessor :kind
	  attr_accessor :basic
	  attr_accessor :skill_id
	  attr_accessor :condition_turn_a
	  attr_accessor :condition_turn_b
	  attr_accessor :condition_hp
	  attr_accessor :condition_level
	  attr_accessor :condition_switch_id
	  attr_accessor :rating
	end
  end
  
  class Event
	def initialize(x, y)
	  @id = 0
	  @name = ""
	  @x = x
	  @y = y
	  @pages = [RPG::Event::Page.new]
	end
	attr_accessor :id
	attr_accessor :name
	attr_accessor :x
	attr_accessor :y
	attr_accessor :pages

	class Page
	  def initialize
		@condition = RPG::Event::Page::Condition.new
		@graphic = RPG::Event::Page::Graphic.new
		@move_type = 0
		@move_speed = 3
		@move_frequency = 3
		@move_route = RPG::MoveRoute.new
		@walk_anime = true
		@step_anime = false
		@direction_fix = false
		@through = false
		@always_on_top = false
		@trigger = 0
		@list = [RPG::EventCommand.new]
	  end
	  attr_accessor :condition
	  attr_accessor :graphic
	  attr_accessor :move_type
	  attr_accessor :move_speed
	  attr_accessor :move_frequency
	  attr_accessor :move_route
	  attr_accessor :walk_anime
	  attr_accessor :step_anime
	  attr_accessor :direction_fix
	  attr_accessor :through
	  attr_accessor :always_on_top
	  attr_accessor :trigger
	  attr_accessor :list

	  class Condition
		def initialize
		  @switch1_valid = false
		  @switch2_valid = false
		  @variable_valid = false
		  @self_switch_valid = false
		  @switch1_id = 1
		  @switch2_id = 1
		  @variable_id = 1
		  @variable_value = 0
		  @self_switch_ch = "A"
		end
		attr_accessor :switch1_valid
		attr_accessor :switch2_valid
		attr_accessor :variable_valid
		attr_accessor :self_switch_valid
		attr_accessor :switch1_id
		attr_accessor :switch2_id
		attr_accessor :variable_id
		attr_accessor :variable_value
		attr_accessor :self_switch_ch
	  end

	  class Graphic
		def initialize
		  @tile_id = 0
		  @character_name = ""
		  @character_hue = 0
		  @direction = 2
		  @pattern = 0
		  @opacity = 255
		  @blend_type = 0
		end
		attr_accessor :tile_id
		attr_accessor :character_name
		attr_accessor :character_hue
		attr_accessor :direction
		attr_accessor :pattern
		attr_accessor :opacity
		attr_accessor :blend_type
	  end
	end
  end
  
  class EventCommand
	def initialize(code = 0, indent = 0, parameters = [])
	  @code = code
	  @indent = indent
	  @parameters = parameters
	end
	attr_accessor :code
	attr_accessor :indent
	attr_accessor :parameters
  end
  
  class Item
	def initialize
	  @id = 0
	  @name = ""
	  @icon_name = ""
	  @description = ""
	  @scope = 0
	  @occasion = 0
	  @animation1_id = 0
	  @animation2_id = 0
	  @menu_se = RPG::AudioFile.new("", 80)
	  @common_event_id = 0
	  @price = 0
	  @consumable = true
	  @parameter_type = 0
	  @parameter_points = 0
	  @recover_hp_rate = 0
	  @recover_hp = 0
	  @recover_sp_rate = 0
	  @recover_sp = 0
	  @hit = 100
	  @pdef_f = 0
	  @mdef_f = 0
	  @variance = 0
	  @element_set = []
	  @plus_state_set = []
	  @minus_state_set = []
	end
	attr_accessor :id
	attr_accessor :name
	attr_accessor :icon_name
	attr_accessor :description
	attr_accessor :scope
	attr_accessor :occasion
	attr_accessor :animation1_id
	attr_accessor :animation2_id
	attr_accessor :menu_se
	attr_accessor :common_event_id
	attr_accessor :price
	attr_accessor :consumable
	attr_accessor :parameter_type
	attr_accessor :parameter_points
	attr_accessor :recover_hp_rate
	attr_accessor :recover_hp
	attr_accessor :recover_sp_rate
	attr_accessor :recover_sp
	attr_accessor :hit
	attr_accessor :pdef_f
	attr_accessor :mdef_f
	attr_accessor :variance
	attr_accessor :element_set
	attr_accessor :plus_state_set
	attr_accessor :minus_state_set
  end
  
  class Map
	def initialize(width, height)
	  @tileset_id = 1
	  @width = width
	  @height = height
	  @autoplay_bgm = false
	  @bgm = RPG::AudioFile.new
	  @autoplay_bgs = false
	  @bgs = RPG::AudioFile.new("", 80)
	  @encounter_list = []
	  @encounter_step = 30
	  @data = Table.new(width, height, 3)
	  @events = {}
	end
	attr_accessor :tileset_id
	attr_accessor :width
	attr_accessor :height
	attr_accessor :autoplay_bgm
	attr_accessor :bgm
	attr_accessor :autoplay_bgs
	attr_accessor :bgs
	attr_accessor :encounter_list
	attr_accessor :encounter_step
	attr_accessor :data
	attr_accessor :events
  end
  
  class MapInfo
	def initialize
	  @name = ""
	  @parent_id = 0
	  @order = 0
	  @expanded = false
	  @scroll_x = 0
	  @scroll_y = 0
	end
	attr_accessor :name
	attr_accessor :parent_id
	attr_accessor :order
	attr_accessor :expanded
	attr_accessor :scroll_x
	attr_accessor :scroll_y
  end
  
  class MoveRoute
	def initialize
	  @repeat = true
	  @skippable = false
	  @list = [RPG::MoveCommand.new]
	end
	attr_accessor :repeat
	attr_accessor :skippable
	attr_accessor :list
  end

  class MoveCommand
	def initialize(code = 0, parameters = [])
	  @code = code
	  @parameters = parameters
	end
	attr_accessor :code
	attr_accessor :parameters
  end
  
  class Skill
	def initialize
	  @id = 0
	  @name = ""
	  @icon_name = ""
	  @description = ""
	  @scope = 0
	  @occasion = 1
	  @animation1_id = 0
	  @animation2_id = 0
	  @menu_se = RPG::AudioFile.new("", 80)
	  @common_event_id = 0
	  @sp_cost = 0
	  @power = 0
	  @atk_f = 0
	  @eva_f = 0
	  @str_f = 0
	  @dex_f = 0
	  @agi_f = 0
	  @int_f = 100
	  @hit = 100
	  @pdef_f = 0
	  @mdef_f = 100
	  @variance = 15
	  @element_set = []
	  @plus_state_set = []
	  @minus_state_set = []
	end
	attr_accessor :id
	attr_accessor :name
	attr_accessor :icon_name
	attr_accessor :description
	attr_accessor :scope
	attr_accessor :occasion
	attr_accessor :animation1_id
	attr_accessor :animation2_id
	attr_accessor :menu_se
	attr_accessor :common_event_id
	attr_accessor :sp_cost
	attr_accessor :power
	attr_accessor :atk_f
	attr_accessor :eva_f
	attr_accessor :str_f
	attr_accessor :dex_f
	attr_accessor :agi_f
	attr_accessor :int_f
	attr_accessor :hit
	attr_accessor :pdef_f
	attr_accessor :mdef_f
	attr_accessor :variance
	attr_accessor :element_set
	attr_accessor :plus_state_set
	attr_accessor :minus_state_set
  end
  
  class State
	def initialize
	  @id = 0
	  @name = ""
	  @animation_id = 0
	  @restriction = 0
	  @nonresistance = false
	  @zero_hp = false
	  @cant_get_exp = false
	  @cant_evade = false
	  @slip_damage = false
	  @rating = 5
	  @hit_rate = 100
	  @maxhp_rate = 100
	  @maxsp_rate = 100
	  @str_rate = 100
	  @dex_rate = 100
	  @agi_rate = 100
	  @int_rate = 100
	  @atk_rate = 100
	  @pdef_rate = 100
	  @mdef_rate = 100
	  @eva = 0
	  @battle_only = true
	  @hold_turn = 0
	  @auto_release_prob = 0
	  @shock_release_prob = 0
	  @guard_element_set = []
	  @plus_state_set = []
	  @minus_state_set = []
	end
	attr_accessor :id
	attr_accessor :name
	attr_accessor :animation_id
	attr_accessor :restriction
	attr_accessor :nonresistance
	attr_accessor :zero_hp
	attr_accessor :cant_get_exp
	attr_accessor :cant_evade
	attr_accessor :slip_damage
	attr_accessor :rating
	attr_accessor :hit_rate
	attr_accessor :maxhp_rate
	attr_accessor :maxsp_rate
	attr_accessor :str_rate
	attr_accessor :dex_rate
	attr_accessor :agi_rate
	attr_accessor :int_rate
	attr_accessor :atk_rate
	attr_accessor :pdef_rate
	attr_accessor :mdef_rate
	attr_accessor :eva
	attr_accessor :battle_only
	attr_accessor :hold_turn
	attr_accessor :auto_release_prob
	attr_accessor :shock_release_prob
	attr_accessor :guard_element_set
	attr_accessor :plus_state_set
	attr_accessor :minus_state_set
  end
  
  class System
	def initialize
	  @magic_number = 0
	  @party_members = [1]
	  @elements = [nil, ""]
	  @switches = [nil, ""]
	  @variables = [nil, ""]
	  @windowskin_name = ""
	  @title_name = ""
	  @gameover_name = ""
	  @battle_transition = ""
	  @title_bgm = RPG::AudioFile.new
	  @battle_bgm = RPG::AudioFile.new
	  @battle_end_me = RPG::AudioFile.new
	  @gameover_me = RPG::AudioFile.new
	  @cursor_se = RPG::AudioFile.new("", 80)
	  @decision_se = RPG::AudioFile.new("", 80)
	  @cancel_se = RPG::AudioFile.new("", 80)
	  @buzzer_se = RPG::AudioFile.new("", 80)
	  @equip_se = RPG::AudioFile.new("", 80)
	  @shop_se = RPG::AudioFile.new("", 80)
	  @save_se = RPG::AudioFile.new("", 80)
	  @load_se = RPG::AudioFile.new("", 80)
	  @battle_start_se = RPG::AudioFile.new("", 80)
	  @escape_se = RPG::AudioFile.new("", 80)
	  @actor_collapse_se = RPG::AudioFile.new("", 80)
	  @enemy_collapse_se = RPG::AudioFile.new("", 80)
	  @words = RPG::System::Words.new
	  @test_battlers = []
	  @test_troop_id = 1
	  @start_map_id = 1
	  @start_x = 0
	  @start_y = 0
	  @battleback_name = ""
	  @battler_name = ""
	  @battler_hue = 0
	  @edit_map_id = 1
	end
	attr_accessor :magic_number
	attr_accessor :party_members
	attr_accessor :elements
	attr_accessor :switches
	attr_accessor :variables
	attr_accessor :windowskin_name
	attr_accessor :title_name
	attr_accessor :gameover_name
	attr_accessor :battle_transition
	attr_accessor :title_bgm
	attr_accessor :battle_bgm
	attr_accessor :battle_end_me
	attr_accessor :gameover_me
	attr_accessor :cursor_se
	attr_accessor :decision_se
	attr_accessor :cancel_se
	attr_accessor :buzzer_se
	attr_accessor :equip_se
	attr_accessor :shop_se
	attr_accessor :save_se
	attr_accessor :load_se
	attr_accessor :battle_start_se
	attr_accessor :escape_se
	attr_accessor :actor_collapse_se
	attr_accessor :enemy_collapse_se
	attr_accessor :words
	attr_accessor :test_battlers
	attr_accessor :test_troop_id
	attr_accessor :start_map_id
	attr_accessor :start_x
	attr_accessor :start_y
	attr_accessor :battleback_name
	attr_accessor :battler_name
	attr_accessor :battler_hue
	attr_accessor :edit_map_id

	class Words
	  def initialize
		@gold = ""
		@hp = ""
		@sp = ""
		@str = ""
		@dex = ""
		@agi = ""
		@int = ""
		@atk = ""
		@pdef = ""
		@mdef = ""
		@weapon = ""
		@armor1 = ""
		@armor2 = ""
		@armor3 = ""
		@armor4 = ""
		@attack = ""
		@skill = ""
		@guard = ""
		@item = ""
		@equip = ""
	  end
	  attr_accessor :gold
	  attr_accessor :hp
	  attr_accessor :sp
	  attr_accessor :str
	  attr_accessor :dex
	  attr_accessor :agi
	  attr_accessor :int
	  attr_accessor :atk
	  attr_accessor :pdef
	  attr_accessor :mdef
	  attr_accessor :weapon
	  attr_accessor :armor1
	  attr_accessor :armor2
	  attr_accessor :armor3
	  attr_accessor :armor4
	  attr_accessor :attack
	  attr_accessor :skill
	  attr_accessor :guard
	  attr_accessor :item
	  attr_accessor :equip
	end

	class TestBattler
	  def initialize
		@actor_id = 1
		@level = 1
		@weapon_id = 0
		@armor1_id = 0
		@armor2_id = 0
		@armor3_id = 0
		@armor4_id = 0
	  end
	  attr_accessor :actor_id
	  attr_accessor :level
	  attr_accessor :weapon_id
	  attr_accessor :armor1_id
	  attr_accessor :armor2_id
	  attr_accessor :armor3_id
	  attr_accessor :armor4_id
	end
  end
  
  class Tileset
	def initialize
	  @id = 0
	  @name = ""
	  @tileset_name = ""
	  @autotile_names = [""]*7
	  @panorama_name = ""
	  @panorama_hue = 0
	  @fog_name = ""
	  @fog_hue = 0
	  @fog_opacity = 64
	  @fog_blend_type = 0
	  @fog_zoom = 200
	  @fog_sx = 0
	  @fog_sy = 0
	  @battleback_name = ""
	  @passages = Table.new(384)
	  @priorities = Table.new(384)
	  @priorities[0] = 5
	  @terrain_tags = Table.new(384)
	end
	attr_accessor :id
	attr_accessor :name
	attr_accessor :tileset_name
	attr_accessor :autotile_names
	attr_accessor :panorama_name
	attr_accessor :panorama_hue
	attr_accessor :fog_name
	attr_accessor :fog_hue
	attr_accessor :fog_opacity
	attr_accessor :fog_blend_type
	attr_accessor :fog_zoom
	attr_accessor :fog_sx
	attr_accessor :fog_sy
	attr_accessor :battleback_name
	attr_accessor :passages
	attr_accessor :priorities
	attr_accessor :terrain_tags
  end
  
  class Troop
	def initialize
	  @id = 0
	  @name = ""
	  @members = []
	  @pages = [RPG::BattleEventPage.new]
	end
	attr_accessor :id
	attr_accessor :name
	attr_accessor :members
	attr_accessor :pages

	class Member
	  def initialize
		@enemy_id = 1
		@x = 0
		@y = 0
		@hidden = false
		@immortal = false
	  end
	  attr_accessor :enemy_id
	  attr_accessor :x
	  attr_accessor :y
	  attr_accessor :hidden
	  attr_accessor :immortal
	end

	class Page
	  def initialize
		@condition = RPG::Troop::Page::Condition.new
		@span = 0
		@list = [RPG::EventCommand.new]
	  end
	  attr_accessor :condition
	  attr_accessor :span
	  attr_accessor :list

	  class Condition
		def initialize
		  @turn_valid = false
		  @enemy_valid = false
		  @actor_valid = false
		  @switch_valid = false
		  @turn_a = 0
		  @turn_b = 0
		  @enemy_index = 0
		  @enemy_hp = 50
		  @actor_id = 1
		  @actor_hp = 50
		  @switch_id = 1
		end
		attr_accessor :turn_valid
		attr_accessor :enemy_valid
		attr_accessor :actor_valid
		attr_accessor :switch_valid
		attr_accessor :turn_a
		attr_accessor :turn_b
		attr_accessor :enemy_index
		attr_accessor :enemy_hp
		attr_accessor :actor_id
		attr_accessor :actor_hp
		attr_accessor :switch_id
	  end
	end
  end
  
  class Weapon
	def initialize
	  @id = 0
	  @name = ""
	  @icon_name = ""
	  @description = ""
	  @animation1_id = 0
	  @animation2_id = 0
	  @price = 0
	  @atk = 0
	  @pdef = 0
	  @mdef = 0
	  @str_plus = 0
	  @dex_plus = 0
	  @agi_plus = 0
	  @int_plus = 0
	  @element_set = []
	  @plus_state_set = []
	  @minus_state_set = []
	end
	attr_accessor :id
	attr_accessor :name
	attr_accessor :icon_name
	attr_accessor :description
	attr_accessor :animation1_id
	attr_accessor :animation2_id
	attr_accessor :price
	attr_accessor :atk
	attr_accessor :pdef
	attr_accessor :mdef
	attr_accessor :str_plus
	attr_accessor :dex_plus
	attr_accessor :agi_plus
	attr_accessor :int_plus
	attr_accessor :element_set
	attr_accessor :plus_state_set
	attr_accessor :minus_state_set
  end
end