mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-27 06:12:19 +00:00
- Changed the net start pane to open underneath the existing window instead
of scrunching the startup screen up to make room for it. - Added the red net notches for Hexen's startup screen. - Added hprintf and status simulation for Heretic's startup screen. SVN r495 (trunk)
This commit is contained in:
parent
eef025dd4e
commit
3f1a681451
5 changed files with 259 additions and 99 deletions
|
@ -1,4 +1,8 @@
|
|||
February 28, 2007
|
||||
- Changed the net start pane to open underneath the existing window instead
|
||||
of scrunching the startup screen up to make room for it.
|
||||
- Added the red net notches for Hexen's startup screen.
|
||||
- Added hprintf and status simulation for Heretic's startup screen.
|
||||
- Fixed: When I converted the P_Thing_Projectile() code for target leading
|
||||
to use the new vector routines, I had made dist calculate the squared
|
||||
length of the aim vector instead of the correct length.
|
||||
|
|
208
src/d_main.cpp
208
src/d_main.cpp
|
@ -2082,102 +2082,8 @@ void D_DoomMain (void)
|
|||
Printf ("ST_Init: Init startup screen.\n");
|
||||
ST_Init (R_GuesstimateNumTextures() + 5);
|
||||
|
||||
// [RH] Now that all text strings are set up,
|
||||
// insert them into the level and cluster data.
|
||||
G_MakeEpisodes ();
|
||||
|
||||
// [RH] Parse through all loaded mapinfo lumps
|
||||
Printf ("G_ParseMapInfo: Load map definitions.\n");
|
||||
G_ParseMapInfo ();
|
||||
|
||||
// [RH] Parse any SNDINFO lumps
|
||||
Printf ("S_InitData: Load sound definitions.\n");
|
||||
S_InitData ();
|
||||
|
||||
FActorInfo::StaticInit ();
|
||||
|
||||
// [GRB] Initialize player class list
|
||||
SetupPlayerClasses ();
|
||||
|
||||
// [RH] Load custom key and weapon settings from WADs
|
||||
D_LoadWadSettings ();
|
||||
|
||||
// [GRB] Check if someone used clearplayerclasses but not addplayerclass
|
||||
if (PlayerClasses.Size () == 0)
|
||||
{
|
||||
I_FatalError ("No player classes defined");
|
||||
}
|
||||
|
||||
FActorInfo::StaticGameSet ();
|
||||
ST_Progress ();
|
||||
|
||||
Printf ("R_Init: Init %s refresh subsystem.\n", GameNames[gameinfo.gametype]);
|
||||
R_Init ();
|
||||
|
||||
Printf ("DecalLibrary: Load decals.\n");
|
||||
DecalLibrary.Clear ();
|
||||
DecalLibrary.ReadAllDecals ();
|
||||
|
||||
// [RH] Try adding .deh and .bex files on the command line.
|
||||
// If there are none, try adding any in the config file.
|
||||
|
||||
//if (gameinfo.gametype == GAME_Doom)
|
||||
{
|
||||
if (!ConsiderPatches ("-deh", ".deh") &&
|
||||
!ConsiderPatches ("-bex", ".bex") &&
|
||||
(gameinfo.gametype == GAME_Doom) &&
|
||||
GameConfig->SetSection ("Doom.DefaultDehacked"))
|
||||
{
|
||||
const char *key;
|
||||
const char *value;
|
||||
|
||||
while (GameConfig->NextInSection (key, value))
|
||||
{
|
||||
if (stricmp (key, "Path") == 0 && FileExists (value))
|
||||
{
|
||||
Printf ("Applying patch %s\n", value);
|
||||
DoDehPatch (value, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DoDehPatch (NULL, true); // See if there's a patch in a PWAD
|
||||
FinishDehPatch (); // Create replacements for dehacked pickups
|
||||
}
|
||||
HandleNoSector (); // clear NOSECTOR flag off all actors modified by Dehacked and the BossEye.
|
||||
|
||||
FActorInfo::StaticSetActorNums ();
|
||||
|
||||
|
||||
// [RH] User-configurable startup strings. Because BOOM does.
|
||||
static const char *startupString[5] = {
|
||||
"STARTUP1", "STARTUP2", "STARTUP3", "STARTUP4", "STARTUP5"
|
||||
};
|
||||
for (p = 0; p < 5; ++p)
|
||||
{
|
||||
const char *str = GStrings[startupString[p]];
|
||||
if (str != NULL && str[0] != '\0')
|
||||
{
|
||||
Printf ("%s\n", str);
|
||||
}
|
||||
}
|
||||
|
||||
//Added by MC:
|
||||
bglobal.getspawned = Args.GatherFiles ("-bots", "", false);
|
||||
if (bglobal.getspawned->NumArgs() == 0)
|
||||
{
|
||||
delete bglobal.getspawned;
|
||||
bglobal.getspawned = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
bglobal.spawn_tries = 0;
|
||||
bglobal.wanted_botnum = bglobal.getspawned->NumArgs();
|
||||
}
|
||||
|
||||
flags = dmflags;
|
||||
|
||||
Printf ("P_Init: Checking cmd-line parameters...\n");
|
||||
flags = dmflags;
|
||||
if (Args.CheckParm ("-nomonsters")) flags |= DF_NO_MONSTERS;
|
||||
if (Args.CheckParm ("-respawn")) flags |= DF_MONSTERS_RESPAWN;
|
||||
if (Args.CheckParm ("-fast")) flags |= DF_FAST_MONSTERS;
|
||||
|
@ -2302,13 +2208,125 @@ void D_DoomMain (void)
|
|||
timelimit = 20.f;
|
||||
}
|
||||
|
||||
//
|
||||
// Build status bar line!
|
||||
//
|
||||
if (deathmatch)
|
||||
ST_HereticStatus("DeathMatch...");
|
||||
if (dmflags & DF_NO_MONSTERS)
|
||||
ST_HereticStatus("No Monsters...");
|
||||
if (dmflags & DF_MONSTERS_RESPAWN)
|
||||
ST_HereticStatus("Respawning...");
|
||||
if (autostart)
|
||||
{
|
||||
FString temp;
|
||||
temp.Format ("Warp to map %s, Skill %d ", startmap, gameskill + 1);
|
||||
ST_HereticStatus (temp);
|
||||
}
|
||||
|
||||
// [RH] Now that all text strings are set up,
|
||||
// insert them into the level and cluster data.
|
||||
G_MakeEpisodes ();
|
||||
|
||||
// [RH] Parse through all loaded mapinfo lumps
|
||||
Printf ("G_ParseMapInfo: Load map definitions.\n");
|
||||
G_ParseMapInfo ();
|
||||
|
||||
// [RH] Parse any SNDINFO lumps
|
||||
Printf ("S_InitData: Load sound definitions.\n");
|
||||
S_InitData ();
|
||||
|
||||
FActorInfo::StaticInit ();
|
||||
|
||||
// [GRB] Initialize player class list
|
||||
SetupPlayerClasses ();
|
||||
|
||||
// [RH] Load custom key and weapon settings from WADs
|
||||
D_LoadWadSettings ();
|
||||
|
||||
// [GRB] Check if someone used clearplayerclasses but not addplayerclass
|
||||
if (PlayerClasses.Size () == 0)
|
||||
{
|
||||
I_FatalError ("No player classes defined");
|
||||
}
|
||||
|
||||
FActorInfo::StaticGameSet ();
|
||||
ST_Progress ();
|
||||
|
||||
Printf ("R_Init: Init %s refresh subsystem.\n", GameNames[gameinfo.gametype]);
|
||||
ST_HereticMessage ("Loading graphics", 0x3f);
|
||||
R_Init ();
|
||||
|
||||
Printf ("DecalLibrary: Load decals.\n");
|
||||
DecalLibrary.Clear ();
|
||||
DecalLibrary.ReadAllDecals ();
|
||||
|
||||
// [RH] Try adding .deh and .bex files on the command line.
|
||||
// If there are none, try adding any in the config file.
|
||||
|
||||
//if (gameinfo.gametype == GAME_Doom)
|
||||
{
|
||||
if (!ConsiderPatches ("-deh", ".deh") &&
|
||||
!ConsiderPatches ("-bex", ".bex") &&
|
||||
(gameinfo.gametype == GAME_Doom) &&
|
||||
GameConfig->SetSection ("Doom.DefaultDehacked"))
|
||||
{
|
||||
const char *key;
|
||||
const char *value;
|
||||
|
||||
while (GameConfig->NextInSection (key, value))
|
||||
{
|
||||
if (stricmp (key, "Path") == 0 && FileExists (value))
|
||||
{
|
||||
Printf ("Applying patch %s\n", value);
|
||||
DoDehPatch (value, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DoDehPatch (NULL, true); // See if there's a patch in a PWAD
|
||||
FinishDehPatch (); // Create replacements for dehacked pickups
|
||||
}
|
||||
HandleNoSector (); // clear NOSECTOR flag off all actors modified by Dehacked and the BossEye.
|
||||
|
||||
FActorInfo::StaticSetActorNums ();
|
||||
|
||||
|
||||
// [RH] User-configurable startup strings. Because BOOM does.
|
||||
static const char *startupString[5] = {
|
||||
"STARTUP1", "STARTUP2", "STARTUP3", "STARTUP4", "STARTUP5"
|
||||
};
|
||||
for (p = 0; p < 5; ++p)
|
||||
{
|
||||
const char *str = GStrings[startupString[p]];
|
||||
if (str != NULL && str[0] != '\0')
|
||||
{
|
||||
Printf ("%s\n", str);
|
||||
}
|
||||
}
|
||||
|
||||
//Added by MC:
|
||||
bglobal.getspawned = Args.GatherFiles ("-bots", "", false);
|
||||
if (bglobal.getspawned->NumArgs() == 0)
|
||||
{
|
||||
delete bglobal.getspawned;
|
||||
bglobal.getspawned = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
bglobal.spawn_tries = 0;
|
||||
bglobal.wanted_botnum = bglobal.getspawned->NumArgs();
|
||||
}
|
||||
|
||||
Printf ("M_Init: Init miscellaneous info.\n");
|
||||
M_Init ();
|
||||
|
||||
Printf ("P_Init: Init Playloop state.\n");
|
||||
ST_HereticMessage ("Init game engine", 0x3f);
|
||||
P_Init ();
|
||||
|
||||
Printf ("D_CheckNetGame: Checking network game status.\n");
|
||||
ST_HereticMessage ("Checking network game status.", 0x3f);
|
||||
D_CheckNetGame ();
|
||||
|
||||
// [RH] Lock any cvars that should be locked now that we're
|
||||
|
|
|
@ -60,6 +60,8 @@ static void ST_TTY_NetProgress (int count);
|
|||
static void ST_TTY_NetMessage (const char *format, ...);
|
||||
static void ST_TTY_NetDone ();
|
||||
static bool ST_TTY_NetLoop (bool (*timer_callback)(void *), void *userdata);
|
||||
static void ST_Null_HereticMessage (const char *, int);
|
||||
static void ST_Null_HereticStatus (const char *);
|
||||
|
||||
// EXTERNAL DATA DECLARATIONS ----------------------------------------------
|
||||
|
||||
|
@ -67,6 +69,8 @@ static bool ST_TTY_NetLoop (bool (*timer_callback)(void *), void *userdata);
|
|||
|
||||
void (*ST_Done)();
|
||||
void (*ST_Progress)();
|
||||
void (*ST_HereticMessage)(const char *message, int attributes);
|
||||
void (*ST_HereticStatus)(const char *status);
|
||||
void (*ST_NetInit)(const char *message, int numplayers);
|
||||
void (*ST_NetProgress)(int count);
|
||||
void (*ST_NetMessage)(const char *format, ...);
|
||||
|
@ -304,6 +308,14 @@ static bool ST_TTY_NetLoop(bool (*timer_callback)(void *), void *userdata)
|
|||
}
|
||||
}
|
||||
|
||||
static void ST_Null_HereticMessage (const char *, int)
|
||||
{
|
||||
}
|
||||
|
||||
static void ST_Null_HereticStatus (const char *)
|
||||
{
|
||||
}
|
||||
|
||||
void ST_Endoom()
|
||||
{
|
||||
exit(0);
|
||||
|
|
|
@ -37,6 +37,8 @@
|
|||
extern void ST_Init(int maxProgress);
|
||||
extern void (*ST_Done)();
|
||||
extern void (*ST_Progress)();
|
||||
extern void (*ST_HereticMessage)(const char *message, int attributes);
|
||||
extern void (*ST_HereticStatus)(const char *status);
|
||||
extern void (*ST_NetInit)(const char *message, int numplayers);
|
||||
extern void (*ST_NetProgress)(int count);
|
||||
extern void (*ST_NetMessage)(const char *format, ...); // cover for printf()
|
||||
|
|
|
@ -110,6 +110,7 @@
|
|||
|
||||
void RestoreConView();
|
||||
void LayoutMainWindow (HWND hWnd, HWND pane);
|
||||
int LayoutNetStartPane (HWND pane, int w);
|
||||
|
||||
bool ST_Util_CreateStartupWindow ();
|
||||
void ST_Util_SizeWindowForBitmap (int scale);
|
||||
|
@ -136,6 +137,8 @@ static INT_PTR CALLBACK NetStartPaneProc (HWND hDlg, UINT msg, WPARAM wParam, LP
|
|||
static void ST_Basic_Init ();
|
||||
static void ST_Basic_Done ();
|
||||
static void ST_Basic_Progress ();
|
||||
static void ST_Basic_HereticMessage (const char *message, int attributes);
|
||||
static void ST_Basic_HereticStatus (const char *status);
|
||||
static void ST_Basic_NetInit (const char *message, int numplayers);
|
||||
static void ST_Basic_NetProgress (int count);
|
||||
static void ST_Basic_NetMessage (const char *format, ...);
|
||||
|
@ -145,9 +148,12 @@ static bool ST_Basic_NetLoop (bool (*timer_callback)(void *), void *userdata);
|
|||
static void ST_Hexen_Init ();
|
||||
static void ST_Hexen_Done ();
|
||||
static void ST_Hexen_Progress ();
|
||||
static void ST_Hexen_NetProgress (int count);
|
||||
|
||||
static void ST_Heretic_Init ();
|
||||
static void ST_Heretic_Progress ();
|
||||
static void ST_Heretic_Message (const char *message, int attributes);
|
||||
static void ST_Heretic_Status (const char *status);
|
||||
|
||||
static void ST_Strife_Init ();
|
||||
static void ST_Strife_Done ();
|
||||
|
@ -163,6 +169,8 @@ extern HWND Window, ConWindow, ProgressBar, NetStartPane, StartupScreen, GameTit
|
|||
|
||||
void (*ST_Done)();
|
||||
void (*ST_Progress)();
|
||||
void (*ST_HereticMessage)(const char *message, int attributes);
|
||||
void (*ST_HereticStatus)(const char *status);
|
||||
void (*ST_NetInit)(const char *message, int numplayers);
|
||||
void (*ST_NetProgress)(int count);
|
||||
void (*ST_NetMessage)(const char *format, ...);
|
||||
|
@ -183,6 +191,7 @@ static int MaxPos, CurPos, NotchPos;
|
|||
static int NetMaxPos, NetCurPos;
|
||||
static LRESULT NetMarqueeMode;
|
||||
static int ThermX, ThermY, ThermWidth, ThermHeight;
|
||||
static int HMsgY, SMsgX;
|
||||
static BYTE *StrifeStartupPics[4+2+1];
|
||||
|
||||
static const char *StrifeStartupPicNames[4+2+1] =
|
||||
|
@ -322,6 +331,8 @@ static void ST_Basic_Init ()
|
|||
|
||||
ST_Done = ST_Basic_Done;
|
||||
ST_Progress = ST_Basic_Progress;
|
||||
ST_HereticMessage = ST_Basic_HereticMessage;
|
||||
ST_HereticStatus = ST_Basic_HereticStatus;
|
||||
ST_NetInit = ST_Basic_NetInit;
|
||||
ST_NetProgress = ST_Basic_NetProgress;
|
||||
ST_NetMessage = ST_Basic_NetMessage;
|
||||
|
@ -365,6 +376,30 @@ static void ST_Basic_Progress()
|
|||
}
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// ST_Basic_HereticMessage
|
||||
//
|
||||
// Only used by the Heretic startup screen.
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
static void ST_Basic_HereticMessage (const char *, int)
|
||||
{
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// ST_Basic_HereticStatus
|
||||
//
|
||||
// Only used by the Heretic startup screen.
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
static void ST_Basic_HereticStatus (const char *)
|
||||
{
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// ST_Basic_NetInit
|
||||
|
@ -389,10 +424,12 @@ static void ST_Basic_NetInit(const char *message, int numplayers)
|
|||
DestroyWindow (ProgressBar);
|
||||
ProgressBar = NULL;
|
||||
}
|
||||
RECT winrect;
|
||||
GetWindowRect (Window, &winrect);
|
||||
SetWindowPos (Window, NULL, 0, 0,
|
||||
winrect.right - winrect.left, winrect.bottom - winrect.top + LayoutNetStartPane (NetStartPane, 0),
|
||||
SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOOWNERZORDER | SWP_NOZORDER);
|
||||
LayoutMainWindow (Window, NULL);
|
||||
// Make sure the last line of output is visible in the log window.
|
||||
SendMessage (ConWindow, EM_LINESCROLL, 0, SendMessage (ConWindow, EM_GETLINECOUNT, 0, 0) -
|
||||
SendMessage (ConWindow, EM_GETFIRSTVISIBLELINE, 0, 0));
|
||||
}
|
||||
if (NetStartPane != NULL)
|
||||
{
|
||||
|
@ -641,8 +678,10 @@ static void ST_Hexen_Init ()
|
|||
|
||||
ST_Done = ST_Hexen_Done;
|
||||
ST_Progress = ST_Hexen_Progress;
|
||||
ST_HereticMessage = ST_Basic_HereticMessage;
|
||||
ST_HereticStatus = ST_Basic_HereticStatus;
|
||||
ST_NetInit = ST_Basic_NetInit;
|
||||
ST_NetProgress = ST_Basic_NetProgress;
|
||||
ST_NetProgress = ST_Hexen_NetProgress;
|
||||
ST_NetMessage = ST_Basic_NetMessage;
|
||||
ST_NetDone = ST_Basic_NetDone;
|
||||
ST_NetLoop = ST_Basic_NetLoop;
|
||||
|
@ -705,6 +744,33 @@ static void ST_Hexen_Progress()
|
|||
I_GetEvent ();
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// ST_Hexen_NetProgress
|
||||
//
|
||||
// Draws the red net noches in addition to the normal progress bar.
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
static void ST_Hexen_NetProgress (int count)
|
||||
{
|
||||
int oldpos = NetCurPos;
|
||||
int x, y;
|
||||
|
||||
ST_Basic_NetProgress (count);
|
||||
if (NetMaxPos != 0 && NetCurPos > oldpos)
|
||||
{
|
||||
for (; oldpos < NetCurPos && oldpos < ST_MAX_NETNOTCHES; ++oldpos)
|
||||
{
|
||||
x = ST_NETPROGRESS_X + ST_NETNOTCH_WIDTH * oldpos;
|
||||
y = ST_NETPROGRESS_Y;
|
||||
ST_Util_DrawBlock (StartupBitmap, NetNotchBits, x, y, ST_NETNOTCH_WIDTH / 2, ST_NETNOTCH_HEIGHT);
|
||||
}
|
||||
S_Sound (CHAN_BODY, "Drip", 1, ATTN_NONE);
|
||||
I_GetEvent ();
|
||||
}
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// ST_Heretic_Init
|
||||
|
@ -752,6 +818,8 @@ static void ST_Heretic_Init ()
|
|||
ThermY = THERM_Y * font[0];
|
||||
ThermWidth = THERM_LEN * 8 - 4;
|
||||
ThermHeight = font[0];
|
||||
HMsgY = 7;
|
||||
SMsgX = 1;
|
||||
|
||||
ST_Util_FreeFont (font);
|
||||
|
||||
|
@ -761,6 +829,8 @@ static void ST_Heretic_Init ()
|
|||
|
||||
ST_Done = ST_Hexen_Done;
|
||||
ST_Progress = ST_Heretic_Progress;
|
||||
ST_HereticMessage = ST_Heretic_Message;
|
||||
ST_HereticStatus = ST_Heretic_Status;
|
||||
ST_NetInit = ST_Basic_NetInit;
|
||||
ST_NetProgress = ST_Basic_NetProgress;
|
||||
ST_NetMessage = ST_Basic_NetMessage;
|
||||
|
@ -797,6 +867,58 @@ static void ST_Heretic_Progress()
|
|||
I_GetEvent ();
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// ST_Heretic_Message
|
||||
//
|
||||
// Prints text in the center box of the startup screen.
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
static void ST_Heretic_Message (const char *message, int attributes)
|
||||
{
|
||||
BYTE *font = ST_Util_LoadFont (TEXT_FONT_NAME);
|
||||
if (font != NULL)
|
||||
{
|
||||
int x;
|
||||
|
||||
for (x = 0; message[x] != '\0'; ++x)
|
||||
{
|
||||
ST_Util_DrawChar (StartupBitmap, font, 17 + x, HMsgY, message[x], attributes);
|
||||
}
|
||||
ST_Util_InvalidateRect (StartupScreen, StartupBitmap, 17 * 8, HMsgY * font[0], (17 + x) * 8, HMsgY * font[0] + font[0]);
|
||||
ST_Util_FreeFont (font);
|
||||
HMsgY++;
|
||||
I_GetEvent ();
|
||||
}
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// ST_Heretic_Status
|
||||
//
|
||||
// Appends text to Heretic's status line.
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
static void ST_Heretic_Status (const char *status)
|
||||
{
|
||||
BYTE *font = ST_Util_LoadFont (TEXT_FONT_NAME);
|
||||
if (font != NULL)
|
||||
{
|
||||
int x;
|
||||
|
||||
for (x = 0; status[x] != '\0'; ++x)
|
||||
{
|
||||
ST_Util_DrawChar (StartupBitmap, font, SMsgX + x, 24, status[x], 0x1f);
|
||||
}
|
||||
ST_Util_InvalidateRect (StartupScreen, StartupBitmap, SMsgX * 8, 24 * font[0], (SMsgX + x) * 8, 25 * font[0]);
|
||||
ST_Util_FreeFont (font);
|
||||
SMsgX += x;
|
||||
I_GetEvent ();
|
||||
}
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// ST_Strife_Init
|
||||
|
@ -859,6 +981,8 @@ static void ST_Strife_Init ()
|
|||
|
||||
ST_Done = ST_Strife_Done;
|
||||
ST_Progress = ST_Strife_Progress;
|
||||
ST_HereticMessage = ST_Basic_HereticMessage;
|
||||
ST_HereticStatus = ST_Basic_HereticStatus;
|
||||
ST_NetInit = ST_Basic_NetInit;
|
||||
ST_NetProgress = ST_Basic_NetProgress;
|
||||
ST_NetMessage = ST_Basic_NetMessage;
|
||||
|
|
Loading…
Reference in a new issue