Skip to content

New option for Zora's Fountain : Opens automatically with Letter - #2629

Merged
fenhl merged 7 commits into
OoTRandomizer:Devfrom
GSKirox:fast_rl
Sep 27, 2026
Merged

fenhl merged 7 commits into
OoTRandomizer:Devfrom
GSKirox:fast_rl

Conversation

@GSKirox

@GSKirox GSKirox commented Sep 5, 2026 •

Copy link
Copy Markdown
Collaborator

Introduces an new option for the Zora's Fountain setting, which moves King Zora for both ages automatically when finding Ruto's Letter, without needing to show the letter as child first.
This is done by having a new GI_FAST_LETTER_BOTTLE which is used when finding Ruto's letter if this setting is enabled. This way we can easily have a different textbox to notify the player that King Zora moved, and give an empty bottle to the player directly.

fastRL

This has a slight impact on logic. First this means you get a usable bottle when finding RL even without having the means to go to Zora's Domain to empty it.
And then this also means you can go past King Zora as an adult in logic even without having the logical access to domain as child.
This was hopefully reflected properly to the logic files.

If the player starts with Ruto's Letter then the King Zora moved flag is just set automatically right away, so this is identical to Open Fountain.

Finally, there's special code to handle the case when the player finds Ruto's letter in Zora's Domain directly to move King Zora right away. Else this would need a reload of the area to take the newly put flag into account.
This gives the "Paradox Letter" check a rather funny new interaction :

2026-08-22.14-00-13.mp4

Testing

Testing and video above done on Retroarch.

@flagrama

flagrama commented Sep 5, 2026

Copy link
Copy Markdown

Bring back mweep

@GSKirox

GSKirox commented Sep 5, 2026

Copy link
Copy Markdown
Collaborator Author

I could add a mweep when finding the letter 🤔

@flagrama

flagrama commented Sep 5, 2026

Copy link
Copy Markdown

I mean make the slow version of the setting have the full cutscene again :P

@fenhl fenhl added Type: Enhancement New feature or request Component: Logic Non-trivial changes to the JSON logic files Component: ASM/C Changes some internals of the ASM/C libraries Status: Needs Review Someone should be looking at it Component: Setting specific to setting(s) Component: Patching Affects the patching of the ROM labels Sep 5, 2026
@r0bd0g

r0bd0g commented Sep 5, 2026 •

Copy link
Copy Markdown

What happens if King Zora is still frozen when you obtain the letter in his room? (Currently requires MW on main branch.) Does the Ice also move?

@r0bd0g

r0bd0g commented Sep 5, 2026 •

Copy link
Copy Markdown

Okay I'm not 100% sure how bottle-giving locations translate into a logically usable bottle. I think you just need to obtain the deliver letter location, and it gives you the deliver letter drop and that counts as a bottle? Something like that? Can anybody confirm? The change you made to has_bottle, I guess that works to give you logical bottle access, but I don't know if that's how it should be done? You could be obtaining the logical bottle item through the normal way... (though however exactly that works I'm not entirely sure lol). So what you could do is remove the change to has_bottle, move the deliver letter location to a new region, and exit to that region using the old deliver letter logic, while adding an exit to it from the root using the new fast fountain portion of the logic. I think logically that'd be the more canon way to do it, but it's kinda weird, that deliver letter event adds the event to the playthrough I think? I dunno if we really need delivering the letter in the playthrough for letter bottles that automatically empty.

Anyway, the logic as-written has a bug. Because it requires access to domain proper to obtain the deliver letter event, you wouldn't have that event to be able to reverse through king zora. You can fix this as I suggested above, but you can also get it done by adding a copy of the fast fountain logic on the connection back through king zora.

@djevangelia djevangelia left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So you get the letter bottle with regular GI letter, and through upgrade function, it becomes GI fast bottle, which has different textbox + an on item get effect to set event flag and move KZ.
It makes sense.

I thought a bit about what if use same GI, but if setting is enabled, then in item effect function move KZ + in player get item textbox function change text id. But that's really messy in comparison, and would really only make sense if several other GI:s needed to override their item table text id and/or there was a shortage of GI ids, which there isn't.

Comment thread ASM/c/en_kz.h Outdated
Comment thread ASM/c/item_effects.c Outdated
Comment thread ItemList.py Outdated
Comment thread SettingsList.py
Comment thread ASM/c/item_effects.c
@GSKirox

GSKirox commented Sep 13, 2026

Copy link
Copy Markdown
Collaborator Author

Okay I'm not 100% sure how bottle-giving locations translate into a logically usable bottle. I think you just need to obtain the deliver letter location, and it gives you the deliver letter drop and that counts as a bottle? Something like that? Can anybody confirm? The change you made to has_bottle, I guess that works to give you logical bottle access, but I don't know if that's how it should be done? You could be obtaining the logical bottle item through the normal way... (though however exactly that works I'm not entirely sure lol). So what you could do is remove the change to has_bottle, move the deliver letter location to a new region, and exit to that region using the old deliver letter logic, while adding an exit to it from the root using the new fast fountain portion of the logic. I think logically that'd be the more canon way to do it, but it's kinda weird, that deliver letter event adds the event to the playthrough I think? I dunno if we really need delivering the letter in the playthrough for letter bottles that automatically empty.

Anyway, the logic as-written has a bug. Because it requires access to domain proper to obtain the deliver letter event, you wouldn't have that event to be able to reverse through king zora. You can fix this as I suggested above, but you can also get it done by adding a copy of the fast fountain logic on the connection back through king zora.

i think i handled all of this now, can you check if it looks correct to you?

@r0bd0g

r0bd0g commented Sep 13, 2026

Copy link
Copy Markdown

It does look correct. My only reservation is I don't know how I feel about the region and the location sharing a name like that. It's probably fine, right? (Whenever a case came up like this for me I always just put the word "Region" at the end of the region version so I didn't have to ask whether it was fine or not.)

@GSKirox

GSKirox commented Sep 19, 2026

Copy link
Copy Markdown
Collaborator Author

Red ice should move correctly now with King Zora. And i renamed the logic region to be safe.

@fenhl fenhl removed the Status: Needs Review Someone should be looking at it label Sep 27, 2026
@fenhl fenhl added this to the next milestone Sep 27, 2026
@fenhl
fenhl merged commit e72b129 into OoTRandomizer:Dev Sep 27, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Component: ASM/C Changes some internals of the ASM/C libraries Component: Logic Non-trivial changes to the JSON logic files Component: Patching Affects the patching of the ROM Component: Setting specific to setting(s) Type: Enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants