public void Write() { using (FileStream fs = new FileStream(LevSavePath, FileMode.Create, FileAccess.Write)) { using (BinaryWriterEx bw = new BinaryWriterEx(fs)) { bw.Flush(); bw.Seek((int)0, SeekOrigin.Begin); bw.Write(fileSize); header.Write(bw); bw.Seek((int)header.ptrMeshInfo + 4, SeekOrigin.Begin); meshinfo.Write(bw); bw.Seek((int)meshinfo.ptrVertexArray + 4, SeekOrigin.Begin); foreach (Vertex vert in verts) { vert.Write(bw); } bw.Seek((int)header.ptrRestartPts + 4, SeekOrigin.Begin); foreach (var restartPoint in restartPts) { restartPoint.Write(bw); } bw.Seek((int)meshinfo.ptrVisDataArray + 4, SeekOrigin.Begin); foreach (var visdat in visdata) { visdat.Write(bw); } bw.Seek((int)meshinfo.ptrQuadBlockArray + 4, SeekOrigin.Begin); foreach (var quad in quads) { quad.Write(bw); } /* * if (header.ptrSkybox != 0) { * bw.Seek((int) header.ptrSkybox + 4, SeekOrigin.Begin); * skybox.Write(bw); * }*/ if (header.ptrVcolAnim != 0) { bw.Seek((int)header.ptrVcolAnim + 4, SeekOrigin.Begin); foreach (var vertanim in vertanims) { vertanim.Write(bw); } } if (header.ptrAiNav != 0) { bw.Seek((int)header.ptrAiNav + 4, SeekOrigin.Begin); nav.Write(bw); } if (header.ptrTrialData != 0) { bw.Seek((int)header.ptrTrialData + 4, SeekOrigin.Begin); trial.Write(bw); } if (header.cntSpawnPts != 0) { bw.Seek((int)header.ptrSpawnPts + 4, SeekOrigin.Begin); unkadv.Write(bw); } bw.Seek((int)posu1_ptr + 4, SeekOrigin.Begin); for (int i = 0; i < posu1_cnt; i++) { posu1[i].Write(bw); } //write pickup models //starts out right, but anims ruin it bw.Seek((int)(header.ptrModelsPtr + 4), SeekOrigin.Begin); for (int i = 0; i < header.numModels; i++) { bw.Seek((int)pickUpModelDataLocation[i * 2 + 0] + 4, SeekOrigin.Begin); bw.Write(pickUpModelDataLocation[i * 2 + 1]); bw.Seek((int)pickUpModelDataLocation[i * 2 + 1] + 4, SeekOrigin.Begin); //dynamics[i].Write(bw); } bw.Close(); } fs.Close(); } }