- Adds headers to the list
- Adds indentation
- Doesn't show extra medals if there are none available
- Cleans up some of the undesired duplication in the drawer
- 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!
- 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.
M_UpdateMenuCMD only needs to be called once per tick per player.
It was being called for every event, which really mangled the repeat
delays as more attached controllers sent axis events.
- 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
- 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
- Splits M_SetupDifficultyOptions out of M_SetupDifficultySelect.
- Permits Encore to be handled on Difficulty menu if unlocked after a Match Race.
- Fixes an issue where the in-game Pause menu could be accessed in the menu
- The prevMenu that was set was overriden with in-game Pause.
- The assumption made - that the levelsearch/levellist struct would not be touched - is pretty transparently violated.
- I made it go back to the Difficulty select instead of fixing the issue because:
- Match Race is more dependent on the rules you configure for that particular round
- This mode of play will be modified in future to not be literally offline MP with things like voting, but instead return to the menu
- It was easier relative to the amount of work to properly restore (this is the biggest reason)
If Playing(), does nothing.
- If NULL, cycle between Cascade Cave as is traditional.
- If ".", stop music. (will one day be used for sound test)
- Any other case, call S_ChangeMusicInternal on the string directly
Notable menu sets:
- All Extra menus, excepting the Replay Hut, use "EXTRAS"
- Replay Hut uses "REPLAY"
- All online menus use "NETMD2".
- I know we wanted to do something with switching between "NETMDE" and "NETMD2". I would prefer a more consistent API for transferring song position across between tracks be implemented before implementing this.
- Known bug: Music restarts when exiting from failed connection screen
- Known bug: Music goes back to Cascade Cave when selecting "GO" for server creation
- Wontfix as we want that button to go directly to the voting screen, which we can do in a voting revamp branch
- Data Erase, Profile Erase: "SHWDN2"
- Not in the spec but I think it's both funny and a valuable tell for the most "dangerous" menu to play with.
- Also shifts the background to SKINCOLOR_BLACK
- restoreMenu, M_SpecificMenuRestore
- From any Cup Select, Level Select, or Time Attack context (including non-net replay playback), return to the relevant "core menu"
- From any server OR server connection failure, return to the Online EGGA CHANNEL top-level menu
- From netreplay, head to replay hut without incorrect gamestate/fade cope
- Interruption for Challenges unlock sequence now happens on all menu returns, not just post-titlescreen
- M_StartControlPanel
- Integrate with above
- Handle menu re-initialisation properly under more contexts
- D_ClearState
- Split out from D_StartTitle
- Can be used alongside M_StartControlPanel to restore menu state from any play session in a way just as reliable as D_StartTitle was
Initialises Time Attack menu
- Check for replay file's existence before showing related options
- Parity with pre-newmenus behaviour
- Replay/guest-save functionality not yet (re)implemented
- Handles mutli-gametype timeattack level select listings more thoroughly
Multiplayer map select now uses the value of `menugametype` accessible just above it on the menu, instead of having to select from a hardcoded set of options
- Add "Gametype" toggle option to pause menu for admins
- A/Confirm button on any gametype other than current to do random map in new gametype
- C/Extra button to return to current gametype
- A/Confirm button on current gametype does a funny noise and nothing else right now, idk what to do
- `randomlevel` supports the same `-gametype` parameter as `map`
- Both `randomlevel` and `map`'s `-gametype` parameter prohibits `GTR_FORBIDMP` mask gametype changes in netgames
- `randomlevel` properly sets encore based on `cv_kartencore`'s value (and permitting `GTR_ENCORE`)
- Split out `menugametype` change functions
- `yellowmap` now remaps all intermediary shades of grey to match funny pause menu remaps
- Introduce `menugametype`
- Controlled by IT_KEYHANDLER/M_HandleMenuGametype
- Excludes gametypes that do not support multiplayer by default
- GTR_CAPSULES and GTR_BOSS for now, but also user-specifiable GTR_NOMP
- Remove gametype_cons_t and G_UpdateGametypeSelections, an obstacle in the way of infinitely allocatable custom gametypes
* Both GT_SPECIAL and GT_VERSUS.
* Access controlled by SECRET_SPECIALATTACK. (You're blue now.)
Related changes to precipitate:
* Cups that only have one map in them get selected immediately, rather than off-the-cuff.
* Done by seperating out a new function M_LevelSelected from M_LevelSelectHandler
* Maps that only have one lap in them don't have a visible lap timestamp sticker.
* Fix a cup with *no* valid maps for the current ruleset being hypothetically selectable
* Prevents the dependency on a `levellist` global that could be corrupted
* Fixes the issue where cups that were not unlocked would not show up on the cup select (because `M_MapLocked` would make `M_CanShowLevelInList` fail).
* Shows both Race and Battle maps in the cup unlock preview.
- The cups they're associated with for GP Bonus Round
- Fixes the issue where when opening Ring Cup, Green Hills would be first in the listing because its header is defined before the rest of the cup's maps
- One core set of functions that works between multiple modes
Will merge conflict with Unlockables Undefeatable
Relatively quick port from v1., but with under-the-hood changes to match the Emblem/Medal and Extra Medal reworks. We can make it prettier (and contain more data) later.
Has ifdef'd out code for conditions to change between white and yellow when achieved to match V1 behaviour... wasn't able to figure out why it wasn't working, so dummied out for now.
* Challengegrid now loops and scrolls horizontally.
- Scroll position currently tied directly to selected row/column, but can (and will) be seperated relatively easily later.
- In `DEVELOP` builds always scrolls - but in release builds, if someone makes a custom gamedata with less than 20 challengegrid columns (BASEVIDWIDTH/16), it'll remain static.
* Challenge ticker now automatically unlocks all pending at a rate of ~one per second.
- Based on VC discussion and Kirby Air Ride.
- Since no user input necessary, screen is now part-faded when unlocks are pending.
* Drawing a specific grid tile is now its own `k_menudraw.c` function.
* There is now a light grey grid around unselected tiles.
* Unlock explosions now use the tile's colour or, if not provided, the current profile's color.
Completely clientside, unlike SECRET_SKIN. Followers have no gameplay function, and it saves us having to write even more to our demos/netsaves. Replaces SECRET_WARP.
Also:
- Now don't apply skins or followers from profiles if the skin is locked - instead, get the closest skin in stats. (Same function as from demos!)
- If you're looking at a profile and the skin or follower are locked, make them solid colour (TC_BLINK).
- Don't show the ring cursor before you've selected a profile.
Done so it doesn't begin during a transition, and you get to properly appreciate the first one
Comes with the following changes and refactors:
* Uses the default UN_RR00c icons for entries without icons (currently all except SECRET_SKIN)
* `challengesmenu->extradata` updated in less places
* `M_GetNextAchievedUnlock` no longer handles setting `unlocked` so we can do that during the above timer
* Test button explosion repetition no longer duplicates M_ChallengesTick code
* Instead of giving `challengesmenu->currentunlock == MAXUNLOCKABLES` special behaviour, add a `challengesmenu->requestnew`
* The crash prevention for nonexistent extradata in the input handler is now actually functional.
* Generalised the existing system to work here, no need to copypaste
* Spawned on unlock AND on debug button, so you can watch how they propogate
* Currently unsure on how large tile does it - right now it just spawns two sets of explosions on topleft and bottomright corners.
Also fixed an issue where a large tile could fail to show its highlight border if it looped between the two ends of the challenge grid
* Icon selection
* You can use up, down, left, right, etc to select icons on the Challenges menu
* The text at the top changes based on the highlighted icon
* This text is now ??? if not yet unlocked
* Uses the border for character rank icons
* Challenges are now accessible on the Extras menu alongside Addons and Replay Hut.
* Previously there was a "Extras Checklist" dummy which did nothing when selected
* Now I won't have to clear my gamedata every time I want to check this menu!
* M_ChallengeGridExtraData's array is modified to now contain specific info on whether a given tile is connected to above or left (or both).