From ce5abdc6e361ea075eed701563ebcb6f4ae16d1b Mon Sep 17 00:00:00 2001 From: Latapostrophe Date: Sun, 16 Sep 2018 10:31:24 +0200 Subject: [PATCH 1/6] Thunder Shield effect hardcode. --- src/dehacked.c | 1 + src/info.c | 53 ++++++++++++++++++++++++++++++- src/info.h | 54 +++++++++++++++++++++++++++++++ src/k_kart.c | 86 ++++++++++++++++++++++++++++++++++++++------------ src/k_kart.h | 2 +- src/p_enemy.c | 20 ++++++++++++ 6 files changed, 194 insertions(+), 22 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index 05be2583..040c403b 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -1828,6 +1828,7 @@ static actionpointer_t actionpointers[] = {{A_JawzExplode}, "A_JAWZEXPLODE"}, // SRB2kart {{A_MineExplode}, "A_MINEEXPLODE"}, // SRB2kart {{A_BallhogExplode}, "A_BALLHOGEXPLODE"}, // SRB2kart + {{A_LightningFollowPlayer}, "A_LIGHTNINGFOLLOWPLAYER"}, //SRB2kart {{A_OrbitNights}, "A_ORBITNIGHTS"}, {{A_GhostMe}, "A_GHOSTME"}, {{A_SetObjectState}, "A_SETOBJECTSTATE"}, diff --git a/src/info.c b/src/info.c index 74a7a4d3..a9c86c03 100644 --- a/src/info.c +++ b/src/info.c @@ -60,7 +60,7 @@ char sprnames[NUMSPRITES + 1][5] = "BHBM","BLIG","LIGH","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","ITMO", - "ITMI","ITMN","WANT","PBOM","RETI","VIEW" + "ITMI","ITMN","WANT","PBOM","RETI","VIEW","KSPK","LZI1","LZI2","KLIT" }; // Doesn't work with g++, needs actionf_p1 (don't modify this comment) @@ -3016,6 +3016,57 @@ state_t states[NUMSTATES] = {SPR_RNDM, FF_ANIMATE, -1, {NULL}, 23, 3, S_NULL}, // S_PLAYERITEM {SPR_PBOM, 4, -1, {NULL}, 0, 0, S_NULL}, // S_KARMAWHEEL + + // Oh no it's annoying lightning states....... + // Lightning Sparks (it's the ones we'll use for the radius) + {SPR_KSPK, FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_KSPARK2}, // S_KSPARK1 + {SPR_NULL, FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_KSPARK3}, // S_KSPARK2 + {SPR_KSPK, FF_FULLBRIGHT|1, 2, {NULL}, 0, 0, S_KSPARK4}, // S_KSPARK3 + {SPR_NULL, FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_KSPARK5}, // S_KSPARK4 + {SPR_KSPK, FF_FULLBRIGHT|2, 2, {NULL}, 0, 0, S_KSPARK6}, // S_KSPARK5 + {SPR_NULL, FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_KSPARK7}, // S_KSPARK6 + {SPR_KSPK, FF_FULLBRIGHT|3, 2, {NULL}, 0, 0, S_KSPARK8}, // S_KSPARK7 + {SPR_NULL, FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_KSPARK9}, // S_KSPARK8 + {SPR_KSPK, FF_TRANS40|FF_FULLBRIGHT|4, 2, {NULL}, 0, 0, S_KSPARK10}, // S_KSPARK9 + {SPR_NULL, FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_KSPARK11}, // S_KSPARK10 + {SPR_KSPK, FF_TRANS50|FF_FULLBRIGHT|5, 2, {NULL}, 0, 0, S_KSPARK12}, // S_KSPARK11 + {SPR_NULL, FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_KSPARK13}, // S_KSPARK12 + {SPR_KSPK, FF_TRANS60|FF_FULLBRIGHT|6, 2, {NULL}, 0, 0, S_NULL}, // S_KSPARK13 + + // The straight bolt... + {SPR_LZI1, FF_FULLBRIGHT, 2, {A_LightningFollowPlayer}, 0, 0, S_LZIO12}, // S_LZIO11 + {SPR_NULL, FF_FULLBRIGHT, 2, {A_LightningFollowPlayer}, 0, 0, S_LZIO13}, // S_LZIO12 + {SPR_LZI1, FF_FULLBRIGHT, 2, {A_LightningFollowPlayer}, 0, 0, S_LZIO14}, // S_LZIO13 + {SPR_LZI1, FF_FULLBRIGHT|1, 2, {A_LightningFollowPlayer}, 0, 0, S_LZIO15}, // S_LZIO14 + {SPR_NULL, FF_FULLBRIGHT, 4, {A_LightningFollowPlayer}, 0, 0, S_LZIO16}, // S_LZIO15 + {SPR_LZI1, FF_FULLBRIGHT|1, 2, {A_LightningFollowPlayer}, 0, 0, S_LZIO17}, // S_LZIO16 + {SPR_NULL, 0, 2, {A_LightningFollowPlayer}, 0, 0, S_LZIO18}, // S_LZIO17 + {SPR_LZI1, FF_TRANS50|FF_FULLBRIGHT, 2, {A_LightningFollowPlayer}, 0, 0, S_LZIO19}, // S_LZIO18 + {SPR_LZI1, FF_TRANS70|FF_FULLBRIGHT, 2, {A_LightningFollowPlayer}, 0, 0, S_NULL}, // S_LZIO19 + + {SPR_NULL, FF_FULLBRIGHT, 6, {A_LightningFollowPlayer}, 0, 0, S_LZIO22}, // S_LZIO21 + {SPR_LZI2, FF_FULLBRIGHT|1, 2, {A_LightningFollowPlayer}, 0, 0, S_LZIO23}, // S_LZIO22 + {SPR_LZI2, FF_FULLBRIGHT, 2, {A_LightningFollowPlayer}, 0, 0, S_LZIO24}, // S_LZIO23 + {SPR_NULL, FF_FULLBRIGHT, 2, {A_LightningFollowPlayer}, 0, 0, S_LZIO25}, // S_LZIO24 + {SPR_NULL, FF_FULLBRIGHT, 2, {A_LightningFollowPlayer}, 0, 0, S_LZIO26}, // S_LZIO25 + {SPR_NULL, FF_FULLBRIGHT, 2, {A_LightningFollowPlayer}, 0, 0, S_LZIO27}, // S_LZIO26 + {SPR_LZI2, FF_TRANS30|FF_FULLBRIGHT|2, 2, {A_LightningFollowPlayer}, 0, 0, S_LZIO28}, // S_LZIO27 + {SPR_NULL, 0, 4, {A_LightningFollowPlayer}, 0, 0, S_LZIO29}, // S_LZIO28 + {SPR_LZI2, FF_TRANS70|FF_FULLBRIGHT, 2, {A_LightningFollowPlayer}, 0, 0, S_NULL}, // S_LZIO29 + + // The slanted bolt. Man these states are boring as all heck to do. + {SPR_KLIT, FF_FULLBRIGHT|FF_PAPERSPRITE, 2, {A_LightningFollowPlayer}, 0, 0, S_KLIT2}, // S_KLIT1 + {SPR_NULL, FF_FULLBRIGHT|FF_PAPERSPRITE, 2, {A_LightningFollowPlayer}, 0, 0, S_KLIT3}, // S_KLIT2 + {SPR_KLIT, FF_FULLBRIGHT|FF_PAPERSPRITE|1, 2, {A_LightningFollowPlayer}, 0, 0, S_KLIT4}, // S_KLIT3 + {SPR_NULL, FF_FULLBRIGHT|FF_PAPERSPRITE, 2, {A_LightningFollowPlayer}, 0, 0, S_KLIT5}, // S_KLIT4 + {SPR_KLIT, FF_FULLBRIGHT|FF_PAPERSPRITE|2, 2, {A_LightningFollowPlayer}, 0, 0, S_KLIT6}, // S_KLIT5 + {SPR_NULL, FF_FULLBRIGHT|FF_PAPERSPRITE, 2, {A_LightningFollowPlayer}, 0, 0, S_KLIT7}, // S_KLIT6 + {SPR_KLIT, FF_FULLBRIGHT|FF_PAPERSPRITE|3, 2, {A_LightningFollowPlayer}, 0, 0, S_KLIT8}, // S_KLIT7 + {SPR_NULL, FF_FULLBRIGHT|FF_PAPERSPRITE, 2, {A_LightningFollowPlayer}, 0, 0, S_KLIT9}, // S_KLIT8 + {SPR_KLIT, FF_FULLBRIGHT|FF_PAPERSPRITE|4, 2, {A_LightningFollowPlayer}, 0, 0, S_KLIT10}, // S_KLIT9 + {SPR_NULL, FF_FULLBRIGHT|FF_PAPERSPRITE, 2, {A_LightningFollowPlayer}, 0, 0, S_KLIT11}, // S_KLIT10 + {SPR_KLIT, FF_FULLBRIGHT|FF_PAPERSPRITE|5, 2, {A_LightningFollowPlayer}, 0, 0, S_KLIT12}, // S_KLIT11 + {SPR_NULL, FF_FULLBRIGHT|FF_PAPERSPRITE, 2, {A_LightningFollowPlayer}, 0, 0, S_KLIT1}, // S_KLIT12 #ifdef SEENAMES {SPR_NULL, 0, 1, {NULL}, 0, 0, S_NULL}, // S_NAMECHECK diff --git a/src/info.h b/src/info.h index 8d27944f..b5b12d27 100644 --- a/src/info.h +++ b/src/info.h @@ -168,6 +168,7 @@ void A_JawzChase(); // SRB2kart void A_JawzExplode(); // SRB2kart void A_MineExplode(); // SRB2kart void A_BallhogExplode(); // SRB2kart +void A_LightningFollowPlayer(); // SRB2kart: Lightning shield effect player chasing void A_OrbitNights(); void A_GhostMe(); void A_SetObjectState(); @@ -643,6 +644,11 @@ typedef enum sprite SPR_RETI, // player reticule SPR_VIEW, // First person view sprites; this is a sprite so that it can be replaced by a specialized MD2 draw! + + SPR_KSPK, // Spark radius for the lightning shield + SPR_LZI1, // Lightning that falls on the player for lightning shield + SPR_LZI2, // ditto + SPR_KLIT, // You have a twisted mind. But this actually is for the diagonal lightning. SPR_FIRSTFREESLOT, SPR_LASTFREESLOT = SPR_FIRSTFREESLOT + NUMSPRITEFREESLOTS - 1, @@ -3556,6 +3562,54 @@ typedef enum state S_PLAYERITEM, S_KARMAWHEEL, + + // Lightning shield use stuff; + S_KSPARK1, // Sparkling Radius + S_KSPARK2, + S_KSPARK3, + S_KSPARK4, + S_KSPARK5, + S_KSPARK6, + S_KSPARK7, + S_KSPARK8, + S_KSPARK9, + S_KSPARK10, + S_KSPARK11, + S_KSPARK12, + S_KSPARK13, // ... that's an awful lot. + + S_LZIO11, // Straight lightning bolt + S_LZIO12, + S_LZIO13, + S_LZIO14, + S_LZIO15, + S_LZIO16, + S_LZIO17, + S_LZIO18, + S_LZIO19, + + S_LZIO21, // Straight lightning bolt (flipped) + S_LZIO22, + S_LZIO23, + S_LZIO24, + S_LZIO25, + S_LZIO26, + S_LZIO27, + S_LZIO28, + S_LZIO29, + + S_KLIT1, // Diagonal lightning. No, it not being straight doesn't make it gay. + S_KLIT2, + S_KLIT3, + S_KLIT4, + S_KLIT5, + S_KLIT6, + S_KLIT7, + S_KLIT8, + S_KLIT9, + S_KLIT10, + S_KLIT11, + S_KLIT12, #ifdef SEENAMES S_NAMECHECK, diff --git a/src/k_kart.c b/src/k_kart.c index 94cdc399..755f8a92 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -2706,11 +2706,57 @@ static mobj_t *K_ThrowKartItem(player_t *player, boolean missile, mobjtype_t map return mo; } +INT32 LightningRadius = 320; + static void K_DoThunderShield(player_t *player) { + mobj_t *mo; + int i = 0; + fixed_t sx; + fixed_t sy; + S_StartSound(player->mo, sfx_s3k45); //player->kartstuff[k_thunderanim] = 35; P_NukeEnemies(player->mo, player->mo, RING_DIST/4); + + // spawn vertical bolt + mo = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_THOK); + P_SetTarget(&mo->target, player->mo); + P_SetMobjState(mo, S_LZIO11); + mo->color = SKINCOLOR_TEAL; + mo->scale = player->mo->scale*3 + (player->mo->scale/2); + + mo = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_THOK); + P_SetTarget(&mo->target, player->mo); + P_SetMobjState(mo, S_LZIO21); + mo->color = SKINCOLOR_CYAN; + mo->scale = player->mo->scale*3 + (player->mo->scale/2); + + // spawn horizontal bolts; + for (i=0; i<7; i++) + { + mo = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_THOK); + mo->angle = P_RandomRange(0, 359)*ANG1; + mo->fuse = P_RandomRange(20, 50); + P_SetTarget(&mo->target, player->mo); + P_SetMobjState(mo, S_KLIT1); + } + + // spawn the radius thing: + /*x = source->x + source->momx + FixedMul(finalspeed, FINECOSINE(an>>ANGLETOFINESHIFT)); + y = source->y + source->momy + FixedMul(finalspeed, FINESINE(an>>ANGLETOFINESHIFT));*/ + + angle_t an = ANGLE_22h; + + for (i=0; i<15; i++) + { + sx = player->mo->x + FixedMul((player->mo->scale*LightningRadius), FINECOSINE((an*i)>>ANGLETOFINESHIFT)); + sy = player->mo->y + FixedMul((player->mo->scale*LightningRadius), FINESINE((an*i)>>ANGLETOFINESHIFT)); + mo = P_SpawnMobj(sx, sy, player->mo->z, MT_THOK); + mo->scale = player->mo->scale*3; + P_SetMobjState(mo, S_KSPARK1); + } + } static void K_DoHyudoroSteal(player_t *player) @@ -5179,52 +5225,52 @@ void K_LoadKartHUDGraphics(void) } // For the item toggle menu -const char *K_GetItemPatch(UINT8 item, boolean small) +const char *K_GetItemPatch(UINT8 item, boolean smoll) { switch (item) { case KITEM_SNEAKER: case KRITEM_TRIPLESNEAKER: - return (small ? "K_ISSHOE" : "K_ITSHOE"); + return (smoll ? "K_ISSHOE" : "K_ITSHOE"); case KITEM_ROCKETSNEAKER: - return (small ? "K_ISRSHE" : "K_ITRSHE"); + return (smoll ? "K_ISRSHE" : "K_ITRSHE"); case KITEM_INVINCIBILITY: - return (small ? "K_ISINV1" : "K_ITINV1"); + return (smoll ? "K_ISINV1" : "K_ITINV1"); case KITEM_BANANA: case KRITEM_TRIPLEBANANA: case KRITEM_TENFOLDBANANA: - return (small ? "K_ISBANA" : "K_ITBANA"); + return (smoll ? "K_ISBANA" : "K_ITBANA"); case KITEM_EGGMAN: - return (small ? "K_ISEGGM" : "K_ITEGGM"); + return (smoll ? "K_ISEGGM" : "K_ITEGGM"); case KITEM_ORBINAUT: - return (small ? "K_ISORBN" : "K_ITORB1"); + return (smoll ? "K_ISORBN" : "K_ITORB1"); case KITEM_JAWZ: case KRITEM_DUALJAWZ: - return (small ? "K_ISJAWZ" : "K_ITJAWZ"); + return (smoll ? "K_ISJAWZ" : "K_ITJAWZ"); case KITEM_MINE: - return (small ? "K_ISMINE" : "K_ITMINE"); + return (smoll ? "K_ISMINE" : "K_ITMINE"); case KITEM_BALLHOG: - return (small ? "K_ISBHOG" : "K_ITBHOG"); + return (smoll ? "K_ISBHOG" : "K_ITBHOG"); case KITEM_SPB: - return (small ? "K_ISSPB" : "K_ITSPB"); + return (smoll ? "K_ISSPB" : "K_ITSPB"); case KITEM_GROW: - return (small ? "K_ISGROW" : "K_ITGROW"); + return (smoll ? "K_ISGROW" : "K_ITGROW"); case KITEM_SHRINK: - return (small ? "K_ISSHRK" : "K_ITSHRK"); + return (smoll ? "K_ISSHRK" : "K_ITSHRK"); case KITEM_THUNDERSHIELD: - return (small ? "K_ISTHNS" : "K_ITTHNS"); + return (smoll ? "K_ISTHNS" : "K_ITTHNS"); case KITEM_HYUDORO: - return (small ? "K_ISHYUD" : "K_ITHYUD"); + return (smoll ? "K_ISHYUD" : "K_ITHYUD"); case KITEM_POGOSPRING: - return (small ? "K_ISPOGO" : "K_ITPOGO"); + return (smoll ? "K_ISPOGO" : "K_ITPOGO"); case KITEM_KITCHENSINK: - return (small ? "K_ISSINK" : "K_ITSINK"); + return (smoll ? "K_ISSINK" : "K_ITSINK"); case KRITEM_TRIPLEORBINAUT: - return (small ? "K_ISORBN" : "K_ITORB3"); + return (smoll ? "K_ISORBN" : "K_ITORB3"); case KRITEM_QUADORBINAUT: - return (small ? "K_ISORBN" : "K_ITORB4"); + return (smoll ? "K_ISORBN" : "K_ITORB4"); default: - return (small ? "K_ISSAD" : "K_ITSAD"); + return (smoll ? "K_ISSAD" : "K_ITSAD"); } } diff --git a/src/k_kart.h b/src/k_kart.h index 9865d373..8a30537c 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -57,7 +57,7 @@ void K_CalculateBattleWanted(void); void K_CheckBumpers(void); void K_CheckSpectateStatus(void); -const char *K_GetItemPatch(UINT8 item, boolean small); +const char *K_GetItemPatch(UINT8 item, boolean smoll); INT32 K_calcSplitFlags(INT32 snapflags); void K_LoadKartHUDGraphics(void); fixed_t K_FindCheckX(fixed_t px, fixed_t py, angle_t ang, fixed_t mx, fixed_t my); diff --git a/src/p_enemy.c b/src/p_enemy.c index 83011674..74feba68 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -192,6 +192,7 @@ void A_JawzChase(mobj_t *actor); // SRB2kart void A_JawzExplode(mobj_t *actor); // SRB2kart void A_MineExplode(mobj_t *actor); // SRB2kart void A_BallhogExplode(mobj_t *actor); // SRB2kart +void A_LightningFollowPlayer(mobj_t *actor); // SRB2kart void A_OrbitNights(mobj_t *actor); void A_GhostMe(mobj_t *actor); void A_SetObjectState(mobj_t *actor); @@ -8313,6 +8314,25 @@ void A_BallhogExplode(mobj_t *actor) S_StartSound(mo2, actor->info->deathsound); return; } + +// A_LightningFollowPlayer: +// Dumb simple function that gives a mobj its target's momentums without updating its angle. +void A_LightningFollowPlayer(mobj_t *actor) +{ +#ifdef HAVE_BLUA + if (LUA_CallAction("A_LightningFollowPlayer", actor)) + return; +#endif + if (actor->target) + { + P_TeleportMove(actor, actor->target->x, actor->target->y, actor->target->z); + actor->momx = actor->target->momx; + actor->momy = actor->target->momy; + actor->momz = actor->target->momz; // Give momentum since we don't teleport to our player literally every frame. + } + return; +} + //} // Function: A_OrbitNights From 09287df89084e125a1d1e5926e9cda9009a0030b Mon Sep 17 00:00:00 2001 From: Latapostrophe Date: Sun, 16 Sep 2018 11:16:30 +0200 Subject: [PATCH 2/6] Radius is now a define --- src/k_kart.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 755f8a92..d9365752 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -2706,7 +2706,7 @@ static mobj_t *K_ThrowKartItem(player_t *player, boolean missile, mobjtype_t map return mo; } -INT32 LightningRadius = 320; +#define THUNDERRADIUS 320 static void K_DoThunderShield(player_t *player) { @@ -2742,21 +2742,16 @@ static void K_DoThunderShield(player_t *player) P_SetMobjState(mo, S_KLIT1); } - // spawn the radius thing: - /*x = source->x + source->momx + FixedMul(finalspeed, FINECOSINE(an>>ANGLETOFINESHIFT)); - y = source->y + source->momy + FixedMul(finalspeed, FINESINE(an>>ANGLETOFINESHIFT));*/ - + // spawn the radius thing: angle_t an = ANGLE_22h; - for (i=0; i<15; i++) { - sx = player->mo->x + FixedMul((player->mo->scale*LightningRadius), FINECOSINE((an*i)>>ANGLETOFINESHIFT)); - sy = player->mo->y + FixedMul((player->mo->scale*LightningRadius), FINESINE((an*i)>>ANGLETOFINESHIFT)); + sx = player->mo->x + FixedMul((player->mo->scale*THUNDERRADIUS), FINECOSINE((an*i)>>ANGLETOFINESHIFT)); + sy = player->mo->y + FixedMul((player->mo->scale*THUNDERRADIUS), FINESINE((an*i)>>ANGLETOFINESHIFT)); mo = P_SpawnMobj(sx, sy, player->mo->z, MT_THOK); mo->scale = player->mo->scale*3; P_SetMobjState(mo, S_KSPARK1); } - } static void K_DoHyudoroSteal(player_t *player) From 73c66e3bc49eb17547dc6aa6aff2f864a387e968 Mon Sep 17 00:00:00 2001 From: Latapostrophe Date: Thu, 20 Sep 2018 18:31:38 +0200 Subject: [PATCH 3/6] Spark radius now follows players --- src/info.c | 26 +++++++++++++------------- src/k_kart.c | 3 +++ src/p_enemy.c | 11 ++++++++++- 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/src/info.c b/src/info.c index a9c86c03..4bc35d4c 100644 --- a/src/info.c +++ b/src/info.c @@ -3019,19 +3019,19 @@ state_t states[NUMSTATES] = // Oh no it's annoying lightning states....... // Lightning Sparks (it's the ones we'll use for the radius) - {SPR_KSPK, FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_KSPARK2}, // S_KSPARK1 - {SPR_NULL, FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_KSPARK3}, // S_KSPARK2 - {SPR_KSPK, FF_FULLBRIGHT|1, 2, {NULL}, 0, 0, S_KSPARK4}, // S_KSPARK3 - {SPR_NULL, FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_KSPARK5}, // S_KSPARK4 - {SPR_KSPK, FF_FULLBRIGHT|2, 2, {NULL}, 0, 0, S_KSPARK6}, // S_KSPARK5 - {SPR_NULL, FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_KSPARK7}, // S_KSPARK6 - {SPR_KSPK, FF_FULLBRIGHT|3, 2, {NULL}, 0, 0, S_KSPARK8}, // S_KSPARK7 - {SPR_NULL, FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_KSPARK9}, // S_KSPARK8 - {SPR_KSPK, FF_TRANS40|FF_FULLBRIGHT|4, 2, {NULL}, 0, 0, S_KSPARK10}, // S_KSPARK9 - {SPR_NULL, FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_KSPARK11}, // S_KSPARK10 - {SPR_KSPK, FF_TRANS50|FF_FULLBRIGHT|5, 2, {NULL}, 0, 0, S_KSPARK12}, // S_KSPARK11 - {SPR_NULL, FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_KSPARK13}, // S_KSPARK12 - {SPR_KSPK, FF_TRANS60|FF_FULLBRIGHT|6, 2, {NULL}, 0, 0, S_NULL}, // S_KSPARK13 + {SPR_KSPK, FF_FULLBRIGHT, 2, {A_LightningFollowPlayer}, 0, 0, S_KSPARK2}, // S_KSPARK1 + {SPR_NULL, FF_FULLBRIGHT, 1, {A_LightningFollowPlayer}, 0, 0, S_KSPARK3}, // S_KSPARK2 + {SPR_KSPK, FF_FULLBRIGHT|1, 2, {A_LightningFollowPlayer}, 0, 0, S_KSPARK4}, // S_KSPARK3 + {SPR_NULL, FF_FULLBRIGHT, 1, {A_LightningFollowPlayer}, 0, 0, S_KSPARK5}, // S_KSPARK4 + {SPR_KSPK, FF_FULLBRIGHT|2, 2, {A_LightningFollowPlayer}, 0, 0, S_KSPARK6}, // S_KSPARK5 + {SPR_NULL, FF_FULLBRIGHT, 1, {A_LightningFollowPlayer}, 0, 0, S_KSPARK7}, // S_KSPARK6 + {SPR_KSPK, FF_FULLBRIGHT|3, 2, {A_LightningFollowPlayer}, 0, 0, S_KSPARK8}, // S_KSPARK7 + {SPR_NULL, FF_FULLBRIGHT, 1, {A_LightningFollowPlayer}, 0, 0, S_KSPARK9}, // S_KSPARK8 + {SPR_KSPK, FF_TRANS40|FF_FULLBRIGHT|4, 2, {A_LightningFollowPlayer}, 0, 0, S_KSPARK10}, // S_KSPARK9 + {SPR_NULL, FF_FULLBRIGHT, 1, {A_LightningFollowPlayer}, 0, 0, S_KSPARK11}, // S_KSPARK10 + {SPR_KSPK, FF_TRANS50|FF_FULLBRIGHT|5, 2, {A_LightningFollowPlayer}, 0, 0, S_KSPARK12}, // S_KSPARK11 + {SPR_NULL, FF_FULLBRIGHT, 1, {A_LightningFollowPlayer}, 0, 0, S_KSPARK13}, // S_KSPARK12 + {SPR_KSPK, FF_TRANS60|FF_FULLBRIGHT|6, 2, {A_LightningFollowPlayer}, 0, 0, S_NULL}, // S_KSPARK13 // The straight bolt... {SPR_LZI1, FF_FULLBRIGHT, 2, {A_LightningFollowPlayer}, 0, 0, S_LZIO12}, // S_LZIO11 diff --git a/src/k_kart.c b/src/k_kart.c index d9365752..962b7003 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -2749,7 +2749,10 @@ static void K_DoThunderShield(player_t *player) sx = player->mo->x + FixedMul((player->mo->scale*THUNDERRADIUS), FINECOSINE((an*i)>>ANGLETOFINESHIFT)); sy = player->mo->y + FixedMul((player->mo->scale*THUNDERRADIUS), FINESINE((an*i)>>ANGLETOFINESHIFT)); mo = P_SpawnMobj(sx, sy, player->mo->z, MT_THOK); + mo-> angle = an*i; + mo->extravalue1 = THUNDERRADIUS; // Used to know whether we should teleport by radius or something. mo->scale = player->mo->scale*3; + P_SetTarget(&mo->target, player->mo); P_SetMobjState(mo, S_KSPARK1); } } diff --git a/src/p_enemy.c b/src/p_enemy.c index 74feba68..123aa265 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -8323,9 +8323,18 @@ void A_LightningFollowPlayer(mobj_t *actor) if (LUA_CallAction("A_LightningFollowPlayer", actor)) return; #endif + fixed_t sx, sy; if (actor->target) { - P_TeleportMove(actor, actor->target->x, actor->target->y, actor->target->z); + if (actor->extravalue1) // Make the radius also follow the player somewhat accuratly + { + sx = actor->target->x + FixedMul((actor->target->scale*actor->extravalue1), FINECOSINE((actor->angle)>>ANGLETOFINESHIFT)); + sy = actor->target->y + FixedMul((actor->target->scale*actor->extravalue1), FINESINE((actor->angle)>>ANGLETOFINESHIFT)); + P_TeleportMove(actor, sx, sy, actor->target->z); + } + else // else just teleport to player directly + P_TeleportMove(actor, actor->target->x, actor->target->y, actor->target->z); + actor->momx = actor->target->momx; actor->momy = actor->target->momy; actor->momz = actor->target->momz; // Give momentum since we don't teleport to our player literally every frame. From 23090e82b59600eb8ac5f55ef1848a1cdbb14201 Mon Sep 17 00:00:00 2001 From: Latapostrophe Date: Sat, 22 Sep 2018 01:15:04 +0200 Subject: [PATCH 4/6] Changed thundershield sound --- src/k_kart.c | 2 +- src/sounds.c | 1 + src/sounds.h | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/k_kart.c b/src/k_kart.c index 962b7003..2f60f257 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -2715,7 +2715,7 @@ static void K_DoThunderShield(player_t *player) fixed_t sx; fixed_t sy; - S_StartSound(player->mo, sfx_s3k45); + S_StartSound(player->mo, sfx_zio3); //player->kartstuff[k_thunderanim] = 35; P_NukeEnemies(player->mo, player->mo, RING_DIST/4); diff --git a/src/sounds.c b/src/sounds.c index ec88786c..4ab11a28 100644 --- a/src/sounds.c +++ b/src/sounds.c @@ -813,6 +813,7 @@ sfxinfo_t S_sfx[NUMSFX] = {"hogbom", false, 110, 8, -1, NULL, 0, -1, -1, LUMPERROR}, {"ddash", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, {"dbgsal", false, 110, 8, -1, NULL, 0, -1, -1, LUMPERROR}, + {"zio3", false, 110, 8, -1, NULL, 0, -1, -1, LUMPERROR}, // SRB2kart - Skin sounds {"kwin", false, 64, 0, -1, NULL, 0, SKSWIN, -1, LUMPERROR}, diff --git a/src/sounds.h b/src/sounds.h index 980c097e..35b0fb53 100644 --- a/src/sounds.h +++ b/src/sounds.h @@ -885,6 +885,7 @@ typedef enum sfx_hogbom, sfx_ddash, sfx_dbgsal, + sfx_zio3, sfx_kwin, sfx_klose, From f8c9ef94317770725e5a41fcebf299397f6c78c4 Mon Sep 17 00:00:00 2001 From: Latapostrophe Date: Sat, 22 Sep 2018 01:47:13 +0200 Subject: [PATCH 5/6] Did everything toaster suggested --- src/info.c | 2 +- src/info.h | 6 +++--- src/k_kart.c | 2 ++ src/sounds.c | 2 +- src/sounds.h | 2 +- 5 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/info.c b/src/info.c index 4bc35d4c..397bdfce 100644 --- a/src/info.c +++ b/src/info.c @@ -60,7 +60,7 @@ char sprnames[NUMSPRITES + 1][5] = "BHBM","BLIG","LIGH","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","ITMO", - "ITMI","ITMN","WANT","PBOM","RETI","VIEW","KSPK","LZI1","LZI2","KLIT" + "ITMI","ITMN","WANT","PBOM","RETI","KSPK","LZI1","LZI2","KLIT","VIEW" }; // Doesn't work with g++, needs actionf_p1 (don't modify this comment) diff --git a/src/info.h b/src/info.h index b5b12d27..152b9df0 100644 --- a/src/info.h +++ b/src/info.h @@ -642,14 +642,14 @@ typedef enum sprite SPR_PBOM, // player bomb SPR_RETI, // player reticule - - SPR_VIEW, // First person view sprites; this is a sprite so that it can be replaced by a specialized MD2 draw! SPR_KSPK, // Spark radius for the lightning shield SPR_LZI1, // Lightning that falls on the player for lightning shield SPR_LZI2, // ditto SPR_KLIT, // You have a twisted mind. But this actually is for the diagonal lightning. - + + SPR_VIEW, // First person view sprites; this is a sprite so that it can be replaced by a specialized MD2 draw! + SPR_FIRSTFREESLOT, SPR_LASTFREESLOT = SPR_FIRSTFREESLOT + NUMSPRITEFREESLOTS - 1, NUMSPRITES diff --git a/src/k_kart.c b/src/k_kart.c index 2f60f257..6460c94e 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -2757,6 +2757,8 @@ static void K_DoThunderShield(player_t *player) } } +#undef THUNDERRADIUS + static void K_DoHyudoroSteal(player_t *player) { INT32 i, numplayers = 0; diff --git a/src/sounds.c b/src/sounds.c index 4ab11a28..b794045f 100644 --- a/src/sounds.c +++ b/src/sounds.c @@ -812,8 +812,8 @@ sfxinfo_t S_sfx[NUMSFX] = {"noooo2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, {"hogbom", false, 110, 8, -1, NULL, 0, -1, -1, LUMPERROR}, {"ddash", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"dbgsal", false, 110, 8, -1, NULL, 0, -1, -1, LUMPERROR}, {"zio3", false, 110, 8, -1, NULL, 0, -1, -1, LUMPERROR}, + {"dbgsal", false, 110, 8, -1, NULL, 0, -1, -1, LUMPERROR}, // SRB2kart - Skin sounds {"kwin", false, 64, 0, -1, NULL, 0, SKSWIN, -1, LUMPERROR}, diff --git a/src/sounds.h b/src/sounds.h index 35b0fb53..449c50aa 100644 --- a/src/sounds.h +++ b/src/sounds.h @@ -884,8 +884,8 @@ typedef enum sfx_noooo2, sfx_hogbom, sfx_ddash, - sfx_dbgsal, sfx_zio3, + sfx_dbgsal, sfx_kwin, sfx_klose, From c9e994ae07b0fec961be839aacd1b77e68895091 Mon Sep 17 00:00:00 2001 From: toaster Date: Sun, 23 Sep 2018 23:07:38 +0100 Subject: [PATCH 6/6] smoll to tiny --- src/k_kart.c | 40 ++++++++++++++++++++-------------------- src/k_kart.h | 2 +- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 1a8cb9b7..138d3b39 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -5540,52 +5540,52 @@ void K_LoadKartHUDGraphics(void) } // For the item toggle menu -const char *K_GetItemPatch(UINT8 item, boolean smoll) +const char *K_GetItemPatch(UINT8 item, boolean tiny) { switch (item) { case KITEM_SNEAKER: case KRITEM_TRIPLESNEAKER: - return (smoll ? "K_ISSHOE" : "K_ITSHOE"); + return (tiny ? "K_ISSHOE" : "K_ITSHOE"); case KITEM_ROCKETSNEAKER: - return (smoll ? "K_ISRSHE" : "K_ITRSHE"); + return (tiny ? "K_ISRSHE" : "K_ITRSHE"); case KITEM_INVINCIBILITY: - return (smoll ? "K_ISINV1" : "K_ITINV1"); + return (tiny ? "K_ISINV1" : "K_ITINV1"); case KITEM_BANANA: case KRITEM_TRIPLEBANANA: case KRITEM_TENFOLDBANANA: - return (smoll ? "K_ISBANA" : "K_ITBANA"); + return (tiny ? "K_ISBANA" : "K_ITBANA"); case KITEM_EGGMAN: - return (smoll ? "K_ISEGGM" : "K_ITEGGM"); + return (tiny ? "K_ISEGGM" : "K_ITEGGM"); case KITEM_ORBINAUT: - return (smoll ? "K_ISORBN" : "K_ITORB1"); + return (tiny ? "K_ISORBN" : "K_ITORB1"); case KITEM_JAWZ: case KRITEM_DUALJAWZ: - return (smoll ? "K_ISJAWZ" : "K_ITJAWZ"); + return (tiny ? "K_ISJAWZ" : "K_ITJAWZ"); case KITEM_MINE: - return (smoll ? "K_ISMINE" : "K_ITMINE"); + return (tiny ? "K_ISMINE" : "K_ITMINE"); case KITEM_BALLHOG: - return (smoll ? "K_ISBHOG" : "K_ITBHOG"); + return (tiny ? "K_ISBHOG" : "K_ITBHOG"); case KITEM_SPB: - return (smoll ? "K_ISSPB" : "K_ITSPB"); + return (tiny ? "K_ISSPB" : "K_ITSPB"); case KITEM_GROW: - return (smoll ? "K_ISGROW" : "K_ITGROW"); + return (tiny ? "K_ISGROW" : "K_ITGROW"); case KITEM_SHRINK: - return (smoll ? "K_ISSHRK" : "K_ITSHRK"); + return (tiny ? "K_ISSHRK" : "K_ITSHRK"); case KITEM_THUNDERSHIELD: - return (smoll ? "K_ISTHNS" : "K_ITTHNS"); + return (tiny ? "K_ISTHNS" : "K_ITTHNS"); case KITEM_HYUDORO: - return (smoll ? "K_ISHYUD" : "K_ITHYUD"); + return (tiny ? "K_ISHYUD" : "K_ITHYUD"); case KITEM_POGOSPRING: - return (smoll ? "K_ISPOGO" : "K_ITPOGO"); + return (tiny ? "K_ISPOGO" : "K_ITPOGO"); case KITEM_KITCHENSINK: - return (smoll ? "K_ISSINK" : "K_ITSINK"); + return (tiny ? "K_ISSINK" : "K_ITSINK"); case KRITEM_TRIPLEORBINAUT: - return (smoll ? "K_ISORBN" : "K_ITORB3"); + return (tiny ? "K_ISORBN" : "K_ITORB3"); case KRITEM_QUADORBINAUT: - return (smoll ? "K_ISORBN" : "K_ITORB4"); + return (tiny ? "K_ISORBN" : "K_ITORB4"); default: - return (smoll ? "K_ISSAD" : "K_ITSAD"); + return (tiny ? "K_ISSAD" : "K_ITSAD"); } } diff --git a/src/k_kart.h b/src/k_kart.h index c0fe58bc..7c37ef67 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -59,7 +59,7 @@ void K_CalculateBattleWanted(void); void K_CheckBumpers(void); void K_CheckSpectateStatus(void); -const char *K_GetItemPatch(UINT8 item, boolean smoll); +const char *K_GetItemPatch(UINT8 item, boolean tiny); INT32 K_calcSplitFlags(INT32 snapflags); void K_LoadKartHUDGraphics(void); fixed_t K_FindCheckX(fixed_t px, fixed_t py, angle_t ang, fixed_t mx, fixed_t my);