Commit Graph

3535 Commits

Author SHA1 Message Date
djevangelia 3a3d93f732 Enemy rando, exclude Withered Deku Babas from clear rooms (#7078) 2026-08-15 19:57:04 +00:00
Philip Dubé ca0a17cfe7 bombchu bowling setting: first item (#7070)
desirable for speedrun settings that want less variance. also use for moving rando logic into hooks
2026-08-14 22:24:03 +00:00
Philip Dubé afcfe4f7bf Format JSON, include CI check (#7071) 2026-08-14 22:03:44 +00:00
Garrett Cox fa5172a58b Add advanced option for teleport trap (#6986) 2026-08-14 16:42:43 -04:00
djevangelia e048afd10a Decomp, three audio functions (#7069) 2026-08-14 20:01:49 +00:00
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
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
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