Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.48 KB | None | 0 0
  1. #include "SADXModLoader.h"
  2.  
  3. static NJS_OBJECT **SONIC_OBJECTS = nullptr;
  4. DataArray(WeldInfo, SonicWeldInfo, 0x03C55E28, 0x25);
  5.  
  6. //SONIC_OBJECTS[0] = Sonic_Root
  7. //SONIC_OBJECTS[1] = Sonic_Bicep_Right
  8. //SONIC_OBJECTS[2] = Sonic_Elbow_Right
  9. //SONIC_OBJECTS[3] = Sonic_Wrist_Right
  10. //SONIC_OBJECTS[4] = Sonic_Palm_Right
  11. //SONIC_OBJECTS[5] = Sonic_Fingers_Right
  12. //SONIC_OBJECTS[6] = Sonic_Thumb_Right
  13. //SONIC_OBJECTS[7] = Sonic_Bicep_Left
  14. //SONIC_OBJECTS[8] = Sonic_Elbow_Left
  15. //SONIC_OBJECTS[9] = Sonic_Wrist_Left
  16. //SONIC_OBJECTS[10] = Sonic_Palm_Left
  17. //SONIC_OBJECTS[11] = Sonic_Fingers_Left
  18. //SONIC_OBJECTS[12] = Sonic_Thigh_Right
  19. //SONIC_OBJECTS[13] = Sonic_Knee_Right
  20. //SONIC_OBJECTS[14] = Sonic_Ankle_Right
  21. //SONIC_OBJECTS[15] = Sonic_Heel_Right
  22. //SONIC_OBJECTS[16] = Sonic_Toe_Right
  23. //SONIC_OBJECTS[17] = Sonic_Thigh_Left
  24. //SONIC_OBJECTS[18] = Sonic_Knee_Left
  25. //SONIC_OBJECTS[19] = Sonic_Ankle_Left
  26. //SONIC_OBJECTS[20] = Sonic_Heel_Left
  27. //SONIC_OBJECTS[21] = Sonic_Toe_Left
  28. //SONIC_OBJECTS[22] = SuperSonic_Root
  29. //SONIC_OBJECTS[23] = SuperSonic_Bicep_Right
  30. //SONIC_OBJECTS[24] = SuperSonic_Elbow_Right
  31. //SONIC_OBJECTS[25] = SuperSonic_Wrist_Right
  32. //SONIC_OBJECTS[26] = SuperSonic_Palm_Right
  33. //SONIC_OBJECTS[27] = SuperSonic_Fingers_Right
  34. //SONIC_OBJECTS[28] = SuperSonic_Bicep_Left
  35. //SONIC_OBJECTS[29] = SuperSonic_Elbow_Left
  36. //SONIC_OBJECTS[30] = SuperSonic_Wrist_Left
  37. //SONIC_OBJECTS[31] = SuperSonic_Palm_Left
  38. //SONIC_OBJECTS[32] = SuperSonic_Fingers_Left
  39. //SONIC_OBJECTS[33] = SuperSonic_Thigh_Right
  40. //SONIC_OBJECTS[34] = SuperSonic_Knee_Right
  41. //SONIC_OBJECTS[35] = SuperSonic_Ankle_Right
  42. //SONIC_OBJECTS[36] = SuperSonic_Heel_Right
  43. //SONIC_OBJECTS[37] = SuperSonic_Toe_Right
  44. //SONIC_OBJECTS[38] = SuperSonic_Thigh_Left
  45. //SONIC_OBJECTS[39] = SuperSonic_Knee_Left
  46. //SONIC_OBJECTS[40] = SuperSonic_Ankle_Left
  47. //SONIC_OBJECTS[41] = SuperSonic_Heel_Left
  48. //SONIC_OBJECTS[42] = SuperSonic_Toe_Left
  49.  
  50. //SONIC_OBJECTS[44] = Sonic_Jumpball
  51. //SONIC_OBJECTS[45] = Sonic_EyeParent_Left
  52. //SONIC_OBJECTS[46] = Sonic_Head
  53. //SONIC_OBJECTS[47] = Sonic_Event_Head
  54. //SONIC_OBJECTS[48] = Sonic_HeadParent_2
  55. //SONIC_OBJECTS[49] = Sonic_Head
  56. //SONIC_OBJECTS[50] = Sonic_HeadParent_1
  57. //SONIC_OBJECTS[51] = Sonic_Eye_Right
  58. //SONIC_OBJECTS[52] = Sonic_Eye_Left
  59.  
  60. //SONIC_OBJECTS[54] = LightSpeedDash_Model_Root
  61. //SONIC_OBJECTS[55] = LightSpeedDash_Model_HeadParent_1 (Matches SONIC_OBJECTS[50])
  62. //SONIC_OBJECTS[56] = HomingAttackSphere
  63. //SONIC_OBJECTS[57] = HomingAttackTrail
  64. //SONIC_OBJECTS[58] = LightSpeedDash_Shoes_Heel_Left
  65. //SONIC_OBJECTS[59] = LightSpeedDash_Shoes_Toe_Left
  66. //SONIC_OBJECTS[60] = LightSpeedDash_Shoes_Heel_Right
  67. //SONIC_OBJECTS[61] = LightSpeedDash_Shoes_Toe_Right
  68. //SONIC_OBJECTS[62] = Sonic_Wrist_Parent_Right
  69. //SONIC_OBJECTS[63] = CrystalRing_Wrist
  70. //SONIC_OBJECTS[64] = CrystalRing_Upgrade
  71. //SONIC_OBJECTS[65] = LightSpeedDash_Shoes_Upgrade
  72. //SONIC_OBJECTS[66] = Sonic_Jump_Root
  73. //SONIC_OBJECTS[67] = Sonic_Jumpball
  74. //SONIC_OBJECTS[68] = MetalSonic_Root
  75. //SONIC_OBJECTS[69] = MetalSonic_Jump_Root
  76. //SONIC_OBJECTS[70] = MetalSonic_Jumpball
  77. //SONIC_OBJECTS[71] = Sonic_Snowboard
  78. //SONIC_OBJECTS[72] = Spindash_Charging
  79. //SONIC_OBJECTS[73] = LightSpeedDash_Charging_Particles
  80. //SONIC_OBJECTS[74] = SuperSonic_Aura
  81. //SONIC_OBJECTS[75] = SuperSonic_Moving_Charge_1
  82. //SONIC_OBJECTS[76] = SuperSonic_Moving_Charge_2
  83. //SONIC_OBJECTS[77] = SuperSonic_WaterEffect_1
  84. //SONIC_OBJECTS[78] = SuperSonic_WaterEffect_2
  85.  
  86. //The following are the indices used to determine which vertices are welded between two models.
  87. //The first is the index on Model_A and the second is the index on Model_B.
  88. //Edit these as needed for creating your new welds, the code will take care of accounting for the side of the array.
  89.  
  90. uint16_t SonicUpperArm_Indices[] = {
  91. 0, 2,
  92. 1, 3,
  93. 4, 6,
  94. 5, 7
  95. };
  96.  
  97. uint16_t SonicLowerArm_Indices[] = {
  98. 0, 10,
  99. 1, 11,
  100. 4, 14,
  101. 5, 15
  102. };
  103.  
  104. uint16_t SonicUpperLeg_Indices[] = {
  105. 0, 2,
  106. 1, 3,
  107. 4, 6,
  108. 5, 7
  109. };
  110.  
  111. uint16_t SonicLowerLeg_Indices[] = {
  112. 0, 2,
  113. 1, 3,
  114. 4, 6,
  115. 5, 7
  116. };
  117.  
  118. uint16_t SonicShoe_Indices[] = {
  119. 2, 3,
  120. 12, 8,
  121. 0, 1,
  122. 1, 0,
  123. 17, 13,
  124. 3, 2,
  125. 23, 30,
  126. 29, 29,
  127. 28, 28,
  128. 30, 32,
  129. 31, 31
  130. };
  131.  
  132. uint16_t SonicHand_Indices[] = {
  133. 11, 50,
  134. 4, 15,
  135. 8, 12,
  136. 5, 54,
  137. 1, 55,
  138. 12, 13,
  139. 0, 14
  140. };
  141.  
  142. uint16_t SonicLSShoe_Indices[] = {
  143. 2, 3,
  144. 12, 8,
  145. 0, 1,
  146. 1, 0,
  147. 17, 13,
  148. 3, 2,
  149. 38, 27,
  150. 29, 19,
  151. 39, 28
  152. };
  153.  
  154. uint16_t word_91CCA8[] = {
  155. 4, 15,
  156. 0, 14,
  157. 1, 13,
  158. 5, 12
  159. };
  160.  
  161. //This is the function straight from the game with modifications to make it easier to use.
  162. //Simply use the comments for what models are what and follow the outline from the code itself to create your new welds.
  163.  
  164. void __cdecl InitSonicWeldInfo_mod()
  165. {
  166. NJS_OBJECT *v0; // ebp@1
  167. NJS_OBJECT *v1; // ebp@1
  168. NJS_OBJECT *v2; // ebp@1
  169. NJS_OBJECT *v3; // ebp@1
  170. NJS_OBJECT *v4; // edi@1
  171. NJS_OBJECT *v5; // eax@1
  172.  
  173. //The following welds are for Sonic
  174. SonicWeldInfo[0].BaseModel = SONIC_OBJECTS[0];
  175. SonicWeldInfo[0].ModelA = SONIC_OBJECTS[1];
  176. SonicWeldInfo[0].ModelB = SONIC_OBJECTS[2];
  177. SonicWeldInfo[0].anonymous_5 = 0;
  178. SonicWeldInfo[0].VertexBuffer = 0;
  179. SonicWeldInfo[0].VertexPairCount = (uint8_t)(LengthOfArray(SonicUpperArm_Indices) / 2);
  180. SonicWeldInfo[0].WeldType = 2;
  181. SonicWeldInfo[0].VertIndexes = SonicUpperArm_Indices;
  182. SonicWeldInfo[1].BaseModel = SONIC_OBJECTS[0];
  183. SonicWeldInfo[1].ModelA = SONIC_OBJECTS[2];
  184. SonicWeldInfo[1].ModelB = SONIC_OBJECTS[3];
  185. SonicWeldInfo[1].VertexPairCount = (uint8_t)(LengthOfArray(SonicLowerArm_Indices) / 2);
  186. SonicWeldInfo[1].WeldType = 2;
  187. SonicWeldInfo[1].anonymous_5 = 0;
  188. SonicWeldInfo[1].VertexBuffer = 0;
  189. SonicWeldInfo[1].VertIndexes = SonicLowerArm_Indices;
  190. SonicWeldInfo[2].BaseModel = SONIC_OBJECTS[0];
  191. SonicWeldInfo[2].ModelA = SONIC_OBJECTS[7];
  192. SonicWeldInfo[2].ModelB = SONIC_OBJECTS[8];
  193. SonicWeldInfo[2].VertexPairCount = (uint8_t)(LengthOfArray(SonicUpperArm_Indices) / 2);
  194. SonicWeldInfo[2].WeldType = 2;
  195. SonicWeldInfo[2].anonymous_5 = 0;
  196. SonicWeldInfo[2].VertexBuffer = 0;
  197. SonicWeldInfo[2].VertIndexes = SonicUpperArm_Indices;
  198. SonicWeldInfo[3].BaseModel = SONIC_OBJECTS[0];
  199. SonicWeldInfo[3].ModelA = SONIC_OBJECTS[8];
  200. v0 = SONIC_OBJECTS[9];
  201. SonicWeldInfo[3].VertIndexes = SonicLowerArm_Indices;
  202. SonicWeldInfo[3].ModelB = v0;
  203. SonicWeldInfo[3].VertexPairCount = (uint8_t)(LengthOfArray(SonicLowerArm_Indices) / 2);
  204. SonicWeldInfo[3].WeldType = 2;
  205. SonicWeldInfo[3].anonymous_5 = 0;
  206. SonicWeldInfo[3].VertexBuffer = 0;
  207. SonicWeldInfo[4].BaseModel = SONIC_OBJECTS[0];
  208. SonicWeldInfo[4].ModelA = SONIC_OBJECTS[12];
  209. SonicWeldInfo[4].ModelB = SONIC_OBJECTS[13];
  210. SonicWeldInfo[4].VertexPairCount = (uint8_t)(LengthOfArray(SonicUpperLeg_Indices) / 2);
  211. SonicWeldInfo[4].WeldType = 2;
  212. SonicWeldInfo[4].anonymous_5 = 0;
  213. SonicWeldInfo[4].VertexBuffer = 0;
  214. SonicWeldInfo[4].VertIndexes = SonicUpperLeg_Indices;
  215. SonicWeldInfo[5].BaseModel = SONIC_OBJECTS[0];
  216. SonicWeldInfo[5].ModelA = SONIC_OBJECTS[13];
  217. SonicWeldInfo[5].ModelB = SONIC_OBJECTS[14];
  218. SonicWeldInfo[5].VertexPairCount = (uint8_t)(LengthOfArray(SonicLowerLeg_Indices) / 2);
  219. SonicWeldInfo[5].WeldType = 2;
  220. SonicWeldInfo[5].anonymous_5 = 0;
  221. SonicWeldInfo[5].VertexBuffer = 0;
  222. SonicWeldInfo[5].VertIndexes = SonicLowerLeg_Indices;
  223. SonicWeldInfo[6].BaseModel = SONIC_OBJECTS[0];
  224. SonicWeldInfo[6].ModelA = SONIC_OBJECTS[17];
  225. v1 = SONIC_OBJECTS[18];
  226. SonicWeldInfo[6].VertIndexes = SonicUpperLeg_Indices;
  227. SonicWeldInfo[6].ModelB = v1;
  228. SonicWeldInfo[6].VertexPairCount = (uint8_t)(LengthOfArray(SonicUpperLeg_Indices) / 2);
  229. SonicWeldInfo[6].WeldType = 2;
  230. SonicWeldInfo[6].anonymous_5 = 0;
  231. SonicWeldInfo[6].VertexBuffer = 0;
  232. SonicWeldInfo[7].BaseModel = SONIC_OBJECTS[0];
  233. SonicWeldInfo[7].ModelA = SONIC_OBJECTS[18];
  234. SonicWeldInfo[7].ModelB = SONIC_OBJECTS[19];
  235. SonicWeldInfo[7].VertexPairCount = (uint8_t)(LengthOfArray(SonicLowerLeg_Indices) / 2);
  236. SonicWeldInfo[7].WeldType = 2;
  237. SonicWeldInfo[7].anonymous_5 = 0;
  238. SonicWeldInfo[7].VertexBuffer = 0;
  239. SonicWeldInfo[7].VertIndexes = SonicLowerLeg_Indices;
  240. SonicWeldInfo[8].BaseModel = SONIC_OBJECTS[0];
  241. SonicWeldInfo[8].ModelA = SONIC_OBJECTS[15];
  242. SonicWeldInfo[8].ModelB = SONIC_OBJECTS[16];
  243. SonicWeldInfo[8].VertexPairCount = (uint8_t)(LengthOfArray(SonicShoe_Indices) / 2);
  244. SonicWeldInfo[8].WeldType = 2;
  245. SonicWeldInfo[8].anonymous_5 = 0;
  246. SonicWeldInfo[8].VertexBuffer = 0;
  247. SonicWeldInfo[8].VertIndexes = SonicShoe_Indices;
  248. SonicWeldInfo[9].BaseModel = SONIC_OBJECTS[0];
  249. SonicWeldInfo[9].ModelA = SONIC_OBJECTS[20];
  250. v2 = SONIC_OBJECTS[21];
  251. SonicWeldInfo[9].VertIndexes = SonicShoe_Indices;
  252. SonicWeldInfo[9].ModelB = v2;
  253. SonicWeldInfo[9].VertexPairCount = (uint8_t)(LengthOfArray(SonicShoe_Indices) / 2);
  254. SonicWeldInfo[9].WeldType = 2;
  255. SonicWeldInfo[9].anonymous_5 = 0;
  256. SonicWeldInfo[9].VertexBuffer = 0;
  257. SonicWeldInfo[10].BaseModel = SONIC_OBJECTS[0];
  258. SonicWeldInfo[10].ModelA = SONIC_OBJECTS[10];
  259. SonicWeldInfo[10].ModelB = SONIC_OBJECTS[11];
  260. SonicWeldInfo[10].VertexPairCount = (uint8_t)(LengthOfArray(SonicHand_Indices) / 2);
  261. SonicWeldInfo[10].WeldType = 2;
  262. SonicWeldInfo[10].anonymous_5 = 0;
  263. SonicWeldInfo[10].VertexBuffer = 0;
  264. SonicWeldInfo[10].VertIndexes = SonicHand_Indices;
  265. SonicWeldInfo[11].BaseModel = SONIC_OBJECTS[0];
  266. SonicWeldInfo[11].ModelA = SONIC_OBJECTS[4];
  267. SonicWeldInfo[11].ModelB = SONIC_OBJECTS[5];
  268. SonicWeldInfo[11].VertexPairCount = (uint8_t)(LengthOfArray(SonicHand_Indices) / 2);
  269. SonicWeldInfo[11].WeldType = 2;
  270. SonicWeldInfo[11].anonymous_5 = 0;
  271. SonicWeldInfo[11].VertexBuffer = 0;
  272. SonicWeldInfo[11].VertIndexes = SonicHand_Indices;
  273. SonicWeldInfo[12].BaseModel = SONIC_OBJECTS[0];
  274. SonicWeldInfo[12].ModelA = SONIC_OBJECTS[58];
  275. SonicWeldInfo[12].ModelB = SONIC_OBJECTS[59];
  276. SonicWeldInfo[12].VertexPairCount = (uint8_t)(LengthOfArray(SonicLSShoe_Indices) / 2);
  277. SonicWeldInfo[12].WeldType = 2;
  278. SonicWeldInfo[12].anonymous_5 = 0;
  279. SonicWeldInfo[12].VertexBuffer = 0;
  280. SonicWeldInfo[12].VertIndexes = SonicLSDashShoe_Indices;
  281. SonicWeldInfo[13].BaseModel = SONIC_OBJECTS[0];
  282. SonicWeldInfo[13].ModelA = SONIC_OBJECTS[60];
  283. SonicWeldInfo[13].ModelB = SONIC_OBJECTS[61];
  284. SonicWeldInfo[13].VertexPairCount = (uint8_t)(LengthOfArray(SonicLSShoe_Indices) / 2);
  285. SonicWeldInfo[13].WeldType = 2;
  286. SonicWeldInfo[13].anonymous_5 = 0;
  287. SonicWeldInfo[13].VertexBuffer = 0;
  288. SonicWeldInfo[13].VertIndexes = SonicLSDashShoe_Indices;
  289. SonicWeldInfo[14].BaseModel = SONIC_OBJECTS[0];
  290. SonicWeldInfo[14].ModelA = SONIC_OBJECTS[2];
  291. SonicWeldInfo[14].ModelB = SONIC_OBJECTS[63];
  292. SonicWeldInfo[14].VertexPairCount = (uint8_t)(LengthOfArray(SonicUpperArm_Indices) / 2);
  293. SonicWeldInfo[14].WeldType = 2;
  294. SonicWeldInfo[14].anonymous_5 = 0;
  295. SonicWeldInfo[14].VertexBuffer = 0;
  296. SonicWeldInfo[14].VertIndexes = SonicUpperArm_Indices;
  297. SonicWeldInfo[15].BaseModel = SONIC_OBJECTS[0];
  298. SonicWeldInfo[15].ModelA = SONIC_OBJECTS[5];
  299. SonicWeldInfo[15].ModelB = 0;
  300. SonicWeldInfo[15].VertexPairCount = 2;
  301. SonicWeldInfo[15].WeldType = 4;
  302. SonicWeldInfo[15].anonymous_5 = 0;
  303. SonicWeldInfo[15].VertexBuffer = 0;
  304. SonicWeldInfo[15].VertIndexes = 0;
  305. SonicWeldInfo[16].BaseModel = SONIC_OBJECTS[0];
  306. SonicWeldInfo[16].ModelA = SONIC_OBJECTS[11];
  307. SonicWeldInfo[16].ModelB = 0;
  308. SonicWeldInfo[16].VertexPairCount = 2;
  309. SonicWeldInfo[16].WeldType = 5;
  310. SonicWeldInfo[16].anonymous_5 = 0;
  311. SonicWeldInfo[16].VertexBuffer = 0;
  312. SonicWeldInfo[16].VertIndexes = 0;
  313. SonicWeldInfo[17].BaseModel = SONIC_OBJECTS[0];
  314. SonicWeldInfo[17].ModelA = SONIC_OBJECTS[59];
  315. SonicWeldInfo[17].ModelB = 0;
  316. SonicWeldInfo[17].VertexPairCount = 0;
  317. SonicWeldInfo[17].WeldType = 7;
  318. SonicWeldInfo[17].anonymous_5 = 0;
  319. SonicWeldInfo[17].VertexBuffer = 0;
  320. SonicWeldInfo[17].VertIndexes = 0;
  321. SonicWeldInfo[18].BaseModel = SONIC_OBJECTS[0];
  322. SonicWeldInfo[18].ModelA = SONIC_OBJECTS[61];
  323. SonicWeldInfo[18].ModelB = 0;
  324. SonicWeldInfo[18].VertexPairCount = 0;
  325. SonicWeldInfo[18].WeldType = 6;
  326. SonicWeldInfo[18].anonymous_5 = 0;
  327. SonicWeldInfo[18].VertexBuffer = 0;
  328. SonicWeldInfo[18].VertIndexes = 0;
  329. SonicWeldInfo[19].BaseModel = SONIC_OBJECTS[0];
  330. SonicWeldInfo[19].ModelA = SONIC_OBJECTS[16];
  331. SonicWeldInfo[19].ModelB = 0;
  332. SonicWeldInfo[19].VertexPairCount = 0;
  333. SonicWeldInfo[19].WeldType = 6;
  334. SonicWeldInfo[19].anonymous_5 = 0;
  335. SonicWeldInfo[19].VertexBuffer = 0;
  336. SonicWeldInfo[19].VertIndexes = 0;
  337. SonicWeldInfo[20].BaseModel = SONIC_OBJECTS[0];
  338. SonicWeldInfo[20].ModelA = SONIC_OBJECTS[21];
  339. SonicWeldInfo[20].ModelB = 0;
  340. SonicWeldInfo[20].VertexPairCount = 0;
  341. SonicWeldInfo[20].WeldType = 7;
  342. SonicWeldInfo[20].anonymous_5 = 0;
  343. SonicWeldInfo[20].VertexBuffer = 0;
  344. SonicWeldInfo[20].VertIndexes = 0;
  345. SonicWeldInfo[21].BaseModel = SONIC_OBJECTS[0];
  346. SonicWeldInfo[21].ModelA = SONIC_OBJECTS[45];
  347. SonicWeldInfo[21].ModelB = 0;
  348. SonicWeldInfo[21].VertexPairCount = 0;
  349. SonicWeldInfo[21].WeldType = 8;
  350. SonicWeldInfo[21].anonymous_5 = 0;
  351. SonicWeldInfo[21].VertexBuffer = 0;
  352. SonicWeldInfo[21].VertIndexes = 0;
  353.  
  354. //The following welds are for Super Sonic
  355. SonicWeldInfo[22].BaseModel = SONIC_OBJECTS[22];
  356. SonicWeldInfo[22].ModelA = SONIC_OBJECTS[23];
  357. SonicWeldInfo[22].ModelB = SONIC_OBJECTS[24];
  358. SonicWeldInfo[22].VertexPairCount = (uint8_t)(LengthOfArray(SonicUpperArm_Indices) / 2);
  359. SonicWeldInfo[22].WeldType = 2;
  360. SonicWeldInfo[22].anonymous_5 = 0;
  361. SonicWeldInfo[22].VertexBuffer = 0;
  362. SonicWeldInfo[22].VertIndexes = SonicUpperArm_Indices;
  363. SonicWeldInfo[23].BaseModel = SONIC_OBJECTS[22];
  364. SonicWeldInfo[23].ModelA = SONIC_OBJECTS[24];
  365. SonicWeldInfo[23].ModelB = SONIC_OBJECTS[25];
  366. SonicWeldInfo[23].VertexPairCount = (uint8_t)(LengthOfArray(SonicLowerArm_Indices) / 2);
  367. SonicWeldInfo[23].WeldType = 2;
  368. SonicWeldInfo[23].anonymous_5 = 0;
  369. SonicWeldInfo[23].VertexBuffer = 0;
  370. SonicWeldInfo[23].VertIndexes = SonicLowerArm_Indices;
  371. SonicWeldInfo[24].BaseModel = SONIC_OBJECTS[22];
  372. SonicWeldInfo[24].ModelA = SONIC_OBJECTS[28];
  373. SonicWeldInfo[24].ModelB = SONIC_OBJECTS[29];
  374. SonicWeldInfo[24].VertexPairCount = (uint8_t)(LengthOfArray(SonicUpperArm_Indices) / 2);
  375. SonicWeldInfo[24].WeldType = 2;
  376. SonicWeldInfo[24].anonymous_5 = 0;
  377. SonicWeldInfo[24].VertexBuffer = 0;
  378. SonicWeldInfo[24].VertIndexes = SonicUpperArm_Indices;
  379. SonicWeldInfo[25].BaseModel = SONIC_OBJECTS[22];
  380. SonicWeldInfo[25].ModelA = SONIC_OBJECTS[29];
  381. SonicWeldInfo[25].ModelB = SONIC_OBJECTS[30];
  382. SonicWeldInfo[25].VertexPairCount = (uint8_t)(LengthOfArray(SonicLowerArm_Indices) / 2);
  383. SonicWeldInfo[25].WeldType = 2;
  384. SonicWeldInfo[25].anonymous_5 = 0;
  385. SonicWeldInfo[25].VertexBuffer = 0;
  386. SonicWeldInfo[25].VertIndexes = SonicLowerArm_Indices;
  387. SonicWeldInfo[26].BaseModel = SONIC_OBJECTS[22];
  388. SonicWeldInfo[26].ModelA = SONIC_OBJECTS[33];
  389. SonicWeldInfo[26].ModelB = SONIC_OBJECTS[34];
  390. SonicWeldInfo[26].VertexPairCount = (uint8_t)(LengthOfArray(SonicUpperLeg_Indices) / 2);
  391. SonicWeldInfo[26].WeldType = 2;
  392. SonicWeldInfo[26].anonymous_5 = 0;
  393. SonicWeldInfo[26].VertexBuffer = 0;
  394. SonicWeldInfo[26].VertIndexes = SonicUpperLeg_Indices;
  395. SonicWeldInfo[27].BaseModel = SONIC_OBJECTS[22];
  396. SonicWeldInfo[27].ModelA = SONIC_OBJECTS[34];
  397. SonicWeldInfo[27].ModelB = SONIC_OBJECTS[35];
  398. SonicWeldInfo[27].VertexPairCount = (uint8_t)(LengthOfArray(SonicLowerLeg_Indices) / 2);
  399. SonicWeldInfo[27].WeldType = 2;
  400. SonicWeldInfo[27].anonymous_5 = 0;
  401. SonicWeldInfo[27].VertexBuffer = 0;
  402. SonicWeldInfo[27].VertIndexes = SonicLowerLeg_Indices;
  403. SonicWeldInfo[28].BaseModel = SONIC_OBJECTS[22];
  404. SonicWeldInfo[28].ModelA = SONIC_OBJECTS[38];
  405. v3 = SONIC_OBJECTS[39];
  406. SonicWeldInfo[28].VertIndexes = SonicUpperLeg_Indices;
  407. SonicWeldInfo[28].ModelB = v3;
  408. SonicWeldInfo[28].VertexPairCount = (uint8_t)(LengthOfArray(SonicUpperLeg_Indices) / 2);
  409. SonicWeldInfo[28].WeldType = 2;
  410. SonicWeldInfo[28].anonymous_5 = 0;
  411. SonicWeldInfo[28].VertexBuffer = 0;
  412. SonicWeldInfo[29].BaseModel = SONIC_OBJECTS[22];
  413. SonicWeldInfo[29].ModelA = SONIC_OBJECTS[39];
  414. SonicWeldInfo[29].ModelB = SONIC_OBJECTS[40];
  415. SonicWeldInfo[29].VertexPairCount = (uint8_t)(LengthOfArray(SonicLowerLeg_Indices) / 2);
  416. SonicWeldInfo[29].WeldType = 2;
  417. SonicWeldInfo[29].anonymous_5 = 0;
  418. SonicWeldInfo[29].VertexBuffer = 0;
  419. SonicWeldInfo[29].VertIndexes = SonicLowerLeg_Indices;
  420. SonicWeldInfo[30].BaseModel = SONIC_OBJECTS[22];
  421. SonicWeldInfo[30].ModelA = SONIC_OBJECTS[36];
  422. SonicWeldInfo[30].ModelB = SONIC_OBJECTS[37];
  423. SonicWeldInfo[30].VertexPairCount = (uint8_t)(LengthOfArray(SonicLSShoe_Indices) / 2);
  424. SonicWeldInfo[30].WeldType = 2;
  425. SonicWeldInfo[30].anonymous_5 = 0;
  426. SonicWeldInfo[30].VertexBuffer = 0;
  427. SonicWeldInfo[30].VertIndexes = SonicLSDashShoe_Indices;
  428. SonicWeldInfo[31].BaseModel = SONIC_OBJECTS[22];
  429. SonicWeldInfo[31].ModelA = SONIC_OBJECTS[41];
  430. SonicWeldInfo[31].ModelB = SONIC_OBJECTS[42];
  431. SonicWeldInfo[31].VertexPairCount = (uint8_t)(LengthOfArray(SonicLSShoe_Indices) / 2);
  432. SonicWeldInfo[31].WeldType = 2;
  433. SonicWeldInfo[31].anonymous_5 = 0;
  434. SonicWeldInfo[31].VertexBuffer = 0;
  435. SonicWeldInfo[31].VertIndexes = SonicLSDashShoe_Indices;
  436. SonicWeldInfo[32].BaseModel = SONIC_OBJECTS[22];
  437. SonicWeldInfo[32].ModelA = SONIC_OBJECTS[31];
  438. SonicWeldInfo[32].ModelB = SONIC_OBJECTS[32];
  439. SonicWeldInfo[32].VertexPairCount = (uint8_t)(LengthOfArray(SonicHand_Indices) / 2);
  440. SonicWeldInfo[32].WeldType = 2;
  441. SonicWeldInfo[32].anonymous_5 = 0;
  442. SonicWeldInfo[32].VertexBuffer = 0;
  443. SonicWeldInfo[32].VertIndexes = SonicHand_Indices;
  444. SonicWeldInfo[33].BaseModel = SONIC_OBJECTS[22];
  445. SonicWeldInfo[33].ModelA = SONIC_OBJECTS[26];
  446. v4 = SONIC_OBJECTS[27];
  447. SonicWeldInfo[33].anonymous_5 = 0;
  448. SonicWeldInfo[33].VertexBuffer = 0;
  449. SonicWeldInfo[33].VertIndexes = SonicHand_Indices;
  450. SonicWeldInfo[33].ModelB = v4;
  451. SonicWeldInfo[33].VertexPairCount = (uint8_t)(LengthOfArray(SonicHand_Indices) / 2);
  452. SonicWeldInfo[33].WeldType = 2;
  453. SonicWeldInfo[34].BaseModel = SONIC_OBJECTS[22];
  454. SonicWeldInfo[34].ModelA = SONIC_OBJECTS[31];
  455. SonicWeldInfo[34].ModelB = SONIC_OBJECTS[32];
  456. SonicWeldInfo[34].anonymous_5 = 0;
  457. SonicWeldInfo[34].VertexBuffer = 0;
  458. SonicWeldInfo[34].VertexPairCount = 4;
  459. SonicWeldInfo[34].VertIndexes = word_91CCA8;
  460. SonicWeldInfo[34].WeldType = 2;
  461. SonicWeldInfo[35].BaseModel = SONIC_OBJECTS[22];
  462. SonicWeldInfo[35].ModelA = SONIC_OBJECTS[26];
  463. v5 = SONIC_OBJECTS[27];
  464. SonicWeldInfo[35].anonymous_5 = 0;
  465. SonicWeldInfo[35].VertexBuffer = 0;
  466. SonicWeldInfo[36].BaseModel = 0;
  467. SonicWeldInfo[36].ModelA = 0;
  468. SonicWeldInfo[36].ModelB = 0;
  469. SonicWeldInfo[35].VertIndexes = word_91CCA8;
  470. SonicWeldInfo[36].VertexPairCount = 0;
  471. SonicWeldInfo[36].VertexBuffer = 0;
  472. SonicWeldInfo[35].VertexPairCount = 4;
  473. SonicWeldInfo[35].ModelB = v5;
  474. SonicWeldInfo[35].WeldType = 2;
  475. SonicWeldInfo[36].VertIndexes = 0;
  476. }
  477.  
  478. extern "C" __declspec(dllexport) void __cdecl Init(const char *path, const HelperFunctions &helperFunctions)
  479. {
  480. HMODULE handle = GetModuleHandle(L"CHRMODELS_orig");
  481. NJS_OBJECT **___SONIC_OBJECTS = (NJS_OBJECT **)GetProcAddress(handle, "___SONIC_OBJECTS");
  482. SONIC_OBJECTS = ___SONIC_OBJECTS;
  483. WriteJump((void*)0x007D0B50, InitSonicWeldInfo_mod);
  484. }
  485.  
  486. extern "C" __declspec(dllexport) const ModInfo SADXModInfo = { ModLoaderVer };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement