diff --git a/.gitignore b/.gitignore index 5669ef6..79c9142 100644 --- a/.gitignore +++ b/.gitignore @@ -9,7 +9,7 @@ export_presets.cfg # Mono-specific ignores .mono/ data_*/ - +mono_crash*.json # Volition *.chunk_pc *.g_chunk_pc @@ -18,4 +18,4 @@ data_*/ # Project build*/ -build*.zip \ No newline at end of file +build*.zip diff --git a/autoload/ChunkEditor.gd b/autoload/ChunkEditor.gd index 986afdf..6a497ae 100644 --- a/autoload/ChunkEditor.gd +++ b/autoload/ChunkEditor.gd @@ -48,11 +48,21 @@ func _on_files_dropped(files, _screen): func _on_main_ready(): ui = get_tree().root.get_node("main").get_node("ui") if Globals.on_clear_chunkfile_to_load: - ChunkHandler.LoadChunk(Globals.on_clear_chunkfile_to_load) + _load_chunk(Globals.on_clear_chunkfile_to_load) Globals.on_clear_chunkfile_to_load = null +# Load should always go through this +func _load_chunk(file): + ChunkHandler.LoadChunk(file) + for obj in Globals.loaded_cityobjects: + Globals.objects_by_uid[obj.uid] = obj + for obj in Globals.loaded_lights: + Globals.objects_by_uid[obj.uid] = obj + + # Select object. -func _select(target: Spatial): +func _select(uid: String): + var target = Globals.objects_by_uid[uid] _unselect() gizmo.translation = target.translation @@ -64,23 +74,21 @@ func _select(target: Spatial): menu_selected_light._select(target) menu_selected_light.show() menu_selected_light._update_color(target.color) - "cityobjects": if menu_selected_title: menu_selected_title.text = "Selected type: cityobject" if menu_selected_cityobj: menu_selected_cityobj._select(target) menu_selected_cityobj.show() - _: push_error("unknown selected") return - currently_selected = target currently_selected._set_highlight(true) - menu_selector._on_select(target) + menu_selector._select(target.uid) func _unselect(): + menu_selector._unselect() if currently_selected: currently_selected._set_highlight(false) currently_selected = null @@ -90,6 +98,7 @@ func _unselect(): menu_selected_cityobj.hide() if menu_selected_light: menu_selected_light.hide() + func _focus(): if currently_selected: @@ -99,6 +108,7 @@ func _save(): ChunkHandler.SaveChunk() func _clear(): + Globals._clear() ChunkHandler.OnClearChunk() is_chunk_loaded = false cam = null diff --git a/autoload/ChunkHandler.cs b/autoload/ChunkHandler.cs index ea3cba8..e702d46 100644 --- a/autoload/ChunkHandler.cs +++ b/autoload/ChunkHandler.cs @@ -5,7 +5,7 @@ public class ChunkHandler : Node { - Sr2CpuChunkPc loadedChunk; + Sr2ChunkPc loadedChunk; string loadedChunkName; string loadedChunkPath; @@ -54,7 +54,7 @@ public void LoadChunk(string input_filepath) return; } - Sr2CpuChunkPc chunk = Sr2CpuChunkPc.FromFile(cpu_chunk_filepath); + Sr2ChunkPc chunk = Sr2ChunkPc.FromFile(cpu_chunk_filepath); GD.Print("Chunk parsed"); loadedChunk = chunk; @@ -63,15 +63,16 @@ public void LoadChunk(string input_filepath) ImportChunkToScene(loadedChunk, gpu_chunk_filepath); } - void ImportChunkToScene(Sr2CpuChunkPc chunk, string gpu_chunk_filepath) + void ImportChunkToScene(Sr2ChunkPc chunk, string gpu_chunk_filepath) { Node chunkEditor = GetNode("/root/ChunkEditor"); + Node globals = GetNode("/root/Globals"); Node world = GetNode("/root/main/chunk/cityobjects"); Node lights = GetNode("/root/main/chunk/lights"); - + chunkEditor.Set("is_chunk_loaded", true); - - if ((bool)chunkEditor.Get("opt_cityobjects")){ + if ((bool)chunkEditor.Get("opt_cityobjects")) + { Sr2GpuChunkLoader gLoader = new Sr2GpuChunkLoader(); Mesh[] chunk_rendermodels = gLoader.LoadMeshesFromChunk(chunk, gpu_chunk_filepath); GD.Print("meshes len: ", chunk_rendermodels.Length); @@ -80,94 +81,82 @@ void ImportChunkToScene(Sr2CpuChunkPc chunk, string gpu_chunk_filepath) Mesh mesh = chunk_rendermodels[i]; chunkEditor.Call("_add_chunk_rendermodel", mesh); } - - for (int i = 0; i < chunk.CityobjectCount; i++) + var loaded_cobjs = new Godot.Collections.Array(); + for (int i = 0; i < chunk.NumCityobjects; i++) { - Sr2CpuChunkPc.Cityobject cobj = chunk.Cityobjects[i]; + Sr2ChunkPc.Cityobject cobj = chunk.Cityobjects[i]; int partId = (int)cobj.CityobjectPartId; - Sr2CpuChunkPc.CityobjectPart temp = chunk.CityobjectParts[partId]; - + Sr2ChunkPc.CityobjectPart temp = chunk.CityobjectParts[partId]; Spatial cityObjectNode = new Spatial(); cityObjectNode.SetScript(ResourceLoader.Load("res://scenes/editor/scripts/cityobject.gd")); + cityObjectNode.Set("uid", "cobj_" + i); cityObjectNode.Translation = new Vector3(-temp.Pos.X, temp.Pos.Y, temp.Pos.Z); cityObjectNode.Name = chunk.CityobjectNames[i]; cityObjectNode.Set("rendermodel_id", temp.RendermodelId); cityObjectNode.Set("cityobjpart_id", partId); - world.AddChild(cityObjectNode); + loaded_cobjs.Add(cityObjectNode); + // Has to be done in this roundabout way, cannot set transform via csharp? + cityObjectNode.Call("_set_basis", new Basis( + new Vector3(temp.BasisX.X, -temp.BasisX.Y, -temp.BasisX.Z), + new Vector3(-temp.BasisY.X, temp.BasisY.Y, -temp.BasisY.Z), + new Vector3(-temp.BasisZ.X, -temp.BasisZ.Y, temp.BasisZ.Z))); } - } - if ((bool)chunkEditor.Get("opt_lights")){ - for (int i = 0; i < chunk.LightCount; i++) + globals.Set("loaded_cityobjects", loaded_cobjs); + } + if ((bool)chunkEditor.Get("opt_lights")) + { + var loaded_lights = new Godot.Collections.Array(); + for (int i = 0; i < chunk.NumLights.Result; i++) { - if (chunk.LightCount == 1212891981) break; // Duct tape solution for MCKH (this means chunk has no lights) - - Sr2CpuChunkPc.Light light = chunk.LightSections.Lights[i]; - string name = chunk.LightSections.LightNames[i]; - Vector3 pos = new Vector3(-light.Pos.X, light.Pos.Y, light.Pos.Z); + Sr2ChunkPc.LightDataType light = chunk.LightData[i]; + string name = chunk.LightNames[i]; + Vector3 pos = new Vector3(-light.Position.X, light.Position.Y, light.Position.Z); Color col = new Color(light.R, light.G, light.B); Spatial lightNode = new Spatial(); lightNode.Name = name; lightNode.SetScript(ResourceLoader.Load("res://scenes/editor/scripts/lightsource.gd")); - + lightNode.Set("uid", "light_" + i); Godot.Collections.Array flags = new Godot.Collections.Array(); - flags.Add(light.Flags.Bit00); - flags.Add(light.Flags.Bit01); - flags.Add(light.Flags.Bit02); - flags.Add(light.Flags.Bit03); - flags.Add(light.Flags.Bit04); - flags.Add(light.Flags.Bit05); - flags.Add(light.Flags.Bit06); - flags.Add(light.Flags.Bit07); - flags.Add(light.Flags.Bit08); - flags.Add(light.Flags.Bit09); - flags.Add(light.Flags.Bit0a); - flags.Add(light.Flags.Bit0b); - flags.Add(light.Flags.Bit0c); - flags.Add(light.Flags.Bit0d); - flags.Add(light.Flags.Bit0e); - flags.Add(light.Flags.Bit0f); - flags.Add(light.Flags.Bit10); - flags.Add(light.Flags.Bit11); - flags.Add(light.Flags.CastShadowsOnWorld); - flags.Add(light.Flags.CastShadowsOnPeople); - flags.Add(light.Flags.Bit14); - flags.Add(light.Flags.Bit15); - flags.Add(light.Flags.Bit16); - flags.Add(light.Flags.Bit17); - flags.Add(light.Flags.Bit18); - flags.Add(light.Flags.Bit19); - flags.Add(light.Flags.Bit1a); - flags.Add(light.Flags.Bit1b); - flags.Add(light.Flags.Bit1c); - flags.Add(light.Flags.Bit1d); - flags.Add(light.Flags.Bit1e); - flags.Add(light.Flags.Bit1f); - + flags.Add(light.Bitflag0); + flags.Add(light.Bitflag1); + flags.Add(light.Bitflag2); + flags.Add(light.Bitflag3); + flags.Add(light.Bitflag4); + flags.Add(light.Bitflag8); + flags.Add(light.Bitflag10); + flags.Add(light.ShadowCharacter); + flags.Add(light.ShadowLevel); + flags.Add(light.LightCharacter); + flags.Add(light.LightLevel); + flags.Add(light.Bitflag22); lightNode.Set("flags", flags); - lightNode.Set("color", col); - lightNode.Set("unk10", light.Unk10); lightNode.Translation = pos; + lightNode.Set("type", light.Type); lightNode.Set("radius_inner", light.RadiusInner); lightNode.Set("radius_outer", light.RadiusOuter); lightNode.Set("render_dist", light.RenderDist); - - + lightNode.Set("parent", light.ParentCityobject); lights.AddChild(lightNode); + loaded_lights.Add(lightNode); + // Has to be done in this roundabout way, cannot set transform via csharp? + lightNode.Call("_set_basis", new Basis( + new Vector3(light.BasisX.X, -light.BasisX.Y, -light.BasisX.Z), + new Vector3(-light.BasisY.X, light.BasisY.Y, -light.BasisY.Z), + new Vector3(-light.BasisZ.X, -light.BasisZ.Y, light.BasisZ.Z))); } - } - + globals.Set("loaded_lights", loaded_lights); + } Spatial camera = (Spatial)GetNode("/root/main/editor/cameraman"); camera.Translation = new Vector3( -loadedChunk.CityobjectParts[0].Pos.X, loadedChunk.CityobjectParts[0].Pos.Y, loadedChunk.CityobjectParts[0].Pos.Z ); - chunkEditor.Call("_update"); } diff --git a/autoload/ChunkUnloader.cs b/autoload/ChunkUnloader.cs index 0c9f714..1d73266 100644 --- a/autoload/ChunkUnloader.cs +++ b/autoload/ChunkUnloader.cs @@ -6,7 +6,7 @@ //* public class ChunkUnloader : Node { - public void PatchChunk(Sr2CpuChunkPc chunk, string filepath) + public void PatchChunk(Sr2ChunkPc chunk, string filepath) { GD.Print(filepath); @@ -20,104 +20,98 @@ public void PatchChunk(Sr2CpuChunkPc chunk, string filepath) { BinaryWriter bw = new BinaryWriter(fs); - if ((bool)chunkEditor.Get("opt_cityobjects")){ + if ((bool)chunkEditor.Get("opt_cityobjects")) + { // --- City Object Parts --- // // 96B - for (int i = 0; i < chunk.CityobjectCount; i++) + for (int i = 0; i < chunk.NumCityobjects; i++) { - // Get Cityobject Node data Spatial cobjNode = (Spatial)GetNode("/root/main/chunk/cityobjects").GetChild(i); - float x = cobjNode.Transform.origin.x; - float y = cobjNode.Transform.origin.y; - float z = cobjNode.Transform.origin.z; - uint modelId = (uint)(int)cobjNode.Get("rendermodel_id"); - // Find out which CityobjectPart belongs to this Cityobject and seek there. uint cobjPartId = chunk.Cityobjects[i].CityobjectPartId; - fs.Seek(chunk.CityobjectPartsOffset.Off + cobjPartId * 96, 0); - - bw.Write(-(Single)x); - bw.Write((Single)y); - bw.Write((Single)z); - fs.Seek(76, SeekOrigin.Current); - bw.Write((UInt32)modelId); + fs.Seek(chunk.CityobjectPartsOffset.Input + cobjPartId * 96, 0); + + // Transform + bw.Write(-(Single)cobjNode.Transform.origin.x); + bw.Write((Single)cobjNode.Transform.origin.y); + bw.Write((Single)cobjNode.Transform.origin.z); + //fs.Seek(76, SeekOrigin.Current); + bw.Write((Single)cobjNode.Transform.basis.x.x); + bw.Write(-(Single)cobjNode.Transform.basis.x.y); + bw.Write(-(Single)cobjNode.Transform.basis.x.z); + bw.Write(-(Single)cobjNode.Transform.basis.y.x); + bw.Write((Single)cobjNode.Transform.basis.y.y); + bw.Write(-(Single)cobjNode.Transform.basis.y.z); + bw.Write(-(Single)cobjNode.Transform.basis.z.x); + bw.Write(-(Single)cobjNode.Transform.basis.z.y); + bw.Write((Single)cobjNode.Transform.basis.z.z); + fs.Seek(40, SeekOrigin.Current); + + // Rendermodel + bw.Write((UInt32)(int)cobjNode.Get("rendermodel_id")); fs.Seek(4, SeekOrigin.Current); } } - + // --- Lights --- // - if ((bool)chunkEditor.Get("opt_lights")){ - fs.Seek(chunk.LightsOffset.Off + 4, 0); - for (int i = 0; i < chunk.LightCount; i++) + if ((bool)chunkEditor.Get("opt_lights")) + { + fs.Seek(chunk.LightsOffset.Input + 4, 0); + for (int i = 0; i < chunk.NumLights.Result; i++) { - Sr2CpuChunkPc.Light light = chunk.LightSections.Lights[i]; - // Get Cityobject Node data + Sr2ChunkPc.LightDataType light = chunk.LightData[i]; Spatial lightNode = (Spatial)GetNode("/root/main/chunk/lights").GetChild(i); + //GD.Print("Saving lightnode", lightNode.Name); - - // Construct a bit flag int from array of bools. - // I am sure this could've been done with much less effort. + int flags = 0; Godot.Collections.Array flags_arr = (Godot.Collections.Array)lightNode.Get("flags"); - - for (int j = 0; j < 8; j++) - if ((bool)flags_arr[7 - j]) - flags |= 1 << 7 - j; - flags <<= 8; - - for (int j = 0; j < 8; j++) - if ((bool)flags_arr[15 - j]) - flags |= 1 << 7 - j; - flags <<= 8; - - for (int j = 0; j < 8; j++) - if ((bool)flags_arr[23 - j]) - flags |= 1 << 7 - j; - flags <<= 8; - - for (int j = 0; j < 8; j++) - if ((bool)flags_arr[31 - j]) - flags |= 1 << 7 - j; - + flags = (bool)flags_arr[0x0] == true ? flags | (128) : flags; // bitflag0 + flags = (bool)flags_arr[0x1] == true ? flags | (64) : flags; // bitflag1 + flags = (bool)flags_arr[0x2] == true ? flags | (32) : flags; // bitflag2 + flags = (bool)flags_arr[0x3] == true ? flags | (16) : flags; // bitflag3 + flags = (bool)flags_arr[0x4] == true ? flags | (8) : flags; // bitflag4 + flags = (bool)flags_arr[0x5] == true ? flags | (32768) : flags; // bitflag8 + flags = (bool)flags_arr[0x6] == true ? flags | (8192) : flags; // bitflag10 + flags = (bool)flags_arr[0x7] == true ? flags | (2048) : flags; // shadow_character + flags = (bool)flags_arr[0x8] == true ? flags | (1024) : flags; // shadow_level + flags = (bool)flags_arr[0x9] == true ? flags | (512) : flags; // light_character + flags = (bool)flags_arr[0xa] == true ? flags | (256) : flags; // light_level + flags = (bool)flags_arr[0xb] == true ? flags | (131072) : flags; // bitflag22 Color col = (Color)lightNode.Get("color"); - uint unk10 = (uint)(int)lightNode.Get("unk10"); - - float x = lightNode.Transform.origin.x; - float y = lightNode.Transform.origin.y; - float z = lightNode.Transform.origin.z; - - float radius_inner = (float)lightNode.Get("radius_inner"); - float radius_outer = (float)lightNode.Get("radius_outer"); - float render_dist = (float)lightNode.Get("render_dist"); - bw.Write(flags); - - fs.Seek(4, SeekOrigin.Current); - + bw.Write((UInt32)(0)); bw.Write(col.r); bw.Write(col.g); bw.Write(col.b); - - fs.Seek(20, SeekOrigin.Current); - - bw.Write(unk10); - fs.Seek(16, SeekOrigin.Current); - - bw.Write(-x); - bw.Write(y); - bw.Write(z); - - fs.Seek(44, SeekOrigin.Current); - - bw.Write(radius_inner); - bw.Write(radius_outer); - bw.Write(render_dist); - - fs.Seek(20, SeekOrigin.Current); + bw.Write((Int32)(-1)); + bw.Write((uint)(int)lightNode.Get("unk10")); + bw.Write((Int32)(-1)); + fs.Seek(12, SeekOrigin.Current); + bw.Write(-lightNode.Transform.origin.x); + bw.Write(lightNode.Transform.origin.y); + bw.Write(lightNode.Transform.origin.z); + bw.Write((Single)lightNode.Transform.basis.x.x); + bw.Write(-(Single)lightNode.Transform.basis.x.y); + bw.Write(-(Single)lightNode.Transform.basis.x.z); + bw.Write(-(Single)lightNode.Transform.basis.y.x); + bw.Write((Single)lightNode.Transform.basis.y.y); + bw.Write(-(Single)lightNode.Transform.basis.y.z); + bw.Write(-(Single)lightNode.Transform.basis.z.x); + bw.Write(-(Single)lightNode.Transform.basis.z.y); + bw.Write((Single)lightNode.Transform.basis.z.z); + fs.Seek(8, SeekOrigin.Current); + bw.Write((float)lightNode.Get("radius_inner")); + bw.Write((float)lightNode.Get("radius_outer")); + bw.Write((float)lightNode.Get("render_dist")); + bw.Write((Int32)(-1)); + bw.Write((UInt32)(int)lightNode.Get("parent")); + fs.Seek(8, SeekOrigin.Current); + bw.Write((UInt32)(int)lightNode.Get("type")); } } diff --git a/autoload/Globals.gd b/autoload/Globals.gd index 1743406..fd38061 100644 --- a/autoload/Globals.gd +++ b/autoload/Globals.gd @@ -9,3 +9,12 @@ const PATH_CITYOBJECTS = "/root/main/chunk/cityobjects" const PATH_LIGHTS = "/root/main/chunk/cityobjects" var on_clear_chunkfile_to_load = null + +var objects_by_uid = {} +var loaded_cityobjects = [] +var loaded_lights = [] + +func _clear(): + loaded_cityobjects.clear() + loaded_lights.clear() + objects_by_uid.clear() diff --git a/autoload/Sr2GpuChunkLoader.cs b/autoload/Sr2GpuChunkLoader.cs index 90101c7..7a5ad02 100644 --- a/autoload/Sr2GpuChunkLoader.cs +++ b/autoload/Sr2GpuChunkLoader.cs @@ -5,7 +5,7 @@ public class Sr2GpuChunkLoader { - public Mesh[] LoadMeshesFromChunk(Sr2CpuChunkPc chunk, string filepath) + public Mesh[] LoadMeshesFromChunk(Sr2ChunkPc chunk, string filepath) { if (!System.IO.File.Exists(filepath)) { @@ -21,7 +21,7 @@ public Mesh[] LoadMeshesFromChunk(Sr2CpuChunkPc chunk, string filepath) for (int i = 0; i < chunk.NumRendermodels; i++) { - Sr2CpuChunkPc.Rendermodel model = chunk.Rendermodels[i]; + Sr2ChunkPc.Rendermodel model = chunk.Rendermodels[i]; SurfaceTool st = new SurfaceTool(); st.Begin(Mesh.PrimitiveType.Triangles); @@ -31,7 +31,7 @@ public Mesh[] LoadMeshesFromChunk(Sr2CpuChunkPc chunk, string filepath) for (int ii = 0; ii < chunk.ModelHeaders[0].VertHeaderCount; ii++) { vBufOffsets[ii] = iBufOffset; - uint vertCount = chunk.VertHeaders[0].VertHeader[ii].VertCount; + uint vertCount = chunk.VertHeaders[0].VertHeader[ii].NumVertices; uint vertSize = chunk.VertHeaders[0].VertHeader[ii].VertSize; iBufOffset += vertCount * vertSize; // byte align @@ -48,14 +48,14 @@ public Mesh[] LoadMeshesFromChunk(Sr2CpuChunkPc chunk, string filepath) int vertBufID = (int)model.Submeshes[ii].VertBufferId; uint vertSize = chunk.VertHeaders[0].VertHeader[vertBufID].VertSize; - int indexOffset = (int)(iBufOffset + model.Submeshes[ii].IndexOffset * 2); - uint vertexOffset = vBufOffsets[vertBufID] + model.Submeshes[ii].VertOffset * vertSize; + int indexOffset = (int)(iBufOffset + model.Submeshes[ii].OffIndices * 2); + uint vertexOffset = vBufOffsets[vertBufID] + model.Submeshes[ii].OffVertices * vertSize; // Get VertCount (it isn't stored explicitly so gotta pull it if from indices) fs.Seek(indexOffset, SeekOrigin.Begin); uint tempVertCount = 0; - for (int iii = 0; iii < model.Submeshes[ii].IndexCount; iii++) + for (int iii = 0; iii < model.Submeshes[ii].NumIndices; iii++) { tempVertCount = (uint)Math.Max(br.ReadInt16() + 1, tempVertCount); } @@ -73,7 +73,7 @@ public Mesh[] LoadMeshesFromChunk(Sr2CpuChunkPc chunk, string filepath) // Get Indices fs.Seek(indexOffset, SeekOrigin.Begin); - for (int iii = 0; iii < model.Submeshes[ii].IndexCount - 2; iii++) + for (int iii = 0; iii < model.Submeshes[ii].NumIndices - 2; iii++) { uint i0 = totalVertCount + br.ReadUInt16(); uint i1 = totalVertCount + br.ReadUInt16(); diff --git a/scenes/editor/mdl_arrow.tscn b/scenes/editor/mdl_arrow.tscn new file mode 100644 index 0000000..b965c16 --- /dev/null +++ b/scenes/editor/mdl_arrow.tscn @@ -0,0 +1,29 @@ +[gd_scene load_steps=2 format=2] + +[sub_resource type="ArrayMesh" id=1] +resource_name = "arrow_Cone" +surfaces/0 = { +"aabb": AABB( -0.125, -0.257576, -0.125, 0.25, 0.25001, 0.25001 ), +"array_data": PoolByteArray( 108, 178, 201, 48, 87, 62, 248, 187, 4, 0, 0, 62, 242, 219, 90, 45, 0, 52, 20, 56, 108, 178, 201, 48, 87, 62, 248, 187, 4, 0, 0, 62, 14, 219, 90, 81, 0, 52, 20, 56, 108, 178, 201, 48, 87, 62, 248, 187, 4, 0, 0, 62, 0, 127, 127, 193, 0, 58, 20, 56, 24, 239, 67, 61, 81, 62, 248, 187, 104, 131, 236, 61, 14, 219, 90, 81, 120, 53, 57, 56, 24, 239, 67, 61, 81, 62, 248, 187, 104, 131, 236, 61, 37, 223, 59, 97, 120, 53, 57, 56, 24, 239, 67, 61, 81, 62, 248, 187, 104, 131, 236, 61, 0, 127, 126, 193, 188, 58, 57, 56, 244, 4, 181, 61, 62, 62, 248, 187, 0, 5, 181, 61, 37, 223, 59, 97, 183, 54, 164, 56, 244, 4, 181, 61, 62, 62, 248, 187, 0, 5, 181, 61, 56, 223, 47, 103, 183, 54, 164, 56, 244, 4, 181, 61, 62, 62, 248, 187, 0, 5, 181, 61, 0, 127, 127, 193, 91, 59, 164, 56, 96, 131, 236, 61, 33, 62, 248, 187, 43, 239, 67, 61, 56, 223, 47, 103, 140, 55, 67, 57, 96, 131, 236, 61, 33, 62, 248, 187, 43, 239, 67, 61, 74, 219, 42, 105, 140, 55, 67, 57, 96, 131, 236, 61, 33, 62, 248, 187, 43, 239, 67, 61, 0, 127, 127, 193, 198, 59, 67, 57, 0, 0, 0, 62, 0, 62, 248, 187, 238, 22, 172, 51, 89, 204, 42, 105, 215, 55, 0, 58, 0, 0, 0, 62, 0, 62, 248, 187, 238, 22, 172, 51, 74, 219, 42, 105, 215, 55, 0, 58, 0, 0, 0, 62, 0, 62, 248, 187, 238, 22, 172, 51, 0, 127, 127, 193, 235, 59, 0, 58, 96, 131, 236, 61, 223, 61, 248, 187, 1, 239, 67, 189, 93, 186, 47, 103, 140, 55, 188, 58, 96, 131, 236, 61, 223, 61, 248, 187, 1, 239, 67, 189, 89, 204, 42, 105, 140, 55, 188, 58, 96, 131, 236, 61, 223, 61, 248, 187, 1, 239, 67, 189, 0, 127, 127, 193, 198, 59, 188, 58, 244, 4, 181, 61, 194, 61, 248, 187, 232, 4, 181, 189, 93, 167, 59, 97, 183, 54, 91, 59, 244, 4, 181, 61, 194, 61, 248, 187, 232, 4, 181, 189, 93, 186, 47, 103, 183, 54, 91, 59, 244, 4, 181, 61, 194, 61, 248, 187, 232, 4, 181, 189, 0, 127, 126, 193, 91, 59, 91, 59, 24, 239, 67, 61, 175, 61, 248, 187, 84, 131, 236, 189, 89, 144, 90, 81, 120, 53, 198, 59, 24, 239, 67, 61, 175, 61, 248, 187, 84, 131, 236, 189, 93, 167, 59, 97, 120, 53, 198, 59, 24, 239, 67, 61, 175, 61, 248, 187, 84, 131, 236, 189, 0, 127, 127, 193, 188, 58, 198, 59, 108, 178, 201, 48, 169, 61, 248, 187, 244, 255, 255, 189, 167, 144, 90, 45, 0, 52, 235, 59, 108, 178, 201, 48, 169, 61, 248, 187, 244, 255, 255, 189, 89, 144, 90, 81, 0, 52, 235, 59, 108, 178, 201, 48, 169, 61, 248, 187, 244, 255, 255, 189, 0, 127, 127, 193, 0, 58, 235, 59, 20, 239, 67, 189, 175, 61, 248, 187, 84, 131, 236, 189, 163, 167, 59, 29, 15, 49, 198, 59, 20, 239, 67, 189, 175, 61, 248, 187, 84, 131, 236, 189, 167, 144, 90, 45, 15, 49, 198, 59, 20, 239, 67, 189, 175, 61, 248, 187, 84, 131, 236, 189, 0, 127, 126, 193, 67, 57, 198, 59, 244, 4, 181, 189, 194, 61, 248, 187, 232, 4, 181, 189, 163, 186, 47, 23, 35, 45, 91, 59, 244, 4, 181, 189, 194, 61, 248, 187, 232, 4, 181, 189, 163, 167, 59, 29, 35, 45, 91, 59, 244, 4, 181, 189, 194, 61, 248, 187, 232, 4, 181, 189, 0, 127, 127, 193, 164, 56, 91, 59, 96, 131, 236, 189, 223, 61, 248, 187, 1, 239, 67, 189, 167, 204, 42, 21, 60, 39, 188, 58, 96, 131, 236, 189, 223, 61, 248, 187, 1, 239, 67, 189, 163, 186, 47, 23, 60, 39, 188, 58, 96, 131, 236, 189, 223, 61, 248, 187, 1, 239, 67, 189, 0, 127, 126, 193, 57, 56, 188, 58, 0, 0, 0, 190, 0, 62, 248, 187, 238, 22, 172, 51, 167, 204, 42, 21, 30, 33, 0, 58, 0, 0, 0, 190, 0, 62, 248, 187, 238, 22, 172, 51, 182, 219, 42, 21, 30, 33, 0, 58, 0, 0, 0, 190, 0, 62, 248, 187, 238, 22, 172, 51, 0, 127, 127, 193, 20, 56, 0, 58, 96, 131, 236, 189, 33, 62, 248, 187, 43, 239, 67, 61, 182, 219, 42, 21, 60, 39, 67, 57, 96, 131, 236, 189, 33, 62, 248, 187, 43, 239, 67, 61, 200, 223, 47, 23, 60, 39, 67, 57, 96, 131, 236, 189, 33, 62, 248, 187, 43, 239, 67, 61, 0, 127, 126, 193, 57, 56, 67, 57, 244, 4, 181, 189, 62, 62, 248, 187, 0, 5, 181, 61, 200, 223, 47, 23, 35, 45, 164, 56, 244, 4, 181, 189, 62, 62, 248, 187, 0, 5, 181, 61, 219, 223, 59, 29, 35, 45, 164, 56, 244, 4, 181, 189, 62, 62, 248, 187, 0, 5, 181, 61, 0, 127, 126, 193, 164, 56, 164, 56, 20, 239, 67, 189, 81, 62, 248, 187, 104, 131, 236, 61, 219, 223, 59, 29, 15, 49, 57, 56, 20, 239, 67, 189, 81, 62, 248, 187, 104, 131, 236, 61, 242, 219, 90, 45, 15, 49, 57, 56, 20, 239, 67, 189, 81, 62, 248, 187, 104, 131, 236, 61, 0, 127, 127, 193, 67, 57, 57, 56, 108, 178, 201, 48, 248, 224, 131, 190, 64, 23, 182, 176, 167, 204, 42, 21, 0, 52, 0, 58, 108, 178, 201, 48, 248, 224, 131, 190, 64, 23, 182, 176, 182, 219, 42, 21, 0, 52, 0, 58, 108, 178, 201, 48, 248, 224, 131, 190, 64, 23, 182, 176, 163, 186, 47, 23, 0, 52, 0, 58, 108, 178, 201, 48, 248, 224, 131, 190, 64, 23, 182, 176, 200, 223, 47, 23, 0, 52, 0, 58, 108, 178, 201, 48, 248, 224, 131, 190, 64, 23, 182, 176, 163, 167, 59, 29, 0, 52, 0, 58, 108, 178, 201, 48, 248, 224, 131, 190, 64, 23, 182, 176, 219, 223, 59, 29, 0, 52, 0, 58, 108, 178, 201, 48, 248, 224, 131, 190, 64, 23, 182, 176, 167, 144, 90, 45, 0, 52, 0, 58, 108, 178, 201, 48, 248, 224, 131, 190, 64, 23, 182, 176, 242, 219, 90, 45, 0, 52, 0, 58, 108, 178, 201, 48, 248, 224, 131, 190, 64, 23, 182, 176, 89, 144, 90, 81, 0, 52, 0, 58, 108, 178, 201, 48, 248, 224, 131, 190, 64, 23, 182, 176, 14, 219, 90, 81, 0, 52, 0, 58, 108, 178, 201, 48, 248, 224, 131, 190, 64, 23, 182, 176, 93, 167, 59, 97, 0, 52, 0, 58, 108, 178, 201, 48, 248, 224, 131, 190, 64, 23, 182, 176, 37, 223, 59, 97, 0, 52, 0, 58, 108, 178, 201, 48, 248, 224, 131, 190, 64, 23, 182, 176, 93, 186, 47, 103, 0, 52, 0, 58, 108, 178, 201, 48, 248, 224, 131, 190, 64, 23, 182, 176, 56, 223, 47, 103, 0, 52, 0, 58, 108, 178, 201, 48, 248, 224, 131, 190, 64, 23, 182, 176, 89, 204, 42, 105, 0, 52, 0, 58, 108, 178, 201, 48, 248, 224, 131, 190, 64, 23, 182, 176, 74, 219, 42, 105, 0, 52, 0, 58, 172, 99, 216, 48, 21, 62, 248, 187, 47, 62, 248, 60, 0, 127, 127, 193, 255, 57, 136, 57, 32, 255, 61, 60, 20, 62, 248, 187, 187, 88, 229, 60, 0, 127, 126, 193, 45, 58, 145, 57, 16, 62, 248, 60, 0, 62, 248, 187, 45, 211, 115, 51, 0, 127, 126, 193, 119, 58, 0, 58, 156, 88, 229, 60, 8, 62, 248, 187, 93, 255, 61, 60, 0, 127, 126, 193, 110, 58, 210, 57, 152, 88, 229, 60, 248, 61, 248, 187, 223, 254, 61, 188, 0, 127, 126, 193, 110, 58, 45, 58, 176, 136, 175, 60, 15, 62, 248, 187, 207, 136, 175, 60, 0, 127, 127, 193, 84, 58, 171, 57, 32, 255, 61, 60, 236, 61, 248, 187, 121, 88, 229, 188, 0, 127, 127, 193, 45, 58, 110, 58, 176, 136, 175, 60, 241, 61, 248, 187, 141, 136, 175, 188, 0, 127, 126, 193, 84, 58, 84, 58, 16, 62, 248, 188, 0, 62, 248, 187, 45, 211, 115, 51, 0, 127, 126, 193, 136, 57, 0, 58, 152, 88, 229, 188, 8, 62, 248, 187, 93, 255, 61, 60, 0, 127, 126, 193, 145, 57, 210, 57, 176, 136, 175, 188, 15, 62, 248, 187, 207, 136, 175, 60, 0, 127, 126, 193, 171, 57, 171, 57, 172, 136, 175, 188, 241, 61, 248, 187, 141, 136, 175, 188, 0, 127, 127, 193, 171, 57, 84, 58, 152, 88, 229, 188, 248, 61, 248, 187, 223, 254, 61, 188, 0, 127, 126, 193, 145, 57, 45, 58, 172, 99, 216, 48, 235, 61, 248, 187, 237, 61, 248, 188, 0, 127, 127, 193, 0, 58, 119, 58, 24, 255, 61, 188, 236, 61, 248, 187, 121, 88, 229, 188, 0, 127, 126, 193, 210, 57, 110, 58, 28, 255, 61, 188, 20, 62, 248, 187, 187, 88, 229, 60, 0, 127, 127, 193, 210, 57, 145, 57 ), +"array_index_data": PoolByteArray( 70, 0, 26, 0, 23, 0, 70, 0, 77, 0, 26, 0, 61, 0, 7, 0, 9, 0, 50, 0, 30, 0, 34, 0, 19, 0, 60, 0, 15, 0, 31, 0, 52, 0, 27, 0, 49, 0, 37, 0, 39, 0, 63, 0, 10, 0, 13, 0, 2, 0, 79, 0, 64, 0, 2, 0, 47, 0, 79, 0, 55, 0, 46, 0, 0, 0, 69, 0, 5, 0, 65, 0, 69, 0, 8, 0, 5, 0, 65, 0, 2, 0, 64, 0, 65, 0, 5, 0, 2, 0, 71, 0, 17, 0, 68, 0, 71, 0, 20, 0, 17, 0, 72, 0, 41, 0, 38, 0, 72, 0, 73, 0, 41, 0, 74, 0, 47, 0, 44, 0, 74, 0, 79, 0, 47, 0, 17, 0, 66, 0, 68, 0, 17, 0, 14, 0, 66, 0, 78, 0, 26, 0, 77, 0, 78, 0, 29, 0, 26, 0, 74, 0, 41, 0, 73, 0, 74, 0, 44, 0, 41, 0, 70, 0, 20, 0, 71, 0, 70, 0, 23, 0, 20, 0, 75, 0, 29, 0, 78, 0, 75, 0, 32, 0, 29, 0, 76, 0, 32, 0, 75, 0, 76, 0, 35, 0, 32, 0, 11, 0, 66, 0, 14, 0, 11, 0, 67, 0, 66, 0, 72, 0, 35, 0, 76, 0, 72, 0, 38, 0, 35, 0, 51, 0, 40, 0, 42, 0, 28, 0, 54, 0, 24, 0, 57, 0, 1, 0, 3, 0, 56, 0, 21, 0, 25, 0, 48, 0, 33, 0, 36, 0, 67, 0, 8, 0, 69, 0, 67, 0, 11, 0, 8, 0, 59, 0, 4, 0, 6, 0, 16, 0, 62, 0, 12, 0, 53, 0, 43, 0, 45, 0, 58, 0, 18, 0, 22, 0 ), +"blend_shape_data": [ ], +"format": 2194711, +"index_count": 144, +"primitive": 4, +"skeleton_aabb": [ ], +"vertex_count": 80 +} +surfaces/1 = { +"aabb": AABB( -0.0625, -0.00757576, -0.0624999, 0.125, 0.257586, 0.12501 ), +"array_data": PoolByteArray( 172, 99, 216, 48, 251, 255, 127, 62, 11, 0, 128, 61, 237, 245, 49, 24, 0, 52, 20, 56, 172, 99, 216, 48, 251, 255, 127, 62, 11, 0, 128, 61, 19, 245, 49, 102, 0, 52, 20, 56, 172, 99, 216, 48, 251, 255, 127, 62, 11, 0, 128, 61, 0, 127, 127, 193, 0, 58, 20, 56, 24, 239, 195, 60, 251, 255, 127, 62, 114, 131, 108, 61, 19, 245, 49, 102, 120, 53, 57, 56, 24, 239, 195, 60, 251, 255, 127, 62, 114, 131, 108, 61, 46, 246, 22, 115, 120, 53, 57, 56, 24, 239, 195, 60, 251, 255, 127, 62, 114, 131, 108, 61, 0, 127, 127, 193, 188, 58, 57, 56, 244, 4, 53, 61, 255, 255, 127, 62, 6, 5, 53, 61, 46, 246, 22, 115, 183, 54, 164, 56, 244, 4, 53, 61, 255, 255, 127, 62, 6, 5, 53, 61, 69, 246, 16, 118, 183, 54, 164, 56, 244, 4, 53, 61, 255, 255, 127, 62, 6, 5, 53, 61, 0, 127, 127, 193, 91, 59, 164, 56, 96, 131, 108, 61, 255, 255, 127, 62, 64, 239, 195, 60, 69, 246, 16, 118, 140, 55, 67, 57, 96, 131, 108, 61, 255, 255, 127, 62, 64, 239, 195, 60, 95, 245, 14, 119, 140, 55, 67, 57, 96, 131, 108, 61, 255, 255, 127, 62, 64, 239, 195, 60, 0, 127, 127, 193, 198, 59, 67, 57, 0, 0, 128, 61, 0, 0, 128, 62, 173, 248, 166, 51, 115, 225, 14, 119, 215, 55, 0, 58, 0, 0, 128, 61, 0, 0, 128, 62, 173, 248, 166, 51, 95, 245, 14, 119, 215, 55, 0, 58, 0, 0, 128, 61, 0, 0, 128, 62, 173, 248, 166, 51, 0, 127, 127, 193, 235, 59, 0, 58, 96, 131, 108, 61, 0, 0, 128, 62, 236, 238, 195, 188, 116, 199, 16, 118, 140, 55, 188, 58, 96, 131, 108, 61, 0, 0, 128, 62, 236, 238, 195, 188, 115, 225, 14, 119, 140, 55, 188, 58, 96, 131, 108, 61, 0, 0, 128, 62, 236, 238, 195, 188, 0, 127, 127, 193, 198, 59, 188, 58, 244, 4, 53, 61, 0, 0, 128, 62, 222, 4, 53, 189, 116, 176, 22, 115, 183, 54, 91, 59, 244, 4, 53, 61, 0, 0, 128, 62, 222, 4, 53, 189, 116, 199, 16, 118, 183, 54, 91, 59, 244, 4, 53, 61, 0, 0, 128, 62, 222, 4, 53, 189, 0, 127, 126, 193, 91, 59, 91, 59, 24, 239, 195, 60, 5, 0, 128, 62, 74, 131, 108, 189, 115, 149, 49, 102, 120, 53, 198, 59, 24, 239, 195, 60, 5, 0, 128, 62, 74, 131, 108, 189, 116, 176, 22, 115, 120, 53, 198, 59, 24, 239, 195, 60, 5, 0, 128, 62, 74, 131, 108, 189, 0, 127, 126, 193, 188, 58, 198, 59, 172, 99, 216, 48, 5, 0, 128, 62, 234, 255, 127, 189, 141, 149, 49, 24, 0, 52, 235, 59, 172, 99, 216, 48, 5, 0, 128, 62, 234, 255, 127, 189, 115, 149, 49, 102, 0, 52, 235, 59, 172, 99, 216, 48, 5, 0, 128, 62, 234, 255, 127, 189, 0, 127, 127, 193, 0, 58, 235, 59, 20, 239, 195, 188, 5, 0, 128, 62, 74, 131, 108, 189, 140, 176, 22, 11, 15, 49, 198, 59, 20, 239, 195, 188, 5, 0, 128, 62, 74, 131, 108, 189, 141, 149, 49, 24, 15, 49, 198, 59, 20, 239, 195, 188, 5, 0, 128, 62, 74, 131, 108, 189, 0, 127, 127, 193, 67, 57, 198, 59, 244, 4, 53, 189, 0, 0, 128, 62, 222, 4, 53, 189, 140, 199, 16, 8, 35, 45, 91, 59, 244, 4, 53, 189, 0, 0, 128, 62, 222, 4, 53, 189, 140, 176, 22, 11, 35, 45, 91, 59, 244, 4, 53, 189, 0, 0, 128, 62, 222, 4, 53, 189, 0, 127, 127, 193, 164, 56, 91, 59, 96, 131, 108, 189, 0, 0, 128, 62, 236, 238, 195, 188, 141, 225, 14, 7, 60, 39, 188, 58, 96, 131, 108, 189, 0, 0, 128, 62, 236, 238, 195, 188, 140, 199, 16, 8, 60, 39, 188, 58, 96, 131, 108, 189, 0, 0, 128, 62, 236, 238, 195, 188, 0, 127, 127, 193, 57, 56, 188, 58, 0, 0, 128, 189, 0, 0, 128, 62, 173, 248, 166, 51, 141, 225, 14, 7, 30, 33, 0, 58, 0, 0, 128, 189, 0, 0, 128, 62, 173, 248, 166, 51, 161, 245, 14, 7, 30, 33, 0, 58, 0, 0, 128, 189, 0, 0, 128, 62, 173, 248, 166, 51, 0, 127, 127, 193, 20, 56, 0, 58, 96, 131, 108, 189, 255, 255, 127, 62, 64, 239, 195, 60, 161, 245, 14, 7, 60, 39, 67, 57, 96, 131, 108, 189, 255, 255, 127, 62, 64, 239, 195, 60, 187, 246, 16, 8, 60, 39, 67, 57, 96, 131, 108, 189, 255, 255, 127, 62, 64, 239, 195, 60, 0, 127, 126, 193, 57, 56, 67, 57, 244, 4, 53, 189, 255, 255, 127, 62, 6, 5, 53, 61, 187, 246, 16, 8, 35, 45, 164, 56, 244, 4, 53, 189, 255, 255, 127, 62, 6, 5, 53, 61, 210, 246, 22, 11, 35, 45, 164, 56, 244, 4, 53, 189, 255, 255, 127, 62, 6, 5, 53, 61, 0, 127, 126, 193, 164, 56, 164, 56, 20, 239, 195, 188, 251, 255, 127, 62, 114, 131, 108, 61, 210, 246, 22, 11, 15, 49, 57, 56, 20, 239, 195, 188, 251, 255, 127, 62, 114, 131, 108, 61, 237, 245, 49, 24, 15, 49, 57, 56, 20, 239, 195, 188, 251, 255, 127, 62, 114, 131, 108, 61, 0, 127, 126, 193, 67, 57, 57, 56, 172, 99, 216, 48, 21, 62, 248, 187, 47, 62, 248, 60, 237, 245, 49, 24, 0, 52, 17, 57, 172, 99, 216, 48, 21, 62, 248, 187, 47, 62, 248, 60, 19, 245, 49, 102, 0, 52, 17, 57, 32, 255, 61, 60, 20, 62, 248, 187, 187, 88, 229, 60, 19, 245, 49, 102, 182, 52, 35, 57, 32, 255, 61, 60, 20, 62, 248, 187, 187, 88, 229, 60, 46, 246, 22, 115, 182, 52, 35, 57, 16, 62, 248, 60, 0, 62, 248, 187, 45, 211, 115, 51, 115, 225, 14, 119, 220, 53, 0, 58, 16, 62, 248, 60, 0, 62, 248, 187, 45, 211, 115, 51, 95, 245, 14, 119, 220, 53, 0, 58, 156, 88, 229, 60, 8, 62, 248, 187, 93, 255, 61, 60, 69, 246, 16, 118, 184, 53, 164, 57, 156, 88, 229, 60, 8, 62, 248, 187, 93, 255, 61, 60, 95, 245, 14, 119, 184, 53, 164, 57, 152, 88, 229, 60, 248, 61, 248, 187, 223, 254, 61, 188, 116, 199, 16, 118, 184, 53, 91, 58, 152, 88, 229, 60, 248, 61, 248, 187, 223, 254, 61, 188, 115, 225, 14, 119, 184, 53, 91, 58, 176, 136, 175, 60, 15, 62, 248, 187, 207, 136, 175, 60, 46, 246, 22, 115, 81, 53, 87, 57, 176, 136, 175, 60, 15, 62, 248, 187, 207, 136, 175, 60, 69, 246, 16, 118, 81, 53, 87, 57, 32, 255, 61, 60, 236, 61, 248, 187, 121, 88, 229, 188, 115, 149, 49, 102, 182, 52, 220, 58, 32, 255, 61, 60, 236, 61, 248, 187, 121, 88, 229, 188, 116, 176, 22, 115, 182, 52, 220, 58, 176, 136, 175, 60, 241, 61, 248, 187, 141, 136, 175, 188, 116, 176, 22, 115, 81, 53, 168, 58, 176, 136, 175, 60, 241, 61, 248, 187, 141, 136, 175, 188, 116, 199, 16, 118, 81, 53, 168, 58, 16, 62, 248, 188, 0, 62, 248, 187, 45, 211, 115, 51, 141, 225, 14, 7, 70, 48, 0, 58, 16, 62, 248, 188, 0, 62, 248, 187, 45, 211, 115, 51, 161, 245, 14, 7, 70, 48, 0, 58, 152, 88, 229, 188, 8, 62, 248, 187, 93, 255, 61, 60, 161, 245, 14, 7, 143, 48, 164, 57, 152, 88, 229, 188, 8, 62, 248, 187, 93, 255, 61, 60, 187, 246, 16, 8, 143, 48, 164, 57, 176, 136, 175, 188, 15, 62, 248, 187, 207, 136, 175, 60, 187, 246, 16, 8, 93, 49, 87, 57, 176, 136, 175, 188, 15, 62, 248, 187, 207, 136, 175, 60, 210, 246, 22, 11, 93, 49, 87, 57, 172, 136, 175, 188, 241, 61, 248, 187, 141, 136, 175, 188, 140, 199, 16, 8, 93, 49, 168, 58, 172, 136, 175, 188, 241, 61, 248, 187, 141, 136, 175, 188, 140, 176, 22, 11, 93, 49, 168, 58, 152, 88, 229, 188, 248, 61, 248, 187, 223, 254, 61, 188, 141, 225, 14, 7, 143, 48, 91, 58, 152, 88, 229, 188, 248, 61, 248, 187, 223, 254, 61, 188, 140, 199, 16, 8, 143, 48, 91, 58, 172, 99, 216, 48, 235, 61, 248, 187, 237, 61, 248, 188, 141, 149, 49, 24, 0, 52, 238, 58, 172, 99, 216, 48, 235, 61, 248, 187, 237, 61, 248, 188, 115, 149, 49, 102, 0, 52, 238, 58, 24, 255, 61, 188, 236, 61, 248, 187, 121, 88, 229, 188, 140, 176, 22, 11, 147, 50, 220, 58, 24, 255, 61, 188, 236, 61, 248, 187, 121, 88, 229, 188, 141, 149, 49, 24, 147, 50, 220, 58, 28, 255, 61, 188, 20, 62, 248, 187, 187, 88, 229, 60, 210, 246, 22, 11, 147, 50, 35, 57, 28, 255, 61, 188, 20, 62, 248, 187, 187, 88, 229, 60, 237, 245, 49, 24, 147, 50, 35, 57 ), +"array_index_data": PoolByteArray( 69, 0, 45, 0, 78, 0, 69, 0, 43, 0, 45, 0, 70, 0, 34, 0, 73, 0, 70, 0, 30, 0, 34, 0, 58, 0, 4, 0, 6, 0, 58, 0, 51, 0, 4, 0, 60, 0, 25, 0, 75, 0, 60, 0, 21, 0, 25, 0, 57, 0, 12, 0, 16, 0, 57, 0, 52, 0, 12, 0, 68, 0, 40, 0, 42, 0, 68, 0, 67, 0, 40, 0, 56, 0, 19, 0, 63, 0, 56, 0, 15, 0, 19, 0, 11, 0, 17, 0, 14, 0, 47, 0, 23, 0, 11, 0, 47, 0, 29, 0, 23, 0, 65, 0, 39, 0, 66, 0, 65, 0, 37, 0, 39, 0, 74, 0, 28, 0, 77, 0, 74, 0, 24, 0, 28, 0, 53, 0, 10, 0, 13, 0, 53, 0, 55, 0, 10, 0, 7, 0, 54, 0, 59, 0, 7, 0, 9, 0, 54, 0, 31, 0, 76, 0, 27, 0, 31, 0, 71, 0, 76, 0, 50, 0, 1, 0, 3, 0, 50, 0, 49, 0, 1, 0, 18, 0, 61, 0, 62, 0, 18, 0, 22, 0, 61, 0, 79, 0, 0, 0, 48, 0, 79, 0, 46, 0, 0, 0, 47, 0, 11, 0, 2, 0, 2, 0, 11, 0, 5, 0, 5, 0, 11, 0, 8, 0, 17, 0, 11, 0, 20, 0, 20, 0, 11, 0, 23, 0, 23, 0, 29, 0, 26, 0, 29, 0, 35, 0, 32, 0, 35, 0, 47, 0, 38, 0, 38, 0, 47, 0, 41, 0, 41, 0, 47, 0, 44, 0, 29, 0, 47, 0, 35, 0, 64, 0, 33, 0, 36, 0, 64, 0, 72, 0, 33, 0 ), +"blend_shape_data": [ ], +"format": 2194711, +"index_count": 138, +"primitive": 4, +"skeleton_aabb": [ ], +"vertex_count": 80 +} + +[node name="mdl_arrow" type="MeshInstance"] +mesh = SubResource( 1 ) diff --git a/scenes/editor/scripts/CityObjectNode.cs b/scenes/editor/scripts/CityObjectNode.cs deleted file mode 100644 index a5a8419..0000000 --- a/scenes/editor/scripts/CityObjectNode.cs +++ /dev/null @@ -1,19 +0,0 @@ -using Godot; -using System; - -public class CityObjectNode : Spatial -{ - uint model; - - public override void _Ready() - { - - } - - public void SetModel(uint _model){ - model = _model; - } - - public uint GetModel() => model; - -} diff --git a/scenes/editor/scripts/cityobject.gd b/scenes/editor/scripts/cityobject.gd index 15797c9..c1ecc54 100644 --- a/scenes/editor/scripts/cityobject.gd +++ b/scenes/editor/scripts/cityobject.gd @@ -3,6 +3,7 @@ extends Spatial +var uid = "" var is_rendermodel_bad = false var rendermodel_id: int = -1 @@ -15,6 +16,10 @@ const TEX_PLACEHOLDER = preload("res://scenes/editor/tex_model_placeholder.png") func _ready(): load_model() +func _set_basis(basis: Basis): + global_transform.basis = basis# Basis(Vector3(0,1,0),Vector3(0,0,1),Vector3(1,0,0)) + + func change_model(id: int): rendermodel_id = id is_highlighted = false @@ -65,7 +70,7 @@ func _input_event(_camera, event, _click_position, _click_normal, _shape_idx): if event is InputEventMouseButton: if event.button_index == BUTTON_LEFT and event.is_pressed(): print("clicked ", name) - ChunkEditor._select(self) + ChunkEditor._select(uid) func _set_highlight(highlight: bool): if get_child_count() == 0: diff --git a/scenes/editor/scripts/import_dialog.gd b/scenes/editor/scripts/import_dialog.gd index 80127c3..257c664 100644 --- a/scenes/editor/scripts/import_dialog.gd +++ b/scenes/editor/scripts/import_dialog.gd @@ -79,5 +79,5 @@ func _ok(): if fext == "chunk_pc" or fext == "g_chunk_pc" or fext == "g_peg_pc": ChunkEditor.opt_cityobjects = opt_cityobjects ChunkEditor.opt_lights = opt_lights - ChunkHandler.LoadChunk(file_input.text) + ChunkEditor._load_chunk(file_input.text) queue_free() diff --git a/scenes/editor/scripts/inspector_panel.gd b/scenes/editor/scripts/inspector_panel.gd index 6269b0f..cae235c 100644 --- a/scenes/editor/scripts/inspector_panel.gd +++ b/scenes/editor/scripts/inspector_panel.gd @@ -35,3 +35,47 @@ func toggle_expand(yes): input_togglehide.icon = ui_icon_expanded else: input_togglehide.icon = ui_icon_contracted + +func create_option_title(title: String): + var label = Label.new() + label.rect_min_size.y = Globals.UI_INSPECTOR_TEXT_MINHEIGHT + label.text = title + return label + +func create_option_tooltip(text: String): + var label = Label.new() + label.rect_min_size.y = Globals.UI_INSPECTOR_TEXT_MINHEIGHT + label.autowrap = true + label.text = text + return label + +func create_option_lineedit(): + var ledit = LineEdit.new() + ledit.size_flags_horizontal = 3 + ledit.rect_min_size.y = Globals.UI_INSPECTOR_TEXT_MINHEIGHT + return ledit + +func create_option_optionbut(): + var optio = OptionButton.new() + optio.size_flags_horizontal = 3 + optio.rect_min_size.y = Globals.UI_INSPECTOR_TEXT_MINHEIGHT + return optio + +func create_option_vec3(): + var hbox = HBoxContainer.new() + var editx = create_option_lineedit() + var edity = create_option_lineedit() + var editz = create_option_lineedit() + editx.name = "editx" + edity.name = "edity" + editz.name = "editz" + hbox.add_child(create_option_title("X")) + hbox.add_child(editx) + hbox.add_child(create_option_title("Y")) + hbox.add_child(edity) + hbox.add_child(create_option_title("Z")) + hbox.add_child(editz) + + hbox.size_flags_horizontal = 3 + hbox.rect_min_size.y = Globals.UI_INSPECTOR_TEXT_MINHEIGHT + return hbox diff --git a/scenes/editor/scripts/inspector_panel_properties.gd b/scenes/editor/scripts/inspector_panel_properties.gd index a4f9432..eab6770 100644 --- a/scenes/editor/scripts/inspector_panel_properties.gd +++ b/scenes/editor/scripts/inspector_panel_properties.gd @@ -1,64 +1,70 @@ extends "res://scenes/editor/scripts/inspector_panel.gd" -var call_target -var call_method +signal changed(radius_inner, radius_outer, render_dist, parent, type) var input_radius_inner var input_radius_outer var input_render_dist +var input_parent +var input_type -# Param 1: Target node of method call. -# Param 2: Name of method. -# Called when a value is changed: target.method(color: Color) -func _create_menu(target, method): - - var hbox_r0 = HBoxContainer.new() - var hbox_r1 = HBoxContainer.new() - var hbox_dist = HBoxContainer.new() - vbox_contents.add_child(hbox_r0) - vbox_contents.add_child(hbox_r1) - vbox_contents.add_child(hbox_dist) - var title_radius_inner = Label.new() - var title_radius_outer = Label.new() - var title_render_dist = Label.new() - input_radius_inner = TextEdit.new() - input_radius_outer = TextEdit.new() - input_render_dist = TextEdit.new() + +func _create_menu(): - input_radius_inner.size_flags_horizontal = 3 # Expand - input_radius_outer.size_flags_horizontal = 3 - input_render_dist.size_flags_horizontal = 3 - title_radius_inner.size_flags_horizontal = 3 - title_radius_outer.size_flags_horizontal = 3 - title_render_dist.size_flags_horizontal = 3 - input_radius_inner.rect_min_size.y = Globals.UI_INSPECTOR_TEXT_MINHEIGHT - input_radius_outer.rect_min_size.y = Globals.UI_INSPECTOR_TEXT_MINHEIGHT - input_render_dist.rect_min_size.y = Globals.UI_INSPECTOR_TEXT_MINHEIGHT - title_radius_inner.text = "radius_inner" - title_radius_outer.text = "radius_outer" - title_render_dist.text = "render_dist" + var container = GridContainer.new() + container.columns = 2 + vbox_contents.add_child(container) - hbox_r0.add_child(title_radius_inner) - hbox_r0.add_child(input_radius_inner) - hbox_r1.add_child(title_radius_outer) - hbox_r1.add_child(input_radius_outer) - hbox_dist.add_child(title_render_dist) - hbox_dist.add_child(input_render_dist) + input_type = create_option_optionbut() + input_type.add_item("0: unknown", 0) + input_type.add_item("1: unknown", 1) + input_type.add_item("2: unknown", 2) + input_type.add_item("3: unknown", 3) + input_type.connect("item_selected", self, "_on_type_set") + input_radius_inner = create_option_lineedit() input_radius_inner.connect("text_changed", self, "_set_properties") + + input_radius_outer = create_option_lineedit() input_radius_outer.connect("text_changed", self, "_set_properties") + + input_render_dist = create_option_lineedit() input_render_dist.connect("text_changed", self, "_set_properties") - call_target = target - call_method = method + input_parent = create_option_optionbut() + input_parent.connect("item_selected", self, "_on_type_set") + + container.add_child(create_option_title("Inner radius")) + container.add_child(input_radius_inner) + container.add_child(create_option_title("Outer radius")) + container.add_child(input_radius_outer) + container.add_child(create_option_title("Render distance")) + container.add_child(input_render_dist) + container.add_child(create_option_title("Parent")) + container.add_child(input_parent) + container.add_child(create_option_title("Light type??")) + container.add_child(input_type) -func _update_properties(radius_inner, radius_outer, render_dist): +func _update_properties(radius_inner, radius_outer, render_dist, parent, type): input_radius_inner.text = str(radius_inner) input_radius_outer.text = str(radius_outer) input_render_dist.text = str(render_dist) - -func _set_properties(col): + input_parent.clear() + input_parent.add_item("-1: None", 0) + for i in Globals.loaded_cityobjects.size(): + var cobj = Globals.loaded_cityobjects[i] + var itemname = str(i) + ": " + cobj.name + input_parent.add_item(itemname) + input_parent.selected = parent + 1 + input_type.selected = type + +func _on_type_set(_n): + _set_properties() + +func _set_properties(_unused=null): + var type = input_type.selected var radius_inner = float(input_radius_inner.text) var radius_outer = float(input_radius_outer.text) var render_dist = float(input_render_dist.text) - call_target.call(call_method, [radius_inner, radius_outer, render_dist]) + var parent = input_parent.selected -1 + emit_signal("changed", radius_inner, radius_outer, render_dist, parent, type) diff --git a/scenes/editor/scripts/inspector_panel_transform.gd b/scenes/editor/scripts/inspector_panel_transform.gd index 0ccdff2..ad93aa5 100644 --- a/scenes/editor/scripts/inspector_panel_transform.gd +++ b/scenes/editor/scripts/inspector_panel_transform.gd @@ -1,47 +1,69 @@ extends "res://scenes/editor/scripts/inspector_panel.gd" -var call_target -var call_method +var input_position +var input_rotation +var input_scale -var input_x -var input_y -var input_z +signal changed(origin, rotation, scale) -# Param 1: String array of flag names. ["flagname0", "flagname1", "flagname2", ...] -# Param 2: Target node of method call. -# Param 3: Name of method. -# Called when a value is changed: target.method(set: bool, flag_id: int) -func _create_menu(target, method): - var pos_label = Label.new() - pos_label.text = "Position XYZ:" - vbox_contents.add_child(pos_label) - - var hbox = HBoxContainer.new() +func _create_menu(disable_basis:bool=false): + var hbox = GridContainer.new() + hbox.columns = 2 vbox_contents.add_child(hbox) - input_x = TextEdit.new() - input_y = TextEdit.new() - input_z = TextEdit.new() - input_x.rect_min_size.y = Globals.UI_INSPECTOR_TEXT_MINHEIGHT - input_y.rect_min_size.y = Globals.UI_INSPECTOR_TEXT_MINHEIGHT - input_z.rect_min_size.y = Globals.UI_INSPECTOR_TEXT_MINHEIGHT - input_x.size_flags_horizontal = 3 # Expand - input_y.size_flags_horizontal = 3 - input_z.size_flags_horizontal = 3 - hbox.add_child(input_x) - hbox.add_child(input_y) - hbox.add_child(input_z) - input_x.connect("text_changed", self, "_set_transform") - input_y.connect("text_changed", self, "_set_transform") - input_z.connect("text_changed", self, "_set_transform") - call_target = target - call_method = method + input_position = create_option_vec3() + input_rotation = create_option_vec3() + input_scale = create_option_vec3() -func _set_transform(): - var origin = Vector3(int(input_x.text),int(input_y.text),int(input_z.text)) - call_target.call(call_method, origin) + hbox.add_child(create_option_title("Position")) + hbox.add_child(input_position) + if not disable_basis: + hbox.add_child(create_option_title("Rotation")) + hbox.add_child(input_rotation) + hbox.add_child(create_option_title("Scale")) + hbox.add_child(input_scale) + + input_position.get_node("editx").connect("text_changed", self, "_set_transform") + input_position.get_node("edity").connect("text_changed", self, "_set_transform") + input_position.get_node("editz").connect("text_changed", self, "_set_transform") + input_rotation.get_node("editx").connect("text_changed", self, "_set_transform") + input_rotation.get_node("edity").connect("text_changed", self, "_set_transform") + input_rotation.get_node("editz").connect("text_changed", self, "_set_transform") + input_scale.get_node("editx").connect("text_changed", self, "_set_transform") + input_scale.get_node("edity").connect("text_changed", self, "_set_transform") + input_scale.get_node("editz").connect("text_changed", self, "_set_transform") + + vbox_contents.add_child(create_option_tooltip("I haven't bothered to make the gizmo work yet. You have to type the position manually.")) + +func _set_transform(_t): + var origin = Vector3( + float(input_position.get_node("editx").text), + float(input_position.get_node("edity").text), + float(input_position.get_node("editz").text)) + var rotation = Vector3( + float(input_rotation.get_node("editx").text), + float(input_rotation.get_node("edity").text), + float(input_rotation.get_node("editz").text)) + var scale = Vector3( + float(input_scale.get_node("editx").text), + float(input_scale.get_node("edity").text), + float(input_scale.get_node("editz").text)) + emit_signal("changed", origin, rotation, scale) -func _update_transform(origin): - input_x.text = str(origin.x) - input_y.text = str(origin.y) - input_z.text = str(origin.z) +func _update_transform(origin, rotation, scale): + input_position.get_node("editx").text = str(origin.x) + input_position.get_node("edity").text = str(origin.y) + input_position.get_node("editz").text = str(origin.z) + input_rotation.get_node("editx").text = str(rotation.x) + input_rotation.get_node("edity").text = str(rotation.y) + input_rotation.get_node("editz").text = str(rotation.z) + input_scale.get_node("editx").text = str(scale.x) + input_scale.get_node("edity").text = str(scale.y) + input_scale.get_node("editz").text = str(scale.z) + + + + + + + diff --git a/scenes/editor/scripts/lightsource.gd b/scenes/editor/scripts/lightsource.gd index fa69386..3b0376c 100644 --- a/scenes/editor/scripts/lightsource.gd +++ b/scenes/editor/scripts/lightsource.gd @@ -1,47 +1,33 @@ extends Spatial - +var uid = "" var icon = preload("res://ui/icon_lightbulb.png") var icon_scale = 16 +var highlight_model + +const MDL_ARROW = preload("res://scenes/editor/mdl_arrow.tscn") + var flags = [ - false, - false, - false, - false, - true, - true, - true, - true, - false, - false, - false, - false, - true, - true, - true, - true, - false, - false, - false, - false, - true, - true, - true, - true, - false, - false, - false, - false, - true, - true, - true, - true, + true, #flag_0 + true, #flag_1 + true, #flag_2 + true, #flag_3 + true, #flag_4 + true, #flag_8 + true, #flag_10 + true, #shadow_character + true, #shadow_level + true, #light_character + true, #light_level + true, #flag_22 ] var color: Color var unk10: int +var type: int var radius_inner: float var radius_outer: float var render_dist: float +var parent: int var child_light: OmniLight var child_icon: Sprite3D @@ -76,6 +62,13 @@ func _ready(): _update() + highlight_model = Spatial.new() + add_child(highlight_model) + highlight_model.add_child(MDL_ARROW.instance()) + +func _set_basis(basis: Basis): + global_transform.basis = basis# Basis(Vector3(0,1,0),Vector3(0,0,1),Vector3(1,0,0)) + func _set_highlight(_temp): pass @@ -92,4 +85,4 @@ func _input_event(_camera, event, _click_position, _click_normal, _shape_idx): if event is InputEventMouseButton: if event.button_index == BUTTON_LEFT and event.is_pressed(): print("clicked ", name) - ChunkEditor._select(self) + ChunkEditor._select(uid) diff --git a/scenes/editor/scripts/menu_selected_cityobj.gd b/scenes/editor/scripts/menu_selected_cityobj.gd index 9f1d018..5e1561f 100644 --- a/scenes/editor/scripts/menu_selected_cityobj.gd +++ b/scenes/editor/scripts/menu_selected_cityobj.gd @@ -2,39 +2,40 @@ extends Control var target -onready var namelabel = $vbox/name -onready var input_posx = $vbox/pos_inputs/input_x -onready var input_posy = $vbox/pos_inputs/input_y -onready var input_posz = $vbox/pos_inputs/input_z -onready var input_mdl = $vbox/mdl_inputs/input_mdl -onready var input_mdl_ok = $vbox/mdl_inputs/input_mdl_ok +onready var input_mdl = $mdl_inputs/input_mdl +onready var input_mdl_ok = $mdl_inputs/input_mdl_ok +var panel_transform +var namelabel func _ready(): ChunkEditor.menu_selected_cityobj = self hide() - - input_posx.connect("text_changed", self, "_update_pos") - input_posy.connect("text_changed", self, "_update_pos") - input_posz.connect("text_changed", self, "_update_pos") input_mdl_ok.connect("pressed", self, "_update_mdl") + namelabel = Label.new() + add_child(namelabel) + + panel_transform = PanelContainer.new() + panel_transform.set_script(load("res://scenes/editor/scripts/inspector_panel_transform.gd")) + panel_transform.name = "Transform" + add_child(panel_transform) + panel_transform._create_menu() + panel_transform.connect("changed", self, "_update_transform") func _select(cityobj): target = cityobj namelabel.text = target.name - input_posx.text = str(target.translation.x) - input_posy.text = str(target.translation.y) - input_posz.text = str(target.translation.z) input_mdl.text = str(target.rendermodel_id) -func _update_pos(): - var deltapos = Vector3( - float(input_posx.text), - float(input_posy.text), - float(input_posz.text) - ) - target.translation = deltapos + panel_transform._update_transform(target.transform.origin, target.rotation_degrees, target.scale) + + +func _update_transform(origin:Vector3, rotation:Vector3, scale:Vector3): + target.transform.origin = origin + target.rotation_degrees = rotation + target.scale = scale + #target.transform.basis = Basis(rotation).scaled(scale) func _update_mdl(): var id = int(input_mdl.text) diff --git a/scenes/editor/scripts/menu_selected_light.gd b/scenes/editor/scripts/menu_selected_light.gd index 317e344..7a5a27a 100644 --- a/scenes/editor/scripts/menu_selected_light.gd +++ b/scenes/editor/scripts/menu_selected_light.gd @@ -8,38 +8,18 @@ var panel_transform var panel_properties var flag_names = [ - "flag00", - "flag01", - "flag02", - "flag03", - "flag04", - "flag05", - "flag06", - "flag07", - "flag08", - "flag09", - "flag0a", - "flag0b", - "flag0c", - "flag0d", - "flag0e", - "flag0f", - "flag10", - "flag11", - "cast_shadows_on_world", - "cast_shadows_on_people", - "flag14", - "flag15", - "flag16", - "flag17", - "flag18", - "flag19", - "flag1a", - "flag1b", - "flag1c", - "flag1d", - "flag1e", - "flag1f" + "flag_0", + "flag_1", + "flag_2", + "flag_3", + "flag_4", + "flag_8", + "flag_10", + "shadow_character", + "shadow_level", + "light_character", + "light_level", + "flag_22", ] func _ready(): @@ -65,33 +45,41 @@ func _ready(): panel_transform.set_script(load("res://scenes/editor/scripts/inspector_panel_transform.gd")) panel_transform.name = "Transform" add_child(panel_transform) - panel_transform._create_menu(self, "_update_transform") + panel_transform._create_menu() + panel_transform.connect("changed", self, "_update_transform") panel_properties = PanelContainer.new() panel_properties.set_script(load("res://scenes/editor/scripts/inspector_panel_properties.gd")) panel_properties.name = "Properties" add_child(panel_properties) - panel_properties._create_menu(self, "_update_properties") + panel_properties._create_menu() + panel_properties.connect("changed", self, "_update_properties") + func _select(cityobj): target = cityobj panel_flags._update_flags(target.flags) panel_color._update_color(target.color) - panel_transform._update_transform(target.transform.origin) - panel_properties._update_properties(target.radius_inner, target.radius_outer, target.render_dist) + panel_transform._update_transform(target.transform.origin, target.rotation_degrees, target.scale) + panel_properties._update_properties(target.radius_inner, target.radius_outer, target.render_dist, target.parent, target.type) func _update_flag(set, id): target.flags[id] = set -func _update_transform(origin): +func _update_transform(origin:Vector3, rotation:Vector3, scale:Vector3): target.transform.origin = origin + target.rotation_degrees = rotation + target.scale = scale + #target.transform.basis = Basis(rotation).scaled(scale) func _update_color(color: Color): target._change_color(color) -func _update_properties(radius_inner, radius_outer, render_dist): +func _update_properties(radius_inner, radius_outer, render_dist, parent, type): target.radius_inner = radius_inner target.radius_outer = radius_outer target.render_dist = render_dist + target.parent = parent + target.type = type diff --git a/scenes/editor/scripts/menu_selector.gd b/scenes/editor/scripts/menu_selector.gd index b8ecd9d..4065c19 100644 --- a/scenes/editor/scripts/menu_selector.gd +++ b/scenes/editor/scripts/menu_selector.gd @@ -1,65 +1,142 @@ +""" + Selector + + This creates the selector panel on the left. + Menu structure for node selection: + Selector + TabContainer + ScrollCont > GridCont + Button + Button + ScrollCont > GridCont + Button + ... + ... + where each button represents an object loaded from chunk. + + Methods indended for external code: + _select(uid) + _unselect() + + How selection works: + - 1: A button in selector is pressed, selector calls ChunkEditor._select() -OR- Something else calls ChunkEditor._select() + - 2: ChunkEditor calls selector._select() to update status of this menu + + Dependencies: + - Globals.loaded_cityobjectso + - Globals.loaded_lights + - uid in object scripts + - ChunkEditor._select(uid) +""" + extends PanelContainer -onready var tree = $Tree onready var chunk_root = $"/root/main/chunk" -var chunk_object_dict = {} +var button_uid = {} +var tabs +var cobj_container +var light_container +var selected + +const STYLE_SELECTED = preload("res://ui/stylebox_selected_text.tres") func _ready(): ChunkEditor.menu_selector = self - _update() + tabs = TabContainer.new() + var cobj_scroll = ScrollContainer.new() + cobj_container = GridContainer.new() + var lights_scroll = ScrollContainer.new() + light_container = GridContainer.new() + + add_child(tabs) + tabs.add_child(cobj_scroll) + tabs.add_child(lights_scroll) + cobj_scroll.add_child(cobj_container) + lights_scroll.add_child(light_container) + + cobj_scroll.name = "cityobjects" + lights_scroll.name = "lights" + cobj_container.columns = 2 + light_container.columns = 2 - tree.connect("item_activated", self, "_on_tree_selected") - tree.hide_root = true + _update() -# Called by ChunkEditor -func _on_select(target: Spatial): - chunk_object_dict[target.get_path()].select(0) +# Update selected menu item. Called by ChunkEditor. +func _select(uid): + # Set selected + _unselect() + selected = button_uid[uid] + selected.pressed = true + selected.add_stylebox_override("pressed", STYLE_SELECTED) + + # Switch tab, scroll position to selected button + var scrollcont = selected.get_parent().get_parent() + if selected.rect_global_position.y < 80 or selected.rect_global_position.y > get_viewport_rect().size.y-30: + var scrollpos = selected.rect_position.y + scrollcont.scroll_vertical = scrollpos + var tab = scrollcont.get_index() + tabs.current_tab = tab -func _on_tree_selected(): - var selected_name = tree.get_selected().get_text(0) - var parent_name = tree.get_selected().get_parent().get_text(0) - match parent_name: - "chunk_root": - pass - "city objects": - var target = get_node("/root/main/chunk/cityobjects/" + selected_name) - ChunkEditor._select(target) - ChunkEditor._focus() - "light sources": - var target = get_node("/root/main/chunk/lights/" + selected_name) - ChunkEditor._select(target) - ChunkEditor._focus() +func _unselect(): + if selected: + selected.pressed = false + selected.add_stylebox_override("pressed", null) + +# Buttons call this +func _select_from_self(uid): + ChunkEditor._select(uid) + ChunkEditor._focus() func _update(): - tree.clear() - chunk_object_dict.clear() - var treeitem_root = tree.create_item() - treeitem_root.set_text(0, "chunk_root") - - if !ChunkEditor.is_chunk_loaded: - var treeitem_placeholder = tree.create_item() - treeitem_placeholder.set_text(0, "No chunk loaded.") - treeitem_placeholder.set_selectable(0, false) - return - - var treeitem_cityobjects = tree.create_item() - treeitem_cityobjects.set_text(0, "city objects") - var treeitem_lights = tree.create_item() - treeitem_lights.set_text(0, "light sources") + button_uid.clear() + for child in cobj_container.get_children(): + child.queue_free() + for child in light_container.get_children(): + child.queue_free() - var cobj_root = chunk_root.get_node("cityobjects") - for cobj in cobj_root.get_children(): - var treeitem = tree.create_item(treeitem_cityobjects) - treeitem.set_text(0, cobj.name) + for i in Globals.loaded_cityobjects.size(): + var cobj = Globals.loaded_cityobjects[i] + var button = create_objectbutton(cobj) if cobj.is_rendermodel_bad: - treeitem.set_custom_color(0, Color.maroon) - - chunk_object_dict[cobj.get_path()] = treeitem - - var light_root = chunk_root.get_node("lights") - for light in light_root.get_children(): - var treeitem = tree.create_item(treeitem_lights) - treeitem.set_text(0, light.name) - - chunk_object_dict[light.get_path()] = treeitem + button.add_color_override("font_color", Color.maroon) + cobj_container.add_child(create_lineno(i)) + cobj_container.add_child(button) + + for i in Globals.loaded_lights.size(): + var light = Globals.loaded_lights[i] + light_container.add_child(create_lineno(i)) + light_container.add_child(create_objectbutton(light)) + + + # Labels for if category is empty + if Globals.loaded_cityobjects.size() == 0: + cobj_container.add_child(create_nonelabel()) + if Globals.loaded_lights.size() == 0: + light_container.add_child(create_nonelabel()) + +# Returns a Button that selects an an object +func create_objectbutton(obj): + var button = Button.new() + button.text = obj.name + button.align =Button.ALIGN_LEFT + button.flat = true + button.toggle_mode = true + button.add_color_override("font_color_pressed", Color.lightsteelblue) + button_uid[obj.uid] = button + button.connect("pressed", self, "_select_from_self", [obj.uid]) + return button + +# Returns a Label for line numbers +func create_lineno(i): + var label = Label.new() + label.text = str(i) + label.align = Label.ALIGN_RIGHT + label.add_color_override("font_color", Color.slategray) + return label + +# Returns a placeholder label +func create_nonelabel(): + var label = Label.new() + label.text = "None loaded." + return label diff --git a/scenes/editor/tex_model_placeholder.png b/scenes/editor/tex_model_placeholder.png index f9cf4b2..04480c7 100644 Binary files a/scenes/editor/tex_model_placeholder.png and b/scenes/editor/tex_model_placeholder.png differ diff --git a/scenes/editor/tex_model_placeholder.xcf b/scenes/editor/tex_model_placeholder.xcf index 9164c7b..239160b 100644 Binary files a/scenes/editor/tex_model_placeholder.xcf and b/scenes/editor/tex_model_placeholder.xcf differ diff --git a/scenes/main.tscn b/scenes/main.tscn index e7d46bb..07c9e2a 100644 --- a/scenes/main.tscn +++ b/scenes/main.tscn @@ -241,12 +241,6 @@ margin_bottom = 1040.0 rect_min_size = Vector2( 256, 0 ) script = ExtResource( 10 ) -[node name="Tree" type="Tree" parent="ui/hbox/selector"] -margin_left = 4.0 -margin_top = 4.0 -margin_right = 252.0 -margin_bottom = 1036.0 - [node name="spacer" type="Control" parent="ui/hbox"] margin_left = 260.0 margin_right = 1564.0 @@ -254,6 +248,33 @@ margin_bottom = 1040.0 mouse_filter = 2 size_flags_horizontal = 3 +[node name="Label" type="Label" parent="ui/hbox/spacer"] +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_left = -152.0 +margin_top = -19.0 +margin_bottom = -1.0 +text = "Press F to focus on selected" + +[node name="spacer" type="Control" parent="ui/hbox/spacer"] +margin_left = 260.0 +margin_right = 1564.0 +margin_bottom = 1040.0 +mouse_filter = 2 +size_flags_horizontal = 3 + +[node name="Label" type="Label" parent="ui/hbox/spacer/spacer"] +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_left = -152.0 +margin_top = -19.0 +margin_bottom = -1.0 +text = "Press F to focus on selected" + [node name="inspector" type="PanelContainer" parent="ui/hbox"] margin_left = 1568.0 margin_right = 1920.0 @@ -268,7 +289,7 @@ margin_bottom = 1036.0 [node name="vbox" type="VBoxContainer" parent="ui/hbox/inspector/ScrollContainer"] margin_right = 344.0 -margin_bottom = 30.0 +margin_bottom = 56.0 size_flags_horizontal = 3 [node name="menu_selected_title" type="PanelContainer" parent="ui/hbox/inspector/ScrollContainer/vbox"] @@ -283,115 +304,40 @@ margin_right = 340.0 margin_bottom = 22.0 text = "Selected type: non" -[node name="menu_selected_cityobj" type="PanelContainer" parent="ui/hbox/inspector/ScrollContainer/vbox"] -visible = false +[node name="menu_selected_cityobj" type="VBoxContainer" parent="ui/hbox/inspector/ScrollContainer/vbox"] margin_top = 30.0 -margin_right = 332.0 -margin_bottom = 194.0 +margin_right = 344.0 +margin_bottom = 52.0 script = ExtResource( 4 ) -[node name="vbox" type="VBoxContainer" parent="ui/hbox/inspector/ScrollContainer/vbox/menu_selected_cityobj"] -margin_left = 4.0 -margin_top = 4.0 -margin_right = 328.0 -margin_bottom = 160.0 - -[node name="name" type="Label" parent="ui/hbox/inspector/ScrollContainer/vbox/menu_selected_cityobj/vbox"] -margin_right = 324.0 -margin_bottom = 18.0 -text = "name" - -[node name="pos_title" type="HBoxContainer" parent="ui/hbox/inspector/ScrollContainer/vbox/menu_selected_cityobj/vbox"] -margin_top = 22.0 -margin_right = 324.0 -margin_bottom = 40.0 - -[node name="Label" type="Label" parent="ui/hbox/inspector/ScrollContainer/vbox/menu_selected_cityobj/vbox/pos_title"] -margin_right = 105.0 -margin_bottom = 18.0 -size_flags_horizontal = 3 -size_flags_vertical = 6 -text = "X" - -[node name="Label2" type="Label" parent="ui/hbox/inspector/ScrollContainer/vbox/menu_selected_cityobj/vbox/pos_title"] -margin_left = 109.0 -margin_right = 214.0 -margin_bottom = 18.0 -size_flags_horizontal = 3 -size_flags_vertical = 6 -text = "Y" - -[node name="Label3" type="Label" parent="ui/hbox/inspector/ScrollContainer/vbox/menu_selected_cityobj/vbox/pos_title"] -margin_left = 218.0 -margin_right = 324.0 -margin_bottom = 18.0 -size_flags_horizontal = 3 -size_flags_vertical = 6 -text = "Z" - -[node name="pos_inputs" type="HBoxContainer" parent="ui/hbox/inspector/ScrollContainer/vbox/menu_selected_cityobj/vbox"] -margin_top = 44.0 -margin_right = 324.0 -margin_bottom = 66.0 -rect_min_size = Vector2( 0, 20 ) - -[node name="input_x" type="TextEdit" parent="ui/hbox/inspector/ScrollContainer/vbox/menu_selected_cityobj/vbox/pos_inputs"] -margin_right = 105.0 -margin_bottom = 22.0 -rect_min_size = Vector2( 0, 22 ) -size_flags_horizontal = 3 - -[node name="input_y" type="TextEdit" parent="ui/hbox/inspector/ScrollContainer/vbox/menu_selected_cityobj/vbox/pos_inputs"] -margin_left = 109.0 -margin_right = 214.0 +[node name="mdl_inputs" type="HBoxContainer" parent="ui/hbox/inspector/ScrollContainer/vbox/menu_selected_cityobj"] +margin_right = 344.0 margin_bottom = 22.0 -rect_min_size = Vector2( 0, 22 ) -size_flags_horizontal = 3 -[node name="input_z" type="TextEdit" parent="ui/hbox/inspector/ScrollContainer/vbox/menu_selected_cityobj/vbox/pos_inputs"] -margin_left = 218.0 -margin_right = 324.0 -margin_bottom = 22.0 -rect_min_size = Vector2( 0, 22 ) -size_flags_horizontal = 3 - -[node name="Label" type="Label" parent="ui/hbox/inspector/ScrollContainer/vbox/menu_selected_cityobj/vbox"] -margin_top = 70.0 -margin_right = 324.0 -margin_bottom = 130.0 -text = "I haven't bothered to make the gizmo work yet. You have to type the position manually. -" -autowrap = true - -[node name="mdl_inputs" type="HBoxContainer" parent="ui/hbox/inspector/ScrollContainer/vbox/menu_selected_cityobj/vbox"] -margin_top = 134.0 -margin_right = 324.0 -margin_bottom = 156.0 - -[node name="Label" type="Label" parent="ui/hbox/inspector/ScrollContainer/vbox/menu_selected_cityobj/vbox/mdl_inputs"] +[node name="Label" type="Label" parent="ui/hbox/inspector/ScrollContainer/vbox/menu_selected_cityobj/mdl_inputs"] margin_top = 2.0 -margin_right = 131.0 +margin_right = 141.0 margin_bottom = 20.0 size_flags_horizontal = 3 text = "Model id:" -[node name="input_mdl" type="TextEdit" parent="ui/hbox/inspector/ScrollContainer/vbox/menu_selected_cityobj/vbox/mdl_inputs"] -margin_left = 135.0 -margin_right = 267.0 +[node name="input_mdl" type="TextEdit" parent="ui/hbox/inspector/ScrollContainer/vbox/menu_selected_cityobj/mdl_inputs"] +margin_left = 145.0 +margin_right = 287.0 margin_bottom = 22.0 rect_min_size = Vector2( 0, 22 ) size_flags_horizontal = 3 -[node name="input_mdl_ok" type="Button" parent="ui/hbox/inspector/ScrollContainer/vbox/menu_selected_cityobj/vbox/mdl_inputs"] -margin_left = 271.0 -margin_right = 324.0 +[node name="input_mdl_ok" type="Button" parent="ui/hbox/inspector/ScrollContainer/vbox/menu_selected_cityobj/mdl_inputs"] +margin_left = 291.0 +margin_right = 344.0 margin_bottom = 22.0 text = "Change" [node name="menu_selected_light" type="VBoxContainer" parent="ui/hbox/inspector/ScrollContainer/vbox"] -margin_top = 30.0 +margin_top = 56.0 margin_right = 344.0 -margin_bottom = 30.0 +margin_bottom = 56.0 script = ExtResource( 9 ) [node name="env" type="Spatial" parent="."] diff --git a/sr2_ksy/Sr2CpuChunkPc.cs b/sr2_ksy/Sr2ChunkPc.cs similarity index 57% rename from sr2_ksy/Sr2CpuChunkPc.cs rename to sr2_ksy/Sr2ChunkPc.cs index d59eea7..b83b86a 100644 --- a/sr2_ksy/Sr2CpuChunkPc.cs +++ b/sr2_ksy/Sr2ChunkPc.cs @@ -4,14 +4,25 @@ namespace Kaitai { - public partial class Sr2CpuChunkPc : KaitaiStruct + + /// + /// MIT License + /// Copyright (c) 2022 Möyh Mäyhem + /// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + /// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + /// + /// + /// The chunk parser is incomplete, but it gets pretty far. + /// + public partial class Sr2ChunkPc : KaitaiStruct { - public static Sr2CpuChunkPc FromFile(string fileName) + public static Sr2ChunkPc FromFile(string fileName) { - return new Sr2CpuChunkPc(new KaitaiStream(fileName)); + return new Sr2ChunkPc(new KaitaiStream(fileName)); } - public Sr2CpuChunkPc(KaitaiStream p__io, KaitaiStruct p__parent = null, Sr2CpuChunkPc p__root = null) : base(p__io) + public Sr2ChunkPc(KaitaiStream p__io, KaitaiStruct p__parent = null, Sr2ChunkPc p__root = null) : base(p__io) { m_parent = p__parent; m_root = p__root ?? this; @@ -19,85 +30,113 @@ public Sr2CpuChunkPc(KaitaiStream p__io, KaitaiStruct p__parent = null, Sr2CpuCh } private void _read() { - __unnamed0 = m_io.ReadBytes(4); - if (!((KaitaiStream.ByteArrayCompare(Unnamed_0, new byte[] { 18, 202, 202, 187 }) == 0))) + _magic = m_io.ReadBytes(4); + if (!((KaitaiStream.ByteArrayCompare(Magic, new byte[] { 18, 202, 202, 187 }) == 0))) { - throw new ValidationNotEqualError(new byte[] { 18, 202, 202, 187 }, Unnamed_0, M_Io, "/seq/0"); + throw new ValidationNotEqualError(new byte[] { 18, 202, 202, 187 }, Magic, M_Io, "/seq/0"); } _version = m_io.ReadBytes(4); if (!((KaitaiStream.ByteArrayCompare(Version, new byte[] { 121, 0, 0, 0 }) == 0))) { throw new ValidationNotEqualError(new byte[] { 121, 0, 0, 0 }, Version, M_Io, "/seq/1"); } - _header0x8 = m_io.ReadU4le(); + __unnamed2 = m_io.ReadBytes(4); + if (!((KaitaiStream.ByteArrayCompare(Unnamed_2, new byte[] { 14, 0, 0, 0 }) == 0))) + { + throw new ValidationNotEqualError(new byte[] { 14, 0, 0, 0 }, Unnamed_2, M_Io, "/seq/2"); + } _meshlibrary = m_io.ReadBytes(4); _header0x10 = m_io.ReadU4le(); - _header0x14 = m_io.ReadBytes(128); - _cityobjectCount = m_io.ReadU4le(); - _unknown23Count = m_io.ReadU4le(); + _header0x14 = m_io.ReadBytes(24); + __unnamed6 = m_io.ReadBytes(8); + if (!((KaitaiStream.ByteArrayCompare(Unnamed_6, new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }) == 0))) + { + throw new ValidationNotEqualError(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, Unnamed_6, M_Io, "/seq/6"); + } + _headerXx = m_io.ReadBytes(40); + __unnamed8 = m_io.ReadBytes(4); + if (!((KaitaiStream.ByteArrayCompare(Unnamed_8, new byte[] { 0, 0, 0, 0 }) == 0))) + { + throw new ValidationNotEqualError(new byte[] { 0, 0, 0, 0 }, Unnamed_8, M_Io, "/seq/8"); + } + _headerXxx = m_io.ReadBytes(20); + __unnamed10 = m_io.ReadBytes(4); + if (!((KaitaiStream.ByteArrayCompare(Unnamed_10, new byte[] { 0, 0, 0, 0 }) == 0))) + { + throw new ValidationNotEqualError(new byte[] { 0, 0, 0, 0 }, Unnamed_10, M_Io, "/seq/10"); + } + _headerXxxx = m_io.ReadBytes(20); + _lenGChunk1 = m_io.ReadU4le(); + _lenGChunk2 = m_io.ReadU4le(); + _numCityobjects = m_io.ReadU4le(); + _numUnknown23 = m_io.ReadU4le(); _header0x9c = m_io.ReadU4le(); _header0xa0 = m_io.ReadU4le(); - _header0xa4 = m_io.ReadBytes(16); - _meshMoverCount = m_io.ReadU4le(); - _unknown27Count = m_io.ReadU4le(); - _unknown28Count = m_io.ReadU4le(); - _unknown29Count = m_io.ReadU4le(); - _unknown30Count = m_io.ReadU4le(); - _unknown31Count = m_io.ReadU4le(); + __unnamed18 = m_io.ReadBytes(16); + if (!((KaitaiStream.ByteArrayCompare(Unnamed_18, new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }) == 0))) + { + throw new ValidationNotEqualError(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, Unnamed_18, M_Io, "/seq/18"); + } + _numMeshMovers = m_io.ReadU4le(); + _numUnknown27 = m_io.ReadU4le(); + _numUnknown28 = m_io.ReadU4le(); + _numUnknown29 = m_io.ReadU4le(); + _numUnknown30 = m_io.ReadU4le(); + _numUnknown31 = m_io.ReadU4le(); _header0xcc = m_io.ReadU4le(); _numUnknown26 = m_io.ReadU4le(); - _headerWorldpos0X = m_io.ReadF4le(); - _headerWorldpos0Y = m_io.ReadF4le(); - _headerWorldpos0Z = m_io.ReadF4le(); - _header0xe0 = m_io.ReadF4le(); - _header0xe4 = m_io.ReadF4le(); - _header0xe8 = m_io.ReadF4le(); + _worldMinX = m_io.ReadF4le(); + _worldMinY = m_io.ReadF4le(); + _worldMinZ = m_io.ReadF4le(); + _worldMaxX = m_io.ReadF4le(); + _worldMaxY = m_io.ReadF4le(); + _worldMaxZ = m_io.ReadF4le(); _header0xec = m_io.ReadF4le(); - _header0xf0 = m_io.ReadU4le(); - __unnamed27 = m_io.ReadBytes(12); - if (!((KaitaiStream.ByteArrayCompare(Unnamed_27, new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }) == 0))) + _numUnknown32 = m_io.ReadU4le(); + __unnamed35 = m_io.ReadBytes(12); + if (!((KaitaiStream.ByteArrayCompare(Unnamed_35, new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }) == 0))) { - throw new ValidationNotEqualError(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, Unnamed_27, M_Io, "/seq/27"); + throw new ValidationNotEqualError(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, Unnamed_35, M_Io, "/seq/35"); } _numTextureNames = m_io.ReadU4le(); - __unnamed29 = m_io.ReadBytes((NumTextureNames * 4)); + __unnamed37 = m_io.ReadBytes((NumTextureNames * 4)); _textureNames = new List(); for (var i = 0; i < NumTextureNames; i++) { _textureNames.Add(System.Text.Encoding.GetEncoding("utf-8").GetString(m_io.ReadBytesTerm(0, false, true, true))); } - __unnamed31 = new Align(16, m_io, this, m_root); + __unnamed39 = new Align(16, m_io, this, m_root); _numRendermodels = m_io.ReadU4le(); _numCityobjectParts = m_io.ReadU4le(); _modelCount = m_io.ReadU4le(); _numUnknown3s = m_io.ReadU4le(); _numUnknown4s = m_io.ReadU4le(); - __unnamed37 = new Align(16, m_io, this, m_root); + __unnamed45 = new Align(16, m_io, this, m_root); _rendermodelUnk0s = new List(); for (var i = 0; i < NumRendermodels; i++) { _rendermodelUnk0s.Add(new RendermodelUnk0(m_io, this, m_root)); } - __unnamed39 = new Align(16, m_io, this, m_root); + __unnamed47 = new Align(16, m_io, this, m_root); _cityobjectPartsOffset = new Offset(M_Io.Pos, m_io, this, m_root); _cityobjectParts = new List(); for (var i = 0; i < NumCityobjectParts; i++) { _cityobjectParts.Add(new CityobjectPart(m_io, this, m_root)); } - __unnamed42 = new Align(16, m_io, this, m_root); + __unnamed50 = new Align(16, m_io, this, m_root); _unknown3s = new List(); for (var i = 0; i < NumUnknown3s; i++) { _unknown3s.Add(new Unknown3(m_io, this, m_root)); } - __unnamed44 = new Align(16, m_io, this, m_root); + __unnamed52 = new Align(16, m_io, this, m_root); _unknown4s = new List(); for (var i = 0; i < NumUnknown4s; i++) { _unknown4s.Add(new Unknown4(m_io, this, m_root)); } - __unnamed46 = new Align(16, m_io, this, m_root); + __unnamed54 = new Align(16, m_io, this, m_root); _numUnkWorldpositions = m_io.ReadU4le(); _unkWorldpositions = new List(); for (var i = 0; i < NumUnkWorldpositions; i++) @@ -122,14 +161,14 @@ private void _read() { _unknown8s.Add(m_io.ReadBytes(12)); } - __unnamed55 = new Align(16, m_io, this, m_root); + __unnamed63 = new Align(16, m_io, this, m_root); _lenHavokMopp = m_io.ReadU4le(); - __unnamed57 = new Align(16, m_io, this, m_root); + __unnamed65 = new Align(16, m_io, this, m_root); _havokMopp = m_io.ReadBytes(LenHavokMopp); - __unnamed59 = new Align(4, m_io, this, m_root); + __unnamed67 = new Align(4, m_io, this, m_root); _unknown10min = new Vec3(m_io, this, m_root); _unknown10max = new Vec3(m_io, this, m_root); - __unnamed62 = new Align(16, m_io, this, m_root); + __unnamed70 = new Align(16, m_io, this, m_root); _modelHeaders = new List(); for (var i = 0; i < ModelCount; i++) { @@ -140,17 +179,17 @@ private void _read() { _vertHeaders.Add(new VertHeaderCont(ModelHeaders[i].VertHeaderCount, m_io, this, m_root)); } - __unnamed65 = new Align(16, m_io, this, m_root); + __unnamed73 = new Align(16, m_io, this, m_root); _physModels = new List(); for (var i = 0; i < ModelCount; i++) { - _physModels.Add(new PhysModelBuffer(ModelHeaders[i].Type == 7, ModelHeaders[i].IndexCount, VertHeaders[i].VertHeader[0].VertCount, m_io, this, m_root)); + _physModels.Add(new PhysModelBuffer(ModelHeaders[i].Type == 7, ModelHeaders[i].NumIndices, VertHeaders[i].VertHeader[0].NumVertices, m_io, this, m_root)); } _numMaterials = m_io.ReadU4le(); - __unnamed68 = new Align(16, m_io, this, m_root); - _matShaderParamCount = m_io.ReadU4le(); + __unnamed76 = new Align(16, m_io, this, m_root); + _numMatShaderParams = m_io.ReadU4le(); _padMat = m_io.ReadBytes(8); - _matUnknown3Count = m_io.ReadU4le(); + _numMatUnknown3s = m_io.ReadU4le(); _matUnknown1 = m_io.ReadU4le(); _materials = new List(); for (var i = 0; i < NumMaterials; i++) @@ -167,9 +206,9 @@ private void _read() { _matUnknown2.Add(m_io.ReadBytes(16)); } - __unnamed76 = new Align(16, m_io, this, m_root); + __unnamed84 = new Align(16, m_io, this, m_root); _matShaderParams = new List(); - for (var i = 0; i < MatShaderParamCount; i++) + for (var i = 0; i < NumMatShaderParams; i++) { _matShaderParams.Add(m_io.ReadF4le()); } @@ -179,12 +218,12 @@ private void _read() _matTextures.Add(new MatTexCont(m_io, this, m_root)); } _matUnknown3s = new List(); - for (var i = 0; i < MatUnknown3Count; i++) + for (var i = 0; i < NumMatUnknown3s; i++) { _matUnknown3s.Add(new MatUnknown3(m_io, this, m_root)); } _matUnknown3Unk2 = new List(); - for (var i = 0; i < MatUnknown3Count; i++) + for (var i = 0; i < NumMatUnknown3s; i++) { _matUnknown3Unk2.Add(m_io.ReadBytes((MatUnknown3s[i].Unk2Count * 4))); } @@ -194,146 +233,163 @@ private void _read() _rendermodels.Add(new Rendermodel(m_io, this, m_root)); } _cityobjects = new List(); - for (var i = 0; i < CityobjectCount; i++) + for (var i = 0; i < NumCityobjects; i++) { _cityobjects.Add(new Cityobject(m_io, this, m_root)); } _cityobjectNames = new List(); - for (var i = 0; i < CityobjectCount; i++) + for (var i = 0; i < NumCityobjects; i++) { _cityobjectNames.Add(System.Text.Encoding.GetEncoding("utf-8").GetString(m_io.ReadBytesTerm(0, false, true, true))); } - __unnamed84 = new Align(16, m_io, this, m_root); - _unknownNamesLen = m_io.ReadU4le(); - _unknownNames = m_io.ReadBytes(UnknownNamesLen); - __unnamed87 = new Align(16, m_io, this, m_root); - _unknown13Count = m_io.ReadU4le(); + __unnamed92 = new Align(16, m_io, this, m_root); + _lenUnknownNames = m_io.ReadU4le(); + _unknownNames = m_io.ReadBytes(LenUnknownNames); + __unnamed95 = new Align(16, m_io, this, m_root); + _numUnknown13 = m_io.ReadU4le(); _unknown13 = new List(); - for (var i = 0; i < Unknown13Count; i++) + for (var i = 0; i < NumUnknown13; i++) { _unknown13.Add(m_io.ReadU4le()); } - __unnamed90 = new Align(16, m_io, this, m_root); - _cdPad17Size = m_io.ReadU4le(); - __unnamed92 = m_io.ReadBytes(CdPad17Size); - __unnamed93 = new Align(16, m_io, this, m_root); - _unknown18Count = m_io.ReadU4le(); + __unnamed98 = new Align(16, m_io, this, m_root); + _lenPad17 = m_io.ReadU4le(); + __unnamed100 = m_io.ReadBytes(LenPad17); + __unnamed101 = new Align(16, m_io, this, m_root); + _numUnknown18s = m_io.ReadU4le(); _unknown18s = new List(); - for (var i = 0; i < Unknown18Count; i++) + for (var i = 0; i < NumUnknown18s; i++) { _unknown18s.Add(new Unknown18(m_io, this, m_root)); } - __unnamed96 = new Align(16, m_io, this, m_root); - _unknown19Count = m_io.ReadU4le(); - __unnamed98 = m_io.ReadBytes((Unknown19Count * 28)); + __unnamed104 = new Align(16, m_io, this, m_root); + _numUnknown19 = m_io.ReadU4le(); + __unnamed106 = m_io.ReadBytes((NumUnknown19 * 28)); _unknown19 = new List(); - for (var i = 0; i < (Unknown19Count * 7); i++) + for (var i = 0; i < (NumUnknown19 * 7); i++) { _unknown19.Add(m_io.ReadF4le()); } - _unknown20Count = m_io.ReadU4le(); - __unnamed101 = m_io.ReadBytes((Unknown20Count * 12)); + _numUnknown20 = m_io.ReadU4le(); + __unnamed109 = m_io.ReadBytes((NumUnknown20 * 12)); _unknown20 = new List(); - for (var i = 0; i < Unknown20Count; i++) + for (var i = 0; i < NumUnknown20; i++) { _unknown20.Add(m_io.ReadBytes(12)); } - __unnamed103 = new Align(16, m_io, this, m_root); - _unknown21Count = m_io.ReadU4le(); - _unknown21Pad = m_io.ReadBytes((Unknown21Count * 8)); + __unnamed111 = new Align(16, m_io, this, m_root); + _numUnknown21 = m_io.ReadU4le(); + _unknown21Pad = m_io.ReadBytes((NumUnknown21 * 8)); _unknown21 = new List(); - for (var i = 0; i < (Unknown21Count * 2); i++) + for (var i = 0; i < (NumUnknown21 * 2); i++) { _unknown21.Add(m_io.ReadU4le()); } - __unnamed107 = new Align(16, m_io, this, m_root); - _unknown22Count = m_io.ReadU4le(); + __unnamed115 = new Align(16, m_io, this, m_root); + _numUnknown22 = m_io.ReadU4le(); _unknown22 = new List(); - for (var i = 0; i < Unknown22Count; i++) + for (var i = 0; i < NumUnknown22; i++) { _unknown22.Add(m_io.ReadU4le()); } - __unnamed110 = new Align(16, m_io, this, m_root); + __unnamed118 = new Align(16, m_io, this, m_root); _unknown23 = new List(); - for (var i = 0; i < (Unknown23Count * 12); i++) + for (var i = 0; i < (NumUnknown23 * 12); i++) { _unknown23.Add(m_io.ReadF4le()); } - _unknown24Count = m_io.ReadU4le(); - __unnamed113 = m_io.ReadBytes(4); - if (!((KaitaiStream.ByteArrayCompare(Unnamed_113, new byte[] { 0, 0, 0, 0 }) == 0))) + _numUnknown24s = m_io.ReadU4le(); + __unnamed121 = m_io.ReadBytes(4); + if (!((KaitaiStream.ByteArrayCompare(Unnamed_121, new byte[] { 0, 0, 0, 0 }) == 0))) { - throw new ValidationNotEqualError(new byte[] { 0, 0, 0, 0 }, Unnamed_113, M_Io, "/seq/113"); + throw new ValidationNotEqualError(new byte[] { 0, 0, 0, 0 }, Unnamed_121, M_Io, "/seq/121"); } - _unknown25Count = m_io.ReadU4le(); - __unnamed115 = m_io.ReadBytes(4); - if (!((KaitaiStream.ByteArrayCompare(Unnamed_115, new byte[] { 0, 0, 0, 0 }) == 0))) + _numUnknown25 = m_io.ReadU4le(); + __unnamed123 = m_io.ReadBytes(4); + if (!((KaitaiStream.ByteArrayCompare(Unnamed_123, new byte[] { 0, 0, 0, 0 }) == 0))) { - throw new ValidationNotEqualError(new byte[] { 0, 0, 0, 0 }, Unnamed_115, M_Io, "/seq/115"); + throw new ValidationNotEqualError(new byte[] { 0, 0, 0, 0 }, Unnamed_123, M_Io, "/seq/123"); } - _unknown24 = new List(); - for (var i = 0; i < Unknown24Count; i++) + _unknown24s = new List(); + for (var i = 0; i < NumUnknown24s; i++) { - _unknown24.Add(m_io.ReadBytes(48)); + _unknown24s.Add(new Unknown24(m_io, this, m_root)); } _unknown25 = new List(); - for (var i = 0; i < Unknown25Count; i++) + for (var i = 0; i < NumUnknown25; i++) { _unknown25.Add(m_io.ReadBytes(2)); } - __unnamed118 = new Align(16, m_io, this, m_root); + __unnamed126 = new Align(16, m_io, this, m_root); _unknown26 = new List(); for (var i = 0; i < NumUnknown26; i++) { _unknown26.Add(m_io.ReadBytes(2)); } - __unnamed120 = new Align(16, m_io, this, m_root); + __unnamed128 = new Align(16, m_io, this, m_root); _meshMovers = new List(); - for (var i = 0; i < MeshMoverCount; i++) + for (var i = 0; i < NumMeshMovers; i++) { _meshMovers.Add(new MeshMover(m_io, this, m_root)); } _unknown27 = new List(); - for (var i = 0; i < Unknown27Count; i++) + for (var i = 0; i < NumUnknown27; i++) { _unknown27.Add(m_io.ReadBytes(24)); } _unknown28 = new List(); - for (var i = 0; i < Unknown28Count; i++) + for (var i = 0; i < NumUnknown28; i++) { _unknown28.Add(m_io.ReadBytes(36)); } _unknown29 = new List(); - for (var i = 0; i < Unknown29Count; i++) + for (var i = 0; i < NumUnknown29; i++) { _unknown29.Add(m_io.ReadBytes(4)); } _unknown30 = new List(); - for (var i = 0; i < Unknown30Count; i++) + for (var i = 0; i < NumUnknown30; i++) { _unknown30.Add(m_io.ReadBytes(12)); } _unknown31 = new List(); - for (var i = 0; i < Unknown31Count; i++) + for (var i = 0; i < NumUnknown31; i++) { _unknown31.Add(m_io.ReadBytes(8)); } _unknown32 = new List(); - for (var i = 0; i < Header0xf0; i++) + for (var i = 0; i < NumUnknown32; i++) { _unknown32.Add(m_io.ReadBytes(8)); } _meshMoverNames = new List(); - for (var i = 0; i < MeshMoverCount; i++) + for (var i = 0; i < NumMeshMovers; i++) { _meshMoverNames.Add(new MeshMoverName(MeshMovers[i].StartCount, m_io, this, m_root)); } - __unnamed129 = new Align(16, m_io, this, m_root); - _lightCount = m_io.ReadU4le(); + __unnamed137 = new Align(16, m_io, this, m_root); + _numLights = new NumLightsType(m_io, this, m_root); _lightsOffset = new Offset(M_Io.Pos, m_io, this, m_root); - if (LightCount != 1212891981) { - _lightSections = new LightSection(LightCount, m_io, this, m_root); + if (NumLights.Result != 0) { + _lightUnknown = m_io.ReadU4le(); + } + _lightData = new List(); + for (var i = 0; i < NumLights.Result; i++) + { + _lightData.Add(new LightDataType(m_io, this, m_root)); + } + _lightNames = new List(); + for (var i = 0; i < NumLights.Result; i++) + { + _lightNames.Add(System.Text.Encoding.GetEncoding("utf-8").GetString(m_io.ReadBytesTerm(0, false, true, true))); + } + __unnamed143 = new Align(16, m_io, this, m_root); + _lightUnkfloats = new List(); + for (var i = 0; i < NumLights.Result; i++) + { + _lightUnkfloats.Add(new LightUnkfloatsType(LightData[i].NumLightUnkfloats, m_io, this, m_root)); } + __unnamed145 = new Align(16, m_io, this, m_root); } public partial class MatUnknown3 : KaitaiStruct { @@ -342,7 +398,7 @@ public static MatUnknown3 FromFile(string fileName) return new MatUnknown3(new KaitaiStream(fileName)); } - public MatUnknown3(KaitaiStream p__io, Sr2CpuChunkPc p__parent = null, Sr2CpuChunkPc p__root = null) : base(p__io) + public MatUnknown3(KaitaiStream p__io, Sr2ChunkPc p__parent = null, Sr2ChunkPc p__root = null) : base(p__io) { m_parent = p__parent; m_root = p__root; @@ -363,14 +419,14 @@ private void _read() private ushort _unk2Count; private ushort _unk3; private byte[] __unnamed3; - private Sr2CpuChunkPc m_root; - private Sr2CpuChunkPc m_parent; + private Sr2ChunkPc m_root; + private Sr2ChunkPc m_parent; public byte[] Unk { get { return _unk; } } public ushort Unk2Count { get { return _unk2Count; } } public ushort Unk3 { get { return _unk3; } } public byte[] Unnamed_3 { get { return __unnamed3; } } - public Sr2CpuChunkPc M_Root { get { return m_root; } } - public Sr2CpuChunkPc M_Parent { get { return m_parent; } } + public Sr2ChunkPc M_Root { get { return m_root; } } + public Sr2ChunkPc M_Parent { get { return m_parent; } } } public partial class Unknown4 : KaitaiStruct { @@ -379,7 +435,7 @@ public static Unknown4 FromFile(string fileName) return new Unknown4(new KaitaiStream(fileName)); } - public Unknown4(KaitaiStream p__io, Sr2CpuChunkPc p__parent = null, Sr2CpuChunkPc p__root = null) : base(p__io) + public Unknown4(KaitaiStream p__io, Sr2ChunkPc p__parent = null, Sr2ChunkPc p__root = null) : base(p__io) { m_parent = p__parent; m_root = p__root; @@ -414,8 +470,8 @@ private void _read() private float _floata; private float _floatb; private float _floatc; - private Sr2CpuChunkPc m_root; - private Sr2CpuChunkPc m_parent; + private Sr2ChunkPc m_root; + private Sr2ChunkPc m_parent; public float Float0 { get { return _float0; } } public float Float1 { get { return _float1; } } public float Float2 { get { return _float2; } } @@ -429,57 +485,333 @@ private void _read() public float Floata { get { return _floata; } } public float Floatb { get { return _floatb; } } public float Floatc { get { return _floatc; } } - public Sr2CpuChunkPc M_Root { get { return m_root; } } - public Sr2CpuChunkPc M_Parent { get { return m_parent; } } + public Sr2ChunkPc M_Root { get { return m_root; } } + public Sr2ChunkPc M_Parent { get { return m_parent; } } } - public partial class LightSection : KaitaiStruct + public partial class LightDataType : KaitaiStruct { - public LightSection(uint p_lightCount, KaitaiStream p__io, Sr2CpuChunkPc p__parent = null, Sr2CpuChunkPc p__root = null) : base(p__io) + public static LightDataType FromFile(string fileName) + { + return new LightDataType(new KaitaiStream(fileName)); + } + + public LightDataType(KaitaiStream p__io, Sr2ChunkPc p__parent = null, Sr2ChunkPc p__root = null) : base(p__io) { m_parent = p__parent; m_root = p__root; - _lightCount = p_lightCount; + f_shadowCharacter = false; + f_shadowLevel = false; + f_bitflag22 = false; + f_bitflag8 = false; + f_bitflag2 = false; + f_bitflag10 = false; + f_lightCharacter = false; + f_lightLevel = false; + f_bitflag3 = false; + f_bitflag4 = false; + f_bitflag1 = false; + f_bitflag0 = false; _read(); } private void _read() { - _unknown26b = m_io.ReadU4le(); - _lights = new List(); - for (var i = 0; i < LightCount; i++) + _bitmask = new List(); + for (var i = 0; i < 32; i++) { - _lights.Add(new Light(m_io, this, m_root)); + _bitmask.Add(m_io.ReadBitsIntBe(1) != 0); } - _lightNames = new List(); - for (var i = 0; i < LightCount; i++) + m_io.AlignToByte(); + __unnamed1 = m_io.ReadBytes(4); + if (!((KaitaiStream.ByteArrayCompare(Unnamed_1, new byte[] { 0, 0, 0, 0 }) == 0))) { - _lightNames.Add(System.Text.Encoding.GetEncoding("utf-8").GetString(m_io.ReadBytesTerm(0, false, true, true))); + throw new ValidationNotEqualError(new byte[] { 0, 0, 0, 0 }, Unnamed_1, M_Io, "/types/light_data_type/seq/1"); } - __unnamed3 = new Align(16, m_io, this, m_root); - _lightUnk2 = new List(); - for (var i = 0; i < LightCount; i++) + _r = m_io.ReadF4le(); + _g = m_io.ReadF4le(); + _b = m_io.ReadF4le(); + _unk5 = m_io.ReadU4le(); + _unk6 = m_io.ReadU4le(); + _unk7 = m_io.ReadU4le(); + _numLightUnkfloats = m_io.ReadU4le(); + __unnamed9 = m_io.ReadBytes(4); + if (!((KaitaiStream.ByteArrayCompare(Unnamed_9, new byte[] { 255, 255, 255, 255 }) == 0))) + { + throw new ValidationNotEqualError(new byte[] { 255, 255, 255, 255 }, Unnamed_9, M_Io, "/types/light_data_type/seq/9"); + } + _unk10 = m_io.ReadU4le(); + __unnamed11 = m_io.ReadBytes(4); + if (!((KaitaiStream.ByteArrayCompare(Unnamed_11, new byte[] { 255, 255, 255, 255 }) == 0))) + { + throw new ValidationNotEqualError(new byte[] { 255, 255, 255, 255 }, Unnamed_11, M_Io, "/types/light_data_type/seq/11"); + } + _unk12 = m_io.ReadU4le(); + _unkf13 = m_io.ReadF4le(); + _unkf14 = m_io.ReadF4le(); + _position = new Vec3(m_io, this, m_root); + _basisX = new Vec3(m_io, this, m_root); + _basisY = new Vec3(m_io, this, m_root); + _basisZ = new Vec3(m_io, this, m_root); + _unkf27 = m_io.ReadF4le(); + _unkf28 = m_io.ReadF4le(); + _radiusInner = m_io.ReadF4le(); + _radiusOuter = m_io.ReadF4le(); + _renderDist = m_io.ReadF4le(); + __unnamed24 = m_io.ReadBytes(4); + if (!((KaitaiStream.ByteArrayCompare(Unnamed_24, new byte[] { 255, 255, 255, 255 }) == 0))) { - _lightUnk2.Add(m_io.ReadBytes((Lights[i].Unk8 * 4))); + throw new ValidationNotEqualError(new byte[] { 255, 255, 255, 255 }, Unnamed_24, M_Io, "/types/light_data_type/seq/24"); } - __unnamed5 = new Align(16, m_io, this, m_root); + _parentCityobject = m_io.ReadS4le(); + _unk34 = m_io.ReadU4le(); + _unk35 = m_io.ReadU4le(); + _type = m_io.ReadU4le(); } - private uint _unknown26b; - private List _lights; - private List _lightNames; - private Align __unnamed3; - private List _lightUnk2; - private Align __unnamed5; - private uint _lightCount; - private Sr2CpuChunkPc m_root; - private Sr2CpuChunkPc m_parent; - public uint Unknown26b { get { return _unknown26b; } } - public List Lights { get { return _lights; } } - public List LightNames { get { return _lightNames; } } - public Align Unnamed_3 { get { return __unnamed3; } } - public List LightUnk2 { get { return _lightUnk2; } } - public Align Unnamed_5 { get { return __unnamed5; } } - public uint LightCount { get { return _lightCount; } } - public Sr2CpuChunkPc M_Root { get { return m_root; } } - public Sr2CpuChunkPc M_Parent { get { return m_parent; } } + private bool f_shadowCharacter; + private bool _shadowCharacter; + public bool ShadowCharacter + { + get + { + if (f_shadowCharacter) + return _shadowCharacter; + _shadowCharacter = (bool) (Bitmask[12]); + f_shadowCharacter = true; + return _shadowCharacter; + } + } + private bool f_shadowLevel; + private bool _shadowLevel; + public bool ShadowLevel + { + get + { + if (f_shadowLevel) + return _shadowLevel; + _shadowLevel = (bool) (Bitmask[13]); + f_shadowLevel = true; + return _shadowLevel; + } + } + private bool f_bitflag22; + private bool _bitflag22; + public bool Bitflag22 + { + get + { + if (f_bitflag22) + return _bitflag22; + _bitflag22 = (bool) (Bitmask[22]); + f_bitflag22 = true; + return _bitflag22; + } + } + private bool f_bitflag8; + private bool _bitflag8; + public bool Bitflag8 + { + get + { + if (f_bitflag8) + return _bitflag8; + _bitflag8 = (bool) (Bitmask[8]); + f_bitflag8 = true; + return _bitflag8; + } + } + private bool f_bitflag2; + private bool _bitflag2; + public bool Bitflag2 + { + get + { + if (f_bitflag2) + return _bitflag2; + _bitflag2 = (bool) (Bitmask[2]); + f_bitflag2 = true; + return _bitflag2; + } + } + private bool f_bitflag10; + private bool _bitflag10; + public bool Bitflag10 + { + get + { + if (f_bitflag10) + return _bitflag10; + _bitflag10 = (bool) (Bitmask[10]); + f_bitflag10 = true; + return _bitflag10; + } + } + private bool f_lightCharacter; + private bool _lightCharacter; + public bool LightCharacter + { + get + { + if (f_lightCharacter) + return _lightCharacter; + _lightCharacter = (bool) (Bitmask[14]); + f_lightCharacter = true; + return _lightCharacter; + } + } + private bool f_lightLevel; + private bool _lightLevel; + public bool LightLevel + { + get + { + if (f_lightLevel) + return _lightLevel; + _lightLevel = (bool) (Bitmask[15]); + f_lightLevel = true; + return _lightLevel; + } + } + private bool f_bitflag3; + private bool _bitflag3; + public bool Bitflag3 + { + get + { + if (f_bitflag3) + return _bitflag3; + _bitflag3 = (bool) (Bitmask[3]); + f_bitflag3 = true; + return _bitflag3; + } + } + private bool f_bitflag4; + private bool _bitflag4; + public bool Bitflag4 + { + get + { + if (f_bitflag4) + return _bitflag4; + _bitflag4 = (bool) (Bitmask[4]); + f_bitflag4 = true; + return _bitflag4; + } + } + private bool f_bitflag1; + private bool _bitflag1; + public bool Bitflag1 + { + get + { + if (f_bitflag1) + return _bitflag1; + _bitflag1 = (bool) (Bitmask[1]); + f_bitflag1 = true; + return _bitflag1; + } + } + private bool f_bitflag0; + private bool _bitflag0; + public bool Bitflag0 + { + get + { + if (f_bitflag0) + return _bitflag0; + _bitflag0 = (bool) (Bitmask[0]); + f_bitflag0 = true; + return _bitflag0; + } + } + private List _bitmask; + private byte[] __unnamed1; + private float _r; + private float _g; + private float _b; + private uint _unk5; + private uint _unk6; + private uint _unk7; + private uint _numLightUnkfloats; + private byte[] __unnamed9; + private uint _unk10; + private byte[] __unnamed11; + private uint _unk12; + private float _unkf13; + private float _unkf14; + private Vec3 _position; + private Vec3 _basisX; + private Vec3 _basisY; + private Vec3 _basisZ; + private float _unkf27; + private float _unkf28; + private float _radiusInner; + private float _radiusOuter; + private float _renderDist; + private byte[] __unnamed24; + private int _parentCityobject; + private uint _unk34; + private uint _unk35; + private uint _type; + private Sr2ChunkPc m_root; + private Sr2ChunkPc m_parent; + public List Bitmask { get { return _bitmask; } } + public byte[] Unnamed_1 { get { return __unnamed1; } } + public float R { get { return _r; } } + public float G { get { return _g; } } + public float B { get { return _b; } } + + /// + /// bitmask? + /// + public uint Unk5 { get { return _unk5; } } + + /// + /// bitmask? + /// + public uint Unk6 { get { return _unk6; } } + + /// + /// bitmask? + /// + public uint Unk7 { get { return _unk7; } } + public uint NumLightUnkfloats { get { return _numLightUnkfloats; } } + public byte[] Unnamed_9 { get { return __unnamed9; } } + + /// + /// bitmask? + /// + public uint Unk10 { get { return _unk10; } } + public byte[] Unnamed_11 { get { return __unnamed11; } } + + /// + /// bitmask? + /// + public uint Unk12 { get { return _unk12; } } + public float Unkf13 { get { return _unkf13; } } + public float Unkf14 { get { return _unkf14; } } + public Vec3 Position { get { return _position; } } + public Vec3 BasisX { get { return _basisX; } } + public Vec3 BasisY { get { return _basisY; } } + public Vec3 BasisZ { get { return _basisZ; } } + public float Unkf27 { get { return _unkf27; } } + public float Unkf28 { get { return _unkf28; } } + public float RadiusInner { get { return _radiusInner; } } + public float RadiusOuter { get { return _radiusOuter; } } + public float RenderDist { get { return _renderDist; } } + public byte[] Unnamed_24 { get { return __unnamed24; } } + public int ParentCityobject { get { return _parentCityobject; } } + + /// + /// bitmask? + /// + public uint Unk34 { get { return _unk34; } } + + /// + /// often 0, otherwise <250 + /// + public uint Unk35 { get { return _unk35; } } + public uint Type { get { return _type; } } + public Sr2ChunkPc M_Root { get { return m_root; } } + public Sr2ChunkPc M_Parent { get { return m_parent; } } } /// @@ -508,7 +840,7 @@ public static VertHeader FromFile(string fileName) return new VertHeader(new KaitaiStream(fileName)); } - public VertHeader(KaitaiStream p__io, Sr2CpuChunkPc.VertHeaderCont p__parent = null, Sr2CpuChunkPc p__root = null) : base(p__io) + public VertHeader(KaitaiStream p__io, Sr2ChunkPc.VertHeaderCont p__parent = null, Sr2ChunkPc p__root = null) : base(p__io) { m_parent = p__parent; m_root = p__root; @@ -519,7 +851,7 @@ private void _read() _unk2bCount = m_io.ReadU1(); _uvCount = m_io.ReadU1(); _vertSize = m_io.ReadU2le(); - _vertCount = m_io.ReadU4le(); + _numVertices = m_io.ReadU4le(); __unnamed4 = m_io.ReadBytes(4); if (!((KaitaiStream.ByteArrayCompare(Unnamed_4, new byte[] { 255, 255, 255, 255 }) == 0))) { @@ -534,19 +866,19 @@ private void _read() private byte _unk2bCount; private byte _uvCount; private ushort _vertSize; - private uint _vertCount; + private uint _numVertices; private byte[] __unnamed4; private byte[] __unnamed5; - private Sr2CpuChunkPc m_root; - private Sr2CpuChunkPc.VertHeaderCont m_parent; + private Sr2ChunkPc m_root; + private Sr2ChunkPc.VertHeaderCont m_parent; public byte Unk2bCount { get { return _unk2bCount; } } public byte UvCount { get { return _uvCount; } } public ushort VertSize { get { return _vertSize; } } - public uint VertCount { get { return _vertCount; } } + public uint NumVertices { get { return _numVertices; } } public byte[] Unnamed_4 { get { return __unnamed4; } } public byte[] Unnamed_5 { get { return __unnamed5; } } - public Sr2CpuChunkPc M_Root { get { return m_root; } } - public Sr2CpuChunkPc.VertHeaderCont M_Parent { get { return m_parent; } } + public Sr2ChunkPc M_Root { get { return m_root; } } + public Sr2ChunkPc.VertHeaderCont M_Parent { get { return m_parent; } } } public partial class MeshMover : KaitaiStruct { @@ -555,7 +887,7 @@ public static MeshMover FromFile(string fileName) return new MeshMover(new KaitaiStream(fileName)); } - public MeshMover(KaitaiStream p__io, Sr2CpuChunkPc p__parent = null, Sr2CpuChunkPc p__root = null) : base(p__io) + public MeshMover(KaitaiStream p__io, Sr2ChunkPc p__parent = null, Sr2ChunkPc p__root = null) : base(p__io) { m_parent = p__parent; m_root = p__root; @@ -570,17 +902,17 @@ private void _read() private byte[] _unk0; private ushort _startCount; private byte[] _unk1; - private Sr2CpuChunkPc m_root; - private Sr2CpuChunkPc m_parent; + private Sr2ChunkPc m_root; + private Sr2ChunkPc m_parent; public byte[] Unk0 { get { return _unk0; } } public ushort StartCount { get { return _startCount; } } public byte[] Unk1 { get { return _unk1; } } - public Sr2CpuChunkPc M_Root { get { return m_root; } } - public Sr2CpuChunkPc M_Parent { get { return m_parent; } } + public Sr2ChunkPc M_Root { get { return m_root; } } + public Sr2ChunkPc M_Parent { get { return m_parent; } } } public partial class Align : KaitaiStruct { - public Align(uint p_size, KaitaiStream p__io, KaitaiStruct p__parent = null, Sr2CpuChunkPc p__root = null) : base(p__io) + public Align(uint p_size, KaitaiStream p__io, KaitaiStruct p__parent = null, Sr2ChunkPc p__root = null) : base(p__io) { m_parent = p__parent; m_root = p__root; @@ -593,11 +925,11 @@ private void _read() } private byte[] __unnamed0; private uint _size; - private Sr2CpuChunkPc m_root; + private Sr2ChunkPc m_root; private KaitaiStruct m_parent; public byte[] Unnamed_0 { get { return __unnamed0; } } public uint Size { get { return _size; } } - public Sr2CpuChunkPc M_Root { get { return m_root; } } + public Sr2ChunkPc M_Root { get { return m_root; } } public KaitaiStruct M_Parent { get { return m_parent; } } } public partial class RendermodelUnk0 : KaitaiStruct @@ -607,7 +939,7 @@ public static RendermodelUnk0 FromFile(string fileName) return new RendermodelUnk0(new KaitaiStream(fileName)); } - public RendermodelUnk0(KaitaiStream p__io, Sr2CpuChunkPc p__parent = null, Sr2CpuChunkPc p__root = null) : base(p__io) + public RendermodelUnk0(KaitaiStream p__io, Sr2ChunkPc p__parent = null, Sr2ChunkPc p__root = null) : base(p__io) { m_parent = p__parent; m_root = p__root; @@ -628,16 +960,52 @@ private void _read() private uint _unk3; private uint _unk4; private uint _unk5; - private Sr2CpuChunkPc m_root; - private Sr2CpuChunkPc m_parent; + private Sr2ChunkPc m_root; + private Sr2ChunkPc m_parent; public uint Unk0 { get { return _unk0; } } public uint Unk1 { get { return _unk1; } } public uint Unk2 { get { return _unk2; } } public uint Unk3 { get { return _unk3; } } public uint Unk4 { get { return _unk4; } } public uint Unk5 { get { return _unk5; } } - public Sr2CpuChunkPc M_Root { get { return m_root; } } - public Sr2CpuChunkPc M_Parent { get { return m_parent; } } + public Sr2ChunkPc M_Root { get { return m_root; } } + public Sr2ChunkPc M_Parent { get { return m_parent; } } + } + public partial class Unknown33 : KaitaiStruct + { + public static Unknown33 FromFile(string fileName) + { + return new Unknown33(new KaitaiStream(fileName)); + } + + public Unknown33(KaitaiStream p__io, KaitaiStruct p__parent = null, Sr2ChunkPc p__root = null) : base(p__io) + { + m_parent = p__parent; + m_root = p__root; + _read(); + } + private void _read() + { + _boxMin = new Vec3(m_io, this, m_root); + __unnamed1 = m_io.ReadBytes(4); + _boxMax = new Vec3(m_io, this, m_root); + __unnamed3 = m_io.ReadBytes(4); + _unk = m_io.ReadBytes(16); + } + private Vec3 _boxMin; + private byte[] __unnamed1; + private Vec3 _boxMax; + private byte[] __unnamed3; + private byte[] _unk; + private Sr2ChunkPc m_root; + private KaitaiStruct m_parent; + public Vec3 BoxMin { get { return _boxMin; } } + public byte[] Unnamed_1 { get { return __unnamed1; } } + public Vec3 BoxMax { get { return _boxMax; } } + public byte[] Unnamed_3 { get { return __unnamed3; } } + public byte[] Unk { get { return _unk; } } + public Sr2ChunkPc M_Root { get { return m_root; } } + public KaitaiStruct M_Parent { get { return m_parent; } } } /// @@ -645,29 +1013,29 @@ private void _read() /// public partial class VertHeaderCont : KaitaiStruct { - public VertHeaderCont(ushort p_vertHeaderCount, KaitaiStream p__io, Sr2CpuChunkPc p__parent = null, Sr2CpuChunkPc p__root = null) : base(p__io) + public VertHeaderCont(ushort p_numVertHeader, KaitaiStream p__io, Sr2ChunkPc p__parent = null, Sr2ChunkPc p__root = null) : base(p__io) { m_parent = p__parent; m_root = p__root; - _vertHeaderCount = p_vertHeaderCount; + _numVertHeader = p_numVertHeader; _read(); } private void _read() { _vertHeader = new List(); - for (var i = 0; i < VertHeaderCount; i++) + for (var i = 0; i < NumVertHeader; i++) { _vertHeader.Add(new VertHeader(m_io, this, m_root)); } } private List _vertHeader; - private ushort _vertHeaderCount; - private Sr2CpuChunkPc m_root; - private Sr2CpuChunkPc m_parent; + private ushort _numVertHeader; + private Sr2ChunkPc m_root; + private Sr2ChunkPc m_parent; public List VertHeader { get { return _vertHeader; } } - public ushort VertHeaderCount { get { return _vertHeaderCount; } } - public Sr2CpuChunkPc M_Root { get { return m_root; } } - public Sr2CpuChunkPc M_Parent { get { return m_parent; } } + public ushort NumVertHeader { get { return _numVertHeader; } } + public Sr2ChunkPc M_Root { get { return m_root; } } + public Sr2ChunkPc M_Parent { get { return m_parent; } } } public partial class MatTex : KaitaiStruct { @@ -676,7 +1044,7 @@ public static MatTex FromFile(string fileName) return new MatTex(new KaitaiStream(fileName)); } - public MatTex(KaitaiStream p__io, Sr2CpuChunkPc.MatTexCont p__parent = null, Sr2CpuChunkPc p__root = null) : base(p__io) + public MatTex(KaitaiStream p__io, Sr2ChunkPc.MatTexCont p__parent = null, Sr2ChunkPc p__root = null) : base(p__io) { m_parent = p__parent; m_root = p__root; @@ -689,16 +1057,16 @@ private void _read() } private ushort _texId; private ushort _texFlag; - private Sr2CpuChunkPc m_root; - private Sr2CpuChunkPc.MatTexCont m_parent; + private Sr2ChunkPc m_root; + private Sr2ChunkPc.MatTexCont m_parent; public ushort TexId { get { return _texId; } } public ushort TexFlag { get { return _texFlag; } } - public Sr2CpuChunkPc M_Root { get { return m_root; } } - public Sr2CpuChunkPc.MatTexCont M_Parent { get { return m_parent; } } + public Sr2ChunkPc M_Root { get { return m_root; } } + public Sr2ChunkPc.MatTexCont M_Parent { get { return m_parent; } } } public partial class MeshMoverName : KaitaiStruct { - public MeshMoverName(ushort p_startCount, KaitaiStream p__io, Sr2CpuChunkPc p__parent = null, Sr2CpuChunkPc p__root = null) : base(p__io) + public MeshMoverName(ushort p_startCount, KaitaiStream p__io, Sr2ChunkPc p__parent = null, Sr2ChunkPc p__root = null) : base(p__io) { m_parent = p__parent; m_root = p__root; @@ -717,85 +1085,125 @@ private void _read() private string _name; private List _startNames; private ushort _startCount; - private Sr2CpuChunkPc m_root; - private Sr2CpuChunkPc m_parent; + private Sr2ChunkPc m_root; + private Sr2ChunkPc m_parent; public string Name { get { return _name; } } public List StartNames { get { return _startNames; } } public ushort StartCount { get { return _startCount; } } - public Sr2CpuChunkPc M_Root { get { return m_root; } } - public Sr2CpuChunkPc M_Parent { get { return m_parent; } } + public Sr2ChunkPc M_Root { get { return m_root; } } + public Sr2ChunkPc M_Parent { get { return m_parent; } } + } + public partial class LightUnkfloatsType : KaitaiStruct + { + public LightUnkfloatsType(uint p_num, KaitaiStream p__io, Sr2ChunkPc p__parent = null, Sr2ChunkPc p__root = null) : base(p__io) + { + m_parent = p__parent; + m_root = p__root; + _num = p_num; + _read(); + } + private void _read() + { + _unk = new List(); + for (var i = 0; i < Num; i++) + { + _unk.Add(m_io.ReadF4le()); + } + } + private List _unk; + private uint _num; + private Sr2ChunkPc m_root; + private Sr2ChunkPc m_parent; + public List Unk { get { return _unk; } } + public uint Num { get { return _num; } } + public Sr2ChunkPc M_Root { get { return m_root; } } + public Sr2ChunkPc M_Parent { get { return m_parent; } } } public partial class PhysModelBuffer : KaitaiStruct { - public PhysModelBuffer(bool p_isPhysmodel, uint p_indexCount, uint p_vertCount, KaitaiStream p__io, Sr2CpuChunkPc p__parent = null, Sr2CpuChunkPc p__root = null) : base(p__io) + public PhysModelBuffer(bool p_isPhysmodel, uint p_numIndices, uint p_numVertices, KaitaiStream p__io, Sr2ChunkPc p__parent = null, Sr2ChunkPc p__root = null) : base(p__io) { m_parent = p__parent; m_root = p__root; _isPhysmodel = p_isPhysmodel; - _indexCount = p_indexCount; - _vertCount = p_vertCount; + _numIndices = p_numIndices; + _numVertices = p_numVertices; _read(); } private void _read() { if (IsPhysmodel) { - _vbuf = new List(); - for (var i = 0; i < VertCount; i++) + _vertices = new List(); + for (var i = 0; i < NumVertices; i++) { - _vbuf.Add(new Vec3(m_io, this, m_root)); + _vertices.Add(new Vec3(m_io, this, m_root)); } } __unnamed1 = new Align(16, m_io, this, m_root); if (IsPhysmodel) { - _ibuf = new List(); - for (var i = 0; i < IndexCount; i++) + _indices = new List(); + for (var i = 0; i < NumIndices; i++) { - _ibuf.Add(m_io.ReadU2le()); + _indices.Add(m_io.ReadU2le()); } } __unnamed3 = new Align(16, m_io, this, m_root); } - private List _vbuf; + private List _vertices; private Align __unnamed1; - private List _ibuf; + private List _indices; private Align __unnamed3; private bool _isPhysmodel; - private uint _indexCount; - private uint _vertCount; - private Sr2CpuChunkPc m_root; - private Sr2CpuChunkPc m_parent; - public List Vbuf { get { return _vbuf; } } + private uint _numIndices; + private uint _numVertices; + private Sr2ChunkPc m_root; + private Sr2ChunkPc m_parent; + public List Vertices { get { return _vertices; } } public Align Unnamed_1 { get { return __unnamed1; } } - public List Ibuf { get { return _ibuf; } } + public List Indices { get { return _indices; } } public Align Unnamed_3 { get { return __unnamed3; } } public bool IsPhysmodel { get { return _isPhysmodel; } } - public uint IndexCount { get { return _indexCount; } } - public uint VertCount { get { return _vertCount; } } - public Sr2CpuChunkPc M_Root { get { return m_root; } } - public Sr2CpuChunkPc M_Parent { get { return m_parent; } } + public uint NumIndices { get { return _numIndices; } } + public uint NumVertices { get { return _numVertices; } } + public Sr2ChunkPc M_Root { get { return m_root; } } + public Sr2ChunkPc M_Parent { get { return m_parent; } } } public partial class Offset : KaitaiStruct { - public Offset(long p_off, KaitaiStream p__io, Sr2CpuChunkPc p__parent = null, Sr2CpuChunkPc p__root = null) : base(p__io) + public Offset(long p_input, KaitaiStream p__io, Sr2ChunkPc p__parent = null, Sr2ChunkPc p__root = null) : base(p__io) { m_parent = p__parent; m_root = p__root; - _off = p_off; + _input = p_input; + f_temp = false; _read(); } private void _read() { } - private long _off; - private Sr2CpuChunkPc m_root; - private Sr2CpuChunkPc m_parent; - public long Off { get { return _off; } } - public Sr2CpuChunkPc M_Root { get { return m_root; } } - public Sr2CpuChunkPc M_Parent { get { return m_parent; } } + private bool f_temp; + private long _temp; + public long Temp + { + get + { + if (f_temp) + return _temp; + _temp = (long) (Input); + f_temp = true; + return _temp; + } + } + private long _input; + private Sr2ChunkPc m_root; + private Sr2ChunkPc m_parent; + public long Input { get { return _input; } } + public Sr2ChunkPc M_Root { get { return m_root; } } + public Sr2ChunkPc M_Parent { get { return m_parent; } } } public partial class MatBitflag : KaitaiStruct { - public MatBitflag(ushort p_size, KaitaiStream p__io, Sr2CpuChunkPc p__parent = null, Sr2CpuChunkPc p__root = null) : base(p__io) + public MatBitflag(ushort p_size, KaitaiStream p__io, Sr2ChunkPc p__parent = null, Sr2ChunkPc p__root = null) : base(p__io) { m_parent = p__parent; m_root = p__root; @@ -810,13 +1218,13 @@ private void _read() private byte[] _data; private byte[] __unnamed1; private ushort _size; - private Sr2CpuChunkPc m_root; - private Sr2CpuChunkPc m_parent; + private Sr2ChunkPc m_root; + private Sr2ChunkPc m_parent; public byte[] Data { get { return _data; } } public byte[] Unnamed_1 { get { return __unnamed1; } } public ushort Size { get { return _size; } } - public Sr2CpuChunkPc M_Root { get { return m_root; } } - public Sr2CpuChunkPc M_Parent { get { return m_parent; } } + public Sr2ChunkPc M_Root { get { return m_root; } } + public Sr2ChunkPc M_Parent { get { return m_parent; } } } public partial class CityobjectPart : KaitaiStruct { @@ -825,7 +1233,7 @@ public static CityobjectPart FromFile(string fileName) return new CityobjectPart(new KaitaiStream(fileName)); } - public CityobjectPart(KaitaiStream p__io, Sr2CpuChunkPc p__parent = null, Sr2CpuChunkPc p__root = null) : base(p__io) + public CityobjectPart(KaitaiStream p__io, Sr2ChunkPc p__parent = null, Sr2ChunkPc p__root = null) : base(p__io) { m_parent = p__parent; m_root = p__root; @@ -850,8 +1258,8 @@ private void _read() private uint _unk0; private uint _rendermodelId; private uint _unk1; - private Sr2CpuChunkPc m_root; - private Sr2CpuChunkPc m_parent; + private Sr2ChunkPc m_root; + private Sr2ChunkPc m_parent; public Vec3 Pos { get { return _pos; } } public Vec3 BasisX { get { return _basisX; } } public Vec3 BasisY { get { return _basisY; } } @@ -860,8 +1268,8 @@ private void _read() public uint Unk0 { get { return _unk0; } } public uint RendermodelId { get { return _rendermodelId; } } public uint Unk1 { get { return _unk1; } } - public Sr2CpuChunkPc M_Root { get { return m_root; } } - public Sr2CpuChunkPc M_Parent { get { return m_parent; } } + public Sr2ChunkPc M_Root { get { return m_root; } } + public Sr2ChunkPc M_Parent { get { return m_parent; } } } /// @@ -874,7 +1282,7 @@ public static Material FromFile(string fileName) return new Material(new KaitaiStream(fileName)); } - public Material(KaitaiStream p__io, Sr2CpuChunkPc p__parent = null, Sr2CpuChunkPc p__root = null) : base(p__io) + public Material(KaitaiStream p__io, Sr2ChunkPc p__parent = null, Sr2ChunkPc p__root = null) : base(p__io) { m_parent = p__parent; m_root = p__root; @@ -899,16 +1307,16 @@ private void _read() private byte[] __unnamed3; private ushort _unk1; private int _unk2; - private Sr2CpuChunkPc m_root; - private Sr2CpuChunkPc m_parent; + private Sr2ChunkPc m_root; + private Sr2ChunkPc m_parent; public byte[] Unk { get { return _unk; } } public ushort BitflagCount { get { return _bitflagCount; } } public ushort TexCount { get { return _texCount; } } public byte[] Unnamed_3 { get { return __unnamed3; } } public ushort Unk1 { get { return _unk1; } } public int Unk2 { get { return _unk2; } } - public Sr2CpuChunkPc M_Root { get { return m_root; } } - public Sr2CpuChunkPc M_Parent { get { return m_parent; } } + public Sr2ChunkPc M_Root { get { return m_root; } } + public Sr2ChunkPc M_Parent { get { return m_parent; } } } public partial class Vec3 : KaitaiStruct { @@ -917,7 +1325,7 @@ public static Vec3 FromFile(string fileName) return new Vec3(new KaitaiStream(fileName)); } - public Vec3(KaitaiStream p__io, KaitaiStruct p__parent = null, Sr2CpuChunkPc p__root = null) : base(p__io) + public Vec3(KaitaiStream p__io, KaitaiStruct p__parent = null, Sr2ChunkPc p__root = null) : base(p__io) { m_parent = p__parent; m_root = p__root; @@ -932,12 +1340,12 @@ private void _read() private float _x; private float _y; private float _z; - private Sr2CpuChunkPc m_root; + private Sr2ChunkPc m_root; private KaitaiStruct m_parent; public float X { get { return _x; } } public float Y { get { return _y; } } public float Z { get { return _z; } } - public Sr2CpuChunkPc M_Root { get { return m_root; } } + public Sr2ChunkPc M_Root { get { return m_root; } } public KaitaiStruct M_Parent { get { return m_parent; } } } @@ -957,7 +1365,7 @@ public static Rendermodel FromFile(string fileName) return new Rendermodel(new KaitaiStream(fileName)); } - public Rendermodel(KaitaiStream p__io, Sr2CpuChunkPc p__parent = null, Sr2CpuChunkPc p__root = null) : base(p__io) + public Rendermodel(KaitaiStream p__io, Sr2ChunkPc p__parent = null, Sr2ChunkPc p__root = null) : base(p__io) { m_parent = p__parent; m_root = p__root; @@ -1030,7 +1438,7 @@ public static Submesh FromFile(string fileName) return new Submesh(new KaitaiStream(fileName)); } - public Submesh(KaitaiStream p__io, Sr2CpuChunkPc.Rendermodel p__parent = null, Sr2CpuChunkPc p__root = null) : base(p__io) + public Submesh(KaitaiStream p__io, Sr2ChunkPc.Rendermodel p__parent = null, Sr2ChunkPc p__root = null) : base(p__io) { m_parent = p__parent; m_root = p__root; @@ -1039,25 +1447,25 @@ public Submesh(KaitaiStream p__io, Sr2CpuChunkPc.Rendermodel p__parent = null, S private void _read() { _vertBufferId = m_io.ReadU4le(); - _indexOffset = m_io.ReadU4le(); - _vertOffset = m_io.ReadU4le(); - _indexCount = m_io.ReadU2le(); + _offIndices = m_io.ReadU4le(); + _offVertices = m_io.ReadU4le(); + _numIndices = m_io.ReadU2le(); _materialId = m_io.ReadU2le(); } private uint _vertBufferId; - private uint _indexOffset; - private uint _vertOffset; - private ushort _indexCount; + private uint _offIndices; + private uint _offVertices; + private ushort _numIndices; private ushort _materialId; - private Sr2CpuChunkPc m_root; - private Sr2CpuChunkPc.Rendermodel m_parent; + private Sr2ChunkPc m_root; + private Sr2ChunkPc.Rendermodel m_parent; public uint VertBufferId { get { return _vertBufferId; } } - public uint IndexOffset { get { return _indexOffset; } } - public uint VertOffset { get { return _vertOffset; } } - public ushort IndexCount { get { return _indexCount; } } + public uint OffIndices { get { return _offIndices; } } + public uint OffVertices { get { return _offVertices; } } + public ushort NumIndices { get { return _numIndices; } } public ushort MaterialId { get { return _materialId; } } - public Sr2CpuChunkPc M_Root { get { return m_root; } } - public Sr2CpuChunkPc.Rendermodel M_Parent { get { return m_parent; } } + public Sr2ChunkPc M_Root { get { return m_root; } } + public Sr2ChunkPc.Rendermodel M_Parent { get { return m_parent; } } } public partial class Submesh2 : KaitaiStruct { @@ -1066,7 +1474,7 @@ public static Submesh2 FromFile(string fileName) return new Submesh2(new KaitaiStream(fileName)); } - public Submesh2(KaitaiStream p__io, Sr2CpuChunkPc.Rendermodel p__parent = null, Sr2CpuChunkPc p__root = null) : base(p__io) + public Submesh2(KaitaiStream p__io, Sr2ChunkPc.Rendermodel p__parent = null, Sr2ChunkPc p__root = null) : base(p__io) { m_parent = p__parent; m_root = p__root; @@ -1085,23 +1493,23 @@ private void _read() { throw new ValidationNotEqualError(new byte[] { 0, 0, 0, 0 }, Unused2, M_Io, "/types/rendermodel/types/submesh2/seq/2"); } - _indexCount = m_io.ReadU2le(); + _numIndices = m_io.ReadU2le(); _materialId = m_io.ReadU2le(); } private byte[] _unused; private byte[] _unknown; private byte[] _unused2; - private ushort _indexCount; + private ushort _numIndices; private ushort _materialId; - private Sr2CpuChunkPc m_root; - private Sr2CpuChunkPc.Rendermodel m_parent; + private Sr2ChunkPc m_root; + private Sr2ChunkPc.Rendermodel m_parent; public byte[] Unused { get { return _unused; } } public byte[] Unknown { get { return _unknown; } } public byte[] Unused2 { get { return _unused2; } } - public ushort IndexCount { get { return _indexCount; } } + public ushort NumIndices { get { return _numIndices; } } public ushort MaterialId { get { return _materialId; } } - public Sr2CpuChunkPc M_Root { get { return m_root; } } - public Sr2CpuChunkPc.Rendermodel M_Parent { get { return m_parent; } } + public Sr2ChunkPc M_Root { get { return m_root; } } + public Sr2ChunkPc.Rendermodel M_Parent { get { return m_parent; } } } private Vec3 _bboxMin; private Vec3 _bboxMax; @@ -1122,8 +1530,8 @@ private void _read() private byte[] _submesh2Pad1; private List _submeshes; private List _submesh2s; - private Sr2CpuChunkPc m_root; - private Sr2CpuChunkPc m_parent; + private Sr2ChunkPc m_root; + private Sr2ChunkPc m_parent; public Vec3 BboxMin { get { return _bboxMin; } } public Vec3 BboxMax { get { return _bboxMax; } } public uint Unk0 { get { return _unk0; } } @@ -1143,8 +1551,8 @@ private void _read() public byte[] Submesh2Pad1 { get { return _submesh2Pad1; } } public List Submeshes { get { return _submeshes; } } public List Submesh2s { get { return _submesh2s; } } - public Sr2CpuChunkPc M_Root { get { return m_root; } } - public Sr2CpuChunkPc M_Parent { get { return m_parent; } } + public Sr2ChunkPc M_Root { get { return m_root; } } + public Sr2ChunkPc M_Parent { get { return m_parent; } } } public partial class Unknown3 : KaitaiStruct { @@ -1153,7 +1561,7 @@ public static Unknown3 FromFile(string fileName) return new Unknown3(new KaitaiStream(fileName)); } - public Unknown3(KaitaiStream p__io, Sr2CpuChunkPc p__parent = null, Sr2CpuChunkPc p__root = null) : base(p__io) + public Unknown3(KaitaiStream p__io, Sr2ChunkPc p__parent = null, Sr2ChunkPc p__root = null) : base(p__io) { m_parent = p__parent; m_root = p__root; @@ -1212,8 +1620,8 @@ private void _read() private float _float16; private float _float17; private float _float18; - private Sr2CpuChunkPc m_root; - private Sr2CpuChunkPc m_parent; + private Sr2ChunkPc m_root; + private Sr2ChunkPc m_parent; public float Float0 { get { return _float0; } } public float Float1 { get { return _float1; } } public float Float2 { get { return _float2; } } @@ -1239,8 +1647,8 @@ private void _read() public float Float16 { get { return _float16; } } public float Float17 { get { return _float17; } } public float Float18 { get { return _float18; } } - public Sr2CpuChunkPc M_Root { get { return m_root; } } - public Sr2CpuChunkPc M_Parent { get { return m_parent; } } + public Sr2ChunkPc M_Root { get { return m_root; } } + public Sr2ChunkPc M_Parent { get { return m_parent; } } } /// @@ -1253,7 +1661,7 @@ public static Cityobject FromFile(string fileName) return new Cityobject(new KaitaiStream(fileName)); } - public Cityobject(KaitaiStream p__io, Sr2CpuChunkPc p__parent = null, Sr2CpuChunkPc p__root = null) : base(p__io) + public Cityobject(KaitaiStream p__io, Sr2ChunkPc p__parent = null, Sr2ChunkPc p__root = null) : base(p__io) { m_parent = p__parent; m_root = p__root; @@ -1312,8 +1720,8 @@ private void _read() private uint _unk5; private int _unk6; private int _unk7; - private Sr2CpuChunkPc m_root; - private Sr2CpuChunkPc m_parent; + private Sr2ChunkPc m_root; + private Sr2ChunkPc m_parent; public Vec3 BboxMin { get { return _bboxMin; } } public byte[] Unnamed_1 { get { return __unnamed1; } } public Vec3 BboxMax { get { return _bboxMax; } } @@ -1331,17 +1739,17 @@ private void _read() public uint Unk5 { get { return _unk5; } } public int Unk6 { get { return _unk6; } } public int Unk7 { get { return _unk7; } } - public Sr2CpuChunkPc M_Root { get { return m_root; } } - public Sr2CpuChunkPc M_Parent { get { return m_parent; } } + public Sr2ChunkPc M_Root { get { return m_root; } } + public Sr2ChunkPc M_Parent { get { return m_parent; } } } - public partial class Light : KaitaiStruct + public partial class Unknown24 : KaitaiStruct { - public static Light FromFile(string fileName) + public static Unknown24 FromFile(string fileName) { - return new Light(new KaitaiStream(fileName)); + return new Unknown24(new KaitaiStream(fileName)); } - public Light(KaitaiStream p__io, Sr2CpuChunkPc.LightSection p__parent = null, Sr2CpuChunkPc p__root = null) : base(p__io) + public Unknown24(KaitaiStream p__io, Sr2ChunkPc p__parent = null, Sr2ChunkPc p__root = null) : base(p__io) { m_parent = p__parent; m_root = p__root; @@ -1349,233 +1757,39 @@ public Light(KaitaiStream p__io, Sr2CpuChunkPc.LightSection p__parent = null, Sr } private void _read() { - _flags = new Bitflags(m_io, this, m_root); + _boxMin = new Vec3(m_io, this, m_root); + _unk0 = m_io.ReadU4le(); + _boxMax = new Vec3(m_io, this, m_root); _unk1 = m_io.ReadU4le(); - _r = m_io.ReadF4le(); - _g = m_io.ReadF4le(); - _b = m_io.ReadF4le(); - _unk5 = m_io.ReadU4le(); - _unk6 = m_io.ReadU4le(); - _unk7 = m_io.ReadU4le(); - _unk8 = m_io.ReadU4le(); - _unk9 = m_io.ReadS4le(); - _unk10 = m_io.ReadU4le(); - _unk11 = m_io.ReadS4le(); - _unk12 = m_io.ReadU4le(); - _unk13 = m_io.ReadF4le(); - _unk14 = m_io.ReadU4le(); - _pos = new Vec3(m_io, this, m_root); - _unk18 = m_io.ReadF4le(); - _unk19 = m_io.ReadF4le(); - _unk20 = m_io.ReadU4le(); - _unk21 = m_io.ReadU4le(); - _unk22 = m_io.ReadF4le(); - _unk23 = m_io.ReadF4le(); - _unk24 = m_io.ReadF4le(); - _unk25 = m_io.ReadF4le(); - _unk26 = m_io.ReadF4le(); - _unk27 = m_io.ReadF4le(); - _unk28 = m_io.ReadF4le(); - _radiusInner = m_io.ReadF4le(); - _radiusOuter = m_io.ReadF4le(); - _renderDist = m_io.ReadF4le(); - _unk32 = m_io.ReadS4le(); - _unk33 = m_io.ReadS4le(); - _unk34 = m_io.ReadU4le(); - _unk35 = m_io.ReadU4le(); - _unk36 = m_io.ReadU4le(); - } - public partial class Bitflags : KaitaiStruct - { - public static Bitflags FromFile(string fileName) - { - return new Bitflags(new KaitaiStream(fileName)); - } - - public Bitflags(KaitaiStream p__io, Sr2CpuChunkPc.Light p__parent = null, Sr2CpuChunkPc p__root = null) : base(p__io) - { - m_parent = p__parent; - m_root = p__root; - _read(); - } - private void _read() + _unk2 = m_io.ReadU4le(); + __unnamed5 = m_io.ReadBytes(4); + if (!((KaitaiStream.ByteArrayCompare(Unnamed_5, new byte[] { 0, 0, 0, 0 }) == 0))) { - _bit1f = m_io.ReadBitsIntBe(1) != 0; - _bit1e = m_io.ReadBitsIntBe(1) != 0; - _bit1d = m_io.ReadBitsIntBe(1) != 0; - _bit1c = m_io.ReadBitsIntBe(1) != 0; - _bit1b = m_io.ReadBitsIntBe(1) != 0; - _bit1a = m_io.ReadBitsIntBe(1) != 0; - _bit19 = m_io.ReadBitsIntBe(1) != 0; - _bit18 = m_io.ReadBitsIntBe(1) != 0; - _bit17 = m_io.ReadBitsIntBe(1) != 0; - _bit16 = m_io.ReadBitsIntBe(1) != 0; - _bit15 = m_io.ReadBitsIntBe(1) != 0; - _bit14 = m_io.ReadBitsIntBe(1) != 0; - _castShadowsOnPeople = m_io.ReadBitsIntBe(1) != 0; - _castShadowsOnWorld = m_io.ReadBitsIntBe(1) != 0; - _bit11 = m_io.ReadBitsIntBe(1) != 0; - _bit10 = m_io.ReadBitsIntBe(1) != 0; - _bit0f = m_io.ReadBitsIntBe(1) != 0; - _bit0e = m_io.ReadBitsIntBe(1) != 0; - _bit0d = m_io.ReadBitsIntBe(1) != 0; - _bit0c = m_io.ReadBitsIntBe(1) != 0; - _bit0b = m_io.ReadBitsIntBe(1) != 0; - _bit0a = m_io.ReadBitsIntBe(1) != 0; - _bit09 = m_io.ReadBitsIntBe(1) != 0; - _bit08 = m_io.ReadBitsIntBe(1) != 0; - _bit07 = m_io.ReadBitsIntBe(1) != 0; - _bit06 = m_io.ReadBitsIntBe(1) != 0; - _bit05 = m_io.ReadBitsIntBe(1) != 0; - _bit04 = m_io.ReadBitsIntBe(1) != 0; - _bit03 = m_io.ReadBitsIntBe(1) != 0; - _bit02 = m_io.ReadBitsIntBe(1) != 0; - _bit01 = m_io.ReadBitsIntBe(1) != 0; - _bit00 = m_io.ReadBitsIntBe(1) != 0; + throw new ValidationNotEqualError(new byte[] { 0, 0, 0, 0 }, Unnamed_5, M_Io, "/types/unknown24/seq/5"); } - private bool _bit1f; - private bool _bit1e; - private bool _bit1d; - private bool _bit1c; - private bool _bit1b; - private bool _bit1a; - private bool _bit19; - private bool _bit18; - private bool _bit17; - private bool _bit16; - private bool _bit15; - private bool _bit14; - private bool _castShadowsOnPeople; - private bool _castShadowsOnWorld; - private bool _bit11; - private bool _bit10; - private bool _bit0f; - private bool _bit0e; - private bool _bit0d; - private bool _bit0c; - private bool _bit0b; - private bool _bit0a; - private bool _bit09; - private bool _bit08; - private bool _bit07; - private bool _bit06; - private bool _bit05; - private bool _bit04; - private bool _bit03; - private bool _bit02; - private bool _bit01; - private bool _bit00; - private Sr2CpuChunkPc m_root; - private Sr2CpuChunkPc.Light m_parent; - public bool Bit1f { get { return _bit1f; } } - public bool Bit1e { get { return _bit1e; } } - public bool Bit1d { get { return _bit1d; } } - public bool Bit1c { get { return _bit1c; } } - public bool Bit1b { get { return _bit1b; } } - public bool Bit1a { get { return _bit1a; } } - public bool Bit19 { get { return _bit19; } } - public bool Bit18 { get { return _bit18; } } - public bool Bit17 { get { return _bit17; } } - public bool Bit16 { get { return _bit16; } } - public bool Bit15 { get { return _bit15; } } - public bool Bit14 { get { return _bit14; } } - public bool CastShadowsOnPeople { get { return _castShadowsOnPeople; } } - public bool CastShadowsOnWorld { get { return _castShadowsOnWorld; } } - public bool Bit11 { get { return _bit11; } } - public bool Bit10 { get { return _bit10; } } - public bool Bit0f { get { return _bit0f; } } - public bool Bit0e { get { return _bit0e; } } - public bool Bit0d { get { return _bit0d; } } - public bool Bit0c { get { return _bit0c; } } - public bool Bit0b { get { return _bit0b; } } - public bool Bit0a { get { return _bit0a; } } - public bool Bit09 { get { return _bit09; } } - public bool Bit08 { get { return _bit08; } } - public bool Bit07 { get { return _bit07; } } - public bool Bit06 { get { return _bit06; } } - public bool Bit05 { get { return _bit05; } } - public bool Bit04 { get { return _bit04; } } - public bool Bit03 { get { return _bit03; } } - public bool Bit02 { get { return _bit02; } } - public bool Bit01 { get { return _bit01; } } - public bool Bit00 { get { return _bit00; } } - public Sr2CpuChunkPc M_Root { get { return m_root; } } - public Sr2CpuChunkPc.Light M_Parent { get { return m_parent; } } - } - private Bitflags _flags; + _unk4 = m_io.ReadU4le(); + _unk5 = m_io.ReadU4le(); + } + private Vec3 _boxMin; + private uint _unk0; + private Vec3 _boxMax; private uint _unk1; - private float _r; - private float _g; - private float _b; + private uint _unk2; + private byte[] __unnamed5; + private uint _unk4; private uint _unk5; - private uint _unk6; - private uint _unk7; - private uint _unk8; - private int _unk9; - private uint _unk10; - private int _unk11; - private uint _unk12; - private float _unk13; - private uint _unk14; - private Vec3 _pos; - private float _unk18; - private float _unk19; - private uint _unk20; - private uint _unk21; - private float _unk22; - private float _unk23; - private float _unk24; - private float _unk25; - private float _unk26; - private float _unk27; - private float _unk28; - private float _radiusInner; - private float _radiusOuter; - private float _renderDist; - private int _unk32; - private int _unk33; - private uint _unk34; - private uint _unk35; - private uint _unk36; - private Sr2CpuChunkPc m_root; - private Sr2CpuChunkPc.LightSection m_parent; - public Bitflags Flags { get { return _flags; } } + private Sr2ChunkPc m_root; + private Sr2ChunkPc m_parent; + public Vec3 BoxMin { get { return _boxMin; } } + public uint Unk0 { get { return _unk0; } } + public Vec3 BoxMax { get { return _boxMax; } } public uint Unk1 { get { return _unk1; } } - public float R { get { return _r; } } - public float G { get { return _g; } } - public float B { get { return _b; } } + public uint Unk2 { get { return _unk2; } } + public byte[] Unnamed_5 { get { return __unnamed5; } } + public uint Unk4 { get { return _unk4; } } public uint Unk5 { get { return _unk5; } } - public uint Unk6 { get { return _unk6; } } - public uint Unk7 { get { return _unk7; } } - public uint Unk8 { get { return _unk8; } } - public int Unk9 { get { return _unk9; } } - public uint Unk10 { get { return _unk10; } } - public int Unk11 { get { return _unk11; } } - public uint Unk12 { get { return _unk12; } } - public float Unk13 { get { return _unk13; } } - public uint Unk14 { get { return _unk14; } } - public Vec3 Pos { get { return _pos; } } - public float Unk18 { get { return _unk18; } } - public float Unk19 { get { return _unk19; } } - public uint Unk20 { get { return _unk20; } } - public uint Unk21 { get { return _unk21; } } - public float Unk22 { get { return _unk22; } } - public float Unk23 { get { return _unk23; } } - public float Unk24 { get { return _unk24; } } - public float Unk25 { get { return _unk25; } } - public float Unk26 { get { return _unk26; } } - public float Unk27 { get { return _unk27; } } - public float Unk28 { get { return _unk28; } } - public float RadiusInner { get { return _radiusInner; } } - public float RadiusOuter { get { return _radiusOuter; } } - public float RenderDist { get { return _renderDist; } } - public int Unk32 { get { return _unk32; } } - public int Unk33 { get { return _unk33; } } - public uint Unk34 { get { return _unk34; } } - public uint Unk35 { get { return _unk35; } } - public uint Unk36 { get { return _unk36; } } - public Sr2CpuChunkPc M_Root { get { return m_root; } } - public Sr2CpuChunkPc.LightSection M_Parent { get { return m_parent; } } + public Sr2ChunkPc M_Root { get { return m_root; } } + public Sr2ChunkPc M_Parent { get { return m_parent; } } } public partial class MatTexCont : KaitaiStruct { @@ -1584,7 +1798,7 @@ public static MatTexCont FromFile(string fileName) return new MatTexCont(new KaitaiStream(fileName)); } - public MatTexCont(KaitaiStream p__io, Sr2CpuChunkPc p__parent = null, Sr2CpuChunkPc p__root = null) : base(p__io) + public MatTexCont(KaitaiStream p__io, Sr2ChunkPc p__parent = null, Sr2ChunkPc p__root = null) : base(p__io) { m_parent = p__parent; m_root = p__root; @@ -1599,11 +1813,49 @@ private void _read() } } private List _texData; - private Sr2CpuChunkPc m_root; - private Sr2CpuChunkPc m_parent; + private Sr2ChunkPc m_root; + private Sr2ChunkPc m_parent; public List TexData { get { return _texData; } } - public Sr2CpuChunkPc M_Root { get { return m_root; } } - public Sr2CpuChunkPc M_Parent { get { return m_parent; } } + public Sr2ChunkPc M_Root { get { return m_root; } } + public Sr2ChunkPc M_Parent { get { return m_parent; } } + } + public partial class NumLightsType : KaitaiStruct + { + public static NumLightsType FromFile(string fileName) + { + return new NumLightsType(new KaitaiStream(fileName)); + } + + public NumLightsType(KaitaiStream p__io, Sr2ChunkPc p__parent = null, Sr2ChunkPc p__root = null) : base(p__io) + { + m_parent = p__parent; + m_root = p__root; + f_result = false; + _read(); + } + private void _read() + { + _input = m_io.ReadU4le(); + } + private bool f_result; + private uint _result; + public uint Result + { + get + { + if (f_result) + return _result; + _result = (uint) ((Input != 1212891981 ? Input : 0)); + f_result = true; + return _result; + } + } + private uint _input; + private Sr2ChunkPc m_root; + private Sr2ChunkPc m_parent; + public uint Input { get { return _input; } } + public Sr2ChunkPc M_Root { get { return m_root; } } + public Sr2ChunkPc M_Parent { get { return m_parent; } } } public partial class Unknown18 : KaitaiStruct { @@ -1612,7 +1864,7 @@ public static Unknown18 FromFile(string fileName) return new Unknown18(new KaitaiStream(fileName)); } - public Unknown18(KaitaiStream p__io, Sr2CpuChunkPc p__parent = null, Sr2CpuChunkPc p__root = null) : base(p__io) + public Unknown18(KaitaiStream p__io, Sr2ChunkPc p__parent = null, Sr2ChunkPc p__root = null) : base(p__io) { m_parent = p__parent; m_root = p__root; @@ -1653,8 +1905,8 @@ private void _read() private uint _numData2; private byte[] __unnamed8; private List _data2; - private Sr2CpuChunkPc m_root; - private Sr2CpuChunkPc m_parent; + private Sr2ChunkPc m_root; + private Sr2ChunkPc m_parent; public uint Unk0 { get { return _unk0; } } public uint NumData0 { get { return _numData0; } } public byte[] Unnamed_2 { get { return __unnamed2; } } @@ -1665,8 +1917,8 @@ private void _read() public uint NumData2 { get { return _numData2; } } public byte[] Unnamed_8 { get { return __unnamed8; } } public List Data2 { get { return _data2; } } - public Sr2CpuChunkPc M_Root { get { return m_root; } } - public Sr2CpuChunkPc M_Parent { get { return m_parent; } } + public Sr2ChunkPc M_Root { get { return m_root; } } + public Sr2ChunkPc M_Parent { get { return m_parent; } } } /// @@ -1689,7 +1941,7 @@ private void _read() /// public partial class ModelHeader : KaitaiStruct { - public ModelHeader(int p_i, KaitaiStream p__io, Sr2CpuChunkPc p__parent = null, Sr2CpuChunkPc p__root = null) : base(p__io) + public ModelHeader(int p_i, KaitaiStream p__io, Sr2ChunkPc p__parent = null, Sr2ChunkPc p__root = null) : base(p__io) { m_parent = p__parent; m_root = p__root; @@ -1700,7 +1952,7 @@ private void _read() { _type = m_io.ReadU2le(); _vertHeaderCount = m_io.ReadU2le(); - _indexCount = m_io.ReadU4le(); + _numIndices = m_io.ReadU4le(); __unnamed3 = m_io.ReadBytes(4); if (!((KaitaiStream.ByteArrayCompare(Unnamed_3, new byte[] { 255, 255, 255, 255 }) == 0))) { @@ -1719,70 +1971,78 @@ private void _read() } private ushort _type; private ushort _vertHeaderCount; - private uint _indexCount; + private uint _numIndices; private byte[] __unnamed3; private byte[] __unnamed4; private byte[] __unnamed5; private int _i; - private Sr2CpuChunkPc m_root; - private Sr2CpuChunkPc m_parent; + private Sr2ChunkPc m_root; + private Sr2ChunkPc m_parent; public ushort Type { get { return _type; } } public ushort VertHeaderCount { get { return _vertHeaderCount; } } - public uint IndexCount { get { return _indexCount; } } + public uint NumIndices { get { return _numIndices; } } public byte[] Unnamed_3 { get { return __unnamed3; } } public byte[] Unnamed_4 { get { return __unnamed4; } } public byte[] Unnamed_5 { get { return __unnamed5; } } public int I { get { return _i; } } - public Sr2CpuChunkPc M_Root { get { return m_root; } } - public Sr2CpuChunkPc M_Parent { get { return m_parent; } } + public Sr2ChunkPc M_Root { get { return m_root; } } + public Sr2ChunkPc M_Parent { get { return m_parent; } } } - private byte[] __unnamed0; + private byte[] _magic; private byte[] _version; - private uint _header0x8; + private byte[] __unnamed2; private byte[] _meshlibrary; private uint _header0x10; private byte[] _header0x14; - private uint _cityobjectCount; - private uint _unknown23Count; + private byte[] __unnamed6; + private byte[] _headerXx; + private byte[] __unnamed8; + private byte[] _headerXxx; + private byte[] __unnamed10; + private byte[] _headerXxxx; + private uint _lenGChunk1; + private uint _lenGChunk2; + private uint _numCityobjects; + private uint _numUnknown23; private uint _header0x9c; private uint _header0xa0; - private byte[] _header0xa4; - private uint _meshMoverCount; - private uint _unknown27Count; - private uint _unknown28Count; - private uint _unknown29Count; - private uint _unknown30Count; - private uint _unknown31Count; + private byte[] __unnamed18; + private uint _numMeshMovers; + private uint _numUnknown27; + private uint _numUnknown28; + private uint _numUnknown29; + private uint _numUnknown30; + private uint _numUnknown31; private uint _header0xcc; private uint _numUnknown26; - private float _headerWorldpos0X; - private float _headerWorldpos0Y; - private float _headerWorldpos0Z; - private float _header0xe0; - private float _header0xe4; - private float _header0xe8; + private float _worldMinX; + private float _worldMinY; + private float _worldMinZ; + private float _worldMaxX; + private float _worldMaxY; + private float _worldMaxZ; private float _header0xec; - private uint _header0xf0; - private byte[] __unnamed27; + private uint _numUnknown32; + private byte[] __unnamed35; private uint _numTextureNames; - private byte[] __unnamed29; + private byte[] __unnamed37; private List _textureNames; - private Align __unnamed31; + private Align __unnamed39; private uint _numRendermodels; private uint _numCityobjectParts; private uint _modelCount; private uint _numUnknown3s; private uint _numUnknown4s; - private Align __unnamed37; + private Align __unnamed45; private List _rendermodelUnk0s; - private Align __unnamed39; + private Align __unnamed47; private Offset _cityobjectPartsOffset; private List _cityobjectParts; - private Align __unnamed42; + private Align __unnamed50; private List _unknown3s; - private Align __unnamed44; + private Align __unnamed52; private List _unknown4s; - private Align __unnamed46; + private Align __unnamed54; private uint _numUnkWorldpositions; private List _unkWorldpositions; private uint _numUnknown6s; @@ -1791,28 +2051,28 @@ private void _read() private List _unknown7s; private uint _numUnknown8s; private List _unknown8s; - private Align __unnamed55; + private Align __unnamed63; private uint _lenHavokMopp; - private Align __unnamed57; + private Align __unnamed65; private byte[] _havokMopp; - private Align __unnamed59; + private Align __unnamed67; private Vec3 _unknown10min; private Vec3 _unknown10max; - private Align __unnamed62; + private Align __unnamed70; private List _modelHeaders; private List _vertHeaders; - private Align __unnamed65; + private Align __unnamed73; private List _physModels; private uint _numMaterials; - private Align __unnamed68; - private uint _matShaderParamCount; + private Align __unnamed76; + private uint _numMatShaderParams; private byte[] _padMat; - private uint _matUnknown3Count; + private uint _numMatUnknown3s; private uint _matUnknown1; private List _materials; private List _matFlags; private List _matUnknown2; - private Align __unnamed76; + private Align __unnamed84; private List _matShaderParams; private List _matTextures; private List _matUnknown3s; @@ -1820,43 +2080,43 @@ private void _read() private List _rendermodels; private List _cityobjects; private List _cityobjectNames; - private Align __unnamed84; - private uint _unknownNamesLen; + private Align __unnamed92; + private uint _lenUnknownNames; private byte[] _unknownNames; - private Align __unnamed87; - private uint _unknown13Count; + private Align __unnamed95; + private uint _numUnknown13; private List _unknown13; - private Align __unnamed90; - private uint _cdPad17Size; - private byte[] __unnamed92; - private Align __unnamed93; - private uint _unknown18Count; + private Align __unnamed98; + private uint _lenPad17; + private byte[] __unnamed100; + private Align __unnamed101; + private uint _numUnknown18s; private List _unknown18s; - private Align __unnamed96; - private uint _unknown19Count; - private byte[] __unnamed98; + private Align __unnamed104; + private uint _numUnknown19; + private byte[] __unnamed106; private List _unknown19; - private uint _unknown20Count; - private byte[] __unnamed101; + private uint _numUnknown20; + private byte[] __unnamed109; private List _unknown20; - private Align __unnamed103; - private uint _unknown21Count; + private Align __unnamed111; + private uint _numUnknown21; private byte[] _unknown21Pad; private List _unknown21; - private Align __unnamed107; - private uint _unknown22Count; + private Align __unnamed115; + private uint _numUnknown22; private List _unknown22; - private Align __unnamed110; + private Align __unnamed118; private List _unknown23; - private uint _unknown24Count; - private byte[] __unnamed113; - private uint _unknown25Count; - private byte[] __unnamed115; - private List _unknown24; + private uint _numUnknown24s; + private byte[] __unnamed121; + private uint _numUnknown25; + private byte[] __unnamed123; + private List _unknown24s; private List _unknown25; - private Align __unnamed118; + private Align __unnamed126; private List _unknown26; - private Align __unnamed120; + private Align __unnamed128; private List _meshMovers; private List _unknown27; private List _unknown28; @@ -1865,59 +2125,72 @@ private void _read() private List _unknown31; private List _unknown32; private List _meshMoverNames; - private Align __unnamed129; - private uint _lightCount; + private Align __unnamed137; + private NumLightsType _numLights; private Offset _lightsOffset; - private LightSection _lightSections; - private Sr2CpuChunkPc m_root; + private uint? _lightUnknown; + private List _lightData; + private List _lightNames; + private Align __unnamed143; + private List _lightUnkfloats; + private Align __unnamed145; + private Sr2ChunkPc m_root; private KaitaiStruct m_parent; - public byte[] Unnamed_0 { get { return __unnamed0; } } + public byte[] Magic { get { return _magic; } } public byte[] Version { get { return _version; } } - public uint Header0x8 { get { return _header0x8; } } + public byte[] Unnamed_2 { get { return __unnamed2; } } public byte[] Meshlibrary { get { return _meshlibrary; } } public uint Header0x10 { get { return _header0x10; } } public byte[] Header0x14 { get { return _header0x14; } } - public uint CityobjectCount { get { return _cityobjectCount; } } - public uint Unknown23Count { get { return _unknown23Count; } } + public byte[] Unnamed_6 { get { return __unnamed6; } } + public byte[] HeaderXx { get { return _headerXx; } } + public byte[] Unnamed_8 { get { return __unnamed8; } } + public byte[] HeaderXxx { get { return _headerXxx; } } + public byte[] Unnamed_10 { get { return __unnamed10; } } + public byte[] HeaderXxxx { get { return _headerXxxx; } } + public uint LenGChunk1 { get { return _lenGChunk1; } } + public uint LenGChunk2 { get { return _lenGChunk2; } } + public uint NumCityobjects { get { return _numCityobjects; } } + public uint NumUnknown23 { get { return _numUnknown23; } } public uint Header0x9c { get { return _header0x9c; } } public uint Header0xa0 { get { return _header0xa0; } } - public byte[] Header0xa4 { get { return _header0xa4; } } - public uint MeshMoverCount { get { return _meshMoverCount; } } - public uint Unknown27Count { get { return _unknown27Count; } } - public uint Unknown28Count { get { return _unknown28Count; } } - public uint Unknown29Count { get { return _unknown29Count; } } - public uint Unknown30Count { get { return _unknown30Count; } } - public uint Unknown31Count { get { return _unknown31Count; } } + public byte[] Unnamed_18 { get { return __unnamed18; } } + public uint NumMeshMovers { get { return _numMeshMovers; } } + public uint NumUnknown27 { get { return _numUnknown27; } } + public uint NumUnknown28 { get { return _numUnknown28; } } + public uint NumUnknown29 { get { return _numUnknown29; } } + public uint NumUnknown30 { get { return _numUnknown30; } } + public uint NumUnknown31 { get { return _numUnknown31; } } public uint Header0xcc { get { return _header0xcc; } } public uint NumUnknown26 { get { return _numUnknown26; } } - public float HeaderWorldpos0X { get { return _headerWorldpos0X; } } - public float HeaderWorldpos0Y { get { return _headerWorldpos0Y; } } - public float HeaderWorldpos0Z { get { return _headerWorldpos0Z; } } - public float Header0xe0 { get { return _header0xe0; } } - public float Header0xe4 { get { return _header0xe4; } } - public float Header0xe8 { get { return _header0xe8; } } + public float WorldMinX { get { return _worldMinX; } } + public float WorldMinY { get { return _worldMinY; } } + public float WorldMinZ { get { return _worldMinZ; } } + public float WorldMaxX { get { return _worldMaxX; } } + public float WorldMaxY { get { return _worldMaxY; } } + public float WorldMaxZ { get { return _worldMaxZ; } } public float Header0xec { get { return _header0xec; } } - public uint Header0xf0 { get { return _header0xf0; } } - public byte[] Unnamed_27 { get { return __unnamed27; } } + public uint NumUnknown32 { get { return _numUnknown32; } } + public byte[] Unnamed_35 { get { return __unnamed35; } } public uint NumTextureNames { get { return _numTextureNames; } } - public byte[] Unnamed_29 { get { return __unnamed29; } } + public byte[] Unnamed_37 { get { return __unnamed37; } } public List TextureNames { get { return _textureNames; } } - public Align Unnamed_31 { get { return __unnamed31; } } + public Align Unnamed_39 { get { return __unnamed39; } } public uint NumRendermodels { get { return _numRendermodels; } } public uint NumCityobjectParts { get { return _numCityobjectParts; } } public uint ModelCount { get { return _modelCount; } } public uint NumUnknown3s { get { return _numUnknown3s; } } public uint NumUnknown4s { get { return _numUnknown4s; } } - public Align Unnamed_37 { get { return __unnamed37; } } + public Align Unnamed_45 { get { return __unnamed45; } } public List RendermodelUnk0s { get { return _rendermodelUnk0s; } } - public Align Unnamed_39 { get { return __unnamed39; } } + public Align Unnamed_47 { get { return __unnamed47; } } public Offset CityobjectPartsOffset { get { return _cityobjectPartsOffset; } } public List CityobjectParts { get { return _cityobjectParts; } } - public Align Unnamed_42 { get { return __unnamed42; } } + public Align Unnamed_50 { get { return __unnamed50; } } public List Unknown3s { get { return _unknown3s; } } - public Align Unnamed_44 { get { return __unnamed44; } } + public Align Unnamed_52 { get { return __unnamed52; } } public List Unknown4s { get { return _unknown4s; } } - public Align Unnamed_46 { get { return __unnamed46; } } + public Align Unnamed_54 { get { return __unnamed54; } } public uint NumUnkWorldpositions { get { return _numUnkWorldpositions; } } public List UnkWorldpositions { get { return _unkWorldpositions; } } public uint NumUnknown6s { get { return _numUnknown6s; } } @@ -1926,28 +2199,28 @@ private void _read() public List Unknown7s { get { return _unknown7s; } } public uint NumUnknown8s { get { return _numUnknown8s; } } public List Unknown8s { get { return _unknown8s; } } - public Align Unnamed_55 { get { return __unnamed55; } } + public Align Unnamed_63 { get { return __unnamed63; } } public uint LenHavokMopp { get { return _lenHavokMopp; } } - public Align Unnamed_57 { get { return __unnamed57; } } + public Align Unnamed_65 { get { return __unnamed65; } } public byte[] HavokMopp { get { return _havokMopp; } } - public Align Unnamed_59 { get { return __unnamed59; } } + public Align Unnamed_67 { get { return __unnamed67; } } public Vec3 Unknown10min { get { return _unknown10min; } } public Vec3 Unknown10max { get { return _unknown10max; } } - public Align Unnamed_62 { get { return __unnamed62; } } + public Align Unnamed_70 { get { return __unnamed70; } } public List ModelHeaders { get { return _modelHeaders; } } public List VertHeaders { get { return _vertHeaders; } } - public Align Unnamed_65 { get { return __unnamed65; } } + public Align Unnamed_73 { get { return __unnamed73; } } public List PhysModels { get { return _physModels; } } public uint NumMaterials { get { return _numMaterials; } } - public Align Unnamed_68 { get { return __unnamed68; } } - public uint MatShaderParamCount { get { return _matShaderParamCount; } } + public Align Unnamed_76 { get { return __unnamed76; } } + public uint NumMatShaderParams { get { return _numMatShaderParams; } } public byte[] PadMat { get { return _padMat; } } - public uint MatUnknown3Count { get { return _matUnknown3Count; } } + public uint NumMatUnknown3s { get { return _numMatUnknown3s; } } public uint MatUnknown1 { get { return _matUnknown1; } } public List Materials { get { return _materials; } } public List MatFlags { get { return _matFlags; } } public List MatUnknown2 { get { return _matUnknown2; } } - public Align Unnamed_76 { get { return __unnamed76; } } + public Align Unnamed_84 { get { return __unnamed84; } } public List MatShaderParams { get { return _matShaderParams; } } public List MatTextures { get { return _matTextures; } } public List MatUnknown3s { get { return _matUnknown3s; } } @@ -1955,43 +2228,43 @@ private void _read() public List Rendermodels { get { return _rendermodels; } } public List Cityobjects { get { return _cityobjects; } } public List CityobjectNames { get { return _cityobjectNames; } } - public Align Unnamed_84 { get { return __unnamed84; } } - public uint UnknownNamesLen { get { return _unknownNamesLen; } } + public Align Unnamed_92 { get { return __unnamed92; } } + public uint LenUnknownNames { get { return _lenUnknownNames; } } public byte[] UnknownNames { get { return _unknownNames; } } - public Align Unnamed_87 { get { return __unnamed87; } } - public uint Unknown13Count { get { return _unknown13Count; } } + public Align Unnamed_95 { get { return __unnamed95; } } + public uint NumUnknown13 { get { return _numUnknown13; } } public List Unknown13 { get { return _unknown13; } } - public Align Unnamed_90 { get { return __unnamed90; } } - public uint CdPad17Size { get { return _cdPad17Size; } } - public byte[] Unnamed_92 { get { return __unnamed92; } } - public Align Unnamed_93 { get { return __unnamed93; } } - public uint Unknown18Count { get { return _unknown18Count; } } + public Align Unnamed_98 { get { return __unnamed98; } } + public uint LenPad17 { get { return _lenPad17; } } + public byte[] Unnamed_100 { get { return __unnamed100; } } + public Align Unnamed_101 { get { return __unnamed101; } } + public uint NumUnknown18s { get { return _numUnknown18s; } } public List Unknown18s { get { return _unknown18s; } } - public Align Unnamed_96 { get { return __unnamed96; } } - public uint Unknown19Count { get { return _unknown19Count; } } - public byte[] Unnamed_98 { get { return __unnamed98; } } + public Align Unnamed_104 { get { return __unnamed104; } } + public uint NumUnknown19 { get { return _numUnknown19; } } + public byte[] Unnamed_106 { get { return __unnamed106; } } public List Unknown19 { get { return _unknown19; } } - public uint Unknown20Count { get { return _unknown20Count; } } - public byte[] Unnamed_101 { get { return __unnamed101; } } + public uint NumUnknown20 { get { return _numUnknown20; } } + public byte[] Unnamed_109 { get { return __unnamed109; } } public List Unknown20 { get { return _unknown20; } } - public Align Unnamed_103 { get { return __unnamed103; } } - public uint Unknown21Count { get { return _unknown21Count; } } + public Align Unnamed_111 { get { return __unnamed111; } } + public uint NumUnknown21 { get { return _numUnknown21; } } public byte[] Unknown21Pad { get { return _unknown21Pad; } } public List Unknown21 { get { return _unknown21; } } - public Align Unnamed_107 { get { return __unnamed107; } } - public uint Unknown22Count { get { return _unknown22Count; } } + public Align Unnamed_115 { get { return __unnamed115; } } + public uint NumUnknown22 { get { return _numUnknown22; } } public List Unknown22 { get { return _unknown22; } } - public Align Unnamed_110 { get { return __unnamed110; } } + public Align Unnamed_118 { get { return __unnamed118; } } public List Unknown23 { get { return _unknown23; } } - public uint Unknown24Count { get { return _unknown24Count; } } - public byte[] Unnamed_113 { get { return __unnamed113; } } - public uint Unknown25Count { get { return _unknown25Count; } } - public byte[] Unnamed_115 { get { return __unnamed115; } } - public List Unknown24 { get { return _unknown24; } } + public uint NumUnknown24s { get { return _numUnknown24s; } } + public byte[] Unnamed_121 { get { return __unnamed121; } } + public uint NumUnknown25 { get { return _numUnknown25; } } + public byte[] Unnamed_123 { get { return __unnamed123; } } + public List Unknown24s { get { return _unknown24s; } } public List Unknown25 { get { return _unknown25; } } - public Align Unnamed_118 { get { return __unnamed118; } } + public Align Unnamed_126 { get { return __unnamed126; } } public List Unknown26 { get { return _unknown26; } } - public Align Unnamed_120 { get { return __unnamed120; } } + public Align Unnamed_128 { get { return __unnamed128; } } public List MeshMovers { get { return _meshMovers; } } public List Unknown27 { get { return _unknown27; } } public List Unknown28 { get { return _unknown28; } } @@ -2000,11 +2273,16 @@ private void _read() public List Unknown31 { get { return _unknown31; } } public List Unknown32 { get { return _unknown32; } } public List MeshMoverNames { get { return _meshMoverNames; } } - public Align Unnamed_129 { get { return __unnamed129; } } - public uint LightCount { get { return _lightCount; } } + public Align Unnamed_137 { get { return __unnamed137; } } + public NumLightsType NumLights { get { return _numLights; } } public Offset LightsOffset { get { return _lightsOffset; } } - public LightSection LightSections { get { return _lightSections; } } - public Sr2CpuChunkPc M_Root { get { return m_root; } } + public uint? LightUnknown { get { return _lightUnknown; } } + public List LightData { get { return _lightData; } } + public List LightNames { get { return _lightNames; } } + public Align Unnamed_143 { get { return __unnamed143; } } + public List LightUnkfloats { get { return _lightUnkfloats; } } + public Align Unnamed_145 { get { return __unnamed145; } } + public Sr2ChunkPc M_Root { get { return m_root; } } public KaitaiStruct M_Parent { get { return m_parent; } } } } diff --git a/ui/stylebox_panel2.tres b/ui/stylebox_panel2.tres new file mode 100644 index 0000000..894c044 --- /dev/null +++ b/ui/stylebox_panel2.tres @@ -0,0 +1,14 @@ +[gd_resource type="StyleBoxFlat" format=2] + +[resource] +content_margin_left = 4.0 +content_margin_right = 4.0 +content_margin_top = 4.0 +content_margin_bottom = 4.0 +bg_color = Color( 0.227451, 0.239216, 0.258824, 1 ) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color( 0, 0, 0, 1 ) +border_blend = true diff --git a/ui/stylebox_selected_text.tres b/ui/stylebox_selected_text.tres new file mode 100644 index 0000000..61adeaa --- /dev/null +++ b/ui/stylebox_selected_text.tres @@ -0,0 +1,4 @@ +[gd_resource type="StyleBoxFlat" format=2] + +[resource] +bg_color = Color( 0.513726, 0.721569, 0.858824, 1 ) diff --git a/ui/stylebox_tab_bg.tres b/ui/stylebox_tab_bg.tres new file mode 100644 index 0000000..cde5b1c --- /dev/null +++ b/ui/stylebox_tab_bg.tres @@ -0,0 +1,12 @@ +[gd_resource type="StyleBoxFlat" format=2] + +[resource] +content_margin_left = 4.0 +content_margin_right = 4.0 +content_margin_top = 4.0 +bg_color = Color( 0.227451, 0.239216, 0.258824, 1 ) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_color = Color( 0, 0, 0, 1 ) +border_blend = true diff --git a/ui/stylebox_tab_disabled.tres b/ui/stylebox_tab_disabled.tres new file mode 100644 index 0000000..1b71006 --- /dev/null +++ b/ui/stylebox_tab_disabled.tres @@ -0,0 +1,12 @@ +[gd_resource type="StyleBoxFlat" format=2] + +[resource] +content_margin_left = 4.0 +content_margin_right = 4.0 +content_margin_top = 4.0 +bg_color = Color( 0.2112, 0.22176, 0.24, 1 ) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_color = Color( 0, 0, 0, 0 ) +border_blend = true diff --git a/ui/stylebox_tab_fg.tres b/ui/stylebox_tab_fg.tres new file mode 100644 index 0000000..4fca86a --- /dev/null +++ b/ui/stylebox_tab_fg.tres @@ -0,0 +1,18 @@ +[gd_resource type="StyleBoxFlat" format=2] + +[resource] +content_margin_left = 4.0 +content_margin_right = 4.0 +content_margin_top = 4.0 +bg_color = Color( 0.227451, 0.239216, 0.258824, 1 ) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_color = Color( 0, 0, 0, 1 ) +border_blend = true +corner_radius_top_left = 4 +corner_radius_top_right = 4 +expand_margin_left = 1.0 +expand_margin_right = 1.0 +expand_margin_top = 1.0 +expand_margin_bottom = 1.0 diff --git a/ui/theme_2008.tres b/ui/theme_2008.tres index e1a113b..d238de2 100644 --- a/ui/theme_2008.tres +++ b/ui/theme_2008.tres @@ -1,19 +1,14 @@ -[gd_resource type="Theme" load_steps=7 format=2] +[gd_resource type="Theme" load_steps=10 format=2] [ext_resource path="res://ui/stylebox_2008_button_pressed.tres" type="StyleBox" id=1] [ext_resource path="res://ui/stylebox_2008_button_normal.tres" type="StyleBox" id=2] [ext_resource path="res://ui/stylebox_2008_button_hover.tres" type="StyleBox" id=3] [ext_resource path="res://font/general.tres" type="DynamicFont" id=4] +[ext_resource path="res://ui/stylebox_tab_bg.tres" type="StyleBox" id=5] [ext_resource path="res://ui/stylebox_panel.tres" type="StyleBox" id=6] - -[sub_resource type="StyleBoxFlat" id=2] -bg_color = Color( 0.227451, 0.239216, 0.258824, 1 ) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color( 0, 0, 0, 1 ) -border_blend = true +[ext_resource path="res://ui/stylebox_tab_fg.tres" type="StyleBox" id=7] +[ext_resource path="res://ui/stylebox_panel2.tres" type="StyleBox" id=8] +[ext_resource path="res://ui/stylebox_tab_disabled.tres" type="StyleBox" id=9] [resource] default_font = ExtResource( 4 ) @@ -22,4 +17,8 @@ Button/styles/normal = ExtResource( 2 ) Button/styles/pressed = ExtResource( 1 ) Panel/styles/panel = ExtResource( 6 ) PanelContainer/styles/panel = ExtResource( 6 ) -Tree/styles/bg = SubResource( 2 ) +TabContainer/styles/panel = ExtResource( 8 ) +TabContainer/styles/tab_bg = ExtResource( 5 ) +TabContainer/styles/tab_disabled = ExtResource( 9 ) +TabContainer/styles/tab_fg = ExtResource( 7 ) +Tree/styles/bg = ExtResource( 8 )