Commit graph

294 commits

Author SHA1 Message Date
Oni
9f4c080964 Merge branch 'dynamic-controllers' into 'master'
Handle gamepads from interface dynamically

Closes #397

See merge request KartKrew/Kart!1018
2023-03-13 07:56:34 +00:00
Eidolon
86a9579e16 Handle gamepads from interface dynamically
Fixes numerous issues with hotswapping, gamepad assignment, and menu
responsiveness.
2023-03-07 00:07:47 -06:00
Oni
cdc56ab2cc Merge branch 'podium' into 'master'
Podium

See merge request KartKrew/Kart!1014
2023-03-07 05:58:20 +00:00
James R
28f2f4a51a k_menufunc.c: fix -Wunused-variable 2023-03-05 21:02:32 -08:00
Eidolon
4bb0c39133 Fix controller delay in menus
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.
2023-03-05 16:07:17 -06:00
Sally Coolatta
4011c8b2fa M_GamestateCanOpenMenu 2023-03-03 16:09:52 -05:00
AJ Martinez
79d8e4e109 WIP: SPB Attack - temp menu draws OOB, no unlocks 2023-03-03 12:14:58 -08:00
Eidolon
83b6c30952 hwr2: add wipe mode to F_RunWipe, fix all wipes 2023-02-27 21:45:59 -06:00
toaster
e0ac6b6044 Music credits show up in more contexts
- Drawn over the top of basically everything when enabled.
- Update song credit on
    - Menu music update (can sometimes clear it)
    - Intermission begin
    - Vote begin
    - Return to title (by clearing it)
2023-02-25 22:54:36 +00:00
toaster
c71d4cbeaa M_SpecificMenuRestore: Catch prevMenu corruption for mid-game Character Select 2023-02-17 17:11:14 +00:00
toaster
a154b1a565 restoreMenu: Go to Difficulty select after Match Race, instead of the level selection menu
- 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)
2023-02-09 22:38:04 +00:00
toaster
63fbdcfbc0 M_StartControlPanel: Do not activate if map change is pending
Prevents restoreMenu being burned when pressing start during long GP/Match Race fade.
2023-02-05 14:09:30 +00:00
toaster
6dd32deecb M_HandleStaffReplay, M_DrawTimeAttack: Re-support selecting staff replays from the menu 2023-02-04 11:06:57 +00:00
toaster
a2fadd2ff4 M_ChangeCvar: Split out core of function into M_ChangeCvarDirect, to prevent future code duplication 2023-02-04 11:06:28 +00:00
toaster
3ca1c554c4 M_HandleMenuInput: Pass a choice of 2 to IT_CVAR/IT_ARROWS routines
- Permits IT_ARROWS routines to distinguish between a rightward input and an A-button input.
- Only M_ChangeCvar needed to change to accomodate this - every other example of IT_ARROWS already acommodates this
2023-02-04 10:44:47 +00:00
toaster
5b0b118ee5 M_SpecificMenuRestore: Fix a bug where setup_numplayers was always being set to 1, instead of only when "skipping" character select via netgame connection 2023-02-01 23:16:48 +00:00
toaster
03d422560d menu_t, M_PlayMenuJam: const char *music parameter
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
2023-02-01 23:15:51 +00:00
toaster
f46fbf0418 Remove MessageDef
This was a dummy conditional which was necessary in the old menu system; this is no longer the case as of newmenus.
2023-02-01 22:39:35 +00:00
toaster
f630bbb1cf Challenges menu: More complicated music behaviour
- Pure silence when challenges are being unlocked
- Begin playing the menujam as control returns to the player
2023-02-01 22:14:26 +00:00
toaster
57b22f32d5 M_PlayMenuJam
Pre-emptive work for more complicated menu music behaviour, permitting consistent implementation of the cycling music.
2023-02-01 22:12:41 +00:00
toaster
39dadf1b1e PLAY_MP_OptSelectDef: Integrate M_MPOptSelectInit into M_SpecificMenuRestore 2023-01-31 15:52:46 +00:00
toaster
418cc29adc M_FirstPickProfile, M_StartControlPanel: Support restoremenu after first profile selection 2023-01-31 13:12:31 +00:00
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