Implement Flipover damage sectors and Terrain
This commit is contained in:
parent
2871260bc3
commit
258b4ec6e0
5 changed files with 26 additions and 8 deletions
20
src/k_kart.c
20
src/k_kart.c
|
|
@ -4526,25 +4526,29 @@ void K_SpinPlayer(player_t *player, mobj_t *inflictor, mobj_t *source, INT32 typ
|
|||
|
||||
void K_FlipPlayer(player_t *player, mobj_t *inflictor, mobj_t *source)
|
||||
{
|
||||
(void)inflictor;
|
||||
(void)source;
|
||||
|
||||
K_DirectorFollowAttack(player, inflictor, source);
|
||||
|
||||
K_StatPlayerHit(player, source ? source->player : NULL);
|
||||
player->flipovertimer = 1;
|
||||
|
||||
if (inflictor)
|
||||
{
|
||||
fixed_t flipoveradd = R_PointToDist2(0, 0, player->rmomx, player->rmomy);
|
||||
|
||||
if (inflictor->player)
|
||||
S_StartSound(player->mo, sfx_flipos);
|
||||
|
||||
player->flipoverangle = K_MomentumAngle(player->mo)-ANG15;
|
||||
|
||||
if (!inflictor)
|
||||
{
|
||||
S_StartSound(inflictor, sfx_flipos);
|
||||
// This is probably a damage sector so lets not make this feel like ass.
|
||||
// Also don't softlock.
|
||||
P_InstaThrust(player->mo, player->flipoverangle, FixedMul(FLIPOVERSPEED+flipoveradd+(5*FRACUNIT), player->mo->scale));
|
||||
}
|
||||
else
|
||||
{
|
||||
P_InstaThrust(player->mo, player->flipoverangle, FixedMul(FLIPOVERSPEED+(flipoveradd/8), player->mo->scale));
|
||||
}
|
||||
|
||||
player->flipoverangle = R_PointToAngle2(0,0,player->rmomx, player->rmomy)-ANG15;
|
||||
P_InstaThrust(player->mo, player->flipoverangle, FixedMul(FLIPOVERSPEED+(flipoveradd/8), player->mo->scale));
|
||||
player->mo->momz = FixedMul(FlipOverZMomentum(gravity), player->mo->scale);
|
||||
player->pflags |= PF_JUSTFLIPPED;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -601,6 +601,13 @@ void K_ProcessTerrainEffect(mobj_t *mo)
|
|||
if (terrain->damageType > 0)
|
||||
{
|
||||
UINT8 dmg = (terrain->damageType & 0xFF);
|
||||
|
||||
if (dmg & DMG_FLIPOVER)
|
||||
{
|
||||
K_FlipPlayer(player, NULL, NULL);
|
||||
dmg &= ~DMG_FLIPOVER;
|
||||
}
|
||||
|
||||
P_DamageMobj(mo, NULL, NULL, 1, dmg);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1922,6 +1922,8 @@ static void ParseTextmapSectorParameter(UINT32 i, const char *param, const char
|
|||
sectors[i].damagetype = SD_DEATHPIT;
|
||||
if (fastcmp(val, "Instakill"))
|
||||
sectors[i].damagetype = SD_INSTAKILL;
|
||||
if ((mapnamespace == MNS_RINGRACERS && fastcmp(val, "Stumble")) || fastcmp(val, "FlipOver"))
|
||||
sectors[i].damagetype = SD_FLIPOVER;
|
||||
}
|
||||
else if (fastcmp(param, "offroad"))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -5456,6 +5456,10 @@ static void P_EvaluateDamageType(player_t *player, sector_t *sector, boolean isT
|
|||
case SD_INSTAKILL:
|
||||
P_DamageMobj(player->mo, NULL, NULL, 1, DMG_INSTAKILL);
|
||||
break;
|
||||
case SD_FLIPOVER:
|
||||
if (isTouching)
|
||||
K_FlipPlayer(player, NULL, NULL);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -441,6 +441,7 @@ typedef enum
|
|||
SD_LAVA = 2,
|
||||
SD_DEATHPIT = 3,
|
||||
SD_INSTAKILL = 4,
|
||||
SD_FLIPOVER = 5,
|
||||
} sectordamage_t;
|
||||
|
||||
typedef enum
|
||||
|
|
|
|||
Loading…
Reference in a new issue