Difference between revisions of "Load WEP/EFF graphics from WEP1/EFF Sheet"

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
(will continue tomorrow, doing my best to flesh this out)
(it's getting late again, I've been at this all day going frame by frame)
Line 3: Line 3:
 
Expects r4 = pointer to miscellaneous unit data (presumably for attacker).
 
Expects r4 = pointer to miscellaneous unit data (presumably for attacker).
 
Expects r5 = WEP1 sprite data (lies within r4 table ^^)
 
Expects r5 = WEP1 sprite data (lies within r4 table ^^)
Expects r7 = 0x01 in the case of a broadsword at equal tile height.
+
Expects r6 to be something important, saved to and loaded from stack at r29 + 0x28
 
r19 & r18 & r17 = r4, however r19 is overridden quickly by r5.
 
r19 & r18 & r17 = r4, however r19 is overridden quickly by r5.
 
    
 
    
Line 27: Line 27:
 
   000852b8: 00220821 addu r1,r1,r2                r1 = 0x80090000 + ID * 2
 
   000852b8: 00220821 addu r1,r1,r2                r1 = 0x80090000 + ID * 2
 
   000852bc: 902243e5 lbu r2,0x43e5(r1)              load used weapon graphic ID
 
   000852bc: 902243e5 lbu r2,0x43e5(r1)              load used weapon graphic ID
   000852c0: 96710006 lhu r17,0x0006(r19)            load ? (palette seems like a reasonable guess)
+
   000852c0: 96710006 lhu r17,0x0006(r19)            load frame command? Counter
 
   000852c4: 000210c0 sll r2,r2,0x03  
 
   000852c4: 000210c0 sll r2,r2,0x03  
 
   000852c8: a7a20038 sh r2,0x0038(r29)              store used weapon graphic ID*8
 
   000852c8: a7a20038 sh r2,0x0038(r29)              store used weapon graphic ID*8
 
   000852cc: 8e75001c lw r21,0x001c(r19)            load SHP data
 
   000852cc: 8e75001c lw r21,0x001c(r19)            load SHP data
 
   000852d0: 8e740020 lw r20,0x0020(r19)            load SEQ data
 
   000852d0: 8e740020 lw r20,0x0020(r19)            load SEQ data
   000852d4: 16e00002 bne r23,r0,0x000852e0          branch if value(?) != 0 (dodge flag?)
+
   000852d4: 16e00002 bne r23,r0,0x000852e0          branch if value(?) != 0
 
   000852d8: 32d0ffff andi r16,r22,0xffff            r16 = animation #
 
   000852d8: 32d0ffff andi r16,r22,0xffff            r16 = animation #
   000852dc: 2631fffe addiu r17,r17,0xfffe          palette(?) - 2
+
   000852dc: 2631fffe addiu r17,r17,0xfffe          counter - 2
 
   000852e0: 2e020101 sltiu r2,r16,0x0101            set if animation < 0x101
 
   000852e0: 2e020101 sltiu r2,r16,0x0101            set if animation < 0x101
 
   000852e4: 14400004 bne r2,r0,0x000852f8            #branch if so
 
   000852e4: 14400004 bne r2,r0,0x000852f8            #branch if so
Line 42: Line 42:
 
   000852f4: 00101080 sll r2,r16,0x02                  | r2 = weapon anim*4
 
   000852f4: 00101080 sll r2,r16,0x02                  | r2 = weapon anim*4
 
   000852f8: 00541021 addu r2,r2,r20                  #r2 = WP anim*4 + SEQ data location
 
   000852f8: 00541021 addu r2,r2,r20                  #r2 = WP anim*4 + SEQ data location
   000852fc: 8c430000 lw r3,0x0000(r2)                load ??? from SEQ table (Make a new page for SEQ and SHP?) (Also note, this is definitely NOT an address, most of these words end in numbers that are not multiples of 4.)
+
   000852fc: 8c430000 lw r3,0x0000(r2)                load frame commands? Pointer from SEQ table (Make a new page for SEQ and SHP?)
 
   00085300: 2402ffff addiu r2,r0,0xffff              this seems to be a rather redundant check for garbage data.
 
   00085300: 2402ffff addiu r2,r0,0xffff              this seems to be a rather redundant check for garbage data.
   00085304: 14620005 bne r3,r2,0x0008531c            branch if ??? (from SEQ table) is not 0xffff
+
   00085304: 14620005 bne r3,r2,0x0008531c            branch if Frame command pointer? (from SEQ table) is not 0xffff
 
   00085308: 00161880 sll r3,r22,0x02                r3 = weapon anim*4
 
   00085308: 00161880 sll r3,r22,0x02                r3 = weapon anim*4
 
   0008530c: 34040009 ori r4,r0,0x0009                r4 = 0x9
 
   0008530c: 34040009 ori r4,r0,0x0009                r4 = 0x9
Line 52: Line 52:
 
   0008531c: 00741821 addu r3,r3,r20                animation*4 + SEQ data
 
   0008531c: 00741821 addu r3,r3,r20                animation*4 + SEQ data
 
   00085320: 00111400 sll r2,r17,0x10                r2 = r17 * 2^16
 
   00085320: 00111400 sll r2,r17,0x10                r2 = r17 * 2^16
   00085324: 8c650000 lw r5,0x0000(r3)              Load ??? from SEQ table AGAIN
+
   00085324: 8c650000 lw r5,0x0000(r3)              Load Frame commands? pointer from SEQ table AGAIN
 
   00085328: 00021403 sra r2,r2,0x10                r2 = first halfword of r17 (even though it was already a halfword and unsigned)
 
   00085328: 00021403 sra r2,r2,0x10                r2 = first halfword of r17 (even though it was already a halfword and unsigned)
   0008532c: 00a21021 addu r2,r5,r2                  r2 = r2 + r5
+
   0008532c: 00a21021 addu r2,r5,r2                  r2 = frame command? counter + frame command? location
   00085330: 90430000 lbu r3,0x0000(r2)              load ???
+
   00085330: 90430000 lbu r3,0x0000(r2)              load Frame command?
 
   00085334: 340200ff ori r2,r0,0x00ff
 
   00085334: 340200ff ori r2,r0,0x00ff
   00085338: 146200f5 bne r3,r2,0x00085710            branch if ??? is not ff
+
   00085338: 146200f5 bne r3,r2,0x00085710            branch if frame command? is not ff
 
   0008533c: 00111c00 sll r3,r17,0x10                r3 = r17 * 2^16 (Moves halfword to upper half)
 
   0008533c: 00111c00 sll r3,r17,0x10                r3 = r17 * 2^16 (Moves halfword to upper half)
 
   00085340: 26230001 addiu r3,r17,0x0001            r3 = r17 + 1
 
   00085340: 26230001 addiu r3,r17,0x0001            r3 = r17 + 1
   00085344: 00031400 sll r2,r3,0x10                   
+
   00085344: 00031400 sll r2,r3,0x10                  in the event that the first frame command? = ff, another 1 is added to r2, and increment is increased by an additional 1, also. (accounts for frames that are missing?)
 
   00085348: 00021403 sra r2,r2,0x10                a stupid long way of moving r17 to r2
 
   00085348: 00021403 sra r2,r2,0x10                a stupid long way of moving r17 to r2
 
   0008534c: 00a21021 addu r2,r5,r2                  r2 = r2 + r5
 
   0008534c: 00a21021 addu r2,r5,r2                  r2 = r2 + r5
   00085350: 90420000 lbu r2,0x0000(r2)              Load ???
+
   00085350: 90420000 lbu r2,0x0000(r2)              Load frame command?
 
   00085354: 24710001 addiu r17,r3,0x0001            r17 = r3 + 1
 
   00085354: 24710001 addiu r17,r3,0x0001            r17 = r3 + 1
   00085358: 2443ff2d addiu r3,r2,0xff2d            r3 = ??? - 0xd3
+
   00085358: 2443ff2d addiu r3,r2,0xff2d            r3 = frame command? - 0xd3
   0008535c: 2c62002d sltiu r2,r3,0x002d            set r2 = true if r3 < 0x00d2
+
   0008535c: 2c62002d sltiu r2,r3,0x002d            set r2 = true if r3 < 0x00d2 (if ??? > 0xd3)
 
   00085360: 104000e9 beq r2,r0,0x00085708          branch if not true
 
   00085360: 104000e9 beq r2,r0,0x00085708          branch if not true
   00085364: 00031080 sll r2,r3,0x02                r2 = r3 * 4
+
   00085364: 00031080 sll r2,r3,0x02                r2 = r3 * 4 (location pointer)
 
   00085368: 3c018007 lui r1,0x8007
 
   00085368: 3c018007 lui r1,0x8007
 
   0008536c: 00220821 addu r1,r1,r2                  r1 = 0x80070000 + r2
 
   0008536c: 00220821 addu r1,r1,r2                  r1 = 0x80070000 + r2
   00085370: 8c228028 lw r2,-0x7fd8(r1)              loads a word from the table at this location, based on weapon and angle (Link a new page with the table here? for example, broadsword down-left grabs the return value 0x80090430?)
+
   00085370: 8c228028 lw r2,-0x7fd8(r1)              loads a word from the table at this location, based on weapon and angle (Link a new page with the table here?)
 +
  ??? =
 +
  0xd3: 0x800856b8 (skipped by above conditional)
 +
  0xd4: 0x80085708
 +
  0xd5: 0x800853b4
 +
  0xd6: 0x80085420
 +
  0xd7: 0x80085700
 +
  0xd8: 0x800854a4
 +
  0xd9: 0x800853d4
 +
  0xda: 0x80085708
 +
  0xdb: 0x80085470
 +
  0xdc: 0x800853e4
 +
  0xdd: 0x800854d8
 +
  0xde: 0x80085318 (jumps further back in routine)
 +
  0xdf: 0x800853c8
 +
    0xe0, 0xe1: 0x80085318 (^)
 +
  0xe2: 0x800853f4
 +
    0xe3, 0xe4: 0x80085700
 +
  0xe5: 0x80085668
 +
      0xe6, 0xe7, 0xe8: 0x800853dc
 +
  0xe9: 0x80085700
 +
  0xea: 0x800853dc
 +
  0xeb: 0x80085394
 +
  0xec: 0x80085380
 +
  0xed, 0xee, 0xef, 0xf0, 0xf1: 0x80085700
 +
  0xf2: 0x800855ec
 +
      0xf3, 0xf4, 0xf5: 0x80085700
 +
  0xf6: 0x8008543c
 +
  0xf7: 0x8008560b
 +
  0xf8: 0x800853dc
 +
  0xf9: 0x8008550c
 +
  0xfa: 0x8008560b
 +
  0xfb: 0x800853dc
 +
  0xfc: 0x80085570
 +
  0xfd: 0x800856cc
 +
  0xfe: 0x800853a8
 +
  0xff: 0x800853ac (skipped by earlier conditional)
 
   00085374: 00000000 nop
 
   00085374: 00000000 nop
 
   00085378: 00400008 jr r2                          jumps to address
 
   00085378: 00400008 jr r2                          jumps to address
 +
 
   0008537c: 00000000 nop
 
   0008537c: 00000000 nop
 
   00085380: 96620018 lhu r2,0x0018(r19)
 
   00085380: 96620018 lhu r2,0x0018(r19)
Line 115: Line 152:
 
   00085418: 080214c6 j 0x00085318
 
   00085418: 080214c6 j 0x00085318
 
   0008541c: a7c20014 sh r2,0x0014(r30)
 
   0008541c: a7c20014 sh r2,0x0014(r30)
 +
 
   00085420: 3c028009 lui r2,0x8009
 
   00085420: 3c028009 lui r2,0x8009
   00085424: 8c42612c lw r2,0x612c(r2)
+
   00085424: 8c42612c lw r2,0x612c(r2) ? (word - only contains 1 byte of data?)
 
   00085428: 00000000 nop
 
   00085428: 00000000 nop
   0008542c: 144000a8 bne r2,r0,0x000856d0
+
   0008542c: 144000a8 bne r2,r0,0x000856d0 branch if word is not 0
   00085430: 00161080 sll r2,r22,0x02
+
   00085430: 00161080 sll r2,r22,0x02 r2 = weapon anim*4
 
   00085434: 080214c6 j 0x00085318
 
   00085434: 080214c6 j 0x00085318
 
   00085438: 26310001 addiu r17,r17,0x0001
 
   00085438: 26310001 addiu r17,r17,0x0001
Line 230: Line 268:
 
   000855e4: 080214c6 j 0x00085318
 
   000855e4: 080214c6 j 0x00085318
 
   000855e8: a6640016 sh r4,0x0016(r19)
 
   000855e8: a6640016 sh r4,0x0016(r19)
   000855ec: 26230001 addiu r3,r17,0x0001
+
 
   000855f0: 00112400 sll r4,r17,0x10
+
   000855ec: 26230001 addiu r3,r17,0x0001 Increment counter
   000855f4: 24710001 addiu r17,r3,0x0001
+
   000855f0: 00112400 sll r4,r17,0x10 queue dumbass compiler doing stupid shit
   000855f8: 00161080 sll r2,r22,0x02
+
   000855f4: 24710001 addiu r17,r3,0x0001 increment counter by 2
   000855fc: 00541021 addu r2,r2,r20
+
   000855f8: 00161080 sll r2,r22,0x02 r2 = weapon anim*4
   00085600: 00042403 sra r4,r4,0x10
+
   000855fc: 00541021 addu r2,r2,r20 weapon anim*4 + SEQ data pointer
   00085604: 00031c00 sll r3,r3,0x10
+
   00085600: 00042403 sra r4,r4,0x10 Close dumbass compiler doing stupid shit
   00085608: 8c420000 lw r2,0x0000(r2)
+
   00085604: 00031c00 sll r3,r3,0x10 queue even stupider shit
   0008560c: 00031c03 sra r3,r3,0x10
+
   00085608: 8c420000 lw r2,0x0000(r2) Load frame command locations?
   00085610: 00442021 addu r4,r2,r4
+
   0008560c: 00031c03 sra r3,r3,0x10 close even stupider shit
   00085614: 00431021 addu r2,r2,r3
+
   00085610: 00442021 addu r4,r2,r4 get location of first frame command? (???)
   00085618: 90900000 lbu r16,0x0000(r4)
+
   00085614: 00431021 addu r2,r2,r3 get location of second frame command? (???)
   0008561c: 90520000 lbu r18,0x0000(r2)
+
   00085618: 90900000 lbu r16,0x0000(r4) Load first frame command?
   00085620: 16000004 bne r16,r0,0x00085634
+
   0008561c: 90520000 lbu r18,0x0000(r2) Load second frame command?
   00085624: 00101040 sll r2,r16,0x01
+
   00085620: 16000004 bne r16,r0,0x00085634 Branch if first frame command? is 0
   00085628: 0c011282 jal 0x00044a08
+
   00085624: 00101040 sll r2,r16,0x01 r2 = Frame command? * 2
   0008562c: 3404000d ori r4,r0,0x000d
+
   00085628: 0c011282 jal 0x00044a08 [[00044a08 - 00044a30]]
   00085630: 00101040 sll r2,r16,0x01
+
   0008562c: 3404000d ori r4,r0,0x000d Move 0x0d into r5, then clear r4.
   00085634: 00501021 addu r2,r2,r16
+
   00085630: 00101040 sll r2,r16,0x01 r2 = Frame command? * 2
   00085638: 00021100 sll r2,r2,0x04
+
   00085634: 00501021 addu r2,r2,r16 r2 = Frame command? * 3
   0008563c: 244201d8 addiu r2,r2,0x01d8
+
   00085638: 00021100 sll r2,r2,0x04 r2 = Frame command? * 48
   00085640: 03c21021 addu r2,r30,r2
+
   0008563c: 244201d8 addiu r2,r2,0x01d8 r2 = Frame command? * 48 + 0x1d8
   00085644: 34030001 ori r3,r0,0x0001
+
   00085640: 03c21021 addu r2,r30,r2 r2 = Frame/Animation data pointer + Frame command * 48
   00085648: a4520004 sh r18,0x0004(r2)
+
   00085644: 34030001 ori r3,r0,0x0001 r3 = 0x1
   0008564c: a4400006 sh r0,0x0006(r2)
+
   00085648: a4520004 sh r18,0x0004(r2) Save second frame command?
   00085650: a443000a sh r3,0x000a(r2)
+
   0008564c: a4400006 sh r0,0x0006(r2) clears ??
   00085654: a4400012 sh r0,0x0012(r2)
+
   00085650: a443000a sh r3,0x000a(r2) saves 0x1 to ??
   00085658: a4400014 sh r0,0x0014(r2)
+
   00085654: a4400012 sh r0,0x0012(r2) clears ??
   0008565c: a4400016 sh r0,0x0016(r2)
+
   00085658: a4400014 sh r0,0x0014(r2) clears ??
   00085660: 080214c6 j 0x00085318
+
   0008565c: a4400016 sh r0,0x0016(r2) clears ??
   00085664: a4430000 sh r3,0x0000(r2)
+
   00085660: 080214c6 j 0x00085318 repeat part of the routine again?
 +
   00085664: a4430000 sh r3,0x0000(r2) clears ??
 +
 
 
   00085668: 26230001 addiu r3,r17,0x0001
 
   00085668: 26230001 addiu r3,r17,0x0001
 
   0008566c: 00112400 sll r4,r17,0x10
 
   0008566c: 00112400 sll r4,r17,0x10
Line 287: Line 327:
 
   000856c8: 00000000 nop
 
   000856c8: 00000000 nop
 
   000856cc: 00161080 sll r2,r22,0x02
 
   000856cc: 00161080 sll r2,r22,0x02
   000856d0: 00541021 addu r2,r2,r20
+
   000856d0: 00541021 addu r2,r2,r20 r2 = location of frame command? Pointer
   000856d4: 00111c00 sll r3,r17,0x10
+
   000856d4: 00111c00 sll r3,r17,0x10 queue compiler bullshit
   000856d8: 8c420000 lw r2,0x0000(r2)
+
   000856d8: 8c420000 lw r2,0x0000(r2) Load frame command? pointer
   000856dc: 00031c03 sra r3,r3,0x10
+
   000856dc: 00031c03 sra r3,r3,0x10 continued compiler bullshit
   000856e0: 00431021 addu r2,r2,r3
+
   000856e0: 00431021 addu r2,r2,r3 frame command location
   000856e4: 90420000 lbu r2,0x0000(r2)
+
   000856e4: 90420000 lbu r2,0x0000(r2) Load frame command?
 
   000856e8: 00000000 nop
 
   000856e8: 00000000 nop
   000856ec: 00021600 sll r2,r2,0x18
+
   000856ec: 00021600 sll r2,r2,0x18 Frame command? * 2^18
   000856f0: 00022e03 sra r5,r2,0x18
+
   000856f0: 00022e03 sra r5,r2,0x18 Frame command? * 2^18 / 2^18 (this makes the integer negative because. it can)
   000856f4: 2622fffe addiu r2,r17,0xfffe
+
   000856f4: 2622fffe addiu r2,r17,0xfffe r2 = frame command counter - 2
   000856f8: 080214c6 j 0x00085318
+
   000856f8: 080214c6 j 0x00085318 jumps back to earlier in routine
   000856fc: 00a28821 addu r17,r5,r2
+
   000856fc: 00a28821 addu r17,r5,r2 frame command counter = frame command counter - 2 - Frame command (wrap your head around that one)
 +
 
 
   00085700: 080214c6 j 0x00085318
 
   00085700: 080214c6 j 0x00085318
 
   00085704: 26310001 addiu r17,r17,0x0001
 
   00085704: 26310001 addiu r17,r17,0x0001
 +
 
   00085708: 080214c4 j 0x00085310
 
   00085708: 080214c4 j 0x00085310
 
   0008570c: 3404000d ori r4,r0,0x000d
 
   0008570c: 3404000d ori r4,r0,0x000d
Line 307: Line 349:
 
   00085714: 00a31821 addu r3,r5,r3                  r3 = r5 + r3
 
   00085714: 00a31821 addu r3,r5,r3                  r3 = r5 + r3
 
   00085718: 93c2013b lbu r2,0x013b(r30)              load hi/low/mid mod
 
   00085718: 93c2013b lbu r2,0x013b(r30)              load hi/low/mid mod
   0008571c: 90630000 lbu r3,0x0000(r3)              load ??? again
+
   0008571c: 90630000 lbu r3,0x0000(r3)              load frame command? again
 
   00085720: 00021040 sll r2,r2,0x01                  mod*2
 
   00085720: 00021040 sll r2,r2,0x01                  mod*2
 
   00085724: 00551021 addu r2,r2,r21                  mod*2 + SHP data
 
   00085724: 00551021 addu r2,r2,r21                  mod*2 + SHP data
 
   00085728: 94420000 lhu r2,0x0000(r2)              load frame
 
   00085728: 94420000 lhu r2,0x0000(r2)              load frame
 
   0008572c: 96640014 lhu r4,0x0014(r19)              load ??
 
   0008572c: 96640014 lhu r4,0x0014(r19)              load ??
   00085730: 00621821 addu r3,r3,r2                  frame + ???
+
   00085730: 00621821 addu r3,r3,r2                  frame + Frame command?
   00085734: 00832021 addu r4,r4,r3                  r4 = frame + ?? + ???
+
   00085734: 00832021 addu r4,r4,r3                  r4 = frame + ?? + Frame command?
   00085738: a7a40030 sh r4,0x0030(r29)              store frame?????
+
   00085738: a7a40030 sh r4,0x0030(r29)              store frame + ?? + Frame command?
 
   0008573c: 12e0000a beq r23,r0,0x00085768          branch if pv = 0?
 
   0008573c: 12e0000a beq r23,r0,0x00085768          branch if pv = 0?
   00085740: 26240001 addiu r4,r17,0x0001            increment animation counter? animation loading counter?
+
   00085740: 26240001 addiu r4,r17,0x0001            increment Frame command counter?
 
   00085744: 00041400 sll r2,r4,0x10
 
   00085744: 00041400 sll r2,r4,0x10
 
   00085748: 00021403 sra r2,r2,0x10                  queue further stupidity moving register values
 
   00085748: 00021403 sra r2,r2,0x10                  queue further stupidity moving register values
   0008574c: 00a21021 addu r2,r5,r2                  SHP + increment?
+
   0008574c: 00a21021 addu r2,r5,r2                  SHP data location + increment?
   00085750: 90420000 lbu r2,0x0000(r2)              load ???
+
   00085750: 90420000 lbu r2,0x0000(r2)              load Frame command?
 
   00085754: 96630012 lhu r3,0x0012(r19)              load ??
 
   00085754: 96630012 lhu r3,0x0012(r19)              load ??
   00085758: 24910001 addiu r17,r4,0x0001            increment again?
+
   00085758: 24910001 addiu r17,r4,0x0001            increment frame command counter again?
   0008575c: 00431021 addu r2,r2,r3                  r2 = ?? + ???
+
   0008575c: 00431021 addu r2,r2,r3                  r2 = ?? + Frame command?
 
   00085760: 080215db j 0x0008576c                    jump ahead
 
   00085760: 080215db j 0x0008576c                    jump ahead
   00085764: a662000a sh r2,0x000a(r19)              store 0x0a in WEp data
+
   00085764: a662000a sh r2,0x000a(r19)              store in 0x0A WEP data
 
   00085768: 24910001 addiu r17,r4,0x0001            increments r17 if skipped
 
   00085768: 24910001 addiu r17,r4,0x0001            increments r17 if skipped
   0008576c: 97a30030 lhu r3,0x0030(r29)              Load frame?????
+
   0008576c: 97a30030 lhu r3,0x0030(r29)              Load frame + ?? + Frame command?
 
   00085770: 00000000 nop
 
   00085770: 00000000 nop
 
   00085774: 00031080 sll r2,r3,0x02                  r2 = Frame?????*4
 
   00085774: 00031080 sll r2,r3,0x02                  r2 = Frame?????*4
   00085778: 00551021 addu r2,r2,r21                  SHP data to do with frame and attacking angle?
+
   00085778: 00551021 addu r2,r2,r21                  SHP data to do with frame, frame command, attacking angle(?)
 
   0008577c: 2c630201 sltiu r3,r3,0x0201              Set r3 = true if frame????? is less than 0x201
 
   0008577c: 2c630201 sltiu r3,r3,0x0201              Set r3 = true if frame????? is less than 0x201
 
   00085780: 8c550040 lw r21,0x0040(r2)              Loads another pointer from the pointer above
 
   00085780: 8c550040 lw r21,0x0040(r2)              Loads another pointer from the pointer above
Line 351: Line 393:
 
   000857c0: 00000000 nop
 
   000857c0: 00000000 nop
 
   000857c4: 000318c2 srl r3,r3,0x03                  r3 = r3/8
 
   000857c4: 000318c2 srl r3,r3,0x03                  r3 = r3/8
 
+
   000857c8: 00031840 sll r3,r3,0x01                  r3 = r3*2 (effectively r3/4)
   000857c8: 00031840 sll r3,r3,0x01                  r3 = r3*2
 
 
   000857cc: 3c018009 lui r1,0x8009
 
   000857cc: 3c018009 lui r1,0x8009
 
   000857d0: 00230821 addu r1,r1,r3
 
   000857d0: 00230821 addu r1,r1,r3
Line 363: Line 404:
 
   000857ec: 10600003 beq r3,r0,0x000857fc            branch if not animated? acting?
 
   000857ec: 10600003 beq r3,r0,0x000857fc            branch if not animated? acting?
 
   000857f0: 305400ff andi r20,r2,0x00ff              move r2 to r20
 
   000857f0: 305400ff andi r20,r2,0x00ff              move r2 to r20
   000857f4: 00041023 subu r2,r0,r4
+
   000857f4: 00041023 subu r2,r0,r4                   r2 = - Y axis spin
   000857f8: a642000c sh r2,0x000c(r18)                store ??
+
   000857f8: a642000c sh r2,0x000c(r18)                store - Y axis spin?
 
   000857fc: 2e820004 sltiu r2,r20,0x0004              set r2 = true if r20 < 0x4
 
   000857fc: 2e820004 sltiu r2,r20,0x0004              set r2 = true if r20 < 0x4
 
   00085800: 14400002 bne r2,r0,0x0008580c            branch if so
 
   00085800: 14400002 bne r2,r0,0x0008580c            branch if so
 
   00085804: 34020001 ori r2,r0,0x0001                r2 = 1
 
   00085804: 34020001 ori r2,r0,0x0001                r2 = 1
   00085808: 34140003 ori r20,r0,0x0003
+
   00085808: 34140003 ori r20,r0,0x0003               r20 = 3
   0008580c: 96630002 lhu r3,0x0002(r19)              (Talcall's note, getting late, will continue here tomorrow as I step by step 1 instruction at a time in my debugger)
+
   0008580c: 96630002 lhu r3,0x0002(r19)              load ?
   00085810: 92b70001 lbu r23,0x0001(r21)
+
   00085810: 92b70001 lbu r23,0x0001(r21)              load ? from WEP1 SHP data (are these like, expected values?)
   00085814: 10620005 beq r3,r2,0x0008582c
+
   00085814: 10620005 beq r3,r2,0x0008582c             Branch if ? = ?
   00085818: 34020002 ori r2,r0,0x0002
+
   00085818: 34020002 ori r2,r0,0x0002                 r2 = 2
   0008581c: 1062003a beq r3,r2,0x00085908
+
   0008581c: 1062003a beq r3,r2,0x00085908             Branch if ? = 2
   00085820: 32e20060 andi r2,r23,0x0060
+
   00085820: 32e20060 andi r2,r23,0x0060               moves 0x40, 0x20 bit flags to r2
 
   00085824: 08021675 j 0x000859d4
 
   00085824: 08021675 j 0x000859d4
   00085828: a6710006 sh r17,0x0006(r19)
+
   00085828: a6710006 sh r17,0x0006(r19)               Saves increment? to WEP Data
   0008582c: 32e20060 andi r2,r23,0x0060
+
   0008582c: 32e20060 andi r2,r23,0x0060               moves 0x40 and 0x20 bit flags into r2?
   00085830: 34420009 ori r2,r2,0x0009                r2 + 9
+
   00085830: 34420009 ori r2,r2,0x0009                r2 = all previous flags and 0x8, 0x1
   00085834: 00008021 addu r16,r0,r0
+
   00085834: 00008021 addu r16,r0,r0                   clears r16
   00085838: a6420004 sh r2,0x0004(r18)                store VRAM spritesheet ID
+
   00085838: a6420004 sh r2,0x0004(r18)                store VRAM spritesheet ID (??)
   0008583c: 8fac0028 lw r12,0x0028(r29)
+
   0008583c: 8fac0028 lw r12,0x0028(r29)              load ?? (r6 from start of routine)
 
   00085840: 97c20010 lhu r2,0x0010(r30)              load VRAM Palette ID
 
   00085840: 97c20010 lhu r2,0x0010(r30)              load VRAM Palette ID
   00085844: 000c1980 sll r3,r12,0x06                   
+
   00085844: 000c1980 sll r3,r12,0x06                  r3 = r12 * 64
   00085848: 00431021 addu r2,r2,r3
+
   00085848: 00431021 addu r2,r2,r3                    r2 = VRAM Palette + r3
   0008584c: 24420080 addiu r2,r2,0x0080
+
   0008584c: 24420080 addiu r2,r2,0x0080               r2 + 0x80
   00085850: 1280005f beq r20,r0,0x000859d0
+
   00085850: 1280005f beq r20,r0,0x000859d0           branch if r20 = 0
   00085854: a6420006 sh r2,0x0006(r18)                store VRAM palette ID
+
   00085854: a6420006 sh r2,0x0006(r18)                store VRAM palette ID + other nonsense
   00085858: 3205ffff andi r5,r16,0xffff
+
   00085858: 3205ffff andi r5,r16,0xffff               r5 = r16 (some kind of section counter)
   0008585c: 00051080 sll r2,r5,0x02
+
   0008585c: 00051080 sll r2,r5,0x02                   r2 = r5 * 4
   00085860: 24420002 addiu r2,r2,0x0002
+
   00085860: 24420002 addiu r2,r2,0x0002               r2 = r2 + 2
   00085864: 02a21021 addu r2,r21,r2                    WEP1 SHP + ??
+
   00085864: 02a21021 addu r2,r21,r2                    WEP1 SHP + section counter pointer?
   00085868: 02402021 addu r4,r18,r0
+
   00085868: 02402021 addu r4,r18,r0                   r4 = ? Display data
   0008586c: 26100001 addiu r16,r16,0x0001
+
   0008586c: 26100001 addiu r16,r16,0x0001             r16 + 1
   00085870: 944b0002 lhu r11,0x0002(r2)              load ??
+
   00085870: 944b0002 lhu r11,0x0002(r2)              load Graphic size?? (and tile offset??)
   00085874: 80460000 lb r6,0x0000(r2)                load ??
+
   00085874: 80460000 lb r6,0x0000(r2)                load X Shift
   00085878: 80470001 lb r7,0x0001(r2)                  load ??
+
   00085878: 80470001 lb r7,0x0001(r2)                  load Y Shift
 
   0008587c: 97ac0038 lhu r12,0x0038(r29)              load weapon graphic ID*8 (in battle sprite from WEP1)
 
   0008587c: 97ac0038 lhu r12,0x0038(r29)              load weapon graphic ID*8 (in battle sprite from WEP1)
   00085880: 31633c00 andi r3,r11,0x3c00              r3 = size
+
   00085880: 31633c00 andi r3,r11,0x3c00              r3 = size reference?
   00085884: 000319c2 srl r3,r3,0x07
+
   00085884: 000319c2 srl r3,r3,0x07                 r3 = size (?) / 128
   00085888: 316203ff andi r2,r11,0x03ff              r2 = Y Tile offset
+
   00085888: 316203ff andi r2,r11,0x03ff              r2 = Y Tile offset (total tile offset?)
 
   0008588c: 3048001f andi r8,r2,0x001f              r8 = X tile offset
 
   0008588c: 3048001f andi r8,r2,0x001f              r8 = X tile offset
 
   00085890: 000840c0 sll r8,r8,0x03                  X offset*8
 
   00085890: 000840c0 sll r8,r8,0x03                  X offset*8
   00085894: 00021142 srl r2,r2,0x05
+
   00085894: 00021142 srl r2,r2,0x05                 offset/32
   00085898: 000210c0 sll r2,r2,0x03                  Y offset*8
+
   00085898: 000210c0 sll r2,r2,0x03                  offset/32 * 8 (gets rid of X offset?)
   0008589c: 01821021 addu r2,r12,r2                  weapon graphic ID*8 + Y offset*8
+
   0008589c: 01821021 addu r2,r12,r2                  weapon graphic ID*8 + offset/32 * 8
 
   000858a0: 3c018009 lui r1,0x8009
 
   000858a0: 3c018009 lui r1,0x8009
   000858a4: 00230821 addu r1,r1,r3
+
   000858a4: 00230821 addu r1,r1,r3                   r1 = 0x80090000 + r3 (size?)
   000858a8: 8c2946c8 lw r9,0x46c8(r1)
+
   000858a8: 8c2946c8 lw r9,0x46c8(r1)                r9 = raw image width (word?)
 
   000858ac: 3c018009 lui r1,0x8009
 
   000858ac: 3c018009 lui r1,0x8009
 
   000858b0: 00230821 addu r1,r1,r3
 
   000858b0: 00230821 addu r1,r1,r3
   000858b4: 8c2a46cc lw r10,0x46cc(r1)
+
   000858b4: 8c2a46cc lw r10,0x46cc(r1)               r10 = raw image height
   000858b8: 32e30061 andi r3,r23,0x0061
+
   000858b8: 32e30061 andi r3,r23,0x0061             r3 = 0x40, 0x20, 0x1 bit flags
 
   000858bc: afa20014 sw r2,0x0014(r29)              store Y offset on WEP sheet to load from
 
   000858bc: afa20014 sw r2,0x0014(r29)              store Y offset on WEP sheet to load from
   000858c0: 3162c000 andi r2,r11,0xc000              r2 = X/Y reverse
+
   000858c0: 3162c000 andi r2,r11,0xc000              r2 = X/Y reverse (? bitflags?)
   000858c4: 00021342 srl r2,r2,0x0d  
+
   000858c4: 00021342 srl r2,r2,0x0d                
   000858c8: 00621825 or r3,r3,r2
+
   000858c8: 00621825 or r3,r3,r2                     stores bitflag on top of r3?
   000858cc: afa80010 sw r8,0x0010(r29)              store X tile offset
+
   000858cc: afa80010 sw r8,0x0010(r29)              store X tile (pixel?) offset
   000858d0: afa30020 sw r3,0x0020(r29)              store reversal bytes
+
   000858d0: afa30020 sw r3,0x0020(r29)              store reversal bytes (bit flags)
   000858d4: 00094cc0 sll r9,r9,0x13
+
   000858d4: 00094cc0 sll r9,r9,0x13                 r9 = raw image width * 8192
   000858d8: 00094c03 sra r9,r9,0x10
+
   000858d8: 00094c03 sra r9,r9,0x10                 r9 = raw image width * 8192 / 1024 (total r9 * 8)
 
   000858dc: 000a54c0 sll r10,r10,0x13
 
   000858dc: 000a54c0 sll r10,r10,0x13
   000858e0: 000a5403 sra r10,r10,0x10
+
   000858e0: 000a5403 sra r10,r10,0x10               same deal but with r10
   000858e4: afa90018 sw r9,0x0018(r29)
+
   000858e4: afa90018 sw r9,0x0018(r29)               save image width to stack
   000858e8: 0c01ed3b jal 0x0007b4ec
+
   000858e8: 0c01ed3b jal 0x0007b4ec                 [[Store Sprite Display Data]]
   000858ec: afaa001c sw r10,0x001c(r29)
+
   000858ec: afaa001c sw r10,0x001c(r29)             save image height to stack
 
    
 
    
   000858f0: 3202ffff andi r2,r16,0xffff
+
   000858f0: 3202ffff andi r2,r16,0xffff             r2 = r16
   000858f4: 0054102b sltu r2,r2,r20
+
   000858f4: 0054102b sltu r2,r2,r20                  set r2 = true if section counter (?) < r20
   000858f8: 1440ffd8 bne r2,r0,0x0008585c
+
   000858f8: 1440ffd8 bne r2,r0,0x0008585c           branch if so
   000858fc: 3205ffff andi r5,r16,0xffff
+
   000858fc: 3205ffff andi r5,r16,0xffff             r5 = r16
   00085900: 08021675 j 0x000859d4
+
   00085900: 08021675 j 0x000859d4                   jump ahead
   00085904: a6710006 sh r17,0x0006(r19)
+
   00085904: a6710006 sh r17,0x0006(r19)              save incremenet (?)
   00085908: 34420008 ori r2,r2,0x0008
+
   00085908: 34420008 ori r2,r2,0x0008               add 0x8 bit flag
   0008590c: 00008021 addu r16,r0,r0
+
   0008590c: 00008021 addu r16,r0,r0                 clears r16
   00085910: a6420004 sh r2,0x0004(r18)
+
   00085910: a6420004 sh r2,0x0004(r18)     save new bit flag? (Data sheet says VRAM spritesheet ID. I don't believe it)
   00085914: 8fac0028 lw r12,0x0028(r29)
+
   00085914: 8fac0028 lw r12,0x0028(r29)     Load ?? (R6 at start of routine)
   00085918: 97c20010 lhu r2,0x0010(r30)
+
   00085918: 97c20010 lhu r2,0x0010(r30)     Load VRAM palette ID
   0008591c: 000c1980 sll r3,r12,0x06
+
   0008591c: 000c1980 sll r3,r12,0x06     r3 = ?? * 64
   00085920: 00431021 addu r2,r2,r3
+
   00085920: 00431021 addu r2,r2,r3                   r2 = VRAM Palette ID + ?? * 64
   00085924: 24420080 addiu r2,r2,0x0080
+
   00085924: 24420080 addiu r2,r2,0x0080             r2 = r2 + 0x80
   00085928: 12800029 beq r20,r0,0x000859d0
+
   00085928: 12800029 beq r20,r0,0x000859d0     branch if r20 = 0
   0008592c: a6420006 sh r2,0x0006(r18)
+
   0008592c: a6420006 sh r2,0x0006(r18)               Save new VRAM Palette ID
   00085930: 3205ffff andi r5,r16,0xffff
+
   00085930: 3205ffff andi r5,r16,0xffff             r5 = r16 (section counter?)
   00085934: 00051080 sll r2,r5,0x02
+
   00085934: 00051080 sll r2,r5,0x02     r2 = r5 * 4
   00085938: 24420002 addiu r2,r2,0x0002
+
   00085938: 24420002 addiu r2,r2,0x0002     r2 = r2 + 2
   0008593c: 02a21021 addu r2,r21,r2
+
   0008593c: 02a21021 addu r2,r21,r2     r2 = SHP Data pointer + r2
   00085940: 02402021 addu r4,r18,r0
+
   00085940: 02402021 addu r4,r18,r0     r4 = ? Display pointer
   00085944: 26100001 addiu r16,r16,0x0001
+
   00085944: 26100001 addiu r16,r16,0x0001     increment section counter?
   00085948: 944b0002 lhu r11,0x0002(r2)
+
   00085948: 944b0002 lhu r11,0x0002(r2)     Load graphic size?? (And pixel offset?)
   0008594c: 80460000 lb r6,0x0000(r2)
+
   0008594c: 80460000 lb r6,0x0000(r2)     Load X shift
   00085950: 80470001 lb r7,0x0001(r2)
+
   00085950: 80470001 lb r7,0x0001(r2)     Load Y shift
   00085954: 31633c00 andi r3,r11,0x3c00
+
   00085954: 31633c00 andi r3,r11,0x3c00     Size reference?
   00085958: 000319c2 srl r3,r3,0x07
+
   00085958: 000319c2 srl r3,r3,0x07     Size reference? / 128
   0008595c: 316203ff andi r2,r11,0x03ff
+
   0008595c: 316203ff andi r2,r11,0x03ff     r2 = Pixel displacement? (Total?)
   00085960: 3048001f andi r8,r2,0x001f
+
   00085960: 3048001f andi r8,r2,0x001f     r8 = Raw X Pixel displacement
   00085964: 000840c0 sll r8,r8,0x03
+
   00085964: 000840c0 sll r8,r8,0x03     r8 * 8
 
   00085968: 00021142 srl r2,r2,0x05
 
   00085968: 00021142 srl r2,r2,0x05
   0008596c: 000210c0 sll r2,r2,0x03
+
   0008596c: 000210c0 sll r2,r2,0x03     r2 = Y Pixel displacement
 
   00085970: 3c018009 lui r1,0x8009
 
   00085970: 3c018009 lui r1,0x8009
 
   00085974: 00230821 addu r1,r1,r3
 
   00085974: 00230821 addu r1,r1,r3
   00085978: 8c2946c8 lw r9,0x46c8(r1)
+
   00085978: 8c2946c8 lw r9,0x46c8(r1)     r9 = Raw image Width
 
   0008597c: 3c018009 lui r1,0x8009
 
   0008597c: 3c018009 lui r1,0x8009
 
   00085980: 00230821 addu r1,r1,r3
 
   00085980: 00230821 addu r1,r1,r3
   00085984: 8c2a46cc lw r10,0x46cc(r1)
+
   00085984: 8c2a46cc lw r10,0x46cc(r1)     r10 = Raw image height
   00085988: 32e30061 andi r3,r23,0x0061
+
   00085988: 32e30061 andi r3,r23,0x0061     r3 = 0x40, 0x20, 0x01 bitflags
   0008598c: afa20014 sw r2,0x0014(r29)
+
   0008598c: afa20014 sw r2,0x0014(r29)     Save Y pixel displacement
   00085990: 3162c000 andi r2,r11,0xc000
+
   00085990: 3162c000 andi r2,r11,0xc000     r2 = reverse bitflags
   00085994: 00021342 srl r2,r2,0x0d
+
   00085994: 00021342 srl r2,r2,0x0d    
   00085998: 00621825 or r3,r3,r2
+
   00085998: 00621825 or r3,r3,r2     combine ?? bitflags and reverse bitflags
   0008599c: afa80010 sw r8,0x0010(r29)
+
   0008599c: afa80010 sw r8,0x0010(r29)               save X Pixel displacement
   000859a0: afa30020 sw r3,0x0020(r29)
+
   000859a0: afa30020 sw r3,0x0020(r29)     save reverse bitflags?
 
   000859a4: 00094cc0 sll r9,r9,0x13
 
   000859a4: 00094cc0 sll r9,r9,0x13
   000859a8: 00094c03 sra r9,r9,0x10
+
   000859a8: 00094c03 sra r9,r9,0x10     r9 = actual image width
 
   000859ac: 000a54c0 sll r10,r10,0x13
 
   000859ac: 000a54c0 sll r10,r10,0x13
   000859b0: 000a5403 sra r10,r10,0x10
+
   000859b0: 000a5403 sra r10,r10,0x10     r10 = actual image height
   000859b4: afa90018 sw r9,0x0018(r29)
+
   000859b4: afa90018 sw r9,0x0018(r29)     Save image width
   000859b8: 0c01ed3b jal 0x0007b4ec
+
   000859b8: 0c01ed3b jal 0x0007b4ec     [[Store Sprite Display Data]]
   000859bc: afaa001c sw r10,0x001c(r29)
+
   000859bc: afaa001c sw r10,0x001c(r29)     Save image height
   000859c0: 3202ffff andi r2,r16,0xffff
+
   000859c0: 3202ffff andi r2,r16,0xffff             r2 =  r16
   000859c4: 0054102b sltu r2,r2,r20
+
   000859c4: 0054102b sltu r2,r2,r20     set r2 = 1 if r16 < r20
   000859c8: 1440ffda bne r2,r0,0x00085934
+
   000859c8: 1440ffda bne r2,r0,0x00085934     branch to earlier in routine if so
   000859cc: 3205ffff andi r5,r16,0xffff
+
   000859cc: 3205ffff andi r5,r16,0xffff     r5 = r16
   000859d0: a6710006 sh r17,0x0006(r19)
+
   000859d0: a6710006 sh r17,0x0006(r19) Save Frame Command? Counter
   000859d4: 97ac0030 lhu r12,0x0030(r29)
+
   000859d4: 97ac0030 lhu r12,0x0030(r29)       Load Frame?????
 
   000859d8: 00000000 nop
 
   000859d8: 00000000 nop
   000859dc: a66c0008 sh r12,0x0008(r19)
+
   000859dc: a66c0008 sh r12,0x0008(r19)       Save Frame?????
   000859e0: a6760004 sh r22,0x0004(r19)
+
   000859e0: a6760004 sh r22,0x0004(r19)       Save weapon animation
 
   000859e4: 8fbf0064 lw r31,0x0064(r29)
 
   000859e4: 8fbf0064 lw r31,0x0064(r29)
 
   000859e8: 8fbe0060 lw r30,0x0060(r29)
 
   000859e8: 8fbe0060 lw r30,0x0060(r29)

Revision as of 11:52, 23 June 2021

Load WEP graphic from WEP1 Sheet Expects r4 = pointer to miscellaneous unit data (presumably for attacker). Expects r5 = WEP1 sprite data (lies within r4 table ^^) Expects r6 to be something important, saved to and loaded from stack at r29 + 0x28 r19 & r18 & r17 = r4, however r19 is overridden quickly by r5.

 0008526c: 27bdff98 addiu r29,r29,0xff98
 00085270: afbe0060 sw r30,0x0060(r29)
 00085274: 0080f021 addu r30,r4,r0               r30 = Points to misc. unit data data
 00085278: afb3004c sw r19,0x004c(r29)
 0008527c: 00a09821 addu r19,r5,r0              r19 = WEP sprite data
 00085280: afb7005c sw r23,0x005c(r29)
 00085284: 00e0b821 addu r23,r7,r0              r23 = value?
 00085288: afbf0064 sw r31,0x0064(r29)
 0008528c: afb60058 sw r22,0x0058(r29)
 00085290: afb50054 sw r21,0x0054(r29)
 00085294: afb40050 sw r20,0x0050(r29)
 00085298: afb20048 sw r18,0x0048(r29)
 0008529c: afb10044 sw r17,0x0044(r29)
 000852a0: afb00040 sw r16,0x0040(r29)
 000852a4: afa60028 sw r6,0x0028(r29)            r6 is preserved? (important information?)
 000852a8: 93c2013a lbu r2,0x013a(r30)            load used weapon
 000852ac: 96760004 lhu r22,0x0004(r19)            load current animation
 000852b0: 00021040 sll r2,r2,0x01               r2 = weapon ID * 2
 000852b4: 3c018009 lui r1,0x8009
 000852b8: 00220821 addu r1,r1,r2                r1 = 0x80090000 + ID * 2
 000852bc: 902243e5 lbu r2,0x43e5(r1)              load used weapon graphic ID
 000852c0: 96710006 lhu r17,0x0006(r19)            load frame command? Counter
 000852c4: 000210c0 sll r2,r2,0x03 
 000852c8: a7a20038 sh r2,0x0038(r29)              store used weapon graphic ID*8
 000852cc: 8e75001c lw r21,0x001c(r19)            load SHP data
 000852d0: 8e740020 lw r20,0x0020(r19)            load SEQ data
 000852d4: 16e00002 bne r23,r0,0x000852e0          branch if value(?) != 0
 000852d8: 32d0ffff andi r16,r22,0xffff            r16 = animation #
 000852dc: 2631fffe addiu r17,r17,0xfffe           counter - 2
 000852e0: 2e020101 sltiu r2,r16,0x0101            set if animation < 0x101
 000852e4: 14400004 bne r2,r0,0x000852f8            #branch if so
 000852e8: 00101080 sll r2,r16,0x02                  | animation*4
 000852ec: 0c011282 jal 0x00044a08                   | 00044a08 - 00044a30
 000852f0: 34040009 ori r4,r0,0x0009                 | clears r4 and moves 0x09 to r5. for some reason.
 000852f4: 00101080 sll r2,r16,0x02                  | r2 = weapon anim*4
 000852f8: 00541021 addu r2,r2,r20                  #r2 = WP anim*4 + SEQ data location
 000852fc: 8c430000 lw r3,0x0000(r2)                load frame commands? Pointer from SEQ table (Make a new page for SEQ and SHP?)
 00085300: 2402ffff addiu r2,r0,0xffff              this seems to be a rather redundant check for garbage data.
 00085304: 14620005 bne r3,r2,0x0008531c            branch if Frame command pointer? (from SEQ table) is not 0xffff
 00085308: 00161880 sll r3,r22,0x02                 r3 = weapon anim*4
 0008530c: 34040009 ori r4,r0,0x0009                r4 = 0x9
 00085310: 0c011282 jal 0x00044a08                  00044a08 - 00044a30 clears r4 and moves to r5
 00085314: 00000000 nop
 00085318: 00161880 sll r3,r22,0x02                r3 = weapon anim*4
 0008531c: 00741821 addu r3,r3,r20                 animation*4 + SEQ data
 00085320: 00111400 sll r2,r17,0x10                r2 = r17 * 2^16
 00085324: 8c650000 lw r5,0x0000(r3)               Load Frame commands? pointer from SEQ table AGAIN
 00085328: 00021403 sra r2,r2,0x10                 r2 = first halfword of r17 (even though it was already a halfword and unsigned)
 0008532c: 00a21021 addu r2,r5,r2                  r2 = frame command? counter + frame command? location
 00085330: 90430000 lbu r3,0x0000(r2)              load Frame command?
 00085334: 340200ff ori r2,r0,0x00ff
 00085338: 146200f5 bne r3,r2,0x00085710            branch if frame command? is not ff
 0008533c: 00111c00 sll r3,r17,0x10                r3 = r17 * 2^16 (Moves halfword to upper half)
 00085340: 26230001 addiu r3,r17,0x0001            r3 = r17 + 1
 00085344: 00031400 sll r2,r3,0x10                  in the event that the first frame command? = ff, another 1 is added to r2, and increment is increased by an additional 1, also. (accounts for frames that are missing?)
 00085348: 00021403 sra r2,r2,0x10                 a stupid long way of moving r17 to r2
 0008534c: 00a21021 addu r2,r5,r2                  r2 = r2 + r5
 00085350: 90420000 lbu r2,0x0000(r2)              Load frame command?
 00085354: 24710001 addiu r17,r3,0x0001            r17 = r3 + 1
 00085358: 2443ff2d addiu r3,r2,0xff2d             r3 = frame command? - 0xd3
 0008535c: 2c62002d sltiu r2,r3,0x002d             set r2 = true if r3 < 0x00d2 (if ??? > 0xd3)
 00085360: 104000e9 beq r2,r0,0x00085708           branch if not true
 00085364: 00031080 sll r2,r3,0x02                 r2 = r3 * 4 (location pointer)
 00085368: 3c018007 lui r1,0x8007
 0008536c: 00220821 addu r1,r1,r2                  r1 = 0x80070000 + r2
 00085370: 8c228028 lw r2,-0x7fd8(r1)              loads a word from the table at this location, based on weapon and angle (Link a new page with the table here?)
 							??? = 
 								0xd3: 0x800856b8 (skipped by above conditional)
 								0xd4: 0x80085708
 								0xd5: 0x800853b4
 								0xd6: 0x80085420
 								0xd7: 0x80085700
 								0xd8: 0x800854a4
 								0xd9: 0x800853d4
 								0xda: 0x80085708
 								0xdb: 0x80085470
 								0xdc: 0x800853e4
 								0xdd: 0x800854d8
 								0xde: 0x80085318 (jumps further back in routine)
 								0xdf: 0x800853c8
 							  0xe0, 0xe1: 0x80085318 (^)
 								0xe2: 0x800853f4
 							  0xe3, 0xe4: 0x80085700
 								0xe5: 0x80085668
 						    0xe6, 0xe7, 0xe8: 0x800853dc
 								0xe9: 0x80085700
 								0xea: 0x800853dc
 								0xeb: 0x80085394
 								0xec: 0x80085380
 					0xed, 0xee, 0xef, 0xf0, 0xf1: 0x80085700
 								0xf2: 0x800855ec
 						    0xf3, 0xf4, 0xf5: 0x80085700
 								0xf6: 0x8008543c
 								0xf7: 0x8008560b
 								0xf8: 0x800853dc
 								0xf9: 0x8008550c
 								0xfa: 0x8008560b
 								0xfb: 0x800853dc
 								0xfc: 0x80085570
 								0xfd: 0x800856cc
 								0xfe: 0x800853a8
 								0xff: 0x800853ac (skipped by earlier conditional)
 00085374: 00000000 nop
 00085378: 00400008 jr r2                          jumps to address
 0008537c: 00000000 nop
 00085380: 96620018 lhu r2,0x0018(r19)
 00085384: 00000000 nop
 00085388: 38420002 xori r2,r2,0x0002
 0008538c: 080214c6 j 0x00085318
 00085390: a6620018 sh r2,0x0018(r19)
 00085394: 96620018 lhu r2,0x0018(r19)
 00085398: 00000000 nop
 0008539c: 38420004 xori r2,r2,0x0004
 000853a0: 080214c6 j 0x00085318
 000853a4: a6620018 sh r2,0x0018(r19)
 000853a8: a6600000 sh r0,0x0000(r19)
 000853ac: 08021679 j 0x000859e4
 000853b0: a660000a sh r0,0x000a(r19)
 000853b4: 9662000c lhu r2,0x000c(r19)
 000853b8: 00008821 addu r17,r0,r0
 000853bc: 24420001 addiu r2,r2,0x0001
 000853c0: 080214c6 j 0x00085318
 000853c4: a662000c sh r2,0x000c(r19)
 000853c8: 8e620024 lw r2,0x0024(r19)
 000853cc: 080214c6 j 0x00085318
 000853d0: a440000c sh r0,0x000c(r2)
 000853d4: 0c01a269 jal 0x000689a4
 000853d8: 03c02021 addu r4,r30,r0
 000853dc: 080214c6 j 0x00085318
 000853e0: 26310002 addiu r17,r17,0x0002
 000853e4: 96710010 lhu r17,0x0010(r19)
 000853e8: 9676000e lhu r22,0x000e(r19)
 000853ec: 080214c7 j 0x0008531c
 000853f0: 00161880 sll r3,r22,0x02
 000853f4: 00161880 sll r3,r22,0x02
 000853f8: 00741821 addu r3,r3,r20
 000853fc: 02201021 addu r2,r17,r0
 00085400: 00021400 sll r2,r2,0x10
 00085404: 8c630000 lw r3,0x0000(r3)
 00085408: 00021403 sra r2,r2,0x10
 0008540c: 00621821 addu r3,r3,r2
 00085410: 90620000 lbu r2,0x0000(r3)
 00085414: 26310001 addiu r17,r17,0x0001
 00085418: 080214c6 j 0x00085318
 0008541c: a7c20014 sh r2,0x0014(r30)
 00085420: 3c028009 lui r2,0x8009
 00085424: 8c42612c lw r2,0x612c(r2)		? (word - only contains 1 byte of data?)
 00085428: 00000000 nop
 0008542c: 144000a8 bne r2,r0,0x000856d0	branch if word is not 0
 00085430: 00161080 sll r2,r22,0x02		r2 = weapon anim*4
 00085434: 080214c6 j 0x00085318
 00085438: 26310001 addiu r17,r17,0x0001
 0008543c: 02201021 addu r2,r17,r0
 00085440: 26310001 addiu r17,r17,0x0001
 00085444: 00161880 sll r3,r22,0x02
 00085448: 00741821 addu r3,r3,r20
 0008544c: 00021400 sll r2,r2,0x10
 00085450: 8c630000 lw r3,0x0000(r3)
 00085454: 00021403 sra r2,r2,0x10
 00085458: 00621821 addu r3,r3,r2
 0008545c: 90650000 lbu r5,0x0000(r3)
 00085460: 0c01ae58 jal 0x0006b960
 00085464: 03c02021 addu r4,r30,r0
 00085468: 080214c7 j 0x0008531c
 0008546c: 00161880 sll r3,r22,0x02
 00085470: 00161880 sll r3,r22,0x02
 00085474: 00741821 addu r3,r3,r20
 00085478: 02201021 addu r2,r17,r0
 0008547c: 00021400 sll r2,r2,0x10
 00085480: 8c630000 lw r3,0x0000(r3)
 00085484: 00021403 sra r2,r2,0x10
 00085488: 00621821 addu r3,r3,r2
 0008548c: 90620000 lbu r2,0x0000(r3)
 00085490: 26310001 addiu r17,r17,0x0001
 00085494: 00021600 sll r2,r2,0x18
 00085498: 00021603 sra r2,r2,0x18
 0008549c: 080214c6 j 0x00085318
 000854a0: a6620012 sh r2,0x0012(r19)
 000854a4: 00161880 sll r3,r22,0x02
 000854a8: 00741821 addu r3,r3,r20
 000854ac: 02201021 addu r2,r17,r0
 000854b0: 00021400 sll r2,r2,0x10
 000854b4: 8c630000 lw r3,0x0000(r3)
 000854b8: 00021403 sra r2,r2,0x10
 000854bc: 00621821 addu r3,r3,r2
 000854c0: 90620000 lbu r2,0x0000(r3)
 000854c4: 26310001 addiu r17,r17,0x0001
 000854c8: 00021600 sll r2,r2,0x18
 000854cc: 00021603 sra r2,r2,0x18
 000854d0: 080214c6 j 0x00085318
 000854d4: a6620014 sh r2,0x0014(r19)
 000854d8: 00161080 sll r2,r22,0x02
 000854dc: 00541021 addu r2,r2,r20
 000854e0: 02201821 addu r3,r17,r0
 000854e4: 00031c00 sll r3,r3,0x10
 000854e8: a676000e sh r22,0x000e(r19)
 000854ec: 8c420000 lw r2,0x0000(r2)
 000854f0: 00031c03 sra r3,r3,0x10
 000854f4: 00431021 addu r2,r2,r3
 000854f8: 90560000 lbu r22,0x0000(r2)
 000854fc: 26310001 addiu r17,r17,0x0001
 00085500: a6710010 sh r17,0x0010(r19)
 00085504: 080214c6 j 0x00085318
 00085508: 00008821 addu r17,r0,r0
 0008550c: 00162080 sll r4,r22,0x02
 00085510: 00942021 addu r4,r4,r20
 00085514: 00111400 sll r2,r17,0x10
 00085518: 00021403 sra r2,r2,0x10
 0008551c: 26250001 addiu r5,r17,0x0001
 00085520: 8c830000 lw r3,0x0000(r4)
 00085524: 24b10001 addiu r17,r5,0x0001
 00085528: 00621821 addu r3,r3,r2
 0008552c: 90620000 lbu r2,0x0000(r3)
 00085530: 97c30058 lhu r3,0x0058(r30)
 00085534: 00021600 sll r2,r2,0x18
 00085538: 00021603 sra r2,r2,0x18
 0008553c: 00431021 addu r2,r2,r3
 00085540: a7c20058 sh r2,0x0058(r30)
 00085544: 00051400 sll r2,r5,0x10
 00085548: 8c830000 lw r3,0x0000(r4)
 0008554c: 00021403 sra r2,r2,0x10
 00085550: 00621821 addu r3,r3,r2
 00085554: 90620000 lbu r2,0x0000(r3)
 00085558: 97c3005a lhu r3,0x005a(r30)
 0008555c: 00021600 sll r2,r2,0x18
 00085560: 00021603 sra r2,r2,0x18
 00085564: 00431021 addu r2,r2,r3
 00085568: 080214c6 j 0x00085318
 0008556c: a7c2005a sh r2,0x005a(r30)
 00085570: 26260001 addiu r6,r17,0x0001
 00085574: 00112400 sll r4,r17,0x10
 00085578: 24d10001 addiu r17,r6,0x0001
 0008557c: 00161080 sll r2,r22,0x02
 00085580: 00541021 addu r2,r2,r20
 00085584: 00042403 sra r4,r4,0x10
 00085588: 8c430000 lw r3,0x0000(r2)
 0008558c: 00061400 sll r2,r6,0x10
 00085590: 00021403 sra r2,r2,0x10
 00085594: 00642021 addu r4,r3,r4
 00085598: 00621821 addu r3,r3,r2
 0008559c: 90820000 lbu r2,0x0000(r4)
 000855a0: 90640000 lbu r4,0x0000(r3)
 000855a4: 96630016 lhu r3,0x0016(r19)
 000855a8: 00021600 sll r2,r2,0x18
 000855ac: 1060000b beq r3,r0,0x000855dc
 000855b0: 00022e03 sra r5,r2,0x18
 000855b4: 96620016 lhu r2,0x0016(r19)
 000855b8: 00000000 nop
 000855bc: 2442ffff addiu r2,r2,0xffff
 000855c0: a6620016 sh r2,0x0016(r19)
 000855c4: 3042ffff andi r2,r2,0xffff
 000855c8: 1040ff54 beq r2,r0,0x0008531c
 000855cc: 00161880 sll r3,r22,0x02
 000855d0: 24c2fffd addiu r2,r6,0xfffd
 000855d4: 080214c7 j 0x0008531c
 000855d8: 00a28821 addu r17,r5,r2
 000855dc: 24c2fffd addiu r2,r6,0xfffd
 000855e0: 00a28821 addu r17,r5,r2
 000855e4: 080214c6 j 0x00085318
 000855e8: a6640016 sh r4,0x0016(r19)
 000855ec: 26230001 addiu r3,r17,0x0001		Increment counter
 000855f0: 00112400 sll r4,r17,0x10			queue dumbass compiler doing stupid shit
 000855f4: 24710001 addiu r17,r3,0x0001		increment counter by 2
 000855f8: 00161080 sll r2,r22,0x02			r2 = weapon anim*4
 000855fc: 00541021 addu r2,r2,r20			weapon anim*4 + SEQ data pointer
 00085600: 00042403 sra r4,r4,0x10			Close dumbass compiler doing stupid shit
 00085604: 00031c00 sll r3,r3,0x10			queue even stupider shit
 00085608: 8c420000 lw r2,0x0000(r2)			Load frame command locations?
 0008560c: 00031c03 sra r3,r3,0x10			close even stupider shit
 00085610: 00442021 addu r4,r2,r4			get location of first frame command? (???)
 00085614: 00431021 addu r2,r2,r3			get location of second frame command? (???)
 00085618: 90900000 lbu r16,0x0000(r4)			Load first frame command?
 0008561c: 90520000 lbu r18,0x0000(r2)			Load second frame command?
 00085620: 16000004 bne r16,r0,0x00085634		Branch if first frame command? is 0
 00085624: 00101040 sll r2,r16,0x01			r2 = Frame command? * 2
 00085628: 0c011282 jal 0x00044a08			00044a08 - 00044a30 
 0008562c: 3404000d ori r4,r0,0x000d 			Move 0x0d into r5, then clear r4.
 00085630: 00101040 sll r2,r16,0x01			r2 = Frame command? * 2
 00085634: 00501021 addu r2,r2,r16			r2 = Frame command? * 3
 00085638: 00021100 sll r2,r2,0x04			r2 = Frame command? * 48
 0008563c: 244201d8 addiu r2,r2,0x01d8			r2 = Frame command? * 48 + 0x1d8
 00085640: 03c21021 addu r2,r30,r2			r2 = Frame/Animation data pointer + Frame command * 48
 00085644: 34030001 ori r3,r0,0x0001			r3 = 0x1
 00085648: a4520004 sh r18,0x0004(r2)			Save second frame command?
 0008564c: a4400006 sh r0,0x0006(r2)			clears ??
 00085650: a443000a sh r3,0x000a(r2)			saves 0x1 to ??
 00085654: a4400012 sh r0,0x0012(r2)			clears ??
 00085658: a4400014 sh r0,0x0014(r2)			clears ??
 0008565c: a4400016 sh r0,0x0016(r2)			clears ??
 00085660: 080214c6 j 0x00085318			repeat part of the routine again?
 00085664: a4430000 sh r3,0x0000(r2)			clears ??
 00085668: 26230001 addiu r3,r17,0x0001
 0008566c: 00112400 sll r4,r17,0x10
 00085670: 24710001 addiu r17,r3,0x0001
 00085674: 00161080 sll r2,r22,0x02
 00085678: 00541021 addu r2,r2,r20
 0008567c: 00042403 sra r4,r4,0x10
 00085680: 00031c00 sll r3,r3,0x10
 00085684: 8c420000 lw r2,0x0000(r2)
 00085688: 00031c03 sra r3,r3,0x10
 0008568c: 00442021 addu r4,r2,r4
 00085690: 00431021 addu r2,r2,r3
 00085694: 90420000 lbu r2,0x0000(r2)
 00085698: 90840000 lbu r4,0x0000(r4)
 0008569c: 8e630024 lw r3,0x0024(r19)
 000856a0: 00021200 sll r2,r2,0x08
 000856a4: 00822025 or r4,r4,r2
 000856a8: 080214c6 j 0x00085318
 000856ac: a464000c sh r4,0x000c(r3)
 000856b0: 080214c6 j 0x00085318
 000856b4: 26310003 addiu r17,r17,0x0003
 000856b8: 3c038009 lui r3,0x8009
 000856bc: 8c63612c lw r3,0x612c(r3)
 000856c0: 34020001 ori r2,r0,0x0001
 000856c4: 1462000e bne r3,r2,0x00085700
 000856c8: 00000000 nop
 000856cc: 00161080 sll r2,r22,0x02
 000856d0: 00541021 addu r2,r2,r20		r2 = location of frame command? Pointer
 000856d4: 00111c00 sll r3,r17,0x10		queue compiler bullshit
 000856d8: 8c420000 lw r2,0x0000(r2)		Load frame command? pointer
 000856dc: 00031c03 sra r3,r3,0x10		continued compiler bullshit
 000856e0: 00431021 addu r2,r2,r3		frame command location
 000856e4: 90420000 lbu r2,0x0000(r2)		Load frame command?
 000856e8: 00000000 nop
 000856ec: 00021600 sll r2,r2,0x18		Frame command? * 2^18
 000856f0: 00022e03 sra r5,r2,0x18		Frame command? * 2^18 / 2^18 (this makes the integer negative because. it can)
 000856f4: 2622fffe addiu r2,r17,0xfffe	r2 = frame command counter - 2
 000856f8: 080214c6 j 0x00085318		jumps back to earlier in routine
 000856fc: 00a28821 addu r17,r5,r2		frame command counter = frame command counter - 2 - Frame command (wrap your head around that one)
 00085700: 080214c6 j 0x00085318
 00085704: 26310001 addiu r17,r17,0x0001
 00085708: 080214c4 j 0x00085310
 0008570c: 3404000d ori r4,r0,0x000d
 
 00085710: 00031c03 sra r3,r3,0x10                  queue stupid method of moving r17 to r3
 00085714: 00a31821 addu r3,r5,r3                   r3 = r5 + r3
 00085718: 93c2013b lbu r2,0x013b(r30)              load hi/low/mid mod
 0008571c: 90630000 lbu r3,0x0000(r3)               load frame command? again
 00085720: 00021040 sll r2,r2,0x01                   mod*2
 00085724: 00551021 addu r2,r2,r21                  mod*2 + SHP data
 00085728: 94420000 lhu r2,0x0000(r2)               load frame
 0008572c: 96640014 lhu r4,0x0014(r19)              load ??
 00085730: 00621821 addu r3,r3,r2                   frame + Frame command?
 00085734: 00832021 addu r4,r4,r3                   r4 = frame + ?? + Frame command?
 00085738: a7a40030 sh r4,0x0030(r29)               store frame + ?? + Frame command?
 0008573c: 12e0000a beq r23,r0,0x00085768          branch if pv = 0?
 00085740: 26240001 addiu r4,r17,0x0001             increment Frame command counter?
 00085744: 00041400 sll r2,r4,0x10
 00085748: 00021403 sra r2,r2,0x10                  queue further stupidity moving register values
 0008574c: 00a21021 addu r2,r5,r2                   SHP data location + increment?
 00085750: 90420000 lbu r2,0x0000(r2)               load Frame command?
 00085754: 96630012 lhu r3,0x0012(r19)              load ??
 00085758: 24910001 addiu r17,r4,0x0001             increment frame command counter again?
 0008575c: 00431021 addu r2,r2,r3                   r2 = ?? + Frame command?
 00085760: 080215db j 0x0008576c                    jump ahead
 00085764: a662000a sh r2,0x000a(r19)               store in 0x0A WEP data
 00085768: 24910001 addiu r17,r4,0x0001             increments r17 if skipped
 0008576c: 97a30030 lhu r3,0x0030(r29)              Load frame + ?? + Frame command?
 00085770: 00000000 nop
 00085774: 00031080 sll r2,r3,0x02                  r2 = Frame?????*4
 00085778: 00551021 addu r2,r2,r21                  SHP data to do with frame, frame command, attacking angle(?)
 0008577c: 2c630201 sltiu r3,r3,0x0201              Set r3 = true if frame????? is less than 0x201
 00085780: 8c550040 lw r21,0x0040(r2)               Loads another pointer from the pointer above
 00085784: 14600004 bne r3,r0,0x00085798            branch if frame????? is less than 0x201
 00085788: 2402ffff addiu r2,r0,0xffff              r2 = 0xffffffff
 0008578c: 0c011282 jal 0x00044a08
 00085790: 34040008 ori r4,r0,0x0008
 00085794: 2402ffff addiu r2,r0,0xffff
 00085798: 16a20003 bne r21,r2,0x000857a8
 0008579c: 00000000 nop
 000857a0: 0c011282 jal 0x00044a08
 000857a4: 34040008 ori r4,r0,0x0008
 
 000857a8: 92a20000 lbu r2,0x0000(r21)              load something from WEP1 SHP specific data?
 000857ac: 8e720024 lw r18,0x0024(r19)              load ? Display (3 bytes of data + 1 byte padding)
 000857b0: 30420007 andi r2,r2,0x0007               filters out 0x4, 0x2, and 0x1 bit flags?
 000857b4: 24420001 addiu r2,r2,0x0001              r2 = r2 + 1
 000857b8: a2420003 sb r2,0x0003(r18)               save r2 to ? display
 000857bc: 92a30000 lbu r3,0x0000(r21)              load something from WEP1 SHP specific data?
 000857c0: 00000000 nop
 000857c4: 000318c2 srl r3,r3,0x03                  r3 = r3/8
 000857c8: 00031840 sll r3,r3,0x01                  r3 = r3*2 (effectively r3/4)
 000857cc: 3c018009 lui r1,0x8009
 000857d0: 00230821 addu r1,r1,r3
 000857d4: 94244508 lhu r4,0x4508(r1)                load spin on Y axis? (???)
 000857d8: 00000000 nop
 000857dc: a644000c sh r4,0x000c(r18)                store spin on Y axis? (???? stores something in WEP1 Sprite?)
 000857e0: 97c30012 lhu r3,0x0012(r30)               load action halfword? (transparent checks, and moving/acting?)
 000857e4: 00000000 nop
 000857e8: 30630002 andi r3,r3,0x0002                checks for moving/acting?
 000857ec: 10600003 beq r3,r0,0x000857fc             branch if not animated? acting?
 000857f0: 305400ff andi r20,r2,0x00ff               move r2 to r20
 000857f4: 00041023 subu r2,r0,r4                    r2 = - Y axis spin
 000857f8: a642000c sh r2,0x000c(r18)                store - Y axis spin?
 000857fc: 2e820004 sltiu r2,r20,0x0004              set r2 = true if r20 < 0x4
 00085800: 14400002 bne r2,r0,0x0008580c             branch if so
 00085804: 34020001 ori r2,r0,0x0001                 r2 = 1
 00085808: 34140003 ori r20,r0,0x0003                r20 = 3
 0008580c: 96630002 lhu r3,0x0002(r19)               load ? 
 00085810: 92b70001 lbu r23,0x0001(r21)              load ? from WEP1 SHP data (are these like, expected values?)
 00085814: 10620005 beq r3,r2,0x0008582c             Branch if ? = ?
 00085818: 34020002 ori r2,r0,0x0002                 r2 = 2
 0008581c: 1062003a beq r3,r2,0x00085908             Branch if ? = 2
 00085820: 32e20060 andi r2,r23,0x0060               moves 0x40, 0x20 bit flags to r2
 00085824: 08021675 j 0x000859d4
 00085828: a6710006 sh r17,0x0006(r19)               Saves increment? to WEP Data
 0008582c: 32e20060 andi r2,r23,0x0060               moves 0x40 and 0x20 bit flags into r2?
 00085830: 34420009 ori r2,r2,0x0009                 r2 = all previous flags and 0x8, 0x1
 00085834: 00008021 addu r16,r0,r0                   clears r16
 00085838: a6420004 sh r2,0x0004(r18)                store VRAM spritesheet ID (??)
 0008583c: 8fac0028 lw r12,0x0028(r29)               load ?? (r6 from start of routine)
 00085840: 97c20010 lhu r2,0x0010(r30)               load VRAM Palette ID
 00085844: 000c1980 sll r3,r12,0x06                  r3 = r12 * 64
 00085848: 00431021 addu r2,r2,r3                    r2 = VRAM Palette + r3
 0008584c: 24420080 addiu r2,r2,0x0080               r2 + 0x80
 00085850: 1280005f beq r20,r0,0x000859d0            branch if r20 = 0
 00085854: a6420006 sh r2,0x0006(r18)                store VRAM palette ID + other nonsense
 00085858: 3205ffff andi r5,r16,0xffff               r5 = r16 (some kind of section counter)
 0008585c: 00051080 sll r2,r5,0x02                   r2 = r5 * 4 
 00085860: 24420002 addiu r2,r2,0x0002               r2 = r2 + 2
 00085864: 02a21021 addu r2,r21,r2                    WEP1 SHP + section counter pointer?
 00085868: 02402021 addu r4,r18,r0                   r4 = ? Display data
 0008586c: 26100001 addiu r16,r16,0x0001             r16 + 1
 00085870: 944b0002 lhu r11,0x0002(r2)               load Graphic size?? (and tile offset??)
 00085874: 80460000 lb r6,0x0000(r2)                 load X Shift
 00085878: 80470001 lb r7,0x0001(r2)                  load Y Shift
 0008587c: 97ac0038 lhu r12,0x0038(r29)              load weapon graphic ID*8 (in battle sprite from WEP1)
 00085880: 31633c00 andi r3,r11,0x3c00              r3 = size reference?
 00085884: 000319c2 srl r3,r3,0x07                  r3 = size (?) / 128
 00085888: 316203ff andi r2,r11,0x03ff              r2 = Y Tile offset (total tile offset?)
 0008588c: 3048001f andi r8,r2,0x001f               r8 = X tile offset
 00085890: 000840c0 sll r8,r8,0x03                  X offset*8
 00085894: 00021142 srl r2,r2,0x05                  offset/32
 00085898: 000210c0 sll r2,r2,0x03                  offset/32 * 8 (gets rid of X offset?)
 0008589c: 01821021 addu r2,r12,r2                  weapon graphic ID*8 + offset/32 * 8
 000858a0: 3c018009 lui r1,0x8009
 000858a4: 00230821 addu r1,r1,r3                   r1 = 0x80090000 + r3 (size?)
 000858a8: 8c2946c8 lw r9,0x46c8(r1)                r9 = raw image width (word?)
 000858ac: 3c018009 lui r1,0x8009
 000858b0: 00230821 addu r1,r1,r3
 000858b4: 8c2a46cc lw r10,0x46cc(r1)               r10 = raw image height
 000858b8: 32e30061 andi r3,r23,0x0061              r3 = 0x40, 0x20, 0x1 bit flags
 000858bc: afa20014 sw r2,0x0014(r29)               store Y offset on WEP sheet to load from
 000858c0: 3162c000 andi r2,r11,0xc000               r2 = X/Y reverse (? bitflags?)
 000858c4: 00021342 srl r2,r2,0x0d                  
 000858c8: 00621825 or r3,r3,r2                     stores bitflag on top of r3?
 000858cc: afa80010 sw r8,0x0010(r29)               store X tile (pixel?) offset
 000858d0: afa30020 sw r3,0x0020(r29)               store reversal bytes (bit flags)
 000858d4: 00094cc0 sll r9,r9,0x13                  r9 = raw image width * 8192
 000858d8: 00094c03 sra r9,r9,0x10                  r9 = raw image width * 8192 / 1024 (total r9 * 8)
 000858dc: 000a54c0 sll r10,r10,0x13
 000858e0: 000a5403 sra r10,r10,0x10                same deal but with r10
 000858e4: afa90018 sw r9,0x0018(r29)               save image width to stack
 000858e8: 0c01ed3b jal 0x0007b4ec                  Store Sprite Display Data
 000858ec: afaa001c sw r10,0x001c(r29)              save image height to stack
 
 000858f0: 3202ffff andi r2,r16,0xffff              r2 = r16
 000858f4: 0054102b sltu r2,r2,r20                  set r2 = true if section counter (?) < r20
 000858f8: 1440ffd8 bne r2,r0,0x0008585c            branch if so
 000858fc: 3205ffff andi r5,r16,0xffff              r5 = r16
 00085900: 08021675 j 0x000859d4                    jump ahead
 00085904: a6710006 sh r17,0x0006(r19)              save incremenet (?)
 00085908: 34420008 ori r2,r2,0x0008                add 0x8 bit flag
 0008590c: 00008021 addu r16,r0,r0                  clears r16
 00085910: a6420004 sh r2,0x0004(r18)		     save new bit flag? (Data sheet says VRAM spritesheet ID. I don't believe it)
 00085914: 8fac0028 lw r12,0x0028(r29)		     Load ?? (R6 at start of routine)
 00085918: 97c20010 lhu r2,0x0010(r30)		     Load VRAM palette ID
 0008591c: 000c1980 sll r3,r12,0x06		     r3 = ?? * 64
 00085920: 00431021 addu r2,r2,r3                   r2 = VRAM Palette ID + ?? * 64
 00085924: 24420080 addiu r2,r2,0x0080              r2 = r2 + 0x80
 00085928: 12800029 beq r20,r0,0x000859d0	     branch if r20 = 0
 0008592c: a6420006 sh r2,0x0006(r18)               Save new VRAM Palette ID
 00085930: 3205ffff andi r5,r16,0xffff              r5 = r16 (section counter?)
 00085934: 00051080 sll r2,r5,0x02		     r2 = r5 * 4
 00085938: 24420002 addiu r2,r2,0x0002		     r2 = r2 + 2
 0008593c: 02a21021 addu r2,r21,r2		     r2 = SHP Data pointer + r2
 00085940: 02402021 addu r4,r18,r0		     r4 = ? Display pointer
 00085944: 26100001 addiu r16,r16,0x0001	     increment section counter?
 00085948: 944b0002 lhu r11,0x0002(r2)		     Load graphic size?? (And pixel offset?)
 0008594c: 80460000 lb r6,0x0000(r2)		     Load X shift
 00085950: 80470001 lb r7,0x0001(r2)		     Load Y shift
 00085954: 31633c00 andi r3,r11,0x3c00		     Size reference?
 00085958: 000319c2 srl r3,r3,0x07		     Size reference? / 128
 0008595c: 316203ff andi r2,r11,0x03ff		     r2 = Pixel displacement? (Total?)
 00085960: 3048001f andi r8,r2,0x001f		     r8 = Raw X Pixel displacement
 00085964: 000840c0 sll r8,r8,0x03		     r8 * 8
 00085968: 00021142 srl r2,r2,0x05
 0008596c: 000210c0 sll r2,r2,0x03		     r2 = Y Pixel displacement
 00085970: 3c018009 lui r1,0x8009
 00085974: 00230821 addu r1,r1,r3
 00085978: 8c2946c8 lw r9,0x46c8(r1)		     r9 = Raw image Width
 0008597c: 3c018009 lui r1,0x8009
 00085980: 00230821 addu r1,r1,r3
 00085984: 8c2a46cc lw r10,0x46cc(r1)		     r10 = Raw image height
 00085988: 32e30061 andi r3,r23,0x0061		     r3 = 0x40, 0x20, 0x01 bitflags
 0008598c: afa20014 sw r2,0x0014(r29)		     Save Y pixel displacement
 00085990: 3162c000 andi r2,r11,0xc000		     r2 = reverse bitflags
 00085994: 00021342 srl r2,r2,0x0d		     
 00085998: 00621825 or r3,r3,r2		     combine ?? bitflags and reverse bitflags
 0008599c: afa80010 sw r8,0x0010(r29)               save X Pixel displacement
 000859a0: afa30020 sw r3,0x0020(r29)		     save reverse bitflags?
 000859a4: 00094cc0 sll r9,r9,0x13
 000859a8: 00094c03 sra r9,r9,0x10		     r9 = actual image width
 000859ac: 000a54c0 sll r10,r10,0x13
 000859b0: 000a5403 sra r10,r10,0x10		     r10 = actual image height
 000859b4: afa90018 sw r9,0x0018(r29)		     Save image width
 000859b8: 0c01ed3b jal 0x0007b4ec		     Store Sprite Display Data
 000859bc: afaa001c sw r10,0x001c(r29)		     Save image height
 000859c0: 3202ffff andi r2,r16,0xffff              r2 =  r16
 000859c4: 0054102b sltu r2,r2,r20		     set r2 = 1 if r16 < r20
 000859c8: 1440ffda bne r2,r0,0x00085934	     branch to earlier in routine if so
 000859cc: 3205ffff andi r5,r16,0xffff		     r5 = r16
 000859d0: a6710006 sh r17,0x0006(r19)		Save Frame Command? Counter
 000859d4: 97ac0030 lhu r12,0x0030(r29)       Load Frame?????
 000859d8: 00000000 nop
 000859dc: a66c0008 sh r12,0x0008(r19)        Save Frame?????
 000859e0: a6760004 sh r22,0x0004(r19)        Save weapon animation
 000859e4: 8fbf0064 lw r31,0x0064(r29)
 000859e8: 8fbe0060 lw r30,0x0060(r29)
 000859ec: 8fb7005c lw r23,0x005c(r29)
 000859f0: 8fb60058 lw r22,0x0058(r29)
 000859f4: 8fb50054 lw r21,0x0054(r29)
 000859f8: 8fb40050 lw r20,0x0050(r29)
 000859fc: 8fb3004c lw r19,0x004c(r29)
 00085a00: 8fb20048 lw r18,0x0048(r29)
 00085a04: 8fb10044 lw r17,0x0044(r29)
 00085a08: 8fb00040 lw r16,0x0040(r29)
 00085a0c: 27bd0068 addiu r29,r29,0x0068
 00085a10: 03e00008 jr r31
 00085a14: 00000000 nop



 Return locations:(?)
 r31 = 0x0008654c (this location has a jal, but more than 2 words prior)