Advertisement
Guest User

Conic AoE v4(WIP)

a guest
Jul 22nd, 2014
261
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.67 KB | None | 0 0
  1. Note: This code will be stand alone.
  2.  
  3. 0017b8f8:
  4. 8f8: 0100B3A3 sb r19, 0x0001(r29)
  5. 8fc: FF55050C jal 0x1557fc
  6. 900: 00008426 addiu r4, r20, 0x0000
  7.  
  8. 0017b920:
  9. 920: 06006410 beq r3, r4, 0x001c
  10.  
  11. 0017bb24:
  12. b24: 0100A793 lbu r7, 0x0001(r29)
  13. b28: 0100A0A3 sb r0, 0x0001(r29)
  14. b2c: 00000000 nop
  15. b30: 00000000 nop
  16. b34: 00000000 nop
  17. b38: 00000000 nop
  18. b3c: 00000000 nop
  19. b40: 00000000 nop
  20. b44: 1000A427 addiu r4,r29,0x0010 Important pointer data for an upcoming function
  21. b48: 9356050C jal 0x00155a4c Jump to AoE Flagging Routine
  22. b4c: C0003032 andi r16, r17, 0x00c0 Needed for Ally/Enemy Targeting Routine
  23.  
  24.  
  25.  
  26. 001557fc: Retargeting Routine
  27. 7fc: 2150E003 addu r10,r31,r0
  28. 800: EDE5050C jal 0x001797b4
  29. 804: FF004E30 andi r14,r2,0x00ff r3 = Height Value (Return)
  30. 808: 21F84001 addu r31,r10,r0
  31. 80c: 0F000434 ori r4,r0,0x000f r4 = 0x000f
  32. 810: 02006416 bne r19,r4,0x0015581c
  33. 814: 00000B34 ori r11,r0,0x0000
  34. 818: FF000B34 ori r11,r0,0x00ff
  35. 81c: 80006232 andi r2,r19,0x0080 If Cone AoE
  36. 820: 81004010 beq r2,r0,0x00155a28 Linear/Tri if no
  37. 824: 0F006332 andi r3,r19,0x000f
  38. 828: 25186B00 or r3,r3,r11
  39. 82c: 0E80073C lui r7,0x800e
  40. 830: 9C4EE790 lbu r7,0x4e9c(r7) map max x
  41. 834: 0E80063C lui r6,0x800e
  42. 838: A04EC690 lbu r6,0x4ea0(r6) load max y
  43. 83c: 1C00A593 lbu r5,0x001c(r29) load target x
  44. 840: 2000A493 lbu r4,0x0020(r29) load target y
  45. 844: 47000F92 lbu r15,0x0047(r16) load caster x
  46. 848: 19800C3C lui r12,0x8019
  47. 84c: CCF88C25 addiu r12,r12,-0x0734
  48. 850: 01000B34 ori r11,r0,0x0001
  49. 854: 2B10E501 sltu r2,r15,r5 If Caster X(r15) < Target X(r5)
  50. 858: 04004010 beq r2,r0,0x0015586c
  51. 85c: 00000000 nop
  52. 860: 0100EF25 addiu r15,r15,0x0001
  53. 864: 20560508 j 0x00155880
  54. 868: 2128A300 addu r5,r5,r3 Target X(r5) + AoE Size (r3)
  55. 86c: 2B10AF00 sltu r2,r5,r15 If Target X(r5) < Caster X(r15)
  56. 870: 32004010 beq r2,r0,0x0015593c
  57. 874: 00000000 nop
  58. 878: FFFFEF21 addi r15,r15,-0x0001
  59. 87c: 2328A300 subu r5,r5,r3 Target X(r5) - AoE Size(r3)
  60. 880: 2A10A700 slt r2,r5,r7 Is Target X(r5) > Max X (r7) (Out of bounds)
  61. 884: 07004014 bne r2,r0,0x001558a4 Branch if not
  62. 888: 00000000 nop
  63. 88c: 2310EB00 subu r2,r7,r11
  64. 890: 1C00A693 lbu r6,0x001c(r29) load target x
  65. 894: 00004534 ori r5,r2,0x0000 Target X (r5) = Max X (r7) - 1
  66. 898: 23184600 subu r3,r2,r6 Max X(r2) - Old Target X(r6) = New AoE size(r3)
  67. 89c: 2F560508 j 0x001558bc
  68. 8a0: 00000000 nop
  69. 8a4: 2A10A000 slt r2,r5,r0 Is Target X(r5) < r0 (Negative Out of bounds)
  70. 8a8: 04004010 beq r2,r0,0x001558bc Branch if not
  71. 8ac: 00000000 nop
  72. 8b0: 1C00A693 lbu r6,0x001c(r29) load target x
  73. 8b4: 00000534 ori r5,r0,0x0000 Target X(r5) = r0
  74. 8b8: 0000E335 ori r3,r15,0x0000 Old Target X(r6) = New AoE size
  75. 8bc: 18008700 mult r4,r7
  76. 8c0: 00000000 nop
  77. 8c4: 12100000 mflo r2
  78. 8c8: 21104500 addu r2,r2,r5
  79. 8cc: C0100200 sll r2,r2,0x03
  80. 8d0: 21604C00 addu r12,r2,r12
  81. 8d4: 06008291 lbu r2,0x0006(r12)
  82. 8d8: 00000000 nop
  83. 8dc: 02004230 andi r2,r2,0x0002 If Tile is targetable
  84. 8e0: DCFF4010 beq r2,r0,0x00155854 Branch Back if false
  85. 8e4: 00000000 nop
  86. 8e8: 02008A91 lbu r10,0x0002(r12) Caster Tile's Height
  87. 8ec: 03008D91 lbu r13,0x0003(r12) Caster Tile's Height (halves)
  88. 8f0: 03008291 lbu r2,0x0003(r12) Caster Tile's Height (halves)
  89. 8f4: 40500A00 sll r10,r10,0x01
  90. 8f8: 1F00AD31 andi r13,r13,0x001f Ignore Depth
  91. 8fc: 21504D01 addu r10,r10,r13 Height + Height(halves)
  92. 900: 42110200 srl r2,r2,0x05 Ignore Halves
  93. 904: 40100200 sll r2,r2,0x01
  94. 908: 21504201 addu r10,r10,r2 r3 = Height + Halves + Depth
  95. 90c: FF004A31 andi r10,r10,0x00ff r3 = Non Zero Height
  96. 910: 2310CA01 subu r2,r14,r10 r2 = Height(Float/Water Supports) - Height(normal)
  97. 914: CFFF4004 bltz r2,0x00155854 Branch Back if difference is negative
  98. 918: 00000000 nop
  99. 91c: 1C00A693 lbu r6,0x001c(r29) load target x
  100. 920: 2128AF00 addu r5,r5,r15
  101. 924: 4700A610 beq r5,r6,0x00155a44 Branch if New X = Old X
  102. 928: 00000000 nop
  103. 92c: 1C00A5A3 sb r5,0x001c(r29) Save new Target X
  104. 930: 00007334 ori r19,r3,0x0000 Add New AoE size
  105. 934: 91560508 j 0x00155a44
  106. 938: 00000000 nop
  107. 93c: 48000F92 lbu r15,0x0048(r16) load caster y
  108. 940: 00000000 nop
  109. 944: 2B10E401 sltu r2,r15,r4 If Caster Y(r15) < Target Y(r4)
  110. 948: 03004010 beq r2,r0,0x00155958
  111. 94c: 00000000 nop
  112. 950: 0100EF25 addiu r15,r15,0x0001
  113. 954: 5C560508 j 0x00155970
  114. 958: 21208300 addu r4,r4,r3 Target Y(r4) + AoE Size (r3)
  115. 95c: 2B108F00 sltu r2,r4,r15 If Target Y(r4) < Caster Y(r15)
  116. 960: 31004010 beq r2,r0,0x00155a28 Failed all checks
  117. 964: 00000000 nop
  118. 968: FFFFEF21 addi r15,r15,-0x0001
  119. 96c: 23208300 subu r4,r4,r3 Target Y(r4) - AoE Size(r3)
  120. 970: 2A108600 slt r2,r4,r6 Is Target Y(r4) < Max Y (r6) (Out of bounds)
  121. 974: 07004014 bne r2,r0,0x00155994 Branch if not
  122. 978: 00000000 nop
  123. 97c: 2310CB00 subu r2,r6,r11
  124. 980: 2000A693 lbu r6,0x0020(r29) load target y
  125. 984: 00004434 ori r4,r2,0x0000 Target Y (r4) = Max Y (r6)
  126. 988: 23184F00 subu r3,r2,r15 Max Y - Old Target Y(r6) = New AoE size
  127. 98c: 6B560508 j 0x001559ac
  128. 990: 00000000 nop
  129. 994: 2A108000 slt r2,r4,r0 Is Target Y(r4) negative? (Out of bounds)
  130. 998: 04004010 beq r2,r0,0x001559ac Branch if not
  131. 99c: 00000000 nop
  132. 9a0: 2000A693 lbu r6,0x0020(r29) load target y
  133. 9a4: 00000434 ori r4,r0,0x0000 Target Y(r4) = r0
  134. 9a8: 0000C334 ori r3,r6,0x0000 Target Y = New AoE Size
  135. 9ac: 18008700 mult r4,r7
  136. 9b0: 00000000 nop
  137. 9b4: 12100000 mflo r2
  138. 9b8: 21104500 addu r2,r2,r5
  139. 9bc: C0100200 sll r2,r2,0x03
  140. 9c0: 21604C00 addu r12,r2,r12
  141. 9c4: 06008291 lbu r2,0x0006(r12)
  142. 9c8: 00000000 nop
  143. 9cc: 02004230 andi r2,r2,0x0002 If Tile is targetable
  144. 9d0: 9AFF4010 beq r2,r0,0x0015583c Branch Back if false
  145. 9d4: 02008A91 lbu r10,0x0002(r12) Caster Tile's Height
  146. 9d8: 03008D91 lbu r13,0x0003(r12) Caster Tile's Height (halves)
  147. 9dc: 03008291 lbu r2,0x0003(r12) Caster Tile's Height (halves)
  148. 9e0: 40500A00 sll r10,r10,0x01
  149. 9e4: 1F00AD31 andi r13,r13,0x001f Ignore Depth
  150. 9e8: 21504D01 addu r10,r10,r13 Height + Height(halves)
  151. 9ec: 42110200 srl r2,r2,0x05 Ignore Halves
  152. 9f0: 40100200 sll r2,r2,0x01
  153. 9f4: 21504201 addu r10,r10,r2 r3 = Height + Halves + Depth
  154. af8: FF004A31 andi r10,r10,0x00ff r3 = Non Zero Height
  155. afc: 2310CA01 subu r2,r14,r10 r2 = Height(Float/Water Supports) - Height(normal)
  156. a00: 94FF4018 blez r2,0x00155854 Branch if difference isn't negative
  157. a04: 00000000 nop
  158. a08: 2000A693 lbu r6,0x0020(r29) load target y
  159. a0c: 21208F00 addu r4,r4,r15
  160. a10: 0B008610 beq r4,r6,0x00155a40 Branch if New Y = Old Y
  161. a14: 00000000 nop
  162. a18: 2000A4A3 sb r4,0x0020(r29) save new Target Y
  163. a1c: 00007334 ori r19,r3,0x0000 Add New AoE size
  164. a20: 91560508 j 0x00155a44
  165. a24: 00000000 nop
  166. a28: 25186B00 or r3,r3,r11
  167. a2c: 60006232 andi r2,r19,0x0060 Check for Linear/Tri Attack
  168. a30: 03004014 bne r2,r0,0x00155a40
  169. a34: 00000000 nop
  170. a38: 91560508 j 0x00155a44
  171. a3c: 1400FF27 addiu r31,r31,0x0014
  172. a40: 00007334 ori r19,r3,0x0000 Save flagless AoE
  173. a44: 0800E003 jr r31
  174. a48: 06000434 ori r4,r0,0x0006
  175.  
  176.  
  177. 00155a4c: AoE Flagging Routine
  178. a58: C0FFBD27 addiu r29,r29,-0x0040 Pointer Memory - 40
  179. a5c: 1000A527 addiu r5,r29,0x0010
  180. a60: 3C00BFAF sw r31,0x003c(r29)
  181. a64: 3800B4AF sw r20,0x0038(r29)
  182. a68: 3400B3AF sw r19,0x0034(r29)
  183. a6c: 3000B2AF sw r18,0x0030(r29)
  184. a70: 2C00B1AF sw r17,0x002c(r29)
  185. a74: 8B78010C jal 0x0005e22c Transfer Attacker/Self ID Routine
  186. a78: 2800B0AF sw r16,0x0028(r29)
  187. a7c: 1000A393 lbu r3,0x0010(r29) Load Attacker/Self ID
  188. a80: 1C00B287 lh r18,0x001c(r29) Load Target X
  189. a84: 2000B487 lh r20,0x0020(r29) Load Target Y
  190. a88: 01000234 ori r2,r0,0x0001 r2 = 1
  191. a8c: 1980013C lui r1,0x8019
  192. a90: F8F422AC sw r2,-0x0b08(r1) Save to 0x18f4f8. No idea what this accomplishes.
  193. a94: C0100300 sll r2,r3,0x03
  194. a98: 23104300 subu r2,r2,r3
  195. a9c: 80110200 sll r2,r2,0x06
  196. aa0: 1980033C lui r3,0x8019
  197. aa4: CC086324 addiu r3,r3,0x08cc
  198. aa8: 21104300 addu r2,r2,r3
  199. aac: 47005190 lbu r17,0x0047(r2) Load Unit's X
  200. ab0: 48005090 lbu r16,0x0048(r2) Load Unit's Y
  201. ab4: 8000E230 andi r2,r7,0x0080 If Cone AoE
  202. ab8: 05004010 beq r2,r0,0x00155ac4
  203. abc: 00000000 nop
  204. ac0: C556050C jal 0x00155b14 Cone AoE Routine
  205. ac4: 00000000 nop
  206. ac8: BD560508 j 0x00155af4
  207. acc: 00000000 nop
  208. ad0: 4000E230 andi r2,r7,0x0040 If Linear AoE
  209. ad4: 05004010 beq r2,r0,0x00155ae0
  210. ad8: 00000000 nop
  211. adc: B1EF050C jal 0x0017bec4 Linear/Tri Routine
  212. ae0: 01001334 ori r19,r0,0x0001
  213. ae4: BD560508 j 0x00155af4
  214. ae8: 00000000 nop
  215. aec: 2000E230 andi r2,r7,0x0020 If Tri Attack AoE
  216. af0: 03004010 beq r2,r0,0x00155af4
  217. af4: 00000000 nop
  218. af8: B1EF050C jal 0x0017bec4 Linear/Tri Routine
  219. afc: 03001334 ori r19,r0,0x0003
  220. b00: 3C00BF8F lw r31,0x003c(r29)
  221. b04: 3800B48F lw r20,0x0038(r29)
  222. b08: 3400B38F lw r19,0x0034(r29)
  223. b0c: 3000B28F lw r18,0x0030(r29)
  224. b10: 2C00B18F lw r17,0x002c(r29)
  225. b14: 2800B08F lw r16,0x0028(r29)
  226. b18: 4000BD27 addiu r29,r29,0x0040 Pointer + 40
  227. b1c: 0800E003 jr r31
  228. b20: 00000000 nop
  229.  
  230. 00155b14:
  231. b24: 2B103202 sltu r2,r17,r18
  232. b28: 02004010 beq r2,r0,0x00155b24
  233. b2c: 00000000 nop
  234. b30: CE560508 j 0x00155b38
  235. b34: 00000634 ori r6,r0,0x0000
  236. b38: 2B105102 sltu r2,r18,r17
  237. b3c: 04004010 beq r2,r0,0x00155b40
  238. b40: 00000000 nop
  239. b44: 02000634 ori r6,r0,0x0002
  240. b48: DD560508 j 0x00155b74
  241. b4c: 00004536 ori r5,r18,0x0000 r5 = Axis
  242. b50: 2B101402 sltu r2,r16,r20
  243. b54: 02004010 beq r2,r0,0x00155b50
  244. b58: 00000000 nop
  245. b5c: D9560508 j 0x00155b64
  246. b60: 06000634 ori r6,r0,0x0006
  247. b64: 2B109002 sltu r2,r20,r16
  248. b68: 04004010 beq r2,r0,0x00155b6c
  249. b6c: 00000000 nop
  250. b70: 04000634 ori r6,r0,0x0004
  251. b74: DD560508 j 0x00155b74
  252. b78: 00008536 ori r5,r20,0x0000 r5 = Axis
  253. b7c: 26570508 j 0x00155c98
  254. b80: 00000000 nop
  255. b84: 1980043C lui r4,0x8019
  256. b88: D82D8424 addiu r4,r4,0x2dd8
  257. b8c: 0E80023C lui r2,0x800e
  258. b90: A04E4290 lbu r2,0x4ea0(r2) Load Map Max Y
  259. b94: 00000000 nop
  260. b9c: 35004004 bltz r2,0x00155c60 Branch if Y <= 0
  261. ba0: 21880000 addu r17,r0,r0Y Counter = 0
  262. ba4: 0E80033C lui r3,0x800e
  263. ba8: 9C4E6390 lbu r3,0x4e9c(r3) Load Map Max X
  264. bac: 00000000 nop
  265. bb0: 2A006010 beq r3,r0,0x00155c48 Branch if X = 0
  266. bb4: 21800000 addu r16,r0,r0X Counter = 0
  267. bb8: 18002302 mult r17,r3 YC * Map X
  268. bbc: 12100000 mflo r2
  269. bc0: 21105000 addu r2,r2,r16 YC * Map X + XC
  270. bc4: 80180200 sll r3,r2,0x02 (YC * Map X + X) * 4
  271. bc8: 21186200 addu r3,r3,r2 Tile ID = (YC * Map X + X) * 5
  272. bcc: 21186400 addu r3,r3,r4
  273. bd0: 00006290 lbu r2,0x0000(r3)
  274. bd4: 00000000 nop
  275. bd8: 1A004010 beq r2,r0,0x00155c30 Next Tile if not in AoE
  276. bdc: 00000734 ori r7,r0,0x0000
  277. be0: 0500C014 bne r6,r0,0x00155be4 If Direction 0
  278. be4: 00000000 nop
  279. be8: 2B10B000 sltu r2,r5,r16If Caster X(r5) is less than X Counter(r16)
  280. bec: 15004014 bne r2,r0,0x00155c30
  281. bf0: 00000000 nop
  282. bf4: 0A570508 j 0x00155c28
  283. bf8: 02000834 ori r8,r0,0x0002 If Direction 2
  284. bfc: 0400C814 bne r6,r8,0x00155bfc
  285. c00: 2B100502 sltu r2,r16,r5 If X Counter is less than Caster X
  286. c04: 0F004014 bne r2,r0,0x00155c30
  287. c08: 00000000 nop
  288. c0c: 0A570508 j 0x00155c28
  289. c10: 06000834 ori r8,r0,0x0006 If Direction 6
  290. c14: 0400C814 bne r6,r8,0x00155c14
  291. c18: 2B10B100 sltu r2,r5,r17If Caster Y is less than Y Counter
  292. c1c: 09004014 bne r2,r0,0x00155c30
  293. c20: 00000000 nop
  294. c24: 0A570508 j 0x00155c28
  295. c28: 04000834 ori r8,r0,0x0004 If Direction 4
  296. c2c: 0500C814 bne r6,r8,0x00155c30
  297. c30: 2B102502 sltu r2,r17,r5 If Y Counter is less than Caster Y
  298. c34: 03004014 bne r2,r0,0x00155c30
  299. c38: 00000000 nop
  300. c3c: 01000724 addiu r7,r0,0x0001
  301. c40: 010067A0 sb r7,0x0001(r3)
  302. c44: 0E80033C lui r3,0x800e
  303. c48: 9C4E6390 lbu r3,0x4e9c(r3) Load Map Max X
  304. c4c: 01001026 addiu r16,r16,0x0001 X Counter ++
  305. c50: 2A100302 slt r2,r16,r3
  306. c54: D9FF4014 bne r2,r0,0x00155ba8 Branch if X Counter < Max X
  307. c58: 18002302 mult r17,r3 Y Counter * Max X
  308. c5c: 0E80023C lui r2,0x800e
  309. c60: A04E4290 lbu r2,0x4ea0(r2) Load Map Max Y
  310. c64: 01003126 addiu r17,r17,0x0001 Y Counter ++
  311. c68: 2A102202 slt r2,r17,r2
  312. c6c: CDFF4014 bne r2,r0,0x00155b90 Branch if Y Counter < Max Y
  313. c70: 00000000 nop
  314. c74: 21200000 addu r4,r0,r0 Counter = 0
  315. c78: 1980033C lui r3,0x8019
  316. c7c: D82D6324 addiu r3,r3,0x2dd8
  317. c80: 01006290 lbu r2,0x0001(r3) Load Tile Targeted? Flag
  318. c84: 00000000 nop
  319. c88: 03004014 bne r2,r0,0x00155c84 Branch if Tile is Targeted?
  320. c8c: 00000000 nop
  321. c90: 22570508 j 0x00155c88
  322. c94: 000060A0 sb r0,0x0000(r3) AoE = 0
  323. c98: 010060A0 sb r0,0x0001(r3) Tile Targeted? = False
  324. c9c: 01008424 addiu r4,r4,0x0001 Counter ++
  325. ca0: 00028228 slti r2,r4,0x0200
  326. ca4: F6FF4014 bne r2,r0,0x00155c6c Branch if Counter < 0x200
  327. ca8: 05006324 addiu r3,r3,0x0005 Pointer += 5
  328. cac: 0800E003 jr r31
  329. cb0: 00000000 nop
  330.  
  331.  
  332. 0017bec4:
  333. ec4: 0000EF37 ori r15, r31, 0x0000 Store old value so we can go back
  334.  
  335. 0017c020:
  336. 020: 00000000 nop
  337. 024: 00000000 nop
  338. 028: 00000000 nop
  339. 02c: 00000000 nop
  340. 030: 00000000 nop
  341. 034: 00000000 nop
  342. 038: 21F8E001 addu r31, r15, r0
  343.  
  344.  
  345. Total Lines: 0xef or 239
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement