- Even if there's only one level in the group, only skip over the mini linear list in a Time Attack mode
- Improves some of the jumpscare of looking into Lost and Found and being blasted to TEST RUN
- Fix lists of one map being wedged against the bottom of the screen
- Precache valid map count
- When selecting levels:
- If the gametype uses cups
- and a map has no cup
- and you're not in Grand Prix mode
- show those maps in a quasi-cup called "Lost and Found".
- Implementation details:
- a few == checks for the pointer to `cupheader_t dummy_lostandfound`
- Otherwise most of the apparatus was built as part of prior art!
- Fix the case where invalid levelsearch_t were providing values of false instead of NEXTMAP_INVALID
- Fix the case where M_GetFirstLevelInList was not returning NEXTMAP_INVALID for rearching nummapheaders
We had this collective consciousness bigbrain moment in VC together, and it can literally only happen in this branch because unlocks.pk3 is the only main-game asset that needs to change for it
Solves the big problem we had with mixing up Item Capsules and ~~Battle Capsules~~ PRISON EGGS
- For P_Ticker()'s calls to M_UpdateUnlockablesAndExtraEmblems
- Do not check non-UCRP_REQUIRESPLAYING conditions
- Controlled by a new `boolean doall` parameter to M_UpdateUnlockablesAndExtraEmblems
- Most other contexts have this as true
- Forced true if update is meant to be silent
- Only check UCRP_REQUIRESPLAYING conditions if a relevant property has been touched
- Controlled by a new `boolean checkthisframe` property on roundcondition_t
- Set in all contexts where roundcondition_t is modified
- Would also be set on lap change, but that case is already covered by the following
- Check all conditions, both UCRP_REQUIRESPLAYING and not, on:
- local player K_HandleLapIncrement
- local player P_DoPlayerExit
- local player P_DoTimeOver
- Controlled by a new `boolean deferredconditioncheck` property on gamedata_t
- Start with 3, per Sakurai's prior art.
- Earn them per certain number of rounds
- DEVELOP builds: once every 4 rounds
- Release builds: once every 50 rounds
- Has an internal cap based on the maximum number of unlockables supported.
- Possible future work could adjust this to restrict based on the maximum number of unlockables unlocks.pk3 actually has set.
- Use on the Challenges screen to bust open small tiles with hints (or the very first tile, if you haven't unlocked anything yet).
- Will do a funny shake if you try anything else.
- Interrupts menu flow just like getting an unlock.
- The matches you've played will tick upwards, giving you keys as they loop over.
- All `cv_dummyspbattack`-related material is now gated with the assistance of SECRET_SPBATTACK.
- SPB_ATTACK
- Add UC_MAPSPBATTACK condition.
- Both this and emblems with MV_SPBATTACK have the string "SPB ATTACK: Conquer [LEVEL NAME]", compared to the regular round completion conditions having "Finish a round on [LEVEL NAME]".
- If SPBATTACK is not unlocked, shows ???: Conquer [LEVEL NAME] instead
- Race, Capsule, Battle, Special, Custom
- All categories can now be used for Rounds Played condition
- UCRP_SEALEDSTAR now hides if you haven't beaten a single Sealed Star yet
In addition, introduce M_ClearStats
- As more statistics get added, clearing them manually in G_LoadGameData and M_EraseDataResponse is just going to get annoying
- Change around the options on the Erase Data screen to
- Make it clear that erasing all game data won't clear your Profiles
- Add an option to clear stats by themselves, rather than only permitting via complete gamedata wipe
- Move to the "Challenges" terminology over SRB2's "Secrets" terminology
- Move some entries that were previously handled in M_ClearSecrets into M_ClearStats
- Added to Statistics screen
- Caps at "999,999,999+".
- Controls UC_TOTALRINGS condition
- Improve description for UC_MATCHESPLAYED condition
- Says "Rounds" now
- Improve Statistics text for playtime
- Dynamically changes visible units of time (seconds, minutes, hours, days.......)
- Combine multiple adjacent saves
- Generally could happen during game ticking, combined via gamedata->deferredstate
- DEFINITELY happened in splitscreen PWR handling, adjust those loops directly
- Write "dirty" state via gamedata->crashflags on everything except safe, intentful unloads
- Add UC_CRASH, which unlocks dependent on the above "dirty" state being present at gamedata load
- We can use this for something more useful and less funny later.
- Play "O_LOSERC" on the menu, starting with the Challenges screen, if a UC_CRASH condition has been met.
- When SECRET_ADDONS is locked
- No Addons option on Extras submenu
- No mid-game Addons in K_CanChangeRules
- Forced onto CORE on Server Browser room selection page
- Semi-related: If modifiedgame is true, force onto MODDED, even if you haven't unlocked it
- TODO: Update UI to show you can't switch in a more elegant way
- Hide Addons Options on Data Options submenu
- When SECRET_EGGTV is locked
- No Egg TV option on Extras submenu
- Semi-related: Rename to Egg TV per team discussion
- Online menu is inaccessible until unlocked.
- Unlike most unlocks, the fact that it's not enabled is very clearly signposted.
- This is because the previous entry in the series barely had any offline content at all, so the fact you'll have to work for it will catch a lot of people by surprise.
- Has a message that straight up tells you you need experience in Grand Prix mode.
- Has no affect in TESTERS builds, for which this is the only method of play available.
- Hides "A PLAYER/A $profilename" text
- Shows extra info relevant text
- Early stages: "[EXTRAINFOMODE]"
- Grid select: Speed and weight
- Clone select/READY!!: Character name
- Color: Color name
- Follower category: Category name
- Follower: Follower name
- Follower color: Follower color name
- The hidden setup_page toggle feature now only uses L button
- Rename every instance of "gif" to "movie".
- Rename Screenshot options to Media options.
- Surface `moviemode_mode` as `Recording Format`.
- Surface `movie_showfps` option as "Real-Time Data".
- Other avrecorder options... surface on a case by case basis, there's a lot of them and not convinced they're all necessary to be user-facing?
- Handle beginning a flip in M_ChallengesTick
- Removes set in M_ChallengesInput
- Reduces complexity of set in M_ChallengesAutoFocus
- Fixes an issue where starting the menu would have the tiles partly compacted during the intro wipe
- When a tile is selected, flips from category side to specific icon side
- Flips back when unselected
- Hold R (drift) to flip all tiles to visible side
- M_ProfileControlSaveResponse: Set without stealth (ie, call command which sends XD_WEAPONPREF netxcmd)
- weaponPrefChange (and its splitscreen ilk): Only build/send XD_WEAPONPREF command when Playing()