mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
90 lines
2.2 KiB
C
90 lines
2.2 KiB
C
#include "../doomdef.h"
|
|
#include "../info.h"
|
|
#include "../k_objects.h"
|
|
#include "../p_local.h"
|
|
#include "../k_kart.h"
|
|
#include "../k_powerup.h"
|
|
|
|
static INT16 guard_upscale (player_t *player)
|
|
{
|
|
return K_PowerUpRemaining(player, POWERUP_BARRIER) ? 40 : player->spheres;
|
|
}
|
|
|
|
void Obj_BlockRingThink (mobj_t *ring)
|
|
{
|
|
if (P_MobjWasRemoved(ring->target) || !ring->target->player)
|
|
{
|
|
P_RemoveMobj(ring);
|
|
}
|
|
else
|
|
{
|
|
mobj_t *mo = ring->target;
|
|
player_t *player = mo->player;
|
|
|
|
// Follow player
|
|
ring->flags &= ~(MF_NOCLIPTHING);
|
|
P_MoveOrigin(ring, mo->x, mo->y, mo->z + mo->height/2);
|
|
ring->flags |= MF_NOCLIPTHING;
|
|
ring->color = mo->color;
|
|
|
|
fixed_t baseScale = mo->scale / 2;
|
|
baseScale += (mo->scale / 30) * guard_upscale(player);
|
|
P_SetScale(ring, baseScale);
|
|
|
|
// Twirl
|
|
ring->angle = ring->target->angle + (ANG15 * leveltime);
|
|
// Visuals
|
|
ring->renderflags |= RF_ADD|RF_PAPERSPRITE;
|
|
|
|
if (leveltime%2)
|
|
ring->renderflags &= ~RF_DONTDRAW;
|
|
else
|
|
ring->renderflags |= RF_DONTDRAW;
|
|
|
|
if (!K_PlayerGuard(player))
|
|
ring->renderflags |= RF_DONTDRAW;
|
|
}
|
|
}
|
|
|
|
void Obj_BlockBodyThink (mobj_t *body)
|
|
{
|
|
if (P_MobjWasRemoved(body->target) || !body->target->player)
|
|
{
|
|
P_RemoveMobj(body);
|
|
}
|
|
else
|
|
{
|
|
mobj_t *mo = body->target;
|
|
player_t *player = mo->player;
|
|
|
|
// Follow player
|
|
body->flags &= ~(MF_NOCLIPTHING);
|
|
|
|
fixed_t baseScale = mo->scale / 2;
|
|
baseScale += (mo->scale / 30) * guard_upscale(player);
|
|
P_SetScale(body, baseScale);
|
|
|
|
P_MoveOrigin(body, mo->x, mo->y, mo->z + mo->height/2);
|
|
body->flags |= MF_NOCLIPTHING;
|
|
body->color = mo->color;
|
|
|
|
// Visuals
|
|
body->renderflags |= RF_ADD;
|
|
|
|
if (leveltime%2 == 0)
|
|
body->renderflags &= ~RF_DONTDRAW;
|
|
else
|
|
body->renderflags |= RF_DONTDRAW;
|
|
|
|
if (!K_PlayerGuard(player))
|
|
body->renderflags |= RF_DONTDRAW;
|
|
}
|
|
}
|
|
|
|
void Obj_GuardBreakThink (mobj_t *fx)
|
|
{
|
|
if (leveltime%2)
|
|
fx->renderflags &= ~RF_DONTDRAW;
|
|
else
|
|
fx->renderflags |= RF_DONTDRAW;
|
|
}
|