Exemple #1
0
void GFF4Struct::load(GFF4File &parent, const Field &genericParent) {
	static const uint32 kGenericSize = 8;

	Common::SeekableReadStream &data = parent.getStream(genericParent.offset);

	const uint32 genericCount = genericParent.isList ? data.readUint32LE() : 1;
	const uint32 genericStart = data.pos();

	for (uint32 i = 0; i < genericCount; i++) {
		data.seek(genericStart + i * kGenericSize);

		const uint16 fieldType   = data.readUint16LE();
		const uint16 fieldFlags  = data.readUint16LE();

		const uint32 fieldOffset = getDataOffset(genericParent.isReference, data.pos());

		if (fieldOffset == 0xFFFFFFFF)
			continue;

		// Load the field and its struct(s), if any
		Field &f = _fields[i] = Field(i, fieldType, fieldFlags, fieldOffset, true);
		if (f.type == kIFieldTypeStruct)
			loadStructs(parent, f);
	}

	_fieldCount = genericCount;
}
Exemple #2
0
void GFF3File::load(uint32 id) {
	try {

		loadHeader(id);
		loadStructs();
		loadLists();

	} catch (Common::Exception &e) {
		clear();

		e.add("Failed reading GFF3 file");
		throw;
	}
}
Exemple #3
0
void GFF4File::load(uint32 type) {
	try {

		loadHeader(type);
		loadStructs();
		loadStrings();

	} catch (Common::Exception &e) {
		clear();

		e.add("Failed reading GFF4 file");
		throw;
	}
}
Exemple #4
0
void GFF4Struct::load(GFF4File &parent, uint32 offset, const GFF4File::StructTemplate &tmplt) {
	for (size_t i = 0; i < tmplt.fields.size(); i++) {
		const GFF4File::StructTemplate::Field &field = tmplt.fields[i];

		// Calculate the offset for the field data, but guard against NULL pointers
		uint32 fieldOffset = offset + field.offset;
		if ((offset == 0xFFFFFFFF) || (field.offset == 0xFFFFFFFF))
			fieldOffset = 0xFFFFFFFF;

		// Load the field and its struct(s), if any
		Field &f = _fields[field.label] = Field(field.label, field.type, field.flags, fieldOffset);
		if (f.type == kIFieldTypeStruct)
			loadStructs(parent, f);
		if (f.type == kIFieldTypeGeneric)
			loadGeneric(parent, f);
	}

	_fieldCount = _fields.size();
}