mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2024-11-16 01:31:30 +00:00
Merge branch 'new-title-multi-res' into 'master'
2.2 Title Screen See merge request STJr/SRB2Internal!439
This commit is contained in:
commit
c2d09ac4e4
5 changed files with 1221 additions and 65 deletions
118
src/dehacked.c
118
src/dehacked.c
|
@ -2089,12 +2089,59 @@ static void readmenu(MYFILE *f, INT32 num)
|
||||||
menupres[num].bgcolor = get_number(word2);
|
menupres[num].bgcolor = get_number(word2);
|
||||||
titlechanged = true;
|
titlechanged = true;
|
||||||
}
|
}
|
||||||
else if (fastcmp(word, "HIDETITLEPICS") || fastcmp(word, "HIDEPICS"))
|
else if (fastcmp(word, "HIDETITLEPICS") || fastcmp(word, "HIDEPICS") || fastcmp(word, "TITLEPICSHIDE"))
|
||||||
{
|
{
|
||||||
// true by default, except MM_MAIN
|
// true by default, except MM_MAIN
|
||||||
menupres[num].hidetitlepics = (boolean)(value || word2[0] == 'T' || word2[0] == 'Y');
|
menupres[num].hidetitlepics = (boolean)(value || word2[0] == 'T' || word2[0] == 'Y');
|
||||||
titlechanged = true;
|
titlechanged = true;
|
||||||
}
|
}
|
||||||
|
else if (fastcmp(word, "TITLEPICSMODE"))
|
||||||
|
{
|
||||||
|
if (fastcmp(word2, "USER"))
|
||||||
|
menupres[num].ttmode = TTMODE_USER;
|
||||||
|
else if (fastcmp(word2, "ALACROIX"))
|
||||||
|
menupres[num].ttmode = TTMODE_ALACROIX;
|
||||||
|
else if (fastcmp(word2, "HIDE") || fastcmp(word2, "HIDDEN") || fastcmp(word2, "NONE"))
|
||||||
|
{
|
||||||
|
menupres[num].ttmode = TTMODE_USER;
|
||||||
|
menupres[num].ttname[0] = 0;
|
||||||
|
menupres[num].hidetitlepics = true;
|
||||||
|
}
|
||||||
|
else // if (fastcmp(word2, "OLD") || fastcmp(word2, "SSNTAILS"))
|
||||||
|
menupres[num].ttmode = TTMODE_OLD;
|
||||||
|
titlechanged = true;
|
||||||
|
}
|
||||||
|
else if (fastcmp(word, "TITLEPICSSCALE"))
|
||||||
|
{
|
||||||
|
// Don't handle Alacroix special case here; see Maincfg section.
|
||||||
|
menupres[num].ttscale = max(1, min(8, (UINT8)get_number(word2)));
|
||||||
|
titlechanged = true;
|
||||||
|
}
|
||||||
|
else if (fastcmp(word, "TITLEPICSNAME"))
|
||||||
|
{
|
||||||
|
strncpy(menupres[num].ttname, word2, 9);
|
||||||
|
titlechanged = true;
|
||||||
|
}
|
||||||
|
else if (fastcmp(word, "TITLEPICSX"))
|
||||||
|
{
|
||||||
|
menupres[num].ttx = (INT16)get_number(word2);
|
||||||
|
titlechanged = true;
|
||||||
|
}
|
||||||
|
else if (fastcmp(word, "TITLEPICSY"))
|
||||||
|
{
|
||||||
|
menupres[num].tty = (INT16)get_number(word2);
|
||||||
|
titlechanged = true;
|
||||||
|
}
|
||||||
|
else if (fastcmp(word, "TITLEPICSLOOP"))
|
||||||
|
{
|
||||||
|
menupres[num].ttloop = (INT16)get_number(word2);
|
||||||
|
titlechanged = true;
|
||||||
|
}
|
||||||
|
else if (fastcmp(word, "TITLEPICSTICS"))
|
||||||
|
{
|
||||||
|
menupres[num].tttics = (UINT16)get_number(word2);
|
||||||
|
titlechanged = true;
|
||||||
|
}
|
||||||
else if (fastcmp(word, "TITLESCROLLSPEED") || fastcmp(word, "TITLESCROLLXSPEED")
|
else if (fastcmp(word, "TITLESCROLLSPEED") || fastcmp(word, "TITLESCROLLXSPEED")
|
||||||
|| fastcmp(word, "SCROLLSPEED") || fastcmp(word, "SCROLLXSPEED"))
|
|| fastcmp(word, "SCROLLSPEED") || fastcmp(word, "SCROLLXSPEED"))
|
||||||
{
|
{
|
||||||
|
@ -3492,11 +3539,78 @@ static void readmaincfg(MYFILE *f)
|
||||||
titlemap = (INT16)value;
|
titlemap = (INT16)value;
|
||||||
titlechanged = true;
|
titlechanged = true;
|
||||||
}
|
}
|
||||||
else if (fastcmp(word, "HIDETITLEPICS"))
|
else if (fastcmp(word, "HIDETITLEPICS") || fastcmp(word, "TITLEPICSHIDE"))
|
||||||
{
|
{
|
||||||
hidetitlepics = (boolean)(value || word2[0] == 'T' || word2[0] == 'Y');
|
hidetitlepics = (boolean)(value || word2[0] == 'T' || word2[0] == 'Y');
|
||||||
titlechanged = true;
|
titlechanged = true;
|
||||||
}
|
}
|
||||||
|
else if (fastcmp(word, "TITLEPICSMODE"))
|
||||||
|
{
|
||||||
|
if (fastcmp(word2, "USER"))
|
||||||
|
ttmode = TTMODE_USER;
|
||||||
|
else if (fastcmp(word2, "ALACROIX"))
|
||||||
|
ttmode = TTMODE_ALACROIX;
|
||||||
|
else if (fastcmp(word2, "HIDE") || fastcmp(word2, "HIDDEN") || fastcmp(word2, "NONE"))
|
||||||
|
{
|
||||||
|
ttmode = TTMODE_USER;
|
||||||
|
ttname[0] = 0;
|
||||||
|
hidetitlepics = true;
|
||||||
|
}
|
||||||
|
else // if (fastcmp(word2, "OLD") || fastcmp(word2, "SSNTAILS"))
|
||||||
|
ttmode = TTMODE_OLD;
|
||||||
|
titlechanged = true;
|
||||||
|
}
|
||||||
|
else if (fastcmp(word, "TITLEPICSSCALE"))
|
||||||
|
{
|
||||||
|
ttscale = max(1, min(8, (UINT8)get_number(word2)));
|
||||||
|
titlechanged = true;
|
||||||
|
}
|
||||||
|
else if (fastcmp(word, "TITLEPICSSCALESAVAILABLE"))
|
||||||
|
{
|
||||||
|
// SPECIAL CASE for Alacroix: Comma-separated list of resolutions that are available
|
||||||
|
// for gfx loading.
|
||||||
|
ttavailable[0] = ttavailable[1] = ttavailable[2] = ttavailable[3] =\
|
||||||
|
ttavailable[4] = ttavailable[5] = false;
|
||||||
|
|
||||||
|
if (strstr(word2, "1") != NULL)
|
||||||
|
ttavailable[0] = true;
|
||||||
|
if (strstr(word2, "2") != NULL)
|
||||||
|
ttavailable[1] = true;
|
||||||
|
if (strstr(word2, "3") != NULL)
|
||||||
|
ttavailable[2] = true;
|
||||||
|
if (strstr(word2, "4") != NULL)
|
||||||
|
ttavailable[3] = true;
|
||||||
|
if (strstr(word2, "5") != NULL)
|
||||||
|
ttavailable[4] = true;
|
||||||
|
if (strstr(word2, "6") != NULL)
|
||||||
|
ttavailable[5] = true;
|
||||||
|
titlechanged = true;
|
||||||
|
}
|
||||||
|
else if (fastcmp(word, "TITLEPICSNAME"))
|
||||||
|
{
|
||||||
|
strncpy(ttname, word2, 9);
|
||||||
|
titlechanged = true;
|
||||||
|
}
|
||||||
|
else if (fastcmp(word, "TITLEPICSX"))
|
||||||
|
{
|
||||||
|
ttx = (INT16)get_number(word2);
|
||||||
|
titlechanged = true;
|
||||||
|
}
|
||||||
|
else if (fastcmp(word, "TITLEPICSY"))
|
||||||
|
{
|
||||||
|
tty = (INT16)get_number(word2);
|
||||||
|
titlechanged = true;
|
||||||
|
}
|
||||||
|
else if (fastcmp(word, "TITLEPICSLOOP"))
|
||||||
|
{
|
||||||
|
ttloop = (INT16)get_number(word2);
|
||||||
|
titlechanged = true;
|
||||||
|
}
|
||||||
|
else if (fastcmp(word, "TITLEPICSTICS"))
|
||||||
|
{
|
||||||
|
tttics = (UINT16)get_number(word2);
|
||||||
|
titlechanged = true;
|
||||||
|
}
|
||||||
else if (fastcmp(word, "TITLESCROLLSPEED") || fastcmp(word, "TITLESCROLLXSPEED"))
|
else if (fastcmp(word, "TITLESCROLLSPEED") || fastcmp(word, "TITLESCROLLXSPEED"))
|
||||||
{
|
{
|
||||||
titlescrollxspeed = get_number(word2);
|
titlescrollxspeed = get_number(word2);
|
||||||
|
|
994
src/f_finale.c
994
src/f_finale.c
File diff suppressed because it is too large
Load diff
|
@ -77,6 +77,28 @@ void F_ContinueDrawer(void);
|
||||||
extern INT32 titlescrollxspeed;
|
extern INT32 titlescrollxspeed;
|
||||||
extern INT32 titlescrollyspeed;
|
extern INT32 titlescrollyspeed;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
TTMODE_NONE = 0,
|
||||||
|
TTMODE_OLD,
|
||||||
|
TTMODE_ALACROIX,
|
||||||
|
TTMODE_USER
|
||||||
|
} ttmode_enum;
|
||||||
|
|
||||||
|
#define TTMAX_ALACROIX 30 // max frames for SONIC typeface, plus one for NULL terminating entry
|
||||||
|
#define TTMAX_USER 100
|
||||||
|
|
||||||
|
extern ttmode_enum ttmode;
|
||||||
|
extern UINT8 ttscale;
|
||||||
|
// ttmode user vars
|
||||||
|
extern char ttname[9];
|
||||||
|
extern INT16 ttx;
|
||||||
|
extern INT16 tty;
|
||||||
|
extern INT16 ttloop;
|
||||||
|
extern UINT16 tttics;
|
||||||
|
extern boolean ttavailable[6];
|
||||||
|
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
TITLEMAP_OFF = 0,
|
TITLEMAP_OFF = 0,
|
||||||
|
@ -89,13 +111,22 @@ typedef enum
|
||||||
extern mobj_t *titlemapcameraref;
|
extern mobj_t *titlemapcameraref;
|
||||||
extern char curbgname[9];
|
extern char curbgname[9];
|
||||||
extern SINT8 curfadevalue;
|
extern SINT8 curfadevalue;
|
||||||
extern boolean curhidepics;
|
|
||||||
extern INT32 curbgcolor;
|
extern INT32 curbgcolor;
|
||||||
extern INT32 curbgxspeed;
|
extern INT32 curbgxspeed;
|
||||||
extern INT32 curbgyspeed;
|
extern INT32 curbgyspeed;
|
||||||
extern boolean curbghide;
|
extern boolean curbghide;
|
||||||
extern boolean hidetitlemap;
|
extern boolean hidetitlemap;
|
||||||
|
|
||||||
|
extern boolean curhidepics;
|
||||||
|
extern ttmode_enum curttmode;
|
||||||
|
extern UINT8 curttscale;
|
||||||
|
// ttmode user vars
|
||||||
|
extern char curttname[9];
|
||||||
|
extern INT16 curttx;
|
||||||
|
extern INT16 curtty;
|
||||||
|
extern INT16 curttloop;
|
||||||
|
extern UINT16 curtttics;
|
||||||
|
|
||||||
#define TITLEBACKGROUNDACTIVE (curfadevalue >= 0 || curbgname[0])
|
#define TITLEBACKGROUNDACTIVE (curfadevalue >= 0 || curbgname[0])
|
||||||
|
|
||||||
void F_InitMenuPresValues(void);
|
void F_InitMenuPresValues(void);
|
||||||
|
|
56
src/m_menu.c
56
src/m_menu.c
|
@ -2289,6 +2289,13 @@ void M_InitMenuPresTables(void)
|
||||||
// so-called "undefined"
|
// so-called "undefined"
|
||||||
menupres[i].fadestrength = -1;
|
menupres[i].fadestrength = -1;
|
||||||
menupres[i].hidetitlepics = -1; // inherits global hidetitlepics
|
menupres[i].hidetitlepics = -1; // inherits global hidetitlepics
|
||||||
|
menupres[i].ttmode = TTMODE_NONE;
|
||||||
|
menupres[i].ttscale = UINT8_MAX;
|
||||||
|
menupres[i].ttname[0] = 0;
|
||||||
|
menupres[i].ttx = INT16_MAX;
|
||||||
|
menupres[i].tty = INT16_MAX;
|
||||||
|
menupres[i].ttloop = INT16_MAX;
|
||||||
|
menupres[i].tttics = UINT16_MAX;
|
||||||
menupres[i].enterwipe = -1;
|
menupres[i].enterwipe = -1;
|
||||||
menupres[i].exitwipe = -1;
|
menupres[i].exitwipe = -1;
|
||||||
menupres[i].bgcolor = -1;
|
menupres[i].bgcolor = -1;
|
||||||
|
@ -2467,7 +2474,7 @@ static boolean MIT_SetCurFadeValue(UINT32 menutype, INT32 level, INT32 *retval,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static boolean MIT_SetCurHideTitlePics(UINT32 menutype, INT32 level, INT32 *retval, void **input, boolean fromoldest)
|
static boolean MIT_SetCurTitlePics(UINT32 menutype, INT32 level, INT32 *retval, void **input, boolean fromoldest)
|
||||||
{
|
{
|
||||||
(void)input;
|
(void)input;
|
||||||
(void)retval;
|
(void)retval;
|
||||||
|
@ -2481,8 +2488,41 @@ static boolean MIT_SetCurHideTitlePics(UINT32 menutype, INT32 level, INT32 *retv
|
||||||
curhidepics = menupres[menutype].hidetitlepics;
|
curhidepics = menupres[menutype].hidetitlepics;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
else if (menupres[menutype].ttmode == TTMODE_USER)
|
||||||
|
{
|
||||||
|
if (menupres[menutype].ttname[0])
|
||||||
|
{
|
||||||
|
curhidepics = menupres[menutype].hidetitlepics;
|
||||||
|
curttmode = menupres[menutype].ttmode;
|
||||||
|
curttscale = (menupres[menutype].ttscale != UINT8_MAX ? menupres[menutype].ttscale : ttscale);
|
||||||
|
strncpy(curttname, menupres[menutype].ttname, 9);
|
||||||
|
curttx = (menupres[menutype].ttx != INT16_MAX ? menupres[menutype].ttx : ttx);
|
||||||
|
curtty = (menupres[menutype].tty != INT16_MAX ? menupres[menutype].tty : tty);
|
||||||
|
curttloop = (menupres[menutype].ttloop != INT16_MAX ? menupres[menutype].ttloop : ttloop);
|
||||||
|
curtttics = (menupres[menutype].tttics != UINT16_MAX ? menupres[menutype].tttics : tttics);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
curhidepics = menupres[menutype].hidetitlepics;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (menupres[menutype].ttmode != TTMODE_NONE)
|
||||||
|
{
|
||||||
|
curhidepics = menupres[menutype].hidetitlepics;
|
||||||
|
curttmode = menupres[menutype].ttmode;
|
||||||
|
curttscale = (menupres[menutype].ttscale != UINT8_MAX ? menupres[menutype].ttscale : ttscale);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
else if (!level)
|
else if (!level)
|
||||||
|
{
|
||||||
curhidepics = hidetitlepics;
|
curhidepics = hidetitlepics;
|
||||||
|
curttmode = ttmode;
|
||||||
|
curttscale = ttscale;
|
||||||
|
strncpy(curttname, ttname, 9);
|
||||||
|
curttx = ttx;
|
||||||
|
curtty = tty;
|
||||||
|
curttloop = ttloop;
|
||||||
|
curtttics = tttics;
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2527,9 +2567,9 @@ void M_SetMenuCurFadeValue(UINT8 defaultvalue)
|
||||||
M_IterateMenuTree(MIT_SetCurFadeValue, &defaultvalue);
|
M_IterateMenuTree(MIT_SetCurFadeValue, &defaultvalue);
|
||||||
}
|
}
|
||||||
|
|
||||||
void M_SetMenuCurHideTitlePics(void)
|
void M_SetMenuCurTitlePics(void)
|
||||||
{
|
{
|
||||||
M_IterateMenuTree(MIT_SetCurHideTitlePics, NULL);
|
M_IterateMenuTree(MIT_SetCurTitlePics, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ====================================
|
// ====================================
|
||||||
|
@ -2579,12 +2619,20 @@ static void M_HandleMenuPresState(menu_t *newMenu)
|
||||||
curbgyspeed = titlescrollyspeed;
|
curbgyspeed = titlescrollyspeed;
|
||||||
curbghide = (gamestate != GS_TIMEATTACK); // show in time attack, hide in other menus
|
curbghide = (gamestate != GS_TIMEATTACK); // show in time attack, hide in other menus
|
||||||
|
|
||||||
|
curttmode = ttmode;
|
||||||
|
curttscale = ttscale;
|
||||||
|
strncpy(curttname, ttname, 9);
|
||||||
|
curttx = ttx;
|
||||||
|
curtty = tty;
|
||||||
|
curttloop = ttloop;
|
||||||
|
curtttics = tttics;
|
||||||
|
|
||||||
// don't do the below during the in-game menus
|
// don't do the below during the in-game menus
|
||||||
if (gamestate != GS_TITLESCREEN && gamestate != GS_TIMEATTACK)
|
if (gamestate != GS_TITLESCREEN && gamestate != GS_TIMEATTACK)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
M_SetMenuCurFadeValue(16);
|
M_SetMenuCurFadeValue(16);
|
||||||
M_SetMenuCurHideTitlePics();
|
M_SetMenuCurTitlePics();
|
||||||
|
|
||||||
// Loop through both menu IDs in parallel and look for type changes
|
// Loop through both menu IDs in parallel and look for type changes
|
||||||
// The youngest child in activeMenuId is the entered menu
|
// The youngest child in activeMenuId is the entered menu
|
||||||
|
|
17
src/m_menu.h
17
src/m_menu.h
|
@ -18,6 +18,7 @@
|
||||||
#include "d_event.h"
|
#include "d_event.h"
|
||||||
#include "command.h"
|
#include "command.h"
|
||||||
#include "r_things.h" // for SKINNAMESIZE
|
#include "r_things.h" // for SKINNAMESIZE
|
||||||
|
#include "f_finale.h" // for ttmode_enum
|
||||||
|
|
||||||
//
|
//
|
||||||
// MENUS
|
// MENUS
|
||||||
|
@ -128,19 +129,27 @@ typedef enum
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
char bgname[8]; // name for background gfx lump; lays over titlemap if this is set
|
char bgname[8]; // name for background gfx lump; lays over titlemap if this is set
|
||||||
SINT8 hidetitlepics; // hide title gfx per menu; -1 means undefined, inherits global setting
|
SINT8 fadestrength; // darken background when displaying this menu, strength 0-31 or -1 for undefined
|
||||||
|
INT32 bgcolor; // fill color, overrides bg name. -1 means follow bg name rules.
|
||||||
INT32 titlescrollxspeed; // background gfx scroll per menu; inherits global setting
|
INT32 titlescrollxspeed; // background gfx scroll per menu; inherits global setting
|
||||||
INT32 titlescrollyspeed; // y scroll
|
INT32 titlescrollyspeed; // y scroll
|
||||||
INT32 bgcolor; // fill color, overrides bg name. -1 means follow bg name rules.
|
|
||||||
boolean bghide; // for titlemaps, hide the background.
|
boolean bghide; // for titlemaps, hide the background.
|
||||||
|
|
||||||
|
SINT8 hidetitlepics; // hide title gfx per menu; -1 means undefined, inherits global setting
|
||||||
|
ttmode_enum ttmode; // title wing animation mode; default TTMODE_OLD
|
||||||
|
UINT8 ttscale; // scale of title wing gfx (FRACUNIT / ttscale); -1 means undefined, inherits global setting
|
||||||
|
char ttname[9]; // lump name of title wing gfx. If name length is <= 6, engine will attempt to load numbered frames (TTNAMExx)
|
||||||
|
INT16 ttx; // X position of title wing
|
||||||
|
INT16 tty; // Y position of title wing
|
||||||
|
INT16 ttloop; // # frame to loop; -1 means dont loop
|
||||||
|
UINT16 tttics; // # of tics per frame
|
||||||
|
|
||||||
char musname[7]; ///< Music track to play. "" for no music.
|
char musname[7]; ///< Music track to play. "" for no music.
|
||||||
UINT16 mustrack; ///< Subsong to play. Only really relevant for music modules and specific formats supported by GME. 0 to ignore.
|
UINT16 mustrack; ///< Subsong to play. Only really relevant for music modules and specific formats supported by GME. 0 to ignore.
|
||||||
boolean muslooping; ///< Loop the music
|
boolean muslooping; ///< Loop the music
|
||||||
boolean musstop; ///< Don't play any music
|
boolean musstop; ///< Don't play any music
|
||||||
boolean musignore; ///< Let the current music keep playing
|
boolean musignore; ///< Let the current music keep playing
|
||||||
|
|
||||||
SINT8 fadestrength; // darken background when displaying this menu, strength 0-31 or -1 for undefined
|
|
||||||
boolean enterbubble; // run all entrance line execs after common ancestor and up to child. If false, only run the child's exec
|
boolean enterbubble; // run all entrance line execs after common ancestor and up to child. If false, only run the child's exec
|
||||||
boolean exitbubble; // run all exit line execs from child and up to before common ancestor. If false, only run the child's exec
|
boolean exitbubble; // run all exit line execs from child and up to before common ancestor. If false, only run the child's exec
|
||||||
INT32 entertag; // line exec to run on menu enter, if titlemap
|
INT32 entertag; // line exec to run on menu enter, if titlemap
|
||||||
|
@ -158,7 +167,7 @@ UINT8 M_GetYoungestChildMenu(void);
|
||||||
void M_ChangeMenuMusic(const char *defaultmusname, boolean defaultmuslooping);
|
void M_ChangeMenuMusic(const char *defaultmusname, boolean defaultmuslooping);
|
||||||
void M_SetMenuCurBackground(const char *defaultname);
|
void M_SetMenuCurBackground(const char *defaultname);
|
||||||
void M_SetMenuCurFadeValue(UINT8 defaultvalue);
|
void M_SetMenuCurFadeValue(UINT8 defaultvalue);
|
||||||
void M_SetMenuCurHideTitlePics(void);
|
void M_SetMenuCurTitlePics(void);
|
||||||
|
|
||||||
// Called by main loop,
|
// Called by main loop,
|
||||||
// saves config file and calls I_Quit when user exits.
|
// saves config file and calls I_Quit when user exits.
|
||||||
|
|
Loading…
Reference in a new issue