/** * * @author OLiver */ bool Savegame::Load(BinaryFile& file, const bool load_players, const bool load_sgd) { // Signatur und Version einlesen if(!ValidateFile(file, 8, SAVE_SIGNATURE, SAVE_VERSION)) { LOG.lprintf("Savegame::Load: ERROR: File is not a valid RTTR savegame!\n"); return false; } // Zeitstempel file.ReadRawData(&save_time, 8); // Map-Name file.ReadShortString(map_name); // Anzahl Spieler player_count = file.ReadUnsignedChar(); // Spielerzeug if(load_players) { // Größe des Spielerblocks überspringen file.Seek(4, SEEK_CUR); ReadPlayerData(file); } else { // Überspringen players = 0; unsigned player_size = file.ReadUnsignedInt(); file.Seek(player_size, SEEK_CUR); } // GGS ReadGGS(file); // Start-GF start_gf = file.ReadUnsignedInt(); if(load_sgd) { // Serialisiertes Spielzeug lesen sgd.ReadFromFile(file); } return true; }
/** * * @author OLiver */ bool Savegame::Load(BinaryFile& file, const bool load_players, const bool load_sgd) { // Signatur und Version einlesen if(!ValidateFile(file, sizeof(SAVE_SIGNATURE), SAVE_SIGNATURE, SAVE_VERSION)) return false; // Zeitstempel file.ReadRawData(&save_time, 8); save_time = libendian::ConvertEndianess<false>::toNative(save_time); // Map-Name map_name = file.ReadShortString(); // Anzahl Spieler SetPlayerCount(file.ReadUnsignedChar()); // Spielerzeug if(load_players) { // Größe des Spielerblocks überspringen file.Seek(4, SEEK_CUR); ReadPlayerData(file); } else { // Überspringen unsigned player_size = file.ReadUnsignedInt(); file.Seek(player_size, SEEK_CUR); } // GGS ReadGGS(file); // Start-GF start_gf = file.ReadUnsignedInt(); if(load_sgd) { // Serialisiertes Spielzeug lesen sgd.ReadFromFile(file); } return true; }
bool Savegame::Load(BinaryFile& file, const bool load_players, const bool load_sgd) { // Signatur und Version einlesen if(!ReadFileHeader(file)) return false; // Zeitstempel file.ReadRawData(&save_time, sizeof(save_time)); save_time = libendian::ConvertEndianess<false>::toNative(save_time); // Map-Name mapName = file.ReadShortString(); ReadPlayerData(file); ReadGGS(file); // Start-GF start_gf = file.ReadUnsignedInt(); if(load_sgd) sgd.ReadFromFile(file); // Serialisiertes Spielzeug lesen return true; }
/** * * @author OLiver */ bool Replay::LoadHeader(const std::string& filename, const bool load_extended_header) { this->filename = filename; // Datei öffnen if(!file.Open(filename.c_str(),OFM_READ)) return false; // Version überprüfen // Signatur und Version einlesen if(!ValidateFile(file,6,REPLAY_SIGNATURE,REPLAY_VERSION)) { LOG.lprintf("Replay::Load: ERROR: File \"%s\" is not a valid RTTR replay!\n", filename.c_str()); return false; } // Zeitstempel file.ReadRawData(&save_time,8); // NWF-Länge nwf_length = file.ReadUnsignedShort(); // Zufallsgeneratorinitialisierung random_init = file.ReadUnsignedInt(); /// Pathfinding-Results hier drin? pathfinding_results = (file.ReadUnsignedChar()==1); /// End-GF last_gf = file.ReadUnsignedInt(); // Spieleranzahl player_count = file.ReadUnsignedChar(); // Spielerdaten ReadPlayerData(file); // GGS ReadGGS(file); // Map-Type map_type = static_cast<MapType>(file.ReadUnsignedShort()); if(load_extended_header) { switch(map_type) { default: break; case MAPTYPE_OLDMAP: { // Map-Daten map_length = file.ReadUnsignedInt(); map_zip_length = file.ReadUnsignedInt(); map_data = new unsigned char[map_zip_length]; file.ReadRawData(map_data,map_zip_length); } break; case MAPTYPE_SAVEGAME: { // Savegame speichern if(!savegame->Load(file,true,true)) return false; } break; } file.ReadShortString(map_name); // bei ungerader 4er position aufrunden //while(file.Tell() % 4) // file.Seek(1, SEEK_CUR); } if(load_extended_header) { // Try to open precalculated pathfinding results pathfinding_results = pf_file.Open((filename + "_res").c_str(),OFM_READ); if(!pathfinding_results) pf_file.Open((filename + "_res").c_str(),OFM_WRITE); } return true; }