mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2024-11-18 02:21:47 +00:00
Merge branch 'master' into file-loading-cleanup
This commit is contained in:
commit
8d07e2f8be
30 changed files with 254 additions and 88 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -18,3 +18,4 @@ Win32_LIB_ASM_Release
|
||||||
*.user
|
*.user
|
||||||
*.db
|
*.db
|
||||||
*.opendb
|
*.opendb
|
||||||
|
/.vs
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
cmake_minimum_required(VERSION 3.0)
|
cmake_minimum_required(VERSION 3.0)
|
||||||
project(SRB2
|
project(SRB2
|
||||||
VERSION 2.1.19
|
VERSION 2.1.20
|
||||||
LANGUAGES C)
|
LANGUAGES C)
|
||||||
|
|
||||||
if(${PROJECT_SOURCE_DIR} MATCHES ${PROJECT_BINARY_DIR})
|
if(${PROJECT_SOURCE_DIR} MATCHES ${PROJECT_BINARY_DIR})
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<AssemblerOutput>All</AssemblerOutput>
|
<AssemblerOutput>All</AssemblerOutput>
|
||||||
<SmallerTypeCheck>true</SmallerTypeCheck>
|
<SmallerTypeCheck>false</SmallerTypeCheck>
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
version: 2.1.19.{branch}-{build}
|
version: 2.1.20.{branch}-{build}
|
||||||
os: MinGW
|
os: MinGW
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
|
|
|
@ -103,7 +103,7 @@ static INT16 consistancy[BACKUPTICS];
|
||||||
static UINT32 resynch_score[MAXNETNODES]; // "score" for kicking -- if this gets too high then cfail kick
|
static UINT32 resynch_score[MAXNETNODES]; // "score" for kicking -- if this gets too high then cfail kick
|
||||||
static UINT16 resynch_delay[MAXNETNODES]; // delay time before the player can be considered to have desynched
|
static UINT16 resynch_delay[MAXNETNODES]; // delay time before the player can be considered to have desynched
|
||||||
static UINT32 resynch_status[MAXNETNODES]; // 0 bit means synched for that player, 1 means possibly desynched
|
static UINT32 resynch_status[MAXNETNODES]; // 0 bit means synched for that player, 1 means possibly desynched
|
||||||
static UINT8 resynch_sent[MAXNETNODES][MAXNETNODES]; // what synch packets have we attempted to send to the player
|
static UINT8 resynch_sent[MAXNETNODES][MAXPLAYERS]; // what synch packets have we attempted to send to the player
|
||||||
static UINT8 resynch_inprogress[MAXNETNODES];
|
static UINT8 resynch_inprogress[MAXNETNODES];
|
||||||
static UINT8 resynch_local_inprogress = false; // WE are desynched and getting packets to fix it.
|
static UINT8 resynch_local_inprogress = false; // WE are desynched and getting packets to fix it.
|
||||||
static UINT8 player_joining = false;
|
static UINT8 player_joining = false;
|
||||||
|
@ -944,7 +944,7 @@ static void SV_InitResynchVars(INT32 node)
|
||||||
resynch_score[node] = 0; // clean slate
|
resynch_score[node] = 0; // clean slate
|
||||||
resynch_status[node] = 0x00;
|
resynch_status[node] = 0x00;
|
||||||
resynch_inprogress[node] = false;
|
resynch_inprogress[node] = false;
|
||||||
memset(resynch_sent[node], 0, MAXNETNODES);
|
memset(resynch_sent[node], 0, MAXPLAYERS);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void SV_RequireResynch(INT32 node)
|
static void SV_RequireResynch(INT32 node)
|
||||||
|
@ -953,16 +953,16 @@ static void SV_RequireResynch(INT32 node)
|
||||||
|
|
||||||
resynch_delay[node] = 10; // Delay before you can fail sync again
|
resynch_delay[node] = 10; // Delay before you can fail sync again
|
||||||
resynch_score[node] += 200; // Add score for initial desynch
|
resynch_score[node] += 200; // Add score for initial desynch
|
||||||
resynch_status[node] = 0xFF; // No players assumed synched
|
resynch_status[node] = 0xFFFFFFFF; // No players assumed synched
|
||||||
resynch_inprogress[node] = true; // so we know to send a PT_RESYNCHEND after sync
|
resynch_inprogress[node] = true; // so we know to send a PT_RESYNCHEND after sync
|
||||||
|
|
||||||
// Initial setup
|
// Initial setup
|
||||||
memset(resynch_sent[node], 0, MAXNETNODES);
|
memset(resynch_sent[node], 0, MAXPLAYERS);
|
||||||
for (i = 0; i < MAXPLAYERS; ++i)
|
for (i = 0; i < MAXPLAYERS; ++i)
|
||||||
{
|
{
|
||||||
if (!playeringame[i]) // Player not in game so just drop it from required synch
|
if (!playeringame[i]) // Player not in game so just drop it from required synch
|
||||||
resynch_status[node] &= ~(1<<i);
|
resynch_status[node] &= ~(1<<i);
|
||||||
else if (i == node); // instantly update THEIR position
|
else if (playernode[i] == node); // instantly update THEIR position
|
||||||
else // Send at random times based on num players
|
else // Send at random times based on num players
|
||||||
resynch_sent[node][i] = M_RandomKey(D_NumPlayers()>>1)+1;
|
resynch_sent[node][i] = M_RandomKey(D_NumPlayers()>>1)+1;
|
||||||
}
|
}
|
||||||
|
@ -3155,16 +3155,68 @@ static boolean SV_AddWaitingPlayers(void)
|
||||||
{
|
{
|
||||||
newplayer = true;
|
newplayer = true;
|
||||||
|
|
||||||
// search for a free playernum
|
if (netgame)
|
||||||
// we can't use playeringame since it is not updated here
|
// !!!!!!!!! EXTREMELY SUPER MEGA GIGA ULTRA ULTIMATELY TERRIBLY IMPORTANT !!!!!!!!!
|
||||||
for (; newplayernum < MAXPLAYERS; newplayernum++)
|
//
|
||||||
{
|
// The line just after that comment is an awful, horrible, terrible, TERRIBLE hack.
|
||||||
for (n = 0; n < MAXNETNODES; n++)
|
//
|
||||||
if (nodetoplayer[n] == newplayernum || nodetoplayer2[n] == newplayernum)
|
// Basically, the fix I did in order to fix the download freezes happens
|
||||||
|
// to cause situations in which a player number does not match
|
||||||
|
// the node number associated to that player.
|
||||||
|
// That is totally normal, there is absolutely *nothing* wrong with that.
|
||||||
|
// Really. Player 7 being tied to node 29, for instance, is totally fine.
|
||||||
|
//
|
||||||
|
// HOWEVER. A few (broken) parts of the netcode do the TERRIBLE mistake
|
||||||
|
// of mixing up the concepts of node and player, resulting in
|
||||||
|
// incorrect handling of cases where a player is tied to a node that has
|
||||||
|
// a different number (which is a totally normal case, or at least should be).
|
||||||
|
// This incorrect handling can go as far as literally
|
||||||
|
// anyone from joining your server at all, forever.
|
||||||
|
//
|
||||||
|
// Given those two facts, there are two options available
|
||||||
|
// in order to let this download freeze fix be:
|
||||||
|
// 1) Fix the broken parts that assume a node is a player or similar bullshit.
|
||||||
|
// 2) Change the part this comment is located at, so that any player who joins
|
||||||
|
// is given the same number as their associated node.
|
||||||
|
//
|
||||||
|
// No need to say, 1) is by far the obvious best, whereas 2) is a terrible hack.
|
||||||
|
// Unfortunately, after trying 1), I most likely didn't manage to find all
|
||||||
|
// of those broken parts, and thus 2) has become the only safe option that remains.
|
||||||
|
//
|
||||||
|
// So I did this hack.
|
||||||
|
//
|
||||||
|
// If it isn't clear enough, in order to get rid of this ugly hack,
|
||||||
|
// you will have to fix all parts of the netcode that
|
||||||
|
// make a confusion between nodes and players.
|
||||||
|
//
|
||||||
|
// And if it STILL isn't clear enough, a node and a player
|
||||||
|
// is NOT the same thing. Never. NEVER. *NEVER*.
|
||||||
|
//
|
||||||
|
// And if someday you make the terrible mistake of
|
||||||
|
// daring to have the unforgivable idea to try thinking
|
||||||
|
// that a node might possibly be the same as a player,
|
||||||
|
// or that a player should have the same number as its node,
|
||||||
|
// be sure that I will somehow know about it and
|
||||||
|
// hunt you down tirelessly and make you regret it,
|
||||||
|
// even if you live on the other side of the world.
|
||||||
|
//
|
||||||
|
// TODO: vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
|
||||||
|
// \todo >>>>>>>>>> Remove this horrible hack as soon as possible <<<<<<<<<<
|
||||||
|
// TODO: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
//
|
||||||
|
// !!!!!!!!! EXTREMELY SUPER MEGA GIGA ULTRA ULTIMATELY TERRIBLY IMPORTANT !!!!!!!!!
|
||||||
|
newplayernum = node; // OMFG SAY WELCOME TO TEH NEW HACK FOR FIX FIL DOWNLOAD!!1!
|
||||||
|
else // Don't use the hack if we don't have to
|
||||||
|
// search for a free playernum
|
||||||
|
// we can't use playeringame since it is not updated here
|
||||||
|
for (; newplayernum < MAXPLAYERS; newplayernum++)
|
||||||
|
{
|
||||||
|
for (n = 0; n < MAXNETNODES; n++)
|
||||||
|
if (nodetoplayer[n] == newplayernum || nodetoplayer2[n] == newplayernum)
|
||||||
|
break;
|
||||||
|
if (n == MAXNETNODES)
|
||||||
break;
|
break;
|
||||||
if (n == MAXNETNODES)
|
}
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// should never happen since we check the playernum
|
// should never happen since we check the playernum
|
||||||
// before accepting the join
|
// before accepting the join
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
#include "p_local.h"
|
#include "p_local.h"
|
||||||
#include "p_setup.h"
|
#include "p_setup.h"
|
||||||
#include "s_sound.h"
|
#include "s_sound.h"
|
||||||
|
#include "i_sound.h"
|
||||||
#include "m_misc.h"
|
#include "m_misc.h"
|
||||||
#include "am_map.h"
|
#include "am_map.h"
|
||||||
#include "byteptr.h"
|
#include "byteptr.h"
|
||||||
|
@ -126,6 +127,7 @@ static void Command_Playintro_f(void);
|
||||||
|
|
||||||
static void Command_Displayplayer_f(void);
|
static void Command_Displayplayer_f(void);
|
||||||
static void Command_Tunes_f(void);
|
static void Command_Tunes_f(void);
|
||||||
|
static void Command_RestartAudio_f(void);
|
||||||
|
|
||||||
static void Command_ExitLevel_f(void);
|
static void Command_ExitLevel_f(void);
|
||||||
static void Command_Showmap_f(void);
|
static void Command_Showmap_f(void);
|
||||||
|
@ -683,6 +685,7 @@ void D_RegisterClientCommands(void)
|
||||||
|
|
||||||
COM_AddCommand("displayplayer", Command_Displayplayer_f);
|
COM_AddCommand("displayplayer", Command_Displayplayer_f);
|
||||||
COM_AddCommand("tunes", Command_Tunes_f);
|
COM_AddCommand("tunes", Command_Tunes_f);
|
||||||
|
COM_AddCommand("restartaudio", Command_RestartAudio_f);
|
||||||
CV_RegisterVar(&cv_resetmusic);
|
CV_RegisterVar(&cv_resetmusic);
|
||||||
|
|
||||||
// FIXME: not to be here.. but needs be done for config loading
|
// FIXME: not to be here.. but needs be done for config loading
|
||||||
|
@ -3072,8 +3075,31 @@ static void Command_Addfile(void)
|
||||||
if (*p == '\\' || *p == '/' || *p == ':')
|
if (*p == '\\' || *p == '/' || *p == ':')
|
||||||
break;
|
break;
|
||||||
++p;
|
++p;
|
||||||
|
// check total packet size and no of files currently loaded
|
||||||
|
{
|
||||||
|
size_t packetsize = 0;
|
||||||
|
serverinfo_pak *dummycheck = NULL;
|
||||||
|
|
||||||
|
// Shut the compiler up.
|
||||||
|
(void)dummycheck;
|
||||||
|
|
||||||
|
// See W_LoadWadFile in w_wad.c
|
||||||
|
for (i = 0; i < numwadfiles; i++)
|
||||||
|
packetsize += nameonlylength(wadfiles[i]->filename) + 22;
|
||||||
|
|
||||||
|
packetsize += nameonlylength(fn) + 22;
|
||||||
|
|
||||||
|
if ((numwadfiles >= MAX_WADFILES)
|
||||||
|
|| (packetsize > sizeof(dummycheck->fileneeded)))
|
||||||
|
{
|
||||||
|
CONS_Alert(CONS_ERROR, M_GetText("Too many files loaded to add %s\n"), fn);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
WRITESTRINGN(buf_p,p,240);
|
WRITESTRINGN(buf_p,p,240);
|
||||||
|
|
||||||
|
// calculate and check md5
|
||||||
{
|
{
|
||||||
UINT8 md5sum[16];
|
UINT8 md5sum[16];
|
||||||
#ifdef NOMD5
|
#ifdef NOMD5
|
||||||
|
@ -3091,6 +3117,15 @@ static void Command_Addfile(void)
|
||||||
}
|
}
|
||||||
else // file not found
|
else // file not found
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
for (i = 0; i < numwadfiles; i++)
|
||||||
|
{
|
||||||
|
if (!memcmp(wadfiles[i]->md5sum, md5sum, 16))
|
||||||
|
{
|
||||||
|
CONS_Alert(CONS_ERROR, M_GetText("%s is already loaded\n"), fn);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
WRITEMEM(buf_p, md5sum, 16);
|
WRITEMEM(buf_p, md5sum, 16);
|
||||||
}
|
}
|
||||||
|
@ -4015,6 +4050,27 @@ static void Command_Tunes_f(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void Command_RestartAudio_f(void)
|
||||||
|
{
|
||||||
|
if (dedicated) // No point in doing anything if game is a dedicated server.
|
||||||
|
return;
|
||||||
|
|
||||||
|
S_StopMusic();
|
||||||
|
I_ShutdownMusic();
|
||||||
|
I_ShutdownSound();
|
||||||
|
I_StartupSound();
|
||||||
|
I_InitMusic();
|
||||||
|
|
||||||
|
// These must be called or no sound and music until manually set.
|
||||||
|
|
||||||
|
I_SetSfxVolume(cv_soundvolume.value);
|
||||||
|
I_SetDigMusicVolume(cv_digmusicvolume.value);
|
||||||
|
I_SetMIDIMusicVolume(cv_midimusicvolume.value);
|
||||||
|
if (Playing()) // Gotta make sure the player is in a level
|
||||||
|
P_RestoreMusic(&players[consoleplayer]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/** Quits a game and returns to the title screen.
|
/** Quits a game and returns to the title screen.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -194,7 +194,7 @@ extern FILE *logstream;
|
||||||
// Will always resemble the versionstring, 205 = 2.0.5, 210 = 2.1, etc.
|
// Will always resemble the versionstring, 205 = 2.0.5, 210 = 2.1, etc.
|
||||||
#define CODEBASE 220
|
#define CODEBASE 220
|
||||||
|
|
||||||
// The Modification ID; must be obtained from Inuyasha ( http://mb.srb2.org/private.php?do=newpm&u=2604 ).
|
// The Modification ID; must be obtained from Rob ( https://mb.srb2.org/private.php?do=newpm&u=546 ).
|
||||||
// DO NOT try to set this otherwise, or your modification will be unplayable through the Master Server.
|
// DO NOT try to set this otherwise, or your modification will be unplayable through the Master Server.
|
||||||
// "12" is the default mod ID for version 2.1
|
// "12" is the default mod ID for version 2.1
|
||||||
#define MODID 12
|
#define MODID 12
|
||||||
|
@ -203,7 +203,7 @@ extern FILE *logstream;
|
||||||
// it's only for detection of the version the player is using so the MS can alert them of an update.
|
// it's only for detection of the version the player is using so the MS can alert them of an update.
|
||||||
// Only set it higher, not lower, obviously.
|
// Only set it higher, not lower, obviously.
|
||||||
// Note that we use this to help keep internal testing in check; this is why v2.1.0 is not version "1".
|
// Note that we use this to help keep internal testing in check; this is why v2.1.0 is not version "1".
|
||||||
#define MODVERSION 24
|
#define MODVERSION 25
|
||||||
|
|
||||||
// =========================================================================
|
// =========================================================================
|
||||||
|
|
||||||
|
|
|
@ -122,6 +122,7 @@
|
||||||
</DataExecutionPrevention>
|
</DataExecutionPrevention>
|
||||||
<ImportLibrary>$(IntDir)r_opengl.lib</ImportLibrary>
|
<ImportLibrary>$(IntDir)r_opengl.lib</ImportLibrary>
|
||||||
<TargetMachine>MachineX86</TargetMachine>
|
<TargetMachine>MachineX86</TargetMachine>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
</Link>
|
</Link>
|
||||||
<Bscmake>
|
<Bscmake>
|
||||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
@ -166,6 +167,7 @@
|
||||||
</DataExecutionPrevention>
|
</DataExecutionPrevention>
|
||||||
<ImportLibrary>$(IntDir)r_opengl.lib</ImportLibrary>
|
<ImportLibrary>$(IntDir)r_opengl.lib</ImportLibrary>
|
||||||
<TargetMachine>MachineX64</TargetMachine>
|
<TargetMachine>MachineX64</TargetMachine>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
</Link>
|
</Link>
|
||||||
<Bscmake>
|
<Bscmake>
|
||||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
@ -212,6 +214,7 @@
|
||||||
</DataExecutionPrevention>
|
</DataExecutionPrevention>
|
||||||
<ImportLibrary>$(IntDir)r_opengl.lib</ImportLibrary>
|
<ImportLibrary>$(IntDir)r_opengl.lib</ImportLibrary>
|
||||||
<TargetMachine>MachineX86</TargetMachine>
|
<TargetMachine>MachineX86</TargetMachine>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
</Link>
|
</Link>
|
||||||
<Bscmake>
|
<Bscmake>
|
||||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
@ -258,6 +261,7 @@
|
||||||
</DataExecutionPrevention>
|
</DataExecutionPrevention>
|
||||||
<ImportLibrary>$(IntDir)r_opengl.lib</ImportLibrary>
|
<ImportLibrary>$(IntDir)r_opengl.lib</ImportLibrary>
|
||||||
<TargetMachine>MachineX64</TargetMachine>
|
<TargetMachine>MachineX64</TargetMachine>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
</Link>
|
</Link>
|
||||||
<Bscmake>
|
<Bscmake>
|
||||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
|
|
@ -125,6 +125,7 @@
|
||||||
</DataExecutionPrevention>
|
</DataExecutionPrevention>
|
||||||
<ImportLibrary>$(IntDir)s_openal.lib</ImportLibrary>
|
<ImportLibrary>$(IntDir)s_openal.lib</ImportLibrary>
|
||||||
<TargetMachine>MachineX86</TargetMachine>
|
<TargetMachine>MachineX86</TargetMachine>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
</Link>
|
</Link>
|
||||||
<Bscmake>
|
<Bscmake>
|
||||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
@ -170,6 +171,7 @@
|
||||||
</DataExecutionPrevention>
|
</DataExecutionPrevention>
|
||||||
<ImportLibrary>$(IntDir)s_openal.lib</ImportLibrary>
|
<ImportLibrary>$(IntDir)s_openal.lib</ImportLibrary>
|
||||||
<TargetMachine>MachineX64</TargetMachine>
|
<TargetMachine>MachineX64</TargetMachine>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
</Link>
|
</Link>
|
||||||
<Bscmake>
|
<Bscmake>
|
||||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
@ -216,6 +218,7 @@
|
||||||
</DataExecutionPrevention>
|
</DataExecutionPrevention>
|
||||||
<ImportLibrary>$(IntDir)s_openal.lib</ImportLibrary>
|
<ImportLibrary>$(IntDir)s_openal.lib</ImportLibrary>
|
||||||
<TargetMachine>MachineX86</TargetMachine>
|
<TargetMachine>MachineX86</TargetMachine>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
</Link>
|
</Link>
|
||||||
<Bscmake>
|
<Bscmake>
|
||||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
@ -262,6 +265,7 @@
|
||||||
</DataExecutionPrevention>
|
</DataExecutionPrevention>
|
||||||
<ImportLibrary>$(IntDir)s_openal.lib</ImportLibrary>
|
<ImportLibrary>$(IntDir)s_openal.lib</ImportLibrary>
|
||||||
<TargetMachine>MachineX64</TargetMachine>
|
<TargetMachine>MachineX64</TargetMachine>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
</Link>
|
</Link>
|
||||||
<Bscmake>
|
<Bscmake>
|
||||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
|
24
src/i_tcp.c
24
src/i_tcp.c
|
@ -178,7 +178,6 @@ static UINT8 UPNP_support = TRUE;
|
||||||
|
|
||||||
#if defined (USE_WINSOCK) && !defined (NONET)
|
#if defined (USE_WINSOCK) && !defined (NONET)
|
||||||
typedef SOCKET SOCKET_TYPE;
|
typedef SOCKET SOCKET_TYPE;
|
||||||
#define BADSOCKET INVALID_SOCKET
|
|
||||||
#define ERRSOCKET (SOCKET_ERROR)
|
#define ERRSOCKET (SOCKET_ERROR)
|
||||||
#else
|
#else
|
||||||
#if (defined (__unix__) && !defined (MSDOS)) || defined (__APPLE__) || defined (__HAIKU__)
|
#if (defined (__unix__) && !defined (MSDOS)) || defined (__APPLE__) || defined (__HAIKU__)
|
||||||
|
@ -186,7 +185,6 @@ typedef int SOCKET_TYPE;
|
||||||
#else
|
#else
|
||||||
typedef unsigned long SOCKET_TYPE;
|
typedef unsigned long SOCKET_TYPE;
|
||||||
#endif
|
#endif
|
||||||
#define BADSOCKET (SOCKET_TYPE)(~0)
|
|
||||||
#define ERRSOCKET (-1)
|
#define ERRSOCKET (-1)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -195,10 +193,10 @@ typedef int socklen_t;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef NONET
|
#ifndef NONET
|
||||||
static SOCKET_TYPE mysockets[MAXNETNODES+1] = {BADSOCKET};
|
static SOCKET_TYPE mysockets[MAXNETNODES+1] = {ERRSOCKET};
|
||||||
static size_t mysocketses = 0;
|
static size_t mysocketses = 0;
|
||||||
static int myfamily[MAXNETNODES+1] = {0};
|
static int myfamily[MAXNETNODES+1] = {0};
|
||||||
static SOCKET_TYPE nodesocket[MAXNETNODES+1] = {BADSOCKET};
|
static SOCKET_TYPE nodesocket[MAXNETNODES+1] = {ERRSOCKET};
|
||||||
static mysockaddr_t clientaddress[MAXNETNODES+1];
|
static mysockaddr_t clientaddress[MAXNETNODES+1];
|
||||||
static mysockaddr_t broadcastaddress[MAXNETNODES+1];
|
static mysockaddr_t broadcastaddress[MAXNETNODES+1];
|
||||||
static size_t broadcastaddresses = 0;
|
static size_t broadcastaddresses = 0;
|
||||||
|
@ -461,8 +459,7 @@ static void cleanupnodes(void)
|
||||||
|
|
||||||
// Why can't I start at zero?
|
// Why can't I start at zero?
|
||||||
for (j = 1; j < MAXNETNODES; j++)
|
for (j = 1; j < MAXNETNODES; j++)
|
||||||
//if (!(nodeingame[j] || SV_SendingFile(j)))
|
if (!(nodeingame[j] || SV_SendingFile(j)))
|
||||||
if (!nodeingame[j])
|
|
||||||
nodeconnected[j] = false;
|
nodeconnected[j] = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -611,7 +608,7 @@ static boolean FD_CPY(fd_set *src, fd_set *dst, SOCKET_TYPE *fd, size_t len)
|
||||||
FD_ZERO(dst);
|
FD_ZERO(dst);
|
||||||
for (i = 0; i < len;i++)
|
for (i = 0; i < len;i++)
|
||||||
{
|
{
|
||||||
if(fd[i] != BADSOCKET && fd[i] != (SOCKET_TYPE)ERRSOCKET &&
|
if(fd[i] != (SOCKET_TYPE)ERRSOCKET &&
|
||||||
FD_ISSET(fd[i], src) && !FD_ISSET(fd[i], dst)) // no checking for dups
|
FD_ISSET(fd[i], src) && !FD_ISSET(fd[i], dst)) // no checking for dups
|
||||||
{
|
{
|
||||||
FD_SET(fd[i], dst);
|
FD_SET(fd[i], dst);
|
||||||
|
@ -689,7 +686,7 @@ static void SOCK_Send(void)
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (nodesocket[doomcom->remotenode] == BADSOCKET)
|
else if (nodesocket[doomcom->remotenode] == (SOCKET_TYPE)ERRSOCKET)
|
||||||
{
|
{
|
||||||
for (i = 0; i < mysocketses; i++)
|
for (i = 0; i < mysocketses; i++)
|
||||||
{
|
{
|
||||||
|
@ -741,7 +738,7 @@ static void SOCK_FreeNodenum(INT32 numnode)
|
||||||
DEBFILE(va("Free node %d (%s)\n", numnode, SOCK_GetNodeAddress(numnode)));
|
DEBFILE(va("Free node %d (%s)\n", numnode, SOCK_GetNodeAddress(numnode)));
|
||||||
|
|
||||||
nodeconnected[numnode] = false;
|
nodeconnected[numnode] = false;
|
||||||
nodesocket[numnode] = BADSOCKET;
|
nodesocket[numnode] = ERRSOCKET;
|
||||||
|
|
||||||
// put invalid address
|
// put invalid address
|
||||||
memset(&clientaddress[numnode], 0, sizeof (clientaddress[numnode]));
|
memset(&clientaddress[numnode], 0, sizeof (clientaddress[numnode]));
|
||||||
|
@ -768,7 +765,7 @@ static SOCKET_TYPE UDP_Bind(int family, struct sockaddr *addr, socklen_t addrlen
|
||||||
#endif
|
#endif
|
||||||
mysockaddr_t straddr;
|
mysockaddr_t straddr;
|
||||||
|
|
||||||
if (s == (SOCKET_TYPE)ERRSOCKET || s == BADSOCKET)
|
if (s == (SOCKET_TYPE)ERRSOCKET)
|
||||||
return (SOCKET_TYPE)ERRSOCKET;
|
return (SOCKET_TYPE)ERRSOCKET;
|
||||||
#ifdef USE_WINSOCK
|
#ifdef USE_WINSOCK
|
||||||
{ // Alam_GBC: disable the new UDP connection reset behavior for Win2k and up
|
{ // Alam_GBC: disable the new UDP connection reset behavior for Win2k and up
|
||||||
|
@ -875,9 +872,9 @@ static boolean UDP_Socket(void)
|
||||||
|
|
||||||
|
|
||||||
for (s = 0; s < mysocketses; s++)
|
for (s = 0; s < mysocketses; s++)
|
||||||
mysockets[s] = BADSOCKET;
|
mysockets[s] = ERRSOCKET;
|
||||||
for (s = 0; s < MAXNETNODES+1; s++)
|
for (s = 0; s < MAXNETNODES+1; s++)
|
||||||
nodesocket[s] = BADSOCKET;
|
nodesocket[s] = ERRSOCKET;
|
||||||
FD_ZERO(&masterset);
|
FD_ZERO(&masterset);
|
||||||
s = 0;
|
s = 0;
|
||||||
|
|
||||||
|
@ -1205,7 +1202,6 @@ static void SOCK_CloseSocket(void)
|
||||||
for (i=0; i < MAXNETNODES+1; i++)
|
for (i=0; i < MAXNETNODES+1; i++)
|
||||||
{
|
{
|
||||||
if (mysockets[i] != (SOCKET_TYPE)ERRSOCKET
|
if (mysockets[i] != (SOCKET_TYPE)ERRSOCKET
|
||||||
&& mysockets[i] != BADSOCKET
|
|
||||||
&& FD_ISSET(mysockets[i], &masterset))
|
&& FD_ISSET(mysockets[i], &masterset))
|
||||||
{
|
{
|
||||||
#if !defined (__DJGPP__) || defined (WATTCP)
|
#if !defined (__DJGPP__) || defined (WATTCP)
|
||||||
|
@ -1213,7 +1209,7 @@ static void SOCK_CloseSocket(void)
|
||||||
close(mysockets[i]);
|
close(mysockets[i]);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
mysockets[i] = BADSOCKET;
|
mysockets[i] = ERRSOCKET;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -241,6 +241,8 @@ boolean LUAh_MobjHook(mobj_t *mo, enum hook which)
|
||||||
if (!gL || !(hooksAvailable[which/8] & (1<<(which%8))))
|
if (!gL || !(hooksAvailable[which/8] & (1<<(which%8))))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
I_Assert(mo->type < NUMMOBJTYPES);
|
||||||
|
|
||||||
lua_settop(gL, 0);
|
lua_settop(gL, 0);
|
||||||
|
|
||||||
// Look for all generic mobj hooks
|
// Look for all generic mobj hooks
|
||||||
|
@ -416,6 +418,8 @@ UINT8 LUAh_MobjCollideHook(mobj_t *thing1, mobj_t *thing2, enum hook which)
|
||||||
if (!gL || !(hooksAvailable[which/8] & (1<<(which%8))))
|
if (!gL || !(hooksAvailable[which/8] & (1<<(which%8))))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
I_Assert(thing1->type < NUMMOBJTYPES);
|
||||||
|
|
||||||
lua_settop(gL, 0);
|
lua_settop(gL, 0);
|
||||||
|
|
||||||
// Look for all generic mobj collision hooks
|
// Look for all generic mobj collision hooks
|
||||||
|
@ -489,6 +493,8 @@ boolean LUAh_MobjThinker(mobj_t *mo)
|
||||||
if (!gL || !(hooksAvailable[hook_MobjThinker/8] & (1<<(hook_MobjThinker%8))))
|
if (!gL || !(hooksAvailable[hook_MobjThinker/8] & (1<<(hook_MobjThinker%8))))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
I_Assert(mo->type < NUMMOBJTYPES);
|
||||||
|
|
||||||
lua_settop(gL, 0);
|
lua_settop(gL, 0);
|
||||||
|
|
||||||
// Look for all generic mobj thinker hooks
|
// Look for all generic mobj thinker hooks
|
||||||
|
@ -542,6 +548,8 @@ boolean LUAh_TouchSpecial(mobj_t *special, mobj_t *toucher)
|
||||||
if (!gL || !(hooksAvailable[hook_TouchSpecial/8] & (1<<(hook_TouchSpecial%8))))
|
if (!gL || !(hooksAvailable[hook_TouchSpecial/8] & (1<<(hook_TouchSpecial%8))))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
I_Assert(special->type < NUMMOBJTYPES);
|
||||||
|
|
||||||
lua_settop(gL, 0);
|
lua_settop(gL, 0);
|
||||||
|
|
||||||
// Look for all generic touch special hooks
|
// Look for all generic touch special hooks
|
||||||
|
@ -605,6 +613,8 @@ UINT8 LUAh_ShouldDamage(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32
|
||||||
if (!gL || !(hooksAvailable[hook_ShouldDamage/8] & (1<<(hook_ShouldDamage%8))))
|
if (!gL || !(hooksAvailable[hook_ShouldDamage/8] & (1<<(hook_ShouldDamage%8))))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
I_Assert(target->type < NUMMOBJTYPES);
|
||||||
|
|
||||||
lua_settop(gL, 0);
|
lua_settop(gL, 0);
|
||||||
|
|
||||||
// Look for all generic should damage hooks
|
// Look for all generic should damage hooks
|
||||||
|
@ -688,6 +698,8 @@ boolean LUAh_MobjDamage(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32
|
||||||
if (!gL || !(hooksAvailable[hook_MobjDamage/8] & (1<<(hook_MobjDamage%8))))
|
if (!gL || !(hooksAvailable[hook_MobjDamage/8] & (1<<(hook_MobjDamage%8))))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
I_Assert(target->type < NUMMOBJTYPES);
|
||||||
|
|
||||||
lua_settop(gL, 0);
|
lua_settop(gL, 0);
|
||||||
|
|
||||||
// Look for all generic mobj damage hooks
|
// Look for all generic mobj damage hooks
|
||||||
|
@ -761,6 +773,8 @@ boolean LUAh_MobjDeath(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8
|
||||||
if (!gL || !(hooksAvailable[hook_MobjDeath/8] & (1<<(hook_MobjDeath%8))))
|
if (!gL || !(hooksAvailable[hook_MobjDeath/8] & (1<<(hook_MobjDeath%8))))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
I_Assert(target->type < NUMMOBJTYPES);
|
||||||
|
|
||||||
lua_settop(gL, 0);
|
lua_settop(gL, 0);
|
||||||
|
|
||||||
// Look for all generic mobj death hooks
|
// Look for all generic mobj death hooks
|
||||||
|
|
|
@ -407,7 +407,7 @@ static int libd_getSpritePatch(lua_State *L)
|
||||||
static int libd_getSprite2Patch(lua_State *L)
|
static int libd_getSprite2Patch(lua_State *L)
|
||||||
{
|
{
|
||||||
INT32 i; // skin number
|
INT32 i; // skin number
|
||||||
UINT32 j; // sprite2 prefix
|
INT32 j; // sprite2 prefix
|
||||||
UINT32 frame = 0; // 'A'
|
UINT32 frame = 0; // 'A'
|
||||||
UINT8 angle = 0;
|
UINT8 angle = 0;
|
||||||
spritedef_t *sprdef;
|
spritedef_t *sprdef;
|
||||||
|
|
|
@ -102,7 +102,7 @@ static int lib_sprnamelen(lua_State *L)
|
||||||
// push sprite name
|
// push sprite name
|
||||||
static int lib_getSpr2name(lua_State *L)
|
static int lib_getSpr2name(lua_State *L)
|
||||||
{
|
{
|
||||||
UINT32 i;
|
INT32 i;
|
||||||
|
|
||||||
lua_remove(L, 1); // don't care about spr2names[] dummy userdata.
|
lua_remove(L, 1); // don't care about spr2names[] dummy userdata.
|
||||||
|
|
||||||
|
@ -129,7 +129,7 @@ static int lib_getSpr2name(lua_State *L)
|
||||||
|
|
||||||
static int lib_getSpr2default(lua_State *L)
|
static int lib_getSpr2default(lua_State *L)
|
||||||
{
|
{
|
||||||
UINT32 i;
|
INT32 i;
|
||||||
|
|
||||||
lua_remove(L, 1); // don't care about spr2defaults[] dummy userdata.
|
lua_remove(L, 1); // don't care about spr2defaults[] dummy userdata.
|
||||||
|
|
||||||
|
@ -154,7 +154,7 @@ static int lib_getSpr2default(lua_State *L)
|
||||||
|
|
||||||
static int lib_setSpr2default(lua_State *L)
|
static int lib_setSpr2default(lua_State *L)
|
||||||
{
|
{
|
||||||
UINT32 i;
|
INT32 i;
|
||||||
UINT8 j = 0;
|
UINT8 j = 0;
|
||||||
|
|
||||||
lua_remove(L, 1); // don't care about spr2defaults[] dummy userdata.
|
lua_remove(L, 1); // don't care about spr2defaults[] dummy userdata.
|
||||||
|
|
|
@ -802,8 +802,15 @@ static void ArchiveExtVars(void *pointer, const char *ptype)
|
||||||
for (i = 0; lua_next(gL, -2); i++)
|
for (i = 0; lua_next(gL, -2); i++)
|
||||||
lua_pop(gL, 1);
|
lua_pop(gL, 1);
|
||||||
|
|
||||||
if (i == 0 && !fastcmp(ptype,"player")) // skip anything that has an empty table and isn't a player.
|
// skip anything that has an empty table and isn't a player.
|
||||||
|
if (i == 0)
|
||||||
|
{
|
||||||
|
if (fastcmp(ptype,"player")) // always include players even if they have no extra variables
|
||||||
|
WRITEUINT16(save_p, 0);
|
||||||
|
lua_pop(gL, 1);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (fastcmp(ptype,"mobj")) // mobjs must write their mobjnum as a header
|
if (fastcmp(ptype,"mobj")) // mobjs must write their mobjnum as a header
|
||||||
WRITEUINT32(save_p, ((mobj_t *)pointer)->mobjnum);
|
WRITEUINT32(save_p, ((mobj_t *)pointer)->mobjnum);
|
||||||
WRITEUINT16(save_p, i);
|
WRITEUINT16(save_p, i);
|
||||||
|
|
|
@ -4964,7 +4964,10 @@ static void M_DrawAddons(void)
|
||||||
|
|
||||||
// hack - need to refresh at end of frame to handle addfile...
|
// hack - need to refresh at end of frame to handle addfile...
|
||||||
if (refreshdirmenu & M_AddonsRefresh())
|
if (refreshdirmenu & M_AddonsRefresh())
|
||||||
return M_DrawMessageMenu();
|
{
|
||||||
|
M_DrawMessageMenu();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (addonsresponselimit)
|
if (addonsresponselimit)
|
||||||
addonsresponselimit--;
|
addonsresponselimit--;
|
||||||
|
|
64
src/mserv.c
64
src/mserv.c
|
@ -73,35 +73,35 @@
|
||||||
#define PACKET_SIZE 1024
|
#define PACKET_SIZE 1024
|
||||||
|
|
||||||
|
|
||||||
#define MS_NO_ERROR 0
|
#define MS_NO_ERROR 0
|
||||||
#define MS_SOCKET_ERROR -201
|
#define MS_SOCKET_ERROR -201
|
||||||
#define MS_CONNECT_ERROR -203
|
#define MS_CONNECT_ERROR -203
|
||||||
#define MS_WRITE_ERROR -210
|
#define MS_WRITE_ERROR -210
|
||||||
#define MS_READ_ERROR -211
|
#define MS_READ_ERROR -211
|
||||||
#define MS_CLOSE_ERROR -212
|
#define MS_CLOSE_ERROR -212
|
||||||
#define MS_GETHOSTBYNAME_ERROR -220
|
#define MS_GETHOSTBYNAME_ERROR -220
|
||||||
#define MS_GETHOSTNAME_ERROR -221
|
#define MS_GETHOSTNAME_ERROR -221
|
||||||
#define MS_TIMEOUT_ERROR -231
|
#define MS_TIMEOUT_ERROR -231
|
||||||
|
|
||||||
// see master server code for the values
|
// see master server code for the values
|
||||||
#define ADD_SERVER_MSG 101
|
#define ADD_SERVER_MSG 101
|
||||||
#define REMOVE_SERVER_MSG 103
|
#define REMOVE_SERVER_MSG 103
|
||||||
#define ADD_SERVERv2_MSG 104
|
#define ADD_SERVERv2_MSG 104
|
||||||
#define GET_SERVER_MSG 200
|
#define GET_SERVER_MSG 200
|
||||||
#define GET_SHORT_SERVER_MSG 205
|
#define GET_SHORT_SERVER_MSG 205
|
||||||
#define ASK_SERVER_MSG 206
|
#define ASK_SERVER_MSG 206
|
||||||
#define ANSWER_ASK_SERVER_MSG 207
|
#define ANSWER_ASK_SERVER_MSG 207
|
||||||
#define ASK_SERVER_MSG 206
|
#define ASK_SERVER_MSG 206
|
||||||
#define ANSWER_ASK_SERVER_MSG 207
|
#define ANSWER_ASK_SERVER_MSG 207
|
||||||
#define GET_MOTD_MSG 208
|
#define GET_MOTD_MSG 208
|
||||||
#define SEND_MOTD_MSG 209
|
#define SEND_MOTD_MSG 209
|
||||||
#define GET_ROOMS_MSG 210
|
#define GET_ROOMS_MSG 210
|
||||||
#define SEND_ROOMS_MSG 211
|
#define SEND_ROOMS_MSG 211
|
||||||
#define GET_ROOMS_HOST_MSG 212
|
#define GET_ROOMS_HOST_MSG 212
|
||||||
#define GET_VERSION_MSG 213
|
#define GET_VERSION_MSG 213
|
||||||
#define SEND_VERSION_MSG 214
|
#define SEND_VERSION_MSG 214
|
||||||
#define GET_BANNED_MSG 215 // Someone's been baaaaaad!
|
#define GET_BANNED_MSG 215 // Someone's been baaaaaad!
|
||||||
#define PING_SERVER_MSG 216
|
#define PING_SERVER_MSG 216
|
||||||
|
|
||||||
#define HEADER_SIZE (sizeof (INT32)*4)
|
#define HEADER_SIZE (sizeof (INT32)*4)
|
||||||
|
|
||||||
|
@ -188,7 +188,6 @@ UINT16 current_port = 0;
|
||||||
|
|
||||||
#if defined (_WIN32) && !defined (NONET)
|
#if defined (_WIN32) && !defined (NONET)
|
||||||
typedef SOCKET SOCKET_TYPE;
|
typedef SOCKET SOCKET_TYPE;
|
||||||
#define BADSOCKET INVALID_SOCKET
|
|
||||||
#define ERRSOCKET (SOCKET_ERROR)
|
#define ERRSOCKET (SOCKET_ERROR)
|
||||||
#else
|
#else
|
||||||
#if (defined (__unix__) && !defined (MSDOS)) || defined (__APPLE__) || defined (__HAIKU__)
|
#if (defined (__unix__) && !defined (MSDOS)) || defined (__APPLE__) || defined (__HAIKU__)
|
||||||
|
@ -196,7 +195,6 @@ typedef int SOCKET_TYPE;
|
||||||
#else
|
#else
|
||||||
typedef unsigned long SOCKET_TYPE;
|
typedef unsigned long SOCKET_TYPE;
|
||||||
#endif
|
#endif
|
||||||
#define BADSOCKET (SOCKET_TYPE)(~0)
|
|
||||||
#define ERRSOCKET (-1)
|
#define ERRSOCKET (-1)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -205,7 +203,7 @@ typedef int socklen_t;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef NONET
|
#ifndef NONET
|
||||||
static SOCKET_TYPE socket_fd = BADSOCKET; // WINSOCK socket
|
static SOCKET_TYPE socket_fd = ERRSOCKET; // WINSOCK socket
|
||||||
static struct timeval select_timeout;
|
static struct timeval select_timeout;
|
||||||
static fd_set wset;
|
static fd_set wset;
|
||||||
static size_t recvfull(SOCKET_TYPE s, char *buf, size_t len, int flags);
|
static size_t recvfull(SOCKET_TYPE s, char *buf, size_t len, int flags);
|
||||||
|
@ -236,9 +234,9 @@ void AddMServCommands(void)
|
||||||
static void CloseConnection(void)
|
static void CloseConnection(void)
|
||||||
{
|
{
|
||||||
#ifndef NONET
|
#ifndef NONET
|
||||||
if (socket_fd != (SOCKET_TYPE)ERRSOCKET && socket_fd != BADSOCKET)
|
if (socket_fd != (SOCKET_TYPE)ERRSOCKET)
|
||||||
close(socket_fd);
|
close(socket_fd);
|
||||||
socket_fd = BADSOCKET;
|
socket_fd = ERRSOCKET;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -356,7 +354,7 @@ static INT32 MS_Connect(const char *ip_addr, const char *str_port, INT32 async)
|
||||||
while (runp != NULL)
|
while (runp != NULL)
|
||||||
{
|
{
|
||||||
socket_fd = socket(runp->ai_family, runp->ai_socktype, runp->ai_protocol);
|
socket_fd = socket(runp->ai_family, runp->ai_socktype, runp->ai_protocol);
|
||||||
if (socket_fd != BADSOCKET && socket_fd != (SOCKET_TYPE)ERRSOCKET)
|
if (socket_fd != (SOCKET_TYPE)ERRSOCKET)
|
||||||
{
|
{
|
||||||
if (async) // do asynchronous connection
|
if (async) // do asynchronous connection
|
||||||
{
|
{
|
||||||
|
|
10
src/p_mobj.c
10
src/p_mobj.c
|
@ -8942,6 +8942,16 @@ void P_RespawnSpecials(void)
|
||||||
if (mthing->type == mobjinfo[i].doomednum)
|
if (mthing->type == mobjinfo[i].doomednum)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
if (i == NUMMOBJTYPES) // prevent creation of objects with this type -- Monster Iestyn 17/12/17
|
||||||
|
{
|
||||||
|
// 3D Mode start Thing is unlikely to be added to the que,
|
||||||
|
// so don't bother checking for that specific type
|
||||||
|
CONS_Alert(CONS_WARNING, M_GetText("P_RespawnSpecials: Unknown thing type %d attempted to respawn at (%d, %d)\n"), mthing->type, mthing->x, mthing->y);
|
||||||
|
// pull it from the que
|
||||||
|
iquetail = (iquetail+1)&(ITEMQUESIZE-1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
//CTF rings should continue to respawn as normal rings outside of CTF.
|
//CTF rings should continue to respawn as normal rings outside of CTF.
|
||||||
if (gametype != GT_CTF)
|
if (gametype != GT_CTF)
|
||||||
{
|
{
|
||||||
|
|
|
@ -5240,13 +5240,11 @@ static void P_AddOldAirbob(sector_t *sec, line_t *sourceline, boolean noadjust)
|
||||||
airbob->vars[2] = FRACUNIT;
|
airbob->vars[2] = FRACUNIT;
|
||||||
|
|
||||||
if (noadjust)
|
if (noadjust)
|
||||||
{
|
|
||||||
airbob->vars[7] = airbob->sector->ceilingheight-16*FRACUNIT;
|
airbob->vars[7] = airbob->sector->ceilingheight-16*FRACUNIT;
|
||||||
airbob->vars[6] = airbob->vars[7]
|
|
||||||
- (sec->ceilingheight - sec->floorheight);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
airbob->vars[7] = airbob->sector->ceilingheight - P_AproxDistance(sourceline->dx, sourceline->dy);
|
airbob->vars[7] = airbob->sector->ceilingheight - P_AproxDistance(sourceline->dx, sourceline->dy);
|
||||||
|
airbob->vars[6] = airbob->vars[7]
|
||||||
|
- (sec->ceilingheight - sec->floorheight);
|
||||||
|
|
||||||
airbob->vars[3] = airbob->vars[2];
|
airbob->vars[3] = airbob->vars[2];
|
||||||
|
|
||||||
|
|
|
@ -141,6 +141,7 @@
|
||||||
<ClInclude Include="..\hardware\hw3dsdrv.h" />
|
<ClInclude Include="..\hardware\hw3dsdrv.h" />
|
||||||
<ClInclude Include="..\hardware\hw3sound.h" />
|
<ClInclude Include="..\hardware\hw3sound.h" />
|
||||||
<ClInclude Include="..\hardware\hws_data.h" />
|
<ClInclude Include="..\hardware\hws_data.h" />
|
||||||
|
<ClInclude Include="..\hardware\hw_clip.h" />
|
||||||
<ClInclude Include="..\hardware\hw_data.h" />
|
<ClInclude Include="..\hardware\hw_data.h" />
|
||||||
<ClInclude Include="..\hardware\hw_defs.h" />
|
<ClInclude Include="..\hardware\hw_defs.h" />
|
||||||
<ClInclude Include="..\hardware\hw_dll.h" />
|
<ClInclude Include="..\hardware\hw_dll.h" />
|
||||||
|
@ -282,6 +283,7 @@
|
||||||
<ClCompile Include="..\hardware\hw3sound.c" />
|
<ClCompile Include="..\hardware\hw3sound.c" />
|
||||||
<ClCompile Include="..\hardware\hw_bsp.c" />
|
<ClCompile Include="..\hardware\hw_bsp.c" />
|
||||||
<ClCompile Include="..\hardware\hw_cache.c" />
|
<ClCompile Include="..\hardware\hw_cache.c" />
|
||||||
|
<ClCompile Include="..\hardware\hw_clip.c" />
|
||||||
<ClCompile Include="..\hardware\hw_draw.c" />
|
<ClCompile Include="..\hardware\hw_draw.c" />
|
||||||
<ClCompile Include="..\hardware\hw_light.c" />
|
<ClCompile Include="..\hardware\hw_light.c" />
|
||||||
<ClCompile Include="..\hardware\hw_main.c" />
|
<ClCompile Include="..\hardware\hw_main.c" />
|
||||||
|
|
|
@ -444,6 +444,9 @@
|
||||||
<ClInclude Include="sdlmain.h">
|
<ClInclude Include="sdlmain.h">
|
||||||
<Filter>SDLApp</Filter>
|
<Filter>SDLApp</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\hardware\hw_clip.h">
|
||||||
|
<Filter>Hw_Hardware</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<CustomBuild Include="..\tmap.nas">
|
<CustomBuild Include="..\tmap.nas">
|
||||||
|
@ -879,6 +882,9 @@
|
||||||
<ClCompile Include="SDL_main\SDL_windows_main.c">
|
<ClCompile Include="SDL_main\SDL_windows_main.c">
|
||||||
<Filter>SDLApp</Filter>
|
<Filter>SDLApp</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\hardware\hw_clip.c">
|
||||||
|
<Filter>Hw_Hardware</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Image Include="Srb2SDL.ico">
|
<Image Include="Srb2SDL.ico">
|
||||||
|
|
|
@ -148,7 +148,9 @@ int main(int argc, char **argv)
|
||||||
LoadLibraryA("exchndl.dll");
|
LoadLibraryA("exchndl.dll");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#ifndef __MINGW32__
|
||||||
prevExceptionFilter = SetUnhandledExceptionFilter(RecordExceptionInfo);
|
prevExceptionFilter = SetUnhandledExceptionFilter(RecordExceptionInfo);
|
||||||
|
#endif
|
||||||
MakeCodeWritable();
|
MakeCodeWritable();
|
||||||
#endif
|
#endif
|
||||||
// startup SRB2
|
// startup SRB2
|
||||||
|
|
|
@ -194,7 +194,7 @@ static void SDLSetMode(INT32 width, INT32 height, SDL_bool fullscreen)
|
||||||
}
|
}
|
||||||
// Reposition window only in windowed mode
|
// Reposition window only in windowed mode
|
||||||
SDL_SetWindowSize(window, width, height);
|
SDL_SetWindowSize(window, width, height);
|
||||||
SDL_SetWindowPosition(window, SDL_WINDOWPOS_CENTERED_DISPLAY(1), SDL_WINDOWPOS_CENTERED_DISPLAY(1));
|
SDL_SetWindowPosition(window, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -1214,7 +1214,7 @@
|
||||||
C01FCF4B08A954540054247B /* Debug */ = {
|
C01FCF4B08A954540054247B /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CURRENT_PROJECT_VERSION = 2.1.19;
|
CURRENT_PROJECT_VERSION = 2.1.20;
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
NORMALSRB2,
|
NORMALSRB2,
|
||||||
|
@ -1226,7 +1226,7 @@
|
||||||
C01FCF4C08A954540054247B /* Release */ = {
|
C01FCF4C08A954540054247B /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CURRENT_PROJECT_VERSION = 2.1.19;
|
CURRENT_PROJECT_VERSION = 2.1.20;
|
||||||
GCC_ENABLE_FIX_AND_CONTINUE = NO;
|
GCC_ENABLE_FIX_AND_CONTINUE = NO;
|
||||||
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
|
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||||
|
|
|
@ -448,7 +448,7 @@ UINT16 W_InitFile(const char *filename)
|
||||||
// We must look for the central directory through the file. (Thanks to JTE for this algorithm.)
|
// We must look for the central directory through the file. (Thanks to JTE for this algorithm.)
|
||||||
// All of the central directory entry headers have a signature of 0x50 0x4b 0x01 0x02.
|
// All of the central directory entry headers have a signature of 0x50 0x4b 0x01 0x02.
|
||||||
// The first entry found means the beginning of the central directory.
|
// The first entry found means the beginning of the central directory.
|
||||||
fseek(handle, -min(size, (22 + 65536)), SEEK_CUR);
|
fseek(handle, 0-min(size, (22 + 65536)), SEEK_CUR);
|
||||||
s = endPat;
|
s = endPat;
|
||||||
while((c = fgetc(handle)) != EOF)
|
while((c = fgetc(handle)) != EOF)
|
||||||
{
|
{
|
||||||
|
@ -1211,6 +1211,7 @@ size_t W_ReadLumpHeaderPwad(UINT16 wad, UINT16 lump, void *dest, size_t size, si
|
||||||
default:
|
default:
|
||||||
I_Error("wad %d, lump %d: unsupported compression type!", wad, lump);
|
I_Error("wad %d, lump %d: unsupported compression type!", wad, lump);
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t W_ReadLumpHeader(lumpnum_t lumpnum, void *dest, size_t size, size_t offset)
|
size_t W_ReadLumpHeader(lumpnum_t lumpnum, void *dest, size_t size, size_t offset)
|
||||||
|
|
|
@ -64,7 +64,7 @@ endif
|
||||||
|
|
||||||
ifdef SDL
|
ifdef SDL
|
||||||
i_system_o+=$(OBJDIR)/SRB2.res
|
i_system_o+=$(OBJDIR)/SRB2.res
|
||||||
i_main_o+=$(OBJDIR)/win_dbg.o
|
#i_main_o+=$(OBJDIR)/win_dbg.o
|
||||||
ifndef NOHW
|
ifndef NOHW
|
||||||
OPTS+=-DUSE_WGL_SWAP
|
OPTS+=-DUSE_WGL_SWAP
|
||||||
endif
|
endif
|
||||||
|
@ -81,7 +81,8 @@ endif
|
||||||
i_net_o=$(OBJDIR)/win_net.o
|
i_net_o=$(OBJDIR)/win_net.o
|
||||||
i_system_o=$(OBJDIR)/win_sys.o $(OBJDIR)/SRB2.res
|
i_system_o=$(OBJDIR)/win_sys.o $(OBJDIR)/SRB2.res
|
||||||
i_sound_o=$(OBJDIR)/win_snd.o
|
i_sound_o=$(OBJDIR)/win_snd.o
|
||||||
i_main_o=$(OBJDIR)/win_dbg.o $(OBJDIR)/win_main.o
|
i_main_o=$(OBJDIR)/win_main.o
|
||||||
|
#i_main_o+=$(OBJDIR)/win_dbg.o
|
||||||
OBJS=$(OBJDIR)/dx_error.o $(OBJDIR)/fabdxlib.o $(OBJDIR)/win_vid.o $(OBJDIR)/win_dll.o
|
OBJS=$(OBJDIR)/dx_error.o $(OBJDIR)/fabdxlib.o $(OBJDIR)/win_vid.o $(OBJDIR)/win_dll.o
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
|
@ -119,6 +119,7 @@
|
||||||
<ClCompile Include="..\hardware\hw3sound.c" />
|
<ClCompile Include="..\hardware\hw3sound.c" />
|
||||||
<ClCompile Include="..\hardware\hw_bsp.c" />
|
<ClCompile Include="..\hardware\hw_bsp.c" />
|
||||||
<ClCompile Include="..\hardware\hw_cache.c" />
|
<ClCompile Include="..\hardware\hw_cache.c" />
|
||||||
|
<ClCompile Include="..\hardware\hw_clip.c" />
|
||||||
<ClCompile Include="..\hardware\hw_draw.c" />
|
<ClCompile Include="..\hardware\hw_draw.c" />
|
||||||
<ClCompile Include="..\hardware\hw_light.c" />
|
<ClCompile Include="..\hardware\hw_light.c" />
|
||||||
<ClCompile Include="..\hardware\hw_main.c" />
|
<ClCompile Include="..\hardware\hw_main.c" />
|
||||||
|
@ -276,6 +277,7 @@
|
||||||
<ClInclude Include="..\hardware\hw3dsdrv.h" />
|
<ClInclude Include="..\hardware\hw3dsdrv.h" />
|
||||||
<ClInclude Include="..\hardware\hw3sound.h" />
|
<ClInclude Include="..\hardware\hw3sound.h" />
|
||||||
<ClInclude Include="..\hardware\hws_data.h" />
|
<ClInclude Include="..\hardware\hws_data.h" />
|
||||||
|
<ClInclude Include="..\hardware\hw_clip.h" />
|
||||||
<ClInclude Include="..\hardware\hw_data.h" />
|
<ClInclude Include="..\hardware\hw_data.h" />
|
||||||
<ClInclude Include="..\hardware\hw_defs.h" />
|
<ClInclude Include="..\hardware\hw_defs.h" />
|
||||||
<ClInclude Include="..\hardware\hw_dll.h" />
|
<ClInclude Include="..\hardware\hw_dll.h" />
|
||||||
|
|
|
@ -450,6 +450,9 @@
|
||||||
<ClCompile Include="..\string.c">
|
<ClCompile Include="..\string.c">
|
||||||
<Filter>M_Misc</Filter>
|
<Filter>M_Misc</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\hardware\hw_clip.c">
|
||||||
|
<Filter>Hw_Hardware</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="afxres.h">
|
<ClInclude Include="afxres.h">
|
||||||
|
@ -845,6 +848,9 @@
|
||||||
<ClInclude Include="..\fastcmp.h">
|
<ClInclude Include="..\fastcmp.h">
|
||||||
<Filter>O_Other</Filter>
|
<Filter>O_Other</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\hardware\hw_clip.h">
|
||||||
|
<Filter>Hw_Hardware</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Image Include="Srb2win.ico">
|
<Image Include="Srb2win.ico">
|
||||||
|
|
|
@ -244,7 +244,7 @@ static LRESULT CALLBACK MainWndproc(HWND hWnd, UINT message, WPARAM wParam, LPAR
|
||||||
D_PostEvent(&ev);
|
D_PostEvent(&ev);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
case WM_XBUTTONDOWN:
|
case WM_XBUTTONDOWN:
|
||||||
if (nodinput)
|
if (nodinput)
|
||||||
{
|
{
|
||||||
|
@ -253,7 +253,7 @@ static LRESULT CALLBACK MainWndproc(HWND hWnd, UINT message, WPARAM wParam, LPAR
|
||||||
D_PostEvent(&ev);
|
D_PostEvent(&ev);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
case WM_MOUSEWHEEL:
|
case WM_MOUSEWHEEL:
|
||||||
//I_OutputMsg("MW_WHEEL dispatched.\n");
|
//I_OutputMsg("MW_WHEEL dispatched.\n");
|
||||||
ev.type = ev_keydown;
|
ev.type = ev_keydown;
|
||||||
|
@ -666,7 +666,9 @@ int WINAPI WinMain (HINSTANCE hInstance,
|
||||||
#endif
|
#endif
|
||||||
LoadLibraryA("exchndl.dll");
|
LoadLibraryA("exchndl.dll");
|
||||||
|
|
||||||
|
#ifndef __MINGW32__
|
||||||
prevExceptionFilter = SetUnhandledExceptionFilter(RecordExceptionInfo);
|
prevExceptionFilter = SetUnhandledExceptionFilter(RecordExceptionInfo);
|
||||||
|
#endif
|
||||||
|
|
||||||
Result = HandledWinMain(hInstance);
|
Result = HandledWinMain(hInstance);
|
||||||
#ifdef BUGTRAP
|
#ifdef BUGTRAP
|
||||||
|
|
|
@ -2581,7 +2581,7 @@ acquire:
|
||||||
UINT64 newbuttons = joybuttons ^ lastjoybuttons;
|
UINT64 newbuttons = joybuttons ^ lastjoybuttons;
|
||||||
lastjoybuttons = joybuttons;
|
lastjoybuttons = joybuttons;
|
||||||
|
|
||||||
for (i = 0; i < JOYBUTTONS && i < JOYBUTTONS_MAX; i++, j <<= 1)
|
for (i = 0; i < JOYBUTTONS_MIN; i++, j <<= 1)
|
||||||
{
|
{
|
||||||
if (newbuttons & j) // button changed state?
|
if (newbuttons & j) // button changed state?
|
||||||
{
|
{
|
||||||
|
@ -2601,7 +2601,7 @@ acquire:
|
||||||
UINT64 newhats = joyhats ^ lastjoyhats;
|
UINT64 newhats = joyhats ^ lastjoyhats;
|
||||||
lastjoyhats = joyhats;
|
lastjoyhats = joyhats;
|
||||||
|
|
||||||
for (i = 0; i < JOYHATS*4 && i < JOYHATS_MAX*4; i++, j <<= 1)
|
for (i = 0; i < JOYHATS_MIN*4; i++, j <<= 1)
|
||||||
{
|
{
|
||||||
if (newhats & j) // button changed state?
|
if (newhats & j) // button changed state?
|
||||||
{
|
{
|
||||||
|
@ -2825,7 +2825,7 @@ acquire:
|
||||||
UINT64 newbuttons = joybuttons ^ lastjoy2buttons;
|
UINT64 newbuttons = joybuttons ^ lastjoy2buttons;
|
||||||
lastjoy2buttons = joybuttons;
|
lastjoy2buttons = joybuttons;
|
||||||
|
|
||||||
for (i = 0; i < JOYBUTTONS && i < JOYBUTTONS_MAX; i++, j <<= 1)
|
for (i = 0; i < JOYBUTTONS_MIN; i++, j <<= 1)
|
||||||
{
|
{
|
||||||
if (newbuttons & j) // button changed state?
|
if (newbuttons & j) // button changed state?
|
||||||
{
|
{
|
||||||
|
@ -2845,7 +2845,7 @@ acquire:
|
||||||
UINT64 newhats = joyhats ^ lastjoy2hats;
|
UINT64 newhats = joyhats ^ lastjoy2hats;
|
||||||
lastjoy2hats = joyhats;
|
lastjoy2hats = joyhats;
|
||||||
|
|
||||||
for (i = 0; i < JOYHATS*4 && i < JOYHATS_MAX*4; i++, j <<= 1)
|
for (i = 0; i < JOYHATS_MIN*4; i++, j <<= 1)
|
||||||
{
|
{
|
||||||
if (newhats & j) // button changed state?
|
if (newhats & j) // button changed state?
|
||||||
{
|
{
|
||||||
|
|
|
@ -322,6 +322,7 @@ static inline boolean I_SkipFrame(void)
|
||||||
case GS_LEVEL:
|
case GS_LEVEL:
|
||||||
if (!paused)
|
if (!paused)
|
||||||
return false;
|
return false;
|
||||||
|
/* FALLTHRU */
|
||||||
//case GS_TIMEATTACK: -- sorry optimisation but now we have a cool level platter and that being laggardly looks terrible
|
//case GS_TIMEATTACK: -- sorry optimisation but now we have a cool level platter and that being laggardly looks terrible
|
||||||
#ifndef CLIENT_LOADINGSCREEN
|
#ifndef CLIENT_LOADINGSCREEN
|
||||||
case GS_WAITINGPLAYERS:
|
case GS_WAITINGPLAYERS:
|
||||||
|
|
Loading…
Reference in a new issue