Exemplo n.º 1
0
/**
 *
 *  @author OLiver
 */
bool Savegame::Save(BinaryFile& file)
{
    // Versionszeug schreiben
    WriteVersion(file, 8, SAVE_SIGNATURE, SAVE_VERSION);

    // Timestamp der Aufzeichnung
    unser_time_t tmpTime = libendian::ConvertEndianess<false>::fromNative(save_time);
    file.WriteRawData(&tmpTime, 8);

    // Mapname
    file.WriteShortString(map_name);

    // Anzahl Spieler
    file.WriteUnsignedChar(GetPlayerCount());

    // Größe der Spielerdaten (später ausfüllen)
    unsigned players_size = 0;
    unsigned players_pos = file.Tell();
    file.WriteUnsignedInt(players_size);

    // Spielerdaten
    WritePlayerData(file);

    // Wieder zurückspringen und Größe des Spielerblocks eintragen
    unsigned new_pos = file.Tell();
    file.Seek(players_pos, SEEK_SET);
    file.WriteUnsignedInt(new_pos - players_pos - 4);
    file.Seek(new_pos, SEEK_SET);

    // GGS
    WriteGGS(file);

    // Start-GF
    file.WriteUnsignedInt(start_gf);

    // Serialisiertes Spielzeug reinschreiben
    sgd.WriteToFile(file);

    return true;
}
Exemplo n.º 2
0
bool Savegame::Save(BinaryFile& file)
{
    // Versionszeug schreiben
    WriteFileHeader(file);

    // Timestamp der Aufzeichnung
    unser_time_t tmpTime = libendian::ConvertEndianess<false>::fromNative(save_time);
    file.WriteRawData(&tmpTime, sizeof(tmpTime));

    // Mapname
    file.WriteShortString(mapName);

    WritePlayerData(file);
    WriteGGS(file);

    // Start-GF
    file.WriteUnsignedInt(start_gf);

    // Serialisiertes Spielzeug reinschreiben
    sgd.WriteToFile(file);

    return true;
}
Exemplo n.º 3
0
/**
 *
 *  @author OLiver
 */
bool Replay::WriteHeader(const std::string& filename)
{
	// Datei öffnen
	if(!file.Open(filename.c_str(),OFM_WRITE))
		return false;

	Replay::filename = filename;

	// Versionszeug schreiben
	WriteVersion(file,6,REPLAY_SIGNATURE,REPLAY_VERSION);
	// Timestamp der Aufzeichnung (TODO: Little/Big Endian unterscheidung)
	file.WriteRawData(&save_time,8);
	/// NWF-Länge
	file.WriteUnsignedShort(nwf_length);
	/// Zufallsgeneratorinitialisierung
	file.WriteUnsignedInt(random_init);
	/// Pathfinding-Results hier drin?
	file.WriteUnsignedChar(pathfinding_results ? 1 : 0);

	// Position merken für End-GF
	last_gf_file_pos = file.Tell();

	/// End-GF (erstmal nur 0, wird dann im Spiel immer geupdatet)
	file.WriteUnsignedInt(last_gf);
	// Anzahl Spieler
	file.WriteUnsignedChar(player_count);
	// Spielerdaten
	WritePlayerData(file);
	// GGS
	WriteGGS(file);

	// Map-Type
	file.WriteUnsignedShort(static_cast<unsigned short>(map_type));

	switch(map_type)
	{
	default:
		break;
	case MAPTYPE_OLDMAP:
		{
			// Map-Daten
			file.WriteUnsignedInt(map_length);
			file.WriteUnsignedInt(map_zip_length);
			file.WriteRawData(map_data,map_zip_length);
		} break;
	case MAPTYPE_SAVEGAME:
		{
			// Savegame speichern
			if(!savegame->Save(file))
				return false;
		} break;
	}

	// Mapname
	file.WriteShortString(map_name);

	// bei ungerader 4er position aufrunden
	//while(file.Tell() % 4)
	//	file.WriteSignedChar(0);

	// Alles sofort reinschreiben
	file.Flush();
	
	gf_file_pos  = 0;

	// Create File for pathfinding results
	if(pathfinding_results)
		pf_file.Open((filename + "_res").c_str(),OFM_WRITE);

	return true;
}