New userdef structure: "statusbarflags", "statusbarrange", "statusbarcustom"

"statusbarflags" is a bitfield. Values are:
STATUSBAR_NONONE = 1
STATUSBAR_NOMINI = 2
STATUSBAR_NOFULL = 4
STATUSBAR_NOSHRINK = 8
STATUSBAR_NOFRAGBAR = 16
STATUSBAR_NOOVERLAY = 32
STATUSBAR_NOMODERN = 64
Default value is 8. In case you modify it, you also have to set the other status bar related userdefs in EVENT_SETDEFAULTS. Default values in EDuke32 are: screen_size = 4; statusbarmode = 1; althud = 1;

"statusbarrange" is used to add more alternatives for the status bar without breaking the option in the menu. If used, the mini status bar (screen_size = 4) will cycle through "statusbarcustom" when changing the screen size.

Also fix the size of the viewport when the screen is shrunk and the scale of the status bar is not 100%.

Patch from Fox.

git-svn-id: https://svn.eduke32.com/eduke32@6587 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
hendricks266 2018-01-26 04:34:51 +00:00
parent 1031f2dec0
commit 150ddded12
11 changed files with 120 additions and 42 deletions

View file

@ -228,6 +228,7 @@ void CONFIG_SetDefaults(void)
ud.screen_size = 4;
ud.screen_tilting = 1;
ud.shadows = 1;
ud.statusbarflags = STATUSBAR_NOSHRINK;
ud.statusbarmode = 1;
ud.statusbarscale = 100;
ud.team = 0;

View file

@ -4408,14 +4408,39 @@ void G_SetViewportShrink(int32_t dir)
{
if (dir!=0)
{
if (ud.screen_size == 8 && (dir>0)==(int32_t)ud.statusbarmode)
ud.statusbarmode = !ud.statusbarmode;
else
if (ud.screen_size == 4 && (dir>0)==(int32_t)ud.althud)
ud.althud = !ud.althud;
else
if (dir > 0) // shrinking
{
if (ud.screen_size < 4 && (!(ud.statusbarflags & STATUSBAR_NOMINI) || !(ud.statusbarflags & STATUSBAR_NOMODERN)))
ud.screen_size = 4;
else if (ud.screen_size == 4 && ud.althud == 1 && !(ud.statusbarflags & STATUSBAR_NOMINI))
ud.althud = 0;
else if (ud.screen_size == 4 && ud.statusbarcustom < ud.statusbarrange && !(ud.statusbarflags & STATUSBAR_NOMINI))
ud.statusbarcustom += 1;
else if (ud.screen_size < 8 && (!(ud.statusbarflags & STATUSBAR_NOFULL) || !(ud.statusbarflags & STATUSBAR_NOOVERLAY)))
ud.screen_size = 8;
else if (ud.screen_size == 8 && ud.statusbarmode == 1 && !(ud.statusbarflags & STATUSBAR_NOFULL))
ud.statusbarmode = 0;
else if (ud.screen_size < 64 && !(ud.statusbarflags & STATUSBAR_NOSHRINK))
ud.screen_size += dir;
}
else // enlarging
{
if (ud.screen_size > 12)
ud.screen_size += dir;
else if (ud.screen_size > 8 && (!(ud.statusbarflags & STATUSBAR_NOFULL) || !(ud.statusbarflags & STATUSBAR_NOOVERLAY)))
ud.screen_size = 8;
else if (ud.screen_size == 8 && ud.statusbarmode == 0 && !(ud.statusbarflags & STATUSBAR_NOOVERLAY))
ud.statusbarmode = 1;
else if (ud.screen_size > 4 && (!(ud.statusbarflags & STATUSBAR_NOMINI) || !(ud.statusbarflags & STATUSBAR_NOMODERN)))
ud.screen_size = 4;
else if (ud.screen_size == 4 && ud.statusbarcustom > 0)
ud.statusbarcustom -= 1;
else if (ud.screen_size == 4 && ud.althud == 0 && !(ud.statusbarflags & STATUSBAR_NOMODERN))
ud.althud = 1;
else if (ud.screen_size > 0 && !(ud.statusbarflags & STATUSBAR_NONONE))
ud.screen_size = 0;
}
}
G_UpdateScreenArea();
}
@ -4491,7 +4516,14 @@ void G_HandleLocalKeys(void)
if (!SHIFTS_IS_PRESSED)
{
if (ud.screen_size > 0)
// conditions copied from G_SetViewportShrink
if ((ud.screen_size > 12) ||
(ud.screen_size > 8 && (!(ud.statusbarflags & STATUSBAR_NOFULL) || !(ud.statusbarflags & STATUSBAR_NOOVERLAY))) ||
(ud.screen_size == 8 && ud.statusbarmode == 0 && !(ud.statusbarflags & STATUSBAR_NOOVERLAY)) ||
(ud.screen_size > 4 && (!(ud.statusbarflags & STATUSBAR_NOMINI) || !(ud.statusbarflags & STATUSBAR_NOMODERN))) ||
(ud.screen_size == 4 && ud.statusbarcustom > 0) ||
(ud.screen_size == 4 && ud.althud == 0 && !(ud.statusbarflags & STATUSBAR_NOMODERN)) ||
(ud.screen_size > 0 && !(ud.statusbarflags & STATUSBAR_NONONE)))
{
S_PlaySound(THUD);
G_SetViewportShrink(-4);
@ -4511,7 +4543,13 @@ void G_HandleLocalKeys(void)
if (!SHIFTS_IS_PRESSED)
{
if (ud.screen_size < 8 || (ud.screen_size == 8 && ud.statusbarmode))
// conditions copied from G_SetViewportShrink
if ((ud.screen_size < 4 && (!(ud.statusbarflags & STATUSBAR_NOMINI) || !(ud.statusbarflags & STATUSBAR_NOMODERN))) ||
(ud.screen_size == 4 && ud.althud == 1 && !(ud.statusbarflags & STATUSBAR_NOMINI)) ||
(ud.screen_size == 4 && ud.statusbarcustom < ud.statusbarrange && !(ud.statusbarflags & STATUSBAR_NOMINI)) ||
(ud.screen_size < 8 && (!(ud.statusbarflags & STATUSBAR_NOFULL) || !(ud.statusbarflags & STATUSBAR_NOOVERLAY))) ||
(ud.screen_size == 8 && ud.statusbarmode == 1 && !(ud.statusbarflags & STATUSBAR_NOFULL)) ||
(ud.screen_size < 64 && !(ud.statusbarflags & STATUSBAR_NOSHRINK)))
{
S_PlaySound(THUD);
G_SetViewportShrink(+4);

View file

@ -98,6 +98,16 @@ enum LogoFlags_t {
LOGO_NOTITLEBAR = 0x00800000,
};
enum {
STATUSBAR_NONONE = 0x00000001,
STATUSBAR_NOMINI = 0x00000002,
STATUSBAR_NOFULL = 0x00000004,
STATUSBAR_NOSHRINK = 0x00000008,
STATUSBAR_NOFRAGBAR = 0x00000010,
STATUSBAR_NOOVERLAY = 0x00000020,
STATUSBAR_NOMODERN = 0x00000040,
};
void A_DeleteSprite(int spriteNum);
static inline int32_t G_GetLogoFlags(void)
@ -150,6 +160,7 @@ typedef struct {
int32_t democams,color,msgdisptime,statusbarmode;
int32_t m_noexits,noexits,autovote,automsg,idplayers;
int32_t team, viewbob, weaponsway, althud, weaponscale, textscale;
int32_t statusbarflags, statusbarrange, statusbarcustom;
int32_t screenarea_x1, screenarea_y1, screenarea_x2, screenarea_y2;
int32_t entered_name,screen_tilting,shadows,fta_on,executions,auto_run;

View file

@ -1236,6 +1236,9 @@ const memberlabel_t UserdefsLabels[]=
{ "screenarea_y2", USERDEFS_SCREENAREA_Y2, 0, 0 },
{ "screenfade", USERDEFS_SCREENFADE, 0, 0 },
{ "menubackground", USERDEFS_MENUBACKGROUND, 0, 0 },
{ "statusbarflags", USERDEFS_STATUSBARFLAGS, 0, 0 },
{ "statusbarrange", USERDEFS_STATUSBARRANGE, 0, 0 },
{ "statusbarcustom", USERDEFS_STATUSBARCUSTOM, 0, 0 },
{ NULL, -1, 0, 0 } // END OF LIST
};

View file

@ -534,6 +534,9 @@ enum UserdefsLabel_t
USERDEFS_SCREENAREA_Y2,
USERDEFS_SCREENFADE,
USERDEFS_MENUBACKGROUND,
USERDEFS_STATUSBARFLAGS,
USERDEFS_STATUSBARRANGE,
USERDEFS_STATUSBARCUSTOM,
USERDEFS_END
};

View file

@ -178,6 +178,9 @@ int32_t __fastcall VM_GetUserdef(int32_t labelNum)
case USERDEFS_SCREENAREA_Y2: labelNum = ud.screenarea_y2; break;
case USERDEFS_SCREENFADE: labelNum = ud.screenfade; break;
case USERDEFS_MENUBACKGROUND: labelNum = ud.menubackground; break;
case USERDEFS_STATUSBARFLAGS: labelNum = ud.statusbarflags; break;
case USERDEFS_STATUSBARRANGE: labelNum = ud.statusbarrange; break;
case USERDEFS_STATUSBARCUSTOM: labelNum = ud.statusbarcustom; break;
default: labelNum = -1; break;
}
@ -306,6 +309,9 @@ void __fastcall VM_SetUserdef(int32_t const labelNum, int32_t const iSet)
case USERDEFS_SCREENAREA_Y2: ud.screenarea_y2 = iSet; break;
case USERDEFS_SCREENFADE: ud.screenfade = iSet; break;
case USERDEFS_MENUBACKGROUND: ud.menubackground = iSet; break;
case USERDEFS_STATUSBARFLAGS: ud.statusbarflags = iSet; break;
case USERDEFS_STATUSBARRANGE: ud.statusbarrange = iSet; break;
case USERDEFS_STATUSBARCUSTOM: ud.statusbarcustom = iSet; break;
default: break;
}
}

View file

@ -573,7 +573,7 @@ static MenuRangeInt32_t MEO_SCREENSETUP_CROSSHAIRSIZE = MAKE_MENURANGE( &ud.cros
static MenuEntry_t ME_SCREENSETUP_CROSSHAIRSIZE = MAKE_MENUENTRY( s_Scale, &MF_Redfont, &MEF_BigOptions_Apply, &MEO_SCREENSETUP_CROSSHAIRSIZE, RangeInt32 );
static int32_t vpsize;
static MenuRangeInt32_t MEO_SCREENSETUP_SCREENSIZE = MAKE_MENURANGE( &vpsize, &MF_Redfont, 16, 0, 0, 5, EnforceIntervals );
static MenuRangeInt32_t MEO_SCREENSETUP_SCREENSIZE = MAKE_MENURANGE( &vpsize, &MF_Redfont, 0, 0, 0, 1, EnforceIntervals );
static MenuEntry_t ME_SCREENSETUP_SCREENSIZE = MAKE_MENUENTRY( "Screen size:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_SCREENSETUP_SCREENSIZE, RangeInt32 );
static MenuRangeInt32_t MEO_SCREENSETUP_TEXTSIZE = MAKE_MENURANGE( &ud.textscale, &MF_Redfont, 100, 400, 0, 16, 2 );
static MenuEntry_t ME_SCREENSETUP_TEXTSIZE = MAKE_MENUENTRY( s_Scale, &MF_Redfont, &MEF_BigOptions_Apply, &MEO_SCREENSETUP_TEXTSIZE, RangeInt32 );
@ -1853,7 +1853,22 @@ static void Menu_Pre(MenuID_t cm)
else
MenuMenu_ChangeEntryList(M_DISPLAYSETUP, MEL_DISPLAYSETUP_GL);
vpsize = ud.screen_size + 4*(ud.screen_size>=8 && ud.statusbarmode==0) + 4*(ud.screen_size>=4 && ud.althud==0);
MEO_SCREENSETUP_SCREENSIZE.steps = !(ud.statusbarflags & STATUSBAR_NONONE) +
!(ud.statusbarflags & STATUSBAR_NOMODERN) +
!(ud.statusbarflags & STATUSBAR_NOMINI) * (ud.statusbarrange + 1) +
!(ud.statusbarflags & STATUSBAR_NOOVERLAY) +
!(ud.statusbarflags & STATUSBAR_NOFULL) +
!(ud.statusbarflags & STATUSBAR_NOSHRINK) * 14;
MEO_SCREENSETUP_SCREENSIZE.min = MEO_SCREENSETUP_SCREENSIZE.steps - 1;
MenuEntry_DisableOnCondition(&ME_SCREENSETUP_SCREENSIZE, (MEO_SCREENSETUP_SCREENSIZE.steps < 2));
vpsize = !(ud.statusbarflags & STATUSBAR_NONONE) +
(ud.screen_size >= 4 && !(ud.statusbarflags & STATUSBAR_NOMODERN)) +
(ud.screen_size >= 4 && ud.althud == 0 && !(ud.statusbarflags & STATUSBAR_NOMINI)) * (ud.statusbarcustom + 1) +
(ud.screen_size >= 8 && !(ud.statusbarflags & STATUSBAR_NOOVERLAY)) +
(ud.screen_size >= 8 && ud.statusbarmode == 0 && !(ud.statusbarflags & STATUSBAR_NOFULL)) +
(ud.screen_size > 8 && !(ud.statusbarflags & STATUSBAR_NOSHRINK)) * ((ud.screen_size - 8) >> 2)
-1;
if (getrendermode() != REND_CLASSIC)
{
@ -3115,7 +3130,7 @@ static void Menu_Custom2ColScreen(/*MenuEntry_t *entry*/)
static int32_t Menu_EntryRangeInt32Modify(MenuEntry_t *entry, int32_t newValue)
{
if (entry == &ME_SCREENSETUP_SCREENSIZE)
G_SetViewportShrink(newValue - vpsize);
G_SetViewportShrink((newValue - vpsize) * 4);
else if (entry == &ME_SCREENSETUP_SBARSIZE)
G_SetStatusBarScale(newValue);
else if (entry == &ME_SOUND_VOLUME_MASTER)

View file

@ -558,6 +558,26 @@ void G_CacheMapData(void)
OSD_Printf("Cache time: %dms\n", endtime-starttime);
}
extern int32_t fragbarheight(void)
{
if (ud.screen_size > 0 && !(ud.statusbarflags & STATUSBAR_NOFRAGBAR)
#ifdef SPLITSCREEN_MOD_HACKS
&& !g_fakeMultiMode
#endif
&& (g_netServer || ud.multimode > 1) && GTFLAGS(GAMETYPE_FRAGBAR))
{
int32_t i, j = 0;
for (TRAVERSE_CONNECT(i))
if (i > j)
j = i;
return ((j + 3) >> 2) << 3;
}
return 0;
}
void G_UpdateScreenArea(void)
{
if (!in3dmode())
@ -573,27 +593,13 @@ void G_UpdateScreenArea(void)
int32_t x1 = scale(ss,xdim,160);
int32_t x2 = xdim-x1;
int32_t y1 = ss;
int32_t y2 = 200-ss;
int32_t y1 = scale(ss,(200 * 100) - (tilesiz[BOTTOMSTATUSBAR].y * ud.statusbarscale),200 - tilesiz[BOTTOMSTATUSBAR].y);
int32_t y2 = 200*100-y1;
if (ud.screen_size > 0 && (g_gametypeFlags[ud.coop]&GAMETYPE_FRAGBAR) && (g_netServer || ud.multimode > 1))
{
int32_t i, j = 0;
for (TRAVERSE_CONNECT(i))
if (i > j) j = i;
if (j > 0) y1 += 8;
if (j > 4) y1 += 8;
if (j > 8) y1 += 8;
if (j > 12) y1 += 8;
}
y2 *= 100;
y1 += fragbarheight()*100;
if (ud.screen_size >= 8 && ud.statusbarmode==0)
y2 -= tilesiz[BOTTOMSTATUSBAR].y*ud.statusbarscale;
y1 = scale(y1,ydim,200);
y1 = scale(y1,ydim,200*100);
y2 = scale(y2,ydim,200*100);
if (VM_HaveEvent(EVENT_UPDATESCREENAREA))

View file

@ -55,6 +55,7 @@ void P_ResetStatus(int playerNum);
void P_ResetWeapons(int playerNum);
void G_ClearFIFO(void);
void G_ResetInterpolations(void);
extern int32_t fragbarheight(void);
#ifdef __cplusplus
}

View file

@ -465,6 +465,9 @@ void G_DrawInventory(const DukePlayer_t *p)
void G_DrawFrags(void)
{
if (ud.statusbarflags & STATUSBAR_NOFRAGBAR)
return;
int32_t i, j = 0;
const int32_t orient = 2+8+16+64;
@ -1067,18 +1070,9 @@ void G_DrawBackground(void)
return;
}
if (ud.screen_size > 0 && (g_gametypeFlags[ud.coop]&GAMETYPE_FRAGBAR) && (g_netServer || ud.multimode > 1))
y1 = fragbarheight();
if (y1 != 0)
{
int32_t i, j = 0;
for (TRAVERSE_CONNECT(i))
if (i > j) j = i;
if (j > 0) y1 += 8;
if (j > 4) y1 += 8;
if (j > 8) y1 += 8;
if (j > 12) y1 += 8;
y1 = scale(ydim, y1, 200);
y1 -= ((tilesiz[dapicnum].y / y1) +1) * tilesiz[dapicnum].y;
}

View file

@ -1064,7 +1064,7 @@ void G_PrintGameQuotes(int32_t snum)
const int32_t reserved_quote = (ps->ftq >= QUOTE_RESERVED && ps->ftq <= QUOTE_RESERVED3);
// NOTE: QUOTE_RESERVED4 is not included.
int32_t const ybase = text_fragbarheight() + text_ypos();
int32_t const ybase = (fragbarheight()<<16) + text_ypos();
int32_t height = 0;
int32_t k = ps->fta;