diff options
| author | Ralphie Morell <stratomaster64@gmail.com> | 2022-10-09 02:37:22 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-10-09 08:37:22 +0200 |
| commit | 242757777c5c241e17b38aface01ff1845e91fe8 (patch) | |
| tree | 0a1aaaeee856fc7d033bc31b7b4f127e5809b23b /soh/src/code | |
| parent | 7e841d6156d2c4e742d31294479e842a072ba57a (diff) | |
Rando: Randomize Starting Age (#1685)
Diffstat (limited to 'soh/src/code')
| -rw-r--r-- | soh/src/code/z_parameter.c | 18 | ||||
| -rw-r--r-- | soh/src/code/z_sram.c | 12 |
2 files changed, 30 insertions, 0 deletions
diff --git a/soh/src/code/z_parameter.c b/soh/src/code/z_parameter.c index 56864d1c4..c7766502b 100644 --- a/soh/src/code/z_parameter.c +++ b/soh/src/code/z_parameter.c @@ -1493,6 +1493,24 @@ void Inventory_SwapAgeEquipment(void) { gSaveContext.equips.equipment = gSaveContext.childEquips.equipment; gSaveContext.equips.equipment &= 0xFFF0; gSaveContext.equips.equipment |= 0x0001; + } else if (gSaveContext.n64ddFlag && Randomizer_GetSettingValue(RSK_STARTING_AGE)) { + /*If in rando and starting age is adult, childEquips is not initialized and buttonItems[0] + will be ITEM_NONE. When changing age from adult -> child, reset equips to "default" + (only kokiri tunic/boots equipped, no sword, no C-button items, no D-Pad items). + When becoming child, set swordless flag if player doesn't have kokiri sword + Only in rando to keep swordless link bugs in vanilla*/ + if (1 << 0 & gSaveContext.inventory.equipment == 0) { + gSaveContext.infTable[29] |= 1; + } + + //zero out items + for (i = 0; i < ARRAY_COUNT(gSaveContext.equips.buttonItems); i++) { + gSaveContext.equips.buttonItems[i] = ITEM_NONE; + if (i != 0) { + gSaveContext.equips.cButtonSlots[i-1] = ITEM_NONE; + } + } + gSaveContext.equips.equipment = 0x1111; } } diff --git a/soh/src/code/z_sram.c b/soh/src/code/z_sram.c index 16cbcdd33..469e6bfc5 100644 --- a/soh/src/code/z_sram.c +++ b/soh/src/code/z_sram.c @@ -368,6 +368,18 @@ void Sram_InitSave(FileChooseContext* fileChooseCtx) { break; } + int startingAge = Randomizer_GetSettingValue(RSK_STARTING_AGE); + switch (startingAge) { + case 1: //Adult + gSaveContext.linkAge = 0; + gSaveContext.entranceIndex = 0x5F4; + gSaveContext.savedSceneNum = SCENE_SPOT20; //Set scene num manually to ToT + break; + default: //Child + gSaveContext.linkAge = 1; + break; + } + int doorOfTime = Randomizer_GetSettingValue(RSK_DOOR_OF_TIME); switch (doorOfTime) { case 0: // open |
