From da8466c43282a601b696d4b78919d491f654856e Mon Sep 17 00:00:00 2001 From: James Osborne Date: Wed, 20 May 2026 09:46:25 -0400 Subject: [PATCH 01/15] Make DC V2 EXP dispatcher rate-aware --- src/ReceiveSubcommands.cc | 7 +++++-- src/ServerState.cc | 4 ++++ src/ServerState.hh | 1 + 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/ReceiveSubcommands.cc b/src/ReceiveSubcommands.cc index 3bf2f090..9632df81 100644 --- a/src/ReceiveSubcommands.cc +++ b/src/ReceiveSubcommands.cc @@ -3656,11 +3656,14 @@ static asio::awaitable dispatch_dc_v2_exp_patch(shared_ptr c) { co_return; } - string key = "PsoPeepsV2EXP_internal_10x_"; + auto server_state = c->require_server_state(); + + string key = "PsoPeepsV2EXP_internal_"; + key += std::to_string(server_state->psopeeps_dcv2_exp_multiplier); + key += "x_"; key += diff_str; try { - auto server_state = c->require_server_state(); auto fn = server_state->client_functions->get(key, c->specific_version); co_await send_function_call(c, fn); } catch (const out_of_range&) { diff --git a/src/ServerState.cc b/src/ServerState.cc index 7b7604a4..d9d31fdf 100644 --- a/src/ServerState.cc +++ b/src/ServerState.cc @@ -878,6 +878,10 @@ void ServerState::load_config_early() { this->client_ping_interval_usecs = this->config_json->get_int("ClientPingInterval", 30000000); this->client_idle_timeout_usecs = this->config_json->get_int("ClientIdleTimeout", 60000000); this->patch_client_idle_timeout_usecs = this->config_json->get_int("PatchClientIdleTimeout", 300000000); + this->psopeeps_dcv2_exp_multiplier = this->config_json->get_int("PsoPeepsDCV2EXPMultiplier", 5); + if ((this->psopeeps_dcv2_exp_multiplier != 5) && (this->psopeeps_dcv2_exp_multiplier != 10)) { + throw runtime_error("PsoPeepsDCV2EXPMultiplier must be 5 or 10"); + } this->ip_stack_debug = this->config_json->get_bool("IPStackDebug", false); this->allow_unregistered_users = this->config_json->get_bool("AllowUnregisteredUsers", false); diff --git a/src/ServerState.hh b/src/ServerState.hh index af693ae8..b27f5a1a 100644 --- a/src/ServerState.hh +++ b/src/ServerState.hh @@ -123,6 +123,7 @@ struct ServerState : public std::enable_shared_from_this { uint64_t client_ping_interval_usecs = 30000000; uint64_t client_idle_timeout_usecs = 60000000; uint64_t patch_client_idle_timeout_usecs = 300000000; + uint64_t psopeeps_dcv2_exp_multiplier = 5; bool is_debug = false; bool ip_stack_debug = false; bool allow_unregistered_users = false; From 2b81f4d1d33d463343332eb6af126376a3004360 Mon Sep 17 00:00:00 2001 From: James Osborne Date: Wed, 20 May 2026 23:04:38 -0400 Subject: [PATCH 02/15] Add PC V2 EXP patch assets --- .../patch-pc-10x/Media/PSO/BattleParamEntry.dat | Bin 0 -> 62976 bytes .../Media/PSO/BattleParamEntry_on.dat | Bin 0 -> 62976 bytes .../patch-pc-10x/Media/PSO/newserv-test-pc.txt | 1 + system/patch-pc-5x/.metadata-cache.json | 1 + .../patch-pc-5x/Media/PSO/BattleParamEntry.dat | Bin 0 -> 62976 bytes .../Media/PSO/BattleParamEntry_on.dat | Bin 0 -> 62976 bytes .../patch-pc-5x/Media/PSO/newserv-test-pc.txt | 1 + 7 files changed, 3 insertions(+) create mode 100644 system/patch-pc-10x/Media/PSO/BattleParamEntry.dat create mode 100644 system/patch-pc-10x/Media/PSO/BattleParamEntry_on.dat create mode 100644 system/patch-pc-10x/Media/PSO/newserv-test-pc.txt create mode 100644 system/patch-pc-5x/.metadata-cache.json create mode 100644 system/patch-pc-5x/Media/PSO/BattleParamEntry.dat create mode 100644 system/patch-pc-5x/Media/PSO/BattleParamEntry_on.dat create mode 100644 system/patch-pc-5x/Media/PSO/newserv-test-pc.txt diff --git a/system/patch-pc-10x/Media/PSO/BattleParamEntry.dat b/system/patch-pc-10x/Media/PSO/BattleParamEntry.dat new file mode 100644 index 0000000000000000000000000000000000000000..21706618a960908f07a58427ef2a07b0b79810cc GIT binary patch literal 62976 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 z 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 R!)*EyOg$=%B;b|6{{w{#9+Ch6 literal 0 HcmV?d00001 diff --git a/system/patch-pc-10x/Media/PSO/newserv-test-pc.txt b/system/patch-pc-10x/Media/PSO/newserv-test-pc.txt new file mode 100644 index 00000000..d872b3ae --- /dev/null +++ b/system/patch-pc-10x/Media/PSO/newserv-test-pc.txt @@ -0,0 +1 @@ +This file exists to test the patch download system. \ No newline at end of file diff --git a/system/patch-pc-5x/.metadata-cache.json b/system/patch-pc-5x/.metadata-cache.json new file mode 100644 index 00000000..9097535f --- /dev/null +++ b/system/patch-pc-5x/.metadata-cache.json @@ -0,0 +1 @@ +{"./Media/PSO/BattleParamEntry.dat":[62976,1777951677030279266,217294441,[333854591,3127350609,1651077234]],"./Media/PSO/newserv-test-pc.txt":[51,1777951677024279220,3510656944,[3510656944]],"./Media/PSO/BattleParamEntry_on.dat":[62976,1777951677030279246,2007581284,[3877699156,780358345,290569120]]} \ No newline at end of file diff --git a/system/patch-pc-5x/Media/PSO/BattleParamEntry.dat b/system/patch-pc-5x/Media/PSO/BattleParamEntry.dat new file mode 100644 index 0000000000000000000000000000000000000000..a31d78259b2077bef3a0f073dd0b403ce8f4e62b GIT binary patch literal 62976 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 E9D2e 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 rx#LMK^PM|>itn)hr=DQEMatuLS-dqpS{z literal 0 HcmV?d00001 diff --git a/system/patch-pc-5x/Media/PSO/newserv-test-pc.txt b/system/patch-pc-5x/Media/PSO/newserv-test-pc.txt new file mode 100644 index 00000000..d872b3ae --- /dev/null +++ b/system/patch-pc-5x/Media/PSO/newserv-test-pc.txt @@ -0,0 +1 @@ +This file exists to test the patch download system. \ No newline at end of file From 07d04a761e617cfb84387bee53790e7441267b76 Mon Sep 17 00:00:00 2001 From: James Osborne Date: Thu, 21 May 2026 01:40:31 -0400 Subject: [PATCH 03/15] Restore GC EXP patches without XP client flag --- system/client-functions/PsoPeepsEP1EXP10x.s | 1 - system/client-functions/PsoPeepsEP1EXP5x.s | 1 - system/client-functions/PsoPeepsEP2EXP10xUS.s | 1 - system/client-functions/PsoPeepsEP2EXP5xUS.s | 1 - 4 files changed, 4 deletions(-) diff --git a/system/client-functions/PsoPeepsEP1EXP10x.s b/system/client-functions/PsoPeepsEP1EXP10x.s index eb1990ea..bd83b1be 100644 --- a/system/client-functions/PsoPeepsEP1EXP10x.s +++ b/system/client-functions/PsoPeepsEP1EXP10x.s @@ -1,7 +1,6 @@ .meta visibility="menu" .meta key="PsoPeepsEP1EXP10x" .meta name="EP1 10x" -.meta client_flag="0x0000200000000000" .meta description="Sets EP1 enemy EXP\nto 10x for GC crossplay" .versions 3OE2 3OJ5 diff --git a/system/client-functions/PsoPeepsEP1EXP5x.s b/system/client-functions/PsoPeepsEP1EXP5x.s index db798ee5..a7838c80 100644 --- a/system/client-functions/PsoPeepsEP1EXP5x.s +++ b/system/client-functions/PsoPeepsEP1EXP5x.s @@ -1,7 +1,6 @@ .meta visibility="menu" .meta key="PsoPeepsEP1EXP5x" .meta name="EP1 5x" -.meta client_flag="0x0000200000000000" .meta description="Sets EP1 enemy EXP\nto 5x for GC crossplay" .versions 3OE2 3OJ5 diff --git a/system/client-functions/PsoPeepsEP2EXP10xUS.s b/system/client-functions/PsoPeepsEP2EXP10xUS.s index daa53e12..c4676097 100644 --- a/system/client-functions/PsoPeepsEP2EXP10xUS.s +++ b/system/client-functions/PsoPeepsEP2EXP10xUS.s @@ -1,7 +1,6 @@ .meta visibility="menu" .meta key="PsoPeepsEP2EXP10xUS" .meta name="EP2 10x" -.meta client_flag="0x0000200000000000" .meta description="Sets EP2 enemy EXP\nto 10x for GC crossplay" .versions 3OE2 diff --git a/system/client-functions/PsoPeepsEP2EXP5xUS.s b/system/client-functions/PsoPeepsEP2EXP5xUS.s index 6fa1a39c..23304369 100644 --- a/system/client-functions/PsoPeepsEP2EXP5xUS.s +++ b/system/client-functions/PsoPeepsEP2EXP5xUS.s @@ -1,7 +1,6 @@ .meta visibility="menu" .meta key="PsoPeepsEP2EXP5xUS" .meta name="EP2 5x" -.meta client_flag="0x0000200000000000" .meta description="Sets EP2 enemy EXP\nto 5x for GC crossplay" .versions 3OE2 From b9c9b877d26cec91ac742ea632572412d3068bec Mon Sep 17 00:00:00 2001 From: James Osborne Date: Thu, 21 May 2026 01:50:06 -0400 Subject: [PATCH 04/15] Add GC V3 EXP dispatcher --- src/ReceiveSubcommands.cc | 48 + src/ServerState.cc | 5 + src/ServerState.hh | 1 + .../PsoPeepsGCEXP_enabled.10x_weekend.s | 839 +++++++++++++++ .../PsoPeepsGCEXP_enabled.5x_week.s | 839 +++++++++++++++ system/client-functions/PsoPeepsEP1EXP10x.s | 1 - system/client-functions/PsoPeepsEP1EXP5x.s | 1 - system/client-functions/PsoPeepsEP2EXP10x.s | 1 - system/client-functions/PsoPeepsEP2EXP10xJP.s | 2 - system/client-functions/PsoPeepsEP2EXP10xUS.s | 1 - system/client-functions/PsoPeepsEP2EXP5x.s | 1 - system/client-functions/PsoPeepsEP2EXP5xJP.s | 2 - system/client-functions/PsoPeepsEP2EXP5xUS.s | 1 - .../client-functions/PsoPeepsGCEXP_enabled.s | 839 +++++++++++++++ .../PsoPeepsGCEXP_internal_10x_ep1.s | 837 +++++++++++++++ .../PsoPeepsGCEXP_internal_10x_ep2.s | 977 ++++++++++++++++++ .../PsoPeepsGCEXP_internal_5x_ep1.s | 837 +++++++++++++++ .../PsoPeepsGCEXP_internal_5x_ep2.s | 977 ++++++++++++++++++ 18 files changed, 6199 insertions(+), 10 deletions(-) create mode 100644 system/client-functions.disabled/PsoPeepsGCEXP_enabled.10x_weekend.s create mode 100644 system/client-functions.disabled/PsoPeepsGCEXP_enabled.5x_week.s create mode 100644 system/client-functions/PsoPeepsGCEXP_enabled.s create mode 100644 system/client-functions/PsoPeepsGCEXP_internal_10x_ep1.s create mode 100644 system/client-functions/PsoPeepsGCEXP_internal_10x_ep2.s create mode 100644 system/client-functions/PsoPeepsGCEXP_internal_5x_ep1.s create mode 100644 system/client-functions/PsoPeepsGCEXP_internal_5x_ep2.s diff --git a/src/ReceiveSubcommands.cc b/src/ReceiveSubcommands.cc index 9632df81..de144a96 100644 --- a/src/ReceiveSubcommands.cc +++ b/src/ReceiveSubcommands.cc @@ -3671,6 +3671,53 @@ static asio::awaitable dispatch_dc_v2_exp_patch(shared_ptr c) { } } + +static asio::awaitable dispatch_gc_v3_exp_patch(shared_ptr c) { + if (c->version() != Version::GC_V3) { + co_return; + } + if (not c->check_flag(Client::Flag::HAS_SEND_FUNCTION_CALL)) { + co_return; + } + if (not c->login || not c->login->account) { + co_return; + } + if (not c->login->account->auto_patches_enabled.count("PsoPeepsGCEXP_enabled")) { + co_return; + } + + auto l = c->require_lobby(); + if (not l->is_game()) { + co_return; + } + + const char* episode_str = nullptr; + switch (l->episode) { + case Episode::EP1: + episode_str = "ep1"; + break; + case Episode::EP2: + episode_str = "ep2"; + break; + default: + co_return; + } + + auto server_state = c->require_server_state(); + + string key = "PsoPeepsGCEXP_internal_"; + key += std::to_string(server_state->psopeeps_gc_exp_multiplier); + key += "x_"; + key += episode_str; + + try { + auto fn = server_state->client_functions->get(key, c->specific_version); + co_await send_function_call(c, fn); + } catch (const out_of_range&) { + c->log.warning_f("GC V3 EXP dispatcher could not find client function {}", key); + } +} + static asio::awaitable on_trigger_set_event(shared_ptr c, SubcommandMessage& msg) { auto l = c->require_lobby(); if (!l->is_game()) { @@ -3678,6 +3725,7 @@ static asio::awaitable on_trigger_set_event(shared_ptr c, Subcomma } co_await dispatch_dc_v2_exp_patch(c); + co_await dispatch_gc_v3_exp_patch(c); const auto& cmd = msg.check_size_t(); auto event_sts = l->map_state->event_states_for_id(c->version(), cmd.floor, cmd.event_id); diff --git a/src/ServerState.cc b/src/ServerState.cc index d9d31fdf..3b1e56db 100644 --- a/src/ServerState.cc +++ b/src/ServerState.cc @@ -883,6 +883,11 @@ void ServerState::load_config_early() { throw runtime_error("PsoPeepsDCV2EXPMultiplier must be 5 or 10"); } + this->psopeeps_gc_exp_multiplier = this->config_json->get_int("PsoPeepsGCEXPMultiplier", 5); + if ((this->psopeeps_gc_exp_multiplier != 5) && (this->psopeeps_gc_exp_multiplier != 10)) { + throw runtime_error("PsoPeepsGCEXPMultiplier must be 5 or 10"); + } + this->ip_stack_debug = this->config_json->get_bool("IPStackDebug", false); this->allow_unregistered_users = this->config_json->get_bool("AllowUnregisteredUsers", false); this->allow_pc_nte = this->config_json->get_bool("AllowPCNTE", false); diff --git a/src/ServerState.hh b/src/ServerState.hh index b27f5a1a..980c27c6 100644 --- a/src/ServerState.hh +++ b/src/ServerState.hh @@ -124,6 +124,7 @@ struct ServerState : public std::enable_shared_from_this { uint64_t client_idle_timeout_usecs = 60000000; uint64_t patch_client_idle_timeout_usecs = 300000000; uint64_t psopeeps_dcv2_exp_multiplier = 5; + uint64_t psopeeps_gc_exp_multiplier = 5; bool is_debug = false; bool ip_stack_debug = false; bool allow_unregistered_users = false; diff --git a/system/client-functions.disabled/PsoPeepsGCEXP_enabled.10x_weekend.s b/system/client-functions.disabled/PsoPeepsGCEXP_enabled.10x_weekend.s new file mode 100644 index 00000000..af184ee0 --- /dev/null +++ b/system/client-functions.disabled/PsoPeepsGCEXP_enabled.10x_weekend.s @@ -0,0 +1,839 @@ +.meta key="PsoPeepsGCEXP_enabled" +.meta name="10x XP" +.meta description="GameCube V3 XP boost — server dispatches the correct 10x EP1/EP2 payload when entering gameplay." +.meta visibility="menu" +.meta client_flag="0x0000200000000000" + +.versions 3OE2 + +entry_ptr: +reloc0: + .offsetof start + +start: + .include WriteCodeBlocks + + # PSO Peeps GC Plus USA / 3OE2 + # Source table: BattleParamEntry_on.dat + # Active online battle-param table loaded at 0x811AB7C0 + # EXP field offset within each 0x24-byte row is +0x1C + # Generated from clean BattleParamEntry_on.dat; multiplier=10x + + .data + .data 4 + .binary 0000000a + + .data + .data 4 + .binary 0000003c + + .data + .data 4 + .binary 00000032 + + .data + .data 4 + .binary 00000046 + + .data + .data 4 + .binary 00000064 + + .data + .data 4 + .binary 000005dc + + .data + .data 4 + .binary 000000fa + + .data + .data 4 + .binary 000000a0 + + .data + .data 4 + .binary 000000a0 + + .data + .data 4 + .binary 000000aa + + .data + .data 4 + .binary 00000122 + + .data + .data 4 + .binary 00000028 + + .data + .data 4 + .binary 00000028 + + .data + .data 4 + .binary 0000015e + + .data + .data 4 + .binary 0000015e + + .data + .data 4 + .binary 000022c4 + + .data + .data 4 + .binary 00000064 + + .data + .data 4 + .binary 00000064 + + .data + .data 4 + .binary 00000fa0 + + .data + .data 4 + .binary 00000118 + + .data + .data 4 + .binary 00000028 + + .data + .data 4 + .binary 000003e8 + + .data + .data 4 + .binary 00000096 + + .data + .data 4 + .binary 0000001e + + .data + .data 4 + .binary 000000b4 + + .data + .data 4 + .binary 000000dc + + .data + .data 4 + .binary 000000c8 + + .data + .data 4 + .binary 0000010e + + .data + .data 4 + .binary 0000003c + + .data + .data 4 + .binary 000030d4 + + .data + .data 4 + .binary 00000064 + + .data + .data 4 + .binary 0000003c + + .data + .data 4 + .binary 00000028 + + .data + .data 4 + .binary 00000028 + + .data + .data 4 + .binary 000005dc + + .data + .data 4 + .binary 00000032 + + .data + .data 4 + .binary 00007530 + + .data + .data 4 + .binary 00000032 + + .data + .data 4 + .binary 00000082 + + .data + .data 4 + .binary 000003e8 + + .data + .data 4 + .binary 00000032 + + .data + .data 4 + .binary 0000003c + + .data + .data 4 + .binary 00000046 + + .data + .data 4 + .binary 000000c8 + + .data + .data 4 + .binary 00000064 + + .data + .data 4 + .binary 00000078 + + .data + .data 4 + .binary 0000008c + + .data + .data 4 + .binary 0000012c + + .data + .data 4 + .binary 000000dc + + .data + .data 4 + .binary 000000f0 + + .data + .data 4 + .binary 00000104 + + .data + .data 4 + .binary 00000168 + + .data + .data 4 + .binary 000001ae + + .data + .data 4 + .binary 000001a4 + + .data + .data 4 + .binary 000001c2 + + .data + .data 4 + .binary 000001ea + + .data + .data 4 + .binary 00000a1e + + .data + .data 4 + .binary 000002bc + + .data + .data 4 + .binary 00000244 + + .data + .data 4 + .binary 00000244 + + .data + .data 4 + .binary 00000258 + + .data + .data 4 + .binary 0000030c + + .data + .data 4 + .binary 00000190 + + .data + .data 4 + .binary 00000190 + + .data + .data 4 + .binary 000003ca + + .data + .data 4 + .binary 00000348 + + .data + .data 4 + .binary 00007d00 + + .data + .data 4 + .binary 000000fa + + .data + .data 4 + .binary 00000028 + + .data + .data 4 + .binary 00005dc0 + + .data + .data 4 + .binary 000002ee + + .data + .data 4 + .binary 00000190 + + .data + .data 4 + .binary 00000730 + + .data + .data 4 + .binary 0000023a + + .data + .data 4 + .binary 0000006e + + .data + .data 4 + .binary 00000262 + + .data + .data 4 + .binary 0000029e + + .data + .data 4 + .binary 00000280 + + .data + .data 4 + .binary 00000302 + + .data + .data 4 + .binary 000001ae + + .data + .data 4 + .binary 00009470 + + .data + .data 4 + .binary 000001ea + + .data + .data 4 + .binary 00000104 + + .data + .data 4 + .binary 000000e6 + + .data + .data 4 + .binary 000000e6 + + .data + .data 4 + .binary 00000a1e + + .data + .data 4 + .binary 00000032 + + .data + .data 4 + .binary 00013880 + + .data + .data 4 + .binary 00000032 + + .data + .data 4 + .binary 00000230 + + .data + .data 4 + .binary 00000730 + + .data + .data 4 + .binary 000001a4 + + .data + .data 4 + .binary 000001ae + + .data + .data 4 + .binary 000001c2 + + .data + .data 4 + .binary 00000280 + + .data + .data 4 + .binary 000001ea + + .data + .data 4 + .binary 00000208 + + .data + .data 4 + .binary 00000226 + + .data + .data 4 + .binary 0000032a + + .data + .data 4 + .binary 0000029e + + .data + .data 4 + .binary 000002bc + + .data + .data 4 + .binary 000002da + + .data + .data 4 + .binary 00000334 + + .data + .data 4 + .binary 00000398 + + .data + .data 4 + .binary 00000384 + + .data + .data 4 + .binary 000003ac + + .data + .data 4 + .binary 000003e8 + + .data + .data 4 + .binary 00000ed8 + + .data + .data 4 + .binary 0000055a + + .data + .data 4 + .binary 00000460 + + .data + .data 4 + .binary 00000460 + + .data + .data 4 + .binary 00000474 + + .data + .data 4 + .binary 000005c8 + + .data + .data 4 + .binary 00000370 + + .data + .data 4 + .binary 00000370 + + .data + .data 4 + .binary 000005dc + + .data + .data 4 + .binary 000005a0 + + .data + .data 4 + .binary 000153d8 + + .data + .data 4 + .binary 0000012c + + .data + .data 4 + .binary 00000050 + + .data + .data 4 + .binary 000137b8 + + .data + .data 4 + .binary 00000596 + + .data + .data 4 + .binary 00000370 + + .data + .data 4 + .binary 00000af0 + + .data + .data 4 + .binary 000004b0 + + .data + .data 4 + .binary 000000dc + + .data + .data 4 + .binary 00000488 + + .data + .data 4 + .binary 000004d8 + + .data + .data 4 + .binary 000004b0 + + .data + .data 4 + .binary 00000500 + + .data + .data 4 + .binary 00000398 + + .data + .data 4 + .binary 0001b198 + + .data + .data 4 + .binary 000003e8 + + .data + .data 4 + .binary 00000208 + + .data + .data 4 + .binary 000001e0 + + .data + .data 4 + .binary 000001e0 + + .data + .data 4 + .binary 00000ed8 + + .data + .data 4 + .binary 0000005a + + .data + .data 4 + .binary 00027100 + + .data + .data 4 + .binary 0000005a + + .data + .data 4 + .binary 00000456 + + .data + .data 4 + .binary 00000af0 + + .data + .data 4 + .binary 00000384 + + .data + .data 4 + .binary 00000398 + + .data + .data 4 + .binary 000003ac + + .data + .data 4 + .binary 000004e2 + + .data + .data 4 + .binary 000003e8 + + .data + .data 4 + .binary 00000410 + + .data + .data 4 + .binary 00000438 + + .data + .data 4 + .binary 000005dc + + .data + .data 4 + .binary 000004d8 + + .data + .data 4 + .binary 00000500 + + .data + .data 4 + .binary 00000528 + + .data + .data 4 + .binary 000005aa + + .data + .data 4 + .binary 00000a8c + + .data + .data 4 + .binary 00000abe + + .data + .data 4 + .binary 00000af0 + + .data + .data 4 + .binary 00000b86 + + .data + .data 4 + .binary 00002328 + + .data + .data 4 + .binary 00000dac + + .data + .data 4 + .binary 00000c80 + + .data + .data 4 + .binary 00000c80 + + .data + .data 4 + .binary 00000cb2 + + .data + .data 4 + .binary 00000e2e + + .data + .data 4 + .binary 000003e8 + + .data + .data 4 + .binary 000003e8 + + .data + .data 4 + .binary 00000f0a + + .data + .data 4 + .binary 00000e88 + + .data + .data 4 + .binary 0002de60 + + .data + .data 4 + .binary 00000258 + + .data + .data 4 + .binary 000000a0 + + .data + .data 4 + .binary 00026d18 + + .data + .data 4 + .binary 00000d70 + + .data + .data 4 + .binary 00000a00 + + .data + .data 4 + .binary 00001b58 + + .data + .data 4 + .binary 00000c80 + + .data + .data 4 + .binary 0000024e + + .data + .data 4 + .binary 00000c8a + + .data + .data 4 + .binary 00000dde + + .data + .data 4 + .binary 00000d0c + + .data + .data 4 + .binary 00000d0c + + .data + .data 4 + .binary 00000aaa + + .data + .data 4 + .binary 000395f8 + + .data + .data 4 + .binary 00000b54 + + .data + .data 4 + .binary 0000079e + + .data + .data 4 + .binary 00000708 + + .data + .data 4 + .binary 00000708 + + .data + .data 4 + .binary 00002260 + + .data + .data 4 + .binary 000000fa + + .data + .data 4 + .binary 0007a120 + + .data + .data 4 + .binary 000000c8 + + .data + .data 4 + .binary 00000bb8 + + .data + .data 4 + .binary 00001af4 + + .data + .data 4 + .binary 00000a96 + + .data + .data 4 + .binary 00000ac8 + + .data + .data 4 + .binary 00000a78 + + .data + .data 4 + .binary 00000d02 + + .data + .data 4 + .binary 00000b86 + + .data + .data 4 + .binary 00000bd6 + + .data + .data 4 + .binary 00000c6c + + .data + .data 4 + .binary 00000ea6 + + .data + .data 4 + .binary 00000d3e + + .data + .data 4 + .binary 00000d7a + + .data + .data 4 + .binary 00000de8 + + .data 0 + .data 0 diff --git a/system/client-functions.disabled/PsoPeepsGCEXP_enabled.5x_week.s b/system/client-functions.disabled/PsoPeepsGCEXP_enabled.5x_week.s new file mode 100644 index 00000000..d07c0b30 --- /dev/null +++ b/system/client-functions.disabled/PsoPeepsGCEXP_enabled.5x_week.s @@ -0,0 +1,839 @@ +.meta key="PsoPeepsGCEXP_enabled" +.meta name="5x XP" +.meta description="GameCube V3 XP boost — server dispatches the correct 5x EP1/EP2 payload when entering gameplay." +.meta visibility="menu" +.meta client_flag="0x0000200000000000" + +.versions 3OE2 + +entry_ptr: +reloc0: + .offsetof start + +start: + .include WriteCodeBlocks + + # PSO Peeps GC Plus USA / 3OE2 + # Source table: BattleParamEntry_on.dat + # Active online battle-param table loaded at 0x811AB7C0 + # EXP field offset within each 0x24-byte row is +0x1C + # Generated from clean BattleParamEntry_on.dat; multiplier=5x + + .data + .data 4 + .binary 00000005 + + .data + .data 4 + .binary 0000001e + + .data + .data 4 + .binary 00000019 + + .data + .data 4 + .binary 00000023 + + .data + .data 4 + .binary 00000032 + + .data + .data 4 + .binary 000002ee + + .data + .data 4 + .binary 0000007d + + .data + .data 4 + .binary 00000050 + + .data + .data 4 + .binary 00000050 + + .data + .data 4 + .binary 00000055 + + .data + .data 4 + .binary 00000091 + + .data + .data 4 + .binary 00000014 + + .data + .data 4 + .binary 00000014 + + .data + .data 4 + .binary 000000af + + .data + .data 4 + .binary 000000af + + .data + .data 4 + .binary 00001162 + + .data + .data 4 + .binary 00000032 + + .data + .data 4 + .binary 00000032 + + .data + .data 4 + .binary 000007d0 + + .data + .data 4 + .binary 0000008c + + .data + .data 4 + .binary 00000014 + + .data + .data 4 + .binary 000001f4 + + .data + .data 4 + .binary 0000004b + + .data + .data 4 + .binary 0000000f + + .data + .data 4 + .binary 0000005a + + .data + .data 4 + .binary 0000006e + + .data + .data 4 + .binary 00000064 + + .data + .data 4 + .binary 00000087 + + .data + .data 4 + .binary 0000001e + + .data + .data 4 + .binary 0000186a + + .data + .data 4 + .binary 00000032 + + .data + .data 4 + .binary 0000001e + + .data + .data 4 + .binary 00000014 + + .data + .data 4 + .binary 00000014 + + .data + .data 4 + .binary 000002ee + + .data + .data 4 + .binary 00000019 + + .data + .data 4 + .binary 00003a98 + + .data + .data 4 + .binary 00000019 + + .data + .data 4 + .binary 00000041 + + .data + .data 4 + .binary 000001f4 + + .data + .data 4 + .binary 00000019 + + .data + .data 4 + .binary 0000001e + + .data + .data 4 + .binary 00000023 + + .data + .data 4 + .binary 00000064 + + .data + .data 4 + .binary 00000032 + + .data + .data 4 + .binary 0000003c + + .data + .data 4 + .binary 00000046 + + .data + .data 4 + .binary 00000096 + + .data + .data 4 + .binary 0000006e + + .data + .data 4 + .binary 00000078 + + .data + .data 4 + .binary 00000082 + + .data + .data 4 + .binary 000000b4 + + .data + .data 4 + .binary 000000d7 + + .data + .data 4 + .binary 000000d2 + + .data + .data 4 + .binary 000000e1 + + .data + .data 4 + .binary 000000f5 + + .data + .data 4 + .binary 0000050f + + .data + .data 4 + .binary 0000015e + + .data + .data 4 + .binary 00000122 + + .data + .data 4 + .binary 00000122 + + .data + .data 4 + .binary 0000012c + + .data + .data 4 + .binary 00000186 + + .data + .data 4 + .binary 000000c8 + + .data + .data 4 + .binary 000000c8 + + .data + .data 4 + .binary 000001e5 + + .data + .data 4 + .binary 000001a4 + + .data + .data 4 + .binary 00003e80 + + .data + .data 4 + .binary 0000007d + + .data + .data 4 + .binary 00000014 + + .data + .data 4 + .binary 00002ee0 + + .data + .data 4 + .binary 00000177 + + .data + .data 4 + .binary 000000c8 + + .data + .data 4 + .binary 00000398 + + .data + .data 4 + .binary 0000011d + + .data + .data 4 + .binary 00000037 + + .data + .data 4 + .binary 00000131 + + .data + .data 4 + .binary 0000014f + + .data + .data 4 + .binary 00000140 + + .data + .data 4 + .binary 00000181 + + .data + .data 4 + .binary 000000d7 + + .data + .data 4 + .binary 00004a38 + + .data + .data 4 + .binary 000000f5 + + .data + .data 4 + .binary 00000082 + + .data + .data 4 + .binary 00000073 + + .data + .data 4 + .binary 00000073 + + .data + .data 4 + .binary 0000050f + + .data + .data 4 + .binary 00000019 + + .data + .data 4 + .binary 00009c40 + + .data + .data 4 + .binary 00000019 + + .data + .data 4 + .binary 00000118 + + .data + .data 4 + .binary 00000398 + + .data + .data 4 + .binary 000000d2 + + .data + .data 4 + .binary 000000d7 + + .data + .data 4 + .binary 000000e1 + + .data + .data 4 + .binary 00000140 + + .data + .data 4 + .binary 000000f5 + + .data + .data 4 + .binary 00000104 + + .data + .data 4 + .binary 00000113 + + .data + .data 4 + .binary 00000195 + + .data + .data 4 + .binary 0000014f + + .data + .data 4 + .binary 0000015e + + .data + .data 4 + .binary 0000016d + + .data + .data 4 + .binary 0000019a + + .data + .data 4 + .binary 000001cc + + .data + .data 4 + .binary 000001c2 + + .data + .data 4 + .binary 000001d6 + + .data + .data 4 + .binary 000001f4 + + .data + .data 4 + .binary 0000076c + + .data + .data 4 + .binary 000002ad + + .data + .data 4 + .binary 00000230 + + .data + .data 4 + .binary 00000230 + + .data + .data 4 + .binary 0000023a + + .data + .data 4 + .binary 000002e4 + + .data + .data 4 + .binary 000001b8 + + .data + .data 4 + .binary 000001b8 + + .data + .data 4 + .binary 000002ee + + .data + .data 4 + .binary 000002d0 + + .data + .data 4 + .binary 0000a9ec + + .data + .data 4 + .binary 00000096 + + .data + .data 4 + .binary 00000028 + + .data + .data 4 + .binary 00009bdc + + .data + .data 4 + .binary 000002cb + + .data + .data 4 + .binary 000001b8 + + .data + .data 4 + .binary 00000578 + + .data + .data 4 + .binary 00000258 + + .data + .data 4 + .binary 0000006e + + .data + .data 4 + .binary 00000244 + + .data + .data 4 + .binary 0000026c + + .data + .data 4 + .binary 00000258 + + .data + .data 4 + .binary 00000280 + + .data + .data 4 + .binary 000001cc + + .data + .data 4 + .binary 0000d8cc + + .data + .data 4 + .binary 000001f4 + + .data + .data 4 + .binary 00000104 + + .data + .data 4 + .binary 000000f0 + + .data + .data 4 + .binary 000000f0 + + .data + .data 4 + .binary 0000076c + + .data + .data 4 + .binary 0000002d + + .data + .data 4 + .binary 00013880 + + .data + .data 4 + .binary 0000002d + + .data + .data 4 + .binary 0000022b + + .data + .data 4 + .binary 00000578 + + .data + .data 4 + .binary 000001c2 + + .data + .data 4 + .binary 000001cc + + .data + .data 4 + .binary 000001d6 + + .data + .data 4 + .binary 00000271 + + .data + .data 4 + .binary 000001f4 + + .data + .data 4 + .binary 00000208 + + .data + .data 4 + .binary 0000021c + + .data + .data 4 + .binary 000002ee + + .data + .data 4 + .binary 0000026c + + .data + .data 4 + .binary 00000280 + + .data + .data 4 + .binary 00000294 + + .data + .data 4 + .binary 000002d5 + + .data + .data 4 + .binary 00000546 + + .data + .data 4 + .binary 0000055f + + .data + .data 4 + .binary 00000578 + + .data + .data 4 + .binary 000005c3 + + .data + .data 4 + .binary 00001194 + + .data + .data 4 + .binary 000006d6 + + .data + .data 4 + .binary 00000640 + + .data + .data 4 + .binary 00000640 + + .data + .data 4 + .binary 00000659 + + .data + .data 4 + .binary 00000717 + + .data + .data 4 + .binary 000001f4 + + .data + .data 4 + .binary 000001f4 + + .data + .data 4 + .binary 00000785 + + .data + .data 4 + .binary 00000744 + + .data + .data 4 + .binary 00016f30 + + .data + .data 4 + .binary 0000012c + + .data + .data 4 + .binary 00000050 + + .data + .data 4 + .binary 0001368c + + .data + .data 4 + .binary 000006b8 + + .data + .data 4 + .binary 00000500 + + .data + .data 4 + .binary 00000dac + + .data + .data 4 + .binary 00000640 + + .data + .data 4 + .binary 00000127 + + .data + .data 4 + .binary 00000645 + + .data + .data 4 + .binary 000006ef + + .data + .data 4 + .binary 00000686 + + .data + .data 4 + .binary 00000686 + + .data + .data 4 + .binary 00000555 + + .data + .data 4 + .binary 0001cafc + + .data + .data 4 + .binary 000005aa + + .data + .data 4 + .binary 000003cf + + .data + .data 4 + .binary 00000384 + + .data + .data 4 + .binary 00000384 + + .data + .data 4 + .binary 00001130 + + .data + .data 4 + .binary 0000007d + + .data + .data 4 + .binary 0003d090 + + .data + .data 4 + .binary 00000064 + + .data + .data 4 + .binary 000005dc + + .data + .data 4 + .binary 00000d7a + + .data + .data 4 + .binary 0000054b + + .data + .data 4 + .binary 00000564 + + .data + .data 4 + .binary 0000053c + + .data + .data 4 + .binary 00000681 + + .data + .data 4 + .binary 000005c3 + + .data + .data 4 + .binary 000005eb + + .data + .data 4 + .binary 00000636 + + .data + .data 4 + .binary 00000753 + + .data + .data 4 + .binary 0000069f + + .data + .data 4 + .binary 000006bd + + .data + .data 4 + .binary 000006f4 + + .data 0 + .data 0 diff --git a/system/client-functions/PsoPeepsEP1EXP10x.s b/system/client-functions/PsoPeepsEP1EXP10x.s index bd83b1be..add0b3a6 100644 --- a/system/client-functions/PsoPeepsEP1EXP10x.s +++ b/system/client-functions/PsoPeepsEP1EXP10x.s @@ -1,4 +1,3 @@ -.meta visibility="menu" .meta key="PsoPeepsEP1EXP10x" .meta name="EP1 10x" .meta description="Sets EP1 enemy EXP\nto 10x for GC crossplay" diff --git a/system/client-functions/PsoPeepsEP1EXP5x.s b/system/client-functions/PsoPeepsEP1EXP5x.s index a7838c80..e367bd02 100644 --- a/system/client-functions/PsoPeepsEP1EXP5x.s +++ b/system/client-functions/PsoPeepsEP1EXP5x.s @@ -1,4 +1,3 @@ -.meta visibility="menu" .meta key="PsoPeepsEP1EXP5x" .meta name="EP1 5x" .meta description="Sets EP1 enemy EXP\nto 5x for GC crossplay" diff --git a/system/client-functions/PsoPeepsEP2EXP10x.s b/system/client-functions/PsoPeepsEP2EXP10x.s index b5e118af..b1f8fb65 100644 --- a/system/client-functions/PsoPeepsEP2EXP10x.s +++ b/system/client-functions/PsoPeepsEP2EXP10x.s @@ -1,6 +1,5 @@ .meta key="PsoPeepsEP2EXP10x" .meta name="EP2 10x" -.meta client_flag="0x0000200000000000" .meta description="Sets EP2 enemy EXP\nto 10x for GC crossplay" .versions 3OE2 3OJ5 diff --git a/system/client-functions/PsoPeepsEP2EXP10xJP.s b/system/client-functions/PsoPeepsEP2EXP10xJP.s index 8104cfa2..f265fb3f 100644 --- a/system/client-functions/PsoPeepsEP2EXP10xJP.s +++ b/system/client-functions/PsoPeepsEP2EXP10xJP.s @@ -1,7 +1,5 @@ -.meta visibility="menu" .meta key="PsoPeepsEP2EXP10xJP" .meta name="EP2 10x" -.meta client_flag="0x0000200000000000" .meta description="Sets EP2 enemy EXP\nto 10x for GC crossplay" .versions 3OJ5 diff --git a/system/client-functions/PsoPeepsEP2EXP10xUS.s b/system/client-functions/PsoPeepsEP2EXP10xUS.s index c4676097..38c607c0 100644 --- a/system/client-functions/PsoPeepsEP2EXP10xUS.s +++ b/system/client-functions/PsoPeepsEP2EXP10xUS.s @@ -1,4 +1,3 @@ -.meta visibility="menu" .meta key="PsoPeepsEP2EXP10xUS" .meta name="EP2 10x" .meta description="Sets EP2 enemy EXP\nto 10x for GC crossplay" diff --git a/system/client-functions/PsoPeepsEP2EXP5x.s b/system/client-functions/PsoPeepsEP2EXP5x.s index e733adb8..011dc187 100644 --- a/system/client-functions/PsoPeepsEP2EXP5x.s +++ b/system/client-functions/PsoPeepsEP2EXP5x.s @@ -1,6 +1,5 @@ .meta key="PsoPeepsEP2EXP5x" .meta name="EP2 5x" -.meta client_flag="0x0000200000000000" .meta description="Sets EP2 enemy EXP\nto 5x for GC crossplay" .versions 3OE2 3OJ5 diff --git a/system/client-functions/PsoPeepsEP2EXP5xJP.s b/system/client-functions/PsoPeepsEP2EXP5xJP.s index 11013f78..e670dab0 100644 --- a/system/client-functions/PsoPeepsEP2EXP5xJP.s +++ b/system/client-functions/PsoPeepsEP2EXP5xJP.s @@ -1,7 +1,5 @@ -.meta visibility="menu" .meta key="PsoPeepsEP2EXP5xJP" .meta name="EP2 5x" -.meta client_flag="0x0000200000000000" .meta description="Sets EP2 enemy EXP\nto 5x for GC crossplay" .versions 3OJ5 diff --git a/system/client-functions/PsoPeepsEP2EXP5xUS.s b/system/client-functions/PsoPeepsEP2EXP5xUS.s index 23304369..26a941fb 100644 --- a/system/client-functions/PsoPeepsEP2EXP5xUS.s +++ b/system/client-functions/PsoPeepsEP2EXP5xUS.s @@ -1,4 +1,3 @@ -.meta visibility="menu" .meta key="PsoPeepsEP2EXP5xUS" .meta name="EP2 5x" .meta description="Sets EP2 enemy EXP\nto 5x for GC crossplay" diff --git a/system/client-functions/PsoPeepsGCEXP_enabled.s b/system/client-functions/PsoPeepsGCEXP_enabled.s new file mode 100644 index 00000000..d07c0b30 --- /dev/null +++ b/system/client-functions/PsoPeepsGCEXP_enabled.s @@ -0,0 +1,839 @@ +.meta key="PsoPeepsGCEXP_enabled" +.meta name="5x XP" +.meta description="GameCube V3 XP boost — server dispatches the correct 5x EP1/EP2 payload when entering gameplay." +.meta visibility="menu" +.meta client_flag="0x0000200000000000" + +.versions 3OE2 + +entry_ptr: +reloc0: + .offsetof start + +start: + .include WriteCodeBlocks + + # PSO Peeps GC Plus USA / 3OE2 + # Source table: BattleParamEntry_on.dat + # Active online battle-param table loaded at 0x811AB7C0 + # EXP field offset within each 0x24-byte row is +0x1C + # Generated from clean BattleParamEntry_on.dat; multiplier=5x + + .data + .data 4 + .binary 00000005 + + .data + .data 4 + .binary 0000001e + + .data + .data 4 + .binary 00000019 + + .data + .data 4 + .binary 00000023 + + .data + .data 4 + .binary 00000032 + + .data + .data 4 + .binary 000002ee + + .data + .data 4 + .binary 0000007d + + .data + .data 4 + .binary 00000050 + + .data + .data 4 + .binary 00000050 + + .data + .data 4 + .binary 00000055 + + .data + .data 4 + .binary 00000091 + + .data + .data 4 + .binary 00000014 + + .data + .data 4 + .binary 00000014 + + .data + .data 4 + .binary 000000af + + .data + .data 4 + .binary 000000af + + .data + .data 4 + .binary 00001162 + + .data + .data 4 + .binary 00000032 + + .data + .data 4 + .binary 00000032 + + .data + .data 4 + .binary 000007d0 + + .data + .data 4 + .binary 0000008c + + .data + .data 4 + .binary 00000014 + + .data + .data 4 + .binary 000001f4 + + .data + .data 4 + .binary 0000004b + + .data + .data 4 + .binary 0000000f + + .data + .data 4 + .binary 0000005a + + .data + .data 4 + .binary 0000006e + + .data + .data 4 + .binary 00000064 + + .data + .data 4 + .binary 00000087 + + .data + .data 4 + .binary 0000001e + + .data + .data 4 + .binary 0000186a + + .data + .data 4 + .binary 00000032 + + .data + .data 4 + .binary 0000001e + + .data + .data 4 + .binary 00000014 + + .data + .data 4 + .binary 00000014 + + .data + .data 4 + .binary 000002ee + + .data + .data 4 + .binary 00000019 + + .data + .data 4 + .binary 00003a98 + + .data + .data 4 + .binary 00000019 + + .data + .data 4 + .binary 00000041 + + .data + .data 4 + .binary 000001f4 + + .data + .data 4 + .binary 00000019 + + .data + .data 4 + .binary 0000001e + + .data + .data 4 + .binary 00000023 + + .data + .data 4 + .binary 00000064 + + .data + .data 4 + .binary 00000032 + + .data + .data 4 + .binary 0000003c + + .data + .data 4 + .binary 00000046 + + .data + .data 4 + .binary 00000096 + + .data + .data 4 + .binary 0000006e + + .data + .data 4 + .binary 00000078 + + .data + .data 4 + .binary 00000082 + + .data + .data 4 + .binary 000000b4 + + .data + .data 4 + .binary 000000d7 + + .data + .data 4 + .binary 000000d2 + + .data + .data 4 + .binary 000000e1 + + .data + .data 4 + .binary 000000f5 + + .data + .data 4 + .binary 0000050f + + .data + .data 4 + .binary 0000015e + + .data + .data 4 + .binary 00000122 + + .data + .data 4 + .binary 00000122 + + .data + .data 4 + .binary 0000012c + + .data + .data 4 + .binary 00000186 + + .data + .data 4 + .binary 000000c8 + + .data + .data 4 + .binary 000000c8 + + .data + .data 4 + .binary 000001e5 + + .data + .data 4 + .binary 000001a4 + + .data + .data 4 + .binary 00003e80 + + .data + .data 4 + .binary 0000007d + + .data + .data 4 + .binary 00000014 + + .data + .data 4 + .binary 00002ee0 + + .data + .data 4 + .binary 00000177 + + .data + .data 4 + .binary 000000c8 + + .data + .data 4 + .binary 00000398 + + .data + .data 4 + .binary 0000011d + + .data + .data 4 + .binary 00000037 + + .data + .data 4 + .binary 00000131 + + .data + .data 4 + .binary 0000014f + + .data + .data 4 + .binary 00000140 + + .data + .data 4 + .binary 00000181 + + .data + .data 4 + .binary 000000d7 + + .data + .data 4 + .binary 00004a38 + + .data + .data 4 + .binary 000000f5 + + .data + .data 4 + .binary 00000082 + + .data + .data 4 + .binary 00000073 + + .data + .data 4 + .binary 00000073 + + .data + .data 4 + .binary 0000050f + + .data + .data 4 + .binary 00000019 + + .data + .data 4 + .binary 00009c40 + + .data + .data 4 + .binary 00000019 + + .data + .data 4 + .binary 00000118 + + .data + .data 4 + .binary 00000398 + + .data + .data 4 + .binary 000000d2 + + .data + .data 4 + .binary 000000d7 + + .data + .data 4 + .binary 000000e1 + + .data + .data 4 + .binary 00000140 + + .data + .data 4 + .binary 000000f5 + + .data + .data 4 + .binary 00000104 + + .data + .data 4 + .binary 00000113 + + .data + .data 4 + .binary 00000195 + + .data + .data 4 + .binary 0000014f + + .data + .data 4 + .binary 0000015e + + .data + .data 4 + .binary 0000016d + + .data + .data 4 + .binary 0000019a + + .data + .data 4 + .binary 000001cc + + .data + .data 4 + .binary 000001c2 + + .data + .data 4 + .binary 000001d6 + + .data + .data 4 + .binary 000001f4 + + .data + .data 4 + .binary 0000076c + + .data + .data 4 + .binary 000002ad + + .data + .data 4 + .binary 00000230 + + .data + .data 4 + .binary 00000230 + + .data + .data 4 + .binary 0000023a + + .data + .data 4 + .binary 000002e4 + + .data + .data 4 + .binary 000001b8 + + .data + .data 4 + .binary 000001b8 + + .data + .data 4 + .binary 000002ee + + .data + .data 4 + .binary 000002d0 + + .data + .data 4 + .binary 0000a9ec + + .data + .data 4 + .binary 00000096 + + .data + .data 4 + .binary 00000028 + + .data + .data 4 + .binary 00009bdc + + .data + .data 4 + .binary 000002cb + + .data + .data 4 + .binary 000001b8 + + .data + .data 4 + .binary 00000578 + + .data + .data 4 + .binary 00000258 + + .data + .data 4 + .binary 0000006e + + .data + .data 4 + .binary 00000244 + + .data + .data 4 + .binary 0000026c + + .data + .data 4 + .binary 00000258 + + .data + .data 4 + .binary 00000280 + + .data + .data 4 + .binary 000001cc + + .data + .data 4 + .binary 0000d8cc + + .data + .data 4 + .binary 000001f4 + + .data + .data 4 + .binary 00000104 + + .data + .data 4 + .binary 000000f0 + + .data + .data 4 + .binary 000000f0 + + .data + .data 4 + .binary 0000076c + + .data + .data 4 + .binary 0000002d + + .data + .data 4 + .binary 00013880 + + .data + .data 4 + .binary 0000002d + + .data + .data 4 + .binary 0000022b + + .data + .data 4 + .binary 00000578 + + .data + .data 4 + .binary 000001c2 + + .data + .data 4 + .binary 000001cc + + .data + .data 4 + .binary 000001d6 + + .data + .data 4 + .binary 00000271 + + .data + .data 4 + .binary 000001f4 + + .data + .data 4 + .binary 00000208 + + .data + .data 4 + .binary 0000021c + + .data + .data 4 + .binary 000002ee + + .data + .data 4 + .binary 0000026c + + .data + .data 4 + .binary 00000280 + + .data + .data 4 + .binary 00000294 + + .data + .data 4 + .binary 000002d5 + + .data + .data 4 + .binary 00000546 + + .data + .data 4 + .binary 0000055f + + .data + .data 4 + .binary 00000578 + + .data + .data 4 + .binary 000005c3 + + .data + .data 4 + .binary 00001194 + + .data + .data 4 + .binary 000006d6 + + .data + .data 4 + .binary 00000640 + + .data + .data 4 + .binary 00000640 + + .data + .data 4 + .binary 00000659 + + .data + .data 4 + .binary 00000717 + + .data + .data 4 + .binary 000001f4 + + .data + .data 4 + .binary 000001f4 + + .data + .data 4 + .binary 00000785 + + .data + .data 4 + .binary 00000744 + + .data + .data 4 + .binary 00016f30 + + .data + .data 4 + .binary 0000012c + + .data + .data 4 + .binary 00000050 + + .data + .data 4 + .binary 0001368c + + .data + .data 4 + .binary 000006b8 + + .data + .data 4 + .binary 00000500 + + .data + .data 4 + .binary 00000dac + + .data + .data 4 + .binary 00000640 + + .data + .data 4 + .binary 00000127 + + .data + .data 4 + .binary 00000645 + + .data + .data 4 + .binary 000006ef + + .data + .data 4 + .binary 00000686 + + .data + .data 4 + .binary 00000686 + + .data + .data 4 + .binary 00000555 + + .data + .data 4 + .binary 0001cafc + + .data + .data 4 + .binary 000005aa + + .data + .data 4 + .binary 000003cf + + .data + .data 4 + .binary 00000384 + + .data + .data 4 + .binary 00000384 + + .data + .data 4 + .binary 00001130 + + .data + .data 4 + .binary 0000007d + + .data + .data 4 + .binary 0003d090 + + .data + .data 4 + .binary 00000064 + + .data + .data 4 + .binary 000005dc + + .data + .data 4 + .binary 00000d7a + + .data + .data 4 + .binary 0000054b + + .data + .data 4 + .binary 00000564 + + .data + .data 4 + .binary 0000053c + + .data + .data 4 + .binary 00000681 + + .data + .data 4 + .binary 000005c3 + + .data + .data 4 + .binary 000005eb + + .data + .data 4 + .binary 00000636 + + .data + .data 4 + .binary 00000753 + + .data + .data 4 + .binary 0000069f + + .data + .data 4 + .binary 000006bd + + .data + .data 4 + .binary 000006f4 + + .data 0 + .data 0 diff --git a/system/client-functions/PsoPeepsGCEXP_internal_10x_ep1.s b/system/client-functions/PsoPeepsGCEXP_internal_10x_ep1.s new file mode 100644 index 00000000..78a2f193 --- /dev/null +++ b/system/client-functions/PsoPeepsGCEXP_internal_10x_ep1.s @@ -0,0 +1,837 @@ +.meta key="PsoPeepsGCEXP_internal_10x_ep1" +.meta name="INTERNAL GC 10x EP1" +.meta description="Internal GC V3 EXP payload: INTERNAL GC 10x EP1. Server-dispatched; do not select manually." + +.versions 3OE2 + +entry_ptr: +reloc0: + .offsetof start + +start: + .include WriteCodeBlocks + + # PSO Peeps GC Plus USA / 3OE2 + # Source table: BattleParamEntry_on.dat + # Active online battle-param table loaded at 0x811AB7C0 + # EXP field offset within each 0x24-byte row is +0x1C + # Generated from clean BattleParamEntry_on.dat; multiplier=10x + + .data + .data 4 + .binary 0000000a + + .data + .data 4 + .binary 0000003c + + .data + .data 4 + .binary 00000032 + + .data + .data 4 + .binary 00000046 + + .data + .data 4 + .binary 00000064 + + .data + .data 4 + .binary 000005dc + + .data + .data 4 + .binary 000000fa + + .data + .data 4 + .binary 000000a0 + + .data + .data 4 + .binary 000000a0 + + .data + .data 4 + .binary 000000aa + + .data + .data 4 + .binary 00000122 + + .data + .data 4 + .binary 00000028 + + .data + .data 4 + .binary 00000028 + + .data + .data 4 + .binary 0000015e + + .data + .data 4 + .binary 0000015e + + .data + .data 4 + .binary 000022c4 + + .data + .data 4 + .binary 00000064 + + .data + .data 4 + .binary 00000064 + + .data + .data 4 + .binary 00000fa0 + + .data + .data 4 + .binary 00000118 + + .data + .data 4 + .binary 00000028 + + .data + .data 4 + .binary 000003e8 + + .data + .data 4 + .binary 00000096 + + .data + .data 4 + .binary 0000001e + + .data + .data 4 + .binary 000000b4 + + .data + .data 4 + .binary 000000dc + + .data + .data 4 + .binary 000000c8 + + .data + .data 4 + .binary 0000010e + + .data + .data 4 + .binary 0000003c + + .data + .data 4 + .binary 000030d4 + + .data + .data 4 + .binary 00000064 + + .data + .data 4 + .binary 0000003c + + .data + .data 4 + .binary 00000028 + + .data + .data 4 + .binary 00000028 + + .data + .data 4 + .binary 000005dc + + .data + .data 4 + .binary 00000032 + + .data + .data 4 + .binary 00007530 + + .data + .data 4 + .binary 00000032 + + .data + .data 4 + .binary 00000082 + + .data + .data 4 + .binary 000003e8 + + .data + .data 4 + .binary 00000032 + + .data + .data 4 + .binary 0000003c + + .data + .data 4 + .binary 00000046 + + .data + .data 4 + .binary 000000c8 + + .data + .data 4 + .binary 00000064 + + .data + .data 4 + .binary 00000078 + + .data + .data 4 + .binary 0000008c + + .data + .data 4 + .binary 0000012c + + .data + .data 4 + .binary 000000dc + + .data + .data 4 + .binary 000000f0 + + .data + .data 4 + .binary 00000104 + + .data + .data 4 + .binary 00000168 + + .data + .data 4 + .binary 000001ae + + .data + .data 4 + .binary 000001a4 + + .data + .data 4 + .binary 000001c2 + + .data + .data 4 + .binary 000001ea + + .data + .data 4 + .binary 00000a1e + + .data + .data 4 + .binary 000002bc + + .data + .data 4 + .binary 00000244 + + .data + .data 4 + .binary 00000244 + + .data + .data 4 + .binary 00000258 + + .data + .data 4 + .binary 0000030c + + .data + .data 4 + .binary 00000190 + + .data + .data 4 + .binary 00000190 + + .data + .data 4 + .binary 000003ca + + .data + .data 4 + .binary 00000348 + + .data + .data 4 + .binary 00007d00 + + .data + .data 4 + .binary 000000fa + + .data + .data 4 + .binary 00000028 + + .data + .data 4 + .binary 00005dc0 + + .data + .data 4 + .binary 000002ee + + .data + .data 4 + .binary 00000190 + + .data + .data 4 + .binary 00000730 + + .data + .data 4 + .binary 0000023a + + .data + .data 4 + .binary 0000006e + + .data + .data 4 + .binary 00000262 + + .data + .data 4 + .binary 0000029e + + .data + .data 4 + .binary 00000280 + + .data + .data 4 + .binary 00000302 + + .data + .data 4 + .binary 000001ae + + .data + .data 4 + .binary 00009470 + + .data + .data 4 + .binary 000001ea + + .data + .data 4 + .binary 00000104 + + .data + .data 4 + .binary 000000e6 + + .data + .data 4 + .binary 000000e6 + + .data + .data 4 + .binary 00000a1e + + .data + .data 4 + .binary 00000032 + + .data + .data 4 + .binary 00013880 + + .data + .data 4 + .binary 00000032 + + .data + .data 4 + .binary 00000230 + + .data + .data 4 + .binary 00000730 + + .data + .data 4 + .binary 000001a4 + + .data + .data 4 + .binary 000001ae + + .data + .data 4 + .binary 000001c2 + + .data + .data 4 + .binary 00000280 + + .data + .data 4 + .binary 000001ea + + .data + .data 4 + .binary 00000208 + + .data + .data 4 + .binary 00000226 + + .data + .data 4 + .binary 0000032a + + .data + .data 4 + .binary 0000029e + + .data + .data 4 + .binary 000002bc + + .data + .data 4 + .binary 000002da + + .data + .data 4 + .binary 00000334 + + .data + .data 4 + .binary 00000398 + + .data + .data 4 + .binary 00000384 + + .data + .data 4 + .binary 000003ac + + .data + .data 4 + .binary 000003e8 + + .data + .data 4 + .binary 00000ed8 + + .data + .data 4 + .binary 0000055a + + .data + .data 4 + .binary 00000460 + + .data + .data 4 + .binary 00000460 + + .data + .data 4 + .binary 00000474 + + .data + .data 4 + .binary 000005c8 + + .data + .data 4 + .binary 00000370 + + .data + .data 4 + .binary 00000370 + + .data + .data 4 + .binary 000005dc + + .data + .data 4 + .binary 000005a0 + + .data + .data 4 + .binary 000153d8 + + .data + .data 4 + .binary 0000012c + + .data + .data 4 + .binary 00000050 + + .data + .data 4 + .binary 000137b8 + + .data + .data 4 + .binary 00000596 + + .data + .data 4 + .binary 00000370 + + .data + .data 4 + .binary 00000af0 + + .data + .data 4 + .binary 000004b0 + + .data + .data 4 + .binary 000000dc + + .data + .data 4 + .binary 00000488 + + .data + .data 4 + .binary 000004d8 + + .data + .data 4 + .binary 000004b0 + + .data + .data 4 + .binary 00000500 + + .data + .data 4 + .binary 00000398 + + .data + .data 4 + .binary 0001b198 + + .data + .data 4 + .binary 000003e8 + + .data + .data 4 + .binary 00000208 + + .data + .data 4 + .binary 000001e0 + + .data + .data 4 + .binary 000001e0 + + .data + .data 4 + .binary 00000ed8 + + .data + .data 4 + .binary 0000005a + + .data + .data 4 + .binary 00027100 + + .data + .data 4 + .binary 0000005a + + .data + .data 4 + .binary 00000456 + + .data + .data 4 + .binary 00000af0 + + .data + .data 4 + .binary 00000384 + + .data + .data 4 + .binary 00000398 + + .data + .data 4 + .binary 000003ac + + .data + .data 4 + .binary 000004e2 + + .data + .data 4 + .binary 000003e8 + + .data + .data 4 + .binary 00000410 + + .data + .data 4 + .binary 00000438 + + .data + .data 4 + .binary 000005dc + + .data + .data 4 + .binary 000004d8 + + .data + .data 4 + .binary 00000500 + + .data + .data 4 + .binary 00000528 + + .data + .data 4 + .binary 000005aa + + .data + .data 4 + .binary 00000a8c + + .data + .data 4 + .binary 00000abe + + .data + .data 4 + .binary 00000af0 + + .data + .data 4 + .binary 00000b86 + + .data + .data 4 + .binary 00002328 + + .data + .data 4 + .binary 00000dac + + .data + .data 4 + .binary 00000c80 + + .data + .data 4 + .binary 00000c80 + + .data + .data 4 + .binary 00000cb2 + + .data + .data 4 + .binary 00000e2e + + .data + .data 4 + .binary 000003e8 + + .data + .data 4 + .binary 000003e8 + + .data + .data 4 + .binary 00000f0a + + .data + .data 4 + .binary 00000e88 + + .data + .data 4 + .binary 0002de60 + + .data + .data 4 + .binary 00000258 + + .data + .data 4 + .binary 000000a0 + + .data + .data 4 + .binary 00026d18 + + .data + .data 4 + .binary 00000d70 + + .data + .data 4 + .binary 00000a00 + + .data + .data 4 + .binary 00001b58 + + .data + .data 4 + .binary 00000c80 + + .data + .data 4 + .binary 0000024e + + .data + .data 4 + .binary 00000c8a + + .data + .data 4 + .binary 00000dde + + .data + .data 4 + .binary 00000d0c + + .data + .data 4 + .binary 00000d0c + + .data + .data 4 + .binary 00000aaa + + .data + .data 4 + .binary 000395f8 + + .data + .data 4 + .binary 00000b54 + + .data + .data 4 + .binary 0000079e + + .data + .data 4 + .binary 00000708 + + .data + .data 4 + .binary 00000708 + + .data + .data 4 + .binary 00002260 + + .data + .data 4 + .binary 000000fa + + .data + .data 4 + .binary 0007a120 + + .data + .data 4 + .binary 000000c8 + + .data + .data 4 + .binary 00000bb8 + + .data + .data 4 + .binary 00001af4 + + .data + .data 4 + .binary 00000a96 + + .data + .data 4 + .binary 00000ac8 + + .data + .data 4 + .binary 00000a78 + + .data + .data 4 + .binary 00000d02 + + .data + .data 4 + .binary 00000b86 + + .data + .data 4 + .binary 00000bd6 + + .data + .data 4 + .binary 00000c6c + + .data + .data 4 + .binary 00000ea6 + + .data + .data 4 + .binary 00000d3e + + .data + .data 4 + .binary 00000d7a + + .data + .data 4 + .binary 00000de8 + + .data 0 + .data 0 diff --git a/system/client-functions/PsoPeepsGCEXP_internal_10x_ep2.s b/system/client-functions/PsoPeepsGCEXP_internal_10x_ep2.s new file mode 100644 index 00000000..51043879 --- /dev/null +++ b/system/client-functions/PsoPeepsGCEXP_internal_10x_ep2.s @@ -0,0 +1,977 @@ +.meta key="PsoPeepsGCEXP_internal_10x_ep2" +.meta name="INTERNAL GC 10x EP2" +.meta description="Internal GC V3 EXP payload: INTERNAL GC 10x EP2. Server-dispatched; do not select manually." + +.versions 3OE2 + +entry_ptr: +reloc0: + .offsetof start + +start: + .include WriteCodeBlocks + + # PSO Peeps GC Plus USA / 3OE2 + # Source table: BattleParamEntry_lab_on.dat + # Active online battle-param table loaded at 0x811AB7C0 + # EXP field offset within each 0x24-byte row is +0x1C + # Generated from clean BattleParamEntry_lab_on.dat; multiplier=10x + + .data 0x811AB7DC + .data 4 + .binary 0000000a + + .data 0x811AB800 + .data 4 + .binary 0000003c + + .data 0x811AB824 + .data 4 + .binary 00000064 + + .data 0x811AB848 + .data 4 + .binary 00000078 + + .data 0x811AB86C + .data 4 + .binary 00000064 + + .data 0x811AB890 + .data 4 + .binary 000005dc + + .data 0x811AB8B4 + .data 4 + .binary 000000be + + .data 0x811AB8D8 + .data 4 + .binary 00000064 + + .data 0x811AB8FC + .data 4 + .binary 000000a0 + + .data 0x811AB920 + .data 4 + .binary 000000aa + + .data 0x811AB944 + .data 4 + .binary 000000aa + + .data 0x811AB968 + .data 4 + .binary 00000014 + + .data 0x811AB98C + .data 4 + .binary 00000014 + + .data 0x811AB9B0 + .data 4 + .binary 00000190 + + .data 0x811AB9D4 + .data 4 + .binary 00000096 + + .data 0x811AB9F8 + .data 4 + .binary 000012c0 + + .data 0x811ABA1C + .data 4 + .binary 00000064 + + .data 0x811ABA40 + .data 4 + .binary 0000001e + + .data 0x811ABA64 + .data 4 + .binary 0000251c + + .data 0x811ABA88 + .data 4 + .binary 000000d2 + + .data 0x811ABB3C + .data 4 + .binary 00000028 + + .data 0x811ABB60 + .data 4 + .binary 00000a00 + + .data 0x811ABB84 + .data 4 + .binary 000001fe + + .data 0x811ABBA8 + .data 4 + .binary 00000014 + + .data 0x811ABBCC + .data 4 + .binary 0000006e + + .data 0x811ABBF0 + .data 4 + .binary 000000be + + .data 0x811ABC14 + .data 4 + .binary 00003a98 + + .data 0x811ABCC8 + .data 4 + .binary 00000550 + + .data 0x811ABD10 + .data 4 + .binary 000001ea + + .data 0x811ABD34 + .data 4 + .binary 000001c2 + + .data 0x811ABE0C + .data 4 + .binary 000080e8 + + .data 0x811ABE9C + .data 4 + .binary 00000122 + + .data 0x811ABEC0 + .data 4 + .binary 0000001e + + .data 0x811ABEE4 + .data 4 + .binary 00000046 + + .data 0x811ABF08 + .data 4 + .binary 00000050 + + .data 0x811AC004 + .data 4 + .binary 000001d6 + + .data 0x811AC028 + .data 4 + .binary 00000078 + + .data 0x811AC04C + .data 4 + .binary 00000096 + + .data 0x811AC070 + .data 4 + .binary 00000208 + + .data 0x811AC0DC + .data 4 + .binary 0000012c + + .data 0x811AC100 + .data 4 + .binary 00000078 + + .data 0x811AC124 + .data 4 + .binary 00000014 + + .data 0x811AC148 + .data 4 + .binary 00000140 + + .data 0x811AC16C + .data 4 + .binary 00000190 + + .data 0x811AC190 + .data 4 + .binary 000001f4 + + .data 0x811AC1B4 + .data 4 + .binary 00000226 + + .data 0x811AC220 + .data 4 + .binary 00000064 + + .data 0x811AC244 + .data 4 + .binary 000003e8 + + .data 0x811AC268 + .data 4 + .binary 0000006e + + .data 0x811AC28C + .data 4 + .binary 00000082 + + .data 0x811AC2B0 + .data 4 + .binary 00000046 + + .data 0x811AC2D4 + .data 4 + .binary 00000078 + + .data 0x811AC2F8 + .data 4 + .binary 000000b4 + + .data 0x811AC31C + .data 4 + .binary 000000d2 + + .data 0x811AC340 + .data 4 + .binary 0000008c + + .data 0x811AC364 + .data 4 + .binary 00000096 + + .data 0x811AC388 + .data 4 + .binary 0000003c + + .data 0x811AC3AC + .data 4 + .binary 00000046 + + .data 0x811AC3D0 + .data 4 + .binary 00000050 + + .data 0x811AC55C + .data 4 + .binary 00000172 + + .data 0x811AC580 + .data 4 + .binary 000001c2 + + .data 0x811AC5A4 + .data 4 + .binary 00000208 + + .data 0x811AC5C8 + .data 4 + .binary 00000226 + + .data 0x811AC5EC + .data 4 + .binary 00000208 + + .data 0x811AC610 + .data 4 + .binary 00000b0e + + .data 0x811AC634 + .data 4 + .binary 00000294 + + .data 0x811AC658 + .data 4 + .binary 00000208 + + .data 0x811AC67C + .data 4 + .binary 00000244 + + .data 0x811AC6A0 + .data 4 + .binary 00000258 + + .data 0x811AC6C4 + .data 4 + .binary 00000276 + + .data 0x811AC6E8 + .data 4 + .binary 0000017c + + .data 0x811AC70C + .data 4 + .binary 0000017c + + .data 0x811AC730 + .data 4 + .binary 000003f2 + + .data 0x811AC754 + .data 4 + .binary 00000258 + + .data 0x811AC778 + .data 4 + .binary 00007d00 + + .data 0x811AC79C + .data 4 + .binary 000000fa + + .data 0x811AC7C0 + .data 4 + .binary 00000028 + + .data 0x811AC7E4 + .data 4 + .binary 00009858 + + .data 0x811AC808 + .data 4 + .binary 00000294 + + .data 0x811AC8BC + .data 4 + .binary 000001a4 + + .data 0x811AC8E0 + .data 4 + .binary 00001400 + + .data 0x811AC904 + .data 4 + .binary 000004a6 + + .data 0x811AC928 + .data 4 + .binary 00000064 + + .data 0x811AC94C + .data 4 + .binary 00000212 + + .data 0x811AC970 + .data 4 + .binary 00000294 + + .data 0x811AC994 + .data 4 + .binary 0000afc8 + + .data 0x811ACA48 + .data 4 + .binary 00000a1e + + .data 0x811ACA90 + .data 4 + .binary 00000488 + + .data 0x811ACAB4 + .data 4 + .binary 00000442 + + .data 0x811ACB8C + .data 4 + .binary 00012cc8 + + .data 0x811ACC1C + .data 4 + .binary 0000033e + + .data 0x811ACC40 + .data 4 + .binary 000001d6 + + .data 0x811ACC64 + .data 4 + .binary 000001d6 + + .data 0x811ACC88 + .data 4 + .binary 000001e0 + + .data 0x811ACD84 + .data 4 + .binary 0000046a + + .data 0x811ACDA8 + .data 4 + .binary 00000226 + + .data 0x811ACDCC + .data 4 + .binary 00000258 + + .data 0x811ACDF0 + .data 4 + .binary 000004ba + + .data 0x811ACE5C + .data 4 + .binary 00000352 + + .data 0x811ACE80 + .data 4 + .binary 00000226 + + .data 0x811ACEA4 + .data 4 + .binary 000001c2 + + .data 0x811ACEC8 + .data 4 + .binary 00000370 + + .data 0x811ACEEC + .data 4 + .binary 000003f2 + + .data 0x811ACF10 + .data 4 + .binary 0000049c + + .data 0x811ACF34 + .data 4 + .binary 000004ec + + .data 0x811ACF7C + .data 4 + .binary 00000032 + + .data 0x811ACFA0 + .data 4 + .binary 00000208 + + .data 0x811ACFC4 + .data 4 + .binary 000007d0 + + .data 0x811ACFE8 + .data 4 + .binary 00000212 + + .data 0x811AD00C + .data 4 + .binary 00000230 + + .data 0x811AD030 + .data 4 + .binary 000001c2 + + .data 0x811AD054 + .data 4 + .binary 00000226 + + .data 0x811AD078 + .data 4 + .binary 0000028a + + .data 0x811AD09C + .data 4 + .binary 000002bc + + .data 0x811AD0C0 + .data 4 + .binary 00000226 + + .data 0x811AD0E4 + .data 4 + .binary 00000258 + + .data 0x811AD108 + .data 4 + .binary 000001c2 + + .data 0x811AD12C + .data 4 + .binary 000001d6 + + .data 0x811AD150 + .data 4 + .binary 000001e0 + + .data 0x811AD2DC + .data 4 + .binary 00000366 + + .data 0x811AD300 + .data 4 + .binary 000003ca + + .data 0x811AD324 + .data 4 + .binary 0000041a + + .data 0x811AD348 + .data 4 + .binary 00000442 + + .data 0x811AD36C + .data 4 + .binary 0000041a + + .data 0x811AD390 + .data 4 + .binary 00000f0a + + .data 0x811AD3B4 + .data 4 + .binary 0000047e + + .data 0x811AD3D8 + .data 4 + .binary 0000041a + + .data 0x811AD3FC + .data 4 + .binary 00000460 + + .data 0x811AD420 + .data 4 + .binary 00000474 + + .data 0x811AD444 + .data 4 + .binary 000004a6 + + .data 0x811AD468 + .data 4 + .binary 0000037a + + .data 0x811AD48C + .data 4 + .binary 0000037a + + .data 0x811AD4B0 + .data 4 + .binary 00000672 + + .data 0x811AD4D4 + .data 4 + .binary 0000047e + + .data 0x811AD4F8 + .data 4 + .binary 000157c0 + + .data 0x811AD51C + .data 4 + .binary 00000258 + + .data 0x811AD540 + .data 4 + .binary 00000258 + + .data 0x811AD564 + .data 4 + .binary 000186a0 + + .data 0x811AD588 + .data 4 + .binary 000004ce + + .data 0x811AD63C + .data 4 + .binary 000003a2 + + .data 0x811AD660 + .data 4 + .binary 00001d88 + + .data 0x811AD684 + .data 4 + .binary 0000074e + + .data 0x811AD6A8 + .data 4 + .binary 0000012c + + .data 0x811AD6CC + .data 4 + .binary 0000042e + + .data 0x811AD6F0 + .data 4 + .binary 000004ce + + .data 0x811AD714 + .data 4 + .binary 0001e848 + + .data 0x811AD7C8 + .data 4 + .binary 00000df2 + + .data 0x811AD810 + .data 4 + .binary 00000726 + + .data 0x811AD834 + .data 4 + .binary 000006d6 + + .data 0x811AD90C + .data 4 + .binary 000249f0 + + .data 0x811AD99C + .data 4 + .binary 00000596 + + .data 0x811AD9C0 + .data 4 + .binary 0000038e + + .data 0x811AD9E4 + .data 4 + .binary 000003de + + .data 0x811ADA08 + .data 4 + .binary 000003f2 + + .data 0x811ADB04 + .data 4 + .binary 000006fe + + .data 0x811ADB28 + .data 4 + .binary 00000442 + + .data 0x811ADB4C + .data 4 + .binary 0000047e + + .data 0x811ADB70 + .data 4 + .binary 00000762 + + .data 0x811ADBDC + .data 4 + .binary 000005aa + + .data 0x811ADC00 + .data 4 + .binary 00000442 + + .data 0x811ADC24 + .data 4 + .binary 000003b6 + + .data 0x811ADC48 + .data 4 + .binary 000005d2 + + .data 0x811ADC6C + .data 4 + .binary 00000672 + + .data 0x811ADC90 + .data 4 + .binary 0000073a + + .data 0x811ADCB4 + .data 4 + .binary 0000079e + + .data 0x811ADCFC + .data 4 + .binary 00000032 + + .data 0x811ADD20 + .data 4 + .binary 0000041a + + .data 0x811ADD44 + .data 4 + .binary 00000b22 + + .data 0x811ADD68 + .data 4 + .binary 0000042e + + .data 0x811ADD8C + .data 4 + .binary 00000456 + + .data 0x811ADDB0 + .data 4 + .binary 000003ac + + .data 0x811ADDD4 + .data 4 + .binary 00000442 + + .data 0x811ADDF8 + .data 4 + .binary 000004ba + + .data 0x811ADE1C + .data 4 + .binary 000004f6 + + .data 0x811ADE40 + .data 4 + .binary 00000438 + + .data 0x811ADE64 + .data 4 + .binary 0000047e + + .data 0x811ADE88 + .data 4 + .binary 000003ca + + .data 0x811ADEAC + .data 4 + .binary 000003de + + .data 0x811ADED0 + .data 4 + .binary 000003f2 + + .data 0x811AE05C + .data 4 + .binary 000005dc + + .data 0x811AE080 + .data 4 + .binary 00000bf4 + + .data 0x811AE0A4 + .data 4 + .binary 00000ce4 + + .data 0x811AE0C8 + .data 4 + .binary 00000d5c + + .data 0x811AE0EC + .data 4 + .binary 00000ce4 + + .data 0x811AE110 + .data 4 + .binary 00002db4 + + .data 0x811AE134 + .data 4 + .binary 00000e10 + + .data 0x811AE158 + .data 4 + .binary 00000ce4 + + .data 0x811AE17C + .data 4 + .binary 00000be0 + + .data 0x811AE1A0 + .data 4 + .binary 00000c08 + + .data 0x811AE1C4 + .data 4 + .binary 00000e88 + + .data 0x811AE1E8 + .data 4 + .binary 000003e8 + + .data 0x811AE20C + .data 4 + .binary 000003e8 + + .data 0x811AE230 + .data 4 + .binary 000013ec + + .data 0x811AE254 + .data 4 + .binary 00000e10 + + .data 0x811AE278 + .data 4 + .binary 0002bf20 + + .data 0x811AE29C + .data 4 + .binary 00000258 + + .data 0x811AE2C0 + .data 4 + .binary 000000a0 + + .data 0x811AE2E4 + .data 4 + .binary 00033450 + + .data 0x811AE308 + .data 4 + .binary 00000f00 + + .data 0x811AE3BC + .data 4 + .binary 00000b7c + + .data 0x811AE3E0 + .data 4 + .binary 00002800 + + .data 0x811AE404 + .data 4 + .binary 00001680 + + .data 0x811AE428 + .data 4 + .binary 000001f4 + + .data 0x811AE44C + .data 4 + .binary 00000d20 + + .data 0x811AE470 + .data 4 + .binary 00000f00 + + .data 0x811AE494 + .data 4 + .binary 0003c4d8 + + .data 0x811AE548 + .data 4 + .binary 00002a6c + + .data 0x811AE590 + .data 4 + .binary 00001608 + + .data 0x811AE5B4 + .data 4 + .binary 00001518 + + .data 0x811AE68C + .data 4 + .binary 00073f78 + + .data 0x811AE71C + .data 4 + .binary 00001158 + + .data 0x811AE740 + .data 4 + .binary 00000c30 + + .data 0x811AE764 + .data 4 + .binary 00000c30 + + .data 0x811AE788 + .data 4 + .binary 00000c6c + + .data 0x811AE884 + .data 4 + .binary 00000d98 + + .data 0x811AE8A8 + .data 4 + .binary 00000d5c + + .data 0x811AE8CC + .data 4 + .binary 00000e10 + + .data 0x811AE8F0 + .data 4 + .binary 000016bc + + .data 0x811AE95C + .data 4 + .binary 00001194 + + .data 0x811AE980 + .data 4 + .binary 00000d5c + + .data 0x811AE9A4 + .data 4 + .binary 000007d0 + + .data 0x811AE9C8 + .data 4 + .binary 0000120c + + .data 0x811AE9EC + .data 4 + .binary 000013ec + + .data 0x811AEA10 + .data 4 + .binary 00001644 + + .data 0x811AEA34 + .data 4 + .binary 00001770 + + .data 0x811AEA7C + .data 4 + .binary 00000032 + + .data 0x811AEAA0 + .data 4 + .binary 00000ce4 + + .data 0x811AEAC4 + .data 4 + .binary 000021fc + + .data 0x811AEAE8 + .data 4 + .binary 00000d20 + + .data 0x811AEB0C + .data 4 + .binary 00000d98 + + .data 0x811AEB30 + .data 4 + .binary 00000a78 + + .data 0x811AEB54 + .data 4 + .binary 00000d5c + + .data 0x811AEB78 + .data 4 + .binary 00000ec4 + + .data 0x811AEB9C + .data 4 + .binary 00000f78 + + .data 0x811AEBC0 + .data 4 + .binary 00000b90 + + .data 0x811AEBE4 + .data 4 + .binary 00000e10 + + .data 0x811AEC08 + .data 4 + .binary 00000bf4 + + .data 0x811AEC2C + .data 4 + .binary 00000c30 + + .data 0x811AEC50 + .data 4 + .binary 00000c6c + + .data 0 + .data 0 diff --git a/system/client-functions/PsoPeepsGCEXP_internal_5x_ep1.s b/system/client-functions/PsoPeepsGCEXP_internal_5x_ep1.s new file mode 100644 index 00000000..9b69fd90 --- /dev/null +++ b/system/client-functions/PsoPeepsGCEXP_internal_5x_ep1.s @@ -0,0 +1,837 @@ +.meta key="PsoPeepsGCEXP_internal_5x_ep1" +.meta name="INTERNAL GC 5x EP1" +.meta description="Internal GC V3 EXP payload: INTERNAL GC 5x EP1. Server-dispatched; do not select manually." + +.versions 3OE2 + +entry_ptr: +reloc0: + .offsetof start + +start: + .include WriteCodeBlocks + + # PSO Peeps GC Plus USA / 3OE2 + # Source table: BattleParamEntry_on.dat + # Active online battle-param table loaded at 0x811AB7C0 + # EXP field offset within each 0x24-byte row is +0x1C + # Generated from clean BattleParamEntry_on.dat; multiplier=5x + + .data + .data 4 + .binary 00000005 + + .data + .data 4 + .binary 0000001e + + .data + .data 4 + .binary 00000019 + + .data + .data 4 + .binary 00000023 + + .data + .data 4 + .binary 00000032 + + .data + .data 4 + .binary 000002ee + + .data + .data 4 + .binary 0000007d + + .data + .data 4 + .binary 00000050 + + .data + .data 4 + .binary 00000050 + + .data + .data 4 + .binary 00000055 + + .data + .data 4 + .binary 00000091 + + .data + .data 4 + .binary 00000014 + + .data + .data 4 + .binary 00000014 + + .data + .data 4 + .binary 000000af + + .data + .data 4 + .binary 000000af + + .data + .data 4 + .binary 00001162 + + .data + .data 4 + .binary 00000032 + + .data + .data 4 + .binary 00000032 + + .data + .data 4 + .binary 000007d0 + + .data + .data 4 + .binary 0000008c + + .data + .data 4 + .binary 00000014 + + .data + .data 4 + .binary 000001f4 + + .data + .data 4 + .binary 0000004b + + .data + .data 4 + .binary 0000000f + + .data + .data 4 + .binary 0000005a + + .data + .data 4 + .binary 0000006e + + .data + .data 4 + .binary 00000064 + + .data + .data 4 + .binary 00000087 + + .data + .data 4 + .binary 0000001e + + .data + .data 4 + .binary 0000186a + + .data + .data 4 + .binary 00000032 + + .data + .data 4 + .binary 0000001e + + .data + .data 4 + .binary 00000014 + + .data + .data 4 + .binary 00000014 + + .data + .data 4 + .binary 000002ee + + .data + .data 4 + .binary 00000019 + + .data + .data 4 + .binary 00003a98 + + .data + .data 4 + .binary 00000019 + + .data + .data 4 + .binary 00000041 + + .data + .data 4 + .binary 000001f4 + + .data + .data 4 + .binary 00000019 + + .data + .data 4 + .binary 0000001e + + .data + .data 4 + .binary 00000023 + + .data + .data 4 + .binary 00000064 + + .data + .data 4 + .binary 00000032 + + .data + .data 4 + .binary 0000003c + + .data + .data 4 + .binary 00000046 + + .data + .data 4 + .binary 00000096 + + .data + .data 4 + .binary 0000006e + + .data + .data 4 + .binary 00000078 + + .data + .data 4 + .binary 00000082 + + .data + .data 4 + .binary 000000b4 + + .data + .data 4 + .binary 000000d7 + + .data + .data 4 + .binary 000000d2 + + .data + .data 4 + .binary 000000e1 + + .data + .data 4 + .binary 000000f5 + + .data + .data 4 + .binary 0000050f + + .data + .data 4 + .binary 0000015e + + .data + .data 4 + .binary 00000122 + + .data + .data 4 + .binary 00000122 + + .data + .data 4 + .binary 0000012c + + .data + .data 4 + .binary 00000186 + + .data + .data 4 + .binary 000000c8 + + .data + .data 4 + .binary 000000c8 + + .data + .data 4 + .binary 000001e5 + + .data + .data 4 + .binary 000001a4 + + .data + .data 4 + .binary 00003e80 + + .data + .data 4 + .binary 0000007d + + .data + .data 4 + .binary 00000014 + + .data + .data 4 + .binary 00002ee0 + + .data + .data 4 + .binary 00000177 + + .data + .data 4 + .binary 000000c8 + + .data + .data 4 + .binary 00000398 + + .data + .data 4 + .binary 0000011d + + .data + .data 4 + .binary 00000037 + + .data + .data 4 + .binary 00000131 + + .data + .data 4 + .binary 0000014f + + .data + .data 4 + .binary 00000140 + + .data + .data 4 + .binary 00000181 + + .data + .data 4 + .binary 000000d7 + + .data + .data 4 + .binary 00004a38 + + .data + .data 4 + .binary 000000f5 + + .data + .data 4 + .binary 00000082 + + .data + .data 4 + .binary 00000073 + + .data + .data 4 + .binary 00000073 + + .data + .data 4 + .binary 0000050f + + .data + .data 4 + .binary 00000019 + + .data + .data 4 + .binary 00009c40 + + .data + .data 4 + .binary 00000019 + + .data + .data 4 + .binary 00000118 + + .data + .data 4 + .binary 00000398 + + .data + .data 4 + .binary 000000d2 + + .data + .data 4 + .binary 000000d7 + + .data + .data 4 + .binary 000000e1 + + .data + .data 4 + .binary 00000140 + + .data + .data 4 + .binary 000000f5 + + .data + .data 4 + .binary 00000104 + + .data + .data 4 + .binary 00000113 + + .data + .data 4 + .binary 00000195 + + .data + .data 4 + .binary 0000014f + + .data + .data 4 + .binary 0000015e + + .data + .data 4 + .binary 0000016d + + .data + .data 4 + .binary 0000019a + + .data + .data 4 + .binary 000001cc + + .data + .data 4 + .binary 000001c2 + + .data + .data 4 + .binary 000001d6 + + .data + .data 4 + .binary 000001f4 + + .data + .data 4 + .binary 0000076c + + .data + .data 4 + .binary 000002ad + + .data + .data 4 + .binary 00000230 + + .data + .data 4 + .binary 00000230 + + .data + .data 4 + .binary 0000023a + + .data + .data 4 + .binary 000002e4 + + .data + .data 4 + .binary 000001b8 + + .data + .data 4 + .binary 000001b8 + + .data + .data 4 + .binary 000002ee + + .data + .data 4 + .binary 000002d0 + + .data + .data 4 + .binary 0000a9ec + + .data + .data 4 + .binary 00000096 + + .data + .data 4 + .binary 00000028 + + .data + .data 4 + .binary 00009bdc + + .data + .data 4 + .binary 000002cb + + .data + .data 4 + .binary 000001b8 + + .data + .data 4 + .binary 00000578 + + .data + .data 4 + .binary 00000258 + + .data + .data 4 + .binary 0000006e + + .data + .data 4 + .binary 00000244 + + .data + .data 4 + .binary 0000026c + + .data + .data 4 + .binary 00000258 + + .data + .data 4 + .binary 00000280 + + .data + .data 4 + .binary 000001cc + + .data + .data 4 + .binary 0000d8cc + + .data + .data 4 + .binary 000001f4 + + .data + .data 4 + .binary 00000104 + + .data + .data 4 + .binary 000000f0 + + .data + .data 4 + .binary 000000f0 + + .data + .data 4 + .binary 0000076c + + .data + .data 4 + .binary 0000002d + + .data + .data 4 + .binary 00013880 + + .data + .data 4 + .binary 0000002d + + .data + .data 4 + .binary 0000022b + + .data + .data 4 + .binary 00000578 + + .data + .data 4 + .binary 000001c2 + + .data + .data 4 + .binary 000001cc + + .data + .data 4 + .binary 000001d6 + + .data + .data 4 + .binary 00000271 + + .data + .data 4 + .binary 000001f4 + + .data + .data 4 + .binary 00000208 + + .data + .data 4 + .binary 0000021c + + .data + .data 4 + .binary 000002ee + + .data + .data 4 + .binary 0000026c + + .data + .data 4 + .binary 00000280 + + .data + .data 4 + .binary 00000294 + + .data + .data 4 + .binary 000002d5 + + .data + .data 4 + .binary 00000546 + + .data + .data 4 + .binary 0000055f + + .data + .data 4 + .binary 00000578 + + .data + .data 4 + .binary 000005c3 + + .data + .data 4 + .binary 00001194 + + .data + .data 4 + .binary 000006d6 + + .data + .data 4 + .binary 00000640 + + .data + .data 4 + .binary 00000640 + + .data + .data 4 + .binary 00000659 + + .data + .data 4 + .binary 00000717 + + .data + .data 4 + .binary 000001f4 + + .data + .data 4 + .binary 000001f4 + + .data + .data 4 + .binary 00000785 + + .data + .data 4 + .binary 00000744 + + .data + .data 4 + .binary 00016f30 + + .data + .data 4 + .binary 0000012c + + .data + .data 4 + .binary 00000050 + + .data + .data 4 + .binary 0001368c + + .data + .data 4 + .binary 000006b8 + + .data + .data 4 + .binary 00000500 + + .data + .data 4 + .binary 00000dac + + .data + .data 4 + .binary 00000640 + + .data + .data 4 + .binary 00000127 + + .data + .data 4 + .binary 00000645 + + .data + .data 4 + .binary 000006ef + + .data + .data 4 + .binary 00000686 + + .data + .data 4 + .binary 00000686 + + .data + .data 4 + .binary 00000555 + + .data + .data 4 + .binary 0001cafc + + .data + .data 4 + .binary 000005aa + + .data + .data 4 + .binary 000003cf + + .data + .data 4 + .binary 00000384 + + .data + .data 4 + .binary 00000384 + + .data + .data 4 + .binary 00001130 + + .data + .data 4 + .binary 0000007d + + .data + .data 4 + .binary 0003d090 + + .data + .data 4 + .binary 00000064 + + .data + .data 4 + .binary 000005dc + + .data + .data 4 + .binary 00000d7a + + .data + .data 4 + .binary 0000054b + + .data + .data 4 + .binary 00000564 + + .data + .data 4 + .binary 0000053c + + .data + .data 4 + .binary 00000681 + + .data + .data 4 + .binary 000005c3 + + .data + .data 4 + .binary 000005eb + + .data + .data 4 + .binary 00000636 + + .data + .data 4 + .binary 00000753 + + .data + .data 4 + .binary 0000069f + + .data + .data 4 + .binary 000006bd + + .data + .data 4 + .binary 000006f4 + + .data 0 + .data 0 diff --git a/system/client-functions/PsoPeepsGCEXP_internal_5x_ep2.s b/system/client-functions/PsoPeepsGCEXP_internal_5x_ep2.s new file mode 100644 index 00000000..917f6495 --- /dev/null +++ b/system/client-functions/PsoPeepsGCEXP_internal_5x_ep2.s @@ -0,0 +1,977 @@ +.meta key="PsoPeepsGCEXP_internal_5x_ep2" +.meta name="INTERNAL GC 5x EP2" +.meta description="Internal GC V3 EXP payload: INTERNAL GC 5x EP2. Server-dispatched; do not select manually." + +.versions 3OE2 + +entry_ptr: +reloc0: + .offsetof start + +start: + .include WriteCodeBlocks + + # PSO Peeps GC Plus USA / 3OE2 + # Source table: BattleParamEntry_lab_on.dat + # Active online battle-param table loaded at 0x811AB7C0 + # EXP field offset within each 0x24-byte row is +0x1C + # Generated from clean BattleParamEntry_lab_on.dat; multiplier=5x + + .data 0x811AB7DC + .data 4 + .binary 00000005 + + .data 0x811AB800 + .data 4 + .binary 0000001e + + .data 0x811AB824 + .data 4 + .binary 00000032 + + .data 0x811AB848 + .data 4 + .binary 0000003c + + .data 0x811AB86C + .data 4 + .binary 00000032 + + .data 0x811AB890 + .data 4 + .binary 000002ee + + .data 0x811AB8B4 + .data 4 + .binary 0000005f + + .data 0x811AB8D8 + .data 4 + .binary 00000032 + + .data 0x811AB8FC + .data 4 + .binary 00000050 + + .data 0x811AB920 + .data 4 + .binary 00000055 + + .data 0x811AB944 + .data 4 + .binary 00000055 + + .data 0x811AB968 + .data 4 + .binary 0000000a + + .data 0x811AB98C + .data 4 + .binary 0000000a + + .data 0x811AB9B0 + .data 4 + .binary 000000c8 + + .data 0x811AB9D4 + .data 4 + .binary 0000004b + + .data 0x811AB9F8 + .data 4 + .binary 00000960 + + .data 0x811ABA1C + .data 4 + .binary 00000032 + + .data 0x811ABA40 + .data 4 + .binary 0000000f + + .data 0x811ABA64 + .data 4 + .binary 0000128e + + .data 0x811ABA88 + .data 4 + .binary 00000069 + + .data 0x811ABB3C + .data 4 + .binary 00000014 + + .data 0x811ABB60 + .data 4 + .binary 00000500 + + .data 0x811ABB84 + .data 4 + .binary 000000ff + + .data 0x811ABBA8 + .data 4 + .binary 0000000a + + .data 0x811ABBCC + .data 4 + .binary 00000037 + + .data 0x811ABBF0 + .data 4 + .binary 0000005f + + .data 0x811ABC14 + .data 4 + .binary 00001d4c + + .data 0x811ABCC8 + .data 4 + .binary 000002a8 + + .data 0x811ABD10 + .data 4 + .binary 000000f5 + + .data 0x811ABD34 + .data 4 + .binary 000000e1 + + .data 0x811ABE0C + .data 4 + .binary 00004074 + + .data 0x811ABE9C + .data 4 + .binary 00000091 + + .data 0x811ABEC0 + .data 4 + .binary 0000000f + + .data 0x811ABEE4 + .data 4 + .binary 00000023 + + .data 0x811ABF08 + .data 4 + .binary 00000028 + + .data 0x811AC004 + .data 4 + .binary 000000eb + + .data 0x811AC028 + .data 4 + .binary 0000003c + + .data 0x811AC04C + .data 4 + .binary 0000004b + + .data 0x811AC070 + .data 4 + .binary 00000104 + + .data 0x811AC0DC + .data 4 + .binary 00000096 + + .data 0x811AC100 + .data 4 + .binary 0000003c + + .data 0x811AC124 + .data 4 + .binary 0000000a + + .data 0x811AC148 + .data 4 + .binary 000000a0 + + .data 0x811AC16C + .data 4 + .binary 000000c8 + + .data 0x811AC190 + .data 4 + .binary 000000fa + + .data 0x811AC1B4 + .data 4 + .binary 00000113 + + .data 0x811AC220 + .data 4 + .binary 00000032 + + .data 0x811AC244 + .data 4 + .binary 000001f4 + + .data 0x811AC268 + .data 4 + .binary 00000037 + + .data 0x811AC28C + .data 4 + .binary 00000041 + + .data 0x811AC2B0 + .data 4 + .binary 00000023 + + .data 0x811AC2D4 + .data 4 + .binary 0000003c + + .data 0x811AC2F8 + .data 4 + .binary 0000005a + + .data 0x811AC31C + .data 4 + .binary 00000069 + + .data 0x811AC340 + .data 4 + .binary 00000046 + + .data 0x811AC364 + .data 4 + .binary 0000004b + + .data 0x811AC388 + .data 4 + .binary 0000001e + + .data 0x811AC3AC + .data 4 + .binary 00000023 + + .data 0x811AC3D0 + .data 4 + .binary 00000028 + + .data 0x811AC55C + .data 4 + .binary 000000b9 + + .data 0x811AC580 + .data 4 + .binary 000000e1 + + .data 0x811AC5A4 + .data 4 + .binary 00000104 + + .data 0x811AC5C8 + .data 4 + .binary 00000113 + + .data 0x811AC5EC + .data 4 + .binary 00000104 + + .data 0x811AC610 + .data 4 + .binary 00000587 + + .data 0x811AC634 + .data 4 + .binary 0000014a + + .data 0x811AC658 + .data 4 + .binary 00000104 + + .data 0x811AC67C + .data 4 + .binary 00000122 + + .data 0x811AC6A0 + .data 4 + .binary 0000012c + + .data 0x811AC6C4 + .data 4 + .binary 0000013b + + .data 0x811AC6E8 + .data 4 + .binary 000000be + + .data 0x811AC70C + .data 4 + .binary 000000be + + .data 0x811AC730 + .data 4 + .binary 000001f9 + + .data 0x811AC754 + .data 4 + .binary 0000012c + + .data 0x811AC778 + .data 4 + .binary 00003e80 + + .data 0x811AC79C + .data 4 + .binary 0000007d + + .data 0x811AC7C0 + .data 4 + .binary 00000014 + + .data 0x811AC7E4 + .data 4 + .binary 00004c2c + + .data 0x811AC808 + .data 4 + .binary 0000014a + + .data 0x811AC8BC + .data 4 + .binary 000000d2 + + .data 0x811AC8E0 + .data 4 + .binary 00000a00 + + .data 0x811AC904 + .data 4 + .binary 00000253 + + .data 0x811AC928 + .data 4 + .binary 00000032 + + .data 0x811AC94C + .data 4 + .binary 00000109 + + .data 0x811AC970 + .data 4 + .binary 0000014a + + .data 0x811AC994 + .data 4 + .binary 000057e4 + + .data 0x811ACA48 + .data 4 + .binary 0000050f + + .data 0x811ACA90 + .data 4 + .binary 00000244 + + .data 0x811ACAB4 + .data 4 + .binary 00000221 + + .data 0x811ACB8C + .data 4 + .binary 00009664 + + .data 0x811ACC1C + .data 4 + .binary 0000019f + + .data 0x811ACC40 + .data 4 + .binary 000000eb + + .data 0x811ACC64 + .data 4 + .binary 000000eb + + .data 0x811ACC88 + .data 4 + .binary 000000f0 + + .data 0x811ACD84 + .data 4 + .binary 00000235 + + .data 0x811ACDA8 + .data 4 + .binary 00000113 + + .data 0x811ACDCC + .data 4 + .binary 0000012c + + .data 0x811ACDF0 + .data 4 + .binary 0000025d + + .data 0x811ACE5C + .data 4 + .binary 000001a9 + + .data 0x811ACE80 + .data 4 + .binary 00000113 + + .data 0x811ACEA4 + .data 4 + .binary 000000e1 + + .data 0x811ACEC8 + .data 4 + .binary 000001b8 + + .data 0x811ACEEC + .data 4 + .binary 000001f9 + + .data 0x811ACF10 + .data 4 + .binary 0000024e + + .data 0x811ACF34 + .data 4 + .binary 00000276 + + .data 0x811ACF7C + .data 4 + .binary 00000019 + + .data 0x811ACFA0 + .data 4 + .binary 00000104 + + .data 0x811ACFC4 + .data 4 + .binary 000003e8 + + .data 0x811ACFE8 + .data 4 + .binary 00000109 + + .data 0x811AD00C + .data 4 + .binary 00000118 + + .data 0x811AD030 + .data 4 + .binary 000000e1 + + .data 0x811AD054 + .data 4 + .binary 00000113 + + .data 0x811AD078 + .data 4 + .binary 00000145 + + .data 0x811AD09C + .data 4 + .binary 0000015e + + .data 0x811AD0C0 + .data 4 + .binary 00000113 + + .data 0x811AD0E4 + .data 4 + .binary 0000012c + + .data 0x811AD108 + .data 4 + .binary 000000e1 + + .data 0x811AD12C + .data 4 + .binary 000000eb + + .data 0x811AD150 + .data 4 + .binary 000000f0 + + .data 0x811AD2DC + .data 4 + .binary 000001b3 + + .data 0x811AD300 + .data 4 + .binary 000001e5 + + .data 0x811AD324 + .data 4 + .binary 0000020d + + .data 0x811AD348 + .data 4 + .binary 00000221 + + .data 0x811AD36C + .data 4 + .binary 0000020d + + .data 0x811AD390 + .data 4 + .binary 00000785 + + .data 0x811AD3B4 + .data 4 + .binary 0000023f + + .data 0x811AD3D8 + .data 4 + .binary 0000020d + + .data 0x811AD3FC + .data 4 + .binary 00000230 + + .data 0x811AD420 + .data 4 + .binary 0000023a + + .data 0x811AD444 + .data 4 + .binary 00000253 + + .data 0x811AD468 + .data 4 + .binary 000001bd + + .data 0x811AD48C + .data 4 + .binary 000001bd + + .data 0x811AD4B0 + .data 4 + .binary 00000339 + + .data 0x811AD4D4 + .data 4 + .binary 0000023f + + .data 0x811AD4F8 + .data 4 + .binary 0000abe0 + + .data 0x811AD51C + .data 4 + .binary 0000012c + + .data 0x811AD540 + .data 4 + .binary 0000012c + + .data 0x811AD564 + .data 4 + .binary 0000c350 + + .data 0x811AD588 + .data 4 + .binary 00000267 + + .data 0x811AD63C + .data 4 + .binary 000001d1 + + .data 0x811AD660 + .data 4 + .binary 00000ec4 + + .data 0x811AD684 + .data 4 + .binary 000003a7 + + .data 0x811AD6A8 + .data 4 + .binary 00000096 + + .data 0x811AD6CC + .data 4 + .binary 00000217 + + .data 0x811AD6F0 + .data 4 + .binary 00000267 + + .data 0x811AD714 + .data 4 + .binary 0000f424 + + .data 0x811AD7C8 + .data 4 + .binary 000006f9 + + .data 0x811AD810 + .data 4 + .binary 00000393 + + .data 0x811AD834 + .data 4 + .binary 0000036b + + .data 0x811AD90C + .data 4 + .binary 000124f8 + + .data 0x811AD99C + .data 4 + .binary 000002cb + + .data 0x811AD9C0 + .data 4 + .binary 000001c7 + + .data 0x811AD9E4 + .data 4 + .binary 000001ef + + .data 0x811ADA08 + .data 4 + .binary 000001f9 + + .data 0x811ADB04 + .data 4 + .binary 0000037f + + .data 0x811ADB28 + .data 4 + .binary 00000221 + + .data 0x811ADB4C + .data 4 + .binary 0000023f + + .data 0x811ADB70 + .data 4 + .binary 000003b1 + + .data 0x811ADBDC + .data 4 + .binary 000002d5 + + .data 0x811ADC00 + .data 4 + .binary 00000221 + + .data 0x811ADC24 + .data 4 + .binary 000001db + + .data 0x811ADC48 + .data 4 + .binary 000002e9 + + .data 0x811ADC6C + .data 4 + .binary 00000339 + + .data 0x811ADC90 + .data 4 + .binary 0000039d + + .data 0x811ADCB4 + .data 4 + .binary 000003cf + + .data 0x811ADCFC + .data 4 + .binary 00000019 + + .data 0x811ADD20 + .data 4 + .binary 0000020d + + .data 0x811ADD44 + .data 4 + .binary 00000591 + + .data 0x811ADD68 + .data 4 + .binary 00000217 + + .data 0x811ADD8C + .data 4 + .binary 0000022b + + .data 0x811ADDB0 + .data 4 + .binary 000001d6 + + .data 0x811ADDD4 + .data 4 + .binary 00000221 + + .data 0x811ADDF8 + .data 4 + .binary 0000025d + + .data 0x811ADE1C + .data 4 + .binary 0000027b + + .data 0x811ADE40 + .data 4 + .binary 0000021c + + .data 0x811ADE64 + .data 4 + .binary 0000023f + + .data 0x811ADE88 + .data 4 + .binary 000001e5 + + .data 0x811ADEAC + .data 4 + .binary 000001ef + + .data 0x811ADED0 + .data 4 + .binary 000001f9 + + .data 0x811AE05C + .data 4 + .binary 000002ee + + .data 0x811AE080 + .data 4 + .binary 000005fa + + .data 0x811AE0A4 + .data 4 + .binary 00000672 + + .data 0x811AE0C8 + .data 4 + .binary 000006ae + + .data 0x811AE0EC + .data 4 + .binary 00000672 + + .data 0x811AE110 + .data 4 + .binary 000016da + + .data 0x811AE134 + .data 4 + .binary 00000708 + + .data 0x811AE158 + .data 4 + .binary 00000672 + + .data 0x811AE17C + .data 4 + .binary 000005f0 + + .data 0x811AE1A0 + .data 4 + .binary 00000604 + + .data 0x811AE1C4 + .data 4 + .binary 00000744 + + .data 0x811AE1E8 + .data 4 + .binary 000001f4 + + .data 0x811AE20C + .data 4 + .binary 000001f4 + + .data 0x811AE230 + .data 4 + .binary 000009f6 + + .data 0x811AE254 + .data 4 + .binary 00000708 + + .data 0x811AE278 + .data 4 + .binary 00015f90 + + .data 0x811AE29C + .data 4 + .binary 0000012c + + .data 0x811AE2C0 + .data 4 + .binary 00000050 + + .data 0x811AE2E4 + .data 4 + .binary 00019a28 + + .data 0x811AE308 + .data 4 + .binary 00000780 + + .data 0x811AE3BC + .data 4 + .binary 000005be + + .data 0x811AE3E0 + .data 4 + .binary 00001400 + + .data 0x811AE404 + .data 4 + .binary 00000b40 + + .data 0x811AE428 + .data 4 + .binary 000000fa + + .data 0x811AE44C + .data 4 + .binary 00000690 + + .data 0x811AE470 + .data 4 + .binary 00000780 + + .data 0x811AE494 + .data 4 + .binary 0001e26c + + .data 0x811AE548 + .data 4 + .binary 00001536 + + .data 0x811AE590 + .data 4 + .binary 00000b04 + + .data 0x811AE5B4 + .data 4 + .binary 00000a8c + + .data 0x811AE68C + .data 4 + .binary 00039fbc + + .data 0x811AE71C + .data 4 + .binary 000008ac + + .data 0x811AE740 + .data 4 + .binary 00000618 + + .data 0x811AE764 + .data 4 + .binary 00000618 + + .data 0x811AE788 + .data 4 + .binary 00000636 + + .data 0x811AE884 + .data 4 + .binary 000006cc + + .data 0x811AE8A8 + .data 4 + .binary 000006ae + + .data 0x811AE8CC + .data 4 + .binary 00000708 + + .data 0x811AE8F0 + .data 4 + .binary 00000b5e + + .data 0x811AE95C + .data 4 + .binary 000008ca + + .data 0x811AE980 + .data 4 + .binary 000006ae + + .data 0x811AE9A4 + .data 4 + .binary 000003e8 + + .data 0x811AE9C8 + .data 4 + .binary 00000906 + + .data 0x811AE9EC + .data 4 + .binary 000009f6 + + .data 0x811AEA10 + .data 4 + .binary 00000b22 + + .data 0x811AEA34 + .data 4 + .binary 00000bb8 + + .data 0x811AEA7C + .data 4 + .binary 00000019 + + .data 0x811AEAA0 + .data 4 + .binary 00000672 + + .data 0x811AEAC4 + .data 4 + .binary 000010fe + + .data 0x811AEAE8 + .data 4 + .binary 00000690 + + .data 0x811AEB0C + .data 4 + .binary 000006cc + + .data 0x811AEB30 + .data 4 + .binary 0000053c + + .data 0x811AEB54 + .data 4 + .binary 000006ae + + .data 0x811AEB78 + .data 4 + .binary 00000762 + + .data 0x811AEB9C + .data 4 + .binary 000007bc + + .data 0x811AEBC0 + .data 4 + .binary 000005c8 + + .data 0x811AEBE4 + .data 4 + .binary 00000708 + + .data 0x811AEC08 + .data 4 + .binary 000005fa + + .data 0x811AEC2C + .data 4 + .binary 00000618 + + .data 0x811AEC50 + .data 4 + .binary 00000636 + + .data 0 + .data 0 From 1849d9d13d6f139113b28236303362260d0f1960 Mon Sep 17 00:00:00 2001 From: James Osborne Date: Thu, 21 May 2026 02:32:12 -0400 Subject: [PATCH 05/15] Make GC EXP enable shim inert and dedupe dispatch --- src/Client.hh | 3 + src/ReceiveSubcommands.cc | 8 + .../PsoPeepsGCEXP_enabled.10x_weekend.s | 830 +----------------- .../PsoPeepsGCEXP_enabled.5x_week.s | 830 +----------------- .../client-functions/PsoPeepsGCEXP_enabled.s | 830 +----------------- 5 files changed, 17 insertions(+), 2484 deletions(-) diff --git a/src/Client.hh b/src/Client.hh index 44b66a2f..2b4a453b 100644 --- a/src/Client.hh +++ b/src/Client.hh @@ -19,6 +19,7 @@ #include "QuestScript.hh" #include "TeamIndex.hh" #include "Text.hh" +#include extern const uint64_t CLIENT_CONFIG_MAGIC; @@ -147,6 +148,8 @@ public: // Basic state uint64_t enabled_flags = DEFAULT_FLAGS; // Client::Flag enum + std::string last_psopeeps_gc_exp_key; + void* last_psopeeps_gc_exp_lobby = nullptr; uint32_t specific_version = 0; uint8_t override_section_id = 0xFF; // FF = no override uint8_t override_lobby_event = 0xFF; // FF = no override diff --git a/src/ReceiveSubcommands.cc b/src/ReceiveSubcommands.cc index de144a96..751b6562 100644 --- a/src/ReceiveSubcommands.cc +++ b/src/ReceiveSubcommands.cc @@ -3710,9 +3710,17 @@ static asio::awaitable dispatch_gc_v3_exp_patch(shared_ptr c) { key += "x_"; key += episode_str; + void* lobby_token = l.get(); + if ((c->last_psopeeps_gc_exp_lobby == lobby_token) && + (c->last_psopeeps_gc_exp_key == key)) { + co_return; + } + try { auto fn = server_state->client_functions->get(key, c->specific_version); co_await send_function_call(c, fn); + c->last_psopeeps_gc_exp_lobby = lobby_token; + c->last_psopeeps_gc_exp_key = key; } catch (const out_of_range&) { c->log.warning_f("GC V3 EXP dispatcher could not find client function {}", key); } diff --git a/system/client-functions.disabled/PsoPeepsGCEXP_enabled.10x_weekend.s b/system/client-functions.disabled/PsoPeepsGCEXP_enabled.10x_weekend.s index af184ee0..6e3dc1ec 100644 --- a/system/client-functions.disabled/PsoPeepsGCEXP_enabled.10x_weekend.s +++ b/system/client-functions.disabled/PsoPeepsGCEXP_enabled.10x_weekend.s @@ -3,837 +3,11 @@ .meta description="GameCube V3 XP boost — server dispatches the correct 10x EP1/EP2 payload when entering gameplay." .meta visibility="menu" .meta client_flag="0x0000200000000000" - .versions 3OE2 entry_ptr: reloc0: .offsetof start - start: - .include WriteCodeBlocks - - # PSO Peeps GC Plus USA / 3OE2 - # Source table: BattleParamEntry_on.dat - # Active online battle-param table loaded at 0x811AB7C0 - # EXP field offset within each 0x24-byte row is +0x1C - # Generated from clean BattleParamEntry_on.dat; multiplier=10x - - .data - .data 4 - .binary 0000000a - - .data - .data 4 - .binary 0000003c - - .data - .data 4 - .binary 00000032 - - .data - .data 4 - .binary 00000046 - - .data - .data 4 - .binary 00000064 - - .data - .data 4 - .binary 000005dc - - .data - .data 4 - .binary 000000fa - - .data - .data 4 - .binary 000000a0 - - .data - .data 4 - .binary 000000a0 - - .data - .data 4 - .binary 000000aa - - .data - .data 4 - .binary 00000122 - - .data - .data 4 - .binary 00000028 - - .data - .data 4 - .binary 00000028 - - .data - .data 4 - .binary 0000015e - - .data - .data 4 - .binary 0000015e - - .data - .data 4 - .binary 000022c4 - - .data - .data 4 - .binary 00000064 - - .data - .data 4 - .binary 00000064 - - .data - .data 4 - .binary 00000fa0 - - .data - .data 4 - .binary 00000118 - - .data - .data 4 - .binary 00000028 - - .data - .data 4 - .binary 000003e8 - - .data - .data 4 - .binary 00000096 - - .data - .data 4 - .binary 0000001e - - .data - .data 4 - .binary 000000b4 - - .data - .data 4 - .binary 000000dc - - .data - .data 4 - .binary 000000c8 - - .data - .data 4 - .binary 0000010e - - .data - .data 4 - .binary 0000003c - - .data - .data 4 - .binary 000030d4 - - .data - .data 4 - .binary 00000064 - - .data - .data 4 - .binary 0000003c - - .data - .data 4 - .binary 00000028 - - .data - .data 4 - .binary 00000028 - - .data - .data 4 - .binary 000005dc - - .data - .data 4 - .binary 00000032 - - .data - .data 4 - .binary 00007530 - - .data - .data 4 - .binary 00000032 - - .data - .data 4 - .binary 00000082 - - .data - .data 4 - .binary 000003e8 - - .data - .data 4 - .binary 00000032 - - .data - .data 4 - .binary 0000003c - - .data - .data 4 - .binary 00000046 - - .data - .data 4 - .binary 000000c8 - - .data - .data 4 - .binary 00000064 - - .data - .data 4 - .binary 00000078 - - .data - .data 4 - .binary 0000008c - - .data - .data 4 - .binary 0000012c - - .data - .data 4 - .binary 000000dc - - .data - .data 4 - .binary 000000f0 - - .data - .data 4 - .binary 00000104 - - .data - .data 4 - .binary 00000168 - - .data - .data 4 - .binary 000001ae - - .data - .data 4 - .binary 000001a4 - - .data - .data 4 - .binary 000001c2 - - .data - .data 4 - .binary 000001ea - - .data - .data 4 - .binary 00000a1e - - .data - .data 4 - .binary 000002bc - - .data - .data 4 - .binary 00000244 - - .data - .data 4 - .binary 00000244 - - .data - .data 4 - .binary 00000258 - - .data - .data 4 - .binary 0000030c - - .data - .data 4 - .binary 00000190 - - .data - .data 4 - .binary 00000190 - - .data - .data 4 - .binary 000003ca - - .data - .data 4 - .binary 00000348 - - .data - .data 4 - .binary 00007d00 - - .data - .data 4 - .binary 000000fa - - .data - .data 4 - .binary 00000028 - - .data - .data 4 - .binary 00005dc0 - - .data - .data 4 - .binary 000002ee - - .data - .data 4 - .binary 00000190 - - .data - .data 4 - .binary 00000730 - - .data - .data 4 - .binary 0000023a - - .data - .data 4 - .binary 0000006e - - .data - .data 4 - .binary 00000262 - - .data - .data 4 - .binary 0000029e - - .data - .data 4 - .binary 00000280 - - .data - .data 4 - .binary 00000302 - - .data - .data 4 - .binary 000001ae - - .data - .data 4 - .binary 00009470 - - .data - .data 4 - .binary 000001ea - - .data - .data 4 - .binary 00000104 - - .data - .data 4 - .binary 000000e6 - - .data - .data 4 - .binary 000000e6 - - .data - .data 4 - .binary 00000a1e - - .data - .data 4 - .binary 00000032 - - .data - .data 4 - .binary 00013880 - - .data - .data 4 - .binary 00000032 - - .data - .data 4 - .binary 00000230 - - .data - .data 4 - .binary 00000730 - - .data - .data 4 - .binary 000001a4 - - .data - .data 4 - .binary 000001ae - - .data - .data 4 - .binary 000001c2 - - .data - .data 4 - .binary 00000280 - - .data - .data 4 - .binary 000001ea - - .data - .data 4 - .binary 00000208 - - .data - .data 4 - .binary 00000226 - - .data - .data 4 - .binary 0000032a - - .data - .data 4 - .binary 0000029e - - .data - .data 4 - .binary 000002bc - - .data - .data 4 - .binary 000002da - - .data - .data 4 - .binary 00000334 - - .data - .data 4 - .binary 00000398 - - .data - .data 4 - .binary 00000384 - - .data - .data 4 - .binary 000003ac - - .data - .data 4 - .binary 000003e8 - - .data - .data 4 - .binary 00000ed8 - - .data - .data 4 - .binary 0000055a - - .data - .data 4 - .binary 00000460 - - .data - .data 4 - .binary 00000460 - - .data - .data 4 - .binary 00000474 - - .data - .data 4 - .binary 000005c8 - - .data - .data 4 - .binary 00000370 - - .data - .data 4 - .binary 00000370 - - .data - .data 4 - .binary 000005dc - - .data - .data 4 - .binary 000005a0 - - .data - .data 4 - .binary 000153d8 - - .data - .data 4 - .binary 0000012c - - .data - .data 4 - .binary 00000050 - - .data - .data 4 - .binary 000137b8 - - .data - .data 4 - .binary 00000596 - - .data - .data 4 - .binary 00000370 - - .data - .data 4 - .binary 00000af0 - - .data - .data 4 - .binary 000004b0 - - .data - .data 4 - .binary 000000dc - - .data - .data 4 - .binary 00000488 - - .data - .data 4 - .binary 000004d8 - - .data - .data 4 - .binary 000004b0 - - .data - .data 4 - .binary 00000500 - - .data - .data 4 - .binary 00000398 - - .data - .data 4 - .binary 0001b198 - - .data - .data 4 - .binary 000003e8 - - .data - .data 4 - .binary 00000208 - - .data - .data 4 - .binary 000001e0 - - .data - .data 4 - .binary 000001e0 - - .data - .data 4 - .binary 00000ed8 - - .data - .data 4 - .binary 0000005a - - .data - .data 4 - .binary 00027100 - - .data - .data 4 - .binary 0000005a - - .data - .data 4 - .binary 00000456 - - .data - .data 4 - .binary 00000af0 - - .data - .data 4 - .binary 00000384 - - .data - .data 4 - .binary 00000398 - - .data - .data 4 - .binary 000003ac - - .data - .data 4 - .binary 000004e2 - - .data - .data 4 - .binary 000003e8 - - .data - .data 4 - .binary 00000410 - - .data - .data 4 - .binary 00000438 - - .data - .data 4 - .binary 000005dc - - .data - .data 4 - .binary 000004d8 - - .data - .data 4 - .binary 00000500 - - .data - .data 4 - .binary 00000528 - - .data - .data 4 - .binary 000005aa - - .data - .data 4 - .binary 00000a8c - - .data - .data 4 - .binary 00000abe - - .data - .data 4 - .binary 00000af0 - - .data - .data 4 - .binary 00000b86 - - .data - .data 4 - .binary 00002328 - - .data - .data 4 - .binary 00000dac - - .data - .data 4 - .binary 00000c80 - - .data - .data 4 - .binary 00000c80 - - .data - .data 4 - .binary 00000cb2 - - .data - .data 4 - .binary 00000e2e - - .data - .data 4 - .binary 000003e8 - - .data - .data 4 - .binary 000003e8 - - .data - .data 4 - .binary 00000f0a - - .data - .data 4 - .binary 00000e88 - - .data - .data 4 - .binary 0002de60 - - .data - .data 4 - .binary 00000258 - - .data - .data 4 - .binary 000000a0 - - .data - .data 4 - .binary 00026d18 - - .data - .data 4 - .binary 00000d70 - - .data - .data 4 - .binary 00000a00 - - .data - .data 4 - .binary 00001b58 - - .data - .data 4 - .binary 00000c80 - - .data - .data 4 - .binary 0000024e - - .data - .data 4 - .binary 00000c8a - - .data - .data 4 - .binary 00000dde - - .data - .data 4 - .binary 00000d0c - - .data - .data 4 - .binary 00000d0c - - .data - .data 4 - .binary 00000aaa - - .data - .data 4 - .binary 000395f8 - - .data - .data 4 - .binary 00000b54 - - .data - .data 4 - .binary 0000079e - - .data - .data 4 - .binary 00000708 - - .data - .data 4 - .binary 00000708 - - .data - .data 4 - .binary 00002260 - - .data - .data 4 - .binary 000000fa - - .data - .data 4 - .binary 0007a120 - - .data - .data 4 - .binary 000000c8 - - .data - .data 4 - .binary 00000bb8 - - .data - .data 4 - .binary 00001af4 - - .data - .data 4 - .binary 00000a96 - - .data - .data 4 - .binary 00000ac8 - - .data - .data 4 - .binary 00000a78 - - .data - .data 4 - .binary 00000d02 - - .data - .data 4 - .binary 00000b86 - - .data - .data 4 - .binary 00000bd6 - - .data - .data 4 - .binary 00000c6c - - .data - .data 4 - .binary 00000ea6 - - .data - .data 4 - .binary 00000d3e - - .data - .data 4 - .binary 00000d7a - - .data - .data 4 - .binary 00000de8 - - .data 0 - .data 0 + .align 4 + .binary 4E800020 diff --git a/system/client-functions.disabled/PsoPeepsGCEXP_enabled.5x_week.s b/system/client-functions.disabled/PsoPeepsGCEXP_enabled.5x_week.s index d07c0b30..3ac500f6 100644 --- a/system/client-functions.disabled/PsoPeepsGCEXP_enabled.5x_week.s +++ b/system/client-functions.disabled/PsoPeepsGCEXP_enabled.5x_week.s @@ -3,837 +3,11 @@ .meta description="GameCube V3 XP boost — server dispatches the correct 5x EP1/EP2 payload when entering gameplay." .meta visibility="menu" .meta client_flag="0x0000200000000000" - .versions 3OE2 entry_ptr: reloc0: .offsetof start - start: - .include WriteCodeBlocks - - # PSO Peeps GC Plus USA / 3OE2 - # Source table: BattleParamEntry_on.dat - # Active online battle-param table loaded at 0x811AB7C0 - # EXP field offset within each 0x24-byte row is +0x1C - # Generated from clean BattleParamEntry_on.dat; multiplier=5x - - .data - .data 4 - .binary 00000005 - - .data - .data 4 - .binary 0000001e - - .data - .data 4 - .binary 00000019 - - .data - .data 4 - .binary 00000023 - - .data - .data 4 - .binary 00000032 - - .data - .data 4 - .binary 000002ee - - .data - .data 4 - .binary 0000007d - - .data - .data 4 - .binary 00000050 - - .data - .data 4 - .binary 00000050 - - .data - .data 4 - .binary 00000055 - - .data - .data 4 - .binary 00000091 - - .data - .data 4 - .binary 00000014 - - .data - .data 4 - .binary 00000014 - - .data - .data 4 - .binary 000000af - - .data - .data 4 - .binary 000000af - - .data - .data 4 - .binary 00001162 - - .data - .data 4 - .binary 00000032 - - .data - .data 4 - .binary 00000032 - - .data - .data 4 - .binary 000007d0 - - .data - .data 4 - .binary 0000008c - - .data - .data 4 - .binary 00000014 - - .data - .data 4 - .binary 000001f4 - - .data - .data 4 - .binary 0000004b - - .data - .data 4 - .binary 0000000f - - .data - .data 4 - .binary 0000005a - - .data - .data 4 - .binary 0000006e - - .data - .data 4 - .binary 00000064 - - .data - .data 4 - .binary 00000087 - - .data - .data 4 - .binary 0000001e - - .data - .data 4 - .binary 0000186a - - .data - .data 4 - .binary 00000032 - - .data - .data 4 - .binary 0000001e - - .data - .data 4 - .binary 00000014 - - .data - .data 4 - .binary 00000014 - - .data - .data 4 - .binary 000002ee - - .data - .data 4 - .binary 00000019 - - .data - .data 4 - .binary 00003a98 - - .data - .data 4 - .binary 00000019 - - .data - .data 4 - .binary 00000041 - - .data - .data 4 - .binary 000001f4 - - .data - .data 4 - .binary 00000019 - - .data - .data 4 - .binary 0000001e - - .data - .data 4 - .binary 00000023 - - .data - .data 4 - .binary 00000064 - - .data - .data 4 - .binary 00000032 - - .data - .data 4 - .binary 0000003c - - .data - .data 4 - .binary 00000046 - - .data - .data 4 - .binary 00000096 - - .data - .data 4 - .binary 0000006e - - .data - .data 4 - .binary 00000078 - - .data - .data 4 - .binary 00000082 - - .data - .data 4 - .binary 000000b4 - - .data - .data 4 - .binary 000000d7 - - .data - .data 4 - .binary 000000d2 - - .data - .data 4 - .binary 000000e1 - - .data - .data 4 - .binary 000000f5 - - .data - .data 4 - .binary 0000050f - - .data - .data 4 - .binary 0000015e - - .data - .data 4 - .binary 00000122 - - .data - .data 4 - .binary 00000122 - - .data - .data 4 - .binary 0000012c - - .data - .data 4 - .binary 00000186 - - .data - .data 4 - .binary 000000c8 - - .data - .data 4 - .binary 000000c8 - - .data - .data 4 - .binary 000001e5 - - .data - .data 4 - .binary 000001a4 - - .data - .data 4 - .binary 00003e80 - - .data - .data 4 - .binary 0000007d - - .data - .data 4 - .binary 00000014 - - .data - .data 4 - .binary 00002ee0 - - .data - .data 4 - .binary 00000177 - - .data - .data 4 - .binary 000000c8 - - .data - .data 4 - .binary 00000398 - - .data - .data 4 - .binary 0000011d - - .data - .data 4 - .binary 00000037 - - .data - .data 4 - .binary 00000131 - - .data - .data 4 - .binary 0000014f - - .data - .data 4 - .binary 00000140 - - .data - .data 4 - .binary 00000181 - - .data - .data 4 - .binary 000000d7 - - .data - .data 4 - .binary 00004a38 - - .data - .data 4 - .binary 000000f5 - - .data - .data 4 - .binary 00000082 - - .data - .data 4 - .binary 00000073 - - .data - .data 4 - .binary 00000073 - - .data - .data 4 - .binary 0000050f - - .data - .data 4 - .binary 00000019 - - .data - .data 4 - .binary 00009c40 - - .data - .data 4 - .binary 00000019 - - .data - .data 4 - .binary 00000118 - - .data - .data 4 - .binary 00000398 - - .data - .data 4 - .binary 000000d2 - - .data - .data 4 - .binary 000000d7 - - .data - .data 4 - .binary 000000e1 - - .data - .data 4 - .binary 00000140 - - .data - .data 4 - .binary 000000f5 - - .data - .data 4 - .binary 00000104 - - .data - .data 4 - .binary 00000113 - - .data - .data 4 - .binary 00000195 - - .data - .data 4 - .binary 0000014f - - .data - .data 4 - .binary 0000015e - - .data - .data 4 - .binary 0000016d - - .data - .data 4 - .binary 0000019a - - .data - .data 4 - .binary 000001cc - - .data - .data 4 - .binary 000001c2 - - .data - .data 4 - .binary 000001d6 - - .data - .data 4 - .binary 000001f4 - - .data - .data 4 - .binary 0000076c - - .data - .data 4 - .binary 000002ad - - .data - .data 4 - .binary 00000230 - - .data - .data 4 - .binary 00000230 - - .data - .data 4 - .binary 0000023a - - .data - .data 4 - .binary 000002e4 - - .data - .data 4 - .binary 000001b8 - - .data - .data 4 - .binary 000001b8 - - .data - .data 4 - .binary 000002ee - - .data - .data 4 - .binary 000002d0 - - .data - .data 4 - .binary 0000a9ec - - .data - .data 4 - .binary 00000096 - - .data - .data 4 - .binary 00000028 - - .data - .data 4 - .binary 00009bdc - - .data - .data 4 - .binary 000002cb - - .data - .data 4 - .binary 000001b8 - - .data - .data 4 - .binary 00000578 - - .data - .data 4 - .binary 00000258 - - .data - .data 4 - .binary 0000006e - - .data - .data 4 - .binary 00000244 - - .data - .data 4 - .binary 0000026c - - .data - .data 4 - .binary 00000258 - - .data - .data 4 - .binary 00000280 - - .data - .data 4 - .binary 000001cc - - .data - .data 4 - .binary 0000d8cc - - .data - .data 4 - .binary 000001f4 - - .data - .data 4 - .binary 00000104 - - .data - .data 4 - .binary 000000f0 - - .data - .data 4 - .binary 000000f0 - - .data - .data 4 - .binary 0000076c - - .data - .data 4 - .binary 0000002d - - .data - .data 4 - .binary 00013880 - - .data - .data 4 - .binary 0000002d - - .data - .data 4 - .binary 0000022b - - .data - .data 4 - .binary 00000578 - - .data - .data 4 - .binary 000001c2 - - .data - .data 4 - .binary 000001cc - - .data - .data 4 - .binary 000001d6 - - .data - .data 4 - .binary 00000271 - - .data - .data 4 - .binary 000001f4 - - .data - .data 4 - .binary 00000208 - - .data - .data 4 - .binary 0000021c - - .data - .data 4 - .binary 000002ee - - .data - .data 4 - .binary 0000026c - - .data - .data 4 - .binary 00000280 - - .data - .data 4 - .binary 00000294 - - .data - .data 4 - .binary 000002d5 - - .data - .data 4 - .binary 00000546 - - .data - .data 4 - .binary 0000055f - - .data - .data 4 - .binary 00000578 - - .data - .data 4 - .binary 000005c3 - - .data - .data 4 - .binary 00001194 - - .data - .data 4 - .binary 000006d6 - - .data - .data 4 - .binary 00000640 - - .data - .data 4 - .binary 00000640 - - .data - .data 4 - .binary 00000659 - - .data - .data 4 - .binary 00000717 - - .data - .data 4 - .binary 000001f4 - - .data - .data 4 - .binary 000001f4 - - .data - .data 4 - .binary 00000785 - - .data - .data 4 - .binary 00000744 - - .data - .data 4 - .binary 00016f30 - - .data - .data 4 - .binary 0000012c - - .data - .data 4 - .binary 00000050 - - .data - .data 4 - .binary 0001368c - - .data - .data 4 - .binary 000006b8 - - .data - .data 4 - .binary 00000500 - - .data - .data 4 - .binary 00000dac - - .data - .data 4 - .binary 00000640 - - .data - .data 4 - .binary 00000127 - - .data - .data 4 - .binary 00000645 - - .data - .data 4 - .binary 000006ef - - .data - .data 4 - .binary 00000686 - - .data - .data 4 - .binary 00000686 - - .data - .data 4 - .binary 00000555 - - .data - .data 4 - .binary 0001cafc - - .data - .data 4 - .binary 000005aa - - .data - .data 4 - .binary 000003cf - - .data - .data 4 - .binary 00000384 - - .data - .data 4 - .binary 00000384 - - .data - .data 4 - .binary 00001130 - - .data - .data 4 - .binary 0000007d - - .data - .data 4 - .binary 0003d090 - - .data - .data 4 - .binary 00000064 - - .data - .data 4 - .binary 000005dc - - .data - .data 4 - .binary 00000d7a - - .data - .data 4 - .binary 0000054b - - .data - .data 4 - .binary 00000564 - - .data - .data 4 - .binary 0000053c - - .data - .data 4 - .binary 00000681 - - .data - .data 4 - .binary 000005c3 - - .data - .data 4 - .binary 000005eb - - .data - .data 4 - .binary 00000636 - - .data - .data 4 - .binary 00000753 - - .data - .data 4 - .binary 0000069f - - .data - .data 4 - .binary 000006bd - - .data - .data 4 - .binary 000006f4 - - .data 0 - .data 0 + .align 4 + .binary 4E800020 diff --git a/system/client-functions/PsoPeepsGCEXP_enabled.s b/system/client-functions/PsoPeepsGCEXP_enabled.s index d07c0b30..3ac500f6 100644 --- a/system/client-functions/PsoPeepsGCEXP_enabled.s +++ b/system/client-functions/PsoPeepsGCEXP_enabled.s @@ -3,837 +3,11 @@ .meta description="GameCube V3 XP boost — server dispatches the correct 5x EP1/EP2 payload when entering gameplay." .meta visibility="menu" .meta client_flag="0x0000200000000000" - .versions 3OE2 entry_ptr: reloc0: .offsetof start - start: - .include WriteCodeBlocks - - # PSO Peeps GC Plus USA / 3OE2 - # Source table: BattleParamEntry_on.dat - # Active online battle-param table loaded at 0x811AB7C0 - # EXP field offset within each 0x24-byte row is +0x1C - # Generated from clean BattleParamEntry_on.dat; multiplier=5x - - .data - .data 4 - .binary 00000005 - - .data - .data 4 - .binary 0000001e - - .data - .data 4 - .binary 00000019 - - .data - .data 4 - .binary 00000023 - - .data - .data 4 - .binary 00000032 - - .data - .data 4 - .binary 000002ee - - .data - .data 4 - .binary 0000007d - - .data - .data 4 - .binary 00000050 - - .data - .data 4 - .binary 00000050 - - .data - .data 4 - .binary 00000055 - - .data - .data 4 - .binary 00000091 - - .data - .data 4 - .binary 00000014 - - .data - .data 4 - .binary 00000014 - - .data - .data 4 - .binary 000000af - - .data - .data 4 - .binary 000000af - - .data - .data 4 - .binary 00001162 - - .data - .data 4 - .binary 00000032 - - .data - .data 4 - .binary 00000032 - - .data - .data 4 - .binary 000007d0 - - .data - .data 4 - .binary 0000008c - - .data - .data 4 - .binary 00000014 - - .data - .data 4 - .binary 000001f4 - - .data - .data 4 - .binary 0000004b - - .data - .data 4 - .binary 0000000f - - .data - .data 4 - .binary 0000005a - - .data - .data 4 - .binary 0000006e - - .data - .data 4 - .binary 00000064 - - .data - .data 4 - .binary 00000087 - - .data - .data 4 - .binary 0000001e - - .data - .data 4 - .binary 0000186a - - .data - .data 4 - .binary 00000032 - - .data - .data 4 - .binary 0000001e - - .data - .data 4 - .binary 00000014 - - .data - .data 4 - .binary 00000014 - - .data - .data 4 - .binary 000002ee - - .data - .data 4 - .binary 00000019 - - .data - .data 4 - .binary 00003a98 - - .data - .data 4 - .binary 00000019 - - .data - .data 4 - .binary 00000041 - - .data - .data 4 - .binary 000001f4 - - .data - .data 4 - .binary 00000019 - - .data - .data 4 - .binary 0000001e - - .data - .data 4 - .binary 00000023 - - .data - .data 4 - .binary 00000064 - - .data - .data 4 - .binary 00000032 - - .data - .data 4 - .binary 0000003c - - .data - .data 4 - .binary 00000046 - - .data - .data 4 - .binary 00000096 - - .data - .data 4 - .binary 0000006e - - .data - .data 4 - .binary 00000078 - - .data - .data 4 - .binary 00000082 - - .data - .data 4 - .binary 000000b4 - - .data - .data 4 - .binary 000000d7 - - .data - .data 4 - .binary 000000d2 - - .data - .data 4 - .binary 000000e1 - - .data - .data 4 - .binary 000000f5 - - .data - .data 4 - .binary 0000050f - - .data - .data 4 - .binary 0000015e - - .data - .data 4 - .binary 00000122 - - .data - .data 4 - .binary 00000122 - - .data - .data 4 - .binary 0000012c - - .data - .data 4 - .binary 00000186 - - .data - .data 4 - .binary 000000c8 - - .data - .data 4 - .binary 000000c8 - - .data - .data 4 - .binary 000001e5 - - .data - .data 4 - .binary 000001a4 - - .data - .data 4 - .binary 00003e80 - - .data - .data 4 - .binary 0000007d - - .data - .data 4 - .binary 00000014 - - .data - .data 4 - .binary 00002ee0 - - .data - .data 4 - .binary 00000177 - - .data - .data 4 - .binary 000000c8 - - .data - .data 4 - .binary 00000398 - - .data - .data 4 - .binary 0000011d - - .data - .data 4 - .binary 00000037 - - .data - .data 4 - .binary 00000131 - - .data - .data 4 - .binary 0000014f - - .data - .data 4 - .binary 00000140 - - .data - .data 4 - .binary 00000181 - - .data - .data 4 - .binary 000000d7 - - .data - .data 4 - .binary 00004a38 - - .data - .data 4 - .binary 000000f5 - - .data - .data 4 - .binary 00000082 - - .data - .data 4 - .binary 00000073 - - .data - .data 4 - .binary 00000073 - - .data - .data 4 - .binary 0000050f - - .data - .data 4 - .binary 00000019 - - .data - .data 4 - .binary 00009c40 - - .data - .data 4 - .binary 00000019 - - .data - .data 4 - .binary 00000118 - - .data - .data 4 - .binary 00000398 - - .data - .data 4 - .binary 000000d2 - - .data - .data 4 - .binary 000000d7 - - .data - .data 4 - .binary 000000e1 - - .data - .data 4 - .binary 00000140 - - .data - .data 4 - .binary 000000f5 - - .data - .data 4 - .binary 00000104 - - .data - .data 4 - .binary 00000113 - - .data - .data 4 - .binary 00000195 - - .data - .data 4 - .binary 0000014f - - .data - .data 4 - .binary 0000015e - - .data - .data 4 - .binary 0000016d - - .data - .data 4 - .binary 0000019a - - .data - .data 4 - .binary 000001cc - - .data - .data 4 - .binary 000001c2 - - .data - .data 4 - .binary 000001d6 - - .data - .data 4 - .binary 000001f4 - - .data - .data 4 - .binary 0000076c - - .data - .data 4 - .binary 000002ad - - .data - .data 4 - .binary 00000230 - - .data - .data 4 - .binary 00000230 - - .data - .data 4 - .binary 0000023a - - .data - .data 4 - .binary 000002e4 - - .data - .data 4 - .binary 000001b8 - - .data - .data 4 - .binary 000001b8 - - .data - .data 4 - .binary 000002ee - - .data - .data 4 - .binary 000002d0 - - .data - .data 4 - .binary 0000a9ec - - .data - .data 4 - .binary 00000096 - - .data - .data 4 - .binary 00000028 - - .data - .data 4 - .binary 00009bdc - - .data - .data 4 - .binary 000002cb - - .data - .data 4 - .binary 000001b8 - - .data - .data 4 - .binary 00000578 - - .data - .data 4 - .binary 00000258 - - .data - .data 4 - .binary 0000006e - - .data - .data 4 - .binary 00000244 - - .data - .data 4 - .binary 0000026c - - .data - .data 4 - .binary 00000258 - - .data - .data 4 - .binary 00000280 - - .data - .data 4 - .binary 000001cc - - .data - .data 4 - .binary 0000d8cc - - .data - .data 4 - .binary 000001f4 - - .data - .data 4 - .binary 00000104 - - .data - .data 4 - .binary 000000f0 - - .data - .data 4 - .binary 000000f0 - - .data - .data 4 - .binary 0000076c - - .data - .data 4 - .binary 0000002d - - .data - .data 4 - .binary 00013880 - - .data - .data 4 - .binary 0000002d - - .data - .data 4 - .binary 0000022b - - .data - .data 4 - .binary 00000578 - - .data - .data 4 - .binary 000001c2 - - .data - .data 4 - .binary 000001cc - - .data - .data 4 - .binary 000001d6 - - .data - .data 4 - .binary 00000271 - - .data - .data 4 - .binary 000001f4 - - .data - .data 4 - .binary 00000208 - - .data - .data 4 - .binary 0000021c - - .data - .data 4 - .binary 000002ee - - .data - .data 4 - .binary 0000026c - - .data - .data 4 - .binary 00000280 - - .data - .data 4 - .binary 00000294 - - .data - .data 4 - .binary 000002d5 - - .data - .data 4 - .binary 00000546 - - .data - .data 4 - .binary 0000055f - - .data - .data 4 - .binary 00000578 - - .data - .data 4 - .binary 000005c3 - - .data - .data 4 - .binary 00001194 - - .data - .data 4 - .binary 000006d6 - - .data - .data 4 - .binary 00000640 - - .data - .data 4 - .binary 00000640 - - .data - .data 4 - .binary 00000659 - - .data - .data 4 - .binary 00000717 - - .data - .data 4 - .binary 000001f4 - - .data - .data 4 - .binary 000001f4 - - .data - .data 4 - .binary 00000785 - - .data - .data 4 - .binary 00000744 - - .data - .data 4 - .binary 00016f30 - - .data - .data 4 - .binary 0000012c - - .data - .data 4 - .binary 00000050 - - .data - .data 4 - .binary 0001368c - - .data - .data 4 - .binary 000006b8 - - .data - .data 4 - .binary 00000500 - - .data - .data 4 - .binary 00000dac - - .data - .data 4 - .binary 00000640 - - .data - .data 4 - .binary 00000127 - - .data - .data 4 - .binary 00000645 - - .data - .data 4 - .binary 000006ef - - .data - .data 4 - .binary 00000686 - - .data - .data 4 - .binary 00000686 - - .data - .data 4 - .binary 00000555 - - .data - .data 4 - .binary 0001cafc - - .data - .data 4 - .binary 000005aa - - .data - .data 4 - .binary 000003cf - - .data - .data 4 - .binary 00000384 - - .data - .data 4 - .binary 00000384 - - .data - .data 4 - .binary 00001130 - - .data - .data 4 - .binary 0000007d - - .data - .data 4 - .binary 0003d090 - - .data - .data 4 - .binary 00000064 - - .data - .data 4 - .binary 000005dc - - .data - .data 4 - .binary 00000d7a - - .data - .data 4 - .binary 0000054b - - .data - .data 4 - .binary 00000564 - - .data - .data 4 - .binary 0000053c - - .data - .data 4 - .binary 00000681 - - .data - .data 4 - .binary 000005c3 - - .data - .data 4 - .binary 000005eb - - .data - .data 4 - .binary 00000636 - - .data - .data 4 - .binary 00000753 - - .data - .data 4 - .binary 0000069f - - .data - .data 4 - .binary 000006bd - - .data - .data 4 - .binary 000006f4 - - .data 0 - .data 0 + .align 4 + .binary 4E800020 From 9e746a63d946ed9afb0579ca9b4c6161f0d17009 Mon Sep 17 00:00:00 2001 From: James Osborne Date: Thu, 21 May 2026 02:47:09 -0400 Subject: [PATCH 06/15] Fix GC EXP enable shim assembly --- .../PsoPeepsGCEXP_enabled.10x_weekend.s | 3 +-- .../client-functions.disabled/PsoPeepsGCEXP_enabled.5x_week.s | 3 +-- system/client-functions/PsoPeepsGCEXP_enabled.s | 3 +-- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/system/client-functions.disabled/PsoPeepsGCEXP_enabled.10x_weekend.s b/system/client-functions.disabled/PsoPeepsGCEXP_enabled.10x_weekend.s index 6e3dc1ec..348293e9 100644 --- a/system/client-functions.disabled/PsoPeepsGCEXP_enabled.10x_weekend.s +++ b/system/client-functions.disabled/PsoPeepsGCEXP_enabled.10x_weekend.s @@ -9,5 +9,4 @@ entry_ptr: reloc0: .offsetof start start: - .align 4 - .binary 4E800020 + blr diff --git a/system/client-functions.disabled/PsoPeepsGCEXP_enabled.5x_week.s b/system/client-functions.disabled/PsoPeepsGCEXP_enabled.5x_week.s index 3ac500f6..30b74e47 100644 --- a/system/client-functions.disabled/PsoPeepsGCEXP_enabled.5x_week.s +++ b/system/client-functions.disabled/PsoPeepsGCEXP_enabled.5x_week.s @@ -9,5 +9,4 @@ entry_ptr: reloc0: .offsetof start start: - .align 4 - .binary 4E800020 + blr diff --git a/system/client-functions/PsoPeepsGCEXP_enabled.s b/system/client-functions/PsoPeepsGCEXP_enabled.s index 3ac500f6..30b74e47 100644 --- a/system/client-functions/PsoPeepsGCEXP_enabled.s +++ b/system/client-functions/PsoPeepsGCEXP_enabled.s @@ -9,5 +9,4 @@ entry_ptr: reloc0: .offsetof start start: - .align 4 - .binary 4E800020 + blr From 2615ce46ebeabe888ee4be43d56d4ce479826549 Mon Sep 17 00:00:00 2001 From: James Osborne Date: Thu, 21 May 2026 03:08:41 -0400 Subject: [PATCH 07/15] Dispatch GC EXP before game loading --- src/ReceiveCommands.cc | 58 +++++++++++++++++++++++++++++++++++++++ src/ReceiveSubcommands.cc | 55 ------------------------------------- 2 files changed, 58 insertions(+), 55 deletions(-) diff --git a/src/ReceiveCommands.cc b/src/ReceiveCommands.cc index e042fa19..2838d522 100644 --- a/src/ReceiveCommands.cc +++ b/src/ReceiveCommands.cc @@ -33,6 +33,60 @@ const char* BATTLE_TABLE_DISCONNECT_HOOK_NAME = "battle_table_state"; const char* QUEST_BARRIER_DISCONNECT_HOOK_NAME = "quest_barrier"; const char* ADD_NEXT_CLIENT_DISCONNECT_HOOK_NAME = "add_next_game_client"; + +static void dispatch_gc_v3_exp_patch_for_lobby(shared_ptr c, shared_ptr l) { + if (c->version() != Version::GC_V3) { + return; + } + if (!c->check_flag(Client::Flag::HAS_SEND_FUNCTION_CALL)) { + return; + } + if (!c->login || !c->login->account) { + return; + } + if (!c->login->account->auto_patches_enabled.count("PsoPeepsGCEXP_enabled")) { + return; + } + if (!l || !l->is_game()) { + return; + } + + const char* episode_str = nullptr; + switch (l->episode) { + case Episode::EP1: + episode_str = "ep1"; + break; + case Episode::EP2: + episode_str = "ep2"; + break; + default: + return; + } + + auto server_state = c->require_server_state(); + + string key = "PsoPeepsGCEXP_internal_"; + key += std::to_string(server_state->psopeeps_gc_exp_multiplier); + key += "x_"; + key += episode_str; + + void* lobby_token = l.get(); + if ((c->last_psopeeps_gc_exp_lobby == lobby_token) && + (c->last_psopeeps_gc_exp_key == key)) { + return; + } + + try { + auto fn = server_state->client_functions->get(key, c->specific_version); + send_function_call(c->channel, c->enabled_flags, fn); + c->enabled_flags |= fn->client_flag; + c->last_psopeeps_gc_exp_lobby = lobby_token; + c->last_psopeeps_gc_exp_key = key; + } catch (const out_of_range&) { + c->log.warning_f("GC V3 EXP dispatcher could not find client function {}", key); + } +} + static string bb_test_taint_filename(shared_ptr c) { return c->character_filename() + ".test-tainted"; } @@ -3163,6 +3217,7 @@ static void on_10_game_menu(shared_ptr c, uint32_t item_id, const std::s } switch (game->join_error_for_client(c, &password)) { case Lobby::JoinError::ALLOWED: + dispatch_gc_v3_exp_patch_for_lobby(c, game); if (!s->change_client_lobby(c, game)) { throw logic_error("client cannot join game after all preconditions satisfied"); } @@ -5290,6 +5345,7 @@ static asio::awaitable on_C1_PC(shared_ptr c, Channel::Message& ms } auto game = create_game_generic(s, c, cmd.name.decode(c->language()), cmd.password.decode(c->language()), Episode::EP1, mode, cmd.difficulty, true); if (game) { + dispatch_gc_v3_exp_patch_for_lobby(c, game); s->change_client_lobby(c, game); c->set_flag(Client::Flag::LOADING); c->log.info_f("LOADING flag set"); @@ -5372,6 +5428,7 @@ static asio::awaitable on_0C_C1_E7_EC(shared_ptr c, Channel::Messa } if (game) { + dispatch_gc_v3_exp_patch_for_lobby(c, game); s->change_client_lobby(c, game); c->set_flag(Client::Flag::LOADING); c->log.info_f("LOADING flag set"); @@ -5428,6 +5485,7 @@ static asio::awaitable on_C1_BB(shared_ptr c, Channel::Message& ms auto game = create_game_generic(s, c, cmd.name.decode(c->language()), cmd.password.decode(c->language()), episode, mode, cmd.difficulty); if (game) { + dispatch_gc_v3_exp_patch_for_lobby(c, game); s->change_client_lobby(c, game); c->set_flag(Client::Flag::LOADING); c->log.info_f("LOADING flag set"); diff --git a/src/ReceiveSubcommands.cc b/src/ReceiveSubcommands.cc index 751b6562..eea05163 100644 --- a/src/ReceiveSubcommands.cc +++ b/src/ReceiveSubcommands.cc @@ -3672,60 +3672,6 @@ static asio::awaitable dispatch_dc_v2_exp_patch(shared_ptr c) { } -static asio::awaitable dispatch_gc_v3_exp_patch(shared_ptr c) { - if (c->version() != Version::GC_V3) { - co_return; - } - if (not c->check_flag(Client::Flag::HAS_SEND_FUNCTION_CALL)) { - co_return; - } - if (not c->login || not c->login->account) { - co_return; - } - if (not c->login->account->auto_patches_enabled.count("PsoPeepsGCEXP_enabled")) { - co_return; - } - - auto l = c->require_lobby(); - if (not l->is_game()) { - co_return; - } - - const char* episode_str = nullptr; - switch (l->episode) { - case Episode::EP1: - episode_str = "ep1"; - break; - case Episode::EP2: - episode_str = "ep2"; - break; - default: - co_return; - } - - auto server_state = c->require_server_state(); - - string key = "PsoPeepsGCEXP_internal_"; - key += std::to_string(server_state->psopeeps_gc_exp_multiplier); - key += "x_"; - key += episode_str; - - void* lobby_token = l.get(); - if ((c->last_psopeeps_gc_exp_lobby == lobby_token) && - (c->last_psopeeps_gc_exp_key == key)) { - co_return; - } - - try { - auto fn = server_state->client_functions->get(key, c->specific_version); - co_await send_function_call(c, fn); - c->last_psopeeps_gc_exp_lobby = lobby_token; - c->last_psopeeps_gc_exp_key = key; - } catch (const out_of_range&) { - c->log.warning_f("GC V3 EXP dispatcher could not find client function {}", key); - } -} - static asio::awaitable on_trigger_set_event(shared_ptr c, SubcommandMessage& msg) { auto l = c->require_lobby(); if (!l->is_game()) { @@ -3733,7 +3679,6 @@ static asio::awaitable on_trigger_set_event(shared_ptr c, Subcomma } co_await dispatch_dc_v2_exp_patch(c); - co_await dispatch_gc_v3_exp_patch(c); const auto& cmd = msg.check_size_t(); auto event_sts = l->map_state->event_states_for_id(c->version(), cmd.floor, cmd.event_id); From 7c7ecf03838dc66b378ff78a87178b2b2e103735 Mon Sep 17 00:00:00 2001 From: James Osborne Date: Thu, 21 May 2026 03:26:40 -0400 Subject: [PATCH 08/15] Use awaited path for GC EXP dispatch --- src/ReceiveCommands.cc | 41 ++++++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/src/ReceiveCommands.cc b/src/ReceiveCommands.cc index 2838d522..82faa055 100644 --- a/src/ReceiveCommands.cc +++ b/src/ReceiveCommands.cc @@ -34,21 +34,21 @@ const char* QUEST_BARRIER_DISCONNECT_HOOK_NAME = "quest_barrier"; const char* ADD_NEXT_CLIENT_DISCONNECT_HOOK_NAME = "add_next_game_client"; -static void dispatch_gc_v3_exp_patch_for_lobby(shared_ptr c, shared_ptr l) { +static asio::awaitable dispatch_gc_v3_exp_patch_for_lobby(shared_ptr c, shared_ptr l) { if (c->version() != Version::GC_V3) { - return; + co_return; } if (!c->check_flag(Client::Flag::HAS_SEND_FUNCTION_CALL)) { - return; + co_return; } if (!c->login || !c->login->account) { - return; + co_return; } if (!c->login->account->auto_patches_enabled.count("PsoPeepsGCEXP_enabled")) { - return; + co_return; } if (!l || !l->is_game()) { - return; + co_return; } const char* episode_str = nullptr; @@ -60,7 +60,7 @@ static void dispatch_gc_v3_exp_patch_for_lobby(shared_ptr c, shared_ptr< episode_str = "ep2"; break; default: - return; + co_return; } auto server_state = c->require_server_state(); @@ -73,13 +73,18 @@ static void dispatch_gc_v3_exp_patch_for_lobby(shared_ptr c, shared_ptr< void* lobby_token = l.get(); if ((c->last_psopeeps_gc_exp_lobby == lobby_token) && (c->last_psopeeps_gc_exp_key == key)) { - return; + co_return; } try { + co_await prepare_client_for_patches(c); + if (!c->channel->connected()) { + co_return; + } + auto fn = server_state->client_functions->get(key, c->specific_version); - send_function_call(c->channel, c->enabled_flags, fn); - c->enabled_flags |= fn->client_flag; + co_await send_function_call(c, fn); + c->last_psopeeps_gc_exp_lobby = lobby_token; c->last_psopeeps_gc_exp_key = key; } catch (const out_of_range&) { @@ -87,6 +92,8 @@ static void dispatch_gc_v3_exp_patch_for_lobby(shared_ptr c, shared_ptr< } } + + static string bb_test_taint_filename(shared_ptr c) { return c->character_filename() + ".test-tainted"; } @@ -3208,16 +3215,16 @@ static asio::awaitable on_10_proxy_destinations(shared_ptr c, uint } } -static void on_10_game_menu(shared_ptr c, uint32_t item_id, const std::string& password) { +static asio::awaitable on_10_game_menu(shared_ptr c, uint32_t item_id, const std::string& password) { auto s = c->require_server_state(); auto game = s->find_lobby(item_id); if (!game) { send_lobby_message_box(c, "$C7You cannot join this\ngame because it no\nlonger exists."); - return; + co_return; } switch (game->join_error_for_client(c, &password)) { case Lobby::JoinError::ALLOWED: - dispatch_gc_v3_exp_patch_for_lobby(c, game); + co_await dispatch_gc_v3_exp_patch_for_lobby(c, game); if (!s->change_client_lobby(c, game)) { throw logic_error("client cannot join game after all preconditions satisfied"); } @@ -3532,7 +3539,7 @@ static asio::awaitable on_10(shared_ptr c, Channel::Message& msg) co_await on_10_proxy_destinations(c, base_cmd.item_id); break; case MenuID::GAME: - on_10_game_menu(c, base_cmd.item_id, std::move(password)); + co_await on_10_game_menu(c, base_cmd.item_id, std::move(password)); break; case MenuID::QUEST_CATEGORIES_EP1_EP3_EP4: case MenuID::QUEST_CATEGORIES_EP2: @@ -5345,7 +5352,7 @@ static asio::awaitable on_C1_PC(shared_ptr c, Channel::Message& ms } auto game = create_game_generic(s, c, cmd.name.decode(c->language()), cmd.password.decode(c->language()), Episode::EP1, mode, cmd.difficulty, true); if (game) { - dispatch_gc_v3_exp_patch_for_lobby(c, game); + co_await dispatch_gc_v3_exp_patch_for_lobby(c, game); s->change_client_lobby(c, game); c->set_flag(Client::Flag::LOADING); c->log.info_f("LOADING flag set"); @@ -5428,7 +5435,7 @@ static asio::awaitable on_0C_C1_E7_EC(shared_ptr c, Channel::Messa } if (game) { - dispatch_gc_v3_exp_patch_for_lobby(c, game); + co_await dispatch_gc_v3_exp_patch_for_lobby(c, game); s->change_client_lobby(c, game); c->set_flag(Client::Flag::LOADING); c->log.info_f("LOADING flag set"); @@ -5485,7 +5492,7 @@ static asio::awaitable on_C1_BB(shared_ptr c, Channel::Message& ms auto game = create_game_generic(s, c, cmd.name.decode(c->language()), cmd.password.decode(c->language()), episode, mode, cmd.difficulty); if (game) { - dispatch_gc_v3_exp_patch_for_lobby(c, game); + co_await dispatch_gc_v3_exp_patch_for_lobby(c, game); s->change_client_lobby(c, game); c->set_flag(Client::Flag::LOADING); c->log.info_f("LOADING flag set"); From 6b3669dfd6de8d3dd06efc20ac317b4f4f59b958 Mon Sep 17 00:00:00 2001 From: James Osborne Date: Thu, 21 May 2026 03:43:48 -0400 Subject: [PATCH 09/15] Restore GC EXP direct menu patches --- src/Client.hh | 2 - src/ReceiveCommands.cc | 70 +- src/ServerState.cc | 4 - src/ServerState.hh | 1 - .../PsoPeepsGCEXP_enabled.10x_weekend.s | 12 - .../PsoPeepsGCEXP_enabled.5x_week.s | 12 - system/client-functions/PsoPeepsEP1EXP10x.s | 6 +- system/client-functions/PsoPeepsEP1EXP5x.s | 6 +- system/client-functions/PsoPeepsEP2EXP10xUS.s | 4 +- system/client-functions/PsoPeepsEP2EXP5xUS.s | 4 +- .../client-functions/PsoPeepsGCEXP_enabled.s | 12 - .../PsoPeepsGCEXP_internal_10x_ep1.s | 837 --------------- .../PsoPeepsGCEXP_internal_10x_ep2.s | 977 ------------------ .../PsoPeepsGCEXP_internal_5x_ep1.s | 837 --------------- .../PsoPeepsGCEXP_internal_5x_ep2.s | 977 ------------------ 15 files changed, 17 insertions(+), 3744 deletions(-) delete mode 100644 system/client-functions.disabled/PsoPeepsGCEXP_enabled.10x_weekend.s delete mode 100644 system/client-functions.disabled/PsoPeepsGCEXP_enabled.5x_week.s delete mode 100644 system/client-functions/PsoPeepsGCEXP_enabled.s delete mode 100644 system/client-functions/PsoPeepsGCEXP_internal_10x_ep1.s delete mode 100644 system/client-functions/PsoPeepsGCEXP_internal_10x_ep2.s delete mode 100644 system/client-functions/PsoPeepsGCEXP_internal_5x_ep1.s delete mode 100644 system/client-functions/PsoPeepsGCEXP_internal_5x_ep2.s diff --git a/src/Client.hh b/src/Client.hh index 2b4a453b..c91c5e96 100644 --- a/src/Client.hh +++ b/src/Client.hh @@ -148,8 +148,6 @@ public: // Basic state uint64_t enabled_flags = DEFAULT_FLAGS; // Client::Flag enum - std::string last_psopeeps_gc_exp_key; - void* last_psopeeps_gc_exp_lobby = nullptr; uint32_t specific_version = 0; uint8_t override_section_id = 0xFF; // FF = no override uint8_t override_lobby_event = 0xFF; // FF = no override diff --git a/src/ReceiveCommands.cc b/src/ReceiveCommands.cc index 82faa055..7328c6b1 100644 --- a/src/ReceiveCommands.cc +++ b/src/ReceiveCommands.cc @@ -34,66 +34,6 @@ const char* QUEST_BARRIER_DISCONNECT_HOOK_NAME = "quest_barrier"; const char* ADD_NEXT_CLIENT_DISCONNECT_HOOK_NAME = "add_next_game_client"; -static asio::awaitable dispatch_gc_v3_exp_patch_for_lobby(shared_ptr c, shared_ptr l) { - if (c->version() != Version::GC_V3) { - co_return; - } - if (!c->check_flag(Client::Flag::HAS_SEND_FUNCTION_CALL)) { - co_return; - } - if (!c->login || !c->login->account) { - co_return; - } - if (!c->login->account->auto_patches_enabled.count("PsoPeepsGCEXP_enabled")) { - co_return; - } - if (!l || !l->is_game()) { - co_return; - } - - const char* episode_str = nullptr; - switch (l->episode) { - case Episode::EP1: - episode_str = "ep1"; - break; - case Episode::EP2: - episode_str = "ep2"; - break; - default: - co_return; - } - - auto server_state = c->require_server_state(); - - string key = "PsoPeepsGCEXP_internal_"; - key += std::to_string(server_state->psopeeps_gc_exp_multiplier); - key += "x_"; - key += episode_str; - - void* lobby_token = l.get(); - if ((c->last_psopeeps_gc_exp_lobby == lobby_token) && - (c->last_psopeeps_gc_exp_key == key)) { - co_return; - } - - try { - co_await prepare_client_for_patches(c); - if (!c->channel->connected()) { - co_return; - } - - auto fn = server_state->client_functions->get(key, c->specific_version); - co_await send_function_call(c, fn); - - c->last_psopeeps_gc_exp_lobby = lobby_token; - c->last_psopeeps_gc_exp_key = key; - } catch (const out_of_range&) { - c->log.warning_f("GC V3 EXP dispatcher could not find client function {}", key); - } -} - - - static string bb_test_taint_filename(shared_ptr c) { return c->character_filename() + ".test-tainted"; } @@ -3215,16 +3155,15 @@ static asio::awaitable on_10_proxy_destinations(shared_ptr c, uint } } -static asio::awaitable on_10_game_menu(shared_ptr c, uint32_t item_id, const std::string& password) { +static void on_10_game_menu(shared_ptr c, uint32_t item_id, const std::string& password) { auto s = c->require_server_state(); auto game = s->find_lobby(item_id); if (!game) { send_lobby_message_box(c, "$C7You cannot join this\ngame because it no\nlonger exists."); - co_return; + return; } switch (game->join_error_for_client(c, &password)) { case Lobby::JoinError::ALLOWED: - co_await dispatch_gc_v3_exp_patch_for_lobby(c, game); if (!s->change_client_lobby(c, game)) { throw logic_error("client cannot join game after all preconditions satisfied"); } @@ -3539,7 +3478,7 @@ static asio::awaitable on_10(shared_ptr c, Channel::Message& msg) co_await on_10_proxy_destinations(c, base_cmd.item_id); break; case MenuID::GAME: - co_await on_10_game_menu(c, base_cmd.item_id, std::move(password)); + on_10_game_menu(c, base_cmd.item_id, std::move(password)); break; case MenuID::QUEST_CATEGORIES_EP1_EP3_EP4: case MenuID::QUEST_CATEGORIES_EP2: @@ -5352,7 +5291,6 @@ static asio::awaitable on_C1_PC(shared_ptr c, Channel::Message& ms } auto game = create_game_generic(s, c, cmd.name.decode(c->language()), cmd.password.decode(c->language()), Episode::EP1, mode, cmd.difficulty, true); if (game) { - co_await dispatch_gc_v3_exp_patch_for_lobby(c, game); s->change_client_lobby(c, game); c->set_flag(Client::Flag::LOADING); c->log.info_f("LOADING flag set"); @@ -5435,7 +5373,6 @@ static asio::awaitable on_0C_C1_E7_EC(shared_ptr c, Channel::Messa } if (game) { - co_await dispatch_gc_v3_exp_patch_for_lobby(c, game); s->change_client_lobby(c, game); c->set_flag(Client::Flag::LOADING); c->log.info_f("LOADING flag set"); @@ -5492,7 +5429,6 @@ static asio::awaitable on_C1_BB(shared_ptr c, Channel::Message& ms auto game = create_game_generic(s, c, cmd.name.decode(c->language()), cmd.password.decode(c->language()), episode, mode, cmd.difficulty); if (game) { - co_await dispatch_gc_v3_exp_patch_for_lobby(c, game); s->change_client_lobby(c, game); c->set_flag(Client::Flag::LOADING); c->log.info_f("LOADING flag set"); diff --git a/src/ServerState.cc b/src/ServerState.cc index 3b1e56db..b100feb3 100644 --- a/src/ServerState.cc +++ b/src/ServerState.cc @@ -883,10 +883,6 @@ void ServerState::load_config_early() { throw runtime_error("PsoPeepsDCV2EXPMultiplier must be 5 or 10"); } - this->psopeeps_gc_exp_multiplier = this->config_json->get_int("PsoPeepsGCEXPMultiplier", 5); - if ((this->psopeeps_gc_exp_multiplier != 5) && (this->psopeeps_gc_exp_multiplier != 10)) { - throw runtime_error("PsoPeepsGCEXPMultiplier must be 5 or 10"); - } this->ip_stack_debug = this->config_json->get_bool("IPStackDebug", false); this->allow_unregistered_users = this->config_json->get_bool("AllowUnregisteredUsers", false); diff --git a/src/ServerState.hh b/src/ServerState.hh index 980c27c6..b27f5a1a 100644 --- a/src/ServerState.hh +++ b/src/ServerState.hh @@ -124,7 +124,6 @@ struct ServerState : public std::enable_shared_from_this { uint64_t client_idle_timeout_usecs = 60000000; uint64_t patch_client_idle_timeout_usecs = 300000000; uint64_t psopeeps_dcv2_exp_multiplier = 5; - uint64_t psopeeps_gc_exp_multiplier = 5; bool is_debug = false; bool ip_stack_debug = false; bool allow_unregistered_users = false; diff --git a/system/client-functions.disabled/PsoPeepsGCEXP_enabled.10x_weekend.s b/system/client-functions.disabled/PsoPeepsGCEXP_enabled.10x_weekend.s deleted file mode 100644 index 348293e9..00000000 --- a/system/client-functions.disabled/PsoPeepsGCEXP_enabled.10x_weekend.s +++ /dev/null @@ -1,12 +0,0 @@ -.meta key="PsoPeepsGCEXP_enabled" -.meta name="10x XP" -.meta description="GameCube V3 XP boost — server dispatches the correct 10x EP1/EP2 payload when entering gameplay." -.meta visibility="menu" -.meta client_flag="0x0000200000000000" -.versions 3OE2 - -entry_ptr: -reloc0: - .offsetof start -start: - blr diff --git a/system/client-functions.disabled/PsoPeepsGCEXP_enabled.5x_week.s b/system/client-functions.disabled/PsoPeepsGCEXP_enabled.5x_week.s deleted file mode 100644 index 30b74e47..00000000 --- a/system/client-functions.disabled/PsoPeepsGCEXP_enabled.5x_week.s +++ /dev/null @@ -1,12 +0,0 @@ -.meta key="PsoPeepsGCEXP_enabled" -.meta name="5x XP" -.meta description="GameCube V3 XP boost — server dispatches the correct 5x EP1/EP2 payload when entering gameplay." -.meta visibility="menu" -.meta client_flag="0x0000200000000000" -.versions 3OE2 - -entry_ptr: -reloc0: - .offsetof start -start: - blr diff --git a/system/client-functions/PsoPeepsEP1EXP10x.s b/system/client-functions/PsoPeepsEP1EXP10x.s index add0b3a6..02d9499d 100644 --- a/system/client-functions/PsoPeepsEP1EXP10x.s +++ b/system/client-functions/PsoPeepsEP1EXP10x.s @@ -1,8 +1,10 @@ +.meta visibility="menu" .meta key="PsoPeepsEP1EXP10x" .meta name="EP1 10x" -.meta description="Sets EP1 enemy EXP\nto 10x for GC crossplay" +.meta description="Sets EP1 enemy EXP +to 10x for GC crossplay" -.versions 3OE2 3OJ5 +.versions 3OE2 entry_ptr: reloc0: diff --git a/system/client-functions/PsoPeepsEP1EXP5x.s b/system/client-functions/PsoPeepsEP1EXP5x.s index e367bd02..6fe15e70 100644 --- a/system/client-functions/PsoPeepsEP1EXP5x.s +++ b/system/client-functions/PsoPeepsEP1EXP5x.s @@ -1,8 +1,10 @@ +.meta visibility="menu" .meta key="PsoPeepsEP1EXP5x" .meta name="EP1 5x" -.meta description="Sets EP1 enemy EXP\nto 5x for GC crossplay" +.meta description="Sets EP1 enemy EXP +to 5x for GC crossplay" -.versions 3OE2 3OJ5 +.versions 3OE2 entry_ptr: reloc0: diff --git a/system/client-functions/PsoPeepsEP2EXP10xUS.s b/system/client-functions/PsoPeepsEP2EXP10xUS.s index 38c607c0..a2719c0a 100644 --- a/system/client-functions/PsoPeepsEP2EXP10xUS.s +++ b/system/client-functions/PsoPeepsEP2EXP10xUS.s @@ -1,6 +1,8 @@ +.meta visibility="menu" .meta key="PsoPeepsEP2EXP10xUS" .meta name="EP2 10x" -.meta description="Sets EP2 enemy EXP\nto 10x for GC crossplay" +.meta description="Sets EP2 enemy EXP +to 10x for GC crossplay" .versions 3OE2 diff --git a/system/client-functions/PsoPeepsEP2EXP5xUS.s b/system/client-functions/PsoPeepsEP2EXP5xUS.s index 26a941fb..4b4efb9d 100644 --- a/system/client-functions/PsoPeepsEP2EXP5xUS.s +++ b/system/client-functions/PsoPeepsEP2EXP5xUS.s @@ -1,6 +1,8 @@ +.meta visibility="menu" .meta key="PsoPeepsEP2EXP5xUS" .meta name="EP2 5x" -.meta description="Sets EP2 enemy EXP\nto 5x for GC crossplay" +.meta description="Sets EP2 enemy EXP +to 5x for GC crossplay" .versions 3OE2 diff --git a/system/client-functions/PsoPeepsGCEXP_enabled.s b/system/client-functions/PsoPeepsGCEXP_enabled.s deleted file mode 100644 index 30b74e47..00000000 --- a/system/client-functions/PsoPeepsGCEXP_enabled.s +++ /dev/null @@ -1,12 +0,0 @@ -.meta key="PsoPeepsGCEXP_enabled" -.meta name="5x XP" -.meta description="GameCube V3 XP boost — server dispatches the correct 5x EP1/EP2 payload when entering gameplay." -.meta visibility="menu" -.meta client_flag="0x0000200000000000" -.versions 3OE2 - -entry_ptr: -reloc0: - .offsetof start -start: - blr diff --git a/system/client-functions/PsoPeepsGCEXP_internal_10x_ep1.s b/system/client-functions/PsoPeepsGCEXP_internal_10x_ep1.s deleted file mode 100644 index 78a2f193..00000000 --- a/system/client-functions/PsoPeepsGCEXP_internal_10x_ep1.s +++ /dev/null @@ -1,837 +0,0 @@ -.meta key="PsoPeepsGCEXP_internal_10x_ep1" -.meta name="INTERNAL GC 10x EP1" -.meta description="Internal GC V3 EXP payload: INTERNAL GC 10x EP1. Server-dispatched; do not select manually." - -.versions 3OE2 - -entry_ptr: -reloc0: - .offsetof start - -start: - .include WriteCodeBlocks - - # PSO Peeps GC Plus USA / 3OE2 - # Source table: BattleParamEntry_on.dat - # Active online battle-param table loaded at 0x811AB7C0 - # EXP field offset within each 0x24-byte row is +0x1C - # Generated from clean BattleParamEntry_on.dat; multiplier=10x - - .data - .data 4 - .binary 0000000a - - .data - .data 4 - .binary 0000003c - - .data - .data 4 - .binary 00000032 - - .data - .data 4 - .binary 00000046 - - .data - .data 4 - .binary 00000064 - - .data - .data 4 - .binary 000005dc - - .data - .data 4 - .binary 000000fa - - .data - .data 4 - .binary 000000a0 - - .data - .data 4 - .binary 000000a0 - - .data - .data 4 - .binary 000000aa - - .data - .data 4 - .binary 00000122 - - .data - .data 4 - .binary 00000028 - - .data - .data 4 - .binary 00000028 - - .data - .data 4 - .binary 0000015e - - .data - .data 4 - .binary 0000015e - - .data - .data 4 - .binary 000022c4 - - .data - .data 4 - .binary 00000064 - - .data - .data 4 - .binary 00000064 - - .data - .data 4 - .binary 00000fa0 - - .data - .data 4 - .binary 00000118 - - .data - .data 4 - .binary 00000028 - - .data - .data 4 - .binary 000003e8 - - .data - .data 4 - .binary 00000096 - - .data - .data 4 - .binary 0000001e - - .data - .data 4 - .binary 000000b4 - - .data - .data 4 - .binary 000000dc - - .data - .data 4 - .binary 000000c8 - - .data - .data 4 - .binary 0000010e - - .data - .data 4 - .binary 0000003c - - .data - .data 4 - .binary 000030d4 - - .data - .data 4 - .binary 00000064 - - .data - .data 4 - .binary 0000003c - - .data - .data 4 - .binary 00000028 - - .data - .data 4 - .binary 00000028 - - .data - .data 4 - .binary 000005dc - - .data - .data 4 - .binary 00000032 - - .data - .data 4 - .binary 00007530 - - .data - .data 4 - .binary 00000032 - - .data - .data 4 - .binary 00000082 - - .data - .data 4 - .binary 000003e8 - - .data - .data 4 - .binary 00000032 - - .data - .data 4 - .binary 0000003c - - .data - .data 4 - .binary 00000046 - - .data - .data 4 - .binary 000000c8 - - .data - .data 4 - .binary 00000064 - - .data - .data 4 - .binary 00000078 - - .data - .data 4 - .binary 0000008c - - .data - .data 4 - .binary 0000012c - - .data - .data 4 - .binary 000000dc - - .data - .data 4 - .binary 000000f0 - - .data - .data 4 - .binary 00000104 - - .data - .data 4 - .binary 00000168 - - .data - .data 4 - .binary 000001ae - - .data - .data 4 - .binary 000001a4 - - .data - .data 4 - .binary 000001c2 - - .data - .data 4 - .binary 000001ea - - .data - .data 4 - .binary 00000a1e - - .data - .data 4 - .binary 000002bc - - .data - .data 4 - .binary 00000244 - - .data - .data 4 - .binary 00000244 - - .data - .data 4 - .binary 00000258 - - .data - .data 4 - .binary 0000030c - - .data - .data 4 - .binary 00000190 - - .data - .data 4 - .binary 00000190 - - .data - .data 4 - .binary 000003ca - - .data - .data 4 - .binary 00000348 - - .data - .data 4 - .binary 00007d00 - - .data - .data 4 - .binary 000000fa - - .data - .data 4 - .binary 00000028 - - .data - .data 4 - .binary 00005dc0 - - .data - .data 4 - .binary 000002ee - - .data - .data 4 - .binary 00000190 - - .data - .data 4 - .binary 00000730 - - .data - .data 4 - .binary 0000023a - - .data - .data 4 - .binary 0000006e - - .data - .data 4 - .binary 00000262 - - .data - .data 4 - .binary 0000029e - - .data - .data 4 - .binary 00000280 - - .data - .data 4 - .binary 00000302 - - .data - .data 4 - .binary 000001ae - - .data - .data 4 - .binary 00009470 - - .data - .data 4 - .binary 000001ea - - .data - .data 4 - .binary 00000104 - - .data - .data 4 - .binary 000000e6 - - .data - .data 4 - .binary 000000e6 - - .data - .data 4 - .binary 00000a1e - - .data - .data 4 - .binary 00000032 - - .data - .data 4 - .binary 00013880 - - .data - .data 4 - .binary 00000032 - - .data - .data 4 - .binary 00000230 - - .data - .data 4 - .binary 00000730 - - .data - .data 4 - .binary 000001a4 - - .data - .data 4 - .binary 000001ae - - .data - .data 4 - .binary 000001c2 - - .data - .data 4 - .binary 00000280 - - .data - .data 4 - .binary 000001ea - - .data - .data 4 - .binary 00000208 - - .data - .data 4 - .binary 00000226 - - .data - .data 4 - .binary 0000032a - - .data - .data 4 - .binary 0000029e - - .data - .data 4 - .binary 000002bc - - .data - .data 4 - .binary 000002da - - .data - .data 4 - .binary 00000334 - - .data - .data 4 - .binary 00000398 - - .data - .data 4 - .binary 00000384 - - .data - .data 4 - .binary 000003ac - - .data - .data 4 - .binary 000003e8 - - .data - .data 4 - .binary 00000ed8 - - .data - .data 4 - .binary 0000055a - - .data - .data 4 - .binary 00000460 - - .data - .data 4 - .binary 00000460 - - .data - .data 4 - .binary 00000474 - - .data - .data 4 - .binary 000005c8 - - .data - .data 4 - .binary 00000370 - - .data - .data 4 - .binary 00000370 - - .data - .data 4 - .binary 000005dc - - .data - .data 4 - .binary 000005a0 - - .data - .data 4 - .binary 000153d8 - - .data - .data 4 - .binary 0000012c - - .data - .data 4 - .binary 00000050 - - .data - .data 4 - .binary 000137b8 - - .data - .data 4 - .binary 00000596 - - .data - .data 4 - .binary 00000370 - - .data - .data 4 - .binary 00000af0 - - .data - .data 4 - .binary 000004b0 - - .data - .data 4 - .binary 000000dc - - .data - .data 4 - .binary 00000488 - - .data - .data 4 - .binary 000004d8 - - .data - .data 4 - .binary 000004b0 - - .data - .data 4 - .binary 00000500 - - .data - .data 4 - .binary 00000398 - - .data - .data 4 - .binary 0001b198 - - .data - .data 4 - .binary 000003e8 - - .data - .data 4 - .binary 00000208 - - .data - .data 4 - .binary 000001e0 - - .data - .data 4 - .binary 000001e0 - - .data - .data 4 - .binary 00000ed8 - - .data - .data 4 - .binary 0000005a - - .data - .data 4 - .binary 00027100 - - .data - .data 4 - .binary 0000005a - - .data - .data 4 - .binary 00000456 - - .data - .data 4 - .binary 00000af0 - - .data - .data 4 - .binary 00000384 - - .data - .data 4 - .binary 00000398 - - .data - .data 4 - .binary 000003ac - - .data - .data 4 - .binary 000004e2 - - .data - .data 4 - .binary 000003e8 - - .data - .data 4 - .binary 00000410 - - .data - .data 4 - .binary 00000438 - - .data - .data 4 - .binary 000005dc - - .data - .data 4 - .binary 000004d8 - - .data - .data 4 - .binary 00000500 - - .data - .data 4 - .binary 00000528 - - .data - .data 4 - .binary 000005aa - - .data - .data 4 - .binary 00000a8c - - .data - .data 4 - .binary 00000abe - - .data - .data 4 - .binary 00000af0 - - .data - .data 4 - .binary 00000b86 - - .data - .data 4 - .binary 00002328 - - .data - .data 4 - .binary 00000dac - - .data - .data 4 - .binary 00000c80 - - .data - .data 4 - .binary 00000c80 - - .data - .data 4 - .binary 00000cb2 - - .data - .data 4 - .binary 00000e2e - - .data - .data 4 - .binary 000003e8 - - .data - .data 4 - .binary 000003e8 - - .data - .data 4 - .binary 00000f0a - - .data - .data 4 - .binary 00000e88 - - .data - .data 4 - .binary 0002de60 - - .data - .data 4 - .binary 00000258 - - .data - .data 4 - .binary 000000a0 - - .data - .data 4 - .binary 00026d18 - - .data - .data 4 - .binary 00000d70 - - .data - .data 4 - .binary 00000a00 - - .data - .data 4 - .binary 00001b58 - - .data - .data 4 - .binary 00000c80 - - .data - .data 4 - .binary 0000024e - - .data - .data 4 - .binary 00000c8a - - .data - .data 4 - .binary 00000dde - - .data - .data 4 - .binary 00000d0c - - .data - .data 4 - .binary 00000d0c - - .data - .data 4 - .binary 00000aaa - - .data - .data 4 - .binary 000395f8 - - .data - .data 4 - .binary 00000b54 - - .data - .data 4 - .binary 0000079e - - .data - .data 4 - .binary 00000708 - - .data - .data 4 - .binary 00000708 - - .data - .data 4 - .binary 00002260 - - .data - .data 4 - .binary 000000fa - - .data - .data 4 - .binary 0007a120 - - .data - .data 4 - .binary 000000c8 - - .data - .data 4 - .binary 00000bb8 - - .data - .data 4 - .binary 00001af4 - - .data - .data 4 - .binary 00000a96 - - .data - .data 4 - .binary 00000ac8 - - .data - .data 4 - .binary 00000a78 - - .data - .data 4 - .binary 00000d02 - - .data - .data 4 - .binary 00000b86 - - .data - .data 4 - .binary 00000bd6 - - .data - .data 4 - .binary 00000c6c - - .data - .data 4 - .binary 00000ea6 - - .data - .data 4 - .binary 00000d3e - - .data - .data 4 - .binary 00000d7a - - .data - .data 4 - .binary 00000de8 - - .data 0 - .data 0 diff --git a/system/client-functions/PsoPeepsGCEXP_internal_10x_ep2.s b/system/client-functions/PsoPeepsGCEXP_internal_10x_ep2.s deleted file mode 100644 index 51043879..00000000 --- a/system/client-functions/PsoPeepsGCEXP_internal_10x_ep2.s +++ /dev/null @@ -1,977 +0,0 @@ -.meta key="PsoPeepsGCEXP_internal_10x_ep2" -.meta name="INTERNAL GC 10x EP2" -.meta description="Internal GC V3 EXP payload: INTERNAL GC 10x EP2. Server-dispatched; do not select manually." - -.versions 3OE2 - -entry_ptr: -reloc0: - .offsetof start - -start: - .include WriteCodeBlocks - - # PSO Peeps GC Plus USA / 3OE2 - # Source table: BattleParamEntry_lab_on.dat - # Active online battle-param table loaded at 0x811AB7C0 - # EXP field offset within each 0x24-byte row is +0x1C - # Generated from clean BattleParamEntry_lab_on.dat; multiplier=10x - - .data 0x811AB7DC - .data 4 - .binary 0000000a - - .data 0x811AB800 - .data 4 - .binary 0000003c - - .data 0x811AB824 - .data 4 - .binary 00000064 - - .data 0x811AB848 - .data 4 - .binary 00000078 - - .data 0x811AB86C - .data 4 - .binary 00000064 - - .data 0x811AB890 - .data 4 - .binary 000005dc - - .data 0x811AB8B4 - .data 4 - .binary 000000be - - .data 0x811AB8D8 - .data 4 - .binary 00000064 - - .data 0x811AB8FC - .data 4 - .binary 000000a0 - - .data 0x811AB920 - .data 4 - .binary 000000aa - - .data 0x811AB944 - .data 4 - .binary 000000aa - - .data 0x811AB968 - .data 4 - .binary 00000014 - - .data 0x811AB98C - .data 4 - .binary 00000014 - - .data 0x811AB9B0 - .data 4 - .binary 00000190 - - .data 0x811AB9D4 - .data 4 - .binary 00000096 - - .data 0x811AB9F8 - .data 4 - .binary 000012c0 - - .data 0x811ABA1C - .data 4 - .binary 00000064 - - .data 0x811ABA40 - .data 4 - .binary 0000001e - - .data 0x811ABA64 - .data 4 - .binary 0000251c - - .data 0x811ABA88 - .data 4 - .binary 000000d2 - - .data 0x811ABB3C - .data 4 - .binary 00000028 - - .data 0x811ABB60 - .data 4 - .binary 00000a00 - - .data 0x811ABB84 - .data 4 - .binary 000001fe - - .data 0x811ABBA8 - .data 4 - .binary 00000014 - - .data 0x811ABBCC - .data 4 - .binary 0000006e - - .data 0x811ABBF0 - .data 4 - .binary 000000be - - .data 0x811ABC14 - .data 4 - .binary 00003a98 - - .data 0x811ABCC8 - .data 4 - .binary 00000550 - - .data 0x811ABD10 - .data 4 - .binary 000001ea - - .data 0x811ABD34 - .data 4 - .binary 000001c2 - - .data 0x811ABE0C - .data 4 - .binary 000080e8 - - .data 0x811ABE9C - .data 4 - .binary 00000122 - - .data 0x811ABEC0 - .data 4 - .binary 0000001e - - .data 0x811ABEE4 - .data 4 - .binary 00000046 - - .data 0x811ABF08 - .data 4 - .binary 00000050 - - .data 0x811AC004 - .data 4 - .binary 000001d6 - - .data 0x811AC028 - .data 4 - .binary 00000078 - - .data 0x811AC04C - .data 4 - .binary 00000096 - - .data 0x811AC070 - .data 4 - .binary 00000208 - - .data 0x811AC0DC - .data 4 - .binary 0000012c - - .data 0x811AC100 - .data 4 - .binary 00000078 - - .data 0x811AC124 - .data 4 - .binary 00000014 - - .data 0x811AC148 - .data 4 - .binary 00000140 - - .data 0x811AC16C - .data 4 - .binary 00000190 - - .data 0x811AC190 - .data 4 - .binary 000001f4 - - .data 0x811AC1B4 - .data 4 - .binary 00000226 - - .data 0x811AC220 - .data 4 - .binary 00000064 - - .data 0x811AC244 - .data 4 - .binary 000003e8 - - .data 0x811AC268 - .data 4 - .binary 0000006e - - .data 0x811AC28C - .data 4 - .binary 00000082 - - .data 0x811AC2B0 - .data 4 - .binary 00000046 - - .data 0x811AC2D4 - .data 4 - .binary 00000078 - - .data 0x811AC2F8 - .data 4 - .binary 000000b4 - - .data 0x811AC31C - .data 4 - .binary 000000d2 - - .data 0x811AC340 - .data 4 - .binary 0000008c - - .data 0x811AC364 - .data 4 - .binary 00000096 - - .data 0x811AC388 - .data 4 - .binary 0000003c - - .data 0x811AC3AC - .data 4 - .binary 00000046 - - .data 0x811AC3D0 - .data 4 - .binary 00000050 - - .data 0x811AC55C - .data 4 - .binary 00000172 - - .data 0x811AC580 - .data 4 - .binary 000001c2 - - .data 0x811AC5A4 - .data 4 - .binary 00000208 - - .data 0x811AC5C8 - .data 4 - .binary 00000226 - - .data 0x811AC5EC - .data 4 - .binary 00000208 - - .data 0x811AC610 - .data 4 - .binary 00000b0e - - .data 0x811AC634 - .data 4 - .binary 00000294 - - .data 0x811AC658 - .data 4 - .binary 00000208 - - .data 0x811AC67C - .data 4 - .binary 00000244 - - .data 0x811AC6A0 - .data 4 - .binary 00000258 - - .data 0x811AC6C4 - .data 4 - .binary 00000276 - - .data 0x811AC6E8 - .data 4 - .binary 0000017c - - .data 0x811AC70C - .data 4 - .binary 0000017c - - .data 0x811AC730 - .data 4 - .binary 000003f2 - - .data 0x811AC754 - .data 4 - .binary 00000258 - - .data 0x811AC778 - .data 4 - .binary 00007d00 - - .data 0x811AC79C - .data 4 - .binary 000000fa - - .data 0x811AC7C0 - .data 4 - .binary 00000028 - - .data 0x811AC7E4 - .data 4 - .binary 00009858 - - .data 0x811AC808 - .data 4 - .binary 00000294 - - .data 0x811AC8BC - .data 4 - .binary 000001a4 - - .data 0x811AC8E0 - .data 4 - .binary 00001400 - - .data 0x811AC904 - .data 4 - .binary 000004a6 - - .data 0x811AC928 - .data 4 - .binary 00000064 - - .data 0x811AC94C - .data 4 - .binary 00000212 - - .data 0x811AC970 - .data 4 - .binary 00000294 - - .data 0x811AC994 - .data 4 - .binary 0000afc8 - - .data 0x811ACA48 - .data 4 - .binary 00000a1e - - .data 0x811ACA90 - .data 4 - .binary 00000488 - - .data 0x811ACAB4 - .data 4 - .binary 00000442 - - .data 0x811ACB8C - .data 4 - .binary 00012cc8 - - .data 0x811ACC1C - .data 4 - .binary 0000033e - - .data 0x811ACC40 - .data 4 - .binary 000001d6 - - .data 0x811ACC64 - .data 4 - .binary 000001d6 - - .data 0x811ACC88 - .data 4 - .binary 000001e0 - - .data 0x811ACD84 - .data 4 - .binary 0000046a - - .data 0x811ACDA8 - .data 4 - .binary 00000226 - - .data 0x811ACDCC - .data 4 - .binary 00000258 - - .data 0x811ACDF0 - .data 4 - .binary 000004ba - - .data 0x811ACE5C - .data 4 - .binary 00000352 - - .data 0x811ACE80 - .data 4 - .binary 00000226 - - .data 0x811ACEA4 - .data 4 - .binary 000001c2 - - .data 0x811ACEC8 - .data 4 - .binary 00000370 - - .data 0x811ACEEC - .data 4 - .binary 000003f2 - - .data 0x811ACF10 - .data 4 - .binary 0000049c - - .data 0x811ACF34 - .data 4 - .binary 000004ec - - .data 0x811ACF7C - .data 4 - .binary 00000032 - - .data 0x811ACFA0 - .data 4 - .binary 00000208 - - .data 0x811ACFC4 - .data 4 - .binary 000007d0 - - .data 0x811ACFE8 - .data 4 - .binary 00000212 - - .data 0x811AD00C - .data 4 - .binary 00000230 - - .data 0x811AD030 - .data 4 - .binary 000001c2 - - .data 0x811AD054 - .data 4 - .binary 00000226 - - .data 0x811AD078 - .data 4 - .binary 0000028a - - .data 0x811AD09C - .data 4 - .binary 000002bc - - .data 0x811AD0C0 - .data 4 - .binary 00000226 - - .data 0x811AD0E4 - .data 4 - .binary 00000258 - - .data 0x811AD108 - .data 4 - .binary 000001c2 - - .data 0x811AD12C - .data 4 - .binary 000001d6 - - .data 0x811AD150 - .data 4 - .binary 000001e0 - - .data 0x811AD2DC - .data 4 - .binary 00000366 - - .data 0x811AD300 - .data 4 - .binary 000003ca - - .data 0x811AD324 - .data 4 - .binary 0000041a - - .data 0x811AD348 - .data 4 - .binary 00000442 - - .data 0x811AD36C - .data 4 - .binary 0000041a - - .data 0x811AD390 - .data 4 - .binary 00000f0a - - .data 0x811AD3B4 - .data 4 - .binary 0000047e - - .data 0x811AD3D8 - .data 4 - .binary 0000041a - - .data 0x811AD3FC - .data 4 - .binary 00000460 - - .data 0x811AD420 - .data 4 - .binary 00000474 - - .data 0x811AD444 - .data 4 - .binary 000004a6 - - .data 0x811AD468 - .data 4 - .binary 0000037a - - .data 0x811AD48C - .data 4 - .binary 0000037a - - .data 0x811AD4B0 - .data 4 - .binary 00000672 - - .data 0x811AD4D4 - .data 4 - .binary 0000047e - - .data 0x811AD4F8 - .data 4 - .binary 000157c0 - - .data 0x811AD51C - .data 4 - .binary 00000258 - - .data 0x811AD540 - .data 4 - .binary 00000258 - - .data 0x811AD564 - .data 4 - .binary 000186a0 - - .data 0x811AD588 - .data 4 - .binary 000004ce - - .data 0x811AD63C - .data 4 - .binary 000003a2 - - .data 0x811AD660 - .data 4 - .binary 00001d88 - - .data 0x811AD684 - .data 4 - .binary 0000074e - - .data 0x811AD6A8 - .data 4 - .binary 0000012c - - .data 0x811AD6CC - .data 4 - .binary 0000042e - - .data 0x811AD6F0 - .data 4 - .binary 000004ce - - .data 0x811AD714 - .data 4 - .binary 0001e848 - - .data 0x811AD7C8 - .data 4 - .binary 00000df2 - - .data 0x811AD810 - .data 4 - .binary 00000726 - - .data 0x811AD834 - .data 4 - .binary 000006d6 - - .data 0x811AD90C - .data 4 - .binary 000249f0 - - .data 0x811AD99C - .data 4 - .binary 00000596 - - .data 0x811AD9C0 - .data 4 - .binary 0000038e - - .data 0x811AD9E4 - .data 4 - .binary 000003de - - .data 0x811ADA08 - .data 4 - .binary 000003f2 - - .data 0x811ADB04 - .data 4 - .binary 000006fe - - .data 0x811ADB28 - .data 4 - .binary 00000442 - - .data 0x811ADB4C - .data 4 - .binary 0000047e - - .data 0x811ADB70 - .data 4 - .binary 00000762 - - .data 0x811ADBDC - .data 4 - .binary 000005aa - - .data 0x811ADC00 - .data 4 - .binary 00000442 - - .data 0x811ADC24 - .data 4 - .binary 000003b6 - - .data 0x811ADC48 - .data 4 - .binary 000005d2 - - .data 0x811ADC6C - .data 4 - .binary 00000672 - - .data 0x811ADC90 - .data 4 - .binary 0000073a - - .data 0x811ADCB4 - .data 4 - .binary 0000079e - - .data 0x811ADCFC - .data 4 - .binary 00000032 - - .data 0x811ADD20 - .data 4 - .binary 0000041a - - .data 0x811ADD44 - .data 4 - .binary 00000b22 - - .data 0x811ADD68 - .data 4 - .binary 0000042e - - .data 0x811ADD8C - .data 4 - .binary 00000456 - - .data 0x811ADDB0 - .data 4 - .binary 000003ac - - .data 0x811ADDD4 - .data 4 - .binary 00000442 - - .data 0x811ADDF8 - .data 4 - .binary 000004ba - - .data 0x811ADE1C - .data 4 - .binary 000004f6 - - .data 0x811ADE40 - .data 4 - .binary 00000438 - - .data 0x811ADE64 - .data 4 - .binary 0000047e - - .data 0x811ADE88 - .data 4 - .binary 000003ca - - .data 0x811ADEAC - .data 4 - .binary 000003de - - .data 0x811ADED0 - .data 4 - .binary 000003f2 - - .data 0x811AE05C - .data 4 - .binary 000005dc - - .data 0x811AE080 - .data 4 - .binary 00000bf4 - - .data 0x811AE0A4 - .data 4 - .binary 00000ce4 - - .data 0x811AE0C8 - .data 4 - .binary 00000d5c - - .data 0x811AE0EC - .data 4 - .binary 00000ce4 - - .data 0x811AE110 - .data 4 - .binary 00002db4 - - .data 0x811AE134 - .data 4 - .binary 00000e10 - - .data 0x811AE158 - .data 4 - .binary 00000ce4 - - .data 0x811AE17C - .data 4 - .binary 00000be0 - - .data 0x811AE1A0 - .data 4 - .binary 00000c08 - - .data 0x811AE1C4 - .data 4 - .binary 00000e88 - - .data 0x811AE1E8 - .data 4 - .binary 000003e8 - - .data 0x811AE20C - .data 4 - .binary 000003e8 - - .data 0x811AE230 - .data 4 - .binary 000013ec - - .data 0x811AE254 - .data 4 - .binary 00000e10 - - .data 0x811AE278 - .data 4 - .binary 0002bf20 - - .data 0x811AE29C - .data 4 - .binary 00000258 - - .data 0x811AE2C0 - .data 4 - .binary 000000a0 - - .data 0x811AE2E4 - .data 4 - .binary 00033450 - - .data 0x811AE308 - .data 4 - .binary 00000f00 - - .data 0x811AE3BC - .data 4 - .binary 00000b7c - - .data 0x811AE3E0 - .data 4 - .binary 00002800 - - .data 0x811AE404 - .data 4 - .binary 00001680 - - .data 0x811AE428 - .data 4 - .binary 000001f4 - - .data 0x811AE44C - .data 4 - .binary 00000d20 - - .data 0x811AE470 - .data 4 - .binary 00000f00 - - .data 0x811AE494 - .data 4 - .binary 0003c4d8 - - .data 0x811AE548 - .data 4 - .binary 00002a6c - - .data 0x811AE590 - .data 4 - .binary 00001608 - - .data 0x811AE5B4 - .data 4 - .binary 00001518 - - .data 0x811AE68C - .data 4 - .binary 00073f78 - - .data 0x811AE71C - .data 4 - .binary 00001158 - - .data 0x811AE740 - .data 4 - .binary 00000c30 - - .data 0x811AE764 - .data 4 - .binary 00000c30 - - .data 0x811AE788 - .data 4 - .binary 00000c6c - - .data 0x811AE884 - .data 4 - .binary 00000d98 - - .data 0x811AE8A8 - .data 4 - .binary 00000d5c - - .data 0x811AE8CC - .data 4 - .binary 00000e10 - - .data 0x811AE8F0 - .data 4 - .binary 000016bc - - .data 0x811AE95C - .data 4 - .binary 00001194 - - .data 0x811AE980 - .data 4 - .binary 00000d5c - - .data 0x811AE9A4 - .data 4 - .binary 000007d0 - - .data 0x811AE9C8 - .data 4 - .binary 0000120c - - .data 0x811AE9EC - .data 4 - .binary 000013ec - - .data 0x811AEA10 - .data 4 - .binary 00001644 - - .data 0x811AEA34 - .data 4 - .binary 00001770 - - .data 0x811AEA7C - .data 4 - .binary 00000032 - - .data 0x811AEAA0 - .data 4 - .binary 00000ce4 - - .data 0x811AEAC4 - .data 4 - .binary 000021fc - - .data 0x811AEAE8 - .data 4 - .binary 00000d20 - - .data 0x811AEB0C - .data 4 - .binary 00000d98 - - .data 0x811AEB30 - .data 4 - .binary 00000a78 - - .data 0x811AEB54 - .data 4 - .binary 00000d5c - - .data 0x811AEB78 - .data 4 - .binary 00000ec4 - - .data 0x811AEB9C - .data 4 - .binary 00000f78 - - .data 0x811AEBC0 - .data 4 - .binary 00000b90 - - .data 0x811AEBE4 - .data 4 - .binary 00000e10 - - .data 0x811AEC08 - .data 4 - .binary 00000bf4 - - .data 0x811AEC2C - .data 4 - .binary 00000c30 - - .data 0x811AEC50 - .data 4 - .binary 00000c6c - - .data 0 - .data 0 diff --git a/system/client-functions/PsoPeepsGCEXP_internal_5x_ep1.s b/system/client-functions/PsoPeepsGCEXP_internal_5x_ep1.s deleted file mode 100644 index 9b69fd90..00000000 --- a/system/client-functions/PsoPeepsGCEXP_internal_5x_ep1.s +++ /dev/null @@ -1,837 +0,0 @@ -.meta key="PsoPeepsGCEXP_internal_5x_ep1" -.meta name="INTERNAL GC 5x EP1" -.meta description="Internal GC V3 EXP payload: INTERNAL GC 5x EP1. Server-dispatched; do not select manually." - -.versions 3OE2 - -entry_ptr: -reloc0: - .offsetof start - -start: - .include WriteCodeBlocks - - # PSO Peeps GC Plus USA / 3OE2 - # Source table: BattleParamEntry_on.dat - # Active online battle-param table loaded at 0x811AB7C0 - # EXP field offset within each 0x24-byte row is +0x1C - # Generated from clean BattleParamEntry_on.dat; multiplier=5x - - .data - .data 4 - .binary 00000005 - - .data - .data 4 - .binary 0000001e - - .data - .data 4 - .binary 00000019 - - .data - .data 4 - .binary 00000023 - - .data - .data 4 - .binary 00000032 - - .data - .data 4 - .binary 000002ee - - .data - .data 4 - .binary 0000007d - - .data - .data 4 - .binary 00000050 - - .data - .data 4 - .binary 00000050 - - .data - .data 4 - .binary 00000055 - - .data - .data 4 - .binary 00000091 - - .data - .data 4 - .binary 00000014 - - .data - .data 4 - .binary 00000014 - - .data - .data 4 - .binary 000000af - - .data - .data 4 - .binary 000000af - - .data - .data 4 - .binary 00001162 - - .data - .data 4 - .binary 00000032 - - .data - .data 4 - .binary 00000032 - - .data - .data 4 - .binary 000007d0 - - .data - .data 4 - .binary 0000008c - - .data - .data 4 - .binary 00000014 - - .data - .data 4 - .binary 000001f4 - - .data - .data 4 - .binary 0000004b - - .data - .data 4 - .binary 0000000f - - .data - .data 4 - .binary 0000005a - - .data - .data 4 - .binary 0000006e - - .data - .data 4 - .binary 00000064 - - .data - .data 4 - .binary 00000087 - - .data - .data 4 - .binary 0000001e - - .data - .data 4 - .binary 0000186a - - .data - .data 4 - .binary 00000032 - - .data - .data 4 - .binary 0000001e - - .data - .data 4 - .binary 00000014 - - .data - .data 4 - .binary 00000014 - - .data - .data 4 - .binary 000002ee - - .data - .data 4 - .binary 00000019 - - .data - .data 4 - .binary 00003a98 - - .data - .data 4 - .binary 00000019 - - .data - .data 4 - .binary 00000041 - - .data - .data 4 - .binary 000001f4 - - .data - .data 4 - .binary 00000019 - - .data - .data 4 - .binary 0000001e - - .data - .data 4 - .binary 00000023 - - .data - .data 4 - .binary 00000064 - - .data - .data 4 - .binary 00000032 - - .data - .data 4 - .binary 0000003c - - .data - .data 4 - .binary 00000046 - - .data - .data 4 - .binary 00000096 - - .data - .data 4 - .binary 0000006e - - .data - .data 4 - .binary 00000078 - - .data - .data 4 - .binary 00000082 - - .data - .data 4 - .binary 000000b4 - - .data - .data 4 - .binary 000000d7 - - .data - .data 4 - .binary 000000d2 - - .data - .data 4 - .binary 000000e1 - - .data - .data 4 - .binary 000000f5 - - .data - .data 4 - .binary 0000050f - - .data - .data 4 - .binary 0000015e - - .data - .data 4 - .binary 00000122 - - .data - .data 4 - .binary 00000122 - - .data - .data 4 - .binary 0000012c - - .data - .data 4 - .binary 00000186 - - .data - .data 4 - .binary 000000c8 - - .data - .data 4 - .binary 000000c8 - - .data - .data 4 - .binary 000001e5 - - .data - .data 4 - .binary 000001a4 - - .data - .data 4 - .binary 00003e80 - - .data - .data 4 - .binary 0000007d - - .data - .data 4 - .binary 00000014 - - .data - .data 4 - .binary 00002ee0 - - .data - .data 4 - .binary 00000177 - - .data - .data 4 - .binary 000000c8 - - .data - .data 4 - .binary 00000398 - - .data - .data 4 - .binary 0000011d - - .data - .data 4 - .binary 00000037 - - .data - .data 4 - .binary 00000131 - - .data - .data 4 - .binary 0000014f - - .data - .data 4 - .binary 00000140 - - .data - .data 4 - .binary 00000181 - - .data - .data 4 - .binary 000000d7 - - .data - .data 4 - .binary 00004a38 - - .data - .data 4 - .binary 000000f5 - - .data - .data 4 - .binary 00000082 - - .data - .data 4 - .binary 00000073 - - .data - .data 4 - .binary 00000073 - - .data - .data 4 - .binary 0000050f - - .data - .data 4 - .binary 00000019 - - .data - .data 4 - .binary 00009c40 - - .data - .data 4 - .binary 00000019 - - .data - .data 4 - .binary 00000118 - - .data - .data 4 - .binary 00000398 - - .data - .data 4 - .binary 000000d2 - - .data - .data 4 - .binary 000000d7 - - .data - .data 4 - .binary 000000e1 - - .data - .data 4 - .binary 00000140 - - .data - .data 4 - .binary 000000f5 - - .data - .data 4 - .binary 00000104 - - .data - .data 4 - .binary 00000113 - - .data - .data 4 - .binary 00000195 - - .data - .data 4 - .binary 0000014f - - .data - .data 4 - .binary 0000015e - - .data - .data 4 - .binary 0000016d - - .data - .data 4 - .binary 0000019a - - .data - .data 4 - .binary 000001cc - - .data - .data 4 - .binary 000001c2 - - .data - .data 4 - .binary 000001d6 - - .data - .data 4 - .binary 000001f4 - - .data - .data 4 - .binary 0000076c - - .data - .data 4 - .binary 000002ad - - .data - .data 4 - .binary 00000230 - - .data - .data 4 - .binary 00000230 - - .data - .data 4 - .binary 0000023a - - .data - .data 4 - .binary 000002e4 - - .data - .data 4 - .binary 000001b8 - - .data - .data 4 - .binary 000001b8 - - .data - .data 4 - .binary 000002ee - - .data - .data 4 - .binary 000002d0 - - .data - .data 4 - .binary 0000a9ec - - .data - .data 4 - .binary 00000096 - - .data - .data 4 - .binary 00000028 - - .data - .data 4 - .binary 00009bdc - - .data - .data 4 - .binary 000002cb - - .data - .data 4 - .binary 000001b8 - - .data - .data 4 - .binary 00000578 - - .data - .data 4 - .binary 00000258 - - .data - .data 4 - .binary 0000006e - - .data - .data 4 - .binary 00000244 - - .data - .data 4 - .binary 0000026c - - .data - .data 4 - .binary 00000258 - - .data - .data 4 - .binary 00000280 - - .data - .data 4 - .binary 000001cc - - .data - .data 4 - .binary 0000d8cc - - .data - .data 4 - .binary 000001f4 - - .data - .data 4 - .binary 00000104 - - .data - .data 4 - .binary 000000f0 - - .data - .data 4 - .binary 000000f0 - - .data - .data 4 - .binary 0000076c - - .data - .data 4 - .binary 0000002d - - .data - .data 4 - .binary 00013880 - - .data - .data 4 - .binary 0000002d - - .data - .data 4 - .binary 0000022b - - .data - .data 4 - .binary 00000578 - - .data - .data 4 - .binary 000001c2 - - .data - .data 4 - .binary 000001cc - - .data - .data 4 - .binary 000001d6 - - .data - .data 4 - .binary 00000271 - - .data - .data 4 - .binary 000001f4 - - .data - .data 4 - .binary 00000208 - - .data - .data 4 - .binary 0000021c - - .data - .data 4 - .binary 000002ee - - .data - .data 4 - .binary 0000026c - - .data - .data 4 - .binary 00000280 - - .data - .data 4 - .binary 00000294 - - .data - .data 4 - .binary 000002d5 - - .data - .data 4 - .binary 00000546 - - .data - .data 4 - .binary 0000055f - - .data - .data 4 - .binary 00000578 - - .data - .data 4 - .binary 000005c3 - - .data - .data 4 - .binary 00001194 - - .data - .data 4 - .binary 000006d6 - - .data - .data 4 - .binary 00000640 - - .data - .data 4 - .binary 00000640 - - .data - .data 4 - .binary 00000659 - - .data - .data 4 - .binary 00000717 - - .data - .data 4 - .binary 000001f4 - - .data - .data 4 - .binary 000001f4 - - .data - .data 4 - .binary 00000785 - - .data - .data 4 - .binary 00000744 - - .data - .data 4 - .binary 00016f30 - - .data - .data 4 - .binary 0000012c - - .data - .data 4 - .binary 00000050 - - .data - .data 4 - .binary 0001368c - - .data - .data 4 - .binary 000006b8 - - .data - .data 4 - .binary 00000500 - - .data - .data 4 - .binary 00000dac - - .data - .data 4 - .binary 00000640 - - .data - .data 4 - .binary 00000127 - - .data - .data 4 - .binary 00000645 - - .data - .data 4 - .binary 000006ef - - .data - .data 4 - .binary 00000686 - - .data - .data 4 - .binary 00000686 - - .data - .data 4 - .binary 00000555 - - .data - .data 4 - .binary 0001cafc - - .data - .data 4 - .binary 000005aa - - .data - .data 4 - .binary 000003cf - - .data - .data 4 - .binary 00000384 - - .data - .data 4 - .binary 00000384 - - .data - .data 4 - .binary 00001130 - - .data - .data 4 - .binary 0000007d - - .data - .data 4 - .binary 0003d090 - - .data - .data 4 - .binary 00000064 - - .data - .data 4 - .binary 000005dc - - .data - .data 4 - .binary 00000d7a - - .data - .data 4 - .binary 0000054b - - .data - .data 4 - .binary 00000564 - - .data - .data 4 - .binary 0000053c - - .data - .data 4 - .binary 00000681 - - .data - .data 4 - .binary 000005c3 - - .data - .data 4 - .binary 000005eb - - .data - .data 4 - .binary 00000636 - - .data - .data 4 - .binary 00000753 - - .data - .data 4 - .binary 0000069f - - .data - .data 4 - .binary 000006bd - - .data - .data 4 - .binary 000006f4 - - .data 0 - .data 0 diff --git a/system/client-functions/PsoPeepsGCEXP_internal_5x_ep2.s b/system/client-functions/PsoPeepsGCEXP_internal_5x_ep2.s deleted file mode 100644 index 917f6495..00000000 --- a/system/client-functions/PsoPeepsGCEXP_internal_5x_ep2.s +++ /dev/null @@ -1,977 +0,0 @@ -.meta key="PsoPeepsGCEXP_internal_5x_ep2" -.meta name="INTERNAL GC 5x EP2" -.meta description="Internal GC V3 EXP payload: INTERNAL GC 5x EP2. Server-dispatched; do not select manually." - -.versions 3OE2 - -entry_ptr: -reloc0: - .offsetof start - -start: - .include WriteCodeBlocks - - # PSO Peeps GC Plus USA / 3OE2 - # Source table: BattleParamEntry_lab_on.dat - # Active online battle-param table loaded at 0x811AB7C0 - # EXP field offset within each 0x24-byte row is +0x1C - # Generated from clean BattleParamEntry_lab_on.dat; multiplier=5x - - .data 0x811AB7DC - .data 4 - .binary 00000005 - - .data 0x811AB800 - .data 4 - .binary 0000001e - - .data 0x811AB824 - .data 4 - .binary 00000032 - - .data 0x811AB848 - .data 4 - .binary 0000003c - - .data 0x811AB86C - .data 4 - .binary 00000032 - - .data 0x811AB890 - .data 4 - .binary 000002ee - - .data 0x811AB8B4 - .data 4 - .binary 0000005f - - .data 0x811AB8D8 - .data 4 - .binary 00000032 - - .data 0x811AB8FC - .data 4 - .binary 00000050 - - .data 0x811AB920 - .data 4 - .binary 00000055 - - .data 0x811AB944 - .data 4 - .binary 00000055 - - .data 0x811AB968 - .data 4 - .binary 0000000a - - .data 0x811AB98C - .data 4 - .binary 0000000a - - .data 0x811AB9B0 - .data 4 - .binary 000000c8 - - .data 0x811AB9D4 - .data 4 - .binary 0000004b - - .data 0x811AB9F8 - .data 4 - .binary 00000960 - - .data 0x811ABA1C - .data 4 - .binary 00000032 - - .data 0x811ABA40 - .data 4 - .binary 0000000f - - .data 0x811ABA64 - .data 4 - .binary 0000128e - - .data 0x811ABA88 - .data 4 - .binary 00000069 - - .data 0x811ABB3C - .data 4 - .binary 00000014 - - .data 0x811ABB60 - .data 4 - .binary 00000500 - - .data 0x811ABB84 - .data 4 - .binary 000000ff - - .data 0x811ABBA8 - .data 4 - .binary 0000000a - - .data 0x811ABBCC - .data 4 - .binary 00000037 - - .data 0x811ABBF0 - .data 4 - .binary 0000005f - - .data 0x811ABC14 - .data 4 - .binary 00001d4c - - .data 0x811ABCC8 - .data 4 - .binary 000002a8 - - .data 0x811ABD10 - .data 4 - .binary 000000f5 - - .data 0x811ABD34 - .data 4 - .binary 000000e1 - - .data 0x811ABE0C - .data 4 - .binary 00004074 - - .data 0x811ABE9C - .data 4 - .binary 00000091 - - .data 0x811ABEC0 - .data 4 - .binary 0000000f - - .data 0x811ABEE4 - .data 4 - .binary 00000023 - - .data 0x811ABF08 - .data 4 - .binary 00000028 - - .data 0x811AC004 - .data 4 - .binary 000000eb - - .data 0x811AC028 - .data 4 - .binary 0000003c - - .data 0x811AC04C - .data 4 - .binary 0000004b - - .data 0x811AC070 - .data 4 - .binary 00000104 - - .data 0x811AC0DC - .data 4 - .binary 00000096 - - .data 0x811AC100 - .data 4 - .binary 0000003c - - .data 0x811AC124 - .data 4 - .binary 0000000a - - .data 0x811AC148 - .data 4 - .binary 000000a0 - - .data 0x811AC16C - .data 4 - .binary 000000c8 - - .data 0x811AC190 - .data 4 - .binary 000000fa - - .data 0x811AC1B4 - .data 4 - .binary 00000113 - - .data 0x811AC220 - .data 4 - .binary 00000032 - - .data 0x811AC244 - .data 4 - .binary 000001f4 - - .data 0x811AC268 - .data 4 - .binary 00000037 - - .data 0x811AC28C - .data 4 - .binary 00000041 - - .data 0x811AC2B0 - .data 4 - .binary 00000023 - - .data 0x811AC2D4 - .data 4 - .binary 0000003c - - .data 0x811AC2F8 - .data 4 - .binary 0000005a - - .data 0x811AC31C - .data 4 - .binary 00000069 - - .data 0x811AC340 - .data 4 - .binary 00000046 - - .data 0x811AC364 - .data 4 - .binary 0000004b - - .data 0x811AC388 - .data 4 - .binary 0000001e - - .data 0x811AC3AC - .data 4 - .binary 00000023 - - .data 0x811AC3D0 - .data 4 - .binary 00000028 - - .data 0x811AC55C - .data 4 - .binary 000000b9 - - .data 0x811AC580 - .data 4 - .binary 000000e1 - - .data 0x811AC5A4 - .data 4 - .binary 00000104 - - .data 0x811AC5C8 - .data 4 - .binary 00000113 - - .data 0x811AC5EC - .data 4 - .binary 00000104 - - .data 0x811AC610 - .data 4 - .binary 00000587 - - .data 0x811AC634 - .data 4 - .binary 0000014a - - .data 0x811AC658 - .data 4 - .binary 00000104 - - .data 0x811AC67C - .data 4 - .binary 00000122 - - .data 0x811AC6A0 - .data 4 - .binary 0000012c - - .data 0x811AC6C4 - .data 4 - .binary 0000013b - - .data 0x811AC6E8 - .data 4 - .binary 000000be - - .data 0x811AC70C - .data 4 - .binary 000000be - - .data 0x811AC730 - .data 4 - .binary 000001f9 - - .data 0x811AC754 - .data 4 - .binary 0000012c - - .data 0x811AC778 - .data 4 - .binary 00003e80 - - .data 0x811AC79C - .data 4 - .binary 0000007d - - .data 0x811AC7C0 - .data 4 - .binary 00000014 - - .data 0x811AC7E4 - .data 4 - .binary 00004c2c - - .data 0x811AC808 - .data 4 - .binary 0000014a - - .data 0x811AC8BC - .data 4 - .binary 000000d2 - - .data 0x811AC8E0 - .data 4 - .binary 00000a00 - - .data 0x811AC904 - .data 4 - .binary 00000253 - - .data 0x811AC928 - .data 4 - .binary 00000032 - - .data 0x811AC94C - .data 4 - .binary 00000109 - - .data 0x811AC970 - .data 4 - .binary 0000014a - - .data 0x811AC994 - .data 4 - .binary 000057e4 - - .data 0x811ACA48 - .data 4 - .binary 0000050f - - .data 0x811ACA90 - .data 4 - .binary 00000244 - - .data 0x811ACAB4 - .data 4 - .binary 00000221 - - .data 0x811ACB8C - .data 4 - .binary 00009664 - - .data 0x811ACC1C - .data 4 - .binary 0000019f - - .data 0x811ACC40 - .data 4 - .binary 000000eb - - .data 0x811ACC64 - .data 4 - .binary 000000eb - - .data 0x811ACC88 - .data 4 - .binary 000000f0 - - .data 0x811ACD84 - .data 4 - .binary 00000235 - - .data 0x811ACDA8 - .data 4 - .binary 00000113 - - .data 0x811ACDCC - .data 4 - .binary 0000012c - - .data 0x811ACDF0 - .data 4 - .binary 0000025d - - .data 0x811ACE5C - .data 4 - .binary 000001a9 - - .data 0x811ACE80 - .data 4 - .binary 00000113 - - .data 0x811ACEA4 - .data 4 - .binary 000000e1 - - .data 0x811ACEC8 - .data 4 - .binary 000001b8 - - .data 0x811ACEEC - .data 4 - .binary 000001f9 - - .data 0x811ACF10 - .data 4 - .binary 0000024e - - .data 0x811ACF34 - .data 4 - .binary 00000276 - - .data 0x811ACF7C - .data 4 - .binary 00000019 - - .data 0x811ACFA0 - .data 4 - .binary 00000104 - - .data 0x811ACFC4 - .data 4 - .binary 000003e8 - - .data 0x811ACFE8 - .data 4 - .binary 00000109 - - .data 0x811AD00C - .data 4 - .binary 00000118 - - .data 0x811AD030 - .data 4 - .binary 000000e1 - - .data 0x811AD054 - .data 4 - .binary 00000113 - - .data 0x811AD078 - .data 4 - .binary 00000145 - - .data 0x811AD09C - .data 4 - .binary 0000015e - - .data 0x811AD0C0 - .data 4 - .binary 00000113 - - .data 0x811AD0E4 - .data 4 - .binary 0000012c - - .data 0x811AD108 - .data 4 - .binary 000000e1 - - .data 0x811AD12C - .data 4 - .binary 000000eb - - .data 0x811AD150 - .data 4 - .binary 000000f0 - - .data 0x811AD2DC - .data 4 - .binary 000001b3 - - .data 0x811AD300 - .data 4 - .binary 000001e5 - - .data 0x811AD324 - .data 4 - .binary 0000020d - - .data 0x811AD348 - .data 4 - .binary 00000221 - - .data 0x811AD36C - .data 4 - .binary 0000020d - - .data 0x811AD390 - .data 4 - .binary 00000785 - - .data 0x811AD3B4 - .data 4 - .binary 0000023f - - .data 0x811AD3D8 - .data 4 - .binary 0000020d - - .data 0x811AD3FC - .data 4 - .binary 00000230 - - .data 0x811AD420 - .data 4 - .binary 0000023a - - .data 0x811AD444 - .data 4 - .binary 00000253 - - .data 0x811AD468 - .data 4 - .binary 000001bd - - .data 0x811AD48C - .data 4 - .binary 000001bd - - .data 0x811AD4B0 - .data 4 - .binary 00000339 - - .data 0x811AD4D4 - .data 4 - .binary 0000023f - - .data 0x811AD4F8 - .data 4 - .binary 0000abe0 - - .data 0x811AD51C - .data 4 - .binary 0000012c - - .data 0x811AD540 - .data 4 - .binary 0000012c - - .data 0x811AD564 - .data 4 - .binary 0000c350 - - .data 0x811AD588 - .data 4 - .binary 00000267 - - .data 0x811AD63C - .data 4 - .binary 000001d1 - - .data 0x811AD660 - .data 4 - .binary 00000ec4 - - .data 0x811AD684 - .data 4 - .binary 000003a7 - - .data 0x811AD6A8 - .data 4 - .binary 00000096 - - .data 0x811AD6CC - .data 4 - .binary 00000217 - - .data 0x811AD6F0 - .data 4 - .binary 00000267 - - .data 0x811AD714 - .data 4 - .binary 0000f424 - - .data 0x811AD7C8 - .data 4 - .binary 000006f9 - - .data 0x811AD810 - .data 4 - .binary 00000393 - - .data 0x811AD834 - .data 4 - .binary 0000036b - - .data 0x811AD90C - .data 4 - .binary 000124f8 - - .data 0x811AD99C - .data 4 - .binary 000002cb - - .data 0x811AD9C0 - .data 4 - .binary 000001c7 - - .data 0x811AD9E4 - .data 4 - .binary 000001ef - - .data 0x811ADA08 - .data 4 - .binary 000001f9 - - .data 0x811ADB04 - .data 4 - .binary 0000037f - - .data 0x811ADB28 - .data 4 - .binary 00000221 - - .data 0x811ADB4C - .data 4 - .binary 0000023f - - .data 0x811ADB70 - .data 4 - .binary 000003b1 - - .data 0x811ADBDC - .data 4 - .binary 000002d5 - - .data 0x811ADC00 - .data 4 - .binary 00000221 - - .data 0x811ADC24 - .data 4 - .binary 000001db - - .data 0x811ADC48 - .data 4 - .binary 000002e9 - - .data 0x811ADC6C - .data 4 - .binary 00000339 - - .data 0x811ADC90 - .data 4 - .binary 0000039d - - .data 0x811ADCB4 - .data 4 - .binary 000003cf - - .data 0x811ADCFC - .data 4 - .binary 00000019 - - .data 0x811ADD20 - .data 4 - .binary 0000020d - - .data 0x811ADD44 - .data 4 - .binary 00000591 - - .data 0x811ADD68 - .data 4 - .binary 00000217 - - .data 0x811ADD8C - .data 4 - .binary 0000022b - - .data 0x811ADDB0 - .data 4 - .binary 000001d6 - - .data 0x811ADDD4 - .data 4 - .binary 00000221 - - .data 0x811ADDF8 - .data 4 - .binary 0000025d - - .data 0x811ADE1C - .data 4 - .binary 0000027b - - .data 0x811ADE40 - .data 4 - .binary 0000021c - - .data 0x811ADE64 - .data 4 - .binary 0000023f - - .data 0x811ADE88 - .data 4 - .binary 000001e5 - - .data 0x811ADEAC - .data 4 - .binary 000001ef - - .data 0x811ADED0 - .data 4 - .binary 000001f9 - - .data 0x811AE05C - .data 4 - .binary 000002ee - - .data 0x811AE080 - .data 4 - .binary 000005fa - - .data 0x811AE0A4 - .data 4 - .binary 00000672 - - .data 0x811AE0C8 - .data 4 - .binary 000006ae - - .data 0x811AE0EC - .data 4 - .binary 00000672 - - .data 0x811AE110 - .data 4 - .binary 000016da - - .data 0x811AE134 - .data 4 - .binary 00000708 - - .data 0x811AE158 - .data 4 - .binary 00000672 - - .data 0x811AE17C - .data 4 - .binary 000005f0 - - .data 0x811AE1A0 - .data 4 - .binary 00000604 - - .data 0x811AE1C4 - .data 4 - .binary 00000744 - - .data 0x811AE1E8 - .data 4 - .binary 000001f4 - - .data 0x811AE20C - .data 4 - .binary 000001f4 - - .data 0x811AE230 - .data 4 - .binary 000009f6 - - .data 0x811AE254 - .data 4 - .binary 00000708 - - .data 0x811AE278 - .data 4 - .binary 00015f90 - - .data 0x811AE29C - .data 4 - .binary 0000012c - - .data 0x811AE2C0 - .data 4 - .binary 00000050 - - .data 0x811AE2E4 - .data 4 - .binary 00019a28 - - .data 0x811AE308 - .data 4 - .binary 00000780 - - .data 0x811AE3BC - .data 4 - .binary 000005be - - .data 0x811AE3E0 - .data 4 - .binary 00001400 - - .data 0x811AE404 - .data 4 - .binary 00000b40 - - .data 0x811AE428 - .data 4 - .binary 000000fa - - .data 0x811AE44C - .data 4 - .binary 00000690 - - .data 0x811AE470 - .data 4 - .binary 00000780 - - .data 0x811AE494 - .data 4 - .binary 0001e26c - - .data 0x811AE548 - .data 4 - .binary 00001536 - - .data 0x811AE590 - .data 4 - .binary 00000b04 - - .data 0x811AE5B4 - .data 4 - .binary 00000a8c - - .data 0x811AE68C - .data 4 - .binary 00039fbc - - .data 0x811AE71C - .data 4 - .binary 000008ac - - .data 0x811AE740 - .data 4 - .binary 00000618 - - .data 0x811AE764 - .data 4 - .binary 00000618 - - .data 0x811AE788 - .data 4 - .binary 00000636 - - .data 0x811AE884 - .data 4 - .binary 000006cc - - .data 0x811AE8A8 - .data 4 - .binary 000006ae - - .data 0x811AE8CC - .data 4 - .binary 00000708 - - .data 0x811AE8F0 - .data 4 - .binary 00000b5e - - .data 0x811AE95C - .data 4 - .binary 000008ca - - .data 0x811AE980 - .data 4 - .binary 000006ae - - .data 0x811AE9A4 - .data 4 - .binary 000003e8 - - .data 0x811AE9C8 - .data 4 - .binary 00000906 - - .data 0x811AE9EC - .data 4 - .binary 000009f6 - - .data 0x811AEA10 - .data 4 - .binary 00000b22 - - .data 0x811AEA34 - .data 4 - .binary 00000bb8 - - .data 0x811AEA7C - .data 4 - .binary 00000019 - - .data 0x811AEAA0 - .data 4 - .binary 00000672 - - .data 0x811AEAC4 - .data 4 - .binary 000010fe - - .data 0x811AEAE8 - .data 4 - .binary 00000690 - - .data 0x811AEB0C - .data 4 - .binary 000006cc - - .data 0x811AEB30 - .data 4 - .binary 0000053c - - .data 0x811AEB54 - .data 4 - .binary 000006ae - - .data 0x811AEB78 - .data 4 - .binary 00000762 - - .data 0x811AEB9C - .data 4 - .binary 000007bc - - .data 0x811AEBC0 - .data 4 - .binary 000005c8 - - .data 0x811AEBE4 - .data 4 - .binary 00000708 - - .data 0x811AEC08 - .data 4 - .binary 000005fa - - .data 0x811AEC2C - .data 4 - .binary 00000618 - - .data 0x811AEC50 - .data 4 - .binary 00000636 - - .data 0 - .data 0 From 9ff1934b2fffee2bb8933fe57e30442e47091fd2 Mon Sep 17 00:00:00 2001 From: James Osborne Date: Thu, 21 May 2026 04:11:17 -0400 Subject: [PATCH 10/15] Fix GC EXP patch metadata descriptions --- system/client-functions/PsoPeepsEP1EXP10x.s | 3 +-- system/client-functions/PsoPeepsEP1EXP5x.s | 3 +-- system/client-functions/PsoPeepsEP2EXP10xUS.s | 3 +-- system/client-functions/PsoPeepsEP2EXP5xUS.s | 3 +-- 4 files changed, 4 insertions(+), 8 deletions(-) diff --git a/system/client-functions/PsoPeepsEP1EXP10x.s b/system/client-functions/PsoPeepsEP1EXP10x.s index 02d9499d..b8dc3d4a 100644 --- a/system/client-functions/PsoPeepsEP1EXP10x.s +++ b/system/client-functions/PsoPeepsEP1EXP10x.s @@ -1,8 +1,7 @@ .meta visibility="menu" .meta key="PsoPeepsEP1EXP10x" .meta name="EP1 10x" -.meta description="Sets EP1 enemy EXP -to 10x for GC crossplay" +.meta description="Sets EP1 enemy EXP to 10x for GC crossplay" .versions 3OE2 diff --git a/system/client-functions/PsoPeepsEP1EXP5x.s b/system/client-functions/PsoPeepsEP1EXP5x.s index 6fe15e70..337ddd88 100644 --- a/system/client-functions/PsoPeepsEP1EXP5x.s +++ b/system/client-functions/PsoPeepsEP1EXP5x.s @@ -1,8 +1,7 @@ .meta visibility="menu" .meta key="PsoPeepsEP1EXP5x" .meta name="EP1 5x" -.meta description="Sets EP1 enemy EXP -to 5x for GC crossplay" +.meta description="Sets EP1 enemy EXP to 5x for GC crossplay" .versions 3OE2 diff --git a/system/client-functions/PsoPeepsEP2EXP10xUS.s b/system/client-functions/PsoPeepsEP2EXP10xUS.s index a2719c0a..4bf9f09d 100644 --- a/system/client-functions/PsoPeepsEP2EXP10xUS.s +++ b/system/client-functions/PsoPeepsEP2EXP10xUS.s @@ -1,8 +1,7 @@ .meta visibility="menu" .meta key="PsoPeepsEP2EXP10xUS" .meta name="EP2 10x" -.meta description="Sets EP2 enemy EXP -to 10x for GC crossplay" +.meta description="Sets EP2 enemy EXP to 10x for GC crossplay" .versions 3OE2 diff --git a/system/client-functions/PsoPeepsEP2EXP5xUS.s b/system/client-functions/PsoPeepsEP2EXP5xUS.s index 4b4efb9d..3dc7edab 100644 --- a/system/client-functions/PsoPeepsEP2EXP5xUS.s +++ b/system/client-functions/PsoPeepsEP2EXP5xUS.s @@ -1,8 +1,7 @@ .meta visibility="menu" .meta key="PsoPeepsEP2EXP5xUS" .meta name="EP2 5x" -.meta description="Sets EP2 enemy EXP -to 5x for GC crossplay" +.meta description="Sets EP2 enemy EXP to 5x for GC crossplay" .versions 3OE2 From 243098c98ce8cbf8371b36db183aa6592e2fd9cb Mon Sep 17 00:00:00 2001 From: James Osborne Date: Thu, 21 May 2026 04:40:23 -0400 Subject: [PATCH 11/15] Restore exact May 16 GC EXP patches --- system/client-functions/PsoPeepsEP1EXP10x.s | 4 ++-- system/client-functions/PsoPeepsEP1EXP5x.s | 4 ++-- system/client-functions/PsoPeepsEP2EXP10xUS.s | 2 +- system/client-functions/PsoPeepsEP2EXP5xUS.s | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/system/client-functions/PsoPeepsEP1EXP10x.s b/system/client-functions/PsoPeepsEP1EXP10x.s index b8dc3d4a..bd83b1be 100644 --- a/system/client-functions/PsoPeepsEP1EXP10x.s +++ b/system/client-functions/PsoPeepsEP1EXP10x.s @@ -1,9 +1,9 @@ .meta visibility="menu" .meta key="PsoPeepsEP1EXP10x" .meta name="EP1 10x" -.meta description="Sets EP1 enemy EXP to 10x for GC crossplay" +.meta description="Sets EP1 enemy EXP\nto 10x for GC crossplay" -.versions 3OE2 +.versions 3OE2 3OJ5 entry_ptr: reloc0: diff --git a/system/client-functions/PsoPeepsEP1EXP5x.s b/system/client-functions/PsoPeepsEP1EXP5x.s index 337ddd88..a7838c80 100644 --- a/system/client-functions/PsoPeepsEP1EXP5x.s +++ b/system/client-functions/PsoPeepsEP1EXP5x.s @@ -1,9 +1,9 @@ .meta visibility="menu" .meta key="PsoPeepsEP1EXP5x" .meta name="EP1 5x" -.meta description="Sets EP1 enemy EXP to 5x for GC crossplay" +.meta description="Sets EP1 enemy EXP\nto 5x for GC crossplay" -.versions 3OE2 +.versions 3OE2 3OJ5 entry_ptr: reloc0: diff --git a/system/client-functions/PsoPeepsEP2EXP10xUS.s b/system/client-functions/PsoPeepsEP2EXP10xUS.s index 4bf9f09d..c4676097 100644 --- a/system/client-functions/PsoPeepsEP2EXP10xUS.s +++ b/system/client-functions/PsoPeepsEP2EXP10xUS.s @@ -1,7 +1,7 @@ .meta visibility="menu" .meta key="PsoPeepsEP2EXP10xUS" .meta name="EP2 10x" -.meta description="Sets EP2 enemy EXP to 10x for GC crossplay" +.meta description="Sets EP2 enemy EXP\nto 10x for GC crossplay" .versions 3OE2 diff --git a/system/client-functions/PsoPeepsEP2EXP5xUS.s b/system/client-functions/PsoPeepsEP2EXP5xUS.s index 3dc7edab..23304369 100644 --- a/system/client-functions/PsoPeepsEP2EXP5xUS.s +++ b/system/client-functions/PsoPeepsEP2EXP5xUS.s @@ -1,7 +1,7 @@ .meta visibility="menu" .meta key="PsoPeepsEP2EXP5xUS" .meta name="EP2 5x" -.meta description="Sets EP2 enemy EXP to 5x for GC crossplay" +.meta description="Sets EP2 enemy EXP\nto 5x for GC crossplay" .versions 3OE2 From 6bb5bb84967052a30b4d08b614b1b6e86a10c7ec Mon Sep 17 00:00:00 2001 From: James Osborne Date: Thu, 21 May 2026 04:50:27 -0400 Subject: [PATCH 12/15] Resolve GC EXP patches to US-only addresses --- system/client-functions/PsoPeepsEP1EXP10x.s | 410 ++++++++++---------- system/client-functions/PsoPeepsEP1EXP5x.s | 410 ++++++++++---------- 2 files changed, 410 insertions(+), 410 deletions(-) diff --git a/system/client-functions/PsoPeepsEP1EXP10x.s b/system/client-functions/PsoPeepsEP1EXP10x.s index bd83b1be..56c334ec 100644 --- a/system/client-functions/PsoPeepsEP1EXP10x.s +++ b/system/client-functions/PsoPeepsEP1EXP10x.s @@ -3,7 +3,7 @@ .meta name="EP1 10x" .meta description="Sets EP1 enemy EXP\nto 10x for GC crossplay" -.versions 3OE2 3OJ5 +.versions 3OE2 entry_ptr: reloc0: @@ -18,819 +18,819 @@ start: # EXP field offset within each 0x24-byte row is +0x1C # Generated from clean BattleParamEntry_on.dat; multiplier=10x - .data + .data 0x811AB7DC .data 4 .binary 0000000a - .data + .data 0x811AB800 .data 4 .binary 0000003c - .data + .data 0x811AB824 .data 4 .binary 00000032 - .data + .data 0x811AB848 .data 4 .binary 00000046 - .data + .data 0x811AB86C .data 4 .binary 00000064 - .data + .data 0x811AB890 .data 4 .binary 000005dc - .data + .data 0x811AB8B4 .data 4 .binary 000000fa - .data + .data 0x811AB8D8 .data 4 .binary 000000a0 - .data + .data 0x811AB8FC .data 4 .binary 000000a0 - .data + .data 0x811AB920 .data 4 .binary 000000aa - .data + .data 0x811AB944 .data 4 .binary 00000122 - .data + .data 0x811AB968 .data 4 .binary 00000028 - .data + .data 0x811AB98C .data 4 .binary 00000028 - .data + .data 0x811AB9B0 .data 4 .binary 0000015e - .data + .data 0x811AB9D4 .data 4 .binary 0000015e - .data + .data 0x811AB9F8 .data 4 .binary 000022c4 - .data + .data 0x811ABA1C .data 4 .binary 00000064 - .data + .data 0x811ABA40 .data 4 .binary 00000064 - .data + .data 0x811ABA64 .data 4 .binary 00000fa0 - .data + .data 0x811ABA88 .data 4 .binary 00000118 - .data + .data 0x811ABB3C .data 4 .binary 00000028 - .data + .data 0x811ABB60 .data 4 .binary 000003e8 - .data + .data 0x811ABB84 .data 4 .binary 00000096 - .data + .data 0x811ABBA8 .data 4 .binary 0000001e - .data + .data 0x811ABBCC .data 4 .binary 000000b4 - .data + .data 0x811ABBF0 .data 4 .binary 000000dc - .data + .data 0x811ABC14 .data 4 .binary 000000c8 - .data + .data 0x811ABC38 .data 4 .binary 0000010e - .data + .data 0x811ABC5C .data 4 .binary 0000003c - .data + .data 0x811ABD10 .data 4 .binary 000030d4 - .data + .data 0x811ABE9C .data 4 .binary 00000064 - .data + .data 0x811ABEC0 .data 4 .binary 0000003c - .data + .data 0x811ABEE4 .data 4 .binary 00000028 - .data + .data 0x811ABF08 .data 4 .binary 00000028 - .data + .data 0x811ABF2C .data 4 .binary 000005dc - .data + .data 0x811ABF50 .data 4 .binary 00000032 - .data + .data 0x811ABF98 .data 4 .binary 00007530 - .data + .data 0x811ABFE0 .data 4 .binary 00000032 - .data + .data 0x811AC220 .data 4 .binary 00000082 - .data + .data 0x811AC244 .data 4 .binary 000003e8 - .data + .data 0x811AC268 .data 4 .binary 00000032 - .data + .data 0x811AC28C .data 4 .binary 0000003c - .data + .data 0x811AC2B0 .data 4 .binary 00000046 - .data + .data 0x811AC2D4 .data 4 .binary 000000c8 - .data + .data 0x811AC2F8 .data 4 .binary 00000064 - .data + .data 0x811AC31C .data 4 .binary 00000078 - .data + .data 0x811AC340 .data 4 .binary 0000008c - .data + .data 0x811AC364 .data 4 .binary 0000012c - .data + .data 0x811AC388 .data 4 .binary 000000dc - .data + .data 0x811AC3AC .data 4 .binary 000000f0 - .data + .data 0x811AC3D0 .data 4 .binary 00000104 - .data + .data 0x811AC55C .data 4 .binary 00000168 - .data + .data 0x811AC580 .data 4 .binary 000001ae - .data + .data 0x811AC5A4 .data 4 .binary 000001a4 - .data + .data 0x811AC5C8 .data 4 .binary 000001c2 - .data + .data 0x811AC5EC .data 4 .binary 000001ea - .data + .data 0x811AC610 .data 4 .binary 00000a1e - .data + .data 0x811AC634 .data 4 .binary 000002bc - .data + .data 0x811AC658 .data 4 .binary 00000244 - .data + .data 0x811AC67C .data 4 .binary 00000244 - .data + .data 0x811AC6A0 .data 4 .binary 00000258 - .data + .data 0x811AC6C4 .data 4 .binary 0000030c - .data + .data 0x811AC6E8 .data 4 .binary 00000190 - .data + .data 0x811AC70C .data 4 .binary 00000190 - .data + .data 0x811AC730 .data 4 .binary 000003ca - .data + .data 0x811AC754 .data 4 .binary 00000348 - .data + .data 0x811AC778 .data 4 .binary 00007d00 - .data + .data 0x811AC79C .data 4 .binary 000000fa - .data + .data 0x811AC7C0 .data 4 .binary 00000028 - .data + .data 0x811AC7E4 .data 4 .binary 00005dc0 - .data + .data 0x811AC808 .data 4 .binary 000002ee - .data + .data 0x811AC8BC .data 4 .binary 00000190 - .data + .data 0x811AC8E0 .data 4 .binary 00000730 - .data + .data 0x811AC904 .data 4 .binary 0000023a - .data + .data 0x811AC928 .data 4 .binary 0000006e - .data + .data 0x811AC94C .data 4 .binary 00000262 - .data + .data 0x811AC970 .data 4 .binary 0000029e - .data + .data 0x811AC994 .data 4 .binary 00000280 - .data + .data 0x811AC9B8 .data 4 .binary 00000302 - .data + .data 0x811AC9DC .data 4 .binary 000001ae - .data + .data 0x811ACA90 .data 4 .binary 00009470 - .data + .data 0x811ACC1C .data 4 .binary 000001ea - .data + .data 0x811ACC40 .data 4 .binary 00000104 - .data + .data 0x811ACC64 .data 4 .binary 000000e6 - .data + .data 0x811ACC88 .data 4 .binary 000000e6 - .data + .data 0x811ACCAC .data 4 .binary 00000a1e - .data + .data 0x811ACCD0 .data 4 .binary 00000032 - .data + .data 0x811ACD3C .data 4 .binary 00013880 - .data + .data 0x811ACD60 .data 4 .binary 00000032 - .data + .data 0x811ACFA0 .data 4 .binary 00000230 - .data + .data 0x811ACFC4 .data 4 .binary 00000730 - .data + .data 0x811ACFE8 .data 4 .binary 000001a4 - .data + .data 0x811AD00C .data 4 .binary 000001ae - .data + .data 0x811AD030 .data 4 .binary 000001c2 - .data + .data 0x811AD054 .data 4 .binary 00000280 - .data + .data 0x811AD078 .data 4 .binary 000001ea - .data + .data 0x811AD09C .data 4 .binary 00000208 - .data + .data 0x811AD0C0 .data 4 .binary 00000226 - .data + .data 0x811AD0E4 .data 4 .binary 0000032a - .data + .data 0x811AD108 .data 4 .binary 0000029e - .data + .data 0x811AD12C .data 4 .binary 000002bc - .data + .data 0x811AD150 .data 4 .binary 000002da - .data + .data 0x811AD2DC .data 4 .binary 00000334 - .data + .data 0x811AD300 .data 4 .binary 00000398 - .data + .data 0x811AD324 .data 4 .binary 00000384 - .data + .data 0x811AD348 .data 4 .binary 000003ac - .data + .data 0x811AD36C .data 4 .binary 000003e8 - .data + .data 0x811AD390 .data 4 .binary 00000ed8 - .data + .data 0x811AD3B4 .data 4 .binary 0000055a - .data + .data 0x811AD3D8 .data 4 .binary 00000460 - .data + .data 0x811AD3FC .data 4 .binary 00000460 - .data + .data 0x811AD420 .data 4 .binary 00000474 - .data + .data 0x811AD444 .data 4 .binary 000005c8 - .data + .data 0x811AD468 .data 4 .binary 00000370 - .data + .data 0x811AD48C .data 4 .binary 00000370 - .data + .data 0x811AD4B0 .data 4 .binary 000005dc - .data + .data 0x811AD4D4 .data 4 .binary 000005a0 - .data + .data 0x811AD4F8 .data 4 .binary 000153d8 - .data + .data 0x811AD51C .data 4 .binary 0000012c - .data + .data 0x811AD540 .data 4 .binary 00000050 - .data + .data 0x811AD564 .data 4 .binary 000137b8 - .data + .data 0x811AD588 .data 4 .binary 00000596 - .data + .data 0x811AD63C .data 4 .binary 00000370 - .data + .data 0x811AD660 .data 4 .binary 00000af0 - .data + .data 0x811AD684 .data 4 .binary 000004b0 - .data + .data 0x811AD6A8 .data 4 .binary 000000dc - .data + .data 0x811AD6CC .data 4 .binary 00000488 - .data + .data 0x811AD6F0 .data 4 .binary 000004d8 - .data + .data 0x811AD714 .data 4 .binary 000004b0 - .data + .data 0x811AD738 .data 4 .binary 00000500 - .data + .data 0x811AD75C .data 4 .binary 00000398 - .data + .data 0x811AD810 .data 4 .binary 0001b198 - .data + .data 0x811AD99C .data 4 .binary 000003e8 - .data + .data 0x811AD9C0 .data 4 .binary 00000208 - .data + .data 0x811AD9E4 .data 4 .binary 000001e0 - .data + .data 0x811ADA08 .data 4 .binary 000001e0 - .data + .data 0x811ADA2C .data 4 .binary 00000ed8 - .data + .data 0x811ADA50 .data 4 .binary 0000005a - .data + .data 0x811ADABC .data 4 .binary 00027100 - .data + .data 0x811ADAE0 .data 4 .binary 0000005a - .data + .data 0x811ADD20 .data 4 .binary 00000456 - .data + .data 0x811ADD44 .data 4 .binary 00000af0 - .data + .data 0x811ADD68 .data 4 .binary 00000384 - .data + .data 0x811ADD8C .data 4 .binary 00000398 - .data + .data 0x811ADDB0 .data 4 .binary 000003ac - .data + .data 0x811ADDD4 .data 4 .binary 000004e2 - .data + .data 0x811ADDF8 .data 4 .binary 000003e8 - .data + .data 0x811ADE1C .data 4 .binary 00000410 - .data + .data 0x811ADE40 .data 4 .binary 00000438 - .data + .data 0x811ADE64 .data 4 .binary 000005dc - .data + .data 0x811ADE88 .data 4 .binary 000004d8 - .data + .data 0x811ADEAC .data 4 .binary 00000500 - .data + .data 0x811ADED0 .data 4 .binary 00000528 - .data + .data 0x811AE05C .data 4 .binary 000005aa - .data + .data 0x811AE080 .data 4 .binary 00000a8c - .data + .data 0x811AE0A4 .data 4 .binary 00000abe - .data + .data 0x811AE0C8 .data 4 .binary 00000af0 - .data + .data 0x811AE0EC .data 4 .binary 00000b86 - .data + .data 0x811AE110 .data 4 .binary 00002328 - .data + .data 0x811AE134 .data 4 .binary 00000dac - .data + .data 0x811AE158 .data 4 .binary 00000c80 - .data + .data 0x811AE17C .data 4 .binary 00000c80 - .data + .data 0x811AE1A0 .data 4 .binary 00000cb2 - .data + .data 0x811AE1C4 .data 4 .binary 00000e2e - .data + .data 0x811AE1E8 .data 4 .binary 000003e8 - .data + .data 0x811AE20C .data 4 .binary 000003e8 - .data + .data 0x811AE230 .data 4 .binary 00000f0a - .data + .data 0x811AE254 .data 4 .binary 00000e88 - .data + .data 0x811AE278 .data 4 .binary 0002de60 - .data + .data 0x811AE29C .data 4 .binary 00000258 - .data + .data 0x811AE2C0 .data 4 .binary 000000a0 - .data + .data 0x811AE2E4 .data 4 .binary 00026d18 - .data + .data 0x811AE308 .data 4 .binary 00000d70 - .data + .data 0x811AE3BC .data 4 .binary 00000a00 - .data + .data 0x811AE3E0 .data 4 .binary 00001b58 - .data + .data 0x811AE404 .data 4 .binary 00000c80 - .data + .data 0x811AE428 .data 4 .binary 0000024e - .data + .data 0x811AE44C .data 4 .binary 00000c8a - .data + .data 0x811AE470 .data 4 .binary 00000dde - .data + .data 0x811AE494 .data 4 .binary 00000d0c - .data + .data 0x811AE4B8 .data 4 .binary 00000d0c - .data + .data 0x811AE4DC .data 4 .binary 00000aaa - .data + .data 0x811AE590 .data 4 .binary 000395f8 - .data + .data 0x811AE71C .data 4 .binary 00000b54 - .data + .data 0x811AE740 .data 4 .binary 0000079e - .data + .data 0x811AE764 .data 4 .binary 00000708 - .data + .data 0x811AE788 .data 4 .binary 00000708 - .data + .data 0x811AE7AC .data 4 .binary 00002260 - .data + .data 0x811AE7D0 .data 4 .binary 000000fa - .data + .data 0x811AE83C .data 4 .binary 0007a120 - .data + .data 0x811AE860 .data 4 .binary 000000c8 - .data + .data 0x811AEAA0 .data 4 .binary 00000bb8 - .data + .data 0x811AEAC4 .data 4 .binary 00001af4 - .data + .data 0x811AEAE8 .data 4 .binary 00000a96 - .data + .data 0x811AEB0C .data 4 .binary 00000ac8 - .data + .data 0x811AEB30 .data 4 .binary 00000a78 - .data + .data 0x811AEB54 .data 4 .binary 00000d02 - .data + .data 0x811AEB78 .data 4 .binary 00000b86 - .data + .data 0x811AEB9C .data 4 .binary 00000bd6 - .data + .data 0x811AEBC0 .data 4 .binary 00000c6c - .data + .data 0x811AEBE4 .data 4 .binary 00000ea6 - .data + .data 0x811AEC08 .data 4 .binary 00000d3e - .data + .data 0x811AEC2C .data 4 .binary 00000d7a - .data + .data 0x811AEC50 .data 4 .binary 00000de8 diff --git a/system/client-functions/PsoPeepsEP1EXP5x.s b/system/client-functions/PsoPeepsEP1EXP5x.s index a7838c80..7b0c83f2 100644 --- a/system/client-functions/PsoPeepsEP1EXP5x.s +++ b/system/client-functions/PsoPeepsEP1EXP5x.s @@ -3,7 +3,7 @@ .meta name="EP1 5x" .meta description="Sets EP1 enemy EXP\nto 5x for GC crossplay" -.versions 3OE2 3OJ5 +.versions 3OE2 entry_ptr: reloc0: @@ -18,819 +18,819 @@ start: # EXP field offset within each 0x24-byte row is +0x1C # Generated from clean BattleParamEntry_on.dat; multiplier=5x - .data + .data 0x811AB7DC .data 4 .binary 00000005 - .data + .data 0x811AB800 .data 4 .binary 0000001e - .data + .data 0x811AB824 .data 4 .binary 00000019 - .data + .data 0x811AB848 .data 4 .binary 00000023 - .data + .data 0x811AB86C .data 4 .binary 00000032 - .data + .data 0x811AB890 .data 4 .binary 000002ee - .data + .data 0x811AB8B4 .data 4 .binary 0000007d - .data + .data 0x811AB8D8 .data 4 .binary 00000050 - .data + .data 0x811AB8FC .data 4 .binary 00000050 - .data + .data 0x811AB920 .data 4 .binary 00000055 - .data + .data 0x811AB944 .data 4 .binary 00000091 - .data + .data 0x811AB968 .data 4 .binary 00000014 - .data + .data 0x811AB98C .data 4 .binary 00000014 - .data + .data 0x811AB9B0 .data 4 .binary 000000af - .data + .data 0x811AB9D4 .data 4 .binary 000000af - .data + .data 0x811AB9F8 .data 4 .binary 00001162 - .data + .data 0x811ABA1C .data 4 .binary 00000032 - .data + .data 0x811ABA40 .data 4 .binary 00000032 - .data + .data 0x811ABA64 .data 4 .binary 000007d0 - .data + .data 0x811ABA88 .data 4 .binary 0000008c - .data + .data 0x811ABB3C .data 4 .binary 00000014 - .data + .data 0x811ABB60 .data 4 .binary 000001f4 - .data + .data 0x811ABB84 .data 4 .binary 0000004b - .data + .data 0x811ABBA8 .data 4 .binary 0000000f - .data + .data 0x811ABBCC .data 4 .binary 0000005a - .data + .data 0x811ABBF0 .data 4 .binary 0000006e - .data + .data 0x811ABC14 .data 4 .binary 00000064 - .data + .data 0x811ABC38 .data 4 .binary 00000087 - .data + .data 0x811ABC5C .data 4 .binary 0000001e - .data + .data 0x811ABD10 .data 4 .binary 0000186a - .data + .data 0x811ABE9C .data 4 .binary 00000032 - .data + .data 0x811ABEC0 .data 4 .binary 0000001e - .data + .data 0x811ABEE4 .data 4 .binary 00000014 - .data + .data 0x811ABF08 .data 4 .binary 00000014 - .data + .data 0x811ABF2C .data 4 .binary 000002ee - .data + .data 0x811ABF50 .data 4 .binary 00000019 - .data + .data 0x811ABF98 .data 4 .binary 00003a98 - .data + .data 0x811ABFE0 .data 4 .binary 00000019 - .data + .data 0x811AC220 .data 4 .binary 00000041 - .data + .data 0x811AC244 .data 4 .binary 000001f4 - .data + .data 0x811AC268 .data 4 .binary 00000019 - .data + .data 0x811AC28C .data 4 .binary 0000001e - .data + .data 0x811AC2B0 .data 4 .binary 00000023 - .data + .data 0x811AC2D4 .data 4 .binary 00000064 - .data + .data 0x811AC2F8 .data 4 .binary 00000032 - .data + .data 0x811AC31C .data 4 .binary 0000003c - .data + .data 0x811AC340 .data 4 .binary 00000046 - .data + .data 0x811AC364 .data 4 .binary 00000096 - .data + .data 0x811AC388 .data 4 .binary 0000006e - .data + .data 0x811AC3AC .data 4 .binary 00000078 - .data + .data 0x811AC3D0 .data 4 .binary 00000082 - .data + .data 0x811AC55C .data 4 .binary 000000b4 - .data + .data 0x811AC580 .data 4 .binary 000000d7 - .data + .data 0x811AC5A4 .data 4 .binary 000000d2 - .data + .data 0x811AC5C8 .data 4 .binary 000000e1 - .data + .data 0x811AC5EC .data 4 .binary 000000f5 - .data + .data 0x811AC610 .data 4 .binary 0000050f - .data + .data 0x811AC634 .data 4 .binary 0000015e - .data + .data 0x811AC658 .data 4 .binary 00000122 - .data + .data 0x811AC67C .data 4 .binary 00000122 - .data + .data 0x811AC6A0 .data 4 .binary 0000012c - .data + .data 0x811AC6C4 .data 4 .binary 00000186 - .data + .data 0x811AC6E8 .data 4 .binary 000000c8 - .data + .data 0x811AC70C .data 4 .binary 000000c8 - .data + .data 0x811AC730 .data 4 .binary 000001e5 - .data + .data 0x811AC754 .data 4 .binary 000001a4 - .data + .data 0x811AC778 .data 4 .binary 00003e80 - .data + .data 0x811AC79C .data 4 .binary 0000007d - .data + .data 0x811AC7C0 .data 4 .binary 00000014 - .data + .data 0x811AC7E4 .data 4 .binary 00002ee0 - .data + .data 0x811AC808 .data 4 .binary 00000177 - .data + .data 0x811AC8BC .data 4 .binary 000000c8 - .data + .data 0x811AC8E0 .data 4 .binary 00000398 - .data + .data 0x811AC904 .data 4 .binary 0000011d - .data + .data 0x811AC928 .data 4 .binary 00000037 - .data + .data 0x811AC94C .data 4 .binary 00000131 - .data + .data 0x811AC970 .data 4 .binary 0000014f - .data + .data 0x811AC994 .data 4 .binary 00000140 - .data + .data 0x811AC9B8 .data 4 .binary 00000181 - .data + .data 0x811AC9DC .data 4 .binary 000000d7 - .data + .data 0x811ACA90 .data 4 .binary 00004a38 - .data + .data 0x811ACC1C .data 4 .binary 000000f5 - .data + .data 0x811ACC40 .data 4 .binary 00000082 - .data + .data 0x811ACC64 .data 4 .binary 00000073 - .data + .data 0x811ACC88 .data 4 .binary 00000073 - .data + .data 0x811ACCAC .data 4 .binary 0000050f - .data + .data 0x811ACCD0 .data 4 .binary 00000019 - .data + .data 0x811ACD3C .data 4 .binary 00009c40 - .data + .data 0x811ACD60 .data 4 .binary 00000019 - .data + .data 0x811ACFA0 .data 4 .binary 00000118 - .data + .data 0x811ACFC4 .data 4 .binary 00000398 - .data + .data 0x811ACFE8 .data 4 .binary 000000d2 - .data + .data 0x811AD00C .data 4 .binary 000000d7 - .data + .data 0x811AD030 .data 4 .binary 000000e1 - .data + .data 0x811AD054 .data 4 .binary 00000140 - .data + .data 0x811AD078 .data 4 .binary 000000f5 - .data + .data 0x811AD09C .data 4 .binary 00000104 - .data + .data 0x811AD0C0 .data 4 .binary 00000113 - .data + .data 0x811AD0E4 .data 4 .binary 00000195 - .data + .data 0x811AD108 .data 4 .binary 0000014f - .data + .data 0x811AD12C .data 4 .binary 0000015e - .data + .data 0x811AD150 .data 4 .binary 0000016d - .data + .data 0x811AD2DC .data 4 .binary 0000019a - .data + .data 0x811AD300 .data 4 .binary 000001cc - .data + .data 0x811AD324 .data 4 .binary 000001c2 - .data + .data 0x811AD348 .data 4 .binary 000001d6 - .data + .data 0x811AD36C .data 4 .binary 000001f4 - .data + .data 0x811AD390 .data 4 .binary 0000076c - .data + .data 0x811AD3B4 .data 4 .binary 000002ad - .data + .data 0x811AD3D8 .data 4 .binary 00000230 - .data + .data 0x811AD3FC .data 4 .binary 00000230 - .data + .data 0x811AD420 .data 4 .binary 0000023a - .data + .data 0x811AD444 .data 4 .binary 000002e4 - .data + .data 0x811AD468 .data 4 .binary 000001b8 - .data + .data 0x811AD48C .data 4 .binary 000001b8 - .data + .data 0x811AD4B0 .data 4 .binary 000002ee - .data + .data 0x811AD4D4 .data 4 .binary 000002d0 - .data + .data 0x811AD4F8 .data 4 .binary 0000a9ec - .data + .data 0x811AD51C .data 4 .binary 00000096 - .data + .data 0x811AD540 .data 4 .binary 00000028 - .data + .data 0x811AD564 .data 4 .binary 00009bdc - .data + .data 0x811AD588 .data 4 .binary 000002cb - .data + .data 0x811AD63C .data 4 .binary 000001b8 - .data + .data 0x811AD660 .data 4 .binary 00000578 - .data + .data 0x811AD684 .data 4 .binary 00000258 - .data + .data 0x811AD6A8 .data 4 .binary 0000006e - .data + .data 0x811AD6CC .data 4 .binary 00000244 - .data + .data 0x811AD6F0 .data 4 .binary 0000026c - .data + .data 0x811AD714 .data 4 .binary 00000258 - .data + .data 0x811AD738 .data 4 .binary 00000280 - .data + .data 0x811AD75C .data 4 .binary 000001cc - .data + .data 0x811AD810 .data 4 .binary 0000d8cc - .data + .data 0x811AD99C .data 4 .binary 000001f4 - .data + .data 0x811AD9C0 .data 4 .binary 00000104 - .data + .data 0x811AD9E4 .data 4 .binary 000000f0 - .data + .data 0x811ADA08 .data 4 .binary 000000f0 - .data + .data 0x811ADA2C .data 4 .binary 0000076c - .data + .data 0x811ADA50 .data 4 .binary 0000002d - .data + .data 0x811ADABC .data 4 .binary 00013880 - .data + .data 0x811ADAE0 .data 4 .binary 0000002d - .data + .data 0x811ADD20 .data 4 .binary 0000022b - .data + .data 0x811ADD44 .data 4 .binary 00000578 - .data + .data 0x811ADD68 .data 4 .binary 000001c2 - .data + .data 0x811ADD8C .data 4 .binary 000001cc - .data + .data 0x811ADDB0 .data 4 .binary 000001d6 - .data + .data 0x811ADDD4 .data 4 .binary 00000271 - .data + .data 0x811ADDF8 .data 4 .binary 000001f4 - .data + .data 0x811ADE1C .data 4 .binary 00000208 - .data + .data 0x811ADE40 .data 4 .binary 0000021c - .data + .data 0x811ADE64 .data 4 .binary 000002ee - .data + .data 0x811ADE88 .data 4 .binary 0000026c - .data + .data 0x811ADEAC .data 4 .binary 00000280 - .data + .data 0x811ADED0 .data 4 .binary 00000294 - .data + .data 0x811AE05C .data 4 .binary 000002d5 - .data + .data 0x811AE080 .data 4 .binary 00000546 - .data + .data 0x811AE0A4 .data 4 .binary 0000055f - .data + .data 0x811AE0C8 .data 4 .binary 00000578 - .data + .data 0x811AE0EC .data 4 .binary 000005c3 - .data + .data 0x811AE110 .data 4 .binary 00001194 - .data + .data 0x811AE134 .data 4 .binary 000006d6 - .data + .data 0x811AE158 .data 4 .binary 00000640 - .data + .data 0x811AE17C .data 4 .binary 00000640 - .data + .data 0x811AE1A0 .data 4 .binary 00000659 - .data + .data 0x811AE1C4 .data 4 .binary 00000717 - .data + .data 0x811AE1E8 .data 4 .binary 000001f4 - .data + .data 0x811AE20C .data 4 .binary 000001f4 - .data + .data 0x811AE230 .data 4 .binary 00000785 - .data + .data 0x811AE254 .data 4 .binary 00000744 - .data + .data 0x811AE278 .data 4 .binary 00016f30 - .data + .data 0x811AE29C .data 4 .binary 0000012c - .data + .data 0x811AE2C0 .data 4 .binary 00000050 - .data + .data 0x811AE2E4 .data 4 .binary 0001368c - .data + .data 0x811AE308 .data 4 .binary 000006b8 - .data + .data 0x811AE3BC .data 4 .binary 00000500 - .data + .data 0x811AE3E0 .data 4 .binary 00000dac - .data + .data 0x811AE404 .data 4 .binary 00000640 - .data + .data 0x811AE428 .data 4 .binary 00000127 - .data + .data 0x811AE44C .data 4 .binary 00000645 - .data + .data 0x811AE470 .data 4 .binary 000006ef - .data + .data 0x811AE494 .data 4 .binary 00000686 - .data + .data 0x811AE4B8 .data 4 .binary 00000686 - .data + .data 0x811AE4DC .data 4 .binary 00000555 - .data + .data 0x811AE590 .data 4 .binary 0001cafc - .data + .data 0x811AE71C .data 4 .binary 000005aa - .data + .data 0x811AE740 .data 4 .binary 000003cf - .data + .data 0x811AE764 .data 4 .binary 00000384 - .data + .data 0x811AE788 .data 4 .binary 00000384 - .data + .data 0x811AE7AC .data 4 .binary 00001130 - .data + .data 0x811AE7D0 .data 4 .binary 0000007d - .data + .data 0x811AE83C .data 4 .binary 0003d090 - .data + .data 0x811AE860 .data 4 .binary 00000064 - .data + .data 0x811AEAA0 .data 4 .binary 000005dc - .data + .data 0x811AEAC4 .data 4 .binary 00000d7a - .data + .data 0x811AEAE8 .data 4 .binary 0000054b - .data + .data 0x811AEB0C .data 4 .binary 00000564 - .data + .data 0x811AEB30 .data 4 .binary 0000053c - .data + .data 0x811AEB54 .data 4 .binary 00000681 - .data + .data 0x811AEB78 .data 4 .binary 000005c3 - .data + .data 0x811AEB9C .data 4 .binary 000005eb - .data + .data 0x811AEBC0 .data 4 .binary 00000636 - .data + .data 0x811AEBE4 .data 4 .binary 00000753 - .data + .data 0x811AEC08 .data 4 .binary 0000069f - .data + .data 0x811AEC2C .data 4 .binary 000006bd - .data + .data 0x811AEC50 .data 4 .binary 000006f4 From 57f3e1e5f21830985d88b340279c0bf8e807f7dc Mon Sep 17 00:00:00 2001 From: James Osborne Date: Fri, 22 May 2026 21:49:38 -0400 Subject: [PATCH 13/15] Lock BB test characters to test ship --- src/ReceiveCommands.cc | 82 ++++++++++++++++++++++-------------------- src/ServerState.cc | 1 + src/ServerState.hh | 1 + 3 files changed, 45 insertions(+), 39 deletions(-) diff --git a/src/ReceiveCommands.cc b/src/ReceiveCommands.cc index 7328c6b1..72f30602 100644 --- a/src/ReceiveCommands.cc +++ b/src/ReceiveCommands.cc @@ -34,12 +34,8 @@ const char* QUEST_BARRIER_DISCONNECT_HOOK_NAME = "quest_barrier"; const char* ADD_NEXT_CLIENT_DISCONNECT_HOOK_NAME = "add_next_game_client"; -static string bb_test_taint_filename(shared_ptr c) { - return c->character_filename() + ".test-tainted"; -} - -static string bb_test_taint_grandfather_filename(shared_ptr c) { - return c->character_filename() + ".grandfathered-before-test-taint"; +static string bb_test_filename(shared_ptr c) { + return c->character_filename() + ".test"; } static bool file_exists_for_bb_taint(const string& filename) { @@ -47,28 +43,44 @@ static bool file_exists_for_bb_taint(const string& filename) { return f.good(); } -static bool bb_character_is_test_tainted(shared_ptr c) { - return file_exists_for_bb_taint(bb_test_taint_filename(c)); +static bool bb_character_is_test(shared_ptr c) { + return file_exists_for_bb_taint(bb_test_filename(c)); } -static bool bb_character_is_test_taint_grandfathered(shared_ptr c) { - return file_exists_for_bb_taint(bb_test_taint_grandfather_filename(c)); -} - -static bool mark_bb_character_test_tainted(shared_ptr c) { - string filename = bb_test_taint_filename(c); +static bool mark_bb_character_test(shared_ptr c) { + string filename = bb_test_filename(c); ofstream f(filename, ios::out | ios::trunc); if (!f.good()) { return false; } - f << "status=test-tainted\n"; - f << "reason=entered-test-ship\n"; - f << "account_id=" << c->login->account->account_id << "\n"; + uint32_t account_id = 0; + if (c->login && c->login->account) { + account_id = c->login->account->account_id; + } + + f << "status=test\n"; + f << "reason=created-on-test-ship\n"; + f << "account_id=" << account_id << "\n"; f << "character_file=" << c->character_filename() << "\n"; return f.good(); } +static bool enforce_bb_test_ship_lock(shared_ptr c, bool current_ship_is_test) { + if (current_ship_is_test) { + if (!bb_character_is_test(c)) { + send_message_box(c, "$C6Only Test characters can enter Test.\n\n$C7Create a new character on the Test ship."); + return false; + } + } else { + if (bb_character_is_test(c)) { + send_message_box(c, "$C6This BB character is locked to Test.\n\n$C7Test characters cannot enter public ships."); + return false; + } + } + + return true; +} static string bb_hardcore_filename(shared_ptr c) { return c->character_filename() + ".hardcore"; @@ -127,9 +139,7 @@ static bool enforce_bb_hardcore_ship_lock(shared_ptr c, bool current_shi } if (current_ship_is_hardcore) { - if (bb_character_is_hardcore_ineligible(c) || - bb_character_is_test_tainted(c) || - bb_character_is_test_taint_grandfathered(c)) { + if (bb_character_is_hardcore_ineligible(c)) { if (!bb_character_is_hardcore_ineligible(c)) { mark_bb_character_hardcore_ineligible(c); } @@ -2851,14 +2861,6 @@ static asio::awaitable on_10_main_menu(shared_ptr c, uint32_t item break; } - // PSO Peeps alpha test: entering Test taints only non-grandfathered BB characters. - // Existing characters were grandfathered before this feature was enabled. - if (!bb_character_is_test_taint_grandfathered(c)) { - if (!mark_bb_character_test_tainted(c)) { - send_message_box(c, "$C6Could not mark this character for Test access.\n\n$C7Please report this."); - break; - } - } send_reconnect(c, s->connect_address_for_client(c), 19345); break; @@ -2880,13 +2882,6 @@ static asio::awaitable on_10_main_menu(shared_ptr c, uint32_t item break; } - // PSO Peeps dev/test isolation: entering Dev taints only non-grandfathered BB characters. - if (!bb_character_is_test_taint_grandfathered(c)) { - if (!mark_bb_character_test_tainted(c)) { - send_message_box(c, "$C6Could not mark this character for Dev access.\n\n$C7Please report this."); - break; - } - } send_reconnect(c, s->connect_address_for_client(c), 19445); break; @@ -2908,8 +2903,8 @@ static asio::awaitable on_10_main_menu(shared_ptr c, uint32_t item break; } - if (bb_character_is_test_tainted(c)) { - send_message_box(c, "$C6This character has been used outside of Vanilla and cannot enter Vanilla.\n\n$C7Use Live/Test with this character, or create a fresh Vanilla character."); + if (bb_character_is_test(c)) { + send_message_box(c, "$C6This BB character is locked to Test.\n\n$C7Test characters cannot enter public ships."); c->channel->disconnect(); break; } @@ -2937,8 +2932,7 @@ static asio::awaitable on_10_main_menu(shared_ptr c, uint32_t item } if (bb_character_is_hardcore_ineligible(c) || - bb_character_is_test_tainted(c) || - bb_character_is_test_taint_grandfathered(c)) { + bb_character_is_test(c)) { if (!bb_character_is_hardcore_ineligible(c)) { mark_bb_character_hardcore_ineligible(c); } @@ -4165,6 +4159,10 @@ static asio::awaitable on_E3_BB(shared_ptr c, Channel::Message& ms c->bb_bank_character_index = cmd.character_index; auto s = c->require_server_state(); + if (!enforce_bb_test_ship_lock(c, s->enable_test_mode)) { + c->unload_character(false); + co_return; + } if (!enforce_bb_hardcore_ship_lock(c, s->enable_hardcore_mode)) { c->unload_character(false); co_return; @@ -4417,6 +4415,12 @@ static asio::awaitable on_E5_BB(shared_ptr c, Channel::Message& ms try { auto s = c->require_server_state(); c->create_character_file(c->login->account->account_id, c->language(), cmd.preview, s->level_table(c->version())); + if (s->enable_test_mode) { + if (!mark_bb_character_test(c)) { + throw runtime_error("could not mark new character as Test"); + } + c->log.info_f("Marked BB character as Test: {}", c->character_filename()); + } } catch (const exception& e) { send_message_box(c, std::format("$C6New character could not be created:\n{}", e.what())); should_send_approve = false; diff --git a/src/ServerState.cc b/src/ServerState.cc index b100feb3..6c5c1868 100644 --- a/src/ServerState.cc +++ b/src/ServerState.cc @@ -957,6 +957,7 @@ void ServerState::load_config_early() { this->enable_bb_ship_selection_menu = this->config_json->get_bool("EnableBBShipSelectionMenu", false); this->enable_blueballz = this->config_json->get_bool("EnableBlueballz", false); this->enable_hardcore_mode = this->config_json->get_bool("EnableHardcoreMode", false); + this->enable_test_mode = this->config_json->get_bool("EnableTestMode", false); this->blueballz_max_tier = std::min(10, std::max(0, this->config_json->get_int("BlueballzMaxTier", 10))); this->blueballz_unlocked_tier_v2 = std::min( this->blueballz_max_tier, diff --git a/src/ServerState.hh b/src/ServerState.hh index b27f5a1a..5c300b44 100644 --- a/src/ServerState.hh +++ b/src/ServerState.hh @@ -178,6 +178,7 @@ struct ServerState : public std::enable_shared_from_this { bool enable_blueballz = false; int64_t blueballz_enemy_hp_scale_tier = -1; // -1 = disabled; 0..10 = scale BB enemy HP in stream files bool enable_hardcore_mode = false; + bool enable_test_mode = false; int8_t blueballz_max_tier = 10; int8_t blueballz_unlocked_tier_v2 = 0; int8_t blueballz_unlocked_tier_v3 = 0; From ab245d1b70f31a7d58ba7c5d17171fe4d185c069 Mon Sep 17 00:00:00 2001 From: James Osborne Date: Fri, 22 May 2026 22:11:38 -0400 Subject: [PATCH 14/15] Lock BB test characters to test ship and hide ship transfers --- src/ReceiveCommands.cc | 37 ------------------------------------- 1 file changed, 37 deletions(-) diff --git a/src/ReceiveCommands.cc b/src/ReceiveCommands.cc index 72f30602..ef4f111d 100644 --- a/src/ReceiveCommands.cc +++ b/src/ReceiveCommands.cc @@ -246,8 +246,6 @@ static void send_main_menu(shared_ptr c) { ((c->version() == Version::BB_V4) || (c->version() == Version::BB_PATCH)); bool bb_frontdoor_ship_menu = s->enable_bb_ship_selection_menu && is_bb_ship_menu_client; bool bb_destination_transport_menu = !s->enable_bb_ship_selection_menu && is_bb_ship_menu_client; - bool show_bb_live_test_menu_items = bb_frontdoor_ship_menu || bb_destination_transport_menu; - bool show_bb_restricted_ship_menu_items = bb_frontdoor_ship_menu; uint32_t go_to_lobby_menu_item_flags = (s->proxy_destinations_dc.empty() ? 0 : MenuItem::Flag::INVISIBLE_ON_DC) | @@ -313,43 +311,8 @@ static void send_main_menu(shared_ptr c) { // pre-lobby page and the lobby counter Transport list. Keep the frontdoor // as the full ship selector, but only expose safe transport choices on // destination ships. - uint32_t bb_live_test_menu_item_flags = - show_bb_live_test_menu_items - ? MenuItem::Flag::BB_ONLY - : (MenuItem::Flag::INVISIBLE_ON_DC | - MenuItem::Flag::INVISIBLE_ON_PC | - MenuItem::Flag::INVISIBLE_ON_GC | - MenuItem::Flag::INVISIBLE_ON_XB | - MenuItem::Flag::INVISIBLE_ON_BB); - uint32_t bb_restricted_ship_menu_item_flags = - show_bb_restricted_ship_menu_items - ? MenuItem::Flag::BB_ONLY - : (MenuItem::Flag::INVISIBLE_ON_DC | - MenuItem::Flag::INVISIBLE_ON_PC | - MenuItem::Flag::INVISIBLE_ON_GC | - MenuItem::Flag::INVISIBLE_ON_XB | - MenuItem::Flag::INVISIBLE_ON_BB); - main_menu->items.emplace_back(MainMenuItemID::BB_LIVE_SHIP, "PSO-Peeps Live", - "Join the live\nPSO-Peeps ship", bb_live_test_menu_item_flags); - main_menu->items.emplace_back(MainMenuItemID::BB_TEST_SHIP, "Test Ship", - "Join the test\nconfiguration ship", bb_live_test_menu_item_flags); - main_menu->items.emplace_back(MainMenuItemID::BB_DEV_SHIP, "Dev Ship", - "Join the dev\nexperimental ship", bb_restricted_ship_menu_item_flags); - main_menu->items.emplace_back(MainMenuItemID::BB_VANILLA_SHIP, "Vanilla Ship", - "Join the vanilla\ndefault-settings ship", bb_restricted_ship_menu_item_flags); - main_menu->items.emplace_back(MainMenuItemID::BB_HARDCORE_SHIP, "Hardcore Ship", - "Join the hardcore\npermadeath ship", bb_restricted_ship_menu_item_flags); - - uint32_t proxy_destinations_menu_item_flags = - (s->proxy_destinations_dc.empty() ? MenuItem::Flag::INVISIBLE_ON_DC : 0) | - (s->proxy_destinations_pc.empty() ? MenuItem::Flag::INVISIBLE_ON_PC : 0) | - (s->proxy_destinations_gc.empty() ? MenuItem::Flag::INVISIBLE_ON_GC : 0) | - (s->proxy_destinations_xb.empty() ? MenuItem::Flag::INVISIBLE_ON_XB : 0) | - MenuItem::Flag::INVISIBLE_ON_BB; - main_menu->items.emplace_back(MainMenuItemID::PROXY_DESTINATIONS, "Select ship", - "Choose Live,\nVanilla, or Test", proxy_destinations_menu_item_flags); main_menu->items.emplace_back(MainMenuItemID::DOWNLOAD_QUESTS, "Download quests", "Download quests", MenuItem::Flag::INVISIBLE_ON_DC_PROTOS | MenuItem::Flag::INVISIBLE_ON_PC_NTE | MenuItem::Flag::INVISIBLE_ON_BB); From 6910c90fe6e3675f96ef5ae1d56b661d475055ae Mon Sep 17 00:00:00 2001 From: James Osborne Date: Fri, 22 May 2026 22:20:48 -0400 Subject: [PATCH 15/15] Lock BB test characters to test ship --- src/ReceiveCommands.cc | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/ReceiveCommands.cc b/src/ReceiveCommands.cc index ef4f111d..129808f3 100644 --- a/src/ReceiveCommands.cc +++ b/src/ReceiveCommands.cc @@ -2,6 +2,7 @@ #include #include +#include #include #include @@ -66,6 +67,29 @@ static bool mark_bb_character_test(shared_ptr c) { return f.good(); } +static void clear_bb_ship_state_markers_for_recreated_character(shared_ptr c) { + const string base_filename = c->character_filename(); + const vector suffixes = { + ".hardcore", + ".hardcore-dead", + ".hardcore-ineligible", + ".test", + ".test-tainted", + ".grandfathered-before-test-taint", + }; + + for (const auto& suffix : suffixes) { + const string filename = base_filename + suffix; + if (file_exists_for_bb_taint(filename)) { + if (::unlink(filename.c_str()) == 0) { + c->log.info_f("Removed stale BB ship-state marker for recreated character: {}", filename); + } else { + c->log.warning_f("Failed to remove stale BB ship-state marker for recreated character: {}", filename); + } + } + } +} + static bool enforce_bb_test_ship_lock(shared_ptr c, bool current_ship_is_test) { if (current_ship_is_test) { if (!bb_character_is_test(c)) { @@ -4377,6 +4401,7 @@ static asio::awaitable on_E5_BB(shared_ptr c, Channel::Message& ms } else { try { auto s = c->require_server_state(); + clear_bb_ship_state_markers_for_recreated_character(c); c->create_character_file(c->login->account->account_id, c->language(), cmd.preview, s->level_table(c->version())); if (s->enable_test_mode) { if (!mark_bb_character_test(c)) {