Advertisement
expired6978

Swap Weapon Nodes

Feb 23rd, 2014
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.15 KB | None | 0 0
  1. void __stdcall SwapWeaponParent(TESObjectWEAP *weapon, char a2, NiNode *skeleton, char a4)
  2. {
  3.   char weaponType; // al@3
  4.   int *nodeName; // eax@8
  5.   int weaponNode; // eax@10
  6.   NiNode *niNode1; // eax@11
  7.   NiNode *nodeTmp2; // esi@11
  8.   unsigned int i; // edi@12
  9.   NiAVObject **nodeChildren; // edx@13
  10.   void *v11; // ecx@16
  11.   char *nodename; // esi@16
  12.   int *skeletalNodes1; // eax@18
  13.   int nodeNames; // eax@18
  14.   NiNode *niNode2; // eax@19
  15.   int object1; // eax@21
  16.   int weaponType2; // eax@23
  17.   int *skeletalNodes2; // eax@24
  18.   int nodeNames2; // eax@24
  19.   NiNode *niNode3; // eax@25
  20.   int object2; // eax@27
  21.   char *equippedWeaponNodeName1; // eax@30
  22.   char *equippedWeaponNodeName2; // eax@31
  23.  
  24.   if ( weapon )
  25.   {
  26.     if ( skeleton )
  27.     {
  28.       weaponType = weapon->gameData.type;
  29.       if ( weaponType == 7 || weaponType == 9 )
  30.       {
  31.         if ( !a2 )
  32.         {
  33.           if ( !a4 )
  34.           {
  35.             if ( weaponType == 9 )
  36.               nodeName = GetSkeletalNodes() + 0x138;
  37.             else
  38.               nodeName = GetSkeletalNodes() + 0x58;
  39.             weaponNode = GetNodeByNameT(skeleton, (int)nodeName);
  40.             if ( weaponNode )
  41.             {
  42.               niNode1 = (NiNode *)(*(int (__thiscall **)(_DWORD))(*(_DWORD *)weaponNode + 0xC))(weaponNode);
  43.               nodeTmp2 = niNode1;
  44.               if ( niNode1 )
  45.               {
  46.                 v11 = 0;
  47.                 i = 0;
  48.                 if ( niNode1->m_children.m_emptyRunStart > 0u )
  49.                 {
  50.                   do
  51.                   {
  52.                     nodeChildren = nodeTmp2->m_children.m_data;
  53.                     if ( nodeChildren[i] )
  54.                     {
  55.                       sub_68FCF0(g_garbageCollector, (int)nodeChildren[i]);
  56.                       nodeTmp2->baseclass_0.baseclass_0.baseclass_0.baseclass_0.vfptr[28].__vecDelDtor(
  57.                         (NiRefObject *)nodeTmp2,
  58.                         i);
  59.                     }
  60.                     ++i;
  61.                   }
  62.                   while ( i < nodeTmp2->m_children.m_emptyRunStart );
  63.                 }
  64.               }
  65.             }
  66.           }
  67.         }
  68.       }
  69.       nodename = (char *)GetNodeNameForWeaponType(v11, weapon->gameData.type);
  70.       if ( sub_A50DB0((const char **)nodename, 0) )
  71.       {
  72.         if ( a4 )
  73.         {
  74.           skeletalNodes1 = GetSkeletalNodes();
  75.           nodeNames = GetNodeByName(skeleton, (int)(skeletalNodes1 + 0x6C), 1);
  76.           if ( nodeNames )
  77.           {
  78.             niNode2 = (NiNode *)(*(int (__thiscall **)(_DWORD))(*(_DWORD *)nodeNames + 0xC))(nodeNames);
  79.             if ( niNode2 )
  80.             {
  81.               if ( niNode2->m_children.m_emptyRunStart )
  82.               {
  83.                 object1 = GetObjectAt((int)niNode2, 0);
  84.                 if ( object1 )
  85.                   sub_42A5E0(object1, a2 == 0);
  86.               }
  87.             }
  88.           }
  89.         }
  90.         else
  91.         {
  92.           LOBYTE(weaponType2) = weapon->gameData.type;
  93.           if ( (_BYTE)weaponType2 == 8 )
  94.           {
  95.             skeletalNodes2 = GetSkeletalNodes();
  96.             nodeNames2 = GetNodeByName(skeleton, (int)(skeletalNodes2 + 0x58), 1);
  97.             if ( nodeNames2 )
  98.             {
  99.               niNode3 = (NiNode *)(*(int (__thiscall **)(_DWORD))(*(_DWORD *)nodeNames2 + 0xC))(nodeNames2);
  100.               if ( niNode3 )
  101.               {
  102.                 if ( niNode3->m_children.m_emptyRunStart )
  103.                 {
  104.                   object2 = GetObjectAt((int)niNode3, 0);
  105.                   if ( object2 )
  106.                     sub_42A5E0(object2, a2 == 0);
  107.                 }
  108.               }
  109.             }
  110.           }
  111.           else
  112.           {
  113.             weaponType2 = (char)weaponType2;
  114.             if ( a2 )
  115.             {
  116.               equippedWeaponNodeName1 = GetNodeNameWEAPON(weaponType2, 0);
  117.               SwapNodeParent(skeleton, nodename, equippedWeaponNodeName1, 0);
  118.             }
  119.             else
  120.             {
  121.               equippedWeaponNodeName2 = GetNodeNameWEAPON(weaponType2, 0);
  122.               SwapNodeParent(skeleton, equippedWeaponNodeName2, nodename, 0);
  123.             }
  124.           }
  125.         }
  126.       }
  127.     }
  128.   }
  129. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement