don't mask Ep3 NTE game commands

This commit is contained in:
Martin Michelsen
2024-02-01 22:48:12 -08:00
parent 5bf868e2aa
commit 0f4e4fa48e
5 changed files with 13 additions and 6 deletions
+2
View File
@@ -5506,6 +5506,8 @@ struct G_CardBattleCommandHeader {
// set_mask_for_ep3_game_command in SendCommands.cc. The Episode 3 client
// never sends commands that have a nonzero value in this field, but it does
// properly handle received commands with nonzero values in this field.
// This only applies to Episode 3 final - the Trial Edition does not support
// masking and may send uninitialized data in this field.
uint8_t mask_key = 0x00;
uint8_t unused2 = 0x00;
} __packed__;
+1
View File
@@ -203,6 +203,7 @@ void Server::send(const void* data, size_t size, uint8_t command, bool enable_ma
string masked_data;
if (enable_masking &&
(l->base_version != Version::GC_EP3_NTE) &&
!(this->options.behavior_flags & BehaviorFlag::DISABLE_MASKING) &&
(size >= 8)) {
masked_data.assign(reinterpret_cast<const char*>(data), size);
+1 -1
View File
@@ -987,7 +987,7 @@ static HandlerResult S_6x(shared_ptr<ProxyServer::LinkedSession> ses, uint16_t,
(static_cast<uint8_t>(data[0]) == 0xB4) ||
(static_cast<uint8_t>(data[0]) == 0xB5))) {
const auto& header = check_size_t<G_CardBattleCommandHeader>(data, 0xFFFF);
if (header.mask_key) {
if (header.mask_key && (ses->version() != Version::GC_EP3_NTE)) {
set_mask_for_ep3_game_command(data.data(), data.size(), 0);
modified = true;
}
+1 -1
View File
@@ -1294,7 +1294,7 @@ static bool add_next_game_client(shared_ptr<Lobby> l) {
state_cmd.state.first_team_turn = 0xFF;
state_cmd.state.tournament_flag = 0x01;
state_cmd.state.client_sc_card_types.clear(Episode3::CardType::INVALID_FF);
if (!(s->ep3_behavior_flags & Episode3::BehaviorFlag::DISABLE_MASKING)) {
if ((c->version() != Version::GC_EP3_NTE) && !(s->ep3_behavior_flags & Episode3::BehaviorFlag::DISABLE_MASKING)) {
uint8_t mask_key = (random_object<uint32_t>() % 0xFF) + 1;
set_mask_for_ep3_game_command(&state_cmd, sizeof(state_cmd), mask_key);
}
+8 -4
View File
@@ -3109,7 +3109,8 @@ void send_ep3_set_tournament_player_decks(shared_ptr<Client> c) {
add_entries_for_team(match->preceding_a->winner_team, 0);
add_entries_for_team(match->preceding_b->winner_team, 2);
if (!(s->ep3_behavior_flags & Episode3::BehaviorFlag::DISABLE_MASKING)) {
if ((c->version() != Version::GC_EP3_NTE) &&
!(s->ep3_behavior_flags & Episode3::BehaviorFlag::DISABLE_MASKING)) {
uint8_t mask_key = (random_object<uint32_t>() % 0xFF) + 1;
set_mask_for_ep3_game_command(&cmd, sizeof(cmd), mask_key);
}
@@ -3170,7 +3171,8 @@ void send_ep3_tournament_match_result(shared_ptr<Lobby> l, uint32_t meseta_rewar
cmd.winner_team_id = (match->preceding_b->winner_team == match->winner_team);
cmd.meseta_amount = meseta_reward;
cmd.meseta_reward_text.encode("You got %s meseta!", 1);
if (!(s->ep3_behavior_flags & Episode3::BehaviorFlag::DISABLE_MASKING)) {
if ((lc->version() != Version::GC_EP3_NTE) &&
!(s->ep3_behavior_flags & Episode3::BehaviorFlag::DISABLE_MASKING)) {
uint8_t mask_key = (random_object<uint32_t>() % 0xFF) + 1;
set_mask_for_ep3_game_command(&cmd, sizeof(cmd), mask_key);
}
@@ -3197,7 +3199,8 @@ void send_ep3_update_game_metadata(shared_ptr<Lobby> l) {
{
G_SetGameMetadata_GC_Ep3_6xB4x52 cmd;
cmd.total_spectators = total_spectators;
if (!(s->ep3_behavior_flags & Episode3::BehaviorFlag::DISABLE_MASKING)) {
if ((l->base_version != Version::GC_EP3_NTE) &&
!(s->ep3_behavior_flags & Episode3::BehaviorFlag::DISABLE_MASKING)) {
uint8_t mask_key = (random_object<uint32_t>() % 0xFF) + 1;
set_mask_for_ep3_game_command(&cmd, sizeof(cmd), mask_key);
}
@@ -3235,7 +3238,8 @@ void send_ep3_update_game_metadata(shared_ptr<Lobby> l) {
cmd.total_spectators = total_spectators;
cmd.text_size = text.size();
cmd.text.encode(text, 1);
if (!(s->ep3_behavior_flags & Episode3::BehaviorFlag::DISABLE_MASKING)) {
if ((watcher_l->base_version != Version::GC_EP3_NTE) &&
!(s->ep3_behavior_flags & Episode3::BehaviorFlag::DISABLE_MASKING)) {
uint8_t mask_key = (random_object<uint32_t>() % 0xFF) + 1;
set_mask_for_ep3_game_command(&cmd, sizeof(cmd), mask_key);
}