Time independent skulltulas
Opening as draft. Feature isn’t fully implemented, only a proof of concept so far.
Implements #2356.
Two parts to this PR. There is the skulltula time of day feature, and a new framework to enable arbitrary changes to any of the scene or room files parsed to linked python objects. The framework automatically shifts all pointers within the files to handle new file locations and additions/deletions within the file. It will have multiple applications besides the skulltula feature:
- Detailed cutscene parsing instead of writing raw bytes (WIP). Also more easily allows writing completely new cutscenes.
- Adding any actor/object to any room, such as a sign outside Ganon’s castle for the bridge condition or anywhere else a hint might be helpful
- Entrance/exit additions, such as promoting grottos to the same framework as other entrances, or new loading planes for mixed pool door rando
- Space reclamation. Almost a MB is wasted in padding between scene and room files.
- More user friendly interface for MQ patching, and opens the door for other alternate scene options for anyone crazy enough to attempt it.
- Collision changes for problems like #2331 and for my vision of door rando without scene reloads between doors.
Todo
- [X] Test compressed roms. ~~DMA changes for compressor?~~
- [X] Update pointers outside scene files to globals in them, mainly cutscenes.
- [X] If 2 doesn’t fix problems moving file start addresses, figure that out
- [X] Integrate framework with rando patching pipeline
- [X] Move cutscene patches to framework
- [X] Move MQ patching to framework
- [X] Move any other scene changes to framework
- [X] Add setting for skulltulas ignoring time of day. Add actors/objects where needed and patch all actor parameters.
Rando Patches to Test with New System
- [ ] Cutscene Patching
- [ ] Cutscenes
- [X] Lost Woods Bridge Saria's Gift
- [X] Song cutscenes without songs as items
- [X] Song cutscenes with songs as items
- [X] Open Royal Family Tomb as both adult/child
- [ ] Darunia's Dance for Saria's Song
- [ ] Owl warps
- [X] Zelda escaping from Hyrule Castle for OoT check
- [X] Small cutscene after learning OoT song
- [ ] Epona race start
- [ ] Epona escapes to different Hyrule Field entrances
- [X] Burning Kak intro cutscene
- [X] Well draining cutscene
- [ ] Nabooru knuckle defeat
- [ ] Rainbow bridge
- [ ] Trial completion cutscenes
- [ ] Ganon's Tower collapse
- [ ] wondertalk2 actor moves
- [ ] Shadow Temple whispering maze (8x)
- [ ] Shadow Temple Truthspinner (2x)
- [ ] GTG Entrance (3x)
- [ ] GTG Stalfos room (1x)
- [ ] GTG Flame Wall Maze/Slopes Room (1x)
- [ ] GTG Pushblock Room (2x)
- [ ] GTG Rotating Statue Room (1x)
- [ ] GTG Megaton Statue/Back Enemies Room (1x)
- [ ] GTG Lava Room (3x)
- [ ] GTG Dinolfos Room (1x)
- [ ] GTG Inner Maze (1x)
- [ ] GTG Shellblade Room/Toilet (1x)
- [ ] Death Mountain Crater (1x)
- [ ] Hideout Cells (1 per cell room)
- [ ] Cutscenes
- [ ] Other Patches
- [X] Duplicate Bazaar room for Kakariko
- [X] Move Sheik from pedastal in ToT
- [ ] Ice Cavern alcove camera (duplicated in two spots in Patches.py)
- [X] Fire Temple boss loop unlocked door without keysanity
- [X] Non-MQ Water Temple door always unlocked
- [X] Graveyard ledge grabs
- [X] Owl removals
- [X] Jabu octorok position
- [X] Forest/Fire Temple switch heights
- [X] Kakariko carpenter starting position
- [X] Vanilla DC gossip stone fairy flag
- [X] Colossus Fairy entrance "...???" text
- [X] Forbid Sun's song in a bunch of cutscenes
- [X] Move Fado for adult trade shuffle
- [X] Spirit Shortcut actor tweaks
- [X] Gerudo Fortress gate guard reposition
- [X] Skip child stealth crawlspace exit
- [ ] Silver rupee shuffle MQ DC/Spirit temp->permanent flags
- [X] Well ladder rupee reposition
- [X] Shadow Temple redead shared flags for silver rupee shuffle
- [X] Song shuffle cutscene text boxes
- [X] Song shuffle location addresses
- [X] Shopsanity shop item objects in room headers
- [ ] Cow shuffle repositions
- [X] Stable
- [X] Tower
- [ ] Shuffled item actor params in set_cow_id_data
- [X] CSMC repositions
- [X] Vanilla Ganons Castle Light Trial
- [X] Vanilla Spirit Temple compass chest
- [X] Silver Gauntlet chest in glitched logic
- [X] Dead Hand spawns in vanilla Shadow/Well
- [X] Broken drops vanilla Spirit deku shield in anubis room
- [X] TCG shuffle temp flags to permanent/keysy
- [X] Remove "entrance blockers"
- [ ] Scrub shuffle actor params in set_deku_salesman_data
- [X] Jabu stone actor
- [X] Keysy dungeon/boss doors
- [ ] Ganons Tower first BK door unlock for pot shuffle
- [ ] Entrance Shuffle
- [X] Generate/write exit list for each scene
- [ ] Jabu boss exit coordinates
- [ ] Water Temple boss exit room number
- [ ] Redirect LLR exits to main exit for OW shuffle
- [ ] Redirect ZR<->Field exits to land from water
- [X] Spirit temp flag purge on entry through front door
- [ ] Grotto actor data changes in set_grotto_shuffle_data
- [ ] MQ Patching
- [ ] All rooms can be entered from all entrances
- [ ] Ice Cavern scene header patch from old system
- [ ] MQ Spirit Temple room 6 new alternate header
- [ ] ASM/C patches
- [ ] 0x26c10e3 - generic grotto ACTOR_EN_GS actor params 0x3818 -> 0x38FF
I guess for logic you'd go around to each skulltula you affected that checks for night and change at_night to (at_night or [setting]). Something to look out for is the watchtower, which will no longer be climbable in child day without a means of killing the skulltula. In closed forest, the time of day access check is skipped, so there's special logic on the night skull there to confirm you can actually get it to night somehow, and you'd also have to add the new setting as an alternative for that.
I warned you about special logic that would be needed for KF GS Know It All House! As you have it currently, in closed forest, if you start at daytime, under this new setting the skulltula will be there but you won't have logic to collect it before beating deku or finding sun's song. That skull has an extra check on it to make sure it's actually present since closed forest breaks the assumption that you will always have access to moving time of day from spawn, so you need to add the new setting as an alternative way to have the time of day to access it.
(This isn't really related to your PR, you shouldn't change anything about this, but I wonder if all of those skulltulas that check for ToD in areas where time moves already, should just have the time of day check removed. It was nice to look at before but with the new setting it's become kind of bloated. I made a choice along those lines with Peahats when reviewing enemy drop shuffle b/c separate night and day logic for them was pretty convoluted for no real benefit.)
I don't know enough about glitched to say whether or not the logic is wrong absolutely for sure or not, but at a glance I don't trust it. For example, man on roof, you check for a weapon to kill the skulltula, but you always are checking it regardless of if the skulltula is potentially there at daytime. You should get a glitched logic expert to review it, or make no glitched logic changes and mark the settings as incompatible.
(Unrelated to your PR but I was glancing over the night skulls in glitched logic and noticed some logic for buying the Giant's Knife that is assuming that the Knife isn't shuffled. This shows the dangers of marking new settings as glitched logic compatible without getting a specialist's review!)
Should this setting be enabled in the Easy Mode preset?
It would make sense. Would that need to go through some sort of vote or poll?
Current dev team call is in favor so I'd say you can just add it.
@r0bd0g >
I don't know enough about glitched to say whether or not the logic is wrong absolutely for sure or not, but at a glance I don't trust it. For example, man on roof, you check for a weapon to kill the skulltula, but you always are checking it regardless of if the skulltula is potentially there at daytime. You should get a glitched logic expert to review it, or make no glitched logic changes and mark the settings as incompatible.
(Unrelated to your PR but I was glancing over the night skulls in glitched logic and noticed some logic for buying the Giant's Knife that is assuming that the Knife isn't shuffled. This shows the dangers of marking new settings as glitched logic compatible without getting a specialist's review!)
I wouldnt worry too much about glitched logic right now, because it's being updated entirely to have all settings included. There are way more important stuff that isnt compatible at all currently and in released versions. If this is going to be slated for 9.0 as well then we can make it incorporated. I dont know the timing for this PR. Just offering support to not be concerned about glitched logic too too much atm
There's not really any timing for this PR, it will be merged once it's been code reviewed and sufficiently tested. Since it's a rather large change, that might take a while, but so is glitched logic 3.0, so it's hard to say which is more likely to be merged first. I'd recommend not including the changes for this in glitched logic 3.0 for now or perhaps maintaining them separately.
There's not really any timing for this PR, it will be merged once it's been code reviewed and sufficiently tested. Since it's a rather large change, that might take a while, but so is glitched logic 3.0, so it's hard to say which is more likely to be merged first. I'd recommend not including the changes for this in glitched logic 3.0 for now or perhaps maintaining them separately.
wasn't meaning that it would wait for it but that I'd incorporate it into logic when the time comes. Even if it's after being pulled. They are maintained separately. But if new glitch logic comes later then still dont bother worry about current glitched logic. It's too incompatible with everything currently and one more setting wouldnt make a difference lol.
I'll see if we can get a web generator for this branch set up to encourage more testing.
FYI, I don't have much free time through at least fall, possibly into next year. I'm still around, but changes might be delayed.
This PR branch is now available as a web generator at https://ootrandomizer.com/generatorDev?version=devM_ (ignore the “currently unmaintained” in the title, it is up to date with the PR). Any feedback from people testing it would be appreciated, even if that feedback is “everything worked well”.
I'm done with changes to this pending additional reviews.