Example #1
0
/**
 *
 *  @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;
}
Example #2
0
/**
 *
 *  @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;
}
Example #3
0
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;
}
Example #4
0
/**
 *
 *  @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;
}