|
|
|
|
@@ -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);
|
|
|
|
|
|