From e9c17710172225b96176c35fbbe7009603f5b9f3 Mon Sep 17 00:00:00 2001 From: Yukita Mayako Date: Fri, 29 May 2015 01:52:42 -0400 Subject: [PATCH] Add new spindash animation. This adds SPR2_DASH, S_PLAY_DASH, and related p_user.c changes to give charging your spindash a unique animation. --- src/dehacked.c | 1 + src/info.c | 2 ++ src/info.h | 2 ++ src/p_user.c | 10 +++++++--- 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index 394e12e0b..16e1ad329 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -3749,6 +3749,7 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_PLAY_DEAD", "S_PLAY_DRWN", "S_PLAY_SPIN", + "S_PLAY_DASH", "S_PLAY_GASP", "S_PLAY_JUMP", "S_PLAY_FALL", diff --git a/src/info.c b/src/info.c index 65c2ed74e..8dc694b5e 100644 --- a/src/info.c +++ b/src/info.c @@ -66,6 +66,7 @@ char spr2names[NUMPLAYERSPRITES][5] = "DEAD", "DRWN", "SPIN", + "DASH", "GASP", "JUMP", "FALL", @@ -130,6 +131,7 @@ state_t states[NUMSTATES] = {SPR_PLAY, SPR2_DEAD, 4, {NULL}, 0, 0, S_PLAY_DEAD}, // S_PLAY_DEAD {SPR_PLAY, SPR2_DRWN, 4, {NULL}, 0, 0, S_PLAY_DRWN}, // S_PLAY_DRWN {SPR_PLAY, SPR2_SPIN, 1, {NULL}, 0, 0, S_PLAY_SPIN}, // S_PLAY_SPIN + {SPR_PLAY, SPR2_DASH, 2, {NULL}, 0, 0, S_PLAY_DASH}, // S_PLAY_DASH {SPR_PLAY, SPR2_GASP, 14, {NULL}, 0, 0, S_PLAY_WALK}, // S_PLAY_GASP {SPR_PLAY, SPR2_JUMP, 2, {NULL}, 0, 0, S_PLAY_JUMP}, // S_PLAY_JUMP {SPR_PLAY, SPR2_FALL, 2, {NULL}, 0, 0, S_PLAY_FALL}, // S_PLAY_FALL diff --git a/src/info.h b/src/info.h index c111ead4d..585d8c745 100644 --- a/src/info.h +++ b/src/info.h @@ -585,6 +585,7 @@ enum playersprite SPR2_DEAD, SPR2_DRWN, SPR2_SPIN, + SPR2_DASH, SPR2_GASP, SPR2_JUMP, SPR2_FALL, @@ -644,6 +645,7 @@ typedef enum state S_PLAY_DEAD, S_PLAY_DRWN, S_PLAY_SPIN, + S_PLAY_DASH, S_PLAY_GASP, S_PLAY_JUMP, S_PLAY_FALL, diff --git a/src/p_user.c b/src/p_user.c index 487944d18..22644f6f5 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -3436,7 +3436,8 @@ static void P_DoSuperStuff(player_t *player) if (player->mo->health > 0) { - if ((player->pflags & PF_JUMPED) || (player->pflags & PF_SPINNING)) + if ((player->pflags & PF_JUMPED || player->pflags & PF_SPINNING) + && player->mo->state-states != S_PLAY_DASH) P_SetPlayerMobjState(player->mo, S_PLAY_SPIN); else switch (player->mo->state-states) { @@ -3699,7 +3700,7 @@ static void P_DoSpinDash(player_t *player, ticcmd_t *cmd) player->pflags |= PF_STARTDASH|PF_SPINNING; player->dashspeed = FixedMul(FRACUNIT, player->mo->scale); player->dashtime = 0; - P_SetPlayerMobjState(player->mo, S_PLAY_SPIN); + P_SetPlayerMobjState(player->mo, S_PLAY_DASH); player->pflags |= PF_USEDOWN; } else if ((cmd->buttons & BT_USE) && (player->pflags & PF_STARTDASH)) @@ -3756,6 +3757,7 @@ static void P_DoSpinDash(player_t *player, ticcmd_t *cmd) player->pflags &= ~PF_STARTDASH; if (!((gametype == GT_RACE || gametype == GT_COMPETITION) && leveltime < 4*TICRATE)) { + P_SetPlayerMobjState(player->mo, S_PLAY_SPIN); P_InstaThrust(player->mo, player->mo->angle, player->dashspeed); // catapult forward ho!! if (!player->spectator) S_StartSound(player->mo, sfx_zoom); @@ -3763,7 +3765,9 @@ static void P_DoSpinDash(player_t *player, ticcmd_t *cmd) player->dashspeed = 0; } - if (onground && (player->pflags & PF_SPINNING) && !(player->panim == PA_ROLL)) + if (onground && player->pflags & PF_STARTDASH && player->mo->state-states != S_PLAY_DASH) + P_SetPlayerMobjState(player->mo, S_PLAY_DASH); + else if (onground && player->pflags & PF_SPINNING && !(player->panim == PA_ROLL)) P_SetPlayerMobjState(player->mo, S_PLAY_SPIN); }