コード例 #1
0
 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);
 }
コード例 #2
0
        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());
        }
コード例 #3
0
ファイル: Form1.cs プロジェクト: danebou/LakiTool
 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]));
     }
 }
コード例 #4
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);
        }
コード例 #5
0
ファイル: GeoUtil.cs プロジェクト: robinerd123/LakiTool
        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);
        }
コード例 #6
0
ファイル: Form1.cs プロジェクト: danebou/LakiTool
        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();
            }
        }
コード例 #7
0
        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());
        }
コード例 #8
0
ファイル: SpecialUtil.cs プロジェクト: robinerd123/LakiTool
 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);
 }
コード例 #9
0
ファイル: SpecialUtil.cs プロジェクト: robinerd123/LakiTool
 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);
 }
コード例 #10
0
        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);
        }
コード例 #11
0
ファイル: ParseCol.cs プロジェクト: cualquiercosa327/LakiTool
        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
                }
            }
        }
コード例 #12
0
        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);
        }
コード例 #13
0
ファイル: OBJFileUtil.cs プロジェクト: robinerd123/LakiTool
        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);
        }