//Return the event name followed by each parameter paired with its type. public string GetDefaultSyntax(Event eventData) { string script = GetEventInfo(eventData.eventEvent)._name + (eventData.lParameters > 0 ? ": " : ""); for (int i = 0; i < eventData.lParameters; i++) { script += eventData.parameters[i]._type + "-"; switch ((int)eventData.parameters[i]._type) { case 0: script += GetValue(eventData.eventEvent, i, eventData.parameters[i]._data); break; case 1: script += MParams.UnScalar(eventData.parameters[i]._data).ToString(); break; case 2: script += ResolvePointer(eventData.pParameters + i * 8 + 4, eventData.parameters[i]); break; case 3: script += (eventData.parameters[i]._data != 0 ? "true" : "false"); break; case 4: script += MParams.Hex(eventData.parameters[i]._data); break; case 5: script += ResolveVariable(eventData.parameters[i]._data); break; case 6: script += GetRequirement(eventData.parameters[i]._data); break; } if (i != eventData.lParameters) { script += ", "; } } return(script); }
//Return a string of the parameter in the format corresponding to it's type. public string[] ResolveParamTypes(Event eventData) { string[] p = new string[eventData.parameters.Length]; for (int i = 0; i < p.Length; i++) { switch ((int)eventData.parameters[i]._type) { case 0: p[i] = GetValue(eventData.eventEvent, i, eventData.parameters[i]._data); break; case 1: p[i] = MParams.UnScalar(eventData.parameters[i]._data).ToString(); break; case 2: p[i] = ResolvePointer(eventData.pParameters + i * 8 + 4, eventData.parameters[i]); break; case 3: p[i] = (eventData.parameters[i]._data != 0 ? "true" : "false"); break; case 4: p[i] = MParams.Hex(eventData.parameters[i]._data); break; case 5: p[i] = ResolveVariable(eventData.parameters[i]._data); break; case 6: p[i] = GetRequirement(eventData.parameters[i]._data); break; } } return(p); }
//Display the selected parameter's value, type and description. private void DisplayParameter(int index) { param = eventData.Children[index] as MoveDefEventParameterNode; cboType.Enabled = true; try { cboType.SelectedIndex = (int)param._type; } catch { cboType.SelectedIndex = -1; cboType.Text = "(" + MParams.Hex((int)param._type) + ")"; } DisplayInType(param); lblParamDescription.Text = param.Description; }
//Return the requirement corresponding to the value passed. public string GetRequirement(long value) { bool not = (value & 0x80000000) == 0x80000000; long requirement = value & 0xFF; if (requirement > iRequirements.Length) { return(MParams.Hex(requirement)); } if (not == true) { return("Not " + iRequirements[requirement]); } return(iRequirements[requirement]); }
public string GetValue(long eventId, int index, long value) { string s = null; switch (eventId) { case 0x04000100: case 0x04000200: if (index == 0) { if (TargetNode.Parent != null && TargetNode.Parent.Parent != null && TargetNode.Parent.Parent.Name.StartsWith("Article")) { ResourceNode sa = TargetNode.Parent.Parent.FindChild("SubActions", false); if (sa != null) { return(sa.Children[(int)value].Name); } } else if (value < TargetNode.Root._subActions.Children.Count && value >= 0) { return(TargetNode.Root._subActions.Children[(int)value].Name); } else { return(((int)value).ToString()); } } break; //case 0x02010200: //case 0x02010300: //case 0x02010500: // if (index == 0) // if (TargetNode.Parent != null && TargetNode.Parent.Parent != null && TargetNode.Parent.Parent.Name.StartsWith("Article")) // { // ResourceNode sa = TargetNode.Parent.Parent.FindChild("Actions", false); // if (sa != null) // return sa.Children[(int)value].Name; // } // else if (value < TargetNode.Root._actions.Children.Count) // return TargetNode.Root._actions.Children[(int)value].Name; // break; } return(s == null?MParams.Hex((int)value) : s); }
//Return the name of the external pointer corresponding to the address if //one is available, otherwise return the string of the value passed. public string ResolvePointer(long pointer, Param parameter) { MoveDefExternalNode ext; if ((ext = _targetNode.Root.IsExternal((int)pointer)) != null || (ext = _targetNode.Root.IsExternal((int)parameter._data)) != null) { return("External: " + ext.Name); } int list, type, index; _targetNode.Root.GetLocation((int)parameter._data, out list, out type, out index); if (list == 4) { return("0x" + MParams.Hex(parameter._data)); } else { string name = "", t = "", grp = ""; switch (list) { case 0: grp = "Actions"; name = _targetNode.Root._actions.Children[index].Name; switch (type) { case 0: t = "Entry"; break; case 1: t = "Exit"; break; } break; case 1: grp = "SubActions"; name = _targetNode.Root._subActions.Children[index].Name; switch (type) { case 0: t = "Main"; break; case 1: t = "GFX"; break; case 2: t = "SFX"; break; case 3: t = "Other"; break; } break; case 2: grp = "SubRoutines"; name = _targetNode.Root._subRoutineList[index].Name; break; case 3: grp = "References"; name = _targetNode.Root.references.Children[index].Name; break; } return(name + (list >= 2 ? "" : " - " + t) + " in the " + grp + " list"); } }
//Return the string result from the passed keyword and its parameters. public string ResolveKeyword(string keyword, string[] Params, Event eventData) { switch (keyword) { case "\\value": try { return(ResolveParamTypes(eventData)[int.Parse(Params[0])]); } catch { return("Value-" + Params[0]); } case "\\type": try { return(eventData.parameters[int.Parse(Params[0])]._type.ToString()); } catch { return("Type-" + Params[0]); } case "\\if": bool compare = false; try { switch (Params[1]) { case "==": compare = int.Parse(Params[0]) == int.Parse(Params[2]); break; case "!=": compare = int.Parse(Params[0]) != int.Parse(Params[2]); break; case ">=": compare = int.Parse(Params[0]) >= int.Parse(Params[2]); break; case "<=": compare = int.Parse(Params[0]) <= int.Parse(Params[2]); break; case ">": compare = int.Parse(Params[0]) > int.Parse(Params[2]); break; case "<": compare = int.Parse(Params[0]) < int.Parse(Params[2]); break; } } finally { } if (compare) { return(Params[3]); } else { return(Params[4]); } case "\\bone": try { int id = MParams.UnHex(Params[0]); if (id >= 400) { id -= 400; } if (_targetNode.Model != null && _targetNode.Model._linker.BoneCache != null && _targetNode.Model._linker.BoneCache.Length > id && id >= 0) { return(_targetNode.Model._linker.BoneCache[id].Name); } else { return(id.ToString()); } } catch { return(int.Parse(Params[0]).ToString()); } case "\\unhex": try { return(MParams.UnHex(Params[0]).ToString()); } catch { return(Params[0]); } case "\\hex": try { return(MParams.Hex(int.Parse(Params[0]))); } catch { return(Params[0]); } case "\\hex8": try { return(MParams.Hex8(int.Parse(Params[0]))); } catch { return(Params[0]); } case "\\half1": return(MParams.WordH(Params[0], 0)); case "\\half2": return(MParams.WordH(Params[0], 1)); case "\\byte1": return(MParams.WordB(Params[0], 0)); case "\\byte2": return(MParams.WordB(Params[0], 1)); case "\\byte3": return(MParams.WordB(Params[0], 2)); case "\\byte4": return(MParams.WordB(Params[0], 3)); case "\\collision": try { return(GetCollisionStatus(MParams.UnHex(Params[0]))); } catch { return(Params[0]); } case "\\airground": try { return(GetAirGroundStatus(MParams.UnHex(Params[0]))); } catch { return(Params[0]); } case "\\enum": try { return(GetEnum(int.Parse(Params[1]), MParams.UnHex(Params[0]), eventData)); } catch { return("Undefined(" + Params[1] + ")"); } case "\\cmpsign": try { return(MParams.GetComparisonSign(MParams.UnHex(Params[0]))); } catch { return(Params[0]); } case "\\name": return(GetEventInfo(eventData.eventEvent)._name); case "\\white": return(" "); default: return(""); } }