mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-26 03:30:46 +00:00
- disconnected Shadow Warrior's menu so it can be replaced.
Unlike the other games this was a lot more invasive
This commit is contained in:
parent
d55f55c04d
commit
702f91b6b5
12 changed files with 635 additions and 990 deletions
|
@ -65,10 +65,6 @@ BEGIN_SW_NS
|
||||||
#define SETUPPROGRAMNAME ("Shadow Warrior Setup")
|
#define SETUPPROGRAMNAME ("Shadow Warrior Setup")
|
||||||
#define SETUPPROGRAMVERSION ("1.2")
|
#define SETUPPROGRAMVERSION ("1.2")
|
||||||
|
|
||||||
#define GAMENAME "Shadow Warrior"
|
|
||||||
#define GAMELAUNCHER ("SW.EXE")
|
|
||||||
#define GAMETOTYPE ("SW")
|
|
||||||
|
|
||||||
#define MENUFOOTER "Esc Exits Move ÄÙ Selects\0"
|
#define MENUFOOTER "Esc Exits Move ÄÙ Selects\0"
|
||||||
|
|
||||||
#define COMMITLAUNCHER ("COMMIT.EXE")
|
#define COMMITLAUNCHER ("COMMIT.EXE")
|
||||||
|
|
|
@ -66,6 +66,7 @@ BEGIN_SW_NS
|
||||||
|
|
||||||
SWBOOL SpriteInfo = FALSE;
|
SWBOOL SpriteInfo = FALSE;
|
||||||
extern SWBOOL QuitFlag;
|
extern SWBOOL QuitFlag;
|
||||||
|
extern SWBOOL MultiPlayQuitFlag;
|
||||||
|
|
||||||
// FUNCTION PROTOTYPES ///////////////////////////////////////////////////////////////////////
|
// FUNCTION PROTOTYPES ///////////////////////////////////////////////////////////////////////
|
||||||
void CON_ProcessOptions(void);
|
void CON_ProcessOptions(void);
|
||||||
|
|
|
@ -452,8 +452,6 @@ DemoPlayBack(void)
|
||||||
|
|
||||||
domovethings();
|
domovethings();
|
||||||
|
|
||||||
MNU_CheckForMenus();
|
|
||||||
|
|
||||||
// fast forward and slow mo
|
// fast forward and slow mo
|
||||||
if (DemoEdit)
|
if (DemoEdit)
|
||||||
{
|
{
|
||||||
|
@ -621,8 +619,6 @@ ScenePlayBack(void)
|
||||||
|
|
||||||
//movethings();
|
//movethings();
|
||||||
domovethings();
|
domovethings();
|
||||||
|
|
||||||
MNU_CheckForMenus();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// demo is over
|
// demo is over
|
||||||
|
|
|
@ -56,6 +56,7 @@ Prepared for public release: 03/28/2005 - Charlie Wiederhold, 3D Realms
|
||||||
#include "interp.h"
|
#include "interp.h"
|
||||||
#include "sector.h"
|
#include "sector.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
#include "menu/menu.h"
|
||||||
|
|
||||||
BEGIN_SW_NS
|
BEGIN_SW_NS
|
||||||
|
|
||||||
|
@ -1039,7 +1040,7 @@ post_analyzesprites(void)
|
||||||
void
|
void
|
||||||
ResizeView(PLAYERp pp)
|
ResizeView(PLAYERp pp)
|
||||||
{
|
{
|
||||||
if (MenuInputMode || InputMode || HelpInputMode || ConPanel || ConInputMode || PauseKeySet)
|
if (M_Active() || PauseKeySet)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (dimensionmode == 2 || dimensionmode == 5 || dimensionmode == 6)
|
if (dimensionmode == 2 || dimensionmode == 5 || dimensionmode == 6)
|
||||||
|
@ -1083,7 +1084,6 @@ ResizeView(PLAYERp pp)
|
||||||
}
|
}
|
||||||
|
|
||||||
// !JIM! 08/06
|
// !JIM! 08/06
|
||||||
extern SWBOOL UsingMenus;
|
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
void
|
void
|
||||||
|
@ -1417,6 +1417,7 @@ void PrintLocationInfo(PLAYERp pp)
|
||||||
SWBOOL DebugSecret = FALSE;
|
SWBOOL DebugSecret = FALSE;
|
||||||
void SecretInfo(PLAYERp pp)
|
void SecretInfo(PLAYERp pp)
|
||||||
{
|
{
|
||||||
|
if (!hud_stats) return;
|
||||||
#define Y_STEP 7
|
#define Y_STEP 7
|
||||||
#define AVERAGEFRAMES 16
|
#define AVERAGEFRAMES 16
|
||||||
int x = windowxy1.x+2;
|
int x = windowxy1.x+2;
|
||||||
|
@ -2485,9 +2486,7 @@ drawscreen(PLAYERp pp)
|
||||||
DrawCompass(pp);
|
DrawCompass(pp);
|
||||||
UpdateMiniBar(pp);
|
UpdateMiniBar(pp);
|
||||||
|
|
||||||
if (UsingMenus)
|
if (!M_Active())
|
||||||
MNU_DrawMenu();
|
|
||||||
else
|
|
||||||
SecretInfo(pp);
|
SecretInfo(pp);
|
||||||
|
|
||||||
videoNextPage();
|
videoNextPage();
|
||||||
|
|
|
@ -95,6 +95,7 @@ Things required to make savegames work:
|
||||||
#include "printf.h"
|
#include "printf.h"
|
||||||
#include "m_argv.h"
|
#include "m_argv.h"
|
||||||
#include "debugbreak.h"
|
#include "debugbreak.h"
|
||||||
|
#include "menu/menu.h"
|
||||||
|
|
||||||
//#include "crc32.h"
|
//#include "crc32.h"
|
||||||
|
|
||||||
|
@ -106,6 +107,8 @@ signed char MNU_InputString(char*, short);
|
||||||
SWBOOL IsCommand(const char* str);
|
SWBOOL IsCommand(const char* str);
|
||||||
SWBOOL MNU_StartNetGame(void);
|
SWBOOL MNU_StartNetGame(void);
|
||||||
|
|
||||||
|
extern SWBOOL MultiPlayQuitFlag;
|
||||||
|
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
#define BETA 0
|
#define BETA 0
|
||||||
|
@ -1819,7 +1822,7 @@ TitleLevel(void)
|
||||||
//MNU_CheckForMenusAnyKey();
|
//MNU_CheckForMenusAnyKey();
|
||||||
}
|
}
|
||||||
|
|
||||||
//if (UsingMenus)
|
//if (M_Active())
|
||||||
// MNU_DrawMenu();
|
// MNU_DrawMenu();
|
||||||
|
|
||||||
//drawscreen as fast as you can
|
//drawscreen as fast as you can
|
||||||
|
@ -1941,7 +1944,8 @@ void MenuLevel(void)
|
||||||
if (FinishAnim)
|
if (FinishAnim)
|
||||||
{
|
{
|
||||||
inputState.ClearKeyStatus(sc_Escape);
|
inputState.ClearKeyStatus(sc_Escape);
|
||||||
ControlPanelType = ct_ordermenu;
|
M_StartControlPanel(false);
|
||||||
|
M_SetMenu(NAME_CreditsMenu);
|
||||||
FinishAnim = 0;
|
FinishAnim = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1960,7 +1964,6 @@ void MenuLevel(void)
|
||||||
if (totalclock >= ototalclock + synctics)
|
if (totalclock >= ototalclock + synctics)
|
||||||
{
|
{
|
||||||
ototalclock += synctics;
|
ototalclock += synctics;
|
||||||
MNU_CheckForMenusAnyKey();
|
|
||||||
if (CommEnabled)
|
if (CommEnabled)
|
||||||
getpackets();
|
getpackets();
|
||||||
}
|
}
|
||||||
|
@ -1998,10 +2001,9 @@ void MenuLevel(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
// force the use of menus at all time
|
// force the use of menus at all time
|
||||||
if (!UsingMenus && !ConPanel)
|
if (!M_Active() && !ConPanel)
|
||||||
{
|
{
|
||||||
inputState.SetKeyStatus(sc_Escape);
|
inputState.SetKeyStatus(sc_Escape);
|
||||||
MNU_CheckForMenusAnyKey();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// must lock the clock for drawing so animations will happen
|
// must lock the clock for drawing so animations will happen
|
||||||
|
@ -2010,9 +2012,6 @@ void MenuLevel(void)
|
||||||
//drawscreen as fast as you can
|
//drawscreen as fast as you can
|
||||||
DrawMenuLevelScreen();
|
DrawMenuLevelScreen();
|
||||||
|
|
||||||
if (UsingMenus)
|
|
||||||
MNU_DrawMenu();
|
|
||||||
|
|
||||||
videoNextPage();
|
videoNextPage();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2020,8 +2019,7 @@ void MenuLevel(void)
|
||||||
//LoadGameOutsideMoveLoop = FALSE;
|
//LoadGameOutsideMoveLoop = FALSE;
|
||||||
inputState.ClearKeyStatus(sc_Escape);
|
inputState.ClearKeyStatus(sc_Escape);
|
||||||
inputState.ClearKeysDown();
|
inputState.ClearKeysDown();
|
||||||
//ExitMenus();
|
M_ClearMenus();
|
||||||
UsingMenus = FALSE;
|
|
||||||
InMenuLevel = FALSE;
|
InMenuLevel = FALSE;
|
||||||
videoClearViewableArea(0L);
|
videoClearViewableArea(0L);
|
||||||
videoNextPage();
|
videoNextPage();
|
||||||
|
@ -2270,7 +2268,7 @@ void BonusScreen(PLAYERp pp)
|
||||||
rotatesprite(0, 0, RS_SCALE, 0, 5120, 0, 0, TITLE_ROT_FLAGS, 0, 0, xdim - 1, ydim - 1);
|
rotatesprite(0, 0, RS_SCALE, 0, 5120, 0, 0, TITLE_ROT_FLAGS, 0, 0, xdim - 1, ydim - 1);
|
||||||
rotatesprite(158<<16, 86<<16, RS_SCALE, 0, State->Pic, 0, 0, TITLE_ROT_FLAGS, 0, 0, xdim - 1, ydim - 1);
|
rotatesprite(158<<16, 86<<16, RS_SCALE, 0, State->Pic, 0, 0, TITLE_ROT_FLAGS, 0, 0, xdim - 1, ydim - 1);
|
||||||
videoNextPage();
|
videoNextPage();
|
||||||
FadeIn(0,0);
|
//FadeIn(0,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
BonusDone = FALSE;
|
BonusDone = FALSE;
|
||||||
|
@ -2375,7 +2373,7 @@ void BonusScreen(PLAYERp pp)
|
||||||
void EndGameSequence(void)
|
void EndGameSequence(void)
|
||||||
{
|
{
|
||||||
SWBOOL anim_ok = TRUE;
|
SWBOOL anim_ok = TRUE;
|
||||||
FadeOut(0, 5);
|
//FadeOut(0, 5);
|
||||||
|
|
||||||
if ((adult_lockout || Global_PLock) && FinishAnim == ANIM_SUMO)
|
if ((adult_lockout || Global_PLock) && FinishAnim == ANIM_SUMO)
|
||||||
anim_ok = FALSE;
|
anim_ok = FALSE;
|
||||||
|
@ -2442,7 +2440,7 @@ void StatScreen(PLAYERp mpp)
|
||||||
// No stats in bot games
|
// No stats in bot games
|
||||||
//if (BotMode) return;
|
//if (BotMode) return;
|
||||||
|
|
||||||
ResetPalette(mpp);
|
//ResetPalette(mpp);
|
||||||
COVER_SetReverb(0); // Reset reverb
|
COVER_SetReverb(0); // Reset reverb
|
||||||
StopSound();
|
StopSound();
|
||||||
|
|
||||||
|
@ -2628,7 +2626,7 @@ void Control()
|
||||||
InitGame();
|
InitGame();
|
||||||
|
|
||||||
MONO_PRINT("InitGame done");
|
MONO_PRINT("InitGame done");
|
||||||
MNU_InitMenus();
|
//MNU_InitMenus();
|
||||||
InGame = TRUE;
|
InGame = TRUE;
|
||||||
GameIntro();
|
GameIntro();
|
||||||
|
|
||||||
|
@ -2744,9 +2742,6 @@ void MoveLoop(void)
|
||||||
// demosync_record();
|
// demosync_record();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!InputMode && !PauseKeySet)
|
|
||||||
MNU_CheckForMenus();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -3179,150 +3174,7 @@ void ManualPlayerDelete(PLAYERp cur_pp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if DEBUG
|
|
||||||
void SinglePlayInput(PLAYERp pp)
|
|
||||||
{
|
|
||||||
int pnum = myconnectindex;
|
|
||||||
uint8_t* kp;
|
|
||||||
|
|
||||||
if (buttonMap.ButtonDown(gamefunc_See_Co_Op_View) && !UsingMenus && !ConPanel && dimensionmode == 3)
|
|
||||||
{
|
|
||||||
short oldscreenpeek = screenpeek;
|
|
||||||
|
|
||||||
buttonMap.ClearButton(gamefunc_See_Co_Op_View);
|
|
||||||
|
|
||||||
screenpeek = connectpoint2[screenpeek];
|
|
||||||
|
|
||||||
if (screenpeek < 0)
|
|
||||||
screenpeek = connecthead;
|
|
||||||
|
|
||||||
if (dimensionmode == 2 || dimensionmode == 5 || dimensionmode == 6)
|
|
||||||
setup2dscreen();
|
|
||||||
|
|
||||||
if (dimensionmode != 2)
|
|
||||||
{
|
|
||||||
PLAYERp tp;
|
|
||||||
|
|
||||||
tp = Player + screenpeek;
|
|
||||||
PlayerUpdatePanelInfo(tp);
|
|
||||||
setpalettefade(0,0,0,0);
|
|
||||||
memcpy(pp->temp_pal, palette_data, sizeof(palette_data));
|
|
||||||
DoPlayerDivePalette(tp);
|
|
||||||
DoPlayerNightVisionPalette(tp);
|
|
||||||
// printf("SingPlayInput set_pal: tp->PlayerSprite = %d\n",tp->PlayerSprite);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void DebugKeys(PLAYERp pp)
|
|
||||||
{
|
|
||||||
short w, h;
|
|
||||||
|
|
||||||
if (!(inputState.GetKeyStatus(KEYSC_ALT) || inputState.GetKeyStatus(KEYSC_RALT)))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (InputMode)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (CommEnabled)
|
|
||||||
return;
|
|
||||||
|
|
||||||
//
|
|
||||||
// visiblity adjust
|
|
||||||
//
|
|
||||||
|
|
||||||
if (inputState.GetKeyStatus(KEYSC_L) > 0)
|
|
||||||
{
|
|
||||||
if (inputState.GetKeyStatus(KEYSC_LSHIFT) | inputState.GetKeyStatus(KEYSC_RSHIFT)) // SHIFT
|
|
||||||
{
|
|
||||||
g_visibility = g_visibility - (g_visibility >> 3);
|
|
||||||
|
|
||||||
if (g_visibility < 128)
|
|
||||||
g_visibility = 16348;
|
|
||||||
|
|
||||||
//if (g_visibility > 16384)
|
|
||||||
// g_visibility = 128;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
inputState.GetKeyStatus(KEYSC_L) = 0;
|
|
||||||
|
|
||||||
g_visibility = g_visibility - (g_visibility >> 3);
|
|
||||||
|
|
||||||
if (g_visibility > 16384)
|
|
||||||
g_visibility = 128;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// parallax changes
|
|
||||||
//
|
|
||||||
|
|
||||||
if (inputState.GetKeyStatus(KEYSC_X))
|
|
||||||
{
|
|
||||||
if (inputState.GetKeyStatus(KEYSC_LSHIFT))
|
|
||||||
{
|
|
||||||
inputState.GetKeyStatus(KEYSC_LSHIFT) = FALSE;
|
|
||||||
inputState.GetKeyStatus(KEYSC_X) = 0;
|
|
||||||
|
|
||||||
parallaxyoffs_override += 10;
|
|
||||||
|
|
||||||
if (parallaxyoffs_override > 100)
|
|
||||||
parallaxyoffs_override = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
inputState.GetKeyStatus(KEYSC_X) = 0;
|
|
||||||
parallaxtype++;
|
|
||||||
if (parallaxtype > 2)
|
|
||||||
parallaxtype = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void ConKey(void)
|
|
||||||
{
|
|
||||||
#if DEBUG
|
|
||||||
// Console Input Panel
|
|
||||||
if (!ConPanel && dimensionmode == 3)
|
|
||||||
{
|
|
||||||
//if (inputState.GetKeyStatus(KEYSC_TILDE) && inputState.GetKeyStatus(KEYSC_LSHIFT))
|
|
||||||
if (inputState.GetKeyStatus(KEYSC_TILDE))
|
|
||||||
{
|
|
||||||
inputState.GetKeyStatus(KEYSC_TILDE) = FALSE;
|
|
||||||
//inputState.GetKeyStatus(KEYSC_LSHIFT) = FALSE;
|
|
||||||
inputState.keyFlushChars();
|
|
||||||
ConPanel = TRUE;
|
|
||||||
InputMode = TRUE;
|
|
||||||
ConInputMode = TRUE;
|
|
||||||
if (!CommEnabled)
|
|
||||||
GamePaused = TRUE;
|
|
||||||
memset(MessageInputString, '\0', sizeof(MessageInputString));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (ConPanel)
|
|
||||||
{
|
|
||||||
//if (inputState.GetKeyStatus(KEYSC_TILDE) && inputState.GetKeyStatus(KEYSC_LSHIFT))
|
|
||||||
if (inputState.GetKeyStatus(KEYSC_TILDE))
|
|
||||||
{
|
|
||||||
inputState.GetKeyStatus(KEYSC_TILDE) = FALSE;
|
|
||||||
//inputState.GetKeyStatus(KEYSC_LSHIFT) = FALSE;
|
|
||||||
inputState.keyFlushChars();
|
|
||||||
ConPanel = FALSE;
|
|
||||||
ConInputMode = FALSE;
|
|
||||||
InputMode = FALSE;
|
|
||||||
if (!CommEnabled)
|
|
||||||
GamePaused = FALSE;
|
|
||||||
memset(MessageInputString, '\0', sizeof(MessageInputString));
|
|
||||||
SetFragBar(Player + myconnectindex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
char WangBangMacro[10][64];
|
char WangBangMacro[10][64];
|
||||||
|
|
||||||
|
@ -3398,47 +3250,10 @@ FunctionKeys(PLAYERp pp)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (numplayers <= 1)
|
|
||||||
{
|
|
||||||
// F2 save menu
|
|
||||||
if (inputState.GetKeyStatus(KEYSC_F2))
|
|
||||||
{
|
|
||||||
inputState.ClearKeyStatus(KEYSC_F2);
|
|
||||||
if (!TEST(pp->Flags, PF_DEAD))
|
|
||||||
{
|
|
||||||
inputState.SetKeyStatus(sc_Escape);
|
|
||||||
ControlPanelType = ct_savemenu;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// F3 load menu
|
|
||||||
if (inputState.GetKeyStatus(KEYSC_F3))
|
|
||||||
{
|
|
||||||
inputState.ClearKeyStatus(KEYSC_F3);
|
|
||||||
if (!TEST(pp->Flags, PF_DEAD))
|
|
||||||
{
|
|
||||||
inputState.SetKeyStatus(sc_Escape);
|
|
||||||
ControlPanelType = ct_loadmenu;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// F4 sound menu
|
|
||||||
if (inputState.GetKeyStatus(KEYSC_F4))
|
|
||||||
{
|
|
||||||
inputState.ClearKeyStatus(KEYSC_F4);
|
|
||||||
inputState.SetKeyStatus(sc_Escape);
|
|
||||||
ControlPanelType = ct_soundmenu;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// F7 VIEW control
|
// F7 VIEW control
|
||||||
if (inputState.GetKeyStatus(KEYSC_F7))
|
if (buttonMap.ButtonDown(gamefunc_Third_Person_View))
|
||||||
{
|
{
|
||||||
inputState.ClearKeyStatus(KEYSC_F7);
|
buttonMap.ClearButton(gamefunc_Third_Person_View);
|
||||||
|
|
||||||
if (inputState.GetKeyStatus(KEYSC_LSHIFT) || inputState.GetKeyStatus(KEYSC_RSHIFT))
|
if (inputState.GetKeyStatus(KEYSC_LSHIFT) || inputState.GetKeyStatus(KEYSC_RSHIFT))
|
||||||
{
|
{
|
||||||
|
@ -3459,33 +3274,6 @@ FunctionKeys(PLAYERp pp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// F8 toggle messages
|
|
||||||
if (inputState.GetKeyStatus(KEYSC_F8))
|
|
||||||
{
|
|
||||||
inputState.ClearKeyStatus(KEYSC_F8);
|
|
||||||
|
|
||||||
hud_messages = !hud_messages;
|
|
||||||
|
|
||||||
if (hud_messages)
|
|
||||||
PutStringInfoLine(pp, "Messages ON");
|
|
||||||
else
|
|
||||||
PutStringInfoLine(pp, "Messages OFF");
|
|
||||||
}
|
|
||||||
|
|
||||||
// F10 quit menu
|
|
||||||
if (inputState.GetKeyStatus(KEYSC_F10))
|
|
||||||
{
|
|
||||||
inputState.ClearKeyStatus(KEYSC_F10);
|
|
||||||
inputState.SetKeyStatus(sc_Escape);
|
|
||||||
ControlPanelType = ct_quitmenu;
|
|
||||||
}
|
|
||||||
|
|
||||||
// F11 gamma correction
|
|
||||||
if (inputState.GetKeyStatus(KEYSC_F11) > 0)
|
|
||||||
{
|
|
||||||
inputState.ClearKeyStatus(KEYSC_F11);
|
|
||||||
// Do this entirely in the video backend.
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3494,7 +3282,7 @@ void PauseKey(PLAYERp pp)
|
||||||
extern SWBOOL GamePaused,CheatInputMode;
|
extern SWBOOL GamePaused,CheatInputMode;
|
||||||
extern SWBOOL enabled;
|
extern SWBOOL enabled;
|
||||||
|
|
||||||
if (inputState.GetKeyStatus(sc_Pause) && !CommEnabled && !InputMode && !UsingMenus && !CheatInputMode && !ConPanel)
|
if (inputState.GetKeyStatus(sc_Pause) && !CommEnabled && !InputMode && !M_Active() && !CheatInputMode && !ConPanel)
|
||||||
{
|
{
|
||||||
inputState.ClearKeyStatus(sc_Pause);
|
inputState.ClearKeyStatus(sc_Pause);
|
||||||
|
|
||||||
|
@ -3566,6 +3354,7 @@ void GetMessageInput(PLAYERp pp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#if 0 // the message input needs to be moved out of the game code!
|
||||||
else if (MessageInputMode && !ConInputMode)
|
else if (MessageInputMode && !ConInputMode)
|
||||||
{
|
{
|
||||||
if (gs.BorderNum > BORDER_BAR+1)
|
if (gs.BorderNum > BORDER_BAR+1)
|
||||||
|
@ -3687,141 +3476,7 @@ SEND_MESSAGE:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
#endif
|
||||||
|
|
||||||
void GetConInput(PLAYERp pp)
|
|
||||||
{
|
|
||||||
int pnum = myconnectindex;
|
|
||||||
short w,h;
|
|
||||||
static SWBOOL cur_show;
|
|
||||||
|
|
||||||
if (MessageInputMode || HelpInputMode)
|
|
||||||
return;
|
|
||||||
|
|
||||||
ConKey();
|
|
||||||
|
|
||||||
// Console input commands
|
|
||||||
if (ConInputMode && !MessageInputMode)
|
|
||||||
{
|
|
||||||
// get input
|
|
||||||
switch (MNU_InputSmallString(MessageInputString, 250))
|
|
||||||
{
|
|
||||||
case -1: // Cancel Input (pressed ESC) or Err
|
|
||||||
InputMode = FALSE;
|
|
||||||
inputState.ClearKeysDown();
|
|
||||||
inputState.keyFlushChars();
|
|
||||||
memset(MessageInputString, '\0', sizeof(MessageInputString));
|
|
||||||
break;
|
|
||||||
case FALSE: // Input finished (RETURN)
|
|
||||||
if (MessageInputString[0] == '\0')
|
|
||||||
{
|
|
||||||
InputMode = FALSE;
|
|
||||||
inputState.ClearKeysDown();
|
|
||||||
inputState.keyFlushChars();
|
|
||||||
buttonMap.ClearButton(gamefunc_Inventory);
|
|
||||||
memset(MessageInputString, '\0', sizeof(MessageInputString));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
InputMode = FALSE;
|
|
||||||
inputState.ClearKeysDown();
|
|
||||||
inputState.keyFlushChars();
|
|
||||||
buttonMap.ClearButton(gamefunc_Inventory);
|
|
||||||
CON_ConMessage("%s", MessageInputString);
|
|
||||||
CON_ProcessUserCommand(); // Check to see if it's a cheat or command
|
|
||||||
|
|
||||||
conbot += 6;
|
|
||||||
conbotgoal = conbot;
|
|
||||||
//addconquote(MessageInputString);
|
|
||||||
// Clear it out after every entry
|
|
||||||
memset(MessageInputString, '\0', sizeof(MessageInputString));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case TRUE: // Got input
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void GetHelpInput(PLAYERp pp)
|
|
||||||
{
|
|
||||||
extern SWBOOL GamePaused;
|
|
||||||
|
|
||||||
if (inputState.GetKeyStatus(KEYSC_ALT) || inputState.GetKeyStatus(KEYSC_RALT))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (inputState.GetKeyStatus(KEYSC_LSHIFT) || inputState.GetKeyStatus(KEYSC_RSHIFT))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (MessageInputMode || ConInputMode)
|
|
||||||
return;
|
|
||||||
|
|
||||||
// F1 help menu
|
|
||||||
if (!HelpInputMode)
|
|
||||||
{
|
|
||||||
if (inputState.GetKeyStatus(KEYSC_F1))
|
|
||||||
{
|
|
||||||
inputState.ClearKeyStatus(KEYSC_F11);
|
|
||||||
HelpPage = 0;
|
|
||||||
HelpInputMode = TRUE;
|
|
||||||
PanelUpdateMode = FALSE;
|
|
||||||
InputMode = TRUE;
|
|
||||||
if (!CommEnabled)
|
|
||||||
GamePaused = TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (HelpInputMode)
|
|
||||||
{
|
|
||||||
if (inputState.GetKeyStatus(KEYSC_ESC))
|
|
||||||
{
|
|
||||||
inputState.ClearKeyStatus(sc_Escape);
|
|
||||||
inputState.ClearKeysDown();
|
|
||||||
PanelUpdateMode = TRUE;
|
|
||||||
HelpInputMode = FALSE;
|
|
||||||
InputMode = FALSE;
|
|
||||||
if (!CommEnabled)
|
|
||||||
GamePaused = FALSE;
|
|
||||||
SetRedrawScreen(pp);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (inputState.GetKeyStatus(KEYSC_SPACE) || inputState.GetKeyStatus(KEYSC_ENTER) || inputState.GetKeyStatus(KEYSC_PGDN) || inputState.GetKeyStatus(KEYSC_DOWN) || inputState.GetKeyStatus(KEYSC_RIGHT) || inputState.GetKeyStatus(sc_kpad_3) || inputState.GetKeyStatus(sc_kpad_2) || inputState.GetKeyStatus(sc_kpad_6))
|
|
||||||
{
|
|
||||||
inputState.ClearKeyStatus(KEYSC_SPACE);
|
|
||||||
inputState.ClearKeyStatus(KEYSC_ENTER);
|
|
||||||
inputState.ClearKeyStatus(KEYSC_PGDN);
|
|
||||||
inputState.ClearKeyStatus(KEYSC_DOWN);
|
|
||||||
inputState.ClearKeyStatus(KEYSC_RIGHT);
|
|
||||||
inputState.ClearKeyStatus(sc_kpad_3);
|
|
||||||
inputState.ClearKeyStatus(sc_kpad_2);
|
|
||||||
inputState.ClearKeyStatus(sc_kpad_6);
|
|
||||||
|
|
||||||
HelpPage++;
|
|
||||||
if (HelpPage >= (int)SIZ(HelpPagePic))
|
|
||||||
// CTW MODIFICATION
|
|
||||||
// "Oops! I did it again..."
|
|
||||||
// HelpPage = SIZ(HelpPagePic) - 1;
|
|
||||||
HelpPage = 0;
|
|
||||||
// CTW MODIFICATION END
|
|
||||||
}
|
|
||||||
|
|
||||||
if (inputState.GetKeyStatus(KEYSC_PGUP) || inputState.GetKeyStatus(KEYSC_UP) || inputState.GetKeyStatus(KEYSC_LEFT) || inputState.GetKeyStatus(sc_kpad_9) || inputState.GetKeyStatus(sc_kpad_8) || inputState.GetKeyStatus(sc_kpad_4))
|
|
||||||
{
|
|
||||||
inputState.ClearKeyStatus(KEYSC_PGUP);
|
|
||||||
inputState.ClearKeyStatus(KEYSC_UP);
|
|
||||||
inputState.ClearKeyStatus(KEYSC_LEFT);
|
|
||||||
inputState.ClearKeyStatus(sc_kpad_8);
|
|
||||||
inputState.ClearKeyStatus(sc_kpad_9);
|
|
||||||
inputState.ClearKeyStatus(sc_kpad_4);
|
|
||||||
|
|
||||||
HelpPage--;
|
|
||||||
if (HelpPage < 0)
|
|
||||||
// CTW MODIFICATION
|
|
||||||
// "Played with the logic, got lost in the game..."
|
|
||||||
HelpPage = SIZ(HelpPagePic) - 1;
|
|
||||||
// CTW MODIFICATION END
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
short MirrorDelay;
|
short MirrorDelay;
|
||||||
|
@ -3920,11 +3575,9 @@ void getinput(SW_PACKET *loc)
|
||||||
if (PauseKeySet)
|
if (PauseKeySet)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!MenuInputMode && !UsingMenus)
|
if (!M_Active())
|
||||||
{
|
{
|
||||||
GetMessageInput(pp);
|
GetMessageInput(pp);
|
||||||
GetConInput(pp);
|
|
||||||
GetHelpInput(pp);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// MAP KEY
|
// MAP KEY
|
||||||
|
@ -3968,8 +3621,8 @@ void getinput(SW_PACKET *loc)
|
||||||
if (ScrollMode2D && pp == Player + myconnectindex && !Prediction)
|
if (ScrollMode2D && pp == Player + myconnectindex && !Prediction)
|
||||||
MoveScrollMode2D(Player + myconnectindex);
|
MoveScrollMode2D(Player + myconnectindex);
|
||||||
|
|
||||||
// !JIM! Added UsingMenus so that you don't move at all while using menus
|
// !JIM! Added M_Active() so that you don't move at all while using menus
|
||||||
if (MenuInputMode || UsingMenus || ScrollMode2D || InputMode)
|
if (M_Active() || ScrollMode2D || InputMode)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
SET_LOC_KEY(loc->bits, SK_SPACE_BAR, ((!!inputState.GetKeyStatus(KEYSC_SPACE)) | buttonMap.ButtonDown(gamefunc_Open)));
|
SET_LOC_KEY(loc->bits, SK_SPACE_BAR, ((!!inputState.GetKeyStatus(KEYSC_SPACE)) | buttonMap.ButtonDown(gamefunc_Open)));
|
||||||
|
@ -4097,12 +3750,15 @@ void getinput(SW_PACKET *loc)
|
||||||
|
|
||||||
if (!CommEnabled)
|
if (!CommEnabled)
|
||||||
{
|
{
|
||||||
|
// What a mess...:?
|
||||||
|
#if 0
|
||||||
if (MenuButtonAutoAim)
|
if (MenuButtonAutoAim)
|
||||||
{
|
{
|
||||||
MenuButtonAutoAim = FALSE;
|
MenuButtonAutoAim = FALSE;
|
||||||
if ((!!TEST(pp->Flags, PF_AUTO_AIM)) != !!cl_autoaim)
|
if ((!!TEST(pp->Flags, PF_AUTO_AIM)) != !!cl_autoaim)
|
||||||
SET_LOC_KEY(loc->bits, SK_AUTO_AIM, TRUE);
|
SET_LOC_KEY(loc->bits, SK_AUTO_AIM, TRUE);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else if (inputState.GetKeyStatus(sc_Pause))
|
else if (inputState.GetKeyStatus(sc_Pause))
|
||||||
{
|
{
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -32,8 +32,15 @@ Prepared for public release: 03/28/2005 - Charlie Wiederhold, 3D Realms
|
||||||
|
|
||||||
BEGIN_SW_NS
|
BEGIN_SW_NS
|
||||||
|
|
||||||
#define MENU_SHADE_DEFAULT 0
|
void MNU_MeasureString(const char* string, short* w, short* h);
|
||||||
#define MENU_SHADE_INACTIVE 20
|
void MNU_DrawString(short x, short y, const char* string, short shade, short pal);
|
||||||
|
void MNU_MeasureSmallString(const char* string, short* w, short* h);
|
||||||
|
void MNU_DrawSmallString(short x, short y, const char* string, short shade, short pal);
|
||||||
|
void MNU_MeasureStringLarge(const char* string, short* w, short* h);
|
||||||
|
void MNU_DrawStringLarge(short x, short y, const char* string, int shade = 0);
|
||||||
|
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
|
@ -56,12 +63,6 @@ void MNU_DrawMenu(void); // This is used in drawscreen to refresh menus in
|
||||||
// multiplay situations.
|
// multiplay situations.
|
||||||
void MNU_CheckForMenus(void);
|
void MNU_CheckForMenus(void);
|
||||||
void MNU_CheckForMenusAnyKey(void);
|
void MNU_CheckForMenusAnyKey(void);
|
||||||
void MNU_MeasureString(const char *string, short *w, short *h);
|
|
||||||
void MNU_DrawString(short x, short y, const char *string, short shade, short pal);
|
|
||||||
void MNU_MeasureSmallString(const char *string,short *w,short *h);
|
|
||||||
void MNU_DrawSmallString(short x,short y,const char *string,short shade,short pal);
|
|
||||||
void MNU_MeasureStringLarge(const char *string, short *w, short *h);
|
|
||||||
void MNU_DrawStringLarge(short x, short y, const char *string);
|
|
||||||
|
|
||||||
// Functions from my other engine
|
// Functions from my other engine
|
||||||
//void Get_Palette (unsigned char *pal);
|
//void Get_Palette (unsigned char *pal);
|
||||||
|
@ -75,7 +76,6 @@ void ExitMenus(void);
|
||||||
void ResetMenuInput(void);
|
void ResetMenuInput(void);
|
||||||
|
|
||||||
extern SWBOOL BorderAdjust;
|
extern SWBOOL BorderAdjust;
|
||||||
extern SWBOOL MultiPlayQuitFlag;
|
|
||||||
|
|
||||||
// Make memcpy an intrinsic function for an easy frame rate boost
|
// Make memcpy an intrinsic function for an easy frame rate boost
|
||||||
//#pragma intrinsic( memcpy );
|
//#pragma intrinsic( memcpy );
|
||||||
|
@ -93,8 +93,6 @@ extern SWBOOL MultiPlayQuitFlag;
|
||||||
#define M_CX2 319
|
#define M_CX2 319
|
||||||
#define M_CY2 199
|
#define M_CY2 199
|
||||||
|
|
||||||
#define MZ 65536
|
|
||||||
|
|
||||||
#define asc_Esc 27
|
#define asc_Esc 27
|
||||||
#define asc_Enter 13
|
#define asc_Enter 13
|
||||||
#define asc_Space 32
|
#define asc_Space 32
|
||||||
|
@ -335,6 +333,8 @@ typedef struct
|
||||||
int x,y;
|
int x,y;
|
||||||
} VMODE;
|
} VMODE;
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
END_SW_NS
|
END_SW_NS
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1497,7 +1497,6 @@ getpackets(void)
|
||||||
NewGame = TRUE;
|
NewGame = TRUE;
|
||||||
// restart demo for multi-play mode
|
// restart demo for multi-play mode
|
||||||
DemoInitOnce = FALSE;
|
DemoInitOnce = FALSE;
|
||||||
ResetMenuInput();
|
|
||||||
|
|
||||||
// send a dummy packet to see when it arrives
|
// send a dummy packet to see when it arrives
|
||||||
//tempbuf[0] = PACKET_TYPE_DUMMY;
|
//tempbuf[0] = PACKET_TYPE_DUMMY;
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
#pragma once
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
/*
|
/*
|
||||||
Copyright (C) 1997, 2005 - 3D Realms Entertainment
|
Copyright (C) 1997, 2005 - 3D Realms Entertainment
|
||||||
|
|
|
@ -44,6 +44,7 @@ Prepared for public release: 03/28/2005 - Charlie Wiederhold, 3D Realms
|
||||||
|
|
||||||
#include "weapon.h"
|
#include "weapon.h"
|
||||||
#include "fx_man.h"
|
#include "fx_man.h"
|
||||||
|
#include "menu/menu.h"
|
||||||
|
|
||||||
BEGIN_SW_NS
|
BEGIN_SW_NS
|
||||||
|
|
||||||
|
@ -67,7 +68,6 @@ int InitFistAttack(PLAYERp pp);
|
||||||
//#define UK_VERSION TRUE
|
//#define UK_VERSION TRUE
|
||||||
|
|
||||||
#define PANF_UZI_XFLIP (BIT(21))
|
#define PANF_UZI_XFLIP (BIT(21))
|
||||||
extern SWBOOL UsingMenus;
|
|
||||||
|
|
||||||
#define XDIM 320
|
#define XDIM 320
|
||||||
#define YDIM 200
|
#define YDIM 200
|
||||||
|
@ -775,7 +775,7 @@ void PlayerUpdatePanelInfo(PLAYERp pp)
|
||||||
if (Prediction)
|
if (Prediction)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (UsingMenus)
|
if (M_Active())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
PlayerUpdateHealth(pp, 0);
|
PlayerUpdateHealth(pp, 0);
|
||||||
|
|
|
@ -65,6 +65,7 @@ Prepared for public release: 03/28/2005 - Charlie Wiederhold, 3D Realms
|
||||||
#include "vis.h"
|
#include "vis.h"
|
||||||
#include "track.h"
|
#include "track.h"
|
||||||
#include "interp.h"
|
#include "interp.h"
|
||||||
|
#include "menu/menu.h"
|
||||||
|
|
||||||
BEGIN_SW_NS
|
BEGIN_SW_NS
|
||||||
|
|
||||||
|
@ -2414,7 +2415,7 @@ MoveScrollMode2D(PLAYERp pp)
|
||||||
|
|
||||||
mfsvel = mfvel = 0;
|
mfsvel = mfvel = 0;
|
||||||
|
|
||||||
if (MenuInputMode || UsingMenus)
|
if (M_Active())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Recenter view if told
|
// Recenter view if told
|
||||||
|
@ -2476,7 +2477,7 @@ MoveScrollMode2D(PLAYERp pp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!UsingMenus && !HelpInputMode && !ConPanel)
|
if (!M_Active() && !HelpInputMode && !ConPanel)
|
||||||
{
|
{
|
||||||
if (buttonMap.ButtonDown(gamefunc_Move_Forward))
|
if (buttonMap.ButtonDown(gamefunc_Move_Forward))
|
||||||
{
|
{
|
||||||
|
@ -2520,8 +2521,17 @@ MoveScrollMode2D(PLAYERp pp)
|
||||||
void
|
void
|
||||||
DoPlayerMenuKeys(PLAYERp pp)
|
DoPlayerMenuKeys(PLAYERp pp)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (!CommEnabled)
|
if (!CommEnabled)
|
||||||
{
|
{
|
||||||
|
// Go back to the source to set this - the old code here was catastrophically bad.
|
||||||
|
// this needs to be fixed properly - as it is this can never be compatible with demo playback.
|
||||||
|
if (cl_autoaim)
|
||||||
|
SET(Player[myconnectindex].Flags, PF_AUTO_AIM);
|
||||||
|
else
|
||||||
|
RESET(Player[myconnectindex].Flags, PF_AUTO_AIM);
|
||||||
|
|
||||||
|
#if 0
|
||||||
if (TEST_SYNC_KEY((pp), SK_AUTO_AIM))
|
if (TEST_SYNC_KEY((pp), SK_AUTO_AIM))
|
||||||
{
|
{
|
||||||
if (FLAG_KEY_PRESSED(pp, SK_AUTO_AIM))
|
if (FLAG_KEY_PRESSED(pp, SK_AUTO_AIM))
|
||||||
|
@ -2532,6 +2542,7 @@ DoPlayerMenuKeys(PLAYERp pp)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
FLAG_KEY_RESET(pp, SK_AUTO_AIM);
|
FLAG_KEY_RESET(pp, SK_AUTO_AIM);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7660,7 +7671,7 @@ void ChopsCheck(PLAYERp pp)
|
||||||
extern SWBOOL HelpInputMode;
|
extern SWBOOL HelpInputMode;
|
||||||
extern int ChopTics;
|
extern int ChopTics;
|
||||||
|
|
||||||
if (!UsingMenus && !HelpInputMode && !TEST(pp->Flags, PF_DEAD) && !pp->sop_riding && numplayers <= 1)
|
if (!M_Active() && !HelpInputMode && !TEST(pp->Flags, PF_DEAD) && !pp->sop_riding && numplayers <= 1)
|
||||||
{
|
{
|
||||||
if ((pp->input.bits|pp->input.vel|pp->input.svel|pp->input.angvel|pp->input.aimvel) ||
|
if ((pp->input.bits|pp->input.vel|pp->input.svel|pp->input.angvel|pp->input.aimvel) ||
|
||||||
TEST(pp->Flags, PF_CLIMBING|PF_FALLING|PF_DIVING))
|
TEST(pp->Flags, PF_CLIMBING|PF_FALLING|PF_DIVING))
|
||||||
|
|
|
@ -50,6 +50,7 @@ Prepared for public release: 03/28/2005 - Charlie Wiederhold, 3D Realms
|
||||||
#include "rts.h"
|
#include "rts.h"
|
||||||
#include "menus.h"
|
#include "menus.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
#include "menu/menu.h"
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include "sdlayer.h"
|
#include "sdlayer.h"
|
||||||
|
@ -797,7 +798,7 @@ int PlaySound(int num, int *x, int *y, int *z, Voc3D_Flags flags)
|
||||||
|
|
||||||
|
|
||||||
// Don't play game sounds when in menus
|
// Don't play game sounds when in menus
|
||||||
//if (UsingMenus && (*x!=0 || *y!=0 || *z!=0)) return(-1);
|
//if (M_Active() && (*x!=0 || *y!=0 || *z!=0)) return(-1);
|
||||||
|
|
||||||
// Weed out parental lock sounds if PLock is active
|
// Weed out parental lock sounds if PLock is active
|
||||||
if (adult_lockout || Global_PLock)
|
if (adult_lockout || Global_PLock)
|
||||||
|
@ -864,7 +865,7 @@ int PlaySound(int num, int *x, int *y, int *z, Voc3D_Flags flags)
|
||||||
|
|
||||||
// Assign voc to voc pointer
|
// Assign voc to voc pointer
|
||||||
vp = &voc[num];
|
vp = &voc[num];
|
||||||
if (UsingMenus && *x==0 && *y==0 && *z==0) // Menus sound outdo everything
|
if (M_Active() && *x==0 && *y==0 && *z==0) // Menus sound outdo everything
|
||||||
priority = 100;
|
priority = 100;
|
||||||
else
|
else
|
||||||
priority = vp->priority;
|
priority = vp->priority;
|
||||||
|
@ -1637,7 +1638,7 @@ DoUpdateSounds3D(void)
|
||||||
int i;
|
int i;
|
||||||
static SWBOOL MoveSkip8 = 0;
|
static SWBOOL MoveSkip8 = 0;
|
||||||
|
|
||||||
if (UsingMenus) return;
|
if (M_Active()) return;
|
||||||
|
|
||||||
// This function is already only call 10x per sec, this widdles it down even more!
|
// This function is already only call 10x per sec, this widdles it down even more!
|
||||||
MoveSkip8 = (MoveSkip8 + 1) & 15;
|
MoveSkip8 = (MoveSkip8 + 1) & 15;
|
||||||
|
|
Loading…
Reference in a new issue