public void Sub9F3900(BinaryReader br, int count, string mapFileNameWithoutExtension, bool removeExisting) { if (count <= 0) { return; } for (var i = 0; i < count; ++i) { var blockCrc = br.ReadInt32(); var strLen = br.ReadUInt16(); var blockName = ""; if (strLen > 0) { blockName = br.ReadStringWithMaxLength(strLen); } var fArr1 = new float[3]; fArr1[0] = br.ReadSingle(); fArr1[1] = br.ReadSingle(); fArr1[2] = br.ReadSingle(); var fArr2 = new float[3]; fArr2[0] = br.ReadSingle(); fArr2[1] = br.ReadSingle(); fArr2[2] = br.ReadSingle(); br.ReadInt16(); var v22 = br.ReadInt16(); if (v22 >= 2) { var block = new StreamBlock(); block.ReadTextureInfo(br); block.ReadTOCs(br); } } }
public void LoadBlocksFromMapFile(BinaryReader br, int count, string mapFileNameWithoutExtension, bool removeExisting) { if (count <= 0) { return; } for (var i = 0; i < count; ++i) { var blockCrc = br.ReadInt32(); var strLen = br.ReadUInt16(); var blockName = ""; if (strLen > 0) { blockName = br.ReadStringWithMaxLength(strLen); } var fArr1 = new float[3]; fArr1[0] = br.ReadSingle(); fArr1[1] = br.ReadSingle(); fArr1[2] = br.ReadSingle(); var fArr2 = new float[3]; fArr2[0] = br.ReadSingle(); fArr2[1] = br.ReadSingle(); fArr2[2] = br.ReadSingle(); br.ReadInt16(); var v22 = br.ReadInt16(); if (removeExisting && m_DynamicBlocks.ContainsKey(blockCrc)) { m_DynamicBlocks.Remove(blockCrc); } var block = new StreamBlock(); block.Flags |= 8; block.m_nId = blockCrc; block.SetFileNameFromFormat(@"{0}\{1}", mapFileNameWithoutExtension, blockName); // Do not override it. If removeExisting is true, existing ones will be removed if (!m_DynamicBlocks.ContainsKey(blockCrc)) { m_DynamicBlocks.Add(blockCrc, block); } else { Console.WriteLine($"DEBUG: Trying to add {blockCrc} (${block.FileName}) to dictionary, but it already exists!"); } block.FieldCC = fArr1[0]; block.FieldD0 = 0.0f; block.FieldD4 = fArr1[2]; block.FieldDC = fArr2[0]; block.FieldE0 = 0.0f; block.FieldE4 = fArr2[2]; block.Flags = (block.Flags & 0xFFFFE33F) | (uint)((v22 & 7) << 10); block.FieldA4 = UnkCalc(fArr1[0], fArr2[0]); block.FieldA8 = UnkCalc(0.0f, 0.0f); block.FieldAC = UnkCalc(fArr1[2], fArr2[2]); block.Flags &= 0xFFFFFEF8; block.ReadTextureInfo(br); block.ReadTOCs(br); } }