diff --git a/include/akgl/SDL_GameControllerDB.h b/include/akgl/SDL_GameControllerDB.h index 1e6d890..09109b2 100644 --- a/include/akgl/SDL_GameControllerDB.h +++ b/include/akgl/SDL_GameControllerDB.h @@ -1,7 +1,7 @@ #ifndef _SDL_GAMECONTROLLERDB_H_ #define _SDL_GAMECONTROLLERDB_H_ -// Taken from https://raw.githubusercontent.com/mdqinc/SDL_GameControllerDB/refs/heads/master/gamecontrollerdb.txt on Fri May 8 10:01:12 PM EDT 2026 +// Taken from https://raw.githubusercontent.com/mdqinc/SDL_GameControllerDB/refs/heads/master/gamecontrollerdb.txt on Fri May 8 10:15:45 PM EDT 2026 #define AKGL_SDL_GAMECONTROLLER_DB_LEN 2227 diff --git a/include/akgl/game.h b/include/akgl/game.h index 9da205d..06a320e 100644 --- a/include/akgl/game.h +++ b/include/akgl/game.h @@ -25,8 +25,8 @@ typedef struct { } akgl_GameState; typedef struct { - char name[256]; char version[32]; + char name[256]; char uri[256]; int16_t screenwidth; int16_t screenheight; @@ -36,14 +36,14 @@ typedef struct { SDL_Time lastIterTime; SDL_Time lastFPSTime; int16_t framesSinceUpdate; - MIX_Mixer *mixer; - MIX_Track *tracks[AKGL_GAME_AUDIO_MAX_TRACKS]; } akgl_Game; extern SDL_Window *window; extern SDL_Renderer *renderer; extern akgl_Tilemap gamemap; extern MIX_Audio *bgm; +extern MIX_Mixer *akgl_mixer; +extern MIX_Track *akgl_tracks[AKGL_GAME_AUDIO_MAX_TRACKS]; extern SDL_FRect camera; extern akgl_Game game; diff --git a/src/assets.c b/src/assets.c index 05e4d60..683d2c7 100644 --- a/src/assets.c +++ b/src/assets.c @@ -21,13 +21,13 @@ akerr_ErrorContext *akgl_load_start_bgm(char *fname) //SDL_snprintf((char *)&tmpstr->data, AKGL_MAX_STRING_LENGTH, "%s%s", SDL_GetBasePath(), fname); SDL_Log("Loading music asset from %s", fname); - bgm = MIX_LoadAudio(game.mixer, fname, true); + bgm = MIX_LoadAudio(akgl_mixer, fname, true); FAIL_ZERO_BREAK(errctx, bgm, AKERR_NULLPOINTER, "Failed to load music asset %s : %s", fname, SDL_GetError()); - bgmtrack = MIX_CreateTrack(game.mixer); + bgmtrack = MIX_CreateTrack(akgl_mixer); FAIL_ZERO_BREAK(errctx, bgmtrack, AKERR_NULLPOINTER, "Failed to create audio track for background music: %s", SDL_GetError()); - game.tracks[AKGL_GAME_AUDIO_TRACK_BGM] = bgmtrack; + akgl_tracks[AKGL_GAME_AUDIO_TRACK_BGM] = bgmtrack; FAIL_ZERO_BREAK( errctx, diff --git a/src/game.c b/src/game.c index 21840f4..b8601dc 100644 --- a/src/game.c +++ b/src/game.c @@ -23,8 +23,8 @@ akgl_Frame paddle2; akgl_Frame table; akgl_Tilemap gamemap; MIX_Audio *bgm = NULL; -MIX_Mixer *GAME_mixer = NULL; -MIX_Track *GAME_tracks[64]; +MIX_Mixer *akgl_mixer = NULL; +MIX_Track *akgl_tracks[AKGL_GAME_AUDIO_MAX_TRACKS]; SDL_FRect camera; akgl_Game game; @@ -86,10 +86,10 @@ akerr_ErrorContext AKERR_NOIGNORE *akgl_game_init() AKGL_ERR_SDL, "Couldn't initialize audio: %s", SDL_GetError()); - game.mixer = MIX_CreateMixerDevice(SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK, 0); + akgl_mixer = MIX_CreateMixerDevice(SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK, 0); FAIL_ZERO_RETURN( errctx, - game.mixer, + akgl_mixer, AKGL_ERR_SDL, "Unable to create mixer device: %s", SDL_GetError()); @@ -134,6 +134,27 @@ akerr_ErrorContext AKERR_NOIGNORE *akgl_game_save(char *fpath) akerr_ErrorContext AKERR_NOIGNORE *akgl_game_load(char *fpath) { + FILE *fp = NULL; + char version[32]; + PREPARE_ERROR(errctx); + FAIL_ZERO_RETURN(errctx, fpath, AKERR_NULLPOINTER, "NULL file path"); + fp = fopen(fpath, "rb"); + FAIL_ZERO_RETURN( + errctx, + (fread((void *)&version, 1, 32, fp) < 32), + AKERR_IO, + "Corrupt save file"); + FAIL_ZERO_RETURN( + errctx, + strncmp((char *)&game.version, (char *)&version, 32), + AKERR_API, + "Save game can not be loaded, it is from an incompatible version"); + rewind(fp); + FAIL_ZERO_RETURN( + errctx, + (fread((void *)&game, 1, sizeof(akgl_Game), fp) < sizeof(akgl_Game)), + AKERR_IO, + "Corrupt save file"); SUCCEED(errctx); }