40 TiXmlNode* node =
file_.RootElement();
41 if (node ==
nullptr || node->ValueStr() !=
"metadata"){
42 throw std::runtime_error(
43 "FF7Metadata: " +
file_.ValueStr()
44 +
" is not a valid metadata file! No <metadata> in root."
48 node = node->FirstChild();
50 if (node->Type() == TiXmlNode::TINYXML_ELEMENT && node->ValueStr() ==
"models")
53 node->Type() == TiXmlNode::TINYXML_ELEMENT&& node->ValueStr() ==
"animations"
58 node->Type() == TiXmlNode::TINYXML_ELEMENT && node->ValueStr() ==
"scripts"
62 node = node->NextSibling();
100 if (it != std::end(
models_))
return it->second;
104 if (it != std::end(
models_))
return it->second;
117 const auto src =
GetString(node,
"name");
118 const auto dst =
GetString(node,
"target");
120 node = node->NextSibling();
131 const auto src =
GetString(node,
"name");
132 const auto dst =
GetString(node,
"target");
134 node = node->NextSibling();
147 node->Type() == TiXmlNode::TINYXML_ELEMENT
148 && node->ValueStr() ==
"CharacterIds"
151 node->Type() == TiXmlNode::TINYXML_ELEMENT && node->ValueStr() ==
"var_names"
154 node->Type() == TiXmlNode::TINYXML_ELEMENT
155 && node->ValueStr() ==
"entity_names"
158 node->Type() == TiXmlNode::TINYXML_ELEMENT && node->ValueStr() ==
"field"
160 const auto name =
GetString(node,
"name");
163 node = node->NextSibling();
173 void ReadField(TiXmlNode* node,
const std::string& name){
176 node->Type() == TiXmlNode::TINYXML_ELEMENT && node->ValueStr() ==
"function"
179 node->Type() == TiXmlNode::TINYXML_ELEMENT && node->ValueStr() ==
"entity"
181 const auto old_name =
GetString(node,
"name");
182 const auto new_name =
GetString(node,
"new");
183 field_data_[name].entity_name_map[old_name] = new_name;
185 node = node->NextSibling();
196 const auto entity_name =
GetString(node,
"entity_name");
197 const auto old_name =
GetString(node,
"name");
198 const auto new_name =
GetString(node,
"new");
199 const auto comment =
GetString(node,
"Comment");
200 field_data_[field_name].function_map[entity_name][old_name]
201 = std::make_pair(new_name, comment);
211 if (node->Type() == TiXmlNode::TINYXML_ELEMENT && node->ValueStr() ==
"entity"){
212 const auto old_name =
GetString(node,
"name");
213 const auto new_name =
GetString(node,
"new");
216 node = node->NextSibling();
227 if (node->Type() == TiXmlNode::TINYXML_ELEMENT && node->ValueStr() ==
"var"){
228 const auto bank =
GetInt(node,
"Bank");
229 const auto address =
GetInt(node,
"Address");
230 const auto name =
GetString(node,
"Name");
233 node = node->NextSibling();
244 if (node->Type() == TiXmlNode::TINYXML_ELEMENT && node->ValueStr() ==
"char"){
245 const auto id =
GetInt(node,
"Id");
246 const auto name =
GetString(node,
"Name");
249 node = node->NextSibling();
270 auto field_iterator =
field_data_.find(field_name);
273 auto entity_iterator = field_iterator->second.function_map.find(entity_name);
274 if (entity_iterator != std::end(field_iterator->second.function_map)){
277 auto function_iterator = entity_iterator->second.find(old_function_name);
278 if (function_iterator != std::end(entity_iterator->second))
279 return function_iterator->second;
282 return std::make_pair(
"",
"");
324 std::map<String, std::map<String, std::pair<String,String>>>
function_map;
356 if (it != std::end(
Data().character_ids_))
return it->second;
358 if (char_id == 254)
return "";
359 return std::to_string(char_id);
401 if (bank_iterator != std::end(
Data().var_map_)){
402 auto address_iterator = bank_iterator->second.find(addr);
403 if (address_iterator != std::end(bank_iterator->second)){
404 if (address_iterator->second.empty() ==
false)
405 return address_iterator->second;
424 if (it != std::end(
Data().entity_name_map_))
return it->second;
425 return old_entity_name;
444 field_name, entity_name, old_function_name
467 field_name, entity_name, old_function_name
469 if (name.empty())
return old_function_name;
479 static FF7Metadata data(
"field_models_and_animation_metadata.xml");
Name lookup convenience class.
Definition: FF7NameLookup.h:342
static String FieldScriptEntityName(const String &old_entity_name)
Matches entity names.
Definition: FF7NameLookup.h:422
static String FieldScriptVarName(int bank, int addr)
Retrieves a variable name.
Definition: FF7NameLookup.h:399
static String FieldScriptFunctionName(const String &field_name, const String &entity_name, const String &old_function_name)
Matches function names.
Definition: FF7NameLookup.h:463
static const String & Animation(const String &key)
Matches animation names.
Definition: FF7NameLookup.h:373
NameLookup()=delete
Constructor, not to use.
static FF7Metadata & Data()
Retrieves game metadata.
Definition: FF7NameLookup.h:478
static String CharName(int char_id)
Retrieves a character name from an ID.
Definition: FF7NameLookup.h:354
static const String & model(const String &key)
Matches model names.
Definition: FF7NameLookup.h:386
static String FieldScriptFunctionComment(const String &field_name, const String &entity_name, const String &old_function_name)
Matches function comments.
Definition: FF7NameLookup.h:440
static void splitBase(const String &name, String &basename)
Extract a file name without extension.
Definition: VGearsStringUtil.cpp:25
Handles XML files.
Definition: XmlFile.h:28
const Ogre::String GetString(TiXmlNode *node, const Ogre::String &tag, const Ogre::String &def="") const
Retrieves a string from an XMl tag.
Definition: XmlFile.cpp:56
int GetInt(TiXmlNode *node, const Ogre::String &tag, int def=0) const
Retrieves an integer from an XMl tag.
Definition: XmlFile.cpp:38
TiXmlDocument file_
The XML file.
Definition: XmlFile.h:189
Definition: FF7NameLookup.h:24
Ogre::String String
Definition: TypeDefine.h:37