From 0378314733dba6effa5c01f578c11e39809e24a9 Mon Sep 17 00:00:00 2001 From: Martin Michelsen Date: Sat, 21 May 2022 10:13:32 -0700 Subject: [PATCH] more Ep3 structures --- src/Episode3.cc | 751 +++++++++++++++++++++++++++++++++++++++- src/Episode3.hh | 128 ++++++- system/ep3/cardtext.mnr | Bin 0 -> 87492 bytes 3 files changed, 851 insertions(+), 28 deletions(-) create mode 100644 system/ep3/cardtext.mnr diff --git a/src/Episode3.cc b/src/Episode3.cc index 825db278..1253b084 100644 --- a/src/Episode3.cc +++ b/src/Episode3.cc @@ -2,6 +2,7 @@ #include +#include #include #include "Compression.hh" @@ -11,36 +12,760 @@ using namespace std; +static const vector name_for_card_type({ + "HunterSC", + "ArkzSC", + "Item", + "Creature", + "Action", + "Assist", +}); + +static const unordered_map description_for_when({ + {0x01, "Set"}, // TODO: Is 01 this, or "Permanent"? + {0x02, "Attack"}, + {0x03, "??? (TODO)"}, + {0x04, "Before turn"}, + {0x05, "Destroyed"}, + {0x0A, "Permanent"}, // only used on Tollaw; could be same as 01 + {0x0B, "Battle"}, + {0x0C, "Opponent destroyed"}, // TODO: but this is also used for some support things like Shifta, and for Snatch, which also applies when opponents are not destroyed + {0x0D, "Attack lands"}, + {0x0E, "Before attack phase"}, + {0x16, "Battle end"}, + {0x17, "Each defense"}, + {0x20, "Each attack"}, + {0x22, "Act phase"}, + {0x27, "Move phase"}, + {0x29, "Set and act phases"}, + {0x33, "Defense phase"}, + {0x3D, "Battle"}, // TODO: how is this different from 3D and 0B? + {0x3E, "Battle"}, // TODO: how is this different from 3D and 0B? + {0x3F, "Each defense"}, // TODO: how is this different from 17? + {0x46, "On specific turn"}, +}); + +static const unordered_map description_for_expr_token({ + {"f", "Number of FCs controlled by current SC"}, + {"d", "Die roll"}, + {"ap", "Attacker AP"}, // Unused + {"tp", "Attacker TP"}, + {"hp", "Attacker HP"}, // TODO: How is this different from ehp? + {"mhp", "Attacker maximum HP"}, + {"dm", "Unknown: dm"}, // Unused + {"tdm", "Unknown: tdm"}, // Unused + {"tf", "Number of SC\'s destroyed FCs"}, + {"ac", "Remaining ATK points"}, + {"php", "Unknown: php"}, // Unused + {"dc", "Unknown: dc"}, // Unused + {"cs", "Unknown: cs"}, // Unused + {"a", "Unknown: a"}, // Unused + {"kap", "Action cards AP"}, + {"ktp", "Action cards TP"}, + {"dn", "Unknown: dn"}, // Unused + {"hf", "Unknown: hf"}, // Unused + {"df", "Number of destroyed ally FCs (including SC\'s own)"}, + {"ff", "Number of ally FCs (including SC\'s own)"}, + {"ef", "Number of enemy FCs"}, + {"bi", "Number of Native FCs on either team"}, + {"ab", "Number of A.Beast FCs on either team"}, + {"mc", "Number of Machine FCs on either team"}, + {"dk", "Number of Dark FCs on either team"}, + {"sa", "Number of Sword-type items on either team"}, + {"gn", "Number of Gun-type items on either team"}, + {"wd", "Number of Cane-type items on either team"}, + {"tt", "Unknown: tt"}, // Unused + {"lv", "Dice bonus"}, + {"adm", "Attack damage"}, + {"ddm", "Defending damage"}, + {"sat", "Number of Sword-type items on SC\'s team"}, + {"edm", "Defending damage"}, // TODO: How is this different from ddm? + {"ldm", "Unknown: ldm"}, // Unused + {"rdm", "Defending damage"}, // TODO: How is this different from ddm/edm? + {"fdm", "Final damage (after defense)"}, + {"ndm", "Unknown: ndm"}, // Unused + {"ehp", "Attacker HP"}, +}); + +// Arguments are encoded as 3-character null-terminated strings (why?!), and are +// used for adding conditions to effects (e.g. making them only trigger in +// certain situations) or otherwise customizing their results. +// Argument meanings: +// a01 = ??? +// cXY/CXY = linked items (require item with cYX/CYX to be equipped as well) +// dXY = roll one die; require result between X and Y inclusive +// e00 = effect lasts while equipped? (in contrast to tXX) +// hXX = require HP >= XX +// iXX = require HP <= XX +// nXX = require condition XX (see description_for_n_condition) +// oXX = seems to be "require previous random-condition effect to have happened" +// TODO: this is used as both o01 (recovery) and o11 (reflection) +// conditions - why the difference? +// pXX = who to target (see description_for_p_target) +// rXX = randomly pass with XX% chance (if XX == 00, 100% chance?) +// sXY = require card cost between X and Y ATK points (inclusive) +// tXX = lasts XX turns, or activate after XX turns + +static const vector description_for_n_condition({ + /* n00 */ "Always true", + /* n01 */ "??? (TODO)", + /* n02 */ "Destroyed with a single attack?", + /* n03 */ "Unknown", // Unused + /* n04 */ "Attack has Pierce", + /* n05 */ "Attack has Rampage", + /* n06 */ "Native attribute", + /* n07 */ "A.Beast attribute", + /* n08 */ "Machine attribute", + /* n09 */ "Dark attribute", + /* n10 */ "Sword-type item", + /* n11 */ "Gun-type item", + /* n12 */ "Cane-type item", + /* n13 */ "Guard item", + /* n14 */ "Story Character", + /* n15 */ "Attacker does not use action cards", + /* n16 */ "Aerial attribute", + /* n17 */ "Same AP as opponent", + /* n18 */ "Opponent is SC", + /* n19 */ "Has Paralyzed condition", + /* n20 */ "Has Frozen condition", +}); + +static const vector description_for_p_target({ + /* p00 */ "Unknown: p00", // Unused; probably invalid + /* p01 */ "SC / FC who set the card", + /* p02 */ "Attacking SC / FC", + /* p03 */ "Unknown: p03", // Unused + /* p04 */ "Unknown: p04", // Unused + /* p05 */ "Unknown: p05", // Unused + /* p06 */ "??? (TODO)", + /* p07 */ "??? (TODO; Weakness)", + /* p08 */ "FC's owner SC", + /* p09 */ "Unknown: p09", // Unused + /* p10 */ "All ally FCs", + /* p11 */ "All ally FCs", // TODO: how is this different from p10? + /* p12 */ "All non-aerial FCs on both teams", + /* p13 */ "All FCs on both teams that are Frozen", + /* p14 */ "All FCs on both teams that have <= 3 HP", + /* p15 */ "All FCs except SCs", // TODO: used during attacks only? + /* p16 */ "All FCs except SCs", // TODO: used during attacks only? how is this different from p15? + /* p17 */ "This card", + /* p18 */ "SC who equipped this card", + /* p19 */ "Unknown: p19", // Unused + /* p20 */ "Unknown: p20", // Unused + /* p21 */ "Unknown: p21", // Unused + /* p22 */ "All characters (SCs & FCs) including this card", // TODO: But why does Shifta apply only to allies then? + /* p23 */ "All characters (SCs & FCs) except this card", + /* p24 */ "All FCs on both teams that have Paralysis", + /* p25 */ "Unknown: p25", // Unused + /* p26 */ "Unknown: p26", // Unused + /* p27 */ "Unknown: p27", // Unused + /* p28 */ "Unknown: p28", // Unused + /* p29 */ "Unknown: p29", // Unused + /* p30 */ "Unknown: p30", // Unused + /* p31 */ "Unknown: p31", // Unused + /* p32 */ "Unknown: p32", // Unused + /* p33 */ "Unknown: p33", // Unused + /* p34 */ "Unknown: p34", // Unused + /* p35 */ "All characters (SCs & FCs) within range", // Used for Explosion effect + /* p36 */ "All ally SCs within range, but not the caster", // Resta + /* p37 */ "All FCs or all opponent FCs (TODO)", // TODO: when to use which selector? is a3 involved here somehow? + /* p38 */ "All allies except items within range (and not this card)", + /* p39 */ "All FCs that cost 4 or more points", + /* p40 */ "All FCs that cost 3 or fewer points", + /* p41 */ "Unknown: p41", // Unused + /* p42 */ "Attacker during defense phase", // Only used by TP Defense + /* p43 */ "Owner SC of defending FC during attack", + /* p44 */ "SC\'s own creature FCs within range", + /* p45 */ "Both attacker and defender", // Used for Snatch, which moves EXP from one to the other + /* p46 */ "All SCs & FCs one space left or right of this card", + /* p47 */ "FC\'s owner Boss SC", // Only used for Gibbles+ which explicitly mentions Boss SC, so it looks like this is p08 but for bosses + /* p48 */ "Everything within range, including this card\'s user", // Madness + /* p49 */ "All ally FCs within range except this card", +}); + +struct Ep3AbilityDescription { + uint8_t command; + bool has_expr; + const char* name; + const char* description; +}; + +static const std::vector name_for_effect_command({ + {0x00, false, nullptr, nullptr}, + {0x01, true, "AP Boost", "Temporarily increase AP by N"}, + {0x02, false, "Rampage", "Rampage"}, + {0x03, true, "Multi Strike", "Duplicate attack N times"}, + {0x04, true, "Damage Modifier 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, nullptr, nullptr}, + {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, nullptr, nullptr}, + {0x0D, false, "A/H Swap", "Swap AP and HP temporarily"}, + {0x0E, false, "Pierce", "Attack SC directly even if they have items equipped"}, + {0x0F, false, nullptr, nullptr}, + {0x10, true, "Heal", "Increase HP by N"}, + {0x11, false, "Return to Hand", "Return card to hand"}, + {0x12, false, nullptr, nullptr}, + {0x13, false, nullptr, nullptr}, + {0x14, false, "Acid", "Give Acid condition"}, + {0x15, false, nullptr, nullptr}, + {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"}, + {0x19, false, "Combo (AP)", "Temporarily increase AP by number of this card set within phase"}, + {0x1A, false, "Pierce/Rampage Block", "Block attack if Pierce/Rampage (?)"}, + {0x1B, false, "Ability Trap", "Temporarily disable opponent abilities"}, + {0x1C, false, "Freeze", "Give Freeze condition"}, + {0x1D, false, "Anti-Abnormality", "Cure all conditions"}, + {0x1E, false, nullptr, nullptr}, + {0x1F, false, "Explosion", "Damage all SCs and FCs by number of this same card set * 2"}, + {0x20, false, nullptr, nullptr}, + {0x21, false, nullptr, nullptr}, + {0x22, false, nullptr, nullptr}, + {0x23, false, "Return to Deck", "Cancel discard and move to bottom of deck instead"}, + {0x24, false, "Aerial", "Give Aerial status"}, + {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"}, + {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"}, + {0x2C, true, "Snatch", "Steal N EXP during attack"}, + {0x2D, true, "Hand Disrupter", "DIscard N cards from hand immediately"}, + {0x2E, false, "Drop", "Give Drop condition"}, + {0x2F, false, "Action Disrupter", "Destroy all action cards used by attacker"}, + {0x30, true, "Set HP", "Set HP to N (?) (TODO)"}, + {0x31, false, "Native Shield", "Block attacks from Native creatures"}, + {0x32, false, "A.Beast Shield", "Block attacks from A.Beast creatures"}, + {0x33, false, "Machine Shield", "Block attacks from Machine creatures"}, + {0x34, false, "Dark Shield", "Block attacks from Dark creatures"}, + {0x35, false, "Sword Shield", "Block attacks from Sword items"}, + {0x36, false, "Gun Shield", "Block attacks from Gun items"}, + {0x37, false, "Cane Shield", "Block attacks from Cane items"}, + {0x38, false, nullptr, nullptr}, + {0x39, false, nullptr, nullptr}, + {0x3A, false, "Defender", "Make attacks go to setter of this card instead of original target"}, + {0x3B, false, "Survival Decoys", "Redirect damage for multi-sided attack"}, + {0x3C, true, "Give/Take EXP", "Give N EXP, or take if N is negative"}, + {0x3D, false, nullptr, nullptr}, + {0x3E, false, "Death Companion", "If this card has 1 or 2 HP, set its HP to N"}, + {0x3F, true, "EXP Decoy", "If defender has EXP, lose EXP instead of getting damage when attacked"}, + {0x40, true, "Set MV", "Set MV to N"}, + {0x41, true, "Group", "Temporarily increase AP by N * number of this card on field, excluding itself"}, + {0x42, false, "Berserk", "User of this card receives the same damage as target, and isn't helped by target's defense cards"}, + {0x43, false, "Guard Creature", "Attacks on controlling SC damage this card instead"}, + {0x44, false, "Tech", "Technique cards cost 1 fewer ATK point"}, + {0x45, false, "Big Swing", "Increase all attacking ATK costs by 1"}, + {0x46, false, nullptr, nullptr}, + {0x47, false, "Shield Weapon", "Limit attacker\'s choice of target to guard items"}, + {0x48, false, "ATK Dice Boost", "Increase ATK dice roll by 1"}, + {0x49, false, nullptr, nullptr}, + {0x4A, false, "Major Pierce", "If SC has over half of max HP, attacks target SC instead of equipped items"}, + {0x4B, false, "Heavy Pierce", "If SC has 3 or more items equipped, attacks target SC instead of equipped items"}, + {0x4C, false, "Major Rampage", "If SC has over half of max HP, attacks target SC and all equipped items"}, + {0x4D, false, "Heavy Rampage", "If SC has 3 or more items equipped, attacks target SC and all equipped items"}, + {0x4E, true, "AP Growth", "Permanently increase AP by N"}, + {0x4F, true, "TP Growth", "Permanently increase TP by N"}, + {0x50, true, "Reborn", "If any card of type N is on the field, this card goes to the hand when destroyed instead of being discarded"}, + {0x51, true, "Copy", "Temporarily set AP/TP to N percent (or 100% if N is 0) of opponent\'s values"}, + {0x52, false, nullptr, nullptr}, + {0x53, true, "Misc. Guards", "Add N to card's defense value"}, + {0x54, true, "AP Override", "Set AP to N temporarily"}, + {0x55, true, "TP Override", "Set TP to N temporarily"}, + {0x56, false, "Return", "Return card to hand on destruction instead of discarding"}, + {0x57, false, "A/T Swap Perm", "Permanently swap AP and TP"}, + {0x58, false, "A/H Swap Perm", "Permanently swap AP and HP"}, + {0x59, true, "Slayers/Assassins", "Temporarily increase AP during attack"}, + {0x5A, false, "Anti-Abnormality", "Remove all conditions"}, + {0x5B, false, "Fixed Range", "Use SC\'s range instead of weapon or attack card ranges"}, + {0x5C, false, "Elude", "SC does not lose HP when equipped items are destroyed"}, + {0x5D, false, "Parry", "Forward attack to a random FC within one tile of original target, excluding attacker and original target"}, + {0x5E, false, "Block Attack", "Completely block attack"}, + {0x5F, false, nullptr, nullptr}, + {0x60, false, nullptr, nullptr}, + {0x61, true, "Combo (TP)", "Gain TP equal to the number of cards of type N on the field"}, + {0x62, true, "Misc. AP Bonuses", "Temporarily increase AP by N"}, + {0x63, true, "Misc. TP Bonuses", "Temporarily increase TP by N"}, + {0x64, false, nullptr, nullptr}, + {0x65, true, "Misc. Defense Bonuses", "Decrease damage by N"}, + {0x66, true, "Mostly Halfguards", "Reduce damage from incoming attack by N"}, + {0x67, false, "Periodic Field", "Swap immunity to tech or physical attacks"}, + {0x68, false, "Unlimited Summoning", "Allow unlimited summoning"}, + {0x69, false, nullptr, nullptr}, + {0x6A, true, "MV Bonus", "Increase MV by N"}, + {0x6B, true, "Forward Damage", "Give N damage back to attacker during defense (?) (TODO)"}, + {0x6C, true, "Weak Spot / Influence", "Temporarily decrease AP by N"}, + {0x6D, true, "Damage Modifier 2", "Set attack damage / AP after action cards applied (step 2)"}, + {0x6E, true, "Weak Hit Block", "Block all attacks of N damage or less"}, + {0x6F, true, "AP Silence", "Temporarily decrease AP of opponent by N"}, + {0x70, true, "TP Silence", "Temporarily decrease TP of opponent by N"}, + {0x71, false, "A/T Swap", "Temporarily swap AP and TP"}, + {0x72, true, "Halfguard", "Halve damage from attacks that would inflict N or more damage"}, + {0x73, false, nullptr, nullptr}, + {0x74, true, "Rampage AP Loss", "Temporarily reduce AP by N"}, + {0x75, false, nullptr, nullptr}, + {0x76, false, "Reflect", "Generate reverse attack"}, +}); + +void Ep3CardStats::Stat::decode_code() { + this->type = static_cast(this->code / 1000); + int16_t value = this->code - (this->type * 1000); + if (value != 999) { + switch (this->type) { + case Type::BLANK: + this->stat = 0; + break; + case Type::STAT: + case Type::PLUS_STAT: + case Type::EQUALS_STAT: + this->stat = value; + break; + case Type::MINUS_STAT: + this->stat = -value; + break; + default: + throw runtime_error("invalid card stat type"); + } + } else { + this->stat = 0; + this->type = static_cast(this->type + 4); + } +} + +string Ep3CardStats::Stat::str() const { + switch (this->type) { + case Type::BLANK: + return ""; + case Type::STAT: + return string_printf("%hhd", this->stat); + case Type::PLUS_STAT: + return string_printf("+%hhd", this->stat); + case Type::MINUS_STAT: + return string_printf("-%d", -this->stat); + case Type::EQUALS_STAT: + return string_printf("=%hhd", this->stat); + case Type::UNKNOWN: + return "?"; + case Type::PLUS_UNKNOWN: + return "+?"; + case Type::MINUS_UNKNOWN: + return "-?"; + case Type::EQUALS_UNKNOWN: + return "=?"; + default: + return string_printf("[%02hhX %02hhX]", this->type, this->stat); + } +} + + + +bool Ep3CardStats::Effect::is_empty() const { + return (this->command == 0 && + this->expr.is_filled_with(0) && + this->when == 0 && + this->arg1.is_filled_with(0) && + this->arg2.is_filled_with(0) && + this->arg3.is_filled_with(0) && + this->unknown_a3.is_filled_with(0)); +} + +string Ep3CardStats::Effect::str_for_arg(const std::string& arg) { + if (arg.empty()) { + return arg; + } + if (arg.size() != 3) { + return arg + "/(invalid)"; + } + size_t value; + try { + value = stoul(arg.c_str() + 1, nullptr, 10); + } catch (const invalid_argument&) { + return arg + "/(invalid)"; + } + + switch (arg[0]) { + case 'a': + return arg + "/(unknown)"; + case 'C': + case 'c': + return string_printf("%s/Req. linked item (%zu=>%zu)", arg.c_str(), value / 10, value % 10); + case 'd': + return string_printf("%s/Req. die roll in [%zu, %zu]", arg.c_str(), value / 10, value % 10); + case 'e': + return arg + "/While equipped"; + case 'h': + return string_printf("%s/Req. HP >= %zu", arg.c_str(), value); + case 'i': + return string_printf("%s/Req. HP <= %zu", arg.c_str(), value); + case 'n': + try { + return string_printf("%s/Req. condition: %s", arg.c_str(), description_for_n_condition.at(value)); + } catch (const out_of_range&) { + return arg + "/(unknown)"; + } + case 'o': + return arg + "/Req. prev effect conditions passed"; + case 'p': + try { + return string_printf("%s/Target: %s", arg.c_str(), description_for_p_target.at(value)); + } catch (const out_of_range&) { + return arg + "/(unknown)"; + } + case 'r': + return string_printf("%s/Req. random with %zu%% chance", arg.c_str(), value == 0 ? 100 : value); + case 's': + return string_printf("%s/Req. cost in [%zu, %zu]", arg.c_str(), value / 10, value % 10); + case 't': + return string_printf("%s/Turns: %zu", arg.c_str(), value); + default: + return arg + "/(unknown)"; + } +} + +string Ep3CardStats::Effect::str() const { + string cmd_str = string_printf("%02hhX", this->command); + try { + const char* name = name_for_effect_command.at(this->command).name; + if (name) { + cmd_str += ':'; + cmd_str += name; + } + } catch (const out_of_range&) { } + + string when_str = string_printf("%02hhX", this->when); + try { + const char* name = description_for_when.at(this->when); + if (name) { + when_str += ':'; + when_str += name; + } + } catch (const out_of_range&) { } + + string expr_str = this->expr; + if (!expr_str.empty()) { + expr_str = ", expr=" + expr_str; + } + + string arg1str = this->str_for_arg(this->arg1); + string arg2str = this->str_for_arg(this->arg2); + string arg3str = this->str_for_arg(this->arg3); + string a3str = format_data_string(this->unknown_a3.data(), sizeof(this->unknown_a3)); + return string_printf("(cmd=%s%s, when=%s, arg1=%s, arg2=%s, arg3=%s, a3=%s)", + cmd_str.c_str(), expr_str.c_str(), when_str.c_str(), arg1str.data(), + arg2str.data(), arg3str.data(), a3str.c_str()); +} + + + +void Ep3CardStats::decode_range() { + // If the cell representing the FC is nonzero, the card has a range from a + // list of constants. Otherwise, its range is already defined in the range + // array and should be left alone. + uint8_t index = (this->range[4] >> 8) & 0xF; + if (index != 0) { + this->range.clear(0); + switch (index) { + case 1: // Single cell in front of FC + this->range[3] = 0x00000100; + break; + case 2: // Cell in front of FC and the front-left and front-right (Slash) + this->range[3] = 0x00001110; + break; + case 3: // 3 cells in a line in front of FC + this->range[1] = 0x00000100; + this->range[2] = 0x00000100; + this->range[3] = 0x00000100; + break; + case 4: // All 8 cells around FC + this->range[3] = 0x00001110; + this->range[4] = 0x00001010; + this->range[5] = 0x00001110; + break; + case 5: // 2 cells in a line in front of FC + this->range[2] = 0x00000100; + this->range[3] = 0x00000100; + break; + case 6: // Entire field (renders as "A") + for (size_t x = 0; x < 6; x++) { + this->range[x] = 0x000FFFFF; + } + break; + case 7: // Superposition of 4 and 5 (unused) + this->range[2] = 0x00000100; + this->range[3] = 0x00001110; + this->range[4] = 0x00001010; + this->range[5] = 0x00001110; + break; + case 8: // All 8 cells around FC and FC's cell + this->range[3] = 0x00001110; + this->range[4] = 0x00001110; + this->range[5] = 0x00001110; + break; + case 9: // No cells + break; + // The table in the DOL file only appears to contain 9 entries; there are + // some pointers immediately after. So probably if a card specified A-F, + // its range would be filled in with garbage in the original game. + default: + throw runtime_error("invalid fixed range index"); + } + } +} + +string name_for_rarity(uint8_t rarity) { + static const vector names({ + "N1", + "R1", + "S", + "E", + "N2", + "N3", + "N4", + "R2", + "R3", + "R4", + "SS", + "D1", + "D2", + "INVIS", + }); + try { + return names.at(rarity - 1); + } catch (const out_of_range&) { + return string_printf("(%02hhX)", rarity); + } +} + +string name_for_target_mode(uint8_t target_mode) { + static const vector names({ + "NONE", + "SINGLE", + "MULTI", + "SELF", + "TEAM", + "ALL", + "MULTI-ALLY", + "ALL-ALLY", + "ALL-ATTACK", + "OWN-FCS", + }); + try { + return names.at(target_mode); + } catch (const out_of_range&) { + return string_printf("(%02hhX)", target_mode); + } +} + +string string_for_colors(const parray& colors) { + string ret; + for (size_t x = 0; x < 8; x++) { + if (colors[x]) { + ret += '0' + colors[x]; + } + } + if (ret.empty()) { + return "none"; + } + return ret; +} + +string string_for_assist_turns(uint8_t turns) { + if (turns == 90) { + return "ONCE"; + } else if (turns == 99) { + return "FOREVER"; + } else { + return string_printf("%hhu", turns); + } +} + +string string_for_range(const parray& range) { + string ret; + for (size_t x = 0; x < 6; x++) { + ret += string_printf("%05" PRIX32 "/", range[x].load()); + } + while (starts_with(ret, "00000/")) { + ret = ret.substr(6); + } + if (!ret.empty()) { + ret.resize(ret.size() - 1); + } + return ret; +} + +string Ep3CardStats::str() const { + string type_str; + try { + type_str = name_for_card_type.at(this->type); + } catch (const out_of_range&) { + type_str = string_printf("%02hhX", this->type); + } + string rarity_str = name_for_rarity(this->rarity); + string target_mode_str = name_for_target_mode(this->target_mode); + string range_str = string_for_range(this->range); + string assist_turns_str = string_for_assist_turns(this->assist_turns); + string hp_str = this->hp.str(); + string ap_str = this->ap.str(); + string tp_str = this->tp.str(); + string mv_str = this->mv.str(); + string left_str = string_for_colors(this->left_colors); + string right_str = string_for_colors(this->right_colors); + string top_str = string_for_colors(this->top_colors); + string effects_str; + for (size_t x = 0; x < 3; x++) { + if (this->effects[x].is_empty()) { + continue; + } + if (!effects_str.empty()) { + effects_str += ", "; + } + effects_str += this->effects[x].str(); + } + return string_printf( + "[Card: %04" PRIX32 " name=%s type=%s-%02hhX rare=%s cost=%hhX+%hhX " + "target=%s range=%s assist_turns=%s cannot_move=%s cannot_attack=%s " + "hidden=%s hp=%s ap=%s tp=%s mv=%s left=%s right=%s top=%s a2=%08" PRIX32 " " + "assist_effect=[%hu, %hu] a3=[%hu, %hu] has_effects=%s effects=[%s]]", + this->card_id.load(), + this->name.data(), + type_str.c_str(), + this->subtype, + rarity_str.c_str(), + this->self_cost, + this->ally_cost, + target_mode_str.c_str(), + range_str.c_str(), + assist_turns_str.c_str(), + this->cannot_move ? "true" : "false", + this->cannot_attack ? "true" : "false", + this->hide_in_deck_edit ? "true" : "false", + hp_str.c_str(), + ap_str.c_str(), + tp_str.c_str(), + mv_str.c_str(), + left_str.c_str(), + right_str.c_str(), + top_str.c_str(), + this->unknown_a2.load(), + this->assist_effect[0].load(), + this->assist_effect[1].load(), + this->unknown_a3[0].load(), + this->unknown_a3[1].load(), + this->has_effects ? "true" : "false", + effects_str.c_str()); +} + + + Ep3DataIndex::Ep3DataIndex(const string& directory) { + static constexpr bool debug_enabled = false; + + unordered_map> card_tags; + if (debug_enabled) { + unordered_map card_text; + try { + string data = prs_decompress(load_file(directory + "/cardtext.mnr")); + StringReader r(data); + + while (!r.eof()) { + uint32_t card_id = stoul(r.get_cstr()); + + // Most cards have multiple pages, but we only care about the first page + // (for now) + string text = r.get_cstr(); + + // Preprocess text: first, delete all color markers + size_t offset = text.find("\tC"); + while (offset != string::npos) { + text = text.substr(0, offset) + text.substr(offset + 3); + offset = text.find("\tC"); + } + // Preprocess text: delete all initial lines that don't start with \t + offset = text.find('\t'); + if (offset == string::npos) { + text.clear(); + } else { + text = text.substr(offset); + } + // Preprocess text: merge lines that don't begin with \t + for (offset = 0; offset < text.size(); offset++) { + if (text[offset] == '\n' && text[offset + 1] != '\t') { + text = text.substr(0, offset) + text.substr(offset + 1); + offset--; + } + } + + // Split text into tags + vector tags; + auto lines = split(text, '\n'); + for (const auto& line : lines) { + if (line[0] == '\t' && line[1] == 'D') { + tags.emplace_back("D: " + line.substr(2)); + } else if (line[0] == '\t' && line[1] == 'S') { + tags.emplace_back("S: " + line.substr(2)); + } + } + + if (!card_text.emplace(card_id, move(text)).second) { + throw runtime_error("duplicate card text id"); + } + if (!card_tags.emplace(card_id, move(tags)).second) { + throw logic_error("duplicate card tags id"); + } + + r.go((r.where() + 0x3FF) & (~0x3FF)); + } + + } catch (const exception& e) { + log(WARNING, "Failed to load card text: %s", e.what()); + } + } + try { this->compressed_card_definitions = load_file(directory + "/cardupdate.mnr"); string data = prs_decompress(this->compressed_card_definitions); // There's a footer after the card definitions, but we ignore it - if (data.size() % sizeof(Ep3CardDefinition) != sizeof(Ep3CardDefinitionsFooter)) { + if (data.size() % sizeof(Ep3CardStats) != sizeof(Ep3CardStatsFooter)) { throw runtime_error(string_printf( "decompressed card update file size %zX is not aligned with card definition size %zX (%zX extra bytes)", - data.size(), sizeof(Ep3CardDefinition), data.size() % sizeof(Ep3CardDefinition))); + data.size(), sizeof(Ep3CardStats), data.size() % sizeof(Ep3CardStats))); } - const auto* defs = reinterpret_cast(data.data()); - size_t max_cards = data.size() / sizeof(Ep3CardDefinition); + const auto* stats = reinterpret_cast(data.data()); + size_t max_cards = data.size() / sizeof(Ep3CardStats); for (size_t x = 0; x < max_cards; x++) { // The last card entry has the build date and some other metadata (and // isn't a real card, obviously), so skip it. Seems like the card ID is // always a large number that won't fit in a uint16_t, so we use that to // determine if the entry is a real card or not. - if (defs[x].card_id & 0xFFFF0000) { + if (stats[x].card_id & 0xFFFF0000) { continue; } - shared_ptr shared_def(new Ep3CardDefinition(defs[x])); - if (!this->card_definitions.emplace(shared_def->card_id, shared_def).second) { + shared_ptr entry(new CardEntry({stats[x], {}})); + if (!this->card_definitions.emplace(entry->stats.card_id, entry).second) { throw runtime_error(string_printf( - "duplicate card id: %08" PRIX32, shared_def->card_id.load())); + "duplicate card id: %08" PRIX32, entry->stats.card_id.load())); } - // TODO: remove debugging code here - // string a2str = format_data_string(defs[x].unknown_a2.data(), sizeof(defs[x].unknown_a2)); - // string a4str = format_data_string(defs[x].unknown_a4.data(), sizeof(defs[x].unknown_a4)); - // fprintf(stderr, "[debug] %-20s = %04X %s %04X %s\n", defs[x].name.data(), defs[x].unused.load(), a2str.c_str(), defs[x].unknown_a3.load(), a4str.c_str()); + entry->stats.hp.decode_code(); + entry->stats.ap.decode_code(); + entry->stats.tp.decode_code(); + entry->stats.mv.decode_code(); + entry->stats.decode_range(); + + if (debug_enabled) { + string card_str = entry->stats.str(); + try { + string tags_str = join(card_tags.at(stats[x].card_id), ", "); + fprintf(stderr, "%s tags: [%s]\n", card_str.c_str(), tags_str.c_str()); + } catch (const out_of_range&) { + fprintf(stderr, "%s\n", card_str.c_str()); + } + } } log(INFO, "Indexed %zu Episode 3 card definitions", this->card_definitions.size()); @@ -140,7 +865,7 @@ const string& Ep3DataIndex::get_compressed_card_definitions() const { return this->compressed_card_definitions; } -shared_ptr Ep3DataIndex::get_card_definition( +shared_ptr Ep3DataIndex::get_card_definition( uint32_t id) const { return this->card_definitions.at(id); } diff --git a/src/Episode3.hh b/src/Episode3.hh index 7ed4fa0e..f9b7aea6 100644 --- a/src/Episode3.hh +++ b/src/Episode3.hh @@ -12,17 +12,77 @@ -struct Ep3CardDefinition { +// Note: Much of the structures and enums here are based on the card list file, +// and comparing the card text with the data in the file. Some inferences may be +// incorrect here, since Episode 3's card text is wrong in various places. + +struct Ep3CardStats { + enum Rarity : uint8_t { + N1 = 0x01, + R1 = 0x02, + S = 0x03, + E = 0x04, + N2 = 0x05, + N3 = 0x06, + N4 = 0x07, + R2 = 0x08, + R3 = 0x09, + R4 = 0x0A, + SS = 0x0B, + D1 = 0x0C, + D2 = 0x0D, + INVIS = 0x0E, + }; + + enum Type : uint8_t { + SC_HUNTERS = 0x00, // No subtypes + SC_ARKZ = 0x01, // No subtypes + ITEM = 0x02, // Subtype 01 = sword, 02 = gun, 03 = cane. TODO: there are many more subtypes than those 3 + CREATURE = 0x03, // No subtypes (TODO: Where are attributes stored then?) + ACTION = 0x04, // TODO: What do the subtypes mean? Are they actually flags instead? + ASSIST = 0x05, // No subtypes + }; + struct Stat { + enum Type : uint8_t { + BLANK = 0, + STAT = 1, + PLUS_STAT = 2, + MINUS_STAT = 3, + EQUALS_STAT = 4, + UNKNOWN = 5, + PLUS_UNKNOWN = 6, + MINUS_UNKNOWN = 7, + EQUALS_UNKNOWN = 8, + }; be_uint16_t code; - uint8_t type; - uint8_t stat; + Type type; + int8_t stat; + + void decode_code(); + std::string str() const; } __attribute__((packed)); + + struct Effect { + uint8_t command; + ptext expr; // May be blank if the command doesn't use it + uint8_t when; + ptext arg1; + ptext arg2; + ptext arg3; + parray unknown_a3; + + bool is_empty() const; + static std::string str_for_arg(const std::string& arg); + std::string str() const; + } __attribute__((packed)); + be_uint32_t card_id; parray jp_name; - uint8_t type; - uint8_t cost; - be_uint16_t unused; + int8_t type; // Type enum. If <0, then this is the end of the card list + uint8_t self_cost; // ATK dice points required + uint8_t ally_cost; // ATK points from allies required; PBs use this + uint8_t unused_a0; // Always 0 Stat hp; Stat ap; Stat tp; @@ -30,16 +90,49 @@ struct Ep3CardDefinition { parray left_colors; parray right_colors; parray top_colors; - parray range; - parray unknown_a2; + parray range; + be_uint32_t unused_a1; // Always 0 + // Target modes: + // 00 = no targeting (used for defense cards, mags, shields, etc.) + // 01 = single enemy + // 02 = multiple enemies (with range) + // 03 = self (assist) + // 04 = team (assist) + // 05 = everyone (assist) + // 06 = multiple allies (with range); only used by Shifta + // 07 = all allies including yourself; see Anti, Resta, Leilla + // 08 = all (attack); see e.g. Last Judgment, Earthquake + // 09 = your own FCs but not SCs; see Traitor + uint8_t target_mode; + uint8_t assist_turns; // 90 = once, 99 = forever + uint8_t cannot_move; // 0 for SC and creature cards; 1 for everything else + uint8_t cannot_attack; // 1 for shields, mags, defense actions, and assist cards + uint8_t unused_a2; // Always 0 + uint8_t hide_in_deck_edit; // 0 = player can use this card (appears in deck edit) + uint8_t subtype; // e.g. gun, sword, etc. (used for checking if SCs can use it) + uint8_t rarity; // Rarity enum + be_uint32_t unknown_a2; + // These two fields seem to always contain the same value, and are always 0 + // for non-assist cards and nonzero for assists. Each assist card has a unique + // value here and no effects, which makes it look like this is how assist + // effects are implemented. There seems to be some 1k-modulation going on here + // too; most cards are in the range 101-174 but a few have e.g. 1150, 2141. A + // few pairs of cards have the same effect, which makes it look like some + // other fields are also involved in determining their effects (see e.g. Skip + // Draw / Skip Move, Dice Fever / Dice Fever +, Reverse Card / Rich +). + parray assist_effect; + parray unknown_a3; ptext name; ptext jp_short_name; ptext short_name; - be_uint16_t unknown_a3; // Could be has_abilities? - parray unknown_a4; -} __attribute__((packed)); + be_uint16_t has_effects; // 1 if any of the following structs are not blank + Effect effects[3]; -struct Ep3CardDefinitionsFooter { + void decode_range(); + std::string str() const; +} __attribute__((packed)); // 0x128 bytes in total + +struct Ep3CardStatsFooter { be_uint32_t num_cards1; be_uint32_t unknown_a1; be_uint32_t num_cards2; @@ -222,20 +315,25 @@ class Ep3DataIndex { public: explicit Ep3DataIndex(const std::string& directory); - const std::string& get_compressed_card_definitions() const; - std::shared_ptr get_card_definition(uint32_t id) const; + struct CardEntry { + Ep3CardStats stats; + std::vector text; + }; struct MapEntry { Ep3Map map; std::string compressed_data; }; + const std::string& get_compressed_card_definitions() const; + std::shared_ptr get_card_definition(uint32_t id) const; + const std::string& get_compressed_map_list() const; std::shared_ptr get_map(uint32_t id) const; private: std::string compressed_card_definitions; - std::unordered_map> card_definitions; + std::unordered_map> card_definitions; std::string compressed_map_list; std::map> maps; diff --git a/system/ep3/cardtext.mnr b/system/ep3/cardtext.mnr new file mode 100644 index 0000000000000000000000000000000000000000..43bc0836ec470606e27e0013a8118e3cbff7240a GIT binary patch literal 87492 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 UZ-n2@TKx0$ydHf-A(2S`2YjFnk^lez literal 0 HcmV?d00001