mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
UFO not CBT
This commit is contained in:
parent
d9915ca471
commit
2b6da538ac
1 changed files with 24 additions and 1 deletions
|
|
@ -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,
|
||||
|
|
@ -168,9 +173,11 @@ static void UFOUpdateDistanceToFinish(mobj_t *ufo)
|
|||
static void UFOUpdateSpeed(mobj_t *ufo)
|
||||
{
|
||||
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;
|
||||
|
||||
UINT32 spacing = FixedMul(FixedMul(UFO_SPACING, mapobjectscale), K_GetKartGameSpeedScalar(gamespeed)) >> FRACBITS;
|
||||
UINT32 distanceNerf = FixedMul(FixedMul(UFO_PITY_BRAKES, mapobjectscale), K_GetKartGameSpeedScalar(gamespeed)) >> FRACBITS;
|
||||
|
||||
// Best values of all of the players.
|
||||
UINT32 bestDist = UINT32_MAX;
|
||||
fixed_t bestSpeed = 0;
|
||||
|
|
@ -223,6 +230,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 +509,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 +785,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 +837,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))
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue