BrawlCrate v0.41
Wii File Editor
Loading...
Searching...
No Matches
Public Member Functions | Public Attributes | Properties | List of all members
BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode Class Reference
Inheritance diagram for BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode:
BrawlLib.SSBB.ResourceNodes.MoveDefEntryNode BrawlLib.SSBB.ResourceNodes.ResourceNode

Public Member Functions

override bool OnInitialize ()
 
override void OnPopulate ()
 
override int OnCalculateSize (bool force)
 
override void OnRebuild (VoidPtr address, int length, bool force)
 
- Public Member Functions inherited from BrawlLib.SSBB.ResourceNodes.MoveDefEntryNode
override void Rebuild (bool force)
 
override bool OnInitialize ()
 
ActionEventInfo GetEventInfo (long id)
 
override void SortChildren ()
 
ResourceNode FindNode (int offset)
 
ResourceNode GetByOffsetID (int id)
 
virtual void PostProcess ()
 
- Public Member Functions inherited from BrawlLib.SSBB.ResourceNodes.ResourceNode
void OnRenamed ()
 
List< ResourceNodeGetChildrenRecursive ()
 Used primarily to get bone lists. Kept for all resource nodes for utility. More...
 
virtual void SignalPropertyChange ()
 
virtual void Dispose ()
 
void SelectChildAtIndex (int index)
 
void UpdateProperties ()
 
void UpdateCurrentControl ()
 
virtual bool MoveUp ()
 
virtual bool MoveDown ()
 
virtual void OnMoved ()
 
virtual void DoMoveDown ()
 
virtual void DoMoveDown (bool select)
 
virtual void DoMoveUp ()
 
virtual void DoMoveUp (bool select)
 
virtual bool AddUp ()
 
virtual bool AddDown ()
 
virtual bool ToParent ()
 
void Populate (int levels=-1)
 
virtual void OnPopulate ()
 
void Initialize (ResourceNode parent, FileMap source)
 
void Initialize (ResourceNode parent, VoidPtr address, int length)
 
void Initialize (ResourceNode parent, DataSource origSource)
 
virtual void Initialize (ResourceNode parent, DataSource origSource, DataSource uncompSource)
 
virtual bool OnInitialize ()
 
virtual void Restore ()
 
virtual void Remove ()
 
virtual void RemoveChild (ResourceNode child)
 
virtual void AddChild (ResourceNode child)
 
virtual void AddChild (ResourceNode child, bool change)
 
virtual void InsertChild (ResourceNode child, int index)
 
virtual void InsertChild (ResourceNode child, bool change, int index)
 
void SetSizeInternal (int size)
 
virtual void Replace (string fileName)
 
virtual void Replace (ResourceNode node)
 
virtual void Replace (string fileName, FileMapProtect prot, FileOptions options)
 
virtual void ReplaceRaw (VoidPtr address, int length)
 
virtual void ReplaceRaw (FileMap map)
 
virtual void Export (string outPath)
 
void Export (FileStream outStream)
 
virtual void ExportUncompressed (string outPath)
 
void ExportUncompressed (FileStream outStream)
 
virtual void Rebuild ()
 
virtual void Rebuild (bool force)
 
virtual void Rebuild (VoidPtr address, int length, bool force)
 
virtual void OnRebuild (VoidPtr address, int length, bool force)
 
virtual int CalculateSize (bool force)
 
virtual int OnCalculateSize (bool force)
 
void Merge ()
 
void Merge (bool forceBuild)
 
ResourceNode FindChildByType (string path, bool searchChildren, params ResourceType[] types)
 
ResourceNode FindChildByType (string path, bool searchChildren, StringComparison compare, params ResourceType[] types)
 
ResourceNode FindChild (string path)
 
ResourceNode FindChild (string path, bool searchChildren)
 
ResourceNode FindChild (string path, StringComparison compare)
 
ResourceNode FindChild (string path, bool searchChildren, StringComparison compare)
 
ResourceNode[] FindChildrenByClassType (string path, Type type)
 
ResourceNode[] FindChildrenByType (string path, ResourceType type)
 
ResourceNode[] FindChildrenByTypeInGroup (string path, ResourceType type, byte group)
 
ResourceNode[] FindChildrenByName (string name)
 
unsafe string FindName (string name)
 
ResourceNode FindEmbeddedIndex (int index)
 
virtual unsafe byte[] MD5 ()
 Find the MD5 checksum of this node's data. If this node doesn't have any data (BRESGroupNode, for example), this method will return null. More...
 
string MD5Str ()
 Get the result of the MD5() function as a string of hexadecimal digits. If MD5() returns null, this method will return an empty string. More...
 
ResourceNode PrevSibling ()
 
ResourceNode NextSibling ()
 
override string ToString ()
 
virtual void SortChildren ()
 

Public Attributes

int id
 
int group
 
int bone
 
int aFlags
 
int sFlags
 
int aStart
 
int sMStart
 
int sGStart
 
int sSStart
 
int visStart
 
int off1
 
int off2
 
int off3
 
bool Static
 
bool extraOffset = false
 
MoveDefActionFlagsNode actionFlags
 
MoveDefActionListNode actions
 
MoveDefFlagsNode subActionFlags
 
MoveDefEntryNode subActions
 
MoveDefModelVisibilityNode mdlVis
 
CollisionDataNode data1
 
Data2ListNode data2
 
MoveDefSectionParamNode data3
 
List< int > _extraOffsets
 
List< MoveDefEntryNode_extraEntries
 
FDefSubActionStringTable subActionStrings
 
VoidPtr actionAddr
 
bool _buildHeader = true
 
- Public Attributes inherited from BrawlLib.SSBB.ResourceNodes.MoveDefEntryNode
int _lookupCount
 
List< int > _lookupOffsets = new List<int>()
 
VoidPtr _entryOffset = 0
 
int _entryLength
 
int _childLength
 
MoveDefExternalNode _extNode
 
bool _extOverride = false
 
int offsetID
 
bool isExtra = false
 
- Public Attributes inherited from BrawlLib.SSBB.ResourceNodes.ResourceNode
Form _mainForm
 
string _name
 
string _origPath
 
ResourceNode _parent
 
List< ResourceNode_children = new List<ResourceNode>()
 
int _calcSize
 
EventHandler UpdateControl
 
MoveEventHandler MovedDown
 
ResourceEventHandler Renamed
 
ResourceEventHandler PropertyChanged
 
ResourceEventHandler Replaced
 
ResourceEventHandler Restored
 
ResourceChildEventHandler ChildRemoved
 
bool _isPopulating
 
bool _replaced
 

Properties

MDL0BoneNode BoneNode [get, set]
 
int ID [get]
 
int ArticleGroupID [get, set]
 
int ARCEntryGroup [get, set]
 
string Bone [get, set]
 
int ActionFlagsStart [get]
 
int SubactionFlagsStart [get]
 
int ActionsStart [get]
 
int SubactionMainStart [get]
 
int SubactionGFXStart [get]
 
int SubactionSFXStart [get]
 
int ModelVisibility [get]
 
int CollisionData [get]
 
int DataOffset2 [get]
 
int DataOffset3 [get]
 
string ArticleStringID [get]
 
bool pikmin [get]
 
bool dedede [get]
 
List< int > ExtraOffsets [get]
 
List< MoveDefEntryNodeExtraEntries [get]
 
- Properties inherited from BrawlLib.SSBB.ResourceNodes.MoveDefEntryNode
VoidPtr _rebuildBase [get]
 
int _rebuildOffset [get]
 
VoidPtr Data [get]
 
VoidPtr BaseAddress [get]
 
MDL0Node Model [get]
 
MoveDefNode Root [get]
 
int IntOffset [get]
 
int _offset [get]
 
string HexOffset [get]
 
int Size [get]
 
bool External [get]
 
override ResourceType ResourceFileType [get]
 
- Properties inherited from BrawlLib.SSBB.ResourceNodes.ResourceNode
string FilePath [get]
 
string FileName [get]
 
string DirectoryName [get]
 
ResourceNode RootNode [get]
 
DataSource OriginalSource [get]
 
DataSource UncompressedSource [get]
 
DataSource WorkingSource [get]
 
DataSource WorkingUncompressed [get]
 
virtual bool HasChildren [get]
 
virtual ResourceType ResourceFileType [get]
 
string NodeType [get]
 
virtual string TreePathAbsolute [get]
 
virtual string TreePath [get]
 
virtual int Level [get]
 
virtual int MaxNameLength [get]
 
virtual bool AllowDuplicateNames [get]
 
virtual bool AllowNullNames [get]
 
virtual string Name [get, set]
 
ResourceNode Parent [get, set]
 
List< ResourceNodeChildren [get]
 
int Index [get]
 
int HexIndex [get]
 
bool IsCompressed [get]
 
bool HasChanged [get, set]
 
bool IsBranch [get]
 
bool HasMerged [get]
 
virtual bool AllowSaving [get, set]
 
virtual bool IsDirty [get, set]
 
virtual uint UncompressedSize [get]
 
virtual Type[] AllowedChildTypes [get]
 
virtual string Compression [get, set]
 
virtual bool RetainChildrenOnReplace [get]
 
virtual bool supportsCompression [get]
 
static MD5CryptoServiceProvider MD5Provider [get]
 

Additional Inherited Members

- Static Public Member Functions inherited from BrawlLib.SSBB.ResourceNodes.MoveDefEntryNode
static int Compare (ResourceNode n1, ResourceNode n2)
 
static int ActionCompare (ResourceNode n1, ResourceNode n2)
 
- Static Public Member Functions inherited from BrawlLib.SSBB.ResourceNodes.ResourceNode
static ResourceNode[] FindAllSubNodes (ResourceNode root)
 
static ResourceNode FindNode (ResourceNode root, string path, bool searchChildren, StringComparison compare)
 
- Protected Member Functions inherited from BrawlLib.SSBB.ResourceNodes.ResourceNode
void ForceReplacedEvent ()
 
virtual void MergeInternal ()
 
- Events inherited from BrawlLib.SSBB.ResourceNodes.ResourceNode
SelectEventHandler SelectChild
 
EventHandler UpdateProps
 
MoveEventHandler MovedUp
 
ResourceEventHandler Disposing
 
ResourceChildEventHandler ChildAdded
 
ResourceChildInsertEventHandler ChildInserted
 

Member Function Documentation

◆ OnCalculateSize()

override int BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.OnCalculateSize ( bool  force)
inlinevirtual

Reimplemented from BrawlLib.SSBB.ResourceNodes.ResourceNode.

615 {
616 _buildHeader = true;
617 _lookupCount = 0;
618 subActionStrings = new FDefSubActionStringTable();
619 _entryLength = 52 + _extraOffsets.Count * 4;
620
621 int size = 0;
622
623 if (actionFlags != null)
624 {
625 _lookupCount++; //action flags offset
626 size += 16 * actionFlags.Children.Count;
627 }
628
629 if (actions != null)
630 {
631 if (pikmin)
632 {
633 //false for now
634 bool actions1Null = false, actions2Null = false;
635 foreach (MoveDefActionGroupNode grp in actions.Children)
636 {
637 foreach (MoveDefActionNode a in grp.Children)
638 {
639 if (a.Children.Count > 0)
640 {
641 if (a.Index == 0)
642 {
643 actions1Null = false;
644 }
645 else if (a.Index == 1)
646 {
647 actions2Null = false;
648 }
649 }
650 }
651 }
652
653 _lookupCount += 2; //actions offsets
654 if (!actions1Null || !actions2Null)
655 {
656 foreach (MoveDefActionGroupNode grp in actions.Children)
657 {
658 foreach (MoveDefActionNode a in grp.Children)
659 {
660 if (a.Children.Count > 0)
661 {
662 _lookupCount++; //action offset
663 }
664 }
665 }
666
667 size += actions.Children.Count * 8;
668 }
669 }
670 else
671 {
672 bool actionsNull = true;
673 foreach (MoveDefActionNode a in actions.Children)
674 {
675 if (a.Children.Count > 0)
676 {
677 actionsNull = false;
678 }
679 }
680
681 if (!actionsNull)
682 {
683 _lookupCount++; //actions offsets
684 foreach (MoveDefActionNode a in actions.Children)
685 {
686 if (a.Children.Count > 0)
687 {
688 _lookupCount++; //action offset
689 }
690 }
691
692 size += actions.Children.Count * 4;
693 }
694 }
695 }
696
697 if (subActions != null)
698 {
699 if (subActions.Children.Count > 0)
700 {
701 _lookupCount++; //subaction flags offset
702 }
703
704 bool mainNull = true, gfxNull = true, sfxNull = true;
705 MoveDefEntryNode e = subActions;
706 int populateCount = 1;
707 bool children = false;
708 if (subActions.Children[0] is MoveDefActionListNode)
709 {
710 populateCount = subActions.Children.Count;
711 children = true;
712 }
713
714 for (int i = 0; i < populateCount; i++)
715 {
716 if (children)
717 {
718 e = subActions.Children[i] as MoveDefEntryNode;
719 }
720
721 foreach (MoveDefSubActionGroupNode g in e.Children)
722 {
723 if (i == 0)
724 {
725 subActionStrings.Add(g.Name);
726 _lookupCount++; //subaction name offset
727 size += 8;
728 }
729
730 //bool write = true;
731 //if (!Static)
732 //{
733 // write = false;
734 // foreach (MoveDefActionNode a in g.Children)
735 // if (a.Children.Count > 0 || a._actionRefs.Count > 0)
736 // write = true;
737 //}
738 foreach (MoveDefActionNode a in g.Children)
739 {
740 //if ((Static && a.Children.Count > 0) || (!Static && write))
741 if (a.Children.Count > 0 || a._actionRefs.Count > 0 || a._build)
742 {
743 switch (a.Index)
744 {
745 case 0:
746 mainNull = false;
747 break;
748 case 1:
749 gfxNull = false;
750 break;
751 case 2:
752 sfxNull = false;
753 break;
754 }
755
756 _lookupCount++; //action offset
757 }
758 }
759 }
760 }
761
763 for (int i = 0; i < populateCount; i++)
764 {
765 if (children)
766 {
767 e = subActions.Children[i] as MoveDefEntryNode;
768 }
769
770 if (!(mainNull && Static))
771 {
772 _lookupCount++; //main actions offset
773 size += e.Children.Count * 4;
774 }
775
776 if (!(gfxNull && Static))
777 {
778 _lookupCount++; //gfx actions offset
779 size += e.Children.Count * 4;
780 }
781
782 if (!(sfxNull && Static))
783 {
784 _lookupCount++; //sfx actions offset
785 size += e.Children.Count * 4;
786 }
787 }
788 }
789
790 if (mdlVis != null)
791 {
792 _lookupCount++; //model vis offset
793 size += mdlVis.CalculateSize(true);
795 }
796
797 if (data1 != null)
798 {
799 _lookupCount++; //data 1 offset
800 if (!data1.External)
801 {
802 size += data1.CalculateSize(true);
804 }
805 }
806
807 if (data2 != null)
808 {
809 _lookupCount++; //data 2 offset
810 if (!data2.External)
811 {
812 size += data2.CalculateSize(true);
814 }
815 }
816
817 if (data3 != null)
818 {
819 _lookupCount++; //data 3 offset
820 if (!data3.External)
821 {
822 size += data3.CalculateSize(true);
823 }
824 }
825
826 foreach (MoveDefEntryNode e in _extraEntries)
827 {
828 if (e != null)
829 {
830 if (!e.External)
831 {
832 size += e.CalculateSize(true);
833 _lookupCount += e._lookupCount;
834 }
835
836 _lookupCount++;
837 }
838 }
839
840 _childLength = size;
841
842 return _childLength + _entryLength;
843 }
int TotalSize
Definition: MoveDefStringTables.cs:24
void Add(string s)
Definition: MoveDefStringTables.cs:14
MoveDefSectionParamNode data3
Definition: DataArticleNode.cs:159
List< MoveDefEntryNode > _extraEntries
Definition: DataArticleNode.cs:169
MoveDefActionListNode actions
Definition: DataArticleNode.cs:153
bool _buildHeader
Definition: DataArticleNode.cs:845
CollisionDataNode data1
Definition: DataArticleNode.cs:157
MoveDefModelVisibilityNode mdlVis
Definition: DataArticleNode.cs:156
MoveDefActionFlagsNode actionFlags
Definition: DataArticleNode.cs:152
bool pikmin
Definition: DataArticleNode.cs:103
FDefSubActionStringTable subActionStrings
Definition: DataArticleNode.cs:611
MoveDefEntryNode subActions
Definition: DataArticleNode.cs:155
Data2ListNode data2
Definition: DataArticleNode.cs:158
bool Static
Definition: DataArticleNode.cs:107
int _childLength
Definition: MoveDefNode.cs:24
int _entryLength
Definition: MoveDefNode.cs:24
bool External
Definition: MoveDefNode.cs:91
int _lookupCount
Definition: MoveDefNode.cs:20
List< ResourceNode > Children
Definition: ResourceNode.cs:262
virtual int CalculateSize(bool force)
Definition: ResourceNode.cs:1161

◆ OnInitialize()

override bool BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.OnInitialize ( )
inlinevirtual

Reimplemented from BrawlLib.SSBB.ResourceNodes.ResourceNode.

111 {
112 base.OnInitialize();
113
114 id = Header->_id;
115 group = Header->_arcGroup;
116 bone = Header->_boneID;
117 aFlags = Header->_actionFlagsStart;
119 aStart = Header->_actionsStart;
121 sGStart = Header->_subactionGFXStart;
122 sSStart = Header->_subactionSFXStart;
123 visStart = Header->_modelVisibility;
124 off1 = Header->_collisionData;
125 off2 = Header->_unknownD2;
126 off3 = Header->_unknownD3;
127
128 bool extra = false;
129 _extraOffsets = new List<int>();
130 _extraEntries = new List<MoveDefEntryNode>();
131 bint* extraAddr = (bint*) ((VoidPtr) Header + 52);
132 for (int i = 0; i < (Size - 52) / 4; i++)
133 {
134 _extraOffsets.Add(extraAddr[i]);
135 if (extraAddr[i] > 0)
136 {
137 extra = true;
138 }
139 }
140
141 Static = Size > 52 && _extraOffsets[0] < 1480 && _extraOffsets[0] >= 0;
142
143 if (_name == null)
144 {
145 _name = "Article" + ID;
146 }
147
148 return SubactionFlagsStart > 0 || extra || ActionsStart > 0 || ActionFlagsStart > 0 || CollisionData > 0 ||
149 DataOffset2 > 0 || DataOffset3 > 0;
150 }
int SubactionFlagsStart
Definition: DataArticleNode.cs:80
int aStart
Definition: DataArticleNode.cs:101
int sSStart
Definition: DataArticleNode.cs:101
int ActionsStart
Definition: DataArticleNode.cs:82
int CollisionData
Definition: DataArticleNode.cs:92
int off1
Definition: DataArticleNode.cs:101
int sFlags
Definition: DataArticleNode.cs:101
int off3
Definition: DataArticleNode.cs:101
int group
Definition: DataArticleNode.cs:101
List< int > _extraOffsets
Definition: DataArticleNode.cs:163
int sMStart
Definition: DataArticleNode.cs:101
int DataOffset2
Definition: DataArticleNode.cs:94
int off2
Definition: DataArticleNode.cs:101
int ID
Definition: DataArticleNode.cs:33
int aFlags
Definition: DataArticleNode.cs:101
int visStart
Definition: DataArticleNode.cs:101
int ActionFlagsStart
Definition: DataArticleNode.cs:78
int DataOffset3
Definition: DataArticleNode.cs:96
int sGStart
Definition: DataArticleNode.cs:101
int bone
Definition: DataArticleNode.cs:101
int Size
Definition: MoveDefNode.cs:87
string _name
Definition: ResourceNode.cs:139
Definition: VoidPtr.cs:9
Definition: BigEndianTypes.cs:9
bint _subactionSFXStart
Definition: FighterDefinition.cs:361
bint _subactionFlagsStart
Definition: FighterDefinition.cs:356
bint _arcGroup
Definition: FighterDefinition.cs:352
bint _unknownD3
Definition: FighterDefinition.cs:366
bint _boneID
Definition: FighterDefinition.cs:353
bint _id
Definition: FighterDefinition.cs:351
bint _actionFlagsStart
Definition: FighterDefinition.cs:354
bint _modelVisibility
Definition: FighterDefinition.cs:362
bint _subactionGFXStart
Definition: FighterDefinition.cs:359
bint _unknownD2
Definition: FighterDefinition.cs:364
bint _actionsStart
Definition: FighterDefinition.cs:357
bint _collisionData
Definition: FighterDefinition.cs:363
bint _subactionMainStart
Definition: FighterDefinition.cs:358

◆ OnPopulate()

override void BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.OnPopulate ( )
inlinevirtual

Reimplemented from BrawlLib.SSBB.ResourceNodes.ResourceNode.

172 {
173 int off = 0;
174 int actionCount = 0;
175 int subactions = Static ? _extraOffsets[0] : (_offset - SubactionFlagsStart) / 8;
176 if (ActionFlagsStart > 0)
177 {
178 actionCount = Root.GetSize(ActionFlagsStart) / 16;
179 }
180
181 if (SubactionFlagsStart > 0)
182 {
183 subactions = Root.GetSize(SubactionFlagsStart) / 8;
184 }
185
186 if (actionCount > 0)
187 {
188 (actionFlags = new MoveDefActionFlagsNode("ActionFlags", actionCount)).Initialize(this,
189 BaseAddress + ActionFlagsStart, actionCount * 16);
190 if (ActionsStart > 0 || dedede && _extraOffsets[0] > 0)
191 {
192 actions = new MoveDefActionListNode {_name = "Actions"};
193 actions.Parent = this;
194 for (int i = 0; i < actionCount; i++)
195 {
196 if (pikmin)
197 {
198 actions.AddChild(new MoveDefActionGroupNode {_name = "Action" + i}, false);
199
200 off = *((bint*) (BaseAddress + ActionsStart) + i);
201 if (off > 0)
202 {
203 new MoveDefActionNode("Entry", false, actions.Children[i]).Initialize(
204 actions.Children[i], BaseAddress + off, 0);
205 }
206 else
207 {
208 actions.Children[i].Children
209 .Add(new MoveDefActionNode("Entry", true, actions.Children[i]));
210 }
211
212 off = *((bint*) (BaseAddress + _extraOffsets[0]) + i);
213 if (off > 0)
214 {
215 new MoveDefActionNode("Exit", false, actions.Children[i]).Initialize(
216 actions.Children[i], BaseAddress + off, 0);
217 }
218 else
219 {
220 actions.Children[i].Children
221 .Add(new MoveDefActionNode("Exit", true, actions.Children[i]));
222 }
223 }
224 else
225 {
226 off = *((bint*) (BaseAddress + ActionsStart) + i);
227 if (off > 0)
228 {
229 new MoveDefActionNode("Action" + i, false, actions).Initialize(actions,
230 BaseAddress + off, 0);
231 }
232 else
233 {
234 actions.Children.Add(new MoveDefActionNode("Action" + i, true, actions));
235 }
236 }
237 }
238 }
239 }
240
241 if (SubactionFlagsStart > 0)
242 {
243 subActionFlags = new MoveDefFlagsNode {_parent = this};
245
246 if (subactions == 0)
247 {
248 subactions = subActionFlags._names.Count;
249 }
250
251 int populateCount = 1;
252 bool child = false;
253 int bias = 0;
254
255 if (dedede)
256 {
257 subActions = new MoveDefGroupNode {Name = "SubActions"};
258 subActions.AddChild(new MoveDefActionListNode {_name = "Waddle Dee"}, false);
259 subActions.AddChild(new MoveDefActionListNode {_name = "Waddle Doo"}, false);
260 subActions.AddChild(new MoveDefActionListNode {_name = "Gyro"}, false);
261 populateCount = 3;
262 child = true;
263 }
264 else if (pikmin)
265 {
266 subActions = new MoveDefGroupNode {Name = "SubActions"};
267 subActions.AddChild(new MoveDefActionListNode {_name = "Red"}, false);
268 subActions.AddChild(new MoveDefActionListNode {_name = "Yellow"}, false);
269 subActions.AddChild(new MoveDefActionListNode {_name = "Blue"}, false);
270 subActions.AddChild(new MoveDefActionListNode {_name = "Purple"}, false);
271 subActions.AddChild(new MoveDefActionListNode {_name = "White"}, false);
272 populateCount = 5;
273 child = true;
274 bias = 1;
275 }
276 else if (ArticleStringID == "ArticleType1_61" && RootNode.Name == "FitKirby")
277 {
278 subActions = new MoveDefGroupNode {Name = "SubActions"};
279 subActions.AddChild(new MoveDefActionListNode {_name = "100 Ton Stone"}, false);
280 subActions.AddChild(new MoveDefActionListNode {_name = "Thwomp Stone"}, false);
281 subActions.AddChild(new MoveDefActionListNode {_name = "Spike Ball"}, false);
282 subActions.AddChild(new MoveDefActionListNode {_name = "Stone Kirby"}, false);
283 subActions.AddChild(new MoveDefActionListNode {_name = "Happy Stone"}, false);
284 populateCount = 5;
285 child = true;
286 }
287 else
288 {
289 subActions = new MoveDefActionListNode {_name = "SubActions"};
290 }
291
292 subActions.Parent = this;
293
294 for (int x = 0; x < populateCount; x++)
295 {
296 ResourceNode Base = subActions;
297 int main = SubactionMainStart,
298 gfx = SubactionGFXStart,
299 sfx = SubactionSFXStart;
300 if (child)
301 {
302 Base = subActions.Children[x];
303 main = _extraOffsets[x + bias];
304 gfx = _extraOffsets[x + populateCount + bias];
305 sfx = _extraOffsets[x + populateCount * 2 + bias];
306 }
307
308 for (int i = 0; i < subactions && i < subActionFlags._names.Count; i++)
309 {
310 Base.AddChild(
311 new MoveDefSubActionGroupNode
312 {
313 _name = subActionFlags._names[i], _flags = subActionFlags._flags[i]._Flags,
314 _inTransTime = subActionFlags._flags[i]._InTranslationTime
315 }, false);
316 }
317
318 if (main > 0)
319 {
320 for (int i = 0; i < subactions && i < subActionFlags._names.Count; i++)
321 {
322 off = *((bint*) (BaseAddress + main) + i);
323 if (off > 0)
324 {
325 new MoveDefActionNode("Main", false, Base.Children[i]).Initialize(Base.Children[i],
326 BaseAddress + off, 0);
327 }
328 else
329 {
330 Base.Children[i].Children.Add(new MoveDefActionNode("Main", true, Base.Children[i]));
331 }
332 }
333 }
334 else
335 {
336 for (int i = 0; i < subactions && i < subActionFlags._names.Count; i++)
337 {
338 Base.Children[i].Children.Add(new MoveDefActionNode("Main", true, Base.Children[i]));
339 }
340 }
341
342 if (gfx > 0)
343 {
344 for (int i = 0; i < subactions && i < subActionFlags._names.Count; i++)
345 {
346 off = *((bint*) (BaseAddress + gfx) + i);
347 if (off > 0)
348 {
349 new MoveDefActionNode("GFX", false, Base.Children[i]).Initialize(Base.Children[i],
350 BaseAddress + off, 0);
351 }
352 else
353 {
354 Base.Children[i].Children.Add(new MoveDefActionNode("GFX", true, Base.Children[i]));
355 }
356 }
357 }
358 else
359 {
360 for (int i = 0; i < subactions && i < subActionFlags._names.Count; i++)
361 {
362 Base.Children[i].Children.Add(new MoveDefActionNode("GFX", true, Base.Children[i]));
363 }
364 }
365
366 if (sfx > 0)
367 {
368 for (int i = 0; i < subactions && i < subActionFlags._names.Count; i++)
369 {
370 off = *((bint*) (BaseAddress + sfx) + i);
371 if (off > 0)
372 {
373 new MoveDefActionNode("SFX", false, Base.Children[i]).Initialize(Base.Children[i],
374 BaseAddress + off, 0);
375 }
376 else
377 {
378 Base.Children[i].Children.Add(new MoveDefActionNode("SFX", true, Base.Children[i]));
379 }
380 }
381 }
382 else
383 {
384 for (int i = 0; i < subactions && i < subActionFlags._names.Count; i++)
385 {
386 Base.Children[i].Children.Add(new MoveDefActionNode("SFX", true, Base.Children[i]));
387 }
388 }
389 }
390 }
391
392 if (ModelVisibility != 0)
393 {
394 (mdlVis = new MoveDefModelVisibilityNode()).Initialize(this, BaseAddress + ModelVisibility, 16);
395 }
396
397 if (CollisionData != 0)
398 {
399 (data1 = new CollisionDataNode {_name = "Collision Data"}).Initialize(this,
401 }
402
403 if (DataOffset2 != 0)
404 {
405 (data2 = new Data2ListNode {_name = "Data2"}).Initialize(this, BaseAddress + DataOffset2, 8);
406 }
407
408 if (DataOffset3 != 0)
409 {
410 (data3 = new MoveDefSectionParamNode {_name = "Data3"}).Initialize(this, BaseAddress + DataOffset3,
411 0);
412 }
413
414 //Extra offsets.
415 //Dedede:
416 //Waddle Dee, Waddle Doo, and Gyro subactions main, gfx, sfx for first 9 offsets.
417 //Pikmin:
418 //Actions 2 is 1st offset.
419 //Red, Yellow, Blue, Purple, and White subactions main, gfx, sfx for next 15 offsets.
420
421 int index = 0;
422 foreach (int i in _extraOffsets)
423 {
424 MoveDefEntryNode entry = null;
425 if (index < 9 && dedede)
426 {
427 }
428 else if (index < 16 && pikmin)
429 {
430 }
431 else if (ArticleStringID == "ArticleType1_61" && RootNode.Name == "FitKirby" && index < 15)
432 {
433 }
434 else if (index == 0 && ArticleStringID == "ArticleType1_6" && RootNode.Name == "FitGameWatch")
435 {
436 GameWatchArticle6 p = new GameWatchArticle6();
437 p.Initialize(this, BaseAddress + i, 0);
438 entry = p;
439 }
440 else if (index == 1 && (
441 ArticleStringID == "ArticleType1_8" &&
442 (RootNode.Name == "FitLucas" || RootNode.Name == "FitNess") ||
443 ArticleStringID == "ArticleType1_11" && RootNode.Name == "FitGameWatch" ||
444 ArticleStringID == "ArticleType1_4" && RootNode.Name == "FitWario" ||
445 ArticleStringID == "ArticleType1_5" && RootNode.Name == "FitWarioMan"))
446 {
447 MoveDefParamListNode p = new MoveDefParamListNode {_name = "ParamList" + index};
448 p.Initialize(this, BaseAddress + i, 0);
449 entry = p;
450 }
451 else if (index > 0 && ArticleStringID == "ArticleType1_46" && RootNode.Name == "FitKirby")
452 {
453 MoveDefEntryNode p = null;
454 switch (index)
455 {
456 case 1:
457 case 2:
458 case 3:
459 case 4:
460 case 5:
461 p = new MoveDefKirbyArticleP1Node {offsetID = index};
462 break;
463 case 6:
464 case 8:
465 //List of bytes - 1 or 0.
466 //7 & 9 are the index of the last 1 + 1
467 break;
468 case 9: break;
469 }
470
471 p?.Initialize(this, BaseAddress + i, 0);
472
473 entry = p;
474 }
475 else if (index > 0 && (ArticleStringID == "ArticleType1_11" && RootNode.Name == "FitFox" ||
476 ArticleStringID == "ArticleType1_9" && RootNode.Name == "FitFalco" ||
477 ArticleStringID == "ArticleType1_11" && RootNode.Name == "FitWolf"))
478 {
479 MoveDefEntryNode p = null;
480 switch (index)
481 {
482 case 1:
483 p = new MoveDefUnk17Node {_name = "Bone Floats"};
484 break;
485 case 2:
486 p = new HitDataListOffsetNode {_name = "HitDataList" + index};
487 break;
488 case 3:
489 p = new Fox11Falco9Wolf11Article3Node();
490 break;
491 case 4:
492 p = new ActionOffsetNode {_name = "Data" + index};
493 break;
494 case 5:
495 p = new SecondaryActionOffsetNode {_name = "Data" + index};
496 break;
497 case 6:
498 p = new Fox11Falco9Wolf11PopoArticle63Node {offsetID = index};
499 break;
500 }
501
502 p?.Initialize(this, BaseAddress + i, 0);
503
504 entry = p;
505 }
506 else if ((index == 23 || index == 24) && ArticleStringID == "ArticleType1_10" &&
507 RootNode.Name == "FitPikmin")
508 {
509 MoveDefEntryNode p = null;
510 switch (index)
511 {
512 case 23:
513 p = new ActionOffsetNode {_name = "Data" + index};
514 break;
515 case 24:
516 p = new SecondaryActionOffsetNode {_name = "Data" + index};
517 break;
518 }
519
520 p?.Initialize(this, BaseAddress + i, 0);
521
522 entry = p;
523 }
524 else if (index == 3 && ArticleStringID == "ArticleType1_14" && RootNode.Name == "FitPopo")
525 {
526 Fox11Falco9Wolf11PopoArticle63Node p = new Fox11Falco9Wolf11PopoArticle63Node {offsetID = index};
527 p.Initialize(this, BaseAddress + i, 0);
528 entry = p;
529 }
530 else if (index > 4 && ArticleStringID == "ArticleType1_7" && RootNode.Name == "FitSonic")
531 {
532 MoveDefEntryNode p = null;
533 switch (index)
534 {
535 case 5:
536 p = new ActionOffsetNode {_name = "Data" + index};
537 break;
538 case 6:
539 p = new SecondaryActionOffsetNode {_name = "Data" + index};
540 break;
541 }
542
543 p?.Initialize(this, BaseAddress + i, 0);
544
545 entry = p;
546 }
547 else if (dedede && index == 11)
548 {
549 DededeHitDataList p = new DededeHitDataList();
550 p.Initialize(this, BaseAddress + i, 0);
551 entry = p;
552 }
553 else if (index == 3 && ArticleStringID == "ArticleType1_4" && RootNode.Name == "FitGanon" ||
554 index == 1 && ArticleStringID == "ArticleType1_7" && RootNode.Name == "FitSonic")
555 {
556 MoveDefHitDataListNode p = new MoveDefHitDataListNode {_name = "HitData"};
557 p.Initialize(this, BaseAddress + i, 0);
558 entry = p;
559 }
560 else
561 {
562 if (i > 1480 && i < Root.dataSize)
563 {
564 MoveDefExternalNode e = Root.IsExternal(i);
565 if (e != null && e.Name.Contains("hitData"))
566 {
567 MoveDefHitDataListNode p = new MoveDefHitDataListNode {_name = e.Name};
568 p.Initialize(this, new DataSource(BaseAddress + i, 0));
569 entry = p;
570 }
571 else if (index < _extraOffsets.Count - 1 && _extraOffsets[index + 1] < 1480 &&
572 _extraOffsets[index + 1] > 1)
573 {
574 int count = _extraOffsets[index + 1];
575 int size = Root.GetSize(i);
576 if (size > 0 && count > 0)
577 {
578 size /= count;
579 MoveDefRawDataNode d = new MoveDefRawDataNode("ExtraParams" + index);
580 entry = d;
581 d.Initialize(this, BaseAddress + i, 0);
582 for (int x = 0; x < count; x++)
583 {
584 new MoveDefSectionParamNode {_name = "Part" + x}.Initialize(d,
585 BaseAddress + i + x * size, size);
586 }
587 }
588 }
589 else
590 {
591 if (e != null && e.Name.Contains("hitData"))
592 {
593 MoveDefHitDataListNode p = new MoveDefHitDataListNode {_name = e.Name};
594 entry = p;
595 p.Initialize(this, new DataSource(BaseAddress + i, 0));
596 }
597 else
598 {
599 (entry = new MoveDefSectionParamNode {_name = "ExtraParams" + index}).Initialize(this,
600 BaseAddress + i, 0);
601 }
602 }
603 }
604 }
605
606 _extraEntries.Add(entry);
607 index++;
608 }
609 }
int SubactionSFXStart
Definition: DataArticleNode.cs:88
bool dedede
Definition: DataArticleNode.cs:105
int ModelVisibility
Definition: DataArticleNode.cs:90
int SubactionGFXStart
Definition: DataArticleNode.cs:86
MoveDefFlagsNode subActionFlags
Definition: DataArticleNode.cs:154
int SubactionMainStart
Definition: DataArticleNode.cs:84
string ArticleStringID
Definition: DataArticleNode.cs:98
int offsetID
Definition: MoveDefNode.cs:136
int _offset
Definition: MoveDefNode.cs:67
MoveDefNode Root
Definition: MoveDefNode.cs:48
VoidPtr BaseAddress
Definition: MoveDefNode.cs:32
List< string > _names
Definition: DataActionFlags.cs:202
List< FDefSubActionFlag > _flags
Definition: DataActionFlags.cs:203
MoveDefExternalNode IsExternal(int offset)
Definition: MoveDefNode.cs:3112
int GetSize(int offset)
Definition: MoveDefNode.cs:3348
ResourceNode _parent
Definition: ResourceNode.cs:142
void Initialize(ResourceNode parent, FileMap source)
Definition: ResourceNode.cs:651
ResourceNode RootNode
Definition: ResourceNode.cs:175
virtual string Name
Definition: ResourceNode.cs:223
virtual void AddChild(ResourceNode child)
Definition: ResourceNode.cs:757

◆ OnRebuild()

override void BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.OnRebuild ( VoidPtr  address,
int  length,
bool  force 
)
inlinevirtual

Reimplemented from BrawlLib.SSBB.ResourceNodes.ResourceNode.

848 {
850
851 int a2Start = 0;
852
853 List<int> mainStarts = null, gfxStarts = null, sfxStarts = null;
854
855 VoidPtr addr = address;
856
857 if (subActions != null)
858 {
861 }
862
863 if (actionFlags != null)
864 {
865 ActionFlags* actionFlagsAddr = (ActionFlags*) addr;
866 aFlags = (int) actionFlagsAddr - (int) _rebuildBase;
867
868 foreach (MoveDefActionFlagsEntryNode a in actionFlags.Children)
869 {
870 a.Rebuild(actionFlagsAddr++, 16, true);
871 }
872
873 addr = (VoidPtr) actionFlagsAddr;
874 }
875
876 if (actions != null)
877 {
878 if (pikmin)
879 {
880 //false for now
881 bool actions1Null = false, actions2Null = false;
882 foreach (MoveDefActionGroupNode grp in actions.Children)
883 {
884 foreach (MoveDefActionNode a in grp.Children)
885 {
886 if (a.Children.Count > 0)
887 {
888 if (a.Index == 0)
889 {
890 actions1Null = false;
891 }
892 else if (a.Index == 1)
893 {
894 actions2Null = false;
895 }
896 }
897 }
898 }
899
900 if (!actions1Null || !actions2Null)
901 {
902 bint* action1Offsets = (bint*) addr;
903 aStart = (int) action1Offsets - (int) _rebuildBase;
904 bint* action2Offsets = (bint*) (addr + actions.Children.Count * 4);
905 a2Start = (int) action2Offsets - (int) _rebuildBase;
906
907 foreach (MoveDefActionGroupNode grp in actions.Children)
908 {
909 foreach (MoveDefActionNode a in grp.Children)
910 {
911 if (a.Index == 0)
912 {
913 if (a.Children.Count > 0)
914 {
915 *action1Offsets = (int) a._entryOffset - (int) a._rebuildBase;
916 _lookupOffsets.Add((int) action1Offsets - (int) _rebuildBase);
917 }
918
919 action1Offsets++;
920 }
921 else if (a.Index == 1)
922 {
923 if (a.Children.Count > 0)
924 {
925 *action2Offsets = (int) a._entryOffset - (int) a._rebuildBase;
926 _lookupOffsets.Add((int) action2Offsets - (int) _rebuildBase);
927 }
928
929 action2Offsets++;
930 }
931 }
932 }
933
934 addr = (VoidPtr) action2Offsets;
935 }
936 }
937 else
938 {
939 bool actionsNull = true;
940 foreach (MoveDefActionNode a in actions.Children)
941 {
942 if (a.Children.Count > 0)
943 {
944 actionsNull = false;
945 }
946 }
947
948 if (!actionsNull)
949 {
950 bint* actionOffsets = (bint*) addr;
951 aStart = (int) actionOffsets - (int) _rebuildBase;
952
953 foreach (MoveDefActionNode a in actions.Children)
954 {
955 if (a.Children.Count > 0)
956 {
957 *actionOffsets = (int) a._entryOffset - (int) a._rebuildBase;
958 _lookupOffsets.Add((int) actionOffsets - (int) _rebuildBase);
959 }
960
961 actionOffsets++;
962 }
963
964 addr = (VoidPtr) actionOffsets;
965 }
966 }
967 }
968
969 if (mdlVis != null)
970 {
971 mdlVis.Rebuild(addr, mdlVis._calcSize, true);
974 addr += mdlVis._calcSize;
975 }
976
977 if (data1 != null)
978 {
979 if (!data1.External)
980 {
981 data1.Rebuild(addr, data1._calcSize, true);
983 addr += data1._calcSize;
984 }
985
986 off1 = (int) data1._entryOffset - (int) _rebuildBase;
987 }
988
989 if (data2 != null)
990 {
991 if (!data2.External)
992 {
993 data2.Rebuild(addr, data2._calcSize, true);
995 addr += data2._calcSize;
996 }
997
998 off2 = (int) data2._entryOffset - (int) _rebuildBase;
999 }
1000
1001 if (data3 != null)
1002 {
1003 if (data3.External)
1004 {
1005 off3 = (int) data3._entryOffset - (int) _rebuildBase;
1006 }
1007 else
1008 {
1009 off3 = (int) addr - (int) _rebuildBase;
1010 data3.Rebuild(addr, data3._calcSize, true);
1011 addr += data3._calcSize;
1012 }
1013 }
1014
1015 if (subActions != null && subActions.Children.Count > 0)
1016 {
1017 bint* lastOffsets = null, mainOffsets, GFXOffsets, SFXOffsets;
1018 FDefSubActionFlag* subActionFlagsAddr = null;
1019 bool mainNull = true, gfxNull = true, sfxNull = true;
1020 MoveDefEntryNode e = subActions;
1021 int populateCount = 1;
1022 bool children = false;
1023 if (subActions.Children[0] is MoveDefActionListNode)
1024 {
1025 populateCount = subActions.Children.Count;
1026 children = true;
1027 mainStarts = new List<int>();
1028 gfxStarts = new List<int>();
1029 sfxStarts = new List<int>();
1030 sMStart = 0;
1031 sGStart = 0;
1032 sSStart = 0;
1033 }
1034
1035 for (int i = 0; i < populateCount; i++)
1036 {
1037 if (children)
1038 {
1039 e = subActions.Children[i] as MoveDefEntryNode;
1040 }
1041
1042 foreach (MoveDefSubActionGroupNode g in e.Children)
1043 {
1044 foreach (MoveDefActionNode a in g.Children)
1045 {
1046 if (a.Children.Count > 0 || a._actionRefs.Count > 0 || a._build)
1047 {
1048 switch (a.Index)
1049 {
1050 case 0:
1051 mainNull = false;
1052 break;
1053 case 1:
1054 gfxNull = false;
1055 break;
1056 case 2:
1057 sfxNull = false;
1058 break;
1059 }
1060 }
1061 }
1062 }
1063
1064 if (i == 0)
1065 {
1066 subActionFlagsAddr = (FDefSubActionFlag*) addr;
1067 sFlags = (int) subActionFlagsAddr - (int) _rebuildBase;
1068 lastOffsets = (bint*) ((VoidPtr) subActionFlagsAddr + e.Children.Count * 8);
1069 }
1070
1071 mainOffsets = lastOffsets;
1072
1073 if (!(mainNull && Static))
1074 {
1075 if (!children)
1076 {
1077 sMStart = (int) mainOffsets - (int) _rebuildBase;
1078 }
1079 else
1080 {
1081 mainStarts.Add((int) mainOffsets - (int) _rebuildBase);
1082 }
1083
1084 GFXOffsets = (bint*) ((VoidPtr) mainOffsets + e.Children.Count * 4);
1085 }
1086 else
1087 {
1088 GFXOffsets = mainOffsets;
1089 }
1090
1091 if (!(gfxNull && Static))
1092 {
1093 if (!children)
1094 {
1095 sGStart = (int) GFXOffsets - (int) _rebuildBase;
1096 }
1097 else
1098 {
1099 gfxStarts.Add((int) GFXOffsets - (int) _rebuildBase);
1100 }
1101
1102 SFXOffsets = (bint*) ((VoidPtr) GFXOffsets + e.Children.Count * 4);
1103 }
1104 else
1105 {
1106 SFXOffsets = GFXOffsets;
1107 }
1108
1109 if (!(sfxNull && Static))
1110 {
1111 if (!children)
1112 {
1113 sSStart = (int) SFXOffsets - (int) _rebuildBase;
1114 }
1115 else
1116 {
1117 sfxStarts.Add((int) SFXOffsets - (int) _rebuildBase);
1118 }
1119
1120 addr = (VoidPtr) SFXOffsets + e.Children.Count * 4;
1121 }
1122 else
1123 {
1124 addr = (VoidPtr) SFXOffsets;
1125 }
1126
1127 lastOffsets = (bint*) addr;
1128
1129 int x = 0; //bool write = true;
1130 foreach (MoveDefSubActionGroupNode grp in e.Children)
1131 {
1132 if (i == 0)
1133 {
1134 *subActionFlagsAddr = new FDefSubActionFlag
1135 {
1136 _Flags = grp._flags, _InTranslationTime = grp._inTransTime,
1137 _stringOffset = (int) subActionStrings[grp.Name] - (int) _rebuildBase
1138 };
1139
1140 if (subActionFlagsAddr->_stringOffset > 0)
1141 {
1142 _lookupOffsets.Add((int) subActionFlagsAddr->_stringOffset.Address -
1143 (int) _rebuildBase);
1144 }
1145
1146 subActionFlagsAddr++;
1147 }
1148
1149 //if (!Static)
1150 //{
1151 // write = false;
1152 // foreach (MoveDefActionNode a in grp.Children)
1153 // if (a.Children.Count > 0 || a._actionRefs.Count > 0)
1154 // write = true;
1155 //}
1156 //if ((Static && grp.Children[0].Children.Count > 0) || (!Static && write))
1157 if (grp.Children[0].Children.Count > 0 ||
1158 (grp.Children[0] as MoveDefActionNode)._actionRefs.Count > 0 ||
1159 (grp.Children[0] as MoveDefActionNode)._build)
1160 {
1161 mainOffsets[x] = (int) (grp.Children[0] as MoveDefActionNode)._entryOffset -
1162 (int) _rebuildBase;
1163 _lookupOffsets.Add((int) &mainOffsets[x] - (int) _rebuildBase);
1164 }
1165
1166 //if ((Static && grp.Children[1].Children.Count > 0) || (!Static && write))
1167 if (grp.Children[1].Children.Count > 0 ||
1168 (grp.Children[1] as MoveDefActionNode)._actionRefs.Count > 0 ||
1169 (grp.Children[1] as MoveDefActionNode)._build)
1170 {
1171 GFXOffsets[x] = (int) (grp.Children[1] as MoveDefActionNode)._entryOffset -
1172 (int) _rebuildBase;
1173 _lookupOffsets.Add((int) &GFXOffsets[x] - (int) _rebuildBase);
1174 }
1175
1176 //if ((Static && grp.Children[2].Children.Count > 0) || (!Static && write))
1177 if (grp.Children[2].Children.Count > 0 ||
1178 (grp.Children[2] as MoveDefActionNode)._actionRefs.Count > 0 ||
1179 (grp.Children[2] as MoveDefActionNode)._build)
1180 {
1181 SFXOffsets[x] = (int) (grp.Children[2] as MoveDefActionNode)._entryOffset -
1182 (int) _rebuildBase;
1183 _lookupOffsets.Add((int) &SFXOffsets[x] - (int) _rebuildBase);
1184 }
1185
1186 x++;
1187 }
1188 }
1189
1190 addr = lastOffsets;
1191 }
1192
1193 foreach (MoveDefEntryNode e in _extraEntries)
1194 {
1195 if (e != null)
1196 {
1197 if (!e.External)
1198 {
1199 e.Rebuild(addr, e._calcSize, true);
1200 _lookupOffsets.AddRange(e._lookupOffsets);
1201 if (e._lookupOffsets.Count != e._lookupCount)
1202 {
1203 Console.WriteLine(e._lookupCount - e._lookupOffsets.Count);
1204 }
1205
1206 addr += e._calcSize;
1207 }
1208 }
1209 }
1210
1211 if (_buildHeader)
1212 {
1213 _entryOffset = addr;
1214
1215 Article* article = (Article*) addr;
1216
1217 article->_id = id;
1218 article->_boneID = bone;
1219 article->_arcGroup = group;
1220
1221 article->_actionsStart = aStart;
1222 article->_actionFlagsStart = aFlags;
1223 article->_subactionFlagsStart = sFlags;
1224 article->_subactionMainStart = sMStart;
1225 article->_subactionGFXStart = sGStart;
1226 article->_subactionSFXStart = sSStart;
1227 article->_modelVisibility = visStart;
1228 article->_collisionData = off1;
1229 article->_unknownD2 = off2;
1230 article->_unknownD3 = off3;
1231
1232 bint* ext = (bint*) (addr + 52);
1233 int index = 0;
1234 if (_extraEntries.Count > 0)
1235 {
1236 foreach (int i in _extraOffsets)
1237 {
1238 MoveDefEntryNode e = _extraEntries[index];
1239 if (e != null)
1240 {
1241 ext[index] = (int) e._entryOffset - (int) _rebuildBase;
1242 _lookupOffsets.Add((int) &ext[index] - (int) _rebuildBase);
1243 }
1244 else if (index == 0 && Static)
1245 {
1246 ext[index] = subActions == null ? 0 : subActions.Children.Count;
1247 }
1248 else
1249 {
1250 ext[index] = i;
1251 }
1252
1253 index++;
1254 }
1255 }
1256
1257 index = 0;
1258
1259 if (pikmin)
1260 {
1261 ext[0] = a2Start;
1262 _lookupOffsets.Add((int) &ext[0] - (int) _rebuildBase);
1263 }
1264
1265 int bias = pikmin ? 1 : 0;
1266 if (mainStarts != null)
1267 {
1268 foreach (int i in mainStarts)
1269 {
1270 ext[index + bias] = i;
1271 _lookupOffsets.Add((int) &ext[index + bias] - (int) _rebuildBase);
1272 index++;
1273 }
1274 }
1275
1276 if (gfxStarts != null)
1277 {
1278 foreach (int i in gfxStarts)
1279 {
1280 ext[index + bias] = i;
1281 _lookupOffsets.Add((int) &ext[index + bias] - (int) _rebuildBase);
1282 index++;
1283 }
1284 }
1285
1286 if (sfxStarts != null)
1287 {
1288 foreach (int i in sfxStarts)
1289 {
1290 ext[index + bias] = i;
1291 _lookupOffsets.Add((int) &ext[index + bias] - (int) _rebuildBase);
1292 index++;
1293 }
1294 }
1295
1296 if ((int) (addr + 52 + _extraOffsets.Count * 4) - (int) address != _calcSize)
1297 {
1298 Console.WriteLine(_calcSize - ((int) (addr + 52 + _extraOffsets.Count * 4) - (int) address));
1299 }
1300
1301 //Add all header offsets
1302 bint* off = (bint*) ((VoidPtr) article + 12);
1303 for (int i = 0; i < 10; i++)
1304 {
1305 if (off[i] > 1480 && off[i] < Root.dataSize)
1306 {
1307 _lookupOffsets.Add((int) &off[i] - (int) _rebuildBase);
1308 }
1309 }
1310
1311 if (_lookupOffsets.Count != _lookupCount)
1312 {
1313 Console.WriteLine(_lookupCount - _lookupOffsets.Count);
1314 }
1315 }
1316 else
1317 {
1318 if ((int) addr - (int) address != _childLength)
1319 {
1320 Console.WriteLine((int) addr - (int) address);
1321 }
1322 }
1323 }
void WriteTable(VoidPtr address)
Definition: MoveDefStringTables.cs:45
int id
Definition: DataArticleNode.cs:101
VoidPtr _rebuildBase
Definition: MoveDefNode.cs:18
List< int > _lookupOffsets
Definition: MoveDefNode.cs:21
int _rebuildOffset
Definition: MoveDefNode.cs:26
VoidPtr _entryOffset
Definition: MoveDefNode.cs:23
override void Rebuild(bool force)
Definition: MoveDefNode.cs:93
int _calcSize
Definition: ResourceNode.cs:145
VoidPtr Address
Definition: BigEndianTypes.cs:33
Definition: FighterDefinition.cs:885
Definition: FighterDefinition.cs:348
Definition: FighterDefinition.cs:549
bint _stringOffset
Definition: FighterDefinition.cs:555

Member Data Documentation

◆ _buildHeader

bool BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode._buildHeader = true

◆ _extraEntries

List<MoveDefEntryNode> BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode._extraEntries

◆ _extraOffsets

List<int> BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode._extraOffsets

◆ actionAddr

VoidPtr BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.actionAddr

◆ actionFlags

MoveDefActionFlagsNode BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.actionFlags

◆ actions

MoveDefActionListNode BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.actions

◆ aFlags

int BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.aFlags

◆ aStart

int BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.aStart

◆ bone

int BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.bone

◆ data1

CollisionDataNode BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.data1

◆ data2

Data2ListNode BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.data2

◆ data3

MoveDefSectionParamNode BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.data3

◆ extraOffset

bool BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.extraOffset = false

◆ group

int BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.group

◆ id

int BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.id

◆ mdlVis

MoveDefModelVisibilityNode BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.mdlVis

◆ off1

int BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.off1

◆ off2

int BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.off2

◆ off3

int BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.off3

◆ sFlags

int BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.sFlags

◆ sGStart

int BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.sGStart

◆ sMStart

int BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.sMStart

◆ sSStart

int BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.sSStart

◆ Static

bool BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.Static

◆ subActionFlags

MoveDefFlagsNode BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.subActionFlags

◆ subActions

MoveDefEntryNode BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.subActions

◆ subActionStrings

FDefSubActionStringTable BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.subActionStrings

◆ visStart

int BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.visStart

Property Documentation

◆ ActionFlagsStart

int BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.ActionFlagsStart
get

◆ ActionsStart

int BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.ActionsStart
get

◆ ARCEntryGroup

int BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.ARCEntryGroup
getset
48 {
49 get => group;
50 set
51 {
52 group = value;
54 }
55 }
virtual void SignalPropertyChange()
Definition: ResourceNode.cs:313

◆ ArticleGroupID

int BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.ArticleGroupID
getset
37 {
38 get => id;
39 set
40 {
41 id = value;
43 }
44 }

◆ ArticleStringID

string BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.ArticleStringID
get

◆ Bone

string BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.Bone
getset
61 {
62 get => BoneNode == null ? bone.ToString() : BoneNode.Name;
63 set
64 {
65 if (Model == null)
66 {
67 bone = Convert.ToInt32(value);
68 }
69 else
70 {
71 BoneNode = string.IsNullOrEmpty(value) ? BoneNode : Model.FindBone(value);
72 }
73
75 }
76 }
MDL0BoneNode FindBone(string name)
Definition: MDL0Node.cs:752
MDL0BoneNode BoneNode
Definition: DataArticleNode.cs:15
MDL0Node Model
Definition: MoveDefNode.cs:44
string Name
Definition: IBoneNode.cs:11

◆ BoneNode

MDL0BoneNode BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.BoneNode
getset
15 {
16 get
17 {
18 if (Model == null)
19 {
20 return null;
21 }
22
23 if (bone > Model._linker.BoneCache.Length || bone < 0)
24 {
25 return null;
26 }
27
28 return (MDL0BoneNode) Model._linker.BoneCache[bone];
29 }
30 set => bone = value.BoneIndex;
31 }
ModelLinker _linker
Definition: MDL0Node.cs:45

◆ CollisionData

int BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.CollisionData
get

◆ DataOffset2

int BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.DataOffset2
get

◆ DataOffset3

int BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.DataOffset3
get

◆ dedede

bool BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.dedede
get

◆ ExtraEntries

List<MoveDefEntryNode> BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.ExtraEntries
get

◆ ExtraOffsets

List<int> BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.ExtraOffsets
get

◆ ID

int BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.ID
get

◆ ModelVisibility

int BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.ModelVisibility
get

◆ pikmin

bool BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.pikmin
get

◆ SubactionFlagsStart

int BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.SubactionFlagsStart
get

◆ SubactionGFXStart

int BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.SubactionGFXStart
get

◆ SubactionMainStart

int BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.SubactionMainStart
get

◆ SubactionSFXStart

int BrawlLib.SSBB.ResourceNodes.MoveDefArticleNode.SubactionSFXStart
get

The documentation for this class was generated from the following file: