mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Hitlag occurs on registered damage instead of being before damage calls
This commit is contained in:
parent
9434dd3ae3
commit
8b5a78114e
4 changed files with 27 additions and 68 deletions
|
|
@ -45,7 +45,6 @@ boolean K_OrbinautJawzCollide(mobj_t *t1, mobj_t *t2)
|
|||
else
|
||||
{
|
||||
// Player Damage
|
||||
K_SetHitLagForObjects(t1, t2, 10, false);
|
||||
P_DamageMobj(t2, t1, t1->target, 1, DMG_WIPEOUT);
|
||||
K_KartBouncing(t2, t1, false, false);
|
||||
S_StartSound(t2, sfx_s3k7b);
|
||||
|
|
@ -59,7 +58,6 @@ boolean K_OrbinautJawzCollide(mobj_t *t1, mobj_t *t2)
|
|||
|| t2->type == MT_BALLHOG)
|
||||
{
|
||||
// Other Item Damage
|
||||
K_SetHitLagForObjects(t1, t2, 10, false);
|
||||
S_StartSound(t2, t2->info->deathsound);
|
||||
P_KillMobj(t2, t1, t1, DMG_NORMAL);
|
||||
|
||||
|
|
@ -72,7 +70,6 @@ boolean K_OrbinautJawzCollide(mobj_t *t1, mobj_t *t2)
|
|||
}
|
||||
else if (t2->type == MT_SSMINE_SHIELD || t2->type == MT_SSMINE)
|
||||
{
|
||||
K_SetHitLagForObjects(t1, t2, 10, false);
|
||||
damageitem = true;
|
||||
// Bomb death
|
||||
P_KillMobj(t2, t1, t1, DMG_NORMAL);
|
||||
|
|
@ -84,7 +81,6 @@ boolean K_OrbinautJawzCollide(mobj_t *t1, mobj_t *t2)
|
|||
}
|
||||
else if (t2->flags & MF_SHOOTABLE)
|
||||
{
|
||||
K_SetHitLagForObjects(t1, t2, 10, false);
|
||||
// Shootable damage
|
||||
P_DamageMobj(t2, t1, t1->target, 1, DMG_NORMAL);
|
||||
damageitem = true;
|
||||
|
|
@ -141,18 +137,6 @@ boolean K_BananaBallhogCollide(mobj_t *t1, mobj_t *t2)
|
|||
}
|
||||
else
|
||||
{
|
||||
// Player Damage
|
||||
if (t1->type == MT_BALLHOG || (t1->type == MT_BANANA && t1->health > 1))
|
||||
{
|
||||
// Long hitlag
|
||||
K_SetHitLagForObjects(t1, t2, 10, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Short hitlag
|
||||
K_SetHitLagForObjects(t1, t2, 2, true);
|
||||
}
|
||||
|
||||
P_DamageMobj(t2, t1, t1->target, 1, DMG_NORMAL);
|
||||
}
|
||||
|
||||
|
|
@ -164,8 +148,6 @@ boolean K_BananaBallhogCollide(mobj_t *t1, mobj_t *t2)
|
|||
|| t2->type == MT_BALLHOG)
|
||||
{
|
||||
// Other Item Damage
|
||||
K_SetHitLagForObjects(t1, t2, 10, false);
|
||||
|
||||
S_StartSound(t2, t2->info->deathsound);
|
||||
P_KillMobj(t2, t1, t1, DMG_NORMAL);
|
||||
|
||||
|
|
@ -179,7 +161,6 @@ boolean K_BananaBallhogCollide(mobj_t *t1, mobj_t *t2)
|
|||
else if (t2->flags & MF_SHOOTABLE)
|
||||
{
|
||||
// Shootable damage
|
||||
K_SetHitLagForObjects(t1, t2, 10, false);
|
||||
P_DamageMobj(t2, t1, t1->target, 1, DMG_NORMAL);
|
||||
damageitem = true;
|
||||
}
|
||||
|
|
@ -187,8 +168,6 @@ boolean K_BananaBallhogCollide(mobj_t *t1, mobj_t *t2)
|
|||
if (damageitem)
|
||||
{
|
||||
// This Item Damage
|
||||
K_SetHitLagForObjects(t1, t2, 10, false);
|
||||
|
||||
S_StartSound(t1, t1->info->deathsound);
|
||||
P_KillMobj(t1, t2, t2, DMG_NORMAL);
|
||||
|
||||
|
|
@ -290,7 +269,6 @@ boolean K_MineCollide(mobj_t *t1, mobj_t *t2)
|
|||
if ((t1->state >= &states[S_SSMINE1] && t1->state <= &states[S_SSMINE4])
|
||||
|| (t1->state >= &states[S_SSMINE_DEPLOY8] && t1->state <= &states[S_SSMINE_DEPLOY13]))
|
||||
{
|
||||
K_SetHitLagForObjects(t1, t2, 10, false);
|
||||
P_KillMobj(t1, t2, t2, DMG_NORMAL);
|
||||
}
|
||||
else
|
||||
|
|
@ -302,8 +280,6 @@ boolean K_MineCollide(mobj_t *t1, mobj_t *t2)
|
|||
else if (t2->type == MT_ORBINAUT || t2->type == MT_JAWZ || t2->type == MT_JAWZ_DUD
|
||||
|| t2->type == MT_ORBINAUT_SHIELD || t2->type == MT_JAWZ_SHIELD)
|
||||
{
|
||||
K_SetHitLagForObjects(t1, t2, 10, false);
|
||||
|
||||
// Bomb death
|
||||
P_KillMobj(t1, t2, t2, DMG_NORMAL);
|
||||
|
||||
|
|
@ -316,7 +292,6 @@ boolean K_MineCollide(mobj_t *t1, mobj_t *t2)
|
|||
}
|
||||
else if (t2->flags & MF_SHOOTABLE)
|
||||
{
|
||||
K_SetHitLagForObjects(t1, t2, 10, false);
|
||||
// Bomb death
|
||||
P_KillMobj(t1, t2, t2, DMG_NORMAL);
|
||||
// Shootable damage
|
||||
|
|
@ -335,19 +310,16 @@ boolean K_MineExplosionCollide(mobj_t *t1, mobj_t *t2)
|
|||
|
||||
if (t1->state == &states[S_MINEEXPLOSION1])
|
||||
{
|
||||
K_SetHitLagForObjects(t1, t2, 10, false);
|
||||
P_DamageMobj(t2, t1, t1->target, 1, DMG_EXPLODE);
|
||||
}
|
||||
else
|
||||
{
|
||||
K_SetHitLagForObjects(t1, t2, 2, true);
|
||||
P_DamageMobj(t2, t1, t1->target, 1, DMG_NORMAL);
|
||||
}
|
||||
}
|
||||
else if (t2->flags & MF_SHOOTABLE)
|
||||
{
|
||||
// Shootable damage
|
||||
K_SetHitLagForObjects(t1, t2, 10, false);
|
||||
P_DamageMobj(t2, t1, t1->target, 1, DMG_NORMAL);
|
||||
}
|
||||
|
||||
|
|
@ -364,8 +336,6 @@ boolean K_KitchenSinkCollide(mobj_t *t1, mobj_t *t2)
|
|||
if (t2->player->powers[pw_flashing] > 0 && t2->hitlag == 0)
|
||||
return true;
|
||||
|
||||
K_SetHitLagForObjects(t1, t2, 10, false);
|
||||
|
||||
S_StartSound(NULL, sfx_bsnipe); // let all players hear it.
|
||||
|
||||
HU_SetCEchoFlags(0);
|
||||
|
|
@ -378,8 +348,6 @@ boolean K_KitchenSinkCollide(mobj_t *t1, mobj_t *t2)
|
|||
}
|
||||
else if (t2->flags & MF_SHOOTABLE)
|
||||
{
|
||||
K_SetHitLagForObjects(t1, t2, 10, false);
|
||||
|
||||
// Shootable damage
|
||||
P_KillMobj(t2, t2, t1->target, DMG_NORMAL);
|
||||
// This item damage
|
||||
|
|
|
|||
24
src/k_kart.c
24
src/k_kart.c
|
|
@ -2384,8 +2384,8 @@ void K_SetHitLagForObjects(mobj_t *mo1, mobj_t *mo2, INT32 tics, boolean fixed)
|
|||
const fixed_t ticaddfactor = mapobjectscale * 8;
|
||||
const INT32 mintics = tics;
|
||||
|
||||
const fixed_t mo1speed = P_AproxDistance(P_AproxDistance(mo1->momx, mo1->momy), mo1->momz);
|
||||
const fixed_t mo2speed = P_AproxDistance(P_AproxDistance(mo2->momx, mo2->momy), mo2->momz);
|
||||
const fixed_t mo1speed = FixedHypot(FixedHypot(mo1->momx, mo1->momy), mo1->momz);
|
||||
const fixed_t mo2speed = FixedHypot(FixedHypot(mo2->momx, mo2->momy), mo2->momz);
|
||||
const fixed_t speeddiff = mo2speed - mo1speed;
|
||||
|
||||
const fixed_t scalediff = mo2->scale - mo1->scale;
|
||||
|
|
@ -2423,26 +2423,6 @@ void K_SetHitLagForObjects(mobj_t *mo1, mobj_t *mo2, INT32 tics, boolean fixed)
|
|||
}
|
||||
}
|
||||
|
||||
if (mo1->player && !mo2->player)
|
||||
{
|
||||
if (mo1->player->powers[pw_flashing] > 0
|
||||
|| mo1->player->kartstuff[k_invincibilitytimer] > 0
|
||||
|| mo1->player->kartstuff[k_growshrinktimer] > 0)
|
||||
{
|
||||
tics1 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (mo2->player && !mo1->player)
|
||||
{
|
||||
if (mo2->player->powers[pw_flashing] > 0
|
||||
|| mo2->player->kartstuff[k_invincibilitytimer] > 0
|
||||
|| mo2->player->kartstuff[k_growshrinktimer] > 0)
|
||||
{
|
||||
tics2 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
//CONS_Printf("tics1: %d, tics2: %d\n", tics1, tics2);
|
||||
|
||||
mo1->hitlag += tics1;
|
||||
|
|
|
|||
|
|
@ -1075,6 +1075,8 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget
|
|||
if (LUAh_MobjDeath(target, inflictor, source, damagetype) || P_MobjWasRemoved(target))
|
||||
return;
|
||||
|
||||
//K_SetHitLagForObjects(target, inflictor, 15, false);
|
||||
|
||||
// SRB2kart
|
||||
// I wish I knew a better way to do this
|
||||
if (target->target && target->target->player && target->target->player->mo)
|
||||
|
|
@ -1646,8 +1648,10 @@ static boolean P_PlayerHitsPlayer(mobj_t *target, mobj_t *inflictor, mobj_t *sou
|
|||
return true;
|
||||
}
|
||||
|
||||
static boolean P_KillPlayer(player_t *player, UINT8 type)
|
||||
static boolean P_KillPlayer(player_t *player, mobj_t *inflictor, mobj_t *source, UINT8 type)
|
||||
{
|
||||
(void)source;
|
||||
|
||||
if (player->exiting)
|
||||
{
|
||||
player->mo->destscale = 1;
|
||||
|
|
@ -1668,6 +1672,8 @@ static boolean P_KillPlayer(player_t *player, UINT8 type)
|
|||
break;
|
||||
}
|
||||
|
||||
K_SetHitLagForObjects(player->mo, inflictor, 15, false);
|
||||
|
||||
player->pflags &= ~PF_SLIDING;
|
||||
player->powers[pw_carry] = CR_NONE;
|
||||
|
||||
|
|
@ -1753,6 +1759,9 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
|||
player_t *player;
|
||||
boolean force = false;
|
||||
|
||||
INT32 laglength = 2;
|
||||
boolean lagfixed = true;
|
||||
|
||||
if (objectplacing)
|
||||
return false;
|
||||
|
||||
|
|
@ -1760,13 +1769,16 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
|||
return false;
|
||||
|
||||
// Spectator handling
|
||||
if (multiplayer)
|
||||
{
|
||||
if (damagetype != DMG_SPECTATOR && target->player && target->player->spectator)
|
||||
return false;
|
||||
if (damagetype != DMG_SPECTATOR && target->player && target->player->spectator)
|
||||
return false;
|
||||
|
||||
if (source && source->player && source->player->spectator)
|
||||
return false;
|
||||
if (source && source->player && source->player->spectator)
|
||||
return false;
|
||||
|
||||
if ((damagetype & DMG_TYPEMASK) != DMG_NORMAL && (damagetype & DMG_TYPEMASK) != DMG_STING)
|
||||
{
|
||||
laglength = 10;
|
||||
lagfixed = false;
|
||||
}
|
||||
|
||||
// Everything above here can't be forced.
|
||||
|
|
@ -1830,7 +1842,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
|||
// Instant-Death
|
||||
if ((damagetype & DMG_DEATHMASK))
|
||||
{
|
||||
if (!P_KillPlayer(player, damagetype))
|
||||
if (!P_KillPlayer(player, inflictor, source, damagetype))
|
||||
return false;
|
||||
}
|
||||
else if (LUAh_MobjDamage(target, inflictor, source, damage, damagetype))
|
||||
|
|
@ -1941,6 +1953,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
|||
}
|
||||
|
||||
player->kartstuff[k_instashield] = 15;
|
||||
K_SetHitLagForObjects(target, inflictor, laglength, lagfixed);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
@ -1962,12 +1975,16 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
|||
if (source && source->player && target)
|
||||
G_GhostAddHit((INT32) (source->player - players), target);
|
||||
|
||||
K_SetHitLagForObjects(target, inflictor, laglength, lagfixed);
|
||||
|
||||
if (target->health <= 0)
|
||||
{
|
||||
P_KillMobj(target, inflictor, source, damagetype);
|
||||
return true;
|
||||
}
|
||||
|
||||
//K_SetHitLagForObjects(target, inflictor, laglength, lagfixed);
|
||||
|
||||
if (player)
|
||||
P_ResetPlayer(target->player);
|
||||
else
|
||||
|
|
|
|||
|
|
@ -1218,34 +1218,28 @@ static boolean PIT_CheckThing(mobj_t *thing)
|
|||
{
|
||||
if (tmthing->scale > thing->scale + (mapobjectscale/8)) // SRB2kart - Handle squishes first!
|
||||
{
|
||||
K_SetHitLagForObjects(tmthing, thing, 10, false);
|
||||
P_DamageMobj(thing, tmthing, tmthing, 1, DMG_SQUISH);
|
||||
}
|
||||
else if (thing->scale > tmthing->scale + (mapobjectscale/8))
|
||||
{
|
||||
K_SetHitLagForObjects(thing, tmthing, 10, false);
|
||||
P_DamageMobj(tmthing, thing, thing, 1, DMG_SQUISH);
|
||||
}
|
||||
else if (tmthing->player->kartstuff[k_invincibilitytimer] && !thing->player->kartstuff[k_invincibilitytimer]) // SRB2kart - Then invincibility!
|
||||
{
|
||||
K_SetHitLagForObjects(tmthing, thing, 10, false);
|
||||
P_DamageMobj(thing, tmthing, tmthing, 1, DMG_WIPEOUT);
|
||||
}
|
||||
else if (thing->player->kartstuff[k_invincibilitytimer] && !tmthing->player->kartstuff[k_invincibilitytimer])
|
||||
{
|
||||
K_SetHitLagForObjects(thing, tmthing, 10, false);
|
||||
P_DamageMobj(tmthing, thing, thing, 1, DMG_WIPEOUT);
|
||||
}
|
||||
else if ((tmthing->player->kartstuff[k_flamedash] && tmthing->player->kartstuff[k_itemtype] == KITEM_FLAMESHIELD)
|
||||
&& !(thing->player->kartstuff[k_flamedash] && thing->player->kartstuff[k_itemtype] == KITEM_FLAMESHIELD)) // SRB2kart - Then flame shield!
|
||||
{
|
||||
K_SetHitLagForObjects(tmthing, thing, 10, false);
|
||||
P_DamageMobj(thing, tmthing, tmthing, 1, DMG_WIPEOUT);
|
||||
}
|
||||
else if ((thing->player->kartstuff[k_flamedash] && thing->player->kartstuff[k_itemtype] == KITEM_FLAMESHIELD)
|
||||
&& !(tmthing->player->kartstuff[k_flamedash] && tmthing->player->kartstuff[k_itemtype] == KITEM_FLAMESHIELD))
|
||||
{
|
||||
K_SetHitLagForObjects(thing, tmthing, 10, false);
|
||||
P_DamageMobj(tmthing, thing, thing, 1, DMG_WIPEOUT);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue