Compare commits
18
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b84e6d89e2 | ||
|
|
42fa435a0b | ||
|
|
873cff4474 | ||
|
|
e543599598 | ||
|
|
9d75bb1405 | ||
|
|
7b0e3269b3 | ||
|
|
12169bfb38 | ||
|
|
4dd5957f19 | ||
|
|
0fadfe0f72 | ||
|
|
621df7e296 | ||
|
|
17d72e02fe | ||
|
|
cd76660314 | ||
|
|
06a9ab785e | ||
|
|
6760546bcd | ||
|
|
b44e003ab9 | ||
|
|
6a1c907aa4 | ||
|
|
fded8cc562 | ||
|
|
43465c0e3f |
No files matched your search
+1
-1
@@ -1194,7 +1194,7 @@ consvar_t *CV_FindVar(const char *name)
|
||||
static inline UINT16 CV_ComputeNetid(const char *s)
|
||||
{
|
||||
UINT16 ret = 0, i = 0;
|
||||
static UINT16 premiers[16] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53};
|
||||
static const UINT16 premiers[16] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53};
|
||||
|
||||
while (*s)
|
||||
{
|
||||
|
||||
+1
-1
@@ -852,7 +852,7 @@ boolean CON_Responder(event_t *ev)
|
||||
return true;
|
||||
|
||||
// ctrl modifier -- changes behavior, adds shortcuts
|
||||
if (ctrldown && (cv_keyboardlayout.value != 3 || (cv_keyboardlayout.value == 3 && !altdown)))
|
||||
if (ctrldown && (cv_keyboardlayout.value != 3 || !altdown))
|
||||
{
|
||||
// show all cvars/commands that match what we have inputted
|
||||
if (key == KEY_TAB)
|
||||
|
||||
+82
-11
@@ -1154,6 +1154,67 @@ static void CV_LoadPlayerNames(UINT8 **p)
|
||||
}
|
||||
}
|
||||
|
||||
static void CL_DrawAddonTypes(void)
|
||||
{
|
||||
if (!cv_serveraddoninfo.value)
|
||||
return;
|
||||
|
||||
INT32 y = 0;
|
||||
|
||||
INT32 addontypes_downloaded[NUMADDONTYPES] = {0};
|
||||
|
||||
for (INT32 i = 0; i < fileneedednum; ++i)
|
||||
{
|
||||
switch (fileneeded[i].status)
|
||||
{
|
||||
case FS_FOUND:
|
||||
case FS_OPEN:
|
||||
addontypes_downloaded[fileneeded[i].type]++;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (addontype_t type = 0; type < NUMADDONTYPES; ++type)
|
||||
{
|
||||
if (addontypes[type] == 0)
|
||||
continue;
|
||||
|
||||
INT32 flags = V_SNAPTOTOP|V_SNAPTOLEFT|V_ALLOWLOWERCASE;
|
||||
|
||||
if (addontypes[type] == addontypes_downloaded[type])
|
||||
flags |= V_GREENMAP;
|
||||
else
|
||||
flags |= V_YELLOWMAP;
|
||||
|
||||
const char *typestr = "Misc";
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case ADDON_SCRIPT:
|
||||
typestr = "Script";
|
||||
break;
|
||||
|
||||
case ADDON_MAP:
|
||||
typestr = "Map";
|
||||
break;
|
||||
|
||||
case ADDON_CHARACTER:
|
||||
typestr = "Character";
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
V_DrawSmallString(4, 4 + y, flags, va("%s addons", typestr));
|
||||
V_DrawRightAlignedSmallString(100, 4 + y, flags, va("%d/%d", addontypes_downloaded[type], addontypes[type]));
|
||||
y += 6;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// CL_DrawConnectionStatus
|
||||
//
|
||||
@@ -1269,6 +1330,8 @@ static void CL_DrawConnectionStatus(void)
|
||||
V_DrawFill(BASEVIDWIDTH/2-128, BASEVIDHEIGHT-24, totalfileslength, 8, 160);
|
||||
V_DrawCenteredString(BASEVIDWIDTH/2, BASEVIDHEIGHT-24, V_20TRANS|V_MONOSPACE|MENUCAPS,
|
||||
va(" %2u/%2u Files", checkednum, fileneedednum));
|
||||
|
||||
CL_DrawAddonTypes();
|
||||
}
|
||||
else if (cl_mode == CL_LOADFILES)
|
||||
{
|
||||
@@ -1292,6 +1355,8 @@ static void CL_DrawConnectionStatus(void)
|
||||
V_DrawFill(BASEVIDWIDTH/2-128, BASEVIDHEIGHT-24, totalfileslength, 8, 160);
|
||||
V_DrawCenteredString(BASEVIDWIDTH/2, BASEVIDHEIGHT-24, V_20TRANS|V_MONOSPACE|MENUCAPS,
|
||||
va(" %2u/%2u Files", loadcompletednum, fileneedednum));
|
||||
|
||||
CL_DrawAddonTypes();
|
||||
}
|
||||
else if (cl_mode == CL_VIEWSERVER)
|
||||
{
|
||||
@@ -1495,6 +1560,8 @@ static void CL_DrawConnectionStatus(void)
|
||||
|
||||
V_DrawRightAlignedString(BASEVIDWIDTH/2+128, BASEVIDHEIGHT-24, V_20TRANS|V_MONOSPACE|MENUCAPS,
|
||||
va("%2u/%2u Files ", filedownload.completednum, filedownload.totalnum));
|
||||
|
||||
CL_DrawAddonTypes();
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1511,6 +1578,8 @@ static void CL_DrawConnectionStatus(void)
|
||||
|
||||
V_DrawCenteredString(BASEVIDWIDTH/2, BASEVIDHEIGHT-24-32, V_YELLOWMAP|MENUCAPS,
|
||||
M_GetText("Waiting to download files..."));
|
||||
|
||||
CL_DrawAddonTypes();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2509,7 +2578,7 @@ static boolean CL_FinishedFileList(void)
|
||||
* \sa CL_ConnectToServer
|
||||
*
|
||||
*/
|
||||
static boolean CL_ServerConnectionSearchTicker(tic_t *asksent)
|
||||
static void CL_ServerConnectionSearchTicker(tic_t *asksent)
|
||||
{
|
||||
INT32 i;
|
||||
|
||||
@@ -2527,7 +2596,7 @@ static boolean CL_ServerConnectionSearchTicker(tic_t *asksent)
|
||||
{
|
||||
i = SL_SearchServer(servernode);
|
||||
if (i < 0)
|
||||
return true;
|
||||
return;
|
||||
}
|
||||
|
||||
joinnode = i;
|
||||
@@ -2555,10 +2624,11 @@ static boolean CL_ServerConnectionSearchTicker(tic_t *asksent)
|
||||
{
|
||||
cl_mode = CL_ASKFULLFILELIST;
|
||||
cl_lastcheckedfilecount = 0;
|
||||
return true;
|
||||
return;
|
||||
}
|
||||
|
||||
cl_mode = cv_serverinfoscreen.value ? CL_VIEWSERVER : CL_CHECKFILES;
|
||||
CL_CheckAddonTypes();
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -2566,7 +2636,7 @@ static boolean CL_ServerConnectionSearchTicker(tic_t *asksent)
|
||||
*asksent = 0;
|
||||
}
|
||||
|
||||
return true;
|
||||
return;
|
||||
}
|
||||
|
||||
// Ask the info to the server (askinfo packet)
|
||||
@@ -2576,7 +2646,6 @@ static boolean CL_ServerConnectionSearchTicker(tic_t *asksent)
|
||||
*asksent = I_GetTime() + NEWTICRATE;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static void FreeMapIcon(void)
|
||||
@@ -2608,13 +2677,15 @@ static boolean CL_ServerConnectionTicker(const char *tmpsave, tic_t *oldtic, tic
|
||||
switch (cl_mode)
|
||||
{
|
||||
case CL_SEARCHING:
|
||||
if (!CL_ServerConnectionSearchTicker(asksent))
|
||||
return false;
|
||||
CL_ServerConnectionSearchTicker(asksent);
|
||||
break;
|
||||
|
||||
case CL_ASKFULLFILELIST:
|
||||
if (cl_lastcheckedfilecount == UINT16_MAX) // All files retrieved
|
||||
{
|
||||
cl_mode = cv_serverinfoscreen.value ? CL_VIEWSERVER : CL_CHECKFILES;
|
||||
CL_CheckAddonTypes();
|
||||
}
|
||||
else if (fileneedednum != cl_lastcheckedfilecount || I_GetTime() >= *asksent)
|
||||
{
|
||||
if (CL_AskFileList(fileneedednum))
|
||||
@@ -4216,6 +4287,8 @@ consvar_t cv_connectawaittime = {"connectawaittime", "5", CV_SAVE, connectawaitt
|
||||
|
||||
consvar_t cv_serverinfoscreen = {"serverinfoscreen", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
|
||||
consvar_t cv_serveraddoninfo = {"serveraddoninfo", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
|
||||
static void Got_AddPlayer(const UINT8 **p, INT32 playernum);
|
||||
static void Got_RemovePlayer(const UINT8 **p, INT32 playernum);
|
||||
|
||||
@@ -5905,13 +5978,11 @@ static void PT_ServerTics(SINT8 node)
|
||||
realend = gametic + CLIENTBACKUPTICS;
|
||||
cl_packetmissed = realstart > neededtic;
|
||||
|
||||
UINT8 *pak = (UINT8 *)&packet->cmds;
|
||||
UINT8 *txtpak = (UINT8 *)&packet->cmds[packet->numslots * packet->numtics];
|
||||
|
||||
if (realstart <= neededtic && realend > neededtic)
|
||||
{
|
||||
tic_t i, j;
|
||||
pak = (UINT8 *)&packet->cmds;
|
||||
UINT8 *pak = (UINT8 *)&packet->cmds;
|
||||
UINT8 *txtpak = (UINT8 *)&packet->cmds[packet->numslots * packet->numtics];
|
||||
|
||||
for (i = realstart; i < realend; i++)
|
||||
{
|
||||
|
||||
@@ -600,6 +600,8 @@ extern consvar_t cv_discordinvites;
|
||||
|
||||
extern consvar_t cv_serverinfoscreen;
|
||||
|
||||
extern consvar_t cv_serveraddoninfo;
|
||||
|
||||
// Used in d_net, the only dependence
|
||||
//tic_t ExpandTics(INT32 low, tic_t basetic);
|
||||
void D_ClientServerInit(void);
|
||||
|
||||
+5
-1
@@ -2043,9 +2043,13 @@ void D_SRB2Main(void)
|
||||
if (M_CheckProtoParam("replay"))
|
||||
{
|
||||
const char *replayurl = M_GetProtoParam();
|
||||
|
||||
if (!replayurl)
|
||||
I_Error("REPLAY: Invalid URL.");
|
||||
|
||||
gconst char *replayname = strrchr(replayurl, '/');
|
||||
|
||||
if (!replayname || !replayurl)
|
||||
if (!replayname)
|
||||
I_Error("REPLAY: Invalid URL.");
|
||||
|
||||
#define REPLAYDIR "/DownloadedReplays/"
|
||||
|
||||
+2
-1
@@ -900,6 +900,7 @@ void D_RegisterClientCommands(void)
|
||||
CV_RegisterVar(&cv_mindelay);
|
||||
CV_RegisterVar(&cv_gentlemens);
|
||||
CV_RegisterVar(&cv_serverinfoscreen);
|
||||
CV_RegisterVar(&cv_serveraddoninfo);
|
||||
|
||||
#ifdef NETGAME_DEVMODE
|
||||
CV_RegisterVar(&cv_fishcake);
|
||||
@@ -1631,7 +1632,7 @@ static void SendNameAndColor(UINT8 splitplayer)
|
||||
static void Got_NameAndColor(const UINT8 **cp, INT32 playernum)
|
||||
{
|
||||
player_t *player = &players[playernum];
|
||||
char name[MAXPLAYERNAME+1];
|
||||
char name[MAXPLAYERNAME+1] = {};
|
||||
UINT8 color, skin;
|
||||
|
||||
#ifdef PARANOIA
|
||||
|
||||
@@ -155,6 +155,7 @@ extern consvar_t cv_pingstyle;
|
||||
|
||||
//extern consvar_t cv_smallpos;
|
||||
extern consvar_t cv_showminimapnames;
|
||||
extern consvar_t cv_showminimapfinished;
|
||||
extern consvar_t cv_minihead;
|
||||
extern consvar_t cv_showminimapangle;
|
||||
|
||||
|
||||
+50
-1
@@ -116,6 +116,8 @@ static I_mutex downloadmutex;
|
||||
#endif
|
||||
char downloaddir[512] = "DOWNLOAD";
|
||||
|
||||
INT32 addontypes[NUMADDONTYPES] = {0};
|
||||
|
||||
file_download_t filedownload = {};
|
||||
|
||||
#ifdef HAVE_CURL
|
||||
@@ -135,6 +137,8 @@ HTTP_login *curl_logins = NULL;
|
||||
static void CURLGetFile(void);
|
||||
#endif
|
||||
|
||||
static addontype_t GetAddonType(const char *name);
|
||||
|
||||
/** Fills a serverinfo packet with information about wad files loaded.
|
||||
*
|
||||
* \todo Give this function a better name since it is in global scope.
|
||||
@@ -225,8 +229,11 @@ void D_ParseFileneeded(INT32 fileneedednum_parm, UINT8 *fileneededstr, UINT16 fi
|
||||
fileneeded[i].willsend = (UINT8)(filestatus >> 4);
|
||||
fileneeded[i].totalsize = READUINT32(p); // The four next bytes are the file size
|
||||
fileneeded[i].file = NULL; // The file isn't open yet
|
||||
READSTRINGN(p, fileneeded[i].filename, MAX_WADPATH); // The next bytes are the file name
|
||||
READSTRINGL(p, fileneeded[i].filename, MAX_WADPATH); // The next bytes are the file name
|
||||
READMEM(p, fileneeded[i].md5sum, 16); // The last 16 bytes are the file checksum
|
||||
|
||||
// Should be good place to calculate that?
|
||||
fileneeded[i].type = GetAddonType(fileneeded[i].filename);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -575,6 +582,48 @@ INT32 CL_CheckFiles(void)
|
||||
return 1; //everything is FS_OPEN or FS_FOUND, proceed to loading
|
||||
}
|
||||
|
||||
static addontype_t GetAddonType(const char *name)
|
||||
{
|
||||
const char *prefix = strchr(name, '_');
|
||||
|
||||
// Doesn't have prefix (no '_' character or it is too far and is probably not for prefix but for something like version)
|
||||
// KRBCL_ is longest prefix i can think of so this should be enough
|
||||
if (prefix == NULL || prefix - name > 5)
|
||||
return ADDON_MISC;
|
||||
|
||||
// Skip 'K'
|
||||
if (*name == 'K')
|
||||
++name;
|
||||
|
||||
switch (*name)
|
||||
{
|
||||
case 'L':
|
||||
return ADDON_SCRIPT;
|
||||
break;
|
||||
|
||||
case 'R':
|
||||
case 'B':
|
||||
return ADDON_MAP;
|
||||
break;
|
||||
|
||||
case 'C':
|
||||
return ADDON_CHARACTER;
|
||||
break;
|
||||
}
|
||||
|
||||
return ADDON_MISC;
|
||||
}
|
||||
|
||||
void CL_CheckAddonTypes(void)
|
||||
{
|
||||
memset(&addontypes, 0, sizeof(addontypes));
|
||||
|
||||
for (INT32 i = 0; i < fileneedednum; i++)
|
||||
{
|
||||
addontypes[fileneeded[i].type]++;
|
||||
}
|
||||
}
|
||||
|
||||
// Load it now
|
||||
boolean CL_LoadServerFiles(void)
|
||||
{
|
||||
|
||||
@@ -40,6 +40,15 @@ typedef enum
|
||||
FS_FALLBACK, // HTTP failed
|
||||
} filestatus_t;
|
||||
|
||||
typedef enum addontype_e
|
||||
{
|
||||
ADDON_SCRIPT,
|
||||
ADDON_MAP,
|
||||
ADDON_CHARACTER,
|
||||
ADDON_MISC,
|
||||
NUMADDONTYPES,
|
||||
} addontype_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
UINT8 willsend; // Is the server willing to send it?
|
||||
@@ -51,11 +60,13 @@ typedef struct
|
||||
UINT32 totalsize;
|
||||
filestatus_t status; // The value returned by recsearch
|
||||
boolean justdownloaded; // To prevent late fragments from causing an I_Error
|
||||
addontype_t type;
|
||||
} fileneeded_t;
|
||||
|
||||
extern INT32 fileneedednum;
|
||||
extern fileneeded_t fileneeded[MAX_WADFILES];
|
||||
extern char downloaddir[512];
|
||||
extern INT32 addontypes[NUMADDONTYPES];
|
||||
|
||||
typedef struct
|
||||
{
|
||||
@@ -91,6 +102,7 @@ void D_ParseFileneeded(INT32 fileneedednum_parm, UINT8 *fileneededstr, UINT16 fi
|
||||
void CL_PrepareDownloadSaveGame(const char *tmpsave);
|
||||
|
||||
INT32 CL_CheckFiles(void);
|
||||
void CL_CheckAddonTypes(void);
|
||||
boolean CL_LoadServerFiles(void);
|
||||
void SV_SendRam(INT32 node, void *data, size_t size, freemethod_t freemethod,
|
||||
UINT8 fileid);
|
||||
|
||||
@@ -735,6 +735,18 @@ const char *I_GetJoyName(INT32 joyindex)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
boolean I_GamepadHasLED(INT32 playernum)
|
||||
{
|
||||
(void)playernum;
|
||||
return false;
|
||||
}
|
||||
|
||||
boolean I_GamepadHasRumble(INT32 playernum)
|
||||
{
|
||||
(void)playernum;
|
||||
return false;
|
||||
}
|
||||
|
||||
void I_GamepadRumble(INT32 playernum, UINT16 low_strength, UINT16 high_strength, UINT32 duration)
|
||||
{
|
||||
(void)playernum;
|
||||
|
||||
+107
-38
@@ -2812,12 +2812,6 @@ static void DEH_LoadDehackedFile(MYFILE *f, UINT16 wad)
|
||||
|
||||
deh_num_warning = 0;
|
||||
// save values for cross reference
|
||||
/*
|
||||
for (i = 0; i < NUMSTATES; i++)
|
||||
saveactions[i] = states[i].action;
|
||||
for (i = 0; i < NUMSPRITES; i++)
|
||||
savesprnames[i] = sprnames[i];
|
||||
*/
|
||||
for (i = 0; i < NUMSFX; i++)
|
||||
savesfxnames[i] = S_sfx[i].name;
|
||||
|
||||
@@ -3124,11 +3118,8 @@ static void DEH_LoadDehackedFile(MYFILE *f, UINT16 wad)
|
||||
if (deh_num_warning)
|
||||
{
|
||||
CONS_Printf(M_GetText("%d warning%s in the SOC lump\n"), deh_num_warning, deh_num_warning == 1 ? "" : "s");
|
||||
if (devparm) {
|
||||
if (devparm)
|
||||
I_Error("%s%s",va(M_GetText("%d warning%s in the SOC lump\n"), deh_num_warning, deh_num_warning == 1 ? "" : "s"), M_GetText("See log.txt for details.\n"));
|
||||
//while (!I_GetKey())
|
||||
//I_OsPolling();
|
||||
}
|
||||
}
|
||||
|
||||
deh_loaded = true;
|
||||
@@ -8217,84 +8208,109 @@ struct {
|
||||
{NULL,0}
|
||||
};
|
||||
|
||||
// Returns the vlaue of MT_ enumerations
|
||||
static mobjtype_t get_mobjtype(const char *word)
|
||||
{ // Returns the vlaue of MT_ enumerations
|
||||
{
|
||||
mobjtype_t i;
|
||||
|
||||
if (*word >= '0' && *word <= '9')
|
||||
return atoi(word);
|
||||
|
||||
if (fastncmp("MT_",word,3))
|
||||
word += 3; // take off the MT_
|
||||
for (i = 0; i < NUMMOBJFREESLOTS; i++) {
|
||||
|
||||
for (i = 0; i < NUMMOBJFREESLOTS; i++)
|
||||
{
|
||||
if (!FREE_MOBJS[i])
|
||||
break;
|
||||
if (fastcmp(word, FREE_MOBJS[i]))
|
||||
return MT_FIRSTFREESLOT+i;
|
||||
}
|
||||
|
||||
for (i = 0; i < MT_FIRSTFREESLOT; i++)
|
||||
if (fastcmp(word, MOBJTYPE_LIST[i]+3))
|
||||
return i;
|
||||
|
||||
deh_warning("Couldn't find mobjtype named 'MT_%s'",word);
|
||||
return MT_BLUECRAWLA;
|
||||
}
|
||||
|
||||
// Returns the value of S_ enumerations
|
||||
static statenum_t get_state(const char *word)
|
||||
{ // Returns the value of S_ enumerations
|
||||
{
|
||||
statenum_t i;
|
||||
if (*word >= '0' && *word <= '9')
|
||||
return atoi(word);
|
||||
|
||||
if (fastncmp("S_",word,2))
|
||||
word += 2; // take off the S_
|
||||
for (i = 0; i < NUMSTATEFREESLOTS; i++) {
|
||||
|
||||
for (i = 0; i < NUMSTATEFREESLOTS; i++)
|
||||
{
|
||||
if (!FREE_STATES[i])
|
||||
break;
|
||||
|
||||
if (fastcmp(word, FREE_STATES[i]))
|
||||
return S_FIRSTFREESLOT+i;
|
||||
}
|
||||
|
||||
for (i = 0; i < S_FIRSTFREESLOT; i++)
|
||||
if (fastcmp(word, STATE_LIST[i]+2))
|
||||
return i;
|
||||
|
||||
deh_warning("Couldn't find state named 'S_%s'",word);
|
||||
return S_NULL;
|
||||
}
|
||||
|
||||
// Returns the value of SPR_ enumerations
|
||||
static spritenum_t get_sprite(const char *word)
|
||||
{ // Returns the value of SPR_ enumerations
|
||||
{
|
||||
spritenum_t i;
|
||||
if (*word >= '0' && *word <= '9')
|
||||
return atoi(word);
|
||||
|
||||
if (fastncmp("SPR_",word,4))
|
||||
word += 4; // take off the SPR_
|
||||
|
||||
for (i = 0; i < NUMSPRITES; i++)
|
||||
if (!sprnames[i][4] && memcmp(word,sprnames[i],4)==0)
|
||||
if (!sprnames[i][4] && memcmp(word,sprnames[i],4) == 0)
|
||||
return i;
|
||||
|
||||
deh_warning("Couldn't find sprite named 'SPR_%s'",word);
|
||||
return SPR_NULL;
|
||||
}
|
||||
|
||||
// Returns the value of SFX_ enumerations
|
||||
static sfxenum_t get_sfx(const char *word)
|
||||
{ // Returns the value of SFX_ enumerations
|
||||
{
|
||||
sfxenum_t i;
|
||||
|
||||
if (*word >= '0' && *word <= '9')
|
||||
return atoi(word);
|
||||
|
||||
if (fastncmp("SFX_",word,4))
|
||||
word += 4; // take off the SFX_
|
||||
else if (fastncmp("DS",word,2))
|
||||
word += 2; // take off the DS
|
||||
|
||||
for (i = 0; i < NUMSFX; i++)
|
||||
if (S_sfx[i].name && fasticmp(word, S_sfx[i].name))
|
||||
return i;
|
||||
|
||||
deh_warning("Couldn't find sfx named 'SFX_%s'",word);
|
||||
return sfx_None;
|
||||
}
|
||||
|
||||
#ifdef MUSICSLOT_COMPATIBILITY
|
||||
// Returns the value of MUS_ enumerations
|
||||
static UINT16 get_mus(const char *word, UINT8 dehacked_mode)
|
||||
{ // Returns the value of MUS_ enumerations
|
||||
{
|
||||
UINT16 i;
|
||||
char lumptmp[4];
|
||||
|
||||
if (*word >= '0' && *word <= '9')
|
||||
return atoi(word);
|
||||
|
||||
if (!word[2] && toupper(word[0]) >= 'A' && toupper(word[0]) <= 'Z')
|
||||
return (UINT16)M_MapNumber(word[0], word[1]);
|
||||
|
||||
@@ -8318,25 +8334,33 @@ static UINT16 get_mus(const char *word, UINT8 dehacked_mode)
|
||||
deh_warning("Couldn't find music named 'MUS_%s'",word);
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (i = 0; compat_special_music_slots[i][0]; ++i)
|
||||
if (fasticmp(word, compat_special_music_slots[i]))
|
||||
return i + 1036;
|
||||
|
||||
if (dehacked_mode)
|
||||
deh_warning("Couldn't find music named 'MUS_%s'",word);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
// Returns the value of HUD_ enumerations
|
||||
static hudnum_t get_huditem(const char *word)
|
||||
{ // Returns the value of HUD_ enumerations
|
||||
{
|
||||
hudnum_t i;
|
||||
|
||||
if (*word >= '0' && *word <= '9')
|
||||
return atoi(word);
|
||||
|
||||
if (fastncmp("HUD_",word,4))
|
||||
word += 4; // take off the HUD_
|
||||
|
||||
for (i = 0; i < NUMHUDITEMS; i++)
|
||||
if (fastcmp(word, HUDITEMS_LIST[i]))
|
||||
return i;
|
||||
|
||||
deh_warning("Couldn't find huditem named 'HUD_%s'",word);
|
||||
return HUD_LIVESNAME;
|
||||
}
|
||||
@@ -8383,15 +8407,16 @@ static inline int lib_freeslot(lua_State *L)
|
||||
{
|
||||
int n = lua_gettop(L);
|
||||
int r = 0; // args returned
|
||||
char *s, *type,*word;
|
||||
char *s, *type, *word;
|
||||
|
||||
while (n-- > 0)
|
||||
{
|
||||
while (n-- > 0)
|
||||
{
|
||||
s = Z_StrDup(luaL_checkstring(L,1));
|
||||
type = strtok(s, "_");
|
||||
if (type)
|
||||
strupr(type);
|
||||
else {
|
||||
else
|
||||
{
|
||||
Z_Free(s);
|
||||
return luaL_error(L, "Unknown enum type in '%s'\n", luaL_checkstring(L, 1));
|
||||
}
|
||||
@@ -8399,19 +8424,25 @@ static inline int lib_freeslot(lua_State *L)
|
||||
word = strtok(NULL, "\n");
|
||||
if (word)
|
||||
strupr(word);
|
||||
else {
|
||||
else
|
||||
{
|
||||
Z_Free(s);
|
||||
return luaL_error(L, "Missing enum name in '%s'\n", luaL_checkstring(L, 1));
|
||||
}
|
||||
if (fastcmp(type, "SFX")) {
|
||||
|
||||
if (fastcmp(type, "SFX"))
|
||||
{
|
||||
sfxenum_t sfx;
|
||||
strlwr(word);
|
||||
CONS_Printf("Sound sfx_%s allocated.\n",word);
|
||||
sfx = S_AddSoundFx(word, false, 0, false);
|
||||
if (sfx != sfx_None) {
|
||||
|
||||
if (sfx != sfx_None)
|
||||
{
|
||||
lua_pushinteger(L, sfx);
|
||||
r++;
|
||||
} else
|
||||
}
|
||||
else
|
||||
I_Error("Out of Sfx Freeslots while allocating \"%s\"\nLoad less addons to fix this.", word); //Should never get here since S_AddSoundFx was changed to throw I_Error when it can't allocate
|
||||
}
|
||||
else if (fastcmp(type, "SPR"))
|
||||
@@ -8425,7 +8456,7 @@ static inline int lib_freeslot(lua_State *L)
|
||||
{
|
||||
if (used_spr[(j-SPR_FIRSTFREESLOT)/8] & (1<<(j%8)))
|
||||
{
|
||||
if (!sprnames[j][4] && memcmp(sprnames[j],word,4)==0)
|
||||
if (!sprnames[j][4] && memcmp(sprnames[j], word, 4) == 0)
|
||||
sprnames[j][4] = wad;
|
||||
continue; // Already allocated, next.
|
||||
}
|
||||
@@ -8443,6 +8474,7 @@ static inline int lib_freeslot(lua_State *L)
|
||||
r++;
|
||||
break;
|
||||
}
|
||||
|
||||
if (j > SPR_LASTFREESLOT)
|
||||
I_Error("Out of Sprite Freeslots while allocating \"%s\"\nLoad less addons to fix this.", word);
|
||||
}
|
||||
@@ -8450,7 +8482,9 @@ static inline int lib_freeslot(lua_State *L)
|
||||
{
|
||||
statenum_t i;
|
||||
for (i = 0; i < NUMSTATEFREESLOTS; i++)
|
||||
if (!FREE_STATES[i]) {
|
||||
{
|
||||
if (!FREE_STATES[i])
|
||||
{
|
||||
CONS_Printf("State S_%s allocated.\n",word);
|
||||
|
||||
lua_pushcfunction(L, lua_glib_invalidate_cache);
|
||||
@@ -8464,6 +8498,8 @@ static inline int lib_freeslot(lua_State *L)
|
||||
r++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (i == NUMSTATEFREESLOTS)
|
||||
I_Error("Out of State Freeslots while allocating \"%s\"\nLoad less addons to fix this.", word);
|
||||
}
|
||||
@@ -8471,7 +8507,9 @@ static inline int lib_freeslot(lua_State *L)
|
||||
{
|
||||
mobjtype_t i;
|
||||
for (i = 0; i < NUMMOBJFREESLOTS; i++)
|
||||
if (!FREE_MOBJS[i]) {
|
||||
{
|
||||
if (!FREE_MOBJS[i])
|
||||
{
|
||||
CONS_Printf("MobjType MT_%s allocated.\n",word);
|
||||
|
||||
lua_pushcfunction(L, lua_glib_invalidate_cache);
|
||||
@@ -8485,13 +8523,17 @@ static inline int lib_freeslot(lua_State *L)
|
||||
r++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (i == NUMMOBJFREESLOTS)
|
||||
I_Error("Out of Mobj Freeslots while allocating \"%s\"\nLoad less addons to fix this.", word);
|
||||
}
|
||||
|
||||
Z_Free(s);
|
||||
lua_remove(L, 1);
|
||||
continue;
|
||||
}
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
@@ -8504,8 +8546,10 @@ static inline int lib_action(lua_State *L)
|
||||
mobj_t *actor = *((mobj_t **)luaL_checkudata(L,1,META_MOBJ));
|
||||
var1 = (INT32)luaL_optinteger(L,2,0);
|
||||
var2 = (INT32)luaL_optinteger(L,3,0);
|
||||
|
||||
if (!actor)
|
||||
return LUA_ErrInvalid(L, "mobj_t");
|
||||
|
||||
(*action)(actor);
|
||||
return 0;
|
||||
}
|
||||
@@ -8527,23 +8571,29 @@ FUNCINLINE static ATTRINLINE int lib_getenum(lua_State *L)
|
||||
|
||||
const char *word;
|
||||
boolean mathlib = lua_toboolean(L, UV_MATHLIB);
|
||||
|
||||
if (lua_type(L,2) != LUA_TSTRING)
|
||||
return 0;
|
||||
|
||||
word = lua_tostring(L,2);
|
||||
|
||||
/* First check actions, as they can be overridden. */
|
||||
if (!mathlib && fastncmp("A_",word,2)) {
|
||||
if (!mathlib && fastncmp("A_",word,2))
|
||||
{
|
||||
char *caps;
|
||||
// Try to get a Lua action first.
|
||||
/// \todo Push a closure that sets superactions[] and superstack.
|
||||
lua_getfield(L, LUA_REGISTRYINDEX, LREG_ACTIONS);
|
||||
|
||||
// actions are stored in all uppercase.
|
||||
caps = Z_StrDup(word);
|
||||
strupr(caps);
|
||||
lua_getfield(L, -1, caps);
|
||||
Z_Free(caps);
|
||||
|
||||
if (!lua_isnil(L, -1))
|
||||
return 1; // Success! :D That was easy.
|
||||
|
||||
// Welp, that failed.
|
||||
lua_pop(L, 2); // pop nil and LREG_ACTIONS
|
||||
// Hardcoded actions are handled by the proxy.
|
||||
@@ -8552,12 +8602,14 @@ FUNCINLINE static ATTRINLINE int lib_getenum(lua_State *L)
|
||||
/* Then check the globals proxy table. */
|
||||
lua_pushvalue(L, 2);
|
||||
lua_gettable(L, GLIB_PROXY);
|
||||
|
||||
if (!lua_isnil(L, -1))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (mathlib) return luaL_error(L, "constant '%s' could not be parsed.\n", word);
|
||||
if (mathlib)
|
||||
return luaL_error(L, "constant '%s' could not be parsed.\n", word);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -8615,6 +8667,7 @@ static int lua_enumlib_server_get(lua_State *L)
|
||||
{
|
||||
if ((!multiplayer || !(netgame || demo.playback)) && !playeringame[serverplayer])
|
||||
return 0;
|
||||
|
||||
LUA_PushUserdata(L, &players[serverplayer], META_PLAYER);
|
||||
return 1;
|
||||
}
|
||||
@@ -8623,6 +8676,7 @@ static int lua_enumlib_consoleplayer_get(lua_State *L)
|
||||
{
|
||||
if (consoleplayer < 0 || !playeringame[consoleplayer])
|
||||
return 0;
|
||||
|
||||
LUA_PushUserdata(L, &players[consoleplayer], META_PLAYER);
|
||||
return 1;
|
||||
}
|
||||
@@ -8815,12 +8869,15 @@ static int lua_enumlib_action_get(lua_State *L)
|
||||
const char *action = lua_tostring(L, 1);
|
||||
|
||||
for (int i = 0; actionpointers[i].name; i++)
|
||||
if (fasticmp(action, actionpointers[i].name)) {
|
||||
{
|
||||
if (fasticmp(action, actionpointers[i].name))
|
||||
{
|
||||
// push lib_action as a C closure with the actionf_t* as an upvalue.
|
||||
lua_pushlightuserdata(L, &actionpointers[i].action);
|
||||
lua_pushcclosure(L, lib_action, 1);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -8838,8 +8895,13 @@ static char *lua_enumlib_sprintf_upper(char **buf, int* size, const char *format
|
||||
va_list va;
|
||||
va_start(va, format);
|
||||
|
||||
int length = vsnprintf(*buf, *size, format, va);
|
||||
if (length > *size)
|
||||
va_list vacpy;
|
||||
va_copy(vacpy, va);
|
||||
|
||||
int length = vsnprintf(*buf, *size, format, vacpy);
|
||||
va_end(vacpy);
|
||||
|
||||
if (length >= *size)
|
||||
{
|
||||
void *ptr = realloc(*buf, length+1);
|
||||
if (!ptr)
|
||||
@@ -8847,12 +8909,13 @@ static char *lua_enumlib_sprintf_upper(char **buf, int* size, const char *format
|
||||
va_end(va);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
*buf = ptr;
|
||||
*size = length+1;
|
||||
|
||||
va_start(va, format);
|
||||
vsnprintf(*buf, *size, format, va);
|
||||
length = vsnprintf(*buf, *size, format, va);
|
||||
}
|
||||
|
||||
va_end(va);
|
||||
|
||||
for (int i = 0; i < length; i++)
|
||||
@@ -8877,11 +8940,14 @@ static int lua_enumlib_super_get(lua_State *L)
|
||||
}
|
||||
|
||||
for (int i = 0; actionpointers[i].name; i++)
|
||||
if (fasticmp(superactions[superstack-1], actionpointers[i].name)) {
|
||||
{
|
||||
if (fasticmp(superactions[superstack-1], actionpointers[i].name))
|
||||
{
|
||||
lua_pushlightuserdata(L, &actionpointers[i].action);
|
||||
lua_pushcclosure(L, lib_action, 1);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -9350,7 +9416,10 @@ enum actionnum LUA_GetActionNumByName(const char *actiontocompare)
|
||||
{
|
||||
size_t z;
|
||||
for (z = 0; actionpointers[z].name; z++)
|
||||
{
|
||||
if (fasticmp(actiontocompare, actionpointers[z].name))
|
||||
return z;
|
||||
}
|
||||
|
||||
return z;
|
||||
}
|
||||
+3
-1
@@ -111,10 +111,12 @@ filestatus_t filesearch(char *filename, const char *startpath, const UINT8 *want
|
||||
char *searchname;
|
||||
int depthleft = maxsearchdepth;
|
||||
char searchpath[MAXFILEPATH];
|
||||
size_t *searchpathindex;
|
||||
size_t *searchpathindex = NULL;
|
||||
|
||||
dirhandle = (DIR**)malloc(maxsearchdepth * sizeof(DIR*));
|
||||
searchpathindex = (size_t *)malloc(maxsearchdepth * sizeof(size_t));
|
||||
if (!searchpathindex)
|
||||
I_Error("out of memory while searching for file %s\n", filename);
|
||||
|
||||
strcpy(searchpath, startpath);
|
||||
searchpathindex[--depthleft] = strlen(searchpath) + 1;
|
||||
|
||||
+34
-42
@@ -1653,10 +1653,12 @@ void G_RecordDemo(const char *name)
|
||||
maxsize = cv_maxdemosize.value*1024*1024;
|
||||
|
||||
demobuf.buffer = Z_Malloc(maxsize + 100*1024, PU_STATIC, NULL);
|
||||
demoend = demobuf.buffer + maxsize;
|
||||
|
||||
if (demobuf.buffer)
|
||||
{
|
||||
demoend = demobuf.buffer + maxsize;
|
||||
demo.recording = true;
|
||||
}
|
||||
else
|
||||
CONS_Alert(CONS_ERROR, "Failed to allocate demo buffer\n");
|
||||
}
|
||||
@@ -1994,7 +1996,6 @@ static UINT8 G_CheckDemoExtraFiles(UINT8 **pp, boolean quick)
|
||||
UINT8 totalfiles, filesloaded, nmusfilecount;
|
||||
char filename[MAX_WADPATH];
|
||||
UINT8 md5sum[16];
|
||||
boolean toomany = false;
|
||||
boolean alreadyloaded;
|
||||
UINT8 i, j;
|
||||
UINT8 error = 0;
|
||||
@@ -2004,53 +2005,44 @@ static UINT8 G_CheckDemoExtraFiles(UINT8 **pp, boolean quick)
|
||||
|
||||
for (i = 0; i < totalfiles; ++i)
|
||||
{
|
||||
if (toomany)
|
||||
SKIPSTRING((*pp));
|
||||
else
|
||||
{
|
||||
strlcpy(filename, (char *)(*pp), sizeof filename);
|
||||
SKIPSTRING((*pp));
|
||||
}
|
||||
strlcpy(filename, (char *)(*pp), sizeof filename);
|
||||
SKIPSTRING((*pp));
|
||||
|
||||
READMEM((*pp), md5sum, 16); // hue hue peepee
|
||||
|
||||
if (!toomany)
|
||||
alreadyloaded = false;
|
||||
nmusfilecount = 0;
|
||||
|
||||
for (j = 0; j < numwadfiles; ++j)
|
||||
{
|
||||
alreadyloaded = false;
|
||||
nmusfilecount = 0;
|
||||
|
||||
for (j = 0; j < numwadfiles; ++j)
|
||||
{
|
||||
if (wadfiles[j]->important && j > mainwads)
|
||||
nmusfilecount++;
|
||||
else
|
||||
continue;
|
||||
|
||||
if (memcmp(md5sum, wadfiles[j]->md5sum, 16) == 0)
|
||||
{
|
||||
alreadyloaded = true;
|
||||
|
||||
if (i != nmusfilecount-1 && error < DFILE_ERROR_OUTOFORDER)
|
||||
error |= DFILE_ERROR_OUTOFORDER;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (alreadyloaded)
|
||||
{
|
||||
filesloaded++;
|
||||
if (wadfiles[j]->important && j > mainwads)
|
||||
nmusfilecount++;
|
||||
else
|
||||
continue;
|
||||
}
|
||||
|
||||
if (numwadfiles >= MAX_WADFILES)
|
||||
error = DFILE_ERROR_CANNOTLOAD;
|
||||
else if (!quick && findfile(filename, md5sum, false) != FS_FOUND)
|
||||
error = DFILE_ERROR_CANNOTLOAD;
|
||||
else if (error < DFILE_ERROR_INCOMPLETEOUTOFORDER)
|
||||
error |= DFILE_ERROR_NOTLOADED;
|
||||
} else
|
||||
if (memcmp(md5sum, wadfiles[j]->md5sum, 16) == 0)
|
||||
{
|
||||
alreadyloaded = true;
|
||||
|
||||
if (i != nmusfilecount-1 && error < DFILE_ERROR_OUTOFORDER)
|
||||
error |= DFILE_ERROR_OUTOFORDER;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (alreadyloaded)
|
||||
{
|
||||
filesloaded++;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (numwadfiles >= MAX_WADFILES)
|
||||
error = DFILE_ERROR_CANNOTLOAD;
|
||||
else if (!quick && findfile(filename, md5sum, false) != FS_FOUND)
|
||||
error = DFILE_ERROR_CANNOTLOAD;
|
||||
else if (error < DFILE_ERROR_INCOMPLETEOUTOFORDER)
|
||||
error |= DFILE_ERROR_NOTLOADED;
|
||||
}
|
||||
|
||||
// Get final file count
|
||||
|
||||
@@ -4047,7 +4047,6 @@ void G_InitNew(UINT8 pencoremode, const char *mapname, boolean resetplayer, bool
|
||||
if (W_CheckNumForName(mapname) == LUMPERROR)
|
||||
{
|
||||
I_Error("Internal game map '%s' not found\n", mapname);
|
||||
Command_ExitGame_f();
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -939,6 +939,11 @@ void G_SetPlayerGamepadIndicatorColor(INT32 playernum, UINT8 color)
|
||||
return;
|
||||
}
|
||||
|
||||
if (!I_GamepadHasLED(playernum))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// so we can override this
|
||||
skincolor = color ? color : G_GetSkinColorForGamepad(playernum);
|
||||
byte_color = V_GetColor(colortranslations[skincolor][8]).s;
|
||||
@@ -974,12 +979,22 @@ void G_DeviceLEDTick(void)
|
||||
for (i = 0; i <= splitscreen; i++)
|
||||
{
|
||||
if (!cv_usejoystick[i].value || !cv_gamepadled[i].value)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// does not have a configurable led! :c
|
||||
if (!I_GamepadHasLED(i))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
newcolor = G_GetSkinColorForGamepad(i);
|
||||
|
||||
if (curcolor[i] == newcolor) // dont update if same colour
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
G_SetPlayerGamepadIndicatorColor(i, newcolor);
|
||||
curcolor[i] = newcolor;
|
||||
@@ -1055,6 +1070,12 @@ void G_DeviceRumbleTick(void)
|
||||
continue;
|
||||
}
|
||||
|
||||
// does not support rumble! :c
|
||||
if (!I_GamepadHasRumble(i))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (camera[i].freecam)
|
||||
{
|
||||
continue;
|
||||
|
||||
@@ -150,7 +150,7 @@ void HWR_DrawStretchyFixedPatch(patch_t *gpatch, fixed_t x, fixed_t y, fixed_t p
|
||||
if (!column->topdelta)
|
||||
{
|
||||
const UINT8 *source = (const UINT8 *)(column) + 3;
|
||||
HWR_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, (column->topdelta == 0xff ? 31 : source[0]));
|
||||
HWR_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, source[0]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -302,7 +302,7 @@ void HWR_DrawCroppedPatch(patch_t *gpatch, fixed_t x, fixed_t y, fixed_t pscale,
|
||||
if (!column->topdelta)
|
||||
{
|
||||
const UINT8 *source = (const UINT8 *)(column) + 3;
|
||||
HWR_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, (column->topdelta == 0xff ? 31 : source[0]));
|
||||
HWR_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, source[0]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+15
-24
@@ -388,11 +388,11 @@ void HWR_ObjectLightLevelPost(gl_vissprite_t *spr, const sector_t *sector, INT32
|
||||
extralight = FixedMul(extralight, std::min(std::max(0, *lightlevel), 255) * FRACUNIT / 255);
|
||||
|
||||
// simple OGL approximation
|
||||
fixed_t tr = R_QuickCamDist(spr->mobj->x, spr->mobj->y);
|
||||
fixed_t xscale = FixedDiv((vid.width / 2) << FRACBITS, tr);
|
||||
const fixed_t tr = R_QuickCamDist(spr->mobj->x, spr->mobj->y);
|
||||
const fixed_t xscale = FixedDiv((vid.width / 2) << FRACBITS, tr);
|
||||
|
||||
// Less change in contrast at further distances, to counteract DOOM diminished light
|
||||
fixed_t n = FixedDiv(FixedMul(xscale, LIGHTRESOLUTIONFIX), ((MAXLIGHTSCALE-1) << LIGHTSCALESHIFT));
|
||||
const fixed_t n = FixedDiv(FixedMul(xscale, LIGHTRESOLUTIONFIX), ((MAXLIGHTSCALE-1) << LIGHTSCALESHIFT));
|
||||
extralight = FixedMul(extralight, std::min(n, FRACUNIT));
|
||||
|
||||
// Contrast is stronger for normal sprites, stronger than wall lighting is at the same distance
|
||||
@@ -515,7 +515,7 @@ static FUINT HWR_CalcWallLight(FUINT lightnum, seg_t *seg, extracolormap_t *colo
|
||||
|
||||
if (seg != NULL && P_ApplyLightOffsetFine(lightnum, seg->frontsector))
|
||||
{
|
||||
INT16 offset = (cv_glfakecontrast.value == 2) ? seg->hwLightOffset : ((INT16)seg->lightOffset * 8);
|
||||
const INT16 offset = (cv_glfakecontrast.value == 2) ? seg->hwLightOffset : ((INT16)seg->lightOffset * 8);
|
||||
|
||||
finallight += offset;
|
||||
finallight = CLAMP(finallight, 0 , 255);
|
||||
@@ -533,7 +533,7 @@ static FUINT HWR_CalcSlopeLight(FUINT lightnum, pslope_t *slope, const sector_t
|
||||
|
||||
if (slope != NULL && sector != NULL && P_ApplyLightOffsetFine(lightnum, sector))
|
||||
{
|
||||
INT16 offset = (cv_glfakecontrast.value == 2) ? slope->hwLightOffset : ((INT16)slope->lightOffset * 8);
|
||||
const INT16 offset = (cv_glfakecontrast.value == 2) ? slope->hwLightOffset : ((INT16)slope->lightOffset * 8);
|
||||
|
||||
finallight += (fof ? -offset : offset);
|
||||
finallight = CLAMP(finallight, 0 , 255);
|
||||
@@ -1420,6 +1420,11 @@ void HWR_ProcessSeg(void) // Sort of like GLWall::Process in GZDoom
|
||||
{
|
||||
draw_sky_walls(0, 1, worldhigh, worldhighslope);
|
||||
}
|
||||
|
||||
// hack to allow height changes in outdoor areas
|
||||
// This is what gets rid of the upper textures if there should be sky
|
||||
worldtop = worldhigh;
|
||||
worldtopslope = worldhighslope;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1464,15 +1469,6 @@ void HWR_ProcessSeg(void) // Sort of like GLWall::Process in GZDoom
|
||||
}
|
||||
}
|
||||
|
||||
// hack to allow height changes in outdoor areas
|
||||
// This is what gets rid of the upper textures if there should be sky
|
||||
if (gl_frontsector->ceilingpic == skyflatnum
|
||||
&& gl_backsector->ceilingpic == skyflatnum)
|
||||
{
|
||||
worldtop = worldhigh;
|
||||
worldtopslope = worldhighslope;
|
||||
}
|
||||
|
||||
gl_toptexture = R_GetTextureNum(gl_sidedef->toptexture);
|
||||
|
||||
// check TOP TEXTURE
|
||||
@@ -2263,7 +2259,7 @@ void HWR_ProcessSeg(void) // Sort of like GLWall::Process in GZDoom
|
||||
|
||||
static inline boolean HWR_UsePortals(void)
|
||||
{
|
||||
return supportstencil && cv_glportals.value && gl_maphasportals;
|
||||
return supportstencil && gl_maphasportals && cv_glportals.value;
|
||||
}
|
||||
|
||||
// From PrBoom:
|
||||
@@ -2407,7 +2403,8 @@ static inline void DoAddLine(seg_t* line, angle_t angle1, angle_t angle2)
|
||||
// SoM: Backsector needs to be run through R_FakeFlat
|
||||
static sector_t tempsec;
|
||||
|
||||
auto do_addline = [&](bool dontdraw) {
|
||||
auto do_addline = [&](bool dontdraw)
|
||||
{
|
||||
// Single sided line?
|
||||
if (!line->backsector)
|
||||
{
|
||||
@@ -2688,14 +2685,6 @@ static void HWR_RenderPolyObjectPlane(polyobj_t *polysector, boolean isceiling,
|
||||
if (nrPlaneVerts < 3) // not even a triangle ?
|
||||
return;
|
||||
|
||||
if (nrPlaneVerts > INT16_MAX) // FIXME: exceeds plVerts size
|
||||
{
|
||||
CONS_Debug(DBG_RENDER, "polygon size of %s exceeds max value of %d vertices\n", sizeu1(nrPlaneVerts), UINT16_MAX);
|
||||
return;
|
||||
}
|
||||
|
||||
const sector_t *sec = FOFsector ? FOFsector : gl_frontsector;
|
||||
|
||||
// Allocate plane-vertex buffer if we need to
|
||||
if (!planeVerts || nrPlaneVerts > numAllocedPlaneVerts)
|
||||
{
|
||||
@@ -2704,6 +2693,8 @@ static void HWR_RenderPolyObjectPlane(polyobj_t *polysector, boolean isceiling,
|
||||
Z_Malloc(numAllocedPlaneVerts * sizeof(FOutVector), PU_LEVEL, &planeVerts);
|
||||
}
|
||||
|
||||
const sector_t *sec = FOFsector ? FOFsector : gl_frontsector;
|
||||
|
||||
height = FixedToFloat(fixedheight);
|
||||
|
||||
len = W_LumpLength(lumpnum);
|
||||
|
||||
@@ -365,13 +365,17 @@ static void HWR_CompileShader(int index)
|
||||
if (vertex_source)
|
||||
{
|
||||
char *preprocessed = HWR_PreprocessShader(vertex_source);
|
||||
if (!preprocessed) return;
|
||||
if (!preprocessed)
|
||||
return;
|
||||
|
||||
GL_LoadShader(index, preprocessed, HWD_SHADERSTAGE_VERTEX);
|
||||
}
|
||||
if (fragment_source)
|
||||
{
|
||||
char *preprocessed = HWR_PreprocessShader(fragment_source);
|
||||
if (!preprocessed) return;
|
||||
if (!preprocessed)
|
||||
return;
|
||||
|
||||
GL_LoadShader(index, preprocessed, HWD_SHADERSTAGE_FRAGMENT);
|
||||
}
|
||||
|
||||
@@ -387,8 +391,10 @@ void HWR_CompileShaders(void)
|
||||
{
|
||||
int custom_index = gl_shadertargets[i].custom_shader;
|
||||
HWR_CompileShader(i);
|
||||
|
||||
if (!gl_shaders[i].compiled)
|
||||
CONS_Alert(CONS_ERROR, "HWR_CompileShaders: Compilation failed for base %s shader!\n", shaderxlat[i].type);
|
||||
|
||||
if (custom_index != -1)
|
||||
{
|
||||
HWR_CompileShader(custom_index);
|
||||
|
||||
+9
-2
@@ -543,6 +543,8 @@ void HU_AddChatText(const char *text, boolean playsound)
|
||||
HU_removeChatText_Log();
|
||||
|
||||
chat_log[chat_nummsg_log] = malloc(HU_MSGBUFSIZE);
|
||||
if (!chat_log[chat_nummsg_log])
|
||||
I_Error("HU_AddChatText: out of memory for chat log\n");
|
||||
strcpy(chat_log[chat_nummsg_log], text);
|
||||
++chat_nummsg_log;
|
||||
|
||||
@@ -625,7 +627,10 @@ static void DoSayCommand(SINT8 target, size_t usedargs, UINT8 flags)
|
||||
// with that logic, characters 4 and 5 are our numbers:
|
||||
const char *newmsg;
|
||||
INT32 spc = 1; // used if nodenum[1] is a space.
|
||||
CLEANUP(pfree) char *nodenum = (char*) malloc(3);
|
||||
CLEANUP(pfree) char *nodenum = (char*)malloc(3);
|
||||
if (!nodenum)
|
||||
I_Error("DoSayCommand: out of memory for sending pm\n");
|
||||
|
||||
memcpy(nodenum, msg+3, 2);
|
||||
nodenum[2] = '\0';
|
||||
|
||||
@@ -1230,7 +1235,9 @@ static void HU_SendChatMessage(void)
|
||||
{
|
||||
INT32 spc = 1; // used if nodenum[1] is a space.
|
||||
const char *newmsg;
|
||||
CLEANUP(pfree) char *nodenum = (char*) malloc(3);
|
||||
CLEANUP(pfree) char *nodenum = (char*)malloc(3);
|
||||
if (!nodenum)
|
||||
I_Error("HU_SendChatMessage: out of memory for sending pm\n");
|
||||
|
||||
// what we're gonna do now is check if the node exists
|
||||
// with that logic, characters 4 and 5 are our numbers:
|
||||
|
||||
@@ -148,6 +148,9 @@ extern INT32 numcontrollers;
|
||||
*/
|
||||
const char *I_GetJoyName(INT32 joyindex);
|
||||
|
||||
boolean I_GamepadHasLED(INT32 playernum);
|
||||
boolean I_GamepadHasRumble(INT32 playernum);
|
||||
|
||||
void I_GamepadRumble(INT32 playernum, UINT16 low_strength, UINT16 high_strength, UINT32 duration);
|
||||
void I_SetGamepadIndicatorColor(INT32 playernum, UINT8 red, UINT8 green, UINT8 blue);
|
||||
|
||||
|
||||
@@ -446,6 +446,12 @@ void K_UpdateDirector(void)
|
||||
}
|
||||
}
|
||||
|
||||
// not sure if we should just stop here?
|
||||
if (targetposition == MAXPLAYERS)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
target = directorinfo.sortedplayers[targetposition];
|
||||
|
||||
// stop here since we're already viewing this player
|
||||
|
||||
+18
-8
@@ -83,6 +83,7 @@ IMPL_HUD_OFFSET(stat); // Stats
|
||||
|
||||
// extra hud things
|
||||
consvar_t cv_showstats = {"showstats", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
consvar_t cv_showstats_skinname = {"showstats_skinname", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
|
||||
consvar_t cv_highresportrait = {"highresportrait", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; // make char potraits use their high-res version instead
|
||||
|
||||
@@ -92,6 +93,7 @@ consvar_t cv_showinput = {"showinput", "Off", CV_SAVE, inputdisplay_cons_t, NULL
|
||||
static CV_PossibleValue_t minihead_cons_t[] = {{0, "Off"}, {1, "On"}, {2, "Others"}, {0, NULL}};
|
||||
consvar_t cv_minihead = {"smallminimapplayers", "Off", CV_SAVE, minihead_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
consvar_t cv_showminimapnames = {"showminimapnames", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
consvar_t cv_showminimapfinished = {"showminimapfinished", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
|
||||
CV_PossibleValue_t minimapdot_cons_t[NUMMINIMAPDOTSTUFF];
|
||||
consvar_t cv_showminimapangle = {"showminimapangle", "Off", CV_SAVE, minimapdot_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
@@ -207,6 +209,7 @@ void K_RegisterKartHudStuff(void)
|
||||
CV_RegisterVar(&cv_kartspeedometer);
|
||||
|
||||
CV_RegisterVar(&cv_showstats);
|
||||
CV_RegisterVar(&cv_showstats_skinname);
|
||||
CV_RegisterVar(&cv_showinput);
|
||||
|
||||
CV_RegisterVar(&cv_posanim);
|
||||
@@ -221,6 +224,7 @@ void K_RegisterKartHudStuff(void)
|
||||
|
||||
CV_RegisterVar(&cv_minihead);
|
||||
CV_RegisterVar(&cv_showminimapnames);
|
||||
CV_RegisterVar(&cv_showminimapfinished);
|
||||
CV_RegisterVar(&cv_showminimapangle);
|
||||
|
||||
CV_RegisterVar(&cv_showlapemblem);
|
||||
@@ -1434,13 +1438,16 @@ static void K_drawKartStats(void)
|
||||
fakeskin = K_GetPlayerSkin(stplyr);
|
||||
|
||||
// Skin name
|
||||
if (K_IsHighResolution()) // V_DrawSmallString becomes a mess at low resolutions lel
|
||||
if (cv_showstats_skinname.value)
|
||||
{
|
||||
V_DrawSmallString(x+20, y+12, flags2, fakeskin->realname);
|
||||
}
|
||||
else
|
||||
{
|
||||
V_DrawThinString(x+20, y+7, flags2, fakeskin->realname);
|
||||
if (K_IsHighResolution()) // V_DrawSmallString becomes a mess at low resolutions lel
|
||||
{
|
||||
V_DrawSmallString(x+20, y+12, flags2, fakeskin->realname);
|
||||
}
|
||||
else
|
||||
{
|
||||
V_DrawThinString(x+20, y+7, flags2, fakeskin->realname);
|
||||
}
|
||||
}
|
||||
|
||||
// Icon and stats
|
||||
@@ -2094,7 +2101,7 @@ static void K_DrawKartPositionNum(INT32 num)
|
||||
fy = POSI_Y;
|
||||
fflags = V_SNAPTOLEFT|((stplyrnum == 2) ? V_SPLITSCREEN|V_SNAPTOBOTTOM : 0); // flip P3 to the bottom.
|
||||
flipdraw = true;
|
||||
if (num && num >= 10)
|
||||
if (num >= 10)
|
||||
fx += W; // this seems dumb, but we need to do this in order for positions above 10 going off screen.
|
||||
}
|
||||
else // else, that means we're P2 or P4.
|
||||
@@ -3772,6 +3779,9 @@ static void K_drawKartMinimap(void)
|
||||
if (!players[i].mo || players[i].spectator)
|
||||
continue;
|
||||
|
||||
if (!cv_showminimapfinished.value && players[i].exiting)
|
||||
continue;
|
||||
|
||||
if (P_IsDisplayPlayer(&players[i]))
|
||||
{
|
||||
// Draw display players on top of everything else
|
||||
@@ -4076,7 +4086,7 @@ static void K_drawBattleFullscreen(void)
|
||||
{
|
||||
if (i == displayplayers[0])
|
||||
continue;
|
||||
if (playeringame[i] && !stplyr->spectator)
|
||||
if (playeringame[i])
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -35,6 +35,7 @@ extern consvar_t cv_darkitembox;
|
||||
extern consvar_t cv_biglaps;
|
||||
extern consvar_t cv_highresportrait;
|
||||
extern consvar_t cv_showstats;
|
||||
extern consvar_t cv_showstats_skinname;
|
||||
extern consvar_t cv_fancyroulette;
|
||||
extern consvar_t cv_showlaptimes;
|
||||
extern consvar_t cv_battlespeedo;
|
||||
|
||||
+4
-8
@@ -1955,11 +1955,9 @@ static void K_PlayGenericCombatSound(mobj_t *source, mobj_t *other, sfxenum_t sf
|
||||
if (!skin)
|
||||
return;
|
||||
|
||||
boolean alwaysHear = false;
|
||||
|
||||
if (cv_kartvoices.value && !P_MobjWasRemoved(other) && other->player != NULL)
|
||||
{
|
||||
alwaysHear = P_IsDisplayPlayer(other->player);
|
||||
boolean alwaysHear = P_IsDisplayPlayer(other->player);
|
||||
S_StartSound(alwaysHear ? NULL : source, skin->soundsid[S_sfx[sfx_id].skinsound]);
|
||||
}
|
||||
|
||||
@@ -2372,6 +2370,7 @@ void K_SpawnBattlePoints(player_t *source, player_t *victim, UINT8 amount)
|
||||
break;
|
||||
case 3:
|
||||
st = S_BATTLEPOINT3A;
|
||||
break;
|
||||
default:
|
||||
return; // NO STATE!
|
||||
}
|
||||
@@ -3677,10 +3676,8 @@ mobj_t *K_SpawnWipeoutTrail(mobj_t *mo, boolean translucent)
|
||||
dust->momx = mo->momx/2;
|
||||
dust->momy = mo->momy/2;
|
||||
dust->momz = mo->momz/2;
|
||||
}
|
||||
|
||||
if (translucent)
|
||||
dust->flags2 |= MF2_SHADOW;
|
||||
}
|
||||
|
||||
return dust;
|
||||
}
|
||||
@@ -4657,8 +4654,7 @@ void K_RepairOrbitChain(mobj_t *orbit)
|
||||
prev->movedir = num;
|
||||
}
|
||||
|
||||
if (player->kartstuff[k_itemamount] != num)
|
||||
player->kartstuff[k_itemamount] = num;
|
||||
player->kartstuff[k_itemamount] = num;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+42
-13
@@ -358,7 +358,8 @@ static int lib_cvRegisterVar(lua_State *L)
|
||||
#define TYPEERROR(f, t) FIELDERROR(f, va("%s expected, got %s", lua_typename(L, t), luaL_typename(L, -1)))
|
||||
|
||||
lua_pushnil(L);
|
||||
while (lua_next(L, 1)) {
|
||||
while (lua_next(L, 1))
|
||||
{
|
||||
// stack: cvar table, cvar userdata, key/index, value
|
||||
// 1 2 3 4
|
||||
i = 0;
|
||||
@@ -368,26 +369,40 @@ static int lib_cvRegisterVar(lua_State *L)
|
||||
else if (lua_isstring(L, 3))
|
||||
k = lua_tostring(L, 3);
|
||||
|
||||
if (i == 1 || (k && fasticmp(k, "name"))) {
|
||||
if (i == 1 || (k && fasticmp(k, "name")))
|
||||
{
|
||||
if (!lua_isstring(L, 4))
|
||||
TYPEERROR("name", LUA_TSTRING)
|
||||
|
||||
cvar->name = Z_StrDup(lua_tostring(L, 4));
|
||||
} else if (i == 2 || (k && fasticmp(k, "defaultvalue"))) {
|
||||
}
|
||||
else if (i == 2 || (k && fasticmp(k, "defaultvalue")))
|
||||
{
|
||||
if (!lua_isstring(L, 4))
|
||||
TYPEERROR("defaultvalue", LUA_TSTRING)
|
||||
|
||||
cvar->defaultvalue = Z_StrDup(lua_tostring(L, 4));
|
||||
} else if (i == 3 || (k && fasticmp(k, "flags"))) {
|
||||
}
|
||||
else if (i == 3 || (k && fasticmp(k, "flags")))
|
||||
{
|
||||
if (!lua_isnumber(L, 4))
|
||||
TYPEERROR("flags", LUA_TNUMBER)
|
||||
|
||||
cvar->flags = (INT32)lua_tointeger(L, 4);
|
||||
} else if (i == 4 || (k && fasticmp(k, "PossibleValue"))) {
|
||||
if (lua_islightuserdata(L, 4)) {
|
||||
}
|
||||
else if (i == 4 || (k && fasticmp(k, "PossibleValue")))
|
||||
{
|
||||
if (lua_islightuserdata(L, 4))
|
||||
{
|
||||
CV_PossibleValue_t *pv = lua_touserdata(L, 4);
|
||||
|
||||
if (pv == CV_OnOff || pv == CV_YesNo || pv == CV_Unsigned || pv == CV_Natural)
|
||||
cvar->PossibleValue = pv;
|
||||
else
|
||||
FIELDERROR("PossibleValue", "CV_PossibleValue_t expected, got unrecognised pointer")
|
||||
} else if (lua_istable(L, 4)) {
|
||||
}
|
||||
else if (lua_istable(L, 4))
|
||||
{
|
||||
// Accepts tables in the form of {MIN=0, MAX=9999} or {Red=0, Green=1, Blue=2}
|
||||
// and converts them to CV_PossibleValue_t {{0,"MIN"},{9999,"MAX"}} or {{0,"Red"},{1,"Green"},{2,"Blue"}}
|
||||
//
|
||||
@@ -398,7 +413,9 @@ static int lib_cvRegisterVar(lua_State *L)
|
||||
CV_PossibleValue_t *cvpv;
|
||||
|
||||
lua_pushnil(L);
|
||||
while (lua_next(L, 4)) {
|
||||
|
||||
while (lua_next(L, 4))
|
||||
{
|
||||
count++;
|
||||
lua_pop(L, 1);
|
||||
}
|
||||
@@ -412,7 +429,9 @@ static int lib_cvRegisterVar(lua_State *L)
|
||||
|
||||
i = 0;
|
||||
lua_pushnil(L);
|
||||
while (lua_next(L, 4)) {
|
||||
|
||||
while (lua_next(L, 4))
|
||||
{
|
||||
// stack: [...] PossibleValue table, index, value
|
||||
// 4 5 6
|
||||
if (lua_type(L, 5) != LUA_TSTRING
|
||||
@@ -423,14 +442,19 @@ static int lib_cvRegisterVar(lua_State *L)
|
||||
i++;
|
||||
lua_pop(L, 1);
|
||||
}
|
||||
|
||||
cvpv[i].value = 0;
|
||||
cvpv[i].strvalue = NULL;
|
||||
cvar->PossibleValue = cvpv;
|
||||
} else
|
||||
}
|
||||
else
|
||||
FIELDERROR("PossibleValue", va("%s or CV_PossibleValue_t expected, got %s", lua_typename(L, LUA_TTABLE), luaL_typename(L, -1)))
|
||||
} else if (i == 5 || (k && fasticmp(k, "func"))) {
|
||||
}
|
||||
else if (i == 5 || (k && fasticmp(k, "func")))
|
||||
{
|
||||
if (!lua_isfunction(L, 4))
|
||||
TYPEERROR("func", LUA_TFUNCTION)
|
||||
|
||||
lua_getfield(L, LUA_REGISTRYINDEX, "CV_OnChange");
|
||||
I_Assert(lua_istable(L, 5));
|
||||
lua_pushlightuserdata(L, cvar);
|
||||
@@ -438,9 +462,13 @@ static int lib_cvRegisterVar(lua_State *L)
|
||||
lua_rawset(L, 5);
|
||||
lua_pop(L, 1);
|
||||
cvar->func = Lua_OnChange;
|
||||
|
||||
if (i == 5 && !(cvar->flags & CV_CALL))
|
||||
{
|
||||
category = lua_isnoneornil(L, 4) ? NULL : lua_tostring(L, 4);
|
||||
}
|
||||
}
|
||||
else if (((i == 5 && !(cvar->flags & CV_CALL))
|
||||
|| (cvar->flags & CV_CALL && i == 6))
|
||||
else if ((cvar->flags & CV_CALL && i == 6)
|
||||
|| (k && fasticmp(k, "category")))
|
||||
{
|
||||
category = lua_isnoneornil(L, 4) ? NULL : lua_tostring(L, 4);
|
||||
@@ -451,6 +479,7 @@ static int lib_cvRegisterVar(lua_State *L)
|
||||
{
|
||||
menu_name = lua_isnoneornil(L, 4) ? NULL : lua_tostring(L, 4);
|
||||
}
|
||||
|
||||
lua_pop(L, 1);
|
||||
}
|
||||
#undef FIELDERROR
|
||||
|
||||
+28
-29
@@ -650,34 +650,34 @@ void LUA_HUD_DrawList(huddrawlist_h list)
|
||||
case DI_DrawString:
|
||||
switch(item->align)
|
||||
{
|
||||
// hu_font
|
||||
case align_left:
|
||||
V_DrawString(LERPS(x), LERPS(y), item->flags, itemstr);
|
||||
break;
|
||||
case align_center:
|
||||
V_DrawCenteredString(LERPS(x), LERPS(y), item->flags, itemstr);
|
||||
break;
|
||||
case align_right:
|
||||
V_DrawRightAlignedString(LERPS(x), LERPS(y), item->flags, itemstr);
|
||||
break;
|
||||
case align_fixed:
|
||||
V_DrawStringAtFixed(LERPS(x), LERPS(y), item->flags, itemstr);
|
||||
break;
|
||||
// hu_font, 0.5x scale
|
||||
case align_small:
|
||||
V_DrawSmallString(LERPS(x), LERPS(y), item->flags, itemstr);
|
||||
break;
|
||||
case align_smallright:
|
||||
V_DrawRightAlignedSmallString(LERPS(x), LERPS(y), item->flags, itemstr);
|
||||
break;
|
||||
// tny_font
|
||||
case align_thin:
|
||||
V_DrawThinString(LERPS(x), LERPS(y), item->flags, itemstr);
|
||||
break;
|
||||
case align_thinright:
|
||||
V_DrawRightAlignedThinString(LERPS(x), LERPS(y), item->flags, itemstr);
|
||||
break;
|
||||
}
|
||||
// hu_font
|
||||
case align_left:
|
||||
V_DrawString(LERPS(x), LERPS(y), item->flags, itemstr);
|
||||
break;
|
||||
case align_center:
|
||||
V_DrawCenteredString(LERPS(x), LERPS(y), item->flags, itemstr);
|
||||
break;
|
||||
case align_right:
|
||||
V_DrawRightAlignedString(LERPS(x), LERPS(y), item->flags, itemstr);
|
||||
break;
|
||||
case align_fixed:
|
||||
V_DrawStringAtFixed(LERPS(x), LERPS(y), item->flags, itemstr);
|
||||
break;
|
||||
// hu_font, 0.5x scale
|
||||
case align_small:
|
||||
V_DrawSmallString(LERPS(x), LERPS(y), item->flags, itemstr);
|
||||
break;
|
||||
case align_smallright:
|
||||
V_DrawRightAlignedSmallString(LERPS(x), LERPS(y), item->flags, itemstr);
|
||||
break;
|
||||
// tny_font
|
||||
case align_thin:
|
||||
V_DrawThinString(LERPS(x), LERPS(y), item->flags, itemstr);
|
||||
break;
|
||||
case align_thinright:
|
||||
V_DrawRightAlignedThinString(LERPS(x), LERPS(y), item->flags, itemstr);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case DI_DrawKartString:
|
||||
V_DrawKartString(LERPS(x), LERPS(y), item->flags, itemstr);
|
||||
@@ -690,7 +690,6 @@ void LUA_HUD_DrawList(huddrawlist_h list)
|
||||
break;
|
||||
default:
|
||||
I_Error("can't draw draw list item: invalid draw list item type");
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -5418,7 +5418,7 @@ void M_SlotCvarIntoModMenu(consvar_t* cvar, const char* category, const char* na
|
||||
}
|
||||
|
||||
if (cvar->flags & CV_NETVAR)
|
||||
OP_CustomCvarMenu[ccvarposition] = (menuitem_t){ IT_STRING | IT_CVAR , NULL, Z_StrDup(va("\x85 %s", name)), cvar, ccvaralphakey };
|
||||
OP_CustomCvarMenu[ccvarposition] = (menuitem_t){ IT_STRING | IT_CVAR, NULL, Z_StrDup(va("\x85 %s", name)), cvar, ccvaralphakey };
|
||||
else
|
||||
OP_CustomCvarMenu[ccvarposition] = (menuitem_t){ IT_STRING | IT_CVAR, NULL, Z_StrDup(name), cvar, ccvaralphakey };
|
||||
|
||||
|
||||
+46
-40
@@ -1694,29 +1694,30 @@ static menuitem_t OP_SaturnMenu[] =
|
||||
{IT_STRING | IT_CVAR, NULL, "Minimum Input Delay", &cv_mindelay, 20},
|
||||
{IT_STRING | IT_CVAR, NULL, "Gentlemens Ping", &cv_gentlemens, 25},
|
||||
{IT_STRING | IT_CVAR, NULL, "Server Info Screen", &cv_serverinfoscreen, 30},
|
||||
{IT_STRING | IT_CVAR, NULL, "Server Addons Info", &cv_serveraddoninfo, 35},
|
||||
|
||||
{IT_STRING | IT_CVAR, NULL, "Skin Select Spinning Speed", &cv_skinselectspin, 40},
|
||||
{IT_STRING | IT_CVAR, NULL, "Skin Select Spinning Speed", &cv_skinselectspin, 45},
|
||||
|
||||
{IT_STRING | IT_CVAR, NULL, "Colorized Speedlines", &cv_coloredspeedlines, 50},
|
||||
{IT_STRING | IT_CVAR, NULL, "Colorized Sneakertrails", &cv_coloredsneakertrail, 55},
|
||||
{IT_STRING | IT_CVAR, NULL, "Colorized Speedlines", &cv_coloredspeedlines, 55},
|
||||
{IT_STRING | IT_CVAR, NULL, "Colorized Sneakertrails", &cv_coloredsneakertrail, 60},
|
||||
|
||||
{IT_STRING | IT_CVAR, NULL, "Player Blendeffects", &cv_playerblendeffects, 65},
|
||||
{IT_STRING | IT_CVAR, NULL, "Player Blendeffects", &cv_playerblendeffects, 70},
|
||||
|
||||
{IT_STRING | IT_CVAR, NULL, "Bananadrag Jitter", &cv_bananajitter, 75},
|
||||
{IT_STRING | IT_CVAR, NULL, "Bananadrag Jitter", &cv_bananajitter, 80},
|
||||
|
||||
{IT_STRING | IT_CVAR, NULL, "Midair Driftsparks", &cv_airsparks, 85},
|
||||
{IT_STRING | IT_CVAR, NULL, "Midair Driftsparks", &cv_airsparks, 90},
|
||||
|
||||
{IT_STRING | IT_CVAR, NULL, "Show Localskin Menus", &cv_showlocalskinmenus, 95},
|
||||
{IT_STRING | IT_CVAR, NULL, "Show Localskin Menus", &cv_showlocalskinmenus, 100},
|
||||
|
||||
{IT_STRING | IT_CVAR, NULL, "Uppercase Menu", &cv_menucaps, 105},
|
||||
{IT_STRING | IT_CVAR, NULL, "Uppercase Menu", &cv_menucaps, 110},
|
||||
|
||||
{IT_STRING | IT_CVAR, NULL, "Keyboard Layout", &cv_keyboardlayout, 115},
|
||||
{IT_STRING | IT_CVAR, NULL, "Keyboard Layout", &cv_keyboardlayout, 120},
|
||||
|
||||
{IT_STRING | IT_CVAR, NULL, "Less Midnight Channel Flicker", &cv_lessflicker, 125},
|
||||
{IT_STRING | IT_CVAR, NULL, "Less Midnight Channel Flicker", &cv_lessflicker, 130},
|
||||
|
||||
{IT_SUBMENU|IT_STRING, NULL, "Saturn Hud...", &OP_SaturnHudDef, 135},
|
||||
{IT_SUBMENU|IT_STRING, NULL, "Sprite Distortion...", &OP_PlayerDistortDef, 140},
|
||||
{IT_SUBMENU|IT_STRING, NULL, "Saturn Credits", &OP_SaturnCreditsDef, 145}, // uwu
|
||||
{IT_SUBMENU|IT_STRING, NULL, "Saturn Hud...", &OP_SaturnHudDef, 140},
|
||||
{IT_SUBMENU|IT_STRING, NULL, "Sprite Distortion...", &OP_PlayerDistortDef, 145},
|
||||
{IT_SUBMENU|IT_STRING, NULL, "Saturn Credits", &OP_SaturnCreditsDef, 150}, // uwu
|
||||
};
|
||||
|
||||
static const char* OP_SaturnTooltips[] =
|
||||
@@ -1726,6 +1727,7 @@ static const char* OP_SaturnTooltips[] =
|
||||
"Practice for online play! 0 = instant response.",
|
||||
"Simulate online input delay when hosting a server.\nValue choosen by Player with the lowest ping",
|
||||
"Show a screen before joining a server displaying important information about it",
|
||||
"Show a amount and types of addons loaded by server when joining",
|
||||
"How much speen do you want?",
|
||||
"Colourize the speedlines in your skincolor if you go fast enough!",
|
||||
"Colourize the sneaker flame trails in your skincolor!",
|
||||
@@ -1828,47 +1830,49 @@ static menuitem_t OP_SaturnHudMenu[] =
|
||||
{
|
||||
{IT_HEADER, NULL, "Saturn Hud Options", NULL, 0},
|
||||
|
||||
{IT_STRING|IT_CVAR, NULL, "Speedometer Style", &cv_newspeedometer, 10},
|
||||
{IT_STRING|IT_CVAR, NULL, "Battle Speedometer", &cv_battlespeedo, 15},
|
||||
{IT_STRING|IT_CVAR, NULL, "Speedometer Style", &cv_newspeedometer, 10},
|
||||
{IT_STRING|IT_CVAR, NULL, "Battle Speedometer", &cv_battlespeedo, 15},
|
||||
|
||||
{IT_STRING|IT_CVAR, NULL, "Colourized HUD", &cv_colorizedhud, 25},
|
||||
{IT_STRING|IT_CVAR, NULL, "Colourized Itembox", &cv_colorizeditembox, 30},
|
||||
{IT_STRING|IT_CVAR, NULL, "Colourized HUD Color", &cv_colorizedhudcolor, 35},
|
||||
{IT_STRING|IT_CVAR, NULL, "Colourized HUD", &cv_colorizedhud, 25},
|
||||
{IT_STRING|IT_CVAR, NULL, "Colourized Itembox", &cv_colorizeditembox, 30},
|
||||
{IT_STRING|IT_CVAR, NULL, "Colourized HUD Color", &cv_colorizedhudcolor, 35},
|
||||
|
||||
{IT_STRING|IT_CVAR, NULL, "Input Display", &cv_showinput, 45},
|
||||
{IT_STRING|IT_CVAR, NULL, "Input Display", &cv_showinput, 45},
|
||||
|
||||
{IT_STRING|IT_CVAR, NULL, "Stat Display", &cv_showstats, 55},
|
||||
{IT_STRING|IT_CVAR, NULL, "Stat Display", &cv_showstats, 55},
|
||||
{IT_STRING|IT_CVAR, NULL, "Skin Name in Stat Display", &cv_showstats_skinname, 60},
|
||||
|
||||
{IT_STRING|IT_CVAR, NULL, "Higher Resolution Portraits", &cv_highresportrait, 65},
|
||||
{IT_STRING|IT_CVAR, NULL, "Higher Resolution Portraits", &cv_highresportrait, 70},
|
||||
|
||||
{IT_STRING|IT_CVAR, NULL, "Small Positionnumber", &cv_smallposnum, 75},
|
||||
{IT_STRING|IT_CVAR, NULL, "Positionnumber Animation", &cv_posanim, 80},
|
||||
{IT_STRING|IT_CVAR, NULL, "Small Positionnumber", &cv_smallposnum, 80},
|
||||
{IT_STRING|IT_CVAR, NULL, "Positionnumber Animation", &cv_posanim, 85},
|
||||
|
||||
{IT_STRING|IT_CVAR, NULL, "Flash Lap Times", &cv_showlaptimes, 90},
|
||||
{IT_STRING|IT_CVAR, NULL, "Flash Lap Times", &cv_showlaptimes, 95},
|
||||
|
||||
{IT_STRING|IT_CVAR, NULL, "Multi-Item icons", &cv_multiitemicon, 100},
|
||||
{IT_STRING|IT_CVAR, NULL, "Item Amount Number", &cv_huditemamount, 105},
|
||||
{IT_STRING|IT_CVAR, NULL, "Animated Roulette", &cv_fancyroulette, 110},
|
||||
{IT_STRING|IT_CVAR, NULL, "Multi-Item icons", &cv_multiitemicon, 105},
|
||||
{IT_STRING|IT_CVAR, NULL, "Item Amount Number", &cv_huditemamount, 110},
|
||||
{IT_STRING|IT_CVAR, NULL, "Animated Roulette", &cv_fancyroulette, 115},
|
||||
|
||||
{IT_STRING|IT_CVAR, NULL, "Show Lap Emblem", &cv_showlapemblem, 120},
|
||||
{IT_STRING|IT_CVAR, NULL, "Show Cecho Messages", &cv_cechotoggle, 125},
|
||||
{IT_STRING|IT_CVAR, NULL, "Show Lap Emblem", &cv_showlapemblem, 125},
|
||||
{IT_STRING|IT_CVAR, NULL, "Show Cecho Messages", &cv_cechotoggle, 130},
|
||||
|
||||
{IT_STRING|IT_CVAR, NULL, "Show Names on Minimap", &cv_showminimapnames, 135},
|
||||
{IT_STRING|IT_CVAR, NULL, "Small Minimap Players", &cv_minihead, 140},
|
||||
{IT_STRING|IT_CVAR, NULL, "Spin Minimap Icons", &cv_spinoutroll, 145},
|
||||
{IT_STRING|IT_CVAR, NULL, "Player Angle Visual", &cv_showminimapangle, 150},
|
||||
{IT_STRING|IT_CVAR, NULL, "Show Names on Minimap", &cv_showminimapnames, 140},
|
||||
{IT_STRING|IT_CVAR, NULL, "Show Finished on Minimap", &cv_showminimapfinished, 145},
|
||||
{IT_STRING|IT_CVAR, NULL, "Small Minimap Players", &cv_minihead, 150},
|
||||
{IT_STRING|IT_CVAR, NULL, "Spin Minimap Icons", &cv_spinoutroll, 155},
|
||||
{IT_STRING|IT_CVAR, NULL, "Player Angle Visual", &cv_showminimapangle, 160},
|
||||
|
||||
{IT_STRING|IT_CVAR, NULL, "Music Credits", &cv_songcredits, 160},
|
||||
{IT_STRING|IT_CVAR, NULL, "Music Credits on Pause", &cv_pausesongcredits, 165},
|
||||
{IT_STRING|IT_CVAR, NULL, "Music Credits", &cv_songcredits, 170},
|
||||
{IT_STRING|IT_CVAR, NULL, "Music Credits on Pause", &cv_pausesongcredits, 175},
|
||||
|
||||
{IT_STRING|IT_CVAR, NULL, "Beta Intermissionscreen", &cv_betainterscreen, 175},
|
||||
{IT_STRING|IT_CVAR, NULL, "Beta Intermissionscreen", &cv_betainterscreen, 185},
|
||||
|
||||
{IT_STRING|IT_CVAR, NULL, "Show Director Prompt", &cv_showdirectorhud, 185},
|
||||
{IT_STRING|IT_CVAR, NULL, "Show Director Prompt", &cv_showdirectorhud, 195},
|
||||
|
||||
{IT_STRING|IT_SUBMENU, NULL, "Nametags...", &OP_NametagDef, 195},
|
||||
{IT_STRING|IT_SUBMENU, NULL, "Driftgauge...", &OP_DriftGaugeDef, 200},
|
||||
{IT_STRING|IT_SUBMENU, NULL, "Nametags...", &OP_NametagDef, 205},
|
||||
{IT_STRING|IT_SUBMENU, NULL, "Driftgauge...", &OP_DriftGaugeDef, 210},
|
||||
|
||||
{IT_SUBMENU|IT_STRING, NULL, "Hud Offsets...", &OP_HudOffsetDef, 210},
|
||||
{IT_SUBMENU|IT_STRING, NULL, "Hud Offsets...", &OP_HudOffsetDef, 220},
|
||||
};
|
||||
|
||||
static const char* OP_SaturnHudTooltips[] =
|
||||
@@ -1881,6 +1885,7 @@ static const char* OP_SaturnHudTooltips[] =
|
||||
"The color to use instead of the player color when\ncolourized hud is enabled.",
|
||||
"Displays the input display and lets you choose its style.",
|
||||
"Enable the stat display.",
|
||||
"Show skin name in the stat display.",
|
||||
"Enable the use of the higher resolution want icons instead of rank\nfor some places.",
|
||||
"Make the Postionnumber half the size.",
|
||||
"Disable the animation of the Positionnumber\nwhen overtaking someone.",
|
||||
@@ -1891,6 +1896,7 @@ static const char* OP_SaturnHudTooltips[] =
|
||||
"Show the big 'LAP' text on a lap change.",
|
||||
"Show the big Cecho Messages.",
|
||||
"Show player names on the minimap.",
|
||||
"Show players that have finished already on the minimap.",
|
||||
"Minimize the player icons on the minimap.",
|
||||
"Erratically rotate player icons during spinouts.",
|
||||
"Visualize the player facing angle.",
|
||||
|
||||
+5
-5
@@ -256,7 +256,7 @@ static boolean M_TextInputHandleBase(textinput_t *input, INT32 key, boolean emot
|
||||
return true;
|
||||
}
|
||||
|
||||
if (ctrldown && (cv_keyboardlayout.value != 3 || (cv_keyboardlayout.value == 3 && !altdown)))
|
||||
if (ctrldown && (cv_keyboardlayout.value!=3 || !altdown))
|
||||
{
|
||||
if (key == 'x' || key == 'X')
|
||||
{
|
||||
@@ -381,10 +381,10 @@ static boolean M_TextInputHandleBase(textinput_t *input, INT32 key, boolean emot
|
||||
// allow people to use keypad in console (good for typing IP addresses) - Calum
|
||||
if (key >= KEY_KEYPAD7 && key <= KEY_KPADDEL)
|
||||
{
|
||||
char keypad_translation[] = {'7','8','9','-',
|
||||
'4','5','6','+',
|
||||
'1','2','3',
|
||||
'0','.'};
|
||||
const char keypad_translation[] = {'7','8','9','-',
|
||||
'4','5','6','+',
|
||||
'1','2','3',
|
||||
'0', '.'};
|
||||
|
||||
key = keypad_translation[key - KEY_KEYPAD7];
|
||||
}
|
||||
|
||||
@@ -599,9 +599,14 @@ Update_parameters (void)
|
||||
delayed = MSInProgress;
|
||||
|
||||
if (delayed)/* do another update after the current one */
|
||||
{
|
||||
registered = 0;
|
||||
MSUpdateAgain = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
registered = MSRegistered;
|
||||
}
|
||||
}
|
||||
Unlock_state();
|
||||
|
||||
|
||||
+9
-4
@@ -3650,7 +3650,7 @@ static inline boolean PIT_GrenadeRing(mobj_t *thing)
|
||||
return true;
|
||||
|
||||
if (thing->player && (thing->player->kartstuff[k_hyudorotimer]
|
||||
|| (G_BattleGametype() && thing->player && thing->player->kartstuff[k_bumper] <= 0 && thing->player->kartstuff[k_comebacktimer])))
|
||||
|| (G_BattleGametype() && thing->player->kartstuff[k_bumper] <= 0 && thing->player->kartstuff[k_comebacktimer])))
|
||||
return true;
|
||||
|
||||
if ((gametype == GT_CTF || gametype == GT_TEAMMATCH)
|
||||
@@ -5301,7 +5301,7 @@ void A_MixUp(void *thing)
|
||||
if (playeringame[i] && players[i].mo && players[i].mo->health > 0 && players[i].playerstate == PST_LIVE
|
||||
&& !players[i].exiting && !players[i].powers[pw_super])
|
||||
{
|
||||
if ((netgame || multiplayer) && players[i].spectator) // Ignore spectators
|
||||
if (netgame && players[i].spectator) // Ignore spectators
|
||||
continue;
|
||||
|
||||
numplayers++;
|
||||
@@ -5344,6 +5344,11 @@ void A_MixUp(void *thing)
|
||||
}
|
||||
}
|
||||
|
||||
// idk if we ever really end up here
|
||||
// but bad things would happen if we do without this
|
||||
if (one == -1)
|
||||
return;
|
||||
|
||||
//get this done first!
|
||||
tempthing = players[one].mo->tracer;
|
||||
P_SetTarget(&players[one].mo->tracer, players[two].mo->tracer);
|
||||
@@ -7918,7 +7923,7 @@ void A_ItemPop(void *thing)
|
||||
|
||||
if (!(actor->target && actor->target->player))
|
||||
{
|
||||
if (cv_debug && !(actor->target && actor->target->player))
|
||||
if (cv_debug)
|
||||
CONS_Printf("ERROR: Powerup has no target!\n");
|
||||
return;
|
||||
}
|
||||
@@ -8780,7 +8785,7 @@ void A_ReaperThinker(void *thing)
|
||||
actor->angle = R_PointToAngle2(actor->x, actor->y, actor->target->x, actor->target->y);
|
||||
|
||||
// The player we should target if it's near us:
|
||||
for (i = 0; i<MAXPLAYERS; i++)
|
||||
for (i = 0; i < MAXPLAYERS; i++)
|
||||
{
|
||||
|
||||
if (!playeringame[i])
|
||||
|
||||
+1
-21
@@ -1219,24 +1219,6 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
|
||||
|
||||
case MT_EXTRALARGEBUBBLE:
|
||||
return; // SRB2kart - don't need bubbles mucking with the player
|
||||
if ((player->powers[pw_shield] & SH_NOSTACK) == SH_ELEMENTAL)
|
||||
return;
|
||||
if (UNLIKELY(maptol & TOL_NIGHTS))
|
||||
return;
|
||||
if (UNLIKELY(mariomode))
|
||||
return;
|
||||
else if (toucher->eflags & MFE_VERTICALFLIP)
|
||||
{
|
||||
if (special->z+special->height < toucher->z + toucher->height / 3
|
||||
|| special->z+special->height > toucher->z + (toucher->height*2/3))
|
||||
return; // Only go in the mouth
|
||||
}
|
||||
else if (special->z < toucher->z + toucher->height / 3
|
||||
|| special->z > toucher->z + (toucher->height*2/3))
|
||||
return; // Only go in the mouth
|
||||
|
||||
toucher->momx = toucher->momy = toucher->momz = 0;
|
||||
break;
|
||||
|
||||
case MT_WATERDROP:
|
||||
if (special->state == &states[special->info->spawnstate])
|
||||
@@ -1877,11 +1859,9 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source)
|
||||
P_SetThingPosition(target);
|
||||
P_InstaThrust(target,target->angle,FixedMul(2*FRACUNIT, target->scale));
|
||||
target->momz = FixedMul(7*FRACUNIT, target->scale);
|
||||
if (flip)
|
||||
target->momz = -target->momz;
|
||||
|
||||
if (flip)
|
||||
{
|
||||
target->momz = -target->momz;
|
||||
target = P_SpawnMobj(x,y,z-FixedMul(12*FRACUNIT, target->scale),MT_SPIKE);
|
||||
target->eflags |= MFE_VERTICALFLIP;
|
||||
}
|
||||
|
||||
@@ -212,7 +212,6 @@ mobj_t *P_SpawnGhostMobj(mobj_t *mobj);
|
||||
void P_GivePlayerRings(player_t *player, INT32 num_rings);
|
||||
void P_GivePlayerLives(player_t *player, INT32 numlives);
|
||||
UINT8 P_GetNextEmerald(void);
|
||||
void P_GiveEmerald(boolean spawnObj);
|
||||
void P_ResetScore(player_t *player);
|
||||
boolean P_AutoPause(void);
|
||||
|
||||
|
||||
+5
-3
@@ -5620,13 +5620,15 @@ void P_SetScale(mobj_t *mobj, fixed_t newscale)
|
||||
void P_Attract(mobj_t *source, mobj_t *dest, boolean nightsgrab) // Home in on your target
|
||||
{
|
||||
fixed_t dist, ndist, speedmul;
|
||||
fixed_t tx = dest->x;
|
||||
fixed_t ty = dest->y;
|
||||
fixed_t tz = dest->z + (dest->height/2); // Aim for center
|
||||
fixed_t tx, ty, tz;
|
||||
|
||||
if (!dest || dest->health <= 0 || !dest->player || !source->tracer)
|
||||
return;
|
||||
|
||||
tx = dest->x;
|
||||
ty = dest->y;
|
||||
tz = dest->z + (dest->height/2); // Aim for center
|
||||
|
||||
// change slope
|
||||
dist = P_AproxDistance(P_AproxDistance(tx - source->x, ty - source->y), tz - source->z);
|
||||
|
||||
|
||||
+9
-37
@@ -220,32 +220,6 @@ UINT8 P_GetNextEmerald(void)
|
||||
return (UINT8)(gamemap - sstage_start);
|
||||
}
|
||||
|
||||
//
|
||||
// P_GiveEmerald
|
||||
//
|
||||
// Award an emerald upon completion
|
||||
// of a special stage.
|
||||
//
|
||||
void P_GiveEmerald(boolean spawnObj)
|
||||
{
|
||||
INT32 i;
|
||||
UINT8 em;
|
||||
|
||||
S_StartSound(NULL, sfx_cgot); // Got the emerald!
|
||||
em = P_GetNextEmerald();
|
||||
emeralds |= (1 << em);
|
||||
|
||||
if (spawnObj)
|
||||
{
|
||||
for (i = 0; i < MAXPLAYERS; i++)
|
||||
{
|
||||
if (playeringame[i])
|
||||
P_SetMobjState(P_SpawnMobj(players[i].mo->x, players[i].mo->y, players[i].mo->z + players[i].mo->info->height, MT_GOTEMERALD),
|
||||
mobjinfo[MT_GOTEMERALD].spawnstate + em);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// P_ResetScore
|
||||
//
|
||||
@@ -1226,7 +1200,6 @@ mobj_t *P_SpawnGhostMobj(mobj_t *mobj)
|
||||
|
||||
ghost->pitch = mobj->pitch;
|
||||
ghost->roll = mobj->roll;
|
||||
ghost->sloperoll = mobj->sloperoll;
|
||||
ghost->rollangle = mobj->rollangle;
|
||||
ghost->sloperoll = mobj->sloperoll;
|
||||
ghost->slopepitch = mobj->slopepitch;
|
||||
@@ -3130,19 +3103,16 @@ void P_ToggleDemoCamera(UINT8 viewnum)
|
||||
return;
|
||||
}
|
||||
|
||||
if (!cam->freecam) // toggle on
|
||||
if (!cam->freecam) // toggle on
|
||||
{
|
||||
cam->freecam = true;
|
||||
cam->button_a_held = 2;
|
||||
cam->reset_aiming = true;
|
||||
|
||||
// get rid of some hud elements
|
||||
if (displayplayers[0] != consoleplayer)
|
||||
{
|
||||
displayplayers[0] = consoleplayer;
|
||||
}
|
||||
displayplayers[0] = consoleplayer;
|
||||
}
|
||||
else // toggle off
|
||||
else // toggle off
|
||||
{
|
||||
cam->freecam = false;
|
||||
G_FixCamera(viewnum+1);
|
||||
@@ -4056,7 +4026,7 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall
|
||||
|
||||
if (timeover)
|
||||
thiscam->angle = angle;
|
||||
else if (!camstill && !resetcalled && !paused && timeover != 1)
|
||||
else if (!camstill && !resetcalled && !paused)
|
||||
thiscam->angle = R_PointToAngle2(thiscam->x, thiscam->y, viewpointx, viewpointy);
|
||||
|
||||
if (timeover == 1)
|
||||
@@ -4179,10 +4149,12 @@ void P_ResetLocalCamAiming(player_t *player)
|
||||
|
||||
boolean P_SpectatorJoinGame(player_t *player)
|
||||
{
|
||||
const boolean islocalplayer = P_IsLocalPlayer(player);
|
||||
|
||||
// Team changing isn't allowed.
|
||||
if (!cv_allowteamchange.value)
|
||||
{
|
||||
if (P_IsLocalPlayer(player))
|
||||
if (islocalplayer)
|
||||
CONS_Printf(M_GetText("Server does not allow team change.\n"));
|
||||
}
|
||||
// Team changing in Team Match and CTF
|
||||
@@ -4230,7 +4202,7 @@ boolean P_SpectatorJoinGame(player_t *player)
|
||||
P_ResetLocalCamAiming(player);
|
||||
|
||||
//Reset away view
|
||||
if (P_IsLocalPlayer(player) && displayplayers[0] != consoleplayer)
|
||||
if (islocalplayer && displayplayers[0] != consoleplayer)
|
||||
displayplayers[0] = consoleplayer;
|
||||
|
||||
if (changeto == 1)
|
||||
@@ -4257,7 +4229,7 @@ boolean P_SpectatorJoinGame(player_t *player)
|
||||
P_ResetLocalCamAiming(player);
|
||||
|
||||
//Reset away view
|
||||
if (P_IsLocalPlayer(player) && displayplayers[0] != consoleplayer)
|
||||
if (islocalplayer && displayplayers[0] != consoleplayer)
|
||||
displayplayers[0] = consoleplayer;
|
||||
|
||||
HU_AddChatText(va(M_GetText("\x82*%s entered the game."), player_names[player-players]), false);
|
||||
|
||||
@@ -991,7 +991,6 @@ static void R_Subsector(size_t num)
|
||||
visffloor[numffloors].height = polysec->floorheight;
|
||||
visffloor[numffloors].polyobj = po;
|
||||
visffloor[numffloors].slope = NULL;
|
||||
// visffloor[numffloors].ffloor = rover;
|
||||
po->visplane = visffloor[numffloors].plane;
|
||||
numffloors++;
|
||||
}
|
||||
|
||||
+4
-46
@@ -37,44 +37,6 @@
|
||||
// Not sure if this is necessary, but it was in w_wad.c, so I'm putting it here too -Shadow Hog
|
||||
#include <errno.h>
|
||||
|
||||
//
|
||||
// Texture definition.
|
||||
// Each texture is composed of one or more patches,
|
||||
// with patches being lumps stored in the WAD.
|
||||
// The lumps are referenced by number, and patched
|
||||
// into the rectangular texture space using origin
|
||||
// and possibly other attributes.
|
||||
//
|
||||
typedef struct
|
||||
{
|
||||
INT16 originx, originy;
|
||||
INT16 patch, stepdir, colormap;
|
||||
} ATTRPACK mappatch_t;
|
||||
|
||||
//
|
||||
// Texture definition.
|
||||
// An SRB2 wall texture is a list of patches
|
||||
// which are to be combined in a predefined order.
|
||||
//
|
||||
typedef struct
|
||||
{
|
||||
char name[8];
|
||||
INT32 masked;
|
||||
INT16 width;
|
||||
INT16 height;
|
||||
INT32 columndirectory; // FIXTHIS: OBSOLETE
|
||||
INT16 patchcount;
|
||||
mappatch_t patches[1];
|
||||
} ATTRPACK maptexture_t;
|
||||
|
||||
// Store lists of lumps for F_START/F_END etc.
|
||||
typedef struct
|
||||
{
|
||||
UINT16 wadfile;
|
||||
UINT16 firstlump;
|
||||
size_t numlumps;
|
||||
} lumplist_t;
|
||||
|
||||
//
|
||||
// Graphics.
|
||||
// SRB2 graphics for walls and sprites
|
||||
@@ -836,11 +798,7 @@ static texpatch_t *R_ParsePatch(boolean actuallyLoadPatch)
|
||||
}
|
||||
else
|
||||
{
|
||||
if (patchName != NULL)
|
||||
{
|
||||
Z_Free(patchName);
|
||||
}
|
||||
|
||||
Z_Free(patchName);
|
||||
patchName = (char *)Z_Malloc((texturesTokenLength+1)*sizeof(char),PU_STATIC,NULL);
|
||||
memcpy(patchName,texturesToken,texturesTokenLength*sizeof(char));
|
||||
patchName[texturesTokenLength] = '\0';
|
||||
@@ -1366,7 +1324,7 @@ void R_ReInitColormaps(UINT16 num, lumpnum_t newencoremap)
|
||||
colormap_p = colormap_p2 = colormaps;
|
||||
colormap_p += COLORMAP_REMAPOFFSET;
|
||||
|
||||
for (p = 0; p < 32; p++)
|
||||
for (p = 0; p < LIGHTLEVELS; p++)
|
||||
{
|
||||
for (i = 0; i < 256; i++)
|
||||
{
|
||||
@@ -1588,7 +1546,7 @@ INT32 R_CreateColormap(char *p1, char *p2, char *p3)
|
||||
|
||||
// Calculate the palette index for each palette index, for each light level
|
||||
// (as well as the two unused colormap lines we inherited from Doom)
|
||||
for (p = 0; p < 32; p++)
|
||||
for (p = 0; p < LIGHTLEVELS; p++)
|
||||
{
|
||||
for (i = 0; i < 256; i++)
|
||||
{
|
||||
@@ -1622,7 +1580,7 @@ INT32 R_CreateColormap(char *p1, char *p2, char *p3)
|
||||
{
|
||||
lighttable_t *colormap_p2 = extra_colormaps[mapnum].colormap;
|
||||
|
||||
for (p = 0; p < 32; p++)
|
||||
for (p = 0; p < LIGHTLEVELS; p++)
|
||||
{
|
||||
for (i = 0; i < 256; i++)
|
||||
{
|
||||
|
||||
@@ -45,9 +45,6 @@ enum
|
||||
TEXTURETYPE_COMPOSITE,
|
||||
};
|
||||
|
||||
// A maptexturedef_t describes a rectangular texture,
|
||||
// which is composed of one or more mappatch_t structures
|
||||
// that arrange graphic patches.
|
||||
typedef struct
|
||||
{
|
||||
// Keep name for switch changing, etc.
|
||||
|
||||
+33
-33
@@ -204,7 +204,7 @@ static void R_DrawColumnTemplate(drawcolumndata_t *dc)
|
||||
intptr_t frac;
|
||||
// Looks familiar.
|
||||
const intptr_t fracstep = dc->iscale;
|
||||
const intptr_t heightmask = dc->sourcelength-1; // CPhipps - specify type
|
||||
intptr_t heightmask = dc->sourcelength-1; // CPhipps - specify type
|
||||
constexpr INT32 npow2min = -1;
|
||||
const INT32 npow2max = dc->sourcelength;
|
||||
|
||||
@@ -237,10 +237,10 @@ static void R_DrawColumnTemplate(drawcolumndata_t *dc)
|
||||
// Determine scaling, which is the only mapping to be done.
|
||||
frac = (dc->texturemid + FixedMul((dc->yl << FRACBITS) - centeryfrac, fracstep));
|
||||
|
||||
switch (heightmask)
|
||||
switch (dc->sourcelength)
|
||||
{
|
||||
case 255:
|
||||
case 127:
|
||||
case 256:
|
||||
case 128:
|
||||
{
|
||||
while (count--)
|
||||
{
|
||||
@@ -251,7 +251,7 @@ static void R_DrawColumnTemplate(drawcolumndata_t *dc)
|
||||
}
|
||||
}
|
||||
break;
|
||||
case npow2min:
|
||||
case 0:
|
||||
{
|
||||
if (frac < 0)
|
||||
// adjust in case we underread
|
||||
@@ -269,42 +269,22 @@ static void R_DrawColumnTemplate(drawcolumndata_t *dc)
|
||||
break;
|
||||
default:
|
||||
{
|
||||
if (!(dc->sourcelength & heightmask)) // power of 2 -- killough
|
||||
if (dc->sourcelength & heightmask) // not a power of 2 -- killough
|
||||
{
|
||||
while ((count -= 2) >= 0) // texture height is a power of 2 -- killough
|
||||
{
|
||||
*dest = R_DrawColumnPixel<Type>(dc, dest, (frac>>FRACBITS) & heightmask, source, colormap);
|
||||
|
||||
dest += stride;
|
||||
frac += fracstep;
|
||||
|
||||
*dest = R_DrawColumnPixel<Type>(dc, dest, (frac>>FRACBITS) & heightmask, source, colormap);
|
||||
|
||||
dest += stride;
|
||||
frac += fracstep;
|
||||
}
|
||||
|
||||
if (count & 1)
|
||||
{
|
||||
*dest = R_DrawColumnPixel<Type>(dc, dest, (frac>>FRACBITS) & heightmask, source, colormap);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
const intptr_t fixed_heightmask = dc->texheight << FRACBITS;
|
||||
heightmask = dc->texheight << FRACBITS;
|
||||
|
||||
if (frac < 0)
|
||||
{
|
||||
while ((frac += fixed_heightmask) < 0)
|
||||
while ((frac += heightmask) < 0)
|
||||
{
|
||||
;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
while (frac >= fixed_heightmask)
|
||||
while (frac >= heightmask)
|
||||
{
|
||||
frac -= fixed_heightmask;
|
||||
frac -= heightmask;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -324,7 +304,7 @@ static void R_DrawColumnTemplate(drawcolumndata_t *dc)
|
||||
// Avoid overflow.
|
||||
if (fracstep > 0x7FFFFFFF - frac)
|
||||
{
|
||||
frac += fracstep - fixed_heightmask;
|
||||
frac += fracstep - heightmask;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
@@ -332,13 +312,33 @@ static void R_DrawColumnTemplate(drawcolumndata_t *dc)
|
||||
frac += fracstep;
|
||||
}
|
||||
|
||||
while (frac >= fixed_heightmask)
|
||||
while (frac >= heightmask)
|
||||
{
|
||||
frac -= fixed_heightmask;
|
||||
frac -= heightmask;
|
||||
}
|
||||
}
|
||||
while (--count);
|
||||
}
|
||||
else
|
||||
{
|
||||
while ((count -= 2) >= 0) // texture height is a power of 2 -- killough
|
||||
{
|
||||
*dest = R_DrawColumnPixel<Type>(dc, dest, ((frac>>FRACBITS) & heightmask), source, colormap);
|
||||
|
||||
dest += stride;
|
||||
frac += fracstep;
|
||||
|
||||
*dest = R_DrawColumnPixel<Type>(dc, dest, ((frac>>FRACBITS) & heightmask), source, colormap);
|
||||
|
||||
dest += stride;
|
||||
frac += fracstep;
|
||||
}
|
||||
|
||||
if (count & 1)
|
||||
{
|
||||
*dest = R_DrawColumnPixel<Type>(dc, dest, ((frac>>FRACBITS) & heightmask), source, colormap);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
+6
-6
@@ -342,14 +342,14 @@ angle_t R_PointToAngle64(INT64 x, INT64 y)
|
||||
return (y -= viewy, (x -= viewx) || y) ?
|
||||
x >= 0 ?
|
||||
y >= 0 ?
|
||||
(x > y) ? tantoangle[SlopeDivEx(y,x)] : // octant 0
|
||||
ANGLE_90-tantoangle[SlopeDivEx(x,y)] : // octant 1
|
||||
x > (y = -y) ? 0-tantoangle[SlopeDivEx(y,x)] : // octant 8
|
||||
ANGLE_270+tantoangle[SlopeDivEx(x,y)] : // octant 7
|
||||
(x > y) ? tantoangle[SlopeDivEx(y,x)] : // octant 0
|
||||
ANGLE_90-tantoangle[SlopeDivEx(x,y)] : // octant 1
|
||||
x > (y = -y) ? 0-tantoangle[SlopeDivEx(y,x)] : // octant 8
|
||||
ANGLE_270+tantoangle[SlopeDivEx(x,y)] : // octant 7
|
||||
y >= 0 ? (x = -x) > y ? ANGLE_180-tantoangle[SlopeDivEx(y,x)] : // octant 3
|
||||
ANGLE_90 + tantoangle[SlopeDivEx(x,y)] : // octant 2
|
||||
ANGLE_90 + tantoangle[SlopeDivEx(x,y)] : // octant 2
|
||||
(x = -x) > (y = -y) ? ANGLE_180+tantoangle[SlopeDivEx(y,x)] : // octant 4
|
||||
ANGLE_270-tantoangle[SlopeDivEx(x,y)] : // octant 5
|
||||
ANGLE_270-tantoangle[SlopeDivEx(x,y)] : // octant 5
|
||||
0;
|
||||
}
|
||||
|
||||
|
||||
+1
-4
@@ -1282,10 +1282,7 @@ void R_DrawSinglePlane(drawspandata_t* ds, visplane_t *pl, boolean allow_paralle
|
||||
else
|
||||
{
|
||||
// Don't mess with angle on slopes! We'll handle this ourselves later
|
||||
if (viewangle != pl->viewangle + pl->plangle)
|
||||
{
|
||||
viewangle = pl->viewangle + pl->plangle;
|
||||
}
|
||||
viewangle = pl->viewangle + pl->plangle;
|
||||
|
||||
ds->planeheight = abs(pl->height - pl->viewz);
|
||||
ds->planezlight = zlight[light];
|
||||
|
||||
+1
-1
@@ -50,7 +50,7 @@ extern fixed_t windowtop;
|
||||
extern fixed_t windowbottom;
|
||||
extern INT32 lengthcol;
|
||||
|
||||
FUNCINLINE static ATTRINLINE INT32 R_ThingLightLevel(mobj_t* thing)
|
||||
FUNCINLINE static ATTRINLINE INT32 R_ThingLightLevel(const mobj_t* thing)
|
||||
{
|
||||
return (INT32)thing->lightlevel;
|
||||
}
|
||||
|
||||
+9
-14
@@ -1286,7 +1286,8 @@ static boolean ReadMusicDefFields(UINT16 wadnum, int line, char *stoken, musicde
|
||||
CONS_Alert(CONS_WARNING,
|
||||
"MUSICDEF: Field '%s' is missing name. (file %s, line %d)\n",
|
||||
stoken, wadfiles[wadnum]->filename, line);
|
||||
goto skip_lump;
|
||||
(void)strtok(NULL, " ");
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1304,10 +1305,6 @@ static boolean ReadMusicDefFields(UINT16 wadnum, int line, char *stoken, musicde
|
||||
|
||||
(*defp) = def;
|
||||
}
|
||||
|
||||
skip_lump:
|
||||
stoken = strtok(NULL, " ");
|
||||
line++;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1324,7 +1321,8 @@ skip_lump:
|
||||
CONS_Alert(CONS_WARNING,
|
||||
"MUSICDEF: Field '%s' is missing value. (file %s, line %d)\n",
|
||||
stoken, wadfiles[wadnum]->filename, line);
|
||||
goto skip_field;
|
||||
(void)strtok(NULL, " ");
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1376,10 +1374,6 @@ skip_lump:
|
||||
else
|
||||
CONS_Alert(CONS_WARNING, "MUSICDEF: Invalid field '%s'. (file %s, line %d)\n", stoken, wadfiles[wadnum]->filename, line);
|
||||
#undef ADDDEF
|
||||
|
||||
skip_field:
|
||||
stoken = strtok(NULL, "= ");
|
||||
line++;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1404,7 +1398,8 @@ void S_LoadMusicDefs(UINT16 wadnum)
|
||||
|
||||
for (int k = 0; k < 2; k++)
|
||||
{
|
||||
lumpnum = W_CheckNumForNamePwad((k == 1 ? "MUSCINFO" : "MUSICDEF") , wadnum, 0); //check for MUSCINFO lump on 2nd iteration
|
||||
const char *lumpname = (k == 1 ? "MUSCINFO" : "MUSICDEF");
|
||||
lumpnum = W_CheckNumForNamePwad(lumpname, wadnum, 0); //check for MUSCINFO lump on 2nd iteration
|
||||
|
||||
if (lumpnum == INT16_MAX)
|
||||
continue;
|
||||
@@ -1430,7 +1425,7 @@ void S_LoadMusicDefs(UINT16 wadnum)
|
||||
nlf = 1;
|
||||
else
|
||||
nlf = 0;
|
||||
*lf++ = '\0';/* now we can delimit to here */
|
||||
*lf++ = '\0'; /* now we can delimit to here */
|
||||
}
|
||||
|
||||
stoken = strtok(stoken, " ");
|
||||
@@ -1452,10 +1447,10 @@ void S_LoadMusicDefs(UINT16 wadnum)
|
||||
}
|
||||
while (nlf || ncr) ;
|
||||
|
||||
stoken = lf;/* now the next nonempty line */
|
||||
stoken = lf; /* now the next nonempty line */
|
||||
}
|
||||
else
|
||||
break;/* EOF */
|
||||
break; /* EOF */
|
||||
}
|
||||
|
||||
free(musdeftext);
|
||||
|
||||
+44
-1
@@ -304,7 +304,7 @@ static void I_StartupConsole(void)
|
||||
if (!consolevent)
|
||||
return;
|
||||
|
||||
if (isatty(STDIN_FILENO)!=1)
|
||||
if (isatty(STDIN_FILENO) != 1)
|
||||
{
|
||||
I_OutputMsg("stdin is not a tty, tty console mode failed\n");
|
||||
consolevent = false;
|
||||
@@ -729,6 +729,8 @@ static void JoyReset(SDLJoyInfo_t *JoySet)
|
||||
#if (SDL_VERSION_ATLEAST(2,32,4))
|
||||
JoySet->id = -1;
|
||||
#endif
|
||||
JoySet->hasled = false;
|
||||
JoySet->hasrumble = false;
|
||||
}
|
||||
|
||||
/** \brief SDL info about joystick
|
||||
@@ -949,6 +951,13 @@ static int joy_open(int playerIndex, int joyIndex)
|
||||
JoyInfo[playerIndex].id = I_GetJoystickDeviceIndex(JoyInfo[playerIndex].dev);
|
||||
#endif
|
||||
|
||||
#if (SDL_VERSION_ATLEAST(2,0,14))
|
||||
JoyInfo[playerIndex].hasled = SDL_GameControllerHasLED(JoyInfo[playerIndex].dev);
|
||||
#endif
|
||||
#if (SDL_VERSION_ATLEAST(2,0,18))
|
||||
JoyInfo[playerIndex].hasrumble = SDL_GameControllerHasRumble(JoyInfo[playerIndex].dev);
|
||||
#endif
|
||||
|
||||
return SDL_CONTROLLER_AXIS_MAX;
|
||||
}
|
||||
|
||||
@@ -996,6 +1005,8 @@ void I_InitJoystick(UINT8 index)
|
||||
#if (SDL_VERSION_ATLEAST(2,32,4))
|
||||
JoyInfo[index].id = -1;
|
||||
#endif
|
||||
JoyInfo[index].hasled = false;
|
||||
JoyInfo[index].hasrumble = false;
|
||||
|
||||
if (cv_usejoystick[index].value)
|
||||
newcontroller = SDL_GameControllerOpen(cv_usejoystick[index].value-1);
|
||||
@@ -1130,6 +1141,26 @@ const char *I_GetJoyName(INT32 joyindex)
|
||||
return joyname;
|
||||
}
|
||||
|
||||
boolean I_GamepadHasLED(INT32 playernum)
|
||||
{
|
||||
#if !(SDL_VERSION_ATLEAST(2,0,14))
|
||||
(void)playernum;
|
||||
return false;
|
||||
#else
|
||||
return (JoyInfo[playernum].dev != NULL && JoyInfo[playernum].hasled);
|
||||
#endif
|
||||
}
|
||||
|
||||
boolean I_GamepadHasRumble(INT32 playernum)
|
||||
{
|
||||
#if !(SDL_VERSION_ATLEAST(2,0,18))
|
||||
(void)playernum;
|
||||
return false;
|
||||
#else
|
||||
return (JoyInfo[playernum].dev != NULL && JoyInfo[playernum].hasrumble);
|
||||
#endif
|
||||
}
|
||||
|
||||
void I_GamepadRumble(INT32 playernum, UINT16 low_strength, UINT16 high_strength, UINT32 duration)
|
||||
{
|
||||
#if !(SDL_VERSION_ATLEAST(2,0,14))
|
||||
@@ -1145,6 +1176,11 @@ void I_GamepadRumble(INT32 playernum, UINT16 low_strength, UINT16 high_strength,
|
||||
return;
|
||||
}
|
||||
|
||||
if (!I_GamepadHasRumble(playernum))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
SDL_GameControllerRumble(controller, low_strength, high_strength, duration);
|
||||
#endif
|
||||
}
|
||||
@@ -1164,6 +1200,11 @@ void I_SetGamepadIndicatorColor(INT32 playernum, UINT8 red, UINT8 green, UINT8 b
|
||||
return;
|
||||
}
|
||||
|
||||
if (!I_GamepadHasLED(playernum))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
SDL_GameControllerSetLED(controller, red, green, blue);
|
||||
#endif
|
||||
}
|
||||
@@ -1952,12 +1993,14 @@ FUNCNORETURN void ATTRNORETURN I_Quit(void)
|
||||
I_ShutdownInput();
|
||||
I_ShutdownSystem();
|
||||
SDL_Quit();
|
||||
|
||||
/* if option -noendtxt is set, don't print the text */
|
||||
if (!M_CheckParm("-noendtxt") && W_CheckNumForName("ENDOOM") != LUMPERROR)
|
||||
{
|
||||
printf("\r");
|
||||
ShowEndTxt();
|
||||
}
|
||||
|
||||
if (myargmalloc)
|
||||
free(myargv); // Deallocate allocated memory
|
||||
|
||||
|
||||
@@ -57,6 +57,10 @@ typedef struct SDLJoyInfo_s
|
||||
//int hats;
|
||||
/// number of balls
|
||||
//int balls;
|
||||
///
|
||||
boolean hasled;
|
||||
///
|
||||
boolean hasrumble;
|
||||
} SDLJoyInfo_t;
|
||||
|
||||
/** \brief SDL info about controller 1
|
||||
|
||||
+1
-1
@@ -185,7 +185,7 @@ static void ST_doPaletteStuff(void)
|
||||
#endif
|
||||
|
||||
if (stplyr && stplyr->flashcount)
|
||||
palette = CLAMP(stplyr->flashpal, 0, 13);
|
||||
palette = min(stplyr->flashpal, 13);
|
||||
|
||||
if (palette != st_palette)
|
||||
{
|
||||
|
||||
+10
-7
@@ -432,14 +432,17 @@ static void ApplyPaletteDelta(const RGBA_t *pal_in, RGBA_t *pal_out, const INT16
|
||||
|
||||
static void GenerateFlashPalettes(void)
|
||||
{
|
||||
size_t i, palsize;
|
||||
size_t i;
|
||||
static const size_t palsize = (2*256); // two flashpals
|
||||
RGBA_t *pFlashPalGammaCorrectedPalette = NULL;
|
||||
|
||||
// generate flashpalettes if the current palette does not provide any subpalettes
|
||||
if (currentPaletteSize >= (14 * (256 * 3))) // 14 palettes are in playpal
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
palsize = (2*256);
|
||||
CONS_Debug(DBG_RENDER, "Current palette does not provide enough subpalettes for flashpalettes to work!\nCreating fallback palettes...\n");
|
||||
|
||||
pFallbackFlashPal = Z_Malloc(sizeof(*pFallbackFlashPal)*palsize, PU_STATIC, NULL);
|
||||
pFlashPalGammaCorrectedPalette = Z_Malloc(sizeof (*pFlashPalGammaCorrectedPalette)*palsize, PU_STATIC, NULL);
|
||||
@@ -3232,7 +3235,7 @@ INT32 V_SubStringWidth(const char *string, INT32 length, INT32 option)
|
||||
break;
|
||||
}
|
||||
|
||||
for (i = 0; string[i] && i < length; i++)
|
||||
for (i = 0; i < length && string[i]; i++)
|
||||
{
|
||||
c = string[i];
|
||||
if ((UINT8)c >= 0x80 && (UINT8)c <= 0x8F) //color parsing! -Inuyasha 2.16.09
|
||||
@@ -3277,7 +3280,7 @@ INT32 V_SmallSubStringWidth(const char *string, INT32 length, INT32 option)
|
||||
break;
|
||||
}
|
||||
|
||||
for (i = 0; string[i] && i < length; i++)
|
||||
for (i = 0; i < length && string[i]; i++)
|
||||
{
|
||||
c = string[i];
|
||||
if ((UINT8)c >= 0x80 && (UINT8)c <= 0x8F) //color parsing! -Inuyasha 2.16.09
|
||||
@@ -3326,7 +3329,7 @@ INT32 V_ThinSubStringWidth(const char *string, INT32 length, INT32 option)
|
||||
break;
|
||||
}
|
||||
|
||||
for (i = 0; string[i] && i < length; i++)
|
||||
for (i = 0; i < length && string[i]; i++)
|
||||
{
|
||||
c = string[i];
|
||||
if ((UINT8)c >= 0x80 && (UINT8)c <= 0x8F) //color parsing! -Inuyasha 2.16.09
|
||||
@@ -3842,12 +3845,12 @@ void V_Recalc(void)
|
||||
// Set dup based on width or height, whichever is less
|
||||
if (((vid.width*FRACUNIT) / BASEVIDWIDTH) < ((vid.height*FRACUNIT) / BASEVIDHEIGHT))
|
||||
{
|
||||
vid.dup = vid.width / BASEVIDWIDTH;
|
||||
vid.dup = max(vid.width / BASEVIDWIDTH, 1);
|
||||
vid.fdup = (vid.width*FRACUNIT) / BASEVIDWIDTH;
|
||||
}
|
||||
else
|
||||
{
|
||||
vid.dup = vid.height / BASEVIDHEIGHT;
|
||||
vid.dup = max(vid.height / BASEVIDHEIGHT, 1);
|
||||
vid.fdup = (vid.height*FRACUNIT) / BASEVIDHEIGHT;
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -1269,7 +1269,7 @@ FUNCINLINE static ATTRINLINE lumpnum_t CheckLumpInCache(const char *name)
|
||||
|
||||
FUNCINLINE static ATTRINLINE void AddLumpToCache(lumpnum_t lumpnum, const char *name)
|
||||
{
|
||||
I_Assert(strlen(name) <= 8); // we dont have longnames, so assume this is a non terminated string
|
||||
I_Assert(strnlen(name, 9) <= 8); // we dont have longnames, so assume this is a non terminated string
|
||||
lumpnum_map_insert(&lumpnumcache, strdup(name), lumpnum);
|
||||
}
|
||||
|
||||
|
||||
@@ -51,13 +51,6 @@
|
||||
#include "hardware/hw_main.h"
|
||||
#endif
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char patch[9];
|
||||
INT32 points;
|
||||
UINT8 display;
|
||||
} y_bonus_t;
|
||||
|
||||
static y_data_t data;
|
||||
|
||||
// graphics
|
||||
@@ -1609,9 +1602,6 @@ void Y_SetupVoteFinish(SINT8 pick, SINT8 level)
|
||||
if (votes[i] == -1 || endtype > 1) // Don't need to go on
|
||||
continue;
|
||||
|
||||
if (endtype == 2)
|
||||
continue;
|
||||
|
||||
if (votecompare == -1)
|
||||
{
|
||||
votecompare = votes[i];
|
||||
|
||||
Reference in new issue
Block a user