1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2024-11-25 01:34:18 +00:00

Decompile ovl_En_Ganon_Mant (#912)

* Initial progress

* Improve the last NON_EQUIVALENT to NON_MATCHING

* 2 functions down to stack, migrate data

* 2 more matches, some other improvements

* Use Vtx over Vtx_tn

* Begin documenting

* Some names

* More docs

* Finish docs

* Remove VTX_TN

* Review suggestions

* Single line comments

Co-authored-by: Roman971 <32455037+Roman971@users.noreply.github.com>

* en_ganon_mant fully matched thanks to Roman

Co-authored-by: Thar0 <maximilianc64@gmail.com>
Co-authored-by: Roman971 <32455037+Roman971@users.noreply.github.com>
This commit is contained in:
Tharo 2021-08-30 01:29:11 +01:00 committed by GitHub
parent e9f98f44c4
commit 3c2b198130
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
14 changed files with 1188 additions and 1221 deletions

View file

@ -1,4 +0,0 @@
glabel EnGanonMant_Destroy
/* 00018 80A23D78 AFA40000 */ sw $a0, 0x0000($sp)
/* 0001C 80A23D7C 03E00008 */ jr $ra
/* 00020 80A23D80 AFA50004 */ sw $a1, 0x0004($sp)

View file

@ -1,224 +0,0 @@
.late_rodata
glabel D_80A27EE4
.float 1.57079637051
glabel D_80A27EE8
.float 3.14159274101
.text
glabel EnGanonMant_Draw
/* 00C6C 80A249CC 27BDFF28 */ addiu $sp, $sp, 0xFF28 ## $sp = FFFFFF28
/* 00C70 80A249D0 AFBF0074 */ sw $ra, 0x0074($sp)
/* 00C74 80A249D4 AFB60070 */ sw $s6, 0x0070($sp)
/* 00C78 80A249D8 AFB5006C */ sw $s5, 0x006C($sp)
/* 00C7C 80A249DC AFB40068 */ sw $s4, 0x0068($sp)
/* 00C80 80A249E0 AFB30064 */ sw $s3, 0x0064($sp)
/* 00C84 80A249E4 AFB20060 */ sw $s2, 0x0060($sp)
/* 00C88 80A249E8 AFB1005C */ sw $s1, 0x005C($sp)
/* 00C8C 80A249EC AFB00058 */ sw $s0, 0x0058($sp)
/* 00C90 80A249F0 F7BE0050 */ sdc1 $f30, 0x0050($sp)
/* 00C94 80A249F4 F7BC0048 */ sdc1 $f28, 0x0048($sp)
/* 00C98 80A249F8 F7BA0040 */ sdc1 $f26, 0x0040($sp)
/* 00C9C 80A249FC F7B80038 */ sdc1 $f24, 0x0038($sp)
/* 00CA0 80A24A00 F7B60030 */ sdc1 $f22, 0x0030($sp)
/* 00CA4 80A24A04 F7B40028 */ sdc1 $f20, 0x0028($sp)
/* 00CA8 80A24A08 908E1705 */ lbu $t6, 0x1705($a0) ## 00001705
/* 00CAC 80A24A0C 00809025 */ or $s2, $a0, $zero ## $s2 = 00000000
/* 00CB0 80A24A10 00A0B025 */ or $s6, $a1, $zero ## $s6 = 00000000
/* 00CB4 80A24A14 51C000A6 */ beql $t6, $zero, .L80A24CB0
/* 00CB8 80A24A18 02C02025 */ or $a0, $s6, $zero ## $a0 = 00000000
/* 00CBC 80A24A1C 44800000 */ mtc1 $zero, $f0 ## $f0 = 0.00
/* 00CC0 80A24A20 C48416BC */ lwc1 $f4, 0x16BC($a0) ## 000016BC
/* 00CC4 80A24A24 248216D4 */ addiu $v0, $a0, 0x16D4 ## $v0 = 000016D4
/* 00CC8 80A24A28 3C01C150 */ lui $at, 0xC150 ## $at = C1500000
/* 00CCC 80A24A2C 46040032 */ c.eq.s $f0, $f4
/* 00CD0 80A24A30 00000000 */ nop
/* 00CD4 80A24A34 45030006 */ bc1tl .L80A24A50
/* 00CD8 80A24A38 C64816C0 */ lwc1 $f8, 0x16C0($s2) ## 000016C0
/* 00CDC 80A24A3C 44813000 */ mtc1 $at, $f6 ## $f6 = -13.00
/* 00CE0 80A24A40 248316F8 */ addiu $v1, $a0, 0x16F8 ## $v1 = 000016F8
/* 00CE4 80A24A44 10000018 */ beq $zero, $zero, .L80A24AA8
/* 00CE8 80A24A48 E48616C8 */ swc1 $f6, 0x16C8($a0) ## 000016C8
/* 00CEC 80A24A4C C64816C0 */ lwc1 $f8, 0x16C0($s2) ## 000016C0
.L80A24A50:
/* 00CF0 80A24A50 264216EC */ addiu $v0, $s2, 0x16EC ## $v0 = 000016EC
/* 00CF4 80A24A54 3C01C150 */ lui $at, 0xC150 ## $at = C1500000
/* 00CF8 80A24A58 46080032 */ c.eq.s $f0, $f8
/* 00CFC 80A24A5C 00000000 */ nop
/* 00D00 80A24A60 45030006 */ bc1tl .L80A24A7C
/* 00D04 80A24A64 C64416C4 */ lwc1 $f4, 0x16C4($s2) ## 000016C4
/* 00D08 80A24A68 44815000 */ mtc1 $at, $f10 ## $f10 = -13.00
/* 00D0C 80A24A6C 264316E0 */ addiu $v1, $s2, 0x16E0 ## $v1 = 000016E0
/* 00D10 80A24A70 1000000D */ beq $zero, $zero, .L80A24AA8
/* 00D14 80A24A74 E64A16C8 */ swc1 $f10, 0x16C8($s2) ## 000016C8
/* 00D18 80A24A78 C64416C4 */ lwc1 $f4, 0x16C4($s2) ## 000016C4
.L80A24A7C:
/* 00D1C 80A24A7C 3C01C040 */ lui $at, 0xC040 ## $at = C0400000
/* 00D20 80A24A80 264216D4 */ addiu $v0, $s2, 0x16D4 ## $v0 = 000016D4
/* 00D24 80A24A84 46040032 */ c.eq.s $f0, $f4
/* 00D28 80A24A88 264316E0 */ addiu $v1, $s2, 0x16E0 ## $v1 = 000016E0
/* 00D2C 80A24A8C 45010006 */ bc1t .L80A24AA8
/* 00D30 80A24A90 00000000 */ nop
/* 00D34 80A24A94 44813000 */ mtc1 $at, $f6 ## $f6 = -3.00
/* 00D38 80A24A98 264216EC */ addiu $v0, $s2, 0x16EC ## $v0 = 000016EC
/* 00D3C 80A24A9C 264316F8 */ addiu $v1, $s2, 0x16F8 ## $v1 = 000016F8
/* 00D40 80A24AA0 10000001 */ beq $zero, $zero, .L80A24AA8
/* 00D44 80A24AA4 E64616C8 */ swc1 $f6, 0x16C8($s2) ## 000016C8
.L80A24AA8:
/* 00D48 80A24AA8 C4400000 */ lwc1 $f0, 0x0000($v0) ## 000016EC
/* 00D4C 80A24AAC C4680000 */ lwc1 $f8, 0x0000($v1) ## 000016F8
/* 00D50 80A24AB0 C4420004 */ lwc1 $f2, 0x0004($v0) ## 000016F0
/* 00D54 80A24AB4 C46A0004 */ lwc1 $f10, 0x0004($v1) ## 000016FC
/* 00D58 80A24AB8 46004501 */ sub.s $f20, $f8, $f0
/* 00D5C 80A24ABC 3C013F00 */ lui $at, 0x3F00 ## $at = 3F000000
/* 00D60 80A24AC0 44819000 */ mtc1 $at, $f18 ## $f18 = 0.50
/* 00D64 80A24AC4 46025601 */ sub.s $f24, $f10, $f2
/* 00D68 80A24AC8 C4500008 */ lwc1 $f16, 0x0008($v0) ## 000016F4
/* 00D6C 80A24ACC C4640008 */ lwc1 $f4, 0x0008($v1) ## 00001700
/* 00D70 80A24AD0 4612A182 */ mul.s $f6, $f20, $f18
/* 00D74 80A24AD4 4600A386 */ mov.s $f14, $f20
/* 00D78 80A24AD8 46102581 */ sub.s $f22, $f4, $f16
/* 00D7C 80A24ADC 4612C202 */ mul.s $f8, $f24, $f18
/* 00D80 80A24AE0 00000000 */ nop
/* 00D84 80A24AE4 4612B102 */ mul.s $f4, $f22, $f18
/* 00D88 80A24AE8 4600B306 */ mov.s $f12, $f22
/* 00D8C 80A24AEC 46060780 */ add.s $f30, $f0, $f6
/* 00D90 80A24AF0 46081280 */ add.s $f10, $f2, $f8
/* 00D94 80A24AF4 46048180 */ add.s $f6, $f16, $f4
/* 00D98 80A24AF8 E7AA0090 */ swc1 $f10, 0x0090($sp)
/* 00D9C 80A24AFC 0C0341F5 */ jal Math_Atan2F
/* 00DA0 80A24B00 E7A60094 */ swc1 $f6, 0x0094($sp)
/* 00DA4 80A24B04 4614A702 */ mul.s $f28, $f20, $f20
/* 00DA8 80A24B08 46000686 */ mov.s $f26, $f0
/* 00DAC 80A24B0C 4600C386 */ mov.s $f14, $f24
/* 00DB0 80A24B10 4616B082 */ mul.s $f2, $f22, $f22
/* 00DB4 80A24B14 4602E000 */ add.s $f0, $f28, $f2
/* 00DB8 80A24B18 E7A2007C */ swc1 $f2, 0x007C($sp)
/* 00DBC 80A24B1C 0C0341F5 */ jal Math_Atan2F
/* 00DC0 80A24B20 46000304 */ sqrt.s $f12, $f0
/* 00DC4 80A24B24 4618C202 */ mul.s $f8, $f24, $f24
/* 00DC8 80A24B28 C7A2007C */ lwc1 $f2, 0x007C($sp)
/* 00DCC 80A24B2C 46000507 */ neg.s $f20, $f0
/* 00DD0 80A24B30 3C013F00 */ lui $at, 0x3F00 ## $at = 3F000000
/* 00DD4 80A24B34 44812000 */ mtc1 $at, $f4 ## $f4 = 0.50
/* 00DD8 80A24B38 4600D306 */ mov.s $f12, $f26
/* 00DDC 80A24B3C 00002825 */ or $a1, $zero, $zero ## $a1 = 00000000
/* 00DE0 80A24B40 4608E280 */ add.s $f10, $f28, $f8
/* 00DE4 80A24B44 46025000 */ add.s $f0, $f10, $f2
/* 00DE8 80A24B48 46000004 */ sqrt.s $f0, $f0
/* 00DEC 80A24B4C 46040582 */ mul.s $f22, $f0, $f4
/* 00DF0 80A24B50 0C034348 */ jal Matrix_RotateY
/* 00DF4 80A24B54 00000000 */ nop
/* 00DF8 80A24B58 4600A306 */ mov.s $f12, $f20
/* 00DFC 80A24B5C 0C0342DC */ jal Matrix_RotateX
/* 00E00 80A24B60 24050001 */ addiu $a1, $zero, 0x0001 ## $a1 = 00000001
/* 00E04 80A24B64 3C0180A2 */ lui $at, %hi(D_80A27EE4) ## $at = 80A20000
/* 00E08 80A24B68 C4267EE4 */ lwc1 $f6, %lo(D_80A27EE4)($at)
/* 00E0C 80A24B6C 3C014130 */ lui $at, 0x4130 ## $at = 41300000
/* 00E10 80A24B70 4480E000 */ mtc1 $zero, $f28 ## $f28 = 0.00
/* 00E14 80A24B74 4606D201 */ sub.s $f8, $f26, $f6
/* 00E18 80A24B78 4481D000 */ mtc1 $at, $f26 ## $f26 = 11.00
/* 00E1C 80A24B7C 3C0180A2 */ lui $at, %hi(D_80A27EE8) ## $at = 80A20000
/* 00E20 80A24B80 00008025 */ or $s0, $zero, $zero ## $s0 = 00000000
/* 00E24 80A24B84 E64816CC */ swc1 $f8, 0x16CC($s2) ## 000016CC
/* 00E28 80A24B88 C4387EE8 */ lwc1 $f24, %lo(D_80A27EE8)($at)
/* 00E2C 80A24B8C 27B500B4 */ addiu $s5, $sp, 0x00B4 ## $s5 = FFFFFFDC
/* 00E30 80A24B90 27B400C0 */ addiu $s4, $sp, 0x00C0 ## $s4 = FFFFFFE8
/* 00E34 80A24B94 241301C8 */ addiu $s3, $zero, 0x01C8 ## $s3 = 000001C8
.L80A24B98:
/* 00E38 80A24B98 0C034213 */ jal Matrix_Push
/* 00E3C 80A24B9C 00000000 */ nop
/* 00E40 80A24BA0 44905000 */ mtc1 $s0, $f10 ## $f10 = 0.00
/* 00E44 80A24BA4 00000000 */ nop
/* 00E48 80A24BA8 46805120 */ cvt.s.w $f4, $f10
/* 00E4C 80A24BAC 46182182 */ mul.s $f6, $f4, $f24
/* 00E50 80A24BB0 461A3503 */ div.s $f20, $f6, $f26
/* 00E54 80A24BB4 0C0400A4 */ jal sinf
/* 00E58 80A24BB8 4600A306 */ mov.s $f12, $f20
/* 00E5C 80A24BBC 46160202 */ mul.s $f8, $f0, $f22
/* 00E60 80A24BC0 E7BC00C4 */ swc1 $f28, 0x00C4($sp)
/* 00E64 80A24BC4 4600A306 */ mov.s $f12, $f20
/* 00E68 80A24BC8 0C041184 */ jal cosf
/* 00E6C 80A24BCC E7A800C0 */ swc1 $f8, 0x00C0($sp)
/* 00E70 80A24BD0 46000287 */ neg.s $f10, $f0
/* 00E74 80A24BD4 02802025 */ or $a0, $s4, $zero ## $a0 = FFFFFFE8
/* 00E78 80A24BD8 46165102 */ mul.s $f4, $f10, $f22
/* 00E7C 80A24BDC 02A02825 */ or $a1, $s5, $zero ## $a1 = FFFFFFDC
/* 00E80 80A24BE0 0C0346BD */ jal Matrix_MultVec3f
/* 00E84 80A24BE4 E7A400C8 */ swc1 $f4, 0x00C8($sp)
/* 00E88 80A24BE8 02130019 */ multu $s0, $s3
/* 00E8C 80A24BEC C7A600B4 */ lwc1 $f6, 0x00B4($sp)
/* 00E90 80A24BF0 26110001 */ addiu $s1, $s0, 0x0001 ## $s1 = 00000001
/* 00E94 80A24BF4 0011C400 */ sll $t8, $s1, 16
/* 00E98 80A24BF8 4606F200 */ add.s $f8, $f30, $f6
/* 00E9C 80A24BFC 0018CC03 */ sra $t9, $t8, 16
/* 00EA0 80A24C00 00111C00 */ sll $v1, $s1, 16
/* 00EA4 80A24C04 2B21000C */ slti $at, $t9, 0x000C
/* 00EA8 80A24C08 00031C03 */ sra $v1, $v1, 16
/* 00EAC 80A24C0C 00007812 */ mflo $t7
/* 00EB0 80A24C10 024F1021 */ addu $v0, $s2, $t7
/* 00EB4 80A24C14 E448014C */ swc1 $f8, 0x014C($v0) ## 0000014C
/* 00EB8 80A24C18 C7A400B8 */ lwc1 $f4, 0x00B8($sp)
/* 00EBC 80A24C1C C7AA0090 */ lwc1 $f10, 0x0090($sp)
/* 00EC0 80A24C20 46045180 */ add.s $f6, $f10, $f4
/* 00EC4 80A24C24 E4460150 */ swc1 $f6, 0x0150($v0) ## 00000150
/* 00EC8 80A24C28 C7AA00BC */ lwc1 $f10, 0x00BC($sp)
/* 00ECC 80A24C2C C7A80094 */ lwc1 $f8, 0x0094($sp)
/* 00ED0 80A24C30 460A4100 */ add.s $f4, $f8, $f10
/* 00ED4 80A24C34 14200004 */ bne $at, $zero, .L80A24C48
/* 00ED8 80A24C38 E4440154 */ swc1 $f4, 0x0154($v0) ## 00000154
/* 00EDC 80A24C3C 2603FFFF */ addiu $v1, $s0, 0xFFFF ## $v1 = FFFFFFFF
/* 00EE0 80A24C40 00031C00 */ sll $v1, $v1, 16
/* 00EE4 80A24C44 00031C03 */ sra $v1, $v1, 16
.L80A24C48:
/* 00EE8 80A24C48 00730019 */ multu $v1, $s3
/* 00EEC 80A24C4C 244B01E8 */ addiu $t3, $v0, 0x01E8 ## $t3 = 000001E8
/* 00EF0 80A24C50 244C0278 */ addiu $t4, $v0, 0x0278 ## $t4 = 00000278
/* 00EF4 80A24C54 AFAC0018 */ sw $t4, 0x0018($sp)
/* 00EF8 80A24C58 AFAB0014 */ sw $t3, 0x0014($sp)
/* 00EFC 80A24C5C 02C02025 */ or $a0, $s6, $zero ## $a0 = 00000000
/* 00F00 80A24C60 02402825 */ or $a1, $s2, $zero ## $a1 = 00000000
/* 00F04 80A24C64 2446014C */ addiu $a2, $v0, 0x014C ## $a2 = 0000014C
/* 00F08 80A24C68 24470158 */ addiu $a3, $v0, 0x0158 ## $a3 = 00000158
/* 00F0C 80A24C6C AFB0001C */ sw $s0, 0x001C($sp)
/* 00F10 80A24C70 00004012 */ mflo $t0
/* 00F14 80A24C74 02484821 */ addu $t1, $s2, $t0
/* 00F18 80A24C78 252A0158 */ addiu $t2, $t1, 0x0158 ## $t2 = 00000158
/* 00F1C 80A24C7C 0C288FF8 */ jal func_80A23FE0
/* 00F20 80A24C80 AFAA0010 */ sw $t2, 0x0010($sp)
/* 00F24 80A24C84 0C034221 */ jal Matrix_Pop
/* 00F28 80A24C88 00000000 */ nop
/* 00F2C 80A24C8C 00118400 */ sll $s0, $s1, 16
/* 00F30 80A24C90 00108403 */ sra $s0, $s0, 16
/* 00F34 80A24C94 2A01000C */ slti $at, $s0, 0x000C
/* 00F38 80A24C98 1420FFBF */ bne $at, $zero, .L80A24B98
/* 00F3C 80A24C9C 00000000 */ nop
/* 00F40 80A24CA0 0C289169 */ jal func_80A245A4
/* 00F44 80A24CA4 02402025 */ or $a0, $s2, $zero ## $a0 = 00000000
/* 00F48 80A24CA8 A2401705 */ sb $zero, 0x1705($s2) ## 00001705
/* 00F4C 80A24CAC 02C02025 */ or $a0, $s6, $zero ## $a0 = 00000000
.L80A24CB0:
/* 00F50 80A24CB0 0C289221 */ jal func_80A24884
/* 00F54 80A24CB4 02402825 */ or $a1, $s2, $zero ## $a1 = 00000000
/* 00F58 80A24CB8 8FBF0074 */ lw $ra, 0x0074($sp)
/* 00F5C 80A24CBC D7B40028 */ ldc1 $f20, 0x0028($sp)
/* 00F60 80A24CC0 D7B60030 */ ldc1 $f22, 0x0030($sp)
/* 00F64 80A24CC4 D7B80038 */ ldc1 $f24, 0x0038($sp)
/* 00F68 80A24CC8 D7BA0040 */ ldc1 $f26, 0x0040($sp)
/* 00F6C 80A24CCC D7BC0048 */ ldc1 $f28, 0x0048($sp)
/* 00F70 80A24CD0 D7BE0050 */ ldc1 $f30, 0x0050($sp)
/* 00F74 80A24CD4 8FB00058 */ lw $s0, 0x0058($sp)
/* 00F78 80A24CD8 8FB1005C */ lw $s1, 0x005C($sp)
/* 00F7C 80A24CDC 8FB20060 */ lw $s2, 0x0060($sp)
/* 00F80 80A24CE0 8FB30064 */ lw $s3, 0x0064($sp)
/* 00F84 80A24CE4 8FB40068 */ lw $s4, 0x0068($sp)
/* 00F88 80A24CE8 8FB5006C */ lw $s5, 0x006C($sp)
/* 00F8C 80A24CEC 8FB60070 */ lw $s6, 0x0070($sp)
/* 00F90 80A24CF0 03E00008 */ jr $ra
/* 00F94 80A24CF4 27BD00D8 */ addiu $sp, $sp, 0x00D8 ## $sp = 00000000
/* 00F98 80A24CF8 00000000 */ nop
/* 00F9C 80A24CFC 00000000 */ nop

View file

@ -1,7 +0,0 @@
glabel EnGanonMant_Init
/* 00000 80A23D60 AFA50004 */ sw $a1, 0x0004($sp)
/* 00004 80A23D64 8C8E0004 */ lw $t6, 0x0004($a0) ## 00000004
/* 00008 80A23D68 2401FFFE */ addiu $at, $zero, 0xFFFE ## $at = FFFFFFFE
/* 0000C 80A23D6C 01C17824 */ and $t7, $t6, $at
/* 00010 80A23D70 03E00008 */ jr $ra
/* 00014 80A23D74 AC8F0004 */ sw $t7, 0x0004($a0) ## 00000004

View file

@ -1,53 +0,0 @@
glabel EnGanonMant_Update
/* 00A68 80A247C8 27BDFFE8 */ addiu $sp, $sp, 0xFFE8 ## $sp = FFFFFFE8
/* 00A6C 80A247CC AFBF0014 */ sw $ra, 0x0014($sp)
/* 00A70 80A247D0 AFA5001C */ sw $a1, 0x001C($sp)
/* 00A74 80A247D4 44801000 */ mtc1 $zero, $f2 ## $f2 = 0.00
/* 00A78 80A247D8 C48016C0 */ lwc1 $f0, 0x16C0($a0) ## 000016C0
/* 00A7C 80A247DC 908F1706 */ lbu $t7, 0x1706($a0) ## 00001706
/* 00A80 80A247E0 240E0001 */ addiu $t6, $zero, 0x0001 ## $t6 = 00000001
/* 00A84 80A247E4 46001032 */ c.eq.s $f2, $f0
/* 00A88 80A247E8 25F80001 */ addiu $t8, $t7, 0x0001 ## $t8 = 00000001
/* 00A8C 80A247EC 8C830118 */ lw $v1, 0x0118($a0) ## 00000118
/* 00A90 80A247F0 A08E1705 */ sb $t6, 0x1705($a0) ## 00001705
/* 00A94 80A247F4 45000005 */ bc1f .L80A2480C
/* 00A98 80A247F8 A0981706 */ sb $t8, 0x1706($a0) ## 00001706
/* 00A9C 80A247FC 3C013F80 */ lui $at, 0x3F80 ## $at = 3F800000
/* 00AA0 80A24800 44816000 */ mtc1 $at, $f12 ## $f12 = 1.00
/* 00AA4 80A24804 10000007 */ beq $zero, $zero, .L80A24824
/* 00AA8 80A24808 C48016BC */ lwc1 $f0, 0x16BC($a0) ## 000016BC
.L80A2480C:
/* 00AAC 80A2480C 3C013F80 */ lui $at, 0x3F80 ## $at = 3F800000
/* 00AB0 80A24810 44816000 */ mtc1 $at, $f12 ## $f12 = 1.00
/* 00AB4 80A24814 00000000 */ nop
/* 00AB8 80A24818 460C0101 */ sub.s $f4, $f0, $f12
/* 00ABC 80A2481C E48416C0 */ swc1 $f4, 0x16C0($a0) ## 000016C0
/* 00AC0 80A24820 C48016BC */ lwc1 $f0, 0x16BC($a0) ## 000016BC
.L80A24824:
/* 00AC4 80A24824 46001032 */ c.eq.s $f2, $f0
/* 00AC8 80A24828 00000000 */ nop
/* 00ACC 80A2482C 45030004 */ bc1tl .L80A24840
/* 00AD0 80A24830 C48016C4 */ lwc1 $f0, 0x16C4($a0) ## 000016C4
/* 00AD4 80A24834 460C0181 */ sub.s $f6, $f0, $f12
/* 00AD8 80A24838 E48616BC */ swc1 $f6, 0x16BC($a0) ## 000016BC
/* 00ADC 80A2483C C48016C4 */ lwc1 $f0, 0x16C4($a0) ## 000016C4
.L80A24840:
/* 00AE0 80A24840 46001032 */ c.eq.s $f2, $f0
/* 00AE4 80A24844 00000000 */ nop
/* 00AE8 80A24848 45030004 */ bc1tl .L80A2485C
/* 00AEC 80A2484C 90821704 */ lbu $v0, 0x1704($a0) ## 00001704
/* 00AF0 80A24850 460C0201 */ sub.s $f8, $f0, $f12
/* 00AF4 80A24854 E48816C4 */ swc1 $f8, 0x16C4($a0) ## 000016C4
/* 00AF8 80A24858 90821704 */ lbu $v0, 0x1704($a0) ## 00001704
.L80A2485C:
/* 00AFC 80A2485C 847900B6 */ lh $t9, 0x00B6($v1) ## 000000B6
/* 00B00 80A24860 10400004 */ beq $v0, $zero, .L80A24874
/* 00B04 80A24864 A49900B6 */ sh $t9, 0x00B6($a0) ## 000000B6
/* 00B08 80A24868 2448FFFF */ addiu $t0, $v0, 0xFFFF ## $t0 = FFFFFFFF
/* 00B0C 80A2486C 0C288F61 */ jal func_80A23D84
/* 00B10 80A24870 A0881704 */ sb $t0, 0x1704($a0) ## 00001704
.L80A24874:
/* 00B14 80A24874 8FBF0014 */ lw $ra, 0x0014($sp)
/* 00B18 80A24878 27BD0018 */ addiu $sp, $sp, 0x0018 ## $sp = 00000000
/* 00B1C 80A2487C 03E00008 */ jr $ra
/* 00B20 80A24880 00000000 */ nop

View file

@ -1,178 +0,0 @@
.late_rodata
glabel D_80A27EC8
.float 6.28318548203
glabel D_80A27ECC
.word 0x407F5C29
glabel D_80A27ED0
.word 0x413E6666
.text
glabel func_80A23D84
/* 00024 80A23D84 27BDFFA0 */ addiu $sp, $sp, 0xFFA0 ## $sp = FFFFFFA0
/* 00028 80A23D88 F7B80028 */ sdc1 $f24, 0x0028($sp)
/* 0002C 80A23D8C 3C014200 */ lui $at, 0x4200 ## $at = 42000000
/* 00030 80A23D90 4481C000 */ mtc1 $at, $f24 ## $f24 = 32.00
/* 00034 80A23D94 AFBF0044 */ sw $ra, 0x0044($sp)
/* 00038 80A23D98 AFB20040 */ sw $s2, 0x0040($sp)
/* 0003C 80A23D9C 00809025 */ or $s2, $a0, $zero ## $s2 = 00000000
/* 00040 80A23DA0 AFB1003C */ sw $s1, 0x003C($sp)
/* 00044 80A23DA4 AFB00038 */ sw $s0, 0x0038($sp)
/* 00048 80A23DA8 F7BA0030 */ sdc1 $f26, 0x0030($sp)
/* 0004C 80A23DAC F7B60020 */ sdc1 $f22, 0x0020($sp)
/* 00050 80A23DB0 F7B40018 */ sdc1 $f20, 0x0018($sp)
/* 00054 80A23DB4 0C00CFBE */ jal Rand_ZeroFloat
/* 00058 80A23DB8 4600C306 */ mov.s $f12, $f24
/* 0005C 80A23DBC 3C014280 */ lui $at, 0x4280 ## $at = 42800000
/* 00060 80A23DC0 4481D000 */ mtc1 $at, $f26 ## $f26 = 64.00
/* 00064 80A23DC4 E7A00050 */ swc1 $f0, 0x0050($sp)
/* 00068 80A23DC8 0C00CFBE */ jal Rand_ZeroFloat
/* 0006C 80A23DCC 4600D306 */ mov.s $f12, $f26
/* 00070 80A23DD0 3C0180A2 */ lui $at, %hi(D_80A27EC8) ## $at = 80A20000
/* 00074 80A23DD4 C42C7EC8 */ lwc1 $f12, %lo(D_80A27EC8)($at)
/* 00078 80A23DD8 0C00CFBE */ jal Rand_ZeroFloat
/* 0007C 80A23DDC E7A0004C */ swc1 $f0, 0x004C($sp)
/* 00080 80A23DE0 46000586 */ mov.s $f22, $f0
/* 00084 80A23DE4 0C0400A4 */ jal sinf
/* 00088 80A23DE8 46000306 */ mov.s $f12, $f0
/* 0008C 80A23DEC 46000506 */ mov.s $f20, $f0
/* 00090 80A23DF0 0C041184 */ jal cosf
/* 00094 80A23DF4 4600B306 */ mov.s $f12, $f22
/* 00098 80A23DF8 3C0180A2 */ lui $at, %hi(D_80A27ECC) ## $at = 80A20000
/* 0009C 80A23DFC 46000586 */ mov.s $f22, $f0
/* 000A0 80A23E00 0C00CFBE */ jal Rand_ZeroFloat
/* 000A4 80A23E04 C42C7ECC */ lwc1 $f12, %lo(D_80A27ECC)($at)
/* 000A8 80A23E08 4600010D */ trunc.w.s $f4, $f0
/* 000AC 80A23E0C 3C0C80A2 */ lui $t4, %hi(D_80A24D64) ## $t4 = 80A20000
/* 000B0 80A23E10 258C4D64 */ addiu $t4, $t4, %lo(D_80A24D64) ## $t4 = 80A24D64
/* 000B4 80A23E14 C7A20050 */ lwc1 $f2, 0x0050($sp)
/* 000B8 80A23E18 440F2000 */ mfc1 $t7, $f4
/* 000BC 80A23E1C C7AE004C */ lwc1 $f14, 0x004C($sp)
/* 000C0 80A23E20 00008025 */ or $s0, $zero, $zero ## $s0 = 00000000
/* 000C4 80A23E24 000FC400 */ sll $t8, $t7, 16
/* 000C8 80A23E28 0018CC03 */ sra $t9, $t8, 16
/* 000CC 80A23E2C 001958C0 */ sll $t3, $t9, 3
/* 000D0 80A23E30 016C1021 */ addu $v0, $t3, $t4
/* 000D4 80A23E34 84490004 */ lh $t1, 0x0004($v0) ## 00000004
/* 000D8 80A23E38 8C4A0000 */ lw $t2, 0x0000($v0) ## 00000000
/* 000DC 80A23E3C 3C0780A2 */ lui $a3, %hi(D_80A24F78) ## $a3 = 80A20000
/* 000E0 80A23E40 19200041 */ blez $t1, .L80A23F48
/* 000E4 80A23E44 24110001 */ addiu $s1, $zero, 0x0001 ## $s1 = 00000001
/* 000E8 80A23E48 44800000 */ mtc1 $zero, $f0 ## $f0 = 0.00
/* 000EC 80A23E4C 24E74F78 */ addiu $a3, $a3, %lo(D_80A24F78) ## $a3 = 80A24F78
.L80A23E50:
/* 000F0 80A23E50 4602003E */ c.le.s $f0, $f2
/* 000F4 80A23E54 00000000 */ nop
/* 000F8 80A23E58 45020034 */ bc1fl .L80A23F2C
/* 000FC 80A23E5C 26100001 */ addiu $s0, $s0, 0x0001 ## $s0 = 00000001
/* 00100 80A23E60 4618103C */ c.lt.s $f2, $f24
/* 00104 80A23E64 00000000 */ nop
/* 00108 80A23E68 45020030 */ bc1fl .L80A23F2C
/* 0010C 80A23E6C 26100001 */ addiu $s0, $s0, 0x0001 ## $s0 = 00000002
/* 00110 80A23E70 460E003E */ c.le.s $f0, $f14
/* 00114 80A23E74 00000000 */ nop
/* 00118 80A23E78 4502002C */ bc1fl .L80A23F2C
/* 0011C 80A23E7C 26100001 */ addiu $s0, $s0, 0x0001 ## $s0 = 00000003
/* 00120 80A23E80 461A703C */ c.lt.s $f14, $f26
/* 00124 80A23E84 00106840 */ sll $t5, $s0, 1
/* 00128 80A23E88 014D3021 */ addu $a2, $t2, $t5
/* 0012C 80A23E8C 45020027 */ bc1fl .L80A23F2C
/* 00130 80A23E90 26100001 */ addiu $s0, $s0, 0x0001 ## $s0 = 00000004
/* 00134 80A23E94 84C40000 */ lh $a0, 0x0000($a2) ## 00000000
/* 00138 80A23E98 00004025 */ or $t0, $zero, $zero ## $t0 = 00000000
/* 0013C 80A23E9C 04820023 */ bltzl $a0, .L80A23F2C
/* 00140 80A23EA0 26100001 */ addiu $s0, $s0, 0x0001 ## $s0 = 00000005
.L80A23EA4:
/* 00144 80A23EA4 0480001A */ bltz $a0, .L80A23F10
/* 00148 80A23EA8 00001825 */ or $v1, $zero, $zero ## $v1 = 00000000
/* 0014C 80A23EAC 4600720D */ trunc.w.s $f8, $f14
/* 00150 80A23EB0 4600118D */ trunc.w.s $f6, $f2
/* 00154 80A23EB4 440E4000 */ mfc1 $t6, $f8
/* 00158 80A23EB8 44193000 */ mfc1 $t9, $f6
/* 0015C 80A23EBC 000E7940 */ sll $t7, $t6, 5
/* 00160 80A23EC0 032FC021 */ addu $t8, $t9, $t7
/* 00164 80A23EC4 00185C00 */ sll $t3, $t8, 16
/* 00168 80A23EC8 000B6403 */ sra $t4, $t3, 16
/* 0016C 80A23ECC 01882821 */ addu $a1, $t4, $t0
/* 00170 80A23ED0 00036940 */ sll $t5, $v1, 5
.L80A23ED4:
/* 00174 80A23ED4 00AD1021 */ addu $v0, $a1, $t5
/* 00178 80A23ED8 00021400 */ sll $v0, $v0, 16
/* 0017C 80A23EDC 00021403 */ sra $v0, $v0, 16
/* 00180 80A23EE0 28410800 */ slti $at, $v0, 0x0800
/* 00184 80A23EE4 10200005 */ beq $at, $zero, .L80A23EFC
/* 00188 80A23EE8 24630001 */ addiu $v1, $v1, 0x0001 ## $v1 = 00000001
/* 0018C 80A23EEC 00027040 */ sll $t6, $v0, 1
/* 00190 80A23EF0 00EEC821 */ addu $t9, $a3, $t6
/* 00194 80A23EF4 A7200000 */ sh $zero, 0x0000($t9) ## 00000000
/* 00198 80A23EF8 84C40000 */ lh $a0, 0x0000($a2) ## 00000000
.L80A23EFC:
/* 0019C 80A23EFC 00031C00 */ sll $v1, $v1, 16
/* 001A0 80A23F00 00031C03 */ sra $v1, $v1, 16
/* 001A4 80A23F04 0083082A */ slt $at, $a0, $v1
/* 001A8 80A23F08 5020FFF2 */ beql $at, $zero, .L80A23ED4
/* 001AC 80A23F0C 00036940 */ sll $t5, $v1, 5
.L80A23F10:
/* 001B0 80A23F10 25080001 */ addiu $t0, $t0, 0x0001 ## $t0 = 00000001
/* 001B4 80A23F14 00084400 */ sll $t0, $t0, 16
/* 001B8 80A23F18 00084403 */ sra $t0, $t0, 16
/* 001BC 80A23F1C 0088082A */ slt $at, $a0, $t0
/* 001C0 80A23F20 1020FFE0 */ beq $at, $zero, .L80A23EA4
/* 001C4 80A23F24 00000000 */ nop
/* 001C8 80A23F28 26100001 */ addiu $s0, $s0, 0x0001 ## $s0 = 00000006
.L80A23F2C:
/* 001CC 80A23F2C 00108400 */ sll $s0, $s0, 16
/* 001D0 80A23F30 00108403 */ sra $s0, $s0, 16
/* 001D4 80A23F34 0209082A */ slt $at, $s0, $t1
/* 001D8 80A23F38 46141080 */ add.s $f2, $f2, $f20
/* 001DC 80A23F3C 1420FFC4 */ bne $at, $zero, .L80A23E50
/* 001E0 80A23F40 46167380 */ add.s $f14, $f14, $f22
/* 001E4 80A23F44 00008025 */ or $s0, $zero, $zero ## $s0 = 00000000
.L80A23F48:
/* 001E8 80A23F48 3C0180A2 */ lui $at, %hi(D_80A27ED0) ## $at = 80A20000
/* 001EC 80A23F4C C4367ED0 */ lwc1 $f22, %lo(D_80A27ED0)($at)
.L80A23F50:
/* 001F0 80A23F50 0C00CFBE */ jal Rand_ZeroFloat
/* 001F4 80A23F54 4600B306 */ mov.s $f12, $f22
/* 001F8 80A23F58 46000506 */ mov.s $f20, $f0
/* 001FC 80A23F5C 0C00CFBE */ jal Rand_ZeroFloat
/* 00200 80A23F60 4600B306 */ mov.s $f12, $f22
/* 00204 80A23F64 4600028D */ trunc.w.s $f10, $f0
/* 00208 80A23F68 26100001 */ addiu $s0, $s0, 0x0001 ## $s0 = 00000001
/* 0020C 80A23F6C 00108400 */ sll $s0, $s0, 16
/* 00210 80A23F70 4600A40D */ trunc.w.s $f16, $f20
/* 00214 80A23F74 44185000 */ mfc1 $t8, $f10
/* 00218 80A23F78 00108403 */ sra $s0, $s0, 16
/* 0021C 80A23F7C 2A010004 */ slti $at, $s0, 0x0004
/* 00220 80A23F80 00185C00 */ sll $t3, $t8, 16
/* 00224 80A23F84 000B6403 */ sra $t4, $t3, 16
/* 00228 80A23F88 000C68C0 */ sll $t5, $t4, 3
/* 0022C 80A23F8C 440F8000 */ mfc1 $t7, $f16
/* 00230 80A23F90 01AC6823 */ subu $t5, $t5, $t4
/* 00234 80A23F94 000D68C0 */ sll $t5, $t5, 3
/* 00238 80A23F98 01AC6821 */ addu $t5, $t5, $t4
/* 0023C 80A23F9C 000D68C0 */ sll $t5, $t5, 3
/* 00240 80A23FA0 000FC400 */ sll $t8, $t7, 16
/* 00244 80A23FA4 00185C03 */ sra $t3, $t8, 16
/* 00248 80A23FA8 024D7021 */ addu $t6, $s2, $t5
/* 0024C 80A23FAC 01CB6021 */ addu $t4, $t6, $t3
/* 00250 80A23FB0 1420FFE7 */ bne $at, $zero, .L80A23F50
/* 00254 80A23FB4 A1910308 */ sb $s1, 0x0308($t4) ## 00000308
/* 00258 80A23FB8 8FBF0044 */ lw $ra, 0x0044($sp)
/* 0025C 80A23FBC D7B40018 */ ldc1 $f20, 0x0018($sp)
/* 00260 80A23FC0 D7B60020 */ ldc1 $f22, 0x0020($sp)
/* 00264 80A23FC4 D7B80028 */ ldc1 $f24, 0x0028($sp)
/* 00268 80A23FC8 D7BA0030 */ ldc1 $f26, 0x0030($sp)
/* 0026C 80A23FCC 8FB00038 */ lw $s0, 0x0038($sp)
/* 00270 80A23FD0 8FB1003C */ lw $s1, 0x003C($sp)
/* 00274 80A23FD4 8FB20040 */ lw $s2, 0x0040($sp)
/* 00278 80A23FD8 03E00008 */ jr $ra
/* 0027C 80A23FDC 27BD0060 */ addiu $sp, $sp, 0x0060 ## $sp = 00000000

View file

@ -1,410 +0,0 @@
.late_rodata
glabel D_80A27ED4
.float 3.14159274101
glabel D_80A27ED8
.float 6.28318548203
glabel D_80A27EDC
.float 2.1
glabel D_80A27EE0
.float 3.14159274101
.text
glabel func_80A23FE0
/* 00280 80A23FE0 27BDFF20 */ addiu $sp, $sp, 0xFF20 ## $sp = FFFFFF20
/* 00284 80A23FE4 44802000 */ mtc1 $zero, $f4 ## $f4 = 0.00
/* 00288 80A23FE8 AFBF006C */ sw $ra, 0x006C($sp)
/* 0028C 80A23FEC AFBE0068 */ sw $s8, 0x0068($sp)
/* 00290 80A23FF0 AFB70064 */ sw $s7, 0x0064($sp)
/* 00294 80A23FF4 AFB60060 */ sw $s6, 0x0060($sp)
/* 00298 80A23FF8 AFB5005C */ sw $s5, 0x005C($sp)
/* 0029C 80A23FFC AFB40058 */ sw $s4, 0x0058($sp)
/* 002A0 80A24000 AFB30054 */ sw $s3, 0x0054($sp)
/* 002A4 80A24004 AFB20050 */ sw $s2, 0x0050($sp)
/* 002A8 80A24008 AFB1004C */ sw $s1, 0x004C($sp)
/* 002AC 80A2400C AFB00048 */ sw $s0, 0x0048($sp)
/* 002B0 80A24010 F7BE0040 */ sdc1 $f30, 0x0040($sp)
/* 002B4 80A24014 F7BC0038 */ sdc1 $f28, 0x0038($sp)
/* 002B8 80A24018 F7BA0030 */ sdc1 $f26, 0x0030($sp)
/* 002BC 80A2401C F7B80028 */ sdc1 $f24, 0x0028($sp)
/* 002C0 80A24020 F7B60020 */ sdc1 $f22, 0x0020($sp)
/* 002C4 80A24024 F7B40018 */ sdc1 $f20, 0x0018($sp)
/* 002C8 80A24028 AFA400E0 */ sw $a0, 0x00E0($sp)
/* 002CC 80A2402C E7A400A4 */ swc1 $f4, 0x00A4($sp)
/* 002D0 80A24030 84AE001C */ lh $t6, 0x001C($a1) ## 0000001C
/* 002D4 80A24034 24010023 */ addiu $at, $zero, 0x0023 ## $at = 00000023
/* 002D8 80A24038 00E08025 */ or $s0, $a3, $zero ## $s0 = 00000000
/* 002DC 80A2403C 00A09025 */ or $s2, $a1, $zero ## $s2 = 00000000
/* 002E0 80A24040 15C1002C */ bne $t6, $at, .L80A240F4
/* 002E4 80A24044 00C0F025 */ or $s8, $a2, $zero ## $s8 = 00000000
/* 002E8 80A24048 3C01C1F0 */ lui $at, 0xC1F0 ## $at = C1F00000
/* 002EC 80A2404C 44803000 */ mtc1 $zero, $f6 ## $f6 = 0.00
/* 002F0 80A24050 44814000 */ mtc1 $at, $f8 ## $f8 = -30.00
/* 002F4 80A24054 3C014700 */ lui $at, 0x4700 ## $at = 47000000
/* 002F8 80A24058 E7A600A0 */ swc1 $f6, 0x00A0($sp)
/* 002FC 80A2405C E7A800A8 */ swc1 $f8, 0x00A8($sp)
/* 00300 80A24060 84AF00B6 */ lh $t7, 0x00B6($a1) ## 000000B6
/* 00304 80A24064 44819000 */ mtc1 $at, $f18 ## $f18 = 32768.00
/* 00308 80A24068 3C0180A2 */ lui $at, %hi(D_80A27ED4) ## $at = 80A20000
/* 0030C 80A2406C 448F5000 */ mtc1 $t7, $f10 ## $f10 = 0.00
/* 00310 80A24070 C4267ED4 */ lwc1 $f6, %lo(D_80A27ED4)($at)
/* 00314 80A24074 00002825 */ or $a1, $zero, $zero ## $a1 = 00000000
/* 00318 80A24078 46805420 */ cvt.s.w $f16, $f10
/* 0031C 80A2407C 46128103 */ div.s $f4, $f16, $f18
/* 00320 80A24080 46062302 */ mul.s $f12, $f4, $f6
/* 00324 80A24084 0C034348 */ jal Matrix_RotateY
/* 00328 80A24088 00000000 */ nop
/* 0032C 80A2408C 27B500A0 */ addiu $s5, $sp, 0x00A0 ## $s5 = FFFFFFC0
/* 00330 80A24090 02A02025 */ or $a0, $s5, $zero ## $a0 = FFFFFFC0
/* 00334 80A24094 0C0346BD */ jal Matrix_MultVec3f
/* 00338 80A24098 27A50094 */ addiu $a1, $sp, 0x0094 ## $a1 = FFFFFFB4
/* 0033C 80A2409C 0000A025 */ or $s4, $zero, $zero ## $s4 = 00000000
/* 00340 80A240A0 2403000C */ addiu $v1, $zero, 0x000C ## $v1 = 0000000C
.L80A240A4:
/* 00344 80A240A4 02830019 */ multu $s4, $v1
/* 00348 80A240A8 C7AA0094 */ lwc1 $f10, 0x0094($sp)
/* 0034C 80A240AC 26940001 */ addiu $s4, $s4, 0x0001 ## $s4 = 00000001
/* 00350 80A240B0 0014A400 */ sll $s4, $s4, 16
/* 00354 80A240B4 0014A403 */ sra $s4, $s4, 16
/* 00358 80A240B8 2A81000C */ slti $at, $s4, 0x000C
/* 0035C 80A240BC 0000C012 */ mflo $t8
/* 00360 80A240C0 03101021 */ addu $v0, $t8, $s0
/* 00364 80A240C4 C4480000 */ lwc1 $f8, 0x0000($v0) ## 00000000
/* 00368 80A240C8 C4520008 */ lwc1 $f18, 0x0008($v0) ## 00000008
/* 0036C 80A240CC 460A4400 */ add.s $f16, $f8, $f10
/* 00370 80A240D0 E4500000 */ swc1 $f16, 0x0000($v0) ## 00000000
/* 00374 80A240D4 C7A4009C */ lwc1 $f4, 0x009C($sp)
/* 00378 80A240D8 46049180 */ add.s $f6, $f18, $f4
/* 0037C 80A240DC 1420FFF1 */ bne $at, $zero, .L80A240A4
/* 00380 80A240E0 E4460008 */ swc1 $f6, 0x0008($v0) ## 00000008
/* 00384 80A240E4 3C0140D0 */ lui $at, 0x40D0 ## $at = 40D00000
/* 00388 80A240E8 44814000 */ mtc1 $at, $f8 ## $f8 = 6.50
/* 0038C 80A240EC 10000005 */ beq $zero, $zero, .L80A24104
/* 00390 80A240F0 E7A800AC */ swc1 $f8, 0x00AC($sp)
.L80A240F4:
/* 00394 80A240F4 3C014118 */ lui $at, 0x4118 ## $at = 41180000
/* 00398 80A240F8 44815000 */ mtc1 $at, $f10 ## $f10 = 9.50
/* 0039C 80A240FC 27B500A0 */ addiu $s5, $sp, 0x00A0 ## $s5 = FFFFFFC0
/* 003A0 80A24100 E7AA00AC */ swc1 $f10, 0x00AC($sp)
.L80A24104:
/* 003A4 80A24104 3C01C0A0 */ lui $at, 0xC0A0 ## $at = C0A00000
/* 003A8 80A24108 4481F000 */ mtc1 $at, $f30 ## $f30 = -5.00
/* 003AC 80A2410C 3C0140A0 */ lui $at, 0x40A0 ## $at = 40A00000
/* 003B0 80A24110 4481E000 */ mtc1 $at, $f28 ## $f28 = 5.00
/* 003B4 80A24114 0000A025 */ or $s4, $zero, $zero ## $s4 = 00000000
/* 003B8 80A24118 8FB700F0 */ lw $s7, 0x00F0($sp)
/* 003BC 80A2411C 8FB600F4 */ lw $s6, 0x00F4($sp)
/* 003C0 80A24120 8FB100F8 */ lw $s1, 0x00F8($sp)
.L80A24124:
/* 003C4 80A24124 16800008 */ bne $s4, $zero, .L80A24148
/* 003C8 80A24128 87A200FE */ lh $v0, 0x00FE($sp)
/* 003CC 80A2412C C7D00000 */ lwc1 $f16, 0x0000($s8) ## 00000000
/* 003D0 80A24130 E6100000 */ swc1 $f16, 0x0000($s0) ## 00000000
/* 003D4 80A24134 C7D20004 */ lwc1 $f18, 0x0004($s8) ## 00000004
/* 003D8 80A24138 E6120004 */ swc1 $f18, 0x0004($s0) ## 00000004
/* 003DC 80A2413C C7C40008 */ lwc1 $f4, 0x0008($s8) ## 00000008
/* 003E0 80A24140 100000F7 */ beq $zero, $zero, .L80A24520
/* 003E4 80A24144 E6040008 */ swc1 $f4, 0x0008($s0) ## 00000008
.L80A24148:
/* 003E8 80A24148 44823000 */ mtc1 $v0, $f6 ## $f6 = 0.00
/* 003EC 80A2414C 44822000 */ mtc1 $v0, $f4 ## $f4 = 0.00
/* 003F0 80A24150 3C0180A2 */ lui $at, %hi(D_80A27ED8) ## $at = 80A20000
/* 003F4 80A24154 46803220 */ cvt.s.w $f8, $f6
/* 003F8 80A24158 C42A7ED8 */ lwc1 $f10, %lo(D_80A27ED8)($at)
/* 003FC 80A2415C 3C0180A2 */ lui $at, %hi(D_80A27EDC) ## $at = 80A20000
/* 00400 80A24160 C4327EDC */ lwc1 $f18, %lo(D_80A27EDC)($at)
/* 00404 80A24164 3C0180A2 */ lui $at, %hi(D_80A27EE0) ## $at = 80A20000
/* 00408 80A24168 468021A0 */ cvt.s.w $f6, $f4
/* 0040C 80A2416C 460A4402 */ mul.s $f16, $f8, $f10
/* 00410 80A24170 C4287EE0 */ lwc1 $f8, %lo(D_80A27EE0)($at)
/* 00414 80A24174 3C014130 */ lui $at, 0x4130 ## $at = 41300000
/* 00418 80A24178 3C063DCC */ lui $a2, 0x3DCC ## $a2 = 3DCC0000
/* 0041C 80A2417C 34C6CCCD */ ori $a2, $a2, 0xCCCD ## $a2 = 3DCCCCCD
/* 00420 80A24180 46083282 */ mul.s $f10, $f6, $f8
/* 00424 80A24184 02202025 */ or $a0, $s1, $zero ## $a0 = 00000000
/* 00428 80A24188 3C053F80 */ lui $a1, 0x3F80 ## $a1 = 3F800000
/* 0042C 80A2418C 46128503 */ div.s $f20, $f16, $f18
/* 00430 80A24190 44818000 */ mtc1 $at, $f16 ## $f16 = 11.00
/* 00434 80A24194 0C01E123 */ jal Math_ApproachZeroF
/* 00438 80A24198 46105583 */ div.s $f22, $f10, $f16
/* 0043C 80A2419C 3C063DCC */ lui $a2, 0x3DCC ## $a2 = 3DCC0000
/* 00440 80A241A0 34C6CCCD */ ori $a2, $a2, 0xCCCD ## $a2 = 3DCCCCCD
/* 00444 80A241A4 26240004 */ addiu $a0, $s1, 0x0004 ## $a0 = 00000004
/* 00448 80A241A8 0C01E123 */ jal Math_ApproachZeroF
/* 0044C 80A241AC 3C053F80 */ lui $a1, 0x3F80 ## $a1 = 3F800000
/* 00450 80A241B0 3C063DCC */ lui $a2, 0x3DCC ## $a2 = 3DCC0000
/* 00454 80A241B4 34C6CCCD */ ori $a2, $a2, 0xCCCD ## $a2 = 3DCCCCCD
/* 00458 80A241B8 26240008 */ addiu $a0, $s1, 0x0008 ## $a0 = 00000008
/* 0045C 80A241BC 0C01E123 */ jal Math_ApproachZeroF
/* 00460 80A241C0 3C053F80 */ lui $a1, 0x3F80 ## $a1 = 3F800000
/* 00464 80A241C4 44809000 */ mtc1 $zero, $f18 ## $f18 = 0.00
/* 00468 80A241C8 4600A306 */ mov.s $f12, $f20
/* 0046C 80A241CC 0C0400A4 */ jal sinf
/* 00470 80A241D0 E7B200A0 */ swc1 $f18, 0x00A0($sp)
/* 00474 80A241D4 C64616B4 */ lwc1 $f6, 0x16B4($s2) ## 000016B4
/* 00478 80A241D8 C64416B0 */ lwc1 $f4, 0x16B0($s2) ## 000016B0
/* 0047C 80A241DC 00149880 */ sll $s3, $s4, 2
/* 00480 80A241E0 46060202 */ mul.s $f8, $f0, $f6
/* 00484 80A241E4 3C0180A2 */ lui $at, %hi(D_80A24D84) ## $at = 80A20000
/* 00488 80A241E8 00330821 */ addu $at, $at, $s3
/* 0048C 80A241EC C4304D84 */ lwc1 $f16, %lo(D_80A24D84)($at)
/* 00490 80A241F0 00002825 */ or $a1, $zero, $zero ## $a1 = 00000000
/* 00494 80A241F4 46082280 */ add.s $f10, $f4, $f8
/* 00498 80A241F8 460A8482 */ mul.s $f18, $f16, $f10
/* 0049C 80A241FC E7B200A8 */ swc1 $f18, 0x00A8($sp)
/* 004A0 80A24200 0C034348 */ jal Matrix_RotateY
/* 004A4 80A24204 C64C16CC */ lwc1 $f12, 0x16CC($s2) ## 000016CC
/* 004A8 80A24208 02A02025 */ or $a0, $s5, $zero ## $a0 = FFFFFFC0
/* 004AC 80A2420C 0C0346BD */ jal Matrix_MultVec3f
/* 004B0 80A24210 27A50088 */ addiu $a1, $sp, 0x0088 ## $a1 = FFFFFFA8
/* 004B4 80A24214 0C041184 */ jal cosf
/* 004B8 80A24218 4600B306 */ mov.s $f12, $f22
/* 004BC 80A2421C C64416B8 */ lwc1 $f4, 0x16B8($s2) ## 000016B8
/* 004C0 80A24220 3C0180A2 */ lui $at, %hi(D_80A24DD0) ## $at = 80A20000
/* 004C4 80A24224 00330821 */ addu $at, $at, $s3
/* 004C8 80A24228 46040202 */ mul.s $f8, $f0, $f4
/* 004CC 80A2422C C4264DD0 */ lwc1 $f6, %lo(D_80A24DD0)($at)
/* 004D0 80A24230 44805000 */ mtc1 $zero, $f10 ## $f10 = 0.00
/* 004D4 80A24234 02A02025 */ or $a0, $s5, $zero ## $a0 = FFFFFFC0
/* 004D8 80A24238 27A5007C */ addiu $a1, $sp, 0x007C ## $a1 = FFFFFF9C
/* 004DC 80A2423C E7AA00A8 */ swc1 $f10, 0x00A8($sp)
/* 004E0 80A24240 46083402 */ mul.s $f16, $f6, $f8
/* 004E4 80A24244 0C0346BD */ jal Matrix_MultVec3f
/* 004E8 80A24248 E7B000A0 */ swc1 $f16, 0x00A0($sp)
/* 004EC 80A2424C C6120000 */ lwc1 $f18, 0x0000($s0) ## 00000000
/* 004F0 80A24250 C6240000 */ lwc1 $f4, 0x0000($s1) ## 00000000
/* 004F4 80A24254 C608FFF4 */ lwc1 $f8, -0x000C($s0) ## FFFFFFF4
/* 004F8 80A24258 C7AA0088 */ lwc1 $f10, 0x0088($sp)
/* 004FC 80A2425C 46049180 */ add.s $f6, $f18, $f4
/* 00500 80A24260 C7B2007C */ lwc1 $f18, 0x007C($sp)
/* 00504 80A24264 C64016C8 */ lwc1 $f0, 0x16C8($s2) ## 000016C8
/* 00508 80A24268 46083401 */ sub.s $f16, $f6, $f8
/* 0050C 80A2426C C6280004 */ lwc1 $f8, 0x0004($s1) ## 00000004
/* 00510 80A24270 C6060004 */ lwc1 $f6, 0x0004($s0) ## 00000004
/* 00514 80A24274 46125100 */ add.s $f4, $f10, $f18
/* 00518 80A24278 C612FFF8 */ lwc1 $f18, -0x0008($s0) ## FFFFFFF8
/* 0051C 80A2427C 46083280 */ add.s $f10, $f6, $f8
/* 00520 80A24280 C6260008 */ lwc1 $f6, 0x0008($s1) ## 00000008
/* 00524 80A24284 46048500 */ add.s $f20, $f16, $f4
/* 00528 80A24288 C6040008 */ lwc1 $f4, 0x0008($s0) ## 00000008
/* 0052C 80A2428C 46125401 */ sub.s $f16, $f10, $f18
/* 00530 80A24290 C60AFFFC */ lwc1 $f10, -0x0004($s0) ## FFFFFFFC
/* 00534 80A24294 4600A386 */ mov.s $f14, $f20
/* 00538 80A24298 46062200 */ add.s $f8, $f4, $f6
/* 0053C 80A2429C C7A40084 */ lwc1 $f4, 0x0084($sp)
/* 00540 80A242A0 46008600 */ add.s $f24, $f16, $f0
/* 00544 80A242A4 C7B00090 */ lwc1 $f16, 0x0090($sp)
/* 00548 80A242A8 460A4481 */ sub.s $f18, $f8, $f10
/* 0054C 80A242AC 46048180 */ add.s $f6, $f16, $f4
/* 00550 80A242B0 46069580 */ add.s $f22, $f18, $f6
/* 00554 80A242B4 0C0341F5 */ jal Math_Atan2F
/* 00558 80A242B8 4600B306 */ mov.s $f12, $f22
/* 0055C 80A242BC 4614A202 */ mul.s $f8, $f20, $f20
/* 00560 80A242C0 46000686 */ mov.s $f26, $f0
/* 00564 80A242C4 4600C386 */ mov.s $f14, $f24
/* 00568 80A242C8 4616B282 */ mul.s $f10, $f22, $f22
/* 0056C 80A242CC 460A4000 */ add.s $f0, $f8, $f10
/* 00570 80A242D0 0C0341F5 */ jal Math_Atan2F
/* 00574 80A242D4 46000304 */ sqrt.s $f12, $f0
/* 00578 80A242D8 46000507 */ neg.s $f20, $f0
/* 0057C 80A242DC 44808000 */ mtc1 $zero, $f16 ## $f16 = 0.00
/* 00580 80A242E0 E6D4FFF4 */ swc1 $f20, -0x000C($s6) ## FFFFFFF4
/* 00584 80A242E4 C7A400AC */ lwc1 $f4, 0x00AC($sp)
/* 00588 80A242E8 4600D306 */ mov.s $f12, $f26
/* 0058C 80A242EC 00002825 */ or $a1, $zero, $zero ## $a1 = 00000000
/* 00590 80A242F0 E7B000A0 */ swc1 $f16, 0x00A0($sp)
/* 00594 80A242F4 0C034348 */ jal Matrix_RotateY
/* 00598 80A242F8 E7A400A8 */ swc1 $f4, 0x00A8($sp)
/* 0059C 80A242FC 4600A306 */ mov.s $f12, $f20
/* 005A0 80A24300 0C0342DC */ jal Matrix_RotateX
/* 005A4 80A24304 24050001 */ addiu $a1, $zero, 0x0001 ## $a1 = 00000001
/* 005A8 80A24308 02A02025 */ or $a0, $s5, $zero ## $a0 = FFFFFFC0
/* 005AC 80A2430C 0C0346BD */ jal Matrix_MultVec3f
/* 005B0 80A24310 27A50094 */ addiu $a1, $sp, 0x0094 ## $a1 = FFFFFFB4
/* 005B4 80A24314 C612FFF4 */ lwc1 $f18, -0x000C($s0) ## FFFFFFF4
/* 005B8 80A24318 C7A60094 */ lwc1 $f6, 0x0094($sp)
/* 005BC 80A2431C C6140000 */ lwc1 $f20, 0x0000($s0) ## 00000000
/* 005C0 80A24320 C60AFFF8 */ lwc1 $f10, -0x0008($s0) ## FFFFFFF8
/* 005C4 80A24324 46069200 */ add.s $f8, $f18, $f6
/* 005C8 80A24328 C6180004 */ lwc1 $f24, 0x0004($s0) ## 00000004
/* 005CC 80A2432C C612FFFC */ lwc1 $f18, -0x0004($s0) ## FFFFFFFC
/* 005D0 80A24330 C6160008 */ lwc1 $f22, 0x0008($s0) ## 00000008
/* 005D4 80A24334 E6080000 */ swc1 $f8, 0x0000($s0) ## 00000000
/* 005D8 80A24338 C7B00098 */ lwc1 $f16, 0x0098($sp)
/* 005DC 80A2433C 3C1980A2 */ lui $t9, %hi(D_80A24E18) ## $t9 = 80A20000
/* 005E0 80A24340 27394E18 */ addiu $t9, $t9, %lo(D_80A24E18) ## $t9 = 80A24E18
/* 005E4 80A24344 46105100 */ add.s $f4, $f10, $f16
/* 005E8 80A24348 C60A0000 */ lwc1 $f10, 0x0000($s0) ## 00000000
/* 005EC 80A2434C 02791021 */ addu $v0, $s3, $t9
/* 005F0 80A24350 E6040004 */ swc1 $f4, 0x0004($s0) ## 00000004
/* 005F4 80A24354 C7A6009C */ lwc1 $f6, 0x009C($sp)
/* 005F8 80A24358 46069200 */ add.s $f8, $f18, $f6
/* 005FC 80A2435C E6080008 */ swc1 $f8, 0x0008($s0) ## 00000008
/* 00600 80A24360 C6500024 */ lwc1 $f16, 0x0024($s2) ## 00000024
/* 00604 80A24364 C652002C */ lwc1 $f18, 0x002C($s2) ## 0000002C
/* 00608 80A24368 C6040008 */ lwc1 $f4, 0x0008($s0) ## 00000008
/* 0060C 80A2436C 46105381 */ sub.s $f14, $f10, $f16
/* 00610 80A24370 C65016D0 */ lwc1 $f16, 0x16D0($s2) ## 000016D0
/* 00614 80A24374 C44A0000 */ lwc1 $f10, 0x0000($v0) ## 00000000
/* 00618 80A24378 46122301 */ sub.s $f12, $f4, $f18
/* 0061C 80A2437C 460E7182 */ mul.s $f6, $f14, $f14
/* 00620 80A24380 00000000 */ nop
/* 00624 80A24384 460C6202 */ mul.s $f8, $f12, $f12
/* 00628 80A24388 46083000 */ add.s $f0, $f6, $f8
/* 0062C 80A2438C 46105102 */ mul.s $f4, $f10, $f16
/* 00630 80A24390 46000004 */ sqrt.s $f0, $f0
/* 00634 80A24394 4604003C */ c.lt.s $f0, $f4
/* 00638 80A24398 00000000 */ nop
/* 0063C 80A2439C 45000016 */ bc1f .L80A243F8
/* 00640 80A243A0 00000000 */ nop
/* 00644 80A243A4 0C0341F5 */ jal Math_Atan2F
/* 00648 80A243A8 AFA20070 */ sw $v0, 0x0070($sp)
/* 0064C 80A243AC 8FA20070 */ lw $v0, 0x0070($sp)
/* 00650 80A243B0 C64616D0 */ lwc1 $f6, 0x16D0($s2) ## 000016D0
/* 00654 80A243B4 46000306 */ mov.s $f12, $f0
/* 00658 80A243B8 C4520000 */ lwc1 $f18, 0x0000($v0) ## 00000000
/* 0065C 80A243BC 00002825 */ or $a1, $zero, $zero ## $a1 = 00000000
/* 00660 80A243C0 46069202 */ mul.s $f8, $f18, $f6
/* 00664 80A243C4 0C034348 */ jal Matrix_RotateY
/* 00668 80A243C8 E7A800A8 */ swc1 $f8, 0x00A8($sp)
/* 0066C 80A243CC 02A02025 */ or $a0, $s5, $zero ## $a0 = FFFFFFC0
/* 00670 80A243D0 0C0346BD */ jal Matrix_MultVec3f
/* 00674 80A243D4 27A50094 */ addiu $a1, $sp, 0x0094 ## $a1 = FFFFFFB4
/* 00678 80A243D8 C64A0024 */ lwc1 $f10, 0x0024($s2) ## 00000024
/* 0067C 80A243DC C7B00094 */ lwc1 $f16, 0x0094($sp)
/* 00680 80A243E0 46105100 */ add.s $f4, $f10, $f16
/* 00684 80A243E4 E6040000 */ swc1 $f4, 0x0000($s0) ## 00000000
/* 00688 80A243E8 C7A6009C */ lwc1 $f6, 0x009C($sp)
/* 0068C 80A243EC C652002C */ lwc1 $f18, 0x002C($s2) ## 0000002C
/* 00690 80A243F0 46069200 */ add.s $f8, $f18, $f6
/* 00694 80A243F4 E6080008 */ swc1 $f8, 0x0008($s0) ## 00000008
.L80A243F8:
/* 00698 80A243F8 C64016AC */ lwc1 $f0, 0x16AC($s2) ## 000016AC
/* 0069C 80A243FC C60A0004 */ lwc1 $f10, 0x0004($s0) ## 00000004
/* 006A0 80A24400 3C0142C8 */ lui $at, 0x42C8 ## $at = 42C80000
/* 006A4 80A24404 4600503C */ c.lt.s $f10, $f0
/* 006A8 80A24408 00000000 */ nop
/* 006AC 80A2440C 45020003 */ bc1fl .L80A2441C
/* 006B0 80A24410 C6100000 */ lwc1 $f16, 0x0000($s0) ## 00000000
/* 006B4 80A24414 E6000004 */ swc1 $f0, 0x0004($s0) ## 00000004
/* 006B8 80A24418 C6100000 */ lwc1 $f16, 0x0000($s0) ## 00000000
.L80A2441C:
/* 006BC 80A2441C 44810000 */ mtc1 $at, $f0 ## $f0 = 100.00
/* 006C0 80A24420 3C0142A0 */ lui $at, 0x42A0 ## $at = 42A00000
/* 006C4 80A24424 46148101 */ sub.s $f4, $f16, $f20
/* 006C8 80A24428 44811000 */ mtc1 $at, $f2 ## $f2 = 80.00
/* 006CC 80A2442C 24010023 */ addiu $at, $zero, 0x0023 ## $at = 00000023
/* 006D0 80A24430 46022482 */ mul.s $f18, $f4, $f2
/* 006D4 80A24434 46009183 */ div.s $f6, $f18, $f0
/* 006D8 80A24438 E6260000 */ swc1 $f6, 0x0000($s1) ## 00000000
/* 006DC 80A2443C C6080004 */ lwc1 $f8, 0x0004($s0) ## 00000004
/* 006E0 80A24440 46184281 */ sub.s $f10, $f8, $f24
/* 006E4 80A24444 46025402 */ mul.s $f16, $f10, $f2
/* 006E8 80A24448 46008103 */ div.s $f4, $f16, $f0
/* 006EC 80A2444C E6240004 */ swc1 $f4, 0x0004($s1) ## 00000004
/* 006F0 80A24450 C6120008 */ lwc1 $f18, 0x0008($s0) ## 00000008
/* 006F4 80A24454 46169181 */ sub.s $f6, $f18, $f22
/* 006F8 80A24458 46023202 */ mul.s $f8, $f6, $f2
/* 006FC 80A2445C 46004283 */ div.s $f10, $f8, $f0
/* 00700 80A24460 E62A0008 */ swc1 $f10, 0x0008($s1) ## 00000008
/* 00704 80A24464 8648001C */ lh $t0, 0x001C($s2) ## 0000001C
/* 00708 80A24468 51010026 */ beql $t0, $at, .L80A24504
/* 0070C 80A2446C C6100000 */ lwc1 $f16, 0x0000($s0) ## 00000000
/* 00710 80A24470 C6200000 */ lwc1 $f0, 0x0000($s1) ## 00000000
/* 00714 80A24474 4600E03C */ c.lt.s $f28, $f0
/* 00718 80A24478 00000000 */ nop
/* 0071C 80A2447C 45020004 */ bc1fl .L80A24490
/* 00720 80A24480 461E003C */ c.lt.s $f0, $f30
/* 00724 80A24484 10000006 */ beq $zero, $zero, .L80A244A0
/* 00728 80A24488 E63C0000 */ swc1 $f28, 0x0000($s1) ## 00000000
/* 0072C 80A2448C 461E003C */ c.lt.s $f0, $f30
.L80A24490:
/* 00730 80A24490 00000000 */ nop
/* 00734 80A24494 45020003 */ bc1fl .L80A244A4
/* 00738 80A24498 C6200004 */ lwc1 $f0, 0x0004($s1) ## 00000004
/* 0073C 80A2449C E63E0000 */ swc1 $f30, 0x0000($s1) ## 00000000
.L80A244A0:
/* 00740 80A244A0 C6200004 */ lwc1 $f0, 0x0004($s1) ## 00000004
.L80A244A4:
/* 00744 80A244A4 4600E03C */ c.lt.s $f28, $f0
/* 00748 80A244A8 00000000 */ nop
/* 0074C 80A244AC 45020004 */ bc1fl .L80A244C0
/* 00750 80A244B0 461E003C */ c.lt.s $f0, $f30
/* 00754 80A244B4 10000006 */ beq $zero, $zero, .L80A244D0
/* 00758 80A244B8 E63C0004 */ swc1 $f28, 0x0004($s1) ## 00000004
/* 0075C 80A244BC 461E003C */ c.lt.s $f0, $f30
.L80A244C0:
/* 00760 80A244C0 00000000 */ nop
/* 00764 80A244C4 45020003 */ bc1fl .L80A244D4
/* 00768 80A244C8 C6200008 */ lwc1 $f0, 0x0008($s1) ## 00000008
/* 0076C 80A244CC E63E0004 */ swc1 $f30, 0x0004($s1) ## 00000004
.L80A244D0:
/* 00770 80A244D0 C6200008 */ lwc1 $f0, 0x0008($s1) ## 00000008
.L80A244D4:
/* 00774 80A244D4 4600E03C */ c.lt.s $f28, $f0
/* 00778 80A244D8 00000000 */ nop
/* 0077C 80A244DC 45020004 */ bc1fl .L80A244F0
/* 00780 80A244E0 461E003C */ c.lt.s $f0, $f30
/* 00784 80A244E4 10000006 */ beq $zero, $zero, .L80A24500
/* 00788 80A244E8 E63C0008 */ swc1 $f28, 0x0008($s1) ## 00000008
/* 0078C 80A244EC 461E003C */ c.lt.s $f0, $f30
.L80A244F0:
/* 00790 80A244F0 00000000 */ nop
/* 00794 80A244F4 45020003 */ bc1fl .L80A24504
/* 00798 80A244F8 C6100000 */ lwc1 $f16, 0x0000($s0) ## 00000000
/* 0079C 80A244FC E63E0008 */ swc1 $f30, 0x0008($s1) ## 00000008
.L80A24500:
/* 007A0 80A24500 C6100000 */ lwc1 $f16, 0x0000($s0) ## 00000000
.L80A24504:
/* 007A4 80A24504 C6E40000 */ lwc1 $f4, 0x0000($s7) ## 00000000
/* 007A8 80A24508 C6120008 */ lwc1 $f18, 0x0008($s0) ## 00000008
/* 007AC 80A2450C C6E60008 */ lwc1 $f6, 0x0008($s7) ## 00000008
/* 007B0 80A24510 46048381 */ sub.s $f14, $f16, $f4
/* 007B4 80A24514 0C0341F5 */ jal Math_Atan2F
/* 007B8 80A24518 46069301 */ sub.s $f12, $f18, $f6
/* 007BC 80A2451C E6C0FFF8 */ swc1 $f0, -0x0008($s6) ## FFFFFFF8
.L80A24520:
/* 007C0 80A24520 26940001 */ addiu $s4, $s4, 0x0001 ## $s4 = 00000001
/* 007C4 80A24524 0014A400 */ sll $s4, $s4, 16
/* 007C8 80A24528 0014A403 */ sra $s4, $s4, 16
/* 007CC 80A2452C 2A81000C */ slti $at, $s4, 0x000C
/* 007D0 80A24530 2610000C */ addiu $s0, $s0, 0x000C ## $s0 = 0000000C
/* 007D4 80A24534 2631000C */ addiu $s1, $s1, 0x000C ## $s1 = 0000000C
/* 007D8 80A24538 26D6000C */ addiu $s6, $s6, 0x000C ## $s6 = 0000000C
/* 007DC 80A2453C 1420FEF9 */ bne $at, $zero, .L80A24124
/* 007E0 80A24540 26F7000C */ addiu $s7, $s7, 0x000C ## $s7 = 0000000C
/* 007E4 80A24544 AFB700F0 */ sw $s7, 0x00F0($sp)
/* 007E8 80A24548 AFB100F8 */ sw $s1, 0x00F8($sp)
/* 007EC 80A2454C C6C8007C */ lwc1 $f8, 0x007C($s6) ## 00000088
/* 007F0 80A24550 C6CA0078 */ lwc1 $f10, 0x0078($s6) ## 00000084
/* 007F4 80A24554 E6C80088 */ swc1 $f8, 0x0088($s6) ## 00000094
/* 007F8 80A24558 E6CA0084 */ swc1 $f10, 0x0084($s6) ## 00000090
/* 007FC 80A2455C 8FBF006C */ lw $ra, 0x006C($sp)
/* 00800 80A24560 8FBE0068 */ lw $s8, 0x0068($sp)
/* 00804 80A24564 8FB70064 */ lw $s7, 0x0064($sp)
/* 00808 80A24568 8FB60060 */ lw $s6, 0x0060($sp)
/* 0080C 80A2456C 8FB5005C */ lw $s5, 0x005C($sp)
/* 00810 80A24570 8FB40058 */ lw $s4, 0x0058($sp)
/* 00814 80A24574 8FB30054 */ lw $s3, 0x0054($sp)
/* 00818 80A24578 8FB20050 */ lw $s2, 0x0050($sp)
/* 0081C 80A2457C 8FB1004C */ lw $s1, 0x004C($sp)
/* 00820 80A24580 8FB00048 */ lw $s0, 0x0048($sp)
/* 00824 80A24584 D7BE0040 */ ldc1 $f30, 0x0040($sp)
/* 00828 80A24588 D7BC0038 */ ldc1 $f28, 0x0038($sp)
/* 0082C 80A2458C D7BA0030 */ ldc1 $f26, 0x0030($sp)
/* 00830 80A24590 D7B80028 */ ldc1 $f24, 0x0028($sp)
/* 00834 80A24594 D7B60020 */ ldc1 $f22, 0x0020($sp)
/* 00838 80A24598 D7B40018 */ ldc1 $f20, 0x0018($sp)
/* 0083C 80A2459C 03E00008 */ jr $ra
/* 00840 80A245A0 27BD00E0 */ addiu $sp, $sp, 0x00E0 ## $sp = 00000000

View file

@ -1,142 +0,0 @@
glabel func_80A245A4
/* 00844 80A245A4 27BDFF88 */ addiu $sp, $sp, 0xFF88 ## $sp = FFFFFF88
/* 00848 80A245A8 AFBF003C */ sw $ra, 0x003C($sp)
/* 0084C 80A245AC AFBE0038 */ sw $s8, 0x0038($sp)
/* 00850 80A245B0 AFB70034 */ sw $s7, 0x0034($sp)
/* 00854 80A245B4 AFB60030 */ sw $s6, 0x0030($sp)
/* 00858 80A245B8 AFB5002C */ sw $s5, 0x002C($sp)
/* 0085C 80A245BC AFB40028 */ sw $s4, 0x0028($sp)
/* 00860 80A245C0 AFB30024 */ sw $s3, 0x0024($sp)
/* 00864 80A245C4 AFB20020 */ sw $s2, 0x0020($sp)
/* 00868 80A245C8 AFB1001C */ sw $s1, 0x001C($sp)
/* 0086C 80A245CC AFB00018 */ sw $s0, 0x0018($sp)
/* 00870 80A245D0 908E1706 */ lbu $t6, 0x1706($a0) ## 00001706
/* 00874 80A245D4 44800000 */ mtc1 $zero, $f0 ## $f0 = 0.00
/* 00878 80A245D8 2495014C */ addiu $s5, $a0, 0x014C ## $s5 = 0000014C
/* 0087C 80A245DC 31CF0001 */ andi $t7, $t6, 0x0001 ## $t7 = 00000000
/* 00880 80A245E0 11E00011 */ beq $t7, $zero, .L80A24628
/* 00884 80A245E4 27BE004C */ addiu $s8, $sp, 0x004C ## $s8 = FFFFFFD4
/* 00888 80A245E8 3C0380A2 */ lui $v1, %hi(D_80A26778) ## $v1 = 80A20000
/* 0088C 80A245EC 24636778 */ addiu $v1, $v1, %lo(D_80A26778) ## $v1 = 80A26778
/* 00890 80A245F0 0003C100 */ sll $t8, $v1, 4
/* 00894 80A245F4 0018CF02 */ srl $t9, $t8, 28
/* 00898 80A245F8 00194080 */ sll $t0, $t9, 2
/* 0089C 80A245FC 3C098016 */ lui $t1, %hi(gSegments)
/* 008A0 80A24600 01284821 */ addu $t1, $t1, $t0
/* 008A4 80A24604 3C0100FF */ lui $at, 0x00FF ## $at = 00FF0000
/* 008A8 80A24608 8D296FA8 */ lw $t1, %lo(gSegments)($t1)
/* 008AC 80A2460C 3421FFFF */ ori $at, $at, 0xFFFF ## $at = 00FFFFFF
/* 008B0 80A24610 00615024 */ and $t2, $v1, $at
/* 008B4 80A24614 3C018000 */ lui $at, 0x8000 ## $at = 80000000
/* 008B8 80A24618 012A1021 */ addu $v0, $t1, $t2
/* 008BC 80A2461C 00411021 */ addu $v0, $v0, $at
/* 008C0 80A24620 10000010 */ beq $zero, $zero, .L80A24664
/* 008C4 80A24624 AFA2006C */ sw $v0, 0x006C($sp)
.L80A24628:
/* 008C8 80A24628 3C0280A2 */ lui $v0, %hi(D_80A27578) ## $v0 = 80A20000
/* 008CC 80A2462C 24427578 */ addiu $v0, $v0, %lo(D_80A27578) ## $v0 = 80A27578
/* 008D0 80A24630 00025900 */ sll $t3, $v0, 4
/* 008D4 80A24634 000B6702 */ srl $t4, $t3, 28
/* 008D8 80A24638 000C6880 */ sll $t5, $t4, 2
/* 008DC 80A2463C 3C0E8016 */ lui $t6, %hi(gSegments)
/* 008E0 80A24640 01CD7021 */ addu $t6, $t6, $t5
/* 008E4 80A24644 3C0100FF */ lui $at, 0x00FF ## $at = 00FF0000
/* 008E8 80A24648 8DCE6FA8 */ lw $t6, %lo(gSegments)($t6)
/* 008EC 80A2464C 3421FFFF */ ori $at, $at, 0xFFFF ## $at = 00FFFFFF
/* 008F0 80A24650 00417824 */ and $t7, $v0, $at
/* 008F4 80A24654 3C018000 */ lui $at, 0x8000 ## $at = 80000000
/* 008F8 80A24658 01CFC021 */ addu $t8, $t6, $t7
/* 008FC 80A2465C 0301C821 */ addu $t9, $t8, $at
/* 00900 80A24660 AFB9006C */ sw $t9, 0x006C($sp)
.L80A24664:
/* 00904 80A24664 3C0141F0 */ lui $at, 0x41F0 ## $at = 41F00000
/* 00908 80A24668 44812000 */ mtc1 $at, $f4 ## $f4 = 30.00
/* 0090C 80A2466C E7A00058 */ swc1 $f0, 0x0058($sp)
/* 00910 80A24670 E7A00060 */ swc1 $f0, 0x0060($sp)
/* 00914 80A24674 A7A00076 */ sh $zero, 0x0076($sp)
/* 00918 80A24678 27B70058 */ addiu $s7, $sp, 0x0058 ## $s7 = FFFFFFE0
/* 0091C 80A2467C 2416000C */ addiu $s6, $zero, 0x000C ## $s6 = 0000000C
/* 00920 80A24680 E7A4005C */ swc1 $f4, 0x005C($sp)
.L80A24684:
/* 00924 80A24684 87A30076 */ lh $v1, 0x0076($sp)
/* 00928 80A24688 3C0980A2 */ lui $t1, %hi(D_80A24E4C) ## $t1 = 80A20000
/* 0092C 80A2468C 25294E4C */ addiu $t1, $t1, %lo(D_80A24E4C) ## $t1 = 80A24E4C
/* 00930 80A24690 00034040 */ sll $t0, $v1, 1
/* 00934 80A24694 0109A021 */ addu $s4, $t0, $t1
/* 00938 80A24698 00009025 */ or $s2, $zero, $zero ## $s2 = 00000000
/* 0093C 80A2469C 00009825 */ or $s3, $zero, $zero ## $s3 = 00000000
.L80A246A0:
/* 00940 80A246A0 02560019 */ multu $s2, $s6
/* 00944 80A246A4 00135040 */ sll $t2, $s3, 1
/* 00948 80A246A8 028A5821 */ addu $t3, $s4, $t2
/* 0094C 80A246AC 956C0000 */ lhu $t4, 0x0000($t3) ## 00000000
/* 00950 80A246B0 8FA2006C */ lw $v0, 0x006C($sp)
/* 00954 80A246B4 00002825 */ or $a1, $zero, $zero ## $a1 = 00000000
/* 00958 80A246B8 000C6900 */ sll $t5, $t4, 4
/* 0095C 80A246BC 01A28021 */ addu $s0, $t5, $v0
/* 00960 80A246C0 00007012 */ mflo $t6
/* 00964 80A246C4 02AE8821 */ addu $s1, $s5, $t6
/* 00968 80A246C8 C626000C */ lwc1 $f6, 0x000C($s1) ## 0000000C
/* 0096C 80A246CC 4600320D */ trunc.w.s $f8, $f6
/* 00970 80A246D0 44184000 */ mfc1 $t8, $f8
/* 00974 80A246D4 00000000 */ nop
/* 00978 80A246D8 A6180000 */ sh $t8, 0x0000($s0) ## 00000000
/* 0097C 80A246DC C62A0010 */ lwc1 $f10, 0x0010($s1) ## 00000010
/* 00980 80A246E0 4600540D */ trunc.w.s $f16, $f10
/* 00984 80A246E4 44088000 */ mfc1 $t0, $f16
/* 00988 80A246E8 00000000 */ nop
/* 0098C 80A246EC A6080002 */ sh $t0, 0x0002($s0) ## 00000002
/* 00990 80A246F0 C6320014 */ lwc1 $f18, 0x0014($s1) ## 00000014
/* 00994 80A246F4 4600910D */ trunc.w.s $f4, $f18
/* 00998 80A246F8 440A2000 */ mfc1 $t2, $f4
/* 0099C 80A246FC 00000000 */ nop
/* 009A0 80A24700 A60A0004 */ sh $t2, 0x0004($s0) ## 00000004
/* 009A4 80A24704 0C034348 */ jal Matrix_RotateY
/* 009A8 80A24708 C62C00A0 */ lwc1 $f12, 0x00A0($s1) ## 000000A0
/* 009AC 80A2470C C62C009C */ lwc1 $f12, 0x009C($s1) ## 0000009C
/* 009B0 80A24710 0C0342DC */ jal Matrix_RotateX
/* 009B4 80A24714 24050001 */ addiu $a1, $zero, 0x0001 ## $a1 = 00000001
/* 009B8 80A24718 02E02025 */ or $a0, $s7, $zero ## $a0 = FFFFFFE0
/* 009BC 80A2471C 0C0346BD */ jal Matrix_MultVec3f
/* 009C0 80A24720 03C02825 */ or $a1, $s8, $zero ## $a1 = FFFFFFD4
/* 009C4 80A24724 C7A6004C */ lwc1 $f6, 0x004C($sp)
/* 009C8 80A24728 26520001 */ addiu $s2, $s2, 0x0001 ## $s2 = 00000001
/* 009CC 80A2472C 00129400 */ sll $s2, $s2, 16
/* 009D0 80A24730 4600320D */ trunc.w.s $f8, $f6
/* 009D4 80A24734 00129403 */ sra $s2, $s2, 16
/* 009D8 80A24738 2673000C */ addiu $s3, $s3, 0x000C ## $s3 = 0000000C
/* 009DC 80A2473C 00139C00 */ sll $s3, $s3, 16
/* 009E0 80A24740 440C4000 */ mfc1 $t4, $f8
/* 009E4 80A24744 2A41000C */ slti $at, $s2, 0x000C
/* 009E8 80A24748 00139C03 */ sra $s3, $s3, 16
/* 009EC 80A2474C A20C000C */ sb $t4, 0x000C($s0) ## 0000000C
/* 009F0 80A24750 C7AA0050 */ lwc1 $f10, 0x0050($sp)
/* 009F4 80A24754 4600540D */ trunc.w.s $f16, $f10
/* 009F8 80A24758 440E8000 */ mfc1 $t6, $f16
/* 009FC 80A2475C 00000000 */ nop
/* 00A00 80A24760 A20E000D */ sb $t6, 0x000D($s0) ## 0000000D
/* 00A04 80A24764 C7B20054 */ lwc1 $f18, 0x0054($sp)
/* 00A08 80A24768 4600910D */ trunc.w.s $f4, $f18
/* 00A0C 80A2476C 44182000 */ mfc1 $t8, $f4
/* 00A10 80A24770 1420FFCB */ bne $at, $zero, .L80A246A0
/* 00A14 80A24774 A218000E */ sb $t8, 0x000E($s0) ## 0000000E
/* 00A18 80A24778 87B90076 */ lh $t9, 0x0076($sp)
/* 00A1C 80A2477C 26B501C8 */ addiu $s5, $s5, 0x01C8 ## $s5 = 00000314
/* 00A20 80A24780 27280001 */ addiu $t0, $t9, 0x0001 ## $t0 = 00000001
/* 00A24 80A24784 00084C00 */ sll $t1, $t0, 16
/* 00A28 80A24788 00095403 */ sra $t2, $t1, 16
/* 00A2C 80A2478C 2941000C */ slti $at, $t2, 0x000C
/* 00A30 80A24790 1420FFBC */ bne $at, $zero, .L80A24684
/* 00A34 80A24794 A7A80076 */ sh $t0, 0x0076($sp)
/* 00A38 80A24798 8FBF003C */ lw $ra, 0x003C($sp)
/* 00A3C 80A2479C 8FB00018 */ lw $s0, 0x0018($sp)
/* 00A40 80A247A0 8FB1001C */ lw $s1, 0x001C($sp)
/* 00A44 80A247A4 8FB20020 */ lw $s2, 0x0020($sp)
/* 00A48 80A247A8 8FB30024 */ lw $s3, 0x0024($sp)
/* 00A4C 80A247AC 8FB40028 */ lw $s4, 0x0028($sp)
/* 00A50 80A247B0 8FB5002C */ lw $s5, 0x002C($sp)
/* 00A54 80A247B4 8FB60030 */ lw $s6, 0x0030($sp)
/* 00A58 80A247B8 8FB70034 */ lw $s7, 0x0034($sp)
/* 00A5C 80A247BC 8FBE0038 */ lw $s8, 0x0038($sp)
/* 00A60 80A247C0 03E00008 */ jr $ra
/* 00A64 80A247C4 27BD0078 */ addiu $sp, $sp, 0x0078 ## $sp = 00000000

View file

@ -1,99 +0,0 @@
.rdata
glabel D_80A27E80
.asciz "../z_en_ganon_mant.c"
.balign 4
glabel D_80A27E98
.asciz "../z_en_ganon_mant.c"
.balign 4
glabel D_80A27EB0
.asciz "../z_en_ganon_mant.c"
.balign 4
.text
glabel func_80A24884
/* 00B24 80A24884 27BDFFB0 */ addiu $sp, $sp, 0xFFB0 ## $sp = FFFFFFB0
/* 00B28 80A24888 AFBF001C */ sw $ra, 0x001C($sp)
/* 00B2C 80A2488C AFB00018 */ sw $s0, 0x0018($sp)
/* 00B30 80A24890 AFA40050 */ sw $a0, 0x0050($sp)
/* 00B34 80A24894 AFA50054 */ sw $a1, 0x0054($sp)
/* 00B38 80A24898 8C850000 */ lw $a1, 0x0000($a0) ## 00000000
/* 00B3C 80A2489C 3C0680A2 */ lui $a2, %hi(D_80A27E80) ## $a2 = 80A20000
/* 00B40 80A248A0 24C67E80 */ addiu $a2, $a2, %lo(D_80A27E80) ## $a2 = 80A27E80
/* 00B44 80A248A4 27A40038 */ addiu $a0, $sp, 0x0038 ## $a0 = FFFFFFE8
/* 00B48 80A248A8 24070234 */ addiu $a3, $zero, 0x0234 ## $a3 = 00000234
/* 00B4C 80A248AC 0C031AB1 */ jal Graph_OpenDisps
/* 00B50 80A248B0 00A08025 */ or $s0, $a1, $zero ## $s0 = 00000000
/* 00B54 80A248B4 44806000 */ mtc1 $zero, $f12 ## $f12 = 0.00
/* 00B58 80A248B8 00003825 */ or $a3, $zero, $zero ## $a3 = 00000000
/* 00B5C 80A248BC 44066000 */ mfc1 $a2, $f12
/* 00B60 80A248C0 0C034261 */ jal Matrix_Translate
/* 00B64 80A248C4 46006386 */ mov.s $f14, $f12
/* 00B68 80A248C8 8E0202C0 */ lw $v0, 0x02C0($s0) ## 000002C0
/* 00B6C 80A248CC 3C18DA38 */ lui $t8, 0xDA38 ## $t8 = DA380000
/* 00B70 80A248D0 37180003 */ ori $t8, $t8, 0x0003 ## $t8 = DA380003
/* 00B74 80A248D4 244F0008 */ addiu $t7, $v0, 0x0008 ## $t7 = 00000008
/* 00B78 80A248D8 AE0F02C0 */ sw $t7, 0x02C0($s0) ## 000002C0
/* 00B7C 80A248DC AC580000 */ sw $t8, 0x0000($v0) ## 00000000
/* 00B80 80A248E0 8FB90050 */ lw $t9, 0x0050($sp)
/* 00B84 80A248E4 3C0580A2 */ lui $a1, %hi(D_80A27E98) ## $a1 = 80A20000
/* 00B88 80A248E8 24A57E98 */ addiu $a1, $a1, %lo(D_80A27E98) ## $a1 = 80A27E98
/* 00B8C 80A248EC 8F240000 */ lw $a0, 0x0000($t9) ## 00000000
/* 00B90 80A248F0 2406023C */ addiu $a2, $zero, 0x023C ## $a2 = 0000023C
/* 00B94 80A248F4 0C0346A2 */ jal Matrix_NewMtx
/* 00B98 80A248F8 AFA20034 */ sw $v0, 0x0034($sp)
/* 00B9C 80A248FC 8FA30034 */ lw $v1, 0x0034($sp)
/* 00BA0 80A24900 3C0980A2 */ lui $t1, %hi(D_80A27078) ## $t1 = 80A20000
/* 00BA4 80A24904 25297078 */ addiu $t1, $t1, %lo(D_80A27078) ## $t1 = 80A27078
/* 00BA8 80A24908 AC620004 */ sw $v0, 0x0004($v1) ## 00000004
/* 00BAC 80A2490C 8E0202C0 */ lw $v0, 0x02C0($s0) ## 000002C0
/* 00BB0 80A24910 3C04DE00 */ lui $a0, 0xDE00 ## $a0 = DE000000
/* 00BB4 80A24914 3C19DB06 */ lui $t9, 0xDB06 ## $t9 = DB060000
/* 00BB8 80A24918 24480008 */ addiu $t0, $v0, 0x0008 ## $t0 = 00000008
/* 00BBC 80A2491C AE0802C0 */ sw $t0, 0x02C0($s0) ## 000002C0
/* 00BC0 80A24920 AC490004 */ sw $t1, 0x0004($v0) ## 00000004
/* 00BC4 80A24924 AC440000 */ sw $a0, 0x0000($v0) ## 00000000
/* 00BC8 80A24928 8FAA0054 */ lw $t2, 0x0054($sp)
/* 00BCC 80A2492C 3C0EDB06 */ lui $t6, 0xDB06 ## $t6 = DB060000
/* 00BD0 80A24930 37390030 */ ori $t9, $t9, 0x0030 ## $t9 = DB060030
/* 00BD4 80A24934 914B1706 */ lbu $t3, 0x1706($t2) ## 00001706
/* 00BD8 80A24938 3C0A80A2 */ lui $t2, %hi(D_80A27128) ## $t2 = 80A20000
/* 00BDC 80A2493C 254A7128 */ addiu $t2, $t2, %lo(D_80A27128) ## $t2 = 80A27128
/* 00BE0 80A24940 316C0001 */ andi $t4, $t3, 0x0001 ## $t4 = 00000000
/* 00BE4 80A24944 1180000A */ beq $t4, $zero, .L80A24970
/* 00BE8 80A24948 3C0680A2 */ lui $a2, %hi(D_80A27EB0) ## $a2 = 80A20000
/* 00BEC 80A2494C 8E0202C0 */ lw $v0, 0x02C0($s0) ## 000002C0
/* 00BF0 80A24950 3C0F80A2 */ lui $t7, %hi(D_80A26778) ## $t7 = 80A20000
/* 00BF4 80A24954 25EF6778 */ addiu $t7, $t7, %lo(D_80A26778) ## $t7 = 80A26778
/* 00BF8 80A24958 244D0008 */ addiu $t5, $v0, 0x0008 ## $t5 = 00000008
/* 00BFC 80A2495C AE0D02C0 */ sw $t5, 0x02C0($s0) ## 000002C0
/* 00C00 80A24960 35CE0030 */ ori $t6, $t6, 0x0030 ## $t6 = DB060030
/* 00C04 80A24964 AC4E0000 */ sw $t6, 0x0000($v0) ## 00000000
/* 00C08 80A24968 10000008 */ beq $zero, $zero, .L80A2498C
/* 00C0C 80A2496C AC4F0004 */ sw $t7, 0x0004($v0) ## 00000004
.L80A24970:
/* 00C10 80A24970 8E0202C0 */ lw $v0, 0x02C0($s0) ## 000002C0
/* 00C14 80A24974 3C0880A2 */ lui $t0, %hi(D_80A27578) ## $t0 = 80A20000
/* 00C18 80A24978 25087578 */ addiu $t0, $t0, %lo(D_80A27578) ## $t0 = 80A27578
/* 00C1C 80A2497C 24580008 */ addiu $t8, $v0, 0x0008 ## $t8 = 00000008
/* 00C20 80A24980 AE1802C0 */ sw $t8, 0x02C0($s0) ## 000002C0
/* 00C24 80A24984 AC480004 */ sw $t0, 0x0004($v0) ## 00000004
/* 00C28 80A24988 AC590000 */ sw $t9, 0x0000($v0) ## 00000000
.L80A2498C:
/* 00C2C 80A2498C 8E0202C0 */ lw $v0, 0x02C0($s0) ## 000002C0
/* 00C30 80A24990 24C67EB0 */ addiu $a2, $a2, %lo(D_80A27EB0) ## $a2 = 80A27EB0
/* 00C34 80A24994 24070248 */ addiu $a3, $zero, 0x0248 ## $a3 = 00000248
/* 00C38 80A24998 24490008 */ addiu $t1, $v0, 0x0008 ## $t1 = 00000008
/* 00C3C 80A2499C AE0902C0 */ sw $t1, 0x02C0($s0) ## 000002C0
/* 00C40 80A249A0 AC4A0004 */ sw $t2, 0x0004($v0) ## 00000004
/* 00C44 80A249A4 AC440000 */ sw $a0, 0x0000($v0) ## 00000000
/* 00C48 80A249A8 8FAB0050 */ lw $t3, 0x0050($sp)
/* 00C4C 80A249AC 27A40038 */ addiu $a0, $sp, 0x0038 ## $a0 = FFFFFFE8
/* 00C50 80A249B0 0C031AD5 */ jal Graph_CloseDisps
/* 00C54 80A249B4 8D650000 */ lw $a1, 0x0000($t3) ## 00000000
/* 00C58 80A249B8 8FBF001C */ lw $ra, 0x001C($sp)
/* 00C5C 80A249BC 8FB00018 */ lw $s0, 0x0018($sp)
/* 00C60 80A249C0 27BD0050 */ addiu $sp, $sp, 0x0050 ## $sp = 00000000
/* 00C64 80A249C4 03E00008 */ jr $ra
/* 00C68 80A249C8 00000000 */ nop

File diff suppressed because one or more lines are too long

5
spec
View file

@ -2241,8 +2241,11 @@ endseg
beginseg
name "ovl_En_Ganon_Mant"
include "build/src/overlays/actors/ovl_En_Ganon_Mant/z_en_ganon_mant.o"
include "build/data/overlays/actors/z_en_ganon_mant.data.o"
#ifdef NON_MATCHING
include "build/src/overlays/actors/ovl_En_Ganon_Mant/ovl_En_Ganon_Mant_reloc.o"
#else
include "build/data/overlays/actors/z_en_ganon_mant.reloc.o"
#endif
endseg
beginseg

View file

@ -0,0 +1,710 @@
#include "global.h"
#include "z_en_ganon_mant.h"
#define MANT_TEX_WIDTH 32
#define MANT_TEX_HEIGHT 64
static u64 sForceDmaAlignment = 0;
s16 sMantTex[MANT_TEX_WIDTH * MANT_TEX_HEIGHT] = {
0x7001, 0xA801, 0x7801, 0x4801, 0x4801, 0x7001, 0x9001, 0x8801, 0x8801, 0x7801, 0x5001, 0x5001, 0x5801, 0x6001,
0x6801, 0x8801, 0x7001, 0x5801, 0x4801, 0x4001, 0x3801, 0x4001, 0x6001, 0x8001, 0x9001, 0xA801, 0x8801, 0x5001,
0x4001, 0x4001, 0x4801, 0x5801, 0x7001, 0xA801, 0x7801, 0x5801, 0x5001, 0x6001, 0x9001, 0x9001, 0x9001, 0x8001,
0x5801, 0x5801, 0x5801, 0x5801, 0x6001, 0x9001, 0x7801, 0x6801, 0x4801, 0x4001, 0x4001, 0x4001, 0x6801, 0x8801,
0x9801, 0xA001, 0x9801, 0x6001, 0x4001, 0x4001, 0x4801, 0x5801, 0x7001, 0xB001, 0x9801, 0x7001, 0x5001, 0x6001,
0x9801, 0x9001, 0x9001, 0x8001, 0x5801, 0x5801, 0x5801, 0x6001, 0x6801, 0x8801, 0x8001, 0x7001, 0x5001, 0x4801,
0x4001, 0x4801, 0x5801, 0x8001, 0x9801, 0xA001, 0xA801, 0x6801, 0x4001, 0x4001, 0x4801, 0x6001, 0x6801, 0xA801,
0xA001, 0x7001, 0x4801, 0x6001, 0x9001, 0x8801, 0x8801, 0x7801, 0x6001, 0x5801, 0x5801, 0x6801, 0x7801, 0x8001,
0x8001, 0x7801, 0x6001, 0x5001, 0x4001, 0x4801, 0x5801, 0x6001, 0x8001, 0x9801, 0xA001, 0x7801, 0x4801, 0x4801,
0x4801, 0x6001, 0x7001, 0xA801, 0x9801, 0x8801, 0x5001, 0x5801, 0x7801, 0x8801, 0x8801, 0x7801, 0x6001, 0x5801,
0x6001, 0x6801, 0x8001, 0x8001, 0x8001, 0x7801, 0x6801, 0x5001, 0x4801, 0x5001, 0x5801, 0x6001, 0x8001, 0x9801,
0x9801, 0x8001, 0x5001, 0x4801, 0x5001, 0x6001, 0x7001, 0xA001, 0x9001, 0x8801, 0x6001, 0x6001, 0x7801, 0x8801,
0x8801, 0x7801, 0x6001, 0x5801, 0x6001, 0x6801, 0x7801, 0x8001, 0x8801, 0x8001, 0x6801, 0x5801, 0x4801, 0x5001,
0x5801, 0x6801, 0x6801, 0x8801, 0x9801, 0x9001, 0x5001, 0x5001, 0x5001, 0x6001, 0x7001, 0x9001, 0x8001, 0x7801,
0x6801, 0x6001, 0x7801, 0x8801, 0x8001, 0x7001, 0x6001, 0x6001, 0x6001, 0x7801, 0x8001, 0x8001, 0x8801, 0x8801,
0x7801, 0x6001, 0x4801, 0x5001, 0x6001, 0x7001, 0x7001, 0x8801, 0x9801, 0x9801, 0x5801, 0x5001, 0x5801, 0x6801,
0x7001, 0x8001, 0x7801, 0x6801, 0x6801, 0x6801, 0x7801, 0x8801, 0x8001, 0x6801, 0x6001, 0x6001, 0x6001, 0x7801,
0x8001, 0x7801, 0x8801, 0x8801, 0x8001, 0x6801, 0x5001, 0x5801, 0x6801, 0x7001, 0x7001, 0x8801, 0x9001, 0x9801,
0x5801, 0x5001, 0x5801, 0x7001, 0x7001, 0x7801, 0xBB41, 0x7001, 0x7001, 0x6801, 0x8001, 0x8001, 0x7801, 0x6801,
0x6001, 0x6801, 0x6801, 0x7001, 0x7801, 0x7801, 0x8001, 0x8801, 0x8801, 0x7001, 0x5001, 0x5801, 0x6801, 0x7001,
0x7001, 0x8801, 0x9001, 0x9801, 0x6001, 0x5001, 0x6001, 0x7801, 0x7001, 0x7001, 0xFE43, 0xBB41, 0x7801, 0x7801,
0x8001, 0x7801, 0x7001, 0x7001, 0x6001, 0x6001, 0x6801, 0x7001, 0x7801, 0x7801, 0x7801, 0x8001, 0x9001, 0x7001,
0x5801, 0x6001, 0x6801, 0x7001, 0x7001, 0x8801, 0x9001, 0x9801, 0x6001, 0x5001, 0x6001, 0x7001, 0x7001, 0x7001,
0xFE43, 0xFE43, 0x7001, 0x8801, 0x8001, 0x7801, 0x7001, 0x7001, 0x6001, 0x6001, 0x6801, 0x7001, 0x7801, 0x7801,
0x7801, 0x8001, 0x9001, 0x7801, 0x6001, 0x6001, 0x6801, 0x7001, 0x7001, 0x8801, 0x9001, 0x9801, 0x6801, 0x5801,
0x6801, 0x7001, 0x7001, 0x7001, 0xFE43, 0x7001, 0x7001, 0x8801, 0x8001, 0x7001, 0x7001, 0x7001, 0x6801, 0x6001,
0x6801, 0x7001, 0x7001, 0x7801, 0x7801, 0x8001, 0x9001, 0x7801, 0x6001, 0x6801, 0x6801, 0x7001, 0x7001, 0x8801,
0x8801, 0x9001, 0x6801, 0x5801, 0x6801, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7801, 0x8001, 0x7801, 0x7001,
0x7001, 0x6801, 0x6801, 0x6001, 0x6801, 0x7001, 0x7001, 0x7801, 0x7801, 0x8801, 0x9001, 0x7801, 0x6001, 0x6801,
0x6801, 0x7001, 0x7001, 0x7801, 0x8801, 0x9001, 0x6801, 0x5801, 0x6801, 0x7001, 0x7001, 0x7001, 0xFFE1, 0x7001,
0x7801, 0x7801, 0x7801, 0x7001, 0x7001, 0x6801, 0x6801, 0x6801, 0x6801, 0x7001, 0x7001, 0x7001, 0x7801, 0x8801,
0x8801, 0x7801, 0x6001, 0x6801, 0x6801, 0x7001, 0x7001, 0x7801, 0x8001, 0x9001, 0x6801, 0x5801, 0x7001, 0x7001,
0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x6801, 0x7001, 0x7001, 0x7001,
0x7001, 0x7801, 0x8001, 0x8801, 0x8801, 0x7801, 0x6801, 0x6801, 0x6801, 0x7001, 0x7801, 0x7001, 0x8001, 0x9001,
0x6801, 0x6001, 0x7001, 0x7001, 0x7001, 0x7001, 0xFFF7, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001,
0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7801, 0x8001, 0x8801, 0x8001, 0x7801, 0x6801, 0x6801, 0x7001, 0x7001,
0x7801, 0x7001, 0x8001, 0x8801, 0x6801, 0x6001, 0x7001, 0x7001, 0x7001, 0x7001, 0xFFDB, 0x7001, 0x7001, 0x7001,
0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7801, 0x8001, 0x8001, 0x8001, 0x7001,
0x6801, 0x7001, 0x7001, 0x7801, 0x7801, 0x7001, 0x8001, 0x8801, 0x6801, 0x6801, 0x7001, 0x7001, 0x7001, 0x7001,
0x8103, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7801,
0x8001, 0x8001, 0x7801, 0x7001, 0x6801, 0x7001, 0x7801, 0x8001, 0x8001, 0x7001, 0x8001, 0x8001, 0x6801, 0x6801,
0x7001, 0x7001, 0x7001, 0x7001, 0xFF8D, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001,
0x7001, 0x7001, 0x7001, 0x7001, 0x8001, 0x8001, 0x8001, 0x7001, 0x7001, 0x7001, 0x7801, 0x8001, 0x8001, 0x7001,
0x7801, 0x8001, 0x6801, 0x6801, 0x7001, 0x7001, 0x7001, 0x7001, 0xFDC1, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001,
0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x8001, 0x8001, 0x7801, 0x7001, 0x7001, 0x7001,
0x7801, 0x8001, 0x8001, 0x7001, 0x7801, 0x7801, 0x6801, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0xFDC1, 0x8901,
0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x8001, 0x8001,
0x7801, 0x7001, 0x7001, 0x7001, 0x7801, 0x7801, 0x8001, 0x7001, 0x7801, 0x7801, 0x6801, 0x7001, 0x7001, 0x7001,
0x7001, 0x7001, 0xFDC1, 0xA201, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001,
0x7001, 0x7001, 0x7801, 0x7801, 0x7001, 0x7001, 0x7001, 0x7001, 0x7801, 0x7801, 0x8001, 0x7001, 0x7801, 0x7801,
0x6801, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0xFDC1, 0xDC41, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001,
0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7801, 0x7801, 0x7801, 0x7801, 0x7001, 0x7001,
0x7001, 0x7001, 0x7801, 0x7801, 0x6801, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0xDC41, 0xFF8B, 0x7001, 0x7001,
0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7801, 0x7801,
0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001,
0xA201, 0xFE85, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001,
0x7001, 0x7801, 0x7801, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001,
0x7001, 0x7001, 0x7001, 0x7841, 0x8081, 0xFE43, 0xCB81, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001,
0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7801, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001,
0x7001, 0x7001, 0x7001, 0x7001, 0xA2D1, 0xFFFF, 0x7001, 0x7001, 0xBAC1, 0xFDC1, 0xFF8B, 0x7001, 0x7001, 0x7001,
0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001,
0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0xFE01, 0xF611, 0x7001, 0x7001, 0xFF8B, 0x7001,
0xFDC1, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001,
0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0xBC1F, 0xFE01, 0xFE01,
0x7001, 0x7001, 0xFE85, 0xFDC1, 0xBAC1, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001,
0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001,
0x7001, 0xFFFF, 0xFE01, 0xFE01, 0x7001, 0x7001, 0xFE43, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001,
0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001,
0x7001, 0x7001, 0x7001, 0x7001, 0xAAC3, 0xFF49, 0xFE01, 0xFE01, 0x7001, 0x7001, 0xFF8B, 0xF541, 0x8941, 0x7001,
0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001,
0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7881, 0xDC85, 0xFE47, 0xFE8B, 0xFE01, 0x7001, 0x7001,
0xE4C1, 0x7001, 0xFF8B, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001,
0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0xBB01,
0xFE01, 0xFE01, 0x7001, 0x7001, 0x8941, 0xE4C1, 0xF645, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001,
0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0xBC1F,
0xFFFF, 0xFF8B, 0xDD89, 0x7001, 0xBB01, 0xFE01, 0x7001, 0x7001, 0x7001, 0x7001, 0xED83, 0x7001, 0x7001, 0x7001,
0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001,
0x7001, 0x7001, 0xBBC5, 0xFE01, 0xFE01, 0xFE01, 0xFF8B, 0xBBC5, 0x7001, 0x7001, 0x7001, 0x7001, 0x7881, 0xBB81,
0xC401, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001,
0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0xFE01, 0xBB01, 0x7001, 0xBB01, 0xFE01, 0xFF8B, 0xFF8B, 0x7001,
0x7001, 0x7001, 0x9A81, 0x7001, 0xFF8B, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001,
0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001,
0x7001, 0xFE01, 0xFE01, 0xFF8B, 0x7001, 0x7001, 0xFF8B, 0x8A01, 0x7881, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001,
0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001,
0x7001, 0xFF8B, 0xFFFF, 0xFFFF, 0x7001, 0xBB01, 0xFE01, 0xFE01, 0x7001, 0x7001, 0xCC01, 0x7001, 0x7001, 0x7001,
0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x80C1, 0xDD89, 0xFF8B, 0xFFFF, 0xDD89,
0x7001, 0x7001, 0x7001, 0x7001, 0xFF8B, 0xFE01, 0xFE01, 0xFE01, 0xFFFF, 0x7001, 0xFE01, 0xFE01, 0x7001, 0x7001,
0xCC01, 0xFF8B, 0x7901, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0xBB01,
0xFE01, 0xFE01, 0xFE01, 0xFE01, 0xFF8B, 0x7001, 0x7001, 0x7001, 0xFE01, 0xFE01, 0xFE01, 0xFE01, 0xFE01, 0x7001,
0xFE01, 0xFE01, 0x7001, 0x7001, 0xBB81, 0x7001, 0x8201, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001,
0x7001, 0x7001, 0x9181, 0xFE01, 0xB381, 0xA281, 0xAB01, 0xCC81, 0xFE01, 0xFFFF, 0x7001, 0x7001, 0x7001, 0xFE01,
0xFE01, 0xFE01, 0x7001, 0xBC1F, 0xFE01, 0xFE01, 0x7001, 0x7001, 0x7881, 0x9241, 0xFF8B, 0x7001, 0x7001, 0x7001,
0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0xCBC1, 0xED41, 0xB281, 0x7001, 0x7001, 0x7001, 0xDC81, 0xFE01,
0xBB01, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0xFFFF, 0xFE01, 0xFE01, 0x7001, 0x7001, 0x7001, 0x7001,
0xDCC1, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0xFE01, 0xDC81, 0x7001, 0xFF8B,
0xFFFF, 0x91C3, 0x7001, 0xEE07, 0xFFFF, 0x7001, 0xFF8B, 0xDD89, 0x7001, 0xBBC5, 0xFF8B, 0xFE01, 0xDC81, 0x7001,
0x7001, 0x7001, 0x8901, 0xE4C1, 0xFF8B, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001,
0xBB01, 0xFE01, 0xDC81, 0x7001, 0xFE01, 0xFF8B, 0x7001, 0xCC03, 0xFF8B, 0xBBC5, 0x7001, 0xFF8B, 0xFFFF, 0xFFFF,
0xFE01, 0xBB01, 0x7001, 0x7001, 0x7001, 0x7001, 0xD481, 0x7001, 0xD481, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001,
0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0xDC81, 0xFE01, 0xFE01, 0xCC81, 0xBBC1, 0x7001, 0x7001, 0xDD89, 0xFF8B,
0xBB01, 0x7001, 0xED41, 0xFE01, 0xBB01, 0x7001, 0x920F, 0xFFFF, 0x7001, 0x7001, 0xCC41, 0xFF8B, 0x8941, 0x7001,
0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0xC3C1, 0xBBC1, 0xC3C1, 0x7001,
0x7001, 0x7001, 0x7001, 0xDD47, 0xFE01, 0x7001, 0x7001, 0x7001, 0x7001, 0x91C3, 0xFE91, 0xFF21, 0x7001, 0x7001,
0x7001, 0xDC81, 0x7001, 0x7001, 0x7001, 0xFF8B, 0xBBC5, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001,
0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0xBB01, 0xFE01, 0x7001, 0x7001, 0x7001, 0xED41,
0xFE4B, 0xFE8B, 0x7001, 0x7001, 0xBB01, 0xF5C1, 0x7001, 0xDCC1, 0x7001, 0x91C3, 0xFFFF, 0xBB41, 0x7001, 0x7001,
0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0xBB01,
0xFE01, 0x7001, 0x7001, 0xA241, 0xFE87, 0xFF11, 0x7001, 0x7001, 0xE541, 0xBB01, 0xDCC1, 0xFF8B, 0xBB41, 0x7001,
0xFF8B, 0xFE43, 0x7001, 0x7001, 0xBBC5, 0xFF8B, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001,
0xBB01, 0xFF8B, 0xFFFF, 0xBBC5, 0x7001, 0x7001, 0xFE01, 0x7001, 0xFECB, 0xFF99, 0x7001, 0x7001, 0xFF8B, 0x7001,
0xFFFF, 0x7001, 0xFF8B, 0x7001, 0xEDC1, 0xBB41, 0x7001, 0xFFFF, 0xFF8B, 0xBBC5, 0x7001, 0x7001, 0x7001, 0x7001,
0x7001, 0x7001, 0x7001, 0x7001, 0xFE01, 0xFE01, 0xBBC5, 0xFFFF, 0x7001, 0xBBC5, 0x7001, 0x7001, 0xFF8F, 0xFFE1,
0x7001, 0x7001, 0xFEC5, 0x7001, 0xFE43, 0xBB41, 0x7001, 0xEEC5, 0xE4C1, 0x7001, 0xBB41, 0xE4C1, 0xCC01, 0x7001,
0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0xFE01, 0xBB01, 0x7001, 0xFF8B, 0x7001, 0xFF8B,
0x7001, 0xFE01, 0xFFD3, 0xFFED, 0x7001, 0x7001, 0xFF8B, 0xFDC1, 0x7001, 0xFE43, 0xFE43, 0x7001, 0x7001, 0x91C3,
0xFF8B, 0xBB41, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0xBB01, 0xFE01,
0x7001, 0xC481, 0xA241, 0xFF8B, 0x7001, 0x7001, 0xBC09, 0xBDC3, 0x7001, 0x7001, 0xBBC5, 0xFF8B, 0xFFFF, 0xBB41,
0x7001, 0x7001, 0x91C3, 0xFF8B, 0x91C3, 0x7001, 0xBB41, 0xFFFF, 0xBB41, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001,
0x7001, 0x7001, 0x7001, 0xDC81, 0x7001, 0xBB01, 0xDC81, 0xFE01, 0xFFD3, 0xBC09, 0xFE01, 0x7001, 0x7001, 0x7001,
0x7001, 0xBBC5, 0xFF8B, 0x7001, 0xFFFF, 0xFFFF, 0xFF8B, 0xBBC5, 0x7001, 0xFF8B, 0xEDC1, 0xEEC5, 0xEE47, 0xB303,
0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0xFE01, 0x7001, 0xFE01, 0xFFD3,
0x7001, 0xFFFF, 0x7001, 0x7001, 0xFFDD, 0x7001, 0xFF8B, 0x7001, 0xFF8B, 0xFF8B, 0xFD81, 0x7001, 0x7001, 0xFE43,
0x7001, 0x7001, 0x9181, 0xFE43, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001,
0x7001, 0xBBC1, 0x7001, 0xFE01, 0xBBC1, 0xFFD3, 0x7001, 0x7001, 0xFD81, 0x7001, 0xFD81, 0x7001, 0xFD81, 0xCC01,
0xB341, 0x7001, 0xFFFF, 0x7001, 0xFF8B, 0xBB41, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0xEDC3,
0xFFFF, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0x7001, 0xBBC1, 0xDD01, 0xFFD3, 0x7001, 0x7001, 0x7001, 0xBBC5,
0xCC01, 0xFFFF, 0x7001, 0x7001, 0x7001, 0xBB41, 0xFE43, 0xFF8B, 0x7001, 0xFD81, 0x7001, 0xDD45, 0xFF8B, 0xD505,
0x7001, 0xFE83, 0x7001, 0x7001, 0x7001, 0x7001, 0xBB81, 0x7001, 0xA241, 0xBBC1, 0x8201, 0x7001, 0x7001, 0xBDDD,
0x7001, 0x7001, 0xBBC5, 0xFFFF, 0x7001, 0xE4C1, 0xB341, 0xD601, 0xEF4D, 0xFFDD, 0x7001, 0xFD81, 0xCC01, 0x7001,
0xFF8B, 0xFE01, 0xF5C3, 0xFEC9, 0xFF8B, 0x7001, 0xBB81, 0xEDC3, 0xFE83, 0xBB81, 0x7001, 0xFE83, 0xE543, 0x8A01,
0x7001, 0xBC17, 0xFFED, 0xDC81, 0x7001, 0x7001, 0xFF8B, 0xFD81, 0xFD81, 0xBBC5, 0x7001, 0x7001, 0xBC09, 0xFD81,
0xFF8B, 0x7001, 0x7001, 0xFF8B, 0xFF8B, 0xBBC5, 0x7001, 0xAA41, 0xDD41, 0xCC01, 0x7001, 0x7001, 0x7001, 0x7001,
0xFE83, 0xBBC1, 0x8A01, 0x8A01, 0xED41, 0xED41, 0xFFD3, 0x7001, 0x7001, 0x7001, 0xB341, 0xCC01, 0xA301, 0x7001,
0xFD81, 0xFFD3, 0x7001, 0xBBC5, 0xE4C1, 0xCC01, 0xE4C1, 0xF605, 0xBBC5, 0x7001, 0x7001, 0x7001, 0x7001, 0xA283,
0xC3C3, 0xEE89, 0xFF8B, 0xFE83, 0xCC41, 0x9241, 0x7001, 0x7001, 0x8201, 0xCC01, 0xDC81, 0xFFD3, 0x7001, 0x5001,
0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x7001, 0x7001, 0x7001,
0x7001, 0x7001, 0x7001, 0x7001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x7001, 0x7001, 0x5001, 0x5001,
0x5001, 0xED41, 0x8001, 0x8001, 0x8001, 0x8001, 0x8001, 0x8001, 0x8001, 0x8001, 0x8001, 0x8001, 0x8001, 0x8001,
0x8001, 0x8001, 0x8001, 0x8001, 0x8001, 0x8001, 0x8001, 0x8001, 0x8001, 0x8001, 0x8001, 0x8001, 0x8001, 0x8001,
0x8001, 0x8001, 0x8001, 0x8001, 0x8001, 0x8001, 0x2001, 0x2001, 0x1801, 0x1801, 0x1801, 0x1801, 0x1801, 0x1801,
0x1801, 0x1801, 0x1801, 0x1801, 0x1801, 0x1801, 0x1801, 0x1801, 0x1801, 0x1801, 0x1801, 0x1801, 0x1801, 0x1801,
0x1801, 0x1801, 0x1801, 0x1801, 0x1801, 0x1801, 0x1801, 0x1801, 0x1801, 0x1801, 0xFC81, 0x81C1, 0x9A41, 0x4841,
0xAAC1, 0x58C1, 0xBB01, 0x9241, 0xFDC1, 0x81C1, 0xCB81, 0x7141, 0xFC81, 0x9241, 0xC341, 0x89C1, 0xFC81, 0x89C1,
0xDBC1, 0x89C1, 0xFC81, 0x7181, 0xDBC1, 0x9241, 0xFE01, 0x9A41, 0xC341, 0x9A41, 0xFC81, 0xAAC1, 0xFC81, 0x6941,
0xFFC1, 0xE401, 0xFFEF, 0xE401, 0xFEC1, 0xE401, 0xFFC1, 0xE401, 0xFFC9, 0xE401, 0xFFEF, 0xE401, 0xFFEF, 0xE401,
0xFDC1, 0xCB81, 0xFF87, 0xE401, 0xFE41, 0xE401, 0xFF87, 0xE401, 0xFE41, 0xE401, 0xFFEF, 0xE401, 0xFF87, 0xE401,
0xFE41, 0xE401, 0xFFEF, 0xE401,
};
s16 sMantUnusedTex[32 * 32] = {
0x5801, 0x9001, 0x6001, 0x4001, 0x3001, 0x4801, 0x7801, 0x7001, 0x7001, 0x6001, 0x3801, 0x3801, 0x4001, 0x4001,
0x4001, 0x7001, 0x6001, 0x5001, 0x2801, 0x2001, 0x2001, 0x2801, 0x4801, 0x7001, 0x8001, 0x8001, 0x8001, 0x4001,
0x2001, 0x2001, 0x2801, 0x4001, 0x4801, 0x9001, 0x8001, 0x5801, 0x3001, 0x4001, 0x7001, 0x7001, 0x6801, 0x5801,
0x4001, 0x4001, 0x4001, 0x4801, 0x6001, 0x6001, 0x6001, 0x5801, 0x4001, 0x3001, 0x2801, 0x3001, 0x3801, 0x4801,
0x6801, 0x8001, 0x8001, 0x5801, 0x3001, 0x2801, 0x3001, 0x4001, 0x5001, 0x8001, 0x7001, 0x6801, 0x4001, 0x4001,
0x5801, 0x6801, 0x6801, 0x5801, 0x4001, 0x3801, 0x4801, 0x4801, 0x6001, 0x6801, 0x6801, 0x6001, 0x5001, 0x3801,
0x2801, 0x3001, 0x4001, 0x4801, 0x5001, 0x6801, 0x8001, 0x7001, 0x3801, 0x3001, 0x3801, 0x4801, 0x5001, 0x7001,
0x7001, 0x5801, 0x4801, 0x4801, 0x6001, 0x6801, 0x6001, 0x5001, 0x4001, 0x4001, 0x4801, 0x5801, 0x6001, 0x6001,
0x6801, 0x6801, 0x6801, 0x4801, 0x3001, 0x4001, 0x4801, 0x5801, 0x5001, 0x6801, 0x7801, 0x7801, 0x4001, 0x3001,
0x4001, 0x5001, 0x5001, 0x6801, 0x6801, 0x5801, 0x5801, 0x5801, 0x6001, 0x6001, 0x5801, 0x5001, 0x4801, 0x4801,
0x4801, 0x5801, 0x5801, 0x5801, 0x6001, 0x6801, 0x7001, 0x5801, 0x3801, 0x4001, 0x4801, 0x5001, 0x5801, 0x7001,
0x7801, 0x7801, 0x4801, 0x3801, 0x4801, 0x5801, 0x5001, 0x6001, 0x6001, 0x5801, 0x5001, 0x6801, 0x6001, 0x5801,
0x5001, 0x5001, 0x4801, 0x4801, 0x5001, 0x5801, 0x5801, 0x5801, 0x6001, 0x6801, 0x7001, 0x5801, 0x4801, 0x4801,
0x5001, 0x5001, 0x5801, 0x6801, 0x6801, 0x7801, 0x4801, 0x3801, 0x5001, 0x5001, 0x5001, 0x5801, 0x6001, 0x5001,
0x5801, 0x6001, 0x5801, 0x5801, 0x5001, 0x5001, 0x4801, 0x4801, 0x5001, 0x5001, 0x5001, 0x5801, 0x6001, 0x6801,
0x7001, 0x5801, 0x4801, 0x4801, 0x5001, 0x5801, 0x5801, 0x5801, 0x6801, 0x7801, 0x4801, 0x4001, 0x5001, 0x5001,
0x5001, 0x5801, 0x5801, 0x5801, 0x5801, 0x5801, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001,
0x5001, 0x5801, 0x6801, 0x6801, 0x6801, 0x5801, 0x4801, 0x5001, 0x5001, 0x5001, 0x5001, 0x5801, 0x6001, 0x7001,
0x4801, 0x4801, 0x5001, 0x5001, 0x0000, 0x4801, 0x5801, 0x5801, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001,
0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5801, 0x6801, 0x6801, 0x6001, 0x5801, 0x5001, 0x5001, 0x5801, 0x5001,
0x5001, 0x5001, 0x6001, 0x6001, 0x4801, 0x4801, 0x5001, 0x5001, 0x0000, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001,
0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5801, 0x6001, 0x6801, 0x6001, 0x5801,
0x5001, 0x5801, 0x5801, 0x5001, 0x5001, 0x5001, 0x5801, 0x6001, 0x4801, 0x5001, 0x5001, 0x5001, 0x0000, 0x3001,
0x4801, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5801,
0x6001, 0x6001, 0x5801, 0x5801, 0x5001, 0x5801, 0x5801, 0x5001, 0x5001, 0x5001, 0x5801, 0x5801, 0x5001, 0x5001,
0x5001, 0x5001, 0x0000, 0x0000, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001,
0x5001, 0x5001, 0x5801, 0x5801, 0x5801, 0x5801, 0x5801, 0x5001, 0x5001, 0x5801, 0x5001, 0x5001, 0x5001, 0x5001,
0x5801, 0x5801, 0x5001, 0x5001, 0x5001, 0x5001, 0x0000, 0x0000, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001,
0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5801, 0x5801, 0x5801, 0x5801, 0x5001, 0x5001, 0x5001,
0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x2000, 0x1801, 0x5001, 0x5001,
0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5801, 0x5801, 0x5001,
0x5001, 0x5801, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x4801,
0x4000, 0x4001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001,
0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5801, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001,
0x5001, 0x5001, 0x5001, 0x5001, 0x3800, 0x4801, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001,
0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x4801,
0x2000, 0x4801, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x4801, 0x2001, 0x3001, 0x3000, 0x5001, 0x5001, 0x5001,
0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x3001, 0x4801, 0x5001, 0x5001, 0x5001,
0x5001, 0x5001, 0x5001, 0x5001, 0x2800, 0x2800, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x4001, 0x5001, 0x0000,
0x1800, 0x4800, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x3801, 0x1000,
0x4801, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x4001, 0x0000, 0x0000, 0x0000, 0x0000, 0x5001, 0x5001,
0x5001, 0x5001, 0x5001, 0x3801, 0x3800, 0x2801, 0x4801, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001,
0x5001, 0x5001, 0x1800, 0x1000, 0x4801, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x3801, 0x0000, 0x0000,
0x1800, 0x3801, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x4801, 0x3801, 0x1800, 0x5001,
0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x4001, 0x0000, 0x0000, 0x1000, 0x4001, 0x5001, 0x5001, 0x5001, 0x5001,
0x5001, 0x5001, 0x1801, 0x2800, 0x3801, 0x4801, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001,
0x4801, 0x3801, 0x3000, 0x1801, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x4000, 0x0000, 0x0000, 0x0000, 0x0800,
0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x4001, 0x0800,
0x0000, 0x5001, 0x5001, 0x5001, 0x4001, 0x3000, 0x1800, 0x0000, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x4001,
0x0000, 0x0000, 0x0000, 0x0000, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001,
0x5001, 0x5001, 0x4000, 0x0000, 0x0000, 0x5001, 0x5001, 0x5001, 0x3800, 0x0000, 0x0000, 0x3000, 0x4801, 0x5001,
0x5001, 0x5001, 0x5001, 0x2801, 0x0000, 0x0000, 0x0000, 0x2001, 0x2801, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001,
0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x3801, 0x0000, 0x0000, 0x5001, 0x5001, 0x5001, 0x4001, 0x0800,
0x0000, 0x3001, 0x4001, 0x5001, 0x5001, 0x5001, 0x5001, 0x4001, 0x4001, 0x0000, 0x2801, 0x4001, 0x3801, 0x4801,
0x4801, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x2801, 0x0000, 0x0000, 0x0000,
0x5001, 0x5001, 0x3801, 0x2000, 0x0000, 0x0000, 0x3801, 0x5001, 0x5001, 0x5001, 0x4801, 0x4000, 0x2001, 0x4801,
0x3801, 0x3001, 0x1801, 0x2000, 0x1001, 0x3801, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001,
0x1000, 0x0000, 0x0000, 0x0000, 0x4801, 0x4801, 0x2801, 0x1800, 0x0000, 0x0000, 0x2001, 0x5001, 0x5001, 0x5001,
0x3801, 0x1800, 0x1800, 0x3001, 0x4001, 0x4001, 0x1801, 0x0000, 0x0000, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001,
0x5001, 0x5001, 0x5001, 0x5001, 0x0000, 0x0000, 0x0000, 0x0000, 0x3001, 0x4001, 0x1800, 0x0000, 0x0000, 0x0000,
0x0000, 0x3801, 0x5001, 0x5001, 0x0000, 0x0000, 0x0000, 0x3801, 0x4001, 0x4801, 0x0000, 0x0000, 0x0000, 0x0000,
0x5001, 0x5001, 0x5001, 0x4801, 0x0000, 0x0000, 0x5001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1800, 0x2801,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3801, 0x4801, 0x5001,
0x0000, 0x0000, 0x0000, 0x0000, 0x3801, 0x5001, 0x5001, 0x1001, 0x0000, 0x0000, 0x5001, 0x0000, 0x0000, 0x0000,
0x0000, 0x5000, 0x0000, 0x0800, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x2000, 0x4801, 0x5001, 0x0000, 0x0000, 0x0000, 0x0000, 0x3001, 0x4801, 0x5001, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x5000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x5000, 0x0000, 0x0000, 0x3001, 0x3800, 0x0000, 0x0000, 0x0000, 0x0000, 0x2000, 0x3801,
0x5001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x1801, 0x0800, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000,
};
Vtx sMantVtx1[] = {
VTX(1000, 0, 0, 186, 2168, 0x00, 0x78, 0x00, 0xFF),
VTX(1000, 0, 1000, 186, 1928, 0x00, 0x78, 0x00, 0xFF),
VTX(1000, 0, 2000, 186, 1687, 0x00, 0x78, 0x00, 0xFF),
VTX(1000, 0, 3000, 186, 1446, 0x00, 0x78, 0x00, 0xFF),
VTX(1000, 0, 4000, 186, 1205, 0x00, 0x78, 0x00, 0xFF),
VTX(1000, 0, 5000, 186, 964, 0x00, 0x78, 0x00, 0xFF),
VTX(1000, 0, 6000, 186, 723, 0x00, 0x78, 0x00, 0xFF),
VTX(1000, 0, 7000, 186, 482, 0x00, 0x78, 0x00, 0xFF),
VTX(1000, 0, 8000, 186, 241, 0x00, 0x78, 0x00, 0xFF),
VTX(1000, 0, 9000, 186, 0, 0x00, 0x78, 0x00, 0xFF),
VTX(1000, 0, 10000, 186, -241, 0x00, 0x78, 0x00, 0xFF),
VTX(1000, 0, 11000, 186, -482, 0x00, 0x78, 0x00, 0xFF),
VTX(0, 0, 0, 0, 2168, 0x00, 0x78, 0x00, 0xFF),
VTX(0, 0, 1000, 0, 1928, 0x00, 0x78, 0x00, 0xFF),
VTX(0, 0, 2000, 0, 1687, 0x00, 0x78, 0x00, 0xFF),
VTX(0, 0, 3000, 0, 1446, 0x00, 0x78, 0x00, 0xFF),
VTX(0, 0, 4000, 0, 1205, 0x00, 0x78, 0x00, 0xFF),
VTX(0, 0, 5000, 0, 964, 0x00, 0x78, 0x00, 0xFF),
VTX(0, 0, 6000, 0, 723, 0x00, 0x78, 0x00, 0xFF),
VTX(0, 0, 7000, 0, 482, 0x00, 0x78, 0x00, 0xFF),
VTX(0, 0, 8000, 0, 241, 0x00, 0x78, 0x00, 0xFF),
VTX(0, 0, 9000, 0, 0, 0x00, 0x78, 0x00, 0xFF),
VTX(0, 0, 10000, 0, -241, 0x00, 0x78, 0x00, 0xFF),
VTX(0, 0, 11000, 0, -482, 0x00, 0x78, 0x00, 0xFF),
VTX(2000, 0, 0, 372, 2168, 0x00, 0x78, 0x00, 0xFF),
VTX(2000, 0, 1000, 372, 1928, 0x00, 0x78, 0x00, 0xFF),
VTX(2000, 0, 2000, 372, 1687, 0x00, 0x78, 0x00, 0xFF),
VTX(2000, 0, 3000, 372, 1446, 0x00, 0x78, 0x00, 0xFF),
VTX(2000, 0, 4000, 372, 1205, 0x00, 0x78, 0x00, 0xFF),
VTX(2000, 0, 5000, 372, 964, 0x00, 0x78, 0x00, 0xFF),
VTX(2000, 0, 6000, 372, 723, 0x00, 0x78, 0x00, 0xFF),
VTX(2000, 0, 7000, 372, 482, 0x00, 0x78, 0x00, 0xFF),
VTX(2000, 0, 8000, 372, 241, 0x00, 0x78, 0x00, 0xFF),
VTX(2000, 0, 9000, 372, 0, 0x00, 0x78, 0x00, 0xFF),
VTX(2000, 0, 10000, 372, -241, 0x00, 0x78, 0x00, 0xFF),
VTX(2000, 0, 11000, 372, -482, 0x00, 0x78, 0x00, 0xFF),
VTX(3000, 0, 0, 559, 2168, 0x00, 0x78, 0x00, 0xFF),
VTX(3000, 0, 1000, 559, 1928, 0x00, 0x78, 0x00, 0xFF),
VTX(3000, 0, 2000, 559, 1687, 0x00, 0x78, 0x00, 0xFF),
VTX(3000, 0, 3000, 559, 1446, 0x00, 0x78, 0x00, 0xFF),
VTX(3000, 0, 4000, 559, 1205, 0x00, 0x78, 0x00, 0xFF),
VTX(3000, 0, 5000, 559, 964, 0x00, 0x78, 0x00, 0xFF),
VTX(3000, 0, 6000, 559, 723, 0x00, 0x78, 0x00, 0xFF),
VTX(3000, 0, 7000, 559, 482, 0x00, 0x78, 0x00, 0xFF),
VTX(3000, 0, 8000, 559, 241, 0x00, 0x78, 0x00, 0xFF),
VTX(3000, 0, 9000, 559, 0, 0x00, 0x78, 0x00, 0xFF),
VTX(3000, 0, 10000, 559, -241, 0x00, 0x78, 0x00, 0xFF),
VTX(3000, 0, 11000, 559, -482, 0x00, 0x78, 0x00, 0xFF),
VTX(4000, 0, 0, 745, 2168, 0x00, 0x78, 0x00, 0xFF),
VTX(4000, 0, 1000, 745, 1928, 0x00, 0x78, 0x00, 0xFF),
VTX(4000, 0, 2000, 745, 1687, 0x00, 0x78, 0x00, 0xFF),
VTX(4000, 0, 3000, 745, 1446, 0x00, 0x78, 0x00, 0xFF),
VTX(4000, 0, 4000, 745, 1205, 0x00, 0x78, 0x00, 0xFF),
VTX(4000, 0, 5000, 745, 964, 0x00, 0x78, 0x00, 0xFF),
VTX(4000, 0, 6000, 745, 723, 0x00, 0x78, 0x00, 0xFF),
VTX(4000, 0, 7000, 745, 482, 0x00, 0x78, 0x00, 0xFF),
VTX(4000, 0, 8000, 745, 241, 0x00, 0x78, 0x00, 0xFF),
VTX(4000, 0, 9000, 745, 0, 0x00, 0x78, 0x00, 0xFF),
VTX(4000, 0, 10000, 745, -241, 0x00, 0x78, 0x00, 0xFF),
VTX(4000, 0, 11000, 745, -482, 0x00, 0x78, 0x00, 0xFF),
VTX(5000, 0, 0, 931, 2168, 0x00, 0x78, 0x00, 0xFF),
VTX(5000, 0, 1000, 931, 1928, 0x00, 0x78, 0x00, 0xFF),
VTX(5000, 0, 2000, 931, 1687, 0x00, 0x78, 0x00, 0xFF),
VTX(5000, 0, 3000, 931, 1446, 0x00, 0x78, 0x00, 0xFF),
VTX(5000, 0, 4000, 931, 1205, 0x00, 0x78, 0x00, 0xFF),
VTX(5000, 0, 5000, 931, 964, 0x00, 0x78, 0x00, 0xFF),
VTX(5000, 0, 6000, 931, 723, 0x00, 0x78, 0x00, 0xFF),
VTX(5000, 0, 7000, 931, 482, 0x00, 0x78, 0x00, 0xFF),
VTX(5000, 0, 8000, 931, 241, 0x00, 0x78, 0x00, 0xFF),
VTX(5000, 0, 9000, 931, 0, 0x00, 0x78, 0x00, 0xFF),
VTX(5000, 0, 10000, 931, -241, 0x00, 0x78, 0x00, 0xFF),
VTX(5000, 0, 11000, 931, -482, 0x00, 0x78, 0x00, 0xFF),
VTX(6000, 0, 0, 1117, 2168, 0x00, 0x78, 0x00, 0xFF),
VTX(6000, 0, 1000, 1117, 1928, 0x00, 0x78, 0x00, 0xFF),
VTX(6000, 0, 2000, 1117, 1687, 0x00, 0x78, 0x00, 0xFF),
VTX(6000, 0, 3000, 1117, 1446, 0x00, 0x78, 0x00, 0xFF),
VTX(6000, 0, 4000, 1117, 1205, 0x00, 0x78, 0x00, 0xFF),
VTX(6000, 0, 5000, 1117, 964, 0x00, 0x78, 0x00, 0xFF),
VTX(6000, 0, 6000, 1117, 723, 0x00, 0x78, 0x00, 0xFF),
VTX(6000, 0, 7000, 1117, 482, 0x00, 0x78, 0x00, 0xFF),
VTX(6000, 0, 8000, 1117, 241, 0x00, 0x78, 0x00, 0xFF),
VTX(6000, 0, 9000, 1117, 0, 0x00, 0x78, 0x00, 0xFF),
VTX(6000, 0, 10000, 1117, -241, 0x00, 0x78, 0x00, 0xFF),
VTX(6000, 0, 11000, 1117, -482, 0x00, 0x78, 0x00, 0xFF),
VTX(7000, 0, 0, 1303, 2168, 0x00, 0x78, 0x00, 0xFF),
VTX(7000, 0, 1000, 1303, 1928, 0x00, 0x78, 0x00, 0xFF),
VTX(7000, 0, 2000, 1303, 1687, 0x00, 0x78, 0x00, 0xFF),
VTX(7000, 0, 3000, 1303, 1446, 0x00, 0x78, 0x00, 0xFF),
VTX(7000, 0, 4000, 1303, 1205, 0x00, 0x78, 0x00, 0xFF),
VTX(7000, 0, 5000, 1303, 964, 0x00, 0x78, 0x00, 0xFF),
VTX(7000, 0, 6000, 1303, 723, 0x00, 0x78, 0x00, 0xFF),
VTX(7000, 0, 7000, 1303, 482, 0x00, 0x78, 0x00, 0xFF),
VTX(7000, 0, 8000, 1303, 241, 0x00, 0x78, 0x00, 0xFF),
VTX(7000, 0, 9000, 1303, 0, 0x00, 0x78, 0x00, 0xFF),
VTX(7000, 0, 10000, 1303, -241, 0x00, 0x78, 0x00, 0xFF),
VTX(7000, 0, 11000, 1303, -482, 0x00, 0x78, 0x00, 0xFF),
VTX(8000, 0, 0, 1489, 2168, 0x00, 0x78, 0x00, 0xFF),
VTX(8000, 0, 1000, 1489, 1928, 0x00, 0x78, 0x00, 0xFF),
VTX(8000, 0, 2000, 1489, 1687, 0x00, 0x78, 0x00, 0xFF),
VTX(8000, 0, 3000, 1489, 1446, 0x00, 0x78, 0x00, 0xFF),
VTX(8000, 0, 4000, 1489, 1205, 0x00, 0x78, 0x00, 0xFF),
VTX(8000, 0, 5000, 1489, 964, 0x00, 0x78, 0x00, 0xFF),
VTX(8000, 0, 6000, 1489, 723, 0x00, 0x78, 0x00, 0xFF),
VTX(8000, 0, 7000, 1489, 482, 0x00, 0x78, 0x00, 0xFF),
VTX(8000, 0, 8000, 1489, 241, 0x00, 0x78, 0x00, 0xFF),
VTX(8000, 0, 9000, 1489, 0, 0x00, 0x78, 0x00, 0xFF),
VTX(8000, 0, 10000, 1489, -241, 0x00, 0x78, 0x00, 0xFF),
VTX(8000, 0, 11000, 1489, -482, 0x00, 0x78, 0x00, 0xFF),
VTX(9000, 0, 0, 1676, 2168, 0x00, 0x78, 0x00, 0xFF),
VTX(9000, 0, 1000, 1676, 1928, 0x00, 0x78, 0x00, 0xFF),
VTX(9000, 0, 2000, 1676, 1687, 0x00, 0x78, 0x00, 0xFF),
VTX(9000, 0, 3000, 1676, 1446, 0x00, 0x78, 0x00, 0xFF),
VTX(9000, 0, 4000, 1676, 1205, 0x00, 0x78, 0x00, 0xFF),
VTX(9000, 0, 5000, 1676, 964, 0x00, 0x78, 0x00, 0xFF),
VTX(9000, 0, 6000, 1676, 723, 0x00, 0x78, 0x00, 0xFF),
VTX(9000, 0, 7000, 1676, 482, 0x00, 0x78, 0x00, 0xFF),
VTX(9000, 0, 8000, 1676, 241, 0x00, 0x78, 0x00, 0xFF),
VTX(9000, 0, 9000, 1676, 0, 0x00, 0x78, 0x00, 0xFF),
VTX(9000, 0, 10000, 1676, -241, 0x00, 0x78, 0x00, 0xFF),
VTX(9000, 0, 11000, 1676, -482, 0x00, 0x78, 0x00, 0xFF),
VTX(10000, 0, 0, 1862, 2168, 0x00, 0x78, 0x00, 0xFF),
VTX(10000, 0, 1000, 1862, 1928, 0x00, 0x78, 0x00, 0xFF),
VTX(10000, 0, 2000, 1862, 1687, 0x00, 0x78, 0x00, 0xFF),
VTX(10000, 0, 3000, 1862, 1446, 0x00, 0x78, 0x00, 0xFF),
VTX(10000, 0, 4000, 1862, 1205, 0x00, 0x78, 0x00, 0xFF),
VTX(10000, 0, 5000, 1862, 964, 0x00, 0x78, 0x00, 0xFF),
VTX(10000, 0, 6000, 1862, 723, 0x00, 0x78, 0x00, 0xFF),
VTX(10000, 0, 7000, 1862, 482, 0x00, 0x78, 0x00, 0xFF),
VTX(10000, 0, 8000, 1862, 241, 0x00, 0x78, 0x00, 0xFF),
VTX(10000, 0, 9000, 1862, 0, 0x00, 0x78, 0x00, 0xFF),
VTX(10000, 0, 10000, 1862, -241, 0x00, 0x78, 0x00, 0xFF),
VTX(10000, 0, 11000, 1862, -482, 0x00, 0x78, 0x00, 0xFF),
VTX(11000, 0, 0, 2048, 2168, 0x00, 0x78, 0x00, 0xFF),
VTX(11000, 0, 1000, 2048, 1928, 0x00, 0x78, 0x00, 0xFF),
VTX(11000, 0, 2000, 2048, 1687, 0x00, 0x78, 0x00, 0xFF),
VTX(11000, 0, 3000, 2048, 1446, 0x00, 0x78, 0x00, 0xFF),
VTX(11000, 0, 4000, 2048, 1205, 0x00, 0x78, 0x00, 0xFF),
VTX(11000, 0, 5000, 2048, 964, 0x00, 0x78, 0x00, 0xFF),
VTX(11000, 0, 6000, 2048, 723, 0x00, 0x78, 0x00, 0xFF),
VTX(11000, 0, 7000, 2048, 482, 0x00, 0x78, 0x00, 0xFF),
VTX(11000, 0, 8000, 2048, 241, 0x00, 0x78, 0x00, 0xFF),
VTX(11000, 0, 9000, 2048, 0, 0x00, 0x78, 0x00, 0xFF),
VTX(11000, 0, 10000, 2048, -241, 0x00, 0x78, 0x00, 0xFF),
VTX(11000, 0, 11000, 2048, -482, 0x00, 0x78, 0x00, 0xFF),
};
Gfx sMantTexDL[] = {
gsDPPipeSync(),
gsDPSetTextureLUT(G_TT_NONE),
gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
gsDPLoadTextureBlock(sMantTex, G_IM_FMT_RGBA, G_IM_SIZ_16b, MANT_TEX_WIDTH, MANT_TEX_HEIGHT, 0, G_TX_MIRROR | G_TX_WRAP,
G_TX_NOMIRROR | G_TX_CLAMP, 5, 6, G_TX_NOLOD, G_TX_NOLOD),
gsSPEndDisplayList(),
};
//! @bug sMantUnusedTex is 32x32 not 32x64, however this dlist is unused
Gfx sMantUnusedTexDL[] = {
gsDPPipeSync(),
gsDPSetTextureLUT(G_TT_NONE),
gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
gsDPLoadTextureBlock(sMantUnusedTex, G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, 64, 0, G_TX_MIRROR | G_TX_WRAP,
G_TX_NOMIRROR | G_TX_CLAMP, 5, 6, G_TX_NOLOD, G_TX_NOLOD),
gsSPEndDisplayList(),
};
Gfx sMantDL[] = {
gsDPSetCombineLERP(TEXEL0, 0, SHADE, 0, 0, 0, 0, TEXEL0, COMBINED, 0, PRIMITIVE, 0, 0, 0, 0, COMBINED),
gsDPSetRenderMode(G_RM_FOG_SHADE_A, G_RM_AA_ZB_TEX_EDGE2),
gsSPClearGeometryMode(G_CULL_BACK | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR),
gsSPSetGeometryMode(G_FOG | G_LIGHTING),
gsDPSetPrimColor(0, 0, 255, 255, 255, 255),
gsSPVertex(0x0C000000, 24, 0),
gsSP2Triangles(0, 1, 13, 0, 0, 13, 12, 0),
gsSP2Triangles(1, 2, 14, 0, 1, 14, 13, 0),
gsSP2Triangles(2, 3, 15, 0, 2, 15, 14, 0),
gsSP2Triangles(3, 4, 16, 0, 3, 16, 15, 0),
gsSP2Triangles(4, 5, 17, 0, 4, 17, 16, 0),
gsSP2Triangles(5, 6, 18, 0, 5, 18, 17, 0),
gsSP2Triangles(6, 7, 19, 0, 6, 19, 18, 0),
gsSP2Triangles(7, 8, 20, 0, 7, 20, 19, 0),
gsSP2Triangles(8, 9, 21, 0, 8, 21, 20, 0),
gsSP2Triangles(9, 10, 22, 0, 9, 22, 21, 0),
gsSP2Triangles(10, 11, 23, 0, 10, 23, 22, 0),
gsSPVertex(0x0C000180, 12, 12),
gsSP2Triangles(12, 13, 1, 0, 12, 1, 0, 0),
gsSP2Triangles(13, 14, 2, 0, 13, 2, 1, 0),
gsSP2Triangles(14, 15, 3, 0, 14, 3, 2, 0),
gsSP2Triangles(15, 16, 4, 0, 15, 4, 3, 0),
gsSP2Triangles(16, 17, 5, 0, 16, 5, 4, 0),
gsSP2Triangles(17, 18, 6, 0, 17, 6, 5, 0),
gsSP2Triangles(18, 19, 7, 0, 18, 7, 6, 0),
gsSP2Triangles(19, 20, 8, 0, 19, 8, 7, 0),
gsSP2Triangles(20, 21, 9, 0, 20, 9, 8, 0),
gsSP2Triangles(21, 22, 10, 0, 21, 10, 9, 0),
gsSP2Triangles(22, 23, 11, 0, 22, 11, 10, 0),
gsSPVertex(0x0C000240, 12, 0),
gsSP2Triangles(0, 1, 13, 0, 0, 13, 12, 0),
gsSP2Triangles(1, 2, 14, 0, 1, 14, 13, 0),
gsSP2Triangles(2, 3, 15, 0, 2, 15, 14, 0),
gsSP2Triangles(3, 4, 16, 0, 3, 16, 15, 0),
gsSP2Triangles(4, 5, 17, 0, 4, 17, 16, 0),
gsSP2Triangles(5, 6, 18, 0, 5, 18, 17, 0),
gsSP2Triangles(6, 7, 19, 0, 6, 19, 18, 0),
gsSP2Triangles(7, 8, 20, 0, 7, 20, 19, 0),
gsSP2Triangles(8, 9, 21, 0, 8, 21, 20, 0),
gsSP2Triangles(9, 10, 22, 0, 9, 22, 21, 0),
gsSP2Triangles(10, 11, 23, 0, 10, 23, 22, 0),
gsSPVertex(0x0C000300, 12, 12),
gsSP2Triangles(12, 13, 1, 0, 12, 1, 0, 0),
gsSP2Triangles(13, 14, 2, 0, 13, 2, 1, 0),
gsSP2Triangles(14, 15, 3, 0, 14, 3, 2, 0),
gsSP2Triangles(15, 16, 4, 0, 15, 4, 3, 0),
gsSP2Triangles(16, 17, 5, 0, 16, 5, 4, 0),
gsSP2Triangles(17, 18, 6, 0, 17, 6, 5, 0),
gsSP2Triangles(18, 19, 7, 0, 18, 7, 6, 0),
gsSP2Triangles(19, 20, 8, 0, 19, 8, 7, 0),
gsSP2Triangles(20, 21, 9, 0, 20, 9, 8, 0),
gsSP2Triangles(21, 22, 10, 0, 21, 10, 9, 0),
gsSP2Triangles(22, 23, 11, 0, 22, 11, 10, 0),
gsSPVertex(0x0C0003C0, 12, 0),
gsSP2Triangles(0, 1, 13, 0, 0, 13, 12, 0),
gsSP2Triangles(1, 2, 14, 0, 1, 14, 13, 0),
gsSP2Triangles(2, 3, 15, 0, 2, 15, 14, 0),
gsSP2Triangles(3, 4, 16, 0, 3, 16, 15, 0),
gsSP2Triangles(4, 5, 17, 0, 4, 17, 16, 0),
gsSP2Triangles(5, 6, 18, 0, 5, 18, 17, 0),
gsSP2Triangles(6, 7, 19, 0, 6, 19, 18, 0),
gsSP2Triangles(7, 8, 20, 0, 7, 20, 19, 0),
gsSP2Triangles(8, 9, 21, 0, 8, 21, 20, 0),
gsSP2Triangles(9, 10, 22, 0, 9, 22, 21, 0),
gsSP2Triangles(10, 11, 23, 0, 10, 23, 22, 0),
gsSPVertex(0x0C000480, 12, 12),
gsSP2Triangles(12, 13, 1, 0, 12, 1, 0, 0),
gsSP2Triangles(13, 14, 2, 0, 13, 2, 1, 0),
gsSP2Triangles(14, 15, 3, 0, 14, 3, 2, 0),
gsSP2Triangles(15, 16, 4, 0, 15, 4, 3, 0),
gsSP2Triangles(16, 17, 5, 0, 16, 5, 4, 0),
gsSP2Triangles(17, 18, 6, 0, 17, 6, 5, 0),
gsSP2Triangles(18, 19, 7, 0, 18, 7, 6, 0),
gsSP2Triangles(19, 20, 8, 0, 19, 8, 7, 0),
gsSP2Triangles(20, 21, 9, 0, 20, 9, 8, 0),
gsSP2Triangles(21, 22, 10, 0, 21, 10, 9, 0),
gsSP2Triangles(22, 23, 11, 0, 22, 11, 10, 0),
gsSPVertex(0x0C000540, 12, 0),
gsSP2Triangles(0, 1, 13, 0, 0, 13, 12, 0),
gsSP2Triangles(1, 2, 14, 0, 1, 14, 13, 0),
gsSP2Triangles(2, 3, 15, 0, 2, 15, 14, 0),
gsSP2Triangles(3, 4, 16, 0, 3, 16, 15, 0),
gsSP2Triangles(4, 5, 17, 0, 4, 17, 16, 0),
gsSP2Triangles(5, 6, 18, 0, 5, 18, 17, 0),
gsSP2Triangles(6, 7, 19, 0, 6, 19, 18, 0),
gsSP2Triangles(7, 8, 20, 0, 7, 20, 19, 0),
gsSP2Triangles(8, 9, 21, 0, 8, 21, 20, 0),
gsSP2Triangles(9, 10, 22, 0, 9, 22, 21, 0),
gsSP2Triangles(10, 11, 23, 0, 10, 23, 22, 0),
gsSPVertex(0x0C000600, 12, 12),
gsSP2Triangles(12, 13, 1, 0, 12, 1, 0, 0),
gsSP2Triangles(13, 14, 2, 0, 13, 2, 1, 0),
gsSP2Triangles(14, 15, 3, 0, 14, 3, 2, 0),
gsSP2Triangles(15, 16, 4, 0, 15, 4, 3, 0),
gsSP2Triangles(16, 17, 5, 0, 16, 5, 4, 0),
gsSP2Triangles(17, 18, 6, 0, 17, 6, 5, 0),
gsSP2Triangles(18, 19, 7, 0, 18, 7, 6, 0),
gsSP2Triangles(19, 20, 8, 0, 19, 8, 7, 0),
gsSP2Triangles(20, 21, 9, 0, 20, 9, 8, 0),
gsSP2Triangles(21, 22, 10, 0, 21, 10, 9, 0),
gsSP2Triangles(22, 23, 11, 0, 22, 11, 10, 0),
gsSPVertex(0x0C0006C0, 12, 0),
gsSP2Triangles(0, 1, 13, 0, 0, 13, 12, 0),
gsSP2Triangles(1, 2, 14, 0, 1, 14, 13, 0),
gsSP2Triangles(2, 3, 15, 0, 2, 15, 14, 0),
gsSP2Triangles(3, 4, 16, 0, 3, 16, 15, 0),
gsSP2Triangles(4, 5, 17, 0, 4, 17, 16, 0),
gsSP2Triangles(5, 6, 18, 0, 5, 18, 17, 0),
gsSP2Triangles(6, 7, 19, 0, 6, 19, 18, 0),
gsSP2Triangles(7, 8, 20, 0, 7, 20, 19, 0),
gsSP2Triangles(8, 9, 21, 0, 8, 21, 20, 0),
gsSP2Triangles(9, 10, 22, 0, 9, 22, 21, 0),
gsSP2Triangles(10, 11, 23, 0, 10, 23, 22, 0),
gsSPVertex(0x0C000780, 12, 12),
gsSP2Triangles(12, 13, 1, 0, 12, 1, 0, 0),
gsSP2Triangles(13, 14, 2, 0, 13, 2, 1, 0),
gsSP2Triangles(14, 15, 3, 0, 14, 3, 2, 0),
gsSP2Triangles(15, 16, 4, 0, 15, 4, 3, 0),
gsSP2Triangles(16, 17, 5, 0, 16, 5, 4, 0),
gsSP2Triangles(17, 18, 6, 0, 17, 6, 5, 0),
gsSP2Triangles(18, 19, 7, 0, 18, 7, 6, 0),
gsSP2Triangles(19, 20, 8, 0, 19, 8, 7, 0),
gsSP2Triangles(20, 21, 9, 0, 20, 9, 8, 0),
gsSP2Triangles(21, 22, 10, 0, 21, 10, 9, 0),
gsSP2Triangles(22, 23, 11, 0, 22, 11, 10, 0),
gsSPVertex(0x0C000840, 12, 0),
gsSP2Triangles(0, 1, 13, 0, 0, 13, 12, 0),
gsSP2Triangles(1, 2, 14, 0, 1, 14, 13, 0),
gsSP2Triangles(2, 3, 15, 0, 2, 15, 14, 0),
gsSP2Triangles(3, 4, 16, 0, 3, 16, 15, 0),
gsSP2Triangles(4, 5, 17, 0, 4, 17, 16, 0),
gsSP2Triangles(5, 6, 18, 0, 5, 18, 17, 0),
gsSP2Triangles(6, 7, 19, 0, 6, 19, 18, 0),
gsSP2Triangles(7, 8, 20, 0, 7, 20, 19, 0),
gsSP2Triangles(8, 9, 21, 0, 8, 21, 20, 0),
gsSP2Triangles(9, 10, 22, 0, 9, 22, 21, 0),
gsSP2Triangles(10, 11, 23, 0, 10, 23, 22, 0),
gsSPEndDisplayList(),
};
Vtx sMantVtx2[] = {
VTX(1000, 0, 0, 186, 2168, 0x00, 0x78, 0x00, 0xFF),
VTX(1000, 0, 1000, 186, 1928, 0x00, 0x78, 0x00, 0xFF),
VTX(1000, 0, 2000, 186, 1687, 0x00, 0x78, 0x00, 0xFF),
VTX(1000, 0, 3000, 186, 1446, 0x00, 0x78, 0x00, 0xFF),
VTX(1000, 0, 4000, 186, 1205, 0x00, 0x78, 0x00, 0xFF),
VTX(1000, 0, 5000, 186, 964, 0x00, 0x78, 0x00, 0xFF),
VTX(1000, 0, 6000, 186, 723, 0x00, 0x78, 0x00, 0xFF),
VTX(1000, 0, 7000, 186, 482, 0x00, 0x78, 0x00, 0xFF),
VTX(1000, 0, 8000, 186, 241, 0x00, 0x78, 0x00, 0xFF),
VTX(1000, 0, 9000, 186, 0, 0x00, 0x78, 0x00, 0xFF),
VTX(1000, 0, 10000, 186, -241, 0x00, 0x78, 0x00, 0xFF),
VTX(1000, 0, 11000, 186, -482, 0x00, 0x78, 0x00, 0xFF),
VTX(0, 0, 0, 0, 2168, 0x00, 0x78, 0x00, 0xFF),
VTX(0, 0, 1000, 0, 1928, 0x00, 0x78, 0x00, 0xFF),
VTX(0, 0, 2000, 0, 1687, 0x00, 0x78, 0x00, 0xFF),
VTX(0, 0, 3000, 0, 1446, 0x00, 0x78, 0x00, 0xFF),
VTX(0, 0, 4000, 0, 1205, 0x00, 0x78, 0x00, 0xFF),
VTX(0, 0, 5000, 0, 964, 0x00, 0x78, 0x00, 0xFF),
VTX(0, 0, 6000, 0, 723, 0x00, 0x78, 0x00, 0xFF),
VTX(0, 0, 7000, 0, 482, 0x00, 0x78, 0x00, 0xFF),
VTX(0, 0, 8000, 0, 241, 0x00, 0x78, 0x00, 0xFF),
VTX(0, 0, 9000, 0, 0, 0x00, 0x78, 0x00, 0xFF),
VTX(0, 0, 10000, 0, -241, 0x00, 0x78, 0x00, 0xFF),
VTX(0, 0, 11000, 0, -482, 0x00, 0x78, 0x00, 0xFF),
VTX(2000, 0, 0, 372, 2168, 0x00, 0x78, 0x00, 0xFF),
VTX(2000, 0, 1000, 372, 1928, 0x00, 0x78, 0x00, 0xFF),
VTX(2000, 0, 2000, 372, 1687, 0x00, 0x78, 0x00, 0xFF),
VTX(2000, 0, 3000, 372, 1446, 0x00, 0x78, 0x00, 0xFF),
VTX(2000, 0, 4000, 372, 1205, 0x00, 0x78, 0x00, 0xFF),
VTX(2000, 0, 5000, 372, 964, 0x00, 0x78, 0x00, 0xFF),
VTX(2000, 0, 6000, 372, 723, 0x00, 0x78, 0x00, 0xFF),
VTX(2000, 0, 7000, 372, 482, 0x00, 0x78, 0x00, 0xFF),
VTX(2000, 0, 8000, 372, 241, 0x00, 0x78, 0x00, 0xFF),
VTX(2000, 0, 9000, 372, 0, 0x00, 0x78, 0x00, 0xFF),
VTX(2000, 0, 10000, 372, -241, 0x00, 0x78, 0x00, 0xFF),
VTX(2000, 0, 11000, 372, -482, 0x00, 0x78, 0x00, 0xFF),
VTX(3000, 0, 0, 559, 2168, 0x00, 0x78, 0x00, 0xFF),
VTX(3000, 0, 1000, 559, 1928, 0x00, 0x78, 0x00, 0xFF),
VTX(3000, 0, 2000, 559, 1687, 0x00, 0x78, 0x00, 0xFF),
VTX(3000, 0, 3000, 559, 1446, 0x00, 0x78, 0x00, 0xFF),
VTX(3000, 0, 4000, 559, 1205, 0x00, 0x78, 0x00, 0xFF),
VTX(3000, 0, 5000, 559, 964, 0x00, 0x78, 0x00, 0xFF),
VTX(3000, 0, 6000, 559, 723, 0x00, 0x78, 0x00, 0xFF),
VTX(3000, 0, 7000, 559, 482, 0x00, 0x78, 0x00, 0xFF),
VTX(3000, 0, 8000, 559, 241, 0x00, 0x78, 0x00, 0xFF),
VTX(3000, 0, 9000, 559, 0, 0x00, 0x78, 0x00, 0xFF),
VTX(3000, 0, 10000, 559, -241, 0x00, 0x78, 0x00, 0xFF),
VTX(3000, 0, 11000, 559, -482, 0x00, 0x78, 0x00, 0xFF),
VTX(4000, 0, 0, 745, 2168, 0x00, 0x78, 0x00, 0xFF),
VTX(4000, 0, 1000, 745, 1928, 0x00, 0x78, 0x00, 0xFF),
VTX(4000, 0, 2000, 745, 1687, 0x00, 0x78, 0x00, 0xFF),
VTX(4000, 0, 3000, 745, 1446, 0x00, 0x78, 0x00, 0xFF),
VTX(4000, 0, 4000, 745, 1205, 0x00, 0x78, 0x00, 0xFF),
VTX(4000, 0, 5000, 745, 964, 0x00, 0x78, 0x00, 0xFF),
VTX(4000, 0, 6000, 745, 723, 0x00, 0x78, 0x00, 0xFF),
VTX(4000, 0, 7000, 745, 482, 0x00, 0x78, 0x00, 0xFF),
VTX(4000, 0, 8000, 745, 241, 0x00, 0x78, 0x00, 0xFF),
VTX(4000, 0, 9000, 745, 0, 0x00, 0x78, 0x00, 0xFF),
VTX(4000, 0, 10000, 745, -241, 0x00, 0x78, 0x00, 0xFF),
VTX(4000, 0, 11000, 745, -482, 0x00, 0x78, 0x00, 0xFF),
VTX(5000, 0, 0, 931, 2168, 0x00, 0x78, 0x00, 0xFF),
VTX(5000, 0, 1000, 931, 1928, 0x00, 0x78, 0x00, 0xFF),
VTX(5000, 0, 2000, 931, 1687, 0x00, 0x78, 0x00, 0xFF),
VTX(5000, 0, 3000, 931, 1446, 0x00, 0x78, 0x00, 0xFF),
VTX(5000, 0, 4000, 931, 1205, 0x00, 0x78, 0x00, 0xFF),
VTX(5000, 0, 5000, 931, 964, 0x00, 0x78, 0x00, 0xFF),
VTX(5000, 0, 6000, 931, 723, 0x00, 0x78, 0x00, 0xFF),
VTX(5000, 0, 7000, 931, 482, 0x00, 0x78, 0x00, 0xFF),
VTX(5000, 0, 8000, 931, 241, 0x00, 0x78, 0x00, 0xFF),
VTX(5000, 0, 9000, 931, 0, 0x00, 0x78, 0x00, 0xFF),
VTX(5000, 0, 10000, 931, -241, 0x00, 0x78, 0x00, 0xFF),
VTX(5000, 0, 11000, 931, -482, 0x00, 0x78, 0x00, 0xFF),
VTX(6000, 0, 0, 1117, 2168, 0x00, 0x78, 0x00, 0xFF),
VTX(6000, 0, 1000, 1117, 1928, 0x00, 0x78, 0x00, 0xFF),
VTX(6000, 0, 2000, 1117, 1687, 0x00, 0x78, 0x00, 0xFF),
VTX(6000, 0, 3000, 1117, 1446, 0x00, 0x78, 0x00, 0xFF),
VTX(6000, 0, 4000, 1117, 1205, 0x00, 0x78, 0x00, 0xFF),
VTX(6000, 0, 5000, 1117, 964, 0x00, 0x78, 0x00, 0xFF),
VTX(6000, 0, 6000, 1117, 723, 0x00, 0x78, 0x00, 0xFF),
VTX(6000, 0, 7000, 1117, 482, 0x00, 0x78, 0x00, 0xFF),
VTX(6000, 0, 8000, 1117, 241, 0x00, 0x78, 0x00, 0xFF),
VTX(6000, 0, 9000, 1117, 0, 0x00, 0x78, 0x00, 0xFF),
VTX(6000, 0, 10000, 1117, -241, 0x00, 0x78, 0x00, 0xFF),
VTX(6000, 0, 11000, 1117, -482, 0x00, 0x78, 0x00, 0xFF),
VTX(7000, 0, 0, 1303, 2168, 0x00, 0x78, 0x00, 0xFF),
VTX(7000, 0, 1000, 1303, 1928, 0x00, 0x78, 0x00, 0xFF),
VTX(7000, 0, 2000, 1303, 1687, 0x00, 0x78, 0x00, 0xFF),
VTX(7000, 0, 3000, 1303, 1446, 0x00, 0x78, 0x00, 0xFF),
VTX(7000, 0, 4000, 1303, 1205, 0x00, 0x78, 0x00, 0xFF),
VTX(7000, 0, 5000, 1303, 964, 0x00, 0x78, 0x00, 0xFF),
VTX(7000, 0, 6000, 1303, 723, 0x00, 0x78, 0x00, 0xFF),
VTX(7000, 0, 7000, 1303, 482, 0x00, 0x78, 0x00, 0xFF),
VTX(7000, 0, 8000, 1303, 241, 0x00, 0x78, 0x00, 0xFF),
VTX(7000, 0, 9000, 1303, 0, 0x00, 0x78, 0x00, 0xFF),
VTX(7000, 0, 10000, 1303, -241, 0x00, 0x78, 0x00, 0xFF),
VTX(7000, 0, 11000, 1303, -482, 0x00, 0x78, 0x00, 0xFF),
VTX(8000, 0, 0, 1489, 2168, 0x00, 0x78, 0x00, 0xFF),
VTX(8000, 0, 1000, 1489, 1928, 0x00, 0x78, 0x00, 0xFF),
VTX(8000, 0, 2000, 1489, 1687, 0x00, 0x78, 0x00, 0xFF),
VTX(8000, 0, 3000, 1489, 1446, 0x00, 0x78, 0x00, 0xFF),
VTX(8000, 0, 4000, 1489, 1205, 0x00, 0x78, 0x00, 0xFF),
VTX(8000, 0, 5000, 1489, 964, 0x00, 0x78, 0x00, 0xFF),
VTX(8000, 0, 6000, 1489, 723, 0x00, 0x78, 0x00, 0xFF),
VTX(8000, 0, 7000, 1489, 482, 0x00, 0x78, 0x00, 0xFF),
VTX(8000, 0, 8000, 1489, 241, 0x00, 0x78, 0x00, 0xFF),
VTX(8000, 0, 9000, 1489, 0, 0x00, 0x78, 0x00, 0xFF),
VTX(8000, 0, 10000, 1489, -241, 0x00, 0x78, 0x00, 0xFF),
VTX(8000, 0, 11000, 1489, -482, 0x00, 0x78, 0x00, 0xFF),
VTX(9000, 0, 0, 1676, 2168, 0x00, 0x78, 0x00, 0xFF),
VTX(9000, 0, 1000, 1676, 1928, 0x00, 0x78, 0x00, 0xFF),
VTX(9000, 0, 2000, 1676, 1687, 0x00, 0x78, 0x00, 0xFF),
VTX(9000, 0, 3000, 1676, 1446, 0x00, 0x78, 0x00, 0xFF),
VTX(9000, 0, 4000, 1676, 1205, 0x00, 0x78, 0x00, 0xFF),
VTX(9000, 0, 5000, 1676, 964, 0x00, 0x78, 0x00, 0xFF),
VTX(9000, 0, 6000, 1676, 723, 0x00, 0x78, 0x00, 0xFF),
VTX(9000, 0, 7000, 1676, 482, 0x00, 0x78, 0x00, 0xFF),
VTX(9000, 0, 8000, 1676, 241, 0x00, 0x78, 0x00, 0xFF),
VTX(9000, 0, 9000, 1676, 0, 0x00, 0x78, 0x00, 0xFF),
VTX(9000, 0, 10000, 1676, -241, 0x00, 0x78, 0x00, 0xFF),
VTX(9000, 0, 11000, 1676, -482, 0x00, 0x78, 0x00, 0xFF),
VTX(10000, 0, 0, 1862, 2168, 0x00, 0x78, 0x00, 0xFF),
VTX(10000, 0, 1000, 1862, 1928, 0x00, 0x78, 0x00, 0xFF),
VTX(10000, 0, 2000, 1862, 1687, 0x00, 0x78, 0x00, 0xFF),
VTX(10000, 0, 3000, 1862, 1446, 0x00, 0x78, 0x00, 0xFF),
VTX(10000, 0, 4000, 1862, 1205, 0x00, 0x78, 0x00, 0xFF),
VTX(10000, 0, 5000, 1862, 964, 0x00, 0x78, 0x00, 0xFF),
VTX(10000, 0, 6000, 1862, 723, 0x00, 0x78, 0x00, 0xFF),
VTX(10000, 0, 7000, 1862, 482, 0x00, 0x78, 0x00, 0xFF),
VTX(10000, 0, 8000, 1862, 241, 0x00, 0x78, 0x00, 0xFF),
VTX(10000, 0, 9000, 1862, 0, 0x00, 0x78, 0x00, 0xFF),
VTX(10000, 0, 10000, 1862, -241, 0x00, 0x78, 0x00, 0xFF),
VTX(10000, 0, 11000, 1862, -482, 0x00, 0x78, 0x00, 0xFF),
VTX(11000, 0, 0, 2048, 2168, 0x00, 0x78, 0x00, 0xFF),
VTX(11000, 0, 1000, 2048, 1928, 0x00, 0x78, 0x00, 0xFF),
VTX(11000, 0, 2000, 2048, 1687, 0x00, 0x78, 0x00, 0xFF),
VTX(11000, 0, 3000, 2048, 1446, 0x00, 0x78, 0x00, 0xFF),
VTX(11000, 0, 4000, 2048, 1205, 0x00, 0x78, 0x00, 0xFF),
VTX(11000, 0, 5000, 2048, 964, 0x00, 0x78, 0x00, 0xFF),
VTX(11000, 0, 6000, 2048, 723, 0x00, 0x78, 0x00, 0xFF),
VTX(11000, 0, 7000, 2048, 482, 0x00, 0x78, 0x00, 0xFF),
VTX(11000, 0, 8000, 2048, 241, 0x00, 0x78, 0x00, 0xFF),
VTX(11000, 0, 9000, 2048, 0, 0x00, 0x78, 0x00, 0xFF),
VTX(11000, 0, 10000, 2048, -241, 0x00, 0x78, 0x00, 0xFF),
VTX(11000, 0, 11000, 2048, -482, 0x00, 0x78, 0x00, 0xFF),
};

View file

@ -1,4 +1,11 @@
/*
* File: z_en_ganon_mant.c
* Overlay: ovl_En_Ganon_Mant
* Description: Ganondorf's Cape
*/
#include "z_en_ganon_mant.h"
#include "overlays/actors/ovl_Boss_Ganon/z_boss_ganon.h"
#define FLAGS 0x00000030
@ -9,7 +16,6 @@ void EnGanonMant_Destroy(Actor* thisx, GlobalContext* globalCtx);
void EnGanonMant_Update(Actor* thisx, GlobalContext* globalCtx);
void EnGanonMant_Draw(Actor* thisx, GlobalContext* globalCtx);
/*
const ActorInit En_Ganon_Mant_InitVars = {
ACTOR_EN_GANON_MANT,
ACTORCAT_BOSS,
@ -21,19 +27,438 @@ const ActorInit En_Ganon_Mant_InitVars = {
(ActorFunc)EnGanonMant_Update,
(ActorFunc)EnGanonMant_Draw,
};
*/
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ganon_Mant/EnGanonMant_Init.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ganon_Mant/EnGanonMant_Destroy.s")
static s16 sTearSizesMedium[] = {
0, 0, 0, 1, 1, 1, 1, 1, 0, 0,
};
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ganon_Mant/func_80A23D84.s")
static s16 sTearSizesLarge[] = {
0, 0, 0, 0, 1, 1, 2, 2, 2, 1, 1, 0, 0, 0, 0,
};
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ganon_Mant/func_80A23FE0.s")
static s16 sTearSizesSmall[] = {
0, 0, 0, 0, 0, 0, 0,
};
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ganon_Mant/func_80A245A4.s")
typedef struct {
s16* tearAreaSizes;
s16 count;
} TearShape; // size = 0x8
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ganon_Mant/EnGanonMant_Update.s")
/**
* The arrays pointed to by this table describe how many pixels should
* be removed from the cloak texture in a single pass
*/
static TearShape sTearShapes[] = {
{ sTearSizesMedium, ARRAY_COUNT(sTearSizesMedium) },
{ sTearSizesMedium, ARRAY_COUNT(sTearSizesMedium) },
{ sTearSizesLarge, ARRAY_COUNT(sTearSizesLarge) },
{ sTearSizesSmall, ARRAY_COUNT(sTearSizesSmall) },
};
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ganon_Mant/func_80A24884.s")
/// How much each joint is affected by backwards/forwards swaying motion
static f32 sBackSwayCoefficients[GANON_MANT_NUM_JOINTS] = {
0.0f, 1.0f, 0.5f, 0.25f, 0.1f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
};
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ganon_Mant/EnGanonMant_Draw.s")
static f32 D_80A24DB4[] = {
0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
};
/// How much each joint is affected by sideways swaying motion, tends to 0
static f32 sSideSwayCoefficients[GANON_MANT_NUM_JOINTS] = {
0.0f, 1.0f, 0.9f, 0.8f, 0.7f, 0.6f, 0.5f, 0.4f, 0.3f, 0.2f, 0.1f, 0.0f,
};
static f32 D_80A24E00[] = {
0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
};
static f32 sDistMultipliers[GANON_MANT_NUM_JOINTS] = {
0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.1f, 1.2f, 1.3f, 1.4f, 1.5f, 1.6f, 1.7f,
};
static f32 D_80A24E48[] = {
1.8f,
};
#define MAP_STRAND_TO_VTX(n) \
(n) + GANON_MANT_NUM_JOINTS * 0, (n) + GANON_MANT_NUM_JOINTS * 1, (n) + GANON_MANT_NUM_JOINTS * 2, \
(n) + GANON_MANT_NUM_JOINTS * 3, (n) + GANON_MANT_NUM_JOINTS * 4, (n) + GANON_MANT_NUM_JOINTS * 5, \
(n) + GANON_MANT_NUM_JOINTS * 6, (n) + GANON_MANT_NUM_JOINTS * 7, (n) + GANON_MANT_NUM_JOINTS * 8, \
(n) + GANON_MANT_NUM_JOINTS * 9, (n) + GANON_MANT_NUM_JOINTS * 10, (n) + GANON_MANT_NUM_JOINTS * 11
static u16 sVerticesMap[GANON_MANT_NUM_STRANDS * GANON_MANT_NUM_JOINTS] = {
MAP_STRAND_TO_VTX(11), MAP_STRAND_TO_VTX(10), MAP_STRAND_TO_VTX(9), MAP_STRAND_TO_VTX(8),
MAP_STRAND_TO_VTX(7), MAP_STRAND_TO_VTX(6), MAP_STRAND_TO_VTX(5), MAP_STRAND_TO_VTX(4),
MAP_STRAND_TO_VTX(3), MAP_STRAND_TO_VTX(2), MAP_STRAND_TO_VTX(1), MAP_STRAND_TO_VTX(0),
};
#include "ovl_en_ganon_mant_gfx.c"
void EnGanonMant_Init(Actor* thisx, GlobalContext* globalCtx) {
EnGanonMant* this = THIS;
this->actor.flags &= ~1;
}
void EnGanonMant_Destroy(Actor* thisx, GlobalContext* globalCtx) {
}
/**
* Randomly zeros portions of the cloak texture
*/
void EnGanonMant_Tear(EnGanonMant* this) {
s32 pad;
s16 i;
s16 areaX;
s16 areaY;
s16 texIdx;
f32 tx = Rand_ZeroFloat(MANT_TEX_WIDTH);
f32 ty = Rand_ZeroFloat(MANT_TEX_HEIGHT);
f32 tearAngle = Rand_ZeroFloat(2 * M_PI);
f32 tearDirX = sinf(tearAngle);
f32 tearDirY = cosf(tearAngle);
TearShape* shape = &sTearShapes[(s16)Rand_ZeroFloat(ARRAY_COUNT(sTearShapes) - 0.01f)];
s16 count = shape->count;
s16* tearAreaSizes = shape->tearAreaSizes;
for (i = 0; i < count; i++) {
if ((0 <= tx && tx < MANT_TEX_WIDTH) && (0 <= ty && ty < MANT_TEX_HEIGHT)) {
for (areaX = 0; areaX <= tearAreaSizes[i]; areaX++) {
texIdx = 0;
if (1) {}
for (areaY = 0; areaY <= tearAreaSizes[i]; areaY++) {
texIdx = (s16)((s16)tx + ((s16)ty * MANT_TEX_WIDTH)) + ((s16)areaX + ((s16)areaY * MANT_TEX_WIDTH));
if (texIdx < ARRAY_COUNT(sMantTex)) {
sMantTex[texIdx] = 0;
}
}
}
}
tx += tearDirX;
ty += tearDirY;
}
for (i = 0; i < 4; i++) {
this->strands[(s16)Rand_ZeroFloat(GANON_MANT_NUM_STRANDS - 0.1f)]
.torn[(s16)Rand_ZeroFloat(GANON_MANT_NUM_JOINTS - 0.1f)] = true;
}
}
/**
* Updates the dynamic strands that control the shape and motion of the cloak
*/
void EnGanonMant_UpdateStrand(GlobalContext* globalCtx, EnGanonMant* this, Vec3f* root, Vec3f* pos, Vec3f* nextPos,
Vec3f* rot, Vec3f* vel, s16 strandNum) {
f32 xDiff;
f32 zDiff;
f32 gravity;
s32 pad[4];
f32 yaw;
s16 i;
f32 x;
f32 y;
f32 z;
f32 jointLength;
Vec3f delta;
Vec3f posStep;
Vec3f backSwayOffset;
Vec3f sideSwayOffset;
delta.y = 0;
if (this->actor.params == 0x23) {
// Pushes all the strands away from the actor
delta.x = 0.0f;
delta.z = -30.0f;
Matrix_RotateY(BINANG_TO_RAD(this->actor.shape.rot.y), MTXMODE_NEW);
Matrix_MultVec3f(&delta, &posStep);
for (i = 0; i < GANON_MANT_NUM_JOINTS; i++) {
(pos + i)->x += posStep.x;
(pos + i)->z += posStep.z;
}
// Set length
jointLength = 6.5f;
} else {
jointLength = 9.5f;
}
for (i = 0; i < GANON_MANT_NUM_JOINTS; i++, pos++, vel++, rot++, nextPos++) {
if (i == 0) {
// Constraint: first position is always root
pos->x = root->x;
pos->y = root->y;
pos->z = root->z;
} else {
// Decelerate
Math_ApproachZeroF(&vel->x, 1.0f, 0.1f);
Math_ApproachZeroF(&vel->y, 1.0f, 0.1f);
Math_ApproachZeroF(&vel->z, 1.0f, 0.1f);
// Push the cloak away from attached actor, plus oscillations
delta.x = 0;
delta.z = (this->backPush + (sinf((strandNum * (2 * M_PI)) / 2.1f) * this->backSwayMagnitude)) *
sBackSwayCoefficients[i];
Matrix_RotateY(this->baseYaw, MTXMODE_NEW);
Matrix_MultVec3f(&delta, &backSwayOffset);
// Push the cloak out to either side, in a swaying manner
delta.x = cosf((strandNum * M_PI) / (GANON_MANT_NUM_STRANDS - 1.0f)) * this->sideSwayMagnitude *
sSideSwayCoefficients[i];
delta.z = 0;
Matrix_MultVec3f(&delta, &sideSwayOffset);
// Calculate position difference
gravity = this->gravity;
x = ((pos->x + vel->x) - (pos - 1)->x) + (backSwayOffset.x + sideSwayOffset.x);
y = ((pos->y + vel->y) - (pos - 1)->y) + gravity;
z = ((pos->z + vel->z) - (pos - 1)->z) + (backSwayOffset.z + sideSwayOffset.z);
// Calculate rotations in the direction of the position difference
yaw = Math_Atan2F(z, x);
x = -Math_Atan2F(sqrtf(SQ(x) + SQ(z)), y);
(rot - 1)->x = x;
// Calculate real position difference of correct length in the correct direction
delta.x = 0;
delta.z = jointLength;
Matrix_RotateY(yaw, MTXMODE_NEW);
Matrix_RotateX(x, MTXMODE_APPLY);
Matrix_MultVec3f(&delta, &posStep);
// Save position
x = pos->x;
y = pos->y;
z = pos->z;
// Calculate next position
pos->x = (pos - 1)->x + posStep.x;
pos->y = (pos - 1)->y + posStep.y;
pos->z = (pos - 1)->z + posStep.z;
// Pushes the cloak away from the actor if it is too close
xDiff = pos->x - this->actor.world.pos.x;
zDiff = pos->z - this->actor.world.pos.z;
if (sqrtf(SQ(xDiff) + SQ(zDiff)) < (sDistMultipliers[i] * this->minDist)) {
yaw = Math_Atan2F(zDiff, xDiff);
delta.z = this->minDist * sDistMultipliers[i];
Matrix_RotateY(yaw, MTXMODE_NEW);
Matrix_MultVec3f(&delta, &posStep);
pos->x = this->actor.world.pos.x + posStep.x;
pos->z = this->actor.world.pos.z + posStep.z;
}
// Enforces minY constraint
if (pos->y < this->minY) {
pos->y = this->minY;
}
// Calculate next velocity
vel->x = (pos->x - x) * 80.0f / 100.0f;
vel->y = (pos->y - y) * 80.0f / 100.0f;
vel->z = (pos->z - z) * 80.0f / 100.0f;
if (this->actor.params != 0x23) {
// Clamp elements of vel into [-5.0, 5.0]
if (vel->x > 5.0f) {
vel->x = 5.0f;
} else if (vel->x < -5.0f) {
vel->x = -5.0f;
}
if (vel->y > 5.0f) {
vel->y = 5.0f;
} else if (vel->y < -5.0f) {
vel->y = -5.0f;
}
if (vel->z > 5.0f) {
vel->z = 5.0f;
} else if (vel->z < -5.0f) {
vel->z = -5.0f;
}
}
// update angle
xDiff = pos->x - nextPos->x;
zDiff = pos->z - nextPos->z;
(rot - 1)->y = Math_Atan2F(zDiff, xDiff);
}
}
rot[11].y = rot[10].y;
rot[11].x = rot[10].x;
}
/**
* Update the cloak vertices using the current state of the strands
*/
void EnGanonMant_UpdateVertices(EnGanonMant* this) {
s16 i;
Vtx* vtx;
Vtx* vertices;
MantStrand* strand;
s16 j;
s16 k;
Vec3f up;
Vec3f normal;
if (this->frameTimer % 2 != 0) {
vertices = SEGMENTED_TO_VIRTUAL(sMantVtx1);
} else {
vertices = SEGMENTED_TO_VIRTUAL(sMantVtx2);
}
up.x = 0.0f;
up.y = 30.0f;
up.z = 0.0f;
strand = &this->strands[0];
for (i = 0; i < GANON_MANT_NUM_STRANDS; i++, strand++) {
for (j = 0, k = 0; j < GANON_MANT_NUM_JOINTS; j++, k += GANON_MANT_NUM_JOINTS) {
vtx = &vertices[sVerticesMap[i + k]];
vtx->n.ob[0] = strand->joints[j].x;
vtx->n.ob[1] = strand->joints[j].y;
vtx->n.ob[2] = strand->joints[j].z;
Matrix_RotateY(strand->rotations[j].y, MTXMODE_NEW);
Matrix_RotateX(strand->rotations[j].x, MTXMODE_APPLY);
Matrix_MultVec3f(&up, &normal);
vtx->n.n[0] = normal.x;
vtx->n.n[1] = normal.y;
vtx->n.n[2] = normal.z;
}
}
}
void EnGanonMant_Update(Actor* thisx, GlobalContext* globalCtx) {
EnGanonMant* this = THIS;
BossGanon* ganon = (BossGanon*)this->actor.parent;
this->updateHasRun = true;
this->frameTimer++;
if (this->attachLeftArmTimer == 0.0f) {
} else {
this->attachLeftArmTimer -= 1.0f;
}
if (this->attachRightArmTimer != 0.0f) {
this->attachRightArmTimer -= 1.0f;
}
if (this->attachShouldersTimer != 0.0f) {
this->attachShouldersTimer -= 1.0f;
}
this->actor.shape.rot.y = ganon->actor.shape.rot.y;
if (this->tearTimer != 0) {
this->tearTimer--;
EnGanonMant_Tear(this);
}
}
void EnGanonMant_DrawCloak(GlobalContext* globalCtx, EnGanonMant* this) {
s32 pad;
OPEN_DISPS(globalCtx->state.gfxCtx, "../z_en_ganon_mant.c", 564);
Matrix_Translate(0.0f, 0.0f, 0.0f, MTXMODE_NEW);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx, "../z_en_ganon_mant.c", 572),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
// set texture
gSPDisplayList(POLY_OPA_DISP++, sMantTexDL);
// set vertices, vertices are double buffered to prevent
// modification of vertices as they are being drawn
if (this->frameTimer % 2 != 0) {
gSPSegment(POLY_OPA_DISP++, 0x0C, sMantVtx1);
} else {
gSPSegment(POLY_OPA_DISP++, 0x0C, sMantVtx2);
}
// draw cloak
gSPDisplayList(POLY_OPA_DISP++, sMantDL);
CLOSE_DISPS(globalCtx->state.gfxCtx, "../z_en_ganon_mant.c", 584);
}
void EnGanonMant_Draw(Actor* thisx, GlobalContext* globalCtx) {
EnGanonMant* this = THIS;
f32 xDiff;
f32 pitch;
Vec3f strandOffset;
Vec3f strandDivPos;
f32 zDiff;
f32 diffHalfDist;
f32 yDiff;
f32 yaw;
Vec3f* rightPos;
Vec3f* leftPos;
s16 strandIdx;
Vec3f midpoint;
s16 nextStrandIdx;
if (this->updateHasRun) {
// Only run this if update has run since last draw
// Choose endpoints
if (this->attachRightArmTimer != 0.0f) {
rightPos = &this->rightForearmPos;
leftPos = &this->leftShoulderPos;
this->gravity = -13.0f;
} else if (this->attachLeftArmTimer != 0.0f) {
rightPos = &this->rightShoulderPos;
leftPos = &this->leftForearmPos;
this->gravity = -13.0f;
} else if (this->attachShouldersTimer != 0.0f) {
rightPos = &this->rightShoulderPos;
leftPos = &this->leftShoulderPos;
this->gravity = -3.0f;
} else {
rightPos = &this->rightForearmPos;
leftPos = &this->leftForearmPos;
}
xDiff = leftPos->x - rightPos->x;
yDiff = leftPos->y - rightPos->y;
zDiff = leftPos->z - rightPos->z;
midpoint.x = rightPos->x + xDiff * 0.5f;
midpoint.y = rightPos->y + yDiff * 0.5f;
midpoint.z = rightPos->z + zDiff * 0.5f;
// Calculte base orientation for chosen endpoints
yaw = Math_Atan2F(zDiff, xDiff);
pitch = -Math_Atan2F(sqrtf(SQ(xDiff) + SQ(zDiff)), yDiff);
diffHalfDist = sqrtf(SQ(xDiff) + SQ(yDiff) + SQ(zDiff)) * 0.5f;
Matrix_RotateY(yaw, MTXMODE_NEW);
Matrix_RotateX(pitch, MTXMODE_APPLY);
this->baseYaw = yaw - M_PI / 2.0f;
for (strandIdx = 0; strandIdx < GANON_MANT_NUM_STRANDS; strandIdx++) {
Matrix_Push();
// Calculate root positions for chosen endpoints
strandOffset.x = sinf((strandIdx * M_PI) / (GANON_MANT_NUM_STRANDS - 1)) * diffHalfDist;
strandOffset.y = 0;
strandOffset.z = -cosf((strandIdx * M_PI) / (GANON_MANT_NUM_STRANDS - 1)) * diffHalfDist;
Matrix_MultVec3f(&strandOffset, &strandDivPos);
this->strands[strandIdx].root.x = midpoint.x + strandDivPos.x;
this->strands[strandIdx].root.y = midpoint.y + strandDivPos.y;
this->strands[strandIdx].root.z = midpoint.z + strandDivPos.z;
nextStrandIdx = strandIdx + 1;
if (nextStrandIdx >= GANON_MANT_NUM_STRANDS) {
nextStrandIdx = strandIdx - 1;
}
// Update the strand joints
EnGanonMant_UpdateStrand(globalCtx, this, &this->strands[strandIdx].root, this->strands[strandIdx].joints,
this->strands[nextStrandIdx].joints, this->strands[strandIdx].rotations,
this->strands[strandIdx].velocities, strandIdx);
Matrix_Pop();
}
EnGanonMant_UpdateVertices(this);
this->updateHasRun = false;
}
EnGanonMant_DrawCloak(globalCtx, this);
}

View file

@ -6,34 +6,37 @@
struct EnGanonMant;
#define GANON_MANT_NUM_JOINTS 12
#define GANON_MANT_NUM_STRANDS 12
typedef struct {
/* 0x000 */ Vec3f unk_00; // 14C
/* 0x00C */ Vec3f unk_0C[12]; // 158
/* 0x090 */ Vec3f unk_90[12]; // 1E8
/* 0x120 */ Vec3f unk_120[12]; // 278
/* 0x1B0 */ u8 unk_1B0[12]; // 308
} MantSub14C; // size = 0x1C8
/* 0x000 */ Vec3f root; // root position along the collar
/* 0x00C */ Vec3f joints[GANON_MANT_NUM_JOINTS]; // "joints" for deforming the cloak, stemming from root and propagating down the cloak
/* 0x090 */ Vec3f rotations[GANON_MANT_NUM_JOINTS]; // normal vector rotations, x and y only
/* 0x120 */ Vec3f velocities[GANON_MANT_NUM_JOINTS]; // velocities calculated as differences in position from last update
/* 0x1B0 */ u8 torn[GANON_MANT_NUM_JOINTS]; // guess: whether the joint is torn?
} MantStrand; // size = 0x1C8
typedef struct EnGanonMant {
/* 0x0000 */ Actor actor;
/* 0x014C */ MantSub14C unk_14C[12];
/* 0x16AC */ f32 unk_16AC;
/* 0x16B0 */ f32 unk_16B0;
/* 0x16B4 */ f32 unk_16B4;
/* 0x16B8 */ f32 unk_16B8;
/* 0x16BC */ f32 unk_16BC;
/* 0x16C0 */ f32 unk_16C0;
/* 0x16C4 */ f32 unk_16C4;
/* 0x16C8 */ f32 unk_16C8;
/* 0x16CC */ char unk_16CC[0x4];
/* 0x16D0 */ f32 unk_16D0;
/* 0x16D4 */ Vec3f unk_16D4;
/* 0x16E0 */ Vec3f unk_16E0;
/* 0x16EC */ Vec3f unk_16EC;
/* 0x16F8 */ Vec3f unk_16F8;
/* 0x1704 */ u8 unk_1704;
/* 0x1705 */ u8 unk_1705;
/* 0x1706 */ u8 unk_1706;
/* 0x014C */ MantStrand strands[GANON_MANT_NUM_STRANDS];
/* 0x16AC */ f32 minY; // minimum Y value possible for joints, for emulating collision with a floor
/* 0x16B0 */ f32 backPush; // larger values push the cloak further outwards, negative is away from the actor
/* 0x16B4 */ f32 backSwayMagnitude; // magnitude of backwards/forwards swaying
/* 0x16B8 */ f32 sideSwayMagnitude; // magnitude of sideways swaying
/* 0x16BC */ f32 attachRightArmTimer; // timer for the duration of which the cloak is attached to right forearm and left shoulder
/* 0x16C0 */ f32 attachLeftArmTimer; // timer for the duration of which the cloak is attached to left forearm and right shoulder
/* 0x16C4 */ f32 attachShouldersTimer; // timer for the duration of which the cloak is attached to both shoulders
/* 0x16C8 */ f32 gravity; // strand gravity
/* 0x16CC */ f32 baseYaw;
/* 0x16D0 */ f32 minDist; // closest distance the cloak can get to the attached actor without being pushed away
/* 0x16D4 */ Vec3f rightForearmPos;
/* 0x16E0 */ Vec3f leftForearmPos;
/* 0x16EC */ Vec3f rightShoulderPos;
/* 0x16F8 */ Vec3f leftShoulderPos;
/* 0x1704 */ u8 tearTimer; // tear the cloak for x many frames
/* 0x1705 */ u8 updateHasRun;
/* 0x1706 */ u8 frameTimer;
} EnGanonMant; // size = 0x1708
extern const ActorInit En_Ganon_Mant_InitVars;

View file

@ -837,12 +837,12 @@ void func_80B2CC1C(GlobalContext* globalCtx, EnViewer* this) {
if (this->actor.params >> 8 == 5) {
if (1) {}
sGanonCape->unk_16B0 = BREG(54) / 10.0f;
sGanonCape->unk_16B4 = (BREG(60) + 25) / 100.0f;
sGanonCape->unk_16B8 = (BREG(55) - 45) / 10.0f;
sGanonCape->unk_16AC = -10000.0f;
sGanonCape->unk_16D0 = 0.0f;
sGanonCape->unk_16C8 = (BREG(67) - 10) / 10.0f;
sGanonCape->backPush = BREG(54) / 10.0f;
sGanonCape->backSwayMagnitude = (BREG(60) + 25) / 100.0f;
sGanonCape->sideSwayMagnitude = (BREG(55) - 45) / 10.0f;
sGanonCape->minY = -10000.0f;
sGanonCape->minDist = 0.0f;
sGanonCape->gravity = (BREG(67) - 10) / 10.0f;
vec1.x = KREG(16) - 13.0f;
vec1.y = KREG(17) + 3.0f + Math_SinS(D_80B2CFEC) * KREG(20);
vec1.z = KREG(18) - 10.0f;
@ -850,13 +850,13 @@ void func_80B2CC1C(GlobalContext* globalCtx, EnViewer* this) {
Matrix_RotateY((this->actor.shape.rot.y / (f32)0x8000) * M_PI, MTXMODE_NEW);
Matrix_MultVec3f(&vec1, &vec2);
sGanonCape->unk_16D4.x = D_80B2D448.x + vec2.x;
sGanonCape->unk_16D4.y = D_80B2D448.y + vec2.y;
sGanonCape->unk_16D4.z = D_80B2D448.z + vec2.z;
sGanonCape->rightForearmPos.x = D_80B2D448.x + vec2.x;
sGanonCape->rightForearmPos.y = D_80B2D448.y + vec2.y;
sGanonCape->rightForearmPos.z = D_80B2D448.z + vec2.z;
vec1.x = -(KREG(16) - 13.0f);
Matrix_MultVec3f(&vec1, &vec2);
sGanonCape->unk_16E0.x = D_80B2D448.x + vec2.x;
sGanonCape->unk_16E0.y = D_80B2D448.y + vec2.y;
sGanonCape->unk_16E0.z = D_80B2D448.z + vec2.z;
sGanonCape->leftForearmPos.x = D_80B2D448.x + vec2.x;
sGanonCape->leftForearmPos.y = D_80B2D448.y + vec2.y;
sGanonCape->leftForearmPos.z = D_80B2D448.z + vec2.z;
}
}