From 4a359c46f55d1a200c1f83457cc071555dc57cb7 Mon Sep 17 00:00:00 2001 From: Raimon Zamora Date: Tue, 30 Dec 2014 22:46:46 +0100 Subject: [PATCH] Primer commit --- .hgignore | 3 + bola.cpp | 68 +++++ bola.h | 23 ++ data.jrf | Bin 0 -> 157894 bytes engendro.cpp | 63 ++++ engendro.h | 18 ++ info.h | 11 + jdraw8.cpp | 238 +++++++++++++++ jdraw8.h | 53 ++++ jfile.cpp | 162 ++++++++++ jfile.h | 7 + jgame.cpp | 43 +++ jgame.h | 27 ++ jinput.cpp | 44 +++ jinput.h | 10 + jsound.cpp | 72 +++++ jsound.h | 28 ++ main.cpp | 56 ++++ makefile | 7 + mapa.cpp | 272 +++++++++++++++++ mapa.h | 64 ++++ marcador.cpp | 62 ++++ marcador.h | 24 ++ modulegame.cpp | 152 ++++++++++ modulegame.h | 36 +++ modulesequence.cpp | 739 +++++++++++++++++++++++++++++++++++++++++++++ modulesequence.h | 25 ++ momia.cpp | 177 +++++++++++ momia.h | 28 ++ prota.cpp | 163 ++++++++++ prota.h | 22 ++ sprite.cpp | 37 +++ sprite.h | 44 +++ 33 files changed, 2778 insertions(+) create mode 100644 .hgignore create mode 100755 bola.cpp create mode 100755 bola.h create mode 100755 data.jrf create mode 100755 engendro.cpp create mode 100755 engendro.h create mode 100755 info.h create mode 100755 jdraw8.cpp create mode 100755 jdraw8.h create mode 100755 jfile.cpp create mode 100755 jfile.h create mode 100755 jgame.cpp create mode 100755 jgame.h create mode 100755 jinput.cpp create mode 100755 jinput.h create mode 100755 jsound.cpp create mode 100755 jsound.h create mode 100755 main.cpp create mode 100755 makefile create mode 100755 mapa.cpp create mode 100755 mapa.h create mode 100755 marcador.cpp create mode 100755 marcador.h create mode 100755 modulegame.cpp create mode 100755 modulegame.h create mode 100755 modulesequence.cpp create mode 100755 modulesequence.h create mode 100755 momia.cpp create mode 100755 momia.h create mode 100755 prota.cpp create mode 100755 prota.h create mode 100755 sprite.cpp create mode 100755 sprite.h diff --git a/.hgignore b/.hgignore new file mode 100644 index 0000000..27ad211 --- /dev/null +++ b/.hgignore @@ -0,0 +1,3 @@ +syntax: glob + +recursos/* diff --git a/bola.cpp b/bola.cpp new file mode 100755 index 0000000..fca6c70 --- /dev/null +++ b/bola.cpp @@ -0,0 +1,68 @@ +#include "bola.h" +#include "jgame.h" + +Bola::Bola( JD8_Surface gfx, Info* info, Prota* sam ) : Sprite( gfx ) { + this->info = info; + this->sam = sam; + + this->entitat = (Entitat*)malloc( sizeof( Entitat ) ); + // Frames + this->entitat->num_frames = 2; + this->entitat->frames = (Frame*)malloc( this->entitat->num_frames * sizeof( Frame ) ); + this->entitat->frames[0].w = 15; + this->entitat->frames[0].h = 15; + this->entitat->frames[0].x = 30; + this->entitat->frames[0].y = 155; + this->entitat->frames[1].w = 15; + this->entitat->frames[1].h = 15; + this->entitat->frames[1].x = 45; + this->entitat->frames[1].y = 155; + + // Animacions + this->entitat->num_animacions = 1; + this->entitat->animacions = (Animacio*)malloc( this->entitat->num_animacions * sizeof( Animacio ) ); + this->entitat->animacions[0].num_frames = 2; + this->entitat->animacions[0].frames = (Uint8*)malloc( 2 ); + this->entitat->animacions[0].frames[0] = 0; + this->entitat->animacions[0].frames[1] = 1; + + this->cur_frame = 0; + this->o = 0; + this->cycles_per_frame = 4; + this->x = 20; + this->y = 100; + this->contador = 0; + +} + +void Bola::draw() { + + if( this->contador == 0 ) Sprite::draw(); + +} + +void Bola::update() { + + if( this->contador == 0 ) { + // Augmentem la x + this->x++; + if( this->x == 280 ) this->contador = 200; + + // Augmentem el frame + if( JG_GetCycleCounter() % this->cycles_per_frame == 0 ) { + this->cur_frame++; + if( this->cur_frame == this->entitat->animacions[this->o].num_frames ) this->cur_frame = 0; + } + + // Comprovem si ha tocat a Sam + if( this->x > ( this->sam->x - 7 ) && this->x < ( this->sam->x + 7 ) && this->y > ( this->sam->y - 7 ) && this->y < ( this->sam->y + 7 ) ) { + this->contador = 200; + this->info->vida--; + if( this->info->vida == 0 ) this->sam->o = 5; + } + } else { + this->contador--; + if( this->contador == 0 ) this->x = 20; + } + +} diff --git a/bola.h b/bola.h new file mode 100755 index 0000000..392e180 --- /dev/null +++ b/bola.h @@ -0,0 +1,23 @@ +#pragma once + +#include "sprite.h" +#include "prota.h" +#include "info.h" + +class Bola : public Sprite { + +public: + + Bola( JD8_Surface gfx, Info* info, Prota* sam ); + + void draw(); + void update(); + + +protected: + + Uint8 contador; + Prota* sam; + Info* info; + +}; diff --git a/data.jrf b/data.jrf new file mode 100755 index 0000000000000000000000000000000000000000..7da3b2d7157cd864c867dde4dc642cce14980dbb GIT binary patch literal 157894 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%0Av9`4gll= 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%0DVJ&K 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 literal 0 HcmV?d00001 diff --git a/engendro.cpp b/engendro.cpp new file mode 100755 index 0000000..74c4728 --- /dev/null +++ b/engendro.cpp @@ -0,0 +1,63 @@ +#include "engendro.h" +#include "jgame.h" + +Engendro::Engendro( JD8_Surface gfx, Uint16 x, Uint16 y ) : Sprite( gfx ) { + + this->entitat = (Entitat*)malloc( sizeof( Entitat ) ); + // Frames + this->entitat->num_frames = 4; + this->entitat->frames = (Frame*)malloc( this->entitat->num_frames * sizeof( Frame ) ); + + Uint8 frame = 0; + for( int y = 50; y <= 65; y+=15 ) { + for( int x = 225; x <= 240; x+=15 ) { + this->entitat->frames[frame].w = 15; + this->entitat->frames[frame].h = 15; + this->entitat->frames[frame].x = x; + this->entitat->frames[frame].y = y; + frame++; + } + } + + // Animacions + this->entitat->num_animacions = 1; + this->entitat->animacions = (Animacio*)malloc( this->entitat->num_animacions * sizeof( Animacio ) ); + this->entitat->animacions[0].num_frames = 6; + this->entitat->animacions[0].frames = (Uint8*)malloc( 6 ); + this->entitat->animacions[0].frames[0] = 0; + this->entitat->animacions[0].frames[1] = 1; + this->entitat->animacions[0].frames[2] = 2; + this->entitat->animacions[0].frames[3] = 3; + this->entitat->animacions[0].frames[4] = 2; + this->entitat->animacions[0].frames[5] = 1; + + this->cur_frame = 0; + this->vida = 18; + this->x = x; + this->y = y; + this->o = 0; + this->cycles_per_frame = 30; + +} + +void Engendro::draw() { + + Sprite::draw(); + +} + +bool Engendro::update() { + + bool mort = false; + + if( JG_GetCycleCounter() % this->cycles_per_frame == 0 ) { + this->cur_frame++; + if( this->cur_frame == this->entitat->animacions[this->o].num_frames ) this->cur_frame = 0; + this->vida--; + } + + + if( vida == 0 ) mort = true; + + return mort; +} diff --git a/engendro.h b/engendro.h new file mode 100755 index 0000000..525deae --- /dev/null +++ b/engendro.h @@ -0,0 +1,18 @@ +#pragma once + +#include "sprite.h" + +class Engendro : public Sprite { + +public: + + Engendro( JD8_Surface gfx, Uint16 x, Uint16 y ); + + void draw(); + bool update(); + +protected: + + Uint8 vida; + +}; diff --git a/info.h b/info.h new file mode 100755 index 0000000..453438e --- /dev/null +++ b/info.h @@ -0,0 +1,11 @@ +#pragma once + +struct Info { + int num_piramide; + int num_habitacio; + int diners; + int diamants; + int vida; + int momies; + int engendros; +}; diff --git a/jdraw8.cpp b/jdraw8.cpp new file mode 100755 index 0000000..7bce66d --- /dev/null +++ b/jdraw8.cpp @@ -0,0 +1,238 @@ +#include "jdraw8.h" +#include "SDL2/SDL_image.h" +#include "SDL2/SDL_opengl.h" +#include "jfile.h" +#include + +JD8_Surface screen = NULL; +JD8_Palette main_palette = NULL; +Uint32* pixel_data = NULL; + +int screenWidth = 320; +int screenHeight = 200; + +Uint32 contadorFPS = 0; +Uint32 tempsFPS = SDL_GetTicks(); +char *fps = (char *)malloc(10); + +SDL_GLContext gContext; +SDL_Window* window = NULL; +SDL_Surface* screenSurface = NULL; + +void JD8_Init(char *title) { + screen = (JD8_Surface)calloc( 1, 64000 ); + main_palette = (JD8_Palette)calloc( 1, 768 ); + pixel_data = (Uint32*)calloc( 1, 1048576 ); + + //SDL_SetVideoMode( 640, 480, 32, SDL_OPENGL ); + + window = SDL_CreateWindow( title, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN ); + gContext = SDL_GL_CreateContext( window ); + //if( SDL_GL_SetSwapInterval( 1 ) < 0 ) { printf( "Warning: Unable to set VSync! SDL Error: %s\n", SDL_GetError() ); } + + SDL_GL_SetAttribute( SDL_GL_CONTEXT_MAJOR_VERSION, 2 ); + SDL_GL_SetAttribute( SDL_GL_CONTEXT_MINOR_VERSION, 1 ); + + glClearColor( 0, 0, 0, 0 ); + SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); + SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8); + glMatrixMode( GL_PROJECTION ); + glLoadIdentity(); + glOrtho( 0, 320, 200, 0, -1, 1 ); + glMatrixMode( GL_MODELVIEW ); + glLoadIdentity(); + glEnable(GL_TEXTURE_2D); + + GLuint textureName; + + glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + glGenTextures(1, &textureName); + glBindTexture(GL_TEXTURE_2D, textureName); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 512, 512, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixel_data); +} + +void JD8_Quit() { + if( screen != NULL ) free( screen ); + if( main_palette != NULL ) free( main_palette ); + if( pixel_data != NULL ) free( pixel_data ); + SDL_DestroyWindow( window ); +} + +void JD8_ClearScreen(Uint8 color) { + memset( screen, color, 64000 ); +} + +JD8_Surface JD8_NewSurface() { + JD8_Surface surface = (JD8_Surface)malloc( 64000 ); + memset( surface, 0, 64000 ); + return surface; +} + +JD8_Surface JD8_LoadSurface(char *file) { + int filesize = 0; + char *buffer = JF_GetBufferFromResource(file, filesize); + + SDL_RWops *rw = SDL_RWFromMem(buffer, filesize); + SDL_Surface *temp = IMG_Load_RW(rw, 1); + + free(buffer); + + if (temp == NULL) { + printf("Unable to load bitmap: %s\n", SDL_GetError()); + exit(1); + } + + JD8_Surface image = JD8_NewSurface(); + memcpy( image, temp->pixels, 64000 ); + + SDL_FreeSurface(temp); + return image; +} + +JD8_Palette JD8_LoadPalette(char *file) { + int filesize = 0; + char *buffer = NULL; + buffer = JF_GetBufferFromResource(file, filesize); + + SDL_RWops *rw = NULL; + rw = SDL_RWFromMem(buffer, filesize); + if( rw == NULL ) { printf("ERROR: No s'ha pogut crear el RWops"); exit(1); } + + SDL_Surface *temp = NULL; + temp = IMG_Load_RW(rw, 1); + if( temp == NULL ) { printf("ERROR! No s'ha pogut crear la SDL_Surface: %s", SDL_GetError()); exit(1); } + + free(buffer); + + JD8_Palette palette = (JD8_Palette)malloc( 768 ); + + for( int i = 0; i < 256; i++ ) { + palette[i].r = temp->format->palette->colors[i].r; + palette[i].g = temp->format->palette->colors[i].g; + palette[i].b = temp->format->palette->colors[i].b; + } + + SDL_FreeSurface(temp); + + return palette; +} + +void JD8_SetScreenPalette(JD8_Palette palette) { + if( main_palette != NULL) free( main_palette ); + main_palette = palette; +} + +void JD8_Blit(JD8_Surface surface) { + memcpy( screen, surface, 64000 ); +} + +void JD8_Blit(int x, int y, JD8_Surface surface, int sx, int sy, int sw, int sh) { + int src_pointer = sx + (sy*320); + int dst_pointer = x + (y*320); + for( int i = 0; i < sh; i++ ) { + memcpy( &screen[dst_pointer], &surface[src_pointer], sw ); + src_pointer += 320; + dst_pointer += 320; + } +} + +void JD8_BlitToSurface(int x, int y, JD8_Surface surface, int sx, int sy, int sw, int sh, JD8_Surface dest) { + int src_pointer = sx + (sy*320); + int dst_pointer = x + (y*320); + for( int i = 0; i < sh; i++ ) { + memcpy( &dest[dst_pointer], &surface[src_pointer], sw ); + src_pointer += 320; + dst_pointer += 320; + } +} + +void JD8_BlitCK(int x, int y, JD8_Surface surface, int sx, int sy, int sw, int sh, Uint8 colorkey ) { + int src_pointer = sx + (sy*320); + int dst_pointer = x + (y*320); + for( int j = 0; j < sh; j++ ) { + for( int i = 0; i < sw; i++ ) { + if( surface[src_pointer+i] != colorkey ) screen[dst_pointer+i] = surface[src_pointer+i]; + } + src_pointer += 320; + dst_pointer += 320; + } +} + +void JD8_BlitCKToSurface(int x, int y, JD8_Surface surface, int sx, int sy, int sw, int sh, JD8_Surface dest, Uint8 colorkey ) { + int src_pointer = sx + (sy*320); + int dst_pointer = x + (y*320); + for( int j = 0; j < sh; j++ ) { + for( int i = 0; i < sw; i++ ) { + if( surface[src_pointer+i] != colorkey ) dest[dst_pointer+i] = surface[src_pointer+i]; + } + src_pointer += 320; + dst_pointer += 320; + } +} + +void JD8_Flip() { + for( int x = 0; x < 320; x++ ) { + for( int y = 0; y < 200; y++ ) { + Uint32 color = 0xFF000000 + main_palette[screen[x + ( y * 320 )]].r + ( main_palette[screen[x + ( y * 320 )]].g << 8 ) + ( main_palette[screen[x + ( y * 320 )]].b << 16 ); + pixel_data[y + ( x * 512 )] = color; + } + } + glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, 512, 512, GL_RGBA, GL_UNSIGNED_BYTE, pixel_data); + + glBegin( GL_QUADS ); + glTexCoord2f( 0.0, 0.0 ); + glVertex3f( 0.0, 0.0, 0.0 ); + + glTexCoord2f( 0.0, 1.0 ); + glVertex3f( 512.0, 0.0, 0.0 ); + + glTexCoord2f( 1.0, 1.0 ); + glVertex3f( 512.0, 512.0, 0.0 ); + + glTexCoord2f( 1.0, 0.0 ); + glVertex3f( 0.0, 512.0, 0.0 ); + glEnd(); + + SDL_GL_SwapWindow(window); +} + +void JD8_FreeSurface(JD8_Surface surface) { + free( surface ); +} + +Uint8 JD8_GetPixel( JD8_Surface surface, int x, int y ) { + return surface[x + (y*320)]; +} + +void JD8_PutPixel( JD8_Surface surface, int x, int y, Uint8 pixel ) { + surface[x + (y*320)] = pixel; +} + +void JD8_FadeOut() { + for( int j = 0; j < 32; j++ ) { + for( int i = 0; i < 256; i++ ) { + if( main_palette[i].r >= 8 ) main_palette[i].r-=8; else main_palette[i].r=0; + if( main_palette[i].g >= 8 ) main_palette[i].g-=8; else main_palette[i].g=0; + if( main_palette[i].b >= 8 ) main_palette[i].b-=8; else main_palette[i].b=0; + } + JD8_Flip(); + } +} + +#define MAX(a, b) (a) > (b) ? (a) : (b) + +void JD8_FadeToPal( JD8_Palette pal ) { + for( int j = 0; j < 32; j++ ) { + for( int i = 0; i < 256; i++ ) { + if( main_palette[i].r <= int(pal[i].r)-8 ) main_palette[i].r+=8; else main_palette[i].r=pal[i].r; + if( main_palette[i].g <= int(pal[i].g)-8 ) main_palette[i].g+=8; else main_palette[i].g=pal[i].g; + if( main_palette[i].b <= int(pal[i].b)-8 ) main_palette[i].b+=8; else main_palette[i].b=pal[i].b; + } + JD8_Flip(); + } +} diff --git a/jdraw8.h b/jdraw8.h new file mode 100755 index 0000000..c854aaf --- /dev/null +++ b/jdraw8.h @@ -0,0 +1,53 @@ +#pragma once +#include "SDL2/SDL.h" + +struct Color { + Uint8 r; + Uint8 g; + Uint8 b; +}; + +typedef Uint8* JD8_Surface; +typedef Color* JD8_Palette; + +void JD8_Init(char *title); + +void JD8_Quit(); + +void JD8_ClearScreen(Uint8 color); + +JD8_Surface JD8_NewSurface(); + +JD8_Surface JD8_LoadSurface(char *file); + +JD8_Palette JD8_LoadPalette(char *file); + +void JD8_SetScreenPalette(JD8_Palette palette); + +void JD8_Blit(JD8_Surface surface); + +void JD8_Blit(int x, int y, JD8_Surface surface, int sx, int sy, int sw, int sh); + +void JD8_BlitToSurface(int x, int y, JD8_Surface surface, int sx, int sy, int sw, int sh, JD8_Surface dest); + +void JD8_BlitCK(int x, int y, JD8_Surface surface, int sx, int sy, int sw, int sh, Uint8 colorkey ); + +void JD8_BlitCKToSurface(int x, int y, JD8_Surface surface, int sx, int sy, int sw, int sh, JD8_Surface dest, Uint8 colorkey ); + +void JD8_Flip(); + +void JD8_FreeSurface(JD8_Surface surface); + +Uint8 JD8_GetPixel( JD8_Surface surface, int x, int y ); + +void JD8_PutPixel( JD8_Surface surface, int x, int y, Uint8 pixel ); + +void JD8_FadeOut(); + +void JD8_FadeToPal( JD8_Palette pal ); + +//JD_Font JD_LoadFont( char *file, int width, int height); + +//void JD_DrawText( int x, int y, JD_Font *source, char *text); + +//char *JD_GetFPS(); diff --git a/jfile.cpp b/jfile.cpp new file mode 100755 index 0000000..92101cf --- /dev/null +++ b/jfile.cpp @@ -0,0 +1,162 @@ +#include "jfile.h" +#include "SDL2/SDL.h" +#include + +#pragma pack(push,1) + +struct DATA_Header { + char magic[4]; + Uint32 num_files; + Uint32 index_offset; +}; + +struct DATA_Info { + Uint32 offset; + Uint32 length; + char name[13]; +}; + +struct DATA_Index { + DATA_Info* file_info; +}; + +struct DATA_File { + DATA_Header header; + DATA_Index index; +}; + +#pragma pack(pop) + +const char *resourceFileName = "data.jrf"; +DATA_File *data_file = NULL; + +void JF_SetResourceFile(char *p_resourceFileName) { + resourceFileName = p_resourceFileName; +} + + +void JF_GetDataFile() { + std::ifstream fd( resourceFileName, std::ios::in | std::ios::binary ); + + if( fd.fail() ) { + perror("No s'ha pogut obrir l'arxiu de recursos"); + exit(1); + } + + data_file = (DATA_File*)malloc( sizeof( DATA_File ) ); + + fd.read( (char*)&data_file->header, sizeof( DATA_Header ) ); + + fd.seekg( data_file->header.index_offset ); + + data_file->index.file_info = (DATA_Info*)malloc( data_file->header.num_files * sizeof( DATA_Info ) ); + + fd.read( (char*)data_file->index.file_info, data_file->header.num_files * sizeof( DATA_Info ) ); + + fd.close(); +} + +char *JF_GetBufferFromResource(char *resourcename, int& filesize) { + + if( data_file == NULL ) { + JF_GetDataFile(); + } + + bool found = false; + int count = 0; + while( !found && count < data_file->header.num_files ) { + found = ( strcmp( resourcename, data_file->index.file_info[count].name ) == 0 ); + if( !found ) count++; + } + + if( !found ) { + perror("El recurs no s'ha trobat en l'arxiu de recursos"); + exit(1); + } + + filesize = data_file->index.file_info[count].length; + + std::ifstream fd( resourceFileName, std::ios::in | std::ios::binary ); + + if( fd.fail() ) { + perror("No s'ha pogut obrir l'arxiu de recursos"); + exit(1); + } + + fd.seekg( data_file->index.file_info[count].offset ); + + char* buffer = (char*)malloc( filesize ); + fd.read( buffer, filesize ); + + fd.close(); + + return buffer; +} + +// //Read the first INT, which will tell us how many files are in this resource +// int numfiles; +// int resultat = read(fd, &numfiles, sizeof(int)); +// +//#ifdef _WIN32 +// int final = eof(fd); +//#endif +// +// //Get the pointers to the stored files +// int *filestart = (int *) malloc(sizeof(int) * numfiles); +// resultat = read(fd, filestart, sizeof(int) * numfiles); +// +// //Loop through the files, looking for the file in question +// int filenamesize; +// char *buffer; +// int i; +// for(i=0;iindex.file_info ); + free( data_file ); + } +} diff --git a/jfile.h b/jfile.h new file mode 100755 index 0000000..3f36d29 --- /dev/null +++ b/jfile.h @@ -0,0 +1,7 @@ +#pragma once + +void JF_SetResourceFile(char *p_resourceFileName); + +char *JF_GetBufferFromResource(char *resourcename, int& filesize); + +void JF_Quit(); \ No newline at end of file diff --git a/jgame.cpp b/jgame.cpp new file mode 100755 index 0000000..29f7a2a --- /dev/null +++ b/jgame.cpp @@ -0,0 +1,43 @@ +#include "jgame.h" + +bool eixir = false; +int updateTicks = 0; +Uint32 updateTime = 0; +Uint32 cycle_counter = 0; + +void JG_Init() { + + SDL_Init( SDL_INIT_EVERYTHING ); + //SDL_WM_SetCaption( title, NULL ); + updateTime = SDL_GetTicks(); +} + +void JG_Finalize() { + SDL_Quit(); +} + +void JG_QuitSignal() { + eixir = true; +} + +bool JG_Quitting() { + return eixir; +} + +void JG_SetUpdateTicks(Uint32 milliseconds) { + updateTicks = milliseconds; +} + +bool JG_ShouldUpdate() { + if (SDL_GetTicks() - updateTime > updateTicks) { + updateTime = SDL_GetTicks(); + cycle_counter++; + return true; + } else { + return false; + } +} + +Uint32 JG_GetCycleCounter() { + return cycle_counter; +} diff --git a/jgame.h b/jgame.h new file mode 100755 index 0000000..8146f59 --- /dev/null +++ b/jgame.h @@ -0,0 +1,27 @@ +#pragma once +#include "SDL2/SDL.h" + +#ifndef NDEBUG + #ifndef DPRINT(text, ...) + #define DPRINT(text, ...) dprintf(__FILE__, __LINE__, text, __VA_ARGS__) + void dprintf(const char* szFile, long lLine, const char* fmt, ...); + #endif +#else // #ifdef NDEBUG + #ifndef DPRINT(text, ...) + #define DPRINT(text, ...) ((void)0) + #endif +#endif + +void JG_Init(); + +void JG_Finalize(); + +void JG_QuitSignal(); + +bool JG_Quitting(); + +void JG_SetUpdateTicks(Uint32 milliseconds); + +bool JG_ShouldUpdate(); + +Uint32 JG_GetCycleCounter(); diff --git a/jinput.cpp b/jinput.cpp new file mode 100755 index 0000000..ba01b35 --- /dev/null +++ b/jinput.cpp @@ -0,0 +1,44 @@ +#include "jinput.h" +#include "jgame.h" + +const Uint8 *keystates;// = SDL_GetKeyboardState( NULL ); +SDL_Event event; +Uint8 cheat[5]; +bool key_pressed = false; + +void JI_moveCheats( Uint8 new_key ) { + cheat[0] = cheat[1]; + cheat[1] = cheat[2]; + cheat[2] = cheat[3]; + cheat[3] = cheat[4]; + cheat[4] = new_key; +} + +void JI_Update() { + key_pressed = false; + keystates = SDL_GetKeyboardState( NULL ); + + while ( SDL_PollEvent( &event ) ) { + if ( event.type == SDL_QUIT ) JG_QuitSignal(); + if( event.type == SDL_KEYUP ) { + key_pressed = true; + JI_moveCheats( event.key.keysym.sym ); + } + } +} + +bool JI_KeyPressed(int key) { + return (keystates[key] != 0); +} + +bool JI_CheatActivated( const char* cheat_code ) { + bool found = true; + for( int i = 0; i < strlen( cheat_code ); i++ ) { + if( cheat[i] != cheat_code[i] ) found = false; + } + return found; +} + +bool JI_AnyKey() { + return key_pressed; +} diff --git a/jinput.h b/jinput.h new file mode 100755 index 0000000..d5e47be --- /dev/null +++ b/jinput.h @@ -0,0 +1,10 @@ +#pragma once +#include "SDL2/SDL.h" + + void JI_Update(); + + bool JI_KeyPressed(int key); + + bool JI_CheatActivated( const char* cheat_code ); + + bool JI_AnyKey(); diff --git a/jsound.cpp b/jsound.cpp new file mode 100755 index 0000000..7c8f9a2 --- /dev/null +++ b/jsound.cpp @@ -0,0 +1,72 @@ +#include "jsound.h" +#include "jfile.h" + +Mix_Music *music = NULL; + +bool JS_Init() { + Mix_OpenAudio(MIX_DEFAULT_FREQUENCY, MIX_DEFAULT_FORMAT, 2, 1024); + Mix_AllocateChannels(8); + return true; +} + +void JS_LoadMusic(char *musicFilename) +{ + if (music != NULL) { + Mix_HaltMusic(); + Mix_FreeMusic(music); + } + Mix_VolumeMusic(MIX_MAX_VOLUME); + + int filesize = 0; + char *buffer = JF_GetBufferFromResource(musicFilename, filesize); + + SDL_RWops *rw = SDL_RWFromMem(buffer, filesize); + music = Mix_LoadMUS_RW(rw, 1); + +} + +void JS_SetMusicVolume(int volume) { + Mix_VolumeMusic(volume); +} + +void JS_PlayMusic(int loops) { + Mix_PlayMusic(music, loops); +} + +void JS_PauseMusic() { + Mix_PauseMusic(); +} + +void JS_FadeOutMusic() { + Mix_FadeOutMusic(500); +} + +bool JS_MusicPlaying() { + return (Mix_PlayingMusic() == 1);// && (Mix_FadingMusic() != MIX_FADING_OUT); +} + +JS_Sound *JS_LoadSound(char *soundFilename) { + int filesize = 0; + char *buffer = JF_GetBufferFromResource(soundFilename, filesize); + + SDL_RWops *rw = SDL_RWFromMem(buffer, filesize); + return Mix_LoadWAV_RW(rw, false); +} + +void JS_SetSoundVolume(JS_Sound *sound, int volume) { + Mix_VolumeChunk(sound, volume); +} + +void JS_PlaySound(JS_Sound *sound) { + Mix_PlayChannel(-1, sound, 0); +} + +void JS_FreeSound(JS_Sound *sound) { + Mix_FreeChunk(sound); +} + +void JS_Finalize() { + Mix_FreeMusic(music); + Mix_CloseAudio(); +} + diff --git a/jsound.h b/jsound.h new file mode 100755 index 0000000..b77cd75 --- /dev/null +++ b/jsound.h @@ -0,0 +1,28 @@ +#pragma once +#include "SDL2/SDL_mixer.h" + +typedef Mix_Chunk JS_Sound; + +bool JS_Init(); + +void JS_LoadMusic(char *musicFilename); + +void JS_SetMusicVolume(int volume); + +void JS_PlayMusic(int loops); + +void JS_PauseMusic(); + +void JS_FadeOutMusic(); + +bool JS_MusicPlaying(); + +JS_Sound *JS_LoadSound(char *soundFilename); + +void JS_SetSoundVolume(JS_Sound *sound, int volume); + +void JS_PlaySound(JS_Sound *sound); + +void JS_FreeSound(JS_Sound *sound); + +void JS_Finalize(); diff --git a/main.cpp b/main.cpp new file mode 100755 index 0000000..845f172 --- /dev/null +++ b/main.cpp @@ -0,0 +1,56 @@ +#include "jgame.h" +#include "jdraw8.h" +#include "jfile.h" +#include "info.h" +#include "modulegame.h" +#include "modulesequence.h" +#include "time.h" +#include + +int main( int argc, char* args[] ) { + + char res_file[255] = ""; + strcpy(res_file, dirname(args[0])); + strcat(res_file, "/data.jrf"); + printf("ARXIU DE RECURSOS: %s\n", res_file); + JF_SetResourceFile(res_file); + + srand( time(NULL) ); + + JG_Init(); + JD8_Init("Aventures En Egipte"); + + Info info; + info.num_habitacio = 1; + info.num_piramide = 255; + info.diners = 0; + info.diamants = 0; + info.vida = 5; + info.momies = 0; + + int gameState = 1; + + while (gameState != -1) { + switch (gameState) { + case 0: + ModuleGame* moduleGame; + moduleGame = new ModuleGame( &info ); + gameState = moduleGame->Go(); + delete moduleGame; + break; + case 1: + ModuleSequence* moduleSequence; + moduleSequence = new ModuleSequence( &info ); + gameState = moduleSequence->Go(); + delete moduleSequence; + break; + } + } + + JF_Quit(); + JD8_Quit(); + JG_Finalize(); + + return 0; +} + diff --git a/makefile b/makefile new file mode 100755 index 0000000..a0a85ec --- /dev/null +++ b/makefile @@ -0,0 +1,7 @@ +TARGET=aee +all: + g++ *.cpp -w -lSDL2 -lGL -lSDL2_image -lSDL2_mixer -o $(TARGET) + +clean: + rm -rf ./$(TARGET) + diff --git a/mapa.cpp b/mapa.cpp new file mode 100755 index 0000000..3396657 --- /dev/null +++ b/mapa.cpp @@ -0,0 +1,272 @@ +#include "mapa.h" + +#include "jgame.h" +#include "jinput.h" + +Mapa::Mapa( JD8_Surface gfx, Info* info, Prota* sam ) { + + this->gfx = gfx; + this->info = info; + this->sam = sam; + + this->preparaFondoEstatic(); + this->preparaTombes(); + + this->ultim_vertex.columna = 255; + this->frame_torxes = 0; + + this->farao = false; + this->clau = false; + this->porta_oberta = false; + this->nova_momia = false; + +} + +Mapa::~Mapa(void) { + + JD8_FreeSurface( this->fondo ); + +} + +void Mapa::draw() { + + if( this->info->num_piramide != 4 ) { + switch( sam->o ) { + case 0: // Down + JD8_BlitCKToSurface( sam->x, sam->y, this->gfx, 15, 125 + sam->frame_pejades, 15, 1, this->fondo, 255 ); + break; + case 1: // Up + JD8_BlitCKToSurface( sam->x, sam->y + 15, this->gfx, 0, 125 + ( 14 - sam->frame_pejades ), 15, 1, this->fondo, 255 ); + break; + case 2: // Right + JD8_BlitCKToSurface( sam->x + 7, sam->y, this->gfx, 30 + sam->frame_pejades, 125, 1, 15, this->fondo, 255 ); + break; + case 3: // Left + JD8_BlitCKToSurface( sam->x + 8, sam->y, this->gfx, 45 + ( 14 - sam->frame_pejades ), 125, 1, 15, this->fondo, 255 ); + break; + } + } + + JD8_Blit( this->fondo ); + JD8_BlitCK( 45, 15, this->gfx, 30 + ( this->frame_torxes * 25 ), 80, 25, 15, 255 ); + JD8_BlitCK( 95, 15, this->gfx, 30 + ( this->frame_torxes * 25 ), 80, 25, 15, 255 ); + JD8_BlitCK( 195, 15, this->gfx, 30 + ( this->frame_torxes * 25 ), 80, 25, 15, 255 ); + JD8_BlitCK( 245, 15, this->gfx, 30 + ( this->frame_torxes * 25 ), 80, 25, 15, 255 ); + +}; + +void Mapa::update() { + + if( ( ( sam->x - 20 ) % 65 == 0 ) && ( ( sam->y - 30 ) % 35 == 0 ) && ( ( this->ultim_vertex.columna != ( sam->x - 20 ) / 65 ) || ( this->ultim_vertex.fila != ( sam->y - 30 ) / 35 ) ) ) { + this->vertex.columna = ( sam->x - 20 ) / 65; + this->vertex.fila = ( sam->y - 30 ) / 35; + if( this->ultim_vertex.columna != 255 ) this->comprovaUltimCami(); + this->ultim_vertex = this->vertex; + } + + if( this->porta_oberta && sam->x == 150 && sam->y == 30 ) { + if( JI_KeyPressed( SDL_SCANCODE_UP ) ) { + this->sam->o = 4; + this->sam->y -= 15; + } + } + + if( JG_GetCycleCounter()%8 == 0 ) { + this->frame_torxes++; + this->frame_torxes = this->frame_torxes % 4; + } + +} + +bool Mapa::novaMomia() { + bool resultat = nova_momia; + nova_momia = false; + return resultat; +} + +void Mapa::preparaFondoEstatic() { + + // Prepara el fondo estàtic de l'habitació + this->fondo = JD8_NewSurface(); + JD8_BlitToSurface( 9, 2, this->gfx, 60, 185, 39, 7, this->fondo ); // Text "NIVELL" + JD8_BlitToSurface( 72, 6, this->gfx, 153, 189, 3, 1, this->fondo ); // Ralleta entre num piramide i num habitacio + JD8_BlitToSurface( 130, 2, this->gfx, 225, 192, 19, 8, this->fondo ); // Montonet de monedes + signe '=' + JD8_BlitToSurface( 220, 2, this->gfx, 160, 185, 48, 7, this->fondo ); // Text "ENERGIA" + + // Pinta taulells + for( int y = 0; y < 11; y++ ) { + for( int x = 0; x < 19; x++ ) { + switch( info->num_piramide ) { + case 1: + JD8_BlitToSurface( 20+(x*15), 30+(y*15), this->gfx, 0, 80, 15, 15, this->fondo ); + break; + case 2: + JD8_BlitToSurface( 20+(x*15), 30+(y*15), this->gfx, 25, 95, 15, 15, this->fondo ); + break; + case 3: + JD8_BlitToSurface( 20+(x*15), 30+(y*15), this->gfx, 40, 95, 15, 15, this->fondo ); + break; + case 4: + JD8_BlitToSurface( 20+(x*15), 30+(y*15), this->gfx, 175 + ((rand()%3)*15), 80, 15, 15, this->fondo ); + break; + case 5: + JD8_BlitToSurface( 20+(x*15), 30+(y*15), this->gfx, 130, 80, 15, 15, this->fondo ); + break; + } + } + } + + // Pinta tombes + for( int y = 0; y < 4; y++ ) { + for( int x = 0; x < 4; x++ ) { + JD8_BlitCKToSurface( 35+(x*65), 45+(y*35), this->gfx, 0, 0, 50, 20, this->fondo, 255 ); + } + } + + // Pinta vores de les parets + JD8_BlitCKToSurface( 5, 15, this->gfx, 30, 110, 15, 15, this->fondo, 255 ); + JD8_BlitCKToSurface( 295, 15, this->gfx, 45, 110, 15, 15, this->fondo, 255 ); + JD8_BlitCKToSurface( 5, 180, this->gfx, 0, 155, 15, 20, this->fondo, 255 ); + JD8_BlitCKToSurface( 295, 180, this->gfx, 15, 155, 15, 20, this->fondo, 255 ); + + // Pinta parets verticals + for( int i = 0; i < 10; i++ ) { + JD8_BlitToSurface( 5, 30+(i*15), this->gfx, 0, 110, 15, 15, this->fondo ); + JD8_BlitToSurface( 295, 30+(i*15), this->gfx, 15, 110, 15, 15, this->fondo ); + } + + // Pinta parets hortzintals + for( int i = 0; i < 11; i++ ) { + JD8_BlitToSurface( 20+(i*25), 185, this->gfx, 0, 95, 25, 15, this->fondo ); + JD8_BlitToSurface( 20+(i*25), 15, this->gfx, 0, 95, 25, 15, this->fondo ); + } + + // Pinta la porta + JD8_BlitCKToSurface( 150, 18, this->gfx, 0, 143, 15, 12, this->fondo, 255 ); + + if( info->num_piramide == 2 ) { + JD8_BlitToSurface( 5, 100, this->gfx, 30, 140, 15, 15, this->fondo ); + } +} + +void swap( Uint8& a, Uint8& b ) { + Uint8 temp = a; + a = b; + b = temp; +} + +void Mapa::preparaTombes() { + for( int i = 0; i < 16; i++ ) { + this->tombes[i].contingut = CONTE_RES; + this->tombes[i].oberta = false; + this->tombes[i].costat[0] = false; + this->tombes[i].costat[1] = false; + this->tombes[i].costat[2] = false; + this->tombes[i].costat[3] = false; + } + this->tombes[0].contingut = CONTE_FARAO; + this->tombes[1].contingut = CONTE_CLAU; + this->tombes[2].contingut = CONTE_PERGAMI; + this->tombes[3].contingut = CONTE_MOMIA; + for( int i = 4; i < 8; i++ ) this->tombes[i].contingut = CONTE_RES; + for( int i = 8; i < 16; i++ ) this->tombes[i].contingut = CONTE_TRESOR; + + for( int i = 0; i < 50; i++ ) swap( this->tombes[rand()%16].contingut, this->tombes[rand()%16].contingut ); +} + +Uint8 minim( Uint8 a, Uint8 b ) { + return (avertex.columna - this->ultim_vertex.columna ); + Uint8 fil_aux = abs( this->vertex.fila - this->ultim_vertex.fila ); + + if( col_aux > fil_aux ) { // Camí horitzontal + Uint8 cami_fila = this->vertex.fila; + Uint8 cami_columna = minim( this->vertex.columna, this->ultim_vertex.columna ); + + Sint8 caixa_avall = ( cami_fila << 2 ) + cami_columna; + Sint8 caixa_amunt = caixa_avall - 4; + + if( caixa_avall < 16 ) { + this->tombes[caixa_avall].costat[0] = true; + this->comprovaCaixa( caixa_avall ); + } + if( caixa_amunt >= 0 ) { + this->tombes[caixa_amunt].costat[2] = true; + this->comprovaCaixa( caixa_amunt ); + } + } else { // Camí vertical + Uint8 cami_columna = this->vertex.columna; + Uint8 cami_fila = minim( this->vertex.fila, this->ultim_vertex.fila ); + + Sint8 caixa_dreta = ( cami_fila << 2 ) + cami_columna; + Sint8 caixa_esquerra = caixa_dreta - 1; + + if( caixa_dreta <= ( cami_fila << 2 ) + 3 ) { + this->tombes[caixa_dreta].costat[3] = true; + this->comprovaCaixa( caixa_dreta ); + } + if( caixa_esquerra >= ( cami_fila << 2 ) ) { + this->tombes[caixa_esquerra].costat[1] = true; + this->comprovaCaixa( caixa_esquerra ); + } + } +} + +void Mapa::comprovaCaixa( Uint8 num ) { + + if( !this->tombes[num].oberta ) { + this->tombes[num].oberta = true; + for( int i = 0; i < 4; i++ ) if( !this->tombes[num].costat[i] ) this->tombes[num].oberta = false; + + if( this->tombes[num].oberta ) { + int x = num % 4; + int y = num / 4; + switch( this->tombes[num].contingut ) { + case CONTE_RES: + JD8_BlitCKToSurface( 35+(x*65), 45+(y*35), this->gfx, 50, 0, 50, 20, this->fondo, 255 ); + break; + case CONTE_TRESOR: + JD8_BlitCKToSurface( 35+(x*65), 45+(y*35), this->gfx, 100, 0, 50, 20, this->fondo, 255 ); + info->diners++; + break; + case CONTE_FARAO: + JD8_BlitCKToSurface( 35+(x*65), 45+(y*35), this->gfx, 150, 0, 50, 20, this->fondo, 255 ); + this->farao = true; + break; + case CONTE_CLAU: + JD8_BlitCKToSurface( 35+(x*65), 45+(y*35), this->gfx, 200, 0, 50, 20, this->fondo, 255 ); + this->clau = true; + break; + case CONTE_MOMIA: + JD8_BlitCKToSurface( 35+(x*65), 45+(y*35), this->gfx, 0, 175, 50, 20, this->fondo, 255 ); + this->nova_momia = true; + break; + case CONTE_PERGAMI: + JD8_BlitCKToSurface( 35+(x*65), 45+(y*35), this->gfx, 250, 0, 50, 20, this->fondo, 255 ); + this->sam->pergami = true; + break; + case CONTE_DIAMANT: + JD8_BlitCKToSurface( 35+(x*65), 45+(y*35), this->gfx, 150, 0, 50, 20, this->fondo, 255 ); + info->diamants++; + info->diners += VALOR_DIAMANT; + break; + + } + + this->comprovaPorta(); + } + } +} + +void Mapa::comprovaPorta() { + + if( this->clau && this->farao ) { + JD8_BlitCKToSurface( 150, 18, this->gfx, 15, 143, 15, 12, this->fondo, 255 ); + porta_oberta = true; + } + +} diff --git a/mapa.h b/mapa.h new file mode 100755 index 0000000..0a60da9 --- /dev/null +++ b/mapa.h @@ -0,0 +1,64 @@ +#pragma once + +#include "jdraw8.h" + +#include "info.h" +#include "prota.h" + +#define CONTE_RES 0 +#define CONTE_TRESOR 1 +#define CONTE_FARAO 2 +#define CONTE_CLAU 3 +#define CONTE_MOMIA 4 +#define CONTE_PERGAMI 5 +#define CONTE_DIAMANT 6 +#define VALOR_DIAMANT 5 + +struct Tomba { + bool costat[4]; + Uint8 contingut; + bool oberta; +}; + +struct Vertex { + Uint8 columna; + Uint8 fila; +}; + +class Mapa { + +public: + + Mapa( JD8_Surface gfx, Info* info, Prota* sam ); + ~Mapa(void); + + void draw(); + void update(); + bool novaMomia(); + void comprovaCaixa( Uint8 num ); + + Tomba tombes[16]; + +protected: + + void preparaFondoEstatic(); + void preparaTombes(); + + void comprovaUltimCami(); + void comprovaPorta(); + + JD8_Surface gfx; + JD8_Surface fondo; + Vertex vertex; + Vertex ultim_vertex; + Info* info; + Uint8 frame_torxes; + + Prota* sam; + + bool farao; + bool clau; + bool porta_oberta; + bool nova_momia; + +}; diff --git a/marcador.cpp b/marcador.cpp new file mode 100755 index 0000000..b51b4aa --- /dev/null +++ b/marcador.cpp @@ -0,0 +1,62 @@ +#include "marcador.h" + +Marcador::Marcador( JD8_Surface gfx, Info* info, Prota* sam ) { + + this->gfx = gfx; + this->info = info; + this->sam = sam; + +} + +Marcador::~Marcador(void) { +} + +void Marcador::draw() { + + this->pintaNumero( 55, 2, this->info->num_piramide ); + this->pintaNumero( 80, 2, this->info->num_habitacio ); + + this->pintaNumero( 149, 2, this->info->diners / 100 ); + this->pintaNumero( 156, 2, ( this->info->diners % 100 ) / 10 ); + this->pintaNumero( 163, 2, this->info->diners % 10 ); + + if( this->sam->pergami ) JD8_BlitCK( 190, 1, this->gfx, 209, 185, 15, 14, 255 ); + + JD8_BlitCK( 271, 1, this->gfx, 0, 20, 15, this->info->vida*3, 255 ); + if( this->info->vida < 5 ) JD8_BlitCK( 271, 1+(this->info->vida*3), this->gfx, 75, 20, 15, 15-(this->info->vida*3), 255 ); +} + +void Marcador::pintaNumero( Uint16 x, Uint16 y, Uint8 num ) { + switch( num ) { + case 0: + JD8_BlitCK( x, y, this->gfx, 141, 193, 10, 7, 255 ); + break; + case 1: + JD8_BlitCK( x, y, this->gfx, 100, 185, 10, 7, 255 ); + break; + case 2: + JD8_BlitCK( x, y, this->gfx, 110, 185, 10, 7, 255 ); + break; + case 3: + JD8_BlitCK( x, y, this->gfx, 120, 185, 10, 7, 255 ); + break; + case 4: + JD8_BlitCK( x, y, this->gfx, 130, 185, 10, 7, 255 ); + break; + case 5: + JD8_BlitCK( x, y, this->gfx, 140, 185, 10, 7, 255 ); + break; + case 6: + JD8_BlitCK( x, y, this->gfx, 101, 193, 10, 7, 255 ); + break; + case 7: + JD8_BlitCK( x, y, this->gfx, 111, 193, 10, 7, 255 ); + break; + case 8: + JD8_BlitCK( x, y, this->gfx, 121, 193, 10, 7, 255 ); + break; + case 9: + JD8_BlitCK( x, y, this->gfx, 131, 193, 10, 7, 255 ); + break; + } +} diff --git a/marcador.h b/marcador.h new file mode 100755 index 0000000..6a6d6f5 --- /dev/null +++ b/marcador.h @@ -0,0 +1,24 @@ +#pragma once + +#include "jdraw8.h" +#include "info.h" +#include "prota.h" + +class Marcador { + +public: + + Marcador( JD8_Surface gfx, Info* info, Prota* sam ); + ~Marcador(void); + + void draw(); + +protected: + + void pintaNumero( Uint16 x, Uint16 y, Uint8 num ); + + JD8_Surface gfx; + Info* info; + Prota* sam; + +}; diff --git a/modulegame.cpp b/modulegame.cpp new file mode 100755 index 0000000..210e309 --- /dev/null +++ b/modulegame.cpp @@ -0,0 +1,152 @@ +#include "modulegame.h" + +#include "jgame.h" +#include "jdraw8.h" +#include "jinput.h" +#include "jfile.h" + +ModuleGame::ModuleGame( Info* info ) { + + this->info = info; + + this->gfx = JD8_LoadSurface( "frames.gif" ); + JG_SetUpdateTicks(10); + + this->sam = new Prota( this->gfx, this->info ); + this->mapa = new Mapa( this->gfx, this->info, this->sam ); + this->marcador = new Marcador( this->gfx, this->info, this->sam ); + if( this->info->num_piramide == 2 ) { + this->bola = new Bola( this->gfx, this->info, this->sam ); + } else { + this->bola = NULL; + } + this->momies = NULL; + + this->final = 0; + this->iniciarMomies(); + +} + +ModuleGame::~ModuleGame(void) { + + JD8_FadeOut(); + + if( this->bola != NULL ) delete this->bola; + if( this->momies != NULL ) { + this->momies->clear(); + delete this->momies; + } + delete this->marcador; + delete this->mapa; + delete this->sam; + + JD8_FreeSurface( this->gfx ); + +} + +int ModuleGame::Go() { + + this->Draw(); + JD8_FadeToPal( JD8_LoadPalette( "frames.gif" ) ); + + while (this->final == 0 && !JG_Quitting()) { + + this->Draw(); + this->Update(); + } + + if( this->final == 1 ) { + this->info->num_habitacio++; + if( this->info->num_habitacio == 6 ) { + this->info->num_habitacio = 1; + this->info->num_piramide++; + } + } + + if( JG_Quitting() ) { + return -1; + } else { + if( this->info->num_habitacio == 1 ) { + return 1; + } else { + return 0; + } + } +} + +void ModuleGame::Draw() { + + this->mapa->draw(); + this->marcador->draw(); + this->sam->draw(); + if( this->momies != NULL ) this->momies->draw(); + if( this->bola != NULL ) this->bola->draw(); + + JD8_Flip(); +} + +void ModuleGame::Update() { + if (JG_ShouldUpdate()) { + JI_Update(); + + this->final = this->sam->update(); + if( this->momies != NULL && this->momies->update() ) { + Momia* seguent = this->momies->next; + delete this->momies; + this->momies = seguent; + this->info->momies--; + } + if( this->bola != NULL ) this->bola->update(); + this->mapa->update(); + if( this->mapa->novaMomia() ) { + if( this->momies != NULL ) { + this->momies->insertar( new Momia( this->gfx, this->info, true, 0, 0, this->sam ) ); + this->info->momies++; + } else { + this->momies = new Momia( this->gfx, this->info, true, 0, 0, this->sam ); + this->info->momies++; + } + } + + if( JI_CheatActivated( "reviu" ) ) this->info->vida = 5; + if( JI_CheatActivated( "alone" ) ) { + if( this->momies != NULL ) { + this->momies->clear(); + delete this->momies; + this->momies = NULL; + this->info->momies = 0; + } + } + if( JI_CheatActivated( "obert" ) ) { + for( int i = 0; i < 16; i++ ) { + this->mapa->tombes[i].costat[0] = true; + this->mapa->tombes[i].costat[1] = true; + this->mapa->tombes[i].costat[2] = true; + this->mapa->tombes[i].costat[3] = true; + this->mapa->comprovaCaixa( i ); + } + } + + if( JI_KeyPressed( SDL_SCANCODE_ESCAPE ) ) { + JG_QuitSignal(); + } + } +} + +void ModuleGame::iniciarMomies() { + + if( this->info->num_habitacio == 10 ) { this->info->momies = 1; } else { this->info->momies++; } + + int x = 20; + int y = 170; + + for( int i = 0; i < info->momies; i++ ) { + if( this->momies == NULL) { + this->momies = new Momia( this->gfx, this->info, false, x, y, this->sam ); + } else { + this->momies->insertar( new Momia( this->gfx, this->info, false, x, y, this->sam ) ); + } + x += 65; + if( x == 345 ) { x = 20; y -= 35; } + } +} diff --git a/modulegame.h b/modulegame.h new file mode 100755 index 0000000..2a6dbab --- /dev/null +++ b/modulegame.h @@ -0,0 +1,36 @@ +#pragma once + +#include "info.h" +#include "mapa.h" +#include "prota.h" +#include "marcador.h" +#include "momia.h" +#include "bola.h" + +class ModuleGame { + +public: + + ModuleGame( Info* info ); + ~ModuleGame(void); + + int Go(); + +private: + + void Draw(); + void Update(); + + void iniciarMomies(); + + Uint8 final; + Info* info; + JD8_Surface gfx; + + Mapa* mapa; + Prota* sam; + Marcador* marcador; + Momia* momies; + Bola* bola; + +}; diff --git a/modulesequence.cpp b/modulesequence.cpp new file mode 100755 index 0000000..f00c418 --- /dev/null +++ b/modulesequence.cpp @@ -0,0 +1,739 @@ +#include "modulesequence.h" + +#include "jgame.h" +#include "jdraw8.h" +#include "jinput.h" + +ModuleSequence::ModuleSequence( Info* info ) { + this->info = info; +} + +ModuleSequence::~ModuleSequence(void) { +} + +int ModuleSequence::Go() { + + if( this->info->num_piramide == 6 && this->info->diners < 200 ) this->info->num_piramide = 7; + + switch( this->info->num_piramide ) { + case 255: // Intro + doIntro(); + break; + case 0: // Menú + doMenu(); + break; + case 1: // Slides + case 7: + doSlides(); + break; + case 2: // Pre-piràmide + case 3: + case 4: + case 5: + doBanner(); + break; + case 6: // Pre-Secreta + doSecreta(); + break; + case 8: // Credits + doCredits(); + break; + } + + JD8_FadeOut(); + + if( JG_Quitting() ) { + return -1; + } else { + if( this->info->num_piramide == 255 ) { + this->info->num_piramide = 0; + return 1; + } else if( this->info->num_piramide == 0 ) { + this->info->num_piramide = 1; + return 1; + } else if( this->info->num_piramide == 7 ) { + this->info->num_piramide = 8; + return 1; + } else if( this->info->num_piramide == 8 ) { + this->info->num_piramide = 255; + } else { + return 0; + } + + } +} + +const int minim( const int a, const int b ) { + if( b < a ) { return b; } else { return a; } +} + +void ModuleSequence::doIntro() { + JG_SetUpdateTicks(1000); + + JD8_Surface gfx = JD8_LoadSurface( "logo.gif" ); + JD8_Palette pal = JD8_LoadPalette( "logo.gif" ); + JD8_SetScreenPalette( pal ); + + JD8_ClearScreen( 0 ); + JD8_Flip(); + while( !JG_ShouldUpdate() ) { JI_Update(); if( JI_AnyKey() || JG_Quitting() ) { JD8_FreeSurface( gfx ); return; } } + JG_SetUpdateTicks(100); + + JD8_Blit( 43, 78, gfx, 43, 155, 27, 45 ); + JD8_Blit( 68, 78, gfx, 274, 155, 27, 45 ); + JD8_Flip(); + while( !JG_ShouldUpdate() ) { JI_Update(); if( JI_AnyKey() || JG_Quitting() ) { JD8_FreeSurface( gfx ); return; } } + + JD8_Blit( 43, 78, gfx, 43, 155, 53, 45 ); + JD8_Blit( 96, 78, gfx, 274, 155, 27, 45 ); + JD8_Flip(); + while( !JG_ShouldUpdate() ) { JI_Update(); if( JI_AnyKey() || JG_Quitting() ) { JD8_FreeSurface( gfx ); return; } } + + JD8_Blit( 43, 78, gfx, 43, 155, 66, 45 ); + JD8_Blit( 109, 78, gfx, 274, 155, 27, 45 ); + JD8_Flip(); + while( !JG_ShouldUpdate() ) { JI_Update(); if( JI_AnyKey() || JG_Quitting() ) { JD8_FreeSurface( gfx ); return; } } + JG_SetUpdateTicks(200); + + JD8_Blit( 43, 78, gfx, 43, 155, 92, 45 ); + JD8_Blit( 136, 78, gfx, 274, 155, 27, 45 ); + JD8_Flip(); + while( !JG_ShouldUpdate() ) { JI_Update(); if( JI_AnyKey() || JG_Quitting() ) { JD8_FreeSurface( gfx ); return; } } + + JD8_ClearScreen( 0 ); + JD8_Blit( 43, 78, gfx, 43, 155, 92, 45 ); + //JD8_Blit( 136, 78, gfx, 274, 155, 27, 45 ); + JD8_Flip(); + while( !JG_ShouldUpdate() ) { JI_Update(); if( JI_AnyKey() || JG_Quitting() ) { JD8_FreeSurface( gfx ); return; } } + JG_SetUpdateTicks(100); + + JD8_Blit( 43, 78, gfx, 43, 155, 118, 45 ); + JD8_Blit( 160, 78, gfx, 274, 155, 27, 45 ); + JD8_Flip(); + while( !JG_ShouldUpdate() ) { JI_Update(); if( JI_AnyKey() || JG_Quitting() ) { JD8_FreeSurface( gfx ); return; } } + + JD8_Blit( 43, 78, gfx, 43, 155, 145, 45 ); + JD8_Blit( 188, 78, gfx, 274, 155, 27, 45 ); + JD8_Flip(); + while( !JG_ShouldUpdate() ) { JI_Update(); if( JI_AnyKey() || JG_Quitting() ) { JD8_FreeSurface( gfx ); return; } } + + JD8_Blit( 43, 78, gfx, 43, 155, 178, 45 ); + JD8_Blit( 221, 78, gfx, 274, 155, 27, 45 ); + JD8_Flip(); + while( !JG_ShouldUpdate() ) { JI_Update(); if( JI_AnyKey() || JG_Quitting() ) { JD8_FreeSurface( gfx ); return; } } + + JD8_Blit( 43, 78, gfx, 43, 155, 205, 45 ); + JD8_Blit( 248, 78, gfx, 274, 155, 27, 45 ); + JD8_Flip(); + while( !JG_ShouldUpdate() ) { JI_Update(); if( JI_AnyKey() || JG_Quitting() ) { JD8_FreeSurface( gfx ); return; } } + + JG_SetUpdateTicks(200); + JD8_Blit( 43, 78, gfx, 43, 155, 231, 45 ); + JD8_Blit( 274, 78, gfx, 274, 155, 27, 45 ); + JD8_Flip(); + while( !JG_ShouldUpdate() ) { JI_Update(); if( JI_AnyKey() || JG_Quitting() ) { JD8_FreeSurface( gfx ); return; } } + JD8_ClearScreen( 0 ); + JD8_Blit( 43, 78, gfx, 43, 155, 231, 45 ); + JD8_Flip(); + while( !JG_ShouldUpdate() ) { JI_Update(); if( JI_AnyKey() || JG_Quitting() ) { JD8_FreeSurface( gfx ); return; } } + JD8_Blit( 43, 78, gfx, 43, 155, 231, 45 ); + JD8_Blit( 274, 78, gfx, 274, 155, 27, 45 ); + JD8_Flip(); + while( !JG_ShouldUpdate() ) { JI_Update(); if( JI_AnyKey() || JG_Quitting() ) { JD8_FreeSurface( gfx ); return; } } + JD8_ClearScreen( 0 ); + JD8_Blit( 43, 78, gfx, 43, 155, 231, 45 ); + JD8_Flip(); + while( !JG_ShouldUpdate() ) { JI_Update(); if( JI_AnyKey() || JG_Quitting() ) { JD8_FreeSurface( gfx ); return; } } + JD8_Blit( 43, 78, gfx, 43, 155, 231, 45 ); + JD8_Blit( 274, 78, gfx, 274, 155, 27, 45 ); + JD8_Flip(); + while( !JG_ShouldUpdate() ) { JI_Update(); if( JI_AnyKey() || JG_Quitting() ) { JD8_FreeSurface( gfx ); return; } } + JD8_ClearScreen( 0 ); + JD8_Blit( 43, 78, gfx, 43, 155, 231, 45 ); + JD8_Flip(); + while( !JG_ShouldUpdate() ) { JI_Update(); if( JI_AnyKey() || JG_Quitting() ) { JD8_FreeSurface( gfx ); return; } } + + for( int j = 0; j < 256; j++ ) { + for( int i = 16; i < 32; i++ ) { + if( i == 17 ) { + if( pal[i].r < 255 ) pal[i].r++; + if( pal[i].g < 255 ) pal[i].g++; + if( pal[i].b < 255 ) pal[i].b++; + } + if( pal[i].b < pal[i].g ) pal[i].b++; + if( pal[i].b > pal[i].g ) pal[i].b--; + if( pal[i].r < pal[i].g ) pal[i].r++; + if( pal[i].r > pal[i].g ) pal[i].r--; + } + JD8_Flip(); + } + + while( !JG_ShouldUpdate() ) { JI_Update(); if( JI_AnyKey() || JG_Quitting() ) { JD8_FreeSurface( gfx ); return; } } + JG_SetUpdateTicks(20); + + Uint16 fr1 = 13; + Uint16 fr2 = fr1; + Uint16 fr3 = 11; + Uint16 fr4 = fr3; + Uint16 fr5 = 20; + Uint16 fr6 = 8; + Uint16 fr7 = 29; + Uint16 fr8 = 4; + Uint16 fr9 = 16; + Uint16 fr10 = fr9; + Uint16 fr11 = 6; + Uint16 creu = 75; + Uint16 interrogant = 90; + + Uint16 fr_ani_1[13]; // camina dreta + Uint16 fr_ani_2[13]; // camina esquerra + Uint16 fr_ani_3[11]; // trau el mapa DRETA + Uint16 fr_ani_4[11]; // trau el mapa ESQUERRA + Uint16 fr_ani_5[20]; // bot de susto + Uint16 fr_ani_6[8]; // momia + Uint16 fr_ani_7[29]; // deixa caure el PAPER i SOMBRA + Uint16 fr_ani_8[4]; // PEDRA + Uint16 fr_ani_9[16]; // prota BALL + Uint16 fr_ani_10[16]; // momia BALL + Uint16 fr_ani_11[6]; // altaveu + + for( int i=0; i < fr1; i++ ) fr_ani_1[i] = i*15; + for( int i=0; i < fr2; i++ ) fr_ani_2[i] = i*15; //15 + for( int i=0; i < fr3; i++ ) fr_ani_3[i] = i*15; //30 + for( int i=0; i < fr4; i++ ) fr_ani_4[i] = i*15; //45 + for( int i=0; i <= 9; i++ ) fr_ani_5[i] = (i+11)*15; //45 + for( int i=10; i <= 19; i++ ) fr_ani_5[i] = fr_ani_5[19-i]; + for( int i=0; i < fr6; i++ ) fr_ani_6[i] = i*15; //60 + for( int i=0; i <= 13; i++ ) fr_ani_7[i] = (i+5)*15; //75 + for( int i=14; i < fr7; i++ ) fr_ani_7[i] = (i-14)*15; //105 + for( int i=0; i < fr8; i++ ) fr_ani_8[i] = (i+1)*15; //75 + for( int i=0; i < fr9; i++ ) fr_ani_9[i] = i*15; //120 + for( int i=0; i < fr10; i++ ) fr_ani_10[i] = i*15; //135 + for( int i=0; i < fr11; i++ ) fr_ani_11[i] = (i+1)*15; //90 + fr_ani_11[fr11-1] = fr_ani_11[3]; + + switch( rand()%3 ) { + case 0: + + // camina cap a la DRETA } + for( int i = 0; i <= 200; i++ ) { + + JD8_ClearScreen( 0 ); + JD8_Blit( 43, 78, gfx, 43, 155, 231, 45 ); + //Put_sprite(from,where,fr_ani_1[(i div 5) mod fr1],15,15,i,150); + JD8_BlitCK( i, 150, gfx, fr_ani_1[(i / 5) % fr1], 0, 15, 15, 0 ); + + JD8_Flip(); + while( !JG_ShouldUpdate() ) { JI_Update(); if( JI_AnyKey() || JG_Quitting() ) { JD8_FreeSurface( gfx ); return; } } + } + + // trau el MAPA DRETA } + + for( int i = 0; i <= 200; i++ ) { + + JD8_ClearScreen( 0 ); + JD8_Blit( 43, 78, gfx, 43, 155, 231, 45 ); + //Put_sprite(from,where,fr_ani_3[minim((i div 5),fr3-1)],15,15,200,150); + JD8_BlitCK( 200, 150, gfx, fr_ani_3[minim((i / 5), fr3-1)], 30, 15, 15, 0 ); + + JD8_Flip(); + while( !JG_ShouldUpdate() ) { JI_Update(); if( JI_AnyKey() || JG_Quitting() ) { JD8_FreeSurface( gfx ); return; } } + } + + // guarda el MAPA } + + for( int i = 200; i >= 0; i-- ) { + + JD8_ClearScreen( 0 ); + JD8_Blit( 43, 78, gfx, 43, 155, 231, 45 ); + //Put_sprite(from,where,fr_ani_3[minim((i div 5),fr3-1)],15,15,200,150); + JD8_BlitCK( 200, 150, gfx, fr_ani_3[minim((i / 5), fr3-1)], 30, 15, 15, 0 ); + + JD8_Flip(); + while( !JG_ShouldUpdate() ) { JI_Update(); if( JI_AnyKey() || JG_Quitting() ) { JD8_FreeSurface( gfx ); return; } } + } + + // camina cap a la ESQUERRA } + + for( int i = 200; i >= 80; i-- ) { + + JD8_ClearScreen( 0 ); + JD8_Blit( 43, 78, gfx, 43, 155, 231, 45 ); + //Put_sprite(from,where,fr_ani_2[(i div 5) mod fr2],15,15,i,150); + JD8_BlitCK( i, 150, gfx, fr_ani_2[(i / 5) % fr2], 15, 15, 15, 0 ); + + JD8_Flip(); + while( !JG_ShouldUpdate() ) { JI_Update(); if( JI_AnyKey() || JG_Quitting() ) { JD8_FreeSurface( gfx ); return; } } + } + + // trau el MAPA ESQUERRA } + + for( int i = 0; i <= 200; i++ ) { + + JD8_ClearScreen( 0 ); + JD8_Blit( 43, 78, gfx, 43, 155, 231, 45 ); + //Put_sprite(from,where,fr_ani_4[minim((i div 5),fr4-1)],15,15,80,150); + JD8_BlitCK( 80, 150, gfx, fr_ani_4[minim((i / 5), fr4-1)], 45, 15, 15, 0 ); + + JD8_Flip(); + while( !JG_ShouldUpdate() ) { JI_Update(); if( JI_AnyKey() || JG_Quitting() ) { JD8_FreeSurface( gfx ); return; } } + } + + // momia cap a la ESQUERRA } + + for( int i = 300; i >= 95; i-- ) { + + JD8_ClearScreen( 0 ); + JD8_Blit( 43, 78, gfx, 43, 155, 231, 45 ); + //Put_sprite(from,where,fr_ani_6[(i div 10) mod fr6],15,15,i,150); + JD8_BlitCK( i, 150, gfx, fr_ani_6[(i / 5) % fr6], 60, 15, 15, 0 ); + //Put_sprite(from,where,fr_ani_4[fr4-1],15,15,80,150); + JD8_BlitCK( 80, 150, gfx, fr_ani_4[fr4-1], 45, 15, 15, 0 ); + + JD8_Flip(); + while( !JG_ShouldUpdate() ) { JI_Update(); if( JI_AnyKey() || JG_Quitting() ) { JD8_FreeSurface( gfx ); return; } } + } + + // girar-se } + + for( int i = 0; i <= 50; i++ ) { + + JD8_ClearScreen( 0 ); + JD8_Blit( 43, 78, gfx, 43, 155, 231, 45 ); + //Put_sprite(from,where,fr_ani_1[1],15,15,80,150); + JD8_BlitCK( 80, 150, gfx, fr_ani_1[1], 0, 15, 15, 0 ); + //Put_sprite(from,where,fr_ani_6[4],15,15,95,150); + JD8_BlitCK( 95, 150, gfx, fr_ani_6[4], 60, 15, 15, 0 ); + //Put_sprite(from,where,interrogant,15,15,80,133); + JD8_BlitCK( 80, 133, gfx, 0, interrogant, 15, 15, 0 ); + + JD8_Flip(); + while( !JG_ShouldUpdate() ) { JI_Update(); if( JI_AnyKey() || JG_Quitting() ) { JD8_FreeSurface( gfx ); return; } } + } + + // bot de SUSTO } + + for( int i = 0; i <= 49; i++ ) { + + JD8_ClearScreen( 0 ); + JD8_Blit( 43, 78, gfx, 43, 155, 231, 45 ); + //Put_sprite(from,where,fr_ani_5[minim((i div 5),fr5-1)],15,15,80,150-((i mod 50) div 5)); + JD8_BlitCK( 80, 150-((i % 50) / 5), gfx, fr_ani_5[minim(i/5, fr5-1)], 45, 15, 15, 0 ); + //Put_sprite(from,where,fr_ani_6[4],15,15,95,150); + JD8_BlitCK( 95, 150, gfx, fr_ani_6[4], 60, 15, 15, 0 ); + + JD8_Flip(); + while( !JG_ShouldUpdate() ) { JI_Update(); if( JI_AnyKey() || JG_Quitting() ) { JD8_FreeSurface( gfx ); return; } } + } + + // bot de SUSTO } + + for( int i = 50; i <= 99; i++ ) { + + JD8_ClearScreen( 0 ); + JD8_Blit( 43, 78, gfx, 43, 155, 231, 45 ); + //Put_sprite(from,where,fr_ani_5[minim((i div 5),fr5-1)],15,15,80,140+((i mod 50) div 5)); + JD8_BlitCK( 80, 140+((i % 50) / 5), gfx, fr_ani_5[minim(i/5, fr5-1)], 45, 15, 15, 0 ); + //Put_sprite(from,where,fr_ani_6[4],15,15,95,150); + JD8_BlitCK( 95, 150, gfx, fr_ani_6[4], 60, 15, 15, 0 ); + + JD8_Flip(); + while( !JG_ShouldUpdate() ) { JI_Update(); if( JI_AnyKey() || JG_Quitting() ) { JD8_FreeSurface( gfx ); return; } } + } + + // camina cap a la ESQUERRA } + + for( int i = 80; i >= 0; i-- ) { + + JD8_ClearScreen( 0 ); + JD8_Blit( 43, 78, gfx, 43, 155, 231, 45 ); + //Put_sprite(from,where,fr_ani_2[(i div 5) mod fr2],15,15,i,150); + JD8_BlitCK( i, 150, gfx, fr_ani_2[(i/5) % fr2], 15, 15, 15, 0 ); + //Put_sprite(from,where,fr_ani_6[4],15,15,95,150); + JD8_BlitCK( 95, 150, gfx, fr_ani_6[4], 60, 15, 15, 0 ); + + JD8_Flip(); + while( !JG_ShouldUpdate() ) { JI_Update(); if( JI_AnyKey() || JG_Quitting() ) { JD8_FreeSurface( gfx ); return; } } + } + + // final } + + for( int i = 0; i <= 150; i++ ) { + + JD8_ClearScreen( 0 ); + JD8_Blit( 43, 78, gfx, 43, 155, 231, 45 ); + //Put_sprite(from,where,fr_ani_6[4],15,15,95,150); + JD8_BlitCK( 95, 150, gfx, fr_ani_6[4], 60, 15, 15, 0 ); + //Put_sprite(from,where,interrogant,15,15,95,133); + JD8_BlitCK( 95, 133, gfx, 0, interrogant, 15, 15, 0 ); + + JD8_Flip(); + } + //-----} + + + break; + case 1: + // camina cap a la DRETA } + for( int i = 0; i <= 200; i++ ) { + + JD8_ClearScreen( 0 ); + JD8_Blit( 43, 78, gfx, 43, 155, 231, 45 ); + //Put_sprite(from,where,creu,15,15,200,155); + JD8_BlitCK( 200, 155, gfx, 0, creu, 15, 15, 255 ); + //Put_sprite(from,where,fr_ani_1[(i div 5) mod fr1],15,15,i,150); + JD8_BlitCK( i, 150, gfx, fr_ani_1[(i/5) % fr1], 0, 15, 15, 255 ); + + JD8_Flip(); + while( !JG_ShouldUpdate() ) { JI_Update(); if( JI_AnyKey() || JG_Quitting() ) { JD8_FreeSurface( gfx ); return; } } + } + + // trau el MAPA DRETA } + + for( int i = 0; i <= 300; i++ ) { + + JD8_ClearScreen( 0 ); + JD8_Blit( 43, 78, gfx, 43, 155, 231, 45 ); + //Put_sprite(from,where,creu,15,15,200,155); + JD8_BlitCK( 200, 155, gfx, 0, creu, 15, 15, 255 ); + //Put_sprite(from,where,fr_ani_3[minim((i div 5),fr3-1)],15,15,200,150); + JD8_BlitCK( 200, 150, gfx, fr_ani_3[minim(i/5, fr3-1)], 30, 15, 15, 255 ); + + JD8_Flip(); + while( !JG_ShouldUpdate() ) { JI_Update(); if( JI_AnyKey() || JG_Quitting() ) { JD8_FreeSurface( gfx ); return; } } + } + + // INTERROGANT } + + for( int i = 0; i <= 100; i++ ) { + + JD8_ClearScreen( 0 ); + JD8_Blit( 43, 78, gfx, 43, 155, 231, 45 ); + //Put_sprite(from,where,creu,15,15,200,155); + JD8_BlitCK( 200, 155, gfx, 0, creu, 15, 15, 255 ); + //Put_sprite(from,where,interrogant,15,15,200,134); + JD8_BlitCK( 200, 134, gfx, 0, interrogant, 15, 15, 255 ); + //Put_sprite(from,where,fr_ani_3[fr3-1],15,15,200,150); + JD8_BlitCK( 200, 150, gfx, fr_ani_3[fr3-1], 30, 15, 15, 255 ); + + JD8_Flip(); + while( !JG_ShouldUpdate() ) { JI_Update(); if( JI_AnyKey() || JG_Quitting() ) { JD8_FreeSurface( gfx ); return; } } + } + + // deixa caure el MAPA i SOMBRA } + + for( int i = 0; i <= 200; i++ ) { + + JD8_ClearScreen( 0 ); + JD8_Blit( 43, 78, gfx, 43, 155, 231, 45 ); + //Put_sprite(from,where,creu,15,15,200,155); + JD8_BlitCK( 200, 155, gfx, 0, creu, 15, 15, 255 ); + //Put_sprite(from,where,fr_ani_7[minim((i div 5),fr7-1)],15,15,200,150); + if( minim(i/5, fr7-1) <= 13 ) { + JD8_BlitCK( 200, 150, gfx, fr_ani_7[minim(i/5, fr7-1)], 75, 15, 15, 255 ); + } else { + JD8_BlitCK( 200, 150, gfx, fr_ani_7[minim(i/5, fr7-1)], 105, 15, 15, 255 ); + } + + JD8_Flip(); + while( !JG_ShouldUpdate() ) { JI_Update(); if( JI_AnyKey() || JG_Quitting() ) { JD8_FreeSurface( gfx ); return; } } + } + + // SOMBRA i PEDRA } + + for( int i = 0; i <= 75; i++ ) { + + JD8_ClearScreen( 0 ); + JD8_Blit( 43, 78, gfx, 43, 155, 231, 45 ); + //Put_sprite(from,where,creu,15,15,200,155); + JD8_BlitCK( 200, 155, gfx, 0, creu, 15, 15, 255 ); + //Put_sprite(from,where,fr_ani_7[fr7-1],15,15,200,150); + JD8_BlitCK( 200, 150, gfx, fr_ani_7[fr7-1], 105, 15, 15, 255 ); + //Put_sprite(from,where,fr_ani_8[0],15,15,200,i*2); + JD8_BlitCK( 200, i*2, gfx, fr_ani_8[0], 75, 15, 15, 255 ); + + JD8_Flip(); + while( !JG_ShouldUpdate() ) { JI_Update(); if( JI_AnyKey() || JG_Quitting() ) { JD8_FreeSurface( gfx ); return; } } + } + + // trencar PEDRA } + + for( int i = 0; i <= 19; i++ ) { + + JD8_ClearScreen( 0 ); + JD8_Blit( 43, 78, gfx, 43, 155, 231, 45 ); + //Put_sprite(from,where,creu,15,15,200,155); + JD8_BlitCK( 200, 155, gfx, 0, creu, 15, 15, 255 ); + //Put_sprite(from,where,fr_ani_8[i div 10],15,15,200,150); + JD8_BlitCK( 200, 150, gfx, fr_ani_8[i/10], 75, 15, 15, 255 ); + + JD8_Flip(); + while( !JG_ShouldUpdate() ) { JI_Update(); if( JI_AnyKey() || JG_Quitting() ) { JD8_FreeSurface( gfx ); return; } } + } + + // FINAL } + + for( int i = 0; i <= 200; i++ ) { + + JD8_ClearScreen( 0 ); + JD8_Blit( 43, 78, gfx, 43, 155, 231, 45 ); + //Put_sprite(from,where,creu,15,15,200,155); + JD8_BlitCK( 200, 155, gfx, 0, creu, 15, 15, 255 ); + //Put_sprite(from,where,fr_ani_8[1],15,15,200,150); + JD8_BlitCK( 200, 150, gfx, fr_ani_8[1], 75, 15, 15, 255 ); + //Put_sprite(from,where,fr_ani_8[2],15,15,185,150); + JD8_BlitCK( 185, 150, gfx, fr_ani_8[2], 75, 15, 15, 255 ); + //Put_sprite(from,where,fr_ani_8[3],15,15,215,150); + JD8_BlitCK( 215, 150, gfx, fr_ani_8[3], 75, 15, 15, 255 ); + + JD8_Flip(); + while( !JG_ShouldUpdate() ) { JI_Update(); if( JI_AnyKey() || JG_Quitting() ) { JD8_FreeSurface( gfx ); return; } } + } + break; + case 2: + // camina cap a la DRETA } + for( int i = 0; i <= 145; i++ ) { + + JD8_ClearScreen( 0 ); + JD8_Blit( 43, 78, gfx, 43, 155, 231, 45 ); + //Put_sprite(from,where,fr_ani_1[(i div 5) mod fr1],15,15,i,150); + JD8_BlitCK( i, 150, gfx, fr_ani_1[(i/5) % fr1], 0, 15, 15, 255 ); + //Put_sprite(from,where,fr_ani_6[(i div 10) mod fr6],15,15,304-i,150); + JD8_BlitCK( 304-i, 150, gfx, fr_ani_6[(i/10) % fr6], 60, 15, 15, 255 ); + + JD8_Flip(); + while( !JG_ShouldUpdate() ) { JI_Update(); if( JI_AnyKey() || JG_Quitting() ) { JD8_FreeSurface( gfx ); return; } } + } + + // els dos quets } + + for( int i = 0; i <= 100; i++ ) { + + JD8_ClearScreen( 0 ); + JD8_Blit( 43, 78, gfx, 43, 155, 231, 45 ); + //Put_sprite(from,where,fr_ani_1[1],15,15,145,150); + JD8_BlitCK( 145, 150, gfx, fr_ani_1[1], 0, 15, 15, 255 ); + //Put_sprite(from,where,fr_ani_6[1],15,15,160,150); + JD8_BlitCK( 160, 150, gfx, fr_ani_6[1], 60, 15, 15, 255 ); + + JD8_Flip(); + while( !JG_ShouldUpdate() ) { JI_Update(); if( JI_AnyKey() || JG_Quitting() ) { JD8_FreeSurface( gfx ); return; } } + } + + // aparicio altaveu } + + for( int i = 0; i <= 50; i++ ) { + + JD8_ClearScreen( 0 ); + JD8_Blit( 43, 78, gfx, 43, 155, 231, 45 ); + //Put_sprite(from,where,fr_ani_11[(i div 10) mod 2],15,15,125,150); + JD8_BlitCK( 125, 150, gfx, fr_ani_11[(i/10) % 2], 90, 15, 15, 255 ); + //Put_sprite(from,where,fr_ani_1[1],15,15,145,150); + JD8_BlitCK( 145, 150, gfx, fr_ani_1[1], 0, 15, 15, 255 ); + //Put_sprite(from,where,fr_ani_6[1],15,15,160,150); + JD8_BlitCK( 160, 150, gfx, fr_ani_6[1], 60, 15, 15, 255 ); + + JD8_Flip(); + while( !JG_ShouldUpdate() ) { JI_Update(); if( JI_AnyKey() || JG_Quitting() ) { JD8_FreeSurface( gfx ); return; } } + } + + // BALL } + + for( int i = 0; i <= 800; i++ ) { + + JD8_ClearScreen( 0 ); + JD8_Blit( 43, 78, gfx, 43, 155, 231, 45 ); + //Put_sprite(from,where,fr_ani_9[(i div 10) mod fr9],15,15,145,150); + JD8_BlitCK( 145, 150, gfx, fr_ani_9[(i/10) % fr9], 120, 15, 15, 255 ); + //Put_sprite(from,where,fr_ani_10[(i div 10) mod fr10],15,15,160,150); + JD8_BlitCK( 160, 150, gfx, fr_ani_10[(i/10) % fr10], 135, 15, 15, 255 ); + //Put_sprite(from,where,fr_ani_11[((i div 5) mod 4)+2],15,15,125,150); + JD8_BlitCK( 125, 150, gfx, fr_ani_11[((i/5) % 4)+2], 90, 15, 15, 255 ); + + JD8_Flip(); + while( !JG_ShouldUpdate() ) { JI_Update(); if( JI_AnyKey() || JG_Quitting() ) { JD8_FreeSurface( gfx ); return; } } + } + + break; + } + + + JD8_FreeSurface( gfx ); +} + + +void ModuleSequence::doMenu() { + JG_SetUpdateTicks(20); + JD8_Surface fondo = JD8_LoadSurface( "menu.gif" ); + JD8_Surface gfx = JD8_LoadSurface( "menu2.gif" ); + JD8_Palette pal = JD8_LoadPalette( "menu2.gif" ); + + JD8_Blit( fondo ); + JD8_BlitCK( 100, 25, gfx, 0, 74, 124, 68, 255 ); // logo + JD8_BlitCK( 130, 100, gfx, 0, 0, 80, 74, 255 ); + JD8_BlitCK( 0, 150, gfx, 0, 150, 320, 50, 255 ); + JD8_FadeToPal( pal ); + + contador = 0; + int palmeres = 0; + int horitzo = 0; + int camello = 0; + + JI_Update(); + while( !JI_AnyKey() && !JG_Quitting() ) { + + JD8_Blit( 0, 0, fondo, 0, 0, 320, 100 ); // fondo sol estatic + + JD8_BlitCK( horitzo, 100, fondo, 0, 100, 320-horitzo, 100, 255 ); // fondo moviment + JD8_BlitCK( 0, 100, fondo, 320-horitzo, 100, horitzo, 100, 255 ); + + JD8_BlitCK( 100, 25, gfx, 0, 74, 124, 68, 255 ); // logo + JD8_BlitCK( 130, 100, gfx, camello*80, 0, 80, 74, 255 ); // camello + + JD8_BlitCK( palmeres, 150, gfx, 0, 150, 320-palmeres, 50, 255 ); // palemeres moviment + JD8_BlitCK( 0, 150, gfx, 320-palmeres, 150, palmeres, 50, 255 ); + + JD8_BlitCK( 87, 167, gfx, 127, 124, 150, 24, 255 ); // jdes + JD8_BlitCK( 303, 193, gfx, 305, 143, 15, 5, 255 ); // versio + + if( contador%100 > 30 ) JD8_BlitCK( 98, 130, gfx, 161, 92, 127, 9, 255 ); // pulsa tecla... + + JD8_Flip(); + + if( JG_ShouldUpdate() ) { + if( contador%4 == 0 ) { palmeres--; if( palmeres < 0 ) palmeres = 319; } + if( contador%8 == 0 ) { camello++; if( camello == 4 ) camello = 0; } + if( contador%16 == 0 ) { horitzo--; if( horitzo < 0 ) horitzo = 319; } + contador++; + JI_Update(); + } + } + + JD8_FreeSurface( fondo ); + JD8_FreeSurface( gfx ); + free( pal ); +} + +void ModuleSequence::doSlides() { + JG_SetUpdateTicks(20); + + char* arxiu; + if( this->info->num_piramide == 7 ) { + if( this->info->diners < 200 ) { + arxiu = "intro2.gif"; + } else { + arxiu = "intro3.gif"; + } + } else { + arxiu = "intro.gif"; + } + + JD8_Surface gfx = JD8_LoadSurface( arxiu ); + JD8_Palette pal_aux = JD8_LoadPalette( arxiu ); + JD8_Palette pal = (JD8_Palette)malloc( 768 ); + memcpy( pal, pal_aux, 768 ); + JD8_ClearScreen( 255 ); + JD8_SetScreenPalette( pal ); + + bool exit = false; + int step = 0; + contador = 1; + while( !exit && !JG_Quitting() ) { + if (JG_ShouldUpdate()) { + JI_Update(); + + if( JI_AnyKey() ) { + exit = true; + } + + switch( step ) { + case 0: + JD8_Blit( 320 - ( contador * 4 ), 65, gfx, 0, 0, contador*4, 65 ); + JD8_Flip(); + contador++; + if( contador == 80 ) step++; + break; + case 3: + JD8_Blit( 0, 65, gfx, 320 - ( contador * 4 ), 65, contador*4, 65 ); + JD8_Flip(); + contador++; + if( contador == 80 ) step++; + break; + case 6: + JD8_Blit( 320 - ( contador * 4 ), 65, gfx, 0, 130, contador*4, 65 ); + JD8_Flip(); + contador++; + if( contador == 80 ) step++; + break; + case 1: + case 4: + case 7: + contador--; + if( contador == 1 ) step++; + break; + case 2: + case 5: + JD8_FadeOut(); + memcpy( pal, pal_aux, 768 ); + JD8_ClearScreen( 255 ); + step++; + break; + case 8: + exit = true; + break; + } + } + } + + JD8_FreeSurface( gfx ); + free( pal_aux ); +} + +void ModuleSequence::doBanner() { + this->contador = 5000; + + JD8_Surface gfx = JD8_LoadSurface( "ffase.gif" ); + JD8_Palette pal = JD8_LoadPalette( "ffase.gif" ); + + JD8_ClearScreen( 0 ); + + JD8_Blit( 81, 24, gfx, 81, 155, 168, 21 ); + JD8_Blit( 39, 150, gfx, 39, 175, 248, 20 ); + + switch( this->info->num_piramide ) { + case 2: + JD8_Blit( 82, 60, gfx, 0, 0, 160, 75 ); + break; + case 3: + JD8_Blit( 82, 60, gfx, 160, 0, 160, 75 ); + break; + case 4: + JD8_Blit( 82, 60, gfx, 0, 75, 160, 75 ); + break; + case 5: + JD8_Blit( 82, 60, gfx, 160, 75, 160, 75 ); + break; + } + JD8_FadeToPal( pal ); + + bool exit = false; + while( !exit && !JG_Quitting() ) { + if (JG_ShouldUpdate()) { + JI_Update(); + + if( JI_AnyKey() ) { + exit = true; + } + + contador--; + if( contador == 0 ) exit = true; + } + } +} + +void ModuleSequence::doSecreta() { +} + +void ModuleSequence::doCredits() { +} + diff --git a/modulesequence.h b/modulesequence.h new file mode 100755 index 0000000..37e393b --- /dev/null +++ b/modulesequence.h @@ -0,0 +1,25 @@ +#pragma once + +#include "info.h" + +class ModuleSequence { + +public: + + ModuleSequence( Info* info ); + ~ModuleSequence(void); + + int Go(); + +private: + + void doIntro(); + void doMenu(); + void doSlides(); + void doBanner(); + void doSecreta(); + void doCredits(); + + Info* info; + int contador; +}; diff --git a/momia.cpp b/momia.cpp new file mode 100755 index 0000000..4db97a8 --- /dev/null +++ b/momia.cpp @@ -0,0 +1,177 @@ +#include "momia.h" +#include "jgame.h" + +Momia::Momia( JD8_Surface gfx, Info* info, bool dimoni, Uint16 x, Uint16 y, Prota* sam ) : Sprite( gfx ) { + this->info = info; + this->dimoni = dimoni; + this->sam = sam; + + this->entitat = (Entitat*)malloc( sizeof( Entitat ) ); + // Frames + this->entitat->num_frames = 20; + this->entitat->frames = (Frame*)malloc( this->entitat->num_frames * sizeof( Frame ) ); + Uint16 frame = 0; + for( int y = 0; y < 4; y++ ) { + for( int x = 0; x < 5; x++ ) { + this->entitat->frames[frame].w = 15; + this->entitat->frames[frame].h = 15; + if( this->info->num_piramide == 4 ) this->entitat->frames[frame].h -= 5; + this->entitat->frames[frame].x = (x*15)+75; + if( this->dimoni ) this->entitat->frames[frame].x += 75; + this->entitat->frames[frame].y = 20+(y*15); + frame++; + + } + } + // Animacions + this->entitat->num_animacions = 4; + this->entitat->animacions = (Animacio*)malloc( this->entitat->num_animacions * sizeof( Animacio ) ); + for( int i = 0; i < 4; i++ ) { + this->entitat->animacions[i].num_frames = 8; + this->entitat->animacions[i].frames = (Uint8*)malloc( 8 ); + this->entitat->animacions[i].frames[0] = 0 + (i*5); + this->entitat->animacions[i].frames[1] = 1 + (i*5); + this->entitat->animacions[i].frames[2] = 2 + (i*5); + this->entitat->animacions[i].frames[3] = 1 + (i*5); + this->entitat->animacions[i].frames[4] = 0 + (i*5); + this->entitat->animacions[i].frames[5] = 3 + (i*5); + this->entitat->animacions[i].frames[6] = 4 + (i*5); + this->entitat->animacions[i].frames[7] = 3 + (i*5); + } + + this->cur_frame = 0; + this->o = rand()%4; + this->cycles_per_frame = 4; + this->next = NULL; + + if( this->dimoni ) { + if( x == 0 ) { + this->x = 150; + } else { + this->x = x; + } + if( y == 0 ) { + if( this->sam->y > 100 ) { + this->y = 30; + } else { + this->y = 170; + } + } else { + this->y = y; + } + this->engendro = new Engendro( gfx, this->x, this->y ); + } else { + this->engendro = NULL; + this->x = x; + this->y = y; + } + +} + +void Momia::clear() { + if( this->next != NULL ) this->next->clear(); + if( this->engendro != NULL) delete this->engendro; + delete this->next; +} + +void Momia::draw() { + + if( this->engendro != NULL ) { + this->engendro->draw(); + } else { + + Sprite::draw(); + + if( this->info->num_piramide == 4 ) { + if( ( JG_GetCycleCounter() % 40 ) < 20 ) { + JD8_BlitCK(this->x, this->y, this->gfx, 220, 80, 15, 15, 255 ); + } else { + JD8_BlitCK(this->x, this->y, this->gfx, 235, 80, 15, 15, 255 ); + } + } + } + if( this->next != NULL ) this->next->draw(); +} + +bool Momia::update() { + + bool morta = false; + + if( this->engendro != NULL ) { + if( this->engendro->update() ) { + delete this->engendro; + this->engendro = NULL; + } + } else { + if( this->sam->o < 4 && ( this->dimoni || this->info->num_piramide == 5 || JG_GetCycleCounter()%2 == 0 ) ) { + + if( ( this->x - 20 ) % 65 == 0 && ( this->y - 30 ) % 35 == 0 ) { + if( this->dimoni ) { + if( rand()%2 == 0 ) { + if( this->x > this->sam->x ) { this->o = 3; } + else if( this->x < this->sam->x ) { this->o = 2; } + else if( this->y < this->sam->y ) { this->o = 0; } + else if( this->y > this->sam->y ) { this->o = 1; } + } else { + if( this->y < this->sam->y ) { this->o = 0; } + else if( this->y > this->sam->y ) { this->o = 1; } + else if( this->x > this->sam->x ) { this->o = 3; } + else if( this->x < this->sam->x ) { this->o = 2; } + } + } else { + this->o = rand()%4; + } + } + + switch( this->o ) { + case 0: + if( y < 170 ) this->y++; + break; + case 1: + if( y > 30 ) this->y--; + break; + case 2: + if( x < 280 ) this->x++; + break; + case 3: + if( x > 20 ) this->x--; + break; + } + + if( JG_GetCycleCounter() % this->cycles_per_frame == 0 ) { + this->cur_frame++; + if( this->cur_frame == this->entitat->animacions[this->o].num_frames ) this->cur_frame = 0; + } + + if( this->x > ( this->sam->x - 7 ) && this->x < ( this->sam->x + 7 ) && this->y > ( this->sam->y - 7 ) && this->y < ( this->sam->y + 7 ) ) { + morta = true; + if( this->sam->pergami ) { + this->sam->pergami = false; + } else { + this->info->vida--; + if( this->info->vida == 0 ) this->sam->o = 5; + } + } + } + } + + if( this->next != NULL ) { + if( this->next->update() ) { + Momia* seguent = this->next->next; + delete this->next; + this->next = seguent; + this->info->momies--; + } + } + + return morta; +} + +void Momia::insertar( Momia* momia ) { + + if( this->next != NULL ) { + this->next->insertar( momia ); + } else { + this->next = momia; + } +} diff --git a/momia.h b/momia.h new file mode 100755 index 0000000..c06fc09 --- /dev/null +++ b/momia.h @@ -0,0 +1,28 @@ +#pragma once + +#include "sprite.h" +#include "prota.h" +#include "engendro.h" +#include "info.h" + +class Momia : public Sprite { + +public: + + Momia( JD8_Surface gfx, Info* info, bool dimoni, Uint16 x, Uint16 y, Prota* sam ); + + void clear(); + void draw(); + bool update(); + void insertar( Momia* momia ); + + bool dimoni; + Momia* next; + +protected: + + Prota* sam; + Info* info; + Engendro* engendro; + +}; diff --git a/prota.cpp b/prota.cpp new file mode 100755 index 0000000..ba7d56b --- /dev/null +++ b/prota.cpp @@ -0,0 +1,163 @@ +#include "prota.h" +#include "jgame.h" +#include "jinput.h" + +Prota::Prota( JD8_Surface gfx, Info* info ) : Sprite( gfx ) { + this->info = info; + + this->entitat = (Entitat*)malloc( sizeof( Entitat ) ); + this->entitat->num_frames = 82; + this->entitat->frames = (Frame*)malloc( this->entitat->num_frames * sizeof( Frame ) ); + Uint16 frame = 0; + for( int y = 0; y < 4; y++ ) { + for( int x = 0; x < 5; x++ ) { + this->entitat->frames[frame].w = 15; + this->entitat->frames[frame].h = 15; + if( this->info->num_piramide == 4 ) this->entitat->frames[frame].h -= 5; + this->entitat->frames[frame].x = x*15; + this->entitat->frames[frame].y = 20+(y*15); + frame++; + + } + } + for( int y = 95; y < 185; y+=30 ) { + for( int x = 60; x < 315; x+=15 ) { + if( x != 300 || y != 155 ) { + this->entitat->frames[frame].w = 15; + this->entitat->frames[frame].h = 30; + if( this->info->num_piramide == 4 ) this->entitat->frames[frame].h -= 5; + this->entitat->frames[frame].x = x; + this->entitat->frames[frame].y = y; + frame++; + } + } + } + for( int y = 20; y < 50; y+=15 ) { + for( int x = 225; x < 315; x+=15 ) { + this->entitat->frames[frame].w = 15; + this->entitat->frames[frame].h = 15; + if( this->info->num_piramide == 4 ) this->entitat->frames[frame].h -= 5; + this->entitat->frames[frame].x = x; + this->entitat->frames[frame].y = y; + frame++; + } + } + + this->entitat->num_animacions = 6; + this->entitat->animacions = (Animacio*)malloc( this->entitat->num_animacions * sizeof( Animacio ) ); + for( int i = 0; i < 4; i++ ) { + this->entitat->animacions[i].num_frames = 8; + this->entitat->animacions[i].frames = (Uint8*)malloc( 8 ); + this->entitat->animacions[i].frames[0] = 0 + (i*5); + this->entitat->animacions[i].frames[1] = 1 + (i*5); + this->entitat->animacions[i].frames[2] = 2 + (i*5); + this->entitat->animacions[i].frames[3] = 1 + (i*5); + this->entitat->animacions[i].frames[4] = 0 + (i*5); + this->entitat->animacions[i].frames[5] = 3 + (i*5); + this->entitat->animacions[i].frames[6] = 4 + (i*5); + this->entitat->animacions[i].frames[7] = 3 + (i*5); + } + this->entitat->animacions[4].num_frames = 50; + this->entitat->animacions[4].frames = (Uint8*)malloc( 50 ); + for( int i = 0; i < 50; i++ ) this->entitat->animacions[4].frames[i] = i + 20; + + this->entitat->animacions[5].num_frames = 12; + this->entitat->animacions[5].frames = (Uint8*)malloc( 12 ); + for( int i = 0; i < 12; i++ ) this->entitat->animacions[5].frames[i] = i + 70; + + this->cur_frame = 0; + this->x = 150; + this->y = 30; + this->o = 0; + this->cycles_per_frame = 4; + this->pergami = false; + this->frame_pejades = 0; +} + +void Prota::draw() { + + Sprite::draw(); + + if( this->info->num_piramide == 4 && this->o != 4) { + if( ( JG_GetCycleCounter() % 40 ) < 20 ) { + JD8_BlitCK(this->x, this->y, this->gfx, 220, 80, 15, 15, 255 ); + } else { + JD8_BlitCK(this->x, this->y, this->gfx, 235, 80, 15, 15, 255 ); + } + } +} + +Uint8 Prota::update() { + + Uint8 eixir = 0; + + if( this->o < 4 ) { + Uint8 dir = 0; + if ( JI_KeyPressed(SDL_SCANCODE_DOWN) ) { + if( (this->x-20)%65 == 0 ) { + this->o = 0; + dir = 1; + } else { + dir = this->o + 1; + } + } + if ( JI_KeyPressed(SDL_SCANCODE_UP) ) { + if( (this->x-20)%65 == 0 ) { + this->o = 1; + dir = 2; + } else { + dir = this->o + 1; + } + } + if( JI_KeyPressed( SDL_SCANCODE_RIGHT ) ) { + if( (this->y-30)%35 == 0 ) { + this->o = 2; + dir = 3; + } else { + dir = this->o + 1; + } + } + if( JI_KeyPressed( SDL_SCANCODE_LEFT ) ) { + if( (this->y-30)%35 == 0 ) { + this->o = 3; + dir = 4; + } else { + dir = this->o + 1; + } + } + switch( dir ) { + case 1: + if( this->y < 170 ) this->y++; + break; + case 2: + if( this->y > 30 ) this->y--; + break; + case 3: + if( this->x < 280 ) this->x++; + break; + case 4: + if( this->x > 20 ) this->x--; + break; + } + if( dir == 0 ) { + this->cur_frame = 0; + } else { + this->frame_pejades++; + if( this->frame_pejades == 15 ) this->frame_pejades = 0; + if( JG_GetCycleCounter() % this->cycles_per_frame == 0 ) { + this->cur_frame++; + if( this->cur_frame == this->entitat->animacions[this->o].num_frames ) this->cur_frame = 0; + } + } + eixir = false; + } else { + if( JG_GetCycleCounter() % this->cycles_per_frame == 0 ) { + this->cur_frame++; + if( this->cur_frame == this->entitat->animacions[this->o].num_frames ) { + if( this->o == 4 ) { eixir = 1; } else { eixir = 2; } + } + } + } + return eixir; +} + diff --git a/prota.h b/prota.h new file mode 100755 index 0000000..aefd2af --- /dev/null +++ b/prota.h @@ -0,0 +1,22 @@ +#pragma once + +#include "sprite.h" +#include "info.h" + +class Prota : public Sprite { + +public: + + Prota( JD8_Surface gfx, Info* info ); + + void draw(); + Uint8 update(); + + Uint8 frame_pejades; + bool pergami; + +protected: + + Info* info; + +}; diff --git a/sprite.cpp b/sprite.cpp new file mode 100755 index 0000000..f7fe8b6 --- /dev/null +++ b/sprite.cpp @@ -0,0 +1,37 @@ +#include "sprite.h" + +Sprite::Sprite( JD8_Surface gfx ) { + + this->gfx = gfx; + this->entitat = NULL; + +} + +Sprite::~Sprite(void) { + + if( this->entitat != NULL ) { + + if( this->entitat->num_frames > 0 ) free( this->entitat->frames ); + + if( this->entitat->num_animacions > 0 ) { + for( int i = 0; i < this->entitat->num_animacions; i++ ) { + if( this->entitat->animacions[i].num_frames > 0 ) free( this->entitat->animacions[i].frames ); + } + } + + free( this->entitat ); + } + +} + +void Sprite::draw() { + + JD8_BlitCK( this->x, this->y, this->gfx, this->entitat->frames[this->entitat->animacions[this->o].frames[this->cur_frame]].x, + this->entitat->frames[this->entitat->animacions[this->o].frames[this->cur_frame]].y, + this->entitat->frames[this->entitat->animacions[this->o].frames[this->cur_frame]].w, + this->entitat->frames[this->entitat->animacions[this->o].frames[this->cur_frame]].h, + 255); + +} + + diff --git a/sprite.h b/sprite.h new file mode 100755 index 0000000..dd4f777 --- /dev/null +++ b/sprite.h @@ -0,0 +1,44 @@ +#pragma once + +#include "jdraw8.h" + +struct Frame { + Uint16 x; + Uint16 y; + Uint16 w; + Uint16 h; +}; + +struct Animacio { + Uint8 num_frames; + Uint8* frames; +}; + +struct Entitat { + Uint8 num_frames; + Frame* frames; + Uint8 num_animacions; + Animacio* animacions; +}; + +class Sprite { + +public: + + Sprite( JD8_Surface gfx ); + ~Sprite(void); + + void draw(); + + Entitat* entitat; + Uint8 cur_frame; + Uint16 x; + Uint16 y; + Uint16 o; + +protected: + + JD8_Surface gfx; + Uint8 cycles_per_frame; + +};