diff --git a/common/main/newmenu.h b/common/main/newmenu.h index 1a7765c64..5b4284fb8 100644 --- a/common/main/newmenu.h +++ b/common/main/newmenu.h @@ -188,5 +188,15 @@ extern void newmenu_free_background(); #define BORDERX (15*(SWIDTH/320)) #define BORDERY (15*(SHEIGHT/200)) +#define DXX_NEWMENU_VARIABLE m +#define DXX_ENUM_CHECK(S,OPT,V) OPT, +#define DXX_COUNT_CHECK(S,OPT,V) +1 +#define DXX_ADD_CHECK(S,OPT,V) \ + (DXX_NEWMENU_VARIABLE)[(OPT)].type=NM_TYPE_CHECK; \ + (DXX_NEWMENU_VARIABLE)[(OPT)].text=(S); \ + (DXX_NEWMENU_VARIABLE)[(OPT)].value=V; +#define DXX_READ_CHECK(S,OPT,V) \ + V = (DXX_NEWMENU_VARIABLE)[(OPT)].value; + #endif /* _NEWMENU_H */ diff --git a/d1x-rebirth/main/menu.c b/d1x-rebirth/main/menu.c index 2bdf51ac4..cf86e3a15 100644 --- a/d1x-rebirth/main/menu.c +++ b/d1x-rebirth/main/menu.c @@ -1861,38 +1861,30 @@ void do_sound_menu() #endif } -#define ADD_CHECK(n,txt,v) do { m[n].type=NM_TYPE_CHECK; m[n].text=txt; m[n].value=v;} while (0) +#define DXX_MISC_MENU_OPTIONS(VERB) \ + DXX_##VERB##_CHECK("Ship auto-leveling",opt_autolevel, PlayerCfg.AutoLeveling) \ + DXX_##VERB##_CHECK("Persistent Debris",opt_persist_debris,PlayerCfg.PersistentDebris) \ + DXX_##VERB##_CHECK("Screenshots w/o HUD",opt_screenshot,PlayerCfg.PRShot) \ + DXX_##VERB##_CHECK("No redundant pickup messages",opt_redundant,PlayerCfg.NoRedundancy) \ + DXX_##VERB##_CHECK("Show Player chat only (Multi)",opt_playerchat,PlayerCfg.MultiMessages) \ + DXX_##VERB##_CHECK("No Rankings (Multi)",opt_noranking,PlayerCfg.NoRankings) \ + DXX_##VERB##_CHECK("Free Flight controls in Automap",opt_freeflight, PlayerCfg.AutomapFreeFlight) \ + DXX_##VERB##_CHECK("No Weapon Autoselect when firing",opt_noautoselect,PlayerCfg.NoFireAutoselect) \ + DXX_##VERB##_CHECK("Only Cycle Autoselect Weapons",opt_only_autoselect,PlayerCfg.CycleAutoselectOnly) \ + DXX_##VERB##_CHECK("Show D2-style Prox. Bomb Gauge",opt_d2bomb,PlayerCfg.BombGauge) \ void do_misc_menu() { - newmenu_item m[10]; + enum { + DXX_MISC_MENU_OPTIONS(ENUM) + }; int i = 0; do { - ADD_CHECK(0, "Ship auto-leveling", PlayerCfg.AutoLeveling); - ADD_CHECK(1, "Persistent Debris",PlayerCfg.PersistentDebris); - ADD_CHECK(2, "Screenshots w/o HUD",PlayerCfg.PRShot); - ADD_CHECK(3, "No redundant pickup messages",PlayerCfg.NoRedundancy); - ADD_CHECK(4, "Show Player chat only (Multi)",PlayerCfg.MultiMessages); - ADD_CHECK(5, "No Rankings (Multi)",PlayerCfg.NoRankings); - ADD_CHECK(6, "Show D2-style Prox. Bomb Gauge",PlayerCfg.BombGauge); - ADD_CHECK(7, "Free Flight controls in Automap",PlayerCfg.AutomapFreeFlight); - ADD_CHECK(8, "No Weapon Autoselect when firing",PlayerCfg.NoFireAutoselect); - ADD_CHECK(9, "Only Cycle Autoselect Weapons",PlayerCfg.CycleAutoselectOnly); - + newmenu_item m[DXX_MISC_MENU_OPTIONS(COUNT)]; + DXX_MISC_MENU_OPTIONS(ADD); i = newmenu_do1( NULL, "Misc Options", sizeof(m)/sizeof(*m), m, NULL, NULL, i ); - - PlayerCfg.AutoLeveling = m[0].value; - PlayerCfg.PersistentDebris = m[1].value; - PlayerCfg.PRShot = m[2].value; - PlayerCfg.NoRedundancy = m[3].value; - PlayerCfg.MultiMessages = m[4].value; - PlayerCfg.NoRankings = m[5].value; - PlayerCfg.BombGauge = m[6].value; - PlayerCfg.AutomapFreeFlight = m[7].value; - PlayerCfg.NoFireAutoselect = m[8].value; - PlayerCfg.CycleAutoselectOnly = m[9].value; - + DXX_MISC_MENU_OPTIONS(READ); } while( i>-1 ); } diff --git a/d2x-rebirth/main/menu.c b/d2x-rebirth/main/menu.c index 8dffcde8b..3673b6dcf 100644 --- a/d2x-rebirth/main/menu.c +++ b/d2x-rebirth/main/menu.c @@ -1885,46 +1885,34 @@ void do_sound_menu() #endif } -#define ADD_CHECK(n,txt,v) do { m[n].type=NM_TYPE_CHECK; m[n].text=txt; m[n].value=v;} while (0) +#define DXX_MISC_MENU_OPTIONS(VERB) \ + DXX_##VERB##_CHECK("Ship auto-leveling",opt_autolevel, PlayerCfg.AutoLeveling) \ + DXX_##VERB##_CHECK("Persistent Debris",opt_persist_debris,PlayerCfg.PersistentDebris) \ + DXX_##VERB##_CHECK("Screenshots w/o HUD",opt_screenshot,PlayerCfg.PRShot) \ + DXX_##VERB##_CHECK("No redundant pickup messages",opt_redundant,PlayerCfg.NoRedundancy) \ + DXX_##VERB##_CHECK("Show Player chat only (Multi)",opt_playerchat,PlayerCfg.MultiMessages) \ + DXX_##VERB##_CHECK("No Rankings (Multi)",opt_noranking,PlayerCfg.NoRankings) \ + DXX_##VERB##_CHECK("Free Flight controls in Automap",opt_freeflight, PlayerCfg.AutomapFreeFlight) \ + DXX_##VERB##_CHECK("No Weapon Autoselect when firing",opt_noautoselect,PlayerCfg.NoFireAutoselect) \ + DXX_##VERB##_CHECK("Only Cycle Autoselect Weapons",opt_only_autoselect,PlayerCfg.CycleAutoselectOnly) \ + DXX_##VERB##_CHECK("Missile view",opt_missileview, PlayerCfg.MissileViewEnabled) \ + DXX_##VERB##_CHECK("Headlight on when picked up", opt_headlighton,PlayerCfg.HeadlightActiveDefault ) \ + DXX_##VERB##_CHECK("Show guided missile in main display", opt_guidedbigview,PlayerCfg.GuidedInBigWindow ) \ + DXX_##VERB##_CHECK("Escort robot hot keys",opt_escorthotkey,PlayerCfg.EscortHotKeys) \ + DXX_##VERB##_CHECK("Movie Subtitles",opt_moviesubtitle,GameCfg.MovieSubtitles) \ void do_misc_menu() { - newmenu_item m[14]; + enum { + DXX_MISC_MENU_OPTIONS(ENUM) + }; int i = 0; do { - ADD_CHECK(0, "Ship auto-leveling", PlayerCfg.AutoLeveling); - ADD_CHECK(1, "Missile view", PlayerCfg.MissileViewEnabled); - ADD_CHECK(2, "Headlight on when picked up", PlayerCfg.HeadlightActiveDefault ); - ADD_CHECK(3, "Show guided missile in main display", PlayerCfg.GuidedInBigWindow ); - ADD_CHECK(4, "Escort robot hot keys",PlayerCfg.EscortHotKeys); - ADD_CHECK(5, "Persistent Debris",PlayerCfg.PersistentDebris); - ADD_CHECK(6, "Screenshots w/o HUD",PlayerCfg.PRShot); - ADD_CHECK(7, "Movie Subtitles",GameCfg.MovieSubtitles); - ADD_CHECK(8, "No redundant pickup messages",PlayerCfg.NoRedundancy); - ADD_CHECK(9, "Show Player chat only (Multi)",PlayerCfg.MultiMessages); - ADD_CHECK(10, "No Rankings (Multi)",PlayerCfg.NoRankings); - ADD_CHECK(11, "Free Flight controls in Automap",PlayerCfg.AutomapFreeFlight); - ADD_CHECK(12, "No Weapon Autoselect when firing",PlayerCfg.NoFireAutoselect); - ADD_CHECK(13, "Only Cycle Autoselect Weapons",PlayerCfg.CycleAutoselectOnly); - + newmenu_item m[DXX_MISC_MENU_OPTIONS(COUNT)]; + DXX_MISC_MENU_OPTIONS(ADD); i = newmenu_do1( NULL, "Misc Options", sizeof(m)/sizeof(*m), m, NULL, NULL, i ); - - PlayerCfg.AutoLeveling = m[0].value; - PlayerCfg.MissileViewEnabled = m[1].value; - PlayerCfg.HeadlightActiveDefault = m[2].value; - PlayerCfg.GuidedInBigWindow = m[3].value; - PlayerCfg.EscortHotKeys = m[4].value; - PlayerCfg.PersistentDebris = m[5].value; - PlayerCfg.PRShot = m[6].value; - GameCfg.MovieSubtitles = m[7].value; - PlayerCfg.NoRedundancy = m[8].value; - PlayerCfg.MultiMessages = m[9].value; - PlayerCfg.NoRankings = m[10].value; - PlayerCfg.AutomapFreeFlight = m[11].value; - PlayerCfg.NoFireAutoselect = m[12].value; - PlayerCfg.CycleAutoselectOnly = m[13].value; - + DXX_MISC_MENU_OPTIONS(READ); } while( i>-1 ); }