Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- z_un_0893298c:
- addiu sp,sp,-0x30
- sw ra,0x1C(sp)
- sw s5,0x18(sp)
- sw s4,0x14(sp)
- sw s3,0x10(sp)
- sw s2,0xC(sp)
- sw s1,0x8(sp)
- sw s0,0x4(sp)
- move s4,a1 # Caster
- lbu a1,0x3A(a1) # Was 2. Rank of caster/target?
- li v0,0x8
- move s3,a2 # Target
- andi v1,a1,0x8 # Either 0s or sets to 8 if 0x3A(a1) is 8~15 (level?)
- move s5,a0 #? Was 09B9D640, maybe the spell ID?
- li s2,0x1
- li s0,0
- bne v1,v0,pos_08932A58
- sh a1,0x2E(sp)
- andi v0,a1,0xFF
- slti v0,v0,0x80 # < 128
- bne v0,zero,pos_08932A0C
- nop
- jal z_un_08934af0
- nop
- move a1,v0
- move a0,s5
- li a2,0x1
- addiu a3,sp,0x2E
- jal z_un_08934c8c
- addiu t0,sp,0x2C
- b pos_08932A30
- lbu v0,0x39(s4)
- pos_08932A0C:
- jal z_un_08936504
- nop
- move a1,v0
- move a0,s5
- li a2,0x1
- addiu a3,sp,0x2E
- jal z_un_089365d0
- addiu t0,sp,0x2C
- lbu v0,0x39(s4)
- pos_08932A30:
- slti v0,v0,0x29 # Multi-target bitfield
- bnel v0,zero,pos_08932A48
- lhu v0,0x2E(sp)
- li v0,0x2
- sh v0,0x2E(sp)
- lhu v0,0x2E(sp)
- pos_08932A48:
- slti v0,v0,0x2
- bnel v0,zero,pos_08932A5C
- li v0,0x1
- li s0,0x1
- pos_08932A58:
- li v0,0x1
- pos_08932A5C:
- sh v0,0x2E(sp)
- sb v0,0x3E(s3)
- move a0,s5
- move a1,s4
- jal z_un_08937d48
- li s1,0
- andi v0,v0,0xFF
- jal z_un_088a6d58
- sh v0,0x2E(sp)
- lbu a1,0x2E(sp)
- jal z_un_088a6de0 # Set v0 to 16 and a0 to 0
- move a0,v0
- pos_08932A8C:
- bnel v0,zero,pos_08932A9C
- lbu a0,0x0(v0)
- b pos_08932CE0
- li s2,0
- pos_08932A9C:
- li v1,0x3
- andi a0,a0,0xF
- bnel a0,v1,pos_08932AD0
- lbu a1,0x4B(v0)
- lbu v1,0x2E(v0)
- addiu a0,v1,0x64
- sll v1,a0,0x1
- lbu v0,0x32(s4)
- addu v1,v1,a0
- mult v0,v1
- mflo v0
- b pos_08932C20
- sh v0,0x2E(sp)
- pos_08932AD0:
- lbu a0,0x4D(v0)
- lbu v1,0x4F(v0)
- addu a1,s1,a1
- andi a1,a1,0xFFFF
- addu a0,a1,a0
- andi a0,a0,0xFFFF
- addu v1,a0,v1
- andi a2,v1,0xFFFF
- lbu a1,0x51(v0)
- lbu a0,0x53(v0)
- lbu v1,0x55(v0)
- addu a1,a2,a1
- andi a1,a1,0xFFFF
- addu a0,a1,a0
- andi a0,a0,0xFFFF
- addu v1,a0,v1
- andi a2,v1,0xFFFF
- lbu a1,0x57(v0)
- lbu v1,0x59(v0)
- li a0,0
- addu a1,a2,a1
- andi a1,a1,0xFFFF
- addu v1,a1,v1
- andi s1,v1,0xFFFF
- andi v1,a0,0xFFFF
- pos_08932B34:
- sll v1,v1,0x1
- addu v1,v0,v1
- lbu a3,0x5B(v1)
- lbu a2,0x5D(v1)
- lbu a1,0x5F(v1)
- addu a3,s1,a3
- andi a3,a3,0xFFFF
- addu a2,a3,a2
- andi a2,a2,0xFFFF
- addu a1,a2,a1
- andi t0,a1,0xFFFF
- lbu a3,0x61(v1)
- lbu a2,0x63(v1)
- lbu a1,0x65(v1)
- addu a3,t0,a3
- andi a3,a3,0xFFFF
- addu a2,a3,a2
- andi a2,a2,0xFFFF
- addu a1,a2,a1
- andi a3,a1,0xFFFF
- lbu a2,0x67(v1)
- lbu a1,0x69(v1)
- addiu v1,a0,0x8
- addu a0,a3,a2
- andi a0,a0,0xFFFF
- addu a0,a0,a1
- andi s1,a0,0xFFFF
- andi a0,v1,0xFFFF
- slti v1,a0,0x10
- bnel v1,zero,pos_08932B34
- andi v1,a0,0xFFFF
- sh s1,0x2E(sp)
- lhu v1,0x2E(sp) # Contains the sum of weapon skill and spell lvs
- lui v0,0xAAAA
- ori v0,v0,0xAAAB
- multu v0,v1
- mfhi v0
- srl v0,v0,0x4 # Division by 24 (Tier value)
- sh v0,0x2E(sp)
- lhu v1,0x2E(sp)
- ext v0,v1,0x1,0x10 # Divide by 2
- addu v0,v1,v0 # Tier + Tier / 2
- sh v0,0x2E(sp)
- lhu v0,0x2E(sp)
- mult v0,v0 # (Tier + Tier / 2)^2
- mflo v0
- sh v0,0x2E(sp)
- lhu v1,0x2E(sp)
- bnel v1,zero,pos_08932C08 # If Tier = 0
- lbu v1,0x32(s4)
- li v0,0x1
- sh v0,0x2E(sp) # Set it tier to 1 at least
- lbu v1,0x32(s4) # Ultima level
- pos_08932C08:
- andi v0,v0,0xFFFF
- mult v0,v1 # (Tier + Tier / 2)^2 * Ultima level
- mflo v0
- andi v0,v0,0xFFFF
- addiu v0,v0,0x64 # (Tier + Tier / 2)^2 * Ultima level + 100
- sh v0,0x2E(sp)
- pos_08932C20:
- andi a0,s0,0xFFFF # multi-target flag
- li v1,0x1
- bnel a0,v1,pos_08932C40
- move a0,s5
- andi v0,v0,0xFFFF
- srl v0,v0,0x2 # Divide damage by 4 if it's multi-target
- sh v0,0x2E(sp)
- move a0,s5
- pos_08932C40:
- move a1,s4
- move a2,s3
- andi a3,v0,0xFFFF
- li t0,0
- li t1,0x1
- jal z_un_08932d08 # Random damage added
- sh zero,0x2C(sp)
- sh v0,0x2E(sp)
- lhu a2,0x2E(sp)
- li v1,-0x1
- seh a0,a2
- bnel a0,v1,pos_08932C7C
- lbu a0,0x39(s3)
- b pos_08932CE0
- li s2,0
- pos_08932C7C:
- li v1,0xFC
- bne a0,v1,pos_08932C98
- nop
- move a0,s5
- jal z_un_0893394c
- move a1,s3
- sh v0,0x2E(sp)
- pos_08932C98:
- lw v1,0x08B77E58
- lw v1,0x4EBC(v1)
- andi v1,v1,0x2
- beql v1,zero,pos_08932CC0
- move a0,s5
- andi v0,v0,0xFFFF
- sll v0,v0,0x1
- sh v0,0x2E(sp)
- move a0,s5
- pos_08932CC0:
- move a1,s4
- move a2,s3
- andi a3,v0,0xFFFF
- jal z_un_089302b8
- li t0,0
- bnel v0,zero,pos_08932CE4
- move v0,s2
- li s2,0
- pos_08932CE0:
- move v0,s2
- pos_08932CE4:
- lw ra,0x1C(sp)
- lw s5,0x18(sp)
- lw s4,0x14(sp)
- lw s3,0x10(sp)
- lw s2,0xC(sp)
- lw s1,0x8(sp)
- lw s0,0x4(sp)
- jr ra
- addiu sp,sp,0x30
- z_un_08932d08:
- addiu sp,sp,-0x20
- sw ra,0x1C(sp)
- sw s4,0x18(sp)
- sw s3,0x14(sp)
- sw s2,0x10(sp)
- sw s1,0xC(sp)
- sw s0,0x8(sp)
- move s1,t1 # Set to 1 before function
- move s3,a3 # Current damage of Ultima
- move s2,t0 # Set to 0 before function
- beq s1,zero,pos_08932E04
- li s0,0
- lbu v0,0x15(a1) # Something caster related (was 0)
- sll v0,v0,0x1C # Part of division
- srl v0,v0,0x1F # Divide v0 by 8
- beql v0,zero,pos_08932D54
- lbu v0,0x15(a2) # Something target related (same stat as caster above that was /8)
- ext s3,s3,0x1,0x10 # Multiply damage by 2
- lbu v0,0x15(a2)
- pos_08932D54:
- sll v0,v0,0x1C
- srl v0,v0,0x1F # Divide v0 by 8
- beq v0,zero,pos_08932D68
- nop
- ext s2,s2,0x1,0x10 # s2 probably 0? gets multiplied by 2
- pos_08932D68:
- beql s1,zero,pos_08932E08 # s1 probably 1
- seh v0,s0 # always 0
- andi a0,s3,0xFF # get the lowest bits of damage
- pos_08932D74:
- jal z_un_088a6470 # Rolls 0~255 (not sure what the point of this is)
- andi s4,s3,0xFFFF
- andi v0,v0,0xFF
- addu v0,s4,v0
- andi v0,v0,0xFFFF
- subu v0,v0,s2 # Something defence related?
- andi v1,v0,0xFFFF
- seh v0,v1
- bgezl v0,pos_08932DA4
- addu v0,s0,v1
- li v1,0 # minimum roll
- addu v0,s0,v1
- pos_08932DA4:
- andi s0,v0,0xFFFF
- jal z_un_088a6470 # First parameter set to 99 (extra damage bonus of 0~99)
- li a0,0x64
- andi v0,v0,0xFF
- slti at,v0,0x5 # If you rolled less than 5
- beql at,zero,pos_08932DF8
- addiu v0,s1,-0x1 # v0 is 0?
- lw v0,0x08C8EA40
- lhu v1,0x1158(v0)
- addiu a0,v0,0x1158
- andi v0,v1,0x1000
- beql v0,zero,pos_08932DE8
- ori v0,v1,0x2
- ori v0,v1,0x4 # Seems pointless? Sets something on address in a0
- b pos_08932DEC
- sh v0,0x0(a0)
- pos_08932DE8:
- sh v0,0x0(a0)
- pos_08932DEC:
- addu v0,s0,s3
- andi s0,v0,0xFFFF
- addiu v0,s1,-0x1
- pos_08932DF8:
- andi s1,v0,0xFFFF
- bnel s1,zero,pos_08932D74 # Loop back and add more damage
- andi a0,s3,0xFF
- pos_08932E04:
- seh v0,s0
- pos_08932E08:
- andi v1,v0,0xFFFF
- li at,0x8000
- slt at,v1,at
- bnel at,zero,pos_08932E24
- lw ra,0x1C(sp)
- li v0,0x7FFF
- lw ra,0x1C(sp)
- pos_08932E24:
- lw s4,0x18(sp)
- lw s3,0x14(sp)
- lw s2,0x10(sp)
- lw s1,0xC(sp)
- lw s0,0x8(sp)
- jr ra
- addiu sp,sp,0x20
- z_un_088a6470: # Random number from 0 to a0
- andi v0,a0,0xFF
- addiu v1,v0,0x1
- lui v0,0x8C9
- lbu a1,-0x2A1C(v0)
- li a0,0x08C8D5E8
- addu a0,a0,a1
- lui v0,0x8C9
- addiu a1,a1,0x1
- sb a1,-0x2A1C(v0)
- lbu v0,0x0(a0)
- div v0,v1
- mfhi v0
- jr ra
- andi v0,v0,0xFF
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement