diff --git a/data/room/18.tmx b/data/room/18.tmx index 7f5b968..0a5892d 100644 --- a/data/room/18.tmx +++ b/data/room/18.tmx @@ -3,16 +3,16 @@ -5,5,5,5,5,5,5,5,5,5,173,0,0,0,506,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,173,0,0,0,0,506,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,172,5,5, -5,5,5,5,5,5,5,173,0,0,0,0,506,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,172,5, +5,5,5,5,5,5,5,5,0,0,0,0,0,0,506,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,0,0,0,0,0,0,506,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5, +5,5,5,5,5,5,5,0,0,0,0,0,506,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5, 5,5,5,5,5,5,5,0,0,0,0,506,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5, 5,5,5,5,5,5,5,0,0,0,506,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5, 5,5,5,5,173,0,134,0,0,506,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5, 557,557,557,557,557,557,134,0,415,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5, 5,5,5,5,5,5,5,415,415,415,530,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5, -5,5,5,5,5,5,173,0,0,0,0,530,0,0,0,0,0,0,449,449,449,449,449,449,449,449,449,449,449,449,449,5, -5,5,5,5,5,173,0,0,0,0,0,0,530,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5, +5,5,5,5,5,5,0,0,0,0,0,530,0,0,0,0,0,0,449,449,449,449,449,449,449,449,449,449,449,449,449,5, +5,5,5,5,5,0,0,0,0,0,0,0,530,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5, 0,0,0,0,0,0,0,0,0,0,0,0,0,530,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,517,367,5, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,367,367,367,367,429,429,0,429,429,367,367,367,367,367,367,367,367,5, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,343,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5, diff --git a/data/tilesets/standard.png b/data/tilesets/standard.png index 8d8a899..ef7fa44 100644 Binary files a/data/tilesets/standard.png and b/data/tilesets/standard.png differ diff --git a/data/tilesets/standard_zxarne.png b/data/tilesets/standard_zxarne.png index a09f9c7..7902e0e 100644 Binary files a/data/tilesets/standard_zxarne.png and b/data/tilesets/standard_zxarne.png differ diff --git a/source/common/jail_audio.cpp b/source/common/jail_audio.cpp index 7ce9aec..42907fe 100644 --- a/source/common/jail_audio.cpp +++ b/source/common/jail_audio.cpp @@ -1,3 +1,4 @@ +#ifndef JA_USESDLMIXER #include "jail_audio.h" #include "stb_vorbis.c" #include @@ -11,7 +12,7 @@ struct JA_Sound_t { }; struct JA_Channel_t { - JA_Sound sound; + JA_Sound_t *sound; int pos {0}; int times {0}; JA_Channel_state state { JA_CHANNEL_FREE }; @@ -25,7 +26,7 @@ struct JA_Music_t { JA_Music_state state {JA_MUSIC_INVALID}; }; -JA_Music current_music{NULL}; +JA_Music_t *current_music{NULL}; JA_Channel_t channels[JA_MAX_SIMULTANEOUS_CHANNELS]; int JA_freq {48000}; @@ -86,7 +87,7 @@ void JA_Quit() { sdlAudioDevice = 0; } -JA_Music JA_LoadMusic(const char* filename) { +JA_Music_t *JA_LoadMusic(const char* filename) { int chan, samplerate; // [RZC 28/08/22] Carreguem primer el arxiu en memòria i després el descomprimim. Es algo més rapid. @@ -98,7 +99,7 @@ JA_Music JA_LoadMusic(const char* filename) { if (fread(buffer, fsize, 1, f)!=1) return NULL; fclose(f); - JA_Music music = new JA_Music_t(); + JA_Music_t *music = new JA_Music_t(); music->samples = stb_vorbis_decode_memory(buffer, fsize, &chan, &samplerate, &music->output); free(buffer); @@ -121,7 +122,7 @@ JA_Music JA_LoadMusic(const char* filename) { return music; } -void JA_PlayMusic(JA_Music music, const int loop) { +void JA_PlayMusic(JA_Music_t *music, const int loop) { if (current_music != NULL) { current_music->pos = 0; current_music->state = JA_MUSIC_STOPPED; @@ -153,21 +154,21 @@ JA_Music_state JA_GetMusicState() { return current_music->state; } -void JA_DeleteMusic(JA_Music music) { +void JA_DeleteMusic(JA_Music_t *music) { if (current_music == music) current_music = NULL; free(music->output); delete music; } -JA_Sound JA_NewSound(Uint8* buffer, Uint32 length) { - JA_Sound sound = new JA_Sound_t(); +JA_Sound_t *JA_NewSound(Uint8* buffer, Uint32 length) { + JA_Sound_t *sound = new JA_Sound_t(); sound->buffer = buffer; sound->length = length; return sound; } -JA_Sound JA_LoadSound(const char* filename) { - JA_Sound sound = new JA_Sound_t(); +JA_Sound_t *JA_LoadSound(const char* filename) { + JA_Sound_t *sound = new JA_Sound_t(); SDL_AudioSpec wavSpec; SDL_LoadWAV(filename, &wavSpec, &sound->buffer, &sound->length); @@ -184,7 +185,7 @@ JA_Sound JA_LoadSound(const char* filename) { return sound; } -int JA_PlaySound(JA_Sound sound, const int loop) { +int JA_PlaySound(JA_Sound_t *sound, const int loop) { int channel = 0; while (channel < JA_MAX_SIMULTANEOUS_CHANNELS && channels[channel].state != JA_CHANNEL_FREE) { channel++; } if (channel == JA_MAX_SIMULTANEOUS_CHANNELS) channel = 0; @@ -196,7 +197,7 @@ int JA_PlaySound(JA_Sound sound, const int loop) { return channel; } -void JA_DeleteSound(JA_Sound sound) { +void JA_DeleteSound(JA_Sound_t *sound) { for (int i = 0; i < JA_MAX_SIMULTANEOUS_CHANNELS; i++) { if (channels[i].sound == sound) JA_StopChannel(i); } @@ -246,4 +247,5 @@ JA_Channel_state JA_GetChannelState(const int channel) { int JA_SetVolume(int volume) { JA_volume = volume > 128 ? 128 : volume < 0 ? 0 : volume; return JA_volume; -} \ No newline at end of file +} +#endif \ No newline at end of file diff --git a/source/common/jail_audio.h b/source/common/jail_audio.h index 7d03400..4c4d7f9 100644 --- a/source/common/jail_audio.h +++ b/source/common/jail_audio.h @@ -4,27 +4,27 @@ enum JA_Channel_state { JA_CHANNEL_INVALID, JA_CHANNEL_FREE, JA_CHANNEL_PLAYING, JA_CHANNEL_PAUSED }; enum JA_Music_state { JA_MUSIC_INVALID, JA_MUSIC_PLAYING, JA_MUSIC_PAUSED, JA_MUSIC_STOPPED }; -typedef struct JA_Sound_t *JA_Sound; -typedef struct JA_Music_t *JA_Music; +struct JA_Sound_t; +struct JA_Music_t; void JA_Init(const int freq, const SDL_AudioFormat format, const int channels); void JA_Quit(); -JA_Music JA_LoadMusic(const char* filename); -void JA_PlayMusic(JA_Music music, const int loop = -1); +JA_Music_t *JA_LoadMusic(const char* filename); +void JA_PlayMusic(JA_Music_t *music, const int loop = -1); void JA_PauseMusic(); void JA_ResumeMusic(); void JA_StopMusic(); JA_Music_state JA_GetMusicState(); -void JA_DeleteMusic(JA_Music music); +void JA_DeleteMusic(JA_Music_t *music); -JA_Sound JA_NewSound(Uint8* buffer, Uint32 length); -JA_Sound JA_LoadSound(const char* filename); -int JA_PlaySound(JA_Sound sound, const int loop = 0); +JA_Sound_t *JA_NewSound(Uint8* buffer, Uint32 length); +JA_Sound_t *JA_LoadSound(const char* filename); +int JA_PlaySound(JA_Sound_t *sound, const int loop = 0); void JA_PauseChannel(const int channel); void JA_ResumeChannel(const int channel); void JA_StopChannel(const int channel); JA_Channel_state JA_GetChannelState(const int channel); -void JA_DeleteSound(JA_Sound sound); +void JA_DeleteSound(JA_Sound_t *sound); int JA_SetVolume(int volume); \ No newline at end of file diff --git a/source/common/jail_audio_sdlmixer.cpp b/source/common/jail_audio_sdlmixer.cpp new file mode 100644 index 0000000..ddb6b61 --- /dev/null +++ b/source/common/jail_audio_sdlmixer.cpp @@ -0,0 +1,101 @@ +#ifdef JA_USESDLMIXER +#include "jail_audio.h" +#include +#include +#include + +struct JA_Sound_t {}; // Dummy structs +struct JA_Music_t {}; + +int JA_freq {48000}; +SDL_AudioFormat JA_format {AUDIO_S16}; +Uint8 JA_channels {2}; + +void JA_Init(const int freq, const SDL_AudioFormat format, const int channels) { + JA_freq = freq; + JA_format = format; + JA_channels = channels; + Mix_OpenAudio(JA_freq, JA_format, JA_channels, 1024); +} + +void JA_Quit() { + Mix_CloseAudio(); +} + +JA_Music_t *JA_LoadMusic(const char* filename) { + return (JA_Music_t*)Mix_LoadMUS(filename); +} + +void JA_PlayMusic(JA_Music_t *music, const int loop) { + Mix_PlayMusic((Mix_Music*)music, loop); +} + +void JA_PauseMusic() { + Mix_PauseMusic(); +} + +void JA_ResumeMusic() { + Mix_ResumeMusic(); +} + +void JA_StopMusic() { + Mix_HaltMusic(); +} + +JA_Music_state JA_GetMusicState() { + if (Mix_PausedMusic()) { + return JA_MUSIC_PAUSED; + } else if (Mix_PlayingMusic()) { + return JA_MUSIC_PLAYING; + } else { + return JA_MUSIC_STOPPED; + } +} + +void JA_DeleteMusic(JA_Music_t *music) { + Mix_FreeMusic((Mix_Music*)music); +} + +JA_Sound_t *JA_NewSound(Uint8* buffer, Uint32 length) { + return NULL; +} + +JA_Sound_t *JA_LoadSound(const char* filename) { + JA_Sound_t *sound = (JA_Sound_t*)Mix_LoadWAV(filename); + return sound; +} + +int JA_PlaySound(JA_Sound_t *sound, const int loop) { + return Mix_PlayChannel(-1, (Mix_Chunk*)sound, loop); +} + +void JA_DeleteSound(JA_Sound_t *sound) { + Mix_FreeChunk((Mix_Chunk*)sound); +} + +void JA_PauseChannel(const int channel) { + Mix_Pause(channel); +} + +void JA_ResumeChannel(const int channel) { + Mix_Resume(channel); +} + +void JA_StopChannel(const int channel) { + Mix_HaltChannel(channel); +} + +JA_Channel_state JA_GetChannelState(const int channel) { + if (Mix_Paused(channel)) { + return JA_CHANNEL_PAUSED; + } else if (Mix_Playing(channel)) { + return JA_CHANNEL_PLAYING; + } else { + return JA_CHANNEL_FREE; + } +} + +int JA_SetVolume(int volume) { + return Mix_Volume(-1, volume); +} +#endif diff --git a/source/common/menu.h b/source/common/menu.h index f2a93f3..6164b7c 100644 --- a/source/common/menu.h +++ b/source/common/menu.h @@ -91,9 +91,9 @@ private: bool isCenteredOnY; // Variable para saber si el menu debe estar centrado respecto a un punto en el eje Y bool areElementsCenteredOnX; // Variable para saber si los elementos van centrados en el eje X int widestItem; // Anchura del elemento más ancho - JA_Sound soundAccept; // Sonido al aceptar o elegir una opción del menu - JA_Sound soundCancel; // Sonido al cancelar el menu - JA_Sound soundMove; // Sonido al mover el selector + JA_Sound_t* soundAccept; // Sonido al aceptar o elegir una opción del menu + JA_Sound_t* soundCancel; // Sonido al cancelar el menu + JA_Sound_t* soundMove; // Sonido al mover el selector color_t colorGreyed; // Color para los elementos agrisados rectangle_t rectBG; // Rectangulo de fondo del menu std::vector item; // Estructura para cada elemento del menu diff --git a/source/common/notify.h b/source/common/notify.h index 40e5026..746055d 100644 --- a/source/common/notify.h +++ b/source/common/notify.h @@ -57,7 +57,7 @@ private: color_t bgColor; // Color de fondo de las notificaciones int waitTime; // Tiempo que se ve la notificación std::vector notifications; // La lista de notificaciones activas - JA_Sound sound; // Sonido a reproducir cuando suena la notificación + JA_Sound_t* sound; // Sonido a reproducir cuando suena la notificación // Elimina las notificaciones finalizadas void clearFinishedNotifications(); diff --git a/source/director.h b/source/director.h index c86657c..c600399 100644 --- a/source/director.h +++ b/source/director.h @@ -49,7 +49,7 @@ private: // Variables section_t section; // Sección y subsección actual del programa; - JA_Music music; // Musica del titulo + JA_Music_t* music; // Musica del titulo std::string executablePath; // Path del ejecutable std::string systemFolder; // Carpeta del sistema donde guardar datos diff --git a/source/ending.h b/source/ending.h index d17fe87..2ce95b7 100644 --- a/source/ending.h +++ b/source/ending.h @@ -70,7 +70,7 @@ private: std::vector spritePics; // Vector con los sprites de texto con su cortinilla int scene; // Escena actual std::vector scenes; // Vector con los textos e imagenes de cada escena - JA_Music music; // Musica que suena durante el final + JA_Music_t* music; // Musica que suena durante el final // Actualiza el objeto void update(); diff --git a/source/ending2.h b/source/ending2.h index 9469b66..e193e5b 100644 --- a/source/ending2.h +++ b/source/ending2.h @@ -39,7 +39,7 @@ private: section_t section; // Estado del bucle principal para saber si continua o se sale Uint32 ticks; // Contador de ticks para ajustar la velocidad del programa Uint32 ticksSpeed; // Velocidad a la que se repiten los bucles del programa - JA_Music music; // Musica que suena durante el final + JA_Music_t* music; // Musica que suena durante el final std::vector spriteList; // Lista con todos los sprites a dibujar std::vector colors; // Vector con los colores para el fade int maxSpriteWidth; // El valor de ancho del sprite mas ancho diff --git a/source/game.h b/source/game.h index 2ed281b..f56dec0 100644 --- a/source/game.h +++ b/source/game.h @@ -43,13 +43,13 @@ private: Stats *stats; // Objeto encargado de gestionar las estadísticas // Variables - JA_Music music; // Musica que suena durante el juego + JA_Music_t* music; // Musica que suena durante el juego Uint32 ticks; // Contador de ticks para ajustar la velocidad del programa Uint32 ticksSpeed; // Velocidad a la que se repiten los bucles del programa section_t section; // Seccion actual dentro del juego std::string currentRoom; // Fichero de la habitación actual playerSpawn_t spawnPoint; // Lugar de la habitación donde aparece el jugador - JA_Sound deathSound; // Sonido a reproducir cuando muere el jugador + JA_Sound_t* deathSound; // Sonido a reproducir cuando muere el jugador board_t board; // Estructura con los datos del marcador bool paused; // Indica si el juego se encuentra en pausa bool blackScreen; // Indica si la pantalla está en negro. Se utiliza para la muerte del jugador diff --git a/source/game_over.h b/source/game_over.h index 42db3b8..33575aa 100644 --- a/source/game_over.h +++ b/source/game_over.h @@ -40,7 +40,7 @@ private: int endSection; // Contador: cuando acaba la sección int iniFade; // Contador: cuando emiepza el fade int fadeLenght; // Contador: duración del fade - JA_Music music; // Musica que suena durante el juego + JA_Music_t* music; // Musica que suena durante el juego // Actualiza el objeto void update(); diff --git a/source/intro.h b/source/intro.h index 691827e..33215a3 100644 --- a/source/intro.h +++ b/source/intro.h @@ -39,9 +39,9 @@ private: Uint32 ticksSpeed; // Velocidad a la que se repiten los bucles del programa int loadCounter; // Contador para controlar las cargas bool loadingFirstPart; // Para saber en que parte de la carga se encuentra - JA_Music loadingSound1; // Sonidos para imitar la carga tipo spectrum - JA_Music loadingSound2; // Sonidos para imitar la carga tipo spectrum - JA_Music loadingSound3; // Sonidos para imitar la carga tipo spectrum + JA_Music_t* loadingSound1; // Sonidos para imitar la carga tipo spectrum + JA_Music_t* loadingSound2; // Sonidos para imitar la carga tipo spectrum + JA_Music_t* loadingSound3; // Sonidos para imitar la carga tipo spectrum int lineIndex[192]; // El orden en el que se procesan las 192 lineas de la pantalla de carga SDL_Rect loadRect; // Rectangulo para dibujar la pantalla de carga diff --git a/source/player.h b/source/player.h index 2c635e8..e614fc1 100644 --- a/source/player.h +++ b/source/player.h @@ -81,8 +81,8 @@ public: SDL_Rect lastPosition; // Contiene la ultima posición del jugador, por si hay que deshacer algun movimiento int jumpIni; // Valor del eje Y en el que se inicia el salto float maxVY; // Velocidad máxima que puede alcanzar al desplazarse en vertical - std::vector jumpSound; // Vecor con todos los sonidos del salto - std::vector fallSound; // Vecor con todos los sonidos de la caída + std::vector jumpSound; // Vecor con todos los sonidos del salto + std::vector fallSound; // Vecor con todos los sonidos de la caída int jumpCounter; // Cuenta el tiempo de salto int fallCounter; // Cuenta el tiempo de caida bool alive; // Indica si el jugador esta vivo o no diff --git a/source/room.h b/source/room.h index 87e17f5..600b7eb 100644 --- a/source/room.h +++ b/source/room.h @@ -104,7 +104,7 @@ private: std::string tileMapFile; // Fichero con el mapa de indices de tile std::vector tileMap; // Indice de los tiles a dibujar en la habitación int autoSurfaceDirection; // Sentido en el que arrastran las superficies automáticas de la habitación - JA_Sound itemSound; // Sonido producido al coger un objeto + JA_Sound_t* itemSound; // Sonido producido al coger un objeto std::vector bottomSurfaces; // Lista con las superficies inferiores de la habitación std::vector topSurfaces; // Lista con las superficies superiores de la habitación std::vector leftSurfaces; // Lista con las superficies laterales de la parte izquierda de la habitación