Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ROM:002F92D0 # ---------------------------------------------------------------------------
- ROM:002F92D0 jr $ra
- ROM:002F92D4 daddu $v0, $0, $0 # Quantity Mod = 0
- ROM:002F92D4 # ---------------------------------------------------------------------------
- ROM:002F92D8 .byte 0
- ROM:002F92D9 .byte 0
- ROM:002F92DA .byte 0
- ROM:002F92DB .byte 0
- ROM:002F92DC .byte 0
- ROM:002F92DD .byte 0
- ROM:002F92DE .byte 0
- ROM:002F92DF .byte 0
- ROM:002F92E0 # ---------------------------------------------------------------------------
- ROM:002F92E0 jr $ra
- ROM:002F92E4 daddu $v0, $0, $0 # Enemy ID = 0
- ROM:002F92E4 # ---------------------------------------------------------------------------
- ROM:002F92E8 .byte 0
- ROM:002F92E9 .byte 0
- ROM:002F92EA .byte 0
- ROM:002F92EB .byte 0
- ROM:002F92EC .byte 0
- ROM:002F92ED .byte 0
- ROM:002F92EE .byte 0
- ROM:002F92EF .byte 0
- ROM:002F92F0 # ---------------------------------------------------------------------------
- ROM:002F92F0 addiu $sp, -0x50
- ROM:002F92F4 sd $ra, 0x40($sp)
- ROM:002F92F8 sq $s3, 0x30($sp)
- ROM:002F92FC sq $s2, 0x20($sp)
- ROM:002F9300 sq $s1, 0x10($sp)
- ROM:002F9304 daddu $s2, $a0, $0 # s2 = Special Formation Stack Pointer
- ROM:002F9308 sq $s0, 0($sp)
- ROM:002F930C daddu $s1, $0, $0 # Group Counter = 0
- ROM:002F9310 daddu $s0, $0, $0 # Counter = 0
- ROM:002F9314
- ROM:002F9314 loc_2F9314: # CODE XREF: ROM:002F937Cj
- ROM:002F9314 lw $a1, -0x62C0($gp) # Load Pointer to Formation File Data Pointer
- ROM:002F9318 lw $v1, 0x10($s2) # Load Pointer to Special Formation Data
- ROM:002F931C lw $v0, 0($a1) # Load Formation File Data Pointer
- ROM:002F9320 beqz $v0, loc_2F938C # Branch if Pointer doesn't exist
- ROM:002F9324 lbu $v1, 1($v1) # Load Special Formation's ID
- ROM:002F9328 bltz $v1, loc_2F9394 # Branch if ID < 0
- ROM:002F932C nop
- ROM:002F9330 lw $v0, 0x38($v0) # Load Number of Special Formations
- ROM:002F9334 slt $1, $v1, $v0
- ROM:002F9338 beqz $1, loc_2F9394 # Branch if ID >= Number of Special Formations
- ROM:002F933C nop
- ROM:002F9340 sll $a0, $v1, 4 # ID * 16
- ROM:002F9344 sll $v0, $s0, 2 # Counter * 4
- ROM:002F9348 lw $v1, 0xC($a1) # Load Special Formation Data Pointer
- ROM:002F934C addu $v1, $a0
- ROM:002F9350 addu $v0, $v1, $v0 # v0 = Current Special Formation Group Pointer
- ROM:002F9354 lhu $a1, 0($v0) # Load Enemy ID
- ROM:002F9358
- ROM:002F9358 loc_2F9358: # CODE XREF: ROM:loc_2F938Cj
- ROM:002F9358 # ROM:loc_2F9394j
- ROM:002F9358 sll $v1, $s1, 2 # Group Counter * 4
- ROM:002F935C li $v0, 0xFFFF # v0 = FFFF
- ROM:002F9360 addu $a0, $s2, $v1 # a0 = Current Enemy's Stack Pointer
- ROM:002F9364 sh $a1, 0x16($a0) # Store Enemy ID
- ROM:002F9368 lhu $v1, 0x16($a0) # Load Enemy ID
- ROM:002F936C bnel $v1, $v0, loc_2F939C # Branch if Enemy ID != FFFF
- ROM:002F9370 lw $v0, 0x10($s2) # Load Pointer to Special Formation Data, if branching
- ROM:002F9374
- ROM:002F9374 loc_2F9374: # CODE XREF: ROM:002F9428j
- ROM:002F9374 addiu $s0, 1 # Counter ++
- ROM:002F9378 slti $v0, $s0, 4
- ROM:002F937C bnez $v0, loc_2F9314 # Branch if Counter < 4
- ROM:002F9380 nop
- ROM:002F9384 b loc_2F9440
- ROM:002F9388 li $v0, 4 # Allowed Types = Special Formation
- ROM:002F938C # ---------------------------------------------------------------------------
- ROM:002F938C
- ROM:002F938C loc_2F938C: # CODE XREF: ROM:002F9320j
- ROM:002F938C b loc_2F9358
- ROM:002F9390 li $a1, 0x65 # 'e' # Enemy ID = Slime
- ROM:002F9394 # ---------------------------------------------------------------------------
- ROM:002F9394
- ROM:002F9394 loc_2F9394: # CODE XREF: ROM:002F9328j
- ROM:002F9394 # ROM:002F9338j
- ROM:002F9394 b loc_2F9358
- ROM:002F9398 li $a1, 0x65 # 'e' # Enemy ID = Slime
- ROM:002F939C # ---------------------------------------------------------------------------
- ROM:002F939C
- ROM:002F939C loc_2F939C: # CODE XREF: ROM:002F936Cj
- ROM:002F939C lbu $v0, 0($v0) # Load Special Formation's Encounter Rate
- ROM:002F93A0 sb $v0, 0x14($a0) # Store Special Formation's Encounter Rate
- ROM:002F93A4 lw $a1, -0x62C0($gp) # Load Pointer to Formation File Pointer
- ROM:002F93A8 lw $v1, 0x10($s2) # Load Pointer to Special Formation Data
- ROM:002F93AC lw $v0, 0($a1) # Load Formation File Pointer
- ROM:002F93B0 beqz $v0, loc_2F9430 # Branch if Pointer doesn't exist
- ROM:002F93B4 lbu $v1, 1($v1) # Load Special Formation ID
- ROM:002F93B8 bltz $v1, loc_2F9438 # Branch if ID < 0
- ROM:002F93BC nop
- ROM:002F93C0 lw $v0, 0x38($v0) # Load Number of Special Formations
- ROM:002F93C4 slt $1, $v1, $v0
- ROM:002F93C8 beqz $1, loc_2F9438 # Branch if ID >= Number of Special Formations
- ROM:002F93CC nop
- ROM:002F93D0 sll $a0, $v1, 4 # ID * 16
- ROM:002F93D4 sll $v0, $s0, 2 # Counter * 4
- ROM:002F93D8 lw $v1, 0xC($a1) # Load Special Formation Data Pointer
- ROM:002F93DC addu $v1, $a0
- ROM:002F93E0 addu $v0, $v1, $v0 # v0 = Pointer to Current Group's Formation Data
- ROM:002F93E4 lbu $a0, 2($v0) # Load Group's Quantity
- ROM:002F93E8
- ROM:002F93E8 loc_2F93E8: # CODE XREF: ROM:loc_2F9430j
- ROM:002F93E8 # ROM:loc_2F9438j
- ROM:002F93E8 sll $v0, $s1, 2 # Group Counter * 4
- ROM:002F93EC li $a1, 1 # a1 = 1
- ROM:002F93F0 addu $v1, $s2, $v0 # v1 = Pointer to Current Group's Stack Data
- ROM:002F93F4 sb $a0, 0x15($v1) # Store Group's Quantity
- ROM:002F93F8 addiu $v0, $v1, 0x14 # v0 = Pointer to Current Group's Encounter Rate
- ROM:002F93FC lw $s3, 0x24($v1) # Load Group's Stack Pointer (overrides Set 2 data)
- ROM:002F9400 sw $0, 8($s3) # Store Current Groups = 0
- ROM:002F9404 sw $v0, 0x10($s3) # Store Pointer to Current Group's Encounter Rate
- ROM:002F9408 lw $t9, 0($s3) # Load Pointer to Set 2 Code Pointers (not special code pointers)
- ROM:002F940C lw $t9, 0x18($t9) # Load Set 2's Availability Calculation Pointer
- ROM:002F9410 jalr $t9 # Jump to Set 2's Availability Calculation
- ROM:002F9414 daddu $a0, $s3, $0 # a0 = Group's Stack Pointer
- ROM:002F9418 lw $t9, 0($s3) # Load Pointer to Set 2 Code Pointers
- ROM:002F941C lw $t9, 0xC($t9) # Load Set 2's Current Groups Incrementing Pointer
- ROM:002F9420 jalr $t9 # Jump to Set 2's Current Groups Incrementing
- ROM:002F9424 daddu $a0, $s3, $0 # a0 = Group's Stack Pointer
- ROM:002F9428 b loc_2F9374
- ROM:002F942C addiu $s1, 1 # Group Counter ++
- ROM:002F9430 # ---------------------------------------------------------------------------
- ROM:002F9430
- ROM:002F9430 loc_2F9430: # CODE XREF: ROM:002F93B0j
- ROM:002F9430 b loc_2F93E8
- ROM:002F9434 daddu $a0, $0, $0 # Group's Quantity = 0
- ROM:002F9438 # ---------------------------------------------------------------------------
- ROM:002F9438
- ROM:002F9438 loc_2F9438: # CODE XREF: ROM:002F93B8j
- ROM:002F9438 # ROM:002F93C8j
- ROM:002F9438 b loc_2F93E8
- ROM:002F943C daddu $a0, $0, $0 # Group's Quantity = 0
- ROM:002F9440 # ---------------------------------------------------------------------------
- ROM:002F9440
- ROM:002F9440 loc_2F9440: # CODE XREF: ROM:002F9384j
- ROM:002F9440 ld $ra, 0x40($sp)
- ROM:002F9444 lq $s3, 0x30($sp)
- ROM:002F9448 lq $s2, 0x20($sp)
- ROM:002F944C lq $s1, 0x10($sp)
- ROM:002F9450 lq $s0, 0($sp)
- ROM:002F9454 jr $ra
- ROM:002F9458 addiu $sp, 0x50
- ROM:002F9458 # ---------------------------------------------------------------------------
- ROM:002F945C .byte 0
- ROM:002F945D .byte 0
- ROM:002F945E .byte 0
- ROM:002F945F .byte 0
- ROM:002F9460 # ---------------------------------------------------------------------------
- ROM:002F9460 lbu $v0, 0xC($a0) # Load Available Flag
- ROM:002F9464 beqz $v0, loc_2F9484 # Branch if Slot isn't available
- ROM:002F9468 nop
- ROM:002F946C andi $v0, $a1, 4
- ROM:002F9470 beqz $v0, loc_2F9484 # Branch if Special Formation isn't allowed
- ROM:002F9474 nop
- ROM:002F9478 lw $v0, 0x10($a0) # Load Special Formation Data Pointer
- ROM:002F947C b locret_2F9488
- ROM:002F9480 lbu $v0, 0($v0) # Load Special Formation's Encounter Rate
- ROM:002F9484 # ---------------------------------------------------------------------------
- ROM:002F9484
- ROM:002F9484 loc_2F9484: # CODE XREF: ROM:002F9464j
- ROM:002F9484 # ROM:002F9470j
- ROM:002F9484 daddu $v0, $0, $0 # Encounter Rate = 0
- ROM:002F9488
- ROM:002F9488 locret_2F9488: # CODE XREF: ROM:002F947Cj
- ROM:002F9488 jr $ra
- ROM:002F948C nop
- ROM:002F9490 # ---------------------------------------------------------------------------
- ROM:002F9490 sb $a1, 0xC($a0)
- ROM:002F9494 lw $a1, 0x10($a0)
- ROM:002F9498 lbu $v1, 0($a1)
- ROM:002F949C blez $v1, loc_2F94BC
- ROM:002F94A0 nop
- ROM:002F94A4 lbu $a1, 1($a1)
- ROM:002F94A8 li $v1, 0xFF
- ROM:002F94AC beq $a1, $v1, loc_2F94BC
- ROM:002F94B0 nop
- ROM:002F94B4
- ROM:002F94B4 loc_2F94B4: # CODE XREF: ROM:loc_2F94BCj
- ROM:002F94B4 b locret_2F94C4
- ROM:002F94B8 nop
- ROM:002F94BC # ---------------------------------------------------------------------------
- ROM:002F94BC
- ROM:002F94BC loc_2F94BC: # CODE XREF: ROM:002F949Cj
- ROM:002F94BC # ROM:002F94ACj
- ROM:002F94BC b loc_2F94B4
- ROM:002F94C0 sb $0, 0xC($a0)
- ROM:002F94C4 # ---------------------------------------------------------------------------
- ROM:002F94C4
- ROM:002F94C4 locret_2F94C4: # CODE XREF: ROM:loc_2F94B4j
- ROM:002F94C4 jr $ra
- ROM:002F94C8 nop
- ROM:002F94C8 # ---------------------------------------------------------------------------
- ROM:002F94CC .byte 0
- ROM:002F94CD .byte 0
- ROM:002F94CE .byte 0
- ROM:002F94CF .byte 0
- ROM:002F94D0 # ---------------------------------------------------------------------------
- ROM:002F94D0 addiu $sp, -0x30
- ROM:002F94D4 sd $ra, 0x20($sp)
- ROM:002F94D8 sq $s1, 0x10($sp)
- ROM:002F94DC sq $s0, 0($sp)
- ROM:002F94E0 lw $v0, 0x10($a0) # Load Enemy's Formation Pointer
- ROM:002F94E4 lbu $v1, 1($v0) # Load Enemy's Quantity
- ROM:002F94E8 lw $a0, -0x62C0($gp) # Load Pointer to Formation File Pointer
- ROM:002F94EC sll $v1, 1 # Quantity * 2
- ROM:002F94F0 lw $v0, 0x10($a0) # Load Misc Formation Data Pointer
- ROM:002F94F4 addu $v0, $v1, $v0
- ROM:002F94F8 lbu $s1, 0x30($v0) # Load Low Quantity
- ROM:002F94FC bgtz $s1, loc_2F9508 # Branch if Low Quantity > 0
- ROM:002F9500 lbu $s0, 0x31($v0) # Load High Quantity
- ROM:002F9504 li $s1, 1 # Low Quantity = 1
- ROM:002F9508
- ROM:002F9508 loc_2F9508: # CODE XREF: ROM:002F94FCj
- ROM:002F9508 slt $1, $s0, $s1
- ROM:002F950C beqz $1, loc_2F9518 # Branch if High Quantity >= Low Quantity
- ROM:002F9510 nop
- ROM:002F9514 daddu $s0, $s1, $0 # High Quantity = Low Quantity
- ROM:002F9518
- ROM:002F9518 loc_2F9518: # CODE XREF: ROM:002F950Cj
- ROM:002F9518 jal Random_Number_Generator
- ROM:002F951C nop
- ROM:002F9520 subu $v1, $s0, $s1 # Quantity Range = High Quantity - Low Quantity
- ROM:002F9524 addiu $v1, 1 # Quantity Range ++
- ROM:002F9528 bnez $v1, loc_2F9534 # Branch if Quantity Range != 0
- ROM:002F952C div $v0, $v1 # Random / Quantity Range
- ROM:002F9530 break 7
- ROM:002F9534
- ROM:002F9534 loc_2F9534: # CODE XREF: ROM:002F9528j
- ROM:002F9534 mfhi $v0 # Quantity Mod = Random % Quantity Range
- ROM:002F9538 ld $ra, 0x20($sp)
- ROM:002F953C lq $s0, 0($sp)
- ROM:002F9540 addu $v0, $s1 # Quantity Mod += Low Range (rand(Low Quantity..Quantity Range+1))
- ROM:002F9544 lq $s1, 0x10($sp)
- ROM:002F9548 jr $ra
- ROM:002F954C addiu $sp, 0x30
- ROM:002F9550 # ---------------------------------------------------------------------------
- ROM:002F9550 lw $v0, 0x10($a0) # Load Pointer to X Enemy's Formation Data
- ROM:002F9554 jr $ra
- ROM:002F9558 lhu $v0, 2($v0) # Load Enemy's ID
- ROM:002F9558 # ---------------------------------------------------------------------------
- ROM:002F955C .byte 0
- ROM:002F955D .byte 0
- ROM:002F955E .byte 0
- ROM:002F955F .byte 0
- ROM:002F9560 # ---------------------------------------------------------------------------
- ROM:002F9560 lw $v1, 8($a0) # Load Slot's Current Groups
- ROM:002F9564 li $v0, 2 # Allowed Types = Set 2
- ROM:002F9568 addiu $v1, 1 # Slot's Current Groups ++
- ROM:002F956C jr $ra
- ROM:002F9570 sw $v1, 8($a0) # Store new Slot's Current Groups
- ROM:002F9570 # ---------------------------------------------------------------------------
- ROM:002F9574 .byte 0
- ROM:002F9575 .byte 0
- ROM:002F9576 .byte 0
- ROM:002F9577 .byte 0
- ROM:002F9578 .byte 0
- ROM:002F9579 .byte 0
- ROM:002F957A .byte 0
- ROM:002F957B .byte 0
- ROM:002F957C .byte 0
- ROM:002F957D .byte 0
- ROM:002F957E .byte 0
- ROM:002F957F .byte 0
- ROM:002F9580 # ---------------------------------------------------------------------------
- ROM:002F9580 lbu $v0, 0xC($a0) # Load Available Flag
- ROM:002F9584 beqz $v0, loc_2F95A4 # Branch if Slot isn't available
- ROM:002F9588 nop
- ROM:002F958C andi $v0, $a1, 2
- ROM:002F9590 beqz $v0, loc_2F95A4 # Branch if Set 2 isn't allowed
- ROM:002F9594 nop
- ROM:002F9598 lw $v0, 0x10($a0) # Load Enemy's Formation Data Pointer
- ROM:002F959C b locret_2F95A8
- ROM:002F95A0 lbu $v0, 0($v0) # Load Enemy's Encounter Rate
- ROM:002F95A4 # ---------------------------------------------------------------------------
- ROM:002F95A4
- ROM:002F95A4 loc_2F95A4: # CODE XREF: ROM:002F9584j
- ROM:002F95A4 # ROM:002F9590j
- ROM:002F95A4 daddu $v0, $0, $0 # Encounter Rate = 0
- ROM:002F95A8
- ROM:002F95A8 locret_2F95A8: # CODE XREF: ROM:002F959Cj
- ROM:002F95A8 jr $ra
- ROM:002F95AC nop
- ROM:002F95B0 # ---------------------------------------------------------------------------
- ROM:002F95B0 sb $a1, 0xC($a0) # Store Available Flag = True
- ROM:002F95B4 lw $a1, 0x10($a0) # Load Pointer to Enemy's Formation/Special Group's Stack Data
- ROM:002F95B8 lbu $v1, 0($a1) # Load Encounter Rate
- ROM:002F95BC blez $v1, loc_2F95DC # Branch if Encounter Rate <= 0
- ROM:002F95C0 nop
- ROM:002F95C4 lhu $a1, 2($a1) # Load Enemy's ID
- ROM:002F95C8 li $v1, 0xFFFF # v1 = FFFF
- ROM:002F95CC beq $a1, $v1, loc_2F95DC # Branch if Enemy doesn't exist
- ROM:002F95D0 nop
- ROM:002F95D4
- ROM:002F95D4 loc_2F95D4: # CODE XREF: ROM:loc_2F95DCj
- ROM:002F95D4 b locret_2F95E4
- ROM:002F95D8 nop
- ROM:002F95DC # ---------------------------------------------------------------------------
- ROM:002F95DC
- ROM:002F95DC loc_2F95DC: # CODE XREF: ROM:002F95BCj
- ROM:002F95DC # ROM:002F95CCj
- ROM:002F95DC b loc_2F95D4
- ROM:002F95E0 sb $0, 0xC($a0) # Store Available Flag = False
- ROM:002F95E4 # ---------------------------------------------------------------------------
- ROM:002F95E4
- ROM:002F95E4 locret_2F95E4: # CODE XREF: ROM:loc_2F95D4j
- ROM:002F95E4 jr $ra
- ROM:002F95E8 nop
- ROM:002F95E8 # ---------------------------------------------------------------------------
- ROM:002F95EC .byte 0
- ROM:002F95ED .byte 0
- ROM:002F95EE .byte 0
- ROM:002F95EF .byte 0
- ROM:002F95F0 # ---------------------------------------------------------------------------
- ROM:002F95F0 addiu $sp, -0x20
- ROM:002F95F4 sd $ra, 0x10($sp)
- ROM:002F95F8 sq $s0, 0($sp)
- ROM:002F95FC lw $v0, 0x10($a0) # Load X Enemy's Formation Data Pointer
- ROM:002F9600 lbu $s0, 1($v0) # Load X Enemy's Max Quantity
- ROM:002F9604 bgtz $s0, loc_2F9610 # Branch if Max Quantity > 0
- ROM:002F9608 nop
- ROM:002F960C li $s0, 1 # Max Quantity = 1
- ROM:002F9610
- ROM:002F9610 loc_2F9610: # CODE XREF: ROM:002F9604j
- ROM:002F9610 jal Random_Number_Generator
- ROM:002F9614 nop
- ROM:002F9618 bnez $s0, loc_2F9624 # Useless Divide by 0 check
- ROM:002F961C div $v0, $s0 # Random / Max Quantity
- ROM:002F9620 break 7
- ROM:002F9624
- ROM:002F9624 loc_2F9624: # CODE XREF: ROM:002F9618j
- ROM:002F9624 mfhi $v0 # Quantity Mod = Random % Quantity
- ROM:002F9628 ld $ra, 0x10($sp)
- ROM:002F962C lq $s0, 0($sp)
- ROM:002F9630 addiu $v0, 1 # Quantity Mod ++ (rand(1..Quantity))
- ROM:002F9634 jr $ra
- ROM:002F9638 addiu $sp, 0x20
- ROM:002F9638 # ---------------------------------------------------------------------------
- ROM:002F963C .byte 0
- ROM:002F963D .byte 0
- ROM:002F963E .byte 0
- ROM:002F963F .byte 0
- ROM:002F9640 # ---------------------------------------------------------------------------
- ROM:002F9640 lw $v0, 0x10($a0) # Load Pointer to X Enemy's Formation Data
- ROM:002F9644 jr $ra
- ROM:002F9648 lhu $v0, 2($v0) # Load Enemy's ID
- ROM:002F9648 # ---------------------------------------------------------------------------
- ROM:002F964C .byte 0
- ROM:002F964D .byte 0
- ROM:002F964E .byte 0
- ROM:002F964F .byte 0
- ROM:002F9650 # ---------------------------------------------------------------------------
- ROM:002F9650 lw $v1, 8($a0) # Load Slot's Current Goups
- ROM:002F9654 li $v0, 1 # Allowed Types = Set 1
- ROM:002F9658 addiu $v1, 1 # Slot's Current Goups ++
- ROM:002F965C jr $ra
- ROM:002F9660 sw $v1, 8($a0) # Store new Slot's Current Goups
- ROM:002F9660 # ---------------------------------------------------------------------------
- ROM:002F9664 .byte 0
- ROM:002F9665 .byte 0
- ROM:002F9666 .byte 0
- ROM:002F9667 .byte 0
- ROM:002F9668 .byte 0
- ROM:002F9669 .byte 0
- ROM:002F966A .byte 0
- ROM:002F966B .byte 0
- ROM:002F966C .byte 0
- ROM:002F966D .byte 0
- ROM:002F966E .byte 0
- ROM:002F966F .byte 0
- ROM:002F9670 # ---------------------------------------------------------------------------
- ROM:002F9670 lbu $v0, 0xC($a0) # Load Available Flag
- ROM:002F9674 beqz $v0, loc_2F9694 # Branch if Slot isn't available
- ROM:002F9678 nop
- ROM:002F967C andi $v0, $a1, 1
- ROM:002F9680 beqz $v0, loc_2F9694 # Branch if Set 1 isn't allowed
- ROM:002F9684 nop
- ROM:002F9688 lw $v0, 0x10($a0) # Load Enemy's Formation Data Pointer
- ROM:002F968C b locret_2F9698
- ROM:002F9690 lbu $v0, 0($v0) # Load Enemy's Encounter Rate
- ROM:002F9694 # ---------------------------------------------------------------------------
- ROM:002F9694
- ROM:002F9694 loc_2F9694: # CODE XREF: ROM:002F9674j
- ROM:002F9694 # ROM:002F9680j
- ROM:002F9694 daddu $v0, $0, $0 # Encounter Rate = 0
- ROM:002F9698
- ROM:002F9698 locret_2F9698: # CODE XREF: ROM:002F968Cj
- ROM:002F9698 jr $ra
- ROM:002F969C nop
- ROM:002F96A0 # ---------------------------------------------------------------------------
- ROM:002F96A0 sb $a1, 0xC($a0)
- ROM:002F96A4 lw $a1, 0x10($a0)
- ROM:002F96A8 lbu $v1, 0($a1)
- ROM:002F96AC blez $v1, loc_2F96CC
- ROM:002F96B0 nop
- ROM:002F96B4 lhu $a1, 2($a1)
- ROM:002F96B8 li $v1, 0xFFFF
- ROM:002F96BC beq $a1, $v1, loc_2F96CC
- ROM:002F96C0 nop
- ROM:002F96C4
- ROM:002F96C4 loc_2F96C4: # CODE XREF: ROM:loc_2F96CCj
- ROM:002F96C4 b locret_2F96D4
- ROM:002F96C8 nop
- ROM:002F96CC # ---------------------------------------------------------------------------
- ROM:002F96CC
- ROM:002F96CC loc_2F96CC: # CODE XREF: ROM:002F96ACj
- ROM:002F96CC # ROM:002F96BCj
- ROM:002F96CC b loc_2F96C4
- ROM:002F96D0 sb $0, 0xC($a0)
- ROM:002F96D4 # ---------------------------------------------------------------------------
- ROM:002F96D4
- ROM:002F96D4 locret_2F96D4: # CODE XREF: ROM:loc_2F96C4j
- ROM:002F96D4 jr $ra
- ROM:002F96D8 nop
- ROM:002F96D8 # ---------------------------------------------------------------------------
- sub_2F98E0: # CODE XREF: sub_2A1A20+30p
- ROM:002F98E0
- ROM:002F98E0 var_220 = -0x220
- ROM:002F98E0 var_210 = -0x210
- ROM:002F98E0 var_200 = -0x200
- ROM:002F98E0 var_1F0 = -0x1F0
- ROM:002F98E0 var_1E0 = -0x1E0
- ROM:002F98E0 var_1D0 = -0x1D0
- ROM:002F98E0 var_1C0 = -0x1C0
- ROM:002F98E0 var_1B0 = -0x1B0
- ROM:002F98E0 var_1A0 = -0x1A0
- ROM:002F98E0 var_190 = -0x190
- ROM:002F98E0 var_180 = -0x180
- ROM:002F98E0 var_17C = -0x17C
- ROM:002F98E0 var_178 = -0x178
- ROM:002F98E0 var_174 = -0x174
- ROM:002F98E0 var_170 = -0x170
- ROM:002F98E0 var_15C = -0x15C
- ROM:002F98E0 var_158 = -0x158
- ROM:002F98E0 var_154 = -0x154
- ROM:002F98E0 var_150 = -0x150
- ROM:002F98E0 var_140 = -0x140
- ROM:002F98E0 var_13C = -0x13C
- ROM:002F98E0 var_138 = -0x138
- ROM:002F98E0 var_134 = -0x134
- ROM:002F98E0 var_130 = -0x130
- ROM:002F98E0 var_120 = -0x120
- ROM:002F98E0 var_11C = -0x11C
- ROM:002F98E0 var_118 = -0x118
- ROM:002F98E0 var_114 = -0x114
- ROM:002F98E0 var_110 = -0x110
- ROM:002F98E0 var_100 = -0x100
- ROM:002F98E0 var_FC = -0xFC
- ROM:002F98E0 var_F8 = -0xF8
- ROM:002F98E0 var_F4 = -0xF4
- ROM:002F98E0 var_E0 = -0xE0
- ROM:002F98E0 var_DC = -0xDC
- ROM:002F98E0 var_D8 = -0xD8
- ROM:002F98E0 var_D4 = -0xD4
- ROM:002F98E0 var_D0 = -0xD0
- ROM:002F98E0 var_C0 = -0xC0
- ROM:002F98E0 var_BC = -0xBC
- ROM:002F98E0 var_B8 = -0xB8
- ROM:002F98E0 var_B4 = -0xB4
- ROM:002F98E0 var_B0 = -0xB0
- ROM:002F98E0 var_A0 = -0xA0
- ROM:002F98E0 var_9C = -0x9C
- ROM:002F98E0 var_98 = -0x98
- ROM:002F98E0 var_94 = -0x94
- ROM:002F98E0 var_90 = -0x90
- ROM:002F98E0 var_80 = -0x80
- ROM:002F98E0 var_7C = -0x7C
- ROM:002F98E0 var_78 = -0x78
- ROM:002F98E0 var_74 = -0x74
- ROM:002F98E0 var_70 = -0x70
- ROM:002F98E0 var_60 = -0x60
- ROM:002F98E0 var_5C = -0x5C
- ROM:002F98E0 var_58 = -0x58
- ROM:002F98E0 var_54 = -0x54
- ROM:002F98E0 var_50 = -0x50
- ROM:002F98E0 var_40 = -0x40
- ROM:002F98E0 var_3C = -0x3C
- ROM:002F98E0 var_38 = -0x38
- ROM:002F98E0 var_34 = -0x34
- ROM:002F98E0 var_30 = -0x30
- ROM:002F98E0 var_20 = -0x20
- ROM:002F98E0 var_1C = -0x1C
- ROM:002F98E0 var_18 = -0x18
- ROM:002F98E0 var_14 = -0x14
- ROM:002F98E0 var_10 = -0x10
- ROM:002F98E0
- ROM:002F98E0 addiu $sp, -0x220
- ROM:002F98E4 lui $v0, 0x3D # '='
- ROM:002F98E8 sd $ra, 0x220+var_190($sp)
- ROM:002F98EC lui $a1, 0x3D # '='
- ROM:002F98F0 sq $fp, 0x220+var_1A0($sp)
- ROM:002F98F4 la $v0, unk_3D1140 # v0 = Pointer to Formation Set 1 Code Pointers
- ROM:002F98F8 sq $s7, 0x220+var_1B0($sp)
- ROM:002F98FC addiu $v1, $sp, 0x220+var_20 # Stack Pointer 1
- ROM:002F9900 sq $s6, 0x220+var_1C0($sp)
- ROM:002F9904 la $a1, unk_3D1100 # a1 = Pointer to Default Code Pointers
- ROM:002F9908 sq $s5, 0x220+var_1D0($sp)
- ROM:002F990C addiu $s6, $sp, 0x220+var_10 # s6 = Stack Pointer 2
- ROM:002F9910 sq $s4, 0x220+var_1E0($sp)
- ROM:002F9914 sq $s3, 0x220+var_1F0($sp)
- ROM:002F9918 sq $s2, 0x220+var_200($sp)
- ROM:002F991C sq $s1, 0x220+var_210($sp)
- ROM:002F9920 daddu $s2, $a0, $0 # s2 = Pointer to Formation File Data Pointer
- ROM:002F9924 sq $s0, 0x220+var_220($sp)
- ROM:002F9928 addiu $s1, $sp, 0x220+var_34 # s1 = Stack Pointer 3
- ROM:002F992C sw $0, -0x62C4($gp) # Store Global Temp Stack Pointer = 0
- ROM:002F9930 lw $a3, 0x1C($a0) # Load Formation ID
- ROM:002F9934 lw $a2, 4($a0) # Load Formation Data Pointer
- ROM:002F9938 sll $a3, 6 # ID * 64
- ROM:002F993C addu $a2, $a3 # a2 = Formation's Data Pointer
- ROM:002F9940 sw $v0, 0x220+var_20($sp) # Store Pointer to Formation Set 1 Code Pointers
- ROM:002F9944 addiu $v0, $a2, 0x10 # v0 = Pointer to First Enemy's Formation Data
- ROM:002F9948 sw $v1, -0x62C4($gp) # Store Stack Pointer 1 as Global Temp Stack Pointer
- ROM:002F994C sw $v0, 0($s6) # Store Pointer to First Enemy's Formation Data
- ROM:002F9950 sw $0, 0x220+var_18($sp) # Store 0 to stack
- ROM:002F9954 sb $0, 0x220+var_14($sp) # Store Slot 1 Available = False
- ROM:002F9958 sw $0, 0x220+var_1C($sp) # Store Next Stack Pointer = 0
- ROM:002F995C lw $v1, 0x1C($a0) # Load Formation ID
- ROM:002F9960 lw $v0, 4($a0) # Load Formation Data Pointer
- ROM:002F9964 sll $v1, 6 # ID * 64
- ROM:002F9968 lw $a0, -0x62C4($gp) # Load Stack Pointer 1
- ROM:002F996C addu $v0, $v1
- ROM:002F9970 sw $a1, 0x220+var_40($sp) # Store Pointer to Default Code Pointers
- ROM:002F9974 addiu $v1, $v0, 0x14 # v1 = Pointer to Second Enemy's Formation Data
- ROM:002F9978 sw $0, 0x220+var_38($sp) # Store 0 to stack
- ROM:002F997C beqz $a0, loc_2FA094 # Branch if Stack Pointer 1 = 0
- ROM:002F9980 sb $0, 0($s1) # Store Slot 2 Available = False
- ROM:002F9984 b loc_2F9994
- ROM:002F9988 lw $v0, 4($a0) # Load Next Stack Pointer
- ROM:002F998C # ---------------------------------------------------------------------------
- ROM:002F998C
- ROM:002F998C loc_2F998C: # CODE XREF: sub_2F98E0+C0j
- ROM:002F998C daddu $a0, $v0, $0 # a0 = Next Stack Pointer
- ROM:002F9990 lw $v0, 4($a0) # Load new Next Stack Pointer (doesn't happen here)
- ROM:002F9994
- ROM:002F9994 loc_2F9994: # CODE XREF: sub_2F98E0+A4j
- ROM:002F9994 nop
- ROM:002F9998 nop
- ROM:002F999C nop
- ROM:002F99A0 bnez $v0, loc_2F998C # Branch if Next Stack Pointer exists
- ROM:002F99A4 nop
- ROM:002F99A8 addiu $v0, $sp, 0x220+var_40 # v0 = Stack Pointer 4
- ROM:002F99AC sw $v0, 4($a0) # Store Next Stack Pointer = Stack Pointer 4
- ROM:002F99B0
- ROM:002F99B0 loc_2F99B0: # CODE XREF: sub_2F98E0+7B8j
- ROM:002F99B0 lui $v0, 0x3D # '='
- ROM:002F99B4 addiu $t7, $sp, 0x220+var_30 # t7 = Stack Pointer 5
- ROM:002F99B8 la $v0, unk_3D1140 # v0 = Pointer to Set 1 Code Pointers
- ROM:002F99BC sw $0, 0x220+var_3C($sp) # Store Next Stack Pointer = 0
- ROM:002F99C0 sw $v0, 0x220+var_40($sp) # Store Pointer to Set 1 Code Pointers
- ROM:002F99C4 addiu $t6, $sp, 0x220+var_54 # t6 = Stack Pointer 6
- ROM:002F99C8 sw $v1, 0($t7) # Store Pointer to Second Enemy's Formation Data
- ROM:002F99CC lui $v0, 0x3D # '='
- ROM:002F99D0 lw $a0, 0x1C($s2) # Load Formation ID
- ROM:002F99D4 la $v0, unk_3D1100 # v0 = Pointer to Default Code Pointers
- ROM:002F99D8 lw $v1, 4($s2) # Load Formation Data Pointer
- ROM:002F99DC lw $a1, -0x62C4($gp) # Load Stack Pointer 1
- ROM:002F99E0 sll $a0, 6 # ID * 64
- ROM:002F99E4 addu $v1, $a0
- ROM:002F99E8 sw $v0, 0x220+var_60($sp) # Store Pointer to Default Code Pointers
- ROM:002F99EC addiu $v1, 0x18 # v1 = Pointer to Third Enemy's Formation Data
- ROM:002F99F0 sw $0, 0x220+var_58($sp) # Store 0 to stack
- ROM:002F99F4 beqz $a1, loc_2FA0A0 # Branch if Stack Pointer 1 = 0
- ROM:002F99F8 sb $0, 0($t6) # Store Slot 3 Available Flag = 0
- ROM:002F99FC b loc_2F9A0C
- ROM:002F9A00 lw $v0, 4($a1) # Load Next Stack Pointer
- ROM:002F9A04 # ---------------------------------------------------------------------------
- ROM:002F9A04
- ROM:002F9A04 loc_2F9A04: # CODE XREF: sub_2F98E0+138j
- ROM:002F9A04 daddu $a1, $v0, $0 # a1 = Next Stack Pointer
- ROM:002F9A08 lw $v0, 4($a1) # Load new Next Stack Pointer
- ROM:002F9A0C
- ROM:002F9A0C loc_2F9A0C: # CODE XREF: sub_2F98E0+11Cj
- ROM:002F9A0C nop
- ROM:002F9A10 nop
- ROM:002F9A14 nop
- ROM:002F9A18 bnez $v0, loc_2F9A04 # Branch if Next Stack Pointer exists
- ROM:002F9A1C nop
- ROM:002F9A20 addiu $v0, $sp, 0x220+var_60 # v0 = Stack Pointer 7
- ROM:002F9A24 sw $v0, 4($a1) # Store Next Stack Pointer = Stack Pointer 7
- ROM:002F9A28
- ROM:002F9A28 loc_2F9A28: # CODE XREF: sub_2F98E0+7C4j
- ROM:002F9A28 lui $v0, 0x3D # '='
- ROM:002F9A2C addiu $t5, $sp, 0x220+var_50 # t5 = Stack Pointer 8
- ROM:002F9A30 la $v0, unk_3D1140 # v0 = Pointer to Set 1 Code Pointers
- ROM:002F9A34 sw $0, 0x220+var_5C($sp) # Store Next Stack Pointer = 0
- ROM:002F9A38 sw $v0, 0x220+var_60($sp) # Store Pointer to Set 1 Code Pointers
- ROM:002F9A3C addiu $t4, $sp, 0x220+var_74 # t4 = Stack Pointer 9
- ROM:002F9A40 sw $v1, 0($t5) # Store Pointer to Third Enemy's Formation Data
- ROM:002F9A44 lui $v0, 0x3D # '='
- ROM:002F9A48 lw $a0, 0x1C($s2) # Load Formation ID
- ROM:002F9A4C la $v0, unk_3D1100 # v0 = Pointer to Default Code Pointers
- ROM:002F9A50 lw $v1, 4($s2) # Load Formation Data Pointer
- ROM:002F9A54 lw $a1, -0x62C4($gp) # Load Stack Pointer 1
- ROM:002F9A58 sll $a0, 6 # ID * 64
- ROM:002F9A5C addu $v1, $a0
- ROM:002F9A60 sw $v0, 0x220+var_80($sp) # Store Pointer to Default Code Pointers
- ROM:002F9A64 addiu $v1, 0x1C # v1 = Pointer to Fourth Enemy's Formation Data
- ROM:002F9A68 sw $0, 0x220+var_78($sp) # Store 0 to stack
- ROM:002F9A6C beqz $a1, loc_2FA0AC # Branch if Stack Pointer 1 = 0
- ROM:002F9A70 sb $0, 0($t4) # Store Slot 4 Available = False
- ROM:002F9A74 b loc_2F9A84
- ROM:002F9A78 lw $v0, 4($a1) # Load Next Stack Pointer
- ROM:002F9A7C # ---------------------------------------------------------------------------
- ROM:002F9A7C
- ROM:002F9A7C loc_2F9A7C: # CODE XREF: sub_2F98E0+1B0j
- ROM:002F9A7C daddu $a1, $v0, $0 # a1 = Next Stack Pointer
- ROM:002F9A80 lw $v0, 4($a1) # Load new Next Stack Pointer
- ROM:002F9A84
- ROM:002F9A84 loc_2F9A84: # CODE XREF: sub_2F98E0+194j
- ROM:002F9A84 nop
- ROM:002F9A88 nop
- ROM:002F9A8C nop
- ROM:002F9A90 bnez $v0, loc_2F9A7C # Branch if Next Stack Pointer exists
- ROM:002F9A94 nop
- ROM:002F9A98 addiu $v0, $sp, 0x220+var_80 # v0 = Stack Pointer 10
- ROM:002F9A9C sw $v0, 4($a1) # Store Next Stack Pointer = Stack Pointer 10
- ROM:002F9AA0
- ROM:002F9AA0 loc_2F9AA0: # CODE XREF: sub_2F98E0+7D0j
- ROM:002F9AA0 lui $v0, 0x3D # '='
- ROM:002F9AA4 addiu $t3, $sp, 0x220+var_70 # t3 = Stack Pointer 11
- ROM:002F9AA8 la $v0, unk_3D1140 # v0 = Pointer to Set 1 Code Pointers
- ROM:002F9AAC sw $0, 0x220+var_7C($sp) # Store Next Stack Pointer = 0
- ROM:002F9AB0 sw $v0, 0x220+var_80($sp) # Store Pointer to Set 1 Code Pointers
- ROM:002F9AB4 addiu $t2, $sp, 0x220+var_94 # t2 = Stack Pointer 12
- ROM:002F9AB8 sw $v1, 0($t3) # Store Pointer to Fourth Enemy's Formation Data
- ROM:002F9ABC lui $v0, 0x3D # '='
- ROM:002F9AC0 lw $a0, 0x1C($s2) # Load Formation ID
- ROM:002F9AC4 la $v0, unk_3D1100 # v0 = Pointer to Default Code Pointers
- ROM:002F9AC8 lw $v1, 4($s2) # Load Formation Data Pointer
- ROM:002F9ACC lw $a1, -0x62C4($gp) # Load Stack Pointer 1
- ROM:002F9AD0 sll $a0, 6 # ID * 64
- ROM:002F9AD4 addu $v1, $a0
- ROM:002F9AD8 sw $v0, 0x220+var_A0($sp) # Store Pointer to Default Code Pointers
- ROM:002F9ADC addiu $v1, 0x20 # ' ' # v1 = Pointer to Fifth Enemy's Formation Data
- ROM:002F9AE0 sw $0, 0x220+var_98($sp) # Store 0 to stack
- ROM:002F9AE4 beqz $a1, loc_2FA0B8 # Branch if Stack Pointer 1 = 0
- ROM:002F9AE8 sb $0, 0($t2) # Store Slot 5 Available = False
- ROM:002F9AEC b loc_2F9AFC
- ROM:002F9AF0 lw $v0, 4($a1) # Load Next Stack Pointer
- ROM:002F9AF4 # ---------------------------------------------------------------------------
- ROM:002F9AF4
- ROM:002F9AF4 loc_2F9AF4: # CODE XREF: sub_2F98E0+228j
- ROM:002F9AF4 daddu $a1, $v0, $0 # a1 = Next Stack Pointer
- ROM:002F9AF8 lw $v0, 4($a1) # Load new Next Stack Pointer
- ROM:002F9AFC
- ROM:002F9AFC loc_2F9AFC: # CODE XREF: sub_2F98E0+20Cj
- ROM:002F9AFC nop
- ROM:002F9B00 nop
- ROM:002F9B04 nop
- ROM:002F9B08 bnez $v0, loc_2F9AF4 # Branch if Next Stack Pointer exists
- ROM:002F9B0C nop
- ROM:002F9B10 addiu $v0, $sp, 0x220+var_A0 # v0 = Stack Pointer 13
- ROM:002F9B14 sw $v0, 4($a1) # Store Next Stack Pointer = Stack Pointer 13
- ROM:002F9B18
- ROM:002F9B18 loc_2F9B18: # CODE XREF: sub_2F98E0+7DCj
- ROM:002F9B18 lui $v0, 0x3D # '='
- ROM:002F9B1C addiu $t1, $sp, 0x220+var_90 # t1 = Stack Pointer 14
- ROM:002F9B20 la $v0, unk_3D1140 # v0 = Pointer to Set 1 Code Pointers
- ROM:002F9B24 sw $0, 0x220+var_9C($sp) # Store Next Stack Pointer = 0
- ROM:002F9B28 sw $v0, 0x220+var_A0($sp) # Store Pointer to Set 1 Code Pointers
- ROM:002F9B2C addiu $t0, $sp, 0x220+var_B4 # t0 = Stack Pointer 15
- ROM:002F9B30 sw $v1, 0($t1) # store Pointer to Fifth Enemy's Formation Data
- ROM:002F9B34 lui $v0, 0x3D # '='
- ROM:002F9B38 lw $a0, 0x1C($s2) # Load Formation ID
- ROM:002F9B3C la $v0, unk_3D1100 # v0 = Pointer to Default Code Pointers
- ROM:002F9B40 lw $v1, 4($s2) # Load Formation Data Pointer
- ROM:002F9B44 lw $a1, -0x62C4($gp) # Load Stack Pointer 1
- ROM:002F9B48 sll $a0, 6 # ID * 64
- ROM:002F9B4C addu $v1, $a0
- ROM:002F9B50 sw $v0, 0x220+var_C0($sp) # Store Pointer to Default Code Pointers
- ROM:002F9B54 addiu $v1, 0x24 # '$' # v1 = Pointer to Sixth Enemy's Formation Data
- ROM:002F9B58 sw $0, 0x220+var_B8($sp) # store 0 to stack
- ROM:002F9B5C beqz $a1, loc_2FA0C4 # Branch if Stack Pointer 1 = 0
- ROM:002F9B60 sb $0, 0($t0) # Store Slot 6 Available = False
- ROM:002F9B64 b loc_2F9B74
- ROM:002F9B68 lw $v0, 4($a1) # Load Next Stack Pointer
- ROM:002F9B6C # ---------------------------------------------------------------------------
- ROM:002F9B6C
- ROM:002F9B6C loc_2F9B6C: # CODE XREF: sub_2F98E0+2A0j
- ROM:002F9B6C daddu $a1, $v0, $0 # a1 = Next Stack Pointer
- ROM:002F9B70 lw $v0, 4($a1) # Load new Next Stack Pointer
- ROM:002F9B74
- ROM:002F9B74 loc_2F9B74: # CODE XREF: sub_2F98E0+284j
- ROM:002F9B74 nop
- ROM:002F9B78 nop
- ROM:002F9B7C nop
- ROM:002F9B80 bnez $v0, loc_2F9B6C # Branch if Next Stack Pointer exists
- ROM:002F9B84 nop
- ROM:002F9B88 addiu $v0, $sp, 0x220+var_C0 # v0 = Stack Pointer 16
- ROM:002F9B8C sw $v0, 4($a1) # Store Next Stack Pointer = Stack Pointer 16
- ROM:002F9B90
- ROM:002F9B90 loc_2F9B90: # CODE XREF: sub_2F98E0+7E8j
- ROM:002F9B90 lui $v0, 0x3D # '='
- ROM:002F9B94 addiu $a3, $sp, 0x220+var_B0 # a3 = Stack Pointer 17
- ROM:002F9B98 la $v0, unk_3D1120 # v0 = Pointer to Set 2 Code Pointers
- ROM:002F9B9C sw $v1, 0($a3) # Store Pointer to Sixth Enemy's Formation Data
- ROM:002F9BA0 sw $v0, 0x220+var_C0($sp) # Store Pointer to Set 2 Code Pointers
- ROM:002F9BA4 lui $v1, 0x3D # '='
- ROM:002F9BA8 sw $0, 0x220+var_BC($sp) # Store Next Stack Pointer = 0
- ROM:002F9BAC la $v1, unk_3D1100 # v1 = Pointer to Default Code Pointers
- ROM:002F9BB0 lw $a1, 0x1C($s2) # Load Formation ID
- ROM:002F9BB4 addiu $a2, $sp, 0x220+var_D4 # a2 = Stack Pointer 18
- ROM:002F9BB8 lw $a0, 4($s2) # Load Formation Data Pointer
- ROM:002F9BBC lw $v0, -0x62C4($gp) # Load Stack Pointer 1
- ROM:002F9BC0 sll $a1, 6 # ID * 64
- ROM:002F9BC4 addu $a0, $a1
- ROM:002F9BC8 sw $v1, 0x220+var_E0($sp) # Store Pointer to Default Code Pointers
- ROM:002F9BCC addiu $a0, 0x28 # '(' # a0 = Pointer to Seventh Enemy's Data Pointer
- ROM:002F9BD0 sw $0, 0x220+var_D8($sp) # Store 0 to stack
- ROM:002F9BD4 beqz $v0, loc_2FA0D0 # Branch if Stack Pointer 1 = 0
- ROM:002F9BD8 sb $0, 0($a2) # Store Slot 7 Available = False
- ROM:002F9BDC b loc_2F9BEC
- ROM:002F9BE0 lw $v1, 4($v0) # Load Next Stack Pointer
- ROM:002F9BE4 # ---------------------------------------------------------------------------
- ROM:002F9BE4
- ROM:002F9BE4 loc_2F9BE4: # CODE XREF: sub_2F98E0+318j
- ROM:002F9BE4 daddu $v0, $v1, $0 # v0 = Next Stack Pointer
- ROM:002F9BE8 lw $v1, 4($v0) # Load new Next Stack Pointer
- ROM:002F9BEC
- ROM:002F9BEC loc_2F9BEC: # CODE XREF: sub_2F98E0+2FCj
- ROM:002F9BEC nop
- ROM:002F9BF0 nop
- ROM:002F9BF4 nop
- ROM:002F9BF8 bnez $v1, loc_2F9BE4 # Branch if Next Stack Pointer exists
- ROM:002F9BFC nop
- ROM:002F9C00 addiu $v1, $sp, 0x220+var_E0 # v1 = Stack Pointer 19
- ROM:002F9C04 sw $v1, 4($v0) # Store Next Stack Pointer = Stack Pointer 19
- ROM:002F9C08
- ROM:002F9C08 loc_2F9C08: # CODE XREF: sub_2F98E0+7F4j
- ROM:002F9C08 lui $v0, 0x3D # '='
- ROM:002F9C0C addiu $a1, $sp, 0x220+var_D0 # a1 = Stack Pointer 20
- ROM:002F9C10 la $v0, unk_3D1120 # v0 = Pointer to Set 2 Code Pointers
- ROM:002F9C14 sw $a0, 0($a1) # Store Pointer to Seventh Enemy's Formation Data
- ROM:002F9C18 sw $v0, 0x220+var_E0($sp) # Store Pointer to Set 2 Code Pointers
- ROM:002F9C1C lui $v1, 0x3D # '='
- ROM:002F9C20 sw $0, 0x220+var_DC($sp) # Store Next Stack Pointer = 0
- ROM:002F9C24 la $v1, unk_3D1100 # v1 = Pointer to Default Code Pointers
- ROM:002F9C28 lw $s4, 0x1C($s2) # Load Formation ID
- ROM:002F9C2C addiu $a0, $sp, 0x220+var_F4 # a0 = Stack Pointer 21
- ROM:002F9C30 lw $s3, 4($s2) # Load Formation Data Pointer
- ROM:002F9C34 lw $v0, -0x62C4($gp) # Load Stack Pointer 1
- ROM:002F9C38 sll $s4, 6 # ID * 64
- ROM:002F9C3C addu $s3, $s4
- ROM:002F9C40 sw $v1, 0x220+var_100($sp) # Store Pointer to Default Code Pointers
- ROM:002F9C44 addiu $s3, 0x2C # ',' # s3 = Pointer to Eighth Enemy's Formation Data
- ROM:002F9C48 sw $0, 0x220+var_F8($sp) # Store 0 to stack
- ROM:002F9C4C beqz $v0, loc_2FA0DC # Branch if Stack Pointer 1 = 0
- ROM:002F9C50 sb $0, 0($a0) # Store Slot 8 Available = False
- ROM:002F9C54 b loc_2F9C64
- ROM:002F9C58 lw $v1, 4($v0) # Load Next Stack Pointer
- ROM:002F9C5C # ---------------------------------------------------------------------------
- ROM:002F9C5C
- ROM:002F9C5C loc_2F9C5C: # CODE XREF: sub_2F98E0+390j
- ROM:002F9C5C daddu $v0, $v1, $0 # v0 = Next Stack Pointer
- ROM:002F9C60 lw $v1, 4($v0) # Load new Next Stack Pointer
- ROM:002F9C64
- ROM:002F9C64 loc_2F9C64: # CODE XREF: sub_2F98E0+374j
- ROM:002F9C64 nop
- ROM:002F9C68 nop
- ROM:002F9C6C nop
- ROM:002F9C70 bnez $v1, loc_2F9C5C # Branch if Next Stack Pointer exists
- ROM:002F9C74 nop
- ROM:002F9C78 addiu $v1, $sp, 0x220+var_100 # v1 = Stack Pointer 22
- ROM:002F9C7C sw $v1, 4($v0) # Store Next Stack Pointer = Stack Pointer 22
- ROM:002F9C80
- ROM:002F9C80 loc_2F9C80: # CODE XREF: sub_2F98E0+800j
- ROM:002F9C80 lui $v0, 0x3D # '='
- ROM:002F9C84 addiu $fp, $sp, 0x130 # fp = Stack Pointer 23
- ROM:002F9C88 la $v0, unk_3D1120 # v0 = Pointer to Set 2 Code Pointers
- ROM:002F9C8C sw $s3, 0x220+var_220($fp) # Store Pointer to Eighth Enemy's Formation Data
- ROM:002F9C8C # NOTE: It's actually var_F0, fp messes the variable up
- ROM:002F9C90 sw $v0, 0x220+var_100($sp) # Store Pointer to Set 2 Code Pointers
- ROM:002F9C94 addiu $v1, $sp, 0x220+var_114 # v1 = Stack Pointer 24
- ROM:002F9C98 sw $0, 0x220+var_FC($sp) # Store Next Stack Pointer = 0
- ROM:002F9C9C lui $v0, 0x3D # '='
- ROM:002F9CA0 lw $s5, 0x1C($s2) # Load Formation ID
- ROM:002F9CA4 la $v0, unk_3D1100 # v0 = Pointer to Default Code Pointers
- ROM:002F9CA8 lw $s4, 4($s2) # Load Formation Data Pointer
- ROM:002F9CAC lw $s3, -0x62C4($gp) # Load Stack Pointer 1
- ROM:002F9CB0 sll $s5, 6 # ID * 64
- ROM:002F9CB4 addu $s4, $s5
- ROM:002F9CB8 sw $v0, 0x220+var_120($sp) # Store Pointer to Default Code Pointers
- ROM:002F9CBC addiu $v0, $s4, 0x30 # v0 = Pointer to Ninth Enemy's Formation Data
- ROM:002F9CC0 sw $0, 0x220+var_118($sp) # Store 0 to stack
- ROM:002F9CC4 beqz $s3, loc_2FA0E8 # Branch if Stack Pointer 1 = 0
- ROM:002F9CC8 sb $0, 0($v1) # Store Ninth Slot Available = False
- ROM:002F9CCC b loc_2F9CDC
- ROM:002F9CD0 lw $s4, 4($s3) # Load Next Stack Pointer
- ROM:002F9CD4 # ---------------------------------------------------------------------------
- ROM:002F9CD4
- ROM:002F9CD4 loc_2F9CD4: # CODE XREF: sub_2F98E0+408j
- ROM:002F9CD4 daddu $s3, $s4, $0 # s3 = Next Stack Pointer
- ROM:002F9CD8 lw $s4, 4($s3) # Load new Next Stack Pointer
- ROM:002F9CDC
- ROM:002F9CDC loc_2F9CDC: # CODE XREF: sub_2F98E0+3ECj
- ROM:002F9CDC nop
- ROM:002F9CE0 nop
- ROM:002F9CE4 nop
- ROM:002F9CE8 bnez $s4, loc_2F9CD4 # Branch if Next Stack Pointer exists
- ROM:002F9CEC nop
- ROM:002F9CF0 addiu $s4, $sp, 0x220+var_120 # s4 = Stack Pointer 25
- ROM:002F9CF4 sw $s4, 4($s3) # Store Next Stack Pointer = Stack Pointer 25
- ROM:002F9CF8
- ROM:002F9CF8 loc_2F9CF8: # CODE XREF: sub_2F98E0+80Cj
- ROM:002F9CF8 lui $s3, 0x3D # '='
- ROM:002F9CFC lui $s4, 0x3D # '='
- ROM:002F9D00 la $s3, unk_3D1120 # s3 = Pointer to Set 2 Code Pointers
- ROM:002F9D04 sw $0, 0x220+var_11C($sp) # Store Next Stack Pointer = 0
- ROM:002F9D08 sw $s3, 0x220+var_120($sp) # Store Pointer to Set 2 Code Pointers
- ROM:002F9D0C la $s4, unk_3D1100 # s4 = Pointer to Default Code Pointers
- ROM:002F9D10 addiu $s3, $sp, 0x220+var_110 # s3 = Stack Pointer 26
- ROM:002F9D14 sw $v0, 0($s3) # Store Pointer to Ninth Enemy's Formation Data
- ROM:002F9D18 lw $s7, 0x1C($s2) # Load Formation ID
- ROM:002F9D1C addiu $v0, $sp, 0x220+var_134 # v0 = Stack Pointer 27
- ROM:002F9D20 lw $s5, 4($s2) # Load Formation Data Pointer
- ROM:002F9D24 lw $s3, -0x62C4($gp) # Load Stack Pointer 1
- ROM:002F9D28 sll $s7, 6 # ID * 64
- ROM:002F9D2C addu $s5, $s7
- ROM:002F9D30 sw $s4, 0x220+var_140($sp) # Store Pointer to Default Code Pointers
- ROM:002F9D34 addiu $s4, $s5, 0x34 # s4 = Pointer to Tenth Enemy's Formation Data
- ROM:002F9D38 sw $0, 0x220+var_138($sp) # Store 0 to stack
- ROM:002F9D3C beqz $s3, loc_2FA0F4 # Branch if Stack Pointer 1 = 0
- ROM:002F9D40 sb $0, 0($v0) # Store Slot 10 Available = False
- ROM:002F9D44 b loc_2F9D54
- ROM:002F9D48 lw $s5, 4($s3) # Load Next Stack Pointer
- ROM:002F9D4C # ---------------------------------------------------------------------------
- ROM:002F9D4C
- ROM:002F9D4C loc_2F9D4C: # CODE XREF: sub_2F98E0+480j
- ROM:002F9D4C daddu $s3, $s5, $0 # s3 = Next Stack Pointer
- ROM:002F9D50 lw $s5, 4($s3) # Load new Next Stack Pointer
- ROM:002F9D54
- ROM:002F9D54 loc_2F9D54: # CODE XREF: sub_2F98E0+464j
- ROM:002F9D54 nop
- ROM:002F9D58 nop
- ROM:002F9D5C nop
- ROM:002F9D60 bnez $s5, loc_2F9D4C # Branch if Next Stack Pointer exists
- ROM:002F9D64 nop
- ROM:002F9D68 addiu $s5, $sp, 0x220+var_140 # s5 = Stack Pointer 28
- ROM:002F9D6C sw $s5, 4($s3) # Store Next Stack Pointer = Stack Pointer 28
- ROM:002F9D70
- ROM:002F9D70 loc_2F9D70: # CODE XREF: sub_2F98E0+818j
- ROM:002F9D70 lui $s3, 0x3D # '='
- ROM:002F9D74 addiu $s7, $sp, 0x220+var_130 # s7 = Stack Pointer 29
- ROM:002F9D78 la $s3, unk_3D1120 # s3 = Pointer to Set 2 Code Pointers
- ROM:002F9D7C sw $s4, 0($s7) # Store Pointer to Tenth Enemy's Formation Data
- ROM:002F9D80 sw $s3, 0x220+var_140($sp) # Store Pointer to Set 2 Code Pointers
- ROM:002F9D84 lui $s5, 0x3D # '='
- ROM:002F9D88 sw $0, 0x220+var_13C($sp) # Store Next Stack Pointer = 0
- ROM:002F9D8C la $s5, unk_3D1100 # s5 = Pointer to Default Code Pointers
- ROM:002F9D90 lw $t9, 0x1C($s2) # Load Formation ID
- ROM:002F9D94 addiu $s4, $sp, 0x220+var_174 # s4 = Stack Pointer 30
- ROM:002F9D98 lw $t8, 4($s2) # Load Formation Data Pointer
- ROM:002F9D9C lw $s3, -0x62C4($gp) # Load Stack Pointer 1
- ROM:002F9DA0 sll $t9, 6 # ID * 64
- ROM:002F9DA4 addu $t8, $t9
- ROM:002F9DA8 sw $s5, 0x220+var_180($sp) # Store Pointer to Default Code Pointers
- ROM:002F9DAC addiu $s5, $t8, 0x38 # s5 = Pointer to Special Formation Data
- ROM:002F9DB0 sw $0, 0x220+var_178($sp) # Store 0 to stack
- ROM:002F9DB4 beqz $s3, loc_2FA100 # Branch if Stack Pointer 1 = 0
- ROM:002F9DB8 sb $0, 0($s4) # Store Special Formation Available = False
- ROM:002F9DBC b loc_2F9DCC
- ROM:002F9DC0 lw $t8, 4($s3) # Load Next Stack Pointer
- ROM:002F9DC4 # ---------------------------------------------------------------------------
- ROM:002F9DC4
- ROM:002F9DC4 loc_2F9DC4: # CODE XREF: sub_2F98E0+4F8j
- ROM:002F9DC4 daddu $s3, $t8, $0 # s3 = Next Stack Pointer
- ROM:002F9DC8 lw $t8, 4($s3) # Load new Next Stack Pointer
- ROM:002F9DCC
- ROM:002F9DCC loc_2F9DCC: # CODE XREF: sub_2F98E0+4DCj
- ROM:002F9DCC nop
- ROM:002F9DD0 nop
- ROM:002F9DD4 nop
- ROM:002F9DD8 bnez $t8, loc_2F9DC4 # Branch if Next Stack Pointer exists
- ROM:002F9DDC nop
- ROM:002F9DE0 addiu $t8, $sp, 0x220+var_180 # t8 = Stack Pointer 31
- ROM:002F9DE4 sw $t8, 4($s3) # Store Next Stack Pointer = Stack Pointer 31
- ROM:002F9DE8
- ROM:002F9DE8 loc_2F9DE8: # CODE XREF: sub_2F98E0+824j
- ROM:002F9DE8 lui $s3, 0x3D # '='
- ROM:002F9DEC lw $s6, 0($s6) # Load Pointer to First Enemy's Formation Data
- ROM:002F9DF0 la $s3, unk_3D10E0 # s3 = Pointer to Special Formation Code Pointers
- ROM:002F9DF4 addiu $t8, $sp, 0x220+var_14 # t8 = Stack Pointer 32
- ROM:002F9DF8 sw $s3, 0x220+var_180($sp) # Store Pointer to Special Formation Code Pointers
- ROM:002F9DFC addiu $s3, $sp, 0x220+var_170 # s3 = Stack Pointer 33
- ROM:002F9E00 sw $0, 0x220+var_17C($sp) # Store Next Stack Pointer = 0
- ROM:002F9E04 sw $s5, 0($s3) # Store Pointer to Special Formation Data
- ROM:002F9E08 addiu $s5, $sp, 0x220+var_C0 # s5 = Stack Pointer 34
- ROM:002F9E0C sw $s5, 0x220+var_15C($sp) # Store Stack Pointer 34 to stack
- ROM:002F9E10 addiu $s5, $sp, 0x220+var_E0 # s5 = Stack Pointer 35
- ROM:002F9E14 sw $s5, 0x220+var_158($sp) # Store Stack Pointer 35 to stack
- ROM:002F9E18 addiu $s5, $sp, 0x220+var_100 # s5 = Stack Pointer 36
- ROM:002F9E1C sw $s5, 0x220+var_154($sp) # Store Stack Pointer 36 to stack
- ROM:002F9E20 addiu $s5, $sp, 0x220+var_120 # s5 = Stack Pointer 37
- ROM:002F9E24 sw $s5, 0x220+var_150($sp) # Store Stack Pointer 37 to stack
- ROM:002F9E28 li $s5, 1
- ROM:002F9E2C sb $s5, 0($t8) # Store Slot 1 Available = True
- ROM:002F9E30 lbu $s5, 0($s6) # Load First Enemy's Encounter Rate
- ROM:002F9E34 blez $s5, loc_2FA10C # Branch if Encounter Rate <= 0
- ROM:002F9E38 nop
- ROM:002F9E3C lhu $s5, 2($s6) # Load First Enemy's Formation ID
- ROM:002F9E40 li $s6, 0xFFFF # s6 = FFFF
- ROM:002F9E44 beq $s5, $s6, loc_2FA10C # Branch if an Enemy isn't present
- ROM:002F9E48 nop
- ROM:002F9E4C
- ROM:002F9E4C loc_2F9E4C: # CODE XREF: sub_2F98E0:loc_2FA10Cj
- ROM:002F9E4C lw $s5, 0($t7) # Load Pointer to Second Enemy's Formation Data
- ROM:002F9E50 li $t7, 1
- ROM:002F9E54 sb $t7, 0($s1) # Store Slot 2 Available = True
- ROM:002F9E58 lbu $t7, 0($s5) # Load Second Enemy's Encounter Rate
- ROM:002F9E5C blez $t7, loc_2FA114 # Branch if Encounter Rate <= 0
- ROM:002F9E60 nop
- ROM:002F9E64 lhu $s5, 2($s5) # Load Second Enemy's Formation ID
- ROM:002F9E68 li $t7, 0xFFFF # t7 = FFFF
- ROM:002F9E6C beq $s5, $t7, loc_2FA114 # Branch if an Enemy isn't present
- ROM:002F9E70 nop
- ROM:002F9E74
- ROM:002F9E74 loc_2F9E74: # CODE XREF: sub_2F98E0:loc_2FA114j
- ROM:002F9E74 lw $t7, 0($t5) # Load Pointer to Third Enemy's Formation Data
- ROM:002F9E78 li $t5, 1
- ROM:002F9E7C sb $t5, 0($t6) # Store Slot 3 Available = True
- ROM:002F9E80 lbu $t5, 0($t7) # Load Third Enemy's Encounter Rate
- ROM:002F9E84 blez $t5, loc_2FA11C # Branch if Encounter Rate <= 0
- ROM:002F9E88 nop
- ROM:002F9E8C lhu $t7, 2($t7) # Load Third Enemy's Formation ID
- ROM:002F9E90 li $t5, 0xFFFF # t5 = FFFF
- ROM:002F9E94 beq $t7, $t5, loc_2FA11C # Branch if an Enemy isn't present
- ROM:002F9E98 nop
- ROM:002F9E9C
- ROM:002F9E9C loc_2F9E9C: # CODE XREF: sub_2F98E0:loc_2FA11Cj
- ROM:002F9E9C lw $t5, 0($t3) # Load Pointer to Fourth Enemy's Formation Data
- ROM:002F9EA0 li $t3, 1
- ROM:002F9EA4 sb $t3, 0($t4) # Store Slot 4 Available = True
- ROM:002F9EA8 lbu $t3, 0($t5) # Load Fourth Enemy's Encounter Rate
- ROM:002F9EAC blez $t3, loc_2FA124 # Branch if Encounter Rate <= 0
- ROM:002F9EB0 nop
- ROM:002F9EB4 lhu $t5, 2($t5) # Load Fourth Enemy's Formation ID
- ROM:002F9EB8 li $t3, 0xFFFF # t3 = FFFF
- ROM:002F9EBC beq $t5, $t3, loc_2FA124 # Branch if an Enemy isn't present
- ROM:002F9EC0 nop
- ROM:002F9EC4
- ROM:002F9EC4 loc_2F9EC4: # CODE XREF: sub_2F98E0:loc_2FA124j
- ROM:002F9EC4 lw $t3, 0($t1) # Load Pointer to Fifth Enemy's Formation Data
- ROM:002F9EC8 li $t1, 1
- ROM:002F9ECC sb $t1, 0($t2) # Store Slot 5 Available = True
- ROM:002F9ED0 lbu $t1, 0($t3) # Load Fifth Enemy's Encounter Rate
- ROM:002F9ED4 blez $t1, loc_2FA12C # Branch if Encounter Rate <= 0
- ROM:002F9ED8 nop
- ROM:002F9EDC lhu $t3, 2($t3) # Load Fifth Enemy's Formation ID
- ROM:002F9EE0 li $t1, 0xFFFF # t1 = FFFF
- ROM:002F9EE4 beq $t3, $t1, loc_2FA12C # Branch if an Enemy isn't present
- ROM:002F9EE8 nop
- ROM:002F9EEC
- ROM:002F9EEC loc_2F9EEC: # CODE XREF: sub_2F98E0:loc_2FA12Cj
- ROM:002F9EEC lw $t1, 0($a3) # Load Pointer to Sixth Enemy's Formation Data
- ROM:002F9EF0 li $a3, 1
- ROM:002F9EF4 sb $a3, 0($t0) # Store Slot 6 Available = True
- ROM:002F9EF8 lbu $a3, 0($t1) # Load Sixth Enemy's Encounter Rate
- ROM:002F9EFC blez $a3, loc_2FA134 # Branch if Encounter Rate <= 0
- ROM:002F9F00 nop
- ROM:002F9F04 lhu $t1, 2($t1) # Load Sixth Enemy's Formation ID
- ROM:002F9F08 li $a3, 0xFFFF # a3 = FFFF
- ROM:002F9F0C beq $t1, $a3, loc_2FA134 # Branch if an Enemy isn't present
- ROM:002F9F10 nop
- ROM:002F9F14
- ROM:002F9F14 loc_2F9F14: # CODE XREF: sub_2F98E0:loc_2FA134j
- ROM:002F9F14 lw $a3, 0($a1) # Load Pointer to Seventh Enemy's Formation Data
- ROM:002F9F18 li $a1, 1
- ROM:002F9F1C sb $a1, 0($a2) # Store Slot 7 Available = True
- ROM:002F9F20 lbu $a1, 0($a3) # Load Seventh Enemy's Encounter Rate
- ROM:002F9F24 blez $a1, loc_2FA13C # Branch if Encounter Rate <= 0
- ROM:002F9F28 nop
- ROM:002F9F2C lhu $a3, 2($a3) # Load Seventh Enemy's Formation ID
- ROM:002F9F30 li $a1, 0xFFFF # a1 = FFFF
- ROM:002F9F34 beq $a3, $a1, loc_2FA13C # Branch if an Enemy isn't present
- ROM:002F9F38 nop
- ROM:002F9F3C
- ROM:002F9F3C loc_2F9F3C: # CODE XREF: sub_2F98E0:loc_2FA13Cj
- ROM:002F9F3C lw $a2, 0x220+var_220($fp) # Load Pointer to Eighth Enemy's Formation Data
- ROM:002F9F40 li $a1, 1
- ROM:002F9F44 sb $a1, 0($a0) # Store Slot 8 Available = True
- ROM:002F9F48 lbu $a1, 0($a2) # Load Eighth Enemy's Encounter Rate
- ROM:002F9F4C blez $a1, loc_2FA144 # Branch if Encounter Rate <= 0
- ROM:002F9F50 nop
- ROM:002F9F54 lhu $a2, 2($a2) # Load Eighth Enemy's Formation ID
- ROM:002F9F58 li $a1, 0xFFFF # a1 = FFFF
- ROM:002F9F5C beq $a2, $a1, loc_2FA144 # Branch if an Enemy isn't present
- ROM:002F9F60 nop
- ROM:002F9F64
- ROM:002F9F64 loc_2F9F64: # CODE XREF: sub_2F98E0:loc_2FA144j
- ROM:002F9F64 addiu $a0, $sp, 0x220+var_110 # a0 = Pointer to Ninth Enemy's Formation Data
- ROM:002F9F68 lw $a1, 0($a0) # Load Ninth Enemy's Encounter Rate
- ROM:002F9F6C li $a0, 1
- ROM:002F9F70 sb $a0, 0($v1) # Store Slot 9 Available = True
- ROM:002F9F74 lbu $a0, 0($a1) # Load Ninth Enemy's Encounter Rate
- ROM:002F9F78 blez $a0, loc_2FA14C # Branch if Encounter Rate <= 0
- ROM:002F9F7C nop
- ROM:002F9F80 lhu $a1, 2($a1) # Load Ninth Enemy's Formation ID
- ROM:002F9F84 li $a0, 0xFFFF # a0 = FFFF
- ROM:002F9F88 beq $a1, $a0, loc_2FA14C # Branch if an Enemy isn't present
- ROM:002F9F8C nop
- ROM:002F9F90
- ROM:002F9F90 loc_2F9F90: # CODE XREF: sub_2F98E0:loc_2FA14Cj
- ROM:002F9F90 lw $a0, 0($s7) # Load Tenth Enemy's Formation Data
- ROM:002F9F94 li $v1, 1
- ROM:002F9F98 sb $v1, 0($v0) # Store Slot 10 Available = True
- ROM:002F9F9C lbu $v1, 0($a0) # Load Tenth Enemy's Encounter Rate
- ROM:002F9FA0 blez $v1, loc_2FA154 # Branch if Encounter Rate <= 0
- ROM:002F9FA4 nop
- ROM:002F9FA8 lhu $a0, 2($a0) # Load Tenth Enemy's Formation ID
- ROM:002F9FAC li $v1, 0xFFFF # v1 = FFFF
- ROM:002F9FB0 beq $a0, $v1, loc_2FA154 # Branch if an Enemy isn't present
- ROM:002F9FB4 nop
- ROM:002F9FB8
- ROM:002F9FB8 loc_2F9FB8: # CODE XREF: sub_2F98E0:loc_2FA154j
- ROM:002F9FB8 lw $v1, 0($s3) # Load Pointer to Special Formation Data
- ROM:002F9FBC li $v0, 1
- ROM:002F9FC0 sb $v0, 0($s4) # Store Special Formation Available = True
- ROM:002F9FC4 lbu $v0, 0($v1) # Load Special Formation's Encounter Rate
- ROM:002F9FC8 blez $v0, loc_2FA15C # Branch if Encounter Rate <= 0
- ROM:002F9FCC nop
- ROM:002F9FD0 lbu $v1, 1($v1) # Load Special Formation's ID
- ROM:002F9FD4 li $v0, 0xFF # v0 = FF
- ROM:002F9FD8 beq $v1, $v0, loc_2FA15C # Branch if a Special Formation isn't present
- ROM:002F9FDC nop
- ROM:002F9FE0
- ROM:002F9FE0 loc_2F9FE0: # CODE XREF: sub_2F98E0:loc_2FA15Cj
- ROM:002F9FE0 lw $v1, 0x1C($s2) # Load Formation's ID
- ROM:002F9FE4 lw $v0, 4($s2) # Load Formation Data Pointer
- ROM:002F9FE8 sll $v1, 6 # ID * 64
- ROM:002F9FEC addu $v0, $v1 # v0 = Formation's Data Pointer
- ROM:002F9FF0 lbu $s1, 3($v0) # Load 2 Group Rate
- ROM:002F9FF4 lbu $s3, 4($v0) # Load 3 Group Rate
- ROM:002F9FF8 addu $v0, $s1, $s3 # Total Rate = 2 Group Rate + 3 Group Rate
- ROM:002F9FFC bnez $v0, loc_2FA00C # Branch if Total Rate != 0
- ROM:002FA000 nop
- ROM:002FA004 li $s3, 1 # 3 Group Rate = 1
- ROM:002FA008 daddu $s1, $s3, $0 # 2 Group Rate = 1
- ROM:002FA00C
- ROM:002FA00C loc_2FA00C: # CODE XREF: sub_2F98E0+71Cj
- ROM:002FA00C jal Random_Number_Generator
- ROM:002FA010 nop
- ROM:002FA014 addu $v1, $s1, $s3 # v1 = Total Rate
- ROM:002FA018 bnez $v1, loc_2FA024 # Useless divide by 0 check
- ROM:002FA01C div $v0, $v1 # Random / Total Rate
- ROM:002FA020 break 7
- ROM:002FA024
- ROM:002FA024 loc_2FA024: # CODE XREF: sub_2F98E0+738j
- ROM:002FA024 mfhi $v1 # Multi Group Mod = Random % Total Rate
- ROM:002FA028 slt $1, $v1, $s1
- ROM:002FA02C beqzl $1, loc_2FA038 # Branch if Multi Group Mod >= 2 Group Rate
- ROM:002FA030 li $s1, 3 # Groups = 3
- ROM:002FA034 li $s1, 2 # Groups = 2
- ROM:002FA038
- ROM:002FA038 loc_2FA038: # CODE XREF: sub_2F98E0+74Cj
- ROM:002FA038 lw $s4, -0x62C4($gp) # Load Stack Pointer 1
- ROM:002FA03C daddu $s3, $0, $0 # Encounter Rate Sum = 0
- ROM:002FA040 b loc_2FA060
- ROM:002FA044 li $s5, 7 # Allowed Types = 7 (Set 1, Set 2, Special Formation)
- ROM:002FA048 # ---------------------------------------------------------------------------
- ROM:002FA048
- ROM:002FA048 loc_2FA048: # CODE XREF: sub_2F98E0:loc_2FA060j
- ROM:002FA048 daddu $a0, $s4, $0 # a0 = Next Stack Pointer
- ROM:002FA04C lw $t9, 8($t9) # Load X Code Pointer 3
- ROM:002FA050 jalr $t9 # Jump to X's Enemy Encounter Rate Calculation
- ROM:002FA054 li $a1, 7 # Allowed Types = 7 (Set 1, Set 2, Special Formation)
- ROM:002FA058 lw $s4, 4($s4) # Load new Next Stack Pointer
- ROM:002FA05C addu $s3, $v0 # Encounter Rate Sum += Encounter Rate
- ROM:002FA060
- ROM:002FA060 loc_2FA060: # CODE XREF: sub_2F98E0+760j
- ROM:002FA060 bnezl $s4, loc_2FA048 # Branch if Next Stack Pointer exists
- ROM:002FA064 lw $t9, 0($s4) # Load Pointer to X Code Pointers, if branching
- ROM:002FA068 bnez $s3, loc_2FA164 # Branch if Encounter Rate Sum != 0
- ROM:002FA06C nop
- ROM:002FA070 li $a1, 1
- ROM:002FA074 lui $v1, 0x45 # 'E'
- ROM:002FA078 sw $a1, dword_451680 # Store Number of Groups = 1
- ROM:002FA07C lui $a0, 0x45 # 'E'
- ROM:002FA080 lui $v1, 0x45 # 'E'
- ROM:002FA084 sw $0, -0x62C4($gp) # Store Temp Global Stack Pointer = 0
- ROM:002FA088 sw $a1, off_451684 # Store Enemy ID 1 = 1
- ROM:002FA08C b loc_2FA4B8
- ROM:002FA090 sw $a1, dword_451688 # Store Enemy Quantity 1 = 1
- ROM:002FA094 # ---------------------------------------------------------------------------
- ROM:002FA094
- ROM:002FA094 loc_2FA094: # CODE XREF: sub_2F98E0+9Cj
- ROM:002FA094 addiu $v0, $sp, 0x220+var_40
- ROM:002FA098 b loc_2F99B0
- ROM:002FA09C sw $v0, -0x62C4($gp)
- ROM:002FA0A0 # ---------------------------------------------------------------------------
- ROM:002FA0A0
- ROM:002FA0A0 loc_2FA0A0: # CODE XREF: sub_2F98E0+114j
- ROM:002FA0A0 addiu $v0, $sp, 0x220+var_60
- ROM:002FA0A4 b loc_2F9A28
- ROM:002FA0A8 sw $v0, -0x62C4($gp)
- ROM:002FA0AC # ---------------------------------------------------------------------------
- ROM:002FA0AC
- ROM:002FA0AC loc_2FA0AC: # CODE XREF: sub_2F98E0+18Cj
- ROM:002FA0AC addiu $v0, $sp, 0x220+var_80
- ROM:002FA0B0 b loc_2F9AA0
- ROM:002FA0B4 sw $v0, -0x62C4($gp)
- ROM:002FA0B8 # ---------------------------------------------------------------------------
- ROM:002FA0B8
- ROM:002FA0B8 loc_2FA0B8: # CODE XREF: sub_2F98E0+204j
- ROM:002FA0B8 addiu $v0, $sp, 0x220+var_A0
- ROM:002FA0BC b loc_2F9B18
- ROM:002FA0C0 sw $v0, -0x62C4($gp)
- ROM:002FA0C4 # ---------------------------------------------------------------------------
- ROM:002FA0C4
- ROM:002FA0C4 loc_2FA0C4: # CODE XREF: sub_2F98E0+27Cj
- ROM:002FA0C4 addiu $v0, $sp, 0x220+var_C0
- ROM:002FA0C8 b loc_2F9B90
- ROM:002FA0CC sw $v0, -0x62C4($gp)
- ROM:002FA0D0 # ---------------------------------------------------------------------------
- ROM:002FA0D0
- ROM:002FA0D0 loc_2FA0D0: # CODE XREF: sub_2F98E0+2F4j
- ROM:002FA0D0 addiu $v0, $sp, 0x220+var_E0
- ROM:002FA0D4 b loc_2F9C08
- ROM:002FA0D8 sw $v0, -0x62C4($gp)
- ROM:002FA0DC # ---------------------------------------------------------------------------
- ROM:002FA0DC
- ROM:002FA0DC loc_2FA0DC: # CODE XREF: sub_2F98E0+36Cj
- ROM:002FA0DC addiu $v0, $sp, 0x220+var_100
- ROM:002FA0E0 b loc_2F9C80
- ROM:002FA0E4 sw $v0, -0x62C4($gp)
- ROM:002FA0E8 # ---------------------------------------------------------------------------
- ROM:002FA0E8
- ROM:002FA0E8 loc_2FA0E8: # CODE XREF: sub_2F98E0+3E4j
- ROM:002FA0E8 addiu $s3, $sp, 0x220+var_120
- ROM:002FA0EC b loc_2F9CF8
- ROM:002FA0F0 sw $s3, -0x62C4($gp)
- ROM:002FA0F4 # ---------------------------------------------------------------------------
- ROM:002FA0F4
- ROM:002FA0F4 loc_2FA0F4: # CODE XREF: sub_2F98E0+45Cj
- ROM:002FA0F4 addiu $s3, $sp, 0x220+var_140
- ROM:002FA0F8 b loc_2F9D70
- ROM:002FA0FC sw $s3, -0x62C4($gp)
- ROM:002FA100 # ---------------------------------------------------------------------------
- ROM:002FA100
- ROM:002FA100 loc_2FA100: # CODE XREF: sub_2F98E0+4D4j
- ROM:002FA100 addiu $s3, $sp, 0x220+var_180
- ROM:002FA104 b loc_2F9DE8
- ROM:002FA108 sw $s3, -0x62C4($gp)
- ROM:002FA10C # ---------------------------------------------------------------------------
- ROM:002FA10C
- ROM:002FA10C loc_2FA10C: # CODE XREF: sub_2F98E0+554j
- ROM:002FA10C # sub_2F98E0+564j
- ROM:002FA10C b loc_2F9E4C
- ROM:002FA110 sb $0, 0($t8) # Store Slot 1 Available = False
- ROM:002FA114 # ---------------------------------------------------------------------------
- ROM:002FA114
- ROM:002FA114 loc_2FA114: # CODE XREF: sub_2F98E0+57Cj
- ROM:002FA114 # sub_2F98E0+58Cj
- ROM:002FA114 b loc_2F9E74
- ROM:002FA118 sb $0, 0($s1) # Store Slot 2 Available = False
- ROM:002FA11C # ---------------------------------------------------------------------------
- ROM:002FA11C
- ROM:002FA11C loc_2FA11C: # CODE XREF: sub_2F98E0+5A4j
- ROM:002FA11C # sub_2F98E0+5B4j
- ROM:002FA11C b loc_2F9E9C
- ROM:002FA120 sb $0, 0($t6) # Store Slot 3 Available = False
- ROM:002FA124 # ---------------------------------------------------------------------------
- ROM:002FA124
- ROM:002FA124 loc_2FA124: # CODE XREF: sub_2F98E0+5CCj
- ROM:002FA124 # sub_2F98E0+5DCj
- ROM:002FA124 b loc_2F9EC4
- ROM:002FA128 sb $0, 0($t4) # Store Slot 4 Available = False
- ROM:002FA12C # ---------------------------------------------------------------------------
- ROM:002FA12C
- ROM:002FA12C loc_2FA12C: # CODE XREF: sub_2F98E0+5F4j
- ROM:002FA12C # sub_2F98E0+604j
- ROM:002FA12C b loc_2F9EEC
- ROM:002FA130 sb $0, 0($t2) # Store Slot 5 Available = False
- ROM:002FA134 # ---------------------------------------------------------------------------
- ROM:002FA134
- ROM:002FA134 loc_2FA134: # CODE XREF: sub_2F98E0+61Cj
- ROM:002FA134 # sub_2F98E0+62Cj
- ROM:002FA134 b loc_2F9F14
- ROM:002FA138 sb $0, 0($t0) # Store Slot 6 Available = False
- ROM:002FA13C # ---------------------------------------------------------------------------
- ROM:002FA13C
- ROM:002FA13C loc_2FA13C: # CODE XREF: sub_2F98E0+644j
- ROM:002FA13C # sub_2F98E0+654j
- ROM:002FA13C b loc_2F9F3C
- ROM:002FA140 sb $0, 0($a2) # Store Slot 7 Available = False
- ROM:002FA144 # ---------------------------------------------------------------------------
- ROM:002FA144
- ROM:002FA144 loc_2FA144: # CODE XREF: sub_2F98E0+66Cj
- ROM:002FA144 # sub_2F98E0+67Cj
- ROM:002FA144 b loc_2F9F64
- ROM:002FA148 sb $0, 0($a0) # Store Slot 8 Available = False
- ROM:002FA14C # ---------------------------------------------------------------------------
- ROM:002FA14C
- ROM:002FA14C loc_2FA14C: # CODE XREF: sub_2F98E0+698j
- ROM:002FA14C # sub_2F98E0+6A8j
- ROM:002FA14C b loc_2F9F90
- ROM:002FA150 sb $0, 0($v1) # Store Slot 9 Available = False
- ROM:002FA154 # ---------------------------------------------------------------------------
- ROM:002FA154
- ROM:002FA154 loc_2FA154: # CODE XREF: sub_2F98E0+6C0j
- ROM:002FA154 # sub_2F98E0+6D0j
- ROM:002FA154 b loc_2F9FB8
- ROM:002FA158 sb $0, 0($v0) # Store Slot 10 Available = False
- ROM:002FA15C # ---------------------------------------------------------------------------
- ROM:002FA15C
- ROM:002FA15C loc_2FA15C: # CODE XREF: sub_2F98E0+6E8j
- ROM:002FA15C # sub_2F98E0+6F8j
- ROM:002FA15C b loc_2F9FE0
- ROM:002FA160 sb $0, 0($s4) # Store Special Formation Available = False
- ROM:002FA164 # ---------------------------------------------------------------------------
- ROM:002FA164
- ROM:002FA164 loc_2FA164: # CODE XREF: sub_2F98E0+788j
- ROM:002FA164 jal Random_Number_Generator
- ROM:002FA168 nop
- ROM:002FA16C bnez $s3, loc_2FA178 # Divide by 0 check
- ROM:002FA170 div $v0, $s3 # Random / Encounter Rate Sum
- ROM:002FA174 break 7
- ROM:002FA178
- ROM:002FA178 loc_2FA178: # CODE XREF: sub_2F98E0+88Cj
- ROM:002FA178 mfhi $v0 # Encounter Mod = Random % Encounter Rate Sum
- ROM:002FA17C lw $s3, -0x62C4($gp) # Load Stack Pointer 1
- ROM:002FA180 b loc_2FA23C
- ROM:002FA184 addiu $s4, $v0, 1 # Encounter Mod += 1 (rand(1..Encounter Rate Sum))
- ROM:002FA188 # ---------------------------------------------------------------------------
- ROM:002FA188
- ROM:002FA188 loc_2FA188: # CODE XREF: sub_2F98E0:loc_2FA23Cj
- ROM:002FA188 daddu $a0, $s3, $0 # a0 = Next Stack Pointer
- ROM:002FA18C lw $t9, 8($t9) # Load X Code Pointer 3
- ROM:002FA190 jalr $t9 # Jump to X's Enemy Encounter Rate Calculation
- ROM:002FA194 daddu $a1, $s5, $0 # a1 = Allowed Types
- ROM:002FA198 slt $v0, $s4
- ROM:002FA19C bnezl $v0, loc_2FA224 # Branch if Encounter Rate < Encounter Mod
- ROM:002FA1A0 lw $t9, 0($s3) # Load Pointer to X Code Pointers
- ROM:002FA1A4 lw $t9, 0($s3) # Load Pointer to X Code Pointers (herpdederp)
- ROM:002FA1A8 lw $t9, 0xC($t9) # Load X Code Pointer 4
- ROM:002FA1AC jalr $t9 # Jump to Current Groups Incrementing (Special calculates formation too)
- ROM:002FA1B0 daddu $a0, $s3, $0 # a0 = Next Stack Pointer
- ROM:002FA1B4 daddu $s0, $v0, $0 # s0 = Allowed Types
- ROM:002FA1B8 li $v0, 1
- ROM:002FA1BC bnel $s0, $v0, loc_2FA23C # Branch if Allowed Types != Set 1
- ROM:002FA1C0 daddu $s3, $0, $0 # Next Stack Pointer = 0
- ROM:002FA1C4 addiu $s1, -1 # Groups --
- ROM:002FA1C8 beqzl $s1, loc_2FA23C # Branch if Groups = 0
- ROM:002FA1CC daddu $s3, $0, $0 # Next Stack Pointer = 0, if branching
- ROM:002FA1D0 lw $s3, -0x62C4($gp) # Load Stack Pointer 1
- ROM:002FA1D4 daddu $s5, $v0, $0 # Allowed Types = Set 1
- ROM:002FA1D8 b loc_2FA1F8
- ROM:002FA1DC daddu $s4, $0, $0 # Encounter Rate Sum = 0
- ROM:002FA1E0 # ---------------------------------------------------------------------------
- ROM:002FA1E0
- ROM:002FA1E0 loc_2FA1E0: # CODE XREF: sub_2F98E0:loc_2FA1F8j
- ROM:002FA1E0 daddu $a0, $s3, $0 # a0 = Next Stack Pointer
- ROM:002FA1E4 lw $t9, 8($t9) # Load Set 1 Code Pointer 3
- ROM:002FA1E8 jalr $t9 # Jump to Set 1's Enemy Encounter Rate Calculaation
- ROM:002FA1EC li $a1, 1 # Allowed Types = Set 1
- ROM:002FA1F0 lw $s3, 4($s3) # Load new Next Stack Pointer
- ROM:002FA1F4 addu $s4, $v0 # Encounter Rate Sum += Encounter Rate
- ROM:002FA1F8
- ROM:002FA1F8 loc_2FA1F8: # CODE XREF: sub_2F98E0+8F8j
- ROM:002FA1F8 bnezl $s3, loc_2FA1E0 # Branch if Next Stack Pointer Exists
- ROM:002FA1FC lw $t9, 0($s3) # Load Pointer to Set 1 Code Pointers
- ROM:002FA200 jal Random_Number_Generator
- ROM:002FA204 nop
- ROM:002FA208 bnez $s4, loc_2FA214 # Branch if Encounter Rate Sum != 0
- ROM:002FA20C div $v0, $s4 # Random / Encounter Rate Sum
- ROM:002FA210 break 7
- ROM:002FA214
- ROM:002FA214 loc_2FA214: # CODE XREF: sub_2F98E0+928j
- ROM:002FA214 mfhi $v0 # Encounter Mod = Random % Encounter Rate Sum
- ROM:002FA218 lw $s3, -0x62C4($gp) # Load Stack Pointer 1
- ROM:002FA21C b loc_2FA23C
- ROM:002FA220 addiu $s4, $v0, 1 # Encounter Mod += 1 (rand(1..Encounter Rate Sum))
- ROM:002FA224 # ---------------------------------------------------------------------------
- ROM:002FA224
- ROM:002FA224 loc_2FA224: # CODE XREF: sub_2F98E0+8BCj
- ROM:002FA224 daddu $a0, $s3, $0 # a0 = Next Stack Pointer
- ROM:002FA228 lw $t9, 8($t9) # Load X Code Pointer 3
- ROM:002FA22C jalr $t9 # Jump to X's Enemy Encounter Rate Calculation
- ROM:002FA230 daddu $a1, $s5, $0 # a1 = Allowed Types
- ROM:002FA234 lw $s3, 4($s3) # Load new Next Stack Pointer
- ROM:002FA238 subu $s4, $v0 # Encounter Mod -= Encounter Rate
- ROM:002FA23C
- ROM:002FA23C loc_2FA23C: # CODE XREF: sub_2F98E0+8A0j
- ROM:002FA23C # sub_2F98E0+8DCj ...
- ROM:002FA23C bnezl $s3, loc_2FA188 # Branch if Next Stack Pointer exists
- ROM:002FA240 lw $t9, 0($s3) # Load Pointer to X Code Pointers
- ROM:002FA244 lw $s1, -0x62C4($gp) # Load Stack Pointer 1
- ROM:002FA248 lui $v0, 0x45 # 'E'
- ROM:002FA24C b loc_2FA2DC
- ROM:002FA250 sw $0, dword_451680 # Store Number of Groups = 0
- ROM:002FA254 # ---------------------------------------------------------------------------
- ROM:002FA254
- ROM:002FA254 loc_2FA254: # CODE XREF: sub_2F98E0:loc_2FA2DCj
- ROM:002FA254 b loc_2FA2C8
- ROM:002FA258 daddu $s3, $0, $0 # Counter = 0
- ROM:002FA25C # ---------------------------------------------------------------------------
- ROM:002FA25C
- ROM:002FA25C loc_2FA25C: # CODE XREF: sub_2F98E0+9F0j
- ROM:002FA25C lw $t9, 0x10($t9) # Load X's Code Pointer 5
- ROM:002FA260 jalr $t9 # Load X's Enemy ID
- ROM:002FA264 daddu $a0, $s1, $0 # a0 = Next Stack Pointer
- ROM:002FA268 lui $v1, 0x45 # 'E'
- ROM:002FA26C lui $a1, 0x45 # 'E'
- ROM:002FA270 lw $v1, dword_451680 # Load Number of Groups
- ROM:002FA274 la $a1, dword_451680
- ROM:002FA278 sll $v1, 3 # Number of Groups * 8
- ROM:002FA27C addu $v1, $a1, $v1 # v1 = Current Group's Data Pointer
- ROM:002FA280 sw $v0, 4($v1) # Store Enemy ID
- ROM:002FA284 lw $t9, 0($s1) # Load Pointer to X's Code Pointers
- ROM:002FA288 lw $t9, 0x14($t9) # Load X's Code Pointer 6
- ROM:002FA28C jalr $t9 # Load X's Quantity Mod
- ROM:002FA290 daddu $a0, $s1, $0 # a0 = Next Stack Pointer
- ROM:002FA294 lui $v1, 0x45 # 'E'
- ROM:002FA298 lui $a1, 0x45 # 'E'
- ROM:002FA29C lw $a2, dword_451680 # Load Number of Groups
- ROM:002FA2A0 la $a1, dword_451680 # a1 = Pointer to Number of Groups
- ROM:002FA2A4 lui $a0, 0x45 # 'E'
- ROM:002FA2A8 addiu $s3, 1 # Counter ++
- ROM:002FA2AC sll $a2, 3 # Number of Groups * 8
- ROM:002FA2B0 lui $v1, 0x45 # 'E'
- ROM:002FA2B4 addu $a1, $a2
- ROM:002FA2B8 sw $v0, 8($a1) # Store Group's Quantity
- ROM:002FA2BC lw $v0, dword_451680 # Load Number of Groups
- ROM:002FA2C0 addiu $v0, 1 # Number of Groups ++
- ROM:002FA2C4 sw $v0, dword_451680 # Store new Number of Groups
- ROM:002FA2C8
- ROM:002FA2C8 loc_2FA2C8: # CODE XREF: sub_2F98E0:loc_2FA254j
- ROM:002FA2C8 lw $v0, 8($s1) # Load Slot's Current Groups
- ROM:002FA2CC slt $v0, $s3, $v0
- ROM:002FA2D0 bnezl $v0, loc_2FA25C # Branch if Counter < Current Groups
- ROM:002FA2D4 lw $t9, 0($s1) # Load Pointer to X's Code Pointers
- ROM:002FA2D8 lw $s1, 4($s1) # Load new Next Stack Pointer
- ROM:002FA2DC
- ROM:002FA2DC loc_2FA2DC: # CODE XREF: sub_2F98E0+96Cj
- ROM:002FA2DC bnez $s1, loc_2FA254 # Branch if Next Stack Pointer != 0
- ROM:002FA2E0 nop
- ROM:002FA2E4 li $v0, 4
- ROM:002FA2E8 beq $s0, $v0, loc_2FA3B0 # Branch if Allowed Types = Special Formation
- ROM:002FA2EC nop
- ROM:002FA2F0 lw $v0, dword_451680 # Load Number of Groups
- ROM:002FA2F8 slti $v0, 2
- ROM:002FA2FC bnez $v0, loc_2FA3B0 # Branch if Number of Groups < 1
- ROM:002FA300 nop
- ROM:002FA304 jal Random_Number_Generator
- ROM:002FA308 nop
- ROM:002FA30C lw $v1, dword_451680 # Load Number of Groups
- ROM:002FA314 bnez $v1, loc_2FA320 # Branch if Number of Groups != 0
- ROM:002FA318 div $v0, $v1 # Random / Number of Groups
- ROM:002FA31C break 7
- ROM:002FA320
- ROM:002FA320 loc_2FA320: # CODE XREF: sub_2F98E0+A34j
- ROM:002FA320 b loc_2FA3A8
- ROM:002FA324 mfhi $s3 # Group Mod = Random % Number of Groups
- ROM:002FA328 # ---------------------------------------------------------------------------
- ROM:002FA328
- ROM:002FA328 loc_2FA328: # CODE XREF: sub_2F98E0:loc_2FA3A8j
- ROM:002FA328 jal Random_Number_Generator
- ROM:002FA32C nop
- ROM:002FA330 lw $v1, dword_451680 # Load Number of Groups
- ROM:002FA338 bnez $v1, loc_2FA344 # Branch if Number of Groups != 0
- ROM:002FA33C div $v0, $v1 # Random / Number of Groups
- ROM:002FA340 break 7
- ROM:002FA344
- ROM:002FA344 loc_2FA344: # CODE XREF: sub_2F98E0+A58j
- ROM:002FA344 jal Random_Number_Generator
- ROM:002FA348 mfhi $s1 # s1 = Group Mod 2
- ROM:002FA34C lw $v1, dword_451680 # Load Number of Groups
- ROM:002FA354 bnez $v1, loc_2FA360 # Branch if Number of Groups != 0
- ROM:002FA358 div $v0, $v1 # Random / Number of Groups
- ROM:002FA35C break 7
- ROM:002FA360
- ROM:002FA360 loc_2FA360: # CODE XREF: sub_2F98E0+A74j
- ROM:002FA360 mfhi $v0 # v0 = Group Mod 3
- ROM:002FA364 beq $s1, $v0, loc_2FA3A8 # Branch if Group Mod 2 = Group Mod 3
- ROM:002FA368 nop
- ROM:002FA36C lui $v1, 0x45 # 'E'
- ROM:002FA370 sll $a0, $s1, 3 # Group Mod 2 * 8
- ROM:002FA374 la $v1, dword_451680 # v1 = Pointer to Number of Groups
- ROM:002FA378 sll $v0, 3 # Group Mod 3 * 8
- ROM:002FA37C addu $a2, $v1, $a0 # a2 = Group Mod 2 Pointer
- ROM:002FA380 addiu $s3, -1 # Group Mod --
- ROM:002FA384 addu $v1, $v0 # v1 = Group Mod 3 Pointer
- ROM:002FA388 lw $a1, 4($a2) # Load Group A's Enemy ID
- ROM:002FA38C lw $a0, 8($a2) # Load Group A's Quantity
- ROM:002FA390 lw $v0, 4($v1) # Load Group B's Enemy ID
- ROM:002FA394 sw $v0, 4($a2) # Store Group B's Enemy ID = Group A's Enemy ID
- ROM:002FA398 lw $v0, 8($v1) # Load Group B's Quantity
- ROM:002FA39C sw $v0, 8($a2) # Store Group B's Quantity = Group A's Quantity
- ROM:002FA3A0 sw $a1, 4($v1) # Store Group A's Enemy ID = Group B's Enemy ID
- ROM:002FA3A4 sw $a0, 8($v1) # Store Group A's Quantity = Group B's Quantity
- ROM:002FA3A8
- ROM:002FA3A8 loc_2FA3A8: # CODE XREF: sub_2F98E0:loc_2FA320j
- ROM:002FA3A8 # sub_2F98E0+A84j
- ROM:002FA3A8 bgtz $s3, loc_2FA328 # Branch if Group Mod > 0
- ROM:002FA3AC nop # This is just for randomizing group order
- gp-0x62c4 = Stack Pointer 1
- NOTE: Subtract var_'s hex value from 0x220 to get the amount to add to the
- stack pointer. Remember, loading/storing a value with a positive offset mod
- moves towards var_0, since it's adding to a negative. This includes values
- stored -> storing a word at var_10 would store down to var_0d.
- var_10 = Pointer to First Enemy's Formation Data
- var_14 = Available Flag
- var_18 = Current Groups
- var_1c = Next Stack Pointer = 0 -> Stack Pointer 4
- var_20 = Pointer to Set 1 Code Pointers
- var_30 = Pointer to Second Enemy's Formation Data
- var_34 = Available Flag
- var_38 = Current Groups
- var_3c = Next Stack Pointer = 0 -> Stack Pointer 7
- var_40 = Pointer to Default -> Set 1 Code Pointers
- var_50 = Pointer to Third Enemy's Formation Data
- var_54 = Available Flag
- var_58 = Current Groups
- var_5c = Next Stack Pointer = 0 -> Stack Pointer 10
- var_60 = Pointer to Default -> Set 1 Code Pointers
- var_70 = Pointer to Fourth Enemy's Formation Data
- var_74 = Available Flag
- var_78 = Current Groups
- var_7c = Next Stack Pointer = 0 -> Stack Pointer 13
- var_80 = Pointer to Default -> Set 1 Code Pointers
- var_90 = Pointer to Fifth Enemy's Formation Data
- var_94 = Available Flag
- var_98 = Current Groups
- var_9c = Next Stack Pointer = 0 -> Stack Pointer 16
- var_a0 = Pointer to Default -> Set 1 Code Pointers
- var_b0 = Pointer to Sixth Enemy's Formation Data
- /First Special Group's Stack Data
- var_b4 = Available Flag
- var_b8 = Current Groups (0 if Special)
- var_bc = Next Stack Pointer = 0 -> Stack Pointer 19
- var_c0 = Pointer to Default -> Set 2 Code Pointers
- var_d0 = Pointer to Seventh Enemy's Formation Data
- /Second Special Group's Stack Data
- var_d4 = Available Flag
- var_d8 = Current Groups (0 if Special)
- var_dc = Next Stack Pointer = 0 -> Stack Pointer 22
- var_e0 = Pointer to Default -> Set 2 Code Pointers
- var_f0 = Pointer to Eighth Enemy's Formation Data
- /Third Special Group's Stack Data
- var_f4 = Available Flag
- var_f8 = Current Groups (0 if Special)
- var_fc = Next Stack Pointer = 0 -> Stack Pointer 25
- var_100 = Pointer to Default -> Set 2 Code Pointers
- var_110 = Pointer to Ninth Enemy's Formation Data
- /Fourth Special Group's Stack Data
- var_114 = Available Flag
- var_118 = Current Groups (0 if Special)
- var_11c = Next Stack Pointer = 0 -> Stack Pointer 28
- var_120 = Pointer to Default -> Set 2 Code Pointers
- var_130 = Pointer to Tenth Enemy's Formation Data
- var_134 = Available Flag
- var_138 = Current Groups
- var_13c = Next Stack Pointer = 0 -> Stack Pointer 31
- var_140 = Pointer to Default -> Set 2 Code Pointers
- var_150 = Stack Pointer 37
- var_154 = Stack Pointer 36
- var_158 = Stack Pointer 35
- var_15c = Stack Pointer 34
- var_15e = Enemy ID 4
- var_15f = Quantity 4 (+1 for total; basically extra enemy quantity)
- var_160 = Encounter Rate 4
- var_162 = Enemy ID 3
- var_163 = Quantity 3
- var_164 = Encounter Rate 3
- var_166 = Enemy ID 2
- var_167 = Quantity 2
- var_168 = Encounter Rate 2
- var_16a = Enemy ID 1
- var_16b = Quantity 1
- var_16c = Encounter Rate 1
- var_170 = Pointer to Special Formation Data
- var_174 = Available Flag
- var_178 = Current Groups
- var_17c = Next Stack Pointer = 0
- var_180 = Pointer to Default -> Special Formation Code Pointers
- var_190 = ra (these are stored at the start)
- var_1a0 = fp
- var_1b0 = s7
- var_1c0 = s6
- var_1d0 = s5
- var_1e0 = s4
- var_1f0 = s3
- var_200 = s2
- var_210 = s1
- var_220 = s0
- Stack Pointer 1 = var_20
- Stack Pointer 2 = var_10
- Stack Pointer 3 = var_34
- Stack Pointer 4 = var_40
- Stack Pointer 5 = var_30
- Stack Pointer 6 = var_54
- Stack Pointer 7 = var_60
- Stack Pointer 8 = var_50
- Stack Pointer 9 = var_74
- Stack Pointer 10 = var_80
- Stack Pointer 11 = var_70
- Stack Pointer 12 = var_94
- Stack Pointer 13 = var_a0
- Stack Pointer 14 = var_90
- Stack Pointer 15 = var_b4
- Stack Pointer 16 = var_c0
- Stack Pointer 17 = var_b0
- Stack Pointer 18 = var_d4
- Stack Pointer 19 = var_e0
- Stack Pointer 20 = var_d0
- Stack Pointer 21 = var_f4
- Stack Pointer 22 = var_100
- Stack Pointer 23 = var_f0 (not shown; due to frame pointer)
- Stack Pointer 24 = var_114
- Stack Pointer 25 = var_120
- Stack Pointer 26 = var_110
- Stack Pointer 27 = var_134
- Stack Pointer 28 = var_140
- Stack Pointer 29 = var_130
- Stack Pointer 30 = var_174
- Stack Pointer 31 = var_180
- Stack Pointer 32 = var_14
- Stack Pointer 33 = var_170
- Stack Pointer 34 = var_c0
- Stack Pointer 35 = var_e0
- Stack Pointer 36 = var_100
- Stack Pointer 37 = var_120
- Special Formation Code Pointers = 0x3d10e0
- 0x00 - 00000000
- 0x04 - 00000000
- 0x08 - 002f9460
- 0x0c - 002f92f0
- 0x10 - 002f92e0
- 0x14 - 002f92d0
- 0x18 - 002f9490
- 0x1c - 00000000
- Default Code Pointers = 0x3d1100
- 0x00 - 00000000
- 0x04 - 00000000
- 0x08 - 00000000
- 0x0c - 00000000
- 0x10 - 00000000
- 0x14 - 00000000
- 0x18 - 00000000
- 0x1c - 00000000
- Formation Set 2 Code Pointers = 0x3d1120
- 0x00 - 00000000
- 0x04 - 00000000
- 0x08 - 002f9580
- 0x0c - 002f9560
- 0x10 - 002f9550
- 0x14 - 002f94d0
- 0x18 - 002f95b0
- 0x1c - 00000000
- Formation Set 1 Code Pointers = 0x3d1140
- 0x00 - 00000000
- 0x04 - 00000000
- 0x08 - 002f9670
- 0x0c - 002f9650
- 0x10 - 002f9640
- 0x14 - 002f95f0
- 0x18 - 002f96a0
- 0x1c - 00000000
- v0 = Stack Pointer 27 -> Free
- v1 = Stack Pointer 24 -> Free
- a0 = Stack Pointer 21 -> Free
- a1 = Stack Pointer 20 -> Free
- a2 = Stack Pointer 18 -> Free
- a3 = Stack Pointer 17 -> Free
- t0 = Stack Pointer 15 -> Free
- t1 = Stack Pointer 14 -> Free
- t2 = Stack Pointer 12 -> Free
- t3 = Stack Pointer 11 -> Free
- t4 = Stack Pointer 9 -> Free
- t5 = Stack Pointer 8 -> Free
- t6 = Stack Pointer 6 -> Free
- t7 - Stack Pointer 5 -> Free
- t8 = Stack Pointer 32 -> Free
- s1 = Stack Pointer 3 -> Free
- s2 = Pointer to Formation File Data Pointer
- s3 = Stack Pointer 26 -> Stack Pointer 33 -> Free
- s4 = Stack Pointer 30 -> Free
- s6 = Stack Pointer 2 -> Free
- s7 = Stack Pointer 29 -> Free
- fp/s8 = Stack Pointer 23 -> Free
- After checking if the slots are available, all of the registers except s2 are
- freed up. It temporarily holds 20 registers JUST for a simple calculation.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement