From 55d5957ff08b7b36dab49654c133a5d4c8e03da4 Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Wed, 23 Jul 2025 23:03:17 +0200 Subject: [PATCH] estandaritzats els globos a 0, 1, 2 i 3 (en lloc del mix que havia antes amb altres coses a 1, 2, 3 i 4) balloon: passant const i enum a la part publica --- data/config/balloon_formations.txt | 438 +++++++++--------- .../balloon/{balloon4.ani => balloon0.ani} | 4 +- data/gfx/balloon/balloon0.png | Bin 0 -> 2072 bytes data/gfx/balloon/balloon1.png | Bin 2072 -> 3909 bytes data/gfx/balloon/balloon2.png | Bin 3909 -> 7169 bytes data/gfx/balloon/balloon3.png | Bin 7169 -> 12516 bytes data/gfx/balloon/balloon4.png | Bin 12516 -> 0 bytes .../{explosion4.ani => explosion0.ani} | 4 +- data/gfx/balloon/explosion0.png | Bin 0 -> 760 bytes data/gfx/balloon/explosion1.png | Bin 760 -> 1202 bytes data/gfx/balloon/explosion2.png | Bin 1202 -> 2085 bytes data/gfx/balloon/explosion3.ani | 4 +- data/gfx/balloon/explosion3.png | Bin 2085 -> 4222 bytes data/gfx/balloon/explosion4.png | Bin 4222 -> 0 bytes .../{bubble1.wav => balloon_bounce0.wav} | Bin .../{bubble2.wav => balloon_bounce1.wav} | Bin .../{bubble3.wav => balloon_bounce2.wav} | Bin .../{bubble4.wav => balloon_bounce3.wav} | Bin data/sound/{balloon1.wav => balloon_pop0.wav} | Bin data/sound/{balloon2.wav => balloon_pop1.wav} | Bin data/sound/{balloon3.wav => balloon_pop2.wav} | Bin data/sound/{balloon4.wav => balloon_pop3.wav} | Bin source/balloon.cpp | 52 +-- source/balloon.h | 92 ++-- source/balloon_formations.cpp | 28 +- source/balloon_formations.h | 2 +- source/balloon_manager.cpp | 62 +-- source/balloon_manager.h | 8 +- source/director.cpp | 24 +- 29 files changed, 359 insertions(+), 359 deletions(-) rename data/gfx/balloon/{balloon4.ani => balloon0.ani} (91%) create mode 100644 data/gfx/balloon/balloon0.png delete mode 100644 data/gfx/balloon/balloon4.png rename data/gfx/balloon/{explosion4.ani => explosion0.ani} (72%) create mode 100644 data/gfx/balloon/explosion0.png delete mode 100644 data/gfx/balloon/explosion4.png rename data/sound/{bubble1.wav => balloon_bounce0.wav} (100%) rename data/sound/{bubble2.wav => balloon_bounce1.wav} (100%) rename data/sound/{bubble3.wav => balloon_bounce2.wav} (100%) rename data/sound/{bubble4.wav => balloon_bounce3.wav} (100%) rename data/sound/{balloon1.wav => balloon_pop0.wav} (100%) rename data/sound/{balloon2.wav => balloon_pop1.wav} (100%) rename data/sound/{balloon3.wav => balloon_pop2.wav} (100%) rename data/sound/{balloon4.wav => balloon_pop3.wav} (100%) diff --git a/data/config/balloon_formations.txt b/data/config/balloon_formations.txt index f870303..f64a6b5 100644 --- a/data/config/balloon_formations.txt +++ b/data/config/balloon_formations.txt @@ -3,275 +3,275 @@ # Variables disponibles: # X1_0, X1_50, X1_100, X2_0, X2_100, X3_0, X3_100, X4_0, X4_100 # QUARTER1_X4, QUARTER3_X4, DEFAULT_POS_Y -# BALLOON_SIZE_0, BALLOON_SIZE_1, BALLOON_SIZE_2, BALLOON_SIZE_3 +# SIZE_0, SIZE_1, SIZE_2, SIZE_3 # RIGHT, LEFT formation: 0 -# Dos enemigos BALLOON4 uno a cada extremo -X4_0, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE4, 0 -X4_100, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE4, 0 +# Dos enemigos BALLOON3 uno a cada extremo +X4_0, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_3, 0 +X4_100, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_3, 0 formation: 1 -# Dos enemigos BALLOON4 uno a cada cuarto. Ambos van hacia el centro -QUARTER1_X4, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE4, 0 -QUARTER3_X4, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE4, 0 +# Dos enemigos BALLOON3 uno a cada cuarto. Ambos van hacia el centro +QUARTER1_X4, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_3, 0 +QUARTER3_X4, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_3, 0 formation: 2 -# Cuatro enemigos BALLOON2 uno detrás del otro. A la izquierda y hacia el centro -X2_0, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE2, 30 -X2_0, 1, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE2, 20 -X2_0, 2, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE2, 10 -X2_0, 3, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE2, 0 +# Cuatro enemigos BALLOON1 uno detrás del otro. A la izquierda y hacia el centro +X2_0, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_1, 30 +X2_0, 1, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_1, 20 +X2_0, 2, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_1, 10 +X2_0, 3, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_1, 0 formation: 3 -# Cuatro enemigos BALLOON2 uno detrás del otro. A la derecha y hacia el centro -X2_100, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE2, 30 -X2_100, -1, DEFAULT_POS_Y, LEFT, BALLOON, SIZE2, 20 -X2_100, -2, DEFAULT_POS_Y, LEFT, BALLOON, SIZE2, 10 -X2_100, -3, DEFAULT_POS_Y, LEFT, BALLOON, SIZE2, 0 +# Cuatro enemigos BALLOON1 uno detrás del otro. A la derecha y hacia el centro +X2_100, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_1, 30 +X2_100, -1, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_1, 20 +X2_100, -2, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_1, 10 +X2_100, -3, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_1, 0 formation: 4 -# Tres enemigos BALLOON3. 0, 25, 50. Hacia la derecha -X3_0, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 20 -X3_0, 2, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 10 -X3_0, 4, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 0 +# Tres enemigos BALLOON2. 0, 25, 50. Hacia la derecha +X3_0, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_2, 20 +X3_0, 2, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_2, 10 +X3_0, 4, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_2, 0 formation: 5 -# Tres enemigos BALLOON3. 50, 75, 100. Hacia la izquierda -X3_100, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 20 -X3_100, -2, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 10 -X3_100, -4, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 0 +# Tres enemigos BALLOON2. 50, 75, 100. Hacia la izquierda +X3_100, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_2, 20 +X3_100, -2, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_2, 10 +X3_100, -4, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_2, 0 formation: 6 -# Tres enemigos BALLOON3. 0, 0, 0. Hacia la derecha -X3_0, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 20 -X3_0, 1, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 10 -X3_0, 2, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 0 +# Tres enemigos BALLOON2. 0, 0, 0. Hacia la derecha +X3_0, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_2, 20 +X3_0, 1, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_2, 10 +X3_0, 2, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_2, 0 formation: 7 -# Tres enemigos BALLOON3. 100, 100, 100. Hacia la izquierda -X3_100, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 20 -X3_100, -1, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 10 -X3_100, -2, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 0 +# Tres enemigos BALLOON2. 100, 100, 100. Hacia la izquierda +X3_100, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_2, 20 +X3_100, -1, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_2, 10 +X3_100, -2, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_2, 0 formation: 8 -# Seis enemigos BALLOON1. 0, 0, 0, 0, 0, 0. Hacia la derecha -X1_0, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 50 -X1_0, 1, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 40 -X1_0, 2, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 30 -X1_0, 3, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 20 -X1_0, 4, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 10 -X1_0, 5, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 0 +# Seis enemigos BALLOON0. 0, 0, 0, 0, 0, 0. Hacia la derecha +X1_0, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 50 +X1_0, 1, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 40 +X1_0, 2, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 30 +X1_0, 3, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 20 +X1_0, 4, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 10 +X1_0, 5, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 0 formation: 9 -# Seis enemigos BALLOON1. 100, 100, 100, 100, 100, 100. Hacia la izquierda -X1_100, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 50 -X1_100, -1, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 40 -X1_100, -2, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 30 -X1_100, -3, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 20 -X1_100, -4, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 10 -X1_100, -5, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 0 +# Seis enemigos BALLOON0. 100, 100, 100, 100, 100, 100. Hacia la izquierda +X1_100, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 50 +X1_100, -1, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 40 +X1_100, -2, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 30 +X1_100, -3, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 20 +X1_100, -4, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 10 +X1_100, -5, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 0 formation: 10 -# Tres enemigos BALLOON4 seguidos desde la izquierda. Hacia la derecha -X4_0, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE4, 30 -X4_0, 1, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE4, 15 -X4_0, 2, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE4, 0 +# Tres enemigos BALLOON3 seguidos desde la izquierda. Hacia la derecha +X4_0, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_3, 30 +X4_0, 1, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_3, 15 +X4_0, 2, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_3, 0 formation: 11 -# Tres enemigos BALLOON4 seguidos desde la derecha. Hacia la izquierda -X4_100, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE4, 30 -X4_100, -1, DEFAULT_POS_Y, LEFT, BALLOON, SIZE4, 15 -X4_100, -2, DEFAULT_POS_Y, LEFT, BALLOON, SIZE4, 0 +# Tres enemigos BALLOON3 seguidos desde la derecha. Hacia la izquierda +X4_100, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_3, 30 +X4_100, -1, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_3, 15 +X4_100, -2, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_3, 0 formation: 12 -# Seis enemigos BALLOON2 uno detrás del otro. A la izquierda y hacia el centro -X2_0, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE2, 50 -X2_0, 1, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE2, 40 -X2_0, 2, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE2, 30 -X2_0, 3, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE2, 20 -X2_0, 4, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE2, 10 -X2_0, 5, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE2, 0 +# Seis enemigos BALLOON1 uno detrás del otro. A la izquierda y hacia el centro +X2_0, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_1, 50 +X2_0, 1, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_1, 40 +X2_0, 2, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_1, 30 +X2_0, 3, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_1, 20 +X2_0, 4, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_1, 10 +X2_0, 5, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_1, 0 formation: 13 -# Seis enemigos BALLOON2 uno detrás del otro. A la derecha y hacia el centro -X2_100, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE2, 50 -X2_100, -1, DEFAULT_POS_Y, LEFT, BALLOON, SIZE2, 40 -X2_100, -2, DEFAULT_POS_Y, LEFT, BALLOON, SIZE2, 30 -X2_100, -3, DEFAULT_POS_Y, LEFT, BALLOON, SIZE2, 20 -X2_100, -4, DEFAULT_POS_Y, LEFT, BALLOON, SIZE2, 10 -X2_100, -5, DEFAULT_POS_Y, LEFT, BALLOON, SIZE2, 0 +# Seis enemigos BALLOON1 uno detrás del otro. A la derecha y hacia el centro +X2_100, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_1, 50 +X2_100, -1, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_1, 40 +X2_100, -2, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_1, 30 +X2_100, -3, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_1, 20 +X2_100, -4, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_1, 10 +X2_100, -5, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_1, 0 formation: 14 -# Cinco enemigos BALLOON3. Hacia la derecha. Separados -X3_0, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 40 -X3_0, 2, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 30 -X3_0, 4, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 20 -X3_0, 6, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 10 -X3_0, 8, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 0 +# Cinco enemigos BALLOON2. Hacia la derecha. Separados +X3_0, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_2, 40 +X3_0, 2, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_2, 30 +X3_0, 4, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_2, 20 +X3_0, 6, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_2, 10 +X3_0, 8, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_2, 0 formation: 15 -# Cinco enemigos BALLOON3. Hacia la izquierda. Separados -X3_100, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 40 -X3_100, -2, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 30 -X3_100, -4, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 20 -X3_100, -6, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 10 -X3_100, -8, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 0 +# Cinco enemigos BALLOON2. Hacia la izquierda. Separados +X3_100, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_2, 40 +X3_100, -2, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_2, 30 +X3_100, -4, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_2, 20 +X3_100, -6, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_2, 10 +X3_100, -8, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_2, 0 formation: 16 -# Cinco enemigos BALLOON3. Hacia la derecha. Juntos -X3_0, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 40 -X3_0, 1, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 30 -X3_0, 2, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 20 -X3_0, 3, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 10 -X3_0, 4, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 0 +# Cinco enemigos BALLOON2. Hacia la derecha. Juntos +X3_0, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_2, 40 +X3_0, 1, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_2, 30 +X3_0, 2, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_2, 20 +X3_0, 3, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_2, 10 +X3_0, 4, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_2, 0 formation: 17 -# Cinco enemigos BALLOON3. Hacia la izquierda. Juntos -X3_100, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 40 -X3_100, -1, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 30 -X3_100, -2, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 20 -X3_100, -3, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 10 -X3_100, -4, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 0 +# Cinco enemigos BALLOON2. Hacia la izquierda. Juntos +X3_100, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_2, 40 +X3_100, -1, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_2, 30 +X3_100, -2, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_2, 20 +X3_100, -3, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_2, 10 +X3_100, -4, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_2, 0 formation: 18 -# Doce enemigos BALLOON1. Hacia la derecha. Juntos -X1_0, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 110 -X1_0, 1, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 100 -X1_0, 2, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 90 -X1_0, 3, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 80 -X1_0, 4, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 70 -X1_0, 5, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 60 -X1_0, 6, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 50 -X1_0, 7, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 40 -X1_0, 8, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 30 -X1_0, 9, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 20 -X1_0, 10, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 10 -X1_0, 11, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 0 +# Doce enemigos BALLOON0. Hacia la derecha. Juntos +X1_0, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 110 +X1_0, 1, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 100 +X1_0, 2, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 90 +X1_0, 3, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 80 +X1_0, 4, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 70 +X1_0, 5, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 60 +X1_0, 6, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 50 +X1_0, 7, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 40 +X1_0, 8, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 30 +X1_0, 9, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 20 +X1_0, 10, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 10 +X1_0, 11, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 0 formation: 19 -# Doce enemigos BALLOON1. Hacia la izquierda. Juntos -X1_100, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 110 -X1_100, -1, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 100 -X1_100, -2, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 90 -X1_100, -3, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 80 -X1_100, -4, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 70 -X1_100, -5, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 60 -X1_100, -6, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 50 -X1_100, -7, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 40 -X1_100, -8, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 30 -X1_100, -9, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 20 -X1_100, -10, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 10 -X1_100, -11, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 0 +# Doce enemigos BALLOON0. Hacia la izquierda. Juntos +X1_100, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 110 +X1_100, -1, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 100 +X1_100, -2, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 90 +X1_100, -3, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 80 +X1_100, -4, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 70 +X1_100, -5, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 60 +X1_100, -6, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 50 +X1_100, -7, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 40 +X1_100, -8, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 30 +X1_100, -9, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 20 +X1_100, -10, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 10 +X1_100, -11, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 0 formation: 20 -# Cuatro enemigos BALLOON4 seguidos desde la izquierda/derecha. Simétricos -X4_0, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE4, 0 -X4_0, 1, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE4, 0 -X4_100, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE4, 0 -X4_100, -1, DEFAULT_POS_Y, LEFT, BALLOON, SIZE4, 0 +# Cuatro enemigos BALLOON3 seguidos desde la izquierda/derecha. Simétricos +X4_0, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_3, 0 +X4_0, 1, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_3, 0 +X4_100, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_3, 0 +X4_100, -1, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_3, 0 formation: 21 -# Diez enemigos BALLOON2 uno detrás del otro. Izquierda/derecha. Simétricos -X2_0, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE2, 12 -X2_0, 1, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE2, 9 -X2_0, 2, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE2, 6 -X2_0, 3, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE2, 3 -X2_0, 4, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE2, 0 -X2_100, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE2, 12 -X2_100, -1, DEFAULT_POS_Y, LEFT, BALLOON, SIZE2, 9 -X2_100, -2, DEFAULT_POS_Y, LEFT, BALLOON, SIZE2, 6 -X2_100, -3, DEFAULT_POS_Y, LEFT, BALLOON, SIZE2, 3 -X2_100, -4, DEFAULT_POS_Y, LEFT, BALLOON, SIZE2, 0 +# Diez enemigos BALLOON1 uno detrás del otro. Izquierda/derecha. Simétricos +X2_0, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_1, 12 +X2_0, 1, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_1, 9 +X2_0, 2, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_1, 6 +X2_0, 3, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_1, 3 +X2_0, 4, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_1, 0 +X2_100, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_1, 12 +X2_100, -1, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_1, 9 +X2_100, -2, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_1, 6 +X2_100, -3, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_1, 3 +X2_100, -4, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_1, 0 formation: 22 -# Diez enemigos BALLOON3. Hacia la derecha/izquierda. Separados. Simétricos -X3_0, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 40 -X3_0, 2, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 30 -X3_0, 4, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 20 -X3_0, 6, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 10 -X3_0, 8, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 0 -X3_100, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 40 -X3_100, -2, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 30 -X3_100, -4, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 20 -X3_100, -6, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 10 -X3_100, -8, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 0 +# Diez enemigos BALLOON2. Hacia la derecha/izquierda. Separados. Simétricos +X3_0, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_2, 40 +X3_0, 2, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_2, 30 +X3_0, 4, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_2, 20 +X3_0, 6, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_2, 10 +X3_0, 8, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_2, 0 +X3_100, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_2, 40 +X3_100, -2, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_2, 30 +X3_100, -4, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_2, 20 +X3_100, -6, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_2, 10 +X3_100, -8, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_2, 0 formation: 23 -# Diez enemigos BALLOON3. Hacia la derecha. Juntos. Simétricos -X3_0, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 40 -X3_0, 1, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 30 -X3_0, 2, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 20 -X3_0, 3, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 10 -X3_0, 4, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE3, 0 -X3_100, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 40 -X3_100, -1, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 30 -X3_100, -2, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 20 -X3_100, -3, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 10 -X3_100, -4, DEFAULT_POS_Y, LEFT, BALLOON, SIZE3, 0 +# Diez enemigos BALLOON2. Hacia la derecha. Juntos. Simétricos +X3_0, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_2, 40 +X3_0, 1, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_2, 30 +X3_0, 2, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_2, 20 +X3_0, 3, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_2, 10 +X3_0, 4, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_2, 0 +X3_100, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_2, 40 +X3_100, -1, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_2, 30 +X3_100, -2, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_2, 20 +X3_100, -3, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_2, 10 +X3_100, -4, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_2, 0 formation: 24 -# Treinta enemigos BALLOON1. Del centro hacia los extremos. Juntos. Simétricos -X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 0 -X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 5 -X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 10 -X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 15 -X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 20 -X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 25 -X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 30 -X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 35 -X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 40 -X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 45 -X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 50 -X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 55 -X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 60 -X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 65 -X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 70 -X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 0 -X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 5 -X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 10 -X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 15 -X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 20 -X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 25 -X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 30 -X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 35 -X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 40 -X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 45 -X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 50 -X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 55 -X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 60 -X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 65 -X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 70 +# Treinta enemigos BALLOON0. Del centro hacia los extremos. Juntos. Simétricos +X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 0 +X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 5 +X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 10 +X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 15 +X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 20 +X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 25 +X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 30 +X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 35 +X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 40 +X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 45 +X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 50 +X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 55 +X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 60 +X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 65 +X1_50, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 70 +X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 0 +X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 5 +X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 10 +X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 15 +X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 20 +X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 25 +X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 30 +X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 35 +X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 40 +X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 45 +X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 50 +X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 55 +X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 60 +X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 65 +X1_50, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 70 formation: 25 -# Treinta enemigos BALLOON1. Del centro hacia adentro. Juntos. Simétricos -X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 70 -X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 65 -X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 60 -X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 55 -X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 50 -X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 45 -X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 40 -X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 35 -X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 30 -X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 25 -X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 20 -X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 15 -X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 10 -X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 5 -X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE1, 0 -X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 70 -X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 65 -X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 60 -X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 55 -X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 50 -X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 45 -X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 40 -X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 35 -X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 30 -X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 25 -X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 20 -X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 15 -X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 10 -X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 5 -X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE1, 0 +# Treinta enemigos BALLOON0. Del centro hacia adentro. Juntos. Simétricos +X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 70 +X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 65 +X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 60 +X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 55 +X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 50 +X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 45 +X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 40 +X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 35 +X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 30 +X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 25 +X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 20 +X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 15 +X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 10 +X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 5 +X1_50 + 20, 0, DEFAULT_POS_Y, LEFT, BALLOON, SIZE_0, 0 +X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 70 +X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 65 +X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 60 +X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 55 +X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 50 +X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 45 +X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 40 +X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 35 +X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 30 +X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 25 +X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 20 +X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 15 +X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 10 +X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 5 +X1_50 - 20, 0, DEFAULT_POS_Y, RIGHT, BALLOON, SIZE_0, 0 diff --git a/data/gfx/balloon/balloon4.ani b/data/gfx/balloon/balloon0.ani similarity index 91% rename from data/gfx/balloon/balloon4.ani rename to data/gfx/balloon/balloon0.ani index 32220b3..aa701fe 100644 --- a/data/gfx/balloon/balloon4.ani +++ b/data/gfx/balloon/balloon0.ani @@ -1,5 +1,5 @@ -frame_width=48 -frame_height=48 +frame_width=10 +frame_height=10 [animation] name=orange diff --git a/data/gfx/balloon/balloon0.png b/data/gfx/balloon/balloon0.png new file mode 100644 index 0000000000000000000000000000000000000000..d17d16a7935841715412d5d1d6e604be2e635bd9 GIT binary patch literal 2072 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 literal 7169 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 diff --git a/data/gfx/balloon/explosion4.ani b/data/gfx/balloon/explosion0.ani similarity index 72% rename from data/gfx/balloon/explosion4.ani rename to data/gfx/balloon/explosion0.ani index 872dfc4..7206e11 100644 --- a/data/gfx/balloon/explosion4.ani +++ b/data/gfx/balloon/explosion0.ani @@ -1,5 +1,5 @@ -frame_width=48 -frame_height=48 +frame_width=10 +frame_height=10 [animation] name=default diff --git a/data/gfx/balloon/explosion0.png b/data/gfx/balloon/explosion0.png new file mode 100644 index 0000000000000000000000000000000000000000..30871f027edcff6304a0a25c6735848801780f2b GIT binary patch literal 760 zcmVPx%vPnciR9J=WR!wVDK@>eVA4Zy}X>AFOiG;Qq8=;8Z=pqkSqHDpG8wLMC|AAfm z7X;IV2(A^e3tz<+M63^KNli;iQd3Aj(oi23Q^!T~hRM9ow$B!%2f~}&d*;qPZ|<8r z#8@2y7&<|GKz;BNZy(-w<=lSu(!{f~c}1xGuKLCFr9f~dtsldW7X zn{1g(MmC8rm>g`FUfu!#Ji2}tS~Y}`RLhd5WCx+7`=Rf2AsOod0F1qU!HEG#V#TLL z0%?5vy(nsIk5GlY^?28oM(TXWD9zX{*7G zb&VaCMe_gc-IjOSO{6PNTZ$kU-N4mE)M*}ROA*wXJIHk1;LZovenVS|unnpD03aSt z;nKM{P0WTF09=T%4o(0ti}eH5g*iumqPvCNpFM2+<7YbxPjobXk(Kosl=T_ZT1}dm z4FjikO=1ny^_cC84!GofU^Lh3c=hy&C$1#Aqn!7PcsK!OBUeaUl3wS(wi?Xpa0O0#p1MzT- zv^B!>F9plEi3riM{s)POIZbM}B?fesws2Ad0R79hB(@bhyI&xo4|CD7Sit{2d|aU8 zx_BHH4tzNH0jo<4V11DhxmJF!2pPeYbU*6)FZ6Yt1^|q|``{@-yTxU$%(D{?29BnbKJg@Nt9I9mj!cA-Vd^Z)o6``d20XUWo z*^KSrMTBd-!<4azkUQnTAn9ob27vq$Y^#mvQkMS3d=nx^WQq1N60000Px(Y)M2xRA_Lhe14 z^w?962|e|0NRu86Jr|Nwor`ZNIs_buae^r;g7MmH;%sc`^&rjcj5N~D{!3iY4~(@l z^Q77D&3hv~Eiu0U(FXtk<`+<4WT8w$Vp}pEjySLozhnlufF}Mh;YEKY5>&2!{;BqP zYv<`mliJ(c(>~Yh^^xq)EA3`W9^ZL%4?yAo6AvH$t9@QuyJU5dwD_XU)(L6xMVpNi z?%%jBkJmRgbNg(@jAL)&_E+Bn0Q}=fG%=I~>?)0twD_V;ae{Udfg*l7lE}shiuf6O zTPKLQnFLe&huI6^f_^*|zjKDhYNXDqFbfEK!BQpu|1#9aIY?m=Kc|nO2vs1yY%@iN zpg?@tW{Qp+xZp4E8Ug}<>Qad6Qiz&I9Q2uk9^qM+DCsX0KW83B9JRAZ{87fdV+zIT zoe=d-$T&u%l;AL4u17B`Qk$UXuxYG`cC#fTN6hDfOSs_1m#r#^KNA7}SMpNMm1_&Q za%}+s;O}}vZPqt7;dd%h{KhAJ*>}{dz~6T>=TQ+GZO~`lKZ)qz4I}6?0YJ?oZY(>f z&JFyZy9u8M{`~b9eDmYaqnc&Hefz;{08&ij9-um7Ye(5McRl>}6Jh(oYxuh!V?HFz zhjM&TBwSu}SlN70^Ww{{%)$X%J5NQ9Cm1$SF(!|Cy)JURv=`#b$%E=z|)|4xYV==;#dWA4m9bkw|rbmV#_< zH7##PDd*T0X|w<2@u>E>8|C`OrdY9s8)>pq2>`vKkO1Hy3MuF_!Hobng2A3s=b-K> zQ}>kV=xpHd=O>JtfB!DWxk#*v6rhCb=JCOOZv zDSQ%MnIriq-EOuBu$#PE%2kR|R4l{|P3LfpAzJ^c)$-E6_{ zOrCB`Od>u2ZZ}&rDU!v}Aes&jE^7O;B(JrG`EEkKT7?<{9e$$>+WIpfZwdswIt7Ao;I z-=8O5nIo=wB=-SZY95upE3(9R7vvvD+6xIAQaSS6-EEYVl$4Z|l$2=v2luzu%z3nj QL;wH)07*qoM6N<$g6thSssI20 literal 760 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 QL;wH)07*qoM6N<$g6thSssI20 diff --git a/data/gfx/balloon/explosion3.ani b/data/gfx/balloon/explosion3.ani index feb66e3..872dfc4 100644 --- a/data/gfx/balloon/explosion3.ani +++ b/data/gfx/balloon/explosion3.ani @@ -1,5 +1,5 @@ -frame_width=26 -frame_height=26 +frame_width=48 +frame_height=48 [animation] name=default diff --git a/data/gfx/balloon/explosion3.png b/data/gfx/balloon/explosion3.png index 552a6686af9b93cc5fa3c9f05614f165033fa067..06d1653efc903fb6c658bf27cbf6264d2a631a70 100644 GIT binary patch literal 4222 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 literal 2085 zcmV+=2-^3FP)+&00001b5ch_0Itp) z=>Px+-$_J4RCt{2oy%(*M;yn$vyv=7L?qEP3!$}5eCW-@w_Mzu;&W)h5EKi1Ec8@z z?WxCvUit?Z9Ge6~A-7WZl;jfV!DerP*x05GR@@@l_@zqPUk|HY&(6LdvMqZ)Ahh0{ zou78+yWiQJ$C|+fqCLkdw{#rL_6PesAi3naqJ&5jB(|_=Boezb3CD#_}OVM3zs#6tnkaNnHlm0v$v#(v^Lk2m6?Fh{E_mW&abhE3n|R!T zvBWABKr-RDI9;IXzy4}MOz#E*fH&_qV*j?St*y{;#>dBF$Kmr{ou6gmIWedX&rccw`JxZrM9usRi`RwvPUj1QkqLB1tt4S3q&^RYUD3##vg=p*mH;#*q$q{N|Ai zpl#-%ZRRnvuws28LICj3f5eVE#%HfdnEawmg&`ed!wSZR4H-?|P*BYIA5NH_hAYdj zKmU|UK7tq=XZ+rSLBHMk>NhaX%)$zm)^parM;(xMpj&As?=-FDi4lcHZ?!ObtA*A1 zS=*-vgt~A74Df36?GHcpB3ql=m}0y4U=Z*AI1So|nPQ0HM3&gP_ieVkwZF2gSm)PH+rI)n{RVn-d&ej6xe!M2Z$`?)8tpZgxmWfGjcXwz&Cw#c3QWOwAivoOXz52RcpOP@rw*0a)U4EElt2`=<;51;rOz6c_-iHOY$G zXc2Voi1*vZcaYcs7r{+W-%k9b>eIjK%A5BaW?P(>7*Y}2`1rWl7MErmE1$y?qpB$k z8LN()48wVH#EEl%X2#k1lp{57{7&tFpynBCvRB6q#!!i?P(y0&UJePtn*f@XIQOnT)*a({`}!1eE2(StL^~9 zwIYhnildg>Rvf;QygF6EXh~-PFpvR;bH*-DetQ`@2;U7Sw#T`2$lK1JUxz)9Yn7VB zd#svr{fBJfzpHuvgE##vljc6)eLXeok ziVZjuoWtefh%RbXdR6dptGQP%@ciK;07iAoi7wSRF7$N3L==IEu%NMUVMXU5HtWEz z`|u>MQ5gLiCoZDkfCvLHg9cv$QfLx8jA+jih2Pk?sQCg?Y!WA4Jq=0j0i@U@p4bE@ zh=g&UFxb)(?YYfwm0WXd%_1Qt(}ZcIwxyMG8YB{lL?V$$QYUeXG}n>KlC(gd7vgj` zv)@yk(3|8~x-qOStT3Y}t_z8VCvk<87*hypx!wKlU}j-O6avtDVPENav=>dF;6z6N z?BlG`#1xx}An3$GSe>6mt!~7q)w8xv^u@L1R4$6UL8u#klfsC*TQFr4nEa zVcz(dV@Ib}TQLJb<|t6WbKF!Y)N+RaU}R8dwR#3>x#LKaL=e@f3bfr005E`j$BD&t z9!^+p0`d}8Y_SCh`BLI5xLT873QF6|LoK)Q-S5kuCzcmqSgKPMY&Y80Y@)&t;hUE) ztZh6=s~~MRV=MHFcAk`~Q3Ak{T7HVkp~upa2~h&x42>>z*WG#5^rBs$F2_NcJtiSVS8JS za6)4ZQ|E=C?PdTNL!twkS`rDtWq+IFEv_vmbsop>>y`8LgQJP~deV>rHj*(u+-jS! z_`(UA1nUEJoszFMy)sK}{)JnCC3#ZqM**BSeuASD9W*hb(8P$sKO9)qUP^chDCGil zeVR^NB#Udyczn0j%U3G&HGU5b?6Uy?oFL4JwPNdh_u(Rzy^WT1mL-M)DS-{UPhLOA zv-@+Aq8BgO%6`Q{W{G`toMDHg6leuqgyBmyd%`=8Pw|8o;aMOPZ8V6 zBoc{4B9TZW5{X12kw_#Gi7$OMmI`qEo1}AliD54gkHw@{$Hd3GsPpzeO6GqQLr{-_1PBRAQCbLH5J7qX300a%3r#N_1VM_S1rS0n(gi6BQbI2ZQk71S zrW64Iks=mqq=*5ez1;7=@6PP*GrP01JI|Rj=Q+FaMus<;pqHTl05Iw5XqueIuJfJ> zraK>POq{mQ0|;kwQyr)s;aUR#xPq>xnpxm;a-ND8SO2B{7b~8FN!wqsfoFkEoh$PSZ9ZJAjelgH=}@`#Xe5N1$A zn=Hi#v}Nh~C{@kQ=giJd&wf);C8Q3_&E?IXs9yUG!@wCBOHWXa*Gj@h9zG!LPq4)z zO^o$_mvE78!!wb_G^t?K+v7*hg*upw=sHjo$(GoB6UmR%>lpy_E~>^R5=5dcso^9q z@#B@zFym1F!(FS1iBtqUx>%M#T%Ly5MkNx;p?cJkteq9Bek6{lNiavSZj73f_Gd=x z(gP;D0?#19I0H=-K{vWt=c{{>8j{6`2Dyv01Dg6q3M~j|J;($zd_j_!kPYB#7xTSNHqkmCwvS zFhfnJMflTWcI-tvE4rPvgM(g%y8e*;E#Aj1z7m^cavu-w^!U(ZD4nWSW%li@s$t7K zq}i7vu|(wbDJXv1vDYt?Q4MuGv&;Sf%y&CqyDNK~?`XfO%8`^zSL3?=vGfPmBO=}uwv_`-sXbM8&7`eG=0EcE4DDVjm)og=me zmF~p$YNsC-n&t@Y5LG{slXK)+4OhhH01Acj@M_rLha#>YD%pX@3dP%FO<+-eK<&F$ zx;Zjun<=_hea;8X?guPS+6kPJ%Ob0bvTQ8aqD83S(Wp2HIcJ8)9RNSZh9@7E268G} z^(PmJ5|7!?od$7<@+PGi$WQW!SZjNretUOoX6F*rdttesMz!v}7LCXl2aeO*8S-sc zELZ0-!$o!l9?vK}*?l9I@S8os!lAxJ<{t1JB>31oomC0r2 z@O8bV1PPY*uaTHVW7LV4Y67fvg14}Eo6ozraeb1l?_tTpB6%uPbU4fgU7|WMREE(i zQT>8raKsx-K+Xhb_fG$BlJUc$M8)~f>94o2+D0MonU|4sIJ@72{A)e|FFkUfOH4zI z>rMdH8b)?(_!Qo>I^jS|9VI6bX2rT#?8un0GV;3Su7n+W<|?fClD(aqYt$NxC|=DJ z_4;4Bqi!YXnm^hu0;nIUAjebhal-=DcN3BBRXU#85=rU8Shi*e>!mTaKvhw#gggpI zax%i)BHJLPwM4B!9BORkkZYQ$pC_Q$SqVcn*4D36%eAQ*tEl7Xq4<3eH5hLurfrwL z|769MOW=v?L)jP|>2f1pqaLkX3q2=0vj&5|5jgU~w=dSAnyz?Xhr&Xp>v7RBO*$yH z%bx{OEL~lnnVl~t)yGE*VS_7+a%84HXN0S!ZpWwVHeQKRFQ3%chtsJ2r(yK-Kkl*AtcyeGUCB=zj_8!e>x6p^>q~Tj*jb;^f5Ct^q z%lmz}qvaYrd#WtS88K~r!Bs+fwLv)CFWSjac*EMfj;`QY-1GjSyQLTMChm&0aq561 zzb>}MmqPihTIqZLV6e_ViE>mWAe|`D`H1TbkWXp1L$1~x<1a_N!&ys5C?LpfIqNsx zK{>patavCJ-nG&+QuTVt3`CFSYYTeMPYG%?B4WyHjRKBK;cJw~Q}H6&nA5{2?AHQ_ zV&%Fwn6sv=XO+lOE$swGpBhL^6l1-Y@X2Rax;xJnL`?LyHKi`}-cP|1# z)Mig(VG${qt2)})=}*IAtbBrD8x6u^Znraz=%P{;W$A!1H{?QleU2-{pUhykxhMQj zhRkMskIu)qIQn#K97A>2-#Gn;xXb#cT*>!O7tMa`gE^`z;&vqo-m?}@%K}Sfli~(1 z1PQ#URRm(c%`Q%Jb@lq}Xm=&mPGDALQv0+B+xwd6q*+I=N#Ik~SQvAuc0m$w{3F{_ zfsM^Lz_Fa6j}b8PK#OZ^a_!ikLsJcX`@136lm@W0xlpNce92GX3^h zinHv>8;y5prtg>Sfr39v_1ATuTWsPr6W0N>{X@QXwEgx%{oj*-(Mczp2H$a#OqrIY zRsQmh?yVn+y#jAuG|*jJh*WawV5b2TZdBBLdtyywROew@%H(a^M=isK$!s%t>7)!k z`otvUL}nlT-`@nSHdT&I3O%stm33p#B(XvA6ekJo*gGwF_c!u#iwb@6ZI_ht35@E> zmJEF1j`nJP#i8m`yI-kN0Rv;)*Cm2VKnr0zV`pxk5V?O=3-jpe&F9-5-C&NYFVkwe z-;gF)_6zc~@k3>`q7ZAn+S1oH9?+disXgV2nO0i&8i-uhCH2wp(PmyiWSwzdS~k$H z$J?XOc1mB61v{j=7}~W(edmMdT?HkFW9}NX<$Wg}0}j9r86aQt{4vkzugqJnvSl;8 zlLv1fxBLIn;A=rd?FW-R84EYKe=i-C6cmcz3Q6hp61mGa(t1HGB2{l`F22m+9&~;r zn|%B-Cfz7OY}gb&QM~_jm^C@>9Jug^LIUX?nX*1J&rzSw%^ER{F4x5-ZV1jN@hzG| z005S}%#Y)%3tss!c?JSnd>bL>Rp?|?_0UyD8oWiX?I&biRUO+B*Z5UYOty>Jd|{39 z2NKEqH}S+fZnJw|e~HH)V-%48pgZs0omXun1CutC)U0HLTH=oF+kFl?VM~_`m*uxp zU?pSa`GCBxe20yy9q#Pbn}8Lx;ly`|vzs!Zwx{&^Vmx;u$B50O&andf%Sz5;KNkr8 z!sRY;LFf|C)UjUXK;ZSp%+H6;52ipC+>B;X&i#G%AMY6fK3ks-+D8|X@S{>?W1pX` zayP$#*&VF`{{Ebx@wm=2U-5Ya{NS?^n}W>m_{y*=Sc4eod4%IWA^Zu{M0 zU+h;{lA%H$>SIsdyex|>&K(yD(k@n$6;3dtIXR0piOidiu}}@%4_?9@268fD_3Bm; z`CjkdI~_!MfTP-XWSE@XYvS)$n||bDjz_20*LQrESJrvvX-WV9`P0M9@$P?5EBf76 zbRU`lQ38jZd95ljcc#61em=SBMl$`Z67uSopNs@`7v}SLxhA&t_8pfeXu?M{mO4Wr-0UX& z;#nsVS1o=m0q6=UwrUM~&7y*lF_8#aa1T;&@m98P>4*yF`Oea}wSRLUzrB+7mh9si zkK&Vqwii{>1jy!Fm{4`(L9(#>%f?ASphj|&4By$|J)`MG{FU}=K~yUel)Op}E+*+6 zqpt6aqVKaXbsA-=u+;Um7naIwfMdVeoqYcTp4mY39$n)p@3fQ*5eYvF9<@KG-0{J% z_{$b=f6^BlVzXH4#$0yayJy1F7G>N1ae=kcG4A^v2Dr-iOacgMBdko=0p5zslau4X z?`ZkzstmkcN)}Yekyw%iLk+t(U`M2g9*BSzC=uq&NB$! z=f?Z7T;1r_u|Cyf3Y30c&98lf@x(In9wd(<&}ceX$yppqcr?A!pT$er81iNv5tLoi zUM}o~NZ|{@@$?Jum^h@st=Dyqo_a`ll1-kZjcCfNFr$gmM{+_W@7tZ9a+gLtdpTib zN!^Uh5trfD@2^mA^Zp!{qOl3?hViElW}vJ_lLY(SmDssDKxV7YB|W zWIc0VJr{^Ya9fJmBSiFvwkMY`OAb|HjG<@PN+>jBcN|P%h8w<<=122TS1SO+ut?kn zoz-uloF@*%o(2 z2f&8%B_Do>;d+$*YbE~UEZ~p3z9fwb@A5Uc<^PG_Z4wDlfA4nluA+mXR>PR#SS4s? zp;+$bPy5&bU}0AhYqijK85;*g*BqLla8?v8wj2GqAfgqqDIqoPC#Tp^upY^4K61!k zG|lJSbeKA}X~KF;g}_r4w*wwC2D!WgC0O0 zCHv)O6-mIkTnATFchKuhT$Oy`R7)+>*8Wh5T-W*cjzTn?1h>q}KT~Oou88KkW95(N zNCCwk?WHPGZGVVUB11fG;EBp37#VZ6f|?$x8n+6a$>;7Smk0+-opaB6f}Ys#PrE2( zx?;vQ<#L3zh+_M;%8X{ETQ;-ey)A|syb0K9naE1Ge2BDLdNo?`i^gVA@1#eSusf6# ziZ1WI4Fs;(x^P|?UgA-hL`4eXjj!HSh7@ax<}213^bq6|;Lt0qAdi9zX{(C2+RE*! z1zHsO+-ZzDRvYmCRf>J*We*_KGzvw7D|Eaj zwEv3B`q0Jmba27({><{Ft8&3}ZqLAtu(gUFSEDC}M(u(Ptwxm#iJU%VDpD08qwX6JEo<5w#xAmA_4$*i z*`oh^S2y{CVc9CU@;l1ln1}KY{n^f2)n40*CQ3qsMYRjzGY@UB80J>U+nzib75&r`_kJf$w diff --git a/data/sound/bubble1.wav b/data/sound/balloon_bounce0.wav similarity index 100% rename from data/sound/bubble1.wav rename to data/sound/balloon_bounce0.wav diff --git a/data/sound/bubble2.wav b/data/sound/balloon_bounce1.wav similarity index 100% rename from data/sound/bubble2.wav rename to data/sound/balloon_bounce1.wav diff --git a/data/sound/bubble3.wav b/data/sound/balloon_bounce2.wav similarity index 100% rename from data/sound/bubble3.wav rename to data/sound/balloon_bounce2.wav diff --git a/data/sound/bubble4.wav b/data/sound/balloon_bounce3.wav similarity index 100% rename from data/sound/bubble4.wav rename to data/sound/balloon_bounce3.wav diff --git a/data/sound/balloon1.wav b/data/sound/balloon_pop0.wav similarity index 100% rename from data/sound/balloon1.wav rename to data/sound/balloon_pop0.wav diff --git a/data/sound/balloon2.wav b/data/sound/balloon_pop1.wav similarity index 100% rename from data/sound/balloon2.wav rename to data/sound/balloon_pop1.wav diff --git a/data/sound/balloon3.wav b/data/sound/balloon_pop2.wav similarity index 100% rename from data/sound/balloon3.wav rename to data/sound/balloon_pop2.wav diff --git a/data/sound/balloon4.wav b/data/sound/balloon_pop3.wav similarity index 100% rename from data/sound/balloon4.wav rename to data/sound/balloon_pop3.wav diff --git a/source/balloon.cpp b/source/balloon.cpp index 6d13ac6..d775336 100644 --- a/source/balloon.cpp +++ b/source/balloon.cpp @@ -11,7 +11,7 @@ #include "texture.h" // Para Texture // Constructor -Balloon::Balloon(float x, float y, BalloonType type, BalloonSize size, float vel_x, float speed, Uint16 creation_timer, SDL_FRect play_area, std::shared_ptr texture, const std::vector &animation) +Balloon::Balloon(float x, float y, Type type, Size size, float vel_x, float speed, Uint16 creation_timer, SDL_FRect play_area, std::shared_ptr texture, const std::vector &animation) : sprite_(std::make_unique(texture, animation)), x_(x), y_(y), @@ -26,42 +26,42 @@ Balloon::Balloon(float x, float y, BalloonType type, BalloonSize size, float vel speed_(speed), play_area_(play_area) { switch (type_) { - case BalloonType::BALLOON: { + case Type::BALLOON: { vy_ = 0; max_vy_ = 3.0F; const int INDEX = static_cast(size_); gravity_ = param.balloon.settings.at(INDEX).grav; default_vy_ = param.balloon.settings.at(INDEX).vel; - h_ = w_ = BALLOON_SIZE[INDEX]; - power_ = BALLOON_POWER[INDEX]; - menace_ = BALLOON_MENACE[INDEX]; - score_ = BALLOON_SCORE[INDEX]; - bouncing_sound_ = BALLOON_BOUNCING_SOUND[INDEX]; - popping_sound_ = BALLOON_POPPING_SOUND[INDEX]; + h_ = w_ = SIZE[INDEX]; + power_ = POWER[INDEX]; + menace_ = MENACE[INDEX]; + score_ = SCORE[INDEX]; + bouncing_sound_ = BOUNCING_SOUND[INDEX]; + popping_sound_ = POPPING_SOUND[INDEX]; break; } - case BalloonType::FLOATER: { + case Type::FLOATER: { default_vy_ = max_vy_ = vy_ = fabs(vx_ * 2.0F); gravity_ = 0.00F; const int INDEX = static_cast(size_); - h_ = w_ = BALLOON_SIZE[INDEX]; - power_ = BALLOON_POWER[INDEX]; - menace_ = BALLOON_MENACE[INDEX]; - score_ = BALLOON_SCORE[INDEX]; - bouncing_sound_ = BALLOON_BOUNCING_SOUND[INDEX]; - popping_sound_ = BALLOON_POPPING_SOUND[INDEX]; + h_ = w_ = SIZE[INDEX]; + power_ = POWER[INDEX]; + menace_ = MENACE[INDEX]; + score_ = SCORE[INDEX]; + bouncing_sound_ = BOUNCING_SOUND[INDEX]; + popping_sound_ = POPPING_SOUND[INDEX]; break; } - case BalloonType::POWERBALL: { + case Type::POWERBALL: { constexpr int INDEX = 3; - h_ = w_ = BALLOON_SIZE[4]; - bouncing_sound_ = BALLOON_BOUNCING_SOUND[3]; + h_ = w_ = SIZE[4]; + bouncing_sound_ = BOUNCING_SOUND[3]; popping_sound_ = "power_ball_explosion.wav"; power_ = score_ = menace_ = 0; @@ -103,11 +103,11 @@ void Balloon::alignTo(int x) { // Pinta el globo en la pantalla void Balloon::render() { - if (type_ == BalloonType::POWERBALL) { + if (type_ == Type::POWERBALL) { // Renderiza el fondo azul { auto sp = std::make_unique(sprite_->getTexture(), sprite_->getPosition()); - sp->setSpriteClip(0, 0, BALLOON_SIZE[4], BALLOON_SIZE[4]); + sp->setSpriteClip(0, 0, SIZE[4], SIZE[4]); sp->render(); } @@ -121,7 +121,7 @@ void Balloon::render() { // Añade la máscara del borde y los reflejos { auto sp = std::make_unique(sprite_->getTexture(), sprite_->getPosition()); - sp->setSpriteClip(BALLOON_SIZE[4] * 2, 0, BALLOON_SIZE[4], BALLOON_SIZE[4]); + sp->setSpriteClip(SIZE[4] * 2, 0, SIZE[4], SIZE[4]); sp->render(); } } else { @@ -180,7 +180,7 @@ void Balloon::handleHorizontalBounce(float min_x, float max_x) { x_ = std::clamp(x_, min_x, max_x); vx_ = -vx_; - if (type_ == BalloonType::POWERBALL) { + if (type_ == Type::POWERBALL) { sprite_->switchRotate(); } else { enableBounceEffect(); @@ -209,7 +209,7 @@ void Balloon::handleBottomCollision() { y_ = MAX_Y; vy_ = -default_vy_; - if (type_ != BalloonType::POWERBALL) { + if (type_ != Type::POWERBALL) { enableBounceEffect(); } else { setInvulnerable(false); @@ -293,11 +293,11 @@ void Balloon::setAnimation() { std::string normal_animation; switch (type_) { - case BalloonType::POWERBALL: + case Type::POWERBALL: creating_animation = "powerball"; normal_animation = "powerball"; break; - case BalloonType::FLOATER: + case Type::FLOATER: creating_animation = param.balloon.color.at(2); normal_animation = param.balloon.color.at(3); break; @@ -352,7 +352,7 @@ void Balloon::applyBounceEffect() { // Activa el efecto void Balloon::enableBounceEffect() { // Los globos pequeños no tienen efecto de rebote - if (size_ == BalloonSize::SIZE1) { + if (size_ == Size::SIZE_0) { return; } bounce_effect_.enabled = true; diff --git a/source/balloon.h b/source/balloon.h index 24171b0..ee09560 100644 --- a/source/balloon.h +++ b/source/balloon.h @@ -12,54 +12,54 @@ class Texture; -// --- Constantes relacionadas con globos --- -constexpr int MAX_BOUNCE = 10; // Cantidad de elementos del vector de deformación - -constexpr std::array BALLOON_SCORE = {50, 100, 200, 400}; -constexpr std::array BALLOON_POWER = {1, 3, 7, 15}; -constexpr std::array BALLOON_MENACE = {1, 2, 4, 8}; -constexpr std::array BALLOON_SIZE = {10, 16, 26, 48, 49}; - -const std::array BALLOON_BOUNCING_SOUND = { - "bubble1.wav", "bubble2.wav", "bubble3.wav", "bubble4.wav"}; - -const std::array BALLOON_POPPING_SOUND = { - "balloon1.wav", "balloon2.wav", "balloon3.wav", "balloon4.wav"}; - -enum class BalloonSize : Uint8 { - SIZE1 = 0, - SIZE2 = 1, - SIZE3 = 2, - SIZE4 = 3, -}; - -enum class BalloonType : Uint8 { - BALLOON = 0, - FLOATER = 1, - POWERBALL = 2, -}; - -constexpr float BALLOON_VELX_POSITIVE = 0.7F; -constexpr float BALLOON_VELX_NEGATIVE = -0.7F; - -constexpr int BALLOON_MOVING_ANIMATION = 0; -constexpr int BALLOON_POP_ANIMATION = 1; -constexpr int BALLOON_BORN_ANIMATION = 2; - -constexpr std::array BALLOON_SPEED = {0.60F, 0.70F, 0.80F, 0.90F, 1.00F}; - -constexpr int POWERBALL_SCREENPOWER_MINIMUM = 10; -constexpr int POWERBALL_COUNTER = 8; - // --- Clase Balloon --- class Balloon { public: + // --- Constantes relacionadas con globos --- + static constexpr int MAX_BOUNCE = 10; // Cantidad de elementos del vector de deformación + + static constexpr std::array SCORE = {50, 100, 200, 400}; + static constexpr std::array POWER = {1, 3, 7, 15}; + static constexpr std::array MENACE = {1, 2, 4, 8}; + static constexpr std::array SIZE = {10, 16, 26, 48, 49}; + + const std::array BOUNCING_SOUND = { + "balloon_bounce0.wav", "balloon_bounce1.wav", "balloon_bounce2.wav", "balloon_bounce3.wav"}; + + const std::array POPPING_SOUND = { + "balloon_pop0.wav", "balloon_pop1.wav", "balloon_pop2.wav", "balloon_pop3.wav"}; + + static constexpr float VELX_POSITIVE = 0.7F; + static constexpr float VELX_NEGATIVE = -0.7F; + + static constexpr int MOVING_ANIMATION = 0; + static constexpr int POP_ANIMATION = 1; + static constexpr int BORN_ANIMATION = 2; + + static constexpr std::array SPEED = {0.60F, 0.70F, 0.80F, 0.90F, 1.00F}; + + static constexpr int POWERBALL_SCREENPOWER_MINIMUM = 10; + static constexpr int POWERBALL_COUNTER = 8; + + enum class Size : Uint8 { + SIZE_0 = 0, + SIZE_1 = 1, + SIZE_2 = 2, + SIZE_3 = 3, + }; + + enum class Type : Uint8 { + BALLOON = 0, + FLOATER = 1, + POWERBALL = 2, + }; + // --- Constructores y destructor --- Balloon( float x, float y, - BalloonType type, - BalloonSize size, + Type type, + Size size, float vel_x, float speed, Uint16 creation_timer, @@ -86,14 +86,14 @@ class Balloon { [[nodiscard]] auto getPosY() const -> float { return y_; } [[nodiscard]] auto getWidth() const -> int { return w_; } [[nodiscard]] auto getHeight() const -> int { return h_; } - [[nodiscard]] auto getSize() const -> BalloonSize { return size_; } - [[nodiscard]] auto getType() const -> BalloonType { return type_; } + [[nodiscard]] auto getSize() const -> Size { return size_; } + [[nodiscard]] auto getType() const -> Type { return type_; } [[nodiscard]] auto getScore() const -> Uint16 { return score_; } auto getCollider() -> Circle & { return collider_; } [[nodiscard]] auto getMenace() const -> Uint8 { return isEnabled() ? menace_ : 0; } [[nodiscard]] auto getPower() const -> Uint8 { return power_; } [[nodiscard]] auto isStopped() const -> bool { return stopped_; } - [[nodiscard]] auto isPowerBall() const -> bool { return type_ == BalloonType::POWERBALL; } + [[nodiscard]] auto isPowerBall() const -> bool { return type_ == Type::POWERBALL; } [[nodiscard]] auto isInvulnerable() const -> bool { return invulnerable_; } [[nodiscard]] auto isBeingCreated() const -> bool { return being_created_; } [[nodiscard]] auto isEnabled() const -> bool { return enabled_; } @@ -154,8 +154,8 @@ class Balloon { Uint16 creation_counter_; // Temporizador de creación Uint16 creation_counter_ini_; // Valor inicial del temporizador de creación Uint16 score_; // Puntos al destruir el globo - BalloonType type_; // Tipo de globo - BalloonSize size_; // Tamaño de globo + Type type_; // Tipo de globo + Size size_; // Tamaño de globo Uint8 menace_; // Amenaza que genera el globo Uint32 counter_ = 0; // Contador interno float travel_y_ = 1.0F; // Distancia a recorrer en Y antes de aplicar gravedad diff --git a/source/balloon_formations.cpp b/source/balloon_formations.cpp index 4ab2b4c..a116222 100644 --- a/source/balloon_formations.cpp +++ b/source/balloon_formations.cpp @@ -141,17 +141,17 @@ auto BalloonFormations::parseBalloonLine(const std::string& line, const std::map BalloonType type = (tokens.at(4) == "BALLOON") ? BalloonType::BALLOON : BalloonType::FLOATER; BalloonSize size; - if (tokens.at(5) == "SIZE1") { - size = BalloonSize::SIZE1; + if (tokens.at(5) == "SIZE_0") { + size = BalloonSize::SIZE_0; desp = desp * (BALLOON_SIZE.at(0) + 1); - } else if (tokens.at(5) == "SIZE2") { - size = BalloonSize::SIZE2; + } else if (tokens.at(5) == "SIZE_1") { + size = BalloonSize::SIZE_1; desp = desp * (BALLOON_SIZE.at(1) + 1); - } else if (tokens.at(5) == "SIZE3") { - size = BalloonSize::SIZE3; + } else if (tokens.at(5) == "SIZE_2") { + size = BalloonSize::SIZE_2; desp = desp * (BALLOON_SIZE.at(2) + 1); - } else if (tokens.at(5) == "SIZE4") { - size = BalloonSize::SIZE4; + } else if (tokens.at(5) == "SIZE_3") { + size = BalloonSize::SIZE_3; desp = desp * (BALLOON_SIZE.at(3) + 1); } else { return std::nullopt; @@ -240,10 +240,10 @@ void BalloonFormations::createFloaterVariants() { void BalloonFormations::addTestFormation() { std::vector test_params = { - {10, -BLOCK, 0, BalloonType::FLOATER, BalloonSize::SIZE1, 200}, - {50, -BLOCK, 0, BalloonType::FLOATER, BalloonSize::SIZE2, 200}, - {90, -BLOCK, 0, BalloonType::FLOATER, BalloonSize::SIZE3, 200}, - {140, -BLOCK, 0, BalloonType::FLOATER, BalloonSize::SIZE4, 200}}; + {10, -BLOCK, 0, BalloonType::FLOATER, BalloonSize::SIZE_0, 200}, + {50, -BLOCK, 0, BalloonType::FLOATER, BalloonSize::SIZE_1, 200}, + {90, -BLOCK, 0, BalloonType::FLOATER, BalloonSize::SIZE_2, 200}, + {140, -BLOCK, 0, BalloonType::FLOATER, BalloonSize::SIZE_3, 200}}; balloon_formation_.at(99) = BalloonFormationUnit(4, test_params); } @@ -258,8 +258,8 @@ void BalloonFormations::loadDefaultFormations() { // Formación básica #00 std::vector basic_formation = { - BalloonFormationParams(X4_0, DEFAULT_POS_Y, BALLOON_VELX_POSITIVE, BalloonType::BALLOON, BalloonSize::SIZE4, CREATION_TIME), - BalloonFormationParams(X4_100, DEFAULT_POS_Y, BALLOON_VELX_NEGATIVE, BalloonType::BALLOON, BalloonSize::SIZE4, CREATION_TIME)}; + BalloonFormationParams(X4_0, DEFAULT_POS_Y, BALLOON_VELX_POSITIVE, BalloonType::BALLOON, BalloonSize::SIZE_3, CREATION_TIME), + BalloonFormationParams(X4_100, DEFAULT_POS_Y, BALLOON_VELX_NEGATIVE, BalloonType::BALLOON, BalloonSize::SIZE_3, CREATION_TIME)}; balloon_formation_.emplace_back(2, basic_formation); } diff --git a/source/balloon_formations.h b/source/balloon_formations.h index 870844e..26951cf 100644 --- a/source/balloon_formations.h +++ b/source/balloon_formations.h @@ -16,7 +16,7 @@ struct BalloonFormationParams { int y = 0; // Posición en el eje Y donde crear el globo float vel_x = 0.0F; // Velocidad inicial en el eje X BalloonType type = BalloonType::BALLOON; // Tipo de globo - BalloonSize size = BalloonSize::SIZE1; // Tamaño de globo + BalloonSize size = BalloonSize::SIZE_0; // Tamaño de globo int creation_counter = 0; // Temporizador para la creación del globo // Constructor por defecto diff --git a/source/balloon_manager.cpp b/source/balloon_manager.cpp index 2280e63..2b07a3f 100644 --- a/source/balloon_manager.cpp +++ b/source/balloon_manager.cpp @@ -5,7 +5,7 @@ #include // Para rand #include // Para accumulate -#include "balloon.h" // Para Balloon, BALLOON_SCORE, BALLOON_VELX... +#include "balloon.h" // Para Balloon, Balloon::SCORE.at( )ALLOON_VELX... #include "balloon_formations.h" // Para BalloonFormationParams, BalloonForma... #include "color.h" // Para Zone, Color, flash_color #include "explosions.h" // Para Explosions @@ -23,30 +23,30 @@ BalloonManager::BalloonManager() // Inicializa void BalloonManager::init() { // Texturas - Globos + balloon_textures_.emplace_back(Resource::get()->getTexture("balloon0.png")); balloon_textures_.emplace_back(Resource::get()->getTexture("balloon1.png")); balloon_textures_.emplace_back(Resource::get()->getTexture("balloon2.png")); balloon_textures_.emplace_back(Resource::get()->getTexture("balloon3.png")); - balloon_textures_.emplace_back(Resource::get()->getTexture("balloon4.png")); balloon_textures_.emplace_back(Resource::get()->getTexture("powerball.png")); // Animaciones -- Globos + balloon_animations_.emplace_back(Resource::get()->getAnimation("balloon0.ani")); balloon_animations_.emplace_back(Resource::get()->getAnimation("balloon1.ani")); balloon_animations_.emplace_back(Resource::get()->getAnimation("balloon2.ani")); balloon_animations_.emplace_back(Resource::get()->getAnimation("balloon3.ani")); - balloon_animations_.emplace_back(Resource::get()->getAnimation("balloon4.ani")); balloon_animations_.emplace_back(Resource::get()->getAnimation("powerball.ani")); // Texturas - Explosiones + explosions_textures_.emplace_back(Resource::get()->getTexture("explosion0.png")); explosions_textures_.emplace_back(Resource::get()->getTexture("explosion1.png")); explosions_textures_.emplace_back(Resource::get()->getTexture("explosion2.png")); explosions_textures_.emplace_back(Resource::get()->getTexture("explosion3.png")); - explosions_textures_.emplace_back(Resource::get()->getTexture("explosion4.png")); // Animaciones -- Explosiones + explosions_animations_.emplace_back(Resource::get()->getAnimation("explosion0.ani")); explosions_animations_.emplace_back(Resource::get()->getAnimation("explosion1.ani")); explosions_animations_.emplace_back(Resource::get()->getAnimation("explosion2.ani")); explosions_animations_.emplace_back(Resource::get()->getAnimation("explosion3.ani")); - explosions_animations_.emplace_back(Resource::get()->getAnimation("explosion4.ani")); // Añade texturas explosions_->addTexture(0, explosions_textures_[0], explosions_animations_[0]); @@ -150,7 +150,7 @@ void BalloonManager::updateBalloonDeployCounter() { } // Indica si se puede crear una powerball -auto BalloonManager::canPowerBallBeCreated() -> bool { return (!power_ball_enabled_) && (calculateScreenPower() > POWERBALL_SCREENPOWER_MINIMUM) && (power_ball_counter_ == 0); } +auto BalloonManager::canPowerBallBeCreated() -> bool { return (!power_ball_enabled_) && (calculateScreenPower() > Balloon::POWERBALL_SCREENPOWER_MINIMUM) && (power_ball_counter_ == 0); } // Calcula el poder actual de los globos en pantalla auto BalloonManager::calculateScreenPower() -> int { @@ -158,7 +158,7 @@ auto BalloonManager::calculateScreenPower() -> int { } // Crea un globo nuevo en el vector de globos -auto BalloonManager::createBalloon(float x, int y, BalloonType type, BalloonSize size, float velx, float speed, int creation_timer) -> std::shared_ptr { +auto BalloonManager::createBalloon(float x, int y, Balloon::Type type, Balloon::Size size, float velx, float speed, int creation_timer) -> std::shared_ptr { if (can_deploy_balloons_) { const int INDEX = static_cast(size); balloons_.emplace_back(std::make_shared(x, y, type, size, velx, speed, creation_timer, play_area_, balloon_textures_.at(INDEX), balloon_animations_.at(INDEX))); @@ -175,10 +175,10 @@ auto BalloonManager::createBalloon(float x, int y, BalloonType type, BalloonSize void BalloonManager::createChildBalloon(const std::shared_ptr &balloon, const std::string &direction) { if (can_deploy_balloons_) { // Calcula parametros - const float VX = direction == "LEFT" ? BALLOON_VELX_NEGATIVE : BALLOON_VELX_POSITIVE; - const auto SIZE = static_cast(static_cast(balloon->getSize()) - 1); + const float VX = direction == "LEFT" ? Balloon::VELX_NEGATIVE : Balloon::VELX_POSITIVE; + const auto SIZE = static_cast(static_cast(balloon->getSize()) - 1); const int PARENT_HEIGHT = balloon->getHeight(); - const int CHILD_HEIGHT = BALLOON_SIZE[static_cast(balloon->getSize()) - 1]; + const int CHILD_HEIGHT = Balloon::SIZE.at(static_cast(balloon->getSize()) - 1); const int Y = balloon->getPosY() + (PARENT_HEIGHT - CHILD_HEIGHT) / 2; const int X = direction == "LEFT" ? balloon->getPosX() + (balloon->getWidth() / 3) : balloon->getPosX() + 2 * (balloon->getWidth() / 3); @@ -187,7 +187,7 @@ void BalloonManager::createChildBalloon(const std::shared_ptr &balloon, // Establece parametros b->alignTo(X); - b->setVelY(b->getType() == BalloonType::BALLOON ? -2.50F : BALLOON_VELX_NEGATIVE * 2.0F); + b->setVelY(b->getType() == Balloon::Type::BALLOON ? -2.50F : Balloon::VELX_NEGATIVE * 2.0F); // Herencia de estados if (balloon->isStopped()) { @@ -203,22 +203,22 @@ void BalloonManager::createChildBalloon(const std::shared_ptr &balloon, void BalloonManager::createPowerBall() { if (can_deploy_balloons_) { constexpr int VALUES = 6; - constexpr float POS_Y = -BALLOON_SIZE[4]; + constexpr float POS_Y = -Balloon::SIZE.at(4); constexpr int CREATION_TIME = 0; const float LEFT = param.game.play_area.rect.x; - const float CENTER = param.game.play_area.center_x - (BALLOON_SIZE[4] / 2); - const float RIGHT = param.game.play_area.rect.w - BALLOON_SIZE[4]; + const float CENTER = param.game.play_area.center_x - (Balloon::SIZE.at(4) / 2); + const float RIGHT = param.game.play_area.rect.w - Balloon::SIZE.at(4); const int LUCK = rand() % VALUES; const std::array POS_X = {LEFT, LEFT, CENTER, CENTER, RIGHT, RIGHT}; - const std::array VEL_X = {BALLOON_VELX_POSITIVE, BALLOON_VELX_POSITIVE, BALLOON_VELX_POSITIVE, BALLOON_VELX_NEGATIVE, BALLOON_VELX_NEGATIVE, BALLOON_VELX_NEGATIVE}; + const std::array VEL_X = {Balloon::VELX_POSITIVE, Balloon::VELX_POSITIVE, Balloon::VELX_POSITIVE, Balloon::VELX_NEGATIVE, Balloon::VELX_NEGATIVE, Balloon::VELX_NEGATIVE}; - balloons_.emplace_back(std::make_unique(POS_X[LUCK], POS_Y, BalloonType::POWERBALL, BalloonSize::SIZE4, VEL_X[LUCK], balloon_speed_, CREATION_TIME, play_area_, balloon_textures_[4], balloon_animations_[4])); + balloons_.emplace_back(std::make_unique(POS_X[LUCK], POS_Y, Balloon::Type::POWERBALL, Balloon::Size::SIZE_3, VEL_X[LUCK], balloon_speed_, CREATION_TIME, play_area_, balloon_textures_[4], balloon_animations_[4])); balloons_.back()->setInvulnerable(true); power_ball_enabled_ = true; - power_ball_counter_ = POWERBALL_COUNTER; + power_ball_counter_ = Balloon::POWERBALL_COUNTER; } } @@ -235,14 +235,14 @@ auto BalloonManager::popBalloon(std::shared_ptr balloon) -> int { Stage::addPower(1); int score = 0; - if (balloon->getType() == BalloonType::POWERBALL) { + if (balloon->getType() == Balloon::Type::POWERBALL) { balloon->pop(true); score = destroyAllBalloons(); power_ball_enabled_ = false; balloon_deploy_counter_ = 20; } else { score = balloon->getScore(); - if (balloon->getSize() != BalloonSize::SIZE1) { + if (balloon->getSize() != Balloon::Size::SIZE_0) { createChildBalloon(balloon, "LEFT"); createChildBalloon(balloon, "RIGHT"); } @@ -261,17 +261,17 @@ auto BalloonManager::destroyBalloon(std::shared_ptr &balloon) -> int { // Calcula la puntuación y el poder que generaria el globo en caso de romperlo a él y a sus hijos switch (balloon->getSize()) { - case BalloonSize::SIZE4: - score = BALLOON_SCORE[3] + (2 * BALLOON_SCORE[2]) + (4 * BALLOON_SCORE[1]) + (8 * BALLOON_SCORE[0]); + case Balloon::Size::SIZE_3: + score = Balloon::SCORE.at(3) + (2 * Balloon::SCORE.at(2)) + (4 * Balloon::SCORE.at(1)) + (8 * Balloon::SCORE.at(0)); break; - case BalloonSize::SIZE3: - score = BALLOON_SCORE[2] + (2 * BALLOON_SCORE[1]) + (4 * BALLOON_SCORE[0]); + case Balloon::Size::SIZE_2: + score = Balloon::SCORE.at(2) + (2 * Balloon::SCORE.at(1)) + (4 * Balloon::SCORE.at(0)); break; - case BalloonSize::SIZE2: - score = BALLOON_SCORE[1] + (2 * BALLOON_SCORE[0]); + case Balloon::Size::SIZE_1: + score = Balloon::SCORE.at(1) + (2 * Balloon::SCORE.at(0)); break; - case BalloonSize::SIZE1: - score = BALLOON_SCORE[0]; + case Balloon::Size::SIZE_0: + score = Balloon::SCORE.at(0); break; default: score = 0; @@ -343,12 +343,12 @@ void BalloonManager::createTwoBigBalloons() { void BalloonManager::createRandomBalloons() { const int NUM_BALLOONS = 2 + rand() % 4; for (int i = 0; i < NUM_BALLOONS; ++i) { - const float X = param.game.game_area.rect.x + (rand() % static_cast(param.game.game_area.rect.w)) - BALLOON_SIZE[3]; + const float X = param.game.game_area.rect.x + (rand() % static_cast(param.game.game_area.rect.w)) - Balloon::SIZE.at(3); const int Y = param.game.game_area.rect.y + (rand() % 50); - const auto SIZE = static_cast(rand() % 4); - const float VEL_X = (rand() % 2 == 0) ? BALLOON_VELX_POSITIVE : BALLOON_VELX_NEGATIVE; + const auto SIZE = static_cast(rand() % 4); + const float VEL_X = (rand() % 2 == 0) ? Balloon::VELX_POSITIVE : Balloon::VELX_NEGATIVE; const int CREATION_COUNTER = 0; - createBalloon(X, Y, BalloonType::BALLOON, SIZE, VEL_X, balloon_speed_, CREATION_COUNTER); + createBalloon(X, Y, Balloon::Type::BALLOON, SIZE, VEL_X, balloon_speed_, CREATION_COUNTER); } } diff --git a/source/balloon_manager.h b/source/balloon_manager.h index 5022b3e..43e1cce 100644 --- a/source/balloon_manager.h +++ b/source/balloon_manager.h @@ -8,7 +8,7 @@ #include // Para string #include // Para vector -#include "balloon.h" // Para BALLOON_SPEED, Balloon, BalloonSize (ptr only), BalloonType (ptr only) +#include "balloon.h" // Para BALLOON_SPEED, Balloon, Balloon::Size (ptr only), Balloon::Type (ptr only) #include "balloon_formations.h" // Para BalloonFormations #include "explosions.h" // Para Explosions #include "param.h" // Para Param, ParamGame, param @@ -38,7 +38,7 @@ class BalloonManager { void deploySet(int set, int y); // Crea una formación específica con coordenadas // Creación de globos - auto createBalloon(float x, int y, BalloonType type, BalloonSize size, float velx, float speed, int creation_timer) -> std::shared_ptr; // Crea un nuevo globo + auto createBalloon(float x, int y, Balloon::Type type, Balloon::Size size, float velx, float speed, int creation_timer) -> std::shared_ptr; // Crea un nuevo globo void createChildBalloon(const std::shared_ptr &balloon, const std::string &direction); // Crea un globo a partir de otro void createPowerBall(); // Crea una PowerBall void createTwoBigBalloons(); // Crea dos globos grandes @@ -91,8 +91,8 @@ class BalloonManager { std::vector> explosions_animations_; // Animaciones de las explosiones // Variables de control de globos - float balloon_speed_ = BALLOON_SPEED[0]; - float default_balloon_speed_ = BALLOON_SPEED[0]; + float balloon_speed_ = Balloon::SPEED.at(0); + float default_balloon_speed_ = Balloon::SPEED.at(0); int balloon_deploy_counter_ = 0; bool power_ball_enabled_ = false; int power_ball_counter_ = 0; diff --git a/source/director.cpp b/source/director.cpp index e1f5f67..334e909 100644 --- a/source/director.cpp +++ b/source/director.cpp @@ -268,14 +268,14 @@ void Director::setFileList() { Asset::get()->add(PREFIX + "/data/music/credits.ogg", AssetType::MUSIC); // Sonidos - Asset::get()->add(PREFIX + "/data/sound/balloon1.wav", AssetType::SOUND); - Asset::get()->add(PREFIX + "/data/sound/balloon2.wav", AssetType::SOUND); - Asset::get()->add(PREFIX + "/data/sound/balloon3.wav", AssetType::SOUND); - Asset::get()->add(PREFIX + "/data/sound/balloon4.wav", AssetType::SOUND); - Asset::get()->add(PREFIX + "/data/sound/bubble1.wav", AssetType::SOUND); - Asset::get()->add(PREFIX + "/data/sound/bubble2.wav", AssetType::SOUND); - Asset::get()->add(PREFIX + "/data/sound/bubble3.wav", AssetType::SOUND); - Asset::get()->add(PREFIX + "/data/sound/bubble4.wav", AssetType::SOUND); + Asset::get()->add(PREFIX + "/data/sound/balloon_pop0.wav", AssetType::SOUND); + Asset::get()->add(PREFIX + "/data/sound/balloon_pop1.wav", AssetType::SOUND); + Asset::get()->add(PREFIX + "/data/sound/balloon_pop2.wav", AssetType::SOUND); + Asset::get()->add(PREFIX + "/data/sound/balloon_pop3.wav", AssetType::SOUND); + Asset::get()->add(PREFIX + "/data/sound/balloon_bounce0.wav", AssetType::SOUND); + Asset::get()->add(PREFIX + "/data/sound/balloon_bounce1.wav", AssetType::SOUND); + Asset::get()->add(PREFIX + "/data/sound/balloon_bounce2.wav", AssetType::SOUND); + Asset::get()->add(PREFIX + "/data/sound/balloon_bounce3.wav", AssetType::SOUND); Asset::get()->add(PREFIX + "/data/sound/bullet.wav", AssetType::SOUND); Asset::get()->add(PREFIX + "/data/sound/clock.wav", AssetType::SOUND); Asset::get()->add(PREFIX + "/data/sound/coffee_out.wav", AssetType::SOUND); @@ -310,24 +310,24 @@ void Director::setFileList() { Asset::get()->add(PREFIX + "/data/shaders/crtpi_240.glsl", AssetType::DATA); // Texturas - Balloons + Asset::get()->add(PREFIX + "/data/gfx/balloon/balloon0.png", AssetType::BITMAP); + Asset::get()->add(PREFIX + "/data/gfx/balloon/balloon0.ani", AssetType::ANIMATION); Asset::get()->add(PREFIX + "/data/gfx/balloon/balloon1.png", AssetType::BITMAP); Asset::get()->add(PREFIX + "/data/gfx/balloon/balloon1.ani", AssetType::ANIMATION); Asset::get()->add(PREFIX + "/data/gfx/balloon/balloon2.png", AssetType::BITMAP); Asset::get()->add(PREFIX + "/data/gfx/balloon/balloon2.ani", AssetType::ANIMATION); Asset::get()->add(PREFIX + "/data/gfx/balloon/balloon3.png", AssetType::BITMAP); Asset::get()->add(PREFIX + "/data/gfx/balloon/balloon3.ani", AssetType::ANIMATION); - Asset::get()->add(PREFIX + "/data/gfx/balloon/balloon4.png", AssetType::BITMAP); - Asset::get()->add(PREFIX + "/data/gfx/balloon/balloon4.ani", AssetType::ANIMATION); // Texturas - Explosiones + Asset::get()->add(PREFIX + "/data/gfx/balloon/explosion0.png", AssetType::BITMAP); + Asset::get()->add(PREFIX + "/data/gfx/balloon/explosion0.ani", AssetType::ANIMATION); Asset::get()->add(PREFIX + "/data/gfx/balloon/explosion1.png", AssetType::BITMAP); Asset::get()->add(PREFIX + "/data/gfx/balloon/explosion1.ani", AssetType::ANIMATION); Asset::get()->add(PREFIX + "/data/gfx/balloon/explosion2.png", AssetType::BITMAP); Asset::get()->add(PREFIX + "/data/gfx/balloon/explosion2.ani", AssetType::ANIMATION); Asset::get()->add(PREFIX + "/data/gfx/balloon/explosion3.png", AssetType::BITMAP); Asset::get()->add(PREFIX + "/data/gfx/balloon/explosion3.ani", AssetType::ANIMATION); - Asset::get()->add(PREFIX + "/data/gfx/balloon/explosion4.png", AssetType::BITMAP); - Asset::get()->add(PREFIX + "/data/gfx/balloon/explosion4.ani", AssetType::ANIMATION); // Texturas - Power Ball Asset::get()->add(PREFIX + "/data/gfx/balloon/powerball.png", AssetType::BITMAP);