public string[] GetDeclaration(bool console) { List <string> Working = new List <string>(); string varlocation = ""; string datatype = ""; int i = 0; int j = -1; foreach (Var var in Vars) { switch (Listtype) { case ListType.Statics: varlocation = (i >= scriptParamStart ? "ScriptParam_" : "Local_"); break; case ListType.Vars: varlocation = "Var"; break; case ListType.Params: throw new DecompilingException("Parameters have different declaration"); } j++; if (!var.Is_Used) { if (!Program.Shift_Variables) { i++; } continue; } if (Listtype == ListType.Vars && !var.Is_Called) { if (!Program.Shift_Variables) { i++; } continue; } if (var.Immediatesize == 1) { datatype = Types.gettype(var.DataType).vardec; } else if (var.Immediatesize == 3) { datatype = "vector3 v"; } else if (var.DataType == Stack.DataType.String) { datatype = "char c"; } else { datatype = "struct<" + var.Immediatesize.ToString() + "> "; } string value = ""; if (!var.Is_Array) { if (Listtype == ListType.Statics) { if (var.Immediatesize == 1) { value = " = " + Utils.Represent(Vars[j].Value, var.DataType); } else if (var.DataType == Stack.DataType.String) { List <byte> data = new List <byte>(); for (int l = 0; l < var.Immediatesize; l++) { data.AddRange(BitConverter.GetBytes(Vars[j + l].Value)); } int len = data.IndexOf(0); data.RemoveRange(len, data.Count - len); value = " = \"" + Encoding.ASCII.GetString(data.ToArray()) + "\""; } else if (var.Immediatesize == 3) { value += " = { " + Utils.Represent(Vars[j].Value, Stack.DataType.Float) + ", "; value += Utils.Represent(Vars[j + 1].Value, Stack.DataType.Float) + ", "; value += Utils.Represent(Vars[j + 2].Value, Stack.DataType.Float) + " }"; } else if (var.Immediatesize > 1) { value += " = { " + Utils.Represent(Vars[j].Value, Stack.DataType.Int); for (int l = 1; l < var.Immediatesize; l++) { value += ", " + Utils.Represent(Vars[j + l].Value, Stack.DataType.Int); } value += " } "; } } } else { if (Listtype == ListType.Statics) { if (var.Immediatesize == 1) { value = " = { "; for (int k = 0; k < var.Value; k++) { value += Utils.Represent(Vars[j + 1 + k].Value, var.DataType) + ", "; } if (value.Length > 2) { value = value.Remove(value.Length - 2); } value += " }"; } else if (var.DataType == Stack.DataType.String) { value = " = { "; for (int k = 0; k < var.Value; k++) { List <byte> data = new List <byte>(); for (int l = 0; l < var.Immediatesize; l++) { if (console) { data.AddRange(BitConverter.GetBytes((int)Vars[j + 1 + var.Immediatesize * k + l].Value)); } else { data.AddRange(BitConverter.GetBytes(Vars[j + 1 + var.Immediatesize * k + l].Value)); } } value += "\"" + Encoding.ASCII.GetString(data.ToArray()) + "\", "; } if (value.Length > 2) { value = value.Remove(value.Length - 2); } value += " }"; } else if (var.Immediatesize == 3) { value = " = {"; for (int k = 0; k < var.Value; k++) { value += "{ " + Utils.Represent(Vars[j + 1 + 3 * k].Value, Stack.DataType.Float) + ", "; value += Utils.Represent(Vars[j + 2 + 3 * k].Value, Stack.DataType.Float) + ", "; value += Utils.Represent(Vars[j + 3 + 3 * k].Value, Stack.DataType.Float) + " }, "; } if (value.Length > 2) { value = value.Remove(value.Length - 2); } value += " }"; } } } string decl = datatype + varlocation + (Listtype == ListType.Statics && i >= scriptParamStart ? i - scriptParamStart : i).ToString(); if (var.Is_Array) { decl += "[" + var.Value.ToString() + "]"; } if (var.DataType == Stack.DataType.String) { decl += "[" + (var.Immediatesize * (console ? 4 : 8)).ToString() + "]"; } Working.Add(decl + value + ";"); i++; } return(Working.ToArray()); }