bool runTitleMenu(void) { UDWORD id; id = widgRunScreen(psWScreen); // Run the current set of widgets switch(id) { case FRONTEND_QUIT: changeTitleMode(CREDITS); break; case FRONTEND_MULTIPLAYER: changeTitleMode(MULTI); break; case FRONTEND_SINGLEPLAYER: changeTitleMode(SINGLE); break; case FRONTEND_OPTIONS: changeTitleMode(OPTIONS); break; case FRONTEND_TUTORIAL: changeTitleMode(TUTORIAL); break; case FRONTEND_PLAYINTRO: changeTitleMode(SHOWINTRO); break; default: break; } widgDisplayScreen(psWScreen); // show the widgets currently running return true; }
void runLimitScreen(void) { UDWORD i, id, statid; frontendMultiMessages(); // network stuff. id = widgRunScreen(psWScreen); // Run the current set of widgets // sliders if((id > IDLIMITS_ENTRIES_START) && (id< IDLIMITS_ENTRIES_END)) { statid = widgGetFromID(psWScreen,id-1)->UserData ; if(statid) { asStructLimits[0][statid].limit = (UBYTE) ((W_SLIDER*)(widgGetFromID(psWScreen,id)))->pos; } } else { // icons that are always about. switch(id) { case IDLIMITS_RETURN: // reset the sliders.. for (i = 0; i < numStructureStats ; ++i) { asStructLimits[0][i].limit = asStructLimits[0][i].globalLimit; } // free limiter structure freeLimitSet(); //inform others sendOptions(); eventReset(); changeTitleMode(MULTIOPTION); // make some noize. if(!ingame.localOptionsReceived) { addConsoleMessage(_("Limits reset to default values"),DEFAULT_JUSTIFY, SYSTEM_MESSAGE); } else { sendTextMessage("Limits Reset To Default Values",true); } break; case IDLIMITS_OK: resetReadyStatus(false); createLimitSet(); changeTitleMode(MULTIOPTION); break; default: break; } } widgDisplayScreen(psWScreen); // show the widgets currently running }
// //////////////////////////////////////////////////////////////////////////// // Returns true if cancel pressed or a valid game slot was selected. // if when returning true strlen(sRequestResult) != 0 then a valid game // slot was selected otherwise cancel was selected.. bool runChallenges(void) { UDWORD id = 0; id = widgRunScreen(psRequestScreen); sstrcpy(sRequestResult, ""); // set returned filename to null; // cancel this operation... if (id == CHALLENGE_CANCEL || CancelPressed()) { goto failure; } // clicked a load entry if (id >= CHALLENGE_ENTRY_START && id <= CHALLENGE_ENTRY_END) { if (((W_BUTTON *)widgGetFromID(psRequestScreen, id))->pText) { sstrcpy(sRequestResult, (const char *)((W_BUTTON *)widgGetFromID(psRequestScreen, id))->pUserData); } else { goto failure; // clicked on an empty box } goto success; } return false; // failed and/or cancelled.. failure: closeChallenges(); challengeActive = false; return false; // success on load. success: closeChallenges(); challengeActive = true; ingame.bHostSetup = true; changeTitleMode(MULTIOPTION); return true; }
bool runOptionsMenu(void) { UDWORD id; id = widgRunScreen(psWScreen); // Run the current set of widgets switch(id) { case FRONTEND_GAMEOPTIONS: changeTitleMode(GAME); break; case FRONTEND_GRAPHICSOPTIONS: changeTitleMode(GRAPHICS_OPTIONS); break; case FRONTEND_AUDIOOPTIONS: changeTitleMode(AUDIO_OPTIONS); break; case FRONTEND_VIDEOOPTIONS: changeTitleMode(VIDEO_OPTIONS); break; case FRONTEND_MOUSEOPTIONS: changeTitleMode(MOUSE_OPTIONS); break; case FRONTEND_KEYMAP: changeTitleMode(KEYMAP); break; case FRONTEND_QUIT: changeTitleMode(TITLE); break; default: break; } // If close button pressed then return from this menu. if (CancelPressed()) { changeTitleMode(TITLE); } widgDisplayScreen(psWScreen); // show the widgets currently running return true; }
bool runAudioOptionsMenu(void) { UDWORD id; id = widgRunScreen(psWScreen); // Run the current set of widgets switch(id) { case FRONTEND_FX: case FRONTEND_3D_FX: case FRONTEND_MUSIC: break; case FRONTEND_FX_SL: sound_SetUIVolume((float)widgGetSliderPos(psWScreen,FRONTEND_FX_SL) / 100.0); break; case FRONTEND_3D_FX_SL: sound_SetEffectsVolume((float)widgGetSliderPos(psWScreen,FRONTEND_3D_FX_SL) / 100.0); break; case FRONTEND_MUSIC_SL: sound_SetMusicVolume((float)widgGetSliderPos(psWScreen, FRONTEND_MUSIC_SL) / 100.0); break; case FRONTEND_QUIT: changeTitleMode(OPTIONS); break; default: break; } // If close button pressed then return from this menu. if(CancelPressed()) { changeTitleMode(OPTIONS); } widgDisplayScreen(psWScreen); // show the widgets currently running return true; }
bool runMultiPlayerMenu(void) { UDWORD id; id = widgRunScreen(psWScreen); // Run the current set of widgets switch(id) { case FRONTEND_HOST: // don't pretend we are running a network game. Really do it! NetPlay.bComms = true; // use network = true NETdiscoverUPnPDevices(); ingame.bHostSetup = true; bMultiPlayer = true; bMultiMessages = true; game.type = SKIRMISH; // needed? lastTitleMode = MULTI; changeTitleMode(MULTIOPTION); break; case FRONTEND_JOIN: ingame.bHostSetup = false; if (getLobbyError() != ERROR_CHEAT && getLobbyError() != ERROR_KICKED) { setLobbyError(ERROR_NOERROR); } changeTitleMode(PROTOCOL); break; case FRONTEND_QUIT: changeTitleMode(TITLE); break; default: break; } widgDisplayScreen(psWScreen); // show the widgets currently running if (CancelPressed()) { changeTitleMode(TITLE); } return true; }
// //////////////////////////////////////////////////////////////////////////// bool runKeyMapEditor(void) { UDWORD id; id = widgRunScreen(psWScreen); // Run the current set of widgets if(id == KM_RETURN) // return { saveKeyMap(); changeTitleMode(OPTIONS); } if(id == KM_DEFAULT) { keyClearMappings(); keyInitMappings(true); widgDelete(psWScreen,FRONTEND_BACKDROP);// readd the widgets startKeyMapEditor(false); } else if( id>=KM_START && id<=KM_END) { pushedKeyMap(id); } if(selectedKeyMap) { KEY_CODE kc = scanKeyBoardForBinding(); if (kc) { pushedKeyCombo(kc); } } widgDisplayScreen(psWScreen); // show the widgets currently running if (CancelPressed()) { changeTitleMode(OPTIONS); } return true; }
// //////////////////////////////////////////////////////////////////////////// bool runKeyMapEditor(void) { WidgetTriggers const &triggers = widgRunScreen(psWScreen); unsigned id = triggers.empty()? 0 : triggers.front().widget->id; // Just use first click here, since the next click could be on another menu. if(id == KM_RETURN) // return { saveKeyMap(); changeTitleMode(OPTIONS); } if(id == KM_DEFAULT) { keyClearMappings(); keyInitMappings(true); widgDelete(psWScreen,FRONTEND_BACKDROP);// readd the widgets startKeyMapEditor(false); } else if( id>=KM_START && id<=KM_END) { pushedKeyMap(id); } if(selectedKeyMap) { KEY_CODE kc = scanKeyBoardForBinding(); if (kc) { pushedKeyCombo(kc); } } widgDisplayScreen(psWScreen); // show the widgets currently running if (CancelPressed()) { changeTitleMode(OPTIONS); } return true; }
// //////////////////////////////////////////////////////////////////////////// BOOL runKeyMapEditor(void) { UDWORD id; id = widgRunScreen(psWScreen); // Run the current set of widgets if(id == KM_RETURN) // return { saveKeyMap(); changeTitleMode(TITLE); } if(id == KM_DEFAULT) { keyClearMappings(); keyInitMappings(TRUE); widgDelete(psWScreen,FRONTEND_BACKDROP);// readd the widgets startKeyMapEditor(FALSE); } else if( id>=KM_START && id<=KM_END) { pushedKeyMap(id); } if(selectedKeyMap) { id = scanKeyBoardForBinding(); if(id) { pushedKeyCombo(id); } } DrawBegin(); StartCursorSnap(&InterfaceSnap); widgDisplayScreen(psWScreen); // show the widgets currently running DrawEnd(); return TRUE; }
bool runTutorialMenu(void) { UDWORD id; id = widgRunScreen(psWScreen); // Run the current set of widgets switch(id) { case FRONTEND_TUTORIAL: NetPlay.players[0].allocated = true; game.skDiff[0] = UBYTE_MAX; sstrcpy(aLevelName, TUTORIAL_LEVEL); changeTitleMode(STARTGAME); break; case FRONTEND_FASTPLAY: NetPlay.players[0].allocated = true; game.skDiff[0] = UBYTE_MAX; sstrcpy(aLevelName, "FASTPLAY"); changeTitleMode(STARTGAME); break; case FRONTEND_QUIT: changeTitleMode(TITLE); break; default: break; } // If close button pressed then return from this menu. if(CancelPressed()) { changeTitleMode(TITLE); } widgDisplayScreen(psWScreen); // show the widgets currently running return true; }
bool runGraphicsOptionsMenu(void) { UDWORD id; int mode = 0; id = widgRunScreen(psWScreen); // Run the current set of widgets switch(id) { case FRONTEND_SSHAKE: case FRONTEND_SSHAKE_R: if( getShakeStatus() ) { setShakeStatus(false); widgSetString(psWScreen,FRONTEND_SSHAKE_R, _("Off")); } else { setShakeStatus(true); widgSetString(psWScreen,FRONTEND_SSHAKE_R, _("On")); } break; case FRONTEND_FOGTYPE: case FRONTEND_FOGTYPE_R: if (war_GetFog()) { // turn off crap fog, turn on vis fog. debug(LOG_FOG, "runGameOptions2Menu: Fog of war ON, visual fog OFF"); war_SetFog(false); widgSetString(psWScreen,FRONTEND_FOGTYPE_R, _("Fog Of War")); } else { // turn off vis fog, turn on normal crap fog. debug(LOG_FOG, "runGameOptions2Menu: Fog of war OFF, visual fog ON"); war_SetFog(true); widgSetString(psWScreen,FRONTEND_FOGTYPE_R, _("Mist")); } break; case FRONTEND_QUIT: changeTitleMode(OPTIONS); break; case FRONTEND_SUBTITLES: case FRONTEND_SUBTITLES_R: if( seq_GetSubtitles()) {// turn off seq_SetSubtitles(false); widgSetString(psWScreen,FRONTEND_SUBTITLES_R,_("Off")); } else {// turn on seq_SetSubtitles(true); widgSetString(psWScreen,FRONTEND_SUBTITLES_R,_("On")); } break; case FRONTEND_SHADOWS: case FRONTEND_SHADOWS_R: setDrawShadows(!getDrawShadows()); if (getDrawShadows()) { widgSetString(psWScreen, FRONTEND_SHADOWS_R, _("On")); } else { widgSetString(psWScreen, FRONTEND_SHADOWS_R, _("Off")); } break; case FRONTEND_FMVMODE: case FRONTEND_FMVMODE_R: switch (mode = war_GetFMVmode()) { case FMV_1X: war_SetFMVmode((FMV_MODE)(mode + 1)); widgSetString(psWScreen, FRONTEND_FMVMODE_R, _("2X")); break; case FMV_2X: war_SetFMVmode((FMV_MODE)(mode + 1)); widgSetString(psWScreen, FRONTEND_FMVMODE_R, _("Fullscreen")); break; case FMV_FULLSCREEN: war_SetFMVmode((FMV_MODE)(mode + 1)); widgSetString(psWScreen, FRONTEND_FMVMODE_R, _("1X")); break; default: ASSERT(!"invalid FMV mode", "Invalid FMV mode: %u", (unsigned int)mode); break; } break; case FRONTEND_SCANLINES: case FRONTEND_SCANLINES_R: switch (mode = war_getScanlineMode()) { case SCANLINES_OFF: war_setScanlineMode(SCANLINES_50); widgSetString(psWScreen, FRONTEND_SCANLINES_R, _("50%")); break; case SCANLINES_50: war_setScanlineMode(SCANLINES_BLACK); widgSetString(psWScreen, FRONTEND_SCANLINES_R, _("Black")); break; case SCANLINES_BLACK: war_setScanlineMode(SCANLINES_OFF); widgSetString(psWScreen, FRONTEND_SCANLINES_R, _("Off")); break; } default: break; } // If close button pressed then return from this menu. if(CancelPressed()) { changeTitleMode(OPTIONS); } widgDisplayScreen(psWScreen); // show the widgets currently running return true; }
void runLimitScreen(void) { frontendMultiMessages(); // network stuff. WidgetTriggers const &triggers = widgRunScreen(psWScreen); unsigned id = triggers.empty()? 0 : triggers.front().widget->id; // Just use first click here, since the next click could be on another menu. // sliders if((id > IDLIMITS_ENTRIES_START) && (id< IDLIMITS_ENTRIES_END)) { unsigned statid = widgGetFromID(psWScreen,id-1)->UserData; if(statid) { asStructLimits[0][statid].limit = (UBYTE) ((W_SLIDER*)(widgGetFromID(psWScreen,id)))->pos; } } else { // icons that are always about. switch(id) { case IDLIMITS_RETURN: // reset the sliders.. for (unsigned i = 0; i < numStructureStats; ++i) { asStructLimits[0][i].limit = asStructLimits[0][i].globalLimit; } // free limiter structure freeLimitSet(); //inform others if (bHosted) { sendOptions(); } eventReset(); changeTitleMode(MULTIOPTION); // make some noize. if(!ingame.localOptionsReceived) { addConsoleMessage(_("Limits reset to default values"),DEFAULT_JUSTIFY, SYSTEM_MESSAGE); } else { sendTextMessage("Limits Reset To Default Values",true); } break; case IDLIMITS_OK: resetReadyStatus(false); createLimitSet(); changeTitleMode(MULTIOPTION); break; default: break; } } widgDisplayScreen(psWScreen); // show the widgets currently running }
// //////////////////////////////////////////////////////////////////////////// // Returns TRUE if cancel pressed or a valid game slot was selected. // if when returning TRUE strlen(sRequestResult) != 0 then a valid game // slot was selected otherwise cancel was selected.. static BOOL _runLoadSave(BOOL bResetMissionWidgets) { UDWORD id=0; W_EDBINIT sEdInit; CHAR sTemp[MAX_STR_LENGTH]; CD_INDEX CDrequired; UDWORD iCampaign,i; W_CONTEXT context; BOOL bSkipCD = FALSE; id = widgRunScreen(psRequestScreen); if ( cdspan_ProcessCDChange(id) ) { return bRequestLoad; } strcpy(sRequestResult,""); // set returned filename to null; // cancel this operation... if(id == LOADSAVE_CANCEL || CancelPressed() ) { goto failure; } // clicked a load entry if( id >= LOADENTRY_START && id <= LOADENTRY_END ) { if(mode) // Loading, return that entry. { if( ((W_BUTTON *)widgGetFromID(psRequestScreen,id))->pText ) { sprintf(sRequestResult,"%s%s.%s",sPath, ((W_BUTTON *)widgGetFromID(psRequestScreen,id))->pText ,sExt); } else { goto failure; // clicked on an empty box } if( bLoadSaveMode == LOAD_FORCE || bLoadSaveMode ==SAVE_FORCE ) { goto successforce; // it's a force, dont check the cd. } /* check correct CD in drive */ iCampaign = getCampaign(sRequestResult,&bSkipCD); if ( iCampaign == 0 OR bSkipCD ) { DBPRINTF( ("getCampaign returned 0 or we're loading a skirmish game: assuming correct CD in drive\n") ); } CDrequired = getCDForCampaign( iCampaign ); if ( (iCampaign == 0) || cdspan_CheckCDPresent( CDrequired ) OR bSkipCD) { goto success; } else { bRequestLoad = FALSE; widgHide(psRequestScreen,LOADSAVE_FORM); showChangeCDBox( psRequestScreen, CDrequired, loadSaveCDOK, loadSaveCDCancel ); return FALSE; } } else // SAVING!add edit box at that position. { if( ! widgGetFromID(psRequestScreen,SAVEENTRY_EDIT)) { // add blank box. memset(&sEdInit, 0, sizeof(W_EDBINIT)); sEdInit.formID= LOADSAVE_FORM; sEdInit.id = SAVEENTRY_EDIT; sEdInit.style = WEDB_PLAIN; sEdInit.x = widgGetFromID(psRequestScreen,id)->x; sEdInit.y = widgGetFromID(psRequestScreen,id)->y; sEdInit.width = widgGetFromID(psRequestScreen,id)->width; sEdInit.height= widgGetFromID(psRequestScreen,id)->height; sEdInit.pText = ((W_BUTTON *)widgGetFromID(psRequestScreen,id))->pText; sEdInit.FontID= WFont; sEdInit.pBoxDisplay = displayLoadSaveEdit; widgAddEditBox(psRequestScreen, &sEdInit); sprintf(sTemp,"%s%s.%s", sPath, ((W_BUTTON *)widgGetFromID(psRequestScreen,id))->pText , sExt); widgHide(psRequestScreen,id); // hide the old button chosenSlotId = id; strcpy(sDelete,sTemp); // prepare the savegame name. sTemp[strlen(sTemp)-4] = '\0'; // strip extension // auto click in the edit box we just made. context.psScreen = psRequestScreen; context.psForm = (W_FORM *)psRequestScreen->psForm; context.xOffset = 0; context.yOffset = 0; context.mx = mouseX(); context.my = mouseY(); editBoxClicked((W_EDITBOX*)widgGetFromID(psRequestScreen,SAVEENTRY_EDIT), &context); } else { // clicked in a different box. shouldnt be possible!(since we autoclicked in editbox) } } } // finished entering a name. if( id == SAVEENTRY_EDIT) { if(!keyPressed(KEY_RETURN)) // enter was not pushed, so not a vaild entry. { widgDelete(psRequestScreen,SAVEENTRY_EDIT); //unselect this box, and go back .. widgReveal(psRequestScreen,chosenSlotId); return TRUE; } // scan to see if that game exists in another slot, if // so then fail. strcpy(sTemp,((W_EDITBOX *)widgGetFromID(psRequestScreen,id))->aText); for(i=LOADENTRY_START;i<LOADENTRY_END;i++) { if( i != chosenSlotId) { if( ((W_BUTTON *)widgGetFromID(psRequestScreen,i))->pText && strcmp( sTemp, ((W_BUTTON *)widgGetFromID(psRequestScreen,i))->pText ) ==0) { widgDelete(psRequestScreen,SAVEENTRY_EDIT); //unselect this box, and go back .. widgReveal(psRequestScreen,chosenSlotId); // move mouse to same box.. // SetMousePos(widgGetFromID(psRequestScreen,i)->x ,widgGetFromID(psRequestScreen,i)->y); audio_PlayTrack(ID_SOUND_BUILD_FAIL); return TRUE; } } } // return with this name, as we've edited it. if (strlen(((W_EDITBOX *)widgGetFromID(psRequestScreen,id))->aText)) { strcpy(sTemp,((W_EDITBOX *)widgGetFromID(psRequestScreen,id))->aText); removeWildcards(sTemp); sprintf(sRequestResult,"%s%s.%s", sPath, sTemp, sExt); deleteSaveGame(sDelete); //only delete game if a new game fills the slot } else { goto failure; // we entered a blank name.. } // we're done. saving. closeLoadSave(); bRequestLoad = FALSE; if (bResetMissionWidgets AND widgGetFromID(psWScreen,IDMISSIONRES_FORM) == NULL) { resetMissionWidgets(); //reset the mission widgets here if necessary } return TRUE; } return FALSE; // failed and/or cancelled.. failure: closeLoadSave(); bRequestLoad = FALSE; if (bResetMissionWidgets AND widgGetFromID(psWScreen,IDMISSIONRES_FORM) == NULL) { resetMissionWidgets(); } return TRUE; // success on load. success: setCampaignNumber( getCampaign(sRequestResult,&bSkipCD) ); successforce: closeLoadSave(); bRequestLoad = TRUE; return TRUE; }
static GAMECODE renderLoop() { if (bMultiPlayer && !NetPlay.isHostAlive && NetPlay.bComms && !NetPlay.isHost) { intAddInGamePopup(); } int clearMode = 0; if(getDrawShadows()) { clearMode |= CLEAR_SHADOW; } if (loopMissionState == LMS_SAVECONTINUE) { pie_SetFogStatus(false); clearMode = CLEAR_BLACK; } pie_ScreenFlip(clearMode);//gameloopflip HandleClosingWindows(); // Needs to be done outside the pause case. audio_Update(); wzShowMouse(true); INT_RETVAL intRetVal = INT_NONE; if (!paused) { /* Run the in game interface and see if it grabbed any mouse clicks */ if (!rotActive && getWidgetsStatus() && dragBox3D.status != DRAG_DRAGGING && wallDrag.status != DRAG_DRAGGING) { intRetVal = intRunWidgets(); } //don't process the object lists if paused or about to quit to the front end if (!gameUpdatePaused() && intRetVal != INT_QUIT) { if( dragBox3D.status != DRAG_DRAGGING && wallDrag.status != DRAG_DRAGGING && ( intRetVal == INT_INTERCEPT || ( radarOnScreen && CoordInRadar(mouseX(), mouseY()) && getHQExists(selectedPlayer) ) ) ) { // Using software cursors (when on) for these menus due to a bug in SDL's SDL_ShowCursor() wzSetCursor(CURSOR_DEFAULT); intRetVal = INT_INTERCEPT; } #ifdef DEBUG // check all flag positions for duplicate delivery points checkFactoryFlags(); #endif //handles callbacks for positioning of DP's process3DBuilding(); //ajl. get the incoming netgame messages and process them. // FIXME Previous comment is deprecated. multiPlayerLoop does some other weird stuff, but not that anymore. if (bMultiPlayer) { multiPlayerLoop(); } for (unsigned i = 0; i < MAX_PLAYERS; i++) { for (DROID *psCurr = apsDroidLists[i]; psCurr; psCurr = psCurr->psNext) { // Don't copy the next pointer - if droids somehow get destroyed in the graphics rendering loop, who cares if we crash. calcDroidIllumination(psCurr); } } /* update animations */ animObj_Update(); } if (!consolePaused()) { /* Process all the console messages */ updateConsoleMessages(); } if (!scrollPaused() && !getWarCamStatus() && dragBox3D.status != DRAG_DRAGGING && intMode != INT_INGAMEOP ) { scroll(); } } else // paused { // Using software cursors (when on) for these menus due to a bug in SDL's SDL_ShowCursor() wzSetCursor(CURSOR_DEFAULT); if(dragBox3D.status != DRAG_DRAGGING) { scroll(); } if(InGameOpUp || isInGamePopupUp) // ingame options menu up, run it! { unsigned widgval = widgRunScreen(psWScreen); intProcessInGameOptions(widgval); if(widgval == INTINGAMEOP_QUIT_CONFIRM || widgval == INTINGAMEOP_POPUP_QUIT) { if(gamePaused()) { kf_TogglePauseMode(); } intRetVal = INT_QUIT; } } if(bLoadSaveUp && runLoadSave(true) && strlen(sRequestResult)) { debug( LOG_NEVER, "Returned %s", sRequestResult ); if(bRequestLoad) { loopMissionState = LMS_LOADGAME; NET_InitPlayers(); // otherwise alliances were not cleared sstrcpy(saveGameName, sRequestResult); } else { char msgbuffer[256]= {'\0'}; if (saveInMissionRes()) { if (saveGame(sRequestResult, GTYPE_SAVE_START)) { sstrcpy(msgbuffer, _("GAME SAVED: ")); sstrcat(msgbuffer, sRequestResult); addConsoleMessage( msgbuffer, LEFT_JUSTIFY, NOTIFY_MESSAGE); } else { ASSERT( false,"Mission Results: saveGame Failed" ); sstrcpy(msgbuffer, _("Could not save game!")); addConsoleMessage( msgbuffer, LEFT_JUSTIFY, NOTIFY_MESSAGE); deleteSaveGame(sRequestResult); } } else if (bMultiPlayer || saveMidMission()) { if (saveGame(sRequestResult, GTYPE_SAVE_MIDMISSION))//mid mission from [esc] menu { sstrcpy(msgbuffer, _("GAME SAVED: ")); sstrcat(msgbuffer, sRequestResult); addConsoleMessage( msgbuffer, LEFT_JUSTIFY, NOTIFY_MESSAGE); } else { ASSERT(!"saveGame(sRequestResult, GTYPE_SAVE_MIDMISSION) failed", "Mid Mission: saveGame Failed" ); sstrcpy(msgbuffer, _("Could not save game!")); addConsoleMessage( msgbuffer, LEFT_JUSTIFY, NOTIFY_MESSAGE); deleteSaveGame(sRequestResult); } } else { ASSERT( false, "Attempt to save game with incorrect load/save mode" ); } } } } /* Check for quit */ bool quitting = false; if (intRetVal == INT_QUIT) { if (!loop_GetVideoStatus()) { //quitting from the game to the front end //so get a new backdrop quitting = true; pie_LoadBackDrop(SCREEN_RANDOMBDROP); } } if (!loop_GetVideoStatus() && !quitting) { if (!gameUpdatePaused()) { if (dragBox3D.status != DRAG_DRAGGING && wallDrag.status != DRAG_DRAGGING) { ProcessRadarInput(); } processInput(); //no key clicks or in Intelligence Screen if (intRetVal == INT_NONE && !InGameOpUp && !isInGamePopupUp) { processMouseClickInput(); } displayWorld(); } /* Display the in game interface */ pie_SetDepthBufferStatus(DEPTH_CMP_ALWAYS_WRT_ON); pie_SetFogStatus(false); if(bMultiPlayer && bDisplayMultiJoiningStatus) { intDisplayMultiJoiningStatus(bDisplayMultiJoiningStatus); setWidgetsStatus(false); } if(getWidgetsStatus()) { intDisplayWidgets(); } pie_SetDepthBufferStatus(DEPTH_CMP_LEQ_WRT_ON); pie_SetFogStatus(true); } pie_GetResetCounts(&loopPieCount, &loopPolyCount, &loopStateChanges); if ((fogStatus & FOG_BACKGROUND) && (loopMissionState == LMS_SAVECONTINUE)) { pie_SetFogStatus(false); } if (!quitting) { /* Check for toggling display mode */ if ((keyDown(KEY_LALT) || keyDown(KEY_RALT)) && keyPressed(KEY_RETURN)) { screenToggleMode(); } } // deal with the mission state switch (loopMissionState) { case LMS_CLEAROBJECTS: missionDestroyObjects(); setScriptPause(true); loopMissionState = LMS_SETUPMISSION; break; case LMS_NORMAL: // default break; case LMS_SETUPMISSION: setScriptPause(false); if (!setUpMission(nextMissionType)) { return GAMECODE_QUITGAME; } break; case LMS_SAVECONTINUE: // just wait for this to be changed when the new mission starts break; case LMS_NEWLEVEL: //nextMissionType = MISSION_NONE; nextMissionType = LDS_NONE; return GAMECODE_NEWLEVEL; break; case LMS_LOADGAME: return GAMECODE_LOADGAME; break; default: ASSERT( false, "unknown loopMissionState" ); break; } if (quitting) { pie_SetFogStatus(false); pie_ScreenFlip(CLEAR_BLACK);//gameloopflip /* Check for toggling display mode */ if ((keyDown(KEY_LALT) || keyDown(KEY_RALT)) && keyPressed(KEY_RETURN)) { screenToggleMode(); } return GAMECODE_QUITGAME; } else if (loop_GetVideoStatus()) { audio_StopAll(); return GAMECODE_PLAYVIDEO; } return GAMECODE_CONTINUE; }
// //////////////////////////////////////////////////////////////////////////// // Returns true if cancel pressed or a valid game slot was selected. // if when returning true strlen(sRequestResult) != 0 then a valid game slot was selected // otherwise cancel was selected.. bool runLoadSave(bool bResetMissionWidgets) { static char sDelete[PATH_MAX]; UDWORD i, campaign; W_CONTEXT context; char NewSaveGamePath[PATH_MAX] = {'\0'}; WidgetTriggers const &triggers = widgRunScreen(psRequestScreen); unsigned id = triggers.empty()? 0 : triggers.front().widget->id; // Just use first click here, since the next click could be on another menu. sstrcpy(sRequestResult, ""); // set returned filename to null; // cancel this operation... if(id == LOADSAVE_CANCEL || CancelPressed() ) { goto cleanup; } if (bMultiPlayer) { ssprintf(NewSaveGamePath, "%s%s/", SaveGamePath, "skirmish"); } else { ssprintf(NewSaveGamePath, "%s%s/", SaveGamePath, "campaign"); } // clicked a load entry if( id >= LOADENTRY_START && id <= LOADENTRY_END ) { W_BUTTON *slotButton = (W_BUTTON *)widgGetFromID(psRequestScreen, id); if (mode) // Loading, return that entry. { if (!slotButton->pText.isEmpty()) { ssprintf(sRequestResult, "%s%s%s", NewSaveGamePath, ((W_BUTTON *)widgGetFromID(psRequestScreen,id))->pText.toUtf8().constData(), sExt); } else { return false; // clicked on an empty box } goto success; } else // SAVING!add edit box at that position. { if( ! widgGetFromID(psRequestScreen,SAVEENTRY_EDIT)) { WIDGET *parent = widgGetFromID(psRequestScreen, LOADSAVE_FORM); // add blank box. W_EDITBOX *saveEntryEdit = new W_EDITBOX(parent); saveEntryEdit->id = SAVEENTRY_EDIT; saveEntryEdit->setGeometry(slotButton->geometry()); saveEntryEdit->setString(slotButton->getString()); saveEntryEdit->setBoxColours(WZCOL_MENU_LOAD_BORDER, WZCOL_MENU_LOAD_BORDER, WZCOL_MENU_BACKGROUND); if (!slotButton->pText.isEmpty()) { ssprintf(sDelete, "%s%s%s", NewSaveGamePath, slotButton->pText.toUtf8().constData(), sExt); } else { sstrcpy(sDelete, ""); } slotButton->hide(); // hide the old button chosenSlotId = id; // auto click in the edit box we just made. context.xOffset = 0; context.yOffset = 0; context.mx = mouseX(); context.my = mouseY(); saveEntryEdit->clicked(&context); } else { // clicked in a different box. shouldnt be possible!(since we autoclicked in editbox) } } } // finished entering a name. if( id == SAVEENTRY_EDIT) { char sTemp[MAX_STR_LENGTH]; if(!keyPressed(KEY_RETURN) && !keyPressed(KEY_KPENTER)) // enter was not pushed, so not a vaild entry. { widgDelete(psRequestScreen,SAVEENTRY_EDIT); //unselect this box, and go back .. widgReveal(psRequestScreen,chosenSlotId); return true; } // scan to see if that game exists in another slot, if so then fail. sstrcpy(sTemp, widgGetString(psRequestScreen, id)); for(i=LOADENTRY_START;i<LOADENTRY_END;i++) { if( i != chosenSlotId) { if(!((W_BUTTON *)widgGetFromID(psRequestScreen,i))->pText.isEmpty() && strcmp(sTemp, ((W_BUTTON *)widgGetFromID(psRequestScreen,i))->pText.toUtf8().constData()) == 0) { widgDelete(psRequestScreen,SAVEENTRY_EDIT); //unselect this box, and go back .. widgReveal(psRequestScreen,chosenSlotId); // move mouse to same box.. // setMousePos(widgGetFromID(psRequestScreen,i)->pos.x ,widgGetFromID(psRequestScreen,i)->pos.y); audio_PlayTrack(ID_SOUND_BUILD_FAIL); return true; } } } // return with this name, as we've edited it. if (strlen(widgGetString(psRequestScreen, id))) { sstrcpy(sTemp, widgGetString(psRequestScreen, id)); removeWildcards(sTemp); snprintf(sRequestResult, sizeof(sRequestResult), "%s%s%s", NewSaveGamePath, sTemp, sExt); if (strlen(sDelete) != 0) { deleteSaveGame(sDelete); //only delete game if a new game fills the slot } } goto cleanup; } return false; // failed and/or cancelled.. cleanup: closeLoadSave(); bRequestLoad = false; if (bResetMissionWidgets && widgGetFromID(psWScreen,IDMISSIONRES_FORM) == NULL) { resetMissionWidgets(); //reset the mission widgets here if necessary } return true; // success on load. success: campaign = getCampaign(sRequestResult); setCampaignNumber(campaign); debug(LOG_WZ, "Set campaign for %s to %u", sRequestResult, campaign); closeLoadSave(); bRequestLoad = true; return true; }
bool runVideoOptionsMenu(void) { //SDL_Rect **modes = SDL_ListModes(NULL, SDL_FULLSCREEN | SDL_HWSURFACE); HACK modes[] = {{1920, 1200}, {1920, 1080}, {1680, 1050}, {1600, 1200}, {1440, 900}, {1280, 1024}, {1280, 960}, {1280, 800}, {1280, 720}, {1024, 768}, {800, 600}, {720, 576}, {720, 480}, {640, 480}, {0, 0}}; UDWORD id = widgRunScreen(psWScreen); int level; switch (id) { case FRONTEND_WINDOWMODE: case FRONTEND_WINDOWMODE_R: if (war_getFullscreen()) { war_setFullscreen(false); widgSetString(psWScreen, FRONTEND_WINDOWMODE_R, _("Windowed")); } else { war_setFullscreen(true); widgSetString(psWScreen, FRONTEND_WINDOWMODE_R, _("Fullscreen")); } break; case FRONTEND_FSAA: case FRONTEND_FSAA_R: switch (level = war_getFSAA()) { case FSAA_OFF: war_setFSAA((FSAA_LEVEL)(level + 1)); widgSetString(psWScreen, FRONTEND_FSAA_R, "2X"); break; case FSAA_2X: war_setFSAA((FSAA_LEVEL)(level + 1)); widgSetString(psWScreen, FRONTEND_FSAA_R, "4X"); break; case FSAA_4X: war_setFSAA((FSAA_LEVEL)(level + 1)); widgSetString(psWScreen, FRONTEND_FSAA_R, "8X"); break; case FSAA_8X: war_setFSAA((FSAA_LEVEL)(level + 1)); widgSetString(psWScreen, FRONTEND_FSAA_R, _("Off")); break; default: // we can't check what the max level the card is capable of, without first creating that level, and testing. ASSERT(!"invalid FSAA level ?", "Invalid FSAA level: %u", (unsigned int)level); addTextButton(FRONTEND_FSAA_R, FRONTEND_POS5M-55, FRONTEND_POS6Y, _("Unsupported"), 0); break; } break; case FRONTEND_RESOLUTION: case FRONTEND_RESOLUTION_R: { int current, count, oldcurrent; // Get the current mode offset for (count = 0, current = 0; modes[count]; count++) { if (war_GetWidth() == modes[count]->w && war_GetHeight() == modes[count]->h) { current = count; } } // Increment and clip if required // Hide resolutions lower than Warzone can support oldcurrent = current; do { if (!mouseReleased(MOUSE_RMB)) { if (--current < 0) current = count - 1; } else { if (++current == count) current = 0; } } while ((modes[current]->w < 640 || modes[current]->h < 480) && current != oldcurrent); // Set the new width and height (takes effect on restart) war_SetWidth(modes[current]->w); war_SetHeight(modes[current]->h); // Generate the textual representation of the new width and height snprintf(resolution, WIDG_MAXSTR, "%d x %d", modes[current]->w, modes[current]->h); // Update the widget widgSetString(psWScreen, FRONTEND_RESOLUTION_R, resolution); break; } case FRONTEND_TRAP: case FRONTEND_TRAP_R: if (war_GetTrapCursor()) { war_SetTrapCursor(false); widgSetString(psWScreen, FRONTEND_TRAP_R, _("Off")); } else { war_SetTrapCursor(true); widgSetString(psWScreen, FRONTEND_TRAP_R, _("On")); } break; case FRONTEND_TEXTURESZ: case FRONTEND_TEXTURESZ_R: { int newTexSize = getTextureSize() * 2; // Clip such that 128 <= size <= 2048 if (newTexSize > 2048) { newTexSize = 128; } // Set the new size setTextureSize(newTexSize); // Generate the string representation of the new size snprintf(textureSize, WIDG_MAXSTR, "%d", newTexSize); // Update the widget widgSetString(psWScreen, FRONTEND_TEXTURESZ_R, textureSize); break; } case FRONTEND_VSYNC: case FRONTEND_VSYNC_R: { if (war_GetVsync()) { war_SetVsync(false); widgSetString(psWScreen, FRONTEND_VSYNC_R, _("Off")); } else { war_SetVsync(true); widgSetString(psWScreen, FRONTEND_VSYNC_R, _("On")); } break; } case FRONTEND_QUIT: changeTitleMode(OPTIONS); break; default: break; } if (CancelPressed()) { changeTitleMode(OPTIONS); } widgDisplayScreen(psWScreen); return true; }
bool runVideoOptionsMenu(void) { SDL_Rect **modes = SDL_ListModes(NULL, SDL_FULLSCREEN | SDL_HWSURFACE); UDWORD id = widgRunScreen(psWScreen); switch (id) { case FRONTEND_WINDOWMODE: case FRONTEND_WINDOWMODE_R: if (war_getFullscreen()) { war_setFullscreen(false); widgSetString(psWScreen, FRONTEND_WINDOWMODE_R, _("Windowed")); } else { war_setFullscreen(true); widgSetString(psWScreen, FRONTEND_WINDOWMODE_R, _("Fullscreen")); } break; case FRONTEND_RESOLUTION: case FRONTEND_RESOLUTION_R: { int current, count, oldcurrent; // Get the current mode offset for (count = 0, current = 0; modes[count]; count++) { if (war_GetWidth() == modes[count]->w && war_GetHeight() == modes[count]->h) { current = count; } } // Increment and clip if required // Hide resolutions lower than Warzone can support oldcurrent = current; do { if (!mouseReleased(MOUSE_RMB)) { if (--current < 0) current = count - 1; } else { if (++current == count) current = 0; } } while ((modes[current]->w < 640 || modes[current]->h < 480) && current != oldcurrent); // Set the new width and height (takes effect on restart) war_SetWidth(modes[current]->w); war_SetHeight(modes[current]->h); // Generate the textual representation of the new width and height snprintf(resolution, WIDG_MAXSTR, "%d x %d", modes[current]->w, modes[current]->h); // Update the widget widgSetString(psWScreen, FRONTEND_RESOLUTION_R, resolution); break; } case FRONTEND_TRAP: case FRONTEND_TRAP_R: if (war_GetTrapCursor()) { war_SetTrapCursor(false); widgSetString(psWScreen, FRONTEND_TRAP_R, _("Off")); } else { war_SetTrapCursor(true); widgSetString(psWScreen, FRONTEND_TRAP_R, _("On")); } break; case FRONTEND_TEXTURESZ: case FRONTEND_TEXTURESZ_R: { int newTexSize = getTextureSize() * 2; // Clip such that 128 <= size <= 2048 if (newTexSize > 2048) { newTexSize = 128; } // Set the new size setTextureSize(newTexSize); // Generate the string representation of the new size snprintf(textureSize, WIDG_MAXSTR, "%d", newTexSize); // Update the widget widgSetString(psWScreen, FRONTEND_TEXTURESZ_R, textureSize); break; } case FRONTEND_VSYNC: case FRONTEND_VSYNC_R: { if (war_GetVsync()) { war_SetVsync(false); widgSetString(psWScreen, FRONTEND_VSYNC_R, _("Off")); } else { war_SetVsync(true); widgSetString(psWScreen, FRONTEND_VSYNC_R, _("On")); } break; } case FRONTEND_QUIT: changeTitleMode(OPTIONS); break; default: break; } if (CancelPressed()) { changeTitleMode(OPTIONS); } widgDisplayScreen(psWScreen); return true; }
// //////////////////////////////////////////////////////////////////////////// // Returns true if cancel pressed or a valid game slot was selected. // if when returning true strlen(sRequestResult) != 0 then a valid game slot was selected // otherwise cancel was selected.. BOOL runLoadSave(BOOL bResetMissionWidgets) { UDWORD id=0; W_EDBINIT sEdInit; static char sDelete[PATH_MAX]; UDWORD i, campaign; W_CONTEXT context; id = widgRunScreen(psRequestScreen); sstrcpy(sRequestResult, ""); // set returned filename to null; // cancel this operation... if(id == LOADSAVE_CANCEL || CancelPressed() ) { goto cleanup; } // clicked a load entry if( id >= LOADENTRY_START && id <= LOADENTRY_END ) { if (mode) // Loading, return that entry. { if( ((W_BUTTON *)widgGetFromID(psRequestScreen,id))->pText ) { sprintf(sRequestResult,"%s%s.%s",sPath, ((W_BUTTON *)widgGetFromID(psRequestScreen,id))->pText ,sExt); } else { return false; // clicked on an empty box } goto success; } else // SAVING!add edit box at that position. { if( ! widgGetFromID(psRequestScreen,SAVEENTRY_EDIT)) { // add blank box. memset(&sEdInit, 0, sizeof(W_EDBINIT)); sEdInit.formID= LOADSAVE_FORM; sEdInit.id = SAVEENTRY_EDIT; sEdInit.style = WEDB_PLAIN; sEdInit.x = widgGetFromID(psRequestScreen,id)->x; sEdInit.y = widgGetFromID(psRequestScreen,id)->y; sEdInit.width = widgGetFromID(psRequestScreen,id)->width; sEdInit.height= widgGetFromID(psRequestScreen,id)->height; sEdInit.pText = ((W_BUTTON *)widgGetFromID(psRequestScreen,id))->pText; sEdInit.FontID= font_regular; sEdInit.pBoxDisplay = displayLoadSaveEdit; widgAddEditBox(psRequestScreen, &sEdInit); if (((W_BUTTON *)widgGetFromID(psRequestScreen,id))->pText != NULL) { snprintf(sDelete, sizeof(sDelete), "%s%s.%s", sPath, ((W_BUTTON *)widgGetFromID(psRequestScreen,id))->pText , sExt); } else { sstrcpy(sDelete, ""); } widgHide(psRequestScreen,id); // hide the old button chosenSlotId = id; // auto click in the edit box we just made. context.psScreen = psRequestScreen; context.psForm = (W_FORM *)psRequestScreen->psForm; context.xOffset = 0; context.yOffset = 0; context.mx = mouseX(); context.my = mouseY(); editBoxClicked((W_EDITBOX*)widgGetFromID(psRequestScreen,SAVEENTRY_EDIT), &context); } else { // clicked in a different box. shouldnt be possible!(since we autoclicked in editbox) } } } // finished entering a name. if( id == SAVEENTRY_EDIT) { char sTemp[MAX_STR_LENGTH]; if(!keyPressed(KEY_RETURN) && !keyPressed(KEY_KPENTER)) // enter was not pushed, so not a vaild entry. { widgDelete(psRequestScreen,SAVEENTRY_EDIT); //unselect this box, and go back .. widgReveal(psRequestScreen,chosenSlotId); return true; } // scan to see if that game exists in another slot, if so then fail. sstrcpy(sTemp, widgGetString(psRequestScreen, id)); for(i=LOADENTRY_START;i<LOADENTRY_END;i++) { if( i != chosenSlotId) { if( ((W_BUTTON *)widgGetFromID(psRequestScreen,i))->pText && strcmp( sTemp, ((W_BUTTON *)widgGetFromID(psRequestScreen,i))->pText ) ==0) { widgDelete(psRequestScreen,SAVEENTRY_EDIT); //unselect this box, and go back .. widgReveal(psRequestScreen,chosenSlotId); // move mouse to same box.. // SetMousePos(widgGetFromID(psRequestScreen,i)->pos.x ,widgGetFromID(psRequestScreen,i)->pos.y); audio_PlayTrack(ID_SOUND_BUILD_FAIL); return true; } } } // return with this name, as we've edited it. if (strlen(widgGetString(psRequestScreen, id))) { sstrcpy(sTemp, widgGetString(psRequestScreen, id)); removeWildcards(sTemp); snprintf(sRequestResult, sizeof(sRequestResult), "%s%s.%s", sPath, sTemp, sExt); if (strlen(sDelete) != 0) { deleteSaveGame(sDelete); //only delete game if a new game fills the slot } } goto cleanup; } return false; // failed and/or cancelled.. cleanup: closeLoadSave(); bRequestLoad = false; if (bResetMissionWidgets && widgGetFromID(psWScreen,IDMISSIONRES_FORM) == NULL) { resetMissionWidgets(); //reset the mission widgets here if necessary } return true; // success on load. success: campaign = getCampaign(sRequestResult); setCampaignNumber(campaign); debug(LOG_WZ, "Set campaign for %s to %u", sRequestResult, campaign); closeLoadSave(); bRequestLoad = true; return true; }
bool runMouseOptionsMenu(void) { UDWORD id = widgRunScreen(psWScreen); switch (id) { case FRONTEND_MFLIP: case FRONTEND_MFLIP_R: if( getInvertMouseStatus() ) {// flipped setInvertMouseStatus(false); widgSetString(psWScreen,FRONTEND_MFLIP_R, _("Off")); } else { // not flipped setInvertMouseStatus(true); widgSetString(psWScreen,FRONTEND_MFLIP_R, _("On")); } break; case FRONTEND_TRAP: case FRONTEND_TRAP_R: if (war_GetTrapCursor()) { war_SetTrapCursor(false); widgSetString(psWScreen, FRONTEND_TRAP_R, _("Off")); } else { war_SetTrapCursor(true); widgSetString(psWScreen, FRONTEND_TRAP_R, _("On")); } break; case FRONTEND_MBUTTONS: case FRONTEND_MBUTTONS_R: if( getRightClickOrders() ) { setRightClickOrders(false); widgSetString(psWScreen,FRONTEND_MBUTTONS_R, _("Off")); } else { setRightClickOrders(true); widgSetString(psWScreen,FRONTEND_MBUTTONS_R, _("On")); } break; case FRONTEND_MMROTATE: case FRONTEND_MMROTATE_R: if( getMiddleClickRotate() ) { setMiddleClickRotate(false); widgSetString(psWScreen,FRONTEND_MMROTATE_R, _("Right Mouse")); } else { setMiddleClickRotate(true); widgSetString(psWScreen,FRONTEND_MMROTATE_R, _("Middle Mouse")); } break; case FRONTEND_QUIT: changeTitleMode(OPTIONS); break; default: break; } if (CancelPressed()) { changeTitleMode(OPTIONS); } widgDisplayScreen(psWScreen); return true; }
bool runSinglePlayerMenu(void) { UDWORD id; if(bLoadSaveUp) { if(runLoadSave(false))// check for file name. { loadOK(); } } else if (challengesUp) { runChallenges(); } else { id = widgRunScreen(psWScreen); // Run the current set of widgets switch(id) { case FRONTEND_NEWGAME: SPinit(); frontEndNewGame(); break; case FRONTEND_LOADCAM2: SPinit(); sstrcpy(aLevelName, "CAM_2A"); changeTitleMode(STARTGAME); initLoadingScreen(true); break; case FRONTEND_LOADCAM3: SPinit(); sstrcpy(aLevelName, "CAM_3A"); changeTitleMode(STARTGAME); initLoadingScreen(true); break; case FRONTEND_LOADGAME: SPinit(); addLoadSave(LOAD_FRONTEND, _("Load Saved Game")); // change mode when loadsave returns break; case FRONTEND_SKIRMISH: SPinit(); ingame.bHostSetup = true; lastTitleMode = SINGLE; changeTitleMode(MULTIOPTION); break; case FRONTEND_QUIT: changeTitleMode(TITLE); break; case FRONTEND_CHALLENGES: SPinit(); addChallenges(); break; default: break; } if(CancelPressed()) { changeTitleMode(TITLE); } } if (!bLoadSaveUp && !challengesUp) // if save/load screen is up { widgDisplayScreen(psWScreen); // show the widgets currently running } if (bLoadSaveUp) // if save/load screen is up { displayLoadSave(); } else if (challengesUp) { displayChallenges(); } return true; }
bool runGameOptionsMenu(void) { UDWORD id; id = widgRunScreen(psWScreen); // Run the current set of widgets switch(id) { case FRONTEND_LANGUAGE_R: setNextLanguage(); widgSetString(psWScreen, FRONTEND_LANGUAGE_R, getLanguageName()); /* Hack to reset current menu text, which looks fancy. */ widgSetString(psWScreen, FRONTEND_LANGUAGE, _("Language")); widgSetString(psWScreen, FRONTEND_COLOUR, _("Unit Colour")); widgSetString(psWScreen, FRONTEND_DIFFICULTY, _("Difficulty")); widgSetString(psWScreen, FRONTEND_SCROLLSPEED,_("Scroll Speed")); widgSetString(psWScreen, FRONTEND_SIDETEXT, _("GAME OPTIONS")); // FIXME: Changing the below return button tooltip does not work. //widgSetString(psWScreen, FRONTEND_BOTFORM, P_("menu", "Return")); switch( getDifficultyLevel() ) { case DL_EASY: widgSetString(psWScreen,FRONTEND_DIFFICULTY_R, _("Easy")); break; case DL_NORMAL: widgSetString(psWScreen,FRONTEND_DIFFICULTY_R, _("Normal")); break; case DL_HARD: widgSetString(psWScreen,FRONTEND_DIFFICULTY_R, _("Hard") ); break; case DL_TOUGH: case DL_KILLER: debug(LOG_ERROR, "runGameOptionsMenu: Unused difficulty level selected!"); break; } break; case FRONTEND_RADAR_R: rotateRadar = !rotateRadar; widgSetString(psWScreen, FRONTEND_RADAR_R, rotateRadar ? _("Rotating") : _("Fixed")); break; case FRONTEND_SCROLLSPEED: break; case FRONTEND_DIFFICULTY: case FRONTEND_DIFFICULTY_R: switch( getDifficultyLevel() ) { case DL_EASY: setDifficultyLevel(DL_NORMAL); widgSetString(psWScreen,FRONTEND_DIFFICULTY_R, _("Normal")); break; case DL_NORMAL: setDifficultyLevel(DL_HARD); widgSetString(psWScreen,FRONTEND_DIFFICULTY_R, _("Hard") ); break; case DL_HARD: setDifficultyLevel(DL_EASY); widgSetString(psWScreen,FRONTEND_DIFFICULTY_R, _("Easy")); break; default: // DL_TOUGH and DL_KILLER break; } break; case FRONTEND_SCROLLSPEED_SL: scroll_speed_accel = widgGetSliderPos(psWScreen,FRONTEND_SCROLLSPEED_SL) * 100; //0-1600 if(scroll_speed_accel ==0) // make sure you CAN scroll. { scroll_speed_accel = 100; } break; case FRONTEND_QUIT: changeTitleMode(OPTIONS); break; case FE_P0: widgSetButtonState(psWScreen, FE_P0, WBUT_LOCK); widgSetButtonState(psWScreen, FE_P4, 0); widgSetButtonState(psWScreen, FE_P5, 0); widgSetButtonState(psWScreen, FE_P6, 0); widgSetButtonState(psWScreen, FE_P7, 0); war_SetSPcolor(0); break; case FE_P4: widgSetButtonState(psWScreen, FE_P0, 0); widgSetButtonState(psWScreen, FE_P4, WBUT_LOCK); widgSetButtonState(psWScreen, FE_P5, 0); widgSetButtonState(psWScreen, FE_P6, 0); widgSetButtonState(psWScreen, FE_P7, 0); war_SetSPcolor(4); break; case FE_P5: widgSetButtonState(psWScreen, FE_P0, 0); widgSetButtonState(psWScreen, FE_P4, 0); widgSetButtonState(psWScreen, FE_P5, WBUT_LOCK); widgSetButtonState(psWScreen, FE_P6, 0); widgSetButtonState(psWScreen, FE_P7, 0); war_SetSPcolor(5); break; case FE_P6: widgSetButtonState(psWScreen, FE_P0, 0); widgSetButtonState(psWScreen, FE_P4, 0); widgSetButtonState(psWScreen, FE_P5, 0); widgSetButtonState(psWScreen, FE_P6, WBUT_LOCK); widgSetButtonState(psWScreen, FE_P7, 0); war_SetSPcolor(6); break; case FE_P7: widgSetButtonState(psWScreen, FE_P0, 0); widgSetButtonState(psWScreen, FE_P4, 0); widgSetButtonState(psWScreen, FE_P5, 0); widgSetButtonState(psWScreen, FE_P6, 0); widgSetButtonState(psWScreen, FE_P7, WBUT_LOCK); war_SetSPcolor(7); break; default: break; } // If close button pressed then return from this menu. if(CancelPressed()) { changeTitleMode(OPTIONS); } widgDisplayScreen(psWScreen); // show the widgets currently running return true; }