Compare commits
26 Commits
b861f33867
...
v2.1a
| Author | SHA1 | Date | |
|---|---|---|---|
| 3d52c45f5c | |||
| 3276027044 | |||
| 8041595976 | |||
| fa53c1b01a | |||
| 20b362160e | |||
| 5cabbfc487 | |||
| 9f5e001c70 | |||
| 112c3afc76 | |||
| f4215384fe | |||
| 7796cee51a | |||
| f83154c062 | |||
| 9e73f7f97d | |||
| 742ca02573 | |||
| d77757853d | |||
| ca7ae7418e | |||
| f880bb7d74 | |||
| 9784b5517a | |||
| 88041eba23 | |||
| 698721ae03 | |||
| c7109a46cd | |||
| bb20522172 | |||
| bebc016f3c | |||
| 56c1a1d7f3 | |||
| 50d2a5d1c7 | |||
| 83103ddfea | |||
| f4f7bb52b3 |
6
.gitignore
vendored
@@ -1,6 +1,6 @@
|
|||||||
.vscode
|
.vscode
|
||||||
*.DS_Store
|
*.DS_Store
|
||||||
bin
|
bin
|
||||||
data/config.txt
|
data/config/config.txt
|
||||||
data/config.bin
|
data/config/config.bin
|
||||||
data/score.bin
|
data/config/score.bin
|
||||||
10
Makefile
@@ -1,14 +1,16 @@
|
|||||||
executable = coffee_crisis
|
executable = coffee_crisis
|
||||||
|
|
||||||
windows:
|
windows:
|
||||||
mkdir bin
|
@echo off
|
||||||
g++ -std=c++11 -Wall -O2 source/*.cpp -lmingw32 -lSDL2main -lSDL2 -o bin/coffee_crisis.exe
|
if not exist bin\ (mkdir bin)
|
||||||
|
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:
|
macos:
|
||||||
mkdir -p bin
|
mkdir -p bin
|
||||||
g++ -std=c++11 -Wall -O2 source/*.cpp -o bin/$(executable)_macos -lSDL2
|
g++ source/*.cpp -std=c++11 -Wall -O2 -lSDL2 -ffunction-sections -fdata-sections -o bin/$(executable)_macos
|
||||||
linux:
|
linux:
|
||||||
mkdir -p bin
|
mkdir -p bin
|
||||||
g++ source/*.cpp -std=c++11 -Os -lSDL2 -ffunction-sections -fdata-sections -Wl,--gc-sections -o bin/$(executable)_linux
|
g++ source/*.cpp -std=c++11 -Wall -Os -lSDL2 -ffunction-sections -fdata-sections -Wl,--gc-sections -o bin/$(executable)_linux
|
||||||
strip -s -R .comment -R .gnu.version bin/$(executable)_linux --strip-unneeded
|
strip -s -R .comment -R .gnu.version bin/$(executable)_linux --strip-unneeded
|
||||||
opendingux:
|
opendingux:
|
||||||
mkdir -p bin
|
mkdir -p bin
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 1.8 KiB |
BIN
data/gfx/menu_game_over.png
Normal file
|
After Width: | Height: | Size: 3.6 KiB |
BIN
data/gfx/menu_game_over_end.png
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.4 KiB |
BIN
data/gfx/player_arounder_fire.png
Normal file
|
After Width: | Height: | Size: 887 B |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.3 KiB |
BIN
data/gfx/player_bal1_fire.png
Normal file
|
After Width: | Height: | Size: 835 B |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 1.6 KiB |
@@ -43,6 +43,8 @@ loop=0
|
|||||||
frames=20,21,22,23
|
frames=20,21,22,23
|
||||||
[/animation]
|
[/animation]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[animation]
|
[animation]
|
||||||
name=sideshoot
|
name=sideshoot
|
||||||
speed=5
|
speed=5
|
||||||
@@ -83,4 +85,92 @@ name=centershoot_2C
|
|||||||
speed=5
|
speed=5
|
||||||
loop=0
|
loop=0
|
||||||
frames=44,45,46,47
|
frames=44,45,46,47
|
||||||
|
[/animation]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[animation]
|
||||||
|
name=walk_pwr
|
||||||
|
speed=3
|
||||||
|
loop=0
|
||||||
|
frames=0,1,2,3
|
||||||
|
[/animation]
|
||||||
|
|
||||||
|
[animation]
|
||||||
|
name=stand_pwr
|
||||||
|
speed=5
|
||||||
|
loop=0
|
||||||
|
frames=4,5,6,7
|
||||||
|
[/animation]
|
||||||
|
|
||||||
|
[animation]
|
||||||
|
name=walk_1C_pwr
|
||||||
|
speed=3
|
||||||
|
loop=0
|
||||||
|
frames=8,9,10,11
|
||||||
|
[/animation]
|
||||||
|
|
||||||
|
[animation]
|
||||||
|
name=stand_1C_pwr
|
||||||
|
speed=5
|
||||||
|
loop=0
|
||||||
|
frames=12,13,14,15
|
||||||
|
[/animation]
|
||||||
|
|
||||||
|
[animation]
|
||||||
|
name=walk_2C_pwr
|
||||||
|
speed=3
|
||||||
|
loop=0
|
||||||
|
frames=16,17,18,19
|
||||||
|
[/animation]
|
||||||
|
|
||||||
|
[animation]
|
||||||
|
name=stand_2C_pwr
|
||||||
|
speed=5
|
||||||
|
loop=0
|
||||||
|
frames=20,21,22,23
|
||||||
|
[/animation]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[animation]
|
||||||
|
name=sideshoot_pwr
|
||||||
|
speed=2
|
||||||
|
loop=0
|
||||||
|
frames=24,25,26,27
|
||||||
|
[/animation]
|
||||||
|
|
||||||
|
[animation]
|
||||||
|
name=centershoot_pwr
|
||||||
|
speed=2
|
||||||
|
loop=0
|
||||||
|
frames=28,29,30,31
|
||||||
|
[/animation]
|
||||||
|
|
||||||
|
[animation]
|
||||||
|
name=sideshoot_1C_pwr
|
||||||
|
speed=2
|
||||||
|
loop=0
|
||||||
|
frames=32,33,34,35
|
||||||
|
[/animation]
|
||||||
|
|
||||||
|
[animation]
|
||||||
|
name=centershoot_1C_pwr
|
||||||
|
speed=2
|
||||||
|
loop=0
|
||||||
|
frames=36,37,38,39
|
||||||
|
[/animation]
|
||||||
|
|
||||||
|
[animation]
|
||||||
|
name=sideshoot_2C_pwr
|
||||||
|
speed=2
|
||||||
|
loop=0
|
||||||
|
frames=40,41,42,43
|
||||||
|
[/animation]
|
||||||
|
|
||||||
|
[animation]
|
||||||
|
name=centershoot_2C_pwr
|
||||||
|
speed=2
|
||||||
|
loop=0
|
||||||
|
frames=44,45,46,47
|
||||||
[/animation]
|
[/animation]
|
||||||
9
data/gfx/player_fire.ani
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
frameWidth=28
|
||||||
|
frameHeight=32
|
||||||
|
|
||||||
|
[animation]
|
||||||
|
name=default
|
||||||
|
speed=5
|
||||||
|
loop=0
|
||||||
|
frames=0,1,2,3
|
||||||
|
[/animation]
|
||||||
@@ -61,54 +61,54 @@ frames=28,29,30,31
|
|||||||
name=sideshoot
|
name=sideshoot
|
||||||
speed=5
|
speed=5
|
||||||
loop=0
|
loop=0
|
||||||
frames=32,33,34,35
|
frames=16,17,18,19
|
||||||
[/animation]
|
[/animation]
|
||||||
|
|
||||||
[animation]
|
[animation]
|
||||||
name=centershoot
|
name=centershoot
|
||||||
speed=5
|
speed=5
|
||||||
loop=0
|
loop=0
|
||||||
frames=36,37,38,39
|
frames=20,21,22,23
|
||||||
[/animation]
|
[/animation]
|
||||||
|
|
||||||
[animation]
|
[animation]
|
||||||
name=sideshoot_1C
|
name=sideshoot_1C
|
||||||
speed=5
|
speed=5
|
||||||
loop=0
|
loop=0
|
||||||
frames=40,41,42,43
|
frames=24,25,26,27
|
||||||
[/animation]
|
[/animation]
|
||||||
|
|
||||||
[animation]
|
[animation]
|
||||||
name=centershoot_1C
|
name=centershoot_1C
|
||||||
speed=5
|
speed=5
|
||||||
loop=0
|
loop=0
|
||||||
frames=44,45,46,47
|
frames=28,29,30,31
|
||||||
[/animation]
|
[/animation]
|
||||||
|
|
||||||
[animation]
|
[animation]
|
||||||
name=sideshoot_pwr
|
name=sideshoot_pwr
|
||||||
speed=5
|
speed=2
|
||||||
loop=0
|
loop=0
|
||||||
frames=48,49,50,51
|
frames=16,17,18,19
|
||||||
[/animation]
|
[/animation]
|
||||||
|
|
||||||
[animation]
|
[animation]
|
||||||
name=centershoot_pwr
|
name=centershoot_pwr
|
||||||
speed=5
|
speed=2
|
||||||
loop=0
|
loop=0
|
||||||
frames=52,53,54,55
|
frames=20,21,22,23
|
||||||
[/animation]
|
[/animation]
|
||||||
|
|
||||||
[animation]
|
[animation]
|
||||||
name=sideshoot_1C_pwr
|
name=sideshoot_1C_pwr
|
||||||
speed=5
|
speed=2
|
||||||
loop=0
|
loop=0
|
||||||
frames=56,57,58,59
|
frames=24,25,26,27
|
||||||
[/animation]
|
[/animation]
|
||||||
|
|
||||||
[animation]
|
[animation]
|
||||||
name=centershoot_1C_pwr
|
name=centershoot_1C_pwr
|
||||||
speed=5
|
speed=2
|
||||||
loop=0
|
loop=0
|
||||||
frames=60,61,62,63
|
frames=28,29,30,31
|
||||||
[/animation]
|
[/animation]
|
||||||
@@ -1,160 +1,239 @@
|
|||||||
## 0 - MENU DEL TITULO
|
## 0 - MENU DEL TITULO
|
||||||
JUGAR
|
JUGAR
|
||||||
|
|
||||||
## 1 - MENU DEL TITULO
|
## 1 - MENU DEL TITULO
|
||||||
OPCIONS
|
OPCIONS
|
||||||
|
|
||||||
## 2 - MENU DEL TITULO
|
## 2 - MENU DEL TITULO
|
||||||
INSTRUCCIONS
|
INSTRUCCIONS
|
||||||
|
|
||||||
## 3 - MENU DEL TITULO
|
## 3 - MENU DEL TITULO
|
||||||
EIXIR
|
EIXIR
|
||||||
|
|
||||||
## 4 - MENU DE OPCIONES
|
## 4 - MENU DE OPCIONES
|
||||||
FINESTRA
|
FINESTRA
|
||||||
|
|
||||||
## 5 - MENU DE OPCIONES
|
## 5 - MENU DE OPCIONES
|
||||||
PANTALLA COMPLETA
|
PANTALLA COMPLETA
|
||||||
|
|
||||||
## 6 - MENU DE OPCIONES
|
## 6 - MENU DE OPCIONES
|
||||||
PANTALLA COMPLETA FALSA
|
PANTALLA COMPLETA FALSA
|
||||||
|
|
||||||
## 7 - MENU DE OPCIONES
|
## 7 - MENU DE OPCIONES
|
||||||
TAMANY DE FINESTRA
|
TAMANY DE FINESTRA
|
||||||
|
|
||||||
## 8 - MENU DE OPCIONES
|
## 8 - MENU DE OPCIONES
|
||||||
IDIOMA
|
IDIOMA
|
||||||
|
|
||||||
## 9 - MENU DE OPCIONES
|
## 9 - MENU DE OPCIONES
|
||||||
[ ACEPTAR ]
|
[ ACEPTAR ]
|
||||||
|
|
||||||
## 10 - MENU DE OPCIONES
|
## 10 - MENU DE OPCIONES
|
||||||
[ CANCELAR ]
|
[ CANCELAR ]
|
||||||
|
|
||||||
## 11 - INSTRUCCIONES
|
## 11 - INSTRUCCIONES
|
||||||
OBJECTIU
|
OBJECTIU
|
||||||
|
|
||||||
## 12 - INSTRUCCIONES
|
## 12 - INSTRUCCIONES
|
||||||
HAS D'EXPLOTAR
|
HAS D'EXPLOTAR
|
||||||
|
|
||||||
## 13 - INSTRUCCIONES
|
## 13 - INSTRUCCIONES
|
||||||
TANTS GLOBUS COM PUGUES
|
TANTS GLOBUS COM PUGUES
|
||||||
|
|
||||||
## 14 - INSTRUCCIONES
|
## 14 - INSTRUCCIONES
|
||||||
LA DIFICULTAT AUGMENTA
|
LA DIFICULTAT AUGMENTA
|
||||||
|
|
||||||
## 15 - INSTRUCCIONES
|
## 15 - INSTRUCCIONES
|
||||||
A MESURA QUE VAS PUNTUANT
|
A MESURA QUE VAS PUNTUANT
|
||||||
|
|
||||||
## 16 - INSTRUCCIONES
|
## 16 - INSTRUCCIONES
|
||||||
OBJECTES
|
OBJECTES
|
||||||
|
|
||||||
## 17 - INSTRUCCIONES
|
## 17 - INSTRUCCIONES
|
||||||
1.000 PUNTS
|
1.000 PUNTS
|
||||||
|
|
||||||
## 18 - INSTRUCCIONES
|
## 18 - INSTRUCCIONES
|
||||||
2.500 PUNTS
|
2.500 PUNTS
|
||||||
|
|
||||||
## 19 - INSTRUCCIONES
|
## 19 - INSTRUCCIONES
|
||||||
5.000 PUNTS
|
5.000 PUNTS
|
||||||
|
|
||||||
## 20 - INSTRUCCIONES
|
## 20 - INSTRUCCIONES
|
||||||
PARA EL TEMPS
|
PARA EL TEMPS
|
||||||
|
|
||||||
## 21 - INSTRUCCIONES
|
## 21 - INSTRUCCIONES
|
||||||
VIDA EXTRA
|
VIDA EXTRA
|
||||||
|
|
||||||
## 22 - INSTRUCCIONES
|
## 22 - INSTRUCCIONES
|
||||||
PREM UNA TECLA PER A TORNAR
|
PREM UNA TECLA PER A TORNAR
|
||||||
|
|
||||||
## 23 - TITULO
|
## 23 - TITULO
|
||||||
PREM QUALSEVOL TECLA
|
PREM QUALSEVOL TECLA
|
||||||
|
|
||||||
## 24 - MENU SELECCION DE IDIOMA
|
## 24 - MENU SELECCION DE IDIOMA
|
||||||
ESPA{OL (ESPANYOL)
|
ESPA{OL (ESPANYOL)
|
||||||
|
|
||||||
## 25 - MENU SELECCION DE IDIOMA
|
## 25 - MENU SELECCION DE IDIOMA
|
||||||
BALOONCIA
|
BALOONCIA
|
||||||
|
|
||||||
## 26 - MENU SELECCION DE IDIOMA
|
## 26 - MENU SELECCION DE IDIOMA
|
||||||
ENGLISH (ANGLES)
|
ENGLISH (ANGLES)
|
||||||
|
|
||||||
## 27 - INTRO
|
## 27 - INTRO
|
||||||
Un dia qualsevol de l'any 2000
|
Un dia qualsevol de l'any 2000
|
||||||
|
|
||||||
## 28 - INTRO
|
## 28 - INTRO
|
||||||
Tot esta tranquil a la UPV
|
Tot esta tranquil a la UPV
|
||||||
|
|
||||||
## 29 - INTRO
|
## 29 - INTRO
|
||||||
Fins que un desaprensiu...
|
Fins que un desaprensiu...
|
||||||
|
|
||||||
## 30 - INTRO
|
## 30 - INTRO
|
||||||
HEY! ME ANE A FERME UN CORTAET...
|
HEY! ME ANE A FERME UN CORTAET...
|
||||||
|
|
||||||
## 31 - INTRO
|
## 31 - INTRO
|
||||||
UAAAAAAAAAAAAA!!!
|
UAAAAAAAAAAAAA!!!
|
||||||
|
|
||||||
## 32 - INTRO
|
## 32 - INTRO
|
||||||
Espera un moment...
|
Espera un moment...
|
||||||
|
|
||||||
## 33 - INTRO
|
## 33 - INTRO
|
||||||
Si resulta que no tinc solt!
|
Si resulta que no tinc solt!
|
||||||
|
|
||||||
## 34 - INTRO
|
## 34 - INTRO
|
||||||
MERDA DE MAQUINA!
|
MERDA DE MAQUINA!
|
||||||
|
|
||||||
## 35 - INTRO
|
## 35 - INTRO
|
||||||
Blop... blop... blop...
|
Blop... blop... blop...
|
||||||
|
|
||||||
## 36 - TEXTOS DEL JUEGO
|
## 36 - TEXTOS DEL JUEGO
|
||||||
Temps detes:
|
Temps detes:
|
||||||
|
|
||||||
## 37 - TEXTOS DEL JUEGO
|
## 37 - TEXTOS DEL JUEGO
|
||||||
D E M O
|
D E M O
|
||||||
|
|
||||||
## 38 - TEXTOS DEL JUEGO
|
## 38 - TEXTOS DEL JUEGO
|
||||||
fases mes!
|
fases mes!
|
||||||
## 39 -
|
|
||||||
|
|
||||||
## 40 -
|
## 39 - MENU SELECCION DE JUGADOR
|
||||||
|
Selecciona personatge
|
||||||
|
|
||||||
## 41 -
|
## 40 - MENU SELECCION DE JUGADOR
|
||||||
|
Enrere
|
||||||
|
|
||||||
|
## 41 - MENU DE PAUSA
|
||||||
|
Menu de pausa
|
||||||
|
|
||||||
## 42 -
|
## 42 -
|
||||||
|
-
|
||||||
|
|
||||||
## 43 - PANTALLA DE GAME OVER
|
## 43 - PANTALLA DE GAME OVER
|
||||||
FI DEL JOC
|
FI DEL JOC
|
||||||
|
|
||||||
## 44 - PANTALLA DE GAME OVER
|
## 44 - PANTALLA DE GAME OVER
|
||||||
ELS TEUS PUNTS:
|
ELS TEUS PUNTS:
|
||||||
|
|
||||||
## 45 - PANTALLA DE GAME OVER
|
## 45 - PANTALLA DE GAME OVER
|
||||||
CONTINUAR?
|
CONTINUAR?
|
||||||
|
|
||||||
## 46 - MENU DE PAUSA
|
## 46 - MENU DE PAUSA
|
||||||
CONTINUAR
|
CONTINUAR
|
||||||
|
|
||||||
## 47 - MENU DE PAUSA
|
## 47 - MENU DE PAUSA
|
||||||
EIXIR DEL JOC
|
EIXIR DEL JOC
|
||||||
|
|
||||||
## 48 - MENU GAME OVER
|
## 48 - MENU GAME OVER
|
||||||
SI
|
SI
|
||||||
|
|
||||||
## 49 - MENU GAME OVER
|
## 49 - MENU GAME OVER
|
||||||
NO
|
NO
|
||||||
|
|
||||||
## 50 - TEXTO DE COMPLETAR EL JUEGO
|
## 50 - TEXTO DE COMPLETAR EL JUEGO
|
||||||
Felicitats!!
|
Felicitats!!
|
||||||
|
|
||||||
## 51 - MENU DEL TITULO
|
## 51 - MENU DEL TITULO
|
||||||
1 JUGADOR
|
1 JUGADOR
|
||||||
|
|
||||||
## 52 - MENU DEL TITULO
|
## 52 - MENU DEL TITULO
|
||||||
2 JUGADORS
|
2 JUGADORS
|
||||||
|
|
||||||
## 53 MARCADOR
|
## 53 MARCADOR
|
||||||
jugador 1
|
jugador 1
|
||||||
|
|
||||||
## 54 MARCADOR
|
## 54 MARCADOR
|
||||||
jugador 2
|
jugador 2
|
||||||
|
|
||||||
## 55 MARCADOR
|
## 55 MARCADOR
|
||||||
mult
|
mult
|
||||||
|
|
||||||
## 56 MARCADOR
|
## 56 MARCADOR
|
||||||
max. puntuacio
|
max. puntuacio
|
||||||
|
|
||||||
## 57 MARCADOR
|
## 57 MARCADOR
|
||||||
fase
|
fase
|
||||||
|
|
||||||
## 58 - MENU DE OPCIONES
|
## 58 - MENU DE OPCIONES
|
||||||
MODE DE VISUALITZACIO
|
MODE DE VISUALITZACIO
|
||||||
|
|
||||||
## 59 - MENU DE OPCIONES
|
## 59 - MENU DE OPCIONES
|
||||||
DIFICULTAT
|
DIFICULTAT
|
||||||
|
|
||||||
## 60 - MENU DE OPCIONES
|
## 60 - MENU DE OPCIONES
|
||||||
FILTRE
|
FILTRE
|
||||||
|
|
||||||
## 61 - MENU DE OPCIONES
|
## 61 - MENU DE OPCIONES
|
||||||
SINC. VERTICAL
|
SINC. VERTICAL
|
||||||
|
|
||||||
## 62 - MENU DE OPCIONES
|
## 62 - MENU DE OPCIONES
|
||||||
CONTROLS DEL JUGADOR 1
|
CONTROLS DEL JUGADOR 1
|
||||||
|
|
||||||
## 63 - MENU DE OPCIONES
|
## 63 - MENU DE OPCIONES
|
||||||
CONTROLS DEL JUGADOR 2
|
CONTROLS DEL JUGADOR 2
|
||||||
|
|
||||||
## 64 -
|
## 64 -
|
||||||
|
-
|
||||||
|
|
||||||
## 65 -
|
## 65 -
|
||||||
|
-
|
||||||
|
|
||||||
## 66 - MENU DE OPCIONES
|
## 66 - MENU DE OPCIONES
|
||||||
FACIL
|
FACIL
|
||||||
|
|
||||||
## 67 - MENU DE OPCIONES
|
## 67 - MENU DE OPCIONES
|
||||||
NORMAL
|
NORMAL
|
||||||
|
|
||||||
## 68 - MENU DE OPCIONES
|
## 68 - MENU DE OPCIONES
|
||||||
DIFICIL
|
DIFICIL
|
||||||
|
|
||||||
## 69 - MENU DE OPCIONES
|
## 69 - MENU DE OPCIONES
|
||||||
TECLAT
|
TECLAT
|
||||||
|
|
||||||
## 70 - MENU DE OPCIONES
|
## 70 - MENU DE OPCIONES
|
||||||
MANDO
|
MANDO
|
||||||
|
|
||||||
## 71 - MENU DE OPCIONES
|
## 71 - MENU DE OPCIONES
|
||||||
LINEAL
|
LINEAL
|
||||||
|
|
||||||
## 72 - MENU DE OPCIONES
|
## 72 - MENU DE OPCIONES
|
||||||
NEAREST
|
NEAREST
|
||||||
|
|
||||||
## 73 - MENU DE OPCIONES
|
## 73 - MENU DE OPCIONES
|
||||||
ACTIVADA
|
ACTIVADA
|
||||||
|
|
||||||
## 74 - MENU DE OPCIONES
|
## 74 - MENU DE OPCIONES
|
||||||
DESACTIVADA
|
DESACTIVADA
|
||||||
|
|
||||||
## 75 - JUEGO
|
## 75 - JUEGO
|
||||||
Endavant!
|
Endavant!
|
||||||
|
|
||||||
## 76 - JUEGO
|
## 76 - JUEGO
|
||||||
1.000.000 de punts!
|
1.000.000 de punts!
|
||||||
|
|
||||||
## 77 - PANTALLA DE GAME OVER
|
## 77 - PANTALLA DE GAME OVER
|
||||||
PUNTS J1:
|
PUNTS J1:
|
||||||
|
|
||||||
## 78 - PANTALLA DE GAME OVER
|
## 78 - PANTALLA DE GAME OVER
|
||||||
PUNTS J2:
|
PUNTS J2:
|
||||||
|
|
||||||
## 79 - TEXTOS DEL JUEGO
|
## 79 - TEXTOS DEL JUEGO
|
||||||
Ultima fase!
|
Ultima fase!
|
||||||
@@ -1,160 +1,239 @@
|
|||||||
## 0 - MENU DEL TITULO
|
## 0 - MENU DEL TITULO
|
||||||
PLAY
|
PLAY
|
||||||
|
|
||||||
## 1 - MENU DEL TITULO
|
## 1 - MENU DEL TITULO
|
||||||
OPTIONS
|
OPTIONS
|
||||||
|
|
||||||
## 2 - MENU DEL TITULO
|
## 2 - MENU DEL TITULO
|
||||||
HOW TO PLAY
|
HOW TO PLAY
|
||||||
|
|
||||||
## 3 - MENU DEL TITULO
|
## 3 - MENU DEL TITULO
|
||||||
QUIT
|
QUIT
|
||||||
|
|
||||||
## 4 - MENU DE OPCIONES
|
## 4 - MENU DE OPCIONES
|
||||||
WINDOW
|
WINDOW
|
||||||
|
|
||||||
## 5 - MENU DE OPCIONES
|
## 5 - MENU DE OPCIONES
|
||||||
FULLSCREEN
|
FULLSCREEN
|
||||||
|
|
||||||
## 6 - MENU DE OPCIONES
|
## 6 - MENU DE OPCIONES
|
||||||
FAKE FULLSCREEN
|
FAKE FULLSCREEN
|
||||||
|
|
||||||
## 7 - MENU DE OPCIONES
|
## 7 - MENU DE OPCIONES
|
||||||
WINDOW SIZE
|
WINDOW SIZE
|
||||||
|
|
||||||
## 8 - MENU DE OPCIONES
|
## 8 - MENU DE OPCIONES
|
||||||
LANGUAGE
|
LANGUAGE
|
||||||
|
|
||||||
## 9 - MENU DE OPCIONES
|
## 9 - MENU DE OPCIONES
|
||||||
[ ACCEPT ]
|
[ ACCEPT ]
|
||||||
|
|
||||||
## 10 - MENU DE OPCIONES
|
## 10 - MENU DE OPCIONES
|
||||||
[ CANCEL ]
|
[ CANCEL ]
|
||||||
|
|
||||||
## 11 - INSTRUCCIONES
|
## 11 - INSTRUCCIONES
|
||||||
OBJECTIVE
|
OBJECTIVE
|
||||||
|
|
||||||
## 12 - INSTRUCCIONES
|
## 12 - INSTRUCCIONES
|
||||||
YOU HAVE TO POP AS MANY
|
YOU HAVE TO POP AS MANY
|
||||||
|
|
||||||
## 13 - INSTRUCCIONES
|
## 13 - INSTRUCCIONES
|
||||||
BALLOONS AS YOU CAN
|
BALLOONS AS YOU CAN
|
||||||
|
|
||||||
## 14 - INSTRUCCIONES
|
## 14 - INSTRUCCIONES
|
||||||
DIFFICULTY WILL BE INCREASED
|
DIFFICULTY WILL BE INCREASED
|
||||||
|
|
||||||
## 15 - INSTRUCCIONES
|
## 15 - INSTRUCCIONES
|
||||||
AS YOU SCORE POINTS
|
AS YOU SCORE POINTS
|
||||||
|
|
||||||
## 16 - INSTRUCCIONES
|
## 16 - INSTRUCCIONES
|
||||||
ITEMS
|
ITEMS
|
||||||
|
|
||||||
## 17 - INSTRUCCIONES
|
## 17 - INSTRUCCIONES
|
||||||
1.000 POINTS
|
1.000 POINTS
|
||||||
|
|
||||||
## 18 - INSTRUCCIONES
|
## 18 - INSTRUCCIONES
|
||||||
2.500 POINTS
|
2.500 POINTS
|
||||||
|
|
||||||
## 19 - INSTRUCCIONES
|
## 19 - INSTRUCCIONES
|
||||||
5.000 POINTS
|
5.000 POINTS
|
||||||
|
|
||||||
## 20 - INSTRUCCIONES
|
## 20 - INSTRUCCIONES
|
||||||
TIME STOPPER
|
TIME STOPPER
|
||||||
|
|
||||||
## 21 - INSTRUCCIONES
|
## 21 - INSTRUCCIONES
|
||||||
EXTRA HIT
|
EXTRA HIT
|
||||||
|
|
||||||
## 22 - INSTRUCCIONES
|
## 22 - INSTRUCCIONES
|
||||||
PRESS ANY KEY TO RETURN
|
PRESS ANY KEY TO RETURN
|
||||||
|
|
||||||
## 23 - TITULO
|
## 23 - TITULO
|
||||||
PRESS ANY KEY
|
PRESS ANY KEY
|
||||||
|
|
||||||
## 24 - MENU SELECCION DE IDIOMA
|
## 24 - MENU SELECCION DE IDIOMA
|
||||||
ESPA{OL (SPANISH)
|
ESPA{OL (SPANISH)
|
||||||
|
|
||||||
## 25 - MENU SELECCION DE IDIOMA
|
## 25 - MENU SELECCION DE IDIOMA
|
||||||
BALOONCIA (VALENCIAN)
|
BALOONCIA (VALENCIAN)
|
||||||
|
|
||||||
## 26 - MENU SELECCION DE IDIOMA
|
## 26 - MENU SELECCION DE IDIOMA
|
||||||
ENGLISH
|
ENGLISH
|
||||||
|
|
||||||
## 27 - INTRO
|
## 27 - INTRO
|
||||||
Any day of the year 2000
|
Any day of the year 2000
|
||||||
|
|
||||||
## 28 - INTRO
|
## 28 - INTRO
|
||||||
Everything is quiet at the UPV
|
Everything is quiet at the UPV
|
||||||
|
|
||||||
## 29 - INTRO
|
## 29 - INTRO
|
||||||
Until a bastard arrives...
|
Until a bastard arrives...
|
||||||
|
|
||||||
## 30 - INTRO
|
## 30 - INTRO
|
||||||
YO! GONNA TAKE A CAFELITO...
|
YO! GONNA TAKE A CAFELITO...
|
||||||
|
|
||||||
## 31 - INTRO
|
## 31 - INTRO
|
||||||
AAAAAAAARGHHHH!!!
|
AAAAAAAARGHHHH!!!
|
||||||
|
|
||||||
## 32 - INTRO
|
## 32 - INTRO
|
||||||
Wait a moment...
|
Wait a moment...
|
||||||
|
|
||||||
## 33 - INTRO
|
## 33 - INTRO
|
||||||
I don't have any loose!
|
I don't have any loose!
|
||||||
|
|
||||||
## 34 - INTRO
|
## 34 - INTRO
|
||||||
FUCKING MACHINE!
|
FUCKING MACHINE!
|
||||||
|
|
||||||
## 35 - INTRO
|
## 35 - INTRO
|
||||||
Blop... blop... blop...
|
Blop... blop... blop...
|
||||||
|
|
||||||
## 36 - TEXTOS DEL JUEGO
|
## 36 - TEXTOS DEL JUEGO
|
||||||
Time stopped:
|
Time stopped:
|
||||||
|
|
||||||
## 37 - TEXTOS DEL JUEGO
|
## 37 - TEXTOS DEL JUEGO
|
||||||
D E M O
|
D E M O
|
||||||
|
|
||||||
## 38 - TEXTOS DEL JUEGO
|
## 38 - TEXTOS DEL JUEGO
|
||||||
stages left!
|
stages left!
|
||||||
## 39 -
|
|
||||||
|
|
||||||
## 40 -
|
## 39 - MENU SELECCION DE JUGADOR
|
||||||
|
Select Player
|
||||||
|
|
||||||
## 41 -
|
## 40 - MENU SELECCION DE JUGADOR
|
||||||
|
Back
|
||||||
|
|
||||||
|
## 41 - MENU DE PAUSA
|
||||||
|
Pause Menu
|
||||||
|
|
||||||
## 42 -
|
## 42 -
|
||||||
|
-
|
||||||
|
|
||||||
## 43 - PANTALLA DE GAME OVER
|
## 43 - PANTALLA DE GAME OVER
|
||||||
GAME OVER
|
GAME OVER
|
||||||
|
|
||||||
## 44 - PANTALLA DE GAME OVER
|
## 44 - PANTALLA DE GAME OVER
|
||||||
YOUR SCORE:
|
YOUR SCORE:
|
||||||
|
|
||||||
## 45 - PANTALLA DE GAME OVER
|
## 45 - PANTALLA DE GAME OVER
|
||||||
CONTINUE?
|
CONTINUE?
|
||||||
|
|
||||||
## 46 - MENU DE PAUSA
|
## 46 - MENU DE PAUSA
|
||||||
CONTINUE
|
CONTINUE
|
||||||
|
|
||||||
## 47 - MENU DE PAUSA
|
## 47 - MENU DE PAUSA
|
||||||
LEAVE GAME
|
LEAVE GAME
|
||||||
|
|
||||||
## 48 - MENU GAME OVER
|
## 48 - MENU GAME OVER
|
||||||
YES
|
YES
|
||||||
|
|
||||||
## 49 - MENU GAME OVER
|
## 49 - MENU GAME OVER
|
||||||
NO
|
NO
|
||||||
|
|
||||||
## 50 - TEXTO DE COMPLETAR EL JUEGO
|
## 50 - TEXTO DE COMPLETAR EL JUEGO
|
||||||
Congratulations!!
|
Congratulations!!
|
||||||
|
|
||||||
## 51 - MENU DEL TITULO
|
## 51 - MENU DEL TITULO
|
||||||
1 PLAYER
|
1 PLAYER
|
||||||
|
|
||||||
## 52 - MENU DEL TITULO
|
## 52 - MENU DEL TITULO
|
||||||
2 PLAYERS
|
2 PLAYERS
|
||||||
|
|
||||||
## 53 - MARCADOR
|
## 53 - MARCADOR
|
||||||
player 1
|
player 1
|
||||||
|
|
||||||
## 54 - MARCADOR
|
## 54 - MARCADOR
|
||||||
player 2
|
player 2
|
||||||
|
|
||||||
## 55 - MARCADOR
|
## 55 - MARCADOR
|
||||||
mult
|
mult
|
||||||
|
|
||||||
## 56 - MARCADOR
|
## 56 - MARCADOR
|
||||||
high score
|
high score
|
||||||
|
|
||||||
## 57 - MARCADOR
|
## 57 - MARCADOR
|
||||||
stage
|
stage
|
||||||
|
|
||||||
## 58 - MENU DE OPCIONES
|
## 58 - MENU DE OPCIONES
|
||||||
DISPLAY MODE
|
DISPLAY MODE
|
||||||
|
|
||||||
## 59 - MENU DE OPCIONES
|
## 59 - MENU DE OPCIONES
|
||||||
DIFFICULTY
|
DIFFICULTY
|
||||||
|
|
||||||
## 60 - MENU DE OPCIONES
|
## 60 - MENU DE OPCIONES
|
||||||
FILTER
|
FILTER
|
||||||
|
|
||||||
## 61 - MENU DE OPCIONES
|
## 61 - MENU DE OPCIONES
|
||||||
VSYNC
|
VSYNC
|
||||||
|
|
||||||
## 62 - MENU DE OPCIONES
|
## 62 - MENU DE OPCIONES
|
||||||
PLAYER 1 CONTROLS
|
PLAYER 1 CONTROLS
|
||||||
|
|
||||||
## 63 - MENU DE OPCIONES
|
## 63 - MENU DE OPCIONES
|
||||||
PLAYER 2 CONTROLS
|
PLAYER 2 CONTROLS
|
||||||
|
|
||||||
## 64 -
|
## 64 -
|
||||||
|
-
|
||||||
|
|
||||||
## 65 -
|
## 65 -
|
||||||
|
-
|
||||||
|
|
||||||
## 66 - MENU DE OPCIONES
|
## 66 - MENU DE OPCIONES
|
||||||
EASY
|
EASY
|
||||||
|
|
||||||
## 67 - MENU DE OPCIONES
|
## 67 - MENU DE OPCIONES
|
||||||
NORMAL
|
NORMAL
|
||||||
|
|
||||||
## 68 - MENU DE OPCIONES
|
## 68 - MENU DE OPCIONES
|
||||||
HARD
|
HARD
|
||||||
|
|
||||||
## 69 - MENU DE OPCIONES
|
## 69 - MENU DE OPCIONES
|
||||||
KEYBOARD
|
KEYBOARD
|
||||||
|
|
||||||
## 70 - MENU DE OPCIONES
|
## 70 - MENU DE OPCIONES
|
||||||
GAME CONTROLLER
|
GAME CONTROLLER
|
||||||
|
|
||||||
## 71 - MENU DE OPCIONES
|
## 71 - MENU DE OPCIONES
|
||||||
LINEAL
|
LINEAL
|
||||||
|
|
||||||
## 72 - MENU DE OPCIONES
|
## 72 - MENU DE OPCIONES
|
||||||
NEAREST
|
NEAREST
|
||||||
|
|
||||||
## 73 - MENU DE OPCIONES
|
## 73 - MENU DE OPCIONES
|
||||||
ON
|
ON
|
||||||
|
|
||||||
## 74 - MENU DE OPCIONES
|
## 74 - MENU DE OPCIONES
|
||||||
OFF
|
OFF
|
||||||
|
|
||||||
## 75 - JUEGO
|
## 75 - JUEGO
|
||||||
Get Ready!
|
Get Ready!
|
||||||
|
|
||||||
## 76 - JUEGO
|
## 76 - JUEGO
|
||||||
1.000.000 points!
|
1.000.000 points!
|
||||||
|
|
||||||
## 77 - PANTALLA DE GAME OVER
|
## 77 - PANTALLA DE GAME OVER
|
||||||
PLAYER1 SCORE:
|
PLAYER1 SCORE:
|
||||||
|
|
||||||
## 78 - PANTALLA DE GAME OVER
|
## 78 - PANTALLA DE GAME OVER
|
||||||
PLAYER2 SCORE:
|
PLAYER2 SCORE:
|
||||||
|
|
||||||
## 79 - TEXTOS DEL JUEGO
|
## 79 - TEXTOS DEL JUEGO
|
||||||
Last stage!
|
Last stage!
|
||||||
@@ -1,160 +1,239 @@
|
|||||||
## 0 - MENU DEL TITULO
|
## 0 - MENU DEL TITULO
|
||||||
JUGAR
|
JUGAR
|
||||||
|
|
||||||
## 1 - MENU DEL TITULO
|
## 1 - MENU DEL TITULO
|
||||||
OPCIONES
|
OPCIONES
|
||||||
|
|
||||||
## 2 - MENU DEL TITULO
|
## 2 - MENU DEL TITULO
|
||||||
INSTRUCCIONES
|
INSTRUCCIONES
|
||||||
|
|
||||||
## 3 - MENU DEL TITULO
|
## 3 - MENU DEL TITULO
|
||||||
SALIR
|
SALIR
|
||||||
|
|
||||||
## 4 - MENU DE OPCIONES
|
## 4 - MENU DE OPCIONES
|
||||||
VENTANA
|
VENTANA
|
||||||
|
|
||||||
## 5 - MENU DE OPCIONES
|
## 5 - MENU DE OPCIONES
|
||||||
PANTALLA COMPLETA
|
PANTALLA COMPLETA
|
||||||
|
|
||||||
## 6 - MENU DE OPCIONES
|
## 6 - MENU DE OPCIONES
|
||||||
PANTALLA COMPLETA FALSA
|
PANTALLA COMPLETA FALSA
|
||||||
|
|
||||||
## 7 - MENU DE OPCIONES
|
## 7 - MENU DE OPCIONES
|
||||||
TAMA{O DE VENTANA
|
TAMA{O DE VENTANA
|
||||||
|
|
||||||
## 8 - MENU DE OPCIONES
|
## 8 - MENU DE OPCIONES
|
||||||
IDIOMA
|
IDIOMA
|
||||||
|
|
||||||
## 9 - MENU DE OPCIONES
|
## 9 - MENU DE OPCIONES
|
||||||
[ ACEPTAR ]
|
[ ACEPTAR ]
|
||||||
|
|
||||||
## 10 - MENU DE OPCIONES
|
## 10 - MENU DE OPCIONES
|
||||||
[ CANCELAR ]
|
[ CANCELAR ]
|
||||||
|
|
||||||
## 11 - INSTRUCCIONES
|
## 11 - INSTRUCCIONES
|
||||||
OBJETIVO
|
OBJETIVO
|
||||||
|
|
||||||
## 12 - INSTRUCCIONES
|
## 12 - INSTRUCCIONES
|
||||||
TIENES QUE EXPLOTAR
|
TIENES QUE EXPLOTAR
|
||||||
|
|
||||||
## 13 - INSTRUCCIONES
|
## 13 - INSTRUCCIONES
|
||||||
TANTOS GLOBOS COMO PUEDAS
|
TANTOS GLOBOS COMO PUEDAS
|
||||||
|
|
||||||
## 14 - INSTRUCCIONES
|
## 14 - INSTRUCCIONES
|
||||||
LA DIFICULTAD SE INCREMENTA
|
LA DIFICULTAD SE INCREMENTA
|
||||||
|
|
||||||
## 15 - INSTRUCCIONES
|
## 15 - INSTRUCCIONES
|
||||||
A MEDIDA QUE VAS PUNTUANDO
|
A MEDIDA QUE VAS PUNTUANDO
|
||||||
|
|
||||||
## 16 - INSTRUCCIONES
|
## 16 - INSTRUCCIONES
|
||||||
OBJETOS
|
OBJETOS
|
||||||
|
|
||||||
## 17 - INSTRUCCIONES
|
## 17 - INSTRUCCIONES
|
||||||
1.000 PUNTOS
|
1.000 PUNTOS
|
||||||
|
|
||||||
## 18 - INSTRUCCIONES
|
## 18 - INSTRUCCIONES
|
||||||
2.500 PUNTOS
|
2.500 PUNTOS
|
||||||
|
|
||||||
## 19 - INSTRUCCIONES
|
## 19 - INSTRUCCIONES
|
||||||
5.000 PUNTOS
|
5.000 PUNTOS
|
||||||
|
|
||||||
## 20 - INSTRUCCIONES
|
## 20 - INSTRUCCIONES
|
||||||
DETIENE EL TIEMPO
|
DETIENE EL TIEMPO
|
||||||
|
|
||||||
## 21 - INSTRUCCIONES
|
## 21 - INSTRUCCIONES
|
||||||
VIDA EXTRA
|
VIDA EXTRA
|
||||||
|
|
||||||
## 22 - INSTRUCCIONES
|
## 22 - INSTRUCCIONES
|
||||||
PULSA UNA TECLA PARA VOLVER
|
PULSA UNA TECLA PARA VOLVER
|
||||||
|
|
||||||
## 23 - TITULO
|
## 23 - TITULO
|
||||||
PULSA CUALQUIER TECLA
|
PULSA CUALQUIER TECLA
|
||||||
|
|
||||||
## 24 - MENU SELECCION DE IDIOMA
|
## 24 - MENU SELECCION DE IDIOMA
|
||||||
ESPA{OL
|
ESPA{OL
|
||||||
|
|
||||||
## 25 - MENU SELECCION DE IDIOMA
|
## 25 - MENU SELECCION DE IDIOMA
|
||||||
BALOONCIA (VALENCIANO)
|
BALOONCIA (VALENCIANO)
|
||||||
|
|
||||||
## 26 - MENU SELECCION DE IDIOMA
|
## 26 - MENU SELECCION DE IDIOMA
|
||||||
ENGLISH (INGLES)
|
ENGLISH (INGLES)
|
||||||
|
|
||||||
## 27 - INTRO
|
## 27 - INTRO
|
||||||
Un dia cualquiera del a{o 2000
|
Un dia cualquiera del a{o 2000
|
||||||
|
|
||||||
## 28 - INTRO
|
## 28 - INTRO
|
||||||
Todo esta tranquilo en la UPV
|
Todo esta tranquilo en la UPV
|
||||||
|
|
||||||
## 29 - INTRO
|
## 29 - INTRO
|
||||||
Hasta que un desaprensivo...
|
Hasta que un desaprensivo...
|
||||||
|
|
||||||
## 30 - INTRO
|
## 30 - INTRO
|
||||||
HEY! VOY A SACARME UN TALLADET...
|
HEY! VOY A SACARME UN TALLADET...
|
||||||
|
|
||||||
## 31 - INTRO
|
## 31 - INTRO
|
||||||
UAAAAAAAAAAAAA!!!
|
UAAAAAAAAAAAAA!!!
|
||||||
|
|
||||||
## 32 - INTRO
|
## 32 - INTRO
|
||||||
Espera un momento...
|
Espera un momento...
|
||||||
|
|
||||||
## 33 - INTRO
|
## 33 - INTRO
|
||||||
Si no llevo suelto encima!
|
Si no llevo suelto encima!
|
||||||
|
|
||||||
## 34 - INTRO
|
## 34 - INTRO
|
||||||
MIERDA DE MAQUINA!
|
MIERDA DE MAQUINA!
|
||||||
|
|
||||||
## 35 - INTRO
|
## 35 - INTRO
|
||||||
Blop... blop... blop...
|
Blop... blop... blop...
|
||||||
|
|
||||||
## 36 - TEXTOS DEL JUEGO
|
## 36 - TEXTOS DEL JUEGO
|
||||||
Tiempo:
|
Tiempo:
|
||||||
|
|
||||||
## 37 - TEXTOS DEL JUEGO
|
## 37 - TEXTOS DEL JUEGO
|
||||||
D E M O
|
D E M O
|
||||||
|
|
||||||
## 38 - TEXTOS DEL JUEGO
|
## 38 - TEXTOS DEL JUEGO
|
||||||
fases mas!
|
fases mas!
|
||||||
## 39 -
|
|
||||||
|
|
||||||
## 40 -
|
## 39 - MENU SELECCION DE JUGADOR
|
||||||
|
Selecciona jugador
|
||||||
|
|
||||||
## 41 -
|
## 40 - MENU SELECCION DE JUGADOR
|
||||||
|
Volver
|
||||||
|
|
||||||
|
## 41 - MENU DE PAUSA
|
||||||
|
Menu de pausa
|
||||||
|
|
||||||
## 42 -
|
## 42 -
|
||||||
|
-
|
||||||
|
|
||||||
## 43 - PANTALLA DE GAME OVER
|
## 43 - PANTALLA DE GAME OVER
|
||||||
FIN DE JUEGO
|
FIN DE JUEGO
|
||||||
|
|
||||||
## 44 - PANTALLA DE GAME OVER
|
## 44 - PANTALLA DE GAME OVER
|
||||||
TU PUNTUACION:
|
TU PUNTUACION:
|
||||||
|
|
||||||
## 45 - PANTALLA DE GAME OVER
|
## 45 - PANTALLA DE GAME OVER
|
||||||
CONTINUAR?
|
CONTINUAR?
|
||||||
|
|
||||||
## 46 - MENU DE PAUSA
|
## 46 - MENU DE PAUSA
|
||||||
CONTINUAR
|
CONTINUAR
|
||||||
|
|
||||||
## 47 - MENU DE PAUSA
|
## 47 - MENU DE PAUSA
|
||||||
SALIR DEL JUEGO
|
SALIR DEL JUEGO
|
||||||
|
|
||||||
## 48 - MENU GAME OVER
|
## 48 - MENU GAME OVER
|
||||||
SI
|
SI
|
||||||
|
|
||||||
## 49 - MENU GAME OVER
|
## 49 - MENU GAME OVER
|
||||||
NO
|
NO
|
||||||
|
|
||||||
## 50 - TEXTO DE COMPLETAR EL JUEGO
|
## 50 - TEXTO DE COMPLETAR EL JUEGO
|
||||||
Felicidades!!
|
Felicidades!!
|
||||||
|
|
||||||
## 51 - MENU DEL TITULO
|
## 51 - MENU DEL TITULO
|
||||||
1 JUGADOR
|
1 JUGADOR
|
||||||
|
|
||||||
## 52 - MENU DEL TITULO
|
## 52 - MENU DEL TITULO
|
||||||
2 JUGADORES
|
2 JUGADORES
|
||||||
|
|
||||||
## 53 - MARCADOR
|
## 53 - MARCADOR
|
||||||
jugador 1
|
jugador 1
|
||||||
|
|
||||||
## 54 - MARCADOR
|
## 54 - MARCADOR
|
||||||
jugador 2
|
jugador 2
|
||||||
|
|
||||||
## 55 - MARCADOR
|
## 55 - MARCADOR
|
||||||
mult
|
mult
|
||||||
|
|
||||||
## 56 - MARCADOR
|
## 56 - MARCADOR
|
||||||
max. puntuacion
|
max. puntuacion
|
||||||
|
|
||||||
## 57 - MARCADOR
|
## 57 - MARCADOR
|
||||||
FASE
|
FASE
|
||||||
|
|
||||||
## 58 - MENU DE OPCIONES
|
## 58 - MENU DE OPCIONES
|
||||||
MODO DE VISUALIZACION
|
MODO DE VISUALIZACION
|
||||||
|
|
||||||
## 59 - MENU DE OPCIONES
|
## 59 - MENU DE OPCIONES
|
||||||
DIFICULTAD
|
DIFICULTAD
|
||||||
|
|
||||||
## 60 - MENU DE OPCIONES
|
## 60 - MENU DE OPCIONES
|
||||||
FILTRO
|
FILTRO
|
||||||
|
|
||||||
## 61 - MENU DE OPCIONES
|
## 61 - MENU DE OPCIONES
|
||||||
SINC. VERTICAL
|
SINC. VERTICAL
|
||||||
|
|
||||||
## 62 - MENU DE OPCIONES
|
## 62 - MENU DE OPCIONES
|
||||||
CONTROLES DEL JUGADOR 1
|
CONTROLES DEL JUGADOR 1
|
||||||
|
|
||||||
## 63 - MENU DE OPCIONES
|
## 63 - MENU DE OPCIONES
|
||||||
CONTROLES DEL JUGADOR 2
|
CONTROLES DEL JUGADOR 2
|
||||||
|
|
||||||
## 64 -
|
## 64 -
|
||||||
|
-
|
||||||
|
|
||||||
## 65 -
|
## 65 -
|
||||||
|
-
|
||||||
|
|
||||||
## 66 - MENU DE OPCIONES
|
## 66 - MENU DE OPCIONES
|
||||||
FACIL
|
FACIL
|
||||||
|
|
||||||
## 67 - MENU DE OPCIONES
|
## 67 - MENU DE OPCIONES
|
||||||
NORMAL
|
NORMAL
|
||||||
|
|
||||||
## 68 - MENU DE OPCIONES
|
## 68 - MENU DE OPCIONES
|
||||||
DIFICIL
|
DIFICIL
|
||||||
|
|
||||||
## 69 - MENU DE OPCIONES
|
## 69 - MENU DE OPCIONES
|
||||||
TECLADO
|
TECLADO
|
||||||
|
|
||||||
## 70 - MENU DE OPCIONES
|
## 70 - MENU DE OPCIONES
|
||||||
MANDO
|
MANDO
|
||||||
|
|
||||||
## 71 - MENU DE OPCIONES
|
## 71 - MENU DE OPCIONES
|
||||||
LINEAL
|
LINEAL
|
||||||
|
|
||||||
## 72 - MENU DE OPCIONES
|
## 72 - MENU DE OPCIONES
|
||||||
NEAREST
|
NEAREST
|
||||||
|
|
||||||
## 73 - MENU DE OPCIONES
|
## 73 - MENU DE OPCIONES
|
||||||
ACTIVADA
|
ACTIVADA
|
||||||
|
|
||||||
## 74 - MENU DE OPCIONES
|
## 74 - MENU DE OPCIONES
|
||||||
DESACTIVADA
|
DESACTIVADA
|
||||||
|
|
||||||
## 75 - JUEGO
|
## 75 - JUEGO
|
||||||
Adelante!
|
Adelante!
|
||||||
|
|
||||||
## 76 - JUEGO
|
## 76 - JUEGO
|
||||||
1.000.000 de puntos!
|
1.000.000 de puntos!
|
||||||
|
|
||||||
## 77 - PANTALLA DE GAME OVER
|
## 77 - PANTALLA DE GAME OVER
|
||||||
PUNTUACION J1:
|
PUNTUACION J1:
|
||||||
|
|
||||||
## 78 - PANTALLA DE GAME OVER
|
## 78 - PANTALLA DE GAME OVER
|
||||||
PUNTUACION J2:
|
PUNTUACION J2:
|
||||||
|
|
||||||
## 79 - TEXTOS DEL JUEGO
|
## 79 - TEXTOS DEL JUEGO
|
||||||
Ultima fase!
|
Ultima fase!
|
||||||
@@ -1,22 +1,21 @@
|
|||||||
font_png=smb2.png
|
font_png=smb2.png
|
||||||
font_txt=smb2.txt
|
font_txt=smb2.txt
|
||||||
|
|
||||||
sound_cancel=menu_cancel.wav
|
|
||||||
sound_accept=menu_select.wav
|
|
||||||
sound_move=menu_move.wav
|
sound_move=menu_move.wav
|
||||||
|
sound_accept=menu_select.wav
|
||||||
|
|
||||||
name=GAME OVER
|
name=GAME OVER
|
||||||
x=0
|
x=0
|
||||||
y=112
|
y=120
|
||||||
backgroundType=0
|
backgroundType=0
|
||||||
backgroundColor=0,0,0,255
|
backgroundColor=128,64,0,0
|
||||||
|
|
||||||
areElementsCenteredOnX=true
|
areElementsCenteredOnX=true
|
||||||
isCenteredOnX=true
|
isCenteredOnX=true
|
||||||
centerX=128
|
centerX=199
|
||||||
|
|
||||||
selector_color=84,110,122,0
|
selector_color=255,122,0,255
|
||||||
selector_text_color=255,122,0
|
selector_text_color=255,255,235
|
||||||
|
|
||||||
defaultActionWhenCancel=1
|
defaultActionWhenCancel=1
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
font_png=smb2.png
|
font_png=smb2.png
|
||||||
font_txt=smb2.txt
|
font_txt=smb2.txt
|
||||||
|
|
||||||
sound_cancel=menu_cancel.wav
|
|
||||||
sound_accept=menu_select.wav
|
|
||||||
sound_move=menu_move.wav
|
sound_move=menu_move.wav
|
||||||
|
sound_accept=menu_select.wav
|
||||||
|
|
||||||
name=OPTIONS
|
name=OPTIONS
|
||||||
x=0
|
x=0
|
||||||
@@ -20,7 +19,7 @@ isCenteredOnY=true
|
|||||||
centerY=96
|
centerY=96
|
||||||
|
|
||||||
selector_color=229,28,35,255
|
selector_color=229,28,35,255
|
||||||
selector_text_color=255,180,0
|
selector_text_color=255,241,118
|
||||||
|
|
||||||
defaultActionWhenCancel=13
|
defaultActionWhenCancel=13
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,12 @@
|
|||||||
font_png=smb2.png
|
font_png=smb2.png
|
||||||
font_txt=smb2.txt
|
font_txt=smb2.txt
|
||||||
|
|
||||||
sound_cancel=menu_cancel.wav
|
|
||||||
sound_accept=menu_select.wav
|
|
||||||
sound_move=menu_move.wav
|
sound_move=menu_move.wav
|
||||||
|
sound_accept=menu_select.wav
|
||||||
|
|
||||||
name=PAUSE
|
name=PAUSE
|
||||||
x=0
|
x=0
|
||||||
y=96
|
y=80
|
||||||
backgroundType=1
|
backgroundType=1
|
||||||
backgroundColor=41,57,65,240
|
backgroundColor=41,57,65,240
|
||||||
|
|
||||||
@@ -18,13 +17,19 @@ centerX=128
|
|||||||
selector_color=255,122,0,255
|
selector_color=255,122,0,255
|
||||||
selector_text_color=255,255,255
|
selector_text_color=255,255,255
|
||||||
|
|
||||||
defaultActionWhenCancel=0
|
defaultActionWhenCancel=1
|
||||||
|
|
||||||
[item]
|
[item]
|
||||||
text=SI
|
text=PAUSE MENU
|
||||||
|
hPaddingDown=7
|
||||||
|
selectable=false
|
||||||
|
[/item]
|
||||||
|
|
||||||
|
[item]
|
||||||
|
text=CONTINUE
|
||||||
hPaddingDown=2
|
hPaddingDown=2
|
||||||
[/item]
|
[/item]
|
||||||
|
|
||||||
[item]
|
[item]
|
||||||
text=NO
|
text=LEAVE GAME
|
||||||
[/item]
|
[/item]
|
||||||
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_png=smb2.png
|
||||||
font_txt=smb2.txt
|
font_txt=smb2.txt
|
||||||
|
|
||||||
sound_cancel=menu_cancel.wav
|
|
||||||
sound_accept=menu_select.wav
|
|
||||||
sound_move=menu_move.wav
|
sound_move=menu_move.wav
|
||||||
|
sound_accept=menu_select.wav
|
||||||
|
|
||||||
name=TITLE
|
name=TITLE
|
||||||
x=0
|
x=0
|
||||||
|
|||||||
@@ -493,4 +493,12 @@ void AnimatedSprite::setAnimationCounter(int value)
|
|||||||
{
|
{
|
||||||
a.counter = value;
|
a.counter = value;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reinicia la animación
|
||||||
|
void AnimatedSprite::resetAnimation()
|
||||||
|
{
|
||||||
|
animation.at(currentAnimation).currentFrame = 0;
|
||||||
|
animation.at(currentAnimation).counter = 0;
|
||||||
|
animation.at(currentAnimation).completed = false;
|
||||||
}
|
}
|
||||||
@@ -8,7 +8,6 @@
|
|||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
|
|
||||||
#ifndef ANIMATEDSPRITE_H
|
#ifndef ANIMATEDSPRITE_H
|
||||||
#define ANIMATEDSPRITE_H
|
#define ANIMATEDSPRITE_H
|
||||||
|
|
||||||
@@ -85,6 +84,9 @@ public:
|
|||||||
|
|
||||||
// OLD - Establece el contador para todas las animaciones
|
// OLD - Establece el contador para todas las animaciones
|
||||||
void setAnimationCounter(int value);
|
void setAnimationCounter(int value);
|
||||||
|
|
||||||
|
// Reinicia la animación
|
||||||
|
void resetAnimation();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -7,13 +7,8 @@
|
|||||||
// Constructor
|
// Constructor
|
||||||
Director::Director(std::string path)
|
Director::Director(std::string path)
|
||||||
{
|
{
|
||||||
|
|
||||||
// Inicializa variables
|
// Inicializa variables
|
||||||
section.name = PROG_SECTION_GAME;
|
|
||||||
section.subsection = GAME_SECTION_PLAY_1P;
|
|
||||||
|
|
||||||
section.name = PROG_SECTION_LOGO;
|
section.name = PROG_SECTION_LOGO;
|
||||||
section.subsection = 0;
|
|
||||||
|
|
||||||
// Crea el objeto que controla los ficheros de recursos
|
// Crea el objeto que controla los ficheros de recursos
|
||||||
asset = new Asset(path.substr(0, path.find_last_of("\\/")) + "/../");
|
asset = new Asset(path.substr(0, path.find_last_of("\\/")) + "/../");
|
||||||
@@ -103,7 +98,8 @@ bool Director::initSDL()
|
|||||||
bool success = true;
|
bool success = true;
|
||||||
|
|
||||||
// Inicializa SDL
|
// Inicializa SDL
|
||||||
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_GAMECONTROLLER | SDL_INIT_AUDIO) < 0)
|
if (SDL_Init(SDL_INIT_EVERYTHING) < 0)
|
||||||
|
// if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_GAMECONTROLLER | SDL_INIT_AUDIO) < 0)
|
||||||
{
|
{
|
||||||
printf("SDL could not initialize!\nSDL Error: %s\n", SDL_GetError());
|
printf("SDL could not initialize!\nSDL Error: %s\n", SDL_GetError());
|
||||||
success = false;
|
success = false;
|
||||||
@@ -130,9 +126,13 @@ bool Director::initSDL()
|
|||||||
{
|
{
|
||||||
// Crea un renderizador para la ventana. El vsync se activa en funcion de las opciones
|
// Crea un renderizador para la ventana. El vsync se activa en funcion de las opciones
|
||||||
if (options->vSync)
|
if (options->vSync)
|
||||||
|
{
|
||||||
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
|
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
|
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
|
||||||
|
}
|
||||||
|
|
||||||
if (renderer == nullptr)
|
if (renderer == nullptr)
|
||||||
{
|
{
|
||||||
@@ -182,7 +182,6 @@ bool Director::setFileList()
|
|||||||
asset->add("data/sound/hiscore.wav", t_sound);
|
asset->add("data/sound/hiscore.wav", t_sound);
|
||||||
asset->add("data/sound/itemdrop.wav", t_sound);
|
asset->add("data/sound/itemdrop.wav", t_sound);
|
||||||
asset->add("data/sound/itempickup.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_move.wav", t_sound);
|
||||||
asset->add("data/sound/menu_select.wav", t_sound);
|
asset->add("data/sound/menu_select.wav", t_sound);
|
||||||
asset->add("data/sound/player_collision.wav", t_sound);
|
asset->add("data/sound/player_collision.wav", t_sound);
|
||||||
@@ -211,8 +210,9 @@ bool Director::setFileList()
|
|||||||
|
|
||||||
asset->add("data/gfx/intro.png", t_bitmap);
|
asset->add("data/gfx/intro.png", t_bitmap);
|
||||||
asset->add("data/gfx/logo.png", t_bitmap);
|
asset->add("data/gfx/logo.png", t_bitmap);
|
||||||
|
asset->add("data/gfx/menu_game_over.png", t_bitmap);
|
||||||
asset->add("data/gfx/items.png", t_bitmap);
|
asset->add("data/gfx/menu_game_over_end.png", t_bitmap);
|
||||||
|
|
||||||
asset->add("data/gfx/item_points1_disk.png", t_bitmap);
|
asset->add("data/gfx/item_points1_disk.png", t_bitmap);
|
||||||
asset->add("data/gfx/item_points1_disk.ani", t_data);
|
asset->add("data/gfx/item_points1_disk.ani", t_data);
|
||||||
asset->add("data/gfx/item_points2_gavina.png", t_bitmap);
|
asset->add("data/gfx/item_points2_gavina.png", t_bitmap);
|
||||||
@@ -237,16 +237,19 @@ bool Director::setFileList()
|
|||||||
asset->add("data/gfx/player_body.ani", t_data);
|
asset->add("data/gfx/player_body.ani", t_data);
|
||||||
asset->add("data/gfx/player_legs.ani", t_data);
|
asset->add("data/gfx/player_legs.ani", t_data);
|
||||||
asset->add("data/gfx/player_death.ani", t_data);
|
asset->add("data/gfx/player_death.ani", t_data);
|
||||||
|
asset->add("data/gfx/player_fire.ani", t_data);
|
||||||
|
|
||||||
asset->add("data/gfx/player_bal1_head.png", t_bitmap);
|
asset->add("data/gfx/player_bal1_head.png", t_bitmap);
|
||||||
asset->add("data/gfx/player_bal1_body.png", t_bitmap);
|
asset->add("data/gfx/player_bal1_body.png", t_bitmap);
|
||||||
asset->add("data/gfx/player_bal1_legs.png", t_bitmap);
|
asset->add("data/gfx/player_bal1_legs.png", t_bitmap);
|
||||||
asset->add("data/gfx/player_bal1_death.png", t_bitmap);
|
asset->add("data/gfx/player_bal1_death.png", t_bitmap);
|
||||||
|
asset->add("data/gfx/player_bal1_fire.png", t_bitmap);
|
||||||
|
|
||||||
asset->add("data/gfx/player_arounder_head.png", t_bitmap);
|
asset->add("data/gfx/player_arounder_head.png", t_bitmap);
|
||||||
asset->add("data/gfx/player_arounder_body.png", t_bitmap);
|
asset->add("data/gfx/player_arounder_body.png", t_bitmap);
|
||||||
asset->add("data/gfx/player_arounder_legs.png", t_bitmap);
|
asset->add("data/gfx/player_arounder_legs.png", t_bitmap);
|
||||||
asset->add("data/gfx/player_arounder_death.png", t_bitmap);
|
asset->add("data/gfx/player_arounder_death.png", t_bitmap);
|
||||||
|
asset->add("data/gfx/player_arounder_fire.png", t_bitmap);
|
||||||
|
|
||||||
// Fuentes
|
// Fuentes
|
||||||
asset->add("data/font/8bithud.png", t_font);
|
asset->add("data/font/8bithud.png", t_font);
|
||||||
@@ -272,6 +275,7 @@ bool Director::setFileList()
|
|||||||
asset->add("data/menu/options.men", t_data);
|
asset->add("data/menu/options.men", t_data);
|
||||||
asset->add("data/menu/pause.men", t_data);
|
asset->add("data/menu/pause.men", t_data);
|
||||||
asset->add("data/menu/gameover.men", t_data);
|
asset->add("data/menu/gameover.men", t_data);
|
||||||
|
asset->add("data/menu/player_select.men", t_data);
|
||||||
|
|
||||||
return asset->check();
|
return asset->check();
|
||||||
}
|
}
|
||||||
@@ -297,6 +301,7 @@ bool Director::loadConfigFile()
|
|||||||
options->windowSize = 3;
|
options->windowSize = 3;
|
||||||
options->language = ba_BA;
|
options->language = ba_BA;
|
||||||
options->difficulty = DIFFICULTY_NORMAL;
|
options->difficulty = DIFFICULTY_NORMAL;
|
||||||
|
options->playerSelected = 0;
|
||||||
options->filter = FILTER_NEAREST;
|
options->filter = FILTER_NEAREST;
|
||||||
options->vSync = true;
|
options->vSync = true;
|
||||||
options->screenWidth = GAME_WIDTH;
|
options->screenWidth = GAME_WIDTH;
|
||||||
|
|||||||
751
source/game.cpp
@@ -31,6 +31,8 @@
|
|||||||
#define STAGE_COUNTER 200
|
#define STAGE_COUNTER 200
|
||||||
#define SHAKE_COUNTER 10
|
#define SHAKE_COUNTER 10
|
||||||
#define HELP_COUNTER 1000
|
#define HELP_COUNTER 1000
|
||||||
|
#define GAME_COMPLETED_START_FADE 500
|
||||||
|
#define GAME_COMPLETED_END 700
|
||||||
|
|
||||||
// Formaciones enemigas
|
// Formaciones enemigas
|
||||||
#define NUMBER_OF_ENEMY_FORMATIONS 100
|
#define NUMBER_OF_ENEMY_FORMATIONS 100
|
||||||
@@ -125,11 +127,12 @@ private:
|
|||||||
std::vector<Item *> items; // Vector con los items
|
std::vector<Item *> items; // Vector con los items
|
||||||
std::vector<SmartSprite *> smartSprites; // Vector con los smartsprites
|
std::vector<SmartSprite *> smartSprites; // Vector con los smartsprites
|
||||||
|
|
||||||
LTexture *bulletTexture; // Textura para las balas
|
LTexture *bulletTexture; // Textura para las balas
|
||||||
std::vector<LTexture *> itemTextures; // Vector con las texturas de los items
|
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 *> balloonTextures; // Vector con las texturas de los globos
|
||||||
std::vector<LTexture *> player1Textures; // Vector con las texturas del jugador
|
std::vector<LTexture *> player1Textures; // Vector con las texturas del jugador
|
||||||
std::vector<LTexture *> player2Textures; // 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 *gameBuildingsTexture; // Textura con los edificios de fondo
|
||||||
LTexture *gameCloudsTexture; // Textura con las nubes de fondo
|
LTexture *gameCloudsTexture; // Textura con las nubes de fondo
|
||||||
@@ -137,8 +140,8 @@ private:
|
|||||||
LTexture *gamePowerMeterTexture; // Textura con el marcador de poder de la fase
|
LTexture *gamePowerMeterTexture; // Textura con el marcador de poder de la fase
|
||||||
LTexture *gameSkyColorsTexture; // Textura con los diferentes colores de fondo del juego
|
LTexture *gameSkyColorsTexture; // Textura con los diferentes colores de fondo del juego
|
||||||
LTexture *gameTextTexture; // Textura para los sprites con textos
|
LTexture *gameTextTexture; // Textura para los sprites con textos
|
||||||
|
LTexture *gameOverTexture; // Textura para la pantalla de game over
|
||||||
LTexture *itemTexture; // Textura para los items
|
LTexture *gameOverEndTexture; // Textura para la pantalla de game over de acabar el juego
|
||||||
|
|
||||||
std::vector<std::vector<std::string> *> itemAnimations; // Vector con las animaciones de los items
|
std::vector<std::vector<std::string> *> itemAnimations; // Vector con las animaciones de los items
|
||||||
std::vector<std::vector<std::string> *> playerAnimations; // Vector con las animaciones del jugador
|
std::vector<std::vector<std::string> *> playerAnimations; // Vector con las animaciones del jugador
|
||||||
@@ -164,10 +167,12 @@ private:
|
|||||||
SmartSprite *n2500Sprite; // Sprite con el texto 2.500
|
SmartSprite *n2500Sprite; // Sprite con el texto 2.500
|
||||||
SmartSprite *n5000Sprite; // Sprite con el texto 5.000
|
SmartSprite *n5000Sprite; // Sprite con el texto 5.000
|
||||||
|
|
||||||
Sprite *buildingsSprite; // Sprite con los edificios de fondo
|
Sprite *buildingsSprite; // Sprite con los edificios de fondo
|
||||||
Sprite *skyColorsSprite; // Sprite con los graficos del degradado de color de fondo
|
Sprite *skyColorsSprite; // Sprite con los graficos del degradado de color de fondo
|
||||||
Sprite *grassSprite; // Sprite para la hierba
|
Sprite *grassSprite; // Sprite para la hierba
|
||||||
Sprite *powerMeterSprite; // Sprite para el medidor de poder de la fase
|
Sprite *powerMeterSprite; // Sprite para el medidor de poder de la fase
|
||||||
|
Sprite *gameOverSprite; // Sprite para dibujar los graficos del game over
|
||||||
|
Sprite *gameOverEndSprite; // Sprite para dibujar los graficos del game over de acabar el juego
|
||||||
|
|
||||||
JA_Sound balloonSound; // Sonido para la explosión del globo
|
JA_Sound balloonSound; // Sonido para la explosión del globo
|
||||||
JA_Sound bulletSound; // Sonido para los disparos
|
JA_Sound bulletSound; // Sonido para los disparos
|
||||||
@@ -188,10 +193,9 @@ private:
|
|||||||
JA_Music gameMusic; // Musica de fondo
|
JA_Music gameMusic; // Musica de fondo
|
||||||
|
|
||||||
// Variables
|
// Variables
|
||||||
int numPlayers; // Numero de jugadores
|
int numPlayers; // Numero de jugadores
|
||||||
Uint32 ticks; // Contador de ticks para ajustar la velocidad del programa
|
Uint32 ticks; // Contador de ticks para ajustar la velocidad del programa
|
||||||
Uint8 ticksSpeed; // Velocidad a la que se repiten los bucles del programa
|
Uint8 ticksSpeed; // Velocidad a la que se repiten los bucles del programa
|
||||||
|
|
||||||
Uint32 hiScore; // Puntuación máxima
|
Uint32 hiScore; // Puntuación máxima
|
||||||
bool hiScoreAchieved; // Indica si se ha superado la puntuación máxima
|
bool hiScoreAchieved; // Indica si se ha superado la puntuación máxima
|
||||||
section_t section; // Seccion actual dentro del juego
|
section_t section; // Seccion actual dentro del juego
|
||||||
@@ -201,7 +205,6 @@ private:
|
|||||||
float stageBitmapPath[STAGE_COUNTER]; // Vector con los puntos Y por donde se desplaza el texto
|
float stageBitmapPath[STAGE_COUNTER]; // Vector con los puntos Y por donde se desplaza el texto
|
||||||
float getReadyBitmapPath[STAGE_COUNTER]; // Vector con los puntos X por donde se desplaza el texto
|
float getReadyBitmapPath[STAGE_COUNTER]; // Vector con los puntos X por donde se desplaza el texto
|
||||||
Uint16 deathCounter; // Contador para la animación de muerte del jugador
|
Uint16 deathCounter; // Contador para la animación de muerte del jugador
|
||||||
Uint8 deathIndex; // Indice del vector de smartsprites que contiene el sprite del jugador
|
|
||||||
Uint8 menaceCurrent; // Nivel de amenaza actual
|
Uint8 menaceCurrent; // Nivel de amenaza actual
|
||||||
Uint8 menaceThreshold; // Umbral del nivel de amenaza. Si el nivel de amenaza cae por debajo del umbral, se generan más globos. Si el umbral aumenta, aumenta el numero de globos
|
Uint8 menaceThreshold; // Umbral del nivel de amenaza. Si el nivel de amenaza cae por debajo del umbral, se generan más globos. Si el umbral aumenta, aumenta el numero de globos
|
||||||
bool timeStopped; // Indica si el tiempo está detenido
|
bool timeStopped; // Indica si el tiempo está detenido
|
||||||
@@ -223,13 +226,17 @@ private:
|
|||||||
int gameCompletedCounter; // Contador para el tramo final, cuando se ha completado la partida y ya no aparecen más enemigos
|
int gameCompletedCounter; // Contador para el tramo final, cuando se ha completado la partida y ya no aparecen más enemigos
|
||||||
Uint8 difficulty; // Dificultad del juego
|
Uint8 difficulty; // Dificultad del juego
|
||||||
float difficultyScoreMultiplier; // Multiplicador de puntos en función de la dificultad
|
float difficultyScoreMultiplier; // Multiplicador de puntos en función de la dificultad
|
||||||
|
color_t difficultyColor; // Color asociado a la dificultad
|
||||||
struct options_t *options; // Variable con todas las variables de las opciones del programa
|
struct options_t *options; // Variable con todas las variables de las opciones del programa
|
||||||
Uint8 onePlayerControl; // Variable para almacenar el valor de las opciones
|
Uint8 onePlayerControl; // Variable para almacenar el valor de las opciones
|
||||||
enemyFormation_t enemyFormation[NUMBER_OF_ENEMY_FORMATIONS]; // Vector con todas las formaciones enemigas
|
enemyFormation_t enemyFormation[NUMBER_OF_ENEMY_FORMATIONS]; // Vector con todas las formaciones enemigas
|
||||||
enemyPool_t enemyPool[10]; // Variable con los diferentes conjuntos de formaciones enemigas
|
enemyPool_t enemyPool[10]; // Variable con los diferentes conjuntos de formaciones enemigas
|
||||||
Uint8 lastStageReached; // Contiene el numero de la última pantalla que se ha alcanzado
|
Uint8 lastStageReached; // Contiene el numero de la última pantalla que se ha alcanzado
|
||||||
|
demo_t demo; // Variable con todas las variables relacionadas con el modo demo
|
||||||
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
|
// Actualiza el juego
|
||||||
void update();
|
void update();
|
||||||
@@ -399,9 +406,6 @@ private:
|
|||||||
// Crea un SmartSprite para arrojar el item café al recibir un impacto
|
// Crea un SmartSprite para arrojar el item café al recibir un impacto
|
||||||
void throwCoffee(int x, int y);
|
void throwCoffee(int x, int y);
|
||||||
|
|
||||||
// Crea un SmartSprite para arrojar al jugador al morir
|
|
||||||
void throwPlayer(int x, int y, Player *player);
|
|
||||||
|
|
||||||
// Actualiza los SmartSprites
|
// Actualiza los SmartSprites
|
||||||
void updateSmartSprites();
|
void updateSmartSprites();
|
||||||
|
|
||||||
@@ -462,9 +466,21 @@ private:
|
|||||||
// Agita la pantalla
|
// Agita la pantalla
|
||||||
void shakeScreen();
|
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
|
// Bucle para el menu de pausa del juego
|
||||||
void runPausedGame();
|
void runPausedGame();
|
||||||
|
|
||||||
|
// Actualiza los elementos de la pantalla de game over
|
||||||
|
void updateGameOverScreen();
|
||||||
|
|
||||||
|
// Dibuja los elementos de la pantalla de game over
|
||||||
|
void renderGameOverScreen();
|
||||||
|
|
||||||
// Bucle para la pantalla de game over
|
// Bucle para la pantalla de game over
|
||||||
void runGameOverScreen();
|
void runGameOverScreen();
|
||||||
|
|
||||||
@@ -492,6 +508,9 @@ private:
|
|||||||
// Elimina todos los objetos contenidos en vectores
|
// Elimina todos los objetos contenidos en vectores
|
||||||
void deleteAllVectorObjects();
|
void deleteAllVectorObjects();
|
||||||
|
|
||||||
|
// Recarga las texturas
|
||||||
|
void reloadTextures();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// Constructor
|
// Constructor
|
||||||
Game(int numPlayers, int currentStage, SDL_Renderer *renderer, Screen *screen, Asset *asset, Lang *lang, Input *input, bool demo, options_t *options);
|
Game(int numPlayers, int currentStage, SDL_Renderer *renderer, Screen *screen, Asset *asset, Lang *lang, Input *input, bool demo, options_t *options);
|
||||||
|
|||||||
@@ -3,206 +3,248 @@
|
|||||||
const Uint8 SELF = 0;
|
const Uint8 SELF = 0;
|
||||||
|
|
||||||
// Constructor
|
// Constructor
|
||||||
Instructions::Instructions(SDL_Renderer *renderer, Screen *screen, Asset *mAsset, Lang *lang)
|
Instructions::Instructions(SDL_Renderer *renderer, Screen *screen, Asset *asset, Lang *lang)
|
||||||
{
|
{
|
||||||
// Copia los punteros
|
// Copia los punteros
|
||||||
mRenderer = renderer;
|
this->renderer = renderer;
|
||||||
mScreen = screen;
|
this->screen = screen;
|
||||||
this->mAsset = mAsset;
|
this->asset = asset;
|
||||||
mLang = lang;
|
this->lang = lang;
|
||||||
|
|
||||||
// Reserva memoria para los punteros
|
// Reserva memoria para los punteros
|
||||||
mEventHandler = new SDL_Event();
|
LTexture *item1 = new LTexture(renderer, asset->get("item_points1_disk.png"));
|
||||||
mItemTexture = new LTexture(mRenderer, mAsset->get("items.png"));
|
itemTextures.push_back(item1);
|
||||||
mSprite = new Sprite(0, 0, GAME_WIDTH, GAME_HEIGHT, mItemTexture, mRenderer);
|
|
||||||
mText = new Text(mAsset->get("smb2.png"), mAsset->get("smb2.txt"), mRenderer);
|
LTexture *item2 = new LTexture(renderer, asset->get("item_points2_gavina.png"));
|
||||||
|
itemTextures.push_back(item2);
|
||||||
|
|
||||||
|
LTexture *item3 = new LTexture(renderer, asset->get("item_points3_pacmar.png"));
|
||||||
|
itemTextures.push_back(item3);
|
||||||
|
|
||||||
|
LTexture *item4 = new LTexture(renderer, asset->get("item_clock.png"));
|
||||||
|
itemTextures.push_back(item4);
|
||||||
|
|
||||||
|
LTexture *item5 = new LTexture(renderer, asset->get("item_coffee.png"));
|
||||||
|
itemTextures.push_back(item5);
|
||||||
|
|
||||||
|
LTexture *item6 = new LTexture(renderer, asset->get("item_coffee_machine.png"));
|
||||||
|
itemTextures.push_back(item6);
|
||||||
|
|
||||||
|
eventHandler = new SDL_Event();
|
||||||
|
|
||||||
|
sprite = new Sprite(0, 0, 16, 16, itemTextures.at(0), renderer);
|
||||||
|
text = new Text(asset->get("smb2.png"), asset->get("smb2.txt"), renderer);
|
||||||
|
|
||||||
// Crea un backbuffer para el renderizador
|
// Crea un backbuffer para el renderizador
|
||||||
mBackbuffer = SDL_CreateTexture(mRenderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, GAME_WIDTH, GAME_HEIGHT);
|
backbuffer = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, GAME_WIDTH, GAME_HEIGHT);
|
||||||
if (mBackbuffer == nullptr)
|
if (backbuffer == nullptr)
|
||||||
{
|
{
|
||||||
printf("Backbuffer could not be created!\nSDL Error: %s\n", SDL_GetError());
|
printf("Backbuffer could not be created!\nSDL Error: %s\n", SDL_GetError());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Inicializa variables
|
||||||
|
section.name = SELF;
|
||||||
|
ticks = 0;
|
||||||
|
ticksSpeed = 15;
|
||||||
|
manualQuit = false;
|
||||||
|
counter = 0;
|
||||||
|
counterEnd = 600;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Destructor
|
// Destructor
|
||||||
Instructions::~Instructions()
|
Instructions::~Instructions()
|
||||||
{
|
{
|
||||||
mItemTexture->unload();
|
for (auto texture : itemTextures)
|
||||||
delete mItemTexture;
|
{
|
||||||
|
texture->unload();
|
||||||
|
delete texture;
|
||||||
|
}
|
||||||
|
itemTextures.clear();
|
||||||
|
|
||||||
delete mSprite;
|
delete sprite;
|
||||||
delete mEventHandler;
|
delete eventHandler;
|
||||||
delete mText;
|
delete text;
|
||||||
|
|
||||||
SDL_DestroyTexture(mBackbuffer);
|
SDL_DestroyTexture(backbuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Inicializa las variables necesarias para la sección 'Instructions'
|
// Actualiza las variables
|
||||||
void Instructions::init()
|
void Instructions::update()
|
||||||
{
|
{
|
||||||
// Inicializa variables
|
// Comprueba los eventos
|
||||||
mSection.name = SELF;
|
checkEventHandler();
|
||||||
mTicks = 0;
|
|
||||||
mTicksSpeed = 15;
|
// Actualiza las variables
|
||||||
mManualQuit = false;
|
if (SDL_GetTicks() - ticks > ticksSpeed)
|
||||||
mCounter = 0;
|
{
|
||||||
|
// Actualiza el contador de ticks
|
||||||
|
ticks = SDL_GetTicks();
|
||||||
|
|
||||||
|
if (mode == m_auto)
|
||||||
|
{ // Modo automático
|
||||||
|
counter++;
|
||||||
|
|
||||||
|
if (counter == counterEnd)
|
||||||
|
{
|
||||||
|
section.name = PROG_SECTION_TITLE;
|
||||||
|
section.subsection = TITLE_SECTION_1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{ // Modo manual
|
||||||
|
++counter %= 60000;
|
||||||
|
|
||||||
|
if (manualQuit)
|
||||||
|
{
|
||||||
|
section.name = PROG_SECTION_TITLE;
|
||||||
|
section.subsection = TITLE_SECTION_3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pinta en pantalla
|
||||||
|
void Instructions::render()
|
||||||
|
{
|
||||||
|
// Pinta en pantalla
|
||||||
|
SDL_Rect window = {0, 0, GAME_WIDTH, GAME_HEIGHT};
|
||||||
|
SDL_Rect srcRect = {0, 0, 16, 16};
|
||||||
|
|
||||||
|
const color_t orangeColor = {0xFF, 0x7A, 0x00};
|
||||||
|
|
||||||
|
const SDL_Rect destRect1 = {60, 88 + (16 * 0), 16, 16}; // Disquito
|
||||||
|
const SDL_Rect destRect2 = {60, 88 + (16 * 1), 16, 16}; // Gavineixon
|
||||||
|
const SDL_Rect destRect3 = {60, 88 + (16 * 2), 16, 16}; // Pacmar
|
||||||
|
const SDL_Rect destRect4 = {60, 88 + (16 * 3), 16, 16}; // Time Stopper
|
||||||
|
const SDL_Rect destRect5 = {60, 88 + (16 * 4), 16, 16}; // Coffee
|
||||||
|
|
||||||
|
// Pinta en el backbuffer el texto y los sprites
|
||||||
|
SDL_SetRenderTarget(renderer, backbuffer);
|
||||||
|
SDL_SetRenderDrawColor(renderer, bgColor.r, bgColor.g, bgColor.b, 255);
|
||||||
|
SDL_RenderClear(renderer);
|
||||||
|
|
||||||
|
// Escribe el texto
|
||||||
|
text->writeDX(TXT_CENTER | TXT_COLOR | TXT_SHADOW, SCREEN_CENTER_X, 8, lang->getText(11), 1, orangeColor, 1, shdwTxtColor);
|
||||||
|
text->writeDX(TXT_CENTER | TXT_COLOR | TXT_SHADOW, SCREEN_CENTER_X, 24, lang->getText(12), 1, noColor, 1, shdwTxtColor);
|
||||||
|
text->writeDX(TXT_CENTER | TXT_COLOR | TXT_SHADOW, SCREEN_CENTER_X, 34, lang->getText(13), 1, noColor, 1, shdwTxtColor);
|
||||||
|
text->writeDX(TXT_CENTER | TXT_COLOR | TXT_SHADOW, SCREEN_CENTER_X, 48, lang->getText(14), 1, noColor, 1, shdwTxtColor);
|
||||||
|
text->writeDX(TXT_CENTER | TXT_COLOR | TXT_SHADOW, SCREEN_CENTER_X, 58, lang->getText(15), 1, noColor, 1, shdwTxtColor);
|
||||||
|
text->writeDX(TXT_CENTER | TXT_COLOR | TXT_SHADOW, SCREEN_CENTER_X, 75, lang->getText(16), 1, orangeColor, 1, shdwTxtColor);
|
||||||
|
|
||||||
|
text->writeShadowed(84, 92, lang->getText(17), shdwTxtColor);
|
||||||
|
text->writeShadowed(84, 108, lang->getText(18), shdwTxtColor);
|
||||||
|
text->writeShadowed(84, 124, lang->getText(19), shdwTxtColor);
|
||||||
|
text->writeShadowed(84, 140, lang->getText(20), shdwTxtColor);
|
||||||
|
text->writeShadowed(84, 156, lang->getText(21), shdwTxtColor);
|
||||||
|
|
||||||
|
if ((mode == m_manual) && (counter % 50 > 14))
|
||||||
|
{
|
||||||
|
text->writeDX(TXT_CENTER | TXT_COLOR | TXT_SHADOW, SCREEN_CENTER_X, GAME_HEIGHT - 12, lang->getText(22), 1, orangeColor, 1, shdwTxtColor);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Disquito
|
||||||
|
sprite->setTexture(itemTextures.at(0));
|
||||||
|
sprite->setPos(destRect1);
|
||||||
|
srcRect.y = 16 * (((counter + 12) / 36) % 2);
|
||||||
|
sprite->setSpriteClip(srcRect);
|
||||||
|
sprite->render();
|
||||||
|
|
||||||
|
// Gavineixon
|
||||||
|
sprite->setTexture(itemTextures.at(1));
|
||||||
|
sprite->setPos(destRect2);
|
||||||
|
srcRect.y = 16 * (((counter + 9) / 36) % 2);
|
||||||
|
sprite->setSpriteClip(srcRect);
|
||||||
|
sprite->render();
|
||||||
|
|
||||||
|
// Pacmar
|
||||||
|
sprite->setTexture(itemTextures.at(2));
|
||||||
|
sprite->setPos(destRect3);
|
||||||
|
srcRect.y = 16 * (((counter + 6) / 36) % 2);
|
||||||
|
sprite->setSpriteClip(srcRect);
|
||||||
|
sprite->render();
|
||||||
|
|
||||||
|
// Time Stopper
|
||||||
|
sprite->setTexture(itemTextures.at(3));
|
||||||
|
sprite->setPos(destRect4);
|
||||||
|
srcRect.y = 16 * (((counter + 3) / 36) % 2);
|
||||||
|
sprite->setSpriteClip(srcRect);
|
||||||
|
sprite->render();
|
||||||
|
|
||||||
|
// Coffee
|
||||||
|
sprite->setTexture(itemTextures.at(4));
|
||||||
|
sprite->setPos(destRect5);
|
||||||
|
srcRect.y = 16 * (((counter + 0) / 36) % 2);
|
||||||
|
sprite->setSpriteClip(srcRect);
|
||||||
|
sprite->render();
|
||||||
|
|
||||||
|
// Cambia el destino de renderizado
|
||||||
|
SDL_SetRenderTarget(renderer, nullptr);
|
||||||
|
|
||||||
|
// Prepara para empezar a dibujar en la textura de juego
|
||||||
|
screen->start();
|
||||||
|
|
||||||
|
// Limpia la pantalla
|
||||||
|
screen->clean(bgColor);
|
||||||
|
|
||||||
|
// Establece la ventana del backbuffer
|
||||||
|
if (mode == m_auto)
|
||||||
|
{
|
||||||
|
window.y = std::max(8, GAME_HEIGHT - counter + 100);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
window.y = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Copia el backbuffer al renderizador
|
||||||
|
SDL_RenderCopy(renderer, backbuffer, nullptr, &window);
|
||||||
|
|
||||||
|
// Vuelca el contenido del renderizador en pantalla
|
||||||
|
screen->blit();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Comprueba los eventos
|
||||||
|
void Instructions::checkEventHandler()
|
||||||
|
{
|
||||||
|
// Comprueba los eventos que hay en la cola
|
||||||
|
while (SDL_PollEvent(eventHandler) != 0)
|
||||||
|
{
|
||||||
|
// Evento de salida de la aplicación
|
||||||
|
if (eventHandler->type == SDL_QUIT)
|
||||||
|
{
|
||||||
|
section.name = PROG_SECTION_QUIT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((eventHandler->type == SDL_KEYUP) || (eventHandler->type == SDL_JOYBUTTONUP))
|
||||||
|
{
|
||||||
|
if (mode == m_auto)
|
||||||
|
{
|
||||||
|
JA_StopMusic();
|
||||||
|
section.name = PROG_SECTION_TITLE;
|
||||||
|
section.subsection = TITLE_SECTION_1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (counter > 30)
|
||||||
|
{
|
||||||
|
manualQuit = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Bucle para la pantalla de instrucciones
|
// Bucle para la pantalla de instrucciones
|
||||||
void Instructions::run(Uint8 mode)
|
section_t Instructions::run(mode_e mode)
|
||||||
{
|
{
|
||||||
init();
|
this->mode = mode;
|
||||||
|
|
||||||
while (mSection.name == SELF)
|
while (section.name == SELF)
|
||||||
{
|
{
|
||||||
// Comprueba los eventos que hay en la cola
|
update();
|
||||||
while (SDL_PollEvent(mEventHandler) != 0)
|
render();
|
||||||
{
|
|
||||||
// Evento de salida de la aplicación
|
|
||||||
if (mEventHandler->type == SDL_QUIT)
|
|
||||||
{
|
|
||||||
mSection.name = PROG_SECTION_QUIT;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((mEventHandler->type == SDL_KEYDOWN) || (mEventHandler->type == SDL_JOYBUTTONDOWN))
|
|
||||||
{
|
|
||||||
if (mode == INSTRUCTIONS_MODE_AUTO)
|
|
||||||
{
|
|
||||||
JA_StopMusic();
|
|
||||||
mSection.name = PROG_SECTION_TITLE;
|
|
||||||
mSection.subsection = TITLE_SECTION_1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mManualQuit = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Actualiza las variables
|
|
||||||
if (SDL_GetTicks() - mTicks > mTicksSpeed)
|
|
||||||
{
|
|
||||||
// Actualiza el contador de ticks
|
|
||||||
mTicks = SDL_GetTicks();
|
|
||||||
|
|
||||||
if (mode == INSTRUCTIONS_MODE_AUTO)
|
|
||||||
{ // Modo automático
|
|
||||||
mCounter++;
|
|
||||||
|
|
||||||
if (mCounter == INSTRUCTIONS_COUNTER)
|
|
||||||
{
|
|
||||||
mSection.name = PROG_SECTION_TITLE;
|
|
||||||
mSection.subsection = TITLE_SECTION_1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{ // Modo manual
|
|
||||||
++mCounter %= 60000;
|
|
||||||
|
|
||||||
if (mManualQuit)
|
|
||||||
{
|
|
||||||
mSection.name = PROG_SECTION_TITLE;
|
|
||||||
mSection.subsection = TITLE_SECTION_3;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Pinta en pantalla
|
|
||||||
SDL_Rect window = {0, 0, GAME_WIDTH, GAME_HEIGHT};
|
|
||||||
SDL_Rect srcRect = {0, 0, 16, 16};
|
|
||||||
|
|
||||||
const color_t orangeColor = {0xFF, 0x7A, 0x00};
|
|
||||||
|
|
||||||
const SDL_Rect destRect1 = {60, 88 + (16 * 0), 16, 16}; // Disquito
|
|
||||||
const SDL_Rect destRect2 = {60, 88 + (16 * 1), 16, 16}; // Gavineixon
|
|
||||||
const SDL_Rect destRect3 = {60, 88 + (16 * 2), 16, 16}; // Pacmar
|
|
||||||
const SDL_Rect destRect4 = {60, 88 + (16 * 3), 16, 16}; // Time Stopper
|
|
||||||
const SDL_Rect destRect5 = {60, 88 + (16 * 4), 16, 16}; // Coffee
|
|
||||||
|
|
||||||
// Pinta en el backbuffer el texto y los sprites
|
|
||||||
SDL_SetRenderTarget(mRenderer, mBackbuffer);
|
|
||||||
SDL_SetRenderDrawColor(mRenderer, bgColor.r, bgColor.g, bgColor.b, 255);
|
|
||||||
SDL_RenderClear(mRenderer);
|
|
||||||
|
|
||||||
// Escribe el texto
|
|
||||||
mText->writeDX(TXT_CENTER | TXT_COLOR | TXT_SHADOW, SCREEN_CENTER_X, 8, mLang->getText(11), 1, orangeColor, 1, shdwTxtColor);
|
|
||||||
mText->writeDX(TXT_CENTER | TXT_COLOR | TXT_SHADOW, SCREEN_CENTER_X, 24, mLang->getText(12), 1, noColor, 1, shdwTxtColor);
|
|
||||||
mText->writeDX(TXT_CENTER | TXT_COLOR | TXT_SHADOW, SCREEN_CENTER_X, 34, mLang->getText(13), 1, noColor, 1, shdwTxtColor);
|
|
||||||
mText->writeDX(TXT_CENTER | TXT_COLOR | TXT_SHADOW, SCREEN_CENTER_X, 48, mLang->getText(14), 1, noColor, 1, shdwTxtColor);
|
|
||||||
mText->writeDX(TXT_CENTER | TXT_COLOR | TXT_SHADOW, SCREEN_CENTER_X, 58, mLang->getText(15), 1, noColor, 1, shdwTxtColor);
|
|
||||||
mText->writeDX(TXT_CENTER | TXT_COLOR | TXT_SHADOW, SCREEN_CENTER_X, 75, mLang->getText(16), 1, orangeColor, 1, shdwTxtColor);
|
|
||||||
|
|
||||||
mText->writeShadowed(84, 92, mLang->getText(17), shdwTxtColor);
|
|
||||||
mText->writeShadowed(84, 108, mLang->getText(18), shdwTxtColor);
|
|
||||||
mText->writeShadowed(84, 124, mLang->getText(19), shdwTxtColor);
|
|
||||||
mText->writeShadowed(84, 140, mLang->getText(20), shdwTxtColor);
|
|
||||||
mText->writeShadowed(84, 156, mLang->getText(21), shdwTxtColor);
|
|
||||||
|
|
||||||
if ((mode == INSTRUCTIONS_MODE_MANUAL) && (mCounter % 50 > 14))
|
|
||||||
{
|
|
||||||
mText->writeDX(TXT_CENTER | TXT_COLOR | TXT_SHADOW, SCREEN_CENTER_X, GAME_HEIGHT - 12, mLang->getText(22), 1, orangeColor, 1, shdwTxtColor);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Disquito
|
|
||||||
mSprite->setPos(destRect1);
|
|
||||||
srcRect.x = 0;
|
|
||||||
srcRect.y = 16 * (((mCounter + 12) / 36) % 2);
|
|
||||||
mSprite->setSpriteClip(srcRect);
|
|
||||||
mSprite->render();
|
|
||||||
|
|
||||||
// Gavineixon
|
|
||||||
mSprite->setPos(destRect2);
|
|
||||||
srcRect.x += srcRect.w;
|
|
||||||
srcRect.y = 16 * (((mCounter + 9) / 36) % 2);
|
|
||||||
mSprite->setSpriteClip(srcRect);
|
|
||||||
mSprite->render();
|
|
||||||
|
|
||||||
// Pacmar
|
|
||||||
mSprite->setPos(destRect3);
|
|
||||||
srcRect.x += srcRect.w;
|
|
||||||
srcRect.y = 16 * (((mCounter + 6) / 36) % 2);
|
|
||||||
mSprite->setSpriteClip(srcRect);
|
|
||||||
mSprite->render();
|
|
||||||
|
|
||||||
// Time Stopper
|
|
||||||
mSprite->setPos(destRect4);
|
|
||||||
srcRect.x += srcRect.w;
|
|
||||||
srcRect.y = 16 * (((mCounter + 3) / 36) % 2);
|
|
||||||
mSprite->setSpriteClip(srcRect);
|
|
||||||
mSprite->render();
|
|
||||||
|
|
||||||
// Coffee
|
|
||||||
mSprite->setPos(destRect5);
|
|
||||||
srcRect.x += (srcRect.w * 2); // Se salta el icono del TNT
|
|
||||||
srcRect.y = 16 * (((mCounter + 0) / 36) % 2);
|
|
||||||
mSprite->setSpriteClip(srcRect);
|
|
||||||
mSprite->render();
|
|
||||||
|
|
||||||
// Cambia el destino de renderizado
|
|
||||||
SDL_SetRenderTarget(mRenderer, nullptr);
|
|
||||||
|
|
||||||
// Prepara para empezar a dibujar en la textura de juego
|
|
||||||
mScreen->start();
|
|
||||||
|
|
||||||
// Limpia la pantalla
|
|
||||||
mScreen->clean(bgColor);
|
|
||||||
|
|
||||||
// Establece la ventana del backbuffer
|
|
||||||
if (mode == INSTRUCTIONS_MODE_AUTO)
|
|
||||||
{
|
|
||||||
window.y = std::max(8, GAME_HEIGHT - mCounter + 100);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
window.y = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Copia el backbuffer al renderizador
|
|
||||||
SDL_RenderCopy(mRenderer, mBackbuffer, nullptr, &window);
|
|
||||||
|
|
||||||
// Vuelca el contenido del renderizador en pantalla
|
|
||||||
mScreen->blit();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return section;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,31 +12,35 @@
|
|||||||
#ifndef INSTRUCTIONS_H
|
#ifndef INSTRUCTIONS_H
|
||||||
#define INSTRUCTIONS_H
|
#define INSTRUCTIONS_H
|
||||||
|
|
||||||
// Contadores
|
enum mode_e
|
||||||
#define INSTRUCTIONS_COUNTER 600
|
{
|
||||||
|
m_manual,
|
||||||
// Modo para las instrucciones
|
m_auto
|
||||||
#define INSTRUCTIONS_MODE_MANUAL 0
|
};
|
||||||
#define INSTRUCTIONS_MODE_AUTO 1
|
|
||||||
|
|
||||||
// Clase Instructions
|
// Clase Instructions
|
||||||
class Instructions
|
class Instructions
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
SDL_Renderer *mRenderer; // El renderizador de la ventana
|
// Objetos
|
||||||
Screen *mScreen; // Objeto encargado de dibujar en pantalla
|
SDL_Renderer *renderer; // El renderizador de la ventana
|
||||||
LTexture *mItemTexture; // Textura con los graficos
|
Screen *screen; // Objeto encargado de dibujar en pantalla
|
||||||
SDL_Event *mEventHandler; // Manejador de eventos
|
std::vector<LTexture *> itemTextures; // Vector con las texturas de los items
|
||||||
SDL_Texture *mBackbuffer; // Textura para usar como backbuffer
|
SDL_Event *eventHandler; // Manejador de eventos
|
||||||
Sprite *mSprite; // Sprite con la textura de las instrucciones
|
SDL_Texture *backbuffer; // Textura para usar como backbuffer
|
||||||
Asset *mAsset; // Objeto que gestiona todos los ficheros de recursos
|
Sprite *sprite; // Sprite con la textura de las instrucciones
|
||||||
Lang *mLang; // Objeto para gestionar los textos en diferentes idiomas
|
Asset *asset; // Objeto que gestiona todos los ficheros de recursos
|
||||||
Text *mText; // Objeto para escribir texto
|
Lang *lang; // Objeto para gestionar los textos en diferentes idiomas
|
||||||
Uint16 mCounter; // Contador
|
Text *text; // Objeto para escribir texto
|
||||||
section_t mSection; // Estado del bucle principal para saber si continua o se sale
|
|
||||||
Uint32 mTicks; // Contador de ticks para ajustar la velocidad del programa
|
// Variables
|
||||||
Uint32 mTicksSpeed; // Velocidad a la que se repiten los bucles del programa
|
Uint16 counter; // Contador
|
||||||
bool mManualQuit; // Indica si se quiere salir del modo manual
|
Uint16 counterEnd; // Valor final para el contador
|
||||||
|
section_t section; // Estado del bucle principal para saber si continua o se sale
|
||||||
|
Uint32 ticks; // Contador de ticks para ajustar la velocidad del programa
|
||||||
|
Uint32 ticksSpeed; // Velocidad a la que se repiten los bucles del programa
|
||||||
|
bool manualQuit; // Indica si se quiere salir del modo manual
|
||||||
|
mode_e mode; // Modo en el que se van a ejecutar las instrucciones
|
||||||
|
|
||||||
// Actualiza las variables
|
// Actualiza las variables
|
||||||
void update();
|
void update();
|
||||||
@@ -44,8 +48,8 @@ private:
|
|||||||
// Pinta en pantalla
|
// Pinta en pantalla
|
||||||
void render();
|
void render();
|
||||||
|
|
||||||
// Inicializa las variables
|
// Comprueba los eventos
|
||||||
void init();
|
void checkEventHandler();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// Constructor
|
// Constructor
|
||||||
@@ -55,7 +59,7 @@ public:
|
|||||||
~Instructions();
|
~Instructions();
|
||||||
|
|
||||||
// Bucle principal
|
// Bucle principal
|
||||||
void run(Uint8 mode);
|
section_t run(mode_e mode);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -101,19 +101,19 @@ Intro::Intro(SDL_Renderer *renderer, Screen *screen, Asset *asset, Lang *lang)
|
|||||||
|
|
||||||
// Un dia qualsevol de l'any 2000
|
// Un dia qualsevol de l'any 2000
|
||||||
texts.at(0)->setCaption(lang->getText(27));
|
texts.at(0)->setCaption(lang->getText(27));
|
||||||
texts.at(0)->setSpeed(10);
|
texts.at(0)->setSpeed(8);
|
||||||
|
|
||||||
// Tot esta tranquil a la UPV
|
// Tot esta tranquil a la UPV
|
||||||
texts.at(1)->setCaption(lang->getText(28));
|
texts.at(1)->setCaption(lang->getText(28));
|
||||||
texts.at(1)->setSpeed(10);
|
texts.at(1)->setSpeed(8);
|
||||||
|
|
||||||
// Fins que un desaprensiu...
|
// Fins que un desaprensiu...
|
||||||
texts.at(2)->setCaption(lang->getText(29));
|
texts.at(2)->setCaption(lang->getText(29));
|
||||||
texts.at(2)->setSpeed(15);
|
texts.at(2)->setSpeed(12);
|
||||||
|
|
||||||
// HEY! ME ANE A FERME UN CORTAET...
|
// HEY! ME ANE A FERME UN CORTAET...
|
||||||
texts.at(3)->setCaption(lang->getText(30));
|
texts.at(3)->setCaption(lang->getText(30));
|
||||||
texts.at(3)->setSpeed(10);
|
texts.at(3)->setSpeed(8);
|
||||||
|
|
||||||
// UAAAAAAAAAAAAA!!!
|
// UAAAAAAAAAAAAA!!!
|
||||||
texts.at(4)->setCaption(lang->getText(31));
|
texts.at(4)->setCaption(lang->getText(31));
|
||||||
@@ -121,7 +121,7 @@ Intro::Intro(SDL_Renderer *renderer, Screen *screen, Asset *asset, Lang *lang)
|
|||||||
|
|
||||||
// Espera un moment...
|
// Espera un moment...
|
||||||
texts.at(5)->setCaption(lang->getText(32));
|
texts.at(5)->setCaption(lang->getText(32));
|
||||||
texts.at(5)->setSpeed(20);
|
texts.at(5)->setSpeed(16);
|
||||||
|
|
||||||
// Si resulta que no tinc solt!
|
// Si resulta que no tinc solt!
|
||||||
texts.at(6)->setCaption(lang->getText(33));
|
texts.at(6)->setCaption(lang->getText(33));
|
||||||
@@ -133,7 +133,7 @@ Intro::Intro(SDL_Renderer *renderer, Screen *screen, Asset *asset, Lang *lang)
|
|||||||
|
|
||||||
// Blop... blop... blop...
|
// Blop... blop... blop...
|
||||||
texts.at(8)->setCaption(lang->getText(35));
|
texts.at(8)->setCaption(lang->getText(35));
|
||||||
texts.at(8)->setSpeed(20);
|
texts.at(8)->setSpeed(16);
|
||||||
|
|
||||||
for (auto text : texts)
|
for (auto text : texts)
|
||||||
{
|
{
|
||||||
@@ -190,6 +190,37 @@ void Intro::checkEventHandler()
|
|||||||
JA_StopMusic();
|
JA_StopMusic();
|
||||||
section.name = PROG_SECTION_TITLE;
|
section.name = PROG_SECTION_TITLE;
|
||||||
section.subsection = TITLE_SECTION_1;
|
section.subsection = TITLE_SECTION_1;
|
||||||
|
|
||||||
|
switch (eventHandler->key.keysym.scancode)
|
||||||
|
{
|
||||||
|
case SDL_SCANCODE_F:
|
||||||
|
screen->switchVideoMode();
|
||||||
|
texture->reLoad();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SDL_SCANCODE_F1:
|
||||||
|
screen->setWindowSize(1);
|
||||||
|
texture->reLoad();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SDL_SCANCODE_F2:
|
||||||
|
screen->setWindowSize(2);
|
||||||
|
texture->reLoad();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SDL_SCANCODE_F3:
|
||||||
|
screen->setWindowSize(3);
|
||||||
|
texture->reLoad();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SDL_SCANCODE_F4:
|
||||||
|
screen->setWindowSize(4);
|
||||||
|
texture->reLoad();
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,20 +46,20 @@ bool Lang::setLang(Uint8 lang)
|
|||||||
if (rfile.is_open() && rfile.good())
|
if (rfile.is_open() && rfile.good())
|
||||||
{
|
{
|
||||||
success = true;
|
success = true;
|
||||||
std::string buffer;
|
std::string line;
|
||||||
|
|
||||||
// lee el resto de datos del fichero
|
// lee el resto de datos del fichero
|
||||||
int index = 0;
|
int index = 0;
|
||||||
int line_read = 0;
|
while (std::getline(rfile, line))
|
||||||
while (std::getline(rfile, buffer))
|
|
||||||
{
|
{
|
||||||
// Almacena solo las lineas impares
|
// Almacena solo las lineas que no empiezan por # o no esten vacias
|
||||||
if (line_read % 2 == 1)
|
const bool test1 = line.substr(0,1) != "#";
|
||||||
mTextStrings[index++] = buffer;
|
const bool test2 = !line.empty();
|
||||||
|
if (test1 && test2)
|
||||||
// Limpia el buffer
|
{
|
||||||
buffer.clear();
|
mTextStrings[index] = line;
|
||||||
line_read++;
|
index++;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
103
source/menu.cpp
@@ -20,6 +20,7 @@ Menu::Menu(SDL_Renderer *renderer, Asset *asset, Input *input, std::string file)
|
|||||||
itemSelected = MENU_NO_OPTION;
|
itemSelected = MENU_NO_OPTION;
|
||||||
x = 0;
|
x = 0;
|
||||||
y = 0;
|
y = 0;
|
||||||
|
w = 0;
|
||||||
rectBG.rect = {0, 0, 0, 0};
|
rectBG.rect = {0, 0, 0, 0};
|
||||||
rectBG.color = {0, 0, 0};
|
rectBG.color = {0, 0, 0};
|
||||||
rectBG.a = 0;
|
rectBG.a = 0;
|
||||||
@@ -57,6 +58,9 @@ Menu::Menu(SDL_Renderer *renderer, Asset *asset, Input *input, std::string file)
|
|||||||
{
|
{
|
||||||
load(file);
|
load(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Deja el cursor en el primer elemento
|
||||||
|
reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
Menu::~Menu()
|
Menu::~Menu()
|
||||||
@@ -491,6 +495,13 @@ void Menu::reset()
|
|||||||
selector.originH = selector.targetH = item[0].rect.h;
|
selector.originH = selector.targetH = item[0].rect.h;
|
||||||
selector.moving = false;
|
selector.moving = false;
|
||||||
selector.resizing = 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
|
// Actualiza el menu para recolocarlo correctamente y establecer el tamaño
|
||||||
@@ -554,7 +565,7 @@ bool Menu::decreaseSelectorIndex()
|
|||||||
// Calcula cual es el siguiente elemento
|
// Calcula cual es el siguiente elemento
|
||||||
if (selector.index == 0)
|
if (selector.index == 0)
|
||||||
{
|
{
|
||||||
selector.index = item.size();
|
selector.index = item.size() - 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -565,7 +576,7 @@ bool Menu::decreaseSelectorIndex()
|
|||||||
{
|
{
|
||||||
if (selector.index == 0)
|
if (selector.index == 0)
|
||||||
{
|
{
|
||||||
selector.index = item.size();
|
selector.index = item.size() - 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -608,8 +619,6 @@ void Menu::render()
|
|||||||
|
|
||||||
// Renderiza el rectangulo del selector
|
// Renderiza el rectangulo del selector
|
||||||
const SDL_Rect temp = {selector.rect.x, selector.rect.y - 1, selector.rect.w, selector.rect.h + 1};
|
const SDL_Rect temp = {selector.rect.x, selector.rect.y - 1, selector.rect.w, selector.rect.h + 1};
|
||||||
// temp.y--;
|
|
||||||
// temp.h++;
|
|
||||||
SDL_SetRenderDrawColor(renderer, selector.color.r, selector.color.g, selector.color.b, selector.a);
|
SDL_SetRenderDrawColor(renderer, selector.color.r, selector.color.g, selector.color.b, selector.a);
|
||||||
SDL_RenderFillRect(renderer, &temp);
|
SDL_RenderFillRect(renderer, &temp);
|
||||||
|
|
||||||
@@ -628,17 +637,18 @@ void Menu::render()
|
|||||||
const color_t color = {selector.itemColor.r, selector.itemColor.g, selector.itemColor.b};
|
const color_t color = {selector.itemColor.r, selector.itemColor.g, selector.itemColor.b};
|
||||||
text->writeColored(item[i].rect.x, item[i].rect.y, item[i].label, color);
|
text->writeColored(item[i].rect.x, item[i].rect.y, item[i].label, color);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (item[i].selectable)
|
else if (item[i].selectable)
|
||||||
{
|
{
|
||||||
text->write(item[i].rect.x, item[i].rect.y, item[i].label);
|
text->write(item[i].rect.x, item[i].rect.y, item[i].label);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (item[i].greyed)
|
else if (item[i].greyed)
|
||||||
{
|
{
|
||||||
text->writeColored(item[i].rect.x, item[i].rect.y, item[i].label, colorGreyed);
|
text->writeColored(item[i].rect.x, item[i].rect.y, item[i].label, colorGreyed);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
// No seleccionable
|
{ // No seleccionable
|
||||||
{
|
|
||||||
if ((item[i].linkedUp) && (i == selector.index + 1))
|
if ((item[i].linkedUp) && (i == selector.index + 1))
|
||||||
{
|
{
|
||||||
const color_t color = {selector.itemColor.r, selector.itemColor.g, selector.itemColor.b};
|
const color_t color = {selector.itemColor.r, selector.itemColor.g, selector.itemColor.b};
|
||||||
@@ -653,13 +663,45 @@ void Menu::render()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Establece el rectangulo de fondo del menu y el selector
|
// Establece el rectangulo de fondo del menu y el selector
|
||||||
void Menu::setRectSize()
|
void Menu::setRectSize(int w, int h)
|
||||||
{
|
{
|
||||||
rectBG.rect.w = findWidth() + text->getCharacterSize();
|
// Establece el ancho
|
||||||
rectBG.rect.h = findHeight() + text->getCharacterSize();
|
if (w == 0)
|
||||||
|
{ // Si no se pasa un valor, se busca si hay uno prefijado
|
||||||
|
if (this->w == 0)
|
||||||
|
{ // Si no hay prefijado, coge el item mas ancho
|
||||||
|
rectBG.rect.w = findWidth() + text->getCharacterSize();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{ // Si hay prefijado, coge ese
|
||||||
|
rectBG.rect.w = this->w;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{ // Si se pasa un valor, se usa y se prefija
|
||||||
|
rectBG.rect.w = w;
|
||||||
|
this->w = w;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Establece el alto
|
||||||
|
if (h == 0)
|
||||||
|
{ // Si no se pasa un valor, se busca de manera automatica
|
||||||
|
rectBG.rect.h = findHeight() + text->getCharacterSize();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{ // Si se pasa un valor, se aplica
|
||||||
|
rectBG.rect.h = h;
|
||||||
|
}
|
||||||
|
|
||||||
// La posición X es la del menú menos medio caracter
|
// La posición X es la del menú menos medio caracter
|
||||||
rectBG.rect.x = x - (text->getCharacterSize() / 2);
|
if (this->w != 0)
|
||||||
|
{ // Si el ancho esta prefijado, la x coinccide
|
||||||
|
rectBG.rect.x = x;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{ // Si el ancho es automatico, se le da un poco de margen
|
||||||
|
rectBG.rect.x = x - (text->getCharacterSize() / 2);
|
||||||
|
}
|
||||||
|
|
||||||
// La posición Y es la del menu menos la altura de medio caracter
|
// La posición Y es la del menu menos la altura de medio caracter
|
||||||
rectBG.rect.y = y - (text->getCharacterSize() / 2);
|
rectBG.rect.y = y - (text->getCharacterSize() / 2);
|
||||||
@@ -692,10 +734,28 @@ void Menu::setSelectorTextColor(color_t color)
|
|||||||
void Menu::centerMenuOnX(int value)
|
void Menu::centerMenuOnX(int value)
|
||||||
{
|
{
|
||||||
isCenteredOnX = true;
|
isCenteredOnX = true;
|
||||||
centerX = value;
|
if (value != 0)
|
||||||
|
{
|
||||||
|
centerX = value;
|
||||||
|
}
|
||||||
|
else if (centerX == 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Establece la nueva posición centrada en funcion del elemento más ancho
|
// Establece la nueva posición centrada en funcion del elemento más ancho o del ancho fijo del menu
|
||||||
x = (value) - (findWidth() / 2);
|
if (w != 0)
|
||||||
|
{ // Si se ha definido un ancho fijo
|
||||||
|
x = (centerX) - (w / 2);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{ // Si se actua en función del elemento más ancho
|
||||||
|
x = (centerX) - (findWidth() / 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Actualiza el rectangulo de fondo y del selector
|
||||||
|
rectBG.rect.x = x;
|
||||||
|
selector.rect.x = x;
|
||||||
|
|
||||||
// Reposiciona los elementos del menu
|
// Reposiciona los elementos del menu
|
||||||
for (auto &i : item)
|
for (auto &i : item)
|
||||||
@@ -705,6 +765,12 @@ void Menu::centerMenuOnX(int value)
|
|||||||
|
|
||||||
// Recalcula el rectangulo de fondo
|
// Recalcula el rectangulo de fondo
|
||||||
setRectSize();
|
setRectSize();
|
||||||
|
|
||||||
|
// Vuelve a centrar los elementos si fuera el caso
|
||||||
|
if (areElementsCenteredOnX)
|
||||||
|
{
|
||||||
|
centerMenuElementsOnX();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Centra el menu respecto un punto en el eje Y
|
// Centra el menu respecto un punto en el eje Y
|
||||||
@@ -738,13 +804,13 @@ void Menu::centerMenuElementsOnX()
|
|||||||
void Menu::addItem(std::string text, int hPaddingDown, bool selectable, bool greyed, bool linkedDown)
|
void Menu::addItem(std::string text, int hPaddingDown, bool selectable, bool greyed, bool linkedDown)
|
||||||
{
|
{
|
||||||
item_t temp;
|
item_t temp;
|
||||||
|
|
||||||
if (item.empty())
|
if (item.empty())
|
||||||
{// Si es el primer item coge la posición en el eje Y del propio menu
|
{ // Si es el primer item coge la posición en el eje Y del propio menu
|
||||||
temp.rect.y = y;
|
temp.rect.y = y;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{// En caso contrario, coge la posición en el eje Y a partir del último elemento
|
{ // En caso contrario, coge la posición en el eje Y a partir del último elemento
|
||||||
temp.rect.y = item.back().rect.y + item.back().rect.h + item.back().hPaddingDown;
|
temp.rect.y = item.back().rect.y + item.back().rect.h + item.back().hPaddingDown;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -755,7 +821,7 @@ void Menu::addItem(std::string text, int hPaddingDown, bool selectable, bool gre
|
|||||||
temp.linkedDown = linkedDown;
|
temp.linkedDown = linkedDown;
|
||||||
|
|
||||||
item.push_back(temp);
|
item.push_back(temp);
|
||||||
|
|
||||||
setItemCaption(item.size() - 1, text);
|
setItemCaption(item.size() - 1, text);
|
||||||
|
|
||||||
if (item.size() > 1)
|
if (item.size() > 1)
|
||||||
@@ -777,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.w = this->text->lenght(item.at(index).label);
|
||||||
item.at(index).rect.h = this->text->getCharacterSize();
|
item.at(index).rect.h = this->text->getCharacterSize();
|
||||||
reorganize();
|
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
|
// Establece el indice del itemm que se usará por defecto al cancelar el menu
|
||||||
|
|||||||
@@ -68,6 +68,13 @@ private:
|
|||||||
int a; // Cantidad de transparencia para el rectangulo del selector
|
int a; // Cantidad de transparencia para el rectangulo del selector
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Objetos
|
||||||
|
SDL_Renderer *renderer; // Puntero al renderizador de la ventana
|
||||||
|
Text *text; // Texto para poder escribir los items del menu
|
||||||
|
Input *input; // Gestor de eventos de entrada de teclado o gamepad
|
||||||
|
Asset *asset; // Objeto para gestionar los ficheros de recursos
|
||||||
|
|
||||||
|
// Variables
|
||||||
std::string name; // Nombre del menu
|
std::string name; // Nombre del menu
|
||||||
int x; // Posición en el eje X de la primera letra del primer elemento
|
int x; // Posición en el eje X de la primera letra del primer elemento
|
||||||
int y; // Posición en el eje Y de la primera letra del primer elemento
|
int y; // Posición en el eje Y de la primera letra del primer elemento
|
||||||
@@ -85,10 +92,6 @@ private:
|
|||||||
JA_Sound soundAccept; // Sonido al aceptar o elegir una opción del menu
|
JA_Sound soundAccept; // Sonido al aceptar o elegir una opción del menu
|
||||||
JA_Sound soundCancel; // Sonido al cancelar el menu
|
JA_Sound soundCancel; // Sonido al cancelar el menu
|
||||||
JA_Sound soundMove; // Sonido al mover el selector
|
JA_Sound soundMove; // Sonido al mover el selector
|
||||||
SDL_Renderer *renderer; // Puntero al renderizador de la ventana
|
|
||||||
Text *text; // Texto para poder escribir los items del menu
|
|
||||||
Input *input; // Gestor de eventos de entrada de teclado o gamepad
|
|
||||||
Asset *asset; // Objeto para gestionar los ficheros de recursos
|
|
||||||
color_t colorGreyed; // Color para los elementos agrisados
|
color_t colorGreyed; // Color para los elementos agrisados
|
||||||
rectangle_t rectBG; // Rectangulo de fondo del menu
|
rectangle_t rectBG; // Rectangulo de fondo del menu
|
||||||
std::vector<item_t> item; // Estructura para cada elemento del menu
|
std::vector<item_t> item; // Estructura para cada elemento del menu
|
||||||
@@ -108,9 +111,6 @@ private:
|
|||||||
// Inicializa las variables
|
// Inicializa las variables
|
||||||
void init();
|
void init();
|
||||||
|
|
||||||
// Establece el rectangulo de fondo del menu
|
|
||||||
void setRectSize();
|
|
||||||
|
|
||||||
// Actualiza el menu para recolocarlo correctamente y establecer el tamaño
|
// Actualiza el menu para recolocarlo correctamente y establecer el tamaño
|
||||||
void reorganize();
|
void reorganize();
|
||||||
|
|
||||||
@@ -143,7 +143,7 @@ private:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
// Constructor
|
// Constructor
|
||||||
Menu(SDL_Renderer *renderer, Asset *asset, Input *input, std::string file="");
|
Menu(SDL_Renderer *renderer, Asset *asset, Input *input, std::string file = "");
|
||||||
|
|
||||||
// Destructor
|
// Destructor
|
||||||
~Menu();
|
~Menu();
|
||||||
@@ -179,7 +179,7 @@ public:
|
|||||||
void setSelectorTextColor(color_t color);
|
void setSelectorTextColor(color_t color);
|
||||||
|
|
||||||
// Centra el menu respecto a un punto en el eje X
|
// Centra el menu respecto a un punto en el eje X
|
||||||
void centerMenuOnX(int value);
|
void centerMenuOnX(int value = 0);
|
||||||
|
|
||||||
// Centra el menu respecto a un punto en el eje Y
|
// Centra el menu respecto a un punto en el eje Y
|
||||||
void centerMenuOnY(int value);
|
void centerMenuOnY(int value);
|
||||||
@@ -219,6 +219,9 @@ public:
|
|||||||
|
|
||||||
// Establece la fuente de texto que se utilizará
|
// Establece la fuente de texto que se utilizará
|
||||||
void setText(std::string font_png, std::string font_txt);
|
void setText(std::string font_png, std::string font_txt);
|
||||||
|
|
||||||
|
// Establece el rectangulo de fondo del menu
|
||||||
|
void setRectSize(int w = 0, int h = 0);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
#include "player.h"
|
#include "player.h"
|
||||||
|
|
||||||
// Constructor
|
// Constructor
|
||||||
Player::Player(float x, int y, SDL_Renderer *renderer, std::vector<LTexture *> texture, std::vector<std::vector<std::string>*> animations)
|
Player::Player(float x, int y, SDL_Renderer *renderer, std::vector<LTexture *> texture, std::vector<std::vector<std::string> *> animations)
|
||||||
{
|
{
|
||||||
// Copia los punteros
|
// Copia los punteros
|
||||||
this->renderer = renderer;
|
this->renderer = renderer;
|
||||||
@@ -12,6 +12,8 @@ Player::Player(float x, int y, SDL_Renderer *renderer, std::vector<LTexture *> t
|
|||||||
bodySprite = new AnimatedSprite(texture.at(1), renderer, "", animations.at(1));
|
bodySprite = new AnimatedSprite(texture.at(1), renderer, "", animations.at(1));
|
||||||
legsSprite = new AnimatedSprite(texture.at(2), renderer, "", animations.at(2));
|
legsSprite = new AnimatedSprite(texture.at(2), renderer, "", animations.at(2));
|
||||||
deathSprite = new AnimatedSprite(texture.at(3), renderer, "", animations.at(3));
|
deathSprite = new AnimatedSprite(texture.at(3), renderer, "", animations.at(3));
|
||||||
|
fireSprite = new AnimatedSprite(texture.at(4), renderer, "", animations.at(4));
|
||||||
|
fireSprite->getTexture()->setAlpha(224);
|
||||||
|
|
||||||
// Establece la posición inicial del jugador
|
// Establece la posición inicial del jugador
|
||||||
posX = x;
|
posX = x;
|
||||||
@@ -27,6 +29,7 @@ Player::~Player()
|
|||||||
delete bodySprite;
|
delete bodySprite;
|
||||||
delete legsSprite;
|
delete legsSprite;
|
||||||
delete deathSprite;
|
delete deathSprite;
|
||||||
|
delete fireSprite;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Iniciador
|
// Iniciador
|
||||||
@@ -131,7 +134,9 @@ void Player::move()
|
|||||||
|
|
||||||
// Si el jugador abandona el area de juego por los laterales
|
// Si el jugador abandona el area de juego por los laterales
|
||||||
if ((posX < PLAY_AREA_LEFT - 5) || (posX + width > PLAY_AREA_RIGHT + 5))
|
if ((posX < PLAY_AREA_LEFT - 5) || (posX + width > PLAY_AREA_RIGHT + 5))
|
||||||
posX -= velX; // Restaura su posición
|
{ // Restaura su posición
|
||||||
|
posX -= velX;
|
||||||
|
}
|
||||||
|
|
||||||
// Actualiza la posición del sprite
|
// Actualiza la posición del sprite
|
||||||
legsSprite->setPosX(getPosX());
|
legsSprite->setPosX(getPosX());
|
||||||
@@ -142,6 +147,23 @@ void Player::move()
|
|||||||
|
|
||||||
headSprite->setPosX(getPosX());
|
headSprite->setPosX(getPosX());
|
||||||
headSprite->setPosY(posY);
|
headSprite->setPosY(posY);
|
||||||
|
|
||||||
|
fireSprite->setPosX(getPosX() - 2);
|
||||||
|
fireSprite->setPosY(posY - 8);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
deathSprite->update();
|
||||||
|
|
||||||
|
// Si el cadaver abandona el area de juego por los laterales
|
||||||
|
if ((deathSprite->getPosX() < PLAY_AREA_LEFT) || (deathSprite->getPosX() + width > PLAY_AREA_RIGHT))
|
||||||
|
{ // Restaura su posición
|
||||||
|
const float vx = deathSprite->getVelX();
|
||||||
|
deathSprite->setPosX(deathSprite->getPosX() - vx);
|
||||||
|
|
||||||
|
// Rebota
|
||||||
|
deathSprite->setVelX(-vx);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -154,6 +176,10 @@ void Player::render()
|
|||||||
{
|
{
|
||||||
if ((invulnerableCounter % 10) > 4)
|
if ((invulnerableCounter % 10) > 4)
|
||||||
{
|
{
|
||||||
|
if (powerUp)
|
||||||
|
{
|
||||||
|
fireSprite->render();
|
||||||
|
}
|
||||||
legsSprite->render();
|
legsSprite->render();
|
||||||
bodySprite->render();
|
bodySprite->render();
|
||||||
headSprite->render();
|
headSprite->render();
|
||||||
@@ -161,11 +187,19 @@ void Player::render()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
if (powerUp)
|
||||||
|
{
|
||||||
|
fireSprite->render();
|
||||||
|
}
|
||||||
legsSprite->render();
|
legsSprite->render();
|
||||||
bodySprite->render();
|
bodySprite->render();
|
||||||
headSprite->render();
|
headSprite->render();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
deathSprite->render();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Establece el estado del jugador cuando camina
|
// Establece el estado del jugador cuando camina
|
||||||
@@ -186,8 +220,6 @@ void Player::setFiringStatus(Uint8 status)
|
|||||||
if (statusFiring != status)
|
if (statusFiring != status)
|
||||||
{
|
{
|
||||||
statusFiring = status;
|
statusFiring = status;
|
||||||
// bodySprite->setCurrentFrame(0);
|
|
||||||
// headSprite->setCurrentFrame(0);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -215,14 +247,14 @@ void Player::setAnimation()
|
|||||||
legsSprite->setFlip(flipWalk);
|
legsSprite->setFlip(flipWalk);
|
||||||
if (statusFiring == PLAYER_STATUS_FIRING_NO)
|
if (statusFiring == PLAYER_STATUS_FIRING_NO)
|
||||||
{ // No esta disparando
|
{ // No esta disparando
|
||||||
bodySprite->setCurrentAnimation(aWalking + aBodyCoffees);
|
bodySprite->setCurrentAnimation(aWalking + aBodyCoffees + aPowerUp);
|
||||||
bodySprite->setFlip(flipWalk);
|
bodySprite->setFlip(flipWalk);
|
||||||
headSprite->setCurrentAnimation(aWalking + aHeadCoffees+ aPowerUp);
|
headSprite->setCurrentAnimation(aWalking + aHeadCoffees + aPowerUp);
|
||||||
headSprite->setFlip(flipWalk);
|
headSprite->setFlip(flipWalk);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ // Está disparando
|
{ // Está disparando
|
||||||
bodySprite->setCurrentAnimation(aFiring + aBodyCoffees);
|
bodySprite->setCurrentAnimation(aFiring + aBodyCoffees + aPowerUp);
|
||||||
bodySprite->setFlip(flipFire);
|
bodySprite->setFlip(flipFire);
|
||||||
headSprite->setCurrentAnimation(aFiring + aHeadCoffees + aPowerUp);
|
headSprite->setCurrentAnimation(aFiring + aHeadCoffees + aPowerUp);
|
||||||
headSprite->setFlip(flipFire);
|
headSprite->setFlip(flipFire);
|
||||||
@@ -232,6 +264,9 @@ void Player::setAnimation()
|
|||||||
legsSprite->animate();
|
legsSprite->animate();
|
||||||
bodySprite->animate();
|
bodySprite->animate();
|
||||||
headSprite->animate();
|
headSprite->animate();
|
||||||
|
|
||||||
|
fireSprite->animate();
|
||||||
|
fireSprite->setFlip(flipWalk);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Obtiene el valor de la variable
|
// Obtiene el valor de la variable
|
||||||
@@ -336,6 +371,18 @@ bool Player::isAlive()
|
|||||||
void Player::setAlive(bool value)
|
void Player::setAlive(bool value)
|
||||||
{
|
{
|
||||||
alive = value;
|
alive = value;
|
||||||
|
|
||||||
|
if (!value)
|
||||||
|
{
|
||||||
|
deathSprite->setPos(headSprite->getRect());
|
||||||
|
deathSprite->setAccelY(0.2f);
|
||||||
|
deathSprite->setVelY(-6.6f);
|
||||||
|
deathSprite->setVelX(3.3f);
|
||||||
|
if (rand() % 2 == 0)
|
||||||
|
{
|
||||||
|
deathSprite->setVelX(-3.3f);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Obtiene el valor de la variable
|
// Obtiene el valor de la variable
|
||||||
@@ -533,7 +580,8 @@ void Player::shiftColliders()
|
|||||||
// Obtiene el puntero a la textura con los gráficos de la animación de morir
|
// Obtiene el puntero a la textura con los gráficos de la animación de morir
|
||||||
LTexture *Player::getDeadTexture()
|
LTexture *Player::getDeadTexture()
|
||||||
{
|
{
|
||||||
return deathSprite->getTexture();;
|
return deathSprite->getTexture();
|
||||||
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Obtiene el valor de la variable
|
// Obtiene el valor de la variable
|
||||||
@@ -547,21 +595,33 @@ void Player::updatePowerUpHeadOffset()
|
|||||||
{
|
{
|
||||||
if (!powerUp)
|
if (!powerUp)
|
||||||
{
|
{
|
||||||
//powerUpHeadOffset = 0;
|
// powerUpHeadOffset = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//powerUpHeadOffset = 96;
|
// powerUpHeadOffset = 96;
|
||||||
if (powerUpCounter < 300)
|
if (powerUpCounter < 300)
|
||||||
{
|
{
|
||||||
if (powerUpCounter % 10 > 4)
|
if (powerUpCounter % 10 > 4)
|
||||||
{
|
{
|
||||||
//powerUpHeadOffset = 96;
|
// powerUpHeadOffset = 96;
|
||||||
|
fireSprite->setEnabled(false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//powerUpHeadOffset = 0;
|
// powerUpHeadOffset = 0;
|
||||||
|
fireSprite->setEnabled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pone las texturas del jugador
|
||||||
|
void Player::setPlayerTextures(std::vector<LTexture *> texture)
|
||||||
|
{
|
||||||
|
headSprite->setTexture(texture.at(0));
|
||||||
|
bodySprite->setTexture(texture.at(1));
|
||||||
|
legsSprite->setTexture(texture.at(2));
|
||||||
|
deathSprite->setTexture(texture.at(3));
|
||||||
|
fireSprite->setTexture(texture.at(4));
|
||||||
}
|
}
|
||||||
@@ -23,24 +23,6 @@
|
|||||||
#define PLAYER_STATUS_FIRING_RIGHT 2
|
#define PLAYER_STATUS_FIRING_RIGHT 2
|
||||||
#define PLAYER_STATUS_FIRING_NO 3
|
#define PLAYER_STATUS_FIRING_NO 3
|
||||||
|
|
||||||
#define PLAYER_ANIMATION_LEGS_WALKING_LEFT 0
|
|
||||||
#define PLAYER_ANIMATION_LEGS_WALKING_RIGHT 1
|
|
||||||
#define PLAYER_ANIMATION_LEGS_WALKING_STOP 2
|
|
||||||
|
|
||||||
#define PLAYER_ANIMATION_BODY_WALKING_LEFT 0
|
|
||||||
#define PLAYER_ANIMATION_BODY_FIRING_LEFT 1
|
|
||||||
#define PLAYER_ANIMATION_BODY_WALKING_RIGHT 2
|
|
||||||
#define PLAYER_ANIMATION_BODY_FIRING_RIGHT 3
|
|
||||||
#define PLAYER_ANIMATION_BODY_WALKING_STOP 4
|
|
||||||
#define PLAYER_ANIMATION_BODY_FIRING_UP 5
|
|
||||||
|
|
||||||
#define PLAYER_ANIMATION_HEAD_WALKING_LEFT 0
|
|
||||||
#define PLAYER_ANIMATION_HEAD_FIRING_LEFT 1
|
|
||||||
#define PLAYER_ANIMATION_HEAD_WALKING_RIGHT 2
|
|
||||||
#define PLAYER_ANIMATION_HEAD_FIRING_RIGHT 3
|
|
||||||
#define PLAYER_ANIMATION_HEAD_WALKING_STOP 4
|
|
||||||
#define PLAYER_ANIMATION_HEAD_FIRING_UP 5
|
|
||||||
|
|
||||||
// Variables del jugador
|
// Variables del jugador
|
||||||
#define PLAYER_INVULNERABLE_COUNTER 200
|
#define PLAYER_INVULNERABLE_COUNTER 200
|
||||||
#define PLAYER_POWERUP_COUNTER 1500
|
#define PLAYER_POWERUP_COUNTER 1500
|
||||||
@@ -55,6 +37,7 @@ private:
|
|||||||
AnimatedSprite *bodySprite; // Sprite para dibujar el cuerpo
|
AnimatedSprite *bodySprite; // Sprite para dibujar el cuerpo
|
||||||
AnimatedSprite *legsSprite; // Sprite para dibujar las piernas
|
AnimatedSprite *legsSprite; // Sprite para dibujar las piernas
|
||||||
AnimatedSprite *deathSprite; // Sprite para dibujar el jugador derrotado
|
AnimatedSprite *deathSprite; // Sprite para dibujar el jugador derrotado
|
||||||
|
AnimatedSprite *fireSprite; // Sprite para dibujar el aura del jugador con el poder a tope
|
||||||
|
|
||||||
// Variables
|
// Variables
|
||||||
float posX; // Posicion en el eje X
|
float posX; // Posicion en el eje X
|
||||||
@@ -114,6 +97,9 @@ public:
|
|||||||
// Pinta el jugador en pantalla
|
// Pinta el jugador en pantalla
|
||||||
void render();
|
void render();
|
||||||
|
|
||||||
|
// Pone las texturas del jugador
|
||||||
|
void setPlayerTextures(std::vector<LTexture *> texture);
|
||||||
|
|
||||||
// Actua en consecuencia de la entrada recibida
|
// Actua en consecuencia de la entrada recibida
|
||||||
void setInput(Uint8 input);
|
void setInput(Uint8 input);
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,9 @@ Screen::Screen(SDL_Window *window, SDL_Renderer *renderer, options_t *options, i
|
|||||||
// Crea la textura donde se dibujan los graficos del juego
|
// Crea la textura donde se dibujan los graficos del juego
|
||||||
gameCanvas = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, gameCanvasWidth, gameCanvasHeight);
|
gameCanvas = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, gameCanvasWidth, gameCanvasHeight);
|
||||||
if (gameCanvas == NULL)
|
if (gameCanvas == NULL)
|
||||||
|
{
|
||||||
printf("TitleSurface could not be created!\nSDL Error: %s\n", SDL_GetError());
|
printf("TitleSurface could not be created!\nSDL Error: %s\n", SDL_GetError());
|
||||||
|
}
|
||||||
|
|
||||||
// Establece el modo de video
|
// Establece el modo de video
|
||||||
setVideoMode(options->fullScreenMode);
|
setVideoMode(options->fullScreenMode);
|
||||||
|
|||||||
@@ -8,7 +8,18 @@ SmartSprite::SmartSprite(LTexture *texture, SDL_Renderer *renderer)
|
|||||||
setTexture(texture);
|
setTexture(texture);
|
||||||
setRenderer(renderer);
|
setRenderer(renderer);
|
||||||
|
|
||||||
// Inicializa variables
|
// Inicializa el objeto
|
||||||
|
init();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Destructor
|
||||||
|
SmartSprite::~SmartSprite()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
// Inicializa el objeto
|
||||||
|
void SmartSprite::init()
|
||||||
|
{
|
||||||
enabled = false;
|
enabled = false;
|
||||||
enabledCounter = 0;
|
enabledCounter = 0;
|
||||||
onDestination = false;
|
onDestination = false;
|
||||||
@@ -18,11 +29,6 @@ SmartSprite::SmartSprite(LTexture *texture, SDL_Renderer *renderer)
|
|||||||
finished = false;
|
finished = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Destructor
|
|
||||||
SmartSprite::~SmartSprite()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
// Actualiza la posición y comprueba si ha llegado a su destino
|
// Actualiza la posición y comprueba si ha llegado a su destino
|
||||||
void SmartSprite::update()
|
void SmartSprite::update()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -33,6 +33,9 @@ public:
|
|||||||
// Destructor
|
// Destructor
|
||||||
~SmartSprite();
|
~SmartSprite();
|
||||||
|
|
||||||
|
// Inicializa el objeto
|
||||||
|
void init();
|
||||||
|
|
||||||
// Actualiza la posición y comprueba si ha llegado a su destino
|
// Actualiza la posición y comprueba si ha llegado a su destino
|
||||||
void update();
|
void update();
|
||||||
|
|
||||||
|
|||||||
566
source/title.cpp
@@ -11,7 +11,9 @@ Title::Title(SDL_Renderer *renderer, Screen *screen, Input *input, Asset *asset,
|
|||||||
this->options = options;
|
this->options = options;
|
||||||
this->lang = lang;
|
this->lang = lang;
|
||||||
|
|
||||||
// Reserva memoria para los punteros propios
|
this->section = section;
|
||||||
|
|
||||||
|
// Reserva memoria para los punteros
|
||||||
eventHandler = new SDL_Event();
|
eventHandler = new SDL_Event();
|
||||||
fade = new Fade(renderer);
|
fade = new Fade(renderer);
|
||||||
|
|
||||||
@@ -31,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.title = new Menu(renderer, asset, input, asset->get("title.men"));
|
||||||
menu.options = new Menu(renderer, asset, input, asset->get("options.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
|
// Sonidos
|
||||||
crashSound = JA_LoadSound(asset->get("title.wav").c_str());
|
crashSound = JA_LoadSound(asset->get("title.wav").c_str());
|
||||||
@@ -38,8 +41,52 @@ Title::Title(SDL_Renderer *renderer, Screen *screen, Input *input, Asset *asset,
|
|||||||
// Musicas
|
// Musicas
|
||||||
titleMusic = JA_LoadMusic(asset->get("title.ogg").c_str());
|
titleMusic = JA_LoadMusic(asset->get("title.ogg").c_str());
|
||||||
|
|
||||||
|
// Inicializa los valores
|
||||||
|
init();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Destructor
|
||||||
|
Title::~Title()
|
||||||
|
{
|
||||||
|
delete eventHandler;
|
||||||
|
delete fade;
|
||||||
|
|
||||||
|
dustTexture->unload();
|
||||||
|
delete dustTexture;
|
||||||
|
|
||||||
|
coffeeTexture->unload();
|
||||||
|
delete coffeeTexture;
|
||||||
|
|
||||||
|
crisisTexture->unload();
|
||||||
|
delete crisisTexture;
|
||||||
|
|
||||||
|
gradientTexture->unload();
|
||||||
|
delete gradientTexture;
|
||||||
|
|
||||||
|
delete coffeeBitmap;
|
||||||
|
delete crisisBitmap;
|
||||||
|
delete dustBitmapL;
|
||||||
|
delete dustBitmapR;
|
||||||
|
delete gradient;
|
||||||
|
|
||||||
|
delete text1;
|
||||||
|
delete text2;
|
||||||
|
|
||||||
|
delete menu.title;
|
||||||
|
delete menu.options;
|
||||||
|
delete menu.playerSelect;
|
||||||
|
|
||||||
|
JA_DeleteSound(crashSound);
|
||||||
|
JA_DeleteMusic(titleMusic);
|
||||||
|
|
||||||
|
SDL_DestroyTexture(background);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Inicializa los valores
|
||||||
|
void Title::init()
|
||||||
|
{
|
||||||
// Inicializa variables
|
// Inicializa variables
|
||||||
this->section = section;
|
section.subsection = TITLE_SECTION_1;
|
||||||
counter = TITLE_COUNTER;
|
counter = TITLE_COUNTER;
|
||||||
backgroundCounter = 0;
|
backgroundCounter = 0;
|
||||||
backgroundMode = rand() % 2;
|
backgroundMode = rand() % 2;
|
||||||
@@ -50,7 +97,7 @@ Title::Title(SDL_Renderer *renderer, Screen *screen, Input *input, Asset *asset,
|
|||||||
ticks = 0;
|
ticks = 0;
|
||||||
ticksSpeed = 15;
|
ticksSpeed = 15;
|
||||||
fade->init(0x17, 0x17, 0x26);
|
fade->init(0x17, 0x17, 0x26);
|
||||||
demo = false;
|
demo = true;
|
||||||
|
|
||||||
// Pone valores por defecto a las opciones de control
|
// Pone valores por defecto a las opciones de control
|
||||||
options->input.clear();
|
options->input.clear();
|
||||||
@@ -83,6 +130,7 @@ Title::Title(SDL_Renderer *renderer, Screen *screen, Input *input, Asset *asset,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Inicializa el bitmap de Coffee
|
// Inicializa el bitmap de Coffee
|
||||||
|
coffeeBitmap->init();
|
||||||
coffeeBitmap->setPosX(45);
|
coffeeBitmap->setPosX(45);
|
||||||
coffeeBitmap->setPosY(11 - 200);
|
coffeeBitmap->setPosY(11 - 200);
|
||||||
coffeeBitmap->setWidth(167);
|
coffeeBitmap->setWidth(167);
|
||||||
@@ -98,6 +146,7 @@ Title::Title(SDL_Renderer *renderer, Screen *screen, Input *input, Asset *asset,
|
|||||||
coffeeBitmap->setDestY(11);
|
coffeeBitmap->setDestY(11);
|
||||||
|
|
||||||
// Inicializa el bitmap de Crisis
|
// Inicializa el bitmap de Crisis
|
||||||
|
crisisBitmap->init();
|
||||||
crisisBitmap->setPosX(60);
|
crisisBitmap->setPosX(60);
|
||||||
crisisBitmap->setPosY(57 + 200);
|
crisisBitmap->setPosY(57 + 200);
|
||||||
crisisBitmap->setWidth(137);
|
crisisBitmap->setWidth(137);
|
||||||
@@ -113,6 +162,7 @@ Title::Title(SDL_Renderer *renderer, Screen *screen, Input *input, Asset *asset,
|
|||||||
crisisBitmap->setDestY(57);
|
crisisBitmap->setDestY(57);
|
||||||
|
|
||||||
// Inicializa el bitmap de DustRight
|
// Inicializa el bitmap de DustRight
|
||||||
|
dustBitmapR->resetAnimation();
|
||||||
dustBitmapR->setPosX(218);
|
dustBitmapR->setPosX(218);
|
||||||
dustBitmapR->setPosY(47);
|
dustBitmapR->setPosY(47);
|
||||||
dustBitmapR->setWidth(16);
|
dustBitmapR->setWidth(16);
|
||||||
@@ -120,6 +170,7 @@ Title::Title(SDL_Renderer *renderer, Screen *screen, Input *input, Asset *asset,
|
|||||||
dustBitmapR->setFlip(SDL_FLIP_HORIZONTAL);
|
dustBitmapR->setFlip(SDL_FLIP_HORIZONTAL);
|
||||||
|
|
||||||
// Inicializa el bitmap de DustLeft
|
// Inicializa el bitmap de DustLeft
|
||||||
|
dustBitmapL->resetAnimation();
|
||||||
dustBitmapL->setPosX(33);
|
dustBitmapL->setPosX(33);
|
||||||
dustBitmapL->setPosY(47);
|
dustBitmapL->setPosY(47);
|
||||||
dustBitmapL->setWidth(16);
|
dustBitmapL->setWidth(16);
|
||||||
@@ -144,43 +195,7 @@ Title::Title(SDL_Renderer *renderer, Screen *screen, Input *input, Asset *asset,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Actualiza los textos de los menus
|
// Actualiza los textos de los menus
|
||||||
// updateMenuLabels();
|
updateMenuLabels();
|
||||||
}
|
|
||||||
|
|
||||||
// Destructor
|
|
||||||
Title::~Title()
|
|
||||||
{
|
|
||||||
delete eventHandler;
|
|
||||||
delete fade;
|
|
||||||
|
|
||||||
dustTexture->unload();
|
|
||||||
delete dustTexture;
|
|
||||||
|
|
||||||
coffeeTexture->unload();
|
|
||||||
delete coffeeTexture;
|
|
||||||
|
|
||||||
crisisTexture->unload();
|
|
||||||
delete crisisTexture;
|
|
||||||
|
|
||||||
gradientTexture->unload();
|
|
||||||
delete gradientTexture;
|
|
||||||
|
|
||||||
delete coffeeBitmap;
|
|
||||||
delete crisisBitmap;
|
|
||||||
delete dustBitmapL;
|
|
||||||
delete dustBitmapR;
|
|
||||||
delete gradient;
|
|
||||||
|
|
||||||
delete text1;
|
|
||||||
delete text2;
|
|
||||||
|
|
||||||
delete menu.title;
|
|
||||||
delete menu.options;
|
|
||||||
|
|
||||||
JA_DeleteSound(crashSound);
|
|
||||||
JA_DeleteMusic(titleMusic);
|
|
||||||
|
|
||||||
SDL_DestroyTexture(background);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Actualiza las variables del objeto
|
// Actualiza las variables del objeto
|
||||||
@@ -235,7 +250,7 @@ void Title::update()
|
|||||||
dustBitmapL->update();
|
dustBitmapL->update();
|
||||||
|
|
||||||
step++;
|
step++;
|
||||||
|
|
||||||
if (step == 33)
|
if (step == 33)
|
||||||
{
|
{
|
||||||
section.subsection = TITLE_SECTION_3;
|
section.subsection = TITLE_SECTION_3;
|
||||||
@@ -246,181 +261,251 @@ void Title::update()
|
|||||||
// Sección 3 - La pantalla de titulo con el menú y la música
|
// Sección 3 - La pantalla de titulo con el menú y la música
|
||||||
case TITLE_SECTION_3:
|
case TITLE_SECTION_3:
|
||||||
{
|
{
|
||||||
// Reproduce la música
|
if (counter > 0)
|
||||||
if ((JA_GetMusicState() == JA_MUSIC_INVALID) || (JA_GetMusicState() == JA_MUSIC_STOPPED))
|
{ // Reproduce la música
|
||||||
{
|
if ((JA_GetMusicState() == JA_MUSIC_INVALID) || (JA_GetMusicState() == JA_MUSIC_STOPPED))
|
||||||
JA_PlayMusic(titleMusic);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Actualiza el contador de ticks
|
|
||||||
ticks = SDL_GetTicks();
|
|
||||||
|
|
||||||
dustBitmapR->update();
|
|
||||||
dustBitmapL->update();
|
|
||||||
|
|
||||||
// Actualiza la lógica del titulo
|
|
||||||
menu.active->update();
|
|
||||||
fade->update();
|
|
||||||
|
|
||||||
if (fade->hasEnded())
|
|
||||||
{
|
|
||||||
switch (postFade)
|
|
||||||
{
|
{
|
||||||
case 0: // 1 PLAYER
|
JA_PlayMusic(titleMusic);
|
||||||
section.name = PROG_SECTION_GAME;
|
}
|
||||||
section.subsection = GAME_SECTION_PLAY_1P;
|
|
||||||
JA_StopMusic();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 1: // 2 PLAYERS
|
dustBitmapR->update();
|
||||||
section.name = PROG_SECTION_GAME;
|
dustBitmapL->update();
|
||||||
section.subsection = GAME_SECTION_PLAY_2P;
|
|
||||||
JA_StopMusic();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 2: // QUIT
|
// Actualiza la lógica del titulo
|
||||||
section.name = PROG_SECTION_QUIT;
|
fade->update();
|
||||||
JA_StopMusic();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 3: // TIME OUT
|
if (fade->hasEnded())
|
||||||
|
{
|
||||||
|
switch (postFade)
|
||||||
|
{
|
||||||
|
case 0: // 1 PLAYER
|
||||||
|
section.name = PROG_SECTION_GAME;
|
||||||
|
section.subsection = GAME_SECTION_PLAY_1P;
|
||||||
|
JA_StopMusic();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1: // 2 PLAYERS
|
||||||
|
section.name = PROG_SECTION_GAME;
|
||||||
|
section.subsection = GAME_SECTION_PLAY_2P;
|
||||||
|
JA_StopMusic();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2: // QUIT
|
||||||
|
section.name = PROG_SECTION_QUIT;
|
||||||
|
JA_StopMusic();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3: // TIME OUT
|
||||||
|
counter = TITLE_COUNTER;
|
||||||
|
menu.active->reset();
|
||||||
|
if (demo)
|
||||||
|
{
|
||||||
|
runDemoGame();
|
||||||
|
if (section.name != PROG_SECTION_QUIT)
|
||||||
|
{
|
||||||
|
runInstructions(m_auto);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
section.name = PROG_SECTION_LOGO;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Actualiza el tileado de fondo
|
||||||
|
updateBG();
|
||||||
|
|
||||||
|
// Comprueba las entradas para el menu
|
||||||
|
if (menuVisible == true)
|
||||||
|
{
|
||||||
|
menu.active->update();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 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 -> Cambia al manu de selección de jugador
|
||||||
|
menu.active = menu.playerSelect;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1: // 2 PLAYERS
|
||||||
|
postFade = 1;
|
||||||
|
fade->activateFade();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2: // OPTIONS
|
||||||
|
menu.active = menu.options;
|
||||||
|
optionsPrevious = *options;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3: // QUIT
|
||||||
|
postFade = 2;
|
||||||
|
fade->activateFade();
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 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")
|
||||||
|
{
|
||||||
|
switch (menu.active->getItemSelected())
|
||||||
|
{
|
||||||
|
case 0: // Difficulty
|
||||||
|
if (options->difficulty == DIFFICULTY_EASY)
|
||||||
|
options->difficulty = DIFFICULTY_NORMAL;
|
||||||
|
else if (options->difficulty == DIFFICULTY_NORMAL)
|
||||||
|
options->difficulty = DIFFICULTY_HARD;
|
||||||
|
else
|
||||||
|
options->difficulty = DIFFICULTY_EASY;
|
||||||
|
updateMenuLabels();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1: // PLAYER 1 CONTROLS
|
||||||
|
updatePlayerInputs(0);
|
||||||
|
updateMenuLabels();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3: // PLAYER 2 CONTROLS
|
||||||
|
updatePlayerInputs(1);
|
||||||
|
updateMenuLabels();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 5: // Language
|
||||||
|
options->language++;
|
||||||
|
if (options->language == 3)
|
||||||
|
options->language = 0;
|
||||||
|
updateMenuLabels();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 6: // Display mode
|
||||||
|
switchFullScreenModeVar();
|
||||||
|
if (options->fullScreenMode != 0)
|
||||||
|
{
|
||||||
|
menu.options->setSelectable(8, false);
|
||||||
|
menu.options->setGreyed(8, true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
menu.options->setSelectable(8, true);
|
||||||
|
menu.options->setGreyed(8, false);
|
||||||
|
}
|
||||||
|
updateMenuLabels();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 8: // Windows size
|
||||||
|
options->windowSize++;
|
||||||
|
if (options->windowSize == 5)
|
||||||
|
options->windowSize = 1;
|
||||||
|
updateMenuLabels();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 9: // FILTER
|
||||||
|
if (options->filter == FILTER_LINEAL)
|
||||||
|
options->filter = FILTER_NEAREST;
|
||||||
|
else
|
||||||
|
options->filter = FILTER_LINEAL;
|
||||||
|
updateMenuLabels();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 10: // VSYNC
|
||||||
|
if (options->vSync)
|
||||||
|
options->vSync = false;
|
||||||
|
else
|
||||||
|
options->vSync = true;
|
||||||
|
updateMenuLabels();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 11: // HOW TO PLAY
|
||||||
|
runInstructions(m_manual);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 12: // ACCEPT
|
||||||
|
applyOptions();
|
||||||
|
menu.active->reset();
|
||||||
|
menu.active = menu.title;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 13: // CANCEL
|
||||||
|
options = &optionsPrevious;
|
||||||
|
updateMenuLabels();
|
||||||
|
menu.active->reset();
|
||||||
|
menu.active = menu.title;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (menu.active->getName() == "TITLE")
|
||||||
|
{
|
||||||
|
counter--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (counter == 0)
|
||||||
|
{
|
||||||
|
if (demo)
|
||||||
|
{
|
||||||
|
runDemoGame();
|
||||||
|
if (section.name != PROG_SECTION_QUIT)
|
||||||
|
{
|
||||||
|
runInstructions(m_auto);
|
||||||
|
}
|
||||||
|
init();
|
||||||
|
demo = false;
|
||||||
counter = TITLE_COUNTER;
|
counter = TITLE_COUNTER;
|
||||||
menu.active->reset();
|
|
||||||
if (demo)
|
|
||||||
{
|
|
||||||
runDemoGame();
|
|
||||||
runInstructions(INSTRUCTIONS_MODE_AUTO);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
section.name = PROG_SECTION_LOGO;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
else
|
||||||
|
|
||||||
// Actualiza el tileado de fondo
|
|
||||||
updateBG();
|
|
||||||
|
|
||||||
// Comprueba las entradas para el menu
|
|
||||||
if (menuVisible == true)
|
|
||||||
{
|
|
||||||
menu.active->checkInput();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Comprueba si se ha seleccionado algún item del menú
|
|
||||||
if (menu.active->getName() == "TITLE")
|
|
||||||
{
|
|
||||||
switch (menu.active->getItemSelected())
|
|
||||||
{
|
{
|
||||||
case 0: // 1 PLAYER
|
section.name = PROG_SECTION_LOGO;
|
||||||
postFade = 0;
|
|
||||||
fade->activateFade();
|
|
||||||
break;
|
|
||||||
case 1: // 2 PLAYERS
|
|
||||||
postFade = 1;
|
|
||||||
fade->activateFade();
|
|
||||||
break;
|
|
||||||
case 2: // OPTIONS
|
|
||||||
menu.active = menu.options;
|
|
||||||
optionsPrevious = *options;
|
|
||||||
break;
|
|
||||||
case 3: // QUIT
|
|
||||||
postFade = 2;
|
|
||||||
fade->activateFade();
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Comprueba si se ha seleccionado algún item de opciones
|
// Sección Instrucciones
|
||||||
if (menu.active->getName() == "OPTIONS")
|
if (section.subsection == TITLE_SECTION_INSTRUCTIONS)
|
||||||
{
|
{
|
||||||
switch (menu.active->getItemSelected())
|
runInstructions(m_auto);
|
||||||
{
|
counter = TITLE_COUNTER;
|
||||||
case 0: // Difficulty
|
demo = true;
|
||||||
if (options->difficulty == DIFFICULTY_EASY)
|
|
||||||
options->difficulty = DIFFICULTY_NORMAL;
|
|
||||||
else if (options->difficulty == DIFFICULTY_NORMAL)
|
|
||||||
options->difficulty = DIFFICULTY_HARD;
|
|
||||||
else
|
|
||||||
options->difficulty = DIFFICULTY_EASY;
|
|
||||||
updateMenuLabels();
|
|
||||||
break;
|
|
||||||
case 1: // PLAYER 1 CONTROLS
|
|
||||||
updatePlayerInputs(0);
|
|
||||||
updateMenuLabels();
|
|
||||||
break;
|
|
||||||
case 3: // PLAYER 2 CONTROLS
|
|
||||||
updatePlayerInputs(1);
|
|
||||||
updateMenuLabels();
|
|
||||||
break;
|
|
||||||
case 5: // Language
|
|
||||||
options->language++;
|
|
||||||
if (options->language == 3)
|
|
||||||
options->language = 0;
|
|
||||||
updateMenuLabels();
|
|
||||||
break;
|
|
||||||
case 6: // Display mode
|
|
||||||
switchFullScreenModeVar();
|
|
||||||
if (options->fullScreenMode != 0)
|
|
||||||
{
|
|
||||||
menu.options->setSelectable(8, false);
|
|
||||||
menu.options->setGreyed(8, true);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
menu.options->setSelectable(8, true);
|
|
||||||
menu.options->setGreyed(8, false);
|
|
||||||
}
|
|
||||||
updateMenuLabels();
|
|
||||||
break;
|
|
||||||
case 8: // Windows size
|
|
||||||
options->windowSize++;
|
|
||||||
if (options->windowSize == 5)
|
|
||||||
options->windowSize = 1;
|
|
||||||
updateMenuLabels();
|
|
||||||
break;
|
|
||||||
case 9: // FILTER
|
|
||||||
if (options->filter == FILTER_LINEAL)
|
|
||||||
options->filter = FILTER_NEAREST;
|
|
||||||
else
|
|
||||||
options->filter = FILTER_LINEAL;
|
|
||||||
updateMenuLabels();
|
|
||||||
break;
|
|
||||||
case 10: // VSYNC
|
|
||||||
if (options->vSync)
|
|
||||||
options->vSync = false;
|
|
||||||
else
|
|
||||||
options->vSync = true;
|
|
||||||
updateMenuLabels();
|
|
||||||
break;
|
|
||||||
case 11: // HOW TO PLAY
|
|
||||||
runInstructions(INSTRUCTIONS_MODE_MANUAL);
|
|
||||||
break;
|
|
||||||
case 12: // ACCEPT
|
|
||||||
applyOptions();
|
|
||||||
menu.active->reset();
|
|
||||||
menu.active = menu.title;
|
|
||||||
break;
|
|
||||||
case 13: // CANCEL
|
|
||||||
options = &optionsPrevious;
|
|
||||||
updateMenuLabels();
|
|
||||||
menu.active->reset();
|
|
||||||
menu.active = menu.title;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (menu.active->getName() == "TITLE")
|
|
||||||
{
|
|
||||||
counter--;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -569,6 +654,40 @@ void Title::checkEventHandler()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
else if (eventHandler->type == SDL_KEYDOWN && eventHandler->key.repeat == 0)
|
||||||
|
{
|
||||||
|
switch (eventHandler->key.keysym.scancode)
|
||||||
|
{
|
||||||
|
case SDL_SCANCODE_F:
|
||||||
|
screen->switchVideoMode();
|
||||||
|
reloadTextures();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SDL_SCANCODE_F1:
|
||||||
|
screen->setWindowSize(1);
|
||||||
|
reloadTextures();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SDL_SCANCODE_F2:
|
||||||
|
screen->setWindowSize(2);
|
||||||
|
reloadTextures();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SDL_SCANCODE_F3:
|
||||||
|
screen->setWindowSize(3);
|
||||||
|
reloadTextures();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SDL_SCANCODE_F4:
|
||||||
|
screen->setWindowSize(4);
|
||||||
|
reloadTextures();
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (section.subsection == TITLE_SECTION_3)
|
if (section.subsection == TITLE_SECTION_3)
|
||||||
{ // Si se pulsa alguna tecla durante la tercera sección del titulo
|
{ // Si se pulsa alguna tecla durante la tercera sección del titulo
|
||||||
if ((eventHandler->type == SDL_KEYUP) || (eventHandler->type == SDL_JOYBUTTONUP))
|
if ((eventHandler->type == SDL_KEYUP) || (eventHandler->type == SDL_JOYBUTTONUP))
|
||||||
@@ -792,6 +911,14 @@ void Title::updateMenuLabels()
|
|||||||
// Recoloca el menu de titulo
|
// Recoloca el menu de titulo
|
||||||
menu.title->centerMenuOnX(SCREEN_CENTER_X);
|
menu.title->centerMenuOnX(SCREEN_CENTER_X);
|
||||||
menu.title->centerMenuElementsOnX();
|
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
|
// Aplica las opciones de menu seleccionadas
|
||||||
@@ -812,32 +939,29 @@ section_t Title::run()
|
|||||||
{
|
{
|
||||||
update();
|
update();
|
||||||
render();
|
render();
|
||||||
// Sección 3 - La pantalla de titulo con el menú y la música
|
|
||||||
|
|
||||||
// Sección Instrucciones
|
|
||||||
// if (section.subsection == TITLE_SECTION_INSTRUCTIONS)
|
|
||||||
//{
|
|
||||||
// runInstructions(INSTRUCTIONS_MODE_AUTO);
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return section;
|
return section;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ejecuta la parte donde se muestran las instrucciones
|
// Ejecuta la parte donde se muestran las instrucciones
|
||||||
void Title::runInstructions(Uint8 mode)
|
section_t Title::runInstructions(mode_e mode)
|
||||||
{
|
{
|
||||||
instructions = new Instructions(renderer, screen, asset, lang);
|
instructions = new Instructions(renderer, screen, asset, lang);
|
||||||
instructions->run(mode);
|
section = instructions->run(mode);
|
||||||
delete instructions;
|
delete instructions;
|
||||||
|
|
||||||
|
return section;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ejecuta el juego en modo demo
|
// 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 = new Game(1, 0, renderer, screen, asset, lang, input, true, options);
|
||||||
demoGame->run();
|
section = demoGame->run();
|
||||||
delete demoGame;
|
delete demoGame;
|
||||||
|
|
||||||
|
return section;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Modifica las opciones para los controles de los jugadores
|
// Modifica las opciones para los controles de los jugadores
|
||||||
@@ -960,4 +1084,14 @@ void Title::checkInputDevices()
|
|||||||
temp.deviceType = INPUT_USE_KEYBOARD;
|
temp.deviceType = INPUT_USE_KEYBOARD;
|
||||||
availableInputDevices.push_back(temp);
|
availableInputDevices.push_back(temp);
|
||||||
printf("Device %i:\t%s\n\n", (int)availableInputDevices.size(), temp.name.c_str());
|
printf("Device %i:\t%s\n\n", (int)availableInputDevices.size(), temp.name.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Recarga las texturas
|
||||||
|
void Title::reloadTextures()
|
||||||
|
{
|
||||||
|
dustTexture->reLoad();
|
||||||
|
coffeeTexture->reLoad();
|
||||||
|
crisisTexture->reLoad();
|
||||||
|
gradientTexture->reLoad();
|
||||||
|
createTiledBackground();
|
||||||
}
|
}
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
#define TITLE_H
|
#define TITLE_H
|
||||||
|
|
||||||
// Textos
|
// Textos
|
||||||
#define TEXT_COPYRIGHT "@2020,2022 JailDesigner (v2.1)"
|
#define TEXT_COPYRIGHT "@2020,2022 JailDesigner (v2.1a)"
|
||||||
|
|
||||||
// Contadores
|
// Contadores
|
||||||
#define TITLE_COUNTER 800
|
#define TITLE_COUNTER 800
|
||||||
@@ -35,10 +35,11 @@ class Title
|
|||||||
private:
|
private:
|
||||||
struct menu_t
|
struct menu_t
|
||||||
{
|
{
|
||||||
Menu *title; // Menu de la pantalla de título
|
Menu *title; // Menu de la pantalla de título
|
||||||
Menu *options; // Menú de la pantalla de opciones
|
Menu *options; // Menú de la pantalla de opciones
|
||||||
Menu *active; // Menu activo (de momento para la pantalla del titulo)
|
Menu *playerSelect; // Menu para elegir jugador
|
||||||
bool keyPressed; // Variable para evitar la repetición de teclas en los menus
|
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
|
// Objetos
|
||||||
@@ -91,6 +92,9 @@ private:
|
|||||||
std::vector<input_t> availableInputDevices; // Vector con todos los metodos de control disponibles
|
std::vector<input_t> availableInputDevices; // Vector con todos los metodos de control disponibles
|
||||||
std::vector<int> deviceIndex; // Indice para el jugador [i] del vector de dispositivos de entrada disponibles
|
std::vector<int> deviceIndex; // Indice para el jugador [i] del vector de dispositivos de entrada disponibles
|
||||||
|
|
||||||
|
// Inicializa los valores
|
||||||
|
void init();
|
||||||
|
|
||||||
// Actualiza las variables del objeto
|
// Actualiza las variables del objeto
|
||||||
void update();
|
void update();
|
||||||
|
|
||||||
@@ -113,10 +117,10 @@ private:
|
|||||||
void applyOptions();
|
void applyOptions();
|
||||||
|
|
||||||
// Ejecuta la parte donde se muestran las instrucciones
|
// Ejecuta la parte donde se muestran las instrucciones
|
||||||
void runInstructions(Uint8 mode);
|
section_t runInstructions(mode_e mode);
|
||||||
|
|
||||||
// Ejecuta el juego en modo demo
|
// Ejecuta el juego en modo demo
|
||||||
void runDemoGame();
|
section_t runDemoGame();
|
||||||
|
|
||||||
// Modifica las opciones para los controles de los jugadores
|
// Modifica las opciones para los controles de los jugadores
|
||||||
bool updatePlayerInputs(int numPlayer);
|
bool updatePlayerInputs(int numPlayer);
|
||||||
@@ -127,6 +131,9 @@ private:
|
|||||||
// Comprueba cuantos mandos hay conectados para gestionar el menu de opciones
|
// Comprueba cuantos mandos hay conectados para gestionar el menu de opciones
|
||||||
void checkInputDevices();
|
void checkInputDevices();
|
||||||
|
|
||||||
|
// Recarga las texturas
|
||||||
|
void reloadTextures();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// Constructor
|
// Constructor
|
||||||
Title(SDL_Renderer *renderer, Screen *screen, Input *input, Asset *asset, options_t *options, Lang *lang, section_t section);
|
Title(SDL_Renderer *renderer, Screen *screen, Input *input, Asset *asset, options_t *options, Lang *lang, section_t section);
|
||||||
|
|||||||
@@ -87,6 +87,7 @@ struct input_t
|
|||||||
struct options_t
|
struct options_t
|
||||||
{
|
{
|
||||||
Uint8 difficulty; // Dificultad del juego
|
Uint8 difficulty; // Dificultad del juego
|
||||||
|
Uint8 playerSelected; // Jugador seleccionado para el modo 1P
|
||||||
std::vector<input_t> input; // Modo de control (teclado o mando)
|
std::vector<input_t> input; // Modo de control (teclado o mando)
|
||||||
Uint8 language; // Idioma usado en el juego
|
Uint8 language; // Idioma usado en el juego
|
||||||
Uint32 fullScreenMode; // Contiene el valor del modo de pantalla completa
|
Uint32 fullScreenMode; // Contiene el valor del modo de pantalla completa
|
||||||
|
|||||||
23
todo.txt
@@ -1,23 +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
|
|
||||||
falta el aura de superguerrero al pillar la maquina de cafe
|
|
||||||
x la powerball deja la mascara al explotarlas
|
|
||||||
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
|
|
||||||
arreglar los smart sprites de muerte y de perder el cafe
|
|
||||||
arreglar los items de las instrucciones
|
|
||||||
que cicle la musica en el titulo, demo, instrucciones
|
|
||||||
que guarde el progreso del juego
|
|
||||||
que aumente la velocidad de las nubes conforme avanzas
|
|
||||||
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
|
|
||||||
que grite "yiiijaa!" o algo parecido al coger la maquina de cafe
|
|
||||||
o que diga DIMONIS! en un globo de texto que se evapore
|
|
||||||
podrian salir comentarios aleatoriamente o con ciertos eventos (falta ver si no estorbará)
|
|
||||||
que se vea el nivel de dificultad
|
|
||||||