module RPG module Cache @cache = {} def self.load_bitmap(folder_name, filename, hue = 0) path = folder_name + filename if not @cache.include?(path) or @cache[path].disposed? if filename != "" @cache[path] = Bitmap.new(path) else @cache[path] = Bitmap.new(32, 32) end end if hue == 0 @cache[path] else key = [path, hue] if not @cache.include?(key) or @cache[key].disposed? @cache[key] = @cache[path].clone @cache[key].hue_change(hue) end @cache[key] end end def self.animation(filename, hue) self.load_bitmap("Graphics/Animations/", filename, hue) end def self.autotile(filename) self.load_bitmap("Graphics/Autotiles/", filename) end def self.battleback(filename) self.load_bitmap("Graphics/Battlebacks/", filename) end def self.battler(filename, hue) self.load_bitmap("Graphics/Battlers/", filename, hue) end def self.character(filename, hue) self.load_bitmap("Graphics/Characters/", filename, hue) end def self.fog(filename, hue) self.load_bitmap("Graphics/Fogs/", filename, hue) end def self.gameover(filename) self.load_bitmap("Graphics/Gameovers/", filename) end def self.icon(filename) self.load_bitmap("Graphics/Icons/", filename) end def self.panorama(filename, hue) self.load_bitmap("Graphics/Panoramas/", filename, hue) end def self.picture(filename) self.load_bitmap("Graphics/Pictures/", filename) end def self.tileset(filename) self.load_bitmap("Graphics/Tilesets/", filename) end def self.title(filename) self.load_bitmap("Graphics/Titles/", filename) end def self.windowskin(filename) self.load_bitmap("Graphics/Windowskins/", filename) end def self.tile(filename, tile_id, hue) key = [filename, tile_id, hue] if not @cache.include?(key) or @cache[key].disposed? @cache[key] = Bitmap.new(32, 32) x = (tile_id - 384) % 8 * 32 y = (tile_id - 384) / 8 * 32 rect = Rect.new(x, y, 32, 32) @cache[key].blt(0, 0, self.tileset(filename), rect) @cache[key].hue_change(hue) end @cache[key] end def self.clear @cache = {} GC.start end end class Sprite < ::Sprite @@_animations = [] @@_reference_count = {} def initialize(viewport = nil) super(viewport) @_whiten_duration = 0 @_appear_duration = 0 @_escape_duration = 0 @_collapse_duration = 0 @_damage_duration = 0 @_animation_duration = 0 @_blink = false end def dispose dispose_damage dispose_animation dispose_loop_animation super end def whiten self.blend_type = 0 self.color.set(255, 255, 255, 128) self.opacity = 255 @_whiten_duration = 16 @_appear_duration = 0 @_escape_duration = 0 @_collapse_duration = 0 end def appear self.blend_type = 0 self.color.set(0, 0, 0, 0) self.opacity = 0 @_appear_duration = 16 @_whiten_duration = 0 @_escape_duration = 0 @_collapse_duration = 0 end def escape self.blend_type = 0 self.color.set(0, 0, 0, 0) self.opacity = 255 @_escape_duration = 32 @_whiten_duration = 0 @_appear_duration = 0 @_collapse_duration = 0 end def collapse self.blend_type = 1 self.color.set(255, 64, 64, 255) self.opacity = 255 @_collapse_duration = 48 @_whiten_duration = 0 @_appear_duration = 0 @_escape_duration = 0 end def damage(value, critical) dispose_damage if value.is_a?(Numeric) damage_string = value.abs.to_s else damage_string = value.to_s end bitmap = Bitmap.new(160, 48) bitmap.font.name = "Arial Black" bitmap.font.size = 32 bitmap.font.color.set(0, 0, 0) bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1) bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1) bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1) bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1) if value.is_a?(Numeric) and value < 0 bitmap.font.color.set(176, 255, 144) else bitmap.font.color.set(255, 255, 255) end bitmap.draw_text(0, 12, 160, 36, damage_string, 1) if critical bitmap.font.size = 20 bitmap.font.color.set(0, 0, 0) bitmap.draw_text(-1, -1, 160, 20, "CRITICAL", 1) bitmap.draw_text(+1, -1, 160, 20, "CRITICAL", 1) bitmap.draw_text(-1, +1, 160, 20, "CRITICAL", 1) bitmap.draw_text(+1, +1, 160, 20, "CRITICAL", 1) bitmap.font.color.set(255, 255, 255) bitmap.draw_text(0, 0, 160, 20, "CRITICAL", 1) end @_damage_sprite = ::Sprite.new(self.viewport) @_damage_sprite.bitmap = bitmap @_damage_sprite.ox = 80 @_damage_sprite.oy = 20 @_damage_sprite.x = self.x @_damage_sprite.y = self.y - self.oy / 2 @_damage_sprite.z = 3000 @_damage_duration = 40 end def animation(animation, hit) dispose_animation @_animation = animation return if @_animation == nil @_animation_hit = hit @_animation_duration = @_animation.frame_max animation_name = @_animation.animation_name animation_hue = @_animation.animation_hue bitmap = RPG::Cache.animation(animation_name, animation_hue) if @@_reference_count.include?(bitmap) @@_reference_count[bitmap] += 1 else @@_reference_count[bitmap] = 1 end @_animation_sprites = [] if @_animation.position != 3 or not @@_animations.include?(animation) for i in 0..15 sprite = ::Sprite.new(self.viewport) sprite.bitmap = bitmap sprite.visible = false @_animation_sprites.push(sprite) end unless @@_animations.include?(animation) @@_animations.push(animation) end end update_animation end def loop_animation(animation) return if animation == @_loop_animation dispose_loop_animation @_loop_animation = animation return if @_loop_animation == nil @_loop_animation_index = 0 animation_name = @_loop_animation.animation_name animation_hue = @_loop_animation.animation_hue bitmap = RPG::Cache.animation(animation_name, animation_hue) if @@_reference_count.include?(bitmap) @@_reference_count[bitmap] += 1 else @@_reference_count[bitmap] = 1 end @_loop_animation_sprites = [] for i in 0..15 sprite = ::Sprite.new(self.viewport) sprite.bitmap = bitmap sprite.visible = false @_loop_animation_sprites.push(sprite) end update_loop_animation end def dispose_damage if @_damage_sprite != nil @_damage_sprite.bitmap.dispose @_damage_sprite.dispose @_damage_sprite = nil @_damage_duration = 0 end end def dispose_animation if @_animation_sprites != nil sprite = @_animation_sprites[0] if sprite != nil @@_reference_count[sprite.bitmap] -= 1 if @@_reference_count[sprite.bitmap] == 0 sprite.bitmap.dispose end end for sprite in @_animation_sprites sprite.dispose end @_animation_sprites = nil @_animation = nil end end def dispose_loop_animation if @_loop_animation_sprites != nil sprite = @_loop_animation_sprites[0] if sprite != nil @@_reference_count[sprite.bitmap] -= 1 if @@_reference_count[sprite.bitmap] == 0 sprite.bitmap.dispose end end for sprite in @_loop_animation_sprites sprite.dispose end @_loop_animation_sprites = nil @_loop_animation = nil end end def blink_on unless @_blink @_blink = true @_blink_count = 0 end end def blink_off if @_blink @_blink = false self.color.set(0, 0, 0, 0) end end def blink? @_blink end def effect? @_whiten_duration > 0 or @_appear_duration > 0 or @_escape_duration > 0 or @_collapse_duration > 0 or @_damage_duration > 0 or @_animation_duration > 0 end def update super if @_whiten_duration > 0 @_whiten_duration -= 1 self.color.alpha = 128 - (16 - @_whiten_duration) * 10 end if @_appear_duration > 0 @_appear_duration -= 1 self.opacity = (16 - @_appear_duration) * 16 end if @_escape_duration > 0 @_escape_duration -= 1 self.opacity = 256 - (32 - @_escape_duration) * 10 end if @_collapse_duration > 0 @_collapse_duration -= 1 self.opacity = 256 - (48 - @_collapse_duration) * 6 end if @_damage_duration > 0 @_damage_duration -= 1 case @_damage_duration when 38..39 @_damage_sprite.y -= 4 when 36..37 @_damage_sprite.y -= 2 when 34..35 @_damage_sprite.y += 2 when 28..33 @_damage_sprite.y += 4 end @_damage_sprite.opacity = 256 - (12 - @_damage_duration) * 32 if @_damage_duration == 0 dispose_damage end end if @_animation != nil and (Graphics.frame_count % 2 == 0) @_animation_duration -= 1 update_animation end if @_loop_animation != nil and (Graphics.frame_count % 2 == 0) update_loop_animation @_loop_animation_index += 1 @_loop_animation_index %= @_loop_animation.frame_max end if @_blink @_blink_count = (@_blink_count + 1) % 32 if @_blink_count < 16 alpha = (16 - @_blink_count) * 6 else alpha = (@_blink_count - 16) * 6 end self.color.set(255, 255, 255, alpha) end @@_animations.clear end def update_animation if @_animation_duration > 0 frame_index = @_animation.frame_max - @_animation_duration cell_data = @_animation.frames[frame_index].cell_data position = @_animation.position animation_set_sprites(@_animation_sprites, cell_data, position) for timing in @_animation.timings if timing.frame == frame_index animation_process_timing(timing, @_animation_hit) end end else dispose_animation end end def update_loop_animation frame_index = @_loop_animation_index cell_data = @_loop_animation.frames[frame_index].cell_data position = @_loop_animation.position animation_set_sprites(@_loop_animation_sprites, cell_data, position) for timing in @_loop_animation.timings if timing.frame == frame_index animation_process_timing(timing, true) end end end def animation_set_sprites(sprites, cell_data, position) for i in 0..15 sprite = sprites[i] pattern = cell_data[i, 0] if sprite == nil or pattern == nil or pattern == -1 sprite.visible = false if sprite != nil next end sprite.visible = true sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192) if position == 3 if self.viewport != nil sprite.x = self.viewport.rect.width / 2 sprite.y = self.viewport.rect.height - 160 else sprite.x = 320 sprite.y = 240 end else sprite.x = self.x - self.ox + self.src_rect.width / 2 sprite.y = self.y - self.oy + self.src_rect.height / 2 sprite.y -= self.src_rect.height / 4 if position == 0 sprite.y += self.src_rect.height / 4 if position == 2 end sprite.x += cell_data[i, 1] sprite.y += cell_data[i, 2] sprite.z = 2000 sprite.ox = 96 sprite.oy = 96 sprite.zoom_x = cell_data[i, 3] / 100.0 sprite.zoom_y = cell_data[i, 3] / 100.0 sprite.angle = cell_data[i, 4] sprite.mirror = (cell_data[i, 5] == 1) sprite.opacity = cell_data[i, 6] * self.opacity / 255.0 sprite.blend_type = cell_data[i, 7] end end def animation_process_timing(timing, hit) if (timing.condition == 0) or (timing.condition == 1 and hit == true) or (timing.condition == 2 and hit == false) if timing.se.name != "" se = timing.se Audio.se_play("Audio/SE/" + se.name, se.volume, se.pitch) end case timing.flash_scope when 1 self.flash(timing.flash_color, timing.flash_duration * 2) when 2 if self.viewport != nil self.viewport.flash(timing.flash_color, timing.flash_duration * 2) end when 3 self.flash(nil, timing.flash_duration * 2) end end end def x=(x) sx = x - self.x if sx != 0 if @_animation_sprites != nil for i in 0..15 @_animation_sprites[i].x += sx end end if @_loop_animation_sprites != nil for i in 0..15 @_loop_animation_sprites[i].x += sx end end end super end def y=(y) sy = y - self.y if sy != 0 if @_animation_sprites != nil for i in 0..15 @_animation_sprites[i].y += sy end end if @_loop_animation_sprites != nil for i in 0..15 @_loop_animation_sprites[i].y += sy end end end super end end class Weather def initialize(viewport = nil) @type = 0 @max = 0 @ox = 0 @oy = 0 color1 = Color.new(255, 255, 255, 255) color2 = Color.new(255, 255, 255, 128) @rain_bitmap = Bitmap.new(7, 56) for i in 0..6 @rain_bitmap.fill_rect(6-i, i*8, 1, 8, color1) end @storm_bitmap = Bitmap.new(34, 64) for i in 0..31 @storm_bitmap.fill_rect(33-i, i*2, 1, 2, color2) @storm_bitmap.fill_rect(32-i, i*2, 1, 2, color1) @storm_bitmap.fill_rect(31-i, i*2, 1, 2, color2) end @snow_bitmap = Bitmap.new(6, 6) @snow_bitmap.fill_rect(0, 1, 6, 4, color2) @snow_bitmap.fill_rect(1, 0, 4, 6, color2) @snow_bitmap.fill_rect(1, 2, 4, 2, color1) @snow_bitmap.fill_rect(2, 1, 2, 4, color1) @sprites = [] for i in 1..40 sprite = Sprite.new(viewport) sprite.z = 1000 sprite.visible = false sprite.opacity = 0 @sprites.push(sprite) end end def dispose for sprite in @sprites sprite.dispose end @rain_bitmap.dispose @storm_bitmap.dispose @snow_bitmap.dispose end def type=(type) return if @type == type @type = type case @type when 1 bitmap = @rain_bitmap when 2 bitmap = @storm_bitmap when 3 bitmap = @snow_bitmap else bitmap = nil end for i in 1..40 sprite = @sprites[i] if sprite != nil sprite.visible = (i <= @max) sprite.bitmap = bitmap end end end def ox=(ox) return if @ox == ox; @ox = ox for sprite in @sprites sprite.ox = @ox end end def oy=(oy) return if @oy == oy; @oy = oy for sprite in @sprites sprite.oy = @oy end end def max=(max) return if @max == max; @max = [[max, 0].max, 40].min for i in 1..40 sprite = @sprites[i] if sprite != nil sprite.visible = (i <= @max) end end end def update return if @type == 0 for i in 1..@max sprite = @sprites[i] if sprite == nil break end if @type == 1 sprite.x -= 2 sprite.y += 16 sprite.opacity -= 8 end if @type == 2 sprite.x -= 8 sprite.y += 16 sprite.opacity -= 12 end if @type == 3 sprite.x -= 2 sprite.y += 8 sprite.opacity -= 8 end x = sprite.x - @ox y = sprite.y - @oy if sprite.opacity < 64 or x < -50 or x > 750 or y < -300 or y > 500 sprite.x = rand(800) - 50 + @ox sprite.y = rand(800) - 200 + @oy sprite.opacity = 255 end end end attr_reader :type attr_reader :max attr_reader :ox attr_reader :oy 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 Event class Page 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 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 end 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 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 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 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 Class class Learning def initialize @level = 1 @skill_id = 1 end attr_accessor :level attr_accessor :skill_id end 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 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 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 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 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 Enemy 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 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 end class Troop 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 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 def initialize @condition = RPG::Troop::Page::Condition.new @span = 0 @list = [RPG::EventCommand.new] end attr_accessor :condition attr_accessor :span attr_accessor :list end def initialize @id = 0 @name = "" @members = [] @pages = [RPG::BattleEventPage.new] end attr_accessor :id attr_accessor :name attr_accessor :members attr_accessor :pages 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 Animation 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 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 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 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 System 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 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 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 end