Malkierian aeb85c81aa
Item SaveContext Logic (#4237)
* 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.
2024-08-01 21:24:24 -07:00
..
2023-01-17 00:33:56 -05:00
2023-11-19 14:29:56 -05:00
2022-11-30 00:28:57 +01:00
2022-05-11 13:18:24 -04:00
2023-06-01 21:39:50 -04:00
2023-06-01 21:39:50 -04:00
2023-10-20 18:40:10 -05:00
2022-09-21 00:50:22 -04:00
2023-11-19 02:38:07 -05:00
2022-08-31 22:59:38 -04:00
2024-08-01 21:24:24 -07:00
2024-02-02 15:39:01 -06:00
2023-01-17 00:33:56 -05:00
2023-01-17 00:33:56 -05:00
2023-01-17 00:33:56 -05:00
2023-01-17 00:33:56 -05:00
2023-01-17 00:33:56 -05:00
2023-11-19 02:38:07 -05:00
2022-06-22 23:13:32 -04:00
2024-08-01 21:24:24 -07:00
2023-01-17 00:33:56 -05:00
2023-01-17 00:33:56 -05:00
2024-02-24 09:17:48 -06:00
2023-11-19 02:38:07 -05:00