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

311 lines
15 KiB
ArmAsm

.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
glabel func_800496B8
/* 024AB8 800496B8 27BDFFA0 */ addiu $sp, $sp, -0x60
/* 024ABC 800496BC AFB3004C */ sw $s3, 0x4c($sp)
/* 024AC0 800496C0 0080982D */ daddu $s3, $a0, $zero
/* 024AC4 800496C4 AFB40050 */ sw $s4, 0x50($sp)
/* 024AC8 800496C8 00A0A02D */ daddu $s4, $a1, $zero
/* 024ACC 800496CC AFBF0058 */ sw $ra, 0x58($sp)
/* 024AD0 800496D0 AFB50054 */ sw $s5, 0x54($sp)
/* 024AD4 800496D4 AFB20048 */ sw $s2, 0x48($sp)
/* 024AD8 800496D8 AFB10044 */ sw $s1, 0x44($sp)
/* 024ADC 800496DC AFB00040 */ sw $s0, 0x40($sp)
/* 024AE0 800496E0 8E710148 */ lw $s1, 0x148($s3)
/* 024AE4 800496E4 00C0902D */ daddu $s2, $a2, $zero
/* 024AE8 800496E8 86240008 */ lh $a0, 8($s1)
/* 024AEC 800496EC 0C00EABB */ jal get_npc_unsafe
/* 024AF0 800496F0 0000A82D */ daddu $s5, $zero, $zero
/* 024AF4 800496F4 8E830014 */ lw $v1, 0x14($s4)
/* 024AF8 800496F8 0460005D */ bltz $v1, .L80049870
/* 024AFC 800496FC 0040802D */ daddu $s0, $v0, $zero
/* 024B00 80049700 8E620074 */ lw $v0, 0x74($s3)
/* 024B04 80049704 1C400059 */ bgtz $v0, .L8004986C
/* 024B08 80049708 2442FFFF */ addiu $v0, $v0, -1
/* 024B0C 8004970C 0240202D */ daddu $a0, $s2, $zero
/* 024B10 80049710 AE630074 */ sw $v1, 0x74($s3)
/* 024B14 80049714 AFA00010 */ sw $zero, 0x10($sp)
/* 024B18 80049718 8E86000C */ lw $a2, 0xc($s4)
/* 024B1C 8004971C 8E870010 */ lw $a3, 0x10($s4)
/* 024B20 80049720 0C01242D */ jal func_800490B4
/* 024B24 80049724 0220282D */ daddu $a1, $s1, $zero
/* 024B28 80049728 1040004E */ beqz $v0, .L80049864
/* 024B2C 8004972C 00000000 */ nop
/* 024B30 80049730 C60C0038 */ lwc1 $f12, 0x38($s0)
/* 024B34 80049734 3C02800F */ lui $v0, 0x800f
/* 024B38 80049738 8C427B30 */ lw $v0, 0x7b30($v0)
/* 024B3C 8004973C C60E0040 */ lwc1 $f14, 0x40($s0)
/* 024B40 80049740 C602003C */ lwc1 $f2, 0x3c($s0)
/* 024B44 80049744 46006006 */ mov.s $f0, $f12
/* 024B48 80049748 8C460028 */ lw $a2, 0x28($v0)
/* 024B4C 8004974C 8C470030 */ lw $a3, 0x30($v0)
/* 024B50 80049750 46007106 */ mov.s $f4, $f14
/* 024B54 80049754 E7A00028 */ swc1 $f0, 0x28($sp)
/* 024B58 80049758 E7A2002C */ swc1 $f2, 0x2c($sp)
/* 024B5C 8004975C 0C00A720 */ jal atan2
/* 024B60 80049760 E7A40030 */ swc1 $f4, 0x30($sp)
/* 024B64 80049764 C6820018 */ lwc1 $f2, 0x18($s4)
/* 024B68 80049768 E7A00038 */ swc1 $f0, 0x38($sp)
/* 024B6C 8004976C E7A00014 */ swc1 $f0, 0x14($sp)
/* 024B70 80049770 E7A20010 */ swc1 $f2, 0x10($sp)
/* 024B74 80049774 860200A8 */ lh $v0, 0xa8($s0)
/* 024B78 80049778 27A50028 */ addiu $a1, $sp, 0x28
/* 024B7C 8004977C 44820000 */ mtc1 $v0, $f0
/* 024B80 80049780 00000000 */ nop
/* 024B84 80049784 46800020 */ cvt.s.w $f0, $f0
/* 024B88 80049788 E7A00018 */ swc1 $f0, 0x18($sp)
/* 024B8C 8004978C 860200A6 */ lh $v0, 0xa6($s0)
/* 024B90 80049790 27A6002C */ addiu $a2, $sp, 0x2c
/* 024B94 80049794 44820000 */ mtc1 $v0, $f0
/* 024B98 80049798 00000000 */ nop
/* 024B9C 8004979C 46800020 */ cvt.s.w $f0, $f0
/* 024BA0 800497A0 E7A0001C */ swc1 $f0, 0x1c($sp)
/* 024BA4 800497A4 8E040080 */ lw $a0, 0x80($s0)
/* 024BA8 800497A8 0C037711 */ jal func_800DDC44
/* 024BAC 800497AC 27A70030 */ addiu $a3, $sp, 0x30
/* 024BB0 800497B0 1440002C */ bnez $v0, .L80049864
/* 024BB4 800497B4 0200202D */ daddu $a0, $s0, $zero
/* 024BB8 800497B8 240502F4 */ addiu $a1, $zero, 0x2f4
/* 024BBC 800497BC C7A00038 */ lwc1 $f0, 0x38($sp)
/* 024BC0 800497C0 3C060020 */ lui $a2, 0x20
/* 024BC4 800497C4 0C012530 */ jal func_800494C0
/* 024BC8 800497C8 E600000C */ swc1 $f0, 0xc($s0)
/* 024BCC 800497CC 02A0202D */ daddu $a0, $s5, $zero
/* 024BD0 800497D0 0200282D */ daddu $a1, $s0, $zero
/* 024BD4 800497D4 0000302D */ daddu $a2, $zero, $zero
/* 024BD8 800497D8 84A300A8 */ lh $v1, 0xa8($a1)
/* 024BDC 800497DC 3C013F80 */ lui $at, 0x3f80
/* 024BE0 800497E0 44810000 */ mtc1 $at, $f0
/* 024BE4 800497E4 3C014000 */ lui $at, 0x4000
/* 024BE8 800497E8 44811000 */ mtc1 $at, $f2
/* 024BEC 800497EC 3C01C1A0 */ lui $at, 0xc1a0
/* 024BF0 800497F0 44812000 */ mtc1 $at, $f4
/* 024BF4 800497F4 2402000F */ addiu $v0, $zero, 0xf
/* 024BF8 800497F8 AFA2001C */ sw $v0, 0x1c($sp)
/* 024BFC 800497FC 44833000 */ mtc1 $v1, $f6
/* 024C00 80049800 00000000 */ nop
/* 024C04 80049804 468031A0 */ cvt.s.w $f6, $f6
/* 024C08 80049808 44073000 */ mfc1 $a3, $f6
/* 024C0C 8004980C 27A20034 */ addiu $v0, $sp, 0x34
/* 024C10 80049810 AFA20020 */ sw $v0, 0x20($sp)
/* 024C14 80049814 E7A00010 */ swc1 $f0, 0x10($sp)
/* 024C18 80049818 E7A20014 */ swc1 $f2, 0x14($sp)
/* 024C1C 8004981C 0C01BFA4 */ jal fx_emote
/* 024C20 80049820 E7A40018 */ swc1 $f4, 0x18($sp)
/* 024C24 80049824 2403FFBF */ addiu $v1, $zero, -0x41
/* 024C28 80049828 8E2200B0 */ lw $v0, 0xb0($s1)
/* 024C2C 8004982C 8E240018 */ lw $a0, 0x18($s1)
/* 024C30 80049830 00431024 */ and $v0, $v0, $v1
/* 024C34 80049834 2403FFDF */ addiu $v1, $zero, -0x21
/* 024C38 80049838 00431024 */ and $v0, $v0, $v1
/* 024C3C 8004983C AE2200B0 */ sw $v0, 0xb0($s1)
/* 024C40 80049840 9482002A */ lhu $v0, 0x2a($a0)
/* 024C44 80049844 30420001 */ andi $v0, $v0, 1
/* 024C48 80049848 10400003 */ beqz $v0, .L80049858
/* 024C4C 8004984C 2402000A */ addiu $v0, $zero, 0xa
/* 024C50 80049850 080126C8 */ j .L80049B20
/* 024C54 80049854 AE620070 */ sw $v0, 0x70($s3)
.L80049858:
/* 024C58 80049858 2402000C */ addiu $v0, $zero, 0xc
/* 024C5C 8004985C 080126C8 */ j .L80049B20
/* 024C60 80049860 AE620070 */ sw $v0, 0x70($s3)
.L80049864:
/* 024C64 80049864 8E620074 */ lw $v0, 0x74($s3)
/* 024C68 80049868 2442FFFF */ addiu $v0, $v0, -1
.L8004986C:
/* 024C6C 8004986C AE620074 */ sw $v0, 0x74($s3)
.L80049870:
/* 024C70 80049870 8E2300D0 */ lw $v1, 0xd0($s1)
/* 024C74 80049874 C6000040 */ lwc1 $f0, 0x40($s0)
/* 024C78 80049878 C4620000 */ lwc1 $f2, ($v1)
/* 024C7C 8004987C 468010A0 */ cvt.s.w $f2, $f2
/* 024C80 80049880 C4640008 */ lwc1 $f4, 8($v1)
/* 024C84 80049884 46802120 */ cvt.s.w $f4, $f4
/* 024C88 80049888 E7A00010 */ swc1 $f0, 0x10($sp)
/* 024C8C 8004988C 8E2200D0 */ lw $v0, 0xd0($s1)
/* 024C90 80049890 44051000 */ mfc1 $a1, $f2
/* 024C94 80049894 C440000C */ lwc1 $f0, 0xc($v0)
/* 024C98 80049898 46800020 */ cvt.s.w $f0, $f0
/* 024C9C 8004989C E7A00014 */ swc1 $f0, 0x14($sp)
/* 024CA0 800498A0 8E2200D0 */ lw $v0, 0xd0($s1)
/* 024CA4 800498A4 44062000 */ mfc1 $a2, $f4
/* 024CA8 800498A8 C4400010 */ lwc1 $f0, 0x10($v0)
/* 024CAC 800498AC 46800020 */ cvt.s.w $f0, $f0
/* 024CB0 800498B0 E7A00018 */ swc1 $f0, 0x18($sp)
/* 024CB4 800498B4 8C640018 */ lw $a0, 0x18($v1)
/* 024CB8 800498B8 0C0123F5 */ jal is_point_within_region
/* 024CBC 800498BC 8E070038 */ lw $a3, 0x38($s0)
/* 024CC0 800498C0 10400064 */ beqz $v0, .L80049A54
/* 024CC4 800498C4 00000000 */ nop
/* 024CC8 800498C8 8E060038 */ lw $a2, 0x38($s0)
/* 024CCC 800498CC 8E2200D0 */ lw $v0, 0xd0($s1)
/* 024CD0 800498D0 8E070040 */ lw $a3, 0x40($s0)
/* 024CD4 800498D4 C44C0000 */ lwc1 $f12, ($v0)
/* 024CD8 800498D8 46806320 */ cvt.s.w $f12, $f12
/* 024CDC 800498DC C44E0008 */ lwc1 $f14, 8($v0)
/* 024CE0 800498E0 0C00A7B5 */ jal dist2D
/* 024CE4 800498E4 468073A0 */ cvt.s.w $f14, $f14
/* 024CE8 800498E8 C6020018 */ lwc1 $f2, 0x18($s0)
/* 024CEC 800498EC 4600103C */ c.lt.s $f2, $f0
/* 024CF0 800498F0 00000000 */ nop
/* 024CF4 800498F4 45000057 */ bc1f .L80049A54
/* 024CF8 800498F8 00000000 */ nop
/* 024CFC 800498FC 8E2300B0 */ lw $v1, 0xb0($s1)
/* 024D00 80049900 30620020 */ andi $v0, $v1, 0x20
/* 024D04 80049904 14400002 */ bnez $v0, .L80049910
/* 024D08 80049908 34620060 */ ori $v0, $v1, 0x60
/* 024D0C 8004990C AE2200B0 */ sw $v0, 0xb0($s1)
.L80049910:
/* 024D10 80049910 8E2200B0 */ lw $v0, 0xb0($s1)
/* 024D14 80049914 30420040 */ andi $v0, $v0, 0x40
/* 024D18 80049918 10400013 */ beqz $v0, .L80049968
/* 024D1C 8004991C 00000000 */ nop
/* 024D20 80049920 C60C0038 */ lwc1 $f12, 0x38($s0)
/* 024D24 80049924 8E2200D0 */ lw $v0, 0xd0($s1)
/* 024D28 80049928 C60E0040 */ lwc1 $f14, 0x40($s0)
/* 024D2C 8004992C C4460000 */ lwc1 $f6, ($v0)
/* 024D30 80049930 468031A0 */ cvt.s.w $f6, $f6
/* 024D34 80049934 44063000 */ mfc1 $a2, $f6
/* 024D38 80049938 C4460008 */ lwc1 $f6, 8($v0)
/* 024D3C 8004993C 468031A0 */ cvt.s.w $f6, $f6
/* 024D40 80049940 44073000 */ mfc1 $a3, $f6
/* 024D44 80049944 0C00A720 */ jal atan2
/* 024D48 80049948 00000000 */ nop
/* 024D4C 8004994C 0C00A6C9 */ jal clamp_angle
/* 024D50 80049950 46000306 */ mov.s $f12, $f0
/* 024D54 80049954 E600000C */ swc1 $f0, 0xc($s0)
/* 024D58 80049958 8E2200B0 */ lw $v0, 0xb0($s1)
/* 024D5C 8004995C 2403FFBF */ addiu $v1, $zero, -0x41
/* 024D60 80049960 00431024 */ and $v0, $v0, $v1
/* 024D64 80049964 AE2200B0 */ sw $v0, 0xb0($s1)
.L80049968:
/* 024D68 80049968 C6000018 */ lwc1 $f0, 0x18($s0)
/* 024D6C 8004996C C6020038 */ lwc1 $f2, 0x38($s0)
/* 024D70 80049970 46000021 */ cvt.d.s $f0, $f0
/* 024D74 80049974 E7A20028 */ swc1 $f2, 0x28($sp)
/* 024D78 80049978 C602003C */ lwc1 $f2, 0x3c($s0)
/* 024D7C 8004997C C6040040 */ lwc1 $f4, 0x40($s0)
/* 024D80 80049980 46200000 */ add.d $f0, $f0, $f0
/* 024D84 80049984 E7A2002C */ swc1 $f2, 0x2c($sp)
/* 024D88 80049988 E7A40030 */ swc1 $f4, 0x30($sp)
/* 024D8C 8004998C 46200020 */ cvt.s.d $f0, $f0
/* 024D90 80049990 E7A00010 */ swc1 $f0, 0x10($sp)
/* 024D94 80049994 C600000C */ lwc1 $f0, 0xc($s0)
/* 024D98 80049998 E7A00014 */ swc1 $f0, 0x14($sp)
/* 024D9C 8004999C 860200A8 */ lh $v0, 0xa8($s0)
/* 024DA0 800499A0 27A50028 */ addiu $a1, $sp, 0x28
/* 024DA4 800499A4 44820000 */ mtc1 $v0, $f0
/* 024DA8 800499A8 00000000 */ nop
/* 024DAC 800499AC 46800020 */ cvt.s.w $f0, $f0
/* 024DB0 800499B0 E7A00018 */ swc1 $f0, 0x18($sp)
/* 024DB4 800499B4 860200A6 */ lh $v0, 0xa6($s0)
/* 024DB8 800499B8 27A6002C */ addiu $a2, $sp, 0x2c
/* 024DBC 800499BC 44820000 */ mtc1 $v0, $f0
/* 024DC0 800499C0 00000000 */ nop
/* 024DC4 800499C4 46800020 */ cvt.s.w $f0, $f0
/* 024DC8 800499C8 E7A0001C */ swc1 $f0, 0x1c($sp)
/* 024DCC 800499CC 8E040080 */ lw $a0, 0x80($s0)
/* 024DD0 800499D0 0C037711 */ jal func_800DDC44
/* 024DD4 800499D4 27A70030 */ addiu $a3, $sp, 0x30
/* 024DD8 800499D8 10400026 */ beqz $v0, .L80049A74
/* 024DDC 800499DC 24150001 */ addiu $s5, $zero, 1
/* 024DE0 800499E0 C60C0038 */ lwc1 $f12, 0x38($s0)
/* 024DE4 800499E4 8E2200D0 */ lw $v0, 0xd0($s1)
/* 024DE8 800499E8 C60E0040 */ lwc1 $f14, 0x40($s0)
/* 024DEC 800499EC C4460000 */ lwc1 $f6, ($v0)
/* 024DF0 800499F0 468031A0 */ cvt.s.w $f6, $f6
/* 024DF4 800499F4 44063000 */ mfc1 $a2, $f6
/* 024DF8 800499F8 C4460008 */ lwc1 $f6, 8($v0)
/* 024DFC 800499FC 468031A0 */ cvt.s.w $f6, $f6
/* 024E00 80049A00 44073000 */ mfc1 $a3, $f6
/* 024E04 80049A04 0C00A720 */ jal atan2
/* 024E08 80049A08 00000000 */ nop
/* 024E0C 80049A0C 0C00A6C9 */ jal clamp_angle
/* 024E10 80049A10 46000306 */ mov.s $f12, $f0
/* 024E14 80049A14 0200202D */ daddu $a0, $s0, $zero
/* 024E18 80049A18 27A60038 */ addiu $a2, $sp, 0x38
/* 024E1C 80049A1C 0000382D */ daddu $a3, $zero, $zero
/* 024E20 80049A20 2403FFBF */ addiu $v1, $zero, -0x41
/* 024E24 80049A24 E7A00038 */ swc1 $f0, 0x38($sp)
/* 024E28 80049A28 8E2200B0 */ lw $v0, 0xb0($s1)
/* 024E2C 80049A2C 3C0540A0 */ lui $a1, 0x40a0
/* 024E30 80049A30 00431024 */ and $v0, $v0, $v1
/* 024E34 80049A34 AE2200B0 */ sw $v0, 0xb0($s1)
/* 024E38 80049A38 AFA00010 */ sw $zero, 0x10($sp)
/* 024E3C 80049A3C 0C0129E1 */ jal func_8004A784
/* 024E40 80049A40 AFA00014 */ sw $zero, 0x14($sp)
/* 024E44 80049A44 C7A00038 */ lwc1 $f0, 0x38($sp)
/* 024E48 80049A48 E600000C */ swc1 $f0, 0xc($s0)
/* 024E4C 80049A4C 0801269D */ j .L80049A74
/* 024E50 80049A50 24150001 */ addiu $s5, $zero, 1
.L80049A54:
/* 024E54 80049A54 8E2300B0 */ lw $v1, 0xb0($s1)
/* 024E58 80049A58 30620020 */ andi $v0, $v1, 0x20
/* 024E5C 80049A5C 10400005 */ beqz $v0, .L80049A74
/* 024E60 80049A60 2402FFDF */ addiu $v0, $zero, -0x21
/* 024E64 80049A64 00621024 */ and $v0, $v1, $v0
/* 024E68 80049A68 2403FFBF */ addiu $v1, $zero, -0x41
/* 024E6C 80049A6C 00431024 */ and $v0, $v0, $v1
/* 024E70 80049A70 AE2200B0 */ sw $v0, 0xb0($s1)
.L80049A74:
/* 024E74 80049A74 8E2200D0 */ lw $v0, 0xd0($s1)
/* 024E78 80049A78 8C43000C */ lw $v1, 0xc($v0)
/* 024E7C 80049A7C 8C420010 */ lw $v0, 0x10($v0)
/* 024E80 80049A80 00621825 */ or $v1, $v1, $v0
/* 024E84 80049A84 00751825 */ or $v1, $v1, $s5
/* 024E88 80049A88 10600008 */ beqz $v1, .L80049AAC
/* 024E8C 80049A8C 00000000 */ nop
/* 024E90 80049A90 8602008C */ lh $v0, 0x8c($s0)
/* 024E94 80049A94 14400022 */ bnez $v0, .L80049B20
/* 024E98 80049A98 00000000 */ nop
/* 024E9C 80049A9C 8E050018 */ lw $a1, 0x18($s0)
/* 024EA0 80049AA0 8E06000C */ lw $a2, 0xc($s0)
/* 024EA4 80049AA4 0C00EA95 */ jal npc_move_heading
/* 024EA8 80049AA8 0200202D */ daddu $a0, $s0, $zero
.L80049AAC:
/* 024EAC 80049AAC 8E820004 */ lw $v0, 4($s4)
/* 024EB0 80049AB0 1840001B */ blez $v0, .L80049B20
/* 024EB4 80049AB4 00000000 */ nop
/* 024EB8 80049AB8 9602008E */ lhu $v0, 0x8e($s0)
/* 024EBC 80049ABC 2442FFFF */ addiu $v0, $v0, -1
/* 024EC0 80049AC0 A602008E */ sh $v0, 0x8e($s0)
/* 024EC4 80049AC4 00021400 */ sll $v0, $v0, 0x10
/* 024EC8 80049AC8 1C400015 */ bgtz $v0, .L80049B20
/* 024ECC 80049ACC 240403E8 */ addiu $a0, $zero, 0x3e8
/* 024ED0 80049AD0 24020002 */ addiu $v0, $zero, 2
/* 024ED4 80049AD4 0C00A67F */ jal rand_int
/* 024ED8 80049AD8 AE620070 */ sw $v0, 0x70($s3)
/* 024EDC 80049ADC 3C035555 */ lui $v1, 0x5555
/* 024EE0 80049AE0 34635556 */ ori $v1, $v1, 0x5556
/* 024EE4 80049AE4 00430018 */ mult $v0, $v1
/* 024EE8 80049AE8 000227C3 */ sra $a0, $v0, 0x1f
/* 024EEC 80049AEC 00004010 */ mfhi $t0
/* 024EF0 80049AF0 01042023 */ subu $a0, $t0, $a0
/* 024EF4 80049AF4 00041840 */ sll $v1, $a0, 1
/* 024EF8 80049AF8 00641821 */ addu $v1, $v1, $a0
/* 024EFC 80049AFC 00431023 */ subu $v0, $v0, $v1
/* 024F00 80049B00 24420002 */ addiu $v0, $v0, 2
/* 024F04 80049B04 AE620074 */ sw $v0, 0x74($s3)
/* 024F08 80049B08 8E82002C */ lw $v0, 0x2c($s4)
/* 024F0C 80049B0C 58400004 */ blezl $v0, .L80049B20
/* 024F10 80049B10 AE600070 */ sw $zero, 0x70($s3)
/* 024F14 80049B14 8E820008 */ lw $v0, 8($s4)
/* 024F18 80049B18 58400001 */ blezl $v0, .L80049B20
/* 024F1C 80049B1C AE600070 */ sw $zero, 0x70($s3)
.L80049B20:
/* 024F20 80049B20 8FBF0058 */ lw $ra, 0x58($sp)
/* 024F24 80049B24 8FB50054 */ lw $s5, 0x54($sp)
/* 024F28 80049B28 8FB40050 */ lw $s4, 0x50($sp)
/* 024F2C 80049B2C 8FB3004C */ lw $s3, 0x4c($sp)
/* 024F30 80049B30 8FB20048 */ lw $s2, 0x48($sp)
/* 024F34 80049B34 8FB10044 */ lw $s1, 0x44($sp)
/* 024F38 80049B38 8FB00040 */ lw $s0, 0x40($sp)
/* 024F3C 80049B3C 03E00008 */ jr $ra
/* 024F40 80049B40 27BD0060 */ addiu $sp, $sp, 0x60