Thunder shield overlay

This commit is contained in:
TehRealSalt 2018-08-04 15:48:31 -04:00
parent 8d4fd5a1ea
commit 97ec385234
10 changed files with 175 additions and 44 deletions

View File

@ -332,7 +332,7 @@ consvar_t cv_ballhog = {"ballhog", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NU
consvar_t cv_selfpropelledbomb = {"selfpropelledbomb", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
consvar_t cv_grow = {"grow", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
consvar_t cv_shrink = {"shrink", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
consvar_t cv_lightningshield = {"lightningshield", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
consvar_t cv_thundershield = {"thundershield", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
consvar_t cv_hyudoro = {"hyudoro", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
consvar_t cv_pogospring = {"pogospring", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};

View File

@ -112,7 +112,7 @@ extern consvar_t cv_recycler;*/
extern consvar_t cv_sneaker, cv_rocketsneaker, cv_invincibility, cv_banana;
extern consvar_t cv_eggmanmonitor, cv_orbinaut, cv_jawz, cv_mine;
extern consvar_t cv_ballhog, cv_selfpropelledbomb, cv_grow, cv_shrink;
extern consvar_t cv_lightningshield, cv_hyudoro, cv_pogospring;
extern consvar_t cv_thundershield, cv_hyudoro, cv_pogospring;
extern consvar_t cv_triplesneaker, cv_triplebanana, cv_tripleorbinaut, cv_dualjawz;

View File

@ -246,7 +246,7 @@ typedef enum
KITEM_SPB,
KITEM_GROW,
KITEM_SHRINK,
KITEM_LIGHTNINGSHIELD,
KITEM_THUNDERSHIELD,
KITEM_HYUDORO,
KITEM_POGOSPRING,
KITEM_KITCHENSINK,
@ -306,7 +306,8 @@ typedef enum
k_itemheld, // Are you holding an item?
// Some items use timers for their duration or effects
k_attractiontimer, // Duration of Lightning Shield's item-break and item box pull
//k_thunderanim, // Duration of Thunder Shield's use animation
k_curshield, // 0 = no shield, 1 = thunder shield
k_hyudorotimer, // Duration of the Hyudoro offroad effect itself
k_stealingtimer, // You are stealing an item, this is your timer
k_stolentimer, // You are being stolen from, this is your timer

View File

@ -6247,7 +6247,7 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
"S_DRIFTDUST3",
"S_DRIFTDUST4",
// Lightning Shield Burst
// Thunder Shield Burst
// Sneaker Fire Trail
"S_KARTFIRE1",
@ -6446,6 +6446,32 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
"S_LIGHTNING3",
"S_LIGHTNING4",
// Thunder Shield
"S_THUNDERSHIELD1",
"S_THUNDERSHIELD2",
"S_THUNDERSHIELD3",
"S_THUNDERSHIELD4",
"S_THUNDERSHIELD5",
"S_THUNDERSHIELD6",
"S_THUNDERSHIELD7",
"S_THUNDERSHIELD8",
"S_THUNDERSHIELD9",
"S_THUNDERSHIELD10",
"S_THUNDERSHIELD11",
"S_THUNDERSHIELD12",
"S_THUNDERSHIELD13",
"S_THUNDERSHIELD14",
"S_THUNDERSHIELD15",
"S_THUNDERSHIELD16",
"S_THUNDERSHIELD17",
"S_THUNDERSHIELD18",
"S_THUNDERSHIELD19",
"S_THUNDERSHIELD20",
"S_THUNDERSHIELD21",
"S_THUNDERSHIELD22",
"S_THUNDERSHIELD23",
"S_THUNDERSHIELD24",
// The legend
"S_SINK",
"S_SINKTRAIL1",
@ -7185,8 +7211,8 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
"MT_FAKESHIELD",
"MT_FAKEITEM",
"MT_BANANA",
"MT_BANANA_SHIELD", // Banana Stuff
"MT_BANANA", // Banana Stuff
"MT_BANANA_SHIELD",
"MT_ORBINAUT", // Orbinaut stuff
"MT_ORBINAUT_SHIELD",
@ -7211,6 +7237,8 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
"MT_BLUEEXPLOSION",
"MT_LIGHTNING",
"MT_THUNDERSHIELD", // Thunder Shield stuff
"MT_SINK", // Kitchen Sink Stuff
"MT_SINKTRAIL",
@ -7652,7 +7680,8 @@ static const char *const KARTSTUFF_LIST[] = {
"ITEMHELD",
// Some items use timers for their duration or effects
"ATTRACTIONTIMER",
//"THUNDERANIM",
"CURSHIELD",
"HYUDOROTIMER",
"STEALINGTIMER",
"STOLENTIMER",

View File

@ -57,9 +57,10 @@ char sprnames[NUMSPRITES + 1][5] =
//SRB2kart Sprites
"SPRG","BSPR","RNDM","RPOP","KFRE","KINV","KINF","WIPD","DRIF","DUST",
"FITM","BANA","ORBN","JAWZ","SSMN","KRBM","BHOG","BHBM","BLIG","LIGH",
"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","ITMI","ITMN","WANT","PBOM","VIEW"
"THNS","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","ITMI","ITMN","WANT","PBOM",
"VIEW"
};
// Doesn't work with g++, needs actionf_p1 (don't modify this comment)
@ -2762,6 +2763,31 @@ state_t states[NUMSTATES] =
{SPR_LIGH, 2, 2, {NULL}, 0, 0, S_LIGHTNING4}, // S_LIGHTNING3
{SPR_LIGH, 3, 2, {NULL}, 0, 0, S_NULL}, // S_LIGHTNING4
{SPR_THNS, 0, 2, {NULL}, 0, 0, S_THUNDERSHIELD2}, // S_THUNDERSHIELD1
{SPR_THNS, 1, 2, {NULL}, 0, 0, S_THUNDERSHIELD3}, // S_THUNDERSHIELD2
{SPR_THNS, 2, 2, {NULL}, 0, 0, S_THUNDERSHIELD4}, // S_THUNDERSHIELD3
{SPR_THNS, 3, 2, {NULL}, 0, 0, S_THUNDERSHIELD5}, // S_THUNDERSHIELD4
{SPR_THNS, 4, 2, {NULL}, 0, 0, S_THUNDERSHIELD6}, // S_THUNDERSHIELD5
{SPR_THNS, 5, 2, {NULL}, 0, 0, S_THUNDERSHIELD7}, // S_THUNDERSHIELD6
{SPR_THNS, 6, 2, {NULL}, 0, 0, S_THUNDERSHIELD8}, // S_THUNDERSHIELD7
{SPR_THNS, 7, 2, {NULL}, 0, 0, S_THUNDERSHIELD9}, // S_THUNDERSHIELD8
{SPR_THNS, 8, 2, {NULL}, 0, 0, S_THUNDERSHIELD10}, // S_THUNDERSHIELD9
{SPR_THNS, 9, 2, {NULL}, 0, 0, S_THUNDERSHIELD11}, // S_THUNDERSHIELD10
{SPR_THNS, 10, 2, {NULL}, 0, 0, S_THUNDERSHIELD12}, // S_THUNDERSHIELD11
{SPR_THNS, 11, 2, {NULL}, 0, 0, S_THUNDERSHIELD13}, // S_THUNDERSHIELD12
{SPR_THNS, 8, 2, {NULL}, 0, 0, S_THUNDERSHIELD14}, // S_THUNDERSHIELD13
{SPR_THNS, 7, 2, {NULL}, 0, 0, S_THUNDERSHIELD15}, // S_THUNDERSHIELD14
{SPR_THNS, 6, 2, {NULL}, 0, 0, S_THUNDERSHIELD16}, // S_THUNDERSHIELD15
{SPR_THNS, 5, 2, {NULL}, 0, 0, S_THUNDERSHIELD17}, // S_THUNDERSHIELD16
{SPR_THNS, 4, 2, {NULL}, 0, 0, S_THUNDERSHIELD18}, // S_THUNDERSHIELD17
{SPR_THNS, 3, 2, {NULL}, 0, 0, S_THUNDERSHIELD19}, // S_THUNDERSHIELD18
{SPR_THNS, 2, 2, {NULL}, 0, 0, S_THUNDERSHIELD20}, // S_THUNDERSHIELD19
{SPR_THNS, 1, 2, {NULL}, 0, 0, S_THUNDERSHIELD21}, // S_THUNDERSHIELD20
{SPR_THNS, 0, 2, {NULL}, 0, 0, S_THUNDERSHIELD22}, // S_THUNDERSHIELD21
{SPR_THNS, 9, 2, {NULL}, 0, 0, S_THUNDERSHIELD23}, // S_THUNDERSHIELD22
{SPR_THNS, 10, 2, {NULL}, 0, 0, S_THUNDERSHIELD24}, // S_THUNDERSHIELD23
{SPR_THNS, 11, 2, {NULL}, 0, 0, S_THUNDERSHIELD1}, // S_THUNDERSHIELD24
{SPR_SINK, 0, 4, {A_SmokeTrailer}, MT_SINKTRAIL, 0, S_SINK}, // S_SINK
{SPR_SITR, 0, 1, {NULL}, 0, 0, S_SINKTRAIL2}, // S_SINKTRAIL1
{SPR_SITR, 1, 5, {NULL}, 0, 0, S_SINKTRAIL3}, // S_SINKTRAIL2
@ -15087,6 +15113,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_NULL // raisestate
},
{ // MT_THUNDERSHIELD
-1, // doomednum
S_THUNDERSHIELD1, // 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
8, // speed
16*FRACUNIT, // radius
56*FRACUNIT, // height
1, // display offset
16, // mass
0, // damage
sfx_None, // activesound
MF_NOBLOCKMAP|MF_NOCLIP|MF_NOGRAVITY, // flags
S_NULL // raisestate
},
{ // MT_SINK
-1, // doomednum
S_SINK, // spawnstate

View File

@ -600,6 +600,7 @@ typedef enum sprite
SPR_BHBM, // Ballhog BOOM
SPR_BLIG, // Self-Propelled Bomb
SPR_LIGH, // Grow/shrink beams (Metallic Maddness)
SPR_THNS, // Thunder Shield
SPR_SINK, // Kitchen Sink
SPR_SITR, // Kitchen Sink Trail
SPR_KBLN, // Battle Mode Bumper
@ -3282,12 +3283,38 @@ typedef enum state
S_BLUELIGHTNING4,
S_BLUEEXPLODE,
// Size-Down
// Grow/Shrink
S_LIGHTNING1,
S_LIGHTNING2,
S_LIGHTNING3,
S_LIGHTNING4,
// Thunder Shield
S_THUNDERSHIELD1,
S_THUNDERSHIELD2,
S_THUNDERSHIELD3,
S_THUNDERSHIELD4,
S_THUNDERSHIELD5,
S_THUNDERSHIELD6,
S_THUNDERSHIELD7,
S_THUNDERSHIELD8,
S_THUNDERSHIELD9,
S_THUNDERSHIELD10,
S_THUNDERSHIELD11,
S_THUNDERSHIELD12,
S_THUNDERSHIELD13,
S_THUNDERSHIELD14,
S_THUNDERSHIELD15,
S_THUNDERSHIELD16,
S_THUNDERSHIELD17,
S_THUNDERSHIELD18,
S_THUNDERSHIELD19,
S_THUNDERSHIELD20,
S_THUNDERSHIELD21,
S_THUNDERSHIELD22,
S_THUNDERSHIELD23,
S_THUNDERSHIELD24,
// The legend
S_SINK,
S_SINKTRAIL1,
@ -4070,6 +4097,8 @@ typedef enum mobj_type
MT_BLUEEXPLOSION,
MT_LIGHTNING,
MT_THUNDERSHIELD, // Thunder Shield stuff
MT_SINK, // Kitchen Sink Stuff
MT_SINKTRAIL,

View File

@ -385,7 +385,7 @@ void K_RegisterKartStuff(void)
CV_RegisterVar(&cv_selfpropelledbomb);
CV_RegisterVar(&cv_grow);
CV_RegisterVar(&cv_shrink);
CV_RegisterVar(&cv_lightningshield);
CV_RegisterVar(&cv_thundershield);
CV_RegisterVar(&cv_hyudoro);
CV_RegisterVar(&cv_pogospring);
@ -476,7 +476,7 @@ static INT32 K_KartItemOddsRace[NUMKARTRESULTS][9] =
/*Self-Propelled Bomb*/ { 0, 0, 1, 1, 1, 2, 2, 3, 2 }, // Self-Propelled Bomb
/*Grow*/ { 0, 0, 0, 0, 1, 2, 4, 6, 4 }, // Grow
/*Shrink*/ { 0, 0, 0, 0, 0, 0, 0, 1, 0 }, // Shrink
/*Lightning Shield*/ { 0, 1, 2, 0, 0, 0, 0, 0, 0 }, // Lightning Shield
/*Thunder Shield*/ { 0, 1, 2, 0, 0, 0, 0, 0, 0 }, // Thunder Shield
/*Hyudoro*/ { 0, 0, 0, 0, 1, 2, 1, 0, 0 }, // Hyudoro
/*Pogo Spring*/ { 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // Pogo Spring
/*Kitchen Sink*/ { 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // Kitchen Sink
@ -502,7 +502,7 @@ static INT32 K_KartItemOddsBattle[NUMKARTRESULTS][6] =
/*Self-Propelled Bomb*/ { 0, 0, 0, 0 }, // Self-Propelled Bomb
/*Grow*/ { 4, 2, 0, 2 }, // Grow
/*Shrink*/ { 0, 0, 0, 0 }, // Shrink
/*Lightning Shield*/ { 0, 0, 0, 0 }, // Lightning Shield
/*Thunder Shield*/ { 0, 0, 0, 0 }, // Thunder Shield
/*Hyudoro*/ { 0, 0, 1, 0 }, // Hyudoro
/*Pogo Spring*/ { 0, 0, 1, 0 }, // Pogo Spring
/*Kitchen Sink*/ { 0, 0, 0, 0 }, // Kitchen Sink
@ -680,9 +680,9 @@ static INT32 K_KartGetItemOdds(UINT8 pos, SINT8 item, fixed_t mashed)
|| (indirectitemcooldown > 0)
|| (pingame-1 <= pexiting)) newodds = 0;
break;
case KITEM_LIGHTNINGSHIELD:
case KITEM_THUNDERSHIELD:
POWERITEMODDS(newodds);
if (!cv_lightningshield.value) newodds = 0;
if (!cv_thundershield.value) newodds = 0;
break;
case KITEM_HYUDORO:
if (!cv_hyudoro.value) newodds = 0;
@ -899,7 +899,7 @@ static void K_KartItemRoulette(player_t *player, ticcmd_t *cmd)
SETITEMRESULT(useodds, KITEM_SPB); // Self-Propelled Bomb
SETITEMRESULT(useodds, KITEM_GROW); // Grow
SETITEMRESULT(useodds, KITEM_SHRINK); // Shrink
SETITEMRESULT(useodds, KITEM_LIGHTNINGSHIELD); // Lightning Shield
SETITEMRESULT(useodds, KITEM_THUNDERSHIELD); // Thunder Shield
SETITEMRESULT(useodds, KITEM_HYUDORO); // Hyudoro
SETITEMRESULT(useodds, KITEM_POGOSPRING); // Pogo Spring
//SETITEMRESULT(useodds, KITEM_KITCHENSINK); // Kitchen Sink
@ -2537,10 +2537,10 @@ static mobj_t *K_ThrowKartItem(player_t *player, boolean missile, mobjtype_t map
return mo;
}
static void K_DoLightningShield(player_t *player)
static void K_DoThunderShield(player_t *player)
{
S_StartSound(player->mo, sfx_s3k45);
player->kartstuff[k_attractiontimer] = 35;
//player->kartstuff[k_thunderanim] = 35;
P_NukeEnemies(player->mo, player->mo, RING_DIST/4);
}
@ -2550,7 +2550,7 @@ static void K_DoHyudoroSteal(player_t *player)
INT32 playerswappable[MAXPLAYERS];
INT32 stealplayer = -1; // The player that's getting stolen from
INT32 prandom = 0;
fixed_t sink = P_RandomChance(FRACUNIT/64);
boolean sink = P_RandomChance(FRACUNIT/64);
for (i = 0; i < MAXPLAYERS; i++)
{
@ -2574,7 +2574,7 @@ static void K_DoHyudoroSteal(player_t *player)
prandom = P_RandomFixed();
S_StartSound(player->mo, sfx_s3k92);
if (sink) // BEHOLD THE KITCHEN SINK
if (sink && numplayers > 0) // BEHOLD THE KITCHEN SINK
{
player->kartstuff[k_hyudorotimer] = hyudorotime;
player->kartstuff[k_stealingtimer] = stealtime;
@ -3010,8 +3010,8 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
if (player->kartstuff[k_spinouttimer] == 0 && player->powers[pw_flashing] == K_GetKartFlashing())
player->powers[pw_flashing]--;
if (player->kartstuff[k_attractiontimer])
player->kartstuff[k_attractiontimer]--;
/*if (player->kartstuff[k_thunderanim])
player->kartstuff[k_thunderanim]--;*/
if (player->kartstuff[k_sneakertimer])
player->kartstuff[k_sneakertimer]--;
@ -3538,7 +3538,9 @@ void K_StripItems(player_t *player)
player->kartstuff[k_stealingtimer] = 0;
player->kartstuff[k_stolentimer] = 0;
player->kartstuff[k_attractiontimer] = 0;
player->kartstuff[k_curshield] = 0;
//player->kartstuff[k_thunderanim] = 0;
player->kartstuff[k_bananadrag] = 0;
player->kartstuff[k_sadtimer] = 0;
}
@ -3871,10 +3873,16 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
player->kartstuff[k_itemamount]--;
}
break;
case KITEM_LIGHTNINGSHIELD:
case KITEM_THUNDERSHIELD:
if (player->kartstuff[k_curshield] <= 0)
{
mobj_t *shield = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_THUNDERSHIELD);
P_SetTarget(&shield->target, player->mo);
player->kartstuff[k_curshield] = 1;
}
if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO)
{
K_DoLightningShield(player);
K_DoThunderShield(player);
player->pflags |= PF_ATTACKDOWN;
player->kartstuff[k_itemamount]--;
}
@ -3924,6 +3932,9 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
if (!player->kartstuff[k_itemamount] && !player->kartstuff[k_itemheld])
player->kartstuff[k_itemtype] = KITEM_NONE;
if (player->kartstuff[k_itemtype] != KITEM_THUNDERSHIELD)
player->kartstuff[k_curshield] = 0;
if (player->kartstuff[k_itemtype] == KITEM_SPB
|| player->kartstuff[k_itemtype] == KITEM_SHRINK
|| player->kartstuff[k_growshrinktimer] < 0
@ -4384,7 +4395,7 @@ static patch_t *kp_ballhog[2];
static patch_t *kp_selfpropelledbomb[2];
static patch_t *kp_grow[2];
static patch_t *kp_shrink[2];
static patch_t *kp_lightningshield[2];
static patch_t *kp_thundershield[2];
static patch_t *kp_hyudoro[2];
static patch_t *kp_pogospring[2];
static patch_t *kp_kitchensink[2];
@ -4494,7 +4505,7 @@ void K_LoadKartHUDGraphics(void)
kp_selfpropelledbomb[0] = W_CachePatchName("K_ITSPB", PU_HUDGFX);
kp_grow[0] = W_CachePatchName("K_ITGROW", PU_HUDGFX);
kp_shrink[0] = W_CachePatchName("K_ITSHRK", PU_HUDGFX);
kp_lightningshield[0] = W_CachePatchName("K_ITLITS", PU_HUDGFX);
kp_thundershield[0] = W_CachePatchName("K_ITTHNS", PU_HUDGFX);
kp_hyudoro[0] = W_CachePatchName("K_ITHYUD", PU_HUDGFX);
kp_pogospring[0] = W_CachePatchName("K_ITPOGO", PU_HUDGFX);
kp_kitchensink[0] = W_CachePatchName("K_ITSINK", PU_HUDGFX);
@ -4522,7 +4533,7 @@ void K_LoadKartHUDGraphics(void)
kp_selfpropelledbomb[1] = W_CachePatchName("K_ISSPB", PU_HUDGFX);
kp_grow[1] = W_CachePatchName("K_ISGROW", PU_HUDGFX);
kp_shrink[1] = W_CachePatchName("K_ISSHRK", PU_HUDGFX);
kp_lightningshield[1] = W_CachePatchName("K_ISLITS", PU_HUDGFX);
kp_thundershield[1] = W_CachePatchName("K_ISTHNS", PU_HUDGFX);
kp_hyudoro[1] = W_CachePatchName("K_ISHYUD", PU_HUDGFX);
kp_pogospring[1] = W_CachePatchName("K_ISPOGO", PU_HUDGFX);
kp_kitchensink[1] = W_CachePatchName("K_ISSINK", PU_HUDGFX);
@ -4756,22 +4767,22 @@ static void K_drawKartItem(void)
switch((stplyr->kartstuff[k_itemroulette] % (13*3)) / 3)
{
// Each case is handled in threes, to give three frames of in-game time to see the item on the roulette
case 0: localpatch = kp_sneaker[offset]; break; // Sneaker
case 0: localpatch = kp_sneaker[offset]; break; // Sneaker
case 1: localpatch = kp_banana[offset]; break; // Banana
case 2: localpatch = kp_orbinaut[offset]; break; // Orbinaut
case 3: localpatch = kp_mine[offset]; break; // Mine
case 4: localpatch = kp_grow[offset]; break; // Grow
case 5: localpatch = kp_hyudoro[offset]; break; // Hyudoro
case 2: localpatch = kp_orbinaut[offset]; break; // Orbinaut
case 3: localpatch = kp_mine[offset]; break; // Mine
case 4: localpatch = kp_grow[offset]; break; // Grow
case 5: localpatch = kp_hyudoro[offset]; break; // Hyudoro
case 6: localpatch = kp_rocketsneaker[offset]; break; // Rocket Sneaker
case 7: localpatch = kp_jawz[offset]; break; // Jawz
case 7: localpatch = kp_jawz[offset]; break; // Jawz
case 8: localpatch = kp_selfpropelledbomb[offset]; break; // Self-Propelled Bomb
case 9: localpatch = kp_shrink[offset]; break; // Shrink
case 10: localpatch = localinv; break; // Invincibility
case 10: localpatch = localinv; break; // Invincibility
case 11: localpatch = kp_eggman[offset]; break; // Eggman Monitor
case 12: localpatch = kp_ballhog[offset]; break; // Ballhog
case 13: localpatch = kp_lightningshield[offset]; break; // Lightning Shield
//case 14: localpatch = kp_pogospring[offset]; break; // Pogo Spring
//case 15: localpatch = kp_kitchensink[offset]; break; // Kitchen Sink
case 12: localpatch = kp_ballhog[offset]; break; // Ballhog
case 13: localpatch = kp_thundershield[offset]; break; // Thunder Shield
//case 14: localpatch = kp_pogospring[offset]; break; // Pogo Spring
//case 15: localpatch = kp_kitchensink[offset]; break; // Kitchen Sink
default: break;
}
}
@ -4832,7 +4843,7 @@ static void K_drawKartItem(void)
case KITEM_SPB: localpatch = kp_selfpropelledbomb[offset]; break;
case KITEM_GROW: localpatch = kp_grow[offset]; break;
case KITEM_SHRINK: localpatch = kp_shrink[offset]; break;
case KITEM_LIGHTNINGSHIELD: localpatch = kp_lightningshield[offset]; break;
case KITEM_THUNDERSHIELD: localpatch = kp_thundershield[offset]; break;
case KITEM_HYUDORO: localpatch = kp_hyudoro[offset]; break;
case KITEM_POGOSPRING: localpatch = kp_pogospring[offset]; break;
case KITEM_KITCHENSINK: localpatch = kp_kitchensink[offset]; break;

View File

@ -1500,7 +1500,7 @@ static menuitem_t OP_MonitorToggleMenu[] =
{IT_STRING | IT_CVAR, NULL, "Self-Propelled Bombs",&cv_selfpropelledbomb,114},
{IT_STRING | IT_CVAR, NULL, "Grow", &cv_grow, 122},
{IT_STRING | IT_CVAR, NULL, "Shrink", &cv_shrink, 130},
{IT_STRING | IT_CVAR, NULL, "Lightning Shields", &cv_lightningshield, 138},
{IT_STRING | IT_CVAR, NULL, "Thunder Shields", &cv_thundershield, 138},
{IT_STRING | IT_CVAR, NULL, "Hyudoros", &cv_hyudoro, 146},
{IT_STRING | IT_CVAR, NULL, "Pogo Springs", &cv_pogospring, 154},
};

View File

@ -8220,6 +8220,14 @@ void P_MobjThinker(mobj_t *mobj)
}
P_TeleportMove(mobj, mobj->target->x, mobj->target->y, mobj->target->z);
break;
case MT_THUNDERSHIELD:
if (!mobj->target || !mobj->target->health || (mobj->target->player && mobj->target->player->kartstuff[k_curshield] != 1))
{
P_RemoveMobj(mobj);
return;
}
P_TeleportMove(mobj, mobj->target->x, mobj->target->y, mobj->target->z);
break;
case MT_KARMAHITBOX:
if (!mobj->target || !mobj->target->health || !mobj->target->player || mobj->target->player->spectator
|| (G_RaceGametype() || mobj->target->player->kartstuff[k_bumper]))

View File

@ -415,7 +415,7 @@ sfxinfo_t S_sfx[NUMSFX] =
{"s3k42", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR},
{"s3k43", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR},
{"s3k44", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR},
{"s3k45", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Kart Lightning Shield use
{"s3k45", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Kart Thunder Shield use
{"s3k46", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR},
{"s3k47", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR},
{"s3k48", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR},