Created
December 6, 2013 11:40
-
-
Save aoitaku/7822424 to your computer and use it in GitHub Desktop.
RPGツクールVXAceの.rvdata2ファイルをYAMLと相互変換するスクリプト
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # rgss.rb | |
| # author: aoitaku <Twitter:@aoitaku> | |
| # | |
| # 本プログラムは、RPGツクールVXAceでの利用を目的とした場合においてのみ | |
| # 利用できます。 | |
| # その際の利用条件は、RPGツクールVXAceの利用規約に従ってください。 | |
| class Color | |
| attr_accessor :red, :green, :blue, :alpha | |
| def initialize(data) | |
| @red, @green, @blue, @alpha = *data | |
| end | |
| def _dump(limit) | |
| [@red, @green, @blue, @alpha].pack("EEEE") | |
| end | |
| def self._load(obj) | |
| Color.new(obj.unpack("EEEE")) | |
| end | |
| end | |
| class Table | |
| def initialize(data) | |
| @num_of_dimensions, | |
| @xsize, @ysize, @zsize, | |
| @num_of_elements, | |
| *@elements = *data | |
| if @num_of_dimensions > 1 | |
| if @xsize > 1 | |
| @elements = @elements.each_slice(@xsize).to_a | |
| else | |
| @elements = @elements.map{|element|[element]} | |
| end | |
| end | |
| if @num_of_dimensions > 2 | |
| if @ysize > 1 | |
| @elements = @elements.each_slice(@ysize).to_a | |
| else | |
| @elements = @elements.map{|element|[element]} | |
| end | |
| end | |
| end | |
| def _dump(limit) | |
| [@num_of_dimensions, | |
| @xsize, @ysize, @zsize, | |
| @num_of_elements, | |
| *@elements.flatten].pack("VVVVVv*") | |
| end | |
| def self._load(obj) | |
| Table.new(obj.unpack("VVVVVv*")) | |
| end | |
| end | |
| class Tone | |
| attr_accessor :red, :green, :blue, :gray | |
| def initialize(data) | |
| @red, @green, @blue, @gray = *data | |
| end | |
| def _dump(limit) | |
| [@red, @green, @blue, @gray].pack("EEEE") | |
| end | |
| def self._load(obj) | |
| Tone.new(obj.unpack("EEEE")) | |
| end | |
| end | |
| module RPG | |
| end | |
| class RPG::Map | |
| def initialize(width, height) | |
| @display_name = '' | |
| @tileset_id = 1 | |
| @width = width | |
| @height = height | |
| @scroll_type = 0 | |
| @specify_battleback = false | |
| @battleback_floor_name = '' | |
| @battleback_wall_name = '' | |
| @autoplay_bgm = false | |
| @bgm = RPG::BGM.new | |
| @autoplay_bgs = false | |
| @bgs = RPG::BGS.new('', 80) | |
| @disable_dashing = false | |
| @encounter_list = [] | |
| @encounter_step = 30 | |
| @parallax_name = '' | |
| @parallax_loop_x = false | |
| @parallax_loop_y = false | |
| @parallax_sx = 0 | |
| @parallax_sy = 0 | |
| @parallax_show = false | |
| @note = '' | |
| @data = Table.new(width, height, 4) | |
| @events = {} | |
| end | |
| attr_accessor :display_name | |
| attr_accessor :tileset_id | |
| attr_accessor :width | |
| attr_accessor :height | |
| attr_accessor :scroll_type | |
| attr_accessor :specify_battleback | |
| attr_accessor :battleback1_name | |
| attr_accessor :battleback2_name | |
| attr_accessor :autoplay_bgm | |
| attr_accessor :bgm | |
| attr_accessor :autoplay_bgs | |
| attr_accessor :bgs | |
| attr_accessor :disable_dashing | |
| attr_accessor :encounter_list | |
| attr_accessor :encounter_step | |
| attr_accessor :parallax_name | |
| attr_accessor :parallax_loop_x | |
| attr_accessor :parallax_loop_y | |
| attr_accessor :parallax_sx | |
| attr_accessor :parallax_sy | |
| attr_accessor :parallax_show | |
| attr_accessor :note | |
| attr_accessor :data | |
| attr_accessor :events | |
| end | |
| class RPG::Map::Encounter | |
| def initialize | |
| @troop_id = 1 | |
| @weight = 10 | |
| @region_set = [] | |
| end | |
| attr_accessor :troop_id | |
| attr_accessor :weight | |
| attr_accessor :region_set | |
| end | |
| class RPG::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 RPG::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 | |
| end | |
| class RPG::Event::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 | |
| @priority_type = 0 | |
| @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 :priority_type | |
| attr_accessor :trigger | |
| attr_accessor :list | |
| end | |
| class RPG::Event::Page::Condition | |
| def initialize | |
| @switch1_valid = false | |
| @switch2_valid = false | |
| @variable_valid = false | |
| @self_switch_valid = false | |
| @item_valid = false | |
| @actor_valid = false | |
| @switch1_id = 1 | |
| @switch2_id = 1 | |
| @variable_id = 1 | |
| @variable_value = 0 | |
| @self_switch_ch = 'A' | |
| @item_id = 1 | |
| @actor_id = 1 | |
| end | |
| attr_accessor :switch1_valid | |
| attr_accessor :switch2_valid | |
| attr_accessor :variable_valid | |
| attr_accessor :self_switch_valid | |
| attr_accessor :item_valid | |
| attr_accessor :actor_valid | |
| attr_accessor :switch1_id | |
| attr_accessor :switch2_id | |
| attr_accessor :variable_id | |
| attr_accessor :variable_value | |
| attr_accessor :self_switch_ch | |
| attr_accessor :item_id | |
| attr_accessor :actor_id | |
| end | |
| class RPG::Event::Page::Graphic | |
| def initialize | |
| @tile_id = 0 | |
| @character_name = '' | |
| @character_index = 0 | |
| @direction = 2 | |
| @pattern = 0 | |
| end | |
| attr_accessor :tile_id | |
| attr_accessor :character_name | |
| attr_accessor :character_index | |
| attr_accessor :direction | |
| attr_accessor :pattern | |
| end | |
| class RPG::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 RPG::MoveRoute | |
| def initialize | |
| @repeat = true | |
| @skippable = false | |
| @wait = false | |
| @list = [RPG::MoveCommand.new] | |
| end | |
| attr_accessor :repeat | |
| attr_accessor :skippable | |
| attr_accessor :wait | |
| attr_accessor :list | |
| end | |
| class RPG::MoveCommand | |
| def initialize(code = 0, parameters = []) | |
| @code = code | |
| @parameters = parameters | |
| end | |
| attr_accessor :code | |
| attr_accessor :parameters | |
| end | |
| class RPG::BaseItem | |
| def initialize | |
| @id = 0 | |
| @name = '' | |
| @icon_index = 0 | |
| @description = '' | |
| @features = [] | |
| @note = '' | |
| end | |
| attr_accessor :id | |
| attr_accessor :name | |
| attr_accessor :icon_index | |
| attr_accessor :description | |
| attr_accessor :features | |
| attr_accessor :note | |
| end | |
| class RPG::Actor < RPG::BaseItem | |
| def initialize | |
| super | |
| @nickname = '' | |
| @class_id = 1 | |
| @initial_level = 1 | |
| @max_level = 99 | |
| @character_name = '' | |
| @character_index = 0 | |
| @face_name = '' | |
| @face_index = 0 | |
| @equips = [0,0,0,0,0] | |
| end | |
| attr_accessor :nickname | |
| attr_accessor :class_id | |
| attr_accessor :initial_level | |
| attr_accessor :max_level | |
| attr_accessor :character_name | |
| attr_accessor :character_index | |
| attr_accessor :face_name | |
| attr_accessor :face_index | |
| attr_accessor :equips | |
| end | |
| class RPG::Class < RPG::BaseItem | |
| def initialize | |
| super | |
| @exp_params = [30,20,30,30] | |
| @params = Table.new(8,100) | |
| (1..99).each do |i| | |
| @params[0,i] = 400+i*50 | |
| @params[1,i] = 80+i*10 | |
| (2..5).each {|j| @params[j,i] = 15+i*5/4 } | |
| (6..7).each {|j| @params[j,i] = 30+i*5/2 } | |
| end | |
| @learnings = [] | |
| @features.push(RPG::BaseItem::Feature.new(23, 0, 1)) | |
| @features.push(RPG::BaseItem::Feature.new(22, 0, 0.95)) | |
| @features.push(RPG::BaseItem::Feature.new(22, 1, 0.05)) | |
| @features.push(RPG::BaseItem::Feature.new(22, 2, 0.04)) | |
| @features.push(RPG::BaseItem::Feature.new(41, 1)) | |
| @features.push(RPG::BaseItem::Feature.new(51, 1)) | |
| @features.push(RPG::BaseItem::Feature.new(52, 1)) | |
| end | |
| attr_accessor :exp_params | |
| attr_accessor :params | |
| attr_accessor :learnings | |
| end | |
| class RPG::Class::Learning | |
| def initialize | |
| @level = 1 | |
| @skill_id = 1 | |
| @note = '' | |
| end | |
| attr_accessor :level | |
| attr_accessor :skill_id | |
| attr_accessor :note | |
| end | |
| class RPG::UsableItem < RPG::BaseItem | |
| def initialize | |
| super | |
| @scope = 0 | |
| @occasion = 0 | |
| @speed = 0 | |
| @success_rate = 100 | |
| @repeats = 1 | |
| @tp_gain = 0 | |
| @hit_type = 0 | |
| @animation_id = 0 | |
| @damage = RPG::UsableItem::Damage.new | |
| @effects = [] | |
| end | |
| attr_accessor :scope | |
| attr_accessor :occasion | |
| attr_accessor :speed | |
| attr_accessor :animation_id | |
| attr_accessor :success_rate | |
| attr_accessor :repeats | |
| attr_accessor :tp_gain | |
| attr_accessor :hit_type | |
| attr_accessor :damage | |
| attr_accessor :effects | |
| end | |
| class RPG::Skill < RPG::UsableItem | |
| def initialize | |
| super | |
| @scope = 1 | |
| @stype_id = 1 | |
| @mp_cost = 0 | |
| @tp_cost = 0 | |
| @message1 = '' | |
| @message2 = '' | |
| @required_wtype_id1 = 0 | |
| @required_wtype_id2 = 0 | |
| end | |
| attr_accessor :stype_id | |
| attr_accessor :mp_cost | |
| attr_accessor :tp_cost | |
| attr_accessor :message1 | |
| attr_accessor :message2 | |
| attr_accessor :required_wtype_id1 | |
| attr_accessor :required_wtype_id2 | |
| end | |
| class RPG::Item < RPG::UsableItem | |
| def initialize | |
| super | |
| @scope = 7 | |
| @itype_id = 1 | |
| @price = 0 | |
| @consumable = true | |
| end | |
| attr_accessor :itype_id | |
| attr_accessor :price | |
| attr_accessor :consumable | |
| end | |
| class RPG::EquipItem < RPG::BaseItem | |
| def initialize | |
| super | |
| @price = 0 | |
| @etype_id = 0 | |
| @params = [0] * 8 | |
| end | |
| attr_accessor :price | |
| attr_accessor :etype_id | |
| attr_accessor :params | |
| end | |
| class RPG::Weapon < RPG::EquipItem | |
| def initialize | |
| super | |
| @wtype_id = 0 | |
| @animation_id = 0 | |
| @features.push(RPG::BaseItem::Feature.new(31, 1, 0)) | |
| @features.push(RPG::BaseItem::Feature.new(22, 0, 0)) | |
| end | |
| attr_accessor :wtype_id | |
| attr_accessor :animation_id | |
| end | |
| class RPG::Armor < RPG::EquipItem | |
| def initialize | |
| super | |
| @atype_id = 0 | |
| @etype_id = 1 | |
| @features.push(RPG::BaseItem::Feature.new(22, 1, 0)) | |
| end | |
| attr_accessor :atype_id | |
| end | |
| class RPG::Enemy < RPG::BaseItem | |
| def initialize | |
| super | |
| @battler_name = '' | |
| @battler_hue = 0 | |
| @params = [100,0,10,10,10,10,10,10] | |
| @exp = 0 | |
| @gold = 0 | |
| @drop_items = Array.new(3) { RPG::Enemy::DropItem.new } | |
| @actions = [RPG::Enemy::Action.new] | |
| @features.push(RPG::BaseItem::Feature.new(22, 0, 0.95)) | |
| @features.push(RPG::BaseItem::Feature.new(22, 1, 0.05)) | |
| @features.push(RPG::BaseItem::Feature.new(31, 1, 0)) | |
| end | |
| attr_accessor :battler_name | |
| attr_accessor :battler_hue | |
| attr_accessor :params | |
| attr_accessor :exp | |
| attr_accessor :gold | |
| attr_accessor :drop_items | |
| attr_accessor :actions | |
| end | |
| class RPG::State < RPG::BaseItem | |
| def initialize | |
| super | |
| @restriction = 0 | |
| @priority = 50 | |
| @remove_at_battle_end = false | |
| @remove_by_restriction = false | |
| @auto_removal_timing = 0 | |
| @min_turns = 1 | |
| @max_turns = 1 | |
| @remove_by_damage = false | |
| @chance_by_damage = 100 | |
| @remove_by_walking = false | |
| @steps_to_remove = 100 | |
| @message1 = '' | |
| @message2 = '' | |
| @message3 = '' | |
| @message4 = '' | |
| end | |
| attr_accessor :restriction | |
| attr_accessor :priority | |
| attr_accessor :remove_at_battle_end | |
| attr_accessor :remove_by_restriction | |
| attr_accessor :auto_removal_timing | |
| attr_accessor :min_turns | |
| attr_accessor :max_turns | |
| attr_accessor :remove_by_damage | |
| attr_accessor :chance_by_damage | |
| attr_accessor :remove_by_walking | |
| attr_accessor :steps_to_remove | |
| attr_accessor :message1 | |
| attr_accessor :message2 | |
| attr_accessor :message3 | |
| attr_accessor :message4 | |
| end | |
| class RPG::BaseItem::Feature | |
| def initialize(code = 0, data_id = 0, value = 0) | |
| @code = code | |
| @data_id = data_id | |
| @value = value | |
| end | |
| attr_accessor :code | |
| attr_accessor :data_id | |
| attr_accessor :value | |
| end | |
| class RPG::UsableItem::Damage | |
| def initialize | |
| @type = 0 | |
| @element_id = 0 | |
| @formula = '0' | |
| @variance = 20 | |
| @critical = false | |
| end | |
| attr_accessor :type | |
| attr_accessor :element_id | |
| attr_accessor :formula | |
| attr_accessor :variance | |
| attr_accessor :critical | |
| end | |
| class RPG::UsableItem::Effect | |
| def initialize(code = 0, data_id = 0, value1 = 0, value2 = 0) | |
| @code = code | |
| @data_id = data_id | |
| @value1 = value1 | |
| @value2 = value2 | |
| end | |
| attr_accessor :code | |
| attr_accessor :data_id | |
| attr_accessor :value1 | |
| attr_accessor :value2 | |
| end | |
| class RPG::Enemy::DropItem | |
| def initialize | |
| @kind = 0 | |
| @data_id = 1 | |
| @denominator = 1 | |
| end | |
| attr_accessor :kind | |
| attr_accessor :data_id | |
| attr_accessor :denominator | |
| end | |
| class RPG::Enemy::Action | |
| def initialize | |
| @skill_id = 1 | |
| @condition_type = 0 | |
| @condition_param1 = 0 | |
| @condition_param2 = 0 | |
| @rating = 5 | |
| end | |
| attr_accessor :skill_id | |
| attr_accessor :condition_type | |
| attr_accessor :condition_param1 | |
| attr_accessor :condition_param2 | |
| attr_accessor :rating | |
| end | |
| class RPG::Troop | |
| def initialize | |
| @id = 0 | |
| @name = '' | |
| @members = [] | |
| @pages = [RPG::Troop::Page.new] | |
| end | |
| attr_accessor :id | |
| attr_accessor :name | |
| attr_accessor :members | |
| attr_accessor :pages | |
| end | |
| class RPG::Troop::Member | |
| def initialize | |
| @enemy_id = 1 | |
| @x = 0 | |
| @y = 0 | |
| @hidden = false | |
| end | |
| attr_accessor :enemy_id | |
| attr_accessor :x | |
| attr_accessor :y | |
| attr_accessor :hidden | |
| end | |
| class RPG::Troop::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 | |
| end | |
| class RPG::Troop::Page::Condition | |
| def initialize | |
| @turn_ending = false | |
| @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_ending | |
| 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 | |
| class RPG::Animation | |
| def initialize | |
| @id = 0 | |
| @name = '' | |
| @animation1_name = '' | |
| @animation1_hue = 0 | |
| @animation2_name = '' | |
| @animation2_hue = 0 | |
| @position = 1 | |
| @frame_max = 1 | |
| @frames = [RPG::Animation::Frame.new] | |
| @timings = [] | |
| end | |
| attr_accessor :id | |
| attr_accessor :name | |
| attr_accessor :animation1_name | |
| attr_accessor :animation1_hue | |
| attr_accessor :animation2_name | |
| attr_accessor :animation2_hue | |
| attr_accessor :position | |
| attr_accessor :frame_max | |
| attr_accessor :frames | |
| attr_accessor :timings | |
| end | |
| class RPG::Animation::Frame | |
| def initialize | |
| @cell_max = 0 | |
| @cell_data = Table.new(0, 0) | |
| end | |
| attr_accessor :cell_max | |
| attr_accessor :cell_data | |
| end | |
| class RPG::Animation::Timing | |
| def initialize | |
| @frame = 0 | |
| @se = RPG::SE.new('', 80) | |
| @flash_scope = 0 | |
| @flash_color = Color.new(255,255,255,255) | |
| @flash_duration = 5 | |
| end | |
| attr_accessor :frame | |
| attr_accessor :se | |
| attr_accessor :flash_scope | |
| attr_accessor :flash_color | |
| attr_accessor :flash_duration | |
| end | |
| class RPG::Tileset | |
| def initialize | |
| @id = 0 | |
| @mode = 1 | |
| @name = '' | |
| @tileset_names = Array.new(9).collect{''} | |
| @flags = Table.new(8192) | |
| @flags[0] = 0x0010 | |
| (2048..2815).each {|i| @flags[i] = 0x000F} | |
| (4352..8191).each {|i| @flags[i] = 0x000F} | |
| @note = '' | |
| end | |
| attr_accessor :id | |
| attr_accessor :mode | |
| attr_accessor :name | |
| attr_accessor :tileset_names | |
| attr_accessor :flags | |
| attr_accessor :note | |
| end | |
| class RPG::CommonEvent | |
| def initialize | |
| @id = 0 | |
| @name = '' | |
| @trigger = 0 | |
| @switch_id = 1 | |
| @list = [RPG::EventCommand.new] | |
| end | |
| def autorun? | |
| @trigger == 1 | |
| end | |
| def parallel? | |
| @trigger == 2 | |
| end | |
| attr_accessor :id | |
| attr_accessor :name | |
| attr_accessor :trigger | |
| attr_accessor :switch_id | |
| attr_accessor :list | |
| end | |
| class RPG::System | |
| def initialize | |
| @game_title = '' | |
| @version_id = 0 | |
| @japanese = true | |
| @party_members = [1] | |
| @currency_unit = '' | |
| @elements = [nil, ''] | |
| @skill_types = [nil, ''] | |
| @weapon_types = [nil, ''] | |
| @armor_types = [nil, ''] | |
| @switches = [nil, ''] | |
| @variables = [nil, ''] | |
| @boat = RPG::System::Vehicle.new | |
| @ship = RPG::System::Vehicle.new | |
| @airship = RPG::System::Vehicle.new | |
| @title1_name = '' | |
| @title2_name = '' | |
| @opt_draw_title = true | |
| @opt_use_midi = false | |
| @opt_transparent = false | |
| @opt_followers = true | |
| @opt_slip_death = false | |
| @opt_floor_death = false | |
| @opt_display_tp = true | |
| @opt_extra_exp = false | |
| @window_tone = Tone.new(0,0,0) | |
| @title_bgm = RPG::BGM.new | |
| @battle_bgm = RPG::BGM.new | |
| @battle_end_me = RPG::ME.new | |
| @gameover_me = RPG::ME.new | |
| @sounds = Array.new(24) { RPG::SE.new } | |
| @test_battlers = [] | |
| @test_troop_id = 1 | |
| @start_map_id = 1 | |
| @start_x = 0 | |
| @start_y = 0 | |
| @terms = RPG::System::Terms.new | |
| @battleback1_name = '' | |
| @battleback2_name = '' | |
| @battler_name = '' | |
| @battler_hue = 0 | |
| @edit_map_id = 1 | |
| end | |
| attr_accessor :game_title | |
| attr_accessor :version_id | |
| attr_accessor :japanese | |
| attr_accessor :party_members | |
| attr_accessor :currency_unit | |
| attr_accessor :skill_types | |
| attr_accessor :weapon_types | |
| attr_accessor :armor_types | |
| attr_accessor :elements | |
| attr_accessor :switches | |
| attr_accessor :variables | |
| attr_accessor :boat | |
| attr_accessor :ship | |
| attr_accessor :airship | |
| attr_accessor :title1_name | |
| attr_accessor :title2_name | |
| attr_accessor :opt_draw_title | |
| attr_accessor :opt_use_midi | |
| attr_accessor :opt_transparent | |
| attr_accessor :opt_followers | |
| attr_accessor :opt_slip_death | |
| attr_accessor :opt_floor_death | |
| attr_accessor :opt_display_tp | |
| attr_accessor :opt_extra_exp | |
| attr_accessor :window_tone | |
| attr_accessor :title_bgm | |
| attr_accessor :battle_bgm | |
| attr_accessor :battle_end_me | |
| attr_accessor :gameover_me | |
| attr_accessor :sounds | |
| attr_accessor :test_battlers | |
| attr_accessor :test_troop_id | |
| attr_accessor :start_map_id | |
| attr_accessor :start_x | |
| attr_accessor :start_y | |
| attr_accessor :terms | |
| attr_accessor :battleback1_name | |
| attr_accessor :battleback2_name | |
| attr_accessor :battler_name | |
| attr_accessor :battler_hue | |
| attr_accessor :edit_map_id | |
| end | |
| class RPG::System::Vehicle | |
| def initialize | |
| @character_name = '' | |
| @character_index = 0 | |
| @bgm = RPG::BGM.new | |
| @start_map_id = 0 | |
| @start_x = 0 | |
| @start_y = 0 | |
| end | |
| attr_accessor :character_name | |
| attr_accessor :character_index | |
| attr_accessor :bgm | |
| attr_accessor :start_map_id | |
| attr_accessor :start_x | |
| attr_accessor :start_y | |
| end | |
| class RPG::System::Terms | |
| def initialize | |
| @basic = Array.new(8) {''} | |
| @params = Array.new(8) {''} | |
| @etypes = Array.new(5) {''} | |
| @commands = Array.new(23) {''} | |
| end | |
| attr_accessor :basic | |
| attr_accessor :params | |
| attr_accessor :etypes | |
| attr_accessor :commands | |
| end | |
| class RPG::System::TestBattler | |
| def initialize | |
| @actor_id = 1 | |
| @level = 1 | |
| @equips = [0,0,0,0,0] | |
| end | |
| attr_accessor :actor_id | |
| attr_accessor :level | |
| attr_accessor :equips | |
| end | |
| class RPG::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 RPG::BGM < RPG::AudioFile | |
| @@last = RPG::BGM.new | |
| def play(pos = 0) | |
| if @name.empty? | |
| Audio.bgm_stop | |
| @@last = RPG::BGM.new | |
| else | |
| Audio.bgm_play('Audio/BGM/' + @name, @volume, @pitch, pos) | |
| @@last = self.clone | |
| end | |
| end | |
| def replay | |
| play(@pos) | |
| end | |
| def self.stop | |
| Audio.bgm_stop | |
| @@last = RPG::BGM.new | |
| end | |
| def self.fade(time) | |
| Audio.bgm_fade(time) | |
| @@last = RPG::BGM.new | |
| end | |
| def self.last | |
| @@last.pos = Audio.bgm_pos | |
| @@last | |
| end | |
| attr_accessor :pos | |
| end | |
| class RPG::BGS < RPG::AudioFile | |
| @@last = RPG::BGS.new | |
| def play(pos = 0) | |
| if @name.empty? | |
| Audio.bgs_stop | |
| @@last = RPG::BGS.new | |
| else | |
| Audio.bgs_play('Audio/BGS/' + @name, @volume, @pitch, pos) | |
| @@last = self.clone | |
| end | |
| end | |
| def replay | |
| play(@pos) | |
| end | |
| def self.stop | |
| Audio.bgs_stop | |
| @@last = RPG::BGS.new | |
| end | |
| def self.fade(time) | |
| Audio.bgs_fade(time) | |
| @@last = RPG::BGS.new | |
| end | |
| def self.last | |
| @@last.pos = Audio.bgs_pos | |
| @@last | |
| end | |
| attr_accessor :pos | |
| end | |
| class RPG::ME < RPG::AudioFile | |
| def play | |
| if @name.empty? | |
| Audio.me_stop | |
| else | |
| Audio.me_play('Audio/ME/' + @name, @volume, @pitch) | |
| end | |
| end | |
| def self.stop | |
| Audio.me_stop | |
| end | |
| def self.fade(time) | |
| Audio.me_fade(time) | |
| end | |
| end | |
| class RPG::SE < RPG::AudioFile | |
| def play | |
| unless @name.empty? | |
| Audio.se_play('Audio/SE/' + @name, @volume, @pitch) | |
| end | |
| end | |
| def self.stop | |
| Audio.se_stop | |
| end | |
| end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # coding: utf-8 | |
| require 'yaml' | |
| require 'zlib' | |
| require_relative 'rgss' | |
| [ | |
| 'Data/Actors.yml', | |
| 'Data/Animations.yml', | |
| 'Data/Armors.yml', | |
| 'Data/Classes.yml', | |
| 'Data/CommonEvents.yml', | |
| 'Data/Enemies.yml', | |
| 'Data/Items.yml', | |
| *Dir.glob('Data/Map[0-9][0-9][0-9].yml'), | |
| 'Data/MapInfos.yml', | |
| 'Data/Skills.yml', | |
| 'Data/States.yml', | |
| 'Data/System.yml', | |
| 'Data/Tilesets.yml', | |
| 'Data/Troops.yml', | |
| 'Data/Weapons.yml' | |
| ].each do |yml| | |
| data = '' | |
| data = YAML.load_file(yml) | |
| File.open('Data/'+File.basename(yml,'.yml')+'.rvdata2', 'wb') do |file| | |
| file.write(Marshal.dump(data)) | |
| end | |
| end | |
| data = YAML.load_file('Data/Scripts.yml') | |
| Dir.glob('Data/Scripts/*.rb') do |rb| | |
| File.open(rb, 'rb') do |file| | |
| file.read.gsub(/(\r\n|\r|\n)/, "\n").split("# -*- END_OF_SCRIPT -*-\n\n").map do |src| | |
| head, lf, script = src.partition("\n") | |
| id = /id: (\d+)/.match(head).to_a.at(1).to_i | |
| name = File.basename(rb, '.rb') | |
| name = '' if name == "( NONAME )" | |
| data[data.index(id)] = [id, name, Zlib::Deflate.deflate(script.chop)] | |
| end | |
| end | |
| end | |
| File.open('Data/Scripts.rvdata2', 'wb') do |file| | |
| file.write(Marshal.dump(data)) | |
| end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # coding: utf-8 | |
| require 'yaml' | |
| require 'zlib' | |
| require_relative 'rgss' | |
| [ | |
| 'Data/Actors.rvdata2', | |
| 'Data/Animations.rvdata2', | |
| 'Data/Armors.rvdata2', | |
| 'Data/Classes.rvdata2', | |
| 'Data/CommonEvents.rvdata2', | |
| 'Data/Enemies.rvdata2', | |
| 'Data/Items.rvdata2', | |
| *Dir.glob('Data/Map[0-9][0-9][0-9].rvdata2'), | |
| 'Data/MapInfos.rvdata2', | |
| 'Data/Skills.rvdata2', | |
| 'Data/States.rvdata2', | |
| 'Data/System.rvdata2', | |
| 'Data/Tilesets.rvdata2', | |
| 'Data/Troops.rvdata2', | |
| 'Data/Weapons.rvdata2' | |
| ].each do |rvdata2| | |
| data = '' | |
| File.open(rvdata2, 'rb') do |file| | |
| data = Marshal.load(file.read) | |
| end | |
| File.open('Data/'+File.basename(rvdata2,'.rvdata2')+'.yml', 'w') do |file| | |
| file.write(YAML.dump(data)) | |
| end | |
| end | |
| data = '' | |
| index = [] | |
| File.open('Data/Scripts.rvdata2', 'rb') do |file| | |
| data = Marshal.load(file.read).map do |id, name, script| | |
| name = '( NONAME )' if name.empty? | |
| index << id | |
| [name, '# -*- id: ' + | |
| "#{id} -*-\n" + | |
| Zlib::Inflate.inflate(script) + | |
| "\n# -*- END_OF_SCRIPT -*-\n\n" | |
| ] | |
| end | |
| end | |
| if File.exists?('Data/Scripts') | |
| Dir.glob('Data/Scripts/*.rb') do |file| | |
| File::delete(file) | |
| end | |
| else | |
| Dir.mkdir('Data/Scripts') | |
| end | |
| data.each do |name, script| | |
| File.open('Data/Scripts/'+name+'.rb', 'ab') do |file| | |
| file.write(script) | |
| end | |
| end | |
| File.open('Data/Scripts.yml', 'wb') do |file| | |
| file.write(YAML.dump(index)) | |
| end |
Author
返事が遅くなってしまいましたが、ご報告ありがとうございます。
YAMLが遅いのはしょうがないかと思っていたんですが、JSONにすると速いんですね、参考になりました。ありがとうございます。
結構展開、再圧縮するのに時間が掛かるようなので、どこまで処理しているのか分かるように、
処理中のファイル名を出力する等勝手にforkして改良を加えています。ご参考までに!
Author
looks good to me :-)
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
jsonable.rb っていうモジュールを使って簡単にJSON出力ができました。
JSON出力する場合に、「class RPG::System」に「attr_accessor :magic_number」の追記が必要でした。
参考にさせていただきましたので感謝がてらご報告まで。YAMLに比べてかなり展開速度が速かったです。