Compare commits
51 Commits
91b868572e
...
v2.1b
| Author | SHA1 | Date | |
|---|---|---|---|
| 8c293a6b7f | |||
| a3599d2d3d | |||
| 7ab81eaf29 | |||
| 4f1a596e46 | |||
| b07baa4669 | |||
| cf357560b2 | |||
| 3d52c45f5c | |||
| 3276027044 | |||
| 8041595976 | |||
| fa53c1b01a | |||
| 20b362160e | |||
| 5cabbfc487 | |||
| 9f5e001c70 | |||
| 112c3afc76 | |||
| f4215384fe | |||
| 7796cee51a | |||
| f83154c062 | |||
| 9e73f7f97d | |||
| 742ca02573 | |||
| d77757853d | |||
| ca7ae7418e | |||
| f880bb7d74 | |||
| 9784b5517a | |||
| 88041eba23 | |||
| 698721ae03 | |||
| c7109a46cd | |||
| bb20522172 | |||
| bebc016f3c | |||
| 56c1a1d7f3 | |||
| 50d2a5d1c7 | |||
| 83103ddfea | |||
| f4f7bb52b3 | |||
| b861f33867 | |||
| 2576d62002 | |||
| 02312e1342 | |||
| 83a34d61bf | |||
| 8076d8a765 | |||
| 901757b9b2 | |||
| f5ba15a4af | |||
| 6eda55cdae | |||
| 18c36ad3fb | |||
| a5adf1ba01 | |||
| d5ab7cbe2a | |||
| adad58ccfa | |||
| 33b7c6082e | |||
| 5fd1ffa865 | |||
| 9f93de1d06 | |||
| c3fd348a61 | |||
| ddb70c8c85 | |||
| 95d6396dfa | |||
| 99b61c4b2d |
14
.gitignore
vendored
@@ -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
@@ -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)
|
||||||
@@ -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]
|
||||||
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.8 KiB |
@@ -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]
|
||||||
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.5 KiB |
@@ -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]
|
||||||
|
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 6.1 KiB |
@@ -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]
|
||||||
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 14 KiB |
BIN
data/gfx/game_buildings.png
Normal file
|
After Width: | Height: | Size: 8.9 KiB |
BIN
data/gfx/game_clouds.png
Normal file
|
After Width: | Height: | Size: 901 B |
BIN
data/gfx/game_grass.png
Normal file
|
After Width: | Height: | Size: 468 B |
BIN
data/gfx/game_power_meter.png
Normal file
|
After Width: | Height: | Size: 270 B |
BIN
data/gfx/game_sky_colors.png
Normal file
|
After Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 795 B After Width: | Height: | Size: 438 B |
|
Before Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 2.5 KiB |
BIN
data/gfx/menu_game_over.png
Normal file
|
After Width: | Height: | Size: 3.6 KiB |
BIN
data/gfx/menu_game_over_end.png
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
@@ -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]
|
|
||||||
|
Before Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 6.5 KiB |
|
Before Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 6.6 KiB |
|
Before Width: | Height: | Size: 654 B |
BIN
data/gfx/player_arounder_body.png
Normal file
|
After Width: | Height: | Size: 4.7 KiB |
BIN
data/gfx/player_arounder_death.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
data/gfx/player_arounder_fire.png
Normal file
|
After Width: | Height: | Size: 887 B |
BIN
data/gfx/player_arounder_head.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
data/gfx/player_arounder_legs.png
Normal file
|
After Width: | Height: | Size: 443 B |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 4.6 KiB |
BIN
data/gfx/player_bal1_death.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
data/gfx/player_bal1_fire.png
Normal file
|
After Width: | Height: | Size: 835 B |
BIN
data/gfx/player_bal1_head.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 529 B After Width: | Height: | Size: 529 B |
176
data/gfx/player_body.ani
Normal 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
@@ -0,0 +1,9 @@
|
|||||||
|
frameWidth=28
|
||||||
|
frameHeight=32
|
||||||
|
|
||||||
|
[animation]
|
||||||
|
name=default
|
||||||
|
speed=5
|
||||||
|
loop=0
|
||||||
|
frames=0,1,2,3
|
||||||
|
[/animation]
|
||||||
@@ -61,54 +61,54 @@ frames=28,29,30,31
|
|||||||
name=sideshoot
|
name=sideshoot
|
||||||
speed=5
|
speed=5
|
||||||
loop=0
|
loop=0
|
||||||
frames=32,33,34,35
|
frames=16,17,18,19
|
||||||
[/animation]
|
[/animation]
|
||||||
|
|
||||||
[animation]
|
[animation]
|
||||||
name=centershoot
|
name=centershoot
|
||||||
speed=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]
|
||||||
@@ -1,160 +1,239 @@
|
|||||||
## 0 - MENU DEL TITULO
|
## 0 - MENU DEL TITULO
|
||||||
JUGAR
|
JUGAR
|
||||||
|
|
||||||
## 1 - MENU DEL TITULO
|
## 1 - MENU DEL TITULO
|
||||||
OPCIONS
|
OPCIONS
|
||||||
|
|
||||||
## 2 - MENU DEL TITULO
|
## 2 - MENU DEL TITULO
|
||||||
INSTRUCCIONS
|
INSTRUCCIONS
|
||||||
|
|
||||||
## 3 - MENU DEL TITULO
|
## 3 - MENU DEL TITULO
|
||||||
EIXIR
|
EIXIR
|
||||||
|
|
||||||
## 4 - MENU DE OPCIONES
|
## 4 - MENU DE OPCIONES
|
||||||
FINESTRA
|
FINESTRA
|
||||||
|
|
||||||
## 5 - MENU DE OPCIONES
|
## 5 - MENU DE OPCIONES
|
||||||
PANTALLA COMPLETA
|
PANTALLA COMPLETA
|
||||||
|
|
||||||
## 6 - MENU DE OPCIONES
|
## 6 - MENU DE OPCIONES
|
||||||
PANTALLA COMPLETA FALSA
|
PANTALLA COMPLETA FALSA
|
||||||
|
|
||||||
## 7 - MENU DE OPCIONES
|
## 7 - MENU DE OPCIONES
|
||||||
TAMANY DE FINESTRA
|
TAMANY DE FINESTRA
|
||||||
|
|
||||||
## 8 - MENU DE OPCIONES
|
## 8 - MENU DE OPCIONES
|
||||||
IDIOMA
|
IDIOMA
|
||||||
|
|
||||||
## 9 - MENU DE OPCIONES
|
## 9 - MENU DE OPCIONES
|
||||||
[ ACEPTAR ]
|
[ ACEPTAR ]
|
||||||
|
|
||||||
## 10 - MENU DE OPCIONES
|
## 10 - MENU DE OPCIONES
|
||||||
[ CANCELAR ]
|
[ CANCELAR ]
|
||||||
|
|
||||||
## 11 - INSTRUCCIONES
|
## 11 - INSTRUCCIONES
|
||||||
OBJECTIU
|
OBJECTIU
|
||||||
|
|
||||||
## 12 - INSTRUCCIONES
|
## 12 - INSTRUCCIONES
|
||||||
HAS D'EXPLOTAR
|
HAS D'EXPLOTAR
|
||||||
|
|
||||||
## 13 - INSTRUCCIONES
|
## 13 - INSTRUCCIONES
|
||||||
TANTS GLOBUS COM PUGUES
|
TANTS GLOBUS COM PUGUES
|
||||||
|
|
||||||
## 14 - INSTRUCCIONES
|
## 14 - INSTRUCCIONES
|
||||||
LA DIFICULTAT AUGMENTA
|
LA DIFICULTAT AUGMENTA
|
||||||
|
|
||||||
## 15 - INSTRUCCIONES
|
## 15 - INSTRUCCIONES
|
||||||
A MESURA QUE VAS PUNTUANT
|
A MESURA QUE VAS PUNTUANT
|
||||||
|
|
||||||
## 16 - INSTRUCCIONES
|
## 16 - INSTRUCCIONES
|
||||||
OBJECTES
|
OBJECTES
|
||||||
|
|
||||||
## 17 - INSTRUCCIONES
|
## 17 - INSTRUCCIONES
|
||||||
1.000 PUNTS
|
1.000 PUNTS
|
||||||
|
|
||||||
## 18 - INSTRUCCIONES
|
## 18 - INSTRUCCIONES
|
||||||
2.500 PUNTS
|
2.500 PUNTS
|
||||||
|
|
||||||
## 19 - INSTRUCCIONES
|
## 19 - INSTRUCCIONES
|
||||||
5.000 PUNTS
|
5.000 PUNTS
|
||||||
|
|
||||||
## 20 - INSTRUCCIONES
|
## 20 - INSTRUCCIONES
|
||||||
PARA EL TEMPS
|
PARA EL TEMPS
|
||||||
|
|
||||||
## 21 - INSTRUCCIONES
|
## 21 - INSTRUCCIONES
|
||||||
VIDA EXTRA
|
VIDA EXTRA
|
||||||
|
|
||||||
## 22 - INSTRUCCIONES
|
## 22 - INSTRUCCIONES
|
||||||
PREM UNA TECLA PER A TORNAR
|
PREM UNA TECLA PER A TORNAR
|
||||||
|
|
||||||
## 23 - TITULO
|
## 23 - TITULO
|
||||||
PREM QUALSEVOL TECLA
|
PREM QUALSEVOL TECLA
|
||||||
|
|
||||||
## 24 - MENU SELECCION DE IDIOMA
|
## 24 - MENU SELECCION DE IDIOMA
|
||||||
ESPA{OL (ESPANYOL)
|
ESPA{OL (ESPANYOL)
|
||||||
|
|
||||||
## 25 - MENU SELECCION DE IDIOMA
|
## 25 - MENU SELECCION DE IDIOMA
|
||||||
BALOONCIA
|
BALOONCIA
|
||||||
|
|
||||||
## 26 - MENU SELECCION DE IDIOMA
|
## 26 - MENU SELECCION DE IDIOMA
|
||||||
ENGLISH (ANGLES)
|
ENGLISH (ANGLES)
|
||||||
|
|
||||||
## 27 - INTRO
|
## 27 - INTRO
|
||||||
Un dia qualsevol de l'any 2000
|
Un dia qualsevol de l'any 2000
|
||||||
|
|
||||||
## 28 - INTRO
|
## 28 - INTRO
|
||||||
Tot esta tranquil a la UPV
|
Tot esta tranquil a la UPV
|
||||||
|
|
||||||
## 29 - INTRO
|
## 29 - INTRO
|
||||||
Fins que un desaprensiu...
|
Fins que un desaprensiu...
|
||||||
|
|
||||||
## 30 - INTRO
|
## 30 - INTRO
|
||||||
HEY! ME ANE A FERME UN CORTAET...
|
HEY! ME ANE A FERME UN CORTAET...
|
||||||
|
|
||||||
## 31 - INTRO
|
## 31 - INTRO
|
||||||
UAAAAAAAAAAAAA!!!
|
UAAAAAAAAAAAAA!!!
|
||||||
|
|
||||||
## 32 - INTRO
|
## 32 - INTRO
|
||||||
Espera un moment...
|
Espera un moment...
|
||||||
|
|
||||||
## 33 - INTRO
|
## 33 - INTRO
|
||||||
Si resulta que no tinc solt!
|
Si resulta que no tinc solt!
|
||||||
|
|
||||||
## 34 - INTRO
|
## 34 - INTRO
|
||||||
MERDA DE MAQUINA!
|
MERDA DE MAQUINA!
|
||||||
|
|
||||||
## 35 - INTRO
|
## 35 - INTRO
|
||||||
Blop... blop... blop...
|
Blop... blop... blop...
|
||||||
|
|
||||||
## 36 - TEXTOS DEL JUEGO
|
## 36 - TEXTOS DEL JUEGO
|
||||||
Temps detes:
|
Temps detes:
|
||||||
|
|
||||||
## 37 - TEXTOS DEL JUEGO
|
## 37 - TEXTOS DEL JUEGO
|
||||||
D E M O
|
D E M O
|
||||||
|
|
||||||
## 38 - TEXTOS DEL JUEGO
|
## 38 - TEXTOS DEL JUEGO
|
||||||
fases mes!
|
fases mes!
|
||||||
## 39 -
|
|
||||||
|
|
||||||
## 40 -
|
## 39 - MENU SELECCION DE JUGADOR
|
||||||
|
Selecciona personatge
|
||||||
|
|
||||||
## 41 -
|
## 40 - MENU SELECCION DE JUGADOR
|
||||||
|
Enrere
|
||||||
|
|
||||||
|
## 41 - MENU DE PAUSA
|
||||||
|
Menu de pausa
|
||||||
|
|
||||||
## 42 -
|
## 42 -
|
||||||
|
-
|
||||||
|
|
||||||
## 43 - PANTALLA DE GAME OVER
|
## 43 - PANTALLA DE GAME OVER
|
||||||
FI DEL JOC
|
FI DEL JOC
|
||||||
|
|
||||||
## 44 - PANTALLA DE GAME OVER
|
## 44 - PANTALLA DE GAME OVER
|
||||||
ELS TEUS PUNTS:
|
ELS TEUS PUNTS:
|
||||||
|
|
||||||
## 45 - PANTALLA DE GAME OVER
|
## 45 - PANTALLA DE GAME OVER
|
||||||
CONTINUAR?
|
CONTINUAR?
|
||||||
|
|
||||||
## 46 - MENU DE PAUSA
|
## 46 - MENU DE PAUSA
|
||||||
CONTINUAR
|
CONTINUAR
|
||||||
|
|
||||||
## 47 - MENU DE PAUSA
|
## 47 - MENU DE PAUSA
|
||||||
EIXIR DEL JOC
|
EIXIR DEL JOC
|
||||||
|
|
||||||
## 48 - MENU GAME OVER
|
## 48 - MENU GAME OVER
|
||||||
SI
|
SI
|
||||||
|
|
||||||
## 49 - MENU GAME OVER
|
## 49 - MENU GAME OVER
|
||||||
NO
|
NO
|
||||||
|
|
||||||
## 50 - TEXTO DE COMPLETAR EL JUEGO
|
## 50 - TEXTO DE COMPLETAR EL JUEGO
|
||||||
Felicitats!!
|
Felicitats!!
|
||||||
|
|
||||||
## 51 - MENU DEL TITULO
|
## 51 - MENU DEL TITULO
|
||||||
1 JUGADOR
|
1 JUGADOR
|
||||||
|
|
||||||
## 52 - MENU DEL TITULO
|
## 52 - MENU DEL TITULO
|
||||||
2 JUGADORS
|
2 JUGADORS
|
||||||
|
|
||||||
## 53 MARCADOR
|
## 53 MARCADOR
|
||||||
jugador 1
|
jugador 1
|
||||||
|
|
||||||
## 54 MARCADOR
|
## 54 MARCADOR
|
||||||
jugador 2
|
jugador 2
|
||||||
|
|
||||||
## 55 MARCADOR
|
## 55 MARCADOR
|
||||||
mult
|
mult
|
||||||
|
|
||||||
## 56 MARCADOR
|
## 56 MARCADOR
|
||||||
max. puntuacio
|
max. puntuacio
|
||||||
|
|
||||||
## 57 MARCADOR
|
## 57 MARCADOR
|
||||||
fase
|
fase
|
||||||
|
|
||||||
## 58 - MENU DE OPCIONES
|
## 58 - MENU DE OPCIONES
|
||||||
MODE DE VISUALITZACIO
|
MODE DE VISUALITZACIO
|
||||||
|
|
||||||
## 59 - MENU DE OPCIONES
|
## 59 - MENU DE OPCIONES
|
||||||
DIFICULTAT
|
DIFICULTAT
|
||||||
|
|
||||||
## 60 - MENU DE OPCIONES
|
## 60 - MENU DE OPCIONES
|
||||||
FILTRE
|
FILTRE
|
||||||
|
|
||||||
## 61 - MENU DE OPCIONES
|
## 61 - MENU DE OPCIONES
|
||||||
SINC. VERTICAL
|
SINC. VERTICAL
|
||||||
|
|
||||||
## 62 - MENU DE OPCIONES
|
## 62 - MENU DE OPCIONES
|
||||||
CONTROLS DEL JUGADOR 1
|
CONTROLS DEL JUGADOR 1
|
||||||
|
|
||||||
## 63 - MENU DE OPCIONES
|
## 63 - MENU DE OPCIONES
|
||||||
CONTROLS DEL JUGADOR 2
|
CONTROLS DEL JUGADOR 2
|
||||||
|
|
||||||
## 64 -
|
## 64 -
|
||||||
|
-
|
||||||
|
|
||||||
## 65 -
|
## 65 -
|
||||||
|
-
|
||||||
|
|
||||||
## 66 - MENU DE OPCIONES
|
## 66 - MENU DE OPCIONES
|
||||||
FACIL
|
FACIL
|
||||||
|
|
||||||
## 67 - MENU DE OPCIONES
|
## 67 - MENU DE OPCIONES
|
||||||
NORMAL
|
NORMAL
|
||||||
|
|
||||||
## 68 - MENU DE OPCIONES
|
## 68 - MENU DE OPCIONES
|
||||||
DIFICIL
|
DIFICIL
|
||||||
|
|
||||||
## 69 - MENU DE OPCIONES
|
## 69 - MENU DE OPCIONES
|
||||||
TECLAT
|
TECLAT
|
||||||
|
|
||||||
## 70 - MENU DE OPCIONES
|
## 70 - MENU DE OPCIONES
|
||||||
MANDO
|
MANDO
|
||||||
|
|
||||||
## 71 - MENU DE OPCIONES
|
## 71 - MENU DE OPCIONES
|
||||||
LINEAL
|
LINEAL
|
||||||
|
|
||||||
## 72 - MENU DE OPCIONES
|
## 72 - MENU DE OPCIONES
|
||||||
NEAREST
|
NEAREST
|
||||||
|
|
||||||
## 73 - MENU DE OPCIONES
|
## 73 - MENU DE OPCIONES
|
||||||
ACTIVADA
|
ACTIVADA
|
||||||
|
|
||||||
## 74 - MENU DE OPCIONES
|
## 74 - MENU DE OPCIONES
|
||||||
DESACTIVADA
|
DESACTIVADA
|
||||||
|
|
||||||
## 75 - JUEGO
|
## 75 - JUEGO
|
||||||
Endavant!
|
Endavant!
|
||||||
|
|
||||||
## 76 - JUEGO
|
## 76 - JUEGO
|
||||||
1.000.000 de punts!
|
1.000.000 de punts!
|
||||||
|
|
||||||
## 77 - PANTALLA DE GAME OVER
|
## 77 - PANTALLA DE GAME OVER
|
||||||
PUNTS J1:
|
PUNTS J1:
|
||||||
|
|
||||||
## 78 - PANTALLA DE GAME OVER
|
## 78 - PANTALLA DE GAME OVER
|
||||||
PUNTS J2:
|
PUNTS J2:
|
||||||
|
|
||||||
## 79 - TEXTOS DEL JUEGO
|
## 79 - TEXTOS DEL JUEGO
|
||||||
Ultima fase!
|
Ultima fase!
|
||||||
@@ -1,160 +1,239 @@
|
|||||||
## 0 - MENU DEL TITULO
|
## 0 - MENU DEL TITULO
|
||||||
PLAY
|
PLAY
|
||||||
|
|
||||||
## 1 - MENU DEL TITULO
|
## 1 - MENU DEL TITULO
|
||||||
OPTIONS
|
OPTIONS
|
||||||
|
|
||||||
## 2 - MENU DEL TITULO
|
## 2 - MENU DEL TITULO
|
||||||
HOW TO PLAY
|
HOW TO PLAY
|
||||||
|
|
||||||
## 3 - MENU DEL TITULO
|
## 3 - MENU DEL TITULO
|
||||||
QUIT
|
QUIT
|
||||||
|
|
||||||
## 4 - MENU DE OPCIONES
|
## 4 - MENU DE OPCIONES
|
||||||
WINDOW
|
WINDOW
|
||||||
|
|
||||||
## 5 - MENU DE OPCIONES
|
## 5 - MENU DE OPCIONES
|
||||||
FULLSCREEN
|
FULLSCREEN
|
||||||
|
|
||||||
## 6 - MENU DE OPCIONES
|
## 6 - MENU DE OPCIONES
|
||||||
FAKE FULLSCREEN
|
FAKE FULLSCREEN
|
||||||
|
|
||||||
## 7 - MENU DE OPCIONES
|
## 7 - MENU DE OPCIONES
|
||||||
WINDOW SIZE
|
WINDOW SIZE
|
||||||
|
|
||||||
## 8 - MENU DE OPCIONES
|
## 8 - MENU DE OPCIONES
|
||||||
LANGUAGE
|
LANGUAGE
|
||||||
|
|
||||||
## 9 - MENU DE OPCIONES
|
## 9 - MENU DE OPCIONES
|
||||||
[ ACCEPT ]
|
[ ACCEPT ]
|
||||||
|
|
||||||
## 10 - MENU DE OPCIONES
|
## 10 - MENU DE OPCIONES
|
||||||
[ CANCEL ]
|
[ CANCEL ]
|
||||||
|
|
||||||
## 11 - INSTRUCCIONES
|
## 11 - INSTRUCCIONES
|
||||||
OBJECTIVE
|
OBJECTIVE
|
||||||
|
|
||||||
## 12 - INSTRUCCIONES
|
## 12 - INSTRUCCIONES
|
||||||
YOU HAVE TO POP AS MANY
|
YOU HAVE TO POP AS MANY
|
||||||
|
|
||||||
## 13 - INSTRUCCIONES
|
## 13 - INSTRUCCIONES
|
||||||
BALLOONS AS YOU CAN
|
BALLOONS AS YOU CAN
|
||||||
|
|
||||||
## 14 - INSTRUCCIONES
|
## 14 - INSTRUCCIONES
|
||||||
DIFFICULTY WILL BE INCREASED
|
DIFFICULTY WILL BE INCREASED
|
||||||
|
|
||||||
## 15 - INSTRUCCIONES
|
## 15 - INSTRUCCIONES
|
||||||
AS YOU SCORE POINTS
|
AS YOU SCORE POINTS
|
||||||
|
|
||||||
## 16 - INSTRUCCIONES
|
## 16 - INSTRUCCIONES
|
||||||
ITEMS
|
ITEMS
|
||||||
|
|
||||||
## 17 - INSTRUCCIONES
|
## 17 - INSTRUCCIONES
|
||||||
1.000 POINTS
|
1.000 POINTS
|
||||||
|
|
||||||
## 18 - INSTRUCCIONES
|
## 18 - INSTRUCCIONES
|
||||||
2.500 POINTS
|
2.500 POINTS
|
||||||
|
|
||||||
## 19 - INSTRUCCIONES
|
## 19 - INSTRUCCIONES
|
||||||
5.000 POINTS
|
5.000 POINTS
|
||||||
|
|
||||||
## 20 - INSTRUCCIONES
|
## 20 - INSTRUCCIONES
|
||||||
TIME STOPPER
|
TIME STOPPER
|
||||||
|
|
||||||
## 21 - INSTRUCCIONES
|
## 21 - INSTRUCCIONES
|
||||||
EXTRA HIT
|
EXTRA HIT
|
||||||
|
|
||||||
## 22 - INSTRUCCIONES
|
## 22 - INSTRUCCIONES
|
||||||
PRESS ANY KEY TO RETURN
|
PRESS ANY KEY TO RETURN
|
||||||
|
|
||||||
## 23 - TITULO
|
## 23 - TITULO
|
||||||
PRESS ANY KEY
|
PRESS ANY KEY
|
||||||
|
|
||||||
## 24 - MENU SELECCION DE IDIOMA
|
## 24 - MENU SELECCION DE IDIOMA
|
||||||
ESPA{OL (SPANISH)
|
ESPA{OL (SPANISH)
|
||||||
|
|
||||||
## 25 - MENU SELECCION DE IDIOMA
|
## 25 - MENU SELECCION DE IDIOMA
|
||||||
BALOONCIA (VALENCIAN)
|
BALOONCIA (VALENCIAN)
|
||||||
|
|
||||||
## 26 - MENU SELECCION DE IDIOMA
|
## 26 - MENU SELECCION DE IDIOMA
|
||||||
ENGLISH
|
ENGLISH
|
||||||
|
|
||||||
## 27 - INTRO
|
## 27 - INTRO
|
||||||
Any day of the year 2000
|
Any day of the year 2000
|
||||||
|
|
||||||
## 28 - INTRO
|
## 28 - INTRO
|
||||||
Everything is quiet at the UPV
|
Everything is quiet at the UPV
|
||||||
|
|
||||||
## 29 - INTRO
|
## 29 - INTRO
|
||||||
Until a bastard arrives...
|
Until a bastard arrives...
|
||||||
|
|
||||||
## 30 - INTRO
|
## 30 - INTRO
|
||||||
YO! GONNA TAKE A CAFELITO...
|
YO! GONNA TAKE A CAFELITO...
|
||||||
|
|
||||||
## 31 - INTRO
|
## 31 - INTRO
|
||||||
AAAAAAAARGHHHH!!!
|
AAAAAAAARGHHHH!!!
|
||||||
|
|
||||||
## 32 - INTRO
|
## 32 - INTRO
|
||||||
Wait a moment...
|
Wait a moment...
|
||||||
|
|
||||||
## 33 - INTRO
|
## 33 - INTRO
|
||||||
I don't have any loose!
|
I don't have any loose!
|
||||||
|
|
||||||
## 34 - INTRO
|
## 34 - INTRO
|
||||||
FUCKING MACHINE!
|
FUCKING MACHINE!
|
||||||
|
|
||||||
## 35 - INTRO
|
## 35 - INTRO
|
||||||
Blop... blop... blop...
|
Blop... blop... blop...
|
||||||
|
|
||||||
## 36 - TEXTOS DEL JUEGO
|
## 36 - TEXTOS DEL JUEGO
|
||||||
Time stopped:
|
Time stopped:
|
||||||
|
|
||||||
## 37 - TEXTOS DEL JUEGO
|
## 37 - TEXTOS DEL JUEGO
|
||||||
D E M O
|
D E M O
|
||||||
|
|
||||||
## 38 - TEXTOS DEL JUEGO
|
## 38 - TEXTOS DEL JUEGO
|
||||||
stages left!
|
stages left!
|
||||||
## 39 -
|
|
||||||
|
|
||||||
## 40 -
|
## 39 - MENU SELECCION DE JUGADOR
|
||||||
|
Select Player
|
||||||
|
|
||||||
## 41 -
|
## 40 - MENU SELECCION DE JUGADOR
|
||||||
|
Back
|
||||||
|
|
||||||
|
## 41 - MENU DE PAUSA
|
||||||
|
Pause Menu
|
||||||
|
|
||||||
## 42 -
|
## 42 -
|
||||||
|
-
|
||||||
|
|
||||||
## 43 - PANTALLA DE GAME OVER
|
## 43 - PANTALLA DE GAME OVER
|
||||||
GAME OVER
|
GAME OVER
|
||||||
|
|
||||||
## 44 - PANTALLA DE GAME OVER
|
## 44 - PANTALLA DE GAME OVER
|
||||||
YOUR SCORE:
|
YOUR SCORE:
|
||||||
|
|
||||||
## 45 - PANTALLA DE GAME OVER
|
## 45 - PANTALLA DE GAME OVER
|
||||||
CONTINUE?
|
CONTINUE?
|
||||||
|
|
||||||
## 46 - MENU DE PAUSA
|
## 46 - MENU DE PAUSA
|
||||||
CONTINUE
|
CONTINUE
|
||||||
|
|
||||||
## 47 - MENU DE PAUSA
|
## 47 - MENU DE PAUSA
|
||||||
LEAVE GAME
|
LEAVE GAME
|
||||||
|
|
||||||
## 48 - MENU GAME OVER
|
## 48 - MENU GAME OVER
|
||||||
YES
|
YES
|
||||||
|
|
||||||
## 49 - MENU GAME OVER
|
## 49 - MENU GAME OVER
|
||||||
NO
|
NO
|
||||||
|
|
||||||
## 50 - TEXTO DE COMPLETAR EL JUEGO
|
## 50 - TEXTO DE COMPLETAR EL JUEGO
|
||||||
Congratulations!!
|
Congratulations!!
|
||||||
|
|
||||||
## 51 - MENU DEL TITULO
|
## 51 - MENU DEL TITULO
|
||||||
1 PLAYER
|
1 PLAYER
|
||||||
|
|
||||||
## 52 - MENU DEL TITULO
|
## 52 - MENU DEL TITULO
|
||||||
2 PLAYERS
|
2 PLAYERS
|
||||||
|
|
||||||
## 53 - MARCADOR
|
## 53 - MARCADOR
|
||||||
player 1
|
player 1
|
||||||
|
|
||||||
## 54 - MARCADOR
|
## 54 - MARCADOR
|
||||||
player 2
|
player 2
|
||||||
|
|
||||||
## 55 - MARCADOR
|
## 55 - MARCADOR
|
||||||
mult
|
mult
|
||||||
|
|
||||||
## 56 - MARCADOR
|
## 56 - MARCADOR
|
||||||
high score
|
high score
|
||||||
|
|
||||||
## 57 - MARCADOR
|
## 57 - MARCADOR
|
||||||
stage
|
stage
|
||||||
|
|
||||||
## 58 - MENU DE OPCIONES
|
## 58 - MENU DE OPCIONES
|
||||||
DISPLAY MODE
|
DISPLAY MODE
|
||||||
|
|
||||||
## 59 - MENU DE OPCIONES
|
## 59 - MENU DE OPCIONES
|
||||||
DIFFICULTY
|
DIFFICULTY
|
||||||
|
|
||||||
## 60 - MENU DE OPCIONES
|
## 60 - MENU DE OPCIONES
|
||||||
FILTER
|
FILTER
|
||||||
|
|
||||||
## 61 - MENU DE OPCIONES
|
## 61 - MENU DE OPCIONES
|
||||||
VSYNC
|
VSYNC
|
||||||
|
|
||||||
## 62 - MENU DE OPCIONES
|
## 62 - MENU DE OPCIONES
|
||||||
PLAYER 1 CONTROLS
|
PLAYER 1 CONTROLS
|
||||||
|
|
||||||
## 63 - MENU DE OPCIONES
|
## 63 - MENU DE OPCIONES
|
||||||
PLAYER 2 CONTROLS
|
PLAYER 2 CONTROLS
|
||||||
|
|
||||||
## 64 -
|
## 64 -
|
||||||
|
-
|
||||||
|
|
||||||
## 65 -
|
## 65 -
|
||||||
|
-
|
||||||
|
|
||||||
## 66 - MENU DE OPCIONES
|
## 66 - MENU DE OPCIONES
|
||||||
EASY
|
EASY
|
||||||
|
|
||||||
## 67 - MENU DE OPCIONES
|
## 67 - MENU DE OPCIONES
|
||||||
NORMAL
|
NORMAL
|
||||||
|
|
||||||
## 68 - MENU DE OPCIONES
|
## 68 - MENU DE OPCIONES
|
||||||
HARD
|
HARD
|
||||||
|
|
||||||
## 69 - MENU DE OPCIONES
|
## 69 - MENU DE OPCIONES
|
||||||
KEYBOARD
|
KEYBOARD
|
||||||
|
|
||||||
## 70 - MENU DE OPCIONES
|
## 70 - MENU DE OPCIONES
|
||||||
GAME CONTROLLER
|
GAME CONTROLLER
|
||||||
|
|
||||||
## 71 - MENU DE OPCIONES
|
## 71 - MENU DE OPCIONES
|
||||||
LINEAL
|
LINEAL
|
||||||
|
|
||||||
## 72 - MENU DE OPCIONES
|
## 72 - MENU DE OPCIONES
|
||||||
NEAREST
|
NEAREST
|
||||||
|
|
||||||
## 73 - MENU DE OPCIONES
|
## 73 - MENU DE OPCIONES
|
||||||
ON
|
ON
|
||||||
|
|
||||||
## 74 - MENU DE OPCIONES
|
## 74 - MENU DE OPCIONES
|
||||||
OFF
|
OFF
|
||||||
|
|
||||||
## 75 - JUEGO
|
## 75 - JUEGO
|
||||||
Get Ready!
|
Get Ready!
|
||||||
|
|
||||||
## 76 - JUEGO
|
## 76 - JUEGO
|
||||||
1.000.000 points!
|
1.000.000 points!
|
||||||
|
|
||||||
## 77 - PANTALLA DE GAME OVER
|
## 77 - PANTALLA DE GAME OVER
|
||||||
PLAYER1 SCORE:
|
PLAYER1 SCORE:
|
||||||
|
|
||||||
## 78 - PANTALLA DE GAME OVER
|
## 78 - PANTALLA DE GAME OVER
|
||||||
PLAYER2 SCORE:
|
PLAYER2 SCORE:
|
||||||
|
|
||||||
## 79 - TEXTOS DEL JUEGO
|
## 79 - TEXTOS DEL JUEGO
|
||||||
Last stage!
|
Last stage!
|
||||||
@@ -1,160 +1,239 @@
|
|||||||
## 0 - MENU DEL TITULO
|
## 0 - MENU DEL TITULO
|
||||||
JUGAR
|
JUGAR
|
||||||
|
|
||||||
## 1 - MENU DEL TITULO
|
## 1 - MENU DEL TITULO
|
||||||
OPCIONES
|
OPCIONES
|
||||||
|
|
||||||
## 2 - MENU DEL TITULO
|
## 2 - MENU DEL TITULO
|
||||||
INSTRUCCIONES
|
INSTRUCCIONES
|
||||||
|
|
||||||
## 3 - MENU DEL TITULO
|
## 3 - MENU DEL TITULO
|
||||||
SALIR
|
SALIR
|
||||||
|
|
||||||
## 4 - MENU DE OPCIONES
|
## 4 - MENU DE OPCIONES
|
||||||
VENTANA
|
VENTANA
|
||||||
|
|
||||||
## 5 - MENU DE OPCIONES
|
## 5 - MENU DE OPCIONES
|
||||||
PANTALLA COMPLETA
|
PANTALLA COMPLETA
|
||||||
|
|
||||||
## 6 - MENU DE OPCIONES
|
## 6 - MENU DE OPCIONES
|
||||||
PANTALLA COMPLETA FALSA
|
PANTALLA COMPLETA FALSA
|
||||||
|
|
||||||
## 7 - MENU DE OPCIONES
|
## 7 - MENU DE OPCIONES
|
||||||
TAMA{O DE VENTANA
|
TAMA{O DE VENTANA
|
||||||
|
|
||||||
## 8 - MENU DE OPCIONES
|
## 8 - MENU DE OPCIONES
|
||||||
IDIOMA
|
IDIOMA
|
||||||
|
|
||||||
## 9 - MENU DE OPCIONES
|
## 9 - MENU DE OPCIONES
|
||||||
[ ACEPTAR ]
|
[ ACEPTAR ]
|
||||||
|
|
||||||
## 10 - MENU DE OPCIONES
|
## 10 - MENU DE OPCIONES
|
||||||
[ CANCELAR ]
|
[ CANCELAR ]
|
||||||
|
|
||||||
## 11 - INSTRUCCIONES
|
## 11 - INSTRUCCIONES
|
||||||
OBJETIVO
|
OBJETIVO
|
||||||
|
|
||||||
## 12 - INSTRUCCIONES
|
## 12 - INSTRUCCIONES
|
||||||
TIENES QUE EXPLOTAR
|
TIENES QUE EXPLOTAR
|
||||||
|
|
||||||
## 13 - INSTRUCCIONES
|
## 13 - INSTRUCCIONES
|
||||||
TANTOS GLOBOS COMO PUEDAS
|
TANTOS GLOBOS COMO PUEDAS
|
||||||
|
|
||||||
## 14 - INSTRUCCIONES
|
## 14 - INSTRUCCIONES
|
||||||
LA DIFICULTAD SE INCREMENTA
|
LA DIFICULTAD SE INCREMENTA
|
||||||
|
|
||||||
## 15 - INSTRUCCIONES
|
## 15 - INSTRUCCIONES
|
||||||
A MEDIDA QUE VAS PUNTUANDO
|
A MEDIDA QUE VAS PUNTUANDO
|
||||||
|
|
||||||
## 16 - INSTRUCCIONES
|
## 16 - INSTRUCCIONES
|
||||||
OBJETOS
|
OBJETOS
|
||||||
|
|
||||||
## 17 - INSTRUCCIONES
|
## 17 - INSTRUCCIONES
|
||||||
1.000 PUNTOS
|
1.000 PUNTOS
|
||||||
|
|
||||||
## 18 - INSTRUCCIONES
|
## 18 - INSTRUCCIONES
|
||||||
2.500 PUNTOS
|
2.500 PUNTOS
|
||||||
|
|
||||||
## 19 - INSTRUCCIONES
|
## 19 - INSTRUCCIONES
|
||||||
5.000 PUNTOS
|
5.000 PUNTOS
|
||||||
|
|
||||||
## 20 - INSTRUCCIONES
|
## 20 - INSTRUCCIONES
|
||||||
DETIENE EL TIEMPO
|
DETIENE EL TIEMPO
|
||||||
|
|
||||||
## 21 - INSTRUCCIONES
|
## 21 - INSTRUCCIONES
|
||||||
VIDA EXTRA
|
VIDA EXTRA
|
||||||
|
|
||||||
## 22 - INSTRUCCIONES
|
## 22 - INSTRUCCIONES
|
||||||
PULSA UNA TECLA PARA VOLVER
|
PULSA UNA TECLA PARA VOLVER
|
||||||
|
|
||||||
## 23 - TITULO
|
## 23 - TITULO
|
||||||
PULSA CUALQUIER TECLA
|
PULSA CUALQUIER TECLA
|
||||||
|
|
||||||
## 24 - MENU SELECCION DE IDIOMA
|
## 24 - MENU SELECCION DE IDIOMA
|
||||||
ESPA{OL
|
ESPA{OL
|
||||||
|
|
||||||
## 25 - MENU SELECCION DE IDIOMA
|
## 25 - MENU SELECCION DE IDIOMA
|
||||||
BALOONCIA (VALENCIANO)
|
BALOONCIA (VALENCIANO)
|
||||||
|
|
||||||
## 26 - MENU SELECCION DE IDIOMA
|
## 26 - MENU SELECCION DE IDIOMA
|
||||||
ENGLISH (INGLES)
|
ENGLISH (INGLES)
|
||||||
|
|
||||||
## 27 - INTRO
|
## 27 - INTRO
|
||||||
Un dia cualquiera del a{o 2000
|
Un dia cualquiera del a{o 2000
|
||||||
|
|
||||||
## 28 - INTRO
|
## 28 - INTRO
|
||||||
Todo esta tranquilo en la UPV
|
Todo esta tranquilo en la UPV
|
||||||
|
|
||||||
## 29 - INTRO
|
## 29 - INTRO
|
||||||
Hasta que un desaprensivo...
|
Hasta que un desaprensivo...
|
||||||
|
|
||||||
## 30 - INTRO
|
## 30 - INTRO
|
||||||
HEY! VOY A SACARME UN TALLADET...
|
HEY! VOY A SACARME UN TALLADET...
|
||||||
|
|
||||||
## 31 - INTRO
|
## 31 - INTRO
|
||||||
UAAAAAAAAAAAAA!!!
|
UAAAAAAAAAAAAA!!!
|
||||||
|
|
||||||
## 32 - INTRO
|
## 32 - INTRO
|
||||||
Espera un momento...
|
Espera un momento...
|
||||||
|
|
||||||
## 33 - INTRO
|
## 33 - INTRO
|
||||||
Si no llevo suelto encima!
|
Si no llevo suelto encima!
|
||||||
|
|
||||||
## 34 - INTRO
|
## 34 - INTRO
|
||||||
MIERDA DE MAQUINA!
|
MIERDA DE MAQUINA!
|
||||||
|
|
||||||
## 35 - INTRO
|
## 35 - INTRO
|
||||||
Blop... blop... blop...
|
Blop... blop... blop...
|
||||||
|
|
||||||
## 36 - TEXTOS DEL JUEGO
|
## 36 - TEXTOS DEL JUEGO
|
||||||
Tiempo:
|
Tiempo:
|
||||||
|
|
||||||
## 37 - TEXTOS DEL JUEGO
|
## 37 - TEXTOS DEL JUEGO
|
||||||
D E M O
|
D E M O
|
||||||
|
|
||||||
## 38 - TEXTOS DEL JUEGO
|
## 38 - TEXTOS DEL JUEGO
|
||||||
fases mas!
|
fases mas!
|
||||||
## 39 -
|
|
||||||
|
|
||||||
## 40 -
|
## 39 - MENU SELECCION DE JUGADOR
|
||||||
|
Selecciona jugador
|
||||||
|
|
||||||
## 41 -
|
## 40 - MENU SELECCION DE JUGADOR
|
||||||
|
Volver
|
||||||
|
|
||||||
|
## 41 - MENU DE PAUSA
|
||||||
|
Menu de pausa
|
||||||
|
|
||||||
## 42 -
|
## 42 -
|
||||||
|
-
|
||||||
|
|
||||||
## 43 - PANTALLA DE GAME OVER
|
## 43 - PANTALLA DE GAME OVER
|
||||||
FIN DE JUEGO
|
FIN DE JUEGO
|
||||||
|
|
||||||
## 44 - PANTALLA DE GAME OVER
|
## 44 - PANTALLA DE GAME OVER
|
||||||
TU PUNTUACION:
|
TU PUNTUACION:
|
||||||
|
|
||||||
## 45 - PANTALLA DE GAME OVER
|
## 45 - PANTALLA DE GAME OVER
|
||||||
CONTINUAR?
|
CONTINUAR?
|
||||||
|
|
||||||
## 46 - MENU DE PAUSA
|
## 46 - MENU DE PAUSA
|
||||||
CONTINUAR
|
CONTINUAR
|
||||||
|
|
||||||
## 47 - MENU DE PAUSA
|
## 47 - MENU DE PAUSA
|
||||||
SALIR DEL JUEGO
|
SALIR DEL JUEGO
|
||||||
|
|
||||||
## 48 - MENU GAME OVER
|
## 48 - MENU GAME OVER
|
||||||
SI
|
SI
|
||||||
|
|
||||||
## 49 - MENU GAME OVER
|
## 49 - MENU GAME OVER
|
||||||
NO
|
NO
|
||||||
|
|
||||||
## 50 - TEXTO DE COMPLETAR EL JUEGO
|
## 50 - TEXTO DE COMPLETAR EL JUEGO
|
||||||
Felicidades!!
|
Felicidades!!
|
||||||
|
|
||||||
## 51 - MENU DEL TITULO
|
## 51 - MENU DEL TITULO
|
||||||
1 JUGADOR
|
1 JUGADOR
|
||||||
|
|
||||||
## 52 - MENU DEL TITULO
|
## 52 - MENU DEL TITULO
|
||||||
2 JUGADORES
|
2 JUGADORES
|
||||||
|
|
||||||
## 53 - MARCADOR
|
## 53 - MARCADOR
|
||||||
jugador 1
|
jugador 1
|
||||||
|
|
||||||
## 54 - MARCADOR
|
## 54 - MARCADOR
|
||||||
jugador 2
|
jugador 2
|
||||||
|
|
||||||
## 55 - MARCADOR
|
## 55 - MARCADOR
|
||||||
mult
|
mult
|
||||||
|
|
||||||
## 56 - MARCADOR
|
## 56 - MARCADOR
|
||||||
max. puntuacion
|
max. puntuacion
|
||||||
|
|
||||||
## 57 - MARCADOR
|
## 57 - MARCADOR
|
||||||
FASE
|
FASE
|
||||||
|
|
||||||
## 58 - MENU DE OPCIONES
|
## 58 - MENU DE OPCIONES
|
||||||
MODO DE VISUALIZACION
|
MODO DE VISUALIZACION
|
||||||
|
|
||||||
## 59 - MENU DE OPCIONES
|
## 59 - MENU DE OPCIONES
|
||||||
DIFICULTAD
|
DIFICULTAD
|
||||||
|
|
||||||
## 60 - MENU DE OPCIONES
|
## 60 - MENU DE OPCIONES
|
||||||
FILTRO
|
FILTRO
|
||||||
|
|
||||||
## 61 - MENU DE OPCIONES
|
## 61 - MENU DE OPCIONES
|
||||||
SINC. VERTICAL
|
SINC. VERTICAL
|
||||||
|
|
||||||
## 62 - MENU DE OPCIONES
|
## 62 - MENU DE OPCIONES
|
||||||
CONTROLES DEL JUGADOR 1
|
CONTROLES DEL JUGADOR 1
|
||||||
|
|
||||||
## 63 - MENU DE OPCIONES
|
## 63 - MENU DE OPCIONES
|
||||||
CONTROLES DEL JUGADOR 2
|
CONTROLES DEL JUGADOR 2
|
||||||
|
|
||||||
## 64 -
|
## 64 -
|
||||||
|
-
|
||||||
|
|
||||||
## 65 -
|
## 65 -
|
||||||
|
-
|
||||||
|
|
||||||
## 66 - MENU DE OPCIONES
|
## 66 - MENU DE OPCIONES
|
||||||
FACIL
|
FACIL
|
||||||
|
|
||||||
## 67 - MENU DE OPCIONES
|
## 67 - MENU DE OPCIONES
|
||||||
NORMAL
|
NORMAL
|
||||||
|
|
||||||
## 68 - MENU DE OPCIONES
|
## 68 - MENU DE OPCIONES
|
||||||
DIFICIL
|
DIFICIL
|
||||||
|
|
||||||
## 69 - MENU DE OPCIONES
|
## 69 - MENU DE OPCIONES
|
||||||
TECLADO
|
TECLADO
|
||||||
|
|
||||||
## 70 - MENU DE OPCIONES
|
## 70 - MENU DE OPCIONES
|
||||||
MANDO
|
MANDO
|
||||||
|
|
||||||
## 71 - MENU DE OPCIONES
|
## 71 - MENU DE OPCIONES
|
||||||
LINEAL
|
LINEAL
|
||||||
|
|
||||||
## 72 - MENU DE OPCIONES
|
## 72 - MENU DE OPCIONES
|
||||||
NEAREST
|
NEAREST
|
||||||
|
|
||||||
## 73 - MENU DE OPCIONES
|
## 73 - MENU DE OPCIONES
|
||||||
ACTIVADA
|
ACTIVADA
|
||||||
|
|
||||||
## 74 - MENU DE OPCIONES
|
## 74 - MENU DE OPCIONES
|
||||||
DESACTIVADA
|
DESACTIVADA
|
||||||
|
|
||||||
## 75 - JUEGO
|
## 75 - JUEGO
|
||||||
Adelante!
|
Adelante!
|
||||||
|
|
||||||
## 76 - JUEGO
|
## 76 - JUEGO
|
||||||
1.000.000 de puntos!
|
1.000.000 de puntos!
|
||||||
|
|
||||||
## 77 - PANTALLA DE GAME OVER
|
## 77 - PANTALLA DE GAME OVER
|
||||||
PUNTUACION J1:
|
PUNTUACION J1:
|
||||||
|
|
||||||
## 78 - PANTALLA DE GAME OVER
|
## 78 - PANTALLA DE GAME OVER
|
||||||
PUNTUACION J2:
|
PUNTUACION J2:
|
||||||
|
|
||||||
## 79 - TEXTOS DEL JUEGO
|
## 79 - TEXTOS DEL JUEGO
|
||||||
Ultima fase!
|
Ultima fase!
|
||||||
@@ -1,22 +1,21 @@
|
|||||||
font_png=smb2.png
|
font_png=smb2.png
|
||||||
font_txt=smb2.txt
|
font_txt=smb2.txt
|
||||||
|
|
||||||
sound_cancel=menu_cancel.wav
|
|
||||||
sound_accept=menu_select.wav
|
|
||||||
sound_move=menu_move.wav
|
sound_move=menu_move.wav
|
||||||
|
sound_accept=menu_select.wav
|
||||||
|
|
||||||
name=GAME OVER
|
name=GAME OVER
|
||||||
x=0
|
x=0
|
||||||
y=112
|
y=120
|
||||||
backgroundType=0
|
backgroundType=0
|
||||||
backgroundColor=0,0,0,255
|
backgroundColor=128,64,0,0
|
||||||
|
|
||||||
areElementsCenteredOnX=true
|
areElementsCenteredOnX=true
|
||||||
isCenteredOnX=true
|
isCenteredOnX=true
|
||||||
centerX=128
|
centerX=199
|
||||||
|
|
||||||
selector_color=84,110,122,0
|
selector_color=255,122,0,255
|
||||||
selector_text_color=255,122,0
|
selector_text_color=255,255,235
|
||||||
|
|
||||||
defaultActionWhenCancel=1
|
defaultActionWhenCancel=1
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
font_png=smb2.png
|
font_png=smb2.png
|
||||||
font_txt=smb2.txt
|
font_txt=smb2.txt
|
||||||
|
|
||||||
sound_cancel=menu_cancel.wav
|
|
||||||
sound_accept=menu_select.wav
|
|
||||||
sound_move=menu_move.wav
|
sound_move=menu_move.wav
|
||||||
|
sound_accept=menu_select.wav
|
||||||
|
|
||||||
name=OPTIONS
|
name=OPTIONS
|
||||||
x=0
|
x=0
|
||||||
@@ -20,7 +19,7 @@ isCenteredOnY=true
|
|||||||
centerY=96
|
centerY=96
|
||||||
|
|
||||||
selector_color=229,28,35,255
|
selector_color=229,28,35,255
|
||||||
selector_text_color=255,180,0
|
selector_text_color=255,241,118
|
||||||
|
|
||||||
defaultActionWhenCancel=13
|
defaultActionWhenCancel=13
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,12 @@
|
|||||||
font_png=smb2.png
|
font_png=smb2.png
|
||||||
font_txt=smb2.txt
|
font_txt=smb2.txt
|
||||||
|
|
||||||
sound_cancel=menu_cancel.wav
|
|
||||||
sound_accept=menu_select.wav
|
|
||||||
sound_move=menu_move.wav
|
sound_move=menu_move.wav
|
||||||
|
sound_accept=menu_select.wav
|
||||||
|
|
||||||
name=PAUSE
|
name=PAUSE
|
||||||
x=0
|
x=0
|
||||||
y=96
|
y=80
|
||||||
backgroundType=1
|
backgroundType=1
|
||||||
backgroundColor=41,57,65,240
|
backgroundColor=41,57,65,240
|
||||||
|
|
||||||
@@ -18,13 +17,19 @@ centerX=128
|
|||||||
selector_color=255,122,0,255
|
selector_color=255,122,0,255
|
||||||
selector_text_color=255,255,255
|
selector_text_color=255,255,255
|
||||||
|
|
||||||
defaultActionWhenCancel=0
|
defaultActionWhenCancel=1
|
||||||
|
|
||||||
[item]
|
[item]
|
||||||
text=SI
|
text=PAUSE MENU
|
||||||
|
hPaddingDown=7
|
||||||
|
selectable=false
|
||||||
|
[/item]
|
||||||
|
|
||||||
|
[item]
|
||||||
|
text=CONTINUE
|
||||||
hPaddingDown=2
|
hPaddingDown=2
|
||||||
[/item]
|
[/item]
|
||||||
|
|
||||||
[item]
|
[item]
|
||||||
text=NO
|
text=LEAVE GAME
|
||||||
[/item]
|
[/item]
|
||||||
40
data/menu/player_select.men
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
font_png=smb2.png
|
||||||
|
font_txt=smb2.txt
|
||||||
|
|
||||||
|
sound_move=menu_move.wav
|
||||||
|
sound_accept=menu_select.wav
|
||||||
|
|
||||||
|
name=PLAYER_SELECT
|
||||||
|
x=0
|
||||||
|
y=116
|
||||||
|
backgroundType=0
|
||||||
|
backgroundColor=48,48,64,192
|
||||||
|
|
||||||
|
areElementsCenteredOnX=true
|
||||||
|
isCenteredOnX=true
|
||||||
|
centerX=128
|
||||||
|
|
||||||
|
selector_color=229,28,35,0
|
||||||
|
selector_text_color=255,180,0
|
||||||
|
|
||||||
|
defaultActionWhenCancel=3
|
||||||
|
|
||||||
|
[item]
|
||||||
|
text=SELECT PLAYER
|
||||||
|
hPaddingDown=7
|
||||||
|
selectable=false
|
||||||
|
[/item]
|
||||||
|
|
||||||
|
[item]
|
||||||
|
text=BAL1
|
||||||
|
hPaddingDown=2
|
||||||
|
[/item]
|
||||||
|
|
||||||
|
[item]
|
||||||
|
text=AROUNDER
|
||||||
|
hPaddingDown=7
|
||||||
|
[/item]
|
||||||
|
|
||||||
|
[item]
|
||||||
|
text=BACK
|
||||||
|
[/item]
|
||||||
@@ -1,9 +1,8 @@
|
|||||||
font_png=smb2.png
|
font_png=smb2.png
|
||||||
font_txt=smb2.txt
|
font_txt=smb2.txt
|
||||||
|
|
||||||
sound_cancel=menu_cancel.wav
|
|
||||||
sound_accept=menu_select.wav
|
|
||||||
sound_move=menu_move.wav
|
sound_move=menu_move.wav
|
||||||
|
sound_accept=menu_select.wav
|
||||||
|
|
||||||
name=TITLE
|
name=TITLE
|
||||||
x=0
|
x=0
|
||||||
|
|||||||
42
release/Info.plist
Normal 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
BIN
release/coffee_crisis.icns
Normal 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();
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -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
|
||||||
@@ -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;
|
||||||
@@ -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);
|
||||||
@@ -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()
|
||||||
{
|
{
|
||||||
@@ -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();
|
||||||
|
|
||||||
@@ -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)
|
||||||
{
|
{
|
||||||
|
// Establece el ancho
|
||||||
|
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();
|
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();
|
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
|
||||||
|
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);
|
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;
|
||||||
|
if (value != 0)
|
||||||
|
{
|
||||||
centerX = value;
|
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -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
|
||||||
@@ -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, ¢er, 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)
|
||||||
{
|
{
|
||||||
|
if (value < 1)
|
||||||
|
{
|
||||||
|
rotateSpeed = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
rotateSpeed = value;
|
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()
|
||||||
{
|
{
|
||||||
@@ -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();
|
||||||
|
|
||||||
@@ -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);
|
||||||
@@ -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()
|
||||||
{
|
{
|
||||||
@@ -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();
|
||||||
@@ -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)
|
||||||
{
|
{
|
||||||
@@ -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);
|
||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -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
|
||||||
@@ -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);
|
||||||
}
|
}
|
||||||
@@ -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
|
||||||
|
|
||||||
|
// Variables
|
||||||
int width; // Ancho de la imagen
|
int width; // Ancho de la imagen
|
||||||
int height; // Alto de la imagen
|
int height; // Alto de la imagen
|
||||||
std::string path; // Ruta de la imagen de la textura
|
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);
|
||||||
@@ -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
|
||||||
@@ -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()
|
||||||
{
|
{
|
||||||
@@ -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();
|
||||||
|
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
3405
source/game.cpp
308
source/game.h
@@ -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();
|
||||||
|
|||||||
@@ -3,112 +3,109 @@
|
|||||||
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;
|
|
||||||
mManualQuit = false;
|
|
||||||
mCounter = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Bucle para la pantalla de instrucciones
|
|
||||||
void Instructions::run(Uint8 mode)
|
|
||||||
{
|
|
||||||
init();
|
|
||||||
|
|
||||||
while (mSection.name == SELF)
|
|
||||||
{
|
|
||||||
// Comprueba los eventos que hay en la cola
|
|
||||||
while (SDL_PollEvent(mEventHandler) != 0)
|
|
||||||
{
|
|
||||||
// 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
|
// Actualiza las variables
|
||||||
if (SDL_GetTicks() - mTicks > mTicksSpeed)
|
if (SDL_GetTicks() - ticks > ticksSpeed)
|
||||||
{
|
{
|
||||||
// Actualiza el contador de ticks
|
// Actualiza el contador de ticks
|
||||||
mTicks = SDL_GetTicks();
|
ticks = SDL_GetTicks();
|
||||||
|
|
||||||
if (mode == INSTRUCTIONS_MODE_AUTO)
|
if (mode == m_auto)
|
||||||
{ // Modo automático
|
{ // Modo automático
|
||||||
mCounter++;
|
counter++;
|
||||||
|
|
||||||
if (mCounter == INSTRUCTIONS_COUNTER)
|
if (counter == counterEnd)
|
||||||
{
|
{
|
||||||
mSection.name = PROG_SECTION_TITLE;
|
section.name = PROG_SECTION_TITLE;
|
||||||
mSection.subsection = TITLE_SECTION_1;
|
section.subsection = TITLE_SECTION_1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ // Modo manual
|
{ // Modo manual
|
||||||
++mCounter %= 60000;
|
++counter %= 60000;
|
||||||
|
|
||||||
if (mManualQuit)
|
if (manualQuit)
|
||||||
{
|
{
|
||||||
mSection.name = PROG_SECTION_TITLE;
|
section.name = PROG_SECTION_TITLE;
|
||||||
mSection.subsection = TITLE_SECTION_3;
|
section.subsection = TITLE_SECTION_3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pinta en pantalla
|
||||||
|
void Instructions::render()
|
||||||
|
{
|
||||||
// Pinta en pantalla
|
// Pinta en pantalla
|
||||||
SDL_Rect window = {0, 0, GAME_WIDTH, GAME_HEIGHT};
|
SDL_Rect window = {0, 0, GAME_WIDTH, GAME_HEIGHT};
|
||||||
SDL_Rect srcRect = {0, 0, 16, 16};
|
SDL_Rect srcRect = {0, 0, 16, 16};
|
||||||
@@ -122,77 +119,77 @@ void Instructions::run(Uint8 mode)
|
|||||||
const SDL_Rect destRect5 = {60, 88 + (16 * 4), 16, 16}; // Coffee
|
const SDL_Rect destRect5 = {60, 88 + (16 * 4), 16, 16}; // Coffee
|
||||||
|
|
||||||
// Pinta en el backbuffer el texto y los sprites
|
// Pinta en el backbuffer el texto y los sprites
|
||||||
SDL_SetRenderTarget(mRenderer, mBackbuffer);
|
SDL_SetRenderTarget(renderer, backbuffer);
|
||||||
SDL_SetRenderDrawColor(mRenderer, bgColor.r, bgColor.g, bgColor.b, 255);
|
SDL_SetRenderDrawColor(renderer, bgColor.r, bgColor.g, bgColor.b, 255);
|
||||||
SDL_RenderClear(mRenderer);
|
SDL_RenderClear(renderer);
|
||||||
|
|
||||||
// Escribe el texto
|
// Escribe el texto
|
||||||
mText->writeDX(TXT_CENTER | TXT_COLOR | TXT_SHADOW, SCREEN_CENTER_X, 8, mLang->getText(11), 1, orangeColor, 1, shdwTxtColor);
|
text->writeDX(TXT_CENTER | TXT_COLOR | TXT_SHADOW, SCREEN_CENTER_X, 8, lang->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);
|
text->writeDX(TXT_CENTER | TXT_COLOR | TXT_SHADOW, SCREEN_CENTER_X, 24, lang->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);
|
text->writeDX(TXT_CENTER | TXT_COLOR | TXT_SHADOW, SCREEN_CENTER_X, 34, lang->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);
|
text->writeDX(TXT_CENTER | TXT_COLOR | TXT_SHADOW, SCREEN_CENTER_X, 48, lang->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);
|
text->writeDX(TXT_CENTER | TXT_COLOR | TXT_SHADOW, SCREEN_CENTER_X, 58, lang->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);
|
text->writeDX(TXT_CENTER | TXT_COLOR | TXT_SHADOW, SCREEN_CENTER_X, 75, lang->getText(16), 1, orangeColor, 1, shdwTxtColor);
|
||||||
|
|
||||||
mText->writeShadowed(84, 92, mLang->getText(17), shdwTxtColor);
|
text->writeShadowed(84, 92, lang->getText(17), shdwTxtColor);
|
||||||
mText->writeShadowed(84, 108, mLang->getText(18), shdwTxtColor);
|
text->writeShadowed(84, 108, lang->getText(18), shdwTxtColor);
|
||||||
mText->writeShadowed(84, 124, mLang->getText(19), shdwTxtColor);
|
text->writeShadowed(84, 124, lang->getText(19), shdwTxtColor);
|
||||||
mText->writeShadowed(84, 140, mLang->getText(20), shdwTxtColor);
|
text->writeShadowed(84, 140, lang->getText(20), shdwTxtColor);
|
||||||
mText->writeShadowed(84, 156, mLang->getText(21), shdwTxtColor);
|
text->writeShadowed(84, 156, lang->getText(21), shdwTxtColor);
|
||||||
|
|
||||||
if ((mode == INSTRUCTIONS_MODE_MANUAL) && (mCounter % 50 > 14))
|
if ((mode == m_manual) && (counter % 50 > 14))
|
||||||
{
|
{
|
||||||
mText->writeDX(TXT_CENTER | TXT_COLOR | TXT_SHADOW, SCREEN_CENTER_X, GAME_HEIGHT - 12, mLang->getText(22), 1, orangeColor, 1, shdwTxtColor);
|
text->writeDX(TXT_CENTER | TXT_COLOR | TXT_SHADOW, SCREEN_CENTER_X, GAME_HEIGHT - 12, lang->getText(22), 1, orangeColor, 1, shdwTxtColor);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Disquito
|
// Disquito
|
||||||
mSprite->setPos(destRect1);
|
sprite->setTexture(itemTextures.at(0));
|
||||||
srcRect.x = 0;
|
sprite->setPos(destRect1);
|
||||||
srcRect.y = 16 * (((mCounter + 12) / 36) % 2);
|
srcRect.y = 16 * (((counter + 12) / 36) % 2);
|
||||||
mSprite->setSpriteClip(srcRect);
|
sprite->setSpriteClip(srcRect);
|
||||||
mSprite->render();
|
sprite->render();
|
||||||
|
|
||||||
// Gavineixon
|
// Gavineixon
|
||||||
mSprite->setPos(destRect2);
|
sprite->setTexture(itemTextures.at(1));
|
||||||
srcRect.x += srcRect.w;
|
sprite->setPos(destRect2);
|
||||||
srcRect.y = 16 * (((mCounter + 9) / 36) % 2);
|
srcRect.y = 16 * (((counter + 9) / 36) % 2);
|
||||||
mSprite->setSpriteClip(srcRect);
|
sprite->setSpriteClip(srcRect);
|
||||||
mSprite->render();
|
sprite->render();
|
||||||
|
|
||||||
// Pacmar
|
// Pacmar
|
||||||
mSprite->setPos(destRect3);
|
sprite->setTexture(itemTextures.at(2));
|
||||||
srcRect.x += srcRect.w;
|
sprite->setPos(destRect3);
|
||||||
srcRect.y = 16 * (((mCounter + 6) / 36) % 2);
|
srcRect.y = 16 * (((counter + 6) / 36) % 2);
|
||||||
mSprite->setSpriteClip(srcRect);
|
sprite->setSpriteClip(srcRect);
|
||||||
mSprite->render();
|
sprite->render();
|
||||||
|
|
||||||
// Time Stopper
|
// Time Stopper
|
||||||
mSprite->setPos(destRect4);
|
sprite->setTexture(itemTextures.at(3));
|
||||||
srcRect.x += srcRect.w;
|
sprite->setPos(destRect4);
|
||||||
srcRect.y = 16 * (((mCounter + 3) / 36) % 2);
|
srcRect.y = 16 * (((counter + 3) / 36) % 2);
|
||||||
mSprite->setSpriteClip(srcRect);
|
sprite->setSpriteClip(srcRect);
|
||||||
mSprite->render();
|
sprite->render();
|
||||||
|
|
||||||
// Coffee
|
// Coffee
|
||||||
mSprite->setPos(destRect5);
|
sprite->setTexture(itemTextures.at(4));
|
||||||
srcRect.x += (srcRect.w * 2); // Se salta el icono del TNT
|
sprite->setPos(destRect5);
|
||||||
srcRect.y = 16 * (((mCounter + 0) / 36) % 2);
|
srcRect.y = 16 * (((counter + 0) / 36) % 2);
|
||||||
mSprite->setSpriteClip(srcRect);
|
sprite->setSpriteClip(srcRect);
|
||||||
mSprite->render();
|
sprite->render();
|
||||||
|
|
||||||
// Cambia el destino de renderizado
|
// Cambia el destino de renderizado
|
||||||
SDL_SetRenderTarget(mRenderer, nullptr);
|
SDL_SetRenderTarget(renderer, nullptr);
|
||||||
|
|
||||||
// Prepara para empezar a dibujar en la textura de juego
|
// Prepara para empezar a dibujar en la textura de juego
|
||||||
mScreen->start();
|
screen->start();
|
||||||
|
|
||||||
// Limpia la pantalla
|
// Limpia la pantalla
|
||||||
mScreen->clean(bgColor);
|
screen->clean(bgColor);
|
||||||
|
|
||||||
// Establece la ventana del backbuffer
|
// Establece la ventana del backbuffer
|
||||||
if (mode == INSTRUCTIONS_MODE_AUTO)
|
if (mode == m_auto)
|
||||||
{
|
{
|
||||||
window.y = std::max(8, GAME_HEIGHT - mCounter + 100);
|
window.y = std::max(8, GAME_HEIGHT - counter + 100);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -200,9 +197,54 @@ void Instructions::run(Uint8 mode)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Copia el backbuffer al renderizador
|
// Copia el backbuffer al renderizador
|
||||||
SDL_RenderCopy(mRenderer, mBackbuffer, nullptr, &window);
|
SDL_RenderCopy(renderer, backbuffer, nullptr, &window);
|
||||||
|
|
||||||
// Vuelca el contenido del renderizador en pantalla
|
// Vuelca el contenido del renderizador en pantalla
|
||||||
mScreen->blit();
|
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
|
||||||
|
section_t Instructions::run(mode_e mode)
|
||||||
|
{
|
||||||
|
this->mode = mode;
|
||||||
|
|
||||||
|
while (section.name == SELF)
|
||||||
|
{
|
||||||
|
update();
|
||||||
|
render();
|
||||||
|
}
|
||||||
|
|
||||||
|
return section;
|
||||||
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||