- 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
- Question mark
- If next to an unlocked tile (ie, hint mode)
- Have ring around when highlighted, per hint ring
- ELSE, make blink-colormapped + subtractive
- 2p: In 1p position (slides from right)
- 3p/4p: In top-middle of screen (slides from top)
- Uses time from the display with the highest time, which covers exiting, no contest, etc
- Exposes V_ flags in the function signature
- K_drawKartTimestamp: Significantly less messy, no longer dependent on static variables, and no longer iterates over M_GetLevelEmblems every rendered frame(!!)
- TODO: Still handles playing sound in the drawer
- K_PrepareTimeAttack: Initial generation of a struct of emblems/text is handled on the menu
- G_UpdateRecords: Updated in-game if you unlock the next medal there
This commit was amended to centralise the new material in g_game.c and reduce the number of header additions required.
- 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
- Fix starting the playback mini-menu
- Fix playback mini-menu input not being natively horizontal
- Fix playback mini-menu having been written before r_splitscreen refactor
- Move heinous modifying-menu-data-in-the-drawer behaviour to an actual dedicated ticker
* Use the new background
* Use clipped rectangles instead of black pixel overdraw, so pre-baked darkened areas in the new background can be visible instead
- Solved by leveraging M_GetFirstLevelInList alongside existing M_CountLevelsInList calls
- Also optimises the above calls in the M_CupLocked case, since that's no longer being directly used otherwise
Will make long-term management of this menu easier, and pushes aside some inconsistencies between graphics
May be reverted in part or full if it doesn't work for particular assets
- 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
- Should support custom gametypes, but haven't been thoroughly testing those
- Custom gametypes must now be unique by name
- Custom gametypes now have a maximum name length of 31
* 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
- New array of pointers to structures in memory (currently mixing static for base-game and Callocated for custom)
- Centralises a metric-ton of previously seperately handled properties into one struct
- Gametype_Names[]
- Gametype_ConstantNames[]
- gametypetol[]
- timelimits[]
- pointlimits[]
- gametypedefaultrules[]
- Don't attempt to guess custom gametype in Replay Hut (requires more work to make custom gametypes behave across the entire experience)
- I_Error if invalid gametype set
- gametyperules is deprecated since it will never be modified seperately from gametype (temporarily a #define, don't wanna bloat this commit too much)
New:
- GTR_POWERSTONES
- Handles spawning in Battle Emeralds (currently only works stacked with GTR_PAPERITEMS)
- GTR_ENCORE
- Codifies that Race can use Encore and Battle can't.
- GTR_CLOSERPLAYERS
- A gametype where players are encouraged/expected to be closer together. (All of the following was GT_BATTLE specific)
- Drafting/tether has increased strength/effective distance
- Spindashing is stronger
- Invincibility chaining has less effect
- Grow has a lower total duration
- Flame shield is more uncontrollable
Extra functionality
- GTR_CAPSULES
- Prevents usage of lives in Grand Prix (so Race, and the upcoming Special and Boss gametypes, can have 'em)
- GTR_CIRCUIT
- When not present, Flame Shield has perma-full meter
- When not present, overrides gamespeed with KARTSPEED_EASY
- Presence of Best Lap sticker in Time Attack menu
- Seperation between Time Attack and Break The Capsules modeattacking roulettes
- GTR_POINTLIMIT
- Handles the switch between a gametype recording/displaying Times and Scores in a few places
- Handles displaying "WANTED" players on the minimap
Missing simple substitutions
- A whole bunch of cases where player->bumpers was checked with gametype == GT_BATTLE rather than GTR_BUMPER
- GTR_OVERTIME handles the overtime special icon on the minimap
- GTR_BATTLESTARTS is honoured in K_DoIngamerespawn
- The Replay hut is closer to supporting custom gametypes
Removals
- GTR_LIVES
- GTR_SPECIALBOTS
- Given that grand prix persists between modes, these are special game-controlled features and not gametype-specific.
- GTR_WANTED
- WANTED as it existed is functionally dead
* 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.