diff --git a/source/duke3d/src/config.cpp b/source/duke3d/src/config.cpp index a89a0845d..2845e8fc8 100644 --- a/source/duke3d/src/config.cpp +++ b/source/duke3d/src/config.cpp @@ -250,6 +250,7 @@ void CONFIG_SetDefaults(void) ud.textscale = 200; ud.screenfade = 1; ud.menubackground = 1; + ud.hudontop = 0; ud.config.CheckForUpdates = 1; diff --git a/source/duke3d/src/game.h b/source/duke3d/src/game.h index 3370da2fb..80461af0d 100644 --- a/source/duke3d/src/game.h +++ b/source/duke3d/src/game.h @@ -161,6 +161,7 @@ typedef struct { int32_t m_noexits,noexits,autovote,automsg,idplayers; int32_t team, viewbob, weaponsway, althud, weaponscale, textscale; int32_t statusbarflags, statusbarrange, statusbarcustom; + int32_t hudontop; int32_t screenarea_x1, screenarea_y1, screenarea_x2, screenarea_y2; int32_t entered_name,screen_tilting,shadows,fta_on,executions,auto_run; diff --git a/source/duke3d/src/gamedef.cpp b/source/duke3d/src/gamedef.cpp index ec44cdd11..2ee874b30 100644 --- a/source/duke3d/src/gamedef.cpp +++ b/source/duke3d/src/gamedef.cpp @@ -1239,6 +1239,7 @@ const memberlabel_t UserdefsLabels[]= { "statusbarflags", USERDEFS_STATUSBARFLAGS, 0, 0 }, { "statusbarrange", USERDEFS_STATUSBARRANGE, 0, 0 }, { "statusbarcustom", USERDEFS_STATUSBARCUSTOM, 0, 0 }, + { "hudontop", USERDEFS_HUDONTOP, 0, 0 }, { NULL, -1, 0, 0 } // END OF LIST }; diff --git a/source/duke3d/src/gamedef.h b/source/duke3d/src/gamedef.h index ec594e2f0..7b17c1342 100644 --- a/source/duke3d/src/gamedef.h +++ b/source/duke3d/src/gamedef.h @@ -537,6 +537,7 @@ enum UserdefsLabel_t USERDEFS_STATUSBARFLAGS, USERDEFS_STATUSBARRANGE, USERDEFS_STATUSBARCUSTOM, + USERDEFS_HUDONTOP, USERDEFS_END }; diff --git a/source/duke3d/src/gamestructures.cpp b/source/duke3d/src/gamestructures.cpp index 1518c0914..237f2faeb 100644 --- a/source/duke3d/src/gamestructures.cpp +++ b/source/duke3d/src/gamestructures.cpp @@ -181,6 +181,7 @@ int32_t __fastcall VM_GetUserdef(int32_t labelNum) case USERDEFS_STATUSBARFLAGS: labelNum = ud.statusbarflags; break; case USERDEFS_STATUSBARRANGE: labelNum = ud.statusbarrange; break; case USERDEFS_STATUSBARCUSTOM: labelNum = ud.statusbarcustom; break; + case USERDEFS_HUDONTOP: labelNum = ud.hudontop; break; default: labelNum = -1; break; } @@ -312,6 +313,7 @@ void __fastcall VM_SetUserdef(int32_t const labelNum, int32_t const iSet) case USERDEFS_STATUSBARFLAGS: ud.statusbarflags = iSet; break; case USERDEFS_STATUSBARRANGE: ud.statusbarrange = iSet; break; case USERDEFS_STATUSBARCUSTOM: ud.statusbarcustom = iSet; break; + case USERDEFS_HUDONTOP: ud.hudontop = iSet; break; default: break; } } diff --git a/source/duke3d/src/menus.cpp b/source/duke3d/src/menus.cpp index 603c6fd7e..d3fe38a63 100644 --- a/source/duke3d/src/menus.cpp +++ b/source/duke3d/src/menus.cpp @@ -586,6 +586,14 @@ static MenuEntry_t ME_SCREENSETUP_SHOWPICKUPMESSAGES = MAKE_MENUENTRY( "Game mes +#ifdef EDUKE32_ANDROID_MENU +static char const *MEOSN_SCREENSETUP_STATUSBARONTOP[] = { "Bottom", "Top" }; +static int32_t MEOSV_SCREENSETUP_STATUSBARONTOP[] = { 0, 1}; +static MenuOptionSet_t MEOS_SCREENSETUP_STATUSBARONTOP = MAKE_MENUOPTIONSET( MEOSN_SCREENSETUP_STATUSBARONTOP, MEOSV_SCREENSETUP_STATUSBARONTOP, 0x2 ); +static MenuOption_t MEO_SCREENSETUP_STATUSBARONTOP = MAKE_MENUOPTION(&MF_Redfont, &MEOS_SCREENSETUP_STATUSBARONTOP, &ud.hudontop); +static MenuEntry_t ME_SCREENSETUP_STATUSBARONTOP = MAKE_MENUENTRY( "Status bar:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_SCREENSETUP_STATUSBARONTOP, Option ); +#endif + static MenuRangeInt32_t MEO_SCREENSETUP_SBARSIZE = MAKE_MENURANGE( &ud.statusbarscale, &MF_Redfont, 36, 100, 0, 17, 2 ); static MenuEntry_t ME_SCREENSETUP_SBARSIZE = MAKE_MENUENTRY( s_Scale, &MF_Redfont, &MEF_BigOptions_Apply, &MEO_SCREENSETUP_SBARSIZE, RangeInt32 ); @@ -1096,6 +1104,9 @@ static MenuEntry_t *MEL_SCREENSETUP[] = { &ME_SCREENSETUP_SCREENSIZE, #endif +#ifdef EDUKE32_ANDROID_MENU + &ME_SCREENSETUP_STATUSBARONTOP, +#endif &ME_SCREENSETUP_SBARSIZE, &ME_SCREENSETUP_CROSSHAIR, diff --git a/source/duke3d/src/osdcmds.cpp b/source/duke3d/src/osdcmds.cpp index 55d7c4c3a..021a87601 100644 --- a/source/duke3d/src/osdcmds.cpp +++ b/source/duke3d/src/osdcmds.cpp @@ -1589,7 +1589,8 @@ int32_t registerosdcommands(void) { "demoplay_diffs","enable/disable application of diffs in demo playback",(void *)&demoplay_diffs, CVAR_BOOL, 0, 1 }, { "demoplay_showsync","enable/disable display of sync status",(void *)&demoplay_showsync, CVAR_BOOL, 0, 1 }, - { "hud_althud", "enable/disable alternate mini-hud", (void *)&ud.althud, CVAR_INT, 0, 2 }, + { "hud_althud", "enable/disable alternate mini-hud", (void *)&ud.althud, CVAR_BOOL, 0, 1 }, + { "hud_position", "aligns the status bar to the bottom/top", (void *)&ud.hudontop, CVAR_BOOL, 0, 1 }, { "hud_bgstretch", "enable/disable background image stretching in wide resolutions", (void *)&ud.bgstretch, CVAR_BOOL, 0, 1 }, { "hud_messagetime", "length of time to display multiplayer chat messages", (void *)&ud.msgdisptime, CVAR_INT, 0, 3600 }, { "hud_numbertile", "first tile in alt hud number set", (void *)&althud_numbertile, CVAR_INT, 0, MAXUSERTILES-10 }, diff --git a/source/duke3d/src/sbar.cpp b/source/duke3d/src/sbar.cpp index 8bf0f4e00..aa2ba1bb5 100644 --- a/source/duke3d/src/sbar.cpp +++ b/source/duke3d/src/sbar.cpp @@ -48,7 +48,7 @@ static int32_t sbarxr(int32_t x) static int32_t sbary(int32_t y) { - if (ud.althud == 2 && ud.screen_size == 4) return sbarsc(y << 16); + if (ud.hudontop == 1 && ud.screen_size == 4 && ud.althud == 1) return sbarsc(y << 16); else return (200<<16) - sbarsc(200<<16) + sbarsc(y<<16); } @@ -608,7 +608,7 @@ void G_DrawStatusBar(int32_t snum) { // ALTERNATIVE STATUS BAR - int32_t hudoffset = althud == 2 ? 32 : 200; + int32_t hudoffset = ud.hudontop == 1 ? 32 : 200; static int32_t ammo_sprites[MAX_WEAPONS]; if (EDUKE32_PREDICT_FALSE(ammo_sprites[0] == 0)) @@ -703,7 +703,7 @@ void G_DrawStatusBar(int32_t snum) } } - if (ud.althud == 2) + if (ud.hudontop == 1) hudoffset += 40; if (p->got_access&1) rotatesprite_althudr(39, hudoffset-43, sb15, 0, ACCESSCARD, 0, 0, 10+16+512); diff --git a/source/duke3d/src/screens.cpp b/source/duke3d/src/screens.cpp index 977fd11cc..3f8449c28 100644 --- a/source/duke3d/src/screens.cpp +++ b/source/duke3d/src/screens.cpp @@ -1221,7 +1221,7 @@ void G_DisplayRest(int32_t smoothratio) if (ud.screen_size == 4) { - if (ud.althud != 2) + if (ud.althud == 1 && ud.hudontop == 0) i -= sbarsc(ud.althud ? (tilesiz[BIGALPHANUM].y+8)<<16 : tilesiz[INVENTORYBOX].y<<16); } else if (ud.screen_size > 2) diff --git a/source/duke3d/src/screentext.cpp b/source/duke3d/src/screentext.cpp index bbe78577c..45fadf2cc 100644 --- a/source/duke3d/src/screentext.cpp +++ b/source/duke3d/src/screentext.cpp @@ -1044,7 +1044,7 @@ static FORCE_INLINE int32_t text_fragbarheight(void) static FORCE_INLINE int32_t text_ypos(void) { - if (ud.althud == 2) + if (ud.hudontop == 1 && ud.screen_size == 4 && ud.althud == 1) return 32<<16; #ifdef GEKKO