diff --git a/src/d_netcmd.c b/src/d_netcmd.c index d42ed2fa2..dfd387942 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -336,8 +336,8 @@ consvar_t cv_jawz = {"jawz", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0 consvar_t cv_mine = {"mine", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_ballhog = {"ballhog", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_selfpropelledbomb = {"selfpropelledbomb", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_sizeup = {"sizeup", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_sizedown = {"sizedown", "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_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}; diff --git a/src/d_netcmd.h b/src/d_netcmd.h index 6363fd0d6..fb314b974 100644 --- a/src/d_netcmd.h +++ b/src/d_netcmd.h @@ -111,7 +111,7 @@ extern consvar_t cv_recycler;*/ // SRB2kart items extern consvar_t cv_sneaker, cv_rocketsneaker, cv_invincibility, cv_banana; extern consvar_t cv_fakeitem, cv_orbinaut, cv_jawz, cv_mine; -extern consvar_t cv_ballhog, cv_selfpropelledbomb, cv_sizeup, cv_sizedown; +extern consvar_t cv_ballhog, cv_selfpropelledbomb, cv_grow, cv_shrink; extern consvar_t cv_lightningshield, cv_hyudoro, cv_pogospring; extern consvar_t cv_triplesneaker, cv_triplebanana, cv_tripleorbinaut, cv_dualjawz; diff --git a/src/d_player.h b/src/d_player.h index c7cb6d2a5..28ee6d00a 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -244,8 +244,8 @@ typedef enum KITEM_MINE, KITEM_BALLHOG, KITEM_SPB, - KITEM_SIZEUP, - KITEM_SIZEDOWN, + KITEM_GROW, + KITEM_SHRINK, KITEM_LIGHTNINGSHIELD, KITEM_HYUDORO, KITEM_POGOSPRING, @@ -309,7 +309,7 @@ typedef enum k_fakeitem, // Fake item held, separate from itemtype so it doesn't stop you from getting items k_spinouttimer, // Spin-out from a banana peel or oil slick (was "pw_bananacam") k_justbumped, // Prevent players from endlessly bumping into each other - k_poweritemtimer, // Battle mode, how long before you're allowed another power item (Invincibility, Size Up) + k_poweritemtimer, // Battle mode, how long before you're allowed another power item (Invincibility, Grow) k_comebacktimer, // Battle mode, how long before you become a bomb after death k_sadtimer, // How long you've been sad diff --git a/src/dehacked.c b/src/dehacked.c index 39ec2c162..9c1f3aef8 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -6258,6 +6258,25 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_KARTFIRE7", "S_KARTFIRE8", + // Invincibility Sparks + "S_KARTINVULN_SMALL1", + "S_KARTINVULN_SMALL2", + "S_KARTINVULN_SMALL3", + "S_KARTINVULN_SMALL4", + "S_KARTINVULN_SMALL5", + + "S_KARTINVULN_LARGE1", + "S_KARTINVULN_LARGE2", + "S_KARTINVULN_LARGE3", + "S_KARTINVULN_LARGE4", + "S_KARTINVULN_LARGE5", + + // Invincibility flash overlay + "S_INVULNFLASH1", + "S_INVULNFLASH2", + "S_INVULNFLASH3", + "S_INVULNFLASH4", + //{ Fake Item "S_FAKEITEM1", "S_FAKEITEM2", @@ -6395,7 +6414,7 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_BLUELIGHTNING4", "S_BLUEEXPLODE", - // Size Down + // Grow/shrink beams "S_LIGHTNING1", "S_LIGHTNING2", "S_LIGHTNING3", @@ -6457,7 +6476,7 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_PLAYERARROW_BALLHOG", "S_PLAYERARROW_ORBINAUT", "S_PLAYERARROW_INVINCIBILITY", - "S_PLAYERARROW_SIZEUP", + "S_PLAYERARROW_GROW", "S_PLAYERARROW_KITCHENSINK", "S_PLAYERARROW_EMPTY", "S_PLAYERARROW_ROULETTE", @@ -6984,6 +7003,7 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s "MT_RANDOMITEMPOP", "MT_SNEAKERTRAIL", + "MT_SPARKLETRAIL", "MT_DRIFT", "MT_DRIFTSMOKE", @@ -7010,7 +7030,7 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s "MT_SMOLDERING", // New explosion "MT_BOOMPARTICLE", - "MT_BLUELIGHTNING", // Size Down stuff + "MT_BLUELIGHTNING", // Grow/shrink stuff "MT_BLUEEXPLOSION", "MT_LIGHTNING", diff --git a/src/info.c b/src/info.c index 67c48db1c..896cf61a1 100644 --- a/src/info.c +++ b/src/info.c @@ -55,10 +55,10 @@ char sprnames[NUMSPRITES + 1][5] = "GWLR","SRBA","SRBB","SRBC","SRBD","SRBE","SRBF","SRBG","SRBH","SRBI", "SRBJ","SRBK","SRBL","SRBM","SRBN","SRBO", //SRB2kart Sprites - "SPRG","BSPR","RNDM","KFRE","DRIF","DSMO","FITM","BANA","GSHE","RSHE", - "SSMN","KRBM","BLIG","LIGH","SINK","SITR","KBLN","LAKI","POKE","AUDI", - "DECO","DOOD","SNES","GBAS","SPRS","BUZB","CHOM","SACO","CRAB","SHAD", - "BUMP","FLEN","CLAS","PSHW","ARRO","PBOM" + "SPRG","BSPR","RNDM","KFRE","KINV","KINF","DRIF","DSMO","FITM","BANA", + "GSHE","RSHE","SSMN","KRBM","BLIG","LIGH","SINK","SITR","KBLN","LAKI", + "POKE","AUDI","DECO","DOOD","SNES","GBAS","SPRS","BUZB","CHOM","SACO", + "CRAB","SHAD","BUMP","FLEN","CLAS","PSHW","ARRO","PBOM" }; // Doesn't work with g++, needs actionf_p1 (don't modify this comment) @@ -2592,6 +2592,23 @@ state_t states[NUMSTATES] = {SPR_KFRE, FF_FULLBRIGHT|5, 2, {NULL}, 0, 0, S_KARTFIRE8}, // S_KARTFIRE7 {SPR_KFRE, FF_FULLBRIGHT|6, 2, {NULL}, 0, 0, S_NULL}, // S_KARTFIRE8 + {SPR_KINV, FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_KARTINVULN_SMALL2}, // S_KARTINVULN_SMALL1 + {SPR_KINV, FF_FULLBRIGHT|1, 1, {NULL}, 0, 0, S_KARTINVULN_SMALL3}, // S_KARTINVULN_SMALL2 + {SPR_KINV, FF_FULLBRIGHT|2, 1, {NULL}, 0, 0, S_KARTINVULN_SMALL4}, // S_KARTINVULN_SMALL3 + {SPR_KINV, FF_FULLBRIGHT|3, 1, {NULL}, 0, 0, S_KARTINVULN_SMALL5}, // S_KARTINVULN_SMALL4 + {SPR_KINV, FF_FULLBRIGHT|4, 1, {NULL}, 0, 0, S_NULL}, // S_KARTINVULN_SMALL5 + + {SPR_KINV, FF_FULLBRIGHT|1, 1, {NULL}, 0, 0, S_KARTINVULN_LARGE2}, // S_KARTINVULN_LARGE1 + {SPR_KINV, FF_FULLBRIGHT|2, 1, {NULL}, 0, 0, S_KARTINVULN_LARGE3}, // S_KARTINVULN_LARGE2 + {SPR_KINV, FF_FULLBRIGHT|5, 1, {NULL}, 0, 0, S_KARTINVULN_LARGE4}, // S_KARTINVULN_LARGE3 + {SPR_KINV, FF_FULLBRIGHT|6, 1, {NULL}, 0, 0, S_KARTINVULN_LARGE5}, // S_KARTINVULN_LARGE4 + {SPR_KINV, FF_FULLBRIGHT|7, 1, {NULL}, 0, 0, S_NULL}, // S_KARTINVULN_LARGE5 + + {SPR_KINF, FF_FULLBRIGHT|FF_TRANS80, 1, {NULL}, 0, 0, S_INVULNFLASH2}, // S_INVULNFLASH1 + {SPR_NULL, FF_FULLBRIGHT|FF_TRANS80, 1, {NULL}, 0, 0, S_INVULNFLASH3}, // S_INVULNFLASH2 + {SPR_KINF, FF_FULLBRIGHT|FF_TRANS80|1, 1, {NULL}, 0, 0, S_INVULNFLASH4}, // S_INVULNFLASH3 + {SPR_NULL, FF_FULLBRIGHT|FF_TRANS80, 1, {NULL}, 0, 0, S_INVULNFLASH1}, // S_INVULNFLASH4 + {SPR_FITM, 0, 3, {NULL}, 0, 0, S_FAKEITEM2}, // S_FAKEITEM1 {SPR_FITM, 1, 3, {NULL}, 0, 0, S_FAKEITEM3}, // S_FAKEITEM2 {SPR_FITM, 2, 3, {NULL}, 0, 0, S_FAKEITEM4}, // S_FAKEITEM3 @@ -2899,7 +2916,7 @@ state_t states[NUMSTATES] = {SPR_ARRO, FF_FULLBRIGHT|9, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_BALLHOG {SPR_ARRO, FF_FULLBRIGHT|10, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_ORBINAUT {SPR_ARRO, FF_FULLBRIGHT|13, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_INVINCIBILITY - {SPR_ARRO, FF_FULLBRIGHT|14, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_SIZEUP + {SPR_ARRO, FF_FULLBRIGHT|14, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_GROW {SPR_ARRO, FF_FULLBRIGHT|15, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_KITCHENSINK {SPR_ARRO, FF_FULLBRIGHT|16, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_EMPTY {SPR_ARRO, FF_FULLBRIGHT|FF_ANIMATE|1, -1, {NULL}, 5, 3, S_NULL}, // S_PLAYERARROW_ROULETTE @@ -14352,6 +14369,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, + { // MT_SPARKLETRAIL + -1, // doomednum + S_KARTINVULN_SMALL1, // spawnstate + 1, // 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 + 14*FRACUNIT, // radius + 14*FRACUNIT, // height + 0, // display offset + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP|MF_NOCLIP|MF_NOCLIPHEIGHT|MF_NOGRAVITY|MF_SCENERY, // flags + S_NULL // raisestate + }, + { // MT_DRIFT -1, // doomednum S_DRIFTSPARK1, // spawnstate diff --git a/src/info.h b/src/info.h index a495f398b..0420f533f 100644 --- a/src/info.h +++ b/src/info.h @@ -580,6 +580,8 @@ typedef enum sprite SPR_RNDM, // Random Item Box SPR_KFRE, // Sneaker fire trail + SPR_KINV, // Invincibility sparkle trail + SPR_KINF, // Invincibility flash SPR_DRIF, // Drift Sparks SPR_DSMO, // Drift Smoke @@ -591,7 +593,7 @@ typedef enum sprite SPR_SSMN, // SS Mine SPR_KRBM, // SS Mine BOOM SPR_BLIG, // Self-Propelled Bomb - SPR_LIGH, // Size Up/Down beams (Metallic Maddness) + SPR_LIGH, // Grow/shrink beams (Metallic Maddness) SPR_SINK, // Kitchen Sink SPR_SITR, // Kitchen Sink Trail SPR_KBLN, // Battle Mode Balloon @@ -3091,6 +3093,25 @@ typedef enum state S_KARTFIRE7, S_KARTFIRE8, + // Invincibility Sparks + S_KARTINVULN_SMALL1, + S_KARTINVULN_SMALL2, + S_KARTINVULN_SMALL3, + S_KARTINVULN_SMALL4, + S_KARTINVULN_SMALL5, + + S_KARTINVULN_LARGE1, + S_KARTINVULN_LARGE2, + S_KARTINVULN_LARGE3, + S_KARTINVULN_LARGE4, + S_KARTINVULN_LARGE5, + + // Invincibility flash + S_INVULNFLASH1, + S_INVULNFLASH2, + S_INVULNFLASH3, + S_INVULNFLASH4, + //{ Fake Item S_FAKEITEM1, S_FAKEITEM2, @@ -3417,7 +3438,7 @@ typedef enum state S_PLAYERARROW_BALLHOG, S_PLAYERARROW_ORBINAUT, S_PLAYERARROW_INVINCIBILITY, - S_PLAYERARROW_SIZEUP, + S_PLAYERARROW_GROW, S_PLAYERARROW_KITCHENSINK, S_PLAYERARROW_EMPTY, S_PLAYERARROW_ROULETTE, @@ -3961,6 +3982,7 @@ typedef enum mobj_type MT_RANDOMITEMPOP, MT_SNEAKERTRAIL, + MT_SPARKLETRAIL, MT_DRIFT, MT_DRIFTSMOKE, @@ -3986,7 +4008,7 @@ typedef enum mobj_type MT_SMOLDERING, // New explosion MT_BOOMPARTICLE, - MT_BLUELIGHTNING, // Size Down stuff + MT_BLUELIGHTNING, // Grow/shrink stuff MT_BLUEEXPLOSION, MT_LIGHTNING, diff --git a/src/k_kart.c b/src/k_kart.c index 2d12c73d9..0cb88519c 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -303,8 +303,8 @@ void K_RegisterKartStuff(void) CV_RegisterVar(&cv_mine); CV_RegisterVar(&cv_ballhog); CV_RegisterVar(&cv_selfpropelledbomb); - CV_RegisterVar(&cv_sizeup); - CV_RegisterVar(&cv_sizedown); + CV_RegisterVar(&cv_grow); + CV_RegisterVar(&cv_shrink); CV_RegisterVar(&cv_lightningshield); CV_RegisterVar(&cv_hyudoro); CV_RegisterVar(&cv_pogospring); @@ -352,8 +352,8 @@ static INT32 K_KartItemOddsDistance_Retro[NUMKARTRESULTS][9] = /*Mine*/ { 0, 0, 1, 2, 1, 0, 0, 0, 0 }, // Mine /*Ballhog*/ { 0, 0, 1, 2, 1, 0, 0, 0, 0 }, // Ballhog /*Self-Propelled Bomb*/ { 0, 0, 0, 0, 0, 1, 2, 0, 0 }, // Self-Propelled Bomb - /*Size Up*/ { 0, 0, 0, 0, 0, 1, 1, 0, 0 }, // Size Up - /*Size Down*/ { 0, 0, 0, 0, 0, 0, 1, 2, 0 }, // Size Down + /*Grow*/ { 0, 0, 0, 0, 0, 1, 1, 0, 0 }, // Grow + /*Shrink*/ { 0, 0, 0, 0, 0, 0, 1, 2, 0 }, // Shrink /*Lightning Shield*/ { 0, 1, 2, 0, 0, 0, 0, 0, 0 }, // Lightning Shield /*Hyudoro*/ { 0, 0, 2, 2, 1, 0, 0, 0, 0 }, // Hyudoro /*Pogo Spring*/ { 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // Pogo Spring @@ -378,8 +378,8 @@ static INT32 K_KartItemOddsBalloons[NUMKARTRESULTS][5] = /*Mine*/ { 0, 3, 3, 0, 0 }, // Mine /*Ballhog*/ { 0, 3, 3, 0, 0 }, // Ballhog /*Self-Propelled Bomb*/ { 0, 0, 0, 0, 0 }, // Self-Propelled Bomb - /*Size Up*/ { 1, 1, 0, 0, 0 }, // Size Up - /*Size Down*/ { 0, 0, 0, 0, 0 }, // Size Down + /*Grow*/ { 1, 1, 0, 0, 0 }, // Grow + /*Shrink*/ { 0, 0, 0, 0, 0 }, // Shrink /*Lightning Shield*/ { 0, 0, 0, 0, 0 }, // Lightning Shield /*Hyudoro*/ { 0, 1, 1, 1, 0 }, // Hyudoro /*Pogo Spring*/ { 0, 0, 3, 2, 1 }, // Pogo Spring @@ -490,13 +490,13 @@ static INT32 K_KartGetItemOdds(UINT8 pos, INT8 item, player_t *player) if (franticitems) newodds *= 2; if (!cv_selfpropelledbomb.value || pexiting <= 0) newodds = 0; break; - case KITEM_SIZEUP: + case KITEM_GROW: if (franticitems) newodds *= 2; - if (!cv_sizeup.value || player->kartstuff[k_poweritemtimer]) newodds = 0; + if (!cv_grow.value || player->kartstuff[k_poweritemtimer]) newodds = 0; break; - case KITEM_SIZEDOWN: + case KITEM_SHRINK: if (franticitems) newodds *= 2; - if (!cv_sizedown.value || pingame-1 <= pexiting) newodds = 0; + if (!cv_shrink.value || pingame-1 <= pexiting) newodds = 0; break; case KITEM_LIGHTNINGSHIELD: if (franticitems) newodds *= 2; @@ -696,8 +696,8 @@ static void K_KartItemRouletteByDistance(player_t *player, ticcmd_t *cmd) SETITEMRESULT(useodds, KITEM_MINE); // Mine SETITEMRESULT(useodds, KITEM_BALLHOG); // Ballhog SETITEMRESULT(useodds, KITEM_SPB); // Self-Propelled Bomb - SETITEMRESULT(useodds, KITEM_SIZEUP); // Size Up - SETITEMRESULT(useodds, KITEM_SIZEDOWN); // Size Down + SETITEMRESULT(useodds, KITEM_GROW); // Grow + SETITEMRESULT(useodds, KITEM_SHRINK); // Shrink SETITEMRESULT(useodds, KITEM_LIGHTNINGSHIELD); // Lightning Shield SETITEMRESULT(useodds, KITEM_HYUDORO); // Hyudoro SETITEMRESULT(useodds, KITEM_POGOSPRING); // Pogo Spring @@ -912,7 +912,7 @@ static void K_UpdateOffroad(player_t *player) // A higher kart weight means you can stay offroad for longer without losing speed offroad = (1872 + 5*156 - kartweight*156)*offroadstrength; - //if (player->kartstuff[k_growshrinktimer] > 1) // sizeup slows down half as fast + //if (player->kartstuff[k_growshrinktimer] > 1) // grow slows down half as fast // offroad /= 2; player->kartstuff[k_offroad] += offroad; @@ -1206,7 +1206,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) S_StopSoundByID(player->mo, sfx_star); // Stop it } - // And the same for the size up SFX + // And the same for the grow SFX if (!(player->mo->health > 0 && player->mo->player->kartstuff[k_growshrinktimer] > 0)) // If you aren't big { if (S_SoundPlaying(player->mo, sfx_mega)) // But the sound is playing @@ -1290,7 +1290,7 @@ static fixed_t K_GetKartBoostPower(player_t *player, boolean speed) if (player->kartstuff[k_growshrinktimer] > 1 && (player->kartstuff[k_growshrinktimer] > ((itemtime + TICRATE*2) - 25) || player->kartstuff[k_growshrinktimer] <= 26)) - { // Size Up - Mid-size + { // Grow - Mid-size if (speed) { boostvalue = max(boostvalue, FRACUNIT/8); // + 12.5% @@ -1298,7 +1298,7 @@ static fixed_t K_GetKartBoostPower(player_t *player, boolean speed) } if (player->kartstuff[k_growshrinktimer] < ((itemtime + TICRATE*2) - 25) && player->kartstuff[k_growshrinktimer] > 26) - { // Size Up + { // Grow if (speed) { boostvalue = max(boostvalue, FRACUNIT/5); // + 20% @@ -1967,6 +1967,38 @@ void K_SpawnDriftTrail(player_t *player) } } +void K_SpawnSparkleTrail(player_t *player) +{ + const INT32 rad = (player->mo->radius*2)>>FRACBITS; + fixed_t newx, newy, newz; + mobj_t *sparkle; + INT32 i; + + I_Assert(player != NULL); + I_Assert(player->mo != NULL); + I_Assert(!P_MobjWasRemoved(player->mo)); + + for (i = 0; i < 3; i++) + { + newx = player->mo->x + player->mo->momx + (P_RandomRange(-rad, rad)<mo->y + player->mo->momy + (P_RandomRange(-rad, rad)<mo->z + player->mo->momz + (P_RandomRange(0, player->mo->height>>FRACBITS)<target, player->mo); + //sparkle->fuse = 10; + sparkle->destscale = player->mo->scale; + P_SetScale(sparkle, player->mo->scale); + sparkle->eflags = (sparkle->eflags & ~MFE_VERTICALFLIP)|(player->mo->eflags & MFE_VERTICALFLIP); + sparkle->color = player->mo->color; + sparkle->colorized = player->mo->colorized; + } +} + static mobj_t *K_ThrowKartItem(player_t *player, boolean missile, mobjtype_t mapthing, INT32 defaultDir, boolean minethrow) { mobj_t *mo; @@ -2218,7 +2250,7 @@ void K_DoSneaker(player_t *player, boolean doPFlag, boolean startboost) player->kartstuff[k_sounds] = 50; } -static void K_DoSizeDown(player_t *player, boolean spb) +static void K_DoShrink(player_t *player, boolean spb) { mobj_t *mo; thinker_t *think; @@ -2239,7 +2271,8 @@ static void K_DoSizeDown(player_t *player, boolean spb) mo = (mobj_t *)think; - if (mo->type == MT_PLAYER) + if (mo->player && !mo->player->spectator + && mo->player->kartstuff[k_position] > player->kartstuff[k_position]) P_DamageMobj(mo, player->mo, player->mo, spb ? 65 : 64); else continue; @@ -2723,6 +2756,12 @@ void K_MoveKartPlayer(player_t *player, boolean onground) S_ChangeMusicInternal("minvnc", true); if (!cv_kartstarsfx.value && !P_IsLocalPlayer(player)) S_StartSound(player->mo, sfx_star); + if (!player->kartstuff[k_invincibilitytimer]) + { + mobj_t *overlay = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_OVERLAY); + P_SetTarget(&overlay->target, player->mo); + P_SetMobjState(overlay, S_INVULNFLASH1); + } player->kartstuff[k_invincibilitytimer] = itemtime; // Activate it K_PlayTauntSound(player->mo); player->kartstuff[k_itemamount]--; @@ -2996,13 +3035,13 @@ void K_MoveKartPlayer(player_t *player, boolean onground) case KITEM_SPB: if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO) { - K_DoSizeDown(player, true); + K_DoShrink(player, true); player->kartstuff[k_itemamount]--; } break; - case KITEM_SIZEUP: + case KITEM_GROW: if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO - && player->kartstuff[k_growshrinktimer] <= 0) // Size Up holds the item box hostage + && player->kartstuff[k_growshrinktimer] <= 0) // Grow holds the item box hostage { if (P_IsLocalPlayer(player) && !player->exiting) S_ChangeMusicInternal("mega", true); @@ -3017,10 +3056,10 @@ void K_MoveKartPlayer(player_t *player, boolean onground) player->kartstuff[k_poweritemtimer] = 10*TICRATE; } break; - case KITEM_SIZEDOWN: + case KITEM_SHRINK: if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO) { - K_DoSizeDown(player, false); + K_DoShrink(player, false); player->kartstuff[k_itemamount]--; } break; @@ -3078,7 +3117,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground) else if (player->kartstuff[k_sneakertimer] == 0 && player->kartstuff[k_boosting] == 1) player->kartstuff[k_boosting] = 0; - // Size Up - Make the player grow! + // Grow - Make the player grow! if (player->kartstuff[k_growshrinktimer] > ((itemtime + TICRATE*2) - 25)) { if (leveltime & 2) @@ -3089,7 +3128,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground) else if (player->kartstuff[k_growshrinktimer] > 26 && player->kartstuff[k_growshrinktimer] <= ((itemtime + TICRATE*2) - 25)) player->mo->destscale = (mapheaderinfo[gamemap-1]->mobj_scale)*3/2; - // Size Up - Back to normal... + // Grow - Back to normal... else if (player->kartstuff[k_growshrinktimer] > 1 && player->kartstuff[k_growshrinktimer] <= 26) { @@ -3103,7 +3142,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground) if ((gametype != GT_RACE) && (player->kartstuff[k_itemtype] == KITEM_INVINCIBILITY - || player->kartstuff[k_itemtype] == KITEM_SIZEUP + || player->kartstuff[k_itemtype] == KITEM_GROW || player->kartstuff[k_invincibilitytimer] || player->kartstuff[k_growshrinktimer] > 0)) player->kartstuff[k_poweritemtimer] = 10*TICRATE; @@ -3212,7 +3251,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground) } // Squishing - // If a Size Up player or a Thwomp crushes you, get flattened instead of being killed. + // If a Grow player or a Thwomp crushes you, get flattened instead of being killed. if (player->kartstuff[k_squishedtimer] <= 0) { @@ -3364,20 +3403,15 @@ static patch_t *kp_jawz; static patch_t *kp_mine; static patch_t *kp_ballhog; static patch_t *kp_selfpropelledbomb; -static patch_t *kp_sizeup; -static patch_t *kp_sizedown; +static patch_t *kp_grow; +static patch_t *kp_shrink; static patch_t *kp_lightningshield; static patch_t *kp_hyudoro; static patch_t *kp_pogospring; static patch_t *kp_kitchensink; static patch_t *kp_sadface; -static patch_t *kp_check; -static patch_t *kp_checkw; -static patch_t *kp_checkinvuln; -static patch_t *kp_checkinvulnw; -static patch_t *kp_checksizeup; -static patch_t *kp_checksizeupw; +static patch_t *kp_check[6]; void K_LoadKartHUDGraphics(void) { @@ -3486,8 +3520,8 @@ void K_LoadKartHUDGraphics(void) kp_mine = W_CachePatchName("K_ITMINE", PU_HUDGFX); kp_ballhog = W_CachePatchName("K_ITBHOG", PU_HUDGFX); kp_selfpropelledbomb = W_CachePatchName("K_ITSPB", PU_HUDGFX); - kp_sizeup = W_CachePatchName("K_ITSUP", PU_HUDGFX); - kp_sizedown = W_CachePatchName("K_ITSDWN", PU_HUDGFX); + kp_grow = W_CachePatchName("K_ITGROW", PU_HUDGFX); + kp_shrink = W_CachePatchName("K_ITSHRK", PU_HUDGFX); kp_lightningshield = W_CachePatchName("K_ITLITS", PU_HUDGFX); kp_hyudoro = W_CachePatchName("K_ITHYUD", PU_HUDGFX); kp_pogospring = W_CachePatchName("K_ITPOGO", PU_HUDGFX); @@ -3495,12 +3529,11 @@ void K_LoadKartHUDGraphics(void) kp_sadface = W_CachePatchName("K_ITSAD", PU_HUDGFX); // CHECK indicators - kp_check = W_CachePatchName("K_CHECK1", PU_HUDGFX); - kp_checkw = W_CachePatchName("K_CHECK2", PU_HUDGFX); - kp_checkinvuln = W_CachePatchName("K_CHECK3", PU_HUDGFX); - kp_checkinvulnw = W_CachePatchName("K_CHECK4", PU_HUDGFX); - kp_checksizeup = W_CachePatchName("K_CHECK5", PU_HUDGFX); - kp_checksizeupw = W_CachePatchName("K_CHECK6", PU_HUDGFX); + for (i = 0; i < 6; i++) + { + sprintf(buffer, "K_CHECK%d", i+1); + kp_check[i] = (patch_t *) W_CachePatchName(buffer, PU_HUDGFX); + } } //} @@ -3672,12 +3705,12 @@ static void K_drawKartItem(void) case 1: localpatch = kp_banana; break; // Banana case 2: localpatch = kp_orbinaut; break; // Orbinaut case 3: localpatch = kp_mine; break; // Mine - case 4: localpatch = kp_sizeup; break; // Size Up + case 4: localpatch = kp_grow; break; // Grow case 5: localpatch = kp_hyudoro; break; // Hyudoro case 6: localpatch = kp_rocketsneaker; break; // Rocket Sneaker case 7: localpatch = kp_jawz; break; // Jawz case 8: localpatch = kp_selfpropelledbomb; break; // Self-Propelled Bomb - case 9: localpatch = kp_sizedown; break; // Size Down + case 9: localpatch = kp_shrink; break; // Shrink case 10: localpatch = localinv; break; // Invincibility case 11: localpatch = kp_fakeitem; break; // Fake Item case 12: localpatch = kp_ballhog; break; // Ballhog @@ -3710,7 +3743,7 @@ static void K_drawKartItem(void) else if (stplyr->kartstuff[k_growshrinktimer] > 1) { if (leveltime & 1) - localpatch = kp_sizeup; + localpatch = kp_grow; else if (!(leveltime & 1)) localpatch = kp_nodraw; } @@ -3738,8 +3771,8 @@ static void K_drawKartItem(void) case KITEM_MINE: localpatch = kp_mine; break; case KITEM_BALLHOG: localpatch = kp_ballhog; break; case KITEM_SPB: localpatch = kp_selfpropelledbomb; break; - case KITEM_SIZEUP: localpatch = kp_sizeup; break; - case KITEM_SIZEDOWN: localpatch = kp_sizedown; break; + case KITEM_GROW: localpatch = kp_grow; break; + case KITEM_SHRINK: localpatch = kp_shrink; break; case KITEM_LIGHTNINGSHIELD: localpatch = kp_lightningshield; break; case KITEM_HYUDORO: localpatch = kp_hyudoro; break; case KITEM_POGOSPRING: localpatch = kp_pogospring; break; @@ -4183,11 +4216,11 @@ static void K_drawKartPlayerCheck(void) INT32 i; UINT8 *colormap; INT32 x; - patch_t *localpatch; + UINT8 pnum = 0; INT32 splitflags = K_calcSplitFlags(V_SNAPTOBOTTOM); - if (!(stplyr->mo)) + if (!stplyr->mo || stplyr->spectator) return; if (stplyr->awayviewtics) @@ -4200,27 +4233,18 @@ static void K_drawKartPlayerCheck(void) { if (&players[i] == stplyr) continue; - if (!(players[i].mo)) + if (!playeringame[i] || players[i].spectator) + continue; + if (!players[i].mo) continue; if ((players[i].kartstuff[k_invincibilitytimer] <= 0) && (leveltime & 2)) - { - if (players[i].kartstuff[k_itemtype] == KITEM_SIZEUP || players[i].kartstuff[k_growshrinktimer] > 0) - localpatch = kp_checksizeupw; - else if (players[i].kartstuff[k_itemtype] == KITEM_INVINCIBILITY || players[i].kartstuff[k_invincibilitytimer]) - localpatch = kp_checkinvulnw; - else - localpatch = kp_checkw; - } - else - { - if (players[i].kartstuff[k_itemtype] == KITEM_SIZEUP || players[i].kartstuff[k_growshrinktimer] > 0) - localpatch = kp_checksizeup; - else if (players[i].kartstuff[k_itemtype] == KITEM_INVINCIBILITY || players[i].kartstuff[k_invincibilitytimer]) - localpatch = kp_checkinvuln; - else - localpatch = kp_check; - } + pnum++; // white frames + + if (players[i].kartstuff[k_itemtype] == KITEM_GROW || players[i].kartstuff[k_growshrinktimer] > 0) + pnum += 4; + else if (players[i].kartstuff[k_itemtype] == KITEM_INVINCIBILITY || players[i].kartstuff[k_invincibilitytimer]) + pnum += 2; x = K_FindCheckX(stplyr->mo->x, stplyr->mo->y, stplyr->mo->angle, players[i].mo->x, players[i].mo->y); if (x <= 320 && x >= 0) @@ -4231,7 +4255,7 @@ static void K_drawKartPlayerCheck(void) x = 306; colormap = R_GetTranslationColormap(TC_DEFAULT, players[i].mo->color, 0); - V_DrawMappedPatch(x, CHEK_Y, V_HUDTRANS|splitflags, localpatch, colormap); + V_DrawMappedPatch(x, CHEK_Y, V_HUDTRANS|splitflags, kp_check[pnum], colormap); } } } diff --git a/src/k_kart.h b/src/k_kart.h index 22cdf4f59..5a86c0b69 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -29,6 +29,7 @@ void K_StealBalloon(player_t *player, player_t *victim, boolean force); void K_SpawnKartExplosion(fixed_t x, fixed_t y, fixed_t z, fixed_t radius, INT32 number, mobjtype_t type, angle_t rotangle, boolean spawncenter, boolean ghostit, mobj_t *source); void K_SpawnMineExplosion(mobj_t *source, UINT8 color); void K_SpawnDriftTrail(player_t *player); +void K_SpawnSparkleTrail(player_t *player); void K_DoSneaker(player_t *player, boolean doPFlag, boolean startboost); void K_DoBouncePad(mobj_t *mo, fixed_t vertispeed); boolean K_CheckPlayersRespawnColliding(INT32 playernum, fixed_t x, fixed_t y); diff --git a/src/lua_baselib.c b/src/lua_baselib.c index 21e6573a3..3aeb3358b 100644 --- a/src/lua_baselib.c +++ b/src/lua_baselib.c @@ -2090,6 +2090,16 @@ static int lib_kSpawnDriftTrail(lua_State *L) return 0; } +static int lib_kSpawnSparkleTrail(lua_State *L) +{ + player_t *player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER)); + NOHUD + if (!player) + return LUA_ErrInvalid(L, "player_t"); + K_SpawnDriftTrail(player); + return 0; +} + static int lib_kDoSneaker(lua_State *L) { player_t *player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER)); @@ -2336,6 +2346,7 @@ static luaL_Reg lib[] = { {"K_StealBalloon",lib_kStealBalloon}, {"K_SpawnKartExplosion",lib_kSpawnKartExplosion}, {"K_SpawnDriftTrail",lib_kSpawnDriftTrail}, + {"K_SpawnSparkleTrail",lib_kSpawnSparkleTrail}, {"K_DoSneaker",lib_kDoSneaker}, {"K_DoBouncePad",lib_kDoBouncePad}, {"K_MomentumToFacing",lib_kMomentumToFacing}, diff --git a/src/m_menu.c b/src/m_menu.c index 1fb5d7feb..626b380bd 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -1512,8 +1512,8 @@ static menuitem_t OP_MonitorToggleMenu[] = {IT_STRING | IT_CVAR, NULL, "Mines", &cv_mine, 98}, {IT_STRING | IT_CVAR, NULL, "Ballhogs", &cv_ballhog, 106}, {IT_STRING | IT_CVAR, NULL, "Self-Propelled Bombs",&cv_selfpropelledbomb,114}, - {IT_STRING | IT_CVAR, NULL, "Size Up", &cv_sizeup, 122}, - {IT_STRING | IT_CVAR, NULL, "Size Down", &cv_sizedown, 130}, + {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, "Hyudoros", &cv_hyudoro, 146}, {IT_STRING | IT_CVAR, NULL, "Pogo Springs", &cv_pogospring, 154}, diff --git a/src/p_inter.c b/src/p_inter.c index 47031a6b1..c3f155c55 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -3138,7 +3138,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da player->mo->destscale = 6*FRACUNIT/8; player->kartstuff[k_growshrinktimer] -= (100+20*(16-(player->kartstuff[k_position]))); } - // Size Up? Let's take that away. + // Grow? Let's take that away. if (player->kartstuff[k_growshrinktimer] > 0) { player->kartstuff[k_growshrinktimer] = 2; diff --git a/src/p_mobj.c b/src/p_mobj.c index 526c3e750..41a91299d 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -6117,7 +6117,7 @@ static boolean P_AddShield(mobj_t *thing) } if (shield != SH_FORCE) - { // Regular shields check for themselves only + { // Regular shields check for themselves only if ((shieldtype_t)(thing->target->player->powers[pw_shield] & SH_NOSTACK) != shield) { P_RemoveMobj(thing); @@ -6154,6 +6154,7 @@ void P_RunOverlays(void) if (!mo->target) continue; + if (!splitscreen /*&& rendermode != render_soft*/) { angle_t viewingangle; @@ -6487,7 +6488,10 @@ void P_MobjThinker(mobj_t *mobj) // Don't touch my fuse! return; case MT_OVERLAY: - if (!mobj->target) + if ((!mobj->target) + || ((mobj->state == &states[S_INVULNFLASH1] || mobj->state == &states[S_INVULNFLASH2] // SRB2kart: BAD HACK X_X + || mobj->state == &states[S_INVULNFLASH3] || mobj->state == &states[S_INVULNFLASH4]) + && mobj->target->player && mobj->target->player->kartstuff[k_invincibilitytimer] == 0)) { P_RemoveMobj(mobj); return; @@ -6852,7 +6856,7 @@ void P_MobjThinker(mobj_t *mobj) switch(mobj->target->player->kartstuff[k_itemtype]) { case KITEM_KITCHENSINK: P_SetMobjState(mobj, S_PLAYERARROW_KITCHENSINK); break; - case KITEM_SIZEUP: P_SetMobjState(mobj, S_PLAYERARROW_SIZEUP); break; + case KITEM_GROW: P_SetMobjState(mobj, S_PLAYERARROW_GROW); break; case KITEM_INVINCIBILITY: P_SetMobjState(mobj, S_PLAYERARROW_INVINCIBILITY); break; case KITEM_ORBINAUT: P_SetMobjState(mobj, S_PLAYERARROW_ORBINAUT); break; case KITEM_BALLHOG: P_SetMobjState(mobj, S_PLAYERARROW_BALLHOG); break; @@ -6868,7 +6872,7 @@ void P_MobjThinker(mobj_t *mobj) } if (mobj->target->player->kartstuff[k_growshrinktimer] > 1 && (leveltime & 1)) - P_SetMobjState(mobj, S_PLAYERARROW_SIZEUP); + P_SetMobjState(mobj, S_PLAYERARROW_GROW); else if (mobj->target->player->kartstuff[k_growshrinktimer] > 1 && !(leveltime & 1)) P_SetMobjState(mobj, S_PLAYERARROW_EMPTY); // S_INVISIBLE @@ -8016,6 +8020,15 @@ void P_MobjThinker(mobj_t *mobj) mobj->tracer->y, mobj->tracer->floorz, SPLATDRAWMODE_SHADE); #endif break; + /*case MT_SPARKLETRAIL: + if (!mobj->target) + { + P_RemoveMobj(mobj); + return; + } + mobj->color = mobj->target->color; + mobj->colorized = mobj->target->colorized; + break;*/ case MT_SPINFIRE: case MT_SNEAKERTRAIL: if (mobj->eflags & MFE_VERTICALFLIP) diff --git a/src/p_user.c b/src/p_user.c index f22fad135..18832d6fd 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -1134,7 +1134,7 @@ void P_RestoreMusic(player_t *player) // SRB2kart - We have some different powers than vanilla, some of which tweak the music. if (!player->exiting) { - // Item - Size Up + // Item - Grow if (player->kartstuff[k_growshrinktimer] > 1) S_ChangeMusicInternal("mega", true); @@ -2268,12 +2268,12 @@ static void P_CheckInvincibilityTimer(player_t *player) //if (mariomode && !player->powers[pw_super]) // SRB2kart player->mo->color = (UINT8)(1 + (leveltime % (MAXSKINCOLORS-1))); - if (leveltime % (TICRATE/7) == 0) + /*if (leveltime % (TICRATE/7) == 0) { mobj_t *sparkle = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_IVSP); sparkle->destscale = player->mo->scale; P_SetScale(sparkle, player->mo->scale); - } + }*/ // Resume normal music stuff. if (player->powers[pw_invulnerability] == 1 || player->kartstuff[k_invincibilitytimer] == 1) @@ -7074,6 +7074,8 @@ static void P_MovePlayer(player_t *player) // SRB2kart - Drifting smoke and fire if ((player->kartstuff[k_drift] != 0 || player->kartstuff[k_sneakertimer] > 0) && onground && (leveltime & 1)) K_SpawnDriftTrail(player); + if (player->kartstuff[k_invincibilitytimer] > 0) + K_SpawnSparkleTrail(player); /* // SRB2kart - nadah // If the player isn't on the ground, make sure they aren't in a "starting dash" position.