-
Notifications
You must be signed in to change notification settings - Fork 236
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Shuffle dungeon rewards #2034
Shuffle dungeon rewards #2034
Conversation
@engineer124 said this about the blue warp activation/dupe issue:
|
I think the bug where loading zones don't work for a while after arriving from a blue warp is too intrusive and probably does have to be fixed, if it hasn't been. I don't like that the get item changes the optimal way to enter the Jabu blue warp. Honestly maybe there's some way to just remove the part where you have to turn and face Ruto. |
6b5c85a
to
f9deb50
Compare
This comment was marked as resolved.
This comment was marked as resolved.
f9deb50
to
ce81d94
Compare
1eb4612
to
b96836d
Compare
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
I've tried decreasing the distance check in |
This PR replaces the vanilla blue warp cutscenes with custom implementations that currently explicitly set time of day to match vanilla behavior. We should consider not setting time of day in some situations (e.g. if the blue warp goes to an area where ToD doesn't pass, or if the settings are such that it might) to reduce nonrepeatable ToD access, which can lead to nonrepeatable access to the Spirit temple for one age, which can lead to softlocks. |
b8cf756
to
904f1e7
Compare
904f1e7
to
491e538
Compare
After some more discussion regarding the ToD changes, I think the best course of action would be to make them repeatable, i.e. have blue warps also set ToD on repeated use. It removes the nonrepeatable access, it doesn't affect anything in most situations since you normally don't take a blue warp twice, and it makes a potential future blue warp ER setting a bit more unique rather than just adding 8 additional owls. |
int32_t DoorWarp1_IsSpiritRewardObtained(void) { | ||
return extended_savectx.collected_dungeon_rewards[6]; | ||
} | ||
|
||
int32_t DoorWarp1_IsShadowRewardObtained(void) { | ||
return extended_savectx.collected_dungeon_rewards[7]; | ||
} | ||
|
||
void DoorWarp1_KokiriEmerald_Overwrite(void) { | ||
z64_file.skybox_time = z64_file.day_time = 0x8000; // CLOCK_TIME(12, 00) | ||
} | ||
|
||
void DoorWarp1_GoronRuby_Overwrite(void) { | ||
z64_file.skybox_time = z64_file.day_time = 0x8000; // CLOCK_TIME(12, 00) | ||
} | ||
|
||
void DoorWarp1_ZoraSapphire_Overwrite(void) { | ||
z64_file.skybox_time = z64_file.day_time = 0x8000; // CLOCK_TIME(12, 00) | ||
} | ||
|
||
void DoorWarp1_ForestMedallion_Overwrite(void) { | ||
z64_file.skybox_time = z64_file.day_time = 0x8000; // CLOCK_TIME(12, 00) | ||
} | ||
|
||
void DoorWarp1_FireMedallion_Overwrite(void) { | ||
z64_file.skybox_time = z64_file.day_time = 0x8000; // CLOCK_TIME(12, 00) | ||
z64_file.event_chk_inf[2] |= 1 << 15; // DMT cloud circle no longer fire | ||
z64_file.timer_1_state = 0; // reset heat timer | ||
} | ||
|
||
void DoorWarp1_WaterMedallion_Overwrite(void) { | ||
z64_file.skybox_time = z64_file.day_time = 0x4800; // CLOCK_TIME(6, 45) | ||
z64_file.event_chk_inf[6] |= 1 << 9; // Lake Hylia water raised | ||
} | ||
|
||
void DoorWarp1_SpiritMedallion_Overwrite(void) { | ||
extended_savectx.collected_dungeon_rewards[6] = true; | ||
z64_file.skybox_time = z64_file.day_time = 0x8000; // CLOCK_TIME(12, 00) | ||
} | ||
|
||
void DoorWarp1_ShadowMedallion_Overwrite(void) { | ||
extended_savectx.collected_dungeon_rewards[7] = true; | ||
z64_file.skybox_time = z64_file.day_time = 0x8000; // CLOCK_TIME(12, 00) | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These feel like they should all be a single function with a switch statement, but I'm not sure if that's easily doable within the context of the ASM functions that are being overwritten
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just from looking at the asm, I don't think it's easily doable, since each of these functions are called from different locations. Maybe @engineer124 has an idea for how to do it?
Fixes #265. Fixes #1250. Fixes #1318. Closes #1833.
Special thanks:
Issues keeping this in draft state
Nice to have
Links Pocket
/ToT Reward from Rauru
location is skipped, but it should be extended to add an option to skip it but force it to be a dungeon reward, as described in Shuffle dungeon rewards #1833 (comment). Tracked as Option to force skipped reward from Rauru to be a dungeon reward #2225.Sheik in Kakariko
cutscene trigger even if you receive the last of the 3 required medallions while you're already in Kakariko as adult. Tracked as Trigger Sheik in Kakariko cutscene while already in Kakariko #2226.