diff --git a/source/DSGM_room.c b/source/DSGM_room.c index d244577..65c7b6a 100644 --- a/source/DSGM_room.c +++ b/source/DSGM_room.c @@ -216,41 +216,6 @@ void DSGM_LeaveRoom(DSGM_Room *room) { } } -unsigned char DSGM_SaveRoom(DSGM_Room *room, char *filename) { - /*u8 screen; - int layerNumber; - int group; - int object; - FILE *f = fopen(filename, "ab"); - if(!f) return 0; - - DSGM_Debug("Saving room...\n"); - - for(screen = 0; screen < 2; screen++) { - // Save backgrounds - for(layerNumber = 0; layerNumber < 4; layerNumber++) { - // Store pointer to background - fwrite(&room->layers[screen][layerNumber].background, sizeof(DSGM_Background *), 1, f) { - } - } - - for(screen = 0; screen < 2; screen++) { - // Save object instances - for(group = 0; group < room->objectGroupCount[screen]; group++) { - for(object = 0; object < room->objectGroups[screen][group].objectInstanceCount; object++) { - DSGM_ObjectInstance *objectInstance = &room->objectGroups[screen][group].objectInstances[object]; - fwrite(objectInstance, sizeof(DSGM_ObjectInstance), 1, f); - } - } - } - - fclose(f); - - DSGM_Debug("Saved\n");*/ - - return 1; -} - inline int DSGM_GetRoomNumberFull(DSGM_Room *rooms, DSGM_Room *room) { return room - rooms; } diff --git a/source/DSGM_saving.c b/source/DSGM_saving.c index a25eb00..1a9a514 100644 --- a/source/DSGM_saving.c +++ b/source/DSGM_saving.c @@ -12,3 +12,78 @@ inline bool DSGM_StartSaving(void) { inline void DSGM_FinishSaving(void) { fclose(DSGM_save); } + +void DSGM_WriteRoomFull(DSGM_Room *room) { + u8 screen; + int layerNumber; + int group; + int object; + + DSGM_Debug("Saving room...\n"); + + fprintf(DSGM_save, "ROOM"); + + for(screen = 0; screen < 2; screen++) { + for(layerNumber = 0; layerNumber < 4; layerNumber++) { + // Save layer + fwrite(&room->layers[screen][layerNumber], sizeof(DSGM_Layer), 1, DSGM_save); + } + } + + for(screen = 0; screen < 2; screen++) { + // Save object instances + fwrite(&room->objectGroupCount[screen], sizeof(int), 1, DSGM_save); + + for(group = 0; group < room->objectGroupCount[screen]; group++) { + fwrite(&room->objectGroups[screen][group].objectInstanceCount, sizeof(int), 1, DSGM_save); + + for(object = 0; object < room->objectGroups[screen][group].objectInstanceCount; object++) { + DSGM_ObjectInstance *objectInstance = &room->objectGroups[screen][group].objectInstances[object]; + fwrite(objectInstance, sizeof(DSGM_ObjectInstance), 1, DSGM_save); + } + } + } + + DSGM_Debug("Saved room\n"); +} + +void DSGM_ReadRoomFull(DSGM_Room *room) { + u8 screen; + int layerNumber; + int group; + int object; + + DSGM_Debug("Loading room...\n"); + + char magic[5] = { 0 }; + fread(magic, sizeof(char), 4, DSGM_save); + if(strncmp(magic, "ROOM", 4)) { + DSGM_Debug("Failed! Bad magic...\n"); + return; + } + + for(screen = 0; screen < 2; screen++) { + for(layerNumber = 0; layerNumber < 4; layerNumber++) { + // Load layer + fread(&room->layers[screen][layerNumber], sizeof(DSGM_Layer), 1, DSGM_save); + } + } + + for(screen = 0; screen < 2; screen++) { + // Load object instances + fread(&room->objectGroupCount[screen], sizeof(int), 1, DSGM_save); + room->objectGroups[screen] = realloc(room->objectGroups[screen], room->objectGroupCount[screen] * sizeof(DSGM_ObjectGroup)); + + for(group = 0; group < room->objectGroupCount[screen]; group++) { + fread(&room->objectGroups[screen][group].objectInstanceCount, sizeof(int), 1, DSGM_save); + room->objectGroups[screen][group].objectInstances = realloc(room->objectGroups[screen][group].objectInstances, room->objectGroups[screen][group].objectInstanceCount * sizeof(DSGM_ObjectInstance)); + + for(object = 0; object < room->objectGroups[screen][group].objectInstanceCount; object++) { + DSGM_ObjectInstance *objectInstance = &room->objectGroups[screen][group].objectInstances[object]; + fread(objectInstance, sizeof(DSGM_ObjectInstance), 1, DSGM_save); + } + } + } + + DSGM_Debug("Loaded room\n"); +}