Skip to content

Commit

Permalink
Re-add block setting vanilla items to unshuffled locations, fix start…
Browse files Browse the repository at this point in the history
…ing items from spoiler
  • Loading branch information
garrettjoecox committed Feb 10, 2025
1 parent 1b8237e commit efbc3e2
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 3 deletions.
10 changes: 8 additions & 2 deletions mm/2s2h/Rando/MiscBehavior/OnFileCreate.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ void Rando::MiscBehavior::OnFileCreate(s16 fileNum) {
uint32_t defaults = 0;
switch (randoOptionId) {
case RO_STARTING_ITEMS_2:
defaults = -2145385984;
defaults = 2149581312;
break;
case RO_STARTING_ITEMS_3:
defaults = 2048;
Expand All @@ -72,7 +72,7 @@ void Rando::MiscBehavior::OnFileCreate(s16 fileNum) {
default:
break;
}
RANDO_SAVE_OPTIONS[randoOptionId] = CVarGetInteger(randoStaticOption.cvar, defaults);
RANDO_SAVE_OPTIONS[randoOptionId] = (uint32_t)CVarGetInteger(randoStaticOption.cvar, defaults);
}

if (RANDO_SAVE_OPTIONS[RO_STARTING_HEALTH] != 3) {
Expand Down Expand Up @@ -125,6 +125,12 @@ void Rando::MiscBehavior::OnFileCreate(s16 fileNum) {
for (auto& [randoRegionId, randoRegion] : Rando::Logic::Regions) {
for (auto& [randoCheckId, _] : randoRegion.checks) {
auto& randoStaticCheck = Rando::StaticData::Checks[randoCheckId];

// Initialize the check with it's vanilla item
if (randoStaticCheck.randoCheckId != RC_UNKNOWN) {
RANDO_SAVE_CHECKS[randoCheckId].randoItemId = randoStaticCheck.randoItemId;
}

// Skip checks that are already in the pool
if (checkPool.find(randoCheckId) != checkPool.end()) {
continue;
Expand Down
52 changes: 51 additions & 1 deletion mm/2s2h/Rando/Spoiler/Apply.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,57 @@ void ApplyToSaveContext(nlohmann::json spoiler) {
gSaveContext.save.shipSaveInfo.rando.finalSeed = spoiler["finalSeed"].get<uint32_t>();

for (auto& [randoOptionId, randoStaticOption] : Rando::StaticData::Options) {
RANDO_SAVE_OPTIONS[randoOptionId] = spoiler["options"][randoStaticOption.name].get<int>();
RANDO_SAVE_OPTIONS[randoOptionId] = spoiler["options"][randoStaticOption.name].get<(uint32_t)>();
}

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);
}
}

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);
}
}

for (RandoItemId startingItem : startingItems) {
GiveItem(ConvertItem(startingItem));
}

if (RANDO_SAVE_OPTIONS[RO_STARTING_RUPEES]) {
gSaveContext.save.saveInfo.playerData.rupees = CUR_CAPACITY(UPG_WALLET);
}

for (auto& [randoCheckId, randoStaticCheck] : Rando::StaticData::Checks) {
Expand Down

0 comments on commit efbc3e2

Please sign in to comment.