Merge remote-tracking branch 'origin/the-scary-22-merge' into the-scary-22-merge

This commit is contained in:
James R 2020-08-15 21:35:17 -07:00
commit 36885c1343
19 changed files with 335 additions and 234 deletions

View file

@ -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
@ -3600,15 +3598,19 @@ static void Got_AddPlayer(UINT8 **p, INT32 playernum)
UINT8 console;
UINT8 splitscreenplayer = 0;
UINT8 i;
boolean rejoined;
player_t *newplayer;
if (playernum != serverplayer && !IsPlayerAdmin(playernum))
{
// protect against hacked/buggy client
CONS_Alert(CONS_WARNING, M_GetText("Illegal add player command received from %s\n"), player_names[playernum]);
if (server)
SendKick(playernum, KICK_MSG_CON_FAIL | KICK_MSG_KEEP_BODY);
{
UINT8 buf[2];
buf[0] = (UINT8)playernum;
buf[1] = KICK_MSG_CON_FAIL;
SendNetXCmd(XD_KICK, &buf, 2);
}
return;
}
@ -3619,39 +3621,13 @@ static void Got_AddPlayer(UINT8 **p, INT32 playernum)
CONS_Debug(DBG_NETPLAY, "addplayer: %d %d %d\n", node, newplayernum, splitscreenplayer);
rejoined = playeringame[newplayernum];
// Clear player before joining, lest some things get set incorrectly
CL_ClearPlayer(newplayernum);
if (!rejoined)
{
// Clear player before joining, lest some things get set incorrectly
CL_ClearPlayer(newplayernum);
playeringame[newplayernum] = true;
G_AddPlayer(newplayernum);
if (newplayernum+1 > doomcom->numslots)
doomcom->numslots = (INT16)(newplayernum+1);
if (server && I_GetNodeAddress)
{
const char *address = I_GetNodeAddress(node);
char *port = NULL;
if (address) // MI: fix msvcrt.dll!_mbscat crash?
{
strcpy(playeraddress[newplayernum], address);
port = strchr(playeraddress[newplayernum], ':');
if (port)
*port = '\0';
}
}
}
newplayer = &players[newplayernum];
newplayer->jointime = 0;
newplayer->quittime = 0;
READSTRINGN(*p, player_names[newplayernum], MAXPLAYERNAME);
playeringame[newplayernum] = true;
G_AddPlayer(newplayernum);
if (newplayernum+1 > doomcom->numslots)
doomcom->numslots = (INT16)(newplayernum+1);
// the server is creating my player
if (node == mynode)
@ -3676,32 +3652,11 @@ static void Got_AddPlayer(UINT8 **p, INT32 playernum)
DEBFILE("spawning me\n");
}
ticcmd_oldangleturn[splitscreenplayer] = newplayer->oldrelangleturn;
P_ForceLocalAngle(newplayer, (angle_t)(newplayer->angleturn << 16));
ticcmd_oldangleturn[splitscreenplayer] = players[newplayernum].oldrelangleturn;
P_ForceLocalAngle(&players[newplayernum], (angle_t)(players[newplayernum].angleturn << 16));
D_SendPlayerConfig();
//D_SendPlayerConfig();
addedtogame = true;
if (rejoined)
{
if (newplayer->mo)
{
newplayer->viewheight = P_GetPlayerViewHeight(newplayer);
if (newplayer->mo->eflags & MFE_VERTICALFLIP)
newplayer->viewz = newplayer->mo->z + newplayer->mo->height - newplayer->viewheight;
else
newplayer->viewz = newplayer->mo->z + newplayer->viewheight;
}
// wake up the status bar
ST_Start();
// wake up the heads up text
HU_Start();
if (camera[splitscreenplayer].chase)
P_ResetCamera(newplayer, &camera[splitscreenplayer]);
}
}
players[newplayernum].splitscreenindex = splitscreenplayer;
@ -3715,30 +3670,20 @@ static void Got_AddPlayer(UINT8 **p, INT32 playernum)
if (netgame)
{
char joinmsg[256];
if (rejoined)
strcpy(joinmsg, M_GetText("\x82*%s has rejoined the game (player %d)"));
else
strcpy(joinmsg, M_GetText("\x82*%s has joined the game (player %d)"));
strcpy(joinmsg, va(joinmsg, player_names[newplayernum], newplayernum));
// Merge join notification + IP to avoid clogging console/chat
if (server && cv_showjoinaddress.value && I_GetNodeAddress)
if (server && cv_showjoinaddress.value)
{
const char *address = I_GetNodeAddress(node);
if (address)
strcat(joinmsg, va(" (%s)", address));
const char *address;
if (I_GetNodeAddress && (address = I_GetNodeAddress(node)) != NULL)
HU_AddChatText(va("\x82*Player %d has joined the game (node %d) (%s)", newplayernum+1, node, address), false); // merge join notification + IP to avoid clogging console/chat.
}
HU_AddChatText(joinmsg, false);
else
HU_AddChatText(va("\x82*Player %d has joined the game (node %d)", newplayernum+1, node), false); // if you don't wanna see the join address.
}
if (server && multiplayer && motd[0] != '\0')
COM_BufAddText(va("sayto %d %s\n", newplayernum, motd));
if (!rejoined)
LUAh_PlayerJoin(newplayernum);
LUAh_PlayerJoin(newplayernum);
}
// Xcmd XD_REMOVEPLAYER
@ -3814,57 +3759,54 @@ static void Got_AddBot(UINT8 **p, INT32 playernum)
LUAh_PlayerJoin(newplayernum);
}
static boolean SV_AddWaitingPlayers(const char *name, const char *name2, const char *name3, const char *name4)
static boolean SV_AddWaitingPlayers(void)
{
INT32 node, n, newplayer = false;
UINT8 buf[4 + MAXPLAYERNAME];
UINT8 *buf_p = buf;
INT32 newplayernum;
UINT8 newplayernum = 0;
// What is the reason for this? Why can't newplayernum always be 0?
// Sal: Because the dedicated player is stupidly forced into players[0].....
if (dedicated)
newplayernum = 1;
for (node = 0; node < MAXNETNODES; node++)
{
// splitscreen can allow 2+ players in one node
for (; nodewaiting[node] > 0; nodewaiting[node]--)
{
UINT8 buf[4];
UINT8 *buf_p = buf;
UINT8 nobotoverwrite;
newplayer = true;
newplayernum = FindRejoinerNum(node);
if (newplayernum == -1)
// search for a free playernum
// we can't use playeringame since it is not updated here
for (; newplayernum < MAXPLAYERS; newplayernum++)
{
UINT8 nobotoverwrite;
// search for a free playernum
// we can't use playeringame since it is not updated here
for (newplayernum = dedicated ? 1 : 0; newplayernum < MAXPLAYERS; newplayernum++)
{
if (playeringame[newplayernum])
continue;
for (n = 0; n < MAXNETNODES; n++)
if (nodetoplayer[n] == newplayernum
|| nodetoplayer2[n] == newplayernum
|| nodetoplayer3[n] == newplayernum
|| nodetoplayer4[n] == newplayernum)
break;
if (n == MAXNETNODES)
for (n = 0; n < MAXNETNODES; n++)
if (nodetoplayer[n] == newplayernum
|| nodetoplayer2[n] == newplayernum
|| nodetoplayer3[n] == newplayernum
|| nodetoplayer4[n] == newplayernum)
break;
}
if (n == MAXNETNODES)
break;
}
nobotoverwrite = newplayernum;
nobotoverwrite = newplayernum;
while (playeringame[nobotoverwrite]
&& players[nobotoverwrite].bot
&& nobotoverwrite < MAXPLAYERS)
{
// Overwrite bots if there are NO other slots available.
nobotoverwrite++;
}
while (playeringame[nobotoverwrite]
&& players[nobotoverwrite].bot
&& nobotoverwrite < MAXPLAYERS)
{
// Only overwrite bots if there are NO other slots available.
nobotoverwrite++;
}
if (nobotoverwrite < MAXPLAYERS)
{
newplayernum = nobotoverwrite;
}
if (nobotoverwrite < MAXPLAYERS)
{
newplayernum = nobotoverwrite;
}
// should never happen since we check the playernum
@ -3877,25 +3819,13 @@ static boolean SV_AddWaitingPlayers(const char *name, const char *name2, const c
WRITEUINT8(buf_p, newplayernum);
if (playerpernode[node] < 1)
{
nodetoplayer[node] = newplayernum;
WRITESTRINGN(buf_p, name, MAXPLAYERNAME);
}
else if (playerpernode[node] < 2)
{
nodetoplayer2[node] = newplayernum;
WRITESTRINGN(buf_p, name2, MAXPLAYERNAME);
}
else if (playerpernode[node] < 3)
{
nodetoplayer3[node] = newplayernum;
WRITESTRINGN(buf_p, name3, MAXPLAYERNAME);
}
else if (playerpernode[node] < 4)
{
nodetoplayer4[node] = newplayernum;
WRITESTRINGN(buf_p, name4, MAXPLAYERNAME);
}
WRITEUINT8(buf_p, nodetoplayer[node]); // consoleplayer
WRITEUINT8(buf_p, playerpernode[node]); // splitscreen num
@ -3903,7 +3833,10 @@ static boolean SV_AddWaitingPlayers(const char *name, const char *name2, const c
playerpernode[node]++;
SendNetXCmd(XD_ADDPLAYER, buf, buf_p - buf);
DEBFILE(va("Server added player %d node %d\n", newplayernum, node));
// use the next free slot (we can't put playeringame[newplayernum] = true here)
newplayernum++;
}
}
@ -3961,7 +3894,7 @@ boolean SV_SpawnServer(void)
else doomcom->numslots = 1;
}
return SV_AddWaitingPlayers(cv_playername[0].zstring, cv_playername[1].zstring, cv_playername[2].zstring, cv_playername[3].zstring);
return SV_AddWaitingPlayers(); // cv_playername[0].zstring, cv_playername[1].zstring, cv_playername[2].zstring, cv_playername[3].zstring
#endif
}
@ -4141,7 +4074,7 @@ static void HandleConnect(SINT8 node)
SV_SendSaveGame(node); // send a complete game state
DEBFILE("send savegame\n");
}
SV_AddWaitingPlayers(names[0], names[1], names[2], names[3]);
SV_AddWaitingPlayers(); // names[0], names[1], names[2], names[3]
joindelay += cv_joindelay.value * TICRATE;
player_joining = true;
}

View file

@ -281,7 +281,6 @@ typedef struct
// SRB2kart
INT32 kartstuff[NUMKARTSTUFF];
angle_t frameangle;
tic_t airtime;
// respawnvars_t

View file

@ -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);
}
}

View file

@ -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;

View file

@ -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},

View file

@ -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;

View file

@ -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];
boolean *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;

View file

@ -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];

View file

@ -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] =

View file

@ -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);

View file

@ -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);

View file

@ -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));

View file

@ -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"))

View file

@ -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"

View file

@ -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);

View file

@ -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
@ -169,6 +169,11 @@ void P_InitPicAnims(void)
INT32 w; // WAD
size_t i;
#if 1
// SRB2Kart: NO ONE GETS ANIMATED TEXTURES UNTIL THE SHITTY BUG GETS FIXED.
(void)w;
(void)i;
#else
I_Assert(animdefs == NULL);
maxanims = 0;
@ -240,6 +245,7 @@ void P_InitPicAnims(void)
// We'll only be using anims from now on.
Z_Free(animdefs);
animdefs = NULL;
#endif
}
void P_ParseANIMDEFSLump(INT32 wadNum, UINT16 lumpnum)
@ -516,11 +522,15 @@ static inline void P_FindAnimatedFlat(INT32 animnum)
*/
void P_SetupLevelFlatAnims(void)
{
#if 1
// SRB2Kart: NO ONE GETS ANIMATED TEXTURES UNTIL THE SHITTY BUG GETS FIXED.
return;
#else
INT32 i;
// the original game flat anim sequences
for (i = 0; anims[i].istexture != -1; i++)
P_FindAnimatedFlat(i);
#endif
}
//

View file

@ -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;

View file

@ -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

View file

@ -120,24 +120,22 @@ void V_CubeApply(UINT8 *red, UINT8 *green, UINT8 *blue);
#define V_USERHUDTRANS ((10-cv_translucenthud.value)<<V_ALPHASHIFT)
#define V_USERHUDTRANSDOUBLE ((10-min(cv_translucenthud.value*2, 10))<<V_ALPHASHIFT)
#define V_AUTOFADEOUT 0x00100000 // used by CECHOs, automatic fade out when almost over
#define V_RETURN8 0x00200000 // 8 pixel return instead of 12
#define V_OFFSET 0x00400000 // account for offsets in patches
#define V_ALLOWLOWERCASE 0x00800000 // (strings only) allow fonts that have lowercase letters to use them
#define V_FLIP 0x00800000 // (patches only) Horizontal flip
#define V_CENTERNAMETAG 0x00800000 // (nametag only) center nametag lines
#define V_RETURN8 0x00100000 // 8 pixel return instead of 12
#define V_OFFSET 0x00200000 // account for offsets in patches
#define V_ALLOWLOWERCASE 0x00400000 // (strings only) allow fonts that have lowercase letters to use them
#define V_FLIP 0x00400000 // (patches only) Horizontal flip
#define V_SLIDEIN 0x00800000 // Slide in from the sides on level load, depending on snap flags
#define V_SNAPTOTOP 0x00800000 // for centering
#define V_SNAPTOBOTTOM 0x01000000 // for centering
#define V_SNAPTOLEFT 0x02000000 // for centering
#define V_SNAPTORIGHT 0x04000000 // for centering
#define V_SNAPTOTOP 0x01000000 // for centering
#define V_SNAPTOBOTTOM 0x02000000 // for centering
#define V_SNAPTOLEFT 0x04000000 // for centering
#define V_SNAPTORIGHT 0x08000000 // for centering
#define V_WRAPX 0x08000000 // Don't clamp texture on X (for HW mode)
#define V_WRAPY 0x10000000 // Don't clamp texture on Y (for HW mode)
#define V_WRAPX 0x10000000 // Don't clamp texture on X (for HW mode)
#define V_WRAPY 0x20000000 // Don't clamp texture on Y (for HW mode)
#define V_NOSCALESTART 0x20000000 // don't scale x, y, start coords
#define V_SPLITSCREEN 0x40000000 // Add half of screen width or height automatically depending on player number
#define V_SLIDEIN 0x80000000 // Slide in from the sides on level load, depending on snap flags
#define V_NOSCALESTART 0x40000000 // don't scale x, y, start coords
#define V_SPLITSCREEN 0x80000000 // Add half of screen width or height automatically depending on player number
// defines for old functions
#define V_DrawPatch(x,y,s,p) V_DrawFixedPatch((x)<<FRACBITS, (y)<<FRACBITS, FRACUNIT, s|V_NOSCALESTART|V_NOSCALEPATCH, p, NULL)