diff --git a/src/d_clisrv.c b/src/d_clisrv.c index 40597b25d..9fc4f2313 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -605,7 +605,6 @@ static inline void resynch_write_player(resynch_pak *rsp, const size_t i) for (j = 0; j < NUMKARTSTUFF; ++j) rsp->kartstuff[j] = LONG(players[i].kartstuff[j]); - rsp->frameangle = (angle_t)LONG(players[i].frameangle); rsp->airtime = (tic_t)LONG(players[i].airtime); // respawnvars_t @@ -751,7 +750,6 @@ static void resynch_read_player(resynch_pak *rsp) for (j = 0; j < NUMKARTSTUFF; ++j) players[i].kartstuff[j] = LONG(rsp->kartstuff[j]); - players[i].frameangle = (angle_t)LONG(rsp->frameangle); players[i].airtime = (tic_t)LONG(rsp->airtime); // respawnvars_t diff --git a/src/d_clisrv.h b/src/d_clisrv.h index 120da1515..390e23245 100644 --- a/src/d_clisrv.h +++ b/src/d_clisrv.h @@ -281,7 +281,6 @@ typedef struct // SRB2kart INT32 kartstuff[NUMKARTSTUFF]; - angle_t frameangle; tic_t airtime; // respawnvars_t diff --git a/src/d_netcmd.c b/src/d_netcmd.c index a901cf22d..66ac90584 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -1795,7 +1795,7 @@ void D_SendPlayerConfig(void) for (i = 0; i <= splitscreen; i++) { UINT8 buf[4]; - UINT8 *buf_p = buf; + UINT8 *p = buf; SendNameAndColor(i); SendWeaponPref(i); @@ -1803,17 +1803,17 @@ void D_SendPlayerConfig(void) if (i > 0) { // Splitscreen players have invalid powerlevel - WRITEUINT16(buf_p, 0); - WRITEUINT16(buf_p, 0); + WRITEUINT16(p, 0); + WRITEUINT16(p, 0); } else { // Send it over - WRITEUINT16(buf_p, vspowerlevel[PWRLV_RACE]); - WRITEUINT16(buf_p, vspowerlevel[PWRLV_BATTLE]); + WRITEUINT16(p, vspowerlevel[PWRLV_RACE]); + WRITEUINT16(p, vspowerlevel[PWRLV_BATTLE]); } - SendNetXCmdForPlayer(i, XD_POWERLEVEL, buf, 4); + SendNetXCmdForPlayer(i, XD_POWERLEVEL, buf, p-buf); } } diff --git a/src/d_player.h b/src/d_player.h index ab6ab5bc6..9b1cb4fd1 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -505,7 +505,6 @@ typedef struct player_s // SRB2kart stuff INT32 kartstuff[NUMKARTSTUFF]; INT32 karthud[NUMKARTHUD]; - angle_t frameangle; // for the player add the ability to have the sprite only face other angles INT16 lturn_max[MAXPREDICTTICS]; // What's the expected turn value for full-left for a number of frames back (to account for netgame latency)? INT16 rturn_max[MAXPREDICTTICS]; // Ditto but for full-right UINT32 distancetofinish; diff --git a/src/dehacked.c b/src/dehacked.c index 88e545466..c51e5a875 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -11531,12 +11531,10 @@ struct { {"V_90TRANS",V_90TRANS}, {"V_HUDTRANSHALF",V_HUDTRANSHALF}, {"V_HUDTRANS",V_HUDTRANS}, - {"V_AUTOFADEOUT",V_AUTOFADEOUT}, {"V_RETURN8",V_RETURN8}, {"V_OFFSET",V_OFFSET}, {"V_ALLOWLOWERCASE",V_ALLOWLOWERCASE}, {"V_FLIP",V_FLIP}, - {"V_CENTERNAMETAG",V_CENTERNAMETAG}, {"V_SNAPTOTOP",V_SNAPTOTOP}, {"V_SNAPTOBOTTOM",V_SNAPTOBOTTOM}, {"V_SNAPTOLEFT",V_SNAPTOLEFT}, diff --git a/src/g_demo.c b/src/g_demo.c index f1c1b35bf..5258b09f8 100644 --- a/src/g_demo.c +++ b/src/g_demo.c @@ -1440,7 +1440,7 @@ void G_PreviewRewind(tic_t previewtime) #undef TWEEN P_SetThingPosition(players[i].mo); - players[i].frameangle = info->playerinfo[i].player.frameangle + FixedMul((INT32) (next_info->playerinfo[i].player.frameangle - info->playerinfo[i].player.frameangle), tweenvalue); + players[i].drawangle = info->playerinfo[i].player.drawangle + FixedMul((INT32) (next_info->playerinfo[i].player.drawangle - info->playerinfo[i].player.drawangle), tweenvalue); players[i].mo->sprite = info->playerinfo[i].mobj.sprite; players[i].mo->frame = info->playerinfo[i].mobj.frame; diff --git a/src/g_game.c b/src/g_game.c index 8a19b7d7b..0c43d1a36 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -881,7 +881,7 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer) player_t *player = &players[g_localplayers[forplayer]]; camera_t *thiscam = &camera[forplayer]; - angle_t *lang = &localangle[forplayer]; + angle_t *myangle = &localangle[forplayer]; INT32 *laim = &localaiming[forplayer]; INT32 *th = &turnheld[forplayer]; INT32 *kbl = &keyboard_look[forplayer]; @@ -1147,17 +1147,11 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer) cmd->angleturn *= realtics; - *lang += (cmd->angleturn<<16); - - cmd->angleturn = (INT16)(*lang >> 16); - cmd->latency = modeattacking ? 0 : (leveltime & 0xFF); // Send leveltime when this tic was generated to the server for control lag calculations - if (!hu_stopped) { - *lang += (cmd->angleturn<<16); + *myangle += (cmd->angleturn<<16); } - cmd->angleturn = (INT16)(*lang >> 16); cmd->latency = modeattacking ? 0 : (leveltime & 0xFF); // Send leveltime when this tic was generated to the server for control lag calculations /* Lua: Allow this hook to overwrite ticcmd. @@ -4544,7 +4538,7 @@ char *G_BuildMapTitle(INT32 mapnum) sprintf(title, "%s", mapheaderinfo[mapnum-1]->lvlttl); if (zonetext) sprintf(title + strlen(title), " %s", zonetext); - if (actnum) sprintf(title + strlen(title), " %d", actnum); + if (actnum > 0) sprintf(title + strlen(title), " %d", actnum); } return title; diff --git a/src/hu_stuff.c b/src/hu_stuff.c index 48a952485..35f977bd6 100644 --- a/src/hu_stuff.c +++ b/src/hu_stuff.c @@ -1823,7 +1823,6 @@ static void HU_DrawCEcho(void) INT32 pnumlines = 0; UINT32 realflags = cechoflags|V_SPLITSCREEN; // requested as part of splitscreen's stuff - INT32 realalpha = (INT32)((cechoflags & V_ALPHAMASK) >> V_ALPHASHIFT); char *line; char *echoptr; @@ -1843,15 +1842,6 @@ static void HU_DrawCEcho(void) return; } - // Automatic fadeout - if (realflags & V_AUTOFADEOUT) - { - UINT32 tempalpha = (UINT32)max((INT32)(10 - cechotimer), realalpha); - - realflags &= ~V_ALPHASHIFT; - realflags |= (tempalpha << V_ALPHASHIFT); - } - strcpy(temp, cechotext); echoptr = &temp[0]; diff --git a/src/info.c b/src/info.c index dfbd9499b..5d5f4070b 100644 --- a/src/info.c +++ b/src/info.c @@ -519,25 +519,216 @@ char sprnames[NUMSPRITES + 1][5] = "GWLR", //SRB2kart Sprites (sort later) - "RNDM","RPOP","SGNS","FAST","DSHR","BOST","BOSM","KFRE","KINV","KINF", - "WIPD","DRIF","BDRF","DUST","DRWS","RSHE","FITM","BANA","ORBN","JAWZ","SSMN", - "KRBM","BHOG","BHBM","SPBM","THNS","BUBS","BWVE", - "FLMS","FLMD","FLMP","FLML","FLMF", - "SINK","SITR", - "KBLN","DEZL","POKE","AUDI","DECO","DOOD","SNES","GBAS","SPRS","BUZB", - "CHOM","SACO","CRAB","BRNG","BUMP","FLEN","CLAS","PSHW","ISTA", - "ISTB","ARRO","ITEM","ITMO","ITMI","ITMN","WANT","PBOM","HIT1","HIT2", - "HIT3","RETI","AIDU","KSPK","LZI1","LZI2","KLIT","FZSM","FZBM","FPRT", - "SBUS","MARB","FUFO","RUST","BLON","VAPE","HTZA","HTZB","SGVA","SGVB", - "SGVC","PGTR","PGF1","PGF2","PGF3","PGBH","DPLR","SPTL","ENM1","GARU", - "MARR","REAP","JITB","CDMO","CDBU","DPIN","PPLR","DPPT","AATR","COCO", - "BDST","FROG","CBRA","HOLE","BBRA","EGFG","SMKP","MTYM","THWP","SNOB", - "ICEB","ECND","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", + "RNDM", // Random Item Box + "RPOP", // Random Item Box Pop + "SGNS", // Signpost sparkle + "FAST", // Speed boost trail + "DSHR", // Speed boost dust release + "BOST", // Sneaker booster flame + "BOSM", // Sneaker booster smoke + "KFRE", // Sneaker fire trail + "KINV", // Invincibility sparkle trail + "KINF", // Invincibility flash + "WIPD", // Wipeout dust trail + "DRIF", // Drift Sparks + "BDRF", // Brake drift sparks + "DRWS", // Drift dust sparks - "FWRK","MXCL","RGSP","DRAF","GRES","OTFG","DBOS","EGOO","WTRL", - "FBUB","GCHA","CHEZ","VIEW","DBCL","DBNC","DBST", + // Kart Items + "RSHE", // Rocket sneaker + "FITM", // Eggman Monitor + "BANA", // Banana Peel + "ORBN", // Orbinaut + "JAWZ", // Jawz + "SSMN", // SS Mine + "KRBM", // SS Mine BOOM + "BHOG", // Ballhog + "BHBM", // Ballhog BOOM + "SPBM", // Self-Propelled Bomb + "THNS", // Thunder Shield + "BUBS", // Bubble Shield (not Bubs) + "BWVE", // Bubble Shield waves + "FLMS", // Flame Shield + "FLMD", // Flame Shield dash + "FLMP", // Flame Shield paper sprites + "FLML", // Flame Shield speed lines + "FLMF", // Flame Shield flash + "SINK", // Kitchen Sink + "SITR", // Kitchen Sink Trail + "KBLN", // Battle Mode Bumper + + "DEZL", // DEZ Laser respawn + + // Additional Kart Objects + "POKE", // Pokey + "AUDI", // Audience members + "DECO", // Old 1.0 Kart Decoratives + New misc ones + "DOOD", // All the old D00Dkart objects + "SNES", // Sprites for SNES remake maps + "GBAS", // Sprites for GBA remake maps + "SPRS", // Sapphire Coast Spring Shell + "BUZB", // Sapphire Coast Buzz Mk3 + "CHOM", // Sapphire Coast Chomper + "SACO", // Sapphire Coast Fauna + "CRAB", // Crystal Abyss mobs + "BRNG", // Chaotix Big Ring + + "BUMP", // Player/shell bump + "FLEN", // Shell hit graphics stuff + "CLAS", // items clash + "PSHW", // thrown indicator + "ISTA", // instashield layer A + "ISTB", // instashield layer B + + "ARRO", // player arrows + "ITEM", + "ITMO", + "ITMI", + "ITMN", + "WANT", + + "PBOM", // player bomb + + "HIT1", // battle points + "HIT2", // battle points + "HIT3", // battle points + + "RETI", // player reticule + + "AIDU", + + "KSPK", // Spark radius for the lightning shield + "LZI1", // Lightning that falls on the player for lightning shield + "LZI2", // ditto + "KLIT", // You have a twisted mind. But this actually is for the diagonal lightning. + + "FZSM", // F-Zero NO CONTEST explosion + "FZBM", + + // Various plants + "SBUS", + + "MARB", // Marble Zone sprites + "FUFO", // CD Special Stage UFO (don't ask me why it begins with an F) + + "RUST", // Rusty Rig sprites + + "VAPE", // Volcanic Valley + + // Hill Top Zone + "HTZA", + "HTZB", + + // Ports of gardens + "SGVA", + "SGVB", + "SGVC", + "PGTR", + "PGF1", + "PGF2", + "PGF3", + "PGBH", + "DPLR", + + // Midnight Channel stuff: + "SPTL", // Spotlight + "ENM1", // Shadows (Roaming and static) + "GARU", // Wind attack roaming shadows use. + "MARR", // Mayonaka Arrow + + //Mementos stuff: + "REAP", + + "JITB", // Jack In The Box + + // Color Drive stuff: + "CDMO", + "CDBU", + + // Daytona Speedway + "DPIN", + + // Egg Zeppelin + "PPLR", + + // Desert Palace + "DPPT", + + // Aurora Atoll + "AATR", + "COCO", + + // Barren Badlands + "BDST", + "FROG", + "CBRA", + "HOLE", + "BBRA", + + // Eerie Grove + "EGFG", + + // SMK ports + "SMKP", + "MTYM", + "THWP", + "SNOB", + "ICEB", + + // Ezo's maps - many single-use sprites! + "ECND", + "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", + "RGSP", + "DRAF", + "GRES", + + "OTFG", + + "DBOS", // Drift boost flame + + "EGOO", + + "WTRL", // Water Trail + + "GCHA", // follower: generic chao + "CHEZ", // follower: cheese + + // First person view sprites; this is a sprite so that it can be replaced by a specialized MD2 draw later + "VIEW", + + "DBCL", // Drift boost clip + "DBNC", // Drift boost clip's sparks + "DBST", // Drift boost plume }; char spr2names[NUMPLAYERSPRITES][5] = diff --git a/src/k_hud.c b/src/k_hud.c index 16c2b408b..15d84ba2c 100644 --- a/src/k_hud.c +++ b/src/k_hud.c @@ -3442,7 +3442,7 @@ static void K_drawKartFirstPerson(void) if (stplyr->mo) { UINT8 driftcolor = K_DriftSparkColor(stplyr, stplyr->kartstuff[k_driftcharge]); - const angle_t ang = R_PointToAngle2(0, 0, stplyr->rmomx, stplyr->rmomy) - stplyr->frameangle; + const angle_t ang = R_PointToAngle2(0, 0, stplyr->rmomx, stplyr->rmomy) - stplyr->drawangle; // yes, the following is correct. no, you do not need to swap the x and y. fixed_t xoffs = -P_ReturnThrustY(stplyr->mo, ang, (BASEVIDWIDTH<<(FRACBITS-2))/2); fixed_t yoffs = -(P_ReturnThrustX(stplyr->mo, ang, 4*FRACUNIT) - 4*FRACUNIT); @@ -3453,7 +3453,7 @@ static void K_drawKartFirstPerson(void) xoffs -= (tn)*scale; xoffs -= (dr)*scale; - if (stplyr->frameangle == stplyr->mo->angle) + if (stplyr->drawangle == stplyr->mo->angle) { const fixed_t mag = FixedDiv(stplyr->speed, 10*stplyr->mo->scale); diff --git a/src/k_kart.c b/src/k_kart.c index 65946d45d..6fcf8202f 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -3434,7 +3434,7 @@ void K_SpawnWipeoutTrail(mobj_t *mo, boolean translucent) I_Assert(!P_MobjWasRemoved(mo)); if (mo->player) - aoff = (mo->player->frameangle + ANGLE_180); + aoff = (mo->player->drawangle + ANGLE_180); else aoff = (mo->angle + ANGLE_180); @@ -3483,7 +3483,7 @@ void K_SpawnDraftDust(mobj_t *mo) { UINT8 leniency = (3*TICRATE)/4 + ((mo->player->kartweight-1) * (TICRATE/4)); - ang = mo->player->frameangle; + ang = mo->player->drawangle; if (mo->player->kartstuff[k_drift] != 0) { @@ -3559,7 +3559,7 @@ void K_DriftDustHandling(mobj_t *spawner) { if (spawner->player->pflags & PF_WPNDOWN) { - anglediff = abs((signed)(spawner->angle - spawner->player->frameangle)); + anglediff = abs((signed)(spawner->angle - spawner->player->drawangle)); if (leveltime % 6 == 0) S_StartSound(spawner, sfx_screec); // repeated here because it doesn't always happen to be within the range when this is the case } @@ -5001,7 +5001,7 @@ static void K_MoveHeldObjects(player_t *player) #if 1 { - angle_t input = player->frameangle - cur->angle; + angle_t input = player->drawangle - cur->angle; boolean invert = (input > ANGLE_180); if (invert) input = InvAngle(input); @@ -5013,7 +5013,7 @@ static void K_MoveHeldObjects(player_t *player) cur->angle = cur->angle + input; } #else - cur->angle = player->frameangle; + cur->angle = player->drawangle; #endif angoffset = ANGLE_90 + (ANGLE_180 * num); diff --git a/src/k_respawn.c b/src/k_respawn.c index 7773b7faf..f1be43651 100644 --- a/src/k_respawn.c +++ b/src/k_respawn.c @@ -334,7 +334,7 @@ static void K_MovePlayerToRespawnPoint(player_t *player) } // Set angle, regardless of if we're done or not - player->frameangle = R_PointToAngle2( + player->drawangle = R_PointToAngle2( player->mo->x, player->mo->y, dest.x, dest.y ); @@ -383,7 +383,7 @@ static void K_MovePlayerToRespawnPoint(player_t *player) ); // Move toward the respawn point - player->frameangle = stepha; + player->drawangle = stepha; step.x = FixedMul(FixedMul(FINECOSINE(stepha >> ANGLETOFINESHIFT), stepamt), FINECOSINE(stepva >> ANGLETOFINESHIFT)); step.y = FixedMul(FixedMul(FINESINE(stepha >> ANGLETOFINESHIFT), stepamt), FINECOSINE(stepva >> ANGLETOFINESHIFT)); diff --git a/src/lua_playerlib.c b/src/lua_playerlib.c index c0e5c4030..798c44704 100644 --- a/src/lua_playerlib.c +++ b/src/lua_playerlib.c @@ -213,8 +213,6 @@ static int player_get(lua_State *L) LUA_PushUserdata(L, plr->powers, META_POWERS); else if (fastcmp(field,"kartstuff")) LUA_PushUserdata(L, plr->kartstuff, META_KARTSTUFF); - else if (fastcmp(field,"frameangle")) - lua_pushangle(L, plr->frameangle); else if (fastcmp(field,"airtime")) lua_pushinteger(L, plr->airtime); else if (fastcmp(field,"pflags")) @@ -499,8 +497,6 @@ static int player_set(lua_State *L) // SRB2kart else if (fastcmp(field,"kartstuff")) return NOSET; - else if (fastcmp(field,"frameangle")) - plr->frameangle = luaL_checkangle(L, 3); else if (fastcmp(field,"airtime")) plr->airtime = (tic_t)luaL_checkinteger(L, 3); else if (fastcmp(field,"kartspeed")) diff --git a/src/m_cheat.c b/src/m_cheat.c index 080831886..c4cc1719c 100644 --- a/src/m_cheat.c +++ b/src/m_cheat.c @@ -1177,7 +1177,7 @@ void Command_ObjectPlace_f(void) if (!COM_CheckParm("-silent")) { - HU_SetCEchoFlags(V_RETURN8|V_MONOSPACE|V_AUTOFADEOUT); + HU_SetCEchoFlags(V_RETURN8|V_MONOSPACE); HU_SetCEchoDuration(10); HU_DoCEcho(va(M_GetText( "\\\\\\\\\\\\\\\\\\\\\\\\\x82" diff --git a/src/p_saveg.c b/src/p_saveg.c index 2c9a573b9..35b59f699 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -253,7 +253,6 @@ static void P_NetArchivePlayers(void) WRITEINT16(save_p, players[i].rturn_max[j]); } - WRITEANGLE(save_p, players[i].frameangle); WRITEUINT32(save_p, players[i].distancetofinish); WRITEUINT32(save_p, K_GetWaypointHeapIndex(players[i].nextwaypoint)); WRITEUINT32(save_p, players[i].airtime); @@ -447,7 +446,6 @@ static void P_NetUnArchivePlayers(void) players[i].rturn_max[j] = READINT16(save_p); } - players[i].frameangle = READANGLE(save_p); players[i].distancetofinish = READUINT32(save_p); players[i].nextwaypoint = (waypoint_t *)(size_t)READUINT32(save_p); players[i].airtime = READUINT32(save_p); diff --git a/src/p_spec.c b/src/p_spec.c index 4cbe3a555..4b784d479 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -31,7 +31,7 @@ #include "p_polyobj.h" #include "p_slopes.h" #include "hu_stuff.h" -#include "v_video.h" // V_AUTOFADEOUT|V_ALLOWLOWERCASE +#include "v_video.h" // V_ALLOWLOWERCASE #include "m_misc.h" #include "m_cond.h" //unlock triggers #include "lua_hook.h" // LUAh_LinedefExecute diff --git a/src/p_user.c b/src/p_user.c index 307fb3691..b91c6ebc0 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -2183,7 +2183,7 @@ void P_MovePlayer(player_t *player) else if (player->pflags & PF_SLIDING) { P_SetPlayerMobjState(player->mo, S_KART_SPINOUT); - player->frameangle -= ANGLE_22h; + player->drawangle -= ANGLE_22h; } else if (player->kartstuff[k_spinouttimer] > 0) { @@ -2191,19 +2191,19 @@ void P_MovePlayer(player_t *player) P_SetPlayerMobjState(player->mo, S_KART_SPINOUT); - if (speed == 1 && abs((signed)(player->mo->angle - player->frameangle)) < ANGLE_22h) - player->frameangle = player->mo->angle; // Face forward at the end of the animation + if (speed == 1 && abs((signed)(player->mo->angle - player->drawangle)) < ANGLE_22h) + player->drawangle = player->mo->angle; // Face forward at the end of the animation else - player->frameangle -= (ANGLE_11hh * speed); + player->drawangle -= (ANGLE_11hh * speed); } else if (player->powers[pw_nocontrol] && player->pflags & PF_WPNDOWN) { P_SetPlayerMobjState(player->mo, S_KART_SPINOUT); if (((player->powers[pw_nocontrol] + 5) % 20) < 10) - player->frameangle += ANGLE_11hh; + player->drawangle += ANGLE_11hh; else - player->frameangle -= ANGLE_11hh; + player->drawangle -= ANGLE_11hh; } else { @@ -2211,16 +2211,16 @@ void P_MovePlayer(player_t *player) if (player->kartstuff[k_pogospring]) { - player->frameangle += ANGLE_22h; + player->drawangle += ANGLE_22h; } else { - player->frameangle = player->mo->angle; + player->drawangle = player->mo->angle; if (player->kartstuff[k_drift] != 0) { INT32 a = (ANGLE_45 / 5) * player->kartstuff[k_drift]; - player->frameangle += a; + player->drawangle += a; } } } @@ -2497,7 +2497,7 @@ static void P_DoZoomTube(player_t *player) } P_SetPlayerMobjState(player->mo, S_KART_SPINOUT); - player->frameangle -= ANGLE_22h; + player->drawangle -= ANGLE_22h; } #if 0 @@ -4147,7 +4147,7 @@ static void P_HandleFollower(player_t *player) if (player->kartstuff[k_spinouttimer] || player->mo->state == &states[S_KART_SPINOUT] || player->mo->health <= 0) { player->follower->movecount = 0; // cancel hit confirm. - player->follower->angle = player->frameangle; // spin out + player->follower->angle = player->drawangle; // spin out if (player->follower->extravalue1 != 2) { player->follower->extravalue1 = 2; diff --git a/src/r_main.c b/src/r_main.c index 636c44c14..9bd1e5682 100644 --- a/src/r_main.c +++ b/src/r_main.c @@ -1118,25 +1118,20 @@ void R_SetupFrame(player_t *player) { camera_t *thiscam = &camera[0]; boolean chasecam = false; - UINT8 i = 0; + UINT8 i; - if (r_splitscreen) + for (i = 0; i <= r_splitscreen; i++) { - for (i = 1; i <= r_splitscreen; i++) + if (player == &players[displayplayers[i]]) { - if (player == &players[displayplayers[i]]) - { - thiscam = &camera[i]; - chasecam = (cv_chasecam[i].value != 0); - break; - } - } - - if (i > r_splitscreen) - { - i = 0; + thiscam = &camera[i]; + chasecam = (cv_chasecam[i].value != 0); + break; } } + + if (i > r_splitscreen) + return; // shouldn't be possible, but just in case if (player->playerstate == PST_DEAD || gamestate == GS_TITLESCREEN || tutorialmode) chasecam = true; // force chasecam on