Last 3/4s: Spindash wind

This commit is contained in:
Sally Coolatta 2020-11-08 15:32:30 -05:00
parent bffc367c36
commit 39acb46903
5 changed files with 73 additions and 9 deletions

View file

@ -9318,6 +9318,7 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
"S_WATERTRAILUNDERLAY8",
"S_SPINDASHDUST",
"S_SPINDASHWIND",
#ifdef SEENAMES
"S_NAMECHECK",
@ -10400,6 +10401,7 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
"MT_WATERTRAILUNDERLAY",
"MT_SPINDASHDUST",
"MT_SPINDASHWIND",
#ifdef SEENAMES
"MT_NAMECHECK",

View file

@ -732,6 +732,7 @@ char sprnames[NUMSPRITES + 1][5] =
"DBST", // Drift boost plume
"SDDS", // Spindash dust
"SDWN", // Spindash wind
};
char spr2names[NUMPLAYERSPRITES][5] =
@ -5029,6 +5030,7 @@ state_t states[NUMSTATES] =
{SPR_WTRL, FF_TRANS50|FF_PAPERSPRITE|15, 2, {NULL}, 0, 0, S_NULL}, // S_WATERTRAILUNDERLAY8
{SPR_SDDS, FF_ANIMATE, 9, {NULL}, 9, 1, S_NULL}, // S_SPINDASHDUST
{SPR_SDWN, FF_ANIMATE|FF_PAPERSPRITE, 18, {NULL}, 9, 2, S_NULL}, // S_SPINDASHWIND
#ifdef SEENAMES
{SPR_NULL, 0, 1, {NULL}, 0, 0, S_NULL}, // S_NAMECHECK
@ -28706,6 +28708,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_NULL // raisestate
},
{ // MT_SPINDASHWIND
-1, // doomednum
S_SPINDASHWIND, // spawnstate
1000, // spawnhealth
S_NULL, // seestate
sfx_None, // seesound
8, // reactiontime
sfx_None, // attacksound
S_NULL, // painstate
0, // painchance
sfx_None, // painsound
S_NULL, // meleestate
S_NULL, // missilestate
S_NULL, // deathstate
S_NULL, // xdeathstate
sfx_None, // deathsound
0, // speed
12*FRACUNIT, // radius
24*FRACUNIT, // height
0, // display offset
100, // mass
0, // damage
sfx_None, // activesound
MF_NOBLOCKMAP|MF_NOCLIP|MF_NOCLIPHEIGHT|MF_NOGRAVITY|MF_SCENERY|MF_DONTENCOREMAP, // flags
S_NULL // raisestate
},
// ============================================================================================================================//
#ifdef SEENAMES

View file

@ -1003,6 +1003,7 @@ typedef enum sprite
SPR_DBST, // Drift boost plume
SPR_SDDS, // Spindash dust
SPR_SDWN, // Spindash wind
SPR_FIRSTFREESLOT,
SPR_LASTFREESLOT = SPR_FIRSTFREESLOT + NUMSPRITEFREESLOTS - 1,
@ -5180,6 +5181,7 @@ typedef enum state
S_WATERTRAILUNDERLAY8,
S_SPINDASHDUST,
S_SPINDASHWIND,
#ifdef SEENAMES
S_NAMECHECK,
@ -6282,6 +6284,7 @@ typedef enum mobj_type
MT_WATERTRAILUNDERLAY,
MT_SPINDASHDUST,
MT_SPINDASHWIND,
#ifdef SEENAMES
MT_NAMECHECK,

View file

@ -6790,12 +6790,11 @@ boolean K_PlayerEBrake(player_t *player)
static void K_KartSpindashDust(mobj_t *parent)
{
fixed_t rad = FixedHypot(parent->radius, parent->radius);
fixed_t rad = FixedDiv(FixedHypot(parent->radius, parent->radius), parent->scale);
INT32 i;
for (i = 0; i < 2; i++)
{
fixed_t hmomentum = P_RandomRange(6, 12) * parent->scale;
fixed_t vmomentum = P_RandomRange(2, 6) * parent->scale;
@ -6822,10 +6821,34 @@ static void K_KartSpindashDust(mobj_t *parent)
}
}
static void K_KartSpindashWind(mobj_t *parent)
{
mobj_t *wind = P_SpawnMobjFromMobj(parent,
P_RandomRange(-36,36) * FRACUNIT,
P_RandomRange(-36,36) * FRACUNIT,
FixedDiv(parent->height / 2, parent->scale) + (P_RandomRange(-20,20) * FRACUNIT),
MT_SPINDASHWIND
);
P_SetTarget(&wind->target, parent);
if (parent->momx || parent->momy)
wind->angle = R_PointToAngle2(0, 0, parent->momx, parent->momy);
else
wind->angle = parent->player->drawangle;
wind->momx = 3 * parent->momx / 4;
wind->momy = 3 * parent->momy / 4;
wind->momz = 3 * parent->momz / 4;
K_MatchGenericExtraFlags(wind, parent);
}
static void K_KartSpindash(player_t *player)
{
const INT16 MAXCHARGETIME = K_GetSpindashChargeTime(player);
ticcmd_t *cmd = &player->cmd;
boolean spawnWind = (leveltime % 2 == 0);
if (player->kartstuff[k_spindash] > 0 && (cmd->buttons & (BT_DRIFT|BT_BRAKE)) != (BT_DRIFT|BT_BRAKE))
{
@ -6851,6 +6874,12 @@ static void K_KartSpindash(player_t *player)
S_StartSound(player->mo, sfx_s23c);
}
if ((player->kartstuff[k_spindashboost] > 0) && (spawnWind == true))
{
K_KartSpindashWind(player->mo);
}
if (player->kartstuff[k_spindashboost] > (TICRATE/2))
{
K_KartSpindashDust(player->mo);
@ -6878,6 +6907,11 @@ static void K_KartSpindash(player_t *player)
spawnOldEffect = false;
}
if (chargetime <= (MAXCHARGETIME / 4) && spawnWind == true)
{
K_KartSpindashWind(player->mo);
}
if (chargetime > 0)
{
UINT16 soundcharge = 0;
@ -6896,13 +6930,6 @@ static void K_KartSpindash(player_t *player)
{
P_DamageMobj(player->mo, NULL, NULL, 1, DMG_NORMAL);
}
else
{
if (player->kartstuff[k_spindash] % 4 == 0)
{
K_FlameDashLeftoverSmoke(player->mo);
}
}
}
}
else

View file

@ -5623,6 +5623,9 @@ static void P_MobjSceneryThink(mobj_t *mobj)
if (mobj->tics > 0)
mobj->drawflags ^= MFD_DONTDRAW;
break;
case MT_SPINDASHWIND:
mobj->drawflags ^= MFD_DONTDRAW;
break;
case MT_VWREF:
case MT_VWREB:
{