diff --git a/source/director.cpp b/source/director.cpp index 482e957..52897dd 100644 --- a/source/director.cpp +++ b/source/director.cpp @@ -488,9 +488,9 @@ void Director::runTitle() void Director::runGame() { if (mSection.subsection == GAME_SECTION_PLAY_1P) - mGame = new Game(1, mRenderer, mScreen, mFileList, mLang, mInput, false, mOptions); + mGame = new Game(1, 0, mRenderer, mScreen, mFileList, mLang, mInput, false, mOptions); if (mSection.subsection == GAME_SECTION_PLAY_2P) - mGame = new Game(2, mRenderer, mScreen, mFileList, mLang, mInput, false, mOptions); + mGame = new Game(2, 0, mRenderer, mScreen, mFileList, mLang, mInput, false, mOptions); setSection(mGame->run()); delete mGame; } diff --git a/source/game.cpp b/source/game.cpp index d3a5c2f..b608c5a 100644 --- a/source/game.cpp +++ b/source/game.cpp @@ -1,7 +1,7 @@ #include "game.h" // Constructor -Game::Game(int numPlayers, SDL_Renderer *renderer, Screen *screen, std::string *filelist, Lang *lang, Input *input, bool demo, options_t *options) +Game::Game(int numPlayers, int currentStage, SDL_Renderer *renderer, Screen *screen, std::string *filelist, Lang *lang, Input *input, bool demo, options_t *options) { // Copia los punteros mRenderer = renderer; @@ -15,6 +15,8 @@ Game::Game(int numPlayers, SDL_Renderer *renderer, Screen *screen, std::string * // Pasa variables mDemo.enabled = demo; mNumPlayers = numPlayers; + mCurrentStage = currentStage; + mLastStageReached = currentStage; if (mNumPlayers == 1) { mOptions->input[0].deviceType = INPUT_USE_ANY; @@ -338,7 +340,7 @@ void Game::init() mMenaceCurrent = 0; mMenaceThreshold = 0; mHiScoreAchieved = false; - mCurrentStage = 0; + // mCurrentStage = 0; mStageBitmapCounter = STAGE_COUNTER; mDeathCounter = DEATH_COUNTER; mTimeStopped = false; @@ -365,7 +367,7 @@ void Game::init() mPowerBallCounter = 0; mCoffeeMachineEnabled = false; mPostFade = 0; - mLastStageReached = 0; + // mLastStageReached = 0; if (mDemo.enabled) { @@ -452,7 +454,7 @@ void Game::init() { mPlayer[0]->init(PLAY_AREA_CENTER_X - 11, PLAY_AREA_BOTTOM - 24, mTexturePlayer1Legs, mTexturePlayer1Body, mTexturePlayer1Head, mTexturePlayer1Death, mRenderer); } - + else if (mNumPlayers == 2) { mPlayer[0]->init((PLAY_AREA_CENTER_FIRST_QUARTER_X * ((0 * 2) + 1)) - 11, PLAY_AREA_BOTTOM - 24, mTexturePlayer1Legs, mTexturePlayer1Body, mTexturePlayer1Head, mTexturePlayer1Death, mRenderer); @@ -1687,8 +1689,9 @@ void Game::updateStage() { // Cambio de fase mCurrentStage++; - if (mCurrentStage == 10) // Ha llegado al final el juego - { + mLastStageReached = mCurrentStage; + if (mCurrentStage == 10) + { // Ha llegado al final el juego mGameCompleted = true; // Marca el juego como completado mCurrentStage = 9; // Deja el valor dentro de los limites mStage[mCurrentStage].currentPower = 0; // Deja el poder a cero para que no vuelva a entrar en esta condición @@ -1696,8 +1699,12 @@ void Game::updateStage() mStage[mCurrentStage].currentPower = 0; // Vuelve a dejar el poder a cero, por lo que hubiera podido subir al destruir todos lo globos mMenaceCurrent = 255; // Sube el nivel de amenaza para que no cree mas globos for (int i = 0; i < mNumPlayers; i++) // Añade un millon de puntos a los jugadores que queden vivos + { if (mPlayer[i]->isAlive()) + { mPlayer[i]->addScore(1000000); + } + } updateHiScore(); JA_StopMusic(); } @@ -1711,12 +1718,18 @@ void Game::updateStage() // Incrementa el contador del bitmap que aparece mostrando el cambio de fase if (mStageBitmapCounter < STAGE_COUNTER) + { mStageBitmapCounter++; + } // Si el juego se ha completado, el bitmap se detiene en el centro de la pantalla if (mGameCompleted) + { if (mStageBitmapCounter > 100) + { mStageBitmapCounter = 100; + } + } } // Actualiza el estado de muerte @@ -1732,13 +1745,21 @@ void Game::updateDeath() { // Animación if ((mPlayer[i]->getDeathCounter() / 5) % 4 == 0) + { mSmartSprite[mPlayer[i]->mDeathIndex]->setSpriteClip(24 * 0, 24, 24, 24); + } else if ((mPlayer[i]->getDeathCounter() / 5) % 4 == 1) + { mSmartSprite[mPlayer[i]->mDeathIndex]->setSpriteClip(24 * 1, 24, 24, 24); + } else if ((mPlayer[i]->getDeathCounter() / 5) % 4 == 2) + { mSmartSprite[mPlayer[i]->mDeathIndex]->setSpriteClip(24 * 2, 24, 24, 24); + } else if ((mPlayer[i]->getDeathCounter() / 5) % 4 == 3) + { mSmartSprite[mPlayer[i]->mDeathIndex]->setSpriteClip(24 * 3, 24, 24, 24); + } // Rebote en los laterales if (mSmartSprite[mPlayer[i]->mDeathIndex]->getVelX() > 0) @@ -3522,12 +3543,12 @@ void Game::initPaths() { mStageBitmapPath[i] = (mSin[(int)((i * 1.8f) + 90)] * (distance) + centerPoint); } - + else if (i < secondPart) { mStageBitmapPath[i] = (int)centerPoint; } - + else { mStageBitmapPath[i] = (mSin[(int)(((i - 149) * 1.8f) + 90)] * (centerPoint + 17) - 17); diff --git a/source/game.h b/source/game.h index 69eded3..42d4667 100644 --- a/source/game.h +++ b/source/game.h @@ -518,7 +518,7 @@ private: public: // Constructor - Game(int numPlayers, SDL_Renderer *renderer, Screen *screen, std::string *filelist, Lang *lang, Input *input, bool demo, options_t *options); + Game(int numPlayers, int currentStage, SDL_Renderer *renderer, Screen *screen, std::string *filelist, Lang *lang, Input *input, bool demo, options_t *options); // Destructor ~Game(); diff --git a/source/title.cpp b/source/title.cpp index 27ff84a..ed370e9 100644 --- a/source/title.cpp +++ b/source/title.cpp @@ -924,7 +924,7 @@ void Title::runInstructions(Uint8 mode) // Ejecuta el juego en modo demo void Title::runDemoGame() { - mDemoGame = new Game(1, mRenderer, mScreen, mFileList, mLang, mInput, true, mOptions); + mDemoGame = new Game(1, 0, mRenderer, mScreen, mFileList, mLang, mInput, true, mOptions); mDemoGame->run(); delete mDemoGame; }