void Map_Init() { Camera_Position.x = 0; Camera_Position.y = 0; Map_Load(); Map_UpdateAllTiles(); }
static bool Load_Main(FILE *fp) { uint32 position; uint32 length; uint32 header; uint16 version; /* All OpenDUNE / Dune2 savegames should start with 'FORM' */ if (fread(&header, sizeof(uint32), 1, fp) != 1) return false; if (BETOH32(header) != 'FORM') { Error("Invalid magic header in savegame. Not an OpenDUNE / Dune2 savegame."); return false; } /* The total length field, which is ignored */ if (fread(&length, sizeof(uint32), 1, fp) != 1) return false; /* The next 'chunk' is fake, and has no length field */ if (fread(&header, sizeof(uint32), 1, fp) != 1) return false; if (BETOH32(header) != 'SCEN') return false; position = ftell(fp); /* Find the 'INFO' chunk, as it contains the savegame version */ version = 0; length = Load_FindChunk(fp, 'INFO'); if (length == 0) return false; /* Read the savegame version */ if (fread(&version, sizeof(uint16), 1, fp) != 1) return false; length -= 2; if (version == 0) return false; if (version != 0x0290) { /* Get the scenarioID / campaignID */ if (!Info_LoadOld(fp, length)) return false; g_gameMode = GM_RESTART; /* Find the 'PLYR' chunk */ fseek(fp, position, SEEK_SET); length = Load_FindChunk(fp, 'PLYR'); if (length == 0) return false; /* Find the human player */ if (!House_LoadOld(fp, length)) return false; GUI_DisplayModalMessage(String_Get_ByIndex(STR_WARNING_ORIGINAL_SAVED_GAMES_ARE_INCOMPATABLE_WITH_THE_NEW_VERSION_THE_BATTLE_WILL_BE_RESTARTED), 0xFFFF); return true; } /* Load the 'INFO' chunk'. It has to be the first chunk loaded */ if (!Info_Load(fp, length)) return false; /* Rewind, and read other chunks */ fseek(fp, position, SEEK_SET); while (fread(&header, sizeof(uint32), 1, fp) == 1) { if (fread(&length, sizeof(uint32), 1, fp) != 1) return false; length = BETOH32(length); switch (BETOH32(header)) { case 'NAME': break; /* 'NAME' chunk is of no interest to us */ case 'INFO': break; /* 'INFO' chunk is already read */ case 'MAP ': if (!Map_Load (fp, length)) return false; break; case 'PLYR': if (!House_Load (fp, length)) return false; break; case 'UNIT': if (!Unit_Load (fp, length)) return false; break; case 'BLDG': if (!Structure_Load(fp, length)) return false; break; case 'TEAM': if (!Team_Load (fp, length)) return false; break; case 'ODUN': if (!UnitNew_Load (fp, length)) return false; break; default: Error("Unknown chunk in savegame: %c%c%c%c (length: %d). Skipped.\n", header, header >> 8, header >> 16, header >> 24, length); break; } /* Savegames are word aligned */ position += length + 8 + (length & 1); fseek(fp, position, SEEK_SET); } return true; }