ATTACK.OUT Save text string data for Deployment screen
Jump to navigation
Jump to search
NOTE: This routine seems to be bugged, though it would be hard to notice without a roster filled past the vanilla limit of 16. If the text limit of 0x4000 bytes is hit, it breaks out of the loop with "beq r2,r0,0x001c98e8" - but branching to 0x001c98e8 skips some of the code outside of the loop that specifically only saves to the section immediately after the limit. This causes the help text on the deployment screen to bug out, because a vital text pointer set by the skipped section does not get set, and because it means that loading and saving '0x1400' bytes of text data gets skipped!
001c9488: 27bdffa8 addiu r29,r29,0xffa8 001c948c: afb00030 sw r16,0x0030(r29) 001c9490: 3c10801d lui r16,0x801d 001c9494: 2610f938 addiu r16,r16,0xf938 001c9498: 3c040001 lui r4,0x0001 001c949c: 34848000 ori r4,r4,0x8000 001c94a0: afbf0054 sw r31,0x0054(r29) 001c94a4: afbe0050 sw r30,0x0050(r29) 001c94a8: afb7004c sw r23,0x004c(r29) 001c94ac: afb60048 sw r22,0x0048(r29) 001c94b0: afb50044 sw r21,0x0044(r29) 001c94b4: afb40040 sw r20,0x0040(r29) 001c94b8: afb3003c sw r19,0x003c(r29) 001c94bc: afb20038 sw r18,0x0038(r29) 001c94c0: 0c011105 jal 0x00044414 # SCUS MRTA Malloc 001c94c4: afb10034 sw r17,0x0034(r29) 001c94c8: 3c038004 lui r3,0x8004 001c94cc: 24634954 addiu r3,r3,0x4954 001c94d0: 34041a3a ori r4,r0,0x1a3a 001c94d4: 3c050001 lui r5,0x0001 001c94d8: 34a56800 ori r5,r5,0x6800 001c94dc: 0040b821 addu r23,r2,r0 001c94e0: 3c018017 lui r1,0x8017 001c94e4: ac233ca8 sw r3,0x3ca8(r1) 001c94e8: 0c0533ad jal 0x0014ceb4 # Call Inner Subroutine 001c94ec: 02e03021 addu r6,r23,r0 001c94f0: 0c04d008 jal 0x00134020 # 00134020 - 00134070 001c94f4: 00009821 addu r19,r0,r0 # r19 = Roster Index = 0 001c94f8: 0c072511 jal 0x001c9444 # ATTACK.OUT 001c9444 - 001c9484 001c94fc: 02e02021 addu r4,r23,r0 001c9500: 341400fe ori r20,r0,0x00fe 001c9504: 26154000 addiu r21,r16,0x4000 001c9508: 3c1e801d lui r30,0x801d 001c950c: 27dea10c addiu r30,r30,0xa10c 001c9510: 27d6000a addiu r22,r30,0x000a 001c9514: 0c0166bc jal 0x00059af0 # Get Party Data Pointer 001c9518: 02602021 addu r4,r19,r0 001c951c: 00402021 addu r4,r2,r0 001c9520: 90830001 lbu r3,0x0001(r4) # r3 = unit's roster index 001c9524: 340200ff ori r2,r0,0x00ff # r2 = 0xFF 001c9528: 10620007 beq r3,r2,0x001c9548 # Branch if roster slot is empty 001c952c: 2a620010 slti r2,r19,0x0010 # r2 = 0x01 if index below the Guest slots 001c9530: 10400006 beq r2,r0,0x001c954c # Branch forward if no more party members left to check 001c9534: 3402000a ori r2,r0,0x000a # r2 = 0x0A (number of loops) 001c9538: 908200d0 lbu r2,0x00d0(r4) # r2 = Unit's Proposition Byte 001c953c: 00000000 nop 001c9540: 10400008 beq r2,r0,0x001c9564 # Branch if no value in the Proposition Byte 001c9544: 34040001 ori r4,r0,0x0001 # r4 = 0x01 001c9548: 3402000a ori r2,r0,0x000a # r2 = 0x0a (number of loops) 001c954c: a2140000 sb r20,0x0000(r16) # Save 0xFE to the next byte (0xFE = end of string) 001c9550: 2442ffff addiu r2,r2,0xffff # r2 -- 001c9554: 0441fffd bgez r2,0x001c954c # Loop back until a negative value, adding 1 to the r16 pointer each time 001c9558: 26100001 addiu r16,r16,0x0001 # r16 ++ 001c955c: 08072624 j 0x001c9890 001c9560: 26730001 addiu r19,r19,0x0001 001c9564: 0c0716f8 jal 0x001c5be0 # ATTACK.OUT Copy Unit Data to Status Billboard 001c9568: 02602821 addu r5,r19,r0 001c956c: 00008821 addu r17,r0,r0 001c9570: 03c09021 addu r18,r30,r0 001c9574: 86440000 lh r4,0x0000(r18) 001c9578: 00000000 nop 001c957c: 10800005 beq r4,r0,0x001c9594 001c9580: 00801821 addu r3,r4,r0 001c9584: 306307ff andi r3,r3,0x07ff 001c9588: 340207ff ori r2,r0,0x07ff 001c958c: 14620004 bne r3,r2,0x001c95a0 001c9590: 00000000 nop 001c9594: a2140000 sb r20,0x0000(r16) 001c9598: 08072581 j 0x001c9604 001c959c: 26100001 addiu r16,r16,0x0001 001c95a0: 0c04ca09 jal 0x00132824 # Prep for Loading Text 001c95a4: 24846800 addiu r4,r4,0x6800 001c95a8: 00401821 addu r3,r2,r0 001c95ac: 90620000 lbu r2,0x0000(r3) 001c95b0: 00000000 nop 001c95b4: a2020000 sb r2,0x0000(r16) 001c95b8: 26100001 addiu r16,r16,0x0001 001c95bc: 9202ffff lbu r2,-0x0001(r16) 001c95c0: 00000000 nop 001c95c4: 304200fe andi r2,r2,0x00fe 001c95c8: 1054000e beq r2,r20,0x001c9604 001c95cc: 24630001 addiu r3,r3,0x0001 001c95d0: 340400fe ori r4,r0,0x00fe 001c95d4: 0215102b sltu r2,r16,r21 001c95d8: 104000c3 beq r2,r0,0x001c98e8 # Branch to END if 0x4000 bytes of text have been saved. 001c95dc: 00000000 nop 001c95e0: 90620000 lbu r2,0x0000(r3) 001c95e4: 00000000 nop 001c95e8: a2020000 sb r2,0x0000(r16) 001c95ec: 26100001 addiu r16,r16,0x0001 001c95f0: 9202ffff lbu r2,-0x0001(r16) 001c95f4: 00000000 nop 001c95f8: 304200fe andi r2,r2,0x00fe 001c95fc: 1444fff5 bne r2,r4,0x001c95d4 001c9600: 24630001 addiu r3,r3,0x0001 001c9604: 26310001 addiu r17,r17,0x0001 001c9608: 2a220005 slti r2,r17,0x0005 001c960c: 1440ffd9 bne r2,r0,0x001c9574 001c9610: 26520002 addiu r18,r18,0x0002 001c9614: 3c02801d lui r2,0x801d 001c9618: 8442a0f6 lh r2,-0x5f0a(r2) 001c961c: 00000000 nop 001c9620: 1040002c beq r2,r0,0x001c96d4 001c9624: 00008821 addu r17,r0,r0 001c9628: 02c09021 addu r18,r22,r0 001c962c: 86440000 lh r4,0x0000(r18) 001c9630: 00000000 nop 001c9634: 10800005 beq r4,r0,0x001c964c 001c9638: 00801821 addu r3,r4,r0 001c963c: 306307ff andi r3,r3,0x07ff 001c9640: 340207ff ori r2,r0,0x07ff 001c9644: 14620004 bne r3,r2,0x001c9658 001c9648: 00000000 nop 001c964c: a2140000 sb r20,0x0000(r16) 001c9650: 080725af j 0x001c96bc 001c9654: 26100001 addiu r16,r16,0x0001 001c9658: 0c04ca09 jal 0x00132824 # Prep for Loading Text 001c965c: 24847800 addiu r4,r4,0x7800 001c9660: 00401821 addu r3,r2,r0 001c9664: 90620000 lbu r2,0x0000(r3) 001c9668: 00000000 nop 001c966c: a2020000 sb r2,0x0000(r16) 001c9670: 26100001 addiu r16,r16,0x0001 001c9674: 9202ffff lbu r2,-0x0001(r16) 001c9678: 00000000 nop 001c967c: 304200fe andi r2,r2,0x00fe 001c9680: 1054000e beq r2,r20,0x001c96bc 001c9684: 24630001 addiu r3,r3,0x0001 001c9688: 340400fe ori r4,r0,0x00fe 001c968c: 0215102b sltu r2,r16,r21 001c9690: 10400095 beq r2,r0,0x001c98e8 # Branch to END if 0x4000 bytes of text have been saved. 001c9694: 00000000 nop 001c9698: 90620000 lbu r2,0x0000(r3) 001c969c: 00000000 nop 001c96a0: a2020000 sb r2,0x0000(r16) 001c96a4: 26100001 addiu r16,r16,0x0001 001c96a8: 9202ffff lbu r2,-0x0001(r16) 001c96ac: 00000000 nop 001c96b0: 304200fe andi r2,r2,0x00fe 001c96b4: 1444fff5 bne r2,r4,0x001c968c 001c96b8: 24630001 addiu r3,r3,0x0001 001c96bc: 26310001 addiu r17,r17,0x0001 001c96c0: 2a220005 slti r2,r17,0x0005 001c96c4: 1440ffd9 bne r2,r0,0x001c962c 001c96c8: 26520002 addiu r18,r18,0x0002 001c96cc: 08072608 j 0x001c9820 001c96d0: 00000000 nop 001c96d4: 02c09021 addu r18,r22,r0 001c96d8: 86450000 lh r5,0x0000(r18) 001c96dc: 00000000 nop 001c96e0: 10a00005 beq r5,r0,0x001c96f8 001c96e4: 00a01821 addu r3,r5,r0 001c96e8: 306307ff andi r3,r3,0x07ff 001c96ec: 340207ff ori r2,r0,0x07ff 001c96f0: 14620004 bne r3,r2,0x001c9704 001c96f4: 34049800 ori r4,r0,0x9800 001c96f8: a2140000 sb r20,0x0000(r16) 001c96fc: 080725da j 0x001c9768 001c9700: 26100001 addiu r16,r16,0x0001 001c9704: 0c04ca09 jal 0x00132824 # Prep for Loading Text 001c9708: 00a42021 addu r4,r5,r4 001c970c: 00401821 addu r3,r2,r0 001c9710: 90620000 lbu r2,0x0000(r3) 001c9714: 00000000 nop 001c9718: a2020000 sb r2,0x0000(r16) 001c971c: 26100001 addiu r16,r16,0x0001 001c9720: 9202ffff lbu r2,-0x0001(r16) 001c9724: 00000000 nop 001c9728: 304200fe andi r2,r2,0x00fe 001c972c: 1054000e beq r2,r20,0x001c9768 001c9730: 24630001 addiu r3,r3,0x0001 001c9734: 340400fe ori r4,r0,0x00fe 001c9738: 0215102b sltu r2,r16,r21 001c973c: 1040006a beq r2,r0,0x001c98e8 # Branch to END if 0x4000 bytes of text have been saved. 001c9740: 00000000 nop 001c9744: 90620000 lbu r2,0x0000(r3) 001c9748: 00000000 nop 001c974c: a2020000 sb r2,0x0000(r16) 001c9750: 26100001 addiu r16,r16,0x0001 001c9754: 9202ffff lbu r2,-0x0001(r16) 001c9758: 00000000 nop 001c975c: 304200fe andi r2,r2,0x00fe 001c9760: 1444fff5 bne r2,r4,0x001c9738 001c9764: 24630001 addiu r3,r3,0x0001 001c9768: 26310001 addiu r17,r17,0x0001 001c976c: 2a220002 slti r2,r17,0x0002 001c9770: 1440ffd9 bne r2,r0,0x001c96d8 001c9774: 26520002 addiu r18,r18,0x0002 001c9778: 34110002 ori r17,r0,0x0002 001c977c: 26d20004 addiu r18,r22,0x0004 001c9780: 86440000 lh r4,0x0000(r18) 001c9784: 00000000 nop 001c9788: 10800005 beq r4,r0,0x001c97a0 001c978c: 00801821 addu r3,r4,r0 001c9790: 306307ff andi r3,r3,0x07ff 001c9794: 340207ff ori r2,r0,0x07ff 001c9798: 14620004 bne r3,r2,0x001c97ac 001c979c: 00000000 nop 001c97a0: a2140000 sb r20,0x0000(r16) 001c97a4: 08072604 j 0x001c9810 001c97a8: 26100001 addiu r16,r16,0x0001 001c97ac: 0c04ca09 jal 0x00132824 # Prep for Loading Text 001c97b0: 24847800 addiu r4,r4,0x7800 001c97b4: 00401821 addu r3,r2,r0 001c97b8: 90620000 lbu r2,0x0000(r3) 001c97bc: 00000000 nop 001c97c0: a2020000 sb r2,0x0000(r16) 001c97c4: 26100001 addiu r16,r16,0x0001 001c97c8: 9202ffff lbu r2,-0x0001(r16) 001c97cc: 00000000 nop 001c97d0: 304200fe andi r2,r2,0x00fe 001c97d4: 1054000e beq r2,r20,0x001c9810 001c97d8: 24630001 addiu r3,r3,0x0001 001c97dc: 340400fe ori r4,r0,0x00fe 001c97e0: 0215102b sltu r2,r16,r21 001c97e4: 10400040 beq r2,r0,0x001c98e8 # Branch to END if 0x4000 bytes of text have been saved. 001c97e8: 00000000 nop 001c97ec: 90620000 lbu r2,0x0000(r3) 001c97f0: 00000000 nop 001c97f4: a2020000 sb r2,0x0000(r16) 001c97f8: 26100001 addiu r16,r16,0x0001 001c97fc: 9202ffff lbu r2,-0x0001(r16) 001c9800: 00000000 nop 001c9804: 304200fe andi r2,r2,0x00fe 001c9808: 1444fff5 bne r2,r4,0x001c97e0 001c980c: 24630001 addiu r3,r3,0x0001 001c9810: 26310001 addiu r17,r17,0x0001 001c9814: 2a220005 slti r2,r17,0x0005 001c9818: 1440ffd9 bne r2,r0,0x001c9780 001c981c: 26520002 addiu r18,r18,0x0002 001c9820: 3c04801d lui r4,0x801d 001c9824: 8484a0ca lh r4,-0x5f36(r4) 001c9828: 0c04ca09 jal 0x00132824 # Prep for Loading Text 001c982c: 24846000 addiu r4,r4,0x6000 001c9830: 00401821 addu r3,r2,r0 001c9834: 90620000 lbu r2,0x0000(r3) 001c9838: 00000000 nop 001c983c: a2020000 sb r2,0x0000(r16) 001c9840: 26100001 addiu r16,r16,0x0001 001c9844: 9202ffff lbu r2,-0x0001(r16) 001c9848: 00000000 nop 001c984c: 304200fe andi r2,r2,0x00fe 001c9850: 1054000e beq r2,r20,0x001c988c 001c9854: 24630001 addiu r3,r3,0x0001 001c9858: 340400fe ori r4,r0,0x00fe 001c985c: 0215102b sltu r2,r16,r21 001c9860: 10400021 beq r2,r0,0x001c98e8 # Branch to END if 0x4000 bytes of text have been saved. 001c9864: 00000000 nop 001c9868: 90620000 lbu r2,0x0000(r3) 001c986c: 00000000 nop 001c9870: a2020000 sb r2,0x0000(r16) 001c9874: 26100001 addiu r16,r16,0x0001 001c9878: 9202ffff lbu r2,-0x0001(r16) 001c987c: 00000000 nop 001c9880: 304200fe andi r2,r2,0x00fe 001c9884: 1444fff5 bne r2,r4,0x001c985c 001c9888: 24630001 addiu r3,r3,0x0001 001c988c: 26730001 addiu r19,r19,0x0001 001c9890: 2a620010 slti r2,r19,0x0010 # r2 = 0x01 if index below the Guest slots 001c9894: 1440ff1f bne r2,r0,0x001c9514 # Branch back if still party members left to check 001c9898: 00000000 nop
## not END, but should be? if not for a bug? 001c989c: 3c02801d lui r2,0x801d 001c98a0: 2442f938 addiu r2,r2,0xf938 001c98a4: 3c10801d lui r16,0x801d 001c98a8: 26103938 addiu r16,r16,0x3938 001c98ac: 3c01801d lui r1,0x801d 001c98b0: ac225fb8 sw r2,0x5fb8(r1) 001c98b4: 3c01801d lui r1,0x801d 001c98b8: ac305fbc sw r16,0x5fbc(r1) 001c98bc: 0c04ca09 jal 0x00132824 # Prep for Loading Text 001c98c0: 34045800 ori r4,r0,0x5800 001c98c4: 00401821 addu r3,r2,r0 001c98c8: 00009821 addu r19,r0,r0 001c98cc: 90620000 lbu r2,0x0000(r3) 001c98d0: 24630001 addiu r3,r3,0x0001 001c98d4: 26730001 addiu r19,r19,0x0001 001c98d8: a2020000 sb r2,0x0000(r16) 001c98dc: 2a621400 slti r2,r19,0x1400 001c98e0: 1440fffa bne r2,r0,0x001c98cc 001c98e4: 26100001 addiu r16,r16,0x0001
## END (bugged? it seems like the actual END should be 0x001C989C) 001c98e8: 0c04d01d jal 0x00134074 # 00134074 - 001340a8 001c98ec: 00000000 nop 001c98f0: 0c011273 jal 0x000449cc # SCUS Call Free 001c98f4: 02e02021 addu r4,r23,r0 001c98f8: 8fbf0054 lw r31,0x0054(r29) 001c98fc: 8fbe0050 lw r30,0x0050(r29) 001c9900: 8fb7004c lw r23,0x004c(r29) 001c9904: 8fb60048 lw r22,0x0048(r29) 001c9908: 8fb50044 lw r21,0x0044(r29) 001c990c: 8fb40040 lw r20,0x0040(r29) 001c9910: 8fb3003c lw r19,0x003c(r29) 001c9914: 8fb20038 lw r18,0x0038(r29) 001c9918: 8fb10034 lw r17,0x0034(r29) 001c991c: 8fb00030 lw r16,0x0030(r29) 001c9920: 27bd0058 addiu r29,r29,0x0058 001c9924: 03e00008 jr r31 001c9928: 00000000 nop