mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Merge branch 'skinlimit' into 'master'
Increase skin limit to 1024 See merge request kart-krew-dev/ring-racers-internal!2743
This commit is contained in:
commit
3f7ae9dd23
27 changed files with 282 additions and 217 deletions
|
|
@ -1645,7 +1645,7 @@ bool CallFunc_PlayerSkin(ACSVM::Thread *thread, const ACSVM::Word *argV, ACSVM::
|
||||||
&& (info->mo != NULL && P_MobjWasRemoved(info->mo) == false)
|
&& (info->mo != NULL && P_MobjWasRemoved(info->mo) == false)
|
||||||
&& (info->mo->player != NULL))
|
&& (info->mo->player != NULL))
|
||||||
{
|
{
|
||||||
UINT8 skin = info->mo->player->skin;
|
UINT16 skin = info->mo->player->skin;
|
||||||
thread->dataStk.push(~env->getString( skins[skin]->name )->idx);
|
thread->dataStk.push(~env->getString( skins[skin]->name )->idx);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1208,7 +1208,7 @@ static void SV_SendPlayerInfo(INT32 node)
|
||||||
|
|
||||||
netbuffer->u.playerinfo[i].score = LONG(players[i].score);
|
netbuffer->u.playerinfo[i].score = LONG(players[i].score);
|
||||||
netbuffer->u.playerinfo[i].timeinserver = SHORT((UINT16)(players[i].jointime / TICRATE));
|
netbuffer->u.playerinfo[i].timeinserver = SHORT((UINT16)(players[i].jointime / TICRATE));
|
||||||
netbuffer->u.playerinfo[i].skin = (UINT8)(players[i].skin);
|
netbuffer->u.playerinfo[i].deprecated_skin = 0xFF;
|
||||||
|
|
||||||
// Extra data
|
// Extra data
|
||||||
netbuffer->u.playerinfo[i].data = 0; //players[i].skincolor;
|
netbuffer->u.playerinfo[i].data = 0; //players[i].skincolor;
|
||||||
|
|
@ -3863,7 +3863,7 @@ static void Got_RemovePlayer(const UINT8 **p, INT32 playernum)
|
||||||
static void Got_AddBot(const UINT8 **p, INT32 playernum)
|
static void Got_AddBot(const UINT8 **p, INT32 playernum)
|
||||||
{
|
{
|
||||||
INT16 newplayernum;
|
INT16 newplayernum;
|
||||||
UINT8 skinnum = 0;
|
UINT16 skinnum = 0;
|
||||||
UINT8 difficulty = DIFFICULTBOT;
|
UINT8 difficulty = DIFFICULTBOT;
|
||||||
botStyle_e style = BOT_STYLE_NORMAL;
|
botStyle_e style = BOT_STYLE_NORMAL;
|
||||||
|
|
||||||
|
|
@ -3879,7 +3879,7 @@ static void Got_AddBot(const UINT8 **p, INT32 playernum)
|
||||||
}
|
}
|
||||||
|
|
||||||
newplayernum = READUINT8(*p);
|
newplayernum = READUINT8(*p);
|
||||||
skinnum = READUINT8(*p);
|
skinnum = READUINT16(*p);
|
||||||
difficulty = READUINT8(*p);
|
difficulty = READUINT8(*p);
|
||||||
style = READUINT8(*p);
|
style = READUINT8(*p);
|
||||||
|
|
||||||
|
|
@ -4050,11 +4050,11 @@ static boolean SV_AddWaitingPlayers(SINT8 node, UINT8 *availabilities,
|
||||||
}
|
}
|
||||||
|
|
||||||
/*--------------------------------------------------
|
/*--------------------------------------------------
|
||||||
boolean K_AddBotFromServer(UINT8 skin, UINT8 difficulty, botStyle_e style, UINT8 *p)
|
boolean K_AddBotFromServer(UINT16 skin, UINT8 difficulty, botStyle_e style, UINT8 *p)
|
||||||
|
|
||||||
See header file for description.
|
See header file for description.
|
||||||
--------------------------------------------------*/
|
--------------------------------------------------*/
|
||||||
boolean K_AddBotFromServer(UINT8 skin, UINT8 difficulty, botStyle_e style, UINT8 *p)
|
boolean K_AddBotFromServer(UINT16 skin, UINT8 difficulty, botStyle_e style, UINT8 *p)
|
||||||
{
|
{
|
||||||
UINT8 newplayernum = *p;
|
UINT8 newplayernum = *p;
|
||||||
|
|
||||||
|
|
@ -4095,7 +4095,7 @@ boolean K_AddBotFromServer(UINT8 skin, UINT8 difficulty, botStyle_e style, UINT8
|
||||||
|
|
||||||
if (server)
|
if (server)
|
||||||
{
|
{
|
||||||
UINT8 buf[4];
|
UINT8 buf[5];
|
||||||
UINT8 *buf_p = buf;
|
UINT8 *buf_p = buf;
|
||||||
|
|
||||||
WRITEUINT8(buf_p, newplayernum);
|
WRITEUINT8(buf_p, newplayernum);
|
||||||
|
|
@ -4105,7 +4105,7 @@ boolean K_AddBotFromServer(UINT8 skin, UINT8 difficulty, botStyle_e style, UINT8
|
||||||
skin = numskins;
|
skin = numskins;
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITEUINT8(buf_p, skin);
|
WRITEUINT16(buf_p, skin);
|
||||||
|
|
||||||
if (difficulty < 1)
|
if (difficulty < 1)
|
||||||
{
|
{
|
||||||
|
|
@ -4555,8 +4555,7 @@ static void HandleConnect(SINT8 node)
|
||||||
/// \todo fix this !!!
|
/// \todo fix this !!!
|
||||||
return; // restart the while
|
return; // restart the while
|
||||||
}
|
}
|
||||||
//if (gamestate != GS_LEVEL) // GS_INTERMISSION, etc?
|
|
||||||
// SV_SendPlayerConfigs(node); // send bare minimum player info
|
|
||||||
G_SetGamestate(backupstate);
|
G_SetGamestate(backupstate);
|
||||||
DEBFILE("new node joined\n");
|
DEBFILE("new node joined\n");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -348,23 +348,12 @@ struct plrinfo
|
||||||
char name[MAXPLAYERNAME+1];
|
char name[MAXPLAYERNAME+1];
|
||||||
UINT8 address[4]; // sending another string would run us up against MAXPACKETLENGTH
|
UINT8 address[4]; // sending another string would run us up against MAXPACKETLENGTH
|
||||||
UINT8 team;
|
UINT8 team;
|
||||||
UINT8 skin;
|
UINT8 deprecated_skin;
|
||||||
UINT8 data; // Color is first four bits, hasflag, isit and issuper have one bit each, the last is unused.
|
UINT8 data; // Color is first four bits, hasflag, isit and issuper have one bit each, the last is unused.
|
||||||
UINT32 score;
|
UINT32 score;
|
||||||
UINT16 timeinserver; // In seconds.
|
UINT16 timeinserver; // In seconds.
|
||||||
} ATTRPACK;
|
} ATTRPACK;
|
||||||
|
|
||||||
// Shortest player information for join during intermission.
|
|
||||||
struct plrconfig
|
|
||||||
{
|
|
||||||
char name[MAXPLAYERNAME+1];
|
|
||||||
UINT8 skin;
|
|
||||||
UINT16 color;
|
|
||||||
UINT32 pflags;
|
|
||||||
UINT32 score;
|
|
||||||
UINT8 team;
|
|
||||||
} ATTRPACK;
|
|
||||||
|
|
||||||
struct filesneededconfig_pak
|
struct filesneededconfig_pak
|
||||||
{
|
{
|
||||||
INT32 first;
|
INT32 first;
|
||||||
|
|
@ -470,7 +459,6 @@ struct doomdata_t
|
||||||
askinfo_pak askinfo; // 61 bytes
|
askinfo_pak askinfo; // 61 bytes
|
||||||
msaskinfo_pak msaskinfo; // 22 bytes
|
msaskinfo_pak msaskinfo; // 22 bytes
|
||||||
plrinfo playerinfo[MSCOMPAT_MAXPLAYERS];// 576 bytes(?)
|
plrinfo playerinfo[MSCOMPAT_MAXPLAYERS];// 576 bytes(?)
|
||||||
plrconfig playerconfig[MAXPLAYERS]; // (up to) 528 bytes(?)
|
|
||||||
INT32 filesneedednum; // 4 bytes
|
INT32 filesneedednum; // 4 bytes
|
||||||
filesneededconfig_pak filesneededcfg; // ??? bytes
|
filesneededconfig_pak filesneededcfg; // ??? bytes
|
||||||
netinfo_pak netinfo; // Don't believe their lies
|
netinfo_pak netinfo; // Don't believe their lies
|
||||||
|
|
@ -634,7 +622,7 @@ void SV_StopServer(void);
|
||||||
void SV_ResetServer(void);
|
void SV_ResetServer(void);
|
||||||
|
|
||||||
/*--------------------------------------------------
|
/*--------------------------------------------------
|
||||||
boolean K_AddBotFromServer(UINT8 skin, UINT8 difficulty, botStyle_e style, UINT8 *newplayernum);
|
boolean K_AddBotFromServer(UINT16 skin, UINT8 difficulty, botStyle_e style, UINT8 *newplayernum);
|
||||||
|
|
||||||
Adds a new bot, using a server-sided packet sent to all clients.
|
Adds a new bot, using a server-sided packet sent to all clients.
|
||||||
Using regular K_AddBot wherever possible is better, but this is kept
|
Using regular K_AddBot wherever possible is better, but this is kept
|
||||||
|
|
@ -651,7 +639,7 @@ void SV_ResetServer(void);
|
||||||
true if a bot can be added via a packet later, otherwise false.
|
true if a bot can be added via a packet later, otherwise false.
|
||||||
--------------------------------------------------*/
|
--------------------------------------------------*/
|
||||||
|
|
||||||
boolean K_AddBotFromServer(UINT8 skin, UINT8 difficulty, botStyle_e style, UINT8 *p);
|
boolean K_AddBotFromServer(UINT16 skin, UINT8 difficulty, botStyle_e style, UINT8 *p);
|
||||||
|
|
||||||
void CL_AddSplitscreenPlayer(void);
|
void CL_AddSplitscreenPlayer(void);
|
||||||
void CL_RemoveSplitscreenPlayer(UINT8 p);
|
void CL_RemoveSplitscreenPlayer(UINT8 p);
|
||||||
|
|
|
||||||
|
|
@ -1048,13 +1048,13 @@ static void SendNameAndColor(const UINT8 n)
|
||||||
CleanupPlayerName(playernum, cv_playername[n].zstring);
|
CleanupPlayerName(playernum, cv_playername[n].zstring);
|
||||||
}
|
}
|
||||||
|
|
||||||
char buf[MAXPLAYERNAME+12];
|
char buf[MAXPLAYERNAME+13];
|
||||||
char *p = buf;
|
char *p = buf;
|
||||||
|
|
||||||
// Finally write out the complete packet and send it off.
|
// Finally write out the complete packet and send it off.
|
||||||
WRITESTRINGN(p, cv_playername[n].zstring, MAXPLAYERNAME);
|
WRITESTRINGN(p, cv_playername[n].zstring, MAXPLAYERNAME);
|
||||||
WRITEUINT16(p, sendColor);
|
WRITEUINT16(p, sendColor);
|
||||||
WRITEUINT8(p, (UINT8)cv_skin[n].value);
|
WRITEUINT16(p, (UINT16)cv_skin[n].value);
|
||||||
if (horngoner)
|
if (horngoner)
|
||||||
{
|
{
|
||||||
WRITEINT16(p, (-1));
|
WRITEINT16(p, (-1));
|
||||||
|
|
@ -1135,7 +1135,7 @@ static void Got_NameAndColor(const UINT8 **cp, INT32 playernum)
|
||||||
player_t *p = &players[playernum];
|
player_t *p = &players[playernum];
|
||||||
char name[MAXPLAYERNAME+1];
|
char name[MAXPLAYERNAME+1];
|
||||||
UINT16 color, followercolor;
|
UINT16 color, followercolor;
|
||||||
UINT8 skin;
|
UINT16 skin;
|
||||||
INT16 follower;
|
INT16 follower;
|
||||||
UINT8 i;
|
UINT8 i;
|
||||||
|
|
||||||
|
|
@ -1164,7 +1164,7 @@ static void Got_NameAndColor(const UINT8 **cp, INT32 playernum)
|
||||||
|
|
||||||
READSTRINGN(*cp, name, MAXPLAYERNAME);
|
READSTRINGN(*cp, name, MAXPLAYERNAME);
|
||||||
color = READUINT16(*cp);
|
color = READUINT16(*cp);
|
||||||
skin = READUINT8(*cp);
|
skin = READUINT16(*cp);
|
||||||
follower = READINT16(*cp);
|
follower = READINT16(*cp);
|
||||||
followercolor = READUINT16(*cp);
|
followercolor = READUINT16(*cp);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -694,8 +694,8 @@ struct player_t
|
||||||
INT32 skin;
|
INT32 skin;
|
||||||
UINT8 availabilities[MAXAVAILABILITY];
|
UINT8 availabilities[MAXAVAILABILITY];
|
||||||
|
|
||||||
UINT8 fakeskin; // ironman
|
UINT16 fakeskin; // ironman
|
||||||
UINT8 lastfakeskin;
|
UINT16 lastfakeskin;
|
||||||
|
|
||||||
UINT8 kartspeed; // Kart speed stat between 1 and 9
|
UINT8 kartspeed; // Kart speed stat between 1 and 9
|
||||||
UINT8 kartweight; // Kart weight stat between 1 and 9
|
UINT8 kartweight; // Kart weight stat between 1 and 9
|
||||||
|
|
|
||||||
|
|
@ -170,9 +170,10 @@ extern char logfilename[1024];
|
||||||
#define MAXSPLITSCREENPLAYERS 4 // Max number of players on a single computer
|
#define MAXSPLITSCREENPLAYERS 4 // Max number of players on a single computer
|
||||||
#define MAXGAMEPADS (MAXSPLITSCREENPLAYERS * 2) // Number of gamepads we'll be allowing
|
#define MAXGAMEPADS (MAXSPLITSCREENPLAYERS * 2) // Number of gamepads we'll be allowing
|
||||||
|
|
||||||
#define MAXSKINS UINT8_MAX
|
#define MAXSKINS 1024
|
||||||
#define SKINNAMESIZE 16
|
#define SKINNAMESIZE 16
|
||||||
#define MAXAVAILABILITY ((MAXSKINS + 7)/8)
|
#define MAXSKINUNAVAILABLE 128
|
||||||
|
#define MAXAVAILABILITY (MAXSKINUNAVAILABLE / 8)
|
||||||
|
|
||||||
#define COLORRAMPSIZE 16
|
#define COLORRAMPSIZE 16
|
||||||
#define MAXCOLORNAME 32
|
#define MAXCOLORNAME 32
|
||||||
|
|
|
||||||
|
|
@ -145,7 +145,7 @@ extern unloaded_skin_t *unloadedskins;
|
||||||
struct skinreference_t
|
struct skinreference_t
|
||||||
{
|
{
|
||||||
unloaded_skin_t *unloaded;
|
unloaded_skin_t *unloaded;
|
||||||
UINT8 id;
|
UINT16 id;
|
||||||
};
|
};
|
||||||
|
|
||||||
// mapvisited is now a set of flags that says what we've done in the map.
|
// mapvisited is now a set of flags that says what we've done in the map.
|
||||||
|
|
|
||||||
274
src/g_demo.cpp
274
src/g_demo.cpp
|
|
@ -98,11 +98,15 @@ tic_t demostarttime; // for comparative timing purposes
|
||||||
|
|
||||||
static constexpr DemoBufferSizes get_buffer_sizes(UINT16 version)
|
static constexpr DemoBufferSizes get_buffer_sizes(UINT16 version)
|
||||||
{
|
{
|
||||||
// These sizes are compatible as of version 0x000A
|
if (version < 0x0010)
|
||||||
|
return {21, 16, 32, 32};
|
||||||
|
|
||||||
|
// These sizes are compatible as of version 0x0010
|
||||||
static_assert(MAXPLAYERNAME == 21);
|
static_assert(MAXPLAYERNAME == 21);
|
||||||
static_assert(SKINNAMESIZE == 16);
|
static_assert(SKINNAMESIZE == 16);
|
||||||
static_assert(MAXCOLORNAME == 32);
|
static_assert(MAXCOLORNAME == 32);
|
||||||
return {21, 16, 32};
|
static_assert(MAXAVAILABILITY == 16);
|
||||||
|
return {21, 16, 32, 16};
|
||||||
}
|
}
|
||||||
|
|
||||||
static DemoBufferSizes g_buffer_sizes;
|
static DemoBufferSizes g_buffer_sizes;
|
||||||
|
|
@ -138,7 +142,8 @@ static struct {
|
||||||
INT32 health;
|
INT32 health;
|
||||||
|
|
||||||
// EZT_STATDATA
|
// EZT_STATDATA
|
||||||
UINT8 skinid, kartspeed, kartweight;
|
UINT16 skinid;
|
||||||
|
UINT8 kartspeed, kartweight;
|
||||||
UINT32 charflags;
|
UINT32 charflags;
|
||||||
|
|
||||||
UINT8 desyncframes; // Don't try to resync unless we've been off for two frames, to monkeypatch a few trouble spots
|
UINT8 desyncframes; // Don't try to resync unless we've been off for two frames, to monkeypatch a few trouble spots
|
||||||
|
|
@ -169,11 +174,14 @@ demoghost *ghosts = NULL;
|
||||||
// - Slope physics changed with a scaling fix
|
// - Slope physics changed with a scaling fix
|
||||||
// - 0x000C (Ring Racers v2.2)
|
// - 0x000C (Ring Racers v2.2)
|
||||||
// - 0x000D (Ring Racers v2.3)
|
// - 0x000D (Ring Racers v2.3)
|
||||||
// - 0x000E (Ring Racers v2.4 in-dev before DYNSLOPE thinker change)
|
|
||||||
// - 0x000F (Ring Racers v2.4)
|
// Currently supported:
|
||||||
|
// - 0x000E (Ring Racers 2.4 staff ghosts part 1 - initial recordings)
|
||||||
|
// - 0x000F (Ring Racers 2.4 staff ghosts part 2 - dynslopes thinker fix)
|
||||||
|
// - 0x0010 (Ring Racers 2.4 staff ghosts part 3 - skinlimit raise. don't say we never did anythin for 'ya)
|
||||||
|
|
||||||
#define MINDEMOVERSION 0x000E
|
#define MINDEMOVERSION 0x000E
|
||||||
#define DEMOVERSION 0x000F
|
#define DEMOVERSION 0x0010
|
||||||
|
|
||||||
boolean G_CompatLevel(UINT16 level)
|
boolean G_CompatLevel(UINT16 level)
|
||||||
{
|
{
|
||||||
|
|
@ -330,6 +338,8 @@ void G_ReadDemoExtraData(void)
|
||||||
{
|
{
|
||||||
players[p].availabilities[i] = READUINT8(demobuf.p);
|
players[p].availabilities[i] = READUINT8(demobuf.p);
|
||||||
}
|
}
|
||||||
|
if (g_buffer_sizes.availability > static_cast<size_t>(i))
|
||||||
|
demobuf.p += (g_buffer_sizes.availability - i);
|
||||||
|
|
||||||
players[p].bot = !!(READUINT8(demobuf.p));
|
players[p].bot = !!(READUINT8(demobuf.p));
|
||||||
if (players[p].bot)
|
if (players[p].bot)
|
||||||
|
|
@ -389,13 +399,17 @@ void G_ReadDemoExtraData(void)
|
||||||
}
|
}
|
||||||
if (extradata & DXD_SKIN)
|
if (extradata & DXD_SKIN)
|
||||||
{
|
{
|
||||||
UINT8 skinid;
|
UINT16 skinid;
|
||||||
|
|
||||||
// Skin
|
// Skin
|
||||||
|
|
||||||
skinid = READUINT8(demobuf.p);
|
if (demo.version >= 0x0010)
|
||||||
|
skinid = READUINT16(demobuf.p);
|
||||||
|
else
|
||||||
|
skinid = READUINT8(demobuf.p);
|
||||||
if (skinid >= demo.numskins)
|
if (skinid >= demo.numskins)
|
||||||
skinid = 0;
|
skinid = 0;
|
||||||
|
|
||||||
ghostext[p].skinid = demo.currentskinid[p] = skinid;
|
ghostext[p].skinid = demo.currentskinid[p] = skinid;
|
||||||
SetPlayerSkinByNum(p, skinid);
|
SetPlayerSkinByNum(p, skinid);
|
||||||
|
|
||||||
|
|
@ -537,7 +551,7 @@ void G_WriteDemoExtraData(void)
|
||||||
if (demo_extradata[i] & DXD_SKIN)
|
if (demo_extradata[i] & DXD_SKIN)
|
||||||
{
|
{
|
||||||
// Skin
|
// Skin
|
||||||
WRITEUINT8(demobuf.p, players[i].skin);
|
WRITEUINT16(demobuf.p, players[i].skin);
|
||||||
}
|
}
|
||||||
if (demo_extradata[i] & DXD_COLOR)
|
if (demo_extradata[i] & DXD_COLOR)
|
||||||
{
|
{
|
||||||
|
|
@ -922,14 +936,14 @@ void G_WriteGhostTic(mobj_t *ghost, INT32 playernum)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ghost->player && (
|
if (ghost->player && (
|
||||||
ghostext[playernum].skinid != (UINT8)(((skin_t *)ghost->skin)->skinnum) ||
|
ghostext[playernum].skinid != (UINT16)(((skin_t *)ghost->skin)->skinnum) ||
|
||||||
ghostext[playernum].kartspeed != ghost->player->kartspeed ||
|
ghostext[playernum].kartspeed != ghost->player->kartspeed ||
|
||||||
ghostext[playernum].kartweight != ghost->player->kartweight ||
|
ghostext[playernum].kartweight != ghost->player->kartweight ||
|
||||||
ghostext[playernum].charflags != ghost->player->charflags
|
ghostext[playernum].charflags != ghost->player->charflags
|
||||||
))
|
))
|
||||||
{
|
{
|
||||||
ghostext[playernum].flags |= EZT_STATDATA;
|
ghostext[playernum].flags |= EZT_STATDATA;
|
||||||
ghostext[playernum].skinid = (UINT8)(((skin_t *)ghost->skin)->skinnum);
|
ghostext[playernum].skinid = (UINT16)(((skin_t *)ghost->skin)->skinnum);
|
||||||
ghostext[playernum].kartspeed = ghost->player->kartspeed;
|
ghostext[playernum].kartspeed = ghost->player->kartspeed;
|
||||||
ghostext[playernum].kartweight = ghost->player->kartweight;
|
ghostext[playernum].kartweight = ghost->player->kartweight;
|
||||||
ghostext[playernum].charflags = ghost->player->charflags;
|
ghostext[playernum].charflags = ghost->player->charflags;
|
||||||
|
|
@ -984,7 +998,7 @@ void G_WriteGhostTic(mobj_t *ghost, INT32 playernum)
|
||||||
}
|
}
|
||||||
if (ghostext[playernum].flags & EZT_STATDATA)
|
if (ghostext[playernum].flags & EZT_STATDATA)
|
||||||
{
|
{
|
||||||
WRITEUINT8(demobuf.p,ghostext[playernum].skinid);
|
WRITEUINT16(demobuf.p,ghostext[playernum].skinid);
|
||||||
WRITEUINT8(demobuf.p,ghostext[playernum].kartspeed);
|
WRITEUINT8(demobuf.p,ghostext[playernum].kartspeed);
|
||||||
WRITEUINT8(demobuf.p,ghostext[playernum].kartweight);
|
WRITEUINT8(demobuf.p,ghostext[playernum].kartweight);
|
||||||
WRITEUINT32(demobuf.p, ghostext[playernum].charflags);
|
WRITEUINT32(demobuf.p, ghostext[playernum].charflags);
|
||||||
|
|
@ -1013,7 +1027,7 @@ void G_WriteGhostTic(mobj_t *ghost, INT32 playernum)
|
||||||
if (ghost->player->followmobj->colorized)
|
if (ghost->player->followmobj->colorized)
|
||||||
followtic |= FZT_COLORIZED;
|
followtic |= FZT_COLORIZED;
|
||||||
if (followtic & FZT_SKIN)
|
if (followtic & FZT_SKIN)
|
||||||
WRITEUINT8(demobuf.p,(UINT8)(((skin_t *)(ghost->player->followmobj->skin))->skinnum));
|
WRITEUINT16(demobuf.p,(UINT16)(((skin_t *)(ghost->player->followmobj->skin))->skinnum));
|
||||||
oldghost[playernum].flags2 |= MF2_AMBUSH;
|
oldghost[playernum].flags2 |= MF2_AMBUSH;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1160,9 +1174,18 @@ void G_ConsGhostTic(INT32 playernum)
|
||||||
}
|
}
|
||||||
if (xziptic & EZT_STATDATA)
|
if (xziptic & EZT_STATDATA)
|
||||||
{
|
{
|
||||||
ghostext[playernum].skinid = READUINT8(demobuf.p);
|
UINT16 skinid;
|
||||||
if (ghostext[playernum].skinid >= demo.numskins)
|
|
||||||
ghostext[playernum].skinid = 0;
|
// Skin
|
||||||
|
|
||||||
|
if (demo.version >= 0x0010)
|
||||||
|
skinid = READUINT16(demobuf.p);
|
||||||
|
else
|
||||||
|
skinid = READUINT8(demobuf.p);
|
||||||
|
if (skinid >= demo.numskins)
|
||||||
|
skinid = 0;
|
||||||
|
|
||||||
|
ghostext[playernum].skinid = skinid;
|
||||||
ghostext[playernum].kartspeed = READUINT8(demobuf.p);
|
ghostext[playernum].kartspeed = READUINT8(demobuf.p);
|
||||||
ghostext[playernum].kartweight = READUINT8(demobuf.p);
|
ghostext[playernum].kartweight = READUINT8(demobuf.p);
|
||||||
ghostext[playernum].charflags = READUINT32(demobuf.p);
|
ghostext[playernum].charflags = READUINT32(demobuf.p);
|
||||||
|
|
@ -1176,7 +1199,11 @@ void G_ConsGhostTic(INT32 playernum)
|
||||||
{
|
{
|
||||||
demobuf.p += sizeof(INT16);
|
demobuf.p += sizeof(INT16);
|
||||||
if (followtic & FZT_SKIN)
|
if (followtic & FZT_SKIN)
|
||||||
|
{
|
||||||
demobuf.p++;
|
demobuf.p++;
|
||||||
|
if (demo.version >= 0x0010)
|
||||||
|
demobuf.p++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (followtic & FZT_SCALE)
|
if (followtic & FZT_SCALE)
|
||||||
demobuf.p += sizeof(fixed_t);
|
demobuf.p += sizeof(fixed_t);
|
||||||
|
|
@ -1247,7 +1274,7 @@ void G_ConsGhostTic(INT32 playernum)
|
||||||
if (players[playernum].kartspeed != ghostext[playernum].kartspeed
|
if (players[playernum].kartspeed != ghostext[playernum].kartspeed
|
||||||
|| players[playernum].kartweight != ghostext[playernum].kartweight
|
|| players[playernum].kartweight != ghostext[playernum].kartweight
|
||||||
|| players[playernum].charflags != ghostext[playernum].charflags ||
|
|| players[playernum].charflags != ghostext[playernum].charflags ||
|
||||||
demo.skinlist[ghostext[playernum].skinid].mapping != (UINT8)(((skin_t *)testmo->skin)->skinnum))
|
demo.skinlist[ghostext[playernum].skinid].mapping != (UINT16)(((skin_t *)testmo->skin)->skinnum))
|
||||||
{
|
{
|
||||||
if (demosynced)
|
if (demosynced)
|
||||||
{
|
{
|
||||||
|
|
@ -1289,7 +1316,7 @@ void G_GhostTicker(void)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// Pause jhosts that cross until the timer starts.
|
// Pause jhosts that cross until the timer starts.
|
||||||
if (g->attackstart != INT32_MAX && leveltime < starttime && leveltime >= g->attackstart && G_TimeAttackStart())
|
if (g->attackstart != UINT32_MAX && leveltime < starttime && leveltime >= g->attackstart && G_TimeAttackStart())
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
@ -1333,7 +1360,7 @@ fadeghost:
|
||||||
ziptic = READUINT8(g->p);
|
ziptic = READUINT8(g->p);
|
||||||
if (ziptic & DXD_JOINDATA)
|
if (ziptic & DXD_JOINDATA)
|
||||||
{
|
{
|
||||||
g->p += MAXAVAILABILITY;
|
g->p += g->sizes.availability;
|
||||||
if (READUINT8(g->p) != 0)
|
if (READUINT8(g->p) != 0)
|
||||||
I_Error("Ghost is not a record attack ghost (bot JOINDATA)");
|
I_Error("Ghost is not a record attack ghost (bot JOINDATA)");
|
||||||
}
|
}
|
||||||
|
|
@ -1349,7 +1376,11 @@ fadeghost:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ziptic & DXD_SKIN)
|
if (ziptic & DXD_SKIN)
|
||||||
|
{
|
||||||
g->p++; // We _could_ read this info, but it shouldn't change anything in record attack...
|
g->p++; // We _could_ read this info, but it shouldn't change anything in record attack...
|
||||||
|
if (g->version >= 0x0010)
|
||||||
|
g->p++;
|
||||||
|
}
|
||||||
if (ziptic & DXD_COLOR)
|
if (ziptic & DXD_COLOR)
|
||||||
g->p += g->sizes.color_name; // Same tbh
|
g->p += g->sizes.color_name; // Same tbh
|
||||||
if (ziptic & DXD_NAME)
|
if (ziptic & DXD_NAME)
|
||||||
|
|
@ -1511,9 +1542,17 @@ fadeghost:
|
||||||
g->p += 1 + 1 + 4; // itemtype, itemamount, health
|
g->p += 1 + 1 + 4; // itemtype, itemamount, health
|
||||||
if (xziptic & EZT_STATDATA)
|
if (xziptic & EZT_STATDATA)
|
||||||
{
|
{
|
||||||
UINT8 skinid = READUINT8(g->p);
|
UINT16 skinid;
|
||||||
|
|
||||||
|
// Skin
|
||||||
|
|
||||||
|
if (g->version >= 0x0010)
|
||||||
|
skinid = READUINT16(g->p);
|
||||||
|
else
|
||||||
|
skinid = READUINT8(g->p);
|
||||||
if (skinid >= g->numskins)
|
if (skinid >= g->numskins)
|
||||||
skinid = 0;
|
skinid = 0;
|
||||||
|
|
||||||
g->mo->skin = skins[g->skinlist[skinid].mapping];
|
g->mo->skin = skins[g->skinlist[skinid].mapping];
|
||||||
g->p += 6; // kartspeed, kartweight, charflags
|
g->p += 6; // kartspeed, kartweight, charflags
|
||||||
}
|
}
|
||||||
|
|
@ -1549,7 +1588,14 @@ fadeghost:
|
||||||
follow->colorized = true;
|
follow->colorized = true;
|
||||||
|
|
||||||
if (followtic & FZT_SKIN)
|
if (followtic & FZT_SKIN)
|
||||||
follow->skin = skins[READUINT8(g->p)];
|
{
|
||||||
|
UINT16 id;
|
||||||
|
if (g->version >= 0x0010)
|
||||||
|
id = READUINT16(g->p);
|
||||||
|
else
|
||||||
|
id = READUINT8(g->p);
|
||||||
|
follow->skin = skins[id];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (follow)
|
if (follow)
|
||||||
{
|
{
|
||||||
|
|
@ -1618,10 +1664,10 @@ skippedghosttic:
|
||||||
I_Error("Ghost is not a record attack ghost GHOSTEND"); //@TODO lmao don't blow up like this
|
I_Error("Ghost is not a record attack ghost GHOSTEND"); //@TODO lmao don't blow up like this
|
||||||
|
|
||||||
// If the timer started, skip ahead until the ghost starts too.
|
// If the timer started, skip ahead until the ghost starts too.
|
||||||
if (!fastforward && attacktimingstarted && g->attackstart != INT32_MAX && leveltime < g->attackstart && G_TimeAttackStart())
|
if (!fastforward && attacktimingstarted && g->attackstart != UINT32_MAX && leveltime < g->attackstart && G_TimeAttackStart())
|
||||||
{
|
{
|
||||||
fastforward = g->attackstart - leveltime;
|
fastforward = g->attackstart - leveltime;
|
||||||
g->attackstart = INT32_MAX;
|
g->attackstart = UINT32_MAX;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fastforward)
|
if (fastforward)
|
||||||
|
|
@ -1871,10 +1917,10 @@ static UINT8 G_CheckDemoExtraFiles(savebuffer_t *info, boolean quick)
|
||||||
|
|
||||||
static void G_SaveDemoSkins(UINT8 **pp, const DemoBufferSizes &psizes)
|
static void G_SaveDemoSkins(UINT8 **pp, const DemoBufferSizes &psizes)
|
||||||
{
|
{
|
||||||
UINT8 i;
|
UINT16 i;
|
||||||
UINT8 *availabilitiesbuffer = R_GetSkinAvailabilities(true, -1);
|
UINT8 *availabilitiesbuffer = R_GetSkinAvailabilities(true, -1);
|
||||||
|
|
||||||
WRITEUINT8((*pp), numskins);
|
WRITEUINT16((*pp), numskins);
|
||||||
for (i = 0; i < numskins; i++)
|
for (i = 0; i < numskins; i++)
|
||||||
{
|
{
|
||||||
// Skinname, for first attempt at identification.
|
// Skinname, for first attempt at identification.
|
||||||
|
|
@ -1892,9 +1938,10 @@ static void G_SaveDemoSkins(UINT8 **pp, const DemoBufferSizes &psizes)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static democharlist_t *G_LoadDemoSkins(const DemoBufferSizes &psizes, savebuffer_t *info, UINT8 *worknumskins, boolean getclosest)
|
static democharlist_t *G_LoadDemoSkins(const DemoBufferSizes &psizes, savebuffer_t *info, UINT16 *worknumskins, boolean getclosest)
|
||||||
{
|
{
|
||||||
UINT8 i, byte, shif;
|
UINT16 i;
|
||||||
|
UINT8 byte, shif;
|
||||||
democharlist_t *skinlist = NULL;
|
democharlist_t *skinlist = NULL;
|
||||||
|
|
||||||
if (P_SaveBufferRemaining(info) < 1)
|
if (P_SaveBufferRemaining(info) < 1)
|
||||||
|
|
@ -1902,7 +1949,11 @@ static democharlist_t *G_LoadDemoSkins(const DemoBufferSizes &psizes, savebuffer
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
(*worknumskins) = READUINT8(info->p);
|
if (psizes.availability == 32) // version isn't accessible here
|
||||||
|
(*worknumskins) = READUINT8(info->p);
|
||||||
|
else
|
||||||
|
(*worknumskins) = READUINT16(info->p);
|
||||||
|
|
||||||
if (!(*worknumskins))
|
if (!(*worknumskins))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
|
@ -1943,18 +1994,18 @@ static democharlist_t *G_LoadDemoSkins(const DemoBufferSizes &psizes, savebuffer
|
||||||
|
|
||||||
if (result != -1)
|
if (result != -1)
|
||||||
{
|
{
|
||||||
skinlist[i].mapping = (UINT8)result;
|
skinlist[i].mapping = (UINT16)result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (P_SaveBufferRemaining(info) < psizes.availability)
|
||||||
|
{
|
||||||
|
Z_Free(skinlist);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
for (byte = 0; byte < MAXAVAILABILITY; byte++)
|
for (byte = 0; byte < MAXAVAILABILITY; byte++)
|
||||||
{
|
{
|
||||||
if (P_SaveBufferRemaining(info) < 1)
|
|
||||||
{
|
|
||||||
Z_Free(skinlist);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
UINT8 availabilitiesbuffer = READUINT8(info->p);
|
UINT8 availabilitiesbuffer = READUINT8(info->p);
|
||||||
|
|
||||||
for (shif = 0; shif < 8; shif++)
|
for (shif = 0; shif < 8; shif++)
|
||||||
|
|
@ -1971,15 +2022,22 @@ static democharlist_t *G_LoadDemoSkins(const DemoBufferSizes &psizes, savebuffer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (psizes.availability > static_cast<size_t>(byte))
|
||||||
|
info->p += (psizes.availability - byte);
|
||||||
|
|
||||||
return skinlist;
|
return skinlist;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void G_SkipDemoSkins(UINT8 **pp, const DemoBufferSizes& psizes)
|
static void G_SkipDemoSkins(UINT8 **pp, const DemoBufferSizes& psizes)
|
||||||
{
|
{
|
||||||
UINT8 demonumskins;
|
UINT16 demonumskins;
|
||||||
UINT8 i;
|
UINT16 i;
|
||||||
|
|
||||||
|
if (psizes.availability == 32) // version isn't accessible here
|
||||||
|
demonumskins = READUINT8((*pp));
|
||||||
|
else
|
||||||
|
demonumskins = READUINT16((*pp));
|
||||||
|
|
||||||
demonumskins = READUINT8((*pp));
|
|
||||||
for (i = 0; i < demonumskins; ++i)
|
for (i = 0; i < demonumskins; ++i)
|
||||||
{
|
{
|
||||||
(*pp) += psizes.skin_name; // name
|
(*pp) += psizes.skin_name; // name
|
||||||
|
|
@ -1988,7 +2046,7 @@ static void G_SkipDemoSkins(UINT8 **pp, const DemoBufferSizes& psizes)
|
||||||
(*pp) += 4; // flags
|
(*pp) += 4; // flags
|
||||||
}
|
}
|
||||||
|
|
||||||
(*pp) += MAXAVAILABILITY;
|
(*pp) += psizes.availability;
|
||||||
}
|
}
|
||||||
|
|
||||||
void G_BeginRecording(void)
|
void G_BeginRecording(void)
|
||||||
|
|
@ -2086,7 +2144,7 @@ void G_BeginRecording(void)
|
||||||
|
|
||||||
// If special attack-start timing applies, we need to know where to skip the ghost to
|
// If special attack-start timing applies, we need to know where to skip the ghost to
|
||||||
demoattack_p = demobuf.p;
|
demoattack_p = demobuf.p;
|
||||||
WRITEUINT32(demobuf.p, INT32_MAX);
|
WRITEUINT32(demobuf.p, UINT32_MAX);
|
||||||
|
|
||||||
demosplits_p = demobuf.p;
|
demosplits_p = demobuf.p;
|
||||||
for (i = 0; i < MAXSPLITS; i++)
|
for (i = 0; i < MAXSPLITS; i++)
|
||||||
|
|
@ -2164,8 +2222,8 @@ void G_BeginRecording(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Skin (now index into demo.skinlist)
|
// Skin (now index into demo.skinlist)
|
||||||
WRITEUINT8(demobuf.p, player->skin);
|
WRITEUINT16(demobuf.p, player->skin);
|
||||||
WRITEUINT8(demobuf.p, player->lastfakeskin);
|
WRITEUINT16(demobuf.p, player->lastfakeskin);
|
||||||
|
|
||||||
WRITEUINT8(demobuf.p, player->team);
|
WRITEUINT8(demobuf.p, player->team);
|
||||||
|
|
||||||
|
|
@ -2305,10 +2363,6 @@ void G_SetDemoCheckpointTiming(player_t *player, tic_t time, UINT8 checkpoint)
|
||||||
if (points <= MAXSPLITS)
|
if (points <= MAXSPLITS)
|
||||||
endtime = g->splits[points-1];
|
endtime = g->splits[points-1];
|
||||||
|
|
||||||
// Staff ghost oopsie. Fuckin, uh,
|
|
||||||
if (endtime == INT32_MAX)
|
|
||||||
endtime = UINT32_MAX;
|
|
||||||
|
|
||||||
if (lowestend > oldbest) // Not losing to any ghost
|
if (lowestend > oldbest) // Not losing to any ghost
|
||||||
{
|
{
|
||||||
// Not currently losing to a ghost
|
// Not currently losing to a ghost
|
||||||
|
|
@ -2488,15 +2542,10 @@ UINT8 G_CmpDemoTime(char *oldname, char *newname)
|
||||||
} p += 12; // DEMOHEADER
|
} p += 12; // DEMOHEADER
|
||||||
p++; // VERSION
|
p++; // VERSION
|
||||||
p++; // SUBVERSION
|
p++; // SUBVERSION
|
||||||
oldversion = READUINT16(p);
|
oldversion = READUINT16(p); // demoversion
|
||||||
switch(oldversion) // demoversion
|
if (oldversion < MINDEMOVERSION || oldversion > DEMOVERSION)
|
||||||
{
|
{
|
||||||
case 0x000E:
|
// too old, cannot support.
|
||||||
/* fallthru */
|
|
||||||
case DEMOVERSION: // latest always supported
|
|
||||||
break;
|
|
||||||
// too old, cannot support.
|
|
||||||
default:
|
|
||||||
CONS_Alert(CONS_NOTICE, M_GetText("File '%s' invalid format. It will be overwritten.\n"), oldname);
|
CONS_Alert(CONS_NOTICE, M_GetText("File '%s' invalid format. It will be overwritten.\n"), oldname);
|
||||||
Z_Free(buffer);
|
Z_Free(buffer);
|
||||||
return UINT8_MAX;
|
return UINT8_MAX;
|
||||||
|
|
@ -2601,7 +2650,8 @@ void G_LoadDemoInfo(menudemo_t *pdemo, boolean allownonmultiplayer)
|
||||||
{
|
{
|
||||||
savebuffer_t info = {0};
|
savebuffer_t info = {0};
|
||||||
UINT8 *extrainfo_p;
|
UINT8 *extrainfo_p;
|
||||||
UINT8 version, subversion, worknumskins;
|
UINT8 version, subversion;
|
||||||
|
UINT16 worknumskins;
|
||||||
UINT16 pdemoflags;
|
UINT16 pdemoflags;
|
||||||
democharlist_t *skinlist = NULL;
|
democharlist_t *skinlist = NULL;
|
||||||
UINT16 pdemoversion, count;
|
UINT16 pdemoversion, count;
|
||||||
|
|
@ -2639,27 +2689,22 @@ void G_LoadDemoInfo(menudemo_t *pdemo, boolean allownonmultiplayer)
|
||||||
subversion = READUINT8(info.p);
|
subversion = READUINT8(info.p);
|
||||||
pdemoversion = READUINT16(info.p);
|
pdemoversion = READUINT16(info.p);
|
||||||
|
|
||||||
switch(pdemoversion)
|
if (pdemoversion < MINDEMOVERSION || pdemoversion > DEMOVERSION)
|
||||||
{
|
{
|
||||||
case 0x000E:
|
// too old, cannot support.
|
||||||
/* fallthru */
|
|
||||||
case DEMOVERSION: // latest always supported
|
|
||||||
if (P_SaveBufferRemaining(&info) < 64)
|
|
||||||
{
|
|
||||||
goto corrupt;
|
|
||||||
}
|
|
||||||
|
|
||||||
// demo title
|
|
||||||
M_Memcpy(pdemo->title, info.p, 64);
|
|
||||||
info.p += 64;
|
|
||||||
|
|
||||||
break;
|
|
||||||
// too old, cannot support.
|
|
||||||
default:
|
|
||||||
CONS_Alert(CONS_ERROR, M_GetText("%s is an incompatible replay format and cannot be played.\n"), pdemo->filepath);
|
CONS_Alert(CONS_ERROR, M_GetText("%s is an incompatible replay format and cannot be played.\n"), pdemo->filepath);
|
||||||
goto badreplay;
|
goto badreplay;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (P_SaveBufferRemaining(&info) < 64)
|
||||||
|
{
|
||||||
|
goto corrupt;
|
||||||
|
}
|
||||||
|
|
||||||
|
// demo title
|
||||||
|
M_Memcpy(pdemo->title, info.p, 64);
|
||||||
|
info.p += 64;
|
||||||
|
|
||||||
if (version != VERSION || subversion != SUBVERSION)
|
if (version != VERSION || subversion != SUBVERSION)
|
||||||
pdemo->type = MD_OUTDATED;
|
pdemo->type = MD_OUTDATED;
|
||||||
|
|
||||||
|
|
@ -2882,7 +2927,8 @@ void G_DoPlayDemoEx(const char *defdemoname, lumpnum_t deflumpnum)
|
||||||
char msg[1024];
|
char msg[1024];
|
||||||
|
|
||||||
boolean spectator, bot;
|
boolean spectator, bot;
|
||||||
UINT8 slots[MAXPLAYERS], lastfakeskin[MAXPLAYERS];
|
UINT8 slots[MAXPLAYERS];
|
||||||
|
UINT16 lastfakeskin[MAXPLAYERS];
|
||||||
|
|
||||||
#if defined(SKIPERRORS) && !defined(DEVELOP)
|
#if defined(SKIPERRORS) && !defined(DEVELOP)
|
||||||
// RR: Don't print warnings for staff ghosts, since they'll inevitably
|
// RR: Don't print warnings for staff ghosts, since they'll inevitably
|
||||||
|
|
@ -3038,14 +3084,9 @@ void G_DoPlayDemoEx(const char *defdemoname, lumpnum_t deflumpnum)
|
||||||
version = READUINT8(demobuf.p);
|
version = READUINT8(demobuf.p);
|
||||||
subversion = READUINT8(demobuf.p);
|
subversion = READUINT8(demobuf.p);
|
||||||
demo.version = READUINT16(demobuf.p);
|
demo.version = READUINT16(demobuf.p);
|
||||||
switch(demo.version)
|
if (demo.version < MINDEMOVERSION || demo.version > DEMOVERSION)
|
||||||
{
|
{
|
||||||
case 0x000E:
|
// too old, cannot support.
|
||||||
/* fallthru */
|
|
||||||
case DEMOVERSION: // latest always supported
|
|
||||||
break;
|
|
||||||
// too old, cannot support.
|
|
||||||
default:
|
|
||||||
snprintf(msg, 1024, M_GetText("%s is an incompatible replay format and cannot be played.\n"), pdemoname);
|
snprintf(msg, 1024, M_GetText("%s is an incompatible replay format and cannot be played.\n"), pdemoname);
|
||||||
CONS_Alert(CONS_ERROR, "%s", msg);
|
CONS_Alert(CONS_ERROR, "%s", msg);
|
||||||
M_StartMessage("Demo Playback", msg, NULL, MM_NOTHING, NULL, "Return to Menu");
|
M_StartMessage("Demo Playback", msg, NULL, MM_NOTHING, NULL, "Return to Menu");
|
||||||
|
|
@ -3363,13 +3404,24 @@ void G_DoPlayDemoEx(const char *defdemoname, lumpnum_t deflumpnum)
|
||||||
{
|
{
|
||||||
availabilities[p][i] = READUINT8(demobuf.p);
|
availabilities[p][i] = READUINT8(demobuf.p);
|
||||||
}
|
}
|
||||||
|
if (g_buffer_sizes.availability > static_cast<size_t>(i))
|
||||||
|
demobuf.p += (g_buffer_sizes.availability - i);
|
||||||
|
|
||||||
// Skin
|
// Skin
|
||||||
|
|
||||||
demo.currentskinid[p] = READUINT8(demobuf.p);
|
if (demo.version >= 0x0010)
|
||||||
|
{
|
||||||
|
demo.currentskinid[p] = READUINT16(demobuf.p);
|
||||||
|
lastfakeskin[p] = READUINT16(demobuf.p);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
demo.currentskinid[p] = READUINT8(demobuf.p);
|
||||||
|
lastfakeskin[p] = READUINT8(demobuf.p);
|
||||||
|
}
|
||||||
|
|
||||||
if (demo.currentskinid[p] >= demo.numskins)
|
if (demo.currentskinid[p] >= demo.numskins)
|
||||||
demo.currentskinid[p] = 0;
|
demo.currentskinid[p] = 0;
|
||||||
lastfakeskin[p] = READUINT8(demobuf.p);
|
|
||||||
|
|
||||||
players[p].team = READUINT8(demobuf.p);
|
players[p].team = READUINT8(demobuf.p);
|
||||||
|
|
||||||
|
|
@ -3510,7 +3562,7 @@ void G_AddGhost(savebuffer_t *buffer, const char *defdemoname)
|
||||||
UINT16 initialskin = 0;
|
UINT16 initialskin = 0;
|
||||||
UINT16 initialcolor = 0;
|
UINT16 initialcolor = 0;
|
||||||
skin_t *ghskin = skins[0];
|
skin_t *ghskin = skins[0];
|
||||||
UINT8 worknumskins;
|
UINT16 worknumskins;
|
||||||
UINT32 num_classes;
|
UINT32 num_classes;
|
||||||
democharlist_t *skinlist = NULL;
|
democharlist_t *skinlist = NULL;
|
||||||
|
|
||||||
|
|
@ -3528,14 +3580,10 @@ void G_AddGhost(savebuffer_t *buffer, const char *defdemoname)
|
||||||
p++; // SUBVERSION
|
p++; // SUBVERSION
|
||||||
|
|
||||||
ghostversion = READUINT16(p);
|
ghostversion = READUINT16(p);
|
||||||
switch(ghostversion)
|
|
||||||
|
if (ghostversion < MINDEMOVERSION || ghostversion > DEMOVERSION)
|
||||||
{
|
{
|
||||||
case 0x000E:
|
// too old, cannot support.
|
||||||
/* fallthru */
|
|
||||||
case DEMOVERSION: // latest always supported
|
|
||||||
break;
|
|
||||||
// too old, cannot support.
|
|
||||||
default:
|
|
||||||
CONS_Alert(CONS_NOTICE, M_GetText("Ghost %s: Demo version incompatible.\n"), defdemoname);
|
CONS_Alert(CONS_NOTICE, M_GetText("Ghost %s: Demo version incompatible.\n"), defdemoname);
|
||||||
P_SaveBufferFree(buffer);
|
P_SaveBufferFree(buffer);
|
||||||
return;
|
return;
|
||||||
|
|
@ -3618,6 +3666,21 @@ void G_AddGhost(savebuffer_t *buffer, const char *defdemoname)
|
||||||
splits[i] = READUINT32(p);
|
splits[i] = READUINT32(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ghostversion < 0x0010)
|
||||||
|
{
|
||||||
|
// Staff ghost oopsie. Fuckin, uh,
|
||||||
|
|
||||||
|
if (attackstart == INT32_MAX)
|
||||||
|
attackstart = UINT32_MAX;
|
||||||
|
|
||||||
|
for (i = 0; i < MAXSPLITS; i++)
|
||||||
|
{
|
||||||
|
if (splits[i] != INT32_MAX)
|
||||||
|
continue;
|
||||||
|
splits[i] = UINT32_MAX;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// net var data
|
// net var data
|
||||||
count = READUINT16(p);
|
count = READUINT16(p);
|
||||||
while (count--)
|
while (count--)
|
||||||
|
|
@ -3655,18 +3718,26 @@ void G_AddGhost(savebuffer_t *buffer, const char *defdemoname)
|
||||||
// Player name (TODO: Display this somehow if it doesn't match cv_playername!)
|
// Player name (TODO: Display this somehow if it doesn't match cv_playername!)
|
||||||
p += copy_fixed_buf(name, p, ghostsizes.player_name);
|
p += copy_fixed_buf(name, p, ghostsizes.player_name);
|
||||||
|
|
||||||
p += MAXAVAILABILITY;
|
p += ghostsizes.availability;
|
||||||
|
|
||||||
// Skin
|
// Skin
|
||||||
i = READUINT8(p);
|
if (ghostversion >= 0x0010)
|
||||||
|
{
|
||||||
|
i = READUINT16(p);
|
||||||
|
p += 2; // lastfakeskin
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
i = READUINT8(p);
|
||||||
|
p++; // lastfakeskin
|
||||||
|
}
|
||||||
|
|
||||||
if (i < worknumskins)
|
if (i < worknumskins)
|
||||||
{
|
{
|
||||||
ghskin = skins[skinlist[i].mapping];
|
ghskin = skins[skinlist[i].mapping];
|
||||||
initialskin = skinlist[i].mapping;
|
initialskin = skinlist[i].mapping;
|
||||||
}
|
}
|
||||||
|
|
||||||
p++; // lastfakeskin
|
|
||||||
|
|
||||||
p++; // team
|
p++; // team
|
||||||
|
|
||||||
// Color
|
// Color
|
||||||
|
|
@ -3794,7 +3865,7 @@ staffbrief_t *G_GetStaffGhostBrief(UINT8 *buffer)
|
||||||
{
|
{
|
||||||
UINT8 *p = buffer;
|
UINT8 *p = buffer;
|
||||||
UINT16 ghostversion;
|
UINT16 ghostversion;
|
||||||
UINT16 flags;
|
UINT16 flags, count;
|
||||||
UINT32 num_classes;
|
UINT32 num_classes;
|
||||||
INT32 i;
|
INT32 i;
|
||||||
staffbrief_t temp = {0};
|
staffbrief_t temp = {0};
|
||||||
|
|
@ -3814,16 +3885,10 @@ staffbrief_t *G_GetStaffGhostBrief(UINT8 *buffer)
|
||||||
p++; // SUBVERSION
|
p++; // SUBVERSION
|
||||||
|
|
||||||
ghostversion = READUINT16(p);
|
ghostversion = READUINT16(p);
|
||||||
switch(ghostversion)
|
if (ghostversion < MINDEMOVERSION || ghostversion > DEMOVERSION)
|
||||||
{
|
{
|
||||||
case 0x000E:
|
|
||||||
/* fallthru */
|
|
||||||
case DEMOVERSION: // latest always supported
|
|
||||||
break;
|
|
||||||
|
|
||||||
// too old, cannot support.
|
// too old, cannot support.
|
||||||
default:
|
goto fail;
|
||||||
goto fail;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
p += 64; // full demo title
|
p += 64; // full demo title
|
||||||
|
|
@ -3867,9 +3932,8 @@ staffbrief_t *G_GetStaffGhostBrief(UINT8 *buffer)
|
||||||
for (i = 0; i < MAXSPLITS; i++)
|
for (i = 0; i < MAXSPLITS; i++)
|
||||||
p += 4; // splits
|
p += 4; // splits
|
||||||
|
|
||||||
// Ehhhh don't need ghostversion here (?) so I'll reuse the var here
|
count = READUINT16(p);
|
||||||
ghostversion = READUINT16(p);
|
while (count--)
|
||||||
while (ghostversion--)
|
|
||||||
{
|
{
|
||||||
SKIPSTRING(p);
|
SKIPSTRING(p);
|
||||||
SKIPSTRING(p);
|
SKIPSTRING(p);
|
||||||
|
|
|
||||||
13
src/g_demo.h
13
src/g_demo.h
|
|
@ -32,7 +32,7 @@ struct StandingJson
|
||||||
{
|
{
|
||||||
uint8_t ranking;
|
uint8_t ranking;
|
||||||
String name;
|
String name;
|
||||||
uint8_t demoskin;
|
uint16_t demoskin;
|
||||||
String skincolor;
|
String skincolor;
|
||||||
uint32_t timeorscore;
|
uint32_t timeorscore;
|
||||||
|
|
||||||
|
|
@ -71,7 +71,7 @@ extern tic_t demostarttime;
|
||||||
struct democharlist_t {
|
struct democharlist_t {
|
||||||
char name[SKINNAMESIZE+1];
|
char name[SKINNAMESIZE+1];
|
||||||
UINT32 namehash;
|
UINT32 namehash;
|
||||||
UINT8 mapping; // No, this isn't about levels. It maps to loaded character ID.
|
UINT16 mapping; // No, this isn't about levels. It maps to loaded character ID.
|
||||||
UINT8 kartspeed;
|
UINT8 kartspeed;
|
||||||
UINT8 kartweight;
|
UINT8 kartweight;
|
||||||
UINT32 flags;
|
UINT32 flags;
|
||||||
|
|
@ -97,9 +97,9 @@ struct demovars_s {
|
||||||
|
|
||||||
boolean freecam;
|
boolean freecam;
|
||||||
|
|
||||||
UINT8 numskins;
|
UINT16 numskins;
|
||||||
democharlist_t *skinlist;
|
democharlist_t *skinlist;
|
||||||
UINT8 currentskinid[MAXPLAYERS];
|
UINT16 currentskinid[MAXPLAYERS];
|
||||||
|
|
||||||
const savebuffer_t *buffer; // debug, valid only if recording or playback
|
const savebuffer_t *buffer; // debug, valid only if recording or playback
|
||||||
};
|
};
|
||||||
|
|
@ -129,7 +129,7 @@ struct menudemo_t {
|
||||||
struct {
|
struct {
|
||||||
UINT8 ranking;
|
UINT8 ranking;
|
||||||
char name[MAXPLAYERNAME+1];
|
char name[MAXPLAYERNAME+1];
|
||||||
UINT8 skin, color;
|
UINT16 skin, color;
|
||||||
UINT32 timeorscore;
|
UINT32 timeorscore;
|
||||||
} standings[MAXPLAYERS];
|
} standings[MAXPLAYERS];
|
||||||
};
|
};
|
||||||
|
|
@ -194,6 +194,7 @@ struct DemoBufferSizes
|
||||||
size_t player_name;
|
size_t player_name;
|
||||||
size_t skin_name;
|
size_t skin_name;
|
||||||
size_t color_name;
|
size_t color_name;
|
||||||
|
size_t availability;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Your naming conventions are stupid and useless.
|
// Your naming conventions are stupid and useless.
|
||||||
|
|
@ -205,7 +206,7 @@ struct demoghost {
|
||||||
UINT16 initialcolor;
|
UINT16 initialcolor;
|
||||||
UINT8 fadein;
|
UINT8 fadein;
|
||||||
UINT16 version;
|
UINT16 version;
|
||||||
UINT8 numskins;
|
UINT16 numskins;
|
||||||
tic_t attackstart;
|
tic_t attackstart;
|
||||||
tic_t splits[MAXSPLITS];
|
tic_t splits[MAXSPLITS];
|
||||||
boolean done;
|
boolean done;
|
||||||
|
|
|
||||||
|
|
@ -2261,8 +2261,8 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps)
|
||||||
UINT16 skincolor;
|
UINT16 skincolor;
|
||||||
INT32 skin;
|
INT32 skin;
|
||||||
UINT8 availabilities[MAXAVAILABILITY];
|
UINT8 availabilities[MAXAVAILABILITY];
|
||||||
UINT8 fakeskin;
|
UINT16 fakeskin;
|
||||||
UINT8 lastfakeskin;
|
UINT16 lastfakeskin;
|
||||||
|
|
||||||
tic_t jointime;
|
tic_t jointime;
|
||||||
|
|
||||||
|
|
@ -5229,7 +5229,7 @@ void G_DirtyGameData(void)
|
||||||
// Can be called by the startup code or the menu task.
|
// Can be called by the startup code or the menu task.
|
||||||
//
|
//
|
||||||
|
|
||||||
#define SAV_VERSIONMINOR 6
|
#define SAV_VERSIONMINOR 7
|
||||||
|
|
||||||
void G_LoadGame(void)
|
void G_LoadGame(void)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,7 @@
|
||||||
extern "C" consvar_t cv_forcebots;
|
extern "C" consvar_t cv_forcebots;
|
||||||
|
|
||||||
/*--------------------------------------------------
|
/*--------------------------------------------------
|
||||||
void K_SetNameForBot(UINT8 playerNum, UINT8 skinnum)
|
void K_SetNameForBot(UINT8 playerNum, const char *realname)
|
||||||
|
|
||||||
See header file for description.
|
See header file for description.
|
||||||
--------------------------------------------------*/
|
--------------------------------------------------*/
|
||||||
|
|
@ -102,11 +102,11 @@ void K_SetNameForBot(UINT8 newplayernum, const char *realname)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*--------------------------------------------------
|
/*--------------------------------------------------
|
||||||
void K_SetBot(UINT8 playerNum, UINT8 skinnum, UINT8 difficulty, botStyle_e style)
|
void K_SetBot(UINT8 playerNum, UINT16 skinnum, UINT8 difficulty, botStyle_e style)
|
||||||
|
|
||||||
See header file for description.
|
See header file for description.
|
||||||
--------------------------------------------------*/
|
--------------------------------------------------*/
|
||||||
void K_SetBot(UINT8 newplayernum, UINT8 skinnum, UINT8 difficulty, botStyle_e style)
|
void K_SetBot(UINT8 newplayernum, UINT16 skinnum, UINT8 difficulty, botStyle_e style)
|
||||||
{
|
{
|
||||||
CONS_Debug(DBG_NETPLAY, "addbot: %d\n", newplayernum);
|
CONS_Debug(DBG_NETPLAY, "addbot: %d\n", newplayernum);
|
||||||
|
|
||||||
|
|
@ -199,11 +199,11 @@ void K_SetBot(UINT8 newplayernum, UINT8 skinnum, UINT8 difficulty, botStyle_e st
|
||||||
}
|
}
|
||||||
|
|
||||||
/*--------------------------------------------------
|
/*--------------------------------------------------
|
||||||
boolean K_AddBot(UINT8 skin, UINT8 difficulty, botStyle_e style, UINT8 *p)
|
boolean K_AddBot(UINT16 skin, UINT8 difficulty, botStyle_e style, UINT8 *p)
|
||||||
|
|
||||||
See header file for description.
|
See header file for description.
|
||||||
--------------------------------------------------*/
|
--------------------------------------------------*/
|
||||||
boolean K_AddBot(UINT8 skin, UINT8 difficulty, botStyle_e style, UINT8 *p)
|
boolean K_AddBot(UINT16 skin, UINT8 difficulty, botStyle_e style, UINT8 *p)
|
||||||
{
|
{
|
||||||
UINT8 newplayernum = *p;
|
UINT8 newplayernum = *p;
|
||||||
|
|
||||||
|
|
@ -239,16 +239,16 @@ boolean K_AddBot(UINT8 skin, UINT8 difficulty, botStyle_e style, UINT8 *p)
|
||||||
--------------------------------------------------*/
|
--------------------------------------------------*/
|
||||||
void K_UpdateMatchRaceBots(void)
|
void K_UpdateMatchRaceBots(void)
|
||||||
{
|
{
|
||||||
const UINT8 defaultbotskin = R_BotDefaultSkin();
|
const UINT16 defaultbotskin = R_BotDefaultSkin();
|
||||||
UINT8 difficulty;
|
UINT8 difficulty;
|
||||||
UINT8 pmax = (dedicated ? MAXPLAYERS-1 : MAXPLAYERS);
|
UINT8 pmax = (dedicated ? MAXPLAYERS-1 : MAXPLAYERS);
|
||||||
UINT8 numplayers = 0;
|
UINT8 numplayers = 0;
|
||||||
UINT8 numbots = 0;
|
UINT8 numbots = 0;
|
||||||
UINT8 numwaiting = 0;
|
UINT8 numwaiting = 0;
|
||||||
SINT8 wantedbots = 0;
|
SINT8 wantedbots = 0;
|
||||||
UINT8 usableskins = 0, skincount = (demo.playback ? demo.numskins : numskins);;
|
UINT16 usableskins = 0, skincount = (demo.playback ? demo.numskins : numskins);;
|
||||||
UINT8 grabskins[MAXSKINS+1];
|
UINT16 grabskins[MAXSKINS+1];
|
||||||
UINT8 i;
|
UINT16 i;
|
||||||
|
|
||||||
// Init usable bot skins list
|
// Init usable bot skins list
|
||||||
for (i = 0; i < skincount; i++)
|
for (i = 0; i < skincount; i++)
|
||||||
|
|
@ -387,11 +387,11 @@ void K_UpdateMatchRaceBots(void)
|
||||||
|
|
||||||
while (numbots < wantedbots)
|
while (numbots < wantedbots)
|
||||||
{
|
{
|
||||||
UINT8 skinnum = defaultbotskin;
|
UINT16 skinnum = defaultbotskin;
|
||||||
|
|
||||||
if (usableskins > 0)
|
if (usableskins > 0)
|
||||||
{
|
{
|
||||||
UINT8 index = P_RandomKey(PR_BOTS, usableskins);
|
UINT16 index = P_RandomKey(PR_BOTS, usableskins);
|
||||||
skinnum = grabskins[index];
|
skinnum = grabskins[index];
|
||||||
grabskins[index] = grabskins[--usableskins];
|
grabskins[index] = grabskins[--usableskins];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -182,7 +182,7 @@ fixed_t K_DistanceOfLineFromPoint(fixed_t v1x, fixed_t v1y, fixed_t v2x, fixed_t
|
||||||
|
|
||||||
|
|
||||||
/*--------------------------------------------------
|
/*--------------------------------------------------
|
||||||
boolean K_AddBot(UINT8 skin, UINT8 difficulty, botStyle_e style, UINT8 *p);
|
boolean K_AddBot(UINT16 skin, UINT8 difficulty, botStyle_e style, UINT8 *p);
|
||||||
|
|
||||||
Adds a new bot, using code intended to run on all clients.
|
Adds a new bot, using code intended to run on all clients.
|
||||||
|
|
||||||
|
|
@ -197,7 +197,7 @@ fixed_t K_DistanceOfLineFromPoint(fixed_t v1x, fixed_t v1y, fixed_t v2x, fixed_t
|
||||||
true if a bot was added, otherwise false.
|
true if a bot was added, otherwise false.
|
||||||
--------------------------------------------------*/
|
--------------------------------------------------*/
|
||||||
|
|
||||||
boolean K_AddBot(UINT8 skin, UINT8 difficulty, botStyle_e style, UINT8 *p);
|
boolean K_AddBot(UINT16 skin, UINT8 difficulty, botStyle_e style, UINT8 *p);
|
||||||
|
|
||||||
|
|
||||||
// NOT AVAILABLE FOR LUA
|
// NOT AVAILABLE FOR LUA
|
||||||
|
|
@ -222,7 +222,7 @@ void K_SetNameForBot(UINT8 newplayernum, const char *realname);
|
||||||
|
|
||||||
|
|
||||||
/*--------------------------------------------------
|
/*--------------------------------------------------
|
||||||
void K_SetBot(UINT8 newplayernum, UINT8 skinnum, UINT8 difficulty, botStyle_e style);
|
void K_SetBot(UINT8 newplayernum, UINT16 skinnum, UINT8 difficulty, botStyle_e style);
|
||||||
|
|
||||||
Sets a player ID to be a new bot directly. Invoked directly
|
Sets a player ID to be a new bot directly. Invoked directly
|
||||||
by K_AddBot, and indirectly by K_AddBotFromServer by sending
|
by K_AddBot, and indirectly by K_AddBotFromServer by sending
|
||||||
|
|
@ -238,7 +238,7 @@ void K_SetNameForBot(UINT8 newplayernum, const char *realname);
|
||||||
None
|
None
|
||||||
--------------------------------------------------*/
|
--------------------------------------------------*/
|
||||||
|
|
||||||
void K_SetBot(UINT8 newplayernum, UINT8 skinnum, UINT8 difficulty, botStyle_e style);
|
void K_SetBot(UINT8 newplayernum, UINT16 skinnum, UINT8 difficulty, botStyle_e style);
|
||||||
|
|
||||||
|
|
||||||
/*--------------------------------------------------
|
/*--------------------------------------------------
|
||||||
|
|
|
||||||
|
|
@ -215,7 +215,7 @@ void K_AssignFoes(void)
|
||||||
--------------------------------------------------*/
|
--------------------------------------------------*/
|
||||||
void K_InitGrandPrixBots(void)
|
void K_InitGrandPrixBots(void)
|
||||||
{
|
{
|
||||||
const UINT8 defaultbotskin = R_BotDefaultSkin();
|
const UINT16 defaultbotskin = R_BotDefaultSkin();
|
||||||
|
|
||||||
const UINT8 startingdifficulty = K_BotStartingDifficulty(grandprixinfo.gamespeed);
|
const UINT8 startingdifficulty = K_BotStartingDifficulty(grandprixinfo.gamespeed);
|
||||||
UINT8 difficultylevels[MAXPLAYERS];
|
UINT8 difficultylevels[MAXPLAYERS];
|
||||||
|
|
@ -226,14 +226,14 @@ void K_InitGrandPrixBots(void)
|
||||||
UINT8 numplayers = 0;
|
UINT8 numplayers = 0;
|
||||||
UINT8 competitors[MAXSPLITSCREENPLAYERS];
|
UINT8 competitors[MAXSPLITSCREENPLAYERS];
|
||||||
|
|
||||||
UINT8 usableskins, skincount = (demo.playback ? demo.numskins : numskins);;
|
UINT16 usableskins, skincount = (demo.playback ? demo.numskins : numskins);;
|
||||||
UINT8 grabskins[MAXSKINS+1];
|
UINT16 grabskins[MAXSKINS+1];
|
||||||
|
|
||||||
UINT8 botskinlist[MAXPLAYERS];
|
UINT16 botskinlist[MAXPLAYERS];
|
||||||
UINT8 botskinlistpos = 0;
|
UINT8 botskinlistpos = 0;
|
||||||
|
|
||||||
UINT8 newplayernum = 0;
|
UINT8 newplayernum = 0;
|
||||||
UINT8 i, j;
|
UINT16 i, j;
|
||||||
|
|
||||||
memset(competitors, MAXPLAYERS, sizeof (competitors));
|
memset(competitors, MAXPLAYERS, sizeof (competitors));
|
||||||
memset(botskinlist, defaultbotskin, sizeof (botskinlist));
|
memset(botskinlist, defaultbotskin, sizeof (botskinlist));
|
||||||
|
|
@ -314,10 +314,10 @@ void K_InitGrandPrixBots(void)
|
||||||
INT32 rivalnum = R_SkinAvailable(rivalname);
|
INT32 rivalnum = R_SkinAvailable(rivalname);
|
||||||
|
|
||||||
// Intentionally referenced before (currently dummied out) unlock check. Such a tease!
|
// Intentionally referenced before (currently dummied out) unlock check. Such a tease!
|
||||||
if (rivalnum != -1 && grabskins[(UINT8)rivalnum] != MAXSKINS)
|
if (rivalnum != -1 && grabskins[(UINT16)rivalnum] != MAXSKINS)
|
||||||
{
|
{
|
||||||
botskinlist[botskinlistpos++] = (UINT8)rivalnum;
|
botskinlist[botskinlistpos++] = (UINT8)rivalnum;
|
||||||
grabskins[(UINT8)rivalnum] = MAXSKINS;
|
grabskins[(UINT16)rivalnum] = MAXSKINS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -345,11 +345,11 @@ void K_InitGrandPrixBots(void)
|
||||||
{
|
{
|
||||||
while (botskinlistpos < wantedbots)
|
while (botskinlistpos < wantedbots)
|
||||||
{
|
{
|
||||||
UINT8 skinnum = defaultbotskin;
|
UINT16 skinnum = defaultbotskin;
|
||||||
|
|
||||||
if (usableskins > 0)
|
if (usableskins > 0)
|
||||||
{
|
{
|
||||||
UINT8 index = P_RandomKey(PR_BOTS, usableskins);
|
UINT16 index = P_RandomKey(PR_BOTS, usableskins);
|
||||||
skinnum = grabskins[index];
|
skinnum = grabskins[index];
|
||||||
grabskins[index] = grabskins[--usableskins];
|
grabskins[index] = grabskins[--usableskins];
|
||||||
}
|
}
|
||||||
|
|
@ -781,7 +781,7 @@ static boolean CompareReplacements(player_t *a, player_t *b)
|
||||||
--------------------------------------------------*/
|
--------------------------------------------------*/
|
||||||
void K_RetireBots(void)
|
void K_RetireBots(void)
|
||||||
{
|
{
|
||||||
UINT8 i;
|
UINT16 i;
|
||||||
|
|
||||||
if (grandprixinfo.gp == true
|
if (grandprixinfo.gp == true
|
||||||
&& grandprixinfo.eventmode != GPEVENT_NONE)
|
&& grandprixinfo.eventmode != GPEVENT_NONE)
|
||||||
|
|
@ -931,11 +931,11 @@ void K_RetireBots(void)
|
||||||
|
|
||||||
// Okay, now this is essentially the original contents of K_RetireBots with cpp swag
|
// Okay, now this is essentially the original contents of K_RetireBots with cpp swag
|
||||||
|
|
||||||
const UINT8 defaultbotskin = R_BotDefaultSkin();
|
const UINT16 defaultbotskin = R_BotDefaultSkin();
|
||||||
SINT8 newDifficulty;
|
SINT8 newDifficulty;
|
||||||
|
|
||||||
UINT8 usableskins, skincount = (demo.playback ? demo.numskins : numskins);
|
UINT16 usableskins, skincount = (demo.playback ? demo.numskins : numskins);
|
||||||
UINT8 grabskins[MAXSKINS+1];
|
UINT16 grabskins[MAXSKINS+1];
|
||||||
|
|
||||||
// Handle adjusting difficulty for new bots
|
// Handle adjusting difficulty for new bots
|
||||||
{
|
{
|
||||||
|
|
@ -1009,11 +1009,11 @@ void K_RetireBots(void)
|
||||||
// Replace nocontested bots.
|
// Replace nocontested bots.
|
||||||
for (player_t *bot : bots)
|
for (player_t *bot : bots)
|
||||||
{
|
{
|
||||||
UINT8 skinnum = defaultbotskin;
|
UINT16 skinnum = defaultbotskin;
|
||||||
|
|
||||||
if (usableskins > 0)
|
if (usableskins > 0)
|
||||||
{
|
{
|
||||||
UINT8 index = P_RandomKey(PR_BOTS, usableskins);
|
UINT16 index = P_RandomKey(PR_BOTS, usableskins);
|
||||||
skinnum = grabskins[index];
|
skinnum = grabskins[index];
|
||||||
grabskins[index] = grabskins[--usableskins];
|
grabskins[index] = grabskins[--usableskins];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2795,7 +2795,7 @@ void PositionFacesInfo::draw_1p()
|
||||||
INT32 i, j;
|
INT32 i, j;
|
||||||
INT32 bumperx, emeraldx;
|
INT32 bumperx, emeraldx;
|
||||||
INT32 xoff, yoff, flipflag = 0;
|
INT32 xoff, yoff, flipflag = 0;
|
||||||
UINT8 workingskin;
|
UINT16 workingskin;
|
||||||
UINT8 *colormap;
|
UINT8 *colormap;
|
||||||
UINT32 skinflags;
|
UINT32 skinflags;
|
||||||
|
|
||||||
|
|
@ -3542,7 +3542,7 @@ static void K_drawKartDuelScores(void)
|
||||||
// minirankings shamelessly copypasted because i know that shit works already
|
// minirankings shamelessly copypasted because i know that shit works already
|
||||||
// and SURELY we will never need to use this somewhere else, right?
|
// and SURELY we will never need to use this somewhere else, right?
|
||||||
|
|
||||||
UINT8 workingskin;
|
UINT16 workingskin;
|
||||||
UINT8 *colormap;
|
UINT8 *colormap;
|
||||||
INT32 xoff, yoff, flipflag, skinflags;
|
INT32 xoff, yoff, flipflag, skinflags;
|
||||||
|
|
||||||
|
|
@ -5957,7 +5957,7 @@ static void K_drawKartMinimap(void)
|
||||||
INT32 minimaptrans;
|
INT32 minimaptrans;
|
||||||
INT32 splitflags;
|
INT32 splitflags;
|
||||||
|
|
||||||
UINT8 skin = 0;
|
UINT16 skin = 0;
|
||||||
UINT8 *colormap = NULL;
|
UINT8 *colormap = NULL;
|
||||||
|
|
||||||
SINT8 localplayers[MAXSPLITSCREENPLAYERS];
|
SINT8 localplayers[MAXSPLITSCREENPLAYERS];
|
||||||
|
|
|
||||||
12
src/k_kart.c
12
src/k_kart.c
|
|
@ -2863,7 +2863,7 @@ static void K_RegularVoiceTimers(player_t *player)
|
||||||
player->karthud[khud_tauntvoices] = 4*TICRATE;
|
player->karthud[khud_tauntvoices] = 4*TICRATE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static UINT8 K_ObjectToSkinIDForSounds(mobj_t *source)
|
static UINT16 K_ObjectToSkinIDForSounds(mobj_t *source)
|
||||||
{
|
{
|
||||||
if (source->player)
|
if (source->player)
|
||||||
return source->player->skin;
|
return source->player->skin;
|
||||||
|
|
@ -2876,7 +2876,7 @@ static UINT8 K_ObjectToSkinIDForSounds(mobj_t *source)
|
||||||
|
|
||||||
static void K_PlayGenericTastefulTaunt(mobj_t *source, sfxenum_t sfx_id)
|
static void K_PlayGenericTastefulTaunt(mobj_t *source, sfxenum_t sfx_id)
|
||||||
{
|
{
|
||||||
UINT8 skinid = K_ObjectToSkinIDForSounds(source);
|
UINT16 skinid = K_ObjectToSkinIDForSounds(source);
|
||||||
if (skinid >= numskins)
|
if (skinid >= numskins)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
@ -2915,7 +2915,7 @@ void K_PlayBoostTaunt(mobj_t *source)
|
||||||
|
|
||||||
void K_PlayOvertakeSound(mobj_t *source)
|
void K_PlayOvertakeSound(mobj_t *source)
|
||||||
{
|
{
|
||||||
UINT8 skinid = K_ObjectToSkinIDForSounds(source);
|
UINT16 skinid = K_ObjectToSkinIDForSounds(source);
|
||||||
if (skinid >= numskins)
|
if (skinid >= numskins)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
@ -2940,7 +2940,7 @@ void K_PlayOvertakeSound(mobj_t *source)
|
||||||
|
|
||||||
static void K_PlayGenericCombatSound(mobj_t *source, mobj_t *other, sfxenum_t sfx_id)
|
static void K_PlayGenericCombatSound(mobj_t *source, mobj_t *other, sfxenum_t sfx_id)
|
||||||
{
|
{
|
||||||
UINT8 skinid = K_ObjectToSkinIDForSounds(source);
|
UINT16 skinid = K_ObjectToSkinIDForSounds(source);
|
||||||
if (skinid >= numskins)
|
if (skinid >= numskins)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
@ -3010,7 +3010,7 @@ void K_TryHurtSoundExchange(mobj_t *victim, mobj_t *attacker)
|
||||||
|
|
||||||
void K_PlayPowerGloatSound(mobj_t *source)
|
void K_PlayPowerGloatSound(mobj_t *source)
|
||||||
{
|
{
|
||||||
UINT8 skinid = K_ObjectToSkinIDForSounds(source);
|
UINT16 skinid = K_ObjectToSkinIDForSounds(source);
|
||||||
if (skinid >= numskins)
|
if (skinid >= numskins)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
@ -3028,7 +3028,7 @@ void K_PlayPowerGloatSound(mobj_t *source)
|
||||||
// MOVED so we don't have to extern K_ObjectToSkinID
|
// MOVED so we don't have to extern K_ObjectToSkinID
|
||||||
void P_PlayVictorySound(mobj_t *source)
|
void P_PlayVictorySound(mobj_t *source)
|
||||||
{
|
{
|
||||||
UINT8 skinid = K_ObjectToSkinIDForSounds(source);
|
UINT16 skinid = K_ObjectToSkinIDForSounds(source);
|
||||||
if (skinid >= numskins)
|
if (skinid >= numskins)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -793,7 +793,7 @@ UINT16 M_GetColorAfter(setup_player_colors_t *colors, UINT16 value, INT32 amount
|
||||||
|
|
||||||
extern struct setup_chargrid_s {
|
extern struct setup_chargrid_s {
|
||||||
INT16 skinlist[MAXCLONES];
|
INT16 skinlist[MAXCLONES];
|
||||||
UINT8 numskins;
|
UINT16 numskins;
|
||||||
} setup_chargrid[9][9];
|
} setup_chargrid[9][9];
|
||||||
|
|
||||||
extern UINT8 setup_followercategories[MAXFOLLOWERCATEGORIES][2];
|
extern UINT8 setup_followercategories[MAXFOLLOWERCATEGORIES][2];
|
||||||
|
|
@ -1512,7 +1512,7 @@ void M_Statistics(INT32 choice);
|
||||||
void M_DrawStatistics(void);
|
void M_DrawStatistics(void);
|
||||||
boolean M_StatisticsInputs(INT32 ch);
|
boolean M_StatisticsInputs(INT32 ch);
|
||||||
|
|
||||||
void M_DrawCharacterIconAndEngine(INT32 x, INT32 y, UINT8 skin, UINT8 *colormap, UINT8 baseskin);
|
void M_DrawCharacterIconAndEngine(INT32 x, INT32 y, UINT16 skin, UINT8 *colormap, UINT16 baseskin);
|
||||||
fixed_t M_DrawCupWinData(INT32 rankx, INT32 ranky, cupheader_t *cup, UINT8 difficulty, boolean flash, boolean statsmode);
|
fixed_t M_DrawCupWinData(INT32 rankx, INT32 ranky, cupheader_t *cup, UINT8 difficulty, boolean flash, boolean statsmode);
|
||||||
|
|
||||||
#define MAXWRONGPLAYER MAXSPLITSCREENPLAYERS
|
#define MAXWRONGPLAYER MAXSPLITSCREENPLAYERS
|
||||||
|
|
@ -1523,7 +1523,7 @@ extern struct wrongwarp_s {
|
||||||
tic_t delaytowrongplayer;
|
tic_t delaytowrongplayer;
|
||||||
struct wrongplayer_s
|
struct wrongplayer_s
|
||||||
{
|
{
|
||||||
UINT8 skin;
|
UINT16 skin;
|
||||||
INT16 across;
|
INT16 across;
|
||||||
boolean spinout;
|
boolean spinout;
|
||||||
} wrongplayers[MAXWRONGPLAYER];
|
} wrongplayers[MAXWRONGPLAYER];
|
||||||
|
|
|
||||||
|
|
@ -3057,7 +3057,7 @@ fixed_t M_DrawCupWinData(INT32 rankx, INT32 ranky, cupheader_t *cup, UINT8 diffi
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
UINT8 skin = windata->best_skin.id;
|
UINT16 skin = windata->best_skin.id;
|
||||||
|
|
||||||
colormap = R_GetTranslationColormap(skin, skins[skin]->prefcolor, GTC_MENUCACHE);
|
colormap = R_GetTranslationColormap(skin, skins[skin]->prefcolor, GTC_MENUCACHE);
|
||||||
|
|
||||||
|
|
@ -7163,7 +7163,7 @@ drawborder:
|
||||||
|
|
||||||
#define challengetransparentstrength 8
|
#define challengetransparentstrength 8
|
||||||
|
|
||||||
void M_DrawCharacterIconAndEngine(INT32 x, INT32 y, UINT8 skin, UINT8 *colormap, UINT8 baseskin)
|
void M_DrawCharacterIconAndEngine(INT32 x, INT32 y, UINT16 skin, UINT8 *colormap, UINT16 baseskin)
|
||||||
{
|
{
|
||||||
V_DrawFixedPatch(x*FRACUNIT, y*FRACUNIT,
|
V_DrawFixedPatch(x*FRACUNIT, y*FRACUNIT,
|
||||||
FRACUNIT,
|
FRACUNIT,
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@ struct gpRank_t
|
||||||
UINT8 totalPlayers;
|
UINT8 totalPlayers;
|
||||||
|
|
||||||
UINT8 position;
|
UINT8 position;
|
||||||
UINT8 skin;
|
UINT16 skin;
|
||||||
|
|
||||||
UINT32 winPoints;
|
UINT32 winPoints;
|
||||||
UINT32 totalPoints;
|
UINT32 totalPoints;
|
||||||
|
|
|
||||||
|
|
@ -522,7 +522,7 @@ void level_tally_t::Init(player_t *player)
|
||||||
// It'd be neat to add all of the grade sounds,
|
// It'd be neat to add all of the grade sounds,
|
||||||
// but not this close to release
|
// but not this close to release
|
||||||
|
|
||||||
UINT8 skinid = player->skin;
|
UINT16 skinid = player->skin;
|
||||||
if (skinid >= numskins || R_CanShowSkinInDemo(skinid) == false)
|
if (skinid >= numskins || R_CanShowSkinInDemo(skinid) == false)
|
||||||
;
|
;
|
||||||
else if (rank < GRADE_C)
|
else if (rank < GRADE_C)
|
||||||
|
|
|
||||||
|
|
@ -3813,6 +3813,11 @@ INT32 M_UnlockableSkinNum(unlockable_t *unlock)
|
||||||
skinnum = R_SkinAvailableEx(unlock->stringVar, false);
|
skinnum = R_SkinAvailableEx(unlock->stringVar, false);
|
||||||
if (skinnum != -1)
|
if (skinnum != -1)
|
||||||
{
|
{
|
||||||
|
if (skinnum >= MAXSKINUNAVAILABLE)
|
||||||
|
{
|
||||||
|
CONS_Alert(CONS_WARNING,"Unlockable ID %s: Skin %s (id %d) is greater than %u, and will not be locked in this session.", sizeu1((unlock-unlockables)+1), unlock->stringVar, skinnum, MAXSKINUNAVAILABLE);
|
||||||
|
}
|
||||||
|
|
||||||
unlock->stringVarCache = skinnum;
|
unlock->stringVarCache = skinnum;
|
||||||
return skinnum;
|
return skinnum;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -406,6 +406,8 @@ void M_CharacterSelect(INT32 choice)
|
||||||
// Gets the selected follower's state for a given setup player.
|
// Gets the selected follower's state for a given setup player.
|
||||||
static void M_GetFollowerState(setup_player_t *p)
|
static void M_GetFollowerState(setup_player_t *p)
|
||||||
{
|
{
|
||||||
|
if (p->followern < 0 || p->followern >= numfollowers)
|
||||||
|
return;
|
||||||
|
|
||||||
p->follower_state = &states[followers[p->followern].followstate];
|
p->follower_state = &states[followers[p->followern].followstate];
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -175,7 +175,7 @@ static boolean P_UnArchivePlayer(savebuffer_t *save)
|
||||||
memset(&savedata.bots, 0, sizeof(savedata.bots));
|
memset(&savedata.bots, 0, sizeof(savedata.bots));
|
||||||
|
|
||||||
UINT8 pid;
|
UINT8 pid;
|
||||||
const UINT8 defaultbotskin = R_BotDefaultSkin();
|
const UINT16 defaultbotskin = R_BotDefaultSkin();
|
||||||
|
|
||||||
while ((pid = READUINT8(save->p)) < MAXPLAYERS)
|
while ((pid = READUINT8(save->p)) < MAXPLAYERS)
|
||||||
{
|
{
|
||||||
|
|
@ -260,8 +260,8 @@ static void P_NetArchivePlayers(savebuffer_t *save)
|
||||||
WRITEUINT8(save->p, players[i].availabilities[j]);
|
WRITEUINT8(save->p, players[i].availabilities[j]);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITEUINT8(save->p, players[i].fakeskin);
|
WRITEUINT16(save->p, players[i].fakeskin);
|
||||||
WRITEUINT8(save->p, players[i].lastfakeskin);
|
WRITEUINT16(save->p, players[i].lastfakeskin);
|
||||||
|
|
||||||
WRITEUINT16(save->p, players[i].prefcolor);
|
WRITEUINT16(save->p, players[i].prefcolor);
|
||||||
WRITEINT32(save->p, players[i].prefskin);
|
WRITEINT32(save->p, players[i].prefskin);
|
||||||
|
|
@ -988,8 +988,8 @@ static void P_NetUnArchivePlayers(savebuffer_t *save)
|
||||||
players[i].availabilities[j] = READUINT8(save->p);
|
players[i].availabilities[j] = READUINT8(save->p);
|
||||||
}
|
}
|
||||||
|
|
||||||
players[i].fakeskin = READUINT8(save->p);
|
players[i].fakeskin = READUINT16(save->p);
|
||||||
players[i].lastfakeskin = READUINT8(save->p);
|
players[i].lastfakeskin = READUINT16(save->p);
|
||||||
|
|
||||||
players[i].prefcolor = READUINT16(save->p);
|
players[i].prefcolor = READUINT16(save->p);
|
||||||
players[i].prefskin = READINT32(save->p);
|
players[i].prefskin = READINT32(save->p);
|
||||||
|
|
@ -3537,7 +3537,7 @@ static void SaveMobjThinker(savebuffer_t *save, const thinker_t *th, const UINT8
|
||||||
if (diff2 & MD2_CVMEM)
|
if (diff2 & MD2_CVMEM)
|
||||||
WRITEINT32(save->p, mobj->cvmem);
|
WRITEINT32(save->p, mobj->cvmem);
|
||||||
if (diff2 & MD2_SKIN)
|
if (diff2 & MD2_SKIN)
|
||||||
WRITEUINT8(save->p, (UINT8)((skin_t *)mobj->skin)->skinnum);
|
WRITEUINT16(save->p, (UINT16)((skin_t *)mobj->skin)->skinnum);
|
||||||
if (diff2 & MD2_COLOR)
|
if (diff2 & MD2_COLOR)
|
||||||
WRITEUINT16(save->p, mobj->color);
|
WRITEUINT16(save->p, mobj->color);
|
||||||
if (diff2 & MD2_EXTVAL1)
|
if (diff2 & MD2_EXTVAL1)
|
||||||
|
|
@ -4836,7 +4836,7 @@ static thinker_t* LoadMobjThinker(savebuffer_t *save, actionf_p1 thinker)
|
||||||
if (diff2 & MD2_CVMEM)
|
if (diff2 & MD2_CVMEM)
|
||||||
mobj->cvmem = READINT32(save->p);
|
mobj->cvmem = READINT32(save->p);
|
||||||
if (diff2 & MD2_SKIN)
|
if (diff2 & MD2_SKIN)
|
||||||
mobj->skin = skins[READUINT8(save->p)];
|
mobj->skin = skins[READUINT16(save->p)];
|
||||||
if (diff2 & MD2_COLOR)
|
if (diff2 & MD2_COLOR)
|
||||||
mobj->color = READUINT16(save->p);
|
mobj->color = READUINT16(save->p);
|
||||||
if (diff2 & MD2_EXTVAL1)
|
if (diff2 & MD2_EXTVAL1)
|
||||||
|
|
@ -6436,7 +6436,7 @@ static inline void P_ArchiveMisc(savebuffer_t *save)
|
||||||
WRITEUINT8(save->p, rank->totalPlayers);
|
WRITEUINT8(save->p, rank->totalPlayers);
|
||||||
|
|
||||||
WRITEUINT8(save->p, rank->position);
|
WRITEUINT8(save->p, rank->position);
|
||||||
WRITEUINT8(save->p, rank->skin);
|
WRITEUINT16(save->p, rank->skin);
|
||||||
|
|
||||||
WRITEUINT32(save->p, rank->winPoints);
|
WRITEUINT32(save->p, rank->winPoints);
|
||||||
WRITEUINT32(save->p, rank->totalPoints);
|
WRITEUINT32(save->p, rank->totalPoints);
|
||||||
|
|
@ -6702,7 +6702,7 @@ static boolean P_UnArchiveSPGame(savebuffer_t *save)
|
||||||
rank->totalPlayers = READUINT8(save->p);
|
rank->totalPlayers = READUINT8(save->p);
|
||||||
|
|
||||||
rank->position = READUINT8(save->p);
|
rank->position = READUINT8(save->p);
|
||||||
rank->skin = READUINT8(save->p);
|
rank->skin = READUINT16(save->p);
|
||||||
|
|
||||||
rank->winPoints = READUINT32(save->p);
|
rank->winPoints = READUINT32(save->p);
|
||||||
rank->totalPoints = READUINT32(save->p);
|
rank->totalPoints = READUINT32(save->p);
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ mobj_t *P_FindNewPosition(UINT32 oldposition);
|
||||||
struct savedata_bot_s
|
struct savedata_bot_s
|
||||||
{
|
{
|
||||||
boolean valid;
|
boolean valid;
|
||||||
UINT8 skin;
|
UINT16 skin;
|
||||||
UINT8 difficulty;
|
UINT8 difficulty;
|
||||||
boolean rival;
|
boolean rival;
|
||||||
boolean foe;
|
boolean foe;
|
||||||
|
|
@ -56,7 +56,7 @@ struct savedata_t
|
||||||
SINT8 lives;
|
SINT8 lives;
|
||||||
UINT16 totalring;
|
UINT16 totalring;
|
||||||
|
|
||||||
UINT8 skin;
|
UINT16 skin;
|
||||||
UINT16 skincolor;
|
UINT16 skincolor;
|
||||||
INT32 followerskin;
|
INT32 followerskin;
|
||||||
UINT16 followercolor;
|
UINT16 followercolor;
|
||||||
|
|
|
||||||
|
|
@ -139,7 +139,7 @@ static void Sk_SetDefaultValue(skin_t *skin)
|
||||||
|
|
||||||
// Grab the default skin
|
// Grab the default skin
|
||||||
#define DEFAULTBOTSKINNAME "eggrobo"
|
#define DEFAULTBOTSKINNAME "eggrobo"
|
||||||
UINT8 R_BotDefaultSkin(void)
|
UINT16 R_BotDefaultSkin(void)
|
||||||
{
|
{
|
||||||
static INT32 defaultbotskin = -1;
|
static INT32 defaultbotskin = -1;
|
||||||
|
|
||||||
|
|
@ -157,7 +157,7 @@ UINT8 R_BotDefaultSkin(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return (UINT8)defaultbotskin;
|
return (UINT16)defaultbotskin;
|
||||||
}
|
}
|
||||||
#undef DEFAULTBOTSKINNAME
|
#undef DEFAULTBOTSKINNAME
|
||||||
|
|
||||||
|
|
@ -205,7 +205,7 @@ UINT8 *R_GetSkinAvailabilities(boolean demolock, INT32 botforcecharacter)
|
||||||
|
|
||||||
skinid = M_UnlockableSkinNum(&unlockables[i]);
|
skinid = M_UnlockableSkinNum(&unlockables[i]);
|
||||||
|
|
||||||
if (skinid < 0 || skinid >= MAXSKINS)
|
if (skinid < 0 || skinid >= MAXSKINUNAVAILABLE)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if ((forbots
|
if ((forbots
|
||||||
|
|
@ -250,6 +250,12 @@ boolean R_SkinUsable(INT32 playernum, INT32 skinnum, boolean demoskins)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (skinnum >= MAXSKINUNAVAILABLE)
|
||||||
|
{
|
||||||
|
// Keeping our packet size nice and sane in the wake of MAXSKINS increase
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
// Determine if this character is supposed to be unlockable or not
|
// Determine if this character is supposed to be unlockable or not
|
||||||
if (useplayerstruct && demo.playback)
|
if (useplayerstruct && demo.playback)
|
||||||
{
|
{
|
||||||
|
|
@ -308,8 +314,8 @@ boolean R_CanShowSkinInDemo(INT32 skinnum)
|
||||||
// Returns a random unlocked skin ID.
|
// Returns a random unlocked skin ID.
|
||||||
UINT32 R_GetLocalRandomSkin(void)
|
UINT32 R_GetLocalRandomSkin(void)
|
||||||
{
|
{
|
||||||
UINT8 i, usableskins = 0;
|
UINT16 i, usableskins = 0;
|
||||||
UINT8 grabskins[MAXSKINS];
|
UINT16 grabskins[MAXSKINS];
|
||||||
|
|
||||||
for (i = 0; i < numskins; i++)
|
for (i = 0; i < numskins; i++)
|
||||||
{
|
{
|
||||||
|
|
@ -512,8 +518,8 @@ void SetFakePlayerSkin(player_t* player, INT32 skinid)
|
||||||
void SetRandomFakePlayerSkin(player_t* player, boolean fast, boolean instant)
|
void SetRandomFakePlayerSkin(player_t* player, boolean fast, boolean instant)
|
||||||
{
|
{
|
||||||
INT32 i;
|
INT32 i;
|
||||||
UINT8 usableskins = 0, maxskinpick;
|
UINT16 usableskins = 0, maxskinpick;
|
||||||
UINT8 grabskins[MAXSKINS];
|
UINT16 grabskins[MAXSKINS];
|
||||||
|
|
||||||
maxskinpick = (demo.playback ? demo.numskins : numskins);
|
maxskinpick = (demo.playback ? demo.numskins : numskins);
|
||||||
|
|
||||||
|
|
@ -594,7 +600,7 @@ void SetRandomFakePlayerSkin(player_t* player, boolean fast, boolean instant)
|
||||||
// Return to base skin from an SF_IRONMAN randomization
|
// Return to base skin from an SF_IRONMAN randomization
|
||||||
void ClearFakePlayerSkin(player_t* player)
|
void ClearFakePlayerSkin(player_t* player)
|
||||||
{
|
{
|
||||||
UINT8 skinid;
|
UINT16 skinid;
|
||||||
UINT32 flags;
|
UINT32 flags;
|
||||||
|
|
||||||
if (demo.playback)
|
if (demo.playback)
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ extern "C" {
|
||||||
struct skin_t
|
struct skin_t
|
||||||
{
|
{
|
||||||
char name[SKINNAMESIZE+1]; // name of skin
|
char name[SKINNAMESIZE+1]; // name of skin
|
||||||
UINT8 skinnum;
|
UINT16 skinnum;
|
||||||
UINT32 namehash; // quickncasehash(->name, SKINNAMESIZE)
|
UINT32 namehash; // quickncasehash(->name, SKINNAMESIZE)
|
||||||
UINT16 wadnum;
|
UINT16 wadnum;
|
||||||
skinflags_t flags;
|
skinflags_t flags;
|
||||||
|
|
@ -125,7 +125,7 @@ void SetPlayerSkinByNum(INT32 playernum,INT32 skinnum); // Tails 03-16-2002
|
||||||
|
|
||||||
// Set backup
|
// Set backup
|
||||||
INT32 GetSkinNumClosestToStats(UINT8 kartspeed, UINT8 kartweight, UINT32 flags, boolean unlock);
|
INT32 GetSkinNumClosestToStats(UINT8 kartspeed, UINT8 kartweight, UINT32 flags, boolean unlock);
|
||||||
UINT8 R_BotDefaultSkin(void);
|
UINT16 R_BotDefaultSkin(void);
|
||||||
|
|
||||||
// Heavy Magician
|
// Heavy Magician
|
||||||
void SetFakePlayerSkin(player_t* player, INT32 skinnum);
|
void SetFakePlayerSkin(player_t* player, INT32 skinnum);
|
||||||
|
|
|
||||||
|
|
@ -73,7 +73,6 @@ TYPEDEF (serverrefuse_pak);
|
||||||
TYPEDEF (askinfo_pak);
|
TYPEDEF (askinfo_pak);
|
||||||
TYPEDEF (msaskinfo_pak);
|
TYPEDEF (msaskinfo_pak);
|
||||||
TYPEDEF (plrinfo);
|
TYPEDEF (plrinfo);
|
||||||
TYPEDEF (plrconfig);
|
|
||||||
TYPEDEF (filesneededconfig_pak);
|
TYPEDEF (filesneededconfig_pak);
|
||||||
TYPEDEF (doomdata_t);
|
TYPEDEF (doomdata_t);
|
||||||
TYPEDEF (serverelem_t);
|
TYPEDEF (serverelem_t);
|
||||||
|
|
|
||||||
|
|
@ -1055,7 +1055,7 @@ void Y_RoundQueueDrawer(y_data_t *standings, INT32 offset, boolean doanimations,
|
||||||
|
|
||||||
UINT8 *colormap = NULL, *oppositemap = NULL;
|
UINT8 *colormap = NULL, *oppositemap = NULL;
|
||||||
fixed_t playerx = 0, playery = 0;
|
fixed_t playerx = 0, playery = 0;
|
||||||
UINT8 pskin = MAXSKINS;
|
UINT16 pskin = MAXSKINS;
|
||||||
UINT16 pcolor = SKINCOLOR_WHITE;
|
UINT16 pcolor = SKINCOLOR_WHITE;
|
||||||
|
|
||||||
if (standings->mainplayer == MAXPLAYERS)
|
if (standings->mainplayer == MAXPLAYERS)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue