public static string getGeoNameFromModelName(string modelName) { string[] refLines = System.IO.File.ReadAllLines(MISC.Game.gamePath + "/" + GeneralObjConsts.mdlRefFile); //todo change this with a sorta lut foreach (string line in refLines) { string[] cont = MISCUtils.ParseAsmbd(line); if (cont.Length > 0) { if (cont[0] == ".set") { if (cont[1] == modelName) { if (cont.Length > 4) { return(cont[4]); //also todo do this better instead of reading comment lol } else { return("bubbly_tree_geo"); } } } } } return(null); }
public static string[][] ParseFromStructInStruct(string[] fileLines, string structName) { List <string[]> outData = new List <string[]>(); bool parsingStruct = false; foreach (string line in fileLines) { if (parsingStruct) { if (line[0] == '{') { continue; } if (line.Contains("{") && line.Contains("}")) { outData.Add(MISCUtils.ParseAsmbd(line.Split('{')[1].Split('}')[0])); } else { parsingStruct = false; } } if (line.Contains(structName)) { parsingStruct = true; } } return(outData.ToArray()); }
private void changerender(object sender, System.Windows.Forms.MouseEventArgs e) { torender = new List <int>(); foreach (string itemschecked in checkedListBox1.CheckedItems) { torender.Add(int.Parse(MISCUtils.ParseAsmbd(itemschecked)[0])); } }
public static List <Label> getLabelListFromModelFile(string fileName) { List <Label> outList = new List <Label>(); foreach (string line in File.ReadLines(fileName)) { string[] vals = MISCUtils.ParseAsmbd(line); if (vals[0] == "gsSPDisplayList") { outList.Add(findLabelFromName(vals[1], fileName, MISC.Game.gamePath, true, true)); } } return(outList); }
public List <GeoObject> GetGeoObjectsFromGeoElems(List <GeoElem> geoElems, string labelName, GeoObject prevObject = null) { List <GeoObject> geoObjects = new List <GeoObject>(); GeoObject curObject; if (prevObject == null) { curObject = new GeoObject(GeoObjectTypes.RenderObject); } else { curObject = prevObject; } foreach (GeoElem geoElem in geoElems) { if (labelName != null) { string[] name = MISCUtils.ParseAsmbd(geoElem.geoName); if (name[0] == "glabel") { if (name[1] != labelName) { continue; } } } if (geoElem.type == GeoType.ListCloser) { geoObjects.Add(new GeoObject(GeoObjectTypes.PopMatrix)); } GeoCMDs CMD = new GeoCMDs(); CMD.elem = geoElem; curObject = CMD.loadGeoObject(CMD.getRefObject(), curObject); if (curObject.f3d.fileName != null) { geoObjects.Add(curObject); curObject = new GeoObject(GeoObjectTypes.RenderObject); } if (geoElem.type == GeoType.ListOpener) { geoObjects.Add(new GeoObject(GeoObjectTypes.PushMatrix)); geoObjects.AddRange(GetGeoObjectsFromGeoElems(geoElem.geoElems, labelName, curObject)); } } return(geoObjects); }
private void openLevelFolderToolStripMenuItem_Click(object sender, EventArgs e) { OpenFileDialog loadobj = new OpenFileDialog(); loadobj.Filter = "dldata|*.s"; loadobj.FilterIndex = 1; if (loadobj.ShowDialog() == DialogResult.OK) { checkedListBox1.Items.Clear(); listBox1.Items.Clear(); FolderBrowserDialog fb = new FolderBrowserDialog(); fb.SelectedPath = (Path.GetDirectoryName(loadobj.FileName)); fb.ShowDialog(); lines = File.ReadAllLines(loadobj.FileName); int n = 0; string fname = ""; foreach (string line in lines) { string[] vs = MISCUtils.ParseAsmbd(line); int k = 2; if (vs[0] == "gsSPDisplayList") { foreach (string l in lines) { if (l.Contains(vs[1])) { if (l.Contains("glabel") || l.Contains(":")) { checkedListBox1.Items.Add(k.ToString() + " " + vs[1]); break; } } k++; } } n++; } timer1.Enabled = true; lutmanager.dldata = lines; lutmanager.curFile = loadobj.FileName; lutmanager.fbpath = fb.SelectedPath; lutmanager.initF3D(); LUTc = lutmanager.luts; button2.PerformClick(); } }
public static GCUtil[] GetDefinesFromFile(string[] fileLines) { List <GCUtil> gcs = new List <GCUtil>(); string[] lineData; foreach (string line in fileLines) { lineData = MISCUtils.ParseAsmbd(line); if (lineData[0] == C.CConsts.def) { gcs.Add(new GCUtil(lineData[1], MISCUtils.ParseInt(lineData[2]))); System.Windows.Forms.MessageBox.Show(gcs[gcs.Count - 1].name); } } return(gcs.ToArray()); }
public static SpecialObjectRenderStack getSpecialObjectsFromCollisionFile(string[] colData) { OBJs.Special.SpecialObjectRenderStack returnObj = new OBJs.Special.SpecialObjectRenderStack(); string[] vals; foreach (string line in colData) { if (!(line.Contains("col") || line.Contains("special_object"))) { continue; } vals = MISCUtils.ParseAsmbd(line); if (vals[0] == "special_object") { returnObj.addSpecialObject(vals[2], (short)MISCUtils.ParseInt(vals[4]), (short)MISCUtils.ParseInt(vals[5]), (short)MISCUtils.ParseInt(vals[6])); } } return(returnObj); }
public static byte getPresetIdFromName(string[] fileLines, string modelName) { //todo change this with a sorta lut foreach (string line in fileLines) { string[] cont = MISCUtils.ParseAsmbd(line); if (cont.Length > 0) { if (cont[0] == ".set") { if (cont[1] == modelName) { return((byte)MISCUtils.ParseInt(cont[2])); } } } } return(0x00); }
public static OBJs.CubeData getCubeDataFromF3DFile(string[] lines) //yeah sorry i make it check the whole file, just did this for convenience and also cause objects should be more accurately represented { CubeData data = new CubeData(); string[] vs; if (lines == null) { return(data); } foreach (string line in lines) { vs = MISCUtils.ParseAsmbd(line); if (vs[0] == "vertex") { data.updateCubeData((short)(MISCUtils.ParseInt(vs[1]) >> 4), (short)(MISCUtils.ParseInt(vs[2]) >> 4), (short)(MISCUtils.ParseInt(vs[3]) >> 4)); } } return(data); }
public void ParseColData() { int n = -1; string[] vals; Col cold = new Col(); foreach (string line in colData) { n++; if (!(line.Contains("col") || line.Contains("special_object"))) { continue; } vals = MISCUtils.ParseAsmbd(line); if (vals[0] == "colVertex") { cold.colVertex((short)MISCUtils.ParseInt(vals[1]), (short)MISCUtils.ParseInt(vals[2]), (short)MISCUtils.ParseInt(vals[3])); } if (vals[0] == "colTri") { cold.colTri((short)MISCUtils.ParseInt(vals[1]), (short)MISCUtils.ParseInt(vals[2]), (short)MISCUtils.ParseInt(vals[3])); } if (vals[0] == "colTriSpecial") { cold.colTriSpecial((short)MISCUtils.ParseInt(vals[1]), (short)MISCUtils.ParseInt(vals[2]), (short)MISCUtils.ParseInt(vals[3]), (short)MISCUtils.ParseInt(vals[4])); } if (vals[0] == "colWaterBox") { cold.colWaterBox((short)MISCUtils.ParseInt(vals[1]), (short)MISCUtils.ParseInt(vals[2]), (short)MISCUtils.ParseInt(vals[3]), (short)MISCUtils.ParseInt(vals[4]), (short)MISCUtils.ParseInt(vals[5]), (short)MISCUtils.ParseInt(vals[6])); } if (vals[0] == "colTriInit") { cold.colTriInit(LakiTool.Col.Util.ColUtil.getCmdFromName(vals[1]), (short)MISCUtils.ParseInt(vals[2])); } if (vals[0] == "special_object") { //stuff from here has been migrated to renderer and to objs and objs/special etc } } }
public static List <GeoElem> getGeoFromLines(string[] lines, int k = 0) { List <GeoElem> geoElems = new List <GeoElem>(); bool inSubNode = false; for (int i = k; i < lines.Length && !inSubNode; i++) { string line = lines[i]; string[] linedata = MISCUtils.ParseAsmbd(line); if (linedata[0].Length < 2) { linedata = linedata.Skip(1).ToArray(); } if (linedata.Length == 0) { continue; } if (linedata[0] == "geo_open_node" || linedata[0] == "glabel") { inSubNode = true; geoElems.Add(new GeoElem(linedata[0] != "glabel" ? linedata[0] : line, getGeoFromLines(lines, i + 1))); } else { if (linedata.Length > 1) { geoElems.Add(new GeoElem(linedata[0], getParamsFromLineData(linedata))); } else { geoElems.Add(new GeoElem(linedata[0])); } } } return(geoElems); }
public static OBJFile.o getObjFromDL(LUTs inputData, string[] lines, int offset = 0, string objName = "default") { string[] vals; uint vertSet = (uint)(vAdr == 0?1:0); OBJFile.o outObjFile = new OBJFile.o(); outObjFile.oname = objName; uint lastVertAdr = OBJFileUtil.vAdr; int n = -1; int x = 0, y = 0; foreach (string line in lines) { n++; if (n < offset - 1) { continue; } if (!(line.Contains("gsSP") || line.Contains("gsDP"))) { continue; } vals = MISCUtils.ParseAsmbd(line); if (vals[0] == "gsSPEndDisplayList" && offset > 0) { break; } if (vals[0] == "gsSP1Triangle") { uint v0 = (uint)MISCUtils.ParseInt(vals[1]); uint v1 = (uint)MISCUtils.ParseInt(vals[2]); uint v2 = (uint)MISCUtils.ParseInt(vals[3]); v0 += lastVertAdr; v1 += lastVertAdr; v2 += lastVertAdr; outObjFile.faces.Add(new OBJFile.f(new OBJFile.fFmt(v0, v0, v0), new OBJFile.fFmt(v1, v1, v1), new OBJFile.fFmt(v2, v2, v2))); } if (vals[0] == "gsSP2Triangles") { uint v0 = (uint)MISCUtils.ParseInt(vals[1]); uint v1 = (uint)MISCUtils.ParseInt(vals[2]); uint v2 = (uint)MISCUtils.ParseInt(vals[3]); v0 += lastVertAdr; v1 += lastVertAdr; v2 += lastVertAdr; outObjFile.faces.Add(new OBJFile.f(new OBJFile.fFmt(v0, v0, v0), new OBJFile.fFmt(v1, v1, v1), new OBJFile.fFmt(v2, v2, v2))); v0 = (uint)MISCUtils.ParseInt(vals[5]); v1 = (uint)MISCUtils.ParseInt(vals[6]); v2 = (uint)MISCUtils.ParseInt(vals[7]); v0 += lastVertAdr; v1 += lastVertAdr; v2 += lastVertAdr; outObjFile.faces.Add(new OBJFile.f(new OBJFile.fFmt(v0, v0, v0), new OBJFile.fFmt(v1, v1, v1), new OBJFile.fFmt(v2, v2, v2))); } if (vals[0] == "gsSPVertex") { lastVertAdr += vertSet; Vtx[] verteces = F3DUtils.getVtxFromName(vals[1], inputData.vtxLUT).ToArray(); for (int v = MISCUtils.ParseInt(vals[3]); v < MISCUtils.ParseInt(vals[2]) + MISCUtils.ParseInt(vals[3]); v++) { outObjFile.verts.Add(new OBJFile.v(verteces[v].X, verteces[v].Y, verteces[v].Z)); outObjFile.coords.Add(new OBJFile.vt(verteces[v].S, verteces[v].T, x, y)); outObjFile.normals.Add(new OBJFile.vn(verteces[v].R, verteces[v].G, verteces[v].B)); } vertSet = (uint)MISCUtils.ParseInt(vals[2]); } if (vals[0] == "gsDPSetTextureImage") { x = F3DUtils.getTexFromName(vals[4], inputData.texLUT).Size.Width; y = F3DUtils.getTexFromName(vals[4], inputData.texLUT).Size.Height; } } OBJFileUtil.vAdr = lastVertAdr + vertSet; return(outObjFile); }