Commit graph

2185 commits

Author SHA1 Message Date
James R
d56be63249 Battle: eliminate players killed by the Overtime Barrier
- Players killed this way become invisible and unable to
  move.
- Ends the match when one player is remaining.
2023-03-06 18:52:59 -08:00
Sally Coolatta
0f87e177b9 Be able to get partial credit for capsules again 2023-03-06 18:26:09 -05:00
Sally Coolatta
23a00b1d00 Move GP ranking data to grandprixinfo 2023-03-06 18:26:08 -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
toaster
baeb48ca1f roundconditions_t - State tracking for events which occour mid-match and don't stay that way
- Exists on every player struct to simplify writes, but A) not netsynced and B) only checked for local players
- Updated in the relevant locations - no centralised ticking at the moment
- Has a number of new associated conditions that require playing (UCRP's).
    - The following require [True/False] as supplementary information.
        - FallOff
        - TouchOffroad
        - TouchSneakerPanel
        - RingDebt
    - The following have no supplementary information because they're universally a specific achievement.
        - TripwireHyuu
        - SPBNeuter
        - LandmineDunk
        - HitMidair
    - The following has specific requirements that can be set.
        - WetPlayer [name of fluid]
             - Append "Strict" to forbid even skimming the surface of the map's fluid.
2023-03-06 22:31:35 +00:00
Sally Coolatta
9c264b3736 K_UpdateAllPlayerPositions
Call this whenever we need accurate player positions. In addition to before player think, is now being used for exiting as well as immediately when the player is spawned.
2023-03-05 14:59:11 -05:00
toaster
5296ab1397 Merge branch 'master' of https://git.do.srb2.org/KartKrew/Kart into conditions-cascading 2023-03-04 20:09:48 +00:00
toaster
eeb6e40909 Add totalrings to gamedata
- Added to Statistics screen
- Caps at "999,999,999+".
- Controls UC_TOTALRINGS condition
- Improve description for UC_MATCHESPLAYED condition
    - Says "Rounds" now
- Improve Statistics text for playtime
    - Dynamically changes visible units of time (seconds, minutes, hours, days.......)
2023-03-03 22:35:28 +00:00
Sally Coolatta
9501b57296 Extend cut-away view functionality
- arg2: TID of an object to make the camera's angle/pitch follow.
- arg3: Zoom tube waypoint sequence to start following.

- Ceremony uses one-screen, regardless of previous splitscreen-ed-ness
2023-03-03 16:09:55 -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
b777759744 Use postfix for P_FindClosestTurningForAngle iterations 2023-03-01 22:27:00 -07:00
AJ Martinez
7cffbef1a2 Merge remote-tracking branch 'origin/master' into better-local-camera 2023-03-01 22:25:46 -07:00
toaster
06ccdbafc7 P_DeathThink: Don't tick K_KartPlayerHUDUpdate
This function is already called regardless of whether the player is dead or alive in p_tick.c
2023-03-01 23:16:29 +00:00
AJ Martinez
3f2a074869 Remove debug print 2023-03-01 15:54:19 -07:00
AJ Martinez
15da567372 Local camera: binary search for ideal steering value, cheat angle if it's close enough 2023-03-01 15:39:09 -07:00
James R
b3511a9149 Player orbiting physics 2023-02-28 20:27:11 -08:00
AJ Martinez
7788fa116f Review fixes 2023-02-26 14:55:41 -07:00
AJ Martinez
be4a2be1da Fix unsteady camera movement in demos 2023-02-26 04:29:13 -07:00
AJ Martinez
6b3d6ed406 Fix incorrect visual angle changes at race start
Old ticcmds were trying to set angle, and didn't care whether the player was actually able to steer. The bug is always in your code.
2023-02-25 15:54:06 -07:00
AJ Martinez
3e2d7ff7e7 Correctly apply steering for easing purposes, fix sign on undershots 2023-02-25 04:52:22 -07:00
AJ Martinez
c17f5c22ff Suspend local camera during DRIFTEND kickout 2023-02-24 21:16:53 -07:00
AJ Martinez
e3e567f303 Don't use localangle aim for bots 2023-02-24 20:38:36 -07:00
AJ Martinez
432be46a2f Please god just fucking work 2023-02-24 20:04:36 -07:00
AJ Martinez
7c08634f7e WIP: Turn towards local camera (midgame join broken right now) 2023-02-24 16:59:22 -07:00
AJ Martinez
4062447ee7 Debounce cmd latency in local camera prediction 2023-02-23 15:19:11 -07:00
James R
91a323624c Let players bust bustable FOFs again 2023-02-18 23:29:54 -08:00
Oni
a7a3a2c5d5 Merge branch 'special-out' into 'master'
Special Out

See merge request KartKrew/Kart!921
2023-02-17 05:04:34 +00:00
toaster
b2bd5ecccd Merge branch 'blackhole-fault' into 'master'
Fault rework

See merge request KartKrew/Kart!910
2023-02-13 23:23:07 +00:00
AJ Martinez
32ea795639 Fault rework cleanup for merge 2023-02-13 15:31:39 -07:00
toaster
98c333e313 Per discussion, always use short, FINISHless exit for special stage failure. 2023-02-13 18:18:54 +00:00
toaster
8b14d10506 Special Stages: Distinguish between failures with and without lives.
- With lives remaining: No FINISH text, 1 second before restart
- With no lives remaining: Yes FINISH text, 2 and a half seconds before return to menu(/emeraldless podium when implemented)
2023-02-13 18:03:56 +00:00
AJ Martinez
de268b744b Beam fault cleanup, make non-circuit death faults respawn at wp behind finish 2023-02-11 19:09:52 -07:00
toaster
2207115424 Time Attack: Update Medals on player exit, not on intermission
- M_UpdateRecordReplays: Split out M_UpdateRecords
- P_DoPlayerExit: Call M_UpdateRecords in modeattacking
2023-02-05 00:21:08 +00:00
toaster
c8b8eba6e6 Partial demo conclusion crash fix of invalid player/mo dereference
Still crashes, but now at an address I can't use gdb on...
2023-01-28 22:22:08 +00:00
toaster
52ce1d95fd Additional spectator checks
- P_DamageMobj
- P_PlayerThink
2023-01-21 14:57:54 +00:00
toaster
2e35a40b80 SF_IRONMAN: handle randomised skin and hurt/death states differently
- P_DamageMobj
    - Become skin temporarily to show off the hurt frames
    - Sets charflags, so P_PlayerThink can handle reversion
    - Add sparkles for losing disguise
- P_KillPlayer
    - Sets charflags, so P_PlayerThink can handle reversion
    - Add extra sound for losing disguise
- G_PlayerReborn
    - Sets charflags in not-betweenmaps case as well, so P_PlayerThink can handle reversion
- P_SpawnPlayer
    - Use set skin for spawn again (partial revert of previously committed code)
- P_PlayerThink
    - More specific conditions for fakeskin reversion
        - Not hurt, dead, or respawning (except for last part of drop)
    - Add sound and sparkles for reapplying disguise
2023-01-21 14:43:54 +00:00
James R
610e2c66be Adjust Garden Top physics
- 110% -> 150% top speed
- no friction decrease if grinding
- 250% -> 300% gravity when grinding (for slope sliding)
- 275% -> 325% max boost when releasing grind
- 60% minimum boost speed when relasing grind
2023-01-14 18:11:46 -08:00
toaster
9980631e2f Fix bots' realtime not ticking upwards when all human players have exited
This corrects the issue where bots have the same time on exit as the last human player, and therefore tie with them, with disastrous consequences for GP.
2023-01-08 13:58:14 +00:00
toaster
f4071ce42f Fix getting race-endingly stuck in zoom tubes while respawning 2023-01-06 13:50:47 +00:00
toaster
6d1dd5f089 Fix player potentially getting stuck invisible while lightsnaking when not true death respawn 2023-01-06 13:43:11 +00:00
toaster
1213836564 Permit a lightsnaking player to go into RESPAWNST_DROP (the final second of lightsnake) early at any time after the initail bring-back-to-last-waypoint.
Needs balance testing, but resolves #299.
2023-01-06 13:20:04 +00:00
James R
66e2f3a8e9 Reduce stair janking loss of control if momentum angle drifts too far from facing 2023-01-03 22:43:58 -08: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
94bcf79710 Restrict collecting rings in GTR_SPHERES, not GTR_BUMPERS! 2022-12-31 22:34:19 +00:00
toaster
15587417c7 Coherency changes to special stage behaviour in anticipation of timeattack support
* Make everyone PF_NOCONTEST (but not explode) if the UFO/emerald reaches the end of its waypoint path.
    - Possibly temporary: Make the UFO/emerald go straight up at its final waypoint
* If you have PF_NOCONTEST, K_IsPlayerLosing is true
* If special stage in action and the only reason you'd be behind is your position, nobody loses
* Never eliminate last in special stage
* Time Over funny camera no longer occurs when PF_NOCONTEST but not dead
2022-12-27 22:24:18 +00:00
toaster
470f82104d Rework intertype_t
- Now you select based on whether you want to rank by
    - Time always (Race, Special)
    - Score always (might be useful for custom gametypes..?)
    - Time in 1P, Score otherwise (Battle, Versus)
- No longer has gametype-specific text colours on the intermission
- Also cleans up a case where invalid music could play for winning a custom gametype without GTR_CIRCUIT *or* GTR_BUMPERS
2022-12-27 14:33:58 +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
James R
ba2a7744d1 Add half hitlag to invincible players if they would've been damaged 2022-12-21 08:35:26 -08:00