Added multiplayer tab for launcher + backend improvements
Adds a multiplayer tab to allow hosting and joining games from within the GZDoom launcher rather than needed to use the command line. This has its own set of defaults independent from the main play page which necessitated rewriting how this information is passed and stored in the backend. A startup info struct is now passed back which has its defaults set from the cvars and then propagates any changes to it back to the defaults after selection is complete, making it much simpler to interface with the engine defaults.
This commit is contained in:
parent
6756c850e7
commit
9701bfaa5c
18 changed files with 1006 additions and 156 deletions
|
|
@ -5,6 +5,7 @@
|
|||
#include "c_cvars.h"
|
||||
#include "gstrings.h"
|
||||
#include "version.h"
|
||||
#include "m_argv.h"
|
||||
|
||||
static_assert(sizeof(void*) == 8,
|
||||
"Only LP64/LLP64 builds are officially supported. "
|
||||
|
|
@ -30,11 +31,32 @@ bool pauseext;
|
|||
|
||||
FStartupInfo GameStartupInfo;
|
||||
|
||||
CVAR(Bool, queryiwad, QUERYIWADDEFAULT, CVAR_ARCHIVE | CVAR_GLOBALCONFIG);
|
||||
CVAR(String, defaultiwad, "", CVAR_ARCHIVE | CVAR_GLOBALCONFIG);
|
||||
CVAR(Bool, vid_fps, false, 0)
|
||||
CVAR(Bool, queryiwad, QUERYIWADDEFAULT, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
|
||||
CVAR(Bool, saveargs, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
|
||||
CVAR(Bool, savenetfile, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
|
||||
CVAR(Bool, savenetargs, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
|
||||
CVAR(String, defaultiwad, "", CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
|
||||
CVAR(String, defaultargs, "", CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
|
||||
CVAR(String, defaultnetiwad, "", CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
|
||||
CVAR(String, defaultnetargs, "", CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
|
||||
CVAR(Int, defaultnetplayers, 8, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
|
||||
CVAR(Int, defaultnethostport, 0, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
|
||||
CVAR(Int, defaultnetticdup, 0, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
|
||||
CVAR(Int, defaultnetmode, 0, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
|
||||
CVAR(Int, defaultnetgamemode, -1, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
|
||||
CVAR(Bool, defaultnetaltdm, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
|
||||
CVAR(String, defaultnetaddress, "", CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
|
||||
CVAR(Int, defaultnetjoinport, 0, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
|
||||
CVAR(Int, defaultnetpage, 0, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
|
||||
CVAR(Int, defaultnethostteam, 255, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
|
||||
CVAR(Int, defaultnetjointeam, 255, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
|
||||
CVAR(Bool, defaultnetextratic, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
|
||||
CVAR(String, defaultnetsavefile, "", CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
|
||||
|
||||
EXTERN_CVAR(Bool, ui_generic)
|
||||
EXTERN_CVAR(Int, vid_preferbackend)
|
||||
EXTERN_CVAR(Bool, vid_fullscreen)
|
||||
|
||||
CUSTOM_CVAR(String, language, "auto", CVAR_ARCHIVE | CVAR_NOINITCALL | CVAR_GLOBALCONFIG)
|
||||
{
|
||||
|
|
@ -43,3 +65,120 @@ CUSTOM_CVAR(String, language, "auto", CVAR_ARCHIVE | CVAR_NOINITCALL | CVAR_GLOB
|
|||
if (sysCallbacks.LanguageChanged) sysCallbacks.LanguageChanged(self);
|
||||
}
|
||||
|
||||
// Some of this info has to be passed and managed from the front end since it's game-engine specific.
|
||||
FStartupSelectionInfo::FStartupSelectionInfo(const TArray<WadStuff>& wads, FArgs& args, int startFlags) : Wads(&wads), Args(&args), DefaultStartFlags(startFlags)
|
||||
{
|
||||
DefaultQueryIWAD = queryiwad;
|
||||
DefaultLanguage = language;
|
||||
DefaultBackend = vid_preferbackend;
|
||||
DefaultFullscreen = vid_fullscreen;
|
||||
|
||||
if (defaultiwad[0] != '\0')
|
||||
{
|
||||
for (int i = 0; i < wads.Size(); ++i)
|
||||
{
|
||||
if (!wads[i].Name.CompareNoCase(defaultiwad))
|
||||
{
|
||||
DefaultIWAD = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
DefaultArgs = defaultargs;
|
||||
bSaveArgs = saveargs;
|
||||
|
||||
if (defaultnetiwad[0] != '\0')
|
||||
{
|
||||
for (int i = 0; i < wads.Size(); ++i)
|
||||
{
|
||||
if (!wads[i].Name.CompareNoCase(defaultnetiwad))
|
||||
{
|
||||
DefaultNetIWAD = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
DefaultNetArgs = defaultnetargs;
|
||||
DefaultNetPage = defaultnetpage;
|
||||
DefaultNetSaveFile = defaultnetsavefile;
|
||||
bSaveNetFile = savenetfile;
|
||||
bSaveNetArgs = savenetargs;
|
||||
|
||||
DefaultNetPlayers = defaultnetplayers;
|
||||
DefaultNetHostPort = defaultnethostport;
|
||||
DefaultNetTicDup = defaultnetticdup;
|
||||
DefaultNetMode = defaultnetmode;
|
||||
DefaultNetGameMode = defaultnetgamemode;
|
||||
DefaultNetAltDM = defaultnetaltdm;
|
||||
DefaultNetHostTeam = defaultnethostteam;
|
||||
DefaultNetExtraTic = defaultnetextratic;
|
||||
|
||||
DefaultNetAddress = defaultnetaddress;
|
||||
DefaultNetJoinPort = defaultnetjoinport;
|
||||
DefaultNetJoinTeam = defaultnetjointeam;
|
||||
}
|
||||
|
||||
// Return whatever IWAD the user selected.
|
||||
int FStartupSelectionInfo::SaveInfo()
|
||||
{
|
||||
DefaultLanguage.StripLeftRight();
|
||||
|
||||
DefaultArgs.StripLeftRight();
|
||||
|
||||
DefaultNetArgs.StripLeftRight();
|
||||
AdditionalNetArgs.StripLeftRight();
|
||||
DefaultNetAddress.StripLeftRight();
|
||||
DefaultNetSaveFile.StripLeftRight();
|
||||
|
||||
queryiwad = DefaultQueryIWAD;
|
||||
language = DefaultLanguage.GetChars();
|
||||
vid_fullscreen = DefaultFullscreen;
|
||||
if (DefaultBackend != vid_preferbackend)
|
||||
vid_preferbackend = DefaultBackend;
|
||||
|
||||
if (bNetStart)
|
||||
{
|
||||
savenetfile = bSaveNetFile;
|
||||
savenetargs = bSaveNetArgs;
|
||||
|
||||
defaultnetiwad = (*Wads)[DefaultNetIWAD].Name.GetChars();
|
||||
defaultnetpage = DefaultNetPage;
|
||||
defaultnetsavefile = savenetfile ? DefaultNetSaveFile.GetChars() : "";
|
||||
defaultnetargs = savenetargs ? DefaultNetArgs.GetChars() : "";
|
||||
|
||||
if (bHosting)
|
||||
{
|
||||
defaultnetplayers = DefaultNetPlayers;
|
||||
defaultnethostport = DefaultNetHostPort;
|
||||
defaultnetticdup = DefaultNetTicDup;
|
||||
defaultnetmode = DefaultNetMode;
|
||||
defaultnetgamemode = DefaultNetGameMode;
|
||||
defaultnetaltdm = DefaultNetAltDM;
|
||||
defaultnethostteam = DefaultNetHostTeam;
|
||||
defaultnetextratic = DefaultNetExtraTic;
|
||||
}
|
||||
else
|
||||
{
|
||||
defaultnetaddress = DefaultNetAddress.GetChars();
|
||||
defaultnetjoinport = DefaultNetJoinPort;
|
||||
defaultnetjointeam = DefaultNetJoinTeam;
|
||||
}
|
||||
|
||||
if (!DefaultNetArgs.IsEmpty())
|
||||
Args->AppendArgsString(DefaultNetArgs);
|
||||
if (!AdditionalNetArgs.IsEmpty())
|
||||
Args->AppendArgsString(AdditionalNetArgs);
|
||||
|
||||
return DefaultNetIWAD;
|
||||
}
|
||||
|
||||
defaultiwad = (*Wads)[DefaultIWAD].Name.GetChars();
|
||||
saveargs = bSaveArgs;
|
||||
defaultargs = saveargs ? DefaultArgs.GetChars() : "";
|
||||
|
||||
if (!DefaultArgs.IsEmpty())
|
||||
Args->AppendArgsString(DefaultArgs);
|
||||
|
||||
return DefaultIWAD;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ class FGameTexture;
|
|||
class FTextureID;
|
||||
enum EUpscaleFlags : int;
|
||||
class FConfigFile;
|
||||
class FArgs;
|
||||
struct FTranslationID;
|
||||
|
||||
struct SystemCallbacks
|
||||
|
|
@ -58,6 +59,51 @@ struct WadStuff
|
|||
FString Name;
|
||||
};
|
||||
|
||||
struct FStartupSelectionInfo
|
||||
{
|
||||
const TArray<WadStuff>* Wads = nullptr;
|
||||
FArgs* Args = nullptr;
|
||||
|
||||
// Local game info
|
||||
int DefaultIWAD = 0;
|
||||
FString DefaultArgs = {};
|
||||
bool bSaveArgs = true;
|
||||
|
||||
// Settings
|
||||
int DefaultStartFlags = 0;
|
||||
bool DefaultQueryIWAD = true;
|
||||
FString DefaultLanguage = "auto";
|
||||
int DefaultBackend = 1;
|
||||
bool DefaultFullscreen = true;
|
||||
|
||||
// Net game info
|
||||
int DefaultNetIWAD = 0;
|
||||
bool bNetStart = false;
|
||||
bool bHosting = false;
|
||||
bool bSaveNetFile = false;
|
||||
bool bSaveNetArgs = true;
|
||||
int DefaultNetPage = 0;
|
||||
FString DefaultNetArgs = {};
|
||||
FString AdditionalNetArgs = {}; // These ones shouldn't be saved.
|
||||
FString DefaultNetSaveFile = {};
|
||||
int DefaultNetHostTeam = 255;
|
||||
int DefaultNetPlayers = 8;
|
||||
int DefaultNetHostPort = 0;
|
||||
int DefaultNetTicDup = 0;
|
||||
bool DefaultNetExtraTic = false;
|
||||
int DefaultNetMode = -1;
|
||||
int DefaultNetGameMode = -1;
|
||||
bool DefaultNetAltDM = false;
|
||||
|
||||
FString DefaultNetAddress = {};
|
||||
int DefaultNetJoinPort = 0;
|
||||
int DefaultNetJoinTeam = 255;
|
||||
|
||||
FStartupSelectionInfo() = delete;
|
||||
FStartupSelectionInfo(const TArray<WadStuff>& wads, FArgs& args, int startFlags);
|
||||
int SaveInfo();
|
||||
};
|
||||
|
||||
|
||||
extern FString endoomName;
|
||||
extern bool batchrun;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue