It's 2026, and the only time since Super Mario Kart where 150cc is made unlockable is a god-damned arcade game
Plus, it literally makes more sense for Expert (200cc) to be the unlockable speed now
DUDE TOUHOU LMAO
Jokes aside:
* Lunatic = Master difficulty with modifications to make the races
significantly more difficult:
* Introduces a "lunaticmode" boolean to grandprixinfo;
the demoversion has been upped to 0x0010 due to this
* The bot modifier is, at MINIMUM, 2.0, making them aggressive as hell;
Rival bots use a 2.5 modifier
* Bump Spark is always off in this mode
* RUNNERAUGMENT results have their distances significantly shortened;
if a rival bot takes the lead, this distance is shortened even FURTHER
so they don't frontrun against the human player endlessly
* Alt. Invinc shows up earlier as a sort of "mercy" for human players;
it would otherwise not show up until the race was effectively over
* Maniac = Nightmare difficulty (Master at Expert speed)
with Lunatic's changes
- Make the menu-only dummykartspeed and dummygpdifficulty cvars also affected by the unlock system.
- Master mode is currently behind SECRET_HARDSPEED, this can be changed later when we're seriously thinking about unlock progression.
- Complete forwardport of changes to cv_kartspeed from 1.4+, since I missed a spot previously.
For Kart players, its common practice to save replays and or leave the server play with the a server's settings offline for stuff like timeattack or practice which ends up making this feature more annoying then anything. Also removed CV_NETVAR from local server cvars so that people doing the first case don't get listen server settings overwritten just because they wanted to practice offline
You can now combine submenu/cvar/call to allow for more complex behavior,
without the need for keyhandlers. All those dummy menuitems relying on
keyhandlers now use cvars, like everything else does.
Yes, several things are still hardcoded, but player setup no longer
needs its own miniature menu system :^)
More or less a port with gamecontrols left untouched.
Some notable differences:
* ev_joystick now has a separate data1 for each axis, rather than having you
check which of data2/3 is INT32_MAX and which one isn't
(pissed me off when updating menu code...)
* Gutted the 1.6 upgrade code, since we're not upgrading from anything :P
* G_GetControlForKey, a helper for menu code
* Turn smoothing code left unused as a reminder to fix it
* Various small fixes so this commit is playable and doesn't segfault
Menu changes:
* Max 4 binds, joystick axes are now bindable like any other button
* The gamepad options submenu has been replaced by its two remaining options
after the removal of axis cvars (gamepad select and deadzone)
See cd8862f0's message for more details
Also:
- improved error prints for SOC condition definitions
- improved bounds checking to use `nummapheaders` for iterating over mapheaderinfo
There are still situations that use NUMMAPS like mapvisited, randmapbuffer, etc, which need to be addressed before merger.