// // Created by bruno on 11.6.2025. // #include "gamestate.h" GameState gameState; char *autosaveName = "autosave.dat"; int loadGameState(char *filename, Player *plr) { fflush(stdout); FILE *gameSave = fopen(filename, "rb"); if (gameSave) { fseek(gameSave, 0L, SEEK_END); long sz = ftell(gameSave); if (sz != sizeof(gameState)) { return 1; } rewind(gameSave); fread(&gameState, sizeof(gameState), 1, gameSave); fclose(gameSave); memcpy(plr, &gameState.player, sizeof(gameState.player)); memcpy(tileMap, gameState.tileMap, sizeof(tileMap)); memcpy(backgroundMap, gameState.backgroundTileMap, sizeof(backgroundMap)); SDL_Rect *tmp = audioData.playerRect; memcpy(&audioData, &gameState.audioData, sizeof(gameState.audioData)); audioData.playerRect = tmp; audioData.totalSamples = 0; memcpy(&neededUpdates, &gameState.neededUpdates, sizeof(gameState.neededUpdates)); memcpy(&entities, &gameState.entities, sizeof(gameState.entities)); openCount = gameState.openCount; memcpy(&openList, &gameState.openList, sizeof(gameState.openList)); memcpy(&enemySpawn, &gameState.enemySpawn, sizeof(gameState.enemySpawn)); plr->cursor.targetTile = NULL; plr->cursor.prevTargetTile = NULL; return 0; } return 1; } void saveGameState(char *filename, Player *plr) { memcpy(&gameState.player, plr, sizeof(gameState.player)); memcpy(gameState.tileMap, tileMap, sizeof(gameState.tileMap)); memcpy(gameState.backgroundTileMap, backgroundMap, sizeof(gameState.backgroundTileMap)); memcpy(&gameState.audioData, &audioData, sizeof(gameState.audioData)); memcpy(&gameState.neededUpdates, &neededUpdates, sizeof(neededUpdates)); memcpy(&gameState.entities, &entities, sizeof(entities)); memcpy(&gameState.openList, &openList, sizeof(openList)); memcpy(&gameState.enemySpawn, &enemySpawn, sizeof(enemySpawn)); gameState.openCount = openCount; FILE *gameSave = fopen(filename, "wb"); if (!gameSave) { perror("Failed to open file for saving"); return; } fwrite(&gameState, sizeof(gameState), 1, gameSave); fclose(gameSave); }