51 Commits

Author SHA1 Message Date
8c293a6b7f Añadido coffee_crisis.icns 2022-11-11 21:38:09 +01:00
a3599d2d3d Actualizado Makefile para crear releases. Ejecutable pasa a estar en la raíz 2022-11-11 18:55:28 +01:00
7ab81eaf29 Actualizado animatedsprite.cpp 2022-10-20 09:18:18 +02:00
4f1a596e46 Arreglos y limpieza de código 2022-10-19 09:53:23 +02:00
b07baa4669 Movidos los archivos de clases comunes a la carpeta common 2022-10-19 09:38:38 +02:00
cf357560b2 Pequeños cambios en las librerias comunes 2022-10-17 19:53:19 +02:00
3d52c45f5c Actualizado Makefile 2022-10-14 10:55:27 +02:00
3276027044 Subido el numero de versión 2022-10-14 10:46:18 +02:00
8041595976 Añadido contador al quitar el menu de pausa del juego 2022-10-14 10:44:50 +02:00
fa53c1b01a Merge branch 'master' of https://gitea.sustancia.synology.me/JailDesigner/coffee_crisis 2022-10-14 09:56:22 +02:00
20b362160e Arreglado el fallo en el sprite de muerte del arounder, tenia pantalón corto 2022-10-14 09:56:04 +02:00
5cabbfc487 Eliminar 'data/config/config.bin' 2022-10-14 09:53:38 +02:00
9f5e001c70 Eliminar 'data/config/score.bin' 2022-10-14 09:53:27 +02:00
112c3afc76 Solucionado el problema de no cerrar el juego durante la demo o las instrucciones 2022-10-14 09:52:15 +02:00
f4215384fe Actualizado Makefile 2022-10-13 10:46:40 +02:00
7796cee51a Actualizado Makefile 2022-10-13 10:41:22 +02:00
f83154c062 Listo para lanzamiento 2022-10-09 14:23:45 +02:00
9e73f7f97d Eliminado todo.txt 2022-10-09 13:02:18 +02:00
742ca02573 Revisados varios pequeños bugs 2022-10-09 12:58:23 +02:00
d77757853d Quitadas las cabezas rojas de powerup y acelerada la animación 2022-10-09 12:01:28 +02:00
ca7ae7418e Arreglado el modo 2P 2022-10-09 11:46:11 +02:00
f880bb7d74 Modificado el ritmo de las numbes i el cambio de color del cielo 2022-10-08 00:14:14 +02:00
9784b5517a Trabajando el menu de game over y el player_fire 2022-10-07 22:44:57 +02:00
88041eba23 Merge branch 'master' of https://gitea.sustancia.synology.me/JailDesigner/coffee_crisis 2022-10-07 18:30:44 +02:00
698721ae03 Trabajando en la pantalla de game over 2022-10-07 18:30:41 +02:00
c7109a46cd Pequeños ajustes y detalles 2022-10-07 13:56:51 +02:00
bb20522172 Arreglados dos fallos del menu 2022-10-06 19:06:39 +02:00
bebc016f3c Las instrucciones ya usan las nuevas texturas de objetos 2022-10-06 13:46:41 +02:00
56c1a1d7f3 Arreglada la animacion de morir. Ya no se usan smartsprites 2022-10-06 13:13:27 +02:00
50d2a5d1c7 Ya va pasando del titulo a las instrucciones, a la demo, etc.. 2022-10-06 10:31:48 +02:00
83103ddfea Arreglados los cambios de lenguaje 2022-10-06 09:39:39 +02:00
f4f7bb52b3 Actualizado makefile 2022-10-06 08:01:23 +02:00
b861f33867 Actualizado Makefile 2022-10-06 07:16:58 +02:00
2576d62002 Optimizados algunos png 2022-10-05 22:37:37 +02:00
02312e1342 Ya precarga todos los recursos del juego 2022-10-05 20:48:55 +02:00
83a34d61bf Trabajando en tener todos los recursos cargados previamente 2022-10-05 19:17:45 +02:00
8076d8a765 Trabajando en la cache de los recursos de los items 2022-10-05 14:02:50 +02:00
901757b9b2 Actualizado .gitignore 2022-10-05 13:02:57 +02:00
f5ba15a4af Renombradas las variables de game.cpp 2022-10-05 12:30:45 +02:00
6eda55cdae Redistribución de los graficos de fondo en varios png 2022-10-05 10:22:38 +02:00
18c36ad3fb Ya se puede continuar al morir 2022-10-04 21:40:33 +02:00
a5adf1ba01 La maquina de cafe no toca el suelo 2022-10-04 19:11:31 +02:00
d5ab7cbe2a Renombradas las variablesde balloon.cpp 2022-10-04 18:27:49 +02:00
adad58ccfa Renombradas las variables de bullet.cpp 2022-10-04 18:11:42 +02:00
33b7c6082e Añadido todo.txt 2022-10-04 17:56:38 +02:00
5fd1ffa865 Retocado el borde de la powerball y quitados los efectos de rebote 2022-10-04 16:58:10 +02:00
9f93de1d06 Resuelto un bug en la colision de balas con globos 2022-10-04 14:16:22 +02:00
c3fd348a61 Optimizada la carga de las animaciones de los globos. Cacheada 2022-10-04 12:13:47 +02:00
ddb70c8c85 Fallo parcial en la carga de animaciones desde streams 2022-10-04 07:09:28 +02:00
95d6396dfa Resueltos los dos últimos problemas 2022-10-03 17:14:33 +02:00
99b61c4b2d Los items ya parecen funcionar. revisar power ball y los puntos al coger items 2022-10-03 14:11:13 +02:00
110 changed files with 5428 additions and 4093 deletions

14
.gitignore vendored
View File

@@ -1,5 +1,13 @@
.vscode .vscode
*config.txt
*.DS_Store *.DS_Store
bin thumbs.db
data/config.bin *.exe
data/score.bin *_macos
*_linux
*.dmg
*.tar.gz
*.zip
*.app
*config.bin
*score.bin

123
Makefile
View File

@@ -1,13 +1,118 @@
executable = coffee_crisis executable = coffee_crisis
source = source/*.cpp source/common/*.cpp
appName = Coffee Crisis
releaseFolder = cc_release
version = v2.1b
windows:
@echo off
powershell if (Test-Path data\config\config.bin) {Remove-Item data\config\config.bin -Recurse -Force}
powershell if (Test-Path data\config\score.bin) {Remove-Item data\config\score.bin -Recurse -Force}
g++ $(source) -std=c++11 -Wall -Os -lmingw32 -lSDL2main -lSDL2 -ffunction-sections -fdata-sections -Wl,--gc-sections -static-libstdc++ -Wl,-subsystem,windows -o $(executable).exe
strip -s -R .comment -R .gnu.version $(executable).exe --strip-unneeded
windows_release:
@echo off
# Remove data
powershell if (Test-Path data\config\config.bin) {Remove-Item data\config\config.bin -Recurse -Force}
powershell if (Test-Path data\config\score.bin) {Remove-Item data\config\score.bin -Recurse -Force}
powershell if (Test-Path $(releaseFolder)) {Remove-Item $(releaseFolder) -Recurse -Force}
# Create folders
powershell if (-not (Test-Path $(releaseFolder))) {New-Item $(releaseFolder) -ItemType Directory}
# Copy data
powershell Copy-Item -Path "data" -Destination "$(releaseFolder)" -recurse -Force
powershell Copy-Item "LICENSE" -Destination "$(releaseFolder)"
powershell Copy-Item "README.md" -Destination "$(releaseFolder)"
powershell Copy-Item "release/SDL2.dll" -Destination "$(releaseFolder)"
# Build
g++ $(source) -D RELEASE -std=c++11 -Wall -Os -lmingw32 -lSDL2main -lSDL2 -ffunction-sections -fdata-sections -Wl,--gc-sections -static-libstdc++ -Wl,-subsystem,windows -o "$(releaseFolder)/$(executable).exe"
strip -s -R .comment -R .gnu.version "$(releaseFolder)/$(executable).exe" --strip-unneeded
# Create ZIP
powershell if (Test-Path $(executable)_win_$(version).zip) {Remove-Item $(executable)_win_$(version).zip}
powershell Compress-Archive -Path "$(releaseFolder)"/* -DestinationPath $(executable)_win_$(version).zip
# Remove folder
powershell if (Test-Path $(releaseFolder)) {Remove-Item $(releaseFolder) -Recurse -Force}
macos: macos:
mkdir -p bin rm -f data/config/config.bin
g++ -std=c++11 -Wall -O2 source/*.cpp -o bin/$(executable)_macos -lSDL2 rm -f data/config/score.bin
clang++ $(source) -std=c++11 -Wall -Os -lSDL2 -ffunction-sections -fdata-sections -o $(executable)_macos -target arm64-apple-macos11
macos_release:
# Remove data
rm -f data/config/config.bin
rm -f data/config/score.bin
rm -rdf "$(releaseFolder)"
# Create folders
mkdir -p "$(releaseFolder)/$(appName).app/Contents/Frameworks"
mkdir -p "$(releaseFolder)/$(appName).app/Contents/MacOS"
mkdir -p "$(releaseFolder)/$(appName).app/Contents/Resources"
mkdir -p Frameworks
# Copy folders
cp -R data "$(releaseFolder)/$(appName).app/Contents/Resources"
cp -R /Library/Frameworks/SDL2.framework "$(releaseFolder)/$(appName).app/Contents/Frameworks"
cp -R /Library/Frameworks/SDL2.framework Frameworks
# Copy files
cp release/*.icns "$(releaseFolder)/$(appName).app/Contents/Resources"
cp release/Info.plist "$(releaseFolder)/$(appName).app/Contents"
# Build INTEL
clang++ $(source) -D RELEASE -D MACOS_BUNDLE -std=c++11 -Wall -Os -framework SDL2 -F ./Frameworks -ffunction-sections -fdata-sections -o "$(releaseFolder)/$(appName).app/Contents/MacOS/$(executable)" -rpath @executable_path/../Frameworks/ -target x86_64-apple-macos10.12
# Build INTEL DMG
rm -f "$(executable)_macos_intel_$(version).dmg"
hdiutil create tmp.dmg -ov -volname "$(appName)" -fs HFS+ -srcfolder "$(releaseFolder)"
hdiutil convert tmp.dmg -format UDZO -o "$(executable)_macos_intel_$(version).dmg"
rm tmp.dmg
# Build APPLE SILICON
clang++ $(source) -D RELEASE -D MACOS_BUNDLE -std=c++11 -Wall -Os -framework SDL2 -F ./Frameworks -ffunction-sections -fdata-sections -o "$(releaseFolder)/$(appName).app/Contents/MacOS/$(executable)" -rpath @executable_path/../Frameworks/ -target arm64-apple-macos11
# Build APPLE SILICON DMG
rm -f "$(executable)_macos_apple_silicon_$(version).dmg"
hdiutil create tmp.dmg -ov -volname "$(appName)" -fs HFS+ -srcfolder "$(releaseFolder)"
hdiutil convert tmp.dmg -format UDZO -o "$(executable)_macos_apple_silicon_$(version).dmg"
rm tmp.dmg
# Remove data
rm -rdf Frameworks
rm -rdf "$(releaseFolder)"
linux: linux:
mkdir -p bin rm -f data/config/config.bin
g++ source/*.cpp -std=c++11 -Os -lSDL2 -ffunction-sections -fdata-sections -Wl,--gc-sections -o bin/$(executable)_linux rm -f data/config/score.bin
strip -s -R .comment -R .gnu.version bin/$(executable)_linux --strip-unneeded g++ $(source) -std=c++11 -Wall -Os -lSDL2 -ffunction-sections -fdata-sections -Wl,--gc-sections -o $(executable)_linux
opendingux: strip -s -R .comment -R .gnu.version $(executable)_linux --strip-unneeded
mkdir -p bin
/opt/gcw0-toolchain/usr/bin/mipsel-linux-gcc -D GCWZERO -O2 -std=c++11 -I/opt/gcw0-toolchain/usr/mipsel-gcw0-linux-uclibc/sysroot/usr/include/SDL2 -D_GNU_SOURCE=1 -D_REENTRANT -lSDL2 -lSDL2_mixer -lstdc++ source/*.cpp -o bin/$(executable)_opendingux linux_release:
/opt/gcw0-toolchain/usr/bin/mksquashfs ./default.gcw0.desktop ./icon.png ./bin ./data ./media coffee_crisis.opk -all-root -noappend -no-exports -no-xattrs # Remove data
rm -f data/config/config.bin
rm -f data/config/score.bin
rm -rdf $(releaseFolder)
# Create folders
mkdir -p $(releaseFolder)
# Copy data
cp -R data $(releaseFolder)
cp LICENSE $(releaseFolder)
cp README.md $(releaseFolder)
# Build
g++ $(source) -D RELEASE -std=c++11 -Wall -Os -lSDL2 -ffunction-sections -fdata-sections -Wl,--gc-sections -o $(releaseFolder)/$(executable)
strip -s -R .comment -R .gnu.version $(releaseFolder)/$(executable) --strip-unneeded
# Pack files
cd $(releaseFolder) && tar -czvf ../$(executable)_linux_$(version).tar.gz *
# Remove data
rm -rdf $(releaseFolder)

Binary file not shown.

Binary file not shown.

View File

@@ -33,5 +33,5 @@ frames=36,37,38,39,40,41,42,43,44,45
name=pop name=pop
speed=5 speed=5
loop=-1 loop=-1
frames=60,61,62,63,64,65,66,67,68,69,70,71 frames=48,49,50,51,52,53,54,55,56,57,58,59
[/animation] [/animation]

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@@ -33,5 +33,5 @@ frames=36,37,38,39,40,41,42,43,44,45
name=pop name=pop
speed=5 speed=5
loop=-1 loop=-1
frames=60,61,62,63,64,65,66,67,68,69,70,71 frames=48,49,50,51,52,53,54,55,56,57,58,59
[/animation] [/animation]

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

@@ -33,5 +33,5 @@ frames=36,37,38,39,40,41,42,43,44,45
name=pop name=pop
speed=5 speed=5
loop=-1 loop=-1
frames=60,61,62,63,64,65,66,67,68,69,70,71 frames=48,49,50,51,52,53,54,55,56,57,58,59
[/animation] [/animation]

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

@@ -31,14 +31,14 @@ frames=36,37,38,39,40,41,42,43,44,45
[animation] [animation]
name=powerball name=powerball
speed=20 speed=10
loop=0 loop=0
frames=48 frames=10
[/animation] [/animation]
[animation] [animation]
name=pop name=pop
speed=5 speed=5
loop=-1 loop=-1
frames=60,61,62,63,64,65,66,67,68,69,70,71 frames=48,49,50,51,52,53,54,55,56,57,58,59
[/animation] [/animation]

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

BIN
data/gfx/game_buildings.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

BIN
data/gfx/game_clouds.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 901 B

BIN
data/gfx/game_grass.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 468 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 270 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 795 B

After

Width:  |  Height:  |  Size: 438 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

BIN
data/gfx/menu_game_over.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

@@ -1,86 +0,0 @@
frameWidth=24
frameHeight=24
[animation]
name=walk
speed=5
loop=0
frames=0,1,2,3
[/animation]
[animation]
name=stand
speed=10
loop=0
frames=4,5,6,7
[/animation]
[animation]
name=walk_1C
speed=5
loop=0
frames=8,9,10,11
[/animation]
[animation]
name=stand_1C
speed=10
loop=0
frames=12,13,14,15
[/animation]
[animation]
name=walk_2C
speed=5
loop=0
frames=16,17,18,19
[/animation]
[animation]
name=stand_2C
speed=10
loop=0
frames=20,21,22,23
[/animation]
[animation]
name=sideshoot
speed=5
loop=0
frames=24,25,26,27
[/animation]
[animation]
name=centershoot
speed=10
loop=0
frames=28,29,30,31
[/animation]
[animation]
name=sideshoot_1C
speed=5
loop=0
frames=32,33,34,35
[/animation]
[animation]
name=centershoot_1C
speed=10
loop=0
frames=36,37,38,39
[/animation]
[animation]
name=sideshoot_2C
speed=5
loop=0
frames=40,41,42,43
[/animation]
[animation]
name=centershoot_2C
speed=10
loop=0
frames=44,45,46,47
[/animation]

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 654 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 887 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 443 B

View File

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 835 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

Before

Width:  |  Height:  |  Size: 529 B

After

Width:  |  Height:  |  Size: 529 B

176
data/gfx/player_body.ani Normal file
View File

@@ -0,0 +1,176 @@
frameWidth=24
frameHeight=24
[animation]
name=walk
speed=5
loop=0
frames=0,1,2,3
[/animation]
[animation]
name=stand
speed=10
loop=0
frames=4,5,6,7
[/animation]
[animation]
name=walk_1C
speed=5
loop=0
frames=8,9,10,11
[/animation]
[animation]
name=stand_1C
speed=10
loop=0
frames=12,13,14,15
[/animation]
[animation]
name=walk_2C
speed=5
loop=0
frames=16,17,18,19
[/animation]
[animation]
name=stand_2C
speed=10
loop=0
frames=20,21,22,23
[/animation]
[animation]
name=sideshoot
speed=5
loop=0
frames=24,25,26,27
[/animation]
[animation]
name=centershoot
speed=5
loop=0
frames=28,29,30,31
[/animation]
[animation]
name=sideshoot_1C
speed=5
loop=0
frames=32,33,34,35
[/animation]
[animation]
name=centershoot_1C
speed=5
loop=0
frames=36,37,38,39
[/animation]
[animation]
name=sideshoot_2C
speed=5
loop=0
frames=40,41,42,43
[/animation]
[animation]
name=centershoot_2C
speed=5
loop=0
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]

9
data/gfx/player_fire.ani Normal file
View File

@@ -0,0 +1,9 @@
frameWidth=28
frameHeight=32
[animation]
name=default
speed=5
loop=0
frames=0,1,2,3
[/animation]

View File

@@ -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=10 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=10 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=10 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=10 speed=2
loop=0 loop=0
frames=60,61,62,63 frames=28,29,30,31
[/animation] [/animation]

View File

@@ -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!

View File

@@ -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!

View File

@@ -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!

View File

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

View File

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

View File

@@ -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]

View 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]

View File

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

Binary file not shown.

42
release/Info.plist Normal file
View File

@@ -0,0 +1,42 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>es</string>
<key>CFBundleDisplayName</key>
<string>coffee_crisis</string>
<key>CFBundleExecutable</key>
<string>coffee_crisis</string>
<key>CFBundleIconFile</key>
<string>coffee_crisis</string>
<key>CFBundleIconName</key>
<string>coffee_crisis</string>
<key>CFBundleIdentifier</key>
<string>org.jailgames.coffee_crisis</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>coffee_crisis</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0.0</string>
<key>CSResourcesFileMapped</key>
<true/>
<key>LSMinimumSystemVersion</key>
<string>10.12</string>
<key>NSHighResolutionCapable</key>
<true/>
<key>NSHumanReadableCopyright</key>
<string>Copyright 2022 JailDesigner</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
<key>SUPublicDSAKeyFile</key>
<string>dsa_pub.pem</string>
</dict>
</plist>

BIN
release/SDL2.dll Executable file

Binary file not shown.

BIN
release/coffee_crisis.icns Normal file

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -1,8 +1,9 @@
#pragma once #pragma once
#include <SDL2/SDL.h> #include <SDL2/SDL.h>
#include "utils.h" #include "common/animatedsprite.h"
#include "animatedsprite.h" #include "common/utils.h"
#include <sstream>
#include <vector> #include <vector>
#ifndef BALLOON_H #ifndef BALLOON_H
@@ -85,37 +86,39 @@ private:
std::vector<float> h; // Vector con los valores de zoom para el alto del globo std::vector<float> h; // Vector con los valores de zoom para el alto del globo
}; };
float mPosX; // Posición en el eje X // Objetos y punteros
float mPosY; // Posición en el eje Y AnimatedSprite *sprite; // Sprite del objeto globo
Uint8 mWidth; // Ancho
Uint8 mHeight; // Alto // Variables
float mVelX; // Velocidad en el eje X. Cantidad de pixeles a desplazarse float posX; // Posición en el eje X
float mVelY; // Velocidad en el eje Y. Cantidad de pixeles a desplazarse float posY; // Posición en el eje Y
float mGravity; // Aceleración en el eje Y. Modifica la velocidad Uint8 width; // Ancho
float mDefaultVelY; // Velocidad inicial que tienen al rebotar contra el suelo Uint8 height; // Alto
float mMaxVelY; // Máxima velocidad que puede alcanzar el objeto en el eje Y float velX; // Velocidad en el eje X. Cantidad de pixeles a desplazarse
AnimatedSprite *mSprite; // Sprite del objeto globo float velY; // Velocidad en el eje Y. Cantidad de pixeles a desplazarse
bool mBeingCreated; // Indica si el globo se está creando float gravity; // Aceleración en el eje Y. Modifica la velocidad
bool mBlinking; // Indica si el globo está intermitente float defaultVelY; // Velocidad inicial que tienen al rebotar contra el suelo
bool mEnabled; // Indica si el globo esta activo float maxVelY; // Máxima velocidad que puede alcanzar el objeto en el eje Y
bool mInvulnerable; // Indica si el globo es invulnerable bool beingCreated; // Indica si el globo se está creando
bool mPopping; // Indica si el globo está explotando bool blinking; // Indica si el globo está intermitente
bool mStopped; // Indica si el globo está parado bool enabled; // Indica si el globo esta activo
bool mVisible; // Indica si el globo es visible bool invulnerable; // Indica si el globo es invulnerable
circle_t mCollider; // Circulo de colisión del objeto bool popping; // Indica si el globo está explotando
Uint16 mCreationCounter; // Temporizador para controlar el estado "creandose" bool stopped; // Indica si el globo está parado
Uint16 mCreationCounterIni; // Valor inicial para el temporizador para controlar el estado "creandose" bool visible; // Indica si el globo es visible
Uint16 mScore; // Puntos que da el globo al ser destruido circle_t collider; // Circulo de colisión del objeto
Uint16 mStoppedCounter; // Contador para controlar el estado "parado" Uint16 creationCounter; // Temporizador para controlar el estado "creandose"
Uint16 mTimeToLive; // Indica el tiempo de vida que le queda al globo Uint16 creationCounterIni; // Valor inicial para el temporizador para controlar el estado "creandose"
Uint8 mKind; // Tipo de globo Uint16 score; // Puntos que da el globo al ser destruido
Uint8 mMenace; // Cantidad de amenaza que genera el globo Uint16 stoppedCounter; // Contador para controlar el estado "parado"
Uint32 mCounter; // Contador interno Uint8 kind; // Tipo de globo
float mTravelY; // Distancia que ha de recorrer el globo en el eje Y antes de que se le aplique la gravedad Uint8 menace; // Cantidad de amenaza que genera el globo
float mSpeed; // Velocidad a la que se mueven los globos Uint32 counter; // Contador interno
Uint8 mSize; // Tamaño del globo float travelY; // Distancia que ha de recorrer el globo en el eje Y antes de que se le aplique la gravedad
Uint8 mPower; // Cantidad de poder que alberga el globo float speed; // Velocidad a la que se mueven los globos
bouncing mBouncing; // Contiene las variables para el efecto de rebote Uint8 size; // Tamaño del globo
Uint8 power; // Cantidad de poder que alberga el globo
bouncing bouncing; // Contiene las variables para el efecto de rebote
// Alinea el circulo de colisión con la posición del objeto globo // Alinea el circulo de colisión con la posición del objeto globo
void updateColliders(); void updateColliders();
@@ -136,17 +139,11 @@ private:
void updateAnimation(); void updateAnimation();
// Establece el valor de la variable // Establece el valor de la variable
void setBeingCreated(bool state); void setBeingCreated(bool value);
// Establece el valor de la variable
void setTimeToLive(Uint16 time);
// Obtiene del valor de la variable
Uint16 getTimeToLive();
public: public:
// Constructor // Constructor
Balloon(float x, float y, Uint8 kind, float velx, float speed, Uint16 creationtimer, LTexture *texture, std::string file, SDL_Renderer *renderer); Balloon(float x, float y, Uint8 kind, float velx, float speed, Uint16 creationtimer, Texture *texture, std::vector<std::string> *animation, SDL_Renderer *renderer);
// Destructor // Destructor
~Balloon(); ~Balloon();
@@ -203,25 +200,25 @@ public:
Uint8 getClass(); Uint8 getClass();
// Establece el valor de la variable // Establece el valor de la variable
void setStop(bool state); void setStop(bool value);
// Obtiene del valor de la variable // Obtiene del valor de la variable
bool isStopped(); bool isStopped();
// Establece el valor de la variable // Establece el valor de la variable
void setBlink(bool state); void setBlink(bool value);
// Obtiene del valor de la variable // Obtiene del valor de la variable
bool isBlinking(); bool isBlinking();
// Establece el valor de la variable // Establece el valor de la variable
void setVisible(bool state); void setVisible(bool value);
// Obtiene del valor de la variable // Obtiene del valor de la variable
bool isVisible(); bool isVisible();
// Establece el valor de la variable // Establece el valor de la variable
void setInvulnerable(bool state); void setInvulnerable(bool value);
// Obtiene del valor de la variable // Obtiene del valor de la variable
bool isInvulnerable(); bool isInvulnerable();
@@ -230,7 +227,7 @@ public:
bool isBeingCreated(); bool isBeingCreated();
// Establece el valor de la variable // Establece el valor de la variable
void setPopping(bool state); void setPopping(bool value);
// Obtiene del valor de la variable // Obtiene del valor de la variable
bool isPopping(); bool isPopping();

View File

@@ -2,72 +2,72 @@
#include "bullet.h" #include "bullet.h"
// Constructor // Constructor
Bullet::Bullet(int x, int y, int kind, bool poweredUp, int owner, LTexture *texture, SDL_Renderer *renderer) Bullet::Bullet(int x, int y, int kind, bool poweredUp, int owner, Texture *texture, SDL_Renderer *renderer)
{ {
mSprite = new Sprite({x, y, 10, 10}, texture, renderer); sprite = new Sprite({x, y, 10, 10}, texture, renderer);
// Posición inicial del objeto // Posición inicial del objeto
mPosX = x; posX = x;
mPosY = y; posY = y;
// Alto y ancho del objeto // Alto y ancho del objeto
mWidth = 10; width = 10;
mHeight = 10; height = 10;
// Velocidad inicial en el eje Y // Velocidad inicial en el eje Y
mVelY = -3; velY = -3;
// Tipo de bala // Tipo de bala
mKind = kind; this->kind = kind;
// Identificador del dueño del objeto // Identificador del dueño del objeto
mOwner = owner; this->owner = owner;
// Valores especificos según el tipo // Valores especificos según el tipo
switch (kind) switch (kind)
{ {
case BULLET_UP: case BULLET_UP:
// Establece la velocidad inicial // Establece la velocidad inicial
mVelX = 0; velX = 0;
// Rectangulo con los gráficos del objeto // Rectangulo con los gráficos del objeto
if (!poweredUp) if (!poweredUp)
{ {
mSprite->setSpriteClip(0 * mWidth, 0, mSprite->getWidth(), mSprite->getHeight()); sprite->setSpriteClip(0 * width, 0, sprite->getWidth(), sprite->getHeight());
} }
else else
{ {
mSprite->setSpriteClip((0 + 3) * mWidth, 0, mSprite->getWidth(), mSprite->getHeight()); sprite->setSpriteClip((0 + 3) * width, 0, sprite->getWidth(), sprite->getHeight());
} }
break; break;
case BULLET_LEFT: case BULLET_LEFT:
// Establece la velocidad inicial // Establece la velocidad inicial
mVelX = -2; velX = -2;
// Rectangulo con los gráficos del objeto // Rectangulo con los gráficos del objeto
if (!poweredUp) if (!poweredUp)
{ {
mSprite->setSpriteClip(1 * mWidth, 0, mSprite->getWidth(), mSprite->getHeight()); sprite->setSpriteClip(1 * width, 0, sprite->getWidth(), sprite->getHeight());
} }
else else
{ {
mSprite->setSpriteClip((1 + 3) * mWidth, 0, mSprite->getWidth(), mSprite->getHeight()); sprite->setSpriteClip((1 + 3) * width, 0, sprite->getWidth(), sprite->getHeight());
} }
break; break;
case BULLET_RIGHT: case BULLET_RIGHT:
// Establece la velocidad inicial // Establece la velocidad inicial
mVelX = 2; velX = 2;
// Rectangulo con los gráficos del objeto // Rectangulo con los gráficos del objeto
if (!poweredUp) if (!poweredUp)
{ {
mSprite->setSpriteClip(2 * mWidth, 0, mSprite->getWidth(), mSprite->getHeight()); sprite->setSpriteClip(2 * width, 0, sprite->getWidth(), sprite->getHeight());
} }
else else
{ {
mSprite->setSpriteClip((2 + 3) * mWidth, 0, mSprite->getWidth(), mSprite->getHeight()); sprite->setSpriteClip((2 + 3) * width, 0, sprite->getWidth(), sprite->getHeight());
} }
break; break;
@@ -76,7 +76,7 @@ Bullet::Bullet(int x, int y, int kind, bool poweredUp, int owner, LTexture *text
} }
// Establece el tamaño del circulo de colisión // Establece el tamaño del circulo de colisión
mCollider.r = mWidth / 2; collider.r = width / 2;
// Alinea el circulo de colisión con el objeto // Alinea el circulo de colisión con el objeto
shiftColliders(); shiftColliders();
@@ -85,13 +85,13 @@ Bullet::Bullet(int x, int y, int kind, bool poweredUp, int owner, LTexture *text
// Destructor // Destructor
Bullet::~Bullet() Bullet::~Bullet()
{ {
delete mSprite; delete sprite;
} }
// Pinta el objeto en pantalla // Pinta el objeto en pantalla
void Bullet::render() void Bullet::render()
{ {
mSprite->render(); sprite->render();
} }
// Actualiza la posición y estado del objeto en horizontal // Actualiza la posición y estado del objeto en horizontal
@@ -101,34 +101,34 @@ Uint8 Bullet::move()
Uint8 msg = BULLET_MOVE_OK; Uint8 msg = BULLET_MOVE_OK;
// Mueve el objeto a su nueva posición // Mueve el objeto a su nueva posición
mPosX += mVelX; posX += velX;
// Si el objeto se sale del area de juego por los laterales // Si el objeto se sale del area de juego por los laterales
if ((mPosX < PLAY_AREA_LEFT) || (mPosX + mWidth > PLAY_AREA_RIGHT)) if ((posX < PLAY_AREA_LEFT - width) || (posX > PLAY_AREA_RIGHT))
{ {
// Se deshabilita // Se deshabilita
mKind = NO_KIND; kind = NO_KIND;
// Mensaje de salida // Mensaje de salida
msg = BULLET_MOVE_OUT; msg = BULLET_MOVE_OUT;
} }
// Mueve el objeto a su nueva posición en vertical // Mueve el objeto a su nueva posición en vertical
mPosY += int(mVelY); posY += int(velY);
// Si el objeto se sale del area de juego por la parte superior o inferior // Si el objeto se sale del area de juego por la parte superior
if ((mPosY < PLAY_AREA_TOP) || (mPosY + mHeight > PLAY_AREA_BOTTOM)) if (posY < PLAY_AREA_TOP - height)
{ {
// Se deshabilita // Se deshabilita
mKind = NO_KIND; kind = NO_KIND;
// Mensaje de salida // Mensaje de salida
msg = BULLET_MOVE_OUT; msg = BULLET_MOVE_OUT;
} }
// Actualiza la posición del sprite // Actualiza la posición del sprite
mSprite->setPosX(mPosX); sprite->setPosX(posX);
mSprite->setPosY(mPosY); sprite->setPosY(posY);
// Alinea el circulo de colisión con el objeto // Alinea el circulo de colisión con el objeto
shiftColliders(); shiftColliders();
@@ -136,10 +136,10 @@ Uint8 Bullet::move()
return msg; return msg;
} }
// Comprueba si el objeto está activo // Comprueba si el objeto está habilitado
bool Bullet::isActive() bool Bullet::isEnabled()
{ {
if (mKind == NO_KIND) if (kind == NO_KIND)
{ {
return false; return false;
} }
@@ -149,63 +149,63 @@ bool Bullet::isActive()
} }
} }
// Desactiva el objeto // Deshabilita el objeto
void Bullet::deactivate() void Bullet::disable()
{ {
mKind = NO_KIND; kind = NO_KIND;
} }
// Obtiene el valor de la variable // Obtiene el valor de la variable
int Bullet::getPosX() int Bullet::getPosX()
{ {
return mPosX; return posX;
} }
// Obtiene el valor de la variable // Obtiene el valor de la variable
int Bullet::getPosY() int Bullet::getPosY()
{ {
return mPosY; return posY;
} }
// Establece el valor de la variable // Establece el valor de la variable
void Bullet::setPosX(int x) void Bullet::setPosX(int x)
{ {
mPosX = x; posX = x;
} }
// Establece el valor de la variable // Establece el valor de la variable
void Bullet::setPosY(int y) void Bullet::setPosY(int y)
{ {
mPosY = y; posY = y;
} }
// Obtiene el valor de la variable // Obtiene el valor de la variable
int Bullet::getVelY() int Bullet::getVelY()
{ {
return mVelY; return velY;
} }
// Obtiene el valor de la variable // Obtiene el valor de la variable
int Bullet::getKind() int Bullet::getKind()
{ {
return mKind; return kind;
} }
// Obtiene el valor de la variable // Obtiene el valor de la variable
int Bullet::getOwner() int Bullet::getOwner()
{ {
return mOwner; return owner;
} }
// Obtiene el circulo de colisión // Obtiene el circulo de colisión
circle_t &Bullet::getCollider() circle_t &Bullet::getCollider()
{ {
return mCollider; return collider;
} }
// Alinea el circulo de colisión con el objeto // Alinea el circulo de colisión con el objeto
void Bullet::shiftColliders() void Bullet::shiftColliders()
{ {
mCollider.x = mPosX + mCollider.r; collider.x = posX + collider.r;
mCollider.y = mPosY + mCollider.r; collider.y = posY + collider.r;
} }

View File

@@ -1,8 +1,8 @@
#pragma once #pragma once
#include <SDL2/SDL.h> #include <SDL2/SDL.h>
#include "utils.h" #include "common/sprite.h"
#include "sprite.h" #include "common/utils.h"
#ifndef BULLET_H #ifndef BULLET_H
#define BULLET_H #define BULLET_H
@@ -20,23 +20,26 @@
class Bullet class Bullet
{ {
private: private:
int mPosX; // Posición en el eje X // Objetos y punteros
int mPosY; // Posición en el eje Y Sprite *sprite; // Sprite con los graficos y métodos de pintado
Uint8 mWidth; // Ancho del objeto
Uint8 mHeight; // Alto del objeto // Variables
int mVelX; // Velocidad en el eje X int posX; // Posición en el eje X
int mVelY; // Velocidad en el eje Y int posY; // Posición en el eje Y
int mKind; // Tipo de objeto Uint8 width; // Ancho del objeto
int mOwner; // Identificador del dueño del objeto Uint8 height; // Alto del objeto
Sprite *mSprite; // Sprite con los graficos y métodos de pintado int velX; // Velocidad en el eje X
circle_t mCollider; // Circulo de colisión del objeto int velY; // Velocidad en el eje Y
int kind; // Tipo de objeto
int owner; // Identificador del dueño del objeto
circle_t collider; // Circulo de colisión del objeto
// Alinea el circulo de colisión con el objeto // Alinea el circulo de colisión con el objeto
void shiftColliders(); void shiftColliders();
public: public:
// Constructor // Constructor
Bullet(int x, int y, int kind, bool poweredUp, int owner, LTexture *texture, SDL_Renderer *renderer); Bullet(int x, int y, int kind, bool poweredUp, int owner, Texture *texture, SDL_Renderer *renderer);
// Destructor // Destructor
~Bullet(); ~Bullet();
@@ -47,11 +50,11 @@ public:
// Actualiza la posición y estado del objeto // Actualiza la posición y estado del objeto
Uint8 move(); Uint8 move();
// Comprueba si el objeto está activo // Comprueba si el objeto está habilitado
bool isActive(); bool isEnabled();
// Desactiva el objeto // Deshabilita el objeto
void deactivate(); void disable();
// Obtiene el valor de la variable // Obtiene el valor de la variable
int getPosX(); int getPosX();

15
source/common/Makefile Normal file
View File

@@ -0,0 +1,15 @@
executable = jaildoctors_dilemma
source = source/*.cpp source/common/*.cpp
windows:
@echo off
if not exist bin\ (mkdir bin)
g++ $(source) -std=c++11 -Wall -O2 -lmingw32 -lSDL2main -lSDL2 -ffunction-sections -fdata-sections -Wl,--gc-sections -static-libstdc++ -Wl,-subsystem,windows -o bin/$(executable).exe
strip -s -R .comment -R .gnu.version bin/$(executable).exe --strip-unneeded
macos:
mkdir -p bin
g++ $(source) -std=c++11 -Wall -O2 -lSDL2 -ffunction-sections -fdata-sections -o bin/$(executable)_macos
linux:
mkdir -p bin
g++ $(source) -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

View File

@@ -1,8 +1,7 @@
#include "animatedsprite.h" #include "animatedsprite.h"
// Constructor // Constructor
AnimatedSprite::AnimatedSprite(LTexture *texture, SDL_Renderer *renderer, std::string file) AnimatedSprite::AnimatedSprite(Texture *texture, SDL_Renderer *renderer, std::string file, std::vector<std::string> *buffer)
{ {
// Copia los punteros // Copia los punteros
setTexture(texture); setTexture(texture);
@@ -11,7 +10,12 @@ AnimatedSprite::AnimatedSprite(LTexture *texture, SDL_Renderer *renderer, std::s
// Carga las animaciones // Carga las animaciones
if (file != "") if (file != "")
{ {
load(file); loadFromFile(file);
}
else if (buffer)
{
loadFromVector(buffer);
} }
// Inicializa variables // Inicializa variables
@@ -84,6 +88,12 @@ void AnimatedSprite::animate()
} }
} }
// Obtiene el numero de frames de la animación actual
int AnimatedSprite::getNumFrames()
{
return (int)animation.at(currentAnimation).frames.size();
}
// Establece el frame actual de la animación // Establece el frame actual de la animación
void AnimatedSprite::setCurrentFrame(int num) void AnimatedSprite::setCurrentFrame(int num)
{ {
@@ -161,7 +171,7 @@ SDL_Rect AnimatedSprite::getAnimationClip(int indexA, Uint8 indexF)
} }
// Carga la animación desde un fichero // Carga la animación desde un fichero
bool AnimatedSprite::load(std::string filePath) bool AnimatedSprite::loadFromFile(std::string filePath)
{ {
int framesPerRow = 0; int framesPerRow = 0;
int frameWidth = 0; int frameWidth = 0;
@@ -179,7 +189,7 @@ bool AnimatedSprite::load(std::string filePath)
if (file.good()) if (file.good())
{ {
// Procesa el fichero linea a linea // Procesa el fichero linea a linea
printf("Reading file %s\n", filename.c_str()); std::cout << "Loading animation from file: " << filePath.c_str() << std::endl;
while (std::getline(file, line)) while (std::getline(file, line))
{ {
// Si la linea contiene el texto [animation] se realiza el proceso de carga de una animación // Si la linea contiene el texto [animation] se realiza el proceso de carga de una animación
@@ -204,14 +214,17 @@ bool AnimatedSprite::load(std::string filePath)
{ {
buffer.name = line.substr(pos + 1, line.length()); buffer.name = line.substr(pos + 1, line.length());
} }
else if (line.substr(0, pos) == "speed") else if (line.substr(0, pos) == "speed")
{ {
buffer.speed = std::stoi(line.substr(pos + 1, line.length())); buffer.speed = std::stoi(line.substr(pos + 1, line.length()));
} }
else if (line.substr(0, pos) == "loop") else if (line.substr(0, pos) == "loop")
{ {
buffer.loop = std::stoi(line.substr(pos + 1, line.length())); buffer.loop = std::stoi(line.substr(pos + 1, line.length()));
} }
else if (line.substr(0, pos) == "frames") else if (line.substr(0, pos) == "frames")
{ {
// Se introducen los valores separados por comas en un vector // Se introducen los valores separados por comas en un vector
@@ -227,6 +240,7 @@ bool AnimatedSprite::load(std::string filePath)
buffer.frames.push_back(rect); buffer.frames.push_back(rect);
} }
} }
else else
{ {
printf("Warning: file %s, unknown parameter \"%s\"\n", filename.c_str(), line.substr(0, pos).c_str()); printf("Warning: file %s, unknown parameter \"%s\"\n", filename.c_str(), line.substr(0, pos).c_str());
@@ -286,7 +300,6 @@ bool AnimatedSprite::load(std::string filePath)
} }
// Cierra el fichero // Cierra el fichero
printf("Closing file %s\n\n", filename.c_str());
file.close(); file.close();
} }
// El fichero no se puede abrir // El fichero no se puede abrir
@@ -297,7 +310,145 @@ bool AnimatedSprite::load(std::string filePath)
} }
// Pone un valor por defecto // Pone un valor por defecto
setPos({0, 0, frameWidth, frameHeight}); setRect({0, 0, frameWidth, frameHeight});
return success;
}
// Carga la animación desde un vector
bool AnimatedSprite::loadFromVector(std::vector<std::string> *source)
{
// Inicializa variables
int framesPerRow = 0;
int frameWidth = 0;
int frameHeight = 0;
int maxTiles = 0;
// Indicador de éxito en el proceso
bool success = true;
std::string line;
// Recorre todo el vector
int index = 0;
while (index < (int)source->size())
{
// Lee desde el vector
line = source->at(index);
// Si la linea contiene el texto [animation] se realiza el proceso de carga de una animación
if (line == "[animation]")
{
t_animation buffer;
buffer.counter = 0;
buffer.currentFrame = 0;
buffer.completed = false;
do
{
// Aumenta el indice para leer la siguiente linea
index++;
line = source->at(index);
// Encuentra la posición del caracter '='
int pos = line.find("=");
// Procesa las dos subcadenas
if (pos != (int)line.npos)
{
if (line.substr(0, pos) == "name")
{
buffer.name = line.substr(pos + 1, line.length());
}
else if (line.substr(0, pos) == "speed")
{
buffer.speed = std::stoi(line.substr(pos + 1, line.length()));
}
else if (line.substr(0, pos) == "loop")
{
buffer.loop = std::stoi(line.substr(pos + 1, line.length()));
}
else if (line.substr(0, pos) == "frames")
{
// Se introducen los valores separados por comas en un vector
std::stringstream ss(line.substr(pos + 1, line.length()));
std::string tmp;
SDL_Rect rect = {0, 0, frameWidth, frameHeight};
while (getline(ss, tmp, ','))
{
// Comprueba que el tile no sea mayor que el maximo indice permitido
const int numTile = std::stoi(tmp) > maxTiles ? 0 : std::stoi(tmp);
rect.x = (numTile % framesPerRow) * frameWidth;
rect.y = (numTile / framesPerRow) * frameHeight;
buffer.frames.push_back(rect);
}
}
else
{
std::cout << "Warning: unknown parameter " << line.substr(0, pos).c_str() << std::endl;
success = false;
}
}
} while (line != "[/animation]");
// Añade la animación al vector de animaciones
animation.push_back(buffer);
}
// En caso contrario se parsea el fichero para buscar las variables y los valores
else
{
// Encuentra la posición del caracter '='
int pos = line.find("=");
// Procesa las dos subcadenas
if (pos != (int)line.npos)
{
if (line.substr(0, pos) == "framesPerRow")
{
framesPerRow = std::stoi(line.substr(pos + 1, line.length()));
}
else if (line.substr(0, pos) == "frameWidth")
{
frameWidth = std::stoi(line.substr(pos + 1, line.length()));
}
else if (line.substr(0, pos) == "frameHeight")
{
frameHeight = std::stoi(line.substr(pos + 1, line.length()));
}
else
{
std::cout << "Warning: unknown parameter " << line.substr(0, pos).c_str() << std::endl;
success = false;
}
// Normaliza valores
if (framesPerRow == 0 && frameWidth > 0)
{
framesPerRow = texture->getWidth() / frameWidth;
}
if (maxTiles == 0 && frameWidth > 0 && frameHeight > 0)
{
const int w = texture->getWidth() / frameWidth;
const int h = texture->getHeight() / frameHeight;
maxTiles = w * h;
}
}
}
// Una vez procesada la linea, aumenta el indice para pasar a la siguiente
index++;
}
// Pone un valor por defecto
setRect({0, 0, frameWidth, frameHeight});
return success; return success;
} }
@@ -349,3 +500,11 @@ 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;
}

View File

@@ -2,10 +2,11 @@
#include <SDL2/SDL.h> #include <SDL2/SDL.h>
#include "movingsprite.h" #include "movingsprite.h"
#include <vector>
#include <string>
#include <sstream>
#include <fstream> #include <fstream>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#ifndef ANIMATEDSPRITE_H #ifndef ANIMATEDSPRITE_H
#define ANIMATEDSPRITE_H #define ANIMATEDSPRITE_H
@@ -24,12 +25,14 @@ private:
int currentFrame; // Frame actual int currentFrame; // Frame actual
int counter; // Contador para las animaciones int counter; // Contador para las animaciones
}; };
// Variables
std::vector<t_animation> animation; // Vector con las diferentes animaciones std::vector<t_animation> animation; // Vector con las diferentes animaciones
int currentAnimation; // Animacion activa int currentAnimation; // Animacion activa
public: public:
// Constructor // Constructor
AnimatedSprite(LTexture *texture = nullptr, SDL_Renderer *renderer = nullptr, std::string file = ""); AnimatedSprite(Texture *texture = nullptr, SDL_Renderer *renderer = nullptr, std::string file = "", std::vector<std::string> *buffer = nullptr);
// Destructor // Destructor
~AnimatedSprite(); ~AnimatedSprite();
@@ -37,6 +40,9 @@ public:
// Calcula el frame correspondiente a la animación actual // Calcula el frame correspondiente a la animación actual
void animate(); void animate();
// Obtiene el numero de frames de la animación actual
int getNumFrames();
// Establece el frame actual de la animación // Establece el frame actual de la animación
void setCurrentFrame(int num); void setCurrentFrame(int num);
@@ -66,7 +72,10 @@ public:
int getIndex(std::string name); int getIndex(std::string name);
// Carga la animación desde un fichero // Carga la animación desde un fichero
bool load(std::string filePath); bool loadFromFile(std::string filePath);
// Carga la animación desde un vector
bool loadFromVector(std::vector<std::string> *source);
// Establece la animacion actual // Establece la animacion actual
void setCurrentAnimation(std::string name = "default"); void setCurrentAnimation(std::string name = "default");
@@ -80,6 +89,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

View File

@@ -1,10 +1,10 @@
#include "asset.h" #include "asset.h"
// Constructor // Constructor
Asset::Asset(std::string path) Asset::Asset(std::string executablePath)
{ {
executablePath = path; this->executablePath = executablePath.substr(0, executablePath.find_last_of("\\/"));
longest_name = 0; longestName = 0;
} }
// Destructor // Destructor
@@ -13,7 +13,7 @@ Asset::~Asset()
} }
// Añade un elemento a la lista // Añade un elemento a la lista
void Asset::add(std::string file, enum assetType_e type, bool required) void Asset::add(std::string file, enum assetType type, bool required)
{ {
item_t temp; item_t temp;
temp.file = executablePath + file; temp.file = executablePath + file;
@@ -22,7 +22,7 @@ void Asset::add(std::string file, enum assetType_e type, bool required)
fileList.push_back(temp); fileList.push_back(temp);
const std::string filename = file.substr(file.find_last_of("\\/") + 1); const std::string filename = file.substr(file.find_last_of("\\/") + 1);
longest_name = SDL_max(longest_name, filename.size()); longestName = SDL_max(longestName, filename.size());
} }
// Devuelve el fichero de un elemento de la lista a partir de una cadena // Devuelve el fichero de un elemento de la lista a partir de una cadena
@@ -106,7 +106,7 @@ bool Asset::checkFile(std::string path)
SDL_RWclose(file); SDL_RWclose(file);
} }
const std::string s = "Checking file %-" + std::to_string(longest_name) + "s [" + result + "]\n"; const std::string s = "Checking file %-" + std::to_string(longestName) + "s [" + result + "]\n";
printf(s.c_str(), filename.c_str()); printf(s.c_str(), filename.c_str());
return success; return success;

View File

@@ -7,7 +7,7 @@
#ifndef ASSET_H #ifndef ASSET_H
#define ASSET_H #define ASSET_H
enum assetType_e enum assetType
{ {
t_bitmap, t_bitmap,
t_music, t_music,
@@ -29,11 +29,11 @@ private:
struct item_t struct item_t
{ {
std::string file; // Ruta del fichero desde la raiz del directorio std::string file; // Ruta del fichero desde la raiz del directorio
enum assetType_e type; // Indica el tipo de recurso enum assetType type; // Indica el tipo de recurso
bool required; // Indica si es un fichero que debe de existir bool required; // Indica si es un fichero que debe de existir
}; };
int longest_name; // Contiene la longitud del nombre de fichero mas largo int longestName; // Contiene la longitud del nombre de fichero mas largo
std::vector<item_t> fileList; std::vector<item_t> fileList;
std::string executablePath; std::string executablePath;
@@ -46,13 +46,13 @@ private:
public: public:
// Constructor // Constructor
Asset(std::string path); Asset(std::string executablePath);
// Destructor // Destructor
~Asset(); ~Asset();
// Añade un elemento a la lista // Añade un elemento a la lista
void add(std::string file, enum assetType_e type, bool required = true); void add(std::string file, enum assetType type, bool required = true);
// Devuelve un elemento de la lista a partir de una cadena // Devuelve un elemento de la lista a partir de una cadena
std::string get(std::string text); std::string get(std::string text);

View File

@@ -97,7 +97,7 @@ bool Input::checkInput(Uint8 input, bool repeat, int device, int index)
{ {
if (repeat) if (repeat)
{ {
if (SDL_GameControllerGetButton(connectedControllers.at(index), gameControllerBindings[input].button) != 0) if (SDL_GameControllerGetButton(connectedControllers.at(index), gameControllerBindings.at(input).button) != 0)
{ {
successGameController = true; successGameController = true;
} }
@@ -108,11 +108,11 @@ bool Input::checkInput(Uint8 input, bool repeat, int device, int index)
} }
else else
{ {
if (!gameControllerBindings[input].active) if (!gameControllerBindings.at(input).active)
{ {
if (SDL_GameControllerGetButton(connectedControllers.at(index), gameControllerBindings[input].button) != 0) if (SDL_GameControllerGetButton(connectedControllers.at(index), gameControllerBindings.at(input).button) != 0)
{ {
gameControllerBindings[input].active = true; gameControllerBindings.at(input).active = true;
successGameController = true; successGameController = true;
} }
else else
@@ -122,9 +122,9 @@ bool Input::checkInput(Uint8 input, bool repeat, int device, int index)
} }
else else
{ {
if (SDL_GameControllerGetButton(connectedControllers.at(index), gameControllerBindings[input].button) == 0) if (SDL_GameControllerGetButton(connectedControllers.at(index), gameControllerBindings.at(input).button) == 0)
{ {
gameControllerBindings[input].active = false; gameControllerBindings.at(input).active = false;
successGameController = false; successGameController = false;
} }
else else
@@ -138,6 +138,44 @@ bool Input::checkInput(Uint8 input, bool repeat, int device, int index)
return (successKeyboard || successGameController); return (successKeyboard || successGameController);
} }
// Comprueba si hay almenos un input activo
bool Input::checkAnyInput(int device, int index)
{
if (device == INPUT_USE_ANY)
{
index = 0;
}
if (device == INPUT_USE_KEYBOARD || device == INPUT_USE_ANY)
{
const Uint8 *mKeystates = SDL_GetKeyboardState(nullptr);
for (int i = 0; i < (int)keyBindings.size(); ++i)
{
if (mKeystates[keyBindings.at(i).scancode] != 0)
{
return true;
}
}
}
if (gameControllerFound())
{
if (device == INPUT_USE_GAMECONTROLLER || device == INPUT_USE_ANY)
{
for (int i = 0; i < (int)gameControllerBindings.size(); ++i)
{
if (SDL_GameControllerGetButton(connectedControllers.at(index), gameControllerBindings.at(i).button) != 0)
{
return true;
}
}
}
}
return false;
}
// Comprueba si hay un mando conectado // Comprueba si hay un mando conectado
bool Input::discoverGameController() bool Input::discoverGameController()
{ {

View File

@@ -74,6 +74,9 @@ public:
// Comprueba si un input esta activo // Comprueba si un input esta activo
bool checkInput(Uint8 input, bool repeat, int device = INPUT_USE_ANY, int index = 0); bool checkInput(Uint8 input, bool repeat, int device = INPUT_USE_ANY, int index = 0);
// Comprueba si hay almenos un input activo
bool checkAnyInput(int device, int index);
// Comprueba si hay algun mando conectado // Comprueba si hay algun mando conectado
bool gameControllerFound(); bool gameControllerFound();

View File

@@ -1,4 +1,3 @@
#include "const.h"
#include "menu.h" #include "menu.h"
// Constructor // Constructor
@@ -20,6 +19,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 +57,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()
@@ -157,7 +160,7 @@ bool Menu::load(std::string file_path)
} }
// Cierra el fichero // Cierra el fichero
printf("Closing file %s\n\n", filename.c_str()); printf("Closing file %s\n", filename.c_str());
file.close(); file.close();
} }
// El fichero no se puede abrir // El fichero no se puede abrir
@@ -167,9 +170,6 @@ bool Menu::load(std::string file_path)
success = false; success = false;
} }
// Reorganiza el menu con los valores recien cargados
// reorganize();
return success; return success;
} }
@@ -207,6 +207,7 @@ bool Menu::setItem(item_t *item, std::string var, std::string value)
else if ((var == "") || (var == "[/item]")) else if ((var == "") || (var == "[/item]"))
{ {
} }
else else
{ {
success = false; success = false;
@@ -351,11 +352,6 @@ bool Menu::setVars(std::string var, std::string value)
return success; return success;
} }
// Inicializa las variables
void Menu::init()
{
}
// Carga los ficheros de audio // Carga los ficheros de audio
void Menu::loadAudioFile(std::string file, int sound) void Menu::loadAudioFile(std::string file, int sound)
{ {
@@ -408,7 +404,8 @@ void Menu::updateSelector()
selector.moving = false; selector.moving = false;
} }
} }
if (selector.despY < 0) // Va hacia arriba
else if (selector.despY < 0) // Va hacia arriba
{ {
if (selector.y < selector.targetY) // Ha llegado al destino if (selector.y < selector.targetY) // Ha llegado al destino
{ {
@@ -436,7 +433,8 @@ void Menu::updateSelector()
selector.resizing = false; selector.resizing = false;
} }
} }
if (selector.incH < 0) // Decrece
else if (selector.incH < 0) // Decrece
{ {
if (selector.h < selector.targetH) // Ha llegado al destino if (selector.h < selector.targetH) // Ha llegado al destino
{ {
@@ -459,7 +457,7 @@ void Menu::setSelectorPos(int index)
if (index < (int)item.size()) if (index < (int)item.size())
{ {
selector.index = index; selector.index = index;
selector.rect.y = selector.y = selector.originY = selector.targetY = item[selector.index].rect.y; selector.rect.y = selector.y = selector.originY = selector.targetY = item.at(selector.index).rect.y;
selector.rect.w = rectBG.rect.w; selector.rect.w = rectBG.rect.w;
selector.rect.x = rectBG.rect.x; selector.rect.x = rectBG.rect.x;
selector.originH = selector.targetH = selector.rect.h = getSelectorHeight(selector.index); selector.originH = selector.targetH = selector.rect.h = getSelectorHeight(selector.index);
@@ -487,10 +485,17 @@ void Menu::reset()
{ {
itemSelected = MENU_NO_OPTION; itemSelected = MENU_NO_OPTION;
selector.index = 0; selector.index = 0;
selector.originY = selector.targetY = selector.y = item[0].rect.y; selector.originY = selector.targetY = selector.y = item.at(0).rect.y;
selector.originH = selector.targetH = item[0].rect.h; selector.originH = selector.targetH = item.at(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.at(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
@@ -518,18 +523,18 @@ void Menu::reorganize()
bool Menu::increaseSelectorIndex() bool Menu::increaseSelectorIndex()
{ {
// Obten las coordenadas del elemento actual // Obten las coordenadas del elemento actual
selector.y = selector.originY = item[selector.index].rect.y; selector.y = selector.originY = item.at(selector.index).rect.y;
selector.h = selector.originH = getSelectorHeight(selector.index); selector.h = selector.originH = getSelectorHeight(selector.index);
// Calcula cual es el siguiente elemento // Calcula cual es el siguiente elemento
++selector.index %= item.size(); ++selector.index %= item.size();
while (!item[selector.index].selectable) while (!item.at(selector.index).selectable)
{ {
++selector.index %= item.size(); ++selector.index %= item.size();
} }
// Establece las coordenadas y altura de destino // Establece las coordenadas y altura de destino
selector.targetY = item[selector.index].rect.y; selector.targetY = item.at(selector.index).rect.y;
selector.despY = (selector.targetY - selector.originY) / selector.numJumps; selector.despY = (selector.targetY - selector.originY) / selector.numJumps;
selector.targetH = getSelectorHeight(selector.index); selector.targetH = getSelectorHeight(selector.index);
@@ -548,24 +553,24 @@ bool Menu::increaseSelectorIndex()
bool Menu::decreaseSelectorIndex() bool Menu::decreaseSelectorIndex()
{ {
// Obten las coordenadas del elemento actual // Obten las coordenadas del elemento actual
selector.y = selector.originY = item[selector.index].rect.y; selector.y = selector.originY = item.at(selector.index).rect.y;
selector.h = selector.originH = getSelectorHeight(selector.index); selector.h = selector.originH = getSelectorHeight(selector.index);
// 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
{ {
selector.index--; selector.index--;
} }
while (!item[selector.index].selectable) while (!item.at(selector.index).selectable)
{ {
if (selector.index == 0) if (selector.index == 0)
{ {
selector.index = item.size(); selector.index = item.size() - 1;
} }
else else
{ {
@@ -574,7 +579,7 @@ bool Menu::decreaseSelectorIndex()
} }
// Establece las coordenadas y altura de destino // Establece las coordenadas y altura de destino
selector.targetY = item[selector.index].rect.y; selector.targetY = item.at(selector.index).rect.y;
selector.despY = (selector.targetY - selector.originY) / selector.numJumps; selector.despY = (selector.targetY - selector.originY) / selector.numJumps;
selector.targetH = getSelectorHeight(selector.index); selector.targetH = getSelectorHeight(selector.index);
@@ -608,8 +613,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);
@@ -626,40 +629,74 @@ void Menu::render()
if (i == selector.index) if (i == selector.index)
{ {
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.at(i).rect.x, item.at(i).rect.y, item.at(i).label, color);
} }
else if (item[i].selectable)
else if (item.at(i).selectable)
{ {
text->write(item[i].rect.x, item[i].rect.y, item[i].label); text->write(item.at(i).rect.x, item.at(i).rect.y, item.at(i).label);
} }
else if (item[i].greyed)
else if (item.at(i).greyed)
{ {
text->writeColored(item[i].rect.x, item[i].rect.y, item[i].label, colorGreyed); text->writeColored(item.at(i).rect.x, item.at(i).rect.y, item.at(i).label, colorGreyed);
} }
else else
// No seleccionable { // No seleccionable
{ if ((item.at(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};
text->writeColored(item[i].rect.x, item[i].rect.y, item[i].label, color); text->writeColored(item.at(i).rect.x, item.at(i).rect.y, item.at(i).label, color);
} }
else // No enlazado con el de arriba else // No enlazado con el de arriba
{ {
text->write(item[i].rect.x, item[i].rect.y, item[i].label); text->write(item.at(i).rect.x, item.at(i).rect.y, item.at(i).label);
} }
} }
} }
} }
// 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 +729,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 +760,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
@@ -740,11 +801,11 @@ void Menu::addItem(std::string text, int hPaddingDown, bool selectable, bool gre
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;
} }
@@ -777,9 +838,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
@@ -855,42 +913,42 @@ int Menu::findHeight()
// Recoloca los elementos del menu en el eje Y // Recoloca los elementos del menu en el eje Y
void Menu::replaceElementsOnY() void Menu::replaceElementsOnY()
{ {
item[0].rect.y = y; item.at(0).rect.y = y;
for (int i = 1; i < (int)item.size(); i++) for (int i = 1; i < (int)item.size(); i++)
{ {
item[i].rect.y = item[i - 1].rect.y + item[i - 1].rect.h + item[i - 1].hPaddingDown; item.at(i).rect.y = item.at(i - 1).rect.y + item.at(i - 1).rect.h + item.at(i - 1).hPaddingDown;
} }
} }
// Establece el estado seleccionable de un item // Establece el estado seleccionable de un item
void Menu::setSelectable(int index, bool value) void Menu::setSelectable(int index, bool value)
{ {
item[index].selectable = value; item.at(index).selectable = value;
} }
// Establece el estado agrisado de un item // Establece el estado agrisado de un item
void Menu::setGreyed(int index, bool value) void Menu::setGreyed(int index, bool value)
{ {
item[index].greyed = value; item.at(index).greyed = value;
} }
// Establece el estado de enlace de un item // Establece el estado de enlace de un item
void Menu::setLinkedDown(int index, bool value) void Menu::setLinkedDown(int index, bool value)
{ {
item[index].linkedDown = value; item.at(index).linkedDown = value;
} }
// Calcula la altura del selector // Calcula la altura del selector
int Menu::getSelectorHeight(int value) int Menu::getSelectorHeight(int value)
{ {
if (item[value].linkedDown) if (item.at(value).linkedDown)
{ {
return item[value].rect.h + item[value].hPaddingDown + item[value + 1].rect.h; return item.at(value).rect.h + item.at(value).hPaddingDown + item.at(value + 1).rect.h;
} }
else else
{ {
return item[value].rect.h; return item.at(value).rect.h;
} }
} }

View File

@@ -1,15 +1,15 @@
#pragma once #pragma once
#include <SDL2/SDL.h> #include <SDL2/SDL.h>
#include <vector>
#include "sprite.h"
#include "text.h"
#include "asset.h" #include "asset.h"
#include "input.h" #include "input.h"
#include "utils.h"
#include "jail_audio.h" #include "jail_audio.h"
#include <sstream> #include "sprite.h"
#include "text.h"
#include "utils.h"
#include <fstream> #include <fstream>
#include <sstream>
#include <vector>
#ifndef MENU_H #ifndef MENU_H
#define MENU_H #define MENU_H
@@ -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 y punteros
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
@@ -105,12 +108,6 @@ private:
// Asigna variables a partir de dos cadenas // Asigna variables a partir de dos cadenas
bool setItem(item_t *item, std::string var, std::string value); bool setItem(item_t *item, std::string var, std::string value);
// Inicializa las variables
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 +140,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 +176,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 +216,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

View File

@@ -1,8 +1,7 @@
#include "const.h"
#include "movingsprite.h" #include "movingsprite.h"
// Constructor // Constructor
MovingSprite::MovingSprite(float x, float y, int w, int h, float velx, float vely, float accelx, float accely, LTexture *texture, SDL_Renderer *renderer) MovingSprite::MovingSprite(float x, float y, int w, int h, float velx, float vely, float accelx, float accely, Texture *texture, SDL_Renderer *renderer)
{ {
// Copia los punteros // Copia los punteros
this->texture = texture; this->texture = texture;
@@ -45,17 +44,12 @@ MovingSprite::MovingSprite(float x, float y, int w, int h, float velx, float vel
spriteClip = {0, 0, w, h}; spriteClip = {0, 0, w, h};
// Establece el centro de rotación // Establece el centro de rotación
center = {0, 0}; center = nullptr;
// Establece el tipo de volteado // Establece el tipo de volteado
currentFlip = SDL_FLIP_NONE; currentFlip = SDL_FLIP_NONE;
}; };
// Destructor
MovingSprite::~MovingSprite()
{
}
// Reinicia todas las variables // Reinicia todas las variables
void MovingSprite::clear() void MovingSprite::clear()
{ {
@@ -73,7 +67,7 @@ void MovingSprite::clear()
angle = 0.0; // Angulo para dibujarlo angle = 0.0; // Angulo para dibujarlo
rotateEnabled = false; // Indica si ha de rotar rotateEnabled = false; // Indica si ha de rotar
center = {0, 0}; // Centro de rotación center = nullptr; // Centro de rotación
rotateSpeed = 0; // Velocidad de giro rotateSpeed = 0; // Velocidad de giro
rotateAmount = 0.0; // Cantidad de grados a girar en cada iteración rotateAmount = 0.0; // Cantidad de grados a girar en cada iteración
counter = 0; // Contador interno counter = 0; // Contador interno
@@ -101,7 +95,9 @@ void MovingSprite::move()
void MovingSprite::render() void MovingSprite::render()
{ {
if (enabled) if (enabled)
texture->render(renderer, (int)x, (int)y, &spriteClip, zoomW, zoomH, angle, &center, currentFlip); {
texture->render(renderer, (int)x, (int)y, &spriteClip, zoomW, zoomH, angle, center, currentFlip);
}
} }
// Obtiene el valor de la variable // Obtiene el valor de la variable
@@ -158,11 +154,13 @@ double MovingSprite::getAngle()
return angle; return angle;
} }
// Establece la posición del objeto // Establece la posición y el tamaño del objeto
void MovingSprite::setPos(SDL_Rect rect) void MovingSprite::setRect(SDL_Rect rect)
{ {
x = (float)rect.x; x = (float)rect.x;
y = (float)rect.y; y = (float)rect.y;
w = rect.w;
h = rect.h;
} }
// Establece el valor de la variable // Establece el valor de la variable
@@ -265,7 +263,14 @@ void MovingSprite::setRotate(bool value)
// Establece el valor de la variable // Establece el valor de la variable
void MovingSprite::setRotateSpeed(int value) void MovingSprite::setRotateSpeed(int value)
{ {
rotateSpeed = value; if (value < 1)
{
rotateSpeed = 1;
}
else
{
rotateSpeed = value;
}
} }
// Establece el valor de la variable // Establece el valor de la variable
@@ -324,15 +329,6 @@ SDL_Rect MovingSprite::getRect()
return rect; return rect;
} }
// Establece los valores de posición y tamaño del sprite
void MovingSprite::setRect(SDL_Rect rect)
{
x = (float)rect.x;
y = (float)rect.y;
w = rect.w;
h = rect.h;
}
// Deshace el último movimiento // Deshace el último movimiento
void MovingSprite::undoMove() void MovingSprite::undoMove()
{ {

View File

@@ -30,15 +30,12 @@ protected:
int rotateSpeed; // Velocidad de giro int rotateSpeed; // Velocidad de giro
double rotateAmount; // Cantidad de grados a girar en cada iteración double rotateAmount; // Cantidad de grados a girar en cada iteración
int counter; // Contador interno int counter; // Contador interno
SDL_Point center; // Centro de rotación SDL_Point *center; // Centro de rotación
SDL_RendererFlip currentFlip; // Indica como se voltea el sprite SDL_RendererFlip currentFlip; // Indica como se voltea el sprite
public: public:
// Constructor // Constructor
MovingSprite(float x = 0, float y = 0, int w = 0, int h = 0, float velx = 0, float vely = 0, float accelx = 0, float accely = 0, LTexture *texture = nullptr, SDL_Renderer *renderer = nullptr); MovingSprite(float x = 0, float y = 0, int w = 0, int h = 0, float velx = 0, float vely = 0, float accelx = 0, float accely = 0, Texture *texture = nullptr, SDL_Renderer *renderer = nullptr);
// Destructor
~MovingSprite();
// Mueve el sprite // Mueve el sprite
void move(); void move();
@@ -88,8 +85,8 @@ public:
// Obtiene el valor de la variable // Obtiene el valor de la variable
Uint16 getRotateSpeed(); Uint16 getRotateSpeed();
// Establece la posición del objeto // Establece la posición y el tamaño del objeto
void setPos(SDL_Rect rect); void setRect(SDL_Rect rect);
// Establece el valor de la variable // Establece el valor de la variable
void setPosX(float value); void setPosX(float value);
@@ -151,9 +148,6 @@ public:
// Devuelve el rectangulo donde está el sprite // Devuelve el rectangulo donde está el sprite
SDL_Rect getRect(); SDL_Rect getRect();
// Establece los valores de posición y tamaño del sprite
void setRect(SDL_Rect rect);
// Deshace el último movimiento // Deshace el último movimiento
void undoMove(); void undoMove();

View File

@@ -21,8 +21,10 @@ 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 == nullptr)
{
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);
@@ -59,14 +61,14 @@ void Screen::start()
void Screen::blit() void Screen::blit()
{ {
// Vuelve a dejar el renderizador en modo normal // Vuelve a dejar el renderizador en modo normal
SDL_SetRenderTarget(renderer, NULL); SDL_SetRenderTarget(renderer, nullptr);
// Borra el contenido previo // Borra el contenido previo
SDL_SetRenderDrawColor(renderer, borderColor.r, borderColor.g, borderColor.b, 0xFF); SDL_SetRenderDrawColor(renderer, borderColor.r, borderColor.g, borderColor.b, 0xFF);
SDL_RenderClear(renderer); SDL_RenderClear(renderer);
// Copia la textura de juego en el renderizador en la posición adecuada // Copia la textura de juego en el renderizador en la posición adecuada
SDL_RenderCopy(renderer, gameCanvas, NULL, &dest); SDL_RenderCopy(renderer, gameCanvas, nullptr, &dest);
// Muestra por pantalla el renderizador // Muestra por pantalla el renderizador
SDL_RenderPresent(renderer); SDL_RenderPresent(renderer);

View File

@@ -1,14 +1,19 @@
#include "const.h"
#include "smartsprite.h" #include "smartsprite.h"
// Constructor // Constructor
SmartSprite::SmartSprite(LTexture *texture, SDL_Renderer *renderer) SmartSprite::SmartSprite(Texture *texture, SDL_Renderer *renderer)
{ {
// Copia punteros // Copia punteros
setTexture(texture); setTexture(texture);
setRenderer(renderer); setRenderer(renderer);
// Inicializa variables // Inicializa el objeto
init();
}
// Inicializa el objeto
void SmartSprite::init()
{
enabled = false; enabled = false;
enabledCounter = 0; enabledCounter = 0;
onDestination = false; onDestination = false;
@@ -18,11 +23,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()
{ {

View File

@@ -12,7 +12,7 @@
class SmartSprite : public AnimatedSprite class SmartSprite : public AnimatedSprite
{ {
private: private:
// VAriables // Variables
bool enabled; // Indica si esta habilitado bool enabled; // Indica si esta habilitado
bool onDestination; // Indica si está en el destino bool onDestination; // Indica si está en el destino
int destX; // Posicion de destino en el eje X int destX; // Posicion de destino en el eje X
@@ -28,10 +28,10 @@ private:
public: public:
// Constructor // Constructor
SmartSprite(LTexture *texture, SDL_Renderer *renderer); SmartSprite(Texture *texture, SDL_Renderer *renderer);
// Destructor // Inicializa el objeto
~SmartSprite(); 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();

View File

@@ -1,7 +1,7 @@
#include "sprite.h" #include "sprite.h"
// Constructor // Constructor
Sprite::Sprite(int x, int y, int w, int h, LTexture *texture, SDL_Renderer *renderer) Sprite::Sprite(int x, int y, int w, int h, Texture *texture, SDL_Renderer *renderer)
{ {
// Establece la posición X,Y del sprite // Establece la posición X,Y del sprite
this->x = x; this->x = x;
@@ -18,13 +18,13 @@ Sprite::Sprite(int x, int y, int w, int h, LTexture *texture, SDL_Renderer *rend
this->texture = texture; this->texture = texture;
// Establece el rectangulo de donde coger la imagen // Establece el rectangulo de donde coger la imagen
spriteClip = {x, y, w, h}; spriteClip = {0, 0, w, h};
// Inicializa variables // Inicializa variables
enabled = true; enabled = true;
} }
Sprite::Sprite(SDL_Rect rect, LTexture *texture, SDL_Renderer *renderer) Sprite::Sprite(SDL_Rect rect, Texture *texture, SDL_Renderer *renderer)
{ {
// Establece la posición X,Y del sprite // Establece la posición X,Y del sprite
x = rect.x; x = rect.x;
@@ -41,7 +41,7 @@ Sprite::Sprite(SDL_Rect rect, LTexture *texture, SDL_Renderer *renderer)
this->texture = texture; this->texture = texture;
// Establece el rectangulo de donde coger la imagen // Establece el rectangulo de donde coger la imagen
spriteClip = {x, y, w, h}; spriteClip = {0, 0, w, h};
// Inicializa variables // Inicializa variables
enabled = true; enabled = true;
@@ -137,17 +137,23 @@ void Sprite::setSpriteClip(int x, int y, int w, int h)
} }
// Obten el valor de la variable // Obten el valor de la variable
LTexture *Sprite::getTexture() Texture *Sprite::getTexture()
{ {
return texture; return texture;
} }
// Establece el valor de la variable // Establece el valor de la variable
void Sprite::setTexture(LTexture *texture) void Sprite::setTexture(Texture *texture)
{ {
this->texture = texture; this->texture = texture;
} }
// Obten el valor de la variable
SDL_Renderer *Sprite::getRenderer()
{
return renderer;
}
// Establece el valor de la variable // Establece el valor de la variable
void Sprite::setRenderer(SDL_Renderer *renderer) void Sprite::setRenderer(SDL_Renderer *renderer)
{ {

View File

@@ -1,7 +1,7 @@
#pragma once #pragma once
#include <SDL2/SDL.h> #include <SDL2/SDL.h>
#include "ltexture.h" #include "texture.h"
#ifndef SPRITE_H #ifndef SPRITE_H
#define SPRITE_H #define SPRITE_H
@@ -16,15 +16,15 @@ protected:
int h; // Alto del sprite int h; // Alto del sprite
SDL_Renderer *renderer; // Puntero al renderizador de la ventana SDL_Renderer *renderer; // Puntero al renderizador de la ventana
LTexture *texture; // Textura donde estan todos los dibujos del sprite Texture *texture; // Textura donde estan todos los dibujos del sprite
SDL_Rect spriteClip; // Rectangulo de origen de la textura que se dibujará en pantalla SDL_Rect spriteClip; // Rectangulo de origen de la textura que se dibujará en pantalla
bool enabled; // Indica si el sprite esta habilitado bool enabled; // Indica si el sprite esta habilitado
public: public:
// Constructor // Constructor
Sprite(int x = 0, int y = 0, int w = 0, int h = 0, LTexture *texture = nullptr, SDL_Renderer *renderer = nullptr); Sprite(int x = 0, int y = 0, int w = 0, int h = 0, Texture *texture = nullptr, SDL_Renderer *renderer = nullptr);
Sprite(SDL_Rect rect, LTexture *texture, SDL_Renderer *renderer); Sprite(SDL_Rect rect, Texture *texture, SDL_Renderer *renderer);
// Destructor // Destructor
~Sprite(); ~Sprite();
@@ -69,10 +69,13 @@ public:
void setSpriteClip(int x, int y, int w, int h); void setSpriteClip(int x, int y, int w, int h);
// Obten el valor de la variable // Obten el valor de la variable
LTexture *getTexture(); Texture *getTexture();
// Establece el valor de la variable // Establece el valor de la variable
void setTexture(LTexture *texture); void setTexture(Texture *texture);
// Obten el valor de la variable
SDL_Renderer *getRenderer();
// Establece el valor de la variable // Establece el valor de la variable
void setRenderer(SDL_Renderer *renderer); void setRenderer(SDL_Renderer *renderer);

View File

@@ -10,7 +10,7 @@ Text::Text(std::string bitmapFile, std::string textFile, SDL_Renderer *renderer)
initOffsetFromFile(textFile); initOffsetFromFile(textFile);
// Crea los objetos // Crea los objetos
texture = new LTexture(renderer, bitmapFile); texture = new Texture(renderer, bitmapFile);
sprite = new Sprite({0, 0, boxWidth, boxHeight}, texture, renderer); sprite = new Sprite({0, 0, boxWidth, boxHeight}, texture, renderer);
} }
@@ -143,7 +143,9 @@ void Text::initOffsetFromFile(std::string file)
{ {
// Almacena solo las lineas impares // Almacena solo las lineas impares
if (line_read % 2 == 1) if (line_read % 2 == 1)
{
offset[index++].w = std::stoi(buffer); offset[index++].w = std::stoi(buffer);
}
// Limpia el buffer // Limpia el buffer
buffer.clear(); buffer.clear();
@@ -151,7 +153,7 @@ void Text::initOffsetFromFile(std::string file)
}; };
// Cierra el fichero // Cierra el fichero
printf("Text loaded: %s\n\n", filename.c_str()); printf("Text loaded: %s\n", filename.c_str());
rfile.close(); rfile.close();
} }

View File

@@ -22,9 +22,9 @@ private:
int w; int w;
}; };
// Objetos // Objetos y punteros
Sprite *sprite; // Objeto con los graficos para el texto Sprite *sprite; // Objeto con los graficos para el texto
LTexture *texture; // Textura con los bitmaps del texto Texture *texture; // Textura con los bitmaps del texto
// Variables // Variables
int boxWidth; // Anchura de la caja de cada caracter en el png int boxWidth; // Anchura de la caja de cada caracter en el png

View File

@@ -1,10 +1,10 @@
#include "ltexture.h" #include "texture.h"
#define STB_IMAGE_IMPLEMENTATION #define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h" #include "stb_image.h"
// Constructor // Constructor
LTexture::LTexture(SDL_Renderer *renderer, std::string path) Texture::Texture(SDL_Renderer *renderer, std::string path)
{ {
// Copia punteros // Copia punteros
this->renderer = renderer; this->renderer = renderer;
@@ -23,14 +23,14 @@ LTexture::LTexture(SDL_Renderer *renderer, std::string path)
} }
// Destructor // Destructor
LTexture::~LTexture() Texture::~Texture()
{ {
// Libera memoria // Libera memoria
unload(); unload();
} }
// Carga una imagen desde un fichero // Carga una imagen desde un fichero
bool LTexture::loadFromFile(std::string path, SDL_Renderer *renderer) bool Texture::loadFromFile(std::string path, SDL_Renderer *renderer)
{ {
const std::string filename = path.substr(path.find_last_of("\\/") + 1); const std::string filename = path.substr(path.find_last_of("\\/") + 1);
int req_format = STBI_rgb_alpha; int req_format = STBI_rgb_alpha;
@@ -98,7 +98,7 @@ bool LTexture::loadFromFile(std::string path, SDL_Renderer *renderer)
} }
// Crea una textura en blanco // Crea una textura en blanco
bool LTexture::createBlank(SDL_Renderer *renderer, int width, int height, SDL_TextureAccess access) bool Texture::createBlank(SDL_Renderer *renderer, int width, int height, SDL_TextureAccess access)
{ {
// Crea una textura sin inicializar // Crea una textura sin inicializar
texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, access, width, height); texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, access, width, height);
@@ -116,7 +116,7 @@ bool LTexture::createBlank(SDL_Renderer *renderer, int width, int height, SDL_Te
} }
// Libera la memoria de la textura // Libera la memoria de la textura
void LTexture::unload() void Texture::unload()
{ {
// Libera la textura si existe // Libera la textura si existe
if (texture != nullptr) if (texture != nullptr)
@@ -129,27 +129,27 @@ void LTexture::unload()
} }
// Establece el color para la modulacion // Establece el color para la modulacion
void LTexture::setColor(Uint8 red, Uint8 green, Uint8 blue) void Texture::setColor(Uint8 red, Uint8 green, Uint8 blue)
{ {
SDL_SetTextureColorMod(texture, red, green, blue); SDL_SetTextureColorMod(texture, red, green, blue);
} }
// Establece el blending // Establece el blending
void LTexture::setBlendMode(SDL_BlendMode blending) void Texture::setBlendMode(SDL_BlendMode blending)
{ {
SDL_SetTextureBlendMode(texture, blending); SDL_SetTextureBlendMode(texture, blending);
} }
// Establece el alpha para la modulación // Establece el alpha para la modulación
void LTexture::setAlpha(Uint8 alpha) void Texture::setAlpha(Uint8 alpha)
{ {
SDL_SetTextureAlphaMod(texture, alpha); SDL_SetTextureAlphaMod(texture, alpha);
} }
// Renderiza la textura en un punto específico // Renderiza la textura en un punto específico
void LTexture::render(SDL_Renderer *renderer, int x, int y, SDL_Rect *clip, float zoomW, float zoomH, double angle, SDL_Point *center, SDL_RendererFlip flip) void Texture::render(SDL_Renderer *renderer, int x, int y, SDL_Rect *clip, float zoomW, float zoomH, double angle, SDL_Point *center, SDL_RendererFlip flip)
{ {
// Establece el destini de renderizado en la pantalla // Establece el destino de renderizado en la pantalla
SDL_Rect renderQuad = {x, y, width, height}; SDL_Rect renderQuad = {x, y, width, height};
// Obtiene las dimesiones del clip de renderizado // Obtiene las dimesiones del clip de renderizado
@@ -167,25 +167,25 @@ void LTexture::render(SDL_Renderer *renderer, int x, int y, SDL_Rect *clip, floa
} }
// Establece la textura como objetivo de renderizado // Establece la textura como objetivo de renderizado
void LTexture::setAsRenderTarget(SDL_Renderer *renderer) void Texture::setAsRenderTarget(SDL_Renderer *renderer)
{ {
SDL_SetRenderTarget(renderer, texture); SDL_SetRenderTarget(renderer, texture);
} }
// Obtiene el ancho de la imagen // Obtiene el ancho de la imagen
int LTexture::getWidth() int Texture::getWidth()
{ {
return width; return width;
} }
// Obtiene el alto de la imagen // Obtiene el alto de la imagen
int LTexture::getHeight() int Texture::getHeight()
{ {
return height; return height;
} }
// Recarga la textura // Recarga la textura
bool LTexture::reLoad() bool Texture::reLoad()
{ {
return loadFromFile(path, renderer); return loadFromFile(path, renderer);
} }

View File

@@ -4,25 +4,27 @@
#include <stdio.h> #include <stdio.h>
#include <string> #include <string>
#ifndef LTEXTURE_H #ifndef TEXTURE_H
#define LTEXTURE_H #define TEXTURE_H
// Clase LTexture class Texture
class LTexture
{ {
private: private:
// Objetos y punteros
SDL_Texture *texture; // La textura SDL_Texture *texture; // La textura
SDL_Renderer *renderer; // Renderizador donde dibujar la textura SDL_Renderer *renderer; // Renderizador donde dibujar la textura
int width; // Ancho de la imagen
int height; // Alto de la imagen // Variables
std::string path; // Ruta de la imagen de la textura int width; // Ancho de la imagen
int height; // Alto de la imagen
std::string path; // Ruta de la imagen de la textura
public: public:
// Constructor // Constructor
LTexture(SDL_Renderer *renderer, std::string path = ""); Texture(SDL_Renderer *renderer, std::string path = "");
// Destructor // Destructor
~LTexture(); ~Texture();
// Carga una imagen desde un fichero // Carga una imagen desde un fichero
bool loadFromFile(std::string path, SDL_Renderer *renderer); bool loadFromFile(std::string path, SDL_Renderer *renderer);

View File

@@ -1,7 +1,7 @@
#pragma once #pragma once
#include <SDL2/SDL.h> #include <SDL2/SDL.h>
#include "ltexture.h" #include "texture.h"
#include <string> #include <string>
#include <vector> #include <vector>
@@ -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

View File

@@ -1,4 +1,3 @@
#include "const.h"
#include "writer.h" #include "writer.h"
// Constructor // Constructor
@@ -22,11 +21,6 @@ Writer::Writer(Text *text)
finished = false; finished = false;
} }
// Destructor
Writer::~Writer()
{
}
// Actualiza el objeto // Actualiza el objeto
void Writer::update() void Writer::update()
{ {

View File

@@ -11,7 +11,7 @@
class Writer class Writer
{ {
private: private:
// Objetos // Objetos y punteros
Text *text; // Objeto encargado de escribir el texto Text *text; // Objeto encargado de escribir el texto
// Variables // Variables
@@ -32,9 +32,6 @@ public:
// Constructor // Constructor
Writer(Text *text); Writer(Text *text);
// Destructor
~Writer();
// Actualiza el objeto // Actualiza el objeto
void update(); void update();

View File

@@ -1,7 +1,7 @@
#pragma once #pragma once
#include <SDL2/SDL.h> #include <SDL2/SDL.h>
#include "utils.h" #include "common/utils.h"
#include "lang.h" #include "lang.h"
#ifndef CONST_H #ifndef CONST_H

View File

@@ -1,19 +1,17 @@
#include "const.h" #include "const.h"
#include "director.h" #include "director.h"
#include "utils.h" #include "common/utils.h"
#include <iostream> #include <iostream>
#include <string> #include <string>
// Constructor // Constructor
Director::Director(std::string path) Director::Director(std::string path)
{ {
// Inicializa variables // Inicializa variables
section.name = PROG_SECTION_GAME; section.name = PROG_SECTION_LOGO;
section.subsection = GAME_SECTION_PLAY_1P;
// 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);
// Establece la lista de ficheros // Establece la lista de ficheros
if (!setFileList()) if (!setFileList())
@@ -100,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;
@@ -127,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)
{ {
@@ -157,110 +160,128 @@ bool Director::initSDL()
// Crea el indice de ficheros // Crea el indice de ficheros
bool Director::setFileList() bool Director::setFileList()
{ {
#ifdef MACOS_BUNDLE
const std::string prefix = "/../Resources";
#else
const std::string prefix = "";
#endif
// Ficheros de configuración // Ficheros de configuración
asset->add("data/config/score.bin", t_data, false); asset->add(prefix + "/data/config/score.bin", t_data, false);
asset->add("data/config/demo.bin", t_data); asset->add(prefix + "/data/config/demo.bin", t_data);
asset->add("data/config/config.bin", t_data, false); asset->add(prefix + "/data/config/config.bin", t_data, false);
asset->add("data/config/gamecontrollerdb.txt", t_data); asset->add(prefix + "/data/config/gamecontrollerdb.txt", t_data);
// Musicas // Musicas
asset->add("data/music/intro.ogg", t_music); asset->add(prefix + "/data/music/intro.ogg", t_music);
asset->add("data/music/playing.ogg", t_music); asset->add(prefix + "/data/music/playing.ogg", t_music);
asset->add("data/music/title.ogg", t_music); asset->add(prefix + "/data/music/title.ogg", t_music);
// Sonidos // Sonidos
asset->add("data/sound/balloon.wav", t_sound); asset->add(prefix + "/data/sound/balloon.wav", t_sound);
asset->add("data/sound/bubble1.wav", t_sound); asset->add(prefix + "/data/sound/bubble1.wav", t_sound);
asset->add("data/sound/bubble2.wav", t_sound); asset->add(prefix + "/data/sound/bubble2.wav", t_sound);
asset->add("data/sound/bubble3.wav", t_sound); asset->add(prefix + "/data/sound/bubble3.wav", t_sound);
asset->add("data/sound/bubble4.wav", t_sound); asset->add(prefix + "/data/sound/bubble4.wav", t_sound);
asset->add("data/sound/bullet.wav", t_sound); asset->add(prefix + "/data/sound/bullet.wav", t_sound);
asset->add("data/sound/coffeeout.wav", t_sound); asset->add(prefix + "/data/sound/coffeeout.wav", t_sound);
asset->add("data/sound/hiscore.wav", t_sound); asset->add(prefix + "/data/sound/hiscore.wav", t_sound);
asset->add("data/sound/itemdrop.wav", t_sound); asset->add(prefix + "/data/sound/itemdrop.wav", t_sound);
asset->add("data/sound/itempickup.wav", t_sound); asset->add(prefix + "/data/sound/itempickup.wav", t_sound);
asset->add("data/sound/menu_cancel.wav", t_sound); asset->add(prefix + "/data/sound/menu_move.wav", t_sound);
asset->add("data/sound/menu_move.wav", t_sound); asset->add(prefix + "/data/sound/menu_select.wav", t_sound);
asset->add("data/sound/menu_select.wav", t_sound); asset->add(prefix + "/data/sound/player_collision.wav", t_sound);
asset->add("data/sound/player_collision.wav", t_sound); asset->add(prefix + "/data/sound/stage_change.wav", t_sound);
asset->add("data/sound/stage_change.wav", t_sound); asset->add(prefix + "/data/sound/title.wav", t_sound);
asset->add("data/sound/title.wav", t_sound); asset->add(prefix + "/data/sound/clock.wav", t_sound);
asset->add("data/sound/clock.wav", t_sound); asset->add(prefix + "/data/sound/powerball.wav", t_sound);
asset->add("data/sound/powerball.wav", t_sound);
// Texturas // Texturas
asset->add("data/gfx/balloon1.png", t_bitmap); asset->add(prefix + "/data/gfx/balloon1.png", t_bitmap);
asset->add("data/gfx/balloon1.ani", t_data); asset->add(prefix + "/data/gfx/balloon1.ani", t_data);
asset->add("data/gfx/balloon2.png", t_bitmap); asset->add(prefix + "/data/gfx/balloon2.png", t_bitmap);
asset->add("data/gfx/balloon2.ani", t_data); asset->add(prefix + "/data/gfx/balloon2.ani", t_data);
asset->add("data/gfx/balloon3.png", t_bitmap); asset->add(prefix + "/data/gfx/balloon3.png", t_bitmap);
asset->add("data/gfx/balloon3.ani", t_data); asset->add(prefix + "/data/gfx/balloon3.ani", t_data);
asset->add("data/gfx/balloon4.png", t_bitmap); asset->add(prefix + "/data/gfx/balloon4.png", t_bitmap);
asset->add("data/gfx/balloon4.ani", t_data); asset->add(prefix + "/data/gfx/balloon4.ani", t_data);
asset->add("data/gfx/bullet.png", t_bitmap); asset->add(prefix + "/data/gfx/bullet.png", t_bitmap);
asset->add("data/gfx/game_bg.png", t_bitmap);
asset->add("data/gfx/game_text.png", t_bitmap);
asset->add("data/gfx/intro.png", t_bitmap);
asset->add("data/gfx/logo.png", t_bitmap);
asset->add("data/gfx/items.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_points2_gavina.png", t_bitmap);
asset->add("data/gfx/item_points2_gavina.ani", t_data);
asset->add("data/gfx/item_points3_pacmar.png", t_bitmap);
asset->add("data/gfx/item_points3_pacmar.ani", t_data);
asset->add("data/gfx/item_clock.png", t_bitmap);
asset->add("data/gfx/item_clock.ani", t_data);
asset->add("data/gfx/item_coffee.png", t_bitmap);
asset->add("data/gfx/item_coffee.ani", t_data);
asset->add("data/gfx/item_coffee_machine.png", t_bitmap);
asset->add("data/gfx/item_coffee_machine.ani", t_data);
asset->add("data/gfx/title_bg_tile.png", t_bitmap); asset->add(prefix + "/data/gfx/game_buildings.png", t_bitmap);
asset->add("data/gfx/title_coffee.png", t_bitmap); asset->add(prefix + "/data/gfx/game_clouds.png", t_bitmap);
asset->add("data/gfx/title_crisis.png", t_bitmap); asset->add(prefix + "/data/gfx/game_grass.png", t_bitmap);
asset->add("data/gfx/title_dust.png", t_bitmap); asset->add(prefix + "/data/gfx/game_power_meter.png", t_bitmap);
asset->add("data/gfx/title_dust.ani", t_data); asset->add(prefix + "/data/gfx/game_sky_colors.png", t_bitmap);
asset->add("data/gfx/title_gradient.png", t_bitmap); asset->add(prefix + "/data/gfx/game_text.png", t_bitmap);
asset->add("data/gfx/new_player1_head.png", t_bitmap); asset->add(prefix + "/data/gfx/intro.png", t_bitmap);
asset->add("data/gfx/new_player1_head.ani", t_data); asset->add(prefix + "/data/gfx/logo.png", t_bitmap);
asset->add("data/gfx/new_player1_body.png", t_bitmap); asset->add(prefix + "/data/gfx/menu_game_over.png", t_bitmap);
asset->add("data/gfx/new_player1_body.ani", t_data); asset->add(prefix + "/data/gfx/menu_game_over_end.png", t_bitmap);
asset->add("data/gfx/new_player1_legs.png", t_bitmap);
asset->add("data/gfx/new_player1_legs.ani", t_data);
asset->add("data/gfx/new_player1_death.png", t_bitmap);
asset->add("data/gfx/new_player1_death.ani", t_data);
asset->add("data/gfx/player2_head.png", t_bitmap); asset->add(prefix + "/data/gfx/item_points1_disk.png", t_bitmap);
asset->add("data/gfx/player2_body.png", t_bitmap); asset->add(prefix + "/data/gfx/item_points1_disk.ani", t_data);
asset->add("data/gfx/player2_legs.png", t_bitmap); asset->add(prefix + "/data/gfx/item_points2_gavina.png", t_bitmap);
asset->add("data/gfx/player2_death.png", t_bitmap); asset->add(prefix + "/data/gfx/item_points2_gavina.ani", t_data);
asset->add(prefix + "/data/gfx/item_points3_pacmar.png", t_bitmap);
asset->add(prefix + "/data/gfx/item_points3_pacmar.ani", t_data);
asset->add(prefix + "/data/gfx/item_clock.png", t_bitmap);
asset->add(prefix + "/data/gfx/item_clock.ani", t_data);
asset->add(prefix + "/data/gfx/item_coffee.png", t_bitmap);
asset->add(prefix + "/data/gfx/item_coffee.ani", t_data);
asset->add(prefix + "/data/gfx/item_coffee_machine.png", t_bitmap);
asset->add(prefix + "/data/gfx/item_coffee_machine.ani", t_data);
asset->add(prefix + "/data/gfx/title_bg_tile.png", t_bitmap);
asset->add(prefix + "/data/gfx/title_coffee.png", t_bitmap);
asset->add(prefix + "/data/gfx/title_crisis.png", t_bitmap);
asset->add(prefix + "/data/gfx/title_dust.png", t_bitmap);
asset->add(prefix + "/data/gfx/title_dust.ani", t_data);
asset->add(prefix + "/data/gfx/title_gradient.png", t_bitmap);
asset->add(prefix + "/data/gfx/player_head.ani", t_data);
asset->add(prefix + "/data/gfx/player_body.ani", t_data);
asset->add(prefix + "/data/gfx/player_legs.ani", t_data);
asset->add(prefix + "/data/gfx/player_death.ani", t_data);
asset->add(prefix + "/data/gfx/player_fire.ani", t_data);
asset->add(prefix + "/data/gfx/player_bal1_head.png", t_bitmap);
asset->add(prefix + "/data/gfx/player_bal1_body.png", t_bitmap);
asset->add(prefix + "/data/gfx/player_bal1_legs.png", t_bitmap);
asset->add(prefix + "/data/gfx/player_bal1_death.png", t_bitmap);
asset->add(prefix + "/data/gfx/player_bal1_fire.png", t_bitmap);
asset->add(prefix + "/data/gfx/player_arounder_head.png", t_bitmap);
asset->add(prefix + "/data/gfx/player_arounder_body.png", t_bitmap);
asset->add(prefix + "/data/gfx/player_arounder_legs.png", t_bitmap);
asset->add(prefix + "/data/gfx/player_arounder_death.png", t_bitmap);
asset->add(prefix + "/data/gfx/player_arounder_fire.png", t_bitmap);
// Fuentes // Fuentes
asset->add("data/font/8bithud.png", t_font); asset->add(prefix + "/data/font/8bithud.png", t_font);
asset->add("data/font/8bithud.txt", t_font); asset->add(prefix + "/data/font/8bithud.txt", t_font);
asset->add("data/font/nokia.png", t_font); asset->add(prefix + "/data/font/nokia.png", t_font);
asset->add("data/font/nokia_big2.png", t_font); asset->add(prefix + "/data/font/nokia_big2.png", t_font);
asset->add("data/font/nokia.txt", t_font); asset->add(prefix + "/data/font/nokia.txt", t_font);
asset->add("data/font/nokia2.png", t_font); asset->add(prefix + "/data/font/nokia2.png", t_font);
asset->add("data/font/nokia2.txt", t_font); asset->add(prefix + "/data/font/nokia2.txt", t_font);
asset->add("data/font/nokia_big2.txt", t_font); asset->add(prefix + "/data/font/nokia_big2.txt", t_font);
asset->add("data/font/smb2_big.png", t_font); asset->add(prefix + "/data/font/smb2_big.png", t_font);
asset->add("data/font/smb2_big.txt", t_font); asset->add(prefix + "/data/font/smb2_big.txt", t_font);
asset->add("data/font/smb2.png", t_font); asset->add(prefix + "/data/font/smb2.png", t_font);
asset->add("data/font/smb2.txt", t_font); asset->add(prefix + "/data/font/smb2.txt", t_font);
// Textos // Textos
asset->add("data/lang/es_ES.txt", t_lang); asset->add(prefix + "/data/lang/es_ES.txt", t_lang);
asset->add("data/lang/en_UK.txt", t_lang); asset->add(prefix + "/data/lang/en_UK.txt", t_lang);
asset->add("data/lang/ba_BA.txt", t_lang); asset->add(prefix + "/data/lang/ba_BA.txt", t_lang);
// Menus // Menus
asset->add("data/menu/title.men", t_data); asset->add(prefix + "/data/menu/title.men", t_data);
asset->add("data/menu/options.men", t_data); asset->add(prefix + "/data/menu/options.men", t_data);
asset->add("data/menu/pause.men", t_data); asset->add(prefix + "/data/menu/pause.men", t_data);
asset->add("data/menu/gameover.men", t_data); asset->add(prefix + "/data/menu/gameover.men", t_data);
asset->add(prefix + "/data/menu/player_select.men", t_data);
return asset->check(); return asset->check();
} }
@@ -286,6 +307,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;

View File

@@ -1,27 +1,27 @@
#pragma once #pragma once
#include <SDL2/SDL.h> #include <SDL2/SDL.h>
#include "asset.h"
#include "balloon.h" #include "balloon.h"
#include "bullet.h" #include "bullet.h"
#include "common/asset.h"
#include "common/input.h"
#include "common/jail_audio.h"
#include "common/menu.h"
#include "common/movingsprite.h"
#include "common/screen.h"
#include "common/smartsprite.h"
#include "common/sprite.h"
#include "common/text.h"
#include "common/utils.h"
#include "common/writer.h"
#include "const.h" #include "const.h"
#include "fade.h" #include "fade.h"
#include "game.h" #include "game.h"
#include "input.h"
#include "intro.h" #include "intro.h"
#include "item.h" #include "item.h"
#include "jail_audio.h"
#include "logo.h" #include "logo.h"
#include "menu.h"
#include "movingsprite.h"
#include "player.h" #include "player.h"
#include "screen.h"
#include "smartsprite.h"
#include "sprite.h"
#include "text.h"
#include "title.h" #include "title.h"
#include "utils.h"
#include "writer.h"
#ifndef DIRECTOR_H #ifndef DIRECTOR_H
#define DIRECTOR_H #define DIRECTOR_H
@@ -29,11 +29,10 @@
// Textos // Textos
#define WINDOW_CAPTION "Coffee Crisis" #define WINDOW_CAPTION "Coffee Crisis"
// Clase Director
class Director class Director
{ {
private: private:
// Objetos // Objetos y punteros
SDL_Window *window; // La ventana donde dibujamos SDL_Window *window; // La ventana donde dibujamos
SDL_Renderer *renderer; // El renderizador de la ventana SDL_Renderer *renderer; // El renderizador de la ventana
Screen *screen; // Objeto encargado de dibujar en pantalla Screen *screen; // Objeto encargado de dibujar en pantalla

View File

@@ -1,7 +1,7 @@
#pragma once #pragma once
#include <SDL2/SDL.h> #include <SDL2/SDL.h>
#include "ltexture.h" #include "common/texture.h"
#ifndef FADE_H #ifndef FADE_H
#define FADE_H #define FADE_H

File diff suppressed because it is too large Load Diff

View File

@@ -1,23 +1,24 @@
#pragma once #pragma once
#include <SDL2/SDL.h> #include <SDL2/SDL.h>
#include "asset.h"
#include "balloon.h" #include "balloon.h"
#include "bullet.h" #include "bullet.h"
#include "common/asset.h"
#include "common/input.h"
#include "common/jail_audio.h"
#include "common/menu.h"
#include "common/movingsprite.h"
#include "common/screen.h"
#include "common/smartsprite.h"
#include "common/sprite.h"
#include "common/text.h"
#include "common/utils.h"
#include "common/writer.h"
#include "const.h" #include "const.h"
#include "fade.h" #include "fade.h"
#include "input.h"
#include "item.h" #include "item.h"
#include "jail_audio.h"
#include "menu.h"
#include "movingsprite.h"
#include "player.h" #include "player.h"
#include "screen.h" #include <iostream>
#include "smartsprite.h"
#include "sprite.h"
#include "text.h"
#include "utils.h"
#include "writer.h"
#ifndef GAME_H #ifndef GAME_H
#define GAME_H #define GAME_H
@@ -30,17 +31,13 @@
#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
#define MAX_NUMBER_OF_ENEMIES_IN_A_FORMATION 50 #define MAX_NUMBER_OF_ENEMIES_IN_A_FORMATION 50
// Cantidad de elementos del vector de SmartSprites
#define MAX_SMART_SPRITES 10
// Cantidad máxima posible de balas
#define MAX_BULLETS 50
// Porcentaje de aparición de los objetos // Porcentaje de aparición de los objetos
#define ITEM_POINTS_1_DISK_ODDS 10 #define ITEM_POINTS_1_DISK_ODDS 10
#define ITEM_POINTS_2_GAVINA_ODDS 6 #define ITEM_POINTS_2_GAVINA_ODDS 6
@@ -50,9 +47,6 @@
#define ITEM_POWER_BALL_ODDS 0 #define ITEM_POWER_BALL_ODDS 0
#define ITEM_COFFEE_MACHINE_ODDS 4 #define ITEM_COFFEE_MACHINE_ODDS 4
// Cantidad de objetos simultaneos
#define MAX_ITEMS 10
// Valores para las variables asociadas a los objetos // Valores para las variables asociadas a los objetos
#define TIME_STOPPED_COUNTER 300 #define TIME_STOPPED_COUNTER 300
@@ -120,133 +114,144 @@ private:
demoKeys_t dataFile[TOTAL_DEMO_DATA]; // Datos del fichero con los movimientos para la demo demoKeys_t dataFile[TOTAL_DEMO_DATA]; // Datos del fichero con los movimientos para la demo
}; };
struct debug_t // Objetos y punteros
{ SDL_Renderer *renderer; // El renderizador de la ventana
bool enabled; // Indica si se va a mostrar la información de debug Screen *screen; // Objeto encargado de dibujar en pantalla
Uint8 enemySet; // Escoge el set enemigo a generar Asset *asset; // Objeto que gestiona todos los ficheros de recursos
Uint8 gradR, gradG, gradB; // Colores RGB para modificar el color del gradiente de fondo Lang *lang; // Objeto para gestionar los textos en diferentes idiomas
float hudW, hudH; // Multiplica el tamaño del hud de debug; Input *input; // Manejador de entrada
};
SDL_Renderer *mRenderer; // El renderizador de la ventana
Screen *mScreen; // Objeto encargado de dibujar en pantalla
Asset *mAsset; // Objeto que gestiona todos los ficheros de recursos
Lang *mLang; // Objeto para gestionar los textos en diferentes idiomas
Input *mInput; // Manejador de entrada
int mNumPlayers; // Numero de jugadores
std::vector<Player *> players; // Vector con los jugadores std::vector<Player *> players; // Vector con los jugadores
std::vector<Balloon *> balloons; // Vector con los globos std::vector<Balloon *> balloons; // Vector con los globos
std::vector<Bullet *> bullets; // Vector con las balas std::vector<Bullet *> bullets; // Vector con las balas
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 *balloon1Texture; // Textura para los enemigos Texture *bulletTexture; // Textura para las balas
LTexture *balloon2Texture; // Textura para los enemigos std::vector<Texture *> itemTextures; // Vector con las texturas de los items
LTexture *balloon3Texture; // Textura para los enemigos std::vector<Texture *> balloonTextures; // Vector con las texturas de los globos
LTexture *balloon4Texture; // Textura para los enemigos std::vector<Texture *> player1Textures; // Vector con las texturas del jugador
LTexture *mTextureBullet; // Textura para las balas std::vector<Texture *> player2Textures; // Vector con las texturas del jugador
LTexture *mTextureGameBG; // Textura para el fondo del juego std::vector<std::vector<Texture *>> playerTextures; // Vector con todas las texturas de los jugadores;
LTexture *mTextureGameText; // Textura para los sprites con textos
LTexture *mTextureItems; // Textura para los items
Text *mText; // Fuente para los textos del juego Texture *gameBuildingsTexture; // Textura con los edificios de fondo
Text *mTextBig; // Fuente de texto grande Texture *gameCloudsTexture; // Textura con las nubes de fondo
Text *mTextScoreBoard; // Fuente para el marcador del juego Texture *gameGrassTexture; // Textura con la hierba del suelo
Text *mTextNokia2; // Otra fuente de texto para mesajes Texture *gamePowerMeterTexture; // Textura con el marcador de poder de la fase
Text *mTextNokiaBig2; // Y la versión en grande Texture *gameSkyColorsTexture; // Textura con los diferentes colores de fondo del juego
Texture *gameTextTexture; // Textura para los sprites con textos
Texture *gameOverTexture; // Textura para la pantalla de game over
Texture *gameOverEndTexture; // Textura para la pantalla de game over de acabar el juego
Menu *mMenuGameOver; // Menú de la pantalla de game over std::vector<std::vector<std::string> *> itemAnimations; // Vector con las animaciones de los items
Menu *mMenuPause; // Menú de la pantalla de pausa std::vector<std::vector<std::string> *> playerAnimations; // Vector con las animaciones del jugador
std::vector<std::vector<std::string> *> balloonAnimations; // Vector con las animaciones de los globos
Fade *mFade; // Objeto para renderizar fades Text *text; // Fuente para los textos del juego
SDL_Event *mEventHandler; // Manejador de eventos Text *textBig; // Fuente de texto grande
Text *textScoreBoard; // Fuente para el marcador del juego
Text *textNokia2; // Otra fuente de texto para mensajes
Text *textNokiaBig2; // Y la versión en grande
MovingSprite *mClouds1a; // Sprite para las nubes superiores Menu *gameOverMenu; // Menú de la pantalla de game over
MovingSprite *mClouds1b; // Sprite para las nubes superiores Menu *pauseMenu; // Menú de la pantalla de pausa
MovingSprite *mClouds2a; // Sprite para las nubes inferiores
MovingSprite *mClouds2b; // Sprite para las nubes inferiores
SmartSprite *m1000Bitmap; // Sprite con el texto 1.000
SmartSprite *m2500Bitmap; // Sprite con el texto 2.500
SmartSprite *m5000Bitmap; // Sprite con el texto 5.000
Sprite *mSpriteBackground; // Sprite con los graficos frontales del fondo
Sprite *mSpriteGetReady; // Sprite para el texto de GetReady del principio de la partida
Sprite *mSpriteGradient; // Sprite con los graficos del degradado de color de fondo
Sprite *mSpriteGrass; // Sprite para la hierba
Sprite *mSpritePowerMeter; // Sprite para el medidor de poder de la fase
Sprite *mSpriteScoreBoard; // Sprite para el fondo del marcador
JA_Sound mSoundBalloon; // Sonido para la explosión del globo Fade *fade; // Objeto para renderizar fades
JA_Sound mSoundBullet; // Sonido para los disparos SDL_Event *eventHandler; // Manejador de eventos
JA_Sound mSoundPlayerCollision; // Sonido para la colisión del jugador con un enemigo
JA_Sound mSoundHiScore; // Sonido para cuando se alcanza la máxima puntuación
JA_Sound mSoundItemDrop; // Sonido para cuando se genera un item
JA_Sound mSoundItemPickup; // Sonido para cuando se recoge un item
JA_Sound mSoundCoffeeOut; // Sonido para cuando el jugador pierde el café al recibir un impacto
JA_Sound mSoundStageChange; // Sonido para cuando se cambia de fase
JA_Sound mSoundBubble1; // Sonido para cuando el jugador muere
JA_Sound mSoundBubble2; // Sonido para cuando el jugador muere
JA_Sound mSoundBubble3; // Sonido para cuando el jugador muere
JA_Sound mSoundBubble4; // Sonido para cuando el jugador muere
JA_Sound mSoundClock; // Sonido para cuando se detiene el tiempo con el item reloj
JA_Sound mSoundPowerBall; // Sonido para cuando se explota una Power Ball
JA_Sound mSoundCollision; // Sonido para cuando la máquina de café toca el suelo
JA_Music mMusicPlaying; // Musica de fondo MovingSprite *clouds1A; // Sprite para las nubes superiores
MovingSprite *clouds1B; // Sprite para las nubes superiores
MovingSprite *clouds2A; // Sprite para las nubes inferiores
MovingSprite *clouds2B; // Sprite para las nubes inferiores
SmartSprite *n1000Sprite; // Sprite con el texto 1.000
SmartSprite *n2500Sprite; // Sprite con el texto 2.500
SmartSprite *n5000Sprite; // Sprite con el texto 5.000
Uint32 mTicks; // Contador de ticks para ajustar la velocidad del programa Sprite *buildingsSprite; // Sprite con los edificios de fondo
Uint8 mTicksSpeed; // Velocidad a la que se repiten los bucles del programa Sprite *skyColorsSprite; // Sprite con los graficos del degradado de color de fondo
Sprite *grassSprite; // Sprite para la hierba
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
Uint32 mHiScore; // Puntuación máxima JA_Sound balloonSound; // Sonido para la explosión del globo
bool mHiScoreAchieved; // Indica si se ha superado la puntuación máxima JA_Sound bulletSound; // Sonido para los disparos
section_t mSection; // Seccion actual dentro del juego JA_Sound playerCollisionSound; // Sonido para la colisión del jugador con un enemigo
stage_t mStage[10]; // Variable con los datos de cada pantalla JA_Sound hiScoreSound; // Sonido para cuando se alcanza la máxima puntuación
Uint8 mCurrentStage; // Indica la fase actual JA_Sound itemDropSound; // Sonido para cuando se genera un item
Uint8 mStageBitmapCounter; // Contador para el tiempo visible del texto de Stage JA_Sound itemPickUpSound; // Sonido para cuando se recoge un item
float mStageBitmapPath[STAGE_COUNTER]; // Vector con los puntos Y por donde se desplaza el texto JA_Sound coffeeOutSound; // Sonido para cuando el jugador pierde el café al recibir un impacto
float mGetReadyBitmapPath[STAGE_COUNTER]; // Vector con los puntos X por donde se desplaza el texto JA_Sound stageChangeSound; // Sonido para cuando se cambia de fase
Uint16 mDeathCounter; // Contador para la animación de muerte del jugador JA_Sound bubble1Sound; // Sonido para cuando el jugador muere
Uint8 mDeathIndex; // Indice del vector de smartsprites que contiene el sprite del jugador JA_Sound bubble2Sound; // Sonido para cuando el jugador muere
Uint8 mMenaceCurrent; // Nivel de amenaza actual JA_Sound bubble3Sound; // Sonido para cuando el jugador muere
Uint8 mMenaceThreshold; // 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 JA_Sound bubble4Sound; // Sonido para cuando el jugador muere
bool mTimeStopped; // Indica si el tiempo está detenido JA_Sound clockSound; // Sonido para cuando se detiene el tiempo con el item reloj
Uint16 mTimeStoppedCounter; // Temporizador para llevar la cuenta del tiempo detenido JA_Sound powerBallSound; // Sonido para cuando se explota una Power Ball
Uint32 mCounter; // Contador para el juego JA_Sound coffeeMachineSound; // Sonido para cuando la máquina de café toca el suelo
Uint32 mScoreDataFile[TOTAL_SCORE_DATA]; // Datos del fichero de puntos
SDL_Rect mGradientRect[4]; // Vector con las coordenadas de los 4 gradientes
Uint16 mBalloonsPopped; // Lleva la cuenta de los globos explotados
Uint8 mLastEnemyDeploy; // Guarda cual ha sido la última formación desplegada para no repetir;
int mEnemyDeployCounter; // Cuando se lanza una formación, se le da un valor y no sale otra hasta que llegue a cero
float mEnemySpeed; // Velocidad a la que se mueven los enemigos
float mDefaultEnemySpeed; // Velocidad base de los enemigos, sin incrementar
effect_t mEffect; // Variable para gestionar los efectos visuales
helper_t mHelper; // Variable para gestionar las ayudas
bool mPowerBallEnabled; // Indica si hay una powerball ya activa
Uint8 mPowerBallCounter; // Contador de formaciones enemigas entre la aparicion de una PowerBall y otra
bool mCoffeeMachineEnabled; // Indica si hay una máquina de café en el terreno de juego
Uint8 mPostFade; // Qué hacer al acabar el fade
float mSin[360]; // Vector con los valores del seno para 360 grados
bool mGameCompleted; // Indica si se ha completado la partida, llegando al final de la ultima pantalla
int mGameCompletedCounter; // Contador para el tramo final, cuando se ha completado la partida y ya no aparecen más enemigos
Uint8 mDifficulty; // Dificultad del juego
float mDifficultyScoreMultiplier; // Multiplicador de puntos en función de la dificultad
struct options_t *mOptions; // Variable con todas las variables de las opciones del programa
Uint8 mOnePlayerControl; // Variable para almacenar el valor de las opciones
enemyFormation_t mEnemyFormation[NUMBER_OF_ENEMY_FORMATIONS]; // Vector con todas las formaciones enemigas
enemyPool_t mEnemyPool[10]; // Variable con los diferentes conjuntos de formaciones enemigas
Uint8 mLastStageReached; // Contiene el numero de la última pantalla que se ha alcanzado
demo_t mDemo; // Variable con todas las variables relacionadas con el modo demo JA_Music gameMusic; // Musica de fondo
debug_t mDebug; // Variable con las opciones de debug
// Inicializa el vector con los valores del seno // Variables
void initSin(); int numPlayers; // Numero de jugadores
Uint32 ticks; // Contador de ticks para ajustar la velocidad del programa
Uint8 ticksSpeed; // Velocidad a la que se repiten los bucles del programa
Uint32 hiScore; // Puntuación máxima
bool hiScoreAchieved; // Indica si se ha superado la puntuación máxima
section_t section; // Seccion actual dentro del juego
stage_t stage[10]; // Variable con los datos de cada pantalla
Uint8 currentStage; // Indica la fase actual
Uint8 stageBitmapCounter; // Contador para el tiempo visible del texto de Stage
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
Uint16 deathCounter; // Contador para la animación de muerte del jugador
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
bool timeStopped; // Indica si el tiempo está detenido
Uint16 timeStoppedCounter; // Temporizador para llevar la cuenta del tiempo detenido
Uint32 counter; // Contador para el juego
Uint32 scoreDataFile[TOTAL_SCORE_DATA]; // Datos del fichero de puntos
SDL_Rect skyColorsRect[4]; // Vector con las coordenadas de los 4 colores de cielo
Uint16 balloonsPopped; // Lleva la cuenta de los globos explotados
Uint8 lastEnemyDeploy; // Guarda cual ha sido la última formación desplegada para no repetir;
int enemyDeployCounter; // Cuando se lanza una formación, se le da un valor y no sale otra hasta que llegue a cero
float enemySpeed; // Velocidad a la que se mueven los enemigos
float defaultEnemySpeed; // Velocidad base de los enemigos, sin incrementar
effect_t effect; // Variable para gestionar los efectos visuales
helper_t helper; // Variable para gestionar las ayudas
bool powerBallEnabled; // Indica si hay una powerball ya activa
Uint8 powerBallCounter; // Contador de formaciones enemigas entre la aparicion de una PowerBall y otra
bool coffeeMachineEnabled; // Indica si hay una máquina de café en el terreno de juego
bool gameCompleted; // Indica si se ha completado la partida, llegando al final de la ultima pantalla
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
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
Uint8 onePlayerControl; // Variable para almacenar el valor de las opciones
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
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
int totalPowerToCompleteGame; // La suma del poder necesario para completar todas las fases
int cloudsSpeed; // Velocidad a la que se desplazan las nubes
int pauseCounter; // Contador para salir del menu de pausa y volver al juego
bool leavingPauseMenu; // Indica si esta saliendo del menu de pausa para volver al juego
// Actualiza el juego
void update();
// Dibuja el juego
void render();
// Comprueba los eventos que hay en cola
void checkEventHandler();
// Inicializa las variables necesarias para la sección 'Game' // Inicializa las variables necesarias para la sección 'Game'
void init(); void init();
// Carga los recursos necesarios para la sección 'Game' // Carga los recursos necesarios para la sección 'Game'
bool loadMedia(); void loadMedia();
// Carga el fichero de puntos // Carga el fichero de puntos
bool loadScoreFile(); bool loadScoreFile();
@@ -288,7 +293,10 @@ private:
void renderScoreBoard(); void renderScoreBoard();
// Actualiza las variables del jugador // Actualiza las variables del jugador
void updatePlayer(); void updatePlayers();
// Dibuja a los jugadores
void renderPlayers();
// Actualiza las variables de la fase // Actualiza las variables de la fase
void updateStage(); void updateStage();
@@ -306,7 +314,7 @@ private:
void renderBalloons(); void renderBalloons();
// Crea un globo nuevo en el vector de globos // Crea un globo nuevo en el vector de globos
Uint8 createNewBalloon(float x, int y, Uint8 kind, float velx, float speed, Uint16 stoppedcounter); Uint8 createBalloon(float x, int y, Uint8 kind, float velx, float speed, Uint16 stoppedcounter);
// Crea una PowerBall // Crea una PowerBall
void createPowerBall(); void createPowerBall();
@@ -344,12 +352,6 @@ private:
// Obtiene el numero de globos activos // Obtiene el numero de globos activos
Uint8 countBalloons(); Uint8 countBalloons();
// Obtiene la textura correspondiente en funcion del tipo
LTexture *balloonTexture(int kind);
// Obtiene la animacion correspondiente en funcion del tipo
std::string balloonAnimation(int kind);
// Vacia el vector de globos // Vacia el vector de globos
void freeBalloons(); void freeBalloons();
@@ -384,7 +386,7 @@ private:
Uint8 dropItem(); Uint8 dropItem();
// Crea un objeto item // Crea un objeto item
void createItem(Uint8 type, float x, float y); void createItem(Uint8 kind, float x, float y);
// Vacia el vector de items // Vacia el vector de items
void freeItems(); void freeItems();
@@ -392,6 +394,9 @@ private:
// Crea un objeto SmartSprite // Crea un objeto SmartSprite
void createItemScoreSprite(int x, int y, SmartSprite *sprite); void createItemScoreSprite(int x, int y, SmartSprite *sprite);
// Vacia el vector de smartsprites
void freeSmartSprites();
// Dibuja el efecto de flash // Dibuja el efecto de flash
void renderFlashEffect(); void renderFlashEffect();
@@ -401,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();
@@ -443,18 +445,12 @@ private:
// Gestiona el nivel de amenaza // Gestiona el nivel de amenaza
void updateMenace(); void updateMenace();
// Actualiza el campo de juego
void updatePlayField();
// Actualiza el fondo // Actualiza el fondo
void updateBackground(); void updateBackground();
// Dibuja el fondo // Dibuja el fondo
void renderBackground(); void renderBackground();
// Dibuja el campo de juego
void renderPlayField();
// Gestiona la entrada durante el juego // Gestiona la entrada durante el juego
void checkGameInput(); void checkGameInput();
@@ -470,15 +466,24 @@ 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();
// Dibuja la informacion de debug en pantalla
void renderDebugInfo();
// Indica si se puede crear una powerball // Indica si se puede crear una powerball
bool canPowerBallBeCreated(); bool canPowerBallBeCreated();
@@ -497,9 +502,18 @@ private:
// Comprueba si todos los jugadores han muerto // Comprueba si todos los jugadores han muerto
bool allPlayersAreDead(); bool allPlayersAreDead();
// Carga las animaciones
void loadAnimations(std::string filePath, std::vector<std::string> *buffer);
// Elimina todos los objetos contenidos en vectores
void deleteAllVectorObjects();
// Recarga las texturas
void reloadTextures();
public: public:
// Constructor // Constructor
Game(int numPlayers, int currentStage, SDL_Renderer *renderer, Screen *screen, Asset *mAsset, 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);
// Destructor // Destructor
~Game(); ~Game();

View File

@@ -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(); Texture *item1 = new Texture(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); Texture *item2 = new Texture(renderer, asset->get("item_points2_gavina.png"));
itemTextures.push_back(item2);
Texture *item3 = new Texture(renderer, asset->get("item_points3_pacmar.png"));
itemTextures.push_back(item3);
Texture *item4 = new Texture(renderer, asset->get("item_clock.png"));
itemTextures.push_back(item4);
Texture *item5 = new Texture(renderer, asset->get("item_coffee.png"));
itemTextures.push_back(item5);
Texture *item6 = new Texture(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;
} }

View File

@@ -1,42 +1,46 @@
#pragma once #pragma once
#include <SDL2/SDL.h> #include <SDL2/SDL.h>
#include "asset.h" #include "common/asset.h"
#include "common/jail_audio.h"
#include "common/screen.h"
#include "common/sprite.h"
#include "common/text.h"
#include "common/utils.h"
#include "const.h" #include "const.h"
#include "jail_audio.h"
#include "screen.h"
#include "sprite.h"
#include "text.h"
#include "utils.h"
#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 y punteros
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<Texture *> 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

View File

@@ -11,7 +11,7 @@ Intro::Intro(SDL_Renderer *renderer, Screen *screen, Asset *asset, Lang *lang)
// Reserva memoria para los objetos // Reserva memoria para los objetos
eventHandler = new SDL_Event(); eventHandler = new SDL_Event();
texture = new LTexture(renderer, asset->get("intro.png")); texture = new Texture(renderer, asset->get("intro.png"));
text = new Text(asset->get("nokia.png"), asset->get("nokia.txt"), renderer); text = new Text(asset->get("nokia.png"), asset->get("nokia.txt"), renderer);
// Carga los recursos // Carga los recursos
@@ -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;
}
} }
} }
} }

View File

@@ -1,13 +1,13 @@
#pragma once #pragma once
#include <SDL2/SDL.h> #include <SDL2/SDL.h>
#include "asset.h" #include "common/asset.h"
#include "common/jail_audio.h"
#include "common/screen.h"
#include "common/smartsprite.h"
#include "common/utils.h"
#include "common/writer.h"
#include "const.h" #include "const.h"
#include "jail_audio.h"
#include "screen.h"
#include "smartsprite.h"
#include "utils.h"
#include "writer.h"
#include <vector> #include <vector>
#ifndef INTRO_H #ifndef INTRO_H
@@ -17,10 +17,10 @@
class Intro class Intro
{ {
private: private:
// Objetos // Objetos y punteros
SDL_Renderer *renderer; // El renderizador de la ventana SDL_Renderer *renderer; // El renderizador de la ventana
Screen *screen; // Objeto encargado de dibujar en pantalla Screen *screen; // Objeto encargado de dibujar en pantalla
LTexture *texture; // Textura con los graficos Texture *texture; // Textura con los graficos
SDL_Event *eventHandler; // Manejador de eventos SDL_Event *eventHandler; // Manejador de eventos
Asset *asset; // Objeto que gestiona todos los ficheros de recursos Asset *asset; // Objeto que gestiona todos los ficheros de recursos
Lang *lang; // Objeto para gestionar los textos en diferentes idiomas Lang *lang; // Objeto para gestionar los textos en diferentes idiomas

Some files were not shown because too many files have changed in this diff Show More