Commit Graph

4042 Commits

Author SHA1 Message Date
Philip Dubé cb974d123f Fix Sail network hooks (#6944)
isConnected is constant, unnecessary. IsSaveLoaded is inappropriate for OnLoadGame/OnExitGame
2026-07-19 21:09:17 +00:00
djevangelia 2c9187f27a Bugfix, make CC invisible Link equips invisible (#6926) 2026-07-19 20:52:22 +00:00
djevangelia 9d42aedc9c Bugfix, make entrance tracker track blue warps (#6888) 2026-07-19 20:51:04 +00:00
Philip Dubé d3dc95d8f5 cleanup region names (#6943) 2026-07-19 20:34:58 +00:00
djevangelia e579e7b9a4 Polishing, climb everything door opening + sloped ledge climb up (#6936)
Allow player to try opening doors while climbing. Player can't open anything if a door doesn't offer it, so it's ok to try. Handle doors don't change player y position (player walks in the air), so manually lower it.
    Increase y height limit for doors to offer open from 15.0f/20.0f to 50.0f (normal door height). (For shutter doors height could be individualized depending on shutter door type in the future.)
    Make climbing up animation play even for sloped ledges. The animation/action breaks because game thinks player is not on ground. So, at the end of Player_ProcessSceneCollision, if player is in climbing up action, manually set BGCHECKFLAG_GROUND.
2026-07-19 17:04:32 +00:00
Christopher Leggett 8cb0c74592 Better Save Menu: Ability to Reset to Spawn from anywhere (#6937)
Adds an option for a Better Save Menu that, after saving, allows you to effectively soft-reset the current save (either return to spawn or reset to the dungeon entrance), and additionally lets you reset to spawn specifcally, even if you are in a dungeon. This allows for escaping from the rare entrance-rando related softlock that can happen.
2026-07-19 17:01:50 +00:00
djevangelia 29d4ff4205 Decomp, update AudioOcarina (code_800EC960.c) (#6941) 2026-07-19 16:54:43 +00:00
Mark Eldridge 81009e9dce Rando: Hint tracker journal improvements (#6934)
Journal ranking of not-yet-obtainable major items.
The Journal ranks item hints by item category, but the rank lookup called
Context::GetFinalGIEntry with checkObtainability = true. For any hinted item
that isn't currently obtainable, that helper substitutes a blue rupee, so
genuine major items (e.g. Anju's Lens of Truth while adult) were categorized
as junk and sorted below Pieces of Heart and Gold Skulltula Tokens.

Pass checkObtainability = false so hints rank by the true placed item's value
regardless of current reachability. Ice-trap disguises still rank as their
cover item (handled by the separate overrides path in GetFinalGIEntry), and
Mysterious Shuffle still disables the ranking.

Follow-up fix to the in-game Hint Tracker feature.

Add found-item handling to the Hint Tracker Journal.
Once every location an item hint points at has been collected, the hint is
"found": it sinks to the bottom of its group, renders dimmed with a tick
prefix, and can be removed entirely via a new "Hide Found Items" toggle. A
"Found (collected)" colour picker sets the dim colour.

Only item and item-area hints in the Journal are affected; Way of the Hero,
Foolish and area hints are untouched, and the Locations view is unchanged.
Found state is derived from each location's collection status
(ItemLocation::HasObtained), so no new save data is introduced.

Make Hint Tracker settings searchable, matching the Check Tracker.
The Check Tracker registers its checkbox settings as searchable menu widgets
(WidgetInfo + AddSearchWidget); the Hint Tracker only did so for its colours
and window type, leaving every checkbox reachable only from the dedicated
settings window. Convert the checkboxes (Enable Dragging, Only Enable While
Paused, Expand/Collapse Buttons, Search Input, Hint Totals, Hide Found Items)
to the same searchable widget pattern. The Font Size slider stays inline, as
the Check Tracker leaves its own font slider inline too.

Items group out into the seven categories. The tier collapse functions are replaced
by a single label lookup in ItemCategoryRank order, and the type-priority
key scaling grows from 4 to 8 slots to fit the extra groups.

Category labels reuse the established translations from the hint text
tables. Mysterious Shuffle still keeps the single "Items" group.
2026-07-19 14:46:48 +00:00
djevangelia dfaed90868 Savestates, player serialization (#6927) 2026-07-18 18:10:01 +00:00
Jameriquiah 8e810fb963 cleanup redundant code + fix waist dl (#6928) 2026-07-18 18:08:39 +00:00
djevangelia 033613a6cf Vanilla bugfix, ladder cutscene softlock (#6804) 2026-07-18 15:02:59 +00:00
Philip Dubé 585530f68d Fix mixed up StartingItemGive between Weird Egg & Zelda's Letter (#6921) 2026-07-13 15:32:37 +00:00
djevangelia 852fb86cf2 Rando, prevent carrying abducted Ruto into Bigocto room (#6845)
If Ruto enters Bigocto's room after she has already been abducted, the room behaves weird due to actor functions. Randomizer respawns Ruto after abduction, so this can become a problem.

The easiest solution is probably to just not let player open doors to Bigocto room while carrying Ruto after abduction.
This fix makes shutter doors in randomizer when offering player to open the door - check scene, abduction flag, if door is transition actor index 21 or 3, held actor, and if held actor is Ruto.
Looks like this: https://www.youtube.com/watch?v=2Siq2Z41Pqo

The shutter door in decomp and thus this fix uses macros that are missing here, I copied all of them to the corresponding place in actor.h as they are very useful for actor params and will be added anyway when/if code is synced with decomp.
2026-07-13 15:32:10 +00:00
djevangelia d1d6a564e5 Bugfix, grotto boulder block respawn from water voidout (#6854) 2026-07-13 15:02:11 +00:00
djevangelia 80fb8a8aa5 Bugfix, restore A alpha on pause menu age change (#6853) 2026-07-13 12:19:31 +00:00
David Racine fdb7e194cc fix(audio): bounds-check fontId to stop OOB crash with large SAF packs (#6916)
AudioLoad_IsFontLoadComplete had a stub `return true` that bypassed all
load-status checks, masking an out-of-bounds write: for large SAF packs
(many custom sequences) SetFontLoadStatus indexed fontLoadStatus[] with
fontId values larger than the fontMapSize-sized array, causing heap
corruption and semi-random crashes.

Remove the stub. Add a (size_t)fontId >= fontMapSize guard in both the
check and the setter: out-of-range IDs (custom SAF sequences that carry
no associated soundfont) are treated as "loaded" in the check and
silently skipped in the write, matching prior observable behavior while
eliminating the OOB access.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-13 12:12:43 +00:00
Philip Dubé ff7eb482d4 Don't point free cam at sky coming out of crawlspace (#6920) 2026-07-13 04:56:00 +00:00
Philip Dubé de8edbf136 Fix presets, regressed from LACS decoupling (#6919) 2026-07-13 04:22:04 +00:00
Shishu the Dragon ed7e4d0293 Rando: UX improvements of Locations page (#6817) 2026-07-13 04:11:18 +00:00
Philip Dubé 29948f27a1 take nlohmann::json by const reference instead of copying (#6918) 2026-07-13 02:49:01 +00:00
Philip Dubé c9491183f7 Optimize CustomMessageManager.cpp (#6915)
Reduce copies. Fix Capitalize & GetAllMessages only modifying unused copies
2026-07-13 01:12:41 +00:00
Mark Eldridge 1445da3376 Add Hint Tracker window for randomizer saves (#6906)
A new dockable tracker window (Randomizer menu, alongside the other
trackers) that records every hint the player has been shown and
presents them in two tabs:

- Locations: every hint location grouped by area, with hint text
  masked as "???" until the stone or NPC has actually been read.
  Auto-scrolls to the current area on scene transitions.
- Journal: only hints the player has already read, grouped by hint
  type with the most valuable first. Way of the Hero and Foolish
  entries render as compact area lines in configurable colors
  defaulting to the in-game textbox palette; item hints are ordered
  by the same adjusted item category that drives chest appearance,
  so ice trap disguises rank as their cover item, and Mysterious
  Shuffle disables the ranking.

The design is strictly spoiler-free: the tracker only ever shows what
the player has been told in-game. There is no reveal option, the
Journal hides unread hints entirely (its headers show read counts
only, never totals), and requirements like Mask of Truth are
respected because detection sits on the exact message-resolution
paths that decide whether a hint is shown.

Detection: a new OnRandoHintRevealed GameInteractor hook fires from
ReadHintMessage helpers in the gossip stone and static hint message
builders whenever a hint message is resolved for display; the tracker
subscribes to it. Read state persists per save file in a new
"hintTrackerData" SaveManager section as canonical hint names (robust
against enum reordering; unknown or malformed entries are skipped on
load), with the read set mutex-guarded against the threaded save path.

The window follows the sibling trackers' conventions: BeginFloatWindows
window/floating modes with combo-button and pause gating, a two-column
settings popout matching the Check Tracker's layout (behavior settings
left, colors right), header visibility toggles, font scaling, search
filtering, and per-save scoping with a placeholder on vanilla saves.
User-facing strings go through CustomMessage with EN/DE/FR text.

Co-authored-by: meldridge <meldridge@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-12 23:49:24 +00:00
Philip Dubé 66bb7888b0 Add save state wiring for Barinade, Bongo Bongo, & Morpha (#6914)
Rename various variables across codebase to match decomp,
many had been renamed when exposed for previous save state mechanism
2026-07-12 22:35:19 +00:00
Philip Dubé ba08197d3b Avoid double line break when revealing MQness of spirit temple (#6912) 2026-07-12 17:51:55 +00:00
djevangelia a44197712c Bugfix, prevent looping fanfares from softlocking HBA (#6874) 2026-07-12 17:51:26 +00:00
Philip Dubé f6d723b447 fix build (#6911)
GIM needed change from game interactor no longer pulling in z64.h
2026-07-12 15:49:07 +00:00
Philip Dubé c94ae8ccf3 wire decomp static savestates with macros (#6904) 2026-07-12 15:09:47 +00:00
Amber Burton 2b423c36aa GIM Restoration (#6865)
All edge cases for bottle combinations and replacement/filling mirrors the real game, as well we produce the compass text, and does not render the item exactly as the original game does. (I would have preferred rendering the item since its only cosmetic but I couldn't find a way to do it).

This also swaps the table redirect stuff for using the direct item id's which is a lot more clear and does not substitute anything for 'good enough' and covers all the edge case ids that have been documented.

This is purely a cosmetic change to present the visual of the item without affecting the cutscene making any tricks for GIM still work and just looks more polished.

This supplies effects of ALL game versions (including MZX build) as well as providing text table.

To note: we still can crash with GIM even when returning item None EVEN at least with returning Kokiri Tunic (I can't really figure out why) and there are a few items in the table that use extra data that I don't know how to implement here just yet but the info is in the docs under "Variable".

In the case of disabling the gim restoration, the game would still crash. This change adds a text id protection to prevent crashing, as well prevents invalid items from crashing directly, and also makes it so the game will no longer crash when having GIM disabled in the menu.

Co-authored-by: serprex <159546+serprex@users.noreply.github.com>
2026-07-12 15:09:06 +00:00
djevangelia 1003c462a8 Decomp pull, some z_player and global changes (#6908) 2026-07-12 14:59:10 +00:00
Jameriquiah e2daa80623 fix master sword in sheath custom equip not loading (#6909)
LoadCustomGfx's check being gated by OR condition broke gCustomMasterSwordInSheathDL, i can only assume this is because the sheathed sword DL is the "default" state called by link's skeleton. that condition in customequipment.cpp is not the cause of the log spam that #6862 aimed to fix so it was unneeded
2026-07-12 13:36:03 +00:00
louist103 ffb741b1dd remove z64.h from gameinteractor.h (#6903) 2026-07-12 04:06:30 +00:00
Philip Dubé 8a45801199 optimize frame interpolation memory (#6901)
don't generate all matrices for game tick upfront, interpolate per frame
2026-07-12 04:01:51 +00:00
Jordan Longstaff b81d47d795 Hookify text speed options (#6881) 2026-07-11 18:01:02 +00:00
Chris 1ae55a0a7e Add water switch signs to shuffle signs (#6876) 2026-07-11 17:56:26 +00:00
djevangelia 847e3cd323 Maintenance, edits and addition to Lake Hylia water control (#6884) 2026-07-11 15:18:55 +00:00
Pepe20129 bd7191875a Add color to the log level in the console log (#6589) 2026-07-11 15:13:32 +00:00
Philip Dubé db41e1b5f8 Fix audio regression playing audio too slowly (#6894)
Dither to 32000Khz
2026-07-10 20:24:11 +00:00
Jake Edvenson 49edb25c45 Optional 3rd-Person Mouse Camera Controls (#6891)
Included quick spins in disabled checks
2026-07-10 17:37:24 +00:00
Garrett Cox 417256b42c Force skipping GF cutscene in rando (#6893) 2026-07-10 06:37:16 +00:00
djevangelia 50837308b7 Decomp, update z_en_holl.c (#6890) 2026-07-09 15:44:29 +00:00
Chris 3249b96343 [Bugfix] - First quiver starting item causes crash (#6889) 2026-07-09 07:15:44 +00:00
djevangelia 73df35c6ab Bugfix, child Hookshot first person in Hylia lab (#6847) 2026-07-08 19:58:24 +00:00
djevangelia 2fc787d64b Enhancement, add SoT blocks to one point cutscene skip (#6848) 2026-07-08 16:04:29 +00:00
Philip Dubé 3a12eeaa71 cleanup lake hylia swim spawn hook (#6887) 2026-07-08 13:58:23 +00:00
Jameriquiah 10cde0b8ad gGiScaleMtx (#6886) 2026-07-08 13:47:32 +00:00
djevangelia 1133ae221a Bugfix, rando Domain to Lake entry air swim (#6873) 2026-07-08 13:46:34 +00:00
A Green Spoon 86fdb9bfe7 Fix rando items in gameplay stats (#6883)
Fixes a regression in displaying rando items and an oob check in the gameplay stats timestamps. Also adds missing random items to the list.
2026-07-08 03:38:18 +00:00
Philip Dubé bb6a80b480 fix regression where gerudo guards stopped asking if you want to be jailed (#6879) 2026-07-07 13:24:18 +00:00
Philip Dubé 5cf03a4cda pull decomp changes: actor functions, z_en_horse.c (#6877) 2026-07-07 01:51:44 +00:00
AutoJanitor 8602c6d154 fix: restore BGM after Stalfos group defeat in MQ Water Temple (#6408)
In EnTest_Destroy, the check for nearby Stalfos uses
Actor_FindNearby which includes killed actors (update == NULL)
still in the linked list. When multiple Stalfos die in the
same frame or in quick succession, the last one to be destroyed
still sees the others in the actor list and skips the BGM
restore call (func_800F5B58).

Replace Actor_FindNearby with a custom check that only counts
living actors (update != NULL). This ensures the miniboss BGM
is properly restored to the dungeon theme when the last
Stalfos in a group is defeated.

Co-authored-by: serprex <159546+serprex@users.noreply.github.com>
2026-07-05 15:32:34 +00:00