diff --git a/src/k_collide.c b/src/k_collide.c index f5e9f96b5..00bd9c6b3 100644 --- a/src/k_collide.c +++ b/src/k_collide.c @@ -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 diff --git a/src/k_kart.c b/src/k_kart.c index 68f8c70c6..2cdb731cd 100644 --- a/src/k_kart.c +++ b/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; diff --git a/src/p_inter.c b/src/p_inter.c index b0dd45156..cc6bb89e7 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -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 diff --git a/src/p_map.c b/src/p_map.c index 376d70f20..48e274ebb 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -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); } }