Commit Graph

4198 Commits

Author SHA1 Message Date
Philip Dubé 36d03b9bce Fix save editor v2 (#7170)
C-button loop should not read D-pad,
D-pad keys off index like SyncButtonItemsForSlot,
B-button skips, ITEM_NONE while swordless would every empty slot green
2026-09-08 19:54:32 +00:00
Philip Dubé d37a378466 Don't apply inverted X axis aiming to first person movement (#7163) 2026-09-08 17:14:07 +00:00
Pepper0ni f3830ee8ad Fix megadives with jump clamping (#7164) 2026-09-08 17:13:52 +00:00
Philip Dubé 60dabb21e3 Add Skip Warp Cutscene option to All/None cutscene skip buttons (#7160) 2026-09-08 13:38:54 +00:00
Philip Dubé e2a82213c6 Reduce big octo cutscene skip (#7158)
Pointless to give control while player waits for big octo to descend (& still play cutscene),
just opens up complications & speedrun discussion raised concern about backflip to get behind Big Octo
2026-09-08 13:38:42 +00:00
Philip Dubé a5f5903955 water temple: quadruple water level change when skipping cutscene (#7162)
prevents falling into water while it descends, reaching 2f cracked wall without tricks
2026-09-08 13:38:30 +00:00
Philip Dubé b4c41c9bf4 Jabu fish cutscene skip: immediately transition (#7159)
This avoids awkward pause, also prevents recapturing fish

Also cleanup RSK_JABU_OPEN
2026-09-08 13:38:20 +00:00
Philip Dubé 371ef6f841 Leave Start Randomizer disabled after generation fails (#7157) 2026-09-07 23:59:18 +00:00
Philip Dubé 86a55cb1fb render stick/nut bag for upgrades past first (#7156)
fix typos in their graphics
2026-09-07 21:19:09 +00:00
Pepe20129 97f4fd5925 Ice Trap Name Setting (#6588)
Co-authored-by: Philip Dubé <159546+serprex@users.noreply.github.com>
2026-09-06 18:52:08 +00:00
Pepe20129 61523391e2 Fix flare dancer crash (#7122)
Expand the main `GfxPool` buffers to 1MiB
2026-09-06 15:01:46 +00:00
David Racine 17a4c2cf89 Reopen the OPUS decoder when a note moves to another sample (#7137)
The decoder cached on a note was keyed on nothing, so a note reused for a
different streamed sample carried on decoding the previous track. Audible as
the wrong custom music: the sequence and soundfont the audio editor reports
are correct, only the samples reaching the mixer are not.

Reproduced on the game-start cutscene chain with a streamed music pack in 4
of 6 runs; 0 of 6 after.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Co-authored-by: serprex <159546+serprex@users.noreply.github.com>
2026-09-06 13:10:21 +00:00
Philip Dubé e44bd8d989 prefer spdlog over luslog in C++ code (#7149)
luslog more meant for C compatibility
2026-09-05 21:21:25 +00:00
Pepper0ni 6d65db6174 Fix missing entries in RC to randinf and new identity pattern to make future misses more obvious (#7141) 2026-09-05 21:05:13 +00:00
Philip Dubé 495a2b17db revise randomizerEnumStrings, include fmt compatibility (#7148)
prefer switch over map, avoids static initializer & reduces code size by over a megabyte
2026-09-05 19:59:44 +00:00
Pepper0ni 73a739b7a4 Fix various trick issues (#7145) 2026-09-05 15:51:12 +00:00
Philip Dubé eca767dcbf Logical bunny hood (#7032)
Co-authored-by: Pepper0ni <93387759+Pepper0ni@users.noreply.github.com>
2026-09-03 20:05:14 +00:00
Philip Dubé 0364f7076e Fix seed generation crash (#7140)
Also fix excluded locations all colliding with TODO name
2026-09-01 15:59:12 +00:00
Philip Dubé acdbc651d4 Fix compat issues loading pre-9.1 saves on 9.2+ (#7132) 2026-08-31 19:50:57 +00:00
Pepe20129 8ca5ca60aa Lang Improvements (#7130)
Massively optimize Lang::Translate & add Lang::TryTranslate.
Move all rando option text to lang json.

In the future we should have something like .TranslationTooltip() that takes the translation string to use instead of .Tooltip() as that'd allow us to change language at runtime.
2026-08-31 19:24:11 +00:00
Philip Dubé 3175ea9c20 Remove completed mask quest option, add all masks to starting items menu (#7104)
Fix masks not rendering properly with completed mask quest

Remove completed mask quest option, add all masks to starting items menu

logic: handle starting with masks being able to skip ahead a bit in trade sequence
2026-08-31 17:13:25 +00:00
Philip Dubé a7cd6c8113 Avoid randomizer generation races with file select (#7136)
Fixes both starting file while generating,
& starting generation in file loading transition

Remove RandoGenerating cvar
2026-08-31 14:04:50 +00:00
Jordan Longstaff 2dd51f1288 [Enhancement] Hide quests in File Select (#7093)
Migrate File Select CVars

Co-authored-by: Unreference <87878910+unreference@users.noreply.github.com>
2026-08-31 14:03:04 +00:00
Philip Dubé 2ba5c40da6 Bombchu logic fix: don't allow bombchus in single bag without bag, eg arms dealer (#7134) 2026-08-30 14:32:53 +00:00
Philip Dubé 896bf97a43 Move Tracker namespace to its own file (#7135)
Reuse for item tracker BeginFloatingWindows
2026-08-30 14:32:27 +00:00
David Racine 8bf26365be Honour the loop end when reading streamed music (#7129)
Streamed samples were read a whole block at a time regardless of where the loop
ended, so playback ran past it and only then jumped back. The seam therefore landed
at a random offset up to a block late instead of where the sample asked for it, which
is why a loop that is clean in an editor pops in game.

Fixes #5780.


Claude-Session: https://claude.ai/code/session_011Ex3z29fQzPEZgwH4EA641

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-30 14:03:45 +00:00
djevangelia 2ab81a9bab Fix King Zora talkstate not updating (#7125) 2026-08-30 05:48:49 +00:00
Philip Dubé 6694b56445 Fix crash when dying during remote bombchu (#7108) 2026-08-30 01:38:31 +00:00
Philip Dubé a5a1826185 Fix check tracker chest game key logic (#7133) 2026-08-30 01:32:33 +00:00
Philip Dubé bb6d1d3b4b Cleanup mExcludeLocationsOptionsArea (#7131) 2026-08-29 21:29:36 +00:00
HighTierHumann b043cdf400 Fix loop condition in WriteExcludedLocations function (#7127) 2026-08-29 21:12:30 +00:00
David Racine 808a112b98 Bump libultraship for the WASAPI shutdown hang (#7128)
Picks up Kenix3/libultraship#1212, where WasapiAudioPlayer's destructor never
closed the stream or released the client, and #1239.
2026-08-29 20:53:06 +00:00
HighTierHumann 6d1a6527d4 Bugfix for AlwaysOnFixes.cpp as well as a fallback to prevent crashes when attempting to display an textId 0 (#7123)
Add guard to check if camera mode is CAMERA_MODE_FIRST_PERSON before applying fixes

Also adds missing PLAYER_IA modes for magic arrows, as well as applying camera fix for Hookshot outside of just lakeside lab.

Move gameinteractor for change aiming camera inside bow/sling/hook aiming block
2026-08-27 19:35:25 +00:00
TOFenrir 1413ceb33d Fixed carpenter guard hylian jabbernut requirement (#7121)
Made the boss introduction scene skip only work on the carpenter guards if the player has hylian nut or has not shuffled the ability to speak.
2026-08-26 18:54:49 +00:00
Chris 4868b07122 Prevent double give by treasure chest game shopkeeper (#7118) 2026-08-25 20:55:31 +00:00
Malkierian e09e15e7e1 Gamepad Mapper (#7116)
Also one more Torch VS fix.
2026-08-25 18:23:11 +00:00
Pepper0ni cc63cc4abd fix logic bugs with Bombchus (#7117) 2026-08-25 14:59:46 +00:00
Matthew-Whisenant 78e3683ef6 Side room pot 5 and 6 logic fix (#7107) 2026-08-25 12:57:51 +00:00
Philip Dubé ce969cab90 clean up includes (#7114) 2026-08-25 08:02:02 +00:00
Philip Dubé b341e02cd5 Remove unused field progressive from Item (#7113) 2026-08-23 21:24:07 +00:00
Philip Dubé 07414fd722 Clear fire timer when blue warp skip bypasses chamber of sage (#7112)
Avoids timer from Volvagia carrying over to DMC
2026-08-23 21:08:55 +00:00
Philip Dubé 47d1383020 MQ DC: standing in corner slingshot can hit through eye through boulder (#7109) 2026-08-23 13:26:49 +00:00
David Racine 945f70222a Restore the realId assignment in AudioLoad_AsyncLoadInner (#7105)
The function declares realId and then indexes with it thirteen times -
the load-status tables, AudioLoad_SearchCaches, the table entry it reads
size and address from, every cache allocation, and the status write at the
end - but nothing assigns it. It has read an uninitialised local since
"Custom Sequences" (#2066) dropped the assignment in 2022.

Restoring the line puts back the value the rest of the function expects.
For SEQUENCE_TABLE and FONT_TABLE, AudioLoad_GetRealTableIndex returns the
id unchanged, so this is only a correctness fix in practice: the paths that
reach this function today go through the sequence script's async load
command, which is rare enough that the garbage index has not been tied to
any report.
2026-08-23 12:37:51 +00:00
Philip Dubé 7a7f942b8e Fix item tracker fishing pole & roc's feather (#7103)
ITEM_ cases should not be mixed into RG_ cases
2026-08-22 20:11:05 +00:00
djevangelia 5f52af7ef2 Enemy rando, make Keese not fall if not dead + fall downscale (#7101) 2026-08-22 19:30:14 +00:00
Jameriquiah e8b943968b Disable2DBackgrounds Fixes (#7102) 2026-08-22 16:39:52 +00:00
David Racine 27b71b1a54 Drop the seqLoadStatus bounds checks made redundant by #6932 (#7100)
#6917 guarded the three seqLoadStatus accessors against sequenceMapSize
because the array was allocated at exactly that size, so a custom sequence
id past it read and wrote off the end.

#6932 sized the array to sequenceMapSize + 0xF to match sequenceMap, which
covers the whole id space rather than rejecting the ids outside it, and also
protects the writers those guards never saw: AudioHeap_AllocCached and
AudioHeap_PopCache index seqLoadStatus directly.

The guards are now not just redundant but bounded wrong - they treat the ids
in [sequenceMapSize, sequenceMapSize + 0xF) as absent from a table that now
has room for them. Nothing breaks today because every entry starts at 5, so
AudioLoad_IsSeqLoadComplete answers true regardless and
AudioLoad_SetSeqLoadStatus already declines to overwrite a 5 - but once the
heap cache path moves such an entry off 5, the guard blocks an update that
should happen.

Reverting them restores the three functions to their decompiled form. The
sizing from #6932 and the id check in AudioLoad_SyncInitSeqPlayerInternal
remain the actual protection.
2026-08-22 14:19:04 +00:00
David Racine 22426a8127 Resolve the Fast3dGui cast once per scope instead of per call (#7095)
Reaching the Fast3d GUI is spelled out in full at every call site:

    std::dynamic_pointer_cast<Fast::Fast3dGui>(
        Ship::Context::GetRawInstance()->GetWindow()->GetGui())->GetTextureByName(name)

Each one locks the Context weak_ptr, copies a shared_ptr for the window
and one for the GUI, then runs a dynamic_cast, only to drop all three
again. InputViewer::DrawElement does that 43 times per frame, and the
item tracker and save editor repeat it once per icon drawn.

Binding it to a local once per scope leaves the behaviour identical and
reads better. The local goes in the innermost block that covers the call
sites, so it stays behind the guards that were already there: DrawElement
still resolves nothing when the input viewer is off.

RenderButton keeps its inline casts. Its two call sites are in exclusive
branches, so a local would add a cast on the path that takes neither.
2026-08-20 17:56:41 +00:00
Philip Dubé 17c57c64c5 Try fix mac build flakiness in CI with mdutil -a -i off (#7094) 2026-08-20 02:10:52 +00:00
Philip Dubé 9baa114f6b Hookify fish, refactor fishsanity (#7091) 2026-08-18 14:36:30 +00:00