make Rules debug string show open cases

This commit is contained in:
Martin Michelsen
2023-09-18 10:12:14 -07:00
parent 80b9af46db
commit 9cb9e8064a
2 changed files with 87 additions and 31 deletions
+81 -26
View File
@@ -1240,69 +1240,124 @@ void Rules::clear() {
string Rules::str() const {
vector<string> tokens;
tokens.emplace_back(string_printf("char_hp=%hhu", this->char_hp));
if (this->char_hp == 0xFF) {
tokens.emplace_back("char_hp=(open)");
} else {
tokens.emplace_back(string_printf("char_hp=%hhu", this->char_hp));
}
switch (this->hp_type) {
case HPType::DEFEAT_PLAYER:
tokens.emplace_back("hp_type=DEFEAT_PLAYER");
tokens.emplace_back("hp_type=defeat-player");
break;
case HPType::DEFEAT_TEAM:
tokens.emplace_back("hp_type=DEFEAT_TEAM");
tokens.emplace_back("hp_type=defeat-team");
break;
case HPType::COMMON_HP:
tokens.emplace_back("hp_type=COMMON_HP");
tokens.emplace_back("hp_type=common-hp");
break;
default:
tokens.emplace_back(string_printf("hp_type=(%02hhX)",
static_cast<uint8_t>(this->hp_type)));
if (static_cast<uint8_t>(this->hp_type) == 0xFF) {
tokens.emplace_back("hp_type=(open)");
} else {
tokens.emplace_back(string_printf("hp_type=(%02hhX)",
static_cast<uint8_t>(this->hp_type)));
}
break;
}
tokens.emplace_back(string_printf("min_dice=%hhu", this->min_dice));
tokens.emplace_back(string_printf("max_dice=%hhu", this->max_dice));
if (this->min_dice == 0xFF) {
tokens.emplace_back("min_dice=(open)");
} else if (this->min_dice == 0x00) {
tokens.emplace_back("min_dice=1 (default)");
} else {
tokens.emplace_back(string_printf("min_dice=%hhu", this->min_dice));
}
if (this->max_dice == 0xFF) {
tokens.emplace_back("max_dice=(open)");
} else if (this->max_dice == 0x00) {
tokens.emplace_back("max_dice=6 (default)");
} else {
tokens.emplace_back(string_printf("max_dice=%hhu", this->max_dice));
}
switch (this->dice_exchange_mode) {
case DiceExchangeMode::HIGH_ATK:
tokens.emplace_back("dice_exchange=HIGH_ATK");
tokens.emplace_back("dice_exchange=high-atk");
break;
case DiceExchangeMode::HIGH_DEF:
tokens.emplace_back("dice_exchange=HIGH_DEF");
tokens.emplace_back("dice_exchange=high-def");
break;
case DiceExchangeMode::NONE:
tokens.emplace_back("dice_exchange=NONE");
tokens.emplace_back("dice_exchange=none");
break;
default:
tokens.emplace_back(string_printf("dice_exchange=(%02hhX)",
static_cast<uint8_t>(this->dice_exchange_mode)));
if (static_cast<uint8_t>(this->dice_exchange_mode) == 0xFF) {
tokens.emplace_back("dice_exchange=(open)");
} else {
tokens.emplace_back(string_printf("dice_exchange=(%02hhX)",
static_cast<uint8_t>(this->dice_exchange_mode)));
}
break;
}
tokens.emplace_back(string_printf("dice_boost=%s", this->disable_dice_boost ? "DISABLED" : "ENABLED"));
tokens.emplace_back(string_printf("deck_shuffle=%s", this->disable_deck_shuffle ? "DISABLED" : "ENABLED"));
tokens.emplace_back(string_printf("deck_loop=%s", this->disable_deck_loop ? "DISABLED" : "ENABLED"));
auto str_for_disable_bool = +[](uint8_t v) -> string {
switch (v) {
case 0x00:
return "on";
case 0x01:
return "off";
case 0xFF:
return "(open)";
default:
return string_printf("(%02hhX)", v);
}
};
tokens.emplace_back("dice_boost=" + str_for_disable_bool(this->disable_dice_boost));
tokens.emplace_back("deck_shuffle=" + str_for_disable_bool(this->disable_deck_shuffle));
tokens.emplace_back("deck_loop=" + str_for_disable_bool(this->disable_deck_loop));
switch (this->allowed_cards) {
case AllowedCards::ALL:
tokens.emplace_back("allowed_cards=ALL");
tokens.emplace_back("allowed_cards=all");
break;
case AllowedCards::N_ONLY:
tokens.emplace_back("allowed_cards=N_ONLY");
tokens.emplace_back("allowed_cards=n-only");
break;
case AllowedCards::N_R_ONLY:
tokens.emplace_back("allowed_cards=N_R_ONLY");
tokens.emplace_back("allowed_cards=n-r-only");
break;
case AllowedCards::N_R_S_ONLY:
tokens.emplace_back("allowed_cards=N_R_S_ONLY");
tokens.emplace_back("allowed_cards=n-r-s-only");
break;
default:
tokens.emplace_back(string_printf("allowed_cards=(%02hhX)",
static_cast<uint8_t>(this->allowed_cards)));
if (static_cast<uint8_t>(this->allowed_cards) == 0xFF) {
tokens.emplace_back("allowed_cards=(open)");
} else {
tokens.emplace_back(string_printf("allowed_cards=(%02hhX)",
static_cast<uint8_t>(this->allowed_cards)));
}
break;
}
tokens.emplace_back(string_printf("assist_cards=%s", this->no_assist_cards ? "DISALLOWED" : "ALLOWED"));
tokens.emplace_back("allow_assist_cards=" + str_for_disable_bool(this->no_assist_cards));
tokens.emplace_back(string_printf("time_limit=%zumin", static_cast<size_t>(this->overall_time_limit * 5)));
tokens.emplace_back(string_printf("phase_time_limit=%hhusec", this->phase_time_limit));
if (this->overall_time_limit == 0xFF) {
tokens.emplace_back("overall_time_limit=(open)");
} else if (this->overall_time_limit) {
tokens.emplace_back(string_printf("overall_time_limit=%zumin", static_cast<size_t>(this->overall_time_limit * 5)));
} else {
tokens.emplace_back("overall_time_limit=(infinite)");
}
if (this->phase_time_limit == 0xFF) {
tokens.emplace_back("phase_time_limit=(open)");
} else if (this->phase_time_limit) {
tokens.emplace_back(string_printf("phase_time_limit=%hhusec", this->phase_time_limit));
} else {
tokens.emplace_back("phase_time_limit=(infinite)");
}
tokens.emplace_back(string_printf("dialogue=%s", this->disable_dialogue ? "DISABLED" : "ENABLED"));
tokens.emplace_back("dialogue=" + str_for_disable_bool(this->disable_dialogue));
return "Rules[" + join(tokens, ", ") + "]";
}
+6 -5
View File
@@ -1019,12 +1019,12 @@ struct MapDefinition { // .mnmd format; also the format of (decompressed) quests
} __attribute__((packed));
/* 20F0 */ parray<AIParams, 3> npc_ai_params; // Unused if name[0] == 0
/* 242C */ parray<uint8_t, 8> unknown_a7; // Always FF?
/* 242C */ parray<uint8_t, 8> unknown_a7;
// This array specifies which set of AI parameters to use from aiprm.dat. If
// it's -1, then the corresponding NPC's AI parameters are defined in the
// AIParams structure above. The names of the AI parameter sets defined in
// aiprm.dat are:
// This array specifies which set of predefined AI parameters (in aiprm.dat)
// to use for each NPC. If a value in this array is -1 (FFFFFFFF), then the
// corresponding NPC's AI parameters are defined in the AIParams structure
// above. The names of the AI parameter sets defined in aiprm.dat are:
// 00 => Sample_Hunter 10 => Endu
// 01 => Glustar 11 => Heiz
// 02 => Guykild 12 => KC
@@ -1041,6 +1041,7 @@ struct MapDefinition { // .mnmd format; also the format of (decompressed) quests
// 0D => Sample_Dark 1D => Sample_Dark
// 0E => Break
// 0F => Creinu
// Presumably 0A is meant to be Stella, and they forgot to change the name.
/* 2434 */ parray<be_int32_t, 3> npc_ai_params_entry_index;
// In story mode, before_message appears before the battle if it's not blank;