the previous all loaches logic required modifying every `isLoach` check
throughout the file. this had the benefit of allowing live-toggling all fish
to be loaches or not, but added a lot of complexity.
this changes the logic to just set `isLoach` on each fish instead, and updates the tooltip to note an area reload is required
* Move Fishsanity hooks out of mods.cpp
* Assign fish check flags.
* Clean up location_list for fish
* Prevent fishing from giving double items.
* Remove no-longer-used mPendingFish
* Override draw function for fishing
This allows the draw functions in the source
overlay to match the decomp.
* Override draw function for EnFish
* Overwrite grotto fish params based on respawn data
This allows the randomizer to identify them
automatically without any special logic.
The catch (pun not intended) is that grotto fish don't respawn,
and they were previously identified for such by a params value of 1,
so the logic to take care of that needed to be duplicated.
Thankfully it wasn't very much.
* Add a VB for catching actors in bottles.
* Clean up remaining code after conversion to VB
This breaks fast FastDrops for bottle pickups, though
readding it shouldn't be too hard with the VB hook.
* Remove fishsanityParams from Fishing
It was previously used to track exactly which fish would be
released after a catch, but since both candidate fish
would've been caught, they both wouldn't give checks
anyways.
* Update soh/soh/Enhancements/randomizer/hook_handlers.cpp
Co-authored-by: Pepe20129 <72659707+Pepe20129@users.noreply.github.com>
* Re-add FastDrops for bottle pickups.
While this does diverge from the vanilla decomp, I'm uncertain of
the order that hooks are run, so I put it back into z_player.c
just to be safe. A future commit can do a more proper implementation
using VB hooks.
* Move initialisation of fishsanity hooks into hook_handlers
* Change location constructor to take RandomizerInf instead of uint8_t
This shouldn't have an effect as-is, but other changes can add
additional randomizer flags that can end up pushing fishsanity check
flags out of the range of a uint8_t, causing the cast to overflow
and not be stored correctly. With this change, it could still overflow
when writing to the flag field of Location, but said field is unused
and the parameter is really only for setting the flag for the
SpoilerCollectionCheck.
* Render uncaught overworld fish as randomized item
* Fix windows build by zeroing unused field
* Fix scene parameter type
This resolves a build error on Mac and Windows, but Linux
instead buries it in the sea of warnings, meaning I can't
see it until it fails CI.
---------
Co-authored-by: Pepe20129 <72659707+Pepe20129@users.noreply.github.com>
* Remove categories
* Remove SpoilerCollectionCheckGroup
* Remove unused Location constructors
* Remove LocationType
* Remove unused SpoilerCollectionCheckTypes
* Remove hints' isVanillaCompletion, it's always false
* Remove SpoilerCollectionCheck::None
Same effect as default constructor
* Fix mistake
* Update location.h
* Deduce RC Area by scene when possible
* Remove useless constructors
* Remove flag in most situations
* Format improvements
* Replace overworldLocations with a function
* Replace shopLocationLists with a function
* Replace gossipStoneLocations with a function
Also add a new RCType for static hints
* Replace scrubLocations with a function
* Replace staticHintLocations with a function
* Replace overworldFishLocations with a function
* Replace pondFishLocations with a function
* Remove RC_TRIFORCE_COMPLETED from GetOverworldLocations
* Update fill.cpp
Re-add filter for dungeonLocations for song shuffle dungeon rewards (and fix erroneous check for song locations there).
Modify songLocations filter for dungeon rewards to check for RCTYPE_BOSS_HEART_OR_OTHER_REWARD and then the two song locations added for it.
* Update fill.cpp
Fix bracketing.
* Apply Pepper0ni's patch
---------
Co-authored-by: Malkierian <malkierian@live.com>
* Change tristate off graphic to none instead of X to avoid confusion.
Modify Combobox and Slider Options to clamp directly to options.size() - 1 instead of just decrementing if current value is higher than max.
* Restore RenderCross line, but commented out.
100 GS Reward was missing from RSK_GANONS_BOSS_KEY causing indexing issues. Notably, Triforce Hunt was setting Ganon's Boss Key to "Vanilla" rather than "Triforce Hunt."
* Move all `SaveContext` operations to `Logic` to prepare for encapsulation.
* Rename `Area` to `Region`, `areaTable` to `regionTable`, and all local variables named variants of area to region that were of the `RandomizerRegion` or `Region` types.
* Fix mistaken renames.
* Rename PT_AREA_RESET to PT_REGION_RESET after rebasing on performance timer commit.
Change include path for the timer to absolute rather than relative.
* messy first implementation, pushing for verification
* push to test other platforms, add benchmark preset
* more other compiler fixes
* Finish implementing benchmarks
* forgot to reset the timers each run
* do it better
* move timers to thier own file
* forgot to add files
* Update check status in the check tracker to the new system. Status and Skipped are now stored in ItemLocation, though still saved separately in the trackerData section.
* Fix shop checks not showing prices when identified.
* Patch fix for check status bleed.
Some cleanup of unused code.
* Small tracker optimizations.
* Fix check hiding.
* Bit more cleanup.
* Unhide the filter and make it work again...
* Fix area totals tracking.
Fix skipped status saving.
* Merge conflict cleanup.
* saving for branch change
* V0 doesn't work
* crashing in random places halp
* push to rebase
* commit for branch change
* more branch switching
* First apparent working
* fix entrence validation
* comment cleanups
* post merge fixes
* Fix entrences not validating when spawns/owl drops are on but other entrences are not
* remove bombchusFound from the struct too
* Fix issue causing improper bombchu filtering on the playthrough
* text fixes
* submodules pls
* submodules pls pt 2
* Restore Deku Tree open as adult with dungeon shuffle.
* Add Mido spawn VB to allow for preventing Mido moving in rando when starting with Zelda's letter and closed deku or forest.
* Use RAND_GET_OPTION instead of OTRGlobals rando context, get rid of IS_RANDO in deku mouth VB handler.
* Removed all CVarLoad uses from code to prevent thread concurrency issues.
* Add mutext locks to save and load functions to prevent concurrent operations between those two.
* Converted all GuiWindows to the new separate Begin/End format in current LUS except InputViewer, CheckTracker, ItemTracker and Modals.
* Setup Check, Entrance, Item trackers and Input Viewer to override `Draw()` to bypass the ImGui Begin and End, as they're not intended to go in the modern menu.
* Cleanup.
* Add git info to title screen & gameplay stats
* Change the branch criteria to starting with `develop`
* Update z_title.c
* Change the branch criteria to not having a tag
* Always show both when not a release build
* Only show build version in tagged releases
* Additions for the German currencies in randomizer.cpp
* Additions for the German translation in hint_list_exclude_dungeon.cpp
* Fixes for the German translation in z_select.c
* Fixes for the German translation in z_select.c
* Additions for the German translation in hint_list_exclude_overworld.cpp
* Initial Bombchu rework implementation
* Finish bombchus in logic overhaul
* address reviews
* Post resolution fixes
* fix git being dumb
* Readd Child Wallet To Bombchu Bowling Logic
* post merge fixes
* fix some oversights in bombchu shopping logic
* doesn't work, linker errors
* cleanup old reviews
* Make it build, likely broken by VB
* attempt to fix carpet man second purchse text
* commit to change branch
* mostly have carpet guy working
* badly fix carpet salesman
* fix better bombchu shopping
* fix bombchu drops
* remember you need bombchus in inventory to get drops
* Address reviews
* post-SCL clean up and redo the bombchu ammo logic to apply better to the spirit edge case
* fix oversight which could have allowed for bombchus to logical exist when they shouldn't
* Remove special bombchu playthrough checks which are causing bugs and no longer needed
* fix Slingshot logic reset
* Convert helpers I touched into CanUse and HasItem
* last cleanups
* Additions for the German translation in hint_list_exclude_dungeon.cpp
* Fixes for the German translation in z_select.c
* Fixes for the German translation in z_select.c
* Additions for the German translation in hint_list_exclude_overworld.cpp
* Additions for the German translation in hint_list_exclude_dungeon.cpp
* Additions for the German translation in hint_list_exclude_overworld.cpp
* Fix tricks not getting disabled by button click.
* Fix area trees not collapsing on enabled side of tricks list.
* Fix difficulty tag button order for Linux.
* Fix Collapse All, Open All, and Disable All.
Prevent Disable All from disabling all despite areas being collapsed.
* Fixes for the German translation in randomizer.cpp
* Fixes for the German translation in hint_list.cpp
* Fixes for the German translation in item_list.cpp
* Fixes for the German translation in z_message_OTR.cpp
* Fixes for the German translation in randomizer.cpp
* Fixes for the German translation in randomizer.cpp
* Additions for the German translation in hint_list_item.cpp
* Fixes for the German translation in item_list.cpp
* Additions for the German translation in hint_list_item.cpp
* Additions for the German translation in hint_list_item.cpp
* Fixes for the German translation in item_list.cpp
* Additions for the German translation in hint_list_item.cpp
* Fixes for the German translation in item_list.cpp
* Fixes for the German translation in item_list.cpp
* Fixes for the German translation in item_list.cpp
* Fixes for the German translation in hint_list_item.cpp
* Fixes for the German translation in hint_list_item.cpp
* Fixes for the German translation in hint_list_item.cpp
* Fixes for the German translation in item_list.cpp
* Fixes for the German translation in item_list.cpp
* Fixes for the German translation in hint_list_item.cpp
* Fixes for the German translation in item_list.cpp
* Fixes for the German translation in randomizer.cpp
* Fixes for the German translation in item_list.cpp
* Fixes for the German translation in hint_list_item.cpp
* Fixes for the German translation in item_list.cpp
* Fixes for the German translation in z_message_OTR.cpp
* Fixes for the German translation in z_message_OTR.cpp
* Additions for the German translation in item_list.cpp
* Fixes for the German translation in item_list.cpp
* Fixes for the German translation in hint_list.cpp
* Fixes for the German translation in hint_list.cpp
* Fixes for the German translation in randomizer.cpp
* Fixes for the German translation in hint_list_item.cpp
* Fixes for the German translation in hint_list_item.cpp
* Fixes for the German translation in item_list.cpp
* Fixes for the German translation in item_list.cpp
* Fixes for the German translation in randomizer.cpp
* Fixes for the German translation in randomizer.cpp
* Fixes for the German translation in randomizer.cpp
* Fix an issue with a stray Rando::Context shared_ptr hanging around.
* Fixes accidental leftover from when I found this bug on another branch
* Properly reset randoContext on every save load, not just after save creation
* Port initial framework up to latest dev-rando. Includes about 15 items using the SCL structure for tracking.
* Most other item variables ported to SaveContext in UpdateHelpers.
* Removed individual Context retrievals in favor of single local variable in Logic to reference.
* start of some diagnostics.
caught some reverse logic with ApplyItemEffect.
* more diagnostics
* Resolve major logic issue with SetInventory flow in ApplyItemEffect.
Other small logic issues in ApplyItemEffect.
* Added a bit of logging.
Add Double Defense to item effects.
* revert hint gen bypass
* item_list *actually* divorced from logicVar pointers.
Several missed options for ApplyItemEffect, HasItem, and UpdateHelpers added in.
Changed HasItem to a switch block for more performance.
Seeds generate within 10-20 seconds in release mode. Further optimization is assumed possible.
* Some formatting
* Bit more formatting.
* Couple review changes.
* Incorporate progressive upgrades and skeleton key into SCL.
Bit of cleanup.
* Change `inLogic` to static array.
* Fix bug in `BottleCount()` preventing Jabu Jabu from ever being in logic.
* Fix bomb bag HasItem check.
* Fix Gerudo Fortress and Ganon's Castle SmallKeys checks.
* Change all logic use of `bool remove` to be `bool state` and work on the affirmative assumption.
* Forgot the `Set(x)` uses in `Logic::Reset()`.
* Fix fishing pole effect application.
* fishing pole tweak
* Add `RG_BOMB_BAG`, `RG_NUTS` and `RG_STICKS` to `HasItem()`.
Fix silver and gold gauntlet checks in `HasItem()`.
Change Nuts and Sticks helpers to use non-progressive RGs in `UpdateHelpers()`.
* Change mSaveContext to simple pointer.
Set `mSaveContext` to `&gSaveContext` when loading a save file.
Modify `Item::GetGIEntry()` to use rando context's SaveContext pointer instead of the gSaveContext macros.
Utilize `Item::GetGIEntry()` to get real RG of infinite upgrades and set rando infs accordingly, skipping upgrade level incrementing (which was causing overflow of wallets for some reason).
* Rename all remaining references of LogicVar to variants of LogicVal.
* Change final references to song LogicVars to CanUse calls, and remove them.
* Separate equip and rand inf flag maps.
Add Zelda's Letter and Weird Egg rand infs to map.
Consolidate `HasItem` rand inf lookups using rand inf map and equips using equip flag map.
Maps are static, so can be referenced with `Context::` instead of ctx pointer.
* Main implementation
* Fix sticks & nuts from shops & checks
* Change the models to normal stick & nut
Worth noting that before you have the bags, the refills are blue rupees so there will not be model collision
* Update hook_handlers.cpp
* Don't play the intro cutscene on child spawn even if location is shuffled.
* Fix condition to not always skip cutscene when IS_RANDO is true.
* Fix typo
* add OoT hint, sheik is crashing without hint due to an unrelated bug
* Fix Sheik crashes, add new textbox to autoFormat, trim OoTHint text
* save pls
* fix receive typos
* git pls
* nice conflict fix
* Fix issues with areas not being applied to the region itself, and Link's Pocket Propogating through randomised warps
* Address reviews
* address reviews again
* fix mac issues
* git pls
Stop passing checksByArea to functions in the same namespace.
Only get value of `HideFilteredAreas` once per frame.
Gate area and check evaluations behind checks being visible and search filter size greater than 0.
Proper function capitalization.
* Add rando enhancement "Mysterious Shuffled Items", which obfuscates shuffled freestanding/drawn-in-world items (PoH, tokens, shop items) with a custom question mark model (thanks Hato), and uses the "mysterious item" functionality of `GetMerchantMessage` for everything that supports it, regardless of hint status on generation.
* Reverted back to rando enhancement, but added condition for Mysterious Shuffle not being on for the gem rotation fix to apply.
* First attempt at changing to fake GetItemEntry instead of directly calling the mystery draw function. Needs more work.
* Updated CVar to reflect CVar rework values.
Added `IsCheckShuffled` as preliminary function for checking *only* if a check is shuffled, not necessarily if it is just visible on the tracker. This accounts for the difference between tokensanity and "Always Show GS On Tracker", where you don't want to obfuscate the latter.
* Bit of cleanup.
* Cross-platform building edits. If anyone has a better idea of how to handle this fake GIE, I'm all ears.
* Update to CVar macros.
* Fix freestanding item gives.
Fix mysterious item model colors.
* Fix bombchu bowling mystery.
* Remove bowling bomchus check obfuscation (unused, removed in v3).
* p
* Missed the prefix renames.
* More missed ones.
* Mostly finished cleanup.
Removed a few CVars and some related functionality.
* Bit more (prepping non-existent title card color editing).
* Resolve gCrowdControl.
* Final cleanup.
* Universal constant, not acceleration...
* Preset CVars.
* Incorporate LUS CMake CVar system.
Customize all LUS CMake CVars to align with plans for preset system.
Swap "gOverlayFont" usage back to LUS CVar macro.
* Change CMake sets to use the cache to allow for including LUS's file for the add_compile_defines and remove the duplication on SoH's side.
* Move SoH CMake CVars to `soh-cvars.cmake` for clarity.
* Hint text refactor WIP DOES NOT BUILD
* Update to show people DOES NOT BUILD
* stuck on wierd errors
* forgot to add
* expression error does not name a type
* commit in case anyone looks
* static assertion failed: T must be an integral type or an enum.
* fail without error, complaining about unrefernced things
* fix some issues, still linker bs
* restructure some trials, conditionalAlwaysHints and hint_list stuff
* builds and does not crash, but there's text issues
* fix text issues
* commit to push, halfway through trimming down log
* finish trimming spoiler logging
* post merge clean up
* plando mode seems to work, looking into song text wierdness
* push for debugging crash on HBA sign
* fix num and anju issues
* fix the damn sign
* Fix Windows build
Renames GetMessage to GetHintMessage (a different name could be chosen, but GetMessage conflicts with a macro in winuser.h)
Changes uint to size_t, uint does not seem to exist on Windows.
* fix biggoron
* remove some manual formatting that autoformat doesn't like
* fix some altar text
* fix more altar text
* last cleanup
---------
Co-authored-by: Christopher Leggett <chris@leggett.dev>