public TSOScript read_script() { TSOScript script = new TSOScript(); script.name = ReadString(); UInt32 line_count = reader.ReadUInt32(); string[] read_lines = new string[line_count]; for (int i = 0; i < line_count; i++) { read_lines[i] = ReadString(); } script.script_data = read_lines; return(script); }
public TSOScript read_sub_script() { TSOScript sub_script = new TSOScript(); sub_script.name = ReadString(); sub_script.file = ReadString(); UInt32 sub_line_counts = reader.ReadUInt32(); sub_script.script_data = new string[sub_line_counts]; for (int j = 0; j < sub_line_counts; j++) { sub_script.script_data[j] = ReadString(); } //Console.WriteLine("name {0} file {1}", sub_script.name, sub_script.file); sub_script.shader = new Shader(); sub_script.shader.Load(sub_script.script_data); return(sub_script); }
public int Load(Stream source_stream) { try { reader = new BinaryReader(source_stream, System.Text.Encoding.Default); } catch (Exception) { Console.WriteLine("Error: This file cannot be read or does not exist."); return(-1); } byte[] file_header = new byte[4]; file_header = reader.ReadBytes(4); if (!System.Text.Encoding.ASCII.GetString(file_header).Contains("TSO1")) { Console.WriteLine("Error: This seems not to be a TSO file."); } int node_count = reader.ReadInt32(); nodes = new TSONode[node_count]; nodemap = new Dictionary <string, TSONode>(); for (int i = 0; i < node_count; i++) { nodes[i] = new TSONode(); nodes[i].id = i; nodes[i].name = ReadString(); nodes[i].sname = nodes[i].name.Substring(nodes[i].name.LastIndexOf('|') + 1); nodemap.Add(nodes[i].name, nodes[i]); //Console.WriteLine(i + ": " + nodes[i].sname); } for (int i = 0; i < node_count; i++) { int index = nodes[i].name.LastIndexOf('|'); if (index <= 0) { continue; } string pname = nodes[i].name.Substring(0, index); nodes[i].parent = nodemap[pname]; nodes[i].parent.child_nodes.Add(nodes[i]); } { TSONode node; if (nodemap.TryGetValue("|W_Hips|W_Spine_Dummy|W_Spine1|W_Spine2|W_Spine3|Chichi_Right1", out node)) { node.SlowChildren(); } if (nodemap.TryGetValue("|W_Hips|W_Spine_Dummy|W_Spine1|W_Spine2|W_Spine3|Chichi_Left1", out node)) { node.SlowChildren(); } } int node_matrix_count = reader.ReadInt32(); for (int i = 0; i < node_matrix_count; i++) { nodes[i].transformation_matrix = ReadMatrix(); } for (int i = 0; i < node_matrix_count; i++) { nodes[i].ComputeOffsetMatrix(); } UInt32 texture_count = reader.ReadUInt32(); textures = new TSOTex[texture_count]; for (int i = 0; i < texture_count; i++) { textures[i] = read_texture(); } UInt32 script_count = reader.ReadUInt32(); scripts = new TSOScript[script_count]; for (int i = 0; i < script_count; i++) { scripts[i] = read_script(); } UInt32 sub_script_count = reader.ReadUInt32(); TSOScript[] sub_scripts = new TSOScript[sub_script_count]; for (int i = 0; i < sub_script_count; i++) { sub_scripts[i] = read_sub_script(); } scripts[0].sub_scripts = sub_scripts; UInt32 mesh_count = reader.ReadUInt32(); meshes = new TSOMesh[mesh_count]; for (int i = 0; i < mesh_count; i++) { TSOMesh mesh = read_mesh(); meshes[i] = mesh; //Console.WriteLine("mesh name {0} len {1}", mesh.name, mesh.sub_meshes.Length); } reader.Close(); return(0); }