void Area::loadGIT(const Aurora::GFF3Struct &git) { // Waypoints if (git.hasField("WaypointList")) loadWaypoints(git.getList("WaypointList")); // Placeables if (git.hasField("Placeable List")) loadPlaceables(git.getList("Placeable List")); // Doors if (git.hasField("Door List")) loadDoors(git.getList("Door List")); }
void Area::loadGIT(const Aurora::GFF3Struct &git) { if (git.hasField("AreaProperties")) loadProperties(git.getStruct("AreaProperties")); if (git.hasField("Placeable List")) loadPlaceables(git.getList("Placeable List")); if (git.hasField("Door List")) loadDoors(git.getList("Door List")); if (git.hasField("Creature List")) loadCreatures(git.getList("Creature List")); }
void Trigger::loadInstance(const Aurora::GFF3Struct &gff) { // Tag _tag = gff.getString("Tag", _tag); loadPositional(gff); const Aurora::GFF3List &geometry = gff.getList("Geometry"); float x, y, z; Graphics::VertexDecl vertexDecl; vertexDecl.push_back(Graphics::VertexAttrib(Graphics::VPOSITION, 3, GL_FLOAT)); _vertexBuffer.setVertexDeclLinear(geometry.size(), vertexDecl); float *v = reinterpret_cast<float *>(_vertexBuffer.getData()); for (uint32 i = 0; i < geometry.size(); i++) { geometry[i]->getVector("Vertex", x, y, z); // Position *v++ = x; *v++ = y; *v++ = z; } }
void Area::loadARE(const Aurora::GFF3Struct &are) { // Tag _tag = are.getString("Tag"); // Name _name = are.getString("Name"); if (!_name.empty() && (*--_name.end() == '\n')) _name.erase(--_name.end()); _displayName = createDisplayName(_name); // Tiles _width = are.getUint("Width"); _height = are.getUint("Height"); _tilesetName = are.getString("Tileset"); _tiles.resize(_width * _height); loadTiles(are.getList("Tile_List")); // Scripts readScripts(are); }
void Trigger::load(const Aurora::GFF3Struct &gff) { Common::UString temp = gff.getString("TemplateResRef"); Common::ScopedPtr<Aurora::GFF3File> utt; if (!temp.empty()) utt.reset(loadOptionalGFF3(temp, Aurora::kFileTypeUTT, MKTAG('U', 'T', 'T', ' '))); loadBlueprint(utt->getTopLevel()); if (!utt) warning("Trigger \"%s\" has no blueprint", temp.c_str()); float x, y, z; x = (float)gff.getDouble("XPosition"); y = (float)gff.getDouble("YPosition"); z = (float)gff.getDouble("ZPosition"); glm::vec3 position(x, y, z); setPosition(x, y, z); x = (float)gff.getDouble("XOrientation"); y = (float)gff.getDouble("YOrientation"); z = (float)gff.getDouble("ZOrientation"); glm::vec3 orientation(x, y, z); const Aurora::GFF3List &geometry = gff.getList("Geometry"); for (Aurora::GFF3List::const_iterator p = geometry.begin(); p != geometry.end(); ++p) { x = (float)(*p)->getDouble("PointX"); y = (float)(*p)->getDouble("PointY"); z = (float)(*p)->getDouble("PointZ"); _geometry.push_back(position + glm::vec3(x, y, z)); } }
void Creature::loadEquippedItems(const Aurora::GFF3Struct &gff) { if (!gff.hasField("Equip_ItemList")) return; const Aurora::GFF3List &cEquipped = gff.getList("Equip_ItemList"); for (Aurora::GFF3List::const_iterator e = cEquipped.begin(); e != cEquipped.end(); ++e) _equippedItems.push_back(new Item(**e)); }
void Creature::loadEquipment(const Aurora::GFF3Struct &gff) { if (!gff.hasField("Equip_ItemList")) return; for (const auto &i : gff.getList("Equip_ItemList")) { InventorySlot slot = InventorySlot(static_cast<int>(std::log2f(i->getID()))); Common::UString tag = i->getString("EquippedRes"); equipItem(tag, slot, false); } }
void Area::loadGIT(const Aurora::GFF3Struct &git) { // Generic properties if (git.hasField("AreaProperties")) loadProperties(git.getStruct("AreaProperties")); // Waypoints if (git.hasField("WaypointList")) loadWaypoints(git.getList("WaypointList")); // Placeables if (git.hasField("Placeable List")) loadPlaceables(git.getList("Placeable List")); // Doors if (git.hasField("Door List")) loadDoors(git.getList("Door List")); // Creatures if (git.hasField("Creature List")) loadCreatures(git.getList("Creature List")); }
void Creature::loadClasses(const Aurora::GFF3Struct &gff, std::vector<Class> &classes, uint8 &hitDice) { if (!gff.hasField("ClassList")) return; classes.clear(); hitDice = 0; const Aurora::GFF3List &cClasses = gff.getList("ClassList"); for (Aurora::GFF3List::const_iterator c = cClasses.begin(); c != cClasses.end(); ++c) { classes.push_back(Class()); const Aurora::GFF3Struct &cClass = **c; classes.back().classID = cClass.getUint("Class"); classes.back().level = cClass.getUint("ClassLevel"); hitDice += classes.back().level; } }
void Placeable::loadObject(const Aurora::GFF3Struct &gff) { // State _state = (State) gff.getUint("AnimationState", (uint) _state); // Inventory _hasInventory = gff.getBool("HasInventory", _hasInventory); if (_hasInventory && gff.hasField("ItemList")) { Aurora::GFF3List classList = gff.getList("ItemList"); for (Aurora::GFF3List::const_iterator iter = classList.begin(); iter != classList.end(); ++iter) { const Aurora::GFF3Struct &item = **iter; _inventory.addItem(item.getString("InventoryRes")); } } // Hit Points _currentHitPoints = gff.getSint("CurrentHP"); _maxHitPoints = gff.getSint("HP"); _minOneHitPoint = gff.getBool("Min1HP"); }
void Creature::loadProperties(const Aurora::GFF3Struct &gff) { // Tag _tag = gff.getString("Tag", _tag); // Name _firstName = gff.getString("FirstName", _firstName); _lastName = gff.getString("LastName" , _lastName); _name = _firstName + " " + _lastName; _name.trim(); // Description _description = gff.getString("Description", _description); // Conversation _conversation = gff.getString("Conversation", _conversation); // Sound Set _soundSet = gff.getUint("SoundSetFile", Aurora::kFieldIDInvalid); // Gender _gender = gff.getUint("Gender", _gender); // Race _race = gff.getUint("Race", _race); // Subrace _subRace = gff.getUint("Subrace", _subRace); // PC and DM _isPC = gff.getBool("IsPC", _isPC); _isDM = gff.getBool("IsDM", _isDM); // Age _age = gff.getUint("Age", _age); // Experience _xp = gff.getUint("Experience", _xp); // Abilities _abilities[kAbilityStrength] = gff.getUint("Str", _abilities[kAbilityStrength]); _abilities[kAbilityDexterity] = gff.getUint("Dex", _abilities[kAbilityDexterity]); _abilities[kAbilityConstitution] = gff.getUint("Con", _abilities[kAbilityConstitution]); _abilities[kAbilityIntelligence] = gff.getUint("Int", _abilities[kAbilityIntelligence]); _abilities[kAbilityWisdom] = gff.getUint("Wis", _abilities[kAbilityWisdom]); _abilities[kAbilityCharisma] = gff.getUint("Cha", _abilities[kAbilityCharisma]); // Classes loadClasses(gff, _classes, _hitDice); // Skills if (gff.hasField("SkillList")) { _skills.clear(); const Aurora::GFF3List &skills = gff.getList("SkillList"); for (Aurora::GFF3List::const_iterator s = skills.begin(); s != skills.end(); ++s) { const Aurora::GFF3Struct &skill = **s; _skills.push_back(skill.getSint("Rank")); } } // Feats if (gff.hasField("FeatList")) { _feats.clear(); const Aurora::GFF3List &feats = gff.getList("FeatList"); for (Aurora::GFF3List::const_iterator f = feats.begin(); f != feats.end(); ++f) { const Aurora::GFF3Struct &feat = **f; _feats.push_back(feat.getUint("Feat")); } } // Deity _deity = gff.getString("Deity", _deity); // Health if (gff.hasField("HitPoints")) { _baseHP = gff.getSint("HitPoints"); _bonusHP = gff.getSint("MaxHitPoints", _baseHP) - _baseHP; _currentHP = gff.getSint("CurrentHitPoints", _baseHP); } // Alignment _goodEvil = gff.getUint("GoodEvil", _goodEvil); _lawChaos = gff.getUint("LawfulChaotic", _lawChaos); // Appearance _appearanceID = gff.getUint("Appearance_Type", _appearanceID); _appearanceHead = gff.getUint("Appearance_Head" , _appearanceHead); _appearanceMHair = gff.getUint("Appearance_Hair" , _appearanceMHair); _appearanceFHair = gff.getUint("Appearance_FHair", _appearanceFHair); _armorVisualType = gff.getUint("ArmorVisualType", _armorVisualType); _armorVariation = gff.getUint("Variation" , _armorVariation); if (gff.hasField("Boots")) { const Aurora::GFF3Struct &boots = gff.getStruct("Boots"); _bootsVisualType = boots.getUint("ArmorVisualType", _bootsVisualType); _bootsVariation = boots.getUint("Variation" , _bootsVariation); } // Scripts and variables readScripts(gff); readVarTable(gff); }
void Object::readVarTable(const Aurora::GFF3Struct &gff) { if (gff.hasField("VarTable")) readVarTable(gff.getList("VarTable")); }
void GFF3Dumper::dumpField(const Aurora::GFF3Struct &strct, const Common::UString &field) { Aurora::GFF3Struct::FieldType type = strct.getType(field); Common::UString typeName; if (((size_t) type) < ARRAYSIZE(kGFF3FieldTypeNames)) typeName = kGFF3FieldTypeNames[(int)type]; else typeName = "filetype" + Common::composeString((uint64) type); Common::UString label = field; // Structs already open their own tag if (type != Aurora::GFF3Struct::kFieldTypeStruct) { _xml->openTag(typeName); _xml->addProperty("label", label); } switch (type) { case Aurora::GFF3Struct::kFieldTypeChar: _xml->setContents(Common::composeString(strct.getUint(field))); break; case Aurora::GFF3Struct::kFieldTypeByte: case Aurora::GFF3Struct::kFieldTypeUint16: case Aurora::GFF3Struct::kFieldTypeUint32: case Aurora::GFF3Struct::kFieldTypeUint64: _xml->setContents(Common::composeString(strct.getUint(field))); break; case Aurora::GFF3Struct::kFieldTypeSint16: case Aurora::GFF3Struct::kFieldTypeSint32: case Aurora::GFF3Struct::kFieldTypeSint64: _xml->setContents(Common::composeString(strct.getSint(field))); break; case Aurora::GFF3Struct::kFieldTypeFloat: case Aurora::GFF3Struct::kFieldTypeDouble: _xml->setContents(Common::UString::format("%.6f", strct.getDouble(field))); break; case Aurora::GFF3Struct::kFieldTypeStrRef: _xml->setContents(strct.getString(field)); break; case Aurora::GFF3Struct::kFieldTypeExoString: case Aurora::GFF3Struct::kFieldTypeResRef: try { _xml->setContents(strct.getString(field)); } catch (...) { _xml->addProperty("base64", "true"); Common::SeekableReadStream *data = strct.getData(field); _xml->setContents(*data); delete data; } break; case Aurora::GFF3Struct::kFieldTypeLocString: { Aurora::LocString locString; strct.getLocString(field, locString); _xml->addProperty("strref", Common::composeString(locString.getID())); dumpLocString(locString); } break; case Aurora::GFF3Struct::kFieldTypeVoid: _xml->setContents(*strct.getData(field)); break; case Aurora::GFF3Struct::kFieldTypeStruct: dumpStruct(strct.getStruct(field), label); break; case Aurora::GFF3Struct::kFieldTypeList: dumpList(strct.getList(field)); break; case Aurora::GFF3Struct::kFieldTypeOrientation: { double a = 0.0, b = 0.0, c = 0.0, d = 0.0; strct.getOrientation(field, a, b, c, d); _xml->breakLine(); _xml->openTag("double"); _xml->setContents(Common::UString::format("%.6f", a)); _xml->closeTag(); _xml->breakLine(); _xml->openTag("double"); _xml->setContents(Common::UString::format("%.6f", b)); _xml->closeTag(); _xml->breakLine(); _xml->openTag("double"); _xml->setContents(Common::UString::format("%.6f", c)); _xml->closeTag(); _xml->breakLine(); _xml->openTag("double"); _xml->setContents(Common::UString::format("%.6f", d)); _xml->closeTag(); _xml->breakLine(); } break; case Aurora::GFF3Struct::kFieldTypeVector: { double x = 0.0, y = 0.0, z = 0.0; strct.getVector(field, x, y, z); _xml->breakLine(); _xml->openTag("double"); _xml->setContents(Common::UString::format("%.6f", x)); _xml->closeTag(); _xml->breakLine(); _xml->openTag("double"); _xml->setContents(Common::UString::format("%.6f", y)); _xml->closeTag(); _xml->breakLine(); _xml->openTag("double"); _xml->setContents(Common::UString::format("%.6f", z)); _xml->closeTag(); _xml->breakLine(); } break; default: break; } // Structs already close their own tag if (type != Aurora::GFF3Struct::kFieldTypeStruct) { _xml->closeTag(); _xml->breakLine(); } }
void Creature::loadProperties(const Aurora::GFF3Struct &gff) { // Tag _tag = gff.getString("Tag", _tag); // Name _firstName = gff.getString("FirstName", _firstName); _lastName = gff.getString("LastName" , _lastName); _name = _firstName + " " + _lastName; _name.trim(); // Description _description = gff.getString("Description", _description); // Conversation _conversation = gff.getString("Conversation", _conversation); // Sound Set _soundSet = gff.getUint("SoundSetFile", Aurora::kFieldIDInvalid); // Portrait loadPortrait(gff, _portrait); // Gender _gender = (Gender) gff.getUint("Gender", (uint64) _gender); // Race _race = gff.getUint("Race", _race); // Subrace _subRace = gff.getString("Subrace", _subRace); // PC and DM _isPC = gff.getBool("IsPC", _isPC); _isDM = gff.getBool("IsDM", _isDM); // Age _age = gff.getUint("Age", _age); // Experience _xp = gff.getUint("Experience", _xp); // Abilities _abilities[kAbilityStrength] = gff.getUint("Str", _abilities[kAbilityStrength]); _abilities[kAbilityDexterity] = gff.getUint("Dex", _abilities[kAbilityDexterity]); _abilities[kAbilityConstitution] = gff.getUint("Con", _abilities[kAbilityConstitution]); _abilities[kAbilityIntelligence] = gff.getUint("Int", _abilities[kAbilityIntelligence]); _abilities[kAbilityWisdom] = gff.getUint("Wis", _abilities[kAbilityWisdom]); _abilities[kAbilityCharisma] = gff.getUint("Cha", _abilities[kAbilityCharisma]); // Classes loadClasses(gff, _classes, _hitDice); // Skills if (gff.hasField("SkillList")) { _skills.clear(); const Aurora::GFF3List &skills = gff.getList("SkillList"); for (Aurora::GFF3List::const_iterator s = skills.begin(); s != skills.end(); ++s) { const Aurora::GFF3Struct &skill = **s; _skills.push_back(skill.getSint("Rank")); } } // Feats if (gff.hasField("FeatList")) { _feats.clear(); const Aurora::GFF3List &feats = gff.getList("FeatList"); for (Aurora::GFF3List::const_iterator f = feats.begin(); f != feats.end(); ++f) { const Aurora::GFF3Struct &feat = **f; _feats.push_back(feat.getUint("Feat")); } } // Deity _deity = gff.getString("Deity", _deity); // Health if (gff.hasField("HitPoints")) { _baseHP = gff.getSint("HitPoints"); _bonusHP = gff.getSint("MaxHitPoints", _baseHP) - _baseHP; _currentHP = gff.getSint("CurrentHitPoints", _baseHP); } // Alignment _goodEvil = gff.getUint("GoodEvil", _goodEvil); _lawChaos = gff.getUint("LawfulChaotic", _lawChaos); // Appearance _appearanceID = gff.getUint("Appearance_Type", _appearanceID); _phenotype = gff.getUint("Phenotype" , _phenotype); // Body parts for (size_t i = 0; i < kBodyPartMAX; i++) { _bodyParts[i].id = gff.getUint(kBodyPartFields[i], _bodyParts[i].id); _bodyParts[i].idArmor = 0; } // Colors _colorSkin = gff.getUint("Color_Skin", _colorSkin); _colorHair = gff.getUint("Color_Hair", _colorHair); _colorTattoo1 = gff.getUint("Color_Tattoo1", _colorTattoo1); _colorTattoo2 = gff.getUint("Color_Tattoo2", _colorTattoo2); // Equipped Items loadEquippedItems(gff); // Scripts readScripts(gff); }