static void UI_MessageMode_f( void ) { char *arg = UI_Argv( 0 ); trap_Cvar_Set( "ui_sayBuffer", "" ); switch( arg[ 11 ] ) { default: case '\0': // Global uiInfo.chatTeam = qfalse; break; case '2': // Team uiInfo.chatTeam = qtrue; break; } trap_Key_SetCatcher( KEYCATCH_UI ); Menus_CloseByName( "say" ); Menus_CloseByName( "say_team" ); if( uiInfo.chatTeam ) Menus_ActivateByName( "say_team" ); else Menus_ActivateByName( "say" ); }
qboolean UI_ConsoleCommand( int realTime ) { char *cmd = UI_Argv( 0 ); uiInfo.uiDC.frameTime = realTime - uiInfo.uiDC.realTime; uiInfo.uiDC.realTime = realTime; if ( Q_stricmp( cmd, "ui_report" ) == 0 ) { UI_Report(); return qtrue; } if ( Q_stricmp( cmd, "ui_load" ) == 0 ) { UI_Load(); return qtrue; } if ( Q_stricmp( cmd, "ui_opensiegemenu" ) == 0 ) { if ( trap->Cvar_VariableValue( "g_gametype" ) == GT_SIEGE ) { Menus_CloseAll(); if ( Menus_ActivateByName( UI_Argv( 1 ) ) ) { trap->Key_SetCatcher( KEYCATCH_UI ); } } return qtrue; } if ( !Q_stricmp( cmd, "ui_openmenu" ) ) { Menus_CloseAll(); if ( Menus_ActivateByName( UI_Argv( 1 ) ) ) { trap->Key_SetCatcher( KEYCATCH_UI ); } return qtrue; } if ( Q_stricmp( cmd, "ui_cache" ) == 0 ) { UI_Cache_f(); return qtrue; } if ( Q_stricmp( cmd, "ui_teamOrders" ) == 0 ) { return qtrue; } if ( Q_stricmp( cmd, "ui_cdkey" ) == 0 ) { return qtrue; } return qfalse; }
void JKG_PartyMngt_UpdateNotify(int msg) { // Gets called from CGame if there's an update // CAUTION: To use trap/UI calls, use the syscall override first! // Msg 0: New team/invite information // Msg 1: New seekers information // Msg 10: Open the team manager if (msg == 0) { if (!PMngtData.active) { return; } JKG_PartyMngt_UpdateState(); } else if (msg == 1) { if (!PMngtData.active) { return; } JKG_PartyMngt_UpdateSeekers(); } else if (msg == 10) { memset(&PMngtData, 0, sizeof(PMngtData)); PMngtData.active = 1; if (Menus_ActivateByName("jkg_partymanagement")) { trap->Key_SetCatcher( trap->Key_GetCatcher() | KEYCATCH_UI & ~KEYCATCH_CONSOLE ); } } }
/* =============== UI_SaveMenu_f =============== */ static void UI_SaveMenu_f( void ) { ui.PrecacheScreenshot(); trap_Key_SetCatcher( KEYCATCH_UI ); Menus_ActivateByName("ingamesaveMenu"); }
static int Menu_Activate( lua_State *L ) { menuDef_t *menu = CheckMenu( L, 1 ); Menus_CloseAll(); Menus_ActivateByName( menu->window.name ); trap->Key_SetCatcher( KEYCATCH_CGAME ); return 0; }
static void UI_Menu_f( void ) { if( Menu_Count( ) > 0 ) { trap_Key_SetCatcher( KEYCATCH_UI ); Menus_ActivateByName( UI_Argv( 1 ) ); } }
void JKG_Shop_UpdateNotify(int msg) { menuDef_t* menu = Menus_FindByName("jkg_shop"); if (menu && Menus_ActivateByName("jkg_shop")) { JKG_ConstructShopLists(); trap->Key_SetCatcher( trap->Key_GetCatcher() | KEYCATCH_UI ); } }
/* =============== UI_SaveMenu_f =============== */ static void UI_SaveMenu_f( void ) { #ifdef JK2_MODE ui.PrecacheScreenshot(); #endif trap_Key_SetCatcher( KEYCATCH_UI ); Menus_ActivateByName("ingamesaveMenu"); }
/* ================= UI_SetActiveMenu - this should be the ONLY way the menu system is brought up ================= */ void UI_SetActiveMenu( const char* menuname,const char *menuID ) { // this should be the ONLY way the menu system is brought up (besides the UI_ConsoleCommand below) if (cls.state != CA_DISCONNECTED && !ui.SG_GameAllowedToSaveHere(qtrue)) //don't check full sytem, only if incamera { return; } if ( !menuname ) { UI_ForceMenuOff(); return; } //make sure force-speed and slowmodeath doesn't slow down menus - NOTE: they should reset the timescale when the game un-pauses Cvar_SetValue( "timescale", 1.0f ); UI_Cursor_Show(qtrue); // enusure minumum menu data is cached Menu_Cache(); if ( Q_stricmp (menuname, "mainMenu") == 0 ) { UI_MainMenu(); return; } if ( Q_stricmp (menuname, "ingame") == 0 ) { ui.Cvar_Set( "cl_paused", "1" ); UI_InGameMenu(menuID); return; } if ( Q_stricmp (menuname, "datapad") == 0 ) { ui.Cvar_Set( "cl_paused", "1" ); UI_DataPadMenu(); return; } #ifndef JK2_MODE if ( Q_stricmp (menuname, "missionfailed_menu") == 0 ) { Menus_CloseAll(); Menus_ActivateByName("missionfailed_menu"); ui.Key_SetCatcher( KEYCATCH_UI ); return; } #endif }
/* ================= UI_Cache ================= */ static void UI_Cache_f( void ) { Menu_Cache(); #ifndef JK2_MODE extern const char *lukeForceStatusSounds[]; extern const char *kyleForceStatusSounds[]; for (int index = 0; index < 5; index++) { DC->registerSound(lukeForceStatusSounds[index], qfalse); DC->registerSound(kyleForceStatusSounds[index], qfalse); } for (int index = 1; index <= 18; index++) { DC->registerSound(va("sound/chars/storyinfo/%d",index), qfalse); } trap_S_RegisterSound("sound/chars/kyle/04kyk001.mp3", qfalse); trap_S_RegisterSound("sound/chars/kyle/05kyk001.mp3", qfalse); trap_S_RegisterSound("sound/chars/kyle/07kyk001.mp3", qfalse); trap_S_RegisterSound("sound/chars/kyle/14kyk001.mp3", qfalse); trap_S_RegisterSound("sound/chars/kyle/21kyk001.mp3", qfalse); trap_S_RegisterSound("sound/chars/kyle/24kyk001.mp3", qfalse); trap_S_RegisterSound("sound/chars/kyle/25kyk001.mp3", qfalse); trap_S_RegisterSound("sound/chars/luke/06luk001.mp3", qfalse); trap_S_RegisterSound("sound/chars/luke/08luk001.mp3", qfalse); trap_S_RegisterSound("sound/chars/luke/22luk001.mp3", qfalse); trap_S_RegisterSound("sound/chars/luke/23luk001.mp3", qfalse); trap_S_RegisterSound("sound/chars/protocol/12pro001.mp3", qfalse); trap_S_RegisterSound("sound/chars/protocol/15pro001.mp3", qfalse); trap_S_RegisterSound("sound/chars/protocol/16pro001.mp3", qfalse); trap_S_RegisterSound("sound/chars/wedge/13wea001.mp3", qfalse); Menus_ActivateByName("ingameMissionSelect1"); Menus_ActivateByName("ingameMissionSelect2"); Menus_ActivateByName("ingameMissionSelect3"); #endif }
void Menus_CloseByName(const char *p) { menuDef_t *menu = Menus_FindByName(p); if (menu != NULL) { int i; // Gordon: make sure no edit fields are left hanging for (i = 0; i < menu->itemCount; i++) { if (g_editItem == menu->items[i]) { g_editingField = qfalse; g_editItem = NULL; } } menu->cursorItem = -1; Menu_ClearFocus(menu); Menu_RunCloseScript(menu); menu->window.flags &= ~(WINDOW_VISIBLE | WINDOW_HASFOCUS | WINDOW_MOUSEOVER); if (menu->window.flags & WINDOW_MODAL) { if (modalMenuCount <= 0) { Com_Printf(S_COLOR_YELLOW "WARNING: tried closing a modal window with an empty modal stack!\n"); } else { modalMenuCount--; // if modal doesn't have a parent, the stack item may be NULL .. just go back to the main menu then if (modalMenuStack[modalMenuCount]) { Menus_ActivateByName(modalMenuStack[modalMenuCount]->window.name, qfalse); // don't try to push the one we are opening to the stack } } } } }
void JKG_PartyMngt_UpdateNotify(jkgPartyNotify_e msg) { // Gets called from CGame if there's an update // CAUTION: To use trap/UI calls, use the syscall override first! if (msg == PARTYNOTIFY_UPDATESTATE) { if (!PMngtData.active) { return; } JKG_PartyMngt_UpdateState(); } else if (msg == PARTYNOTIFY_UPDATESEEKERS) { if (!PMngtData.active) { return; } JKG_PartyMngt_UpdateSeekers(); } else if (msg == PARTYNOTIFY_OPEN) { memset(&PMngtData, 0, sizeof(PMngtData)); PMngtData.active = 1; if (Menus_ActivateByName("jkg_partymanagement")) { trap->Key_SetCatcher( trap->Key_GetCatcher() | KEYCATCH_UI ); } } }
/* ================= UI_ConsoleCommand ================= */ qboolean UI_ConsoleCommand( int realTime ) { char *cmd; uiInfo.uiDC.frameTime = realTime - uiInfo.uiDC.realTime; uiInfo.uiDC.realTime = realTime; cmd = UI_Argv( 0 ); // ensure minimum menu data is available //Menu_Cache(); // JKG - Only allow these commands if we're using a debug compile // We don't want players f****n around with these #ifdef _DEBUG if ( Q_stricmp (cmd, "ui_report") == 0 ) { UI_Report(); return qtrue; } /*if ( Q_stricmp (cmd, "ui_testmaster") == 0) { JKG_GLUI_Task_Test(testMasterFinalFunc); return qtrue; } if ( Q_stricmp (cmd, "ui_testterms") == 0) { JKG_GLUI_Task_GetTermsOfUse(termsMasterFinalFunc); return qtrue; } if ( Q_stricmp (cmd, "ui_testregister") == 0 ) { char username[32]; char password[32]; char email[64]; trap_Argv(1, username, 32); trap_Argv(2, password, 32); trap_Argv(3, email, 32); JKG_GLUI_Task_RegisterUser(username, password, email, registerFinalFunc); return qtrue; } if ( Q_stricmp (cmd, "ui_testlogin") == 0 ) { char username[32]; char password[32]; trap_Argv(1, username, 32); trap_Argv(2, password, 32); JKG_GLUI_Task_Login(username, password, loginFinalFunc); return qtrue; }*/ if ( Q_stricmp (cmd, "ui_report") == 0 ) { UI_Report(); return qtrue; } if ( Q_stricmp (cmd, "ui_load") == 0 ) { UI_Load(); return qtrue; } if ( Q_stricmp (cmd, "ui_openmenu" ) == 0 ) { //if ( trap_Cvar_VariableValue ( "developer" ) ) { Menus_CloseAll(); if (Menus_ActivateByName(UI_Argv(1))) { trap_Key_SetCatcher( KEYCATCH_UI ); } return qtrue; } } if ( Q_stricmp (cmd, "ui_cache") == 0 ) { UI_Cache_f(); return qtrue; } if ( Q_stricmp (cmd, "ui_teamOrders") == 0 ) { //UI_TeamOrdersMenu_f(); return qtrue; } #endif // _DEBUG return qfalse; }
/* ================= UI_ConsoleCommand ================= */ qboolean UI_ConsoleCommand(int realTime) { char *cmd; char *arg1; uiInfo.uiDC.frameTime = realTime - uiInfo.uiDC.realTime; uiInfo.uiDC.realTime = realTime; cmd = UI_Argv(0); // ensure minimum menu data is available //Menu_Cache(); if(Q_stricmp(cmd, "ui_test") == 0) { UI_ShowPostGame(qtrue); } if(Q_stricmp(cmd, "ui_report") == 0) { UI_Report(); return qtrue; } if(Q_stricmp(cmd, "ui_load") == 0) { UI_Load(); return qtrue; } if(Q_stricmp(cmd, "remapShader") == 0) { if(trap_Argc() == 4) { char shader1[MAX_QPATH]; char shader2[MAX_QPATH]; Q_strncpyz(shader1, UI_Argv(1), sizeof(shader1)); Q_strncpyz(shader2, UI_Argv(2), sizeof(shader2)); trap_R_RemapShader(shader1, shader2, UI_Argv(3)); return qtrue; } } if(Q_stricmp(cmd, "postgame") == 0) { UI_CalcPostGameStats(); return qtrue; } if(Q_stricmp(cmd, "ui_cache") == 0) { UI_Cache_f(); return qtrue; } if(Q_stricmp(cmd, "ui_teamOrders") == 0) { //UI_TeamOrdersMenu_f(); return qtrue; } if(Q_stricmp(cmd, "menu") == 0) { arg1 = UI_Argv(1); if(Menu_Count() > 0) { trap_Key_SetCatcher(KEYCATCH_UI); Menus_ActivateByName(arg1); return qtrue; } } if(Q_stricmp(cmd, "closemenus") == 0) { if(Menu_Count() > 0) { trap_Key_SetCatcher(trap_Key_GetCatcher() & ~KEYCATCH_UI); trap_Key_ClearStates(); trap_Cvar_Set("cl_paused", "0"); Menus_CloseAll(); return qtrue; } } return qfalse; }
/* =============== UI_LoadMenu_f =============== */ static void UI_LoadMenu_f( void ) { trap_Key_SetCatcher( KEYCATCH_UI ); Menus_ActivateByName("ingameloadMenu"); }
/* ================= UI_ConsoleCommand ================= */ qboolean UI_ConsoleCommand( int realTime ) { char *cmd; uiInfo.uiDC.frameTime = realTime - uiInfo.uiDC.realTime; uiInfo.uiDC.realTime = realTime; cmd = UI_Argv( 0 ); // ensure minimum menu data is available //Menu_Cache(); if ( Q_stricmp (cmd, "ui_test") == 0 ) { UI_ShowPostGame(qtrue); } if ( Q_stricmp (cmd, "ui_report") == 0 ) { UI_Report(); return qtrue; } if ( Q_stricmp (cmd, "ui_load") == 0 ) { UI_Load(); return qtrue; } if ( Q_stricmp (cmd, "ui_opensiegemenu" ) == 0 ) { if ( trap_Cvar_VariableValue ( "g_gametype" ) == GT_SIEGE ) { Menus_CloseAll(); if (Menus_ActivateByName(UI_Argv(1))) { trap_Key_SetCatcher( KEYCATCH_UI ); } } return qtrue; } if ( Q_stricmp (cmd, "ui_openmenu" ) == 0 ) { //if ( trap_Cvar_VariableValue ( "developer" ) ) { Menus_CloseAll(); if (Menus_ActivateByName(UI_Argv(1))) { trap_Key_SetCatcher( KEYCATCH_UI ); } return qtrue; } } /* if ( Q_stricmp (cmd, "remapShader") == 0 ) { if (trap_Argc() == 4) { char shader1[MAX_QPATH]; char shader2[MAX_QPATH]; Q_strncpyz(shader1, UI_Argv(1), sizeof(shader1)); Q_strncpyz(shader2, UI_Argv(2), sizeof(shader2)); trap_R_RemapShader(shader1, shader2, UI_Argv(3)); return qtrue; } } */ if ( Q_stricmp (cmd, "postgame") == 0 ) { UI_CalcPostGameStats(); return qtrue; } if ( Q_stricmp (cmd, "ui_cache") == 0 ) { UI_Cache_f(); return qtrue; } if ( Q_stricmp (cmd, "ui_teamOrders") == 0 ) { //UI_TeamOrdersMenu_f(); return qtrue; } if ( Q_stricmp (cmd, "pause") == 0 ) { return qtrue; } return qfalse; }
// Message Processor void JKG_Slice_ProcessCommand_f(void) { char arg[1024] = {0}; char data[840]; int len; int i, row, col; sfxHandle_t sfx; bitstream_t stream; trap->Cmd_Argv(1, arg, 1024); len = Base128_DecodeLength(strlen(arg)); Base128_Decode(arg, strlen(arg), data, 840); BitStream_Init(&stream, (unsigned char *)data, len); BitStream_BeginReading(&stream); for (;;) { switch (BitStream_ReadBits(&stream, 4)) // Get the next instruction { case SLICECMD_EOM: // End of message return; case SLICECMD_START: // Reset data memset(&sliceData, 0, sizeof(sliceData)); sliceData.active = qtrue; // Bring up UI trap->Cvar_Set("ui_hidehud", "1"); Menus_CloseAll(); if (Menus_ActivateByName("jkg_slice")) { trap->Key_SetCatcher( trap->Key_GetCatcher() | KEYCATCH_UI & ~KEYCATCH_CONSOLE ); } Menu_ClearFocus(Menus_FindByName("jkg_slice")); // Field is locked until all data is available sliceData.fieldLocked = qtrue; break; case SLICECMD_STOP: // End the slicing minigame sliceData.active = qfalse; Menus_CloseByName("jkg_slice"); trap->Cvar_Set("ui_hidehud", "0"); trap->Key_SetCatcher( trap->Key_GetCatcher() & ~KEYCATCH_UI ); break; case SLICECMD_CONFIG: // Receive configuration sliceData.width = BitStream_ReadBits(&stream, 3) + 1; sliceData.height = BitStream_ReadBits(&stream, 3) + 1; sliceData.securityLevels = BitStream_ReadBits(&stream, 3); sliceData.warningThreshold = BitStream_ReadBits(&stream, 5); sliceData.intrusionDetection = BitStream_ReadBool(&stream); if (sliceData.intrusionDetection) { sliceData.intrusionTime = BitStream_ReadByte(&stream) * 10; } else { sliceData.intrusionTime = 0; } sliceData.intrusionStart = 0; break; case SLICECMD_REVEAL: row = BitStream_ReadBits(&stream, 3); col = BitStream_ReadBits(&stream, 3); sliceData.grid[row][col].active = 1; sliceData.grid[row][col].revealTime = trap->Milliseconds(); sliceData.grid[row][col].type = BitStream_ReadBits(&stream, 3); break; case SLICECMD_LOCK: if (BitStream_ReadBool(&stream)) { sliceData.fieldLocked = qtrue; } else { sliceData.fieldLocked = qfalse; } break; case SLICECMD_PROGLST: JKG_Slice_ProgramListReset(); sliceData.selectedProgram = -1; sliceData.programCount = BitStream_ReadBits(&stream, 4); for (i = 0; i < sliceData.programCount; i++) { Q_strncpyz(sliceData.programs[i].ID, BitStream_ReadStringBuffered(&stream), sizeof(sliceData.programs[i].ID)); Q_strncpyz(sliceData.programs[i].name, BitStream_ReadStringBuffered(&stream), sizeof(sliceData.programs[i].name)); Q_strncpyz(sliceData.programs[i].desc, BitStream_ReadStringBuffered(&stream), sizeof(sliceData.programs[i].desc)); sliceData.programs[i].type = BitStream_ReadBits(&stream, 2); } break; case SLICECMD_SHOWMSG: { int mode = BitStream_ReadBits(&stream, 2); char buffer[3][256]; BitStream_ReadString(&stream, buffer[0], 256); BitStream_ReadString(&stream, buffer[1], 256); BitStream_ReadString(&stream, buffer[2], 256); JKG_Slice_Dialog_Show(buffer[0], buffer[1], buffer[2], mode, DLGID_SERVER); } break; case SLICECMD_ENDMSG: JKG_Slice_Dialog_Close(); break; case SLICECMD_SUMMARY: // Process column summaries for (i=0; i < sliceData.width; i++) { sliceData.summaries[i].value = BitStream_ReadBits(&stream, 6); sliceData.summaries[i].alarms = BitStream_ReadBits(&stream, 4); } // Process row summaries for (i=0; i < sliceData.height; i++) { sliceData.summaries[8+i].value = BitStream_ReadBits(&stream, 6); sliceData.summaries[8+i].alarms = BitStream_ReadBits(&stream, 4); } sliceData.summariesKnown = qtrue; break; case SLICECMD_SECUPDATE: for (i = 0; i < sliceData.securityLevels; i++) { sliceData.securityState[i] = BitStream_ReadBits(&stream, 2); } break; case SLICECMD_INTRUSION: // TODO: Play sound effect? sliceData.intrusionState = BitStream_ReadBits(&stream, 2); if (sliceData.intrusionState == 1) { sliceData.intrusionStart = trap->Milliseconds(); } else { sliceData.intrusionStart = 0; } break; case SLICECMD_WARNLEVEL: sliceData.warningLevel = BitStream_ReadBits(&stream, 5); break; case SLICECMD_BLINKNODE: row = BitStream_ReadBits(&stream, 3); col = BitStream_ReadBits(&stream, 3); sliceData.grid[row][col].blinkTime = trap->Milliseconds(); sliceData.grid[row][col].blinkColor = BitStream_ReadBool(&stream); break; case SLICECMD_INITFIELD: // Ready to play sliceData.fieldLocked = qfalse; break; case SLICECMD_ALARM: sfx = trap->S_RegisterSound("sound/effects/mpalarm.wav"); trap->S_StartLocalSound(sfx, CHAN_AUTO); break; default: Com_Printf("Error processing slice command, unknown command ID\n"); return; } } }
void Menus_OpenByName(const char *p) { Menus_ActivateByName(p, qtrue); }