ATTACK.OUT Save text string data for Deployment screen

From Final Fantasy Hacktics Wiki
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