papermario/asm/nonmatchings/code_20ec0_len_5040/func_8004A124.s
2020-08-12 22:37:16 -04:00

194 lines
9.1 KiB
ArmAsm

.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
glabel func_8004A124
/* 025524 8004A124 27BDFFA8 */ addiu $sp, $sp, -0x58
/* 025528 8004A128 AFB30044 */ sw $s3, 0x44($sp)
/* 02552C 8004A12C 0080982D */ daddu $s3, $a0, $zero
/* 025530 8004A130 AFBF0048 */ sw $ra, 0x48($sp)
/* 025534 8004A134 AFB20040 */ sw $s2, 0x40($sp)
/* 025538 8004A138 AFB1003C */ sw $s1, 0x3c($sp)
/* 02553C 8004A13C AFB00038 */ sw $s0, 0x38($sp)
/* 025540 8004A140 F7B40050 */ sdc1 $f20, 0x50($sp)
/* 025544 8004A144 8E720148 */ lw $s2, 0x148($s3)
/* 025548 8004A148 00A0882D */ daddu $s1, $a1, $zero
/* 02554C 8004A14C 86440008 */ lh $a0, 8($s2)
/* 025550 8004A150 0C00EABB */ jal get_npc_unsafe
/* 025554 8004A154 00C0802D */ daddu $s0, $a2, $zero
/* 025558 8004A158 0200202D */ daddu $a0, $s0, $zero
/* 02555C 8004A15C 0240282D */ daddu $a1, $s2, $zero
/* 025560 8004A160 24030001 */ addiu $v1, $zero, 1
/* 025564 8004A164 AFA30010 */ sw $v1, 0x10($sp)
/* 025568 8004A168 8E260024 */ lw $a2, 0x24($s1)
/* 02556C 8004A16C 8E270028 */ lw $a3, 0x28($s1)
/* 025570 8004A170 0C01242D */ jal func_800490B4
/* 025574 8004A174 0040802D */ daddu $s0, $v0, $zero
/* 025578 8004A178 1440001D */ bnez $v0, .L8004A1F0
/* 02557C 8004A17C 24040002 */ addiu $a0, $zero, 2
/* 025580 8004A180 0200282D */ daddu $a1, $s0, $zero
/* 025584 8004A184 0000302D */ daddu $a2, $zero, $zero
/* 025588 8004A188 860300A8 */ lh $v1, 0xa8($s0)
/* 02558C 8004A18C 3C013F80 */ lui $at, 0x3f80
/* 025590 8004A190 44810000 */ mtc1 $at, $f0
/* 025594 8004A194 3C014000 */ lui $at, 0x4000
/* 025598 8004A198 44811000 */ mtc1 $at, $f2
/* 02559C 8004A19C 3C01C1A0 */ lui $at, 0xc1a0
/* 0255A0 8004A1A0 44812000 */ mtc1 $at, $f4
/* 0255A4 8004A1A4 2402000F */ addiu $v0, $zero, 0xf
/* 0255A8 8004A1A8 AFA2001C */ sw $v0, 0x1c($sp)
/* 0255AC 8004A1AC 44833000 */ mtc1 $v1, $f6
/* 0255B0 8004A1B0 00000000 */ nop
/* 0255B4 8004A1B4 468031A0 */ cvt.s.w $f6, $f6
/* 0255B8 8004A1B8 44073000 */ mfc1 $a3, $f6
/* 0255BC 8004A1BC 27A20028 */ addiu $v0, $sp, 0x28
/* 0255C0 8004A1C0 AFA20020 */ sw $v0, 0x20($sp)
/* 0255C4 8004A1C4 E7A00010 */ swc1 $f0, 0x10($sp)
/* 0255C8 8004A1C8 E7A20014 */ swc1 $f2, 0x14($sp)
/* 0255CC 8004A1CC 0C01BFA4 */ jal fx_emote
/* 0255D0 8004A1D0 E7A40018 */ swc1 $f4, 0x18($sp)
/* 0255D4 8004A1D4 8E4200CC */ lw $v0, 0xcc($s2)
/* 0255D8 8004A1D8 8C430000 */ lw $v1, ($v0)
/* 0255DC 8004A1DC 24020014 */ addiu $v0, $zero, 0x14
/* 0255E0 8004A1E0 A602008E */ sh $v0, 0x8e($s0)
/* 0255E4 8004A1E4 2402000E */ addiu $v0, $zero, 0xe
/* 0255E8 8004A1E8 080128F1 */ j .L8004A3C4
/* 0255EC 8004A1EC AE030028 */ sw $v1, 0x28($s0)
.L8004A1F0:
/* 0255F0 8004A1F0 8E420018 */ lw $v0, 0x18($s2)
/* 0255F4 8004A1F4 9442002A */ lhu $v0, 0x2a($v0)
/* 0255F8 8004A1F8 30420004 */ andi $v0, $v0, 4
/* 0255FC 8004A1FC 1040004A */ beqz $v0, .L8004A328
/* 025600 8004A200 0200202D */ daddu $a0, $s0, $zero
/* 025604 8004A204 3C02800F */ lui $v0, 0x800f
/* 025608 8004A208 8C427B30 */ lw $v0, 0x7b30($v0)
/* 02560C 8004A20C C60C0038 */ lwc1 $f12, 0x38($s0)
/* 025610 8004A210 C60E0040 */ lwc1 $f14, 0x40($s0)
/* 025614 8004A214 8C460028 */ lw $a2, 0x28($v0)
/* 025618 8004A218 0C00A7B5 */ jal dist2D
/* 02561C 8004A21C 8C470030 */ lw $a3, 0x30($v0)
/* 025620 8004A220 C6020018 */ lwc1 $f2, 0x18($s0)
/* 025624 8004A224 3C014014 */ lui $at, 0x4014
/* 025628 8004A228 44812800 */ mtc1 $at, $f5
/* 02562C 8004A22C 44802000 */ mtc1 $zero, $f4
/* 025630 8004A230 460010A1 */ cvt.d.s $f2, $f2
/* 025634 8004A234 46241082 */ mul.d $f2, $f2, $f4
/* 025638 8004A238 00000000 */ nop
/* 02563C 8004A23C 46000021 */ cvt.d.s $f0, $f0
/* 025640 8004A240 4620103C */ c.lt.d $f2, $f0
/* 025644 8004A244 00000000 */ nop
/* 025648 8004A248 45000036 */ bc1f .L8004A324
/* 02564C 8004A24C 27A5002C */ addiu $a1, $sp, 0x2c
/* 025650 8004A250 C6000038 */ lwc1 $f0, 0x38($s0)
/* 025654 8004A254 C602003C */ lwc1 $f2, 0x3c($s0)
/* 025658 8004A258 C6040040 */ lwc1 $f4, 0x40($s0)
/* 02565C 8004A25C 3C013F80 */ lui $at, 0x3f80
/* 025660 8004A260 4481A000 */ mtc1 $at, $f20
/* 025664 8004A264 E7A0002C */ swc1 $f0, 0x2c($sp)
/* 025668 8004A268 E7A20030 */ swc1 $f2, 0x30($sp)
/* 02566C 8004A26C E7A40034 */ swc1 $f4, 0x34($sp)
/* 025670 8004A270 E7B40010 */ swc1 $f20, 0x10($sp)
/* 025674 8004A274 C600000C */ lwc1 $f0, 0xc($s0)
/* 025678 8004A278 E7A00014 */ swc1 $f0, 0x14($sp)
/* 02567C 8004A27C 860200A8 */ lh $v0, 0xa8($s0)
/* 025680 8004A280 44820000 */ mtc1 $v0, $f0
/* 025684 8004A284 00000000 */ nop
/* 025688 8004A288 46800020 */ cvt.s.w $f0, $f0
/* 02568C 8004A28C E7A00018 */ swc1 $f0, 0x18($sp)
/* 025690 8004A290 860200A6 */ lh $v0, 0xa6($s0)
/* 025694 8004A294 27A60030 */ addiu $a2, $sp, 0x30
/* 025698 8004A298 44820000 */ mtc1 $v0, $f0
/* 02569C 8004A29C 00000000 */ nop
/* 0256A0 8004A2A0 46800020 */ cvt.s.w $f0, $f0
/* 0256A4 8004A2A4 E7A0001C */ swc1 $f0, 0x1c($sp)
/* 0256A8 8004A2A8 8E040080 */ lw $a0, 0x80($s0)
/* 0256AC 8004A2AC 0C037711 */ jal func_800DDC44
/* 0256B0 8004A2B0 27A70034 */ addiu $a3, $sp, 0x34
/* 0256B4 8004A2B4 1040001B */ beqz $v0, .L8004A324
/* 0256B8 8004A2B8 0200282D */ daddu $a1, $s0, $zero
/* 0256BC 8004A2BC 24040002 */ addiu $a0, $zero, 2
/* 0256C0 8004A2C0 0000302D */ daddu $a2, $zero, $zero
/* 0256C4 8004A2C4 860300A8 */ lh $v1, 0xa8($s0)
/* 0256C8 8004A2C8 3C014000 */ lui $at, 0x4000
/* 0256CC 8004A2CC 44810000 */ mtc1 $at, $f0
/* 0256D0 8004A2D0 3C01C1A0 */ lui $at, 0xc1a0
/* 0256D4 8004A2D4 44811000 */ mtc1 $at, $f2
/* 0256D8 8004A2D8 2402000C */ addiu $v0, $zero, 0xc
/* 0256DC 8004A2DC AFA2001C */ sw $v0, 0x1c($sp)
/* 0256E0 8004A2E0 44833000 */ mtc1 $v1, $f6
/* 0256E4 8004A2E4 00000000 */ nop
/* 0256E8 8004A2E8 468031A0 */ cvt.s.w $f6, $f6
/* 0256EC 8004A2EC 44073000 */ mfc1 $a3, $f6
/* 0256F0 8004A2F0 27A20028 */ addiu $v0, $sp, 0x28
/* 0256F4 8004A2F4 E7B40010 */ swc1 $f20, 0x10($sp)
/* 0256F8 8004A2F8 AFA20020 */ sw $v0, 0x20($sp)
/* 0256FC 8004A2FC E7A00014 */ swc1 $f0, 0x14($sp)
/* 025700 8004A300 0C01BFA4 */ jal fx_emote
/* 025704 8004A304 E7A20018 */ swc1 $f2, 0x18($sp)
/* 025708 8004A308 8E4200CC */ lw $v0, 0xcc($s2)
/* 02570C 8004A30C 8C430000 */ lw $v1, ($v0)
/* 025710 8004A310 2402000F */ addiu $v0, $zero, 0xf
/* 025714 8004A314 A602008E */ sh $v0, 0x8e($s0)
/* 025718 8004A318 2402000E */ addiu $v0, $zero, 0xe
/* 02571C 8004A31C 080128F1 */ j .L8004A3C4
/* 025720 8004A320 AE030028 */ sw $v1, 0x28($s0)
.L8004A324:
/* 025724 8004A324 0200202D */ daddu $a0, $s0, $zero
.L8004A328:
/* 025728 8004A328 0C00F598 */ jal func_8003D660
/* 02572C 8004A32C 24050001 */ addiu $a1, $zero, 1
/* 025730 8004A330 8E050018 */ lw $a1, 0x18($s0)
/* 025734 8004A334 8E06000C */ lw $a2, 0xc($s0)
/* 025738 8004A338 0C00EA95 */ jal npc_move_heading
/* 02573C 8004A33C 0200202D */ daddu $a0, $s0, $zero
/* 025740 8004A340 C6000018 */ lwc1 $f0, 0x18($s0)
/* 025744 8004A344 3C014020 */ lui $at, 0x4020
/* 025748 8004A348 44811800 */ mtc1 $at, $f3
/* 02574C 8004A34C 44801000 */ mtc1 $zero, $f2
/* 025750 8004A350 46000021 */ cvt.d.s $f0, $f0
/* 025754 8004A354 4620103C */ c.lt.d $f2, $f0
/* 025758 8004A358 00000000 */ nop
/* 02575C 8004A35C 45000012 */ bc1f .L8004A3A8
/* 025760 8004A360 00000000 */ nop
/* 025764 8004A364 3C028007 */ lui $v0, 0x8007
/* 025768 8004A368 8C42419C */ lw $v0, 0x419c($v0)
/* 02576C 8004A36C 94430134 */ lhu $v1, 0x134($v0)
/* 025770 8004A370 3C02CCCC */ lui $v0, 0xcccc
/* 025774 8004A374 3442CCCD */ ori $v0, $v0, 0xcccd
/* 025778 8004A378 00620019 */ multu $v1, $v0
/* 02577C 8004A37C 00004010 */ mfhi $t0
/* 025780 8004A380 00082082 */ srl $a0, $t0, 2
/* 025784 8004A384 00041080 */ sll $v0, $a0, 2
/* 025788 8004A388 00441021 */ addu $v0, $v0, $a0
/* 02578C 8004A38C 00621823 */ subu $v1, $v1, $v0
/* 025790 8004A390 3063FFFF */ andi $v1, $v1, 0xffff
/* 025794 8004A394 14600004 */ bnez $v1, .L8004A3A8
/* 025798 8004A398 0200202D */ daddu $a0, $s0, $zero
/* 02579C 8004A39C 240520C1 */ addiu $a1, $zero, 0x20c1
/* 0257A0 8004A3A0 0C012530 */ jal func_800494C0
/* 0257A4 8004A3A4 0000302D */ daddu $a2, $zero, $zero
.L8004A3A8:
/* 0257A8 8004A3A8 8602008E */ lh $v0, 0x8e($s0)
/* 0257AC 8004A3AC 9603008E */ lhu $v1, 0x8e($s0)
/* 0257B0 8004A3B0 18400003 */ blez $v0, .L8004A3C0
/* 0257B4 8004A3B4 2462FFFF */ addiu $v0, $v1, -1
/* 0257B8 8004A3B8 080128F2 */ j .L8004A3C8
/* 0257BC 8004A3BC A602008E */ sh $v0, 0x8e($s0)
.L8004A3C0:
/* 0257C0 8004A3C0 2402000C */ addiu $v0, $zero, 0xc
.L8004A3C4:
/* 0257C4 8004A3C4 AE620070 */ sw $v0, 0x70($s3)
.L8004A3C8:
/* 0257C8 8004A3C8 8FBF0048 */ lw $ra, 0x48($sp)
/* 0257CC 8004A3CC 8FB30044 */ lw $s3, 0x44($sp)
/* 0257D0 8004A3D0 8FB20040 */ lw $s2, 0x40($sp)
/* 0257D4 8004A3D4 8FB1003C */ lw $s1, 0x3c($sp)
/* 0257D8 8004A3D8 8FB00038 */ lw $s0, 0x38($sp)
/* 0257DC 8004A3DC D7B40050 */ ldc1 $f20, 0x50($sp)
/* 0257E0 8004A3E0 03E00008 */ jr $ra
/* 0257E4 8004A3E4 27BD0058 */ addiu $sp, $sp, 0x58