add Ep3 proxy option for infinite time

This commit is contained in:
Martin Michelsen
2023-10-09 18:51:19 -07:00
parent 9da756cc14
commit d39f1eb74c
5 changed files with 41 additions and 15 deletions
+1
View File
@@ -38,6 +38,7 @@ ClientOptions::ClientOptions()
suppress_remote_login(false), suppress_remote_login(false),
zero_remote_guild_card(false), zero_remote_guild_card(false),
ep3_infinite_meseta(false), ep3_infinite_meseta(false),
ep3_infinite_time(false),
red_name(false), red_name(false),
blank_name(false), blank_name(false),
function_call_return_value(-1) {} function_call_return_value(-1) {}
+1
View File
@@ -43,6 +43,7 @@ struct ClientOptions {
bool suppress_remote_login; bool suppress_remote_login;
bool zero_remote_guild_card; bool zero_remote_guild_card;
bool ep3_infinite_meseta; bool ep3_infinite_meseta;
bool ep3_infinite_time;
bool red_name; bool red_name;
bool blank_name; bool blank_name;
int64_t function_call_return_value; // -1 = don't block function calls int64_t function_call_return_value; // -1 = don't block function calls
+16 -15
View File
@@ -58,21 +58,22 @@ constexpr uint32_t GO_BACK = 0x99FFFF99;
namespace ProxyOptionsMenuItemID { namespace ProxyOptionsMenuItemID {
constexpr uint32_t GO_BACK = 0xAAFFFFAA; constexpr uint32_t GO_BACK = 0xAAFFFFAA;
constexpr uint32_t CHAT_COMMANDS = 0xAA0000AA; constexpr uint32_t CHAT_COMMANDS = 0xAA0101AA;
constexpr uint32_t CHAT_FILTER = 0xAA1111AA; constexpr uint32_t CHAT_FILTER = 0xAA0202AA;
constexpr uint32_t PLAYER_NOTIFICATIONS = 0xAA2222AA; constexpr uint32_t PLAYER_NOTIFICATIONS = 0xAA0303AA;
constexpr uint32_t BLOCK_PINGS = 0xAA3333AA; constexpr uint32_t BLOCK_PINGS = 0xAA0404AA;
constexpr uint32_t INFINITE_HP = 0xAA4444AA; constexpr uint32_t INFINITE_HP = 0xAA0505AA;
constexpr uint32_t INFINITE_TP = 0xAA5555AA; constexpr uint32_t INFINITE_TP = 0xAA0606AA;
constexpr uint32_t SWITCH_ASSIST = 0xAA6666AA; constexpr uint32_t SWITCH_ASSIST = 0xAA0707AA;
constexpr uint32_t BLOCK_EVENTS = 0xAA7777AA; constexpr uint32_t BLOCK_EVENTS = 0xAA0808AA;
constexpr uint32_t BLOCK_PATCHES = 0xAA8888AA; constexpr uint32_t BLOCK_PATCHES = 0xAA0909AA;
constexpr uint32_t SAVE_FILES = 0xAA9999AA; constexpr uint32_t SAVE_FILES = 0xAA0A0AAA;
constexpr uint32_t RED_NAME = 0xAAAAAAAA; constexpr uint32_t RED_NAME = 0xAA0B0BAA;
constexpr uint32_t BLANK_NAME = 0xAABBBBAA; constexpr uint32_t BLANK_NAME = 0xAA0C0CAA;
constexpr uint32_t SUPPRESS_LOGIN = 0xAACCCCAA; constexpr uint32_t SUPPRESS_LOGIN = 0xAA0D0DAA;
constexpr uint32_t SKIP_CARD = 0xAADDDDAA; constexpr uint32_t SKIP_CARD = 0xAA0E0EAA;
constexpr uint32_t EP3_INFINITE_MESETA = 0xAAEEEEAA; constexpr uint32_t EP3_INFINITE_MESETA = 0xAA0F0FAA;
constexpr uint32_t EP3_INFINITE_TIME = 0xAA1010AA;
} // namespace ProxyOptionsMenuItemID } // namespace ProxyOptionsMenuItemID
struct MenuItem { struct MenuItem {
+18
View File
@@ -916,6 +916,24 @@ static HandlerResult S_6x(shared_ptr<ProxyServer::LinkedSession> ses, uint16_t,
set_mask_for_ep3_game_command(data.data(), data.size(), 0); set_mask_for_ep3_game_command(data.data(), data.size(), 0);
modified = true; modified = true;
} }
if (ses->options.ep3_infinite_time && (header.subcommand == 0xB4)) {
if (header.subsubcommand == 0x3D) {
auto& cmd = check_size_t<G_SetTournamentPlayerDecks_GC_Ep3_6xB4x3D>(data);
if (cmd.rules.overall_time_limit || cmd.rules.phase_time_limit) {
cmd.rules.overall_time_limit = 0;
cmd.rules.phase_time_limit = 0;
modified = true;
}
} else if (header.subsubcommand == 0x05) {
auto& cmd = check_size_t<G_UpdateMap_GC_Ep3_6xB4x05>(data);
if (cmd.state.rules.overall_time_limit || cmd.state.rules.phase_time_limit) {
cmd.state.rules.overall_time_limit = 0;
cmd.state.rules.phase_time_limit = 0;
modified = true;
}
}
}
} }
if (data[0] == 0x46) { if (data[0] == 0x46) {
+5
View File
@@ -62,6 +62,8 @@ static shared_ptr<const Menu> proxy_options_menu_for_client(shared_ptr<const Cli
// Note: This option's text is the maximum possible length for any menu item // Note: This option's text is the maximum possible length for any menu item
add_option(ProxyOptionsMenuItemID::EP3_INFINITE_MESETA, c->options.ep3_infinite_meseta, add_option(ProxyOptionsMenuItemID::EP3_INFINITE_MESETA, c->options.ep3_infinite_meseta,
u"Infinite Meseta", u"Fix Meseta value\nat 1,000,000"); u"Infinite Meseta", u"Fix Meseta value\nat 1,000,000");
add_option(ProxyOptionsMenuItemID::EP3_INFINITE_TIME, c->options.ep3_infinite_time,
u"Infinite time", u"Disable overall and\nper-phase time limits\nin battle");
} }
} }
add_option(ProxyOptionsMenuItemID::BLOCK_EVENTS, (c->options.override_lobby_event >= 0), add_option(ProxyOptionsMenuItemID::BLOCK_EVENTS, (c->options.override_lobby_event >= 0),
@@ -1830,6 +1832,9 @@ static void on_10(shared_ptr<Client> c, uint16_t, uint32_t, const string& data)
case ProxyOptionsMenuItemID::EP3_INFINITE_MESETA: case ProxyOptionsMenuItemID::EP3_INFINITE_MESETA:
c->options.ep3_infinite_meseta = !c->options.ep3_infinite_meseta; c->options.ep3_infinite_meseta = !c->options.ep3_infinite_meseta;
goto resend_proxy_options_menu; goto resend_proxy_options_menu;
case ProxyOptionsMenuItemID::EP3_INFINITE_TIME:
c->options.ep3_infinite_time = !c->options.ep3_infinite_time;
goto resend_proxy_options_menu;
case ProxyOptionsMenuItemID::BLOCK_EVENTS: case ProxyOptionsMenuItemID::BLOCK_EVENTS:
if (c->options.override_lobby_event >= 0) { if (c->options.override_lobby_event >= 0) {
c->options.override_lobby_event = -1; c->options.override_lobby_event = -1;