Add EVENT_CHANGEMENU and clean up menus.c a little more.

This event is useful in certain circumstances where you want to skip a menu/screen value and the design of the monster switch statement would require the M_ChangeMenu() call to be intercepted or the unwanted screen will flash for a split second.

git-svn-id: https://svn.eduke32.com/eduke32@3101 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
hendricks266 2012-10-29 04:29:45 +00:00
parent 2066656aed
commit f18ef269ed
4 changed files with 78 additions and 90 deletions

View file

@ -667,7 +667,8 @@ const tokenlist EventNames[MAXEVENTS] =
{ "EVENT_CHECKFLOORDAMAGE", EVENT_CHECKFLOORDAMAGE }, { "EVENT_CHECKFLOORDAMAGE", EVENT_CHECKFLOORDAMAGE },
{ "EVENT_LOADGAME", EVENT_LOADGAME }, { "EVENT_LOADGAME", EVENT_LOADGAME },
{ "EVENT_SAVEGAME", EVENT_SAVEGAME }, { "EVENT_SAVEGAME", EVENT_SAVEGAME },
{ "EVENT_PREGAME", EVENT_PREGAME } { "EVENT_PREGAME", EVENT_PREGAME },
{ "EVENT_CHANGEMENU", EVENT_CHANGEMENU }
}; };
const memberlabel_t SectorLabels[]= const memberlabel_t SectorLabels[]=

View file

@ -124,6 +124,7 @@ enum GameEvent_t {
EVENT_LOADGAME, EVENT_LOADGAME,
EVENT_SAVEGAME, EVENT_SAVEGAME,
EVENT_PREGAME, EVENT_PREGAME,
EVENT_CHANGEMENU,
MAXEVENTS MAXEVENTS
}; };

View file

@ -159,6 +159,7 @@ labels =
EVENT_LOADGAME = 91, EVENT_LOADGAME = 91,
EVENT_SAVEGAME = 92, EVENT_SAVEGAME = 92,
EVENT_PREGAME = 93, EVENT_PREGAME = 93,
EVENT_CHANGEMENU = 94,
}, },
} }

View file

@ -97,6 +97,11 @@ extern int32_t voting;
void M_ChangeMenu(int32_t cm) void M_ChangeMenu(int32_t cm)
{ {
if (apScriptGameEvent[EVENT_CHANGEMENU])
cm = VM_OnEvent(EVENT_CHANGEMENU, g_player[myconnectindex].ps->i, myconnectindex, -1, cm);
if (cm >= 0)
{
g_currentMenu = cm; g_currentMenu = cm;
switch (g_currentMenu) switch (g_currentMenu)
@ -126,6 +131,31 @@ void M_ChangeMenu(int32_t cm)
} }
lastsavehead = -1; lastsavehead = -1;
}
}
static void M_LinearPanels(int32_t firstMenu, int32_t lastMenu)
{
int32_t changedMenu = g_currentMenu;
if (I_PanelUp())
{
I_PanelUpClear();
S_PlaySound(KICK_HIT);
changedMenu--;
if (changedMenu < firstMenu) changedMenu = lastMenu;
M_ChangeMenu(changedMenu);
}
else if (I_PanelDown())
{
I_PanelDownClear();
S_PlaySound(KICK_HIT);
changedMenu++;
if (changedMenu > lastMenu) changedMenu = firstMenu;
M_ChangeMenu(changedMenu);
}
} }
#define LMB (buttonstat&LEFT_MOUSE) #define LMB (buttonstat&LEFT_MOUSE)
@ -996,7 +1026,7 @@ void M_DisplayMenus(void)
{ {
strcpy(buf, szPlayerName); strcpy(buf, szPlayerName);
inputloc = strlen(buf); inputloc = strlen(buf);
g_currentMenu = 20003; M_ChangeMenu(20003);
I_AdvanceTriggerClear(); I_AdvanceTriggerClear();
} }
@ -1127,7 +1157,7 @@ void M_DisplayMenus(void)
} }
I_AdvanceTriggerClear(); I_AdvanceTriggerClear();
g_currentMenu = 20002; M_ChangeMenu(20002);
} }
} }
@ -1224,7 +1254,7 @@ void M_DisplayMenus(void)
strcpy(buf, ud.ridecule[x]); strcpy(buf, ud.ridecule[x]);
inputloc = strlen(buf); inputloc = strlen(buf);
last_menu_pos = probey; last_menu_pos = probey;
g_currentMenu = 20005; M_ChangeMenu(20005);
I_AdvanceTriggerClear(); I_AdvanceTriggerClear();
} }
} }
@ -1238,7 +1268,7 @@ void M_DisplayMenus(void)
Bstrcpy(ud.ridecule[last_menu_pos],buf); Bstrcpy(ud.ridecule[last_menu_pos],buf);
} }
I_AdvanceTriggerClear(); I_AdvanceTriggerClear();
g_currentMenu = 20004; M_ChangeMenu(20004);
} }
} }
for (i=0; i<10; i++) for (i=0; i<10; i++)
@ -1453,13 +1483,13 @@ void M_DisplayMenus(void)
{ {
strcpy(buf, "localhost"); strcpy(buf, "localhost");
inputloc = strlen(buf); inputloc = strlen(buf);
g_currentMenu = 20021; M_ChangeMenu(20021);
} }
else if (x == 1) else if (x == 1)
{ {
strcpy(buf, "19014"); strcpy(buf, "19014");
inputloc = strlen(buf); inputloc = strlen(buf);
g_currentMenu = 20022; M_ChangeMenu(20022);
} }
else if (x == 2) else if (x == 2)
{} {}
@ -1477,7 +1507,7 @@ void M_DisplayMenus(void)
I_AdvanceTriggerClear(); I_AdvanceTriggerClear();
g_currentMenu = 20020; M_ChangeMenu(20020);
} }
} }
else if (g_currentMenu == 20022) else if (g_currentMenu == 20022)
@ -1492,7 +1522,7 @@ void M_DisplayMenus(void)
I_AdvanceTriggerClear(); I_AdvanceTriggerClear();
g_currentMenu = 20020; M_ChangeMenu(20020);
} }
} }
@ -1600,7 +1630,7 @@ void M_DisplayMenus(void)
wall[animwall[x].wallnum].picnum = wall[animwall[x].wallnum].extra; wall[animwall[x].wallnum].picnum = wall[animwall[x].wallnum].extra;
#endif #endif
} }
g_currentMenu = MENU_ADULTMODE; M_ChangeMenu(MENU_ADULTMODE);
I_AdvanceTriggerClear(); I_AdvanceTriggerClear();
} }
} }
@ -1625,7 +1655,7 @@ void M_DisplayMenus(void)
else else
{ {
buf[0] = 0; buf[0] = 0;
g_currentMenu = MENU_ADULTPASSWORD; M_ChangeMenu(MENU_ADULTPASSWORD);
inputloc = 0; inputloc = 0;
KB_FlushKeyboardQueue(); KB_FlushKeyboardQueue();
} }
@ -1650,7 +1680,7 @@ void M_DisplayMenus(void)
else if (x == 1) else if (x == 1)
{ {
g_currentMenu = MENU_ADULTPASSWORD; M_ChangeMenu(MENU_ADULTPASSWORD);
inputloc = 0; inputloc = 0;
KB_FlushKeyboardQueue(); KB_FlushKeyboardQueue();
} }
@ -1846,22 +1876,7 @@ void M_DisplayMenus(void)
l = 4; l = 4;
} }
if (I_PanelUp()) M_LinearPanels(MENU_CREDITS, MENU_CREDITS+l);
{
I_PanelUpClear();
S_PlaySound(KICK_HIT);
g_currentMenu--;
if (g_currentMenu < MENU_CREDITS) g_currentMenu = MENU_CREDITS+l;
}
else if (I_PanelDown())
{
I_PanelDownClear();
S_PlaySound(KICK_HIT);
g_currentMenu++;
if (g_currentMenu > MENU_CREDITS+l) g_currentMenu = MENU_CREDITS;
}
x = M_Probe(0,0,0,1); x = M_Probe(0,0,0,1);
@ -4987,16 +5002,16 @@ cheat_for_port_credits2:
if (g_currentMenu == MENU_LOAD) if (g_currentMenu == MENU_LOAD)
{ {
if (ud.savegame[x][0]) if (ud.savegame[x][0])
g_currentMenu = (1000+x); M_ChangeMenu(1000+x);
} }
else else
{ {
if (ud.savegame[x][0] != 0) if (ud.savegame[x][0] != 0)
g_currentMenu = 2000+x; M_ChangeMenu(2000+x);
else else
{ {
KB_FlushKeyboardQueue(); KB_FlushKeyboardQueue();
g_currentMenu = (360+x); M_ChangeMenu(360+x);
ud.savegame[x][0] = 0; ud.savegame[x][0] = 0;
inputloc = 0; inputloc = 0;
} }
@ -5016,22 +5031,7 @@ DISPLAYNAMES:
margin = MENU_MARGIN_CENTER; margin = MENU_MARGIN_CENTER;
if (I_PanelUp()) M_LinearPanels(MENU_STORY, 403);
{
I_PanelUpClear();
S_PlaySound(KICK_HIT);
g_currentMenu--;
if (g_currentMenu < MENU_STORY) g_currentMenu = 403;
}
else if (I_PanelDown())
{
I_PanelDownClear();
S_PlaySound(KICK_HIT);
g_currentMenu++;
if (g_currentMenu > 403) g_currentMenu = MENU_STORY;
}
x = M_Probe(0,0,0,1); x = M_Probe(0,0,0,1);
@ -5051,22 +5051,7 @@ VOLUME_ALL_40x:
margin = MENU_MARGIN_CENTER; margin = MENU_MARGIN_CENTER;
if (I_PanelUp()) M_LinearPanels(MENU_STORY, MENU_F1HELP);
{
I_PanelUpClear();
S_PlaySound(KICK_HIT);
g_currentMenu--;
if (g_currentMenu < MENU_STORY) g_currentMenu = MENU_F1HELP;
}
else if (I_PanelDown())
{
I_PanelDownClear();
S_PlaySound(KICK_HIT);
g_currentMenu++;
if (g_currentMenu > MENU_F1HELP) g_currentMenu = MENU_STORY;
}
x = M_Probe(0,0,0,1); x = M_Probe(0,0,0,1);
@ -5427,7 +5412,7 @@ VOLUME_ALL_40x:
break; break;
} }
if (apScriptGameEvent[EVENT_DISPLAYMENUREST]) if (apScriptGameEvent[EVENT_DISPLAYMENUREST])
VM_OnEvent(EVENT_DISPLAYMENUREST, g_player[myconnectindex].ps->i, myconnectindex, -1, 0); VM_OnEvent(EVENT_DISPLAYMENUREST, g_player[screenpeek].ps->i, screenpeek, -1, 0);
if (I_EscapeTrigger()) if (I_EscapeTrigger())
I_EscapeTriggerClear(); I_EscapeTriggerClear();