//// // Process Routine //// void CPlayGameVorticon::ponder(const float deltaT) { if( !mpFinale && !gMenuController.active() ) // Game is not paused, no messages have to be shown and no menu is open { if(mMessageBoxes.empty() && !StatusScreenOpen()) { // Perform AIs mpObjectAI->process(); if( !g_pBehaviorEngine->paused() ) { // The following functions must be worldmap dependent if( m_Level == WORLD_MAP_LEVEL_VORTICON ) { processOnWorldMap(); // TODO: I think the main loop of that should be here! } else { processInLevel(); // TODO: I think the main loop of that should be here! } if(m_Player.size() > (unsigned int)mCamLead ) { if(m_Player[mCamLead].pdie) { const int numPlayers = g_pBehaviorEngine->mPlayers; for( int i=0 ; i<numPlayers ; i++ ) { if(m_Player[i].pdie) cycleCamLead(); } } else { for(auto &player : m_Player) { // Process Players' Cameras player.processCamera(); } } } } for(auto &player : m_Player) { // Process Players' Events player.processEvents(); } } } if(mpFinale) // Finale processing if it is opened { mpFinale->ponder(); if( mpFinale->getHasFinished() ) { mpFinale.release(); if(!m_gameover) { CHighScores *pHighScores = new CHighScores(); pHighScores->init(); collectHighScoreInfo(*pHighScores); gEventManager.add(new GMSwitchToPassiveMode(/*m_Gamepath, m_Episode*/)); gEventManager.add(new StartInfoSceneEvent( pHighScores )); } } } // Render the dialogs which are seen when the game is paused if( !mMessageBoxes.empty() ) { // Finally draw Dialogs like status screen, game paused, etc. processPauseDialogs(); } // Check if we are in gameover mode. If yes, than show the bitmaps and block the FKeys(). // Only confirmation button is allowed if(m_gameover && !mpFinale) // game over mode { if( mpGameoverBmp ) { if( gInput.getPressedAnyCommand() ) { CHighScores *pHighScores = new CHighScores(); pHighScores->init(); collectHighScoreInfo(*pHighScores); gEventManager.add(new GMSwitchToPassiveMode(/*m_Gamepath, m_Episode*/)); gEventManager.add(new StartInfoSceneEvent( pHighScores )); } } else // Bitmap must first be created { GsBitmap *pBitmap = gGraphics.getBitmapFromStr("GAMEOVER"); g_pSound->playSound(SOUND_GAME_OVER, PLAY_NOW); mpGameoverBmp.reset( new CEGABitmap( mMap.get() , gVideoDriver.getBlitSurface(), pBitmap) ); GsRect<Uint16> gameRes = gVideoDriver.getGameResolution(); mpGameoverBmp->setScrPos( (gameRes.w/2) -(pBitmap->getWidth()/2), (gameRes.h/2) -(pBitmap->getHeight()/2) ); } } else // No game over { // Handle special functional keys for paused game, F1 Help, god mode, all items, etc. handleFKeys(); } }
void CPlayGameVorticon::handleFKeys() { int i; // CTSpace Cheat if (gInput.getHoldedKey(KC) && gInput.getHoldedKey(KT) && gInput.getHoldedKey(KSPACE)) { gInput.flushAll(); const int numPlayers = g_pBehaviorEngine->mPlayers; for(i=0;i<numPlayers;i++) { m_Player[i].pfiring = false; if (m_Player[i].m_playingmode) { CPhysicsSettings &Phy = g_pBehaviorEngine->getPhysicsSettings(); if(Phy.misc.ctspace_keys) { m_Player[i].give_keycard(DOOR_YELLOW); m_Player[i].give_keycard(DOOR_RED); m_Player[i].give_keycard(DOOR_GREEN); m_Player[i].give_keycard(DOOR_BLUE); } else { m_Player[i].take_keycard(DOOR_YELLOW); m_Player[i].take_keycard(DOOR_RED); m_Player[i].take_keycard(DOOR_GREEN); m_Player[i].take_keycard(DOOR_BLUE); } m_Player[i].inventory.charges = Phy.misc.ctspace_ammo; m_Player[i].inventory.HasPogo = true; m_Player[i].inventory.lives += 5; std::string Text = g_pBehaviorEngine->getString("CTSPACECHEAT"); std::unique_ptr<CMessageBoxVort> msg(new CMessageBoxVort(Text)); mMessageBoxes.push_back( move(msg) ); } } } // Cycle Cam Code if( gInput.getPressedCommand(mCamLead, IC_CAMLEAD) ) { cycleCamLead(); } // GOD cheat -- toggle god mode if ( gInput.getHoldedKey(KG) && gInput.getHoldedKey(KO) && gInput.getHoldedKey(KD) ) { std::vector<CPlayer>::iterator it_player = m_Player.begin(); for( ; it_player != m_Player.end() ; it_player++) { it_player->godmode ^= 1; // If player on map, make disable the solid property of the players if(m_Level == 80) it_player->solid = !it_player->godmode; it_player->performCollisions(); } g_pSound->playSound(SOUND_GUN_CLICK, PLAY_FORCE); // Show a message like in the original game std::unique_ptr<CMessageBoxVort> msg(new CMessageBoxVort(m_Player[0].godmode ? g_pBehaviorEngine->getString("GODMODEON") : g_pBehaviorEngine->getString("GODMODEOFF"))); mMessageBoxes.push_back(move(msg)); gInput.flushKeys(); } if(gInput.getPressedKey(KP) && mMessageBoxes.empty()) { g_pSound->playSound(SOUND_GUN_CLICK, PLAY_FORCE); std::unique_ptr<CMessageBoxVort> msg( new CMessageBoxVort("Game Paused") ); mMessageBoxes.push_back(move(msg)); } if(m_Player.empty()) return; // Menus will only open if Keen is solid or in god mode. This means neither dying nor teleporting if( m_Player[0].solid || ( m_Player[0].godmode && !m_Player[0].dying ) ) { // F2 - Sound Menu if ( gInput.getPressedKey(KF2) ) { //mp_Menu = new CMenuVorticon( ACTIVE, m_Map, // m_SavedGame, m_restartVideo, m_hideobjects ); //mp_Menu->init(AUDIO); } // F3 - Controls Menu else if ( gInput.getPressedKey(KF3) ) { //mp_Menu = new CMenuVorticon( ACTIVE, m_Map, // m_SavedGame, m_restartVideo, m_hideobjects ); //mp_Menu->init(CONTROLS); } // F5 - save game else if ( gInput.getPressedKey(KF5) ) { //mp_Menu = new CMenuVorticon( ACTIVE, m_Map, // m_SavedGame, m_restartVideo, m_hideobjects ); //mp_Menu->init(SAVE); } } }
//// // Process Routine //// void CPlayGameVorticon::process() { // Check for fading processes if necessary if(g_pGfxEngine->Palette.in_progress()) g_pGfxEngine->Palette.applyFade(); if( !mpFinale && !gpMenuController->active() ) // Game is not paused, no messages have to be shown and no menu is open { if(mMessageBoxes.empty() && !StatusScreenOpen()) { // Perform AIs mpObjectAI->process(); if( !g_pBehaviorEngine->paused() ) { /// The following functions must be worldmap dependent if( m_Level == WORLD_MAP_LEVEL_VORTICON ) { processOnWorldMap(); } else { processInLevel(); } if(m_Player[mCamLead].pdie) { for( int i=0 ; i<m_NumPlayers ; i++ ) { if(m_Player[i].pdie) cycleCamLead(); } } else { // Process Players' Cameras m_Player[mCamLead].processCamera(); } } } } // Draw all the Stuff here! drawAllElements(); if( m_Level == WORLD_MAP_LEVEL_VORTICON && m_showKeensLeft ) showKeensLeft(); // Check if we are in gameover mode. If yes, than show the bitmaps and block the FKeys(). // Only confirmation button is allowes if(m_gameover && !mpFinale) // game over mode { if( mpGameoverBmp ) { mpGameoverBmp->process(); if( g_pInput->getPressedAnyCommand() ) { CHighScores *pHighScores = new CHighScores(); pHighScores->init(); collectHighScoreInfo(*pHighScores); g_pBehaviorEngine->EventList().add(new GMSwitchToPassiveMode(m_Gamepath, m_Episode)); g_pBehaviorEngine->EventList().add(new StartInfoSceneEvent( pHighScores )); } } else // Bitmap must first be created { CBitmap *pBitmap = g_pGfxEngine->getBitmap("GAMEOVER"); g_pSound->playSound(SOUND_GAME_OVER, PLAY_NOW); mpGameoverBmp.reset( new CEGABitmap( mMap.get() , g_pVideoDriver->getBlitSurface(), pBitmap) ); mpGameoverBmp->setScrPos( 160-(pBitmap->getWidth()/2), 100-(pBitmap->getHeight()/2) ); } } else // No game over { // Handle special functional keys for paused game, F1 Help, god mode, all items, etc. handleFKeys(); } auto &eventContainer = g_pBehaviorEngine->EventList(); if( eventContainer.occurredEvent<EventEndGamePlay>() ) { m_endgame = true; eventContainer.pop_Event(); } }