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