void Load(StructureValueCollection values, ushort index, MetaAddressConverter converter, IList<ITagClass> classList) { int classIndex = (int)values.GetNumber("class index"); if (classIndex >= 0) Class = classList[classIndex]; ushort salt = (ushort)values.GetNumber("datum index salt"); Index = new DatumIndex(salt, index); MetaLocation = new Pointer(values.GetNumber("memory address"), converter); }
private void Load(IReader reader, StructureValueCollection values, MetaAddressConverter addrConverter, IStringIDSource stringIDs, ExpressionTable expressions, BuildInformation buildInfo) { Name = stringIDs.GetString(new StringID((int)values.GetNumber("name index"))); ExecutionType = (short)values.GetNumber("execution type"); ReturnType = (short)values.GetNumber("return type"); DatumIndex rootExpr = new DatumIndex(values.GetNumber("first expression index")); if (rootExpr.IsValid) RootExpression = expressions.FindExpression(rootExpr); if (Name == null) Name = "script_" + rootExpr.Value.ToString("X8"); Parameters = LoadParameters(reader, values, addrConverter, buildInfo); }
private void Load(StructureValueCollection values, IReader reader, MetaAddressConverter addrConverter, IStringIDSource stringIDs, BuildInformation buildInfo) { StringTableReader stringReader = new StringTableReader(); ScriptExpressions = LoadScriptExpressions(values, reader, addrConverter, stringReader, buildInfo.GetLayout("script expression entry")); ScriptObjects = LoadScriptObjects(values, reader, addrConverter, stringIDs, buildInfo.GetLayout("script object entry")); ScriptGlobals = LoadScriptGlobals(values, reader, addrConverter, ScriptExpressions, buildInfo.GetLayout("script global entry")); Scripts = LoadScripts(values, reader, addrConverter, stringIDs, ScriptExpressions, buildInfo.GetLayout("script entry"), buildInfo); CachedStringTable strings = LoadStrings(values, reader, stringReader, addrConverter); foreach (IExpression expr in ScriptExpressions) { // FIXME: hax if (expr != null) ((ThirdGenExpression)expr).ResolveStrings(strings); } }
private IList<IScriptParameter> LoadParameters(IReader reader, StructureValueCollection values, MetaAddressConverter addrConverter, BuildInformation buildInfo) { int paramCount = (int)values.GetNumber("number of parameters"); Pointer paramListLocation = new Pointer(values.GetNumber("address of parameter list"), addrConverter); StructureLayout layout = buildInfo.GetLayout("script parameter entry"); List<IScriptParameter> result = new List<IScriptParameter>(); reader.SeekTo(paramListLocation.AsOffset()); for (int i = 0; i < paramCount; i++) { StructureValueCollection paramValues = StructureReader.ReadStructure(reader, layout); result.Add(new ThirdGenScriptParameter(paramValues)); } return result; }
private ExpressionTable LoadScriptExpressions(StructureValueCollection values, IReader reader, MetaAddressConverter addrConverter, StringTableReader stringReader, StructureLayout entryLayout) { int exprCount = (int)values.GetNumber("number of script expressions"); ScriptExpressionsLocation = new Pointer(values.GetNumber("script expression table address"), addrConverter); ExpressionTable result = new ExpressionTable(); reader.SeekTo(ScriptExpressionsLocation.AsOffset()); for (int i = 0; i < exprCount; i++) { StructureValueCollection exprValues = StructureReader.ReadStructure(reader, entryLayout); result.AddExpression(new ThirdGenExpression(exprValues, (ushort)i, stringReader)); } foreach (IExpression expr in result) { // FIXME: hax if (expr != null) ((ThirdGenExpression)expr).ResolveReferences(result); } return result; }
public ThirdGenScenarioMeta(StructureValueCollection values, IReader reader, MetaAddressConverter addrConverter, IStringIDSource stringIDs, BuildInformation buildInfo) { Load(values, reader, addrConverter, stringIDs, buildInfo); }
private CachedStringTable LoadStrings(StructureValueCollection values, IReader reader, StringTableReader stringReader, MetaAddressConverter addrConverter) { int stringsSize = (int)values.GetNumber("script string table size"); Pointer stringsLocation = new Pointer(values.GetNumber("script string table address"), addrConverter); CachedStringTable result = new CachedStringTable(); stringReader.ReadRequestedStrings(reader, stringsLocation, result); return result; }
private List<IScript> LoadScripts(StructureValueCollection values, IReader reader, MetaAddressConverter addrConverter, IStringIDSource stringIDs, ExpressionTable expressions, StructureLayout entryLayout, BuildInformation buildInfo) { int script = (int)values.GetNumber("number of scripts"); ScriptsLocation = new Pointer(values.GetNumber("script table address"), addrConverter); // Read all of the script entries first, then go back and create the objects // ThirdGenScript reads parameters from its constructor - this may or may not need cleaning up to make this more obvious reader.SeekTo(ScriptsLocation.AsOffset()); List<StructureValueCollection> scriptData = new List<StructureValueCollection>(); for (int i = 0; i < script; i++) scriptData.Add(StructureReader.ReadStructure(reader, entryLayout)); List<IScript> result = new List<IScript>(); foreach (StructureValueCollection scriptValues in scriptData) result.Add(new ThirdGenScript(reader, scriptValues, addrConverter, stringIDs, expressions, buildInfo)); return result; }
private List<IGlobalObject> LoadScriptObjects(StructureValueCollection values, IReader reader, MetaAddressConverter addrConverter, IStringIDSource stringIDs, StructureLayout entryLayout) { int objectsCount = (int)values.GetNumber("number of script objects"); ScriptObjectsLocation = new Pointer(values.GetNumber("script object table address"), addrConverter); List<IGlobalObject> result = new List<IGlobalObject>(); reader.SeekTo(ScriptObjectsLocation.AsOffset()); for (int i = 0; i < objectsCount; i++) { StructureValueCollection objValues = StructureReader.ReadStructure(reader, entryLayout); result.Add(new ThirdGenGlobalObject(objValues, stringIDs)); } return result; }
private List<IGlobal> LoadScriptGlobals(StructureValueCollection values, IReader reader, MetaAddressConverter addrConverter, ExpressionTable expressions, StructureLayout entryLayout) { int globalsCount = (int)values.GetNumber("number of script globals"); ScriptGlobalsLocation = new Pointer(values.GetNumber("script global table address"), addrConverter); List<IGlobal> result = new List<IGlobal>(); reader.SeekTo(ScriptGlobalsLocation.AsOffset()); for (int i = 0; i < globalsCount; i++) { StructureValueCollection globalValues = StructureReader.ReadStructure(reader, entryLayout); result.Add(new ThirdGenGlobal(globalValues, expressions)); } return result; }
public ThirdGenTag(StructureValueCollection values, ushort index, MetaAddressConverter converter, IList<ITagClass> classList) { Load(values, index, converter, classList); }
public ThirdGenScript(IReader reader, StructureValueCollection values, MetaAddressConverter addrConverter, IStringIDSource stringIDs, ExpressionTable expressions, BuildInformation buildInfo) { Load(reader, values, addrConverter, stringIDs, expressions, buildInfo); }