summaryrefslogtreecommitdiff
path: root/mm/2s2h/Rando/MiscBehavior/OnFileCreate.cpp
diff options
context:
space:
mode:
authorGarrett Cox <garrettjcox@gmail.com>2024-09-30 18:35:17 -0500
committerGarrett Cox <garrettjcox@gmail.com>2024-09-30 18:35:17 -0500
commiteb3b3cd0c0d0b82f89adcfe2cc357ec09b84fb87 (patch)
treeb25746f093005cfed00ac19973b2fb898e04f99c /mm/2s2h/Rando/MiscBehavior/OnFileCreate.cpp
parentfd9b6aee9bd7000bbf1e2a843de62e6ed4e7d242 (diff)
Add randoOption and vanilla logic option
Diffstat (limited to 'mm/2s2h/Rando/MiscBehavior/OnFileCreate.cpp')
-rw-r--r--mm/2s2h/Rando/MiscBehavior/OnFileCreate.cpp46
1 files changed, 34 insertions, 12 deletions
diff --git a/mm/2s2h/Rando/MiscBehavior/OnFileCreate.cpp b/mm/2s2h/Rando/MiscBehavior/OnFileCreate.cpp
index 59e1130d7..0f868e60a 100644
--- a/mm/2s2h/Rando/MiscBehavior/OnFileCreate.cpp
+++ b/mm/2s2h/Rando/MiscBehavior/OnFileCreate.cpp
@@ -29,21 +29,33 @@ void Rando::MiscBehavior::OnFileCreate(s16 fileNum) {
uint32_t finalSeed = boost::hash_32<std::string>{}(inputSeed);
Ship_Random_Seed(finalSeed);
- std::vector<RandoItemId> itemPool;
- for (auto& [randoCheckId, randoStaticCheck] : Rando::StaticData::Checks) {
- if (randoStaticCheck.randoCheckId != RC_UNKNOWN) {
- itemPool.push_back(randoStaticCheck.randoItemId);
- }
+ for (auto& [randoOptionId, randoStaticOption] : Rando::StaticData::Options) {
+ RANDO_SAVE_OPTIONS[randoOptionId] = CVarGetInteger(randoStaticOption.cvar, 0);
}
- for (size_t i = 0; i < itemPool.size(); i++) {
- std::swap(itemPool[i], itemPool[Ship_Random(0, itemPool.size() - 1)]);
- }
+ if (RANDO_SAVE_OPTIONS[RO_LOGIC] == RO_LOGIC_VANILLA) {
+ for (auto& [randoCheckId, randoStaticCheck] : Rando::StaticData::Checks) {
+ if (randoStaticCheck.randoCheckId != RC_UNKNOWN) {
+ RANDO_SAVE_CHECKS[randoCheckId].randoItemId = randoStaticCheck.randoItemId;
+ }
+ }
+ } else {
+ std::vector<RandoItemId> itemPool;
+ for (auto& [randoCheckId, randoStaticCheck] : Rando::StaticData::Checks) {
+ if (randoStaticCheck.randoCheckId != RC_UNKNOWN) {
+ itemPool.push_back(randoStaticCheck.randoItemId);
+ }
+ }
- for (auto& [randoCheckId, randoStaticCheck] : Rando::StaticData::Checks) {
- if (randoStaticCheck.randoCheckId != RC_UNKNOWN) {
- RANDO_SAVE_CHECKS[randoCheckId].randoItemId = itemPool.back();
- itemPool.pop_back();
+ for (size_t i = 0; i < itemPool.size(); i++) {
+ std::swap(itemPool[i], itemPool[Ship_Random(0, itemPool.size() - 1)]);
+ }
+
+ for (auto& [randoCheckId, randoStaticCheck] : Rando::StaticData::Checks) {
+ if (randoStaticCheck.randoCheckId != RC_UNKNOWN) {
+ RANDO_SAVE_CHECKS[randoCheckId].randoItemId = itemPool.back();
+ itemPool.pop_back();
+ }
}
}
@@ -52,6 +64,12 @@ void Rando::MiscBehavior::OnFileCreate(s16 fileNum) {
j["type"] = "2S2H_RANDO_SPOILER";
j["inputSeed"] = inputSeed;
j["finalSeed"] = finalSeed;
+
+ j["options"] = nlohmann::json::object();
+ for (auto& [randoOptionId, randoStaticOption] : Rando::StaticData::Options) {
+ j["options"][randoStaticOption.name] = RANDO_SAVE_OPTIONS[randoOptionId];
+ }
+
j["checks"] = nlohmann::json::object();
for (auto& [randoCheckId, randoStaticCheck] : Rando::StaticData::Checks) {
if (randoStaticCheck.randoCheckId != RC_UNKNOWN) {
@@ -101,6 +119,10 @@ void Rando::MiscBehavior::OnFileCreate(s16 fileNum) {
throw std::runtime_error("Spoiler file is not a valid spoiler file");
}
+ for (auto& [randoOptionId, randoStaticOption] : Rando::StaticData::Options) {
+ RANDO_SAVE_OPTIONS[randoOptionId] = j["options"][randoStaticOption.name].get<int>();
+ }
+
for (auto& [randoCheckId, randoStaticCheck] : Rando::StaticData::Checks) {
if (randoStaticCheck.randoCheckId != RC_UNKNOWN) {
RANDO_SAVE_CHECKS[randoCheckId].randoItemId = Rando::StaticData::GetItemIdFromName(