From 7585eaeae56aaee6c9d125d5cfb73e02de06ffc9 Mon Sep 17 00:00:00 2001 From: Martin Michelsen Date: Sun, 10 Sep 2023 09:27:28 -0700 Subject: [PATCH] name some unknown Ep3 enum values --- src/Episode3/CardSpecial.cc | 16 ++++++------- src/Episode3/DataIndexes.cc | 48 ++++++++++++++++++------------------- src/Episode3/DataIndexes.hh | 30 +++++++++++------------ src/Episode3/RulerServer.cc | 38 ++++++++++++++--------------- 4 files changed, 65 insertions(+), 67 deletions(-) diff --git a/src/Episode3/CardSpecial.cc b/src/Episode3/CardSpecial.cc index baccd674..104b9620 100644 --- a/src/Episode3/CardSpecial.cc +++ b/src/Episode3/CardSpecial.cc @@ -405,7 +405,7 @@ bool CardSpecial::apply_stat_deltas_to_card_from_condition_and_clear_cond( cond.clear(); switch (cond_type) { - case ConditionType::UNKNOWN_0C: + case ConditionType::A_T_SWAP_0C: if (cond_flags & 2) { int16_t ap = clamp(card->ap, -99, 99); int16_t tp = clamp(card->tp, -99, 99); @@ -1653,15 +1653,15 @@ bool CardSpecial::execute_effect( case ConditionType::RAMPAGE: case ConditionType::IMMOBILE: case ConditionType::HOLD: - case ConditionType::UNKNOWN_07: + case ConditionType::CANNOT_DEFEND: case ConditionType::GUOM: case ConditionType::PARALYZE: case ConditionType::PIERCE: - case ConditionType::UNKNOWN_0F: - case ConditionType::UNKNOWN_12: + case ConditionType::UNUSED_0F: + case ConditionType::SET_MV_COST_TO_0: case ConditionType::UNKNOWN_13: case ConditionType::ACID: - case ConditionType::UNKNOWN_15: + case ConditionType::ADD_1_TO_MV_COST: case ConditionType::ABILITY_TRAP: case ConditionType::FREEZE: case ConditionType::MAJOR_PIERCE: @@ -1719,7 +1719,7 @@ bool CardSpecial::execute_effect( } return true; - case ConditionType::UNKNOWN_0C: + case ConditionType::A_T_SWAP_0C: case ConditionType::A_T_SWAP_PERM: if (unknown_p7 & 4) { int16_t ap = clamp(card->ap, -99, 99); @@ -1845,12 +1845,12 @@ bool CardSpecial::execute_effect( auto& cond = card->action_chain.conditions[z]; if ((cond.type == ConditionType::IMMOBILE) || (cond.type == ConditionType::HOLD) || - (cond.type == ConditionType::UNKNOWN_07) || + (cond.type == ConditionType::CANNOT_DEFEND) || (cond.type == ConditionType::GUOM) || (cond.type == ConditionType::PARALYZE) || (cond.type == ConditionType::UNKNOWN_13) || (cond.type == ConditionType::ACID) || - (cond.type == ConditionType::UNKNOWN_15) || + (cond.type == ConditionType::ADD_1_TO_MV_COST) || (cond.type == ConditionType::CURSE) || (cond.type == ConditionType::PIERCE_RAMPAGE_BLOCK) || (cond.type == ConditionType::FREEZE) || diff --git a/src/Episode3/DataIndexes.cc b/src/Episode3/DataIndexes.cc index f9c8423e..8c786431 100644 --- a/src/Episode3/DataIndexes.cc +++ b/src/Episode3/DataIndexes.cc @@ -144,28 +144,28 @@ const char* name_for_criterion_code(CriterionCode code) { return "SAME_PLAYER"; case CriterionCode::SAME_TEAM_NOT_SAME_PLAYER: return "SAME_TEAM_NOT_SAME_PLAYER"; - case CriterionCode::UNKNOWN_07: - return "UNKNOWN_07"; + case CriterionCode::FC: + return "FC"; case CriterionCode::NOT_SC: return "NOT_SC"; case CriterionCode::SC: return "SC"; case CriterionCode::HU_OR_RA_CLASS_SC: return "HU_OR_RA_CLASS_SC"; - case CriterionCode::HUNTER_HUMAN_SC: - return "HUNTER_HUMAN_SC"; + case CriterionCode::HUNTER_NON_ANDROID_SC: + return "HUNTER_NON_ANDROID_SC"; case CriterionCode::HUNTER_HU_CLASS_MALE_SC: return "HUNTER_HU_CLASS_MALE_SC"; case CriterionCode::HUNTER_FEMALE_SC: return "HUNTER_FEMALE_SC"; - case CriterionCode::HUNTER_HU_OR_FO_CLASS_HUMAN_SC: - return "HUNTER_HU_OR_FO_CLASS_HUMAN_SC"; + case CriterionCode::HUNTER_NON_RA_CLASS_HUMAN_SC: + return "HUNTER_NON_RA_CLASS_HUMAN_SC"; case CriterionCode::HUNTER_HU_CLASS_ANDROID_SC: return "HUNTER_HU_CLASS_ANDROID_SC"; - case CriterionCode::UNKNOWN_10: - return "UNKNOWN_10"; - case CriterionCode::UNKNOWN_11: - return "UNKNOWN_11"; + case CriterionCode::HUNTER_NON_RA_CLASS_NON_NEWMAN_SC: + return "HUNTER_NON_RA_CLASS_NON_NEWMAN_SC"; + case CriterionCode::HUNTER_NON_NEWMAN_NON_FORCE_MALE_SC: + return "HUNTER_NON_NEWMAN_NON_FORCE_MALE_SC"; case CriterionCode::HUNTER_HUNEWEARL_CLASS_SC: return "HUNTER_HUNEWEARL_CLASS_SC"; case CriterionCode::HUNTER_RA_CLASS_MALE_SC: @@ -180,8 +180,8 @@ const char* name_for_criterion_code(CriterionCode code) { return "HUNTER_RA_CLASS_ANDROID_SC"; case CriterionCode::HUNTER_FO_CLASS_FEMALE_SC: return "HUNTER_FO_CLASS_FEMALE_SC"; - case CriterionCode::HUNTER_FEMALE_HUMAN_SC: - return "HUNTER_FEMALE_HUMAN_SC"; + case CriterionCode::HUNTER_HUMAN_FEMALE_SC: + return "HUNTER_HUMAN_FEMALE_SC"; case CriterionCode::HUNTER_ANDROID_SC: return "HUNTER_ANDROID_SC"; case CriterionCode::HU_OR_FO_CLASS_SC: @@ -194,12 +194,12 @@ const char* name_for_criterion_code(CriterionCode code) { return "TECH_OR_UNKNOWN_ATTACK_MEDIUM"; case CriterionCode::PHYSICAL_OR_TECH_OR_UNKNOWN_ATTACK_MEDIUM: return "PHYSICAL_OR_TECH_OR_UNKNOWN_ATTACK_MEDIUM"; - case CriterionCode::UNKNOWN_20: - return "UNKNOWN_20"; - case CriterionCode::UNKNOWN_21: - return "UNKNOWN_21"; - case CriterionCode::UNKNOWN_22: - return "UNKNOWN_22"; + case CriterionCode::NON_PHYSICAL_NON_UNKNOWN_ATTACK_MEDIUM_NON_SC: + return "NON_PHYSICAL_NON_UNKNOWN_ATTACK_MEDIUM_NON_SC"; + case CriterionCode::NON_PHYSICAL_NON_TECH_ATTACK_MEDIUM_NON_SC: + return "NON_PHYSICAL_NON_TECH_ATTACK_MEDIUM_NON_SC"; + case CriterionCode::NON_PHYSICAL_NON_TECH_NON_UNKNOWN_ATTACK_MEDIUM_NON_SC: + return "NON_PHYSICAL_NON_TECH_NON_UNKNOWN_ATTACK_MEDIUM_NON_SC"; default: throw invalid_argument("invalid criterion code"); } @@ -470,21 +470,21 @@ static const vector description_for_condition_type({ /* 0x04 */ {true, "DAMAGE_MOD_1", "Set attack damage / AP to N after action cards applied (step 1)"}, /* 0x05 */ {false, "IMMOBILE", "Give Immobile condition"}, /* 0x06 */ {false, "HOLD", "Give Hold condition"}, - /* 0x07 */ {false, "UNKNOWN_07", nullptr}, + /* 0x07 */ {false, "CANNOT_DEFEND", "Cannot defend"}, /* 0x08 */ {true, "TP_BOOST", "Add N TP temporarily during attack"}, /* 0x09 */ {true, "GIVE_DAMAGE", "Cause direct N HP loss"}, /* 0x0A */ {false, "GUOM", "Give Guom condition"}, /* 0x0B */ {false, "PARALYZE", "Give Paralysis condition"}, - /* 0x0C */ {false, "UNKNOWN_0C", nullptr}, + /* 0x0C */ {false, "A_T_SWAP_0C", "Swap AP and TP temporarily"}, /* 0x0D */ {false, "A_H_SWAP", "Swap AP and HP temporarily"}, /* 0x0E */ {false, "PIERCE", "Attack SC directly even if they have items equipped"}, - /* 0x0F */ {false, "UNKNOWN_0F", nullptr}, + /* 0x0F */ {false, "UNUSED_0F", nullptr}, /* 0x10 */ {true, "HEAL", "Increase HP by N"}, /* 0x11 */ {false, "RETURN_TO_HAND", "Return card to hand"}, - /* 0x12 */ {false, "UNKNOWN_12", nullptr}, + /* 0x12 */ {false, "SET_MV_COST_TO_0", "Movement costs nothing"}, /* 0x13 */ {false, "UNKNOWN_13", nullptr}, /* 0x14 */ {false, "ACID", "Give Acid condition"}, - /* 0x15 */ {false, "UNKNOWN_15", nullptr}, + /* 0x15 */ {false, "ADD_1_TO_MV_COST", "Add 1 to move costs"}, /* 0x16 */ {true, "MIGHTY_KNUCKLE", "Temporarily increase AP by N, and set ATK dice to zero"}, /* 0x17 */ {true, "UNIT_BLOW", "Temporarily increase AP by N * number of this card set within phase"}, /* 0x18 */ {false, "CURSE", "Give Curse condition"}, @@ -503,7 +503,7 @@ static const vector description_for_condition_type({ /* 0x25 */ {true, "AP_LOSS", "Make attacker temporarily lose N AP during defense"}, /* 0x26 */ {true, "BONUS_FROM_LEADER", "Gain AP equal to the number of cards of type N on the field"}, /* 0x27 */ {false, "FREE_MANEUVER", "Enable movement over occupied tiles"}, - /* 0x28 */ {false, "HASTE", "Make move actions free"}, + /* 0x28 */ {false, "SCALE_MV_COST", "Multiply movement costs by a factor"}, /* 0x29 */ {true, "CLONE", "Make setting this card free if at least one card of type N is already on the field"}, /* 0x2A */ {true, "DEF_DISABLE_BY_COST", "Disable use of any defense cards costing between (N / 10) and (N % 10) points, inclusive"}, /* 0x2B */ {true, "FILIAL", "Increase controlling SC\'s HP by N when this card is destroyed"}, diff --git a/src/Episode3/DataIndexes.hh b/src/Episode3/DataIndexes.hh index 3147d812..b66ffbd1 100644 --- a/src/Episode3/DataIndexes.hh +++ b/src/Episode3/DataIndexes.hh @@ -68,17 +68,17 @@ enum class CriterionCode : uint8_t { SAME_TEAM = 0x04, SAME_PLAYER = 0x05, SAME_TEAM_NOT_SAME_PLAYER = 0x06, // Allies only - UNKNOWN_07 = 0x07, + FC = 0x07, NOT_SC = 0x08, SC = 0x09, HU_OR_RA_CLASS_SC = 0x0A, - HUNTER_HUMAN_SC = 0x0B, + HUNTER_NON_ANDROID_SC = 0x0B, HUNTER_HU_CLASS_MALE_SC = 0x0C, HUNTER_FEMALE_SC = 0x0D, - HUNTER_HU_OR_FO_CLASS_HUMAN_SC = 0x0E, + HUNTER_NON_RA_CLASS_HUMAN_SC = 0x0E, HUNTER_HU_CLASS_ANDROID_SC = 0x0F, - UNKNOWN_10 = 0x10, - UNKNOWN_11 = 0x11, + HUNTER_NON_RA_CLASS_NON_NEWMAN_SC = 0x10, + HUNTER_NON_NEWMAN_NON_FORCE_MALE_SC = 0x11, HUNTER_HUNEWEARL_CLASS_SC = 0x12, HUNTER_RA_CLASS_MALE_SC = 0x13, HUNTER_RA_CLASS_FEMALE_SC = 0x14, @@ -86,16 +86,16 @@ enum class CriterionCode : uint8_t { HUNTER_HU_OR_RA_CLASS_HUMAN_SC = 0x16, HUNTER_RA_CLASS_ANDROID_SC = 0x17, HUNTER_FO_CLASS_FEMALE_SC = 0x18, - HUNTER_FEMALE_HUMAN_SC = 0x19, + HUNTER_HUMAN_FEMALE_SC = 0x19, HUNTER_ANDROID_SC = 0x1A, HU_OR_FO_CLASS_SC = 0x1B, RA_OR_FO_CLASS_SC = 0x1C, PHYSICAL_OR_UNKNOWN_ATTACK_MEDIUM = 0x1D, TECH_OR_UNKNOWN_ATTACK_MEDIUM = 0x1E, PHYSICAL_OR_TECH_OR_UNKNOWN_ATTACK_MEDIUM = 0x1F, - UNKNOWN_20 = 0x20, - UNKNOWN_21 = 0x21, - UNKNOWN_22 = 0x22, + NON_PHYSICAL_NON_UNKNOWN_ATTACK_MEDIUM_NON_SC = 0x20, + NON_PHYSICAL_NON_TECH_ATTACK_MEDIUM_NON_SC = 0x21, + NON_PHYSICAL_NON_TECH_NON_UNKNOWN_ATTACK_MEDIUM_NON_SC = 0x22, }; const char* name_for_criterion_code(CriterionCode code); @@ -181,21 +181,21 @@ enum class ConditionType : uint8_t { DAMAGE_MOD_1 = 0x04, // Set attack damage / AP to N after action cards applied (step 1) IMMOBILE = 0x05, // Give Immobile condition HOLD = 0x06, // Give Hold condition - UNKNOWN_07 = 0x07, + CANNOT_DEFEND = 0x07, TP_BOOST = 0x08, // Add N TP temporarily during attack GIVE_DAMAGE = 0x09, // Cause direct N HP loss GUOM = 0x0A, // Give Guom condition PARALYZE = 0x0B, // Give Paralysis condition - UNKNOWN_0C = 0x0C, // Swap AP and TP temporarily (presumably) + A_T_SWAP_0C = 0x0C, // Swap AP and TP temporarily (same as 71?) A_H_SWAP = 0x0D, // Swap AP and HP temporarily PIERCE = 0x0E, // Attack SC directly even if they have items equipped - UNKNOWN_0F = 0x0F, + UNUSED_0F = 0x0F, HEAL = 0x10, // Increase HP by N RETURN_TO_HAND = 0x11, // Return card to hand - UNKNOWN_12 = 0x12, + SET_MV_COST_TO_0 = 0x12, UNKNOWN_13 = 0x13, ACID = 0x14, // Give Acid condition - UNKNOWN_15 = 0x15, + ADD_1_TO_MV_COST = 0x15, MIGHTY_KNUCKLE = 0x16, // Temporarily increase AP by N, and set ATK dice to zero UNIT_BLOW = 0x17, // Temporarily increase AP by N * number of this card set within phase CURSE = 0x18, // Give Curse condition @@ -214,7 +214,7 @@ enum class ConditionType : uint8_t { AP_LOSS = 0x25, // Make attacker temporarily lose N AP during defense BONUS_FROM_LEADER = 0x26, // Gain AP equal to the number of cards of type N on the field FREE_MANEUVER = 0x27, // Enable movement over occupied tiles - HASTE = 0x28, // Multiply all move action costs by expr (which may be zero) + SCALE_MV_COST = 0x28, // Multiply all move action costs by expr (which may be zero) CLONE = 0x29, // Make setting this card free if at least one card of type N is already on the field DEF_DISABLE_BY_COST = 0x2A, // Disable use of any defense cards costing between (N / 10) and (N % 10) points, inclusive FILIAL = 0x2B, // Increase controlling SC's HP by N when this card is destroyed diff --git a/src/Episode3/RulerServer.cc b/src/Episode3/RulerServer.cc index cba7ecc3..693221c3 100644 --- a/src/Episode3/RulerServer.cc +++ b/src/Episode3/RulerServer.cc @@ -941,7 +941,7 @@ bool RulerServer::check_usability_or_condition_apply( ((criterion_code == CriterionCode::SAME_TEAM) || (criterion_code == CriterionCode::SAME_PLAYER) || (criterion_code == CriterionCode::SAME_TEAM_NOT_SAME_PLAYER) || - (criterion_code == CriterionCode::UNKNOWN_07) || + (criterion_code == CriterionCode::FC) || (criterion_code == CriterionCode::NOT_SC) || (criterion_code == CriterionCode::SC))) { log.debug("check_usability_or_condition_apply: criterion is forbidden"); @@ -992,14 +992,10 @@ bool RulerServer::check_usability_or_condition_apply( return true; } break; - case CriterionCode::UNKNOWN_07: - // Like NOT_SC, but for ce3 instead of ce2 - log.debug("check_usability_or_condition_apply: UNKNOWN_07: ce3 type is %s", ce3 ? name_for_card_type(ce3->def.type) : "missing"); + case CriterionCode::FC: if (!ce3 || ((ce3->def.type != CardType::HUNTERS_SC) && (ce3->def.type != CardType::ARKZ_SC))) { - log.debug("check_usability_or_condition_apply: UNKNOWN_07: returned %s", ret ? "true" : "false"); return ret; } - log.debug("check_usability_or_condition_apply: UNKNOWN_07: did not pass"); break; case CriterionCode::NOT_SC: if (!ce2 || ((ce2->def.type != CardType::HUNTERS_SC) && (ce2->def.type != CardType::ARKZ_SC))) { @@ -1016,7 +1012,7 @@ bool RulerServer::check_usability_or_condition_apply( return ret; } break; - case CriterionCode::HUNTER_HUMAN_SC: { + case CriterionCode::HUNTER_NON_ANDROID_SC: { static const unordered_set card_ids = { 0x0001, // Orland 0x0002, // Kranz @@ -1070,6 +1066,7 @@ bool RulerServer::check_usability_or_condition_apply( 0x02B1, // H-RAcaseal 0x02B3, // H-FOmarl 0x02B5, // H-FOnewearl + // Note: Seems like 0x02CD (H-RAmarl) should be here, but she isn't. 0x02CE, // H-FOmarl 0x02CF, // H-HUnewearl 0x02D1, // H-RAmarl @@ -1079,7 +1076,7 @@ bool RulerServer::check_usability_or_condition_apply( }; return ret && card_ids.count(card_id2); } - case CriterionCode::HUNTER_HU_OR_FO_CLASS_HUMAN_SC: { + case CriterionCode::HUNTER_NON_RA_CLASS_HUMAN_SC: { static const unordered_set card_ids = { 0x0001, // Orland 0x0003, // Ino'lis @@ -1113,7 +1110,7 @@ bool RulerServer::check_usability_or_condition_apply( }; return ret && card_ids.count(card_id2); } - case CriterionCode::UNKNOWN_10: { + case CriterionCode::HUNTER_NON_RA_CLASS_NON_NEWMAN_SC: { static const unordered_set card_ids = { 0x0001, // Orland 0x0003, // Ino'lis @@ -1133,7 +1130,7 @@ bool RulerServer::check_usability_or_condition_apply( }; return ret && card_ids.count(card_id2); } - case CriterionCode::UNKNOWN_11: { + case CriterionCode::HUNTER_NON_NEWMAN_NON_FORCE_MALE_SC: { static const unordered_set card_ids = { 0x0001, // Orland 0x0002, // Kranz @@ -1144,6 +1141,7 @@ bool RulerServer::check_usability_or_condition_apply( 0x02AE, // H-RAmar 0x02B0, // H-RAcast 0x02CC, // H-HUmar + // Seems like H-RAmarl shouldn't be here, but she is. 0x02CD, // H-RAmarl 0x02D0, // H-RAcast 0x02D7, // H-HUcast @@ -1236,7 +1234,7 @@ bool RulerServer::check_usability_or_condition_apply( }; return ret && card_ids.count(card_id2); } - case CriterionCode::HUNTER_FEMALE_HUMAN_SC: { + case CriterionCode::HUNTER_HUMAN_FEMALE_SC: { static const unordered_set card_ids = { 0x0003, // Ino'lis 0x0004, // Sil'fer @@ -1295,7 +1293,7 @@ bool RulerServer::check_usability_or_condition_apply( return ret; } break; - case CriterionCode::UNKNOWN_20: + case CriterionCode::NON_PHYSICAL_NON_UNKNOWN_ATTACK_MEDIUM_NON_SC: if ((attack_medium != AttackMedium::PHYSICAL) && (attack_medium != AttackMedium::UNKNOWN)) { return false; } @@ -1303,7 +1301,7 @@ bool RulerServer::check_usability_or_condition_apply( return ret; } break; - case CriterionCode::UNKNOWN_21: + case CriterionCode::NON_PHYSICAL_NON_TECH_ATTACK_MEDIUM_NON_SC: if ((attack_medium != AttackMedium::PHYSICAL) && (attack_medium != AttackMedium::TECH)) { return false; } @@ -1311,7 +1309,7 @@ bool RulerServer::check_usability_or_condition_apply( return ret; } break; - case CriterionCode::UNKNOWN_22: + case CriterionCode::NON_PHYSICAL_NON_TECH_NON_UNKNOWN_ATTACK_MEDIUM_NON_SC: if ((attack_medium != AttackMedium::UNKNOWN) && (attack_medium != AttackMedium::PHYSICAL) && (attack_medium != AttackMedium::TECH)) { return false; } @@ -1354,8 +1352,8 @@ uint16_t RulerServer::compute_attack_or_defense_costs( sc_card_ref_if_item = this->short_statuses[client_id]->at(0).card_ref; } - if (this->find_condition_on_card_ref(pa.attacker_card_ref, ConditionType::UNKNOWN_15) || - this->find_condition_on_card_ref(sc_card_ref_if_item, ConditionType::UNKNOWN_15)) { + if (this->find_condition_on_card_ref(pa.attacker_card_ref, ConditionType::ADD_1_TO_MV_COST) || + this->find_condition_on_card_ref(sc_card_ref_if_item, ConditionType::ADD_1_TO_MV_COST)) { cost_bias = 1; } @@ -2119,11 +2117,11 @@ ssize_t RulerServer::get_path_cost( ssize_t cost_penalty) const { for (size_t x = 0; x < 9; x++) { const auto& cond = chain.conditions[x]; - if (cond.type == ConditionType::UNKNOWN_12) { + if (cond.type == ConditionType::SET_MV_COST_TO_0) { path_length = 0; - } else if (cond.type == ConditionType::UNKNOWN_15) { + } else if (cond.type == ConditionType::ADD_1_TO_MV_COST) { path_length++; - } else if (cond.type == ConditionType::HASTE) { + } else if (cond.type == ConditionType::SCALE_MV_COST) { path_length *= cond.value; } } @@ -2386,7 +2384,7 @@ bool RulerServer::is_defense_valid(const ActionState& pa) { } if (this->find_condition_on_card_ref(pa.target_card_refs[0], ConditionType::HOLD) || - this->find_condition_on_card_ref(pa.target_card_refs[0], ConditionType::UNKNOWN_07)) { + this->find_condition_on_card_ref(pa.target_card_refs[0], ConditionType::CANNOT_DEFEND)) { this->error_code3 = -0x63; return false; }