Example #1
0
////
// 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();
	}
	
}
Example #2
0
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();
	}
}