3 Rando v3 and v4 checklist
Malkierian edited this page 2024-08-18 11:30:00 -07:00

This is what's expected to be part of v3. Things blocking upstream merging are listed at the bottom. Anything expected to be post-v3 is here

1. Source Interaction

  • Different approach for giving items, one that can be used for all (most?) checks - rando changes branch is the proof of concept for this
  • Piggy-backing on the above ^ attempt to be less invasive on vanilla code paths in every way possible (mostly complete)
  • ^ Also a piggy back. Cleaner ways to hook/replace original code functions for rando code paths (less in line changes, and more of a patch/redirect to handle the rando ideas) (ala 3ds rando patch system maybe?) (mostly complete)

2. Data Optimization/Unification

  • Unify all randomizer data structures under one umbrella (ala CheckTrackerData to CheckData) (mostly complete, tracker data is all that's left)
  • De-duplication - Creating a new option, check, item, etc should be as seamless as possible, I should only need to define things in one centralized place, one time
  • Investigate removal of extendedVanillaItemTable (move to randomizerItemTable)
  • Internals of randomizer playthrough utilize gSaveContext to simulate game playthrough (this will have benefits post-generation, and simplify some of our code, i think)
  • Convert rando code to utilize SoH data structures, or other way around (target: live playthrough for check availability)
    • things like RCObjects as class with function members
  • Extensible language support (more than just "OoT" languages, but also all regional languages like Japanese)
  • Also, we should be able to make it so that the hints and such can be created on file create, or even on the fly, instead of relying on hint text in the spoiler, that way people who share spoilers across primary languages can still get the rando texts in their language.
  • Spoiler file generation becomes optional
  • Spoiler file settings section 1:1 with randomizer setting cvars
  • Change spoiler logs to have both human friendly data, and computer friendly data, so we don't have to worry about doing parsing. Or at least have the "strings" be defined once so that typos aren't possible between parsing and spoiler log generation. (partially complete)

Logic

  • Rewrite logic to work based on a "room by room" basis with clear indications as to what is needed to beat the room. E.g. rooms which need certain enemies defeated to progress will have Can_Defeat(ENEMY_STALFOS, numEnemies).

General Rework:

  • Swap item checks to CanUse to allow for glitch manipulation of conditions (timeless equipment or equip swap situations)
  • Ice traps -> traps

General Gameplay

  • Don't start twinrova flight until we get into the room (GH issue)
  • Allow dpad boots in all situations (GH issue)

Hints

  • Hint distribution/options parity with zootr (I'm not super familiar with this, but people always complain "our hints arent like zootrs")
  • Move gossip stone hints out of RandomizerCheck structures

Developer Experience

  • json junk hints (possibly loaded from soh.otr during seed gen?)
  • Text box custom syntax (GH discussion)
  • Logic testing framework? (n64 does snapshot testing for example)
  • Improvements to custom message system:
    • Most messages should be created on the fly
    • Auto line break based on length

UI/Menu Interaction

  • Move/refactor settings collision logic/setting group randomization to one place (think of indicating in the UI that a setting can't be toggled, but also the logic doing that for us. Currently 3ds does some safeguards for example)
  • Randomizer settings UI is data driven (title, description, and combobox options come from tables, not hardcoded)
  • Graceful handling of seed generation errors (ideally with useful error messages to help people adjust settings so it won't fail next time)
  • Possible stretch goal: have pre-generation validation of settings?
  • Full starting inventory options (GH issue)

Upstream blockers

  • Merchants on shop system (Pepper0ni)
  • make AreaTable dynamic (Malk)
  • fix known VB bugs
  • fix check tracker for new data structures (Malk)
  • Fix interior entrance shuffle; failing on Impa's House placement with cows on, requiring same region for second entrance
  • GetAccessibleLocations refactor (Pepper0ni)
  • Known breaking bugs
  • - deku tree entrance as adult (Archez)
  • - Mido broken; breaks closed forest? (Archez)
  • - fishing double gives (Pepper0ni)