mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-04-27 04:21:47 +00:00
Bubble Shield waves
This commit is contained in:
parent
f26deae97c
commit
02bd05ff2b
6 changed files with 83 additions and 28 deletions
|
|
@ -6662,6 +6662,12 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
||||||
"S_BUBBLESHIELDTRAP6",
|
"S_BUBBLESHIELDTRAP6",
|
||||||
"S_BUBBLESHIELDTRAP7",
|
"S_BUBBLESHIELDTRAP7",
|
||||||
"S_BUBBLESHIELDTRAP8",
|
"S_BUBBLESHIELDTRAP8",
|
||||||
|
"S_BUBBLESHIELDWAVE1",
|
||||||
|
"S_BUBBLESHIELDWAVE2",
|
||||||
|
"S_BUBBLESHIELDWAVE3",
|
||||||
|
"S_BUBBLESHIELDWAVE4",
|
||||||
|
"S_BUBBLESHIELDWAVE5",
|
||||||
|
"S_BUBBLESHIELDWAVE6",
|
||||||
|
|
||||||
// Flame Shield
|
// Flame Shield
|
||||||
"S_FLAMESHIELD1",
|
"S_FLAMESHIELD1",
|
||||||
|
|
|
||||||
38
src/info.c
38
src/info.c
|
|
@ -57,19 +57,19 @@ char sprnames[NUMSPRITES + 1][5] =
|
||||||
//SRB2kart Sprites
|
//SRB2kart Sprites
|
||||||
"SPRG","BSPR","RNDM","RPOP","SGNS","FAST","DSHR","BOST","BOSM","KFRE",
|
"SPRG","BSPR","RNDM","RPOP","SGNS","FAST","DSHR","BOST","BOSM","KFRE",
|
||||||
"KINV","KINF","WIPD","DRIF","BDRF","DUST","RSHE","FITM","BANA","ORBN",
|
"KINV","KINF","WIPD","DRIF","BDRF","DUST","RSHE","FITM","BANA","ORBN",
|
||||||
"JAWZ","SSMN","KRBM","BHOG","BHBM","SPBM","THNS","BUBS","FLMS","SINK",
|
"JAWZ","SSMN","KRBM","BHOG","BHBM","SPBM","THNS","BUBS","BWVE","FLMS",
|
||||||
"SITR","KBLN","DEZL","POKE","AUDI","DECO","DOOD","SNES","GBAS","SPRS",
|
"SINK","SITR","KBLN","DEZL","POKE","AUDI","DECO","DOOD","SNES","GBAS",
|
||||||
"BUZB","CHOM","SACO","CRAB","SHAD","BRNG","BUMP","FLEN","CLAS","PSHW",
|
"SPRS","BUZB","CHOM","SACO","CRAB","SHAD","BRNG","BUMP","FLEN","CLAS",
|
||||||
"ISTA","ISTB","ARRO","ITEM","ITMO","ITMI","ITMN","WANT","PBOM","HIT1",
|
"PSHW","ISTA","ISTB","ARRO","ITEM","ITMO","ITMI","ITMN","WANT","PBOM",
|
||||||
"HIT2","HIT3","RETI","AIDU","KSPK","LZI1","LZI2","KLIT","FZSM","FZBM",
|
"HIT1","HIT2","HIT3","RETI","AIDU","KSPK","LZI1","LZI2","KLIT","FZSM",
|
||||||
"FPRT","SBUS","MARB","FUFO","RUST","BLON","VAPE","HTZA","HTZB","SGVA",
|
"FZBM","FPRT","SBUS","MARB","FUFO","RUST","BLON","VAPE","HTZA","HTZB",
|
||||||
"SGVB","SGVC","PGTR","PGF1","PGF2","PGF3","PGBH","DPLR","SPTL","ENM1",
|
"SGVA","SGVB","SGVC","PGTR","PGF1","PGF2","PGF3","PGBH","DPLR","SPTL",
|
||||||
"GARU","MARR","REAP","JITB","CDMO","CDBU","PINE","PPLR","DPPT","AATR",
|
"ENM1","GARU","MARR","REAP","JITB","CDMO","CDBU","PINE","PPLR","DPPT",
|
||||||
"COCO","BDST","FROG","CBRA","HOLE","BBRA","EGFG","SMKP","MTYM","THWP",
|
"AATR","COCO","BDST","FROG","CBRA","HOLE","BBRA","EGFG","SMKP","MTYM",
|
||||||
"SNOB","ICEB","CNDL","DOCH","DUCK","GTRE","CHES","CHIM","DRGN","LZMN",
|
"THWP","SNOB","ICEB","CNDL","DOCH","DUCK","GTRE","CHES","CHIM","DRGN",
|
||||||
"PGSS","ZTCH","MKMA","MKMP","RTCH","BOWL","BOWH","BRRL","BRRR","HRSE",
|
"LZMN","PGSS","ZTCH","MKMA","MKMP","RTCH","BOWL","BOWH","BRRL","BRRR",
|
||||||
"TOAH","BFRT","OFRT","RFRT","PFRT","ASPK","HBST","HBSO","HBSF","WBLZ",
|
"HRSE","TOAH","BFRT","OFRT","RFRT","PFRT","ASPK","HBST","HBSO","HBSF",
|
||||||
"WBLN","FWRK","MXCL","RGSP","DRAF","XMS4","XMS5","VIEW"
|
"WBLZ","WBLN","FWRK","MXCL","RGSP","DRAF","XMS4","XMS5","VIEW"
|
||||||
};
|
};
|
||||||
|
|
||||||
// Doesn't work with g++, needs actionf_p1 (don't modify this comment)
|
// Doesn't work with g++, needs actionf_p1 (don't modify this comment)
|
||||||
|
|
@ -2877,6 +2877,12 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_BUBS, FF_FULLBRIGHT|12, 2, {NULL}, 0, 0, S_BUBBLESHIELDTRAP7}, // S_BUBBLESHIELDTRAP6
|
{SPR_BUBS, FF_FULLBRIGHT|12, 2, {NULL}, 0, 0, S_BUBBLESHIELDTRAP7}, // S_BUBBLESHIELDTRAP6
|
||||||
{SPR_BUBS, FF_FULLBRIGHT|11, 2, {NULL}, 0, 0, S_BUBBLESHIELDTRAP8}, // S_BUBBLESHIELDTRAP7
|
{SPR_BUBS, FF_FULLBRIGHT|11, 2, {NULL}, 0, 0, S_BUBBLESHIELDTRAP8}, // S_BUBBLESHIELDTRAP7
|
||||||
{SPR_BUBS, FF_FULLBRIGHT|12, 2, {NULL}, 0, 0, S_BUBBLESHIELDTRAP1}, // S_BUBBLESHIELDTRAP8
|
{SPR_BUBS, FF_FULLBRIGHT|12, 2, {NULL}, 0, 0, S_BUBBLESHIELDTRAP1}, // S_BUBBLESHIELDTRAP8
|
||||||
|
{SPR_BWVE, FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_BUBBLESHIELDWAVE2}, // S_BUBBLESHIELDWAVE1
|
||||||
|
{SPR_BWVE, FF_FULLBRIGHT|1, 1, {NULL}, 0, 0, S_BUBBLESHIELDWAVE3}, // S_BUBBLESHIELDWAVE2
|
||||||
|
{SPR_BWVE, FF_FULLBRIGHT|2, 1, {NULL}, 0, 0, S_BUBBLESHIELDWAVE4}, // S_BUBBLESHIELDWAVE3
|
||||||
|
{SPR_BWVE, FF_FULLBRIGHT|3, 1, {NULL}, 0, 0, S_BUBBLESHIELDWAVE5}, // S_BUBBLESHIELDWAVE4
|
||||||
|
{SPR_BWVE, FF_FULLBRIGHT|4, 1, {NULL}, 0, 0, S_BUBBLESHIELDWAVE6}, // S_BUBBLESHIELDWAVE5
|
||||||
|
{SPR_BWVE, FF_FULLBRIGHT|5, 1, {NULL}, 0, 0, S_NULL}, // S_BUBBLESHIELDWAVE6
|
||||||
|
|
||||||
{SPR_FLMS, FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_FLAMESHIELD2}, // S_FLAMESHIELD1
|
{SPR_FLMS, FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_FLAMESHIELD2}, // S_FLAMESHIELD1
|
||||||
{SPR_FLMS, FF_FULLBRIGHT|9, 2, {NULL}, 0, 0, S_FLAMESHIELD3}, // S_FLAMESHIELD2
|
{SPR_FLMS, FF_FULLBRIGHT|9, 2, {NULL}, 0, 0, S_FLAMESHIELD3}, // S_FLAMESHIELD2
|
||||||
|
|
@ -15973,7 +15979,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
S_NULL, // xdeathstate
|
S_NULL, // xdeathstate
|
||||||
sfx_None, // deathsound
|
sfx_None, // deathsound
|
||||||
8, // speed
|
8, // speed
|
||||||
20*FRACUNIT, // radius
|
28*FRACUNIT, // radius
|
||||||
56*FRACUNIT, // height
|
56*FRACUNIT, // height
|
||||||
1, // display offset
|
1, // display offset
|
||||||
16, // mass
|
16, // mass
|
||||||
|
|
@ -16000,7 +16006,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
S_NULL, // xdeathstate
|
S_NULL, // xdeathstate
|
||||||
sfx_None, // deathsound
|
sfx_None, // deathsound
|
||||||
8, // speed
|
8, // speed
|
||||||
20*FRACUNIT, // radius
|
28*FRACUNIT, // radius
|
||||||
56*FRACUNIT, // height
|
56*FRACUNIT, // height
|
||||||
1, // display offset
|
1, // display offset
|
||||||
16, // mass
|
16, // mass
|
||||||
|
|
@ -16027,7 +16033,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
S_NULL, // xdeathstate
|
S_NULL, // xdeathstate
|
||||||
sfx_None, // deathsound
|
sfx_None, // deathsound
|
||||||
8, // speed
|
8, // speed
|
||||||
20*FRACUNIT, // radius
|
28*FRACUNIT, // radius
|
||||||
56*FRACUNIT, // height
|
56*FRACUNIT, // height
|
||||||
1, // display offset
|
1, // display offset
|
||||||
16, // mass
|
16, // mass
|
||||||
|
|
|
||||||
|
|
@ -618,6 +618,7 @@ typedef enum sprite
|
||||||
SPR_SPBM, // Self-Propelled Bomb
|
SPR_SPBM, // Self-Propelled Bomb
|
||||||
SPR_THNS, // Thunder Shield
|
SPR_THNS, // Thunder Shield
|
||||||
SPR_BUBS, // Bubble Shield (not Bubs)
|
SPR_BUBS, // Bubble Shield (not Bubs)
|
||||||
|
SPR_BWVE, // Bubble Shield waves
|
||||||
SPR_FLMS, // Flame Shield
|
SPR_FLMS, // Flame Shield
|
||||||
SPR_SINK, // Kitchen Sink
|
SPR_SINK, // Kitchen Sink
|
||||||
SPR_SITR, // Kitchen Sink Trail
|
SPR_SITR, // Kitchen Sink Trail
|
||||||
|
|
@ -3546,6 +3547,12 @@ typedef enum state
|
||||||
S_BUBBLESHIELDTRAP6,
|
S_BUBBLESHIELDTRAP6,
|
||||||
S_BUBBLESHIELDTRAP7,
|
S_BUBBLESHIELDTRAP7,
|
||||||
S_BUBBLESHIELDTRAP8,
|
S_BUBBLESHIELDTRAP8,
|
||||||
|
S_BUBBLESHIELDWAVE1,
|
||||||
|
S_BUBBLESHIELDWAVE2,
|
||||||
|
S_BUBBLESHIELDWAVE3,
|
||||||
|
S_BUBBLESHIELDWAVE4,
|
||||||
|
S_BUBBLESHIELDWAVE5,
|
||||||
|
S_BUBBLESHIELDWAVE6,
|
||||||
|
|
||||||
// Flame Shield
|
// Flame Shield
|
||||||
S_FLAMESHIELD1,
|
S_FLAMESHIELD1,
|
||||||
|
|
|
||||||
|
|
@ -6465,7 +6465,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
||||||
player->kartstuff[k_bubblecool] = TICRATE+bubbletime;
|
player->kartstuff[k_bubblecool] = TICRATE+bubbletime;
|
||||||
if (player->kartstuff[k_bubbleblowup] > bubbletime)
|
if (player->kartstuff[k_bubbleblowup] > bubbletime)
|
||||||
{
|
{
|
||||||
mobj_t *trap = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_BUBBLESHIELDTRAP);
|
mobj_t *trap = P_SpawnMobj(player->mo->x + player->mo->momx, player->mo->y + player->mo->momy, player->mo->z + player->mo->momz, MT_BUBBLESHIELDTRAP);
|
||||||
P_SetScale(trap, (5*trap->destscale)>>1);
|
P_SetScale(trap, (5*trap->destscale)>>1);
|
||||||
trap->destscale = (5*trap->destscale)>>2;
|
trap->destscale = (5*trap->destscale)>>2;
|
||||||
P_SetTarget(&trap->target, player->mo);
|
P_SetTarget(&trap->target, player->mo);
|
||||||
|
|
|
||||||
|
|
@ -686,13 +686,8 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
|
||||||
if (player->spectator)
|
if (player->spectator)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (special->target->player && special->target->player->kartstuff[k_bubbleblowup]
|
if (special->target->player && special->target->player->kartstuff[k_bubbleblowup])
|
||||||
&& !player->kartstuff[k_spinouttimer])
|
|
||||||
{
|
|
||||||
K_SpinPlayer(player, special->target, 0, special, false);
|
K_SpinPlayer(player, special->target, 0, special, false);
|
||||||
if (player->kartstuff[k_spinouttimer]) // Successfully spun out
|
|
||||||
K_KartBouncing(toucher, special, false, true);
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
case MT_BUBBLESHIELDTRAP:
|
case MT_BUBBLESHIELDTRAP:
|
||||||
if ((special->target == toucher || special->target == toucher->target) && (special->threshold > 0))
|
if ((special->target == toucher || special->target == toucher->target) && (special->threshold > 0))
|
||||||
|
|
|
||||||
51
src/p_mobj.c
51
src/p_mobj.c
|
|
@ -6205,7 +6205,7 @@ void P_RunShadows(void)
|
||||||
|
|
||||||
for (mobj = shadowcap; mobj; mobj = next)
|
for (mobj = shadowcap; mobj; mobj = next)
|
||||||
{
|
{
|
||||||
fixed_t floorz;
|
fixed_t floorz, rad;
|
||||||
|
|
||||||
next = mobj->hnext;
|
next = mobj->hnext;
|
||||||
P_SetTarget(&mobj->hnext, NULL);
|
P_SetTarget(&mobj->hnext, NULL);
|
||||||
|
|
@ -6227,8 +6227,24 @@ void P_RunShadows(void)
|
||||||
|| (!(mobj->target->eflags & MFE_VERTICALFLIP) && mobj->target->z < floorz))
|
|| (!(mobj->target->eflags & MFE_VERTICALFLIP) && mobj->target->z < floorz))
|
||||||
mobj->flags2 |= MF2_DONTDRAW;
|
mobj->flags2 |= MF2_DONTDRAW;
|
||||||
|
|
||||||
|
rad = mobj->info->radius;
|
||||||
|
|
||||||
|
switch (mobj->type)
|
||||||
|
{
|
||||||
|
case MT_FLOATINGITEM:
|
||||||
|
rad /= 3;
|
||||||
|
break;
|
||||||
|
case MT_THUNDERSHIELD:
|
||||||
|
case MT_BUBBLESHIELD:
|
||||||
|
case MT_FLAMESHIELD:
|
||||||
|
rad = 10<<FRACBITS;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
// First scale to the same radius
|
// First scale to the same radius
|
||||||
P_SetScale(mobj, FixedDiv(mobj->target->radius, mobj->info->radius));
|
P_SetScale(mobj, FixedDiv(mobj->target->radius, rad));
|
||||||
|
|
||||||
dest = mobj->target;
|
dest = mobj->target;
|
||||||
|
|
||||||
|
|
@ -6263,9 +6279,6 @@ void P_RunShadows(void)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mobj->target->type == MT_FLOATINGITEM)
|
|
||||||
P_SetScale(mobj, mobj->scale/3);
|
|
||||||
}
|
}
|
||||||
P_SetTarget(&shadowcap, NULL);
|
P_SetTarget(&shadowcap, NULL);
|
||||||
}
|
}
|
||||||
|
|
@ -8422,6 +8435,7 @@ void P_MobjThinker(mobj_t *mobj)
|
||||||
if (curstate != S_BUBBLESHIELDBLOWUP)
|
if (curstate != S_BUBBLESHIELDBLOWUP)
|
||||||
P_SetMobjState(mobj, S_BUBBLESHIELDBLOWUP);
|
P_SetMobjState(mobj, S_BUBBLESHIELDBLOWUP);
|
||||||
|
|
||||||
|
mobj->angle += ANGLE_22h;
|
||||||
mobj->flags2 &= ~MF2_SHADOW;
|
mobj->flags2 &= ~MF2_SHADOW;
|
||||||
scale += (blow * (scale<<1)) / bubbletime;
|
scale += (blow * (scale<<1)) / bubbletime;
|
||||||
|
|
||||||
|
|
@ -8436,10 +8450,37 @@ void P_MobjThinker(mobj_t *mobj)
|
||||||
else if ((mobj->extravalue1 > -4 && mobj->extravalue2 > blow)
|
else if ((mobj->extravalue1 > -4 && mobj->extravalue2 > blow)
|
||||||
|| (mobj->cvmem && mobj->extravalue1 > 0)) // Shrinking
|
|| (mobj->cvmem && mobj->extravalue1 > 0)) // Shrinking
|
||||||
mobj->extravalue1--;
|
mobj->extravalue1--;
|
||||||
|
|
||||||
|
if (P_IsObjectOnGround(mobj->target))
|
||||||
|
{
|
||||||
|
mobj_t *wave;
|
||||||
|
|
||||||
|
wave = P_SpawnMobj(
|
||||||
|
mobj->target->x + P_ReturnThrustX(NULL, mobj->angle, mobj->radius),
|
||||||
|
mobj->target->y + P_ReturnThrustY(NULL, mobj->angle, mobj->radius),
|
||||||
|
mobj->target->z, MT_THOK);
|
||||||
|
wave->flags &= ~(MF_NOCLIPHEIGHT|MF_NOGRAVITY);
|
||||||
|
wave->momx = mobj->target->momx;
|
||||||
|
wave->momy = mobj->target->momy;
|
||||||
|
wave->momz = mobj->target->momz;
|
||||||
|
P_SetMobjState(wave, S_BUBBLESHIELDWAVE1);
|
||||||
|
|
||||||
|
// same thing, but + ANGLE_180
|
||||||
|
wave = P_SpawnMobj(
|
||||||
|
mobj->target->x + P_ReturnThrustX(NULL, mobj->angle + ANGLE_180, mobj->radius),
|
||||||
|
mobj->target->y + P_ReturnThrustY(NULL, mobj->angle + ANGLE_180, mobj->radius),
|
||||||
|
mobj->target->z, MT_THOK);
|
||||||
|
wave->flags &= ~(MF_NOCLIPHEIGHT|MF_NOGRAVITY);
|
||||||
|
wave->momx = mobj->target->momx;
|
||||||
|
wave->momy = mobj->target->momy;
|
||||||
|
wave->momz = mobj->target->momz;
|
||||||
|
P_SetMobjState(wave, S_BUBBLESHIELDWAVE1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mobj->cvmem = 0;
|
mobj->cvmem = 0;
|
||||||
|
mobj->angle = mobj->target->angle;
|
||||||
|
|
||||||
if (curstate == S_BUBBLESHIELDBLOWUP)
|
if (curstate == S_BUBBLESHIELDBLOWUP)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue