Пример #1
0
ALERROR WriteHeader (int iGameFile, CSymbolTable &Resources, CDataFile &Out)
	{
	ALERROR error;
	CMemoryWriteStream Stream;
	DWORD dwSave;

	if (error = Stream.Create())
		{
		printf("Out of memory\n");
		return error;
		}

	//	Signature

	dwSave = TDB_SIGNATURE;
	Stream.Write((char *)&dwSave, sizeof(dwSave));

	//	Version

	dwSave = TDB_VERSION;
	Stream.Write((char *)&dwSave, sizeof(dwSave));

	//	Game file entry

	dwSave = iGameFile;
	Stream.Write((char *)&dwSave, sizeof(dwSave));

	//	Game title

	CString sGameTitle = CONSTLIT("Transcendence: The March of the Heretic");
	sGameTitle.WriteToStream(&Stream);

	//	Resource map

	CString sSave;
	if (error = CObject::Flatten(&Resources, &sSave))
		{
		printf("Unable to flatten resources map\n");
		return error;
		}

	sSave.WriteToStream(&Stream);

	//	Write out the header

	Stream.Close();
	CString sData(Stream.GetPointer(), Stream.GetLength(), TRUE);
	int iEntry;
	if (error = Out.AddEntry(sData, &iEntry))
		{
		printf("Unable to write out header\n");
		return error;
		}

	Out.SetDefaultEntry(iEntry);

	return NOERROR;
	}
Пример #2
0
void IEffectPainter::WriteToStream (IWriteStream *pStream)
	{
	CString sUNID = GetCreator()->GetUNIDString();
	sUNID.WriteToStream(pStream);

	CString sClass = GetCreator()->GetTag();
	sClass.WriteToStream(pStream);

	OnWriteToStream(pStream);
	}
Пример #3
0
void CTextPainter::OnWriteToStream (IWriteStream *pStream)

//	OnWriteToStream
//
//	Writes to a stream
//
//	CString			m_sText

	{
	m_sText.WriteToStream(pStream);
	}
Пример #4
0
void CEffectCreator::WritePainterToStream (IWriteStream *pStream, IEffectPainter *pPainter)

//	WritePainterToStream
//
//	Writes the painter to the stream (pPainter may be NULL)

	{
	if (pPainter)
		pPainter->WriteToStream(pStream);
	else
		{
		//	Write the UNID

		CString sNull;
		sNull.WriteToStream(pStream);

		//	Write the Class

		sNull.WriteToStream(pStream);
		}
	}
Пример #5
0
void CTopologyNode::WriteToStream (IWriteStream *pStream)

//	WriteToStream
//
//	Writes out the variable portions of the node
//
//	CString		m_sID
//	DWORD		m_SystemUNID
//	DWORD		m_pMap (UNID)
//	DWORD		m_xPos
//	DWORD		m_yPos
//	CString		m_sName
//	CString		m_sAttributes
//	DWORD		m_iLevel
//	DWORD		m_dwID
//
//	DWORD		No of named gates
//	CString		gate: sName
//	CString		gate: sDestNode
//	CString		gate: sDestEntryPoint
//
//	DWORD		No of variant labels
//	CString		variant label
//
//	CAttributeDataBlock	m_Data
//	DWORD		flags
//
//	CString		m_sEpitaph
//	CString		m_sEndGameReason

	{
	int i;
	DWORD dwSave;

	m_sID.WriteToStream(pStream);
	pStream->Write((char *)&m_SystemUNID, sizeof(DWORD));

	dwSave = (m_pMap ? m_pMap->GetUNID() : 0);
	pStream->Write((char *)&dwSave, sizeof(DWORD));

	pStream->Write((char *)&m_xPos, sizeof(DWORD));
	pStream->Write((char *)&m_yPos, sizeof(DWORD));
	m_sName.WriteToStream(pStream);
	m_sAttributes.WriteToStream(pStream);
	pStream->Write((char *)&m_iLevel, sizeof(DWORD));
	pStream->Write((char *)&m_dwID, sizeof(DWORD));

	DWORD dwCount = m_NamedGates.GetCount();
	pStream->Write((char *)&dwCount, sizeof(DWORD));
	for (i = 0; i < (int)dwCount; i++)
		{
		StarGateDesc *pDesc = (StarGateDesc *)m_NamedGates.GetValue(i);
		CString sName = m_NamedGates.GetKey(i);
		sName.WriteToStream(pStream);
		pDesc->sDestNode.WriteToStream(pStream);
		pDesc->sDestEntryPoint.WriteToStream(pStream);
		}

	dwCount = m_VariantLabels.GetCount();
	pStream->Write((char *)&dwCount, sizeof(DWORD));
	for (i = 0; i < (int)dwCount; i++)
		m_VariantLabels[i].WriteToStream(pStream);

	//	Write opaque data

	m_Data.WriteToStream(pStream);

	//	Flags

	dwSave = 0;
	dwSave |= (m_bKnown ? 0x00000001 : 0);
	pStream->Write((char *)&dwSave, sizeof(DWORD));

	//	Write end game data

	m_sEpitaph.WriteToStream(pStream);
	m_sEndGameReason.WriteToStream(pStream);
	}
Пример #6
0
void COrderList::WriteToStream (IWriteStream *pStream, CSystem *pSystem)

//	WriteToStream
//
//	Writes to stream
//
//	DWORD			No. of orders
//
//	For each order:
//	DWORD			LOWORD = dwOrderType; HIWORD = dwDataType
//	DWORD			Target reference
//
//	DWORD or		(Depends on dwDataType)
//	CString

	{
	int i;
	DWORD dwSave;

	dwSave = m_List.GetCount();
	pStream->Write((char *)&dwSave, sizeof(DWORD));

	for (i = 0; i < m_List.GetCount(); i++)
		{
		SOrderEntry *pEntry = &m_List[i];

		dwSave = MAKELONG(pEntry->dwOrderType, pEntry->dwDataType);
		pStream->Write((char *)&dwSave, sizeof(DWORD));

		pSystem->WriteObjRefToStream(pEntry->pTarget, pStream);

		switch (pEntry->dwDataType)
			{
			case IShipController::dataInteger:
			case IShipController::dataPair:
				pStream->Write((char *)&pEntry->dwData, sizeof(DWORD));
				break;

			case IShipController::dataString:
				{
				CString *pString = (CString *)pEntry->dwData;
				if (pString)
					pString->WriteToStream(pStream);
				else
					{
					CString sNull;
					sNull.WriteToStream(pStream);
					}
				break;
				}

			case IShipController::dataVector:
				{
				CVector *pVector = (CVector *)pEntry->dwData;
				if (pVector)
					pStream->Write((char *)pVector, sizeof(CVector));
				else
					pStream->Write((char *)&NullVector, sizeof(CVector));
				break;
				}
			}
		}
	}