diff options
| author | Garrett Cox <garrettjcox@gmail.com> | 2025-02-03 14:40:51 -0600 |
|---|---|---|
| committer | Garrett Cox <garrettjcox@gmail.com> | 2025-02-03 14:40:51 -0600 |
| commit | 79bd07938b407f56dba0d08a91a629021782fec7 (patch) | |
| tree | 63516d82e5106ce54f3aa12daf6c2f12abd6304b /mm/2s2h/Rando/MiscBehavior/OnFileCreate.cpp | |
| parent | c915a3308d985b92bca028ac702d73e7b84e28b2 (diff) | |
Initial starting items implementation
Diffstat (limited to 'mm/2s2h/Rando/MiscBehavior/OnFileCreate.cpp')
| -rw-r--r-- | mm/2s2h/Rando/MiscBehavior/OnFileCreate.cpp | 66 |
1 files changed, 58 insertions, 8 deletions
diff --git a/mm/2s2h/Rando/MiscBehavior/OnFileCreate.cpp b/mm/2s2h/Rando/MiscBehavior/OnFileCreate.cpp index aa5bbc4a2..ca0955582 100644 --- a/mm/2s2h/Rando/MiscBehavior/OnFileCreate.cpp +++ b/mm/2s2h/Rando/MiscBehavior/OnFileCreate.cpp @@ -58,16 +58,62 @@ void Rando::MiscBehavior::OnFileCreate(s16 fileNum) { // Persist options to the save gSaveContext.save.shipSaveInfo.rando.finalSeed = finalSeed; for (auto& [randoOptionId, randoStaticOption] : Rando::StaticData::Options) { - RANDO_SAVE_OPTIONS[randoOptionId] = CVarGetInteger(randoStaticOption.cvar, 0); + uint32_t defaults = 0; + switch (randoOptionId) { + case RO_STARTING_ITEMS_2: + defaults = -2145385984; + break; + case RO_STARTING_ITEMS_3: + defaults = 2048; + break; + default: + break; + } + RANDO_SAVE_OPTIONS[randoOptionId] = CVarGetInteger(randoStaticOption.cvar, defaults); + } + + if (RANDO_SAVE_OPTIONS[RO_STARTING_HEALTH] != 3) { + gSaveContext.save.saveInfo.playerData.healthCapacity = + gSaveContext.save.saveInfo.playerData.health = RANDO_SAVE_OPTIONS[RO_STARTING_HEALTH] * 0x10; + } + + if (RANDO_SAVE_OPTIONS[RO_STARTING_CONSUMABLES]) { + GiveItem(RI_DEKU_STICK); + GiveItem(RI_DEKU_NUT); + AMMO(ITEM_DEKU_STICK) = CUR_CAPACITY(UPG_DEKU_STICKS); + AMMO(ITEM_DEKU_NUT) = CUR_CAPACITY(UPG_DEKU_NUTS); + } + + std::vector<RandoItemId> startingItems = {}; + for (size_t i = 0; i < Rando::StaticData::StartingItemsMap.size(); i++) { + RandoItemId itemId = Rando::StaticData::StartingItemsMap[i]; + RandoOptionId optionId; + if (i < 32) { + optionId = RO_STARTING_ITEMS_1; + } else if (i < 64) { + optionId = RO_STARTING_ITEMS_2; + } else { + optionId = RO_STARTING_ITEMS_3; + } + uint32_t startingItemsBits = RANDO_SAVE_OPTIONS[optionId]; + if ((startingItemsBits & (1 << i)) != 0) { + startingItems.push_back(itemId); + } } - // TODO: This should be driven by the UI - std::vector<RandoItemId> startingItems = { - RI_PROGRESSIVE_SWORD, - RI_SHIELD_HERO, - RI_OCARINA, - RI_SONG_TIME, - }; + if (RANDO_SAVE_OPTIONS[RO_STARTING_MAPS_AND_COMPASSES]) { + std::vector<RandoItemId> MapsAndCompasses = { + RI_GREAT_BAY_COMPASS, RI_GREAT_BAY_MAP, RI_SNOWHEAD_COMPASS, + RI_SNOWHEAD_MAP, RI_STONE_TOWER_COMPASS, RI_STONE_TOWER_MAP, + RI_TINGLE_MAP_CLOCK_TOWN, RI_TINGLE_MAP_GREAT_BAY, RI_TINGLE_MAP_ROMANI_RANCH, + RI_TINGLE_MAP_SNOWHEAD, RI_TINGLE_MAP_STONE_TOWER, RI_TINGLE_MAP_WOODFALL, + RI_WOODFALL_COMPASS, RI_WOODFALL_MAP, + }; + + for (RandoItemId itemId : MapsAndCompasses) { + startingItems.push_back(itemId); + } + } std::unordered_map<RandoCheckId, bool> checkPool; std::vector<RandoItemId> itemPool; @@ -261,6 +307,10 @@ void Rando::MiscBehavior::OnFileCreate(s16 fileNum) { GiveItem(ConvertItem(startingItem)); } + if (RANDO_SAVE_OPTIONS[RO_STARTING_RUPEES]) { + gSaveContext.save.saveInfo.playerData.rupees = CUR_CAPACITY(UPG_WALLET); + } + if (RANDO_SAVE_OPTIONS[RO_LOGIC] == RO_LOGIC_VANILLA) { GiveItem(RI_SWORD_KOKIRI); GiveItem(RI_SHIELD_HERO); |
