- The (A) that appears on the intermission to permit you to skip it now has its own drawer function.
- This drawer (interpolatedly) slides it in and out depending on the two times passed to it.
- Now slides in at the first half-second of intermission, preventing mashing through.
- Press A button the first time to do the card flip.
- Press A button a second time to end the intermission.
- Will not end literally immediately, in order to let
tally sounds finish and GP progression bar animate.
(This commit does not compile. Sound test and tunes
command code needs to be ported after this.)
This is a big one. Here's the rundown:
The old music system was very direct, much of the time
just a proxy to the real sound API in i_sound.h.
You could change the music on command, but there wasn't
a consistent way to prevent some music from playing over
others. P_RestoreMusic is one example of needing to
address this problem. The jingles system was intended as
another solution. Furthermore, sound test (Stereo) has its
own needs.
I am removing all of that. Music handling in general is
now a very deliberate system, kind of similar to jingles.
In the new system, "tunes" are registered. The tune stores
info such as whether it should loop or fade out. Most of
the configuration is intended to be initialized only ONCE.
Tunes can be mapped to an actual music lump. They can be
remapped at any time too.
Tunes are also configured with a priority number. This
determines which tune is heard, if multiple are supposed
to be playing at a time. You can even tell a tune how long
it should play, so it's unnecessary to track this with
bespoke timers.
- Always show, even in online
- Add Egga Channel/CPU icon if not a local player-controlled character
- This fixes an infinite loop crash that could previously affect 1v1s VS bots
Instead of tying it directly to the number of players, instead base it on whether the points are important to keep track of.
- Match Race or Time Attack
- No next map override, since points will persist to that one
- No maps queued, so points aren't relevant
- OR maps are queued but you haven't started them yet, so the points will be discarded
Show players' appearances on intermissions with less than or equal to 2 players, in port priority order, to mimic Sonic 3 Competition.
Also shows player letter and profile name in Match Race, to really drive the reference home.
Content of commit was originally written by Sal, but as a monolithic commit. The author of this commit is chunking it up for easier review.
Simple inversion on the face of things, but with a long tail of consequences, including 19 changed files.
Forced uppercase has been applied in a handful of locations where it was aesthetically imperative. Most menus will follow in another commit, so that that may be reverted if we change the default menu font.
- Landing sound when doing a hop (uses a Knuckles Chaotix sound, maybe temporary)
- Meter fill sound when checking Rank for Sealed Star
- Stopping early when Rank is too low (same sound as Landing, potentially temporary if someone gets inspired)
- The previous location for updating grandprixinfo.rank.position and grandprixinfo.rank.skin was too early.
- K_GetPodiumPosition checks player->score
- Y_StartIntermission calls Y_CalculateMatchData
- Y_CalculateMatchData checks K_CalculateGPGrade... which uses invalid position info to determine grade!
- Y_CalculateMatchData updates player score
- To this end, rearrange Y_CalculateMatchData to accomodate.
- Calls K_UpdateGPRank.
- Then, calls K_CalculateGPGrade.
- Also called after G_UpdateVisited if no intermission occours, for general consistency.
- In addition, adjust so earlier players have port priority for skin saved to gamedata.
- Center generalised text without the "got through round" backing
- For spectators observing a Round Queue, show "ROUND (n)" at the top instead of the more generalised fallback strings
Also includes secret support for widescreen.
I was planning to put this on tab rankings, which doesn't have borders.
Pause menu does, but it would be a waste to strip it back out again.
- Uses function pointers to highlight display players instead in demo playback
- Was previously doing this to avoid all players being highlighted in local splitscreen, but this is now relevant there too thanks to bots
- On the last non-rank-restricted round in the queue, if the final entry is visible (you've been to it before OR you're just about to go to it for the first time), slide over before the bar fills up.
- Adds one second to the timer to give it extra breathing room
- Known hack: A one-frame offset if R_UsingFrameInterpolation() returns true
- This permits the Sealed Star rank progression bar fill to reach the end.
- It also allows us to match possible sound cue events between interp and non-interp frames.
Instead of using whiteplayer (which isn't handled in splitscreen)
- Get the highest-ranked non-spectator player who's local (or display if demo.playback)
- Show an alternate arrow (currently not in assets) if
- no player was found
- OR the player becomes a spectator
- OR has otherwise invalid properties
- Use SKINCOLOR_WHITE (and its invcolor) for associated colormaps in this case