From 6733a485cf8a9c0e525a6a7c08209c2364aa3ca2 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Fri, 12 Apr 2019 23:29:32 -0400 Subject: [PATCH] wip ring sparkles --- src/dehacked.c | 16 ++++++++++++++++ src/info.c | 47 +++++++++++++++++++++++++++++++++++++++++++++-- src/info.h | 17 +++++++++++++++++ src/p_enemy.c | 12 +++++++++--- src/p_mobj.c | 31 +++++++++++++++++++++++++++++++ 5 files changed, 118 insertions(+), 5 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index 604e617d5..3c09fbbd3 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -7165,6 +7165,21 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_OPAQUESMOKE5", "S_RINGDEBT", + "S_RINGSPARKS1", + "S_RINGSPARKS2", + "S_RINGSPARKS3", + "S_RINGSPARKS4", + "S_RINGSPARKS5", + "S_RINGSPARKS6", + "S_RINGSPARKS7", + "S_RINGSPARKS8", + "S_RINGSPARKS9", + "S_RINGSPARKS10", + "S_RINGSPARKS11", + "S_RINGSPARKS12", + "S_RINGSPARKS13", + "S_RINGSPARKS14", + "S_RINGSPARKS15", #ifdef SEENAMES "S_NAMECHECK", @@ -7952,6 +7967,7 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s "MT_LIONMAN", "MT_KARMAFIREWORK", + "MT_RINGSPARKS", #ifdef SEENAMES "MT_NAMECHECK", diff --git a/src/info.c b/src/info.c index af447c518..9d545eae0 100644 --- a/src/info.c +++ b/src/info.c @@ -69,7 +69,7 @@ char sprnames[NUMSPRITES + 1][5] = "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","XMS4","XMS5","VIEW" + "MXCL","RGSP","XMS4","XMS5","VIEW" }; // Doesn't work with g++, needs actionf_p1 (don't modify this comment) @@ -3415,6 +3415,22 @@ state_t states[NUMSTATES] = {SPR_MXCL, FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_NULL}, // S_RINGDEBT + {SPR_RGSP, FF_PAPERSPRITE|FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_RINGSPARKS2}, // S_RINGSPARKS1 + {SPR_RGSP, FF_PAPERSPRITE|FF_FULLBRIGHT|1, 1, {NULL}, 0, 0, S_RINGSPARKS3}, // S_RINGSPARKS2 + {SPR_RGSP, FF_PAPERSPRITE|FF_FULLBRIGHT|2, 1, {NULL}, 0, 0, S_RINGSPARKS4}, // S_RINGSPARKS3 + {SPR_RGSP, FF_PAPERSPRITE|FF_FULLBRIGHT|3, 1, {NULL}, 0, 0, S_RINGSPARKS5}, // S_RINGSPARKS4 + {SPR_RGSP, FF_PAPERSPRITE|FF_FULLBRIGHT|4, 1, {NULL}, 0, 0, S_RINGSPARKS6}, // S_RINGSPARKS5 + {SPR_RGSP, FF_PAPERSPRITE|FF_FULLBRIGHT|5, 1, {NULL}, 0, 0, S_RINGSPARKS7}, // S_RINGSPARKS6 + {SPR_RGSP, FF_PAPERSPRITE|FF_FULLBRIGHT|6, 1, {NULL}, 0, 0, S_RINGSPARKS8}, // S_RINGSPARKS7 + {SPR_RGSP, FF_PAPERSPRITE|FF_FULLBRIGHT|7, 1, {NULL}, 0, 0, S_RINGSPARKS9}, // S_RINGSPARKS8 + {SPR_RGSP, FF_PAPERSPRITE|FF_FULLBRIGHT|8, 1, {NULL}, 0, 0, S_RINGSPARKS10}, // S_RINGSPARKS9 + {SPR_RGSP, FF_PAPERSPRITE|FF_FULLBRIGHT|9, 1, {NULL}, 0, 0, S_RINGSPARKS11}, // S_RINGSPARKS10 + {SPR_RGSP, FF_PAPERSPRITE|FF_FULLBRIGHT|10, 1, {NULL}, 0, 0, S_RINGSPARKS12}, // S_RINGSPARKS11 + {SPR_RGSP, FF_PAPERSPRITE|FF_FULLBRIGHT|11, 1, {NULL}, 0, 0, S_RINGSPARKS13}, // S_RINGSPARKS12 + {SPR_RGSP, FF_PAPERSPRITE|FF_FULLBRIGHT|12, 1, {NULL}, 0, 0, S_RINGSPARKS14}, // S_RINGSPARKS13 + {SPR_RGSP, FF_PAPERSPRITE|FF_FULLBRIGHT|13, 1, {NULL}, 0, 0, S_RINGSPARKS15}, // S_RINGSPARKS14 + {SPR_RGSP, FF_PAPERSPRITE|FF_FULLBRIGHT|14, 1, {NULL}, 0, 0, S_NULL}, // S_RINGSPARKS15 + #ifdef SEENAMES {SPR_NULL, 0, 1, {NULL}, 0, 0, S_NULL}, // S_NAMECHECK #endif @@ -5461,7 +5477,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = sfx_None, // painsound S_NULL, // meleestate S_NULL, // missilestate - S_SPRK1, // deathstate + S_NULL, // deathstate S_NULL, // xdeathstate sfx_itemup, // deathsound 38*FRACUNIT, // speed @@ -20073,6 +20089,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, + { // MT_RINGSPARKS + -1, // doomednum + S_RINGSPARKS1, // 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 + 0, // speed + 8<extravalue1 >= 21) { + UINT8 i; // Base add is 3 tics for 9,9, adds 1.5 tics for each point closer to the 1,1 end actor->target->player->kartstuff[k_ringboost] += ((3*RINGBOOSTPWR)/2) + 3; S_StartSound(actor->target, sfx_s1b5); - actor->momx = (3*actor->target->momx)/4; - actor->momy = (3*actor->target->momy)/4; - actor->momz = (3*actor->target->momz)/4; + // ring sparkle effect + for (i = 0; i < 4; i++) + { + mobj_t *sparkle = P_SpawnMobj(actor->target->x, actor->target->y, actor->target->z, MT_RINGSPARKS); + P_SetTarget(&sparkle->target, actor->target); + sparkle->extravalue1 = i; + } + P_KillMobj(actor, actor->target, actor->target); return; } diff --git a/src/p_mobj.c b/src/p_mobj.c index 664222de6..21f83b1c8 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -8285,6 +8285,37 @@ void P_MobjThinker(mobj_t *mobj) K_MatchGenericExtraFlags(mobj, mobj->target); P_TeleportMove(mobj, mobj->target->x, mobj->target->y, mobj->target->z + (mobj->target->height/2) + mobj->movefactor); break; + case MT_RINGSPARKS: + if (!mobj->target || P_MobjWasRemoved(mobj->target)) + { + P_RemoveMobj(mobj); + return; + } + + K_MatchGenericExtraFlags(mobj, mobj->target); + mobj->angle = mobj->target->angle; + + switch (mobj->extravalue1) + { + case 0: + default: + mobj->angle += ANGLE_90; + break; + case 1: + mobj->angle -= ANGLE_90; + break; + case 2: + mobj->angle += ANGLE_45; + break; + case 3: + mobj->angle -= ANGLE_45; + break; + } + + P_TeleportMove(mobj, mobj->target->x + FINECOSINE(mobj->angle >> ANGLETOFINESHIFT), + mobj->target->y + FINESINE(mobj->angle >> ANGLETOFINESHIFT), + mobj->target->z + mobj->target->height); + break; case MT_THUNDERSHIELD: { fixed_t destx, desty;