Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bcc58f54e4 | ||
|
|
55203c8711 | ||
|
|
19d83f82e4 |
No files matched your search
+1
-1
@@ -434,7 +434,7 @@ LUA_API void lua_pushnumber (lua_State *L, lua_Number n) {
|
||||
LUA_API void lua_pushlstring (lua_State *L, const char *s, size_t len) {
|
||||
lua_lock(L);
|
||||
luaC_checkGC(L);
|
||||
setsvalue2s(L, L->top, (len == 0) ? luaS_newlstr(L, "", 0) : luaS_newlstr(L, s, len));
|
||||
setsvalue2s(L, L->top, (len == 0) ? luaS_new(L, "") : luaS_newlstr(L, s, len));
|
||||
api_incr_top(L);
|
||||
lua_unlock(L);
|
||||
}
|
||||
|
||||
+2
-2
@@ -1178,7 +1178,7 @@ consvar_t *CV_FindVar(const char *name)
|
||||
consvar_t *cvar;
|
||||
|
||||
for (cvar = consvar_vars; cvar; cvar = cvar->next)
|
||||
if (fasticmp(name, cvar->name))
|
||||
if (fasticmp(name,cvar->name))
|
||||
return cvar;
|
||||
|
||||
return NULL;
|
||||
@@ -1793,7 +1793,7 @@ void CV_AddValue(consvar_t *var, INT32 increment)
|
||||
if (newvalue == oldvalue)
|
||||
break; // don't loop forever if there's none of a certain gametype
|
||||
|
||||
if (newvalue >= 0 && newvalue < NUMMAPS && !mapheaderinfo[newvalue])
|
||||
if (newvalue >= 0 && !mapheaderinfo[newvalue])
|
||||
continue; // Don't allocate the header. That just makes memory usage skyrocket.
|
||||
|
||||
} while (!M_CanShowLevelInList(newvalue, gt));
|
||||
|
||||
+5
-5
@@ -46,16 +46,16 @@
|
||||
#ifdef HAVE_THREADS
|
||||
I_mutex con_mutex;
|
||||
|
||||
// I_In_Exiting_Signal_Handler is an evil hack
|
||||
// g_in_exiting_signal_handler is an evil hack
|
||||
// to avoid infinite SIGABRT recursion in the signal handler
|
||||
// due to poisoned locks or mach-o kernel not supporting locks in signals
|
||||
// or something like that. idk
|
||||
# define Lock_state() if (!I_In_Exiting_Signal_Handler()) { I_LockMutex(&con_mutex); }
|
||||
# define Unlock_state() if (!I_In_Exiting_Signal_Handler()) { I_UnlockMutex(con_mutex); }
|
||||
#else /*HAVE_THREADS*/
|
||||
# define Lock_state() if (!g_in_exiting_signal_handler) { I_lock_mutex(&con_mutex); }
|
||||
# define Unlock_state() if (!g_in_exiting_signal_handler) { I_unlock_mutex(con_mutex); }
|
||||
#else/*HAVE_THREADS*/
|
||||
# define Lock_state()
|
||||
# define Unlock_state()
|
||||
#endif /*HAVE_THREADS*/
|
||||
#endif/*HAVE_THREADS*/
|
||||
|
||||
static boolean con_started = false; // console has been initialised
|
||||
boolean con_startup = false; // true at game startup, screen need refreshing
|
||||
|
||||
+313
-343
File diff suppressed because it is too large.
Load diff
+1
-3
@@ -660,11 +660,9 @@ extern UINT8 hu_redownloadinggamestate;
|
||||
#endif
|
||||
extern boolean hu_stopped; // kart, true when the game is stopped for players due to a disconnecting or connecting player
|
||||
|
||||
#define SAVEGAMESIZE (768*1024)
|
||||
|
||||
typedef struct rewind_s
|
||||
{
|
||||
UINT8 savebuffer[SAVEGAMESIZE];
|
||||
UINT8 savebuffer[(768*1024)];
|
||||
tic_t leveltime;
|
||||
size_t demopos;
|
||||
|
||||
|
||||
+33
-27
@@ -274,17 +274,21 @@ static void D_Renderview(void)
|
||||
|
||||
R_ApplyLevelInterpolators(R_GetTimeFrac(RTF_LEVEL));
|
||||
|
||||
if (rendermode == render_soft && cv_homremoval.value)
|
||||
if (rendermode == render_soft)
|
||||
{
|
||||
if (cv_homremoval.value == 1)
|
||||
// if this is display player 1
|
||||
if (cv_homremoval.value)
|
||||
{
|
||||
// Clear the software screen buffer to remove HOM
|
||||
memset(vid.screens[0], 31, vid.width * vid.height);
|
||||
}
|
||||
else if (cv_homremoval.value == 2)
|
||||
{
|
||||
//'development' HOM removal -- makes it blindingly obvious if HOM is spotted.
|
||||
memset(vid.screens[0], 32+(timeinmap&15), vid.width * vid.height);
|
||||
if (cv_homremoval.value == 1)
|
||||
{
|
||||
// Clear the software screen buffer to remove HOM
|
||||
memset(vid.screens[0], 31, vid.width * vid.height);
|
||||
}
|
||||
else if (cv_homremoval.value == 2)
|
||||
{
|
||||
//'development' HOM removal -- makes it blindingly obvious if HOM is spotted.
|
||||
memset(vid.screens[0], 32+(timeinmap&15), vid.width * vid.height);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -318,6 +322,7 @@ static void D_Renderview(void)
|
||||
break;
|
||||
default: // Initialize for P1
|
||||
viewwindowy = viewwindowx = 0;
|
||||
objectsdrawn = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -328,17 +333,19 @@ static void D_Renderview(void)
|
||||
}
|
||||
else if (rendermode == render_soft)
|
||||
#endif
|
||||
{
|
||||
R_RenderPlayerView(&players[displayplayers[i]]);
|
||||
}
|
||||
|
||||
if (rendermode == render_soft)
|
||||
{
|
||||
if (i == 0)
|
||||
R_ApplyViewMorph();
|
||||
|
||||
if (i == 0)
|
||||
R_ApplyViewMorph();
|
||||
#ifdef MOTIONBLUR
|
||||
V_DoPostProcessor(i, postimgparam[i]);
|
||||
V_DoPostProcessor(i, postimgparam[i]);
|
||||
#else
|
||||
V_DoPostProcessor(i, 0);
|
||||
V_DoPostProcessor(i, 0);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -697,11 +704,6 @@ void D_SRB2Loop(void)
|
||||
|
||||
for (;;)
|
||||
{
|
||||
if (I_Interrupted())
|
||||
{
|
||||
I_Quit();
|
||||
}
|
||||
|
||||
// capbudget is the minimum precise_t duration of a single loop iteration
|
||||
precise_t capbudget;
|
||||
precise_t elapsed;
|
||||
@@ -781,6 +783,11 @@ void D_SRB2Loop(void)
|
||||
|
||||
doDisplay = true;
|
||||
}
|
||||
|
||||
if (!dedicated)
|
||||
{
|
||||
G_DeviceLEDTick();
|
||||
}
|
||||
}
|
||||
|
||||
if (interp)
|
||||
@@ -822,13 +829,6 @@ void D_SRB2Loop(void)
|
||||
if (takescreenshot)
|
||||
M_DoScreenShot();
|
||||
|
||||
#ifndef DEDICATED
|
||||
if (!dedicated && renderisnewtic)
|
||||
{
|
||||
G_DeviceLEDTick();
|
||||
}
|
||||
#endif
|
||||
|
||||
// consoleplayer -> displayplayers (hear sounds from viewpoint)
|
||||
S_UpdateSounds(); // move positional sounds
|
||||
|
||||
@@ -1643,6 +1643,12 @@ void D_SRB2Main(void)
|
||||
strcpy(srb2, "SRB2Kart");
|
||||
D_MakeTitleString(srb2);
|
||||
|
||||
#if defined (__OS2__) && !defined (HAVE_SDL)
|
||||
// set PM window title
|
||||
snprintf(pmData->title, sizeof (pmData->title), "SRB2Kart" VERSIONSTRING ": %s", title);
|
||||
pmData->title[sizeof (pmData->title) - 1] = '\0';
|
||||
#endif
|
||||
|
||||
if (devparm)
|
||||
CONS_Printf(M_GetText("Development mode ON.\n"));
|
||||
|
||||
|
||||
+5
-1
@@ -612,8 +612,12 @@ void Net_WaitAllAckReceived(UINT32 timeout)
|
||||
|
||||
static void InitNode(node_t *node)
|
||||
{
|
||||
memset(node, 0, sizeof(node_t));
|
||||
node->acktosend_head = node->acktosend_tail = 0;
|
||||
memset(node->acktosend, 0, sizeof(node->acktosend));
|
||||
node->firstacktosend = 0;
|
||||
node->nextacknum = 1;
|
||||
node->remotefirstack = 0;
|
||||
node->flags = 0;
|
||||
}
|
||||
|
||||
static void InitAck(void)
|
||||
|
||||
+482
-144
@@ -1208,11 +1208,11 @@ static boolean AllowedPlayerNameChar(char ch)
|
||||
|
||||
static boolean EnsurePlayerNameIsGood(char *name, INT32 playernum)
|
||||
{
|
||||
size_t ix, len = strlen(name);
|
||||
INT32 ix;
|
||||
|
||||
if (len == 0 || len > MAXPLAYERNAME)
|
||||
if (strlen(name) == 0 || strlen(name) > MAXPLAYERNAME)
|
||||
return false; // Empty or too long.
|
||||
if (name[0] == ' ' || name[len-1] == ' ')
|
||||
if (name[0] == ' ' || name[strlen(name)-1] == ' ')
|
||||
return false; // Starts or ends with a space.
|
||||
if (isdigit(name[0]))
|
||||
return false; // Starts with a digit.
|
||||
@@ -1226,19 +1226,20 @@ static boolean EnsurePlayerNameIsGood(char *name, INT32 playernum)
|
||||
|
||||
// Also, anything over 0x80 is disallowed too, since compilers love to
|
||||
// differ on whether they're printable characters or not.
|
||||
for (ix = 0; ix < len; ix++)
|
||||
for (ix = 0; name[ix] != '\0'; ix++)
|
||||
if (!AllowedPlayerNameChar(name[ix]))
|
||||
return false;
|
||||
|
||||
// Check if a player is currently using the name, case-insensitively.
|
||||
for (ix = 0; ix < MAXPLAYERS; ix++)
|
||||
{
|
||||
if (ix != (size_t)playernum && playeringame[ix]
|
||||
if (ix != playernum && playeringame[ix]
|
||||
&& fasticmp(name, player_names[ix]))
|
||||
{
|
||||
// We shouldn't kick people out just because
|
||||
// they joined the game with the same name
|
||||
// as someone else -- modify the name instead.
|
||||
size_t len = strlen(name);
|
||||
|
||||
// Recursion!
|
||||
// Slowly strip characters off the end of the
|
||||
@@ -1457,9 +1458,7 @@ UINT8 CanChangeSkin(INT32 playernum)
|
||||
return true;
|
||||
}
|
||||
|
||||
if (players[playernum].spectator ||
|
||||
players[playernum].playerstate == PST_DEAD ||
|
||||
players[playernum].playerstate == PST_REBORN)
|
||||
if (players[playernum].spectator || players[playernum].playerstate == PST_DEAD || players[playernum].playerstate == PST_REBORN)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
@@ -1493,144 +1492,445 @@ static void ForceAllSkins(INT32 forcedskin)
|
||||
}
|
||||
}
|
||||
|
||||
static INT32 chmappending;
|
||||
static INT32 snacpending[MAXSPLITSCREENPLAYERS];
|
||||
|
||||
// wonky compat, idk if anything uses this....
|
||||
#define playerisbot (splitplayer == 1 && botingame)
|
||||
static INT32 snacpending = 0, snac2pending = 0, snac3pending = 0, snac4pending = 0, chmappending = 0;
|
||||
|
||||
// name, color, or skin has changed
|
||||
//
|
||||
static void SendNameAndColor(UINT8 splitplayer)
|
||||
static void SendNameAndColor(void)
|
||||
{
|
||||
char buf[MAXPLAYERNAME+2];
|
||||
char *p;
|
||||
|
||||
p = buf;
|
||||
|
||||
// splitscreen
|
||||
if (splitscreen < splitplayer && !playerisbot)
|
||||
return;
|
||||
|
||||
const INT32 pnum = P_GetLocalPlayerNumForNum(splitplayer);
|
||||
|
||||
player_t *player = &players[pnum];
|
||||
|
||||
// TODO: make those cvars arrays
|
||||
consvar_t *playercolor, *playername, *playerskin;
|
||||
consvar_t *colorvars[] = {&cv_playercolor, &cv_playercolor2, &cv_playercolor3, &cv_playercolor4};
|
||||
consvar_t *namevars[] = {&cv_playername, &cv_playername2, &cv_playername3, &cv_playername4};
|
||||
consvar_t *skinvars[] = {&cv_skin, &cv_skin2, &cv_skin3, &cv_skin4};
|
||||
|
||||
playercolor = colorvars[splitplayer];
|
||||
playername = namevars[splitplayer];
|
||||
playerskin = skinvars[splitplayer];
|
||||
|
||||
// normal player colors
|
||||
if (G_GametypeHasTeams())
|
||||
{
|
||||
if (player->ctfteam == 1 && playercolor->value != skincolor_redteam)
|
||||
CV_StealthSetValue(playercolor, skincolor_redteam);
|
||||
else if (player->ctfteam == 2 && playercolor->value != skincolor_blueteam)
|
||||
CV_StealthSetValue(playercolor, skincolor_blueteam);
|
||||
if (players[consoleplayer].ctfteam == 1 && cv_playercolor.value != skincolor_redteam)
|
||||
CV_StealthSetValue(&cv_playercolor, skincolor_redteam);
|
||||
else if (players[consoleplayer].ctfteam == 2 && cv_playercolor.value != skincolor_blueteam)
|
||||
CV_StealthSetValue(&cv_playercolor, skincolor_blueteam);
|
||||
}
|
||||
|
||||
// never allow the color "none"
|
||||
if (!playercolor->value)
|
||||
if (!cv_playercolor.value)
|
||||
{
|
||||
if (player->skincolor)
|
||||
CV_StealthSetValue(playercolor, player->skincolor);
|
||||
else if (skins[player->skin].prefcolor)
|
||||
CV_StealthSetValue(playercolor, skins[player->skin].prefcolor);
|
||||
if (players[consoleplayer].skincolor)
|
||||
CV_StealthSetValue(&cv_playercolor, players[consoleplayer].skincolor);
|
||||
else if (skins[players[consoleplayer].skin].prefcolor)
|
||||
CV_StealthSetValue(&cv_playercolor, skins[players[consoleplayer].skin].prefcolor);
|
||||
else
|
||||
CV_StealthSet(playercolor, playercolor->defaultvalue);
|
||||
CV_StealthSet(&cv_playercolor, cv_playercolor.defaultvalue);
|
||||
}
|
||||
|
||||
if (fastcmp(cv_playername.string, player_names[consoleplayer])
|
||||
&& cv_playercolor.value == players[consoleplayer].skincolor
|
||||
&& fastcmp(cv_skin.string, skins[players[consoleplayer].skin].name))
|
||||
return;
|
||||
|
||||
// We'll handle it later if we're not playing.
|
||||
if (!Playing())
|
||||
return;
|
||||
|
||||
if (fastcmp(playername->string, player_names[pnum])
|
||||
&& playercolor->value == player->skincolor
|
||||
&& fastcmp(playerskin->string, skins[player->skin].name))
|
||||
return;
|
||||
|
||||
if (playerisbot)
|
||||
{
|
||||
players[pnum].skincolor = botcolor;
|
||||
if (players[pnum].mo)
|
||||
players[pnum].mo->color = players[pnum].skincolor;
|
||||
SetPlayerSkinByNum(pnum, botskin-1);
|
||||
return;
|
||||
}
|
||||
|
||||
// If you're not in a netgame, merely update the skin, color, and name.
|
||||
if (!netgame)
|
||||
{
|
||||
INT32 foundskin;
|
||||
|
||||
CleanupPlayerName(pnum, playername->zstring);
|
||||
strcpy(player_names[pnum], playername->zstring);
|
||||
CleanupPlayerName(consoleplayer, cv_playername.zstring);
|
||||
strcpy(player_names[consoleplayer], cv_playername.zstring);
|
||||
|
||||
player->skincolor = playercolor->value;
|
||||
players[consoleplayer].skincolor = cv_playercolor.value;
|
||||
|
||||
if (player->mo)
|
||||
player->mo->color = player->skincolor;
|
||||
if (players[consoleplayer].mo)
|
||||
players[consoleplayer].mo->color = players[consoleplayer].skincolor;
|
||||
|
||||
if ((foundskin = R_SkinAvailable(playerskin->string)) != -1)
|
||||
if ((foundskin = R_SkinAvailable(cv_skin.string)) != -1)
|
||||
{
|
||||
playerskin->value = foundskin;
|
||||
SetPlayerSkin(pnum, playerskin->string);
|
||||
CV_StealthSet(playerskin, skins[playerskin->value].name);
|
||||
cv_skin.value = foundskin;
|
||||
SetPlayerSkin(consoleplayer, cv_skin.string);
|
||||
CV_StealthSet(&cv_skin, skins[cv_skin.value].name);
|
||||
}
|
||||
else
|
||||
{
|
||||
playerskin->value = player->skin;
|
||||
CV_StealthSet(playerskin, skins[player->skin].name);
|
||||
cv_skin.value = players[consoleplayer].skin;
|
||||
CV_StealthSet(&cv_skin, skins[players[consoleplayer].skin].name);
|
||||
// will always be same as current
|
||||
SetPlayerSkin(pnum, playerskin->string);
|
||||
SetPlayerSkin(consoleplayer, cv_skin.string);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
snacpending[splitplayer]++;
|
||||
snacpending++;
|
||||
|
||||
// Don't change name if muted
|
||||
if (player_name_changes[pnum] >= MAXNAMECHANGES)
|
||||
if (player_name_changes[consoleplayer] >= MAXNAMECHANGES)
|
||||
{
|
||||
CV_StealthSet(playername, player_names[pnum]);
|
||||
CV_StealthSet(&cv_playername, player_names[consoleplayer]);
|
||||
HU_AddChatText("\x85*You must wait to change your name again", false);
|
||||
}
|
||||
else if (cv_mute.value && !(server || IsPlayerAdmin(pnum)))
|
||||
CV_StealthSet(playername, player_names[pnum]);
|
||||
else if (cv_mute.value && !(server || IsPlayerAdmin(consoleplayer)))
|
||||
CV_StealthSet(&cv_playername, player_names[consoleplayer]);
|
||||
else // Cleanup name if changing it
|
||||
CleanupPlayerName(pnum, playername->zstring);
|
||||
CleanupPlayerName(consoleplayer, cv_playername.zstring);
|
||||
|
||||
// Don't change skin if the server doesn't want you to.
|
||||
if (!CanChangeSkin(pnum))
|
||||
CV_StealthSet(playerskin, skins[player->skin].name);
|
||||
if (!CanChangeSkin(consoleplayer))
|
||||
CV_StealthSet(&cv_skin, skins[players[consoleplayer].skin].name);
|
||||
|
||||
// check if player has the skin loaded (cv_skin may have
|
||||
// the name of a skin that was available in the previous game)
|
||||
playerskin->value = R_SkinAvailable(playerskin->string);
|
||||
if (playerskin->value < 0)
|
||||
cv_skin.value = R_SkinAvailable(cv_skin.string);
|
||||
if (cv_skin.value < 0)
|
||||
{
|
||||
INT32 skinnum = player->skin;
|
||||
CV_StealthSet(playerskin, skins[skinnum].name);
|
||||
playerskin->value = skinnum;
|
||||
INT32 skinnum = players[consoleplayer].skin;
|
||||
CV_StealthSet(&cv_skin, skins[skinnum].name);
|
||||
cv_skin.value = skinnum;
|
||||
}
|
||||
|
||||
// Finally write out the complete packet and send it off.
|
||||
WRITESTRINGN(p, playername->zstring, MAXPLAYERNAME);
|
||||
WRITEUINT8(p, (UINT8)playercolor->value);
|
||||
WRITEUINT8(p, (UINT8)playerskin->value);
|
||||
SendNetXCmdForPlayer(splitplayer, XD_NAMEANDCOLOR, buf, p - buf);
|
||||
WRITESTRINGN(p, cv_playername.zstring, MAXPLAYERNAME);
|
||||
WRITEUINT8(p, (UINT8)cv_playercolor.value);
|
||||
WRITEUINT8(p, (UINT8)cv_skin.value);
|
||||
SendNetXCmdForPlayer(0, XD_NAMEANDCOLOR, buf, p - buf);
|
||||
}
|
||||
|
||||
// splitscreen
|
||||
static void SendNameAndColor2(void)
|
||||
{
|
||||
INT32 secondplaya = -1;
|
||||
char buf[MAXPLAYERNAME+2];
|
||||
char *p;
|
||||
|
||||
if (splitscreen < 1 && !botingame)
|
||||
return; // can happen if skin2/color2/name2 changed
|
||||
|
||||
if (displayplayers[1] != consoleplayer)
|
||||
secondplaya = displayplayers[1];
|
||||
else if (!netgame) // HACK
|
||||
secondplaya = 1;
|
||||
|
||||
if (secondplaya == -1)
|
||||
return;
|
||||
|
||||
p = buf;
|
||||
|
||||
// normal player colors
|
||||
if (G_GametypeHasTeams())
|
||||
{
|
||||
if (players[secondplaya].ctfteam == 1 && cv_playercolor2.value != skincolor_redteam)
|
||||
CV_StealthSetValue(&cv_playercolor2, skincolor_redteam);
|
||||
else if (players[secondplaya].ctfteam == 2 && cv_playercolor2.value != skincolor_blueteam)
|
||||
CV_StealthSetValue(&cv_playercolor2, skincolor_blueteam);
|
||||
}
|
||||
|
||||
// never allow the color "none"
|
||||
if (!cv_playercolor2.value)
|
||||
{
|
||||
if (players[secondplaya].skincolor)
|
||||
CV_StealthSetValue(&cv_playercolor2, players[secondplaya].skincolor);
|
||||
else if (skins[players[secondplaya].skin].prefcolor)
|
||||
CV_StealthSetValue(&cv_playercolor2, skins[players[secondplaya].skin].prefcolor);
|
||||
else
|
||||
CV_StealthSet(&cv_playercolor2, cv_playercolor2.defaultvalue);
|
||||
}
|
||||
|
||||
// We'll handle it later if we're not playing.
|
||||
if (!Playing())
|
||||
return;
|
||||
|
||||
// If you're not in a netgame, merely update the skin, color, and name.
|
||||
if (botingame)
|
||||
{
|
||||
players[secondplaya].skincolor = botcolor;
|
||||
if (players[secondplaya].mo)
|
||||
players[secondplaya].mo->color = players[secondplaya].skincolor;
|
||||
SetPlayerSkinByNum(secondplaya, botskin-1);
|
||||
return;
|
||||
}
|
||||
else if (!netgame)
|
||||
{
|
||||
INT32 foundskin;
|
||||
|
||||
CleanupPlayerName(secondplaya, cv_playername2.zstring);
|
||||
strcpy(player_names[secondplaya], cv_playername2.zstring);
|
||||
|
||||
// don't use displayplayers[1]: the second player must be 1
|
||||
players[secondplaya].skincolor = cv_playercolor2.value;
|
||||
if (players[secondplaya].mo)
|
||||
players[secondplaya].mo->color = players[secondplaya].skincolor;
|
||||
|
||||
if ((foundskin = R_SkinAvailable(cv_skin2.string)) != -1)
|
||||
{
|
||||
cv_skin2.value = foundskin;
|
||||
SetPlayerSkin(secondplaya, cv_skin2.string);
|
||||
}
|
||||
else
|
||||
{
|
||||
cv_skin2.value = players[secondplaya].skin;
|
||||
CV_StealthSet(&cv_skin2, skins[players[secondplaya].skin].name);
|
||||
// will always be same as current
|
||||
SetPlayerSkin(secondplaya, cv_skin2.string);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
snac2pending++;
|
||||
|
||||
// Don't change name if muted
|
||||
if (player_name_changes[displayplayers[1]] >= MAXNAMECHANGES)
|
||||
{
|
||||
CV_StealthSet(&cv_playername2, player_names[displayplayers[1]]);
|
||||
HU_AddChatText("\x85*You must wait to change your name again", false);
|
||||
}
|
||||
else if (cv_mute.value && !(server || IsPlayerAdmin(displayplayers[1])))
|
||||
CV_StealthSet(&cv_playername2, player_names[displayplayers[1]]);
|
||||
else // Cleanup name if changing it
|
||||
CleanupPlayerName(displayplayers[1], cv_playername2.zstring);
|
||||
|
||||
// Don't change skin if the server doesn't want you to.
|
||||
if (!CanChangeSkin(displayplayers[1]))
|
||||
CV_StealthSet(&cv_skin2, skins[players[displayplayers[1]].skin].name);
|
||||
|
||||
// check if player has the skin loaded (cv_skin2 may have
|
||||
// the name of a skin that was available in the previous game)
|
||||
cv_skin2.value = R_SkinAvailable(cv_skin2.string);
|
||||
if (cv_skin2.value < 0)
|
||||
{
|
||||
INT32 skinnum = players[displayplayers[1]].skin;
|
||||
CV_StealthSet(&cv_skin2, skins[skinnum].name);
|
||||
cv_skin2.value = skinnum;
|
||||
}
|
||||
|
||||
// Finally write out the complete packet and send it off.
|
||||
WRITESTRINGN(p, cv_playername2.zstring, MAXPLAYERNAME);
|
||||
WRITEUINT8(p, (UINT8)cv_playercolor2.value);
|
||||
WRITEUINT8(p, (UINT8)cv_skin2.value);
|
||||
SendNetXCmdForPlayer(1, XD_NAMEANDCOLOR, buf, p - buf);
|
||||
}
|
||||
|
||||
static void SendNameAndColor3(void)
|
||||
{
|
||||
INT32 thirdplaya = -1;
|
||||
char buf[MAXPLAYERNAME+2];
|
||||
char *p;
|
||||
|
||||
if (splitscreen < 2)
|
||||
return; // can happen if skin3/color3/name3 changed
|
||||
|
||||
if (displayplayers[2] != consoleplayer)
|
||||
thirdplaya = displayplayers[2];
|
||||
else if (!netgame) // HACK
|
||||
thirdplaya = 2;
|
||||
|
||||
if (thirdplaya == -1)
|
||||
return;
|
||||
|
||||
p = buf;
|
||||
|
||||
// normal player colors
|
||||
if (G_GametypeHasTeams())
|
||||
{
|
||||
if (players[thirdplaya].ctfteam == 1 && cv_playercolor3.value != skincolor_redteam)
|
||||
CV_StealthSetValue(&cv_playercolor3, skincolor_redteam);
|
||||
else if (players[thirdplaya].ctfteam == 2 && cv_playercolor3.value != skincolor_blueteam)
|
||||
CV_StealthSetValue(&cv_playercolor3, skincolor_blueteam);
|
||||
}
|
||||
|
||||
// never allow the color "none"
|
||||
if (!cv_playercolor3.value)
|
||||
{
|
||||
if (players[thirdplaya].skincolor)
|
||||
CV_StealthSetValue(&cv_playercolor3, players[thirdplaya].skincolor);
|
||||
else if (skins[players[thirdplaya].skin].prefcolor)
|
||||
CV_StealthSetValue(&cv_playercolor3, skins[players[thirdplaya].skin].prefcolor);
|
||||
else
|
||||
CV_StealthSet(&cv_playercolor3, cv_playercolor3.defaultvalue);
|
||||
}
|
||||
|
||||
// We'll handle it later if we're not playing.
|
||||
if (!Playing())
|
||||
return;
|
||||
|
||||
// If you're not in a netgame, merely update the skin, color, and name.
|
||||
if (!netgame)
|
||||
{
|
||||
INT32 foundskin;
|
||||
|
||||
CleanupPlayerName(thirdplaya, cv_playername3.zstring);
|
||||
strcpy(player_names[thirdplaya], cv_playername3.zstring);
|
||||
|
||||
// don't use displayplayers[2]: the third player must be 2
|
||||
players[thirdplaya].skincolor = cv_playercolor3.value;
|
||||
if (players[thirdplaya].mo)
|
||||
players[thirdplaya].mo->color = players[thirdplaya].skincolor;
|
||||
|
||||
if ((foundskin = R_SkinAvailable(cv_skin3.string)) != -1)
|
||||
{
|
||||
cv_skin3.value = foundskin;
|
||||
SetPlayerSkin(thirdplaya, cv_skin3.string);
|
||||
}
|
||||
else
|
||||
{
|
||||
cv_skin3.value = players[thirdplaya].skin;
|
||||
CV_StealthSet(&cv_skin3, skins[players[thirdplaya].skin].name);
|
||||
// will always be same as current
|
||||
SetPlayerSkin(thirdplaya, cv_skin3.string);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
snac3pending++;
|
||||
|
||||
// Don't change name if muted
|
||||
if (player_name_changes[displayplayers[2]] >= MAXNAMECHANGES)
|
||||
{
|
||||
CV_StealthSet(&cv_playername3, player_names[displayplayers[2]]);
|
||||
HU_AddChatText("\x85*You must wait to change your name again", false);
|
||||
}
|
||||
else if (cv_mute.value && !(server || IsPlayerAdmin(displayplayers[2])))
|
||||
CV_StealthSet(&cv_playername3, player_names[displayplayers[2]]);
|
||||
else // Cleanup name if changing it
|
||||
CleanupPlayerName(displayplayers[2], cv_playername3.zstring);
|
||||
|
||||
// Don't change skin if the server doesn't want you to.
|
||||
if (!CanChangeSkin(displayplayers[2]))
|
||||
CV_StealthSet(&cv_skin3, skins[players[displayplayers[2]].skin].name);
|
||||
|
||||
// check if player has the skin loaded (cv_skin3 may have
|
||||
// the name of a skin that was available in the previous game)
|
||||
cv_skin3.value = R_SkinAvailable(cv_skin3.string);
|
||||
if (cv_skin3.value < 0)
|
||||
{
|
||||
INT32 skinnum = players[displayplayers[2]].skin;
|
||||
CV_StealthSet(&cv_skin3, skins[skinnum].name);
|
||||
cv_skin3.value = skinnum;
|
||||
}
|
||||
|
||||
// Finally write out the complete packet and send it off.
|
||||
WRITESTRINGN(p, cv_playername3.zstring, MAXPLAYERNAME);
|
||||
WRITEUINT8(p, (UINT8)cv_playercolor3.value);
|
||||
WRITEUINT8(p, (UINT8)cv_skin3.value);
|
||||
SendNetXCmdForPlayer(2, XD_NAMEANDCOLOR, buf, p - buf);
|
||||
}
|
||||
|
||||
static void SendNameAndColor4(void)
|
||||
{
|
||||
INT32 fourthplaya = -1;
|
||||
char buf[MAXPLAYERNAME+2];
|
||||
char *p;
|
||||
|
||||
if (splitscreen < 3)
|
||||
return; // can happen if skin4/color4/name4 changed
|
||||
|
||||
if (displayplayers[3] != consoleplayer)
|
||||
fourthplaya = displayplayers[3];
|
||||
else if (!netgame) // HACK
|
||||
fourthplaya = 3;
|
||||
|
||||
if (fourthplaya == -1)
|
||||
return;
|
||||
|
||||
p = buf;
|
||||
|
||||
// normal player colors
|
||||
if (G_GametypeHasTeams())
|
||||
{
|
||||
if (players[fourthplaya].ctfteam == 1 && cv_playercolor4.value != skincolor_redteam)
|
||||
CV_StealthSetValue(&cv_playercolor4, skincolor_redteam);
|
||||
else if (players[fourthplaya].ctfteam == 2 && cv_playercolor4.value != skincolor_blueteam)
|
||||
CV_StealthSetValue(&cv_playercolor4, skincolor_blueteam);
|
||||
}
|
||||
|
||||
// never allow the color "none"
|
||||
if (!cv_playercolor4.value)
|
||||
{
|
||||
if (players[fourthplaya].skincolor)
|
||||
CV_StealthSetValue(&cv_playercolor4, players[fourthplaya].skincolor);
|
||||
else if (skins[players[fourthplaya].skin].prefcolor)
|
||||
CV_StealthSetValue(&cv_playercolor4, skins[players[fourthplaya].skin].prefcolor);
|
||||
else
|
||||
CV_StealthSet(&cv_playercolor4, cv_playercolor4.defaultvalue);
|
||||
}
|
||||
|
||||
// We'll handle it later if we're not playing.
|
||||
if (!Playing())
|
||||
return;
|
||||
|
||||
// If you're not in a netgame, merely update the skin, color, and name.
|
||||
if (botingame)
|
||||
{
|
||||
players[fourthplaya].skincolor = botcolor;
|
||||
if (players[fourthplaya].mo)
|
||||
players[fourthplaya].mo->color = players[fourthplaya].skincolor;
|
||||
SetPlayerSkinByNum(fourthplaya, botskin-1);
|
||||
return;
|
||||
}
|
||||
else if (!netgame)
|
||||
{
|
||||
INT32 foundskin;
|
||||
|
||||
CleanupPlayerName(fourthplaya, cv_playername4.zstring);
|
||||
strcpy(player_names[fourthplaya], cv_playername4.zstring);
|
||||
|
||||
// don't use displayplayers[3]: the second player must be 4
|
||||
players[fourthplaya].skincolor = cv_playercolor4.value;
|
||||
if (players[fourthplaya].mo)
|
||||
players[fourthplaya].mo->color = players[fourthplaya].skincolor;
|
||||
|
||||
if ((foundskin = R_SkinAvailable(cv_skin4.string)) != -1)
|
||||
{
|
||||
cv_skin4.value = foundskin;
|
||||
SetPlayerSkin(fourthplaya, cv_skin4.string);
|
||||
}
|
||||
else
|
||||
{
|
||||
cv_skin4.value = players[fourthplaya].skin;
|
||||
CV_StealthSet(&cv_skin4, skins[players[fourthplaya].skin].name);
|
||||
// will always be same as current
|
||||
SetPlayerSkin(fourthplaya, cv_skin4.string);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
snac4pending++;
|
||||
|
||||
// Don't change name if muted
|
||||
if (player_name_changes[displayplayers[3]] >= MAXNAMECHANGES)
|
||||
{
|
||||
CV_StealthSet(&cv_playername4, player_names[displayplayers[3]]);
|
||||
HU_AddChatText("\x85*You must wait to change your name again", false);
|
||||
}
|
||||
else if (cv_mute.value && !(server || IsPlayerAdmin(displayplayers[3])))
|
||||
CV_StealthSet(&cv_playername4, player_names[displayplayers[3]]);
|
||||
else // Cleanup name if changing it
|
||||
CleanupPlayerName(displayplayers[3], cv_playername4.zstring);
|
||||
|
||||
// Don't change skin if the server doesn't want you to.
|
||||
if (!CanChangeSkin(displayplayers[3]))
|
||||
CV_StealthSet(&cv_skin4, skins[players[displayplayers[3]].skin].name);
|
||||
|
||||
// check if player has the skin loaded (cv_skin4 may have
|
||||
// the name of a skin that was available in the previous game)
|
||||
cv_skin4.value = R_SkinAvailable(cv_skin4.string);
|
||||
if (cv_skin4.value < 0)
|
||||
{
|
||||
INT32 skinnum = players[displayplayers[3]].skin;
|
||||
CV_StealthSet(&cv_skin4, skins[skinnum].name);
|
||||
cv_skin4.value = skinnum;
|
||||
}
|
||||
|
||||
// Finally write out the complete packet and send it off.
|
||||
WRITESTRINGN(p, cv_playername4.zstring, MAXPLAYERNAME);
|
||||
WRITEUINT8(p, (UINT8)cv_playercolor4.value);
|
||||
WRITEUINT8(p, (UINT8)cv_skin4.value);
|
||||
SendNetXCmdForPlayer(3, XD_NAMEANDCOLOR, buf, p - buf);
|
||||
}
|
||||
|
||||
static void Got_NameAndColor(const UINT8 **cp, INT32 playernum)
|
||||
{
|
||||
player_t *player = &players[playernum];
|
||||
player_t *p = &players[playernum];
|
||||
char name[MAXPLAYERNAME+1];
|
||||
UINT8 color, skin;
|
||||
|
||||
@@ -1639,14 +1939,19 @@ static void Got_NameAndColor(const UINT8 **cp, INT32 playernum)
|
||||
I_Error("There is no player %d!", playernum);
|
||||
#endif
|
||||
|
||||
if (P_IsLocalPlayer(player))
|
||||
{
|
||||
snacpending[playernum]--;
|
||||
if (playernum == consoleplayer)
|
||||
snacpending--; // TODO: make snacpending an array instead of 4 separate vars?
|
||||
else if (playernum == displayplayers[1])
|
||||
snac2pending--;
|
||||
else if (playernum == displayplayers[2])
|
||||
snac3pending--;
|
||||
else if (playernum == displayplayers[3])
|
||||
snac4pending--;
|
||||
|
||||
#ifdef PARANOIA
|
||||
if (snacpending[playernum] < 0)
|
||||
I_Error("snacpending negative!");
|
||||
if (snacpending < 0 || snac2pending < 0 || snac3pending < 0 || snac4pending < 0)
|
||||
I_Error("snacpending negative!");
|
||||
#endif
|
||||
}
|
||||
|
||||
READSTRINGN(*cp, name, MAXPLAYERNAME);
|
||||
color = READUINT8(*cp);
|
||||
@@ -1660,32 +1965,33 @@ static void Got_NameAndColor(const UINT8 **cp, INT32 playernum)
|
||||
}
|
||||
|
||||
// set color
|
||||
player->skincolor = color % MAXSKINCOLORS;
|
||||
if (player->mo)
|
||||
player->mo->color = (UINT8)player->skincolor;
|
||||
p->skincolor = color % MAXSKINCOLORS;
|
||||
if (p->mo)
|
||||
p->mo->color = (UINT8)p->skincolor;
|
||||
demo_extradata[playernum] |= DXD_COLOR;
|
||||
|
||||
// normal player colors
|
||||
if (server && !P_IsLocalPlayer(player))
|
||||
if (server && (p != &players[consoleplayer] && p != &players[displayplayers[1]]
|
||||
&& p != &players[displayplayers[2]] && p != &players[displayplayers[3]]))
|
||||
{
|
||||
boolean kick = false;
|
||||
|
||||
// team colors
|
||||
if (G_GametypeHasTeams())
|
||||
{
|
||||
if (player->ctfteam == 1 && player->skincolor != skincolor_redteam)
|
||||
if (p->ctfteam == 1 && p->skincolor != skincolor_redteam)
|
||||
kick = true;
|
||||
else if (player->ctfteam == 2 && player->skincolor != skincolor_blueteam)
|
||||
else if (p->ctfteam == 2 && p->skincolor != skincolor_blueteam)
|
||||
kick = true;
|
||||
}
|
||||
|
||||
// don't allow color "none"
|
||||
if (!player->skincolor)
|
||||
if (!p->skincolor)
|
||||
kick = true;
|
||||
|
||||
if (kick)
|
||||
{
|
||||
CONS_Alert(CONS_WARNING, M_GetText("Illegal color change received from %s (team: %d), color: %d)\n"), player_names[playernum], player->ctfteam, player->skincolor);
|
||||
CONS_Alert(CONS_WARNING, M_GetText("Illegal color change received from %s (team: %d), color: %d)\n"), player_names[playernum], p->ctfteam, p->skincolor);
|
||||
SendKick(playernum, KICK_MSG_CON_FAIL);
|
||||
return;
|
||||
}
|
||||
@@ -1697,7 +2003,6 @@ static void Got_NameAndColor(const UINT8 **cp, INT32 playernum)
|
||||
const INT32 forcedskin = cv_forceskin.value;
|
||||
SetPlayerSkinByNum(playernum, forcedskin);
|
||||
|
||||
// TODO: make cv_skin an array
|
||||
if (playernum == consoleplayer)
|
||||
CV_StealthSet(&cv_skin, skins[forcedskin].name);
|
||||
else if (playernum == displayplayers[1])
|
||||
@@ -1711,16 +2016,44 @@ static void Got_NameAndColor(const UINT8 **cp, INT32 playernum)
|
||||
SetPlayerSkinByNum(playernum, skin);
|
||||
}
|
||||
|
||||
void SendWeaponPref(UINT8 splitplayer)
|
||||
void SendWeaponPref(void)
|
||||
{
|
||||
UINT8 buf[1];
|
||||
|
||||
buf[0] = 0;
|
||||
|
||||
if (cv_flipcam[splitplayer].value)
|
||||
if (cv_flipcam[0].value)
|
||||
buf[0] |= 1;
|
||||
SendNetXCmdForPlayer(0, XD_WEAPONPREF, buf, 1);
|
||||
}
|
||||
|
||||
SendNetXCmdForPlayer(splitplayer, XD_WEAPONPREF, buf, 1);
|
||||
void SendWeaponPref2(void)
|
||||
{
|
||||
UINT8 buf[1];
|
||||
|
||||
buf[0] = 0;
|
||||
if (cv_flipcam[1].value)
|
||||
buf[0] |= 1;
|
||||
SendNetXCmdForPlayer(1, XD_WEAPONPREF, buf, 1);
|
||||
}
|
||||
|
||||
void SendWeaponPref3(void)
|
||||
{
|
||||
UINT8 buf[1];
|
||||
|
||||
buf[0] = 0;
|
||||
if (cv_flipcam[2].value)
|
||||
buf[0] |= 1;
|
||||
SendNetXCmdForPlayer(2, XD_WEAPONPREF, buf, 1);
|
||||
}
|
||||
|
||||
void SendWeaponPref4(void)
|
||||
{
|
||||
UINT8 buf[1];
|
||||
|
||||
buf[0] = 0;
|
||||
if (cv_flipcam[3].value)
|
||||
buf[0] |= 1;
|
||||
SendNetXCmdForPlayer(3, XD_WEAPONPREF, buf, 1);
|
||||
}
|
||||
|
||||
static void Got_WeaponPref(const UINT8 **cp, INT32 playernum)
|
||||
@@ -1736,10 +2069,23 @@ static void Got_WeaponPref(const UINT8 **cp, INT32 playernum)
|
||||
player->pflags |= PF_ANALOGMODE;
|
||||
}
|
||||
|
||||
void D_SendPlayerConfig(UINT8 splitplayer)
|
||||
void D_SendPlayerConfig(void)
|
||||
{
|
||||
SendNameAndColor(splitplayer);
|
||||
SendWeaponPref(splitplayer);
|
||||
SendNameAndColor();
|
||||
if (splitscreen || botingame)
|
||||
SendNameAndColor2();
|
||||
if (splitscreen > 1)
|
||||
SendNameAndColor3();
|
||||
if (splitscreen > 2)
|
||||
SendNameAndColor4();
|
||||
|
||||
SendWeaponPref();
|
||||
if (splitscreen)
|
||||
SendWeaponPref2();
|
||||
if (splitscreen > 1)
|
||||
SendWeaponPref3();
|
||||
if (splitscreen > 2)
|
||||
SendWeaponPref4();
|
||||
}
|
||||
|
||||
// Only works for displayplayer, sorry!
|
||||
@@ -1762,12 +2108,10 @@ INT32 D_LookupPlayer(const char *s)
|
||||
return playernum;
|
||||
}
|
||||
|
||||
const size_t len = strlen(s);
|
||||
|
||||
for (playernum = 0; playernum < MAXPLAYERS; ++playernum)
|
||||
{
|
||||
/* Match name case-insensitively: fully, or partially the start. */
|
||||
if (playeringame[playernum] && (strnicmp(player_names[playernum], s, len) == 0))
|
||||
if (playeringame[playernum] && (strnicmp(player_names[playernum], s, strlen(s)) == 0))
|
||||
{
|
||||
return playernum;
|
||||
}
|
||||
@@ -1807,15 +2151,13 @@ static void GetViewablePlayerPlaceRange(INT32 *first, INT32 *last)
|
||||
(*last) = 0;
|
||||
|
||||
for (i = 0; i < MAXPLAYERS; ++i)
|
||||
{
|
||||
if (G_CouldView(i))
|
||||
{
|
||||
place = players[i].kartstuff[k_position];
|
||||
if (place < (*first))
|
||||
(*first) = place;
|
||||
if (place > (*last))
|
||||
(*last) = place;
|
||||
}
|
||||
{
|
||||
place = players[i].kartstuff[k_position];
|
||||
if (place < (*first))
|
||||
(*first) = place;
|
||||
if (place > (*last))
|
||||
(*last) = place;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2149,7 +2491,7 @@ void D_MapChange(INT32 mapnum, INT32 newgametype, boolean pencoremode, boolean r
|
||||
displayplayers[1] = 1;
|
||||
playeringame[1] = true;
|
||||
players[1].bot = 1;
|
||||
SendNameAndColor(1);
|
||||
SendNameAndColor2();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5426,54 +5768,50 @@ static void ForceSkin_OnChange(void)
|
||||
}
|
||||
}
|
||||
|
||||
// Allows the player's name to be changed if cv_mute is off.
|
||||
//Allows the player's name to be changed if cv_mute is off.
|
||||
static void Name_OnChange(void)
|
||||
{
|
||||
if (cv_mute.value && !(server || IsPlayerAdmin(consoleplayer)))
|
||||
{
|
||||
CONS_Alert(CONS_NOTICE, M_GetText("You may not change your name when chat is muted.\n"));
|
||||
CV_StealthSet(&cv_playername, player_names[consoleplayer]);
|
||||
return;
|
||||
}
|
||||
|
||||
SendNameAndColor(0);
|
||||
else
|
||||
SendNameAndColor();
|
||||
|
||||
}
|
||||
|
||||
static void Name2_OnChange(void)
|
||||
{
|
||||
if (cv_mute.value) // Secondary player can't be admin.
|
||||
if (cv_mute.value) //Secondary player can't be admin.
|
||||
{
|
||||
CONS_Alert(CONS_NOTICE, M_GetText("You may not change your name when chat is muted.\n"));
|
||||
CV_StealthSet(&cv_playername2, player_names[displayplayers[1]]);
|
||||
return;
|
||||
}
|
||||
|
||||
SendNameAndColor(1);
|
||||
else
|
||||
SendNameAndColor2();
|
||||
}
|
||||
|
||||
static void Name3_OnChange(void)
|
||||
{
|
||||
if (cv_mute.value) // Third player can't be admin.
|
||||
if (cv_mute.value) //Third player can't be admin.
|
||||
{
|
||||
CONS_Alert(CONS_NOTICE, M_GetText("You may not change your name when chat is muted.\n"));
|
||||
CV_StealthSet(&cv_playername3, player_names[displayplayers[2]]);
|
||||
return;
|
||||
}
|
||||
|
||||
SendNameAndColor(2);
|
||||
else
|
||||
SendNameAndColor3();
|
||||
}
|
||||
|
||||
static void Name4_OnChange(void)
|
||||
{
|
||||
if (cv_mute.value) // Secondary player can't be admin.
|
||||
if (cv_mute.value) //Secondary player can't be admin.
|
||||
{
|
||||
CONS_Alert(CONS_NOTICE, M_GetText("You may not change your name when chat is muted.\n"));
|
||||
CV_StealthSet(&cv_playername4, player_names[displayplayers[3]]);
|
||||
return;
|
||||
}
|
||||
|
||||
SendNameAndColor(3);
|
||||
else
|
||||
SendNameAndColor4();
|
||||
}
|
||||
|
||||
/** Sends a skin change for the console player, unless that player is moving.
|
||||
@@ -5495,7 +5833,7 @@ static void Skin_OnChange(void)
|
||||
}
|
||||
|
||||
if (CanChangeSkin(consoleplayer) && !P_PlayerMoving(consoleplayer))
|
||||
SendNameAndColor(0);
|
||||
SendNameAndColor();
|
||||
else
|
||||
{
|
||||
CONS_Alert(CONS_NOTICE, M_GetText("You can't change your skin at the moment.\n"));
|
||||
@@ -5516,7 +5854,7 @@ static void Skin2_OnChange(void)
|
||||
return; // do whatever you want
|
||||
|
||||
if (CanChangeSkin(displayplayers[1]) && !P_PlayerMoving(displayplayers[1]))
|
||||
SendNameAndColor(1);
|
||||
SendNameAndColor2();
|
||||
else
|
||||
{
|
||||
CONS_Alert(CONS_NOTICE, M_GetText("You can't change your skin at the moment.\n"));
|
||||
@@ -5532,7 +5870,7 @@ static void Skin3_OnChange(void)
|
||||
return; // do whatever you want
|
||||
|
||||
if (CanChangeSkin(displayplayers[2]) && !P_PlayerMoving(displayplayers[2]))
|
||||
SendNameAndColor(2);
|
||||
SendNameAndColor3();
|
||||
else
|
||||
{
|
||||
CONS_Alert(CONS_NOTICE, M_GetText("You can't change your skin at the moment.\n"));
|
||||
@@ -5548,7 +5886,7 @@ static void Skin4_OnChange(void)
|
||||
return; // do whatever you want
|
||||
|
||||
if (CanChangeSkin(displayplayers[3]) && !P_PlayerMoving(displayplayers[3]))
|
||||
SendNameAndColor(3);
|
||||
SendNameAndColor4();
|
||||
else
|
||||
{
|
||||
CONS_Alert(CONS_NOTICE, M_GetText("You can't change your skin at the moment.\n"));
|
||||
@@ -5661,7 +5999,7 @@ static void Color_OnChange(void)
|
||||
if (!P_PlayerMoving(consoleplayer))
|
||||
{
|
||||
// Color change menu scrolling fix is no longer necessary
|
||||
SendNameAndColor(0);
|
||||
SendNameAndColor();
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -5683,7 +6021,7 @@ static void Color2_OnChange(void)
|
||||
if (!P_PlayerMoving(displayplayers[1]))
|
||||
{
|
||||
// Color change menu scrolling fix is no longer necessary
|
||||
SendNameAndColor(1);
|
||||
SendNameAndColor2();
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -5700,7 +6038,7 @@ static void Color3_OnChange(void)
|
||||
if (!P_PlayerMoving(displayplayers[2]))
|
||||
{
|
||||
// Color change menu scrolling fix is no longer necessary
|
||||
SendNameAndColor(2);
|
||||
SendNameAndColor3();
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -5717,7 +6055,7 @@ static void Color4_OnChange(void)
|
||||
if (!P_PlayerMoving(displayplayers[3]))
|
||||
{
|
||||
// Color change menu scrolling fix is no longer necessary
|
||||
SendNameAndColor(3);
|
||||
SendNameAndColor4();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
+5
-2
@@ -21,7 +21,10 @@ extern "C" {
|
||||
|
||||
#include "command.h"
|
||||
|
||||
void SendWeaponPref(UINT8 splitplayer);
|
||||
void SendWeaponPref(void);
|
||||
void SendWeaponPref2(void);
|
||||
void SendWeaponPref3(void);
|
||||
void SendWeaponPref4(void);
|
||||
|
||||
// console vars
|
||||
extern consvar_t cv_playername;
|
||||
@@ -292,7 +295,7 @@ typedef union {
|
||||
// add game commands, needs cleanup
|
||||
void D_RegisterServerCommands(void);
|
||||
void D_RegisterClientCommands(void);
|
||||
void D_SendPlayerConfig(UINT8 splitplayer);
|
||||
void D_SendPlayerConfig(void);
|
||||
void Command_ExitGame_f(void);
|
||||
void Command_Retry_f(void);
|
||||
void D_GameTypeChanged(INT32 lastgametype); // not a real _OnChange function anymore
|
||||
|
||||
+16
-16
@@ -960,7 +960,7 @@ void Got_Filetxpak(void)
|
||||
|| fastcmp(filename, "music.kart")
|
||||
|| fastcmp(filename, "patch.kart")
|
||||
))
|
||||
I_Error("Tried to download base-game file: \"%s\"", filename);
|
||||
I_Error("Tried to download \"%s\"", filename);
|
||||
|
||||
if (filenum >= fileneedednum)
|
||||
{
|
||||
@@ -1019,21 +1019,21 @@ void Got_Filetxpak(void)
|
||||
|
||||
switch(file->status)
|
||||
{
|
||||
case FS_NOTFOUND:
|
||||
s = "FS_NOTFOUND";
|
||||
break;
|
||||
case FS_FOUND:
|
||||
s = "FS_FOUND";
|
||||
break;
|
||||
case FS_OPEN:
|
||||
s = "FS_OPEN";
|
||||
break;
|
||||
case FS_MD5SUMBAD:
|
||||
s = "FS_MD5SUMBAD";
|
||||
break;
|
||||
default:
|
||||
s = "unknown";
|
||||
break;
|
||||
case FS_NOTFOUND:
|
||||
s = "FS_NOTFOUND";
|
||||
break;
|
||||
case FS_FOUND:
|
||||
s = "FS_FOUND";
|
||||
break;
|
||||
case FS_OPEN:
|
||||
s = "FS_OPEN";
|
||||
break;
|
||||
case FS_MD5SUMBAD:
|
||||
s = "FS_MD5SUMBAD";
|
||||
break;
|
||||
default:
|
||||
s = "unknown";
|
||||
break;
|
||||
}
|
||||
|
||||
I_Error("Received a file not requested (file id: %d, file status: %s)\n", filenum, s);
|
||||
|
||||
@@ -984,7 +984,7 @@ void I_SleepDuration(precise_t duration)
|
||||
#endif
|
||||
}
|
||||
|
||||
static volatile sig_atomic_t g_in_exiting_signal_handler = false;
|
||||
boolean g_in_exiting_signal_handler = false;
|
||||
|
||||
static void I_PrintSignal(INT32 signal_num, boolean core_dumped, char *signal_msg)
|
||||
{
|
||||
@@ -1048,11 +1048,6 @@ static void I_ReportSignal(int num, int coredumped)
|
||||
I_OutputMsg("\nProcess killed by signal: %s\n\n", sigmsg);
|
||||
}
|
||||
|
||||
boolean I_In_Exiting_Signal_Handler(void)
|
||||
{
|
||||
return g_in_exiting_signal_handler;
|
||||
}
|
||||
|
||||
#ifndef NEWSIGNALHANDLER
|
||||
FUNCNORETURN static ATTRNORETURN void signal_handler(INT32 num)
|
||||
{
|
||||
@@ -1072,17 +1067,11 @@ FUNCNORETURN static ATTRNORETURN void signal_handler(INT32 num)
|
||||
}
|
||||
#endif
|
||||
|
||||
static volatile sig_atomic_t interrupted = 0;
|
||||
|
||||
boolean I_Interrupted(void)
|
||||
FUNCNORETURN static ATTRNORETURN void quit_handler(int num)
|
||||
{
|
||||
return interrupted;
|
||||
}
|
||||
|
||||
static void quit_handler(int num)
|
||||
{
|
||||
(void)num;
|
||||
interrupted = 1;
|
||||
signal(num, SIG_DFL); //default signal action
|
||||
raise(num);
|
||||
I_Quit();
|
||||
}
|
||||
|
||||
#ifdef HAVE_LIBBACKTRACE
|
||||
|
||||
+2
-2
@@ -173,7 +173,7 @@ FUNCPRINTF static void deh_warning(const char *first, ...)
|
||||
vsnprintf(buf, 1000, first, argptr); // sizeof only returned 4 here. it didn't like that pointer.
|
||||
va_end(argptr);
|
||||
|
||||
if (dbg_line == -1) // Not in a SOC, line number unknown.
|
||||
if(dbg_line == -1) // Not in a SOC, line number unknown.
|
||||
CONS_Alert(CONS_WARNING, "%s\n", buf);
|
||||
else
|
||||
CONS_Alert(CONS_WARNING, "Line %u: %s\n", dbg_line, buf);
|
||||
@@ -8545,7 +8545,7 @@ static inline int lib_action(lua_State *L)
|
||||
|
||||
// Hardcoded A_Action name to call for super() or NULL if super() would be invalid.
|
||||
// Set in lua_infolib.
|
||||
const char *superactions[MAXRECURSION] = {};
|
||||
const char *superactions[MAXRECURSION];
|
||||
UINT8 superstack = 0;
|
||||
|
||||
static int lib_dummysuper(lua_State *L)
|
||||
|
||||
+3
-1
@@ -1172,7 +1172,9 @@ void F_StartWaitingPlayers(void)
|
||||
randskin = M_RandomKey(numskins);
|
||||
boolean waithires = skins[randskin].flags && SF_HIRES;
|
||||
|
||||
Z_Free(waitcolormap);
|
||||
if (waitcolormap)
|
||||
Z_Free(waitcolormap);
|
||||
|
||||
waitcolormap = R_GetTranslationColormap(randskin, skins[randskin].prefcolor, 0);
|
||||
|
||||
if (waithires)
|
||||
|
||||
+8
-6
@@ -317,7 +317,8 @@ void closefilemenu(boolean validsize)
|
||||
coredirmenu = NULL;
|
||||
}
|
||||
|
||||
Z_Free(refreshdirname);
|
||||
if (refreshdirname)
|
||||
Z_Free(refreshdirname);
|
||||
refreshdirname = NULL;
|
||||
}
|
||||
|
||||
@@ -345,7 +346,8 @@ void searchfilemenu(char *tempname)
|
||||
|
||||
if (!menusearch.length)
|
||||
{
|
||||
Z_Free(dirmenu);
|
||||
if (dirmenu)
|
||||
Z_Free(dirmenu);
|
||||
dirmenu = coredirmenu;
|
||||
sizedirmenu = sizecoredirmenu;
|
||||
|
||||
@@ -387,8 +389,8 @@ void searchfilemenu(char *tempname)
|
||||
I_Error("searchfilemenu(): could not create \"No results...\".");
|
||||
sizedirmenu = 1;
|
||||
dir_on[menudepthleft] = 0;
|
||||
Z_Free(tempname);
|
||||
|
||||
if (tempname)
|
||||
Z_Free(tempname);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -503,8 +505,8 @@ boolean preparefilemenu(boolean samedepth, boolean replayhut)
|
||||
{
|
||||
closedir(dirhandle);
|
||||
closefilemenu(false);
|
||||
Z_Free(tempname);
|
||||
|
||||
if (tempname)
|
||||
Z_Free(tempname);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -2605,7 +2605,7 @@ void G_DoPlayDemo(char *defdemoname)
|
||||
boolean skiperrors = false;
|
||||
#endif
|
||||
boolean spectator;
|
||||
UINT8 slots[MAXPLAYERS] = {}, kartspeed[MAXPLAYERS] = {}, kartweight[MAXPLAYERS] = {}, numslots = 0;
|
||||
UINT8 slots[MAXPLAYERS], kartspeed[MAXPLAYERS], kartweight[MAXPLAYERS], numslots = 0;
|
||||
|
||||
G_InitDemoRewind();
|
||||
|
||||
|
||||
+9
-3
@@ -69,6 +69,9 @@ UINT8 botcolor = 0;
|
||||
|
||||
JoyType_t Joystick[MAXSPLITSCREENPLAYERS] = {};
|
||||
|
||||
// 1024 bytes is plenty for a savegame
|
||||
#define SAVEGAMESIZE (1024)
|
||||
|
||||
// SRB2kart
|
||||
char gamedatafilename[64] = "kartdata.dat";
|
||||
char timeattackfolder[64] = "kart";
|
||||
@@ -520,8 +523,11 @@ void G_ClearRecords(void)
|
||||
INT16 i;
|
||||
for (i = 0; i < NUMMAPS; ++i)
|
||||
{
|
||||
Z_Free(mainrecords[i]);
|
||||
mainrecords[i] = NULL;
|
||||
if (mainrecords[i])
|
||||
{
|
||||
Z_Free(mainrecords[i]);
|
||||
mainrecords[i] = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3899,7 +3905,7 @@ void G_SaveGame(UINT32 savegameslot)
|
||||
char name[VERSIONSIZE];
|
||||
size_t length;
|
||||
|
||||
save.p = save.buffer = (UINT8 *)Z_Malloc(1024, PU_STATIC, NULL); // 1024 bytes is plenty for a savegame
|
||||
save.p = save.buffer = (UINT8 *)Z_Malloc(SAVEGAMESIZE, PU_STATIC, NULL);
|
||||
if (!save.p)
|
||||
{
|
||||
CONS_Alert(CONS_ERROR, M_GetText("No more free memory for saving game data\n"));
|
||||
|
||||
@@ -1378,7 +1378,8 @@ void HWR_ProcessSeg(void) // Sort of like GLWall::Process in GZDoom
|
||||
|
||||
FSurfaceInfo Surf;
|
||||
|
||||
Surf.PolyColor.s.alpha = 255;
|
||||
if (gl_frontsector)
|
||||
Surf.PolyColor.s.alpha = 255;
|
||||
|
||||
const INT32 gl_midtexture = R_GetTextureNum(gl_sidedef->midtexture);
|
||||
GLMapTexture_t *glTex = NULL;
|
||||
|
||||
+16
-9
@@ -693,15 +693,17 @@ static void HWR_CreateBlendedTexture(patch_t *gpatch, patch_t *blendgpatch, GLMi
|
||||
GLPatch_t *hwrBlendPatch = blendgpatch->hardware;
|
||||
UINT16 w = gpatch->width, h = gpatch->height;
|
||||
UINT32 size = w*h;
|
||||
RGBA_t *image, *blendimage, *cur;
|
||||
RGBA_t blendcolor = {};
|
||||
RGBA_t *image, *blendimage, *cur, blendcolor;
|
||||
RGBA_t *palette = HWR_GetTexturePalette();
|
||||
UINT8 translation[17] = {}; // First the color index
|
||||
UINT8 cutoff[17] = {}; // Brightness cutoff before using the next color
|
||||
UINT8 translation[17]; // First the color index
|
||||
UINT8 cutoff[17]; // Brightness cutoff before using the next color
|
||||
UINT8 translen = 0;
|
||||
UINT8 i;
|
||||
UINT8 colorbrightnesses[17] = {};
|
||||
UINT8 color_match_lookup[256] = {}; // optimization attempt
|
||||
UINT8 colorbrightnesses[17];
|
||||
UINT8 color_match_lookup[256]; // optimization attempt
|
||||
|
||||
memset(translation, 0, sizeof(translation));
|
||||
memset(cutoff, 0, sizeof(cutoff));
|
||||
|
||||
if (glMipmap->width == 0)
|
||||
{
|
||||
@@ -714,10 +716,14 @@ static void HWR_CreateBlendedTexture(patch_t *gpatch, patch_t *blendgpatch, GLMi
|
||||
glMipmap->format = GL_TEXFMT_RGBA;
|
||||
}
|
||||
|
||||
Z_Free(glMipmap->data);
|
||||
glMipmap->data = NULL;
|
||||
if (glMipmap->data)
|
||||
{
|
||||
Z_Free(glMipmap->data);
|
||||
glMipmap->data = NULL;
|
||||
}
|
||||
|
||||
cur = Z_Calloc(size*4, PU_HWRMODELTEXTURE, &glMipmap->data);
|
||||
cur = Z_Malloc(size*4, PU_HWRMODELTEXTURE, &glMipmap->data);
|
||||
memset(cur, 0x00, size*4);
|
||||
|
||||
image = hwrPatch->mipmap->data;
|
||||
blendimage = hwrBlendPatch->mipmap->data;
|
||||
@@ -1031,6 +1037,7 @@ static void HWR_GetBlendedTexture(patch_t *patch, patch_t *blendgpatch, INT32 sk
|
||||
GLPatch_t *glPatch = patch->hardware;
|
||||
GLMipmap_t *glMipmap, *newMipmap;
|
||||
|
||||
|
||||
if (blendgpatch == NULL || colormap == colormaps || colormap == NULL)
|
||||
{
|
||||
// Don't do any blending
|
||||
|
||||
+1
-3
@@ -225,10 +225,9 @@ HMS_connect (const char *format, ...)
|
||||
{
|
||||
cc = curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
|
||||
if (cc != CURLE_OK) I_OutputMsg("libcurl: %s\n", buffer->errbuf);
|
||||
#ifdef LOGMESSAGES
|
||||
|
||||
cc = curl_easy_setopt(curl, CURLOPT_STDERR, logstream);
|
||||
if (cc != CURLE_OK) I_OutputMsg("libcurl: %s\n", buffer->errbuf);
|
||||
#endif
|
||||
}
|
||||
|
||||
if (M_CheckParm("-bindaddr") && M_IsNextParm())
|
||||
@@ -318,7 +317,6 @@ static void
|
||||
HMS_end (struct HMS_buffer *buffer)
|
||||
{
|
||||
curl_easy_cleanup(buffer->curl);
|
||||
free(buffer->errbuf);
|
||||
free(buffer->buffer);
|
||||
free(buffer);
|
||||
}
|
||||
|
||||
+8
-7
@@ -497,9 +497,7 @@ static void HU_removeChatText_Log(void)
|
||||
{
|
||||
chat_log[i] = chat_log[i+1];
|
||||
}
|
||||
|
||||
chat_nummsg_log--; // lost 1 msg.
|
||||
chat_log[chat_nummsg_log] = NULL;
|
||||
}
|
||||
|
||||
static void Chatlogsize_OnChange(void)
|
||||
@@ -518,7 +516,6 @@ static void Chatlogsize_OnChange(void)
|
||||
if (new_chat_log == NULL)
|
||||
{
|
||||
free(chat_log);
|
||||
chat_log = NULL;
|
||||
return;
|
||||
}
|
||||
chat_log = new_chat_log;
|
||||
@@ -1075,7 +1072,8 @@ static void Got_Saycmd(const UINT8 **p, INT32 playernum)
|
||||
|
||||
HU_AddChatText(va(fmt2, prefix, cstart, dispname, textcolor, msg), cv_chatnotifications.value); // add to chat
|
||||
|
||||
Z_Free(tempchar);
|
||||
if (tempchar)
|
||||
Z_Free(tempchar);
|
||||
}
|
||||
#ifdef _DEBUG
|
||||
// I just want to point out while I'm here that because the data is still
|
||||
@@ -1571,7 +1569,8 @@ static void HU_drawMiniChat(void)
|
||||
dy = 0;
|
||||
dx = 0;
|
||||
msglines += linescount+1;
|
||||
Z_Free(msg);
|
||||
if (msg)
|
||||
Z_Free(msg);
|
||||
}
|
||||
|
||||
y = chaty - charheight*(msglines+1);
|
||||
@@ -1658,7 +1657,8 @@ static void HU_drawMiniChat(void)
|
||||
|
||||
dy += charheight;
|
||||
dx = 0;
|
||||
Z_Free(msg);
|
||||
if (msg)
|
||||
Z_Free(msg);
|
||||
}
|
||||
|
||||
// decrement addy and make that shit smooth:
|
||||
@@ -1767,7 +1767,8 @@ static void HU_drawChatLog(INT32 offset)
|
||||
|
||||
dy += charheight;
|
||||
dx = 0;
|
||||
Z_Free(msg);
|
||||
if (msg)
|
||||
Z_Free(msg);
|
||||
}
|
||||
|
||||
if (((chat_scroll >= chat_maxscroll) || (chat_scrollmedown)) && !(justscrolleddown || justscrolledup || chat_scrolltime)) // was already at the bottom of the page before new maxscroll calculation and was NOT scrolling.
|
||||
|
||||
+1
-5
@@ -43,7 +43,7 @@ extern UINT8 graphics_started;
|
||||
extern UINT8 keyboard_started;
|
||||
|
||||
/** \brief Set to true when inside a signal handler that will exit the program. */
|
||||
boolean I_In_Exiting_Signal_Handler(void);
|
||||
extern boolean g_in_exiting_signal_handler;
|
||||
|
||||
/** \brief The I_GetFreeMem function
|
||||
|
||||
@@ -195,10 +195,6 @@ INT32 I_StartupSystem(void);
|
||||
*/
|
||||
void I_ShutdownSystem(void);
|
||||
|
||||
/** \brief To check if a Interrupt or Terminate Signal was fired
|
||||
*/
|
||||
boolean I_Interrupted(void);
|
||||
|
||||
/** \brief The I_GetDiskFreeSpace function
|
||||
|
||||
\param freespace a INT64 pointer to hold the free space amount
|
||||
|
||||
+17
-13
@@ -496,10 +496,8 @@ static void cleanupnodes(void)
|
||||
|
||||
// Why can't I start at zero?
|
||||
for (j = 1; j < MAXNETNODES; j++)
|
||||
{
|
||||
if (!(nodeingame[j] || SV_SendingFile(j)))
|
||||
nodeconnected[j] = false;
|
||||
}
|
||||
}
|
||||
|
||||
static SINT8 getfreenode(void)
|
||||
@@ -509,13 +507,11 @@ static SINT8 getfreenode(void)
|
||||
cleanupnodes();
|
||||
|
||||
for (j = 0; j < MAXNETNODES; j++)
|
||||
{
|
||||
if (!nodeconnected[j])
|
||||
{
|
||||
nodeconnected[j] = true;
|
||||
return j;
|
||||
}
|
||||
}
|
||||
|
||||
/** \warning No free node? Just in case a node might not have been freed properly,
|
||||
* look if there are connected nodes that aren't in game, and forget them.
|
||||
@@ -816,7 +812,7 @@ static void SOCK_Send(void)
|
||||
static void SOCK_FreeNodenum(INT32 numnode)
|
||||
{
|
||||
// can't disconnect from self :)
|
||||
if (numnode <= 0 || numnode > MAXNETNODES)
|
||||
if (!numnode || numnode > MAXNETNODES)
|
||||
return;
|
||||
|
||||
DEBFILE(va("Free node %d (%s)\n", numnode, SOCK_GetNodeAddress(numnode)));
|
||||
@@ -1436,12 +1432,14 @@ static void SOCK_RegisterHolePunch(void)
|
||||
|
||||
static boolean SOCK_OpenSocket(void)
|
||||
{
|
||||
memset(clientaddress, 0, sizeof(clientaddress));
|
||||
size_t i;
|
||||
|
||||
memset(clientaddress, 0, sizeof (clientaddress));
|
||||
|
||||
memset(nodeconnected, false, sizeof(nodeconnected));
|
||||
nodeconnected[0] = true; // always connected to self
|
||||
for (i = 1; i < MAXNETNODES; i++)
|
||||
nodeconnected[i] = false;
|
||||
nodeconnected[BROADCASTADDR] = true;
|
||||
|
||||
I_NetSend = SOCK_Send;
|
||||
I_NetGet = SOCK_Get;
|
||||
I_NetCloseSocket = SOCK_CloseSocket;
|
||||
@@ -1481,7 +1479,7 @@ static boolean SOCK_Ban(INT32 node)
|
||||
{
|
||||
INT32 ban;
|
||||
|
||||
if (node < 0 || node > MAXNETNODES)
|
||||
if (node > MAXNETNODES)
|
||||
return false;
|
||||
|
||||
ban = numbans;
|
||||
@@ -1512,8 +1510,11 @@ static boolean SOCK_SetBanUsername(const char *username)
|
||||
username = "Direct IP ban";
|
||||
}
|
||||
|
||||
Z_Free(banned[numbans - 1].username);
|
||||
banned[numbans - 1].username = NULL;
|
||||
if (banned[numbans - 1].username)
|
||||
{
|
||||
Z_Free(banned[numbans - 1].username);
|
||||
banned[numbans - 1].username = NULL;
|
||||
}
|
||||
|
||||
banned[numbans - 1].username = Z_StrDup(username);
|
||||
|
||||
@@ -1527,8 +1528,11 @@ static boolean SOCK_SetBanReason(const char *reason)
|
||||
reason = "No reason given";
|
||||
}
|
||||
|
||||
Z_Free(banned[numbans - 1].reason);
|
||||
banned[numbans - 1].reason = NULL;
|
||||
if (banned[numbans - 1].reason)
|
||||
{
|
||||
Z_Free(banned[numbans - 1].reason);
|
||||
banned[numbans - 1].reason = NULL;
|
||||
}
|
||||
|
||||
banned[numbans - 1].reason = Z_StrDup(reason);
|
||||
|
||||
|
||||
+20
-35
@@ -931,21 +931,21 @@ const char *K_GetItemPatch(UINT8 item, boolean tiny)
|
||||
|
||||
//}
|
||||
|
||||
static INT32 ITEM_X, ITEM_Y; // Item Window
|
||||
static INT32 TIME_X, TIME_Y; // Time Sticker
|
||||
static INT32 LAPS_X, LAPS_Y; // Lap Sticker
|
||||
static INT32 SPDM_X, SPDM_Y; // Speedometer
|
||||
static INT32 POSI_X, POSI_Y; // Position Number
|
||||
static INT32 FACE_X, FACE_Y; // Top-four Faces
|
||||
static INT32 STCD_X, STCD_Y; // Starting countdown
|
||||
static INT32 CHEK_Y; // CHECK graphic
|
||||
static INT32 MINI_X, MINI_Y; // Minimap
|
||||
static INT32 WANT_X, WANT_Y; // Battle WANTED poster
|
||||
INT32 ITEM_X, ITEM_Y; // Item Window
|
||||
INT32 TIME_X, TIME_Y; // Time Sticker
|
||||
INT32 LAPS_X, LAPS_Y; // Lap Sticker
|
||||
INT32 SPDM_X, SPDM_Y; // Speedometer
|
||||
INT32 POSI_X, POSI_Y; // Position Number
|
||||
INT32 FACE_X, FACE_Y; // Top-four Faces
|
||||
INT32 STCD_X, STCD_Y; // Starting countdown
|
||||
INT32 CHEK_Y; // CHECK graphic
|
||||
INT32 MINI_X, MINI_Y; // Minimap
|
||||
INT32 WANT_X, WANT_Y; // Battle WANTED poster
|
||||
|
||||
// This is for the P2 and P4 side of splitscreen. Then we'll flip P1's and P2's to the bottom with V_SPLITSCREEN.
|
||||
static INT32 ITEM2_X, ITEM2_Y;
|
||||
static INT32 LAPS2_X, LAPS2_Y;
|
||||
static INT32 POSI2_X, POSI2_Y;
|
||||
INT32 ITEM2_X, ITEM2_Y;
|
||||
INT32 LAPS2_X, LAPS2_Y;
|
||||
INT32 POSI2_X, POSI2_Y;
|
||||
|
||||
static void K_initKartHUD(void)
|
||||
{
|
||||
@@ -1415,6 +1415,8 @@ static void K_drawKartStats(void)
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
spdoffset = 0;
|
||||
|
||||
if (G_BattleGametype() && ((speedostyle != SPEEDO_DIAL) || splitscreen))
|
||||
spdoffset += ((stplyr->kartstuff[k_bumper] ? -5 : -8));
|
||||
@@ -3816,7 +3818,7 @@ static void K_drawKartMinimap(void)
|
||||
|
||||
if (cv_showminimapangle.value && (minidoticon || minilighticon) && !playertimedout)
|
||||
{
|
||||
UINT8 *colormap = NULL;
|
||||
UINT8 *colormap;
|
||||
drawinfo_t dims;
|
||||
fixed_t interpx, interpy;
|
||||
fixed_t xoff = 0, yoff = 0;
|
||||
@@ -3827,27 +3829,10 @@ static void K_drawKartMinimap(void)
|
||||
if (encoremode)
|
||||
ang = ANGLE_180 - ang;
|
||||
|
||||
if (mobj->color)
|
||||
{
|
||||
if (mobj->colorized)
|
||||
{
|
||||
colormap = R_GetTranslationColormap(TC_RAINBOW, mobj->color, GTC_CACHE);
|
||||
}
|
||||
else
|
||||
{
|
||||
const INT32 skinnum = K_GetMobjLocalSkinNum(mobj->skin, mobj->localskin, mobj->skinlocal);
|
||||
|
||||
// special case if startcolor is not the default (160 / Green)
|
||||
if (skinnum && skins[skinnum].starttranscolor != skins[0].starttranscolor)
|
||||
{
|
||||
colormap = R_GetTranslationColormap(TC_DEFAULT, mobj->color, GTC_CACHE);
|
||||
}
|
||||
else
|
||||
{
|
||||
colormap = R_GetLocalTranslationColormap(mobj->skin, mobj->localskin, mobj->color, GTC_CACHE, mobj->skinlocal);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (mobj->colorized)
|
||||
colormap = R_GetTranslationColormap(TC_RAINBOW, mobj->color, GTC_CACHE);
|
||||
else
|
||||
colormap = R_GetLocalTranslationColormap(mobj->skin, mobj->localskin, mobj->color, GTC_CACHE, mobj->skinlocal);
|
||||
|
||||
interpx = lerp(mobj->old_x, mobj->x);
|
||||
interpy = lerp(mobj->old_y, mobj->y);
|
||||
|
||||
+2
-10
@@ -660,22 +660,13 @@ INT32 K_GetSkinNum(player_t *player)
|
||||
|
||||
//
|
||||
// returns the mobj skinnumber
|
||||
// accounts for localskins ?
|
||||
// accounts for localskins
|
||||
//
|
||||
INT32 K_GetMobjSkinNum(const skin_t *skin, boolean local)
|
||||
{
|
||||
return skin - K_GetSkinArray(local);
|
||||
}
|
||||
|
||||
//
|
||||
// returns the mobj skinnumber
|
||||
// accounts for localskins
|
||||
//
|
||||
INT32 K_GetMobjLocalSkinNum(const skin_t *skin, const skin_t *localskin, boolean local)
|
||||
{
|
||||
return localskin ? (localskin - K_GetSkinArray(local)) : (skin - skins);
|
||||
}
|
||||
|
||||
//
|
||||
// returns the players skinnumber
|
||||
// accounts for localskins
|
||||
@@ -1489,6 +1480,7 @@ void K_KartBouncing(mobj_t *mobj1, mobj_t *mobj2, boolean bounce, boolean solid)
|
||||
fixed_t nx = FixedDiv(distx, dist);
|
||||
fixed_t ny = FixedDiv(disty, dist);
|
||||
|
||||
dist = dist ? dist : 1;
|
||||
distx = FixedMul(mobj1->radius+mobj2->radius, nx);
|
||||
disty = FixedMul(mobj1->radius+mobj2->radius, ny);
|
||||
|
||||
|
||||
+2
-1
@@ -99,7 +99,8 @@ void K_EraseStats(void)
|
||||
// The only field we want to remember
|
||||
boolean vanilla = kartstats.vanilla;
|
||||
|
||||
Z_Free(kartstats.copy);
|
||||
if (kartstats.copy)
|
||||
Z_Free(kartstats.copy);
|
||||
|
||||
memset(&kartstats, 0, sizeof(kartstats_t));
|
||||
|
||||
|
||||
+22
-22
@@ -615,7 +615,7 @@ FUNCINLINE static ATTRINLINE void res_hud(Hook_State *hook)
|
||||
|
||||
int LUA_HookMobj(mobj_t *mobj, int hook_type)
|
||||
{
|
||||
Hook_State hook = {};
|
||||
Hook_State hook;
|
||||
if (prepare_mobj_hook(&hook, false, hook_type, mobj))
|
||||
{
|
||||
LUA_PushUserdata(gL, mobj, META_MOBJ);
|
||||
@@ -626,7 +626,7 @@ int LUA_HookMobj(mobj_t *mobj, int hook_type)
|
||||
|
||||
int LUA_Hook2Mobj(mobj_t *t1, mobj_t *t2, int hook_type)
|
||||
{
|
||||
Hook_State hook = {};
|
||||
Hook_State hook;
|
||||
if (prepare_mobj_hook(&hook, 0, hook_type, t1))
|
||||
{
|
||||
LUA_PushUserdata(gL, t1, META_MOBJ);
|
||||
@@ -638,14 +638,14 @@ int LUA_Hook2Mobj(mobj_t *t1, mobj_t *t2, int hook_type)
|
||||
|
||||
void LUA_HookVoid(int type)
|
||||
{
|
||||
Hook_State hook = {};
|
||||
Hook_State hook;
|
||||
if (prepare_hook(&hook, 0, type))
|
||||
call_hooks(&hook, 0, res_none);
|
||||
}
|
||||
|
||||
void LUA_HookInt(INT32 number, int hook_type)
|
||||
{
|
||||
Hook_State hook = {};
|
||||
Hook_State hook;
|
||||
if (prepare_hook(&hook, 0, hook_type))
|
||||
{
|
||||
lua_pushinteger(gL, number);
|
||||
@@ -655,7 +655,7 @@ void LUA_HookInt(INT32 number, int hook_type)
|
||||
|
||||
/*void LUA_HookBool(boolean value, int hook_type)
|
||||
{
|
||||
Hook_State hook = {};
|
||||
Hook_State hook;
|
||||
if (prepare_hook(&hook, 0, hook_type))
|
||||
{
|
||||
//lua_pushboolean(gL, value);
|
||||
@@ -665,7 +665,7 @@ void LUA_HookInt(INT32 number, int hook_type)
|
||||
|
||||
int LUA_HookPlayer(player_t *player, int hook_type)
|
||||
{
|
||||
Hook_State hook = {};
|
||||
Hook_State hook;
|
||||
if (prepare_hook(&hook, false, hook_type))
|
||||
{
|
||||
LUA_PushUserdata(gL, player, META_PLAYER);
|
||||
@@ -676,7 +676,7 @@ int LUA_HookPlayer(player_t *player, int hook_type)
|
||||
|
||||
int LUA_HookTiccmd(player_t *player, ticcmd_t *cmd, int hook_type)
|
||||
{
|
||||
Hook_State hook = {};
|
||||
Hook_State hook;
|
||||
if (prepare_hook(&hook, false, hook_type))
|
||||
{
|
||||
LUA_PushUserdata(gL, player, META_PLAYER);
|
||||
@@ -695,7 +695,7 @@ int LUA_HookTiccmd(player_t *player, ticcmd_t *cmd, int hook_type)
|
||||
|
||||
void LUA_HookHUD(int hook_type, huddrawlist_h list)
|
||||
{
|
||||
Hook_State hook = {};
|
||||
Hook_State hook;
|
||||
if (prepare_hud_hook(&hook, hook_type))
|
||||
{
|
||||
LUA_SetHudHook(hook_type, list);
|
||||
@@ -723,7 +723,7 @@ static void hook_think_frame(int type)
|
||||
int hook_index = 0;
|
||||
precise_t time_taken = 0;
|
||||
|
||||
Hook_State hook = {};
|
||||
Hook_State hook;
|
||||
|
||||
const hook_t * map = &hookIds[type];
|
||||
int k;
|
||||
@@ -783,7 +783,7 @@ void LUA_HookPostThinkFrame(void)
|
||||
|
||||
int LUA_HookTouchSpecial(mobj_t *special, mobj_t *toucher)
|
||||
{
|
||||
Hook_State hook = {};
|
||||
Hook_State hook;
|
||||
if (prepare_mobj_hook(&hook, false, MOBJ_HOOK(TouchSpecial), special))
|
||||
{
|
||||
LUA_PushUserdata(gL, special, META_MOBJ);
|
||||
@@ -802,7 +802,7 @@ static int damage_hook
|
||||
int hook_type,
|
||||
Hook_Callback results_handler
|
||||
){
|
||||
Hook_State hook = {};
|
||||
Hook_State hook;
|
||||
if (prepare_mobj_hook(&hook, 0, hook_type, target))
|
||||
{
|
||||
LUA_PushUserdata(gL, target, META_MOBJ);
|
||||
@@ -890,8 +890,8 @@ int LUA_HookBotAI(mobj_t *sonic, mobj_t *tails, ticcmd_t *cmd)
|
||||
{
|
||||
const char *skin = ((skin_t *)tails->skin)->name;
|
||||
|
||||
Hook_State hook = {};
|
||||
BotAI_State botai = {};
|
||||
Hook_State hook;
|
||||
BotAI_State botai;
|
||||
|
||||
if (prepare_string_hook(&hook, false, STRING_HOOK(BotAI), skin))
|
||||
{
|
||||
@@ -911,7 +911,7 @@ int LUA_HookBotAI(mobj_t *sonic, mobj_t *tails, ticcmd_t *cmd)
|
||||
|
||||
void LUA_HookLinedefExecute(line_t *line, mobj_t *mo, sector_t *sector)
|
||||
{
|
||||
Hook_State hook = {};
|
||||
Hook_State hook;
|
||||
if (prepare_string_hook
|
||||
(&hook, 0, STRING_HOOK(LinedefExecute), line->text))
|
||||
{
|
||||
@@ -924,7 +924,7 @@ void LUA_HookLinedefExecute(line_t *line, mobj_t *mo, sector_t *sector)
|
||||
|
||||
int LUA_HookPlayerMsg(int source, int target, int flags, char *msg, int mute)
|
||||
{
|
||||
Hook_State hook = {};
|
||||
Hook_State hook;
|
||||
if (prepare_hook(&hook, false, HOOK(PlayerMsg)))
|
||||
{
|
||||
LUA_PushUserdata(gL, &players[source], META_PLAYER); // Source player
|
||||
@@ -953,7 +953,7 @@ int LUA_HookPlayerMsg(int source, int target, int flags, char *msg, int mute)
|
||||
|
||||
int LUA_HookHurtMsg(player_t *player, mobj_t *inflictor, mobj_t *source)
|
||||
{
|
||||
Hook_State hook = {};
|
||||
Hook_State hook;
|
||||
if (prepare_mobj_hook(&hook, false, MOBJ_HOOK(HurtMsg), inflictor))
|
||||
{
|
||||
LUA_PushUserdata(gL, player, META_PLAYER);
|
||||
@@ -967,7 +967,7 @@ int LUA_HookHurtMsg(player_t *player, mobj_t *inflictor, mobj_t *source)
|
||||
void LUA_HookNetArchive(lua_CFunction archFunc, savebuffer_t *save)
|
||||
{
|
||||
const hook_t * map = &hookIds[HOOK(NetVars)];
|
||||
Hook_State hook = {};
|
||||
Hook_State hook;
|
||||
/* this is a remarkable case where the stack isn't reset */
|
||||
if (map->numHooks > 0)
|
||||
{
|
||||
@@ -997,7 +997,7 @@ void LUA_HookNetArchive(lua_CFunction archFunc, savebuffer_t *save)
|
||||
|
||||
void LUA_HookPlayerQuit(player_t *plr, int reason)
|
||||
{
|
||||
Hook_State hook = {};
|
||||
Hook_State hook;
|
||||
if (prepare_hook(&hook, 0, HOOK(PlayerQuit)))
|
||||
{
|
||||
LUA_PushUserdata(gL, plr, META_PLAYER); // Player that quit
|
||||
@@ -1060,7 +1060,7 @@ int LUA_HookMusicChange(const char *oldname, struct MusicChange *param)
|
||||
const int type = HOOK(MusicChange);
|
||||
const hook_t * map = &hookIds[type];
|
||||
|
||||
Hook_State hook = {};
|
||||
Hook_State hook;
|
||||
|
||||
int k;
|
||||
|
||||
@@ -1096,7 +1096,7 @@ int LUA_HookMusicChange(const char *oldname, struct MusicChange *param)
|
||||
|
||||
int LUA_HookMusicCredit(musicdef_t *musicdef)
|
||||
{
|
||||
Hook_State hook = {};
|
||||
Hook_State hook;
|
||||
if (prepare_hook(&hook, 0, HOOK(MusicCredit)))
|
||||
{
|
||||
LUA_PushUserdata(gL, musicdef, META_MUSICDEF);
|
||||
@@ -1114,7 +1114,7 @@ static int kartdamage_hook
|
||||
int hook_type,
|
||||
Hook_Callback results_handler
|
||||
){
|
||||
Hook_State hook = {};
|
||||
Hook_State hook;
|
||||
if (prepare_hook(&hook, 0, hook_type))
|
||||
{
|
||||
LUA_PushUserdata(gL, player, META_PLAYER);
|
||||
@@ -1163,7 +1163,7 @@ boolean LUA_HookPlayerExplode(player_t *player, mobj_t *inflictor, mobj_t *sourc
|
||||
|
||||
void LUA_HookSetupVote(INT16 result[], INT16 maxresults, UINT8 gt, UINT8 secondgt)
|
||||
{
|
||||
Hook_State hook = {};
|
||||
Hook_State hook;
|
||||
if (prepare_hook(&hook, 0, HOOK(SetupVote)))
|
||||
{
|
||||
// { 0, 0, 0, 0, }
|
||||
|
||||
@@ -136,9 +136,18 @@ void LUA_HUD_DestroyDrawList(huddrawlist_h list)
|
||||
{
|
||||
if (list == NULL) return;
|
||||
|
||||
Z_Free(list->items);
|
||||
Z_Free(list->olditems);
|
||||
Z_Free(list->strbuf);
|
||||
if (list->items)
|
||||
{
|
||||
Z_Free(list->items);
|
||||
}
|
||||
if (list->olditems)
|
||||
{
|
||||
Z_Free(list->olditems);
|
||||
}
|
||||
if (list->strbuf)
|
||||
{
|
||||
Z_Free(list->strbuf);
|
||||
}
|
||||
Z_Free(list);
|
||||
}
|
||||
|
||||
|
||||
+7
-4
@@ -556,7 +556,7 @@ static void GIF_framewrite(void)
|
||||
}
|
||||
else if (gif_dynamicdelay ==(UINT8) 1)
|
||||
{
|
||||
float delayf = ceilf(100.0f/NEWTICRATE);
|
||||
float delayf = ceil(100.0f/NEWTICRATE);
|
||||
|
||||
delay = (UINT16)((I_GetPreciseTime() - gif_prevframetime)) / (I_GetPrecisePrecision() / 1000000) /10/1000;
|
||||
|
||||
@@ -695,13 +695,16 @@ INT32 GIF_close(void)
|
||||
fclose(gif_out);
|
||||
gif_out = NULL;
|
||||
|
||||
Z_Free(gifbwr_buf);
|
||||
if (gifbwr_buf)
|
||||
Z_Free(gifbwr_buf);
|
||||
gifbwr_buf = gifbwr_cur = NULL;
|
||||
|
||||
Z_Free(gifframe_data);
|
||||
if (gifframe_data)
|
||||
Z_Free(gifframe_data);
|
||||
gifframe_data = NULL;
|
||||
|
||||
Z_Free(giflzw_hashTable);
|
||||
if (giflzw_hashTable)
|
||||
Z_Free(giflzw_hashTable);
|
||||
giflzw_hashTable = NULL;
|
||||
|
||||
Z_Free(scrbuf_screens);
|
||||
|
||||
+6
-3
@@ -248,9 +248,12 @@ void M_AddRawCondition(UINT8 set, UINT8 id, conditiontype_t c, INT32 r, INT16 x1
|
||||
|
||||
void M_ClearConditionSet(UINT8 set)
|
||||
{
|
||||
Z_Free(conditionSets[set - 1].condition);
|
||||
conditionSets[set - 1].condition = NULL;
|
||||
conditionSets[set - 1].numconditions = 0;
|
||||
if (conditionSets[set - 1].numconditions)
|
||||
{
|
||||
Z_Free(conditionSets[set - 1].condition);
|
||||
conditionSets[set - 1].condition = NULL;
|
||||
conditionSets[set - 1].numconditions = 0;
|
||||
}
|
||||
conditionSets[set - 1].achieved = false;
|
||||
}
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
#include "doomtype.h"
|
||||
|
||||
#ifdef __GNUC__
|
||||
#include <stdlib.h>
|
||||
#endif
|
||||
@@ -71,6 +72,14 @@ FUNCMATH FUNCINLINE static ATTRINLINE fixed_t DoubleToFixed(double f)
|
||||
#define FIXED_TO_FLOAT(x) FixedToFloat(x) // (((float)(x)) / ((float)FRACUNIT))
|
||||
#define FLOAT_TO_FIXED(f) FloatToFixed(f) // (fixed_t)((f) * ((float)FRACUNIT))
|
||||
|
||||
FUNCMATH FUNCINLINE static ATTRINLINE fixed_t FixedClamp(INT64 val)
|
||||
{
|
||||
// stoopid includes
|
||||
#define FCLAMP(x, y, z) ((x) < (y) ? (y) : ((x) > (z) ? (z) : (x)))
|
||||
return (fixed_t)(FCLAMP(val, (INT64)INT32_MIN, (INT64)INT32_MAX));
|
||||
#undef FCLAMP
|
||||
}
|
||||
|
||||
/** \brief The FixedMul function
|
||||
|
||||
\param a fixed_t number
|
||||
|
||||
+21
-16
@@ -2936,7 +2936,7 @@ static void M_PrepareLevelSelect(void)
|
||||
boolean M_CanShowLevelInList(INT32 mapnum, INT32 gt)
|
||||
{
|
||||
// invalid mapnum
|
||||
if (mapnum < -1 || mapnum >= NUMMAPS)
|
||||
if (mapnum < -1)
|
||||
return false;
|
||||
|
||||
// Random map!
|
||||
@@ -4016,16 +4016,16 @@ boolean replaynamesloaded = false;
|
||||
#ifdef HAVE_THREADS
|
||||
I_mutex replayquerymutex;
|
||||
|
||||
// I_In_Exiting_Signal_Handler is an evil hack
|
||||
// g_in_exiting_signal_handler is an evil hack
|
||||
// to avoid infinite SIGABRT recursion in the signal handler
|
||||
// due to poisoned locks or mach-o kernel not supporting locks in signals
|
||||
// or something like that. idk
|
||||
# define Lock_search_state() if (!I_In_Exiting_Signal_Handler()) { I_LockMutex(&replayquerymutex); }
|
||||
# define Unlock_search_state() if (!I_In_Exiting_Signal_Handler()) { I_UnlockMutex(replayquerymutex); }
|
||||
#else /*HAVE_THREADS*/
|
||||
# define Lock_search_state() if (!g_in_exiting_signal_handler) { I_lock_mutex(&replayquerymutex); }
|
||||
# define Unlock_search_state() if (!g_in_exiting_signal_handler) { I_unlock_mutex(replayquerymutex); }
|
||||
#else/*HAVE_THREADS*/
|
||||
# define Lock_search_state()
|
||||
# define Unlock_search_state()
|
||||
#endif /*HAVE_THREADS*/
|
||||
#endif/*HAVE_THREADS*/
|
||||
|
||||
|
||||
#define MAXREPLAYQUERY 37
|
||||
@@ -5356,7 +5356,7 @@ void M_PopupMasterServerRules(void)
|
||||
{
|
||||
firstDismissedRulesThisBoot = false;
|
||||
M_StartMessage(va("%s\n(press any key)", rules), NULL, MM_NOTHING);
|
||||
free(rules);
|
||||
Z_Free(rules);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -5522,6 +5522,7 @@ static void M_DrawChecklist(void)
|
||||
|
||||
if (conditionSets[unlockables[i].conditionset - 1].numconditions)
|
||||
{
|
||||
c = 0;
|
||||
lastid = -1;
|
||||
|
||||
for (c = 0; c < conditionSets[unlockables[i].conditionset - 1].numconditions; c++)
|
||||
@@ -5681,6 +5682,9 @@ static void M_DrawMusicTest(void)
|
||||
{
|
||||
INT32 x, y, i;
|
||||
|
||||
x = 90<<FRACBITS;
|
||||
y = (BASEVIDHEIGHT-32)<<FRACBITS;
|
||||
|
||||
y = (BASEVIDWIDTH-vid.scaledwidth)/2;
|
||||
|
||||
V_DrawFill(y-1, 20, vid.scaledwidth+1, 24, 239);
|
||||
@@ -6556,22 +6560,17 @@ static void M_EraseGuest(INT32 choice)
|
||||
|
||||
static void M_OverwriteGuest(const char *which)
|
||||
{
|
||||
char *rguest;
|
||||
char *rguest = Z_StrDup(va("%s"PATHSEP"replay"PATHSEP"%s"PATHSEP"%s-guest.lmp", srb2home, timeattackfolder, G_BuildMapName(cv_nextmap.value)));
|
||||
UINT8 *buf;
|
||||
size_t len;
|
||||
len = FIL_ReadFile(va("%s"PATHSEP"replay"PATHSEP"%s"PATHSEP"%s-%s-%s.lmp", srb2home, timeattackfolder, G_BuildMapName(cv_nextmap.value), cv_chooseskin.string, which), &buf);
|
||||
|
||||
if (!len)
|
||||
if (!len) {
|
||||
return;
|
||||
|
||||
rguest = Z_StrDup(va("%s"PATHSEP"replay"PATHSEP"%s"PATHSEP"%s-guest.lmp", srb2home, timeattackfolder, G_BuildMapName(cv_nextmap.value)));
|
||||
|
||||
if (FIL_FileExists(rguest))
|
||||
{
|
||||
}
|
||||
if (FIL_FileExists(rguest)) {
|
||||
M_StopMessage(0);
|
||||
remove(rguest);
|
||||
}
|
||||
|
||||
FIL_WriteFile(rguest, buf, len);
|
||||
Z_Free(rguest);
|
||||
|
||||
@@ -7588,6 +7587,7 @@ static void M_DrawLevelSelectOnly(boolean leftfade, boolean rightfade)
|
||||
|
||||
static void M_DrawServerMenu(void)
|
||||
{
|
||||
|
||||
M_DrawLevelSelectOnly(false, false);
|
||||
#ifdef MASTERSERVER
|
||||
if (currentMenu == &MP_ServerDef && cv_advertise.value) // Remind players where they're hosting.
|
||||
@@ -7996,9 +7996,14 @@ static void M_DrawSetupMultiPlayerMenu(void)
|
||||
#define GETSELECTEDSPEED (itemOn == 1 && setupm_skinselect < numskins ? skins[skinsorted[setupm_skinselect]].kartspeed : skins[setupm_fakeskin].kartspeed)
|
||||
#define GETSELECTEDWEIGHT (itemOn == 1 && setupm_skinselect < numskins ? skins[skinsorted[setupm_skinselect]].kartweight : skins[setupm_fakeskin].kartweight)
|
||||
|
||||
statoffset = 0;
|
||||
tw = V_StringWidth("Character", 0);//V_StringWidth(GETSELECTEDSKINNAME, 0);
|
||||
st = V_StringWidth(GETSELECTEDSKINNAME, 0);
|
||||
|
||||
INT32 selectedskin = (itemOn == 1 && setupm_skinselect < numskins ? skinsorted[setupm_skinselect] : setupm_fakeskin);
|
||||
speed = skins[selectedskin].kartspeed;
|
||||
weight = skins[selectedskin].kartweight;
|
||||
|
||||
V_DrawString((mx+(tw/2)) - (st/2), my + 37,
|
||||
((MP_PlayerSetupMenu[2].status & IT_TYPE) == IT_SPACE ? V_TRANSLUCENT : 0) | highlightflags | V_ALLOWLOWERCASE,
|
||||
GETSELECTEDSKINNAME);
|
||||
|
||||
+20
-13
@@ -986,7 +986,7 @@ static const char* OP_ExpTooltips[] =
|
||||
"Skips rendering frames if game logic takes too long\npreventing gameplay issues during performance drops.", // idk im shit as describing things
|
||||
"Different methods of scaling the votescreen backgrounds.",
|
||||
#ifdef HWRENDER
|
||||
"Disabling Screen Textures may result in a performance boost\nbut will break certain effects.\nScreen textures are required at resolutions lower than your desktop resolution!"
|
||||
"Should the game do Screen Textures? Provides a good boost to frames\nat the cost of some visual effects not working when disabled.",
|
||||
#ifdef USE_FBO_OGL
|
||||
"Allows the game to downsample from a higher resolution\nthan your display in OpenGL renderer mode.\nRequires a GPU with atleast OpenGL 2.1 support.",
|
||||
#endif
|
||||
@@ -1644,25 +1644,29 @@ static menuitem_t OP_AccessibilityMenu[] =
|
||||
|
||||
{IT_STRING|IT_CVAR, NULL, "Minimum Sector Brightness", &cv_secbright, 45},
|
||||
|
||||
{IT_STRING|IT_CVAR, NULL, "Water Surface Ripples", &cv_ripplewater, 50},
|
||||
#ifdef HWRENDER
|
||||
{IT_STRING|IT_CVAR, NULL, "Screen Textures", &cv_glscreentextures, 50},
|
||||
#endif
|
||||
|
||||
{IT_STRING|IT_CVAR, NULL, "Fade Players near Camera", &cv_playerfade, 55},
|
||||
{IT_STRING|IT_CVAR, NULL, "Water Surface Ripples", &cv_ripplewater, 55},
|
||||
|
||||
{IT_STRING|IT_CVAR, NULL, "Quake Screenshakes", &cv_screenquake, 60},
|
||||
{IT_STRING|IT_CVAR, NULL, "Fade Players near Camera", &cv_playerfade, 60},
|
||||
|
||||
{IT_CALL|IT_STRING, NULL, "Camera Options...", M_CameraMenu, 65},
|
||||
{IT_STRING|IT_CVAR, NULL, "Quake Screenshakes", &cv_screenquake, 65},
|
||||
|
||||
{IT_HEADER, NULL, "Audio", NULL, 75},
|
||||
{IT_CALL|IT_STRING, NULL, "Camera Options...", M_CameraMenu, 70},
|
||||
|
||||
{IT_STRING|IT_CVAR, NULL, "Reverse L/R Channels", &stereoreverse, 85},
|
||||
{IT_STRING|IT_CVAR, NULL, "Same Sound Limit", &cv_samesoundlimit, 90},
|
||||
{IT_HEADER, NULL, "Audio", NULL, 80},
|
||||
|
||||
{IT_HEADER, NULL, "Controls", NULL, 100},
|
||||
{IT_STRING|IT_CVAR, NULL, "Reverse L/R Channels", &stereoreverse, 90},
|
||||
{IT_STRING|IT_CVAR, NULL, "Same Sound Limit", &cv_samesoundlimit, 95},
|
||||
|
||||
{IT_STRING|IT_CVAR, NULL, "Automatic Acceleration (P1)", &cv_autoaccel[0], 110},
|
||||
{IT_STRING|IT_CVAR, NULL, "Automatic Acceleration (P2)", &cv_autoaccel[1], 115},
|
||||
{IT_STRING|IT_CVAR, NULL, "Automatic Acceleration (P3)", &cv_autoaccel[2], 120},
|
||||
{IT_STRING|IT_CVAR, NULL, "Automatic Acceleration (P4)", &cv_autoaccel[3], 125},
|
||||
{IT_HEADER, NULL, "Controls", NULL, 105},
|
||||
|
||||
{IT_STRING|IT_CVAR, NULL, "Automatic Acceleration (P1)", &cv_autoaccel[0], 115},
|
||||
{IT_STRING|IT_CVAR, NULL, "Automatic Acceleration (P2)", &cv_autoaccel[1], 120},
|
||||
{IT_STRING|IT_CVAR, NULL, "Automatic Acceleration (P3)", &cv_autoaccel[2], 125},
|
||||
{IT_STRING|IT_CVAR, NULL, "Automatic Acceleration (P4)", &cv_autoaccel[3], 130},
|
||||
};
|
||||
|
||||
static const char* OP_AccessibilityTooltips[] =
|
||||
@@ -1675,6 +1679,9 @@ static const char* OP_AccessibilityTooltips[] =
|
||||
"Reduces or disables certain effects players might be sensitive to\nSuch as flashing, flickering, certain screen effects and more.",
|
||||
"Disables the flicker effect on Midnight Channel.",
|
||||
"Sets minimum sector brightness, useful for dark areas",
|
||||
#ifdef HWRENDER
|
||||
"Disabling Screen Textures will disable the Underwater and Heat screen effects.",
|
||||
#endif
|
||||
"Toggles the ripple effect on water surfaces",
|
||||
"Fades other Players that are close to the camera in and out",
|
||||
"Toggles the screen shake effect during Earthquakes",
|
||||
|
||||
+3
-5
@@ -219,9 +219,8 @@ static void Get_masterserver_rules(boolean checkfirst)
|
||||
if (HMS_fetch_rules(rules, sizeof rules))
|
||||
{
|
||||
Lock_state();
|
||||
if (MSRules)
|
||||
free(MSRules);
|
||||
MSRules = strdup(rules);
|
||||
Z_Free(MSRules);
|
||||
MSRules = Z_StrDup(rules);
|
||||
|
||||
if (MSRegistered == true)
|
||||
{
|
||||
@@ -262,7 +261,6 @@ Finish_registration (void)
|
||||
{
|
||||
CONS_Printf("\n");
|
||||
CONS_Alert(CONS_NOTICE, "%s\n", rules);
|
||||
free(rules);
|
||||
}
|
||||
|
||||
if (registered)
|
||||
@@ -509,7 +507,7 @@ char *GetMasterServerRules(void)
|
||||
char *rules;
|
||||
|
||||
Lock_state();
|
||||
rules = MSRules ? strdup(MSRules) : NULL;
|
||||
rules = MSRules ? Z_StrDup(MSRules) : NULL;
|
||||
Unlock_state();
|
||||
|
||||
return rules;
|
||||
|
||||
+3
-2
@@ -831,7 +831,7 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
|
||||
{
|
||||
S_StartSound(toucher, special->info->seesound);
|
||||
|
||||
if (UNLIKELY(player->pflags & PF_NIGHTSMODE))
|
||||
if (player->pflags & PF_NIGHTSMODE)
|
||||
{
|
||||
player->bumpertime = TICRATE/2;
|
||||
if (special->threshold > 0)
|
||||
@@ -1131,7 +1131,7 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
|
||||
S_StartSound(toucher, special->info->painsound);
|
||||
return;
|
||||
}
|
||||
else if (UNLIKELY((player->pflags & PF_NIGHTSMODE) && (player->pflags & PF_DRILLING)) || (player->pflags & (PF_JUMPED|PF_SPINNING|PF_GLIDING))
|
||||
else if (((player->pflags & PF_NIGHTSMODE) && (player->pflags & PF_DRILLING)) || (player->pflags & (PF_JUMPED|PF_SPINNING|PF_GLIDING))
|
||||
|| player->powers[pw_invulnerability] || player->powers[pw_super]) // Do you possess the ability to subdue the object?
|
||||
{
|
||||
// Shatter the shield!
|
||||
@@ -2420,6 +2420,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
||||
{
|
||||
player->kartstuff[k_sneakertimer] = 0;
|
||||
K_SpinPlayer(player, source, 1, inflictor, false);
|
||||
damage = player->mo->health - 1;
|
||||
P_RingDamage(player, inflictor, source);
|
||||
P_PlayerRingBurst(player, 5);
|
||||
|
||||
|
||||
@@ -30,6 +30,8 @@ extern "C" {
|
||||
|
||||
#define FLOATSPEED (FRACUNIT*4)
|
||||
|
||||
//#define VIEWHEIGHTS "41"
|
||||
|
||||
// Maximum player score.
|
||||
#define MAXSCORE 999999990
|
||||
|
||||
@@ -237,10 +239,14 @@ void P_InstaThrustEvenIn2D(mobj_t *mo, angle_t angle, fixed_t move);
|
||||
boolean P_LookForEnemies(player_t *player);
|
||||
void P_NukeEnemies(mobj_t *inflictor, mobj_t *source, fixed_t radius);
|
||||
void P_HomingAttack(mobj_t *source, mobj_t *enemy); /// \todo doesn't belong in p_user
|
||||
//boolean P_SuperReady(player_t *player);
|
||||
boolean P_AnalogMove(player_t *player);
|
||||
/*boolean P_TransferToNextMare(player_t *player);
|
||||
UINT8 P_FindLowestMare(void);*/
|
||||
UINT8 P_FindLowestLap(void);
|
||||
UINT8 P_FindHighestLap(void);
|
||||
void P_FindEmerald(void);
|
||||
//void P_TransferToAxis(player_t *player, INT32 axisnum);
|
||||
boolean P_PlayerMoving(INT32 pnum);
|
||||
void P_Telekinesis(player_t *player, fixed_t thrust, fixed_t range);
|
||||
|
||||
|
||||
+14
-14
@@ -335,7 +335,7 @@ static boolean P_SetPrecipMobjState(precipmobj_t *mobj, statenum_t state)
|
||||
mobj->tics = st->tics;
|
||||
mobj->sprite = st->sprite;
|
||||
mobj->frame = st->frame;
|
||||
//mobj->anim_duration = (UINT16)st->var2; // only used if FF_ANIMATE is set
|
||||
mobj->anim_duration = (UINT16)st->var2; // only used if FF_ANIMATE is set
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -919,7 +919,12 @@ static void P_PlayerFlip(mobj_t *mo)
|
||||
G_GhostAddFlip((INT32) (mo->player - players));
|
||||
// Flip aiming to match!
|
||||
|
||||
if (mo->player->pflags & PF_FLIPCAM)
|
||||
if (UNLIKELY(mo->player->pflags & PF_NIGHTSMODE)) // NiGHTS doesn't use flipcam
|
||||
{
|
||||
if (mo->tracer)
|
||||
mo->tracer->eflags ^= MFE_VERTICALFLIP;
|
||||
}
|
||||
else if (mo->player->pflags & PF_FLIPCAM)
|
||||
{
|
||||
UINT8 i;
|
||||
|
||||
@@ -941,11 +946,6 @@ static void P_PlayerFlip(mobj_t *mo)
|
||||
camera[i].z += FixedMul(20*FRACUNIT, mo->scale);
|
||||
}
|
||||
}
|
||||
else if (UNLIKELY(mo->player->pflags & PF_NIGHTSMODE)) // NiGHTS doesn't use flipcam
|
||||
{
|
||||
if (mo->tracer)
|
||||
mo->tracer->eflags ^= MFE_VERTICALFLIP;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
@@ -3252,7 +3252,7 @@ void P_CalcChasePostImg(player_t *player, camera_t *thiscam)
|
||||
player_flipcam = cv_flipcam[pnum].value;
|
||||
}
|
||||
|
||||
const boolean flipcam = (player_flipcam && player->mo->eflags & MFE_VERTICALFLIP && LIKELY(!(player->pflags & PF_NIGHTSMODE)));
|
||||
const boolean flipcam = (player_flipcam && !(player->pflags & PF_NIGHTSMODE) && player->mo->eflags & MFE_VERTICALFLIP);
|
||||
UINT8 postimgtype = 0;
|
||||
|
||||
if (encoremode)
|
||||
@@ -3620,7 +3620,7 @@ boolean P_PrecipThinker(precipmobj_t *mobj)
|
||||
mobj->lastThink = leveltime;
|
||||
|
||||
R_ResetPrecipitationMobjInterpolationState(mobj);
|
||||
//P_CycleStateAnimation((mobj_t *)mobj); // if we ever want animated precip, readd a specific function which does not need casting
|
||||
P_CycleStateAnimation((mobj_t *)mobj);
|
||||
|
||||
if (mobj->state == &states[S_RAINRETURN])
|
||||
{
|
||||
@@ -6986,7 +6986,7 @@ static boolean P_MobjDeadThink(mobj_t *mobj)
|
||||
fixed_t ns;
|
||||
mobj_t *mo2;
|
||||
|
||||
i = P_RandomByte(); // grrrrrr
|
||||
i = P_RandomByte();
|
||||
z = mobj->subsector->sector->floorheight + ((P_RandomByte()&63)*FRACUNIT);
|
||||
|
||||
for (j = 0; j < 2; j++)
|
||||
@@ -8553,7 +8553,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
||||
|
||||
if (mobj->tracer && mobj->tracer->player)
|
||||
{
|
||||
if (LIKELY(!(mobj->tracer->player->pflags & PF_NIGHTSMODE)))
|
||||
if (!(mobj->tracer->player->pflags & PF_NIGHTSMODE))
|
||||
{
|
||||
mobj->flags &= ~MF_NOGRAVITY;
|
||||
mobj->flags2 &= ~MF2_DONTDRAW;
|
||||
@@ -8577,7 +8577,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
||||
P_SetTarget(&mobj->target, NULL);
|
||||
}
|
||||
|
||||
if (UNLIKELY(mobj->tracer->player->pflags & PF_NIGHTSMODE))
|
||||
if (mobj->tracer->player->pflags & PF_NIGHTSMODE)
|
||||
{
|
||||
if (mobj->tracer->player->bonustime)
|
||||
{
|
||||
@@ -10034,7 +10034,7 @@ static precipmobj_t *P_SpawnPrecipMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype
|
||||
|
||||
mobj->x = x;
|
||||
mobj->y = y;
|
||||
//mobj->flags = info->flags;
|
||||
mobj->flags = info->flags;
|
||||
|
||||
// do not set the state with P_SetMobjState,
|
||||
// because action routines can not be called yet
|
||||
@@ -10044,7 +10044,7 @@ static precipmobj_t *P_SpawnPrecipMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype
|
||||
mobj->tics = st->tics;
|
||||
mobj->sprite = st->sprite;
|
||||
mobj->frame = st->frame; // FF_FRAMEMASK for frame, and other bits..
|
||||
//mobj->anim_duration = (UINT16)st->var2; // only used if FF_ANIMATE is set
|
||||
mobj->anim_duration = (UINT16)st->var2; // only used if FF_ANIMATE is set
|
||||
|
||||
// set subsector and/or block links
|
||||
P_SetPrecipitationThingPosition(mobj);
|
||||
|
||||
+5
-2
@@ -444,10 +444,12 @@ typedef struct precipmobj_s
|
||||
// More drawing info: to determine current sprite.
|
||||
spritenum_t sprite; // used to find patch_t and flip value
|
||||
UINT32 frame; // frame number, plus bits see p_pspr.h
|
||||
//UINT16 anim_duration; // for FF_ANIMATE states
|
||||
UINT16 anim_duration; // for FF_ANIMATE states
|
||||
|
||||
INT16 lightlevel; // Add to sector lightlevel, -255 - 255
|
||||
|
||||
struct mprecipsecnode_s *touching_sectorlist; // a linked list of sectors where this object appears
|
||||
|
||||
struct subsector_s *subsector; // Subsector the mobj resides in.
|
||||
|
||||
// The closest interval over all contacted sectors (or things).
|
||||
@@ -456,10 +458,11 @@ typedef struct precipmobj_s
|
||||
|
||||
// Momentums, used to update position.
|
||||
fixed_t momx, momy, momz;
|
||||
precipflag_t precipflags;
|
||||
fixed_t precipflags; // fixed_t so it uses the same spot as "pmomz" even as we use precipflags_t for it
|
||||
|
||||
state_t *state;
|
||||
INT32 tics; // state tic counter
|
||||
UINT32 flags; // flags from mobjinfo tables
|
||||
tic_t lastThink;
|
||||
} precipmobj_t;
|
||||
|
||||
|
||||
+3
-1
@@ -320,7 +320,9 @@ void P_AddGradesForMare(INT16 i, UINT8 mare, char *gtext)
|
||||
*/
|
||||
void P_DeleteGrades(INT16 i)
|
||||
{
|
||||
Z_Free(mapheaderinfo[i]->grades);
|
||||
if (mapheaderinfo[i]->grades)
|
||||
Z_Free(mapheaderinfo[i]->grades);
|
||||
|
||||
mapheaderinfo[i]->grades = NULL;
|
||||
mapheaderinfo[i]->numGradedMares = 0;
|
||||
}
|
||||
|
||||
+24
-20
@@ -1702,7 +1702,7 @@ void P_SwitchWeather(INT32 weathernum)
|
||||
|
||||
precipmobj->type = type; // proper set the type
|
||||
precipmobj->info = &mobjinfo[type];
|
||||
//precipmobj->flags = mobjinfo[type].flags;
|
||||
precipmobj->flags = mobjinfo[type].flags;
|
||||
|
||||
st = &states[mobjinfo[type].spawnstate+z];
|
||||
|
||||
@@ -3161,6 +3161,11 @@ void P_ProcessSpecialSector(player_t *player, sector_t *sector, sector_t *rovers
|
||||
INT32 section1, section2, section3, section4;
|
||||
INT32 special;
|
||||
|
||||
section1 = GETSECSPECIAL(sector->special, 1);
|
||||
section2 = GETSECSPECIAL(sector->special, 2);
|
||||
section3 = GETSECSPECIAL(sector->special, 3);
|
||||
section4 = GETSECSPECIAL(sector->special, 4);
|
||||
|
||||
// Ignore spectators
|
||||
if (player->spectator)
|
||||
return;
|
||||
@@ -3171,11 +3176,6 @@ void P_ProcessSpecialSector(player_t *player, sector_t *sector, sector_t *rovers
|
||||
if (player->playerstate == PST_DEAD)
|
||||
return;
|
||||
|
||||
section1 = GETSECSPECIAL(sector->special, 1);
|
||||
section2 = GETSECSPECIAL(sector->special, 2);
|
||||
section3 = GETSECSPECIAL(sector->special, 3);
|
||||
section4 = GETSECSPECIAL(sector->special, 4);
|
||||
|
||||
// Conveyor stuff
|
||||
if (section3 == 2 || section3 == 4)
|
||||
player->onconveyor = section3;
|
||||
@@ -4381,6 +4381,8 @@ static void P_PlayerOnSpecial3DFloor(player_t *player, sector_t *sector)
|
||||
}
|
||||
}
|
||||
|
||||
#define VDOORSPEED (FRACUNIT*2)
|
||||
|
||||
//
|
||||
// P_RunSpecialSectorCheck
|
||||
//
|
||||
@@ -4399,7 +4401,7 @@ static void P_RunSpecialSectorCheck(player_t *player, sector_t *sector)
|
||||
|
||||
// The list of specials that activate without floor touch
|
||||
// Check Section 1
|
||||
switch (GETSECSPECIAL(sector->special, 1))
|
||||
switch(GETSECSPECIAL(sector->special, 1))
|
||||
{
|
||||
//case 2: // Damage (water)
|
||||
case 8: // Instant kill
|
||||
@@ -4410,7 +4412,7 @@ static void P_RunSpecialSectorCheck(player_t *player, sector_t *sector)
|
||||
}
|
||||
|
||||
// Check Section 2
|
||||
switch (GETSECSPECIAL(sector->special, 2))
|
||||
switch(GETSECSPECIAL(sector->special, 2))
|
||||
{
|
||||
case 2: // Linedef executor (All players needed)
|
||||
case 4: // Linedef executor
|
||||
@@ -4421,7 +4423,7 @@ static void P_RunSpecialSectorCheck(player_t *player, sector_t *sector)
|
||||
}
|
||||
|
||||
// Check Section 4
|
||||
switch (GETSECSPECIAL(sector->special, 4))
|
||||
switch(GETSECSPECIAL(sector->special, 4))
|
||||
{
|
||||
case 2: // Level Exit / GOAL Sector / Flag Return
|
||||
case 1: // Starpost activator
|
||||
@@ -4510,7 +4512,9 @@ void P_UpdateSpecials(void)
|
||||
{
|
||||
anim_t *anim;
|
||||
INT32 i;
|
||||
INT32 pic;
|
||||
size_t j;
|
||||
|
||||
levelflat_t *foundflats; // for flat animation
|
||||
|
||||
// LEVEL TIMER
|
||||
@@ -4528,11 +4532,9 @@ void P_UpdateSpecials(void)
|
||||
{
|
||||
for (i = 0; i < anim->numpics; i++)
|
||||
{
|
||||
pic = anim->basepic + ((leveltime/anim->speed + i) % anim->numpics);
|
||||
if (anim->istexture)
|
||||
{
|
||||
texturetranslation[anim->basepic+i] = anim->basepic +
|
||||
((leveltime/anim->speed + i) % anim->numpics);
|
||||
}
|
||||
texturetranslation[anim->basepic+i] = pic;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4627,8 +4629,8 @@ static ffloor_t *P_AddFakeFloor(sector_t *sec, sector_t *sec2, line_t *master, f
|
||||
|
||||
if (sec2->numattached == 0)
|
||||
{
|
||||
sec2->attached = Z_Malloc(sizeof(*sec2->attached) * sec2->maxattached, PU_STATIC, NULL);
|
||||
sec2->attachedsolid = Z_Malloc(sizeof(*sec2->attachedsolid) * sec2->maxattached, PU_STATIC, NULL);
|
||||
sec2->attached = Z_Malloc(sizeof (*sec2->attached) * sec2->maxattached, PU_STATIC, NULL);
|
||||
sec2->attachedsolid = Z_Malloc(sizeof (*sec2->attachedsolid) * sec2->maxattached, PU_STATIC, NULL);
|
||||
sec2->attached[0] = sec - sectors;
|
||||
sec2->numattached = 1;
|
||||
sec2->attachedsolid[0] = (flags & FF_SOLID);
|
||||
@@ -4642,8 +4644,8 @@ static ffloor_t *P_AddFakeFloor(sector_t *sec, sector_t *sec2, line_t *master, f
|
||||
if (sec2->numattached >= sec2->maxattached)
|
||||
{
|
||||
sec2->maxattached *= 2;
|
||||
sec2->attached = Z_Realloc(sec2->attached, sizeof(*sec2->attached) * sec2->maxattached, PU_STATIC, NULL);
|
||||
sec2->attachedsolid = Z_Realloc(sec2->attachedsolid, sizeof(*sec2->attachedsolid) * sec2->maxattached, PU_STATIC, NULL);
|
||||
sec2->attached = Z_Realloc(sec2->attached, sizeof (*sec2->attached) * sec2->maxattached, PU_STATIC, NULL);
|
||||
sec2->attachedsolid = Z_Realloc(sec2->attachedsolid, sizeof (*sec2->attachedsolid) * sec2->maxattached, PU_STATIC, NULL);
|
||||
}
|
||||
sec2->attached[sec2->numattached] = sec - sectors;
|
||||
sec2->attachedsolid[sec2->numattached] = (flags & FF_SOLID);
|
||||
@@ -4651,7 +4653,7 @@ static ffloor_t *P_AddFakeFloor(sector_t *sec, sector_t *sec2, line_t *master, f
|
||||
}
|
||||
|
||||
// Add the floor
|
||||
ffloor = Z_Calloc(sizeof(*ffloor), PU_LEVEL, NULL);
|
||||
ffloor = Z_Calloc(sizeof (*ffloor), PU_LEVEL, NULL);
|
||||
ffloor->secnum = sec2 - sectors;
|
||||
ffloor->target = sec;
|
||||
ffloor->bottomheight = &sec2->floorheight;
|
||||
@@ -5466,6 +5468,7 @@ void P_SpawnSpecials(INT32 fromnetsave, boolean reloadinggamestate)
|
||||
break;
|
||||
|
||||
case 10: // Vertical culling plane for sprites and FOFs
|
||||
sec = sides[*lines[i].sidenum].sector - sectors;
|
||||
for (s = -1; (s = P_FindSectorFromLineTag(lines + i, s)) >= 0 ;)
|
||||
sectors[s].cullheight = &lines[i]; // This allows it to change in realtime!
|
||||
break;
|
||||
@@ -5986,7 +5989,7 @@ void P_SpawnSpecials(INT32 fromnetsave, boolean reloadinggamestate)
|
||||
if (!virt)
|
||||
virt = vres_GetMap(lastloadedmaplumpnum);
|
||||
|
||||
data = (UINT8*)vres_Find(virt, "SIDEDEFS")->data;
|
||||
data = (UINT8*) vres_Find(virt, "SIDEDEFS")->data;
|
||||
|
||||
for (b = 0; b < (INT16)numsides; b++)
|
||||
{
|
||||
@@ -6218,7 +6221,8 @@ void P_SpawnSpecials(INT32 fromnetsave, boolean reloadinggamestate)
|
||||
|
||||
// Allocate each list
|
||||
for (i = 0; i < numsectors; i++)
|
||||
Z_Free(secthinkers[i].thinkers);
|
||||
if(secthinkers[i].thinkers)
|
||||
Z_Free(secthinkers[i].thinkers);
|
||||
|
||||
Z_Free(secthinkers);
|
||||
|
||||
|
||||
+3
-4
@@ -728,12 +728,11 @@ void P_Ticker(boolean run)
|
||||
|
||||
if (cv_recordmultiplayerdemos.value)
|
||||
{
|
||||
const INT32 axis = JoyAxis(AXISLOOKBACK, 1);
|
||||
|
||||
if (demo.savemode == DSM_NOTSAVING || demo.savemode == DSM_WILLAUTOSAVE)
|
||||
{
|
||||
const INT32 axis = cv_usejoystick[0].value ? JoyAxis(AXISLOOKBACK, 1) : -1;
|
||||
if (demo.savebutton && demo.savebutton + 3*TICRATE < leveltime && (InputDown(gc_lookback, 1) || (axis > 0)))
|
||||
if (demo.savebutton && demo.savebutton + 3*TICRATE < leveltime && (InputDown(gc_lookback, 1) || (cv_usejoystick[0].value && axis > 0)))
|
||||
demo.savemode = DSM_TITLEENTRY;
|
||||
}
|
||||
|
||||
// if there are no players left at all, stop demo recording
|
||||
// Demos that that dont have any players crash during playback, which can happen with dedicated servers
|
||||
|
||||
+13
-2
@@ -1822,6 +1822,7 @@ void P_DoJumpShield(player_t *player)
|
||||
|
||||
player->pflags &= ~PF_JUMPED;
|
||||
//P_DoJump(player, false);
|
||||
player->pflags &= ~PF_JUMPED;
|
||||
player->secondjump = 0;
|
||||
player->jumping = 0;
|
||||
player->pflags |= PF_THOKKED;
|
||||
@@ -1893,6 +1894,7 @@ static void P_3dMovement(player_t *player)
|
||||
ticcmd_t *cmd;
|
||||
angle_t movepushangle, movepushsideangle; // Analog
|
||||
fixed_t movepushforward = 0, movepushside = 0;
|
||||
angle_t dangle; // replaces old quadrants bits
|
||||
boolean analogmove = false;
|
||||
fixed_t oldMagnitude, newMagnitude;
|
||||
vector3_t totalthrust;
|
||||
@@ -1950,6 +1952,15 @@ static void P_3dMovement(player_t *player)
|
||||
// Calculates player's speed based on distance-of-a-line formula
|
||||
player->speed = R_PointToDist2(0, 0, player->rmomx, player->rmomy);
|
||||
|
||||
// Monster Iestyn - 04-11-13
|
||||
// Quadrants are stupid, excessive and broken, let's do this a much simpler way!
|
||||
// Get delta angle from rmom angle and player angle first
|
||||
dangle = R_PointToAngle2(0,0, player->rmomx, player->rmomy) - player->mo->angle;
|
||||
if (dangle > ANGLE_180) //flip to keep to one side
|
||||
{
|
||||
dangle = InvAngle(dangle);
|
||||
}
|
||||
|
||||
// When sliding, don't allow forward/back
|
||||
if (player->pflags & PF_SLIDING)
|
||||
cmd->forwardmove = 0;
|
||||
@@ -4109,7 +4120,7 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall
|
||||
angle -= (angle - thiscam->pitch)/2;
|
||||
}
|
||||
|
||||
if (player->playerstate != PST_DEAD && LIKELY(!((player->pflags & PF_NIGHTSMODE) && player->exiting)))
|
||||
if (player->playerstate != PST_DEAD && !((player->pflags & PF_NIGHTSMODE) && player->exiting))
|
||||
angle += (focusaiming < ANGLE_180 ? focusaiming/2 : InvAngle(InvAngle(focusaiming)/2)); // overcomplicated version of '((signed)focusaiming)/2;'
|
||||
|
||||
if (!camstill && !timeover) // Keep the view still...
|
||||
@@ -4453,7 +4464,7 @@ static INT32 Quaketilt(player_t *player)
|
||||
|
||||
lowb = FixedMul(lowb, player->mo->scale);
|
||||
moma = FixedMul(FixedDiv(delta, ANGLE_90), tilt);
|
||||
speed = abs(player->mo->momx + player->mo->momy);
|
||||
speed = abs( player->mo->momx + player->mo->momy );
|
||||
|
||||
if (speed < lowb)
|
||||
{
|
||||
|
||||
+2
-1
@@ -1720,7 +1720,8 @@ void R_InitData(void)
|
||||
|
||||
void R_ClearTextureNumCache(boolean btell)
|
||||
{
|
||||
Z_Free(tidcache);
|
||||
if (tidcache)
|
||||
Z_Free(tidcache);
|
||||
tidcache = NULL;
|
||||
if (btell)
|
||||
CONS_Debug(DBG_SETUP, "Fun Fact: There are %d textures used in this map.\n", tidcachelen);
|
||||
|
||||
+2
-1
@@ -437,7 +437,8 @@ UINT8* R_GetTranslationColormap(INT32 skinnum, skincolors_t color, UINT8 flags)
|
||||
|
||||
UINT8* R_GetLocalTranslationColormap(skin_t *skin, skin_t *localskin, skincolors_t color, UINT8 flags, boolean local)
|
||||
{
|
||||
return RGetTranslationColormap(K_GetMobjLocalSkinNum(skin, localskin, local), color, flags, (localskin && local));
|
||||
const INT32 skinnum = localskin ? (localskin - K_GetSkinArray(local)) : (skin - skins);
|
||||
return RGetTranslationColormap(skinnum, color, flags, (localskin && local));
|
||||
}
|
||||
|
||||
patch_t* R_GetSkinFaceRank(player_t* ply)
|
||||
|
||||
+18
-14
@@ -280,22 +280,22 @@ static void Fov_OnChange(void)
|
||||
|
||||
static void FlipCam_OnChange(void)
|
||||
{
|
||||
SendWeaponPref(0);
|
||||
SendWeaponPref();
|
||||
}
|
||||
|
||||
static void FlipCam2_OnChange(void)
|
||||
{
|
||||
SendWeaponPref(1);
|
||||
SendWeaponPref2();
|
||||
}
|
||||
|
||||
static void FlipCam3_OnChange(void)
|
||||
{
|
||||
SendWeaponPref(2);
|
||||
SendWeaponPref3();
|
||||
}
|
||||
|
||||
static void FlipCam4_OnChange(void)
|
||||
{
|
||||
SendWeaponPref(3);
|
||||
SendWeaponPref4();
|
||||
}
|
||||
|
||||
static void Precipstuff_OnChange(void)
|
||||
@@ -519,10 +519,10 @@ void R_GetRenderBlockMapDimensions(fixed_t drawdist, INT32 *xl, INT32 *xh, INT32
|
||||
const fixed_t vyright = viewy + FixedMul(drawdist, FSIN(right));
|
||||
|
||||
// Try to narrow the search to within only the field of view
|
||||
*xl = (unsigned)(std::min(viewx, std::min(vxleft, vxright)) - bmaporgx)>>MAPBLOCKSHIFT;
|
||||
*xh = (unsigned)(std::max(viewx, std::max(vxleft, vxright)) - bmaporgx)>>MAPBLOCKSHIFT;
|
||||
*yl = (unsigned)(std::min(viewy, std::min(vyleft, vyright)) - bmaporgy)>>MAPBLOCKSHIFT;
|
||||
*yh = (unsigned)(std::max(viewy, std::max(vyleft, vyright)) - bmaporgy)>>MAPBLOCKSHIFT;
|
||||
*xl = (unsigned)(FixedClamp((INT64)std::min(viewx, std::min(vxleft, vxright)) - bmaporgx))>>MAPBLOCKSHIFT;
|
||||
*xh = (unsigned)(FixedClamp((INT64)std::max(viewx, std::max(vxleft, vxright)) - bmaporgx))>>MAPBLOCKSHIFT;
|
||||
*yl = (unsigned)(FixedClamp((INT64)std::min(viewy, std::min(vyleft, vyright)) - bmaporgy))>>MAPBLOCKSHIFT;
|
||||
*yh = (unsigned)(FixedClamp((INT64)std::max(viewy, std::max(vyleft, vyright)) - bmaporgy))>>MAPBLOCKSHIFT;
|
||||
|
||||
if (*xh >= bmapwidth)
|
||||
*xh = bmapwidth - 1;
|
||||
@@ -925,11 +925,11 @@ void R_ExecuteSetViewSize(void)
|
||||
viewheight = vid.height;
|
||||
|
||||
if (splitscreen)
|
||||
{
|
||||
viewheight >>= 1;
|
||||
|
||||
if (splitscreen > 1)
|
||||
viewwidth >>= 1;
|
||||
if (splitscreen > 1)
|
||||
{
|
||||
viewwidth >>= 1;
|
||||
}
|
||||
|
||||
centerx = viewwidth/2;
|
||||
@@ -956,9 +956,13 @@ void R_ExecuteSetViewSize(void)
|
||||
screenheightarray[i] = (INT16)viewheight;
|
||||
}
|
||||
|
||||
Z_Free(ds_su);
|
||||
Z_Free(ds_sv);
|
||||
Z_Free(ds_sz);
|
||||
if (ds_su)
|
||||
Z_Free(ds_su);
|
||||
if (ds_sv)
|
||||
Z_Free(ds_sv);
|
||||
if (ds_sz)
|
||||
Z_Free(ds_sz);
|
||||
|
||||
ds_su = ds_sv = ds_sz = NULL;
|
||||
|
||||
memset(scalelight, 0xFF, sizeof(scalelight));
|
||||
|
||||
+2
-2
@@ -152,8 +152,8 @@ subsector_t *R_IsPointInSubsector(fixed_t x, fixed_t y);
|
||||
|
||||
FUNCMATH FUNCINLINE static ATTRINLINE fixed_t R_QuickDist(fixed_t x1, fixed_t y1, fixed_t x, fixed_t y)
|
||||
{
|
||||
const fixed_t absx = abs(x - x1);
|
||||
const fixed_t absy = abs(y - y1);
|
||||
const fixed_t absx = FixedClamp(labs((INT64)x - (INT64)x1));
|
||||
const fixed_t absy = FixedClamp(labs((INT64)y - (INT64)y1));
|
||||
#ifdef __cplusplus
|
||||
return std::max<fixed_t>(absx, absy);
|
||||
#else
|
||||
|
||||
+4
-2
@@ -405,8 +405,10 @@ static void Patch_FreeData(patch_t *patch)
|
||||
}*/
|
||||
#endif
|
||||
|
||||
Z_Free(patch->columnofs);
|
||||
Z_Free(patch->columns);
|
||||
if (patch->columnofs)
|
||||
Z_Free(patch->columnofs);
|
||||
if (patch->columns)
|
||||
Z_Free(patch->columns);
|
||||
}
|
||||
|
||||
void Patch_Free(patch_t *patch)
|
||||
|
||||
+3
-3
@@ -228,8 +228,8 @@ static void R_MapPlane(drawspandata_t *ds, spandrawfunc_t *localspanfunc, INT32
|
||||
// to step from those to the proper texture coordinate to start drawing at.
|
||||
// That way, the texture coordinate is always calculated by its position
|
||||
// on the screen and not by its position relative to the edge of the visplane.
|
||||
ds->xfrac = ds->xoffs + FixedMul(planecos, distance) + (x1 - centerx) * ds->xstep;
|
||||
ds->yfrac = ds->yoffs - FixedMul(planesin, distance) + (x1 - centerx) * ds->ystep;
|
||||
ds->xfrac = FixedClamp((INT64)ds->xoffs + (INT64)FixedMul(planecos, distance) + ((INT64)x1 - (INT64)centerx) * (INT64)ds->xstep);
|
||||
ds->yfrac = FixedClamp((INT64)ds->yoffs - (INT64)FixedMul(planesin, distance) + ((INT64)x1 - (INT64)centerx) * (INT64)ds->ystep);
|
||||
|
||||
if (ds->planeripple.active)
|
||||
{
|
||||
@@ -1012,7 +1012,7 @@ void R_DrawSinglePlane(drawspandata_t* ds, visplane_t *pl, boolean allow_paralle
|
||||
levelflat_t *levelflat;
|
||||
void (*mapfunc)(drawspandata_t*, void(*)(drawspandata_t*), INT32, INT32, INT32, boolean) = R_MapPlane;
|
||||
|
||||
if (pl->minx > pl->maxx)
|
||||
if (!(pl->minx <= pl->maxx))
|
||||
return;
|
||||
|
||||
// sky flat
|
||||
|
||||
+2
-2
@@ -312,8 +312,8 @@ void Portal_AddSkybox(const visplane_t* plane)
|
||||
y = (viewy - skyboxmo[1]->y) * -mh->skybox_scaley;
|
||||
|
||||
// Apply transform to account for the skybox viewport angle.
|
||||
portal->viewx += FixedMul(x,FINECOSINE(ang)) - FixedMul(y, FINESINE(ang));
|
||||
portal->viewy += FixedMul(x, FINESINE(ang)) + FixedMul(y,FINECOSINE(ang));
|
||||
portal->viewx += FixedMul(x, FINECOSINE(ang)) - FixedMul(y, FINESINE(ang));
|
||||
portal->viewy += FixedMul(x, FINESINE(ang)) + FixedMul(y, FINECOSINE(ang));
|
||||
}
|
||||
|
||||
if (mh->skybox_scalez > 0)
|
||||
|
||||
+79
-90
@@ -226,10 +226,11 @@ static void R_RenderMaskedSegLoop(drawcolumndata_t* dc, drawseg_t *drawseg, INT3
|
||||
leftheight -= viewz;
|
||||
rightheight -= viewz;
|
||||
|
||||
rlight->height = (centeryfrac) - FixedMul(leftheight, drawseg->scale1);
|
||||
rlight->heightstep = (centeryfrac) - FixedMul(rightheight, drawseg->scale2);
|
||||
rlight->heightstep = (rlight->heightstep-rlight->height)/(range);
|
||||
rlight->startheight = rlight->height; // keep starting value here to reset for each repeat
|
||||
rlight->height = FixedClamp((INT64)centeryfrac - FixedMul(leftheight, drawseg->scale1));
|
||||
rlight->heightstep = FixedClamp((INT64)centeryfrac - FixedMul(rightheight, drawseg->scale2));
|
||||
rlight->heightstep = FixedClamp((INT64)rlight->heightstep - rlight->height)/(range);
|
||||
rlight->startheight = rlight->height; // keep starting value here to reset for each repeat
|
||||
|
||||
rlight->lightlevel = *light->lightlevel;
|
||||
rlight->extra_colormap = light->extra_colormap;
|
||||
rlight->flags = static_cast<ffloortype_e>(light->flags);
|
||||
@@ -341,7 +342,7 @@ static void R_RenderMaskedSegLoop(drawcolumndata_t* dc, drawseg_t *drawseg, INT3
|
||||
for (i = 0; i < dc->numlights; i++)
|
||||
{
|
||||
rlight = &dc->lightlist[i];
|
||||
rlight->height += rlight->heightstep;
|
||||
rlight->height = FixedClamp((INT64)rlight->height + rlight->heightstep);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -355,9 +356,9 @@ static void R_RenderMaskedSegLoop(drawcolumndata_t* dc, drawseg_t *drawseg, INT3
|
||||
lighttable_t **xwalllights;
|
||||
|
||||
sprbotscreen = INT32_MAX;
|
||||
sprtopscreen = windowtop = (centeryfrac - FixedMul(dc->texturemid, spryscale));
|
||||
sprtopscreen = windowtop = FixedClamp((INT64)centeryfrac - FixedMul(dc->texturemid, spryscale));
|
||||
|
||||
realbot = windowbottom = FixedMul(textureheight[texnum], spryscale) + sprtopscreen;
|
||||
realbot = windowbottom = FixedClamp((INT64)FixedMul(textureheight[texnum], spryscale) + sprtopscreen);
|
||||
dc->iscale = 0xffffffffu / (unsigned)spryscale;
|
||||
|
||||
// draw the texture
|
||||
@@ -407,7 +408,8 @@ static void R_RenderMaskedSegLoop(drawcolumndata_t* dc, drawseg_t *drawseg, INT3
|
||||
set_light_vars(i);
|
||||
|
||||
height = rlight->height;
|
||||
rlight->height += rlight->heightstep;
|
||||
|
||||
rlight->height = FixedClamp((INT64)rlight->height + rlight->heightstep);
|
||||
|
||||
if (height <= windowtop)
|
||||
{
|
||||
@@ -423,7 +425,7 @@ static void R_RenderMaskedSegLoop(drawcolumndata_t* dc, drawseg_t *drawseg, INT3
|
||||
for (i++; i < dc->numlights; i++)
|
||||
{
|
||||
rlight = &dc->lightlist[i];
|
||||
rlight->height += rlight->heightstep;
|
||||
rlight->height = FixedClamp((INT64)rlight->height + rlight->heightstep);
|
||||
}
|
||||
|
||||
continue;
|
||||
@@ -455,7 +457,7 @@ static void R_RenderMaskedSegLoop(drawcolumndata_t* dc, drawseg_t *drawseg, INT3
|
||||
if (frontsector->extra_colormap)
|
||||
dc->colormap = frontsector->extra_colormap->colormap + (dc->colormap - colormaps);
|
||||
|
||||
sprtopscreen = centeryfrac - FixedMul(dc->texturemid, spryscale);
|
||||
sprtopscreen = FixedClamp((INT64)centeryfrac - FixedMul(dc->texturemid, spryscale));
|
||||
dc->iscale = 0xffffffffu / (unsigned)spryscale;
|
||||
|
||||
// draw the texture
|
||||
@@ -710,17 +712,6 @@ void R_RenderThickSideRange(drawseg_t *drawseg, INT32 x1, INT32 x2, ffloor_t *pf
|
||||
rw_scalestep = drawseg->scalestep;
|
||||
spryscale = drawseg->scale1 + (x1 - drawseg->x1)*rw_scalestep;
|
||||
|
||||
#define CLAMPMAX INT32_MAX
|
||||
#define CLAMPMIN (-INT32_MAX) // This is not INT32_MIN on purpose! INT32_MIN makes the drawers freak out.
|
||||
auto overflow_clamp = [&](INT64 overflow_test)
|
||||
{
|
||||
return (overflow_test > (INT64)CLAMPMAX) ? CLAMPMAX :
|
||||
(overflow_test > (INT64)CLAMPMIN) ? (fixed_t)overflow_test :
|
||||
CLAMPMIN;
|
||||
};
|
||||
#undef CLAMPMAX
|
||||
#undef CLAMPMIN
|
||||
|
||||
dc->numlights = 0;
|
||||
if (frontsector->numlights)
|
||||
{
|
||||
@@ -736,7 +727,6 @@ void R_RenderThickSideRange(drawseg_t *drawseg, INT32 x1, INT32 x2, ffloor_t *pf
|
||||
{
|
||||
fixed_t leftheight, rightheight;
|
||||
fixed_t pfloorleft, pfloorright;
|
||||
INT64 overflow_test;
|
||||
light = &frontsector->lightlist[i];
|
||||
rlight = &dc->lightlist[p];
|
||||
|
||||
@@ -760,17 +750,14 @@ void R_RenderThickSideRange(drawseg_t *drawseg, INT32 x1, INT32 x2, ffloor_t *pf
|
||||
continue;
|
||||
}
|
||||
|
||||
leftheight -= viewz;
|
||||
leftheight -= viewz;
|
||||
rightheight -= viewz;
|
||||
|
||||
// Monster Iestyn (25/03/18): do not skip these lights if they fail overflow test, just clamp them instead so they behave.
|
||||
overflow_test = (INT64)centeryfrac - (((INT64)leftheight*drawseg->scale1)>>FRACBITS);
|
||||
rlight->height = overflow_clamp(overflow_test);
|
||||
rlight->height = FixedClamp((INT64)centeryfrac - (((INT64)leftheight * drawseg->scale1)>>FRACBITS));
|
||||
rlight->heightstep = FixedClamp((INT64)centeryfrac - (((INT64)rightheight * drawseg->scale2)>>FRACBITS));
|
||||
rlight->heightstep = FixedClamp((INT64)rlight->heightstep - rlight->height)/(range);
|
||||
|
||||
overflow_test = (INT64)centeryfrac - (((INT64)rightheight*drawseg->scale2)>>FRACBITS);
|
||||
rlight->heightstep = overflow_clamp(overflow_test);
|
||||
|
||||
rlight->heightstep = (rlight->heightstep-rlight->height)/(range);
|
||||
rlight->flags = static_cast<ffloortype_e>(light->flags);
|
||||
|
||||
if (light->flags & FF_CUTLEVEL)
|
||||
@@ -781,13 +768,9 @@ void R_RenderThickSideRange(drawseg_t *drawseg, INT32 x1, INT32 x2, ffloor_t *pf
|
||||
rightheight -= viewz;
|
||||
|
||||
// Monster Iestyn (25/03/18): do not skip these lights if they fail overflow test, just clamp them instead so they behave.
|
||||
overflow_test = (INT64)centeryfrac - (((INT64)leftheight*drawseg->scale1)>>FRACBITS);
|
||||
rlight->botheight = overflow_clamp(overflow_test);
|
||||
|
||||
overflow_test = (INT64)centeryfrac - (((INT64)rightheight*drawseg->scale2)>>FRACBITS);
|
||||
rlight->botheightstep = overflow_clamp(overflow_test);
|
||||
|
||||
rlight->botheightstep = (rlight->botheightstep-rlight->botheight)/(range);
|
||||
rlight->botheight = FixedClamp((INT64)centeryfrac - (((INT64)leftheight*drawseg->scale1)>>FRACBITS));
|
||||
rlight->botheightstep = FixedClamp(((INT64)centeryfrac - (((INT64)rightheight*drawseg->scale2)>>FRACBITS)));
|
||||
rlight->botheightstep = FixedClamp((INT64)rlight->botheightstep - rlight->botheight)/(range);
|
||||
}
|
||||
|
||||
rlight->lightlevel = *light->lightlevel;
|
||||
@@ -896,10 +879,10 @@ void R_RenderThickSideRange(drawseg_t *drawseg, INT32 x1, INT32 x2, ffloor_t *pf
|
||||
right_bottom = P_GetFFloorBottomZAt(pfloor, drawseg->rightpos.x, drawseg->rightpos.y) - viewz;
|
||||
|
||||
// using INT64 to avoid 32bit overflow
|
||||
top_frac = (INT64)centeryfrac - (((INT64)left_top * drawseg->scale1) >> FRACBITS);
|
||||
bottom_frac = (INT64)centeryfrac - (((INT64)left_bottom * drawseg->scale1) >> FRACBITS);
|
||||
top_step = (INT64)centeryfrac - (((INT64)right_top * drawseg->scale2) >> FRACBITS);
|
||||
bottom_step = (INT64)centeryfrac - (((INT64)right_bottom * drawseg->scale2) >> FRACBITS);
|
||||
top_frac = FixedClamp((INT64)centeryfrac - (((INT64)left_top * drawseg->scale1) >> FRACBITS));
|
||||
top_step = FixedClamp((INT64)centeryfrac - (((INT64)right_top * drawseg->scale2) >> FRACBITS));
|
||||
bottom_frac = FixedClamp((INT64)centeryfrac - (((INT64)left_bottom * drawseg->scale1) >> FRACBITS));
|
||||
bottom_step = FixedClamp((INT64)centeryfrac - (((INT64)right_bottom * drawseg->scale2) >> FRACBITS));
|
||||
|
||||
top_step = (top_step-top_frac)/(range);
|
||||
bottom_step = (bottom_step-bottom_frac)/(range);
|
||||
@@ -921,8 +904,8 @@ void R_RenderThickSideRange(drawseg_t *drawseg, INT32 x1, INT32 x2, ffloor_t *pf
|
||||
|
||||
// Calculate bounds
|
||||
// clamp the values if necessary to avoid overflows and rendering glitches caused by them
|
||||
sprtopscreen = windowtop = overflow_clamp(top_frac);
|
||||
sprbotscreen = windowbottom = overflow_clamp(bottom_frac);
|
||||
sprtopscreen = windowtop = top_frac;
|
||||
sprbotscreen = windowbottom = bottom_frac;
|
||||
|
||||
top_frac += top_step;
|
||||
bottom_frac += bottom_step;
|
||||
@@ -935,9 +918,11 @@ void R_RenderThickSideRange(drawseg_t *drawseg, INT32 x1, INT32 x2, ffloor_t *pf
|
||||
for (i = 0; i < dc->numlights; i++)
|
||||
{
|
||||
rlight = &dc->lightlist[i];
|
||||
rlight->height += rlight->heightstep;
|
||||
|
||||
rlight->height = FixedClamp((INT64)rlight->height + rlight->heightstep);
|
||||
|
||||
if (rlight->flags & FF_CUTLEVEL)
|
||||
rlight->botheight += rlight->botheightstep;
|
||||
rlight->botheight = FixedClamp((INT64)rlight->botheight + rlight->botheightstep);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1045,12 +1030,12 @@ void R_RenderThickSideRange(drawseg_t *drawseg, INT32 x1, INT32 x2, ffloor_t *pf
|
||||
solid = 0;
|
||||
|
||||
height = rlight->height;
|
||||
rlight->height += rlight->heightstep;
|
||||
rlight->height = FixedClamp((INT64)rlight->height + rlight->heightstep);
|
||||
|
||||
if (solid)
|
||||
{
|
||||
bheight = rlight->botheight - (FRACUNIT >> 1);
|
||||
rlight->botheight += rlight->botheightstep;
|
||||
bheight = FixedClamp((INT64)rlight->botheight - (FRACUNIT >> 1));
|
||||
rlight->botheight = FixedClamp((INT64)rlight->botheight + rlight->botheightstep);
|
||||
}
|
||||
|
||||
if (height <= windowtop)
|
||||
@@ -1078,7 +1063,7 @@ void R_RenderThickSideRange(drawseg_t *drawseg, INT32 x1, INT32 x2, ffloor_t *pf
|
||||
for (i++; i < dc->numlights; i++)
|
||||
{
|
||||
rlight = &dc->lightlist[i];
|
||||
rlight->height += rlight->heightstep;
|
||||
rlight->height = FixedClamp((INT64)rlight->height + rlight->heightstep);
|
||||
|
||||
if (rlight->flags & FF_CUTLEVEL)
|
||||
rlight->botheight += rlight->botheightstep;
|
||||
@@ -1212,7 +1197,7 @@ static void R_RenderSegLoop(drawcolumndata_t* dc)
|
||||
for (; rw_x < rw_stopx; rw_x++)
|
||||
{
|
||||
// mark floor / ceiling areas
|
||||
yl = (topfrac+HEIGHTUNIT-1)>>HEIGHTBITS;
|
||||
yl = FixedClamp((INT64)topfrac + HEIGHTUNIT-1)>>HEIGHTBITS;
|
||||
yh = bottomfrac>>HEIGHTBITS;
|
||||
|
||||
// Mark ceiling
|
||||
@@ -1363,15 +1348,17 @@ static void R_RenderSegLoop(drawcolumndata_t* dc)
|
||||
//SoM: Calculate offsets for Thick fake floors.
|
||||
// calculate texture offset
|
||||
angle = (rw_centerangle + xtoviewangle[rw_x])>>ANGLETOFINESHIFT;
|
||||
|
||||
// Mask 4095 to guarantee this index is within bounds
|
||||
texturecolumn = rw_offset-FixedMul(FINETANGENT(angle & 4095), rw_distance);
|
||||
texturecolumn = FixedClamp((INT64)rw_offset - FixedMul(FINETANGENT(angle & 4095), rw_distance));
|
||||
|
||||
if (oldtexturecolumn != -1)
|
||||
{
|
||||
rw_bottomtexturemid += FixedMul(rw_bottomtextureslide, oldtexturecolumn-texturecolumn);
|
||||
rw_midtexturemid += FixedMul(rw_midtextureslide, oldtexturecolumn-texturecolumn);
|
||||
rw_toptexturemid += FixedMul(rw_toptextureslide, oldtexturecolumn-texturecolumn);
|
||||
rw_midtextureback += FixedMul(rw_midtexturebackslide, oldtexturecolumn-texturecolumn);
|
||||
const fixed_t coloff = FixedClamp((INT64)oldtexturecolumn - texturecolumn);
|
||||
rw_bottomtexturemid += FixedMul(rw_bottomtextureslide, coloff);
|
||||
rw_midtexturemid += FixedMul(rw_midtextureslide, coloff);
|
||||
rw_toptexturemid += FixedMul(rw_toptextureslide, coloff);
|
||||
rw_midtextureback += FixedMul(rw_midtexturebackslide, coloff);
|
||||
}
|
||||
oldtexturecolumn = texturecolumn;
|
||||
|
||||
@@ -1381,7 +1368,7 @@ static void R_RenderSegLoop(drawcolumndata_t* dc)
|
||||
// calculate lighting
|
||||
pindex = FixedMul(rw_scale, LIGHTRESOLUTIONFIX)>>LIGHTSCALESHIFT;
|
||||
|
||||
if (pindex >= MAXLIGHTSCALE)
|
||||
if (pindex >= MAXLIGHTSCALE)
|
||||
pindex = MAXLIGHTSCALE-1;
|
||||
|
||||
dc->colormap = walllights[pindex];
|
||||
@@ -1463,8 +1450,8 @@ static void R_RenderSegLoop(drawcolumndata_t* dc)
|
||||
if (toptexture)
|
||||
{
|
||||
// top wall
|
||||
mid = pixhigh>>HEIGHTBITS;
|
||||
pixhigh += pixhighstep;
|
||||
mid = pixhigh >> HEIGHTBITS;
|
||||
pixhigh = FixedClamp((INT64)pixhigh + pixhighstep);
|
||||
|
||||
if (mid >= floorclip[rw_x])
|
||||
mid = floorclip[rw_x]-1;
|
||||
@@ -1493,8 +1480,8 @@ static void R_RenderSegLoop(drawcolumndata_t* dc)
|
||||
if (bottomtexture)
|
||||
{
|
||||
// bottom wall
|
||||
mid = (pixlow+HEIGHTUNIT-1)>>HEIGHTBITS;
|
||||
pixlow += pixlowstep;
|
||||
mid = FixedClamp((INT64)pixlow+HEIGHTUNIT-1)>>HEIGHTBITS;
|
||||
pixlow = FixedClamp((INT64)pixlow + pixlowstep);
|
||||
|
||||
// no space above wall?
|
||||
if (mid <= ceilingclip[rw_x])
|
||||
@@ -1545,10 +1532,10 @@ static void R_RenderSegLoop(drawcolumndata_t* dc)
|
||||
{
|
||||
for (i = 0; i < dc->numlights; i++)
|
||||
{
|
||||
dc->lightlist[i].height += dc->lightlist[i].heightstep;
|
||||
dc->lightlist[i].height = FixedClamp((INT64)dc->lightlist[i].height + dc->lightlist[i].heightstep);
|
||||
|
||||
if (dc->lightlist[i].flags & FF_CUTSOLIDS)
|
||||
dc->lightlist[i].botheight += dc->lightlist[i].botheightstep;
|
||||
dc->lightlist[i].botheight = FixedClamp((INT64)dc->lightlist[i].botheight + dc->lightlist[i].botheightstep);;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1569,9 +1556,10 @@ static void R_RenderSegLoop(drawcolumndata_t* dc)
|
||||
visffloor[i].b_frac += visffloor[i].b_step;
|
||||
}
|
||||
|
||||
rw_scale += rw_scalestep;
|
||||
topfrac += topstep;
|
||||
bottomfrac += bottomstep;
|
||||
rw_scale = FixedClamp((INT64)rw_scale + rw_scalestep);
|
||||
|
||||
topfrac = FixedClamp((INT64)topfrac + topstep);
|
||||
bottomfrac = FixedClamp((INT64)bottomfrac + bottomstep);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1585,7 +1573,7 @@ static void R_MarkSegBounds(void)
|
||||
for (; rw_x < rw_stopx; rw_x++)
|
||||
{
|
||||
// mark floor / ceiling areas
|
||||
yl = (topfrac+HEIGHTUNIT-1)>>HEIGHTBITS;
|
||||
yl = FixedClamp((INT64)topfrac + HEIGHTUNIT-1)>>HEIGHTBITS;
|
||||
yh = bottomfrac>>HEIGHTBITS;
|
||||
|
||||
// Mark ceiling
|
||||
@@ -1822,7 +1810,7 @@ void R_StoreWallRange(INT32 start, INT32 stop)
|
||||
|
||||
// big room fix
|
||||
if (longboi)
|
||||
rw_distance = (fixed_t)R_CalcSegDist(curline,viewx,viewy);
|
||||
rw_distance = FixedClamp(R_CalcSegDist(curline, viewx, viewy));
|
||||
|
||||
ds_p->x1 = rw_x = start;
|
||||
ds_p->x2 = stop;
|
||||
@@ -2205,8 +2193,8 @@ void R_StoreWallRange(INT32 start, INT32 stop)
|
||||
}
|
||||
}
|
||||
|
||||
rw_toptexturemid += sidedef->rowoffset;
|
||||
rw_bottomtexturemid += sidedef->rowoffset;
|
||||
rw_toptexturemid = FixedClamp((INT64)rw_toptexturemid + sidedef->rowoffset);
|
||||
rw_bottomtexturemid = FixedClamp((INT64)rw_bottomtexturemid + sidedef->rowoffset);
|
||||
|
||||
R_AllocTextureColumnTables(rw_stopx - start);
|
||||
|
||||
@@ -2491,8 +2479,9 @@ void R_StoreWallRange(INT32 start, INT32 stop)
|
||||
rw_offset = -rw_offset;
|
||||
|
||||
/// don't use texture offset for splats
|
||||
rw_offset2 = rw_offset + curline->offset;
|
||||
rw_offset += sidedef->textureoffset + curline->offset;
|
||||
rw_offset2 = FixedClamp((INT64)rw_offset + curline->offset);
|
||||
rw_offset = FixedClamp((INT64)rw_offset + (INT64)sidedef->textureoffset + curline->offset);
|
||||
|
||||
rw_centerangle = ANGLE_90 + viewangle - rw_normalangle;
|
||||
|
||||
// calculate light table
|
||||
@@ -2552,8 +2541,8 @@ void R_StoreWallRange(INT32 start, INT32 stop)
|
||||
|
||||
auto set_topstep_normal = [&]
|
||||
{
|
||||
topstep = -FixedMul (rw_scalestep, worldtop);
|
||||
topfrac = (centeryfrac>>4) - FixedMul (worldtop, rw_scale);
|
||||
topstep = -FixedMul(rw_scalestep, worldtop);
|
||||
topfrac = FixedClamp((INT64)(centeryfrac>>4) - FixedMul(worldtop, rw_scale));
|
||||
};
|
||||
|
||||
// untextured seg
|
||||
@@ -2574,14 +2563,14 @@ void R_StoreWallRange(INT32 start, INT32 stop)
|
||||
// this is an attempt to fix issues with textureless single sided lines drawing nothing where they should just draw sky instead
|
||||
if (tophigh && !backsector && frontsector->ceilingpic == skyflatnum)
|
||||
{
|
||||
topstep = -FixedMul (rw_scalestep, worldbottom);
|
||||
topfrac = (centeryfrac>>4) - FixedMul (worldbottom, rw_scale);
|
||||
topstep = -FixedMul(rw_scalestep, worldbottom);
|
||||
topfrac = FixedClamp((INT64)(centeryfrac>>4) - FixedMul(worldbottom, rw_scale));
|
||||
|
||||
// account for slopes to try and get rid of sharp edges from the black void
|
||||
if (frontsector->f_slope || (backsector && backsector->f_slope))
|
||||
{
|
||||
topstep = -FixedMul (rw_scalestep, worldbottomslope);
|
||||
topfrac = (centeryfrac>>4) - FixedMul (worldbottomslope, rw_scale);
|
||||
topstep = -FixedMul(rw_scalestep, worldbottomslope);
|
||||
topfrac = FixedClamp((INT64)(centeryfrac>>4) - FixedMul(worldbottomslope, rw_scale));
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -2590,18 +2579,18 @@ void R_StoreWallRange(INT32 start, INT32 stop)
|
||||
else
|
||||
set_topstep_normal();
|
||||
|
||||
bottomstep = -FixedMul (rw_scalestep, worldbottom);
|
||||
bottomfrac = (centeryfrac>>4) - FixedMul (worldbottom, rw_scale);
|
||||
bottomstep = -FixedMul(rw_scalestep, worldbottom);
|
||||
bottomfrac = FixedClamp((INT64)(centeryfrac>>4) - FixedMul(worldbottom, rw_scale));
|
||||
|
||||
if (frontsector->c_slope)
|
||||
{
|
||||
fixed_t topfracend = (centeryfrac>>4) - FixedMul (worldtopslope, ds_p->scale2);
|
||||
fixed_t topfracend = FixedClamp((INT64)(centeryfrac>>4) - FixedMul(worldtopslope, ds_p->scale2));
|
||||
topstep = (topfracend-topfrac)/(range);
|
||||
}
|
||||
|
||||
if (frontsector->f_slope)
|
||||
{
|
||||
fixed_t bottomfracend = (centeryfrac>>4) - FixedMul (worldbottomslope, ds_p->scale2);
|
||||
fixed_t bottomfracend = FixedClamp((INT64)(centeryfrac>>4) - FixedMul(worldbottomslope, ds_p->scale2));
|
||||
bottomstep = (bottomfracend-bottomfrac)/(range);
|
||||
}
|
||||
}
|
||||
@@ -2643,9 +2632,9 @@ void R_StoreWallRange(INT32 start, INT32 stop)
|
||||
continue;
|
||||
}
|
||||
|
||||
rlight->height = (centeryfrac>>4) - FixedMul(leftheight, rw_scale);
|
||||
rlight->heightstep = (centeryfrac>>4) - FixedMul(rightheight, ds_p->scale2);
|
||||
rlight->heightstep = (rlight->heightstep-rlight->height)/(range);
|
||||
rlight->height = FixedClamp((INT64)(centeryfrac>>4) - FixedMul(leftheight, rw_scale));
|
||||
rlight->heightstep = FixedClamp((INT64)(centeryfrac>>4) - FixedMul(rightheight, ds_p->scale2));
|
||||
rlight->heightstep = FixedClamp((INT64)rlight->heightstep - rlight->height)/(range);
|
||||
rlight->flags = static_cast<ffloortype_e>(light->flags);
|
||||
|
||||
if (light->caster && light->caster->flags & FF_CUTSOLIDS)
|
||||
@@ -2707,9 +2696,9 @@ void R_StoreWallRange(INT32 start, INT32 stop)
|
||||
|
||||
if (toptexture)
|
||||
{
|
||||
fixed_t topfracend = (centeryfrac>>4) - FixedMul(worldhighslope, ds_p->scale2);
|
||||
fixed_t topfracend = FixedClamp((INT64)(centeryfrac>>4) - FixedMul(worldhighslope, ds_p->scale2));
|
||||
|
||||
pixhigh = (centeryfrac>>4) - FixedMul (worldhigh, rw_scale);
|
||||
pixhigh = FixedClamp((INT64)(centeryfrac>>4) - FixedMul(worldhigh, rw_scale));
|
||||
pixhighstep = (topfracend-pixhigh)/(range);
|
||||
|
||||
// If the lowest part of a ceiling stretching down covers the entire screen
|
||||
@@ -2719,9 +2708,9 @@ void R_StoreWallRange(INT32 start, INT32 stop)
|
||||
|
||||
if (bottomtexture)
|
||||
{
|
||||
fixed_t bottomfracend = (centeryfrac>>4) - FixedMul (worldlowslope, ds_p->scale2);
|
||||
fixed_t bottomfracend = FixedClamp((INT64)(centeryfrac>>4) - FixedMul(worldlowslope, ds_p->scale2));
|
||||
|
||||
pixlow = (centeryfrac>>4) - FixedMul (worldlow, rw_scale);
|
||||
pixlow = FixedClamp((INT64)(centeryfrac>>4) - FixedMul(worldlow, rw_scale));
|
||||
pixlowstep = (bottomfracend-pixlow)/(range);
|
||||
|
||||
// If the highest part of a floor stretching up covers the entire screen
|
||||
@@ -2742,8 +2731,8 @@ void R_StoreWallRange(INT32 start, INT32 stop)
|
||||
visffloor[i].b_pos_slope = roverright;
|
||||
visffloor[i].b_pos >>= 4;
|
||||
visffloor[i].b_pos_slope >>= 4;
|
||||
visffloor[i].b_frac = (centeryfrac >> 4) - FixedMul(visffloor[i].b_pos, rw_scale);
|
||||
visffloor[i].b_step = (centeryfrac >> 4) - FixedMul(visffloor[i].b_pos_slope, ds_p->scale2);
|
||||
visffloor[i].b_frac = FixedClamp((INT64)(centeryfrac>>4) - FixedMul(visffloor[i].b_pos, rw_scale));
|
||||
visffloor[i].b_step = FixedClamp((INT64)(centeryfrac>>4) - FixedMul(visffloor[i].b_pos_slope, ds_p->scale2));
|
||||
visffloor[i].b_step = (visffloor[i].b_step-visffloor[i].b_frac)/(range);
|
||||
};
|
||||
|
||||
@@ -2849,7 +2838,7 @@ void R_StoreWallRange(INT32 start, INT32 stop)
|
||||
visffloor[i].b_pos = height;
|
||||
visffloor[i].b_pos = (visffloor[i].b_pos - viewz) >> 4;
|
||||
visffloor[i].b_step = FixedMul(-rw_scalestep, visffloor[i].b_pos);
|
||||
visffloor[i].b_frac = (centeryfrac >> 4) - FixedMul(visffloor[i].b_pos, rw_scale);
|
||||
visffloor[i].b_frac = FixedClamp((INT64)(centeryfrac>>4) - FixedMul(visffloor[i].b_pos, rw_scale));
|
||||
};
|
||||
|
||||
while (i < numffloors && visffloor[i].polyobj != curline->polyseg)
|
||||
|
||||
@@ -92,7 +92,6 @@ INT32 R_LocalSkinAvailable(const char *name, boolean local);
|
||||
// had to move those here Zzz...
|
||||
INT32 K_GetSkinNum(player_t *player);
|
||||
INT32 K_GetMobjSkinNum(const skin_t *skin, boolean local);
|
||||
INT32 K_GetMobjLocalSkinNum(const skin_t *skin, const skin_t *localskin, boolean local);
|
||||
skin_t *K_GetPlayerSkin(player_t *player);
|
||||
skin_t *K_GetMobjSkin(const mobj_t *mobj);
|
||||
patch_t *K_GetFacePrefix(player_t *player, INT32 skinnum);
|
||||
|
||||
+10
-5
@@ -11,6 +11,7 @@
|
||||
/// \file r_things.c
|
||||
/// \brief Refresh of things, i.e. objects represented by sprites
|
||||
|
||||
#include "m_fixed.h"
|
||||
#include "r_main.h" // stplyr
|
||||
#include "r_fps.h"
|
||||
#include "r_things.h"
|
||||
@@ -391,7 +392,7 @@ boolean R_AddSingleSpriteDef(const char *sprname, spritedef_t *spritedef, UINT16
|
||||
|
||||
// allocate space for the frames present and copy sprtemp to it
|
||||
if (spritedef->numframes && // has been allocated
|
||||
spritedef->numframes < maxframe) // more frames are defined ?
|
||||
spritedef->numframes < maxframe) // more frames are defined ?
|
||||
{
|
||||
|
||||
Z_Free(spritedef->spriteframes);
|
||||
@@ -616,10 +617,11 @@ void R_DrawMaskedColumn(drawcolumndata_t* dc, column_t *column)
|
||||
if (topdelta <= prevdelta)
|
||||
topdelta += prevdelta;
|
||||
prevdelta = topdelta;
|
||||
topscreen = sprtopscreen + spryscale*topdelta;
|
||||
bottomscreen = topscreen + spryscale*column->length;
|
||||
|
||||
dc->yl = (topscreen+FRACUNIT-1)>>FRACBITS;
|
||||
topscreen = FixedClamp((INT64)sprtopscreen + (INT64)spryscale * (INT64)topdelta);
|
||||
bottomscreen = FixedClamp((INT64)topscreen + (INT64)spryscale * (INT64)column->length);
|
||||
|
||||
dc->yl = FixedClamp((INT64)topscreen + (FRACUNIT-1))>>FRACBITS;
|
||||
dc->yh = (bottomscreen-1)>>FRACBITS;
|
||||
|
||||
if (windowtop != INT32_MAX && windowbottom != INT32_MAX)
|
||||
@@ -885,7 +887,7 @@ static void R_DrawVisSprite(vissprite_t *vis)
|
||||
for (dc.x = vis->x1; dc.x <= vis->x2; dc.x++, spryscale += scalestep)
|
||||
{
|
||||
angle_t angle = ((vis->centerangle + xtoviewangle[dc.x]) >> ANGLETOFINESHIFT) & 0xFFF;
|
||||
texturecolumn = (vis->paperoffset - FixedMul(FINETANGENT(angle), vis->paperdistance)) / horzscale;
|
||||
texturecolumn = FixedClamp((INT64)vis->paperoffset - FixedMul(FINETANGENT(angle), vis->paperdistance)) / horzscale;
|
||||
|
||||
if (texturecolumn < 0 || texturecolumn >= pwidth)
|
||||
continue;
|
||||
@@ -1855,6 +1857,9 @@ static void R_ProjectSprite(mobj_t *thing)
|
||||
|
||||
if (thing->subsector->sector->numlights)
|
||||
R_SplitSprite(vis);
|
||||
|
||||
// Debug
|
||||
++objectsdrawn;
|
||||
}
|
||||
|
||||
static void R_ProjectPrecipitationSprite(precipmobj_t *thing)
|
||||
|
||||
+2
-1
@@ -473,12 +473,13 @@ void S_StartSoundAtVolume(const void *origin_p, sfxenum_t sfx_id, INT32 volume)
|
||||
return;
|
||||
|
||||
memset(listener, 0, sizeof(listener));
|
||||
memset(listenmobj, 0, sizeof(listenmobj));
|
||||
|
||||
for (i = 0; i <= splitscreen; i++)
|
||||
{
|
||||
player_t *player = &players[displayplayers[i]];
|
||||
|
||||
listenmobj[i] = NULL;
|
||||
|
||||
if (player->awayviewtics)
|
||||
{
|
||||
listenmobj[i] = player->awayviewmobj;
|
||||
|
||||
+19
-17
@@ -1577,7 +1577,7 @@ static void write_backtrace(bt_crash_reason_t reason)
|
||||
static std::thread::id g_main_thread_id;
|
||||
#endif
|
||||
|
||||
static volatile sig_atomic_t g_in_exiting_signal_handler = false;
|
||||
boolean g_in_exiting_signal_handler = false;
|
||||
|
||||
static void I_PrintSignal(INT32 signal_num, boolean core_dumped, char *signal_msg, char *signal_name)
|
||||
{
|
||||
@@ -1712,11 +1712,6 @@ static void I_ReportSignal(int num, int coredumped)
|
||||
I_ShowErrorBox(sigttl, sigmsg);
|
||||
}
|
||||
|
||||
boolean I_In_Exiting_Signal_Handler(void)
|
||||
{
|
||||
return g_in_exiting_signal_handler;
|
||||
}
|
||||
|
||||
#ifndef NEWSIGNALHANDLER
|
||||
FUNCNORETURN static ATTRNORETURN void signal_handler(INT32 num)
|
||||
{
|
||||
@@ -1746,17 +1741,21 @@ FUNCNORETURN static ATTRNORETURN void signal_handler(INT32 num)
|
||||
}
|
||||
#endif
|
||||
|
||||
static volatile sig_atomic_t interrupted = false;
|
||||
|
||||
boolean I_Interrupted(void)
|
||||
FUNCNORETURN static ATTRNORETURN void quit_handler(int num)
|
||||
{
|
||||
return interrupted;
|
||||
}
|
||||
#ifdef HAVE_THREADS
|
||||
if (g_main_thread_id != std::this_thread::get_id())
|
||||
{
|
||||
// Do not attempt any sort of recovery if this signal triggers off the main thread
|
||||
signal(num, SIG_DFL);
|
||||
raise(num);
|
||||
exit(-2);
|
||||
}
|
||||
#endif
|
||||
|
||||
static void quit_handler(int num)
|
||||
{
|
||||
(void)num;
|
||||
interrupted = true;
|
||||
signal(num, SIG_DFL); //default signal action
|
||||
raise(num);
|
||||
I_Quit();
|
||||
}
|
||||
|
||||
static void I_RegisterSignals(void)
|
||||
@@ -1842,15 +1841,18 @@ static void I_Fork(void)
|
||||
I_RegisterChildSignals();
|
||||
break;
|
||||
default:
|
||||
#ifdef LOGMESSAGES
|
||||
if (logstream)
|
||||
fclose(logstream);/* the child has this */
|
||||
#endif
|
||||
|
||||
c = wait(&status);
|
||||
|
||||
#ifdef LOGMESSAGES
|
||||
/* By the way, exit closes files. */
|
||||
logstream = fopen(logfilename, "at");
|
||||
#else
|
||||
logstream = 0;
|
||||
#endif
|
||||
|
||||
if (c == -1)
|
||||
{
|
||||
kill(child, SIGKILL);
|
||||
|
||||
+3
-4
@@ -1164,8 +1164,8 @@ void I_GetEvent(void)
|
||||
SDL_GetWindowSize(window, &wwidth, &wheight);
|
||||
event.type = ev_mouse;
|
||||
event.data1 = 0;
|
||||
event.data2 = (INT32)lroundf(mousemovex * ((float)wwidth / (float)realwidth));
|
||||
event.data3 = (INT32)lroundf(mousemovey * ((float)wheight / (float)realheight));
|
||||
event.data2 = (INT32)lround(mousemovex * ((float)wwidth / (float)realwidth));
|
||||
event.data3 = (INT32)lround(mousemovey * ((float)wheight / (float)realheight));
|
||||
D_PostEvent(&event);
|
||||
}
|
||||
|
||||
@@ -2027,8 +2027,7 @@ void I_ShutdownGraphics(void)
|
||||
SDL_DestroyWindow(window);
|
||||
window = NULL;
|
||||
|
||||
if (SDL_WasInit(SDL_INIT_VIDEO) == SDL_INIT_VIDEO)
|
||||
SDL_QuitSubSystem(SDL_INIT_VIDEO);
|
||||
SDL_QuitSubSystem(SDL_INIT_VIDEO);
|
||||
framebuffer = SDL_FALSE;
|
||||
}
|
||||
|
||||
|
||||
@@ -237,8 +237,7 @@ void I_ShutdownSound(void)
|
||||
Mix_Quit();
|
||||
#endif
|
||||
|
||||
if (SDL_WasInit(SDL_INIT_AUDIO) == SDL_INIT_AUDIO)
|
||||
SDL_QuitSubSystem(SDL_INIT_AUDIO);
|
||||
SDL_QuitSubSystem(SDL_INIT_AUDIO);
|
||||
|
||||
#ifdef HAVE_LIBGME
|
||||
if (gme)
|
||||
|
||||
@@ -52,6 +52,8 @@
|
||||
|
||||
#include "r_fps.h"
|
||||
|
||||
UINT16 objectsdrawn = 0;
|
||||
|
||||
// dumb fade thing for director toggle
|
||||
tic_t directortoggletimer = 0;
|
||||
|
||||
|
||||
@@ -134,6 +134,8 @@ typedef enum
|
||||
|
||||
extern hudinfo_t hudinfo[NUMHUDITEMS];
|
||||
|
||||
extern UINT16 objectsdrawn;
|
||||
|
||||
// variable to stop mayonaka static from flickering
|
||||
extern consvar_t cv_lessflicker;
|
||||
extern consvar_t cv_stagetitle;
|
||||
|
||||
+3
-1
@@ -3716,7 +3716,9 @@ void V_DoPostProcessor(INT32 view, INT32 param)
|
||||
// Make sure table is built
|
||||
if (heatshifter == NULL || lastheight != viewheight)
|
||||
{
|
||||
Z_Free(heatshifter);
|
||||
if (heatshifter)
|
||||
Z_Free(heatshifter);
|
||||
|
||||
heatshifter = Z_Calloc(viewheight * sizeof(boolean), PU_STATIC, NULL);
|
||||
|
||||
for (y = 0; y < viewheight; y++)
|
||||
|
||||
+5
-4
@@ -122,9 +122,7 @@ void W_Shutdown(void)
|
||||
|
||||
if (wad->handle)
|
||||
fclose(wad->handle);
|
||||
|
||||
Z_Free(wad->filename);
|
||||
|
||||
while (wad->numlumps--)
|
||||
{
|
||||
Z_Free(wad->lumpinfo[wad->numlumps].longname);
|
||||
@@ -455,7 +453,7 @@ static lumpinfo_t* ResGetLumpsWad(FILE* handle, UINT16* nlmp, const char* filena
|
||||
header.infotableofs = LONG(header.infotableofs);
|
||||
|
||||
// read wad file directory
|
||||
i = header.numlumps * sizeof(*fileinfo);
|
||||
i = header.numlumps * sizeof (*fileinfo);
|
||||
fileinfov = fileinfo = malloc(i);
|
||||
|
||||
if (fseek(handle, header.infotableofs, SEEK_SET) == -1
|
||||
@@ -2732,7 +2730,10 @@ void vres_Free(virtres_t* vres)
|
||||
|
||||
while (vres->numlumps--)
|
||||
{
|
||||
Z_Free(vres->vlumps[vres->numlumps].data);
|
||||
if (vres->vlumps[vres->numlumps].data)
|
||||
{
|
||||
Z_Free(vres->vlumps[vres->numlumps].data);
|
||||
}
|
||||
}
|
||||
|
||||
Z_Free(vres->vlumps);
|
||||
|
||||
+1
-1
@@ -91,7 +91,7 @@ void Z_Init(void);
|
||||
|
||||
// Z_Free and alloc with alignment
|
||||
#ifdef ZDEBUG
|
||||
#define Z_Free(p) Z_Free2(p, __FILE__, __LINE__)
|
||||
#define Z_Free(p) Z_Free2(p, __FILE__, __LINE__)
|
||||
#define Z_Malloc(s,t,u) Z_Malloc2(s, t, u, __FILE__, __LINE__)
|
||||
#define Z_Calloc(s,t,u) Z_Calloc2(s, t, u, __FILE__, __LINE__)
|
||||
#define Z_Realloc(p,s,t,u) Z_Realloc2(p,s, t, u, __FILE__, __LINE__)
|
||||
|
||||
Reference in new issue
Block a user