Commit graph

272 commits

Author SHA1 Message Date
toaster
3ba8ccfbfb M_SpecificMenuRestore: Only M_SetupRaceMenu in GT_RACE 2023-01-31 12:54:34 +00:00
toaster
0947ed5eec M_SpecificMenuRestore: Move all conditional sets of restoreMenu inside this function
In the case of returning from the Challenges grid, restoreMenu would not actually match the condition - preventing the relevant code from running.
2023-01-31 12:54:11 +00:00
toaster
8d6be5e662 M_StartControlPanel: Fix incorrect interaction with NULL restoreMenu and Challenges menu 2023-01-30 00:35:52 +00:00
toaster
20e9b2f5e8 Restore menu state after playsim
- 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
2023-01-29 23:53:21 +00:00
toaster
c55849006d Repair playback mini-menu
- 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
2023-01-29 00:29:46 +00:00
toaster
493b54d0f2 M_PrepareTimeAttack
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
2023-01-28 19:09:22 +00:00
James R
83a6acd5c8 Do not force Guest profile when selecting profile for first time
This lets ttlprofilen persist if backing out of profile
select.
2023-01-19 21:26:21 -08:00
James R
b26cd786ec Move all specialized code out of k_menufunc.c
Adds new files:

- menus/extras-statistics.c
- menus/play-online-room-select.c
- menus/transient/cup-select.c
- menus/transient/explosions.c
- menus/transient/gametype.c
- menus/transient/message-box.c
- menus/transient/virtual-keyboard.c
2023-01-12 20:31:31 -08:00
James R
e1b7fd79ee Merge branch 'fix-format-truncation' 2023-01-05 18:02:50 -08:00
Sal
b46caf4a7a Merge branch 'addons-menu-addons-folder' into 'master'
Go to addons folder by default in addons menu

Closes #373

See merge request KartKrew/Kart!853
2023-01-05 20:51:28 +00:00
James R
e7af4a5084 Resize menudemo_t filepath to fix -Wformat-truncation 2023-01-05 04:24:37 -08:00
toaster
6274b1f31f Fast forward through the unlock sequence by holding the Extra button.
Based on VC complaints.
2023-01-04 17:45:24 +00:00
James R
8b96612e43 Default addons menu to addons folder 2023-01-04 00:08:30 -08:00
toaster
26f3490ba8 Increased memory safety with cupgrid memory allocation
Also clearer variable name for length of cupgrid page in memory
2023-01-02 13:32:12 +00:00
toaster
a2c5ff6ac8 Remove the duplication of levellist.netgame into cupgrid.netgame 2022-12-31 20:56:00 +00:00
toaster
e0c4c235df Move "return" in "Are you sure you want to return to the menu?" to the next line, to balance the lines out a little better 2022-12-31 20:34:11 +00:00
toaster
76ea72ceac Prevent entering the cup or level select if there's no valid maps to pick from. 2022-12-31 20:33:31 +00:00
toaster
36b1f5f488 Have a Cup visibly locked if no levels are accessible by the current rules of menusearch_t
- 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
2022-12-31 17:50:49 +00:00
toaster
2db7562c24 LF2_FINISHNEEDED
- Replacement for LF2_VISITNEEDED, which was itself a Kart-specific inversion of LF2_NOVISITNEEDED
- Prevents selection in time attack before you've beaten the level in another context (GP, or MP if applicable)
- Should be used for Sealed Stars (and Adventure Example) exclusively IMO, but usable for others too
Related adjustments:
- Allow a map to have a `TypeOfLevel` of 0 without error
- Change the Condition String for UC_MAPVISITED to "Finish a round on X" (previously "Beat X")
2022-12-31 16:22:46 +00:00
toaster
b09045f657 Dehardcode menu gametype selection, part 3
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
2022-12-30 23:58:22 +00:00
toaster
be49e99a9e Guarantee menugametype's value is good before it's relevant 2022-12-30 23:42:50 +00:00
toaster
ebb2a79666 Dehardcode menu gametype selection, part 2
- 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
2022-12-30 20:35:55 +00:00
toaster
3ee8713e46 Dehardcode menu gametype selection, part 1
- 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
2022-12-30 15:23:26 +00:00
toaster
834150585b Rework demo time/laptime handling
* `ATTACKING_` constants have been changed to be flags
    - `ATTACKING_TIME` contains time data for all gametypes
    - `ATTACKING_LAPS` contains laps data for `GTR_CIRCUIT` on maps with more than 1 lap
* `demoflags` now contains raw `ATTACKING_` flags
* Best time/best lap demo files will now be saved properly again (broken since `new-menus`)
* Ghosts will now be loaded properly again (broken since `unlockables-undefeatable`)
2022-12-29 21:30:04 +00:00
toaster
edea4e2110 Message says return to menu instead of title screen 2022-12-27 22:56:07 +00:00
toaster
03c6eb3e30 Another bugbear: start on the Start for timeattack menu flow 2022-12-27 22:41:30 +00:00
toaster
978040ca3f Two menu bugbears
- Clear console prints immediately after menu clear (fixes the prints on the black screen before loading level from menu)
- Last kart standing, not last hedgehog standing 🥹
2022-12-27 22:36:20 +00:00
toaster
04f2ac4121 "Special" time attack mode for 1P.
* 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
2022-12-27 22:34:02 +00:00
toaster
185b36bd27 gametype_t
- 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)
2022-12-26 01:07:57 +00:00
toaster
d0cd059c5e Rework the Level List functions to operate off a provided levelsearch_t pointer.
* 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.
2022-12-19 21:18:36 +00:00
toaster
8e88a840bb Merge branch 'master' of https://git.do.srb2.org/KartKrew/Kart into unlockables-undefeatable
# Conflicts:
#	src/k_menudraw.c
#	src/k_menufunc.c
2022-12-19 20:13:44 +00:00
toaster
e0412ab851 Fix pageno if greater than permitted 2022-12-18 14:42:18 +00:00
toaster
f9bdfd8a50 Fix typings for map index 2022-12-18 14:25:38 +00:00
toaster
ecfcc1356b Don't permit duplicate maps across multiple cups in time attack. A map is only valid for its later groupings in Grand Prix and multiplayer. 2022-12-18 14:08:26 +00:00
toaster
15a733a344 Add I_Error for inability to allocate cuplist.builtgrid 2022-12-18 14:02:00 +00:00
toaster
facea912f4 Fix memory corruption in M_LevelListFromGametype 2022-12-18 13:58:39 +00:00
toaster
b9f18ffc24 More things use the menu map selection rules
* G_GetFirstMapOfGametype now uses the menu functions instead of repeating the effort
* GTR_NOCUPSELECT - allows gametypes to opt out of cup selection
2022-12-18 13:57:39 +00:00
toaster
ed85fb2e79 Clean up cup-related conditions for M_CanShowLevelInList 2022-12-18 13:20:50 +00:00
toaster
7ff46e31b4 Fix usage of levellist.typeoflevel in M_GetNextLevelInList 2022-12-18 12:26:28 +00:00
toaster
286331b5c9 When doubling the cupgrid.builtgrid, memset the new region to prevent bad info 2022-12-18 12:25:37 +00:00
VelocitOni
8cd36dbf03 Merge branch 'master' into unlockables-undefeatable 2022-12-18 01:59:04 -05:00
toaster
6659e78c04 Battle cups
- 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
2022-12-18 01:08:18 +00:00
toaster
88d41f6721 SECRET_ALTTITLE
My final indulgence for this branch. One cvar that swaps a patch
2022-12-14 20:18:53 +00:00
toaster
42f4f28e06 Statistics menu
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.
2022-12-14 17:53:35 +00:00
toaster
47901939d5 Actually lock Time Attack and Capsule Attack behind SECRET_TIMEATTACK and SECRET_BREAKTHECAPSULES 2022-12-13 17:37:26 +00:00
toaster
20c754ca66 Preview for SECRET_CUP and SECRET_MAP
Includes a dummied out alternate SECRET_CUP with more consistency to the idea of graphics exclusively in lower left, but matching the cup select screen won out.
2022-12-13 14:49:33 +00:00
toaster
2871ccb4f1 Rewrite level restrictions
Now uses `SECRET_CUP` and `SECRET_MAP` with a stringVar saying the map lump/cup name, instead of `SECRET_NONE` and a levelheader `unlockrequired` property.
2022-12-13 13:45:17 +00:00
toaster
cc9a65c8f8 Add unlock condition text to Challenges menu
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.
2022-12-12 16:55:56 +00:00
Sally Coolatta
a481e4b34b Deterministic roulette
The roulette contains NO (non-seeded) RNG anymore. You manually stop it at any time.

Still needs the visual of the items scrolling, to make it not blind.
2022-12-11 23:58:11 -05:00
toaster
f179a3523f Clean up M_UpdateUnlockablesAndExtraEmblems and related
* `gamedata->unlockpending[MAXUNLOCKABLES]` stores info to prevent the same unlock causing multiple sounds, and simplify `M_GetNextAchievedUnlock`
* Remove the DEVELOP cechotext
* Each unlock on the challenges menu updates all the unlockables, rather than just `M_CheckUnlockConditions`
* The unlock update function handles the incoming unlock sound itself if `loud` is true. This will allow us to quickly replace every sound at once when we've made a decision what to use

Also:
* Fixes the size of the savebuffer allocation in `G_SaveGame` to account for the challengegrid array.
2022-12-11 16:59:11 +00:00