mirror of
https://github.com/izzy2lost/Diddy-Kong-Racing.git
synced 2026-06-19 01:16:26 -07:00
Couple matches, non matches, and non equivalents. (#437)
* Early WIP func_8002BAB0 * More func_8002BAB0 WIP: 12266 * func_8002BAB0 : 9332 * func_8002BAB0 : 425 * func_8002BAB0 : 55 * func_8002BAB0 NON_MATCHING * Label magic code usages * Hide warnings about switches not containing all possible enum values, and fix other warnings. * WIP func_80074B34 * Half assed func_80074EB8 attempt. Utter failure. * Identify some vars for the fish entry init, and fix it's prototype. * Near match obj_init_fish * Fix INCONSISTENT function signatures * Update fish entry * Match func_800AFC3C * A little cleanup * Match func_800B3E64 * Update README
This commit is contained in:
@@ -210,7 +210,7 @@ endif
|
||||
CC_CHECK_CFLAGS := -fsyntax-only -funsigned-char $(INCLUDE_CFLAGS) $(DEF_INC_CFLAGS) -std=gnu90 -Wall -Wextra -Wno-format-security -Wno-main -DNON_MATCHING -DAVOID_UB -D_LANGUAGE_C -DNDEBUG -Werror-implicit-function-declaration
|
||||
|
||||
#Warnings to ignore
|
||||
CC_CHECK_CFLAGS += -Wno-builtin-declaration-mismatch -Wno-pointer-to-int-cast -Wno-int-to-pointer-cast
|
||||
CC_CHECK_CFLAGS += -Wno-builtin-declaration-mismatch -Wno-pointer-to-int-cast -Wno-int-to-pointer-cast -Wno-switch
|
||||
|
||||
####################### ASSETS #########################
|
||||
|
||||
|
||||
@@ -5,9 +5,9 @@ This repo contains a work-in-progress decompilation of Diddy Kong Racing for the
|
||||
Currently, only the US 1.0 version of the game is supported. US 1.1, EU 1.0, EU 1.1, and JP are not supported at this time.
|
||||
|
||||
<!-- README_SCORE_SUMMARY_BEGIN -->
|
||||
As of November 18, 2023, this is our current score:
|
||||
As of November 30, 2023, this is our current score:
|
||||
|
||||
    Decomp progress: 65.67%
|
||||
    Decomp progress: 65.92%
|
||||
|
||||
    Documentation progress: 35.21%
|
||||
<!-- README_SCORE_SUMMARY_END -->
|
||||
@@ -125,15 +125,15 @@ s32 is_drumstick_unlocked(void) {
|
||||
```
|
||||
|
||||
<!-- README_SCORE_BEGIN -->
|
||||
As of November 18, 2023, this is our current score:
|
||||
As of November 30, 2023, this is our current score:
|
||||
```
|
||||
====================================================================
|
||||
ADVENTURE ONE (ASM -> C Decompilation)
|
||||
-------------- 65.67% Complete (68.46% NON_MATCHING) ---------------
|
||||
# Decompiled functions: 1676
|
||||
# GLOBAL_ASM remaining: 169
|
||||
# NON_MATCHING functions: 15
|
||||
# NON_EQUIVALENT WIP functions: 52
|
||||
-------------- 65.92% Complete (68.87% NON_MATCHING) ---------------
|
||||
# Decompiled functions: 1678
|
||||
# GLOBAL_ASM remaining: 167
|
||||
# NON_MATCHING functions: 16
|
||||
# NON_EQUIVALENT WIP functions: 54
|
||||
--------------------------- Game Status ----------------------------
|
||||
Balloons: 31/47, Keys: 3/4, Trophies: 3/5
|
||||
T.T. Amulets: 3/4, Wizpig Amulets: 3/4
|
||||
|
||||
@@ -1,153 +0,0 @@
|
||||
glabel func_800AFC3C
|
||||
/* 0B083C 800AFC3C 27BDFFC8 */ addiu $sp, $sp, -0x38
|
||||
/* 0B0840 800AFC40 AFBF0034 */ sw $ra, 0x34($sp)
|
||||
/* 0B0844 800AFC44 AFB60030 */ sw $s6, 0x30($sp)
|
||||
/* 0B0848 800AFC48 AFB5002C */ sw $s5, 0x2c($sp)
|
||||
/* 0B084C 800AFC4C AFB40028 */ sw $s4, 0x28($sp)
|
||||
/* 0B0850 800AFC50 AFB30024 */ sw $s3, 0x24($sp)
|
||||
/* 0B0854 800AFC54 AFB20020 */ sw $s2, 0x20($sp)
|
||||
/* 0B0858 800AFC58 AFB1001C */ sw $s1, 0x1c($sp)
|
||||
/* 0B085C 800AFC5C AFB00018 */ sw $s0, 0x18($sp)
|
||||
/* 0B0860 800AFC60 8C8E0040 */ lw $t6, 0x40($a0)
|
||||
/* 0B0864 800AFC64 8C950074 */ lw $s5, 0x74($a0)
|
||||
/* 0B0868 800AFC68 81C70057 */ lb $a3, 0x57($t6)
|
||||
/* 0B086C 800AFC6C 00809025 */ move $s2, $a0
|
||||
/* 0B0870 800AFC70 00A0B025 */ move $s6, $a1
|
||||
/* 0B0874 800AFC74 18E0006F */ blez $a3, .L800AFE34
|
||||
/* 0B0878 800AFC78 00009825 */ move $s3, $zero
|
||||
/* 0B087C 800AFC7C 0000A025 */ move $s4, $zero
|
||||
.L800AFC80:
|
||||
/* 0B0880 800AFC80 8E46006C */ lw $a2, 0x6c($s2)
|
||||
/* 0B0884 800AFC84 32AF0001 */ andi $t7, $s5, 1
|
||||
/* 0B0888 800AFC88 11E00032 */ beqz $t7, .L800AFD54
|
||||
/* 0B088C 800AFC8C 00D41821 */ addu $v1, $a2, $s4
|
||||
/* 0B0890 800AFC90 84620004 */ lh $v0, 4($v1)
|
||||
/* 0B0894 800AFC94 02402025 */ move $a0, $s2
|
||||
/* 0B0898 800AFC98 30588000 */ andi $t8, $v0, 0x8000
|
||||
/* 0B089C 800AFC9C 17000009 */ bnez $t8, .L800AFCC4
|
||||
/* 0B08A0 800AFCA0 30594000 */ andi $t9, $v0, 0x4000
|
||||
/* 0B08A4 800AFCA4 0C02BD4B */ jal func_800AF52C
|
||||
/* 0B08A8 800AFCA8 02602825 */ move $a1, $s3
|
||||
/* 0B08AC 800AFCAC 8E46006C */ lw $a2, 0x6c($s2)
|
||||
/* 0B08B0 800AFCB0 00000000 */ nop
|
||||
/* 0B08B4 800AFCB4 00D41821 */ addu $v1, $a2, $s4
|
||||
/* 0B08B8 800AFCB8 84620004 */ lh $v0, 4($v1)
|
||||
/* 0B08BC 800AFCBC 00000000 */ nop
|
||||
/* 0B08C0 800AFCC0 30594000 */ andi $t9, $v0, 0x4000
|
||||
.L800AFCC4:
|
||||
/* 0B08C4 800AFCC4 13200007 */ beqz $t9, .L800AFCE4
|
||||
/* 0B08C8 800AFCC8 30490400 */ andi $t1, $v0, 0x400
|
||||
/* 0B08CC 800AFCCC 00134140 */ sll $t0, $s3, 5
|
||||
/* 0B08D0 800AFCD0 00C82821 */ addu $a1, $a2, $t0
|
||||
/* 0B08D4 800AFCD4 0C02BF97 */ jal func_800AFE5C
|
||||
/* 0B08D8 800AFCD8 02402025 */ move $a0, $s2
|
||||
/* 0B08DC 800AFCDC 10000019 */ b .L800AFD44
|
||||
/* 0B08E0 800AFCE0 8E590040 */ lw $t9, 0x40($s2)
|
||||
.L800AFCE4:
|
||||
/* 0B08E4 800AFCE4 11200006 */ beqz $t1, .L800AFD00
|
||||
/* 0B08E8 800AFCE8 02402025 */ move $a0, $s2
|
||||
/* 0B08EC 800AFCEC 00135140 */ sll $t2, $s3, 5
|
||||
/* 0B08F0 800AFCF0 0C02BF97 */ jal func_800AFE5C
|
||||
/* 0B08F4 800AFCF4 00CA2821 */ addu $a1, $a2, $t2
|
||||
/* 0B08F8 800AFCF8 10000012 */ b .L800AFD44
|
||||
/* 0B08FC 800AFCFC 8E590040 */ lw $t9, 0x40($s2)
|
||||
.L800AFD00:
|
||||
/* 0B0900 800AFD00 846B000A */ lh $t3, 0xa($v1)
|
||||
/* 0B0904 800AFD04 02402025 */ move $a0, $s2
|
||||
/* 0B0908 800AFD08 01766021 */ addu $t4, $t3, $s6
|
||||
/* 0B090C 800AFD0C A46C000A */ sh $t4, 0xa($v1)
|
||||
/* 0B0910 800AFD10 8E46006C */ lw $a2, 0x6c($s2)
|
||||
/* 0B0914 800AFD14 0013C140 */ sll $t8, $s3, 5
|
||||
/* 0B0918 800AFD18 00D41821 */ addu $v1, $a2, $s4
|
||||
/* 0B091C 800AFD1C 8C6E0000 */ lw $t6, ($v1)
|
||||
/* 0B0920 800AFD20 846D000A */ lh $t5, 0xa($v1)
|
||||
/* 0B0924 800AFD24 85CF0040 */ lh $t7, 0x40($t6)
|
||||
/* 0B0928 800AFD28 00000000 */ nop
|
||||
/* 0B092C 800AFD2C 01AF082A */ slt $at, $t5, $t7
|
||||
/* 0B0930 800AFD30 14200003 */ bnez $at, .L800AFD40
|
||||
/* 0B0934 800AFD34 00000000 */ nop
|
||||
/* 0B0938 800AFD38 0C02BF97 */ jal func_800AFE5C
|
||||
/* 0B093C 800AFD3C 00D82821 */ addu $a1, $a2, $t8
|
||||
.L800AFD40:
|
||||
/* 0B0940 800AFD40 8E590040 */ lw $t9, 0x40($s2)
|
||||
.L800AFD44:
|
||||
/* 0B0944 800AFD44 00000000 */ nop
|
||||
/* 0B0948 800AFD48 83270057 */ lb $a3, 0x57($t9)
|
||||
/* 0B094C 800AFD4C 10000034 */ b .L800AFE20
|
||||
/* 0B0950 800AFD50 26730001 */ addiu $s3, $s3, 1
|
||||
.L800AFD54:
|
||||
/* 0B0954 800AFD54 84620004 */ lh $v0, 4($v1)
|
||||
/* 0B0958 800AFD58 00000000 */ nop
|
||||
/* 0B095C 800AFD5C 30488000 */ andi $t0, $v0, 0x8000
|
||||
/* 0B0960 800AFD60 1100002E */ beqz $t0, .L800AFE1C
|
||||
/* 0B0964 800AFD64 30494000 */ andi $t1, $v0, 0x4000
|
||||
/* 0B0968 800AFD68 11200015 */ beqz $t1, .L800AFDC0
|
||||
/* 0B096C 800AFD6C 304C0400 */ andi $t4, $v0, 0x400
|
||||
/* 0B0970 800AFD70 00135140 */ sll $t2, $s3, 5
|
||||
/* 0B0974 800AFD74 00CA8821 */ addu $s1, $a2, $t2
|
||||
/* 0B0978 800AFD78 92300006 */ lbu $s0, 6($s1)
|
||||
/* 0B097C 800AFD7C 02202825 */ move $a1, $s1
|
||||
/* 0B0980 800AFD80 2610FFC0 */ addiu $s0, $s0, -0x40
|
||||
/* 0B0984 800AFD84 06010002 */ bgez $s0, .L800AFD90
|
||||
/* 0B0988 800AFD88 02402025 */ move $a0, $s2
|
||||
/* 0B098C 800AFD8C 00008025 */ move $s0, $zero
|
||||
.L800AFD90:
|
||||
/* 0B0990 800AFD90 0C02BF97 */ jal func_800AFE5C
|
||||
/* 0B0994 800AFD94 A2300006 */ sb $s0, 6($s1)
|
||||
/* 0B0998 800AFD98 16000004 */ bnez $s0, .L800AFDAC
|
||||
/* 0B099C 800AFD9C A2300006 */ sb $s0, 6($s1)
|
||||
/* 0B09A0 800AFDA0 02402025 */ move $a0, $s2
|
||||
/* 0B09A4 800AFDA4 0C02BDB9 */ jal func_800AF6E4
|
||||
/* 0B09A8 800AFDA8 02602825 */ move $a1, $s3
|
||||
.L800AFDAC:
|
||||
/* 0B09AC 800AFDAC 8E4B0040 */ lw $t3, 0x40($s2)
|
||||
/* 0B09B0 800AFDB0 00000000 */ nop
|
||||
/* 0B09B4 800AFDB4 81670057 */ lb $a3, 0x57($t3)
|
||||
/* 0B09B8 800AFDB8 10000019 */ b .L800AFE20
|
||||
/* 0B09BC 800AFDBC 26730001 */ addiu $s3, $s3, 1
|
||||
.L800AFDC0:
|
||||
/* 0B09C0 800AFDC0 11800010 */ beqz $t4, .L800AFE04
|
||||
/* 0B09C4 800AFDC4 02402025 */ move $a0, $s2
|
||||
/* 0B09C8 800AFDC8 00137140 */ sll $t6, $s3, 5
|
||||
/* 0B09CC 800AFDCC 344D0200 */ ori $t5, $v0, 0x200
|
||||
/* 0B09D0 800AFDD0 00CE2021 */ addu $a0, $a2, $t6
|
||||
/* 0B09D4 800AFDD4 A46D0004 */ sh $t5, 4($v1)
|
||||
/* 0B09D8 800AFDD8 908F0006 */ lbu $t7, 6($a0)
|
||||
/* 0B09DC 800AFDDC 02402025 */ move $a0, $s2
|
||||
/* 0B09E0 800AFDE0 15E00003 */ bnez $t7, .L800AFDF0
|
||||
/* 0B09E4 800AFDE4 00000000 */ nop
|
||||
/* 0B09E8 800AFDE8 0C02BDB9 */ jal func_800AF6E4
|
||||
/* 0B09EC 800AFDEC 02602825 */ move $a1, $s3
|
||||
.L800AFDF0:
|
||||
/* 0B09F0 800AFDF0 8E580040 */ lw $t8, 0x40($s2)
|
||||
/* 0B09F4 800AFDF4 00000000 */ nop
|
||||
/* 0B09F8 800AFDF8 83070057 */ lb $a3, 0x57($t8)
|
||||
/* 0B09FC 800AFDFC 10000008 */ b .L800AFE20
|
||||
/* 0B0A00 800AFE00 26730001 */ addiu $s3, $s3, 1
|
||||
.L800AFE04:
|
||||
/* 0B0A04 800AFE04 0C02BDB9 */ jal func_800AF6E4
|
||||
/* 0B0A08 800AFE08 02602825 */ move $a1, $s3
|
||||
/* 0B0A0C 800AFE0C 8E590040 */ lw $t9, 0x40($s2)
|
||||
/* 0B0A10 800AFE10 00000000 */ nop
|
||||
/* 0B0A14 800AFE14 83270057 */ lb $a3, 0x57($t9)
|
||||
/* 0B0A18 800AFE18 00000000 */ nop
|
||||
.L800AFE1C:
|
||||
/* 0B0A1C 800AFE1C 26730001 */ addiu $s3, $s3, 1
|
||||
.L800AFE20:
|
||||
/* 0B0A20 800AFE20 0267082A */ slt $at, $s3, $a3
|
||||
/* 0B0A24 800AFE24 00154042 */ srl $t0, $s5, 1
|
||||
/* 0B0A28 800AFE28 26940020 */ addiu $s4, $s4, 0x20
|
||||
/* 0B0A2C 800AFE2C 1420FF94 */ bnez $at, .L800AFC80
|
||||
/* 0B0A30 800AFE30 0100A825 */ move $s5, $t0
|
||||
.L800AFE34:
|
||||
/* 0B0A34 800AFE34 8FBF0034 */ lw $ra, 0x34($sp)
|
||||
/* 0B0A38 800AFE38 8FB00018 */ lw $s0, 0x18($sp)
|
||||
/* 0B0A3C 800AFE3C 8FB1001C */ lw $s1, 0x1c($sp)
|
||||
/* 0B0A40 800AFE40 8FB20020 */ lw $s2, 0x20($sp)
|
||||
/* 0B0A44 800AFE44 8FB30024 */ lw $s3, 0x24($sp)
|
||||
/* 0B0A48 800AFE48 8FB40028 */ lw $s4, 0x28($sp)
|
||||
/* 0B0A4C 800AFE4C 8FB5002C */ lw $s5, 0x2c($sp)
|
||||
/* 0B0A50 800AFE50 8FB60030 */ lw $s6, 0x30($sp)
|
||||
/* 0B0A54 800AFE54 03E00008 */ jr $ra
|
||||
/* 0B0A58 800AFE58 27BD0038 */ addiu $sp, $sp, 0x38
|
||||
|
||||
@@ -1,399 +0,0 @@
|
||||
glabel func_800B3E64
|
||||
/* 0B4A64 800B3E64 27BDFF70 */ addiu $sp, $sp, -0x90
|
||||
/* 0B4A68 800B3E68 AFBF0044 */ sw $ra, 0x44($sp)
|
||||
/* 0B4A6C 800B3E6C AFBE0040 */ sw $fp, 0x40($sp)
|
||||
/* 0B4A70 800B3E70 AFB7003C */ sw $s7, 0x3c($sp)
|
||||
/* 0B4A74 800B3E74 AFB60038 */ sw $s6, 0x38($sp)
|
||||
/* 0B4A78 800B3E78 AFB50034 */ sw $s5, 0x34($sp)
|
||||
/* 0B4A7C 800B3E7C AFB40030 */ sw $s4, 0x30($sp)
|
||||
/* 0B4A80 800B3E80 AFB3002C */ sw $s3, 0x2c($sp)
|
||||
/* 0B4A84 800B3E84 AFB20028 */ sw $s2, 0x28($sp)
|
||||
/* 0B4A88 800B3E88 AFB10024 */ sw $s1, 0x24($sp)
|
||||
/* 0B4A8C 800B3E8C AFB00020 */ sw $s0, 0x20($sp)
|
||||
/* 0B4A90 800B3E90 E7B50018 */ swc1 $f21, 0x18($sp)
|
||||
/* 0B4A94 800B3E94 E7B4001C */ swc1 $f20, 0x1c($sp)
|
||||
/* 0B4A98 800B3E98 8C960070 */ lw $s6, 0x70($a0)
|
||||
/* 0B4A9C 800B3E9C 0000A825 */ move $s5, $zero
|
||||
/* 0B4AA0 800B3EA0 12C0016B */ beqz $s6, .L800B4450
|
||||
/* 0B4AA4 800B3EA4 00009825 */ move $s3, $zero
|
||||
/* 0B4AA8 800B3EA8 8ECE000C */ lw $t6, 0xc($s6)
|
||||
/* 0B4AAC 800B3EAC 00000000 */ nop
|
||||
/* 0B4AB0 800B3EB0 11C00168 */ beqz $t6, .L800B4454
|
||||
/* 0B4AB4 800B3EB4 8FBF0044 */ lw $ra, 0x44($sp)
|
||||
/* 0B4AB8 800B3EB8 92C20006 */ lbu $v0, 6($s6)
|
||||
/* 0B4ABC 800B3EBC 27BE007C */ addiu $fp, $sp, 0x7c
|
||||
/* 0B4AC0 800B3EC0 2442FFFF */ addiu $v0, $v0, -1
|
||||
/* 0B4AC4 800B3EC4 04400162 */ bltz $v0, .L800B4450
|
||||
/* 0B4AC8 800B3EC8 00029080 */ sll $s2, $v0, 2
|
||||
/* 0B4ACC 800B3ECC 4480A000 */ mtc1 $zero, $f20
|
||||
/* 0B4AD0 800B3ED0 27B70070 */ addiu $s7, $sp, 0x70
|
||||
/* 0B4AD4 800B3ED4 2414000A */ li $s4, 10
|
||||
.L800B3ED8:
|
||||
/* 0B4AD8 800B3ED8 8ECF000C */ lw $t7, 0xc($s6)
|
||||
/* 0B4ADC 800B3EDC 02E02825 */ move $a1, $s7
|
||||
/* 0B4AE0 800B3EE0 01F2C021 */ addu $t8, $t7, $s2
|
||||
/* 0B4AE4 800B3EE4 8F100000 */ lw $s0, ($t8)
|
||||
/* 0B4AE8 800B3EE8 00000000 */ nop
|
||||
/* 0B4AEC 800B3EEC 8619003A */ lh $t9, 0x3a($s0)
|
||||
/* 0B4AF0 800B3EF0 02002025 */ move $a0, $s0
|
||||
/* 0B4AF4 800B3EF4 13200157 */ beqz $t9, .L800B4454
|
||||
/* 0B4AF8 800B3EF8 8FBF0044 */ lw $ra, 0x44($sp)
|
||||
/* 0B4AFC 800B3EFC C6040008 */ lwc1 $f4, 8($s0)
|
||||
/* 0B4B00 800B3F00 8E110044 */ lw $s1, 0x44($s0)
|
||||
/* 0B4B04 800B3F04 E7B40074 */ swc1 $f20, 0x74($sp)
|
||||
/* 0B4B08 800B3F08 E7B40078 */ swc1 $f20, 0x78($sp)
|
||||
/* 0B4B0C 800B3F0C 0C01C0C8 */ jal f32_vec3_apply_object_rotation
|
||||
/* 0B4B10 800B3F10 E7A40070 */ swc1 $f4, 0x70($sp)
|
||||
/* 0B4B14 800B3F14 E7B4007C */ swc1 $f20, 0x7c($sp)
|
||||
/* 0B4B18 800B3F18 C6060008 */ lwc1 $f6, 8($s0)
|
||||
/* 0B4B1C 800B3F1C E7B40084 */ swc1 $f20, 0x84($sp)
|
||||
/* 0B4B20 800B3F20 02002025 */ move $a0, $s0
|
||||
/* 0B4B24 800B3F24 03C02825 */ move $a1, $fp
|
||||
/* 0B4B28 800B3F28 0C01C0C8 */ jal f32_vec3_apply_object_rotation
|
||||
/* 0B4B2C 800B3F2C E7A60080 */ swc1 $f6, 0x80($sp)
|
||||
/* 0B4B30 800B3F30 92090075 */ lbu $t1, 0x75($s0)
|
||||
/* 0B4B34 800B3F34 C7A80070 */ lwc1 $f8, 0x70($sp)
|
||||
/* 0B4B38 800B3F38 000950C0 */ sll $t2, $t1, 3
|
||||
/* 0B4B3C 800B3F3C 01540019 */ multu $t2, $s4
|
||||
/* 0B4B40 800B3F40 C60A000C */ lwc1 $f10, 0xc($s0)
|
||||
/* 0B4B44 800B3F44 8E280008 */ lw $t0, 8($s1)
|
||||
/* 0B4B48 800B3F48 460A4400 */ add.s $f16, $f8, $f10
|
||||
/* 0B4B4C 800B3F4C 444CF800 */ cfc1 $t4, $31
|
||||
/* 0B4B50 800B3F50 00000000 */ nop
|
||||
/* 0B4B54 800B3F54 35810003 */ ori $at, $t4, 3
|
||||
/* 0B4B58 800B3F58 38210002 */ xori $at, $at, 2
|
||||
/* 0B4B5C 800B3F5C 44C1F800 */ ctc1 $at, $31
|
||||
/* 0B4B60 800B3F60 00000000 */ nop
|
||||
/* 0B4B64 800B3F64 460084A4 */ cvt.w.s $f18, $f16
|
||||
/* 0B4B68 800B3F68 00005812 */ mflo $t3
|
||||
/* 0B4B6C 800B3F6C 440D9000 */ mfc1 $t5, $f18
|
||||
/* 0B4B70 800B3F70 010B1821 */ addu $v1, $t0, $t3
|
||||
/* 0B4B74 800B3F74 A46D0028 */ sh $t5, 0x28($v1)
|
||||
/* 0B4B78 800B3F78 44CCF800 */ ctc1 $t4, $31
|
||||
/* 0B4B7C 800B3F7C C6060010 */ lwc1 $f6, 0x10($s0)
|
||||
/* 0B4B80 800B3F80 C7A40074 */ lwc1 $f4, 0x74($sp)
|
||||
/* 0B4B84 800B3F84 24630046 */ addiu $v1, $v1, 0x46
|
||||
/* 0B4B88 800B3F88 46062200 */ add.s $f8, $f4, $f6
|
||||
/* 0B4B8C 800B3F8C 444EF800 */ cfc1 $t6, $31
|
||||
/* 0B4B90 800B3F90 00000000 */ nop
|
||||
/* 0B4B94 800B3F94 35C10003 */ ori $at, $t6, 3
|
||||
/* 0B4B98 800B3F98 38210002 */ xori $at, $at, 2
|
||||
/* 0B4B9C 800B3F9C 44C1F800 */ ctc1 $at, $31
|
||||
/* 0B4BA0 800B3FA0 00000000 */ nop
|
||||
/* 0B4BA4 800B3FA4 460042A4 */ cvt.w.s $f10, $f8
|
||||
/* 0B4BA8 800B3FA8 440F5000 */ mfc1 $t7, $f10
|
||||
/* 0B4BAC 800B3FAC 44CEF800 */ ctc1 $t6, $31
|
||||
/* 0B4BB0 800B3FB0 A46FFFE4 */ sh $t7, -0x1c($v1)
|
||||
/* 0B4BB4 800B3FB4 C6120014 */ lwc1 $f18, 0x14($s0)
|
||||
/* 0B4BB8 800B3FB8 C7B00078 */ lwc1 $f16, 0x78($sp)
|
||||
/* 0B4BBC 800B3FBC 00000000 */ nop
|
||||
/* 0B4BC0 800B3FC0 46128100 */ add.s $f4, $f16, $f18
|
||||
/* 0B4BC4 800B3FC4 4458F800 */ cfc1 $t8, $31
|
||||
/* 0B4BC8 800B3FC8 00000000 */ nop
|
||||
/* 0B4BCC 800B3FCC 37010003 */ ori $at, $t8, 3
|
||||
/* 0B4BD0 800B3FD0 38210002 */ xori $at, $at, 2
|
||||
/* 0B4BD4 800B3FD4 44C1F800 */ ctc1 $at, $31
|
||||
/* 0B4BD8 800B3FD8 00000000 */ nop
|
||||
/* 0B4BDC 800B3FDC 460021A4 */ cvt.w.s $f6, $f4
|
||||
/* 0B4BE0 800B3FE0 44193000 */ mfc1 $t9, $f6
|
||||
/* 0B4BE4 800B3FE4 44D8F800 */ ctc1 $t8, $31
|
||||
/* 0B4BE8 800B3FE8 A479FFE6 */ sh $t9, -0x1a($v1)
|
||||
/* 0B4BEC 800B3FEC 9209006C */ lbu $t1, 0x6c($s0)
|
||||
/* 0B4BF0 800B3FF0 00000000 */ nop
|
||||
/* 0B4BF4 800B3FF4 A069FFE8 */ sb $t1, -0x18($v1)
|
||||
/* 0B4BF8 800B3FF8 920A006D */ lbu $t2, 0x6d($s0)
|
||||
/* 0B4BFC 800B3FFC 00000000 */ nop
|
||||
/* 0B4C00 800B4000 A06AFFE9 */ sb $t2, -0x17($v1)
|
||||
/* 0B4C04 800B4004 9208006E */ lbu $t0, 0x6e($s0)
|
||||
/* 0B4C08 800B4008 00000000 */ nop
|
||||
/* 0B4C0C 800B400C A068FFEA */ sb $t0, -0x16($v1)
|
||||
/* 0B4C10 800B4010 860B005C */ lh $t3, 0x5c($s0)
|
||||
/* 0B4C14 800B4014 00000000 */ nop
|
||||
/* 0B4C18 800B4018 000B6203 */ sra $t4, $t3, 8
|
||||
/* 0B4C1C 800B401C A06CFFEB */ sb $t4, -0x15($v1)
|
||||
/* 0B4C20 800B4020 C7A8007C */ lwc1 $f8, 0x7c($sp)
|
||||
/* 0B4C24 800B4024 C60A000C */ lwc1 $f10, 0xc($s0)
|
||||
/* 0B4C28 800B4028 00000000 */ nop
|
||||
/* 0B4C2C 800B402C 460A4400 */ add.s $f16, $f8, $f10
|
||||
/* 0B4C30 800B4030 444DF800 */ cfc1 $t5, $31
|
||||
/* 0B4C34 800B4034 00000000 */ nop
|
||||
/* 0B4C38 800B4038 35A10003 */ ori $at, $t5, 3
|
||||
/* 0B4C3C 800B403C 38210002 */ xori $at, $at, 2
|
||||
/* 0B4C40 800B4040 44C1F800 */ ctc1 $at, $31
|
||||
/* 0B4C44 800B4044 00000000 */ nop
|
||||
/* 0B4C48 800B4048 460084A4 */ cvt.w.s $f18, $f16
|
||||
/* 0B4C4C 800B404C 440E9000 */ mfc1 $t6, $f18
|
||||
/* 0B4C50 800B4050 44CDF800 */ ctc1 $t5, $31
|
||||
/* 0B4C54 800B4054 A46EFFEC */ sh $t6, -0x14($v1)
|
||||
/* 0B4C58 800B4058 C7A40080 */ lwc1 $f4, 0x80($sp)
|
||||
/* 0B4C5C 800B405C C6060010 */ lwc1 $f6, 0x10($s0)
|
||||
/* 0B4C60 800B4060 00000000 */ nop
|
||||
/* 0B4C64 800B4064 46062200 */ add.s $f8, $f4, $f6
|
||||
/* 0B4C68 800B4068 444FF800 */ cfc1 $t7, $31
|
||||
/* 0B4C6C 800B406C 00000000 */ nop
|
||||
/* 0B4C70 800B4070 35E10003 */ ori $at, $t7, 3
|
||||
/* 0B4C74 800B4074 38210002 */ xori $at, $at, 2
|
||||
/* 0B4C78 800B4078 44C1F800 */ ctc1 $at, $31
|
||||
/* 0B4C7C 800B407C 00000000 */ nop
|
||||
/* 0B4C80 800B4080 460042A4 */ cvt.w.s $f10, $f8
|
||||
/* 0B4C84 800B4084 44185000 */ mfc1 $t8, $f10
|
||||
/* 0B4C88 800B4088 44CFF800 */ ctc1 $t7, $31
|
||||
/* 0B4C8C 800B408C A478FFEE */ sh $t8, -0x12($v1)
|
||||
/* 0B4C90 800B4090 C7B00084 */ lwc1 $f16, 0x84($sp)
|
||||
/* 0B4C94 800B4094 C6120014 */ lwc1 $f18, 0x14($s0)
|
||||
/* 0B4C98 800B4098 00000000 */ nop
|
||||
/* 0B4C9C 800B409C 46128100 */ add.s $f4, $f16, $f18
|
||||
/* 0B4CA0 800B40A0 4459F800 */ cfc1 $t9, $31
|
||||
/* 0B4CA4 800B40A4 00000000 */ nop
|
||||
/* 0B4CA8 800B40A8 37210003 */ ori $at, $t9, 3
|
||||
/* 0B4CAC 800B40AC 38210002 */ xori $at, $at, 2
|
||||
/* 0B4CB0 800B40B0 44C1F800 */ ctc1 $at, $31
|
||||
/* 0B4CB4 800B40B4 00000000 */ nop
|
||||
/* 0B4CB8 800B40B8 460021A4 */ cvt.w.s $f6, $f4
|
||||
/* 0B4CBC 800B40BC 44093000 */ mfc1 $t1, $f6
|
||||
/* 0B4CC0 800B40C0 44D9F800 */ ctc1 $t9, $31
|
||||
/* 0B4CC4 800B40C4 A469FFF0 */ sh $t1, -0x10($v1)
|
||||
/* 0B4CC8 800B40C8 920A006C */ lbu $t2, 0x6c($s0)
|
||||
/* 0B4CCC 800B40CC 00000000 */ nop
|
||||
/* 0B4CD0 800B40D0 A06AFFF2 */ sb $t2, -0xe($v1)
|
||||
/* 0B4CD4 800B40D4 9208006D */ lbu $t0, 0x6d($s0)
|
||||
/* 0B4CD8 800B40D8 00000000 */ nop
|
||||
/* 0B4CDC 800B40DC A068FFF3 */ sb $t0, -0xd($v1)
|
||||
/* 0B4CE0 800B40E0 920B006E */ lbu $t3, 0x6e($s0)
|
||||
/* 0B4CE4 800B40E4 00000000 */ nop
|
||||
/* 0B4CE8 800B40E8 A06BFFF4 */ sb $t3, -0xc($v1)
|
||||
/* 0B4CEC 800B40EC 860C005C */ lh $t4, 0x5c($s0)
|
||||
/* 0B4CF0 800B40F0 00000000 */ nop
|
||||
/* 0B4CF4 800B40F4 000C6A03 */ sra $t5, $t4, 8
|
||||
/* 0B4CF8 800B40F8 A06DFFF5 */ sb $t5, -0xb($v1)
|
||||
/* 0B4CFC 800B40FC C608000C */ lwc1 $f8, 0xc($s0)
|
||||
/* 0B4D00 800B4100 C7AA0070 */ lwc1 $f10, 0x70($sp)
|
||||
/* 0B4D04 800B4104 00000000 */ nop
|
||||
/* 0B4D08 800B4108 460A4401 */ sub.s $f16, $f8, $f10
|
||||
/* 0B4D0C 800B410C 444EF800 */ cfc1 $t6, $31
|
||||
/* 0B4D10 800B4110 00000000 */ nop
|
||||
/* 0B4D14 800B4114 35C10003 */ ori $at, $t6, 3
|
||||
/* 0B4D18 800B4118 38210002 */ xori $at, $at, 2
|
||||
/* 0B4D1C 800B411C 44C1F800 */ ctc1 $at, $31
|
||||
/* 0B4D20 800B4120 00000000 */ nop
|
||||
/* 0B4D24 800B4124 460084A4 */ cvt.w.s $f18, $f16
|
||||
/* 0B4D28 800B4128 440F9000 */ mfc1 $t7, $f18
|
||||
/* 0B4D2C 800B412C 44CEF800 */ ctc1 $t6, $31
|
||||
/* 0B4D30 800B4130 A46FFFF6 */ sh $t7, -0xa($v1)
|
||||
/* 0B4D34 800B4134 C6040010 */ lwc1 $f4, 0x10($s0)
|
||||
/* 0B4D38 800B4138 C7A60074 */ lwc1 $f6, 0x74($sp)
|
||||
/* 0B4D3C 800B413C 00000000 */ nop
|
||||
/* 0B4D40 800B4140 46062201 */ sub.s $f8, $f4, $f6
|
||||
/* 0B4D44 800B4144 4458F800 */ cfc1 $t8, $31
|
||||
/* 0B4D48 800B4148 00000000 */ nop
|
||||
/* 0B4D4C 800B414C 37010003 */ ori $at, $t8, 3
|
||||
/* 0B4D50 800B4150 38210002 */ xori $at, $at, 2
|
||||
/* 0B4D54 800B4154 44C1F800 */ ctc1 $at, $31
|
||||
/* 0B4D58 800B4158 00000000 */ nop
|
||||
/* 0B4D5C 800B415C 460042A4 */ cvt.w.s $f10, $f8
|
||||
/* 0B4D60 800B4160 44195000 */ mfc1 $t9, $f10
|
||||
/* 0B4D64 800B4164 44D8F800 */ ctc1 $t8, $31
|
||||
/* 0B4D68 800B4168 A479FFF8 */ sh $t9, -8($v1)
|
||||
/* 0B4D6C 800B416C C6100014 */ lwc1 $f16, 0x14($s0)
|
||||
/* 0B4D70 800B4170 C7B20078 */ lwc1 $f18, 0x78($sp)
|
||||
/* 0B4D74 800B4174 00000000 */ nop
|
||||
/* 0B4D78 800B4178 46128101 */ sub.s $f4, $f16, $f18
|
||||
/* 0B4D7C 800B417C 4449F800 */ cfc1 $t1, $31
|
||||
/* 0B4D80 800B4180 00000000 */ nop
|
||||
/* 0B4D84 800B4184 35210003 */ ori $at, $t1, 3
|
||||
/* 0B4D88 800B4188 38210002 */ xori $at, $at, 2
|
||||
/* 0B4D8C 800B418C 44C1F800 */ ctc1 $at, $31
|
||||
/* 0B4D90 800B4190 00000000 */ nop
|
||||
/* 0B4D94 800B4194 460021A4 */ cvt.w.s $f6, $f4
|
||||
/* 0B4D98 800B4198 440A3000 */ mfc1 $t2, $f6
|
||||
/* 0B4D9C 800B419C 44C9F800 */ ctc1 $t1, $31
|
||||
/* 0B4DA0 800B41A0 A46AFFFA */ sh $t2, -6($v1)
|
||||
/* 0B4DA4 800B41A4 9208006C */ lbu $t0, 0x6c($s0)
|
||||
/* 0B4DA8 800B41A8 00000000 */ nop
|
||||
/* 0B4DAC 800B41AC A068FFFC */ sb $t0, -4($v1)
|
||||
/* 0B4DB0 800B41B0 920B006D */ lbu $t3, 0x6d($s0)
|
||||
/* 0B4DB4 800B41B4 00000000 */ nop
|
||||
/* 0B4DB8 800B41B8 A06BFFFD */ sb $t3, -3($v1)
|
||||
/* 0B4DBC 800B41BC 920C006E */ lbu $t4, 0x6e($s0)
|
||||
/* 0B4DC0 800B41C0 00000000 */ nop
|
||||
/* 0B4DC4 800B41C4 A06CFFFE */ sb $t4, -2($v1)
|
||||
/* 0B4DC8 800B41C8 860D005C */ lh $t5, 0x5c($s0)
|
||||
/* 0B4DCC 800B41CC 00000000 */ nop
|
||||
/* 0B4DD0 800B41D0 000D7203 */ sra $t6, $t5, 8
|
||||
/* 0B4DD4 800B41D4 A06EFFFF */ sb $t6, -1($v1)
|
||||
/* 0B4DD8 800B41D8 C7AA007C */ lwc1 $f10, 0x7c($sp)
|
||||
/* 0B4DDC 800B41DC C608000C */ lwc1 $f8, 0xc($s0)
|
||||
/* 0B4DE0 800B41E0 00000000 */ nop
|
||||
/* 0B4DE4 800B41E4 460A4401 */ sub.s $f16, $f8, $f10
|
||||
/* 0B4DE8 800B41E8 444FF800 */ cfc1 $t7, $31
|
||||
/* 0B4DEC 800B41EC 00000000 */ nop
|
||||
/* 0B4DF0 800B41F0 35E10003 */ ori $at, $t7, 3
|
||||
/* 0B4DF4 800B41F4 38210002 */ xori $at, $at, 2
|
||||
/* 0B4DF8 800B41F8 44C1F800 */ ctc1 $at, $31
|
||||
/* 0B4DFC 800B41FC 00000000 */ nop
|
||||
/* 0B4E00 800B4200 460084A4 */ cvt.w.s $f18, $f16
|
||||
/* 0B4E04 800B4204 44189000 */ mfc1 $t8, $f18
|
||||
/* 0B4E08 800B4208 44CFF800 */ ctc1 $t7, $31
|
||||
/* 0B4E0C 800B420C A4780000 */ sh $t8, ($v1)
|
||||
/* 0B4E10 800B4210 C7A60080 */ lwc1 $f6, 0x80($sp)
|
||||
/* 0B4E14 800B4214 C6040010 */ lwc1 $f4, 0x10($s0)
|
||||
/* 0B4E18 800B4218 00000000 */ nop
|
||||
/* 0B4E1C 800B421C 46062201 */ sub.s $f8, $f4, $f6
|
||||
/* 0B4E20 800B4220 4459F800 */ cfc1 $t9, $31
|
||||
/* 0B4E24 800B4224 00000000 */ nop
|
||||
/* 0B4E28 800B4228 37210003 */ ori $at, $t9, 3
|
||||
/* 0B4E2C 800B422C 38210002 */ xori $at, $at, 2
|
||||
/* 0B4E30 800B4230 44C1F800 */ ctc1 $at, $31
|
||||
/* 0B4E34 800B4234 00000000 */ nop
|
||||
/* 0B4E38 800B4238 460042A4 */ cvt.w.s $f10, $f8
|
||||
/* 0B4E3C 800B423C 44095000 */ mfc1 $t1, $f10
|
||||
/* 0B4E40 800B4240 44D9F800 */ ctc1 $t9, $31
|
||||
/* 0B4E44 800B4244 A4690002 */ sh $t1, 2($v1)
|
||||
/* 0B4E48 800B4248 C7B20084 */ lwc1 $f18, 0x84($sp)
|
||||
/* 0B4E4C 800B424C C6100014 */ lwc1 $f16, 0x14($s0)
|
||||
/* 0B4E50 800B4250 00000000 */ nop
|
||||
/* 0B4E54 800B4254 46128101 */ sub.s $f4, $f16, $f18
|
||||
/* 0B4E58 800B4258 444AF800 */ cfc1 $t2, $31
|
||||
/* 0B4E5C 800B425C 00000000 */ nop
|
||||
/* 0B4E60 800B4260 35410003 */ ori $at, $t2, 3
|
||||
/* 0B4E64 800B4264 38210002 */ xori $at, $at, 2
|
||||
/* 0B4E68 800B4268 44C1F800 */ ctc1 $at, $31
|
||||
/* 0B4E6C 800B426C 00000000 */ nop
|
||||
/* 0B4E70 800B4270 460021A4 */ cvt.w.s $f6, $f4
|
||||
/* 0B4E74 800B4274 44083000 */ mfc1 $t0, $f6
|
||||
/* 0B4E78 800B4278 44CAF800 */ ctc1 $t2, $31
|
||||
/* 0B4E7C 800B427C A4680004 */ sh $t0, 4($v1)
|
||||
/* 0B4E80 800B4280 920B006C */ lbu $t3, 0x6c($s0)
|
||||
/* 0B4E84 800B4284 00000000 */ nop
|
||||
/* 0B4E88 800B4288 A06B0006 */ sb $t3, 6($v1)
|
||||
/* 0B4E8C 800B428C 920C006D */ lbu $t4, 0x6d($s0)
|
||||
/* 0B4E90 800B4290 00000000 */ nop
|
||||
/* 0B4E94 800B4294 A06C0007 */ sb $t4, 7($v1)
|
||||
/* 0B4E98 800B4298 920D006E */ lbu $t5, 0x6e($s0)
|
||||
/* 0B4E9C 800B429C 00000000 */ nop
|
||||
/* 0B4EA0 800B42A0 A06D0008 */ sb $t5, 8($v1)
|
||||
/* 0B4EA4 800B42A4 860E005C */ lh $t6, 0x5c($s0)
|
||||
/* 0B4EA8 800B42A8 00000000 */ nop
|
||||
/* 0B4EAC 800B42AC 000E7A03 */ sra $t7, $t6, 8
|
||||
/* 0B4EB0 800B42B0 A06F0009 */ sb $t7, 9($v1)
|
||||
/* 0B4EB4 800B42B4 92190075 */ lbu $t9, 0x75($s0)
|
||||
/* 0B4EB8 800B42B8 8E380008 */ lw $t8, 8($s1)
|
||||
/* 0B4EBC 800B42BC 001948C0 */ sll $t1, $t9, 3
|
||||
/* 0B4EC0 800B42C0 01340019 */ multu $t1, $s4
|
||||
/* 0B4EC4 800B42C4 00005012 */ mflo $t2
|
||||
/* 0B4EC8 800B42C8 030A2021 */ addu $a0, $t8, $t2
|
||||
/* 0B4ECC 800B42CC 12600009 */ beqz $s3, .L800B42F4
|
||||
/* 0B4ED0 800B42D0 00801825 */ move $v1, $a0
|
||||
/* 0B4ED4 800B42D4 92AB0075 */ lbu $t3, 0x75($s5)
|
||||
/* 0B4ED8 800B42D8 8E680008 */ lw $t0, 8($s3)
|
||||
/* 0B4EDC 800B42DC 000B60C0 */ sll $t4, $t3, 3
|
||||
/* 0B4EE0 800B42E0 01940019 */ multu $t4, $s4
|
||||
/* 0B4EE4 800B42E4 00006812 */ mflo $t5
|
||||
/* 0B4EE8 800B42E8 010D1021 */ addu $v0, $t0, $t5
|
||||
/* 0B4EEC 800B42EC 10000002 */ b .L800B42F8
|
||||
/* 0B4EF0 800B42F0 24420028 */ addiu $v0, $v0, 0x28
|
||||
.L800B42F4:
|
||||
/* 0B4EF4 800B42F4 24820028 */ addiu $v0, $a0, 0x28
|
||||
.L800B42F8:
|
||||
/* 0B4EF8 800B42F8 844E0000 */ lh $t6, ($v0)
|
||||
/* 0B4EFC 800B42FC 2652FFFC */ addiu $s2, $s2, -4
|
||||
/* 0B4F00 800B4300 A46E0000 */ sh $t6, ($v1)
|
||||
/* 0B4F04 800B4304 844F0002 */ lh $t7, 2($v0)
|
||||
/* 0B4F08 800B4308 2463001E */ addiu $v1, $v1, 0x1e
|
||||
/* 0B4F0C 800B430C A46FFFE4 */ sh $t7, -0x1c($v1)
|
||||
/* 0B4F10 800B4310 84590004 */ lh $t9, 4($v0)
|
||||
/* 0B4F14 800B4314 2442001E */ addiu $v0, $v0, 0x1e
|
||||
/* 0B4F18 800B4318 A479FFE6 */ sh $t9, -0x1a($v1)
|
||||
/* 0B4F1C 800B431C 9049FFE8 */ lbu $t1, -0x18($v0)
|
||||
/* 0B4F20 800B4320 0200A825 */ move $s5, $s0
|
||||
/* 0B4F24 800B4324 A069FFE8 */ sb $t1, -0x18($v1)
|
||||
/* 0B4F28 800B4328 9058FFE9 */ lbu $t8, -0x17($v0)
|
||||
/* 0B4F2C 800B432C 02209825 */ move $s3, $s1
|
||||
/* 0B4F30 800B4330 A078FFE9 */ sb $t8, -0x17($v1)
|
||||
/* 0B4F34 800B4334 904AFFEA */ lbu $t2, -0x16($v0)
|
||||
/* 0B4F38 800B4338 00000000 */ nop
|
||||
/* 0B4F3C 800B433C A06AFFEA */ sb $t2, -0x16($v1)
|
||||
/* 0B4F40 800B4340 904BFFEB */ lbu $t3, -0x15($v0)
|
||||
/* 0B4F44 800B4344 00000000 */ nop
|
||||
/* 0B4F48 800B4348 A06BFFEB */ sb $t3, -0x15($v1)
|
||||
/* 0B4F4C 800B434C 844CFFEC */ lh $t4, -0x14($v0)
|
||||
/* 0B4F50 800B4350 00000000 */ nop
|
||||
/* 0B4F54 800B4354 A46CFFEC */ sh $t4, -0x14($v1)
|
||||
/* 0B4F58 800B4358 8448FFEE */ lh $t0, -0x12($v0)
|
||||
/* 0B4F5C 800B435C 00000000 */ nop
|
||||
/* 0B4F60 800B4360 A468FFEE */ sh $t0, -0x12($v1)
|
||||
/* 0B4F64 800B4364 844DFFF0 */ lh $t5, -0x10($v0)
|
||||
/* 0B4F68 800B4368 00000000 */ nop
|
||||
/* 0B4F6C 800B436C A46DFFF0 */ sh $t5, -0x10($v1)
|
||||
/* 0B4F70 800B4370 904EFFF2 */ lbu $t6, -0xe($v0)
|
||||
/* 0B4F74 800B4374 00000000 */ nop
|
||||
/* 0B4F78 800B4378 A06EFFF2 */ sb $t6, -0xe($v1)
|
||||
/* 0B4F7C 800B437C 904FFFF3 */ lbu $t7, -0xd($v0)
|
||||
/* 0B4F80 800B4380 00000000 */ nop
|
||||
/* 0B4F84 800B4384 A06FFFF3 */ sb $t7, -0xd($v1)
|
||||
/* 0B4F88 800B4388 9059FFF4 */ lbu $t9, -0xc($v0)
|
||||
/* 0B4F8C 800B438C 00000000 */ nop
|
||||
/* 0B4F90 800B4390 A079FFF4 */ sb $t9, -0xc($v1)
|
||||
/* 0B4F94 800B4394 9049FFF5 */ lbu $t1, -0xb($v0)
|
||||
/* 0B4F98 800B4398 00000000 */ nop
|
||||
/* 0B4F9C 800B439C A069FFF5 */ sb $t1, -0xb($v1)
|
||||
/* 0B4FA0 800B43A0 8458FFF6 */ lh $t8, -0xa($v0)
|
||||
/* 0B4FA4 800B43A4 00000000 */ nop
|
||||
/* 0B4FA8 800B43A8 A478FFF6 */ sh $t8, -0xa($v1)
|
||||
/* 0B4FAC 800B43AC 844AFFF8 */ lh $t2, -8($v0)
|
||||
/* 0B4FB0 800B43B0 00000000 */ nop
|
||||
/* 0B4FB4 800B43B4 A46AFFF8 */ sh $t2, -8($v1)
|
||||
/* 0B4FB8 800B43B8 844BFFFA */ lh $t3, -6($v0)
|
||||
/* 0B4FBC 800B43BC 00000000 */ nop
|
||||
/* 0B4FC0 800B43C0 A46BFFFA */ sh $t3, -6($v1)
|
||||
/* 0B4FC4 800B43C4 904CFFFC */ lbu $t4, -4($v0)
|
||||
/* 0B4FC8 800B43C8 00000000 */ nop
|
||||
/* 0B4FCC 800B43CC A06CFFFC */ sb $t4, -4($v1)
|
||||
/* 0B4FD0 800B43D0 9048FFFD */ lbu $t0, -3($v0)
|
||||
/* 0B4FD4 800B43D4 00000000 */ nop
|
||||
/* 0B4FD8 800B43D8 A068FFFD */ sb $t0, -3($v1)
|
||||
/* 0B4FDC 800B43DC 904DFFFE */ lbu $t5, -2($v0)
|
||||
/* 0B4FE0 800B43E0 2408FFFF */ li $t0, -1
|
||||
/* 0B4FE4 800B43E4 A06DFFFE */ sb $t5, -2($v1)
|
||||
/* 0B4FE8 800B43E8 904EFFFF */ lbu $t6, -1($v0)
|
||||
/* 0B4FEC 800B43EC 00000000 */ nop
|
||||
/* 0B4FF0 800B43F0 A06EFFFF */ sb $t6, -1($v1)
|
||||
/* 0B4FF4 800B43F4 844F0000 */ lh $t7, ($v0)
|
||||
/* 0B4FF8 800B43F8 00000000 */ nop
|
||||
/* 0B4FFC 800B43FC A46F0000 */ sh $t7, ($v1)
|
||||
/* 0B5000 800B4400 84590002 */ lh $t9, 2($v0)
|
||||
/* 0B5004 800B4404 00000000 */ nop
|
||||
/* 0B5008 800B4408 A4790002 */ sh $t9, 2($v1)
|
||||
/* 0B500C 800B440C 84490004 */ lh $t1, 4($v0)
|
||||
/* 0B5010 800B4410 00000000 */ nop
|
||||
/* 0B5014 800B4414 A4690004 */ sh $t1, 4($v1)
|
||||
/* 0B5018 800B4418 90580006 */ lbu $t8, 6($v0)
|
||||
/* 0B501C 800B441C 00000000 */ nop
|
||||
/* 0B5020 800B4420 A0780006 */ sb $t8, 6($v1)
|
||||
/* 0B5024 800B4424 904A0007 */ lbu $t2, 7($v0)
|
||||
/* 0B5028 800B4428 00000000 */ nop
|
||||
/* 0B502C 800B442C A06A0007 */ sb $t2, 7($v1)
|
||||
/* 0B5030 800B4430 904B0008 */ lbu $t3, 8($v0)
|
||||
/* 0B5034 800B4434 00000000 */ nop
|
||||
/* 0B5038 800B4438 A06B0008 */ sb $t3, 8($v1)
|
||||
/* 0B503C 800B443C 904C0009 */ lbu $t4, 9($v0)
|
||||
/* 0B5040 800B4440 00000000 */ nop
|
||||
/* 0B5044 800B4444 A06C0009 */ sb $t4, 9($v1)
|
||||
/* 0B5048 800B4448 0641FEA3 */ bgez $s2, .L800B3ED8
|
||||
/* 0B504C 800B444C A2080077 */ sb $t0, 0x77($s0)
|
||||
.L800B4450:
|
||||
/* 0B5050 800B4450 8FBF0044 */ lw $ra, 0x44($sp)
|
||||
.L800B4454:
|
||||
/* 0B5054 800B4454 C7B50018 */ lwc1 $f21, 0x18($sp)
|
||||
/* 0B5058 800B4458 C7B4001C */ lwc1 $f20, 0x1c($sp)
|
||||
/* 0B505C 800B445C 8FB00020 */ lw $s0, 0x20($sp)
|
||||
/* 0B5060 800B4460 8FB10024 */ lw $s1, 0x24($sp)
|
||||
/* 0B5064 800B4464 8FB20028 */ lw $s2, 0x28($sp)
|
||||
/* 0B5068 800B4468 8FB3002C */ lw $s3, 0x2c($sp)
|
||||
/* 0B506C 800B446C 8FB40030 */ lw $s4, 0x30($sp)
|
||||
/* 0B5070 800B4470 8FB50034 */ lw $s5, 0x34($sp)
|
||||
/* 0B5074 800B4474 8FB60038 */ lw $s6, 0x38($sp)
|
||||
/* 0B5078 800B4478 8FB7003C */ lw $s7, 0x3c($sp)
|
||||
/* 0B507C 800B447C 8FBE0040 */ lw $fp, 0x40($sp)
|
||||
/* 0B5080 800B4480 03E00008 */ jr $ra
|
||||
/* 0B5084 800B4484 27BD0090 */ addiu $sp, $sp, 0x90
|
||||
@@ -24,12 +24,6 @@ typedef struct LevelObjectEntry_Scenery {
|
||||
/* 0x0B */ u8 solid;
|
||||
} LevelObjectEntry_Scenery;
|
||||
|
||||
typedef struct LevelObjectEntry_Fish {
|
||||
/* 0x00 */ LevelObjectEntryCommon common;
|
||||
/* 0x08 */ u8 pad8[0x4];
|
||||
/* 0x0C */ u8 unkC[1]; //Unknown size
|
||||
} LevelObjectEntry_Fish;
|
||||
|
||||
typedef struct LevelObjectEntry_Animator {
|
||||
/* 0x00 */ LevelObjectEntryCommon common;
|
||||
/* 0x08 */ s8 batchID;
|
||||
@@ -430,6 +424,17 @@ typedef struct LevelObjectEntry_Butterfly {
|
||||
/* 0x0B */ u8 unkB;
|
||||
} LevelObjectEntry_Butterfly;
|
||||
|
||||
typedef struct LevelObjectEntry_Fish {
|
||||
/* 0x00 */ LevelObjectEntryCommon common;
|
||||
/* 0x08 */ u16 unk8;
|
||||
/* 0x0A */ u8 unkA;
|
||||
/* 0x0B */ u8 unkB;
|
||||
/* 0x0C */ u8 unkC;
|
||||
/* 0x0D */ u8 unkD;
|
||||
/* 0x0E */ u8 unkE;
|
||||
/* 0x0F */ u8 unkF;
|
||||
} LevelObjectEntry_Fish;
|
||||
|
||||
typedef struct LevelObjectEntry_Parkwarden {
|
||||
/* 0x00 */ LevelObjectEntryCommon common;
|
||||
} LevelObjectEntry_Parkwarden;
|
||||
|
||||
+43
-6
@@ -634,8 +634,8 @@ typedef struct LevelModelSegment {
|
||||
/* 0x08 */ s32 unk8;
|
||||
/* 0x0C */ TriangleBatchInfo *batches;
|
||||
/* 0x10 */ s16 *unk10;
|
||||
/* 0x14 */ u8 *unk14;
|
||||
/* 0x18 */ s16 *unk18;
|
||||
/* 0x14 */ u16 *unk14;
|
||||
/* 0x18 */ f32 *unk18;
|
||||
/* 0x1C */ s16 numberOfVertices;
|
||||
/* 0x1E */ s16 numberOfTriangles;
|
||||
/* 0x20 */ s16 numberOfBatches;
|
||||
@@ -1713,9 +1713,10 @@ typedef struct Object_68 {
|
||||
|
||||
/* Size: 0x20 bytes */
|
||||
typedef struct Object_6C {
|
||||
/* 0x00 */ u8 pad0[0x4];
|
||||
/* 0x00 */ struct Particle *unk0;
|
||||
/* 0x04 */ s16 unk4;
|
||||
/* 0x05 */ u8 pad6[0x4];
|
||||
/* 0x06 */ u8 unk6;
|
||||
/* 0x07 */ u8 pad7[0x3];
|
||||
/* 0x0A */ s16 unkA;
|
||||
/* 0x0C */ u8 padC[0x14];
|
||||
} Object_6C;
|
||||
@@ -1866,6 +1867,36 @@ typedef struct ObjectSegment {
|
||||
/* 0x0040 */ ObjectHeader *header;
|
||||
} ObjectSegment;
|
||||
|
||||
typedef struct Object_LightData_UnkC_Unk44 {
|
||||
u8 pad0[8];
|
||||
Vertex *unk8;
|
||||
} Object_LightData_UnkC_Unk44;
|
||||
|
||||
typedef struct Object_LightData_UnkC {
|
||||
/* 0x00 */ ObjectTransform trans;
|
||||
/* 0x18 */ u8 pad18[0x22];
|
||||
/* 0x3A */ s16 unk3A;
|
||||
/* 0x3C */ u8 pad3C[0x8];
|
||||
/* 0x44 */ Object_LightData_UnkC_Unk44 *unk44;
|
||||
/* 0x48 */ u8 pad48[0x14];
|
||||
/* 0x5C */ s16 unk5C;
|
||||
/* 0x5E */ u8 pad5E[0xE];
|
||||
/* 0x6C */ u8 unk6C;
|
||||
/* 0x6D */ u8 unk6D;
|
||||
/* 0x6E */ u8 unk6E;
|
||||
/* 0x6F */ u8 pad6F[0x6];
|
||||
/* 0x75 */ u8 unk75;
|
||||
/* 0x76 */ u8 pad76;
|
||||
/* 0x77 */ s8 unk77;
|
||||
} Object_LightData_UnkC;
|
||||
|
||||
typedef struct Object_LightData {
|
||||
/* 0x00 */ u8 pad0[6];
|
||||
/* 0x06 */ u8 unk6;
|
||||
/* 0x07 */ u8 pad7[5];
|
||||
/* 0x0C */ Object_LightData_UnkC **unkC;
|
||||
} Object_LightData;
|
||||
|
||||
/* Size: 0x0630 bytes */
|
||||
typedef struct Object {
|
||||
/* 0x0000 */ ObjectSegment segment;
|
||||
@@ -1881,7 +1912,7 @@ typedef struct Object {
|
||||
/* 0x0064 */ Object_64 *unk64; //player + 0x98
|
||||
/* 0x0068 */ Object_68 **unk68; //player + 0x80
|
||||
/* 0x006C */ Object_6C *unk6C; //player + 0x370
|
||||
/* 0x0070 */ u32 *lightData;
|
||||
/* 0x0070 */ Object_LightData **lightData;
|
||||
/* 0x0074 */ u32 unk74;
|
||||
/* 0x0078 */ ObjProperties properties;
|
||||
/* 0x0080 */ void *unk80;
|
||||
@@ -1912,7 +1943,13 @@ typedef struct GhostHeader {
|
||||
};
|
||||
s16 unk2;
|
||||
};
|
||||
s16 time; // In frames, where 60 frames = 1 second.
|
||||
union {
|
||||
struct {
|
||||
u8 unk4;
|
||||
s8 unk5;
|
||||
};
|
||||
s16 time; // In frames, where 60 frames = 1 second.
|
||||
};
|
||||
s16 nodeCount;
|
||||
} GhostHeader;
|
||||
|
||||
|
||||
+2
-2
@@ -6070,7 +6070,7 @@ s32 menu_character_select_loop(s32 updateRate) {
|
||||
phi_t3 = 0;
|
||||
if (gEnteredCharSelectFrom == 0) {
|
||||
phi_t3++;
|
||||
if ((gActiveMagicCodes << 7) < 0) {
|
||||
if (gActiveMagicCodes & CHEAT_TWO_PLAYER_ADVENTURE) {
|
||||
phi_t3++;
|
||||
}
|
||||
}
|
||||
@@ -7337,7 +7337,7 @@ s32 menu_track_select_loop(s32 updateRate) {
|
||||
if (D_801267D0 < 0) {
|
||||
func_8008F534();
|
||||
gTrackSpecifiedWithTrackIdToLoad = 0;
|
||||
if (gNumberOfActivePlayers >= 3 || (gNumberOfActivePlayers == 2 && (gActiveMagicCodes << 7) >= 0)) {
|
||||
if (gNumberOfActivePlayers >= 3 || (gNumberOfActivePlayers == 2 && !(gActiveMagicCodes & CHEAT_TWO_PLAYER_ADVENTURE))) {
|
||||
cutsceneId = 0;
|
||||
if (is_drumstick_unlocked()) {
|
||||
cutsceneId = 1;
|
||||
|
||||
+1
-1
@@ -309,7 +309,7 @@ typedef struct TitleScreenDemos {
|
||||
/* Size 0x10 bytes */
|
||||
typedef struct TrackRenderDetails {
|
||||
/* 0x00 */ char *hubName;
|
||||
/* 0x04 */ u8 *trackName;
|
||||
/* 0x04 */ char *trackName;
|
||||
/* 0x08 */ s16 xOff;
|
||||
/* 0x0A */ s16 yOff;
|
||||
/* 0x0C */ u8 visible;
|
||||
|
||||
+118
-28
@@ -36,7 +36,7 @@
|
||||
|
||||
// Unsure about the signed/unsigned with these arrays.
|
||||
FadeTransition gTajTransformTransitionEnd = FADE_TRANSITION(FADE_FULLSCREEN, FADE_FLAG_INVERT, FADE_COLOR_WHITE, 7, 3);
|
||||
FadeTransition gTajTransition = FADE_TRANSITION(FADE_FULLSCREEN, FADE_FLAG_NONE, FADE_COLOR_BLACK, 30, 0xFFFF);
|
||||
FadeTransition gTajTransition = FADE_TRANSITION(FADE_FULLSCREEN, FADE_FLAG_NONE, FADE_COLOR_BLACK, 30, -1);
|
||||
|
||||
Vertex gCharacterFlagVertices[4] = {
|
||||
{ -256, 256, 0, 255, 255, 255, 255 },
|
||||
@@ -45,31 +45,29 @@ Vertex gCharacterFlagVertices[4] = {
|
||||
{ -256, -256, 0, 255, 255, 255, 255 },
|
||||
};
|
||||
|
||||
u16 D_800DC9A8[20] = {
|
||||
0x0000, 0x0040, 0xFFC0, 0x0000,
|
||||
0xFFC0, 0xFFC0, 0x0000, 0x0040,
|
||||
0x0020, 0x0000, 0xFFC0, 0x0020,
|
||||
0x0000, 0x0040, 0x0040, 0x0000,
|
||||
0xFFC0, 0x0040, 0x0000, 0x0000,
|
||||
VertexPosition D_800DC9A8[6] = {
|
||||
{ 0, 64, -64 },
|
||||
{ 0, -64, -64 },
|
||||
{ 0, 64, 32 },
|
||||
{ 0, -64, 32 },
|
||||
{ 0, 64, 64 },
|
||||
{ 0, -64, 64 },
|
||||
};
|
||||
u16 D_800DC9D0[64] = {
|
||||
0x0000, 0x0301, 0x0004, 0x0000,
|
||||
0x0001, 0x0004, 0x0004, 0x0004,
|
||||
0x0000, 0x0203, 0x0004, 0x0000,
|
||||
0x0001, 0x0000, 0x0001, 0x0004,
|
||||
0x0002, 0x0503, 0x0001, 0x0000,
|
||||
0x0000, 0x0004, 0x0001, 0x0004,
|
||||
0x0002, 0x0405, 0x0001, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0004,
|
||||
0x0000, 0x0103, 0x0004, 0x0000,
|
||||
0x0004, 0x0004, 0x0001, 0x0004,
|
||||
0x0000, 0x0302, 0x0004, 0x0000,
|
||||
0x0001, 0x0004, 0x0001, 0x0000,
|
||||
0x0002, 0x0305, 0x0001, 0x0000,
|
||||
0x0001, 0x0004, 0x0000, 0x0004,
|
||||
0x0002, 0x0504, 0x0001, 0x0000,
|
||||
0x0000, 0x0004, 0x0000, 0x0000,
|
||||
|
||||
UNUSED s32 D_800DC9C8 = 0;
|
||||
|
||||
// Fish Object Related
|
||||
Triangle D_800DC9D0[8] = {
|
||||
{ {{ 0, 0, 3, 1 }}, {{{ 4, 0 }}}, {{{ 1, 4 }}}, {{{ 4, 4 }}} },
|
||||
{ {{ 0, 0, 2, 3 }}, {{{ 4, 0 }}}, {{{ 1, 0 }}}, {{{ 1, 4 }}} },
|
||||
{ {{ 0, 2, 5, 3 }}, {{{ 1, 0 }}}, {{{ 0, 4 }}}, {{{ 1, 4 }}} },
|
||||
{ {{ 0, 2, 4, 5 }}, {{{ 1, 0 }}}, {{{ 0, 0 }}}, {{{ 0, 4 }}} },
|
||||
{ {{ 0, 0, 1, 3 }}, {{{ 4, 0 }}}, {{{ 4, 4 }}}, {{{ 1, 4 }}} },
|
||||
{ {{ 0, 0, 3, 2 }}, {{{ 4, 0 }}}, {{{ 1, 4 }}}, {{{ 1, 0 }}} },
|
||||
{ {{ 0, 2, 3, 5 }}, {{{ 1, 0 }}}, {{{ 1, 4 }}}, {{{ 0, 4 }}} },
|
||||
{ {{ 0, 2, 5, 4 }}, {{{ 1, 0 }}}, {{{ 0, 4 }}}, {{{ 0, 0 }}} },
|
||||
};
|
||||
|
||||
u8 D_800DCA50[8] = {
|
||||
2, 5, 6, 3, 10, 8, 7, 9
|
||||
};
|
||||
@@ -104,6 +102,7 @@ s8 D_800DCA9C[12] = {
|
||||
0x00, 0x01, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
// Butterfly Object Related
|
||||
Triangle D_800DCAA8[8] = {
|
||||
{ {{ 0, 0, 3, 1 }}, {{{ 0, 0 }}}, {{{ -1, -1 }}}, {{{ 0, -1 }}} },
|
||||
{ {{ 0, 0, 2, 3 }}, {{{ 0, 0 }}}, {{{ -1, 0 }}}, {{{ -1, -1 }}} },
|
||||
@@ -1422,7 +1421,98 @@ void play_tt_voice_clip(u16 soundID, s32 interrupt) {
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef NON_EQUIVALENT
|
||||
void obj_init_fish(Object *fishObj, LevelObjectEntry_Fish *fishEntry, s32 param) {
|
||||
Object_Fish *fish;
|
||||
f32 sinsFE, cossFE, sins104, coss104;
|
||||
f32 xPos;
|
||||
f32 zPos;
|
||||
s32 uMask;
|
||||
s32 vMask;
|
||||
s32 i;
|
||||
|
||||
fish = &fishObj->unk64->fish;
|
||||
fish->unk100 = fishEntry->unkE << 4;
|
||||
fish->unk104 = fishEntry->unkF << 8;
|
||||
fish->unk114 = fishEntry->unk8;
|
||||
fish->unk118 = fishEntry->unkA;
|
||||
fish->unk108 = fishEntry->common.x;
|
||||
fish->unk10C = fishEntry->common.y;
|
||||
fish->unk110 = fishEntry->common.z;
|
||||
if (param == 0) {
|
||||
fish->unkFE = get_random_number_from_range(0, 0x10000);
|
||||
fish->unk102 = get_random_number_from_range(0, 0x10000);
|
||||
fish->unk106 = get_random_number_from_range(0, 0x10000);
|
||||
fish->unkFD = 0;
|
||||
} else {
|
||||
fish->unkFE = 0x4000;
|
||||
fishObj->segment.trans.y_rotation = fish->unk104;
|
||||
}
|
||||
sinsFE = sins_f((fish->unkFE * 2)) * fish->unk114;
|
||||
cossFE = coss_f(fish->unkFE) * fish->unk114;
|
||||
sins104 = sins_f(fish->unk104);
|
||||
coss104 = coss_f(fish->unk104);
|
||||
|
||||
fishObj->segment.trans.x_position = fish->unk108;
|
||||
xPos = (sinsFE * coss104) + (cossFE * sins104);
|
||||
|
||||
fishObj->segment.trans.z_position = fish->unk110;
|
||||
zPos = (cossFE * coss104) - (sinsFE * sins104);
|
||||
|
||||
ignore_bounds_check();
|
||||
move_object(fishObj, xPos, 0.0f, zPos);
|
||||
if (param == 0) {
|
||||
for(i = 0; i < 8; i++) {
|
||||
fish->triangles[i].flags = D_800DC9D0[i].flags;
|
||||
fish->triangles[i].vi0 = D_800DC9D0[i].vi0;
|
||||
fish->triangles[i].vi1 = D_800DC9D0[i].vi1;
|
||||
fish->triangles[i].vi2 = D_800DC9D0[i].vi2;
|
||||
}
|
||||
uMask = 0;
|
||||
for(i = 0; i < 6; i++) {
|
||||
fish->vertices[uMask].x = D_800DC9A8[uMask].x;
|
||||
fish->vertices[uMask].y = D_800DC9A8[uMask].y;
|
||||
fish->vertices[uMask].z = D_800DC9A8[uMask].z;
|
||||
fish->vertices[uMask].r = 255;
|
||||
fish->vertices[uMask].g = 255;
|
||||
fish->vertices[uMask].b = 255;
|
||||
fish->vertices[uMask].a = 255;
|
||||
fish->vertices[uMask+6].x = D_800DC9A8[uMask].x;
|
||||
fish->vertices[uMask+6].y = D_800DC9A8[uMask].y;
|
||||
fish->vertices[uMask+6].z = D_800DC9A8[uMask].z;
|
||||
fish->vertices[uMask+6].r = 255;
|
||||
fish->vertices[uMask+6].g = 255;
|
||||
fish->vertices[uMask+6].b = 255;
|
||||
fish->vertices[uMask+6].a = 255;
|
||||
uMask++;
|
||||
}
|
||||
fish->unkFC = 1;
|
||||
}
|
||||
fishObj->segment.trans.scale = fishEntry->unkC * 0.01f;
|
||||
if (fishEntry->unkB < fishObj->segment.header->numberOfModelIds) {
|
||||
fish->texture = (TextureHeader *) fishObj->unk68[fishEntry->unkB];
|
||||
} else {
|
||||
fish->texture = (TextureHeader *) fishObj->unk68[0];
|
||||
}
|
||||
if (fish->texture != NULL) {
|
||||
uMask = (fish->texture->width - 1) << 5;
|
||||
vMask = (fish->texture->height - 1) << 5;
|
||||
} else {
|
||||
uMask = 0;
|
||||
vMask = 0;
|
||||
}
|
||||
for(i = 0; i < 8; i++) {
|
||||
fish->triangles[i].uv0.u = D_800DC9D0[i].uv0.u * uMask >> 2;
|
||||
fish->triangles[i].uv0.v = D_800DC9D0[i].uv0.v * vMask >> 2;
|
||||
fish->triangles[i].uv1.u = D_800DC9D0[i].uv1.u * uMask >> 2;
|
||||
fish->triangles[i].uv1.v = D_800DC9D0[i].uv1.v * vMask >> 2;
|
||||
fish->triangles[i].uv2.u = D_800DC9D0[i].uv2.u * uMask >> 2;
|
||||
fish->triangles[i].uv2.v = D_800DC9D0[i].uv2.v * vMask >> 2;
|
||||
}
|
||||
}
|
||||
#else
|
||||
GLOBAL_ASM("asm/non_matchings/object_functions/obj_init_fish.s")
|
||||
#endif
|
||||
|
||||
void obj_loop_fish(Object *fishObj, s32 updateRate) {
|
||||
f32 zThing;
|
||||
@@ -5388,14 +5478,14 @@ void obj_init_wavegenerator(Object *obj, UNUSED LevelObjectEntry_WaveGenerator *
|
||||
func_800BF524(obj);
|
||||
}
|
||||
|
||||
void obj_init_butterfly(Object *butterflyObj, LevelObjectEntry_Butterfly *butterflyEntry, s32 arg2) {
|
||||
void obj_init_butterfly(Object *butterflyObj, LevelObjectEntry_Butterfly *butterflyEntry, s32 param) {
|
||||
Object_Butterfly *butterfly;
|
||||
s32 uMask;
|
||||
s32 vMask;
|
||||
s32 i;
|
||||
|
||||
butterfly = &butterflyObj->unk64->butterfly;
|
||||
if (arg2 == 0) {
|
||||
if (param == 0) {
|
||||
butterflyObj->segment.y_velocity = 0.0f;
|
||||
butterfly->unkFE = 0;
|
||||
butterfly->unk100 = 0;
|
||||
@@ -5431,9 +5521,9 @@ void obj_init_butterfly(Object *butterflyObj, LevelObjectEntry_Butterfly *butter
|
||||
}
|
||||
butterflyObj->segment.trans.scale = butterflyEntry->unkB * 0.01f;
|
||||
if (butterflyEntry->unkA < butterflyObj->segment.header->numberOfModelIds) {
|
||||
butterfly->texture = (TextureHeader* ) butterflyObj->unk68[butterflyEntry->unkA];
|
||||
butterfly->texture = (TextureHeader *) butterflyObj->unk68[butterflyEntry->unkA];
|
||||
} else {
|
||||
butterfly->texture = (TextureHeader* ) butterflyObj->unk68[0];
|
||||
butterfly->texture = (TextureHeader *) butterflyObj->unk68[0];
|
||||
}
|
||||
if (butterfly->texture != NULL) {
|
||||
uMask = (butterfly->texture->width - 1) << 5;
|
||||
|
||||
+10
-11
@@ -392,10 +392,10 @@ void obj_loop_fish(Object *fishObj, s32 updateRate);
|
||||
void obj_loop_weaponballoon(Object *weaponBalloonObj, s32 updateRate);
|
||||
void obj_loop_char_select(Object *charSelectObj, s32 updateRate);
|
||||
void func_8003F2E8(Object *weaponObj, s32 updateRate);
|
||||
|
||||
//Non Matching
|
||||
void obj_init_butterfly(Object *butterflyObj, LevelObjectEntry_Butterfly *butterflyEntry, s32 param);
|
||||
void obj_init_animation(Object *obj, LevelObjectEntry_Animation *entry, s32 arg2);
|
||||
void obj_init_lensflareswitch(Object *obj, LevelObjectEntry_LensFlareSwitch *entry, UNUSED s32 arg2);
|
||||
void obj_loop_lavaspurt(Object *obj, s32 updateRate);
|
||||
void obj_loop_animator(Object *obj, s32 updateRate);
|
||||
void obj_loop_vehicleanim(Object *obj, s32 updateRate);
|
||||
void obj_loop_snowball(Object *obj, s32 updateRate);
|
||||
void obj_loop_goldenballoon(Object *obj, s32 updateRate);
|
||||
@@ -403,26 +403,25 @@ void obj_loop_groundzipper(Object *obj, s32 updateRate);
|
||||
void obj_loop_laserbolt(Object *obj, s32 updateRate);
|
||||
void obj_loop_posarrow(Object *obj, s32 updateRate);
|
||||
void obj_loop_bananacreator(Object *obj, s32 updateRate);
|
||||
void obj_loop_butterfly(Object *obj, s32 updateRate);
|
||||
void obj_loop_airzippers_waterzippers(Object *obj, s32 updateRate);
|
||||
void obj_loop_texscroll(Object *obj, s32 updateRate);
|
||||
void obj_loop_exit(Object *obj, s32 updateRate);
|
||||
void obj_loop_scenery(Object *obj, s32 updateRate);
|
||||
void obj_init_midifade(Object *obj, LevelObjectEntry_MidiFade *entry);
|
||||
INCONSISTENT void obj_init_butterfly();
|
||||
void obj_init_trigger(Object *obj, LevelObjectEntry_Trigger *entry);
|
||||
INCONSISTENT void obj_init_animation();
|
||||
INCONSISTENT void obj_init_lensflareswitch();
|
||||
void obj_init_lensflare(Object *obj, LevelObjectEntry_LensFlare *entry);
|
||||
void obj_init_weaponballoon(Object *obj, LevelObjectEntry_WeaponBalloon *entry);
|
||||
void obj_init_door(Object *obj, LevelObjectEntry_Door *entry);
|
||||
void obj_init_audio(Object *obj, LevelObjectEntry_Audio *entry);
|
||||
void obj_init_bombexplosion(Object *obj, LevelObjectEntry_BombExplosion *entry);
|
||||
void obj_init_fish(Object *obj, LevelObjectEntry_Fish *entry);
|
||||
void obj_init_scenery(Object *obj, LevelObjectEntry_Scenery *entry);
|
||||
void calc_env_mapping_for_object(ObjectModel *, s16, s16, s16);
|
||||
void handle_rocket_projectile(Object *obj, s32 updateRate);
|
||||
|
||||
//Non Matching
|
||||
void calc_env_mapping_for_object(ObjectModel *, s16, s16, s16);
|
||||
void obj_init_fish(Object *obj, LevelObjectEntry_Fish *entry, s32 param);
|
||||
void obj_init_midifade(Object *obj, LevelObjectEntry_MidiFade *entry);
|
||||
void obj_loop_texscroll(Object *obj, s32 updateRate);
|
||||
void obj_loop_butterfly(Object *obj, s32 updateRate);
|
||||
void obj_loop_animator(Object *obj, s32 updateRate);
|
||||
s32 func_8001C524(f32 x, f32 y, f32 z, s32 arg3);
|
||||
s32 func_8001CC48(s32, s32, s32);
|
||||
f32 func_8001C6C4(Object_64 *, Object *, f32, f32, s32);
|
||||
|
||||
+5
-5
@@ -2582,7 +2582,7 @@ void render_3d_misc(Object *obj) {
|
||||
break;
|
||||
case BHV_FISH:
|
||||
objData = obj->unk64;
|
||||
scale = obj->segment.level_entry->fish.unkC[1];
|
||||
scale = obj->segment.level_entry->fish.unkD;
|
||||
scale *= 0.01f;
|
||||
render_misc_model(obj, &objData->fish.vertices[objData->fish.unkFC * 6], 6, objData->fish.triangles, 8, objData->fish.texture,
|
||||
RENDER_Z_COMPARE | RENDER_FOG_ACTIVE | RENDER_CUTOUT, 0, scale);
|
||||
@@ -6257,7 +6257,7 @@ void run_object_init_func(Object *obj, void *entry, s32 param) {
|
||||
obj_init_scenery(obj, (LevelObjectEntry_Scenery*) entry);
|
||||
break;
|
||||
case BHV_FISH:
|
||||
obj_init_fish(obj, (LevelObjectEntry_Fish *) entry);
|
||||
obj_init_fish(obj, (LevelObjectEntry_Fish *) entry, param);
|
||||
break;
|
||||
case BHV_ANIMATOR:
|
||||
obj_init_animator(obj, (LevelObjectEntry_Animator *) entry, param);
|
||||
@@ -6364,7 +6364,7 @@ void run_object_init_func(Object *obj, void *entry, s32 param) {
|
||||
obj_init_lensflare(obj, (LevelObjectEntry_LensFlare *) entry);
|
||||
break;
|
||||
case BHV_LENS_FLARE_SWITCH:
|
||||
obj_init_lensflareswitch(obj, (LevelObjectEntry_LensFlareSwitch *) entry);
|
||||
obj_init_lensflareswitch(obj, (LevelObjectEntry_LensFlareSwitch *) entry, param);
|
||||
break;
|
||||
case BHV_COLLECT_EGG:
|
||||
obj_init_collectegg(obj, (LevelObjectEntry_CollectEgg *) entry);
|
||||
@@ -6376,7 +6376,7 @@ void run_object_init_func(Object *obj, void *entry, s32 param) {
|
||||
obj_init_characterflag(obj, (LevelObjectEntry_CharacterFlag *) entry);
|
||||
break;
|
||||
case BHV_ANIMATION:
|
||||
obj_init_animation(obj, (LevelObjectEntry_Animation *) entry);
|
||||
obj_init_animation(obj, (LevelObjectEntry_Animation *) entry, param);
|
||||
break;
|
||||
case BHV_INFO_POINT:
|
||||
obj_init_infopoint(obj, (LevelObjectEntry_InfoPoint *) entry);
|
||||
@@ -6395,7 +6395,7 @@ void run_object_init_func(Object *obj, void *entry, s32 param) {
|
||||
obj_init_wavegenerator(obj, (LevelObjectEntry_WaveGenerator *) entry, param);
|
||||
break;
|
||||
case BHV_BUTTERFLY:
|
||||
obj_init_butterfly(obj, (LevelObjectEntry_Butterfly *) entry);
|
||||
obj_init_butterfly(obj, (LevelObjectEntry_Butterfly *) entry, param);
|
||||
break;
|
||||
case BHV_PARK_WARDEN:
|
||||
obj_init_parkwarden(obj, (LevelObjectEntry_Parkwarden *) entry);
|
||||
|
||||
+182
-2
@@ -577,8 +577,67 @@ void func_800AF6E4(Object *obj, s32 arg1) {
|
||||
}
|
||||
|
||||
GLOBAL_ASM("asm/non_matchings/particles/func_800AF714.s")
|
||||
GLOBAL_ASM("asm/non_matchings/particles/func_800AFC3C.s")
|
||||
|
||||
void func_800AFC3C(Object *obj, s32 updateRate) {
|
||||
Object_6C *temp_s1;
|
||||
Object_6C *temp_s1_2;
|
||||
s32 var_s0;
|
||||
s32 i;
|
||||
UNUSED s32 pad;
|
||||
s32 var_a3;
|
||||
u32 bits;
|
||||
|
||||
bits = obj->unk74;
|
||||
var_a3 = obj->segment.header->unk57;
|
||||
for(i = 0; i < var_a3; i++) {
|
||||
if (bits & 1) {
|
||||
if (!(obj->unk6C[i].unk4 & 0x8000)) {
|
||||
func_800AF52C(obj, i);
|
||||
}
|
||||
if (obj->unk6C[i].unk4 & 0x4000) {
|
||||
func_800AFE5C((Particle *) obj, (Particle *) &obj->unk6C[i]);
|
||||
} else if((obj->unk6C[i].unk4 & 0x400)) {
|
||||
func_800AFE5C((Particle *) obj, (Particle *) &obj->unk6C[i]);
|
||||
} else {
|
||||
obj->unk6C[i].unkA += updateRate;
|
||||
if (obj->unk6C[i].unkA >= obj->unk6C[i].unk0->segment.unk40_s16) {
|
||||
func_800AFE5C((Particle *) obj, (Particle *) &obj->unk6C[i]);
|
||||
}
|
||||
}
|
||||
var_a3 = obj->segment.header->unk57;
|
||||
} else {
|
||||
if (obj->unk6C[i].unk4 & 0x8000) {
|
||||
if (obj->unk6C[i].unk4 & 0x4000) {
|
||||
temp_s1 = &obj->unk6C[i];
|
||||
var_s0 = temp_s1->unk6 - 0x40;
|
||||
if (var_s0 < 0) {
|
||||
var_s0 = 0;
|
||||
}
|
||||
temp_s1->unk6 = var_s0;
|
||||
func_800AFE5C((Particle *) obj, (Particle *) temp_s1);
|
||||
temp_s1->unk6 = var_s0;
|
||||
if (var_s0 == 0) {
|
||||
func_800AF6E4(obj, i);
|
||||
}
|
||||
var_a3 = obj->segment.header->unk57;
|
||||
} else if((obj->unk6C[i].unk4 & 0x400)) {
|
||||
temp_s1_2 = &obj->unk6C[i];
|
||||
obj->unk6C[i].unk4 |= 0x200;
|
||||
if (temp_s1_2->unk6 == 0) {
|
||||
func_800AF6E4(obj, i);
|
||||
}
|
||||
var_a3 = obj->segment.header->unk57;
|
||||
} else {
|
||||
func_800AF6E4(obj, i);
|
||||
var_a3 = obj->segment.header->unk57;
|
||||
}
|
||||
}
|
||||
}
|
||||
bits >>= 1;
|
||||
}
|
||||
}
|
||||
|
||||
//TODO: Should this be void func_800AFE5C(Object *arg0, Object_6C *arg1)?
|
||||
void func_800AFE5C(Particle *arg0, Particle *arg1) {
|
||||
Particle *temp_s0;
|
||||
Particle *tempObj;
|
||||
@@ -1647,7 +1706,128 @@ void render_particle(Particle *particle, Gfx **dList, MatrixS **mtx, Vertex **vt
|
||||
}
|
||||
}
|
||||
|
||||
GLOBAL_ASM("asm/non_matchings/particles/func_800B3E64.s")
|
||||
void func_800B3E64(Object *obj) {
|
||||
UNUSED s32 pad;
|
||||
s32 index;
|
||||
Vec3f vec3_1;
|
||||
Vec3f vec3_0;
|
||||
Object_LightData_UnkC *temp_s0;
|
||||
Object_LightData_UnkC *prev_s0;
|
||||
Object_LightData *lightData;
|
||||
Object_LightData_UnkC_Unk44 *temp_s1;
|
||||
Vertex *otherVerts;
|
||||
Vertex *verts;
|
||||
Object_LightData_UnkC_Unk44 *prev_s1;
|
||||
|
||||
lightData = (Object_LightData *) obj->lightData;
|
||||
prev_s0 = NULL;
|
||||
prev_s1 = NULL;
|
||||
if (lightData != NULL) {
|
||||
if (lightData->unkC != NULL) {
|
||||
index = (lightData->unk6 - 1);
|
||||
while (index >= 0) {
|
||||
temp_s0 = lightData->unkC[index];
|
||||
if (temp_s0->unk3A != 0) {
|
||||
temp_s1 = temp_s0->unk44;
|
||||
vec3_0.f[0] = temp_s0->trans.scale;
|
||||
vec3_0.f[1] = 0.0f;
|
||||
vec3_0.f[2] = 0.0f;
|
||||
f32_vec3_apply_object_rotation(&temp_s0->trans, &vec3_0.f[0]);
|
||||
vec3_1.f[0] = 0.0f;
|
||||
vec3_1.f[1] = temp_s0->trans.scale;
|
||||
vec3_1.f[2] = 0.0f;
|
||||
f32_vec3_apply_object_rotation(&temp_s0->trans, &vec3_1.f[0]);
|
||||
|
||||
// It seems super odd to do negative indices. Why not just increment by 4 and add up from there?
|
||||
verts = &temp_s1->unk8[temp_s0->unk75 << 3];
|
||||
if (1) { } if (1) { } if (1) { } if (1) { } if (1) { } if (1) { } // Fake
|
||||
verts += 7;
|
||||
verts[-3].x = temp_s0->trans.x_position + vec3_0.f[0];
|
||||
verts[-3].y = temp_s0->trans.y_position + vec3_0.f[1];
|
||||
verts[-3].z = temp_s0->trans.z_position + vec3_0.f[2];
|
||||
verts[-3].r = temp_s0->unk6C;
|
||||
verts[-3].g = temp_s0->unk6D;
|
||||
verts[-3].b = temp_s0->unk6E;
|
||||
verts[-3].a = temp_s0->unk5C >> 8;
|
||||
verts[-2].x = temp_s0->trans.x_position + vec3_1.f[0];
|
||||
verts[-2].y = temp_s0->trans.y_position + vec3_1.f[1];
|
||||
verts[-2].z = temp_s0->trans.z_position + vec3_1.f[2];
|
||||
verts[-2].r = temp_s0->unk6C;
|
||||
verts[-2].g = temp_s0->unk6D;
|
||||
verts[-2].b = temp_s0->unk6E;
|
||||
verts[-2].a = temp_s0->unk5C >> 8;
|
||||
verts[-1].x = temp_s0->trans.x_position - vec3_0.f[0];
|
||||
verts[-1].y = temp_s0->trans.y_position - vec3_0.f[1];
|
||||
verts[-1].z = temp_s0->trans.z_position - vec3_0.f[2];
|
||||
verts[-1].r = temp_s0->unk6C;
|
||||
verts[-1].g = temp_s0->unk6D;
|
||||
verts[-1].b = temp_s0->unk6E;
|
||||
verts[-1].a = temp_s0->unk5C >> 8;
|
||||
verts[0].x = temp_s0->trans.x_position - vec3_1.f[0];
|
||||
verts[0].y = temp_s0->trans.y_position - vec3_1.f[1];
|
||||
verts[0].z = temp_s0->trans.z_position - vec3_1.f[2];
|
||||
verts[0].r = temp_s0->unk6C;
|
||||
verts[0].g = temp_s0->unk6D;
|
||||
verts[0].b = temp_s0->unk6E;
|
||||
verts[0].a = temp_s0->unk5C >> 8;
|
||||
|
||||
verts = &temp_s1->unk8[temp_s0->unk75 << 3];
|
||||
if (prev_s1 != NULL) {
|
||||
if(1) { // Fake
|
||||
otherVerts = &prev_s1->unk8[prev_s0->unk75 << 3];
|
||||
}
|
||||
otherVerts += 4;
|
||||
} else {
|
||||
otherVerts = &temp_s1->unk8[temp_s0->unk75 << 3];
|
||||
otherVerts += 4;
|
||||
}
|
||||
|
||||
|
||||
index--;
|
||||
verts += 3;
|
||||
otherVerts += 3;
|
||||
|
||||
prev_s0 = temp_s0;
|
||||
prev_s1 = temp_s1;
|
||||
|
||||
verts[-3].x = otherVerts[-3].x;
|
||||
verts[-3].y = otherVerts[-3].y;
|
||||
verts[-3].z = otherVerts[-3].z;
|
||||
verts[-3].r = otherVerts[-3].r;
|
||||
verts[-3].g = otherVerts[-3].g;
|
||||
verts[-3].b = otherVerts[-3].b;
|
||||
verts[-3].a = otherVerts[-3].a;
|
||||
verts[-2].x = otherVerts[-2].x;
|
||||
verts[-2].y = otherVerts[-2].y;
|
||||
verts[-2].z = otherVerts[-2].z;
|
||||
verts[-2].r = otherVerts[-2].r;
|
||||
verts[-2].g = otherVerts[-2].g;
|
||||
verts[-2].b = otherVerts[-2].b;
|
||||
verts[-2].a = otherVerts[-2].a;
|
||||
verts[-1].x = otherVerts[-1].x;
|
||||
verts[-1].y = otherVerts[-1].y;
|
||||
verts[-1].z = otherVerts[-1].z;
|
||||
verts[-1].r = otherVerts[-1].r;
|
||||
verts[-1].g = otherVerts[-1].g;
|
||||
verts[-1].b = otherVerts[-1].b;
|
||||
verts[-1].a = otherVerts[-1].a;
|
||||
verts[0].x = otherVerts[0].x;
|
||||
verts[0].y = otherVerts[0].y;
|
||||
verts[0].z = otherVerts[0].z;
|
||||
verts[0].r = otherVerts[0].r;
|
||||
verts[0].g = otherVerts[0].g;
|
||||
verts[0].b = otherVerts[0].b;
|
||||
verts[0].a = otherVerts[0].a;
|
||||
|
||||
temp_s0->unk77 = -1;
|
||||
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a specific particle asset table from the main table.
|
||||
|
||||
+9
-3
@@ -137,7 +137,13 @@ typedef struct ParticleSegment {
|
||||
SegmentPropertiesCamera camera;
|
||||
};
|
||||
/* 0x003C */ void *unk3C;
|
||||
/* 0x0040 */ s32 unk40;
|
||||
union {
|
||||
struct {
|
||||
/* 0x0040 */ s16 unk40_s16;
|
||||
/* 0x0042 */ s16 unk42;
|
||||
};
|
||||
s32 unk40;
|
||||
};
|
||||
} ParticleSegment;
|
||||
|
||||
typedef struct ParticleModel {
|
||||
@@ -231,9 +237,10 @@ void func_800AF134(Particle *arg0, s32 arg1, s32 arg2, s16 arg3, s16 arg4, s16 a
|
||||
void render_particle(Particle *particle, Gfx **dList, MatrixS **mtx, Vertex **vtx, s32 flags);
|
||||
void func_800B4668(Object *obj, s32 idx, s32 arg2, s32 arg3);
|
||||
void func_800B46BC(Object *obj, s32 idx, s32 arg2, s32 arg3);
|
||||
void func_800AFC3C(Object *obj, s32 updateRate);
|
||||
void func_800B3E64(Object *obj);
|
||||
|
||||
void func_800AF404(s32 arg0); // Non Matching
|
||||
void func_800AFC3C(Object *, s32); // Non Matching
|
||||
void func_800AE728(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5); // Non Matching
|
||||
void func_800AF714(Object*, s32); // Non matching
|
||||
Particle *func_800B0BAC();
|
||||
@@ -243,6 +250,5 @@ void move_particle_velocity_parent(Particle *);
|
||||
void move_particle_with_velocities(Particle *);
|
||||
void move_particle_basic(Particle *);
|
||||
void move_particle_with_velocity(Particle *);
|
||||
void func_800B3E64(Object *); // Non Matching
|
||||
|
||||
#endif
|
||||
|
||||
+1
-1
@@ -5623,7 +5623,7 @@ s32 func_800599B8(s32 arg0, s32 mapId, s16 arg2, s16 *arg3, s16 *arg4) {
|
||||
s16 sp2E;
|
||||
|
||||
temp_t8 = (D_8011D59C + 1) & 1;
|
||||
temp_v0 = func_80074B34(arg0, (s16)mapId, arg2, arg3, arg4, &sp2E, (GhostHeader *) gGhostData[temp_t8]);
|
||||
temp_v0 = func_80074B34(arg0, (s16) mapId, arg2, arg3, arg4, &sp2E, (GhostHeader *) gGhostData[temp_t8]);
|
||||
if (arg3 != 0) {
|
||||
if (temp_v0 == 0) {
|
||||
D_8011D5A0[temp_t8] = sp2E;
|
||||
|
||||
+101
-49
@@ -1146,21 +1146,33 @@ s32 get_ghost_data_file_size(void) {
|
||||
}
|
||||
|
||||
#ifdef NON_EQUIVALENT
|
||||
s32 func_80074B34(s32 controllerIndex, s16 levelId, s16 vehicleId, s16 *ghostCharacterId, s16 *ghostTime, s16 *ghostNodeCount, GhostHeader *ghostData) {
|
||||
typedef struct unkGhostData {
|
||||
u8 unk0;
|
||||
u8 unk1;
|
||||
s16 unk2;
|
||||
u8 unk4;
|
||||
u8 unk5;
|
||||
s16 unk6;
|
||||
u8 unk8;
|
||||
u8 unk9;
|
||||
u8 unkA;
|
||||
u8 unkB;
|
||||
u8 unkC;
|
||||
} unkGhostData;
|
||||
s32 func_80074B34(s32 controllerIndex, s16 levelId, s16 vehicleId, u16 *ghostCharacterId, s16 *ghostTime, s16 *ghostNodeCount, GhostHeader *ghostData) {
|
||||
#define GHSS_FILE_SIZE 0x100
|
||||
u8 *fileData;
|
||||
static OSPfs *pfs; //Maybe static?
|
||||
s32 i;
|
||||
u8 *cPakFile;
|
||||
s32 bytesFree;
|
||||
s32 fileNumber;
|
||||
s32 notesFree;
|
||||
s32 fileOffset;
|
||||
s32 fileSize;
|
||||
s32 bytesFree;
|
||||
s32 notesFree;
|
||||
s32 ret;
|
||||
s32 retTemp;
|
||||
s32 var_v1;
|
||||
u8 *temp_a1;
|
||||
GhostHeader *ghostHeader;
|
||||
u8 *var_v0_2;
|
||||
u8 *temp_v0_4;
|
||||
SIDeviceStatus ret;
|
||||
SIDeviceStatus retTemp;
|
||||
GhostHeader *fileData;
|
||||
unkGhostData *temp_v0_4;
|
||||
|
||||
fileOffset = 0;
|
||||
ret = get_si_device_status(controllerIndex);
|
||||
@@ -1174,46 +1186,42 @@ s32 func_80074B34(s32 controllerIndex, s16 levelId, s16 vehicleId, s16 *ghostCha
|
||||
}
|
||||
ret = get_file_number(controllerIndex, (char *) sDKRacingGhosts, (char *) sDKRacingGhostFileExt, &fileNumber);
|
||||
if (ret == CONTROLLER_PAK_GOOD) {
|
||||
fileData = allocate_from_main_pool_safe(GHSS_FILE_SIZE, COLOUR_TAG_BLACK);
|
||||
if (!(pfs[controllerIndex].status & PFS_INITIALIZED)) {
|
||||
osPfsInit(sControllerMesgQueue, &pfs[controllerIndex], controllerIndex);
|
||||
cPakFile = allocate_from_main_pool_safe(GHSS_FILE_SIZE, COLOUR_TAG_BLACK);
|
||||
pfs = &pfs[controllerIndex]; //This should be uninintialized?
|
||||
if (!(pfs->status & PFS_INITIALIZED)) {
|
||||
osPfsInit(sControllerMesgQueue, &pfs, controllerIndex);
|
||||
}
|
||||
ret = read_data_from_controller_pak(controllerIndex, fileNumber, fileData, GHSS_FILE_SIZE);
|
||||
ret = read_data_from_controller_pak(controllerIndex, fileNumber, cPakFile, GHSS_FILE_SIZE);
|
||||
if (ret == CONTROLLER_PAK_GOOD) {
|
||||
temp_a1 = fileData + 4;
|
||||
if (fileData[0] == GHSS) {
|
||||
var_v1 = 0;
|
||||
var_v0_2 = temp_a1;
|
||||
loop_10:
|
||||
var_v1 += 4;
|
||||
if ((levelId == var_v0_2[0]) && (vehicleId == var_v0_2[1])) {
|
||||
fileOffset = var_v0_2[2];
|
||||
fileSize = var_v0_2[6] - var_v0_2[2];
|
||||
} else {
|
||||
var_v0_2 += 4;
|
||||
if (var_v1 < 24) {
|
||||
goto loop_10;
|
||||
//The first 4 bytes of any data from the controller pak will have initials declaring it's type.
|
||||
if (*((s32 *)cPakFile) == GHSS) {
|
||||
fileData = (GhostHeader *) (cPakFile + 4);
|
||||
for (i = 0; i < 5; i++) {
|
||||
if (levelId == fileData[i].unk0.levelID && vehicleId == fileData[i].unk0.vehicleID) {
|
||||
fileOffset = fileData[i].unk2;
|
||||
fileSize = fileData[i].nodeCount - fileData[i].unk2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (fileOffset == 0) {
|
||||
ret = CONTROLLER_PAK_NO_ROOM_FOR_GHOSTS;
|
||||
if (fileData[4] == 0xFF) {
|
||||
if (fileData->unk0.levelID == 0xFF) {
|
||||
ret = CONTROLLER_PAK_SWITCH_TO_RUMBLE;
|
||||
}
|
||||
temp_v0_4 = temp_a1 + (2 * 4);
|
||||
if (fileData[4] == 0xFF) {
|
||||
if (fileData->unk4 == 0xFF) {
|
||||
ret = CONTROLLER_PAK_SWITCH_TO_RUMBLE;
|
||||
}
|
||||
if (temp_v0_4[0] == 0xFF) {
|
||||
temp_v0_4 = (unkGhostData *) (fileData + 1);
|
||||
if (temp_v0_4->unk0 == 0xFF) {
|
||||
ret = CONTROLLER_PAK_SWITCH_TO_RUMBLE;
|
||||
}
|
||||
if (temp_v0_4[4] == 0xFF) {
|
||||
if (temp_v0_4->unk4 == 0xFF) {
|
||||
ret = CONTROLLER_PAK_SWITCH_TO_RUMBLE;
|
||||
}
|
||||
if (temp_v0_4[8] == 0xFF) {
|
||||
if (temp_v0_4->unk8 == 0xFF) {
|
||||
ret = CONTROLLER_PAK_SWITCH_TO_RUMBLE;
|
||||
}
|
||||
if (temp_v0_4[12] == 0xFF) {
|
||||
if (temp_v0_4->unkC == 0xFF) {
|
||||
ret = CONTROLLER_PAK_SWITCH_TO_RUMBLE;
|
||||
}
|
||||
}
|
||||
@@ -1221,23 +1229,24 @@ loop_10:
|
||||
ret = CONTROLLER_PAK_BAD_DATA;
|
||||
}
|
||||
}
|
||||
free_from_memory_pool(fileData);
|
||||
free_from_memory_pool(cPakFile);
|
||||
if (fileOffset != 0) {
|
||||
if (ghostCharacterId != NULL) {
|
||||
ghostHeader = allocate_from_main_pool_safe(fileSize + GHSS_FILE_SIZE, COLOUR_TAG_BLACK);
|
||||
cPakFile = allocate_from_main_pool_safe(fileSize + GHSS_FILE_SIZE, COLOUR_TAG_BLACK);
|
||||
retTemp = CONTROLLER_PAK_BAD_DATA;
|
||||
if (osPfsReadWriteFile(&pfs[controllerIndex], fileNumber, PFS_READ, fileOffset, fileSize, (u8 *) ghostHeader) == 0) {
|
||||
if (calculate_ghost_header_checksum(ghostHeader) == ghostHeader->checksum) {
|
||||
*ghostCharacterId = ghostHeader->characterID;
|
||||
*ghostTime = ghostHeader->time;
|
||||
*ghostNodeCount = ghostHeader->nodeCount;
|
||||
bcopy(ghostHeader + 8, ghostData, *ghostNodeCount * sizeof(GhostNode));
|
||||
if (osPfsReadWriteFile(pfs, fileNumber, PFS_READ, fileOffset, fileSize, cPakFile) == 0) {
|
||||
fileData = (GhostHeader *) cPakFile;
|
||||
if (calculate_ghost_header_checksum(fileData) == fileData->checksum) {
|
||||
*ghostCharacterId = fileData->characterID;
|
||||
*ghostTime = fileData->time;
|
||||
*ghostNodeCount = fileData->nodeCount;
|
||||
bcopy(fileData, ghostData, *ghostNodeCount * sizeof(GhostNode));
|
||||
retTemp = CONTROLLER_PAK_GOOD;
|
||||
} else {
|
||||
retTemp = CONTROLLER_PAK_BAD_DATA;
|
||||
}
|
||||
}
|
||||
free_from_memory_pool(ghostHeader);
|
||||
free_from_memory_pool(cPakFile);
|
||||
ret = retTemp;
|
||||
}
|
||||
}
|
||||
@@ -1248,13 +1257,13 @@ loop_10:
|
||||
start_reading_controller_data(controllerIndex);
|
||||
if (ret == CONTROLLER_PAK_CHANGED) {
|
||||
if (get_free_space(controllerIndex, &bytesFree, ¬esFree) == CONTROLLER_PAK_GOOD) {
|
||||
if ((bytesFree < get_ghost_data_file_size()) || ((notesFree == 0))) {
|
||||
if (bytesFree < get_ghost_data_file_size() || notesFree == 0) {
|
||||
return CONTROLLER_PAK_FULL;
|
||||
}
|
||||
/* Duplicate return node #48. Try simplifying control flow for better match */
|
||||
return ret;
|
||||
}
|
||||
return CONTROLLER_PAK_BAD_DATA;
|
||||
else {
|
||||
return CONTROLLER_PAK_BAD_DATA;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
@@ -1307,7 +1316,50 @@ typedef struct GhostData {
|
||||
/* 0x1E */ s16 unk1E;
|
||||
} GhostData;
|
||||
|
||||
#ifdef NON_EQUIVALENT
|
||||
//This is just a mess until we can figure out the ghost data structs properly.
|
||||
SIDeviceStatus func_80074EB8(s32 controllerIndex, s16 arg1, s16 arg2, s16 ghostCharacterId, s16 ghostTime, s16 ghostNodeCount, u8 *dest) {
|
||||
#define GHSS_FILE_SIZE 0x100
|
||||
SIDeviceStatus ret;
|
||||
s32 fileSize;
|
||||
u8 *temp_v0_3;
|
||||
GhostDataData *temp_v0_4;
|
||||
void *temp_v0_5;
|
||||
GhostHeader *temp_v1;
|
||||
GhostHeader *ghost;
|
||||
|
||||
fileSize = 0x1100 * 6;
|
||||
temp_v0_3 = allocate_from_main_pool_safe(fileSize + 0x200, COLOUR_TAG_BLACK);
|
||||
*((s32 *)temp_v0_3) = GHSS;
|
||||
ghost = (GhostHeader *) (temp_v0_3 + 4);
|
||||
//temp_v0_3->unk0 = GHSS;
|
||||
ghost->unk0.levelID = arg1;
|
||||
ghost->nodeCount = 0x100;
|
||||
temp_v1 = ghost + 4;
|
||||
//ghost->unkA = (s16) (ghost->nodeCount + 0x1100);
|
||||
ghost->unk5 = arg2;
|
||||
temp_v0_4 = temp_v1 + 4;
|
||||
temp_v0_4->unk0 = 0xFF;
|
||||
temp_v0_4->unk4 = 0xFF;
|
||||
temp_v0_4->unk2 = (s16) temp_v1->time;
|
||||
temp_v0_4->unk6 = (s16) temp_v1->time;
|
||||
// temp_v0_5 = temp_v1 + (3 * 4);
|
||||
// temp_v0_5->unk0 = 0xFF;
|
||||
// temp_v0_5->unk4 = 0xFF;
|
||||
// temp_v0_5->unk2 = (s16) temp_v1->time;
|
||||
// temp_v0_5->unk8 = 0xFF;
|
||||
// temp_v0_5->unk6 = (s16) temp_v1->time;
|
||||
// temp_v0_5->unkC = 0xFF;
|
||||
// temp_v0_5->unkA = (s16) temp_v1->time;
|
||||
// temp_v0_5->unkE = (s16) temp_v1->time;
|
||||
func_80074AA8((GhostHeader *) &ghost[temp_v1->unk2], ghostCharacterId, ghostTime, ghostNodeCount, dest);
|
||||
ret = write_controller_pak_file(controllerIndex, -1, "DKRACING-GHOSTS", "", (u8 *) ghost, fileSize + GHSS_FILE_SIZE);
|
||||
free_from_memory_pool(ghost);
|
||||
return ret;
|
||||
}
|
||||
#else
|
||||
GLOBAL_ASM("asm/non_matchings/save_data/func_80074EB8.s")
|
||||
#endif
|
||||
|
||||
#ifdef NON_EQUIVALENT
|
||||
SIDeviceStatus func_80075000(s32 controllerIndex, s16 levelId, s16 vehicleId, s16 ghostCharacterId, s16 ghostTime, s16 ghostNodeCount, GhostHeader *ghostData) {
|
||||
@@ -1990,7 +2042,7 @@ SIDeviceStatus write_controller_pak_file(s32 controllerIndex, s32 fileNumber, ch
|
||||
u8 fileNameAsFontCodes[PFS_FILE_NAME_LEN];
|
||||
UNUSED s32 temp2;
|
||||
u8 fileExtAsFontCodes[PFS_FILE_EXT_LEN];
|
||||
s32 ret;
|
||||
SIDeviceStatus ret;
|
||||
s32 file_number;
|
||||
s32 bytesToSave;
|
||||
u32 game_code;
|
||||
|
||||
+2
-2
@@ -114,11 +114,11 @@ void func_800732E8(Settings *settings, u8 *saveData);
|
||||
void func_800738A4(Settings *settings, u8 *saveData);
|
||||
|
||||
//Using some context, and best guesses, these could be the names of the variables
|
||||
s32 func_80074B34(s32 controllerIndex, s16 levelId, s16 vehicleId, s16 *ghostCharacterId, s16 *ghostTime, s16 *ghostNodeCount, GhostHeader *ghostData); //Non matching
|
||||
s32 func_80074B34(s32 controllerIndex, s16 levelId, s16 vehicleId, u16 *ghostCharacterId, s16 *ghostTime, s16 *ghostNodeCount, GhostHeader *ghostData); //Non matching
|
||||
char *string_to_font_codes(char *inString, char *outString, s32 stringLength);
|
||||
|
||||
//Reasonably certain about these names for now.
|
||||
s32 func_80074EB8(s32 controllerIndex, s16 arg1, s16 arg2, s16 ghostCharacterId, s16 ghostTime, s16 ghostNodeCount, u8 *dest);
|
||||
SIDeviceStatus func_80074EB8(s32 controllerIndex, s16 arg1, s16 arg2, s16 ghostCharacterId, s16 ghostTime, s16 ghostNodeCount, u8 *dest);
|
||||
SIDeviceStatus func_80075000(s32 controllerIndex, s16 arg1, s16 arg2, s16 ghostCharacterId, s16 ghostTime, s16 ghostNodeCount, GhostHeader *arg6);
|
||||
s32 func_800753D8(s32 controllerIndex, s32 arg1);
|
||||
|
||||
|
||||
+137
-2
@@ -1677,7 +1677,142 @@ s32 func_8002B9BC(Object *obj, f32 *arg1, f32 *arg2, s32 arg3) {
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef NON_MATCHING
|
||||
// Collision: Returns the Y Values in yOut, and the number of values in the array as the return.
|
||||
// Get's the Y Offset acrross a surface.
|
||||
// Basically it goes down, finds a triangle, then locates where the intersection is and returns the Y level of that.
|
||||
s32 func_8002BAB0(s32 levelSegmentIndex, f32 xIn, f32 zIn, f32 *yOut) {
|
||||
LevelModelSegment *currentSegment;
|
||||
LevelModelSegmentBoundingBox *currentBoundingBox;
|
||||
Triangle *tri;
|
||||
Vertex *vert;
|
||||
f32 temp_f2_2;
|
||||
s16 vert2X;
|
||||
s16 vert2Z;
|
||||
s16 temp_a2;
|
||||
s16 vert3X;
|
||||
s16 vert3Z;
|
||||
s32 currentVerticesOffset;
|
||||
s16 nextFaceOffset;
|
||||
s16 vert1X;
|
||||
s16 currentFaceOffset;
|
||||
s16 vert1Z;
|
||||
s16 var_a1;
|
||||
s32 faceNum;
|
||||
s16 var_s1;
|
||||
s16 var_t0;
|
||||
s16 var_t1;
|
||||
s32 XInInt;
|
||||
s32 ZInInt;
|
||||
s32 temp_ra_1;
|
||||
s32 temp_ra_2;
|
||||
s32 temp_ra_3;
|
||||
s32 yOutCount;
|
||||
s32 batchNum;
|
||||
s32 i;
|
||||
s32 var_v0;
|
||||
s32 stopSorting;
|
||||
TriangleBatchInfo *currentBatch;
|
||||
f32 *temp_v1_4;
|
||||
Vec4f tempVec4f;
|
||||
u16 *new_var;
|
||||
u16 temp;
|
||||
|
||||
if (levelSegmentIndex < 0 || levelSegmentIndex >= gCurrentLevelModel->numberOfSegments) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// if (!temp_v1_4){} //Fake, but fixes one regalloc, at the cost of a much worse stack.
|
||||
vert = NULL; //fake?
|
||||
currentSegment = &gCurrentLevelModel->segments[levelSegmentIndex];
|
||||
currentBoundingBox = &gCurrentLevelModel->segmentsBoundingBoxes[levelSegmentIndex];
|
||||
var_a1 = 1;
|
||||
var_s1 = 0;
|
||||
XInInt = xIn;
|
||||
ZInInt = zIn;
|
||||
|
||||
temp_a2 = ((currentBoundingBox->x2 - currentBoundingBox->x1) >> 3) + 1;
|
||||
var_t0 = temp_a2 + currentBoundingBox->x1;
|
||||
var_t1 = currentBoundingBox->x1;
|
||||
for (i = 0; i < 8; i++) {
|
||||
if (var_t0 >= XInInt && XInInt >= var_t1) {
|
||||
var_s1 |= var_a1;
|
||||
}
|
||||
var_t0 += temp_a2;
|
||||
var_t1 += temp_a2;
|
||||
var_a1 *= 2;
|
||||
}
|
||||
|
||||
//Same as above, but for Z
|
||||
temp_a2 = ((currentBoundingBox->z2 - currentBoundingBox->z1) >> 3) + 1;
|
||||
var_t0 = temp_a2 + currentBoundingBox->z1;
|
||||
var_t1 = currentBoundingBox->z1;
|
||||
for (i = 0; i < 8; i++) {
|
||||
if (var_t0 >= ZInInt && ZInInt >= var_t1) {
|
||||
var_s1 |= var_a1;
|
||||
}
|
||||
var_t0 += temp_a2;
|
||||
var_t1 += temp_a2;
|
||||
var_a1 *= 2;
|
||||
}
|
||||
|
||||
yOutCount = 0;
|
||||
for (batchNum = 0; batchNum < currentSegment->numberOfBatches; batchNum++) {
|
||||
if (1) { } // fake
|
||||
currentBatch = ¤tSegment->batches[batchNum];
|
||||
currentFaceOffset = currentBatch->facesOffset;
|
||||
nextFaceOffset = (currentBatch + 1)->facesOffset;
|
||||
currentVerticesOffset = currentBatch->verticesOffset;
|
||||
for (faceNum = currentFaceOffset; faceNum < nextFaceOffset; faceNum++) {
|
||||
if (var_s1 == (currentSegment->unk10[faceNum] & var_s1)) {
|
||||
tri = ¤tSegment->triangles[faceNum];
|
||||
vert = ¤tSegment->vertices[tri->verticesArray[1] + currentVerticesOffset];
|
||||
vert1X = vert->x;
|
||||
vert1Z = vert->z;
|
||||
vert = ¤tSegment->vertices[tri->verticesArray[2] + currentVerticesOffset];
|
||||
vert2X = vert->x;
|
||||
vert2Z = vert->z;
|
||||
vert = ¤tSegment->vertices[tri->verticesArray[3] + currentVerticesOffset];
|
||||
vert3X = vert->x;
|
||||
vert3Z = vert->z;
|
||||
temp_ra_1 = ((((XInInt - vert2X) * (vert3Z - vert2Z)) - ((vert3X - vert2X) * (ZInInt - vert2Z))) >= 0);
|
||||
temp_ra_2 = ((((XInInt - vert1X) * (vert2Z - vert1Z)) - ((vert2X - vert1X) * (ZInInt - vert1Z))) >= 0);
|
||||
temp_ra_3 = ((((XInInt - vert1X) * (vert3Z - vert1Z)) - ((vert3X - vert1X) * (ZInInt - vert1Z))) >= 0);
|
||||
var_v0 = faceNum; //fake?
|
||||
if (temp_ra_1 == temp_ra_2 && temp_ra_2 != temp_ra_3) {
|
||||
new_var = currentSegment->unk14;
|
||||
temp = new_var[faceNum * 4];
|
||||
temp_v1_4 = (f32 *) ¤tSegment->unk18[temp * 4];
|
||||
tempVec4f.x = temp_v1_4[0];
|
||||
tempVec4f.y = temp_v1_4[1];
|
||||
tempVec4f.z = temp_v1_4[2];
|
||||
tempVec4f.w = temp_v1_4[3];
|
||||
if (tempVec4f.y != 0.0) {
|
||||
yOut[yOutCount] = -(((tempVec4f.x * xIn) + (tempVec4f.z * zIn) + tempVec4f.w) / tempVec4f.y);
|
||||
yOutCount++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
do {
|
||||
stopSorting = TRUE;
|
||||
for (var_v0 = 0; var_v0 < yOutCount - 1; var_v0++) {
|
||||
if (yOut[var_v0] > yOut[var_v0 + 1]) {
|
||||
stopSorting = FALSE;
|
||||
temp_f2_2 = yOut[var_v0];
|
||||
yOut[var_v0] = yOut[var_v0 + 1];
|
||||
yOut[var_v0 + 1] = temp_f2_2;
|
||||
}
|
||||
}
|
||||
} while (!stopSorting);
|
||||
|
||||
return yOutCount;
|
||||
}
|
||||
#else
|
||||
GLOBAL_ASM("asm/non_matchings/tracks/func_8002BAB0.s")
|
||||
#endif
|
||||
|
||||
#ifdef NON_MATCHING
|
||||
// generate_track
|
||||
@@ -1730,7 +1865,7 @@ void func_8002C0C4(s32 modelId) {
|
||||
LOCAL_OFFSET_TO_RAM_ADDRESS(Vertex *, gCurrentLevelModel->segments[k].vertices);
|
||||
LOCAL_OFFSET_TO_RAM_ADDRESS(Triangle *, gCurrentLevelModel->segments[k].triangles);
|
||||
LOCAL_OFFSET_TO_RAM_ADDRESS(TriangleBatchInfo *, gCurrentLevelModel->segments[k].batches);
|
||||
LOCAL_OFFSET_TO_RAM_ADDRESS(u8 *, gCurrentLevelModel->segments[k].unk14);
|
||||
LOCAL_OFFSET_TO_RAM_ADDRESS(u16 *, gCurrentLevelModel->segments[k].unk14);
|
||||
}
|
||||
for(k = 0; k < gCurrentLevelModel->numberOfTextures; k++) {
|
||||
gCurrentLevelModel->textures[k].texture = load_texture(((s32)gCurrentLevelModel->textures[k].texture) | 0x8000);
|
||||
@@ -1739,7 +1874,7 @@ void func_8002C0C4(s32 modelId) {
|
||||
for(k = 0; k < gCurrentLevelModel->numberOfSegments; k++) {
|
||||
gCurrentLevelModel->segments[k].unk10 = (s16 *) j;
|
||||
j = (s32) align16(((u8 *) (gCurrentLevelModel->segments[k].numberOfTriangles * 2)) + j);
|
||||
gCurrentLevelModel->segments[k].unk18 = (s16 *) j;
|
||||
gCurrentLevelModel->segments[k].unk18 = (f32 *) j;
|
||||
j = (s32) &((u8*)j)[func_8002CC30(&gCurrentLevelModel->segments[k])];
|
||||
func_8002C954(&gCurrentLevelModel->segments[k], &gCurrentLevelModel->segmentsBoundingBoxes[k], k);
|
||||
gCurrentLevelModel->segments[k].unk30 = 0;
|
||||
|
||||
+1
-1
@@ -205,7 +205,7 @@ void func_8002EEEC(void);
|
||||
void func_8002F2AC(void);
|
||||
void func_8002F440(void);
|
||||
f32 func_8002FA64(void);
|
||||
s32 func_8002BAB0(s32, f32, f32, f32*);
|
||||
s32 func_8002BAB0(s32 levelSegmentIndex, f32 xIn, f32 zIn, f32 *yOut);
|
||||
void init_track(u32 geometry, u32 skybox, s32 numberOfPlayers, Vehicle vehicle, u32 entranceId, u32 collectables, u32 arg6);
|
||||
void func_800B82B4(LevelModel *, LevelHeader *, s32);
|
||||
void func_80025510(s32);
|
||||
|
||||
Reference in New Issue
Block a user