Transitions final autosave location to `OnTransitionEnd`.
Adds functionality to autosave to set a delayed save flag if AutoSave is set to Major or All Items and one is obtained in a grotto, to avoid grotto autosaving but still provide for the autosave when location-based saving is off.
Fixes small bug with item lookup where sometimes an item's `modIndex` would sometimes be reported one way, but the way Randomizer does things it would be in a the other `modIndex`, and the lookup would fail.
Minor variable name clarification in ItemTableManager.
Modifies AutoSave to account for item ID overlap from `MOD_RANDOMIZER` table (all items in the randomizer table is considered major for AutoSave purposes except ice traps).
* Modifies custom sequence loading to bypass other sounds being loaded in AudioCollection to fix missing custom sequences on load.
* Modified `audio_load`'s sequenceMap allocation to utilize `AudioCollection`'s sequenceMap size to account for all audio assets already loaded into that sequenceMap. This gives a non-arbitrary number in addition to the vanilla sequence count to allocate with for `audio_load`'s sequenceMap.
Added `HasSequenceNum` to `AudioCollection` as well to streamline the check against `AudioCollection`'s sequenceMap to skip the non-sequence assets in there.
Added clarification comment for seqNum and MAX_AUTHENTIC_SEQID section.
* Clarified comment about AudioCollection seqNum and MAX_AUTHENTIC_SEQID.
* A bit more on comment from the last commit.
* When rupees are given as starting items, they still modify `gSaveContext.rupeeAccumulator`, which means that if you make a new file, start it, and reload without saving, or exit SoH before starting the new file, those rupees were lost. This adds a check for `gPlayState` being NULL, and if it is, adds those initial rupees to the rupee count directly.
* Update soh/src/code/z_parameter.c
Co-authored-by: briaguya <70942617+briaguya-ai@users.noreply.github.com>
---------
Co-authored-by: briaguya <70942617+briaguya-ai@users.noreply.github.com>
* Changed OnReceiveItem hook to pass GetItemEntry, which required the following changes:
Reworked the references to it in `z_parameter` to call a single function with the item return and hook call in it for ease of editing.
Modified the pendingSale functionality to set and pass a modIndex value as well, as mod items (like randomizer) in shops still use the vanilla sale path.
* Missed some files for the pendingSale changes.
Also added Randomizer_Item_Give to the OnReceiveItem system.
* Ice traps now trigger OnReceiveItem.
* All ice traps truly do work now.
As a side effect, item autosave doesn't work for shop/scrub/merchant transactions, requires new OnSaleEnded hook that can also call the autosave.
* Removed unnecessary calls to ItemTable_RetrieveEntry where GetItemEntry properties were being used to call it. General code cleanup.
* Added OnSaleEnd hook for when rupees are finished deducting after a sale.
Migrated AutoSave to its own function, registered AutoSave function to OnReceiveItem and OnSaleEnd hooks to help with autsaving after buying items.
Some futureproofing for AutoSave function with parameters for skipping autosave, for when transition end is migrated to AutoSave function (whether through direct call or through a hook).
* Renamed hook paramaters, and registered hook function parameters, to a more descriptive alternative.
* Missed a couple, fixed a typo.
* One more missed paramater name refactor.
Refactored all references to OnReceiveItem to OnItemReceive to mirror upcoming full hook refactor for name ordering conventions.
Up-to-date with develop.
* save build version to savefile
* adjust rando hash icons to use fade in/out
* add dialog message support on the file select screen and display rando version warning
* remove duplicated message functions and use stubbed play state instead for rando warning
* add major/minor/patch version saving to file and compare against
* use strncpy and memset for build version
* don't show rando warning one copy/erase screens
* review feedback
* Add german and french translations for rando warning
Co-authored-by: PurpleHato <linkvssangoku.jr@gmail.com>
---------
Co-authored-by: PurpleHato <linkvssangoku.jr@gmail.com>
* add loadgame/exitgame GI hooks
* implement loadgame/exitgame hooks in game code
* move entrance tracker data lifecycle to hooks
* update cosmetic editor to update onloadgame hook
* Rename "SFX Editor" to "Audio Editor"
* Move some functionality out into a new class `AudioCollection`
* Add a tab to exclude sfx/sequences from shuffle pool
---------
Co-authored-by: briaguya <briaguya@alice>
Co-authored-by: briaguya <briaguya>
Co-authored-by: David Chavez <david@dcvz.io>
* Update z_camera.c
* Update GameControlEditor.cpp
* Update GameControlEditor.cpp
* Update GameControlEditor.cpp
Adding Sliders for first person X and Y axis
* Update z_player.c
Modified variables to allowed separate sensitivity settings for x and y axis
* fix entrance init and entrance tracker not working properly when no spoiler log is loaded
* fix rando adult trade spoilable items reverting when no spoiler log loaded
* Moves SoH mixer to SoH from LUS.
* Debug camera now works in SoH, but mempak saving does not (yet).
* Debug camera is now enabled/disabled based on the gDebugEnabled cvar.
* Updates OTRGlobals comments
* Updates OTRGlobals comments
* Begin GameInteractor
* Basic skeleton of PoC
* WIP
* First 2 CC effects transitioned to GameInteractor
* Prepare GameInteractor classes for CrowdControl
* More effects & replace chaosEffects with GameInteractor
* CC connection fixes & all CC effects (enemy spawns still borked)
* First couple of build error fixes
* Fix build
* Proper enemy spawning
* Clean up old CC code
* Extract link size/invisibility into GameInteractor
* Small fix/cleanup
* Suggestions for PR
* Address PR comment
* Addressed more comments & small adjustments
* Fix crash when spawning enemies
* Remove Remove()
* Move checks into Apply() and move CC and some console commands to it
* Use inheritance to abstract check on application
* Rename prefix Actions with RawAction
* Make Remove return a Result
* Fix issue with compilation
* debugconsole -> GameInteractionEffects progress
* Add State in GI
* Unify some Effects
* Port more debug console items
* Remove state modifyiers from raw actions
* Port over last raw action / state in console
* Adjust some types
* Consolidate link size modifier effect
* Adjust more types
* Define category strings in CC
* Clean up remaining non defined strings
* Fix bug in timed effects
* Rename old pack
* CC fixes
* Translate GI enum function
* Console cleanup/fixes/consistency
Co-authored-by: David Chavez <david@dcvz.io>
* full health spawn
Co-authored-by: MoriyaFaith <46070717+MoriyaFaith@users.noreply.github.com>
* add enahancement to gamemenubar, update to use new cvar method names, simplify save loading logic so loading a save with less than 3 hearts spawns with full hearts with enhancement enabled instead of spawing with 3
* formatting
Co-authored-by: MoriyaFaith <46070717+MoriyaFaith@users.noreply.github.com>
* New function: overlay text duration in seconds.
`Overlay_DisplayText` took a float as an argument, with no clear indication of what that float represented. That float also evaluates to different durations given different frame rates. However, since we know what the frame rate should be at any given time (since it's stored in a CVar) we can calculate what this duration should be based on the number of seconds we want the overlay to be displayed. That's what `Overlay_DisplayText_Seconds` does.
* Adds Slider for Overlay Sequence Name Durations
* sync 3ds upstream logic changes for boss rooms
* add boss shuffle settings and handling to 3ds code
* add boss shuffle handling to game code
* repair authentically bugged entrances for boss shuffle
* add boss entrances to the entrance tracker
* unset hint area for boss rooms to fix altar hint
* update boss reward hints to not mention dungeons
* one more boss heart container hint fix
* reorder entrance rando funcs
* support closed forest with boss shuffle and simple boss room entrance pairs in shuffle table
* fix death warp in boss rooms without saving; fix KD boss room in tracker
* remove boss shuffle check from dungeon open checks and some cleanups
* add boss shuffle to preset clear
* remove dungeon entry exit connection from boss rooms
* another no hint fix for boss shuffle
* undo change for exact location hints
* clarify comments
* Added too much
* Added 3d settings and brought over to soh
* fixed conditionals for replacing LA hint
* whoops
* Finshed making settings consistent; minor text edit
* fix leftovers from adding warp hints
* more fixes from merge
* fix skull hint messages
* Added fire temple goron junk hints; menu stuff
* Address feedback
* Added optional scrub text
* whoops
* Add hint cvars to clear preset func
* whoops again
* whoops the third
* ADD: French Pass
* FIXED: Dampe + Skull Reward
* TWEAK: German skulltula hint
* TWEAK: French oopsie
* Address feedback
* whoops
* remove "staticness" from altar/ganon text funcs
* ADD: German
* actually add warp song hints to things;
always generate ganon hint and let OTRGlobals handle showing it
* Fix CVar Getters
* whoops
* for real this time
* Actually implemented scrub text in 3d rando
Co-authored-by: PurpleHato <linkvssangoku.jr@gmail.com>
* Adds option for showing sequence names on the overlay
Allows sequences to appear on the overlay in the bottom right corner for a few seconds whenever a new one is loaded into the primary sequence player. This means it does not apply to fanfares or enemy bgm. Fanfares I chose not to display because it would cause a lot of text to display back to back in some areas, and enemy bgm would have some technical challenges with this due to the way it loads. Mainly because the Lost Woods music would load in Goron City the same way (as well as the opposite).
* Fixes crash when a sequence without a name is attempted to be displayed.
* Removes accidentally committed CMakeSettings.json
* Updates CVar_GetS32 to CVarGetInteger
* Initial camera distance slider
* works with freecam
* improving the settings configurability, adding distance slider and transition speed for the free camera
adding seperate sensitivity and invert settings for aiming/first person camera
* spelling
* tooltip msg on camera invvert
* typos
* removing the original free camera checkbox in experimental menu
* adding name change to new presets file
Co-authored-by: RaelCappra <rael.cappra@gmail.com>
* added fix option to fix camera swing; Fixes camera getting stuck on collision when standing still, also fixes slight shift back in camera when stop moving
* add option to fix hang off ledge swing rate; Fixes camera swing rate when player falls of a ledge and camera swings around
* adding camera fixes to preset list
* Cosmetic Editor v3
* Workaround for cvar_clear not working correctly
* Nest RGBA values under Value key
* Implement arrow cosmetics
* Implement keese cosmetics
* Tweaks to life meter
* Implement file choose color
* Remove old title fire colors
* A few more silly things
* Fix from upstream pulls
* Fix hilts and sword during ganon cutscene
* Add slingshot
* Add metal trap and red ice
* Add iron knuckles cosmetics
* Add navi cosmetics
* Attempt to fix linux error
* adjust some comments and alignment
* Implement trails cosmetics
* Implement charged sword spins
* Comment out options that haven't been implemented
* Fix exploded rupee color in shooting gallery
* Add two silly options
* Add comments and minor changes from feedback
* Adjust comment about boomerang gem
* Gracefully handle chest textures missing
* Allows OTRExporter to parse pairs of .seq and .meta files
* Gets added sequences available to SfxEditor and playing in game.
* Some cleanup of the names appearing in the SfxEditor.
* Moves sequence swap lower in the audio command stack.
* Increases temp cache memory available on title/file-select screen.
Certain sequences wouldn't play on the file select and title screen
because they were too large to be cached.
* Introduces workaround for 255 sequence limit.
* Bug fixes and cleanup.
* Fixes bug where fanfares would sometimes disable the sequence player.
* Fixes bug causing certain areas to discard caches when loading enemy music.
* Fixes potential config-related crash by replacing invalid characters.
* Allows custom bgm to play in all BGM categories.
* Properly randomizes the custom tracks.
* Moves custom sequences to a patch OTR.
* If custom music was not loaded, fall back to default values.
* Prevents OOB crash on Synthwave array and adds octave drop feature.
Added octave drop to experimental features, which drops the octave of
a note that is too high for the audio engine to actually play. Without
this, some custom sequences have notes which cap at a specific value
and sound terrible. At least with this they will still harmonize with
the other notes. Experimental tab added to the SfxEditor to house
the checkbox for the octave drop feature.
* Adds more pool memory for a few tracks that couldn't fit.
* Some cleanup on the generated music archive process.
* Fixes missed memory boost from earlier.
* Adds ability to remove enemy proximity music.
* Applies correct cache policy to fanfares to prevent unloading sequences.
* Removes case-sensitiveness of the sequence type.
* Fixes not reverting to sequence after miniboss.
* Fixes transition to/from miniboss (again) and ocarina bug.
To be clear, fixes the more rampant portable ocarina bug present in my earlier builds, not the authentic one.
* Finally properly fixes transitions between sequences
For miniboss fights and SfxEditor previews.
* Removes unneeded boolean expression.
* Adds randomize button to individual SFX Editor entries.
* Fixes lost woods music overwriting goron city music.
* Plays swapped Hyrule Field music when transitioning to daytime.
* Fixes swapping Gerudo Valley music when transitioning from daytime.
* Updates custom sequence OTRPath to match SequenceOTRizer.
* Reverts changes to OTRExporter in favor of external tool
* Fixes formatting issues.
* Attempts to fix formatting issue in git diff.
* Should actually fix formatting issues.
* Should fix mac/linux exclusive build error.
* Fixes segfault on macos.
* sort custom seqs
* Fixes audioseq crash when under 255 seqs
* Removes magic numbers.
* Removes commented out code.
* fixes formatting in SfxEditor.h
Co-authored-by: briaguya <70942617+briaguya-ai@users.noreply.github.com>
* Cleans up the one hardcoded QueueSeqCmd call.
* Fixes unneeded erroneous memory boost applied earlier.
* Applies additional formatting/cleanliness suggestions from review
* Fixes small logic bug
Co-authored-by: RaelCappra <rael.cappra@gmail.com>
Co-authored-by: briaguya <70942617+briaguya-ai@users.noreply.github.com>
* initial pass for entrance tracker
* add search meta tags to entrance tracker data; clear entrance tracker on title screen
* rename to use playstate/play
* fix lus imports
* move discovered entrance info to SohStats struct
* Add scene info and highlighting to entrance tracker
* hide undiscovered text when searching
* add comments for entrance tracker
* fix merge conflict error
* account for zora river -> hyrule field water entrance in tracker
* fix assignement error
* remove unneeded defaults from debug file init
* adjust entrance tracker settings and add more search tags
* convert magic numbers to defines; add more comments to entrance tracker; clarify variable names
* add reverse index to entrance tracker data to compare with instead of using strings
* rename variables
* use trial enum instead of magic numbers
* simplify trial count/random trial logic
* set default to set number
Co-authored-by: briaguya <briaguya@alice>
* First round of upstream updates and commenting patternss
* Renames from z64player
* Renames from z64save
* Undo changes to legacy save struct
* Add missing reference from entrance rando
* Fixes from stat tracker
* More tweaks
* First test of gathering some gameplay stats
* timer changes and other stuff
* Move code to new files + rename
* Name change - gamePlayStats
* Finish rename, remove n64ddFlag checks
* Improve item get times
* Better time tracking, more stats,
* Put button under Enhancements
* Fix merge conflict
* Add pauseCount, fix bug with rando items
* Adjust inits/declarations
* step counter
* Name change: "itemGetTime" to "timestamp"
* Tidying + CI test
* Set up array for stat counts
* Macro
#define GAMEPLAYSTAT_TOTAL_TIME (gSaveContext.gameplayStats.playTimer / 2 + gSaveContext.gameplayStats.pauseTimer / 3)
* Add boss defeat timestamps
* Add sword swings, pots broken, bushes cut
* fix int type
* Add counts for enemies defeated
Broken down by enemy, with a total
* Add ammo used
* Hide breakdowns until count > 0
* Forgot Big Octo
* Count chests opened
* Update after LUS submodule
* Enemy count spacing
* Comments
* Count 3 mini Floormasters as 1 Floormaster
+ some cleanup
* Comments
* Colour coding for timestamps on quest items
i.e. medallions/stones/songs
* Move stat into the sohStats struct
+ rearrange the counts enum for easier addition of future counts
* Some documentation + count button presses
* Stop counting button presses when Ganon defeated
* Couple bugfixes
Add count for Gerudo Thief, fix step counter counting in some situations where it shouldn't
* Fix comment
* Added button to switch age
* Added logic to switch link's age
Reloads link from last entrance he went through once his age is switched.
* Link now respawns where he last was
* Update game.c
* move setting to GameMenuBar.cpp, fix build issues
Co-authored-by: Jake Edvenson <77412657+JakeEdvenson@users.noreply.github.com>
Co-authored-by: briaguya <briaguya@alice>