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

[转载发布] Event Exportexter for RPGVX (rv20240405)

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

    连续签到: 2 天

    [LV.7]常住居民III

    7565

    主题

    864

    回帖

    3万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

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

    灌水之王

    发表于 2026-7-21 14:39:16 | 显示全部楼层 |阅读模式
    Event Exportexter for RPGVX
    (rv20240405)


    by KotatsuAkira / AkiraKotatsuhime



    Introduction
    It's been over two years now when somebody was in need of a feature to export events into a textfile, so I gave it a try and released the result, a little devtool for RPGXP that, 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. Today I present the almost same thing again, but this time for RPGVX (not Ace). And I'm a bit surprised how fast the process of rearranging the script was going.

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




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

    本帖子中包含更多资源

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

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

    使用道具 举报

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

    本版积分规则

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

    幸运抽奖

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

    立即查看

    聊天机器人
    Loading...

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

    GMT+8, 2026-7-30 21:26 , Processed in 0.079139 second(s), 53 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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