Advertisement
Guest User

DQVIII formation garbage

a guest
Dec 3rd, 2016
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 97.43 KB | None | 0 0
  1. ROM:002F92D0 # ---------------------------------------------------------------------------
  2. ROM:002F92D0 jr $ra
  3. ROM:002F92D4 daddu $v0, $0, $0 # Quantity Mod = 0
  4. ROM:002F92D4 # ---------------------------------------------------------------------------
  5. ROM:002F92D8 .byte 0
  6. ROM:002F92D9 .byte 0
  7. ROM:002F92DA .byte 0
  8. ROM:002F92DB .byte 0
  9. ROM:002F92DC .byte 0
  10. ROM:002F92DD .byte 0
  11. ROM:002F92DE .byte 0
  12. ROM:002F92DF .byte 0
  13. ROM:002F92E0 # ---------------------------------------------------------------------------
  14. ROM:002F92E0 jr $ra
  15. ROM:002F92E4 daddu $v0, $0, $0 # Enemy ID = 0
  16. ROM:002F92E4 # ---------------------------------------------------------------------------
  17. ROM:002F92E8 .byte 0
  18. ROM:002F92E9 .byte 0
  19. ROM:002F92EA .byte 0
  20. ROM:002F92EB .byte 0
  21. ROM:002F92EC .byte 0
  22. ROM:002F92ED .byte 0
  23. ROM:002F92EE .byte 0
  24. ROM:002F92EF .byte 0
  25. ROM:002F92F0 # ---------------------------------------------------------------------------
  26. ROM:002F92F0 addiu $sp, -0x50
  27. ROM:002F92F4 sd $ra, 0x40($sp)
  28. ROM:002F92F8 sq $s3, 0x30($sp)
  29. ROM:002F92FC sq $s2, 0x20($sp)
  30. ROM:002F9300 sq $s1, 0x10($sp)
  31. ROM:002F9304 daddu $s2, $a0, $0 # s2 = Special Formation Stack Pointer
  32. ROM:002F9308 sq $s0, 0($sp)
  33. ROM:002F930C daddu $s1, $0, $0 # Group Counter = 0
  34. ROM:002F9310 daddu $s0, $0, $0 # Counter = 0
  35. ROM:002F9314
  36. ROM:002F9314 loc_2F9314: # CODE XREF: ROM:002F937Cj
  37. ROM:002F9314 lw $a1, -0x62C0($gp) # Load Pointer to Formation File Data Pointer
  38. ROM:002F9318 lw $v1, 0x10($s2) # Load Pointer to Special Formation Data
  39. ROM:002F931C lw $v0, 0($a1) # Load Formation File Data Pointer
  40. ROM:002F9320 beqz $v0, loc_2F938C # Branch if Pointer doesn't exist
  41. ROM:002F9324 lbu $v1, 1($v1) # Load Special Formation's ID
  42. ROM:002F9328 bltz $v1, loc_2F9394 # Branch if ID < 0
  43. ROM:002F932C nop
  44. ROM:002F9330 lw $v0, 0x38($v0) # Load Number of Special Formations
  45. ROM:002F9334 slt $1, $v1, $v0
  46. ROM:002F9338 beqz $1, loc_2F9394 # Branch if ID >= Number of Special Formations
  47. ROM:002F933C nop
  48. ROM:002F9340 sll $a0, $v1, 4 # ID * 16
  49. ROM:002F9344 sll $v0, $s0, 2 # Counter * 4
  50. ROM:002F9348 lw $v1, 0xC($a1) # Load Special Formation Data Pointer
  51. ROM:002F934C addu $v1, $a0
  52. ROM:002F9350 addu $v0, $v1, $v0 # v0 = Current Special Formation Group Pointer
  53. ROM:002F9354 lhu $a1, 0($v0) # Load Enemy ID
  54. ROM:002F9358
  55. ROM:002F9358 loc_2F9358: # CODE XREF: ROM:loc_2F938Cj
  56. ROM:002F9358 # ROM:loc_2F9394j
  57. ROM:002F9358 sll $v1, $s1, 2 # Group Counter * 4
  58. ROM:002F935C li $v0, 0xFFFF # v0 = FFFF
  59. ROM:002F9360 addu $a0, $s2, $v1 # a0 = Current Enemy's Stack Pointer
  60. ROM:002F9364 sh $a1, 0x16($a0) # Store Enemy ID
  61. ROM:002F9368 lhu $v1, 0x16($a0) # Load Enemy ID
  62. ROM:002F936C bnel $v1, $v0, loc_2F939C # Branch if Enemy ID != FFFF
  63. ROM:002F9370 lw $v0, 0x10($s2) # Load Pointer to Special Formation Data, if branching
  64. ROM:002F9374
  65. ROM:002F9374 loc_2F9374: # CODE XREF: ROM:002F9428j
  66. ROM:002F9374 addiu $s0, 1 # Counter ++
  67. ROM:002F9378 slti $v0, $s0, 4
  68. ROM:002F937C bnez $v0, loc_2F9314 # Branch if Counter < 4
  69. ROM:002F9380 nop
  70. ROM:002F9384 b loc_2F9440
  71. ROM:002F9388 li $v0, 4 # Allowed Types = Special Formation
  72. ROM:002F938C # ---------------------------------------------------------------------------
  73. ROM:002F938C
  74. ROM:002F938C loc_2F938C: # CODE XREF: ROM:002F9320j
  75. ROM:002F938C b loc_2F9358
  76. ROM:002F9390 li $a1, 0x65 # 'e' # Enemy ID = Slime
  77. ROM:002F9394 # ---------------------------------------------------------------------------
  78. ROM:002F9394
  79. ROM:002F9394 loc_2F9394: # CODE XREF: ROM:002F9328j
  80. ROM:002F9394 # ROM:002F9338j
  81. ROM:002F9394 b loc_2F9358
  82. ROM:002F9398 li $a1, 0x65 # 'e' # Enemy ID = Slime
  83. ROM:002F939C # ---------------------------------------------------------------------------
  84. ROM:002F939C
  85. ROM:002F939C loc_2F939C: # CODE XREF: ROM:002F936Cj
  86. ROM:002F939C lbu $v0, 0($v0) # Load Special Formation's Encounter Rate
  87. ROM:002F93A0 sb $v0, 0x14($a0) # Store Special Formation's Encounter Rate
  88. ROM:002F93A4 lw $a1, -0x62C0($gp) # Load Pointer to Formation File Pointer
  89. ROM:002F93A8 lw $v1, 0x10($s2) # Load Pointer to Special Formation Data
  90. ROM:002F93AC lw $v0, 0($a1) # Load Formation File Pointer
  91. ROM:002F93B0 beqz $v0, loc_2F9430 # Branch if Pointer doesn't exist
  92. ROM:002F93B4 lbu $v1, 1($v1) # Load Special Formation ID
  93. ROM:002F93B8 bltz $v1, loc_2F9438 # Branch if ID < 0
  94. ROM:002F93BC nop
  95. ROM:002F93C0 lw $v0, 0x38($v0) # Load Number of Special Formations
  96. ROM:002F93C4 slt $1, $v1, $v0
  97. ROM:002F93C8 beqz $1, loc_2F9438 # Branch if ID >= Number of Special Formations
  98. ROM:002F93CC nop
  99. ROM:002F93D0 sll $a0, $v1, 4 # ID * 16
  100. ROM:002F93D4 sll $v0, $s0, 2 # Counter * 4
  101. ROM:002F93D8 lw $v1, 0xC($a1) # Load Special Formation Data Pointer
  102. ROM:002F93DC addu $v1, $a0
  103. ROM:002F93E0 addu $v0, $v1, $v0 # v0 = Pointer to Current Group's Formation Data
  104. ROM:002F93E4 lbu $a0, 2($v0) # Load Group's Quantity
  105. ROM:002F93E8
  106. ROM:002F93E8 loc_2F93E8: # CODE XREF: ROM:loc_2F9430j
  107. ROM:002F93E8 # ROM:loc_2F9438j
  108. ROM:002F93E8 sll $v0, $s1, 2 # Group Counter * 4
  109. ROM:002F93EC li $a1, 1 # a1 = 1
  110. ROM:002F93F0 addu $v1, $s2, $v0 # v1 = Pointer to Current Group's Stack Data
  111. ROM:002F93F4 sb $a0, 0x15($v1) # Store Group's Quantity
  112. ROM:002F93F8 addiu $v0, $v1, 0x14 # v0 = Pointer to Current Group's Encounter Rate
  113. ROM:002F93FC lw $s3, 0x24($v1) # Load Group's Stack Pointer (overrides Set 2 data)
  114. ROM:002F9400 sw $0, 8($s3) # Store Current Groups = 0
  115. ROM:002F9404 sw $v0, 0x10($s3) # Store Pointer to Current Group's Encounter Rate
  116. ROM:002F9408 lw $t9, 0($s3) # Load Pointer to Set 2 Code Pointers (not special code pointers)
  117. ROM:002F940C lw $t9, 0x18($t9) # Load Set 2's Availability Calculation Pointer
  118. ROM:002F9410 jalr $t9 # Jump to Set 2's Availability Calculation
  119. ROM:002F9414 daddu $a0, $s3, $0 # a0 = Group's Stack Pointer
  120. ROM:002F9418 lw $t9, 0($s3) # Load Pointer to Set 2 Code Pointers
  121. ROM:002F941C lw $t9, 0xC($t9) # Load Set 2's Current Groups Incrementing Pointer
  122. ROM:002F9420 jalr $t9 # Jump to Set 2's Current Groups Incrementing
  123. ROM:002F9424 daddu $a0, $s3, $0 # a0 = Group's Stack Pointer
  124. ROM:002F9428 b loc_2F9374
  125. ROM:002F942C addiu $s1, 1 # Group Counter ++
  126. ROM:002F9430 # ---------------------------------------------------------------------------
  127. ROM:002F9430
  128. ROM:002F9430 loc_2F9430: # CODE XREF: ROM:002F93B0j
  129. ROM:002F9430 b loc_2F93E8
  130. ROM:002F9434 daddu $a0, $0, $0 # Group's Quantity = 0
  131. ROM:002F9438 # ---------------------------------------------------------------------------
  132. ROM:002F9438
  133. ROM:002F9438 loc_2F9438: # CODE XREF: ROM:002F93B8j
  134. ROM:002F9438 # ROM:002F93C8j
  135. ROM:002F9438 b loc_2F93E8
  136. ROM:002F943C daddu $a0, $0, $0 # Group's Quantity = 0
  137. ROM:002F9440 # ---------------------------------------------------------------------------
  138. ROM:002F9440
  139. ROM:002F9440 loc_2F9440: # CODE XREF: ROM:002F9384j
  140. ROM:002F9440 ld $ra, 0x40($sp)
  141. ROM:002F9444 lq $s3, 0x30($sp)
  142. ROM:002F9448 lq $s2, 0x20($sp)
  143. ROM:002F944C lq $s1, 0x10($sp)
  144. ROM:002F9450 lq $s0, 0($sp)
  145. ROM:002F9454 jr $ra
  146. ROM:002F9458 addiu $sp, 0x50
  147. ROM:002F9458 # ---------------------------------------------------------------------------
  148. ROM:002F945C .byte 0
  149. ROM:002F945D .byte 0
  150. ROM:002F945E .byte 0
  151. ROM:002F945F .byte 0
  152. ROM:002F9460 # ---------------------------------------------------------------------------
  153. ROM:002F9460 lbu $v0, 0xC($a0) # Load Available Flag
  154. ROM:002F9464 beqz $v0, loc_2F9484 # Branch if Slot isn't available
  155. ROM:002F9468 nop
  156. ROM:002F946C andi $v0, $a1, 4
  157. ROM:002F9470 beqz $v0, loc_2F9484 # Branch if Special Formation isn't allowed
  158. ROM:002F9474 nop
  159. ROM:002F9478 lw $v0, 0x10($a0) # Load Special Formation Data Pointer
  160. ROM:002F947C b locret_2F9488
  161. ROM:002F9480 lbu $v0, 0($v0) # Load Special Formation's Encounter Rate
  162. ROM:002F9484 # ---------------------------------------------------------------------------
  163. ROM:002F9484
  164. ROM:002F9484 loc_2F9484: # CODE XREF: ROM:002F9464j
  165. ROM:002F9484 # ROM:002F9470j
  166. ROM:002F9484 daddu $v0, $0, $0 # Encounter Rate = 0
  167. ROM:002F9488
  168. ROM:002F9488 locret_2F9488: # CODE XREF: ROM:002F947Cj
  169. ROM:002F9488 jr $ra
  170. ROM:002F948C nop
  171. ROM:002F9490 # ---------------------------------------------------------------------------
  172. ROM:002F9490 sb $a1, 0xC($a0)
  173. ROM:002F9494 lw $a1, 0x10($a0)
  174. ROM:002F9498 lbu $v1, 0($a1)
  175. ROM:002F949C blez $v1, loc_2F94BC
  176. ROM:002F94A0 nop
  177. ROM:002F94A4 lbu $a1, 1($a1)
  178. ROM:002F94A8 li $v1, 0xFF
  179. ROM:002F94AC beq $a1, $v1, loc_2F94BC
  180. ROM:002F94B0 nop
  181. ROM:002F94B4
  182. ROM:002F94B4 loc_2F94B4: # CODE XREF: ROM:loc_2F94BCj
  183. ROM:002F94B4 b locret_2F94C4
  184. ROM:002F94B8 nop
  185. ROM:002F94BC # ---------------------------------------------------------------------------
  186. ROM:002F94BC
  187. ROM:002F94BC loc_2F94BC: # CODE XREF: ROM:002F949Cj
  188. ROM:002F94BC # ROM:002F94ACj
  189. ROM:002F94BC b loc_2F94B4
  190. ROM:002F94C0 sb $0, 0xC($a0)
  191. ROM:002F94C4 # ---------------------------------------------------------------------------
  192. ROM:002F94C4
  193. ROM:002F94C4 locret_2F94C4: # CODE XREF: ROM:loc_2F94B4j
  194. ROM:002F94C4 jr $ra
  195. ROM:002F94C8 nop
  196. ROM:002F94C8 # ---------------------------------------------------------------------------
  197. ROM:002F94CC .byte 0
  198. ROM:002F94CD .byte 0
  199. ROM:002F94CE .byte 0
  200. ROM:002F94CF .byte 0
  201. ROM:002F94D0 # ---------------------------------------------------------------------------
  202. ROM:002F94D0 addiu $sp, -0x30
  203. ROM:002F94D4 sd $ra, 0x20($sp)
  204. ROM:002F94D8 sq $s1, 0x10($sp)
  205. ROM:002F94DC sq $s0, 0($sp)
  206. ROM:002F94E0 lw $v0, 0x10($a0) # Load Enemy's Formation Pointer
  207. ROM:002F94E4 lbu $v1, 1($v0) # Load Enemy's Quantity
  208. ROM:002F94E8 lw $a0, -0x62C0($gp) # Load Pointer to Formation File Pointer
  209. ROM:002F94EC sll $v1, 1 # Quantity * 2
  210. ROM:002F94F0 lw $v0, 0x10($a0) # Load Misc Formation Data Pointer
  211. ROM:002F94F4 addu $v0, $v1, $v0
  212. ROM:002F94F8 lbu $s1, 0x30($v0) # Load Low Quantity
  213. ROM:002F94FC bgtz $s1, loc_2F9508 # Branch if Low Quantity > 0
  214. ROM:002F9500 lbu $s0, 0x31($v0) # Load High Quantity
  215. ROM:002F9504 li $s1, 1 # Low Quantity = 1
  216. ROM:002F9508
  217. ROM:002F9508 loc_2F9508: # CODE XREF: ROM:002F94FCj
  218. ROM:002F9508 slt $1, $s0, $s1
  219. ROM:002F950C beqz $1, loc_2F9518 # Branch if High Quantity >= Low Quantity
  220. ROM:002F9510 nop
  221. ROM:002F9514 daddu $s0, $s1, $0 # High Quantity = Low Quantity
  222. ROM:002F9518
  223. ROM:002F9518 loc_2F9518: # CODE XREF: ROM:002F950Cj
  224. ROM:002F9518 jal Random_Number_Generator
  225. ROM:002F951C nop
  226. ROM:002F9520 subu $v1, $s0, $s1 # Quantity Range = High Quantity - Low Quantity
  227. ROM:002F9524 addiu $v1, 1 # Quantity Range ++
  228. ROM:002F9528 bnez $v1, loc_2F9534 # Branch if Quantity Range != 0
  229. ROM:002F952C div $v0, $v1 # Random / Quantity Range
  230. ROM:002F9530 break 7
  231. ROM:002F9534
  232. ROM:002F9534 loc_2F9534: # CODE XREF: ROM:002F9528j
  233. ROM:002F9534 mfhi $v0 # Quantity Mod = Random % Quantity Range
  234. ROM:002F9538 ld $ra, 0x20($sp)
  235. ROM:002F953C lq $s0, 0($sp)
  236. ROM:002F9540 addu $v0, $s1 # Quantity Mod += Low Range (rand(Low Quantity..Quantity Range+1))
  237. ROM:002F9544 lq $s1, 0x10($sp)
  238. ROM:002F9548 jr $ra
  239. ROM:002F954C addiu $sp, 0x30
  240. ROM:002F9550 # ---------------------------------------------------------------------------
  241. ROM:002F9550 lw $v0, 0x10($a0) # Load Pointer to X Enemy's Formation Data
  242. ROM:002F9554 jr $ra
  243. ROM:002F9558 lhu $v0, 2($v0) # Load Enemy's ID
  244. ROM:002F9558 # ---------------------------------------------------------------------------
  245. ROM:002F955C .byte 0
  246. ROM:002F955D .byte 0
  247. ROM:002F955E .byte 0
  248. ROM:002F955F .byte 0
  249. ROM:002F9560 # ---------------------------------------------------------------------------
  250. ROM:002F9560 lw $v1, 8($a0) # Load Slot's Current Groups
  251. ROM:002F9564 li $v0, 2 # Allowed Types = Set 2
  252. ROM:002F9568 addiu $v1, 1 # Slot's Current Groups ++
  253. ROM:002F956C jr $ra
  254. ROM:002F9570 sw $v1, 8($a0) # Store new Slot's Current Groups
  255. ROM:002F9570 # ---------------------------------------------------------------------------
  256. ROM:002F9574 .byte 0
  257. ROM:002F9575 .byte 0
  258. ROM:002F9576 .byte 0
  259. ROM:002F9577 .byte 0
  260. ROM:002F9578 .byte 0
  261. ROM:002F9579 .byte 0
  262. ROM:002F957A .byte 0
  263. ROM:002F957B .byte 0
  264. ROM:002F957C .byte 0
  265. ROM:002F957D .byte 0
  266. ROM:002F957E .byte 0
  267. ROM:002F957F .byte 0
  268. ROM:002F9580 # ---------------------------------------------------------------------------
  269. ROM:002F9580 lbu $v0, 0xC($a0) # Load Available Flag
  270. ROM:002F9584 beqz $v0, loc_2F95A4 # Branch if Slot isn't available
  271. ROM:002F9588 nop
  272. ROM:002F958C andi $v0, $a1, 2
  273. ROM:002F9590 beqz $v0, loc_2F95A4 # Branch if Set 2 isn't allowed
  274. ROM:002F9594 nop
  275. ROM:002F9598 lw $v0, 0x10($a0) # Load Enemy's Formation Data Pointer
  276. ROM:002F959C b locret_2F95A8
  277. ROM:002F95A0 lbu $v0, 0($v0) # Load Enemy's Encounter Rate
  278. ROM:002F95A4 # ---------------------------------------------------------------------------
  279. ROM:002F95A4
  280. ROM:002F95A4 loc_2F95A4: # CODE XREF: ROM:002F9584j
  281. ROM:002F95A4 # ROM:002F9590j
  282. ROM:002F95A4 daddu $v0, $0, $0 # Encounter Rate = 0
  283. ROM:002F95A8
  284. ROM:002F95A8 locret_2F95A8: # CODE XREF: ROM:002F959Cj
  285. ROM:002F95A8 jr $ra
  286. ROM:002F95AC nop
  287. ROM:002F95B0 # ---------------------------------------------------------------------------
  288. ROM:002F95B0 sb $a1, 0xC($a0) # Store Available Flag = True
  289. ROM:002F95B4 lw $a1, 0x10($a0) # Load Pointer to Enemy's Formation/Special Group's Stack Data
  290. ROM:002F95B8 lbu $v1, 0($a1) # Load Encounter Rate
  291. ROM:002F95BC blez $v1, loc_2F95DC # Branch if Encounter Rate <= 0
  292. ROM:002F95C0 nop
  293. ROM:002F95C4 lhu $a1, 2($a1) # Load Enemy's ID
  294. ROM:002F95C8 li $v1, 0xFFFF # v1 = FFFF
  295. ROM:002F95CC beq $a1, $v1, loc_2F95DC # Branch if Enemy doesn't exist
  296. ROM:002F95D0 nop
  297. ROM:002F95D4
  298. ROM:002F95D4 loc_2F95D4: # CODE XREF: ROM:loc_2F95DCj
  299. ROM:002F95D4 b locret_2F95E4
  300. ROM:002F95D8 nop
  301. ROM:002F95DC # ---------------------------------------------------------------------------
  302. ROM:002F95DC
  303. ROM:002F95DC loc_2F95DC: # CODE XREF: ROM:002F95BCj
  304. ROM:002F95DC # ROM:002F95CCj
  305. ROM:002F95DC b loc_2F95D4
  306. ROM:002F95E0 sb $0, 0xC($a0) # Store Available Flag = False
  307. ROM:002F95E4 # ---------------------------------------------------------------------------
  308. ROM:002F95E4
  309. ROM:002F95E4 locret_2F95E4: # CODE XREF: ROM:loc_2F95D4j
  310. ROM:002F95E4 jr $ra
  311. ROM:002F95E8 nop
  312. ROM:002F95E8 # ---------------------------------------------------------------------------
  313. ROM:002F95EC .byte 0
  314. ROM:002F95ED .byte 0
  315. ROM:002F95EE .byte 0
  316. ROM:002F95EF .byte 0
  317. ROM:002F95F0 # ---------------------------------------------------------------------------
  318. ROM:002F95F0 addiu $sp, -0x20
  319. ROM:002F95F4 sd $ra, 0x10($sp)
  320. ROM:002F95F8 sq $s0, 0($sp)
  321. ROM:002F95FC lw $v0, 0x10($a0) # Load X Enemy's Formation Data Pointer
  322. ROM:002F9600 lbu $s0, 1($v0) # Load X Enemy's Max Quantity
  323. ROM:002F9604 bgtz $s0, loc_2F9610 # Branch if Max Quantity > 0
  324. ROM:002F9608 nop
  325. ROM:002F960C li $s0, 1 # Max Quantity = 1
  326. ROM:002F9610
  327. ROM:002F9610 loc_2F9610: # CODE XREF: ROM:002F9604j
  328. ROM:002F9610 jal Random_Number_Generator
  329. ROM:002F9614 nop
  330. ROM:002F9618 bnez $s0, loc_2F9624 # Useless Divide by 0 check
  331. ROM:002F961C div $v0, $s0 # Random / Max Quantity
  332. ROM:002F9620 break 7
  333. ROM:002F9624
  334. ROM:002F9624 loc_2F9624: # CODE XREF: ROM:002F9618j
  335. ROM:002F9624 mfhi $v0 # Quantity Mod = Random % Quantity
  336. ROM:002F9628 ld $ra, 0x10($sp)
  337. ROM:002F962C lq $s0, 0($sp)
  338. ROM:002F9630 addiu $v0, 1 # Quantity Mod ++ (rand(1..Quantity))
  339. ROM:002F9634 jr $ra
  340. ROM:002F9638 addiu $sp, 0x20
  341. ROM:002F9638 # ---------------------------------------------------------------------------
  342. ROM:002F963C .byte 0
  343. ROM:002F963D .byte 0
  344. ROM:002F963E .byte 0
  345. ROM:002F963F .byte 0
  346. ROM:002F9640 # ---------------------------------------------------------------------------
  347. ROM:002F9640 lw $v0, 0x10($a0) # Load Pointer to X Enemy's Formation Data
  348. ROM:002F9644 jr $ra
  349. ROM:002F9648 lhu $v0, 2($v0) # Load Enemy's ID
  350. ROM:002F9648 # ---------------------------------------------------------------------------
  351. ROM:002F964C .byte 0
  352. ROM:002F964D .byte 0
  353. ROM:002F964E .byte 0
  354. ROM:002F964F .byte 0
  355. ROM:002F9650 # ---------------------------------------------------------------------------
  356. ROM:002F9650 lw $v1, 8($a0) # Load Slot's Current Goups
  357. ROM:002F9654 li $v0, 1 # Allowed Types = Set 1
  358. ROM:002F9658 addiu $v1, 1 # Slot's Current Goups ++
  359. ROM:002F965C jr $ra
  360. ROM:002F9660 sw $v1, 8($a0) # Store new Slot's Current Goups
  361. ROM:002F9660 # ---------------------------------------------------------------------------
  362. ROM:002F9664 .byte 0
  363. ROM:002F9665 .byte 0
  364. ROM:002F9666 .byte 0
  365. ROM:002F9667 .byte 0
  366. ROM:002F9668 .byte 0
  367. ROM:002F9669 .byte 0
  368. ROM:002F966A .byte 0
  369. ROM:002F966B .byte 0
  370. ROM:002F966C .byte 0
  371. ROM:002F966D .byte 0
  372. ROM:002F966E .byte 0
  373. ROM:002F966F .byte 0
  374. ROM:002F9670 # ---------------------------------------------------------------------------
  375. ROM:002F9670 lbu $v0, 0xC($a0) # Load Available Flag
  376. ROM:002F9674 beqz $v0, loc_2F9694 # Branch if Slot isn't available
  377. ROM:002F9678 nop
  378. ROM:002F967C andi $v0, $a1, 1
  379. ROM:002F9680 beqz $v0, loc_2F9694 # Branch if Set 1 isn't allowed
  380. ROM:002F9684 nop
  381. ROM:002F9688 lw $v0, 0x10($a0) # Load Enemy's Formation Data Pointer
  382. ROM:002F968C b locret_2F9698
  383. ROM:002F9690 lbu $v0, 0($v0) # Load Enemy's Encounter Rate
  384. ROM:002F9694 # ---------------------------------------------------------------------------
  385. ROM:002F9694
  386. ROM:002F9694 loc_2F9694: # CODE XREF: ROM:002F9674j
  387. ROM:002F9694 # ROM:002F9680j
  388. ROM:002F9694 daddu $v0, $0, $0 # Encounter Rate = 0
  389. ROM:002F9698
  390. ROM:002F9698 locret_2F9698: # CODE XREF: ROM:002F968Cj
  391. ROM:002F9698 jr $ra
  392. ROM:002F969C nop
  393. ROM:002F96A0 # ---------------------------------------------------------------------------
  394. ROM:002F96A0 sb $a1, 0xC($a0)
  395. ROM:002F96A4 lw $a1, 0x10($a0)
  396. ROM:002F96A8 lbu $v1, 0($a1)
  397. ROM:002F96AC blez $v1, loc_2F96CC
  398. ROM:002F96B0 nop
  399. ROM:002F96B4 lhu $a1, 2($a1)
  400. ROM:002F96B8 li $v1, 0xFFFF
  401. ROM:002F96BC beq $a1, $v1, loc_2F96CC
  402. ROM:002F96C0 nop
  403. ROM:002F96C4
  404. ROM:002F96C4 loc_2F96C4: # CODE XREF: ROM:loc_2F96CCj
  405. ROM:002F96C4 b locret_2F96D4
  406. ROM:002F96C8 nop
  407. ROM:002F96CC # ---------------------------------------------------------------------------
  408. ROM:002F96CC
  409. ROM:002F96CC loc_2F96CC: # CODE XREF: ROM:002F96ACj
  410. ROM:002F96CC # ROM:002F96BCj
  411. ROM:002F96CC b loc_2F96C4
  412. ROM:002F96D0 sb $0, 0xC($a0)
  413. ROM:002F96D4 # ---------------------------------------------------------------------------
  414. ROM:002F96D4
  415. ROM:002F96D4 locret_2F96D4: # CODE XREF: ROM:loc_2F96C4j
  416. ROM:002F96D4 jr $ra
  417. ROM:002F96D8 nop
  418. ROM:002F96D8 # ---------------------------------------------------------------------------
  419.  
  420.  
  421.  
  422. sub_2F98E0: # CODE XREF: sub_2A1A20+30p
  423. ROM:002F98E0
  424. ROM:002F98E0 var_220 = -0x220
  425. ROM:002F98E0 var_210 = -0x210
  426. ROM:002F98E0 var_200 = -0x200
  427. ROM:002F98E0 var_1F0 = -0x1F0
  428. ROM:002F98E0 var_1E0 = -0x1E0
  429. ROM:002F98E0 var_1D0 = -0x1D0
  430. ROM:002F98E0 var_1C0 = -0x1C0
  431. ROM:002F98E0 var_1B0 = -0x1B0
  432. ROM:002F98E0 var_1A0 = -0x1A0
  433. ROM:002F98E0 var_190 = -0x190
  434. ROM:002F98E0 var_180 = -0x180
  435. ROM:002F98E0 var_17C = -0x17C
  436. ROM:002F98E0 var_178 = -0x178
  437. ROM:002F98E0 var_174 = -0x174
  438. ROM:002F98E0 var_170 = -0x170
  439. ROM:002F98E0 var_15C = -0x15C
  440. ROM:002F98E0 var_158 = -0x158
  441. ROM:002F98E0 var_154 = -0x154
  442. ROM:002F98E0 var_150 = -0x150
  443. ROM:002F98E0 var_140 = -0x140
  444. ROM:002F98E0 var_13C = -0x13C
  445. ROM:002F98E0 var_138 = -0x138
  446. ROM:002F98E0 var_134 = -0x134
  447. ROM:002F98E0 var_130 = -0x130
  448. ROM:002F98E0 var_120 = -0x120
  449. ROM:002F98E0 var_11C = -0x11C
  450. ROM:002F98E0 var_118 = -0x118
  451. ROM:002F98E0 var_114 = -0x114
  452. ROM:002F98E0 var_110 = -0x110
  453. ROM:002F98E0 var_100 = -0x100
  454. ROM:002F98E0 var_FC = -0xFC
  455. ROM:002F98E0 var_F8 = -0xF8
  456. ROM:002F98E0 var_F4 = -0xF4
  457. ROM:002F98E0 var_E0 = -0xE0
  458. ROM:002F98E0 var_DC = -0xDC
  459. ROM:002F98E0 var_D8 = -0xD8
  460. ROM:002F98E0 var_D4 = -0xD4
  461. ROM:002F98E0 var_D0 = -0xD0
  462. ROM:002F98E0 var_C0 = -0xC0
  463. ROM:002F98E0 var_BC = -0xBC
  464. ROM:002F98E0 var_B8 = -0xB8
  465. ROM:002F98E0 var_B4 = -0xB4
  466. ROM:002F98E0 var_B0 = -0xB0
  467. ROM:002F98E0 var_A0 = -0xA0
  468. ROM:002F98E0 var_9C = -0x9C
  469. ROM:002F98E0 var_98 = -0x98
  470. ROM:002F98E0 var_94 = -0x94
  471. ROM:002F98E0 var_90 = -0x90
  472. ROM:002F98E0 var_80 = -0x80
  473. ROM:002F98E0 var_7C = -0x7C
  474. ROM:002F98E0 var_78 = -0x78
  475. ROM:002F98E0 var_74 = -0x74
  476. ROM:002F98E0 var_70 = -0x70
  477. ROM:002F98E0 var_60 = -0x60
  478. ROM:002F98E0 var_5C = -0x5C
  479. ROM:002F98E0 var_58 = -0x58
  480. ROM:002F98E0 var_54 = -0x54
  481. ROM:002F98E0 var_50 = -0x50
  482. ROM:002F98E0 var_40 = -0x40
  483. ROM:002F98E0 var_3C = -0x3C
  484. ROM:002F98E0 var_38 = -0x38
  485. ROM:002F98E0 var_34 = -0x34
  486. ROM:002F98E0 var_30 = -0x30
  487. ROM:002F98E0 var_20 = -0x20
  488. ROM:002F98E0 var_1C = -0x1C
  489. ROM:002F98E0 var_18 = -0x18
  490. ROM:002F98E0 var_14 = -0x14
  491. ROM:002F98E0 var_10 = -0x10
  492. ROM:002F98E0
  493. ROM:002F98E0 addiu $sp, -0x220
  494. ROM:002F98E4 lui $v0, 0x3D # '='
  495. ROM:002F98E8 sd $ra, 0x220+var_190($sp)
  496. ROM:002F98EC lui $a1, 0x3D # '='
  497. ROM:002F98F0 sq $fp, 0x220+var_1A0($sp)
  498. ROM:002F98F4 la $v0, unk_3D1140 # v0 = Pointer to Formation Set 1 Code Pointers
  499. ROM:002F98F8 sq $s7, 0x220+var_1B0($sp)
  500. ROM:002F98FC addiu $v1, $sp, 0x220+var_20 # Stack Pointer 1
  501. ROM:002F9900 sq $s6, 0x220+var_1C0($sp)
  502. ROM:002F9904 la $a1, unk_3D1100 # a1 = Pointer to Default Code Pointers
  503. ROM:002F9908 sq $s5, 0x220+var_1D0($sp)
  504. ROM:002F990C addiu $s6, $sp, 0x220+var_10 # s6 = Stack Pointer 2
  505. ROM:002F9910 sq $s4, 0x220+var_1E0($sp)
  506. ROM:002F9914 sq $s3, 0x220+var_1F0($sp)
  507. ROM:002F9918 sq $s2, 0x220+var_200($sp)
  508. ROM:002F991C sq $s1, 0x220+var_210($sp)
  509. ROM:002F9920 daddu $s2, $a0, $0 # s2 = Pointer to Formation File Data Pointer
  510. ROM:002F9924 sq $s0, 0x220+var_220($sp)
  511. ROM:002F9928 addiu $s1, $sp, 0x220+var_34 # s1 = Stack Pointer 3
  512. ROM:002F992C sw $0, -0x62C4($gp) # Store Global Temp Stack Pointer = 0
  513. ROM:002F9930 lw $a3, 0x1C($a0) # Load Formation ID
  514. ROM:002F9934 lw $a2, 4($a0) # Load Formation Data Pointer
  515. ROM:002F9938 sll $a3, 6 # ID * 64
  516. ROM:002F993C addu $a2, $a3 # a2 = Formation's Data Pointer
  517. ROM:002F9940 sw $v0, 0x220+var_20($sp) # Store Pointer to Formation Set 1 Code Pointers
  518. ROM:002F9944 addiu $v0, $a2, 0x10 # v0 = Pointer to First Enemy's Formation Data
  519. ROM:002F9948 sw $v1, -0x62C4($gp) # Store Stack Pointer 1 as Global Temp Stack Pointer
  520. ROM:002F994C sw $v0, 0($s6) # Store Pointer to First Enemy's Formation Data
  521. ROM:002F9950 sw $0, 0x220+var_18($sp) # Store 0 to stack
  522. ROM:002F9954 sb $0, 0x220+var_14($sp) # Store Slot 1 Available = False
  523. ROM:002F9958 sw $0, 0x220+var_1C($sp) # Store Next Stack Pointer = 0
  524. ROM:002F995C lw $v1, 0x1C($a0) # Load Formation ID
  525. ROM:002F9960 lw $v0, 4($a0) # Load Formation Data Pointer
  526. ROM:002F9964 sll $v1, 6 # ID * 64
  527. ROM:002F9968 lw $a0, -0x62C4($gp) # Load Stack Pointer 1
  528. ROM:002F996C addu $v0, $v1
  529. ROM:002F9970 sw $a1, 0x220+var_40($sp) # Store Pointer to Default Code Pointers
  530. ROM:002F9974 addiu $v1, $v0, 0x14 # v1 = Pointer to Second Enemy's Formation Data
  531. ROM:002F9978 sw $0, 0x220+var_38($sp) # Store 0 to stack
  532. ROM:002F997C beqz $a0, loc_2FA094 # Branch if Stack Pointer 1 = 0
  533. ROM:002F9980 sb $0, 0($s1) # Store Slot 2 Available = False
  534. ROM:002F9984 b loc_2F9994
  535. ROM:002F9988 lw $v0, 4($a0) # Load Next Stack Pointer
  536. ROM:002F998C # ---------------------------------------------------------------------------
  537. ROM:002F998C
  538. ROM:002F998C loc_2F998C: # CODE XREF: sub_2F98E0+C0j
  539. ROM:002F998C daddu $a0, $v0, $0 # a0 = Next Stack Pointer
  540. ROM:002F9990 lw $v0, 4($a0) # Load new Next Stack Pointer (doesn't happen here)
  541. ROM:002F9994
  542. ROM:002F9994 loc_2F9994: # CODE XREF: sub_2F98E0+A4j
  543. ROM:002F9994 nop
  544. ROM:002F9998 nop
  545. ROM:002F999C nop
  546. ROM:002F99A0 bnez $v0, loc_2F998C # Branch if Next Stack Pointer exists
  547. ROM:002F99A4 nop
  548. ROM:002F99A8 addiu $v0, $sp, 0x220+var_40 # v0 = Stack Pointer 4
  549. ROM:002F99AC sw $v0, 4($a0) # Store Next Stack Pointer = Stack Pointer 4
  550. ROM:002F99B0
  551. ROM:002F99B0 loc_2F99B0: # CODE XREF: sub_2F98E0+7B8j
  552. ROM:002F99B0 lui $v0, 0x3D # '='
  553. ROM:002F99B4 addiu $t7, $sp, 0x220+var_30 # t7 = Stack Pointer 5
  554. ROM:002F99B8 la $v0, unk_3D1140 # v0 = Pointer to Set 1 Code Pointers
  555. ROM:002F99BC sw $0, 0x220+var_3C($sp) # Store Next Stack Pointer = 0
  556. ROM:002F99C0 sw $v0, 0x220+var_40($sp) # Store Pointer to Set 1 Code Pointers
  557. ROM:002F99C4 addiu $t6, $sp, 0x220+var_54 # t6 = Stack Pointer 6
  558. ROM:002F99C8 sw $v1, 0($t7) # Store Pointer to Second Enemy's Formation Data
  559. ROM:002F99CC lui $v0, 0x3D # '='
  560. ROM:002F99D0 lw $a0, 0x1C($s2) # Load Formation ID
  561. ROM:002F99D4 la $v0, unk_3D1100 # v0 = Pointer to Default Code Pointers
  562. ROM:002F99D8 lw $v1, 4($s2) # Load Formation Data Pointer
  563. ROM:002F99DC lw $a1, -0x62C4($gp) # Load Stack Pointer 1
  564. ROM:002F99E0 sll $a0, 6 # ID * 64
  565. ROM:002F99E4 addu $v1, $a0
  566. ROM:002F99E8 sw $v0, 0x220+var_60($sp) # Store Pointer to Default Code Pointers
  567. ROM:002F99EC addiu $v1, 0x18 # v1 = Pointer to Third Enemy's Formation Data
  568. ROM:002F99F0 sw $0, 0x220+var_58($sp) # Store 0 to stack
  569. ROM:002F99F4 beqz $a1, loc_2FA0A0 # Branch if Stack Pointer 1 = 0
  570. ROM:002F99F8 sb $0, 0($t6) # Store Slot 3 Available Flag = 0
  571. ROM:002F99FC b loc_2F9A0C
  572. ROM:002F9A00 lw $v0, 4($a1) # Load Next Stack Pointer
  573. ROM:002F9A04 # ---------------------------------------------------------------------------
  574. ROM:002F9A04
  575. ROM:002F9A04 loc_2F9A04: # CODE XREF: sub_2F98E0+138j
  576. ROM:002F9A04 daddu $a1, $v0, $0 # a1 = Next Stack Pointer
  577. ROM:002F9A08 lw $v0, 4($a1) # Load new Next Stack Pointer
  578. ROM:002F9A0C
  579. ROM:002F9A0C loc_2F9A0C: # CODE XREF: sub_2F98E0+11Cj
  580. ROM:002F9A0C nop
  581. ROM:002F9A10 nop
  582. ROM:002F9A14 nop
  583. ROM:002F9A18 bnez $v0, loc_2F9A04 # Branch if Next Stack Pointer exists
  584. ROM:002F9A1C nop
  585. ROM:002F9A20 addiu $v0, $sp, 0x220+var_60 # v0 = Stack Pointer 7
  586. ROM:002F9A24 sw $v0, 4($a1) # Store Next Stack Pointer = Stack Pointer 7
  587. ROM:002F9A28
  588. ROM:002F9A28 loc_2F9A28: # CODE XREF: sub_2F98E0+7C4j
  589. ROM:002F9A28 lui $v0, 0x3D # '='
  590. ROM:002F9A2C addiu $t5, $sp, 0x220+var_50 # t5 = Stack Pointer 8
  591. ROM:002F9A30 la $v0, unk_3D1140 # v0 = Pointer to Set 1 Code Pointers
  592. ROM:002F9A34 sw $0, 0x220+var_5C($sp) # Store Next Stack Pointer = 0
  593. ROM:002F9A38 sw $v0, 0x220+var_60($sp) # Store Pointer to Set 1 Code Pointers
  594. ROM:002F9A3C addiu $t4, $sp, 0x220+var_74 # t4 = Stack Pointer 9
  595. ROM:002F9A40 sw $v1, 0($t5) # Store Pointer to Third Enemy's Formation Data
  596. ROM:002F9A44 lui $v0, 0x3D # '='
  597. ROM:002F9A48 lw $a0, 0x1C($s2) # Load Formation ID
  598. ROM:002F9A4C la $v0, unk_3D1100 # v0 = Pointer to Default Code Pointers
  599. ROM:002F9A50 lw $v1, 4($s2) # Load Formation Data Pointer
  600. ROM:002F9A54 lw $a1, -0x62C4($gp) # Load Stack Pointer 1
  601. ROM:002F9A58 sll $a0, 6 # ID * 64
  602. ROM:002F9A5C addu $v1, $a0
  603. ROM:002F9A60 sw $v0, 0x220+var_80($sp) # Store Pointer to Default Code Pointers
  604. ROM:002F9A64 addiu $v1, 0x1C # v1 = Pointer to Fourth Enemy's Formation Data
  605. ROM:002F9A68 sw $0, 0x220+var_78($sp) # Store 0 to stack
  606. ROM:002F9A6C beqz $a1, loc_2FA0AC # Branch if Stack Pointer 1 = 0
  607. ROM:002F9A70 sb $0, 0($t4) # Store Slot 4 Available = False
  608. ROM:002F9A74 b loc_2F9A84
  609. ROM:002F9A78 lw $v0, 4($a1) # Load Next Stack Pointer
  610. ROM:002F9A7C # ---------------------------------------------------------------------------
  611. ROM:002F9A7C
  612. ROM:002F9A7C loc_2F9A7C: # CODE XREF: sub_2F98E0+1B0j
  613. ROM:002F9A7C daddu $a1, $v0, $0 # a1 = Next Stack Pointer
  614. ROM:002F9A80 lw $v0, 4($a1) # Load new Next Stack Pointer
  615. ROM:002F9A84
  616. ROM:002F9A84 loc_2F9A84: # CODE XREF: sub_2F98E0+194j
  617. ROM:002F9A84 nop
  618. ROM:002F9A88 nop
  619. ROM:002F9A8C nop
  620. ROM:002F9A90 bnez $v0, loc_2F9A7C # Branch if Next Stack Pointer exists
  621. ROM:002F9A94 nop
  622. ROM:002F9A98 addiu $v0, $sp, 0x220+var_80 # v0 = Stack Pointer 10
  623. ROM:002F9A9C sw $v0, 4($a1) # Store Next Stack Pointer = Stack Pointer 10
  624. ROM:002F9AA0
  625. ROM:002F9AA0 loc_2F9AA0: # CODE XREF: sub_2F98E0+7D0j
  626. ROM:002F9AA0 lui $v0, 0x3D # '='
  627. ROM:002F9AA4 addiu $t3, $sp, 0x220+var_70 # t3 = Stack Pointer 11
  628. ROM:002F9AA8 la $v0, unk_3D1140 # v0 = Pointer to Set 1 Code Pointers
  629. ROM:002F9AAC sw $0, 0x220+var_7C($sp) # Store Next Stack Pointer = 0
  630. ROM:002F9AB0 sw $v0, 0x220+var_80($sp) # Store Pointer to Set 1 Code Pointers
  631. ROM:002F9AB4 addiu $t2, $sp, 0x220+var_94 # t2 = Stack Pointer 12
  632. ROM:002F9AB8 sw $v1, 0($t3) # Store Pointer to Fourth Enemy's Formation Data
  633. ROM:002F9ABC lui $v0, 0x3D # '='
  634. ROM:002F9AC0 lw $a0, 0x1C($s2) # Load Formation ID
  635. ROM:002F9AC4 la $v0, unk_3D1100 # v0 = Pointer to Default Code Pointers
  636. ROM:002F9AC8 lw $v1, 4($s2) # Load Formation Data Pointer
  637. ROM:002F9ACC lw $a1, -0x62C4($gp) # Load Stack Pointer 1
  638. ROM:002F9AD0 sll $a0, 6 # ID * 64
  639. ROM:002F9AD4 addu $v1, $a0
  640. ROM:002F9AD8 sw $v0, 0x220+var_A0($sp) # Store Pointer to Default Code Pointers
  641. ROM:002F9ADC addiu $v1, 0x20 # ' ' # v1 = Pointer to Fifth Enemy's Formation Data
  642. ROM:002F9AE0 sw $0, 0x220+var_98($sp) # Store 0 to stack
  643. ROM:002F9AE4 beqz $a1, loc_2FA0B8 # Branch if Stack Pointer 1 = 0
  644. ROM:002F9AE8 sb $0, 0($t2) # Store Slot 5 Available = False
  645. ROM:002F9AEC b loc_2F9AFC
  646. ROM:002F9AF0 lw $v0, 4($a1) # Load Next Stack Pointer
  647. ROM:002F9AF4 # ---------------------------------------------------------------------------
  648. ROM:002F9AF4
  649. ROM:002F9AF4 loc_2F9AF4: # CODE XREF: sub_2F98E0+228j
  650. ROM:002F9AF4 daddu $a1, $v0, $0 # a1 = Next Stack Pointer
  651. ROM:002F9AF8 lw $v0, 4($a1) # Load new Next Stack Pointer
  652. ROM:002F9AFC
  653. ROM:002F9AFC loc_2F9AFC: # CODE XREF: sub_2F98E0+20Cj
  654. ROM:002F9AFC nop
  655. ROM:002F9B00 nop
  656. ROM:002F9B04 nop
  657. ROM:002F9B08 bnez $v0, loc_2F9AF4 # Branch if Next Stack Pointer exists
  658. ROM:002F9B0C nop
  659. ROM:002F9B10 addiu $v0, $sp, 0x220+var_A0 # v0 = Stack Pointer 13
  660. ROM:002F9B14 sw $v0, 4($a1) # Store Next Stack Pointer = Stack Pointer 13
  661. ROM:002F9B18
  662. ROM:002F9B18 loc_2F9B18: # CODE XREF: sub_2F98E0+7DCj
  663. ROM:002F9B18 lui $v0, 0x3D # '='
  664. ROM:002F9B1C addiu $t1, $sp, 0x220+var_90 # t1 = Stack Pointer 14
  665. ROM:002F9B20 la $v0, unk_3D1140 # v0 = Pointer to Set 1 Code Pointers
  666. ROM:002F9B24 sw $0, 0x220+var_9C($sp) # Store Next Stack Pointer = 0
  667. ROM:002F9B28 sw $v0, 0x220+var_A0($sp) # Store Pointer to Set 1 Code Pointers
  668. ROM:002F9B2C addiu $t0, $sp, 0x220+var_B4 # t0 = Stack Pointer 15
  669. ROM:002F9B30 sw $v1, 0($t1) # store Pointer to Fifth Enemy's Formation Data
  670. ROM:002F9B34 lui $v0, 0x3D # '='
  671. ROM:002F9B38 lw $a0, 0x1C($s2) # Load Formation ID
  672. ROM:002F9B3C la $v0, unk_3D1100 # v0 = Pointer to Default Code Pointers
  673. ROM:002F9B40 lw $v1, 4($s2) # Load Formation Data Pointer
  674. ROM:002F9B44 lw $a1, -0x62C4($gp) # Load Stack Pointer 1
  675. ROM:002F9B48 sll $a0, 6 # ID * 64
  676. ROM:002F9B4C addu $v1, $a0
  677. ROM:002F9B50 sw $v0, 0x220+var_C0($sp) # Store Pointer to Default Code Pointers
  678. ROM:002F9B54 addiu $v1, 0x24 # '$' # v1 = Pointer to Sixth Enemy's Formation Data
  679. ROM:002F9B58 sw $0, 0x220+var_B8($sp) # store 0 to stack
  680. ROM:002F9B5C beqz $a1, loc_2FA0C4 # Branch if Stack Pointer 1 = 0
  681. ROM:002F9B60 sb $0, 0($t0) # Store Slot 6 Available = False
  682. ROM:002F9B64 b loc_2F9B74
  683. ROM:002F9B68 lw $v0, 4($a1) # Load Next Stack Pointer
  684. ROM:002F9B6C # ---------------------------------------------------------------------------
  685. ROM:002F9B6C
  686. ROM:002F9B6C loc_2F9B6C: # CODE XREF: sub_2F98E0+2A0j
  687. ROM:002F9B6C daddu $a1, $v0, $0 # a1 = Next Stack Pointer
  688. ROM:002F9B70 lw $v0, 4($a1) # Load new Next Stack Pointer
  689. ROM:002F9B74
  690. ROM:002F9B74 loc_2F9B74: # CODE XREF: sub_2F98E0+284j
  691. ROM:002F9B74 nop
  692. ROM:002F9B78 nop
  693. ROM:002F9B7C nop
  694. ROM:002F9B80 bnez $v0, loc_2F9B6C # Branch if Next Stack Pointer exists
  695. ROM:002F9B84 nop
  696. ROM:002F9B88 addiu $v0, $sp, 0x220+var_C0 # v0 = Stack Pointer 16
  697. ROM:002F9B8C sw $v0, 4($a1) # Store Next Stack Pointer = Stack Pointer 16
  698. ROM:002F9B90
  699. ROM:002F9B90 loc_2F9B90: # CODE XREF: sub_2F98E0+7E8j
  700. ROM:002F9B90 lui $v0, 0x3D # '='
  701. ROM:002F9B94 addiu $a3, $sp, 0x220+var_B0 # a3 = Stack Pointer 17
  702. ROM:002F9B98 la $v0, unk_3D1120 # v0 = Pointer to Set 2 Code Pointers
  703. ROM:002F9B9C sw $v1, 0($a3) # Store Pointer to Sixth Enemy's Formation Data
  704. ROM:002F9BA0 sw $v0, 0x220+var_C0($sp) # Store Pointer to Set 2 Code Pointers
  705. ROM:002F9BA4 lui $v1, 0x3D # '='
  706. ROM:002F9BA8 sw $0, 0x220+var_BC($sp) # Store Next Stack Pointer = 0
  707. ROM:002F9BAC la $v1, unk_3D1100 # v1 = Pointer to Default Code Pointers
  708. ROM:002F9BB0 lw $a1, 0x1C($s2) # Load Formation ID
  709. ROM:002F9BB4 addiu $a2, $sp, 0x220+var_D4 # a2 = Stack Pointer 18
  710. ROM:002F9BB8 lw $a0, 4($s2) # Load Formation Data Pointer
  711. ROM:002F9BBC lw $v0, -0x62C4($gp) # Load Stack Pointer 1
  712. ROM:002F9BC0 sll $a1, 6 # ID * 64
  713. ROM:002F9BC4 addu $a0, $a1
  714. ROM:002F9BC8 sw $v1, 0x220+var_E0($sp) # Store Pointer to Default Code Pointers
  715. ROM:002F9BCC addiu $a0, 0x28 # '(' # a0 = Pointer to Seventh Enemy's Data Pointer
  716. ROM:002F9BD0 sw $0, 0x220+var_D8($sp) # Store 0 to stack
  717. ROM:002F9BD4 beqz $v0, loc_2FA0D0 # Branch if Stack Pointer 1 = 0
  718. ROM:002F9BD8 sb $0, 0($a2) # Store Slot 7 Available = False
  719. ROM:002F9BDC b loc_2F9BEC
  720. ROM:002F9BE0 lw $v1, 4($v0) # Load Next Stack Pointer
  721. ROM:002F9BE4 # ---------------------------------------------------------------------------
  722. ROM:002F9BE4
  723. ROM:002F9BE4 loc_2F9BE4: # CODE XREF: sub_2F98E0+318j
  724. ROM:002F9BE4 daddu $v0, $v1, $0 # v0 = Next Stack Pointer
  725. ROM:002F9BE8 lw $v1, 4($v0) # Load new Next Stack Pointer
  726. ROM:002F9BEC
  727. ROM:002F9BEC loc_2F9BEC: # CODE XREF: sub_2F98E0+2FCj
  728. ROM:002F9BEC nop
  729. ROM:002F9BF0 nop
  730. ROM:002F9BF4 nop
  731. ROM:002F9BF8 bnez $v1, loc_2F9BE4 # Branch if Next Stack Pointer exists
  732. ROM:002F9BFC nop
  733. ROM:002F9C00 addiu $v1, $sp, 0x220+var_E0 # v1 = Stack Pointer 19
  734. ROM:002F9C04 sw $v1, 4($v0) # Store Next Stack Pointer = Stack Pointer 19
  735. ROM:002F9C08
  736. ROM:002F9C08 loc_2F9C08: # CODE XREF: sub_2F98E0+7F4j
  737. ROM:002F9C08 lui $v0, 0x3D # '='
  738. ROM:002F9C0C addiu $a1, $sp, 0x220+var_D0 # a1 = Stack Pointer 20
  739. ROM:002F9C10 la $v0, unk_3D1120 # v0 = Pointer to Set 2 Code Pointers
  740. ROM:002F9C14 sw $a0, 0($a1) # Store Pointer to Seventh Enemy's Formation Data
  741. ROM:002F9C18 sw $v0, 0x220+var_E0($sp) # Store Pointer to Set 2 Code Pointers
  742. ROM:002F9C1C lui $v1, 0x3D # '='
  743. ROM:002F9C20 sw $0, 0x220+var_DC($sp) # Store Next Stack Pointer = 0
  744. ROM:002F9C24 la $v1, unk_3D1100 # v1 = Pointer to Default Code Pointers
  745. ROM:002F9C28 lw $s4, 0x1C($s2) # Load Formation ID
  746. ROM:002F9C2C addiu $a0, $sp, 0x220+var_F4 # a0 = Stack Pointer 21
  747. ROM:002F9C30 lw $s3, 4($s2) # Load Formation Data Pointer
  748. ROM:002F9C34 lw $v0, -0x62C4($gp) # Load Stack Pointer 1
  749. ROM:002F9C38 sll $s4, 6 # ID * 64
  750. ROM:002F9C3C addu $s3, $s4
  751. ROM:002F9C40 sw $v1, 0x220+var_100($sp) # Store Pointer to Default Code Pointers
  752. ROM:002F9C44 addiu $s3, 0x2C # ',' # s3 = Pointer to Eighth Enemy's Formation Data
  753. ROM:002F9C48 sw $0, 0x220+var_F8($sp) # Store 0 to stack
  754. ROM:002F9C4C beqz $v0, loc_2FA0DC # Branch if Stack Pointer 1 = 0
  755. ROM:002F9C50 sb $0, 0($a0) # Store Slot 8 Available = False
  756. ROM:002F9C54 b loc_2F9C64
  757. ROM:002F9C58 lw $v1, 4($v0) # Load Next Stack Pointer
  758. ROM:002F9C5C # ---------------------------------------------------------------------------
  759. ROM:002F9C5C
  760. ROM:002F9C5C loc_2F9C5C: # CODE XREF: sub_2F98E0+390j
  761. ROM:002F9C5C daddu $v0, $v1, $0 # v0 = Next Stack Pointer
  762. ROM:002F9C60 lw $v1, 4($v0) # Load new Next Stack Pointer
  763. ROM:002F9C64
  764. ROM:002F9C64 loc_2F9C64: # CODE XREF: sub_2F98E0+374j
  765. ROM:002F9C64 nop
  766. ROM:002F9C68 nop
  767. ROM:002F9C6C nop
  768. ROM:002F9C70 bnez $v1, loc_2F9C5C # Branch if Next Stack Pointer exists
  769. ROM:002F9C74 nop
  770. ROM:002F9C78 addiu $v1, $sp, 0x220+var_100 # v1 = Stack Pointer 22
  771. ROM:002F9C7C sw $v1, 4($v0) # Store Next Stack Pointer = Stack Pointer 22
  772. ROM:002F9C80
  773. ROM:002F9C80 loc_2F9C80: # CODE XREF: sub_2F98E0+800j
  774. ROM:002F9C80 lui $v0, 0x3D # '='
  775. ROM:002F9C84 addiu $fp, $sp, 0x130 # fp = Stack Pointer 23
  776. ROM:002F9C88 la $v0, unk_3D1120 # v0 = Pointer to Set 2 Code Pointers
  777. ROM:002F9C8C sw $s3, 0x220+var_220($fp) # Store Pointer to Eighth Enemy's Formation Data
  778. ROM:002F9C8C # NOTE: It's actually var_F0, fp messes the variable up
  779. ROM:002F9C90 sw $v0, 0x220+var_100($sp) # Store Pointer to Set 2 Code Pointers
  780. ROM:002F9C94 addiu $v1, $sp, 0x220+var_114 # v1 = Stack Pointer 24
  781. ROM:002F9C98 sw $0, 0x220+var_FC($sp) # Store Next Stack Pointer = 0
  782. ROM:002F9C9C lui $v0, 0x3D # '='
  783. ROM:002F9CA0 lw $s5, 0x1C($s2) # Load Formation ID
  784. ROM:002F9CA4 la $v0, unk_3D1100 # v0 = Pointer to Default Code Pointers
  785. ROM:002F9CA8 lw $s4, 4($s2) # Load Formation Data Pointer
  786. ROM:002F9CAC lw $s3, -0x62C4($gp) # Load Stack Pointer 1
  787. ROM:002F9CB0 sll $s5, 6 # ID * 64
  788. ROM:002F9CB4 addu $s4, $s5
  789. ROM:002F9CB8 sw $v0, 0x220+var_120($sp) # Store Pointer to Default Code Pointers
  790. ROM:002F9CBC addiu $v0, $s4, 0x30 # v0 = Pointer to Ninth Enemy's Formation Data
  791. ROM:002F9CC0 sw $0, 0x220+var_118($sp) # Store 0 to stack
  792. ROM:002F9CC4 beqz $s3, loc_2FA0E8 # Branch if Stack Pointer 1 = 0
  793. ROM:002F9CC8 sb $0, 0($v1) # Store Ninth Slot Available = False
  794. ROM:002F9CCC b loc_2F9CDC
  795. ROM:002F9CD0 lw $s4, 4($s3) # Load Next Stack Pointer
  796. ROM:002F9CD4 # ---------------------------------------------------------------------------
  797. ROM:002F9CD4
  798. ROM:002F9CD4 loc_2F9CD4: # CODE XREF: sub_2F98E0+408j
  799. ROM:002F9CD4 daddu $s3, $s4, $0 # s3 = Next Stack Pointer
  800. ROM:002F9CD8 lw $s4, 4($s3) # Load new Next Stack Pointer
  801. ROM:002F9CDC
  802. ROM:002F9CDC loc_2F9CDC: # CODE XREF: sub_2F98E0+3ECj
  803. ROM:002F9CDC nop
  804. ROM:002F9CE0 nop
  805. ROM:002F9CE4 nop
  806. ROM:002F9CE8 bnez $s4, loc_2F9CD4 # Branch if Next Stack Pointer exists
  807. ROM:002F9CEC nop
  808. ROM:002F9CF0 addiu $s4, $sp, 0x220+var_120 # s4 = Stack Pointer 25
  809. ROM:002F9CF4 sw $s4, 4($s3) # Store Next Stack Pointer = Stack Pointer 25
  810. ROM:002F9CF8
  811. ROM:002F9CF8 loc_2F9CF8: # CODE XREF: sub_2F98E0+80Cj
  812. ROM:002F9CF8 lui $s3, 0x3D # '='
  813. ROM:002F9CFC lui $s4, 0x3D # '='
  814. ROM:002F9D00 la $s3, unk_3D1120 # s3 = Pointer to Set 2 Code Pointers
  815. ROM:002F9D04 sw $0, 0x220+var_11C($sp) # Store Next Stack Pointer = 0
  816. ROM:002F9D08 sw $s3, 0x220+var_120($sp) # Store Pointer to Set 2 Code Pointers
  817. ROM:002F9D0C la $s4, unk_3D1100 # s4 = Pointer to Default Code Pointers
  818. ROM:002F9D10 addiu $s3, $sp, 0x220+var_110 # s3 = Stack Pointer 26
  819. ROM:002F9D14 sw $v0, 0($s3) # Store Pointer to Ninth Enemy's Formation Data
  820. ROM:002F9D18 lw $s7, 0x1C($s2) # Load Formation ID
  821. ROM:002F9D1C addiu $v0, $sp, 0x220+var_134 # v0 = Stack Pointer 27
  822. ROM:002F9D20 lw $s5, 4($s2) # Load Formation Data Pointer
  823. ROM:002F9D24 lw $s3, -0x62C4($gp) # Load Stack Pointer 1
  824. ROM:002F9D28 sll $s7, 6 # ID * 64
  825. ROM:002F9D2C addu $s5, $s7
  826. ROM:002F9D30 sw $s4, 0x220+var_140($sp) # Store Pointer to Default Code Pointers
  827. ROM:002F9D34 addiu $s4, $s5, 0x34 # s4 = Pointer to Tenth Enemy's Formation Data
  828. ROM:002F9D38 sw $0, 0x220+var_138($sp) # Store 0 to stack
  829. ROM:002F9D3C beqz $s3, loc_2FA0F4 # Branch if Stack Pointer 1 = 0
  830. ROM:002F9D40 sb $0, 0($v0) # Store Slot 10 Available = False
  831. ROM:002F9D44 b loc_2F9D54
  832. ROM:002F9D48 lw $s5, 4($s3) # Load Next Stack Pointer
  833. ROM:002F9D4C # ---------------------------------------------------------------------------
  834. ROM:002F9D4C
  835. ROM:002F9D4C loc_2F9D4C: # CODE XREF: sub_2F98E0+480j
  836. ROM:002F9D4C daddu $s3, $s5, $0 # s3 = Next Stack Pointer
  837. ROM:002F9D50 lw $s5, 4($s3) # Load new Next Stack Pointer
  838. ROM:002F9D54
  839. ROM:002F9D54 loc_2F9D54: # CODE XREF: sub_2F98E0+464j
  840. ROM:002F9D54 nop
  841. ROM:002F9D58 nop
  842. ROM:002F9D5C nop
  843. ROM:002F9D60 bnez $s5, loc_2F9D4C # Branch if Next Stack Pointer exists
  844. ROM:002F9D64 nop
  845. ROM:002F9D68 addiu $s5, $sp, 0x220+var_140 # s5 = Stack Pointer 28
  846. ROM:002F9D6C sw $s5, 4($s3) # Store Next Stack Pointer = Stack Pointer 28
  847. ROM:002F9D70
  848. ROM:002F9D70 loc_2F9D70: # CODE XREF: sub_2F98E0+818j
  849. ROM:002F9D70 lui $s3, 0x3D # '='
  850. ROM:002F9D74 addiu $s7, $sp, 0x220+var_130 # s7 = Stack Pointer 29
  851. ROM:002F9D78 la $s3, unk_3D1120 # s3 = Pointer to Set 2 Code Pointers
  852. ROM:002F9D7C sw $s4, 0($s7) # Store Pointer to Tenth Enemy's Formation Data
  853. ROM:002F9D80 sw $s3, 0x220+var_140($sp) # Store Pointer to Set 2 Code Pointers
  854. ROM:002F9D84 lui $s5, 0x3D # '='
  855. ROM:002F9D88 sw $0, 0x220+var_13C($sp) # Store Next Stack Pointer = 0
  856. ROM:002F9D8C la $s5, unk_3D1100 # s5 = Pointer to Default Code Pointers
  857. ROM:002F9D90 lw $t9, 0x1C($s2) # Load Formation ID
  858. ROM:002F9D94 addiu $s4, $sp, 0x220+var_174 # s4 = Stack Pointer 30
  859. ROM:002F9D98 lw $t8, 4($s2) # Load Formation Data Pointer
  860. ROM:002F9D9C lw $s3, -0x62C4($gp) # Load Stack Pointer 1
  861. ROM:002F9DA0 sll $t9, 6 # ID * 64
  862. ROM:002F9DA4 addu $t8, $t9
  863. ROM:002F9DA8 sw $s5, 0x220+var_180($sp) # Store Pointer to Default Code Pointers
  864. ROM:002F9DAC addiu $s5, $t8, 0x38 # s5 = Pointer to Special Formation Data
  865. ROM:002F9DB0 sw $0, 0x220+var_178($sp) # Store 0 to stack
  866. ROM:002F9DB4 beqz $s3, loc_2FA100 # Branch if Stack Pointer 1 = 0
  867. ROM:002F9DB8 sb $0, 0($s4) # Store Special Formation Available = False
  868. ROM:002F9DBC b loc_2F9DCC
  869. ROM:002F9DC0 lw $t8, 4($s3) # Load Next Stack Pointer
  870. ROM:002F9DC4 # ---------------------------------------------------------------------------
  871. ROM:002F9DC4
  872. ROM:002F9DC4 loc_2F9DC4: # CODE XREF: sub_2F98E0+4F8j
  873. ROM:002F9DC4 daddu $s3, $t8, $0 # s3 = Next Stack Pointer
  874. ROM:002F9DC8 lw $t8, 4($s3) # Load new Next Stack Pointer
  875. ROM:002F9DCC
  876. ROM:002F9DCC loc_2F9DCC: # CODE XREF: sub_2F98E0+4DCj
  877. ROM:002F9DCC nop
  878. ROM:002F9DD0 nop
  879. ROM:002F9DD4 nop
  880. ROM:002F9DD8 bnez $t8, loc_2F9DC4 # Branch if Next Stack Pointer exists
  881. ROM:002F9DDC nop
  882. ROM:002F9DE0 addiu $t8, $sp, 0x220+var_180 # t8 = Stack Pointer 31
  883. ROM:002F9DE4 sw $t8, 4($s3) # Store Next Stack Pointer = Stack Pointer 31
  884. ROM:002F9DE8
  885. ROM:002F9DE8 loc_2F9DE8: # CODE XREF: sub_2F98E0+824j
  886. ROM:002F9DE8 lui $s3, 0x3D # '='
  887. ROM:002F9DEC lw $s6, 0($s6) # Load Pointer to First Enemy's Formation Data
  888. ROM:002F9DF0 la $s3, unk_3D10E0 # s3 = Pointer to Special Formation Code Pointers
  889. ROM:002F9DF4 addiu $t8, $sp, 0x220+var_14 # t8 = Stack Pointer 32
  890. ROM:002F9DF8 sw $s3, 0x220+var_180($sp) # Store Pointer to Special Formation Code Pointers
  891. ROM:002F9DFC addiu $s3, $sp, 0x220+var_170 # s3 = Stack Pointer 33
  892. ROM:002F9E00 sw $0, 0x220+var_17C($sp) # Store Next Stack Pointer = 0
  893. ROM:002F9E04 sw $s5, 0($s3) # Store Pointer to Special Formation Data
  894. ROM:002F9E08 addiu $s5, $sp, 0x220+var_C0 # s5 = Stack Pointer 34
  895. ROM:002F9E0C sw $s5, 0x220+var_15C($sp) # Store Stack Pointer 34 to stack
  896. ROM:002F9E10 addiu $s5, $sp, 0x220+var_E0 # s5 = Stack Pointer 35
  897. ROM:002F9E14 sw $s5, 0x220+var_158($sp) # Store Stack Pointer 35 to stack
  898. ROM:002F9E18 addiu $s5, $sp, 0x220+var_100 # s5 = Stack Pointer 36
  899. ROM:002F9E1C sw $s5, 0x220+var_154($sp) # Store Stack Pointer 36 to stack
  900. ROM:002F9E20 addiu $s5, $sp, 0x220+var_120 # s5 = Stack Pointer 37
  901. ROM:002F9E24 sw $s5, 0x220+var_150($sp) # Store Stack Pointer 37 to stack
  902. ROM:002F9E28 li $s5, 1
  903. ROM:002F9E2C sb $s5, 0($t8) # Store Slot 1 Available = True
  904. ROM:002F9E30 lbu $s5, 0($s6) # Load First Enemy's Encounter Rate
  905. ROM:002F9E34 blez $s5, loc_2FA10C # Branch if Encounter Rate <= 0
  906. ROM:002F9E38 nop
  907. ROM:002F9E3C lhu $s5, 2($s6) # Load First Enemy's Formation ID
  908. ROM:002F9E40 li $s6, 0xFFFF # s6 = FFFF
  909. ROM:002F9E44 beq $s5, $s6, loc_2FA10C # Branch if an Enemy isn't present
  910. ROM:002F9E48 nop
  911. ROM:002F9E4C
  912. ROM:002F9E4C loc_2F9E4C: # CODE XREF: sub_2F98E0:loc_2FA10Cj
  913. ROM:002F9E4C lw $s5, 0($t7) # Load Pointer to Second Enemy's Formation Data
  914. ROM:002F9E50 li $t7, 1
  915. ROM:002F9E54 sb $t7, 0($s1) # Store Slot 2 Available = True
  916. ROM:002F9E58 lbu $t7, 0($s5) # Load Second Enemy's Encounter Rate
  917. ROM:002F9E5C blez $t7, loc_2FA114 # Branch if Encounter Rate <= 0
  918. ROM:002F9E60 nop
  919. ROM:002F9E64 lhu $s5, 2($s5) # Load Second Enemy's Formation ID
  920. ROM:002F9E68 li $t7, 0xFFFF # t7 = FFFF
  921. ROM:002F9E6C beq $s5, $t7, loc_2FA114 # Branch if an Enemy isn't present
  922. ROM:002F9E70 nop
  923. ROM:002F9E74
  924. ROM:002F9E74 loc_2F9E74: # CODE XREF: sub_2F98E0:loc_2FA114j
  925. ROM:002F9E74 lw $t7, 0($t5) # Load Pointer to Third Enemy's Formation Data
  926. ROM:002F9E78 li $t5, 1
  927. ROM:002F9E7C sb $t5, 0($t6) # Store Slot 3 Available = True
  928. ROM:002F9E80 lbu $t5, 0($t7) # Load Third Enemy's Encounter Rate
  929. ROM:002F9E84 blez $t5, loc_2FA11C # Branch if Encounter Rate <= 0
  930. ROM:002F9E88 nop
  931. ROM:002F9E8C lhu $t7, 2($t7) # Load Third Enemy's Formation ID
  932. ROM:002F9E90 li $t5, 0xFFFF # t5 = FFFF
  933. ROM:002F9E94 beq $t7, $t5, loc_2FA11C # Branch if an Enemy isn't present
  934. ROM:002F9E98 nop
  935. ROM:002F9E9C
  936. ROM:002F9E9C loc_2F9E9C: # CODE XREF: sub_2F98E0:loc_2FA11Cj
  937. ROM:002F9E9C lw $t5, 0($t3) # Load Pointer to Fourth Enemy's Formation Data
  938. ROM:002F9EA0 li $t3, 1
  939. ROM:002F9EA4 sb $t3, 0($t4) # Store Slot 4 Available = True
  940. ROM:002F9EA8 lbu $t3, 0($t5) # Load Fourth Enemy's Encounter Rate
  941. ROM:002F9EAC blez $t3, loc_2FA124 # Branch if Encounter Rate <= 0
  942. ROM:002F9EB0 nop
  943. ROM:002F9EB4 lhu $t5, 2($t5) # Load Fourth Enemy's Formation ID
  944. ROM:002F9EB8 li $t3, 0xFFFF # t3 = FFFF
  945. ROM:002F9EBC beq $t5, $t3, loc_2FA124 # Branch if an Enemy isn't present
  946. ROM:002F9EC0 nop
  947. ROM:002F9EC4
  948. ROM:002F9EC4 loc_2F9EC4: # CODE XREF: sub_2F98E0:loc_2FA124j
  949. ROM:002F9EC4 lw $t3, 0($t1) # Load Pointer to Fifth Enemy's Formation Data
  950. ROM:002F9EC8 li $t1, 1
  951. ROM:002F9ECC sb $t1, 0($t2) # Store Slot 5 Available = True
  952. ROM:002F9ED0 lbu $t1, 0($t3) # Load Fifth Enemy's Encounter Rate
  953. ROM:002F9ED4 blez $t1, loc_2FA12C # Branch if Encounter Rate <= 0
  954. ROM:002F9ED8 nop
  955. ROM:002F9EDC lhu $t3, 2($t3) # Load Fifth Enemy's Formation ID
  956. ROM:002F9EE0 li $t1, 0xFFFF # t1 = FFFF
  957. ROM:002F9EE4 beq $t3, $t1, loc_2FA12C # Branch if an Enemy isn't present
  958. ROM:002F9EE8 nop
  959. ROM:002F9EEC
  960. ROM:002F9EEC loc_2F9EEC: # CODE XREF: sub_2F98E0:loc_2FA12Cj
  961. ROM:002F9EEC lw $t1, 0($a3) # Load Pointer to Sixth Enemy's Formation Data
  962. ROM:002F9EF0 li $a3, 1
  963. ROM:002F9EF4 sb $a3, 0($t0) # Store Slot 6 Available = True
  964. ROM:002F9EF8 lbu $a3, 0($t1) # Load Sixth Enemy's Encounter Rate
  965. ROM:002F9EFC blez $a3, loc_2FA134 # Branch if Encounter Rate <= 0
  966. ROM:002F9F00 nop
  967. ROM:002F9F04 lhu $t1, 2($t1) # Load Sixth Enemy's Formation ID
  968. ROM:002F9F08 li $a3, 0xFFFF # a3 = FFFF
  969. ROM:002F9F0C beq $t1, $a3, loc_2FA134 # Branch if an Enemy isn't present
  970. ROM:002F9F10 nop
  971. ROM:002F9F14
  972. ROM:002F9F14 loc_2F9F14: # CODE XREF: sub_2F98E0:loc_2FA134j
  973. ROM:002F9F14 lw $a3, 0($a1) # Load Pointer to Seventh Enemy's Formation Data
  974. ROM:002F9F18 li $a1, 1
  975. ROM:002F9F1C sb $a1, 0($a2) # Store Slot 7 Available = True
  976. ROM:002F9F20 lbu $a1, 0($a3) # Load Seventh Enemy's Encounter Rate
  977. ROM:002F9F24 blez $a1, loc_2FA13C # Branch if Encounter Rate <= 0
  978. ROM:002F9F28 nop
  979. ROM:002F9F2C lhu $a3, 2($a3) # Load Seventh Enemy's Formation ID
  980. ROM:002F9F30 li $a1, 0xFFFF # a1 = FFFF
  981. ROM:002F9F34 beq $a3, $a1, loc_2FA13C # Branch if an Enemy isn't present
  982. ROM:002F9F38 nop
  983. ROM:002F9F3C
  984. ROM:002F9F3C loc_2F9F3C: # CODE XREF: sub_2F98E0:loc_2FA13Cj
  985. ROM:002F9F3C lw $a2, 0x220+var_220($fp) # Load Pointer to Eighth Enemy's Formation Data
  986. ROM:002F9F40 li $a1, 1
  987. ROM:002F9F44 sb $a1, 0($a0) # Store Slot 8 Available = True
  988. ROM:002F9F48 lbu $a1, 0($a2) # Load Eighth Enemy's Encounter Rate
  989. ROM:002F9F4C blez $a1, loc_2FA144 # Branch if Encounter Rate <= 0
  990. ROM:002F9F50 nop
  991. ROM:002F9F54 lhu $a2, 2($a2) # Load Eighth Enemy's Formation ID
  992. ROM:002F9F58 li $a1, 0xFFFF # a1 = FFFF
  993. ROM:002F9F5C beq $a2, $a1, loc_2FA144 # Branch if an Enemy isn't present
  994. ROM:002F9F60 nop
  995. ROM:002F9F64
  996. ROM:002F9F64 loc_2F9F64: # CODE XREF: sub_2F98E0:loc_2FA144j
  997. ROM:002F9F64 addiu $a0, $sp, 0x220+var_110 # a0 = Pointer to Ninth Enemy's Formation Data
  998. ROM:002F9F68 lw $a1, 0($a0) # Load Ninth Enemy's Encounter Rate
  999. ROM:002F9F6C li $a0, 1
  1000. ROM:002F9F70 sb $a0, 0($v1) # Store Slot 9 Available = True
  1001. ROM:002F9F74 lbu $a0, 0($a1) # Load Ninth Enemy's Encounter Rate
  1002. ROM:002F9F78 blez $a0, loc_2FA14C # Branch if Encounter Rate <= 0
  1003. ROM:002F9F7C nop
  1004. ROM:002F9F80 lhu $a1, 2($a1) # Load Ninth Enemy's Formation ID
  1005. ROM:002F9F84 li $a0, 0xFFFF # a0 = FFFF
  1006. ROM:002F9F88 beq $a1, $a0, loc_2FA14C # Branch if an Enemy isn't present
  1007. ROM:002F9F8C nop
  1008. ROM:002F9F90
  1009. ROM:002F9F90 loc_2F9F90: # CODE XREF: sub_2F98E0:loc_2FA14Cj
  1010. ROM:002F9F90 lw $a0, 0($s7) # Load Tenth Enemy's Formation Data
  1011. ROM:002F9F94 li $v1, 1
  1012. ROM:002F9F98 sb $v1, 0($v0) # Store Slot 10 Available = True
  1013. ROM:002F9F9C lbu $v1, 0($a0) # Load Tenth Enemy's Encounter Rate
  1014. ROM:002F9FA0 blez $v1, loc_2FA154 # Branch if Encounter Rate <= 0
  1015. ROM:002F9FA4 nop
  1016. ROM:002F9FA8 lhu $a0, 2($a0) # Load Tenth Enemy's Formation ID
  1017. ROM:002F9FAC li $v1, 0xFFFF # v1 = FFFF
  1018. ROM:002F9FB0 beq $a0, $v1, loc_2FA154 # Branch if an Enemy isn't present
  1019. ROM:002F9FB4 nop
  1020. ROM:002F9FB8
  1021. ROM:002F9FB8 loc_2F9FB8: # CODE XREF: sub_2F98E0:loc_2FA154j
  1022. ROM:002F9FB8 lw $v1, 0($s3) # Load Pointer to Special Formation Data
  1023. ROM:002F9FBC li $v0, 1
  1024. ROM:002F9FC0 sb $v0, 0($s4) # Store Special Formation Available = True
  1025. ROM:002F9FC4 lbu $v0, 0($v1) # Load Special Formation's Encounter Rate
  1026. ROM:002F9FC8 blez $v0, loc_2FA15C # Branch if Encounter Rate <= 0
  1027. ROM:002F9FCC nop
  1028. ROM:002F9FD0 lbu $v1, 1($v1) # Load Special Formation's ID
  1029. ROM:002F9FD4 li $v0, 0xFF # v0 = FF
  1030. ROM:002F9FD8 beq $v1, $v0, loc_2FA15C # Branch if a Special Formation isn't present
  1031. ROM:002F9FDC nop
  1032. ROM:002F9FE0
  1033. ROM:002F9FE0 loc_2F9FE0: # CODE XREF: sub_2F98E0:loc_2FA15Cj
  1034. ROM:002F9FE0 lw $v1, 0x1C($s2) # Load Formation's ID
  1035. ROM:002F9FE4 lw $v0, 4($s2) # Load Formation Data Pointer
  1036. ROM:002F9FE8 sll $v1, 6 # ID * 64
  1037. ROM:002F9FEC addu $v0, $v1 # v0 = Formation's Data Pointer
  1038. ROM:002F9FF0 lbu $s1, 3($v0) # Load 2 Group Rate
  1039. ROM:002F9FF4 lbu $s3, 4($v0) # Load 3 Group Rate
  1040. ROM:002F9FF8 addu $v0, $s1, $s3 # Total Rate = 2 Group Rate + 3 Group Rate
  1041. ROM:002F9FFC bnez $v0, loc_2FA00C # Branch if Total Rate != 0
  1042. ROM:002FA000 nop
  1043. ROM:002FA004 li $s3, 1 # 3 Group Rate = 1
  1044. ROM:002FA008 daddu $s1, $s3, $0 # 2 Group Rate = 1
  1045. ROM:002FA00C
  1046. ROM:002FA00C loc_2FA00C: # CODE XREF: sub_2F98E0+71Cj
  1047. ROM:002FA00C jal Random_Number_Generator
  1048. ROM:002FA010 nop
  1049. ROM:002FA014 addu $v1, $s1, $s3 # v1 = Total Rate
  1050. ROM:002FA018 bnez $v1, loc_2FA024 # Useless divide by 0 check
  1051. ROM:002FA01C div $v0, $v1 # Random / Total Rate
  1052. ROM:002FA020 break 7
  1053. ROM:002FA024
  1054. ROM:002FA024 loc_2FA024: # CODE XREF: sub_2F98E0+738j
  1055. ROM:002FA024 mfhi $v1 # Multi Group Mod = Random % Total Rate
  1056. ROM:002FA028 slt $1, $v1, $s1
  1057. ROM:002FA02C beqzl $1, loc_2FA038 # Branch if Multi Group Mod >= 2 Group Rate
  1058. ROM:002FA030 li $s1, 3 # Groups = 3
  1059. ROM:002FA034 li $s1, 2 # Groups = 2
  1060. ROM:002FA038
  1061. ROM:002FA038 loc_2FA038: # CODE XREF: sub_2F98E0+74Cj
  1062. ROM:002FA038 lw $s4, -0x62C4($gp) # Load Stack Pointer 1
  1063. ROM:002FA03C daddu $s3, $0, $0 # Encounter Rate Sum = 0
  1064. ROM:002FA040 b loc_2FA060
  1065. ROM:002FA044 li $s5, 7 # Allowed Types = 7 (Set 1, Set 2, Special Formation)
  1066. ROM:002FA048 # ---------------------------------------------------------------------------
  1067. ROM:002FA048
  1068. ROM:002FA048 loc_2FA048: # CODE XREF: sub_2F98E0:loc_2FA060j
  1069. ROM:002FA048 daddu $a0, $s4, $0 # a0 = Next Stack Pointer
  1070. ROM:002FA04C lw $t9, 8($t9) # Load X Code Pointer 3
  1071. ROM:002FA050 jalr $t9 # Jump to X's Enemy Encounter Rate Calculation
  1072. ROM:002FA054 li $a1, 7 # Allowed Types = 7 (Set 1, Set 2, Special Formation)
  1073. ROM:002FA058 lw $s4, 4($s4) # Load new Next Stack Pointer
  1074. ROM:002FA05C addu $s3, $v0 # Encounter Rate Sum += Encounter Rate
  1075. ROM:002FA060
  1076. ROM:002FA060 loc_2FA060: # CODE XREF: sub_2F98E0+760j
  1077. ROM:002FA060 bnezl $s4, loc_2FA048 # Branch if Next Stack Pointer exists
  1078. ROM:002FA064 lw $t9, 0($s4) # Load Pointer to X Code Pointers, if branching
  1079. ROM:002FA068 bnez $s3, loc_2FA164 # Branch if Encounter Rate Sum != 0
  1080. ROM:002FA06C nop
  1081. ROM:002FA070 li $a1, 1
  1082. ROM:002FA074 lui $v1, 0x45 # 'E'
  1083. ROM:002FA078 sw $a1, dword_451680 # Store Number of Groups = 1
  1084. ROM:002FA07C lui $a0, 0x45 # 'E'
  1085. ROM:002FA080 lui $v1, 0x45 # 'E'
  1086. ROM:002FA084 sw $0, -0x62C4($gp) # Store Temp Global Stack Pointer = 0
  1087. ROM:002FA088 sw $a1, off_451684 # Store Enemy ID 1 = 1
  1088. ROM:002FA08C b loc_2FA4B8
  1089. ROM:002FA090 sw $a1, dword_451688 # Store Enemy Quantity 1 = 1
  1090. ROM:002FA094 # ---------------------------------------------------------------------------
  1091. ROM:002FA094
  1092. ROM:002FA094 loc_2FA094: # CODE XREF: sub_2F98E0+9Cj
  1093. ROM:002FA094 addiu $v0, $sp, 0x220+var_40
  1094. ROM:002FA098 b loc_2F99B0
  1095. ROM:002FA09C sw $v0, -0x62C4($gp)
  1096. ROM:002FA0A0 # ---------------------------------------------------------------------------
  1097. ROM:002FA0A0
  1098. ROM:002FA0A0 loc_2FA0A0: # CODE XREF: sub_2F98E0+114j
  1099. ROM:002FA0A0 addiu $v0, $sp, 0x220+var_60
  1100. ROM:002FA0A4 b loc_2F9A28
  1101. ROM:002FA0A8 sw $v0, -0x62C4($gp)
  1102. ROM:002FA0AC # ---------------------------------------------------------------------------
  1103. ROM:002FA0AC
  1104. ROM:002FA0AC loc_2FA0AC: # CODE XREF: sub_2F98E0+18Cj
  1105. ROM:002FA0AC addiu $v0, $sp, 0x220+var_80
  1106. ROM:002FA0B0 b loc_2F9AA0
  1107. ROM:002FA0B4 sw $v0, -0x62C4($gp)
  1108. ROM:002FA0B8 # ---------------------------------------------------------------------------
  1109. ROM:002FA0B8
  1110. ROM:002FA0B8 loc_2FA0B8: # CODE XREF: sub_2F98E0+204j
  1111. ROM:002FA0B8 addiu $v0, $sp, 0x220+var_A0
  1112. ROM:002FA0BC b loc_2F9B18
  1113. ROM:002FA0C0 sw $v0, -0x62C4($gp)
  1114. ROM:002FA0C4 # ---------------------------------------------------------------------------
  1115. ROM:002FA0C4
  1116. ROM:002FA0C4 loc_2FA0C4: # CODE XREF: sub_2F98E0+27Cj
  1117. ROM:002FA0C4 addiu $v0, $sp, 0x220+var_C0
  1118. ROM:002FA0C8 b loc_2F9B90
  1119. ROM:002FA0CC sw $v0, -0x62C4($gp)
  1120. ROM:002FA0D0 # ---------------------------------------------------------------------------
  1121. ROM:002FA0D0
  1122. ROM:002FA0D0 loc_2FA0D0: # CODE XREF: sub_2F98E0+2F4j
  1123. ROM:002FA0D0 addiu $v0, $sp, 0x220+var_E0
  1124. ROM:002FA0D4 b loc_2F9C08
  1125. ROM:002FA0D8 sw $v0, -0x62C4($gp)
  1126. ROM:002FA0DC # ---------------------------------------------------------------------------
  1127. ROM:002FA0DC
  1128. ROM:002FA0DC loc_2FA0DC: # CODE XREF: sub_2F98E0+36Cj
  1129. ROM:002FA0DC addiu $v0, $sp, 0x220+var_100
  1130. ROM:002FA0E0 b loc_2F9C80
  1131. ROM:002FA0E4 sw $v0, -0x62C4($gp)
  1132. ROM:002FA0E8 # ---------------------------------------------------------------------------
  1133. ROM:002FA0E8
  1134. ROM:002FA0E8 loc_2FA0E8: # CODE XREF: sub_2F98E0+3E4j
  1135. ROM:002FA0E8 addiu $s3, $sp, 0x220+var_120
  1136. ROM:002FA0EC b loc_2F9CF8
  1137. ROM:002FA0F0 sw $s3, -0x62C4($gp)
  1138. ROM:002FA0F4 # ---------------------------------------------------------------------------
  1139. ROM:002FA0F4
  1140. ROM:002FA0F4 loc_2FA0F4: # CODE XREF: sub_2F98E0+45Cj
  1141. ROM:002FA0F4 addiu $s3, $sp, 0x220+var_140
  1142. ROM:002FA0F8 b loc_2F9D70
  1143. ROM:002FA0FC sw $s3, -0x62C4($gp)
  1144. ROM:002FA100 # ---------------------------------------------------------------------------
  1145. ROM:002FA100
  1146. ROM:002FA100 loc_2FA100: # CODE XREF: sub_2F98E0+4D4j
  1147. ROM:002FA100 addiu $s3, $sp, 0x220+var_180
  1148. ROM:002FA104 b loc_2F9DE8
  1149. ROM:002FA108 sw $s3, -0x62C4($gp)
  1150. ROM:002FA10C # ---------------------------------------------------------------------------
  1151. ROM:002FA10C
  1152. ROM:002FA10C loc_2FA10C: # CODE XREF: sub_2F98E0+554j
  1153. ROM:002FA10C # sub_2F98E0+564j
  1154. ROM:002FA10C b loc_2F9E4C
  1155. ROM:002FA110 sb $0, 0($t8) # Store Slot 1 Available = False
  1156. ROM:002FA114 # ---------------------------------------------------------------------------
  1157. ROM:002FA114
  1158. ROM:002FA114 loc_2FA114: # CODE XREF: sub_2F98E0+57Cj
  1159. ROM:002FA114 # sub_2F98E0+58Cj
  1160. ROM:002FA114 b loc_2F9E74
  1161. ROM:002FA118 sb $0, 0($s1) # Store Slot 2 Available = False
  1162. ROM:002FA11C # ---------------------------------------------------------------------------
  1163. ROM:002FA11C
  1164. ROM:002FA11C loc_2FA11C: # CODE XREF: sub_2F98E0+5A4j
  1165. ROM:002FA11C # sub_2F98E0+5B4j
  1166. ROM:002FA11C b loc_2F9E9C
  1167. ROM:002FA120 sb $0, 0($t6) # Store Slot 3 Available = False
  1168. ROM:002FA124 # ---------------------------------------------------------------------------
  1169. ROM:002FA124
  1170. ROM:002FA124 loc_2FA124: # CODE XREF: sub_2F98E0+5CCj
  1171. ROM:002FA124 # sub_2F98E0+5DCj
  1172. ROM:002FA124 b loc_2F9EC4
  1173. ROM:002FA128 sb $0, 0($t4) # Store Slot 4 Available = False
  1174. ROM:002FA12C # ---------------------------------------------------------------------------
  1175. ROM:002FA12C
  1176. ROM:002FA12C loc_2FA12C: # CODE XREF: sub_2F98E0+5F4j
  1177. ROM:002FA12C # sub_2F98E0+604j
  1178. ROM:002FA12C b loc_2F9EEC
  1179. ROM:002FA130 sb $0, 0($t2) # Store Slot 5 Available = False
  1180. ROM:002FA134 # ---------------------------------------------------------------------------
  1181. ROM:002FA134
  1182. ROM:002FA134 loc_2FA134: # CODE XREF: sub_2F98E0+61Cj
  1183. ROM:002FA134 # sub_2F98E0+62Cj
  1184. ROM:002FA134 b loc_2F9F14
  1185. ROM:002FA138 sb $0, 0($t0) # Store Slot 6 Available = False
  1186. ROM:002FA13C # ---------------------------------------------------------------------------
  1187. ROM:002FA13C
  1188. ROM:002FA13C loc_2FA13C: # CODE XREF: sub_2F98E0+644j
  1189. ROM:002FA13C # sub_2F98E0+654j
  1190. ROM:002FA13C b loc_2F9F3C
  1191. ROM:002FA140 sb $0, 0($a2) # Store Slot 7 Available = False
  1192. ROM:002FA144 # ---------------------------------------------------------------------------
  1193. ROM:002FA144
  1194. ROM:002FA144 loc_2FA144: # CODE XREF: sub_2F98E0+66Cj
  1195. ROM:002FA144 # sub_2F98E0+67Cj
  1196. ROM:002FA144 b loc_2F9F64
  1197. ROM:002FA148 sb $0, 0($a0) # Store Slot 8 Available = False
  1198. ROM:002FA14C # ---------------------------------------------------------------------------
  1199. ROM:002FA14C
  1200. ROM:002FA14C loc_2FA14C: # CODE XREF: sub_2F98E0+698j
  1201. ROM:002FA14C # sub_2F98E0+6A8j
  1202. ROM:002FA14C b loc_2F9F90
  1203. ROM:002FA150 sb $0, 0($v1) # Store Slot 9 Available = False
  1204. ROM:002FA154 # ---------------------------------------------------------------------------
  1205. ROM:002FA154
  1206. ROM:002FA154 loc_2FA154: # CODE XREF: sub_2F98E0+6C0j
  1207. ROM:002FA154 # sub_2F98E0+6D0j
  1208. ROM:002FA154 b loc_2F9FB8
  1209. ROM:002FA158 sb $0, 0($v0) # Store Slot 10 Available = False
  1210. ROM:002FA15C # ---------------------------------------------------------------------------
  1211. ROM:002FA15C
  1212. ROM:002FA15C loc_2FA15C: # CODE XREF: sub_2F98E0+6E8j
  1213. ROM:002FA15C # sub_2F98E0+6F8j
  1214. ROM:002FA15C b loc_2F9FE0
  1215. ROM:002FA160 sb $0, 0($s4) # Store Special Formation Available = False
  1216. ROM:002FA164 # ---------------------------------------------------------------------------
  1217. ROM:002FA164
  1218. ROM:002FA164 loc_2FA164: # CODE XREF: sub_2F98E0+788j
  1219. ROM:002FA164 jal Random_Number_Generator
  1220. ROM:002FA168 nop
  1221. ROM:002FA16C bnez $s3, loc_2FA178 # Divide by 0 check
  1222. ROM:002FA170 div $v0, $s3 # Random / Encounter Rate Sum
  1223. ROM:002FA174 break 7
  1224. ROM:002FA178
  1225. ROM:002FA178 loc_2FA178: # CODE XREF: sub_2F98E0+88Cj
  1226. ROM:002FA178 mfhi $v0 # Encounter Mod = Random % Encounter Rate Sum
  1227. ROM:002FA17C lw $s3, -0x62C4($gp) # Load Stack Pointer 1
  1228. ROM:002FA180 b loc_2FA23C
  1229. ROM:002FA184 addiu $s4, $v0, 1 # Encounter Mod += 1 (rand(1..Encounter Rate Sum))
  1230. ROM:002FA188 # ---------------------------------------------------------------------------
  1231. ROM:002FA188
  1232. ROM:002FA188 loc_2FA188: # CODE XREF: sub_2F98E0:loc_2FA23Cj
  1233. ROM:002FA188 daddu $a0, $s3, $0 # a0 = Next Stack Pointer
  1234. ROM:002FA18C lw $t9, 8($t9) # Load X Code Pointer 3
  1235. ROM:002FA190 jalr $t9 # Jump to X's Enemy Encounter Rate Calculation
  1236. ROM:002FA194 daddu $a1, $s5, $0 # a1 = Allowed Types
  1237. ROM:002FA198 slt $v0, $s4
  1238. ROM:002FA19C bnezl $v0, loc_2FA224 # Branch if Encounter Rate < Encounter Mod
  1239. ROM:002FA1A0 lw $t9, 0($s3) # Load Pointer to X Code Pointers
  1240. ROM:002FA1A4 lw $t9, 0($s3) # Load Pointer to X Code Pointers (herpdederp)
  1241. ROM:002FA1A8 lw $t9, 0xC($t9) # Load X Code Pointer 4
  1242. ROM:002FA1AC jalr $t9 # Jump to Current Groups Incrementing (Special calculates formation too)
  1243. ROM:002FA1B0 daddu $a0, $s3, $0 # a0 = Next Stack Pointer
  1244. ROM:002FA1B4 daddu $s0, $v0, $0 # s0 = Allowed Types
  1245. ROM:002FA1B8 li $v0, 1
  1246. ROM:002FA1BC bnel $s0, $v0, loc_2FA23C # Branch if Allowed Types != Set 1
  1247. ROM:002FA1C0 daddu $s3, $0, $0 # Next Stack Pointer = 0
  1248. ROM:002FA1C4 addiu $s1, -1 # Groups --
  1249. ROM:002FA1C8 beqzl $s1, loc_2FA23C # Branch if Groups = 0
  1250. ROM:002FA1CC daddu $s3, $0, $0 # Next Stack Pointer = 0, if branching
  1251. ROM:002FA1D0 lw $s3, -0x62C4($gp) # Load Stack Pointer 1
  1252. ROM:002FA1D4 daddu $s5, $v0, $0 # Allowed Types = Set 1
  1253. ROM:002FA1D8 b loc_2FA1F8
  1254. ROM:002FA1DC daddu $s4, $0, $0 # Encounter Rate Sum = 0
  1255. ROM:002FA1E0 # ---------------------------------------------------------------------------
  1256. ROM:002FA1E0
  1257. ROM:002FA1E0 loc_2FA1E0: # CODE XREF: sub_2F98E0:loc_2FA1F8j
  1258. ROM:002FA1E0 daddu $a0, $s3, $0 # a0 = Next Stack Pointer
  1259. ROM:002FA1E4 lw $t9, 8($t9) # Load Set 1 Code Pointer 3
  1260. ROM:002FA1E8 jalr $t9 # Jump to Set 1's Enemy Encounter Rate Calculaation
  1261. ROM:002FA1EC li $a1, 1 # Allowed Types = Set 1
  1262. ROM:002FA1F0 lw $s3, 4($s3) # Load new Next Stack Pointer
  1263. ROM:002FA1F4 addu $s4, $v0 # Encounter Rate Sum += Encounter Rate
  1264. ROM:002FA1F8
  1265. ROM:002FA1F8 loc_2FA1F8: # CODE XREF: sub_2F98E0+8F8j
  1266. ROM:002FA1F8 bnezl $s3, loc_2FA1E0 # Branch if Next Stack Pointer Exists
  1267. ROM:002FA1FC lw $t9, 0($s3) # Load Pointer to Set 1 Code Pointers
  1268. ROM:002FA200 jal Random_Number_Generator
  1269. ROM:002FA204 nop
  1270. ROM:002FA208 bnez $s4, loc_2FA214 # Branch if Encounter Rate Sum != 0
  1271. ROM:002FA20C div $v0, $s4 # Random / Encounter Rate Sum
  1272. ROM:002FA210 break 7
  1273. ROM:002FA214
  1274. ROM:002FA214 loc_2FA214: # CODE XREF: sub_2F98E0+928j
  1275. ROM:002FA214 mfhi $v0 # Encounter Mod = Random % Encounter Rate Sum
  1276. ROM:002FA218 lw $s3, -0x62C4($gp) # Load Stack Pointer 1
  1277. ROM:002FA21C b loc_2FA23C
  1278. ROM:002FA220 addiu $s4, $v0, 1 # Encounter Mod += 1 (rand(1..Encounter Rate Sum))
  1279. ROM:002FA224 # ---------------------------------------------------------------------------
  1280. ROM:002FA224
  1281. ROM:002FA224 loc_2FA224: # CODE XREF: sub_2F98E0+8BCj
  1282. ROM:002FA224 daddu $a0, $s3, $0 # a0 = Next Stack Pointer
  1283. ROM:002FA228 lw $t9, 8($t9) # Load X Code Pointer 3
  1284. ROM:002FA22C jalr $t9 # Jump to X's Enemy Encounter Rate Calculation
  1285. ROM:002FA230 daddu $a1, $s5, $0 # a1 = Allowed Types
  1286. ROM:002FA234 lw $s3, 4($s3) # Load new Next Stack Pointer
  1287. ROM:002FA238 subu $s4, $v0 # Encounter Mod -= Encounter Rate
  1288. ROM:002FA23C
  1289. ROM:002FA23C loc_2FA23C: # CODE XREF: sub_2F98E0+8A0j
  1290. ROM:002FA23C # sub_2F98E0+8DCj ...
  1291. ROM:002FA23C bnezl $s3, loc_2FA188 # Branch if Next Stack Pointer exists
  1292. ROM:002FA240 lw $t9, 0($s3) # Load Pointer to X Code Pointers
  1293. ROM:002FA244 lw $s1, -0x62C4($gp) # Load Stack Pointer 1
  1294. ROM:002FA248 lui $v0, 0x45 # 'E'
  1295. ROM:002FA24C b loc_2FA2DC
  1296. ROM:002FA250 sw $0, dword_451680 # Store Number of Groups = 0
  1297. ROM:002FA254 # ---------------------------------------------------------------------------
  1298. ROM:002FA254
  1299. ROM:002FA254 loc_2FA254: # CODE XREF: sub_2F98E0:loc_2FA2DCj
  1300. ROM:002FA254 b loc_2FA2C8
  1301. ROM:002FA258 daddu $s3, $0, $0 # Counter = 0
  1302. ROM:002FA25C # ---------------------------------------------------------------------------
  1303. ROM:002FA25C
  1304. ROM:002FA25C loc_2FA25C: # CODE XREF: sub_2F98E0+9F0j
  1305. ROM:002FA25C lw $t9, 0x10($t9) # Load X's Code Pointer 5
  1306. ROM:002FA260 jalr $t9 # Load X's Enemy ID
  1307. ROM:002FA264 daddu $a0, $s1, $0 # a0 = Next Stack Pointer
  1308. ROM:002FA268 lui $v1, 0x45 # 'E'
  1309. ROM:002FA26C lui $a1, 0x45 # 'E'
  1310. ROM:002FA270 lw $v1, dword_451680 # Load Number of Groups
  1311. ROM:002FA274 la $a1, dword_451680
  1312. ROM:002FA278 sll $v1, 3 # Number of Groups * 8
  1313. ROM:002FA27C addu $v1, $a1, $v1 # v1 = Current Group's Data Pointer
  1314. ROM:002FA280 sw $v0, 4($v1) # Store Enemy ID
  1315. ROM:002FA284 lw $t9, 0($s1) # Load Pointer to X's Code Pointers
  1316. ROM:002FA288 lw $t9, 0x14($t9) # Load X's Code Pointer 6
  1317. ROM:002FA28C jalr $t9 # Load X's Quantity Mod
  1318. ROM:002FA290 daddu $a0, $s1, $0 # a0 = Next Stack Pointer
  1319. ROM:002FA294 lui $v1, 0x45 # 'E'
  1320. ROM:002FA298 lui $a1, 0x45 # 'E'
  1321. ROM:002FA29C lw $a2, dword_451680 # Load Number of Groups
  1322. ROM:002FA2A0 la $a1, dword_451680 # a1 = Pointer to Number of Groups
  1323. ROM:002FA2A4 lui $a0, 0x45 # 'E'
  1324. ROM:002FA2A8 addiu $s3, 1 # Counter ++
  1325. ROM:002FA2AC sll $a2, 3 # Number of Groups * 8
  1326. ROM:002FA2B0 lui $v1, 0x45 # 'E'
  1327. ROM:002FA2B4 addu $a1, $a2
  1328. ROM:002FA2B8 sw $v0, 8($a1) # Store Group's Quantity
  1329. ROM:002FA2BC lw $v0, dword_451680 # Load Number of Groups
  1330. ROM:002FA2C0 addiu $v0, 1 # Number of Groups ++
  1331. ROM:002FA2C4 sw $v0, dword_451680 # Store new Number of Groups
  1332. ROM:002FA2C8
  1333. ROM:002FA2C8 loc_2FA2C8: # CODE XREF: sub_2F98E0:loc_2FA254j
  1334. ROM:002FA2C8 lw $v0, 8($s1) # Load Slot's Current Groups
  1335. ROM:002FA2CC slt $v0, $s3, $v0
  1336. ROM:002FA2D0 bnezl $v0, loc_2FA25C # Branch if Counter < Current Groups
  1337. ROM:002FA2D4 lw $t9, 0($s1) # Load Pointer to X's Code Pointers
  1338. ROM:002FA2D8 lw $s1, 4($s1) # Load new Next Stack Pointer
  1339. ROM:002FA2DC
  1340. ROM:002FA2DC loc_2FA2DC: # CODE XREF: sub_2F98E0+96Cj
  1341. ROM:002FA2DC bnez $s1, loc_2FA254 # Branch if Next Stack Pointer != 0
  1342. ROM:002FA2E0 nop
  1343. ROM:002FA2E4 li $v0, 4
  1344. ROM:002FA2E8 beq $s0, $v0, loc_2FA3B0 # Branch if Allowed Types = Special Formation
  1345. ROM:002FA2EC nop
  1346. ROM:002FA2F0 lw $v0, dword_451680 # Load Number of Groups
  1347. ROM:002FA2F8 slti $v0, 2
  1348. ROM:002FA2FC bnez $v0, loc_2FA3B0 # Branch if Number of Groups < 1
  1349. ROM:002FA300 nop
  1350. ROM:002FA304 jal Random_Number_Generator
  1351. ROM:002FA308 nop
  1352. ROM:002FA30C lw $v1, dword_451680 # Load Number of Groups
  1353. ROM:002FA314 bnez $v1, loc_2FA320 # Branch if Number of Groups != 0
  1354. ROM:002FA318 div $v0, $v1 # Random / Number of Groups
  1355. ROM:002FA31C break 7
  1356. ROM:002FA320
  1357. ROM:002FA320 loc_2FA320: # CODE XREF: sub_2F98E0+A34j
  1358. ROM:002FA320 b loc_2FA3A8
  1359. ROM:002FA324 mfhi $s3 # Group Mod = Random % Number of Groups
  1360. ROM:002FA328 # ---------------------------------------------------------------------------
  1361. ROM:002FA328
  1362. ROM:002FA328 loc_2FA328: # CODE XREF: sub_2F98E0:loc_2FA3A8j
  1363. ROM:002FA328 jal Random_Number_Generator
  1364. ROM:002FA32C nop
  1365. ROM:002FA330 lw $v1, dword_451680 # Load Number of Groups
  1366. ROM:002FA338 bnez $v1, loc_2FA344 # Branch if Number of Groups != 0
  1367. ROM:002FA33C div $v0, $v1 # Random / Number of Groups
  1368. ROM:002FA340 break 7
  1369. ROM:002FA344
  1370. ROM:002FA344 loc_2FA344: # CODE XREF: sub_2F98E0+A58j
  1371. ROM:002FA344 jal Random_Number_Generator
  1372. ROM:002FA348 mfhi $s1 # s1 = Group Mod 2
  1373. ROM:002FA34C lw $v1, dword_451680 # Load Number of Groups
  1374. ROM:002FA354 bnez $v1, loc_2FA360 # Branch if Number of Groups != 0
  1375. ROM:002FA358 div $v0, $v1 # Random / Number of Groups
  1376. ROM:002FA35C break 7
  1377. ROM:002FA360
  1378. ROM:002FA360 loc_2FA360: # CODE XREF: sub_2F98E0+A74j
  1379. ROM:002FA360 mfhi $v0 # v0 = Group Mod 3
  1380. ROM:002FA364 beq $s1, $v0, loc_2FA3A8 # Branch if Group Mod 2 = Group Mod 3
  1381. ROM:002FA368 nop
  1382. ROM:002FA36C lui $v1, 0x45 # 'E'
  1383. ROM:002FA370 sll $a0, $s1, 3 # Group Mod 2 * 8
  1384. ROM:002FA374 la $v1, dword_451680 # v1 = Pointer to Number of Groups
  1385. ROM:002FA378 sll $v0, 3 # Group Mod 3 * 8
  1386. ROM:002FA37C addu $a2, $v1, $a0 # a2 = Group Mod 2 Pointer
  1387. ROM:002FA380 addiu $s3, -1 # Group Mod --
  1388. ROM:002FA384 addu $v1, $v0 # v1 = Group Mod 3 Pointer
  1389. ROM:002FA388 lw $a1, 4($a2) # Load Group A's Enemy ID
  1390. ROM:002FA38C lw $a0, 8($a2) # Load Group A's Quantity
  1391. ROM:002FA390 lw $v0, 4($v1) # Load Group B's Enemy ID
  1392. ROM:002FA394 sw $v0, 4($a2) # Store Group B's Enemy ID = Group A's Enemy ID
  1393. ROM:002FA398 lw $v0, 8($v1) # Load Group B's Quantity
  1394. ROM:002FA39C sw $v0, 8($a2) # Store Group B's Quantity = Group A's Quantity
  1395. ROM:002FA3A0 sw $a1, 4($v1) # Store Group A's Enemy ID = Group B's Enemy ID
  1396. ROM:002FA3A4 sw $a0, 8($v1) # Store Group A's Quantity = Group B's Quantity
  1397. ROM:002FA3A8
  1398. ROM:002FA3A8 loc_2FA3A8: # CODE XREF: sub_2F98E0:loc_2FA320j
  1399. ROM:002FA3A8 # sub_2F98E0+A84j
  1400. ROM:002FA3A8 bgtz $s3, loc_2FA328 # Branch if Group Mod > 0
  1401. ROM:002FA3AC nop # This is just for randomizing group order
  1402.  
  1403.  
  1404.  
  1405.  
  1406. gp-0x62c4 = Stack Pointer 1
  1407.  
  1408. NOTE: Subtract var_'s hex value from 0x220 to get the amount to add to the
  1409. stack pointer. Remember, loading/storing a value with a positive offset mod
  1410. moves towards var_0, since it's adding to a negative. This includes values
  1411. stored -> storing a word at var_10 would store down to var_0d.
  1412.  
  1413. var_10 = Pointer to First Enemy's Formation Data
  1414. var_14 = Available Flag
  1415. var_18 = Current Groups
  1416. var_1c = Next Stack Pointer = 0 -> Stack Pointer 4
  1417. var_20 = Pointer to Set 1 Code Pointers
  1418.  
  1419. var_30 = Pointer to Second Enemy's Formation Data
  1420. var_34 = Available Flag
  1421. var_38 = Current Groups
  1422. var_3c = Next Stack Pointer = 0 -> Stack Pointer 7
  1423. var_40 = Pointer to Default -> Set 1 Code Pointers
  1424.  
  1425. var_50 = Pointer to Third Enemy's Formation Data
  1426. var_54 = Available Flag
  1427. var_58 = Current Groups
  1428. var_5c = Next Stack Pointer = 0 -> Stack Pointer 10
  1429. var_60 = Pointer to Default -> Set 1 Code Pointers
  1430.  
  1431. var_70 = Pointer to Fourth Enemy's Formation Data
  1432. var_74 = Available Flag
  1433. var_78 = Current Groups
  1434. var_7c = Next Stack Pointer = 0 -> Stack Pointer 13
  1435. var_80 = Pointer to Default -> Set 1 Code Pointers
  1436.  
  1437. var_90 = Pointer to Fifth Enemy's Formation Data
  1438. var_94 = Available Flag
  1439. var_98 = Current Groups
  1440. var_9c = Next Stack Pointer = 0 -> Stack Pointer 16
  1441. var_a0 = Pointer to Default -> Set 1 Code Pointers
  1442.  
  1443. var_b0 = Pointer to Sixth Enemy's Formation Data
  1444. /First Special Group's Stack Data
  1445. var_b4 = Available Flag
  1446. var_b8 = Current Groups (0 if Special)
  1447. var_bc = Next Stack Pointer = 0 -> Stack Pointer 19
  1448. var_c0 = Pointer to Default -> Set 2 Code Pointers
  1449.  
  1450. var_d0 = Pointer to Seventh Enemy's Formation Data
  1451. /Second Special Group's Stack Data
  1452. var_d4 = Available Flag
  1453. var_d8 = Current Groups (0 if Special)
  1454. var_dc = Next Stack Pointer = 0 -> Stack Pointer 22
  1455. var_e0 = Pointer to Default -> Set 2 Code Pointers
  1456.  
  1457. var_f0 = Pointer to Eighth Enemy's Formation Data
  1458. /Third Special Group's Stack Data
  1459. var_f4 = Available Flag
  1460. var_f8 = Current Groups (0 if Special)
  1461. var_fc = Next Stack Pointer = 0 -> Stack Pointer 25
  1462. var_100 = Pointer to Default -> Set 2 Code Pointers
  1463.  
  1464. var_110 = Pointer to Ninth Enemy's Formation Data
  1465. /Fourth Special Group's Stack Data
  1466. var_114 = Available Flag
  1467. var_118 = Current Groups (0 if Special)
  1468. var_11c = Next Stack Pointer = 0 -> Stack Pointer 28
  1469. var_120 = Pointer to Default -> Set 2 Code Pointers
  1470.  
  1471. var_130 = Pointer to Tenth Enemy's Formation Data
  1472. var_134 = Available Flag
  1473. var_138 = Current Groups
  1474. var_13c = Next Stack Pointer = 0 -> Stack Pointer 31
  1475. var_140 = Pointer to Default -> Set 2 Code Pointers
  1476.  
  1477. var_150 = Stack Pointer 37
  1478. var_154 = Stack Pointer 36
  1479. var_158 = Stack Pointer 35
  1480. var_15c = Stack Pointer 34
  1481.  
  1482. var_15e = Enemy ID 4
  1483. var_15f = Quantity 4 (+1 for total; basically extra enemy quantity)
  1484. var_160 = Encounter Rate 4
  1485.  
  1486. var_162 = Enemy ID 3
  1487. var_163 = Quantity 3
  1488. var_164 = Encounter Rate 3
  1489.  
  1490. var_166 = Enemy ID 2
  1491. var_167 = Quantity 2
  1492. var_168 = Encounter Rate 2
  1493.  
  1494. var_16a = Enemy ID 1
  1495. var_16b = Quantity 1
  1496. var_16c = Encounter Rate 1
  1497.  
  1498. var_170 = Pointer to Special Formation Data
  1499. var_174 = Available Flag
  1500. var_178 = Current Groups
  1501. var_17c = Next Stack Pointer = 0
  1502. var_180 = Pointer to Default -> Special Formation Code Pointers
  1503.  
  1504. var_190 = ra (these are stored at the start)
  1505. var_1a0 = fp
  1506. var_1b0 = s7
  1507. var_1c0 = s6
  1508. var_1d0 = s5
  1509. var_1e0 = s4
  1510. var_1f0 = s3
  1511. var_200 = s2
  1512. var_210 = s1
  1513. var_220 = s0
  1514.  
  1515.  
  1516. Stack Pointer 1 = var_20
  1517. Stack Pointer 2 = var_10
  1518. Stack Pointer 3 = var_34
  1519. Stack Pointer 4 = var_40
  1520. Stack Pointer 5 = var_30
  1521. Stack Pointer 6 = var_54
  1522. Stack Pointer 7 = var_60
  1523. Stack Pointer 8 = var_50
  1524. Stack Pointer 9 = var_74
  1525. Stack Pointer 10 = var_80
  1526. Stack Pointer 11 = var_70
  1527. Stack Pointer 12 = var_94
  1528. Stack Pointer 13 = var_a0
  1529. Stack Pointer 14 = var_90
  1530. Stack Pointer 15 = var_b4
  1531. Stack Pointer 16 = var_c0
  1532. Stack Pointer 17 = var_b0
  1533. Stack Pointer 18 = var_d4
  1534. Stack Pointer 19 = var_e0
  1535. Stack Pointer 20 = var_d0
  1536. Stack Pointer 21 = var_f4
  1537. Stack Pointer 22 = var_100
  1538. Stack Pointer 23 = var_f0 (not shown; due to frame pointer)
  1539. Stack Pointer 24 = var_114
  1540. Stack Pointer 25 = var_120
  1541. Stack Pointer 26 = var_110
  1542. Stack Pointer 27 = var_134
  1543. Stack Pointer 28 = var_140
  1544. Stack Pointer 29 = var_130
  1545. Stack Pointer 30 = var_174
  1546. Stack Pointer 31 = var_180
  1547. Stack Pointer 32 = var_14
  1548. Stack Pointer 33 = var_170
  1549. Stack Pointer 34 = var_c0
  1550. Stack Pointer 35 = var_e0
  1551. Stack Pointer 36 = var_100
  1552. Stack Pointer 37 = var_120
  1553.  
  1554.  
  1555. Special Formation Code Pointers = 0x3d10e0
  1556. 0x00 - 00000000
  1557. 0x04 - 00000000
  1558. 0x08 - 002f9460
  1559. 0x0c - 002f92f0
  1560. 0x10 - 002f92e0
  1561. 0x14 - 002f92d0
  1562. 0x18 - 002f9490
  1563. 0x1c - 00000000
  1564. Default Code Pointers = 0x3d1100
  1565. 0x00 - 00000000
  1566. 0x04 - 00000000
  1567. 0x08 - 00000000
  1568. 0x0c - 00000000
  1569. 0x10 - 00000000
  1570. 0x14 - 00000000
  1571. 0x18 - 00000000
  1572. 0x1c - 00000000
  1573. Formation Set 2 Code Pointers = 0x3d1120
  1574. 0x00 - 00000000
  1575. 0x04 - 00000000
  1576. 0x08 - 002f9580
  1577. 0x0c - 002f9560
  1578. 0x10 - 002f9550
  1579. 0x14 - 002f94d0
  1580. 0x18 - 002f95b0
  1581. 0x1c - 00000000
  1582. Formation Set 1 Code Pointers = 0x3d1140
  1583. 0x00 - 00000000
  1584. 0x04 - 00000000
  1585. 0x08 - 002f9670
  1586. 0x0c - 002f9650
  1587. 0x10 - 002f9640
  1588. 0x14 - 002f95f0
  1589. 0x18 - 002f96a0
  1590. 0x1c - 00000000
  1591.  
  1592.  
  1593. v0 = Stack Pointer 27 -> Free
  1594. v1 = Stack Pointer 24 -> Free
  1595.  
  1596. a0 = Stack Pointer 21 -> Free
  1597. a1 = Stack Pointer 20 -> Free
  1598. a2 = Stack Pointer 18 -> Free
  1599. a3 = Stack Pointer 17 -> Free
  1600.  
  1601. t0 = Stack Pointer 15 -> Free
  1602. t1 = Stack Pointer 14 -> Free
  1603. t2 = Stack Pointer 12 -> Free
  1604. t3 = Stack Pointer 11 -> Free
  1605. t4 = Stack Pointer 9 -> Free
  1606. t5 = Stack Pointer 8 -> Free
  1607. t6 = Stack Pointer 6 -> Free
  1608. t7 - Stack Pointer 5 -> Free
  1609. t8 = Stack Pointer 32 -> Free
  1610.  
  1611. s1 = Stack Pointer 3 -> Free
  1612. s2 = Pointer to Formation File Data Pointer
  1613. s3 = Stack Pointer 26 -> Stack Pointer 33 -> Free
  1614. s4 = Stack Pointer 30 -> Free
  1615.  
  1616. s6 = Stack Pointer 2 -> Free
  1617. s7 = Stack Pointer 29 -> Free
  1618.  
  1619. fp/s8 = Stack Pointer 23 -> Free
  1620.  
  1621. After checking if the slots are available, all of the registers except s2 are
  1622. freed up. It temporarily holds 20 registers JUST for a simple calculation.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement