Commit Graph

4127 Commits

Author SHA1 Message Date
Malkierian 9782faba44 Torch CMake and Extraction Flow cleanup (#7063)
* Fix yaml-cpp inclusion for VS building.

* Fix double-finds for rom files in the binary directory.

* Fix archive generation targets.

* Port over Proxy's change on 2ship to old ROM deletion to search all applicable subdirectories.
2026-08-14 18:54:09 +00:00
Pepe20129 db147f6a0a Update the "Hell Mode" preset (#7066) 2026-08-14 18:23:39 +00:00
David Racine a35f331189 Keep an unlisted combobox value from killing the menu (#7062)
A stored value with no entry in the combo map threw out of map::at while
drawing, which took the whole menu down as soon as a search matched the widget.
Fall back to the default and log the offender.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-13 20:22:03 +00:00
David Racine 14d9d4e8bb Pick up newly added source files without a manual re-configure (#7060)
The source globs did not use CONFIGURE_DEPENDS, so adding a file under
soh/ or src/ left it out of the build until cmake was re-run by hand,
silently and with no warning.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-13 11:26:37 +00:00
David Racine 81784a09e8 Keep the save editor's sword state alive long enough to draw (#7061)
fmt::format returns a std::string by value, so taking c_str() of the temporary
left BeginCombo reading freed memory whenever the melee weapon state fell
outside the known cases. Hold the text in a std::string instead.

Use spdlog::fmt_lib in the save editor

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-13 11:25:05 +00:00
A Green Spoon 08cb0dcf70 Fix graveyard sign checks at night (#7057) 2026-08-12 11:42:16 +00:00
Malkierian 253e672473 Adds native OOTRS archive support to remove need for custom packing. (#7056) 2026-08-12 11:34:25 +00:00
djevangelia 9772a603e8 Enemy rando, remove switch flag setting from Wolfos (#7055) 2026-08-10 13:01:04 +00:00
Philip Dubé 55b52a26a5 replace specialized bean logic with events (#5842) 2026-08-10 01:21:41 +00:00
djevangelia 7e9cf1eb1c Enemy rando, set EnTp EnSkb EnPeehat collider positions on actor init (#7049) 2026-08-10 01:10:40 +00:00
Philip Dubé 0cf2b37013 Apply Enemy Rando Dark Link fixes to Crowd Control & Sail (#7054) 2026-08-09 23:46:51 +00:00
Philip Dubé f35f134c93 Fix grammar (#7053) 2026-08-09 22:54:45 +00:00
Philip Dubé f27ddede59 Fix mirror decal not rendering on some walls (#7052) 2026-08-09 22:01:31 +00:00
Pedro Nascimento 4e39d06acc fix(audio): bound audio-heap cache tables (SIGSEGV with large custom music packs) (#6932)
Root cause of three identical field crashes (audio thread, opcode fetch
through a pointer with its low 32 bits overwritten, seconds after scene
transitions): AudioHeap_AllocPermanent writes permanentCache[index] with
index = permanentPool.count and no bound against the 32-entry array. In
SoH every soundfont sync-load is forced permanent, and custom sequences
whose SEQ.xml says CachePolicy="Temporary" ALSO allocate permanently
(the factory stores the LUS enum where CACHE_TEMPORARY == 0, while
AudioLoad_SyncLoad's switch reads 0 with the ROM convention
'permanent'). A pack with ~60 streamed customs plus vanilla fonts pushes
count past 32 within a session, after which each allocation sprays a
{ptr, size, tableType/id} triplet at 24-byte stride through
gAudioContext - entry[135]'s ptr field lands exactly on
seqPlayers[0].scriptState.pc and entry[156] on seqPlayers[1]'s (both
verified against the crash-dump registers).

- permanentCache raised 32 -> 512 (12 KB) and AllocPermanent refuses
  allocations past the array instead of corrupting memory.
- Same unbounded-index disease fixed in the three sibling writers:
  AllocCached's persistent path (16-entry array; CACHE_EITHER degrades
  to temporary, hard persistent requests fail cleanly),
  AllocPersistentSampleCacheEntry, AllocTemporarySampleCacheEntry.
- seqLoadStatus malloc sized for the full id space (sequenceMapSize +
  0xF) matching sequenceMap; custom ids above sequenceMapSize previously
  overflowed the allocation by up to 15 bytes.

Upstream SoH bugs, not branch-introduced - this branch's many-track
packs merely made the overflow reachable in normal play. Standalone
upstreamable fix.
2026-08-09 18:36:33 +00:00
Philip Dubé 490e13616e fix warnings (#7051) 2026-08-09 18:02:47 +00:00
Philip Dubé 1c856a7be0 Silence cmake warnings (#7050) 2026-08-09 16:14:25 +00:00
Philip Dubé bf7177256a FixFlexDrops (#7047) 2026-08-09 15:46:51 +00:00
Philip Dubé 0254c1f3a4 Allow GI skip for silver gauntlets chest (#7048) 2026-08-09 15:45:43 +00:00
PurpleHato 426b37ddf0 Save editor v2 (#6474) 2026-08-09 02:31:11 +00:00
Philip Dubé af485bf64c Fix bugs in hints (#7046)
1. fix filtering trials hints when only 1-3 required
2. clearing names per iteration won't work with dual hints
2026-08-09 02:07:06 +00:00
Philip Dubé 5ecff16bdb Fix heap corruption due to skybox code using GameState as PlayState (#7045)
Also corrects clearing skybox context before Skybox_Setup
2026-08-09 01:05:15 +00:00
Philip Dubé 404ec05fc5 Fix scrub message having doubled articles, add articles to fake names (#7044) 2026-08-08 22:55:37 +00:00
Pepper0ni 07944d785c Allow buying tunic as either age in rando even without shopsanity. (#7016) 2026-08-08 21:17:10 +00:00
Jameriquiah a4901abdc5 Hookify Skeleton Unregisters (#6988)
Co-authored-by: serprex <159546+serprex@users.noreply.github.com>
2026-08-08 21:16:10 +00:00
djevangelia f2f4413bff Decomp, some camera names (#7043) 2026-08-08 21:12:31 +00:00
djevangelia 982f598e01 Savestates, add sEffectContext (#7042) 2026-08-08 20:39:09 +00:00
djevangelia 5d1a396668 Polish, Twinrova intro cutscene skip with Kotake/Koume appear on climb (#7001) 2026-08-08 19:04:04 +00:00
Philip Dubé 94cebb35bd Fix GF Near Grotto North/East naming (#7041) 2026-08-08 19:02:08 +00:00
Philip Dubé b52c31f85a Get rid of Logic::Hearts, update Logic::EffectiveHealth to be 16/heart (#7026) 2026-08-08 18:56:01 +00:00
Philip Dubé 29668a06d6 Progressive BGS (#7037) 2026-08-08 18:00:23 +00:00
djevangelia 6420c435b1 Enemy rando, fix Dark Link crush etc voidouts (#7038) 2026-08-08 17:59:23 +00:00
Philip Dubé f6f21477b0 fix clang with -lm (#7039) 2026-08-08 05:37:18 +00:00
Philip Dubé 7f9d453fff use spdlog::fmt_lib over fmt, opens up SPDLOG_USE_STD_FORMAT in future (#7030)
requires spdlog 1.10
2026-08-07 06:36:37 +00:00
Philip Dubé 6706b49d1c Shuffle Treasure Chest Game (#7020) 2026-08-07 03:17:10 +00:00
Christopher Leggett 45c199b47c Minor Typo: Fix Roc's Feather Trap name typo (#7033) 2026-08-07 01:49:17 +00:00
Philip Dubé 5a8c6d0362 Make Thieves' Hideout distinct region (#7025) 2026-08-07 00:06:30 +00:00
djevangelia a089fa60ba Restoration, hover fishing condition + XZ speed (#7031) 2026-08-06 19:08:23 +00:00
Philip Dubé f5244973bd Fix clang constexpr issues with system fmt (#7024) 2026-08-06 18:36:38 +00:00
Jordan Longstaff 8a3ec35dea Add Edit buttons for custom presets (#5994) 2026-08-06 13:29:24 +00:00
Philip Dubé b76e303ceb Shuffle Silver (#5659)
Co-authored-by: Pepper0ni <93387759+Pepper0ni@users.noreply.github.com>
Co-authored-by: leggettc18 <chris@leggett.dev>
2026-08-06 01:51:59 +00:00
Philip Dubé edfdfe1338 Switch to TheMrMilchmann/setup-msvc-dev@v4 (#7027) 2026-08-06 01:01:15 +00:00
djevangelia 0ed782ddce Enhancement, drop throw-only actors toggle (#7023)
Co-authored-by: djevangelia <djevangelia>
2026-08-05 15:03:18 +00:00
David Racine 29c7e75688 Fix Gold Skulltula tokens overwriting the Bow inventory slot (#7021)
gItemSlots and sExtraItemBases only cover the item IDs that live in the
inventory, but Item_Give and Item_CheckObtainability index them with any
item ID. Reading past gItemSlots lands on gUpgradeShifts, so
INV_CONTENT(ITEM_SKULL_TOKEN) resolved to the Bow slot and stored the
token there, permanently corrupting the save.

Route both through a bounds-checked Item_GetSlot that reports SLOT_NONE
for items that have no slot, and skip the inventory store in that case.

That read is also undefined behaviour, which link-time optimization is
free to exploit: with it present clang dropped the ITEM_SKULL_TOKEN
branch and the ITEM_MEDALLION_WATER horse fixup from Item_Give
entirely, so tokens were never counted either.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-05 04:03:12 +00:00
xxAtrain223 7be4a5941a Added small key null checks. (#7019) 2026-08-05 03:21:08 +00:00
7hrone a75c8113dd Progressive Deku Nut Bag and Stick Bag models (#7015) 2026-08-04 17:09:34 +00:00
Jordan Longstaff 2fd7e052cc Cleanup and fix Dampe's race both prizes regression (#6999) 2026-08-04 13:22:20 +00:00
David Racine eafafe507e fix: seqLoadStatus OOB reads/writes for custom SAF sequences (#6917)
Custom SAF sequence IDs can exceed sequenceMapSize, causing out-of-bounds
reads/writes on the seqLoadStatus byte array (sized exactly sequenceMapSize).

This is the direct cause of intermittent battle music failure with BGM packs
(issue #5706): on the second encounter, AudioLoad_SyncLoadSeq reads a garbage
value from heap memory past seqLoadStatus[] and may find 1 (loading in
progress), causing it to return NULL early — the sequence player is never
initialized and no battle music plays.

Symmetric fix to the fontLoadStatus guards in PR #6916:
- AudioLoad_IsSeqLoadComplete: return true for OOB seqIds (custom SAF
  sequences are resource-manager-backed, not in the async-load status table)
- AudioLoad_SetSeqLoadStatus: skip update for seqId >= sequenceMapSize
- AudioLoad_SyncLoadSeq: skip the in-progress check for OOB seqIds

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-03 21:05:07 +00:00
Pepper0ni 6889132708 Fix potential key softlock with hover boosts in MQ spirit (#7014)
Using hover recoils, Adult can reach the symphony room lock without having access to Statue Room and thus the shared area of MQ spirit. This means that child logically needs an extra key to pass their early locks and get shared checks as adult can waste it, but it was not reflected in the current logic.

This change fixes the issue, requiring an extra key for the first 2 child locks while both hover boost tricks are on unless either the grate in 3 suns room (which gives a hover sliding adult statue room access) is both open and climbable, or Adult already has reverse access to the dungeon, either of which giving the shared key logic assumed Statue Room access.
2026-08-03 13:37:46 +00:00
David Racine 44f680a0b9 Fix Save Editor inventory edits leaving C/D-pad buttons desynced (#7008)
The Save Editor's Inventory tab writes gSaveContext.inventory.items[]
directly, but a C/D-pad item button mirrors the slot it points at
(buttonItems[i] == items[cButtonSlots[i-1]]). That derived value was
never refreshed, so e.g. emptying a bottle assigned to a button left the
button showing its old contents -- a desync the game's equip/inventory
consistency then trips on at the next age swap or bottle update.

Re-sync any button pointing at an edited slot after the write. Equipment
assigned to a button stores an equipment-page index in cButtonSlots
(>= inventory size), so it never matches an inventory slot and is left
untouched.
Includes a default-on "Keep C/D-pad buttons in sync" checkbox
(mirroring "Restrict to valid items") so inventory edits can intentionally
leave a slot desynced from its button for RBA practice/debugging.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-03 13:36:29 +00:00
briaguya 985590246f bump lus (#7010) 2026-08-02 21:18:42 +00:00