Decompile z_skin.c (#548)

* z_skin progress

* Some more progress

* Some real progress

* Decompiled, 1 nonmatching

* Remove unused asm

* pad -> D_80160FC0

Co-authored-by: Thar0 <maximilianc64@gmail.com>
This commit is contained in:
Tharo 2020-12-29 05:30:23 +00:00 committed by GitHub
parent 42f2d38b8f
commit b50e079e1b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 274 additions and 617 deletions

View File

@ -1,119 +0,0 @@
glabel func_800A57C0
/* B1C960 800A57C0 27BDFF70 */ addiu $sp, $sp, -0x90
/* B1C964 800A57C4 AFBF005C */ sw $ra, 0x5c($sp)
/* B1C968 800A57C8 AFBE0058 */ sw $fp, 0x58($sp)
/* B1C96C 800A57CC AFB70054 */ sw $s7, 0x54($sp)
/* B1C970 800A57D0 AFB60050 */ sw $s6, 0x50($sp)
/* B1C974 800A57D4 AFB5004C */ sw $s5, 0x4c($sp)
/* B1C978 800A57D8 AFB40048 */ sw $s4, 0x48($sp)
/* B1C97C 800A57DC AFB30044 */ sw $s3, 0x44($sp)
/* B1C980 800A57E0 AFB20040 */ sw $s2, 0x40($sp)
/* B1C984 800A57E4 AFB1003C */ sw $s1, 0x3c($sp)
/* B1C988 800A57E8 AFB00038 */ sw $s0, 0x38($sp)
/* B1C98C 800A57EC F7BA0030 */ sdc1 $f26, 0x30($sp)
/* B1C990 800A57F0 F7B80028 */ sdc1 $f24, 0x28($sp)
/* B1C994 800A57F4 F7B60020 */ sdc1 $f22, 0x20($sp)
/* B1C998 800A57F8 F7B40018 */ sdc1 $f20, 0x18($sp)
/* B1C99C 800A57FC 94CE0000 */ lhu $t6, ($a2)
/* B1C9A0 800A5800 2417000A */ li $s7, 10
/* B1C9A4 800A5804 00808025 */ move $s0, $a0
/* B1C9A8 800A5808 01D70019 */ multu $t6, $s7
/* B1C9AC 800A580C 00A0A025 */ move $s4, $a1
/* B1C9B0 800A5810 00C0A825 */ move $s5, $a2
/* B1C9B4 800A5814 00E0B025 */ move $s6, $a3
/* B1C9B8 800A5818 00A08825 */ move $s1, $a1
/* B1C9BC 800A581C 27BE0064 */ addiu $fp, $sp, 0x64
/* B1C9C0 800A5820 00007812 */ mflo $t7
/* B1C9C4 800A5824 01E5C021 */ addu $t8, $t7, $a1
/* B1C9C8 800A5828 00B8082B */ sltu $at, $a1, $t8
/* B1C9CC 800A582C 50200048 */ beql $at, $zero, .L800A5950
/* B1C9D0 800A5830 8FBF005C */ lw $ra, 0x5c($sp)
/* B1C9D4 800A5834 4480A000 */ mtc1 $zero, $f20
/* B1C9D8 800A5838 8FB300A0 */ lw $s3, 0xa0($sp)
/* B1C9DC 800A583C C6640000 */ lwc1 $f4, ($s3)
.L800A5840:
/* B1C9E0 800A5840 96390000 */ lhu $t9, ($s1)
/* B1C9E4 800A5844 02002025 */ move $a0, $s0
/* B1C9E8 800A5848 4600218D */ trunc.w.s $f6, $f4
/* B1C9EC 800A584C 00194100 */ sll $t0, $t9, 4
/* B1C9F0 800A5850 01169021 */ addu $s2, $t0, $s6
/* B1C9F4 800A5854 03C02825 */ move $a1, $fp
/* B1C9F8 800A5858 440A3000 */ mfc1 $t2, $f6
/* B1C9FC 800A585C 27A60070 */ addiu $a2, $sp, 0x70
/* B1CA00 800A5860 A64A0000 */ sh $t2, ($s2)
/* B1CA04 800A5864 C6680004 */ lwc1 $f8, 4($s3)
/* B1CA08 800A5868 4600428D */ trunc.w.s $f10, $f8
/* B1CA0C 800A586C 440C5000 */ mfc1 $t4, $f10
/* B1CA10 800A5870 00000000 */ nop
/* B1CA14 800A5874 A64C0002 */ sh $t4, 2($s2)
/* B1CA18 800A5878 C6700008 */ lwc1 $f16, 8($s3)
/* B1CA1C 800A587C 4600848D */ trunc.w.s $f18, $f16
/* B1CA20 800A5880 440E9000 */ mfc1 $t6, $f18
/* B1CA24 800A5884 00000000 */ nop
/* B1CA28 800A5888 A64E0004 */ sh $t6, 4($s2)
/* B1CA2C 800A588C C6160030 */ lwc1 $f22, 0x30($s0)
/* B1CA30 800A5890 C6180034 */ lwc1 $f24, 0x34($s0)
/* B1CA34 800A5894 C61A0038 */ lwc1 $f26, 0x38($s0)
/* B1CA38 800A5898 E6140038 */ swc1 $f20, 0x38($s0)
/* B1CA3C 800A589C E6140034 */ swc1 $f20, 0x34($s0)
/* B1CA40 800A58A0 E6140030 */ swc1 $f20, 0x30($s0)
/* B1CA44 800A58A4 822F0006 */ lb $t7, 6($s1)
/* B1CA48 800A58A8 448F2000 */ mtc1 $t7, $f4
/* B1CA4C 800A58AC 00000000 */ nop
/* B1CA50 800A58B0 468021A0 */ cvt.s.w $f6, $f4
/* B1CA54 800A58B4 E7A60064 */ swc1 $f6, 0x64($sp)
/* B1CA58 800A58B8 82380007 */ lb $t8, 7($s1)
/* B1CA5C 800A58BC 44984000 */ mtc1 $t8, $f8
/* B1CA60 800A58C0 00000000 */ nop
/* B1CA64 800A58C4 468042A0 */ cvt.s.w $f10, $f8
/* B1CA68 800A58C8 E7AA0068 */ swc1 $f10, 0x68($sp)
/* B1CA6C 800A58CC 82390008 */ lb $t9, 8($s1)
/* B1CA70 800A58D0 44998000 */ mtc1 $t9, $f16
/* B1CA74 800A58D4 00000000 */ nop
/* B1CA78 800A58D8 468084A0 */ cvt.s.w $f18, $f16
/* B1CA7C 800A58DC 0C029BBD */ jal SkinMatrix_Vec3fMtxFMultXYZ
/* B1CA80 800A58E0 E7B2006C */ swc1 $f18, 0x6c($sp)
/* B1CA84 800A58E4 C7A40070 */ lwc1 $f4, 0x70($sp)
/* B1CA88 800A58E8 2631000A */ addiu $s1, $s1, 0xa
/* B1CA8C 800A58EC 4600218D */ trunc.w.s $f6, $f4
/* B1CA90 800A58F0 44093000 */ mfc1 $t1, $f6
/* B1CA94 800A58F4 00000000 */ nop
/* B1CA98 800A58F8 A249000C */ sb $t1, 0xc($s2)
/* B1CA9C 800A58FC C7A80074 */ lwc1 $f8, 0x74($sp)
/* B1CAA0 800A5900 4600428D */ trunc.w.s $f10, $f8
/* B1CAA4 800A5904 440B5000 */ mfc1 $t3, $f10
/* B1CAA8 800A5908 00000000 */ nop
/* B1CAAC 800A590C A24B000D */ sb $t3, 0xd($s2)
/* B1CAB0 800A5910 C7B00078 */ lwc1 $f16, 0x78($sp)
/* B1CAB4 800A5914 4600848D */ trunc.w.s $f18, $f16
/* B1CAB8 800A5918 440D9000 */ mfc1 $t5, $f18
/* B1CABC 800A591C 00000000 */ nop
/* B1CAC0 800A5920 A24D000E */ sb $t5, 0xe($s2)
/* B1CAC4 800A5924 E6160030 */ swc1 $f22, 0x30($s0)
/* B1CAC8 800A5928 E6180034 */ swc1 $f24, 0x34($s0)
/* B1CACC 800A592C E61A0038 */ swc1 $f26, 0x38($s0)
/* B1CAD0 800A5930 96AE0000 */ lhu $t6, ($s5)
/* B1CAD4 800A5934 01D70019 */ multu $t6, $s7
/* B1CAD8 800A5938 00007812 */ mflo $t7
/* B1CADC 800A593C 01F4C021 */ addu $t8, $t7, $s4
/* B1CAE0 800A5940 0238082B */ sltu $at, $s1, $t8
/* B1CAE4 800A5944 5420FFBE */ bnezl $at, .L800A5840
/* B1CAE8 800A5948 C6640000 */ lwc1 $f4, ($s3)
/* B1CAEC 800A594C 8FBF005C */ lw $ra, 0x5c($sp)
.L800A5950:
/* B1CAF0 800A5950 D7B40018 */ ldc1 $f20, 0x18($sp)
/* B1CAF4 800A5954 D7B60020 */ ldc1 $f22, 0x20($sp)
/* B1CAF8 800A5958 D7B80028 */ ldc1 $f24, 0x28($sp)
/* B1CAFC 800A595C D7BA0030 */ ldc1 $f26, 0x30($sp)
/* B1CB00 800A5960 8FB00038 */ lw $s0, 0x38($sp)
/* B1CB04 800A5964 8FB1003C */ lw $s1, 0x3c($sp)
/* B1CB08 800A5968 8FB20040 */ lw $s2, 0x40($sp)
/* B1CB0C 800A596C 8FB30044 */ lw $s3, 0x44($sp)
/* B1CB10 800A5970 8FB40048 */ lw $s4, 0x48($sp)
/* B1CB14 800A5974 8FB5004C */ lw $s5, 0x4c($sp)
/* B1CB18 800A5978 8FB60050 */ lw $s6, 0x50($sp)
/* B1CB1C 800A597C 8FB70054 */ lw $s7, 0x54($sp)
/* B1CB20 800A5980 8FBE0058 */ lw $fp, 0x58($sp)
/* B1CB24 800A5984 03E00008 */ jr $ra
/* B1CB28 800A5988 27BD0090 */ addiu $sp, $sp, 0x90

View File

@ -1,91 +0,0 @@
.rdata
glabel D_80140698
.asciz "../z_skin.c"
.balign 4
glabel D_801406A4
.asciz "../z_skin.c"
.balign 4
.text
glabel func_800A5E28
/* B1CFC8 800A5E28 27BDFFB8 */ addiu $sp, $sp, -0x48
/* B1CFCC 800A5E2C AFB00018 */ sw $s0, 0x18($sp)
/* B1CFD0 800A5E30 AFA60050 */ sw $a2, 0x50($sp)
/* B1CFD4 800A5E34 00808025 */ move $s0, $a0
/* B1CFD8 800A5E38 AFBF001C */ sw $ra, 0x1c($sp)
/* B1CFDC 800A5E3C AFA5004C */ sw $a1, 0x4c($sp)
/* B1CFE0 800A5E40 AFA70054 */ sw $a3, 0x54($sp)
/* B1CFE4 800A5E44 3C068014 */ lui $a2, %hi(D_80140698) # $a2, 0x8014
/* B1CFE8 800A5E48 24C60698 */ addiu $a2, %lo(D_80140698) # addiu $a2, $a2, 0x698
/* B1CFEC 800A5E4C 2407016C */ li $a3, 364
/* B1CFF0 800A5E50 02002825 */ move $a1, $s0
/* B1CFF4 800A5E54 0C031AB1 */ jal Graph_OpenDisps
/* B1CFF8 800A5E58 27A4002C */ addiu $a0, $sp, 0x2c
/* B1CFFC 800A5E5C 8FAE004C */ lw $t6, 0x4c($sp)
/* B1D000 800A5E60 3C068016 */ lui $a2, %hi(gSegments) # $a2, 0x8016
/* B1D004 800A5E64 24C66FA8 */ addiu $a2, %lo(gSegments) # addiu $a2, $a2, 0x6fa8
/* B1D008 800A5E68 8DCF0000 */ lw $t7, ($t6)
/* B1D00C 800A5E6C 3C0700FF */ lui $a3, (0x00FFFFFF >> 16) # lui $a3, 0xff
/* B1D010 800A5E70 34E7FFFF */ ori $a3, (0x00FFFFFF & 0xFFFF) # ori $a3, $a3, 0xffff
/* B1D014 800A5E74 8DE20000 */ lw $v0, ($t7)
/* B1D018 800A5E78 3C088000 */ lui $t0, 0x8000
/* B1D01C 800A5E7C 0002C100 */ sll $t8, $v0, 4
/* B1D020 800A5E80 0018CF02 */ srl $t9, $t8, 0x1c
/* B1D024 800A5E84 00195080 */ sll $t2, $t9, 2
/* B1D028 800A5E88 00CA5821 */ addu $t3, $a2, $t2
/* B1D02C 800A5E8C 8D6C0000 */ lw $t4, ($t3)
/* B1D030 800A5E90 8FB80050 */ lw $t8, 0x50($sp)
/* B1D034 800A5E94 00476824 */ and $t5, $v0, $a3
/* B1D038 800A5E98 018D7821 */ addu $t7, $t4, $t5
/* B1D03C 800A5E9C 01E82821 */ addu $a1, $t7, $t0
/* B1D040 800A5EA0 0018C880 */ sll $t9, $t8, 2
/* B1D044 800A5EA4 00B95021 */ addu $t2, $a1, $t9
/* B1D048 800A5EA8 8D430000 */ lw $v1, ($t2)
/* B1D04C 800A5EAC 01C02825 */ move $a1, $t6
/* B1D050 800A5EB0 00036100 */ sll $t4, $v1, 4
/* B1D054 800A5EB4 000C6F02 */ srl $t5, $t4, 0x1c
/* B1D058 800A5EB8 000D7880 */ sll $t7, $t5, 2
/* B1D05C 800A5EBC 00CFC821 */ addu $t9, $a2, $t7
/* B1D060 800A5EC0 8F2A0000 */ lw $t2, ($t9)
/* B1D064 800A5EC4 00675824 */ and $t3, $v1, $a3
/* B1D068 800A5EC8 016A6021 */ addu $t4, $t3, $t2
/* B1D06C 800A5ECC 01886821 */ addu $t5, $t4, $t0
/* B1D070 800A5ED0 8DA4000C */ lw $a0, 0xc($t5)
/* B1D074 800A5ED4 0004C900 */ sll $t9, $a0, 4
/* B1D078 800A5ED8 00195F02 */ srl $t3, $t9, 0x1c
/* B1D07C 800A5EDC 000B5080 */ sll $t2, $t3, 2
/* B1D080 800A5EE0 00CA6021 */ addu $t4, $a2, $t2
/* B1D084 800A5EE4 8D8D0000 */ lw $t5, ($t4)
/* B1D088 800A5EE8 8FAB0058 */ lw $t3, 0x58($sp)
/* B1D08C 800A5EEC 00877824 */ and $t7, $a0, $a3
/* B1D090 800A5EF0 01EDC821 */ addu $t9, $t7, $t5
/* B1D094 800A5EF4 316A0001 */ andi $t2, $t3, 1
/* B1D098 800A5EF8 15400007 */ bnez $t2, .L800A5F18
/* B1D09C 800A5EFC 03284821 */ addu $t1, $t9, $t0
/* B1D0A0 800A5F00 02002025 */ move $a0, $s0
/* B1D0A4 800A5F04 03003025 */ move $a2, $t8
/* B1D0A8 800A5F08 8FA70054 */ lw $a3, 0x54($sp)
/* B1D0AC 800A5F0C 0C029663 */ jal func_800A598C
/* B1D0B0 800A5F10 AFA90040 */ sw $t1, 0x40($sp)
/* B1D0B4 800A5F14 8FA90040 */ lw $t1, 0x40($sp)
.L800A5F18:
/* B1D0B8 800A5F18 8E0302C0 */ lw $v1, 0x2c0($s0)
/* B1D0BC 800A5F1C 3C0FDE00 */ lui $t7, 0xde00
/* B1D0C0 800A5F20 3C068014 */ lui $a2, %hi(D_801406A4) # $a2, 0x8014
/* B1D0C4 800A5F24 246C0008 */ addiu $t4, $v1, 8
/* B1D0C8 800A5F28 AE0C02C0 */ sw $t4, 0x2c0($s0)
/* B1D0CC 800A5F2C AC6F0000 */ sw $t7, ($v1)
/* B1D0D0 800A5F30 8D2D0008 */ lw $t5, 8($t1)
/* B1D0D4 800A5F34 24C606A4 */ addiu $a2, %lo(D_801406A4) # addiu $a2, $a2, 0x6a4
/* B1D0D8 800A5F38 27A4002C */ addiu $a0, $sp, 0x2c
/* B1D0DC 800A5F3C 02002825 */ move $a1, $s0
/* B1D0E0 800A5F40 24070179 */ li $a3, 377
/* B1D0E4 800A5F44 0C031AD5 */ jal Graph_CloseDisps
/* B1D0E8 800A5F48 AC6D0004 */ sw $t5, 4($v1)
/* B1D0EC 800A5F4C 8FBF001C */ lw $ra, 0x1c($sp)
/* B1D0F0 800A5F50 8FB00018 */ lw $s0, 0x18($sp)
/* B1D0F4 800A5F54 27BD0048 */ addiu $sp, $sp, 0x48
/* B1D0F8 800A5F58 03E00008 */ jr $ra
/* B1D0FC 800A5F5C 00000000 */ nop

View File

@ -1,108 +0,0 @@
.rdata
glabel D_801406B0
.asciz "../z_skin.c"
.balign 4
glabel D_801406BC
.asciz "../z_skin.c"
.balign 4
.text
glabel func_800A5F60
/* B1D100 800A5F60 27BDFFA8 */ addiu $sp, $sp, -0x58
/* B1D104 800A5F64 AFB00018 */ sw $s0, 0x18($sp)
/* B1D108 800A5F68 AFA60060 */ sw $a2, 0x60($sp)
/* B1D10C 800A5F6C 00808025 */ move $s0, $a0
/* B1D110 800A5F70 AFBF001C */ sw $ra, 0x1c($sp)
/* B1D114 800A5F74 AFA5005C */ sw $a1, 0x5c($sp)
/* B1D118 800A5F78 AFA70064 */ sw $a3, 0x64($sp)
/* B1D11C 800A5F7C 00E04025 */ move $t0, $a3
/* B1D120 800A5F80 3C068014 */ lui $a2, %hi(D_801406B0) # $a2, 0x8014
/* B1D124 800A5F84 24C606B0 */ addiu $a2, %lo(D_801406B0) # addiu $a2, $a2, 0x6b0
/* B1D128 800A5F88 AFA80054 */ sw $t0, 0x54($sp)
/* B1D12C 800A5F8C 2407018B */ li $a3, 395
/* B1D130 800A5F90 02002825 */ move $a1, $s0
/* B1D134 800A5F94 0C031AB1 */ jal Graph_OpenDisps
/* B1D138 800A5F98 27A40038 */ addiu $a0, $sp, 0x38
/* B1D13C 800A5F9C 8FAE005C */ lw $t6, 0x5c($sp)
/* B1D140 800A5FA0 3C048016 */ lui $a0, %hi(gSegments) # $a0, 0x8016
/* B1D144 800A5FA4 24846FA8 */ addiu $a0, %lo(gSegments) # addiu $a0, $a0, 0x6fa8
/* B1D148 800A5FA8 8DCF0000 */ lw $t7, ($t6)
/* B1D14C 800A5FAC 3C0500FF */ lui $a1, (0x00FFFFFF >> 16) # lui $a1, 0xff
/* B1D150 800A5FB0 8FAE0064 */ lw $t6, 0x64($sp)
/* B1D154 800A5FB4 8DE20000 */ lw $v0, ($t7)
/* B1D158 800A5FB8 34A5FFFF */ ori $a1, (0x00FFFFFF & 0xFFFF) # ori $a1, $a1, 0xffff
/* B1D15C 800A5FBC 3C068000 */ lui $a2, 0x8000
/* B1D160 800A5FC0 0002C100 */ sll $t8, $v0, 4
/* B1D164 800A5FC4 0018CF02 */ srl $t9, $t8, 0x1c
/* B1D168 800A5FC8 00194880 */ sll $t1, $t9, 2
/* B1D16C 800A5FCC 00895021 */ addu $t2, $a0, $t1
/* B1D170 800A5FD0 8D4B0000 */ lw $t3, ($t2)
/* B1D174 800A5FD4 00456024 */ and $t4, $v0, $a1
/* B1D178 800A5FD8 8FA70060 */ lw $a3, 0x60($sp)
/* B1D17C 800A5FDC 016C6821 */ addu $t5, $t3, $t4
/* B1D180 800A5FE0 8FA80054 */ lw $t0, 0x54($sp)
/* B1D184 800A5FE4 15C0000D */ bnez $t6, .L800A601C
/* B1D188 800A5FE8 01A61821 */ addu $v1, $t5, $a2
/* B1D18C 800A5FEC 00077880 */ sll $t7, $a3, 2
/* B1D190 800A5FF0 006FC021 */ addu $t8, $v1, $t7
/* B1D194 800A5FF4 8F020000 */ lw $v0, ($t8)
/* B1D198 800A5FF8 00024900 */ sll $t1, $v0, 4
/* B1D19C 800A5FFC 00095702 */ srl $t2, $t1, 0x1c
/* B1D1A0 800A6000 000A5880 */ sll $t3, $t2, 2
/* B1D1A4 800A6004 008B6021 */ addu $t4, $a0, $t3
/* B1D1A8 800A6008 8D8D0000 */ lw $t5, ($t4)
/* B1D1AC 800A600C 0045C824 */ and $t9, $v0, $a1
/* B1D1B0 800A6010 032D7021 */ addu $t6, $t9, $t5
/* B1D1B4 800A6014 01C67821 */ addu $t7, $t6, $a2
/* B1D1B8 800A6018 8DE8000C */ lw $t0, 0xc($t7)
.L800A601C:
/* B1D1BC 800A601C 11000023 */ beqz $t0, .L800A60AC
/* B1D1C0 800A6020 02002025 */ move $a0, $s0
/* B1D1C4 800A6024 3C098016 */ lui $t1, %hi(D_801600C0) # $t1, 0x8016
/* B1D1C8 800A6028 252900C0 */ addiu $t1, %lo(D_801600C0) # addiu $t1, $t1, 0xc0
/* B1D1CC 800A602C 0007C180 */ sll $t8, $a3, 6
/* B1D1D0 800A6030 03092821 */ addu $a1, $t8, $t1
/* B1D1D4 800A6034 0C029F9C */ jal SkinMatrix_MtxFToNewMtx
/* B1D1D8 800A6038 AFA80054 */ sw $t0, 0x54($sp)
/* B1D1DC 800A603C 1040001B */ beqz $v0, .L800A60AC
/* B1D1E0 800A6040 8FA80054 */ lw $t0, 0x54($sp)
/* B1D1E4 800A6044 8E0302C0 */ lw $v1, 0x2c0($s0)
/* B1D1E8 800A6048 3C0BDA38 */ lui $t3, 0xda38
/* B1D1EC 800A604C 3C19DE00 */ lui $t9, 0xde00
/* B1D1F0 800A6050 246A0008 */ addiu $t2, $v1, 8
/* B1D1F4 800A6054 AE0A02C0 */ sw $t2, 0x2c0($s0)
/* B1D1F8 800A6058 AC620004 */ sw $v0, 4($v1)
/* B1D1FC 800A605C AC6B0000 */ sw $t3, ($v1)
/* B1D200 800A6060 8E0302C0 */ lw $v1, 0x2c0($s0)
/* B1D204 800A6064 3C0ED838 */ lui $t6, (0xD8380002 >> 16) # lui $t6, 0xd838
/* B1D208 800A6068 35CE0002 */ ori $t6, (0xD8380002 & 0xFFFF) # ori $t6, $t6, 2
/* B1D20C 800A606C 246C0008 */ addiu $t4, $v1, 8
/* B1D210 800A6070 AE0C02C0 */ sw $t4, 0x2c0($s0)
/* B1D214 800A6074 AC680004 */ sw $t0, 4($v1)
/* B1D218 800A6078 AC790000 */ sw $t9, ($v1)
/* B1D21C 800A607C 8E0302C0 */ lw $v1, 0x2c0($s0)
/* B1D220 800A6080 240F0040 */ li $t7, 64
/* B1D224 800A6084 3C09E700 */ lui $t1, 0xe700
/* B1D228 800A6088 246D0008 */ addiu $t5, $v1, 8
/* B1D22C 800A608C AE0D02C0 */ sw $t5, 0x2c0($s0)
/* B1D230 800A6090 AC6F0004 */ sw $t7, 4($v1)
/* B1D234 800A6094 AC6E0000 */ sw $t6, ($v1)
/* B1D238 800A6098 8E0302C0 */ lw $v1, 0x2c0($s0)
/* B1D23C 800A609C 24780008 */ addiu $t8, $v1, 8
/* B1D240 800A60A0 AE1802C0 */ sw $t8, 0x2c0($s0)
/* B1D244 800A60A4 AC600004 */ sw $zero, 4($v1)
/* B1D248 800A60A8 AC690000 */ sw $t1, ($v1)
.L800A60AC:
/* B1D24C 800A60AC 3C068014 */ lui $a2, %hi(D_801406BC) # $a2, 0x8014
/* B1D250 800A60B0 24C606BC */ addiu $a2, %lo(D_801406BC) # addiu $a2, $a2, 0x6bc
/* B1D254 800A60B4 27A40038 */ addiu $a0, $sp, 0x38
/* B1D258 800A60B8 02002825 */ move $a1, $s0
/* B1D25C 800A60BC 0C031AD5 */ jal Graph_CloseDisps
/* B1D260 800A60C0 240701B1 */ li $a3, 433
/* B1D264 800A60C4 8FBF001C */ lw $ra, 0x1c($sp)
/* B1D268 800A60C8 8FB00018 */ lw $s0, 0x18($sp)
/* B1D26C 800A60CC 27BD0058 */ addiu $sp, $sp, 0x58
/* B1D270 800A60D0 03E00008 */ jr $ra
/* B1D274 800A60D4 00000000 */ nop

View File

@ -1,171 +0,0 @@
.rdata
glabel D_801406C8
.asciz "../z_skin.c"
.balign 4
glabel D_801406D4
.asciz "../z_skin.c"
.balign 4
.text
glabel func_800A60D8
/* B1D278 800A60D8 27BDFF78 */ addiu $sp, $sp, -0x88
/* B1D27C 800A60DC AFB20028 */ sw $s2, 0x28($sp)
/* B1D280 800A60E0 AFBF0044 */ sw $ra, 0x44($sp)
/* B1D284 800A60E4 AFBE0040 */ sw $fp, 0x40($sp)
/* B1D288 800A60E8 AFB7003C */ sw $s7, 0x3c($sp)
/* B1D28C 800A60EC AFB60038 */ sw $s6, 0x38($sp)
/* B1D290 800A60F0 AFB50034 */ sw $s5, 0x34($sp)
/* B1D294 800A60F4 AFB40030 */ sw $s4, 0x30($sp)
/* B1D298 800A60F8 AFB3002C */ sw $s3, 0x2c($sp)
/* B1D29C 800A60FC AFB10024 */ sw $s1, 0x24($sp)
/* B1D2A0 800A6100 AFB00020 */ sw $s0, 0x20($sp)
/* B1D2A4 800A6104 AFA40088 */ sw $a0, 0x88($sp)
/* B1D2A8 800A6108 AFA5008C */ sw $a1, 0x8c($sp)
/* B1D2AC 800A610C AFA70094 */ sw $a3, 0x94($sp)
/* B1D2B0 800A6110 8CB50000 */ lw $s5, ($a1)
/* B1D2B4 800A6114 00C09025 */ move $s2, $a2
/* B1D2B8 800A6118 3C068014 */ lui $a2, %hi(D_801406C8) # $a2, 0x8014
/* B1D2BC 800A611C 24C606C8 */ addiu $a2, %lo(D_801406C8) # addiu $a2, $a2, 0x6c8
/* B1D2C0 800A6120 240701D7 */ li $a3, 471
/* B1D2C4 800A6124 27A40060 */ addiu $a0, $sp, 0x60
/* B1D2C8 800A6128 0C031AB1 */ jal Graph_OpenDisps
/* B1D2CC 800A612C 02A02825 */ move $a1, $s5
/* B1D2D0 800A6130 8FB600A4 */ lw $s6, 0xa4($sp)
/* B1D2D4 800A6134 3C058016 */ lui $a1, %hi(D_801600C0) # $a1, 0x8016
/* B1D2D8 800A6138 24A500C0 */ addiu $a1, %lo(D_801600C0) # addiu $a1, $a1, 0xc0
/* B1D2DC 800A613C 32CF0001 */ andi $t7, $s6, 1
/* B1D2E0 800A6140 15E00004 */ bnez $t7, .L800A6154
/* B1D2E4 800A6144 02402025 */ move $a0, $s2
/* B1D2E8 800A6148 8FA60088 */ lw $a2, 0x88($sp)
/* B1D2EC 800A614C 0C029AB1 */ jal func_800A6AC4
/* B1D2F0 800A6150 8FA7009C */ lw $a3, 0x9c($sp)
.L800A6154:
/* B1D2F4 800A6154 8E450000 */ lw $a1, ($s2)
/* B1D2F8 800A6158 3C098016 */ lui $t1, %hi(gSegments)
/* B1D2FC 800A615C 3C0100FF */ lui $at, (0x00FFFFFF >> 16) # lui $at, 0xff
/* B1D300 800A6160 8CA20000 */ lw $v0, ($a1)
/* B1D304 800A6164 3421FFFF */ ori $at, (0x00FFFFFF & 0xFFFF) # ori $at, $at, 0xffff
/* B1D308 800A6168 32CB0002 */ andi $t3, $s6, 2
/* B1D30C 800A616C 0002C100 */ sll $t8, $v0, 4
/* B1D310 800A6170 0018CF02 */ srl $t9, $t8, 0x1c
/* B1D314 800A6174 00194080 */ sll $t0, $t9, 2
/* B1D318 800A6178 01284821 */ addu $t1, $t1, $t0
/* B1D31C 800A617C 8D296FA8 */ lw $t1, %lo(gSegments)($t1)
/* B1D320 800A6180 00415024 */ and $t2, $v0, $at
/* B1D324 800A6184 3C018000 */ lui $at, 0x8000
/* B1D328 800A6188 012A9821 */ addu $s3, $t1, $t2
/* B1D32C 800A618C 15600015 */ bnez $t3, .L800A61E4
/* B1D330 800A6190 02619821 */ addu $s3, $s3, $at
/* B1D334 800A6194 8EA402C0 */ lw $a0, 0x2c0($s5)
/* B1D338 800A6198 3C10DA38 */ lui $s0, 0xda38
/* B1D33C 800A619C 3C0D8013 */ lui $t5, %hi(gMtxClear) # $t5, 0x8013
/* B1D340 800A61A0 248C0008 */ addiu $t4, $a0, 8
/* B1D344 800A61A4 AEAC02C0 */ sw $t4, 0x2c0($s5)
/* B1D348 800A61A8 25ADDB20 */ addiu $t5, %lo(gMtxClear) # addiu $t5, $t5, -0x24e0
/* B1D34C 800A61AC 36100003 */ ori $s0, (0xDA380003 & 0xFFFF) # ori $s0, $s0, 3
/* B1D350 800A61B0 AC900000 */ sw $s0, ($a0)
/* B1D354 800A61B4 AC8D0004 */ sw $t5, 4($a0)
/* B1D358 800A61B8 02A02025 */ move $a0, $s5
/* B1D35C 800A61BC 0C029F9C */ jal SkinMatrix_MtxFToNewMtx
/* B1D360 800A61C0 26450004 */ addiu $a1, $s2, 4
/* B1D364 800A61C4 10400048 */ beqz $v0, .L800A62E8
/* B1D368 800A61C8 00000000 */ nop
/* B1D36C 800A61CC 8EA402C0 */ lw $a0, 0x2c0($s5)
/* B1D370 800A61D0 248E0008 */ addiu $t6, $a0, 8
/* B1D374 800A61D4 AEAE02C0 */ sw $t6, 0x2c0($s5)
/* B1D378 800A61D8 AC820004 */ sw $v0, 4($a0)
/* B1D37C 800A61DC AC900000 */ sw $s0, ($a0)
/* B1D380 800A61E0 8E450000 */ lw $a1, ($s2)
.L800A61E4:
/* B1D384 800A61E4 90AF0004 */ lbu $t7, 4($a1)
/* B1D388 800A61E8 00008025 */ move $s0, $zero
/* B1D38C 800A61EC 02608825 */ move $s1, $s3
/* B1D390 800A61F0 19E00036 */ blez $t7, .L800A62CC
/* B1D394 800A61F4 8FB700A0 */ lw $s7, 0xa0($sp)
/* B1D398 800A61F8 241E0004 */ li $fp, 4
/* B1D39C 800A61FC 24140001 */ li $s4, 1
/* B1D3A0 800A6200 8FB30098 */ lw $s3, 0x98($sp)
.L800A6204:
/* B1D3A4 800A6204 12600007 */ beqz $s3, .L800A6224
/* B1D3A8 800A6208 02802025 */ move $a0, $s4
/* B1D3AC 800A620C 8FA40088 */ lw $a0, 0x88($sp)
/* B1D3B0 800A6210 8FA5008C */ lw $a1, 0x8c($sp)
/* B1D3B4 800A6214 02003025 */ move $a2, $s0
/* B1D3B8 800A6218 0260F809 */ jalr $s3
/* B1D3BC 800A621C 02403825 */ move $a3, $s2
/* B1D3C0 800A6220 00402025 */ move $a0, $v0
.L800A6224:
/* B1D3C4 800A6224 8E220000 */ lw $v0, ($s1)
/* B1D3C8 800A6228 3C0A8016 */ lui $t2, %hi(gSegments)
/* B1D3CC 800A622C 3C0100FF */ lui $at, (0x00FFFFFF >> 16) # lui $at, 0xff
/* B1D3D0 800A6230 0002C900 */ sll $t9, $v0, 4
/* B1D3D4 800A6234 00194702 */ srl $t0, $t9, 0x1c
/* B1D3D8 800A6238 00084880 */ sll $t1, $t0, 2
/* B1D3DC 800A623C 01495021 */ addu $t2, $t2, $t1
/* B1D3E0 800A6240 8D4A6FA8 */ lw $t2, %lo(gSegments)($t2)
/* B1D3E4 800A6244 3421FFFF */ ori $at, (0x00FFFFFF & 0xFFFF) # ori $at, $at, 0xffff
/* B1D3E8 800A6248 0041C024 */ and $t8, $v0, $at
/* B1D3EC 800A624C 3C038000 */ lui $v1, 0x8000
/* B1D3F0 800A6250 030A5821 */ addu $t3, $t8, $t2
/* B1D3F4 800A6254 006B1821 */ addu $v1, $v1, $t3
/* B1D3F8 800A6258 8C630008 */ lw $v1, 8($v1)
/* B1D3FC 800A625C 2401000B */ li $at, 11
/* B1D400 800A6260 147E000A */ bne $v1, $fp, .L800A628C
/* B1D404 800A6264 00000000 */ nop
/* B1D408 800A6268 14940008 */ bne $a0, $s4, .L800A628C
/* B1D40C 800A626C 02402825 */ move $a1, $s2
/* B1D410 800A6270 02A02025 */ move $a0, $s5
/* B1D414 800A6274 02003025 */ move $a2, $s0
/* B1D418 800A6278 02E03825 */ move $a3, $s7
/* B1D41C 800A627C 0C02978A */ jal func_800A5E28
/* B1D420 800A6280 AFB60010 */ sw $s6, 0x10($sp)
/* B1D424 800A6284 1000000B */ b .L800A62B4
/* B1D428 800A6288 8E4C0000 */ lw $t4, ($s2)
.L800A628C:
/* B1D42C 800A628C 54610009 */ bnel $v1, $at, .L800A62B4
/* B1D430 800A6290 8E4C0000 */ lw $t4, ($s2)
/* B1D434 800A6294 14940006 */ bne $a0, $s4, .L800A62B0
/* B1D438 800A6298 02402825 */ move $a1, $s2
/* B1D43C 800A629C 02A02025 */ move $a0, $s5
/* B1D440 800A62A0 02003025 */ move $a2, $s0
/* B1D444 800A62A4 00003825 */ move $a3, $zero
/* B1D448 800A62A8 0C0297D8 */ jal func_800A5F60
/* B1D44C 800A62AC AFB60010 */ sw $s6, 0x10($sp)
.L800A62B0:
/* B1D450 800A62B0 8E4C0000 */ lw $t4, ($s2)
.L800A62B4:
/* B1D454 800A62B4 26100001 */ addiu $s0, $s0, 1
/* B1D458 800A62B8 26310004 */ addiu $s1, $s1, 4
/* B1D45C 800A62BC 918D0004 */ lbu $t5, 4($t4)
/* B1D460 800A62C0 020D082A */ slt $at, $s0, $t5
/* B1D464 800A62C4 1420FFCF */ bnez $at, .L800A6204
/* B1D468 800A62C8 00000000 */ nop
.L800A62CC:
/* B1D46C 800A62CC 8FA20094 */ lw $v0, 0x94($sp)
/* B1D470 800A62D0 8FA40088 */ lw $a0, 0x88($sp)
/* B1D474 800A62D4 8FA5008C */ lw $a1, 0x8c($sp)
/* B1D478 800A62D8 10400003 */ beqz $v0, .L800A62E8
/* B1D47C 800A62DC 00000000 */ nop
/* B1D480 800A62E0 0040F809 */ jalr $v0
/* B1D484 800A62E4 02403025 */ move $a2, $s2
.L800A62E8:
/* B1D488 800A62E8 3C068014 */ lui $a2, %hi(D_801406D4) # $a2, 0x8014
/* B1D48C 800A62EC 24C606D4 */ addiu $a2, %lo(D_801406D4) # addiu $a2, $a2, 0x6d4
/* B1D490 800A62F0 27A40060 */ addiu $a0, $sp, 0x60
/* B1D494 800A62F4 02A02825 */ move $a1, $s5
/* B1D498 800A62F8 0C031AD5 */ jal Graph_CloseDisps
/* B1D49C 800A62FC 24070216 */ li $a3, 534
/* B1D4A0 800A6300 8FBF0044 */ lw $ra, 0x44($sp)
/* B1D4A4 800A6304 8FB00020 */ lw $s0, 0x20($sp)
/* B1D4A8 800A6308 8FB10024 */ lw $s1, 0x24($sp)
/* B1D4AC 800A630C 8FB20028 */ lw $s2, 0x28($sp)
/* B1D4B0 800A6310 8FB3002C */ lw $s3, 0x2c($sp)
/* B1D4B4 800A6314 8FB40030 */ lw $s4, 0x30($sp)
/* B1D4B8 800A6318 8FB50034 */ lw $s5, 0x34($sp)
/* B1D4BC 800A631C 8FB60038 */ lw $s6, 0x38($sp)
/* B1D4C0 800A6320 8FB7003C */ lw $s7, 0x3c($sp)
/* B1D4C4 800A6324 8FBE0040 */ lw $fp, 0x40($sp)
/* B1D4C8 800A6328 03E00008 */ jr $ra
/* B1D4CC 800A632C 27BD0088 */ addiu $sp, $sp, 0x88

View File

@ -1,14 +0,0 @@
glabel func_800A6330
/* B1D4D0 800A6330 27BDFFD8 */ addiu $sp, $sp, -0x28
/* B1D4D4 800A6334 8FAE0038 */ lw $t6, 0x38($sp)
/* B1D4D8 800A6338 AFBF0024 */ sw $ra, 0x24($sp)
/* B1D4DC 800A633C AFA00010 */ sw $zero, 0x10($sp)
/* B1D4E0 800A6340 AFA00018 */ sw $zero, 0x18($sp)
/* B1D4E4 800A6344 AFA0001C */ sw $zero, 0x1c($sp)
/* B1D4E8 800A6348 0C029836 */ jal func_800A60D8
/* B1D4EC 800A634C AFAE0014 */ sw $t6, 0x14($sp)
/* B1D4F0 800A6350 8FBF0024 */ lw $ra, 0x24($sp)
/* B1D4F4 800A6354 27BD0028 */ addiu $sp, $sp, 0x28
/* B1D4F8 800A6358 03E00008 */ jr $ra
/* B1D4FC 800A635C 00000000 */ nop

View File

@ -1,15 +0,0 @@
glabel func_800A6360
/* B1D500 800A6360 27BDFFD8 */ addiu $sp, $sp, -0x28
/* B1D504 800A6364 8FAE0038 */ lw $t6, 0x38($sp)
/* B1D508 800A6368 8FAF003C */ lw $t7, 0x3c($sp)
/* B1D50C 800A636C AFBF0024 */ sw $ra, 0x24($sp)
/* B1D510 800A6370 AFA00018 */ sw $zero, 0x18($sp)
/* B1D514 800A6374 AFA0001C */ sw $zero, 0x1c($sp)
/* B1D518 800A6378 AFAE0010 */ sw $t6, 0x10($sp)
/* B1D51C 800A637C 0C029836 */ jal func_800A60D8
/* B1D520 800A6380 AFAF0014 */ sw $t7, 0x14($sp)
/* B1D524 800A6384 8FBF0024 */ lw $ra, 0x24($sp)
/* B1D528 800A6388 27BD0028 */ addiu $sp, $sp, 0x28
/* B1D52C 800A638C 03E00008 */ jr $ra
/* B1D530 800A6390 00000000 */ nop

View File

@ -1,16 +0,0 @@
glabel func_800A6394
/* B1D534 800A6394 27BDFFD8 */ addiu $sp, $sp, -0x28
/* B1D538 800A6398 8FAE0038 */ lw $t6, 0x38($sp)
/* B1D53C 800A639C 8FAF003C */ lw $t7, 0x3c($sp)
/* B1D540 800A63A0 8FB80040 */ lw $t8, 0x40($sp)
/* B1D544 800A63A4 AFBF0024 */ sw $ra, 0x24($sp)
/* B1D548 800A63A8 AFA0001C */ sw $zero, 0x1c($sp)
/* B1D54C 800A63AC AFAE0010 */ sw $t6, 0x10($sp)
/* B1D550 800A63B0 AFAF0014 */ sw $t7, 0x14($sp)
/* B1D554 800A63B4 0C029836 */ jal func_800A60D8
/* B1D558 800A63B8 AFB80018 */ sw $t8, 0x18($sp)
/* B1D55C 800A63BC 8FBF0024 */ lw $ra, 0x24($sp)
/* B1D560 800A63C0 27BD0028 */ addiu $sp, $sp, 0x28
/* B1D564 800A63C4 03E00008 */ jr $ra
/* B1D568 800A63C8 00000000 */ nop

View File

@ -1,17 +0,0 @@
glabel func_800A63CC
/* B1D56C 800A63CC 27BDFFD8 */ addiu $sp, $sp, -0x28
/* B1D570 800A63D0 8FAE0038 */ lw $t6, 0x38($sp)
/* B1D574 800A63D4 8FAF003C */ lw $t7, 0x3c($sp)
/* B1D578 800A63D8 8FB80040 */ lw $t8, 0x40($sp)
/* B1D57C 800A63DC 8FB90044 */ lw $t9, 0x44($sp)
/* B1D580 800A63E0 AFBF0024 */ sw $ra, 0x24($sp)
/* B1D584 800A63E4 AFAE0010 */ sw $t6, 0x10($sp)
/* B1D588 800A63E8 AFAF0014 */ sw $t7, 0x14($sp)
/* B1D58C 800A63EC AFB80018 */ sw $t8, 0x18($sp)
/* B1D590 800A63F0 0C029836 */ jal func_800A60D8
/* B1D594 800A63F4 AFB9001C */ sw $t9, 0x1c($sp)
/* B1D598 800A63F8 8FBF0024 */ lw $ra, 0x24($sp)
/* B1D59C 800A63FC 27BD0028 */ addiu $sp, $sp, 0x28
/* B1D5A0 800A6400 03E00008 */ jr $ra
/* B1D5A4 800A6404 00000000 */ nop

View File

@ -1,22 +0,0 @@
glabel func_800A6408
/* B1D5A8 800A6408 27BDFFA8 */ addiu $sp, $sp, -0x58
/* B1D5AC 800A640C 3C188016 */ lui $t8, %hi(D_801600C0) # $t8, 0x8016
/* B1D5B0 800A6410 AFBF0014 */ sw $ra, 0x14($sp)
/* B1D5B4 800A6414 AFA40058 */ sw $a0, 0x58($sp)
/* B1D5B8 800A6418 AFA5005C */ sw $a1, 0x5c($sp)
/* B1D5BC 800A641C AFA60060 */ sw $a2, 0x60($sp)
/* B1D5C0 800A6420 271800C0 */ addiu $t8, %lo(D_801600C0) # addiu $t8, $t8, 0xc0
/* B1D5C4 800A6424 00057980 */ sll $t7, $a1, 6
/* B1D5C8 800A6428 AFA70064 */ sw $a3, 0x64($sp)
/* B1D5CC 800A642C 01F82821 */ addu $a1, $t7, $t8
/* B1D5D0 800A6430 27A60018 */ addiu $a2, $sp, 0x18
/* B1D5D4 800A6434 0C029BE8 */ jal SkinMatrix_MtxFMtxFMult
/* B1D5D8 800A6438 24840004 */ addiu $a0, $a0, 4
/* B1D5DC 800A643C 27A40018 */ addiu $a0, $sp, 0x18
/* B1D5E0 800A6440 8FA50060 */ lw $a1, 0x60($sp)
/* B1D5E4 800A6444 0C029BBD */ jal SkinMatrix_Vec3fMtxFMultXYZ
/* B1D5E8 800A6448 8FA60064 */ lw $a2, 0x64($sp)
/* B1D5EC 800A644C 8FBF0014 */ lw $ra, 0x14($sp)
/* B1D5F0 800A6450 27BD0058 */ addiu $sp, $sp, 0x58
/* B1D5F4 800A6454 03E00008 */ jr $ra
/* B1D5F8 800A6458 00000000 */ nop

View File

@ -1,13 +0,0 @@
.include "macro.inc"
# assembler directives
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
.set gp=64 # allow use of 64-bit general purpose registers
.section .bss
.balign 16
glabel D_801600C0
.space 0xF10

View File

@ -1337,19 +1337,19 @@ void func_800A5428(SkelAnime* skelAnime, Vec3s* dst, Vec3s* src, u8* index);
void func_800A54FC(SkelAnime* skelAnime, Vec3f* pos, s16 angle);
s32 func_800A56C8(SkelAnime* skelAnime, f32 arg1);
void SkelAnime_Free(SkelAnime* skelAnime, GlobalContext* globalCtx);
// ? func_800A57C0(?);
// ? func_800A598C(?);
// ? func_800A5E28(?);
// ? func_800A5F60(?);
// ? func_800A60D8(?);
void func_800A6330(Actor* this, GlobalContext* globalCtx, PSkinAwb*, void* callback, s32);
void func_800A63CC(Actor* this, GlobalContext* globalCtx, PSkinAwb*, s32, s32, s32, s32, s32);
void func_800A6408(PSkinAwb* skin, u8 joint, Vec3f*, Vec3f*);
// ? func_800A6460(?);
void func_800A663C(GlobalContext* globalCtx, PSkinAwb*, SkeletonHeader*, AnimationHeader*);
void func_800A6888(GlobalContext*, PSkinAwb*);
// ? func_800A698C(?);
// ? func_800A6AC4(?);
void func_800A57C0(MtxF* mtx, Struct_800A57C0* arg1, Struct_800A598C* arg2, Vtx* arg3, Vec3f* arg4);
void func_800A598C(GraphicsContext* gfxCtx, PSkinAwb* skin, s32 limbIndex, s32 arg3);
void func_800A5E28(GraphicsContext* gfxCtx, PSkinAwb* skin, s32 limbIndex, s32 arg3, s32 arg4);
void func_800A5F60(GraphicsContext* gfxCtx, PSkinAwb* skin, s32 limbIndex, Gfx* arg3, s32 arg4);
void func_800A60D8(Actor* actor, GlobalContext* globalCtx, PSkinAwb* skin, SkinCallback callback, SkinCallback2 arg4, s32 arg5, s32 arg6, s32 arg7);
void func_800A6330(Actor* actor, GlobalContext* globalCtx, PSkinAwb* skin, SkinCallback callback, s32 arg4);
void func_800A63CC(Actor* actor, GlobalContext* globalCtx, PSkinAwb* skin, SkinCallback callback, SkinCallback2 arg4, s32 arg5, s32 arg6, s32 arg7);
void func_800A6408(PSkinAwb* skin, s32 joint, Vec3f* arg2, Vec3f* arg3);
void func_800A6460(GlobalContext* globalCtx, PSkinAwb* skin, s32 arg2);
void func_800A663C(GlobalContext* globalCtx, PSkinAwb* skin, SkeletonHeader* skeletonHeader, AnimationHeader* animationHeader);
void func_800A6888(GlobalContext* globalCtx, PSkinAwb* skin);
s32 func_800A698C(PSkinAwb* skin, SkinLimb** limbs, Mtx* arg2, u8 arg3, u8 arg4);
s32 func_800A6AC4(PSkinAwb* skin, MtxF* arg1, Actor* actor, s32 arg3);
void SkinMatrix_Vec3fMtxFMultXYZW(MtxF* mf, Vec3f* src, Vec3f* xyzDest, f32* wDest);
void SkinMatrix_Vec3fMtxFMultXYZ(MtxF* mf, Vec3f* src, Vec3f* dest);
void SkinMatrix_MtxFMtxFMult(MtxF* mfB, MtxF* mfA, MtxF* dest);
@ -1361,6 +1361,7 @@ void SkinMatrix_SetRotateRPY(MtxF* mf, s16 roll, s16 pitch, s16 yaw);
void SkinMatrix_SetTranslate(MtxF* mf, f32 x, f32 y, f32 z);
void SkinMatrix_SetScaleRotateYRPTranslate(MtxF* mf, f32 scaleX, f32 scaleY, f32 scaleZ, s16 yaw, s16 roll, s16 pitch,
f32 dx, f32 dy, f32 dz);
void SkinMatrix_SetRotateRPYTranslate(MtxF* mf, s16 roll, s16 pitch, s16 yaw, f32 dx, f32 dy, f32 dz);
Mtx* SkinMatrix_MtxFToNewMtx(GraphicsContext* gfxCtx, MtxF* src);
void func_800A7EC0(MtxF* mf, s16 a, f32 x, f32 y, f32 z);
void Sram_InitNewSave(void);

View File

@ -1719,12 +1719,6 @@ typedef struct {
/* 0x10D */ u8 unk_10D;
} UnkRumbleStruct; // size = 0x10E
typedef struct {
char unk_00[0x48];
void* avbTbl;
SkelAnime skelAnime;
} PSkinAwb; // size = 0x90
typedef struct {
/* 0x00 */ char unk_00[0x18];
/* 0x18 */ s32 unk_18;

View File

@ -35,7 +35,7 @@ typedef struct {
/* 0x00 */ Vec3s jointPos; // Root is position in model space, children are relative to parent
/* 0x06 */ u8 child;
/* 0x07 */ u8 sibling;
/* 0x08 */ s32 unk_08; // Type of data contained in segment
/* 0x08 */ s32 unk_8; // Type of data contained in segment
/* 0x0C */ UNK_PTR segment; // Segment address of data. Currently unclear what.
} SkinLimb; // size = 0x10
@ -243,4 +243,52 @@ typedef struct SkelAnime {
/* 0x3E */ Vec3s unk_3E;
} SkelAnime; // size = 0x44
typedef struct {
/* 0x000 */ u16 unk_0;
/* 0x002 */ char unk_2[0x4];
/* 0x006 */ s8 unk_6;
/* 0x007 */ s8 unk_7;
/* 0x008 */ s8 unk_8;
/* 0x009 */ char unk_9[0x1];
} Struct_800A57C0; // size = 0xA
typedef struct {
/* 0x000 */ u8 unk_0;
/* 0x002 */ s16 x;
/* 0x004 */ s16 y;
/* 0x006 */ s16 z;
/* 0x008 */ u8 unk_8;
} Struct_800A598C_2; // size = 0xA
typedef struct {
/* 0x000 */ char unk_0[0x2];
/* 0x002 */ u16 unk_2;
/* 0x004 */ u32 unk_4;
/* 0x008 */ Gfx* unk_8;
} Struct_800A5E28;
typedef struct {
/* 0x000 */ u16 unk_0;
/* 0x002 */ u16 unk_2;
/* 0x004 */ u16 unk_4;
/* 0x008 */ s32 unk_8;
/* 0x00C */ s32 unk_C;
} Struct_800A598C; // size = 0x10
typedef struct {
/* 0x000 */ u8 unk_0;
/* 0x004 */ Vtx* buf[2];
} SkinAvb; // size = 0xC
typedef struct {
/* 0x000 */ SkeletonHeader* skeletonHeader;
/* 0x004 */ MtxF mtx;
/* 0x044 */ s32 avbCount;
/* 0x048 */ SkinAvb* avbTbl;
/* 0x04C */ SkelAnime skelAnime;
} PSkinAwb; // size = 0x90
typedef void (*SkinCallback)(struct Actor*, struct GlobalContext*, PSkinAwb*);
typedef s32 (*SkinCallback2)(struct Actor*, struct GlobalContext*, s32, PSkinAwb*);
#endif

1
spec
View File

@ -338,7 +338,6 @@ beginseg
include "build/src/code/z_scene_table.o"
include "build/src/code/z_skelanime.o"
include "build/src/code/z_skin.o"
include "build/data/z_skin.bss.o"
include "build/src/code/z_skin_awb.o"
include "build/src/code/z_skin_matrix.o"
include "build/src/code/z_sram.o"

View File

@ -1,21 +1,222 @@
#include "global.h"
#pragma GLOBAL_ASM("asm/non_matchings/code/z_skin/func_800A57C0.s")
MtxF D_801600C0[60];
char D_80160FC0[0x10];
void func_800A57C0(MtxF* mtx, Struct_800A57C0* arg1, Struct_800A598C* arg2, Vtx* arg3, Vec3f* arg4) {
Vtx* temp_s2;
Struct_800A57C0* phi_s1;
f32 temp_x;
f32 temp_y;
f32 temp_z;
Vec3f sp70;
Vec3f sp64;
for (phi_s1 = arg1; phi_s1 < arg1 + arg2->unk_0; phi_s1++) {
temp_s2 = &arg3[phi_s1->unk_0];
temp_s2->n.ob[0] = arg4->x;
temp_s2->n.ob[1] = arg4->y;
temp_s2->n.ob[2] = arg4->z;
temp_x = mtx->wx;
temp_y = mtx->wy;
temp_z = mtx->wz;
mtx->wz = 0.0f;
mtx->wy = 0.0f;
mtx->wx = 0.0f;
sp64.x = phi_s1->unk_6;
sp64.y = phi_s1->unk_7;
sp64.z = phi_s1->unk_8;
SkinMatrix_Vec3fMtxFMultXYZ(mtx, &sp64, &sp70);
temp_s2->n.n[0] = sp70.x;
temp_s2->n.n[1] = sp70.y;
temp_s2->n.n[2] = sp70.z;
mtx->wx = temp_x;
mtx->wy = temp_y;
mtx->wz = temp_z;
}
}
#ifdef NON_MATCHING
// Regalloc, Stack
void func_800A598C(GraphicsContext* gfxCtx, PSkinAwb* skin, s32 limbIndex, s32 arg3) {
SkinLimb** limbs;
SkinLimb* limb;
Struct_800A5E28* data;
Struct_800A598C* phi_s6;
s32 temp_a0_2;
SkinAvb* avb;
Struct_800A598C* new_var;
Struct_800A57C0* temp_v0;
Struct_800A598C_2* temp_s3;
Vtx* spEC;
Vec3f spDC;
Vec3f spD0;
OPEN_DISPS(gfxCtx, "../z_skin.c", 254);
limbs = (SkinLimb**)SEGMENTED_TO_VIRTUAL(skin->skeletonHeader->segment);
limb = (SkinLimb*)SEGMENTED_TO_VIRTUAL(limbs[limbIndex]);
data = (Struct_800A5E28*)SEGMENTED_TO_VIRTUAL(limb->segment);
phi_s6 = &((Struct_800A598C*)SEGMENTED_TO_VIRTUAL(data->unk_4))[0];
avb = &skin->avbTbl[limbIndex];
spEC = avb->buf[avb->unk_0];
new_var = &phi_s6[data->unk_2];
while (phi_s6 < new_var) {
temp_a0_2 = phi_s6->unk_2;
temp_v0 = (Struct_800A57C0*)SEGMENTED_TO_VIRTUAL(phi_s6->unk_8);
temp_s3 = (Struct_800A598C_2*)SEGMENTED_TO_VIRTUAL(phi_s6->unk_C);
if (temp_a0_2 == 1) {
Vec3f spAC;
spAC.x = temp_s3[0].x;
spAC.y = temp_s3[0].y;
spAC.z = temp_s3[0].z;
SkinMatrix_Vec3fMtxFMultXYZ(&D_801600C0[temp_s3[0].unk_0], &spAC, &spDC);
} else if (arg3 == 1) {
Struct_800A598C_2* temp_s0 = &temp_s3[phi_s6->unk_4];
Vec3f spA0;
spA0.x = temp_s0->x;
spA0.y = temp_s0->y;
spA0.z = temp_s0->z;
SkinMatrix_Vec3fMtxFMultXYZ(&D_801600C0[temp_s0->unk_0], &spA0, &spDC);
} else {
Struct_800A598C_2* phi_s0 = &temp_s3[0];
f32 phi_f26 = 0.0f;
f32 phi_f24 = 0.0f;
f32 phi_f22 = 0.0f;
while (phi_s0 < &temp_s3[temp_a0_2]) {
Vec3f sp88;
f32 temp_f20 = phi_s0->unk_8 * 0.01f;
sp88.x = phi_s0->x;
sp88.y = phi_s0->y;
sp88.z = phi_s0->z;
SkinMatrix_Vec3fMtxFMultXYZ(&D_801600C0[phi_s0->unk_0], &sp88, &spD0);
spD0.x *= temp_f20;
spD0.y *= temp_f20;
spD0.z *= temp_f20;
phi_f26 += spD0.x;
phi_f24 += spD0.y;
phi_f22 += spD0.z;
phi_s0++;
}
spDC.x = phi_f26;
spDC.y = phi_f24;
spDC.z = phi_f22;
}
func_800A57C0(&D_801600C0[temp_s3[phi_s6->unk_4].unk_0], temp_v0, phi_s6, spEC, &spDC);
phi_s6++;
}
gSPSegment(POLY_OPA_DISP++, 0x08, avb->buf[avb->unk_0]);
if (avb->unk_0 == 0) {
avb->unk_0 = 1;
} else {
avb->unk_0 = 0;
}
CLOSE_DISPS(gfxCtx, "../z_skin.c", 344);
}
#else
#pragma GLOBAL_ASM("asm/non_matchings/code/z_skin/func_800A598C.s")
#endif
#pragma GLOBAL_ASM("asm/non_matchings/code/z_skin/func_800A5E28.s")
void func_800A5E28(GraphicsContext* gfxCtx, PSkinAwb* skin, s32 limbIndex, s32 arg3, s32 arg4) {
SkinLimb** limbs;
Struct_800A5E28* temp_t9;
#pragma GLOBAL_ASM("asm/non_matchings/code/z_skin/func_800A5F60.s")
OPEN_DISPS(gfxCtx, "../z_skin.c", 364);
limbs = (SkinLimb**)SEGMENTED_TO_VIRTUAL(skin->skeletonHeader->segment);
temp_t9 = (Struct_800A5E28*)SEGMENTED_TO_VIRTUAL(((SkinLimb*)SEGMENTED_TO_VIRTUAL(limbs[limbIndex]))->segment);
if (!(arg4 & 1)) {
func_800A598C(gfxCtx, skin, limbIndex, arg3);
}
gSPDisplayList(POLY_OPA_DISP++, temp_t9->unk_8);
CLOSE_DISPS(gfxCtx, "../z_skin.c", 377);
}
#pragma GLOBAL_ASM("asm/non_matchings/code/z_skin/func_800A60D8.s")
void func_800A5F60(GraphicsContext* gfxCtx, PSkinAwb* skin, s32 limbIndex, Gfx* arg3, s32 arg4) {
Gfx* gfx = arg3;
SkinLimb** limbs;
s32 pad;
#pragma GLOBAL_ASM("asm/non_matchings/code/z_skin/func_800A6330.s")
OPEN_DISPS(gfxCtx, "../z_skin.c", 395);
limbs = SEGMENTED_TO_VIRTUAL(skin->skeletonHeader->segment);
if (arg3 == NULL) {
gfx = (Gfx*)((SkinLimb*)SEGMENTED_TO_VIRTUAL(limbs[limbIndex]))->segment;
}
if (gfx != NULL) {
Mtx* mtx = SkinMatrix_MtxFToNewMtx(gfxCtx, &D_801600C0[limbIndex]);
if (mtx != NULL) {
gSPMatrix(POLY_OPA_DISP++, mtx, G_MTX_PUSH | G_MTX_MUL | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gfx);
gSPPopMatrix(POLY_OPA_DISP++, G_MTX_MODELVIEW);
gDPPipeSync(POLY_OPA_DISP++);
}
}
CLOSE_DISPS(gfxCtx, "../z_skin.c", 433);
}
#pragma GLOBAL_ASM("asm/non_matchings/code/z_skin/func_800A6360.s")
void func_800A60D8(Actor* actor, GlobalContext* globalCtx, PSkinAwb* skin, SkinCallback callback, SkinCallback2 arg4,
s32 arg5, s32 arg6, s32 arg7) {
s32 i;
s32 dataType;
SkinLimb** limbs;
GraphicsContext* gfxCtx = globalCtx->state.gfxCtx;
s32 pad;
#pragma GLOBAL_ASM("asm/non_matchings/code/z_skin/func_800A6394.s")
OPEN_DISPS(gfxCtx, "../z_skin.c", 471);
if ((arg7 & 1) == 0) {
func_800A6AC4(skin, &D_801600C0[0], actor, arg5);
}
limbs = SEGMENTED_TO_VIRTUAL(skin->skeletonHeader->segment);
if ((arg7 & 2) == 0) {
Mtx* mtx;
gSPMatrix(POLY_OPA_DISP++, &gMtxClear, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
mtx = SkinMatrix_MtxFToNewMtx(gfxCtx, &skin->mtx);
if (mtx == NULL) {
goto close_disps;
}
gSPMatrix(POLY_OPA_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
}
for (i = 0; i < skin->skeletonHeader->limbCount; i++) {
s32 phi_a0 = 1;
if (arg4 != NULL) {
phi_a0 = arg4(actor, globalCtx, i, skin);
}
dataType = ((SkinLimb*)SEGMENTED_TO_VIRTUAL(limbs[i]))->unk_8;
if (dataType == 4 && phi_a0 == 1) {
func_800A5E28(gfxCtx, skin, i, arg6, arg7);
} else if (dataType == 0xB && phi_a0 == 1) {
func_800A5F60(gfxCtx, skin, i, NULL, arg7);
}
}
if (callback != NULL) {
callback(actor, globalCtx, skin);
}
close_disps:
CLOSE_DISPS(gfxCtx, "../z_skin.c", 534);
}
#pragma GLOBAL_ASM("asm/non_matchings/code/z_skin/func_800A63CC.s")
void func_800A6330(Actor* this, GlobalContext* globalCtx, PSkinAwb* skin, SkinCallback callback, s32 arg4) {
func_800A60D8(this, globalCtx, skin, callback, NULL, arg4, 0, 0);
}
#pragma GLOBAL_ASM("asm/non_matchings/code/z_skin/func_800A6408.s")
void func_800A6360(Actor* this, GlobalContext* globalCtx, PSkinAwb* skin, SkinCallback callback, SkinCallback2 arg4,
s32 arg5) {
func_800A60D8(this, globalCtx, skin, callback, arg4, arg5, 0, 0);
}
void func_800A6394(Actor* this, GlobalContext* globalCtx, PSkinAwb* skin, SkinCallback callback, SkinCallback2 arg4,
s32 arg5, s32 arg6) {
func_800A60D8(this, globalCtx, skin, callback, arg4, arg5, arg6, 0);
}
void func_800A63CC(Actor* this, GlobalContext* globalCtx, PSkinAwb* skin, SkinCallback callback, SkinCallback2 arg4,
s32 arg5, s32 arg6, s32 arg7) {
func_800A60D8(this, globalCtx, skin, callback, arg4, arg5, arg6, arg7);
}
void func_800A6408(PSkinAwb* skin, s32 joint, Vec3f* arg2, Vec3f* arg3) {
MtxF sp18;
SkinMatrix_MtxFMtxFMult(&skin->mtx, &D_801600C0[joint], &sp18);
SkinMatrix_Vec3fMtxFMultXYZ(&sp18, arg2, arg3);
}

View File

@ -659,7 +659,7 @@ void EnHorseNormal_Draw(Actor* thisx, GlobalContext* globalCtx) {
}
gSPMatrix(POLY_OPA_DISP++, &gMtxClear, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPMatrix(POLY_OPA_DISP++, mtx1, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
func_800A63CC(&this->actor, globalCtx, &this->skin, 0, 0, 1, 0, 3);
func_800A63CC(&this->actor, globalCtx, &this->skin, NULL, NULL, 1, 0, 3);
this->cloneCollider.dim.pos.x = clonePos.x;
this->cloneCollider.dim.pos.y = clonePos.y;
this->cloneCollider.dim.pos.z = clonePos.z;