From 7501b4936f3c93f53d0a7a85ced870bb8ce7e839 Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Sat, 27 Jul 2024 10:07:27 +0200 Subject: [PATCH] =?UTF-8?q?canviats=20els=20n=C3=BAvols=20per=20els=20del?= =?UTF-8?q?=20Volcano?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/gfx/game_buildings.png | Bin 7478 -> 12042 bytes data/gfx/game_clouds.png | Bin 935 -> 0 bytes data/gfx/game_clouds1.png | Bin 0 -> 2431 bytes data/gfx/game_clouds2.png | Bin 0 -> 5226 bytes source/background.cpp | 56 ++++++++++++++++++------------------ source/background.h | 7 +++-- source/director.cpp | 3 +- source/game.cpp | 10 ++++--- source/game_logo.cpp | 5 ++-- source/hiscore_table.cpp | 2 +- source/title.cpp | 23 +++++---------- source/title.h | 2 -- 12 files changed, 51 insertions(+), 57 deletions(-) delete mode 100644 data/gfx/game_clouds.png create mode 100644 data/gfx/game_clouds1.png create mode 100644 data/gfx/game_clouds2.png diff --git a/data/gfx/game_buildings.png b/data/gfx/game_buildings.png index 412e037541482f62d205df3a9c1b0f286698b31a..ec831e3c350af568567572c9202f5c199cda426a 100644 GIT binary patch literal 12042 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 literal 7478 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 A?f?J) diff --git a/data/gfx/game_clouds.png b/data/gfx/game_clouds.png deleted file mode 100644 index ecd5ba580e5cefbd8b72f19360ac569d3ea041ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 935 zcmV;Y16cftP)Px&VM#WI_s>g^M!7pbrv=*RRi6dSN4QUz(4g z6aWAKXu{Xo3-Br9I9}I&J`6+Y`@Wg=0Q^cn@Nb20NeH1msR#VC@tcSsv?at~-x{hl z%Xq!|J4F!M@zH_4N9aC92qC|>2lz5-d(Ffm5JAZ8<-uKZ*tQTs$m^wn-Aeo>A_zHs zpS=Jz=(?_4E|;dF4=va{t7&caw`4X5d6)riWHtzSY!2Ws3`Z04EeBxw>~;iDzn2H`bO_jW-F{0`0T)3akGBW%+PSc-Q8fF5Tn-t?^C)JDq1hkg za`<4*cHf`~^2lC~VS8ol`2XDI&yl~}ts=DG-JN{bb-PUzmcL67?>qEH=)Uj2GF>sw z^jUb{IF8roM>tau$8o%xko@l>dxl3>jHj?fK40hp2y@ZHcaK@&uaB;TdwZb1@4wEt zc(OLDTmEhFW3J}-O+@fV*cEUqmam5K-r?)=A7Slp`)6rahTyFc!N38$<(=~wt#53e zmo<8G0$5=H;YclnuN0?sCQW~Mm=nMD9C{xh5XbyHxcL1LK$_LcjBif({w07krN!uR zo4on41USwV21Bi@>L>tcrBZD)nShwbrb zda(ll00000000000000000000000000D#b%f3Ltej&Hx8VHgJQXn+beGidh+-B!W~ zv85lJXM}G_2qC8Lvlrk<5#l%5<5h^jzS7J}BE@bpe}T0bAjDJMpo|{6CEJ8?<=pX~`B)T_F|d+TDt-eGiD3;CrP$VXgd6*>R_fJ_|X z(WE2pEbxt=`q)@hE9&i0OTrkJjY1V_iQOY&7)$E!0#mPbJPxM0B#8=CNrx*bO7_zMQK;%bcvkJA7E002ov JPDHLkV1lO!v|RuI diff --git a/data/gfx/game_clouds1.png b/data/gfx/game_clouds1.png new file mode 100644 index 0000000000000000000000000000000000000000..77011137fa2cb8711f991bdfd362ea6424d9f675 GIT binary patch literal 2431 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 literal 0 HcmV?d00001 diff --git a/source/background.cpp b/source/background.cpp index 3b00cfe..367ec95 100644 --- a/source/background.cpp +++ b/source/background.cpp @@ -29,26 +29,31 @@ Background::Background(SDL_Renderer *renderer, Screen *screen, Asset *asset, par // Carga las texturas buildingsTexture = new Texture(renderer, asset->get("game_buildings.png")); - cloudsTexture = new Texture(renderer, asset->get("game_clouds.png")); + clouds1Texture = new Texture(renderer, asset->get("game_clouds1.png")); + clouds2Texture = new Texture(renderer, asset->get("game_clouds2.png")); grassTexture = new Texture(renderer, asset->get("game_grass.png")); gradientsTexture = new Texture(renderer, asset->get("game_sky_colors.png")); // Crea los sprites - const int cloudsHeight = base - 196; - clouds1A = new MovingSprite(0, cloudsHeight, rect.w, 52, -0.4f, 0.0f, 0.0f, 0.0f, cloudsTexture, renderer); - clouds1B = new MovingSprite(rect.w, cloudsHeight, rect.w, 52, -0.4f, 0.0f, 0.0f, 0.0f, cloudsTexture, renderer); - clouds2A = new MovingSprite(0, cloudsHeight + 57, rect.w, 32, -0.2f, 0.0f, 0.0f, 0.0f, cloudsTexture, renderer); - clouds2B = new MovingSprite(rect.w, cloudsHeight + 57, rect.w, 32, -0.2f, 0.0f, 0.0f, 0.0f, cloudsTexture, renderer); + const int clouds1y = base - 165; + const int clouds2y = base - 101; + const float clouds1speed = 0.1f; + const float clouds2speed = 0.05f; + clouds1A = new MovingSprite(0, clouds1y, rect.w, clouds1Texture->getHeight(), -clouds1speed, 0.0f, 0.0f, 0.0f, clouds1Texture, renderer); + clouds1B = new MovingSprite(rect.w, clouds1y, rect.w, clouds1Texture->getHeight(), -clouds1speed, 0.0f, 0.0f, 0.0f, clouds1Texture, renderer); - buildingsSprite = new Sprite(0, 0, rect.w, 135, buildingsTexture, renderer); + clouds2A = new MovingSprite(0, clouds2y, rect.w, clouds2Texture->getHeight(), -clouds2speed, 0.0f, 0.0f, 0.0f, clouds2Texture, renderer); + clouds2B = new MovingSprite(rect.w, clouds2y, rect.w, clouds2Texture->getHeight(), -clouds2speed, 0.0f, 0.0f, 0.0f, clouds2Texture, renderer); + + buildingsSprite = new Sprite(0, 0, buildingsTexture->getWidth(), buildingsTexture->getHeight(), buildingsTexture, renderer); gradientSprite = new Sprite(0, 0, rect.w, rect.h, gradientsTexture, renderer); - grassSprite = new Sprite(0, 0, 320, 10, grassTexture, renderer); + grassSprite = new Sprite(0, 0, grassTexture->getWidth(), grassTexture->getHeight() / 2, grassTexture, renderer); // Inicializa objetos - clouds1A->setSpriteClip(0, 0, cloudsTexture->getWidth(), 52); - clouds1B->setSpriteClip(0, 0, cloudsTexture->getWidth(), 52); - clouds2A->setSpriteClip(0, 52, cloudsTexture->getWidth(), 32); - clouds2B->setSpriteClip(0, 52, cloudsTexture->getWidth(), 32); + clouds1A->setSpriteClip(0, 0, clouds1Texture->getWidth(), clouds1Texture->getHeight()); + clouds1B->setSpriteClip(0, 0, clouds1Texture->getWidth(), clouds1Texture->getHeight()); + clouds2A->setSpriteClip(0, 0, clouds2Texture->getWidth(), clouds2Texture->getHeight()); + clouds2B->setSpriteClip(0, 0, clouds2Texture->getWidth(), clouds2Texture->getHeight()); buildingsSprite->setPosY(base - buildingsSprite->getHeight()); grassSprite->setPosY(base - grassSprite->getHeight()); @@ -57,25 +62,19 @@ Background::Background(SDL_Renderer *renderer, Screen *screen, Asset *asset, par SDL_SetTextureBlendMode(canvas, SDL_BLENDMODE_BLEND); // Crea la textura para atenuar el fondo - colorText = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, rect.w, rect.h); - SDL_SetTextureBlendMode(colorText, SDL_BLENDMODE_BLEND); + colorTexture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, rect.w, rect.h); + SDL_SetTextureBlendMode(colorTexture, SDL_BLENDMODE_BLEND); setColor(color); - SDL_SetTextureAlphaMod(colorText, alphaColorText); + SDL_SetTextureAlphaMod(colorTexture, alphaColorText); } // Destructor Background::~Background() { - buildingsTexture->unload(); delete buildingsTexture; - - cloudsTexture->unload(); - delete cloudsTexture; - - grassTexture->unload(); + delete clouds1Texture; + delete clouds2Texture; delete grassTexture; - - gradientsTexture->unload(); delete gradientsTexture; delete clouds1A; @@ -86,7 +85,7 @@ Background::~Background() delete gradientSprite; delete grassSprite; SDL_DestroyTexture(canvas); - SDL_DestroyTexture(colorText); + SDL_DestroyTexture(colorTexture); } // Actualiza la lógica del objeto @@ -150,14 +149,15 @@ void Background::render() SDL_RenderCopy(renderer, canvas, &srcRect, &dstRect); // Atenuación - SDL_RenderCopy(renderer, colorText, &srcRect, &dstRect); + SDL_RenderCopy(renderer, colorTexture, &srcRect, &dstRect); } // Vuelve a cargar las texturas void Background::reloadTextures() { buildingsTexture->reLoad(); - cloudsTexture->reLoad(); + clouds1Texture->reLoad(); + clouds2Texture->reLoad(); grassTexture->reLoad(); gradientsTexture->reLoad(); } @@ -209,7 +209,7 @@ void Background::setColor(color_t color) // Colorea la textura SDL_Texture *temp = SDL_GetRenderTarget(renderer); - SDL_SetRenderTarget(renderer, colorText); + SDL_SetRenderTarget(renderer, colorTexture); SDL_SetRenderDrawColor(renderer, color.r, color.g, color.b, 255); SDL_RenderClear(renderer); @@ -237,7 +237,7 @@ void Background::updateAlphaColorText() else { alphaColorText > alphaColorTextTemp ? alphaColorTextTemp++ : alphaColorTextTemp--; - SDL_SetTextureAlphaMod(colorText, alphaColorTextTemp); + SDL_SetTextureAlphaMod(colorTexture, alphaColorTextTemp); } } diff --git a/source/background.h b/source/background.h index 1db67b5..b14bf76 100644 --- a/source/background.h +++ b/source/background.h @@ -15,7 +15,8 @@ private: Asset *asset; // Objeto que gestiona todos los ficheros de recursos Texture *buildingsTexture; // Textura con los edificios de fondo - Texture *cloudsTexture; // Textura con las nubes de fondo + Texture *clouds1Texture; // Textura con las nubes de fondo + Texture *clouds2Texture; // Textura con las nubes de fondo Texture *grassTexture; // Textura con la hierba del suelo Texture *gradientsTexture; // Textura con los diferentes colores de fondo del juego @@ -28,8 +29,8 @@ private: Sprite *gradientSprite; // Sprite con los graficos del degradado de color de fondo Sprite *grassSprite; // Sprite para la hierba - SDL_Texture *canvas; // Textura para componer el fondo - SDL_Texture *colorText; // Textura para atenuar el fondo + SDL_Texture *canvas; // Textura para componer el fondo + SDL_Texture *colorTexture; // Textura para atenuar el fondo param_t *param; // Puntero con todos los parametros del programa diff --git a/source/director.cpp b/source/director.cpp index 739776b..0773d05 100644 --- a/source/director.cpp +++ b/source/director.cpp @@ -331,7 +331,8 @@ bool Director::setFileList() asset->add(prefix + "/data/gfx/bullet.png", t_bitmap); asset->add(prefix + "/data/gfx/game_buildings.png", t_bitmap); - asset->add(prefix + "/data/gfx/game_clouds.png", t_bitmap); + asset->add(prefix + "/data/gfx/game_clouds1.png", t_bitmap); + asset->add(prefix + "/data/gfx/game_clouds2.png", t_bitmap); asset->add(prefix + "/data/gfx/game_grass.png", t_bitmap); asset->add(prefix + "/data/gfx/game_power_meter.png", t_bitmap); asset->add(prefix + "/data/gfx/game_sky_colors.png", t_bitmap); diff --git a/source/game.cpp b/source/game.cpp index 017c14c..e6889a0 100644 --- a/source/game.cpp +++ b/source/game.cpp @@ -2697,10 +2697,12 @@ void Game::updateBackground() } // Calcula la velocidad en función de los globos explotados y el total de globos a explotar para acabar el juego - const float speed = (-0.2f) + (-3.00f * ((float)balloonsPopped / (float)totalPowerToCompleteGame)); + const float cloudsInitialSpeed = 0.05f; + const float cloudsFinalSpeed = 2.00f - cloudsInitialSpeed; + const float cloudsSpeed = (-cloudsInitialSpeed) + (-cloudsFinalSpeed * ((float)balloonsPopped / (float)totalPowerToCompleteGame)); + background->setCloudsSpeed(cloudsSpeed); - // Aplica la velocidad calculada para las nubes - background->setCloudsSpeed(speed); + // Calcula la transición de los diferentes fondos const float gradientNumber = std::min(((float)balloonsPopped / 1250.0f), 3.0f); const float percent = gradientNumber - (int)gradientNumber; background->setGradientNumber((int)gradientNumber); @@ -2710,7 +2712,7 @@ void Game::updateBackground() background->update(); } -// Dibuja la linea que separa la zona ade juego del marcador +// Dibuja la linea que separa la zona de juego del marcador void Game::renderSeparator() { // Dibuja la linea que separa el marcador de la zona de juego diff --git a/source/game_logo.cpp b/source/game_logo.cpp index 4966351..3244b96 100644 --- a/source/game_logo.cpp +++ b/source/game_logo.cpp @@ -52,10 +52,11 @@ void GameLogo::init() { const int xp = x - coffeeBitmap->getWidth() / 2; const int desp = getInitialVerticalDesp(); + // Variables status = disabled; shake.desp = 1; - shake.delay = 3; + shake.delay = 2; shake.lenght = 8; shake.remaining = shake.lenght; shake.counter = shake.delay; @@ -138,7 +139,7 @@ void GameLogo::update() status = shaking; // Pantallazo blanco - screen->flash(flashColor, 5); + //screen->flash(flashColor, 10); // Reproduce el efecto sonoro JA_PlaySound(crashSound); diff --git a/source/hiscore_table.cpp b/source/hiscore_table.cpp index d554976..9526d70 100644 --- a/source/hiscore_table.cpp +++ b/source/hiscore_table.cpp @@ -36,7 +36,7 @@ HiScoreTable::HiScoreTable(SDL_Renderer *renderer, Screen *screen, Asset *asset, // Inicializa objetos background->setSrcDest(windowArea); background->setDstDest(windowArea); - background->setCloudsSpeed(-0.5f); + background->setCloudsSpeed(-0.1f); background->setGradientNumber(1); background->setTransition(0.8f); fade->setColor(fadeColor.r, fadeColor.g, fadeColor.b); diff --git a/source/title.cpp b/source/title.cpp index d5e7342..ab58b06 100644 --- a/source/title.cpp +++ b/source/title.cpp @@ -26,13 +26,6 @@ Title::Title(SDL_Renderer *renderer, Screen *screen, Input *input, Asset *asset, miniLogoTexture = new Texture(renderer, asset->get("logo_jailgames_mini.png")); miniLogoSprite = new Sprite(GAMECANVAS_CENTER_X - miniLogoTexture->getWidth() / 2, 0, miniLogoTexture->getWidth(), miniLogoTexture->getHeight(), miniLogoTexture, renderer); - background = new Background(renderer, screen, asset, param); - background->setSrcDest(windowArea); - background->setDstDest(windowArea); - background->setCloudsSpeed(-0.5f); - background->setGradientNumber(1); - background->setTransition(0.8f); - tiledbg = new Tiledbg(renderer, screen, asset, {0, 0, param->gameWidth, param->gameHeight}, TILED_MODE_RANDOM); gameLogo = new GameLogo(renderer, screen, asset, param, GAMECANVAS_CENTER_X, param->titleCC); @@ -54,11 +47,9 @@ Title::~Title() delete text1; delete text2; - miniLogoTexture->unload(); delete miniLogoTexture; delete miniLogoSprite; - delete background; delete tiledbg; delete gameLogo; delete defineButtons; @@ -90,9 +81,6 @@ void Title::update() // Actualiza el contador de ticks ticks = SDL_GetTicks(); - // Actualiza el objeto 'background' - background->update(); - // Actualiza el objeto 'defineButtons' defineButtons->update(); @@ -174,7 +162,6 @@ void Title::render() // Dibuja el mosacico de fondo tiledbg->render(); - // background->render(); // Dibuja el logo con el título del juego gameLogo->render(); @@ -198,6 +185,7 @@ void Title::render() text1->writeDX(TXT_CENTER | TXT_SHADOW, GAMECANVAS_CENTER_X, pos2, TEXT_COPYRIGHT, 1, noColor, 1, shadow); } + // Define Buttons defineButtons->render(); // Fade @@ -253,12 +241,15 @@ void Title::checkInput() const int index = input->checkAnyButtonPressed(); if (index) { - fade->activate(); - postFade = index; + if (section->subsection == SUBSECTION_TITLE_2) + {// No se puede empezar a jugar durante la animación del titulo + fade->activate(); + postFade = index; + } } // Comprueba el teclado para salir - if (input->checkInput(input_exit, DO_NOT_ALLOW_REPEAT, INPUT_USE_KEYBOARD)) + if (input->checkInput(input_exit, DO_NOT_ALLOW_REPEAT, INPUT_USE_KEYBOARD)) { section->name = SECTION_PROG_QUIT; } diff --git a/source/title.h b/source/title.h index c1b0cbb..58f9b25 100644 --- a/source/title.h +++ b/source/title.h @@ -17,7 +17,6 @@ #include "instructions.h" #include "item.h" #include "lang.h" -#include "background.h" #include "tiledbg.h" #include "game_logo.h" #include "define_buttons.h" @@ -37,7 +36,6 @@ private: Lang *lang; // Objeto para gestionar los textos en diferentes idiomas SDL_Event *eventHandler; // Manejador de eventos section_t *section; // Indicador para el bucle del titulo - Background *background; // Objeto para dibujar el fondo del juego Tiledbg *tiledbg; // Objeto para dibujar el mosaico animado de fondo GameLogo *gameLogo; // Objeto para dibujar el logo con el título del juego Texture *miniLogoTexture; // Textura con el logo de JailGames mini