630 Commits

Author SHA1 Message Date
25bbd8f7f6 feat: Add Spanish translation system (LanguageManager, Espanol.json ~950 strings, UI selector)
Some checks failed
generate-builds / generate-soh-otr (push) Has been cancelled
generate-builds / build-macos (push) Has been cancelled
generate-builds / build-linux (push) Has been cancelled
generate-builds / build-windows (push) Has been cancelled
- LanguageManager.h/cpp: Dynamic language loading from JSON files
- Espanol.json: ~950 translations extracted from all menu files
- SohMenu.cpp/h: Widget name translation with stable index-based keys
- SohMenuSettings.cpp: Dynamic language selector with persistence
- Localization.h/cpp: Stub for compilation compatibility
- PLAN_TRADUCCION.md: Complete implementation plan with analysis
2026-04-03 15:11:17 -06:00
A Green Spoon
50aed798a1 [Rando] Shuffle Beggar (#6455)
Some checks failed
generate-builds / generate-soh-otr (push) Has been cancelled
clang-format / clang-format (pull_request) Has been cancelled
generate-builds / generate-soh-otr (pull_request) Has been cancelled
generate-builds / build-macos (push) Has been cancelled
generate-builds / build-linux (push) Has been cancelled
generate-builds / build-windows (push) Has been cancelled
generate-builds / build-macos (pull_request) Has been cancelled
generate-builds / build-linux (pull_request) Has been cancelled
generate-builds / build-windows (pull_request) Has been cancelled
2026-04-03 06:01:07 +00:00
A Green Spoon
0ccff93fae add gf signs to enemy rando obj dep exlusion list (#6456) 2026-04-02 03:22:40 +00:00
A Green Spoon
db0d179b37 add missing KF and Shadow signs, eat baguette (#6454) 2026-04-02 01:21:46 +00:00
Jameriquiah
0d2454ed65 title card ia8 fix 2026-04-01 00:33:22 +00:00
A Green Spoon
412e9e262f [Rando] Shuffle Wonder Items (#6342) 2026-04-01 00:32:57 +00:00
Philip Dubé
7363e1c264 Don't hide Ganon's Boss Key Chest location while Triforce Hunt enabled (#6447) 2026-03-30 20:28:50 +00:00
A Green Spoon
317c057e86 [Rando] Shuffle Signs (#6406)
Exploding Royal Family's Tombstone grants check
2026-03-30 13:35:54 +00:00
Philip Dubé
2b336a4582 Merge pull request #6446 from HarbourMasters/develop-ackbar
merge develop-ackbar into develop
2026-03-30 06:42:08 +00:00
Chris
14b464bab2 Bean guy text formatting and rando fixes (#6444) 2026-03-30 01:33:16 +00:00
Pepper0ni
efc4086c6a Some Logic fixes (#6445)
- Visible Collision added to more Skulls in Crates for consistency with similar situations
- Visible Collision added to chests in crates in MQ fire and for more ways to hit the switch in MQ fire Lizalfos maze
- Allow any jumpslash to break the pot in red ice in ice cavern with visible collision.
- Add Visible Collision as a way to get the gold skull token in the rubble in 4F Gibdo room in MQ shadow
- Turns out, while you take fall damage if you backflip onto a building from GF above jail, the floor is perfectly fine.
- Granny's shop forgot to check the price of the item being sold for wallets.
2026-03-30 01:32:31 +00:00
Philip Dubé
7c5cccaf92 Dedupe settings.cpp (#6443) 2026-03-29 19:42:54 +00:00
Pepper0ni
972ed22167 reset possible ice trap models before populating item pool (#6442) 2026-03-29 18:05:56 +00:00
Chris
5494a81eb1 Fix market sneak hook (#6440) 2026-03-29 16:46:47 +00:00
Chris
ebea14f297 Fix displayed token count (#6441) 2026-03-29 16:45:48 +00:00
Philip Dubé
0127cbcf62 Fix debug assert caused by bad trick code (#6439) 2026-03-29 08:58:45 +00:00
A Green Spoon
a461d8f6fb [Rando] Shuffle Butterfly Fairies (#6430) 2026-03-29 07:54:01 +00:00
Chris
4729eef7c8 Make item category adjustments more consistent (#6434) 2026-03-29 07:34:59 +00:00
chartergirl64
0b3ebd584d [bug fix] Changes item tracker capacity to recognize progressive chu bag limits (#6436) 2026-03-29 07:32:40 +00:00
Pepe20129
e0a1b23525 Language System Basis (#6172)
Introduces the basis for a language system to allow the UI to be translated to any language and/or have the text changed by mods.
A lot of things would require more work but, for a proof of concept, this PR makes all randomizer trick names & descriptions translatable (currently not re-loadable at runtime as that would require deeper changes and this is already merge conflict hell every time a trick is touched).

The system works by passing it a "translation path" which is resolved in the .json including object indentation. If the resulting json object is a list of strings, instead of a string, they get concatenated (purely for organization/QoL).
2026-03-29 02:27:30 +00:00
Chris
1be7533675 Conslidate ganon2 hooks (#6432) 2026-03-28 17:52:55 +00:00
Pepper0ni
3228843886 Merge Boulder Undershoots into Boulder Collision (#6431) 2026-03-28 16:22:25 +00:00
Chris
9f61e635d2 Fix displayed token count (#6428) 2026-03-28 14:19:38 +00:00
Garrett Cox
c7180762d9 Add button to rando all rando settings (#6001) 2026-03-28 06:52:01 +00:00
Philip Dubé
178471bf20 Merge pull request #6425 from HarbourMasters/develop-ackbar
merge develop-ackbar 9.2.1 to develop
2026-03-28 06:26:13 +00:00
Philip Dubé
d1b7edfa7c 9.2.1 Ackbar Bravo (#6424) 2026-03-28 04:15:06 +00:00
Malkierian
6fea1821a1 Changed name of scarecrow's song enhancement and added to the description to clarify that it only skips song playback without the rando setting. (#6423) 2026-03-28 03:43:55 +00:00
Christopher Leggett
42ba25449e Make Infinite Ammo Cheat respect Progressive Bombchu Bag Capacities (#6421)
Cap infinite ammo for chus according to rando settings
Add bombchuUpgradeLevel to save editor
2026-03-28 02:58:41 +00:00
xxAtrain223
d1643aa196 LACS-Dungeons Check Availability (#6202)
* Fixes #5433, LACS-Dungeons beatable vs beat.

* Use CalculatingAvailableChecks in Logic::DungeonCount to check flags.
2026-03-27 19:40:34 -07:00
Philip Dubé
5576f93ef6 Hookify blue fire arrows (#6354)
Update z_bg_ice_shelter with decomp refactoring
2026-03-27 16:46:21 +00:00
Philip Dubé
7edf44e170 add tts for Roc's Feather (#6418) 2026-03-27 02:07:11 +00:00
Pepper0ni
53dc7f43ba Fix DMC oversight (#6419) 2026-03-27 01:43:36 +00:00
Pepper0ni
5f139ef311 Hookshot ladder fixes (#6417) 2026-03-26 22:39:17 +00:00
Renzo Martin Poggio
88625c4350 Add most values from gz to Value Viewer (#6411) 2026-03-26 18:55:31 +00:00
Ali
99c1f23d5b fix: Fix macOS crashing on first install use (#6412)
With the new imgui OTR generation flow, macOS would crash when Ship
was run for the first time unless com.shipofharkinian.soh had already been created.
Move the call to CheckAndCreateModFolder() earlier in execution to prevent crashing.
2026-03-26 15:12:51 +00:00
Christopher Leggett
69e03dcc52 LUS bump to fix texture pack performance (#6416) 2026-03-26 15:11:22 +00:00
Sean Latham
98ec5519cf Improve flavour of Navi's boss key hint (#6409) 2026-03-26 14:19:02 +00:00
Philip Dubé
2f32abb511 Console include cleanup (#6413)
Looking into fixing warnings about commands already being bound,
LUS initializes a console window which we ignore,
but it registers global command handlers,
SohConsoleWindow does this again, but that's also where mInputBuffer/mFilterBuffer get set

Proper fix would be removing SohConsoleWindow, but it exists to have mono font
2026-03-26 14:18:21 +00:00
Christopher Leggett
4aa6e2ec28 Move retrieval of dbEntry after Actor_Destroy (#6410)
Before I had the change back to the placeholder actor id the Dummy
Player actors were spawned with, but since we grabbed the actorDB
entry before Actor_Destroy was called it didn't matter. Move it
and the requisite log statement to after Actor_Destroy.
2026-03-26 14:18:01 +00:00
Pepper0ni
94b650ec67 Fix several logic errors, create Hooskshot Bridge trick. (#6414) 2026-03-26 03:02:54 +00:00
Pepper0ni
57269c8e46 fix volv FTR logic (#6403) 2026-03-24 20:23:20 +00:00
Christopher Leggett
5e13570b83 Fix leak of shuffled fairy bottle-swipe behavior to other actors (#6405) 2026-03-24 19:37:21 +00:00
Christopher Leggett
5fe4680a20 Adds a more compact Clear button to Check Tracker search (#6401) 2026-03-23 20:07:45 +00:00
Philip Dubé
8c4d4738cc cleanup customequipment.cpp (#6396) 2026-03-23 16:27:42 +00:00
Philip Dubé
c439d62137 Enemy rando: don't mutate ActorEntry (#6400) 2026-03-23 16:27:20 +00:00
A Green Spoon
2cfb0f73dc make non-cmc pot model major for shuffle clarity (#6398) 2026-03-23 15:46:03 +00:00
Pepper0ni
c61c1c0fec fix oversight in well logic (#6397) 2026-03-23 15:45:48 +00:00
Philip Dubé
ccdd8e63ff Enemy rando: don't mutate ActorEntry (#6395) 2026-03-23 12:41:53 +00:00
Sean Latham
5f0c0c8e2f Added minimap icons for other players in Anchor (#6372)
Icon size for other players reduced by 25%
2026-03-23 01:34:06 +00:00
Philip Dubé
ef042be5ea avoid undefined behavior when handling anchor packets (#6393) 2026-03-23 01:32:26 +00:00
Pepper0ni
0498d36428 Save Value Viewer Settings (#6392) 2026-03-23 01:31:21 +00:00
Philip Dubé
692ef416ee Fix RT_GROUND_JUMP_HARD description (#6391) 2026-03-22 19:56:22 +00:00
Philip Dubé
1949033f93 Ackbar 9.2.0 (#6389) 2026-03-22 18:10:12 +00:00
Malkierian
c758f1ad84 Add option to mute notification sounds altogether. (#6390) 2026-03-22 17:52:53 +00:00
aMannus
1d9de8544a Implement toggle for allowing background inputs (#6214) 2026-03-22 16:44:24 +00:00
Jordan Longstaff
25ee1ec3ab Fix mouse camera Y-axis inversion (#6387) 2026-03-22 15:06:54 +00:00
Philip Dubé
96c4fef05c extraction: detect task crashing (#6386) 2026-03-22 06:03:41 +00:00
Philip Dubé
b65c1c8317 Remove some unnecessary includes (#6385) 2026-03-21 20:22:32 +00:00
Pepe20129
4e82ea192a Enemy rando cleanup 2 (#6365)
Move stuff to main file, delete header & refactor lists
2026-03-21 18:46:15 +00:00
OtherBlue
2af5d21125 [Enhancement] Reworked targetting (#6322)
Adds an enhancement that changes targeting behavior, allowing

Switching targets with the chosen button combo
(In Switch mode) Untargeting by just pressing Z
2026-03-21 18:41:08 +00:00
Paul Schwabauer
b6bf97e2f1 Fix ADPCM sample buffer overread in audio synthesis (#6364)
The sampleDataStartPad and aligned variables existed solely to satisfy
the N64 RSP DMA requirement that source addresses be 16-byte aligned.
On PC, aLoadBuffer is a plain memcpy with no such constraint.

The alignment dance caused aLoadBuffer to read up to 15 bytes before
sampleData and up to 8+ bytes past the end of the sample buffer. On
platforms with strict allocator guard pages (e.g. OpenBSD), this
triggers a SIGSEGV.

A second issue remains after removing the alignment dance: nFramesToDecode
is derived from sample counts (loopEnd), but size is not always a multiple
of frameSize. loopEnd and size are derived independently during encoding
and can disagree on the final partial frame, leaving nFramesToDecode *
frameSize exceeding the remaining bytes in the buffer.

Remove sampleDataStartPad and aligned entirely. Clamp the load to
min(nFramesToDecode * frameSize, audioFontSample->size - sampleDataOffset).
The ADPCM decoder operates on DMEM, so a partial last frame in DMEM
produces at most a negligible artifact at sound termination.
2026-03-21 18:34:18 +00:00
Philip Dubé
43f77c13fb Fix memory leaks in debugconsole & CrowdControl (#6383) 2026-03-21 18:32:55 +00:00
Christopher Leggett
b8634f1d8b Fix numLoaded leak for Anchor (#6384) 2026-03-21 18:32:43 +00:00
Christopher Leggett
5c8ff76554 Custom Item Icons in Textboxes (#6343) 2026-03-20 16:37:44 +00:00
A Green Spoon
09b0fdbc93 Fix GV Waterfall Alcove Logic (#6380) 2026-03-20 16:07:14 +00:00
Christopher Leggett
f2c34d8c11 Fix Entrance Rando Grotto Voidout Crash when voiding back to an area with a background image (#6379)
Hookify bgimage load cam check and add it to entrance rando
2026-03-20 03:40:35 +00:00
Sean Latham
38e684fda3 Fixed scrub text checking merchant hint setting (#6378) 2026-03-19 20:47:35 +00:00
Philip Dubé
8f51dfbaf4 Item Tracker: don't disable Personal Notes (#6376)
Personal Notes is awkward with Combo Button Hold, but should be allowed

This avoids disabling drop down when it could otherwise be changed to Main Window

Besides, some people might be able to type while holding button combos, long live artsey.io
2026-03-19 18:24:25 +00:00
Philip Dubé
04ed1825f0 Fix excluded locations regressions causing crash (#6375) 2026-03-19 15:50:52 +00:00
Philip Dubé
94a02dd53a Granny: don't sell blue potion / item without claim check when adult trade not shuffled (#6363) 2026-03-19 13:33:32 +00:00
Philip Dubé
6a9567b369 Fix rendering double digit key count (#6371) 2026-03-19 01:39:46 +00:00
Philip Dubé
9f6ffc9f2a z_en_ko.c: port over more improvements from decomp, add hook to fix vanilla forest quest state bug (#6373) 2026-03-19 01:38:56 +00:00
Philip Dubé
2f12677b25 Refactor Maps & Compasses coloring hook, remove PreFunc (#6351)
PreFunc for map/compass coloring & jabber nut coloring doesn't work in file select menu,
could make them always enabled in file select, but this seems simpler

Also fix map colors & ice cavern compass color
2026-03-19 00:14:37 +00:00
Pepper0ni
a40ca58aba Misc logic fixes (#6370) 2026-03-18 17:38:43 +00:00
Philip Dubé
1f57f72acd Hookify Sunlight Arrows (#6366) 2026-03-18 16:23:33 +00:00
Philip Dubé
d7b4e5a24d Fix heavy block in front of light trial having unending quake (#6367) 2026-03-18 03:14:34 +00:00
Philip Dubé
97eaa8b3e0 clean up comments (#6369) 2026-03-18 01:27:08 +00:00
Philip Dubé
e7dce8e055 Keep StatsWindow fps rendered stable (#6368) 2026-03-18 01:21:09 +00:00
Philip Dubé
908ecbb795 Classify chest CMC for bombchus as lesser, not junk (#6349) 2026-03-17 17:41:43 +00:00
Philip Dubé
716f6bc042 Always call RandomizerCheckObjects::UpdateImGuiVisibility for locations view (#6352) 2026-03-17 17:41:20 +00:00
Philip Dubé
4e3b8d0b13 Fix happy mask salesman to check flags instead of inventory for SOLD OUT (#6355)
Fixes getting locked out of mask quest with mask select
2026-03-17 17:41:04 +00:00
Philip Dubé
c906c71f71 Song from Malon: requires hylian jabbernut (#6357) 2026-03-17 17:40:37 +00:00
Philip Dubé
e9ef09eee4 Fix RBA gauntlet colors to match console (#6359)
Also fix tracker to show golden gauntlets while wearing glitched gauntlets,
& don't crash save editor
2026-03-17 17:40:08 +00:00
Philip Dubé
cefc9c02fa update gh actions, fix cmake whitespace (#6361) 2026-03-17 04:54:04 +00:00
Pepe20129
b35883e1f6 Enemy rando cleanup (#6327)
Change Actor_SpawnEntry to use VB
Move adult zelda collapse stalfos to a explicit hook
Move dark link to a explicit hook
Some more canRandomize that were not needed
Move bg_haka & bg_haka_tubo to explicit hooks
Move en_vali to an explicit hook
Move bg_mori_bigst to an explicit hook
Fix door opening before the enemies are killed
Remove `canRandomize` parameter
Move bg_haka_huta to explicit hooks
2026-03-17 04:53:33 +00:00
Philip Dubé
c93b6188c8 Fix swimvoid in Zora River respawning in unloaded room (#6360)
Caused by spawning in Zora's River with entrance rando,
going downstream to different room, then swimvoid

Before the area by waterfall would not be loaded,
instead downstream still loaded
2026-03-17 04:14:18 +00:00
Philip Dubé
e6d6b6d7d1 Fix loading wrong day/night scene after blue warp in rando (#6350)
When entering a dungeon like well at night, defeating a boss that changes time to day, Kakariko Village would load with daylight but act like it's night

Skipping the blue warp cutscene meant dayTime and nightFlag weren't properly in sync. Clear `gSaveContext.nightFlag` when adjusting time of day
2026-03-17 01:02:15 +00:00
Philip Dubé
b15ac97dea Fix adult trade items spoiling during file load in rando (#6358) 2026-03-16 21:35:32 +00:00
Philip Dubé
45449623bb MAX_MQ_DUNGEON_COUNT (#6353)
Co-authored-by: ganesh1828
2026-03-16 19:01:33 +00:00
Philip Dubé
7899b6a048 Grass names: don't list prefix, prefix is added already (#6347) 2026-03-14 14:09:02 +00:00
A Green Spoon
614ec084fa update item list (#6340) 2026-03-09 20:08:00 +00:00
Matt Jakubowski
005044868a CC fixes (#6341) 2026-03-09 20:07:37 +00:00
Philip Dubé
7767cb6d39 Reduce trailing newlines in tooltips/logs (#6337)
Reduce trailing newlines in tooltips/logs, fix CanUse warnings
2026-03-09 00:27:47 +00:00
Pepper0ni
139381a0e0 Add Fire Trial to Fewer Tunic Requirements (#6336) 2026-03-09 00:21:31 +00:00
Philip Dubé
63859efa40 Don't refer to grass patch as bush (#6335)
Decomp refers to both kusa & wood02 as bushes, but for shuffles reserve bush for wood02
2026-03-08 19:15:16 +00:00
Philip Dubé
0f948efb51 Keep Nayru's Love & Farore's Wind in scarce item pool (#6334)
Consistent with n64 rando
2026-03-08 14:16:33 +00:00
Philip Dubé
99e60b81fd fix rando fire temple goron text formatting (#6332)
AutoFormat isn't suitable for text using escape codes, but unlike other texts this collection uses a mix of escape codes & our formatting codes. In such scenarios Format avoids mangling things
2026-03-08 04:28:55 +00:00
Philip Dubé
3174545749 Fix Ganondorf hint formatting (#6331) 2026-03-08 02:35:08 +00:00
Pepper0ni
a1aa046814 ensure flag is correctly set for randomiser (#6330) 2026-03-07 18:22:42 +00:00
Pepper0ni
60ec65592a Add trick for Hookshotting ladders (#6329) 2026-03-07 18:21:04 +00:00
Pepper0ni
6deff6d749 Enforce mask select properly on completed (#6326) 2026-03-05 22:07:06 +00:00
A Green Spoon
92a1d260da Choose Link's Pocket Dungeon Reward Type (#6213) 2026-03-05 22:05:55 +00:00
A Green Spoon
6340ad3d5c Hookify Hookshot Reticle Changes (#6279) 2026-03-05 16:11:36 +00:00
Philip Dubé
63597ec633 Prevent winning Talon's game without str0. Prevent starting Diving Game without Zora Jabbernut (#6324) 2026-03-04 15:35:45 +00:00
Pepper0ni
7522f31cc8 Refactor DMC logic (#6294)
Refactors Death Mountain Crater logic to work in a more straightforward, if verbose, applies Tunicless navigation consistently, and paves over some small oversights.

As Child must be able to navigate DMC to some degree due to Child only checks, and logic should be consistent between Child and Adult, DMC no longer hard requires Tunic in any scenario. Instead checks and exits are split into regions, and each entrance has a "Fewer Tunic Requirements" heart count associated with it for each region which is then increased by 50% (rounding up) when FTR is off. This applies to both Child and Adult.
2026-03-04 00:44:56 +00:00
Philip Dubé
b6df96c530 Add dependencies to docs/BUILDING.md (#6304)
Remove openSUSE because I can't figure out their package convention
2026-03-03 16:49:53 +00:00
Pepper0ni
40ad4fed82 Merge Visible Collision and Hammer Through Collision (#6317) 2026-03-03 04:04:57 +00:00
Philip Dubé
3882086677 Fix toggle speed modifier for walking (#6321) 2026-03-03 02:21:18 +00:00
Christopher Leggett
49aa33038d Restores Greg's textbox icon (#6320) 2026-03-03 00:38:01 +00:00
Philip Dubé
b65acb9c9d fix typo (#6319) 2026-03-02 22:33:13 +00:00
Pepper0ni
91425a39ac Add Death Mountain Trail Child Climb Without Shield (#6318) 2026-03-02 21:13:19 +00:00
Philip Dubé
f19ad1e75b timesaver_hook_handlers: use COND_HOOK (#6309) 2026-03-02 20:25:03 +00:00
Philip Dubé
2a335b1cd8 move speed modifier settings to cheats (#6277)
Combine into one speed modifier. Refactor config migrations. Add v6
2026-03-02 18:26:37 +00:00
Olivia!!
6f01d68c3c Fix missing logic for Medallion Locked Trials (#6314) 2026-03-02 07:10:58 +00:00
Philip Dubé
d4c1118d1b Hookify DisableKokiriDrawDistance (#6305)
Also update some of Mido's code with latest decomp

Looking at decomp, EnKo doesn't set appearDist to 180.0
2026-03-02 02:10:04 +00:00
Shishu the Dragon
0d41af6978 Ivan: Fix intermittent crash with certain items (#6253) 2026-03-02 01:22:37 +00:00
Shishu the Dragon
460a098bec Dev: Mac/Linux compat for VS Code tasks (#6211) 2026-03-02 01:22:37 +00:00
xxAtrain223
2b650a4979 Stringify Randomizer Enums (#6223)
Moved randomizer enums from randomizerTypes.h to randomizerEnums.h and helpers
2026-03-02 00:58:24 +00:00
red
2c07edc4eb Add disable jabu wobble accessibility option (#6280) 2026-03-02 00:45:17 +00:00
Philip Dubé
0a946e5b9d Roc's Feather: avoid OOB access to gItemAgeReqs (#6297)
This fix is a bit blunt, but in the absence of a better idea it exists
2026-03-01 14:55:16 +00:00
Philip Dubé
b07c64ecf9 Fix song of storms cutscene (#6310) 2026-02-28 23:51:13 +00:00
Philip Dubé
a547d51abb Fix Malon text on Lon Lon Ranch in rando (#6308)
Missed in #6299
2026-02-28 16:33:16 +00:00
Pepe20129
d841357fd4 Update libultraship (#6283) 2026-02-28 16:30:30 +00:00
Pepe20129
8dd03ef097 Trap Improvements (#6302)
* Move some trap stuff to `Traps.cpp`

* Split `GetTrapTrickModel` into a function

* Split `ShouldJunkItemBeTrap` into a function

* Move `BuildIceTrapMessage` to `Traps.cpp`

* Allow ice trap messages to have the item name. Only for english for now due to article issues.
2026-02-28 15:53:05 +00:00
Jerom Venneker
a393f48c7c Fix missable Malon check (#6299)
Added a case for the VB_MALON_RETURN_FROM_CASTLE vanilla behavior flag.
This lets Malon stay until you both get the egg and wake up Talon making the egg flag unmissable.
2026-02-28 14:57:27 +00:00
Philip Dubé
00ac1d566d spdlog: don't pass printf format string (#6307) 2026-02-28 04:20:09 +00:00
Jeffrey Crowell
fcf7d4bd15 Add CoreAudio support (#6270) 2026-02-28 03:34:29 +00:00
Jameriquiah
9f56ef5090 unsheathe without slashing (#6216) 2026-02-27 19:34:56 -07:00
Philip Dubé
d46bfd9716 Avoid auto saving in file select (#6298) 2026-02-28 00:48:34 +00:00
Philip Dubé
5a7bc9a459 Remove unnecessary includes of OTRGlobals.h in actor overlays (#6306) 2026-02-28 00:44:41 +00:00
Jameriquiah
6b51909aa5 tooltip otr to o2r (#6300) 2026-02-27 14:42:45 +00:00
Philip Dubé
fe5dce24b5 Misc fixes for Shuffle Climb (#6296)
Rename deku tree grass on 2F, move logic accordingly
Include climb requirement in Dodongo's Armos Room without unintuitive jumps
Spirit typo had locked door before child climb linked to 2F instead of 1F
2026-02-27 02:36:51 +00:00
Christopher Leggett
c3ffaa918d Don't autoformat altar hints twice. (#6295) 2026-02-26 23:26:52 +00:00
Philip Dubé
b6cdc6c490 Fix kak backyard logic with shuffle climb (#6288)
Missed ladder to potion shop
2026-02-26 22:28:00 +00:00
Christopher Leggett
d4d3e8bc0f Port Scrolling Texture Interpolation over from 2Ship (#6224) 2026-02-26 13:36:55 +00:00
coavins
c2cf154e3e Update .vscode and .devcontainer files (#6246)
This commit makes some changes to the dockerfile to make it work again.
We install cmake from source in order to meet the minimum required
version specified in the CMakeLists.txt file. We build the same version
that is installed on the CI runner image.

We also build tinyxml2 from source because we need some cmake files
that are apparently not included in the apt package.
2026-02-26 01:24:22 +00:00
Pepper0ni
0e99b30e91 Add StartingAge limits to Closed Forest (#6282) 2026-02-21 17:50:36 +00:00
Pepper0ni
19df711123 remove castle moat spawn override (#6284) 2026-02-21 17:48:50 +00:00
Pepper0ni
0702b11b90 fix carpet man logic (#6285) 2026-02-21 17:48:15 +00:00
A Green Spoon
d9ebce9f9f hookify additional reticles (#6278) 2026-02-17 20:08:06 +00:00
Pepper0ni
4cae79fd89 Change numbered tricks in preset and settings to use codes. (#6267) 2026-02-17 16:34:38 +00:00
Philip Dubé
8e1f1aea82 Fix location list (#6276)
Base has name in Flags column, this should not be null
Omit on unknown location to match other Location::Base rows
2026-02-16 14:53:32 -07:00
Philip Dubé
e987cdae24 Fix misc issues (#6275)
fix #3990 #6055 #6145 #6271
2026-02-16 17:52:31 +00:00
Philip Dubé
c63f57850f Deku Theater: better handling of timesaver being disabled for shuffle speak (#6265)
also skip first 2 seconds of scrubs deciding to pop out of ground
2026-02-16 16:21:35 +00:00
Philip Dubé
b1fea3fe78 Bean Souls: don't lose flag when soul found in same location as bean patch (#6264) 2026-02-16 16:16:35 +00:00
Jordan Longstaff
0210374cc4 Enable missing music entries in audio editor (#5685)
* Enable missing music entries in audio editor

* Fix mislabeled tracks "Ocarina of Time" and "Seal of Six Sages" (mirrored in decomp)
2026-02-14 20:31:19 -07:00
anthony-barricelli
d67dcb92f2 Bug Fix: Setting Start with OoT only gives Fairy Ocarina in Rando (#6227) 2026-02-15 01:19:31 +00:00
anthony-barricelli
3206425e1b fixes #6008 (#6229) 2026-02-15 01:17:53 +00:00
Malkierian
e447143e48 Fix the extractor's assumption that found files are always in the working directory (x64/build/soh). (#6243) 2026-02-14 17:51:48 -07:00
Philip Dubé
e6947c733c Business Scrubs: don't speak without jabber nut (#6255)
most speak checks conservatively only apply to Link initiating speech,
but didn't realize business scrubs speak unprompted & that would make deku jabber nut mostly useless

this doesn't apply to other scrubs (such as 123 scrubs), maybe in future we can block more, such as showing trade items
2026-02-15 00:48:00 +00:00
Philip Dubé
71c6f02a86 Big Poes hint: not Big Goron (#6256) 2026-02-15 00:36:16 +00:00
Malkierian
b83ca39c98 Make tricks and locations lists re-evaluate after preset application. (#6263) 2026-02-14 15:58:26 -07:00
Pepper0ni
7eb5acf224 Fix wrong logic var in spirit shared (#6254) 2026-02-14 19:04:50 +00:00
A Green Spoon
f31172c647 remove extra zf condition + add vb call (#6258) 2026-02-14 19:04:34 +00:00
Philip Dubé
1e1ba54cf6 Water Temple: fix waterfall GS logic (#6251) 2026-02-12 02:40:04 +00:00
Philip Dubé
92cb7f1594 fix crash when generating decoupled entrances with boss shuffle (#6189)
regression from ganon's tower shuffle
2026-02-10 19:22:40 +00:00
Philip Dubé
04eb8d1601 Forest: fix hover recoil trick using wrong operator (#6248) 2026-02-10 00:27:58 +00:00
anthony-barricelli
21a270c0b3 Bug Fix: MQ Dungeon setting not updating locations in Locations tab (#6228)
refresh locations if MQ dungeon setting changes + show MQ locations for "Selection Only"
2026-02-10 00:09:52 +00:00
Christopher Leggett
6a31700820 Fixes some Stone of Agony bugs and refactors it to a VB Hook (#6235)
Fixes #1727. Specifically, it removes a lot of old situations in which the stone of agony icon would've been hidden, such as shield and z-targeting. It will still be hidden while talking to an NPC or in cutscenes.

This does also introduce a subtle change in behavior. It now behaves a bit more like the Shard of Agony from the 3ds version. Instead of always being visible after the stone of agony is obtained, it is now hidden until you get close to a secret spot, appearing at a slightly further range than when the rumble would start.
2026-02-10 00:07:34 +00:00
A Green Spoon
a2f2697d0d move EndFloatWindows outside of Begin (#6242) 2026-02-09 23:44:13 +00:00
Pepper0ni
293adcf9ee fix water level logic (#6247) 2026-02-09 23:34:33 +00:00
TheLynk
743103fbe9 Fix Logic in Deku Tree (#6244) 2026-02-08 22:20:16 +00:00
xxAtrain223
ce8dd7931c Added StartingAgeTime to RecalculateAvailableChecks. (#6237) 2026-02-08 21:58:37 +00:00
Philip Dubé
8fd41474c1 Fix logic thinking child exiting OGC GFF leads to castle grounds, not past gate (#6207)
Also fix grotto's age redirection
2026-02-07 20:21:14 +00:00
Malkierian
2bfae47b7f Change interior pot access to only check for viable methods. (#6233) 2026-02-07 08:41:08 -07:00
Christopher Leggett
65c7c3e4a9 Fix Heart Containers/Pieces Item Pool Calculation (#6226)
This calc ends up with 8 heart containers in the pool with the default 3 starting hearts, just like the 8 heart containers in the vanilla game. Changing starting hearts results in half of the remaining hearts being filled by heart containers and half of the remaining hearts being filled by heart pieces.
2026-02-06 02:18:06 +00:00
anthony-barricelli
2656c20f71 check if rando for quest kaleido menu panel (#6231) 2026-02-04 18:59:52 +00:00
A Green Spoon
c021a0e8a2 Fix KD Without Bombs Trick Name (#6225) 2026-02-04 02:53:06 +00:00
Malkierian
cc0941cc9f Attempt to correct Linux appimage behavior. (#6215)
Also make Windows rom search react to the set search path.
2026-02-01 11:35:54 -07:00
anthony-barricelli
a4eacdd267 reset selected enemies list when clicking box for all enemies (#6219) 2026-01-31 15:00:06 +00:00
Shishu the Dragon
79d6f54be1 Fix segfault on quit (#6212) 2026-01-29 18:28:55 -07:00
Jordan Longstaff
23606325e6 Hookify Goron Pot (#6208) 2026-01-29 14:36:46 +00:00
Malkierian
8176e57144 Entrance Tracker Display Options (#6193)
Add all window display options to Entrance Tracker.
Apply hidden label filtering to combobox labels.
Remove tracker prefixes from check and entrance tracker preset load functions.
Remove all references to the menu bar, and the menubar source and header files.
2026-01-29 03:24:43 +00:00
Philip Dubé
473a77bbb2 Fix generation when Shuffle Speak disabled (#6206) 2026-01-28 18:22:21 +00:00
tortugaveloz
a365446832 Basic Surround Sound support. (#6204) 2026-01-28 05:14:57 +00:00
Philip Dubé
e2db315ffa Shuffle Speak (#5538)
Shuffles 6 languages (Deku, Gerudo, Goron, Hylian, Kokiri, Zora) to learn before being able to use Speak command with actors of that type. Other actors can still always initiate speech

Owl speaks anything (relevant for owl flights)
2026-01-28 05:14:14 +00:00
OtherBlue
16ee01404a small patch to match 2ship (#6197) 2026-01-26 03:26:16 +00:00
xxAtrain223
077fda8749 Stringify More Conditions (#6031) 2026-01-26 03:25:24 +00:00
xxAtrain223
f5264be192 Recalculate Available Checks from Current Region (#6165) 2026-01-26 03:23:47 +00:00
Christopher Leggett
983d04d362 Restores missing hint types that got lost in a merge (#6194)
Also fix bad text id on deku tree compass & fix dungeon map custom messages
2026-01-23 02:15:27 +00:00
Christopher Leggett
2af265dbce Add action shuffle icons to the item tracker (#6190) 2026-01-23 01:09:08 +00:00
Christopher Leggett
dfba6b319b Fixes missing flag filter theme color (#6191) 2026-01-23 00:08:58 +00:00
Eric Hoey
894b8e6c86 Glitch-Aiding CS Tweaks/Fixes/Addition (#6192)
unskip door shutter cutscene

add second jabu OI door to glitch-aiding cutscenes

add dc boss door shutter

fix spirit mq switch

add comments
2026-01-22 14:27:07 +00:00
Philip Dubé
2da233c40b Improve forest temple poe cutscene hack (#6185)
ACTOR_EN_ST isn't reliable in enemy randomizer,
& in doorsanity it's desirable to trigger in first room
2026-01-21 19:50:23 +00:00
Philip Dubé
6b160fac1c Entrance/Location: remove Getuint32_t method (#6186) 2026-01-21 16:33:35 +00:00
Philip Dubé
78c68ae3d4 Fewer Tunic Requirements: remove lies (#6183)
Logic has been widening use of Fewer Tunic Requirements, making the description no longer accurate
2026-01-21 06:39:38 +00:00
Christopher Leggett
fae74d4a5e Kaleido Tracker - Add new Shuffles (#6184)
Namely Swim, Crawl, Climb, Grab, Open Chests, and Bean Souls

Also added a page up and page down feature since the list is getting large. Assigned it to C-Left and C-Right. I'd like to put C-Down as "Jump to End" but the way things currently are I can't set C-Up as "Jump to Start" so I'll leave that one out for now.
2026-01-21 04:04:24 +00:00
Philip Dubé
c9414b4d45 Misc fixes mostly related to custom text refactor (#6174)
fix goron messages in rando
also always include "IS_RANDO" in rando shipinit dependencies
don't use rando RNG, trying std::array
avoid sprintf, std::array not necessary
fix random rupee name crash
roll random traps: don't reuse rando rng
fix better bombchu typo
2026-01-20 20:55:24 +00:00
Pepper0ni
9991a95ab1 fix maps and compasses not being added to the pool (#6180) 2026-01-20 15:39:03 +00:00
aMannus
c360b2dee4 Fix missing farores (#6176) 2026-01-20 01:11:52 +00:00
Philip Dubé
596b714fa4 Rando: Shuffle Climb (#5182)
Co-authored-by: Pepper0ni <93387759+Pepper0ni@users.noreply.github.com>
2026-01-19 19:47:56 +00:00
Philip Dubé
f52b653cfb Pot CMC (#6167)
Copied from https://github.com/HarbourMasters/2ship2harkinian/pull/1011
2026-01-19 19:40:09 +00:00
Fabien Romano
35039565df fix portArchiveVersion, DetectOTRVersion() use LocateFileAcrossAppDirs() so it needs filename as argument, not full path. (#6168) 2026-01-19 17:04:55 +00:00
aMannus
451820cac4 Fix skulltula messages (#6170)
Typo made the replace fail and then freeze the game on the autoformat step afterwards

Also fix water temple boss key text color
2026-01-19 15:19:02 +00:00
Garrett Cox
d7981bf03f Some tweaks to anchor (#6166) 2026-01-19 04:38:48 +00:00
Philip Dubé
a2245f7a47 Merge pull request #6164 from serprex/merge912
merge 9.1.2
2026-01-19 03:55:50 +00:00
Demur Rumed
7588734a42 Merge remote-tracking branch 'origin/develop-copper' into merge912 2026-01-19 02:35:48 +00:00
Philip Dubé
0dc6989438 9.1.2 (#6160) 2026-01-19 00:10:09 +00:00
Philip Dubé
be0f8fec9f Fix boot to debug warp screen not applying time savers (#6151) 2026-01-18 23:10:33 +00:00
xxAtrain223
651078f0b3 Added search boxes for Save Editor flags. (#6163) 2026-01-18 23:01:21 +00:00
Pepe20129
f541c3f4ad Shuffle Ganon Tower (#5078) 2026-01-18 22:38:01 +00:00
Philip Dubé
c71cc68951 Update references to soh.otr/oot.otr/oot-mq.otr to .o2r (#6161) 2026-01-18 16:59:20 +00:00
ItsHeckinPat
04c5d50b3e Ported BtnSelector from 2ship (#6158)
Allows the rebinding for Resetting the game, Debug Map Select, and Debug No-Clip.
Also allows for Speed Modifiers to use the new button combos, instead of only the modifier buttons.
2026-01-18 16:01:39 +00:00
Shishu the Dragon
eab279c0be Fix boot crash when v8 saves are present (#6157) 2026-01-18 14:29:57 +00:00
Philip Dubé
7006ef7404 Don't put unshuffled master sword into playthrough (#6146)
Includes some cleanup. Main point is:
1. hidden checks are not hintable
2. hidden checks should not be written to spoiler log
2026-01-18 14:29:06 +00:00
Philip Dubé
18b00e7bc1 Shuffle Grab (#5719)
AKA str0. Named in-game item Power Bracelet

Co-authored-by: Pepper0ni <93387759+Pepper0ni@users.noreply.github.com>
2026-01-18 05:32:31 +00:00
Philip Dubé
60205ec0bd item list: bring back bean souls (#6156)
got lost somehow. also align columns
2026-01-18 05:13:45 +00:00
Philip Dubé
5e802f232d Fix ZR/LW entrance shuffle leak (#6154) 2026-01-17 21:00:35 +00:00
Philip Dubé
f474a86928 Cleanup various things noticed while fixing rando generation / debug warp (#6152)
Adjust RAND_GET_OPTION to return option instead of option value
2026-01-17 20:34:24 +00:00
Philip Dubé
9ab58a8d07 Fix rando objects not randomizing (#6150)
Recent changes in init ordering had param hashmap built before static locations setup by hooks
2026-01-17 18:03:51 +00:00
xxAtrain223
1af0f4e395 Added Scarecrow Spawn to the Collision Viewer. (#6148) 2026-01-17 15:55:41 +00:00
Garrett Cox
c36468ccbd Add bounce off walls toggle (#6110) 2026-01-17 06:11:17 +00:00
Jordan Longstaff
7850fa82df Modularize enemy defeat count hook & fix counting bugs (#5885) 2026-01-17 05:35:45 +00:00
Philip Dubé
5a484331b6 Fix merge regression in Shuffle Masks (#6147) 2026-01-17 05:30:00 +00:00
Philip Dubé
44d351698b Shuffle Masks (#5536)
Future improvements can build on this,
giving masks abilities,
or adding checks for trading mask to someone
2026-01-17 05:00:03 +00:00
mckinlee
69f151e79d i control boom (#6136) 2026-01-17 00:26:31 +00:00
Philip Dubé
04df48944a Shuffle Open Chest (#5946) 2026-01-16 18:34:14 +00:00
Jordan Longstaff
6606eefbf1 Add option to disable Link spinning with the Goron Pot (#6138)
Make Link focus on Goron Pot instead
2026-01-16 13:55:36 +00:00
Reppan
6e4c010ffe [Custom equipment] fix fallback (#6113) 2026-01-16 04:08:09 +00:00
Philip Dubé
9c1a1728ee fix dev, broke due to incompatible PRs (#6144) 2026-01-16 01:59:36 +00:00
Malkierian
704ace8fd3 ImGui-Driven Extraction Flow and Progress Reporting (#5892)
This sets up the initialization process to allow for producing an ImGui window before ROM archives are made, so that ImGui can be used to prompt users along the O2R creation process instead of using the OS prompts, which aren't always usable even on some Linux devices, let alone other 2nd-party port platforms, as well as graphically report extraction progress.
2026-01-15 23:10:20 +00:00
Jordan Longstaff
c7e4e8ccee Owl Travel cutscenes skipped as One Point cutscenes (#6141) 2026-01-15 21:02:27 +00:00
Christopher Leggett
7b3efb1e7b Upgrades Custom Messages to Hooks and ShipInit (#5101)
Defines the hook for OnTextLoad. Intercepts message loading with hooks. Adds file to handle the CustomMessage creation for items.

Handles Ice Traps, Triforce Pieces, and Custom Items. Handle maps, compasses, and keys

Converts gossip stone hints to hook. Handle one-off merchant messages. Convert scrubs and shop text and remove now-unused code

Convert Sheik and Ganondorf hint text. Convert skulltula people messages. Convert more static hints

Specifically Dampe, Greg, Warp Songs, Frogs, Loach, Fishing Pole, and Saria

Convert Biggoron Hint. Convert Big Poes hint. Convert Anju hint dialogue. Convert Malon hint. Convert Horseback Archery hints. Convert Mask Shop SIgn hint

Convert Lake Hylia Switch related text. Convert Shooting Gallery bow reminder message

Convert random rupee names. Convert Rando-Relevant Navi Enhancement. Convert Random Goron messages

Convert Injecting Skull token counts. Add in a way to AutoFormat with an item icon.. Fix some errors with skull tokens and apply icon

Convert heart container item counts. Convert Inject Item Count for Heart Pieces. Port Better Bombchu Shopping. Convert Market Sneak

Port Quit Fishing At Door and clean up unused stuff. Reintroduce missing Mysterious warp song hint

Make ShipInitFuncs static

Adds and uses per-item articles for get item messages

Fix Entrance Hints and port toggle from dev-copper
2026-01-15 20:57:13 +00:00
Fabien Romano
c43139ebd6 fix build and run on OpenBSD (#6050) 2026-01-15 20:46:03 +00:00
Pepper0ni
a92f07e1f1 Fix quest leak assert triggering in no logic (#6143) 2026-01-15 19:31:19 +00:00
aMannus
0821c2e315 Fix boss souls on item tracker (#6142) 2026-01-15 15:51:04 +00:00
Reppan
0d4986f2c3 Add Clear List button to Mod Menu (#6137) 2026-01-14 18:50:33 +00:00
Philip Dubé
6e6834af22 Rando: Shuffle Crawl (#5032) 2026-01-14 04:29:30 +00:00
Garrett Cox
e149e09e08 Add GFX Stack to crash handler ext (#6130) 2026-01-12 05:11:42 +00:00
Pepper0ni
45fb38e309 Add Forest MQ Child Doorframe trick and fix some issues with courtyard Scarecrow (#6134) 2026-01-11 15:27:00 +00:00
Philip Dubé
cb21208b4b Fix regression causing BGS to be missing from item pool (#6131)
Exclude from minimal item pool
2026-01-11 08:39:15 +01:00
Philip Dubé
5d2d7a7f09 Make Deku Tree's falling platform respawn in rando (#6128)
Relevant in Shuffle Climb, where getting to chest would not be able to logically use platform
2026-01-11 05:03:08 +00:00
Pepper0ni
31eefd57df Can always bribe the Hyrule Castle guard in randomiser. (#6129) 2026-01-11 05:02:37 +00:00
Paul Schwabauer
cd8bd69c6e Fix undefined behavior (#6089)
Fix TimeSplit crash on empty name

Initialize OptionValue::mVal to fix undefined behavior

Fix undefined behavior in GraveHoleJumps surface type copy.
The memcpy was reading 33 SurfaceTypes regardless of the actual count,
causing a buffer overread since NTSC 1.0 only has 31 surface types and
later versions have 32. Now uses the actual surfaceTypesCount from the
collision header.

Fix undefined behavior in framebuffer OTR signature check.
Use calloc instead of malloc for framebuffer allocation to zero-initialize
the memory. This fixes Valgrind warnings about reading uninitialized values
when ResourceMgr_OTRSigCheck reads from framebuffer pointers to check for
the "__OTR__" signature.

Fix undefined behavior in fontLoadStatus initialization.
Use calloc instead of malloc when allocating fontLoadStatus array
to ensure zero-initialization. This fixes Valgrind warnings about
conditional jumps depending on uninitialized values in
AudioLoad_SetFontLoadStatus.
2026-01-10 21:31:21 +00:00
Philip Dubé
7627b0567b Bring back Big Poe Count option, lost in menu refactor (#6126) 2026-01-10 17:19:19 +01:00
Ralphie Morell
65227f65f2 Fix: Goron City Doors after Fire Temple (#5950)
fixes not being able to open doors when fire temple defeated before talking to Link the Goron

does not apply to rando
2026-01-10 14:53:07 +00:00
Pepper0ni
989bbe0dd0 fix logic issues and add an assert to detect wrong quest leaks (#6125) 2026-01-10 14:24:30 +00:00
aMannus
14a6bc1f85 Add Roc's Feather (custom item) to Rando Item Pool (#6035)
This adds Roc's as a fully implemented item into the randomizer pool. When both Roc's and Nayru's is found, you can swap between them on the pause menu

Many people have contributed to this over time, so huge shoutout to:
- kentonm, this item is directly inspired by their Roc's Feather from their romhack Indigo. Also provided me with their GI model, icon texture and animation to use.
- PurpleHato, for providing the images for the item name shown on the kaleidoscope.
- Dana The Elf, providing another custom animation for the item.
- Reppan, for helping to tweak the animation and exporting the GI model for me.
2026-01-10 12:59:32 +00:00
Paul Schwabauer
5bbc32c2d1 Fix memory leaks in MessageViewer and audio_load (#6124)
Add destructor to MessageViewer to free allocated buffers

Free individual strings from ResourceMgr_ListFiles before freeing the array in audio_load.c
2026-01-10 12:53:37 +00:00
Philip Dubé
c2152a8713 RNG refactor: use in Extractor, only apply rand_init to default_state (#6123) 2026-01-10 12:41:56 +00:00
nclok1405
39b8aacdef "Targetable Gold Skulltula" Cheat (#5986) 2026-01-10 01:51:59 +00:00
OtherBlue
3e0225272f Make "Move in First Person" require "Right Stick Aiming" (#6104) 2026-01-10 01:03:03 +00:00
Christopher Leggett
ba0ecc59aa Fix RNG used by cosmetics editor to use same RNG method as rando (#5979)
Refactor ShipUtils to optionally take a state pointer.

Also changed random.h/cpp to be a wrapper around ShipUtils RNG providing a pointer to the rando state variable.

Use ShipUtils RNG for UIWidgets GetRandomValue

Fix AudioEditor to use ShipUtils RNG and its own state. It seems like shuffling Audio at the right time could have potentially messed with rando seed generation before this, but that bug, if it existed, should also be fixed with this.
2026-01-09 14:10:12 +00:00
Jordan Longstaff
9ca5ce0b53 Decomp import: rename timer-related functions and variables (#5896) 2026-01-08 18:56:01 +00:00
Garrett Cox
8584ced40b Proper fix for 2 handed idle animation (#6109) 2026-01-08 18:20:16 +00:00
Philip Dubé
feb1429471 RT_DISTANT_BOULDER_COLLISION (#6114)
also amp up RT_DMT_UPPER_GS
2026-01-08 17:23:15 +00:00
Garrett Cox
71a47559f7 Boot sequence adjustments (#6119) 2026-01-08 17:21:52 +00:00
Garrett Cox
4839e575b1 Add toggle for Link's sword trail (#6112) 2026-01-08 05:53:36 +00:00
mckinlee
f72ee2b814 Fix Arrow Cycle Aim Drift (#6118) 2026-01-08 02:33:08 +00:00
Philip Dubé
307cd7f8cd Fix: RT_DC_JUMP merged into RT_UNINTUITIVE_JUMPS (#6117) 2026-01-08 01:19:15 +00:00
ItsHeckinPat
36ff9ec562 Change to drawItemId (#6116) 2026-01-07 20:46:47 +00:00
Philip Dubé
e6fb9a6b64 mod_menu: fix overflow error (#6111)
size_t is unsigned, `>= 0` is always true
2026-01-06 22:10:04 +00:00
Philip Dubé
e26269d1b3 RT_UNINTUITIVE_JUMPS (#6107)
consolidate novice jump tricks that are purely movement based

2 new jumps added: shadow boat jump, & forest trial child jump
2026-01-06 17:44:42 +00:00
Philip Dubé
443badee87 combobox: use ordered maps to avoid dropdown having non-determinisitic ordering (#6101) 2026-01-06 01:22:10 +00:00
Philip Dubé
b5a7dc7c2d deku tree outside boss room logic fixes (#6088)
also fix some issues in Ganon's Castle, somehow lost shadow trial from refactor, bring it back
2026-01-06 01:20:55 +00:00
Philip Dubé
8783f4cff7 remove unused chest assets (#6090)
replaced in #6085
2026-01-06 01:10:39 +00:00
Jordyn Hardyman
708bd0739a disable fixed camera fix (#6106) 2026-01-06 01:09:58 +00:00
mckinlee
5b0d8be484 [Enhancement] Arrow Cycle (#6105) 2026-01-05 22:53:14 +00:00
Philip Dubé
da5f28afd8 RT_BARINADE_POTS (#6102) 2026-01-05 17:49:44 +00:00
Philip Dubé
3f8aa32d12 beans: fix generation for starting with planted beans (#6099)
beans is 0 in inventory, confusing CanPlantBeanCheck,
check for this specific scenario in BeanPlanted to mitigate
2026-01-05 15:58:51 +00:00
nclok1405
7c4a3359f0 Enable Battle Music for Leever option + Modularize EnemyBGMDisable (#5985)
Add "Enable Enemy Proximity Music for Leever" option + Modularize EnemyBGMDisable
2026-01-05 15:07:05 +00:00
Philip Dubé
392bb6c59f RT_HOVER_BOOST_SIMPLE with recoil (#5910) 2026-01-05 04:00:57 +00:00
Philip Dubé
ea40cb2c0c water logic: rename b1 jet pit, add hover boots across reverse basement jet pit (#6092)
region only represents being on side outside dragon room
2026-01-04 22:12:59 +00:00
aMannus
0e7212d939 Add modal to teach player about presets (#5903)
* Add modal to teach player about presets

* Change cvar to CVAR_GENERAL

* Update soh/soh/Enhancements/FileSelectEnhancements.cpp

Co-authored-by: Philip Dubé <serprex@users.noreply.github.com>

---------

Co-authored-by: Philip Dubé <serprex@users.noreply.github.com>
2026-01-04 13:28:06 -07:00
Reppan
34728efe6f Add back Junk-category (#6091)
accidentally removed `case ITEM_CATEGORY_JUNK:` from large crate switch case
2026-01-04 14:03:26 +00:00
nclok1405
2ed9c56ca3 Add some NTSC Player Name decoding in Save Editor (#5867)
This adds a new font, Noto Sans JP
2026-01-04 14:02:06 +00:00
Reppan
a134d2c59a Update CSMC to CMC and update chests to other shuffles (#6085) 2026-01-04 13:37:41 +00:00
Garrett Cox
16249f0909 Fix check name conflict (#6087) 2026-01-04 03:05:43 +00:00
Pepper0ni
db91fd37e1 Refactor GenerateItemPool and Ice Trap settings (#5773)
Refactors the item pool to fix numerous bugs, especially with Plentiful item pools, makes ship exclusive items affected by item pool, and changes ice trap settings to be more clear and consistent to the user.
2026-01-03 18:42:26 +00:00
Jordyn Hardyman
9af262c1bb Disable Fixed Camera Enhancement (#6083)
Co-authored-by: PurpleHato <linkvssangoku.jr@gmail.com>
2026-01-03 18:07:19 +00:00
Philip Dubé
6c724a2c01 bean souls: prevent skulltula spawning from bugs (#6084)
woe is me thinking bugs reacted to soil patch instead of invisible actor
2026-01-03 16:43:52 +00:00
nclok1405
6a1fb1412b Add "File Number" to Save Editor (#5860) 2026-01-03 14:24:30 +00:00
nclok1405
5b275343db Allow Enemy Randomizer in Debug Save (#5841) 2026-01-03 14:19:06 +00:00
Reppan
7db2a97cea modding: alt equipment (#6062)
Implements object_custom_equip objects that adds more support to have items modified by modders without having to export with hands or do xml edits to load hands. This is autonomous if exported as a object_custom_equip

Also adds non existing DisplayList for items that originally did not have a DisplayList. Longshot and Big Goron Sword Sheath is 2 examples
2026-01-03 14:18:11 +00:00
Philip Dubé
07208fcf15 rando menu: fix shop price options (#6080) 2026-01-03 14:16:49 +00:00
Pepper0ni
ba78039a69 add rang as a way to get the LW water rupees (#6082) 2026-01-03 14:14:31 +00:00
Philip Dubé
e3865e28af Remove pseudo RGs: RG_EPONA, RG_SCARECROW, RG_DISTANT_SCARECROW (#6078) 2026-01-03 13:50:38 +00:00
nclok1405
1e55c1295f Add an option to disable Autosave Notification (#6081) 2026-01-03 13:48:58 +00:00
Philip Dubé
6953edecee rando menu: bring back shuffle grass (#6079) 2026-01-03 04:27:22 +00:00
Philip Dubé
7748939504 RT_GV_CHILD_TENT (#5823)
Also add logic for RT_GV_CRATE_HOVERS, which already had a trick entry, but no logic
2026-01-03 03:02:38 +00:00
Pepper0ni
5fea53ed56 Spirit refactor to handle reverse entry (#5456) 2026-01-03 00:52:02 +00:00
Philip Dubé
1c4b78d35e Medallion Locked Trials: logic (#6077) 2026-01-03 00:41:03 +00:00
Philip Dubé
657b78a016 refactor water (#5916)
Co-authored-by: Pepper0ni
2026-01-02 23:58:32 +00:00
Pepper0ni
7d6c6f032e Refactor fire (#5868) 2026-01-02 23:13:44 +00:00
Philip Dubé
480a1658b1 randomizer: bring back item pool options (#6076) 2026-01-02 22:36:51 +00:00
Pepper0ni
ef2b4cd42c fix an assert and va_arg linux crash (#6075) 2026-01-02 20:55:30 +00:00
Philip Dubé
6f060a9222 jabu mq: fix copy paste error, rename MQ_EAST_ROOM to MQ_NEAR_BOSS_ROOM (#6074)
renaming matches vanilla naming convention
2026-01-02 20:18:54 +00:00
Philip Dubé
31824afa4a fix compiler warnings (#6072) 2026-01-02 20:17:44 +00:00
xxAtrain223
c0ba618f60 Set CurrentRegionKey when checking an entrance. (#6073) 2026-01-02 18:32:05 +00:00
Garrett Cox
10680f53e7 Fix syncing bombchuUpgradeLevel (#6071) 2026-01-02 10:35:45 -06:00
Philip Dubé
88494169e6 Add option for Navi to hint location of boss key at boss doors (#6058) 2026-01-02 16:23:15 +00:00
Philip Dubé
33758e49db Medallions Locked Trials (#6046)
Adds rando option to bar doors to trials until corresponding medallion acquired
2026-01-02 15:17:57 +00:00
Glought
dd9d63eecb Add the ability to Randomize Music and Sound Effects and Cosmetrics based on Rando File Seed. (#5970)
Add the ability to Randomize All Music and sfx based on file Rando seed.
Add the ability to Randomize All cosmetics based on file rando seed.

Add combobox for selection:
- Disabled: No music or sound effects are randomized.
- On New Scene: Randomizes when you enter a new scene.
- On Rando Gen Only: Randomizes only when you generate a new randomizer
- On File Load: Randomizes on File Load.
- On File Load (Seeded): Randomizes on file load based on the current randomizer seed/file.

Removed checkboxes.
2026-01-02 15:01:01 +00:00
Sirius902
0bd08d626a Rando: Add Triforce Hunt GBK setting (#5739) 2026-01-02 14:55:34 +00:00
Glought
31db9e4ade Added "firstInput" stat and repurposed the "fileCreatedAt" stat. (#6070)
- The "firstInput" stat is set on first input in game. Used for RTA
  Timing.
- The "fileCreatedAt" stat is now set when then save file is created
  (After the player is done entering the file name). Useful for seeding
  non rando randomizers like Mirrorworld, Enemy Randomizer, extraTraps,
  etc.
2026-01-02 14:39:42 +00:00
Garrett Cox
f666444876 Fix issue when syncing skipped checks (#6068) 2026-01-01 21:20:30 -06:00
Philip Dubé
d3a6288c7e Combine check identity structs into CheckIdentity (#5852) 2026-01-02 01:51:03 +00:00
Philip Dubé
ff0c309b5a shuffle scrubs: use object extensions (#5853) 2026-01-02 01:08:39 +00:00
Christopher Leggett
14a241ed3f Integrate Randomizer Window into Modern Menu Properly (#6017)
Also comes with a menu reorganization
2026-01-02 00:46:22 +00:00
Pepe20129
9e6c9a478e File Select More Info Update (#5998)
massively improves the "File Select More Info" enhancement:
- Moves it to a separate file
- Moves it to VB
- Adds triforce pieces & fishing pole
- General cleanup
2026-01-02 00:28:33 +00:00
Philip Dubé
d227292935 Combine mq/vanilla flame wall skip tricks, include child skipping wall in MQ lobby (#5814)
Checked that logic past fire wall handles child logic

To get past without taking damage:
Z-target wall to left of fire wall. Turn left. 2 ESS turns right. Side hop
2026-01-01 23:08:42 +00:00
Philip Dubé
1463e76ef7 refactor jabu (#5671) 2026-01-01 22:58:15 +00:00
xxAtrain223
c0d9fe876c Remove Here Parameter and Rename to AnyAgeTime (#5714) 2026-01-01 22:16:50 +00:00
Reppan
1a9ea03e00 Make Custom Tunic Local (#6065)
* Make Custom Tunic Local

* Guard against Anchor

* Make Pause Menu Model treated as a Local
2026-01-01 15:36:29 -06:00
Shishu the Dragon
d62e8108fd Mod Menu: Fix empty list crash (#6015) 2026-01-01 19:54:34 +00:00
Garrett Cox
2e5a985745 Add support for warp points in the dev tools, as well as a boot to warp point option (#6037) 2025-12-31 17:31:55 -06:00
Garrett Cox
bc47a9ec6f Bump LUS (#6061) 2025-12-31 17:26:41 -06:00
Garrett Cox
7ca93e93be Back-port fixes from holiday build (#6060) 2025-12-31 17:08:30 -06:00
Philip Dubé
8cc02fd235 Add missing extension trick to Shadow MQ, fix 2 logic mixups in GTG (#5983)
Also allow Giant's Knife to logically hit these switches

Ganon's Castle diamond switch can be hit with bomb by setting bomb down instead of shield dropping
2025-12-31 02:54:41 +00:00
aMannus
5d63146267 Add setting updater for rando logic setting (#6030) 2025-12-31 01:44:01 +00:00
Jordan Longstaff
50c023b86b Modularize randomized enemy size hook & fix enemy health bars (#5887) 2025-12-31 01:43:20 +00:00
Philip Dubé
8ee637880d RT_GTG_LAVA_JUMP (#5987)
Distinct from unintuitive jumps in that I'm unable to get it consistently even after trying a couple times,
even after trying to find some mix of ledge grabbing & ESS turning to try at least put it down to roll timing
2025-12-31 01:29:56 +00:00
Philip Dubé
d41273f34b Shuffle Bean Souls (#5833) 2025-12-31 01:27:37 +00:00
OtherBlue
c688923272 [Enhancement] Unequip C-items (#6043) 2025-12-31 00:36:33 +00:00
Jordan Longstaff
7d6a82be4f Convert "Big Four" hook register functions to init functions (#5984) 2025-12-30 23:34:13 +00:00
aMannus
e96503c0bd Fix custom tunics not updating on scene change (#6026) 2025-12-30 23:21:53 +00:00
xxAtrain223
fbfef95617 Add GetCheckPrice (#5718)
* Removed LocationAccess::CanBuy and added GetCheckPrice.

* Made the Magic Bean Salesman a merchant.

* Replaced CanBuyAnother with GetWalletCapacity and inline comparison for easier readability.
2025-12-30 22:37:28 +00:00
Philip Dubé
cd08f343a6 more perm flags (#5676)
1. deku tree MQ web
2. dodongo's cavern MQ silver rupees
3. jabu lobby switch
4. forest well, lobby eyes, MQ web
5. fire MQ lobby torches
6. spirit MQ lobby silver rupees

adjusts forest MQ logic
2025-12-30 22:31:38 +00:00
Philip Dubé
82b279f55e bushsanity (#5941) 2025-12-30 20:24:00 +00:00
Philip Dubé
5822c33268 RT_ICE_STALAGMITE_CLIP, RT_ICE_STALAGMITE_HOOKSHOT (#5909)
Coming back from block room to hub, the clip is different, instead it's by wall that both ages can get past with pretty specific sidehop. This is pretty niche since generally logic isn't doing reverse ice cavern
2025-12-30 20:11:27 +00:00
nclok1405
6e27cd7107 Add Gerudo Fighter to Enemy Randomizer (#6005)
Being captured by random fighter behaves like being captured by a wall master
2025-12-30 19:45:19 +00:00
xxAtrain223
ace2f7869b Check for Pocket Cucco in HasItem. (#6049) 2025-12-28 09:20:16 -07:00
Philip Dubé
f273ea4294 RT_WATER_IRON_BOOTS_LEDGE_GRAB (#6009)
https://www.youtube.com/watch?v=x8k3XJHiMOs
2025-12-27 12:18:15 +01:00
Philip Dubé
a1f9971c12 RT_BIG_SKULLTULA_PAUSE_LIFT (#6014) 2025-12-27 12:17:02 +01:00
Philip Dubé
9c24ccec1a Fairysanity: allow using bottle (#6021)
Based on fishsanity, which is refactored with hooks

Also open up logic catching fairies at oasis if player has bottle
2025-12-27 12:15:31 +01:00
Philip Dubé
1c21608a95 refactor windmill (#6027)
split upper area into region rather than using logic val to manage access from below

2 fixes: adult can groundjump up the middle, child can make the trick with hammer
2025-12-27 12:13:47 +01:00
Philip Dubé
58e851dd2b Fix mixed up chest names in shadow MQ falling spikes room (#6047) 2025-12-27 12:12:51 +01:00
xxAtrain223
999f980d7c Fix 2 TimePass Issues (#6038)
* Set Kak time pass to false.

* Set lon lon time pass to false.
2025-12-27 12:10:57 +01:00
Jerom Venneker
b24d266974 Reverted removal of 'ClearItemLocations' to fix #6036 (#6044) 2025-12-27 12:10:31 +01:00
Garrett Cox
cc21163765 Fix rupee overflow in StartingItemGive (#6039) 2025-12-27 12:09:43 +01:00
Philip Dubé
3fa4af2cea Refactor Forest (#5673)
* refactor forest

* feedback

* more feedback

* MQ NE island logic

* no kids allowed

* split west corridor

* split up block puzzle room

* comment mapping poe sister colors

* generalize well swim, make novice

* hammer works

* upstream bug fix

* Replace corridor with hallway, rename east/west hallway regions to be based on their red/blue doormats

also change south hallway to overgrown hallway, & replace south/north sides with lower/upper sides
2025-12-21 10:30:43 -07:00
xxAtrain223
352a4e9260 Added small key doors special case for Thieves Hideout. (#6023) 2025-12-15 12:49:11 -07:00
Philip Dubé
05d865337c MQ forest: fix raised island GS logic (#6020) 2025-12-15 12:47:07 -07:00
Philip Dubé
9edb4e3c36 refactor dodongo's cavern (#5855) 2025-12-15 12:45:46 -07:00
Philip Dubé
971c3c5c94 refactor ganon's castle (#5664) 2025-12-15 12:42:02 -07:00
Philip Dubé
e9aad17d17 refactor deku tree (#5854) 2025-12-15 12:41:53 -07:00
Philip Dubé
7176960a0e refactor: split out location_access/root, & combine bottling events (#5821) 2025-12-14 16:48:42 -07:00
Shishu the Dragon
9d8addca04 Update macOS build instructions (#6012) 2025-12-10 09:50:07 -07:00
Philip Dubé
f83f73d671 Fix miss in previous hookify cosmetics editor PR (#6006) 2025-12-04 09:14:58 -07:00
Christopher Leggett
7e829a0780 Add in Progressive Bombchu Bags (#5836)
* Adds new Progressive Bombchu Bags option

Also changes existing code to account for Bombchu Bags becoming
a drop down with 3 values instead of a checkbox

* Handle the new lower capacities for ammo refills

* Handle what happens when receiving a bombchu bag

* Remove the trick name of Progressive Bombchu Bag

Since, you know, that's an actual thing now.

* Implements Bombchu Bag handling next to Progressive Bombchu Handling

* clang-formatting

* Add extra bag for plentiful items

* Address review comment

* Move bombchu upgrade level to gSaveContext and add save/load

* Use logic's saveContext for correct logic calculations

* Remove RG_PROGRESSIVE_BOMBCHU

* Fix Bombchu Refill obtainability

* Don't add normal chus to the pool if chu bags are on.

* cmake-format

* Properly reset bombchuUpgradeLevel on savefile init

* Fix error with va_arg on linux

* Fixes small error in the Bombchu Bag description

* Fix bug with bombchu obtainability

* clang-format

* Fix infinite bombchu text

* fix clang-format
2025-12-04 15:14:32 +00:00
nclok1405
098cb70460 Disable Screen Flash for Finishing Blow option (#5988) 2025-12-03 19:15:49 -07:00
Garrett Cox
9401d4fd71 Stop hiding key counts with skeleton key, and grant all keys (#5932) 2025-12-03 09:00:18 -07:00
Christopher Leggett
280455db42 Improvements to Custom Kaleido Menu (#5997)
* Use game over textures instead of save textures

* Improves custom kaleido menu.

Specifically:

1. Changes textures to the Game Over screen textures, which look
the same but doesn't have "SAVE" at the top.

2. Adds a cursor on the left, doesn't currently do anything
other than make it slightly clearer that you can move up and down
and scroll, but opens the door for more menu-ing/toggling capabilities
later.

* Add fishing rod to kaleido menu

* Adds skeleton key to kaleido menu with placeholder icon

* More condensing of kaleido menu + add overworld keys

* clang-format
2025-12-03 08:58:52 -07:00
Jordan Longstaff
b649f5ed52 Apply ImGui scaling when using presets (#5991)
* Apply ImGui scaling when using presets

* Make ImGuiScale function do nothing if scale setting is unchanged
2025-12-03 08:58:43 -07:00
nclok1405
17f7c3e8f5 Add Expand All/Collapse All buttons to Hook Debugger (#6002) 2025-12-03 08:58:32 -07:00
nclok1405
42282c804e Better Debug Warp: Remember Link's Age and Day/Night Settings (#5981) 2025-12-03 08:58:24 -07:00
Philip Dubé
c24b2d74d5 hookify cosmetics (#5900)
also make goron neck searchable
2025-12-03 08:58:16 -07:00
Jordan Longstaff
8aa7b2fc71 Modularize Hyper Enemies hook (#5968)
* Modularize Hyper Enemies hook

* Use extern "C"

* Make mod file self-contained
2025-12-03 08:58:06 -07:00
Garrett Cox
a2e4e4d417 Check tracker improvements (#6000) 2025-12-03 08:57:15 -07:00
TheLynk
4366da631b Fix logic gf (#6003)
* Create AutoSyncFork.yml

* Off

* Delete .github/workflows/AutoSyncFork.yml

* Fix Logic In GF
2025-12-03 08:56:58 -07:00
Garrett Cox
9cd31099e2 Additional Anchor functionality: (#5999)
- Returned support for custom tunic colors
- Ocarina playback now audible
- Fixed movement translation issue when climbing or going through crawlspaces
- Fixed issue preventing some items from being visible in Dummy hands (namely ocarina)
- Fixed stick length not correctly syncing
2025-11-30 18:17:00 -07:00
Malkierian
0073736467 Fix entrance value assigned to DMT sign outside Dodongo's for hinting. (#5973) 2025-11-25 17:07:45 +00:00
Jordan Longstaff
bc48fa84fd A bit of cleanup on multiple hooks (#5879)
* A bit of cleanup on BGS hook

* Cleanup on a few more hooks, fix itemId ref

* Use direct pointer to params

* Revert item receive ID hook setup

* Remove callbacks from menu GUI

* Add comments explaining conditions of permanent loss methods

* Move custom skeletons hook to subfolder

* Clang format

* Shorten comment

* Remove unnecessary re-register function call
2025-11-25 17:00:09 +00:00
Jordan Longstaff
da6cf439d6 Modularize equipment hand patch hooks (#5876)
* Modularize equipment hand hooks

* Remove unnecessary include

* More efficient hammer hand hook

* More efficient equipment visible hook

* Add declarations of patching/resetting functions up front

* Remove forward declarations

* Make mod file self-contained
2025-11-24 18:48:56 +00:00
Jordan Longstaff
0f41ecb145 Modularize Hurt Container mode hook (#5874)
* Modularize Hurt Container mode hook

* Hook condition was wrong - fixed it

* Change type of hurtEnabled for clarity

* Change type back to bool

* Add VB hook

* Don't duplicate health capacity modifier calculation

* Add constants, replace magic numbers

* Clang format

* Publicize more health unit macros

* Make mod file self-contained
2025-11-24 17:30:34 +00:00
Malkierian
2ee4e70b9a Fix menu header width and scrollbar calculations. (#5975) 2025-11-24 14:00:37 +00:00
Pierre-Alain BESSERO
3e6b590db4 Added new trick (#5972)
* Added new trick

Skip Dodongo Cavern by using Bombchus to light the eyes

* Update soh/soh/Enhancements/randomizer/location_access/dungeons/dodongos_cavern.cpp

Co-authored-by: Philip Dubé <serprex@users.noreply.github.com>

* Update soh/soh/Enhancements/randomizer/location_access/dungeons/dodongos_cavern.cpp

Co-authored-by: Philip Dubé <serprex@users.noreply.github.com>

---------

Co-authored-by: Philip Dubé <serprex@users.noreply.github.com>
2025-11-24 13:50:56 +00:00
Christopher Leggett
c68c8f1284 Adds a toggle for the entrance labels on signs near loading zones. (#5974) 2025-11-23 16:45:19 +00:00
Philip Dubé
4aebdab43d refactor gtg (#5662) 2025-11-19 08:56:21 -07:00
Garrett Cox
eca9eac0cf Use OE for storing client ID, remove remaining game state touch point in network thread (#5969) 2025-11-16 08:10:07 -06:00
Malkierian
05233487f8 Don't try to register the Anchor widgets when not built with networking enabled. (#5964) 2025-11-14 14:28:49 -07:00
Malkierian
16909c47cd Merge pull request #5963 from HarbourMasters/develop-copper
Copper -> Dev fix (#5962)
2025-11-14 12:46:51 -07:00
Malkierian
daeb3a84c7 Can't use CVars before the CVar system is initialized. (#5962) 2025-11-14 12:45:48 -07:00
Malkierian
623a7e4f7b Merge pull request #5961 from Malkierian/develop-copper
Copper -> Develop 11/14
2025-11-14 12:29:38 -07:00
Garrett Cox
060878fb2e Anchor (#4910)
This is far and away the proudest thing I have been apart of in the Zelda community. Thank you to everyone who either directly or indirectly contributed to this effort. If I forgot to co-author you and you were involved, know that I simply forgot but still appreciated your help! Also thank you to the literal tens of thousands of people who have played Anchor, providing feedback and bug reports. Super thrilled to finally have this merged into the main Ship of Harkinian experience.

Co-authored-by: mattman107 <65982675+mattman107@users.noreply.github.com>
Co-authored-by: David Chavez <david@dcvz.io>
Co-authored-by: MelonSpeedruns <melonspeedruns@outlook.com>
Co-authored-by: aMannus <mannusmenting@gmail.com>
Co-authored-by: Malkierian <malkierian@gmail.com>
Co-authored-by: Caladius <Caladius@users.noreply.github.com>
Co-authored-by: Patrick12115 <115201185+Patrick12115@users.noreply.github.com>
Co-authored-by: PurpleHato <47987542+PurpleHato@users.noreply.github.com>
Co-authored-by: balloondude2 <55861555+balloondude2@users.noreply.github.com>
Co-authored-by: lilacLunatic <8488221+lilacLunatic@users.noreply.github.com>
Co-authored-by: Felix Lee <flee135@users.noreply.github.com>
Co-authored-by: Sirius902 <10891979+Sirius902@users.noreply.github.com>
2025-11-14 11:04:09 -07:00
Jordan Longstaff
cd1d619c9f Modularize permanent loss mod hooks (#5948)
* Modularize permanent loss mod hooks

* Make RegisterBonkDamage static

* Remove a couple of errant includes

* Fix more errant includes
2025-11-14 09:30:04 -07:00
Philip Dubé
6ccdfc6051 Fix: ground jump for haunted wasteland GS is hard (#5843)
* Fix: ground jump for haunted wasteland GS is hard, & can't be done with hammer

Pulled this logic from zootr where sword is assumed, was not able to execute myself

* Pepper0ni took a stab at this, wasn't able to do it, but didn't feel it wasn't doable

* AGreenSpoon figured it out with BGS/hammer
2025-11-13 19:24:40 -07:00
Malkierian
1e1a47c263 Load metadata without LoadFile() on startup (#5817)
* Load metadata without `LoadFile` on startup.
Implement file type entry.

* Fix non-Windows?

* clang
2025-11-13 19:05:51 -07:00
Jordan Longstaff
14fb9e60d8 Autosave no longer works after save file is deleted (#5959) 2025-11-13 15:31:57 -07:00
Jordan Longstaff
dadc2e5218 "Assignable Tunic and Boots" setting now allows shields also (#5953) 2025-11-13 14:29:48 -07:00
Pepper0ni
c005248129 Refactor zoras river logic (#5907)
* refactor zoras river

* Update soh/soh/Enhancements/randomizer/location_access/overworld/zoras_river.cpp

Co-authored-by: Pepe20129 <72659707+Pepe20129@users.noreply.github.com>

* Update soh/soh/Enhancements/randomizer/location_access/overworld/zoras_river.cpp

Co-authored-by: Pepe20129 <72659707+Pepe20129@users.noreply.github.com>

* Update soh/soh/Enhancements/randomizer/location_access/overworld/zoras_river.cpp

Co-authored-by: Pepe20129 <72659707+Pepe20129@users.noreply.github.com>

* Update soh/soh/Enhancements/randomizer/location_access/overworld/zoras_river.cpp

Co-authored-by: Pepe20129 <72659707+Pepe20129@users.noreply.github.com>

* Update soh/soh/Enhancements/randomizer/location_access/overworld/zoras_river.cpp

Co-authored-by: Pepe20129 <72659707+Pepe20129@users.noreply.github.com>

* Update soh/soh/Enhancements/randomizer/location_access/overworld/zoras_river.cpp

Co-authored-by: Pepe20129 <72659707+Pepe20129@users.noreply.github.com>

* Update soh/soh/Enhancements/randomizer/location_access/overworld/zoras_river.cpp

Co-authored-by: Pepe20129 <72659707+Pepe20129@users.noreply.github.com>

---------

Co-authored-by: Pepe20129 <72659707+Pepe20129@users.noreply.github.com>
2025-11-13 13:03:55 -07:00
Pepper0ni
75c9c579a4 fix invisible blades (#5957) 2025-11-12 08:11:00 -07:00
Philip Dubé
a31b7d9ae7 refactor shadow logic (#5650)
* refactor shadow logic

* ground jump / hookshot extension

* with groundjump invisible spikes room can be cleared, collecting silver rupees with backwalked backflips with hover boots

* nb
2025-11-11 19:32:36 -07:00
Pepper0ni
25be804841 Refactor BotW logic (#5649)
* Update well logic for doorsanity

Co-authored-by: Demur Rumed <junkmute@hotmail.com>

* clang

* Apply suggestions from code review

Co-authored-by: Philip Dubé <serprex@users.noreply.github.com>

* Add adult + irons + hook to getting to west ledge

* Update soh/soh/Enhancements/randomizer/location_access/dungeons/bottom_of_the_well.cpp

Co-authored-by: Philip Dubé <serprex@users.noreply.github.com>

* post merge fixes

* post merge fixes

* renames and ground jumps

* MQ updates

* address reviews

* Update soh/soh/Enhancements/randomizer/location_access/dungeons/bottom_of_the_well.cpp

Co-authored-by: Pepe20129 <72659707+Pepe20129@users.noreply.github.com>

* Update soh/soh/Enhancements/randomizer/location_access/dungeons/bottom_of_the_well.cpp

Co-authored-by: Pepe20129 <72659707+Pepe20129@users.noreply.github.com>

* Update soh/soh/Enhancements/randomizer/location_access/dungeons/bottom_of_the_well.cpp

Co-authored-by: Pepe20129 <72659707+Pepe20129@users.noreply.github.com>

---------

Co-authored-by: Demur Rumed <junkmute@hotmail.com>
Co-authored-by: Philip Dubé <serprex@users.noreply.github.com>
Co-authored-by: Pepe20129 <72659707+Pepe20129@users.noreply.github.com>
2025-11-11 19:32:25 -07:00
Malkierian
5629d033c2 Forgot to get CVar value with the default specified in OTRGlobals to feed into InitLogging. (#5952) 2025-11-11 10:03:14 -07:00
Garrett Cox
36cd3a27e2 Fix menu path reassignment (#5949) 2025-11-10 13:18:26 -06:00
Garrett Cox
754d79a86e Tweaks to ENABLE_REMOTE_CONTROL usage & sail hooks (#5928) 2025-11-10 10:33:28 -07:00
Jordan Longstaff
33929534f5 Modularize boss defeat timestamp hook (#5886)
* Modularize boss defeat timestamp hook

* Remove unneeded includes

* Move hook into GameplayStats folder

* Delete duplicated hook file
2025-11-10 10:29:53 -07:00
Philip Dubé
3eade8133e Fix GF entrance tracker & generation issues with cratesanity (#5934) 2025-11-09 19:16:33 -07:00
Jordan Longstaff
c0848ccba8 Modularize custom skeleton hooks (#5931) 2025-11-09 18:27:52 -07:00
Jordan Longstaff
a3e540ebfe Modularize Mirrored World mode hook (#5930)
* Modularize Mirrored World mode hook

* Remove IS_RANDO from registration conditions

Co-authored-by: Philip Dubé <serprex@users.noreply.github.com>

---------

Co-authored-by: Philip Dubé <serprex@users.noreply.github.com>
2025-11-09 18:27:45 -07:00
Malkierian
6b83070343 Logging bump (#5938)
* Bump LUS, call `InitLogging` with both values at `trace`.
Set up proper conditional default log level in Dev Tools.

* Update LUS ref.
2025-11-09 18:27:19 -07:00
Jordan Longstaff
7ff93a3960 Dampe's Hut open all night when Dampe is out (#5937) 2025-11-09 18:27:09 -07:00
Pepper0ni
3d525d7eb1 Fix excluded locations getting bombchus when bombchu bag is off (#5943)
* Fix bombchus being consistently added to excluded locations

* change to be a random junk item
2025-11-09 08:58:18 -07:00
Garrett Cox
5249cd89df Stop creating timesplits file on init, and gitignore it (#5933) 2025-11-08 15:51:24 -06:00
Garrett Cox
8073f96856 Various hooks to support anchor (#5929) 2025-11-08 15:51:09 -06:00
Garrett Cox
66a9c7a218 Add merge strategy for preset sections (#5935) 2025-11-08 15:50:41 -06:00
Garrett Cox
0e162cbb7c Fix skybox being manipulated outside of appropriate scenes, other tweaks to disable 2d backgrounds impl (#5925) 2025-11-08 15:49:35 -06:00
Jordan Longstaff
3793e821c8 Autosave disabled when Ocarina of Time obtained but not Song of Time (#5936)
* Autosave disabled when Ocarina of Time obtained but not Song of Time

* Add explanation comment

Added a condition to prevent autosaving between obtaining the Ocarina of Time and the Song of Time.
2025-11-08 13:06:01 -07:00
Malkierian
43118146e4 Merge pull request #5927 from Malkierian/copper-dev-2
Copper -> Develop 11/6
2025-11-06 18:29:25 -07:00
Malkierian
be70bb3296 Merge branch 'develop-copper' of github.com:Malkierian/Shipwright into develop 2025-11-06 17:01:44 -07:00
Malkierian
4aaad850bd Bump to Bravo 9.1.1. (#5922) 2025-11-04 17:40:02 -07:00
Malkierian
cf275b1a6c Implement logger changes (#5914)
* Implement logger changes, and make default log level dynamic based on debug/release.

* Bump LUS.

* typo

Co-authored-by: Eblo <7004497+Eblo@users.noreply.github.com>

---------

Co-authored-by: Eblo <7004497+Eblo@users.noreply.github.com>
2025-11-03 18:54:01 -07:00
Philip Dubé
0014f40676 rando BOTWMQ: only turn the water level crystal switch into toggle (#5902) 2025-11-03 18:49:11 -07:00
Malkierian
f015a1b339 Apply expected lexicographical sort to initial and new mod addition list. (#5904) 2025-11-03 18:48:48 -07:00
Malkierian
b2090dcf83 Add "CuccosToReturn": 1 to Main Randomizer preset. (#5915) 2025-11-03 18:00:31 -07:00
Malkierian
ebf8a3b47f Fix Song Shuffle Off (#5918)
* Temporarily fixes Song Shuffle Off causing songs to not be given on seeds created solely from spoilers.

* Remove instead of comment.
2025-11-03 17:40:54 -07:00
Pepper0ni
f3b0d8e230 quick fix ZR grass logic (#5906) 2025-11-01 11:45:23 +01:00
Philip Dubé
156a1a7816 refactor ice cavern (#5661)
* refactor ice cavern

fixes blue rupee logic at beginning
makes structure usable for doorsanity & silver shuffle

* feedback

* feedback2

* feedback
2025-11-01 11:43:47 +01:00
Malkierian
4e913cc094 Merge pull request #5901 from Malkierian/copper-to-dev
Copper -> Dev 10/29
2025-10-29 14:41:56 -07:00
Malkierian
9f089aa6f8 Merge branch 'develop-copper' of github.com:Malkierian/Shipwright into develop 2025-10-29 13:54:22 -07:00
Jordan Longstaff
1ba6cf643d Modularize coloured ToT Medallions hook (#5877)
* Modularize colourized ToT Medallions hook

* Add overlooked reset of Forest Medallion colour

* Move asset variables to hook file

* Fix includes

* Remove forward declarations

* Use data structures to reduceboilerplate code

* Simplify data structures, reduce boilerplate even more

* Correct patchName2 checks

* Clang format

* Add brackets on if statements
2025-10-29 13:36:29 -07:00
Malkierian
b30191f369 Set cutsceneIndex to 0 to bypass cutscene shenanigans when spawning in ToT as adult. (#5899)
Unify savedSceneNum at -1 regardless of starting age.
2025-10-29 09:05:14 -07:00
aMannus
7ffd01f133 Let shuffled fairies spawn on link's location instead (#5890) 2025-10-28 20:54:00 -07:00
Jordan Longstaff
a419b431a7 Modularize Pause Warp hook (#5869)
* Modularize Pause Warp hook

* Make RegisterPauseMenuHooks static

* Merge pausewarp.c into hook module

* Use brackets with if statements

* Fix timer bug with spoiling items
2025-10-28 20:52:18 -07:00
Malkierian
48f4f56bac Change disabling rules for Skip Feeding Jabu-Jabu to reflect the fact that it only works in rando based on the rando setting. (#5889) 2025-10-28 17:01:59 -07:00
Pepper0ni
1b29c0cad3 fix logic error with detu tree torch room (#5898) 2025-10-28 16:57:16 -07:00
Malkierian
74312442d5 Fix wrong CVar on Hookshot Identifier. (#5883) 2025-10-25 19:52:22 -07:00
Jordan Longstaff
248fe8cb13 Modularize Reset Navi Timer hook (#5872)
* Modularize Reset Navi Timer hook

* Remove unnecessary sceneNum param name
2025-10-25 13:25:50 -07:00
Jordan Longstaff
c4f9712eff Modularize scene-specific Dirt Path fix (#5871)
* Modularize scene-specific Dirt Path fix

* Use macro in fix function

* Condition hook on fix being enabled

* Rename update function
2025-10-25 13:25:33 -07:00
Jordan Longstaff
cadae90c81 Modularize Floor Switches fix hook (#5870)
* Modularizes Floor Switches fix hook

* Remove unused include for z_obj_switch.h

* Convert to ID hook
2025-10-25 09:40:46 -07:00
Malkierian
ad2807ce32 Fix adding Enable Mods twice as search widget. (#5880)
Fix a couple typos in search widget extra terms.
2025-10-23 18:32:00 -07:00
Malkierian
ae1cee9b13 Bump to version Copper Alfa 9.1.0. (#5866) 2025-10-21 19:01:39 -07:00
Malkierian
56a05c392e Update to latest LUS commit with clip adjustments. (#5865) 2025-10-21 18:27:24 -07:00
xxAtrain223
955ee9b9ba Fix doorType calculation for shutter doors (#5862) 2025-10-20 21:59:50 -07:00
Malkierian
dc5e9686c0 Mod Menu Tweaks (#5844)
* Fix mod order retention.
Remove mods in the CVar that no longer exist.

* Rework mod list init for enabled-by-default with extension changing to disable.

* Rework entire system for default enabled.
Disabled mods are renamed for sake of saving a CVar.
Menu now has an edit mode, cancel button, and apply & close.
Move Enable Alternate Assets to be Enable Mods in the mod menu.
Couple small fixes in the item tracker.

* Try to fix Mac.

* Remove disabling for Enable Mods while editing.
Add info about load order in relation to the list.

* Fix archives being added multiple times across multiple init passes.

* Add full-row drag and drop.
Swap columns.
Add information about dragging to header.

* Remove enable/disable flow, and setup the menu to only handle load order.
Change AltAssets to default on.
Move menu to Settings tab.
Move tab hotkey widget to mod menu.
Fix alt assets migrator value.

* Reverse list order for priority on top.

* Remove ExtensionType.
2025-10-20 10:51:56 -07:00
Philip Dubé
8d441f3ae5 fix rando hints for bridge requirements (#5857) 2025-10-20 10:51:43 -07:00
Malkierian
7004c1fc4f Fix GS not being marked as collected when not shuffled. (#5861) 2025-10-20 10:51:33 -07:00
Jordan Longstaff
c806f23494 Potion Shop back door open at night (#5849)
* Potion Shop back door open at night

* Rerun clang-format

* Standard initFunc naming
2025-10-17 08:18:12 -07:00
Philip Dubé
1cd2f60e24 sign hints: add gtg, display destination not source (#5850) 2025-10-17 08:17:53 -07:00
Malkierian
6ef8be58d7 LUS ref bump for cursor visibility tweaks. (#5848) 2025-10-16 08:43:38 -07:00
Philip Dubé
a73d80c82b shuffle thieves' hideout entrances (#5619)
* shuffle gerudo fortress entrances

* tracker names

* typo

* don't jail from TH in mixed gerudo entrance shuffle

* split RR_TH_KITCHEN_TOP

* fix incorrect logic re near gs to long roof

* whitespace

* Shuffle Thieves' Hideout

* increase ENTRANCE_OVERRIDES_MAX_COUNT
2025-10-15 19:10:10 -07:00
Malkierian
c0aa3deb93 Fix Notes Conditions (#5847)
* Fix conditions for personal notes being displayed and the notes display type option being disabled.

* clang
2025-10-15 16:43:57 -07:00
Cameron
56ab4c51fd Rando: Split fairysanity into distinct options (#5726)
* Split Fairysanity into groups

* Split fairy registration per type

* fix song fairy shuffle locations

* Change "Song Fairies" to "Fairy Spots"

* Update preset settings

* clang format

* simplify `shouldRegister` logic
2025-10-13 15:11:55 -07:00
Philip Dubé
73f3427ced rando: remove vanilla (#5805) 2025-10-13 15:10:51 -07:00
Philip Dubé
e254c1f908 botw: water level toggle (#5710)
amazingly the code already handles the flag being cleared to raise the water level,
so only need to setup hooks for ocarina spot to toggle

In MQ it's a diamond switch, so only need to turn it into a toggleable diamond switch
2025-10-13 15:10:24 -07:00
Malkierian
94b07aaa73 Pull in LUS audio API selection fix. (#5840) 2025-10-13 08:47:46 -07:00
Malkierian
8302c2322f Standardizes naming conventions for ShipInit and MenuInit registrations. (#5837)
Fixes missing `static` keywords for two `ShipInit` registrations.
2025-10-10 13:26:06 -07:00
Philip Dubé
f253d24cdc Cheat: Disable Sandstorm (#5800)
* Cheat: Disable Sandstorm

Can also be considered an A11y feature,
tho it'll always be hard with the muted colors,
even if we added option to reduce fog

* extern C?
2025-10-10 10:25:41 -07:00
Malkierian
52a8f6c281 Program Execution Argument Extraction (#5807)
* Add function to be able to feed specific path into to process programmatically, and setup drag and drop functionality.

* Encapsulate dropped file functionality from Switch and Wii U.

* Fix dropped file detection, and fix ShowYesNowBox return checking.
2025-10-09 16:51:04 -07:00
briaguya
57c368aa2c update lus includes for new LUS file structure (#5820)
* Bump LUS to include FileDropMgr's new registration system and initial cursor visibility changes.

* New LUS ref.

* Remove default on for cursor always visible.
Add option to camera controls next to enable mouse input for autocapture.
Set autocapture on startup.

* next LUS

* clang again

* Add "EnableMouse" CVar check to startup SetAutoCaptureMouse.

* Back to LUS main.

* lus version with fixes we need

* very wip

* get it building

* soh otr

* bump lus before fixing soh side stuff

* build

* still builds

* mac error

* bump otrexporter

* bump to lus main

* upstream otrexporter

---------

Co-authored-by: Malkierian <malkierian@gmail.com>
Co-authored-by: briaguya <70942617+briaguya-ai@users.noreply.github.com>
2025-10-09 16:50:51 -07:00
briaguya
7700b34646 bump otrexporter (#5835) 2025-10-09 01:49:33 -04:00
Philip Dubé
82e2fbb43f null audio engine (#5834)
depends on https://github.com/Kenix3/libultraship/pull/909
2025-10-08 17:26:03 -07:00
Philip Dubé
0973a4211e Fix grass graphic in Shuffle Grass (#5831)
Previously rendering grass as wrong kind in MQ Dodongo room above stairs

Updated code to match decomp logic
2025-10-07 09:23:18 -07:00
Philip Dubé
474d944cfa RT_GROUND_JUMP (#5745)
* RT_GROUND_JUMP, RT_GROUND_JUMP_HARD

based on zootr logic

* 2 groundjumps in Gerudo Fortress
2025-10-06 21:33:59 -07:00
Malkierian
04780de5ec Pulls in the Mac Prism fix. (#5832) 2025-10-06 17:03:38 -07:00
Philip Dubé
5e199ffea8 RT_HOOKSHOT_EXTENSION (#5704)
* 2 hookshot extension tricks

* consolidation

* not a glitch

* cleanup spirit logic

* clang
2025-10-05 18:24:32 -07:00
aMannus
f4336cdec7 Add fairy event to outside deku tree (#5830) 2025-10-05 18:02:13 -07:00
Philip Dubé
b337f38737 Add a RT_GF_JUMP case (#5828)
Adult can make jump without hover boots by jumping beside the wall (oddly, to the higher part of slope)

Only matters with Shuffle Climb
2025-10-05 11:04:38 -07:00
briaguya
dd2628f737 sequence notifs (updated #5265) (#5824)
* Adds ability for Notifiations to not make a noise

This is probably the only feature that will use it, the noise makes sense for most things we want to use notifications for, but it playing on every scene transition was a bit distracting.

* Adds a hook for OnSeqPlayerInit

* Uses new hook and displays notification instead of overlay text

* Changes names to prevent collisions

Will be registering other types of hooks that will need different ShipInitFuncs in this same file later.

* Change Icon

* Change CVarName and remove now-unused duration slider

* Update ConfigMigrator for CVar changes.

* clang-format

* fix

* bring back duration control

* config v4

* fix v4 migration

---------

Co-authored-by: Christopher Leggett <chris@leggett.dev>
Co-authored-by: briaguya <70942617+briaguya-ai@users.noreply.github.com>
2025-10-04 18:57:01 -07:00
Philip Dubé
6c724382f5 rando: fix reentry of jabu blue warp (#5829)
* rando: fix reentry of jabu blue warp

entrance randomizer uses VB_PLAY_BLUE_WARP_CS to set a flag,
which was not called when entering jabu blue warp without ruto

* alternative
2025-10-04 18:54:53 -07:00
PurpleHato
004890f2f8 French Translation - Treesanity (#5827)
* French Translation

* French Translation
2025-10-02 17:06:58 -07:00
Nivomi
c22fbc08d7 Fix "SpawnActor::CanBeApplied" check which would also actually spawn the actor, thus causing two actors two be spawned (also fix for WithOffset) (#5822) 2025-10-02 15:47:48 -07:00
Pepe20129
5cac826f97 Add a warning for disabled network (#5629)
* Update SohMenu.cpp

* clang

* Prevent warning from appearing in release builds
2025-10-02 15:45:58 -07:00
Philip Dubé
545cc396b4 Treesanity (#5541)
* treesanity

co-authored-by: turbofist

* market tree at night

* NL Trees

* remove LUSLOG

* feedback

* format

* golden skulltula tree qol

* post-rebase

* trust -129

* remove tree graphic, crate csmc

* format

* feedback

* ObjectExtension
2025-10-02 11:24:18 -07:00
PurpleHato
e10b882c08 [ADD] - 3D Scenes for pre-render areas (#5804)
* Hard removal 2D ones for now

* override some scene values for prerender tests (#46)

* Adult Link Cloudy

* Fix: Child Link Night ToT Exterior

* Fix for real now

* Tweak: Skybox castle courtyard

* WIP - adjusting for patterns

* Hooked all code, needs testing

* Hookified

* Clean up

* Update Fog Control

* clang

* Fix skybox override to only affect 3D pre-rendered scenes

Prevent the 3D scene renderer from overriding skyboxes on all scenes

Previously, the function was applying skybox changes to every scene, overriding the intended skyboxes throughout the game (Example: Kokiri Forest with a blue sky instead of it's original "greyish" one)
Now it only applies custom skybox settings to scenes in the skyboxControlList, preserving original skyboxes for other scenes

* Remove commentary and forgot to add Zelda's courtyard skybox

* Move code to shipInit.

* Early return for VB_SHOULD.

* clang

* Fix missing !

* Feedback fixes.

* clang

* Fix CVAR

* Modify Skybox for scenes with multiple viewpoints.

* setting position change to blend in the "modder stuff can do"

* Adressed review

* tooltip space missing, oops

* InitFunc

---------

Co-authored-by: Archez <Archez@users.noreply.github.com>
Co-authored-by: Caladius <clatini88@gmail.com>
2025-09-30 19:03:55 -07:00
Eblo
5ed3db0a7e Allow non-ASCII characters on Windows (#5741) 2025-09-30 19:00:30 -07:00
Malkierian
004ad3aea3 LUS Bump, Mouse Capture/Cursor Visibility Improvements (#5797)
* Bump LUS to include FileDropMgr's new registration system and initial cursor visibility changes.

* New LUS ref.

* Remove default on for cursor always visible.
Add option to camera controls next to enable mouse input for autocapture.
Set autocapture on startup.

* next LUS

* clang again

* Add "EnableMouse" CVar check to startup SetAutoCaptureMouse.

* Back to LUS main.

* Final LUS ref bump.
2025-09-30 19:00:05 -07:00
Patrick12115
11a73f88ae [Enhancement] Allow Slingshot and Bow to break randomized beehives (#5793)
* Add slingshot and bow damage checks

* Move to Rando and add Logic, hopefully

* Missing spacing
2025-09-30 12:16:26 -07:00
Philip Dubé
dbbbe0f727 RT_SHADOW_UMBRELLA_CLIP (#5668)
* RT_SHADOW_UMBRELLA_CLIP

This is technically a glitch, but offers a novice trick & less requirements

Particularly important in doorsanity for child access

* feedback, move location to upper since it has multiple paths of access
2025-09-30 12:11:31 -07:00
Pepe20129
3cf1d65466 Mod menu V1 (#4962)
* Proof of Concept

* Fixed saving/loading

* Switch sides & add arrow buttons

* Update mod_menu.cpp

* Remove old mod loading code

* Small cleanup

* Post-merge fixes

* Update mod_menu.cpp

* Lots of changes

* clang format

* Address review

* Update SohMenuEnhancements.cpp
2025-09-30 08:35:37 -07:00
Philip Dubé
b7de53bf8d Move logic bools to LogicVal enum (#5727)
* Move logic bools to LogicVal enum

Tired of seeing logic reset bugs
This opens up moving bools to bitset
This opens up tracking logic dependencies so events doesn't reevaluate everything
This opens up various events reusing logic vals (already done for LOGIC_BLUE_FIRE_ACCESS)

* ammo comments, fix magic regression
2025-09-29 18:51:07 -07:00
briaguya
7c8fc85c50 update macports (#5819) 2025-09-28 21:08:14 -07:00
Pepper0ni
207de8f408 Remove HasAccessTo and non-self-referncing Here (#5700)
* Remove HasEccessTo and non-sel-referncing Here

* fix here related logic errors
2025-09-27 18:53:20 +02:00
Spodi
14d269d99e Fix Multi-Window not checked by default (#5806)
* Fix Multi-Window not checked by default

Last time i tested with a new config file this was actually on, despite it showing off. So now it shows ON by default :)

* clang
2025-09-26 07:50:24 -07:00
Pepe20129
4b9c949428 Fix dark link ice floors (#5808) 2025-09-26 07:50:16 -07:00
Pepper0ni
c7975898a5 Apply price logic to bean salesman (#5811)
* apply price logic to bean salesman

* clang
2025-09-25 23:24:51 -07:00
Malkierian
b30c4ab7da Fix issues arising from the Search Widgets PR. (#5813) 2025-09-25 08:28:23 -07:00
Extloga
a576bffe3a Additions for the German translation in hint_list.cpp (#5803) 2025-09-19 17:31:20 -07:00
Philip Dubé
eeb5a809ae Rando: option for Mido to hint location of Kokiri Sword (#5724)
* Rando: option for Mido to hint location of Kokiri Sword

also fix bug where Mido blocks path to Deku Tree when Closed Forest off but Zelda's Letter not skipped

* french

Co-authored-by: PurpleHato <linkvssangoku.jr@gmail.com>

---------

Co-authored-by: PurpleHato <linkvssangoku.jr@gmail.com>
2025-09-18 19:58:30 -07:00
William Casarin
8e15cefe2b dev-tools: add bit label on flags table (#5658)
* build: add -Wformat-security

On some distros format-security is turned on to detect possible issues
with non-string literals as format strings

Let's explicitly turn it on and fix the ImgUi text formatting to avoid
compile issues on those platforms

Signed-off-by: William Casarin <jb55@jb55.com>

* save-editor: add flag table bit index labels

Signed-off-by: William Casarin <jb55@jb55.com>

---------

Signed-off-by: William Casarin <jb55@jb55.com>
2025-09-18 13:34:41 -07:00
enzu.ru
577c5639df Improve Nix support (#5777)
* Fix FindOpusFile NixOS bug

* better documentation
2025-09-18 13:29:35 -07:00
Philip Dubé
b944d01b12 atomic saving (#5792)
prefer rename to copy/delete, this avoids issues with partial writes
2025-09-18 13:29:21 -07:00
Philip Dubé
7cce840472 rando: fix bug where Mido blocks path to Deku Tree when Closed Forest off but Zelda's Letter not skipped (#5785) 2025-09-17 17:40:06 -07:00
Patrick12115
4bc2bb5592 Wiggle (#5794) 2025-09-17 17:39:30 -07:00
Philip Dubé
911c107b6e saves: use single white space when formatting (#5791)
this halves size of rando saves
2025-09-17 17:24:52 -07:00
Malkierian
a88cac300e Restores IS_RANDO default for the "Always Win Dampe Digging Game" enhancement and changes the tooltip to reflect the default status rather than the forced on status. (#5788) 2025-09-17 13:13:19 -07:00
Malkierian
ba693ecac4 Search Exclusion and Search Widgets (#5656)
* Implement widget search exclusion.
Exclude all external windows from the search.

* Add second column to search results for non-widget results.

* Implement extra search index.
Add various controls, audio editor, and tracker options to the extra search index.
Fix capitalization on a few options.
Add click-to-view functionality to extra search column.

* Add extraSearchWidgets for searching through non-menu widgets.
Convert Controls extraSearches to widgets. Used to display in-window, as well as provide reference to extraSearchWidgets.

* Swap Audio search to menu widget search system.

* Fix missing static on a ShipInit instance.

* Implement SearchWidgets in popout windows.
Remove remaining vestiges of custom search.

* Add SearchWidget for randomizing audio on seed gen.

* Remove comments on color picker entries in WidgetType.

* Put all search results in middle column for width management.
Change combobox alignment and label position in search results to unify them all to left and above for better organization.
Add "Search Results" text to header of results page for clarification.

* clang
2025-09-16 18:57:33 -07:00
Philip Dubé
e6663a1c49 entrance shuffle: sign hints (#5335)
* entrance shuffle: sign hints

* update entrance tracker with hint

* show sign hints when any entrances shuffled

* only hint when entrance shuffled

* avoid crash when loading rando file

* fix kf exit

* correct hint from sign outside kokiri forest

* 3 signs on DMT

* improve naming
2025-09-16 17:52:47 -07:00
Malkierian
524ba26034 Merge pull request #5776 from A-Green-Spoon/tweak/gerudo-jail-swap
Prevent hideout guards from asking to throw Link in jail
2025-09-11 08:43:00 -07:00
Malkierian
f7ab811c20 Merge pull request #5770 from Extloga/develop
Fixes for the German translation in several files
2025-09-11 08:42:45 -07:00
Malkierian
640a7d24b4 Merge pull request #5766 from A-Green-Spoon/standardize-entrance-names
Standardize deku scrub grotto entrance names
2025-09-11 08:42:37 -07:00
Malkierian
7ff2355c7e Merge pull request #5787 from Malkierian/blair-dev-9-8
Actual Blair->Develop 9/8
2025-09-10 10:27:07 -07:00
Malkierian
e5d0f7befa Fix conflict resolution for SkipBlueWarp's VB_GIVE_ITEM_FROM_BLUE_WARP. 2025-09-10 09:10:51 -07:00
Malkierian
64280146fe Merge branch 'develop-blair' of github.com:Malkierian/Shipwright into blair-dev-9-8 2025-09-08 20:56:12 -07:00
Eric Hoey
e9f1296781 add scene check to hook and custom message 2025-09-03 14:48:46 -04:00
Extloga
aacb4ad2f7 Fixes for the German translation in shops.cpp 2025-08-29 19:43:32 +02:00
Extloga
bd4e146599 Fixes for the German translation in item_list.cpp 2025-08-29 19:33:02 +02:00
Extloga
52d452307e Fixes for the German translation in scenes_ger.json 2025-08-29 13:41:31 +02:00
Extloga
a76c1ca9db Fixes for the German translation in filechoose_ger.json 2025-08-29 13:39:11 +02:00
Extloga
beea799081 Fixes for the German translation in kaleidoscope_ger.json 2025-08-29 13:38:40 +02:00
Extloga
fc866e695e Fixes for the German translation in randomizer.cpp 2025-08-29 13:09:45 +02:00
Extloga
9a59af2a5e Fixes for the German translation in hint_list_item.cpp 2025-08-29 12:57:20 +02:00
Extloga
e0e3cb21a3 Fixes for the German translation in item_list.cpp 2025-08-29 12:41:52 +02:00
Extloga
113e899f09 Fixes for the German translation in shops.cpp 2025-08-29 12:38:55 +02:00
Extloga
3c084ef2a1 Fixes for the German translation in item_list.cpp 2025-08-29 12:17:35 +02:00
Extloga
263afb9c09 Fixes for the German translation in item_list.cpp 2025-08-29 02:21:23 +02:00
Eric Hoey
93c163a99c standardize scrub entrances and matching check 2025-08-27 12:53:56 -04:00
Eblo
4c269cab30 Add restoration for NTSC 1.0 shutter door range (#5757) 2025-08-25 12:51:50 -07:00
Eric Hoey
d8453b2b68 Prevent MQ Spirit softlock with increased crawl speed (#5667)
* disable crawl speed increase if MQ Spirit boulder exists

* bring max speed back to 5
2025-08-25 12:03:23 -07:00
William Casarin
6e6f8dcc9d build: add -Wformat-security (#5646)
On some distros format-security is turned on to detect possible issues
with non-string literals as format strings

Let's explicitly turn it on and fix the ImgUi text formatting to avoid
compile issues on those platforms

Signed-off-by: William Casarin <jb55@jb55.com>
2025-08-25 12:03:13 -07:00
Philip Dubé
7ee7084746 logic: remove commented glitched key logic (#5651)
this code is obsolete with glitch logic being implemented as tricks
2025-08-25 12:03:05 -07:00
Glought
bdaf352440 Adds "Randomize on Randomizer Generation" options to Audio and Cosmetics Editors (#5387)
* Add "Randomize on Randomizer Generation" options to Audio and Cosmetics Editors

 * Added "Randomize All Music and Sound Effects on Randomizer Generation" to the Audio Editor.

 * Added "Randomize All on Randomizer Generation" to the Cosmetics Editor.

When enabled, these options randomize audio and/or cosmetics during a new randomizer generation.

* Added "OnRandomizerGeneration" Hook.
 * It is executed on Randomizer Generation.

* Changed AudioEditor and CosmeticsEditor "Randomize all on Randomizer Generation" options to use the "OnRandomizerGeneration" Hook.

* Renamed "OnRandomizerGeneration" to "OnGenerationCompletion.
Renamed "GameInteractor_ExecuteOnRandomizerGeneration" to "GameInteractor_ExecuteOnGenerationCompletion"
Moved "GameInteractor_ExecuteOnGenerationCompletion" from "GenerateRandomizer" to the end of "GenerateRandomizerImgui".

* Removed "GameInteractor_ExecuteOnGenerationCompletion()" from "GameInteractor_Hooks.h" and "GameInteractor_Hooks.cpp"
The "OnGenerationCompletion" hook is now called directly at the end of "GenerateRandomizerImgui" in "randomizer.cpp"

---------

Co-authored-by: Glought <663343+Glought@users.noreply.github.com>
2025-08-25 12:02:30 -07:00
Eblo
cc477fbef2 [Enhancement] Toggle grave hole geometry (#5754)
* Add enhancement to toggle grave hole geometry

* Replace malloc and vector with fixed-size arrays

* Make newSurfaceTypes static
2025-08-25 12:01:50 -07:00
Philip Dubé
860bc57a2a fix incorrect description (#5752) 2025-08-25 12:01:33 -07:00
Mike
4a9a98d93c SDL_GameControllerDB repo owner gabomdq -> mdqinc (#5740)
* SDL_GameControllerDB repo owner gabomdq -> mdqinc

gabomdq redirects to mdqinc

* Docs SDL_GameControllerDB repo owner gabomdq -> mdqinc
2025-08-25 12:01:25 -07:00
Philip Dubé
3128fb0112 Fix crash on selling big poe (#5733)
* Fix crash on selling big poe

Easiest steps to reproduce: set poe's to 0, put big poe in inventory, trigger text using big poe bottle

I overlooked selling poes with using bottle instead of talking to collector

* disable hint when count zero
2025-08-25 12:01:17 -07:00
Pepe20129
9eafa852b5 Fix Dampe Going Backwards (#5731)
* Add FixDampeGoingBackwards

* Update SohMenuEnhancements.cpp
2025-08-25 12:00:59 -07:00
Pepe20129
7b4df9bdb2 Boss Rush cleanup (#5652)
* Reduce stuff in the `.h`s & use `COND_HOOK` + variants

* Move some boss rush stuff from `z_file_choose.c`

* clang

* Update BossRush.cpp
2025-08-13 12:08:32 -07:00
Philip Dubé
fadae49977 shipinit bonk damage (#5653)
* shipinit bonk damage

* no initFunc
2025-08-13 09:46:36 -07:00
Pepe20129
ee20f7f762 Fix max count for TH keys (#5670) 2025-08-12 20:39:31 -07:00
nclok1405
ce38e03562 Allow console commands in debug save (#5675) 2025-08-12 20:38:44 -07:00
Philip Dubé
9cdffc080b small typo fixes (#5680)
incorrect RR was tripping up my code generator
2025-08-12 20:36:51 -07:00
PurpleHato
c597e1c4ce TWEAK: SoT Time Travel - Allow Swordless (#5716)
* Magic number + more modular

* tweak + switch

* forgot basic oot

* linebreak

* c-lang
2025-08-12 19:57:19 -07:00
Pepe20129
526d221c56 Add timestamps for remaining custom rando items (#5713) 2025-08-12 19:57:02 -07:00
Pepe20129
3e39a94083 Turn song text into a notification (#5712) 2025-08-12 19:56:52 -07:00
Pepe20129
6d4c6f8ea6 Rando: Remove ice trap effect from vanilla ice trap chests (#5711) 2025-08-05 20:43:41 -07:00
Malkierian
429021d434 Add THRescuedAllCarpenters to reset list to prevent seed bleed of bridge. (#5725) 2025-08-05 18:28:19 -07:00
Malkierian
1d20000411 MPQ Support LUS Bump (#5570)
* Adapt to changes to LUS regarding including MPQ support.

* CMake compile definitions are stupid.

* Don't manually close O2RArchive.

* Finish LUS bump, including SoH-side fix for font free crash.
2025-07-28 08:54:31 -07:00
aMannus
73209fcf2c Merge pull request #5697 from Malkierian/blair-foxtrot-dev
Blair Foxtrot -> Develop
2025-07-25 11:56:33 +02:00
Malkierian
27d88c80b1 Merge branch 'develop-blair' of github.com:Malkierian/Shipwright into blair-foxtrot-dev 2025-07-24 10:04:06 -07:00
Malkierian
237dcfec74 Move all maps from Menu.h to the source files that use them. (#5644) 2025-07-01 17:40:42 -07:00
Philip Dubé
ec54d02c0c Spirit Flags (#5631)
1. skip cutscene delay for sun on floor & sun on block
2. persist sun on floor temp flag
3. persist big mirror being solved before platform lowered

2 removes need for weird bomb key logic
3 needed for shuffle doors
2025-07-01 12:04:26 -07:00
Philip Dubé
cddc7353af tts: replace rupee count with key count in dungeons (except first 3 child dungeons) (#5642) 2025-07-01 10:54:39 -07:00
aMannus
48d2193fec CrowdControl additions & improvements (#5104)
* CrowdControl additions & improvements

* Update after dev merge

* clang format

* Revert "clang format"

This reverts commit 1be5ad18f5995792971fa0a1772109b0157817b4.

* clang format
2025-07-01 10:54:26 -07:00
Philip Dubé
05a7f728e7 dev tools save editor: change dungeon drop down to current dungeon (#5635) 2025-07-01 10:30:02 -07:00
aMannus
db58c3a029 Fix clang-format ps1 script (#5637)
* Fix clang-format ps1 script

* use path variable
2025-06-30 16:56:55 -07:00
Philip Dubé
f80836d8b7 Enemy Randomizer: all the invis (#5621)
Fire Keese, Floormaster, Ice Keese, Keese, Redead, Stalfos
2025-06-30 14:52:45 -07:00
Philip Dubé
928bb7767b reduce logical implications of closed forest (#5626)
* reduce logical implications of closed forest

closed forest should only be about kokiri blocking the way,
no need to try plug alternate forest escapes out

* revert adult deku being unlocked in forest without showing mido sword/shield
2025-06-30 14:52:02 -07:00
Malkierian
96d3b480b1 Merge pull request #5638 from Malkierian/blair-dev-6-30
Blair->Dev 6/30
2025-06-30 14:31:30 -07:00
Malkierian
7f3d2adc63 Fix whitespacing in presets. 2025-06-30 13:04:51 -07:00
Malkierian
015dcf2af1 Fix typo. 2025-06-30 10:58:49 -07:00
Malkierian
30d1932354 Re-add new preset items to new preset files. 2025-06-30 09:37:02 -07:00
Malkierian
002e8e9f09 Merge branch 'develop-blair' of github.com:Malkierian/Shipwright into develop 2025-06-30 09:28:11 -07:00
Philip Dubé
063fb2577f cleanup, trying to speed up build (#5627) 2025-06-29 18:21:47 -07:00
Malkierian
16c3cb1adf Tracker circle (#5632)
* Fix item tracker circle display.

* Add .o2r to .gitignore.

* clang
2025-06-29 18:06:21 -07:00
Philip Dubé
112fbc5a4b trick: ledge clip into gtg (#5618)
* trick: ledge clip into gtg

* fix
2025-06-29 13:57:57 -07:00
Eblo
9924ebbd05 Enhancement to double pause menu animation speed (#5615)
* Add enhancement to speed up pause menu animation

* Rename CVar to FasterPauseMenu

* Rename kaleido to pause menu

* Rename register func to InitFasterPauseMenu
2025-06-28 07:50:28 -07:00
louist103
e15f8d395b Backport 2ship streamed audio (#5457)
* Bring over changes from 2ship

# Conflicts:
#	.github/workflows/apt-deps.txt
#	soh/CMakeLists.txt
#	soh/soh/resource/importer/AudioSampleFactory.h
#	soh/soh/resource/importer/AudioSequenceFactory.cpp
#	soh/soh/resource/importer/AudioSequenceFactory.h
#	soh/soh/resource/importer/AudioSoundFontFactory.h

* Update xml format

* Format and fix mixer for Windows

* Fixes for new LUS

* Good ole clang-format
2025-06-27 17:15:02 -07:00
Philip Dubé
9e686ae6f6 Shuffles: use ObjectExtension system for rando object identity (#5603) 2025-06-25 22:00:53 -07:00
Pepper0ni
1d24edaa92 Split Gerudo Fortress and fix break room logic errors (#5338)
* Separate HBA range

* Separate 4 rooftop regions

* Rest of rooftops

* Small cleanup

* Whoops

* Create `thieves_hideout.cpp` & move `gerudo_fortress.cpp`

* Ground and some inside

* More outside cleanup and more inside

* Kitchen

* Final tweaks

* Use `TH_` prefix for Thieves' Hideout locations

* Add clarifying images (+ `.xcf` source)

* Thieves' Hideout is overworld

* Fix `RC_GF_GS_TOP_FLOOR` & blue -> violet entrance

* Address review

* Update gerudo_fortress.cpp

* Address review

* Split "CarpenterRescue"

* Rename events

* Update logic.cpp

* Move from function to event

* Rename most of the regions

* Address review

* Add new conections

* update logic, get it working

* apply clang format

* undo clang format in logic files

* final reordering

* remove additions to .gitIgnore

* Fix some jump trick logic

* clean up ShufflePots

* fix submodules

* update for review and talk to jail and always gate PRs

* change thieves hideout to scene handling

* final fixes and update enum names and hint text

---------

Co-authored-by: Pepe20129 <72659707+Pepe20129@users.noreply.github.com>
2025-06-25 21:54:48 -07:00
Eric Hoey
63bd4ed565 cast to signed 16-bit to stop truncation (#5617) 2025-06-25 21:42:27 -07:00
Philip Dubé
c2e7adf915 more tricks (#4866)
* more tricks

1. big poe without epona
2. king dodongo with chu
3. morpha without hookshot
4. open underwater chests (ignore water temple usage for now because water logic is weird)
5. DC MQ stairs without stick, also bring over vanilla alternatives for stairs

rename RT_DC_STAIRCASE to RT_DC_STAIRS_WITH_BOW

* consistency
2025-06-25 09:33:47 -07:00
Eric Hoey
74560a360d fix pot param (#5610) 2025-06-23 18:32:35 -07:00
louist103
040e0e1921 Tools update (#5454)
* Bump ZAPDTR & OTRExporter.
Changes to use o2r by default
Changes to the new player animation format

# Conflicts:
#	OTRExporter
#	ZAPDTR
#	soh/soh/OTRGlobals.cpp
#	soh/src/code/z_skelanime.c

* Fix actions

* Format

* Cherry pick ZAPDTR

* Update exporter

* Move configs to port

* Remove copy

* Remove more XML copies

* Remove extractor directory from actions builds.

* Fix OTRExporter for linux

* FIx ZAPD volatile

* Format

* Fix extractor?

* Fix linux

* Fix

* Remove appimage stuff

* Screnity now

* Remove ZAPD from install paths

* Remove soh.sh.in

* Fix linux

* Cleanups and use a thread for message box
2025-06-23 21:29:40 -04:00
Philip Dubé
64f9e433da Tag navi dive tricks as glitches (#5598) 2025-06-22 21:35:17 -07:00
Malkierian
e0ebc115ce Initialize OTRGlobals' Context early to prevent non-portable crash during asset archive lookup. (#5605) 2025-06-22 16:32:37 -07:00
Malkierian
cf0ea3033e Fix warning for euro symbol in CustomMessageManager.h. (#5604) 2025-06-22 12:41:13 -07:00
Malkierian
2d59721b7a Small fixes to allow running and seed generation. (#5600) 2025-06-19 22:10:06 -07:00
nclok1405
7ecefa8f90 Converted "Passage of Time on File Select" to ShipInit Hook (#5595) 2025-06-19 18:59:46 -07:00
nclok1405
7514bdc08b Convert enemy-specific cheats "No ReDead/Gibdo Freeze" and "Keese/Guay don't Target You" to hooks (#5597) 2025-06-19 15:06:10 -07:00
Sirius902
3943242cb2 Dynamically construct weird frame data (#5195) 2025-06-19 15:05:57 -07:00
Schicksal88
517b52176c German translation cleanup (#5471)
* German translation cleanup

- German ice trap names and code for it to show up. Changed the order of translations to english/french/german to make it consistent with item_list.cpp.
- German shops as those are now complete.
- German translation for ingame fileselect rando menu.
- Added function to mark an item as plural. This is necessary to have proper grammar in most german sentences. If an item has a € at the end of it and the sentence it get's inserted into has |singular|plural| forms defined, the singular part get's removed.
- Added the plural markers & |singular|plural| parts to the entire german script where it was necessary.
- Fixed grammar, typos, inconsistencies and now everything uses official Zelda-game names.
- Fixed vanilla/master quest map text

* ice trap fix

accidentally commented out french twice instead of spanish. fixed.

* German Randomizer

Some fix for Schicksal

* Fix number 2

Fix number 2 for Schicksal

* Update soh/soh/Enhancements/custom-message/CustomMessageManager.cpp

Co-authored-by: Philip Dubé <serprex@users.noreply.github.com>

* clang format

---------

Co-authored-by: amafresh <arminamayeh@gmail.com>
Co-authored-by: Philip Dubé <serprex@users.noreply.github.com>
2025-06-19 14:53:50 -07:00
Philip Dubé
7f3aac36b2 ShuffleFreestanding: ShipInit (#5583) 2025-06-19 14:53:15 -07:00
Philip Dubé
1e60c48e3a a11y: linux tts with espeak-ng (#5428)
* a11y: linux tts with espeak-ng

* dlopen

* Show setting on Linux
2025-06-19 14:27:56 -07:00
Philip Dubé
4c31f2bc88 Extend RT_BLUE_FIRE_MUD_WALLS (#5215)
Co-authored-by: Pepper0ni <93387759+Pepper0ni@users.noreply.github.com>
2025-06-19 13:43:39 -07:00
Philip Dubé
180d6a1b90 FasterShadowShip.cpp (#5114)
Makes boat 25x faster
2025-06-19 13:42:53 -07:00
Philip Dubé
561f151615 a11y: tts integration with randomizer start menu (#5414) 2025-06-19 13:42:00 -07:00
nclok1405
565d57112e Japanese translation for Better Debug Warp Screen (#5491)
* Japanese translation for Better Debug Warp Screen

* Incorporate fixes by balloondude2 (except Shield/Treasure Chest Grave inconsistencies which I'm unsure how to handle that)

* Localize "Scene Selection" header for each language

* Added/Restored the ability to render Hiragana characters using GFXP_HIRAGANA macro
2025-06-19 13:41:41 -07:00
Philip Dubé
7f4c570a47 ShuffleFairies: ShipInit (#5582)
* ShuffleFairies: ShipInit

* fix big fairy items
2025-06-19 13:40:37 -07:00
Philip Dubé
073205c862 ShufflePots: ShipInit (#5584) 2025-06-19 13:40:24 -07:00
nclok1405
4f95ab3f46 Add/Restore the option to automatically boot into Debug Warp Screen (#5485)
* Added/Restored the option to automatically boot into Debug Warp Screen

* clang-formated

* Added a new hook and moved Boot To Debug Warp Screen to it

* clang

* Added DebugEnabled to initFunc's CVar list. This should prevent Debug Warp from being triggered when Boot to Debug Warp option is enabled but Debug Mode option is disabled.

* No longer hijacks CustomLogoTitle

* Disable "Boot Sequence" dropdown when Boot to Debug Warp Screen is enabled
2025-06-19 13:39:03 -07:00
Philip Dubé
c0ea595fa5 rando: always spawn gerudo guard behind gate (also fix gaurd typos) (#5399)
* rando: always spawn guard behind gate (also fix gaurd typos)

someone had seed where they had card so couldn't be caught to pass gate in reverse wasteland

* move guard spawn logic to hook
2025-06-19 13:38:11 -07:00
Philip Dubé
a9ede7d46e SwitchTimerMultiplier: fix crash due to missing actor param (#5593) 2025-06-19 13:37:48 -07:00
Malkierian
be22c02d00 Reapply "Set Sample Rate to 32000 hz (#4780)" (#5234) (#5508)
This reverts commit feea299291.

Also applies rupee screech fix LL provided to 2ship.
2025-06-19 13:34:47 -07:00
Philip Dubé
81b3123586 timesavers: shipinit (#5416)
* timesavers: shipinit

* feedback

* intro skip not unconditional
2025-06-19 13:34:11 -07:00
Pepe20129
87c971372d Change Region's scene string with a SceneId (#5398)
* Change region scene from string to sceneid

* Deduce `timePass` from scene

* Deduce `areas` from scene where possible

No possible for `RR_CASTLE_GROUNDS` & "link's pocket" areas

* Update zoras_fountain.cpp

* Applied clang format

* Address review

* Address review

* Clang format

* Fix pseudo regions

* Format

* Address review

* Address review
2025-06-19 13:32:39 -07:00
Philip Dubé
4c547416cc replace MT RNG with PCG (#4973)
replace boost hashing with FNV-1a
removes boost as a dependency
2025-06-19 13:31:35 -07:00
Malkierian
081338b9f9 Merge pull request #5577 from Malkierian/dev-blair-6-12
Blair -> Develop 6/12
2025-06-18 13:01:13 -07:00
Philip Dubé
330e64180c Difficulty: SwitchTimerMultiplier (#5555)
* Difficulty: FireTimerMultiplier

Introduces slider to adjust timer on fire walls resetting switches

* rename, add more timers

* also shadow trial, dampe race, deku water

* avoid decrementing timer to 0, which with BgMizu can cause timer to go below 0 & break

* gtg eye statue

* also scale torches

* tooltip

* Limit difficulty: torches stop at -3 & shadow temple torch puzzle stops at -4

* put timer condition as should when convenient
2025-06-15 10:19:58 -07:00
Philip Dubé
213ea742eb Gerudo Guards: offer to throw you in jail (#5390)
* Gerudo Guards: offer to throw you in jail

Necessary for logic to use being captured in routing

* don't intercept Ge3

* TODO_TRANSLATE

* cleanup
2025-06-13 22:43:25 -07:00
Malkierian
cd32181415 Fix incorrect merge conflict resolution. 2025-06-12 22:41:19 -07:00
Malkierian
c2b6942282 clang 2025-06-12 17:57:29 -07:00
Malkierian
2b1322d723 Merge branch 'develop-blair' of github.com:Malkierian/Shipwright into develop 2025-06-12 17:46:47 -07:00
Jason
62c03abfd4 Updates docs/MODDING.md example to reflect current codebase (#5558)
* Update docs/MODDING.md change example to reflect current codebase

* Changes to MODDING.md (#5558): fixes slight typo

* Changes to MODDING.md (#5558): fix typo and remove uneeded explanation that minimum and maximum are floats
2025-06-12 13:39:21 -07:00
Malkierian
bf3add7a72 Re-add ShipInit::InitAll() to the end of applyPreset(). (#5574) 2025-06-12 13:24:19 -07:00
Philip Dubé
9432b3420b tts: only announce timer at 10s intervals (#5559)
* tts: only announce timer at 30s

1. reading out every second doesn't have enough time to even say more than a number
2. tts is hard to hear the rest of the game over while it's counting non stop

* under a minute announce every 10s
2025-06-12 13:23:47 -07:00
Philip Dubé
52debea44b Difficulty: CuccosToReturn (#5552)
* Difficulty: CuccosToReturn

Mirrors rando option

* remove RSK_CUCCO_COUNT

* revert forcing rando to at least 1
2025-06-11 14:41:54 -07:00
Philip Dubé
07328a0ecb remove leftover No Dampe Fire checkbox (#5561)
got moved to difficulty dropdown
2025-06-11 14:38:34 -07:00
Philip Dubé
af99ef8e07 Hookify TreesDropSticks (#5566)
* Hookify TreesDropSticks

* fix off by one
2025-06-11 14:38:12 -07:00
Rozelette
dbc2ff09b5 Convert actor health bars to use ObjectExtension (#5565) 2025-06-11 14:37:34 -07:00
Pepe20129
abb0a93945 Add Anubis, Flare Dancer, Skull Kid & Spear Moblin to enemy randomizer (#5483)
* Add Anubis, Flare Dancer, Skull Kid & Spear Moblin

* Include spear moblins and exclude flare dancer in clear rooms

* Exclude anubis from clear rooms

* Fix skull kill issues

* Clang format

* Address review

* Use hook

* Update z_en_mb.c
2025-06-04 18:07:57 -07:00
Philip Dubé
5b2c30edb0 Faster water temple gate (#5556)
* rando: faster water temple gate

* move to time saver
2025-06-04 17:09:06 -07:00
nclok1405
3377dc636a Default to Hiragana keyboard when playing in Japanese (#5543)
* Default to Hiragana keyboard in Name Entry screen when playing in Japanese (NTSC behavior)

* clang-formated
2025-06-04 17:08:50 -07:00
Philip Dubé
3a60c3f651 SkipAmyPuzzle (#5550) 2025-06-04 17:08:36 -07:00
Philip Dubé
56a53e9fac consolidate RAND_GET_OPTION (#5553) 2025-06-04 17:08:27 -07:00
Pepe20129
f5d8f1eece Add ShuffleSongs.cpp & RO_SONG_SHUFFLE_OFF (#5534)
* ShuffleSongs.cpp

* Address review and fix build

* Update soh/soh/Enhancements/randomizer/settings.cpp

Co-authored-by: Philip Dubé <serprex@users.noreply.github.com>

* Change back to "Off"

---------

Co-authored-by: Philip Dubé <serprex@users.noreply.github.com>
2025-05-30 12:51:21 -07:00
Malkierian
40fa3c8d64 Convert RandomizerInf to the dynamic #define model to allow for automatic string names. (#5537) 2025-05-29 19:14:32 -07:00
Philip Dubé
2b360d4bbe Rebottle Blue Fire (#5375)
* Rebottle Blue Fire

* hookify
2025-05-29 07:06:53 -07:00
Malkierian
fa6f45bde5 Fix Preset List with no customs available (#5535)
* Surround preset file processing with the fs::exists check rather than returning early.

* clang
2025-05-27 13:19:14 -07:00
Jordan Longstaff
4e8e6d2313 Move Rupee Dash Mode hook to its own file (#5178)
* Move Rupee Dash Mode hook to its own file

* Rename initFunc
2025-05-23 20:29:43 -07:00
Rozelette
8b4cad1710 Rework ActorViewer to use hooks (#5474)
* Rework ActorViewer to use hooks

* Rework ActorViewer to use hooks

* Remove ResetData
2025-05-23 18:47:08 -07:00
TheLynk
f2298c6a8e Add Two New Tricks "Navi dive" (#5477)
* add navi dive bottom of the well

* add kokiri sword logic for botw

* Optimisation Logic

* Add Navi Dive Lost Wood

* Update Logic

* Move IsChild in logic trick

* Add brackets

* Clang-Format

* Tweak Text

Tweak Text

* Final Push ?

* It's really the last push
2025-05-23 15:37:30 -07:00
Malkierian
99c3fa6006 Preset Manager (#5459)
* Add presets sidebar, proof of concept row-based listing.

* Complete and unify section check/x drawing.

* Add error state to InputString, and corresponding members and builders to InputOptions.
Implement saving and loading of preset files.

* Implement `Config::SetBlock()`.
Implement Apply.
Implement Delete.
Some json structure changes.

* Apply `CVarClear()` calls in CVar-prefixed widget functions.

* Comment out satellite preset pickers for now.

* clang

* Fix ButtonOptions initializer list.

* I hate clang...

* Loop new preset checkbox creation.
Restore auto-resizing to new preset popup.
Remove errant BeginDisabled in randomizer (merge artifact?).

* Add BlockInfo struct to make array with all info for each block.
Setup loops for all other same-ish situations (applying presets, setting up columns, etc) based on blockInfo.

* Save tracker windows info for later restoration.
Lay the groundwork for said restoration.

* Complete tracker window restoration on preset application.

* Fix RadioButtonsOptions builder parameter type.
Add race lockout to new and apply buttons.

* Revert application of CVarClear on UIWidgets widgets (need to preserve manually-set default states).

* Remove enhancements satellite picker.
Swap randomizer satellite picker to use the manager presets, only displays presets with randomizer section included.
Move built-in presets to the asset archive, and remove delete button on them.
Remove PresetEntries.cpp.

* Fix locations and tricks tabs not updating live when applying preset with new system.

* Apply RandoGenerating lockout to rando preset Apply button.

* Fix new presets not being properly filtered in satellite selectors.

* Fix currently selected presets getting deleted still being selected in satellite selectors.

* Change BigPoeTargetCount in preset files to 1.
2025-05-23 14:57:49 -07:00
Philip Dubé
3a069e621e Fix warnings (#5516)
* use size_t instead of uint8_t for hint ids

* va_arg int instead of s16

warning: second argument to 'va_arg' is of promotable type 's16' (aka 'short'); this va_arg has undefined behavior because arguments will be promoted to 'int' [-Wvarargs]

* more issues like #5443
2025-05-23 14:21:25 -07:00
Rozelette
a2541fded8 Exclude build dependencies from clang format (#5490) 2025-05-23 14:06:19 -07:00
nclok1405
150029fa49 Set default player name to "リンク" ("Link" in Katakana) when playing in Japanese (#5487) 2025-05-23 14:05:59 -07:00
Rozelette
e4448f491e Add ObjectExtension system (#5429) 2025-05-23 14:05:33 -07:00
Jordan Longstaff
db8440e744 Move Shadow Tag Mode hook to its own file (#5179)
* Move Shadow Tag Mode hook to its own file

* Rename initFunc
2025-05-23 14:04:43 -07:00
Jordan Longstaff
d8acc32876 Move Daytime Gold Skulltulas mod hook to its own file (#5174)
* Move Daytime Gold Skulltulas mod hook to its own file

* Fix externs?

* Rename initFunc
2025-05-23 14:04:20 -07:00
Malkierian
ae480e107e Implement Log Level selector setting (#5263)
* Implement Log Level selector setting.

* run clang

* Enum for default value.

* PR feedback: use CVAR_DEVELOPER_TOOLS in CVar builder.

* Slight change to try to force a PR update.

* screw you clang
2025-05-23 14:03:30 -07:00
Philip Dubé
ca32dfd246 Dampe Fire (#5521)
* No Dampe Fire

* spicy

* bikeshed
2025-05-23 14:03:20 -07:00
Philip Dubé
24013e2e5c skip bottling big poes (#5247)
* setting to skip bottling big poes

empty bottle still required to collect

avoids logic needing to work around player soft locking by filling bottles without poe collector access

* No option, zero option

* TEXT_BIG_POE_COLLECTED_RANDO

* update preset

* fix talking to poe collector after receiving item
2025-05-23 14:00:35 -07:00
Philip Dubé
1d716a5975 ShuffleBeehives.cpp (#5511) 2025-05-22 15:18:03 -07:00
Malkierian
79b6719db3 Change soh.otr loading to use LocateFileAcrossAppDirs() instead of just the app bundle path. (#5525) 2025-05-21 11:30:16 -07:00
Philip Dubé
4216776cd6 Fix entrance optimization (#5520)
I'm an idiot
2025-05-19 22:47:04 -07:00
Malkierian
e1f6297807 Merge pull request #5517 from HarbourMasters/develop-blair
Develop blair
2025-05-19 09:19:44 -07:00
briaguya
50f42b93fe fix "is valid for C/ObjC but not for C++" warnings (#5512) 2025-05-18 16:25:00 -04:00
briaguya
3c0e7bcf72 bump lus (to bump imgui) (#5501) 2025-05-17 17:12:05 -04:00
briaguya
b418db7792 bump lus (#5500) 2025-05-17 15:35:51 -04:00
briaguya
4f0ed2949e fix seed gen underflow (#5499) 2025-05-17 07:55:21 -07:00
briaguya
026c7619da set soh c standard to 23 (#5498) 2025-05-17 02:16:59 -04:00
Archez
9010b8c540 port over nametag improvements from 2ship (#5160) 2025-05-17 01:09:23 -04:00
Malkierian
e673eaefb6 Warnings Round 2 (mostly Rando) (#5486)
* Handle virtually all warnings in `soh/Enhancements/randomizer`.
Handle order of operations warning in FasterHeavyBlockLift.

* Missed a few.

* Add float-specific versions of some M_PI and M_SQRT defines, and swap them in for the static casts in draw.cpp.

* Swap a static cast for M_PIf in check tracker code.
2025-05-16 21:54:36 -07:00
Malkierian
23a5198986 Merge pull request #5497 from HarbourMasters/develop-blair
blair -> dev
2025-05-16 21:46:00 -07:00
Pepper0ni
5b6844ccd8 reapply changes needed for C23 build on develop (#5467) 2025-05-17 00:41:14 -04:00
Malkierian
b900f8599a Bump LUS to latest, and handle tinyxml and gfx_pc changes. (#5470) 2025-05-16 21:14:55 -07:00
Malkierian
45d9fe54d2 Warnings Squashing Round 1 (#5469)
* Fix truncation warning in `entrance.h`.

* Fix type warning in fishsanity.cpp

* Fix implicit conversion warnings in BossRush, Mouse, and UIWidgets.hpp.

* Add Random_Float and use it in GameInteractor_RawAction.cpp.
Make non-specified seed init a separate function.

* clang after type change

* Fix truncation and conversion warnings in ExtraTraps.cpp.

* Resolve type conversion warnings in InputViewer.cpp.

* Resolve some type conversion warnings in hook_handlers.cpp.

* Remove `Random_Float`, and apply `RandomDouble` where it was being used instead.
Add proper range notation to `RandomDouble` to denote the lack of inclusivity for the max part of the range.

* Convert c-style casts to static_cast.
2025-05-13 19:30:04 -07:00
Philip Dubé
afc52f07d2 location_access: don't short circuit event access logic (#5216)
event logic is only run while event isn't set
2025-05-13 12:30:22 -07:00
Philip Dubé
eb95f9060f Faster empty bottle, faster bean skulltula (#5355)
* Faster empty bottle, faster bean skulltula

* shipinit
2025-05-13 12:30:04 -07:00
Philip Dubé
f9cde383b7 ignore out of bounds entrance overrides in json (#5253)
was causing segfault when using settings from door shuffle on develop
2025-05-12 20:33:21 -07:00
Eric Hoey
6a93625f5c VBify Crawl Speed Enhancement and Add Exlcude Glitch-Aiding Crawlspace Option (#5465)
* add menu option

* VBify + add conditions

* oops wrong func

* clean up includes + casting

* move z_player externed functions

* better name

* correct menu text

* one last name final final

* maintain glitch-aiding selection
2025-05-06 17:00:33 -07:00
Philip Dubé
a0e49f9960 a11y: read out changes in action button (#5421)
* a11y: read out changes in action button

* remove drop & throw & putaway

* down when on horse

* typos
2025-05-01 20:26:15 -07:00
Philip Dubé
626511ffb1 CheckBeatable: move clearing ctx->playthroughBeatable into function (#5408) 2025-05-01 20:11:55 -07:00
Philip Dubé
1a322c3eb5 OTRGlobals: use SohUtils::CopyStringToCharBuffer (#5328)
* OTRGlobals: use SohUtils::CopyStringToCharBuffer

* size_t

* fix issues when max buffer size is 0
2025-05-01 20:11:01 -07:00
Philip Dubé
3c33185d1a optimize GetEntrance (#5257) 2025-05-01 19:36:03 -07:00
Philip Dubé
d790ea4bce use LOGIC_BUY_STICKS / LOGIC_BUY_NUTS in logic (#5251) 2025-05-01 19:34:56 -07:00
Pepper0ni
4c9063caa7 Remove redundent entrance logic check when adding a region to the pool. (#5413)
* remove redundent entrance logic check when adding a region to the pool.

* how did this trigger clang...
2025-05-01 19:00:31 -07:00
Philip Dubé
4debe6829a Apply final specifier to classes inheriting from Ship::GuiWindow (#5443)
Was getting infamous c++ style warnings:
```
In file included from /home/erpre/s/ShipWright/soh/soh/SohGui/SohGui.cpp:8:
In file included from /home/erpre/s/ShipWright/soh/soh/SohGui/SohGui.hpp:12:
In file included from /home/erpre/s/ShipWright/soh/soh/SohGui/SohMenuBar.h:3:
In file included from /home/erpre/s/ShipWright/soh/../libultraship/include/libultraship/libultraship.h:5:
In file included from /home/erpre/s/ShipWright/soh/../libultraship/include/libultraship/bridge.h:4:
In file included from /home/erpre/s/ShipWright/soh/../libultraship/src/public/bridge/resourcebridge.h:9:
In file included from /home/erpre/s/ShipWright/soh/../libultraship/src/resource/type/Texture.h:3:
In file included from /home/erpre/s/ShipWright/soh/../libultraship/src/resource/Resource.h:3:
In file included from /home/erpre/s/ShipWright/soh/../libultraship/src/resource/File.h:3:
In file included from /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/string:42:
In file included from /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/char_traits.h:57:
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_construct.h:88:2: warning: destructor called on non-final 'SohGui::SohMenu' that has virtual functions but non-virtual destructor [-Wdelete-non-abstract-non-virtual-dtor]
   88 |         __location->~_Tp();
      |         ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_construct.h:149:12: note: in instantiation of function template specialization 'std::destroy_at<SohGui::SohMenu>' requested here
  149 |       std::destroy_at(__pointer);
      |            ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/alloc_traits.h:720:9: note: in instantiation of function template specialization 'std::_Destroy<SohGui::SohMenu>' requested here
  720 |         { std::_Destroy(__p); }
      |                ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr_base.h:616:28: note: in instantiation of function template specialization 'std::allocator_traits<std::allocator<void>>::destroy<SohGui::SohMenu>' requested here
  616 |         allocator_traits<_Alloc>::destroy(_M_impl._M_alloc(), _M_ptr());
      |                                   ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr_base.h:602:2: note: in instantiation of member function 'std::_Sp_counted_ptr_inplace<SohGui::SohMenu, std::allocator<void>, __gnu_cxx::_S_atomic>::_M_dispose' requested here
  602 |         _Sp_counted_ptr_inplace(_Alloc __a, _Args&&... __args)
      |         ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr_base.h:970:6: note: in instantiation of function template specialization 'std::_Sp_counted_ptr_inplace<SohGui::SohMenu, std::allocator<void>, __gnu_cxx::_S_atomic>::_Sp_counted_ptr_inplace<const char (&)[18], const char (&)[10]>' requested here
  970 |             _Sp_cp_type(__a._M_a, std::forward<_Args>(__args)...);
      |             ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr_base.h:1713:14: note: in instantiation of function template specialization 'std::__shared_count<>::__shared_count<SohGui::SohMenu, std::allocator<void>, const char (&)[18], const char (&)[10]>' requested here
 1713 |         : _M_ptr(), _M_refcount(_M_ptr, __tag, std::forward<_Args>(__args)...)
      |                     ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr.h:463:4: note: in instantiation of function template specialization 'std::__shared_ptr<SohGui::SohMenu>::__shared_ptr<std::allocator<void>, const char (&)[18], const char (&)[10]>' requested here
  463 |         : __shared_ptr<_Tp>(__tag, std::forward<_Args>(__args)...)
      |           ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr.h:1007:14: note: in instantiation of function template specialization 'std::shared_ptr<SohGui::SohMenu>::shared_ptr<std::allocator<void>, const char (&)[18], const char (&)[10]>' requested here
 1007 |       return shared_ptr<_Tp>(_Sp_alloc_shared_tag<_Alloc>{__a},
      |              ^
/home/erpre/s/ShipWright/soh/soh/SohGui/SohGui.cpp:121:21: note: in instantiation of function template specialization 'std::make_shared<SohGui::SohMenu, const char (&)[18], const char (&)[10]>' requested here
  121 |     mSohMenu = std::make_shared<SohMenu>(CVAR_WINDOW("Menu"), "Port Menu");
      |                     ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_construct.h:88:15: note: qualify call to silence this warning
   88 |         __location->~_Tp();
      |                      ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_construct.h:88:2: warning: destructor called on non-final 'SohConsoleWindow' that has virtual functions but non-virtual destructor [-Wdelete-non-abstract-non-virtual-dtor]
   88 |         __location->~_Tp();
      |         ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_construct.h:149:12: note: in instantiation of function template specialization 'std::destroy_at<SohConsoleWindow>' requested here
  149 |       std::destroy_at(__pointer);
      |            ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/alloc_traits.h:720:9: note: in instantiation of function template specialization 'std::_Destroy<SohConsoleWindow>' requested here
  720 |         { std::_Destroy(__p); }
      |                ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr_base.h:616:28: note: in instantiation of function template specialization 'std::allocator_traits<std::allocator<void>>::destroy<SohConsoleWindow>' requested here
  616 |         allocator_traits<_Alloc>::destroy(_M_impl._M_alloc(), _M_ptr());
      |                                   ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr_base.h:602:2: note: in instantiation of member function 'std::_Sp_counted_ptr_inplace<SohConsoleWindow, std::allocator<void>, __gnu_cxx::_S_atomic>::_M_dispose' requested here
  602 |         _Sp_counted_ptr_inplace(_Alloc __a, _Args&&... __args)
      |         ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr_base.h:970:6: note: in instantiation of function template specialization 'std::_Sp_counted_ptr_inplace<SohConsoleWindow, std::allocator<void>, __gnu_cxx::_S_atomic>::_Sp_counted_ptr_inplace<const char (&)[24], const char (&)[13], ImVec2>' requested here
  970 |             _Sp_cp_type(__a._M_a, std::forward<_Args>(__args)...);
      |             ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr_base.h:1713:14: note: in instantiation of function template specialization 'std::__shared_count<>::__shared_count<SohConsoleWindow, std::allocator<void>, const char (&)[24], const char (&)[13], ImVec2>' requested here
 1713 |         : _M_ptr(), _M_refcount(_M_ptr, __tag, std::forward<_Args>(__args)...)
      |                     ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr.h:463:4: note: in instantiation of function template specialization 'std::__shared_ptr<SohConsoleWindow>::__shared_ptr<std::allocator<void>, const char (&)[24], const char (&)[13], ImVec2>' requested here
  463 |         : __shared_ptr<_Tp>(__tag, std::forward<_Args>(__args)...)
      |           ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr.h:1007:14: note: in instantiation of function template specialization 'std::shared_ptr<SohConsoleWindow>::shared_ptr<std::allocator<void>, const char (&)[24], const char (&)[13], ImVec2>' requested here
 1007 |       return shared_ptr<_Tp>(_Sp_alloc_shared_tag<_Alloc>{__a},
      |              ^
/home/erpre/s/ShipWright/soh/soh/SohGui/SohGui.cpp:124:27: note: in instantiation of function template specialization 'std::make_shared<SohConsoleWindow, const char (&)[24], const char (&)[13], ImVec2>' requested here
  124 |     mConsoleWindow = std::make_shared<SohConsoleWindow>(CVAR_WINDOW("SohConsole"), "Console##SoH", ImVec2(820, 630));
      |                           ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_construct.h:88:15: note: qualify call to silence this warning
   88 |         __location->~_Tp();
      |                      ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_construct.h:88:2: warning: destructor called on non-final 'SohGfxDebuggerWindow' that has virtual functions but non-virtual destructor [-Wdelete-non-abstract-non-virtual-dtor]
   88 |         __location->~_Tp();
      |         ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_construct.h:149:12: note: in instantiation of function template specialization 'std::destroy_at<SohGfxDebuggerWindow>' requested here
  149 |       std::destroy_at(__pointer);
      |            ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/alloc_traits.h:720:9: note: in instantiation of function template specialization 'std::_Destroy<SohGfxDebuggerWindow>' requested here
  720 |         { std::_Destroy(__p); }
      |                ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr_base.h:616:28: note: in instantiation of function template specialization 'std::allocator_traits<std::allocator<void>>::destroy<SohGfxDebuggerWindow>' requested here
  616 |         allocator_traits<_Alloc>::destroy(_M_impl._M_alloc(), _M_ptr());
      |                                   ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr_base.h:602:2: note: in instantiation of member function 'std::_Sp_counted_ptr_inplace<SohGfxDebuggerWindow, std::allocator<void>, __gnu_cxx::_S_atomic>::_M_dispose' requested here
  602 |         _Sp_counted_ptr_inplace(_Alloc __a, _Args&&... __args)
      |         ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr_base.h:970:6: note: in instantiation of function template specialization 'std::_Sp_counted_ptr_inplace<SohGfxDebuggerWindow, std::allocator<void>, __gnu_cxx::_S_atomic>::_Sp_counted_ptr_inplace<const char (&)[28], const char (&)[17], ImVec2>' requested here
  970 |             _Sp_cp_type(__a._M_a, std::forward<_Args>(__args)...);
      |             ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr_base.h:1713:14: note: in instantiation of function template specialization 'std::__shared_count<>::__shared_count<SohGfxDebuggerWindow, std::allocator<void>, const char (&)[28], const char (&)[17], ImVec2>' requested here
 1713 |         : _M_ptr(), _M_refcount(_M_ptr, __tag, std::forward<_Args>(__args)...)
      |                     ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr.h:463:4: note: in instantiation of function template specialization 'std::__shared_ptr<SohGfxDebuggerWindow>::__shared_ptr<std::allocator<void>, const char (&)[28], const char (&)[17], ImVec2>' requested here
  463 |         : __shared_ptr<_Tp>(__tag, std::forward<_Args>(__args)...)
      |           ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr.h:1007:14: note: in instantiation of function template specialization 'std::shared_ptr<SohGfxDebuggerWindow>::shared_ptr<std::allocator<void>, const char (&)[28], const char (&)[17], ImVec2>' requested here
 1007 |       return shared_ptr<_Tp>(_Sp_alloc_shared_tag<_Alloc>{__a},
      |              ^
/home/erpre/s/ShipWright/soh/soh/SohGui/SohGui.cpp:128:14: note: in instantiation of function template specialization 'std::make_shared<SohGfxDebuggerWindow, const char (&)[28], const char (&)[17], ImVec2>' requested here
  128 |         std::make_shared<SohGfxDebuggerWindow>(CVAR_WINDOW("SohGfxDebugger"), "GfxDebugger##SoH", ImVec2(820, 630));
      |              ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_construct.h:88:15: note: qualify call to silence this warning
   88 |         __location->~_Tp();
      |                      ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_construct.h:88:2: warning: destructor called on non-final 'SohStatsWindow' that has virtual functions but non-virtual destructor [-Wdelete-non-abstract-non-virtual-dtor]
   88 |         __location->~_Tp();
      |         ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_construct.h:149:12: note: in instantiation of function template specialization 'std::destroy_at<SohStatsWindow>' requested here
  149 |       std::destroy_at(__pointer);
      |            ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/alloc_traits.h:720:9: note: in instantiation of function template specialization 'std::_Destroy<SohStatsWindow>' requested here
  720 |         { std::_Destroy(__p); }
      |                ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr_base.h:616:28: note: in instantiation of function template specialization 'std::allocator_traits<std::allocator<void>>::destroy<SohStatsWindow>' requested here
  616 |         allocator_traits<_Alloc>::destroy(_M_impl._M_alloc(), _M_ptr());
      |                                   ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr_base.h:602:2: note: in instantiation of member function 'std::_Sp_counted_ptr_inplace<SohStatsWindow, std::allocator<void>, __gnu_cxx::_S_atomic>::_M_dispose' requested here
  602 |         _Sp_counted_ptr_inplace(_Alloc __a, _Args&&... __args)
      |         ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr_base.h:970:6: note: in instantiation of function template specialization 'std::_Sp_counted_ptr_inplace<SohStatsWindow, std::allocator<void>, __gnu_cxx::_S_atomic>::_Sp_counted_ptr_inplace<const char (&)[22], const char (&)[11], ImVec2>' requested here
  970 |             _Sp_cp_type(__a._M_a, std::forward<_Args>(__args)...);
      |             ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr_base.h:1713:14: note: in instantiation of function template specialization 'std::__shared_count<>::__shared_count<SohStatsWindow, std::allocator<void>, const char (&)[22], const char (&)[11], ImVec2>' requested here
 1713 |         : _M_ptr(), _M_refcount(_M_ptr, __tag, std::forward<_Args>(__args)...)
      |                     ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr.h:463:4: note: in instantiation of function template specialization 'std::__shared_ptr<SohStatsWindow>::__shared_ptr<std::allocator<void>, const char (&)[22], const char (&)[11], ImVec2>' requested here
  463 |         : __shared_ptr<_Tp>(__tag, std::forward<_Args>(__args)...)
      |           ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr.h:1007:14: note: in instantiation of function template specialization 'std::shared_ptr<SohStatsWindow>::shared_ptr<std::allocator<void>, const char (&)[22], const char (&)[11], ImVec2>' requested here
 1007 |       return shared_ptr<_Tp>(_Sp_alloc_shared_tag<_Alloc>{__a},
      |              ^
/home/erpre/s/ShipWright/soh/soh/SohGui/SohGui.cpp:131:25: note: in instantiation of function template specialization 'std::make_shared<SohStatsWindow, const char (&)[22], const char (&)[11], ImVec2>' requested here
  131 |     mStatsWindow = std::make_shared<SohStatsWindow>(CVAR_WINDOW("SohStats"), "Stats##Soh", ImVec2(400, 100));
      |                         ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_construct.h:88:15: note: qualify call to silence this warning
   88 |         __location->~_Tp();
      |                      ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_construct.h:88:2: warning: destructor called on non-final 'AudioEditor' that has virtual functions but non-virtual destructor [-Wdelete-non-abstract-non-virtual-dtor]
   88 |         __location->~_Tp();
      |         ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_construct.h:149:12: note: in instantiation of function template specialization 'std::destroy_at<AudioEditor>' requested here
  149 |       std::destroy_at(__pointer);
      |            ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/alloc_traits.h:720:9: note: in instantiation of function template specialization 'std::_Destroy<AudioEditor>' requested here
  720 |         { std::_Destroy(__p); }
      |                ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr_base.h:616:28: note: in instantiation of function template specialization 'std::allocator_traits<std::allocator<void>>::destroy<AudioEditor>' requested here
  616 |         allocator_traits<_Alloc>::destroy(_M_impl._M_alloc(), _M_ptr());
      |                                   ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr_base.h:602:2: note: in instantiation of member function 'std::_Sp_counted_ptr_inplace<AudioEditor, std::allocator<void>, __gnu_cxx::_S_atomic>::_M_dispose' requested here
  602 |         _Sp_counted_ptr_inplace(_Alloc __a, _Args&&... __args)
      |         ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr_base.h:970:6: note: in instantiation of function template specialization 'std::_Sp_counted_ptr_inplace<AudioEditor, std::allocator<void>, __gnu_cxx::_S_atomic>::_Sp_counted_ptr_inplace<const char (&)[25], const char (&)[13], ImVec2>' requested here
  970 |             _Sp_cp_type(__a._M_a, std::forward<_Args>(__args)...);
      |             ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr_base.h:1713:14: note: in instantiation of function template specialization 'std::__shared_count<>::__shared_count<AudioEditor, std::allocator<void>, const char (&)[25], const char (&)[13], ImVec2>' requested here
 1713 |         : _M_ptr(), _M_refcount(_M_ptr, __tag, std::forward<_Args>(__args)...)
      |                     ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr.h:463:4: note: in instantiation of function template specialization 'std::__shared_ptr<AudioEditor>::__shared_ptr<std::allocator<void>, const char (&)[25], const char (&)[13], ImVec2>' requested here
  463 |         : __shared_ptr<_Tp>(__tag, std::forward<_Args>(__args)...)
      |           ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr.h:1007:14: note: in instantiation of function template specialization 'std::shared_ptr<AudioEditor>::shared_ptr<std::allocator<void>, const char (&)[25], const char (&)[13], ImVec2>' requested here
 1007 |       return shared_ptr<_Tp>(_Sp_alloc_shared_tag<_Alloc>{__a},
      |              ^
/home/erpre/s/ShipWright/soh/soh/SohGui/SohGui.cpp:139:31: note: in instantiation of function template specialization 'std::make_shared<AudioEditor, const char (&)[25], const char (&)[13], ImVec2>' requested here
  139 |     mAudioEditorWindow = std::make_shared<AudioEditor>(CVAR_WINDOW("AudioEditor"), "Audio Editor", ImVec2(820, 630));
      |                               ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_construct.h:88:15: note: qualify call to silence this warning
   88 |         __location->~_Tp();
      |                      ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_construct.h:88:2: warning: destructor called on non-final 'InputViewer' that has virtual functions but non-virtual destructor [-Wdelete-non-abstract-non-virtual-dtor]
   88 |         __location->~_Tp();
      |         ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_construct.h:149:12: note: in instantiation of function template specialization 'std::destroy_at<InputViewer>' requested here
  149 |       std::destroy_at(__pointer);
      |            ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/alloc_traits.h:720:9: note: in instantiation of function template specialization 'std::_Destroy<InputViewer>' requested here
  720 |         { std::_Destroy(__p); }
      |                ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr_base.h:616:28: note: in instantiation of function template specialization 'std::allocator_traits<std::allocator<void>>::destroy<InputViewer>' requested here
  616 |         allocator_traits<_Alloc>::destroy(_M_impl._M_alloc(), _M_ptr());
      |                                   ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr_base.h:602:2: note: in instantiation of member function 'std::_Sp_counted_ptr_inplace<InputViewer, std::allocator<void>, __gnu_cxx::_S_atomic>::_M_dispose' requested here
  602 |         _Sp_counted_ptr_inplace(_Alloc __a, _Args&&... __args)
      |         ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr_base.h:970:6: note: in instantiation of function template specialization 'std::_Sp_counted_ptr_inplace<InputViewer, std::allocator<void>, __gnu_cxx::_S_atomic>::_Sp_counted_ptr_inplace<const char (&)[25], const char (&)[13]>' requested here
  970 |             _Sp_cp_type(__a._M_a, std::forward<_Args>(__args)...);
      |             ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr_base.h:1713:14: note: in instantiation of function template specialization 'std::__shared_count<>::__shared_count<InputViewer, std::allocator<void>, const char (&)[25], const char (&)[13]>' requested here
 1713 |         : _M_ptr(), _M_refcount(_M_ptr, __tag, std::forward<_Args>(__args)...)
      |                     ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr.h:463:4: note: in instantiation of function template specialization 'std::__shared_ptr<InputViewer>::__shared_ptr<std::allocator<void>, const char (&)[25], const char (&)[13]>' requested here
  463 |         : __shared_ptr<_Tp>(__tag, std::forward<_Args>(__args)...)
      |           ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr.h:1007:14: note: in instantiation of function template specialization 'std::shared_ptr<InputViewer>::shared_ptr<std::allocator<void>, const char (&)[25], const char (&)[13]>' requested here
 1007 |       return shared_ptr<_Tp>(_Sp_alloc_shared_tag<_Alloc>{__a},
      |              ^
/home/erpre/s/ShipWright/soh/soh/SohGui/SohGui.cpp:141:25: note: in instantiation of function template specialization 'std::make_shared<InputViewer, const char (&)[25], const char (&)[13]>' requested here
  141 |     mInputViewer = std::make_shared<InputViewer>(CVAR_WINDOW("InputViewer"), "Input Viewer");
      |                         ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_construct.h:88:15: note: qualify call to silence this warning
   88 |         __location->~_Tp();
      |                      ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_construct.h:88:2: warning: destructor called on non-final 'InputViewerSettingsWindow' that has virtual functions but non-virtual destructor [-Wdelete-non-abstract-non-virtual-dtor]
   88 |         __location->~_Tp();
      |         ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_construct.h:149:12: note: in instantiation of function template specialization 'std::destroy_at<InputViewerSettingsWindow>' requested here
  149 |       std::destroy_at(__pointer);
      |            ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/alloc_traits.h:720:9: note: in instantiation of function template specialization 'std::_Destroy<InputViewerSettingsWindow>' requested here
  720 |         { std::_Destroy(__p); }
      |                ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr_base.h:616:28: note: in instantiation of function template specialization 'std::allocator_traits<std::allocator<void>>::destroy<InputViewerSettingsWindow>' requested here
  616 |         allocator_traits<_Alloc>::destroy(_M_impl._M_alloc(), _M_ptr());
      |                                   ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr_base.h:602:2: note: in instantiation of member function 'std::_Sp_counted_ptr_inplace<InputViewerSettingsWindow, std::allocator<void>, __gnu_cxx::_S_atomic>::_M_dispose' requested here
  602 |         _Sp_counted_ptr_inplace(_Alloc __a, _Args&&... __args)
      |         ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr_base.h:970:6: note: in instantiation of function template specialization 'std::_Sp_counted_ptr_inplace<InputViewerSettingsWindow, std::allocator<void>, __gnu_cxx::_S_atomic>::_Sp_counted_ptr_inplace<const char (&)[33], const char (&)[22], ImVec2>' requested here
  970 |             _Sp_cp_type(__a._M_a, std::forward<_Args>(__args)...);
      |             ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr_base.h:1713:14: note: in instantiation of function template specialization 'std::__shared_count<>::__shared_count<InputViewerSettingsWindow, std::allocator<void>, const char (&)[33], const char (&)[22], ImVec2>' requested here
 1713 |         : _M_ptr(), _M_refcount(_M_ptr, __tag, std::forward<_Args>(__args)...)
      |                     ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr.h:463:4: note: in instantiation of function template specialization 'std::__shared_ptr<InputViewerSettingsWindow>::__shared_ptr<std::allocator<void>, const char (&)[33], const char (&)[22], ImVec2>' requested here
  463 |         : __shared_ptr<_Tp>(__tag, std::forward<_Args>(__args)...)
      |           ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr.h:1007:14: note: in instantiation of function template specialization 'std::shared_ptr<InputViewerSettingsWindow>::shared_ptr<std::allocator<void>, const char (&)[33], const char (&)[22], ImVec2>' requested here
 1007 |       return shared_ptr<_Tp>(_Sp_alloc_shared_tag<_Alloc>{__a},
      |              ^
/home/erpre/s/ShipWright/soh/soh/SohGui/SohGui.cpp:143:33: note: in instantiation of function template specialization 'std::make_shared<InputViewerSettingsWindow, const char (&)[33], const char (&)[22], ImVec2>' requested here
  143 |     mInputViewerSettings = std::make_shared<InputViewerSettingsWindow>(CVAR_WINDOW("InputViewerSettings"),
      |                                 ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_construct.h:88:15: note: qualify call to silence this warning
   88 |         __location->~_Tp();
      |                      ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_construct.h:88:2: warning: destructor called on non-final 'CosmeticsEditorWindow' that has virtual functions but non-virtual destructor [-Wdelete-non-abstract-non-virtual-dtor]
   88 |         __location->~_Tp();
      |         ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_construct.h:149:12: note: in instantiation of function template specialization 'std::destroy_at<CosmeticsEditorWindow>' requested here
  149 |       std::destroy_at(__pointer);
      |            ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/alloc_traits.h:720:9: note: in instantiation of function template specialization 'std::_Destroy<CosmeticsEditorWindow>' requested here
  720 |         { std::_Destroy(__p); }
      |                ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr_base.h:616:28: note: in instantiation of function template specialization 'std::allocator_traits<std::allocator<void>>::destroy<CosmeticsEditorWindow>' requested here
  616 |         allocator_traits<_Alloc>::destroy(_M_impl._M_alloc(), _M_ptr());
      |                                   ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr_base.h:602:2: note: in instantiation of member function 'std::_Sp_counted_ptr_inplace<CosmeticsEditorWindow, std::allocator<void>, __gnu_cxx::_S_atomic>::_M_dispose' requested here
  602 |         _Sp_counted_ptr_inplace(_Alloc __a, _Args&&... __args)
      |         ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr_base.h:970:6: note: in instantiation of function template specialization 'std::_Sp_counted_ptr_inplace<CosmeticsEditorWindow, std::allocator<void>, __gnu_cxx::_S_atomic>::_Sp_counted_ptr_inplace<const char (&)[29], const char (&)[17], ImVec2>' requested here
  970 |             _Sp_cp_type(__a._M_a, std::forward<_Args>(__args)...);
      |             ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr_base.h:1713:14: note: in instantiation of function template specialization 'std::__shared_count<>::__shared_count<CosmeticsEditorWindow, std::allocator<void>, const char (&)[29], const char (&)[17], ImVec2>' requested here
 1713 |         : _M_ptr(), _M_refcount(_M_ptr, __tag, std::forward<_Args>(__args)...)
      |                     ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr.h:463:4: note: in instantiation of function template specialization 'std::__shared_ptr<CosmeticsEditorWindow>::__shared_ptr<std::allocator<void>, const char (&)[29], const char (&)[17], ImVec2>' requested here
  463 |         : __shared_ptr<_Tp>(__tag, std::forward<_Args>(__args)...)
      |           ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr.h:1007:14: note: in instantiation of function template specialization 'std::shared_ptr<CosmeticsEditorWindow>::shared_ptr<std::allocator<void>, const char (&)[29], const char (&)[17], ImVec2>' requested here
 1007 |       return shared_ptr<_Tp>(_Sp_alloc_shared_tag<_Alloc>{__a},
      |              ^
/home/erpre/s/ShipWright/soh/soh/SohGui/SohGui.cpp:147:14: note: in instantiation of function template specialization 'std::make_shared<CosmeticsEditorWindow, const char (&)[29], const char (&)[17], ImVec2>' requested here
  147 |         std::make_shared<CosmeticsEditorWindow>(CVAR_WINDOW("CosmeticsEditor"), "Cosmetics Editor", ImVec2(550, 520));
      |              ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_construct.h:88:15: note: qualify call to silence this warning
   88 |         __location->~_Tp();
      |                      ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_construct.h:88:2: warning: destructor called on non-final 'ActorViewerWindow' that has virtual functions but non-virtual destructor [-Wdelete-non-abstract-non-virtual-dtor]
   88 |         __location->~_Tp();
      |         ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_construct.h:149:12: note: in instantiation of function template specialization 'std::destroy_at<ActorViewerWindow>' requested here
  149 |       std::destroy_at(__pointer);
      |            ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/alloc_traits.h:720:9: note: in instantiation of function template specialization 'std::_Destroy<ActorViewerWindow>' requested here
  720 |         { std::_Destroy(__p); }
      |                ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr_base.h:616:28: note: in instantiation of function template specialization 'std::allocator_traits<std::allocator<void>>::destroy<ActorViewerWindow>' requested here
  616 |         allocator_traits<_Alloc>::destroy(_M_impl._M_alloc(), _M_ptr());
      |                                   ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr_base.h:602:2: note: in instantiation of member function 'std::_Sp_counted_ptr_inplace<ActorViewerWindow, std::allocator<void>, __gnu_cxx::_S_atomic>::_M_dispose' requested here
  602 |         _Sp_counted_ptr_inplace(_Alloc __a, _Args&&... __args)
      |         ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr_base.h:970:6: note: in instantiation of function template specialization 'std::_Sp_counted_ptr_inplace<ActorViewerWindow, std::allocator<void>, __gnu_cxx::_S_atomic>::_Sp_counted_ptr_inplace<const char (&)[25], const char (&)[13], ImVec2>' requested here
  970 |             _Sp_cp_type(__a._M_a, std::forward<_Args>(__args)...);
      |             ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr_base.h:1713:14: note: in instantiation of function template specialization 'std::__shared_count<>::__shared_count<ActorViewerWindow, std::allocator<void>, const char (&)[25], const char (&)[13], ImVec2>' requested here
 1713 |         : _M_ptr(), _M_refcount(_M_ptr, __tag, std::forward<_Args>(__args)...)
      |                     ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr.h:463:4: note: in instantiation of function template specialization 'std::__shared_ptr<ActorViewerWindow>::__shared_ptr<std::allocator<void>, const char (&)[25], const char (&)[13], ImVec2>' requested here
  463 |         : __shared_ptr<_Tp>(__tag, std::forward<_Args>(__args)...)
      |           ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr.h:1007:14: note: in instantiation of function template specialization 'std::shared_ptr<ActorViewerWindow>::shared_ptr<std::allocator<void>, const char (&)[25], const char (&)[13], ImVec2>' requested here
 1007 |       return shared_ptr<_Tp>(_Sp_alloc_shared_tag<_Alloc>{__a},
      |              ^
/home/erpre/s/ShipWright/soh/soh/SohGui/SohGui.cpp:150:14: note: in instantiation of function template specialization 'std::make_shared<ActorViewerWindow, const char (&)[25], const char (&)[13], ImVec2>' requested here
  150 |         std::make_shared<ActorViewerWindow>(CVAR_WINDOW("ActorViewer"), "Actor Viewer", ImVec2(520, 600));
      |              ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_construct.h:88:15: note: qualify call to silence this warning
   88 |         __location->~_Tp();
      |                      ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_construct.h:88:2: warning: destructor called on non-final 'ColViewerWindow' that has virtual functions but non-virtual destructor [-Wdelete-non-abstract-non-virtual-dtor]
   88 |         __location->~_Tp();
      |         ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_construct.h:149:12: note: in instantiation of function template specialization 'std::destroy_at<ColViewerWindow>' requested here
  149 |       std::destroy_at(__pointer);
      |            ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/alloc_traits.h:720:9: note: in instantiation of function template specialization 'std::_Destroy<ColViewerWindow>' requested here
  720 |         { std::_Destroy(__p); }
      |                ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr_base.h:616:28: note: in instantiation of function template specialization 'std::allocator_traits<std::allocator<void>>::destroy<ColViewerWindow>' requested here
  616 |         allocator_traits<_Alloc>::destroy(_M_impl._M_alloc(), _M_ptr());
      |                                   ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr_base.h:602:2: note: in instantiation of member function 'std::_Sp_counted_ptr_inplace<ColViewerWindow, std::allocator<void>, __gnu_cxx::_S_atomic>::_M_dispose' requested here
  602 |         _Sp_counted_ptr_inplace(_Alloc __a, _Args&&... __args)
      |         ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr_base.h:970:6: note: in instantiation of function template specialization 'std::_Sp_counted_ptr_inplace<ColViewerWindow, std::allocator<void>, __gnu_cxx::_S_atomic>::_Sp_counted_ptr_inplace<const char (&)[29], const char (&)[17], ImVec2>' requested here
  970 |             _Sp_cp_type(__a._M_a, std::forward<_Args>(__args)...);
      |             ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr_base.h:1713:14: note: in instantiation of function template specialization 'std::__shared_count<>::__shared_count<ColViewerWindow, std::allocator<void>, const char (&)[29], const char (&)[17], ImVec2>' requested here
 1713 |         : _M_ptr(), _M_refcount(_M_ptr, __tag, std::forward<_Args>(__args)...)
      |                     ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr.h:463:4: note: in instantiation of function template specialization 'std::__shared_ptr<ColViewerWindow>::__shared_ptr<std::allocator<void>, const char (&)[29], const char (&)[17], ImVec2>' requested here
  463 |         : __shared_ptr<_Tp>(__tag, std::forward<_Args>(__args)...)
      |           ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr.h:1007:14: note: in instantiation of function template specialization 'std::shared_ptr<ColViewerWindow>::shared_ptr<std::allocator<void>, const char (&)[29], const char (&)[17], ImVec2>' requested here
 1007 |       return shared_ptr<_Tp>(_Sp_alloc_shared_tag<_Alloc>{__a},
      |              ^
/home/erpre/s/ShipWright/soh/soh/SohGui/SohGui.cpp:153:14: note: in instantiation of function template specialization 'std::make_shared<ColViewerWindow, const char (&)[29], const char (&)[17], ImVec2>' requested here
  153 |         std::make_shared<ColViewerWindow>(CVAR_WINDOW("CollisionViewer"), "Collision Viewer", ImVec2(520, 600));
      |              ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_construct.h:88:15: note: qualify call to silence this warning
   88 |         __location->~_Tp();
      |                      ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_construct.h:88:2: warning: destructor called on non-final 'SaveEditorWindow' that has virtual functions but non-virtual destructor [-Wdelete-non-abstract-non-virtual-dtor]
   88 |         __location->~_Tp();
      |         ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_construct.h:149:12: note: in instantiation of function template specialization 'std::destroy_at<SaveEditorWindow>' requested here
  149 |       std::destroy_at(__pointer);
      |            ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/alloc_traits.h:720:9: note: in instantiation of function template specialization 'std::_Destroy<SaveEditorWindow>' requested here
  720 |         { std::_Destroy(__p); }
      |                ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/shared_ptr_base.h:616:28: note: in instantiation of function template specialization 'std::allocator_traits<std::allocator<void>>::destroy<SaveEditorWindow>' requested here
  616 |         allocator_traits<_Alloc>::destroy(_M_impl._M_alloc(), _M_ptr());
      |                                   ^

...
```
2025-05-01 19:00:10 -07:00
Eric Hoey
7cbb0d4d61 Add Missing MQ Jabu Small Crates (#5452)
* also change grass to match

* add crates back
2025-04-29 17:40:01 -04:00
xxAtrain223
e13714e88d Added missing comma. (#5450) 2025-04-29 14:23:40 -07:00
Pepper0ni
fbbfc07ff1 port over autoFunc punctuation changes and translations (#5426)
---

Co-authored-by: PurpleHato <47987542+PurpleHato@users.noreply.github.com>
Co-authored-by: amafresh <arminamayeh@gmail.com>
2025-04-21 14:21:42 -07:00
Malkierian
52a3058926 Merge pull request #5409 from Malkierian/blair-charlie-dev-merge
Blair Charlie to Develop
2025-04-15 16:15:51 -07:00
Malkierian
14907a24b0 Merge branch 'develop-blair' of github.com:HarbourMasters/Shipwright into develop 2025-04-15 15:44:16 -07:00
Archez
824c203b97 Merge pull request #5374 from Malkierian/blair-bravo-dev-merge
Blair Bravo -> develop 4-9
2025-04-11 17:20:08 -04:00
Malkierian
7e78694aee Merge branch 'develop-blair' of github.com:HarbourMasters/Shipwright into develop 2025-04-09 16:12:46 -07:00
Archez
f37c3aa228 clang-format .hpp files (#5307)
* Add hpp files to clang-format script

* clang-format hpp files
2025-04-03 23:33:35 -04:00
Archez
2deea6e105 Better verbose output for clang-format (#5306) 2025-04-03 15:23:47 -04:00
Philip Dubé
ef8fa17e7c simplify clang-format script (#5274)
checked that -print0 & -0 also exist in apple's manpages
2025-04-03 00:36:10 -04:00
Philip Dubé
1e51f1e162 Cleanup whitespace (#5281) 2025-04-03 00:16:52 -04:00
1533 changed files with 97429 additions and 62760 deletions

View File

@@ -1,13 +1,65 @@
FROM mcr.microsoft.com/devcontainers/cpp:ubuntu-22.04
RUN apt-get update && apt-get install -y libsdl2-dev libsdl2-net-dev libpng-dev libglew-dev ninja-build
RUN apt-get update && apt-get upgrade -y \
&& rm -rf /var/lib/apt/lists/*
# download and install cmake from source
# this ensures we use the same version as in the github runner image
RUN apt-get purge -y cmake || true
ARG CMAKE_VERSION=3.31.11
# download
WORKDIR /tmp
RUN curl -fsSL \
https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}.tar.gz \
-o cmake.tar.gz \
&& tar -xzf cmake.tar.gz \
&& rm cmake.tar.gz
# build and install
WORKDIR /tmp/cmake-${CMAKE_VERSION}
RUN ./bootstrap \
--prefix=/usr/local \
--parallel=$(nproc) \
&& make -j$(nproc) \
&& make install
# clean up
WORKDIR /
RUN rm -rf /tmp/cmake-${CMAKE_VERSION}
# download and install tinyxml2 from source
# this ensures we have the cmake files needed for find_package
RUN apt-get purge -y libtinyxml2-dev || true
ARG TINYXML2_VERSION=11.0.0
# download
WORKDIR /tmp
RUN curl -fsSL \
https://github.com/leethomason/tinyxml2/archive/refs/tags/${TINYXML2_VERSION}.tar.gz \
-o tinyxml2.tar.gz \
&& tar -xzf tinyxml2.tar.gz \
&& rm tinyxml2.tar.gz
# build and install
WORKDIR /tmp/tinyxml2-${TINYXML2_VERSION}
RUN cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local \
&& cmake --build build --parallel $(nproc) \
&& cmake --install build
# clean up
WORKDIR /
RUN rm -rf /tmp/tinyxml2-${TINYXML2_VERSION}
# install apt dependencies
RUN apt-get update && apt-get install -y \
libusb-dev libusb-1.0-0-dev libsdl2-dev libsdl2-net-dev libpng-dev \
libglew-dev nlohmann-json3-dev libspdlog-dev ninja-build libogg-dev \
libopus-dev opus-tools libopusfile-dev libvorbis-dev libespeak-ng-dev \
lsb-release git clang clang-format-14 zipcmp zipmerge ziptool \
libopengl-dev libbz2-dev libzip-dev \
&& rm -rf /var/lib/apt/lists/*
# Install latest SDL2
RUN wget https://www.libsdl.org/release/SDL2-2.26.1.tar.gz && \
tar -xzf SDL2-2.26.1.tar.gz && \
cd SDL2-2.26.1 && \
./configure && \
make && \
make -j$(nproc) && \
make install && \
cd .. && \
rm -rf SDL2-2.26.1 && \
@@ -19,7 +71,7 @@ RUN wget https://www.libsdl.org/projects/SDL_net/release/SDL2_net-2.2.0.tar.gz &
tar -xzf SDL2_net-2.2.0.tar.gz && \
cd SDL2_net-2.2.0 && \
./configure && \
make && \
make -j$(nproc) && \
make install && \
cd .. && \
rm -rf SDL2_net-2.2.0 && \

View File

@@ -1 +1 @@
libusb-dev libusb-1.0-0-dev libsdl2-dev libsdl2-net-dev libpng-dev libglew-dev nlohmann-json3-dev libtinyxml2-dev libspdlog-dev ninja-build
libusb-dev libusb-1.0-0-dev libsdl2-dev libsdl2-net-dev libpng-dev libglew-dev nlohmann-json3-dev libtinyxml2-dev libspdlog-dev ninja-build libogg-dev libopus-dev opus-tools libopusfile-dev libvorbis-dev libespeak-ng-dev

View File

@@ -8,7 +8,7 @@ jobs:
clang-format:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
fetch-depth: 2
- name: Install clang-format

View File

@@ -11,7 +11,7 @@ jobs:
runs-on: ubuntu-22.04
steps:
- name: Git Checkout
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
submodules: true
- name: Configure ccache
@@ -27,7 +27,7 @@ jobs:
sudo apt-get update
sudo apt-get install -y $(cat .github/workflows/apt-deps.txt) libzip-dev zipcmp zipmerge ziptool
- name: Restore Cached deps folder
uses: actions/cache/restore@v4
uses: actions/cache/restore@v5
with:
key: ${{ runner.os }}-deps-${{ github.ref }}-${{ github.sha }}
restore-keys: |
@@ -62,16 +62,16 @@ jobs:
cmake ..
make
sudo make install
- name: Generate soh.otr
- name: Generate soh.o2r
run: |
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
cmake --no-warn-unused-cli -H. -Bbuild-cmake -GNinja -DCMAKE_BUILD_TYPE:STRING=Release
cmake --build build-cmake --config Release --target GenerateSohOtr -j3
- name: Upload soh.otr
uses: actions/upload-artifact@v4
- name: Upload soh.o2r
uses: actions/upload-artifact@v7
with:
name: soh.otr
path: soh.otr
name: soh.o2r
path: soh.o2r
retention-days: 3
build-macos:
@@ -79,7 +79,7 @@ jobs:
runs-on: macos-14
steps:
- name: Git Checkout
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
submodules: true
- name: Configure ccache
@@ -99,7 +99,7 @@ jobs:
sudo chmod +x /opt/homebrew/bin/gtar
- name: Restore Cached MacPorts
id: restore-cache-macports
uses: actions/cache/restore@v4
uses: actions/cache/restore@v5
with:
key: ${{ runner.os }}-14-macports-${{ hashFiles('.github/workflows/macports-deps.txt') }}-${{ github.sha }}
restore-keys: |
@@ -113,8 +113,8 @@ jobs:
echo "MacPorts already installed"
else
echo "Installing MacPorts"
wget https://github.com/macports/macports-base/releases/download/v2.9.3/MacPorts-2.9.3-14-Sonoma.pkg
sudo installer -pkg ./MacPorts-2.9.3-14-Sonoma.pkg -target /
wget https://github.com/macports/macports-base/releases/download/v2.11.5/MacPorts-2.11.5-14-Sonoma.pkg
sudo installer -pkg ./MacPorts-2.11.5-14-Sonoma.pkg -target /
fi
echo "/opt/local/bin:/opt/local/sbin" >> "$GITHUB_PATH"
- name: Install dependencies
@@ -122,10 +122,10 @@ jobs:
brew uninstall --ignore-dependencies libpng
sudo port install $(cat .github/workflows/macports-deps.txt)
brew install ninja
- name: Download soh.otr
uses: actions/download-artifact@v4
- name: Download soh.o2r
uses: actions/download-artifact@v7
with:
name: soh.otr
name: soh.o2r
path: build-cmake/soh
- name: Build SoH
run: |
@@ -137,7 +137,7 @@ jobs:
mv _packages/*.dmg SoH.dmg
mv README.md readme.txt
- name: Upload build
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: soh-mac
path: |
@@ -145,7 +145,7 @@ jobs:
readme.txt
- name: Save Cache MacPorts
if: ${{ github.ref_name == github.event.repository.default_branch }}
uses: actions/cache/save@v4
uses: actions/cache/save@v5
with:
key: ${{ steps.restore-cache-macports.outputs.cache-primary-key }}
path: /opt/local/
@@ -155,7 +155,7 @@ jobs:
runs-on: ubuntu-22.04
steps:
- name: Git Checkout
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
submodules: true
- name: Install dependencies
@@ -172,7 +172,7 @@ jobs:
${{ runner.os }}-ccache
- name: Restore Cached deps folder
id: restore-cache-deps
uses: actions/cache/restore@v4
uses: actions/cache/restore@v5
with:
key: ${{ runner.os }}-deps-${{ github.ref }}-${{ github.sha }}
restore-keys: |
@@ -233,10 +233,10 @@ jobs:
make
sudo make install
sudo cp -av /usr/local/lib/libzip* /lib/x86_64-linux-gnu/
- name: Download soh.otr
uses: actions/download-artifact@v4
- name: Download soh.o2r
uses: actions/download-artifact@v7
with:
name: soh.otr
name: soh.o2r
path: build-cmake/soh
- name: Build SoH
run: |
@@ -251,7 +251,7 @@ jobs:
CC: gcc-12
CXX: g++-12
- name: Upload build
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: soh-linux
path: |
@@ -259,7 +259,7 @@ jobs:
readme.txt
- name: Save Cache deps folder
if: ${{ github.ref_name == github.event.repository.default_branch }}
uses: actions/cache/save@v4
uses: actions/cache/save@v5
with:
key: ${{ steps.restore-cache-deps.outputs.cache-primary-key }}
path: deps
@@ -273,7 +273,7 @@ jobs:
choco install ninja -y
Remove-Item -Path "C:\ProgramData\Chocolatey\bin\ccache.exe" -Force -ErrorAction SilentlyContinue
- name: Git Checkout
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
submodules: true
- name: Configure sccache
@@ -289,7 +289,7 @@ jobs:
${{ runner.os }}-ccache
- name: Restore Cached VCPKG folder
id: restore-cache-vcpkg
uses: actions/cache/restore@v4
uses: actions/cache/restore@v5
with:
key: ${{ runner.os }}-vcpkg-${{ github.ref }}-${{ github.sha }}
restore-keys: |
@@ -298,10 +298,10 @@ jobs:
path: vcpkg
- name: Configure Developer Command Prompt
uses: ilammy/msvc-dev-cmd@v1
- name: Download soh.otr
uses: actions/download-artifact@v4
- name: Download soh.o2r
uses: actions/download-artifact@v7
with:
name: soh.otr
name: soh.o2r
path: build-windows/soh
- name: Build SoH
env:
@@ -317,13 +317,13 @@ jobs:
- name: Unzip package
run: Expand-Archive -Path _packages/soh-windows.zip -DestinationPath soh-windows
- name: Upload build
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: soh-windows
path: soh-windows
- name: Save Cache VCPKG folder
if: ${{ github.ref_name == github.event.repository.default_branch }}
uses: actions/cache/save@v4
uses: actions/cache/save@v5
with:
key: ${{ steps.restore-cache-vcpkg.outputs.cache-primary-key }}
path: vcpkg

View File

@@ -1 +1 @@
libsdl2 +universal libsdl2_net +universal libpng +universal glew +universal libzip +universal nlohmann-json +universal tinyxml2 +universal
libsdl2 +universal libsdl2_net +universal libpng +universal glew +universal libzip +universal nlohmann-json +universal tinyxml2 +universal libogg +universal libopus +universal opusfile +universal libvorbis +universal

View File

@@ -12,7 +12,7 @@ jobs:
if: ${{ github.event.workflow_run.event == 'pull_request' }}
steps:
- id: 'pr-number'
uses: actions/github-script@v7
uses: actions/github-script@v8
with:
result-encoding: string
script: |
@@ -37,7 +37,7 @@ jobs:
return prNumber;
- id: 'artifacts-text'
uses: actions/github-script@v7
uses: actions/github-script@v8
with:
result-encoding: string
script: |
@@ -48,7 +48,7 @@ jobs:
});
return allArtifacts.data.artifacts.reduce((acc, item) => {
if (item.name === "soh.otr") return acc;
if (item.name === "soh.o2r") return acc;
acc += `
- [${item.name}.zip](https://nightly.link/${context.repo.owner}/${context.repo.repo}/actions/artifacts/${item.id}.zip)`;
return acc;

View File

@@ -23,24 +23,24 @@ jobs:
if: ${{ matrix.image == 'archlinux:base' }}
run: |
echo arch
echo pacman -S ${{ matrix.cc }} git cmake ninja lsb-release sdl2 libpng libzip nlohmann-json tinyxml2 spdlog sdl2_net boost
echo pacman -S ${{ matrix.cc }} git cmake ninja lsb-release sdl2 libpng libzip nlohmann-json tinyxml2 spdlog sdl2_net
pacman -Syu --noconfirm
pacman -S --noconfirm ${{ matrix.cc }} git cmake ninja lsb-release sdl2 libpng libzip nlohmann-json tinyxml2 spdlog sdl2_net boost
pacman -S --noconfirm ${{ matrix.cc }} git cmake ninja lsb-release sdl2 libpng libzip nlohmann-json tinyxml2 spdlog sdl2_net
- name: Install dependencies (dnf)
if: ${{ matrix.image == 'fedora:39' }}
run: |
echo fedora
echo dnf install ${{ matrix.cc }} ${{ (matrix.cxx == 'g++' && 'gcc-c++') || '' }} wget git cmake ninja-build lsb_release SDL2-devel libpng-devel libzip-devel libzip-tools tinyxml2-devel spdlog-devel boost-devel
echo dnf install ${{ matrix.cc }} ${{ (matrix.cxx == 'g++' && 'gcc-c++') || '' }} wget git cmake ninja-build lsb_release SDL2-devel libpng-devel libzip-devel libzip-tools tinyxml2-devel spdlog-devel
dnf -y upgrade
dnf -y install ${{ matrix.cc }} ${{ (matrix.cxx == 'g++' && 'gcc-c++') || '' }} wget git cmake ninja-build lsb_release SDL2-devel libpng-devel libzip-devel libzip-tools tinyxml2-devel spdlog-devel boost-devel
dnf -y install ${{ matrix.cc }} ${{ (matrix.cxx == 'g++' && 'gcc-c++') || '' }} wget git cmake ninja-build lsb_release SDL2-devel libpng-devel libzip-devel libzip-tools tinyxml2-devel spdlog-devel
- name: Install dependencies (apt)
if: ${{ matrix.image == 'ubuntu:mantic' || matrix.image == 'debian:bookworm' }}
run: |
echo debian based
echo apt-get install ${{ matrix.cc }} ${{ (matrix.cxx == 'g++' && 'g++') || '' }} git cmake ninja-build lsb-release libsdl2-dev libpng-dev libsdl2-net-dev libzip-dev zipcmp zipmerge ziptool nlohmann-json3-dev libtinyxml2-dev libspdlog-dev libboost-dev libopengl-dev
echo apt-get install ${{ matrix.cc }} ${{ (matrix.cxx == 'g++' && 'g++') || '' }} git cmake ninja-build lsb-release libsdl2-dev libpng-dev libsdl2-net-dev libzip-dev zipcmp zipmerge ziptool nlohmann-json3-dev libtinyxml2-dev libspdlog-dev libopengl-dev
apt-get update
apt-get -y full-upgrade
apt-get -y install ${{ matrix.cc }} ${{ (matrix.cxx == 'g++' && 'g++') || '' }} git cmake ninja-build lsb-release libsdl2-dev libpng-dev libsdl2-net-dev libzip-dev zipcmp zipmerge ziptool nlohmann-json3-dev libtinyxml2-dev libspdlog-dev libboost-dev libopengl-dev
apt-get -y install ${{ matrix.cc }} ${{ (matrix.cxx == 'g++' && 'g++') || '' }} git cmake ninja-build lsb-release libsdl2-dev libpng-dev libsdl2-net-dev libzip-dev zipcmp zipmerge ziptool nlohmann-json3-dev libtinyxml2-dev libspdlog-dev libopengl-dev
- name: Install dependencies (zypper)
if: ${{ matrix.image == 'opensuse/tumbleweed:latest' }}
run: |
@@ -59,7 +59,7 @@ jobs:
cmake ..
make
sudo make install
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
submodules: true
- name: Build SoH

4
.gitignore vendored
View File

@@ -2,6 +2,7 @@
__pycache__/
.pyc
.DS_Store
.cache/*
# Text editor remnants
.vscode/*
@@ -412,10 +413,12 @@ ReleaseObj/*
.tags
tags
*.otr
*.o2r
*.sav
shipofharkinian.ini
shipofharkinian.json
imgui.ini
timesplitdata.json
# Switch Stuff
@@ -456,3 +459,4 @@ soh/properties.h
# Tools
/clang-format
/clang-format.exe
*.o2r

45
.vscode/tasks.json vendored
View File

@@ -9,14 +9,24 @@
"-S",
".",
"-B",
"build/x64",
"build-cmake",
"-G",
"Visual Studio 17 2022",
"-T",
"v143",
"-A",
"x64"
"Ninja"
],
"windows": {
"args": [
"-S",
".",
"-B",
"build/x64",
"-G",
"Visual Studio 17 2022",
"-T",
"v143",
"-A",
"x64"
]
},
"group": "build",
"problemMatcher": []
},
@@ -26,10 +36,19 @@
"command": "cmake",
"args": [
"--build",
"./build/x64",
"build-cmake",
"--target",
"GenerateSohOtr"
"GenerateSohOtr",
"--parallel"
],
"windows": {
"args": [
"--build",
"./build/x64",
"--target",
"GenerateSohOtr"
]
},
"group": "build",
"problemMatcher": []
},
@@ -39,8 +58,14 @@
"command": "cmake",
"args": [
"--build",
"./build/x64"
"build-cmake"
],
"windows": {
"args": [
"--build",
"./build/x64"
]
},
"group": {
"kind": "build",
"isDefault": true
@@ -58,4 +83,4 @@
]
}
]
}
}

61
CMake/FindOgg.cmake Normal file
View File

@@ -0,0 +1,61 @@
# - Find ogg
# Find the native ogg includes and libraries
#
# OGG_INCLUDE_DIRS - where to find ogg.h, etc.
# OGG_LIBRARIES - List of libraries when using ogg.
# OGG_FOUND - True if ogg found.
if (OGG_INCLUDE_DIR)
# Already in cache, be silent
set(OGG_FIND_QUIETLY TRUE)
endif ()
find_package (PkgConfig QUIET)
pkg_check_modules (PC_OGG QUIET ogg>=1.3.0)
set (OGG_VERSION ${PC_OGG_VERSION})
find_path (OGG_INCLUDE_DIR ogg/ogg.h
HINTS
${PC_OGG_INCLUDEDIR}
${PC_OGG_INCLUDE_DIRS}
${OGG_ROOT}
)
# MSVC built ogg may be named ogg_static.
# The provided project files name the library with the lib prefix.
find_library (OGG_LIBRARY
NAMES
ogg
ogg_static
libogg
libogg_static
HINTS
${PC_OGG_LIBDIR}
${PC_OGG_LIBRARY_DIRS}
${OGG_ROOT}
)
# Handle the QUIETLY and REQUIRED arguments and set OGG_FOUND
# to TRUE if all listed variables are TRUE.
include (FindPackageHandleStandardArgs)
find_package_handle_standard_args (Ogg
REQUIRED_VARS
OGG_LIBRARY
OGG_INCLUDE_DIR
VERSION_VAR
OGG_VERSION
)
if (OGG_FOUND)
set (OGG_LIBRARIES ${OGG_LIBRARY})
set (OGG_INCLUDE_DIRS ${OGG_INCLUDE_DIR})
if(NOT TARGET Ogg::ogg)
add_library(Ogg::ogg UNKNOWN IMPORTED)
set_target_properties(Ogg::ogg PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${OGG_INCLUDE_DIRS}"
IMPORTED_LOCATION "${OGG_LIBRARIES}"
)
endif ()
endif ()
mark_as_advanced (OGG_INCLUDE_DIR OGG_LIBRARY)

44
CMake/FindOpus.cmake Normal file
View File

@@ -0,0 +1,44 @@
# - FindOpus.cmake
# Find the native opus includes and libraries
#
# OPUS_INCLUDE_DIRS - where to find opus/opus.h, etc.
# OPUS_LIBRARIES - List of libraries when using libopus(file).
# OPUS_FOUND - True if libopus found.
if(OPUS_INCLUDE_DIR AND OPUS_LIBRARY AND OPUSFILE_LIBRARY)
# Already in cache, be silent
set(OPUS_FIND_QUIETLY TRUE)
endif(OPUS_INCLUDE_DIR AND OPUS_LIBRARY AND OPUSFILE_LIBRARY)
find_path(OPUS_INCLUDE_DIR
NAMES opusfile.h
PATH_SUFFIXES opus
)
# MSVC built opus may be named opus_static
# The provided project files name the library with the lib prefix.
find_library(OPUS_LIBRARY
NAMES opus opus_static libopus libopus_static
)
#find_library(OPUSFILE_LIBRARY
# NAMES opusfile opusfile_static libopusfile libopusfile_static
#)
# Handle the QUIETLY and REQUIRED arguments and set OPUS_FOUND
# to TRUE if all listed variables are TRUE.
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Opus DEFAULT_MSG
OPUS_LIBRARY OPUS_INCLUDE_DIR
)
if(OPUS_FOUND)
set(OPUS_LIBRARIES ${OPUS_LIBRARY})
set(OPUS_INCLUDE_DIRS ${OPUS_INCLUDE_DIR})
if(NOT TARGET Opus::opus)
add_library(Opus::opus UNKNOWN IMPORTED)
set_target_properties(Opus::opus PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${OPUS_INCLUDE_DIRS}"
IMPORTED_LOCATION "${OPUS_LIBRARIES}"
)
endif()
endif(OPUS_FOUND)

63
CMake/FindOpusFile.cmake Normal file
View File

@@ -0,0 +1,63 @@
# FindOpusFile.cmake
# Locate the libopusfile library and its dependencies (libopus and libogg).
# Defines the following variables on success:
# OPUSFILE_FOUND - Indicates if opusfile was found
# OPUSFILE_INCLUDE_DIR - Directory containing opusfile.h
# OPUSFILE_LIBRARY - Path to the opusfile library
# OPUSFILE_LIBRARIES - Full list of libraries to link (opusfile, opus, ogg)
# Use pkg-config to find opusfile if available
find_package(PkgConf)
if(PKG_CONFIG_FOUND)
pkg_check_modules(PC_OPUSFILE QUIET opusfile)
endif()
# Search for the OpusFile header
find_path(OPUSFILE_INCLUDE_DIR
NAMES opusfile.h
HINTS ${PC_OPUSFILE_INCLUDE_DIRS}
PATHS /usr/include/opus /usr/local/include/opus /opt/local/include/opus /opt/homebrew/include/opus
DOC "Directory where opusfile.h is located"
)
# Search for the OpusFile library
find_library(OPUSFILE_LIBRARY
NAMES opusfile
HINTS ${PC_OPUSFILE_LIBRARY_DIRS}
DOC "Path to the libopusfile library"
)
# Search for the Opus library (dependency of OpusFile)
find_library(OPUS_LIBRARY
NAMES opus
DOC "Path to the libopus library (dependency of libopusfile)"
)
# Search for the Ogg library (dependency of OpusFile)
find_library(OGG_LIBRARY
NAMES ogg
DOC "Path to the libogg library (dependency of libopusfile)"
)
# Check if all required components are found
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(OpusFile
REQUIRED_VARS OPUSFILE_LIBRARY OPUSFILE_INCLUDE_DIR OPUS_LIBRARY OGG_LIBRARY
VERSION_VAR OPUSFILE_VERSION
)
# Define an imported target if everything is found
if (OPUSFILE_FOUND)
add_library(Opusfile::Opusfile INTERFACE IMPORTED)
set_target_properties(Opusfile::Opusfile PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${OPUSFILE_INCLUDE_DIR}"
INTERFACE_LINK_LIBRARIES "${OPUSFILE_LIBRARY};${OPUS_LIBRARY};${OGG_LIBRARY}"
)
# Optionally expose the include and libraries separately
set(OPUSFILE_LIBRARIES ${OPUSFILE_LIBRARY} ${OPUS_LIBRARY} ${OGG_LIBRARY})
set(OPUSFILE_INCLUDE_DIRS ${OPUSFILE_INCLUDE_DIR})
else()
set(OPUSFILE_FOUND FALSE)
endif()

210
CMake/FindVorbis.cmake Normal file
View File

@@ -0,0 +1,210 @@
#[=======================================================================[.rst:
FindVorbis
----------
Finds the native vorbis, vorbisenc amd vorbisfile includes and libraries.
Imported Targets
^^^^^^^^^^^^^^^^
This module provides the following imported targets, if found:
``Vorbis::vorbis``
The Vorbis library
``Vorbis::vorbisenc``
The VorbisEnc library
``Vorbis::vorbisfile``
The VorbisFile library
Result Variables
^^^^^^^^^^^^^^^^
This will define the following variables:
``Vorbis_Vorbis_INCLUDE_DIRS``
List of include directories when using vorbis.
``Vorbis_Enc_INCLUDE_DIRS``
List of include directories when using vorbisenc.
``Vorbis_File_INCLUDE_DIRS``
List of include directories when using vorbisfile.
``Vorbis_Vorbis_LIBRARIES``
List of libraries when using vorbis.
``Vorbis_Enc_LIBRARIES``
List of libraries when using vorbisenc.
``Vorbis_File_LIBRARIES``
List of libraries when using vorbisfile.
``Vorbis_FOUND``
True if vorbis and requested components found.
``Vorbis_Vorbis_FOUND``
True if vorbis found.
``Vorbis_Enc_FOUND``
True if vorbisenc found.
``Vorbis_Enc_FOUND``
True if vorbisfile found.
Cache variables
^^^^^^^^^^^^^^^
The following cache variables may also be set:
``Vorbis_Vorbis_INCLUDE_DIR``
The directory containing ``vorbis/vorbis.h``.
``Vorbis_Enc_INCLUDE_DIR``
The directory containing ``vorbis/vorbisenc.h``.
``Vorbis_File_INCLUDE_DIR``
The directory containing ``vorbis/vorbisenc.h``.
``Vorbis_Vorbis_LIBRARY``
The path to the vorbis library.
``Vorbis_Enc_LIBRARY``
The path to the vorbisenc library.
``Vorbis_File_LIBRARY``
The path to the vorbisfile library.
Hints
^^^^^
A user may set ``Vorbis_ROOT`` to a vorbis installation root to tell this module where to look.
#]=======================================================================]
if (Vorbis_Vorbis_INCLUDE_DIR)
# Already in cache, be silent
set (Vorbis_FIND_QUIETLY TRUE)
endif ()
set (Vorbis_Vorbis_FIND_QUIETLY TRUE)
set (Vorbis_Enc_FIND_QUIETLY TRUE)
set (Vorbis_File_FIND_QUIETLY TRUE)
find_package (Ogg QUIET)
find_package (PkgConfig QUIET)
pkg_check_modules (PC_Vorbis_Vorbis QUIET vorbis)
pkg_check_modules (PC_Vorbis_Enc QUIET vorbisenc)
pkg_check_modules (PC_Vorbis_File QUIET vorbisfile)
set (Vorbis_VERSION ${PC_Vorbis_Vorbis_VERSION})
find_path (Vorbis_Vorbis_INCLUDE_DIR vorbis/codec.h
HINTS
${PC_Vorbis_Vorbis_INCLUDEDIR}
${PC_Vorbis_Vorbis_INCLUDE_DIRS}
${Vorbis_ROOT}
)
find_path (Vorbis_Enc_INCLUDE_DIR vorbis/vorbisenc.h
HINTS
${PC_Vorbis_Enc_INCLUDEDIR}
${PC_Vorbis_Enc_INCLUDE_DIRS}
${Vorbis_ROOT}
)
find_path (Vorbis_File_INCLUDE_DIR vorbis/vorbisfile.h
HINTS
${PC_Vorbis_File_INCLUDEDIR}
${PC_Vorbis_File_INCLUDE_DIRS}
${Vorbis_ROOT}
)
find_library (Vorbis_Vorbis_LIBRARY
NAMES
vorbis
vorbis_static
libvorbis
libvorbis_static
HINTS
${PC_Vorbis_Vorbis_LIBDIR}
${PC_Vorbis_Vorbis_LIBRARY_DIRS}
${Vorbis_ROOT}
)
find_library (Vorbis_Enc_LIBRARY
NAMES
vorbisenc
vorbisenc_static
libvorbisenc
libvorbisenc_static
HINTS
${PC_Vorbis_Enc_LIBDIR}
${PC_Vorbis_Enc_LIBRARY_DIRS}
${Vorbis_ROOT}
)
find_library (Vorbis_File_LIBRARY
NAMES
vorbisfile
vorbisfile_static
libvorbisfile
libvorbisfile_static
HINTS
${PC_Vorbis_File_LIBDIR}
${PC_Vorbis_File_LIBRARY_DIRS}
${Vorbis_ROOT}
)
include (FindPackageHandleStandardArgs)
if (Vorbis_Vorbis_LIBRARY AND Vorbis_Vorbis_INCLUDE_DIR AND Ogg_FOUND)
set (Vorbis_Vorbis_FOUND TRUE)
endif ()
if (Vorbis_Enc_LIBRARY AND Vorbis_Enc_INCLUDE_DIR AND Vorbis_Vorbis_FOUND)
set (Vorbis_Enc_FOUND TRUE)
endif ()
if (Vorbis_Vorbis_FOUND AND Vorbis_File_LIBRARY AND Vorbis_File_INCLUDE_DIR)
set (Vorbis_File_FOUND TRUE)
endif ()
find_package_handle_standard_args (Vorbis
REQUIRED_VARS
Vorbis_Vorbis_LIBRARY
Vorbis_Vorbis_INCLUDE_DIR
Ogg_FOUND
HANDLE_COMPONENTS
VERSION_VAR Vorbis_VERSION)
if (Vorbis_Vorbis_FOUND)
set (Vorbis_Vorbis_INCLUDE_DIRS ${VORBIS_INCLUDE_DIR})
set (Vorbis_Vorbis_LIBRARIES ${VORBIS_LIBRARY} ${OGG_LIBRARIES})
if (NOT TARGET Vorbis::vorbis)
add_library (Vorbis::vorbis UNKNOWN IMPORTED)
set_target_properties (Vorbis::vorbis PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${Vorbis_Vorbis_INCLUDE_DIR}"
IMPORTED_LOCATION "${Vorbis_Vorbis_LIBRARY}"
INTERFACE_LINK_LIBRARIES Ogg::ogg
)
endif ()
if (Vorbis_Enc_FOUND)
set (Vorbis_Enc_INCLUDE_DIRS ${Vorbis_Enc_INCLUDE_DIR})
set (Vorbis_Enc_LIBRARIES ${Vorbis_Enc_LIBRARY} ${Vorbis_Enc_LIBRARIES})
if (NOT TARGET Vorbis::vorbisenc)
add_library (Vorbis::vorbisenc UNKNOWN IMPORTED)
set_target_properties (Vorbis::vorbisenc PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${Vorbis_Enc_INCLUDE_DIR}"
IMPORTED_LOCATION "${Vorbis_Enc_LIBRARY}"
INTERFACE_LINK_LIBRARIES Vorbis::vorbis
)
endif ()
endif ()
if (Vorbis_File_FOUND)
set (Vorbis_File_INCLUDE_DIRS ${Vorbis_File_INCLUDE_DIR})
set (Vorbis_File_LIBRARIES ${Vorbis_File_LIBRARY} ${Vorbis_File_LIBRARIES})
if (NOT TARGET Vorbis::vorbisfile)
add_library (Vorbis::vorbisfile UNKNOWN IMPORTED)
set_target_properties (Vorbis::vorbisfile PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${Vorbis_File_INCLUDE_DIR}"
IMPORTED_LOCATION "${Vorbis_File_LIBRARY}"
INTERFACE_LINK_LIBRARIES Vorbis::vorbis
)
endif ()
endif ()
endif ()
mark_as_advanced (Vorbis_Vorbis_INCLUDE_DIR Vorbis_Vorbis_LIBRARY)
mark_as_advanced (Vorbis_Enc_INCLUDE_DIR Vorbis_Enc_LIBRARY)
mark_as_advanced (Vorbis_File_INCLUDE_DIR Vorbis_File_LIBRARY)

View File

@@ -1,7 +1,5 @@
set(CVAR_VSYNC_ENABLED "${CVAR_PREFIX_SETTING}.VsyncEnabled" CACHE STRING "")
set(CVAR_Z_FIGHTING_MODE "${CVAR_PREFIX_SETTING}.ZFightingMode" CACHE STRING "")
set(CVAR_NEW_FILE_DROPPED "${CVAR_PREFIX_GENERAL}.NewFileDropped" CACHE STRING "")
set(CVAR_DROPPED_FILE "${CVAR_PREFIX_GENERAL}.DroppedFile" CACHE STRING "")
set(CVAR_INTERNAL_RESOLUTION "${CVAR_PREFIX_SETTING}.InternalResolution" CACHE STRING "")
set(CVAR_MSAA_VALUE "${CVAR_PREFIX_SETTING}.MSAAValue" CACHE STRING "")
set(CVAR_SDL_WINDOWED_FULLSCREEN "${CVAR_PREFIX_SETTING}.SdlWindowedFullscreen" CACHE STRING "")

View File

@@ -2,13 +2,16 @@ cmake_minimum_required(VERSION 3.26.0 FATAL_ERROR)
set(CMAKE_SYSTEM_VERSION 10.0 CACHE STRING "" FORCE)
set(CMAKE_CXX_STANDARD 20 CACHE STRING "The C++ standard to use")
set(CMAKE_C_STANDARD 17 CACHE STRING "The C standard to use")
set(CMAKE_C_STANDARD 23 CACHE STRING "The C standard to use")
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.15" CACHE STRING "Minimum OS X deployment version")
project(Ship VERSION 9.0.5 LANGUAGES C CXX)
project(Ship VERSION 9.2.1 LANGUAGES C CXX)
include(CMake/soh-cvars.cmake)
include(CMake/lus-cvars.cmake)
set(SPDLOG_LEVEL_TRACE 0)
set(SPDLOG_LEVEL_OFF 6)
set(SPDLOG_MIN_CUTOFF SPDLOG_LEVEL_TRACE CACHE STRING "cutoff at trace")
option(SUPPRESS_WARNINGS "Suppress warnings in LUS and src (decomp)" ON)
if(SUPPRESS_WARNINGS)
@@ -35,7 +38,7 @@ math(EXPR PATCH_INDEX "${PROJECT_VERSION_PATCH}")
# Use the patch number to select the correct word
list(GET NATO_PHONETIC_ALPHABET ${PATCH_INDEX} PROJECT_PATCH_WORD)
set(PROJECT_BUILD_NAME "Blair ${PROJECT_PATCH_WORD}" CACHE STRING "" FORCE)
set(PROJECT_BUILD_NAME "Ackbar ${PROJECT_PATCH_WORD}" CACHE STRING "" FORCE)
set(PROJECT_TEAM "github.com/harbourmasters" CACHE STRING "" FORCE)
execute_process(
@@ -75,6 +78,7 @@ set(CMAKE_PROJECT_GIT_COMMIT_TAG "${GIT_COMMIT_TAG}" CACHE STRING "Git commit ta
set_property(DIRECTORY ${CMAKE_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT soh)
add_compile_options($<$<CXX_COMPILER_ID:MSVC>:/MP>)
add_compile_options($<$<CXX_COMPILER_ID:MSVC>:/utf-8>)
add_compile_options($<$<CXX_COMPILER_ID:MSVC>:/Zc:preprocessor>)
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
include(CMake/automate-vcpkg.cmake)
@@ -83,8 +87,7 @@ if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
set(VCPKG_TARGET_TRIPLET x64-windows-static)
vcpkg_bootstrap()
vcpkg_install_packages(zlib bzip2 libzip libpng sdl2 sdl2-net glew glfw3 nlohmann-json tinyxml2 spdlog)
vcpkg_install_packages(zlib bzip2 libzip libpng sdl2 sdl2-net glew glfw3 nlohmann-json tinyxml2 spdlog libogg libvorbis opus opusfile)
if (CMAKE_C_COMPILER_LAUNCHER MATCHES "ccache|sccache")
set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT Embedded)
endif()
@@ -154,6 +157,10 @@ set(GFX_DEBUG_DISASSEMBLER ON)
# Tell LUS we're using F3DEX_GBI_2 (in a way that doesn't break libgfxd)
set(GBI_UCODE F3DEX_GBI_2)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake")
# Enable MPQ and OTR support
set(INCLUDE_MPQ_SUPPORT ON)
################################################################################
# Set CONTROLLERBUTTONS_T
@@ -165,6 +172,7 @@ add_compile_definitions(CONTROLLERBUTTONS_T=uint32_t)
################################################################################
add_subdirectory(libultraship ${CMAKE_BINARY_DIR}/libultraship)
target_compile_options(libultraship PRIVATE "${WARNING_OVERRIDE}")
target_compile_definitions(libultraship PUBLIC INCLUDE_MPQ_SUPPORT)
add_subdirectory(ZAPDTR/ZAPD ${CMAKE_BINARY_DIR}/ZAPD)
add_subdirectory(OTRExporter)
add_subdirectory(soh)
@@ -174,24 +182,15 @@ set_property(TARGET soh PROPERTY APPIMAGE_DESKTOP_FILE "${CMAKE_SOURCE_DIR}/scri
set_property(TARGET soh PROPERTY APPIMAGE_ICON_FILE "${CMAKE_BINARY_DIR}/sohIcon.png")
if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
install(PROGRAMS "${CMAKE_BINARY_DIR}/linux/soh.sh" DESTINATION . COMPONENT appimage)
install(FILES "${CMAKE_BINARY_DIR}/soh/soh.otr" DESTINATION . COMPONENT ship)
install(FILES "${CMAKE_BINARY_DIR}/soh/soh.o2r" DESTINATION . COMPONENT ship)
install(TARGETS ZAPD DESTINATION ./assets/extractor COMPONENT extractor)
install(DIRECTORY "${CMAKE_SOURCE_DIR}/soh/assets/extractor/" DESTINATION ./assets/extractor COMPONENT extractor)
install(DIRECTORY "${CMAKE_SOURCE_DIR}/soh/assets/xml/" DESTINATION ./assets/extractor/xmls COMPONENT extractor)
install(DIRECTORY "${CMAKE_SOURCE_DIR}/OTRExporter/CFG/filelists/" DESTINATION ./assets/extractor/filelists COMPONENT extractor)
install(FILES "${CMAKE_SOURCE_DIR}/OTRExporter/CFG/ActorList_OoTMqDbg.txt" DESTINATION ./assets/extractor/symbols COMPONENT extractor)
install(FILES "${CMAKE_SOURCE_DIR}/OTRExporter/CFG/ObjectList_OoTMqDbg.txt" DESTINATION ./assets/extractor/symbols COMPONENT extractor)
install(FILES "${CMAKE_SOURCE_DIR}/OTRExporter/CFG/SymbolMap_OoTMqDbg.txt" DESTINATION ./assets/extractor/symbols COMPONENT extractor)
install(DIRECTORY "${CMAKE_SOURCE_DIR}/soh/assets/extractor/" DESTINATION ./assets COMPONENT extractor)
install(DIRECTORY "${CMAKE_SOURCE_DIR}/soh/assets/xml/" DESTINATION ./assets/xml COMPONENT extractor)
endif()
if ("${CMAKE_SYSTEM_NAME}" STREQUAL "Windows")
install(DIRECTORY "${CMAKE_SOURCE_DIR}/soh/assets/extractor/" DESTINATION ./assets/extractor COMPONENT ship)
install(DIRECTORY "${CMAKE_SOURCE_DIR}/soh/assets/xml/" DESTINATION ./assets/extractor/xmls COMPONENT ship)
install(DIRECTORY "${CMAKE_SOURCE_DIR}/OTRExporter/CFG/filelists/" DESTINATION ./assets/extractor/filelists COMPONENT ship)
install(FILES "${CMAKE_SOURCE_DIR}/OTRExporter/CFG/ActorList_OoTMqDbg.txt" DESTINATION ./assets/extractor/symbols COMPONENT ship)
install(FILES "${CMAKE_SOURCE_DIR}/OTRExporter/CFG/ObjectList_OoTMqDbg.txt" DESTINATION ./assets/extractor/symbols COMPONENT ship)
install(FILES "${CMAKE_SOURCE_DIR}/OTRExporter/CFG/SymbolMap_OoTMqDbg.txt" DESTINATION ./assets/extractor/symbols COMPONENT ship)
install(DIRECTORY "${CMAKE_SOURCE_DIR}/soh/assets/extractor/" DESTINATION ./assets/ COMPONENT ship)
install(DIRECTORY "${CMAKE_SOURCE_DIR}/soh/assets/xml/" DESTINATION ./assets/xml COMPONENT ship)
endif()
find_package(Python3 COMPONENTS Interpreter)
@@ -199,42 +198,42 @@ find_package(Python3 COMPONENTS Interpreter)
# Target to generate OTRs
add_custom_target(
ExtractAssets
COMMAND ${CMAKE_COMMAND} -E rm -f oot.otr oot-mq.otr soh.otr
COMMAND ${CMAKE_COMMAND} -E rm -f oot.o2r oot-mq.o2r soh.o2r
# copy LUS default shaders into assets/custom
COMMAND ${CMAKE_COMMAND} -E rm -r -f ${CMAKE_CURRENT_SOURCE_DIR}/soh/assets/custom/shaders/
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/libultraship/src/graphic/Fast3D/shaders/ ${CMAKE_CURRENT_SOURCE_DIR}/soh/assets/custom/shaders/
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/libultraship/src/fast/shaders/ ${CMAKE_CURRENT_SOURCE_DIR}/soh/assets/custom/shaders/
COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter/extract_assets.py -z "$<TARGET_FILE:ZAPD>" --non-interactive --xml-root ../soh/assets/xml --custom-otr-file soh.otr "--custom-assets-path" ${CMAKE_CURRENT_SOURCE_DIR}/soh/assets/custom --port-ver "${CMAKE_PROJECT_VERSION}"
COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter/extract_assets.py -z "$<TARGET_FILE:ZAPD>" --non-interactive --xml-root assets/xml --custom-otr-file soh.o2r "--custom-assets-path" ${CMAKE_CURRENT_SOURCE_DIR}/soh/assets/custom --port-ver "${CMAKE_PROJECT_VERSION}"
COMMAND ${CMAKE_COMMAND} -DSYSTEM_NAME=${CMAKE_SYSTEM_NAME} -DTARGET_DIR="$<TARGET_FILE_DIR:ZAPD>" -DSOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR} -DBINARY_DIR=${CMAKE_BINARY_DIR} -P ${CMAKE_CURRENT_SOURCE_DIR}/copy-existing-otrs.cmake
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/soh
COMMENT "Running asset extraction..."
DEPENDS ZAPD
BYPRODUCTS oot.otr ${CMAKE_SOURCE_DIR}/oot.otr oot-mq.otr ${CMAKE_SOURCE_DIR}/oot-mq.otr ${CMAKE_SOURCE_DIR}/soh.otr
BYPRODUCTS oot.o2r ${CMAKE_SOURCE_DIR}/oot.o2r oot-mq.o2r ${CMAKE_SOURCE_DIR}/oot-mq.o2r ${CMAKE_SOURCE_DIR}/soh.o2r
)
# Target to generate headers
add_custom_target(
ExtractAssetHeaders
COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter/extract_assets.py -z "$<TARGET_FILE:ZAPD>" --non-interactive --xml-root ../soh/assets/xml --gen-headers
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter
COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter/extract_assets.py -z "$<TARGET_FILE:ZAPD>" --non-interactive --xml-root assets/xml --gen-headers
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/soh
COMMENT "Generating asset headers..."
DEPENDS ZAPD
)
# Target to generate only soh.otr
# Target to generate only soh.o2r
add_custom_target(
GenerateSohOtr
COMMAND ${CMAKE_COMMAND} -E rm -f soh.otr
COMMAND ${CMAKE_COMMAND} -E rm -f soh.o2r
# copy LUS default shaders into assets/custom
COMMAND ${CMAKE_COMMAND} -E rm -r -f ${CMAKE_CURRENT_SOURCE_DIR}/soh/assets/custom/shaders/
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/libultraship/src/graphic/Fast3D/shaders/ ${CMAKE_CURRENT_SOURCE_DIR}/soh/assets/custom/shaders/
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/libultraship/src/fast/shaders/ ${CMAKE_CURRENT_SOURCE_DIR}/soh/assets/custom/shaders/
COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter/extract_assets.py -z "$<TARGET_FILE:ZAPD>" --norom --custom-otr-file soh.otr "--custom-assets-path" ${CMAKE_CURRENT_SOURCE_DIR}/soh/assets/custom --port-ver "${CMAKE_PROJECT_VERSION}"
COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter/extract_assets.py -z "$<TARGET_FILE:ZAPD>" --norom --custom-otr-file soh.o2r "--custom-assets-path" ${CMAKE_CURRENT_SOURCE_DIR}/soh/assets/custom --port-ver "${CMAKE_PROJECT_VERSION}"
COMMAND ${CMAKE_COMMAND} -DSYSTEM_NAME=${CMAKE_SYSTEM_NAME} -DTARGET_DIR="$<TARGET_FILE_DIR:ZAPD>" -DSOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR} -DBINARY_DIR=${CMAKE_BINARY_DIR} -DONLYSOHOTR=On -P ${CMAKE_CURRENT_SOURCE_DIR}/copy-existing-otrs.cmake
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter
COMMENT "Generating soh.otr..."
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/soh
COMMENT "Generating soh.o2r..."
DEPENDS ZAPD
)
@@ -267,22 +266,12 @@ add_custom_target(CreateOSXIcons
)
add_dependencies(soh CreateOSXIcons)
install(TARGETS ZAPD DESTINATION ${CMAKE_BINARY_DIR}/assets/extractor)
install(TARGETS ZAPD DESTINATION ${CMAKE_BINARY_DIR}/assets)
set(PROGRAM_PERMISSIONS_EXECUTE OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_EXECUTE WORLD_READ)
install(DIRECTORY "${CMAKE_SOURCE_DIR}/soh/assets/extractor/" DESTINATION ./assets/extractor)
install(DIRECTORY "${CMAKE_SOURCE_DIR}/soh/assets/xml/" DESTINATION ./assets/extractor/xmls)
install(DIRECTORY "${CMAKE_SOURCE_DIR}/OTRExporter/CFG/filelists/" DESTINATION ./assets/extractor/filelists)
install(FILES "${CMAKE_SOURCE_DIR}/OTRExporter/CFG/ActorList_OoTMqDbg.txt" DESTINATION ./assets/extractor/symbols)
install(FILES "${CMAKE_SOURCE_DIR}/OTRExporter/CFG/ObjectList_OoTMqDbg.txt" DESTINATION ./assets/extractor/symbols)
install(FILES "${CMAKE_SOURCE_DIR}/OTRExporter/CFG/SymbolMap_OoTMqDbg.txt" DESTINATION ./assets/extractor/symbols)
install(DIRECTORY ${CMAKE_BINARY_DIR}/assets
DESTINATION .
PATTERN ZAPD.out
PERMISSIONS ${PROGRAM_PERMISSIONS_EXECUTE}
)
install(DIRECTORY "${CMAKE_SOURCE_DIR}/soh/assets/extractor/" DESTINATION ./assets/)
install(DIRECTORY "${CMAKE_SOURCE_DIR}/soh/assets/xml/" DESTINATION ./assets/xml)
# Rename the installed soh binary to drop the macos suffix
INSTALL(CODE "FILE(RENAME \${CMAKE_INSTALL_PREFIX}/../MacOS/soh-macos \${CMAKE_INSTALL_PREFIX}/../MacOS/soh)")

396
PLAN_TRADUCCION.md Normal file
View File

@@ -0,0 +1,396 @@
# Plan de Implementación del Sistema de Traducción
## Objetivo
Crear un sistema de traducción dinámico que permita cargar idiomas desde archivos JSON externos **sin modificar los textos hardcodeados existentes**. Los textos en el código permanecen en inglés como fallback por defecto.
---
## 1. Funcionamiento Clave
### 1.1 Comportamiento
- **Sin carpeta de idiomas**: El juego funciona exactamente como ahora con los textos hardcodeados en inglés
- **Con carpeta de idiomas**: Cuando el usuario selecciona un idioma, se carga el JSON y se traducen los textos disponibles
- **Fallback**: Si una traducción no existe en el JSON, se usa el texto hardcodeado (inglés)
- **Persistencia**: El idioma seleccionado se guarda en la configuración y se carga automáticamente al iniciar
### 1.2 Carpeta de Idiomas (opcional)
```
/lenguajes/
├── Espanol.json
├── Portugues.json
└── (otros idiomas).json
```
**Nota**: No se requiere English.json porque el inglés ya está hardcodeado en el código.
---
## 2. Archivos Creados
| Archivo | Descripción |
|---------|-------------|
| `soh/soh/SohGui/LanguageManager.h` | Header del manager de idiomas |
| `soh/soh/SohGui/LanguageManager.cpp` | Implementación del manager |
| `lenguajes/Espanol.json` | Traducción español (~950 claves) |
| `soh/soh/Localization.h` | Stub para compatibilidad de compilación |
| `soh/soh/Localization.cpp` | Stub para compatibilidad de compilación |
---
## 3. Archivos Modificados (Implementación Base)
| Archivo | Cambios |
|---------|---------|
| `soh/soh/SohGui/SohMenuSettings.cpp` | Agregar selector de idioma dinámico + carga automática al inicio |
| `soh/soh/SohGui/SohMenu.cpp` | Aplicar traducción automática en DrawElement() con almacenamiento de nombres originales |
| `soh/soh/SohGui/SohMenu.h` | Agregar mapa de nombres originales y tooltips originales |
---
## 4. Ubicación de la Carpeta de Idiomas
### 4.1 Ubicaciones Buscadas
El sistema busca la carpeta `lenguajes` en este orden:
1. **Directorio actual** (desde donde se ejecuta el juego)
2. **Directorio de datos de la app** (~/.local/share/com.shipofharkinian.soh/)
### 4.2 Cómo colocar los archivos
```bash
# Opción 1: Copiar junto al ejecutable (después de compilar)
cp -r lenguajes build-cmake/soh/
# Opción 2: En el directorio de datos de la app
# Linux: ~/.local/share/com.shipofharkinian.soh/lenguajes/
```
---
## 5. Formato de Archivos JSON
### 5.1 Estructura del JSON
```json
{
"language": "Español",
"strings": {
"Settings": "Configuración",
"Enabled": "Activado",
"Disabled": "Desactivado"
}
}
```
### 5.2 Espanol.json (Completo)
Actualmente incluye ~950 traducciones extraídas automáticamente de todos los archivos del menú.
---
## 6. Implementación del LanguageManager
### 6.1 LanguageManager.h
```cpp
class LanguageManager {
public:
static LanguageManager& Instance();
void Init();
void LoadLanguage(const std::string& languageName);
std::string GetString(const std::string& key);
std::vector<std::string> GetAvailableLanguages();
std::string GetCurrentLanguage();
bool IsTranslationLoaded();
private:
std::string currentLanguage;
std::map<std::string, std::string> translations;
bool translationLoaded;
void ScanLanguageFiles();
bool LoadJsonFile(const std::string& path);
std::string GetLanguagesDirectory();
};
```
### 6.2 Lógica de Funcionamiento
```cpp
std::string LanguageManager::GetString(const std::string& key) {
if (!translationLoaded || translations.empty()) {
return key;
}
auto it = translations.find(key);
if (it != translations.end()) {
return it->second;
}
return key; // Fallback al texto original
}
```
---
## 7. Estado Actual de la Implementación
### ✅ Completado
- [x] LanguageManager.h/cpp - Carga de idiomas desde JSON
- [x] Selector de idioma dinámico en Settings (usa CVar integer para el índice)
- [x] Traducción automática de nombres de widgets en DrawElement()
- [x] Almacenamiento de nombres originales con claves estables (sección|sidebar|columna|índice)
- [x] Persistencia del idioma seleccionado
- [x] Espanol.json con ~950 traducciones
- [x] Compilación exitosa y funcional
### ❌ Pendiente - Fase 1: Menú Completo (Riesgo Bajo-Medio)
- [ ] Headers del menú principal (Settings, Enhancements, Randomizer, Network, Dev Tools)
- [ ] Labels de sidebars (General, Audio, Graphics, Controls, etc.)
- [ ] Tooltips de widgets (mensajes al pasar el mouse)
- [ ] Opciones de combobox (temas, filtros de textura, etc.)
- [ ] Mensajes de estado (disabled tooltips, mensajes de error)
- [ ] Custom widgets que usan ImGui directo
- [ ] Editor de resolución (labels de presets, textos de configuración)
- [ ] Textos del sistema base de búsqueda (Search Results, Clear Search, No results found)
- [ ] Botones del header (Quit SoH, Reset, Close Menu)
- [ ] Nombres de botones N64 en UIWidgets (Modifier 1, Modifier 2)
- [ ] Textos dinámicos en PreFunc (Connecting..., Connected, etc.)
### ❌ Pendiente - Fase 2: Randomizer (Riesgo Alto)
- [ ] Opciones del randomizer (settings.cpp - macros OPT_U8, OPT_BOOL)
- [ ] Descripciones de opciones (option_descriptions.cpp)
- [ ] Nombres de grupos de opciones (OptionGroup::SubGroup)
- [ ] Textos custom del menú randomizer (ImGui directo)
- [ ] Nombres de tricks y descripciones
- [ ] Nombres de áreas
- [ ] Textos del Plandomizer (Locations, Items, etc.)
---
## 8. Análisis Completo de Textos por Categoría
### Categoría 1: SohMenu.cpp - Mensajes de Estado
**Archivo:** `soh/soh/SohGui/SohMenu.cpp`
**Textos:** ~14 mensajes de disabledMap
**Ejemplos:** "Disabling VSync not supported", "Debug Mode is Disabled", "Frame Advance is Disabled"
**Cómo se dibujan:** Se concatenan en `Menu::MenuDrawItem()` como tooltips de widgets deshabilitados
**Tipo:** `const char*` en struct `disabledInfo`
**Riesgo:** BAJO
### Categoría 2: SohMenuSettings.cpp - Widgets de Settings
**Archivo:** `soh/soh/SohGui/SohMenuSettings.cpp`
**Textos:** ~200 (nombres de widgets, tooltips, opciones de combobox)
**Ejemplos de combobox options:** "Small", "Normal", "Large" (ImGui Scale), "Red", "Dark Red", "Orange" (temas), "Three-Point", "Linear", "None" (filtro textura)
**Ejemplos de tooltips:** "Changes the Theme of the Menu Widgets.", "Allows controller navigation of the port menu..."
**Cómo se dibujan:** Via `AddWidget().Tooltip("...")` y `.ComboMap(mapa)`
**Tipo:** Tooltips como `std::string` en WidgetOptions, combobox como `std::map<int32_t, const char*>`
**Riesgo:** MEDIO
### Categoría 3: SohMenuEnhancements.cpp - Widgets de Enhancements
**Archivo:** `soh/soh/SohGui/SohMenuEnhancements.cpp`
**Textos:** ~500+ (nombres, tooltips, opciones de combobox, disabledTooltips)
**Ejemplos de combobox options:** "Vanilla", "Faster Run", "Faster + Longer Jump" (Bunny Hood), "Plentiful", "Balanced", "Scarce", "Minimal" (Item Pool del randomizer)
**Ejemplos de tooltips:** Textos largos de varias líneas explicando cada mejora
**Cómo se dibujan:** Mismo patrón que Settings
**Riesgo:** MEDIO-ALTO (volumen grande)
### Categoría 4: SohMenuRandomizer.cpp - Widgets de Randomizer
**Archivo:** `soh/soh/SohGui/SohMenuRandomizer.cpp`
**Textos:** ~100 + datos del motor del randomizer
**Ejemplos:** "Seed Entry", "Generate Randomizer", "Filter (inc,-exc)", "Disable All", "Enable All"
**Cómo se dibujan:** Mix de `AddWidget()` y custom widgets con ImGui directo (`ImGui::Text()`, `ImGui::Button()`, `ImGui::BeginTable()`)
**Datos del randomizer:** Nombres de ubicaciones, tricks, áreas vienen de `Rando::StaticData`, `TrickSetting`, `Option`
**Riesgo:** ALTO (datos del randomizer pueden afectar compatibilidad con seeds)
### Categoría 5: SohMenuNetwork.cpp - Widgets de Network
**Archivo:** `soh/soh/SohGui/SohMenuNetwork.cpp`
**Textos:** ~30
**Ejemplos:** "Host & Port", "Enable##Sail", "Connecting...##Sail", "About Crowd Control"
**Cómo se dibujan:** Mix de `AddWidget()` y textos ImGui directo
**Riesgo:** BAJO
### Categoría 6: SohMenuDevTools.cpp - Widgets de Dev Tools
**Archivo:** `soh/soh/SohGui/SohMenuDevTools.cpp`
**Textos:** ~50
**Ejemplos:** "Debug Mode", "Frame Advance", "Log Level", "Trace", "Debug", "Info", "Warn"
**Riesgo:** BAJO (herramientas de desarrollo, prioridad baja)
### Categoría 7: Menu.cpp - Sistema Base del Menú
**Archivo:** `soh/soh/SohGui/Menu.cpp`
**Textos:** ~20
**Ejemplos:** "This setting is disabled because: \n", "Search Results", "Clear Search", "No results found", "Quit SoH", "Reset", "Close Menu (Esc)"
**Cómo se dibujan:** Directamente en `MenuDrawItem()` con llamadas ImGui
**Riesgo:** MEDIO (textos del sistema core)
### Categoría 8: UIWidgets.cpp - Widgets UI
**Archivo:** `soh/soh/SohGui/UIWidgets.cpp`
**Textos:** ~15
**Ejemplos:** "Modifier 1", "Modifier 2", "Remove this button from the combination", "Resets this color to its default value"
**Cómo se dibujan:** En `BtnSelector()` y Color Picker
**Riesgo:** BAJO-MEDIO
### Categoría 9: ResolutionEditor.cpp - Editor de Resolución
**Archivo:** `soh/soh/SohGui/ResolutionEditor.cpp`
**Textos:** ~40
**Ejemplos:** "Off", "Custom", "Original (4:3)", "Widescreen (16:9)", "Pixel Perfect Mode", "Integer Scaling Settings"
**Cómo se dibujan:** Mix de `AddWidget()` y `ResolutionCustomWidget()` con ImGui directo
**Riesgo:** MEDIO
### Categoría 10: Randomizer Settings - Opciones del Randomizer
**Archivos:**
- `soh/soh/Enhancements/randomizer/settings.cpp`
- `soh/soh/Enhancements/randomizer/option_descriptions.cpp`
**Textos:** ~1000+
**Ejemplos:** "Item Pool", "Logic", "Closed Forest", "Kakariko Gate", "Starting Age"
**Cómo se dibujan:** Via macros `OPT_U8`, `OPT_BOOL` que crean objetos `Option`, no pasan por `AddWidget()`
**Descripciones:** Textos largos en `option_descriptions.cpp` (~836 líneas)
**Grupos:** `OptionGroup::SubGroup("Logic Options", ...)`, `OptionGroup::SubGroup("Logical Tricks", ...)`
**Riesgo:** MUY ALTO (puede romper compatibilidad con seeds, spoiler logs, herramientas externas)
### Categoría 11: SohMenu.h - Idiomas del Juego
**Archivo:** `soh/soh/SohGui/SohMenu.h`
**Textos:** 4 ("English", "German", "French", "Japanese")
**Riesgo:** MUY BAJO (nombres propios de idiomas)
---
## 9. Plan de Implementación Gradual (Opción C)
### Fase 1: Menú Completo (sin Randomizer)
**Objetivo:** Traducir todo el menú principal ~700 textos adicionales
**Riesgo:** Medio
**Tiempo estimado:** Moderado
#### Paso 1.1: Headers y Sidebars
- Modificar `DrawElement()` para traducir `section.label` y `sidebarOrder`
- Usar claves estables basadas en índices (igual que widgets)
- **Archivo:** `soh/soh/SohGui/SohMenu.cpp`
#### Paso 1.2: Tooltips de Widgets
- Agregar mapa `mOriginalTooltips` en SohMenu.h
- Guardar tooltips originales con claves de índice
- Traducir en `DrawElement()` antes de dibujar
- **Archivos:** `SohMenu.h`, `SohMenu.cpp`
#### Paso 1.3: Opciones de Combobox
- Traducir en `PreFunc` de cada widget combobox
- Usar mapas estáticos con traducción dinámica
- **Archivos:** `SohMenuSettings.cpp`, `SohMenuEnhancements.cpp`, etc.
#### Paso 1.4: Mensajes de Estado (disabledMap)
- Traducir `disabledInfo.reason` en `MenuDrawItem()` al concatenar
- **Archivo:** `soh/soh/SohGui/Menu.cpp`
#### Paso 1.5: Textos del Sistema Base
- Traducir textos de búsqueda, botones del header, diálogos de confirmación
- **Archivo:** `soh/soh/SohGui/Menu.cpp`
#### Paso 1.6: Custom Widgets
- Envolver textos ImGui directo con `LanguageManager::Instance().GetString()`
- **Archivos:** `SohMenuNetwork.cpp`, `SohMenuDevTools.cpp`, `ResolutionEditor.cpp`
#### Paso 1.7: UIWidgets
- Traducir labels de botones (Modifier 1, Modifier 2) y tooltips de Color Picker
- **Archivo:** `soh/soh/SohGui/UIWidgets.cpp`
### Fase 2: Randomizer (requiere diseño cuidadoso)
**Objetivo:** Traducir opciones del randomizer ~1000+ textos
**Riesgo:** Alto
**Consideraciones:**
- Los nombres de opciones se usan como keys en mapas y serialización
- Puede afectar compatibilidad con seeds existentes y spoiler logs
- Los nombres de tricks son parte de la cultura del speedrunning
- Se necesita evaluar si traducir solo display names o también keys internas
#### Paso 2.1: Opciones del Randomizer
- Integrar `LanguageManager` en el sistema de `Option`
- Traducir `GetName()` al renderizar, NO al crear la opción
- **Archivo:** `soh/soh/Enhancements/randomizer/settings.cpp`
#### Paso 2.2: Descripciones de Opciones
- Traducir `mOptionDescriptions[]` al mostrar
- **Archivo:** `soh/soh/Enhancements/randomizer/option_descriptions.cpp`
#### Paso 2.3: Grupos de Opciones
- Traducir nombres de `OptionGroup::SubGroup()` al renderizar
- **Archivo:** `soh/soh/Enhancements/randomizer/settings.cpp`
#### Paso 2.4: Custom Widgets del Randomizer
- Traducir textos ImGui directo en el menú del randomizer
- **Archivo:** `soh/soh/SohGui/SohMenuRandomizer.cpp`
#### Paso 2.5: Tricks y Áreas (opcional, bajo demanda)
- Traducir nombres de tricks y áreas
- Evaluar impacto en la comunidad de speedrunning
- **Archivos:** `soh/soh/Enhancements/randomizer/3drando/tricks.cpp`, etc.
---
## 10. Notas Importantes
-**Textos hardcodeados permanecen**: El código no se modifica, los textos en inglés quedan como están
-**Sin carpeta de idiomas funciona igual**: Si no existe la carpeta, el juego funciona exactamente como antes
-**Fallback automático**: Si falta una traducción, se muestra el texto original
-**Selector dinámico**: Los nombres de idiomas vienen de los archivos JSON, no están hardcodeados
-**Fácil agregar idiomas**: Solo hay que crear un nuevo archivo `.json` en la carpeta
-**Persistencia**: El idioma seleccionado se guarda y se carga automáticamente al iniciar
- ⚠️ **Ubicación de carpeta**: La carpeta `lenguajes` debe estar junto al ejecutable o en el directorio de datos de la app
- ⚠️ **Claves estables**: Los nombres de widgets se traducen usando claves basadas en índices para evitar corrupción al cambiar idioma
---
## 11. Cómo Compilar y Ejecutar
```bash
# 1. Compilar el proyecto
cmake -H. -Bbuild-cmake -GNinja
cmake --build build-cmake -j$(nproc)
# 2. Copiar carpeta de idiomas junto al ejecutable
cp -r lenguajes build-cmake/soh/
# 3. Ejecutar desde la raíz del proyecto
./build-cmake/soh/soh.elf
```
---
## 12. Resumen de Dificultad por Categoría
| Categoría | Textos | Dificultad | Riesgo |
|---|---|---|---|
| Headers y Sidebars | ~30 | Media | Medio |
| Tooltips del menú | ~400 | Media | Medio |
| Opciones de combobox | ~150 | Media | Medio |
| Mensajes de estado | ~30 | Baja | Bajo |
| Custom widgets | ~80 | Media | Medio |
| Editor de resolución | ~40 | Media | Medio |
| Sistema base (búsqueda, botones) | ~20 | Media | Medio |
| UIWidgets | ~15 | Baja | Bajo |
| **Opciones del Randomizer** | ~1000+ | Muy Alta | **Muy Alto** |
| Tricks y Áreas | ~100+ | Muy Alta | **Muy Alto** |
---
## 13. Archivos de Referencia con Textos Hardcodeados
### SohGui (ya analizados)
- `SohMenu_hardcoded.txt`
- `SohMenuSettings_hardcoded.txt`
- `SohMenuEnhancements_hardcoded.txt`
- `SohMenuRandomizer_hardcoded.txt`
- `SohMenuNetwork_hardcoded.txt`
- `SohMenuDevTools_hardcoded.txt`
- `SohMenuBar_hardcoded.txt`
- `ResolutionEditor_hardcoded.txt`
---
## 14. Diferencias con el Plan Anterior
| Aspecto | Plan Anterior | Plan Actual |
|---------|---------------|--------------|
| English.json | Obligatorio | No necesario (hardcodeado es fallback) |
| Reemplazo de textos | Sí, en todos los archivos | No, solo agregar función GetString |
| Archivos a modificar | 8+ archivos | 2 archivos (SohMenuSettings.cpp, SohMenu.cpp) |
| Funcionamiento sin carpeta | Requiere English.json | Funciona igual que antes |
| Stub Localization | No previsto | Necesario para compilar |
| Persistencia de idioma | No implementada | ✅ Guardado y cargado automáticamente |
| Strings en selector | Implementación con problemas | ✅ Solucionado con map estático |
| Traducción de tooltips | No previsto | ✅ Implementado con claves estables |
| Headers y Sidebars | No previsto | ⏳ Pendiente (Fase 1) |
| Randomizer | No previsto | ⏳ Pendiente (Fase 2, requiere diseño) |

View File

@@ -34,16 +34,16 @@ You can verify you have dumped a supported copy of the game by using the compati
* You should see a notification saying `Processing OTR`, then, once the process is complete, you should get a notification saying `OTR Successfully Generated`, then the game should start.
#### Nintendo Switch
* Run one of the PC releases to generate an `oot.otr` and/or `oot-mq.otr` file. After launching the game on PC, you will be able to find these files in the same directory as `soh.exe` or `soh.appimage`. On macOS, these files can be found in `/Users/<username>/Library/Application Support/com.shipofharkinian.soh/`
* Run one of the PC releases to generate an `oot.o2r` and/or `oot-mq.o2r` file. After launching the game on PC, you will be able to find these files in the same directory as `soh.exe` or `soh.appimage`. On macOS, these files can be found in `/Users/<username>/Library/Application Support/com.shipofharkinian.soh/`
* Copy the files to your sd card
```
sdcard
└── switch
└── soh
├── oot-mq.otr
├── oot.otr
├── oot-mq.o2r
├── oot.o2r
├── soh.nro
└── soh.otr
└── soh.o2r
```
* Launch via Atmosphere's `Game+R` launcher method.
@@ -74,7 +74,7 @@ Congratulations, you are now sailing with the Ship of Harkinian! Have fun!
# Project Overview
Ship of Harkinian (SOH) is built atop a custom library dubbed libultraship (LUS). Back in the N64 days, there was an SDK distributed to developers named libultra; LUS is designed to mimic the functionality of libultra on modern hardware. In addition, we are dependant on the source code provided by the OOT decompilation project.
In order for the game to function, you will require a **legally acquired** ROM for Ocarina of Time. Click [here](https://ship.equipment/) to check the compatibility of your specific rom. Any copyrighted assets are extracted from the ROM and reformatted as a .otr archive file which the code uses.
In order for the game to function, you will require a **legally acquired** ROM for Ocarina of Time. Click [here](https://ship.equipment/) to check the compatibility of your specific rom. Any copyrighted assets are extracted from the ROM and reformatted as a .o2r archive file which the code uses.
### Graphics Backends
Currently, there are three rendering APIs supported: DirectX11 (Windows), OpenGL (all platforms), and Metal (MacOS). You can change which API to use in the `Settings` menu of the menubar, which requires a restart. If you're having an issue with crashing, you can change the API in the `shipofharkinian.json` file by finding the line `gfxbackend:""` and changing the value to `sdl` for OpenGL. DirectX 11 is the default on Windows.

2
ZAPDTR

Submodule ZAPDTR updated: 2aeababbfb...ee3397a365

View File

@@ -1,37 +1,37 @@
message(STATUS "Copying otr files...")
if(NOT ONLYSOHOTR AND EXISTS ${SOURCE_DIR}/OTRExporter/oot.otr)
execute_process(COMMAND ${CMAKE_COMMAND} -E copy oot.otr ${SOURCE_DIR})
execute_process(COMMAND ${CMAKE_COMMAND} -E copy oot.otr ${BINARY_DIR}/soh/)
message(STATUS "Copied oot.otr")
if(NOT ONLYSOHOTR AND EXISTS ${SOURCE_DIR}/soh/oot.o2r)
execute_process(COMMAND ${CMAKE_COMMAND} -E copy oot.o2r ${SOURCE_DIR})
execute_process(COMMAND ${CMAKE_COMMAND} -E copy oot.o2r ${BINARY_DIR}/soh/)
message(STATUS "Copied oot.o2r")
endif()
if(NOT ONLYSOHOTR AND EXISTS ${SOURCE_DIR}/OTRExporter/oot-mq.otr)
execute_process(COMMAND ${CMAKE_COMMAND} -E copy oot-mq.otr ${SOURCE_DIR})
execute_process(COMMAND ${CMAKE_COMMAND} -E copy oot-mq.otr ${BINARY_DIR}/soh/)
message(STATUS "Copied oot-mq.otr")
if(NOT ONLYSOHOTR AND EXISTS ${SOURCE_DIR}/soh/oot-mq.o2r)
execute_process(COMMAND ${CMAKE_COMMAND} -E copy oot-mq.o2r ${SOURCE_DIR})
execute_process(COMMAND ${CMAKE_COMMAND} -E copy oot-mq.o2r ${BINARY_DIR}/soh/)
message(STATUS "Copied oot-mq.o2r")
endif()
if(EXISTS ${SOURCE_DIR}/OTRExporter/soh.otr)
execute_process(COMMAND ${CMAKE_COMMAND} -E copy soh.otr ${SOURCE_DIR})
execute_process(COMMAND ${CMAKE_COMMAND} -E copy soh.otr ${BINARY_DIR}/soh/)
message(STATUS "Copied soh.otr")
if(EXISTS ${SOURCE_DIR}/soh/soh.o2r)
execute_process(COMMAND ${CMAKE_COMMAND} -E copy soh.o2r ${SOURCE_DIR})
execute_process(COMMAND ${CMAKE_COMMAND} -E copy soh.o2r ${BINARY_DIR}/soh/)
message(STATUS "Copied soh.o2r")
endif()
# Additionally for Windows, copy the otrs to the target dir, side by side with soh.exe
if(SYSTEM_NAME MATCHES "Windows")
if(NOT ONLYSOHOTR AND EXISTS ${SOURCE_DIR}/OTRExporter/oot.otr)
execute_process(COMMAND ${CMAKE_COMMAND} -E copy oot.otr ${TARGET_DIR})
if(NOT ONLYSOHOTR AND EXISTS ${SOURCE_DIR}/soh/oot.o2r)
execute_process(COMMAND ${CMAKE_COMMAND} -E copy oot.o2r ${TARGET_DIR})
endif()
if(NOT ONLYSOHOTR AND EXISTS ${SOURCE_DIR}/OTRExporter/oot-mq.otr)
execute_process(COMMAND ${CMAKE_COMMAND} -E copy oot-mq.otr ${TARGET_DIR})
if(NOT ONLYSOHOTR AND EXISTS ${SOURCE_DIR}/soh/oot-mq.o2r)
execute_process(COMMAND ${CMAKE_COMMAND} -E copy oot-mq.o2r ${TARGET_DIR})
endif()
if(EXISTS ${SOURCE_DIR}/OTRExporter/soh.otr)
execute_process(COMMAND ${CMAKE_COMMAND} -E copy soh.otr ${TARGET_DIR})
if(EXISTS ${SOURCE_DIR}/soh/soh.o2r)
execute_process(COMMAND ${CMAKE_COMMAND} -E copy soh.o2r ${TARGET_DIR})
endif()
endif()
if(NOT ONLYSOHOTR AND (NOT EXISTS ${SOURCE_DIR}/oot.otr AND NOT EXISTS ${SOURCE_DIR}/oot-mq.otr))
if(NOT ONLYSOHOTR AND (NOT EXISTS ${SOURCE_DIR}/oot.o2r AND NOT EXISTS ${SOURCE_DIR}/oot-mq.o2r))
message(FATAL_ERROR "Failed to copy. No OTR files found.")
endif()
if(NOT EXISTS ${SOURCE_DIR}/soh.otr)
if(NOT EXISTS ${SOURCE_DIR}/soh.o2r)
message(FATAL_ERROR "Failed to copy. No soh OTR found.")
endif()

View File

@@ -22,7 +22,7 @@ It is recommended that you install Python and Git standalone, the install proces
_Note: Be sure to either clone with the ``--recursive`` flag or do ``git submodule update --init`` after cloning to pull in the libultraship submodule!_
2. After setup and initial build, use the built-in OTR extraction to make your oot.otr/oot-mq.otr files.
2. After setup and initial build, use the built-in OTR extraction to make your oot.o2r/oot-mq.o2r files.
_Note: Instructions assume using powershell_
```powershell
@@ -34,7 +34,7 @@ cd Shipwright
# Add `-DSUPPRESS_WARNINGS=0` to prevent suppression of warnings from LUS and decomp (src) files. set to 1 to re-enable suppression
& 'C:\Program Files\CMake\bin\cmake' -S . -B "build/x64" -G "Visual Studio 17 2022" -T v143 -A x64
# Generate soh.otr
# Generate soh.o2r
& 'C:\Program Files\CMake\bin\cmake.exe' --build .\build\x64 --target GenerateSohOtr
# Compile project
@@ -90,36 +90,94 @@ C:\Program Files\CMake\bin\cmake.exe --build build-cmake --target ExtractAssetHe
#### Debian/Ubuntu
```sh
# using gcc
apt-get install gcc g++ git cmake ninja-build lsb-release libsdl2-dev libpng-dev libsdl2-net-dev libzip-dev zipcmp zipmerge ziptool nlohmann-json3-dev libtinyxml2-dev libspdlog-dev libboost-dev libopengl-dev
apt-get install gcc g++ git cmake ninja-build lsb-release libsdl2-dev libpng-dev libsdl2-net-dev libzip-dev zipcmp zipmerge ziptool nlohmann-json3-dev libtinyxml2-dev libspdlog-dev libopengl-dev libopusfile-dev libvorbis-dev
# or using clang
apt-get install clang git cmake ninja-build lsb-release libsdl2-dev libpng-dev libsdl2-net-dev libzip-dev zipcmp zipmerge ziptool nlohmann-json3-dev libtinyxml2-dev libspdlog-dev libboost-dev libopengl-dev
apt-get install clang git cmake ninja-build lsb-release libsdl2-dev libpng-dev libsdl2-net-dev libzip-dev zipcmp zipmerge ziptool nlohmann-json3-dev libtinyxml2-dev libspdlog-dev libopengl-dev libopusfile-dev libvorbis-dev
```
#### Arch
```sh
# using gcc
pacman -S gcc git cmake ninja lsb-release sdl2 libpng libzip nlohmann-json tinyxml2 spdlog sdl2_net boost
pacman -S gcc git cmake ninja lsb-release sdl2 libpng libzip nlohmann-json tinyxml2 spdlog sdl2_net opusfile libvorbis
# or using clang
pacman -S clang git cmake ninja lsb-release sdl2 libpng libzip nlohmann-json tinyxml2 spdlog sdl2_net boost
pacman -S clang git cmake ninja lsb-release sdl2 libpng libzip nlohmann-json tinyxml2 spdlog sdl2_net opusfile libvorbis
```
#### Fedora
```sh
# using gcc
dnf install gcc gcc-c++ git cmake ninja-build lsb_release SDL2-devel libpng-devel libzip-devel libzip-tools nlohmann-json-devel tinyxml2-devel spdlog-devel boost-devel
dnf install gcc gcc-c++ git cmake ninja-build lsb_release SDL2-devel libpng-devel libzip-devel libzip-tools nlohmann-json-devel tinyxml2-devel spdlog-devel opusfile-devel libvorbis-devel
# or using clang
dnf install clang git cmake ninja-build lsb_release SDL2-devel libpng-devel libzip-devel libzip-tools nlohmann-json-devel tinyxml2-devel spdlog-devel boost-devel
dnf install clang git cmake ninja-build lsb_release SDL2-devel libpng-devel libzip-devel libzip-tools nlohmann-json-devel tinyxml2-devel spdlog-devel opusfile-devel libvorbis-devel
```
#### openSUSE
```sh
# using gcc
zypper in gcc gcc-c++ git cmake ninja SDL2-devel libpng16-devel libzip-devel libzip-tools nlohmann_json-devel tinyxml2-devel spdlog-devel
#### Nix
You can use a `flake.nix` file to instantly setup a development environment using [Nix](https://nixos.org/). Write this `flake.nix` file in the root directory:
# or using clang
zypper in clang libstdc++-devel git cmake ninja SDL2-devel libpng16-devel libzip-devel libzip-tools nlohmann_json-devel tinyxml2-devel spdlog-devel
```nix
{
description = "Shipwright development environment";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
};
outputs = { self, nixpkgs, flake-utils }:
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = nixpkgs.legacyPackages.${system};
in
{
devShells.default = pkgs.mkShell {
buildInputs = with pkgs; [
# Build tools
clang
git
cmake
ninja
lsb-release
pkg-config
# SDL2 libraries
SDL2
SDL2.dev
SDL2_net
# Other libraries
libpng
libzip
nlohmann_json
tinyxml-2
spdlog
libGL
libGL.dev
bzip2
# X11 libraries
xorg.libX11
# Audio libraries
libogg
libogg.dev
libvorbis
libvorbis.dev
libopus
libopus.dev
opusfile
opusfile.dev
];
shellHook = ''
echo "Shipwright development environment loaded"
echo "Available tools: clang, git, cmake, ninja"
'';
};
});
}
```
Now type `nix develop` and you will be dropped into a shell with all dependencies, ensuring that all build commands work.
### Build
_Note: If you're using Visual Studio Code, the [CMake Tools plugin](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cmake-tools) makes it very easy to just press run and debug._
@@ -138,7 +196,7 @@ git submodule update --init
# Add `-DPython3_EXECUTABLE=$(which python3)` if you are using non-standard Python installations such as PyEnv
cmake -H. -Bbuild-cmake -GNinja
# Generate soh.otr
# Generate soh.o2r
cmake --build build-cmake --target GenerateSohOtr
# Compile the project
@@ -173,7 +231,7 @@ cmake --build build-cmake --target ExtractAssetHeaders
```
## macOS
Requires Xcode (or xcode-tools) && `sdl2, libpng, glew, ninja, cmake, tinyxml2, nlohmann-json, libzip` (can be installed via [homebrew](https://brew.sh/), macports, etc)
Requires Xcode (or xcode-tools) && `sdl2, libpng, glew, ninja, cmake, tinyxml2, nlohmann-json, libzip, opusfile, libvorbis` (can be installed via [homebrew](https://brew.sh/), macports, etc)
**Important: For maximum performance make sure you have ninja build tools installed!**
@@ -188,14 +246,14 @@ cd ShipWright
git submodule update --init
# Install development dependencies (assuming homebrew)
brew install sdl2 libpng glew ninja cmake tinyxml2 nlohmann-json libzip
brew install sdl2 libpng glew ninja cmake tinyxml2 nlohmann-json libzip opusfile libvorbis
# Generate Ninja project
# Add `-DCMAKE_BUILD_TYPE:STRING=Release` if you're packaging
# Add `-DSUPPRESS_WARNINGS=0` to prevent suppression of warnings from LUS and decomp (src) files. set to 1 to re-enable suppression
cmake -H. -Bbuild-cmake -GNinja
# Generate soh.otr
# Generate soh.o2r
cmake --build build-cmake --target GenerateSohOtr
# Compile the project
@@ -231,7 +289,7 @@ cmake --build build-cmake --target ExtractAssetHeaders
## Switch
1. Requires that your build machine is setup with the tools necessary for your platform above
2. Requires that you have the switch build tools installed
2. Requires that you have the switch build tools installed
3. Clone the Ship of Harkinian repository
4. Place one or more [compatible](#compatible-roms) roms in the `OTRExporter` directory with namings of your choice
@@ -252,7 +310,7 @@ cmake --build build-switch --target soh_nro
## Wii U
1. Requires that your build machine is setup with the tools necessary for your platform above
2. Requires that you have the Wii U build tools installed
2. Requires that you have the Wii U build tools installed
3. Clone the Ship of Harkinian repository
4. Place one or more [compatible](#compatible-roms) roms in the `OTRExporter` directory with namings of your choice
@@ -265,7 +323,7 @@ cmake --build build-cmake --target ExtractAssets
# Setup cmake project for building for Wii U
cmake -H. -Bbuild-wiiu -GNinja -DCMAKE_TOOLCHAIN_FILE=/opt/devkitpro/cmake/WiiU.cmake # -DCMAKE_BUILD_TYPE:STRING=Release (if you're packaging)
# Build project and generate rpx
cmake --build build-wiiu --target soh # --target soh_wuhb (for building .wuhb)
cmake --build build-wiiu --target soh # --target soh_wuhb (for building .wuhb)
# Now you can run the executable in ./build-wiiu/soh/soh.rpx or the Wii U Homebrew Bundle in ./build-wiiu/soh/soh.wuhb
# To develop the project open the repository in VSCode (or your preferred editor)

View File

@@ -19,6 +19,6 @@ Once you have prepared your sequences folder:
(*NOTE:* SoH can handle 1024 custom sequence in total. This includes the original music. Keep that in mind!)
1. Click the "Finalize OTR" text in the green footer.
1. Click "Generate OTR" and, using the file selection screen, save the file to the `mods` folder of your SoH installation.
- This `mods` folder should be in the same folder as your `oot.otr` file.
- This `mods` folder should be in the same folder as your `oot.o2r` file.
Assuming you have done everything correctly, boot up SoH and select the SFX Editor from the enhancements dropdown menu. You should now be able to swap out any of the in game sequences/fanfares for the sequences added in your newly generated OTR file. If you have any trouble with this process, please reach out in the support section of the Discord.

View File

@@ -1,38 +1,38 @@
# SDL GameControllerDB
The Ship of Harkinian utilizes a text file with SDL controller mappings for extended controller hardware support.
This file is pulled from https://github.com/gabomdq/SDL_GameControllerDB during the build process as [a part of CMakeLists.txt](https://github.com/HarbourMasters/Shipwright/blob/bb643661f62865dfc757c185d0daaebb32f2d53d/soh/CMakeLists.txt#L760).
This file is pulled from https://github.com/mdqinc/SDL_GameControllerDB during the build process as [a part of CMakeLists.txt](https://github.com/HarbourMasters/Shipwright/blob/bb643661f62865dfc757c185d0daaebb32f2d53d/soh/CMakeLists.txt#L760).
## Released versions
| Release | sha | diff |
| - | - | - |
| Zhora Alfa 4.0.0 | [967daa8](https://github.com/gabomdq/SDL_GameControllerDB/tree/967daa8f89c48b01ed0f9c6a86ac849930442fc6) | |
| Zhora Bravo 4.0.1 | [ccac7cd](https://github.com/gabomdq/SDL_GameControllerDB/tree/ccac7cd97f445955d4437e21c5f82123d9b4349b) | [+1](https://github.com/gabomdq/SDL_GameControllerDB/compare/967daa8...ccac7cd) |
| Zhora Charlie 4.0.2 | [ff26eb0](https://github.com/gabomdq/SDL_GameControllerDB/tree/ff26eb04d0fe18356985d968119429d6012e7d75) | [+8/-3](https://github.com/gabomdq/SDL_GameControllerDB/compare/ccac7cd...ff26eb0) |
| Zhora Delta 4.0.3 | [ad02da5](https://github.com/gabomdq/SDL_GameControllerDB/tree/ad02da5a95ca8005f2c1facc11a5a52f8522f0ee) | [+4/-5](https://github.com/gabomdq/SDL_GameControllerDB/compare/ff26eb0...ad02da5) |
| Zohra Echo 4.0.4 | [c203690](https://github.com/gabomdq/SDL_GameControllerDB/tree/c203690b1e13980699802918d362cd9dadf89bd0) | [+8/-4](https://github.com/gabomdq/SDL_GameControllerDB/compare/ad02da5...c203690) |
| Zhora Foxtrot 4.0.5 | [9db8101](https://github.com/gabomdq/SDL_GameControllerDB/tree/9db8101a5780d1b0721bf6de385e6ffe0d07dfc7) | [+6](https://github.com/gabomdq/SDL_GameControllerDB/compare/c203690...9db8101) |
| Flynn Alfa 5.0.0 | [163cc5d](https://github.com/gabomdq/SDL_GameControllerDB/tree/163cc5d45e9fc2f1bb2b95ea7eee4bbc9a57955c) | [+29/-8](https://github.com/gabomdq/SDL_GameControllerDB/compare/9db8101...163cc5d) |
| Flynn Bravo 5.0.1 | [7efce7d](https://github.com/gabomdq/SDL_GameControllerDB/tree/7efce7d3f309ec1fa409b1af09153f9eb77fbedf) | [-1](https://github.com/gabomdq/SDL_GameControllerDB/compare/163cc5d...7efce7d) |
| Flynn Charlie 5.0.2 | [e607703](https://github.com/gabomdq/SDL_GameControllerDB/tree/e607703392145343e8aca42be052121c0b7bd1c9) | [+40/-17](https://github.com/gabomdq/SDL_GameControllerDB/compare/7efce7d...e607703) |
| Bradley Alfa 5.1.0 | [2ba9676](https://github.com/gabomdq/SDL_GameControllerDB/tree/2ba96761af795c15e916cc97790b51e09dc0cd54) | [+1/-1](https://github.com/gabomdq/SDL_GameControllerDB/compare/e607703...2ba9676) |
| Bradley Charlie 5.1.2 | [4f5d1d4](https://github.com/gabomdq/SDL_GameControllerDB/tree/4f5d1d497985b75f4a83a5de46f596dc4d7f002e) | [+5/-1](https://github.com/gabomdq/SDL_GameControllerDB/compare/2ba9676...4f5d1d4) |
| Bradley Delta 5.1.3 | [9b73049](https://github.com/gabomdq/SDL_GameControllerDB/tree/9b73049ee62a2cc862d6ad94c2c777f2e8363a48) | [+4/-1](https://github.com/gabomdq/SDL_GameControllerDB/compare/4f5d1d4...9b73049) |
| Bradley Echo 5.1.4 | [6d3801f](https://github.com/gabomdq/SDL_GameControllerDB/tree/6d3801fcfe74b1989de96403b7b560eba72a175c) | [+56/-21](https://github.com/gabomdq/SDL_GameControllerDB/compare/9b73049...6d3801f) |
| Gibbs Alfa 6.0.0 | [0562b00](https://github.com/gabomdq/SDL_GameControllerDB/tree/0562b00eaf5c0308c49d329b79263d2dae1c3a85) | [+8/-2](https://github.com/gabomdq/SDL_GameControllerDB/compare/6d3801f...0562b00) |
| Khan Alfa 6.1.0 | [436c7e3](https://github.com/gabomdq/SDL_GameControllerDB/tree/436c7e3d54a57189ea0ab44d05f36b7cc7ea496c) | [+31/-16](https://github.com/gabomdq/SDL_GameControllerDB/compare/0562b00...436c7e3) |
| Khan Bravo 6.1.1 | [01cca2e](https://github.com/gabomdq/SDL_GameControllerDB/tree/01cca2e77f9bf9f1432be04f876f287eb78297fe) | [+23/-6](https://github.com/gabomdq/SDL_GameControllerDB/compare/436c7e3...01cca2e) |
| Khan Charlie 6.1.2 | [6852946](https://github.com/gabomdq/SDL_GameControllerDB/tree/6852946487534c69b7d228fd4eb8c87cf6966475) | [+25/-15](https://github.com/gabomdq/SDL_GameControllerDB/compare/01cca2e...6852946) |
| Spock Alfa 7.0.0 | [38bda81](https://github.com/gabomdq/SDL_GameControllerDB/tree/38bda816dc786f18493876f7bc30bc12dfd2636a) | [+15/-1](https://github.com/gabomdq/SDL_GameControllerDB/compare/6852946...38bda81) |
| Spock Bravo 7.0.1 | [228d980](https://github.com/gabomdq/SDL_GameControllerDB/tree/228d980d3d791e9df3b096472f6b97459f8709fe) | [+7/-3](https://github.com/gabomdq/SDL_GameControllerDB/compare/38bda81...228d980) |
| Spock Charlie 7.0.2 | [c5b4df0](https://github.com/gabomdq/SDL_GameControllerDB/tree/c5b4df0e1061175cb11e3ebbf8045178339864a5) | [+3](https://github.com/gabomdq/SDL_GameControllerDB/compare/228d980...c5b4df0) |
| Sulu Alfa 7.1.0 | [a2cf171](https://github.com/gabomdq/SDL_GameControllerDB/tree/a2cf1711b4ebc646a3814705d2fb6aac5707bcae) | [+4/-1](https://github.com/gabomdq/SDL_GameControllerDB/compare/c5b4df0...a2cf171) |
| Sulu Bravo 7.1.1 | [cc9f777](https://github.com/gabomdq/SDL_GameControllerDB/tree/cc9f777721f0cb30058d9eef52a295130b734a4a) | [+29/-9](https://github.com/gabomdq/SDL_GameControllerDB/compare/a2cf171...cc9f777) |
| MacReady Alfa 8.0.0 | [c56329f](https://github.com/gabomdq/SDL_GameControllerDB/tree/c56329f4df93fc7a780bdbeae47a9c91447b629c) | [+67/-23](https://github.com/gabomdq/SDL_GameControllerDB/compare/cc9f777...c56329f) |
| MacReady Bravo 8.0.1 | [721b575](https://github.com/gabomdq/SDL_GameControllerDB/tree/721b575d3053b21d6d30419bf74afb5b1d0fa7a4) | [+5/-5](https://github.com/gabomdq/SDL_GameControllerDB/compare/c56329f...721b575) |
| MacReady Charlie 8.0.2 | [721b575](https://github.com/gabomdq/SDL_GameControllerDB/tree/721b575d3053b21d6d30419bf74afb5b1d0fa7a4) | [+0/-0](https://github.com/gabomdq/SDL_GameControllerDB/compare/721b575...721b575) |
| MacReady Delta 8.0.3 | [d4ab609](https://github.com/gabomdq/SDL_GameControllerDB/tree/d4ab609121ee6e687bc3d3a7e80244b3b26d1164) | [+5/-3](https://github.com/gabomdq/SDL_GameControllerDB/compare/721b575...d4ab609) |
| MacReady Echo 8.0.4 | [6555d47](https://github.com/gabomdq/SDL_GameControllerDB/tree/6555d47ecb5d9eebac0e3d8cd19a545e9d946c40) | [+2/-0](https://github.com/gabomdq/SDL_GameControllerDB/compare/d4ab609...6555d47) |
| MacReady Foxtrot 8.0.5 | [037d6a1](https://github.com/gabomdq/SDL_GameControllerDB/tree/037d6a1533ed94fbc6a8c71e6f1f9aff1e46208a) | [+47/-14](https://github.com/gabomdq/SDL_GameControllerDB/compare/6555d47...037d6a1) |
| MacReady Golf 8.0.6 | [075c154](https://github.com/gabomdq/SDL_GameControllerDB/tree/075c1549075ef89a397fd7e0663d21e53a2485fd) | [+340/-301](https://github.com/gabomdq/SDL_GameControllerDB/compare/037d6a1...075c154) |
| Zhora Alfa 4.0.0 | [967daa8](https://github.com/mdqinc/SDL_GameControllerDB/tree/967daa8f89c48b01ed0f9c6a86ac849930442fc6) | |
| Zhora Bravo 4.0.1 | [ccac7cd](https://github.com/mdqinc/SDL_GameControllerDB/tree/ccac7cd97f445955d4437e21c5f82123d9b4349b) | [+1](https://github.com/mdqinc/SDL_GameControllerDB/compare/967daa8...ccac7cd) |
| Zhora Charlie 4.0.2 | [ff26eb0](https://github.com/mdqinc/SDL_GameControllerDB/tree/ff26eb04d0fe18356985d968119429d6012e7d75) | [+8/-3](https://github.com/mdqinc/SDL_GameControllerDB/compare/ccac7cd...ff26eb0) |
| Zhora Delta 4.0.3 | [ad02da5](https://github.com/mdqinc/SDL_GameControllerDB/tree/ad02da5a95ca8005f2c1facc11a5a52f8522f0ee) | [+4/-5](https://github.com/mdqinc/SDL_GameControllerDB/compare/ff26eb0...ad02da5) |
| Zohra Echo 4.0.4 | [c203690](https://github.com/mdqinc/SDL_GameControllerDB/tree/c203690b1e13980699802918d362cd9dadf89bd0) | [+8/-4](https://github.com/mdqinc/SDL_GameControllerDB/compare/ad02da5...c203690) |
| Zhora Foxtrot 4.0.5 | [9db8101](https://github.com/mdqinc/SDL_GameControllerDB/tree/9db8101a5780d1b0721bf6de385e6ffe0d07dfc7) | [+6](https://github.com/mdqinc/SDL_GameControllerDB/compare/c203690...9db8101) |
| Flynn Alfa 5.0.0 | [163cc5d](https://github.com/mdqinc/SDL_GameControllerDB/tree/163cc5d45e9fc2f1bb2b95ea7eee4bbc9a57955c) | [+29/-8](https://github.com/mdqinc/SDL_GameControllerDB/compare/9db8101...163cc5d) |
| Flynn Bravo 5.0.1 | [7efce7d](https://github.com/mdqinc/SDL_GameControllerDB/tree/7efce7d3f309ec1fa409b1af09153f9eb77fbedf) | [-1](https://github.com/mdqinc/SDL_GameControllerDB/compare/163cc5d...7efce7d) |
| Flynn Charlie 5.0.2 | [e607703](https://github.com/mdqinc/SDL_GameControllerDB/tree/e607703392145343e8aca42be052121c0b7bd1c9) | [+40/-17](https://github.com/mdqinc/SDL_GameControllerDB/compare/7efce7d...e607703) |
| Bradley Alfa 5.1.0 | [2ba9676](https://github.com/mdqinc/SDL_GameControllerDB/tree/2ba96761af795c15e916cc97790b51e09dc0cd54) | [+1/-1](https://github.com/mdqinc/SDL_GameControllerDB/compare/e607703...2ba9676) |
| Bradley Charlie 5.1.2 | [4f5d1d4](https://github.com/mdqinc/SDL_GameControllerDB/tree/4f5d1d497985b75f4a83a5de46f596dc4d7f002e) | [+5/-1](https://github.com/mdqinc/SDL_GameControllerDB/compare/2ba9676...4f5d1d4) |
| Bradley Delta 5.1.3 | [9b73049](https://github.com/mdqinc/SDL_GameControllerDB/tree/9b73049ee62a2cc862d6ad94c2c777f2e8363a48) | [+4/-1](https://github.com/mdqinc/SDL_GameControllerDB/compare/4f5d1d4...9b73049) |
| Bradley Echo 5.1.4 | [6d3801f](https://github.com/mdqinc/SDL_GameControllerDB/tree/6d3801fcfe74b1989de96403b7b560eba72a175c) | [+56/-21](https://github.com/mdqinc/SDL_GameControllerDB/compare/9b73049...6d3801f) |
| Gibbs Alfa 6.0.0 | [0562b00](https://github.com/mdqinc/SDL_GameControllerDB/tree/0562b00eaf5c0308c49d329b79263d2dae1c3a85) | [+8/-2](https://github.com/mdqinc/SDL_GameControllerDB/compare/6d3801f...0562b00) |
| Khan Alfa 6.1.0 | [436c7e3](https://github.com/mdqinc/SDL_GameControllerDB/tree/436c7e3d54a57189ea0ab44d05f36b7cc7ea496c) | [+31/-16](https://github.com/mdqinc/SDL_GameControllerDB/compare/0562b00...436c7e3) |
| Khan Bravo 6.1.1 | [01cca2e](https://github.com/mdqinc/SDL_GameControllerDB/tree/01cca2e77f9bf9f1432be04f876f287eb78297fe) | [+23/-6](https://github.com/mdqinc/SDL_GameControllerDB/compare/436c7e3...01cca2e) |
| Khan Charlie 6.1.2 | [6852946](https://github.com/mdqinc/SDL_GameControllerDB/tree/6852946487534c69b7d228fd4eb8c87cf6966475) | [+25/-15](https://github.com/mdqinc/SDL_GameControllerDB/compare/01cca2e...6852946) |
| Spock Alfa 7.0.0 | [38bda81](https://github.com/mdqinc/SDL_GameControllerDB/tree/38bda816dc786f18493876f7bc30bc12dfd2636a) | [+15/-1](https://github.com/mdqinc/SDL_GameControllerDB/compare/6852946...38bda81) |
| Spock Bravo 7.0.1 | [228d980](https://github.com/mdqinc/SDL_GameControllerDB/tree/228d980d3d791e9df3b096472f6b97459f8709fe) | [+7/-3](https://github.com/mdqinc/SDL_GameControllerDB/compare/38bda81...228d980) |
| Spock Charlie 7.0.2 | [c5b4df0](https://github.com/mdqinc/SDL_GameControllerDB/tree/c5b4df0e1061175cb11e3ebbf8045178339864a5) | [+3](https://github.com/mdqinc/SDL_GameControllerDB/compare/228d980...c5b4df0) |
| Sulu Alfa 7.1.0 | [a2cf171](https://github.com/mdqinc/SDL_GameControllerDB/tree/a2cf1711b4ebc646a3814705d2fb6aac5707bcae) | [+4/-1](https://github.com/mdqinc/SDL_GameControllerDB/compare/c5b4df0...a2cf171) |
| Sulu Bravo 7.1.1 | [cc9f777](https://github.com/mdqinc/SDL_GameControllerDB/tree/cc9f777721f0cb30058d9eef52a295130b734a4a) | [+29/-9](https://github.com/mdqinc/SDL_GameControllerDB/compare/a2cf171...cc9f777) |
| MacReady Alfa 8.0.0 | [c56329f](https://github.com/mdqinc/SDL_GameControllerDB/tree/c56329f4df93fc7a780bdbeae47a9c91447b629c) | [+67/-23](https://github.com/mdqinc/SDL_GameControllerDB/compare/cc9f777...c56329f) |
| MacReady Bravo 8.0.1 | [721b575](https://github.com/mdqinc/SDL_GameControllerDB/tree/721b575d3053b21d6d30419bf74afb5b1d0fa7a4) | [+5/-5](https://github.com/mdqinc/SDL_GameControllerDB/compare/c56329f...721b575) |
| MacReady Charlie 8.0.2 | [721b575](https://github.com/mdqinc/SDL_GameControllerDB/tree/721b575d3053b21d6d30419bf74afb5b1d0fa7a4) | [+0/-0](https://github.com/mdqinc/SDL_GameControllerDB/compare/721b575...721b575) |
| MacReady Delta 8.0.3 | [d4ab609](https://github.com/mdqinc/SDL_GameControllerDB/tree/d4ab609121ee6e687bc3d3a7e80244b3b26d1164) | [+5/-3](https://github.com/mdqinc/SDL_GameControllerDB/compare/721b575...d4ab609) |
| MacReady Echo 8.0.4 | [6555d47](https://github.com/mdqinc/SDL_GameControllerDB/tree/6555d47ecb5d9eebac0e3d8cd19a545e9d946c40) | [+2/-0](https://github.com/mdqinc/SDL_GameControllerDB/compare/d4ab609...6555d47) |
| MacReady Foxtrot 8.0.5 | [037d6a1](https://github.com/mdqinc/SDL_GameControllerDB/tree/037d6a1533ed94fbc6a8c71e6f1f9aff1e46208a) | [+47/-14](https://github.com/mdqinc/SDL_GameControllerDB/compare/6555d47...037d6a1) |
| MacReady Golf 8.0.6 | [075c154](https://github.com/mdqinc/SDL_GameControllerDB/tree/075c1549075ef89a397fd7e0663d21e53a2485fd) | [+340/-301](https://github.com/mdqinc/SDL_GameControllerDB/compare/037d6a1...075c154) |

View File

@@ -41,15 +41,28 @@ You can name your branch whatever you want, but it's recommended to name it some
The limit is your imagination. You can add new features, fix bugs, add new mods, or even change the way the game works. We will demonstrate this by creating a mod that changes the speed of the day/night cycle.
Let's being by finding where the time is updated. Thankfully in the save editor we have a slider already hooked up to the time of day so we can check there for reference. The save editor file is at `soh/soh/Enhancements/debugger/debugSaveEditor.cpp`, if we do a quick search within that file for time we will find the following at line 400:
Let's begin by finding where the time is updated. Thankfully in the save editor we have a slider already hooked up to the time of day so we can check there for reference. The save editor file is at `soh/soh/Enhancements/debugger/debugSaveEditor.cpp`, if we do a quick search within that file for time we will find the following at around line 217:
```cpp
const uint16_t dayTimeMin = 0;
const uint16_t dayTimeMax = 0xFFFF;
ImGui::SliderScalar("Time", ImGuiDataType_U16, &gSaveContext.dayTime, &dayTimeMin, &dayTimeMax);
SliderInt("Time", (int32_t*)&gSaveContext.dayTime, intSliderOptionsBase.Min(0).Max(0xFFFF).Tooltip("Time of day"));
if (Button("Dawn", buttonOptionsBase)) {
gSaveContext.dayTime = 0x4000;
}
ImGui::SameLine();
if (Button("Noon", buttonOptionsBase)) {
gSaveContext.dayTime = 0x8000;
}
ImGui::SameLine();
if (Button("Sunset", buttonOptionsBase)) {
gSaveContext.dayTime = 0xC001;
}
ImGui::SameLine();
if (Button("Midnight", buttonOptionsBase)) {
gSaveContext.dayTime = 0;
}
```
So this tells us that `gSaveContext.dayTime` is what we're looking for. Let's now do a global search for this to see if we can find where it is updated. We find the following in `soh/src/code/z_kankyo.c` line 925:
So this tells us that `gSaveContext.dayTime` is what we're looking for. Let's now do a global search for this to see if we can find where it is updated. We find the following in `soh/src/code/z_kankyo.c` around line 925:
```cpp
if (IS_DAY || gTimeIncrement >= 0x190) {
@@ -71,16 +84,19 @@ if (IS_DAY || gTimeIncrement >= 0x190) {
}
```
Rebuild the game and launch it, then load a save file. You should see that the time of day is now moving much faster. Terrific! While we could wrap this up and call it a day, we could make this user configurable by making a few more changes. I think a slider would be good for this, there's a slider in the cheat menu that we can use as a reference. Let's find it in `soh/soh/SohMenuBar.cpp` around line 1120:
Rebuild the game and launch it, then load a save file. You should see that the time of day is now moving much faster. Terrific! While we could wrap this up and call it a day, we could make this user configurable by making a few more changes. I think a slider would be good for this, there's a slider in the cheat menu that we can use as a reference. Let's find it in `soh/soh/SohGui/SohMenuEnhancements.cpp` around line 1565:
```cpp
UIWidgets::EnhancementSliderFloat("Hookshot Reach Multiplier: %.1fx", "##gCheatHookshotReachMultiplier", "gCheatHookshotReachMultiplier", 1.0f, 5.0f, "", 1.0f, false);
AddWidget(path, "Hookshot Reach Multiplier: %.2fx", WIDGET_CVAR_SLIDER_FLOAT)
.CVar(CVAR_CHEAT("HookshotReachMultiplier"))
.Options(FloatSliderOptions().Format("%.2f").Min(1.0f).Max(5.0f));
```
The float values being passed in here are `minimum`, `maximum`, and `default` respectively. We'll make our minimum 0.2 to allow it to move slower, and our maximum 5.0 to allow it to move up to 5x faster. We'll also set the default to 1.0 so that it doesn't change the behavior by default. Copy this line and paste it below, then make the relevant changes:
This adds a `Widget` which sets a CVar, which then sets the options of the slider. We'll make our minimum 0.2 to allow it to move slower, and our maximum 5.0 to allow it to move up to 5x faster. We'll also set the default to 1.0 so that it doesn't change the behavior by default. Copy this line and paste it below, then make the relevant changes:
```cpp
UIWidgets::EnhancementSliderFloat("Time Multiplier: %.1fx", "##gCheatTimeMultiplier", "gCheatTimeMultiplier", 0.2f, 5.0f, "", 1.0f, false);
AddWidget(path, "Time Multiplier: %.2fx", WIDGET_CVAR_SLIDER_FLOAT)
.CVar(CVAR_CHEAT("TimeOfDayMultiplier"))
.Options(FloatSliderOptions().Format("%.2f").Min(0.2f).Max(5.0f).DefaultValue(1.0f));
```
Now we need to replace our hard coded values with the new variable. We can do this by replacing the `10` with a cvar call
@@ -88,10 +104,10 @@ Now we need to replace our hard coded values with the new variable. We can do th
```diff
if (IS_DAY || gTimeIncrement >= 0x190) {
- gSaveContext.dayTime += gTimeIncrement * 10;
+ gSaveContext.dayTime += gTimeIncrement * CVarGetFloat("gCheatTimeMultiplier", 1.0f);
+ gSaveContext.dayTime += gTimeIncrement * CVarGetFloat(CVAR_CHEAT("TimeOfDayMultiplier"),1.0f);
} else {
- gSaveContext.dayTime += gTimeIncrement * 2 * 10;
+ gSaveContext.dayTime += gTimeIncrement * 2 * CVarGetFloat("gCheatTimeMultiplier", 1.0f);
+ gSaveContext.dayTime += gTimeIncrement * 2 * CVarGetFloat(CVAR_CHEAT("TimeOfDayMultiplier"),1.0f);
}
```

View File

@@ -1,5 +1,5 @@
## About Versions
The Ship of Harkinian's versioning system is a unique system, comprising of a three-numbered version (`x.y.z`) and a version codename. The main version number `x` signifies major feature updates that require a new `oot.otr` file. The version number `y` signifies major feature updates and bugfixes that do not require a new `oot.otr` file. The version number `z` signifies minor updates such as a collection of bugfixes.
The Ship of Harkinian's versioning system is a unique system, comprising of a three-numbered version (`x.y.z`) and a version codename. The main version number `x` signifies major feature updates that require a new `oot.o2r` file. The version number `y` signifies major feature updates and bugfixes that do not require a new `oot.o2r` file. The version number `z` signifies minor updates such as a collection of bugfixes.
The version codename consists of a sci-fi film character followed by a phonetic alphabet code word. The film character represents a major release version which increments with the major `x` or `y` version bumps. The code word represents a minor release version which increments with the minor `z` version bump.

954
lenguajes/Espanol.json Normal file
View File

@@ -0,0 +1,954 @@
{
"language": "Español",
"strings": {
"English": "Inglés",
"German": "Alemán",
"French": "Francés",
"Japanese": "Japonés",
"Red": "Rojo",
"Dark Red": "Rojo Oscuro",
"Orange": "Naranja",
"Green": "Verde",
"Dark Green": "Verde Oscuro",
"Light Blue": "Azul Claro",
"Blue": "Azul",
"Dark Blue": "Azul Oscuro",
"Indigo": "Índigo",
"Violet": "Violeta",
"Purple": "Púrpura",
"Brown": "Marrón",
"Gray": "Gris",
"Dark Gray": "Gris Oscuro",
"Three-Point": "Tres Puntos",
"Linear": "Lineal",
"None": "Ninguno",
"Trace": "Rastro",
"Debug": "Depuración",
"Info": "Información",
"Warn": "Advertencia",
"Error": "Error",
"Critical": "Crítico",
"Off": "Apagado",
"Top Left": "Superior Izquierda",
"Top Right": "Superior Derecha",
"Bottom Left": "Inferior Izquierda",
"Bottom Right": "Inferior Derecha",
"Hidden": "Oculto",
"Normal": "Normal",
"Unbreakable": "Inquebrantable",
"Unbreakable + Always on Fire": "Inquebrantable + Siempre en Llamas",
"Navi": "Navi",
"NPCs": "NPCs",
"All": "Todos",
"Disabled": "Desactivado",
"Junk Items": "Objetos Basura",
"All Items": "Todos los Objetos",
"Both": "Ambos",
"Texture Only": "Solo Textura",
"Size Only": "Solo Tamaño",
"Ocarina of Time": "Ocarina del Tiempo",
"Any Ocarina": "Cualquier Ocarina",
"Always": "Siempre",
"Once": "Una vez",
"Never": "Nunca",
"Vanilla (1x)": "Original (1x)",
"Double (2x)": "Doble (2x)",
"Quadruple (4x)": "Cuádruple (4x)",
"Octuple (8x)": "Óctuple (8x)",
"Foolish (16x)": "Absurdo (16x)",
"Ridiculous (32x)": "Ridículo (32x)",
"Merciless (64x)": "Cruel (64x)",
"Pure Torture (128x)": "Pura Tortura (128x)",
"OHKO (256x)": "KO (256x)",
"No Damage": "Sin Daño",
"0.25 Hearts": "0.25 Corazones",
"0.5 Hearts": "0.5 Corazones",
"1 Heart": "1 Corazón",
"2 Hearts": "2 Corazones",
"4 Hearts": "4 Corazones",
"8 Hearts": "8 Corazones",
"Only in Rando": "Solo en Rando",
"Child Toggle": "Cambiar Niño",
"Both Ages": "Ambas Edades",
"Consistent Vanish": "Desvanecer Consistente",
"No Vanish": "Sin Desvanecer",
"Random": "Aleatorio",
"Random (Seeded)": "Aleatorio (Semilla)",
"Dungeons": "Mazmorras",
"Dungeons (Vanilla)": "Mazmorras (Original)",
"Dungeons (MQ)": "Mazmorras (MQ)",
"Dungeons Random": "Mazmorras Aleatorio",
"Dungeons Random (Seeded)": "Mazmorras Aleatorio (Semilla)",
"Vanilla": "Original",
"Maxed": "Maximizado",
"Default": "Por Defecto",
"Authentic": "Auténtico",
"File Select": "Selección de Archivo",
"Vanilla Plus": "Original Plus",
"Enhanced": "Mejorado",
"Randomizer": "Randomizer",
"Small": "Pequeño",
"Large": "Grande",
"X-Large": "Extra Grande",
"NTSC 1.0": "NTSC 1.0",
"NTSC 1.1": "NTSC 1.1",
"NTSC 1.2": "NTSC 1.2",
"NTSC-U GC": "NTSC-U GC",
"NTSC-J GC": "NTSC-J GC",
"NTSC-J GC (Collector's Edition)": "NTSC-J GC (Edición Coleccionista)",
"NTSC-U MQ": "NTSC-U MQ",
"NTSC-J MQ": "NTSC-J MQ",
"PAL 1.0": "PAL 1.0",
"PAL 1.1": "PAL 1.1",
"PAL GC": "PAL GC",
"PAL MQ": "PAL MQ",
"PAL GC-D": "PAL GC-D",
"PAL MQ-D": "PAL MQ-D",
"IQUE CN": "IQUE CN",
"IQUE TW": "IQUE TW",
"UNKNOWN": "DESCONOCIDO",
"Changes the Theme of the Menu Widgets.": "Cambia el tema de los widgets del menú.",
"Allows controller navigation of the port menu": "Permite navegación con controlador del menú de puertos",
"CAUTION: This will disable game inputs while the menu is visible.": "ADVERTENCIA: Esto deshabilitará las entradas del juego mientras el menú sea visible.",
"D-pad to move between items, A to select, B to move up in scope.": "D-pad para mover entre elementos, A para seleccionar, B para subir.",
"Sets the opacity of the background of the port menu.": "Establece la opacidad del fondo del menú de puertos.",
"Makes the cursor always visible, even in full screen.": "Hace el cursor siempre visible, incluso en pantalla completa.",
"Displays the Search menu as a sidebar entry in Settings instead of in the header.": "Muestra el menú de búsqueda como entrada lateral en Configuración.",
"Search input box gets autofocus when visible.": "La caja de búsqueda obtiene enfoque automático cuando es visible.",
"Allows pressing the Tab key to toggle alternate assets": "Permite presionar Tab para alternar assets alternativos",
"Opens the folder that contains the save and mods folders, etc.": "Abre la carpeta que contiene guardados y mods.",
"Configure what happens when starting or resetting the game.": "Configura qué sucede al iniciar o reiniciar el juego.",
"Default: LUS logo -> N64 logo": "Por defecto: Logo LUS -> Logo N64",
"Authentic: N64 logo only": "Auténtico: Solo logo N64",
"File Select: Skip to file select menu": "Selección de Archivo: Saltar al menú de selección",
"Enables text to speech for in game dialog": "Habilita texto a voz para diálogos del juego",
"Disables the automatic re-centering of the camera when idle.": "Deshabilita el recentrado automático de la cámara.",
"EXPERIMENTAL": "EXPERIMENTAL",
"Changes the scaling of the ImGui menu elements.": "Cambia la escala de los elementos del menú ImGui.",
"Ship Of Harkinian": "Ship Of Harkinian",
"Branch": "Rama",
"Commit": "Commit",
"Master Volume: %d %%": "Volumen Principal: %d %%",
"Main Music Volume: %d %%": "Volumen de Música Principal: %d %%",
"Sub Music Volume: %d %%": "Volumen de Música Secundaria: %d %%",
"Fanfare Volume: %d %%": "Volumen de Fanfarria: %d %%",
"Sound Effects Volume: %d %%": "Volumen de Efectos de Sonido: %d %%",
"Audio API (Needs reload)": "API de Audio (Necesita recargar)",
"Uses Matrix Interpolation to create extra frames": "Usa Interpolación de Matrices para crear cuadros extra",
"Toggles Fullscreen On/Off.": "Alternar Pantalla Completa.",
"Multiplies your output resolution by the value inputted": "Multiplica tu resolución de salida por el valor introducido",
"Activates MSAA (multi-sample anti-aliasing) from 2x up to 8x": "Activa MSAA (antialiasing multiamuestra) de 2x hasta 8x",
"Original (%d)": "Original (%d)",
"Match interpolation value to the refresh rate of your display.": "Coincidir valor de interpolación con tasa de refresco.",
"Renderer API (Needs reload)": "API del Renderizador (Necesita recargar)",
"Removes tearing, but clamps your max FPS to your displays refresh rate.": "Elimina tearing, pero limita FPS máximos.",
"Enables Windowed Fullscreen Mode.": "Habilita Modo Ventana Pantalla Completa.",
"Allows multiple windows to be opened at once.": "Permite múltiples ventanas a la vez.",
"Sets the applied Texture Filtering.": "Establece el filtro de textura aplicado.",
"Advanced Graphics Options": "Opciones Avanzadas de Gráficos",
"Controller Bindings": "Botones del Controlador",
"Enables the separate Bindings Window.": "Habilita la ventana de botones separada.",
"Input Viewer": "Visor de Entrada",
"Toggles the Input Viewer.": "Alterna el visor de entrada.",
"Input Viewer Settings": "Configuración del Visor de Entrada",
"Which corner of the screen notifications appear in.": "En qué esquina aparecen las notificaciones.",
"Duration (seconds):": "Duración (segundos):",
"How long notifications are displayed for.": "Cuánto tiempo se muestran las notificaciones.",
"Background Opacity": "Opacidad del Fondo",
"How opaque the background of notifications is.": "Qué tan opaco es el fondo de notificaciones.",
"Size:": "Tamaño:",
"How large notifications are.": "Qué tan grandes son las notificaciones.",
"Test Notification": "Probar Notificación",
"This is a test.": "Esto es una prueba.",
"Displays a test notification.": "Muestra una notificación de prueba.",
"Quality of Life": "Calidad de Vida",
"Saving": "Guardado",
"Save the game automatically on a 3 minute interval": "Guardar automáticamente cada 3 minutos",
"When loading a save, places Link at the last entrance": "Al cargar, coloca a Link en la última entrada",
"Containers Match Contents": "Contenedores equal Contenido",
"Chests of Agony": "Cofres de Agonía",
"Time of Day": "Hora del Día",
"Nighttime GS Always Spawn": "GS Nocturno Siempre Aparece",
"Pull Grave During the Day": "Tumbar de Día",
"Dampe Appears All Night": "Dampe Aparece Toda la Noche",
"Exit Market at Night": "Salir del Mercado de Noche",
"Shops and Games Always Open": "Tiendas y Juegos Siempre Abiertos",
"Pause Menu": "Menú de Pausa",
"Allow the Cursor to be on Any Slot": "Permitir Cursor en Cualquier Ranura",
"Pause Warp": "Teletransporte de Pausa",
"Controls": "Controles",
"Answer Navi Prompt with L Button": "Responder a Navi con Botón L",
"Don't Require Input for Credits Sequence": "No Requerir Input para Secuencia de Créditos",
"Include Held Inputs at the Start of Pause Buffer Input Window": "Incluir Inputs Sostenidos al Inicio de Ventana de Pausa",
"Pause Buffer Input Window: %d frames": "Ventana de Input de Pausa: %d cuadros",
"Simulated Input Lag: %d frames": "Lag de Input Simulado: %d cuadros",
"Item Count Messages": "Mensajes de Cantidad de Objetos",
"Gold Skulltula Tokens": "Tokens de Gold Skulltula",
"Pieces of Heart": "Piezas de Corazón",
"Heart Containers": "Contenedores de Corazón",
"Misc": "Varios",
"Disable Crit Wiggle": "Desactivar Crítico",
"Better Owl": "Mejor Búho",
"Quit Fishing at Door": "Salir de Pescar en Puerta",
"Instant Putaway": "Guardar Instantáneo",
"Navi Timer Resets on Scene Change": "Temporizador de Navi Resetea al Cambiar Escena",
"Link's Cow in Both Time Periods": "Vaca de Link en Ambos Períodos",
"Play Zelda's Lullaby to Open Sleeping Waterfall": "Tocar Canción de Zelda para Abrir Cascada Dormida",
"Skips & Speed-ups": "Saltos y Aceleraciones",
"Cutscenes": "Cinematicas",
"Skip Intro": "Saltar Introducción",
"Skip Entrance Cutscenes": "Saltar Cinemáticas de Entrada",
"Skip Story Cutscenes": "Saltar Cinemáticas de Historia",
"Skip Song Cutscenes": "Saltar Cinemáticas de Canciones",
"Skip Boss Introductions": "Saltar Introducciones de Jefes",
"Quick Boss Deaths": "Muertes Rápidas de Jefes",
"Skip One Point Cutscenes": "Saltar Cinemáticas de Un Punto",
"Skip Owl Interactions": "Saltar Interacciones del Búho",
"Skip Misc Interactions": "Saltar Interacciones Varias",
"Disable Title Card": "Desactivar Tarjeta de Título",
"Exclude Glitch-Aiding Cutscenes": "Excluir Cinemáticas de Glitch",
"Text": "Texto",
"Skip Pickup Messages": "Saltar Mensajes de Recolección",
"Skip Forced Dialog": "Saltar Diálogo Forzado",
"Skip Text": "Saltar Texto",
"Text Speed: %dx": "Velocidad de Texto: %dx",
"Slow Text Speed: %dx": "Velocidad de Texto Lento: %dx",
"Animations": "Animaciones",
"Faster Heavy Block Lift": "Levantar Bloque Pesado Más Rápido",
"Fast Chests": "Cofres Rápidos",
"Skip Water Take Breath Animation": "Saltar Animación de Respirar Bajo Agua",
"Vine/Ladder Climb Speed +%d": "Velocidad de Escalar Enredadera/Escalera +%d",
"Block Pushing Speed +%d": "Velocidad de Empujar Bloques +%d",
"Crawl Speed %dx": "Velocidad de Arrastre %dx",
"King Zra Speed: %.2fx": "Velocidad de Rey Zora: %.2fx",
"Skip Child Stealth": "Saltar Sigilo de Niño",
"Skip Tower Escape": "Saltar Escape de Torre",
"Skip Scarecrow's Song": "Saltar Canción del Espantapájaros",
"Faster Rupee Accumulator": "Acumulador de Rupias Más Rápido",
"No Skulltula Freeze": "Sin Congelamiento de Skulltula",
"Skip Save Confirmation": "Saltar Confirmación de Guardado",
"Link as Default File Name": "Link como Nombre de Archivo por Defecto",
"Biggoron Forge Time: %d days": "Tiempo de Forja de Biggoron: %d días",
"Mods": "Mods",
"Use Alternate Assets": "Usar Assets Alternativos",
"Disable Bomb Billboarding": "Desactivar Billboard de Bombas",
"Disable Grotto Fixed Rotation": "Desactivar Rotación Fija de Grotto",
"Ingame Text Spacing: %d": "Espaciado de Texto en Juego: %d",
"Models & Textures": "Modelos y Texturas",
"Disable LOD": "Desactivar LOD",
"Enemy Health Bars": "Barras de Salud de Enemigos",
"Enable 3D Dropped Items/Projectiles": "Habilitar Objetos 3D Lanzados",
"Animated Link in Pause Menu": "Link Animado en Menú de Pausa",
"Show Age-Dependent Equipment": "Mostrar Equipo Dependiente de Edad",
"Scale Adult Equipment as Child": "Escalar Equipo de Adulto como Niño",
"Show Gauntlets in First Person": "Mostrar Guanteletes en Primera Persona",
"Show Chains on Both Sides of Locked Doors": "Mostrar Cadenas en Ambos Lados de Puertas Cerradas",
"Color Temple of Time's Medallions": "Colorear Medallones del Templo del Tiempo",
"UI": "Interfaz",
"Minimal UI": "Interfaz Mínima",
"Disable Hot/Underwater Warning Text": "Desactivar Texto de Advertencia Calor/Submarino",
"Remember Minimap State Between Areas": "Recordar Estado del Minimapa Entre Áreas",
"Visual Stone of Agony": "Piedra Visual de Agonía",
"Disable HUD Heart Animations": "Desactivar Animaciones de Corazones HUD",
"Glitch Line-up Tick": "Ticks de Alineación de Glitch",
"Disable Black Bar Letterboxes": "Desactivar Carteleras Negras",
"Dynamic Wallet Icon": "Icono de Billetera Dinámico",
"Always Show Dungeon Entrances": "Siempre Mostrar Entradas de Mazmorras",
"More Info in File Select": "Más Info en Selección de Archivo",
"Better Ammo Rendering in Pause Menu": "Mejor Renderizado de Munición en Pausa",
"Enable Passage of Time on File Select": "Habilitar Paso del Tiempo en Selección",
"Misc.": "Varios",
"N64 Mode": "Modo N64",
"Remove Spin Attack Darkness": "Remover Oscuridad de Ataque Giratorio",
"Draw Distance": "Distancia de Dibujo",
"Increase Actor Draw Distance: %dx": "Aumentar Distancia de Dibujo de Actores: %dx",
"Kokiri Draw Distance": "Distancia de Dibujo Kokiri",
"Widescreen Actor Culling": "Culling de Actores Widescreen",
"Cull Glitch Useful Actors": "Culling de Actores Útiles para Glitch",
"Items": "Objetos",
"Equipment": "Equipo",
"Equip Items on Dpad": "Equipar Objetos en Dpad",
"Assignable Tunics and Boots": "Túnicas y Botas Asignables",
"Equipment Toggle": "Alternar Equipo",
"Allow Strength Equipment to be Toggled": "Permitir Alternar Equipo de Fuerza",
"Sword Toggle Options": "Opciones de Alternar Espada",
"Ask to Equip New Items": "Preguntar para Equipar Nuevos Objetos",
"Ocarina": "Ocarina",
"Prevent Dropped Ocarina Inputs": "Prevenir Inputs de Ocarina Suelta",
"Fast Ocarina Playback": "Reproducción Rápida de Ocarina",
"Time Travel with Song of Time": "Viajar en el Tiempo con Canción del Tiempo",
"Masks": "Máscaras",
"Bunny Hood Effect": "Efecto de Máscara de Conejo",
"Masks Equippable as Adult": "Máscaras Equipables como Adulto",
"Persistent Masks": "Máscaras Persistentes",
"Invisible Bunny Hood": "Máscara de Conejo Invisible",
"Mask Select in Inventory": "Selección de Máscara en Inventario",
"Explosives": "Explosivos",
"Deku Nuts Explode Bombs": "Nueces Deku Explotan Bombas",
"Remove Explosive Limit": "Remover Límite de Explosivos",
"Static Explosion Radius": "Radio de Explosión Estático",
"Prevent Bombchus Forcing First-Person": "Prevenir Bombchus Forzando Primera Persona",
"Better Bombchu Shopping": "Mejor Compra de Bombchus",
"Bow / Slingshot": "Arco/Honda",
"Equip Multiple Arrows at Once": "Equipar Múltiples Flechas a la Vez",
"Skip Magic Arrow Equip Animation": "Saltar Animación de Equipar Flecha Mágica",
"Blue Fire Arrows": "Flechas de Fuego Azul",
"Sunlight Arrows": "Flechas de Luz Solar",
"Bow as Child/Slingshot as Adult": "Arco como Niño/Honda como Adulto",
"Aiming Reticle for the Bow/Slingshot": "Retícula de Puntería para Arco/Honda",
"Hookshot": "Gancho",
"Targetable Hookshot Reticle": "Retícula de Gancho Dirigible",
"Boomerang": "Bumerang",
"Instant Boomerang Recall": "Retorno Instantáneo de Bumerang",
"Aim Boomerang in First-Person Mode": "Apuntar Bumerang en Modo Primera Persona",
"Aiming Reticle for Boomerang": "Retícula de Puntería para Bumerang",
"Magic Spells": "Hechizos",
"Better Farore's Wind": "Mejor Viento de Farore",
"Faster Farore's Wind": "Viento de Farore Más Rápido",
"Fixes": "Arreglos",
"Gameplay Fixes": "Arreglos de Jugabilidad",
"Fix the Gravedigging Tour Glitch": "Arreglar Glitch de Excursión de Excavación",
"Fix Raised Floor Switches": "Arreglar Interruptores de Piso Elevado",
"Popout Randomizer Settings Window": "Abrir Ventana de Configuración de Randomizer",
"Randomizer Settings": "Configuración de Randomizer",
"Enables the separate Randomizer Settings Window.": "Habilita la ventana separada de configuración de Randomizer.",
"Randomizer Enhancements": "Mejoras de Randomizer",
"Rando-Relevant Navi Hints": "Pistas de Navi Relevantes para Rando",
"Random Rupee Names": "Nombres Aleatorios de Rupias",
"Use Custom Key Models": "Usar Modelos de Llaves Personalizados",
"Map & Compass Colors Match Dungeon": "Colores de Mapa y Brújula igual a Mazmorra",
"Quest Item Fanfares": "Fanfarrias de Objetos de Misión",
"Mysterious Shuffled Items": "Objetos Mezclados Misteriosos",
"Simpler Boss Soul Models": "Modelos de Almas de Jefe Simples",
"Skip Get Item Animations": "Saltar Animaciones de Obtener Objeto",
"Item Scale: %.2f": "Escala de Objeto: %.2f",
"Popout Plandomizer Window": "Abrir Ventana de Plandomizer",
"Plandomizer Editor": "Editor de Plandomizer",
"Item Tracker": "Rastreador de Objetos",
"Toggle Item Tracker": "Alternar Rastreador de Objetos",
"Item Tracker Settings": "Configuración de Rastreador de Objetos",
"Popout Item Tracker Settings": "Abrir Configuración de Rastreador de Objetos",
"Entrance Tracker": "Rastreador de Entradas",
"Toggle Entrance Tracker": "Alternar Rastreador de Entradas",
"Entrance Tracker Settings": "Configuración de Rastreador de Entradas",
"Popout Entrance Tracker Settings": "Abrir Configuración de Rastreador de Entradas",
"Check Tracker": "Rastreador de Checks",
"Toggle Check Tracker": "Alternar Rastreador de Checks",
"Check Tracker Settings": "Configuración de Rastreador de Checks",
"Popout Check Tracker Settings": "Abrir Configuración de Rastreador de Checks",
"Popout Menu": "Abrir Menú",
"Debug Mode": "Modo Depuración",
"OoT Registry Editor": "Editor de Registro de OoT",
"Debug Save File Mode": "Modo de Archivo de Guardado de Depuración",
"OoT Skulltula Debug": "Depuración de Skulltula de OoT",
"Better Debug Warp Screen": "Mejor Pantalla de Teletransporte de Depuración",
"Debug Warp Screen Translation": "Traducción de Pantalla de Teletransporte",
"Resource logging": "Registro de Recursos",
"Frame Advance": "Avance de Cuadro",
"Advance 1": "Avanzar 1",
"Advance (Hold)": "Avanzar (Mantener)",
"Popout Stats Window": "Abrir Ventana de Estadísticas",
"Stats": "Estadísticas",
"Popout Console": "Abrir Consola",
"Console": "Consola",
"Popout Save Editor": "Abrir Editor de Guardado",
"Save Editor": "Editor de Guardado",
"Popout Hook Debugger": "Abrir Depurador de Hooks",
"Hook Debugger": "Depurador de Hooks",
"Popout Collision Viewer": "Abrir Visor de Colisiones",
"Collision Viewer": "Visor de Colisiones",
"Popout Actor Viewer": "Abrir Visor de Actores",
"Actor Viewer": "Visor de Actores",
"Popout Display List Viewer": "Abrir Visor de Lista de Display",
"Display List Viewer": "Visor de Lista de Display",
"Popout Value Viewer": "Abrir Visor de Valores",
"Value Viewer": "Visor de Valores",
"Popout Message Viewer": "Abrir Visor de Mensajes",
"Message Viewer": "Visor de Mensajes",
"Popout Gfx Debugger": "Abrir Depurador de Gráficos",
"Gfx Debugger": "Depurador de Gráficos",
"DirectX": "DirectX",
"OpenGL": "OpenGL",
"Metal": "Metal",
"Resolution Presets": "Preajustes de Resolución",
"Custom": "Personalizado",
"Original (4:3)": "Original (4:3)",
"Widescreen (16:9)": "Pantalla Amplia (16:9)",
"Nintendo 3DS (5:3)": "Nintendo 3DS (5:3)",
"16:10 (8:5)": "16:10 (8:5)",
"Ultrawide (21:9)": "Ultrawide (21:9)",
"Pixel Count Presets": "Preajustes de Cantidad de Píxeles",
"Native N64 (240p)": "Nativo N64 (240p)",
"2x (480p)": "2x (480p)",
"3x (720p)": "3x (720p)",
"4x (960p)": "4x (960p)",
"5x (1200p)": "5x (1200p)",
"6x (1440p)": "6x (1440p)",
"Full HD (1080p)": "Full HD (1080p)",
"4K (2160p)": "4K (2160p)",
"Set fixed vertical resolution": "Establecer resolución vertical fija",
"Horiz. Pixel Count": "Cantidad de Píxeles Horiz.",
"Force aspect ratio": "Forzar proporción de aspecto",
"Click to resolve": "Clic para resolver",
"Vertical Pixel Count": "Cantidad de Píxeles Vertical",
"Integer Scaling Settings": "Configuración de Escala Entera",
"Pixel Perfect Mode": "Modo Pixel Perfecto",
"Integer scale factor: {}": "Factor de escala entera: {}",
"Window exceeded.": "Ventana excedida.",
"Automatically scale image to fit viewport": "Escalar automáticamente imagen para ajustar",
"Additional Settings": "Configuración Adicional",
"If the image is stretched and you don't know why, click this.": "Si la imagen está estirada y no sabes por qué, haz clic.",
"Click to reenable aspect correction.": "Clic para rehabilitar corrección de aspecto.",
"Show a horizontal resolution field": "Mostrar campo de resolución horizontal",
"Allow integer scale factor to go +1 above maximum screen bounds.": "Permitir factor de escala entera +1 arriba del máximo.",
"A scroll bar may become visible if screen bounds are exceeded.": "Barra de desplazamiento puede aparecer.",
"Click to reset a console variable that may be causing this.": "Clic para reiniciar variable.",
"Viewport dimensions: {} x {}": "Dimensiones de viewport: {} x {}",
"Internal resolution: {} x {}": "Resolución interna: {} x {}",
"Enable advanced settings.": "Habilitar configuración avanzada.",
"Significant frame rate (FPS) drops may be occuring.": "Caídas significativas de FPS pueden estar ocurriendo.",
"N64 Mode is overriding these settings.": "Modo N64 está sobrescribiendo estas configuraciones.",
"Click to disable N64 mode": "Clic para desactivar modo N64",
"Aspect Ratio": "Proporción de Aspecto",
"Disabling VSync not supported": "Desactivar VSync no soportado",
"Windowed Fullscreen not supported": "Pantalla Completa en Ventana no soportada",
"Multi-viewports not supported": "Multi-viewports no soportado",
"Available Only on DirectX": "Solo Disponible en DirectX",
"Not Available on DirectX": "No Disponible en DirectX",
"Match Refresh Rate is Enabled": "Coincidir Tasa de Refresco está Habilitado",
"Advanced Resolution Enabled": "Resolución Avanzada Habilitada",
"Vertical Resolution Toggle Enabled": "Alternar Resolución Vertical Habilitado",
"N64 Mode Enabled": "Modo N64 Habilitado",
"Save Not Loaded": "Guardado No Cargado",
"Debug Mode is Disabled": "Modo Depuración está Desactivado",
"Frame Advance is Disabled": "Avance de Cuadro está Desactivado",
"Advanced Resolution is Disabled": "Resolución Avanzada está Desactivada",
"Vertical Resolution Toggle is Off": "Alternar Resolución Vertical está Apagado",
"A Wallmaster follows Link everywhere, don't get caught!": "¡Un Wallmaster sigue a Link a todas partes, no te dejes atrapar!",
"About": "Acerca de",
"About Crowd Control": "Acerca de Crowd Control",
"Accessibility": "Accesibilidad",
"Activates MSAA (multi-sample anti-aliasing) from 2x up to 8x, to smooth the edges of": "Activa MSAA (antialiasing multiamuestra) de 2x hasta 8x, para suavizar los bordes de",
"Additional Traps": "Trampas Adicionales",
"Adds a prompt to equip newly-obtained Swords, Shields, and Tunics.": "Agrega un aviso para equipar Espadas, Escudos y Túnicas recién obtenidas.",
"Adds back in a delay after unpausing before the game resumes playing again,": "Agrega un retraso después de despausar antes de que el juego se reanude,",
"Adjust the number of notes the Skull Kids play to start the first round.": "Ajusta el número de notas que tocan los Skull Kids para iniciar la primera ronda.",
"Adjust the number of notes you need to play to end the first round.": "Ajusta el número de notas que debes tocar para terminar la primera ronda.",
"Adjust the number of notes you need to play to end the second round.": "Ajusta el número de notas que debes tocar para terminar la segunda ronda.",
"Adjust the number of notes you need to play to end the third round.": "Ajusta el número de notas que debes tocar para terminar la tercera ronda.",
"Adjusts rate Dampe drops flames during race.": "Ajusta la velocidad a la que Dampe lanza llamas durante la carrera.",
"Adjusts the Horizontal Culling Plane to account for Widescreen Resolutions.": "Ajusta el Plano de Recorte Horizontal para tener en cuenta Resoluciones Panorámicas.",
"Adult Minimum Weight: %d lbs.": "Peso Mínimo Adulto: %d lbs.",
"Adult Starting Ammunition: %d arrows": "Munición Inicial Adulto: %d flechas",
"Advance 1 frame.": "Avanzar 1 cuadro.",
"Advance frames while the button is held.": "Avanzar cuadros mientras se mantiene el botón.",
"Aiming with a Bow or Slingshot will display a reticle as with the Hookshot": "Apuntar con Arco o Honda mostrará una retícula como con el Gancho",
"Aiming with the Boomerang will display a reticle as with the Hookshot.": "Apuntar con el Bumerán mostrará una retícula como con el Gancho.",
"All Dogs are Richard": "Todos los Perros son Richard",
"All Fish are Hyrule Loaches": "Todos los Peces son Lochas de Hyrule",
"All Major Bosses move and act twice as fast.": "Todos los Jefes Mayores se mueven y actúan el doble de rápido.",
"All Regular Enemies and Mini-Bosses move and act twice as fast.": "Todos los Enemigos Regulares y Mini-Jefes se mueven y actúan el doble de rápido.",
"All dogs can be traded in and will count as Richard.": "Todos los perros pueden ser intercambiados y contarán como Richard.",
"All fish will be caught instantly.": "Todos los peces se atrapan instantáneamente.",
"All##Skips": "Todos##Saltos",
"Allow Link to enter Jabu-Jabu without feeding him a fish.": "Permitir que Link entre a Jabu-Jabu sin alimentarlo con un pez.",
"Allow Link to put items away without having to wait around.": "Permitir que Link guarde objetos sin tener que esperar.",
"Allow background inputs": "Permitir entradas de fondo",
"Allow multi-windows": "Permitir múltiples ventanas",
"Allow unequipping Items": "Permitir Desequipar Objetos",
"Allows Bombchus to explode out of bounds. Similar to GameCube and Wii VC.": "Permite que las Bombchus exploten fuera de límites. Similar a GameCube y Wii VC.",
"Allows Child Link to use a Bow with Arrows.\n": "Permite que Link Niño use un Arco con Flechas.\n",
"Allows Link to bounce off walls when linear velocity is high enough, this is": "Permite que Link rebote en paredes cuando la velocidad lineal es suficientemente alta, esto es",
"Allows Link to freely change age by playing the Song of Time.\n": "Permite que Link cambie de edad libremente tocando la Canción del Tiempo.\n",
"Allows Link to unsheathe sword without slashing automatically.": "Permite que Link desenvaine la espada sin cortar automáticamente.",
"Allows Z-Targeting Gold Skulltulas.": "Permite Apuntar a las Gold Skulltulas.",
"Allows any item to be equipped, regardless of age.\n": "Permite equipar cualquier objeto, sin importar la edad.\n",
"Allows controller inputs to be picked up by the game even when the game window isn't": "Permite que el juego capture entradas del controlador incluso cuando la ventana del juego no está",
"Allows dogs to follow you anywhere you go, even if you leave the Market.": "Permite que los perros te sigan a donde vayas, incluso si sales del Mercado.",
"Allows equipping Shields, Tunics and Boots to C-Buttons/D-pad.": "Permite equipar Escudos, Túnicas y Botas a los Botones-C/D-pad.",
"Allows graves to be pulled when child during the day.": "Permite tumbar lápidas siendo niño durante el día.",
"Allows masks to be equipped normally from the pause menu as adult.": "Permite que las máscaras se equipen normalmente desde el menú de pausa como adulto.",
"Allows multiple windows to be opened at once. Requires a reload to take effect.": "Permite abrir múltiples ventanas a la vez. Requiere recargar para tener efecto.",
"Allows the cursor on the pause menu to be over any slot. Sometimes required in Randomizer": "Permite que el cursor del menú de pausa esté sobre cualquier ranura. A veces requerido en Randomizer",
"Allows unequipping items from C-Buttons/D-pad by hovering over an equipped": "Permite desequipar objetos de los Botones-C/d-pad pasando el cursor sobre un equipado",
"Allows you to control a Bombchu after dropping it.\n": "Permite controlar una Bombchu después de soltarla.\n",
"Allows you to have \"Link\" as a premade file name.": "Permite tener \"Link\" como nombre de archivo predeterminado.",
"Allows you to use any item at any location": "Permite usar cualquier objeto en cualquier ubicación",
"Allows you to walk through walls.": "Permite caminar a través de paredes.",
"Always Win Dampe Digging Game": "Ganar Siempre Juego de Excavación de Dampe",
"Always Win Goron Pot": "Ganar Siempre Olla Goron",
"Always get the Heart Piece/Purple Rupee from the Spinning Goron Pot.": "Obtener siempre la Pieza de Corazón/Rupia Púrpura de la Olla Giratoria Goron.",
"Always shows dungeon entrance icons on the Minimap.": "Siempre muestra iconos de entrada de mazmorras en el Minimapa.",
"Ammo": "Munición",
"Ammo Traps": "Trampas de Munición",
"Amy's block pushing puzzle instantly solved.": "Puzzle de empujar bloques de Amy resuelto instantáneamente.",
"Anti-aliasing (MSAA)": "Antialiasing (MSAA)",
"Any Ocarina + Master Sword": "Cualquier Ocarina + Espada Maestra",
"Arrow Cycle": "Ciclo de Flechas",
"Assignable Shields, Tunics and Boots": "Escudos, Túnicas y Botas Asignables",
"Audio": "Audio",
"Audio Fixes": "Arreglos de Audio",
"Autosave": "Autoguardado",
"Be sure to explore the Presets and Enhancements Menus for various Speedups and Quality of life changes!": "¡Asegúrate de explorar los menús de Preajustes y Mejoras para varias aceleraciones y cambios de calidad de vida!",
"Beta Quest": "Misión Beta",
"Beta Quest World: %d": "Mundo de Misión Beta: %d",
"Blue Fire dropped from bottle can be bottled.": "Fuego Azul derramado de botella puede ser embotellado.",
"Bomb Timer Multiplier: %.2fx": "Multiplicador de Temporizador de Bomba: %.2fx",
"Bomb Traps": "Trampas de Bomba",
"Bombchu Bowling": "Bolos de Bombchu",
"Bombchu Count: %d bombchus": "Cantidad de Bombchus: %d bombchus",
"Bombchus Out of Bounds": "Bombchus Fuera de Límites",
"Bombchus do not sell out when bought, and a 10 pack of Bombchus costs 99 rupees": "Las Bombchus no se agotan al comprarlas, y un paquete de 10 cuesta 99 rupias",
"Bombchus will sometimes drop in place of Bombs.": "Las Bombchus a veces caerán en lugar de Bombas.",
"Bonk Damage Multiplier": "Multiplicador de Daño por Golpe",
"Boot": "Inicio",
"Boot Sequence": "Secuencia de Inicio",
"Bottles": "Botellas",
"Bounce off Walls": "Rebotar en Paredes",
"Buffers your inputs to be executed a specified amount of frames later.": "Almacena tus entradas para ser ejecutadas una cantidad específica de cuadros después.",
"Bugs don't Despawn": "Los Bichos no Desaparecen",
"Burn Traps": "Trampas de Quemadura",
"Button Combination:": "Combinación de Botones:",
"Buttons that activate Speed Modifier 1.\n\n": "Botones que activan el Modificador de Velocidad 1.\n\n",
"Buttons to activate target switching.": "Botones para activar cambio de objetivo.",
"Camera Fixes": "Arreglos de Cámara",
"Cancel": "Cancelar",
"Causes your Wallet to fill and empty faster when you gain or lose money.": "Hace que tu Billetera se llene y vacíe más rápido al ganar o perder dinero.",
"Change Age": "Cambiar Edad",
"Changes Heart Piece and Heart Container functionality.\n\n": "Cambia la funcionalidad de Piezas de Corazón y Contenedores de Corazón.\n\n",
"Changes the behavior of debug file select creation (creating a save file on slot 1": "Cambia el comportamiento de creación de archivo de depuración (crear un archivo en la ranura 1",
"Changes the menu display from overlay to windowed.": "Cambia la visualización del menú de superpuesto a ventana.",
"Child Minimum Weight: %d lbs.": "Peso Mínimo Niño: %d lbs.",
"Child Starting Ammunition: %d seeds": "Munición Inicial Niño: %d semillas",
"Clear": "Limpiar",
"Clear Config": "Limpiar Configuración",
"Clear Cutscene Pointer": "Limpiar Puntero de Cinemática",
"Clear Devices": "Limpiar Dispositivos",
"Clears the cutscene pointer to a value safe for wrong warps.": "Limpia el puntero de cinemática a un valor seguro para wrong warps.",
"Climb Everything": "Escalar Todo",
"Configure what happens when starting or resetting the game.\n\n": "Configura qué sucede al iniciar o reiniciar el juego.\n\n",
"Connect to Crowd Control": "Conectar a Crowd Control",
"Connecting...": "Conectando...",
"Connecting...##Sail": "Conectando...##Sail",
"Containers of Agony": "Contenedores de Agonía",
"Convenience": "Conveniencia",
"Correctly centers the Navi text prompt on the HUD's C-Up button.": "Centra correctamente el aviso de texto de Navi en el botón C-Arriba del HUD.",
"Creates a new random seed value to be used when generating a randomizer": "Crea un nuevo valor de semilla aleatoria para usar al generar un randomizer",
"Crowd Control is a platform that allows viewers to interact": "Crowd Control es una plataforma que permite a los espectadores interactuar",
"Cuccos Needed By Anju: %d": "Cuccos Necesarios por Anju: %d",
"Cuccos Stay Put Multiplier: %dx": "Multiplicador de Cuccos Quietos: %dx",
"Current FPS": "FPS Actuales",
"Cursor Always Visible": "Cursor Siempre Visible",
"Customize Behavior##Bowling": "Personalizar Comportamiento##Bolos",
"Customize Behavior##Fishing": "Personalizar Comportamiento##Pesca",
"Customize Behavior##Frogs": "Personalizar Comportamiento##Ranas",
"Customize Behavior##LostWoods": "Personalizar Comportamiento##BosquePerdido",
"Customize Behavior##Shooting": "Personalizar Comportamiento##Tiro",
"Damage Multiplier": "Multiplicador de Daño",
"Dampe Drop Rate": "Tasa de Caída de Dampe",
"Dampe's Inferno": "Infierno de Dampe",
"Death Traps": "Trampas de Muerte",
"Debug Warp Screen": "Pantalla de Teletransporte Debug",
"Deku Sticks:": "Palos Deku:",
"Delete File on Death": "Eliminar Archivo al Morir",
"Despawn Timers": "Temporizadores de Desaparición",
"Desync Fixes": "Arreglos de Desincronización",
"Dev Tools": "Htas. Desarrollo",
"Disable 2D Pre-Rendered Scenes": "Desactivar Escenas Pre-renderizadas 2D",
"Disable Fixed Camera": "Desactivar Cámara Fija",
"Disable Haunted Wasteland Sandstorm": "Desactivar Tormenta de Arena del Páramo",
"Disable Idle Camera Re-Centering": "Desactivar Recentrado de Cámara en Reposo",
"Disable Jabu Wobble": "Desactivar Bamboleo de Jabu",
"Disable Kokiri Fade": "Desactivar Desvanecimiento Kokiri",
"Disable Link Spinning With Goron Pot": "Desactivar Giro de Link con Olla Goron",
"Disable Link's Sword Trail": "Desactivar Estela de Espada de Link",
"Disable Random Camera Wiggle at Low Health.": "Desactivar Movimiento Aleatorio de Cámara con Poca Salud.",
"Disable Screen Flash for Finishing Blow": "Desactivar Flash de Pantalla para Golpe Final",
"Disable the geometry wobble and camera distortion inside Jabu.": "Desactivar el bamboleo de geometría y distorsión de cámara dentro de Jabu.",
"Disabled: Paths vanish more the higher the resolution (Z-Fighting is based on resolution).\n": "Desactivado: Los caminos desaparecen más cuanto mayor es la resolución (Z-Fighting depende de la resolución).\n",
"Disables 2D pre-rendered backgrounds. Enable this when using a mod that": "Desactiva fondos pre-renderizados 2D. Habilita esto al usar un mod que",
"Disables Random Drops, except from the Goron Pot, Dampe, and Bosses.": "Desactiva Caídas Aleatorias, excepto de la Olla Goron, Dampe y Jefes.",
"Disables sandstorm effect in Haunted Wasteland.": "Desactiva el efecto de tormenta de arena en el Páramo Encantado.",
"Disables the Beating Animation of the Hearts on the HUD.": "Desactiva la Animación de Latido de los Corazones en el HUD.",
"Disables the sword trail effect when swinging Link's sword. Useful when": "Desactiva el efecto de estela de espada al balancear la espada de Link. Útil cuando",
"Disables the white screen flash on enemy kill.": "Desactiva el flash de pantalla blanca al matar enemigos.",
"Disables warning text when you don't have on the Goron/Zora Tunic": "Desactiva texto de advertencia cuando no tienes puesta la Túnica Goron/Zora",
"Dogs Follow You Everywhere": "Los Perros te Siguen a Todas Partes",
"Don't affect jump distance/velocity": "No afecta distancia/velocidad de salto",
"Don't increase crawl speed when exiting glitch-useful crawlspaces.": "No aumentar velocidad de arrastre al salir de espacios de arrastre útiles para glitches.",
"Don't scale image to fill window.": "No escalar imagen para llenar ventana.",
"Don't skip cutscenes that are associated with useful glitches. Currently, it is": "No saltar cinemáticas asociadas con glitches útiles. Actualmente, es",
"Drops": "Caídas",
"Drops Don't Despawn": "Las Caídas no Desaparecen",
"Drops from enemies, grass, etc. don't disappear after a set amount of time.": "Las caídas de enemigos, hierba, etc. no desaparecen después de un tiempo establecido.",
"Dying will delete your file.\n\n": "Morir eliminará tu archivo.\n\n",
"Early Eyeball Frog": "Rana Ojo Temprana",
"Easy Frame Advancing with Pause": "Avance de Cuadro Fácil con Pausa",
"Easy ISG": "ISG Fácil",
"Easy QPA": "QPA Fácil",
"Empty Bottles Faster": "Vaciar Botellas Más Rápido",
"Enable Beta Quest": "Habilitar Misión Beta",
"Enable Bombchu Drops": "Habilitar Caída de Bombchus",
"Enable Visual Guard Vision": "Habilitar Visión Visual de Guardia",
"Enable Vsync": "Habilitar Vsync",
"Enable##CrowdControl": "Habilitar##CrowdControl",
"Enable##Sail": "Habilitar##Sail",
"Enables Debug Mode, allowing you to select maps with L + R + Z, noclip": "Habilita el Modo Debug, permitiéndote seleccionar mapas con L + R + Z, noclip",
"Enables Skulltula Debug, when moving the cursor in the menu above various": "Habilita Debug de Skulltula, al mover el cursor en el menú sobre varios",
"Enables additional Trap variants.": "Habilita variantes adicionales de Trampas.",
"Enables the registry editor.": "Habilita el editor de registro.",
"Enables the separate Actor Viewer Window.": "Habilita la ventana separada de Visor de Actores.",
"Enables the separate Additional Timers Window.": "Habilita la ventana separada de Temporizadores Adicionales.",
"Enables the separate Audio Editor Window.": "Habilita la ventana separada de Editor de Audio.",
"Enables the separate Check Tracker Settings Window.": "Habilita la ventana separada de Configuración de Rastreador de Checks.",
"Enables the separate Collision Viewer Window.": "Habilita la ventana separada de Visor de Colisiones.",
"Enables the separate Console Window.": "Habilita la ventana separada de Consola.",
"Enables the separate Cosmetics Editor Window.": "Habilita la ventana separada de Editor de Cosméticos.",
"Enables the separate Display List Viewer Window.": "Habilita la ventana separada de Visor de Lista de Display.",
"Enables the separate Entrance Tracker Settings Window.": "Habilita la ventana separada de Configuración de Rastreador de Entradas.",
"Enables the separate Gameplay Stats Window.": "Habilita la ventana separada de Estadísticas de Jugabilidad.",
"Enables the separate Gfx Debugger Window.": "Habilita la ventana separada de Depurador de Gráficos.",
"Enables the separate Hook Debugger Window.": "Habilita la ventana separada de Depurador de Hooks.",
"Enables the separate Input Viewer Settings Window.": "Habilita la ventana separada de Configuración de Visor de Entradas.",
"Enables the separate Item Tracker Settings Window.": "Habilita la ventana separada de Configuración de Rastreador de Objetos.",
"Enables the separate Message Viewer Window.": "Habilita la ventana separada de Visor de Mensajes.",
"Enables the separate Mod Menu Window.": "Habilita la ventana separada de Menú de Mods.",
"Enables the separate Save Editor Window.": "Habilita la ventana separada de Editor de Guardado.",
"Enables the separate Stats Window.": "Habilita la ventana separada de Estadísticas.",
"Enables the separate Time Splits Window.": "Habilita la ventana separada de Divisiones de Tiempo.",
"Enables the separate Value Viewer Window.": "Habilita la ventana separada de Visor de Valores.",
"Enemies": "Enemigos",
"Enemies spawned by CrowdControl won't be considered for \"clear enemy": "Los enemigos generados por CrowdControl no se considerarán para \"enemigo despejado\"",
"Enemy Name Tags": "Etiquetas de Nombre de Enemigos",
"Enhancements": "Mejoras",
"Epona Boost": "Impulso de Epona",
"Every fish in the Fishing Pond will always be a Hyrule Loach.\n\n": "Todos los peces en el Estanque de Pesca siempre serán Loachas de Hyrule.\n\n",
"Exclude Glitch-Aiding Crawlspaces": "Excluir Espacios de Arrastre para Glitches",
"Excluded Locations": "Ubicaciones Excluidas",
"F5 to save, F6 to change slots, F7 to load": "F5 para guardar, F6 para cambiar ranuras, F7 para cargar",
"Fall Damage Multiplier": "Multiplicador de Daño por Caída",
"Faster + Longer Jump": "Salto Más Rápido + Largo",
"Faster Pause Menu": "Menú de Pausa Más Rápido",
"Faster Run": "Carrera Más Rápida",
"Faster Shadow Ship": "Barco de Sombra Más Rápido",
"Fireproof Deku Shield": "Escudo Deku Ignífugo",
"Fish don't Despawn": "Los Peces no Desaparecen",
"Fish never Escape": "Los Peces Nunca Escapan",
"Fish while Hovering": "Pescar mientras Flotas",
"Fishing": "Pesca",
"Fix Anubis Fireballs": "Arreglar Bolas de Fuego de Anubis",
"Fix Broken Giant's Knife Bug": "Arreglar Bug de Espada del Gigante Rota",
"Fix Bush Item Drops": "Arreglar Caídas de Objetos de Arbustos",
"Fix Camera Drift": "Arreglar Deriva de Cámara",
"Fix Camera Swing": "Arreglar Balanceo de Cámara",
"Fix Credits Timing (PAL)": "Arreglar Tiempo de Créditos (PAL)",
"Fix Dampé Going Backwards": "Arreglar Dampe Yendo Hacia Atrás",
"Fix Darunia Dancing too Fast": "Arreglar Darunia Bailando Demasiado Rápido",
"Fix Deku Nut Upgrade": "Arreglar Mejora de Nuez Deku",
"Fix Dungeon Entrances": "Arreglar Entradas de Mazmorras",
"Fix Enemies not Spawning Near Water": "Arreglar Enemigos que no Aparecen Cerca del Agua",
"Fix Falling from Vine Edges": "Arreglar Caída desde Bordes de Enredadera",
"Fix Gerudo Warrior's Clothing Colors": "Arreglar Colores de Ropa de Guerrera Gerudo",
"Fix Goron City Doors After Fire Temple": "Arreglar Puertas de Ciudad Goron Después del Templo del Fuego",
"Fix Hand Holding Hammer": "Arreglar Mano Sosteniendo Martillo",
"Fix Hanging Ledge Swing Rate": "Arreglar Velocidad de Balanceo de Borde Colgante",
"Fix Kokiri Forest Quest State": "Arreglar Estado de Misión del Bosque Kokiri",
"Fix L&R Pause Menu": "Arreglar Menú de Pausa L&R",
"Fix L&Z Page Switch in Pause Menu": "Arreglar Cambio de Página L&Z en Menú de Pausa",
"Fix Link's Eyes Open while Sleeping": "Arreglar Ojos de Link Abiertos mientras Duerme",
"Fix Megaton Hammer Crouch Stab": "Arreglar Puñalada Agachada con Martillo Megatón",
"Fix Missing Jingle after 5 Silver Rupees": "Arreglar Jingle Faltante después de 5 Rupias de Plata",
"Fix Navi Text HUD Position": "Arreglar Posición de Texto de Navi en HUD",
"Fix Out of Bounds Textures": "Arreglar Texturas Fuera de Límites",
"Fix Poacher's Saw Softlock": "Arreglar Softlock de Sierra de Cazador Furtivo",
"Fix Two-Handed Idle Animations": "Arreglar Animaciones de Inactividad a Dos Manos",
"Fix Vanishing Paths": "Arreglar Caminos que Desaparecen",
"Fix Zora Hint Dialogue": "Arreglar Diálogo de Pista Zora",
"Fixes camera slightly drifting to the left when standing still due to a": "Arregla la deriva leve de la cámara hacia la izquierda al estar quieto debido a un",
"Fixes camera swing rate when the player falls off a ledge and the camera": "Arregla la velocidad de balanceo de cámara cuando el jugador cae de un borde y la cámara",
"Fixes kokiri animation state to match their text state when getting": "Arregla el estado de animación de los kokiri para coincidir con su estado de texto al obtener",
"Fixes the Broken Giant's Knife flag not being reset when Medigoron fixes it.": "Arregla la bandera de Espada del Gigante Rota no siendo reiniciada cuando Medigoron la arregla.",
"Font Scale: %.2fx": "Escala de Fuente: %.2fx",
"Force aspect ratio:": "Forzar proporción de aspecto:",
"Forest Temple": "Templo del Bosque",
"Freeze Time": "Congelar Tiempo",
"Freeze Traps": "Trampas de Congelación",
"Freezes the time of day.": "Congela la hora del día.",
"Frogs' Ocarina Game": "Juego de Ocarina de las Ranas",
"General": "General",
"General Settings": "Configuración General",
"Generate Randomizer": "Generar Randomizer",
"Ghost Pepper": "Chile Fantasma",
"Gives you the glitched damage value of the quick put away glitch.": "Te da el valor de daño glitcheado del glitch de guardado rápido.",
"Glitch Aids": "Ayudas de Glitch",
"Glitch Restorations": "Restauraciones de Glitch",
"Graphical Fixes": "Arreglos Gráficos",
"Graphical Restorations": "Restauraciones Gráficas",
"Graphics": "Gráficos",
"Graphics Options": "Opciones de Gráficos",
"Grave Hole Jumps": "Saltos de Agujero de Tumba",
"Greatly decreases cast time of Farore's Wind magic spell.": "Disminuye enormemente el tiempo de lanzamiento del hechizo Viento de Farore.",
"Guarantee Bite": "Garantizar Mordida",
"Habanero": "Habanero",
"Health": "Salud",
"Hide Background": "Ocultar Fondo",
"Hides most of the UI when not needed.\n": "Oculta la mayor parte de la interfaz cuando no es necesaria.\n",
"Holding L makes you float into the air.": "Mantener L te hace flotar en el aire.",
"Holding down B skips text.": "Mantener presionado B salta el texto.",
"Hookshot Everything": "Gancho a Todo",
"Hookshot Reach Multiplier: %.2fx": "Multiplicador de Alcance del Gancho: %.2fx",
"Host & Port": "Anfitrión y Puerto",
"Hurt Container Mode": "Modo Contenedor Dañino",
"Hyper Bosses": "Jefes Hiper",
"Hyper Enemies": "Enemigos Hiper",
"I promise I have read the warning": "Prometo que he leído la advertencia",
"I understand, enable save states": "Entiendo, habilitar estados de guardado",
"If enabled, signs near loading zones will tell you where they lead to.": "Si está habilitado, los letreros cerca de zonas de carga te dirán a dónde llevan.",
"ImGui Menu Scaling": "Escalado de Menú ImGui",
"Infinite...": "Infinito...",
"Instant Age Change": "Cambio de Edad Instantáneo",
"Instant Fishing": "Pesca Instantánea",
"Instant Win": "Victoria Instantánea",
"Instant Win##Frogs": "Victoria Instantánea##Ranas",
"Instant Win##LostWoods": "Victoria Instantánea##BosquePerdido",
"Instantly return the Boomerang to Link by pressing its item button while": "Devuelve instantáneamente el Bumerán a Link presionando su botón de objeto mientras",
"Integer scales the image. Only available in Pixel Perfect Mode.": "Escala la imagen en números enteros. Solo disponible en Modo Pixel Perfect.",
"Internal Resolution": "Resolución Interna",
"Interval between Rupee reduction in Rupee Dash Mode.": "Intervalo entre reducción de Rupias en Modo Rupee Dash.",
"Introduces Options for unequipping Link's sword\n\n": "Introduce Opciones para desequipar la espada de Link\n\n",
"Item-related Fixes": "Arreglos Relacionados con Objetos",
"Ivan the Fairy (Coop Mode)": "Ivan el Hada (Modo Coop)",
"Jabber Nut Colors Match Kind": "Colores de Nueces Jabber Coinciden con Tipo",
"Jalapeño": "Jalapeño",
"Keese/Guay don't Target You": "Keese/Guay no te Apuntan",
"King Zora Speed: %.2fx": "Velocidad de Rey Zora: %.2fx",
"Knockback Traps": "Trampas de Retroceso",
"Language": "Idioma",
"Languages": "Idiomas",
"Leever Spawn Rate: %d seconds": "Tasa de Aparición de Leever: %d segundos",
"Link will not spin when the Goron Pot starts to spin.": "Link no girará cuando la Olla Goron comience a girar.",
"Loaches always Appear": "Las Lochas Siempre Aparecen",
"Loaches will always appear in the fishing pond instead of every four visits.": "Las lochas siempre aparecerán en el estanque de pesca en lugar de cada cuatro visitas.",
"Log Level": "Nivel de Registro",
"Logs some resources as XML when they're loaded in binary format.": "Registra algunos recursos como XML cuando se cargan en formato binario.",
"Lost Woods Ocarina Game": "Juego de Ocarina del Bosque Perdido",
"Magic": "Magia",
"Make Deku Nuts explode Bombs, similar to how they interact with Bombchus.": "Hace que las Nueces Deku exploten Bombas, similar a como interactúan con Bombchus.",
"Make crouch stabbing always do the same damage as a regular slash.": "Hace que la puñalada agachada siempre haga el mismo daño que un corte regular.",
"Makes Link always kick the chest to open it, instead of doing the longer": "Hace que Link siempre patee el cofre para abrirlo, en lugar de hacer la animación más larga",
"Makes all equipment visible, regardless of age.": "Hace que todo el equipo sea visible, sin importar la edad.",
"Makes every surface in the game climbable.": "Hace que cada superficie en el juego sea escalable.",
"Makes every surface in the game hookshotable.": "Hace que cada superficie en el juego sea alcanzable con el gancho.",
"Makes every tunic have the effects of every other tunic.": "Hace que cada túnica tenga los efectos de todas las demás túnicas.",
"Makes the L and R buttons in the pause menu the same color.": "Hace que los botones L y R en el menú de pausa sean del mismo color.",
"Manual seed entry": "Entrada manual de semilla",
"Map Select Button Combination:": "Combinación de Botones de Selección de Mapa:",
"Match Refresh Rate": "Coincidir Tasa de Refresco",
"Matches interpolation value to the refresh rate of your display.": "Coincide el valor de interpolación con la tasa de refresco de tu pantalla.",
"Matches the color of maps & compasses to the dungeon they belong to.": "Coincide el color de mapas y brújulas con la mazmorra a la que pertenecen.",
"Menu Background Opacity": "Opacidad de Fondo del Menú",
"Menu Controller Navigation": "Navegación de Controlador del Menú",
"Menu Settings": "Configuración del Menú",
"Menu Theme": "Tema del Menú",
"Mirrored World": "Mundo Espejado",
"Misc Restorations": "Restauraciones Varias",
"Miscellaneous": "Misceláneo",
"Modifies Damage taken after Bonking.": "Modifica el Daño recibido después de Golpearse.",
"Modifies damage taken after falling into a void:\n": "Modifica el daño recibido al caer en un vacío:\n",
"Modify Note Timer: %dx": "Modificar Temporizador de Notas: %dx",
"Money": "Dinero",
"Moon Jump on L": "Salto Lunar en L",
"MoreResolutionSettings": "MásConfiguracionesDeResolución",
"Multiplier:": "Multiplicador:",
"Multiplies your output resolution by the value inputted, as a more intensive but effective": "Multiplica tu resolución de salida por el valor ingresado, como una forma más intensiva pero efectiva",
"Mute Notification Sound": "Silenciar Sonido de Notificación",
"N64 Weird Frames": "Cuadros Extraños N64",
"Nayru's Love": "Amor de Nayru",
"Network": "Red",
"Nighttime Skulltulas will spawn during both day and night.": "Las Skulltulas nocturnas aparecerán tanto de día como de noche.",
"No Clip": "Sin Colisión",
"No Clip Button Combination:": "Combinación de Botones Sin Colisión:",
"No Heart Drops": "Sin Caídas de Corazones",
"No Random Drops": "Sin Caídas Aleatorias",
"No ReDead/Gibdo Freeze": "Sin Congelación de ReDead/Gibdo",
"No Rupee Randomization": "Sin Aleatorización de Rupias",
"None##Skips": "Ninguno##Saltos",
"Note Play Speed: %dx": "Velocidad de Reproducción de Notas: %dx",
"Notification on Autosave": "Notificación de Autoguardado",
"Number of Starting Notes: %d notes": "Número de Notas Iniciales: %d notas",
"OHKO": "KO",
"Ocarina of Time + Master Sword": "Ocarina del Tiempo + Espada Maestra",
"Once a hook as been set, Fish will never let go while being reeled in.": "Una vez que se ha puesto un gancho, los peces nunca soltarán mientras se recogen.",
"Only change the texture of containers if you have the Stone of Agony.": "Cambiar solo la textura de contenedores si tienes la Piedra de Agonía.",
"Open App Files Folder": "Abrir Carpeta de Archivos de la App",
"Optimized Debug Warp Screen, with the added ability to chose entrances and time of day.": "Pantalla de Teletransporte Debug optimizada, con la capacidad añadida de elegir entradas y hora del día.",
"Override the resolution scale slider and use the settings below, irrespective of window size.": "Anular el control deslizante de escala de resolución y usar las configuraciones de abajo, independientemente del tamaño de ventana.",
"Passive Infinite Sword Glitch\n": "Glitch de Espada Infinita Pasiva\n",
"Permanent Heart Loss": "Pérdida Permanente de Corazón",
"Popout Audio Editor Window": "Abrir Ventana de Editor de Audio",
"Popout Bindings Window": "Abrir Ventana de Controles",
"Popout Cosmetics Editor Window": "Abrir Ventana de Editor de Cosméticos",
"Popout Gameplay Stats Window": "Abrir Ventana de Estadísticas de Jugabilidad",
"Popout Input Viewer Settings": "Abrir Configuración de Visor de Entradas",
"Popout Mod Menu Window": "Abrir Ventana de Menú de Mods",
"Popout Time Splits Window": "Abrir Ventana de Divisiones de Tiempo",
"Position": "Posición",
"Prevent dropping inputs when playing the Ocarina too quickly.": "Prevenir pérdida de entradas al tocar la Ocarina demasiado rápido.",
"Prevent forced conversations with Navi and/or other NPCs.": "Prevenir conversaciones forzadas con Navi y/o otros NPCs.",
"Prevent notifications from playing a sound.": "Prevenir que las notificaciones reproduzcan un sonido.",
"Prevents ReDeads and Gibdos from being able to freeze you with their scream.": "Previene que ReDeads y Gibdos puedan congelarte con su grito.",
"Prevents bugs from automatically despawning after a while when dropped.": "Previene que los bichos desaparezcan automáticamente después de un tiempo al soltarlos.",
"Prevents fish from automatically despawning after a while when dropped.": "Previene que los peces desaparezcan automáticamente después de un tiempo al soltarlos.",
"Prevents immediately falling off climbable surfaces if climbing on the edges.": "Previene caer inmediatamente de superficies escalables si estás escalando en los bordes.",
"Prevents integer scaling factor from exceeding screen bounds.\n\n": "Previene que el factor de escala entero exceda los límites de la pantalla.\n\n",
"Prevents the Deku Shield from burning on contact with fire.": "Previene que el Escudo Deku se queme al contacto con fuego.",
"Prevents the Forest Stage Deku Nut upgrade from becoming unobtainable": "Previene que la mejora de Nuez Deku del Bosque se vuelva inalcanzable",
"Prevents the big Cucco from appearing in the Bombchu Bowling minigame.": "Previene que el Cucco grande aparezca en el minijuego de Bolos de Bombchu.",
"Prevents the small Cucco from appearing in the Bombchu Bowling minigame.": "Previene que el Cucco pequeño aparezca en el minijuego de Bolos de Bombchu.",
"Pulsate Boss Icon": "Icono de Jefe Pulsante",
"Quick Bongo Kill": "Muerte Rápida de Bongo",
"Quick Putaway": "Guardado Rápido",
"Randomize All Settings": "Aleatorizar Todas las Configuraciones",
"Randomizes all randomizer settings to random valid values (excludes tricks).": "Aleatoriza todas las configuraciones del randomizer a valores válidos aleatorios (excluye trucos).",
"Rebottle Blue Fire": "Reembottellar Fuego Azul",
"Red Ganon Blood": "Sangre de Ganon Roja",
"Remember Save Location": "Recordar Ubicación de Guardado",
"Remote Bombchu": "Bombchu Remota",
"Remove Big Cucco": "Eliminar Cucco Grande",
"Remove Power Crouch Stab": "Eliminar Puñalada Agachada de Poder",
"Remove Small Cucco": "Eliminar Cucco Pequeño",
"Remove the Darkness that appears when charging a Spin Attack.": "Eliminar la Oscuridad que aparece al cargar un Ataque Giratorio.",
"Removes the cap of 3 active explosives being deployed at once.": "Elimina el límite de 3 explosivos activos desplegados a la vez.",
"Removes the timer to play back the song.": "Elimina el temporizador para reproducir la canción.",
"Renders Gauntlets when using the Bow and Hookshot like in OoT3D.": "Renderiza Guanteletes al usar el Arco y Gancho como en OoT3D.",
"Renders a health bar for Enemies when Z-Targeted.": "Renderiza una barra de salud para Enemigos cuando se Apunta con Z.",
"Replace Navi's overworld quest hints with rando-related gameplay hints.": "Reemplaza las pistas de misión del mundo de Navi con pistas de jugabilidad relacionadas con rando.",
"Reset Button Combination:": "Combinación de Botones de Reinicio:",
"Resets the Navi timer on scene change. If you have already talked to her,": "Reinicia el temporizador de Navi al cambiar de escena. Si ya has hablado con ella,",
"Respawn with Full Health instead of 3 hearts.": "Reaparecer con Salud Completa en lugar de 3 corazones.",
"Restore Old Gold Skulltula Cutscene": "Restaurar Cinemática de Gold Skulltula Antigua",
"Restore the original red blood from NTSC 1.0/1.1. Disable for Green blood.": "Restaurar la sangre roja original de NTSC 1.0/1.1. Desactivar para sangre verde.",
"Restores the wider range of certain shutter doors from NTSC 1.0.\n": "Restaura el rango más amplio de ciertas puertas correderas de NTSC 1.0.\n",
"Reworked Targeting": "Apuntado Retrabajado",
"Reworks targeting functionality\n": "Retrabaja la funcionalidad de apuntado\n",
"Round One Notes: %d notes": "Notas de la Ronda Uno: %d notas",
"Round Three Notes: %d notes": "Notas de la Ronda Tres: %d notas",
"Round Two Notes: %d notes": "Notas de la Ronda Dos: %d notas",
"Rupee Dash Interval %d seconds": "Intervalo de Rupee Dash %d segundos",
"Rupee Dash Mode": "Modo Rupee Dash",
"Rupees reduce over time, Link suffers damage when the count hits 0.": "Las rupias se reducen con el tiempo, Link sufre daño cuando el conteo llega a 0.",
"Sail": "Sail",
"Sail is a networking protocol designed to facilitate remote": "Sail es un protocolo de red diseñado para facilitar remoto",
"Save States": "Estados de Guardado",
"Search In Sidebar": "Buscar en Barra Lateral",
"Search Input Autofocus": "Autoenfoque de Entrada de Búsqueda",
"Seed": "Semilla",
"Seed Entry": "Entrada de Semilla",
"Select the UI translation language...": "Seleccionar el idioma de traducción de la interfaz...",
"Serrano": "Serrano",
"Settings": "Configuración",
"Shadow Tag Mode": "Modo Sombra Pegajosa",
"Shield with Two-Handed Weapons": "Escudo con Armas a Dos Manos",
"Shock Traps": "Trampas de Choque",
"Shooting Gallery": "Galería de Tiro",
"Shops and Minigames are open both day and night. Requires a scene reload to take effect.": "Tiendas y Minijuegos están abiertos de día y de noche. Requiere recargar escena para tener efecto.",
"Show Gauntlets in First-Person": "Mostrar Guanteletes en Primera Persona",
"Show a notification when the game is autosaved.": "Mostrar una notificación cuando el juego se autoguarda.",
"Signs Hint Entrances": "Letreros Indican Entradas",
"Skip Bottle Pickup Messages": "Saltar Mensajes de Recoger Botella",
"Skip Consumable Item Pickup Messages": "Saltar Mensajes de Recoger Objetos Consumibles",
"Skip Feeding Jabu-Jabu": "Saltar Alimentar a Jabu-Jabu",
"Skip Keep Confirmation": "Saltar Confirmación de Keep",
"Skip One Point Cutscenes (Chests, Door Unlocks, etc.)": "Saltar Cinemáticas de Un Punto (Cofres, Apertura de Puertas, etc.)",
"Skip Pickup Messages for Bottle Swipes.": "Saltar Mensajes de Recoger para Botellas.",
"Skip Pickup Messages for new Consumable Items.": "Saltar Mensajes de Recoger para Objetos Consumibles nuevos.",
"Skip Playing Scarecrow's Song": "Saltar Tocar Canción del Espantapájaros",
"Skip the \"Game Saved\" confirmation screen.": "Saltar la pantalla de confirmación \"Juego Guardado\".",
"Skip the part where the Ocarina Playback is called when you play a song.": "Saltar la parte donde se llama la Reproducción de Ocarina al tocar una canción.",
"Skip the tower escape sequence between Ganondorf and Ganon.": "Saltar la secuencia de escape de la torre entre Ganondorf y Ganon.",
"Skips Link's taking breath animation after coming up from water.": "Salta la animación de Link tomando aire al salir del agua.",
"Skips the Frogs' Ocarina Game.": "Salta el Juego de Ocarina de las Ranas.",
"Skips the Lost Woods Ocarina Memory Game.": "Salta el Juego de Memoria de Ocarina del Bosque Perdido.",
"Skips the Shooting Gallery minigame.": "Salta el minijuego de la Galería de Tiro.",
"Solve Amy's Puzzle": "Resolver Puzzle de Amy",
"Spawn Bean Skulltula Faster": "Aparecer Bean Skulltula Más Rápido",
"Spawn with Full Health": "Aparecer con Salud Completa",
"Spawned Enemies Ignored Ingame": "Enemigos Generados Ignorados en el Juego",
"Speak to Navi with L but enter First-Person Camera with C-Up.": "Hablar con Navi con L pero entrar a Cámara en Primera Persona con C-Arriba.",
"Speed Modifier": "Modificador de Velocidad",
"Speed Traps": "Trampas de Velocidad",
"Speeds up animation of the pause menu, similar to Majora's Mask": "Acelera la animación del menú de pausa, similar a Majora's Mask",
"Speeds up emptying animation when dumping out the contents of a bottle.": "Acelera la animación de vaciado al verter el contenido de una botella.",
"Speeds up lifting Silver Rocks and Obelisks.": "Acelera el levantamiento de Rocas de Plata y Obeliscos.",
"Speeds up ship in Shadow Temple.": "Acelera el barco en el Templo de las Sombras.",
"Spoiler File": "Archivo de Spoiler",
"Stops masks from automatically unequipping on certain situations:\n": "Detiene que las máscaras se desequen automáticamente en ciertas situaciones:\n",
"Super Tunic": "Super Túnica",
"Switch Timer Multiplier": "Multiplicador de Temporizador de Cambio",
"Switches Link's age and reloads the area.": "Cambia la edad de Link y recarga el área.",
"Syncs the in-game time with the real world time.": "Sincroniza el tiempo del juego con el tiempo del mundo real.",
"Target Switch Button Combination:": "Combinación de Botones de Cambio de Objetivo:",
"Targetable Gold Skulltula": "Gold Skulltula Apuntable",
"Teleport Traps": "Trampas de Teletransporte",
"Text to Speech": "Texto a Voz",
"Texture Filter (Needs reload)": "Filtro de Textura (Necesita recargar)",
"The Pond Owner will not ask to confirm if you want to keep a smaller Fish.": "El Dueño del Estanque no pedirá confirmar si quieres quedarte con un Pez más pequeño.",
"The ammunition at the start of the Shooting Gallery minigame as Adult.": "La munición al inicio del minijuego de Galería de Tiro como Adulto.",
"The ammunition at the start of the Shooting Gallery minigame as Child.": "La munición al inicio del minijuego de Galería de Tiro como Niño.",
"The log level determines which messages are printed to the console.": "El nivel de registro determina qué mensajes se imprimen en la consola.",
"The number of Bombchus available at the start of the Bombchu Bowling minigame.": "El número de Bombchus disponibles al inicio del minijuego de Bolos de Bombchu.",
"The skybox in the background of the File Select screen will go through the": "El skybox en el fondo de la pantalla de Selección de Archivo pasará por el",
"The time between groups of Leevers spawning.": "El tiempo entre grupos de Leevers apareciendo.",
"These are NOT like emulator states. They do not save your game progress": "Estos NO son como estados de emulador. No guardan tu progreso del juego",
"These enhancements are only useful in the Randomizer mode but do not affect the randomizer logic.": "Estas mejoras solo son útiles en el modo Randomizer pero no afectan la lógica del randomizer.",
"This will completely erase the controls config, including registered devices.\nContinue?": "Esto borrará completamente la configuración de controles, incluyendo dispositivos registrados.\n¿Continuar?",
"Tier 1 Traps:": "Trampas de Nivel 1:",
"Tier 2 Traps:": "Trampas de Nivel 2:",
"Tier 3 Traps:": "Trampas de Nivel 3:",
"Time Sync": "Sincronización de Tiempo",
"Timeless Equipment": "Equipo Atemporal",
"Toggle Fullscreen": "Alternar Pantalla Completa",
"Toggle Input Viewer": "Alternar Visor de Entradas",
"Toggle Timers Window": "Alternar Ventana de Temporizadores",
"Toggle modifier instead of holding": "Alternar modificador en lugar de mantener",
"Toggles the Check Tracker.": "Alterna el Rastreador de Checks.",
"Toggles the Entrance Tracker.": "Alterna el Rastreador de Entradas.",
"Toggles the Item Tracker.": "Alterna el Rastreador de Objetos.",
"Translate Title Screen": "Traducir Pantalla de Título",
"Translate the Debug Warp Screen based on the game language.": "Traducir la Pantalla de Teletransporte Debug según el idioma del juego.",
"Trap Options": "Opciones de Trampas",
"Trees Drop Sticks": "Los Árboles Suelten Palos",
"Tricks/Glitches": "Trucos/Glitches",
"Turn on/off changes to the Bombchu Bowling behavior.": "Activar/desactivar cambios al comportamiento de Bolos de Bombchu.",
"Turn on/off changes to the Fishing behavior.": "Activar/desactivar cambios al comportamiento de Pesca.",
"Turn on/off changes to the Frogs' Ocarina Game behavior.": "Activar/desactivar cambios al comportamiento del Juego de Ocarina de las Ranas.",
"Turn on/off changes to the Lost Woods Ocarina Game behavior.": "Activar/desactivar cambios al comportamiento del Juego de Ocarina del Bosque Perdido.",
"Turn on/off changes to the shooting gallery behavior.": "Activar/desactivar cambios al comportamiento de la galería de tiro.",
"Turns Bunny Hood Invisible while still maintaining its effects.": "Vuelve invisible la Máscara de Conejo mientras mantiene sus efectos.",
"Turns on OoT Beta Quest. *WARNING*: This will reset your game!": "Activa la Misión Beta de OoT. *ADVERTENCIA*: ¡Esto reiniciará tu juego!",
"Turns the Static Image of Link in the Pause Menu's Equipment Subscreen": "Convierte la Imagen Estática de Link en la Subpantalla de Equipo del Menú de Pausa",
"UI Translation": "Traducción de Interfaz",
"Unlimited Playback Time##Frogs": "Tiempo de Reproducción Ilimitado##Ranas",
"Unlimited Playback Time##LostWoods": "Tiempo de Reproducción Ilimitado##BosquePerdido",
"Unrestricted Items": "Objetos Sin Restricciones",
"Unsheathe Sword Without Slashing": "Desenvainar Espada sin Cortar",
"Use Custom graphics for Dungeon Keys, Big and Small, so that they can be easily told apart.": "Usar gráficos personalizados para Llaves de Mazmorra, Grandes y Pequeñas, para que puedan distinguirse fácilmente.",
"Void Damage Multiplier": "Multiplicador de Daño de Vacío",
"Void Traps": "Trampas de Vacío",
"Warp Point": "Punto de Teletransporte",
"Warp Points": "Puntos de Teletransporte",
"Warping": "Teletransporte",
"Wearing the Bunny Hood grants a speed and jump boost like in Majora's Mask.\n": "Usar la Máscara de Conejo otorga un aumento de velocidad y salto como en Majora's Mask.\n",
"When a line is stable, guarantee bite. Otherwise use Default logic.": "Cuando una línea es estable, garantizar mordida. De lo contrario usar lógica predeterminada.",
"When obtaining Rupees, randomize what the Rupee is called in the textbox.": "Al obtener Rupias, aleatorizar cómo se llama la Rupia en el cuadro de texto.",
"Wide Door Ranges": "Rangos de Puertas Anchos",
"Windowed Fullscreen": "Pantalla Completa en Ventana",
"With Shuffle Speak, jabber nut model & color will be generic.": "Con Shuffle Speak, el modelo y color de nuez jabber será genérico.",
"https://github.com/HarbourMasters/sail": "https://github.com/HarbourMasters/sail",
"AspectRatioCustom": "ProporciónPersonalizada",
"AspectSep": "SepProporción",
"Automatically sets scale factor to fit window. Only available in Pixel Perfect Mode.": "Establece automáticamente el factor de escala para ajustar a la ventana. Solo disponible en Modo Pixel Perfect.",
"Item Pool": "Lista de Objetos",
"Logic": "Logica"
}
}

View File

@@ -25,7 +25,7 @@ if (-not (Test-Path $clangFormatFilePath) -or ($currentVersion -ne $requiredVers
}
$wc = New-Object net.webclient
$wc.Downloadfile($url, $llvmInstallerPath)
$wc.Downloadfile($url, $PSScriptRoot + $llvmInstallerPath)
$sevenZipPath = "C:\Program Files\7-Zip\7z.exe"
$specificFileInArchive = "bin\clang-format.exe"
@@ -37,12 +37,13 @@ if (-not (Test-Path $clangFormatFilePath) -or ($currentVersion -ne $requiredVers
$basePath = (Resolve-Path .).Path
$files = Get-ChildItem -Path $basePath\soh -Recurse -File `
| Where-Object { ($_.Extension -eq '.c' -or $_.Extension -eq '.cpp' -or `
($_.Extension -eq '.h' -and `
(($_.Extension -eq '.h' -or $_.Extension -eq '.hpp') -and `
(-not ($_.FullName -like "*\soh\src\*" -or $_.FullName -like "*\soh\include\*")))) -and `
(-not ($_.FullName -like "*\soh\assets\*")) }
(-not ($_.FullName -like "*\soh\assets\*" -or $_.FullName -like "*\soh\build\*")) }
foreach ($file in $files) {
for ($i = 0; $i -lt $files.Length; $i++) {
$file = $files[$i]
$relativePath = $file.FullName.Substring($basePath.Length + 1)
Write-Host "Formatting $relativePath"
Write-Host "Formatting [$($i+1)/$($files.Length)] $relativePath"
.\clang-format.exe -i $file.FullName
}

View File

@@ -10,20 +10,20 @@
# -name "*.c" -o -name "*.cpp"
# find all .c and .cpp files
#
# -name "*.h" ! -path "soh/src/**.h" ! -path "soh/include/**.h"
# find all .h files that aren't in soh/src or soh/include
# ( -name "*.h" -o -name "*.hpp" ) ! -path "soh/src/**.h" ! -path "soh/include/**.h"
# find all .h and .hpp files that aren't in soh/src or soh/include
# this is because zret decomp only runs clang-format on c files
# https://github.com/zeldaret/mm/blob/b7e5468ca16315a7e322055eff3d97fe980bbc25/format.py#L182
#
# ! -path "soh/assets/*"
# asset headers are autogenerated, don't fight them
#
# | sed 's| |\\ |g'
# pipe the result of find into sed to
# ensure all the paths returned by find have spaces escaped
# -print0
# separate paths with NUL bytes, avoiding issues with spaces in paths
#
# | xargs clang-format-14 -i
# | xargs -0 clang-format-14 -i -verbose
# use xargs to take each path we've found
# and pass it as an argument to clang-format
# verbose to print files being formatted and X out of Y status
find soh -type f \( -name "*.c" -o -name "*.cpp" -o \( -name "*.h" ! -path "soh/src/**.h" ! -path "soh/include/**.h" \) \) ! -path "soh/assets/*" | sed 's| |\\ |g' | xargs clang-format-14 -i
find soh -type f \( -name "*.c" -o -name "*.cpp" -o \( \( -name "*.h" -o -name "*.hpp" \) ! -path "soh/src/*" ! -path "soh/include/*" \) \) ! -path "soh/assets/*" -print0 | xargs -0 clang-format-14 -i --verbose

View File

@@ -1,7 +1,7 @@
[Desktop Entry]
Version=1.0
Name=SOH
Exec=soh.sh
Exec=soh.elf
Terminal=false
Icon=sohIcon
Type=Application

View File

@@ -1,338 +0,0 @@
#!/bin/bash
HERE="$(dirname "$(readlink -f "${0}")")"/../..
export PATH="$HERE"/bin:"$HERE"/usr/bin:"$PATH"
export LD_LIBRARY_PATH="$HERE"/usr/lib:"$LD_LIBRARY_PATH"
export ZENITY=$(command -v zenity)
if [ -z ${SHIP_HOME+x} ]; then
export SHIP_HOME=$PWD
fi
if [ -z ${SHIP_BIN_DIR+x} ]; then
export SHIP_BIN_DIR="$HERE/usr/bin"
fi
if [[ ! -e "$SHIP_HOME"/mods ]]; then
mkdir -p "$SHIP_HOME"/mods
touch "$SHIP_HOME"/mods/custom_otr_files_go_here.txt
fi
while [[ (! -e "$SHIP_HOME"/oot.otr) || (! -e "$SHIP_HOME"/oot-mq.otr) ]]; do
for romfile in "$SHIP_HOME"/*.*64
do
if [[ -e "$romfile" ]] || [[ -L "$romfile" ]]; then
export ASSETDIR="$(mktemp -d /tmp/assets-XXXXX)"
ln -s "$SHIP_BIN_DIR"/{assets,soh.elf,ZAPD} "$ASSETDIR"
export OLDPWD="$PWD"
mkdir -p "$ASSETDIR"/tmp
if [[ -e "$romfile" ]]; then
ln -s "$romfile" "$ASSETDIR"/tmp/rom.z64
else
ORIG_ROM_PATH=$(readlink "$romfile")
ln -s "$ORIG_ROM_PATH" "$ASSETDIR"/tmp/rom.z64
fi
cd "$ASSETDIR"
ROMHASH=$(sha1sum -b "$ASSETDIR"/tmp/rom.z64 | awk '{ print $1 }')
# Remap v64 and n64 hashes to their z64 hash equivalent
# ZAPD will handle converting the data into z64 format
case "$ROMHASH" in
a9059b56e761c9034fbe02fe4c24985aaa835dac) # v64
ROMHASH=cee6bc3c2a634b41728f2af8da54d9bf8cc14099
;;
24708102dc504d3f375a37f4ae4e149c167dc515) # n64
ROMHASH=cee6bc3c2a634b41728f2af8da54d9bf8cc14099
;;
580dd0bd1b6d2c51cc20a764eece84dba558964c) # v64
ROMHASH=0227d7c0074f2d0ac935631990da8ec5914597b4
;;
d6342c59007e57c1194661ec6880b2f078403f4e) # n64
ROMHASH=0227d7c0074f2d0ac935631990da8ec5914597b4
;;
d0bdc2eb320668b4ba6893b9aefe4040a73123ff) # v64
ROMHASH=328a1f1beba30ce5e178f031662019eb32c5f3b5
;;
4946ab250f6ac9b32d76b21f309ebb8ebc8103d2) # n64
ROMHASH=328a1f1beba30ce5e178f031662019eb32c5f3b5
;;
663c34f1b2c05a09e5beffe4d0dcd440f7d49dc7) # v64
ROMHASH=cfbb98d392e4a9d39da8285d10cbef3974c2f012
;;
24c73d378b0620a380ce5ef9f2b186c6c157a68b) # n64
ROMHASH=cfbb98d392e4a9d39da8285d10cbef3974c2f012
;;
8ebf2e29313f44f2d49e5b4191971d09919e8e48) # v64
ROMHASH=f46239439f59a2a594ef83cf68ef65043b1bffe2
;;
4264bf7b875737b8fae77d52322a5099d051fc11) # n64
ROMHASH=f46239439f59a2a594ef83cf68ef65043b1bffe2
;;
973bc6fe56010a8d646166a1182a81b4f13b8cf9) # v64
ROMHASH=50bebedad9e0f10746a52b07239e47fa6c284d03
;;
d327752c46edc70ff3668b9514083dbbee08927c) # v64
ROMHASH=50bebedad9e0f10746a52b07239e47fa6c284d03
;;
ecdeb1747560834e079c22243febea7f6f26ba3b) # v64
ROMHASH=079b855b943d6ad8bd1eb026c0ed169ecbdac7da
;;
f19f8662ec7abee29484a272a6fda53e39efe0f1) # n64
ROMHASH=079b855b943d6ad8bd1eb026c0ed169ecbdac7da
;;
ab519ce04a33818ce2c39b3c514a751d807a494a) # v64
ROMHASH=cfecfdc58d650e71a200c81f033de4e6d617a9f6
;;
c19a34f7646305e1755249fca2071e178bd7cd00) # n64
ROMHASH=cfecfdc58d650e71a200c81f033de4e6d617a9f6
;;
25e8ae79ea0839ca5c984473f7460d8040c36f9c) # v64
ROMHASH=517bd9714c73cb96c21e7c2ef640d7b55186102f
;;
166c02770d67fcc3954c443eb400a6a3573d3fc0) # n64
ROMHASH=517bd9714c73cb96c21e7c2ef640d7b55186102f
;;
79a4f053d34018e59279e6d4b83c7daccd985c87) # v64
ROMHASH=ad69c91157f6705e8ab06c79fe08aad47bb57ba7
;;
82fafee9c6ac7946739282958364ce606077ac65) # n64
ROMHASH=ad69c91157f6705e8ab06c79fe08aad47bb57ba7
;;
18cd0eb65914a21d8fa08dfe71c29d865e9d728a) # v64
ROMHASH=d3ecb253776cd847a5aa63d859d8c89a2f37b364
;;
07940d5609e04b7caac63570731e01189129212e) # n64
ROMHASH=d3ecb253776cd847a5aa63d859d8c89a2f37b364
;;
3ac86253e0c0d55486d212e647350c1527b9c92d) # v64
ROMHASH=41b3bdc48d98c48529219919015a1af22f5057c2
;;
70bf30a9980026e615a1ae8d2735a773cf9fcc94) # n64
ROMHASH=41b3bdc48d98c48529219919015a1af22f5057c2
;;
f9e2b6840b9103e9707ea390089a7b6943592a98) # v64
ROMHASH=c892bbda3993e66bd0d56a10ecd30b1ee612210f
;;
2fae1601aa7ae8d3e03ba3f4dcdfca3a36002ac5) # n64
ROMHASH=c892bbda3993e66bd0d56a10ecd30b1ee612210f
;;
1181034d5f9533f53ebe8e1c781badbee115f5aa) # v64
ROMHASH=dbfc81f655187dc6fefd93fa6798face770d579d
;;
07477067943abe8d0c50285eb4a6cb9ece99e79b) # n64
ROMHASH=dbfc81f655187dc6fefd93fa6798face770d579d
;;
2d8fb7140a9c5d11ce614561e5a36ffef0c17540) # v64
ROMHASH=fa5f5942b27480d60243c2d52c0e93e26b9e6b86
;;
d90bbe422ac728ac54ac6a2c9fec942f7ff04df9) # n64
ROMHASH=fa5f5942b27480d60243c2d52c0e93e26b9e6b86
;;
44c75962911e13bdfdc31b35e0b8e3be6a6a49ab) # v64
b82710ba2bd3b4c6ee8aa1a7e9acf787dfc72e9b
;;
5d47025581060af5ba19e6719c25fea7398e87cf) # n64
b82710ba2bd3b4c6ee8aa1a7e9acf787dfc72e9b
;;
e1d070ad7b017de9f992b362164dcd9d7f820f7e) # v64
8b5d13aac69bfbf989861cfdc50b1d840945fc1d
;;
a8c04cd5aa94a6a32198f36ff2069d43342d18a8) # n64
8b5d13aac69bfbf989861cfdc50b1d840945fc1d
;;
245410280d152f28d5b1c0c0fc37f384db0020cd) # v64
0769c84615422d60f16925cd859593cdfa597f84
;;
fbdc9e444807f9b881e3432cedf66f38746b81d8) # n64
0769c84615422d60f16925cd859593cdfa597f84
;;
b6d33d6bf5d6700c64b6a873ab8b06ff039619bc) # v64
2ce2d1a9f0534c9cd9fa04ea5317b80da21e5e73
;;
2c7113d20044f93c82ec888c19aa09ea7797396d) # n64
2ce2d1a9f0534c9cd9fa04ea5317b80da21e5e73
;;
06c3c098f0e14ed61811dfaf0e8e4519d7d7a826) # v64
dd14e143c4275861fe93ea79d0c02e36ae8c6c2f
;;
bb3f85bfaad9ae7a20afbf618fc9fe126c8c1b4f) # n64
dd14e143c4275861fe93ea79d0c02e36ae8c6c2f
;;
esac
case "$ROMHASH" in
cee6bc3c2a634b41728f2af8da54d9bf8cc14099)
if [[ ! -e "$SHIP_HOME"/oot.otr ]]; then
ROM=GC_NMQ_D
OTRNAME="oot.otr"
fi
;;
0227d7c0074f2d0ac935631990da8ec5914597b4)
if [[ ! -e "$SHIP_HOME"/oot.otr ]]; then
ROM=GC_NMQ_PAL_F
OTRNAME="oot.otr"
else
continue
fi
;;
328a1f1beba30ce5e178f031662019eb32c5f3b5)
if [[ ! -e "$SHIP_HOME"/oot.otr ]]; then
ROM=N64_PAL_10
OTRNAME="oot.otr"
else
continue
fi
;;
cfbb98d392e4a9d39da8285d10cbef3974c2f012)
if [[ ! -e "$SHIP_HOME"/oot.otr ]]; then
ROM=N64_PAL_11
OTRNAME="oot.otr"
else
continue
fi
;;
ad69c91157f6705e8ab06c79fe08aad47bb57ba7|c892bbda3993e66bd0d56a10ecd30b1ee612210f)
if [[ ! -e "$SHIP_HOME"/oot.otr ]]; then
ROM=N64_NTSC_10
OTRNAME="oot.otr"
else
continue
fi
;;
d3ecb253776cd847a5aa63d859d8c89a2f37b364|dbfc81f655187dc6fefd93fa6798face770d579d)
if [[ ! -e "$SHIP_HOME"/oot.otr ]]; then
ROM=N64_NTSC_11
OTRNAME="oot.otr"
else
continue
fi
;;
41b3bdc48d98c48529219919015a1af22f5057c2|fa5f5942b27480d60243c2d52c0e93e26b9e6b86)
if [[ ! -e "$SHIP_HOME"/oot.otr ]]; then
ROM=N64_NTSC_12
OTRNAME="oot.otr"
else
continue
fi
;;
f46239439f59a2a594ef83cf68ef65043b1bffe2)
if [[ ! -e "$SHIP_HOME"/oot-mq.otr ]]; then
ROM=GC_MQ_PAL_F
OTRNAME="oot-mq.otr"
else
continue
fi
;;
50bebedad9e0f10746a52b07239e47fa6c284d03)
if [[ ! -e "$SHIP_HOME"/oot-mq.otr ]]; then
ROM=GC_MQ_D
OTRNAME="oot-mq.otr"
else
continue
fi
;;
079b855b943d6ad8bd1eb026c0ed169ecbdac7da)
if [[ ! -e "$SHIP_HOME"/oot-mq.otr ]]; then
ROM=GC_MQ_D
OTRNAME="oot-mq.otr"
else
continue
fi
;;
cfecfdc58d650e71a200c81f033de4e6d617a9f6)
if [[ ! -e "$SHIP_HOME"/oot-mq.otr ]]; then
ROM=GC_MQ_D
OTRNAME="oot-mq.otr"
else
continue
fi
;;
517bd9714c73cb96c21e7c2ef640d7b55186102f)
if [[ ! -e "$SHIP_HOME"/oot-mq.otr ]]; then
ROM=GC_MQ_D
OTRNAME="oot-mq.otr"
else
continue
fi
;;
b82710ba2bd3b4c6ee8aa1a7e9acf787dfc72e9b)
if [[ ! -e "$SHIP_HOME"/oot.otr ]]; then
ROM=GC_NMQ_NTSC_U
OTRNAME="oot.otr"
else
continue
fi
;;
8b5d13aac69bfbf989861cfdc50b1d840945fc1d)
if [[ ! -e "$SHIP_HOME"/oot-mq.otr ]]; then
ROM=GC_MQ_NTSC_U
OTRNAME="oot-mq.otr"
else
continue
fi
;;
0769c84615422d60f16925cd859593cdfa597f84)
if [[ ! -e "$SHIP_HOME"/oot.otr ]]; then
ROM=GC_NMQ_NTSC_J
OTRNAME="oot.otr"
else
continue
fi
;;
2ce2d1a9f0534c9cd9fa04ea5317b80da21e5e73)
if [[ ! -e "$SHIP_HOME"/oot.otr ]]; then
ROM=GC_NMQ_NTSC_J_CE
OTRNAME="oot.otr"
else
continue
fi
;;
dd14e143c4275861fe93ea79d0c02e36ae8c6c2f)
if [[ ! -e "$SHIP_HOME"/oot-mq.otr ]]; then
ROM=GC_MQ_NTSC_J
OTRNAME="oot-mq.otr"
else
continue
fi
;;
*)
echo -e "\n$romfile - $ROMHASH rom hash does not match\n"
continue;;
esac
if [[ ! -e "$SHIP_HOME"/"$OTRNAME" ]]; then
if [ -n "$ZENITY" ]; then
(echo "# 25%"; echo "25"; sleep 2; echo "# 50%"; echo "50"; sleep 3; echo "# 75%"; echo "75"; sleep 2; echo "# 100%"; echo "100"; sleep 3) |
zenity --progress --title="OTR Generating..." --timeout=10 --percentage=0 --icon-name=soh --window-icon=soh.png --height=80 --width=400 &
else
echo "Processing..."
fi
assets/extractor/ZAPD.out ed -eh -i assets/extractor/xmls/"${ROM}" -b tmp/rom.z64 -fl assets/extractor/filelists -o placeholder -osf placeholder -gsf 1 -rconf assets/extractor/Config_"${ROM}".xml -se OTR --otrfile "${OTRNAME}" --portVer "@CMAKE_PROJECT_VERSION@" > /dev/null 2>&1
cp "$ASSETDIR"/"$OTRNAME" "$SHIP_HOME"
fi
else
if [[ (! -e "$SHIP_HOME"/oot.otr) && (! -e "$SHIP_HOME"/oot-mq.otr) ]]; then
if [ -n "$ZENITY" ]; then
zenity --error --timeout=5 --text="Place ROM in $SHIP_HOME" --title="Missing ROM file" --width=500 --width=200
else
echo -e "\nPlace ROM in this folder\n"
fi
exit
fi
fi
done
if [[ (! -e "$SHIP_HOME"/oot.otr) && (! -e "$SHIP_HOME"/oot-mq.otr) ]]; then
if [ -n "$ZENITY" ]; then
zenity --error --timeout=10 --text="No valid ROMs were provided, No OTR was generated." --title="Incorrect ROM file" --width=500 --width=200
else
echo "No valid roms provided, no OTR was generated."
fi
rm -r "$ASSETDIR"
exit
else
(cd "$SHIP_BIN_DIR"; ./soh.elf)
exit
fi
rm -r "$ASSETDIR"
done
(cd "$SHIP_BIN_DIR"; ./soh.elf)
exit

9
soh.desktop Normal file
View File

@@ -0,0 +1,9 @@
[Desktop Entry]
Version=1.0
Name=SOH
Exec=soh.elf
Terminal=false
Icon=sohIcon
Type=Application
Categories=Game;
X-AppImage-Integrate=false

View File

@@ -4,7 +4,7 @@ set(CMAKE_SYSTEM_VERSION 10.0 CACHE STRING "" FORCE)
project(soh LANGUAGES C CXX)
set(CMAKE_CXX_STANDARD 20 CACHE STRING "The C++ standard to use")
set(CMAKE_C_STANDARD 17 CACHE STRING "The C standard to use")
set(CMAKE_C_STANDARD 23 CACHE STRING "The C standard to use")
if (CMAKE_SYSTEM_NAME STREQUAL "Darwin")
enable_language(OBJCXX)
@@ -19,15 +19,15 @@ set (BUILD_SHARED_LIBS OFF CACHE STRING "install/link shared instead of static l
# Set target arch type if empty. Visual studio solution generator provides it.
################################################################################
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
if(NOT CMAKE_VS_PLATFORM_NAME)
set(CMAKE_VS_PLATFORM_NAME "x64")
endif()
message("${CMAKE_VS_PLATFORM_NAME} architecture in use")
if(NOT CMAKE_VS_PLATFORM_NAME)
set(CMAKE_VS_PLATFORM_NAME "x64")
endif()
message("${CMAKE_VS_PLATFORM_NAME} architecture in use")
if(NOT ("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64"
OR "${CMAKE_VS_PLATFORM_NAME}" STREQUAL "Win32"))
message(FATAL_ERROR "${CMAKE_VS_PLATFORM_NAME} arch is not supported!")
endif()
if(NOT ("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64"
OR "${CMAKE_VS_PLATFORM_NAME}" STREQUAL "Win32"))
message(FATAL_ERROR "${CMAKE_VS_PLATFORM_NAME} arch is not supported!")
endif()
endif()
################################################################################
@@ -138,20 +138,27 @@ endforeach()
if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
set_source_files_properties(soh/OTRGlobals.cpp PROPERTIES COMPILE_FLAGS "/utf-8")
set_source_files_properties(soh/Enhancements/tts/tts.cpp PROPERTIES COMPILE_FLAGS "/utf-8")
set_source_files_properties(soh/Enhancements/custom-message/CustomMessageManager.cpp PROPERTIES COMPILE_FLAGS "/utf-8")
set_source_files_properties(soh/Enhancements/custom-message/CustomMessageManager.h PROPERTIES COMPILE_FLAGS "/utf-8")
endif()
# handle Network removals
if (!BUILD_REMOTE_CONTROL)
list(FILTER soh__ EXCLUDE REGEX "soh/Enhancements/crowd-control/*")
list(FILTER soh__ EXCLUDE REGEX "soh/Enhancements/crowd-control/")
endif()
# handle speechsynthesizer removals
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
list(FILTER soh__ EXCLUDE REGEX "soh/Enhancements/speechsynthesizer/Darwin*")
list(FILTER soh__ EXCLUDE REGEX "soh/Enhancements/speechsynthesizer/Darwin")
elseif (CMAKE_SYSTEM_NAME STREQUAL "Darwin")
list(FILTER soh__ EXCLUDE REGEX "soh/Enhancements/speechsynthesizer/SAPI*")
list(FILTER soh__ EXCLUDE REGEX "soh/Enhancements/speechsynthesizer/SAPI")
else()
list(FILTER soh__ EXCLUDE REGEX "soh/Enhancements/speechsynthesizer/(Darwin|SAPI).*")
list(FILTER soh__ EXCLUDE REGEX "soh/Enhancements/speechsynthesizer/(Darwin|SAPI)")
endif()
find_library(ESPEAK espeak-ng)
if (NOT ESPEAK)
list(FILTER soh__ EXCLUDE REGEX "soh/Enhancements/speechsynthesizer/ESpeak")
endif()
# soh/Extractor {{{
@@ -177,12 +184,12 @@ file(GLOB_RECURSE src__ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "src/*.c" "src/*.h"
set_source_files_properties(${src__} PROPERTIES COMPILE_OPTIONS "${WARNING_OVERRIDE}")
list(APPEND src__ ${CMAKE_CURRENT_SOURCE_DIR}/Resource.rc)
list(FILTER src__ EXCLUDE REGEX "src/dmadata/*")
list(FILTER src__ EXCLUDE REGEX "src/elf_message/*")
list(FILTER src__ EXCLUDE REGEX "src/libultra/io/*")
list(FILTER src__ EXCLUDE REGEX "src/libultra/libc/*")
list(FILTER src__ EXCLUDE REGEX "src/libultra/os/*")
list(FILTER src__ EXCLUDE REGEX "src/libultra/rmon/*")
list(FILTER src__ EXCLUDE REGEX "src/dmadata/")
list(FILTER src__ EXCLUDE REGEX "src/elf_message/")
list(FILTER src__ EXCLUDE REGEX "src/libultra/io/")
list(FILTER src__ EXCLUDE REGEX "src/libultra/libc/")
list(FILTER src__ EXCLUDE REGEX "src/libultra/os/")
list(FILTER src__ EXCLUDE REGEX "src/libultra/rmon/")
list(APPEND src__ "src/libultra/libc/sprintf.c")
list(REMOVE_ITEM src__ "src/libultra/gu/cosf.c")
list(REMOVE_ITEM src__ "src/libultra/gu/lookat.c")
@@ -225,85 +232,68 @@ endif()
set(ROOT_NAMESPACE soh)
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
set_target_properties(${PROJECT_NAME} PROPERTIES
VS_GLOBAL_KEYWORD "Win32Proj"
)
if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64")
set_target_properties(${PROJECT_NAME} PROPERTIES
INTERPROCEDURAL_OPTIMIZATION_RELEASE "TRUE"
)
elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "Win32")
set_target_properties(${PROJECT_NAME} PROPERTIES
INTERPROCEDURAL_OPTIMIZATION_RELEASE "TRUE"
)
endif()
set_target_properties(${PROJECT_NAME} PROPERTIES
VS_GLOBAL_KEYWORD "Win32Proj"
)
if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64")
set_target_properties(${PROJECT_NAME} PROPERTIES
INTERPROCEDURAL_OPTIMIZATION_RELEASE "TRUE"
)
elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "Win32")
set_target_properties(${PROJECT_NAME} PROPERTIES
INTERPROCEDURAL_OPTIMIZATION_RELEASE "TRUE"
)
endif()
elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
set_target_properties(${PROJECT_NAME} PROPERTIES
XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES
OUTPUT_NAME "soh-macos"
)
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
set_target_properties(${PROJECT_NAME} PROPERTIES
OUTPUT_NAME "soh.elf"
)
set_target_properties(${PROJECT_NAME} PROPERTIES
OUTPUT_NAME "soh.elf"
)
endif()
################################################################################
# MSVC runtime library
################################################################################
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
get_property(MSVC_RUNTIME_LIBRARY_DEFAULT TARGET ${PROJECT_NAME} PROPERTY MSVC_RUNTIME_LIBRARY)
if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64")
string(CONCAT "MSVC_RUNTIME_LIBRARY_STR"
$<$<CONFIG:Debug>:
MultiThreadedDebug
>
$<$<CONFIG:Release>:
MultiThreaded
>
$<$<NOT:$<OR:$<CONFIG:Debug>,$<CONFIG:Release>>>:${MSVC_RUNTIME_LIBRARY_DEFAULT}>
)
elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "Win32")
string(CONCAT "MSVC_RUNTIME_LIBRARY_STR"
$<$<CONFIG:Debug>:
MultiThreadedDebug
>
$<$<CONFIG:Release>:
MultiThreaded
>
$<$<NOT:$<OR:$<CONFIG:Debug>,$<CONFIG:Release>>>:${MSVC_RUNTIME_LIBRARY_DEFAULT}>
)
endif()
set_target_properties(${PROJECT_NAME} PROPERTIES MSVC_RUNTIME_LIBRARY ${MSVC_RUNTIME_LIBRARY_STR})
get_property(MSVC_RUNTIME_LIBRARY_DEFAULT TARGET ${PROJECT_NAME} PROPERTY MSVC_RUNTIME_LIBRARY)
if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64")
string(CONCAT "MSVC_RUNTIME_LIBRARY_STR"
$<$<CONFIG:Debug>:
MultiThreadedDebug
>
$<$<CONFIG:Release>:
MultiThreaded
>
$<$<NOT:$<OR:$<CONFIG:Debug>,$<CONFIG:Release>>>:${MSVC_RUNTIME_LIBRARY_DEFAULT}>
)
elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "Win32")
string(CONCAT "MSVC_RUNTIME_LIBRARY_STR"
$<$<CONFIG:Debug>:
MultiThreadedDebug
>
$<$<CONFIG:Release>:
MultiThreaded
>
$<$<NOT:$<OR:$<CONFIG:Debug>,$<CONFIG:Release>>>:${MSVC_RUNTIME_LIBRARY_DEFAULT}>
)
endif()
set_target_properties(${PROJECT_NAME} PROPERTIES MSVC_RUNTIME_LIBRARY ${MSVC_RUNTIME_LIBRARY_STR})
endif()
################################################################################
# Find/download Boost
# Find/download Dr Libs (For custom audio)
################################################################################
include(FetchContent)
FetchContent_Declare(
Boost
URL https://archives.boost.io/release/1.81.0/source/boost_1_81_0.tar.gz
URL_HASH SHA256=205666dea9f6a7cfed87c7a6dfbeb52a2c1b9de55712c9c1a87735d7181452b6
SOURCE_SUBDIR "null" # Set to a nonexistent directory so boost is not built (we don't need to build it)
DOWNLOAD_EXTRACT_TIMESTAMP false # supress timestamp warning, not needed since the url wont change
dr_libs
GIT_REPOSITORY https://github.com/mackron/dr_libs.git
GIT_TAG da35f9d6c7374a95353fd1df1d394d44ab66cf01
)
FetchContent_MakeAvailable(dr_libs)
set(Boost_NO_BOOST_CMAKE false)
set(BOOST_INCLUDEDIR ${FETCHCONTENT_BASE_DIR}/boost-src) # Location where FetchContent stores the source
message("Searching for Boost installation")
find_package(Boost)
if (NOT ${Boost_FOUND})
message("Boost not found. Downloading now...")
FetchContent_MakeAvailable(Boost)
message("Boost downloaded to " ${FETCHCONTENT_BASE_DIR}/boost-src)
set(BOOST-INCLUDE ${FETCHCONTENT_BASE_DIR}/boost-src)
else()
message("Boost found in " ${Boost_INCLUDE_DIRS})
set(BOOST-INCLUDE ${Boost_INCLUDE_DIRS})
endif()
################################################################################
# Compile definitions
################################################################################
find_package(SDL2)
set(SDL2-INCLUDE ${SDL2_INCLUDE_DIRS})
@@ -318,113 +308,103 @@ if (BUILD_REMOTE_CONTROL)
endif()
endif()
if (ESPEAK)
add_compile_definitions(ESPEAK=1)
endif()
################################################################################
# Compile definitions
################################################################################
target_include_directories(${PROJECT_NAME} PRIVATE assets
${CMAKE_CURRENT_SOURCE_DIR}/include/
${CMAKE_CURRENT_SOURCE_DIR}/src/
${CMAKE_CURRENT_SOURCE_DIR}/../libultraship
${CMAKE_CURRENT_SOURCE_DIR}/include/
${CMAKE_CURRENT_SOURCE_DIR}/src/
${CMAKE_CURRENT_SOURCE_DIR}/../libultraship/include
${CMAKE_CURRENT_SOURCE_DIR}/../libultraship/src
${CMAKE_CURRENT_SOURCE_DIR}/../libultraship/src/log
${CMAKE_CURRENT_SOURCE_DIR}/../libultraship/src/debug
${CMAKE_CURRENT_SOURCE_DIR}/../libultraship/src/menu
${CMAKE_CURRENT_SOURCE_DIR}/../libultraship/src/utils
${CMAKE_CURRENT_SOURCE_DIR}/../libultraship/src/utils/binarytools
${CMAKE_CURRENT_SOURCE_DIR}/../libultraship/src/config
${CMAKE_CURRENT_SOURCE_DIR}/../libultraship/src/resource
${CMAKE_CURRENT_SOURCE_DIR}/../libultraship/src/resource/type
${CMAKE_CURRENT_SOURCE_DIR}/../libultraship/src/resource/factory
${CMAKE_CURRENT_SOURCE_DIR}/../libultraship/src/audio
${CMAKE_CURRENT_SOURCE_DIR}/../libultraship/src/window
${CMAKE_CURRENT_SOURCE_DIR}/../libultraship/src/window/gui
${CMAKE_CURRENT_SOURCE_DIR}/../libultraship/src/config
${CMAKE_CURRENT_SOURCE_DIR}/../libultraship/src/public
${CMAKE_CURRENT_SOURCE_DIR}/../libultraship/src/public/libultra
${CMAKE_CURRENT_SOURCE_DIR}/../libultraship/src/public/bridge
${CMAKE_CURRENT_SOURCE_DIR}/../libultraship/extern
${CMAKE_CURRENT_SOURCE_DIR}/../libultraship/extern/tinyxml2
${CMAKE_CURRENT_SOURCE_DIR}/../libultraship/libultraship/Lib/
${CMAKE_CURRENT_SOURCE_DIR}/../libultraship/libultraship/Lib/libjpeg/include/
${CMAKE_CURRENT_SOURCE_DIR}/../libultraship/src/graphic/Fast3D/U64/PR
${CMAKE_CURRENT_SOURCE_DIR}/../libultraship/src/graphic
${CMAKE_CURRENT_SOURCE_DIR}/../ZAPDTR/ZAPD/resource/type
${SDL2-INCLUDE}
${SDL2-INCLUDE}
${SDL2-NET-INCLUDE}
${BOOST-INCLUDE}
${CMAKE_CURRENT_SOURCE_DIR}/assets/
.
${CMAKE_CURRENT_SOURCE_DIR}/assets/
${dr_libs_SOURCE_DIR}
.
)
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64")
target_compile_definitions(${PROJECT_NAME} PRIVATE
"$<$<CONFIG:Debug>:"
"_DEBUG;"
"_CRT_SECURE_NO_WARNINGS;"
"ENABLE_DX11;"
">"
"$<$<CONFIG:Release>:"
"NDEBUG"
">"
if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64")
target_compile_definitions(${PROJECT_NAME} PRIVATE
"$<$<CONFIG:Debug>:"
"_DEBUG;"
"_CRT_SECURE_NO_WARNINGS;"
"ENABLE_DX11;"
">"
"$<$<CONFIG:Release>:"
"NDEBUG;"
">"
"$<$<BOOL:${BUILD_REMOTE_CONTROL}>:ENABLE_REMOTE_CONTROL>"
"INCLUDE_GAME_PRINTF;"
"INCLUDE_GAME_PRINTF;"
"F3DEX_GBI_2"
"UNICODE;"
"_UNICODE"
STORMLIB_NO_AUTO_LINK
"_CRT_SECURE_NO_WARNINGS;"
"UNICODE;"
"_UNICODE"
SPDLOG_ACTIVE_LEVEL=${SPDLOG_MIN_CUTOFF}
LOG_LEVEL_GAME_PRINTS=${SPDLOG_LEVEL_OFF}
STORMLIB_NO_AUTO_LINK
"_CRT_SECURE_NO_WARNINGS;"
NOMINMAX
)
elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "Win32")
target_compile_definitions(${PROJECT_NAME} PRIVATE
"$<$<CONFIG:Debug>:"
"NOINCLUDE_GAME_PRINTF;"
"_DEBUG;"
"_CRT_SECURE_NO_WARNINGS;"
"ENABLE_OPENGL"
">"
"$<$<CONFIG:Release>:"
"NDEBUG;"
">"
"INCLUDE_GAME_PRINTF;"
)
elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "Win32")
target_compile_definitions(${PROJECT_NAME} PRIVATE
"$<$<CONFIG:Debug>:"
"NOINCLUDE_GAME_PRINTF;"
"_DEBUG;"
"_CRT_SECURE_NO_WARNINGS;"
"ENABLE_OPENGL;"
">"
"$<$<CONFIG:Release>:"
"NDEBUG;"
">"
"INCLUDE_GAME_PRINTF;"
"F3DEX_GBI_2"
"WIN32;"
"UNICODE;"
"_UNICODE"
STORMLIB_NO_AUTO_LINK
"WIN32;"
"UNICODE;"
"_UNICODE;"
SPDLOG_ACTIVE_LEVEL=${SPDLOG_MIN_CUTOFF}
LOG_LEVEL_GAME_PRINTS=${SPDLOG_LEVEL_OFF}
STORMLIB_NO_AUTO_LINK
NOMINMAX
)
endif()
)
endif()
elseif (CMAKE_SYSTEM_NAME STREQUAL "CafeOS")
target_compile_definitions(${PROJECT_NAME} PRIVATE
"$<$<CONFIG:Debug>:"
"_DEBUG"
">"
"$<$<CONFIG:Release>:"
"NDEBUG"
">"
"F3DEX_GBI_2"
"SPDLOG_ACTIVE_LEVEL=3;"
"SPDLOG_NO_THREAD_ID;"
target_compile_definitions(${PROJECT_NAME} PRIVATE
"$<$<CONFIG:Debug>:"
"_DEBUG;"
">"
"$<$<CONFIG:Release>:"
"NDEBUG;"
">"
"F3DEX_GBI_2;"
"SPDLOG_NO_THREAD_ID;"
"SPDLOG_NO_TLS;"
"STBI_NO_THREAD_LOCALS;"
)
"STBI_NO_THREAD_LOCALS;"
SPDLOG_ACTIVE_LEVEL=${SPDLOG_MIN_CUTOFF}
LOG_LEVEL_GAME_PRINTS=${SPDLOG_LEVEL_OFF}
)
elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU|Clang|AppleClang")
target_compile_definitions(${PROJECT_NAME} PRIVATE
"$<$<CONFIG:Debug>:"
"_DEBUG"
">"
"$<$<CONFIG:Release>:"
"NDEBUG"
">"
"F3DEX_GBI_2"
"$<$<BOOL:${BUILD_REMOTE_CONTROL}>:ENABLE_REMOTE_CONTROL>"
"SPDLOG_ACTIVE_LEVEL=0;"
"_CONSOLE;"
"_CRT_SECURE_NO_WARNINGS;"
"ENABLE_OPENGL;"
"UNICODE;"
"_UNICODE"
)
target_compile_definitions(${PROJECT_NAME} PRIVATE
"$<$<CONFIG:Debug>:"
"_DEBUG;"
">"
"$<$<CONFIG:Release>:"
"NDEBUG;"
">"
"F3DEX_GBI_2;"
"$<$<BOOL:${BUILD_REMOTE_CONTROL}>:ENABLE_REMOTE_CONTROL>;"
"_CONSOLE;"
"_CRT_SECURE_NO_WARNINGS;"
"ENABLE_OPENGL;"
"UNICODE;"
"_UNICODE;"
SPDLOG_ACTIVE_LEVEL=${SPDLOG_MIN_CUTOFF}
LOG_LEVEL_GAME_PRINTS=${SPDLOG_LEVEL_OFF}
)
endif()
################################################################################
# Compile and link options
@@ -504,6 +484,7 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang|AppleClang")
if (CMAKE_SYSTEM_NAME STREQUAL "Darwin")
target_compile_options(${PROJECT_NAME} PRIVATE
-Wall -Wextra -Wno-error
-Wformat-security
-Wno-return-type
-Wno-unused-parameter
-Wno-unused-function
@@ -512,10 +493,10 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang|AppleClang")
-Wno-parentheses
-Wno-narrowing
-Wno-missing-braces
-Wno-int-conversion
$<$<COMPILE_LANGUAGE:C>:
-Werror-implicit-function-declaration
-Wno-incompatible-pointer-types
-Wno-int-conversion
>
$<$<COMPILE_LANGUAGE:CXX>:-fpermissive>
$<$<COMPILE_LANGUAGE:CXX>:
@@ -531,6 +512,7 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang|AppleClang")
elseif (CMAKE_SYSTEM_NAME STREQUAL "NintendoSwitch")
target_compile_options(${PROJECT_NAME} PRIVATE
-Wall -Wextra -Wno-error
-Wformat-security
-Wno-return-type
-Wno-unused-parameter
-Wno-unused-function
@@ -576,11 +558,12 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang|AppleClang")
)
else()
if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
set(CPU_OPTION -msse2 -mfpmath=sse)
set(CPU_OPTION -msse2 -mfpmath=sse)
endif()
target_compile_options(${PROJECT_NAME} PRIVATE
-Wall -Wextra -Wno-error
-Wformat-security
-Wno-unused-parameter
-Wno-unused-function
-Wno-unused-variable
@@ -588,20 +571,21 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang|AppleClang")
-Wno-parentheses
-Wno-narrowing
-Wno-missing-braces
-Wno-int-conversion
-Wno-implicit-int
$<$<COMPILE_LANGUAGE:C>:
-Werror-implicit-function-declaration
-Wno-implicit-int
-Wno-incompatible-pointer-types
-Wno-int-conversion
>
$<$<COMPILE_LANGUAGE:CXX>:-fpermissive>
$<$<COMPILE_LANGUAGE:CXX>:-Wno-deprecated-enum-enum-conversion>
-pthread
${CPU_OPTION}
${CPU_OPTION}
)
target_link_options(${PROJECT_NAME} PRIVATE
-pthread
#-fsanitize=address
-Wl,-export-dynamic
)
endif()
@@ -610,21 +594,22 @@ endif()
# Pre build events
################################################################################
if (CMAKE_GENERATOR MATCHES "Visual Studio")
set(VS_COPY_ASSETS_CMD ${CMAKE_COMMAND} -E copy_directory_if_different $<TARGET_FILE_DIR:soh>/assets ${CMAKE_BINARY_DIR}/soh/assets)
add_custom_command(
TARGET ${PROJECT_NAME}
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different ${CMAKE_SOURCE_DIR}/soh/assets/extractor ${CMAKE_BINARY_DIR}/soh/assets
COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different ${CMAKE_SOURCE_DIR}/soh/assets/xml ${CMAKE_BINARY_DIR}/soh/assets/xml
)
endif()
if(NOT CMAKE_SYSTEM_NAME MATCHES "NintendoSwitch|CafeOS")
add_custom_command(
TARGET ${PROJECT_NAME}
POST_BUILD
COMMENT "Copying asset xmls..."
COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different ${CMAKE_SOURCE_DIR}/soh/assets/extractor $<TARGET_FILE_DIR:soh>/assets/extractor
COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different ${CMAKE_SOURCE_DIR}/soh/assets/xml $<TARGET_FILE_DIR:soh>/assets/extractor/xmls
COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different ${CMAKE_SOURCE_DIR}/OTRExporter/CFG/filelists $<TARGET_FILE_DIR:soh>/assets/extractor/filelists
COMMAND ${CMAKE_COMMAND} -E make_directory $<TARGET_FILE_DIR:soh>/assets/extractor/symbols
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_SOURCE_DIR}/OTRExporter/CFG/ActorList_OoTMqDbg.txt $<TARGET_FILE_DIR:soh>/assets/extractor/symbols
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_SOURCE_DIR}/OTRExporter/CFG/ObjectList_OoTMqDbg.txt $<TARGET_FILE_DIR:soh>/assets/extractor/symbols
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_SOURCE_DIR}/OTRExporter/CFG/SymbolMap_OoTMqDbg.txt $<TARGET_FILE_DIR:soh>/assets/extractor/symbols
COMMAND ${VS_COPY_ASSETS_CMD}
TARGET ${PROJECT_NAME}
POST_BUILD
COMMENT "Copying asset xmls..."
COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different ${CMAKE_SOURCE_DIR}/soh/assets/extractor $<TARGET_FILE_DIR:soh>/assets
COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different ${CMAKE_SOURCE_DIR}/soh/assets/xml $<TARGET_FILE_DIR:soh>/assets/xml
COMMAND ${CMAKE_COMMAND} -E make_directory $<TARGET_FILE_DIR:soh>/assets/symbols
# COMMAND ${VS_COPY_ASSETS_CMD}
)
endif()
################################################################################
@@ -641,34 +626,49 @@ endif()
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
find_package(glfw3 REQUIRED)
if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64")
set(ADDITIONAL_LIBRARY_DEPENDENCIES
"libultraship;"
"ZAPDLib;"
"glu32;"
"SDL2::SDL2;"
"SDL2::SDL2main;"
find_package(Ogg CONFIG REQUIRED)
link_libraries(Ogg::ogg)
find_package(Vorbis CONFIG REQUIRED)
link_libraries(Vorbis::vorbisfile)
find_package(Opus CONFIG REQUIRED)
link_libraries(Opus::opus)
find_package(OpusFile CONFIG REQUIRED)
link_libraries(OpusFile::opusfile CONFIG REQUIRED)
if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64")
set(ADDITIONAL_LIBRARY_DEPENDENCIES
"libultraship;"
"ZAPDLib;"
"glu32;"
"SDL2::SDL2;"
"SDL2::SDL2main;"
"$<$<BOOL:${BUILD_REMOTE_CONTROL}>:SDL2_net::SDL2_net-static>"
"glfw;"
"winmm;"
"imm32;"
"version;"
"setupapi"
)
elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "Win32")
set(ADDITIONAL_LIBRARY_DEPENDENCIES
"libultraship;"
"ZAPDLib;"
"glu32;"
"SDL2::SDL2;"
"SDL2::SDL2main;"
"glfw;"
"winmm;"
"imm32;"
"version;"
"setupapi"
)
endif()
"glfw;"
"winmm;"
"imm32;"
"version;"
"setupapi"
"Ogg::ogg"
"Opus::opus"
"Vorbis::vorbis"
"Vorbis::vorbisenc"
"Vorbis::vorbisfile"
"OpusFile::opusfile"
)
elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "Win32")
set(ADDITIONAL_LIBRARY_DEPENDENCIES
"libultraship;"
"ZAPDLib;"
"glu32;"
"SDL2::SDL2;"
"SDL2::SDL2main;"
"glfw;"
"winmm;"
"imm32;"
"version;"
"setupapi"
)
endif()
elseif(CMAKE_SYSTEM_NAME STREQUAL "NintendoSwitch")
find_package(SDL2)
set(THREADS_PREFER_PTHREAD_FLAG ON)
@@ -694,14 +694,24 @@ else()
find_package(SDL2)
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
set(ADDITIONAL_LIBRARY_DEPENDENCIES
"libultraship;"
"ZAPDLib;"
SDL2::SDL2
find_package(Ogg REQUIRED)
find_package(Vorbis REQUIRED)
find_package(Opus REQUIRED)
find_package(OpusFile REQUIRED)
set(ADDITIONAL_LIBRARY_DEPENDENCIES
"libultraship;"
"ZAPDLib;"
SDL2::SDL2
"Ogg::ogg"
"Vorbis::vorbis"
"Vorbis::vorbisenc"
"Vorbis::vorbisfile"
"Opus::opus"
"Opusfile::Opusfile"
"$<$<BOOL:${BUILD_REMOTE_CONTROL}>:SDL2_net::SDL2_net>"
${CMAKE_DL_LIBS}
Threads::Threads
)
${CMAKE_DL_LIBS}
Threads::Threads
)
endif()
if(NOT CMAKE_SYSTEM_NAME MATCHES "Darwin|NintendoSwitch|CafeOS")
@@ -710,21 +720,17 @@ endif()
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
INSTALL(FILES $<TARGET_PDB_FILE:soh> DESTINATION ./debug COMPONENT ship)
INSTALL(FILES ${CMAKE_BINARY_DIR}/soh/soh.otr DESTINATION . COMPONENT ship)
endif()
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/appimage/soh.sh.in ${CMAKE_BINARY_DIR}/linux/soh.sh @ONLY)
INSTALL(FILES ${CMAKE_BINARY_DIR}/soh/soh.o2r DESTINATION . COMPONENT ship)
endif()
find_program(CURL NAMES curl DOC "Path to the curl program. Used to download files.")
execute_process(COMMAND ${CURL} -sSfL https://raw.githubusercontent.com/gabomdq/SDL_GameControllerDB/master/gamecontrollerdb.txt -o ${CMAKE_BINARY_DIR}/gamecontrollerdb.txt OUTPUT_VARIABLE RESULT)
execute_process(COMMAND ${CURL} -sSfL https://raw.githubusercontent.com/mdqinc/SDL_GameControllerDB/master/gamecontrollerdb.txt -o ${CMAKE_BINARY_DIR}/gamecontrollerdb.txt OUTPUT_VARIABLE RESULT)
if("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/macosx/Info.plist.in ${CMAKE_BINARY_DIR}/macosx/Info.plist @ONLY)
INSTALL(TARGETS soh DESTINATION ../MacOS COMPONENT ship)
INSTALL(FILES ${CMAKE_BINARY_DIR}/gamecontrollerdb.txt DESTINATION ../MacOS COMPONENT ship)
INSTALL(FILES ${CMAKE_BINARY_DIR}/soh/soh.otr DESTINATION ../Resources COMPONENT ship)
INSTALL(FILES ${CMAKE_BINARY_DIR}/soh/soh.o2r DESTINATION ../Resources COMPONENT ship)
elseif(NOT "${CMAKE_SYSTEM_NAME}" MATCHES "NintendoSwitch|CafeOS")
INSTALL(FILES ${CMAKE_BINARY_DIR}/gamecontrollerdb.txt DESTINATION . COMPONENT ship)
endif()
@@ -758,10 +764,10 @@ elseif(CMAKE_SYSTEM_NAME MATCHES "CafeOS")
wut_create_rpx(${PROJECT_NAME})
wut_create_wuhb(${PROJECT_NAME}
NAME "Ship of Harkinian"
SHORTNAME "SoH"
AUTHOR "${PROJECT_TEAM}"
ICON ${CMAKE_CURRENT_SOURCE_DIR}/icon.jpg
NAME "Ship of Harkinian"
SHORTNAME "SoH"
AUTHOR "${PROJECT_TEAM}"
ICON ${CMAKE_CURRENT_SOURCE_DIR}/icon.jpg
)
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/soh.rpx ${CMAKE_CURRENT_BINARY_DIR}/soh.wuhb DESTINATION . COMPONENT ship)

View File

@@ -1,6 +1,6 @@
// Microsoft Visual C++ generated resource script.
//
#include "resource.h"
#include <ship/resource/Resource.h>
#include "properties.h"
#define APSTUDIO_READONLY_SYMBOLS

View File

@@ -25,5 +25,5 @@
"quest_sel_vanilla": "Quest - Original",
"quest_sel_mq": "Quest - Master Quest",
"quest_sel_randomizer": "Quest - Randomizer",
"quest_sel_boss_rush": "Quest - Bosse Rush"
}
"quest_sel_boss_rush": "Quest - Boss Rush"
}

View File

@@ -2,6 +2,7 @@
"health": "Health - $0 Hearts",
"magic": "Magic - $0",
"rupees": "Rupees - $0",
"keys": "Keys - $0",
"floor": "Floor $0",
"basement": "Basement $0",
"item_menu": "Select Item",
@@ -171,6 +172,7 @@
"153": "STICK UPGRADE 30",
"154": "NUT UPGRADE 30",
"155": "NUT UPGRADE 40",
"157": "Roc's Feather",
"255": "",
"256": "Haunted Wasteland",
"257": "Gerudos Fortress",

View File

@@ -2,6 +2,7 @@
"health": "Vie - $0 Coeurs",
"magic": "Magie - $0",
"rupees": "Rubis - $0",
"keys": "Clés - $0",
"floor": "Étage $0",
"basement": "Sous-sol $0",
"item_menu": "Inventaire",
@@ -171,6 +172,7 @@
"153": "AMÉLIORATION BÂTON MOJO 30",
"154": "AMÉLIORATION NOIX MOJO 30",
"155": "AMÉLIORATION NOIX MOJO 40",
"157": "Plume de Roc",
"255": "",
"256": "Désert Hanté",
"257": "Forteresse Gerudo",

View File

@@ -2,6 +2,7 @@
"health": "Energie - $0 Herzen",
"magic": "Magie - $0",
"rupees": "Rubine - $0",
"keys": "Schlüssel - $0",
"floor": "Etage $0",
"basement": "Keller $0",
"item_menu": "Gegenstände",
@@ -46,7 +47,7 @@
"28": "Blaues Feuer",
"29": "Käfer",
"30": "Nachtschwärmer",
"31": "Milch (1/2)",
"31": "Milch (Halbe Füllung)",
"32": "Irrlicht",
"33": "Seltsames Ei",
"34": "Huhn",
@@ -66,7 +67,7 @@
"48": "Schimmelpilz",
"49": "Modertrank",
"50": "Säge",
"51": "Goronen-Schwert (zerbrochen)",
"51": "Zerbr. Goronen-Schwert",
"52": "Rezept",
"53": "Glotzfrosch",
"54": "Augentropfen",
@@ -77,7 +78,7 @@
"59": "Kokiri-Schwert",
"60": "Master-Schwert",
"61": "Langschwert",
"62": "Deku-schild",
"62": "Deku-Schild",
"63": "Hylia-Schild",
"64": "Spiegel-Schild",
"65": "Kokiri-Rüstung",
@@ -98,13 +99,13 @@
"80": "Goronen-Armband",
"81": "Krafthandschuh",
"82": "Titanhandschuh",
"83": "Silberschuppe",
"84": "Goldschuppe",
"85": "Langschwert (gebrochen)",
"83": "Silberne Schuppe",
"84": "Goldene Schuppe",
"85": "Zerbr. Langschwert",
"86": "Große Börse",
"87": "Riesenbörse",
"88": "Deku-Kerne",
"89": "Angel",
"89": "Angelrute",
"90": "Menuett des Waldes",
"91": "Bolero des Feuers",
"92": "Serenade des Wassers",
@@ -116,7 +117,7 @@
"98": "Salias Lied",
"99": "Hymne der Sonne",
"100": "Hymne der Zeit",
"101": "Song of Storms",
"101": "Hymne des Sturms",
"102": "Amulett des Waldes",
"103": "Amulett des Feuers",
"104": "Amulett des Wassers",
@@ -124,7 +125,7 @@
"106": "Amulett des Schattens",
"107": "Amulett des Lichts",
"108": "Kokiri-Smaragd",
"109": "Goronen-Opal",
"109": "Goronen-Rubin",
"110": "Zora-Saphir",
"111": "Stein des Wissens",
"112": "Gerudo-Paß",
@@ -135,8 +136,8 @@
"117": "Kompaß",
"118": "Labyrinth-Karte",
"119": "Kleiner Schlüssel",
"120": "MAGIE KLEIN",
"121": "MAGIE GROß",
"120": "Kleine Magieflasche",
"121": "Große Magieflasche",
"122": "Biggoron-Schwert",
"123": "UNGÜLTIG 1",
"124": "UNGÜLTIG 2",
@@ -153,24 +154,25 @@
"135": "50 Rubine",
"136": "200 Rubine",
"137": "UNGÜLTIG 8",
"138": "STÄBE 5",
"139": "STÄBE 10",
"140": "NÜSSE 5",
"141": "NÜSSE 10",
"138": "DEKU-STÄBE 5",
"139": "DEKU-STÄBE 10",
"140": "DEKU-NÜSSE 5",
"141": "DEKU-NÜSSE 10",
"142": "BOMBEN 5",
"143": "BOMBEN 10",
"144": "BOMBEN 20",
"145": "BOMBEN 30",
"146": "PFEILE KLEIN",
"147": "PFEILE MITTEL",
"148": "PFEILE GROß",
"149": "KERNE 30",
"146": "PFEILE 5",
"147": "PFEILE 10",
"148": "PFEILE 30",
"149": "DEKU-KERNE 30",
"150": "KRABBELMINEN 5",
"151": "KRABBELMINEN 20",
"152": "STAB UPGRADE 20",
"153": "STAB UPGRADE 30",
"154": "NUß UPGRADE 30",
"155": "NUß UPGRADE 40",
"152": "DEKU-STAB-KAPAZITÄT 20",
"153": "DEKU-STAB-KAPAZITÄT 30",
"154": "DEKU-NUẞ-KAPAZITÄT 30",
"155": "DEKU-NUẞ-KAPAZITÄT 40",
"157": "Greifenfeder",
"255": "",
"256": "Gespensterwüste",
"257": "Gerudo-Festung",

View File

@@ -9,7 +9,7 @@
"7": "Schattentempel",
"8": "Grund des Brunnens",
"9": "Eishöhle",
"10": "", // Treppe zu Ganondorfs Verließ (Keine Title-Card)
"10": "", // Treppe zu Ganondorfs Verlies (Keine Title-Card)
"11": "Gerudo-Arena",
"12": "Diebesversteck",
"13": "Ganons Schloß",
@@ -22,7 +22,7 @@
"20": "Reitendes Unheil - Phantom-Ganon",
"21": "Subterraner Lavadrachoid - Volvagia",
"22": "Aquamöbes Wassertentakel - Morpha",
"23": "Höllische Hexenarmada - Killa Ohmaz",
"23": "Höllische Hexenarmada - Twinrova",
"24": "Bestialische Schattenmonstrosität - Bongo Bongo",
"25": "Großmeister des Bösen - Ganondorf",
"26": "",
@@ -109,4 +109,4 @@
"107": "",
"108": "", // Debug: SRD Raum (Keine Title-Card)
"109": "" // Debug: Schatzkisten Teleport (Keine Title-Card)
}
}

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -1,19 +0,0 @@
<DisplayList Version="0">
<CallDisplayList Path="objects/gameplay_dangeon_keep/mat_gRandoPotDL_f3dlite_potrim"/>
<CallDisplayList Path="objects/gameplay_dangeon_keep/gRandoPotDL_tri_0"/>
<CallDisplayList Path="objects/gameplay_dangeon_keep/mat_gRandoPotDL_f3dlite_potface"/>
<CallDisplayList Path="objects/gameplay_dangeon_keep/gRandoPotDL_tri_1"/>
<CallDisplayList Path="objects/gameplay_dangeon_keep/mat_gRandoPotDL_f3dlite_potbase"/>
<CallDisplayList Path="objects/gameplay_dangeon_keep/gRandoPotDL_tri_2"/>
<CallDisplayList Path="objects/gameplay_dangeon_keep/mat_gRandoPotDL_f3dlite_potbottom"/>
<CallDisplayList Path="objects/gameplay_dangeon_keep/gRandoPotDL_tri_3"/>
<CallDisplayList Path="objects/gameplay_dangeon_keep/mat_gRandoPotDL_f3dlite_potvoid"/>
<CallDisplayList Path="objects/gameplay_dangeon_keep/gRandoPotDL_tri_4"/>
<PipeSync/>
<SetGeometryMode G_LIGHTING="1" />
<ClearGeometryMode G_TEXTURE_GEN="1" />
<SetCombineLERP A0="G_CCMUX_0" B0="G_CCMUX_0" C0="G_CCMUX_0" D0="G_CCMUX_SHADE" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_ENVIRONMENT" A1="G_CCMUX_0" B1="G_CCMUX_0" C1="G_CCMUX_0" D1="G_CCMUX_SHADE" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_ENVIRONMENT"/>
<Texture S="65535" T="65535" Level="0" Tile="0" On="0"/>
<EndDisplayList/>
</DisplayList>

View File

@@ -1,82 +0,0 @@
<Vertex Version="0">
<Vtx X="-35" Y="133" Z="-20" S="546" T="573" R="159" G="61" B="200" A="255"/>
<Vtx X="-35" Y="133" Z="20" S="305" T="573" R="159" G="61" B="56" A="255"/>
<Vtx X="-35" Y="146" Z="20" S="305" T="654" R="196" G="149" B="34" A="255"/>
<Vtx X="-35" Y="146" Z="-20" S="546" T="654" R="196" G="149" B="222" A="255"/>
<Vtx X="-43" Y="146" Z="25" S="278" T="699" R="169" G="178" B="50" A="255"/>
<Vtx X="-43" Y="146" Z="-25" S="572" T="699" R="169" G="178" B="206" A="255"/>
<Vtx X="-43" Y="160" Z="25" S="278" T="778" R="169" G="78" B="50" A="255"/>
<Vtx X="-43" Y="160" Z="-25" S="572" T="778" R="169" G="78" B="206" A="255"/>
<Vtx X="-29" Y="160" Z="17" S="325" T="858" R="60" G="107" B="222" A="255"/>
<Vtx X="-29" Y="160" Z="-17" S="526" T="858" R="60" G="107" B="34" A="255"/>
<Vtx X="-29" Y="134" Z="17" S="325" T="1008" R="87" G="78" B="206" A="255"/>
<Vtx X="-29" Y="134" Z="-17" S="526" T="1008" R="87" G="78" B="50" A="255"/>
<Vtx X="-35" Y="133" Z="20" S="10" T="1008" R="159" G="61" B="56" A="255"/>
<Vtx X="0" Y="133" Z="41" S="252" T="1008" R="0" G="61" B="112" A="255"/>
<Vtx X="0" Y="146" Z="41" S="252" T="927" R="0" G="149" B="69" A="255"/>
<Vtx X="-35" Y="146" Z="20" S="10" T="927" R="196" G="149" B="34" A="255"/>
<Vtx X="-35" Y="146" Z="20" S="10" T="927" R="196" G="149" B="34" A="255"/>
<Vtx X="0" Y="146" Z="41" S="252" T="927" R="0" G="149" B="69" A="255"/>
<Vtx X="0" Y="146" Z="49" S="278" T="882" R="0" G="178" B="101" A="255"/>
<Vtx X="-43" Y="146" Z="25" S="-16" T="882" R="169" G="178" B="50" A="255"/>
<Vtx X="0" Y="160" Z="49" S="278" T="803" R="0" G="78" B="101" A="255"/>
<Vtx X="-43" Y="160" Z="25" S="-16" T="803" R="169" G="78" B="50" A="255"/>
<Vtx X="0" Y="160" Z="34" S="232" T="723" R="0" G="107" B="187" A="255"/>
<Vtx X="-29" Y="160" Z="17" S="30" T="723" R="60" G="107" B="222" A="255"/>
<Vtx X="0" Y="134" Z="34" S="232" T="573" R="0" G="78" B="155" A="255"/>
<Vtx X="-29" Y="134" Z="17" S="30" T="573" R="87" G="78" B="206" A="255"/>
<Vtx X="0" Y="133" Z="-41" S="573" T="740" R="0" G="61" B="144" A="255"/>
<Vtx X="-35" Y="133" Z="-20" S="573" T="982" R="159" G="61" B="200" A="255"/>
<Vtx X="-35" Y="146" Z="-20" S="654" T="982" R="196" G="149" B="222" A="255"/>
<Vtx X="0" Y="146" Z="-41" S="654" T="740" R="0" G="149" B="187" A="255"/>
<Vtx X="-43" Y="146" Z="-25" S="699" T="1008" R="169" G="178" B="206" A="255"/>
<Vtx X="0" Y="146" Z="-49" S="699" T="714" R="0" G="178" B="155" A="255"/>
<Vtx X="0" Y="146" Z="-49" S="699" T="714" R="0" G="178" B="155" A="255"/>
<Vtx X="-43" Y="146" Z="-25" S="699" T="1008" R="169" G="178" B="206" A="255"/>
<Vtx X="-43" Y="160" Z="-25" S="778" T="1008" R="169" G="78" B="206" A="255"/>
<Vtx X="0" Y="160" Z="-49" S="778" T="714" R="0" G="78" B="155" A="255"/>
<Vtx X="-29" Y="160" Z="-17" S="858" T="962" R="60" G="107" B="34" A="255"/>
<Vtx X="0" Y="160" Z="-34" S="858" T="760" R="0" G="107" B="69" A="255"/>
<Vtx X="-29" Y="134" Z="-17" S="1008" T="962" R="87" G="78" B="50" A="255"/>
<Vtx X="0" Y="134" Z="-34" S="1008" T="760" R="0" G="78" B="101" A="255"/>
<Vtx X="35" Y="133" Z="20" S="687" T="137" R="97" G="61" B="56" A="255"/>
<Vtx X="35" Y="133" Z="-20" S="446" T="137" R="97" G="61" B="200" A="255"/>
<Vtx X="35" Y="146" Z="-20" S="446" T="218" R="60" G="149" B="222" A="255"/>
<Vtx X="35" Y="146" Z="20" S="687" T="218" R="60" G="149" B="34" A="255"/>
<Vtx X="43" Y="146" Z="-25" S="420" T="263" R="87" G="178" B="206" A="255"/>
<Vtx X="43" Y="146" Z="25" S="714" T="263" R="87" G="178" B="50" A="255"/>
<Vtx X="43" Y="160" Z="-25" S="420" T="342" R="87" G="78" B="206" A="255"/>
<Vtx X="43" Y="160" Z="25" S="714" T="342" R="87" G="78" B="50" A="255"/>
<Vtx X="29" Y="160" Z="-17" S="466" T="422" R="196" G="107" B="34" A="255"/>
<Vtx X="43" Y="160" Z="25" S="714" T="342" R="87" G="78" B="50" A="255"/>
<Vtx X="43" Y="160" Z="-25" S="420" T="342" R="87" G="78" B="206" A="255"/>
<Vtx X="29" Y="160" Z="17" S="667" T="422" R="196" G="107" B="222" A="255"/>
<Vtx X="29" Y="134" Z="-17" S="466" T="572" R="169" G="78" B="50" A="255"/>
<Vtx X="29" Y="134" Z="17" S="667" T="572" R="169" G="78" B="206" A="255"/>
<Vtx X="35" Y="133" Z="-20" S="-16" T="305" R="97" G="61" B="200" A="255"/>
<Vtx X="0" Y="133" Z="-41" S="-16" T="546" R="0" G="61" B="144" A="255"/>
<Vtx X="0" Y="146" Z="-41" S="65" T="546" R="0" G="149" B="187" A="255"/>
<Vtx X="35" Y="146" Z="-20" S="65" T="305" R="60" G="149" B="222" A="255"/>
<Vtx X="0" Y="146" Z="-49" S="110" T="572" R="0" G="178" B="155" A="255"/>
<Vtx X="43" Y="146" Z="-25" S="110" T="278" R="87" G="178" B="206" A="255"/>
<Vtx X="0" Y="160" Z="-49" S="189" T="572" R="0" G="78" B="155" A="255"/>
<Vtx X="43" Y="160" Z="-25" S="189" T="278" R="87" G="78" B="206" A="255"/>
<Vtx X="0" Y="160" Z="-34" S="269" T="526" R="0" G="107" B="69" A="255"/>
<Vtx X="29" Y="160" Z="-17" S="269" T="325" R="196" G="107" B="34" A="255"/>
<Vtx X="29" Y="160" Z="-17" S="269" T="325" R="196" G="107" B="34" A="255"/>
<Vtx X="0" Y="160" Z="-34" S="269" T="526" R="0" G="107" B="69" A="255"/>
<Vtx X="0" Y="134" Z="-34" S="419" T="526" R="0" G="78" B="101" A="255"/>
<Vtx X="29" Y="134" Z="-17" S="419" T="325" R="169" G="78" B="50" A="255"/>
<Vtx X="0" Y="133" Z="41" S="419" T="252" R="0" G="61" B="112" A="255"/>
<Vtx X="35" Y="133" Z="20" S="419" T="10" R="97" G="61" B="56" A="255"/>
<Vtx X="35" Y="146" Z="20" S="338" T="10" R="60" G="149" B="34" A="255"/>
<Vtx X="0" Y="146" Z="41" S="338" T="252" R="0" G="149" B="69" A="255"/>
<Vtx X="43" Y="146" Z="25" S="293" T="-16" R="87" G="178" B="50" A="255"/>
<Vtx X="0" Y="146" Z="49" S="293" T="278" R="0" G="178" B="101" A="255"/>
<Vtx X="43" Y="160" Z="25" S="214" T="-16" R="87" G="78" B="50" A="255"/>
<Vtx X="0" Y="160" Z="49" S="214" T="278" R="0" G="78" B="101" A="255"/>
<Vtx X="29" Y="160" Z="17" S="134" T="30" R="196" G="107" B="222" A="255"/>
<Vtx X="0" Y="160" Z="34" S="134" T="232" R="0" G="107" B="187" A="255"/>
<Vtx X="29" Y="134" Z="17" S="-16" T="30" R="169" G="78" B="206" A="255"/>
<Vtx X="0" Y="134" Z="34" S="-16" T="232" R="0" G="78" B="155" A="255"/>
</Vertex>

View File

@@ -1,26 +0,0 @@
<Vertex Version="0">
<Vtx X="0" Y="0" Z="-51" S="240" T="240" R="0" G="150" B="185" A="255"/>
<Vtx X="0" Y="43" Z="-82" S="240" T="-16" R="0" G="220" B="134" A="255"/>
<Vtx X="71" Y="43" Z="-41" S="-16" T="-16" R="106" G="220" B="195" A="255"/>
<Vtx X="44" Y="0" Z="-25" S="-16" T="240" R="61" G="150" B="221" A="255"/>
<Vtx X="44" Y="0" Z="-25" S="240" T="240" R="61" G="150" B="221" A="255"/>
<Vtx X="71" Y="43" Z="-41" S="240" T="-16" R="106" G="220" B="195" A="255"/>
<Vtx X="71" Y="43" Z="41" S="-16" T="-16" R="106" G="220" B="61" A="255"/>
<Vtx X="44" Y="0" Z="25" S="-16" T="240" R="61" G="150" B="35" A="255"/>
<Vtx X="44" Y="0" Z="25" S="240" T="240" R="61" G="150" B="35" A="255"/>
<Vtx X="71" Y="43" Z="41" S="240" T="-16" R="106" G="220" B="61" A="255"/>
<Vtx X="0" Y="43" Z="82" S="-16" T="-16" R="0" G="220" B="122" A="255"/>
<Vtx X="0" Y="0" Z="51" S="-16" T="240" R="0" G="150" B="71" A="255"/>
<Vtx X="0" Y="0" Z="51" S="240" T="240" R="0" G="150" B="71" A="255"/>
<Vtx X="0" Y="43" Z="82" S="240" T="-16" R="0" G="220" B="122" A="255"/>
<Vtx X="-71" Y="43" Z="41" S="-16" T="-16" R="150" G="220" B="61" A="255"/>
<Vtx X="-44" Y="0" Z="25" S="-16" T="240" R="195" G="150" B="35" A="255"/>
<Vtx X="-44" Y="0" Z="25" S="240" T="240" R="195" G="150" B="35" A="255"/>
<Vtx X="-71" Y="43" Z="41" S="240" T="-16" R="150" G="220" B="61" A="255"/>
<Vtx X="-71" Y="43" Z="-41" S="-16" T="-16" R="150" G="220" B="195" A="255"/>
<Vtx X="-44" Y="0" Z="-25" S="-16" T="240" R="195" G="150" B="221" A="255"/>
<Vtx X="-44" Y="0" Z="-25" S="240" T="240" R="195" G="150" B="221" A="255"/>
<Vtx X="-71" Y="43" Z="-41" S="240" T="-16" R="150" G="220" B="195" A="255"/>
<Vtx X="0" Y="43" Z="-82" S="-16" T="-16" R="0" G="220" B="134" A="255"/>
<Vtx X="0" Y="0" Z="-51" S="-16" T="240" R="0" G="150" B="185" A="255"/>
</Vertex>

View File

@@ -0,0 +1,13 @@
<DisplayList Version="0">
<CallDisplayList Path="objects/object_box/mat_gChestBodyFairyDL_Sides"/>
<CallDisplayList Path="objects/object_box/gChestBodyFairyDL_tri_0"/>
<CallDisplayList Path="objects/object_box/mat_gChestBodyFairyDL_Front"/>
<CallDisplayList Path="objects/object_box/gChestBodyFairyDL_tri_1"/>
<PipeSync/>
<SetGeometryMode G_LIGHTING="1" />
<ClearGeometryMode G_TEXTURE_GEN="1" />
<SetCombineLERP A0="G_CCMUX_0" B0="G_CCMUX_0" C0="G_CCMUX_0" D0="G_CCMUX_SHADE" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_ENVIRONMENT" A1="G_CCMUX_0" B1="G_CCMUX_0" C1="G_CCMUX_0" D1="G_CCMUX_SHADE" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_ENVIRONMENT"/>
<Texture S="65535" T="65535" Level="0" Tile="0" On="0"/>
<EndDisplayList/>
</DisplayList>

View File

@@ -0,0 +1,33 @@
<DisplayList Version="0">
<LoadVertices Path="objects/object_box/gChestBodyFairyDL_vtx_0" VertexBufferIndex="0" VertexOffset="0" Count="16"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="0" V01="2" V02="3"/>
<Triangle1 V00="4" V01="5" V02="6"/>
<Triangle1 V00="4" V01="6" V02="7"/>
<Triangle1 V00="8" V01="9" V02="10"/>
<Triangle1 V00="8" V01="10" V02="11"/>
<Triangle1 V00="12" V01="13" V02="14"/>
<Triangle1 V00="12" V01="14" V02="15"/>
<LoadVertices Path="objects/object_box/gChestBodyFairyDL_vtx_0" VertexBufferIndex="0" VertexOffset="16" Count="16"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="0" V01="2" V02="3"/>
<Triangle1 V00="4" V01="5" V02="6"/>
<Triangle1 V00="4" V01="6" V02="7"/>
<Triangle1 V00="8" V01="9" V02="10"/>
<Triangle1 V00="8" V01="10" V02="11"/>
<Triangle1 V00="12" V01="13" V02="14"/>
<Triangle1 V00="12" V01="14" V02="15"/>
<LoadVertices Path="objects/object_box/gChestBodyFairyDL_vtx_0" VertexBufferIndex="0" VertexOffset="32" Count="12"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="0" V01="2" V02="3"/>
<Triangle1 V00="4" V01="5" V02="6"/>
<Triangle1 V00="5" V01="7" V02="6"/>
<Triangle1 V00="5" V01="8" V02="7"/>
<Triangle1 V00="8" V01="9" V02="7"/>
<Triangle1 V00="8" V01="10" V02="9"/>
<Triangle1 V00="10" V01="11" V02="9"/>
<Triangle1 V00="10" V01="4" V02="11"/>
<Triangle1 V00="4" V01="6" V02="11"/>
<EndDisplayList/>
</DisplayList>

View File

@@ -0,0 +1,7 @@
<DisplayList Version="0">
<LoadVertices Path="objects/object_box/gChestBodyFairyDL_vtx_1" VertexBufferIndex="0" VertexOffset="0" Count="4"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="0" V01="2" V02="3"/>
<EndDisplayList/>
</DisplayList>

View File

@@ -0,0 +1,46 @@
<Vertex Version="0">
<Vtx X="-2530" Y="0" Z="1950" S="-20" T="-12" R="129" G="0" B="0" A="255"/>
<Vtx X="-2530" Y="2730" Z="1950" S="-20" T="2036" R="129" G="0" B="0" A="255"/>
<Vtx X="-2530" Y="2730" Z="-1950" S="2036" T="2036" R="129" G="0" B="0" A="255"/>
<Vtx X="-2530" Y="0" Z="-1950" S="2036" T="-12" R="129" G="0" B="0" A="255"/>
<Vtx X="2530" Y="0" Z="-1950" S="2036" T="2036" R="127" G="0" B="0" A="255"/>
<Vtx X="2530" Y="2730" Z="-1950" S="2036" T="-12" R="127" G="0" B="0" A="255"/>
<Vtx X="2530" Y="2730" Z="1950" S="-20" T="-12" R="127" G="0" B="0" A="255"/>
<Vtx X="2530" Y="0" Z="1950" S="-20" T="2036" R="127" G="0" B="0" A="255"/>
<Vtx X="2530" Y="0" Z="1950" S="2036" T="2036" R="0" G="0" B="127" A="255"/>
<Vtx X="2530" Y="2730" Z="1950" S="2036" T="-17" R="0" G="0" B="127" A="255"/>
<Vtx X="-2530" Y="2730" Z="1950" S="-20" T="-17" R="0" G="0" B="127" A="255"/>
<Vtx X="-2530" Y="0" Z="1950" S="-20" T="2036" R="0" G="0" B="127" A="255"/>
<Vtx X="-2530" Y="0" Z="-1950" S="2032" T="-16" R="0" G="129" B="0" A="255"/>
<Vtx X="2530" Y="0" Z="-1950" S="-16" T="-16" R="0" G="129" B="0" A="255"/>
<Vtx X="2530" Y="0" Z="1950" S="-16" T="2040" R="0" G="129" B="0" A="255"/>
<Vtx X="-2530" Y="0" Z="1950" S="2032" T="2040" R="0" G="129" B="0" A="255"/>
<Vtx X="-2430" Y="2730" Z="1750" S="-16" T="2037" R="0" G="0" B="129" A="255"/>
<Vtx X="2430" Y="2730" Z="1750" S="2051" T="2037" R="0" G="0" B="129" A="255"/>
<Vtx X="2430" Y="200" Z="1750" S="2051" T="-16" R="0" G="0" B="129" A="255"/>
<Vtx X="-2430" Y="200" Z="1750" S="-16" T="-16" R="0" G="0" B="129" A="255"/>
<Vtx X="2430" Y="200" Z="-1750" S="2051" T="-16" R="0" G="127" B="0" A="255"/>
<Vtx X="-2430" Y="200" Z="-1750" S="-16" T="-16" R="0" G="127" B="0" A="255"/>
<Vtx X="-2430" Y="200" Z="1750" S="-16" T="2037" R="0" G="127" B="0" A="255"/>
<Vtx X="2430" Y="200" Z="1750" S="2051" T="2037" R="0" G="127" B="0" A="255"/>
<Vtx X="2430" Y="2730" Z="-1750" S="-9" T="2044" R="0" G="0" B="127" A="255"/>
<Vtx X="-2430" Y="2730" Z="-1750" S="2044" T="2044" R="0" G="0" B="127" A="255"/>
<Vtx X="-2430" Y="200" Z="-1750" S="2044" T="-23" R="0" G="0" B="127" A="255"/>
<Vtx X="2430" Y="200" Z="-1750" S="-9" T="-23" R="0" G="0" B="127" A="255"/>
<Vtx X="2430" Y="2730" Z="1750" S="-9" T="2044" R="129" G="0" B="0" A="255"/>
<Vtx X="2430" Y="2730" Z="-1750" S="2044" T="2044" R="129" G="0" B="0" A="255"/>
<Vtx X="2430" Y="200" Z="-1750" S="2044" T="-23" R="129" G="0" B="0" A="255"/>
<Vtx X="2430" Y="200" Z="1750" S="-9" T="-23" R="129" G="0" B="0" A="255"/>
<Vtx X="-2430" Y="2730" Z="-1750" S="-16" T="2037" R="127" G="0" B="0" A="255"/>
<Vtx X="-2430" Y="2730" Z="1750" S="2051" T="2037" R="127" G="0" B="0" A="255"/>
<Vtx X="-2430" Y="200" Z="1750" S="2051" T="-16" R="127" G="0" B="0" A="255"/>
<Vtx X="-2430" Y="200" Z="-1750" S="-16" T="-16" R="127" G="0" B="0" A="255"/>
<Vtx X="2430" Y="2730" Z="1750" S="83" T="81" R="0" G="127" B="0" A="255"/>
<Vtx X="-2430" Y="2730" Z="1750" S="1932" T="102" R="0" G="127" B="0" A="255"/>
<Vtx X="-2530" Y="2730" Z="1950" S="2021" T="-16" R="0" G="127" B="0" A="255"/>
<Vtx X="-2530" Y="2730" Z="-1950" S="2021" T="2031" R="0" G="127" B="0" A="255"/>
<Vtx X="-2430" Y="2730" Z="-1750" S="1932" T="1923" R="0" G="127" B="0" A="255"/>
<Vtx X="2530" Y="2730" Z="-1950" S="-16" T="2031" R="0" G="127" B="0" A="255"/>
<Vtx X="2430" Y="2730" Z="-1750" S="83" T="1944" R="0" G="127" B="0" A="255"/>
<Vtx X="2530" Y="2730" Z="1950" S="-16" T="-16" R="0" G="127" B="0" A="255"/>
</Vertex>

View File

@@ -0,0 +1,6 @@
<Vertex Version="0">
<Vtx X="-2530" Y="0" Z="-1950" S="2034" T="2028" R="0" G="0" B="129" A="255"/>
<Vtx X="-2530" Y="2730" Z="-1950" S="2034" T="-6" R="0" G="0" B="129" A="255"/>
<Vtx X="2530" Y="2730" Z="-1950" S="-13" T="-6" R="0" G="0" B="129" A="255"/>
<Vtx X="2530" Y="0" Z="-1950" S="-13" T="2028" R="0" G="0" B="129" A="255"/>
</Vertex>

View File

@@ -0,0 +1,13 @@
<DisplayList Version="0">
<CallDisplayList Path="objects/object_box/mat_gChestBodyHeartDL_Sides"/>
<CallDisplayList Path="objects/object_box/gChestBodyHeartDL_tri_0"/>
<CallDisplayList Path="objects/object_box/mat_gChestBodyHeartDL_Front"/>
<CallDisplayList Path="objects/object_box/gChestBodyHeartDL_tri_1"/>
<PipeSync/>
<SetGeometryMode G_LIGHTING="1" />
<ClearGeometryMode G_TEXTURE_GEN="1" />
<SetCombineLERP A0="G_CCMUX_0" B0="G_CCMUX_0" C0="G_CCMUX_0" D0="G_CCMUX_SHADE" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_ENVIRONMENT" A1="G_CCMUX_0" B1="G_CCMUX_0" C1="G_CCMUX_0" D1="G_CCMUX_SHADE" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_ENVIRONMENT"/>
<Texture S="65535" T="65535" Level="0" Tile="0" On="0"/>
<EndDisplayList/>
</DisplayList>

View File

@@ -0,0 +1,33 @@
<DisplayList Version="0">
<LoadVertices Path="objects/object_box/gChestBodyHeartDL_vtx_0" VertexBufferIndex="0" VertexOffset="0" Count="16"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="0" V01="2" V02="3"/>
<Triangle1 V00="4" V01="5" V02="6"/>
<Triangle1 V00="4" V01="6" V02="7"/>
<Triangle1 V00="8" V01="9" V02="10"/>
<Triangle1 V00="8" V01="10" V02="11"/>
<Triangle1 V00="12" V01="13" V02="14"/>
<Triangle1 V00="12" V01="14" V02="15"/>
<LoadVertices Path="objects/object_box/gChestBodyHeartDL_vtx_0" VertexBufferIndex="0" VertexOffset="16" Count="16"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="0" V01="2" V02="3"/>
<Triangle1 V00="4" V01="5" V02="6"/>
<Triangle1 V00="4" V01="6" V02="7"/>
<Triangle1 V00="8" V01="9" V02="10"/>
<Triangle1 V00="8" V01="10" V02="11"/>
<Triangle1 V00="12" V01="13" V02="14"/>
<Triangle1 V00="12" V01="14" V02="15"/>
<LoadVertices Path="objects/object_box/gChestBodyHeartDL_vtx_0" VertexBufferIndex="0" VertexOffset="32" Count="12"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="0" V01="2" V02="3"/>
<Triangle1 V00="4" V01="5" V02="6"/>
<Triangle1 V00="5" V01="7" V02="6"/>
<Triangle1 V00="5" V01="8" V02="7"/>
<Triangle1 V00="8" V01="9" V02="7"/>
<Triangle1 V00="8" V01="10" V02="9"/>
<Triangle1 V00="10" V01="11" V02="9"/>
<Triangle1 V00="10" V01="4" V02="11"/>
<Triangle1 V00="4" V01="6" V02="11"/>
<EndDisplayList/>
</DisplayList>

View File

@@ -0,0 +1,7 @@
<DisplayList Version="0">
<LoadVertices Path="objects/object_box/gChestBodyHeartDL_vtx_1" VertexBufferIndex="0" VertexOffset="0" Count="4"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="0" V01="2" V02="3"/>
<EndDisplayList/>
</DisplayList>

View File

@@ -0,0 +1,46 @@
<Vertex Version="0">
<Vtx X="-2530" Y="0" Z="1950" S="-20" T="-12" R="129" G="0" B="0" A="255"/>
<Vtx X="-2530" Y="2730" Z="1950" S="-20" T="2036" R="129" G="0" B="0" A="255"/>
<Vtx X="-2530" Y="2730" Z="-1950" S="2036" T="2036" R="129" G="0" B="0" A="255"/>
<Vtx X="-2530" Y="0" Z="-1950" S="2036" T="-12" R="129" G="0" B="0" A="255"/>
<Vtx X="2530" Y="0" Z="-1950" S="2036" T="2036" R="127" G="0" B="0" A="255"/>
<Vtx X="2530" Y="2730" Z="-1950" S="2036" T="-12" R="127" G="0" B="0" A="255"/>
<Vtx X="2530" Y="2730" Z="1950" S="-20" T="-12" R="127" G="0" B="0" A="255"/>
<Vtx X="2530" Y="0" Z="1950" S="-20" T="2036" R="127" G="0" B="0" A="255"/>
<Vtx X="2530" Y="0" Z="1950" S="2036" T="2036" R="0" G="0" B="127" A="255"/>
<Vtx X="2530" Y="2730" Z="1950" S="2036" T="-17" R="0" G="0" B="127" A="255"/>
<Vtx X="-2530" Y="2730" Z="1950" S="-20" T="-17" R="0" G="0" B="127" A="255"/>
<Vtx X="-2530" Y="0" Z="1950" S="-20" T="2036" R="0" G="0" B="127" A="255"/>
<Vtx X="-2530" Y="0" Z="-1950" S="2032" T="-16" R="0" G="129" B="0" A="255"/>
<Vtx X="2530" Y="0" Z="-1950" S="-16" T="-16" R="0" G="129" B="0" A="255"/>
<Vtx X="2530" Y="0" Z="1950" S="-16" T="2040" R="0" G="129" B="0" A="255"/>
<Vtx X="-2530" Y="0" Z="1950" S="2032" T="2040" R="0" G="129" B="0" A="255"/>
<Vtx X="-2430" Y="2730" Z="1750" S="-16" T="2037" R="0" G="0" B="129" A="255"/>
<Vtx X="2430" Y="2730" Z="1750" S="2051" T="2037" R="0" G="0" B="129" A="255"/>
<Vtx X="2430" Y="200" Z="1750" S="2051" T="-16" R="0" G="0" B="129" A="255"/>
<Vtx X="-2430" Y="200" Z="1750" S="-16" T="-16" R="0" G="0" B="129" A="255"/>
<Vtx X="2430" Y="200" Z="-1750" S="2051" T="-16" R="0" G="127" B="0" A="255"/>
<Vtx X="-2430" Y="200" Z="-1750" S="-16" T="-16" R="0" G="127" B="0" A="255"/>
<Vtx X="-2430" Y="200" Z="1750" S="-16" T="2037" R="0" G="127" B="0" A="255"/>
<Vtx X="2430" Y="200" Z="1750" S="2051" T="2037" R="0" G="127" B="0" A="255"/>
<Vtx X="2430" Y="2730" Z="-1750" S="-9" T="2044" R="0" G="0" B="127" A="255"/>
<Vtx X="-2430" Y="2730" Z="-1750" S="2044" T="2044" R="0" G="0" B="127" A="255"/>
<Vtx X="-2430" Y="200" Z="-1750" S="2044" T="-23" R="0" G="0" B="127" A="255"/>
<Vtx X="2430" Y="200" Z="-1750" S="-9" T="-23" R="0" G="0" B="127" A="255"/>
<Vtx X="2430" Y="2730" Z="1750" S="-9" T="2044" R="129" G="0" B="0" A="255"/>
<Vtx X="2430" Y="2730" Z="-1750" S="2044" T="2044" R="129" G="0" B="0" A="255"/>
<Vtx X="2430" Y="200" Z="-1750" S="2044" T="-23" R="129" G="0" B="0" A="255"/>
<Vtx X="2430" Y="200" Z="1750" S="-9" T="-23" R="129" G="0" B="0" A="255"/>
<Vtx X="-2430" Y="2730" Z="-1750" S="-16" T="2037" R="127" G="0" B="0" A="255"/>
<Vtx X="-2430" Y="2730" Z="1750" S="2051" T="2037" R="127" G="0" B="0" A="255"/>
<Vtx X="-2430" Y="200" Z="1750" S="2051" T="-16" R="127" G="0" B="0" A="255"/>
<Vtx X="-2430" Y="200" Z="-1750" S="-16" T="-16" R="127" G="0" B="0" A="255"/>
<Vtx X="2430" Y="2730" Z="1750" S="83" T="81" R="0" G="127" B="0" A="255"/>
<Vtx X="-2430" Y="2730" Z="1750" S="1932" T="102" R="0" G="127" B="0" A="255"/>
<Vtx X="-2530" Y="2730" Z="1950" S="2021" T="-16" R="0" G="127" B="0" A="255"/>
<Vtx X="-2530" Y="2730" Z="-1950" S="2021" T="2031" R="0" G="127" B="0" A="255"/>
<Vtx X="-2430" Y="2730" Z="-1750" S="1932" T="1923" R="0" G="127" B="0" A="255"/>
<Vtx X="2530" Y="2730" Z="-1950" S="-16" T="2031" R="0" G="127" B="0" A="255"/>
<Vtx X="2430" Y="2730" Z="-1750" S="83" T="1944" R="0" G="127" B="0" A="255"/>
<Vtx X="2530" Y="2730" Z="1950" S="-16" T="-16" R="0" G="127" B="0" A="255"/>
</Vertex>

View File

@@ -0,0 +1,6 @@
<Vertex Version="0">
<Vtx X="-2530" Y="0" Z="-1950" S="2034" T="2028" R="0" G="0" B="129" A="255"/>
<Vtx X="-2530" Y="2730" Z="-1950" S="2034" T="-6" R="0" G="0" B="129" A="255"/>
<Vtx X="2530" Y="2730" Z="-1950" S="-13" T="-6" R="0" G="0" B="129" A="255"/>
<Vtx X="2530" Y="0" Z="-1950" S="-13" T="2028" R="0" G="0" B="129" A="255"/>
</Vertex>

View File

@@ -0,0 +1,13 @@
<DisplayList Version="0">
<CallDisplayList Path="objects/object_box/mat_gChestBodyJunkDL_Sides"/>
<CallDisplayList Path="objects/object_box/gChestBodyJunkDL_tri_0"/>
<CallDisplayList Path="objects/object_box/mat_gChestBodyJunkDL_Front"/>
<CallDisplayList Path="objects/object_box/gChestBodyJunkDL_tri_1"/>
<PipeSync/>
<SetGeometryMode G_LIGHTING="1" />
<ClearGeometryMode G_TEXTURE_GEN="1" />
<SetCombineLERP A0="G_CCMUX_0" B0="G_CCMUX_0" C0="G_CCMUX_0" D0="G_CCMUX_SHADE" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_ENVIRONMENT" A1="G_CCMUX_0" B1="G_CCMUX_0" C1="G_CCMUX_0" D1="G_CCMUX_SHADE" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_ENVIRONMENT"/>
<Texture S="65535" T="65535" Level="0" Tile="0" On="0"/>
<EndDisplayList/>
</DisplayList>

View File

@@ -0,0 +1,33 @@
<DisplayList Version="0">
<LoadVertices Path="objects/object_box/gChestBodyJunkDL_vtx_0" VertexBufferIndex="0" VertexOffset="0" Count="16"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="0" V01="2" V02="3"/>
<Triangle1 V00="4" V01="5" V02="6"/>
<Triangle1 V00="4" V01="6" V02="7"/>
<Triangle1 V00="8" V01="9" V02="10"/>
<Triangle1 V00="8" V01="10" V02="11"/>
<Triangle1 V00="12" V01="13" V02="14"/>
<Triangle1 V00="12" V01="14" V02="15"/>
<LoadVertices Path="objects/object_box/gChestBodyJunkDL_vtx_0" VertexBufferIndex="0" VertexOffset="16" Count="16"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="0" V01="2" V02="3"/>
<Triangle1 V00="4" V01="5" V02="6"/>
<Triangle1 V00="4" V01="6" V02="7"/>
<Triangle1 V00="8" V01="9" V02="10"/>
<Triangle1 V00="8" V01="10" V02="11"/>
<Triangle1 V00="12" V01="13" V02="14"/>
<Triangle1 V00="12" V01="14" V02="15"/>
<LoadVertices Path="objects/object_box/gChestBodyJunkDL_vtx_0" VertexBufferIndex="0" VertexOffset="32" Count="12"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="0" V01="2" V02="3"/>
<Triangle1 V00="4" V01="5" V02="6"/>
<Triangle1 V00="5" V01="7" V02="6"/>
<Triangle1 V00="5" V01="8" V02="7"/>
<Triangle1 V00="8" V01="9" V02="7"/>
<Triangle1 V00="8" V01="10" V02="9"/>
<Triangle1 V00="10" V01="11" V02="9"/>
<Triangle1 V00="10" V01="4" V02="11"/>
<Triangle1 V00="4" V01="6" V02="11"/>
<EndDisplayList/>
</DisplayList>

View File

@@ -0,0 +1,7 @@
<DisplayList Version="0">
<LoadVertices Path="objects/object_box/gChestBodyJunkDL_vtx_1" VertexBufferIndex="0" VertexOffset="0" Count="4"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="0" V01="2" V02="3"/>
<EndDisplayList/>
</DisplayList>

View File

@@ -0,0 +1,46 @@
<Vertex Version="0">
<Vtx X="-2530" Y="0" Z="1950" S="-20" T="-12" R="129" G="0" B="0" A="255"/>
<Vtx X="-2530" Y="2730" Z="1950" S="-20" T="2036" R="129" G="0" B="0" A="255"/>
<Vtx X="-2530" Y="2730" Z="-1950" S="2036" T="2036" R="129" G="0" B="0" A="255"/>
<Vtx X="-2530" Y="0" Z="-1950" S="2036" T="-12" R="129" G="0" B="0" A="255"/>
<Vtx X="2530" Y="0" Z="-1950" S="2036" T="2036" R="127" G="0" B="0" A="255"/>
<Vtx X="2530" Y="2730" Z="-1950" S="2036" T="-12" R="127" G="0" B="0" A="255"/>
<Vtx X="2530" Y="2730" Z="1950" S="-20" T="-12" R="127" G="0" B="0" A="255"/>
<Vtx X="2530" Y="0" Z="1950" S="-20" T="2036" R="127" G="0" B="0" A="255"/>
<Vtx X="2530" Y="0" Z="1950" S="2036" T="2036" R="0" G="0" B="127" A="255"/>
<Vtx X="2530" Y="2730" Z="1950" S="2036" T="-17" R="0" G="0" B="127" A="255"/>
<Vtx X="-2530" Y="2730" Z="1950" S="-20" T="-17" R="0" G="0" B="127" A="255"/>
<Vtx X="-2530" Y="0" Z="1950" S="-20" T="2036" R="0" G="0" B="127" A="255"/>
<Vtx X="-2530" Y="0" Z="-1950" S="2032" T="-16" R="0" G="129" B="0" A="255"/>
<Vtx X="2530" Y="0" Z="-1950" S="-16" T="-16" R="0" G="129" B="0" A="255"/>
<Vtx X="2530" Y="0" Z="1950" S="-16" T="2040" R="0" G="129" B="0" A="255"/>
<Vtx X="-2530" Y="0" Z="1950" S="2032" T="2040" R="0" G="129" B="0" A="255"/>
<Vtx X="-2430" Y="2730" Z="1750" S="-16" T="2037" R="0" G="0" B="129" A="255"/>
<Vtx X="2430" Y="2730" Z="1750" S="2051" T="2037" R="0" G="0" B="129" A="255"/>
<Vtx X="2430" Y="200" Z="1750" S="2051" T="-16" R="0" G="0" B="129" A="255"/>
<Vtx X="-2430" Y="200" Z="1750" S="-16" T="-16" R="0" G="0" B="129" A="255"/>
<Vtx X="2430" Y="200" Z="-1750" S="2051" T="-16" R="0" G="127" B="0" A="255"/>
<Vtx X="-2430" Y="200" Z="-1750" S="-16" T="-16" R="0" G="127" B="0" A="255"/>
<Vtx X="-2430" Y="200" Z="1750" S="-16" T="2037" R="0" G="127" B="0" A="255"/>
<Vtx X="2430" Y="200" Z="1750" S="2051" T="2037" R="0" G="127" B="0" A="255"/>
<Vtx X="2430" Y="2730" Z="-1750" S="-9" T="2044" R="0" G="0" B="127" A="255"/>
<Vtx X="-2430" Y="2730" Z="-1750" S="2044" T="2044" R="0" G="0" B="127" A="255"/>
<Vtx X="-2430" Y="200" Z="-1750" S="2044" T="-23" R="0" G="0" B="127" A="255"/>
<Vtx X="2430" Y="200" Z="-1750" S="-9" T="-23" R="0" G="0" B="127" A="255"/>
<Vtx X="2430" Y="2730" Z="1750" S="-9" T="2044" R="129" G="0" B="0" A="255"/>
<Vtx X="2430" Y="2730" Z="-1750" S="2044" T="2044" R="129" G="0" B="0" A="255"/>
<Vtx X="2430" Y="200" Z="-1750" S="2044" T="-23" R="129" G="0" B="0" A="255"/>
<Vtx X="2430" Y="200" Z="1750" S="-9" T="-23" R="129" G="0" B="0" A="255"/>
<Vtx X="-2430" Y="2730" Z="-1750" S="-16" T="2037" R="127" G="0" B="0" A="255"/>
<Vtx X="-2430" Y="2730" Z="1750" S="2051" T="2037" R="127" G="0" B="0" A="255"/>
<Vtx X="-2430" Y="200" Z="1750" S="2051" T="-16" R="127" G="0" B="0" A="255"/>
<Vtx X="-2430" Y="200" Z="-1750" S="-16" T="-16" R="127" G="0" B="0" A="255"/>
<Vtx X="2430" Y="2730" Z="1750" S="83" T="81" R="0" G="127" B="0" A="255"/>
<Vtx X="-2430" Y="2730" Z="1750" S="1932" T="102" R="0" G="127" B="0" A="255"/>
<Vtx X="-2530" Y="2730" Z="1950" S="2021" T="-16" R="0" G="127" B="0" A="255"/>
<Vtx X="-2530" Y="2730" Z="-1950" S="2021" T="2031" R="0" G="127" B="0" A="255"/>
<Vtx X="-2430" Y="2730" Z="-1750" S="1932" T="1923" R="0" G="127" B="0" A="255"/>
<Vtx X="2530" Y="2730" Z="-1950" S="-16" T="2031" R="0" G="127" B="0" A="255"/>
<Vtx X="2430" Y="2730" Z="-1750" S="83" T="1944" R="0" G="127" B="0" A="255"/>
<Vtx X="2530" Y="2730" Z="1950" S="-16" T="-16" R="0" G="127" B="0" A="255"/>
</Vertex>

View File

@@ -0,0 +1,6 @@
<Vertex Version="0">
<Vtx X="-2530" Y="0" Z="-1950" S="2034" T="2028" R="0" G="0" B="129" A="255"/>
<Vtx X="-2530" Y="2730" Z="-1950" S="2034" T="-6" R="0" G="0" B="129" A="255"/>
<Vtx X="2530" Y="2730" Z="-1950" S="-13" T="-6" R="0" G="0" B="129" A="255"/>
<Vtx X="2530" Y="0" Z="-1950" S="-13" T="2028" R="0" G="0" B="129" A="255"/>
</Vertex>

View File

@@ -0,0 +1,13 @@
<DisplayList Version="0">
<CallDisplayList Path="objects/object_box/mat_gChestBodyMajorDL_Sides"/>
<CallDisplayList Path="objects/object_box/gChestBodyMajorDL_tri_0"/>
<CallDisplayList Path="objects/object_box/mat_gChestBodyMajorDL_Front"/>
<CallDisplayList Path="objects/object_box/gChestBodyMajorDL_tri_1"/>
<PipeSync/>
<SetGeometryMode G_LIGHTING="1" />
<ClearGeometryMode G_TEXTURE_GEN="1" />
<SetCombineLERP A0="G_CCMUX_0" B0="G_CCMUX_0" C0="G_CCMUX_0" D0="G_CCMUX_SHADE" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_ENVIRONMENT" A1="G_CCMUX_0" B1="G_CCMUX_0" C1="G_CCMUX_0" D1="G_CCMUX_SHADE" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_ENVIRONMENT"/>
<Texture S="65535" T="65535" Level="0" Tile="0" On="0"/>
<EndDisplayList/>
</DisplayList>

View File

@@ -0,0 +1,33 @@
<DisplayList Version="0">
<LoadVertices Path="objects/object_box/gChestBodyMajorDL_vtx_0" VertexBufferIndex="0" VertexOffset="0" Count="16"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="0" V01="2" V02="3"/>
<Triangle1 V00="4" V01="5" V02="6"/>
<Triangle1 V00="4" V01="6" V02="7"/>
<Triangle1 V00="8" V01="9" V02="10"/>
<Triangle1 V00="8" V01="10" V02="11"/>
<Triangle1 V00="12" V01="13" V02="14"/>
<Triangle1 V00="12" V01="14" V02="15"/>
<LoadVertices Path="objects/object_box/gChestBodyMajorDL_vtx_0" VertexBufferIndex="0" VertexOffset="16" Count="16"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="0" V01="2" V02="3"/>
<Triangle1 V00="4" V01="5" V02="6"/>
<Triangle1 V00="4" V01="6" V02="7"/>
<Triangle1 V00="8" V01="9" V02="10"/>
<Triangle1 V00="8" V01="10" V02="11"/>
<Triangle1 V00="12" V01="13" V02="14"/>
<Triangle1 V00="12" V01="14" V02="15"/>
<LoadVertices Path="objects/object_box/gChestBodyMajorDL_vtx_0" VertexBufferIndex="0" VertexOffset="32" Count="12"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="0" V01="2" V02="3"/>
<Triangle1 V00="4" V01="5" V02="6"/>
<Triangle1 V00="5" V01="7" V02="6"/>
<Triangle1 V00="5" V01="8" V02="7"/>
<Triangle1 V00="8" V01="9" V02="7"/>
<Triangle1 V00="8" V01="10" V02="9"/>
<Triangle1 V00="10" V01="11" V02="9"/>
<Triangle1 V00="10" V01="4" V02="11"/>
<Triangle1 V00="4" V01="6" V02="11"/>
<EndDisplayList/>
</DisplayList>

View File

@@ -0,0 +1,7 @@
<DisplayList Version="0">
<LoadVertices Path="objects/object_box/gChestBodyMajorDL_vtx_1" VertexBufferIndex="0" VertexOffset="0" Count="4"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="0" V01="2" V02="3"/>
<EndDisplayList/>
</DisplayList>

View File

@@ -0,0 +1,46 @@
<Vertex Version="0">
<Vtx X="-2530" Y="0" Z="1950" S="-20" T="-12" R="129" G="0" B="0" A="255"/>
<Vtx X="-2530" Y="2730" Z="1950" S="-20" T="2036" R="129" G="0" B="0" A="255"/>
<Vtx X="-2530" Y="2730" Z="-1950" S="2036" T="2036" R="129" G="0" B="0" A="255"/>
<Vtx X="-2530" Y="0" Z="-1950" S="2036" T="-12" R="129" G="0" B="0" A="255"/>
<Vtx X="2530" Y="0" Z="-1950" S="2036" T="2036" R="127" G="0" B="0" A="255"/>
<Vtx X="2530" Y="2730" Z="-1950" S="2036" T="-12" R="127" G="0" B="0" A="255"/>
<Vtx X="2530" Y="2730" Z="1950" S="-20" T="-12" R="127" G="0" B="0" A="255"/>
<Vtx X="2530" Y="0" Z="1950" S="-20" T="2036" R="127" G="0" B="0" A="255"/>
<Vtx X="2530" Y="0" Z="1950" S="2036" T="2036" R="0" G="0" B="127" A="255"/>
<Vtx X="2530" Y="2730" Z="1950" S="2036" T="-17" R="0" G="0" B="127" A="255"/>
<Vtx X="-2530" Y="2730" Z="1950" S="-20" T="-17" R="0" G="0" B="127" A="255"/>
<Vtx X="-2530" Y="0" Z="1950" S="-20" T="2036" R="0" G="0" B="127" A="255"/>
<Vtx X="-2530" Y="0" Z="-1950" S="2032" T="-16" R="0" G="129" B="0" A="255"/>
<Vtx X="2530" Y="0" Z="-1950" S="-16" T="-16" R="0" G="129" B="0" A="255"/>
<Vtx X="2530" Y="0" Z="1950" S="-16" T="2040" R="0" G="129" B="0" A="255"/>
<Vtx X="-2530" Y="0" Z="1950" S="2032" T="2040" R="0" G="129" B="0" A="255"/>
<Vtx X="-2430" Y="2730" Z="1750" S="-16" T="2037" R="0" G="0" B="129" A="255"/>
<Vtx X="2430" Y="2730" Z="1750" S="2051" T="2037" R="0" G="0" B="129" A="255"/>
<Vtx X="2430" Y="200" Z="1750" S="2051" T="-16" R="0" G="0" B="129" A="255"/>
<Vtx X="-2430" Y="200" Z="1750" S="-16" T="-16" R="0" G="0" B="129" A="255"/>
<Vtx X="2430" Y="200" Z="-1750" S="2051" T="-16" R="0" G="127" B="0" A="255"/>
<Vtx X="-2430" Y="200" Z="-1750" S="-16" T="-16" R="0" G="127" B="0" A="255"/>
<Vtx X="-2430" Y="200" Z="1750" S="-16" T="2037" R="0" G="127" B="0" A="255"/>
<Vtx X="2430" Y="200" Z="1750" S="2051" T="2037" R="0" G="127" B="0" A="255"/>
<Vtx X="2430" Y="2730" Z="-1750" S="-9" T="2044" R="0" G="0" B="127" A="255"/>
<Vtx X="-2430" Y="2730" Z="-1750" S="2044" T="2044" R="0" G="0" B="127" A="255"/>
<Vtx X="-2430" Y="200" Z="-1750" S="2044" T="-23" R="0" G="0" B="127" A="255"/>
<Vtx X="2430" Y="200" Z="-1750" S="-9" T="-23" R="0" G="0" B="127" A="255"/>
<Vtx X="2430" Y="2730" Z="1750" S="-9" T="2044" R="129" G="0" B="0" A="255"/>
<Vtx X="2430" Y="2730" Z="-1750" S="2044" T="2044" R="129" G="0" B="0" A="255"/>
<Vtx X="2430" Y="200" Z="-1750" S="2044" T="-23" R="129" G="0" B="0" A="255"/>
<Vtx X="2430" Y="200" Z="1750" S="-9" T="-23" R="129" G="0" B="0" A="255"/>
<Vtx X="-2430" Y="2730" Z="-1750" S="-16" T="2037" R="127" G="0" B="0" A="255"/>
<Vtx X="-2430" Y="2730" Z="1750" S="2051" T="2037" R="127" G="0" B="0" A="255"/>
<Vtx X="-2430" Y="200" Z="1750" S="2051" T="-16" R="127" G="0" B="0" A="255"/>
<Vtx X="-2430" Y="200" Z="-1750" S="-16" T="-16" R="127" G="0" B="0" A="255"/>
<Vtx X="2430" Y="2730" Z="1750" S="83" T="81" R="0" G="127" B="0" A="255"/>
<Vtx X="-2430" Y="2730" Z="1750" S="1932" T="102" R="0" G="127" B="0" A="255"/>
<Vtx X="-2530" Y="2730" Z="1950" S="2021" T="-16" R="0" G="127" B="0" A="255"/>
<Vtx X="-2530" Y="2730" Z="-1950" S="2021" T="2031" R="0" G="127" B="0" A="255"/>
<Vtx X="-2430" Y="2730" Z="-1750" S="1932" T="1923" R="0" G="127" B="0" A="255"/>
<Vtx X="2530" Y="2730" Z="-1950" S="-16" T="2031" R="0" G="127" B="0" A="255"/>
<Vtx X="2430" Y="2730" Z="-1750" S="83" T="1944" R="0" G="127" B="0" A="255"/>
<Vtx X="2530" Y="2730" Z="1950" S="-16" T="-16" R="0" G="127" B="0" A="255"/>
</Vertex>

View File

@@ -0,0 +1,6 @@
<Vertex Version="0">
<Vtx X="-2530" Y="0" Z="-1950" S="2034" T="2028" R="0" G="0" B="129" A="255"/>
<Vtx X="-2530" Y="2730" Z="-1950" S="2034" T="-6" R="0" G="0" B="129" A="255"/>
<Vtx X="2530" Y="2730" Z="-1950" S="-13" T="-6" R="0" G="0" B="129" A="255"/>
<Vtx X="2530" Y="0" Z="-1950" S="-13" T="2028" R="0" G="0" B="129" A="255"/>
</Vertex>

View File

@@ -0,0 +1,13 @@
<DisplayList Version="0">
<CallDisplayList Path="objects/object_box/mat_gChestBodyMaskDL_Sides"/>
<CallDisplayList Path="objects/object_box/gChestBodyMaskDL_tri_0"/>
<CallDisplayList Path="objects/object_box/mat_gChestBodyMaskDL_Front"/>
<CallDisplayList Path="objects/object_box/gChestBodyMaskDL_tri_1"/>
<PipeSync/>
<SetGeometryMode G_LIGHTING="1" />
<ClearGeometryMode G_TEXTURE_GEN="1" />
<SetCombineLERP A0="G_CCMUX_0" B0="G_CCMUX_0" C0="G_CCMUX_0" D0="G_CCMUX_SHADE" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_ENVIRONMENT" A1="G_CCMUX_0" B1="G_CCMUX_0" C1="G_CCMUX_0" D1="G_CCMUX_SHADE" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_ENVIRONMENT"/>
<Texture S="65535" T="65535" Level="0" Tile="0" On="0"/>
<EndDisplayList/>
</DisplayList>

View File

@@ -0,0 +1,33 @@
<DisplayList Version="0">
<LoadVertices Path="objects/object_box/gChestBodyMaskDL_vtx_0" VertexBufferIndex="0" VertexOffset="0" Count="16"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="0" V01="2" V02="3"/>
<Triangle1 V00="4" V01="5" V02="6"/>
<Triangle1 V00="4" V01="6" V02="7"/>
<Triangle1 V00="8" V01="9" V02="10"/>
<Triangle1 V00="8" V01="10" V02="11"/>
<Triangle1 V00="12" V01="13" V02="14"/>
<Triangle1 V00="12" V01="14" V02="15"/>
<LoadVertices Path="objects/object_box/gChestBodyMaskDL_vtx_0" VertexBufferIndex="0" VertexOffset="16" Count="16"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="0" V01="2" V02="3"/>
<Triangle1 V00="4" V01="5" V02="6"/>
<Triangle1 V00="4" V01="6" V02="7"/>
<Triangle1 V00="8" V01="9" V02="10"/>
<Triangle1 V00="8" V01="10" V02="11"/>
<Triangle1 V00="12" V01="13" V02="14"/>
<Triangle1 V00="12" V01="14" V02="15"/>
<LoadVertices Path="objects/object_box/gChestBodyMaskDL_vtx_0" VertexBufferIndex="0" VertexOffset="32" Count="12"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="0" V01="2" V02="3"/>
<Triangle1 V00="4" V01="5" V02="6"/>
<Triangle1 V00="5" V01="7" V02="6"/>
<Triangle1 V00="5" V01="8" V02="7"/>
<Triangle1 V00="8" V01="9" V02="7"/>
<Triangle1 V00="8" V01="10" V02="9"/>
<Triangle1 V00="10" V01="11" V02="9"/>
<Triangle1 V00="10" V01="4" V02="11"/>
<Triangle1 V00="4" V01="6" V02="11"/>
<EndDisplayList/>
</DisplayList>

View File

@@ -0,0 +1,7 @@
<DisplayList Version="0">
<LoadVertices Path="objects/object_box/gChestBodyMaskDL_vtx_1" VertexBufferIndex="0" VertexOffset="0" Count="4"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="0" V01="2" V02="3"/>
<EndDisplayList/>
</DisplayList>

View File

@@ -0,0 +1,46 @@
<Vertex Version="0">
<Vtx X="-2530" Y="0" Z="1950" S="-20" T="-12" R="129" G="0" B="0" A="255"/>
<Vtx X="-2530" Y="2730" Z="1950" S="-20" T="2036" R="129" G="0" B="0" A="255"/>
<Vtx X="-2530" Y="2730" Z="-1950" S="2036" T="2036" R="129" G="0" B="0" A="255"/>
<Vtx X="-2530" Y="0" Z="-1950" S="2036" T="-12" R="129" G="0" B="0" A="255"/>
<Vtx X="2530" Y="0" Z="-1950" S="2036" T="2036" R="127" G="0" B="0" A="255"/>
<Vtx X="2530" Y="2730" Z="-1950" S="2036" T="-12" R="127" G="0" B="0" A="255"/>
<Vtx X="2530" Y="2730" Z="1950" S="-20" T="-12" R="127" G="0" B="0" A="255"/>
<Vtx X="2530" Y="0" Z="1950" S="-20" T="2036" R="127" G="0" B="0" A="255"/>
<Vtx X="2530" Y="0" Z="1950" S="2036" T="2036" R="0" G="0" B="127" A="255"/>
<Vtx X="2530" Y="2730" Z="1950" S="2036" T="-17" R="0" G="0" B="127" A="255"/>
<Vtx X="-2530" Y="2730" Z="1950" S="-20" T="-17" R="0" G="0" B="127" A="255"/>
<Vtx X="-2530" Y="0" Z="1950" S="-20" T="2036" R="0" G="0" B="127" A="255"/>
<Vtx X="-2530" Y="0" Z="-1950" S="2032" T="-16" R="0" G="129" B="0" A="255"/>
<Vtx X="2530" Y="0" Z="-1950" S="-16" T="-16" R="0" G="129" B="0" A="255"/>
<Vtx X="2530" Y="0" Z="1950" S="-16" T="2040" R="0" G="129" B="0" A="255"/>
<Vtx X="-2530" Y="0" Z="1950" S="2032" T="2040" R="0" G="129" B="0" A="255"/>
<Vtx X="-2430" Y="2730" Z="1750" S="-16" T="2037" R="0" G="0" B="129" A="255"/>
<Vtx X="2430" Y="2730" Z="1750" S="2051" T="2037" R="0" G="0" B="129" A="255"/>
<Vtx X="2430" Y="200" Z="1750" S="2051" T="-16" R="0" G="0" B="129" A="255"/>
<Vtx X="-2430" Y="200" Z="1750" S="-16" T="-16" R="0" G="0" B="129" A="255"/>
<Vtx X="2430" Y="200" Z="-1750" S="2051" T="-16" R="0" G="127" B="0" A="255"/>
<Vtx X="-2430" Y="200" Z="-1750" S="-16" T="-16" R="0" G="127" B="0" A="255"/>
<Vtx X="-2430" Y="200" Z="1750" S="-16" T="2037" R="0" G="127" B="0" A="255"/>
<Vtx X="2430" Y="200" Z="1750" S="2051" T="2037" R="0" G="127" B="0" A="255"/>
<Vtx X="2430" Y="2730" Z="-1750" S="-9" T="2044" R="0" G="0" B="127" A="255"/>
<Vtx X="-2430" Y="2730" Z="-1750" S="2044" T="2044" R="0" G="0" B="127" A="255"/>
<Vtx X="-2430" Y="200" Z="-1750" S="2044" T="-23" R="0" G="0" B="127" A="255"/>
<Vtx X="2430" Y="200" Z="-1750" S="-9" T="-23" R="0" G="0" B="127" A="255"/>
<Vtx X="2430" Y="2730" Z="1750" S="-9" T="2044" R="129" G="0" B="0" A="255"/>
<Vtx X="2430" Y="2730" Z="-1750" S="2044" T="2044" R="129" G="0" B="0" A="255"/>
<Vtx X="2430" Y="200" Z="-1750" S="2044" T="-23" R="129" G="0" B="0" A="255"/>
<Vtx X="2430" Y="200" Z="1750" S="-9" T="-23" R="129" G="0" B="0" A="255"/>
<Vtx X="-2430" Y="2730" Z="-1750" S="-16" T="2037" R="127" G="0" B="0" A="255"/>
<Vtx X="-2430" Y="2730" Z="1750" S="2051" T="2037" R="127" G="0" B="0" A="255"/>
<Vtx X="-2430" Y="200" Z="1750" S="2051" T="-16" R="127" G="0" B="0" A="255"/>
<Vtx X="-2430" Y="200" Z="-1750" S="-16" T="-16" R="127" G="0" B="0" A="255"/>
<Vtx X="2430" Y="2730" Z="1750" S="83" T="81" R="0" G="127" B="0" A="255"/>
<Vtx X="-2430" Y="2730" Z="1750" S="1932" T="102" R="0" G="127" B="0" A="255"/>
<Vtx X="-2530" Y="2730" Z="1950" S="2021" T="-16" R="0" G="127" B="0" A="255"/>
<Vtx X="-2530" Y="2730" Z="-1950" S="2021" T="2031" R="0" G="127" B="0" A="255"/>
<Vtx X="-2430" Y="2730" Z="-1750" S="1932" T="1923" R="0" G="127" B="0" A="255"/>
<Vtx X="2530" Y="2730" Z="-1950" S="-16" T="2031" R="0" G="127" B="0" A="255"/>
<Vtx X="2430" Y="2730" Z="-1750" S="83" T="1944" R="0" G="127" B="0" A="255"/>
<Vtx X="2530" Y="2730" Z="1950" S="-16" T="-16" R="0" G="127" B="0" A="255"/>
</Vertex>

View File

@@ -0,0 +1,6 @@
<Vertex Version="0">
<Vtx X="-2530" Y="0" Z="-1950" S="2034" T="2028" R="0" G="0" B="129" A="255"/>
<Vtx X="-2530" Y="2730" Z="-1950" S="2034" T="-6" R="0" G="0" B="129" A="255"/>
<Vtx X="2530" Y="2730" Z="-1950" S="-13" T="-6" R="0" G="0" B="129" A="255"/>
<Vtx X="2530" Y="0" Z="-1950" S="-13" T="2028" R="0" G="0" B="129" A="255"/>
</Vertex>

View File

@@ -0,0 +1,13 @@
<DisplayList Version="0">
<CallDisplayList Path="objects/object_box/mat_gChestBodyMinorDL_Sides"/>
<CallDisplayList Path="objects/object_box/gChestBodyMinorDL_tri_0"/>
<CallDisplayList Path="objects/object_box/mat_gChestBodyMinorDL_Front"/>
<CallDisplayList Path="objects/object_box/gChestBodyMinorDL_tri_1"/>
<PipeSync/>
<SetGeometryMode G_LIGHTING="1" />
<ClearGeometryMode G_TEXTURE_GEN="1" />
<SetCombineLERP A0="G_CCMUX_0" B0="G_CCMUX_0" C0="G_CCMUX_0" D0="G_CCMUX_SHADE" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_ENVIRONMENT" A1="G_CCMUX_0" B1="G_CCMUX_0" C1="G_CCMUX_0" D1="G_CCMUX_SHADE" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_ENVIRONMENT"/>
<Texture S="65535" T="65535" Level="0" Tile="0" On="0"/>
<EndDisplayList/>
</DisplayList>

View File

@@ -0,0 +1,33 @@
<DisplayList Version="0">
<LoadVertices Path="objects/object_box/gChestBodyMinorDL_vtx_0" VertexBufferIndex="0" VertexOffset="0" Count="16"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="0" V01="2" V02="3"/>
<Triangle1 V00="4" V01="5" V02="6"/>
<Triangle1 V00="4" V01="6" V02="7"/>
<Triangle1 V00="8" V01="9" V02="10"/>
<Triangle1 V00="8" V01="10" V02="11"/>
<Triangle1 V00="12" V01="13" V02="14"/>
<Triangle1 V00="12" V01="14" V02="15"/>
<LoadVertices Path="objects/object_box/gChestBodyMinorDL_vtx_0" VertexBufferIndex="0" VertexOffset="16" Count="16"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="0" V01="2" V02="3"/>
<Triangle1 V00="4" V01="5" V02="6"/>
<Triangle1 V00="4" V01="6" V02="7"/>
<Triangle1 V00="8" V01="9" V02="10"/>
<Triangle1 V00="8" V01="10" V02="11"/>
<Triangle1 V00="12" V01="13" V02="14"/>
<Triangle1 V00="12" V01="14" V02="15"/>
<LoadVertices Path="objects/object_box/gChestBodyMinorDL_vtx_0" VertexBufferIndex="0" VertexOffset="32" Count="12"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="0" V01="2" V02="3"/>
<Triangle1 V00="4" V01="5" V02="6"/>
<Triangle1 V00="5" V01="7" V02="6"/>
<Triangle1 V00="5" V01="8" V02="7"/>
<Triangle1 V00="8" V01="9" V02="7"/>
<Triangle1 V00="8" V01="10" V02="9"/>
<Triangle1 V00="10" V01="11" V02="9"/>
<Triangle1 V00="10" V01="4" V02="11"/>
<Triangle1 V00="4" V01="6" V02="11"/>
<EndDisplayList/>
</DisplayList>

View File

@@ -0,0 +1,7 @@
<DisplayList Version="0">
<LoadVertices Path="objects/object_box/gChestBodyMinorDL_vtx_1" VertexBufferIndex="0" VertexOffset="0" Count="4"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="0" V01="2" V02="3"/>
<EndDisplayList/>
</DisplayList>

View File

@@ -0,0 +1,46 @@
<Vertex Version="0">
<Vtx X="-2530" Y="0" Z="1950" S="-20" T="-12" R="129" G="0" B="0" A="255"/>
<Vtx X="-2530" Y="2730" Z="1950" S="-20" T="2036" R="129" G="0" B="0" A="255"/>
<Vtx X="-2530" Y="2730" Z="-1950" S="2036" T="2036" R="129" G="0" B="0" A="255"/>
<Vtx X="-2530" Y="0" Z="-1950" S="2036" T="-12" R="129" G="0" B="0" A="255"/>
<Vtx X="2530" Y="0" Z="-1950" S="2036" T="2036" R="127" G="0" B="0" A="255"/>
<Vtx X="2530" Y="2730" Z="-1950" S="2036" T="-12" R="127" G="0" B="0" A="255"/>
<Vtx X="2530" Y="2730" Z="1950" S="-20" T="-12" R="127" G="0" B="0" A="255"/>
<Vtx X="2530" Y="0" Z="1950" S="-20" T="2036" R="127" G="0" B="0" A="255"/>
<Vtx X="2530" Y="0" Z="1950" S="2036" T="2036" R="0" G="0" B="127" A="255"/>
<Vtx X="2530" Y="2730" Z="1950" S="2036" T="-17" R="0" G="0" B="127" A="255"/>
<Vtx X="-2530" Y="2730" Z="1950" S="-20" T="-17" R="0" G="0" B="127" A="255"/>
<Vtx X="-2530" Y="0" Z="1950" S="-20" T="2036" R="0" G="0" B="127" A="255"/>
<Vtx X="-2530" Y="0" Z="-1950" S="2032" T="-16" R="0" G="129" B="0" A="255"/>
<Vtx X="2530" Y="0" Z="-1950" S="-16" T="-16" R="0" G="129" B="0" A="255"/>
<Vtx X="2530" Y="0" Z="1950" S="-16" T="2040" R="0" G="129" B="0" A="255"/>
<Vtx X="-2530" Y="0" Z="1950" S="2032" T="2040" R="0" G="129" B="0" A="255"/>
<Vtx X="-2430" Y="2730" Z="1750" S="-16" T="2037" R="0" G="0" B="129" A="255"/>
<Vtx X="2430" Y="2730" Z="1750" S="2051" T="2037" R="0" G="0" B="129" A="255"/>
<Vtx X="2430" Y="200" Z="1750" S="2051" T="-16" R="0" G="0" B="129" A="255"/>
<Vtx X="-2430" Y="200" Z="1750" S="-16" T="-16" R="0" G="0" B="129" A="255"/>
<Vtx X="2430" Y="200" Z="-1750" S="2051" T="-16" R="0" G="127" B="0" A="255"/>
<Vtx X="-2430" Y="200" Z="-1750" S="-16" T="-16" R="0" G="127" B="0" A="255"/>
<Vtx X="-2430" Y="200" Z="1750" S="-16" T="2037" R="0" G="127" B="0" A="255"/>
<Vtx X="2430" Y="200" Z="1750" S="2051" T="2037" R="0" G="127" B="0" A="255"/>
<Vtx X="2430" Y="2730" Z="-1750" S="-9" T="2044" R="0" G="0" B="127" A="255"/>
<Vtx X="-2430" Y="2730" Z="-1750" S="2044" T="2044" R="0" G="0" B="127" A="255"/>
<Vtx X="-2430" Y="200" Z="-1750" S="2044" T="-23" R="0" G="0" B="127" A="255"/>
<Vtx X="2430" Y="200" Z="-1750" S="-9" T="-23" R="0" G="0" B="127" A="255"/>
<Vtx X="2430" Y="2730" Z="1750" S="-9" T="2044" R="129" G="0" B="0" A="255"/>
<Vtx X="2430" Y="2730" Z="-1750" S="2044" T="2044" R="129" G="0" B="0" A="255"/>
<Vtx X="2430" Y="200" Z="-1750" S="2044" T="-23" R="129" G="0" B="0" A="255"/>
<Vtx X="2430" Y="200" Z="1750" S="-9" T="-23" R="129" G="0" B="0" A="255"/>
<Vtx X="-2430" Y="2730" Z="-1750" S="-16" T="2037" R="127" G="0" B="0" A="255"/>
<Vtx X="-2430" Y="2730" Z="1750" S="2051" T="2037" R="127" G="0" B="0" A="255"/>
<Vtx X="-2430" Y="200" Z="1750" S="2051" T="-16" R="127" G="0" B="0" A="255"/>
<Vtx X="-2430" Y="200" Z="-1750" S="-16" T="-16" R="127" G="0" B="0" A="255"/>
<Vtx X="2430" Y="2730" Z="1750" S="83" T="81" R="0" G="127" B="0" A="255"/>
<Vtx X="-2430" Y="2730" Z="1750" S="1932" T="102" R="0" G="127" B="0" A="255"/>
<Vtx X="-2530" Y="2730" Z="1950" S="2021" T="-16" R="0" G="127" B="0" A="255"/>
<Vtx X="-2530" Y="2730" Z="-1950" S="2021" T="2031" R="0" G="127" B="0" A="255"/>
<Vtx X="-2430" Y="2730" Z="-1750" S="1932" T="1923" R="0" G="127" B="0" A="255"/>
<Vtx X="2530" Y="2730" Z="-1950" S="-16" T="2031" R="0" G="127" B="0" A="255"/>
<Vtx X="2430" Y="2730" Z="-1750" S="83" T="1944" R="0" G="127" B="0" A="255"/>
<Vtx X="2530" Y="2730" Z="1950" S="-16" T="-16" R="0" G="127" B="0" A="255"/>
</Vertex>

View File

@@ -0,0 +1,6 @@
<Vertex Version="0">
<Vtx X="-2530" Y="0" Z="-1950" S="2034" T="2028" R="0" G="0" B="129" A="255"/>
<Vtx X="-2530" Y="2730" Z="-1950" S="2034" T="-6" R="0" G="0" B="129" A="255"/>
<Vtx X="2530" Y="2730" Z="-1950" S="-13" T="-6" R="0" G="0" B="129" A="255"/>
<Vtx X="2530" Y="0" Z="-1950" S="-13" T="2028" R="0" G="0" B="129" A="255"/>
</Vertex>

View File

@@ -0,0 +1,13 @@
<DisplayList Version="0">
<CallDisplayList Path="objects/object_box/mat_gChestBodySmallKeyDL_Sides"/>
<CallDisplayList Path="objects/object_box/gChestBodySmallKeyDL_tri_0"/>
<CallDisplayList Path="objects/object_box/mat_gChestBodySmallKeyDL_Front"/>
<CallDisplayList Path="objects/object_box/gChestBodySmallKeyDL_tri_1"/>
<PipeSync/>
<SetGeometryMode G_LIGHTING="1" />
<ClearGeometryMode G_TEXTURE_GEN="1" />
<SetCombineLERP A0="G_CCMUX_0" B0="G_CCMUX_0" C0="G_CCMUX_0" D0="G_CCMUX_SHADE" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_ENVIRONMENT" A1="G_CCMUX_0" B1="G_CCMUX_0" C1="G_CCMUX_0" D1="G_CCMUX_SHADE" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_ENVIRONMENT"/>
<Texture S="65535" T="65535" Level="0" Tile="0" On="0"/>
<EndDisplayList/>
</DisplayList>

View File

@@ -0,0 +1,33 @@
<DisplayList Version="0">
<LoadVertices Path="objects/object_box/gChestBodySmallKeyDL_vtx_0" VertexBufferIndex="0" VertexOffset="0" Count="16"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="0" V01="2" V02="3"/>
<Triangle1 V00="4" V01="5" V02="6"/>
<Triangle1 V00="4" V01="6" V02="7"/>
<Triangle1 V00="8" V01="9" V02="10"/>
<Triangle1 V00="8" V01="10" V02="11"/>
<Triangle1 V00="12" V01="13" V02="14"/>
<Triangle1 V00="12" V01="14" V02="15"/>
<LoadVertices Path="objects/object_box/gChestBodySmallKeyDL_vtx_0" VertexBufferIndex="0" VertexOffset="16" Count="16"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="0" V01="2" V02="3"/>
<Triangle1 V00="4" V01="5" V02="6"/>
<Triangle1 V00="4" V01="6" V02="7"/>
<Triangle1 V00="8" V01="9" V02="10"/>
<Triangle1 V00="8" V01="10" V02="11"/>
<Triangle1 V00="12" V01="13" V02="14"/>
<Triangle1 V00="12" V01="14" V02="15"/>
<LoadVertices Path="objects/object_box/gChestBodySmallKeyDL_vtx_0" VertexBufferIndex="0" VertexOffset="32" Count="12"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="0" V01="2" V02="3"/>
<Triangle1 V00="4" V01="5" V02="6"/>
<Triangle1 V00="5" V01="7" V02="6"/>
<Triangle1 V00="5" V01="8" V02="7"/>
<Triangle1 V00="8" V01="9" V02="7"/>
<Triangle1 V00="8" V01="10" V02="9"/>
<Triangle1 V00="10" V01="11" V02="9"/>
<Triangle1 V00="10" V01="4" V02="11"/>
<Triangle1 V00="4" V01="6" V02="11"/>
<EndDisplayList/>
</DisplayList>

View File

@@ -0,0 +1,7 @@
<DisplayList Version="0">
<LoadVertices Path="objects/object_box/gChestBodySmallKeyDL_vtx_1" VertexBufferIndex="0" VertexOffset="0" Count="4"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="0" V01="2" V02="3"/>
<EndDisplayList/>
</DisplayList>

View File

@@ -0,0 +1,46 @@
<Vertex Version="0">
<Vtx X="-2530" Y="0" Z="1950" S="-20" T="-12" R="129" G="0" B="0" A="255"/>
<Vtx X="-2530" Y="2730" Z="1950" S="-20" T="2036" R="129" G="0" B="0" A="255"/>
<Vtx X="-2530" Y="2730" Z="-1950" S="2036" T="2036" R="129" G="0" B="0" A="255"/>
<Vtx X="-2530" Y="0" Z="-1950" S="2036" T="-12" R="129" G="0" B="0" A="255"/>
<Vtx X="2530" Y="0" Z="-1950" S="2036" T="2036" R="127" G="0" B="0" A="255"/>
<Vtx X="2530" Y="2730" Z="-1950" S="2036" T="-12" R="127" G="0" B="0" A="255"/>
<Vtx X="2530" Y="2730" Z="1950" S="-20" T="-12" R="127" G="0" B="0" A="255"/>
<Vtx X="2530" Y="0" Z="1950" S="-20" T="2036" R="127" G="0" B="0" A="255"/>
<Vtx X="2530" Y="0" Z="1950" S="2036" T="2036" R="0" G="0" B="127" A="255"/>
<Vtx X="2530" Y="2730" Z="1950" S="2036" T="-17" R="0" G="0" B="127" A="255"/>
<Vtx X="-2530" Y="2730" Z="1950" S="-20" T="-17" R="0" G="0" B="127" A="255"/>
<Vtx X="-2530" Y="0" Z="1950" S="-20" T="2036" R="0" G="0" B="127" A="255"/>
<Vtx X="-2530" Y="0" Z="-1950" S="2032" T="-16" R="0" G="129" B="0" A="255"/>
<Vtx X="2530" Y="0" Z="-1950" S="-16" T="-16" R="0" G="129" B="0" A="255"/>
<Vtx X="2530" Y="0" Z="1950" S="-16" T="2040" R="0" G="129" B="0" A="255"/>
<Vtx X="-2530" Y="0" Z="1950" S="2032" T="2040" R="0" G="129" B="0" A="255"/>
<Vtx X="-2430" Y="2730" Z="1750" S="-16" T="2037" R="0" G="0" B="129" A="255"/>
<Vtx X="2430" Y="2730" Z="1750" S="2051" T="2037" R="0" G="0" B="129" A="255"/>
<Vtx X="2430" Y="200" Z="1750" S="2051" T="-16" R="0" G="0" B="129" A="255"/>
<Vtx X="-2430" Y="200" Z="1750" S="-16" T="-16" R="0" G="0" B="129" A="255"/>
<Vtx X="2430" Y="200" Z="-1750" S="2051" T="-16" R="0" G="127" B="0" A="255"/>
<Vtx X="-2430" Y="200" Z="-1750" S="-16" T="-16" R="0" G="127" B="0" A="255"/>
<Vtx X="-2430" Y="200" Z="1750" S="-16" T="2037" R="0" G="127" B="0" A="255"/>
<Vtx X="2430" Y="200" Z="1750" S="2051" T="2037" R="0" G="127" B="0" A="255"/>
<Vtx X="2430" Y="2730" Z="-1750" S="-9" T="2044" R="0" G="0" B="127" A="255"/>
<Vtx X="-2430" Y="2730" Z="-1750" S="2044" T="2044" R="0" G="0" B="127" A="255"/>
<Vtx X="-2430" Y="200" Z="-1750" S="2044" T="-23" R="0" G="0" B="127" A="255"/>
<Vtx X="2430" Y="200" Z="-1750" S="-9" T="-23" R="0" G="0" B="127" A="255"/>
<Vtx X="2430" Y="2730" Z="1750" S="-9" T="2044" R="129" G="0" B="0" A="255"/>
<Vtx X="2430" Y="2730" Z="-1750" S="2044" T="2044" R="129" G="0" B="0" A="255"/>
<Vtx X="2430" Y="200" Z="-1750" S="2044" T="-23" R="129" G="0" B="0" A="255"/>
<Vtx X="2430" Y="200" Z="1750" S="-9" T="-23" R="129" G="0" B="0" A="255"/>
<Vtx X="-2430" Y="2730" Z="-1750" S="-16" T="2037" R="127" G="0" B="0" A="255"/>
<Vtx X="-2430" Y="2730" Z="1750" S="2051" T="2037" R="127" G="0" B="0" A="255"/>
<Vtx X="-2430" Y="200" Z="1750" S="2051" T="-16" R="127" G="0" B="0" A="255"/>
<Vtx X="-2430" Y="200" Z="-1750" S="-16" T="-16" R="127" G="0" B="0" A="255"/>
<Vtx X="2430" Y="2730" Z="1750" S="83" T="81" R="0" G="127" B="0" A="255"/>
<Vtx X="-2430" Y="2730" Z="1750" S="1932" T="102" R="0" G="127" B="0" A="255"/>
<Vtx X="-2530" Y="2730" Z="1950" S="2021" T="-16" R="0" G="127" B="0" A="255"/>
<Vtx X="-2530" Y="2730" Z="-1950" S="2021" T="2031" R="0" G="127" B="0" A="255"/>
<Vtx X="-2430" Y="2730" Z="-1750" S="1932" T="1923" R="0" G="127" B="0" A="255"/>
<Vtx X="2530" Y="2730" Z="-1950" S="-16" T="2031" R="0" G="127" B="0" A="255"/>
<Vtx X="2430" Y="2730" Z="-1750" S="83" T="1944" R="0" G="127" B="0" A="255"/>
<Vtx X="2530" Y="2730" Z="1950" S="-16" T="-16" R="0" G="127" B="0" A="255"/>
</Vertex>

View File

@@ -0,0 +1,6 @@
<Vertex Version="0">
<Vtx X="-2530" Y="0" Z="-1950" S="2034" T="2028" R="0" G="0" B="129" A="255"/>
<Vtx X="-2530" Y="2730" Z="-1950" S="2034" T="-6" R="0" G="0" B="129" A="255"/>
<Vtx X="2530" Y="2730" Z="-1950" S="-13" T="-6" R="0" G="0" B="129" A="255"/>
<Vtx X="2530" Y="0" Z="-1950" S="-13" T="2028" R="0" G="0" B="129" A="255"/>
</Vertex>

View File

@@ -0,0 +1,13 @@
<DisplayList Version="0">
<CallDisplayList Path="objects/object_box/mat_gChestBodyTokenDL_Sides"/>
<CallDisplayList Path="objects/object_box/gChestBodyTokenDL_tri_0"/>
<CallDisplayList Path="objects/object_box/mat_gChestBodyTokenDL_Front"/>
<CallDisplayList Path="objects/object_box/gChestBodyTokenDL_tri_1"/>
<PipeSync/>
<SetGeometryMode G_LIGHTING="1" />
<ClearGeometryMode G_TEXTURE_GEN="1" />
<SetCombineLERP A0="G_CCMUX_0" B0="G_CCMUX_0" C0="G_CCMUX_0" D0="G_CCMUX_SHADE" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_ENVIRONMENT" A1="G_CCMUX_0" B1="G_CCMUX_0" C1="G_CCMUX_0" D1="G_CCMUX_SHADE" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_ENVIRONMENT"/>
<Texture S="65535" T="65535" Level="0" Tile="0" On="0"/>
<EndDisplayList/>
</DisplayList>

View File

@@ -0,0 +1,33 @@
<DisplayList Version="0">
<LoadVertices Path="objects/object_box/gChestBodyTokenDL_vtx_0" VertexBufferIndex="0" VertexOffset="0" Count="16"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="0" V01="2" V02="3"/>
<Triangle1 V00="4" V01="5" V02="6"/>
<Triangle1 V00="4" V01="6" V02="7"/>
<Triangle1 V00="8" V01="9" V02="10"/>
<Triangle1 V00="8" V01="10" V02="11"/>
<Triangle1 V00="12" V01="13" V02="14"/>
<Triangle1 V00="12" V01="14" V02="15"/>
<LoadVertices Path="objects/object_box/gChestBodyTokenDL_vtx_0" VertexBufferIndex="0" VertexOffset="16" Count="16"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="0" V01="2" V02="3"/>
<Triangle1 V00="4" V01="5" V02="6"/>
<Triangle1 V00="4" V01="6" V02="7"/>
<Triangle1 V00="8" V01="9" V02="10"/>
<Triangle1 V00="8" V01="10" V02="11"/>
<Triangle1 V00="12" V01="13" V02="14"/>
<Triangle1 V00="12" V01="14" V02="15"/>
<LoadVertices Path="objects/object_box/gChestBodyTokenDL_vtx_0" VertexBufferIndex="0" VertexOffset="32" Count="12"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="0" V01="2" V02="3"/>
<Triangle1 V00="4" V01="5" V02="6"/>
<Triangle1 V00="5" V01="7" V02="6"/>
<Triangle1 V00="5" V01="8" V02="7"/>
<Triangle1 V00="8" V01="9" V02="7"/>
<Triangle1 V00="8" V01="10" V02="9"/>
<Triangle1 V00="10" V01="11" V02="9"/>
<Triangle1 V00="10" V01="4" V02="11"/>
<Triangle1 V00="4" V01="6" V02="11"/>
<EndDisplayList/>
</DisplayList>

View File

@@ -0,0 +1,7 @@
<DisplayList Version="0">
<LoadVertices Path="objects/object_box/gChestBodyTokenDL_vtx_1" VertexBufferIndex="0" VertexOffset="0" Count="4"/>
<Triangle1 V00="0" V01="1" V02="2"/>
<Triangle1 V00="0" V01="2" V02="3"/>
<EndDisplayList/>
</DisplayList>

Some files were not shown because too many files have changed in this diff Show More