Commit graph

234 commits

Author SHA1 Message Date
Oni
cdc56ab2cc Merge branch 'podium' into 'master'
Podium

See merge request KartKrew/Kart!1014
2023-03-07 05:58:20 +00:00
Sally Coolatta
23a00b1d00 Move GP ranking data to grandprixinfo 2023-03-06 18:26:08 -05:00
Sally Coolatta
d5d0647ae6 Remove difficulty as a ranking requirement
Was a cute idea, but removing it since it's not something you can 100% guarantee every time, which was the same reasoning for getting rid of times getting damaged / dealing damage from the requirements.
2023-03-06 18:26:06 -05:00
Sally Coolatta
3c07641938 Add final position as a ranking requirement
1st is a large bonus, 2nd is a medium bonus, 3rd place is no bonus, and everything below is a penalty. This will help make Loser Valley grades never be above a C at most.
2023-03-06 18:26:06 -05:00
Sally Coolatta
3d1070c2f2 Show ranking data on the screen 2023-03-06 18:25:16 -05:00
Sally Coolatta
f7851623ff Calculate a bot difficulty to reach
13 is very unlikely for Normal, likely impossible for Easy. (If we want a bonus game speeds, it should be explicitly defined)
2023-03-06 18:25:15 -05:00
Sally Coolatta
c61e017c38 GP rank cleanup
- Move ranking to its own file.
- gpRank (the variable) -> g_gpRank
- gpRank (the struct) -> gpRank_t
- Functions that worked on the global directly now take a pointer to a struct
- Fixed total ring increment
- Fixed final lap's lapPoints being discarded
- Capsules are now added when exiting with the rest of the stuff
2023-03-06 18:25:14 -05:00
Sally Coolatta
55de982fa3 GP ranking
Needs balancing + intermission, but mostly functional
2023-03-06 18:25:14 -05:00
James R
d45ba09ac0 Merge branch 'spb-attack' into 'master'
SPB Attack

See merge request KartKrew/Kart!992
2023-03-05 01:26:32 +00:00
SteelT
31e2c1567e Update replay save prompts to use the new button graphics
- A K_drawButtonAnim function is also provided for convince, since I figured it would have more future uses
- This also makes all of the button patches global, in addition
2023-03-03 23:19:46 -05:00
Sally Coolatta
82313de499 Awayview cleanup
- Moved variables to awayview_t
- Arbritrary +20 is no longer added to z pos, it will use the thing position as the camera position directly.
2023-03-03 16:09:54 -05:00
AJ Martinez
f3f4ac16de SPB Attack: medals, emblems, and fixes 2023-03-03 12:15:00 -08:00
AJ Martinez
79d8e4e109 WIP: SPB Attack - temp menu draws OOB, no unlocks 2023-03-03 12:14:58 -08:00
toaster
36afe024c7 Spurious else 2023-03-01 16:06:12 +00:00
toaster
93f151fec9 Director HUD: Do a bit of cleanup
- Add "Join" on L button.
    - "Becomes ". . .", "Cancel join", and has "[i/n]" appended (where n is cap and i is number of players in game)
- Add colorisation when Director is active
- Make an attempt at fixing splitscreen (I wasn't able to get director to ACTIVATE in splitscreen with two local clients so it's frustratingly untested)
2023-03-01 15:27:48 +00:00
James R
5f1e64d6d9 Add spectator HUD for A, X, R buttons
Old spectator HUD is preserved for empty game, "flying
around" mode.
2023-02-26 05:55:45 -08:00
James R
0bb6f96a13 Load Menu Tooltip Button graphics 2023-02-26 02:31:37 -08:00
AJ Martinez
3212a97547 Eggmanexplode 4*TICRATE -> 6*TICRATE 2023-02-25 19:26:58 -07:00
James R
75c9ee253e k_hud_track.cpp: only draw TARGET text in 1P or 2P splitscreen 2023-02-21 21:09:32 -08:00
James R
4adf585590 Give TARGET HUD tracking to UFO Catcher 2023-02-21 20:12:37 -08:00
James R
e79ff76758 k_hud_track.cpp: refactor to use C++ STL
- Use std::vector instead of fixed size array.
- Use std::sort instead of custom sorting algorithm.
2023-02-21 20:11:58 -08:00
James R
83051728f0 Move capsule target code out of k_hud.c, to k_hud_track.cpp 2023-02-21 20:09:06 -08:00
James R
be4c341316 Rename kitemcap to trackercap 2023-02-21 17:48:14 -08:00
James R
93f335c636 Add Gacha Bom item HUD graphics 2023-02-20 21:25:38 -08:00
toaster
a8ae2f035e K_drawKartTimestamp: Draw in splitscreen if gametype has timelimit.
- 2p: In 1p position (slides from right)
- 3p/4p: In top-middle of screen (slides from top)
- Uses time from the display with the highest time, which covers exiting, no contest, etc
- Exposes V_ flags in the function signature
2023-02-16 18:23:10 +00:00
toaster
fa3b361e2f K_drawStartCountdown: Only show "DUEL" text if you're actually inDuel. 2023-02-16 16:36:32 +00:00
toaster
31dcb3346e K_drawKartTimestamp: Still draw your best record even if the map has no ET_TIME medals 2023-02-05 19:48:25 +00:00
toaster
55b7d21051 G_TickTimeStickerMedals, G_UpdateRecords, K_drawTimestamp: Jitter HUD on both Medal-earning success and general failure to reach desired time 2023-02-05 18:44:25 +00:00
toaster
eb16f9d5a9 G_TickTimeStickerMedals: Move the failed-record sound handling out of K_drawKartTimestamp 2023-02-05 18:31:59 +00:00
toaster
4522ba3b4d stickermedalinfo, UpdateTimeStickerMedals: A centralised struct for Medal info attached to the time sticker.
- K_drawKartTimestamp: Significantly less messy, no longer dependent on static variables, and no longer iterates over M_GetLevelEmblems every rendered frame(!!)
    - TODO: Still handles playing sound in the drawer
- K_PrepareTimeAttack: Initial generation of a struct of emblems/text is handled on the menu
- G_UpdateRecords: Updated in-game if you unlock the next medal there
This commit was amended to centralise the new material in g_game.c and reduce the number of header additions required.
2023-02-05 17:42:28 +00:00
toaster
ac2255572a K_drawKartTimestamp: Do not update visible emblems on level completion unless you got more than one on completion
TODO: this code relies heavily on static variables. It has always done so, but the extent to which they're currently employed is worth a fresh look
2023-02-05 00:35:22 +00:00
toaster
42969d8d15 M_CheckLevelEmblems: Support tagging ET_TIME emblems
An ET_TIME emblem with a nonzero tag is directly bound to a staff ghost's finish time. This will make late development medal implementation signifcantly easier.
2023-02-04 22:17:47 +00:00
toaster
4446b1ed9e K_drawKartHUD: Draw a special mini version of RR's title logo instead of that of SRB2Kart's 2023-02-04 18:04:18 +00:00
toaster
223531ffce Precalculate as much shared minimap/automap data on level load as possible
- `P_InitMinimapInfo`
    - Writes to `p_local.h` extern struct
    - Handles everything previously distributed across multiple K_drawKartMinimapIcon calls (and most of AM_findMinMaxBoundaries)
- Reduces complexity of drawKartMinimapIcon significantly
- Last prerequisite before implementing user-placable minimap boundaries...
2023-01-24 14:46:25 +00:00
toaster
dafd6d5dfa New console command "minigen"
- Generates "MINIMAP.png" in your srb2home
- Uses inherited automap code to render to a temporary buffer
    - Because am_map.c is a mess of filescope static variables right now, this only works when the automap is disabled.
- Currently an equal alternate method to SLADE's map image export, but because we're in control, additional features can be added later...
    - TODO: Off vertically by one pixel on GHZ. Otherwise effectively identical in shape
    - TODO: the colours are rancid, I wonder if they were even updated for the 2.2 palette

Related:
- Use identical linear-time mechanisms for detecting borders of map geometry between automap and minimap
    - Automap was previously using iteration over all vertices
    - Minimap was previously pointlessly writing min/max values twice
2023-01-23 12:33:35 +00:00
James R
d56a5041aa Use K_GetCachedItemPatch for distribution debugger
Fixes crash from patch array mismatch.
2023-01-05 05:13:18 -08:00
toaster
4bbe3d7177 Draw Rings/Lives HUD even when not GTR_CIRCUIT 2023-01-01 14:55:58 +00:00
toaster
42a6b03e48 Remove "circuitmap"
An effectively useless global scope boolean that literally checks for the presence of a finish line, created in and used only by things we inherited from vanilla SRB2
2022-12-31 23:27:59 +00:00
toaster
425a02d09b Make GTR_BUMPERS less monolithic
* Battle-like item box respawn handling inverse of GTR_CIRCUIT
* Make battle fullscreen overlay forbid GTR_CIRCUIT
* Make GTR_ITEMARROWS actually do something
* Make everything related to points actually use GTR_POINTLIMIT
* Fobid sphere addition without GTR_SPHERES, to mirror ring addition forbidding
2022-12-31 23:12:41 +00:00
toaster
8bb29e340c Fix a crash in K_drawBossHealthBar exposed by the new random functions 2022-12-26 23:07:32 +00:00
toaster
17dd15b998 "Special Mode" (Sealed Stars) and "Versus Mode" (bosses) are now gametypes
* The existing structs are now exclusively for handling extra data.
    * `specialStage` has been renamed to `specialstageinfo`, to reflect that it is not the sole arbiter.
    * `specialstageinfo.valid` and `bossinfo.valid` are what must be checked before grabbing data from either struct.
        * These are turned on when the gametype extra data is successfully initialised, not on map start.
            * `K_InitBossHealthBar(...)` for `bossinfo.valid`
            * `K_InitSpecialStage(void)` for `specialstageinfo.valid`
        * `K_CanChangeRules(...)` no longer checks these
    * No longer uses duplicate encore information.
* The map command (and -warp) now guesses gametype using a general `G_GuessGametypeByTOL(UINT32)` function
    * Grabs the first gametype with an overlap between the requested TOL and the gametype's TOL.
* The cool Versus-specific intro is now checked via `K_CheckBossIntro()`.
2022-12-26 23:06:24 +00:00
toaster
eb74ec3904 Change the rules for some things selected in the previous commit.
- Only show lap count and gamespeed on rankings if GTR_CIRCUIT
- Adjust offsets for speedometer/accessability icons with GTR_BUMPERS|GTR_SPHERES
- Only show Karma on Bumpers hud with GTR_KARMA
- Permit battle fullscreen without GTR_KARMA
- Make the Break The Capsules roulette show up with GTR_CAPSULES, not absence of GTR_CIRCUIT
- Don't push Break The Capsules roulette to the item list twice
- Make the special mode switching of int_battle happen for all instances of int_battle, not just GT_BATTLE
2022-12-26 22:06:26 +00:00
toaster
8431e52687 All playsim-internal distinctions between Race and Battle are now gametype rules.
New:
- GTR_POWERSTONES
    - Handles spawning in Battle Emeralds (currently only works stacked with GTR_PAPERITEMS)
- GTR_ENCORE
    - Codifies that Race can use Encore and Battle can't.
- GTR_CLOSERPLAYERS
    - A gametype where players are encouraged/expected to be closer together. (All of the following was GT_BATTLE specific)
        - Drafting/tether has increased strength/effective distance
        - Spindashing is stronger
        - Invincibility chaining has less effect
        - Grow has a lower total duration
        - Flame shield is more uncontrollable

Extra functionality
- GTR_CAPSULES
    - Prevents usage of lives in Grand Prix (so Race, and the upcoming Special and Boss gametypes, can have 'em)
- GTR_CIRCUIT
    - When not present, Flame Shield has perma-full meter
    - When not present, overrides gamespeed with KARTSPEED_EASY
    - Presence of Best Lap sticker in Time Attack menu
    - Seperation between Time Attack and Break The Capsules modeattacking roulettes
- GTR_POINTLIMIT
    - Handles the switch between a gametype recording/displaying Times and Scores in a few places
    - Handles displaying "WANTED" players on the minimap

Missing simple substitutions
- A whole bunch of cases where player->bumpers was checked with gametype == GT_BATTLE rather than GTR_BUMPER
- GTR_OVERTIME handles the overtime special icon on the minimap
- GTR_BATTLESTARTS is honoured in K_DoIngamerespawn
- The Replay hut is closer to supporting custom gametypes

Removals
- GTR_LIVES
- GTR_SPECIALBOTS
    - Given that grand prix persists between modes, these are special game-controlled features and not gametype-specific.
- GTR_WANTED
    - WANTED as it existed is functionally dead
2022-12-24 22:43:00 +00:00
toaster
33167078c8 Merge branch 'capsules-improvement' into 'master'
Break the Capsules additions

See merge request KartKrew/Kart!793
2022-12-20 21:26:46 +00:00
Sally Coolatta
a7ff0afc8b Merge branch 'master' into capsules-improvement 2022-12-19 01:12:07 -05:00
VelocitOni
8cd36dbf03 Merge branch 'master' into unlockables-undefeatable 2022-12-18 01:59:04 -05:00
James R
374342358d Fix HUD item flicker crash
Fixes item capsule award if a roulette was not rolled
sometime before.
2022-12-17 18:55:38 -08:00
Sally Coolatta
6554c8bfb1 Improve scope handling of the roulette
All of the player_t references are now full-const instead of const pointer after a certain point. This is because I've made two mistakes so far of modifying the player with this, when it's supposed to be safe to call for HUD as well.

Also uses this split to add a more efficient way to prevent multi-Shrink/SPB.

Also handles NULL player better, for the sake of Battle's K_CreatePaperItem.
2022-12-15 02:13:46 -05:00
Sally Coolatta
ffe9d5cd1d Properly support small splitscreen itembox 2022-12-15 01:41:34 -05:00
Sally Coolatta
f7e53ec811 Cleanup lots of the older roulette code
- Most of it now requires a reference to itemroulette_t, rather than copying all of the variables over.
- Increased the effect of Frantic Items, as the old scaling was made extremely low because  item distance was exponential back then.
- A lot of variables are pre-calculated in itemroulette_t instead of redoing the calculations every time (player count, first place's dist, etc)
- Make most of these functions only accessible by k_roulette.c
- Even when single items get forced into your roulette, the Super Ring Debt effect can happen
- Make the game support setting single items from other gametypes (Pogo Spring-only races work now)
- Fix some item distances not accounting for scale
- Prevent multiple of certain items from rolling at once; Shrinks (not a big deal) and SPBs (OH GOD NO)
2022-12-15 01:23:23 -05:00