bool stageThreeShutDown(void) { debug(LOG_WZ, "== stageThreeShutDown =="); removeSpotters(); // There is an assymetry in scripts initialization and destruction, due // the many different ways scripts get loaded. if (!shutdownScripts()) { return false; } challengesUp = false; challengeActive = false; isInGamePopupUp = false; shutdownTemplates(); // make sure any button tips are gone. widgReset(); audio_StopAll(); if(bMultiPlayer) { multiGameShutdown(); } cmdDroidMultiExpBoost(false); eventReset(); // reset the script values system scrvReset(); //call this here before mission data is released if (!missionShutDown()) { return false; } /* When this line wasn't at this point. The PSX version always failed on the next script after the tutorial ... unexplained why? */ // bInTutorial=false; scrExternReset(); //reset the run data so that doesn't need to be initialised in the scripts initRunData(); resetVTOLLandingPos(); setScriptWinLoseVideo(PLAY_NONE); return true; }
void loop_SetVideoPlaybackMode(void) { videoMode += 1; paused = true; video = true; gameTimeStop(); pie_SetFogStatus(false); audio_StopAll(); wzShowMouse(false); screen_StopBackDrop(); pie_ScreenFlip(CLEAR_BLACK); }
bool stageThreeShutDown() { debug(LOG_WZ, "== stageThreeShutDown =="); hostlaunch = 0; removeSpotters(); // There is an asymmetry in scripts initialization and destruction, due // the many different ways scripts get loaded. if (!shutdownScripts()) { return false; } challengesUp = false; challengeActive = false; isInGamePopupUp = false; shutdownTemplates(); // make sure any button tips are gone. widgReset(); audio_StopAll(); if (bMultiPlayer) { multiGameShutdown(); } eventReset(); // reset the script values system scrvReset(); //call this here before mission data is released if (!missionShutDown()) { return false; } scrExternReset(); // reset the run data so that doesn't need to be initialised in the scripts initRunData(); resetVTOLLandingPos(); setScriptWinLoseVideo(PLAY_NONE); 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; }
// // Quick hack to throw up a ingame 'popup' for when the host drops connection. // void intAddInGamePopup(void) { //clear out any mission widgets - timers etc that may be on the screen clearMissionWidgets(); setWidgetsStatus(true); intResetScreen(false); if (isInGamePopupUp) return; audio_StopAll(); if(!gamePaused()) { kf_TogglePauseMode(); // Pause the game. } W_FORMINIT sFormInit; sFormInit.formID = 0; sFormInit.id = INTINGAMEPOPUP; sFormInit.style = WFORM_PLAIN; sFormInit.width = 600; sFormInit.height = 160; sFormInit.x = (SWORD)(20+D_W); sFormInit.y = (SWORD)((240-(160/2))+D_H); sFormInit.pDisplay = intOpenPlainForm; sFormInit.disableChildren= true; widgAddForm(psWScreen, &sFormInit); // add the text "buttons" now W_BUTINIT sButInit; sButInit.formID = INTINGAMEPOPUP; sButInit.style = OPALIGN; sButInit.width = 600; sButInit.FontID = font_large; sButInit.x = 0; sButInit.height = 10; sButInit.pDisplay = displayTextOption; sButInit.id = INTINGAMEOP_POPUP_MSG2; sButInit.y = 20; sButInit.pText = _("Host has quit the game!"); widgAddButton(psWScreen, &sButInit); sButInit.id = INTINGAMEOP_POPUP_MSG1; sButInit.y = 60; sButInit.pText = _("The game can't continue without the host."); widgAddButton(psWScreen, &sButInit); sButInit.id = INTINGAMEOP_POPUP_QUIT; sButInit.y = 124; sButInit.pText = _("--> QUIT <--"); widgAddButton(psWScreen, &sButInit); intMode = INT_POPUPMSG; // change interface mode. isInGamePopupUp = true; }
static bool _intAddInGameOptions(void) { audio_StopAll(); //clear out any mission widgets - timers etc that may be on the screen clearMissionWidgets(); setWidgetsStatus(true); //if already open, then close! if (widgGetFromID(psWScreen,INTINGAMEOP)) { intCloseInGameOptions(false, true); return true; } intResetScreen(false); // Pause the game. if(!gamePaused()) { kf_TogglePauseMode(); } W_FORMINIT sFormInit; sFormInit.width = INTINGAMEOP_W; // add form sFormInit.formID = 0; sFormInit.id = INTINGAMEOP; sFormInit.style = WFORM_PLAIN; sFormInit.x = (SWORD)INTINGAMEOP_X; sFormInit.y = (SWORD)INTINGAMEOP_Y; sFormInit.height = INTINGAMEOP_H; if ((!bMultiPlayer || (NetPlay.bComms == 0)) && !bInTutorial) { } else { sFormInit.height = INTINGAMEOP_HS; } sFormInit.pDisplay = intOpenPlainForm; sFormInit.disableChildren= true; widgAddForm(psWScreen, &sFormInit); // add 'quit' text if ((!bMultiPlayer || (NetPlay.bComms == 0)) && !bInTutorial) { addIGTextButton(INTINGAMEOP_QUIT, INTINGAMEOP_5_Y, INTINGAMEOP_OP_W, _("Quit"), OPALIGN); } else { addIGTextButton(INTINGAMEOP_QUIT, INTINGAMEOP_3_Y, INTINGAMEOP_OP_W, _("Quit"), OPALIGN); } // add 'resume' addIGTextButton(INTINGAMEOP_RESUME, INTINGAMEOP_1_Y, INTINGAMEOP_OP_W, _("Resume Game"), OPALIGN); // add 'options' addIGTextButton(INTINGAMEOP_OPTIONS, INTINGAMEOP_2_Y, INTINGAMEOP_OP_W, _("Audio Options"), OPALIGN); if ((!bMultiPlayer || (NetPlay.bComms == 0)) && !bInTutorial) { // add 'load' addIGTextButton(INTINGAMEOP_LOAD, INTINGAMEOP_3_Y, INTINGAMEOP_OP_W, _("Load Game"), OPALIGN); // add 'save' addIGTextButton(INTINGAMEOP_SAVE, INTINGAMEOP_4_Y, INTINGAMEOP_OP_W, _("Save Game"), OPALIGN); } intMode = INT_INGAMEOP; // change interface mode. InGameOpUp = true; // inform interface. wzSetCursor(CURSOR_DEFAULT); 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; }
/* Add the Intelligence Map widgets to the widget screen */ BOOL intAddIntelMap(void) { BOOL Animate = true; //check playCurrent with psCurrentMsg if (psCurrentMsg == NULL) { playCurrent = false; } else { playCurrent = true; } // Is the form already up? if(widgGetFromID(psWScreen,IDINTMAP_FORM) != NULL) { intRemoveIntelMapNoAnim(); Animate = false; } else { audio_StopAll(); } cdAudio_Pause(); //add message to indicate game is paused - single player mode if(PAUSE_DISPLAY_CONDITION) { if(widgGetFromID(psWScreen,IDINTMAP_PAUSELABEL) == NULL) { W_LABINIT sLabInit; sLabInit.id = IDINTMAP_PAUSELABEL; sLabInit.formID = 0; sLabInit.x = INTMAP_LABELX; sLabInit.y = INTMAP_LABELY+PAUSEMESSAGE_YOFFSET; sLabInit.width = INTMAP_LABELWIDTH; sLabInit.height = INTMAP_LABELHEIGHT; sLabInit.pText = _("PAUSED"); if (!widgAddLabel(psWScreen, &sLabInit)) { return false; } } } //set pause states before putting the interface up setIntelligencePauseState(); W_FORMINIT sFormInit; // Add the main Intelligence Map form sFormInit.formID = 0; sFormInit.id = IDINTMAP_FORM; sFormInit.style = WFORM_PLAIN; sFormInit.x = (SWORD)INTMAP_X; sFormInit.y = (SWORD)INTMAP_Y; sFormInit.width = INTMAP_WIDTH; sFormInit.height = INTMAP_HEIGHT; // If the window was closed then do open animation. if(Animate) { sFormInit.pDisplay = intOpenPlainForm; sFormInit.disableChildren = true; } else { // otherwise just recreate it. sFormInit.pDisplay = intDisplayPlainForm; } //sFormInit.pDisplay = intDisplayPlainForm; if (!widgAddForm(psWScreen, &sFormInit)) { return false; } if (!intAddMessageForm(playCurrent)) { return false; } if (bMultiPlayer && !MultiMenuUp && !playCurrent) { intAddMultiMenu(); } return true; }