From 884cacbc2e6cc7b34381eb4e36c4e0eb120d17a7 Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Tue, 30 Jul 2024 12:02:15 +0200 Subject: [PATCH] tornem a deixar els fitxers balloon.png com estaven --- data/gfx/balloon1.ani | 20 +- data/gfx/balloon1.gif | Bin 265 -> 0 bytes data/gfx/balloon1.png | Bin 0 -> 2073 bytes data/gfx/balloon2.ani | 20 +- data/gfx/balloon2.gif | Bin 484 -> 0 bytes data/gfx/balloon2.png | Bin 0 -> 4955 bytes data/gfx/balloon3.ani | 20 +- data/gfx/balloon3.gif | Bin 908 -> 0 bytes data/gfx/balloon3.png | Bin 0 -> 6499 bytes data/gfx/balloon4.ani | 20 +- data/gfx/balloon4.gif | Bin 1782 -> 0 bytes data/gfx/balloon4.png | Bin 0 -> 11547 bytes data/gfx/balloon_blue_pal.gif | Bin 69 -> 0 bytes data/gfx/balloon_green_pal.gif | Bin 69 -> 0 bytes data/gfx/balloon_yellow_pal.gif | Bin 69 -> 0 bytes ...{balloon1_explosion.ani => explosion1.ani} | 0 ...{balloon1_explosion.png => explosion1.png} | Bin ...{balloon2_explosion.ani => explosion2.ani} | 0 ...{balloon2_explosion.png => explosion2.png} | Bin ...{balloon3_explosion.ani => explosion3.ani} | 0 ...{balloon3_explosion.png => explosion3.png} | Bin ...{balloon4_explosion.ani => explosion4.ani} | 0 ...{balloon4_explosion.png => explosion4.png} | Bin data/gfx/menu_game_over.png | Bin 3707 -> 0 bytes data/gfx/menu_game_over_end.png | Bin 3844 -> 0 bytes data/gfx/powerball.ani | 2 +- source/balloon.cpp | 14 +- source/common/gif.c | 3 +- source/common/surface.cpp | 204 ------------------ source/common/surface.h | 63 ------ source/director.cpp | 32 ++- source/game.cpp | 40 ++-- source/game.h | 2 - 33 files changed, 104 insertions(+), 336 deletions(-) delete mode 100644 data/gfx/balloon1.gif create mode 100644 data/gfx/balloon1.png delete mode 100644 data/gfx/balloon2.gif create mode 100644 data/gfx/balloon2.png delete mode 100644 data/gfx/balloon3.gif create mode 100644 data/gfx/balloon3.png delete mode 100644 data/gfx/balloon4.gif create mode 100644 data/gfx/balloon4.png delete mode 100644 data/gfx/balloon_blue_pal.gif delete mode 100644 data/gfx/balloon_green_pal.gif delete mode 100644 data/gfx/balloon_yellow_pal.gif rename data/gfx/{balloon1_explosion.ani => explosion1.ani} (100%) rename data/gfx/{balloon1_explosion.png => explosion1.png} (100%) rename data/gfx/{balloon2_explosion.ani => explosion2.ani} (100%) rename data/gfx/{balloon2_explosion.png => explosion2.png} (100%) rename data/gfx/{balloon3_explosion.ani => explosion3.ani} (100%) rename data/gfx/{balloon3_explosion.png => explosion3.png} (100%) rename data/gfx/{balloon4_explosion.ani => explosion4.ani} (100%) rename data/gfx/{balloon4_explosion.png => explosion4.png} (100%) delete mode 100644 data/gfx/menu_game_over.png delete mode 100644 data/gfx/menu_game_over_end.png delete mode 100644 source/common/surface.cpp delete mode 100644 source/common/surface.h diff --git a/data/gfx/balloon1.ani b/data/gfx/balloon1.ani index 21c1d83..eff7c0a 100644 --- a/data/gfx/balloon1.ani +++ b/data/gfx/balloon1.ani @@ -2,15 +2,29 @@ frameWidth=10 frameHeight=10 [animation] -name=normal +name=orange speed=10 loop=0 frames=0,1,2,3,4,5,6,7,8,9 [/animation] [animation] -name=stopped +name=blue speed=20 loop=0 -frames=0,1,2,3,4,5,6,7,8,9 +frames=10,11,12,13,14,15,16,17,18,19 +[/animation] + +[animation] +name=green +speed=10 +loop=0 +frames=20,21,22,23,24,25,26,27,28,29 +[/animation] + +[animation] +name=red +speed=20 +loop=0 +frames=30,31,32,33,34,35,36,37,38,39 [/animation] \ No newline at end of file diff --git a/data/gfx/balloon1.gif b/data/gfx/balloon1.gif deleted file mode 100644 index 173179c554567a6312c2f46700de14150f9c1cf9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 265 zcmV+k0rvh!Nk%v~VKM*|0FeLy00022GBW$}Hvj+sA^!_bMO0HmK~P09E-(WD0000X z`2-0H0000i00000G5{0+00PH^g<=b-+!BmvIw*n;?`+OwTi1M~sCD8nq#nzHCG3_# zEN5`5p!ev*AwI3t>Sxpxfkftw##!N_O6c$@3_7RO&GM>rdXr=F&O8MpyJwKE_Rf9a zbNO6l3gs8R)7~?JAt6{nNOCY3lE}A+Sg82O80mP}rx(cgXHx^nsU!3Px{3K2^AOh) zX7W~a)#j=SOXHfRWfm)y71qLY^kvIt#d^yd{M&SkM63HVJ4$yKYT8L!hlfe+hdrvz PNomnYaVQS{SO5S!sup%) diff --git a/data/gfx/balloon1.png b/data/gfx/balloon1.png new file mode 100644 index 0000000000000000000000000000000000000000..446776cac245ebd67620e2abad6d4e1b0e1b5843 GIT binary patch literal 2073 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 aVP=S%^KJ4BPoP11{a}o?R~lfw0suRu_~8ct diff --git a/data/gfx/balloon2.png b/data/gfx/balloon2.png new file mode 100644 index 0000000000000000000000000000000000000000..f3a0696c6bc8e40f35ae02b74a5d0e10597fb2d0 GIT binary patch literal 4955 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 diff --git a/data/gfx/balloon3.png b/data/gfx/balloon3.png new file mode 100644 index 0000000000000000000000000000000000000000..a38eb6460fb84ec25edec6e2117ebdcee349d5da GIT binary patch literal 6499 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 literal 0 HcmV?d00001 diff --git a/data/gfx/balloon4.ani b/data/gfx/balloon4.ani index 3ebc4d0..cd4d054 100644 --- a/data/gfx/balloon4.ani +++ b/data/gfx/balloon4.ani @@ -2,15 +2,29 @@ frameWidth=46 frameHeight=46 [animation] -name=normal +name=orange speed=10 loop=0 frames=0,1,2,3,4,5,6,7,8,9 [/animation] [animation] -name=stopped +name=blue speed=20 loop=0 -frames=0,1,2,3,4,5,6,7,8,9 +frames=10,11,12,13,14,15,16,17,18,19 +[/animation] + +[animation] +name=green +speed=10 +loop=0 +frames=20,21,22,23,24,25,26,27,28,29 +[/animation] + +[animation] +name=red +speed=20 +loop=0 +frames=30,31,32,33,34,35,36,37,38,39 [/animation] \ No newline at end of file diff --git a/data/gfx/balloon4.gif b/data/gfx/balloon4.gif deleted file mode 100644 index a3de374a5eaf021008e9cba4c9905d5baa662cf1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1782 zcmVDzTf#FO3Ova-?=?gWHP?^+7t*)-Ytadqleu>PQcbw~r(cALtjOL=& zY_Pc=z2mL={kHG-1L)`GK^G{9f;e+>7+9F$NZ7deXDImyNr6eI2?2*Fw^=#kDMZ>9 ziAsdQxoCRe8rr(b_fgAui`zoGn>Zo+*t-jRa7KSlUJ82Z#?6tVNaKvSc4t3b(RogcO?K4StZ5&% z9P_X0)ogGFPpz7?jIP8rQ$3EF_wpsyvE%#tR5#PxY^&FLD_w6V#@mr!7VqBh+v|7J ztMLAGxAsh1+mHX33!fE5!DbwA%=H&wZu+&vpM3uPSC50^xKdz+HraO{e)tJeS6Y~C z_|sxweTErdBW@PnL4hII6I&+sm7r9m#Yhx;rh%9XC%t6|m_FE{Ct`#lt~i~ApanVO zjxs7maBFOEH<=glen9;8KjGE5%C8te5IK8n2G(k}I&ZM)GPY z9bgzotxo@3s;pJTra~;UB0SryqH`Ym>$KS#vMslqQu3`L;c7dsx6{1wl_-~Vq6WJ= zAWKHOu7xpS6U!!Rue0^q3$GpY;+wCtp%uaJ5CW>J#=trREHEYnhoLaS1#iGGFd$US z1H~ABa`DDOXzcL<9fust$Rs!X@Wv&aTr$Wi8(fOSX29Hr%;-j3?Ik#4d;=LaPpi+* z(E|MMclq`!bSpvUJj%T9rpvSjP|F(})f`2QCN_gyYwoS$p8K`eU4xA+DN$1k?nh~t zYq7LL@6~L-ogMpZ8gHAeY~8ltI;^m}`rRww-G16P-+vn(IO2m(YPR5s6CSLpva*^a zj?w?5%J|`;dYZX|F{V>xK%rVYBGL;vOho|LEq!(#XrQ|86WTX;uEu841TiRMx zuY-x=?&Oswd~s>5j=GXe{SJKacp+b8@^C_*U%0}7J$vhLZ7RKU+n=tWXrZ1}mW#}1 zIGp*7;uvM!8#>vdd@5cq|MTRdrTg->vfuuB0m5Iu(p||%>H8m`QuihVS|S(^GRrF7 z$36PY4@QxJAfFmyldv2IfGG-``x3-KC?#)#6zrW>Jcqsx!Y&U3(%yoY^tsmv#Crp& zOa5Ls!Z)c9br1?5vjEhj-^4Ci4-DdzfY&G6sE1b1Dv=Bo=o=ss5i-?_Uwj0}L;(Ly z$V_(OpWKKyMIq^MiP;GtZLY>8CmK(BVRQ=`<-{Y3ToHB_+TwfO7?ayMq*$jxR$~&h z6zSZMb#1hf@&u$AEABCkcqHRo0!bkdS?-A@jG`FDx5zu%u|HK*BqMZ0BM^l!bfR2e z`98-zOp?%(;Y*?eRVhdNX~%`5+@USo;>H@0ag1PmB^LA8KTv56eEDNvEn~ULUh2t* zTY@Dkaj6k1b!U(#%w>;u8AlOr??aEAUMf>K%x|KvMCViH_@2qj=(&zg8!9FBau`nV zZ3{eoEGG})xi=(v$DQ`%UoPxft_}ePpv^1jI`!#2%XLnjxVw|>E?K;mP!qHsuQQIO zPUlaG64Z3^?Bw$n>bbIzij=6N96nznxyV5dqN)Qa*<8xein`DnFpXzQk=fFfE^c!w zy(to7`p)B-bf+7=sMOr1v|kbp21sSR9Wm8+&Ug|5L`c$i1Md?+!+SP%6 z)uv+uYtyRsG|KFBc_Ihr5#PK1>0BA_BdC&PRwBo3s}z%hBX-MtYUwSSzs+T YSdXoYWhm<_$rj5p$ev8H9w-0+J7PU@c>n+a diff --git a/data/gfx/balloon4.png b/data/gfx/balloon4.png new file mode 100644 index 0000000000000000000000000000000000000000..8012af5f6040316f480b0374dd99b0658744028f GIT binary patch literal 11547 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 b1D>m9m&9=59o4jKX8=&s;C89{y+{8K(en6) literal 0 HcmV?d00001 diff --git a/data/gfx/balloon_blue_pal.gif b/data/gfx/balloon_blue_pal.gif deleted file mode 100644 index 8fefa464d745277b892a3ada36cd5cb7bf9bfa85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69 zcmZ?wbh9u|WMN=rn8*MEM)_-ge=__3|G(mYZa>$MU}whwS0g$MU}whwS0g0FbE<5C8xG diff --git a/data/gfx/balloon1_explosion.ani b/data/gfx/explosion1.ani similarity index 100% rename from data/gfx/balloon1_explosion.ani rename to data/gfx/explosion1.ani diff --git a/data/gfx/balloon1_explosion.png b/data/gfx/explosion1.png similarity index 100% rename from data/gfx/balloon1_explosion.png rename to data/gfx/explosion1.png diff --git a/data/gfx/balloon2_explosion.ani b/data/gfx/explosion2.ani similarity index 100% rename from data/gfx/balloon2_explosion.ani rename to data/gfx/explosion2.ani diff --git a/data/gfx/balloon2_explosion.png b/data/gfx/explosion2.png similarity index 100% rename from data/gfx/balloon2_explosion.png rename to data/gfx/explosion2.png diff --git a/data/gfx/balloon3_explosion.ani b/data/gfx/explosion3.ani similarity index 100% rename from data/gfx/balloon3_explosion.ani rename to data/gfx/explosion3.ani diff --git a/data/gfx/balloon3_explosion.png b/data/gfx/explosion3.png similarity index 100% rename from data/gfx/balloon3_explosion.png rename to data/gfx/explosion3.png diff --git a/data/gfx/balloon4_explosion.ani b/data/gfx/explosion4.ani similarity index 100% rename from data/gfx/balloon4_explosion.ani rename to data/gfx/explosion4.ani diff --git a/data/gfx/balloon4_explosion.png b/data/gfx/explosion4.png similarity index 100% rename from data/gfx/balloon4_explosion.png rename to data/gfx/explosion4.png diff --git a/data/gfx/menu_game_over.png b/data/gfx/menu_game_over.png deleted file mode 100644 index c70d2e87b4200b0424ac7dac26cf587f8310d7e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3707 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 Z{{hDBwj0RO!D;{i002ovPDHLkV1nD2_pkr} diff --git a/data/gfx/menu_game_over_end.png b/data/gfx/menu_game_over_end.png deleted file mode 100644 index 5e8fe65366ee761c089269860507aec300754c24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3844 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 sprite->getTexture()->setAlpha(255 - (int)((float)creationCounter * (255.0f / (float)creationCounterIni))); sprite->render(); sprite->getTexture()->setAlpha(255); } else { - //sprite->getTexture()->setPalette(0); sprite->render(); } @@ -570,18 +568,18 @@ void Balloon::updateState() // Establece la animación correspondiente al estado void Balloon::updateAnimation() { - std::string creatingAnimation = "stopped"; - std::string normalAnimation = "normal"; + std::string creatingAnimation = "blue"; + std::string normalAnimation = "orange"; if (kind == POWER_BALL) { - creatingAnimation = "default"; - normalAnimation = "default"; + creatingAnimation = "powerball"; + normalAnimation = "powerball"; } else if (getClass() == HEXAGON_CLASS) { - creatingAnimation = "stopped"; - normalAnimation = "normal"; + creatingAnimation = "red"; + normalAnimation = "green"; } // Establece el frame de animación diff --git a/source/common/gif.c b/source/common/gif.c index f029375..e0efb4b 100644 --- a/source/common/gif.c +++ b/source/common/gif.c @@ -104,6 +104,7 @@ void uncompress( int code_length, int clear_code; // This varies depending on code_length int stop_code; // one more than clear code int match_len; + clear_code = 1 << ( code_length ); stop_code = clear_code + 1; @@ -141,7 +142,7 @@ void uncompress( int code_length, { code = 0x0; // Always read one more bit than the code length - for ( i = 0; i < ( code_length + 1 ); i++ ) + for ( i = 0; i < ( code_length + 1 ); ++i ) { // This is different than in the file read example; that // was a call to "next_bit" diff --git a/source/common/surface.cpp b/source/common/surface.cpp deleted file mode 100644 index 07498b1..0000000 --- a/source/common/surface.cpp +++ /dev/null @@ -1,204 +0,0 @@ -#include "surface.h" -#include "gif.c" - -struct jSurface_s -{ - Uint8 *data; - Uint16 w, h; -}; - -// Constructor -Surface::Surface(const char *filename, jSurface dest) -{ - surface = loadSurface(filename); - destSurface = dest; - texture = nullptr; - - loadPalette(filename); - transparentColor = 0; -} - -// Constructor -Surface::Surface(int width, int height, SDL_Texture *tex) -{ - surface = newSurface(width, height); - destSurface = nullptr; - texture = tex; - - clearPalette(0); - transparentColor = 0; -} - -// Destructor -Surface::~Surface() -{ - deleteSurface(surface); - deleteSurface(destSurface); -} - -// Crea una surface -jSurface Surface::newSurface(int w, int h) -{ - jSurface surf = (jSurface)malloc(sizeof(jSurface_s)); - surf->w = w; - surf->h = h; - surf->data = (Uint8 *)malloc(w * h); - return surf; -} - -// Borra una surface -void Surface::deleteSurface(jSurface surf) -{ - if (surf == nullptr) - { - return; - } - - if (surf->data != nullptr) - { - free(surf->data); - } - - free(surf); -} - -// Establece una surface de destino donde hacer el blit -void Surface::setDest(jSurface surf) -{ - destSurface = surf; -} - -// Establece una textura donde hacer el flip -void Surface::setTexture(SDL_Texture *tex) -{ - texture = tex; -} - -// Crea una surface a partir de un fichero .gif -jSurface Surface::loadSurface(const char *filename) -{ - FILE *f = fopen(filename, "rb"); - if (!f) - { - return nullptr; - } - - fseek(f, 0, SEEK_END); - long size = ftell(f); - fseek(f, 0, SEEK_SET); - Uint8 *buffer = (Uint8 *)malloc(size); - fread(buffer, size, 1, f); - fclose(f); - - Uint16 w, h; - Uint8 *pixels = LoadGif(buffer, &w, &h); - if (pixels == nullptr) - { - return nullptr; - } - jSurface surf = (jSurface)malloc(sizeof(jSurface_s)); - surf->w = w; - surf->h = h; - surf->data = pixels; - free(buffer); - return surf; -} - -// Carga una palette desde un fichero .gif -void Surface::loadPalette(const char *filename) -{ - FILE *f = fopen(filename, "rb"); - if (!f) - { - return; - } - - fseek(f, 0, SEEK_END); - long size = ftell(f); - fseek(f, 0, SEEK_SET); - Uint8 *buffer = (Uint8 *)malloc(size); - fread(buffer, size, 1, f); - fclose(f); - - Uint32 *pal = LoadPalette(buffer); - if (pal == nullptr) - { - return; - } - free(buffer); - for (int i = 0; i < 256; ++i) - { - palette[i] = pal[i]; - } -} - -// Cambia un color de la palette -void Surface::setPaletteColor(int index, Uint32 color) -{ - palette[index] = color; -} - -// Limpia la surface -void Surface::cls(Uint8 color) -{ - for (int i = 0; i < surface->w * surface->h; ++i) - { - surface->data[i] = color; - } -} - -// Volca la surface a una textura -void Surface::flip(SDL_Texture *texture) -{ - Uint32 *pixels; - int pitch; - SDL_LockTexture(texture, nullptr, (void **)&pixels, &pitch); - for (int i = 0; i < surface->w * surface->h; ++i) - { - pixels[i] = palette[surface->data[i]]; - } - SDL_UnlockTexture(texture); -} - -// Escribe pixels en destSurface -void Surface::putPixel(int x, int y, Uint8 color) -{ - // if (x < 0 || y < 0 || x >= jDestSurf->w || y >= jDestSurf->h || color == transparentColor) - if (x < 0 || y < 0 || x >= destSurface->w || y >= destSurface->h) - { - return; - } - destSurface->data[x + y * destSurface->w] = color; -} - -// Lee pixels en surface -Uint8 Surface::getPixel(int x, int y) -{ - return surface->data[x + y * surface->w]; -} - -// Copia pixels desde surface a destSurface -void Surface::blit(int dx, int dy, int sx, int sy, int w, int h) -{ - if (surface == nullptr) - { - return; - } - - for (int iy = 0; iy < h; ++iy) - { - for (int ix = 0; ix < w; ++ix) - { - putPixel(dx + ix, dy + iy, getPixel(sx + ix, sy + iy)); - } - } -} - -// Limpia la paleta -void Surface::clearPalette(Uint32 color) -{ - for (int i = 0; i < 256; ++i) - { - palette[i] = color; - } -} \ No newline at end of file diff --git a/source/common/surface.h b/source/common/surface.h deleted file mode 100644 index 91f3da8..0000000 --- a/source/common/surface.h +++ /dev/null @@ -1,63 +0,0 @@ -#pragma once - -#include - -typedef struct jSurface_s *jSurface; - -class Surface -{ -private: - // Variables - jSurface surface; - jSurface destSurface; - SDL_Texture *texture; - Uint32 palette[256]; - int transparentColor; - - // Escribe pixels en destSurface - void putPixel(int x, int y, Uint8 color); - - // Lee pixels en surface - Uint8 getPixel(int x, int y); - - // Limpia la paleta - void clearPalette(Uint32 color); - -public: - // Constructor - Surface(const char *filename, jSurface dest); - Surface(int width, int height, SDL_Texture *tex); - - // Destructor - ~Surface(); - - // Crea una surface - jSurface newSurface(int w, int h); - - // Borra una surface - void deleteSurface(jSurface surf); - - // Establece una surface de destino donde hacer el blit - void setDest(jSurface surf); - - // Establece una textura donde hacer el flip - void setTexture(SDL_Texture *tex); - - // Crea una surface a partir de un fichero .gif - jSurface loadSurface(const char *filename); - - // Carga una paleta desde un fichero .gif - void loadPalette(const char *filename); - - // Copia pixels desde surface a destSurface - void blit(int dx, int dy, int sx, int sy, int w, int h); - - // Cambia un color de la paleta - void setPaletteColor(int index, Uint32 color); - - // Limpia la surface - void cls(Uint8 color); - - // Volca la surface a una textura - void flip(SDL_Texture *texture); -}; \ No newline at end of file diff --git a/source/director.cpp b/source/director.cpp index 93fa965..6ae2d85 100644 --- a/source/director.cpp +++ b/source/director.cpp @@ -320,25 +320,24 @@ bool Director::setFileList() asset->add(prefix + "/data/shaders/crtpi.glsl", t_data); // Texturas - asset->add(prefix + "/data/gfx/balloon1.gif", t_bitmap); + asset->add(prefix + "/data/gfx/balloon1.png", t_bitmap); asset->add(prefix + "/data/gfx/balloon1.ani", t_animation); - asset->add(prefix + "/data/gfx/balloon2.gif", t_bitmap); + asset->add(prefix + "/data/gfx/balloon2.png", t_bitmap); asset->add(prefix + "/data/gfx/balloon2.ani", t_animation); - asset->add(prefix + "/data/gfx/balloon3.gif", t_bitmap); + asset->add(prefix + "/data/gfx/balloon3.png", t_bitmap); asset->add(prefix + "/data/gfx/balloon3.ani", t_animation); - asset->add(prefix + "/data/gfx/balloon4.gif", t_bitmap); + asset->add(prefix + "/data/gfx/balloon4.png", t_bitmap); asset->add(prefix + "/data/gfx/balloon4.ani", t_animation); - asset->add(prefix + "/data/gfx/balloon1_explosion.png", t_bitmap); - asset->add(prefix + "/data/gfx/balloon1_explosion.ani", t_animation); - asset->add(prefix + "/data/gfx/balloon2_explosion.png", t_bitmap); - asset->add(prefix + "/data/gfx/balloon2_explosion.ani", t_animation); - asset->add(prefix + "/data/gfx/balloon3_explosion.png", t_bitmap); - asset->add(prefix + "/data/gfx/balloon3_explosion.ani", t_animation); - asset->add(prefix + "/data/gfx/balloon4_explosion.png", t_bitmap); - asset->add(prefix + "/data/gfx/balloon4_explosion.ani", t_animation); - asset->add(prefix + "/data/gfx/balloon_blue_pal.gif", t_palette); - asset->add(prefix + "/data/gfx/balloon_yellow_pal.gif", t_palette); - asset->add(prefix + "/data/gfx/balloon_green_pal.gif", t_palette); + + asset->add(prefix + "/data/gfx/explosion1.png", t_bitmap); + asset->add(prefix + "/data/gfx/explosion1.ani", t_animation); + asset->add(prefix + "/data/gfx/explosion2.png", t_bitmap); + asset->add(prefix + "/data/gfx/explosion2.ani", t_animation); + asset->add(prefix + "/data/gfx/explosion3.png", t_bitmap); + asset->add(prefix + "/data/gfx/explosion3.ani", t_animation); + asset->add(prefix + "/data/gfx/explosion4.png", t_bitmap); + asset->add(prefix + "/data/gfx/explosion4.ani", t_animation); + asset->add(prefix + "/data/gfx/powerball.png", t_bitmap); asset->add(prefix + "/data/gfx/powerball.ani", t_animation); @@ -353,11 +352,10 @@ bool Director::setFileList() asset->add(prefix + "/data/gfx/game_text.png", t_bitmap); asset->add(prefix + "/data/gfx/intro.png", t_bitmap); + asset->add(prefix + "/data/gfx/logo_jailgames.png", t_bitmap); asset->add(prefix + "/data/gfx/logo_jailgames_mini.png", t_bitmap); asset->add(prefix + "/data/gfx/logo_since_1998.png", t_bitmap); - asset->add(prefix + "/data/gfx/menu_game_over.png", t_bitmap); - asset->add(prefix + "/data/gfx/menu_game_over_end.png", t_bitmap); asset->add(prefix + "/data/gfx/item_points1_disk.png", t_bitmap); asset->add(prefix + "/data/gfx/item_points1_disk.ani", t_animation); diff --git a/source/game.cpp b/source/game.cpp index a48762f..8fdee22 100644 --- a/source/game.cpp +++ b/source/game.cpp @@ -331,48 +331,34 @@ void Game::loadMedia() // Texturas bulletTexture = new Texture(renderer, asset->get("bullet.png")); gameTextTexture = new Texture(renderer, asset->get("game_text.png")); - gameOverTexture = new Texture(renderer, asset->get("menu_game_over.png")); - gameOverEndTexture = new Texture(renderer, asset->get("menu_game_over_end.png")); // Texturas - Globos - Texture *balloon1Texture = new Texture(renderer, asset->get("balloon1.gif")); - balloon1Texture->addPalette(asset->get("balloon_blue_pal.gif")); - balloon1Texture->addPalette(asset->get("balloon_yellow_pal.gif")); - balloon1Texture->addPalette(asset->get("balloon_green_pal.gif")); + Texture *balloon1Texture = new Texture(renderer, asset->get("balloon1.png")); balloonTextures.push_back(balloon1Texture); - Texture *balloon2Texture = new Texture(renderer, asset->get("balloon2.gif")); - balloon2Texture->addPalette(asset->get("balloon_blue_pal.gif")); - balloon2Texture->addPalette(asset->get("balloon_yellow_pal.gif")); - balloon2Texture->addPalette(asset->get("balloon_green_pal.gif")); + Texture *balloon2Texture = new Texture(renderer, asset->get("balloon2.png")); balloonTextures.push_back(balloon2Texture); - Texture *balloon3Texture = new Texture(renderer, asset->get("balloon3.gif")); - balloon3Texture->addPalette(asset->get("balloon_blue_pal.gif")); - balloon3Texture->addPalette(asset->get("balloon_yellow_pal.gif")); - balloon3Texture->addPalette(asset->get("balloon_green_pal.gif")); + Texture *balloon3Texture = new Texture(renderer, asset->get("balloon3.png")); balloonTextures.push_back(balloon3Texture); - Texture *balloon4Texture = new Texture(renderer, asset->get("balloon4.gif")); - balloon4Texture->addPalette(asset->get("balloon_blue_pal.gif")); - balloon4Texture->addPalette(asset->get("balloon_yellow_pal.gif")); - balloon4Texture->addPalette(asset->get("balloon_green_pal.gif")); + Texture *balloon4Texture = new Texture(renderer, asset->get("balloon4.png")); balloonTextures.push_back(balloon4Texture); Texture *balloon5Texture = new Texture(renderer, asset->get("powerball.png")); balloonTextures.push_back(balloon5Texture); // Texturas - Explosiones - Texture *explosion1Texture = new Texture(renderer, asset->get("balloon1_explosion.png")); + Texture *explosion1Texture = new Texture(renderer, asset->get("explosion1.png")); explosionsTextures.push_back(explosion1Texture); - Texture *explosion2Texture = new Texture(renderer, asset->get("balloon2_explosion.png")); + Texture *explosion2Texture = new Texture(renderer, asset->get("explosion2.png")); explosionsTextures.push_back(explosion2Texture); - Texture *explosion3Texture = new Texture(renderer, asset->get("balloon3_explosion.png")); + Texture *explosion3Texture = new Texture(renderer, asset->get("explosion3.png")); explosionsTextures.push_back(explosion3Texture); - Texture *explosion4Texture = new Texture(renderer, asset->get("balloon4_explosion.png")); + Texture *explosion4Texture = new Texture(renderer, asset->get("explosion4.png")); explosionsTextures.push_back(explosion4Texture); // Texturas - Items @@ -454,19 +440,19 @@ void Game::loadMedia() // Animaciones -- Explosiones std::vector *explosions1Animation = new std::vector; - loadAnimations(asset->get("balloon1_explosion.ani"), explosions1Animation); + loadAnimations(asset->get("explosion1.ani"), explosions1Animation); explosionsAnimations.push_back(explosions1Animation); std::vector *explosions2Animation = new std::vector; - loadAnimations(asset->get("balloon2_explosion.ani"), explosions2Animation); + loadAnimations(asset->get("explosion2.ani"), explosions2Animation); explosionsAnimations.push_back(explosions2Animation); std::vector *explosions3Animation = new std::vector; - loadAnimations(asset->get("balloon3_explosion.ani"), explosions3Animation); + loadAnimations(asset->get("explosion3.ani"), explosions3Animation); explosionsAnimations.push_back(explosions3Animation); std::vector *explosions4Animation = new std::vector; - loadAnimations(asset->get("balloon4_explosion.ani"), explosions4Animation); + loadAnimations(asset->get("explosion4.ani"), explosions4Animation); explosionsAnimations.push_back(explosions4Animation); // Animaciones -- Items @@ -530,8 +516,6 @@ void Game::unloadMedia() // Texturas delete bulletTexture; delete gameTextTexture; - delete gameOverTexture; - delete gameOverEndTexture; for (auto texture : player1Textures) { diff --git a/source/game.h b/source/game.h index 1140264..0f35643 100644 --- a/source/game.h +++ b/source/game.h @@ -101,8 +101,6 @@ private: std::vector> playerTextures; // Vector con todas las texturas de los jugadores; 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 std::vector *> itemAnimations; // Vector con las animaciones de los items std::vector *> playerAnimations; // Vector con las animaciones del jugador