summaryrefslogtreecommitdiff
path: root/soh/src/code
diff options
context:
space:
mode:
authorRalphie Morell <stratomaster64@gmail.com>2022-10-09 02:37:22 -0400
committerGitHub <noreply@github.com>2022-10-09 08:37:22 +0200
commit242757777c5c241e17b38aface01ff1845e91fe8 (patch)
tree0a1aaaeee856fc7d033bc31b7b4f127e5809b23b /soh/src/code
parent7e841d6156d2c4e742d31294479e842a072ba57a (diff)
Rando: Randomize Starting Age (#1685)
Diffstat (limited to 'soh/src/code')
-rw-r--r--soh/src/code/z_parameter.c18
-rw-r--r--soh/src/code/z_sram.c12
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