/*! * Shutdown/cleanup after the game loop * Would stop the timer */ static void stopGameLoop(void) { if (gameLoopStatus != GAMECODE_NEWLEVEL) { clearBlueprints(); initLoadingScreen(true); // returning to f.e. do a loader.render not active pie_EnableFog(false); // dont let the normal loop code set status on fogStatus = 0; if (gameLoopStatus != GAMECODE_LOADGAME) { if (!levReleaseAll()) { debug(LOG_ERROR, "levReleaseAll failed!"); } } closeLoadingScreen(); reloadMPConfig(); } // Disable cursor trapping if (war_GetTrapCursor()) { wzReleaseMouse(); } gameInitialised = false; }
/*! * Run the code inside the titleloop */ static void runTitleLoop(void) { switch (titleLoop()) { case TITLECODE_CONTINUE: break; case TITLECODE_QUITGAME: debug(LOG_MAIN, "TITLECODE_QUITGAME"); stopTitleLoop(); wzQuit(); break; case TITLECODE_SAVEGAMELOAD: { debug(LOG_MAIN, "TITLECODE_SAVEGAMELOAD"); initLoadingScreen(true); // Restart into gameloop and load a savegame, ONLY on a good savegame load! stopTitleLoop(); if (!initSaveGameLoad()) { // we had a error loading savegame (corrupt?), so go back to title screen? stopGameLoop(); startTitleLoop(); changeTitleMode(TITLE); } closeLoadingScreen(); break; } case TITLECODE_STARTGAME: debug(LOG_MAIN, "TITLECODE_STARTGAME"); initLoadingScreen(true); stopTitleLoop(); startGameLoop(); // Restart into gameloop closeLoadingScreen(); break; case TITLECODE_SHOWINTRO: debug(LOG_MAIN, "TITLECODE_SHOWINTRO"); seq_ClearSeqList(); seq_AddSeqToList("titles.ogg", NULL, NULL, false); seq_AddSeqToList("devastation.ogg", NULL, "devastation.txa", false); seq_StartNextFullScreenVideo(); break; default: debug(LOG_ERROR, "Unknown code returned by titleLoop"); break; } }
// //////////////////////////////////////////////////////////////////////////// // //////////////////////////////////////////////////////////////////////////// // Called once on program startup. // bool systemInitialise(void) { if (!widgInitialise()) { return false; } buildMapList(); // Initialize render engine war_SetFog(war_GetFog()); // Set Fog mode based on user preferences if (!pie_Initialise()) { debug(LOG_ERROR, "Unable to initialise renderer"); return false; } if ( war_getSoundEnabled() ) { if (!audio_Init(droidAudioTrackStopped)) { debug(LOG_SOUND, "Could not initialise audio system: Continuing without audio"); } if (war_GetMusicEnabled()) { cdAudio_Open(UserMusicPath); } } else { debug(LOG_SOUND, "Sound disabled"); } if (!dataInitLoadFuncs()) // Pass all the data loading functions to the framework library { return false; } if (!fpathInitialise()) { return false; } // Initialize the iVis text rendering module iV_TextInit(); iV_Reset(); // Reset the IV library. initLoadingScreen(true); readAIs(); return true; }
/*! * Preparations before entering the title (mainmenu) loop * Would start the timer in an event based mainloop */ static void startTitleLoop(void) { SetGameMode(GS_TITLE_SCREEN); initLoadingScreen(true); if (!frontendInitialise("wrf/frontend.wrf")) { debug( LOG_FATAL, "Shutting down after failure" ); exit(EXIT_FAILURE); } closeLoadingScreen(); }
// //////////////////////////////////////////////////////////////////////////// bool startLimitScreen(void) { addBackdrop();//background // load stats... if(!bLimiterLoaded) { initLoadingScreen(true); if (!resLoad("wrf/limiter_tex.wrf", 501)) { return false; } if (!resLoad("wrf/piestats.wrf", 502)) { return false; } if (!resLoad("wrf/limiter_data.wrf", 503)) { return false; } bLimiterLoaded = true; closeLoadingScreen(); } if (challengeActive) { // reset the sliders.. // it's a HACK since the actual limiter structure was cleared in the startMultiOptions function for (unsigned i = 0; i < numStructureStats; ++i) { asStructLimits[0][i].limit = asStructLimits[0][i].globalLimit; } // turn off the sliders sliderEnableDrag(false); } else { //enable the sliders sliderEnableDrag(true); } addSideText(FRONTEND_SIDETEXT1,LIMITSX-2,LIMITSY,"LIMITS"); // draw sidetext... WIDGET *parent = widgGetFromID(psWScreen, FRONTEND_BACKDROP); IntFormAnimated *limitsForm = new IntFormAnimated(parent, false); limitsForm->id = IDLIMITS; limitsForm->setGeometry(LIMITSX, LIMITSY, LIMITSW, LIMITSH); // return button. addMultiBut(psWScreen,IDLIMITS,IDLIMITS_RETURN, LIMITS_OKX-40,LIMITS_OKY, iV_GetImageWidth(FrontImages, IMAGE_NO), iV_GetImageHeight(FrontImages, IMAGE_NO), _("Apply Defaults and Return To Previous Screen"),IMAGE_NO,IMAGE_NO,true); // ok button addMultiBut(psWScreen,IDLIMITS,IDLIMITS_OK, LIMITS_OKX,LIMITS_OKY, iV_GetImageWidth(FrontImages,IMAGE_OK), iV_GetImageHeight(FrontImages,IMAGE_OK), _("Accept Settings"),IMAGE_OK,IMAGE_OK,true); // add tab form.. IntListTabWidget *limitsList = new IntListTabWidget(limitsForm); limitsList->setChildSize(BARWIDTH, BARHEIGHT); limitsList->setChildSpacing(5, 5); limitsList->setGeometry(50, 10, BARWIDTH, 370); //Put the buttons on it int limitsButtonId = IDLIMITS_ENTRIES_START; for (unsigned i = 0; i < numStructureStats; ++i) { if (asStructLimits[0][i].globalLimit != LOTS_OF) { W_FORM *button = new W_FORM(limitsList); button->id = limitsButtonId; button->displayFunction = displayStructureBar; button->UserData = i; limitsList->addWidgetToLayout(button); ++limitsButtonId; addFESlider(limitsButtonId, limitsButtonId - 1, 290, 11, asStructLimits[0][i].globalLimit, asStructLimits[0][i].limit); ++limitsButtonId; } } return true; }
int WINAPI WinMain( HINSTANCE hInstance, // handle to current instance HINSTANCE hPrevInstance, // handle to previous instance LPSTR lpCmdLine, // pointer to command line int nShowCmd) // show state of window { FRAME_STATUS frameRet; BOOL quit = FALSE; BOOL Restart = FALSE; BOOL paused = FALSE;//, firstTime = TRUE; BOOL bGlide = FALSE; BOOL bVidMem = FALSE; SDWORD dispBitDepth = DISP_BITDEPTH; SDWORD introVideoControl = 3; GAMECODE loopStatus; iColour* psPaletteBuffer; SDWORD pSize; (void)nShowCmd; // (void)lpCmdLine; (void)hPrevInstance; // initialise all the command line states clStartWindowed = FALSE; clIntroVideo = FALSE; // save debugging info to disk DBOUTPUTFILE("debug.txt"); if (!pie_CheckForDX6()) { DBERROR(("Unable to create DirectX 6 interface.\nPlease ensure DirectX 6 or later is installed.")); return -1; } war_SetDefaultStates(); war_SetRendMode(REND_MODE_HAL); if (InitGlideDLL()) // In ivis02/3dfxdyn.c - returns FALSE if no glide2x.dll is not found { bGlideFound = TRUE; war_SetRendMode(REND_MODE_GLIDE);//default to glide this will be over writen by Registry or Command line if found } init://jump here from the end if re_initialising // initialise memory stuff, moved out of frameinit by ajl. if (!memInitialise()) { return FALSE; } if (!blkInitialise()) { return FALSE; } loadRenderMode();//get the registry entry for clRendMode bDisableLobby = FALSE; // parse the command line // if (bDisableLobby || !NetPlay.bLobbyLaunched) // { if(!reInit) { if(!ParseCommandLine(lpCmdLine,bGlideFound)) { return -1; } } // } // find out if the lobby stuff has been disabled // bDisableLobby = checkDisableLobby(); if (!bDisableLobby && !lobbyInitialise()) // ajl. Init net stuff. Lobby can modify startup conditions like commandline. { return -1; } reInit = FALSE;//just so we dont restart again #ifdef USE_FILE_PATH _chdir(FILE_PATH); #endif //always start windowed toggle to fullscreen later if (war_GetRendMode() == REND_MODE_HAL) { bGlide = FALSE; bVidMem = TRUE; dispBitDepth = DISP_HARDBITDEPTH; } else if (war_GetRendMode() == REND_MODE_REF) { bGlide = FALSE; bVidMem = TRUE; dispBitDepth = DISP_HARDBITDEPTH; } else if (war_GetRendMode() == REND_MODE_RGB) { bGlide = FALSE; bVidMem = FALSE; dispBitDepth = DISP_HARDBITDEPTH; } else if (war_GetRendMode() == REND_MODE_GLIDE) { bGlide = TRUE; bVidMem = FALSE; dispBitDepth = DISP_HARDBITDEPTH; } else { bGlide = FALSE; bVidMem = FALSE; dispBitDepth = DISP_BITDEPTH; } // frameDDEnumerate(); if (!frameInitialise(hInstance, "Warzone 2100", DISP_WIDTH,DISP_HEIGHT,dispBitDepth, !clStartWindowed, bVidMem, bGlide)) { return -1; } if (!wdgLoadAllWDGCatalogs()) { return -1; } pie_SetFogStatus(FALSE); pie_ScreenFlip(CLEAR_BLACK); pie_ScreenFlip(CLEAR_BLACK); if (war_GetRendMode() == REND_MODE_GLIDE) { dbg_SetMessageBoxCallback(fxMBCallback); dbg_SetErrorBoxCallback(fxMBCallback); dbg_SetAssertCallback(fxMBCallback); } if(gameStatus == GS_VIDEO_MODE) { introVideoControl = 0;//play video gameStatus = GS_TITLE_SCREEN; } //load palette psPaletteBuffer = (iColour*)MALLOC(256 * sizeof(iColour)+1); if (psPaletteBuffer == NULL) { DBERROR(("Out of memory")); return -1; } if (!loadFileToBuffer("palette.bin", (UBYTE*)psPaletteBuffer, (256 * sizeof(iColour)+1),(UDWORD*)&pSize)) { DBERROR(("Couldn't load palette data")); return -1; } pal_AddNewPalette(psPaletteBuffer); FREE(psPaletteBuffer); if (war_GetRendMode() == REND_MODE_GLIDE) { pie_LoadBackDrop(SCREEN_RANDOMBDROP,TRUE); } else { pie_LoadBackDrop(SCREEN_RANDOMBDROP,FALSE); } pie_SetFogStatus(FALSE); pie_ScreenFlip(CLEAR_BLACK); quit = FALSE; /* check CDROM drive available */ if ( cdspan_CheckCDAvailable() == FALSE ) { DBERROR( ("Cannot detect CDROM drive\n") ); quit = TRUE; } if (!systemInitialise()) { return -1; } // If windowed mode not requested then toggle to full screen. Doing // it here rather than in the call to frameInitialise fixes a problem // where machines with an NVidia and a 3DFX would kill the 3dfx display. (Definitly a HACK, PD) /* if(!clStartWindowed) { screenToggleMode(); } */ //set all the pause states to false setAllPauseStates(FALSE); while (!quit) { // Do the game mode specific initialisation. switch(gameStatus) { case GS_TITLE_SCREEN: screen_RestartBackDrop(); if (!frontendInitialise("wrf\\frontend.wrf")) { goto exit; } frontendInitialised = TRUE; frontendInitVars(); //if intro required set up the video if (introVideoControl <= 1) { seq_ClearSeqList(); seq_AddSeqToList("eidos-logo.rpl",NULL, NULL, FALSE,0); seq_AddSeqToList("pumpkin.rpl",NULL, NULL, FALSE,0); seq_AddSeqToList("titles.rpl",NULL, NULL, FALSE,0); seq_AddSeqToList("devastation.rpl",NULL,"devastation.txa", FALSE,0); seq_StartNextFullScreenVideo(); introVideoControl = 2; } break; case GS_SAVEGAMELOAD: screen_RestartBackDrop(); gameStatus = GS_NORMAL; // load up a save game if (!loadGameInit(saveGameName,FALSE)) { goto exit; } /*if (!levLoadData(pLevelName, saveGameName)) { return -1; }*/ screen_StopBackDrop(); break; case GS_NORMAL: if (!levLoadData(pLevelName, NULL, 0)) { goto exit; } //after data is loaded check the research stats are valid if (!checkResearchStats()) { DBERROR(("Invalid Research Stats")); goto exit; } //and check the structure stats are valid if (!checkStructureStats()) { DBERROR(("Invalid Structure Stats")); goto exit; } //set a flag for the trigger/event system to indicate initialisation is complete gameInitialised = TRUE; screen_StopBackDrop(); break; case GS_VIDEO_MODE: DBERROR(("Video_mode no longer valid")); if (introVideoControl == 0) { videoInitialised = TRUE; } break; default: DBERROR(("Unknown game status on startup!")); } DBPRINTF(("Entering main loop\n")); Restart = FALSE; //firstTime = TRUE; while (!Restart) { frameRet = frameUpdate(); if (pie_GetRenderEngine() == ENGINE_D3D) { if ( frameRet == FRAME_SETFOCUS ) { D3DTestCooperativeLevel( TRUE ); } else { D3DTestCooperativeLevel( FALSE ); } } switch (frameRet) { case FRAME_KILLFOCUS: paused = TRUE; gameTimeStop(); if (pie_GetRenderEngine() == ENGINE_GLIDE) { if (!gl_Deactivate()) { quit = TRUE; Restart = TRUE; } } mixer_SaveIngameVols(); mixer_RestoreWinVols(); audio_StopAll(); break; case FRAME_SETFOCUS: paused = FALSE; gameTimeStart(); if (!dispModeChange()) { quit = TRUE; Restart = TRUE; } if (pie_GetRenderEngine() == ENGINE_GLIDE) { if (!gl_Reactivate()) { quit = TRUE; Restart = TRUE; } } else if (pie_GetRenderEngine() == ENGINE_D3D) { dtm_RestoreTextures(); } mixer_SaveWinVols(); mixer_RestoreIngameVols(); break; case FRAME_QUIT: quit = TRUE; Restart = TRUE; break; } lastStatus = gameStatus; if ((!paused) && (!quit)) { switch(gameStatus) { case GS_TITLE_SCREEN: pie_SetSwirlyBoxes(TRUE); if (loop_GetVideoStatus()) { videoLoop(); } else { switch(titleLoop()) { case TITLECODE_QUITGAME: DBPRINTF(("TITLECODE_QUITGAME\n")); Restart = TRUE; quit = TRUE; break; // case TITLECODE_ATTRACT: // DBPRINTF(("TITLECODE_ATTRACT\n")); // break; case TITLECODE_SAVEGAMELOAD: DBPRINTF(("TITLECODE_SAVEGAMELOAD\n")); gameStatus = GS_SAVEGAMELOAD; Restart = TRUE; break; case TITLECODE_STARTGAME: DBPRINTF(("TITLECODE_STARTGAME\n")); gameStatus = GS_NORMAL; Restart = TRUE; break; case TITLECODE_SHOWINTRO: DBPRINTF(("TITLECODE_SHOWINTRO\n")); seq_ClearSeqList(); seq_AddSeqToList("eidos-logo.rpl",NULL,NULL, FALSE,0); seq_AddSeqToList("pumpkin.rpl",NULL,NULL, FALSE,0); seq_AddSeqToList("titles.rpl",NULL,NULL, FALSE,0); seq_AddSeqToList("devastation.rpl",NULL,"devastation.txa", FALSE,0); seq_StartNextFullScreenVideo(); introVideoControl = 2;//play the video but dont init the sound system break; case TITLECODE_CONTINUE: break; default: DBERROR(("Unknown code returned by titleLoop")); } } pie_SetSwirlyBoxes(FALSE); break; /* case GS_SAVEGAMELOAD: if (loopNewLevel) { //the start of a campaign/expand mission DBPRINTF(("GAMECODE_NEWLEVEL\n")); loopNewLevel = FALSE; // gameStatus is unchanged, just loading additional data Restart = TRUE; } break; */ case GS_NORMAL: if (loop_GetVideoStatus()) { videoLoop(); } else { loopStatus = gameLoop(); switch(loopStatus) { case GAMECODE_QUITGAME: DBPRINTF(("GAMECODE_QUITGAME\n")); gameStatus = GS_TITLE_SCREEN; Restart = TRUE; /*#ifdef NON_INTERACT quit = TRUE; #endif*/ if(NetPlay.bLobbyLaunched) { // changeTitleMode(QUIT); quit = TRUE; } break; case GAMECODE_FASTEXIT: DBPRINTF(("GAMECODE_FASTEXIT\n")); Restart = TRUE; quit = TRUE; break; case GAMECODE_LOADGAME: DBPRINTF(("GAMECODE_LOADGAME\n")); Restart = TRUE; gameStatus = GS_SAVEGAMELOAD; break; case GAMECODE_PLAYVIDEO: DBPRINTF(("GAMECODE_PLAYVIDEO\n")); //dont schange mode any more gameStatus = GS_VIDEO_MODE; Restart = FALSE; break; case GAMECODE_NEWLEVEL: DBPRINTF(("GAMECODE_NEWLEVEL\n")); // gameStatus is unchanged, just loading additional data Restart = TRUE; break; case GAMECODE_RESTARTGAME: DBPRINTF(("GAMECODE_RESTARTGAME\n")); Restart = TRUE; break; case GAMECODE_CONTINUE: break; default: DBERROR(("Unknown code returned by gameLoop")); } } break; case GS_VIDEO_MODE: DBERROR(("Video_mode no longer valid")); if (loop_GetVideoStatus()) { videoLoop(); } else { if (introVideoControl <= 1) { seq_ClearSeqList(); seq_AddSeqToList("factory.rpl",NULL,NULL, FALSE,0); seq_StartNextFullScreenVideo();//"sequences\\factory.rpl","sequences\\factory.wav"); introVideoControl = 2; } else { DBPRINTF(("VIDEO_QUIT\n")); if (introVideoControl == 2)//finished playing intro video { gameStatus = GS_TITLE_SCREEN; if (videoInitialised) { Restart = TRUE; } introVideoControl = 3; } else { gameStatus = GS_NORMAL; } } } break; default: DBERROR(("Weirdy game status I'm afraid!!")); break; } gameTimeUpdate(); } } // End of !Restart loop. // Do game mode specific shutdown. switch(lastStatus) { case GS_TITLE_SCREEN: if (!frontendShutdown()) { goto exit; } frontendInitialised = FALSE; break; /* case GS_SAVEGAMELOAD: //get the next level to load up gameStatus = GS_NORMAL; break;*/ case GS_NORMAL: if (loopStatus != GAMECODE_NEWLEVEL) { initLoadingScreen(TRUE,FALSE); // returning to f.e. do a loader.render not active pie_EnableFog(FALSE);//dont let the normal loop code set status on fogStatus = 0; if (loopStatus != GAMECODE_LOADGAME) { levReleaseAll(); } } gameInitialised = FALSE; break; case GS_VIDEO_MODE: DBERROR(("Video_mode no longer valid")); if (videoInitialised) { videoInitialised = FALSE; } break; default: DBERROR(("Unknown game status on shutdown!")); break; } } // End of !quit loop. DBPRINTF(("Shuting down application\n")); systemShutdown(); pal_ShutDown(); frameShutDown(); ShutdownGlideDLL(); if (reInit) goto init; PostQuitMessage(0); return 0; exit: DBPRINTF(("Shutting down after fail\n")); systemShutdown(); pal_ShutDown(); frameShutDown(); ShutdownGlideDLL(); PostQuitMessage(1); return 1; }
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; }
// ///////////////// ///////////////////////////////////////////////// // Main Front end game loop. TITLECODE titleLoop(void) { TITLECODE RetCode = TITLECODE_CONTINUE; pie_SetDepthBufferStatus(DEPTH_CMP_ALWAYS_WRT_ON); pie_SetFogStatus(false); screen_RestartBackDrop(); pie_ShowMouse(true); // When we first init the game, firstcall is true. if (firstcall) { firstcall = false; // First check to see if --host was given as a command line option, if not, // then check --join and if neither, run the normal game menu. if( hostlaunch ) { ingame.bHostSetup = true; bMultiPlayer = true; bMultiMessages = true; game.type = SKIRMISH; // needed? changeTitleMode(MULTIOPTION); hostlaunch = false; // reset the bool to default state. } else if(strlen(iptoconnect) ) { changeTitleMode(GAMEFIND); // a ip/hostname was found, so go directly to the GAMEFIND screen } else { changeTitleMode(TITLE); // normal game, run main title screen. } // Using software cursors (when on) for these menus due to a bug in SDL's SDL_ShowCursor() pie_SetMouse(CURSOR_DEFAULT, war_GetColouredCursor()); } if (titleMode != MULTIOPTION && titleMode != MULTILIMIT && titleMode != STARTGAME) screen_disableMapPreview(); switch(titleMode) // run relevant title screen code. { // MULTIPLAYER screens case PROTOCOL: runConnectionScreen(); // multiplayer connection screen. break; case MULTIOPTION: runMultiOptions(); break; case GAMEFIND: runGameFind(); break; case MULTI: runMultiPlayerMenu(); break; case MULTILIMIT: runLimitScreen(); break; case KEYMAP: runKeyMapEditor(); break; case TITLE: runTitleMenu(); break; case SINGLE: runSinglePlayerMenu(); break; case TUTORIAL: runTutorialMenu(); break; // case GRAPHICS: // runGraphicsOptionsMenu(); // break; case CREDITS: runCreditsScreen(); break; // case DEMOMODE: // runDemoMenu(); // break; // case VIDEO: // runVideoOptionsMenu(); // break; case OPTIONS: runOptionsMenu(); break; case GAME: runGameOptionsMenu(); break; case GRAPHICS_OPTIONS: runGraphicsOptionsMenu(); break; case AUDIO_OPTIONS: runAudioOptionsMenu(); break; case VIDEO_OPTIONS: runVideoOptionsMenu(); break; case MOUSE_OPTIONS: runMouseOptionsMenu(); break; case QUIT: RetCode = TITLECODE_QUITGAME; break; case STARTGAME: case LOADSAVEGAME: initLoadingScreen(true);//render active if (titleMode == LOADSAVEGAME) { RetCode = TITLECODE_SAVEGAMELOAD; } else { RetCode = TITLECODE_STARTGAME; } return RetCode; // don't flip! case SHOWINTRO: pie_SetFogStatus(false); pie_ScreenFlip(CLEAR_BLACK); changeTitleMode(TITLE); RetCode = TITLECODE_SHOWINTRO; break; default: debug( LOG_FATAL, "unknown title screen mode" ); abort(); } NETflush(); // Send any pending network data. audio_Update(); pie_DrawMouse(mouseX(), mouseY()); pie_SetFogStatus(false); pie_ScreenFlip(CLEAR_BLACK);//title loop if ((keyDown(KEY_LALT) || keyDown(KEY_RALT)) /* Check for toggling display mode */ && keyPressed(KEY_RETURN)) { screenToggleMode(); } return RetCode; }
// //////////////////////////////////////////////////////////////////////////// bool startLimitScreen(void) { UDWORD numButtons = 0; UDWORD i; addBackdrop();//background // load stats... if(!bLimiterLoaded) { initLoadingScreen(true); if (!resLoad("wrf/limiter_tex.wrf", 501)) { return false; } if (!resLoad("wrf/piestats.wrf", 502)) { return false; } if (!resLoad("wrf/limiter_data.wrf", 503)) { return false; } bLimiterLoaded = true; closeLoadingScreen(); } if (challengeActive) { // reset the sliders.. // it's a HACK since the actual limiter structure was cleared in the startMultiOptions function for (i = 0; i < numStructureStats ; ++i) { asStructLimits[0][i].limit = asStructLimits[0][i].globalLimit; } // turn off the sliders sliderEnableDrag(false); } else { //enable the sliders sliderEnableDrag(true); } addSideText(FRONTEND_SIDETEXT1,LIMITSX-2,LIMITSY,"LIMITS"); // draw sidetext... W_FORMINIT sFormInit; sFormInit.formID = FRONTEND_BACKDROP; sFormInit.id = IDLIMITS; sFormInit.style = WFORM_PLAIN; sFormInit.x = LIMITSX; sFormInit.y = LIMITSY; sFormInit.width = LIMITSW; sFormInit.height = LIMITSH; sFormInit.pDisplay = intDisplayPlainForm; widgAddForm(psWScreen, &sFormInit); // return button. addMultiBut(psWScreen,IDLIMITS,IDLIMITS_RETURN, LIMITS_OKX-40,LIMITS_OKY, iV_GetImageWidth(FrontImages,IMAGE_RETURN), iV_GetImageHeight(FrontImages,IMAGE_RETURN), _("Apply Defaults and Return To Previous Screen"),IMAGE_NO,IMAGE_NO,true); // ok button addMultiBut(psWScreen,IDLIMITS,IDLIMITS_OK, LIMITS_OKX,LIMITS_OKY, iV_GetImageWidth(FrontImages,IMAGE_OK), iV_GetImageHeight(FrontImages,IMAGE_OK), _("Accept Settings"),IMAGE_OK,IMAGE_OK,true); // Count the number of minor tabs needed numButtons = 0; for(i=0; i<numStructureStats; i++ ) { if(useStruct(numButtons,i)) { numButtons++; } } if(numButtons >(4*BUTPERFORM)) numButtons =(4*BUTPERFORM); // add tab form.. sFormInit = W_FORMINIT(); sFormInit.formID = IDLIMITS; sFormInit.id = IDLIMITS_TABS; sFormInit.style = WFORM_TABBED; sFormInit.x = 50; sFormInit.y = 10; sFormInit.width = LIMITSW - 100; sFormInit.height =LIMITSH - 4; sFormInit.numMajor = numForms(numButtons, BUTPERFORM); sFormInit.majorPos = WFORM_TABTOP; sFormInit.minorPos = WFORM_TABNONE; sFormInit.majorSize = OBJ_TABWIDTH+3; //!! sFormInit.majorOffset = OBJ_TABOFFSET; sFormInit.tabVertOffset = (OBJ_TABHEIGHT/2); //(DES_TAB_HEIGHT/2)+2; sFormInit.tabMajorThickness = OBJ_TABHEIGHT; sFormInit.pUserData = &StandardTab; sFormInit.pTabDisplay = intDisplayTab; // TABFIXME --unsure if needs fixing yet. for (i=0; i< sFormInit.numMajor; i++) { sFormInit.aNumMinors[i] = 1; } widgAddForm(psWScreen, &sFormInit); //Put the buttons on it W_FORMINIT sButInit; sButInit.formID = IDLIMITS_TABS;//IDLIMITS; sButInit.style = WFORM_PLAIN; sButInit.width = BARWIDTH; sButInit.height = BARHEIGHT; sButInit.pDisplay = displayStructureBar; sButInit.x = 2; sButInit.y = 5; sButInit.id = IDLIMITS_ENTRIES_START; numButtons =0; for(i=0; i<numStructureStats ; i++) { if(useStruct(numButtons,i)) { numButtons++; sButInit.UserData= i; widgAddForm(psWScreen, &sButInit); sButInit.id ++; addFESlider(sButInit.id,sButInit.id-1, 290,11, asStructLimits[0][i].globalLimit, asStructLimits[0][i].limit); sButInit.id ++; if (sButInit.y + BARHEIGHT + 2 > (BUTPERFORM*(BARHEIGHT+2) - 4) ) { sButInit.y = 5; sButInit.majorID += 1; } else { sButInit.y += BARHEIGHT +5; } } } return true; }