Compare commits
12 Commits
742ca02573
...
v2.1a
| Author | SHA1 | Date | |
|---|---|---|---|
| 3d52c45f5c | |||
| 3276027044 | |||
| 8041595976 | |||
| fa53c1b01a | |||
| 20b362160e | |||
| 5cabbfc487 | |||
| 9f5e001c70 | |||
| 112c3afc76 | |||
| f4215384fe | |||
| 7796cee51a | |||
| f83154c062 | |||
| 9e73f7f97d |
6
.gitignore
vendored
6
.gitignore
vendored
@@ -1,6 +1,6 @@
|
||||
.vscode
|
||||
*.DS_Store
|
||||
bin
|
||||
data/config.txt
|
||||
data/config.bin
|
||||
data/score.bin
|
||||
data/config/config.txt
|
||||
data/config/config.bin
|
||||
data/config/score.bin
|
||||
5
Makefile
5
Makefile
@@ -3,10 +3,11 @@ executable = coffee_crisis
|
||||
windows:
|
||||
@echo off
|
||||
if not exist bin\ (mkdir bin)
|
||||
g++ -std=c++11 -Wall -O2 source/*.cpp -lmingw32 -lSDL2main -lSDL2 -o bin/$(executable).exe
|
||||
g++ -std=c++11 -Wall -O2 source/*.cpp -lmingw32 -lSDL2main -lSDL2 -ffunction-sections -fdata-sections -Wl,--gc-sections -static-libstdc++ -o bin/$(executable).exe
|
||||
strip -s -R .comment -R .gnu.version bin/$(executable).exe --strip-unneeded
|
||||
macos:
|
||||
mkdir -p bin
|
||||
g++ source/*.cpp -std=c++11 -Wall -O2 -lSDL2 -o bin/$(executable)_macos
|
||||
g++ source/*.cpp -std=c++11 -Wall -O2 -lSDL2 -ffunction-sections -fdata-sections -o bin/$(executable)_macos
|
||||
linux:
|
||||
mkdir -p bin
|
||||
g++ source/*.cpp -std=c++11 -Wall -Os -lSDL2 -ffunction-sections -fdata-sections -Wl,--gc-sections -o bin/$(executable)_linux
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.4 KiB |
@@ -115,14 +115,14 @@ D E M O
|
||||
## 38 - TEXTOS DEL JUEGO
|
||||
fases mes!
|
||||
|
||||
## 39 -
|
||||
-
|
||||
## 39 - MENU SELECCION DE JUGADOR
|
||||
Selecciona personatge
|
||||
|
||||
## 40 -
|
||||
-
|
||||
## 40 - MENU SELECCION DE JUGADOR
|
||||
Enrere
|
||||
|
||||
## 41 -
|
||||
-
|
||||
## 41 - MENU DE PAUSA
|
||||
Menu de pausa
|
||||
|
||||
## 42 -
|
||||
-
|
||||
|
||||
@@ -115,14 +115,14 @@ D E M O
|
||||
## 38 - TEXTOS DEL JUEGO
|
||||
stages left!
|
||||
|
||||
## 39 -
|
||||
-
|
||||
## 39 - MENU SELECCION DE JUGADOR
|
||||
Select Player
|
||||
|
||||
## 40 -
|
||||
-
|
||||
## 40 - MENU SELECCION DE JUGADOR
|
||||
Back
|
||||
|
||||
## 41 -
|
||||
-
|
||||
## 41 - MENU DE PAUSA
|
||||
Pause Menu
|
||||
|
||||
## 42 -
|
||||
-
|
||||
|
||||
@@ -115,14 +115,14 @@ D E M O
|
||||
## 38 - TEXTOS DEL JUEGO
|
||||
fases mas!
|
||||
|
||||
## 39 -
|
||||
-
|
||||
## 39 - MENU SELECCION DE JUGADOR
|
||||
Selecciona jugador
|
||||
|
||||
## 40 -
|
||||
-
|
||||
## 40 - MENU SELECCION DE JUGADOR
|
||||
Volver
|
||||
|
||||
## 41 -
|
||||
-
|
||||
## 41 - MENU DE PAUSA
|
||||
Menu de pausa
|
||||
|
||||
## 42 -
|
||||
-
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
font_png=smb2.png
|
||||
font_txt=smb2.txt
|
||||
|
||||
sound_cancel=menu_cancel.wav
|
||||
sound_accept=menu_select.wav
|
||||
sound_move=menu_move.wav
|
||||
sound_accept=menu_select.wav
|
||||
|
||||
name=GAME OVER
|
||||
x=0
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
font_png=smb2.png
|
||||
font_txt=smb2.txt
|
||||
|
||||
sound_cancel=menu_cancel.wav
|
||||
sound_accept=menu_select.wav
|
||||
sound_move=menu_move.wav
|
||||
sound_accept=menu_select.wav
|
||||
|
||||
name=OPTIONS
|
||||
x=0
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
font_png=smb2.png
|
||||
font_txt=smb2.txt
|
||||
|
||||
sound_cancel=menu_cancel.wav
|
||||
sound_accept=menu_select.wav
|
||||
sound_move=menu_move.wav
|
||||
sound_accept=menu_select.wav
|
||||
|
||||
name=PAUSE
|
||||
x=0
|
||||
y=96
|
||||
y=80
|
||||
backgroundType=1
|
||||
backgroundColor=41,57,65,240
|
||||
|
||||
@@ -18,7 +17,13 @@ centerX=128
|
||||
selector_color=255,122,0,255
|
||||
selector_text_color=255,255,255
|
||||
|
||||
defaultActionWhenCancel=0
|
||||
defaultActionWhenCancel=1
|
||||
|
||||
[item]
|
||||
text=PAUSE MENU
|
||||
hPaddingDown=7
|
||||
selectable=false
|
||||
[/item]
|
||||
|
||||
[item]
|
||||
text=CONTINUE
|
||||
|
||||
40
data/menu/player_select.men
Normal file
40
data/menu/player_select.men
Normal file
@@ -0,0 +1,40 @@
|
||||
font_png=smb2.png
|
||||
font_txt=smb2.txt
|
||||
|
||||
sound_move=menu_move.wav
|
||||
sound_accept=menu_select.wav
|
||||
|
||||
name=PLAYER_SELECT
|
||||
x=0
|
||||
y=116
|
||||
backgroundType=0
|
||||
backgroundColor=48,48,64,192
|
||||
|
||||
areElementsCenteredOnX=true
|
||||
isCenteredOnX=true
|
||||
centerX=128
|
||||
|
||||
selector_color=229,28,35,0
|
||||
selector_text_color=255,180,0
|
||||
|
||||
defaultActionWhenCancel=3
|
||||
|
||||
[item]
|
||||
text=SELECT PLAYER
|
||||
hPaddingDown=7
|
||||
selectable=false
|
||||
[/item]
|
||||
|
||||
[item]
|
||||
text=BAL1
|
||||
hPaddingDown=2
|
||||
[/item]
|
||||
|
||||
[item]
|
||||
text=AROUNDER
|
||||
hPaddingDown=7
|
||||
[/item]
|
||||
|
||||
[item]
|
||||
text=BACK
|
||||
[/item]
|
||||
@@ -1,9 +1,8 @@
|
||||
font_png=smb2.png
|
||||
font_txt=smb2.txt
|
||||
|
||||
sound_cancel=menu_cancel.wav
|
||||
sound_accept=menu_select.wav
|
||||
sound_move=menu_move.wav
|
||||
sound_accept=menu_select.wav
|
||||
|
||||
name=TITLE
|
||||
x=0
|
||||
|
||||
Binary file not shown.
@@ -8,11 +8,7 @@
|
||||
Director::Director(std::string path)
|
||||
{
|
||||
// Inicializa variables
|
||||
section.name = PROG_SECTION_GAME;
|
||||
section.subsection = GAME_SECTION_PLAY_1P;
|
||||
|
||||
section.name = PROG_SECTION_TITLE;
|
||||
section.subsection = TITLE_SECTION_1;
|
||||
section.name = PROG_SECTION_LOGO;
|
||||
|
||||
// Crea el objeto que controla los ficheros de recursos
|
||||
asset = new Asset(path.substr(0, path.find_last_of("\\/")) + "/../");
|
||||
@@ -186,7 +182,6 @@ bool Director::setFileList()
|
||||
asset->add("data/sound/hiscore.wav", t_sound);
|
||||
asset->add("data/sound/itemdrop.wav", t_sound);
|
||||
asset->add("data/sound/itempickup.wav", t_sound);
|
||||
asset->add("data/sound/menu_cancel.wav", t_sound);
|
||||
asset->add("data/sound/menu_move.wav", t_sound);
|
||||
asset->add("data/sound/menu_select.wav", t_sound);
|
||||
asset->add("data/sound/player_collision.wav", t_sound);
|
||||
@@ -280,6 +275,7 @@ bool Director::setFileList()
|
||||
asset->add("data/menu/options.men", t_data);
|
||||
asset->add("data/menu/pause.men", t_data);
|
||||
asset->add("data/menu/gameover.men", t_data);
|
||||
asset->add("data/menu/player_select.men", t_data);
|
||||
|
||||
return asset->check();
|
||||
}
|
||||
@@ -305,6 +301,7 @@ bool Director::loadConfigFile()
|
||||
options->windowSize = 3;
|
||||
options->language = ba_BA;
|
||||
options->difficulty = DIFFICULTY_NORMAL;
|
||||
options->playerSelected = 0;
|
||||
options->filter = FILTER_NEAREST;
|
||||
options->vSync = true;
|
||||
options->screenWidth = GAME_WIDTH;
|
||||
|
||||
212
source/game.cpp
212
source/game.cpp
@@ -199,14 +199,14 @@ void Game::init()
|
||||
// Crea los jugadores
|
||||
if (numPlayers == 1)
|
||||
{
|
||||
Player *player = new Player(PLAY_AREA_CENTER_X - 11, PLAY_AREA_BOTTOM - 24, renderer, player1Textures, playerAnimations);
|
||||
Player *player = new Player(PLAY_AREA_CENTER_X - 11, PLAY_AREA_BOTTOM - 24, renderer, playerTextures.at(options->playerSelected), playerAnimations);
|
||||
players.push_back(player);
|
||||
}
|
||||
|
||||
else if (numPlayers == 2)
|
||||
{
|
||||
Player *player1 = new Player((PLAY_AREA_CENTER_FIRST_QUARTER_X * ((0 * 2) + 1)) - 11, PLAY_AREA_BOTTOM - 24, renderer, player1Textures, playerAnimations);
|
||||
Player *player2 = new Player((PLAY_AREA_CENTER_FIRST_QUARTER_X * ((1 * 2) + 1)) - 11, PLAY_AREA_BOTTOM - 24, renderer, player2Textures, playerAnimations);
|
||||
Player *player1 = new Player((PLAY_AREA_CENTER_FIRST_QUARTER_X * ((0 * 2) + 1)) - 11, PLAY_AREA_BOTTOM - 24, renderer, playerTextures.at(0), playerAnimations);
|
||||
Player *player2 = new Player((PLAY_AREA_CENTER_FIRST_QUARTER_X * ((1 * 2) + 1)) - 11, PLAY_AREA_BOTTOM - 24, renderer, playerTextures.at(1), playerAnimations);
|
||||
players.push_back(player1);
|
||||
players.push_back(player2);
|
||||
}
|
||||
@@ -273,6 +273,8 @@ void Game::init()
|
||||
powerBallEnabled = false;
|
||||
powerBallCounter = 0;
|
||||
coffeeMachineEnabled = false;
|
||||
pauseCounter = 0;
|
||||
leavingPauseMenu = false;
|
||||
|
||||
if (demo.enabled)
|
||||
{
|
||||
@@ -447,6 +449,8 @@ void Game::loadMedia()
|
||||
LTexture *player1Fire = new LTexture(renderer, asset->get("player_bal1_fire.png"));
|
||||
player1Textures.push_back(player1Fire);
|
||||
|
||||
playerTextures.push_back(player1Textures);
|
||||
|
||||
// Texturas - Player2
|
||||
LTexture *player2Head = new LTexture(renderer, asset->get("player_arounder_head.png"));
|
||||
player2Textures.push_back(player2Head);
|
||||
@@ -463,6 +467,8 @@ void Game::loadMedia()
|
||||
LTexture *player2Fire = new LTexture(renderer, asset->get("player_arounder_fire.png"));
|
||||
player2Textures.push_back(player2Fire);
|
||||
|
||||
playerTextures.push_back(player2Textures);
|
||||
|
||||
// Animaciones -- Jugador
|
||||
std::vector<std::string> *playerHeadAnimation = new std::vector<std::string>;
|
||||
loadAnimations(asset->get("player_head.ani"), playerHeadAnimation);
|
||||
@@ -541,8 +547,9 @@ void Game::loadMedia()
|
||||
gameOverMenu->setRectSize(w, 0);
|
||||
gameOverMenu->centerMenuOnX(199);
|
||||
pauseMenu = new Menu(renderer, asset, input, asset->get("pause.men"));
|
||||
pauseMenu->setItemCaption(0, lang->getText(46));
|
||||
pauseMenu->setItemCaption(1, lang->getText(47));
|
||||
pauseMenu->setItemCaption(0, lang->getText(41));
|
||||
pauseMenu->setItemCaption(1, lang->getText(46));
|
||||
pauseMenu->setItemCaption(2, lang->getText(47));
|
||||
|
||||
// Sonidos
|
||||
balloonSound = JA_LoadSound(asset->get("balloon.wav").c_str());
|
||||
@@ -3068,11 +3075,6 @@ void Game::checkGameInput()
|
||||
if (input->checkInput(INPUT_CANCEL, REPEAT_FALSE, options->input[i].deviceType, options->input[i].id))
|
||||
{
|
||||
section.subsection = GAME_SECTION_PAUSE;
|
||||
|
||||
if (JA_GetMusicState() == JA_MUSIC_PLAYING)
|
||||
{
|
||||
JA_PauseMusic();
|
||||
}
|
||||
}
|
||||
|
||||
if (demo.counter < TOTAL_DEMO_DATA)
|
||||
@@ -3272,103 +3274,144 @@ section_t Game::run()
|
||||
return section;
|
||||
}
|
||||
|
||||
// Bucle para el menu de pausa del juego
|
||||
void Game::runPausedGame()
|
||||
// Actualiza las variables del menu de pausa del juego
|
||||
void Game::updatePausedGame()
|
||||
{
|
||||
// Reinicia el menu
|
||||
pauseMenu->reset();
|
||||
// Comprueba los eventos que hay en la cola
|
||||
checkEventHandler();
|
||||
|
||||
while ((section.subsection == GAME_SECTION_PAUSE) && (section.name == PROG_SECTION_GAME))
|
||||
// Calcula la lógica de los objetos
|
||||
if (SDL_GetTicks() - ticks > ticksSpeed)
|
||||
{
|
||||
// Comprueba los eventos que hay en la cola
|
||||
checkEventHandler();
|
||||
// Actualiza el contador de ticks
|
||||
ticks = SDL_GetTicks();
|
||||
|
||||
// Calcula la lógica de los objetos
|
||||
if (SDL_GetTicks() - ticks > ticksSpeed)
|
||||
if (leavingPauseMenu)
|
||||
{
|
||||
// Actualiza el contador de ticks
|
||||
ticks = SDL_GetTicks();
|
||||
if (pauseCounter > 0)
|
||||
{ // El contador está descendiendo
|
||||
const bool a = pauseCounter == 90;
|
||||
const bool b = pauseCounter == 60;
|
||||
const bool c = pauseCounter == 30;
|
||||
if (a || b || c)
|
||||
{
|
||||
JA_PlaySound(clockSound);
|
||||
}
|
||||
pauseCounter--;
|
||||
}
|
||||
else
|
||||
{ // Ha finalizado el contador
|
||||
section.name = PROG_SECTION_GAME;
|
||||
section.subsection = numPlayers == 1 ? GAME_SECTION_PLAY_1P : GAME_SECTION_PLAY_2P;
|
||||
|
||||
// Actualiza la lógica del menu
|
||||
if (JA_GetMusicState() == JA_MUSIC_PAUSED)
|
||||
{
|
||||
JA_ResumeMusic();
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{ // Actualiza la lógica del menu de pausa
|
||||
pauseMenu->update();
|
||||
|
||||
// Comprueba las entradas para el menu
|
||||
pauseMenu->checkInput();
|
||||
|
||||
// Comprueba si se ha seleccionado algún item del menú
|
||||
switch (pauseMenu->getItemSelected())
|
||||
{
|
||||
case 1:
|
||||
leavingPauseMenu = true;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
fade->setFadeType(FADE_CENTER);
|
||||
fade->activateFade();
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
// Actualiza el fade
|
||||
fade->update();
|
||||
if (fade->hasEnded())
|
||||
{
|
||||
section.name = PROG_SECTION_TITLE;
|
||||
section.subsection = TITLE_SECTION_1;
|
||||
JA_StopMusic();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Prepara para empezar a dibujar en la textura de juego
|
||||
screen->start();
|
||||
// Dibuja el menu de pausa del juego
|
||||
void Game::renderPausedGame()
|
||||
{
|
||||
// Prepara para empezar a dibujar en la textura de juego
|
||||
screen->start();
|
||||
|
||||
// Limpia la pantalla
|
||||
screen->clean(bgColor);
|
||||
// Limpia la pantalla
|
||||
screen->clean(bgColor);
|
||||
|
||||
// Pinta el escenario
|
||||
// Pinta el escenario
|
||||
{
|
||||
renderBackground();
|
||||
renderBalloons();
|
||||
renderBullets();
|
||||
renderMessages();
|
||||
renderItems();
|
||||
renderSmartSprites();
|
||||
renderScoreBoard();
|
||||
renderPlayers();
|
||||
|
||||
if ((deathCounter <= 150) && !players.at(0)->isAlive())
|
||||
{
|
||||
renderBackground();
|
||||
renderBalloons();
|
||||
renderBullets();
|
||||
renderMessages();
|
||||
renderItems();
|
||||
renderSmartSprites();
|
||||
renderScoreBoard();
|
||||
renderPlayers();
|
||||
|
||||
if ((deathCounter <= 150) && !players.at(0)->isAlive())
|
||||
{
|
||||
renderDeathFade(150 - deathCounter);
|
||||
}
|
||||
|
||||
if ((gameCompleted) && (gameCompletedCounter >= GAME_COMPLETED_START_FADE))
|
||||
{
|
||||
renderDeathFade(gameCompletedCounter - GAME_COMPLETED_START_FADE);
|
||||
}
|
||||
|
||||
renderFlashEffect();
|
||||
renderDeathFade(150 - deathCounter);
|
||||
}
|
||||
|
||||
if ((gameCompleted) && (gameCompletedCounter >= GAME_COMPLETED_START_FADE))
|
||||
{
|
||||
renderDeathFade(gameCompletedCounter - GAME_COMPLETED_START_FADE);
|
||||
}
|
||||
|
||||
renderFlashEffect();
|
||||
}
|
||||
|
||||
if (leavingPauseMenu)
|
||||
{
|
||||
textNokiaBig2->writeCentered(SCREEN_CENTER_X, PLAY_AREA_FIRST_QUARTER_Y, std::to_string((pauseCounter / 30) + 1));
|
||||
}
|
||||
else
|
||||
{
|
||||
pauseMenu->render();
|
||||
fade->render();
|
||||
}
|
||||
fade->render();
|
||||
|
||||
// Vuelca el contenido del renderizador en pantalla
|
||||
screen->blit();
|
||||
// Vuelca el contenido del renderizador en pantalla
|
||||
screen->blit();
|
||||
}
|
||||
|
||||
// Comprueba las entradas para el menu
|
||||
pauseMenu->checkInput();
|
||||
// Bucle para el menu de pausa del juego
|
||||
void Game::runPausedGame()
|
||||
{
|
||||
// Pone en pausa la música
|
||||
if (JA_GetMusicState() == JA_MUSIC_PLAYING)
|
||||
{
|
||||
JA_PauseMusic();
|
||||
}
|
||||
|
||||
// Comprueba si se ha seleccionado algún item del menú
|
||||
switch (pauseMenu->getItemSelected())
|
||||
{
|
||||
case 0:
|
||||
section.name = PROG_SECTION_GAME;
|
||||
// Reinicia el menu
|
||||
pauseMenu->reset();
|
||||
leavingPauseMenu = false;
|
||||
|
||||
if (numPlayers == 1)
|
||||
{
|
||||
section.subsection = GAME_SECTION_PLAY_1P;
|
||||
}
|
||||
else
|
||||
{
|
||||
section.subsection = GAME_SECTION_PLAY_2P;
|
||||
}
|
||||
// Inicializa variables
|
||||
pauseCounter = 90;
|
||||
|
||||
if (JA_GetMusicState() == JA_MUSIC_PAUSED)
|
||||
{
|
||||
JA_ResumeMusic();
|
||||
}
|
||||
break;
|
||||
|
||||
case 1:
|
||||
fade->setFadeType(FADE_CENTER);
|
||||
fade->activateFade();
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
while ((section.subsection == GAME_SECTION_PAUSE) && (section.name == PROG_SECTION_GAME))
|
||||
{
|
||||
updatePausedGame();
|
||||
renderPausedGame();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3706,6 +3749,15 @@ void Game::checkEventHandler()
|
||||
section.name = PROG_SECTION_QUIT;
|
||||
break;
|
||||
}
|
||||
|
||||
else if (eventHandler->type == SDL_WINDOWEVENT)
|
||||
{
|
||||
if (eventHandler->window.event == SDL_WINDOWEVENT_FOCUS_LOST)
|
||||
{
|
||||
section.subsection = GAME_SECTION_PAUSE;
|
||||
}
|
||||
}
|
||||
|
||||
else if (eventHandler->type == SDL_KEYDOWN && eventHandler->key.repeat == 0)
|
||||
{
|
||||
switch (eventHandler->key.keysym.scancode)
|
||||
|
||||
@@ -127,11 +127,12 @@ private:
|
||||
std::vector<Item *> items; // Vector con los items
|
||||
std::vector<SmartSprite *> smartSprites; // Vector con los smartsprites
|
||||
|
||||
LTexture *bulletTexture; // Textura para las balas
|
||||
std::vector<LTexture *> itemTextures; // Vector con las texturas de los items
|
||||
std::vector<LTexture *> balloonTextures; // Vector con las texturas de los globos
|
||||
std::vector<LTexture *> player1Textures; // Vector con las texturas del jugador
|
||||
std::vector<LTexture *> player2Textures; // Vector con las texturas del jugador
|
||||
LTexture *bulletTexture; // Textura para las balas
|
||||
std::vector<LTexture *> itemTextures; // Vector con las texturas de los items
|
||||
std::vector<LTexture *> balloonTextures; // Vector con las texturas de los globos
|
||||
std::vector<LTexture *> player1Textures; // Vector con las texturas del jugador
|
||||
std::vector<LTexture *> player2Textures; // Vector con las texturas del jugador
|
||||
std::vector<std::vector<LTexture *>> playerTextures; // Vector con todas las texturas de los jugadores;
|
||||
|
||||
LTexture *gameBuildingsTexture; // Textura con los edificios de fondo
|
||||
LTexture *gameCloudsTexture; // Textura con las nubes de fondo
|
||||
@@ -192,10 +193,9 @@ private:
|
||||
JA_Music gameMusic; // Musica de fondo
|
||||
|
||||
// Variables
|
||||
int numPlayers; // Numero de jugadores
|
||||
Uint32 ticks; // Contador de ticks para ajustar la velocidad del programa
|
||||
Uint8 ticksSpeed; // Velocidad a la que se repiten los bucles del programa
|
||||
|
||||
int numPlayers; // Numero de jugadores
|
||||
Uint32 ticks; // Contador de ticks para ajustar la velocidad del programa
|
||||
Uint8 ticksSpeed; // Velocidad a la que se repiten los bucles del programa
|
||||
Uint32 hiScore; // Puntuación máxima
|
||||
bool hiScoreAchieved; // Indica si se ha superado la puntuación máxima
|
||||
section_t section; // Seccion actual dentro del juego
|
||||
@@ -235,6 +235,8 @@ private:
|
||||
demo_t demo; // Variable con todas las variables relacionadas con el modo demo
|
||||
int totalPowerToCompleteGame; // La suma del poder necesario para completar todas las fases
|
||||
int cloudsSpeed; // Velocidad a la que se desplazan las nubes
|
||||
int pauseCounter; // Contador para salir del menu de pausa y volver al juego
|
||||
bool leavingPauseMenu; // Indica si esta saliendo del menu de pausa para volver al juego
|
||||
|
||||
// Actualiza el juego
|
||||
void update();
|
||||
@@ -464,6 +466,12 @@ private:
|
||||
// Agita la pantalla
|
||||
void shakeScreen();
|
||||
|
||||
// Actualiza las variables del menu de pausa del juego
|
||||
void updatePausedGame();
|
||||
|
||||
// Dibuja el menu de pausa del juego
|
||||
void renderPausedGame();
|
||||
|
||||
// Bucle para el menu de pausa del juego
|
||||
void runPausedGame();
|
||||
|
||||
|
||||
@@ -236,7 +236,7 @@ void Instructions::checkEventHandler()
|
||||
}
|
||||
|
||||
// Bucle para la pantalla de instrucciones
|
||||
void Instructions::run(mode_e mode)
|
||||
section_t Instructions::run(mode_e mode)
|
||||
{
|
||||
this->mode = mode;
|
||||
|
||||
@@ -245,4 +245,6 @@ void Instructions::run(mode_e mode)
|
||||
update();
|
||||
render();
|
||||
}
|
||||
|
||||
return section;
|
||||
}
|
||||
|
||||
@@ -59,7 +59,7 @@ public:
|
||||
~Instructions();
|
||||
|
||||
// Bucle principal
|
||||
void run(mode_e mode);
|
||||
section_t run(mode_e mode);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -58,6 +58,9 @@ Menu::Menu(SDL_Renderer *renderer, Asset *asset, Input *input, std::string file)
|
||||
{
|
||||
load(file);
|
||||
}
|
||||
|
||||
// Deja el cursor en el primer elemento
|
||||
reset();
|
||||
}
|
||||
|
||||
Menu::~Menu()
|
||||
@@ -492,6 +495,13 @@ void Menu::reset()
|
||||
selector.originH = selector.targetH = item[0].rect.h;
|
||||
selector.moving = false;
|
||||
selector.resizing = false;
|
||||
|
||||
// Si el primer elemento no es seleccionable, incrementa el selector
|
||||
if (!item[selector.index].selectable)
|
||||
{
|
||||
increaseSelectorIndex();
|
||||
setSelectorPos(selector.index);
|
||||
}
|
||||
}
|
||||
|
||||
// Actualiza el menu para recolocarlo correctamente y establecer el tamaño
|
||||
@@ -833,9 +843,6 @@ void Menu::setItemCaption(int index, std::string text)
|
||||
item.at(index).rect.w = this->text->lenght(item.at(index).label);
|
||||
item.at(index).rect.h = this->text->getCharacterSize();
|
||||
reorganize();
|
||||
|
||||
const std::string t = item.at(index).label + ":" + std::to_string(item.at(index).rect.w);
|
||||
printf("Adding menu item -> %s\n", t.c_str());
|
||||
}
|
||||
|
||||
// Establece el indice del itemm que se usará por defecto al cancelar el menu
|
||||
|
||||
@@ -13,7 +13,7 @@ Title::Title(SDL_Renderer *renderer, Screen *screen, Input *input, Asset *asset,
|
||||
|
||||
this->section = section;
|
||||
|
||||
// Reserva memoria para los punteros propios
|
||||
// Reserva memoria para los punteros
|
||||
eventHandler = new SDL_Event();
|
||||
fade = new Fade(renderer);
|
||||
|
||||
@@ -33,6 +33,7 @@ Title::Title(SDL_Renderer *renderer, Screen *screen, Input *input, Asset *asset,
|
||||
|
||||
menu.title = new Menu(renderer, asset, input, asset->get("title.men"));
|
||||
menu.options = new Menu(renderer, asset, input, asset->get("options.men"));
|
||||
menu.playerSelect = new Menu(renderer, asset, input, asset->get("player_select.men"));
|
||||
|
||||
// Sonidos
|
||||
crashSound = JA_LoadSound(asset->get("title.wav").c_str());
|
||||
@@ -73,6 +74,7 @@ Title::~Title()
|
||||
|
||||
delete menu.title;
|
||||
delete menu.options;
|
||||
delete menu.playerSelect;
|
||||
|
||||
JA_DeleteSound(crashSound);
|
||||
JA_DeleteMusic(titleMusic);
|
||||
@@ -299,7 +301,10 @@ void Title::update()
|
||||
if (demo)
|
||||
{
|
||||
runDemoGame();
|
||||
runInstructions(m_auto);
|
||||
if (section.name != PROG_SECTION_QUIT)
|
||||
{
|
||||
runInstructions(m_auto);
|
||||
}
|
||||
}
|
||||
else
|
||||
section.name = PROG_SECTION_LOGO;
|
||||
@@ -319,14 +324,13 @@ void Title::update()
|
||||
menu.active->update();
|
||||
}
|
||||
|
||||
// Comprueba si se ha seleccionado algún item del menú
|
||||
// Comprueba si se ha seleccionado algún item del menú de titulo
|
||||
if (menu.active->getName() == "TITLE")
|
||||
{
|
||||
switch (menu.active->getItemSelected())
|
||||
{
|
||||
case 0: // 1 PLAYER
|
||||
postFade = 0;
|
||||
fade->activateFade();
|
||||
case 0: // 1 PLAYER -> Cambia al manu de selección de jugador
|
||||
menu.active = menu.playerSelect;
|
||||
break;
|
||||
|
||||
case 1: // 2 PLAYERS
|
||||
@@ -349,6 +353,37 @@ void Title::update()
|
||||
}
|
||||
}
|
||||
|
||||
// Comprueba si se ha seleccionado algún item del menú de selección de jugador
|
||||
if (menu.active->getName() == "PLAYER_SELECT")
|
||||
{
|
||||
switch (menu.active->getItemSelected())
|
||||
{
|
||||
case 0:
|
||||
// Este item no se puede seleccionar y actua de titulo
|
||||
break;
|
||||
|
||||
case 1: // BAL1
|
||||
postFade = 0;
|
||||
options->playerSelected = 0;
|
||||
fade->activateFade();
|
||||
break;
|
||||
|
||||
case 2: // AROUNDER
|
||||
postFade = 0;
|
||||
options->playerSelected = 1;
|
||||
fade->activateFade();
|
||||
break;
|
||||
|
||||
case 3: // BACK
|
||||
menu.active = menu.title;
|
||||
menu.playerSelect->reset();
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Comprueba si se ha seleccionado algún item de opciones
|
||||
if (menu.active->getName() == "OPTIONS")
|
||||
{
|
||||
@@ -451,7 +486,10 @@ void Title::update()
|
||||
if (demo)
|
||||
{
|
||||
runDemoGame();
|
||||
runInstructions(m_auto);
|
||||
if (section.name != PROG_SECTION_QUIT)
|
||||
{
|
||||
runInstructions(m_auto);
|
||||
}
|
||||
init();
|
||||
demo = false;
|
||||
counter = TITLE_COUNTER;
|
||||
@@ -873,6 +911,14 @@ void Title::updateMenuLabels()
|
||||
// Recoloca el menu de titulo
|
||||
menu.title->centerMenuOnX(SCREEN_CENTER_X);
|
||||
menu.title->centerMenuElementsOnX();
|
||||
|
||||
// Establece las etiquetas del menu de seleccion de jugador
|
||||
menu.playerSelect->setItemCaption(0, lang->getText(39)); // SELECT PLAYER
|
||||
menu.playerSelect->setItemCaption(3, lang->getText(40)); // BACK
|
||||
|
||||
// Recoloca el menu de selección de jugador
|
||||
menu.playerSelect->centerMenuOnX(SCREEN_CENTER_X);
|
||||
menu.playerSelect->centerMenuElementsOnX();
|
||||
}
|
||||
|
||||
// Aplica las opciones de menu seleccionadas
|
||||
@@ -899,19 +945,23 @@ section_t Title::run()
|
||||
}
|
||||
|
||||
// Ejecuta la parte donde se muestran las instrucciones
|
||||
void Title::runInstructions(mode_e mode)
|
||||
section_t Title::runInstructions(mode_e mode)
|
||||
{
|
||||
instructions = new Instructions(renderer, screen, asset, lang);
|
||||
instructions->run(mode);
|
||||
section = instructions->run(mode);
|
||||
delete instructions;
|
||||
|
||||
return section;
|
||||
}
|
||||
|
||||
// Ejecuta el juego en modo demo
|
||||
void Title::runDemoGame()
|
||||
section_t Title::runDemoGame()
|
||||
{
|
||||
demoGame = new Game(1, 0, renderer, screen, asset, lang, input, true, options);
|
||||
demoGame->run();
|
||||
section = demoGame->run();
|
||||
delete demoGame;
|
||||
|
||||
return section;
|
||||
}
|
||||
|
||||
// Modifica las opciones para los controles de los jugadores
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
#define TITLE_H
|
||||
|
||||
// Textos
|
||||
#define TEXT_COPYRIGHT "@2020,2022 JailDesigner (v2.1)"
|
||||
#define TEXT_COPYRIGHT "@2020,2022 JailDesigner (v2.1a)"
|
||||
|
||||
// Contadores
|
||||
#define TITLE_COUNTER 800
|
||||
@@ -35,10 +35,11 @@ class Title
|
||||
private:
|
||||
struct menu_t
|
||||
{
|
||||
Menu *title; // Menu de la pantalla de título
|
||||
Menu *options; // Menú de la pantalla de opciones
|
||||
Menu *active; // Menu activo (de momento para la pantalla del titulo)
|
||||
bool keyPressed; // Variable para evitar la repetición de teclas en los menus
|
||||
Menu *title; // Menu de la pantalla de título
|
||||
Menu *options; // Menú de la pantalla de opciones
|
||||
Menu *playerSelect; // Menu para elegir jugador
|
||||
Menu *active; // Menu activo (de momento para la pantalla del titulo)
|
||||
bool keyPressed; // Variable para evitar la repetición de teclas en los menus
|
||||
};
|
||||
|
||||
// Objetos
|
||||
@@ -116,10 +117,10 @@ private:
|
||||
void applyOptions();
|
||||
|
||||
// Ejecuta la parte donde se muestran las instrucciones
|
||||
void runInstructions(mode_e mode);
|
||||
section_t runInstructions(mode_e mode);
|
||||
|
||||
// Ejecuta el juego en modo demo
|
||||
void runDemoGame();
|
||||
section_t runDemoGame();
|
||||
|
||||
// Modifica las opciones para los controles de los jugadores
|
||||
bool updatePlayerInputs(int numPlayer);
|
||||
|
||||
@@ -87,6 +87,7 @@ struct input_t
|
||||
struct options_t
|
||||
{
|
||||
Uint8 difficulty; // Dificultad del juego
|
||||
Uint8 playerSelected; // Jugador seleccionado para el modo 1P
|
||||
std::vector<input_t> input; // Modo de control (teclado o mando)
|
||||
Uint8 language; // Idioma usado en el juego
|
||||
Uint32 fullScreenMode; // Contiene el valor del modo de pantalla completa
|
||||
|
||||
29
todo.txt
29
todo.txt
@@ -1,29 +0,0 @@
|
||||
x los items se quedan pegados en el techo (comprobar si sigue pasando, he cambiado la coreción al chocar arriba. Si sigue fallando se quita la comprobación superior)
|
||||
x la maquina de cafe no toca el suelo
|
||||
x las bolas verdes nacen naranja al explotarlas
|
||||
x falta el aura de superguerrero al pillar la maquina de cafe
|
||||
x la powerball deja la mascara al explotarlas
|
||||
x los menus de pausa y game over falta poner bien los textos
|
||||
x cuando continuas la partida sigues muerto
|
||||
poder elegir el personaje para jugar
|
||||
x arreglar los smart sprites de muerte y de perder el cafe
|
||||
x arreglar los items de las instrucciones
|
||||
x que cicle la musica en el titulo, demo, instrucciones
|
||||
NO que guarde el progreso del juego
|
||||
x que aumente la velocidad de las nubes conforme avanzas
|
||||
x retocar un poco la distancia entre los cambios de color del cielo, se llega al oscuro muy pronto
|
||||
x las balas deberian llegar a salir de la pantalla
|
||||
x hacer desaparecer los accesos a disco en el juego. cargar todos los recursos previamente y pasarlos por punteros
|
||||
x la powerball se para con el reloj y sigue rodando
|
||||
x acelerar la animacion de disparar recto
|
||||
x no pone la animacion corecta al no disparar con el powerup
|
||||
NO que grite "yiiijaa!" o algo parecido al coger la maquina de cafe
|
||||
NO o que diga DIMONIS! en un globo de texto que se evapore
|
||||
NO podrian salir comentarios aleatoriamente o con ciertos eventos (falta ver si no estorbará)
|
||||
x que se vea el nivel de dificultad
|
||||
x poner un dibujito en la pantalla de game over al terminar el juego
|
||||
x y quizas otro en la propia pantalla de game over
|
||||
x que las nubes al final se vuelva a frenar
|
||||
quitar las cabezas powerup
|
||||
x el modo 2P no arranca
|
||||
arreglar el menu de gameover cuando has completado el juego
|
||||
Reference in New Issue
Block a user