From 81a077b9af6828f8e4389a1a86866bcb9cee1ca5 Mon Sep 17 00:00:00 2001 From: Sryder13 Date: Sat, 4 Nov 2017 14:07:53 +0000 Subject: [PATCH] New player frameangle used instead of mobj angle for players Set to mobj angle except when spinning where it's set to spin Only 1 spin frame needed now --- src/d_player.h | 1 + src/dehacked.c | 9 +-------- src/hardware/hw_main.c | 7 ++++++- src/hardware/hw_md2.c | 6 +++++- src/info.c | 9 +-------- src/info.h | 9 +-------- src/k_kart.c | 8 ++++---- src/lua_playerlib.c | 2 ++ src/p_mobj.c | 4 ++-- src/p_saveg.c | 4 ++++ src/p_user.c | 8 ++++++-- src/r_things.c | 5 ++++- 12 files changed, 37 insertions(+), 35 deletions(-) diff --git a/src/d_player.h b/src/d_player.h index 12061c368..a84c2ccd1 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -366,6 +366,7 @@ typedef struct player_s // SRB2kart stuff INT32 kartstuff[NUMKARTSTUFF]; boolean collide[MAXPLAYERS]; + angle_t frameangle; // for the player add the ability to have the sprite only face other angles // Bit flags. // See pflags_t, above. diff --git a/src/dehacked.c b/src/dehacked.c index 93029b6cd..6c35a66d8 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -3823,14 +3823,7 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_KART_DRIFT_L2", "S_KART_DRIFT_R1", "S_KART_DRIFT_R2", - "S_KART_SPIN1", - "S_KART_SPIN2", - "S_KART_SPIN3", - "S_KART_SPIN4", - "S_KART_SPIN5", - "S_KART_SPIN6", - "S_KART_SPIN7", - "S_KART_SPIN8", + "S_KART_SPIN", "S_KART_PAIN", "S_KART_SQUISH", /* diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index ac601c9fe..a4785f122 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -5144,7 +5144,12 @@ static void HWR_ProjectSprite(mobj_t *thing) } } else if (sprframe->rotate != SRF_SINGLE) - ang = R_PointToAngle (thing->x, thing->y) - thing->angle; + { + if (thing->player) + ang = R_PointToAngle (thing->x, thing->y) - thing->player->frameangle; + else + ang = R_PointToAngle (thing->x, thing->y) - thing->angle; + } if (sprframe->rotate == SRF_SINGLE) { diff --git a/src/hardware/hw_md2.c b/src/hardware/hw_md2.c index e61177e8d..caa46eddc 100644 --- a/src/hardware/hw_md2.c +++ b/src/hardware/hw_md2.c @@ -1501,7 +1501,11 @@ void HWR_DrawMD2(gr_vissprite_t *spr) if (sprframe->rotate) { - const fixed_t anglef = AngleFixed(spr->mobj->angle); + fixed_t anglef; + if (spr->mobj->player) + anglef = AngleFixed(spr->mobj->player->frameangle); + else + anglef = AngleFixed(spr->mobj->angle); p.angley = FIXED_TO_FLOAT(anglef); } else diff --git a/src/info.c b/src/info.c index 62a7f565f..83fb784c8 100644 --- a/src/info.c +++ b/src/info.c @@ -106,14 +106,7 @@ state_t states[NUMSTATES] = {SPR_PLAY, 10, 2, {NULL}, 0, 0, S_KART_DRIFT_L1}, // S_KART_DRIFT_L2 K {SPR_PLAY, 11, 2, {NULL}, 0, 0, S_KART_DRIFT_R2}, // S_KART_DRIFT_R1 L {SPR_PLAY, 12, 2, {NULL}, 0, 0, S_KART_DRIFT_R1}, // S_KART_DRIFT_R2 M - {SPR_PLAY, 13, 2, {NULL}, 0, 0, S_KART_SPIN2}, // S_KART_SPIN1 N - {SPR_PLAY, 14, 2, {NULL}, 0, 0, S_KART_SPIN3}, // S_KART_SPIN2 O - {SPR_PLAY, 15, 2, {NULL}, 0, 0, S_KART_SPIN4}, // S_KART_SPIN3 P - {SPR_PLAY, 16, 2, {NULL}, 0, 0, S_KART_SPIN5}, // S_KART_SPIN4 Q - {SPR_PLAY, 17, 2, {NULL}, 0, 0, S_KART_SPIN6}, // S_KART_SPIN5 R - {SPR_PLAY, 18, 2, {NULL}, 0, 0, S_KART_SPIN7}, // S_KART_SPIN6 S - {SPR_PLAY, 19, 2, {NULL}, 0, 0, S_KART_SPIN8}, // S_KART_SPIN7 T - {SPR_PLAY, 20, 2, {NULL}, 0, 0, S_KART_SPIN1}, // S_KART_SPIN8 U + {SPR_PLAY, 13, -1, {NULL}, 0, 0, S_KART_SPIN}, // S_KART_SPIN N {SPR_PLAY, 13, 350, {NULL}, 0, 0, S_KART_STND}, // S_KART_PAIN N {SPR_PLAY, 21, 350, {NULL}, 0, 0, S_KART_STND}, // S_KART_SQUISH V /* diff --git a/src/info.h b/src/info.h index c1a9e1b15..0bb5272f3 100644 --- a/src/info.h +++ b/src/info.h @@ -662,14 +662,7 @@ typedef enum state S_KART_DRIFT_L2, S_KART_DRIFT_R1, S_KART_DRIFT_R2, - S_KART_SPIN1, - S_KART_SPIN2, - S_KART_SPIN3, - S_KART_SPIN4, - S_KART_SPIN5, - S_KART_SPIN6, - S_KART_SPIN7, - S_KART_SPIN8, + S_KART_SPIN, S_KART_PAIN, S_KART_SQUISH, /* diff --git a/src/k_kart.c b/src/k_kart.c index 75b6a652b..ce7c18323 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1640,8 +1640,8 @@ void K_SpinPlayer(player_t *player, mobj_t *source) player->kartstuff[k_spinout] = player->kartstuff[k_spinouttimer]; - if (!(player->mo->state >= &states[S_KART_SPIN1] && player->mo->state <= &states[S_KART_SPIN8])) - P_SetPlayerMobjState(player->mo, S_KART_SPIN1); + if (player->mo->state != &states[S_KART_SPIN]) + P_SetPlayerMobjState(player->mo, S_KART_SPIN); player->kartstuff[k_spinouttype] = 0; @@ -1697,8 +1697,8 @@ void K_ExplodePlayer(player_t *player, mobj_t *source) // A bit of a hack, we ju player->powers[pw_flashing] = flashingtics; - if (!(player->mo->state >= &states[S_KART_SPIN1] && player->mo->state <= &states[S_KART_SPIN8])) - P_SetPlayerMobjState(player->mo, S_KART_SPIN1); + if (player->mo->state != &states[S_KART_SPIN]) + P_SetPlayerMobjState(player->mo, S_KART_SPIN); player->kartstuff[k_spinouttype] = 0; diff --git a/src/lua_playerlib.c b/src/lua_playerlib.c index 44a27cd1d..55ceaa185 100644 --- a/src/lua_playerlib.c +++ b/src/lua_playerlib.c @@ -132,6 +132,8 @@ static int player_get(lua_State *L) LUA_PushUserdata(L, plr->kartstuff, META_KARTSTUFF); else if (fastcmp(field,"collide")) LUA_PushUserdata(L, plr->collide, META_COLLIDE); + else if (fastcmp(field,"frameangle")) + lua_pushangle(L, plr->frameangle); else if (fastcmp(field,"pflags")) lua_pushinteger(L, plr->pflags); else if (fastcmp(field,"panim")) diff --git a/src/p_mobj.c b/src/p_mobj.c index 5e2c25f39..a44a40357 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -226,7 +226,7 @@ boolean P_SetPlayerMobjState(mobj_t *mobj, statenum_t state) // Set animation state // The pflags version of this was just as convoluted. // Rewriten for SRB2kart ... though I don't know what this is. - if ((state >= S_KART_STND && state <= S_KART_STND_R) || state == S_KART_SQUISH || (state >= S_KART_SPIN1 && state <= S_KART_SPIN8)) + if ((state >= S_KART_STND && state <= S_KART_STND_R) || state == S_KART_SQUISH || state == S_KART_SPIN) player->panim = PA_IDLE; else if (state >= S_KART_WALK1 && state <= S_KART_WALK_R2) player->panim = PA_WALK; @@ -2762,7 +2762,7 @@ static void P_PlayerZMovement(mobj_t *mo) goto nightsdone; } // Get up if you fell. - if ((mo->state == &states[mo->info->painstate] || (mo->state >= &states[S_KART_SPIN1] && mo->state <= &states[S_KART_SPIN8])) + if ((mo->state == &states[mo->info->painstate] || mo->state == &states[S_KART_SPIN]) && mo->player->kartstuff[k_spinouttimer] == 0 && mo->player->kartstuff[k_squishedtimer] == 0) // SRB2kart P_SetPlayerMobjState(mo, S_KART_STND); diff --git a/src/p_saveg.c b/src/p_saveg.c index e04ee39c7..d5a841364 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -141,6 +141,8 @@ static void P_NetArchivePlayers(void) for (j = 0; j < MAXPLAYERS; j++) WRITEUINT8(save_p, players[i].collide[j]); + WRITEANGLE(save_p, players[i].frameangle); + WRITEUINT8(save_p, players[i].playerstate); WRITEUINT32(save_p, players[i].pflags); WRITEUINT8(save_p, players[i].panim); @@ -324,6 +326,8 @@ static void P_NetUnArchivePlayers(void) for (j = 0; j < MAXPLAYERS; j++) players[i].collide[j] = (boolean)READUINT8(save_p); + players[i].frameangle = READANGLE(save_p); + players[i].playerstate = READUINT8(save_p); players[i].pflags = READUINT32(save_p); players[i].panim = READUINT8(save_p); diff --git a/src/p_user.c b/src/p_user.c index 007e3a556..a51a1d12b 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -6679,8 +6679,10 @@ static void P_MovePlayer(player_t *player) } else if (player->kartstuff[k_spinouttimer] > 0) { - if (!(player->mo->state >= &states[S_KART_SPIN1] && player->mo->state <= &states[S_KART_SPIN8])) - P_SetPlayerMobjState(player->mo, S_KART_SPIN1); + if (player->mo->state != &states[S_KART_SPIN]) + P_SetPlayerMobjState(player->mo, S_KART_SPIN); + + player->frameangle -= ANGLE_22h; } else if (player->kartstuff[k_spinouttimer] == 0 && player->kartstuff[k_squishedtimer] == 0) { @@ -6726,6 +6728,8 @@ static void P_MovePlayer(player_t *player) else if (!(cmd->buttons & BT_DRIFTRIGHT || cmd->buttons & BT_DRIFTLEFT) && !(player->mo->state == &states[S_KART_WALK1] || player->mo->state == &states[S_KART_WALK2])) P_SetPlayerMobjState(player->mo, S_KART_WALK1); } + + player->frameangle = player->mo->angle; } } //} diff --git a/src/r_things.c b/src/r_things.c index 0643dfd59..2be080014 100644 --- a/src/r_things.c +++ b/src/r_things.c @@ -1210,7 +1210,10 @@ static void R_ProjectSprite(mobj_t *thing) if (sprframe->rotate != SRF_SINGLE || papersprite) { - ang = R_PointToAngle (thing->x, thing->y) - thing->angle; + if (thing->player) + ang = R_PointToAngle (thing->x, thing->y) - thing->player->frameangle; + else + ang = R_PointToAngle (thing->x, thing->y) - thing->angle; if (papersprite) ang_scale = abs(FINESINE(ang>>ANGLETOFINESHIFT)); }