public tag_block_definition(BinaryReader reader) : this() { // Read all the fields from the stream. this.display_name_address = reader.ReadInt32(); this.name_address = reader.ReadInt32(); this.flags = reader.ReadInt32(); this.maximum_element_count = reader.ReadInt32(); this.maximum_element_count_string_address = reader.ReadInt32(); this.field_sets_address = reader.ReadInt32(); this.field_set_count = reader.ReadInt32(); this.field_set_latest_address = reader.ReadInt32(); reader.BaseStream.Position += 4; this.postprocess_proc = reader.ReadInt32(); this.format_proc = reader.ReadInt32(); this.generate_default_proc = reader.ReadInt32(); this.dispose_element_proc = reader.ReadInt32(); // Read the display name and name strings. this.display_name = Guerilla.ReadString(reader, this.display_name_address); this.name = Guerilla.ReadString(reader, this.name_address); this.maximum_element_count_str = Guerilla.ReadString(reader, this.maximum_element_count_string_address); if (name == "sound_block") { this.field_sets_address = 0x957870; FieldSets = new List<tag_field_set>(1); var fieldSet = new tag_field_set(); //definition.field_set_latest_address = 0x906178; fieldSet.version.fields_address = 0x906178; fieldSet.version.index = 0; fieldSet.version.upgrade_proc = 0; fieldSet.version.size_of = -1; fieldSet.size = 172; fieldSet.alignment_bit = 0; fieldSet.parent_version_index = -1; fieldSet.fields_address = 0x906178; fieldSet.size_string_address = 0x00795330; fieldSet.size_string = "sizeof(sound_definition)"; var definitionName = this.name; fieldSet.ReadFields(reader, Guerilla.PostprocessFunctions.Where(x => x.Key == definitionName).Select(x => x.Value).FirstOrDefault()); LatestFieldSet = fieldSet; FieldSets.Add(fieldSet); } else { FieldSets = new List<tag_field_set>(field_set_count); var definitionName = this.name; var address = field_sets_address; for (var i = 0; i < field_set_count; ++i) { reader.BaseStream.Seek(address, SeekOrigin.Begin); var fieldSet = new tag_field_set(reader); FieldSets.Add(fieldSet); address += tag_field_set.Size; } if (this.name == "sound_promotion_parameters_struct_block") { LatestFieldSet = FieldSets[0]; } else { reader.BaseStream.Seek(this.field_set_latest_address, SeekOrigin.Begin); var latestFieldSet = new tag_field_set(reader, Guerilla.PostprocessFunctions.Where(x => x.Key == definitionName).Select(x => x.Value).FirstOrDefault()); LatestFieldSet = latestFieldSet; } } }
public void Read(IntPtr h2LangLib, BinaryReader reader) { this = new tag_field_set(reader); }
public void Read(BinaryReader reader) { this = new tag_field_set(reader); }
public TagBlockDefinition(BinaryReader reader) : this() { // Read all the fields from the stream. display_name_address = reader.ReadInt32(); name_address = reader.ReadInt32(); flags = reader.ReadInt32(); maximum_element_count = reader.ReadInt32(); maximum_element_count_string_address = reader.ReadInt32(); field_sets_address = reader.ReadInt32(); field_set_count = reader.ReadInt32(); field_set_latest_address = reader.ReadInt32(); reader.BaseStream.Position += 4; postprocess_proc = reader.ReadInt32(); format_proc = reader.ReadInt32(); generate_default_proc = reader.ReadInt32(); dispose_element_proc = reader.ReadInt32(); // Read the display name and name strings. display_name = Guerilla.ReadString(reader, display_name_address); name = Guerilla.ReadString(reader, name_address); maximum_element_count_str = Guerilla.ReadString(reader, maximum_element_count_string_address); if (name == "sound_block") { field_sets_address = 0x957870; field_set_latest_address = 0x906178; FieldSets = new List <tag_field_set>(1); var fieldSet = new tag_field_set { version = { fields_address = 0x906178, index = 0, upgrade_proc = 0, size_of = -1 }, size = 172, alignment_bit = 0, parent_version_index = -1, fields_address = 0x906178, size_string_address = 0x00795330, size_string = "sizeof(sound_definition)" }; var definitionName = name; fieldSet.ReadFields(reader, Guerilla.PostprocessFunctions.Where(x => x.Key == definitionName) .Select(x => x.Value) .FirstOrDefault()); LatestFieldSet = fieldSet; FieldSets.Add(fieldSet); } else { FieldSets = new List <tag_field_set>(field_set_count); var definitionName = name; var address = field_sets_address; for (var i = 0; i < field_set_count; ++i) { reader.BaseStream.Seek(address, SeekOrigin.Begin); var fieldSet = new tag_field_set(reader); FieldSets.Add(fieldSet); address += tag_field_set.Size; } switch (name) { case "materials_block": LatestFieldSet = FieldSets[0]; if (LatestFieldSet.Fields.Count == 5) { name = "phmo_materials_block"; definitionName = "phmo_materials_block"; } break; case "hud_globals_block": LatestFieldSet = FieldSets[0]; break; case "global_new_hud_globals_struct_block": LatestFieldSet = FieldSets[0]; break; case "sound_promotion_parameters_struct_block": LatestFieldSet = FieldSets[0]; break; case "animation_pool_block": LatestFieldSet = FieldSets[4]; break; case "sound_gestalt_promotions_block": LatestFieldSet = FieldSets[0]; break; case "sound_block": LatestFieldSet = FieldSets[0]; break; case "tag_block_index_struct_block": LatestFieldSet = FieldSets[0]; break; case "vertex_shader_classification_block": LatestFieldSet = FieldSets[0]; break; default: reader.BaseStream.Seek(field_set_latest_address, SeekOrigin.Begin); var latestFieldSet = new tag_field_set(reader, Guerilla.PostprocessFunctions.Where(x => x.Key == definitionName) .Select(x => x.Value) .FirstOrDefault()); LatestFieldSet = latestFieldSet; break; } } }
public static List <tag_field> ReadFieldSet(this BinaryReader reader, ref TagBlockDefinition definition, out tag_field_set field_set) { field_set = new tag_field_set(); if (definition.Name == "sound_block") { definition.field_sets_address = 0x957870; //definition.field_set_latest_address = 0x906178; field_set.version.fields_address = 0x906178; field_set.version.index = 0; field_set.version.upgrade_proc = 0; field_set.version.size_of = -1; field_set.size = 172; field_set.alignment_bit = 0; field_set.parent_version_index = -1; field_set.fields_address = 0x906178; field_set.size_string_address = 0x00795330; field_set.size_string = "sizeof(sound_definition)"; } else { // We are going to use the latest tag_field_set for right now. if (definition.Name == "animation_pool_block") { reader.BaseStream.Position = definition.field_sets_address + ((definition.field_set_count - 2) * 76) - Guerilla.BaseAddress; } else if (definition.Name == "decorator_cache_block_data_block") { reader.BaseStream.Position = definition.field_sets_address + ((definition.field_set_count - 1) * 76) - Guerilla.BaseAddress; } else { reader.BaseStream.Position = definition.field_set_latest_address - Guerilla.BaseAddress; } field_set = reader.ReadFieldDefinition <tag_field_set>(); } // Seek to the field set address. reader.BaseStream.Position = field_set.fields_address - Guerilla.BaseAddress; var fields = new List <tag_field>(); var field = new tag_field(); do { long currentAddress = reader.BaseStream.Position; field = reader.ReadFieldDefinition <tag_field>(); fields.Add(field); // Seek to the next tag_field. reader.BaseStream.Position = currentAddress + 16;// sizeof(tag_field); }while (field.type != field_type._field_terminator); var blockName = definition.Name; var methods = (from method in Assembly.GetExecutingAssembly().GetTypes().SelectMany(x => x.GetMethods(BindingFlags.NonPublic | BindingFlags.Static)) where method.IsDefined(typeof(GuerillaPreProcessMethodAttribute), false) from attribute in method.GetCustomAttributes(typeof(GuerillaPreProcessMethodAttribute), false) where (attribute as GuerillaPreProcessMethodAttribute).BlockName == blockName select method).ToArray(); if (methods.Count() > 0) { methods[0].Invoke(null, new object[] { reader, fields }); } return(fields); }
public void Read(IntPtr h2LangLib, BinaryReader reader) { this = new tag_field_set(reader); }
public TagBlockDefinition(BinaryReader reader) : this() { // Read all the fields from the stream. this.display_name_address = reader.ReadInt32(); this.name_address = reader.ReadInt32(); this.flags = reader.ReadInt32(); this.maximum_element_count = reader.ReadInt32(); this.maximum_element_count_string_address = reader.ReadInt32(); this.field_sets_address = reader.ReadInt32(); this.field_set_count = reader.ReadInt32(); this.field_set_latest_address = reader.ReadInt32(); reader.BaseStream.Position += 4; this.postprocess_proc = reader.ReadInt32(); this.format_proc = reader.ReadInt32(); this.generate_default_proc = reader.ReadInt32(); this.dispose_element_proc = reader.ReadInt32(); // Read the display name and name strings. this.display_name = Guerilla.ReadString(reader, this.display_name_address); this.name = Guerilla.ReadString(reader, this.name_address); this.maximum_element_count_str = Guerilla.ReadString(reader, this.maximum_element_count_string_address); if (name == "sound_block") { this.field_sets_address = 0x957870; FieldSets = new List <tag_field_set>(1); var fieldSet = new tag_field_set(); //definition.field_set_latest_address = 0x906178; fieldSet.version.fields_address = 0x906178; fieldSet.version.index = 0; fieldSet.version.upgrade_proc = 0; fieldSet.version.size_of = -1; fieldSet.size = 172; fieldSet.alignment_bit = 0; fieldSet.parent_version_index = -1; fieldSet.fields_address = 0x906178; fieldSet.size_string_address = 0x00795330; fieldSet.size_string = "sizeof(sound_definition)"; var definitionName = this.name; fieldSet.ReadFields(reader, Guerilla.PostprocessFunctions.Where(x => x.Key == definitionName).Select(x => x.Value).FirstOrDefault()); LatestFieldSet = fieldSet; FieldSets.Add(fieldSet); } else { FieldSets = new List <tag_field_set>(field_set_count); var definitionName = this.name; var address = field_sets_address; for (var i = 0; i < field_set_count; ++i) { reader.BaseStream.Seek(address, SeekOrigin.Begin); var fieldSet = new tag_field_set(reader); FieldSets.Add(fieldSet); address += tag_field_set.Size; } if (this.name == "sound_promotion_parameters_struct_block") { LatestFieldSet = FieldSets[0]; } else { reader.BaseStream.Seek(this.field_set_latest_address, SeekOrigin.Begin); var latestFieldSet = new tag_field_set(reader, Guerilla.PostprocessFunctions.Where(x => x.Key == definitionName).Select(x => x.Value).FirstOrDefault()); LatestFieldSet = latestFieldSet; } } }