diff --git a/extra/dummify.sh b/extra/dummify.sh new file mode 100755 index 0000000..4c69e83 --- /dev/null +++ b/extra/dummify.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +for f in Graphics/**/* +do + echo $f + echo "1" > $f +done + +for f in Audio/**/* +do + echo $f + echo "1" > $f +done + diff --git a/extra/dump.rb b/extra/dump.rb new file mode 100644 index 0000000..996e931 --- /dev/null +++ b/extra/dump.rb @@ -0,0 +1,8 @@ +require 'yaml' + +eval(IO.read('dump_rgss.rb')) + +file = File.open(ARGV[0], "r") +data = Marshal.load(file) +IO.write('dump.yml', data.to_yaml) + diff --git a/extra/dump.sh b/extra/dump.sh new file mode 100755 index 0000000..96afbf9 --- /dev/null +++ b/extra/dump.sh @@ -0,0 +1,84 @@ +#!/bin/bash +ARRAY=() +ARRAYFILES=() + +FILE=$1 + +mkdir -p preload/Data +rm -f preload/$FILE.json +touch preload/$FILE.json + +ruby dump.rb $FILE + +while IFS= read -r line; do + if [[ $line == *"::"* ]]; then + continue + fi + if [[ $line == *"!"* ]]; then + continue + fi + if [[ $line == *"true" ]]; then + continue + fi + if [[ $line == *"false" ]]; then + continue + fi + if [[ $line == *"[]" ]]; then + continue + fi + + if [[ $line == *":"* ]]; then + value=${line#*:} + value=${value//[[:blank:]]/} + value=${value//\'} + + re="^[0-9.-]+$" + if [[ $value =~ $re ]] ; then + continue + fi + + re='^EV[0-9]+$' + if [[ $value =~ $re ]] ; then + continue + fi + + if [[ $value == 'A' ]] ; then + continue + fi + + if [[ $value == "''" ]] ; then + continue + fi + + if [ -z "$value" ] ; then + continue + fi + + if [[ " ${ARRAY[@]} " =~ " ${value} " ]]; then + continue + fi + + echo $value + ARRAY+=($value) + + files="$(find -name "$value.*")" + files="${files//\.\/}" + + if [ -z "$files" ] ; then + continue + fi + + echo "$files" + ARRAYFILES+=($files) + fi +done < dump.yml +rm dump.yml + +echo '[' >> preload/$FILE.json +printf '"%s",\n' "${ARRAYFILES[@]}" | sed '$s/,$//' >> preload/$FILE.json +echo ']' >> preload/$FILE.json + +echo "============================================================" +cat preload/$FILE.json +echo "============================================================" + diff --git a/extra/dump_rgss.rb b/extra/dump_rgss.rb new file mode 100644 index 0000000..42e5ddb --- /dev/null +++ b/extra/dump_rgss.rb @@ -0,0 +1,1025 @@ +#=============================================================================== +# 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 diff --git a/shell.html b/shell.html index db05179..39e7e22 100644 --- a/shell.html +++ b/shell.html @@ -172,6 +172,20 @@ window.onerror = function() { alert("An error occured!") }; + + window.fileLoadedAsync = function(file) { + if (!(/.*Map.*rxdata/i.test(file))) return; + + fetch('preload/' + file + '.json') + .then(function(response) { + return response.json(); + }) + .then(function(jsonResponse) { + jsonResponse.forEach((f) => { + fetch('gameasync/' + f).then().catch(); + }); + }); + }; {{{ SCRIPT }}} diff --git a/src/emscripten.cpp b/src/emscripten.cpp index 1653502..b52236f 100644 --- a/src/emscripten.cpp +++ b/src/emscripten.cpp @@ -37,6 +37,7 @@ EM_JS(void, load_file_async_js, (const char* fullPathC), { FS.createPreloadedFile(path, filename, iurl, true, true, function() { window.fileAsyncCache[fullPath] = 1; if (window.setNotBusy) window.setNotBusy(); + if (window.fileLoadedAsync) window.fileLoadedAsync(fullPath); wakeUp(); }, console.error); });