Commit graph

125 commits

Author SHA1 Message Date
toaster
2d46112c58 Merge branch 'master' of https://git.do.srb2.org/KartKrew/Kart into round-queue
# Conflicts:
#	src/d_netcmd.h
2023-04-17 20:08:37 +01:00
Sally Coolatta
668d832ca1 Delete respawn command, put Ring shooter on Y 2023-04-17 00:23:06 -04:00
toaster
a08683e819 Improved round-queue state net communication
- Only send from the server when an update to roundqueue state is relevant
- Perform sanity checking on reciept
- Initialise when map command is sent with roundqueue size greater than the client's
- Correct gametype/encore state on reciept
- Only permit from the server, forbid admin clients from providing it on penalty of kick
2023-04-11 17:18:28 +01:00
toaster
19ef96351a roundqueue
A general purpose system that permits cacheing of GP progression in one place, but which permits future expansion and brings Online GP a little closer to reality.
- Stores a bunch of levels, gametypes, encore state, and restricted-by-rank-ness in sequence.
    - Initialised on GP cup select.
    - FUTURE WORK: Open to being initialised by other methods
- Digests its way through that sequence as maps are completed.
- Stores round number instead of `grandprixinfo`.
- Map commands as sent over the wire have been adjusted.
    - Sends round number and size of/position in roundqueue.
    - Now figures out GP Event Type from gametype.
        - Can be swung in the direction of a Special Stage with a hint flag.
        - This hint flag replaces "fromlevelselect", which was functionally vestigal.
2023-04-11 17:18:27 +01:00
toaster
06763da0e7 Merge branch 'bind-function-keys' into 'master'
Remove hardcoded Function keys for screenshot etc, add RECORD LOSSLESS to the profile controls

Closes #284

See merge request KartKrew/Kart!1093
2023-04-11 16:16:23 +00:00
toaster
a85af6339d M_EraseDataResponse: Don't softlock the Stereo on if you're likely no longer able to access it 2023-04-08 12:32:47 +01:00
James R
9ca196cb89 Reset input upon exiting bind menu
While rebininding your controls:

- Do not take a screenshot if you press whichever button
  it was bound to before
- Try not to let a held button press buffer back into the
  controls menu
2023-04-06 20:02:12 +01:00
James R
d9faef58cb Add game control for lossless video recording, set default keys for gc_screenshot, etc
Renames gc_startgif to gc_startmovie.

Default controls:

- gc_screenshot - F8
- gc_startmovie - F9
- gc_startlossless - F10

Bumps PROFILEVER to 3, safely migrates existing profiles.
2023-04-06 20:02:11 +01:00
toaster
bbf2fc0b5f Merge branch 'tutorial-access' into 'master'
Tutorial access

See merge request KartKrew/Kart!1102
2023-04-06 17:02:59 +00:00
Eidolon
86dd34d807 Merge branch 'pad-rumble' into 'master'
Gamepad rumble

See merge request KartKrew/Kart!1098
2023-04-03 21:15:34 +00:00
toaster
534209b519 Extras Menu adjustment (again)
- Uncomment extras_tutorial again
- Put Tutorial second after Addons, so Challenges and Statistics are next to each other again
2023-04-03 00:28:38 +01:00
toaster
8d804872cf M_LevelListFromGametype: Ensure music is continuous when Level Select is entered from Extras menu
Also fixes the same issue for Online mode
2023-04-03 00:28:38 +01:00
toaster
fbfb8a507d Extras menu: Add GT_TUTORIAL selection screen
- Disabled if no maps available/unlocked
- Has another exception for showing TEST RUN under all gametypes
- Splitplayers is forbidden
2023-04-03 00:28:38 +01:00
toaster
89fc9a618e Rumble toggle attached to profile
- Will silently merge conflict with !1093, make sure to adjust PROFILEVER handling
- (profile_t *)->rumble
- cv_rumble[MAXSPLITSCREENPLAYERS]
- cv_dummyprofilerumble
- Disables all current rumbles when toggling off
- Prevents new rumbles from being set while turned off
2023-04-02 23:16:58 +01:00
Eidolon
c64bdca667 Reset rumble on net pause and pause menu 2023-04-02 21:56:41 +01:00
toaster
0708c282fc Challenges screen: Always digest pendingkeyrounds when running out of things to look at
Without this commit, if you didn't unlock a Chao Key, it would always handle unlocks, then when you returned to the menu a second time digest any pending key rounds. (Chao Key earning was always correct.)
2023-03-31 16:01:18 +01:00
toaster
027fd2be04 Time elapsed functionality
- Shown on the menu
- soundtest.autosequence
    - Plays all songs in sequence, skipping over the soundtest entry.
        - Plays each looping song twice (and fades out if it's the last one in the musicdef's tracks)
        - Plays non-looping songs once with no fade ever
   - Disabled when S_SoundTestStop called
- Songs that end outside of autosequence will now stop the visible Playing.
2023-03-31 00:27:20 +01:00
toaster
2c0645cba2 Improve Stereo text header drawing
- Use LSTitleHighString at the top of the menu for the music's title/Sound Test
- Only show Track for relevant entries
- Show cv_soundtest.value in hex for that Classic Sonic soundtest flavour
2023-03-30 18:36:09 +01:00
toaster
5a802219ce M_SoundTestNextPrev: Set cv_soundtest to 0 when returning to the soundtest entry 2023-03-30 01:11:22 +01:00
toaster
e5c3b566bf Stereo Volume
Access to soundvolume and musicvolume through the Stereo Mode menu
- Draws a knob and volume bar (with loudness warning)
- Changes which cvar is associated with it depending on selected song/lack of
    - If on any regular song, use digital music volume
    - If on soundtest, use sound volume
        - unless on entry 0 aka N/A, where no volume is visible at all
2023-03-30 01:01:16 +01:00
toaster
f9975d6a71 stereospecial_e
No more magic numbers for M_DrawSoundTest
2023-03-29 23:28:45 +01:00
toaster
2446e53ff9 Start on Stereo Mode visuals
- Buttons have been implemented.
    - They push down when you press an input.
        - FUTURE WORK: Back doesn't get the opportunity to do so. Delay the exit of this menu?
    - Certain ones have special properties.
        - PLAY locks down when playing and not paused
        - PAUSE locks down when playing and paused
        - TRACK is a wheel/slidery thing
        - BACK should get pressed when you're exiting (see previous FUTURE WORK)
        - FUTURE WORK: The detection of these currently uses magic numbers.
- The Stereo itself is now drawn.
    - FUTURE WORK: The screen's contents are still the testing visuals.
2023-03-29 16:14:38 +01:00
toaster
53fc4aec0a Adjustments to user handling of Stereo
Per VC discussion:
- Pressing STOP does not NULL your selected song
    - ...unless you press it a second time while already stopped
- Pressing PLAY should de-activate pause if active, not restart the track
- Pressing PAUSE while paused should not de-activate pause
- Removed the Extra functionality from TRACK.
2023-03-29 16:04:13 +01:00
toaster
bc07cfa94b S_SoundTestTogglePause
Instead of a fake S_StopMusic-based Pause, make it use the S_PauseAudio/S_ResumeAudio system.
2023-03-29 13:39:40 +01:00
toaster
8bd3786895 S_UpdateSoundTest: Add a "dotracks" parameter
- Integrates the maps with multiple tracks into the Next/Prev sequence, if true.
- For testing, currently active - but I may add features later that would be more fitting.
2023-03-28 13:06:39 +01:00
toaster
6e48a671ee extras-1.c - convert magic numbers for Extras menu listings to enums
Makes this code much less fragile to changing entries.
2023-03-26 21:54:33 +01:00
toaster
8f592c196f Stereo mode
- Minimum viable implementation
- New horizontal menu
    - FUTURE WORK: visuals are extremely basic
- Accessible from both Extras and in-game Pause if SECRET_SOUNDTEST is unlocked
- Rather than the Shadow-the-Hedgehog style free select of SRB2's Sound Test, it's a Best Of The Hacks And Fan Music Sega CD player.
    - Back
        - Exit menu
    - Stop
       - Stops Stereo music entirely
    - Pause
      - Pauses Stereo music without losing place in sequence
          - FUTURE WORK: This should probably just pause the actual player ala minimised viewport
    - Play
      - Begins Stereo music on non-NULL musicdef entry
    - Track
      - For NULL soundtest entry:
          - Switches between sfx
      - For musicdefs with multiple tracks:
          - Switches between them
    - Prev and Next
        - Changes musicdef entry
            - FUTURE WORK: This is extremely naive and doesn't respect the following
                - Cup order
                - Unlocks
- Overrides all game-requested music changes when in Play or Pause mode
    - This makes it an actual fun in-game feature as a menuification of the `tunes` command, not just a pure novelty.
2023-03-25 23:37:07 +00:00
toaster
42cc95f6ed menubehaviourflags_t / (menu_t).behaviourflags
- MBF_UD_LR_FLIPPED
    - Genericisation of the control flip for PAUSE_PlaybackMenuDef
- MBF_SOUNDLESS
    - Do not create sound for default menu actions
2023-03-25 22:39:07 +00:00
toaster
4c0077e07c Merge branch 'master' of https://git.do.srb2.org/KartKrew/Kart into conditions-cascading 2023-03-19 13:01:06 +00:00
toaster
3e900d7f57 G_DirtyGameData: Dirty bit only applied in I_Error and signal handlers, nowhere else
- Unfortunately, the way this system previously worked, the unlock was given to you for free if you accidentially opened two copies of the game at once.
- Instead, open the file in r+ mode, shimmy along 5 bytes, and write a `true` to be read later.
- Far more memory safe than rewriting the entire gamedata out on crash.

ALSO:
- crashflags has been split into boolean evercrashed and UINT8 musicflags.
    - We don't need to track if the LAST session was a crash, at least not right now.
    - Opens the floor up to other music like Loser Club happening on the Challenges menu.
2023-03-17 14:42:06 +00:00
James R
aef45fb005 Rename moviemode_mode cvar to lossless_recorder, remove WebM option, adjust menus 2023-03-16 00:10:08 -07:00
toaster
7f3836f916 Chao Key changes
- Chao Keys are now UINT16 instead of UINT8
- The maximum number of Chao Keys is now 9999, which is the largest number of 9s that can fit in a UINT16
- Used keys no longer count towards your total
Will mildly corrupt gamedatas made with previous conditions-cascading builds, but only in a way that gives you extra keys than you've earned.
2023-03-15 14:49:22 +00:00
toaster
8c19477ad8 Self-review: Correct to say "GP & Time Attack data" 2023-03-15 13:12:19 +00:00
toaster
2e1efaff0c Merge branch 'master' of https://git.do.srb2.org/KartKrew/Kart into conditions-cascading
# Conflicts:
#	src/k_battle.c
#	src/k_hud_track.cpp
#	src/k_kart.c
#	src/p_inter.c
2023-03-14 21:59:19 +00:00
toaster
0124cf7356 No TEST RUN in statistics as that's also forbidden in Time Attack 2023-03-14 20:36:54 +00:00
toaster
22e17fd881 Statistics respects cups now
- 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
2023-03-14 20:27:58 +00:00
toaster
4db0affd2b Addons menu: Show unlocks after backing out
- For the Addons unlock condition.
- Also forbids having menu flow interrupted with challenges if you're in-game
2023-03-14 17:04:46 +00:00
toaster
107acf34d3 Fix some softlock circumstances caused by the Chao Key system
- Nonzero keys pending, but zero pending rounds
- Nonzero keys pending, but too many keys already earned
2023-03-14 12:28:52 +00:00
toaster
276b19e871 M_ChallengesTick: Speed up digesting pending rounds into Chao Keys if there's lots of them remaining 2023-03-14 11:35:08 +00:00
toaster
1fb0e0454f M_ChallengesTick: Fix no in-fade if only Chao Keys are pending 2023-03-14 11:34:07 +00:00
James R
1eed98bc13 Remove screenshot_option, screenshot_folder, movie_option, movie_folder, addons_option, addons_folder
Remove the cvars and menu options to change which folder
screenshots, movies and addons use. Lots of code bloat
that we does not seem necessary.
2023-03-13 20:39:57 -07:00
toaster
492babd73d Linear Level Select polish
- 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
2023-03-13 18:20:50 +00:00
toaster
1701662b6b Lost and Found
- 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!
2023-03-13 16:44:21 +00:00
toaster
07f7be03a1 M_CupSelectHandler: Fix data types 2023-03-13 15:11:14 +00:00
toaster
b5be97cbfc level-select.c: Fix incorrect responses for level-finding functions
- Fix the case where invalid levelsearch_t were providing values of false instead of NEXTMAP_INVALID
- Fix the case where M_GetFirstLevelInList was not returning NEXTMAP_INVALID for rearching nummapheaders
2023-03-13 15:10:43 +00:00
toaster
756feaa20b M_CanShowLevelInList: Do not permit Test Run in time attack
Also improves the associated comment and indentation
2023-03-13 13:35:23 +00:00
toaster
425f260914 Never consider TEST RUN locked
- Repairs access to TEST RUN cup
- We want to make it an unlockable later, so...
- M_MapLocked data types corrected
2023-03-12 20:41:00 +00:00
toaster
241475155b Rename "Break the Capsules" to "Prison Break"
We had this collective consciousness bigbrain moment in VC together, and it can literally only happen in this branch because unlocks.pk3 is the only main-game asset that needs to change for it
Solves the big problem we had with mixing up Item Capsules and ~~Battle Capsules~~ PRISON EGGS
2023-03-12 20:17:46 +00:00
toaster
01f6eb71f5 Optimisation: reduce the number of calls to M_CheckUnlockConditions
- For P_Ticker()'s calls to M_UpdateUnlockablesAndExtraEmblems
    - Do not check non-UCRP_REQUIRESPLAYING conditions
        - Controlled by a new `boolean doall` parameter to M_UpdateUnlockablesAndExtraEmblems
        - Most other contexts have this as true
        - Forced true if update is meant to be silent
    - Only check UCRP_REQUIRESPLAYING conditions if a relevant property has been touched
        - Controlled by a new `boolean checkthisframe` property on roundcondition_t
        - Set in all contexts where roundcondition_t is modified
        - Would also be set on lap change, but that case is already covered by the following
- Check all conditions, both UCRP_REQUIRESPLAYING and not, on:
    - local player K_HandleLapIncrement
    - local player P_DoPlayerExit
    - local player P_DoTimeOver
    - Controlled by a new `boolean deferredconditioncheck` property on gamedata_t
2023-03-12 13:52:28 +00:00
toaster
8b437d5a32 Minimum viable product of Chao Keys condition bypass
- 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.
2023-03-09 22:33:10 +00:00