void Parse(Stream s) { BinaryReader r = new BinaryReader(s); s.Position = 0; this.version = r.ReadUInt32(); this.ageGender = (AgeGenderFlags)r.ReadUInt32(); this.groupingID = r.ReadUInt64(); this.unknown1 = r.ReadByte(); this.simOutfitReference = r.ReadUInt64(); this.textureReference = r.ReadUInt64(); this.simDataReference = r.ReadUInt64(); this.nameHash = r.ReadUInt32(); this.descHash = r.ReadUInt32(); this.unknown2 = new DataBlobHandler(recommendedApiVersion, OnResourceChanged, r.ReadBytes(14)); this.unknown3 = r.ReadUInt32(); this.animationReference1 = r.ReadUInt64(); this.animationStateName1 = System.Text.Encoding.ASCII.GetString(r.ReadBytes(r.ReadInt32())); this.animationReference2 = r.ReadUInt64(); this.animationStateName2 = System.Text.Encoding.ASCII.GetString(r.ReadBytes(r.ReadInt32())); this.colorList = new SwatchColorList(OnResourceChanged, s); this.unknown6 = r.ReadUInt32(); this.unknown7 = r.ReadUInt32(); this.unknown8 = r.ReadByte(); }
public ShaderKey(int APIversion, EventHandler handler, AgeGenderFlags ageGenderFlags, Color edgeColour, Color specularColour, float specularPower, bool isGenetic) : base(APIversion, handler) { mAgeGenderFlags = ageGenderFlags; mEdgeColour = edgeColour; mSpecularColour = specularColour; mSpecularPower = specularPower; mIsGenetic = isGenetic; }
public void Parse(Stream s) { var br = new BinaryReader(s); mAgeGenderFlags = new AgeGenderFlags(0, handler, s); mEdgeColour = Color.FromArgb(br.ReadInt32()); mSpecularColour = Color.FromArgb(br.ReadInt32()); mSpecularPower = br.ReadSingle(); mIsGenetic = br.ReadBoolean(); }
public ShaderKey(int APIversion, EventHandler handler, AgeGenderFlags ageGenderFlags, bool isGenetic, Color diffuseColour, Color rootColour, Color highlightColour, Color tipColour, Color haloHighColour, Color haloLowColour, float haloBlur) : base(APIversion, handler) { mAgeGenderFlags = ageGenderFlags; mIsGenetic = isGenetic; mDiffuseColour = diffuseColour; mRootColour = rootColour; mHighlightColour = highlightColour; mTipColour = tipColour; mHaloHighColour = haloHighColour; mHaloLowColour = haloLowColour; mHaloBlur = haloBlur; }
public TextureKey(int APIversion, EventHandler handler, SkinToneResource owner, AgeGenderFlags ageGenderFlags, DataTypeFlags typeFlags, TGIBlock specularKey, TGIBlock detailDarkKey, TGIBlock detailLightKey, TGIBlock normalMapKey, TGIBlock overlayKey, TGIBlock muscleNormalMapKey, TGIBlock cleavageNormalMapKey) : base(APIversion, handler) { mOwner = owner; mAgeGenderFlags = ageGenderFlags; mTypeFlags = typeFlags; mSpecularKey = specularKey; mDetailDarkKey = detailDarkKey; mDetailLightKey = detailLightKey; mNormalMapKey = normalMapKey; mOverlayKey = overlayKey; mMuscleNormalMapKey = muscleNormalMapKey; mCleavageNormalMapKey = cleavageNormalMapKey; }
public void Parse(Stream s) { var br = new BinaryReader(s); mAgeGenderFlags = new AgeGenderFlags(0, handler, s); mIsGenetic = br.ReadBoolean(); mDiffuseColour = Color.FromArgb(br.ReadInt32()); mRootColour = Color.FromArgb(br.ReadInt32()); mHighlightColour = Color.FromArgb(br.ReadInt32()); mTipColour = Color.FromArgb(br.ReadInt32()); mHaloHighColour = Color.FromArgb(br.ReadInt32()); mHaloLowColour = Color.FromArgb(br.ReadInt32()); mHaloBlur = br.ReadSingle(); }
void Parse(Stream s) { BinaryReader r = new BinaryReader(s); s.Position = 0; this.version = r.ReadUInt32(); this.ageGender = (AgeGenderFlags)r.ReadUInt32(); this.groupingID = r.ReadUInt64(); this.unknown1 = r.ReadByte(); this.simOutfitReference = r.ReadUInt64(); this.textureReference = r.ReadUInt64(); this.simDataReference = r.ReadUInt64(); this.nameHash = r.ReadUInt32(); this.descHash = r.ReadUInt32(); this.unknown2 = new DataBlobHandler(recommendedApiVersion, OnResourceChanged, r.ReadBytes(14)); this.unknown3 = r.ReadUInt32(); this.animationReference1 = r.ReadUInt64(); this.animationStateName1 = System.Text.Encoding.ASCII.GetString(r.ReadBytes(r.ReadInt32())); this.animationReference2 = r.ReadUInt64(); this.animationStateName2 = System.Text.Encoding.ASCII.GetString(r.ReadBytes(r.ReadInt32())); this.colorList = new CASPartResource.SwatchColorList(OnResourceChanged, s); this.flagList = new CASPartResource.FlagList(OnResourceChanged, s); }
public void Parse(Stream s, ResourceKeyTable keys) { var br = new BinaryReader(s); mAgeGenderFlags = new AgeGenderFlags(0, handler, s); mTypeFlags = (DataTypeFlags)br.ReadUInt32(); mSpecularKey = new TGIBlock(0, handler, keys[br.ReadInt32()]); mDetailDarkKey = new TGIBlock(0, handler, keys[br.ReadInt32()]); mDetailLightKey = new TGIBlock(0, handler, keys[br.ReadInt32()]); mNormalMapKey = new TGIBlock(0, handler, keys[br.ReadInt32()]); mOverlayKey = new TGIBlock(0, handler, keys[br.ReadInt32()]); if (mOwner.Version >= 6) { mMuscleNormalMapKey = new TGIBlock(0, handler, keys[br.ReadInt32()]); mCleavageNormalMapKey = new TGIBlock(0, handler, keys[br.ReadInt32()]); } else { mMuscleNormalMapKey = new TGIBlock(0, handler); mCleavageNormalMapKey = new TGIBlock(0, handler); } }
private void openTattooPackageToolStripMenuItem_Click(object sender, EventArgs e) { OpenFileDialog openFileDialog1 = new OpenFileDialog(); openFileDialog1.Filter = PackageFilter; openFileDialog1.Title = "Select Tattoo Package File"; openFileDialog1.FilterIndex = 1; openFileDialog1.CheckFileExists = true; if (openFileDialog1.ShowDialog() != DialogResult.OK) { return; } Package myPack; try { myPack = (Package)Package.OpenPackage(0, openFileDialog1.FileName); } catch (Exception ex) { MessageBox.Show("Cannot open package: " + openFileDialog1.FileName + " - Error is:" + System.Environment.NewLine + ex.Message + System.Environment.NewLine + ex.InnerException); return; } Predicate <IResourceIndexEntry> isCASP = r => r.ResourceType == (uint)ResourceTypes.CASP; List <IResourceIndexEntry> CASPlist = myPack.FindAll(isCASP); if (CASPlist.Count == 0) { MessageBox.Show("No CASP files found in package!"); Package.ClosePackage(0, (IPackage)myPack); return; } Predicate <IResourceIndexEntry> isKEY = r => r.ResourceType == (uint)ResourceTypes.KEY; IResourceIndexEntry irKey = myPack.Find(isKEY); NameMapResource.NameMapResource nMap = null; if (irKey != null) { Stream n = myPack.GetResource(irKey); nMap = new NameMapResource.NameMapResource(0, n); } int numTattoos = 0; foreach (IResourceIndexEntry r in CASPlist) { Stream s = myPack.GetResource(r); s.Position = 0; CASPartResource.CASPartResource casp = new CASPartResource.CASPartResource(0, s); if (casp.Clothing == ClothingType.TattooTemplate) { numTattoos++; string tatName = ""; if (casp.Presets.Count > 0) { XmlDocument imp = new XmlDocument(); imp.LoadXml(casp.Presets[0].XmlFile.ReadToEnd()); XmlNodeList nodes = imp.GetElementsByTagName("value"); foreach (XmlNode n in nodes) { if (n.Attributes["key"].InnerXml.Contains("daeFileName")) { tatName = n.Attributes["value"].InnerXml; break; } } } string tmp; if (nMap != null && nMap.TryGetValue(r.Instance, out tmp)) { tatName = tmp; } DialogResult res = MessageBox.Show("Open tattoo: " + tatName + "?", "Select Tattoo", MessageBoxButtons.YesNoCancel); if (res == DialogResult.Yes) { bool gotImage = false; for (int i = 0; i < Math.Min(casp.Presets.Count, 3); i++) { XmlDocument imp = new XmlDocument(); imp.LoadXml(casp.Presets[i].XmlFile.ReadToEnd()); XmlNodeList nodes = imp.GetElementsByTagName("value"); foreach (XmlNode n in nodes) { if (n.Attributes["key"].InnerXml.Contains("Layer1ColorR")) { presets[i].rChannelColor = new Color(n.Attributes["value"].InnerXml); } else if (n.Attributes["key"].InnerXml.Contains("Layer1ColorG")) { presets[i].gChannelColor = new Color(n.Attributes["value"].InnerXml); } else if (n.Attributes["key"].InnerXml.Contains("Layer1ColorB")) { presets[i].bChannelColor = new Color(n.Attributes["value"].InnerXml); } else if (n.Attributes["key"].InnerXml.Contains("Layer1ColorA")) { presets[i].aChannelColor = new Color(n.Attributes["value"].InnerXml); } else if (n.Attributes["key"].InnerXml.Contains("Layer1Mask") && !gotImage) { string[] imgTgi = n.Attributes["value"].InnerXml.Split(':'); Predicate <IResourceIndexEntry> isIMG; try { isIMG = ri => ri.ResourceType == UInt32.Parse(imgTgi[1], System.Globalization.NumberStyles.HexNumber) & ri.ResourceGroup == UInt32.Parse(imgTgi[2], System.Globalization.NumberStyles.HexNumber) & ri.Instance == UInt64.Parse(imgTgi[3], System.Globalization.NumberStyles.HexNumber); } catch { MessageBox.Show("Could not parse TGI of tattoo image!"); return; } IResourceIndexEntry img = myPack.Find(isIMG); if (img != null) { Stream d = myPack.GetResource(img); d.Position = 0; dds = new DdsFile(); dds.Load(d, false); ddsOriginal = new DdsFile(); ddsOriginal.CreateImage(dds, false); gotImage = true; } } } } if (!gotImage) { MessageBox.Show("Could not find tattoo image!"); } bgColor = new Color(0x00D2B48Cu); BGcolor_panel.BackColor = System.Drawing.Color.FromArgb(bgColor.Red, bgColor.Green, bgColor.Blue); currentPreset = 0; PresetPrep(); Update_DDSdisplay(); TattooImageFile.Text = ""; Predicate <IResourceIndexEntry> isTHUM = ri => ri.ResourceType == (uint)ResourceTypes.THUM & ri.ResourceGroup == 1U & ri.Instance == r.Instance; IResourceIndexEntry irThum = myPack.Find(isTHUM); if (irThum != null) { Stream t = myPack.GetResource(irThum); thumbNail = new Bitmap(t); } else { thumbNail = null; } TattooName.Text = tatName; TattooInstance.Text = r.Instance.ToString("X16"); AgeGenderFlags ag = casp.AgeGender; CASPtodder_checkBox.Checked = ((ag.Age & AgeFlags.Toddler) > 0); CASPchild_checkBox.Checked = ((ag.Age & AgeFlags.Child) > 0); CASPteen_checkBox.Checked = ((ag.Age & AgeFlags.Teen) > 0); CASPadult_checkBox.Checked = ((ag.Age & AgeFlags.Adult) > 0); CASPelder_checkBox.Checked = ((ag.Age & AgeFlags.Elder) > 0); CASPmale_checkBox.Checked = ((ag.Gender & GenderFlags.Male) > 0); CASPfemale_checkBox.Checked = ((ag.Gender & GenderFlags.Female) > 0); CASPsortOrder.Text = casp.SortPriority.ToString(); saveOptionsDDS = new DdsSaveOptions("DXT5", true, 90); PhotoConvert_radioButton.Checked = false; Black2Red_radioButton.Checked = false; Resize_checkBox.Checked = false; ReplaceAlpha_checkBox.Checked = false; Black2Alpha_radioButton.Checked = true; White2Alpha_radioButton.Checked = false; BlankAlpha_radioButton.Checked = false; invertAlpha_radioButton.Checked = false; White2Back_checkBox.Checked = false; break; } else if (res == DialogResult.No) { continue; } else { Package.ClosePackage(0, (IPackage)myPack); return; } } } if (numTattoos == 0) { MessageBox.Show("No tattoos found in package!"); } Package.ClosePackage(0, (IPackage)myPack); // CASPartResource.CASPartResource casp = }