mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Ironman: move transform VFX into function for reuse
This commit is contained in:
parent
8d2d6bfc78
commit
770378eea0
4 changed files with 54 additions and 71 deletions
41
src/k_kart.c
41
src/k_kart.c
|
|
@ -2727,6 +2727,47 @@ void K_SpawnBumpEffect(mobj_t *mo)
|
|||
S_StartSound(mo, sfx_s3k49);
|
||||
}
|
||||
|
||||
void K_SpawnMagicianParticles(mobj_t *mo, int spread)
|
||||
{
|
||||
INT32 i;
|
||||
mobj_t *target = mo->target;
|
||||
|
||||
if (P_MobjWasRemoved(target))
|
||||
target = mo;
|
||||
|
||||
for (i = 0; i < 16; i++)
|
||||
{
|
||||
fixed_t hmomentum = P_RandomRange(PR_DECORATION, spread * -1, spread) * mo->scale;
|
||||
fixed_t vmomentum = P_RandomRange(PR_DECORATION, spread * -1, spread) * mo->scale;
|
||||
UINT16 color = P_RandomKey(PR_DECORATION, numskincolors);
|
||||
|
||||
fixed_t ang = FixedAngle(P_RandomRange(PR_DECORATION, 0, 359)*FRACUNIT);
|
||||
SINT8 flip = 1;
|
||||
|
||||
mobj_t *dust;
|
||||
|
||||
if (i & 1)
|
||||
ang -= ANGLE_90;
|
||||
else
|
||||
ang += ANGLE_90;
|
||||
|
||||
dust = P_SpawnMobjFromMobj(mo,
|
||||
FixedMul(mo->radius, FINECOSINE(ang >> ANGLETOFINESHIFT)),
|
||||
FixedMul(mo->radius, FINESINE(ang >> ANGLETOFINESHIFT)),
|
||||
target->height, (i%3 == 0) ? MT_SIGNSPARKLE : MT_SPINDASHDUST
|
||||
);
|
||||
flip = P_MobjFlip(dust);
|
||||
|
||||
dust->momx = target->momx + FixedMul(hmomentum, FINECOSINE(ang >> ANGLETOFINESHIFT));
|
||||
dust->momy = target->momy + FixedMul(hmomentum, FINESINE(ang >> ANGLETOFINESHIFT));
|
||||
dust->momz = vmomentum * flip;
|
||||
dust->scale = dust->scale*4;
|
||||
dust->frame |= FF_SUBTRACT|FF_TRANS90;
|
||||
dust->color = color;
|
||||
dust->colorized = true;
|
||||
}
|
||||
}
|
||||
|
||||
static SINT8 K_GlanceAtPlayers(player_t *glancePlayer)
|
||||
{
|
||||
const fixed_t maxdistance = FixedMul(1280 * mapobjectscale, K_GetKartGameSpeedScalar(gamespeed));
|
||||
|
|
|
|||
|
|
@ -110,6 +110,7 @@ void K_SpawnBoostTrail(player_t *player);
|
|||
void K_SpawnSparkleTrail(mobj_t *mo);
|
||||
void K_SpawnWipeoutTrail(mobj_t *mo);
|
||||
void K_SpawnDraftDust(mobj_t *mo);
|
||||
void K_SpawnMagicianParticles(mobj_t *mo, int spread);
|
||||
void K_DriftDustHandling(mobj_t *spawner);
|
||||
void K_Squish(mobj_t *mo);
|
||||
mobj_t *K_ThrowKartItem(player_t *player, boolean missile, mobjtype_t mapthing, INT32 defaultDir, INT32 altthrow, angle_t angleOffset);
|
||||
|
|
|
|||
38
src/p_mobj.c
38
src/p_mobj.c
|
|
@ -7613,11 +7613,13 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
{
|
||||
fixed_t destx, desty, fakeangle;
|
||||
fixed_t zoff = 0;
|
||||
INT32 j;
|
||||
|
||||
// EV1: rotation rate
|
||||
// EV2: lifetime
|
||||
// cusval: should play sounds (limit 1)
|
||||
// cusval: responsible for disappear FX (should only happen once)
|
||||
|
||||
// S_MAGICANBOX: sides, starting angle is set in the spawner (SetRandomFakePlayerSkin)
|
||||
// S_MAGICIANBOX_TOP, S_MAGICIANBOX_BOTTOM: splats with their own offset sprite sets
|
||||
|
||||
mobj->extravalue2--;
|
||||
|
||||
|
|
@ -7657,37 +7659,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
S_StartSound(mobj, sfx_kc2e);
|
||||
S_StartSound(mobj, sfx_s3k9f);
|
||||
|
||||
for (j = 0; j < 16; j++)
|
||||
{
|
||||
fixed_t hmomentum = P_RandomRange(PR_DECORATION, -5, 5) * mobj->scale;
|
||||
fixed_t vmomentum = P_RandomRange(PR_DECORATION, -5, 5) * mobj->scale;
|
||||
UINT16 color = P_RandomKey(PR_DECORATION, numskincolors);
|
||||
|
||||
fixed_t ang = FixedAngle(P_RandomRange(PR_DECORATION, 0, 359)*FRACUNIT);
|
||||
SINT8 flip = 1;
|
||||
|
||||
mobj_t *dust;
|
||||
|
||||
if (j & 1)
|
||||
ang -= ANGLE_90;
|
||||
else
|
||||
ang += ANGLE_90;
|
||||
|
||||
dust = P_SpawnMobjFromMobj(mobj,
|
||||
FixedMul(mobj->radius, FINECOSINE(ang >> ANGLETOFINESHIFT)),
|
||||
FixedMul(mobj->radius, FINESINE(ang >> ANGLETOFINESHIFT)),
|
||||
mobj->target->height, (j%3 == 0) ? MT_SIGNSPARKLE : MT_SPINDASHDUST
|
||||
);
|
||||
flip = P_MobjFlip(dust);
|
||||
|
||||
dust->momx = mobj->target->momx + FixedMul(hmomentum, FINECOSINE(ang >> ANGLETOFINESHIFT));
|
||||
dust->momy = mobj->target->momy + FixedMul(hmomentum, FINESINE(ang >> ANGLETOFINESHIFT));
|
||||
dust->momz = vmomentum * flip;
|
||||
dust->scale = dust->scale*4;
|
||||
dust->frame |= FF_SUBTRACT|FF_TRANS90;
|
||||
dust->color = color;
|
||||
dust->colorized = true;
|
||||
}
|
||||
K_SpawnMagicianParticles(mobj, 5);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
|
|
|
|||
|
|
@ -363,15 +363,14 @@ void SetRandomFakePlayerSkin(player_t* player, boolean fast)
|
|||
S_StartSound(player->mo, sfx_cdfm44);
|
||||
|
||||
mobj_t *parent = player->mo;
|
||||
fixed_t rad = FixedDiv(FixedHypot(parent->radius, parent->radius), parent->scale);
|
||||
fixed_t baseangle = P_RandomRange(PR_DECORATION, 0, 359);
|
||||
INT32 j, k;
|
||||
INT32 j;
|
||||
|
||||
for (k = 0; k < 6; k++)
|
||||
for (j = 0; j < 6; j++) // 0-3 = sides, 4 = top, 5 = bottom
|
||||
{
|
||||
mobj_t *box = P_SpawnMobjFromMobj(parent, 0, 0, 0, MT_MAGICIANBOX);
|
||||
box->target = parent;
|
||||
box->angle = FixedAngle((baseangle + k*90) * FRACUNIT);
|
||||
box->angle = FixedAngle((baseangle + j*90) * FRACUNIT);
|
||||
box->flags2 |= MF2_AMBUSH;
|
||||
if (fast)
|
||||
{
|
||||
|
|
@ -383,50 +382,20 @@ void SetRandomFakePlayerSkin(player_t* player, boolean fast)
|
|||
box->extravalue1 = 1;
|
||||
box->extravalue2 = 3*TICRATE/2;
|
||||
}
|
||||
if (k == 0)
|
||||
if (j == 0)
|
||||
box->cusval = 1; // Should play sounds when disappearing
|
||||
else
|
||||
box->cusval = 0;
|
||||
|
||||
if (k > 3)
|
||||
if (j > 3)
|
||||
{
|
||||
P_SetMobjState(box, (k == 4) ? S_MAGICIANBOX_TOP : S_MAGICIANBOX_BOTTOM);
|
||||
P_SetMobjState(box, (j == 4) ? S_MAGICIANBOX_TOP : S_MAGICIANBOX_BOTTOM);
|
||||
box->renderflags |= RF_NOSPLATBILLBOARD;
|
||||
box->angle = FixedAngle(baseangle*FRACUNIT);
|
||||
}
|
||||
}
|
||||
|
||||
for (j = 0; j < 16; j++)
|
||||
{
|
||||
fixed_t hmomentum = P_RandomRange(PR_DECORATION, -10, 10) * parent->scale;
|
||||
fixed_t vmomentum = P_RandomRange(PR_DECORATION, -10, 10) * parent->scale;
|
||||
UINT16 color = P_RandomKey(PR_DECORATION, numskincolors);
|
||||
|
||||
angle_t ang = FixedAngle(P_RandomRange(PR_DECORATION, 0, 359)*FRACUNIT);
|
||||
SINT8 flip = 1;
|
||||
|
||||
mobj_t *dust;
|
||||
|
||||
if (j & 1)
|
||||
ang -= ANGLE_90;
|
||||
else
|
||||
ang += ANGLE_90;
|
||||
|
||||
dust = P_SpawnMobjFromMobj(parent,
|
||||
FixedMul(rad, FINECOSINE(ang >> ANGLETOFINESHIFT)),
|
||||
FixedMul(rad, FINESINE(ang >> ANGLETOFINESHIFT)),
|
||||
parent->height, (j%3 == 0) ? MT_SIGNSPARKLE : MT_SPINDASHDUST
|
||||
);
|
||||
flip = P_MobjFlip(dust);
|
||||
|
||||
dust->momx = parent->momx + FixedMul(hmomentum, FINECOSINE(ang >> ANGLETOFINESHIFT));
|
||||
dust->momy = parent->momy + FixedMul(hmomentum, FINESINE(ang >> ANGLETOFINESHIFT));
|
||||
dust->momz = vmomentum * flip;
|
||||
dust->scale = dust->scale*4;
|
||||
dust->frame |= FF_SUBTRACT|FF_TRANS90;
|
||||
dust->color = color;
|
||||
dust->colorized = true;
|
||||
}
|
||||
K_SpawnMagicianParticles(player->mo, 10);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue