mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-02-23 14:01:14 +00:00
Shield VFX
This commit is contained in:
parent
a3d954e4ef
commit
6f02923d89
5 changed files with 42 additions and 19 deletions
|
|
@ -789,8 +789,8 @@ boolean K_BubbleShieldCollide(mobj_t *t1, mobj_t *t2)
|
|||
|
||||
boolean K_InstaWhipCollide(mobj_t *shield, mobj_t *victim)
|
||||
{
|
||||
const int victimHitlag = 10;
|
||||
const int attackerHitlag = 4;
|
||||
int victimHitlag = 10;
|
||||
int attackerHitlag = 4;
|
||||
|
||||
// EV1 is used to indicate that we should no longer hit monitors.
|
||||
// EV2 indicates we should no longer hit anything.
|
||||
|
|
@ -810,8 +810,12 @@ boolean K_InstaWhipCollide(mobj_t *shield, mobj_t *victim)
|
|||
|
||||
if (victim != attacker && !P_PlayerInPain(victimPlayer) && victimPlayer->flashing == 0)
|
||||
{
|
||||
// BLOW THAT SHIT THE FUCK UP with guard
|
||||
if (K_PlayerEBrake(victimPlayer) && victimPlayer->spheres > 0)
|
||||
//if (true)
|
||||
{
|
||||
victimHitlag = 2*victimHitlag;
|
||||
|
||||
if (P_PlayerInPain(attackerPlayer))
|
||||
return false; // never punish shield more than once
|
||||
|
||||
|
|
@ -825,22 +829,31 @@ boolean K_InstaWhipCollide(mobj_t *shield, mobj_t *victim)
|
|||
shield->flags |= MF_NOCLIPTHING;
|
||||
|
||||
attacker->renderflags &= ~RF_DONTDRAW;
|
||||
attackerPlayer->spindashboost = 0;
|
||||
attackerPlayer->sneakertimer = 0;
|
||||
attackerPlayer->instaShieldCooldown = TICRATE*2;
|
||||
attackerPlayer->flashing = 0;
|
||||
|
||||
mobj_t *broly = Obj_SpawnBrolyKi(victim, victimHitlag);
|
||||
broly->extravalue2 = 16*mapobjectscale;
|
||||
|
||||
P_PlayVictorySound(victim);
|
||||
|
||||
P_DamageMobj(attacker, victim, victim, 1, DMG_STING);
|
||||
|
||||
S_StartSound(victim, sfx_mbv92);
|
||||
K_AddHitLag(attacker, 2*victimHitlag, true);
|
||||
K_AddHitLag(attacker, victimHitlag, true);
|
||||
K_AddHitLag(victim, attackerHitlag, false);
|
||||
attacker->hitlag = std::min(attacker->hitlag, 2*victimHitlag);
|
||||
shield->hitlag = attacker->hitlag;
|
||||
|
||||
K_DoPowerClash(shield, victim);
|
||||
|
||||
shield->extravalue2 = 1;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// if you're here, you're getting hit
|
||||
// Damage is a bit hacky, we want only a small loss-of-control
|
||||
// while still behaving as if it's a "real" hit.
|
||||
P_PlayRinglossSound(victim);
|
||||
|
|
@ -967,12 +980,13 @@ boolean K_PvPTouchDamage(mobj_t *t1, mobj_t *t2)
|
|||
|| (t1->player->invincibilitytimer > 0)
|
||||
|| (t1->player->flamedash > 0 && t1->player->itemtype == KITEM_FLAMESHIELD)
|
||||
|| (t1->player->curshield == KSHIELD_TOP && !K_IsHoldingDownTop(t1->player))
|
||||
|| (t1->player->bubbleblowup > 0);
|
||||
|| (t1->player->bubbleblowup > 0)
|
||||
|| (t1->player->spheres > 0 && K_PlayerEBrake(t1->player));
|
||||
};
|
||||
|
||||
if (canClash(t1, t2) && canClash(t2, t1))
|
||||
{
|
||||
K_DoPowerClash(t1->player, t2->player);
|
||||
K_DoPowerClash(t1, t2);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
|||
22
src/k_kart.c
22
src/k_kart.c
|
|
@ -3606,25 +3606,27 @@ void K_DoInstashield(player_t *player)
|
|||
P_SetTarget(&layerb->target, player->mo);
|
||||
}
|
||||
|
||||
void K_DoPowerClash(player_t *t1, player_t *t2) {
|
||||
void K_DoPowerClash(mobj_t *t1, mobj_t *t2) {
|
||||
mobj_t *clash;
|
||||
|
||||
// short-circuit instashield for vfx visibility
|
||||
t1->instashield = 1;
|
||||
t2->instashield = 1;
|
||||
if (t1->player)
|
||||
t1->player->instashield = 1;
|
||||
if (t2->player)
|
||||
t2->player->instashield = 1;
|
||||
|
||||
S_StartSound(t1->mo, sfx_parry);
|
||||
K_AddHitLag(t1->mo, 6, false);
|
||||
K_AddHitLag(t2->mo, 6, false);
|
||||
S_StartSound(t1, sfx_parry);
|
||||
K_AddHitLag(t1, 6, false);
|
||||
K_AddHitLag(t2, 6, false);
|
||||
|
||||
clash = P_SpawnMobj((t1->mo->x/2) + (t2->mo->x/2), (t1->mo->y/2) + (t2->mo->y/2), (t1->mo->z/2) + (t2->mo->z/2), MT_POWERCLASH);
|
||||
clash = P_SpawnMobj((t1->x/2) + (t2->x/2), (t1->y/2) + (t2->y/2), (t1->z/2) + (t2->z/2), MT_POWERCLASH);
|
||||
|
||||
// needs to handle mixed scale collisions (t1 grow t2 invinc)...
|
||||
clash->z = clash->z + (t1->mo->height/4) + (t2->mo->height/4);
|
||||
clash->angle = R_PointToAngle2(clash->x, clash->y, t1->mo->x, t1->mo->y) + ANGLE_90;
|
||||
clash->z = clash->z + (t1->height/4) + (t2->height/4);
|
||||
clash->angle = R_PointToAngle2(clash->x, clash->y, t1->x, t1->y) + ANGLE_90;
|
||||
|
||||
// Shrink over time (accidental behavior that looked good)
|
||||
clash->destscale = (t1->mo->scale/2) + (t2->mo->scale/2);
|
||||
clash->destscale = (t1->scale) + (t2->scale);
|
||||
P_SetScale(clash, 3*clash->destscale/2);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -90,7 +90,7 @@ void K_AddHitLag(mobj_t *mo, INT32 tics, boolean fromDamage);
|
|||
void K_SetHitLagForObjects(mobj_t *mo1, mobj_t *mo2, INT32 tics, boolean fromDamage);
|
||||
void K_AwardPlayerRings(player_t *player, INT32 rings, boolean overload);
|
||||
void K_DoInstashield(player_t *player);
|
||||
void K_DoPowerClash(player_t *t1, player_t *t2);
|
||||
void K_DoPowerClash(mobj_t *t1, mobj_t *t2);
|
||||
void K_BattleAwardHit(player_t *player, player_t *victim, mobj_t *inflictor, UINT8 bumpersRemoved);
|
||||
void K_RemoveGrowShrink(player_t *player);
|
||||
boolean K_IsBigger(mobj_t *compare, mobj_t *other);
|
||||
|
|
|
|||
|
|
@ -2188,6 +2188,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
|||
if (!force)
|
||||
{
|
||||
boolean invincible = true;
|
||||
boolean clash = false;
|
||||
sfxenum_t sfx = sfx_None;
|
||||
|
||||
if (!(gametyperules & GTR_BUMPERS))
|
||||
|
|
@ -2211,7 +2212,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
|||
else if (player->spheres > 0 && K_PlayerEBrake(player))
|
||||
{
|
||||
sfx = sfx_s3k3a;
|
||||
player->spheres = max(player->spheres - 10, 0);
|
||||
clash = true;
|
||||
}
|
||||
else if (player->hyudorotimer > 0)
|
||||
;
|
||||
|
|
@ -2254,6 +2255,12 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
|||
S_StartSound(target, sfx);
|
||||
}
|
||||
|
||||
if (clash)
|
||||
{
|
||||
player->spheres = max(player->spheres - 10, 0);
|
||||
K_DoPowerClash(target, inflictor);
|
||||
}
|
||||
|
||||
// Full invulnerability
|
||||
K_DoInstashield(player);
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@
|
|||
#include "k_kart.h" // HITLAGJITTERS
|
||||
#include "r_fps.h"
|
||||
|
||||
#define MINZ (FRACUNIT*16)
|
||||
#define MINZ (FRACUNIT*4)
|
||||
#define BASEYCENTER (BASEVIDHEIGHT/2)
|
||||
|
||||
typedef struct
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue