From b2561577efb6420d6ae51547679c06c58432041a Mon Sep 17 00:00:00 2001 From: jsalmon3 <> Date: Mon, 27 May 2002 20:04:01 +0000 Subject: [PATCH] Rewrote menus using standard C so it will compile with VC++ --- src/include/menus.h | 171 +++-- src/ui/menus.cpp | 1742 ++++++++++++++++++++++++------------------- 2 files changed, 1069 insertions(+), 844 deletions(-) diff --git a/src/include/menus.h b/src/include/menus.h index e62f0a6a8..e05836494 100644 --- a/src/include/menus.h +++ b/src/include/menus.h @@ -88,6 +88,88 @@ typedef unsigned MenuButtonId; /** ** Menuitem definition. */ +struct _menuitem_; +typedef struct _menuitem_text_ { + unsigned char *text; + unsigned int tflags; +} MenuitemText; +typedef struct _menuitem_button_ { + unsigned char *text; + unsigned int xsize; + unsigned int ysize; + MenuButtonId button; + void (*handler)(void); + int hotkey; +} MenuitemButton; +typedef struct _menuitem_pulldown_ { + unsigned char **options; + unsigned int xsize; + unsigned int ysize; + MenuButtonId button; + void (*action)(struct _menuitem_ *, int); + int noptions; + int defopt; + int curopt; + int cursel; /* used in popup state */ + unsigned int state; +} MenuitemPulldown; +typedef struct _menuitem_listbox_ { + void *options; + unsigned int xsize; + unsigned int ysize; + MenuButtonId button; + void (*action)(struct _menuitem_ *, int); + int noptions; + int defopt; + int curopt; + int cursel; /* used in mouse-over state */ + int nlines; + int startline; + void *(*retrieveopt)(struct _menuitem_ *, int); + void (*handler)(void); /* for return key */ +} MenuitemListbox; +typedef struct _menuitem_vslider_ { + unsigned cflags; + unsigned int xsize; // x-size of slider, not including buttons + unsigned int ysize; // y-size of slider, not including buttons + void (*action)(struct _menuitem_ *, int); + int defper; + int percent; // percent of the way to bottom (0 to 100) + int curper; /* used in mouse-move state */ + int cursel; /* used in mouse-over state */ + void (*handler)(void); /* for return key */ +} MenuitemVslider; +typedef struct _menuitem_hslider_ { + unsigned cflags; + unsigned int xsize; // x-size of slider, not including buttons + unsigned int ysize; // y-size of slider, not including buttons + void (*action)(struct _menuitem_ *, int); + int defper; + int percent; // percent of the way to right (0 to 100) + int curper; /* used in mouse-move state */ + int cursel; /* used in mouse-over state */ + void (*handler)(void); /* for return key */ +} MenuitemHslider; +typedef struct _menuitem_drawfunc_ { + void (*draw)(struct _menuitem_ *); +} MenuitemDrawfunc; +typedef struct _menuitem_input_ { + unsigned char *buffer; + unsigned int xsize; + unsigned int ysize; + MenuButtonId button; + void (*action)(struct _menuitem_ *, int); /* for key */ + int nch; + int maxch; +} MenuitemInput; +typedef struct _menuitem_gem_ { + unsigned int state; + unsigned int xsize; + unsigned int ysize; + MenuButtonId button; + void (*action)(struct _menuitem_ *); +} MenuitemGem; + typedef struct _menuitem_ { int mitype; /// FIXME: write docu int xofs; @@ -97,86 +179,15 @@ typedef struct _menuitem_ { void (*initfunc)(struct _menuitem_ *); /// constructor void (*exitfunc)(struct _menuitem_ *); /// destructor union { - struct { - unsigned char *text; - unsigned int tflags; - } text; - struct { - unsigned char *text; - unsigned int xsize; - unsigned int ysize; - MenuButtonId button; - void (*handler)(void); - int hotkey; - } button; - struct { - unsigned char **options; - unsigned int xsize; - unsigned int ysize; - MenuButtonId button; - void (*action)(struct _menuitem_ *, int); - int noptions; - int defopt; - int curopt; - int cursel; /* used in popup state */ - unsigned int state; - } pulldown; - struct { - void *options; - unsigned int xsize; - unsigned int ysize; - MenuButtonId button; - void (*action)(struct _menuitem_ *, int); - int noptions; - int defopt; - int curopt; - int cursel; /* used in mouse-over state */ - int nlines; - int startline; - void *(*retrieveopt)(struct _menuitem_ *, int); - void (*handler)(void); /* for return key */ - } listbox; - struct { - unsigned cflags; - unsigned int xsize; // x-size of slider, not including buttons - unsigned int ysize; // y-size of slider, not including buttons - void (*action)(struct _menuitem_ *, int); - int defper; - int percent; // percent of the way to bottom (0 to 100) - int curper; /* used in mouse-move state */ - int cursel; /* used in mouse-over state */ - void (*handler)(void); /* for return key */ - } vslider; - struct { - unsigned cflags; - unsigned int xsize; // x-size of slider, not including buttons - unsigned int ysize; // y-size of slider, not including buttons - void (*action)(struct _menuitem_ *, int); - int defper; - int percent; // percent of the way to right (0 to 100) - int curper; /* used in mouse-move state */ - int cursel; /* used in mouse-over state */ - void (*handler)(void); /* for return key */ - } hslider; - struct { - void (*draw)(struct _menuitem_ *); - } drawfunc; - struct { - unsigned char *buffer; - unsigned int xsize; - unsigned int ysize; - MenuButtonId button; - void (*action)(struct _menuitem_ *, int); /* for key */ - int nch; - int maxch; - } input; - struct { - unsigned int state; - unsigned int xsize; - unsigned int ysize; - MenuButtonId button; - void (*action)(struct _menuitem_ *); - } gem; + MenuitemText text; + MenuitemButton button; + MenuitemPulldown pulldown; + MenuitemListbox listbox; + MenuitemVslider vslider; + MenuitemHslider hslider; + MenuitemDrawfunc drawfunc; + MenuitemInput input; + MenuitemGem gem; /// ... add here ... } d; diff --git a/src/ui/menus.cpp b/src/ui/menus.cpp index 3e4f8a12f..50b9197e8 100644 --- a/src/ui/menus.cpp +++ b/src/ui/menus.cpp @@ -97,7 +97,7 @@ local void ShowTipsMenu(void); local void InitTips(Menuitem *mi); local void TipsMenuEnd(void); local void SetTips(Menuitem *mi); -local void ShowNextTip(); +local void ShowNextTip(void); local void SetMasterPower(Menuitem *mi); local void SetMusicPower(Menuitem *mi); @@ -261,144 +261,169 @@ local Graphic* Menusbgnd; ** @todo FIXME: Configure with CCL. */ local Menuitem GameMenuItems[] = { -#ifdef __GNUC__ - { MI_TYPE_TEXT, 128, 11, 0, LargeFont, NULL, NULL, - { text:{ "Game Menu", MI_TFLAGS_CENTERED} } }, - { MI_TYPE_BUTTON, 16, 40, MenuButtonDisabled, LargeFont, NULL, NULL, - { button:{ "Save (~<F11~>)", 106, 27, MBUTTON_GM_HALF, GameMenuSave, KeyCodeF11} } }, - { MI_TYPE_BUTTON, 16 + 12 + 106, 40, MenuButtonDisabled, LargeFont, NULL, NULL, - { button:{ "Load (~<F12~>)", 106, 27, MBUTTON_GM_HALF, GameMenuLoad, KeyCodeF12} } }, - { MI_TYPE_BUTTON, 16, 40 + 36, MenuButtonSelected, LargeFont, NULL, NULL, - { button:{ "Options (~<F5~>)", 224, 27, MBUTTON_GM_FULL, GameOptions, KeyCodeF5} } }, - { MI_TYPE_BUTTON, 16, 40 + 36 + 36, MenuButtonSelected, LargeFont, NULL, NULL, - { button:{ "Help (~<F1~>)", 224, 27, MBUTTON_GM_FULL, HelpMenu, KeyCodeF1} } }, - { MI_TYPE_BUTTON, 16, 40 + 36 + 36 + 36, 0, LargeFont, NULL, NULL, - { button:{ "Scenario ~!Objectives", 224, 27, MBUTTON_GM_FULL, GameMenuObjectives, 'o'} } }, - { MI_TYPE_BUTTON, 16, 40 + 36 + 36 + 36 + 36, 0, LargeFont, NULL, NULL, - { button:{ "~!End Scenario", 224, 27, MBUTTON_GM_FULL, GameMenuEndScenario, 'e'} } }, - { MI_TYPE_BUTTON, 16, 288-40, MenuButtonSelected, LargeFont, NULL, NULL, - { button:{ "Return to Game (~<Esc~>)", 224, 27, MBUTTON_GM_FULL, GameMenuReturn, '\033'} } }, -#else - { 0 } -#endif + { MI_TYPE_TEXT, 128, 11, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 16, 40, MenuButtonDisabled, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 16 + 12 + 106, 40, MenuButtonDisabled, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 16, 40 + 36, MenuButtonSelected, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 16, 40 + 36 + 36, MenuButtonSelected, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 16, 40 + 36 + 36 + 36, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 16, 40 + 36 + 36 + 36 + 36, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 16, 288-40, MenuButtonSelected, LargeFont, NULL, NULL, NULL }, }; +local void InitGameMenuItems() { + MenuitemText i0 = { "Game Menu", MI_TFLAGS_CENTERED}; + MenuitemButton i1 = { "Save (~<F11~>)", 106, 27, MBUTTON_GM_HALF, GameMenuSave, KeyCodeF11}; + MenuitemButton i2 = { "Load (~<F12~>)", 106, 27, MBUTTON_GM_HALF, GameMenuLoad, KeyCodeF12}; + MenuitemButton i3 = { "Options (~<F5~>)", 224, 27, MBUTTON_GM_FULL, GameOptions, KeyCodeF5}; + MenuitemButton i4 = { "Help (~<F1~>)", 224, 27, MBUTTON_GM_FULL, HelpMenu, KeyCodeF1}; + MenuitemButton i5 = { "Scenario ~!Objectives", 224, 27, MBUTTON_GM_FULL, GameMenuObjectives, 'o'}; + MenuitemButton i6 = { "~!End Scenario", 224, 27, MBUTTON_GM_FULL, GameMenuEndScenario, 'e'}; + MenuitemButton i7 = { "Return to Game (~<Esc~>)", 224, 27, MBUTTON_GM_FULL, GameMenuReturn, '\033'}; + GameMenuItems[0].d.text = i0; + GameMenuItems[1].d.button = i1; + GameMenuItems[2].d.button = i2; + GameMenuItems[3].d.button = i3; + GameMenuItems[4].d.button = i4; + GameMenuItems[5].d.button = i5; + GameMenuItems[6].d.button = i6; + GameMenuItems[7].d.button = i7; +} /** ** Items for the Victory Menu ** @todo FIXME: Configure with CCL. */ local Menuitem VictoryMenuItems[] = { -#ifdef __GNUC__ - { MI_TYPE_TEXT, 144, 11, 0, LargeFont, NULL, NULL, - { text:{ "Congratulations!", MI_TFLAGS_CENTERED} } }, - { MI_TYPE_TEXT, 144, 32, 0, LargeFont, NULL, NULL, - { text:{ "You are victorious!", MI_TFLAGS_CENTERED} } }, - { MI_TYPE_BUTTON, 32, 90, MenuButtonSelected, LargeFont, NULL, NULL, - { button:{ "~!Victory", 224, 27, MBUTTON_GM_FULL, GameMenuEnd, 'v'} } }, - { MI_TYPE_BUTTON, 32, 56, MenuButtonDisabled, LargeFont, NULL, NULL, - { button:{ "Save Game (~<F11~>)", 224, 27, MBUTTON_GM_FULL, NULL, KeyCodeF11} } }, -#else - { 0 } -#endif + { MI_TYPE_TEXT, 144, 11, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 144, 32, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 32, 90, MenuButtonSelected, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 32, 56, MenuButtonDisabled, LargeFont, NULL, NULL, NULL }, }; +local void InitVictoryMenuItems() { + MenuitemText i0 = { "Congratulations!", MI_TFLAGS_CENTERED}; + MenuitemText i1 = { "You are victorious!", MI_TFLAGS_CENTERED}; + MenuitemButton i2 = { "~!Victory", 224, 27, MBUTTON_GM_FULL, GameMenuEnd, 'v'}; + MenuitemButton i3 = { "Save Game (~<F11~>)", 224, 27, MBUTTON_GM_FULL, NULL, KeyCodeF11}; + VictoryMenuItems[0].d.text = i0; + VictoryMenuItems[1].d.text = i1; + VictoryMenuItems[2].d.button = i2; + VictoryMenuItems[3].d.button = i3; +} /** ** Items for the Lost Menu ** @todo FIXME: Configure with CCL. */ local Menuitem LostMenuItems[] = { -#ifdef __GNUC__ - { MI_TYPE_TEXT, 144, 11, 0, LargeFont, NULL, NULL, - { text:{ "You failed to", MI_TFLAGS_CENTERED} } }, - { MI_TYPE_TEXT, 144, 32, 0, LargeFont, NULL, NULL, - { text:{ "achieve victory!", MI_TFLAGS_CENTERED} } }, - { MI_TYPE_BUTTON, 32, 90, MenuButtonSelected, LargeFont, NULL, NULL, - { button:{ "~!OK", 224, 27, MBUTTON_GM_FULL, GameMenuEnd, 'o'} } }, -#else - { 0 } -#endif + { MI_TYPE_TEXT, 144, 11, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 144, 32, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 32, 90, MenuButtonSelected, LargeFont, NULL, NULL, NULL }, }; +local void InitLostMenuItems() { + MenuitemText i0 = { "You failed to", MI_TFLAGS_CENTERED}; + MenuitemText i1 = { "achieve victory!", MI_TFLAGS_CENTERED}; + MenuitemButton i2 = { "~!OK", 224, 27, MBUTTON_GM_FULL, GameMenuEnd, 'o'}; + LostMenuItems[0].d.text = i0; + LostMenuItems[1].d.text = i1; + LostMenuItems[2].d.button = i2; +} local Menuitem TipsMenuItems[] = { -#ifdef __GNUC__ - { MI_TYPE_TEXT, 144, 11, 0, LargeFont, InitTips, NULL, - { text:{ "Freecraft Tips", MI_TFLAGS_CENTERED} } }, - { MI_TYPE_GEM, 14, 256-75, 0, GameFont, NULL, NULL, - { gem:{ MI_GSTATE_CHECKED, 18, 18, MBUTTON_GEM_SQUARE, SetTips} } }, - { MI_TYPE_TEXT, 14+22, 256-75+4, 0, GameFont, NULL, NULL, - { text:{ "Show tips at startup", MI_TFLAGS_LALIGN} } }, - { MI_TYPE_BUTTON, 14, 256-40, MenuButtonSelected, LargeFont, NULL, NULL, - { button:{ "~!Next Tip", 106, 27, MBUTTON_GM_HALF, ShowNextTip, 'n'} } }, - { MI_TYPE_BUTTON, 168, 256-40, MenuButtonSelected, LargeFont, NULL, NULL, - { button:{ "~!Close", 106, 27, MBUTTON_GM_HALF, TipsMenuEnd, 'c'} } }, - { MI_TYPE_TEXT, 14, 35+16*0, 0, GameFont, NULL, NULL, - { text:{ NULL, MI_TFLAGS_LALIGN} } }, - { MI_TYPE_TEXT, 14, 35+16*1, 0, GameFont, NULL, NULL, - { text:{ NULL, MI_TFLAGS_LALIGN} } }, - { MI_TYPE_TEXT, 14, 35+16*2, 0, GameFont, NULL, NULL, - { text:{ NULL, MI_TFLAGS_LALIGN} } }, - { MI_TYPE_TEXT, 14, 35+16*3, 0, GameFont, NULL, NULL, - { text:{ NULL, MI_TFLAGS_LALIGN} } }, - { MI_TYPE_TEXT, 14, 35+16*4, 0, GameFont, NULL, NULL, - { text:{ NULL, MI_TFLAGS_LALIGN} } }, - { MI_TYPE_TEXT, 14, 35+16*5, 0, GameFont, NULL, NULL, - { text:{ NULL, MI_TFLAGS_LALIGN} } }, - { MI_TYPE_TEXT, 14, 35+16*6, 0, GameFont, NULL, NULL, - { text:{ NULL, MI_TFLAGS_LALIGN} } }, - { MI_TYPE_TEXT, 14, 35+16*7, 0, GameFont, NULL, NULL, - { text:{ NULL, MI_TFLAGS_LALIGN} } }, -#else - { 0 } -#endif + { MI_TYPE_TEXT, 144, 11, 0, LargeFont, InitTips, NULL, NULL }, + { MI_TYPE_GEM, 14, 256-75, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 14+22, 256-75+4, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 14, 256-40, MenuButtonSelected, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 168, 256-40, MenuButtonSelected, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 14, 35+16*0, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 14, 35+16*1, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 14, 35+16*2, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 14, 35+16*3, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 14, 35+16*4, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 14, 35+16*5, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 14, 35+16*6, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 14, 35+16*7, 0, GameFont, NULL, NULL, NULL }, }; +local void InitTipsMenuItems() { + MenuitemText i0 = { "Freecraft Tips", MI_TFLAGS_CENTERED}; + MenuitemGem i1 = { MI_GSTATE_CHECKED, 18, 18, MBUTTON_GEM_SQUARE, SetTips}; + MenuitemText i2 = { "Show tips at startup", MI_TFLAGS_LALIGN}; + MenuitemButton i3 = { "~!Next Tip", 106, 27, MBUTTON_GM_HALF, ShowNextTip, 'n'}; + MenuitemButton i4 = { "~!Close", 106, 27, MBUTTON_GM_HALF, TipsMenuEnd, 'c'}; + MenuitemText i5 = { NULL, MI_TFLAGS_LALIGN}; + MenuitemText i6 = { NULL, MI_TFLAGS_LALIGN}; + MenuitemText i7 = { NULL, MI_TFLAGS_LALIGN}; + MenuitemText i8 = { NULL, MI_TFLAGS_LALIGN}; + MenuitemText i9 = { NULL, MI_TFLAGS_LALIGN}; + MenuitemText i10 = { NULL, MI_TFLAGS_LALIGN}; + MenuitemText i11 = { NULL, MI_TFLAGS_LALIGN}; + MenuitemText i12 = { NULL, MI_TFLAGS_LALIGN}; + TipsMenuItems[0].d.text = i0; + TipsMenuItems[1].d.gem = i1; + TipsMenuItems[2].d.text = i2; + TipsMenuItems[3].d.button = i3; + TipsMenuItems[4].d.button = i4; + TipsMenuItems[5].d.text = i5; + TipsMenuItems[6].d.text = i6; + TipsMenuItems[7].d.text = i7; + TipsMenuItems[8].d.text = i8; + TipsMenuItems[9].d.text = i9; + TipsMenuItems[10].d.text = i10; + TipsMenuItems[11].d.text = i11; + TipsMenuItems[12].d.text = i12; +} local Menuitem ObjectivesMenuItems[] = { -#ifdef __GNUC__ - { MI_TYPE_TEXT, 128, 11, 0, LargeFont, NULL, NULL, - { text:{ "Objectives", MI_TFLAGS_CENTERED} } }, - { MI_TYPE_TEXT, 14, 38+21*0, 0, LargeFont, NULL, NULL, - { text:{ NULL, 0} } }, - { MI_TYPE_TEXT, 14, 38+21*1, 0, LargeFont, NULL, NULL, - { text:{ NULL, 0} } }, - { MI_TYPE_TEXT, 14, 38+21*2, 0, LargeFont, NULL, NULL, - { text:{ NULL, 0} } }, - { MI_TYPE_TEXT, 14, 38+21*3, 0, LargeFont, NULL, NULL, - { text:{ NULL, 0} } }, - { MI_TYPE_TEXT, 14, 38+21*4, 0, LargeFont, NULL, NULL, - { text:{ NULL, 0} } }, - { MI_TYPE_TEXT, 14, 38+21*5, 0, LargeFont, NULL, NULL, - { text:{ NULL, 0} } }, - { MI_TYPE_TEXT, 14, 38+21*6, 0, LargeFont, NULL, NULL, - { text:{ NULL, 0} } }, - { MI_TYPE_TEXT, 14, 38+21*7, 0, LargeFont, NULL, NULL, - { text:{ NULL, 0} } }, - { MI_TYPE_TEXT, 14, 38+21*8, 0, LargeFont, NULL, NULL, - { text:{ NULL, 0} } }, - { MI_TYPE_BUTTON, 16, 288-40, MenuButtonSelected, LargeFont, NULL, NULL, - { button:{ "~!OK", 224, 27, MBUTTON_GM_FULL, EndMenu, 'o'} } }, -#else - { 0 } -#endif + { MI_TYPE_TEXT, 128, 11, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 14, 38+21*0, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 14, 38+21*1, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 14, 38+21*2, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 14, 38+21*3, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 14, 38+21*4, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 14, 38+21*5, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 14, 38+21*6, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 14, 38+21*7, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 14, 38+21*8, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 16, 288-40, MenuButtonSelected, LargeFont, NULL, NULL, NULL }, }; +local void InitObjectivesMenuItems() { + MenuitemText i0 = { "Objectives", MI_TFLAGS_CENTERED}; + MenuitemText i1 = { NULL, 0}; + MenuitemButton i10 = { "~!OK", 224, 27, MBUTTON_GM_FULL, EndMenu, 'o'}; + ObjectivesMenuItems[0].d.text = i0; + ObjectivesMenuItems[1].d.text = i1; + ObjectivesMenuItems[2].d.text = i1; + ObjectivesMenuItems[3].d.text = i1; + ObjectivesMenuItems[4].d.text = i1; + ObjectivesMenuItems[5].d.text = i1; + ObjectivesMenuItems[6].d.text = i1; + ObjectivesMenuItems[7].d.text = i1; + ObjectivesMenuItems[8].d.text = i1; + ObjectivesMenuItems[9].d.text = i1; + ObjectivesMenuItems[10].d.button = i10; +} local Menuitem EndScenarioMenuItems[] = { -#ifdef __GNUC__ - { MI_TYPE_TEXT, 128, 11, 0, LargeFont, NULL, NULL, - { text:{ "End Scenario", MI_TFLAGS_CENTERED} } }, - { MI_TYPE_BUTTON, 16, 40 + 36*0, 0, LargeFont, NULL, NULL, - { button:{ "~!Restart Scenario", 224, 27, MBUTTON_GM_FULL, EndScenarioRestart, 'r'} } }, - { MI_TYPE_BUTTON, 16, 40 + 36*1, 0, LargeFont, NULL, NULL, - { button:{ "~!Surrender", 224, 27, MBUTTON_GM_FULL, EndScenarioSurrender, 's'} } }, - { MI_TYPE_BUTTON, 16, 40 + 36*2, 0, LargeFont, NULL, NULL, - { button:{ "~!Quit to Menu", 224, 27, MBUTTON_GM_FULL, EndScenarioQuitMenu, 'q'} } }, - { MI_TYPE_BUTTON, 16, 40 + 36*3, 0, LargeFont, NULL, NULL, - { button:{ "E~!xit Program", 224, 27, MBUTTON_GM_FULL, GameMenuExit, 'x'} } }, - { MI_TYPE_BUTTON, 16, 288-40, MenuButtonSelected, LargeFont, NULL, NULL, - { button:{ "Previous (~!E~!s~!c)", 224, 27, MBUTTON_GM_FULL, EndMenu, '\033'} } }, -#else - { 0 } -#endif + { MI_TYPE_TEXT, 128, 11, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 16, 40 + 36*0, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 16, 40 + 36*1, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 16, 40 + 36*2, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 16, 40 + 36*3, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 16, 288-40, MenuButtonSelected, LargeFont, NULL, NULL, NULL }, }; +local void InitEndScenarioMenuItems() { + MenuitemText i0 = { "End Scenario", MI_TFLAGS_CENTERED}; + MenuitemButton i1 = { "~!Restart Scenario", 224, 27, MBUTTON_GM_FULL, EndScenarioRestart, 'r'}; + MenuitemButton i2 = { "~!Surrender", 224, 27, MBUTTON_GM_FULL, EndScenarioSurrender, 's'}; + MenuitemButton i3 = { "~!Quit to Menu", 224, 27, MBUTTON_GM_FULL, EndScenarioQuitMenu, 'q'}; + MenuitemButton i4 = { "E~!xit Program", 224, 27, MBUTTON_GM_FULL, GameMenuExit, 'x'}; + MenuitemButton i5 = { "Previous (~!E~!s~!c)", 224, 27, MBUTTON_GM_FULL, EndMenu, '\033'}; + EndScenarioMenuItems[0].d.text = i0; + EndScenarioMenuItems[1].d.button = i1; + EndScenarioMenuItems[2].d.button = i2; + EndScenarioMenuItems[3].d.button = i3; + EndScenarioMenuItems[4].d.button = i4; + EndScenarioMenuItems[5].d.button = i5; +} /** ** Items for the SelectScen Menu @@ -437,68 +462,78 @@ global MapInfo *ScenSelectPudInfo; /// Selected pud info ** @todo FIXME: Configure with CCL. */ local Menuitem ScenSelectMenuItems[] = { -#ifdef __GNUC__ - { MI_TYPE_TEXT, 176, 8, 0, LargeFont, ScenSelectInit, NULL, - { text:{ "Select scenario", MI_TFLAGS_CENTERED} } }, + { MI_TYPE_TEXT, 176, 8, 0, LargeFont, ScenSelectInit, NULL, NULL }, - { MI_TYPE_LISTBOX, 24, 140, 0, GameFont, ScenSelectLBInit, ScenSelectLBExit, - { listbox:{ NULL, 288, 6*18, MBUTTON_PULLDOWN, ScenSelectLBAction, 0, 0, 0, 0, 6, 0, - (void *)ScenSelectLBRetrieve, ScenSelectOk} } }, - { MI_TYPE_VSLIDER, 312, 140, 0, 0, NULL, NULL, - { vslider:{ 0, 18, 6*18, ScenSelectVSAction, -1, 0, 0, 0, ScenSelectOk} } }, + { MI_TYPE_LISTBOX, 24, 140, 0, GameFont, ScenSelectLBInit, ScenSelectLBExit, NULL }, + { MI_TYPE_VSLIDER, 312, 140, 0, 0, NULL, NULL, NULL }, - { MI_TYPE_BUTTON, 48, 318, MenuButtonSelected, LargeFont, NULL, NULL, - { button:{ "OK", 106, 27, MBUTTON_GM_HALF, ScenSelectOk, 0} } }, - { MI_TYPE_BUTTON, 198, 318, 0, LargeFont, NULL, NULL, - { button:{ "Cancel", 106, 27, MBUTTON_GM_HALF, ScenSelectCancel, 0} } }, + { MI_TYPE_BUTTON, 48, 318, MenuButtonSelected, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 198, 318, 0, LargeFont, NULL, NULL, NULL }, - { MI_TYPE_TEXT, 132, 40, 0, LargeFont, NULL, NULL, - { text:{ "Type:", MI_TFLAGS_RALIGN} } }, - { MI_TYPE_PULLDOWN, 140, 40, 0, GameFont, NULL, NULL, - { pulldown:{ ssmtoptions, 192, 20, MBUTTON_PULLDOWN, ScenSelectTPMSAction, 2, 1, 1, 0, 0} } }, - { MI_TYPE_TEXT, 132, 80, 0, LargeFont, NULL, NULL, - { text:{ "Map size:", MI_TFLAGS_RALIGN} } }, - { MI_TYPE_PULLDOWN, 140, 80, 0, GameFont, NULL, NULL, - { pulldown:{ ssmsoptions, 192, 20, MBUTTON_PULLDOWN, ScenSelectTPMSAction, 8, 0, 0, 0, 0} } }, - { MI_TYPE_BUTTON, 22, 112, 0, GameFont, NULL, NULL, - { button:{ NULL, 36, 24, MBUTTON_FOLDER, ScenSelectFolder, 0} } }, -#else - { 0 } -#endif + { MI_TYPE_TEXT, 132, 40, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_PULLDOWN, 140, 40, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 132, 80, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_PULLDOWN, 140, 80, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 22, 112, 0, GameFont, NULL, NULL, NULL }, }; +local void InitScenSelectMenuItems() { + MenuitemText i0 = { "Select scenario", MI_TFLAGS_CENTERED}; + + MenuitemListbox i1 = { NULL, 288, 6*18, MBUTTON_PULLDOWN, ScenSelectLBAction, 0, 0, 0, 0, 6, 0, + (void *)ScenSelectLBRetrieve, ScenSelectOk}; + MenuitemVslider i2 = { 0, 18, 6*18, ScenSelectVSAction, -1, 0, 0, 0, ScenSelectOk}; + + MenuitemButton i3 = { "OK", 106, 27, MBUTTON_GM_HALF, ScenSelectOk, 0}; + MenuitemButton i4 = { "Cancel", 106, 27, MBUTTON_GM_HALF, ScenSelectCancel, 0}; + + MenuitemText i5 = { "Type:", MI_TFLAGS_RALIGN}; + MenuitemPulldown i6 = { ssmtoptions, 192, 20, MBUTTON_PULLDOWN, ScenSelectTPMSAction, 2, 1, 1, 0, 0}; + MenuitemText i7 = { "Map size:", MI_TFLAGS_RALIGN}; + MenuitemPulldown i8 = { ssmsoptions, 192, 20, MBUTTON_PULLDOWN, ScenSelectTPMSAction, 8, 0, 0, 0, 0}; + MenuitemButton i9 = { NULL, 36, 24, MBUTTON_FOLDER, ScenSelectFolder, 0}; + ScenSelectMenuItems[0].d.text = i0; + ScenSelectMenuItems[1].d.listbox = i1; + ScenSelectMenuItems[2].d.vslider = i2; + ScenSelectMenuItems[3].d.button = i3; + ScenSelectMenuItems[4].d.button = i4; + ScenSelectMenuItems[5].d.text = i5; + ScenSelectMenuItems[6].d.pulldown = i6; + ScenSelectMenuItems[7].d.text = i7; + ScenSelectMenuItems[8].d.pulldown = i8; + ScenSelectMenuItems[9].d.button = i9; +} /** ** Items for the Program Start Menu */ local Menuitem PrgStartMenuItems[] = { -#ifdef __GNUC__ - { MI_TYPE_DRAWFUNC, 0, 0, 0, GameFont, PrgStartInit, NULL, - { drawfunc:{ NameLineDrawFunc } } }, - { MI_TYPE_BUTTON, 208, 180 + 36 * 0, 0, LargeFont, NULL, NULL, - { button:{ "~!Single Player Game", 224, 27, - MBUTTON_GM_FULL, SinglePlayerGameMenu, 's'} } }, - { MI_TYPE_BUTTON, 208, 180 + 36 * 1, 0, LargeFont, NULL, NULL, - { button:{ "~!Multi Player Game", 224, 27, - MBUTTON_GM_FULL, MultiPlayerGameMenu, 'm'} } }, - { MI_TYPE_BUTTON, 208, 180 + 36 * 2, 0, LargeFont, NULL, NULL, - { button:{ "~!Campaign Game", 224, 27, - MBUTTON_GM_FULL, CampaignGameMenu, 'c'} } }, - { MI_TYPE_BUTTON, 208, 180 + 36 * 3, MenuButtonDisabled, LargeFont, NULL, NULL, - { button:{ "~!Load Game", 224, 27, - MBUTTON_GM_FULL, GameMenuLoad, 'l'} } }, - { MI_TYPE_BUTTON, 208, 180 + 36 * 4, MenuButtonDisabled, LargeFont, NULL, NULL, - { button:{ "~!Options", 224, 27, - MBUTTON_GM_FULL, GameGlobalOptionsMenu, 'o'} } }, - { MI_TYPE_BUTTON, 208, 180 + 36 * 5, 0, LargeFont, NULL, NULL, - { button:{ "S~!how Credits", 224, 27, - MBUTTON_GM_FULL, GameShowCredits, 'h'} } }, - { MI_TYPE_BUTTON, 208, 180 + 36 * 6, 0, LargeFont, NULL, NULL, - { button:{ "E~!xit Program", 224, 27, - MBUTTON_GM_FULL, GameMenuExit, 'x'} } }, -#else - { 0 } -#endif + { MI_TYPE_DRAWFUNC, 0, 0, 0, GameFont, PrgStartInit, NULL, NULL }, + { MI_TYPE_BUTTON, 208, 180 + 36 * 0, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 208, 180 + 36 * 1, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 208, 180 + 36 * 2, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 208, 180 + 36 * 3, MenuButtonDisabled, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 208, 180 + 36 * 4, MenuButtonDisabled, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 208, 180 + 36 * 5, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 208, 180 + 36 * 6, 0, LargeFont, NULL, NULL, NULL }, }; +local void InitPrgStartMenuItems() { + MenuitemDrawfunc i0 = { NameLineDrawFunc }; + MenuitemButton i1 = { "~!Single Player Game", 224, 27, MBUTTON_GM_FULL, SinglePlayerGameMenu, 's'}; + MenuitemButton i2 = { "~!Multi Player Game", 224, 27, MBUTTON_GM_FULL, MultiPlayerGameMenu, 'm'}; + MenuitemButton i3 = { "~!Campaign Game", 224, 27, MBUTTON_GM_FULL, CampaignGameMenu, 'c'}; + MenuitemButton i4 = { "~!Load Game", 224, 27, MBUTTON_GM_FULL, GameMenuLoad, 'l'}; + MenuitemButton i5 = { "~!Options", 224, 27, MBUTTON_GM_FULL, GameGlobalOptionsMenu, 'o'}; + MenuitemButton i6 = { "S~!how Credits", 224, 27, MBUTTON_GM_FULL, GameShowCredits, 'h'}; + MenuitemButton i7 = { "E~!xit Program", 224, 27, MBUTTON_GM_FULL, GameMenuExit, 'x'}; + PrgStartMenuItems[0].d.drawfunc = i0; + PrgStartMenuItems[1].d.button = i1; + PrgStartMenuItems[2].d.button = i2; + PrgStartMenuItems[3].d.button = i3; + PrgStartMenuItems[4].d.button = i4; + PrgStartMenuItems[5].d.button = i5; + PrgStartMenuItems[6].d.button = i6; + PrgStartMenuItems[7].d.button = i7; +} /** ** Items for the Custom Game Setup Menu @@ -560,683 +595,828 @@ local unsigned char *mgptsoptions[] = { ** Single player custom game menu. */ local Menuitem CustomGameMenuItems[] = { -#ifdef __GNUC__ - { MI_TYPE_DRAWFUNC, 0, 0, 0, GameFont, GameSetupInit, NULL, - { drawfunc:{ GameDrawFunc } } }, - { MI_TYPE_TEXT, 640/2+12, 192, 0, LargeFont, NULL, NULL, - { text:{ "~<Single Player Game Setup~>", MI_TFLAGS_CENTERED} } }, - { MI_TYPE_BUTTON, 640-224-16, 360, 0, LargeFont, NULL, NULL, - { button:{ "S~!elect Scenario", 224, 27, MBUTTON_GM_FULL, ScenSelectMenu, 'e'} } }, - { MI_TYPE_BUTTON, 640-224-16, 360+36, 0, LargeFont, NULL, NULL, - { button:{ "~!Start Game", 224, 27, MBUTTON_GM_FULL, CustomGameStart, 's'} } }, - { MI_TYPE_BUTTON, 640-224-16, 360+36+36, 0, LargeFont, NULL, NULL, - { button:{ "~!Cancel Game", 224, 27, MBUTTON_GM_FULL, GameCancel, 'c'} } }, - { MI_TYPE_TEXT, 40, 10+240-20, 0, GameFont, NULL, NULL, - { text:{ "~<Your Race:~>", 0} } }, - { MI_TYPE_PULLDOWN, 40, 10+240, 0, GameFont, NULL, NULL, - { pulldown:{ rcsoptions, 152, 20, MBUTTON_PULLDOWN, GameRCSAction, 3, 2, 2, 0, 0} } }, - { MI_TYPE_TEXT, 220, 10+240-20, 0, GameFont, NULL, NULL, - { text:{ "~<Resources:~>", 0} } }, - { MI_TYPE_PULLDOWN, 220, 10+240, 0, GameFont, NULL, NULL, - { pulldown:{ resoptions, 152, 20, MBUTTON_PULLDOWN, GameRESAction, 4, 0, 0, 0, 0} } }, - { MI_TYPE_TEXT, 640-224-16, 10+240-20, 0, GameFont, NULL, NULL, - { text:{ "~<Units:~>", 0} } }, - { MI_TYPE_PULLDOWN, 640-224-16, 10+240, 0, GameFont, NULL, NULL, - { pulldown:{ unsoptions, 190, 20, MBUTTON_PULLDOWN, GameUNSAction, 2, 0, 0, 0, 0} } }, - { MI_TYPE_TEXT, 40, 10+300-20, 0, GameFont, NULL, NULL, - { text:{ "~<Opponents:~>", 0} } }, - { MI_TYPE_PULLDOWN, 40, 10+300, 0, GameFont, NULL, NULL, - { pulldown:{ cgopsoptions, 152, 20, MBUTTON_PULLDOWN, CustomGameOPSAction, 8, 0, 0, 0, 0} } }, - { MI_TYPE_TEXT, 220, 10+300-20, 0, GameFont, NULL, NULL, - { text:{ "~<Map Tileset:~>", 0} } }, - { MI_TYPE_PULLDOWN, 220, 10+300, 0, GameFont, NULL, NULL, - { pulldown:{ tssoptions, 152, 20, MBUTTON_PULLDOWN, GameTSSAction, 5, 0, 0, 0, 0} } }, -#else - { 0 } -#endif + { MI_TYPE_DRAWFUNC, 0, 0, 0, GameFont, GameSetupInit, NULL, NULL }, + { MI_TYPE_TEXT, 640/2+12, 192, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 640-224-16, 360, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 640-224-16, 360+36, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 640-224-16, 360+36+36, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 40, 10+240-20, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_PULLDOWN, 40, 10+240, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 220, 10+240-20, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_PULLDOWN, 220, 10+240, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 640-224-16, 10+240-20, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_PULLDOWN, 640-224-16, 10+240, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 40, 10+300-20, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_PULLDOWN, 40, 10+300, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 220, 10+300-20, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_PULLDOWN, 220, 10+300, 0, GameFont, NULL, NULL, NULL }, }; +local void InitCustomGameMenuItems() { + MenuitemDrawfunc i0 = { GameDrawFunc }; + MenuitemText i1 = { "~<Single Player Game Setup~>", MI_TFLAGS_CENTERED}; + MenuitemButton i2 = { "S~!elect Scenario", 224, 27, MBUTTON_GM_FULL, ScenSelectMenu, 'e'}; + MenuitemButton i3 = { "~!Start Game", 224, 27, MBUTTON_GM_FULL, CustomGameStart, 's'}; + MenuitemButton i4 = { "~!Cancel Game", 224, 27, MBUTTON_GM_FULL, GameCancel, 'c'}; + MenuitemText i5 = { "~<Your Race:~>", 0}; + MenuitemPulldown i6 = { rcsoptions, 152, 20, MBUTTON_PULLDOWN, GameRCSAction, 3, 2, 2, 0, 0}; + MenuitemText i7 = { "~<Resources:~>", 0}; + MenuitemPulldown i8 = { resoptions, 152, 20, MBUTTON_PULLDOWN, GameRESAction, 4, 0, 0, 0, 0}; + MenuitemText i9 = { "~<Units:~>", 0}; + MenuitemPulldown i10 = { unsoptions, 190, 20, MBUTTON_PULLDOWN, GameUNSAction, 2, 0, 0, 0, 0}; + MenuitemText i11 = { "~<Opponents:~>", 0}; + MenuitemPulldown i12 = { cgopsoptions, 152, 20, MBUTTON_PULLDOWN, CustomGameOPSAction, 8, 0, 0, 0, 0}; + MenuitemText i13 = { "~<Map Tileset:~>", 0}; + MenuitemPulldown i14 = { tssoptions, 152, 20, MBUTTON_PULLDOWN, GameTSSAction, 5, 0, 0, 0, 0}; + CustomGameMenuItems[0].d.drawfunc = i0; + CustomGameMenuItems[1].d.text = i1; + CustomGameMenuItems[2].d.button = i2; + CustomGameMenuItems[3].d.button = i3; + CustomGameMenuItems[4].d.button = i4; + CustomGameMenuItems[5].d.text = i5; + CustomGameMenuItems[6].d.pulldown = i6; + CustomGameMenuItems[7].d.text = i7; + CustomGameMenuItems[8].d.pulldown = i8; + CustomGameMenuItems[9].d.text = i9; + CustomGameMenuItems[10].d.pulldown = i10; + CustomGameMenuItems[11].d.text = i11; + CustomGameMenuItems[12].d.pulldown = i12; + CustomGameMenuItems[13].d.text = i13; + CustomGameMenuItems[14].d.pulldown = i14; +} /** ** Items for the Enter Name Menu */ local Menuitem EnterNameMenuItems[] = { -#ifdef __GNUC__ - { MI_TYPE_TEXT, 144, 11, 0, GameFont, NULL, NULL, - { text:{ "Enter your name:", MI_TFLAGS_CENTERED} } }, - { MI_TYPE_INPUT, 40, 38, 0, GameFont, NULL, NULL, - { input:{ NULL, 212, 20, MBUTTON_PULLDOWN, EnterNameAction, 0, 0} } }, - { MI_TYPE_BUTTON, 24, 80, MenuButtonSelected, LargeFont, NULL, NULL, - { button:{ "~!OK", 106, 27, MBUTTON_GM_HALF, EndMenu, 'o'} } }, - { MI_TYPE_BUTTON, 154, 80, 0, LargeFont, NULL, NULL, - { button:{ "~!Cancel", 106, 27, MBUTTON_GM_HALF, EnterNameCancel, 'c'} } }, -#else - { 0 } -#endif + { MI_TYPE_TEXT, 144, 11, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_INPUT, 40, 38, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 24, 80, MenuButtonSelected, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 154, 80, 0, LargeFont, NULL, NULL, NULL }, }; +local void InitEnterNameMenuItems() { + MenuitemText i0 = { "Enter your name:", MI_TFLAGS_CENTERED}; + MenuitemInput i1 = { NULL, 212, 20, MBUTTON_PULLDOWN, EnterNameAction, 0, 0}; + MenuitemButton i2 = { "~!OK", 106, 27, MBUTTON_GM_HALF, EndMenu, 'o'}; + MenuitemButton i3 = { "~!Cancel", 106, 27, MBUTTON_GM_HALF, EnterNameCancel, 'c'}; + EnterNameMenuItems[0].d.text = i0; + EnterNameMenuItems[1].d.input = i1; + EnterNameMenuItems[2].d.button = i2; + EnterNameMenuItems[3].d.button = i3; +} /** ** Items for the Enter Server Menu */ local Menuitem EnterServerIPMenuItems[] = { -#ifdef __GNUC__ - { MI_TYPE_TEXT, 144, 11, 0, GameFont, NULL, NULL, - { text:{ "Enter server IP-address:", MI_TFLAGS_CENTERED} } }, - { MI_TYPE_INPUT, 40, 38, 0, GameFont, NULL, NULL, - { input:{ NULL, 212, 20, MBUTTON_PULLDOWN, EnterServerIPAction, 0, 0} } }, - { MI_TYPE_BUTTON, 24, 80, MenuButtonDisabled, LargeFont, NULL, NULL, - { button:{ "~!OK", 106, 27, MBUTTON_GM_HALF, EndMenu, 'o'} } }, - { MI_TYPE_BUTTON, 154, 80, MenuButtonSelected, LargeFont, NULL, NULL, - { button:{ "~!Cancel", 106, 27, MBUTTON_GM_HALF, EnterServerIPCancel, 'c'} } }, -#else - { 0 } -#endif + { MI_TYPE_TEXT, 144, 11, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_INPUT, 40, 38, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 24, 80, MenuButtonDisabled, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 154, 80, MenuButtonSelected, LargeFont, NULL, NULL, NULL }, }; +local void InitEnterServerIPMenuItems() { + MenuitemText i0 = { "Enter server IP-address:", MI_TFLAGS_CENTERED}; + MenuitemInput i1 = { NULL, 212, 20, MBUTTON_PULLDOWN, EnterServerIPAction, 0, 0}; + MenuitemButton i2 = { "~!OK", 106, 27, MBUTTON_GM_HALF, EndMenu, 'o'}; + MenuitemButton i3 = { "~!Cancel", 106, 27, MBUTTON_GM_HALF, EnterServerIPCancel, 'c'}; + EnterServerIPMenuItems[0].d.text = i0; + EnterServerIPMenuItems[1].d.input = i1; + EnterServerIPMenuItems[2].d.button = i2; + EnterServerIPMenuItems[3].d.button = i3; +} /** ** Items for the Net Create Join Menu */ local Menuitem NetCreateJoinMenuItems[] = { -#ifdef __GNUC__ - { MI_TYPE_BUTTON, 208, 320, 0, LargeFont, NULL/*StartMenusSetBackground*/, NULL, - { button:{ "~!Join Game", 224, 27, MBUTTON_GM_FULL, JoinNetGameMenu, 'j'} } }, - { MI_TYPE_BUTTON, 208, 320 + 36, 0, LargeFont, NULL, NULL, - { button:{ "~!Create Game", 224, 27, MBUTTON_GM_FULL, CreateNetGameMenu, 'c'} } }, - { MI_TYPE_BUTTON, 208, 320 + 36 + 36, 0, LargeFont, NULL, NULL, - { button:{ "~!Previous Menu", 224, 27, MBUTTON_GM_FULL, EndMenu, 'p'} } }, -#else - { 0 } -#endif + { MI_TYPE_BUTTON, 208, 320, 0, LargeFont, NULL/*StartMenusSetBackground*/, NULL, NULL }, + { MI_TYPE_BUTTON, 208, 320 + 36, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 208, 320 + 36 + 36, 0, LargeFont, NULL, NULL, NULL }, }; +local void InitNetCreateJoinMenuItems() { + MenuitemButton i0 = { "~!Join Game", 224, 27, MBUTTON_GM_FULL, JoinNetGameMenu, 'j'}; + MenuitemButton i1 = { "~!Create Game", 224, 27, MBUTTON_GM_FULL, CreateNetGameMenu, 'c'}; + MenuitemButton i2 = { "~!Previous Menu", 224, 27, MBUTTON_GM_FULL, EndMenu, 'p'}; + NetCreateJoinMenuItems[0].d.button = i0; + NetCreateJoinMenuItems[1].d.button = i1; + NetCreateJoinMenuItems[2].d.button = i2; +} /** ** Items for the Net Multiplayer Setup Menu */ local Menuitem NetMultiButtonStorage[] = { -#ifdef __GNUC__ - { MI_TYPE_PULLDOWN, 40, 32, 0, GameFont, NULL, NULL, - { pulldown:{ mgptsoptions, 172, 20, MBUTTON_PULLDOWN, - MultiGamePTSAction, 3, -1, 0, 0, 0} } }, - { MI_TYPE_DRAWFUNC, 40, 32, 0, GameFont, NULL, NULL, - { drawfunc:{ NetMultiPlayerDrawFunc } } }, -#else - { 0 } -#endif + { MI_TYPE_PULLDOWN, 40, 32, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_DRAWFUNC, 40, 32, 0, GameFont, NULL, NULL, NULL }, }; +local void InitNetMultiButtonStorage() { + MenuitemPulldown i0 = { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, MultiGamePTSAction, 3, -1, 0, 0, 0}; + MenuitemDrawfunc i1 = { NetMultiPlayerDrawFunc }; + NetMultiButtonStorage[0].d.pulldown = i0; + NetMultiButtonStorage[1].d.drawfunc = i1; +} /** ** Multi player custom game menu (server side). */ local Menuitem NetMultiSetupMenuItems[] = { -#ifdef __GNUC__ - { MI_TYPE_DRAWFUNC, 0, 0, 0, GameFont, MultiGameSetupInit, NULL, - { drawfunc:{ MultiGameDrawFunc } } }, - { MI_TYPE_TEXT, 640/2+12, 8, 0, LargeFont, NULL, NULL, - { text:{ "~<Multi Player Setup~>", MI_TFLAGS_CENTERED} } }, - { MI_TYPE_BUTTON, 640-224-16, 360, 0, LargeFont, NULL, NULL, - { button:{ "S~!elect Scenario", 224, 27, MBUTTON_GM_FULL, MultiScenSelectMenu, 'e'} } }, - { MI_TYPE_BUTTON, 640-224-16, 360+36, MenuButtonDisabled, LargeFont, NULL, NULL, - { button:{ "~!Start Game", 224, 27, MBUTTON_GM_FULL, MultiGameStart, 's'} } }, - { MI_TYPE_BUTTON, 640-224-16, 360+36+36, 0, LargeFont, NULL, NULL, - { button:{ "~!Cancel Game", 224, 27, MBUTTON_GM_FULL, MultiGameCancel, 'c'} } }, + { MI_TYPE_DRAWFUNC, 0, 0, 0, GameFont, MultiGameSetupInit, NULL, NULL }, + { MI_TYPE_TEXT, 640/2+12, 8, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 640-224-16, 360, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 640-224-16, 360+36, MenuButtonDisabled, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 640-224-16, 360+36+36, 0, LargeFont, NULL, NULL, NULL }, // 8+7 player slots (content here is overwritten!) #define SERVER_PLAYER_STATE 5 - { MI_TYPE_PULLDOWN, 40, 32+22*0, 0, GameFont, NULL, NULL, - { pulldown: - { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0} } }, - { MI_TYPE_PULLDOWN, 40, 32+22*1, 0, GameFont, NULL, NULL, - { pulldown: - { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0} } }, - { MI_TYPE_PULLDOWN, 40, 32+22*2, 0, GameFont, NULL, NULL, - { pulldown: - { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0} } }, - { MI_TYPE_PULLDOWN, 40, 32+22*3, 0, GameFont, NULL, NULL, - { pulldown: - { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0} } }, - { MI_TYPE_PULLDOWN, 40, 32+22*4, 0, GameFont, NULL, NULL, - { pulldown: - { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0} } }, - { MI_TYPE_PULLDOWN, 40, 32+22*5, 0, GameFont, NULL, NULL, - { pulldown: - { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0} } }, - { MI_TYPE_PULLDOWN, 40, 32+22*6, 0, GameFont, NULL, NULL, - { pulldown: - { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0} } }, - { MI_TYPE_PULLDOWN, 40, 32+22*7, 0, GameFont, NULL, NULL, - { pulldown: - { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0} } }, - { MI_TYPE_PULLDOWN, 360, 32+22*0, 0, GameFont, NULL, NULL, - { pulldown: - { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0} } }, - { MI_TYPE_PULLDOWN, 360, 32+22*1, 0, GameFont, NULL, NULL, - { pulldown: - { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0} } }, - { MI_TYPE_PULLDOWN, 360, 32+22*2, 0, GameFont, NULL, NULL, - { pulldown: - { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0} } }, - { MI_TYPE_PULLDOWN, 360, 32+22*3, 0, GameFont, NULL, NULL, - { pulldown: - { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0} } }, - { MI_TYPE_PULLDOWN, 360, 32+22*4, 0, GameFont, NULL, NULL, - { pulldown: - { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0} } }, - { MI_TYPE_PULLDOWN, 360, 32+22*5, 0, GameFont, NULL, NULL, - { pulldown: - { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0} } }, - { MI_TYPE_PULLDOWN, 360, 32+22*6, 0, GameFont, NULL, NULL, - { pulldown: - { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0} } }, + { MI_TYPE_PULLDOWN, 40, 32+22*0, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_PULLDOWN, 40, 32+22*1, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_PULLDOWN, 40, 32+22*2, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_PULLDOWN, 40, 32+22*3, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_PULLDOWN, 40, 32+22*4, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_PULLDOWN, 40, 32+22*5, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_PULLDOWN, 40, 32+22*6, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_PULLDOWN, 40, 32+22*7, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_PULLDOWN, 360, 32+22*0, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_PULLDOWN, 360, 32+22*1, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_PULLDOWN, 360, 32+22*2, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_PULLDOWN, 360, 32+22*3, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_PULLDOWN, 360, 32+22*4, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_PULLDOWN, 360, 32+22*5, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_PULLDOWN, 360, 32+22*6, 0, GameFont, NULL, NULL, NULL }, - { MI_TYPE_TEXT, 40, 10+240-20, 0, GameFont, NULL, NULL, - { text:{ "~<Your Race:~>", 0} } }, - { MI_TYPE_PULLDOWN, 40, 10+240, 0, GameFont, NULL, NULL, - { pulldown:{ rcsoptions, 152, 20, MBUTTON_PULLDOWN, GameRCSAction, - 3, 2, 2, 0, 0} } }, - { MI_TYPE_TEXT, 220, 10+240-20, 0, GameFont, NULL, NULL, - { text:{ "~<Resources:~>", 0} } }, - { MI_TYPE_PULLDOWN, 220, 10+240, 0, GameFont, NULL, NULL, - { pulldown:{ resoptions, 152, 20, MBUTTON_PULLDOWN, GameRESAction, - 4, 0, 0, 0, 0} } }, - { MI_TYPE_TEXT, 640-224-16, 10+240-20, 0, GameFont, NULL, NULL, - { text:{ "~<Units:~>", 0} } }, - { MI_TYPE_PULLDOWN, 640-224-16, 10+240, 0, GameFont, NULL, NULL, - { pulldown:{ unsoptions, 190, 20, MBUTTON_PULLDOWN, GameUNSAction, - 2, 0, 0, 0, 0} } }, - { MI_TYPE_TEXT, 40, 10+300-20, 0, GameFont, NULL, NULL, - { text:{ "~<Fog of War:~>", 0} } }, - { MI_TYPE_PULLDOWN, 40, 10+300, 0, GameFont, NULL, NULL, - { pulldown:{ mgfwsoptions, 152, 20, MBUTTON_PULLDOWN, - MultiGameFWSAction, 2, 0, 0, 0, 0} } }, - { MI_TYPE_TEXT, 220, 10+300-20, 0, GameFont, NULL, NULL, - { text:{ "~<Map Tileset:~>", 0} } }, - { MI_TYPE_PULLDOWN, 220, 10+300, 0, GameFont, NULL, NULL, - { pulldown:{ tssoptions, 152, 20, MBUTTON_PULLDOWN, GameTSSAction, - 5, 0, 0, 0, 0} } }, + { MI_TYPE_TEXT, 40, 10+240-20, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_PULLDOWN, 40, 10+240, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 220, 10+240-20, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_PULLDOWN, 220, 10+240, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 640-224-16, 10+240-20, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_PULLDOWN, 640-224-16, 10+240, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 40, 10+300-20, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_PULLDOWN, 40, 10+300, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 220, 10+300-20, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_PULLDOWN, 220, 10+300, 0, GameFont, NULL, NULL, NULL }, // 7+7 player ready buttons #define SERVER_PLAYER_READY 30 - { MI_TYPE_GEM, 10, 32+22*1, 0, LargeFont, NULL, NULL, - { gem:{ MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_SQUARE, NULL} } }, - { MI_TYPE_GEM, 10, 32+22*2, 0, LargeFont, NULL, NULL, - { gem:{ MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_SQUARE, NULL} } }, - { MI_TYPE_GEM, 10, 32+22*3, 0, LargeFont, NULL, NULL, - { gem:{ MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_SQUARE, NULL} } }, - { MI_TYPE_GEM, 10, 32+22*4, 0, LargeFont, NULL, NULL, - { gem:{ MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_SQUARE, NULL} } }, - { MI_TYPE_GEM, 10, 32+22*5, 0, LargeFont, NULL, NULL, - { gem:{ MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_SQUARE, NULL} } }, - { MI_TYPE_GEM, 10, 32+22*6, 0, LargeFont, NULL, NULL, - { gem:{ MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_SQUARE, NULL} } }, - { MI_TYPE_GEM, 10, 32+22*7, 0, LargeFont, NULL, NULL, - { gem:{ MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_SQUARE, NULL} } }, + { MI_TYPE_GEM, 10, 32+22*1, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_GEM, 10, 32+22*2, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_GEM, 10, 32+22*3, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_GEM, 10, 32+22*4, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_GEM, 10, 32+22*5, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_GEM, 10, 32+22*6, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_GEM, 10, 32+22*7, 0, LargeFont, NULL, NULL, NULL }, - { MI_TYPE_GEM, 330, 32+22*0, 0, LargeFont, NULL, NULL, - { gem:{ MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_SQUARE, NULL} } }, - { MI_TYPE_GEM, 330, 32+22*1, 0, LargeFont, NULL, NULL, - { gem:{ MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_SQUARE, NULL} } }, - { MI_TYPE_GEM, 330, 32+22*2, 0, LargeFont, NULL, NULL, - { gem:{ MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_SQUARE, NULL} } }, - { MI_TYPE_GEM, 330, 32+22*3, 0, LargeFont, NULL, NULL, - { gem:{ MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_SQUARE, NULL} } }, - { MI_TYPE_GEM, 330, 32+22*4, 0, LargeFont, NULL, NULL, - { gem:{ MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_SQUARE, NULL} } }, - { MI_TYPE_GEM, 330, 32+22*5, 0, LargeFont, NULL, NULL, - { gem:{ MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_SQUARE, NULL} } }, - { MI_TYPE_GEM, 330, 32+22*6, 0, LargeFont, NULL, NULL, - { gem:{ MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_SQUARE, NULL} } }, + { MI_TYPE_GEM, 330, 32+22*0, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_GEM, 330, 32+22*1, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_GEM, 330, 32+22*2, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_GEM, 330, 32+22*3, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_GEM, 330, 32+22*4, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_GEM, 330, 32+22*5, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_GEM, 330, 32+22*6, 0, LargeFont, NULL, NULL, NULL }, // FIXME: Slot 15 is reserved for neutral computer //{ MI_TYPE_GEM, 330, 32+22*7, 0, LargeFont, NULL, NULL, // { gem:{ MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_SQUARE, NULL} } }, // 7+7 player lag buttons #define SERVER_PLAYER_LAG 44 - { MI_TYPE_GEM, 218, 32+22*1, 0, LargeFont, NULL, NULL, - { gem:{ MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_ROUND, NULL} } }, - { MI_TYPE_GEM, 218, 32+22*2, 0, LargeFont, NULL, NULL, - { gem:{ MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_ROUND, NULL} } }, - { MI_TYPE_GEM, 218, 32+22*3, 0, LargeFont, NULL, NULL, - { gem:{ MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_ROUND, NULL} } }, - { MI_TYPE_GEM, 218, 32+22*4, 0, LargeFont, NULL, NULL, - { gem:{ MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_ROUND, NULL} } }, - { MI_TYPE_GEM, 218, 32+22*5, 0, LargeFont, NULL, NULL, - { gem:{ MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_ROUND, NULL} } }, - { MI_TYPE_GEM, 218, 32+22*6, 0, LargeFont, NULL, NULL, - { gem:{ MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_ROUND, NULL} } }, - { MI_TYPE_GEM, 218, 32+22*7, 0, LargeFont, NULL, NULL, - { gem:{ MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_ROUND, NULL} } }, + { MI_TYPE_GEM, 218, 32+22*1, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_GEM, 218, 32+22*2, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_GEM, 218, 32+22*3, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_GEM, 218, 32+22*4, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_GEM, 218, 32+22*5, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_GEM, 218, 32+22*6, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_GEM, 218, 32+22*7, 0, LargeFont, NULL, NULL, NULL }, - { MI_TYPE_GEM, 538, 32+22*0, 0, LargeFont, NULL, NULL, - { gem:{ MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_ROUND, NULL} } }, - { MI_TYPE_GEM, 538, 32+22*1, 0, LargeFont, NULL, NULL, - { gem:{ MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_ROUND, NULL} } }, - { MI_TYPE_GEM, 538, 32+22*2, 0, LargeFont, NULL, NULL, - { gem:{ MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_ROUND, NULL} } }, - { MI_TYPE_GEM, 538, 32+22*3, 0, LargeFont, NULL, NULL, - { gem:{ MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_ROUND, NULL} } }, - { MI_TYPE_GEM, 538, 32+22*4, 0, LargeFont, NULL, NULL, - { gem:{ MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_ROUND, NULL} } }, - { MI_TYPE_GEM, 538, 32+22*5, 0, LargeFont, NULL, NULL, - { gem:{ MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_ROUND, NULL} } }, - { MI_TYPE_GEM, 538, 32+22*6, 0, LargeFont, NULL, NULL, - { gem:{ MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_ROUND, NULL} } }, + { MI_TYPE_GEM, 538, 32+22*0, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_GEM, 538, 32+22*1, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_GEM, 538, 32+22*2, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_GEM, 538, 32+22*3, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_GEM, 538, 32+22*4, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_GEM, 538, 32+22*5, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_GEM, 538, 32+22*6, 0, LargeFont, NULL, NULL, NULL }, // FIXME: Slot 15 is reserved for neutral computer //{ MI_TYPE_GEM, 538, 32+22*7, 0, LargeFont, NULL, NULL, // { gem:{ MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_ROUND, NULL} } }, -#else -#define SERVER_PLAYER_STATE 5 -#define SERVER_PLAYER_READY 30 -#define SERVER_PLAYER_LAG 44 - { 0 } -#endif }; +local void InitNetMultiSetupMenuItems() { + MenuitemDrawfunc i0 = { MultiGameDrawFunc }; + MenuitemText i1 = { "~<Multi Player Setup~>", MI_TFLAGS_CENTERED}; + MenuitemButton i2 = { "S~!elect Scenario", 224, 27, MBUTTON_GM_FULL, MultiScenSelectMenu, 'e'}; + MenuitemButton i3 = { "~!Start Game", 224, 27, MBUTTON_GM_FULL, MultiGameStart, 's'}; + MenuitemButton i4 = { "~!Cancel Game", 224, 27, MBUTTON_GM_FULL, MultiGameCancel, 'c'}; + + MenuitemPulldown i5 = { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0}; + MenuitemPulldown i6 = { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0}; + MenuitemPulldown i7 = { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0}; + MenuitemPulldown i8 = { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0}; + MenuitemPulldown i9 = { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0}; + MenuitemPulldown i10 = { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0}; + MenuitemPulldown i11 = { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0}; + MenuitemPulldown i12 = { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0}; + MenuitemPulldown i13 = { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0}; + MenuitemPulldown i14 = { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0}; + MenuitemPulldown i15 = { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0}; + MenuitemPulldown i16 = { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0}; + MenuitemPulldown i17 = { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0}; + MenuitemPulldown i18 = { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0}; + MenuitemPulldown i19 = { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0}; + + MenuitemText i20 = { "~<Your Race:~>", 0}; + MenuitemPulldown i21 = { rcsoptions, 152, 20, MBUTTON_PULLDOWN, GameRCSAction, 3, 2, 2, 0, 0}; + MenuitemText i22 = { "~<Resources:~>", 0}; + MenuitemPulldown i23 = { resoptions, 152, 20, MBUTTON_PULLDOWN, GameRESAction, 4, 0, 0, 0, 0}; + MenuitemText i24 = { "~<Units:~>", 0}; + MenuitemPulldown i25 = { unsoptions, 190, 20, MBUTTON_PULLDOWN, GameUNSAction, 2, 0, 0, 0, 0}; + MenuitemText i26 = { "~<Fog of War:~>", 0}; + MenuitemPulldown i27 = { mgfwsoptions, 152, 20, MBUTTON_PULLDOWN, MultiGameFWSAction, 2, 0, 0, 0, 0}; + MenuitemText i28 = { "~<Map Tileset:~>", 0}; + MenuitemPulldown i29 = { tssoptions, 152, 20, MBUTTON_PULLDOWN, GameTSSAction, 5, 0, 0, 0, 0}; + + MenuitemGem i30 = { MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_SQUARE, NULL}; + MenuitemGem i31 = { MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_SQUARE, NULL}; + MenuitemGem i32 = { MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_SQUARE, NULL}; + MenuitemGem i33 = { MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_SQUARE, NULL}; + MenuitemGem i34 = { MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_SQUARE, NULL}; + MenuitemGem i35 = { MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_SQUARE, NULL}; + MenuitemGem i36 = { MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_SQUARE, NULL}; + + MenuitemGem i37 = { MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_SQUARE, NULL}; + MenuitemGem i38 = { MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_SQUARE, NULL}; + MenuitemGem i39 = { MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_SQUARE, NULL}; + MenuitemGem i40 = { MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_SQUARE, NULL}; + MenuitemGem i41 = { MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_SQUARE, NULL}; + MenuitemGem i42 = { MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_SQUARE, NULL}; + MenuitemGem i43 = { MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_SQUARE, NULL}; + + MenuitemGem i44 = { MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_ROUND, NULL}; + MenuitemGem i45 = { MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_ROUND, NULL}; + MenuitemGem i46 = { MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_ROUND, NULL}; + MenuitemGem i47 = { MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_ROUND, NULL}; + MenuitemGem i48 = { MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_ROUND, NULL}; + MenuitemGem i49 = { MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_ROUND, NULL}; + MenuitemGem i50 = { MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_ROUND, NULL}; + + MenuitemGem i51 = { MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_ROUND, NULL}; + MenuitemGem i52 = { MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_ROUND, NULL}; + MenuitemGem i53 = { MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_ROUND, NULL}; + MenuitemGem i54 = { MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_ROUND, NULL}; + MenuitemGem i55 = { MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_ROUND, NULL}; + MenuitemGem i56 = { MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_ROUND, NULL}; + MenuitemGem i57 = { MI_GSTATE_PASSIVE, 18, 18, MBUTTON_GEM_ROUND, NULL}; + + NetMultiSetupMenuItems[0].d.drawfunc = i0; + NetMultiSetupMenuItems[1].d.text = i1; + NetMultiSetupMenuItems[2].d.button = i2; + NetMultiSetupMenuItems[3].d.button = i3; + NetMultiSetupMenuItems[4].d.button = i4; + NetMultiSetupMenuItems[5].d.pulldown = i5; + NetMultiSetupMenuItems[6].d.pulldown = i6; + NetMultiSetupMenuItems[7].d.pulldown = i7; + NetMultiSetupMenuItems[8].d.pulldown = i8; + NetMultiSetupMenuItems[9].d.pulldown = i9; + NetMultiSetupMenuItems[10].d.pulldown = i10; + NetMultiSetupMenuItems[11].d.pulldown = i11; + NetMultiSetupMenuItems[12].d.pulldown = i12; + NetMultiSetupMenuItems[13].d.pulldown = i13; + NetMultiSetupMenuItems[14].d.pulldown = i14; + NetMultiSetupMenuItems[15].d.pulldown = i15; + NetMultiSetupMenuItems[16].d.pulldown = i16; + NetMultiSetupMenuItems[17].d.pulldown = i17; + NetMultiSetupMenuItems[18].d.pulldown = i18; + NetMultiSetupMenuItems[19].d.pulldown = i19; + NetMultiSetupMenuItems[20].d.text = i20; + NetMultiSetupMenuItems[21].d.pulldown = i21; + NetMultiSetupMenuItems[22].d.text = i22; + NetMultiSetupMenuItems[23].d.pulldown = i23; + NetMultiSetupMenuItems[24].d.text = i24; + NetMultiSetupMenuItems[25].d.pulldown = i25; + NetMultiSetupMenuItems[26].d.text = i26; + NetMultiSetupMenuItems[27].d.pulldown = i27; + NetMultiSetupMenuItems[28].d.text = i28; + NetMultiSetupMenuItems[29].d.pulldown = i29; + NetMultiSetupMenuItems[30].d.gem = i30; + NetMultiSetupMenuItems[31].d.gem = i31; + NetMultiSetupMenuItems[32].d.gem = i32; + NetMultiSetupMenuItems[33].d.gem = i33; + NetMultiSetupMenuItems[34].d.gem = i34; + NetMultiSetupMenuItems[35].d.gem = i35; + NetMultiSetupMenuItems[36].d.gem = i36; + NetMultiSetupMenuItems[37].d.gem = i37; + NetMultiSetupMenuItems[38].d.gem = i38; + NetMultiSetupMenuItems[39].d.gem = i39; + NetMultiSetupMenuItems[40].d.gem = i40; + NetMultiSetupMenuItems[41].d.gem = i41; + NetMultiSetupMenuItems[42].d.gem = i42; + NetMultiSetupMenuItems[43].d.gem = i43; + NetMultiSetupMenuItems[44].d.gem = i44; + NetMultiSetupMenuItems[45].d.gem = i45; + NetMultiSetupMenuItems[46].d.gem = i46; + NetMultiSetupMenuItems[47].d.gem = i47; + NetMultiSetupMenuItems[48].d.gem = i48; + NetMultiSetupMenuItems[49].d.gem = i49; + NetMultiSetupMenuItems[50].d.gem = i50; + NetMultiSetupMenuItems[51].d.gem = i51; + NetMultiSetupMenuItems[52].d.gem = i52; + NetMultiSetupMenuItems[53].d.gem = i53; + NetMultiSetupMenuItems[54].d.gem = i54; + NetMultiSetupMenuItems[55].d.gem = i55; + NetMultiSetupMenuItems[56].d.gem = i56; + NetMultiSetupMenuItems[57].d.gem = i57; +} /** ** Multi player client game menu. */ local Menuitem NetMultiClientMenuItems[] = { -#ifdef __GNUC__ - { MI_TYPE_DRAWFUNC, 0, 0, 0, GameFont, MultiGameClientInit, NULL, - { drawfunc:{ MultiGameClientDrawFunc } } }, + { MI_TYPE_DRAWFUNC, 0, 0, 0, GameFont, MultiGameClientInit, NULL, NULL }, - { MI_TYPE_TEXT, 640/2+12, 8, 0, LargeFont, NULL, NULL, - { text:{ "~<Multi Player Game~>", MI_TFLAGS_CENTERED} } }, + { MI_TYPE_TEXT, 640/2+12, 8, 0, LargeFont, NULL, NULL, NULL }, - { MI_TYPE_BUTTON, 640-224-16, 360, 0, LargeFont, NULL, NULL, - { button:{ "~!Ready", 224, 27, MBUTTON_GM_FULL, MultiClientReady, 'r'} } }, - { MI_TYPE_BUTTON, 640-224-16, 360+36, 0, LargeFont, NULL, NULL, - { button:{ "~!Not Ready", 224, 27, MBUTTON_GM_FULL, MultiClientNotReady, 'n'} } }, + { MI_TYPE_BUTTON, 640-224-16, 360, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 640-224-16, 360+36, 0, LargeFont, NULL, NULL, NULL }, - { MI_TYPE_BUTTON, 640-224-16, 360+36+36, 0, LargeFont, NULL, NULL, - { button:{ "~!Cancel Game", 224, 27, MBUTTON_GM_FULL, MultiClientCancel, 'c'} } }, + { MI_TYPE_BUTTON, 640-224-16, 360+36+36, 0, LargeFont, NULL, NULL, NULL }, // 8+7 player slots #define CLIENT_PLAYER_STATE 5 - { MI_TYPE_PULLDOWN, 40, 32, 0, GameFont, NULL, NULL, - { pulldown:{ - mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0} } }, - { MI_TYPE_PULLDOWN, 40, 32+22, 0, GameFont, NULL, NULL, - { pulldown:{ - mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0} } }, - { MI_TYPE_PULLDOWN, 40, 32+22*2, 0, GameFont, NULL, NULL, - { pulldown:{ - mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0} } }, - { MI_TYPE_PULLDOWN, 40, 32+22*3, 0, GameFont, NULL, NULL, - { pulldown:{ - mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0} } }, - { MI_TYPE_PULLDOWN, 40, 32+22*4, 0, GameFont, NULL, NULL, - { pulldown:{ - mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0} } }, - { MI_TYPE_PULLDOWN, 40, 32+22*5, 0, GameFont, NULL, NULL, - { pulldown:{ - mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0} } }, - { MI_TYPE_PULLDOWN, 40, 32+22*6, 0, GameFont, NULL, NULL, - { pulldown:{ - mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0} } }, - { MI_TYPE_PULLDOWN, 40, 32+22*7, 0, GameFont, NULL, NULL, - { pulldown:{ - mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0} } }, - { MI_TYPE_PULLDOWN, 360, 32, 0, GameFont, NULL, NULL, - { pulldown:{ - mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0} } }, - { MI_TYPE_PULLDOWN, 360, 32+22, 0, GameFont, NULL, NULL, - { pulldown:{ - mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0} } }, - { MI_TYPE_PULLDOWN, 360, 32+22*2, 0, GameFont, NULL, NULL, - { pulldown:{ - mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0} } }, - { MI_TYPE_PULLDOWN, 360, 32+22*3, 0, GameFont, NULL, NULL, - { pulldown:{ - mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0} } }, - { MI_TYPE_PULLDOWN, 360, 32+22*4, 0, GameFont, NULL, NULL, - { pulldown:{ - mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0} } }, - { MI_TYPE_PULLDOWN, 360, 32+22*5, 0, GameFont, NULL, NULL, - { pulldown:{ - mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0} } }, - { MI_TYPE_PULLDOWN, 360, 32+22*6, 0, GameFont, NULL, NULL, - { pulldown:{ - mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0} } }, + { MI_TYPE_PULLDOWN, 40, 32, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_PULLDOWN, 40, 32+22, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_PULLDOWN, 40, 32+22*2, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_PULLDOWN, 40, 32+22*3, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_PULLDOWN, 40, 32+22*4, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_PULLDOWN, 40, 32+22*5, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_PULLDOWN, 40, 32+22*6, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_PULLDOWN, 40, 32+22*7, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_PULLDOWN, 360, 32, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_PULLDOWN, 360, 32+22, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_PULLDOWN, 360, 32+22*2, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_PULLDOWN, 360, 32+22*3, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_PULLDOWN, 360, 32+22*4, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_PULLDOWN, 360, 32+22*5, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_PULLDOWN, 360, 32+22*6, 0, GameFont, NULL, NULL, NULL }, - { MI_TYPE_TEXT, 40, 10+240-20, 0, GameFont, NULL, NULL, - { text:{ "~<Your Race:~>", 0} } }, + { MI_TYPE_TEXT, 40, 10+240-20, 0, GameFont, NULL, NULL, NULL }, #define CLIENT_RACE 21 - { MI_TYPE_PULLDOWN, 40, 10+240, 0, GameFont, NULL, NULL, - { pulldown:{ rcsoptions, 152, 20, MBUTTON_PULLDOWN, - MultiClientRCSAction, 3, 2, 2, 0, 0} } }, - { MI_TYPE_TEXT, 220, 10+240-20, 0, GameFont, NULL, NULL, - { text:{ "~<Resources:~>", 0} } }, + { MI_TYPE_PULLDOWN, 40, 10+240, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 220, 10+240-20, 0, GameFont, NULL, NULL, NULL }, #define CLIENT_RESOURCE 23 - { MI_TYPE_PULLDOWN, 220, 10+240, 0, GameFont, NULL, NULL, - { pulldown:{ resoptions, 152, 20, MBUTTON_PULLDOWN, - GameRESAction, 4, 0, 0, 0, MI_PSTATE_PASSIVE} } }, - { MI_TYPE_TEXT, 640-224-16, 10+240-20, 0, GameFont, NULL, NULL, - { text:{ "~<Units:~>", 0} } }, + { MI_TYPE_PULLDOWN, 220, 10+240, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 640-224-16, 10+240-20, 0, GameFont, NULL, NULL, NULL }, #define CLIENT_UNITS 25 - { MI_TYPE_PULLDOWN, 640-224-16, 10+240, 0, GameFont, NULL, NULL, - { pulldown:{ unsoptions, 190, 20, MBUTTON_PULLDOWN, - GameUNSAction, 2, 0, 0, 0, MI_PSTATE_PASSIVE} } }, - { MI_TYPE_TEXT, 40, 10+300-20, 0, GameFont, NULL, NULL, - { text:{ "~<Fog of War:~>", 0} } }, + { MI_TYPE_PULLDOWN, 640-224-16, 10+240, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 40, 10+300-20, 0, GameFont, NULL, NULL, NULL }, #define CLIENT_FOG_OF_WAR 27 - { MI_TYPE_PULLDOWN, 40, 10+300, 0, GameFont, NULL, NULL, - { pulldown:{ mgfwsoptions, 152, 20, MBUTTON_PULLDOWN, - MultiGameFWSAction, 2, 0, 0, 0, MI_PSTATE_PASSIVE} } }, - { MI_TYPE_TEXT, 220, 10+300-20, 0, GameFont, NULL, NULL, - { text:{ "~<Map Tileset:~>", 0} } }, + { MI_TYPE_PULLDOWN, 40, 10+300, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 220, 10+300-20, 0, GameFont, NULL, NULL, NULL }, #define CLIENT_TILESET 29 - { MI_TYPE_PULLDOWN, 220, 10+300, 0, GameFont, NULL, NULL, - { pulldown:{ tssoptions, 152, 20, MBUTTON_PULLDOWN, - GameTSSAction, 5, 0, 0, 0, MI_PSTATE_PASSIVE} } }, + { MI_TYPE_PULLDOWN, 220, 10+300, 0, GameFont, NULL, NULL, NULL }, // 7+7 player state buttons #define CLIENT_PLAYER_READY 30 - { MI_TYPE_GEM, 10, 32+22*1, 0, LargeFont, NULL, NULL, - { gem:{ 0, 18, 18, MBUTTON_GEM_SQUARE, MultiClientGemAction} } }, - { MI_TYPE_GEM, 10, 32+22*2, 0, LargeFont, NULL, NULL, - { gem:{ 0, 18, 18, MBUTTON_GEM_SQUARE, MultiClientGemAction} } }, - { MI_TYPE_GEM, 10, 32+22*3, 0, LargeFont, NULL, NULL, - { gem:{ 0, 18, 18, MBUTTON_GEM_SQUARE, MultiClientGemAction} } }, - { MI_TYPE_GEM, 10, 32+22*4, 0, LargeFont, NULL, NULL, - { gem:{ 0, 18, 18, MBUTTON_GEM_SQUARE, MultiClientGemAction} } }, - { MI_TYPE_GEM, 10, 32+22*5, 0, LargeFont, NULL, NULL, - { gem:{ 0, 18, 18, MBUTTON_GEM_SQUARE, MultiClientGemAction} } }, - { MI_TYPE_GEM, 10, 32+22*6, 0, LargeFont, NULL, NULL, - { gem:{ 0, 18, 18, MBUTTON_GEM_SQUARE, MultiClientGemAction} } }, - { MI_TYPE_GEM, 10, 32+22*7, 0, LargeFont, NULL, NULL, - { gem:{ 0, 18, 18, MBUTTON_GEM_SQUARE, MultiClientGemAction} } }, - { MI_TYPE_GEM, 330, 32+22*0, 0, LargeFont, NULL, NULL, - { gem:{ 0, 18, 18, MBUTTON_GEM_SQUARE, MultiClientGemAction} } }, - { MI_TYPE_GEM, 330, 32+22*1, 0, LargeFont, NULL, NULL, - { gem:{ 0, 18, 18, MBUTTON_GEM_SQUARE, MultiClientGemAction} } }, - { MI_TYPE_GEM, 330, 32+22*2, 0, LargeFont, NULL, NULL, - { gem:{ 0, 18, 18, MBUTTON_GEM_SQUARE, MultiClientGemAction} } }, - { MI_TYPE_GEM, 330, 32+22*3, 0, LargeFont, NULL, NULL, - { gem:{ 0, 18, 18, MBUTTON_GEM_SQUARE, MultiClientGemAction} } }, - { MI_TYPE_GEM, 330, 32+22*4, 0, LargeFont, NULL, NULL, - { gem:{ 0, 18, 18, MBUTTON_GEM_SQUARE, MultiClientGemAction} } }, - { MI_TYPE_GEM, 330, 32+22*5, 0, LargeFont, NULL, NULL, - { gem:{ 0, 18, 18, MBUTTON_GEM_SQUARE, MultiClientGemAction} } }, - { MI_TYPE_GEM, 330, 32+22*6, 0, LargeFont, NULL, NULL, - { gem:{ 0, 18, 18, MBUTTON_GEM_SQUARE, MultiClientGemAction} } }, + { MI_TYPE_GEM, 10, 32+22*1, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_GEM, 10, 32+22*2, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_GEM, 10, 32+22*3, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_GEM, 10, 32+22*4, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_GEM, 10, 32+22*5, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_GEM, 10, 32+22*6, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_GEM, 10, 32+22*7, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_GEM, 330, 32+22*0, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_GEM, 330, 32+22*1, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_GEM, 330, 32+22*2, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_GEM, 330, 32+22*3, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_GEM, 330, 32+22*4, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_GEM, 330, 32+22*5, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_GEM, 330, 32+22*6, 0, LargeFont, NULL, NULL, NULL }, //{ MI_TYPE_GEM, 330, 32+22*7, 0, LargeFont, NULL, NULL, // { gem:{ 0, 18, 18, MBUTTON_GEM_SQUARE, MultiClientGemAction} } }, -#else -#define CLIENT_PLAYER_STATE 5 -#define CLIENT_RACE 21 -#define CLIENT_RESOURCE 23 -#define CLIENT_UNITS 25 -#define CLIENT_FOG_OF_WAR 27 -#define CLIENT_TILESET 29 -#define CLIENT_PLAYER_READY 30 - { 0 } -#endif }; +local void InitNetMultiClientMenuItems() { + MenuitemDrawfunc i0 = { MultiGameClientDrawFunc }; + + MenuitemText i1 = { "~<Multi Player Game~>", MI_TFLAGS_CENTERED}; + + MenuitemButton i2 = { "~!Ready", 224, 27, MBUTTON_GM_FULL, MultiClientReady, 'r'}; + MenuitemButton i3 = { "~!Not Ready", 224, 27, MBUTTON_GM_FULL, MultiClientNotReady, 'n'}; + + MenuitemButton i4 = { "~!Cancel Game", 224, 27, MBUTTON_GM_FULL, MultiClientCancel, 'c'}; + + MenuitemPulldown i5 = { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0}; + MenuitemPulldown i6 = { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0}; + MenuitemPulldown i7 = { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0}; + MenuitemPulldown i8 = { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0}; + MenuitemPulldown i9 = { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0}; + MenuitemPulldown i10 = { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0}; + MenuitemPulldown i11 = { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0}; + MenuitemPulldown i12 = { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0}; + MenuitemPulldown i13 = { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0}; + MenuitemPulldown i14 = { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0}; + MenuitemPulldown i15 = { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0}; + MenuitemPulldown i16 = { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0}; + MenuitemPulldown i17 = { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0}; + MenuitemPulldown i18 = { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0}; + MenuitemPulldown i19 = { mgptsoptions, 172, 20, MBUTTON_PULLDOWN, NULL, 3, 0, 0, 0, 0}; + + MenuitemText i20 = { "~<Your Race:~>", 0}; + MenuitemPulldown i21 = { rcsoptions, 152, 20, MBUTTON_PULLDOWN, MultiClientRCSAction, 3, 2, 2, 0, 0}; + MenuitemText i22 = { "~<Resources:~>", 0}; + MenuitemPulldown i23 = { resoptions, 152, 20, MBUTTON_PULLDOWN, GameRESAction, 4, 0, 0, 0, MI_PSTATE_PASSIVE}; + MenuitemText i24 = { "~<Units:~>", 0}; + MenuitemPulldown i25 = { unsoptions, 190, 20, MBUTTON_PULLDOWN, GameUNSAction, 2, 0, 0, 0, MI_PSTATE_PASSIVE}; + MenuitemText i26 = { "~<Fog of War:~>", 0}; + MenuitemPulldown i27 = { mgfwsoptions, 152, 20, MBUTTON_PULLDOWN, MultiGameFWSAction, 2, 0, 0, 0, MI_PSTATE_PASSIVE}; + MenuitemText i28 = { "~<Map Tileset:~>", 0}; + MenuitemPulldown i29 = { tssoptions, 152, 20, MBUTTON_PULLDOWN, GameTSSAction, 5, 0, 0, 0, MI_PSTATE_PASSIVE}; + + MenuitemGem i30 = { 0, 18, 18, MBUTTON_GEM_SQUARE, MultiClientGemAction}; + MenuitemGem i31 = { 0, 18, 18, MBUTTON_GEM_SQUARE, MultiClientGemAction}; + MenuitemGem i32 = { 0, 18, 18, MBUTTON_GEM_SQUARE, MultiClientGemAction}; + MenuitemGem i33 = { 0, 18, 18, MBUTTON_GEM_SQUARE, MultiClientGemAction}; + MenuitemGem i34 = { 0, 18, 18, MBUTTON_GEM_SQUARE, MultiClientGemAction}; + MenuitemGem i35 = { 0, 18, 18, MBUTTON_GEM_SQUARE, MultiClientGemAction}; + MenuitemGem i36 = { 0, 18, 18, MBUTTON_GEM_SQUARE, MultiClientGemAction}; + MenuitemGem i37 = { 0, 18, 18, MBUTTON_GEM_SQUARE, MultiClientGemAction}; + MenuitemGem i38 = { 0, 18, 18, MBUTTON_GEM_SQUARE, MultiClientGemAction}; + MenuitemGem i39 = { 0, 18, 18, MBUTTON_GEM_SQUARE, MultiClientGemAction}; + MenuitemGem i40 = { 0, 18, 18, MBUTTON_GEM_SQUARE, MultiClientGemAction}; + MenuitemGem i41 = { 0, 18, 18, MBUTTON_GEM_SQUARE, MultiClientGemAction}; + MenuitemGem i42 = { 0, 18, 18, MBUTTON_GEM_SQUARE, MultiClientGemAction}; + MenuitemGem i43 = { 0, 18, 18, MBUTTON_GEM_SQUARE, MultiClientGemAction}; + + NetMultiClientMenuItems[0].d.drawfunc = i0; + NetMultiClientMenuItems[1].d.text = i1; + NetMultiClientMenuItems[2].d.button = i2; + NetMultiClientMenuItems[3].d.button = i3; + NetMultiClientMenuItems[4].d.button = i4; + NetMultiClientMenuItems[5].d.pulldown = i5; + NetMultiClientMenuItems[6].d.pulldown = i6; + NetMultiClientMenuItems[7].d.pulldown = i7; + NetMultiClientMenuItems[8].d.pulldown = i8; + NetMultiClientMenuItems[9].d.pulldown = i9; + NetMultiClientMenuItems[10].d.pulldown = i10; + NetMultiClientMenuItems[11].d.pulldown = i11; + NetMultiClientMenuItems[12].d.pulldown = i12; + NetMultiClientMenuItems[13].d.pulldown = i13; + NetMultiClientMenuItems[14].d.pulldown = i14; + NetMultiClientMenuItems[15].d.pulldown = i15; + NetMultiClientMenuItems[16].d.pulldown = i16; + NetMultiClientMenuItems[17].d.pulldown = i17; + NetMultiClientMenuItems[18].d.pulldown = i18; + NetMultiClientMenuItems[19].d.pulldown = i19; + NetMultiClientMenuItems[20].d.text = i20; + NetMultiClientMenuItems[21].d.pulldown = i21; + NetMultiClientMenuItems[22].d.text = i22; + NetMultiClientMenuItems[23].d.pulldown = i23; + NetMultiClientMenuItems[24].d.text = i24; + NetMultiClientMenuItems[25].d.pulldown = i25; + NetMultiClientMenuItems[26].d.text = i26; + NetMultiClientMenuItems[27].d.pulldown = i27; + NetMultiClientMenuItems[28].d.text = i28; + NetMultiClientMenuItems[29].d.pulldown = i29; + NetMultiClientMenuItems[30].d.gem = i30; + NetMultiClientMenuItems[31].d.gem = i31; + NetMultiClientMenuItems[32].d.gem = i32; + NetMultiClientMenuItems[33].d.gem = i33; + NetMultiClientMenuItems[34].d.gem = i34; + NetMultiClientMenuItems[35].d.gem = i35; + NetMultiClientMenuItems[36].d.gem = i36; + NetMultiClientMenuItems[37].d.gem = i37; + NetMultiClientMenuItems[38].d.gem = i38; + NetMultiClientMenuItems[39].d.gem = i39; + NetMultiClientMenuItems[40].d.gem = i40; + NetMultiClientMenuItems[41].d.gem = i41; + NetMultiClientMenuItems[42].d.gem = i42; + NetMultiClientMenuItems[43].d.gem = i43; +} local Menuitem NetErrorMenuItems[] = { -#ifdef __GNUC__ - { MI_TYPE_TEXT, 144, 11, 0, LargeFont, NULL, NULL, - { text:{ "Error:", MI_TFLAGS_CENTERED} } }, - { MI_TYPE_TEXT, 144, 38, 0, LargeFont, NULL, NULL, - { text:{ NULL, MI_TFLAGS_CENTERED} } }, - { MI_TYPE_BUTTON, 92, 80, MenuButtonSelected, LargeFont, NULL, NULL, - { button:{ "~!OK", 106, 27, MBUTTON_GM_HALF, EndMenu, 'o'} } }, -#else - { 0 } -#endif + { MI_TYPE_TEXT, 144, 11, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 144, 38, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 92, 80, MenuButtonSelected, LargeFont, NULL, NULL, NULL }, }; +local void InitNetErrorMenuItems() { + MenuitemText i0 = { "Error:", MI_TFLAGS_CENTERED}; + MenuitemText i1 = { NULL, MI_TFLAGS_CENTERED}; + MenuitemButton i2 = { "~!OK", 106, 27, MBUTTON_GM_HALF, EndMenu, 'o'}; + NetErrorMenuItems[0].d.text = i0; + NetErrorMenuItems[1].d.text = i1; + NetErrorMenuItems[2].d.button = i2; +} /** ** Items for the Connecting Network Menu */ local Menuitem ConnectingMenuItems[] = { -#ifdef __GNUC__ - { MI_TYPE_TEXT, 144, 11, 0, LargeFont, NULL, NULL, - { text:{ "Connecting to server", MI_TFLAGS_CENTERED} } }, - { MI_TYPE_TEXT, 144, 32, 0, LargeFont, NULL, NULL, - { text:{ NetworkServerText, MI_TFLAGS_CENTERED} } }, - { MI_TYPE_TEXT, 144, 53, 0, LargeFont, NULL, NULL, - { text:{ NetworkTriesText , MI_TFLAGS_CENTERED} } }, - { MI_TYPE_BUTTON, 32, 90, MenuButtonSelected, LargeFont, NULL, NULL, - { button:{ "~!Cancel", 224, 27, MBUTTON_GM_FULL, NetConnectingCancel, 'c'} } }, -#else - { 0 } -#endif + { MI_TYPE_TEXT, 144, 11, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 144, 32, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 144, 53, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 32, 90, MenuButtonSelected, LargeFont, NULL, NULL, NULL }, }; +local void InitConnectingMenuItems() { + MenuitemText i0 = { "Connecting to server", MI_TFLAGS_CENTERED}; + MenuitemText i1 = { NetworkServerText, MI_TFLAGS_CENTERED}; + MenuitemText i2 = { NetworkTriesText , MI_TFLAGS_CENTERED}; + MenuitemButton i3 = { "~!Cancel", 224, 27, MBUTTON_GM_FULL, NetConnectingCancel, 'c'}; + ConnectingMenuItems[0].d.text = i0; + ConnectingMenuItems[1].d.text = i1; + ConnectingMenuItems[2].d.text = i2; + ConnectingMenuItems[3].d.button = i3; +} /** ** Items for the Campaign Select Menu */ local Menuitem CampaignSelectMenuItems[] = { -#ifdef __GNUC__ - { MI_TYPE_BUTTON, 208, 212 + 36 * 0, 0, LargeFont, NULL, NULL, - { button:{ NULL, 224, 27, MBUTTON_GM_FULL, CampaignMenu1, 'a'} } }, - { MI_TYPE_BUTTON, 208, 212 + 36 * 1, 0, LargeFont, NULL, NULL, - { button:{ NULL, 224, 27, MBUTTON_GM_FULL, CampaignMenu2, 'm'} } }, - { MI_TYPE_BUTTON, 208, 212 + 36 * 2, 0, LargeFont, NULL, NULL, - { button:{ NULL, 224, 27, MBUTTON_GM_FULL, CampaignMenu3, 'l'} } }, - { MI_TYPE_BUTTON, 208, 212 + 36 * 3, 0, LargeFont, NULL, NULL, - { button:{ NULL, 224, 27, MBUTTON_GM_FULL, CampaignMenu4, 'y'} } }, - { MI_TYPE_BUTTON, 208, 212 + 36 * 4, MenuButtonDisabled, LargeFont, NULL, - NULL, { button:{ "~!Select Campaign", 224, 27, MBUTTON_GM_FULL, - SelectCampaignMenu, 's'} } }, - { MI_TYPE_BUTTON, 208, 212 + 36 * 5, 0, LargeFont, NULL, NULL, - { button:{ "~!Previous Menu", 224, 27, MBUTTON_GM_FULL, EndMenu, 'p'} } }, -#else - { 0 } -#endif + { MI_TYPE_BUTTON, 208, 212 + 36 * 0, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 208, 212 + 36 * 1, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 208, 212 + 36 * 2, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 208, 212 + 36 * 3, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 208, 212 + 36 * 4, MenuButtonDisabled, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 208, 212 + 36 * 5, 0, LargeFont, NULL, NULL, NULL }, }; +local void InitCampaignSelectMenuItems() { + MenuitemButton i0 = { NULL, 224, 27, MBUTTON_GM_FULL, CampaignMenu1, 'a'}; + MenuitemButton i1 = { NULL, 224, 27, MBUTTON_GM_FULL, CampaignMenu2, 'm'}; + MenuitemButton i2 = { NULL, 224, 27, MBUTTON_GM_FULL, CampaignMenu3, 'l'}; + MenuitemButton i3 = { NULL, 224, 27, MBUTTON_GM_FULL, CampaignMenu4, 'y'}; + MenuitemButton i4 = { "~!Select Campaign", 224, 27, MBUTTON_GM_FULL, SelectCampaignMenu, 's'}; + MenuitemButton i5 = { "~!Previous Menu", 224, 27, MBUTTON_GM_FULL, EndMenu, 'p'}; + CampaignSelectMenuItems[0].d.button = i0; + CampaignSelectMenuItems[1].d.button = i1; + CampaignSelectMenuItems[2].d.button = i2; + CampaignSelectMenuItems[3].d.button = i3; + CampaignSelectMenuItems[4].d.button = i4; + CampaignSelectMenuItems[5].d.button = i5; +} /** ** Items for the Campaign Continue Menu */ local Menuitem CampaignContMenuItems[] = { -#ifdef __GNUC__ - { MI_TYPE_BUTTON, 508, 320 + 36 + 36 + 36, 0, LargeFont, NULL, NULL, - { button:{ "~!Continue", 106, 27, MBUTTON_GM_HALF, EndMenu, 'c'} } }, -#else - { 0 } -#endif + { MI_TYPE_BUTTON, 508, 320 + 36 + 36 + 36, 0, LargeFont, NULL, NULL, NULL }, }; +local void InitCampaignContMenuItems() { + MenuitemButton i0 = { "~!Continue", 106, 27, MBUTTON_GM_HALF, EndMenu, 'c'}; + CampaignContMenuItems[0].d.button = i0; +} local Menuitem SoundOptionsMenuItems[] = { -#ifdef __GNUC__ - { MI_TYPE_TEXT, 176, 11, 0, LargeFont, NULL, NULL, - { text:{ "Sound Options", MI_TFLAGS_CENTERED} } }, + { MI_TYPE_TEXT, 176, 11, 0, LargeFont, NULL, NULL, NULL }, - { MI_TYPE_TEXT, 16, 36*1, 0, GameFont, NULL, NULL, - { text:{ "Master Volume", MI_TFLAGS_LALIGN} } }, - { MI_TYPE_HSLIDER, 32, 36*1.5, 0, 0, NULL, NULL, - { hslider:{ 0, 11*18, 18, ScenSelectHSMasterVolumeAction, -1, 0, 0, 0, ScenSelectOk} } }, - { MI_TYPE_TEXT, 44, 36*2 + 6, 0, SmallFont, NULL, NULL, - { text:{ "min", MI_TFLAGS_CENTERED} } }, - { MI_TYPE_TEXT, 218, 36*2 + 6, 0, SmallFont, NULL, NULL, - { text:{ "max", MI_TFLAGS_CENTERED} } }, - { MI_TYPE_GEM, 240, 36*1.5, 0, LargeFont, NULL, NULL, - { gem:{ MI_GSTATE_UNCHECKED, 18, 18, MBUTTON_GEM_SQUARE, SetMasterPower} } }, - { MI_TYPE_TEXT, 266, 36*1.5 + 2, 0, GameFont, NULL, NULL, - { text:{ "Enabled", MI_TFLAGS_LALIGN} } }, + { MI_TYPE_TEXT, 16, 36*1, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_HSLIDER, 32, 36*1.5, 0, 0, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 44, 36*2 + 6, 0, SmallFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 218, 36*2 + 6, 0, SmallFont, NULL, NULL, NULL }, + { MI_TYPE_GEM, 240, 36*1.5, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 266, 36*1.5 + 2, 0, GameFont, NULL, NULL, NULL }, - { MI_TYPE_TEXT, 16, 36*3, 0, GameFont, NULL, NULL, - { text:{ "Music Volume", MI_TFLAGS_LALIGN} } }, - { MI_TYPE_HSLIDER, 32, 36*3.5, 0, 0, NULL, NULL, - { hslider:{ 0, 11*18, 18, ScenSelectHSMusicVolumeAction, -1, 0, 0, 0, ScenSelectOk} } }, - { MI_TYPE_TEXT, 44, 36*4 + 6, 0, SmallFont, NULL, NULL, - { text:{ "min", MI_TFLAGS_CENTERED} } }, - { MI_TYPE_TEXT, 218, 36*4 + 6, 0, SmallFont, NULL, NULL, - { text:{ "max", MI_TFLAGS_CENTERED} } }, - { MI_TYPE_GEM, 240, 36*3.5, 0, LargeFont, NULL, NULL, - { gem:{ MI_GSTATE_UNCHECKED, 18, 18, MBUTTON_GEM_SQUARE, SetMusicPower} } }, - { MI_TYPE_TEXT, 266, 36*3.5 + 2, 0, GameFont, NULL, NULL, - { text:{ "Enabled", MI_TFLAGS_LALIGN} } }, + { MI_TYPE_TEXT, 16, 36*3, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_HSLIDER, 32, 36*3.5, 0, 0, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 44, 36*4 + 6, 0, SmallFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 218, 36*4 + 6, 0, SmallFont, NULL, NULL, NULL }, + { MI_TYPE_GEM, 240, 36*3.5, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 266, 36*3.5 + 2, 0, GameFont, NULL, NULL, NULL }, - { MI_TYPE_TEXT, 16, 36*5, 0, GameFont, NULL, NULL, - { text:{ "CD Volume", MI_TFLAGS_LALIGN} } }, - { MI_TYPE_HSLIDER, 32, 36*5.5, 0, 0, NULL, NULL, - { hslider:{ 0, 11*18, 18, ScenSelectHSCdVolumeAction, -1, 0, 0, 0, ScenSelectOk} } }, - { MI_TYPE_TEXT, 44, 36*6 + 6, 0, SmallFont, NULL, NULL, - { text:{ "min", MI_TFLAGS_CENTERED} } }, - { MI_TYPE_TEXT, 218, 36*6 + 6, 0, SmallFont, NULL, NULL, - { text:{ "max", MI_TFLAGS_CENTERED} } }, - { MI_TYPE_GEM, 240, 36*5.5, 0, LargeFont, NULL, NULL, - { gem:{ MI_GSTATE_UNCHECKED, 18, 18, MBUTTON_GEM_SQUARE, SetCdPower} } }, - { MI_TYPE_TEXT, 266, 36*5.5 + 2, 0, GameFont, NULL, NULL, - { text:{ "Enabled", MI_TFLAGS_LALIGN} } }, - { MI_TYPE_GEM, 32, 36*6.5, 0, LargeFont, NULL, NULL, - { gem:{ MI_GSTATE_UNCHECKED, 18, 18, MBUTTON_GEM_ROUND, SetCdModeAll} } }, - { MI_TYPE_TEXT, 58, 36*6.5 + 2, 0, GameFont, NULL, NULL, - { text:{ "All Tracks", MI_TFLAGS_LALIGN} } }, - { MI_TYPE_GEM, 154, 36*6.5, 0, LargeFont, NULL, NULL, - { gem:{ MI_GSTATE_UNCHECKED, 18, 18, MBUTTON_GEM_ROUND, SetCdModeRandom} } }, - { MI_TYPE_TEXT, 180, 36*6.5 + 2, 0, GameFont, NULL, NULL, - { text:{ "Random Tracks", MI_TFLAGS_LALIGN} } }, - { MI_TYPE_BUTTON, 176 - (106 / 2), 352 - 11 - 27, MenuButtonSelected, LargeFont, NULL, NULL, - { button:{ "~!OK", 106, 27, MBUTTON_GM_HALF, EndMenu, 'o'} } }, -#else - { 0 } -#endif + { MI_TYPE_TEXT, 16, 36*5, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_HSLIDER, 32, 36*5.5, 0, 0, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 44, 36*6 + 6, 0, SmallFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 218, 36*6 + 6, 0, SmallFont, NULL, NULL, NULL }, + { MI_TYPE_GEM, 240, 36*5.5, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 266, 36*5.5 + 2, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_GEM, 32, 36*6.5, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 58, 36*6.5 + 2, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_GEM, 154, 36*6.5, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 180, 36*6.5 + 2, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 176 - (106 / 2), 352 - 11 - 27, MenuButtonSelected, LargeFont, NULL, NULL, NULL }, }; +local void InitSoundOptionsMenuItems() { + MenuitemText i0 = { "Sound Options", MI_TFLAGS_CENTERED}; + + MenuitemText i1 = { "Master Volume", MI_TFLAGS_LALIGN}; + MenuitemHslider i2 = { 0, 11*18, 18, ScenSelectHSMasterVolumeAction, -1, 0, 0, 0, ScenSelectOk}; + MenuitemText i3 = { "min", MI_TFLAGS_CENTERED}; + MenuitemText i4 = { "max", MI_TFLAGS_CENTERED}; + MenuitemGem i5 = { MI_GSTATE_UNCHECKED, 18, 18, MBUTTON_GEM_SQUARE, SetMasterPower}; + MenuitemText i6 = { "Enabled", MI_TFLAGS_LALIGN}; + + MenuitemText i7 = { "Music Volume", MI_TFLAGS_LALIGN}; + MenuitemHslider i8 = { 0, 11*18, 18, ScenSelectHSMusicVolumeAction, -1, 0, 0, 0, ScenSelectOk}; + MenuitemText i9 = { "min", MI_TFLAGS_CENTERED}; + MenuitemText i10 = { "max", MI_TFLAGS_CENTERED}; + MenuitemGem i11 = { MI_GSTATE_UNCHECKED, 18, 18, MBUTTON_GEM_SQUARE, SetMusicPower}; + MenuitemText i12 = { "Enabled", MI_TFLAGS_LALIGN}; + + MenuitemText i13 = { "CD Volume", MI_TFLAGS_LALIGN}; + MenuitemHslider i14 = { 0, 11*18, 18, ScenSelectHSCdVolumeAction, -1, 0, 0, 0, ScenSelectOk}; + MenuitemText i15 = { "min", MI_TFLAGS_CENTERED}; + MenuitemText i16 = { "max", MI_TFLAGS_CENTERED}; + MenuitemGem i17 = { MI_GSTATE_UNCHECKED, 18, 18, MBUTTON_GEM_SQUARE, SetCdPower}; + MenuitemText i18 = { "Enabled", MI_TFLAGS_LALIGN}; + MenuitemGem i19 = { MI_GSTATE_UNCHECKED, 18, 18, MBUTTON_GEM_ROUND, SetCdModeAll}; + MenuitemText i20 = { "All Tracks", MI_TFLAGS_LALIGN}; + MenuitemGem i21 = { MI_GSTATE_UNCHECKED, 18, 18, MBUTTON_GEM_ROUND, SetCdModeRandom}; + MenuitemText i22 = { "Random Tracks", MI_TFLAGS_LALIGN}; + MenuitemButton i23 = { "~!OK", 106, 27, MBUTTON_GM_HALF, EndMenu, 'o'}; + + SoundOptionsMenuItems[0].d.text = i0; + SoundOptionsMenuItems[1].d.text = i1; + SoundOptionsMenuItems[2].d.hslider = i2; + SoundOptionsMenuItems[3].d.text = i3; + SoundOptionsMenuItems[4].d.text = i4; + SoundOptionsMenuItems[5].d.gem = i5; + SoundOptionsMenuItems[6].d.text = i6; + SoundOptionsMenuItems[7].d.text = i7; + SoundOptionsMenuItems[8].d.hslider = i8; + SoundOptionsMenuItems[9].d.text = i9; + SoundOptionsMenuItems[10].d.text = i10; + SoundOptionsMenuItems[11].d.gem = i11; + SoundOptionsMenuItems[12].d.text = i12; + SoundOptionsMenuItems[13].d.text = i13; + SoundOptionsMenuItems[14].d.hslider = i14; + SoundOptionsMenuItems[15].d.text = i15; + SoundOptionsMenuItems[16].d.text = i16; + SoundOptionsMenuItems[17].d.gem = i17; + SoundOptionsMenuItems[18].d.text = i18; + SoundOptionsMenuItems[19].d.gem = i19; + SoundOptionsMenuItems[20].d.text = i20; + SoundOptionsMenuItems[21].d.gem = i21; + SoundOptionsMenuItems[22].d.text = i22; + SoundOptionsMenuItems[23].d.button = i23; +} local Menuitem PreferencesMenuItems[] = { -#ifdef __GNUC__ - { MI_TYPE_TEXT, 128, 11, 0, LargeFont, NULL, NULL, - { text:{ "Preferences", MI_TFLAGS_CENTERED} } }, + { MI_TYPE_TEXT, 128, 11, 0, LargeFont, NULL, NULL, NULL }, - { MI_TYPE_GEM, 16, 36*1, 0, LargeFont, NULL, NULL, - { gem:{ MI_GSTATE_UNCHECKED, 18, 18, MBUTTON_GEM_SQUARE, SetFogOfWar} } }, - { MI_TYPE_TEXT, 46, 36*1 + 2, 0, GameFont, NULL, NULL, - { text:{ "Fog of War Enabled", MI_TFLAGS_LALIGN} } }, + { MI_TYPE_GEM, 16, 36*1, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 46, 36*1 + 2, 0, GameFont, NULL, NULL, NULL }, - { MI_TYPE_BUTTON, 128 - (106 / 2), 245, MenuButtonSelected, LargeFont, NULL, NULL, - { button:{ "~!OK", 106, 27, MBUTTON_GM_HALF, EndMenu, 'o'} } }, -#else - { 0 } -#endif + { MI_TYPE_BUTTON, 128 - (106 / 2), 245, MenuButtonSelected, LargeFont, NULL, NULL, NULL }, }; +local void InitPreferencesMenuItems() { + MenuitemText i0 = { "Preferences", MI_TFLAGS_CENTERED}; + MenuitemGem i1 = { MI_GSTATE_UNCHECKED, 18, 18, MBUTTON_GEM_SQUARE, SetFogOfWar}; + MenuitemText i2 = { "Fog of War Enabled", MI_TFLAGS_LALIGN}; + MenuitemButton i3 = { "~!OK", 106, 27, MBUTTON_GM_HALF, EndMenu, 'o'}; + PreferencesMenuItems[0].d.text = i0; + PreferencesMenuItems[1].d.gem = i1; + PreferencesMenuItems[2].d.text = i2; + PreferencesMenuItems[3].d.button = i3; +} local Menuitem SpeedSettingsMenuItems[] = { -#ifdef __GNUC__ - { MI_TYPE_TEXT, 128, 11, 0, LargeFont, NULL, NULL, - { text:{ "Speed Settings", MI_TFLAGS_CENTERED} } }, - { MI_TYPE_TEXT, 16, 36*1, 0, GameFont, NULL, NULL, - { text:{ "Game Speed", MI_TFLAGS_LALIGN} } }, - { MI_TYPE_HSLIDER, 32, 36*1.5, 0, 0, NULL, NULL, - { hslider:{ 0, 11*18, 18, ScenSelectHSGameSpeedAction, -1, 0, 0, 0, ScenSelectOk} } }, - { MI_TYPE_TEXT, 34, 36*2 + 6, 0, SmallFont, NULL, NULL, - { text:{ "slow", MI_TFLAGS_LALIGN} } }, - { MI_TYPE_TEXT, 230, 36*2 + 6, 0, SmallFont, NULL, NULL, - { text:{ "fast", MI_TFLAGS_RALIGN} } }, - { MI_TYPE_TEXT, 16, 36*3, 0, GameFont, NULL, NULL, - { text:{ "Mouse Scroll", MI_TFLAGS_LALIGN} } }, - { MI_TYPE_HSLIDER, 32, 36*3.5, 0, 0, NULL, NULL, - { hslider:{ 0, 11*18, 18, ScenSelectHSMouseScrollAction, -1, 0, 0, 0, ScenSelectOk} } }, - { MI_TYPE_TEXT, 34, 36*4 + 6, 0, SmallFont, NULL, NULL, - { text:{ "off", MI_TFLAGS_LALIGN} } }, - { MI_TYPE_TEXT, 230, 36*4 + 6, 0, SmallFont, NULL, NULL, - { text:{ "fast", MI_TFLAGS_RALIGN} } }, - { MI_TYPE_TEXT, 16, 36*5, 0, GameFont, NULL, NULL, - { text:{ "Keyboard Scroll", MI_TFLAGS_LALIGN} } }, - { MI_TYPE_HSLIDER, 32, 36*5.5, 0, 0, NULL, NULL, - { hslider:{ 0, 11*18, 18, ScenSelectHSKeyboardScrollAction, -1, 0, 0, 0, ScenSelectOk} } }, - { MI_TYPE_TEXT, 34, 36*6 + 6, 0, SmallFont, NULL, NULL, - { text:{ "off", MI_TFLAGS_LALIGN} } }, - { MI_TYPE_TEXT, 230, 36*6 + 6, 0, SmallFont, NULL, NULL, - { text:{ "fast", MI_TFLAGS_RALIGN} } }, - { MI_TYPE_BUTTON, 128 - (106 / 2), 245, MenuButtonSelected, LargeFont, NULL, NULL, - { button:{ "~!OK", 106, 27, MBUTTON_GM_HALF, EndMenu, 'o'} } }, -#else - { 0 } -#endif + { MI_TYPE_TEXT, 128, 11, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 16, 36*1, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_HSLIDER, 32, 36*1.5, 0, 0, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 34, 36*2 + 6, 0, SmallFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 230, 36*2 + 6, 0, SmallFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 16, 36*3, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_HSLIDER, 32, 36*3.5, 0, 0, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 34, 36*4 + 6, 0, SmallFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 230, 36*4 + 6, 0, SmallFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 16, 36*5, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_HSLIDER, 32, 36*5.5, 0, 0, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 34, 36*6 + 6, 0, SmallFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 230, 36*6 + 6, 0, SmallFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 128 - (106 / 2), 245, MenuButtonSelected, LargeFont, NULL, NULL, NULL }, }; +local void InitSpeedSettingsMenuItems() { + MenuitemText i0 = { "Speed Settings", MI_TFLAGS_CENTERED}; + MenuitemText i1 = { "Game Speed", MI_TFLAGS_LALIGN}; + MenuitemHslider i2 = { 0, 11*18, 18, ScenSelectHSGameSpeedAction, -1, 0, 0, 0, ScenSelectOk}; + MenuitemText i3 = { "slow", MI_TFLAGS_LALIGN}; + MenuitemText i4 = { "fast", MI_TFLAGS_RALIGN}; + MenuitemText i5 = { "Mouse Scroll", MI_TFLAGS_LALIGN}; + MenuitemHslider i6 = { 0, 11*18, 18, ScenSelectHSMouseScrollAction, -1, 0, 0, 0, ScenSelectOk}; + MenuitemText i7 = { "off", MI_TFLAGS_LALIGN}; + MenuitemText i8 = { "fast", MI_TFLAGS_RALIGN}; + MenuitemText i9 = { "Keyboard Scroll", MI_TFLAGS_LALIGN}; + MenuitemHslider i10 = { 0, 11*18, 18, ScenSelectHSKeyboardScrollAction, -1, 0, 0, 0, ScenSelectOk}; + MenuitemText i11 = { "off", MI_TFLAGS_LALIGN}; + MenuitemText i12 = { "fast", MI_TFLAGS_RALIGN}; + MenuitemButton i13 = { "~!OK", 106, 27, MBUTTON_GM_HALF, EndMenu, 'o'}; + SpeedSettingsMenuItems[0].d.text = i0; + SpeedSettingsMenuItems[1].d.text = i1; + SpeedSettingsMenuItems[2].d.hslider = i2; + SpeedSettingsMenuItems[3].d.text = i3; + SpeedSettingsMenuItems[4].d.text = i4; + SpeedSettingsMenuItems[5].d.text = i5; + SpeedSettingsMenuItems[6].d.hslider = i6; + SpeedSettingsMenuItems[7].d.text = i7; + SpeedSettingsMenuItems[8].d.text = i8; + SpeedSettingsMenuItems[9].d.text = i9; + SpeedSettingsMenuItems[10].d.hslider = i10; + SpeedSettingsMenuItems[11].d.text = i11; + SpeedSettingsMenuItems[12].d.text = i12; + SpeedSettingsMenuItems[13].d.button = i13; +} local Menuitem GameOptionsMenuItems[] = { -#ifdef __GNUC__ - { MI_TYPE_TEXT, 128, 11, 0, LargeFont, NULL, NULL, - { text:{ "Game Options", MI_TFLAGS_CENTERED} } }, + { MI_TYPE_TEXT, 128, 11, 0, LargeFont, NULL, NULL, NULL }, #ifdef WITH_SOUND - { MI_TYPE_BUTTON, 16, 40 + 36*0, MenuButtonSelected, LargeFont, NULL, NULL, - { button:{ "Sound (~!F~!7)", 224, 27, MBUTTON_GM_FULL, SoundOptions, KeyCodeF7} } }, + { MI_TYPE_BUTTON, 16, 40 + 36*0, MenuButtonSelected, LargeFont, NULL, NULL, NULL }, #else - { MI_TYPE_BUTTON, 16, 40 + 36*0, MenuButtonDisabled, LargeFont, NULL, NULL, - { button:{ "Sound (~!F~!7)", 224, 27, MBUTTON_GM_FULL, SoundOptions, KeyCodeF7} } }, -#endif - { MI_TYPE_BUTTON, 16, 40 + 36*1, MenuButtonSelected, LargeFont, NULL, NULL, - { button:{ "Speeds (~!F~!8)", 224, 27, MBUTTON_GM_FULL, SpeedSettings, KeyCodeF8} } }, - { MI_TYPE_BUTTON, 16, 40 + 36*2, MenuButtonSelected, LargeFont, NULL, NULL, - { button:{ "Preferences (~!F~!9)", 224, 27, MBUTTON_GM_FULL, Preferences, KeyCodeF9} } }, - { MI_TYPE_BUTTON, 128 - (224 / 2), 245, MenuButtonSelected, LargeFont, NULL, NULL, - { button:{ "Previous (~!E~!s~!c)", 224, 27, MBUTTON_GM_FULL, EndMenu, '\033'} } }, -#else - { 0 } + { MI_TYPE_BUTTON, 16, 40 + 36*0, MenuButtonDisabled, LargeFont, NULL, NULL, NULL }, #endif + { MI_TYPE_BUTTON, 16, 40 + 36*1, MenuButtonSelected, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 16, 40 + 36*2, MenuButtonSelected, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 128 - (224 / 2), 245, MenuButtonSelected, LargeFont, NULL, NULL, NULL }, }; +local void InitGameOptionsMenuItems() { + MenuitemText i0 = { "Game Options", MI_TFLAGS_CENTERED}; +#ifdef WITH_SOUND + MenuitemButton i1 = { "Sound (~!F~!7)", 224, 27, MBUTTON_GM_FULL, SoundOptions, KeyCodeF7}; +#else + MenuitemButton i1 = { "Sound (~!F~!7)", 224, 27, MBUTTON_GM_FULL, SoundOptions, KeyCodeF7}; +#endif + MenuitemButton i2 = { "Speeds (~!F~!8)", 224, 27, MBUTTON_GM_FULL, SpeedSettings, KeyCodeF8}; + MenuitemButton i3 = { "Preferences (~!F~!9)", 224, 27, MBUTTON_GM_FULL, Preferences, KeyCodeF9}; + MenuitemButton i4 = { "Previous (~!E~!s~!c)", 224, 27, MBUTTON_GM_FULL, EndMenu, '\033'}; + GameOptionsMenuItems[0].d.text = i0; + GameOptionsMenuItems[1].d.button = i1; + GameOptionsMenuItems[2].d.button = i2; + GameOptionsMenuItems[3].d.button = i3; + GameOptionsMenuItems[4].d.button = i4; +} local Menuitem HelpMenuItems[] = { -#ifdef __GNUC__ - { MI_TYPE_TEXT, 128, 11, 0, LargeFont, NULL, NULL, - { text:{ "Help Menu", MI_TFLAGS_CENTERED} } }, - { MI_TYPE_BUTTON, 16, 40 + 36*0, MenuButtonSelected, LargeFont, NULL, NULL, - { button:{ "Keystroke ~!Help", 224, 27, MBUTTON_GM_FULL, KeystrokeHelpMenu, 'h'} } }, - { MI_TYPE_BUTTON, 16, 40 + 36*1, MenuButtonSelected, LargeFont, NULL, NULL, - { button:{ "Freecraft ~!Tips", 224, 27, MBUTTON_GM_FULL, ShowTipsMenu, 't'} } }, - { MI_TYPE_BUTTON, 128 - (224 / 2), 288-40, MenuButtonSelected, LargeFont, NULL, NULL, - { button:{ "Previous (~!E~!s~!c)", 224, 27, MBUTTON_GM_FULL, EndMenu, '\033'} } }, -#else - { 0 } -#endif + { MI_TYPE_TEXT, 128, 11, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 16, 40 + 36*0, MenuButtonSelected, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 16, 40 + 36*1, MenuButtonSelected, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 128 - (224 / 2), 288-40, MenuButtonSelected, LargeFont, NULL, NULL, NULL }, }; +local void InitHelpMenuItems() { + MenuitemText i0 = { "Help Menu", MI_TFLAGS_CENTERED}; + MenuitemButton i1 = { "Keystroke ~!Help", 224, 27, MBUTTON_GM_FULL, KeystrokeHelpMenu, 'h'}; + MenuitemButton i2 = { "Freecraft ~!Tips", 224, 27, MBUTTON_GM_FULL, ShowTipsMenu, 't'}; + MenuitemButton i3 = { "Previous (~!E~!s~!c)", 224, 27, MBUTTON_GM_FULL, EndMenu, '\033'}; + HelpMenuItems[0].d.text = i0; + HelpMenuItems[1].d.button = i1; + HelpMenuItems[2].d.button = i2; + HelpMenuItems[3].d.button = i3; +} local Menuitem KeystrokeHelpMenuItems[] = { -#ifdef __GNUC__ - { MI_TYPE_TEXT, 352/2, 11, 0, LargeFont, NULL, NULL, - { text:{ "Keystroke Help Menu", MI_TFLAGS_CENTERED} } }, - { MI_TYPE_VSLIDER, 352 - 18 - 16, 40+20, 0, 0, NULL, NULL, - { vslider:{ 0, 18, 12*18, ScenSelectVSKeystrokeHelpAction, -1, 0, 0, 0, NULL} } }, - { MI_TYPE_BUTTON, 352/2 - (224 / 2), 352-40, MenuButtonSelected, LargeFont, NULL, NULL, - { button:{ "Previous (~!E~!s~!c)", 224, 27, MBUTTON_GM_FULL, EndMenu, '\033'} } }, - { MI_TYPE_TEXT, 16, 40+20, 0, GameFont, NULL, NULL, - { text:{ "Alt-F - toggle full screen", MI_TFLAGS_LALIGN} } }, - { MI_TYPE_TEXT, 16, 40+20*2, 0, GameFont, NULL, NULL, - { text:{ "Ctrl-S - mute sound", MI_TFLAGS_LALIGN} } }, - { MI_TYPE_TEXT, 16, 40+20*3, 0, GameFont, NULL, NULL, - { text:{ "Alt-Q - quit to main menu", MI_TFLAGS_LALIGN} } }, - { MI_TYPE_TEXT, 16, 40+20*4, 0, GameFont, NULL, NULL, - { text:{ "+ - increase game speed", MI_TFLAGS_LALIGN} } }, - { MI_TYPE_TEXT, 16, 40+20*5, 0, GameFont, NULL, NULL, - { text:{ "- - decrease game speed", MI_TFLAGS_LALIGN} } }, - { MI_TYPE_TEXT, 16, 40+20*6, 0, GameFont, NULL, NULL, - { text:{ "Ctrl-P - pause game", MI_TFLAGS_LALIGN} } }, - { MI_TYPE_TEXT, 16, 40+20*7, 0, GameFont, NULL, NULL, - { text:{ "Alt-G - toggle grab mouse", MI_TFLAGS_LALIGN} } }, - { MI_TYPE_TEXT, 16, 40+20*8, 0, GameFont, NULL, NULL, - { text:{ "Alt-X - quit game", MI_TFLAGS_LALIGN} } }, - { MI_TYPE_TEXT, 16, 40+20*9, 0, GameFont, NULL, NULL, - { text:{ "Alt-B - toggle expand map", MI_TFLAGS_LALIGN} } }, - { MI_TYPE_TEXT, 16, 40+20*10, 0, GameFont, NULL, NULL, - { text:{ "ENTER - write a message", MI_TFLAGS_LALIGN} } }, - { MI_TYPE_TEXT, 16, 40+20*11, 0, GameFont, NULL, NULL, - { text:{ "TAB - hide/unhide terrain", MI_TFLAGS_LALIGN} } }, - { MI_TYPE_TEXT, 16, 40+20*12, 0, GameFont, NULL, NULL, - { text:{ "Alt-I - find idle peon", MI_TFLAGS_LALIGN} } }, - { MI_TYPE_TEXT, 16, 40+20*13, 0, GameFont, NULL, NULL, - { text:{ "Alt-V - next view port", MI_TFLAGS_LALIGN} } }, - { MI_TYPE_TEXT, 16, 40+20*14, 0, GameFont, NULL, NULL, - { text:{ "Ctrl-V - previous view port", MI_TFLAGS_LALIGN} } }, - { MI_TYPE_TEXT, 16, 40+20*15, 0, GameFont, NULL, NULL, - { text:{ "F10 - game menu", MI_TFLAGS_LALIGN} } }, - { MI_TYPE_TEXT, 16, 40+20*16, 0, GameFont, NULL, NULL, - { text:{ "F5 - game options", MI_TFLAGS_LALIGN} } }, - - -#else - { 0 } -#endif + { MI_TYPE_TEXT, 352/2, 11, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_VSLIDER, 352 - 18 - 16, 40+20, 0, 0, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 352/2 - (224 / 2), 352-40, MenuButtonSelected, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 16, 40+20, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 16, 40+20*2, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 16, 40+20*3, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 16, 40+20*4, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 16, 40+20*5, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 16, 40+20*6, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 16, 40+20*7, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 16, 40+20*8, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 16, 40+20*9, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 16, 40+20*10, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 16, 40+20*11, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 16, 40+20*12, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 16, 40+20*13, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 16, 40+20*14, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 16, 40+20*15, 0, GameFont, NULL, NULL, NULL }, + { MI_TYPE_TEXT, 16, 40+20*16, 0, GameFont, NULL, NULL, NULL }, }; +local void InitKeystrokeHelpMenuItems() { + MenuitemText i0 = { "Keystroke Help Menu", MI_TFLAGS_CENTERED}; + MenuitemVslider i1 = { 0, 18, 12*18, ScenSelectVSKeystrokeHelpAction, -1, 0, 0, 0, NULL}; + MenuitemButton i2 = { "Previous (~!E~!s~!c)", 224, 27, MBUTTON_GM_FULL, EndMenu, '\033'}; + MenuitemText i3 = { "Alt-F - toggle full screen", MI_TFLAGS_LALIGN}; + MenuitemText i4 = { "Ctrl-S - mute sound", MI_TFLAGS_LALIGN}; + MenuitemText i5 = { "Alt-Q - quit to main menu", MI_TFLAGS_LALIGN}; + MenuitemText i6 = { "+ - increase game speed", MI_TFLAGS_LALIGN}; + MenuitemText i7 = { "- - decrease game speed", MI_TFLAGS_LALIGN}; + MenuitemText i8 = { "Ctrl-P - pause game", MI_TFLAGS_LALIGN}; + MenuitemText i9 = { "Alt-G - toggle grab mouse", MI_TFLAGS_LALIGN}; + MenuitemText i10 = { "Alt-X - quit game", MI_TFLAGS_LALIGN}; + MenuitemText i11 = { "Alt-B - toggle expand map", MI_TFLAGS_LALIGN}; + MenuitemText i12 = { "ENTER - write a message", MI_TFLAGS_LALIGN}; + MenuitemText i13 = { "TAB - hide/unhide terrain", MI_TFLAGS_LALIGN}; + MenuitemText i14 = { "Alt-I - find idle peon", MI_TFLAGS_LALIGN}; + MenuitemText i15 = { "Alt-V - next view port", MI_TFLAGS_LALIGN}; + MenuitemText i16 = { "Ctrl-V - previous view port", MI_TFLAGS_LALIGN}; + MenuitemText i17 = { "F10 - game menu", MI_TFLAGS_LALIGN}; + MenuitemText i18 = { "F5 - game options", MI_TFLAGS_LALIGN}; + KeystrokeHelpMenuItems[0].d.text = i0; + KeystrokeHelpMenuItems[1].d.vslider = i1; + KeystrokeHelpMenuItems[2].d.button = i2; + KeystrokeHelpMenuItems[3].d.text = i3; + KeystrokeHelpMenuItems[4].d.text = i4; + KeystrokeHelpMenuItems[5].d.text = i5; + KeystrokeHelpMenuItems[6].d.text = i6; + KeystrokeHelpMenuItems[7].d.text = i7; + KeystrokeHelpMenuItems[8].d.text = i8; + KeystrokeHelpMenuItems[9].d.text = i9; + KeystrokeHelpMenuItems[10].d.text = i10; + KeystrokeHelpMenuItems[11].d.text = i11; + KeystrokeHelpMenuItems[12].d.text = i12; + KeystrokeHelpMenuItems[13].d.text = i13; + KeystrokeHelpMenuItems[14].d.text = i14; + KeystrokeHelpMenuItems[15].d.text = i15; + KeystrokeHelpMenuItems[16].d.text = i16; + KeystrokeHelpMenuItems[17].d.text = i17; + KeystrokeHelpMenuItems[18].d.text = i18; +} local Menuitem SaveGameMenuItems[] = { -#ifdef __GNUC__ - { MI_TYPE_TEXT, 384/2, 11, 0, LargeFont, NULL, NULL, - { text:{ "Save Game", MI_TFLAGS_CENTERED} } }, + { MI_TYPE_TEXT, 384/2, 11, 0, LargeFont, NULL, NULL, NULL }, /* { MI_TYPE_INPUT, 16, 11+36*1, 0, SmallFont, NULL, NULL, { input:{ "test123", 384-16-16, 16, MI_TFLAGS_CENTERED, NULL, 7, 33} } }, @@ -1248,29 +1428,35 @@ local Menuitem SaveGameMenuItems[] = { NOTE: Input type Item was not designed to overlay listbox!! This will need adjustments to basic menu code.. I'll check when done with NET... */ - { MI_TYPE_INPUT, 16, 11+36*1, 0, SmallFont, NULL, NULL, - { input:{ NULL, 384-16-16, 16, MBUTTON_PULLDOWN, EnterSaveGameAction, 0, 0} } }, + { MI_TYPE_INPUT, 16, 11+36*1, 0, SmallFont, NULL, NULL, NULL }, /* ARI->NEHAL: THIS IS WRONG: "ScenSelect" stands for ScenarioSelection, that is what the functions do. You need to provide your own Init, Exit, LBAction, LBRetrieve, VSAction, and OK functions to fill the listbox with data!!!! */ - { MI_TYPE_LISTBOX, 16, 11+36*1.5, 0, GameFont, ScenSelectLBInit, ScenSelectLBExit, - { listbox:{ NULL, 384-16-16-16, 7*18, MBUTTON_PULLDOWN, ScenSelectLBAction, 0, 0, 0, 0, 7, 0, - (void *)ScenSelectLBRetrieve, ScenSelectOk} } }, - { MI_TYPE_VSLIDER, 384-16-16, 11+36*1.5, 0, 0, NULL, NULL, - { vslider:{ 0, 18, 7*18, ScenSelectVSAction, -1, 0, 0, 0, ScenSelectOk} } }, + { MI_TYPE_LISTBOX, 16, 11+36*1.5, 0, GameFont, ScenSelectLBInit, ScenSelectLBExit, NULL }, + { MI_TYPE_VSLIDER, 384-16-16, 11+36*1.5, 0, 0, NULL, NULL, NULL }, - { MI_TYPE_BUTTON, 384/3 - 106 - 10, 256-16-27, 0, LargeFont, NULL, NULL, - { button:{ "~!Save", 106, 27, MBUTTON_GM_HALF, EndMenu, 's'} } }, - { MI_TYPE_BUTTON, 2*384/3 - 106 - 10, 256-16-27, 0, LargeFont, NULL, NULL, - { button:{ "~!Delete", 106, 27, MBUTTON_GM_HALF, EndMenu, 'd'} } }, - { MI_TYPE_BUTTON, 3*384/3 - 106 - 10, 256-16-27, 0, LargeFont, NULL, NULL, - { button:{ "~!Cancel", 106, 27, MBUTTON_GM_HALF, EndMenu, 'c'} } }, - -#else - { 0 } -#endif + { MI_TYPE_BUTTON, 384/3 - 106 - 10, 256-16-27, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 2*384/3 - 106 - 10, 256-16-27, 0, LargeFont, NULL, NULL, NULL }, + { MI_TYPE_BUTTON, 3*384/3 - 106 - 10, 256-16-27, 0, LargeFont, NULL, NULL, NULL }, }; +local void InitSaveGameMenuItems() { + MenuitemText i0 = { "Save Game", MI_TFLAGS_CENTERED}; + MenuitemInput i1 = { NULL, 384-16-16, 16, MBUTTON_PULLDOWN, EnterSaveGameAction, 0, 0}; + MenuitemListbox i2 = { NULL, 384-16-16-16, 7*18, MBUTTON_PULLDOWN, ScenSelectLBAction, 0, 0, 0, 0, 7, 0, + (void *)ScenSelectLBRetrieve, ScenSelectOk}; + MenuitemVslider i3 = { 0, 18, 7*18, ScenSelectVSAction, -1, 0, 0, 0, ScenSelectOk}; + MenuitemButton i4 = { "~!Save", 106, 27, MBUTTON_GM_HALF, EndMenu, 's'}; + MenuitemButton i5 = { "~!Delete", 106, 27, MBUTTON_GM_HALF, EndMenu, 'd'}; + MenuitemButton i6 = { "~!Cancel", 106, 27, MBUTTON_GM_HALF, EndMenu, 'c'}; + SaveGameMenuItems[0].d.text = i0; + SaveGameMenuItems[1].d.input = i1; + SaveGameMenuItems[2].d.listbox = i2; + SaveGameMenuItems[3].d.vslider = i3; + SaveGameMenuItems[4].d.button = i4; + SaveGameMenuItems[5].d.button = i5; + SaveGameMenuItems[6].d.button = i6; +} /** ** FIXME: Ari please look, this is now in TheUI. @@ -2570,7 +2756,7 @@ local void NextTip(void) /** ** Cycle through the tips */ -local void ShowNextTip() +local void ShowNextTip(void) { NextTip(); InitTips(NULL); @@ -2750,7 +2936,7 @@ local void CampaignGameMenu(void) VideoUnlockScreen(); Invalidate(); - DebugLevel0Fn("%d campaigns available\n",NumCampaigns); + DebugLevel0Fn("%d campaigns available\n" _C_ NumCampaigns); IfDebug( for( i=0; i<NumCampaigns; ++i ) { DebugLevel0Fn("Campaign %d: %16.16s: %s\n",i, @@ -3047,7 +3233,7 @@ local void TerminateNetConnect(void) break; } - DebugLevel1Fn("NetLocalState %d\n", NetLocalState); + DebugLevel1Fn("NetLocalState %d\n" _C_ NetLocalState); NetConnectRunning = 2; DestroyCursorBackground(); GuiGameStarted = 0; @@ -3125,7 +3311,7 @@ local void MultiPlayerGameMenu(void) // Here we really go... ProcessMenu(MENU_NET_CREATE_JOIN, 1); - DebugLevel0Fn("GuiGameStarted: %d\n", GuiGameStarted); + DebugLevel0Fn("GuiGameStarted: %d\n" _C_ GuiGameStarted); if (GuiGameStarted) { GameMenuReturn(); } @@ -3152,7 +3338,7 @@ local void ScenSelectInit(Menuitem * mi __attribute__ ((unused))) ScenSelectMenuItems[9].flags = *ScenSelectDisplayPath ? 0 : MenuButtonDisabled; ScenSelectMenuItems[9].d.button.text = ScenSelectDisplayPath; - DebugLevel0Fn("Start path: %s\n", ScenSelectPath); + DebugLevel0Fn("Start path: %s\n" _C_ ScenSelectPath); } local void ScenSelectLBAction(Menuitem *mi, int i) @@ -3279,7 +3465,7 @@ usezzf: if (strcasestr(pathbuf, ".pud")) { info = GetPudInfo(pathbuf); if (info) { - DebugLevel3Fn("GetPudInfo(%s) : %p\n", pathbuf, info); + DebugLevel3Fn("GetPudInfo(%s) : %p\n" _C_ pathbuf _C_ info); sz = szl[ScenSelectMenuItems[8].d.pulldown.curopt]; if (sz < 0 || (info->MapWidth == sz && info->MapHeight == sz)) { fl->type = 1; @@ -3295,7 +3481,7 @@ usezzf: if (strstr(pathbuf, ".cm")) { // info = GetCmInfo(pathbuf); info = NULL; - DebugLevel3Fn("GetCmInfo(%s) : %p\n", pathbuf, info); + DebugLevel3Fn("GetCmInfo(%s) : %p\n" _C_ pathbuf _C_ info); fl->type = 1; fl->name = strdup(np); fl->xdata = info; @@ -3537,12 +3723,12 @@ local void ScenSelectHSGameSpeedAction(Menuitem *mi, int i) case 0: // click - down case 2: // key - down if (mi[1].d.hslider.cflags&MI_CFLAGS_RIGHT) { - DebugLevel0Fn("Increasing game speed by 10%s\n", "%"); + DebugLevel0Fn("Increasing game speed by 10%s\n" _C_ "%"); mi[1].d.hslider.percent += 10; if (mi[1].d.hslider.percent > 100) mi[1].d.hslider.percent = 100; } else if (mi[1].d.hslider.cflags&MI_CFLAGS_LEFT) { - DebugLevel0Fn("Decreasing game speed by 10%s\n", "%"); + DebugLevel0Fn("Decreasing game speed by 10%s\n" _C_ "%"); mi[1].d.hslider.percent -= 10; if (mi[1].d.hslider.percent < 0) mi[1].d.hslider.percent = 0; @@ -3864,7 +4050,7 @@ local void ScenSelectCancel(void) // // Use last selected map. // - DebugLevel0Fn("Map path: %s\n", CurrentMapPath); + DebugLevel0Fn("Map path: %s\n" _C_ CurrentMapPath); strcpy(ScenSelectPath, FreeCraftLibPath); if (*ScenSelectPath) { strcat(ScenSelectPath, "/"); @@ -3881,7 +4067,7 @@ local void ScenSelectCancel(void) *ScenSelectDisplayPath = '\0'; } - DebugLevel0Fn("Start path: %s\n", ScenSelectPath); + DebugLevel0Fn("Start path: %s\n" _C_ ScenSelectPath); EndMenu(); } @@ -3947,7 +4133,7 @@ local void GameSetupInit(Menuitem * mi __attribute__ ((unused))) } - DebugLevel0Fn("Map path: %s\n", CurrentMapPath); + DebugLevel0Fn("Map path: %s\n" _C_ CurrentMapPath); strcpy(ScenSelectPath, FreeCraftLibPath); if (*ScenSelectPath) { strcat(ScenSelectPath, "/"); @@ -3963,7 +4149,7 @@ local void GameSetupInit(Menuitem * mi __attribute__ ((unused))) } else { *ScenSelectDisplayPath = '\0'; } - DebugLevel0Fn("Start path: %s\n", ScenSelectPath); + DebugLevel0Fn("Start path: %s\n" _C_ ScenSelectPath); GetInfoFromSelectPath(); } @@ -4120,7 +4306,7 @@ local void NetworkGamePrepareGameSettings(void) DebugCheck(!ScenSelectPudInfo); - DebugLevel0Fn("NetPlayers = %d\n", NetPlayers); + DebugLevel0Fn("NetPlayers = %d\n" _C_ NetPlayers); #ifdef DEBUG for (i = 0; i < PlayerMax-1; i++) { @@ -4139,7 +4325,7 @@ local void NetworkGamePrepareGameSettings(void) // Make a list of the available player slots. for (h = i = 0; i < PlayerMax-1; i++) { if (ScenSelectPudInfo->PlayerType[i] == PlayerPerson) { - DebugLevel3Fn("Player slot %i is available for a person\n", i); + DebugLevel3Fn("Player slot %i is available for a person\n" _C_ i); num[h++] = i; } } @@ -4147,7 +4333,7 @@ local void NetworkGamePrepareGameSettings(void) switch(ServerSetupState.CompOpt[num[i]]) { case 0: GameSettings.Presets[num[i]].Type = PlayerPerson; - DebugLevel3Fn("Settings[%d].Type == Person\n", num[i]); + DebugLevel3Fn("Settings[%d].Type == Person\n" _C_ num[i]); switch (ServerSetupState.Race[num[i]]) { case 1: GameSettings.Presets[num[i]].Race = PlayerRaceOrc; @@ -4160,11 +4346,11 @@ local void NetworkGamePrepareGameSettings(void) break; case 1: GameSettings.Presets[num[i]].Type = PlayerComputer; - DebugLevel3Fn("Settings[%d].Type == Computer\n", num[i]); + DebugLevel3Fn("Settings[%d].Type == Computer\n" _C_ num[i]); break; case 2: GameSettings.Presets[num[i]].Type = PlayerNobody; - DebugLevel3Fn("Settings[%d].Type == Closed\n", num[i]); + DebugLevel3Fn("Settings[%d].Type == Closed\n" _C_ num[i]); default: break; } @@ -4193,7 +4379,7 @@ local void MultiGamePlayerSelectorsUpdate(int initial) // Use lag gem as KICK button // Notify clients about MAP change: (initial = 1...) - DebugLevel3Fn("initial = %d\n", initial); + DebugLevel3Fn("initial = %d\n" _C_ initial); // Calculate available slots from pudinfo for (c = h = i = 0; i < PlayerMax; i++) { @@ -4275,7 +4461,7 @@ local void MultiGamePlayerSelectorsUpdate(int initial) // Tell connect state machines how many interactive players we can have NetPlayers = avail; // Check if all players are ready. - DebugLevel0Fn("READY to START: AVAIL = %d, READY = %d\n", avail, ready); + DebugLevel0Fn("READY to START: AVAIL = %d, READY = %d\n" _C_ avail _C_ ready); if (ready == avail) { NetMultiSetupMenuItems[3].flags = 0; // enable start game button } else { @@ -4366,7 +4552,7 @@ local void MultiGameSetupInit(Menuitem *mi) ServerSetupState.CompOpt[i] = 1; } MultiGamePlayerSelectorsUpdate(1); - DebugLevel3Fn("h = %d, NetPlayers = %d\n", h, NetPlayers); + DebugLevel3Fn("h = %d, NetPlayers = %d\n" _C_ h _C_ NetPlayers); } local void MultiGameSetupExit(Menuitem *mi __attribute__((unused))) @@ -4440,7 +4626,7 @@ local void NetMultiPlayerDrawFunc(Menuitem *mi) GetDefaultTextColors(&nc, &rc); SetDefaultTextColors(rc, rc); - DebugLevel3Fn("Hosts[%d].PlyName = %s\n", i, Hosts[i].PlyName); + DebugLevel3Fn("Hosts[%d].PlyName = %s\n" _C_ i _C_ Hosts[i].PlyName); VideoDrawText(OffsetX+mi->xofs, OffsetY+mi->yofs, GameFont, Hosts[i].PlyName); SetDefaultTextColors(nc, rc); @@ -4476,7 +4662,7 @@ local void MultiClientGemAction(Menuitem *mi __attribute__((unused))) int i; i = mi - NetMultiClientMenuItems - CLIENT_PLAYER_READY + 1; - DebugLevel3Fn("i = %d, NetLocalHostsSlot = %d\n", i, NetLocalHostsSlot); + DebugLevel3Fn("i = %d, NetLocalHostsSlot = %d\n" _C_ i _C_ NetLocalHostsSlot); if (i == NetLocalHostsSlot) { LocalSetupState.Ready[i] = !LocalSetupState.Ready[i]; if (LocalSetupState.Ready[i]) { @@ -4831,7 +5017,7 @@ normkey: } mi++; } - DebugLevel3("Key %d\n",key); + DebugLevel3("Key %d\n" _C_ key); return; } return; @@ -5381,7 +5567,7 @@ global void ProcessMenu(int menu_id, int loop) if (loop) { while (CurrentMenu != -1) { - DebugLevel3("MustRedraw: 0x%08x\n",MustRedraw); + DebugLevel3("MustRedraw: 0x%08x\n" _C_ MustRedraw); if (MustRedraw) { UpdateDisplay(); } @@ -5457,6 +5643,34 @@ global void InitMenus(unsigned int race) const char* file; char *buf; + if (last_race == -1) { + InitGameMenuItems(); + InitVictoryMenuItems(); + InitLostMenuItems(); + InitTipsMenuItems(); + InitObjectivesMenuItems(); + InitEndScenarioMenuItems(); + InitScenSelectMenuItems(); + InitPrgStartMenuItems(); + InitCustomGameMenuItems(); + InitEnterNameMenuItems(); + InitEnterServerIPMenuItems(); + InitNetCreateJoinMenuItems(); + InitNetMultiButtonStorage(); + InitNetMultiSetupMenuItems(); + InitNetMultiClientMenuItems(); + InitNetErrorMenuItems(); + InitConnectingMenuItems(); + InitCampaignSelectMenuItems(); + InitSoundOptionsMenuItems(); + InitPreferencesMenuItems(); + InitSpeedSettingsMenuItems(); + InitGameOptionsMenuItems(); + InitHelpMenuItems(); + InitKeystrokeHelpMenuItems(); + InitSaveGameMenuItems(); + } + if (last_race == -1 && VideoWidth != 640) { MoveButtons(); }