/[MorrowindCustomClothingSlotCreator]/trunk/libTES3FileFormat/PlugingClothing.cs
ViewVC logotype

Diff of /trunk/libTES3FileFormat/PlugingClothing.cs

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 17 by william, Fri Jul 29 16:09:53 2011 UTC revision 18 by william, Fri Jul 29 16:54:40 2011 UTC
# Line 9  using System.Windows.Forms; Line 9  using System.Windows.Forms;
9  namespace libTES3FileFormat  namespace libTES3FileFormat
10  {  {
11    
12          public enum ClothingType
13        {
14            Pants,
15            Shoes,
16            Shirt,
17            Belt,
18            Robe,
19            RightGlove,
20            LeftGlove,
21            Skirt,
22            Ring,
23            Amulet,
24        }
25    
26      public interface IPlugingClothing : IParse, ICommit, IAsBytes, ISizeOffset      public interface IPlugingClothing : IParse, ICommit, IAsBytes, ISizeOffset
27      {      {
# Line 21  namespace libTES3FileFormat Line 33  namespace libTES3FileFormat
33          private const string CLOTHING_MAGIC = "CLOT";          private const string CLOTHING_MAGIC = "CLOT";
34          private const string CLOTHING_NAME_MAGIC = "NAME";          private const string CLOTHING_NAME_MAGIC = "NAME";
35          MemoryStream reader = new MemoryStream();          MemoryStream reader = new MemoryStream();
36            private int SectionCount = 0;
37          public PlugingClothing()          public PlugingClothing()
38          {          {
39              this.reader = new MemoryStream();              this.reader = new MemoryStream();
40              this.Offset = 0;              this.Offset = 0;
41              this.Size = 0;              this.Size = 0;
42          }          }
43          public PlugingClothing(BinaryReader br, int offset, int size, bool ReadOnly, ConsoleLog Log)          public PlugingClothing(BinaryReader br, int offset, int size, int SectionCount, bool ReadOnly, ConsoleLog Log)
44              : this()              : this()
45          {          {
46              this.Log = Log;              this.Log = Log;
47              br.BaseStream.Seek(offset, SeekOrigin.Begin);              br.BaseStream.Seek(offset, SeekOrigin.Begin);
48              this.Offset = offset;              this.Offset = offset;
49              this.Size = size;              this.Size = size;
50                this.SectionCount = SectionCount;
51              this.reader = new MemoryStream(br.ReadBytes((int)br.BaseStream.Length), 0, size);              this.reader = new MemoryStream(br.ReadBytes((int)br.BaseStream.Length), 0, size);
52              this.Parse(this.reader);              this.Parse(this.reader);
53          }          }
# Line 46  namespace libTES3FileFormat Line 60  namespace libTES3FileFormat
60              this.Log.WriteLine();              this.Log.WriteLine();
61              // read header section magic              // read header section magic
62    
63                for (int i = 0; i < this.SectionCount; i++)
64                {
65    
66                    this.Log.WriteLine(string.Format("Clothing Section: Index=0x{0:x8} Offset=0x{1:x8}", i,(int)br.BaseStream.Position));
67    
68                    byte[] magic = br.ReadBytes(4);
69                    string str_magic = ASCIIEncoding.ASCII.GetString(magic);
70                    Debug.Assert(str_magic == "CLOT", string.Format("Excepted: {0} found: {1}", "CLOT", str_magic));
71    
72                    // Clothing Name
73                    int section_size = BitConverter.ToInt32(br.ReadBytes(12), 0);
74                    magic = br.ReadBytes(4);
75                    str_magic = ASCIIEncoding.ASCII.GetString(magic);
76                    Debug.Assert(str_magic == "NAME", string.Format("Excepted: {0} found: {1}", "NAME", str_magic));
77                    
78                    int name_size = br.ReadInt32();
79                    this.Log.WriteLine("\t\tClothing Name Size: " + name_size.ToString());
80                    byte[] name_bytes = br.ReadBytes(name_size);
81                    string ClothingName = ASCIIEncoding.ASCII.GetString(name_bytes);
82                    this.Log.WriteLine("\t\tClothing Name : " + ClothingName);
83    
84    
85                    // Clothing Model
86                    magic = br.ReadBytes(4);
87                    str_magic = ASCIIEncoding.ASCII.GetString(magic);
88                    Debug.Assert(str_magic == "MODL", string.Format("Excepted: {0} found: {1}", "MODL", str_magic));
89                    
90                    int modl_name_size = br.ReadInt32();
91                    this.Log.WriteLine("\t\tClothing Model Name Size: " + modl_name_size.ToString());
92                    byte[] modl_name_bytes = br.ReadBytes(modl_name_size);
93                    string ClothingModelName = ASCIIEncoding.ASCII.GetString(modl_name_bytes);
94                    this.Log.WriteLine("\t\tClothing Model Name: " + ClothingModelName);
95    
96                    // Clothing Full Name
97                    magic = br.ReadBytes(4);
98                    str_magic = ASCIIEncoding.ASCII.GetString(magic);
99                    Debug.Assert(str_magic == "FNAM", string.Format("Excepted: {0} found: {1}", "FNAM", str_magic));
100    
101                    int fname_size = br.ReadInt32();
102                    this.Log.WriteLine("\t\tClothing FullName Size: " + fname_size.ToString());
103                    byte[] fname_bytes = br.ReadBytes(fname_size);
104                    string ClothingFullName = ASCIIEncoding.ASCII.GetString(fname_bytes);
105                    this.Log.WriteLine("\t\tClothing FullName: " + ClothingFullName);
106    
107                    // Clothing Data
108                    magic = br.ReadBytes(4);
109                    str_magic = ASCIIEncoding.ASCII.GetString(magic);
110                    Debug.Assert(str_magic == "CTDT", string.Format("Excepted: {0} found: {1}", "CTDT", str_magic));
111    
112              //bool NoMoreClothingEntries = false;                  int ctdt_size = br.ReadInt32();
113    
114                    int ctdt_type = br.ReadInt32();
115                    string ctdt_type_string = "";
116    
117                    try
118                    {
119                        ctdt_type_string = Enum.GetName(typeof(ClothingType), ctdt_type);
120                    }
121                    catch { ctdt_type_string = "unknown"; }
122    
123              //while (NoMoreClothingEntries != true)  
124              //{                  float ctdt_weight = br.ReadSingle();
125              //    // read the MAST tag                  short ctdt_value = br.ReadInt16();
126              //    byte[] magic = br.ReadBytes(4);                  short ctdt_echant_pts = br.ReadInt16();
127              //    string str_magic = ASCIIEncoding.ASCII.GetString(magic);  
128              //    StringBuilder magic_info_message = new StringBuilder();                  this.Log.WriteLine("\t\tClothing Data: ");
129              //    magic_info_message.Append("\tDetected Master Section: ");                  this.Log.WriteLine("\t\t\tType: " + ctdt_type + " (" + ctdt_type_string +")");
130              //    magic_info_message.Append(magic.ToStr());                  this.Log.WriteLine("\t\t\tWeight: " + ctdt_weight);
131              //    magic_info_message.Append(" : " + str_magic);                  this.Log.WriteLine("\t\t\tValue: " + ctdt_value);
132                    this.Log.WriteLine("\t\t\tEnchant Points: " + ctdt_echant_pts);
133              //    if (str_magic != PlugingClothing.CLOTHING_MAGIC)  
134              //    {                  magic = br.ReadBytes(4);
135              //        NoMoreClothingEntries = true;                  str_magic = ASCIIEncoding.ASCII.GetString(magic);
136              //        br.BaseStream.Seek(br.BaseStream.Position - 4, SeekOrigin.Begin); // seek back 4 bytes in the stream                  Debug.Assert(str_magic == "SCRI", string.Format("Excepted: {0} found: {1}", "SCRI", str_magic));
137              //        break;  
138              //    }                  break;
139              //    // throw assert if not true  
140              //    Debug.Assert(str_magic == PlugingClothing.CLOTHING_MAGIC, string.Format("Excepted: {0} found: {1}", PlugingClothing.CLOTHING_MAGIC, str_magic));              }
141                      
             //    this.Log.WriteLine(magic_info_message.ToString());  
             //    int MasterFileNameLength = br.ReadInt32();  
             //    byte[] MasterFileName = br.ReadBytes(MasterFileNameLength);  
             //    this.Log.WriteLine("\t\tFileName: " + MasterFileName.ToAscii());  
             //    // read this master's data section  
             //    magic = br.ReadBytes(4);  
             //    str_magic = ASCIIEncoding.ASCII.GetString(magic);  
             //    Debug.Assert(str_magic == PlugingClothing.CLOTHING_NAME_MAGIC, string.Format("Excepted: {0} found: {1}", PlugingClothing.CLOTHING_NAME_MAGIC, str_magic));  
             //    int DataSectionLength = br.ReadInt32();  
             //    byte[] Data = br.ReadBytes(DataSectionLength);  
             //    this.Log.WriteLine("\t\tData: " + Data.ToStr());  
             //}  
               
142    
143              return true;              return true;
144          }          }
# Line 192  namespace libTES3FileFormat Line 250  namespace libTES3FileFormat
250                      int b = (CLOTH_LENGTH + (int)br.BaseStream.Position) - PlugingClothing.CLOTHING_NAME_MAGIC.Length;                      int b = (CLOTH_LENGTH + (int)br.BaseStream.Position) - PlugingClothing.CLOTHING_NAME_MAGIC.Length;
251    
252                      this.Size = b - this.Offset;                      this.Size = b - this.Offset;
253                        this.SectionCount = ClothingSectionCount;
254                      this.Log.WriteLine("\t\tSize of All Clothing Sections (from first entry): 0x" + this.Size.ToString("x8"));                      this.Log.WriteLine("\t\tSize of All Clothing Sections (from first entry): 0x" + this.Size.ToString("x8"));
255                      this.Log.WriteLine("\t\tCloting Section: Start=0x" + this.Offset.ToString("x8") + " End=0x" + (this.Offset + this.Size).ToString("x8"));                      this.Log.WriteLine("\t\tCloting Section: Start=0x" + this.Offset.ToString("x8") + " End=0x" + (this.Offset + this.Size).ToString("x8"));
256                      this.Log.WriteLine("\t\tTotal Clothing Sections: " + ClothingSectionCount.ToString());                      this.Log.WriteLine("\t\tTotal Clothing Sections: " + this.SectionCount.ToString());
257                  }                  }
258    
259                  return true;                  return true;
# Line 217  namespace libTES3FileFormat Line 276  namespace libTES3FileFormat
276                  get { return _Size; }                  get { return _Size; }
277                  private set { _Size = value; }                  private set { _Size = value; }
278              }              }
279                private int _SectionCount;
280                public int SectionCount
281                {
282                    get { return _SectionCount; }
283                    private set { _SectionCount = value; }
284                }
285              #endregion              #endregion
286          }          }
287          #endregion          #endregion

Legend:
Removed from v.17  
changed lines
  Added in v.18

  ViewVC Help
Powered by ViewVC 1.1.22