Example #1
0
void MfcArchive::writeObject(CObject *obj) {
	if (obj == NULL) {
		writeUint16LE(0);
	} else if (_objectHash.contains(obj)) {
		int32 idx = _objectHash[obj];

		if (idx < 0x7fff) {
			writeUint16LE(idx);
		} else {
			writeUint16LE(0x7fff);
			writeUint32LE(idx);
		}
	} else {
		writeUint16LE(0xffff); // New class
		_objectHash[obj] = _lastIndex++;

		writeUint16LE(1); // schema

		switch (obj->_objtype) {
		case kObjTypeGameVar:
			writePascalString(lookupObjectId(kGameVar), true); // Two byte counter
			break;
		default:
			error("Unhandled save for object type: %d", obj->_objtype);
		}

		obj->save(*this);
	}
}
Example #2
0
void Settings::save(std::string const& path)
{
	FILE* opt = fopen(path.c_str(), "wb");
	
	writeUint8(opt, maxBonuses);
	writeUint16(opt, loadingTime);
	writeUint16(opt, lives);
	writeUint16(opt, timeToLose);
	writeUint16(opt, flagsToWin);
	
	writeUint8(opt, screenSync);
	writeUint8(opt, map);
	writeUint8(opt, wormSettings[0].controller);
	writeUint8(opt, wormSettings[1].controller);
	writeUint8(opt, randomLevel);
	writeUint16(opt, blood);
	writeUint8(opt, gameMode);
	writeUint8(opt, namesOnBonuses);
	writeUint8(opt, regenerateLevel);
	writeUint8(opt, shadow);
	
	fwrite(weapTable, 1, 40, opt);
	
	for(int i = 0; i < 2; ++i)
	for(int j = 0; j < 3; ++j)
		writeUint8(opt, wormSettings[i].rgb[j]);
		
	for(int i = 0; i < 2; ++i)
	{
		for(int j = 0; j < 5; ++j)
		{
			writeUint8(opt, wormSettings[i].weapons[j]);
		}
	}

	writeUint16(opt, wormSettings[0].health);
	writeUint16(opt, wormSettings[1].health);

	for(int i = 0; i < 2; ++i)
	{
		if(wormSettings[i].randomName)
			writePascalString(opt, "", 21);
		else
			writePascalString(opt, wormSettings[i].name, 21);
	}
	
	//fputc(0, opt); // What's this?
	
	writeUint8(opt, loadChange);
	
	char const lieroStr[] = "\x05LIERO\0\0";
	
	fwrite(lieroStr, 1, sizeof(lieroStr), opt);
	
	//fseek(opt, 0x84, SEEK_SET);
	for(int i = 0; i < 2; ++i)
	{
		for(int j = 0; j < 7; ++j)
		{
			writeUint8(opt, wormSettings[i].controls[j]);
		}
	}
	
	writePascalString(opt, levelFile, 9);
	
	fclose(opt);
}