public DL_Editor(LevelEditorForm lf) { InitializeComponent(); this.availableTree.Nodes.Clear(); ROMFileSelect.LoadFileList(this.availableTree); this.lf = lf; no = new NitroOverlay(Program.m_ROM, (uint)(103 + lf.m_LevelID)); tableAddr = no.Read32(0x30); uint count = no.Read16(tableAddr); for (uint i = 0; i < count; i++) { currentTree.Nodes.Add(Program.m_ROM.GetFileNameFromID(Program.m_ROM.GetFileIDFromInternalID(no.Read16(i * 2 + tableAddr + 2)))); } }
private static void WriteTextureAnimationDataToXML(XmlWriter writer) { // Start TextureAnimationData writer.WriteStartElement("TextureAnimationData"); for (int area = 0; area < m_NumAreas; area++) { uint objlistptr = m_Overlay.ReadPointer(0x70); uint texAnimAddr = (uint)(objlistptr + (area * 12) + 4); bool areaHasTexAnims = (m_Overlay.Read32(texAnimAddr) != 0); if (!areaHasTexAnims) { continue; } writer.WriteStartElement("TextureAnimationArea"); writer.WriteAttributeString("area", area.ToString()); uint texAnimHeader = m_Overlay.ReadPointer(texAnimAddr); writer.WriteElementString("NumberOfFrames", m_Overlay.Read32(texAnimHeader).ToString()); writer.WriteElementString("NumberOfAnimations", m_Overlay.Read32(texAnimHeader + 0x10).ToString()); int scaleSize = 0; int rotSize = 0; int transSize = 0; for (int j = 0; j < m_TexAnims[area].Count; j++) { if ((m_TexAnims[area].ElementAt(j).getScaleTblStart() + (int)m_TexAnims[area].ElementAt(j).getScaleTblSize()) > scaleSize) { scaleSize += (int)m_TexAnims[area].ElementAt(j).getScaleTblSize(); } if ((m_TexAnims[area].ElementAt(j).getRotTblStart() + (int)m_TexAnims[area].ElementAt(j).getRotTblSize()) > rotSize) { rotSize += (int)m_TexAnims[area].ElementAt(j).getRotTblSize(); } if ((m_TexAnims[area].ElementAt(j).getTransTblStart() + (int)m_TexAnims[area].ElementAt(j).getTransTblSize()) > transSize) { transSize += (int)m_TexAnims[area].ElementAt(j).getTransTblSize(); } } writer.WriteStartElement("ScaleTable"); for (int i = 0; i < scaleSize; i++) { writer.WriteElementString("UInt", m_Overlay.Read32(m_TexAnims[area].ElementAt(0).m_BaseScaleTblAddr + (uint)(i * 4)).ToString()); } writer.WriteEndElement(); writer.WriteStartElement("RotationTable"); for (int i = 0; i < rotSize; i++) { writer.WriteElementString("UShort", m_Overlay.Read16(m_TexAnims[area].ElementAt(0).m_BaseRotTblAddr + (uint)(i * 2)).ToString()); } writer.WriteEndElement(); writer.WriteStartElement("TranslationTable"); for (int i = 0; i < transSize; i++) { writer.WriteElementString("UInt", m_Overlay.Read32(m_TexAnims[area].ElementAt(0).m_BaseTransTblAddr + (uint)(i * 4)).ToString()); } writer.WriteEndElement(); for (int i = 0; i < m_TexAnims[area].Count; i++) { writer.WriteStartElement("TextureAnimation"); writer.WriteElementString("MaterialName", m_Overlay.ReadString(m_TexAnims[area].ElementAt(i).m_MatNameOffset, 0)); writer.WriteElementString("ScaleStartIndex", m_TexAnims[area].ElementAt(i).getScaleTblStart().ToString()); writer.WriteElementString("ScaleLength", m_TexAnims[area].ElementAt(i).getScaleTblSize().ToString()); writer.WriteElementString("RotationStartIndex", m_TexAnims[area].ElementAt(i).getRotTblStart().ToString()); writer.WriteElementString("RotationLength", m_TexAnims[area].ElementAt(i).getRotTblSize().ToString()); writer.WriteElementString("TranslationStartIndex", m_TexAnims[area].ElementAt(i).getTransTblStart().ToString()); writer.WriteElementString("TranslationLength", m_TexAnims[area].ElementAt(i).getTransTblSize().ToString()); writer.WriteElementString("DefaultScaleValue", m_Overlay.Read32(m_TexAnims[area].ElementAt(i).m_Offset + 0x08).ToString()); writer.WriteEndElement(); } writer.WriteEndElement(); } writer.WriteEndElement(); // End TextureAnimationData }