mirror of
https://github.com/HarbourMasters/Shipwright
synced 2026-07-02 12:46:07 -04:00
move randinf item handling inside set_randinf block (#6843)
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
#include "z64item.h"
|
||||
#include "variables.h"
|
||||
#include "macros.h"
|
||||
#include "functions.h"
|
||||
|
||||
GetItemCategory Randomizer_AdjustItemCategory(GetItemEntry item) {
|
||||
GetItemCategory category = item.getItemCategory;
|
||||
@@ -23,5 +24,10 @@ GetItemCategory Randomizer_AdjustItemCategory(GetItemEntry item) {
|
||||
}
|
||||
}
|
||||
|
||||
// Downgrade keys to junk if the player already has skeleton key
|
||||
if (category == ITEM_CATEGORY_SMALL_KEY && Flags_GetRandomizerInf(RAND_INF_HAS_SKELETON_KEY)) {
|
||||
category = ITEM_CATEGORY_JUNK;
|
||||
}
|
||||
|
||||
return category;
|
||||
}
|
||||
|
||||
@@ -1065,6 +1065,31 @@ extern "C" u16 Randomizer_Item_Give(PlayState* play, GetItemEntry giEntry) {
|
||||
// if it's an item that just sets a randomizerInf, set it
|
||||
if (Rando::StaticData::RandoGetToRandInf.find(item) != Rando::StaticData::RandoGetToRandInf.end()) {
|
||||
Flags_SetRandomizerInf((RandomizerInf)Rando::StaticData::RandoGetToRandInf.find(item)->second);
|
||||
if (item == RG_SKELETON_KEY) {
|
||||
Flags_SetRandomizerInf(RAND_INF_HAS_SKELETON_KEY);
|
||||
// This isn't technically necessary, because keys will no longer be consumed,
|
||||
// but for the player's sanity we display that they _have_ keys.
|
||||
gSaveContext.inventory.dungeonKeys[SCENE_FOREST_TEMPLE] = FOREST_TEMPLE_SMALL_KEY_MAX;
|
||||
gSaveContext.inventory.dungeonKeys[SCENE_FIRE_TEMPLE] = FIRE_TEMPLE_SMALL_KEY_MAX;
|
||||
gSaveContext.inventory.dungeonKeys[SCENE_WATER_TEMPLE] = WATER_TEMPLE_SMALL_KEY_MAX;
|
||||
gSaveContext.inventory.dungeonKeys[SCENE_SPIRIT_TEMPLE] = SPIRIT_TEMPLE_SMALL_KEY_MAX;
|
||||
gSaveContext.inventory.dungeonKeys[SCENE_SHADOW_TEMPLE] = SHADOW_TEMPLE_SMALL_KEY_MAX;
|
||||
gSaveContext.inventory.dungeonKeys[SCENE_BOTTOM_OF_THE_WELL] = BOTTOM_OF_THE_WELL_SMALL_KEY_MAX;
|
||||
gSaveContext.inventory.dungeonKeys[SCENE_GERUDO_TRAINING_GROUND] = GERUDO_TRAINING_GROUND_SMALL_KEY_MAX;
|
||||
gSaveContext.inventory.dungeonKeys[SCENE_THIEVES_HIDEOUT] = GERUDO_FORTRESS_SMALL_KEY_MAX;
|
||||
gSaveContext.inventory.dungeonKeys[SCENE_INSIDE_GANONS_CASTLE] = GANONS_CASTLE_SMALL_KEY_MAX;
|
||||
} else if (item >= RG_KEATON_MASK && item <= RG_MASK_OF_TRUTH) {
|
||||
if (INV_CONTENT(ITEM_TRADE_CHILD) == ITEM_NONE) {
|
||||
INV_CONTENT(ITEM_TRADE_CHILD) = (int)ITEM_MASK_KEATON + (item - RG_KEATON_MASK);
|
||||
}
|
||||
} else if (item == RG_CHILD_WALLET &&
|
||||
OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_FULL_WALLETS)) {
|
||||
Rupees_ChangeBy(99);
|
||||
} else if (item == RG_GREG_RUPEE) {
|
||||
Rupees_ChangeBy(1);
|
||||
gSaveContext.ship.stats.itemTimestamp[TIMESTAMP_FOUND_GREG] = static_cast<u32>(GAMEPLAYSTAT_TOTAL_TIME);
|
||||
}
|
||||
|
||||
return Return_Item_Entry(giEntry, RG_NONE);
|
||||
}
|
||||
|
||||
@@ -1232,31 +1257,6 @@ extern "C" u16 Randomizer_Item_Give(PlayState* play, GetItemEntry giEntry) {
|
||||
|
||||
gSaveContext.inventory.dungeonItems[mapIndex] |= bitmask;
|
||||
return Return_Item_Entry(giEntry, RG_NONE);
|
||||
} else if (item == RG_SKELETON_KEY) {
|
||||
Flags_SetRandomizerInf(RAND_INF_HAS_SKELETON_KEY);
|
||||
// This isn't technically necessary, because keys will no longer be consumed,
|
||||
// but for the player's sanity we display that they _have_ keys.
|
||||
gSaveContext.inventory.dungeonKeys[SCENE_FOREST_TEMPLE] = FOREST_TEMPLE_SMALL_KEY_MAX;
|
||||
gSaveContext.inventory.dungeonKeys[SCENE_FIRE_TEMPLE] = FIRE_TEMPLE_SMALL_KEY_MAX;
|
||||
gSaveContext.inventory.dungeonKeys[SCENE_WATER_TEMPLE] = WATER_TEMPLE_SMALL_KEY_MAX;
|
||||
gSaveContext.inventory.dungeonKeys[SCENE_SPIRIT_TEMPLE] = SPIRIT_TEMPLE_SMALL_KEY_MAX;
|
||||
gSaveContext.inventory.dungeonKeys[SCENE_SHADOW_TEMPLE] = SHADOW_TEMPLE_SMALL_KEY_MAX;
|
||||
gSaveContext.inventory.dungeonKeys[SCENE_BOTTOM_OF_THE_WELL] = BOTTOM_OF_THE_WELL_SMALL_KEY_MAX;
|
||||
gSaveContext.inventory.dungeonKeys[SCENE_GERUDO_TRAINING_GROUND] = GERUDO_TRAINING_GROUND_SMALL_KEY_MAX;
|
||||
gSaveContext.inventory.dungeonKeys[SCENE_THIEVES_HIDEOUT] = GERUDO_FORTRESS_SMALL_KEY_MAX;
|
||||
gSaveContext.inventory.dungeonKeys[SCENE_INSIDE_GANONS_CASTLE] = GANONS_CASTLE_SMALL_KEY_MAX;
|
||||
|
||||
return Return_Item_Entry(giEntry, RG_NONE);
|
||||
} else if (item >= RG_GUARD_HOUSE_KEY && item <= RG_FISHING_HOLE_KEY) {
|
||||
Flags_SetRandomizerInf(
|
||||
(RandomizerInf)((int)RAND_INF_GUARD_HOUSE_UNLOCKED + ((item - RG_GUARD_HOUSE_KEY) * 2) + 1));
|
||||
return Return_Item_Entry(giEntry, RG_NONE);
|
||||
} else if (item >= RG_KEATON_MASK && item <= RG_MASK_OF_TRUTH) {
|
||||
Flags_SetRandomizerInf((RandomizerInf)((int)RAND_INF_CHILD_TRADES_HAS_MASK_KEATON + (item - RG_KEATON_MASK)));
|
||||
if (INV_CONTENT(ITEM_TRADE_CHILD) == ITEM_NONE) {
|
||||
INV_CONTENT(ITEM_TRADE_CHILD) = (int)ITEM_MASK_KEATON + (item - RG_KEATON_MASK);
|
||||
}
|
||||
return Return_Item_Entry(giEntry, RG_NONE);
|
||||
}
|
||||
|
||||
switch (item) {
|
||||
@@ -1291,17 +1291,6 @@ extern "C" u16 Randomizer_Item_Give(PlayState* play, GetItemEntry giEntry) {
|
||||
Rupees_ChangeBy(999);
|
||||
}
|
||||
break;
|
||||
case RG_CHILD_WALLET:
|
||||
Flags_SetRandomizerInf(RAND_INF_HAS_WALLET);
|
||||
if (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_FULL_WALLETS)) {
|
||||
Rupees_ChangeBy(99);
|
||||
}
|
||||
break;
|
||||
case RG_GREG_RUPEE:
|
||||
Rupees_ChangeBy(1);
|
||||
Flags_SetRandomizerInf(RAND_INF_GREG_FOUND);
|
||||
gSaveContext.ship.stats.itemTimestamp[TIMESTAMP_FOUND_GREG] = static_cast<u32>(GAMEPLAYSTAT_TOTAL_TIME);
|
||||
break;
|
||||
case RG_TRIFORCE_PIECE:
|
||||
gSaveContext.ship.quest.data.randomizer.triforcePiecesCollected++;
|
||||
GameInteractor_SetTriforceHuntPieceGiven(true);
|
||||
|
||||
Reference in New Issue
Block a user