Merge branch 'special-starting-rings' into 'master'

Sealed Star QoL + nerfs

See merge request KartKrew/Kart!1325
This commit is contained in:
Oni 2023-07-03 00:46:59 +00:00
commit cbeebab927
2 changed files with 30 additions and 2 deletions

View file

@ -2595,6 +2595,10 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps)
{
rings = 20;
}
else if (gametyperules & GTR_CATCHER)
{
rings = 20;
}
else
{
rings = 5;

View file

@ -35,6 +35,9 @@
#define UFO_DAMAGED_SPEED (UFO_BASE_SPEED >> 1) // Speed to add when UFO takes damage.
#define UFO_START_SPEED (UFO_BASE_SPEED << 1) // Speed when the map starts.
#define UFO_PITY_DIST (10000) // Let's aim for an exciting finish! Try to stick closer to the player once they're past this threshold.
#define UFO_PITY_BRAKES (600 * FRACUNIT) // Subtract this amount from UFO_SFACING, starting at UFO_PITY_DIST and ending at the finish line.
#define UFO_NUMARMS (3)
#define UFO_ARMDELTA (ANGLE_MAX / UFO_NUMARMS)
@ -52,6 +55,8 @@
#define ufo_piece_next(o) ((o)->hnext)
#define ufo_piece_prev(o) ((o)->hprev)
#define ufo_intangible(o) ((o)->cusval)
enum
{
UFO_PIECE_TYPE_POD,
@ -167,9 +172,12 @@ static void UFOUpdateDistanceToFinish(mobj_t *ufo)
static void UFOUpdateSpeed(mobj_t *ufo)
{
const fixed_t mapspeedscale = FixedMul(mapobjectscale, K_GetKartGameSpeedScalar(gamespeed));
const fixed_t baseSpeed = FixedMul(UFO_BASE_SPEED, K_GetKartGameSpeedScalar(gamespeed));
const UINT32 spacing = FixedMul(FixedMul(UFO_SPACING, mapobjectscale), K_GetKartGameSpeedScalar(gamespeed)) >> FRACBITS;
const UINT32 deadzone = FixedMul(FixedMul(UFO_DEADZONE, mapobjectscale), K_GetKartGameSpeedScalar(gamespeed)) >> FRACBITS;
const UINT32 deadzone = FixedMul(UFO_DEADZONE, mapspeedscale) >> FRACBITS;
UINT32 spacing = FixedMul(UFO_SPACING, mapspeedscale) >> FRACBITS;
UINT32 distanceNerf = FixedMul(UFO_PITY_BRAKES, mapspeedscale) >> FRACBITS;
// Best values of all of the players.
UINT32 bestDist = UINT32_MAX;
@ -223,6 +231,13 @@ static void UFOUpdateSpeed(mobj_t *ufo)
{
INT32 distDelta = 0;
if (bestDist < UFO_PITY_DIST && UFOEmeraldChase(ufo))
{
INT32 brakeDelta = UFO_PITY_DIST - bestDist;
INT32 distPerNerf = UFO_PITY_DIST / distanceNerf; // Doing this in the sensible way integer overflows. Sorry.
spacing = spacing - (brakeDelta / distPerNerf);
}
if (bestDist > spacing)
{
wantedDist = bestDist - spacing;
@ -495,6 +510,9 @@ void Obj_SpecialUFOThinker(mobj_t *ufo)
UFOUpdateSpeed(ufo);
UFOUpdateSound(ufo);
if (ufo_intangible(ufo))
ufo_intangible(ufo)--;
if (UFOEmeraldChase(ufo) == true)
{
// Spawn emerald sparkles
@ -768,6 +786,7 @@ boolean Obj_SpecialUFODamage(mobj_t *ufo, mobj_t *inflictor, mobj_t *source, UIN
SetRandomFakePlayerSkin(source->player, true);
}
ufo_intangible(ufo) = 30;
// Speed up on damage!
ufo_speed(ufo) += addSpeed;
@ -819,6 +838,11 @@ void Obj_PlayerUFOCollide(mobj_t *ufo, mobj_t *other)
return; // underneath
}
if (ufo_intangible(ufo))
{
return; // We were just hit!
}
if ((other->player->sneakertimer > 0)
&& !P_PlayerInPain(other->player)
&& (other->player->flashing == 0))