设为首页收藏本站同能贴吧 切换语言 繁体中文
开启辅助访问 切换到窄版
扫描二维码关注官方公众号
返回列表
+ 发新帖
查看: 98|回复: 0

[转载发布] Event Exportexter for RPGXP (rv20220318)

[复制链接]
累计送礼:
0 个
累计收礼:
1 个
  • TA的每日心情
    开心
    前天 04:10
  • 签到天数: 209 天

    连续签到: 2 天

    [LV.7]常住居民III

    4461

    主题

    864

    回帖

    2万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    7
    卡币
    22929
    OK点
    16
    推广点
    0
    同能卷
    50
    积分
    28284

    灌水之王

    发表于 前天 16:04 | 显示全部楼层 |阅读模式
    Event Exportexter for RPGXP
    (rv20220318)


    by KotatsuAkira / AkiraKotatsuhime



    Introduction
    I was in need of a litte practice in Ruby again and somebody else was in need of a feature to export events into a textfile, so I gave it a try. This script, when executed, exports all events on all of your maps, all CEs in the database and all troop-pages into one single TXT file in an easily readable format.

    I mostly tested this little developer tool with the samplegame KNight-Blade, the mass of the result, which is saved to "EventExport.txt" in the game's folder, is around 2MB, so better expect a very big file to pop up. Warning: Opening it with Windows' default Notepad may take some (long) time.


    Features
    On what this script does, see the introduction above, that described feature is the only purpose it has. The text-format of eventcode-lines MOSTLY resemble how they look in the english RPGXP itself, but there are some cases where I altered or extended how information about a command is written down. And since "@>" is ugly, "<>" is being used as prefix instead.


    Screenshots
    There isn't much to show off, but here you go, that's how it looks while processing data. The black background is transparent, so you'll see other stuff behind it if running midgame.

    Spoiler







    How to Use
    USE AT YOUR OWN RISK. Put the script anywhere above "Main", I'd suggest it to be placed directly above. To execute, you need to put the following line of code somewhere (e.g. into "Main" or as script-call in an event).

                    Ruby:        
    1. Event_Exportexter.run
    复制代码


    Afterwards, it will ask you to confirm start of data-processing by pressing game-buttons L+R. You can also cancel here by pressing B instead. It will start to lookup all maps, then the common-events and at last the troop-pages, progress being displayed in three green bars at game-screen's bottom meanwhile (see screenshot above).


    FAQ
    Q: Who should I credit?
    A: Me, of course. But actually, it'd be nice if you remove the script from your project before distribution. You can always keep backups and redistribute this code for free standalone as long as the enclosed copyright notice stays the way it is.
    Q: Is this compatible with (insert script here)?
    A: I don't know. But as long as your game is made with RPGXP, uses the default data-structures (database and map-files) and there is no other module named "Event_Exportexter" in it, it should be fine.
    Q: Will there be a version for (insert RPG Maker here)?
    A: You better don't expect that to happen.
    Q: Why are there "Unknown Command" entries in my textfile?
    A: That's interesting. If your event-data is not manipulated or corrupted, please show me where they occur.
    Q: An error occured while processing a command, why?
    A: Ouh, I may have overseen some mistakes in the syntax or something. Please tell me which commands are affected.
    Q: My computer exploded!
    A: That's not even a question. And did I already mention you are using this at your own risk?


    Demo
    There'd be no sense in making a demonstration project for this if you ask me.


    Script
                    Ruby:        
    1. #==============================================================================
    2. # ** Event Exportexter for RPGXP (rv20220318)
    3. #------------------------------------------------------------------------------
    4. #  Export event code content from all maps, CEs and troops to a textfile.
    5. #------------------------------------------------------------------------------
    6. #  © 2022 KotatsuAkira
    7. #  This is a developer tool for temporary usage only.
    8. #  Do not include this with public demo or game releases.
    9. #  Redistribute only with this copyright notice intact.
    10. #==============================================================================
    11. module Event_Exportexter
    12.   #--------------------------------------------------------------------------
    13.   # *
    14.   #--------------------------------------------------------------------------
    15.   TEXTOPTIONS_POS = ["Top", "Middle", "Bottom"]
    16.   TEXTOPTIONS_WINDOW = ["Show", "Hide"]
    17.   SWITCH_STATES = ["ON", "OFF"]
    18.   COMPARERS = ["==", ">=", "<=", ">", "<", "!="]
    19.   AMOUNT_OP = ["+", "-"]
    20.   MORE_LESS = ["or more", "or less"]
    21.   ACTOR_CONDITION = ["in the party", "applied", "learned", "equipped", "equipped", "inflicted"]
    22.   ENEMY_CONDITION = ["appeared", "inflicted"]
    23.   FACING_DIR = ["Down", "Left", "Right", "Up"]
    24.   GAME_BUTTONS = ["Down", "Left", "Right", "Up", "A", "B", "C", "X", "Y", "Z", "L", "R"]
    25.   OPERATORS = ["=", "+", "-", "*", "/", "%"]
    26.   VARIABLE_OP_ACTOR = ["Level", "EXP", "HP", "SP", "MaxHP", "MaxSP", "STR", "DEX", "AGI", "INT", "ATK", "PDEF", "MDEF", "EVA"]
    27.   VARIABLE_OP_ENEMY = ["HP", "SP", "MaxHP", "MaxSP", "STR", "DEX", "AGI", "INT", "ATK", "PDEF", "MDEF", "EVA"]
    28.   VARIABLE_OP_CHARACTER = ["Map X", "Map Y", "Direction", "Screen X", "Screen Y", "Terrain Tag"]
    29.   VARIABLE_OP_MISC = ["Map ID", "Party Members", "Gold", "Steps", "Play Time", "Timer", "Save Count"]
    30.   DISENABLERS = ["Disable", "Enable"]
    31.   TRANSFER_DIR = ["", ", Down", ", Left", ", Right", ", Up"]
    32.   TRANSFER_FADE = ["", ", No Fade"]
    33.   PLAYER_VISIBLE = ["Transparency", "Normal"]
    34.   ROUTE_STEPS = ["Move Down", "Move Left", "Move Right", "Move Up", "Move Lower Left", "Move Lower Right", "Move Upper Left", "Move Upper Right", "Move at Random", "Move toward Player", "Move away from Player", "1 Step Forward", "1 Step Backward"]
    35.   ROUTE_TURNS = ["Turn Down", "Turn Left", "Turn Right", "Turn Up", "Turn 90 Right", "Turn 90 Left", "Turn 180", "Turn 90 Right or Left", "Turn at Random", "Turn toward Player", "Turn away from Player"]
    36.   ROUTE_SWITCHES = ["Move Animation ON", "Move Animation OFF", "Stop Animation ON", "Stop Animation OFF", "Direction Fix ON", "Direction Fix OFF", "Through ON", "Through OFF", "Always on Top ON", "Always on Top OFF"]
    37.   BLENDINGS = ["Normal", "Add", "Sub"]
    38.   PIC_BASE = ["Upper Left", "Center"]
    39.   WEATHER = ["None", "Rain", "Storm", "Snow"]
    40.   LVSTAT = ["MaxHP", "MaxSP", "STR", "DEX", "AGI", "INT"]
    41.   EQUIPS = ["Weapon", "Shield", "Helmet", "Armor", "Accessory"]
    42.   FORCED_ACTIONS = ["Attack", "Defend", "Escape", "Do Nothing"]
    43.   FORCED_TARGETS = ["Last Target", "Random", "Index 1", "Index 2", "Index 3", "Index 4", "Index 5", "Index 6", "Index 7", "Index 8"]
    44.   FORCED_EXEC = ["", ", Execute Now"]
    45.   TRIGGER_TYPES = ["None", "Autorun", "Parallel"]
    46.   TROOP_SPAN = ["Battle", "Turn", "Moment"]
    47.   #--------------------------------------------------------------------------
    48.   # *
    49.   #--------------------------------------------------------------------------
    50.   def self.new_line
    51.     return "#{" " * @@indent}#{@@new_line}"
    52.   end
    53.   #--------------------------------------------------------------------------
    54.   # *
    55.   #--------------------------------------------------------------------------
    56.   def self.get_base_name(so)
    57.     return so ? so.name : "???"
    58.   end
    59.   #--------------------------------------------------------------------------
    60.   # *
    61.   #--------------------------------------------------------------------------
    62.   def self.get_actor(si)
    63.     return sprintf("[%.3d:%s]", si, get_base_name($data_actors[si]))
    64.   end
    65.   #--------------------------------------------------------------------------
    66.   # *
    67.   #--------------------------------------------------------------------------
    68.   def self.get_class(si)
    69.     return sprintf("[%.3d:%s]", si, get_base_name($data_classes[si]))
    70.   end
    71.   #--------------------------------------------------------------------------
    72.   # *
    73.   #--------------------------------------------------------------------------
    74.   def self.get_skill(si)
    75.     return sprintf("[%.3d:%s]", si, get_base_name($data_skills[si]))
    76.   end
    77.   #--------------------------------------------------------------------------
    78.   # *
    79.   #--------------------------------------------------------------------------
    80.   def self.get_item(si)
    81.     return sprintf("[%.3d:%s]", si, get_base_name($data_items[si]))
    82.   end
    83.   #--------------------------------------------------------------------------
    84.   # *
    85.   #--------------------------------------------------------------------------
    86.   def self.get_weapon(si)
    87.     return sprintf("[%.3d:%s]", si, get_base_name($data_weapons[si]))
    88.   end
    89.   #--------------------------------------------------------------------------
    90.   # *
    91.   #--------------------------------------------------------------------------
    92.   def self.get_armor(si)
    93.     return sprintf("[%.3d:%s]", si, get_base_name($data_armors[si]))
    94.   end
    95.   #--------------------------------------------------------------------------
    96.   # *
    97.   #--------------------------------------------------------------------------
    98.   def self.get_enemy(si)
    99.     return sprintf("[%.3d:%s]", si, get_base_name($data_enemies[si]))
    100.   end
    101.   #--------------------------------------------------------------------------
    102.   # *
    103.   #--------------------------------------------------------------------------
    104.   def self.get_troop(si)
    105.     return sprintf("[%.3d:%s]", si, get_base_name($data_troops[si]))
    106.   end
    107.   #--------------------------------------------------------------------------
    108.   # *
    109.   #--------------------------------------------------------------------------
    110.   def self.get_state(si)
    111.     return sprintf("[%.3d:%s]", si, get_base_name($data_states[si]))
    112.   end
    113.   #--------------------------------------------------------------------------
    114.   # *
    115.   #--------------------------------------------------------------------------
    116.   def self.get_animation(si)
    117.     return sprintf("[%.3d:%s]", si, get_base_name($data_animations[si]))
    118.   end
    119.   #--------------------------------------------------------------------------
    120.   # *
    121.   #--------------------------------------------------------------------------
    122.   def self.get_tileset(si)
    123.     return sprintf("[%.3d:%s]", si, get_base_name($data_tilesets[si]))
    124.   end
    125.   #--------------------------------------------------------------------------
    126.   # *
    127.   #--------------------------------------------------------------------------
    128.   def self.get_common_event(si)
    129.     return sprintf("[%.3d:%s]", si, get_base_name($data_common_events[si]))
    130.   end
    131.   #--------------------------------------------------------------------------
    132.   # *
    133.   #--------------------------------------------------------------------------
    134.   def self.get_map(si)
    135.     return sprintf("[%.3d:%s]", si, get_base_name($data_mapinfos[si]))
    136.   end
    137.   #--------------------------------------------------------------------------
    138.   # *
    139.   #--------------------------------------------------------------------------
    140.   def self.get_character(si)
    141.     return "Player" if si == -1
    142.     return "This Event" if si == 0
    143.     return sprintf("[%.3d:%s]", si, @@current_map ? get_base_name(@@current_map.events[si]) : "???")
    144.   end
    145.   #--------------------------------------------------------------------------
    146.   # *
    147.   #--------------------------------------------------------------------------
    148.   def self.get_switch(si)
    149.     return sprintf("[%.4d:%s]", si, $data_system.switches[si] || "???")
    150.   end
    151.   #--------------------------------------------------------------------------
    152.   # *
    153.   #--------------------------------------------------------------------------
    154.   def self.get_variable(si)
    155.     return sprintf("[%.4d:%s]", si, $data_system.variables[si] || "???")
    156.   end
    157.   #--------------------------------------------------------------------------
    158.   # *
    159.   #--------------------------------------------------------------------------
    160.   def self.get_switches(s1, s2)
    161.     return s1 == s2 ? get_switch(s1) : sprintf("[%.4d..%.4d]", s1, s2)
    162.   end
    163.   #--------------------------------------------------------------------------
    164.   # *
    165.   #--------------------------------------------------------------------------
    166.   def self.get_variables(s1, s2)
    167.     return s1 == s2 ? get_variable(s1) : sprintf("[%.4d..%.4d]", s1, s2)
    168.   end
    169.   #--------------------------------------------------------------------------
    170.   # *
    171.   #--------------------------------------------------------------------------
    172.   def self.get_actor_condition(sc, sp)
    173.     case sc
    174.     when 0
    175.       return ""
    176.     when 1
    177.       return "'#{sp}'"
    178.     when 2
    179.       return get_skill(sp)
    180.     when 3
    181.       return get_weapon(sp)
    182.     when 4
    183.       return get_armor(sp)
    184.     when 5
    185.       return get_state(sp)
    186.     end
    187.     return "???"
    188.   end
    189.   #--------------------------------------------------------------------------
    190.   # *
    191.   #--------------------------------------------------------------------------
    192.   def self.get_enemy_condition(sc, sp)
    193.     return sc == 0 ? "" : sc == 1 ? get_state(sp) : "???"
    194.   end
    195.   #--------------------------------------------------------------------------
    196.   # *
    197.   #--------------------------------------------------------------------------
    198.   def self.choice_cancel(si)
    199.     return si == 0 ? "" : si == 5 ? " (Cancel: Additional)" : " (Cancel: ##{si})"
    200.   end
    201.   #--------------------------------------------------------------------------
    202.   # *
    203.   #--------------------------------------------------------------------------
    204.   def self.is_choice_cancel(si)
    205.     return si == @@choice_cancel ? " (Triggered by Cancel)" : ""
    206.   end
    207.   #--------------------------------------------------------------------------
    208.   # *
    209.   #--------------------------------------------------------------------------
    210.   def self.get_var_config(sc, st, sp)
    211.     case sc
    212.     when 0
    213.       return st.to_i
    214.     when 1
    215.       return get_variable(st)
    216.     when 2
    217.       return "Random No. (#{st}...#{sp})"
    218.     when 3
    219.       return "#{get_item(st)} in Inventory"
    220.     when 4
    221.       return "#{get_actor(st)}'s #{VARIABLE_OP_ACTOR[sp]}"
    222.     when 5
    223.       return "[#{st}. ]'s #{VARIABLE_OP_ENEMY[sp]}"
    224.     when 6
    225.       return "#{get_character(st)}'s #{VARIABLE_OP_CHARACTER[sp]}"
    226.     when 7
    227.       return VARIABLE_OP_MISC[st]
    228.     end
    229.   end
    230.   #--------------------------------------------------------------------------
    231.   # *
    232.   #--------------------------------------------------------------------------
    233.   def self.enemy_present(si)
    234.     return @@current_troop && @@current_troop.members[si]
    235.   end
    236.   #--------------------------------------------------------------------------
    237.   # *
    238.   #--------------------------------------------------------------------------
    239.   def self.get_troop_enemy(si)
    240.     return "[#{si}. #{enemy_present(si) ? get_enemy(@@current_troop.members[si].enemy_id) : ""}]"
    241.   end
    242.   #--------------------------------------------------------------------------
    243.   # *
    244.   #--------------------------------------------------------------------------
    245.   def self.get_branch_content(*sp)
    246.     case sp[0]
    247.     when 0
    248.       return "Switch #{get_switch(sp[1])} == #{SWITCH_STATES[sp[2]]}"
    249.     when 1
    250.       return "Variable #{get_variable(sp[1])} #{COMPARERS[sp[4]]} #{sp[2] == 1 ? get_variable(sp[3]) : sp[3]}"
    251.     when 2
    252.       return "Self Switch #{sp[1]} == #{SWITCH_STATES[sp[2]]}"
    253.     when 3
    254.       return "Timer #{sp[1] / 60} min #{sp[1] % 60} sec #{MORE_LESS[sp[2]]}"
    255.     when 4
    256.       return "#{get_actor(sp[1])} is #{get_actor_condition(sp[2], sp[3])} #{ACTOR_CONDITION[sp[2]]}"
    257.     when 5
    258.       return "Enemy #{get_troop_enemy(sp[1])} is #{get_enemy_condition(sp[2], sp[3])} #{ENEMY_CONDITION[sp[2]]}"
    259.     when 6
    260.       return "#{get_character(sp[1])} is facing #{FACING_DIR[sp[2]]}"
    261.     when 7
    262.       return "Gold #{sp[1]} #{MORE_LESS[sp[2]]}"
    263.     when 8
    264.       return "Item #{get_item(sp[1])} in Inventory"
    265.     when 9
    266.       return "Weapon #{get_weapon(sp[1])} in Inventory"
    267.     when 10
    268.       return "Armor #{get_armor(sp[1])} in Inventory"
    269.     when 11
    270.       return "The #{GAME_BUTTONS[sp[1]]} button is being pressed"
    271.     when 12
    272.       return "Script: #{sp[1]}"
    273.     end
    274.   end
    275.   #--------------------------------------------------------------------------
    276.   # *
    277.   #--------------------------------------------------------------------------
    278.   def self.get_timer_data(st, sp)
    279.     return st == 1 ? "Stop" : "Startup (#{sp / 60} min. #{sp % 60} sec.)"
    280.   end
    281.   #--------------------------------------------------------------------------
    282.   # *
    283.   #--------------------------------------------------------------------------
    284.   def self.value_or_var(st, sp)
    285.     return st == 0 ? sp.to_s : "Variable #{get_variable(sp)}"
    286.   end
    287.   #--------------------------------------------------------------------------
    288.   # *
    289.   #--------------------------------------------------------------------------
    290.   def self.get_audio_file(sf)
    291.     return "'#{sf.name}', #{sf.volume}, #{sf.pitch}"
    292.   end
    293.   #--------------------------------------------------------------------------
    294.   # *
    295.   #--------------------------------------------------------------------------
    296.   def self.map_or_var(st, sp)
    297.     return st == 0 ? get_map(sp) : sprintf("Variable [%.4d]", sp)
    298.   end
    299.   #--------------------------------------------------------------------------
    300.   # *
    301.   #--------------------------------------------------------------------------
    302.   def self.transfer_pos(st, sx, sy, sd, sf)
    303.     return sprintf(st == 0 ? " (%.3d,%.3d)" : "[%.4d][%.4d]", sx, sy) + TRANSFER_DIR[sd] + TRANSFER_FADE[sf]
    304.   end
    305.   #--------------------------------------------------------------------------
    306.   # *
    307.   #--------------------------------------------------------------------------
    308.   def self.set_location(st, sx, sy, sd)
    309.     return sprintf("(%.3d,%.3d)#{TRANSFER_DIR[sd]}", sx, sy) if st == 0
    310.     return sprintf("Variable [%.4d][%.4d]#{TRANSFER_DIR[sd]}", sx, sy) if st == 1
    311.     return "Switch with #{get_character(sx)}#{TRANSFER_DIR[sd]}"
    312.   end
    313.   #--------------------------------------------------------------------------
    314.   # *
    315.   #--------------------------------------------------------------------------
    316.   def self.map_panorama(*sp)
    317.     return "Panorama = '#{sp[1]}', #{sp[2]}"
    318.   end
    319.   #--------------------------------------------------------------------------
    320.   # *
    321.   #--------------------------------------------------------------------------
    322.   def self.map_fog(*sp)
    323.     return "Fog = '#{sp[1]}', #{sp[2]}, #{sp[3]}, #{BLENDINGS[sp[4]]}, #{sp[5]}, #{sp[6]}, #{sp[7]}"
    324.   end
    325.   #--------------------------------------------------------------------------
    326.   # *
    327.   #--------------------------------------------------------------------------
    328.   def self.map_back(*sp)
    329.     return "Battleback = '#{sp[1]}'"
    330.   end
    331.   #--------------------------------------------------------------------------
    332.   # *
    333.   #--------------------------------------------------------------------------
    334.   def self.get_color_data(sc)
    335.     return "(#{sc.red.to_i},#{sc.green.to_i},#{sc.blue.to_i},#{sc.alpha.to_i})"
    336.   end
    337.   #--------------------------------------------------------------------------
    338.   # *
    339.   #--------------------------------------------------------------------------
    340.   def self.get_tone_data(st)
    341.     return "(#{st.red.to_i},#{st.green.to_i},#{st.blue.to_i},#{st.gray.to_i})"
    342.   end
    343.   #--------------------------------------------------------------------------
    344.   # *
    345.   #--------------------------------------------------------------------------
    346.   def self.add_route_step(se, *sp)
    347.     case se
    348.     when 1..13
    349.       return "<>#{ROUTE_STEPS[se - 1]}"
    350.     when 14
    351.       return "<>Jump: #{sp[0]}, #{sp[1]}"
    352.     when 15
    353.       return "<>Wait: #{sp[0]} frame(s)"
    354.     when 16..26
    355.       return "<>#{ROUTE_TURNS[se - 16]}"
    356.     when 27
    357.       return "<>Switch ON: #{get_switch(sp[0])}"
    358.     when 28
    359.       return "<>Switch OFF: #{get_switch(sp[0])}"
    360.     when 29
    361.       return "<>Change Speed: #{sp[0]}"
    362.     when 30
    363.       return "<>Change Freq: #{sp[0]}"
    364.     when 31..40
    365.       return "<>#{ROUTE_SWITCHES[se - 31]}"
    366.     when 41
    367.       return "<>Graphic: '#{sp[0]}', #{sp[1]}, #{sp[2]}, #{sp[3]}"
    368.     when 42
    369.       return "<>Change Opacity: #{sp[0]}"
    370.     when 43
    371.       return "<>Change Blending: #{BLENDINGS[sp[0]]}"
    372.     when 44
    373.       return "<>SE: #{get_audio_file(sp[0])}"
    374.     when 45
    375.       return "<>Script: #{sp[0]}"
    376.     end
    377.   end
    378.   #--------------------------------------------------------------------------
    379.   # *
    380.   #--------------------------------------------------------------------------
    381.   def self.route_options(sr)
    382.     return new_line unless sr.repeat || sr.skippable
    383.     return " (Repeat Action)#{sr.list.empty? ? "" : new_line}" if sr.repeat && !sr.skippable
    384.     return " (Ignore If Can't Move)#{sr.list.empty? ? "" : new_line}" if sr.skippable && !sr.repeat
    385.     return " (Repeat Action, Ignore If Can't Move)#{sr.list.empty? ? "" : new_line}"
    386.   end
    387.   #--------------------------------------------------------------------------
    388.   # *
    389.   #--------------------------------------------------------------------------
    390.   def self.step_indent
    391.     return "#{" " * @@indent}:               : "
    392.   end
    393.   #--------------------------------------------------------------------------
    394.   # *
    395.   #--------------------------------------------------------------------------
    396.   def self.generate_route(sl)
    397.     sl.pop
    398.     return (sl.collect {|se| "#{step_indent}#{add_route_step(se.code, *se.parameters)}" }).join(new_line)
    399.   end
    400.   #--------------------------------------------------------------------------
    401.   # *
    402.   #--------------------------------------------------------------------------
    403.   def self.pic_pos(st, sx, sy)
    404.     return sprintf(st == 0 ? "%d,%d" : "Variable [%.4d][%.4d]", sx, sy)
    405.   end
    406.   #--------------------------------------------------------------------------
    407.   # *
    408.   #--------------------------------------------------------------------------
    409.   def self.pic_show(si, sn, sb, st, sx, sy)
    410.     return "#{si}, '#{sn}', #{PIC_BASE[sb]} (#{pic_pos(st, sx, sy)})"
    411.   end
    412.   #--------------------------------------------------------------------------
    413.   # *
    414.   #--------------------------------------------------------------------------
    415.   def self.pic_move(si, sw, sb, st, sx, sy)
    416.     return "#{si}, @#{sw}, #{PIC_BASE[sb]} (#{pic_pos(st, sx, sy)})"
    417.   end
    418.   #--------------------------------------------------------------------------
    419.   # *
    420.   #--------------------------------------------------------------------------
    421.   def self.set_weather(st, sp)
    422.     return st == 0 ? WEATHER[0] : "#{WEATHER[st]}, #{sp}"
    423.   end
    424.   #--------------------------------------------------------------------------
    425.   # *
    426.   #--------------------------------------------------------------------------
    427.   def self.item_type(st)
    428.     return st == 1 ? "Weapon" : st == 2 ? "Armor" : "Item"
    429.   end
    430.   #--------------------------------------------------------------------------
    431.   # *
    432.   #--------------------------------------------------------------------------
    433.   def self.get_item_by_type(st, sp)
    434.     return st == 1 ? get_weapon(sp) : st == 2 ? get_armor(sp) : get_item(sp)
    435.   end
    436.   #--------------------------------------------------------------------------
    437.   # *
    438.   #--------------------------------------------------------------------------
    439.   def self.add_shop_item(st, sp)
    440.     return "#{item_type(st)} #{get_item_by_type(st, sp)}"
    441.   end
    442.   #--------------------------------------------------------------------------
    443.   # *
    444.   #--------------------------------------------------------------------------
    445.   def self.party_or_actor(si)
    446.     return si == 0 ? "Entire Party" : get_actor(si)
    447.   end
    448.   #--------------------------------------------------------------------------
    449.   # *
    450.   #--------------------------------------------------------------------------
    451.   def self.troop_or_enemy(si)
    452.     return si == 0 ? "Entire Troop" : get_troop_enemy(si)
    453.   end
    454.   #--------------------------------------------------------------------------
    455.   # *
    456.   #--------------------------------------------------------------------------
    457.   def self.knockout_possible(sf)
    458.     return sf == 1 ? ", Allow Knockout in Battle" : 0
    459.   end
    460.   #--------------------------------------------------------------------------
    461.   # *
    462.   #--------------------------------------------------------------------------
    463.   def self.change_hpsp(sk, so, st, sv, sf)
    464.     return "#{sk} #{AMOUNT_OP[so]} #{value_or_var(st, sv)}#{knockout_possible(sf)}"
    465.   end
    466.   #--------------------------------------------------------------------------
    467.   # *
    468.   #--------------------------------------------------------------------------
    469.   def self.get_equip(sl, sp)
    470.     return sl == 0 ? get_weapon(sp) : get_armor(sp)
    471.   end
    472.   #--------------------------------------------------------------------------
    473.   # *
    474.   #--------------------------------------------------------------------------
    475.   def self.get_action(st, sp)
    476.     return st == 1 ? get_skill(sp) : FORCED_ACTIONS[sp]
    477.   end
    478.   #--------------------------------------------------------------------------
    479.   # *
    480.   #--------------------------------------------------------------------------
    481.   def self.get_target(so, se)
    482.     return "#{FORCED_TARGETS[so - 2]}#{FORCED_EXEC[se]}"
    483.   end
    484.   #--------------------------------------------------------------------------
    485.   # *
    486.   #--------------------------------------------------------------------------
    487.   def self.actors_or_enemies(st, si)
    488.     return st == 1 ? troop_or_enemy(si) : party_or_actor(si)
    489.   end
    490.   #--------------------------------------------------------------------------
    491.   # *
    492.   #--------------------------------------------------------------------------
    493.   def self.troop_member(se, sx, sy, sh, si)
    494.     return "\n#{se} (X#{sx}, Y#{sy}#{sh ? ", HIDDEN" : ""}#{si ? ", IMMORTAL" : ""})"
    495.   end
    496.   #--------------------------------------------------------------------------
    497.   # *
    498.   #--------------------------------------------------------------------------
    499.   def self.write_command(si, sd, *sp)
    500.     case si
    501.     when 0
    502.       "<>"
    503.     when 101
    504.       "<>Show Text: #{sp[0]}"
    505.     when 401
    506.       ":          : #{sp[0]}"
    507.     when 102
    508.       @@choice_list = sp[0].dup
    509.       @@choice_cancel = sp[1]
    510.       "<>Show Choices: [#{@@choice_list.join("], [")}]#{choice_cancel(sp[1])}"
    511.     when 402
    512.       ": When [#{@@choice_list[sp[0]]}]#{is_choice_cancel(sp[0] + 1)}"
    513.     when 403
    514.       ": When Cancel"
    515.     when 404
    516.       ": Branch End"
    517.     when 103
    518.       "<>Input Number: #{get_variable(sp[0])}, #{sp[1]} digit(s)"
    519.     when 104
    520.       "<>Change Text Options: #{TEXTOPTIONS_POS[sp[0]]}, #{TEXTOPTIONS_WINDOW[sp[1]]}"
    521.     when 105
    522.       "<>Button Input Processing: #{get_variable(sp[0])}"
    523.     when 106
    524.       "<>Wait: #{sp[0]} frame(s)"
    525.     when 108
    526.       "<>Comment: #{sp[0]}"
    527.     when 408
    528.       ":        : #{sp[0]}"
    529.     when 111
    530.       "<>Conditional Branch: #{get_branch_content(*sp)}"
    531.     when 411
    532.       ": Else"
    533.     when 412
    534.       ": Branch End"
    535.     when 112
    536.       "<>Loop"
    537.     when 413
    538.       ": Repeat Above"
    539.     when 113
    540.       "<>Break Loop"
    541.     when 115
    542.       "<>Exit Event Processing"
    543.     when 116
    544.       "<>Erase Event"
    545.     when 117
    546.       "<>Call Common Event: #{get_common_event(sp[0])}"
    547.     when 118
    548.       "<>Label: #{sp[0]}"
    549.     when 119
    550.       "<>Jump to Label: #{sp[0]}"
    551.     when 121
    552.       "<>Control Switches: #{get_switches(sp[0], sp[1])} = #{SWITCH_STATES[sp[2]]}"
    553.     when 122
    554.       "<>Control Variables: #{get_variables(sp[0], sp[1])} OPERATORS[sp[2]] #{get_var_config(sp[3], sp[4], sp[5])}"
    555.     when 123
    556.       "<>Control Self Switch: #{sp[0]} = #{SWITCH_STATES[sp[1]]}"
    557.     when 124
    558.       "<>Control Timer: #{get_timer_data(sp[0], sp[1])}"
    559.     when 125
    560.       "<>Change Gold: #{AMOUNT_OP[sp[0]]} #{value_or_var(sp[1], sp[2])}"
    561.     when 126
    562.       "<>Change Items: #{get_item(sp[0])} #{AMOUNT_OP[sp[1]]} #{value_or_var(sp[2], sp[3])}"
    563.     when 127
    564.       "<>Change Weapons: #{get_weapon(sp[0])} #{AMOUNT_OP[sp[1]]} #{value_or_var(sp[2], sp[3])}"
    565.     when 128
    566.       "<>Change Armors: #{get_armor(sp[0])} #{AMOUNT_OP[sp[1]]} #{value_or_var(sp[2], sp[3])}"
    567.     when 129
    568.       "<>Change Party Member: #{AMOUNT_OP[sp[1]]} #{get_actor(sp[1])}#{sp[2] == 1 ? ", Initialize" : ""}"
    569.     when 131
    570.       "<>Change Windowskin: '#{sp[0]}'"
    571.     when 132
    572.       "<>Change Battle BGM: #{get_audio_file(sp[0])}"
    573.     when 133
    574.       "<>Change Battle End ME: #{get_audio_file(sp[0])}"
    575.     when 134
    576.       "<>Change Save Access: #{DISENABLERS[sp[0]]}"
    577.     when 135
    578.       "<>Change Menu Access: #{DISENABLERS[sp[0]]}"
    579.     when 136
    580.       "<>Change Encounter: #{DISENABLERS[sp[0]]}"
    581.     when 201
    582.       "<>Transfer Player: #{map_or_var(sp[0], sp[1])}, #{transfer_pos(sp[0], sp[2], sp[3], sp[4] / 2, sp[5])}"
    583.     when 202
    584.       "<>Set Event Location: #{get_character(sp[0])}, #{set_location(sp[1], sp[2], sp[3], sp[4] / 2)}"
    585.     when 203
    586.       "<>Scroll Map: #{FACING_DIR[sp[0] / 2]}, #{sp[1]}, #{sp[2]}"
    587.     when 204
    588.       "<>Change Map Settings: #{sp[0] == 0 ? map_panorama(*sp) : sp[0] == 1 ? map_fog(*sp) : map_back(*sp)}"
    589.     when 205
    590.       "<>Change Fog Color Tone: #{get_tone_data(sp[0])}, @#{sp[1]}"
    591.     when 206
    592.       "<>Change Fog Opacity: #{sp[0]}, @#{sp[1]}"
    593.     when 207
    594.       "<>Show Animation: #{get_character(sp[0])}, #{get_animation(sp[1])}"
    595.     when 208
    596.       "<>Change Transparent Flag: #{PLAYER_VISIBLE[sp[0]]}"
    597.     when 209
    598.       "<>Set Move Route: #{get_character(sp[0])}#{route_options(sp[1])}#{generate_route(sp[1].list)}"
    599.     when 509
    600.       return nil
    601.     when 210
    602.       "<>Wait for Move's Completion"
    603.     when 221
    604.       "<>Prepare for Transition"
    605.     when 222
    606.       "<>Execute Transition: '#{sp[0]}'"
    607.     when 223
    608.       "<>Change Screen Color Tone: #{get_tone_data(sp[0])}, @#{sp[1]}"
    609.     when 224
    610.       "<>Screen Flash: #{get_color_data(sp[0])}, @#{sp[1]}"
    611.     when 225
    612.       "<>Screen Shake: #{sp[0]}, #{sp[1]}, @#{sp[2]}"
    613.     when 231
    614.       "<>Show Picture: #{pic_show(*sp[0..5])}, (#{sp[6]}%,#{sp[7]}%), #{sp[8]}, #{BLENDINGS[sp[9]]}"
    615.     when 232
    616.       "<>Move Picture: #{pic_move(*sp[0..5])}, (#{sp[6]}%,#{sp[7]}%), #{sp[8]}, #{BLENDINGS[sp[9]]}"
    617.     when 233
    618.       "<>Rotate Picture: #{sp[0]}, #{sp[1] < 0 ? "" : "+"}#{sp[1]}"
    619.     when 234
    620.       "<>Change Picture Color Tone: #{sp[0]}, #{get_tone_data(sp[1])}, #{sp[2]}"
    621.     when 235
    622.       "<>Erase Picture: #{sp[0]}"
    623.     when 236
    624.       "<>Set Weather Effects: #{set_weather(sp[0], sp[1])}, @#{sp[2]}"
    625.     when 241
    626.       "<>Play BGM: #{get_audio_file(sp[0])}"
    627.     when 242
    628.       "<>Fade Out BGM: #{sp[0]} sec."
    629.     when 245
    630.       "<>Play BGS: #{get_audio_file(sp[0])}"
    631.     when 246
    632.       "<>Fade Out BGS: #{sp[0]} sec."
    633.     when 247
    634.       "<>Memorize BGM/BGS"
    635.     when 248
    636.       "<>Restore BGM/BGS"
    637.     when 249
    638.       "<>Play ME: #{get_audio_file(sp[0])}"
    639.     when 250
    640.       "<>Play SE: #{get_audio_file(sp[0])}"
    641.     when 251
    642.       "<>Stop SE"
    643.     when 301
    644.       "<>Battle Processing: #{get_troop(sp[0])}"
    645.     when 601
    646.       ": If Win"
    647.     when 602
    648.       ": If Escape"
    649.     when 603
    650.       ": If Lose"
    651.     when 604
    652.       ": Branch End"
    653.     when 302
    654.       "<>Shop Processing: #{add_shop_item(sp[0], sp[1])}"
    655.     when 605
    656.       ":                : #{add_shop_item(sp[0], sp[1])}"
    657.     when 303
    658.       "<>Name Input Processing: #{get_actor(sp[0])}, #{sp[1]} characters"
    659.     when 311
    660.       "<>Change HP: #{change_hpsp(party_or_actor(sp[0]), sp[1], sp[2], sp[3], sp[4])}"
    661.     when 312
    662.       "<>Change SP: #{change_hpsp(party_or_actor(sp[0]), sp[1], sp[2], sp[3], false)}"
    663.     when 313
    664.       "<>Change State: #{party_or_actor(sp[0])}, #{AMOUNT_OP[sp[1]]} #{get_state(sp[2])}"
    665.     when 314
    666.       "<>Recover All: #{party_or_actor(sp[0])}"
    667.     when 315
    668.       "<>Change EXP: #{party_or_actor(sp[0])}, #{AMOUNT_OP[sp[1]]} #{value_or_var(sp[2], sp[3])}"
    669.     when 316
    670.       "<>Change Level: #{party_or_actor(sp[0])}, #{AMOUNT_OP[sp[1]]} #{value_or_var(sp[2], sp[3])}"
    671.     when 317
    672.       "<>Change Parameters: #{get_actor(sp[0])}, #{LVSTAT[sp[1]]} #{AMOUNT_OP[sp[2]]} #{value_or_var(sp[3], sp[4])}"
    673.     when 318
    674.       "<>Change Skills: #{get_actor(sp[0])}, #{AMOUNT_OP[sp[1]]} #{get_skill(sp[2])}"
    675.     when 319
    676.       "<>Change Equipment: #{get_actor(sp[0])}, #{EQUIPS[sp[1]]} = #{get_equip(sp[1], sp[2])}"
    677.     when 320
    678.       "<>Change Actor Name: #{get_actor(sp[0])}, '#{sp[1]}'"
    679.     when 321
    680.       "<>Change Actor Class: #{get_actor(sp[0])}, #{get_class(sp[1])}"
    681.     when 322
    682.       "<>Change Actor Graphic: #{get_actor(sp[0])}, '#{sp[1]}', #{sp[2]}, '#{sp[3]}', #{sp[4]}"
    683.     when 331
    684.       "<>Change Enemy HP: #{change_hpsp(troop_or_enemy(sp[0]), sp[1], sp[2], sp[3], sp[4])}"
    685.     when 332
    686.       "<>Change Enemy SP: #{change_hpsp(troop_or_enemy(sp[0]), sp[1], sp[2], sp[3], false)}"
    687.     when 333
    688.       "<>Change Enemy State: #{troop_or_enemy(sp[0])}, #{AMOUNT_OP[sp[1]]} #{get_state(sp[2])}"
    689.     when 334
    690.       "<>Enemy Recover All: #{troop_or_enemy(sp[0])}"
    691.     when 335
    692.       "<>Enemy Appearance: #{get_troop_enemy(sp[0])}"
    693.     when 336
    694.       "<>Enemy Transform: #{get_troop_enemy(sp[0])}, #{get_enemy(sp[1])}"
    695.     when 337
    696.       "<>Show Battle Animation: #{actors_or_enemies(sp[0], sp[1])}, #{get_animation(sp[2])}"
    697.     when 338
    698.       "<>Deal Damage: #{actors_or_enemies(sp[0], sp[1])}, #{AMOUNT_OP[sp[2]]} #{value_or_var(sp[3], sp[4])}"
    699.     when 339
    700.       "<>Force Action: #{actors_or_enemies(sp[0], sp[1])}, #{get_action(sp[2], sp[3])}, #{get_target(sp[4], sp[5])}"
    701.     when 340
    702.       "<>Abort Battle"
    703.     when 351
    704.       "<>Call Menu Screen"
    705.     when 352
    706.       "<>Call Save Screen"
    707.     when 353
    708.       "<>Game Over"
    709.     when 354
    710.       "<>Return to Title Screen"
    711.     when 355
    712.       "<>Script: #{sp[0]}"
    713.     when 655
    714.       ":       : #{sp[0]}"
    715.     else
    716.       "<>Unknown Command ##{si} [#{sp.join(", ")}]"
    717.     end
    718.   end
    719.   #--------------------------------------------------------------------------
    720.   # *
    721.   #--------------------------------------------------------------------------
    722.   def self.add_command(sc, sr="")
    723.     @@indent = sc.indent
    724.     st = write_command(sc.code, sc.indent, *sc.parameters)
    725.     @@output += "#{" " * @@indent}#{st}\n#{sr}" if st
    726.   end
    727.   #--------------------------------------------------------------------------
    728.   # *
    729.   #--------------------------------------------------------------------------
    730.   def self.add_page_conditions(sc)
    731.     @@output += "\n\t\t\tSwitch #{get_switch(sc.switch1_id)} == ON" if sc.switch1_valid
    732.     @@output += "\n\t\t\tSwitch #{get_switch(sc.switch2_id)} == ON" if sc.switch2_valid
    733.     @@output += "\n\t\t\tVariable #{get_variable(sc.variable_id)} >= #{sc.variable_value}" if sc.variable_valid
    734.     @@output += "\n\t\t\tSelf Switch #{sc.self_switch_ch} == ON" if sc.self_switch_valid
    735.   end
    736.   #--------------------------------------------------------------------------
    737.   # *
    738.   #--------------------------------------------------------------------------
    739.   def self.add_event(si)
    740.     @@output += sprintf("\n\t\n\t\n\t[Event #%.3d: #{@@current_map.events[si].name}]\n\t\t\n\t\t", si)
    741.     @@current_map.events[si].pages.each_with_index do |sp, sj|
    742.       @@output += "\n\t\t\n\t\t[Page ##{sj + 1}]"
    743.       @@output += "\n\t\t\t\n\t\t\tCode Size: #{sp.list.size}\n\t\t\t"
    744.       add_page_conditions(sp.condition)
    745.       @@output += "\n\t\t\t\n\t\t\t\n\t\t\t[Code]\n\t\t\t\n\t\t\t"
    746.       sp.list.each {|sc| add_command(sc, "\t\t\t") }
    747.     end
    748.   end
    749.   #--------------------------------------------------------------------------
    750.   # *
    751.   #--------------------------------------------------------------------------
    752.   def self.progress_maps
    753.     return @@counter_maps.to_f / $data_mapinfos.keys.size.to_f
    754.   end
    755.   #--------------------------------------------------------------------------
    756.   # *
    757.   #--------------------------------------------------------------------------
    758.   def self.progress_ces
    759.     return @@counter_ces.to_f / ($data_common_events.size.to_f - 1)
    760.   end
    761.   #--------------------------------------------------------------------------
    762.   # *
    763.   #--------------------------------------------------------------------------
    764.   def self.progress_troops
    765.     return @@counter_troops.to_f / ($data_troops.size.to_f - 1)
    766.   end
    767.   #--------------------------------------------------------------------------
    768.   # *
    769.   #--------------------------------------------------------------------------
    770.   def self.add_map(si, so)
    771.     Graphics.update
    772.     @@counter_maps += 1
    773.     @@current_map = load_data(sprintf("Data/Map%03d.rxdata", si))
    774.     @@output += sprintf("\n\n\n\n[Map #%.3d: %s]", si, so.name)
    775.     @@output += " (#{@@current_map.width}×#{@@current_map.height})\n\n"
    776.     @@output += "Parent Map ID: #{so.parent_id}\nTree Order: #{so.order}"
    777.     @@current_map.events.keys.sort.each {|se| add_event(se) }
    778.     @@progressbar_maps.zoom_x = progress_maps * 640.0
    779.   end
    780.   #--------------------------------------------------------------------------
    781.   # *
    782.   #--------------------------------------------------------------------------
    783.   def self.add_common_event(si, so)
    784.     return unless so
    785.     Graphics.update
    786.     @@counter_ces += 1
    787.     @@current_ce = so
    788.     @@output += sprintf("\n\n\n\n[CE #%.3d: %s]\n\n", si, so.name)
    789.     @@output += "Trigger Type: #{TRIGGER_TYPES[so.trigger]}\nSwitch: #{get_switch(so.switch_id)}\n\t\n\t"
    790.     @@output += "\n\t\n\t\n\t[Code]\n\t\n\t"
    791.     @@current_ce.list.each {|sc| add_command(sc, "\t") }
    792.     @@progressbar_ces.zoom_x = progress_ces * 640.0
    793.   end
    794.   #--------------------------------------------------------------------------
    795.   # *
    796.   #--------------------------------------------------------------------------
    797.   def self.add_troop(si, so)
    798.     return unless so
    799.     Graphics.update
    800.     @@counter_troops += 1
    801.     @@current_troop = so
    802.     @@output += sprintf("\n\n\n\n[Troop #%.3d: %s] (%d member(s))\n\n", si, so.name, so.members.size)
    803.     so.members.each {|se| @@output += troop_member(get_enemy(se.enemy_id), se.x, se.y, se.hidden, se.immortal) }
    804.     @@current_troop.pages.each_with_index do |sp, sj|
    805.       @@output += "\n\t\n\t\n\t[Page ##{sj + 1}]"
    806.       @@output += "\n\t\t\n\t\tCode Size: #{sp.list.size}\n\t\tTrigger Span: #{TROOP_SPAN[sp.span]}"
    807.       @@output += "\n\t\t\n\t\t\n\t\t[Code]\n\t\t\n\t\t"
    808.       sp.list.each {|sc| add_command(sc, "\t\t") }
    809.     end
    810.     @@progressbar_troops.zoom_x = progress_troops * 640.0
    811.   end
    812.   #--------------------------------------------------------------------------
    813.   # *
    814.   #--------------------------------------------------------------------------
    815.   def self.terminate
    816.     if @@progress_bitmap
    817.       @@progress_bitmap.dispose
    818.       @@progressbar_maps.dispose
    819.       @@progressbar_ces.dispose
    820.       @@progressbar_troops.dispose
    821.     end
    822.     @@text_title.bitmap.dispose
    823.     @@text_ver.bitmap.dispose
    824.     @@text_press.bitmap.dispose
    825.     @@text_done.bitmap.dispose
    826.     @@text_exit.bitmap.dispose
    827.     @@back_bars.bitmap.dispose
    828.     @@background.bitmap.dispose
    829.     @@text_title.dispose
    830.     @@text_ver.dispose
    831.     @@text_press.dispose
    832.     @@text_done.dispose
    833.     @@text_exit.dispose
    834.     @@back_bars.dispose
    835.     @@background.dispose
    836.     @@viewport.dispose
    837.   end
    838.   #--------------------------------------------------------------------------
    839.   # *
    840.   #--------------------------------------------------------------------------
    841.   def self.run
    842.     $data_actors ||= load_data("Data/Actors.rxdata")
    843.     $data_classes ||= load_data("Data/Classes.rxdata")
    844.     $data_skills ||= load_data("Data/Skills.rxdata")
    845.     $data_items ||= load_data("Data/Items.rxdata")
    846.     $data_weapons ||= load_data("Data/Weapons.rxdata")
    847.     $data_armors ||= load_data("Data/Armors.rxdata")
    848.     $data_enemies ||= load_data("Data/Enemies.rxdata")
    849.     $data_troops ||= load_data("Data/Troops.rxdata")
    850.     $data_states ||= load_data("Data/States.rxdata")
    851.     $data_animations ||= load_data("Data/Animations.rxdata")
    852.     $data_tilesets ||= load_data("Data/Tilesets.rxdata")
    853.     $data_common_events = load_data("Data/CommonEvents.rxdata")
    854.     $data_system ||= load_data("Data/System.rxdata")
    855.     $data_mapinfos ||= load_data("Data/MapInfos.rxdata")
    856.     @@viewport = Viewport.new(0, 0, 640, 480)
    857.     @@viewport.z = 0x7FFFFFFC
    858.     @@background = Sprite.new(@@viewport)
    859.     @@background.bitmap = Bitmap.new(1, 1)
    860.     @@background.bitmap.set_pixel(0, 0, Color.new(0, 0, 0, 128))
    861.     @@background.zoom_x = 640.0
    862.     @@background.zoom_y = 480.0
    863.     @@background.z = 0x7FFFFFFC
    864.     @@back_bars = Sprite.new(@@viewport)
    865.     @@back_bars.bitmap = Bitmap.new(1, 1)
    866.     @@back_bars.bitmap.set_pixel(0, 0, Color.new(40, 200, 64, 64))
    867.     @@back_bars.zoom_x = 640.0
    868.     @@back_bars.zoom_y = 48.0
    869.     @@back_bars.y = 432
    870.     @@back_bars.z = 0x7FFFFFFD
    871.     @@text_title = Sprite.new(@@viewport)
    872.     @@text_title.y = 0
    873.     @@text_title.z = 0x7FFFFFFE
    874.     @@text_title.bitmap = Bitmap.new(640, 48)
    875.     @@text_title.bitmap.font.size = 36
    876.     @@text_title.bitmap.font.bold = true
    877.     @@text_ver = Sprite.new(@@viewport)
    878.     @@text_ver.y = 56
    879.     @@text_ver.z = 0x7FFFFFFE
    880.     @@text_ver.bitmap = Bitmap.new(640, 24)
    881.     @@text_ver.bitmap.font.size = 20
    882.     @@text_ver.bitmap.font.bold = true
    883.     @@text_press = Sprite.new(@@viewport)
    884.     @@text_press.bitmap = Bitmap.new(640, 32)
    885.     @@text_press.bitmap.font.size = 24
    886.     @@text_press.y = 96
    887.     @@text_press.z = 0x7FFFFFFE
    888.     @@text_done = Sprite.new(@@viewport)
    889.     @@text_done.bitmap = Bitmap.new(640, 32)
    890.     @@text_done.bitmap.font.size = 24
    891.     @@text_done.y = 120
    892.     @@text_done.z = 0x7FFFFFFE
    893.     @@text_exit = Sprite.new(@@viewport)
    894.     @@text_exit.bitmap = Bitmap.new(640, 24)
    895.     @@text_exit.bitmap.font.size = 20
    896.     @@text_exit.y = 160
    897.     @@text_exit.z = 0x7FFFFFFE
    898.     st = "Event Exportexter for RPGXP"
    899.     @@text_title.bitmap.draw_text(0, 0, 640, 48, st, 1)
    900.     st = "[rv20220318] © 2022 KotatsuAkira"
    901.     @@text_ver.bitmap.draw_text(0, 0, 640, 24, st, 1)
    902.     st = "Press [L+R] to start or [B] to cancel"
    903.     @@text_press.bitmap.draw_text(0, 0, 640, 32, st, 1)
    904.     @@progress_bitmap = nil
    905.     loop do
    906.       Graphics.update
    907.       Input.update
    908.       break if Input.press?(Input::B)
    909.       next unless Input.press?(Input::L) && Input.press?(Input::R)
    910.       @@text_press.bitmap.font.color.set(160, 160, 160, 255)
    911.       @@text_press.bitmap.clear
    912.       st = "Processing data..."
    913.       @@text_press.bitmap.draw_text(0, 0, 640, 32, st, 1)
    914.       @@output = ""
    915.       @@current_map = nil
    916.       @@current_ce = nil
    917.       @@current_troop = nil
    918.       @@progress_bitmap = Bitmap.new(1, 1)
    919.       @@progress_bitmap.set_pixel(0, 0, Color.new(40, 200, 64, 255))
    920.       @@progressbar_maps = Sprite.new(@@viewport)
    921.       @@progressbar_ces = Sprite.new(@@viewport)
    922.       @@progressbar_troops = Sprite.new(@@viewport)
    923.       @@progressbar_maps.bitmap = @@progress_bitmap
    924.       @@progressbar_ces.bitmap = @@progress_bitmap
    925.       @@progressbar_troops.bitmap = @@progress_bitmap
    926.       @@progressbar_maps.y = 432
    927.       @@progressbar_ces.y = 448
    928.       @@progressbar_troops.y = 464
    929.       @@progressbar_maps.zoom_x = 0.0
    930.       @@progressbar_ces.zoom_x = 0.0
    931.       @@progressbar_troops.zoom_x = 0.0
    932.       @@progressbar_maps.zoom_y = 16.0
    933.       @@progressbar_ces.zoom_y = 16.0
    934.       @@progressbar_troops.zoom_y = 16.0
    935.       @@progressbar_maps.z = 0x7FFFFFFE
    936.       @@progressbar_ces.z = 0x7FFFFFFE
    937.       @@progressbar_troops.z = 0x7FFFFFFE
    938.       @@new_line = "\n\t\t\t"
    939.       @@counter_maps = 0
    940.       $data_mapinfos.keys.sort.each {|sk| add_map(sk, $data_mapinfos[sk]) }
    941.       @@current_map = nil
    942.       @@new_line = "\n\t"
    943.       @@counter_ces = 0
    944.       $data_common_events.each_with_index {|se, si| add_common_event(si, se) }
    945.       @@current_ce = nil
    946.       @@new_line = "\n\t\t"
    947.       @@counter_troops = 0
    948.       $data_troops.each_with_index {|se, si| add_troop(si, se) }
    949.       @@current_troop = nil
    950.       @@text_press.bitmap.font.color.set(255, 255, 255, 255)
    951.       @@text_press.bitmap.clear
    952.       st = "Processing done (#{@@output.size} bytes)!"
    953.       @@text_press.bitmap.draw_text(0, 0, 640, 32, st, 1)
    954.       st = "Press [C] to save to "EventExport.txt" or [B] to cancel."
    955.       @@text_done.bitmap.draw_text(0, 0, 640, 32, st, 1)
    956.       st = "The program will exit afterwards."
    957.       @@text_exit.bitmap.draw_text(0, 0, 640, 24, st, 1)
    958.       loop do
    959.         Graphics.update
    960.         Input.update
    961.         if Input.trigger?(Input::B)
    962.           break
    963.         elsif Input.trigger?(Input::C)
    964.           File.open("EventExport.txt", "w") {|sf| sf.write(@@output) }
    965.           break
    966.         end
    967.       end
    968.       terminate
    969.       exit
    970.       break
    971.     end
    972.     terminate
    973.   end
    974. end
    复制代码




    本贴来自国际rpgmaker官方论坛作者:AkiraKotatsuhime处,因国际论坛即将永久关站,为了存档多年珍贵资料,署名转载到本论坛存档,由于官方帖子为英文原帖,需要中文翻译请点击论坛顶部切换语言为中文就可以将帖子翻译成中文浏览,方便大家随时查看,原文地址:https://forums.rpgmakerweb.com/threads/event-exportexter-for-rpgxp-rv20220318.144987/

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x
    天天去同能,天天有童年!
    回复 送礼论坛版权

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    高级模式
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    简体中文
    繁體中文
    English(英语)
    日本語(日语)
    Deutsch(德语)
    Русский язык(俄语)
    بالعربية(阿拉伯语)
    Türkçe(土耳其语)
    Português(葡萄牙语)
    ภาษาไทย(泰国语)
    한어(朝鲜语/韩语)
    Français(法语)
    关闭

    幸运抽奖

    社区每日抽奖来袭,快来试试你是欧皇还是非酋~

    立即查看

    聊天机器人
    Loading...

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2026-7-14 16:52 , Processed in 0.110134 second(s), 55 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表