mirror of
https://gitlab.com/kholdfuzion/goldeneye_src
synced 2026-08-25 23:26:42 -04:00
9382 lines
352 KiB
C
9382 lines
352 KiB
C
#include <ultra64.h>
|
|
#include <memp.h>
|
|
#include "../rmon.h" /*<PR/rmon.h>*/
|
|
#include "chr.h"
|
|
#include "objecthandler.h"
|
|
#include "math_floor.h"
|
|
#include "math_ceil.h"
|
|
#include "quaternion.h"
|
|
#include "math_asinfacosf.h"
|
|
#include "math_unk_05A9E0.h"
|
|
#include "chrobjdata.h"
|
|
#include "bondview.h"
|
|
#include "random.h"
|
|
#include "gbi_extension.h"
|
|
|
|
// forward declarations
|
|
|
|
void sub_GAME_7F06D490(struct Model *arg0, struct ModelNode *arg1);
|
|
void sub_GAME_7F0755B0(void);
|
|
s32 sub_GAME_7F0754BC(struct ModelAnimation *, s32, struct ModelSkeleton*);
|
|
|
|
// end forward declarations
|
|
|
|
|
|
|
|
|
|
|
|
//newfile per EU
|
|
bool modelmgrCanSlotFitRwdata(Model *modelslot, ModelFileHeader *modeldef)
|
|
{
|
|
return modeldef->numRecords <= 0
|
|
|| (modelslot->datas != NULL && modelslot->Type >= modeldef->numRecords);
|
|
}
|
|
|
|
|
|
#ifdef NONMATCHING
|
|
struct PropRecord * get_obj_instance_controller_for_header(struct ModelFileHeader* arg0)
|
|
{
|
|
|
|
}
|
|
#else
|
|
GLOBAL_ASM(
|
|
.text
|
|
glabel get_obj_instance_controller_for_header
|
|
/* 0A0BC4 7F06C094 27BDFFB8 */ addiu $sp, $sp, -0x48
|
|
/* 0A0BC8 7F06C098 3C0F8003 */ lui $t7, %hi(D_80036078)
|
|
/* 0A0BCC 7F06C09C 8DEF6078 */ lw $t7, %lo(D_80036078)($t7)
|
|
/* 0A0BD0 7F06C0A0 AFB60030 */ sw $s6, 0x30($sp)
|
|
/* 0A0BD4 7F06C0A4 AFB5002C */ sw $s5, 0x2c($sp)
|
|
/* 0A0BD8 7F06C0A8 240EFFFF */ li $t6, -1
|
|
/* 0A0BDC 7F06C0AC 0080A825 */ move $s5, $a0
|
|
/* 0A0BE0 7F06C0B0 AFBF0034 */ sw $ra, 0x34($sp)
|
|
/* 0A0BE4 7F06C0B4 AFB40028 */ sw $s4, 0x28($sp)
|
|
/* 0A0BE8 7F06C0B8 AFB30024 */ sw $s3, 0x24($sp)
|
|
/* 0A0BEC 7F06C0BC AFB20020 */ sw $s2, 0x20($sp)
|
|
/* 0A0BF0 7F06C0C0 AFB1001C */ sw $s1, 0x1c($sp)
|
|
/* 0A0BF4 7F06C0C4 AFB00018 */ sw $s0, 0x18($sp)
|
|
/* 0A0BF8 7F06C0C8 0000B025 */ move $s6, $zero
|
|
/* 0A0BFC 7F06C0CC AFA00040 */ sw $zero, 0x40($sp)
|
|
/* 0A0C00 7F06C0D0 11E00025 */ beqz $t7, .L7F06C168
|
|
/* 0A0C04 7F06C0D4 A7AE003E */ sh $t6, 0x3e($sp)
|
|
/* 0A0C08 7F06C0D8 3C148003 */ lui $s4, %hi(D_80036074)
|
|
/* 0A0C0C 7F06C0DC 26946074 */ addiu $s4, %lo(D_80036074) # addiu $s4, $s4, 0x6074
|
|
/* 0A0C10 7F06C0E0 8E840000 */ lw $a0, ($s4)
|
|
/* 0A0C14 7F06C0E4 00001025 */ move $v0, $zero
|
|
/* 0A0C18 7F06C0E8 3C068008 */ lui $a2, %hi(ptr_allocation_1)
|
|
/* 0A0C1C 7F06C0EC 2484FFE2 */ addiu $a0, $a0, -0x1e
|
|
/* 0A0C20 7F06C0F0 1880000C */ blez $a0, .L7F06C124
|
|
/* 0A0C24 7F06C0F4 24050004 */ li $a1, 4
|
|
/* 0A0C28 7F06C0F8 8CC69934 */ lw $a2, %lo(ptr_allocation_1)($a2)
|
|
/* 0A0C2C 7F06C0FC 00C01825 */ move $v1, $a2
|
|
.L7F06C100:
|
|
/* 0A0C30 7F06C100 8C780008 */ lw $t8, 8($v1)
|
|
/* 0A0C34 7F06C104 17000003 */ bnez $t8, .L7F06C114
|
|
/* 0A0C38 7F06C108 0002C940 */ sll $t9, $v0, 5
|
|
/* 0A0C3C 7F06C10C 10000005 */ b .L7F06C124
|
|
/* 0A0C40 7F06C110 0326B021 */ addu $s6, $t9, $a2
|
|
.L7F06C114:
|
|
/* 0A0C44 7F06C114 24420001 */ addiu $v0, $v0, 1
|
|
/* 0A0C48 7F06C118 0044082A */ slt $at, $v0, $a0
|
|
/* 0A0C4C 7F06C11C 1420FFF8 */ bnez $at, .L7F06C100
|
|
/* 0A0C50 7F06C120 24630020 */ addiu $v1, $v1, 0x20
|
|
.L7F06C124:
|
|
/* 0A0C54 7F06C124 56C00005 */ bnezl $s6, .L7F06C13C
|
|
/* 0A0C58 7F06C128 86A20014 */ lh $v0, 0x14($s5)
|
|
/* 0A0C5C 7F06C12C 0C0025C8 */ jal mempAllocBytesInBank
|
|
/* 0A0C60 7F06C130 24040020 */ li $a0, 32
|
|
/* 0A0C64 7F06C134 0040B025 */ move $s6, $v0
|
|
/* 0A0C68 7F06C138 86A20014 */ lh $v0, 0x14($s5)
|
|
.L7F06C13C:
|
|
/* 0A0C6C 7F06C13C 24050004 */ li $a1, 4
|
|
/* 0A0C70 7F06C140 1840002A */ blez $v0, .L7F06C1EC
|
|
/* 0A0C74 7F06C144 00022080 */ sll $a0, $v0, 2
|
|
/* 0A0C78 7F06C148 2484000F */ addiu $a0, $a0, 0xf
|
|
/* 0A0C7C 7F06C14C 3488000F */ ori $t0, $a0, 0xf
|
|
/* 0A0C80 7F06C150 0C0025C8 */ jal mempAllocBytesInBank
|
|
/* 0A0C84 7F06C154 3904000F */ xori $a0, $t0, 0xf
|
|
/* 0A0C88 7F06C158 AFA20040 */ sw $v0, 0x40($sp)
|
|
/* 0A0C8C 7F06C15C 86AA0014 */ lh $t2, 0x14($s5)
|
|
/* 0A0C90 7F06C160 10000022 */ b .L7F06C1EC
|
|
/* 0A0C94 7F06C164 A7AA003E */ sh $t2, 0x3e($sp)
|
|
.L7F06C168:
|
|
/* 0A0C98 7F06C168 3C148003 */ lui $s4, %hi(D_80036074)
|
|
/* 0A0C9C 7F06C16C 26946074 */ addiu $s4, %lo(D_80036074) # addiu $s4, $s4, 0x6074
|
|
/* 0A0CA0 7F06C170 8E8B0000 */ lw $t3, ($s4)
|
|
/* 0A0CA4 7F06C174 00008025 */ move $s0, $zero
|
|
/* 0A0CA8 7F06C178 00008825 */ move $s1, $zero
|
|
/* 0A0CAC 7F06C17C 1960001B */ blez $t3, .L7F06C1EC
|
|
/* 0A0CB0 7F06C180 3C138008 */ lui $s3, %hi(ptr_allocation_1)
|
|
/* 0A0CB4 7F06C184 26739934 */ addiu $s3, %lo(ptr_allocation_1) # addiu $s3, $s3, -0x66cc
|
|
/* 0A0CB8 7F06C188 8E660000 */ lw $a2, ($s3)
|
|
.L7F06C18C:
|
|
/* 0A0CBC 7F06C18C 00109140 */ sll $s2, $s0, 5
|
|
/* 0A0CC0 7F06C190 00D16021 */ addu $t4, $a2, $s1
|
|
/* 0A0CC4 7F06C194 8D8D0008 */ lw $t5, 8($t4)
|
|
/* 0A0CC8 7F06C198 02462021 */ addu $a0, $s2, $a2
|
|
/* 0A0CCC 7F06C19C 55A0000E */ bnezl $t5, .L7F06C1D8
|
|
/* 0A0CD0 7F06C1A0 8E980000 */ lw $t8, ($s4)
|
|
/* 0A0CD4 7F06C1A4 0FC1B018 */ jal modelmgrCanSlotFitRwdata
|
|
/* 0A0CD8 7F06C1A8 02A02825 */ move $a1, $s5
|
|
/* 0A0CDC 7F06C1AC 5040000A */ beql $v0, $zero, .L7F06C1D8
|
|
/* 0A0CE0 7F06C1B0 8E980000 */ lw $t8, ($s4)
|
|
/* 0A0CE4 7F06C1B4 8E660000 */ lw $a2, ($s3)
|
|
/* 0A0CE8 7F06C1B8 00D11021 */ addu $v0, $a2, $s1
|
|
/* 0A0CEC 7F06C1BC 8C4E0010 */ lw $t6, 0x10($v0)
|
|
/* 0A0CF0 7F06C1C0 0246B021 */ addu $s6, $s2, $a2
|
|
/* 0A0CF4 7F06C1C4 AFAE0040 */ sw $t6, 0x40($sp)
|
|
/* 0A0CF8 7F06C1C8 844F0002 */ lh $t7, 2($v0)
|
|
/* 0A0CFC 7F06C1CC 10000007 */ b .L7F06C1EC
|
|
/* 0A0D00 7F06C1D0 A7AF003E */ sh $t7, 0x3e($sp)
|
|
/* 0A0D04 7F06C1D4 8E980000 */ lw $t8, ($s4)
|
|
.L7F06C1D8:
|
|
/* 0A0D08 7F06C1D8 26100001 */ addiu $s0, $s0, 1
|
|
/* 0A0D0C 7F06C1DC 26310020 */ addiu $s1, $s1, 0x20
|
|
/* 0A0D10 7F06C1E0 0218082A */ slt $at, $s0, $t8
|
|
/* 0A0D14 7F06C1E4 5420FFE9 */ bnezl $at, .L7F06C18C
|
|
/* 0A0D18 7F06C1E8 8E660000 */ lw $a2, ($s3)
|
|
.L7F06C1EC:
|
|
/* 0A0D1C 7F06C1EC 12C00006 */ beqz $s6, .L7F06C208
|
|
/* 0A0D20 7F06C1F0 02C02025 */ move $a0, $s6
|
|
/* 0A0D24 7F06C1F4 02A02825 */ move $a1, $s5
|
|
/* 0A0D28 7F06C1F8 0FC1D7DA */ jal modelInit
|
|
/* 0A0D2C 7F06C1FC 8FA60040 */ lw $a2, 0x40($sp)
|
|
/* 0A0D30 7F06C200 87B9003E */ lh $t9, 0x3e($sp)
|
|
/* 0A0D34 7F06C204 A6D90002 */ sh $t9, 2($s6)
|
|
.L7F06C208:
|
|
/* 0A0D38 7F06C208 8FBF0034 */ lw $ra, 0x34($sp)
|
|
/* 0A0D3C 7F06C20C 02C01025 */ move $v0, $s6
|
|
/* 0A0D40 7F06C210 8FB60030 */ lw $s6, 0x30($sp)
|
|
/* 0A0D44 7F06C214 8FB00018 */ lw $s0, 0x18($sp)
|
|
/* 0A0D48 7F06C218 8FB1001C */ lw $s1, 0x1c($sp)
|
|
/* 0A0D4C 7F06C21C 8FB20020 */ lw $s2, 0x20($sp)
|
|
/* 0A0D50 7F06C220 8FB30024 */ lw $s3, 0x24($sp)
|
|
/* 0A0D54 7F06C224 8FB40028 */ lw $s4, 0x28($sp)
|
|
/* 0A0D58 7F06C228 8FB5002C */ lw $s5, 0x2c($sp)
|
|
/* 0A0D5C 7F06C22C 03E00008 */ jr $ra
|
|
/* 0A0D60 7F06C230 27BD0048 */ addiu $sp, $sp, 0x48
|
|
)
|
|
#endif
|
|
|
|
|
|
void clear_model_obj(Model* model)
|
|
{
|
|
model->obj = NULL;
|
|
}
|
|
|
|
|
|
#ifdef NONMATCHING
|
|
void get_aircraft_obj_instance_controller(void) {
|
|
|
|
}
|
|
#else
|
|
GLOBAL_ASM(
|
|
.text
|
|
glabel get_aircraft_obj_instance_controller
|
|
/* 0A0D6C 7F06C23C 3C0E8003 */ lui $t6, %hi(D_80036078)
|
|
/* 0A0D70 7F06C240 8DCE6078 */ lw $t6, %lo(D_80036078)($t6)
|
|
/* 0A0D74 7F06C244 27BDFFD0 */ addiu $sp, $sp, -0x30
|
|
/* 0A0D78 7F06C248 AFB00018 */ sw $s0, 0x18($sp)
|
|
/* 0A0D7C 7F06C24C AFBF001C */ sw $ra, 0x1c($sp)
|
|
/* 0A0D80 7F06C250 AFA40030 */ sw $a0, 0x30($sp)
|
|
/* 0A0D84 7F06C254 00008025 */ move $s0, $zero
|
|
/* 0A0D88 7F06C258 AFA00028 */ sw $zero, 0x28($sp)
|
|
/* 0A0D8C 7F06C25C 11C00028 */ beqz $t6, .L7F06C300
|
|
/* 0A0D90 7F06C260 2408FFFF */ li $t0, -1
|
|
/* 0A0D94 7F06C264 3C058003 */ lui $a1, %hi(D_80036070)
|
|
/* 0A0D98 7F06C268 8CA56070 */ lw $a1, %lo(D_80036070)($a1)
|
|
/* 0A0D9C 7F06C26C 00001025 */ move $v0, $zero
|
|
/* 0A0DA0 7F06C270 3C078008 */ lui $a3, %hi(ptr_allocation_0)
|
|
/* 0A0DA4 7F06C274 24A5FFF6 */ addiu $a1, $a1, -0xa
|
|
/* 0A0DA8 7F06C278 18A0000D */ blez $a1, .L7F06C2B0
|
|
/* 0A0DAC 7F06C27C 00000000 */ nop
|
|
/* 0A0DB0 7F06C280 8CE79930 */ lw $a3, %lo(ptr_allocation_0)($a3)
|
|
/* 0A0DB4 7F06C284 00002025 */ move $a0, $zero
|
|
/* 0A0DB8 7F06C288 00E01825 */ move $v1, $a3
|
|
.L7F06C28C:
|
|
/* 0A0DBC 7F06C28C 8C6F0008 */ lw $t7, 8($v1)
|
|
/* 0A0DC0 7F06C290 24420001 */ addiu $v0, $v0, 1
|
|
/* 0A0DC4 7F06C294 0045082A */ slt $at, $v0, $a1
|
|
/* 0A0DC8 7F06C298 15E00003 */ bnez $t7, .L7F06C2A8
|
|
/* 0A0DCC 7F06C29C 246300BC */ addiu $v1, $v1, 0xbc
|
|
/* 0A0DD0 7F06C2A0 10000003 */ b .L7F06C2B0
|
|
/* 0A0DD4 7F06C2A4 00878021 */ addu $s0, $a0, $a3
|
|
.L7F06C2A8:
|
|
/* 0A0DD8 7F06C2A8 1420FFF8 */ bnez $at, .L7F06C28C
|
|
/* 0A0DDC 7F06C2AC 248400BC */ addiu $a0, $a0, 0xbc
|
|
.L7F06C2B0:
|
|
/* 0A0DE0 7F06C2B0 16000006 */ bnez $s0, .L7F06C2CC
|
|
/* 0A0DE4 7F06C2B4 240400C0 */ li $a0, 192
|
|
/* 0A0DE8 7F06C2B8 24050004 */ li $a1, 4
|
|
/* 0A0DEC 7F06C2BC 0C0025C8 */ jal mempAllocBytesInBank
|
|
/* 0A0DF0 7F06C2C0 A7A80026 */ sh $t0, 0x26($sp)
|
|
/* 0A0DF4 7F06C2C4 87A80026 */ lh $t0, 0x26($sp)
|
|
/* 0A0DF8 7F06C2C8 00408025 */ move $s0, $v0
|
|
.L7F06C2CC:
|
|
/* 0A0DFC 7F06C2CC 8FB80030 */ lw $t8, 0x30($sp)
|
|
/* 0A0E00 7F06C2D0 24050004 */ li $a1, 4
|
|
/* 0A0E04 7F06C2D4 87060014 */ lh $a2, 0x14($t8)
|
|
/* 0A0E08 7F06C2D8 18C00029 */ blez $a2, .L7F06C380
|
|
/* 0A0E0C 7F06C2DC 00062080 */ sll $a0, $a2, 2
|
|
/* 0A0E10 7F06C2E0 2484000F */ addiu $a0, $a0, 0xf
|
|
/* 0A0E14 7F06C2E4 3499000F */ ori $t9, $a0, 0xf
|
|
/* 0A0E18 7F06C2E8 0C0025C8 */ jal mempAllocBytesInBank
|
|
/* 0A0E1C 7F06C2EC 3B24000F */ xori $a0, $t9, 0xf
|
|
/* 0A0E20 7F06C2F0 8FAA0030 */ lw $t2, 0x30($sp)
|
|
/* 0A0E24 7F06C2F4 AFA20028 */ sw $v0, 0x28($sp)
|
|
/* 0A0E28 7F06C2F8 10000021 */ b .L7F06C380
|
|
/* 0A0E2C 7F06C2FC 85480014 */ lh $t0, 0x14($t2)
|
|
.L7F06C300:
|
|
/* 0A0E30 7F06C300 3C058003 */ lui $a1, %hi(D_80036070)
|
|
/* 0A0E34 7F06C304 8CA56070 */ lw $a1, %lo(D_80036070)($a1)
|
|
/* 0A0E38 7F06C308 8FAB0030 */ lw $t3, 0x30($sp)
|
|
/* 0A0E3C 7F06C30C 00001825 */ move $v1, $zero
|
|
/* 0A0E40 7F06C310 18A0001B */ blez $a1, .L7F06C380
|
|
/* 0A0E44 7F06C314 85660014 */ lh $a2, 0x14($t3)
|
|
/* 0A0E48 7F06C318 3C078008 */ lui $a3, %hi(ptr_allocation_0)
|
|
/* 0A0E4C 7F06C31C 8CE79930 */ lw $a3, %lo(ptr_allocation_0)($a3)
|
|
/* 0A0E50 7F06C320 00002025 */ move $a0, $zero
|
|
/* 0A0E54 7F06C324 00E01025 */ move $v0, $a3
|
|
.L7F06C328:
|
|
/* 0A0E58 7F06C328 8C4C0008 */ lw $t4, 8($v0)
|
|
/* 0A0E5C 7F06C32C 24630001 */ addiu $v1, $v1, 1
|
|
/* 0A0E60 7F06C330 55800010 */ bnezl $t4, .L7F06C374
|
|
/* 0A0E64 7F06C334 0065082A */ slt $at, $v1, $a1
|
|
/* 0A0E68 7F06C338 58C00009 */ blezl $a2, .L7F06C360
|
|
/* 0A0E6C 7F06C33C 8C4F0010 */ lw $t7, 0x10($v0)
|
|
/* 0A0E70 7F06C340 8C4D0010 */ lw $t5, 0x10($v0)
|
|
/* 0A0E74 7F06C344 51A0000B */ beql $t5, $zero, .L7F06C374
|
|
/* 0A0E78 7F06C348 0065082A */ slt $at, $v1, $a1
|
|
/* 0A0E7C 7F06C34C 844E0002 */ lh $t6, 2($v0)
|
|
/* 0A0E80 7F06C350 01C6082A */ slt $at, $t6, $a2
|
|
/* 0A0E84 7F06C354 54200007 */ bnezl $at, .L7F06C374
|
|
/* 0A0E88 7F06C358 0065082A */ slt $at, $v1, $a1
|
|
/* 0A0E8C 7F06C35C 8C4F0010 */ lw $t7, 0x10($v0)
|
|
.L7F06C360:
|
|
/* 0A0E90 7F06C360 00878021 */ addu $s0, $a0, $a3
|
|
/* 0A0E94 7F06C364 AFAF0028 */ sw $t7, 0x28($sp)
|
|
/* 0A0E98 7F06C368 10000005 */ b .L7F06C380
|
|
/* 0A0E9C 7F06C36C 84480002 */ lh $t0, 2($v0)
|
|
/* 0A0EA0 7F06C370 0065082A */ slt $at, $v1, $a1
|
|
.L7F06C374:
|
|
/* 0A0EA4 7F06C374 248400BC */ addiu $a0, $a0, 0xbc
|
|
/* 0A0EA8 7F06C378 1420FFEB */ bnez $at, .L7F06C328
|
|
/* 0A0EAC 7F06C37C 244200BC */ addiu $v0, $v0, 0xbc
|
|
.L7F06C380:
|
|
/* 0A0EB0 7F06C380 12000007 */ beqz $s0, .L7F06C3A0
|
|
/* 0A0EB4 7F06C384 02002025 */ move $a0, $s0
|
|
/* 0A0EB8 7F06C388 8FA50030 */ lw $a1, 0x30($sp)
|
|
/* 0A0EBC 7F06C38C 8FA60028 */ lw $a2, 0x28($sp)
|
|
/* 0A0EC0 7F06C390 0FC1D7EB */ jal animInit
|
|
/* 0A0EC4 7F06C394 A7A80026 */ sh $t0, 0x26($sp)
|
|
/* 0A0EC8 7F06C398 87A80026 */ lh $t0, 0x26($sp)
|
|
/* 0A0ECC 7F06C39C A6080002 */ sh $t0, 2($s0)
|
|
.L7F06C3A0:
|
|
/* 0A0ED0 7F06C3A0 8FBF001C */ lw $ra, 0x1c($sp)
|
|
/* 0A0ED4 7F06C3A4 02001025 */ move $v0, $s0
|
|
/* 0A0ED8 7F06C3A8 8FB00018 */ lw $s0, 0x18($sp)
|
|
/* 0A0EDC 7F06C3AC 03E00008 */ jr $ra
|
|
/* 0A0EE0 7F06C3B0 27BD0030 */ addiu $sp, $sp, 0x30
|
|
)
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void modelAttachHead(Model *model, ModelNode *node, ModelFileHeader *head)
|
|
{
|
|
modelAttachPart(model,model->obj,node,head);
|
|
modelInitRwData(model,head->RootNode);
|
|
}
|
|
|
|
void clear_aircraft_model_obj(Model *objinstance)
|
|
|
|
{
|
|
objinstance->obj = NULL;
|
|
return;
|
|
}
|
|
|
|
void modelSetDistanceDisabled(s32 param_1) {
|
|
g_ModelDistanceDisabled = param_1;
|
|
}
|
|
|
|
// PD: modelSetDistanceScale
|
|
void modelSetDistanceScale(f32 param_1) {
|
|
g_ModelDistanceScale = param_1;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef NONMATCHING
|
|
void sub_GAME_7F06C418(void) {
|
|
|
|
}
|
|
#else
|
|
GLOBAL_ASM(
|
|
.text
|
|
glabel sub_GAME_7F06C418
|
|
/* 0A0F48 7F06C418 00803025 */ move $a2, $a0
|
|
/* 0A0F4C 7F06C41C 24040004 */ li $a0, 4
|
|
/* 0A0F50 7F06C420 00001025 */ move $v0, $zero
|
|
/* 0A0F54 7F06C424 00A01825 */ move $v1, $a1
|
|
.L7F06C428:
|
|
/* 0A0F58 7F06C428 8CCE0000 */ lw $t6, ($a2)
|
|
/* 0A0F5C 7F06C42C 24420001 */ addiu $v0, $v0, 1
|
|
/* 0A0F60 7F06C430 24630010 */ addiu $v1, $v1, 0x10
|
|
/* 0A0F64 7F06C434 AC6EFFF0 */ sw $t6, -0x10($v1)
|
|
/* 0A0F68 7F06C438 8CCF0004 */ lw $t7, 4($a2)
|
|
/* 0A0F6C 7F06C43C 24C60010 */ addiu $a2, $a2, 0x10
|
|
/* 0A0F70 7F06C440 AC6FFFF4 */ sw $t7, -0xc($v1)
|
|
/* 0A0F74 7F06C444 8CD8FFF8 */ lw $t8, -8($a2)
|
|
/* 0A0F78 7F06C448 AC78FFF8 */ sw $t8, -8($v1)
|
|
/* 0A0F7C 7F06C44C 8CD9FFFC */ lw $t9, -4($a2)
|
|
/* 0A0F80 7F06C450 1444FFF5 */ bne $v0, $a0, .L7F06C428
|
|
/* 0A0F84 7F06C454 AC79FFFC */ sw $t9, -4($v1)
|
|
/* 0A0F88 7F06C458 03E00008 */ jr $ra
|
|
/* 0A0F8C 7F06C45C 00000000 */ nop
|
|
)
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
void set_vtxallocator(s32 param_1) {
|
|
vtxallocator = param_1;
|
|
}
|
|
|
|
|
|
#if defined(LEFTOVERDEBUG)
|
|
//called after a debug print during failed model operation
|
|
void return_null(void) {
|
|
return;
|
|
}
|
|
#endif
|
|
|
|
|
|
void sub_GAME_7F06C474(Model* model, coord3d* coord)
|
|
{
|
|
Mtxf* mtx;
|
|
f32 dist;
|
|
f32 neg_x;
|
|
f32 neg_y;
|
|
f32 neg_z;
|
|
f32 inv_dist;
|
|
|
|
mtx = getsubmatrix(model);
|
|
neg_x = -mtx->m[3][0];
|
|
neg_y = -mtx->m[3][1];
|
|
neg_z = -mtx->m[3][2];
|
|
|
|
dist = sqrtf((neg_x * neg_x) + (neg_y * neg_y) + (neg_z * neg_z));
|
|
if (dist > 0.0f)
|
|
{
|
|
inv_dist = 1.0f / (model->scale * dist);
|
|
coord->f[0] = neg_x * inv_dist;
|
|
coord->f[1] = neg_y * inv_dist;
|
|
coord->f[2] = neg_z * inv_dist;
|
|
return;
|
|
}
|
|
|
|
coord->f[0] = 0.0f;
|
|
coord->f[1] = 0.0f;
|
|
coord->f[2] = 1.0f / model->scale;
|
|
}
|
|
|
|
|
|
void sub_GAME_7F06C550(Model* model, coord3d* coord)
|
|
{
|
|
sub_GAME_7F06C474(model, coord);
|
|
}
|
|
|
|
|
|
// PD: model0001a524
|
|
s32 modelFindNodeMtxIndex(ModelNode *node, s32 arg1)
|
|
{
|
|
s32 index;
|
|
union ModelRoData *rodata1;
|
|
union ModelRoData *rodata2;
|
|
union ModelRoData *rodata3;
|
|
union ModelRoData *rodata4;
|
|
|
|
while (node)
|
|
{
|
|
switch (node->Opcode & 0xff)
|
|
{
|
|
case MODELNODE_OPCODE_HEADER:
|
|
rodata1 = node->Data;
|
|
return (s16)rodata1->Header.ModelType;
|
|
|
|
case MODELNODE_OPCODE_GROUP:
|
|
rodata2 = node->Data;
|
|
return rodata2->Group.MatrixIDs[arg1 == 0x200 ? 2 : (arg1 == 0x100 ? 1 : 0)];
|
|
|
|
case MODELNODE_OPCODE_OP03:
|
|
rodata3 = node->Data;
|
|
return rodata3->Group.MatrixIDs[arg1 == 0x200 ? 2 : (arg1 == 0x100 ? 1 : 0)];
|
|
|
|
case MODELNODE_OPCODE_GROUPSIMPLE:
|
|
rodata4 = node->Data;
|
|
return rodata4->GroupSimple.Group1;
|
|
break;
|
|
}
|
|
|
|
node = node->Parent;
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
|
|
|
|
// PD: model0001a5cc
|
|
Mtxf *modelFindNodeMtx(struct Model *model, struct ModelNode *node, s32 arg2) {
|
|
s32 index = modelFindNodeMtxIndex(node, arg2);
|
|
|
|
if (index >= 0) {
|
|
return &model->render_pos[index].pos;
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
|
|
//rejoined per EU
|
|
// PD: model0001a60c
|
|
Mtxf *getsubmatrix(Model *objinst)
|
|
{
|
|
#if defined(LEFTOVERDEBUG)
|
|
if (!objinst)
|
|
{
|
|
osSyncPrintf("getsubmatrix: no objinst!\n");
|
|
return_null();
|
|
}
|
|
if (!objinst->obj)
|
|
{
|
|
osSyncPrintf("getsubmatrix: objinst has no object!\n");
|
|
return_null();
|
|
}
|
|
#endif
|
|
return modelFindNodeMtx(objinst, objinst->obj->RootNode, 0);
|
|
}
|
|
|
|
|
|
void sub_GAME_7F06C710(Model* model, coord3d* pos)
|
|
{
|
|
Mtxf* mtx;
|
|
|
|
mtx = getsubmatrix(model);
|
|
if (mtx != NULL)
|
|
{
|
|
pos->f[0] = (f32) mtx->m[3][0];
|
|
pos->f[1] = (f32) mtx->m[3][1];
|
|
pos->f[2] = (f32) mtx->m[3][2];
|
|
return;
|
|
}
|
|
|
|
pos->f[0] = 0.0f;
|
|
pos->f[1] = 0.0f;
|
|
pos->f[2] = 0.0f;
|
|
}
|
|
|
|
|
|
f32 sub_GAME_7F06C768(Model *objinst)
|
|
{
|
|
Mtxf *mtx = getsubmatrix(objinst);
|
|
if (mtx != 0)
|
|
{
|
|
return -mtx->m[3][2];
|
|
}
|
|
return 0.0f;
|
|
}
|
|
|
|
|
|
/**
|
|
* Address 0x7F06C79C.
|
|
*/
|
|
union ModelRwData* modelGetNodeRwData(Model *Objinst, ModelNode *root)
|
|
{
|
|
s32 index = 0;
|
|
union ModelRwData **data = Objinst->datas;
|
|
|
|
switch (root->Opcode & 0xff)
|
|
{
|
|
case MODELNODE_OPCODE_HEADER:
|
|
{
|
|
index = root->Data->Header.RwDataIndex;
|
|
break;
|
|
}
|
|
case MODELNODE_OPCODE_DLCOLLISION:
|
|
{
|
|
index = root->Data->DisplayListCollisions.RwDataIndex;
|
|
break;
|
|
}
|
|
case MODELNODE_OPCODE_OP07:
|
|
{
|
|
index = root->Data->Op07.RwDataIndex;
|
|
break;
|
|
}
|
|
case MODELNODE_OPCODE_LOD:
|
|
{
|
|
index = root->Data->LOD.RwDataIndex;
|
|
break;
|
|
}
|
|
case MODELNODE_OPCODE_SWITCH:
|
|
{
|
|
index = root->Data->Switch.RwDataIndex;
|
|
break;
|
|
}
|
|
case MODELNODE_OPCODE_BSP:
|
|
{
|
|
index = root->Data->BSP.RwDataIndex;
|
|
break;
|
|
}
|
|
case MODELNODE_OPCODE_OP11:
|
|
{
|
|
index = root->Data->Op11.RwDataIndex;
|
|
break;
|
|
}
|
|
case MODELNODE_OPCODE_GUNFIRE:
|
|
{
|
|
index = root->Data->Gunfire.RwDataIndex;
|
|
break;
|
|
}
|
|
case MODELNODE_OPCODE_HEAD:
|
|
{
|
|
index = root->Data->HeadPlaceholder.RwDataIndex;
|
|
break;
|
|
}
|
|
}
|
|
|
|
while (root->Parent)
|
|
{
|
|
root = root->Parent;
|
|
if ((root->Opcode & 0xFF) == MODELNODE_OPCODE_HEAD)
|
|
{
|
|
ModelRwData_HeadPlaceholderRecord *tmp = modelGetNodeRwData(Objinst, root);
|
|
data = tmp->RwDatas;
|
|
break;
|
|
}
|
|
}
|
|
|
|
return &data[index];
|
|
}
|
|
|
|
|
|
|
|
void getpartoffset(Model *objinst, ModelNode *part, coord3d *offset) //#MATCH - however OPCODE 3 needs defining
|
|
{
|
|
#if defined(LEFTOVERDEBUG)
|
|
if (!objinst)
|
|
{
|
|
osSyncPrintf("getpartoffset: no objinst!");
|
|
return_null();
|
|
}
|
|
if (!part)
|
|
{
|
|
osSyncPrintf("getpartoffset: no partdesc!");
|
|
return_null();
|
|
}
|
|
#endif
|
|
switch (part->Opcode & 0xFF)
|
|
{
|
|
case MODELNODE_OPCODE_HEADER:
|
|
{
|
|
struct modeldata_root *root = modelGetNodeRwData(objinst, part);
|
|
offset->x = root->pos.x;
|
|
offset->y = root->pos.y;
|
|
offset->z = root->pos.z;
|
|
break;
|
|
}
|
|
case MODELNODE_OPCODE_GROUP:
|
|
{
|
|
ModelRoData_GroupRecord *prt = &part->Data->Group;
|
|
offset->x = prt->Origin.x;
|
|
offset->y = prt->Origin.y;
|
|
offset->z = prt->Origin.z;
|
|
break;
|
|
}
|
|
case MODELNODE_OPCODE_OP03:
|
|
{
|
|
ModelRoData_GroupSimpleRecord *prt = &part->Data->GroupSimple; //UNUSED at this time
|
|
offset->x = prt->Origin.x;
|
|
offset->y = prt->Origin.y;
|
|
offset->z = prt->Origin.z;
|
|
break;
|
|
}
|
|
case MODELNODE_OPCODE_GROUPSIMPLE:
|
|
{
|
|
ModelRoData_GroupSimpleRecord *prt = &part->Data->GroupSimple;
|
|
offset->x = prt->Origin.x;
|
|
offset->y = prt->Origin.y;
|
|
offset->z = prt->Origin.z;
|
|
break;
|
|
}
|
|
default:
|
|
{
|
|
offset->x = 0.0f;
|
|
offset->y = 0.0f;
|
|
offset->z = 0.0f;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void setpartoffset(Model *model, ModelNode *node, coord3d *pos)
|
|
{
|
|
#if defined(LEFTOVERDEBUG)
|
|
if (!model) {
|
|
osSyncPrintf("setpartoffset: no objinst!");
|
|
return_null();
|
|
}
|
|
|
|
if (!node) {
|
|
osSyncPrintf("setpartoffset: no partdesc!");
|
|
return_null();
|
|
}
|
|
else
|
|
{
|
|
// huh?
|
|
}
|
|
#endif
|
|
switch (node->Opcode & 0xff)
|
|
{
|
|
case MODELNODE_OPCODE_HEADER:
|
|
{
|
|
ModelRwData_HeaderRecord *rwdata = modelGetNodeRwData(model, node);
|
|
coord3d diff[1];
|
|
|
|
diff[0].x = pos->x - rwdata->pos.x;
|
|
diff[0].z = pos->z - rwdata->pos.z;
|
|
|
|
rwdata->pos.x = pos->x;
|
|
rwdata->pos.y = pos->y;
|
|
rwdata->pos.z = pos->z;
|
|
|
|
rwdata->unk24.x += diff[0].x; rwdata->unk24.z += diff[0].z;
|
|
rwdata->unk34.x += diff[0].x; rwdata->unk34.z += diff[0].z;
|
|
rwdata->unk40.x += diff[0].x; rwdata->unk40.z += diff[0].z;
|
|
rwdata->unk4c.x += diff[0].x; rwdata->unk4c.z += diff[0].z;
|
|
}
|
|
break;
|
|
case MODELNODE_OPCODE_GROUP:
|
|
{
|
|
ModelRoData_GroupRecord *rodata = &node->Data->Group;
|
|
rodata->Origin.x = pos->x;
|
|
rodata->Origin.y = pos->y;
|
|
rodata->Origin.z = pos->z;
|
|
}
|
|
break;
|
|
case MODELNODE_OPCODE_OP03:
|
|
{
|
|
ModelRoData_GroupRecord *rodata = &node->Data->Group;
|
|
rodata->Origin.x = pos->x;
|
|
rodata->Origin.y = pos->y;
|
|
rodata->Origin.z = pos->z;
|
|
}
|
|
break;
|
|
case MODELNODE_OPCODE_GROUPSIMPLE:
|
|
{
|
|
ModelRoData_GroupSimpleRecord *rodata = &node->Data->GroupSimple;
|
|
rodata->Origin.x = pos->x;
|
|
rodata->Origin.y = pos->y;
|
|
rodata->Origin.z = pos->z;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
void getsuboffset(Model *objinst, coord3d *offset) //#MATCH
|
|
{
|
|
#if defined(LEFTOVERDEBUG )
|
|
if (!objinst)
|
|
{
|
|
osSyncPrintf("getsuboffset: no objinst!");
|
|
return_null();
|
|
}
|
|
|
|
if (!objinst->obj)
|
|
{
|
|
osSyncPrintf("getsuboffset: objinst has no object!");
|
|
return_null();
|
|
}
|
|
#endif
|
|
getpartoffset(objinst, objinst->obj->RootNode, offset);
|
|
}
|
|
|
|
|
|
|
|
|
|
void setsuboffset(Model *objinst, coord3d *offset) //#MATCH
|
|
{
|
|
#if defined(LEFTOVERDEBUG )
|
|
if (!objinst)
|
|
{
|
|
osSyncPrintf("setsuboffset: no objinst!");
|
|
return_null();
|
|
}
|
|
if (!objinst->obj)
|
|
{
|
|
osSyncPrintf("setsuboffset: objinst has no object!");
|
|
return_null();
|
|
}
|
|
#endif
|
|
setpartoffset(objinst, objinst->obj->RootNode, offset);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
* Address 0x7F06CC80.
|
|
*/
|
|
f32 getsubroty(Model *objinst)
|
|
{
|
|
ModelNode *root;
|
|
|
|
#if defined(LEFTOVERDEBUG)
|
|
if(0)
|
|
{
|
|
// removed
|
|
}
|
|
|
|
if (objinst == NULL)
|
|
{
|
|
osSyncPrintf("getsubroty: no objinst!");
|
|
return_null();
|
|
}
|
|
|
|
if(0)
|
|
{
|
|
// removed
|
|
}
|
|
|
|
if (objinst->obj == NULL)
|
|
{
|
|
osSyncPrintf("getsubroty: objinst has no object!");
|
|
return_null();
|
|
}
|
|
|
|
if(0)
|
|
{
|
|
// removed
|
|
}
|
|
|
|
if (objinst->obj->RootNode == NULL)
|
|
{
|
|
osSyncPrintf("getsubroty: objinst has no root part!");
|
|
return_null();
|
|
}
|
|
|
|
if(0)
|
|
{
|
|
// removed
|
|
}
|
|
#endif
|
|
|
|
root = objinst->obj->RootNode;
|
|
if ((root->Opcode & 0xFF) == 1)
|
|
{
|
|
return ((struct modeldata_root *)modelGetNodeRwData(objinst, root))->subroty;
|
|
}
|
|
|
|
return 0.0f;
|
|
}
|
|
|
|
|
|
void setsubroty(Model *model, f32 angle)
|
|
{
|
|
ModelNode* node;
|
|
#if defined(LEFTOVERDEBUG)
|
|
if (!model)
|
|
{
|
|
osSyncPrintf("setsubroty: no objinst!");
|
|
return_null();
|
|
}
|
|
|
|
if (!model->obj) //< needs to be v1 not a1
|
|
{
|
|
osSyncPrintf("setsubroty: objinst has no object!");
|
|
return_null();
|
|
}
|
|
|
|
if (!model->obj->RootNode)
|
|
{
|
|
osSyncPrintf("setsubroty: objinst has no root part!");
|
|
return_null();
|
|
}
|
|
#endif
|
|
node = model->obj->RootNode;
|
|
if ((node->Opcode & 0xff) == MODELNODE_OPCODE_HEADER)
|
|
{
|
|
ModelRwData_HeaderRecord *rwdata = modelGetNodeRwData(model, node);
|
|
f32 diff = angle - rwdata->unk14;
|
|
|
|
if (diff < 0) { diff += M_TAU_F; }
|
|
|
|
rwdata->unk30 += diff;
|
|
|
|
if (rwdata->unk30 >= M_TAU_F) { rwdata->unk30 -= M_TAU_F; }
|
|
|
|
rwdata->unk20 += diff;
|
|
|
|
if (rwdata->unk20 >= M_TAU_F) { rwdata->unk20 -= M_TAU_F; }
|
|
|
|
rwdata->unk14 = angle;
|
|
}
|
|
}
|
|
|
|
|
|
void modelSetScale(Model *objinst, f32 scale)
|
|
{
|
|
objinst->scale = scale;
|
|
}
|
|
|
|
|
|
void sub_GAME_7F06CE84(Model* arg0, f32 arg1)
|
|
{
|
|
arg0->unkb8 = arg1;
|
|
}
|
|
|
|
|
|
f32 getjointsize(Model *model, ModelNode *node)
|
|
{
|
|
Model *temp_a2;
|
|
ModelNode *temp_a1;
|
|
s32 temp_t7;
|
|
|
|
#if defined(LEFTOVERDEBUG)
|
|
if (!model)
|
|
{
|
|
osSyncPrintf("getjointsize: no objinst!\n");
|
|
return_null();
|
|
}
|
|
#endif
|
|
|
|
if (node)
|
|
{
|
|
do
|
|
{
|
|
switch (node->Opcode & 0xFF)
|
|
{
|
|
case MODELNODE_OPCODE_HEADER:
|
|
{
|
|
ModelRoData_HeaderRecord *rodata = &node->Data->Header;
|
|
return rodata->GroupsAsF32 * model->scale;
|
|
}
|
|
case MODELNODE_OPCODE_GROUP:
|
|
{
|
|
ModelRoData_GroupRecord *rodata = &node->Data->Group;
|
|
return rodata->BoundingVolumeRadius * model->scale;
|
|
}
|
|
case MODELNODE_OPCODE_OP03:
|
|
{
|
|
ModelRoData_GroupRecord *rodata = &node->Data->Group;
|
|
return rodata->BoundingVolumeRadius * model->scale;
|
|
}
|
|
case MODELNODE_OPCODE_GROUPSIMPLE:
|
|
{
|
|
ModelRoData_GroupSimpleRecord *rodata = &node->Data->GroupSimple;
|
|
return rodata->BoundingVolumeRadius * model->scale;
|
|
}
|
|
case MODELNODE_OPCODE_OP11:
|
|
{
|
|
ModelRoData_Op11Record *rodata = &node->Data->Op11;
|
|
return rodata->BoundingVolumeRadius * model->scale;
|
|
}
|
|
case MODELNODE_OPCODE_GUNFIRE:
|
|
{
|
|
ModelRoData_GunfireRecord *rodata = &node->Data->Gunfire;
|
|
return rodata->Scale * model->scale;
|
|
}
|
|
case MODELNODE_OPCODE_SHADOW:
|
|
{
|
|
ModelRoData_ShadowRecord *rodata = &node->Data->Shadow;
|
|
return rodata->Scale * model->scale;
|
|
}
|
|
case MODELNODE_OPCODE_OP14:
|
|
{
|
|
ModelRoData_Op14Record *rodata = &node->Data->Op14;
|
|
return rodata->Scale * model->scale;
|
|
}
|
|
case MODELNODE_OPCODE_INTERLINK:
|
|
{
|
|
ModelRoData_InterlinkageRecord *rodata = &node->Data->Interlinkage;
|
|
return rodata->Scale * model->scale;
|
|
}
|
|
case MODELNODE_OPCODE_OP16:
|
|
{
|
|
ModelNode_Op16Record *rodata = &node->Data->Op16;
|
|
return rodata->Scale * model->scale;
|
|
}
|
|
default:
|
|
node = node->Parent;
|
|
}
|
|
} while (node);
|
|
}
|
|
|
|
return 0.0f;
|
|
}
|
|
|
|
|
|
/**
|
|
* Address 0x7F06D00C.
|
|
* PD: model0001af80
|
|
*/
|
|
f32 getinstsize(Model *arg0)
|
|
{
|
|
#if defined(LEFTOVERDEBUG)
|
|
if (arg0 == NULL)
|
|
{
|
|
osSyncPrintf("getinstsize: no objinst!\n");
|
|
return_null();
|
|
}
|
|
|
|
if (arg0->obj == NULL)
|
|
{
|
|
osSyncPrintf("getinstsize: no objdesc!\n");
|
|
return_null();
|
|
}
|
|
#endif
|
|
|
|
return arg0->obj->BoundingVolumeRadius * arg0->scale;
|
|
}
|
|
|
|
|
|
|
|
// PD: model0001af98
|
|
void interpolate3dVectors(vec3d *v, vec3d *w, float frac)
|
|
{
|
|
v->x += (w->x - v->x) * frac;
|
|
v->y += (w->y - v->y) * frac;
|
|
v->z += (w->z - v->z) * frac;
|
|
return;
|
|
}
|
|
|
|
|
|
// PD: model0001afe8
|
|
f32 sub_GAME_7F06D0CC(f32 arg0, f32 angle, f32 mult)
|
|
{
|
|
f32 value = angle - arg0;
|
|
|
|
if (angle < arg0)
|
|
{
|
|
value += M_TAU_F;
|
|
}
|
|
|
|
if (value < M_PI_F)
|
|
{
|
|
arg0 += value * mult;
|
|
|
|
if (arg0 >= M_TAU_F)
|
|
{
|
|
arg0 -= M_TAU_F;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
arg0 -= (M_TAU_F - value) * mult;
|
|
|
|
if (arg0 < 0)
|
|
{
|
|
arg0 += M_TAU_F;
|
|
}
|
|
}
|
|
|
|
return arg0;
|
|
}
|
|
|
|
|
|
// PD: model0001b07c
|
|
void sub_GAME_7F06D160(coord3d *arg0, coord3d *arg1, f32 mult)
|
|
{
|
|
arg0->x = sub_GAME_7F06D0CC(arg0->x, arg1->x, mult);
|
|
arg0->y = sub_GAME_7F06D0CC(arg0->y, arg1->y, mult);
|
|
arg0->z = sub_GAME_7F06D0CC(arg0->z, arg1->z, mult);
|
|
}
|
|
|
|
|
|
#ifdef NONMATCHING
|
|
void sub_GAME_7F06D1CC(void) {
|
|
|
|
}
|
|
#else
|
|
GLOBAL_ASM(
|
|
.text
|
|
glabel sub_GAME_7F06D1CC
|
|
/* 0A1CFC 7F06D1CC 8C8E0008 */ lw $t6, 8($a0)
|
|
/* 0A1D00 7F06D1D0 00057880 */ sll $t7, $a1, 2
|
|
/* 0A1D04 7F06D1D4 01E57823 */ subu $t7, $t7, $a1
|
|
/* 0A1D08 7F06D1D8 000F7840 */ sll $t7, $t7, 1
|
|
/* 0A1D0C 7F06D1DC 01CF3821 */ addu $a3, $t6, $t7
|
|
/* 0A1D10 7F06D1E0 90E80002 */ lbu $t0, 2($a3)
|
|
/* 0A1D14 7F06D1E4 00001825 */ move $v1, $zero
|
|
/* 0A1D18 7F06D1E8 01004825 */ move $t1, $t0
|
|
/* 0A1D1C 7F06D1EC 5920003A */ blezl $t1, .L7F06D2D8
|
|
/* 0A1D20 7F06D1F0 94F80004 */ lhu $t8, 4($a3)
|
|
/* 0A1D24 7F06D1F4 94F80000 */ lhu $t8, ($a3)
|
|
/* 0A1D28 7F06D1F8 240E0008 */ li $t6, 8
|
|
/* 0A1D2C 7F06D1FC 8C8D0010 */ lw $t5, 0x10($a0)
|
|
/* 0A1D30 7F06D200 03061021 */ addu $v0, $t8, $a2
|
|
/* 0A1D34 7F06D204 30590007 */ andi $t9, $v0, 7
|
|
/* 0A1D38 7F06D208 01D96023 */ subu $t4, $t6, $t9
|
|
/* 0A1D3C 7F06D20C 318F00FF */ andi $t7, $t4, 0xff
|
|
/* 0A1D40 7F06D210 000228C2 */ srl $a1, $v0, 3
|
|
/* 0A1D44 7F06D214 012F082A */ slt $at, $t1, $t7
|
|
/* 0A1D48 7F06D218 318B00FF */ andi $t3, $t4, 0xff
|
|
/* 0A1D4C 7F06D21C 14200010 */ bnez $at, .L7F06D260
|
|
/* 0A1D50 7F06D220 01A55021 */ addu $t2, $t5, $a1
|
|
.L7F06D224:
|
|
/* 0A1D54 7F06D224 91590000 */ lbu $t9, ($t2)
|
|
/* 0A1D58 7F06D228 240D0001 */ li $t5, 1
|
|
/* 0A1D5C 7F06D22C 016D7004 */ sllv $t6, $t5, $t3
|
|
/* 0A1D60 7F06D230 012B1023 */ subu $v0, $t1, $t3
|
|
/* 0A1D64 7F06D234 25CFFFFF */ addiu $t7, $t6, -1
|
|
/* 0A1D68 7F06D238 304900FF */ andi $t1, $v0, 0xff
|
|
/* 0A1D6C 7F06D23C 032FC024 */ and $t8, $t9, $t7
|
|
/* 0A1D70 7F06D240 01386804 */ sllv $t5, $t8, $t1
|
|
/* 0A1D74 7F06D244 006D1825 */ or $v1, $v1, $t5
|
|
/* 0A1D78 7F06D248 306EFFFF */ andi $t6, $v1, 0xffff
|
|
/* 0A1D7C 7F06D24C 29210008 */ slti $at, $t1, 8
|
|
/* 0A1D80 7F06D250 01C01825 */ move $v1, $t6
|
|
/* 0A1D84 7F06D254 254A0001 */ addiu $t2, $t2, 1
|
|
/* 0A1D88 7F06D258 1020FFF2 */ beqz $at, .L7F06D224
|
|
/* 0A1D8C 7F06D25C 240B0008 */ li $t3, 8
|
|
.L7F06D260:
|
|
/* 0A1D90 7F06D260 1920000A */ blez $t1, .L7F06D28C
|
|
/* 0A1D94 7F06D264 01697823 */ subu $t7, $t3, $t1
|
|
/* 0A1D98 7F06D268 91590000 */ lbu $t9, ($t2)
|
|
/* 0A1D9C 7F06D26C 240D0001 */ li $t5, 1
|
|
/* 0A1DA0 7F06D270 012D7004 */ sllv $t6, $t5, $t1
|
|
/* 0A1DA4 7F06D274 01F9C007 */ srav $t8, $t9, $t7
|
|
/* 0A1DA8 7F06D278 25D9FFFF */ addiu $t9, $t6, -1
|
|
/* 0A1DAC 7F06D27C 03197824 */ and $t7, $t8, $t9
|
|
/* 0A1DB0 7F06D280 006F1825 */ or $v1, $v1, $t7
|
|
/* 0A1DB4 7F06D284 306DFFFF */ andi $t5, $v1, 0xffff
|
|
/* 0A1DB8 7F06D288 01A01825 */ move $v1, $t5
|
|
.L7F06D28C:
|
|
/* 0A1DBC 7F06D28C 310900FF */ andi $t1, $t0, 0xff
|
|
/* 0A1DC0 7F06D290 29210010 */ slti $at, $t1, 0x10
|
|
/* 0A1DC4 7F06D294 1020000F */ beqz $at, .L7F06D2D4
|
|
/* 0A1DC8 7F06D298 252E001F */ addiu $t6, $t1, 0x1f
|
|
/* 0A1DCC 7F06D29C 24180001 */ li $t8, 1
|
|
/* 0A1DD0 7F06D2A0 01D8C804 */ sllv $t9, $t8, $t6
|
|
/* 0A1DD4 7F06D2A4 00797824 */ and $t7, $v1, $t9
|
|
/* 0A1DD8 7F06D2A8 11E0000A */ beqz $t7, .L7F06D2D4
|
|
/* 0A1DDC 7F06D2AC 00601025 */ move $v0, $v1
|
|
/* 0A1DE0 7F06D2B0 240D0010 */ li $t5, 16
|
|
/* 0A1DE4 7F06D2B4 01A9C023 */ subu $t8, $t5, $t1
|
|
/* 0A1DE8 7F06D2B8 240E0001 */ li $t6, 1
|
|
/* 0A1DEC 7F06D2BC 030EC804 */ sllv $t9, $t6, $t8
|
|
/* 0A1DF0 7F06D2C0 272FFFFF */ addiu $t7, $t9, -1
|
|
/* 0A1DF4 7F06D2C4 012F6804 */ sllv $t5, $t7, $t1
|
|
/* 0A1DF8 7F06D2C8 004D1825 */ or $v1, $v0, $t5
|
|
/* 0A1DFC 7F06D2CC 306EFFFF */ andi $t6, $v1, 0xffff
|
|
/* 0A1E00 7F06D2D0 01C01825 */ move $v1, $t6
|
|
.L7F06D2D4:
|
|
/* 0A1E04 7F06D2D4 94F80004 */ lhu $t8, 4($a3)
|
|
.L7F06D2D8:
|
|
/* 0A1E08 7F06D2D8 00781821 */ addu $v1, $v1, $t8
|
|
/* 0A1E0C 7F06D2DC 03E00008 */ jr $ra
|
|
/* 0A1E10 7F06D2E0 3062FFFF */ andi $v0, $v1, 0xffff
|
|
)
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef NONMATCHING
|
|
void sub_GAME_7F06D2E4(void) {
|
|
|
|
}
|
|
#else
|
|
GLOBAL_ASM(
|
|
.text
|
|
glabel sub_GAME_7F06D2E4
|
|
/* 0A1E14 7F06D2E4 27BDFFD8 */ addiu $sp, $sp, -0x28
|
|
/* 0A1E18 7F06D2E8 AFBF0024 */ sw $ra, 0x24($sp)
|
|
/* 0A1E1C 7F06D2EC AFB20020 */ sw $s2, 0x20($sp)
|
|
/* 0A1E20 7F06D2F0 AFB1001C */ sw $s1, 0x1c($sp)
|
|
/* 0A1E24 7F06D2F4 AFB00018 */ sw $s0, 0x18($sp)
|
|
/* 0A1E28 7F06D2F8 AFA5002C */ sw $a1, 0x2c($sp)
|
|
/* 0A1E2C 7F06D2FC 94EE000C */ lhu $t6, 0xc($a3)
|
|
/* 0A1E30 7F06D300 8FAF0038 */ lw $t7, 0x38($sp)
|
|
/* 0A1E34 7F06D304 00E09025 */ move $s2, $a3
|
|
/* 0A1E38 7F06D308 00044080 */ sll $t0, $a0, 2
|
|
/* 0A1E3C 7F06D30C 01CF0019 */ multu $t6, $t7
|
|
/* 0A1E40 7F06D310 00045880 */ sll $t3, $a0, 2
|
|
/* 0A1E44 7F06D314 00008812 */ mflo $s1
|
|
/* 0A1E48 7F06D318 50A00008 */ beql $a1, $zero, .L7F06D33C
|
|
/* 0A1E4C 7F06D31C 8CCA0004 */ lw $t2, 4($a2)
|
|
/* 0A1E50 7F06D320 8CD90004 */ lw $t9, 4($a2)
|
|
/* 0A1E54 7F06D324 01044023 */ subu $t0, $t0, $a0
|
|
/* 0A1E58 7F06D328 00084040 */ sll $t0, $t0, 1
|
|
/* 0A1E5C 7F06D32C 03284821 */ addu $t1, $t9, $t0
|
|
/* 0A1E60 7F06D330 10000006 */ b .L7F06D34C
|
|
/* 0A1E64 7F06D334 95300004 */ lhu $s0, 4($t1)
|
|
/* 0A1E68 7F06D338 8CCA0004 */ lw $t2, 4($a2)
|
|
.L7F06D33C:
|
|
/* 0A1E6C 7F06D33C 01645823 */ subu $t3, $t3, $a0
|
|
/* 0A1E70 7F06D340 000B5840 */ sll $t3, $t3, 1
|
|
/* 0A1E74 7F06D344 014B6021 */ addu $t4, $t2, $t3
|
|
/* 0A1E78 7F06D348 95900002 */ lhu $s0, 2($t4)
|
|
.L7F06D34C:
|
|
/* 0A1E7C 7F06D34C 02402025 */ move $a0, $s2
|
|
/* 0A1E80 7F06D350 02002825 */ move $a1, $s0
|
|
/* 0A1E84 7F06D354 0FC1B473 */ jal sub_GAME_7F06D1CC
|
|
/* 0A1E88 7F06D358 02203025 */ move $a2, $s1
|
|
/* 0A1E8C 7F06D35C 8FAD003C */ lw $t5, 0x3c($sp)
|
|
/* 0A1E90 7F06D360 02402025 */ move $a0, $s2
|
|
/* 0A1E94 7F06D364 26050001 */ addiu $a1, $s0, 1
|
|
/* 0A1E98 7F06D368 02203025 */ move $a2, $s1
|
|
/* 0A1E9C 7F06D36C 0FC1B473 */ jal sub_GAME_7F06D1CC
|
|
/* 0A1EA0 7F06D370 A5A20000 */ sh $v0, ($t5)
|
|
/* 0A1EA4 7F06D374 8FAE003C */ lw $t6, 0x3c($sp)
|
|
/* 0A1EA8 7F06D378 02402025 */ move $a0, $s2
|
|
/* 0A1EAC 7F06D37C 26050002 */ addiu $a1, $s0, 2
|
|
/* 0A1EB0 7F06D380 02203025 */ move $a2, $s1
|
|
/* 0A1EB4 7F06D384 0FC1B473 */ jal sub_GAME_7F06D1CC
|
|
/* 0A1EB8 7F06D388 A5C20002 */ sh $v0, 2($t6)
|
|
/* 0A1EBC 7F06D38C 8FAF003C */ lw $t7, 0x3c($sp)
|
|
/* 0A1EC0 7F06D390 02402025 */ move $a0, $s2
|
|
/* 0A1EC4 7F06D394 26050003 */ addiu $a1, $s0, 3
|
|
/* 0A1EC8 7F06D398 02203025 */ move $a2, $s1
|
|
/* 0A1ECC 7F06D39C 0FC1B473 */ jal sub_GAME_7F06D1CC
|
|
/* 0A1ED0 7F06D3A0 A5E20004 */ sh $v0, 4($t7)
|
|
/* 0A1ED4 7F06D3A4 8FB8002C */ lw $t8, 0x2c($sp)
|
|
/* 0A1ED8 7F06D3A8 8FA5003C */ lw $a1, 0x3c($sp)
|
|
/* 0A1EDC 7F06D3AC 3043FFFF */ andi $v1, $v0, 0xffff
|
|
/* 0A1EE0 7F06D3B0 5300000A */ beql $t8, $zero, .L7F06D3DC
|
|
/* 0A1EE4 7F06D3B4 8FBF0024 */ lw $ra, 0x24($sp)
|
|
/* 0A1EE8 7F06D3B8 84B90000 */ lh $t9, ($a1)
|
|
/* 0A1EEC 7F06D3BC 3C090001 */ lui $t1, 1
|
|
/* 0A1EF0 7F06D3C0 00194023 */ negu $t0, $t9
|
|
/* 0A1EF4 7F06D3C4 10400004 */ beqz $v0, .L7F06D3D8
|
|
/* 0A1EF8 7F06D3C8 A4A80000 */ sh $t0, ($a1)
|
|
/* 0A1EFC 7F06D3CC 01221823 */ subu $v1, $t1, $v0
|
|
/* 0A1F00 7F06D3D0 306AFFFF */ andi $t2, $v1, 0xffff
|
|
/* 0A1F04 7F06D3D4 01401825 */ move $v1, $t2
|
|
.L7F06D3D8:
|
|
/* 0A1F08 7F06D3D8 8FBF0024 */ lw $ra, 0x24($sp)
|
|
.L7F06D3DC:
|
|
/* 0A1F0C 7F06D3DC 8FB00018 */ lw $s0, 0x18($sp)
|
|
/* 0A1F10 7F06D3E0 8FB1001C */ lw $s1, 0x1c($sp)
|
|
/* 0A1F14 7F06D3E4 8FB20020 */ lw $s2, 0x20($sp)
|
|
/* 0A1F18 7F06D3E8 27BD0028 */ addiu $sp, $sp, 0x28
|
|
/* 0A1F1C 7F06D3EC 03E00008 */ jr $ra
|
|
/* 0A1F20 7F06D3F0 00601025 */ move $v0, $v1
|
|
)
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef NONMATCHING
|
|
void sub_GAME_7F06D3F4(void) {
|
|
|
|
}
|
|
#else
|
|
GLOBAL_ASM(
|
|
.late_rodata
|
|
glabel D_80054BC0
|
|
.word 0x40c90fdb /*6.2831855*/
|
|
.text
|
|
glabel sub_GAME_7F06D3F4
|
|
/* 0A1F24 7F06D3F4 27BDFFD0 */ addiu $sp, $sp, -0x30
|
|
/* 0A1F28 7F06D3F8 8FAE0040 */ lw $t6, 0x40($sp)
|
|
/* 0A1F2C 7F06D3FC AFBF001C */ sw $ra, 0x1c($sp)
|
|
/* 0A1F30 7F06D400 27AF0028 */ addiu $t7, $sp, 0x28
|
|
/* 0A1F34 7F06D404 AFAF0014 */ sw $t7, 0x14($sp)
|
|
/* 0A1F38 7F06D408 0FC1B4B9 */ jal sub_GAME_7F06D2E4
|
|
/* 0A1F3C 7F06D40C AFAE0010 */ sw $t6, 0x10($sp)
|
|
/* 0A1F40 7F06D410 87B80028 */ lh $t8, 0x28($sp)
|
|
/* 0A1F44 7F06D414 8FA30044 */ lw $v1, 0x44($sp)
|
|
/* 0A1F48 7F06D418 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000
|
|
/* 0A1F4C 7F06D41C 44982000 */ mtc1 $t8, $f4
|
|
/* 0A1F50 7F06D420 00000000 */ nop
|
|
/* 0A1F54 7F06D424 468021A0 */ cvt.s.w $f6, $f4
|
|
/* 0A1F58 7F06D428 44822000 */ mtc1 $v0, $f4
|
|
/* 0A1F5C 7F06D42C E4660000 */ swc1 $f6, ($v1)
|
|
/* 0A1F60 7F06D430 87B9002A */ lh $t9, 0x2a($sp)
|
|
/* 0A1F64 7F06D434 468021A0 */ cvt.s.w $f6, $f4
|
|
/* 0A1F68 7F06D438 44994000 */ mtc1 $t9, $f8
|
|
/* 0A1F6C 7F06D43C 00000000 */ nop
|
|
/* 0A1F70 7F06D440 468042A0 */ cvt.s.w $f10, $f8
|
|
/* 0A1F74 7F06D444 E46A0004 */ swc1 $f10, 4($v1)
|
|
/* 0A1F78 7F06D448 87A8002C */ lh $t0, 0x2c($sp)
|
|
/* 0A1F7C 7F06D44C 44888000 */ mtc1 $t0, $f16
|
|
/* 0A1F80 7F06D450 00000000 */ nop
|
|
/* 0A1F84 7F06D454 468084A0 */ cvt.s.w $f18, $f16
|
|
/* 0A1F88 7F06D458 04410004 */ bgez $v0, .L7F06D46C
|
|
/* 0A1F8C 7F06D45C E4720008 */ swc1 $f18, 8($v1)
|
|
/* 0A1F90 7F06D460 44814000 */ mtc1 $at, $f8
|
|
/* 0A1F94 7F06D464 00000000 */ nop
|
|
/* 0A1F98 7F06D468 46083180 */ add.s $f6, $f6, $f8
|
|
.L7F06D46C:
|
|
/* 0A1F9C 7F06D46C 3C018005 */ lui $at, %hi(D_80054BC0)
|
|
/* 0A1FA0 7F06D470 C42A4BC0 */ lwc1 $f10, %lo(D_80054BC0)($at)
|
|
/* 0A1FA4 7F06D474 8FBF001C */ lw $ra, 0x1c($sp)
|
|
/* 0A1FA8 7F06D478 3C014780 */ li $at, 0x47800000 # 65536.000000
|
|
/* 0A1FAC 7F06D47C 460A3402 */ mul.s $f16, $f6, $f10
|
|
/* 0A1FB0 7F06D480 44819000 */ mtc1 $at, $f18
|
|
/* 0A1FB4 7F06D484 27BD0030 */ addiu $sp, $sp, 0x30
|
|
/* 0A1FB8 7F06D488 03E00008 */ jr $ra
|
|
/* 0A1FBC 7F06D48C 46128003 */ div.s $f0, $f16, $f18
|
|
)
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef NONMATCHING
|
|
void sub_GAME_7F06D490(void) {
|
|
|
|
}
|
|
#else
|
|
GLOBAL_ASM(
|
|
.text
|
|
glabel sub_GAME_7F06D490
|
|
/* 0A1FC0 7F06D490 27BDFFB8 */ addiu $sp, $sp, -0x48
|
|
/* 0A1FC4 7F06D494 AFBF001C */ sw $ra, 0x1c($sp)
|
|
/* 0A1FC8 7F06D498 AFB10018 */ sw $s1, 0x18($sp)
|
|
/* 0A1FCC 7F06D49C 00808825 */ move $s1, $a0
|
|
/* 0A1FD0 7F06D4A0 0FC1B1E7 */ jal modelGetNodeRwData
|
|
/* 0A1FD4 7F06D4A4 AFB00014 */ sw $s0, 0x14($sp)
|
|
/* 0A1FD8 7F06D4A8 804E0000 */ lb $t6, ($v0)
|
|
/* 0A1FDC 7F06D4AC 00408025 */ move $s0, $v0
|
|
/* 0A1FE0 7F06D4B0 55C0007B */ bnezl $t6, .L7F06D6A0
|
|
/* 0A1FE4 7F06D4B4 8FBF001C */ lw $ra, 0x1c($sp)
|
|
/* 0A1FE8 7F06D4B8 C4440034 */ lwc1 $f4, 0x34($v0)
|
|
/* 0A1FEC 7F06D4BC 44807000 */ mtc1 $zero, $f14
|
|
/* 0A1FF0 7F06D4C0 E7A40038 */ swc1 $f4, 0x38($sp)
|
|
/* 0A1FF4 7F06D4C4 C4460038 */ lwc1 $f6, 0x38($v0)
|
|
/* 0A1FF8 7F06D4C8 E7A6003C */ swc1 $f6, 0x3c($sp)
|
|
/* 0A1FFC 7F06D4CC C448003C */ lwc1 $f8, 0x3c($v0)
|
|
/* 0A2000 7F06D4D0 E7A80040 */ swc1 $f8, 0x40($sp)
|
|
/* 0A2004 7F06D4D4 C44A0030 */ lwc1 $f10, 0x30($v0)
|
|
/* 0A2008 7F06D4D8 E44A0014 */ swc1 $f10, 0x14($v0)
|
|
/* 0A200C 7F06D4DC C620002C */ lwc1 $f0, 0x2c($s1)
|
|
/* 0A2010 7F06D4E0 46007032 */ c.eq.s $f14, $f0
|
|
/* 0A2014 7F06D4E4 00000000 */ nop
|
|
/* 0A2018 7F06D4E8 4503000F */ bc1tl .L7F06D528
|
|
/* 0A201C 7F06D4EC 8E380054 */ lw $t8, 0x54($s1)
|
|
/* 0A2020 7F06D4F0 804F0001 */ lb $t7, 1($v0)
|
|
/* 0A2024 7F06D4F4 27A40038 */ addiu $a0, $sp, 0x38
|
|
/* 0A2028 7F06D4F8 51E0000B */ beql $t7, $zero, .L7F06D528
|
|
/* 0A202C 7F06D4FC 8E380054 */ lw $t8, 0x54($s1)
|
|
/* 0A2030 7F06D500 44060000 */ mfc1 $a2, $f0
|
|
/* 0A2034 7F06D504 0FC1B41F */ jal interpolate3dVectors
|
|
/* 0A2038 7F06D508 24450024 */ addiu $a1, $v0, 0x24
|
|
/* 0A203C 7F06D50C C60C0030 */ lwc1 $f12, 0x30($s0)
|
|
/* 0A2040 7F06D510 C60E0020 */ lwc1 $f14, 0x20($s0)
|
|
/* 0A2044 7F06D514 0FC1B433 */ jal sub_GAME_7F06D0CC
|
|
/* 0A2048 7F06D518 8E26002C */ lw $a2, 0x2c($s1)
|
|
/* 0A204C 7F06D51C 44807000 */ mtc1 $zero, $f14
|
|
/* 0A2050 7F06D520 E6000014 */ swc1 $f0, 0x14($s0)
|
|
/* 0A2054 7F06D524 8E380054 */ lw $t8, 0x54($s1)
|
|
.L7F06D528:
|
|
/* 0A2058 7F06D528 02202025 */ move $a0, $s1
|
|
/* 0A205C 7F06D52C 26050008 */ addiu $a1, $s0, 8
|
|
/* 0A2060 7F06D530 17000006 */ bnez $t8, .L7F06D54C
|
|
/* 0A2064 7F06D534 27A6002C */ addiu $a2, $sp, 0x2c
|
|
/* 0A2068 7F06D538 C6300084 */ lwc1 $f16, 0x84($s1)
|
|
/* 0A206C 7F06D53C 46107032 */ c.eq.s $f14, $f16
|
|
/* 0A2070 7F06D540 00000000 */ nop
|
|
/* 0A2074 7F06D544 45030015 */ bc1tl .L7F06D59C
|
|
/* 0A2078 7F06D548 C7A40038 */ lwc1 $f4, 0x38($sp)
|
|
.L7F06D54C:
|
|
/* 0A207C 7F06D54C 82190002 */ lb $t9, 2($s0)
|
|
/* 0A2080 7F06D550 C7A8003C */ lwc1 $f8, 0x3c($sp)
|
|
/* 0A2084 7F06D554 53200011 */ beql $t9, $zero, .L7F06D59C
|
|
/* 0A2088 7F06D558 C7A40038 */ lwc1 $f4, 0x38($sp)
|
|
/* 0A208C 7F06D55C C622005C */ lwc1 $f2, 0x5c($s1)
|
|
/* 0A2090 7F06D560 C6000050 */ lwc1 $f0, 0x50($s0)
|
|
/* 0A2094 7F06D564 C62C0084 */ lwc1 $f12, 0x84($s1)
|
|
/* 0A2098 7F06D568 46027032 */ c.eq.s $f14, $f2
|
|
/* 0A209C 7F06D56C 00000000 */ nop
|
|
/* 0A20A0 7F06D570 45030006 */ bc1tl .L7F06D58C
|
|
/* 0A20A4 7F06D574 46080281 */ sub.s $f10, $f0, $f8
|
|
/* 0A20A8 7F06D578 C6120044 */ lwc1 $f18, 0x44($s0)
|
|
/* 0A20AC 7F06D57C 46009101 */ sub.s $f4, $f18, $f0
|
|
/* 0A20B0 7F06D580 46022182 */ mul.s $f6, $f4, $f2
|
|
/* 0A20B4 7F06D584 46060000 */ add.s $f0, $f0, $f6
|
|
/* 0A20B8 7F06D588 46080281 */ sub.s $f10, $f0, $f8
|
|
.L7F06D58C:
|
|
/* 0A20BC 7F06D58C 460C5402 */ mul.s $f16, $f10, $f12
|
|
/* 0A20C0 7F06D590 46104480 */ add.s $f18, $f8, $f16
|
|
/* 0A20C4 7F06D594 E7B2003C */ swc1 $f18, 0x3c($sp)
|
|
/* 0A20C8 7F06D598 C7A40038 */ lwc1 $f4, 0x38($sp)
|
|
.L7F06D59C:
|
|
/* 0A20CC 7F06D59C C7A6003C */ lwc1 $f6, 0x3c($sp)
|
|
/* 0A20D0 7F06D5A0 C7AA0040 */ lwc1 $f10, 0x40($sp)
|
|
/* 0A20D4 7F06D5A4 E7A4002C */ swc1 $f4, 0x2c($sp)
|
|
/* 0A20D8 7F06D5A8 E7A60030 */ swc1 $f6, 0x30($sp)
|
|
/* 0A20DC 7F06D5AC E7AA0034 */ swc1 $f10, 0x34($sp)
|
|
/* 0A20E0 7F06D5B0 8E2200A0 */ lw $v0, 0xa0($s1)
|
|
/* 0A20E4 7F06D5B4 50400006 */ beql $v0, $zero, .L7F06D5D0
|
|
/* 0A20E8 7F06D5B8 C7A8002C */ lwc1 $f8, 0x2c($sp)
|
|
/* 0A20EC 7F06D5BC 0040F809 */ jalr $v0
|
|
/* 0A20F0 7F06D5C0 26070004 */ addiu $a3, $s0, 4
|
|
/* 0A20F4 7F06D5C4 50400036 */ beql $v0, $zero, .L7F06D6A0
|
|
/* 0A20F8 7F06D5C8 8FBF001C */ lw $ra, 0x1c($sp)
|
|
/* 0A20FC 7F06D5CC C7A8002C */ lwc1 $f8, 0x2c($sp)
|
|
.L7F06D5D0:
|
|
/* 0A2100 7F06D5D0 C7B00038 */ lwc1 $f16, 0x38($sp)
|
|
/* 0A2104 7F06D5D4 C7A40034 */ lwc1 $f4, 0x34($sp)
|
|
/* 0A2108 7F06D5D8 C7A60040 */ lwc1 $f6, 0x40($sp)
|
|
/* 0A210C 7F06D5DC 46104481 */ sub.s $f18, $f8, $f16
|
|
/* 0A2110 7F06D5E0 46062281 */ sub.s $f10, $f4, $f6
|
|
/* 0A2114 7F06D5E4 E7B20038 */ swc1 $f18, 0x38($sp)
|
|
/* 0A2118 7F06D5E8 E7AA0040 */ swc1 $f10, 0x40($sp)
|
|
/* 0A211C 7F06D5EC E6080008 */ swc1 $f8, 8($s0)
|
|
/* 0A2120 7F06D5F0 C7B00030 */ lwc1 $f16, 0x30($sp)
|
|
/* 0A2124 7F06D5F4 C6120004 */ lwc1 $f18, 4($s0)
|
|
/* 0A2128 7F06D5F8 C60A0034 */ lwc1 $f10, 0x34($s0)
|
|
/* 0A212C 7F06D5FC 82080001 */ lb $t0, 1($s0)
|
|
/* 0A2130 7F06D600 46128100 */ add.s $f4, $f16, $f18
|
|
/* 0A2134 7F06D604 C612003C */ lwc1 $f18, 0x3c($s0)
|
|
/* 0A2138 7F06D608 E604000C */ swc1 $f4, 0xc($s0)
|
|
/* 0A213C 7F06D60C C7A60034 */ lwc1 $f6, 0x34($sp)
|
|
/* 0A2140 7F06D610 E6060010 */ swc1 $f6, 0x10($s0)
|
|
/* 0A2144 7F06D614 C7A80038 */ lwc1 $f8, 0x38($sp)
|
|
/* 0A2148 7F06D618 46085400 */ add.s $f16, $f10, $f8
|
|
/* 0A214C 7F06D61C E6100034 */ swc1 $f16, 0x34($s0)
|
|
/* 0A2150 7F06D620 C7A40040 */ lwc1 $f4, 0x40($sp)
|
|
/* 0A2154 7F06D624 46049180 */ add.s $f6, $f18, $f4
|
|
/* 0A2158 7F06D628 11000009 */ beqz $t0, .L7F06D650
|
|
/* 0A215C 7F06D62C E606003C */ swc1 $f6, 0x3c($s0)
|
|
/* 0A2160 7F06D630 C60A0024 */ lwc1 $f10, 0x24($s0)
|
|
/* 0A2164 7F06D634 C7A80038 */ lwc1 $f8, 0x38($sp)
|
|
/* 0A2168 7F06D638 C612002C */ lwc1 $f18, 0x2c($s0)
|
|
/* 0A216C 7F06D63C 46085400 */ add.s $f16, $f10, $f8
|
|
/* 0A2170 7F06D640 E6100024 */ swc1 $f16, 0x24($s0)
|
|
/* 0A2174 7F06D644 C7A40040 */ lwc1 $f4, 0x40($sp)
|
|
/* 0A2178 7F06D648 46049180 */ add.s $f6, $f18, $f4
|
|
/* 0A217C 7F06D64C E606002C */ swc1 $f6, 0x2c($s0)
|
|
.L7F06D650:
|
|
/* 0A2180 7F06D650 82090002 */ lb $t1, 2($s0)
|
|
/* 0A2184 7F06D654 C7A80038 */ lwc1 $f8, 0x38($sp)
|
|
/* 0A2188 7F06D658 51200011 */ beql $t1, $zero, .L7F06D6A0
|
|
/* 0A218C 7F06D65C 8FBF001C */ lw $ra, 0x1c($sp)
|
|
/* 0A2190 7F06D660 C60A004C */ lwc1 $f10, 0x4c($s0)
|
|
/* 0A2194 7F06D664 C6120054 */ lwc1 $f18, 0x54($s0)
|
|
/* 0A2198 7F06D668 46085400 */ add.s $f16, $f10, $f8
|
|
/* 0A219C 7F06D66C C60A0040 */ lwc1 $f10, 0x40($s0)
|
|
/* 0A21A0 7F06D670 E610004C */ swc1 $f16, 0x4c($s0)
|
|
/* 0A21A4 7F06D674 C7A40040 */ lwc1 $f4, 0x40($sp)
|
|
/* 0A21A8 7F06D678 46049180 */ add.s $f6, $f18, $f4
|
|
/* 0A21AC 7F06D67C C6120048 */ lwc1 $f18, 0x48($s0)
|
|
/* 0A21B0 7F06D680 E6060054 */ swc1 $f6, 0x54($s0)
|
|
/* 0A21B4 7F06D684 C7A80038 */ lwc1 $f8, 0x38($sp)
|
|
/* 0A21B8 7F06D688 46085400 */ add.s $f16, $f10, $f8
|
|
/* 0A21BC 7F06D68C E6100040 */ swc1 $f16, 0x40($s0)
|
|
/* 0A21C0 7F06D690 C7A40040 */ lwc1 $f4, 0x40($sp)
|
|
/* 0A21C4 7F06D694 46049180 */ add.s $f6, $f18, $f4
|
|
/* 0A21C8 7F06D698 E6060048 */ swc1 $f6, 0x48($s0)
|
|
/* 0A21CC 7F06D69C 8FBF001C */ lw $ra, 0x1c($sp)
|
|
.L7F06D6A0:
|
|
/* 0A21D0 7F06D6A0 8FB00014 */ lw $s0, 0x14($sp)
|
|
/* 0A21D4 7F06D6A4 8FB10018 */ lw $s1, 0x18($sp)
|
|
/* 0A21D8 7F06D6A8 03E00008 */ jr $ra
|
|
/* 0A21DC 7F06D6AC 27BD0048 */ addiu $sp, $sp, 0x48
|
|
)
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void subcalcpos(Model *arg0)
|
|
{
|
|
struct ModelNode *root;
|
|
|
|
#if defined(LEFTOVERDEBUG)
|
|
if (arg0 == NULL)
|
|
{
|
|
osSyncPrintf("subcalcpos: no objanim!\n");
|
|
return_null();
|
|
}
|
|
|
|
if (arg0->obj == 0)
|
|
{
|
|
osSyncPrintf("subcalcpos: no objdesc!\n");
|
|
return_null();
|
|
}
|
|
#endif
|
|
|
|
root = arg0->obj->RootNode;
|
|
if ((root != NULL) && ((root->Opcode & 0xFF) == 1))
|
|
{
|
|
sub_GAME_7F06D490(arg0, root);
|
|
}
|
|
}
|
|
|
|
void process_01_group_heading(ModelRenderData* renderdata, Model* model, ModelNode* node)
|
|
{
|
|
union ModelRoData* rodata;
|
|
union ModelRwData* rwdata;
|
|
f32 scale;
|
|
f32* pos;
|
|
f32 unk14;
|
|
Mtxf* var_a3;
|
|
s32 modeltype;
|
|
RenderPosView* renderpos;
|
|
Mtxf sp20;
|
|
|
|
rodata = node->Data;
|
|
rwdata = modelGetNodeRwData(model, node);
|
|
|
|
scale = model->scale;
|
|
pos = &rwdata->Header.pos.x;
|
|
unk14 = rwdata->Header.unk14;
|
|
modeltype = (s16)rodata->Header.ModelType;
|
|
renderpos = &model->render_pos[modeltype];
|
|
|
|
if (node->Parent != NULL)
|
|
{
|
|
var_a3 = modelFindNodeMtx(model, node->Parent, 0);
|
|
}
|
|
else
|
|
{
|
|
var_a3 = renderdata->unk00;
|
|
}
|
|
|
|
if (rwdata->Header.unk18 != 0.0f)
|
|
{
|
|
unk14 = sub_GAME_7F06D0CC(unk14, rwdata->Header.unk1c, rwdata->Header.unk18);
|
|
}
|
|
|
|
if (var_a3 != NULL)
|
|
{
|
|
matrix_4x4_set_position_and_rotation_around_y(pos, unk14, &sp20);
|
|
|
|
if (scale != 1.0f)
|
|
{
|
|
matrix_scalar_multiply_2(scale, sp20.m[0]);
|
|
}
|
|
|
|
matrix_4x4_multiply_homogeneous(var_a3, &sp20, &renderpos->pos);
|
|
return;
|
|
}
|
|
|
|
matrix_4x4_set_position_and_rotation_around_y(pos, unk14, &renderpos->pos);
|
|
|
|
if (scale != 1.0f)
|
|
{
|
|
matrix_scalar_multiply_2(scale, renderpos->pos.m[0]);
|
|
}
|
|
}
|
|
|
|
|
|
#ifdef NONMATCHING
|
|
void sub_GAME_7F06D8B0(void) {
|
|
|
|
}
|
|
#else
|
|
GLOBAL_ASM(
|
|
.late_rodata
|
|
glabel D_80054BC4
|
|
.word 0x40490fdb /*3.1415927*/
|
|
glabel D_80054BC8
|
|
.word 0x40c90fdb /*6.2831855*/
|
|
glabel D_80054BCC
|
|
.word 0x40c90fdb /*6.2831855*/
|
|
glabel D_80054BD0
|
|
.word 0x40490fdb /*3.1415927*/
|
|
glabel D_80054BD4
|
|
.word 0x40c90fdb /*6.2831855*/
|
|
glabel D_80054BD8
|
|
.word 0x3f63dec6 /*0.890118*/
|
|
.text
|
|
glabel sub_GAME_7F06D8B0
|
|
/* 0A23E0 7F06D8B0 27BDFF48 */ addiu $sp, $sp, -0xb8
|
|
/* 0A23E4 7F06D8B4 AFBF0014 */ sw $ra, 0x14($sp)
|
|
/* 0A23E8 7F06D8B8 AFA500BC */ sw $a1, 0xbc($sp)
|
|
/* 0A23EC 7F06D8BC AFA700C4 */ sw $a3, 0xc4($sp)
|
|
/* 0A23F0 7F06D8C0 94CE0000 */ lhu $t6, ($a2)
|
|
/* 0A23F4 7F06D8C4 AFAE00B4 */ sw $t6, 0xb4($sp)
|
|
/* 0A23F8 7F06D8C8 8CCF0004 */ lw $t7, 4($a2)
|
|
/* 0A23FC 7F06D8CC AFAF00B0 */ sw $t7, 0xb0($sp)
|
|
/* 0A2400 7F06D8D0 85F9000E */ lh $t9, 0xe($t7)
|
|
/* 0A2404 7F06D8D4 AFB90064 */ sw $t9, 0x64($sp)
|
|
/* 0A2408 7F06D8D8 85E80010 */ lh $t0, 0x10($t7)
|
|
/* 0A240C 7F06D8DC AFA80060 */ sw $t0, 0x60($sp)
|
|
/* 0A2410 7F06D8E0 85E90012 */ lh $t1, 0x12($t7)
|
|
/* 0A2414 7F06D8E4 AFA9005C */ sw $t1, 0x5c($sp)
|
|
/* 0A2418 7F06D8E8 8CAB000C */ lw $t3, 0xc($a1)
|
|
/* 0A241C 7F06D8EC AFAB0058 */ sw $t3, 0x58($sp)
|
|
/* 0A2420 7F06D8F0 8CCC0008 */ lw $t4, 8($a2)
|
|
/* 0A2424 7F06D8F4 00003025 */ move $a2, $zero
|
|
/* 0A2428 7F06D8F8 11800006 */ beqz $t4, .L7F06D914
|
|
/* 0A242C 7F06D8FC AFAC001C */ sw $t4, 0x1c($sp)
|
|
/* 0A2430 7F06D900 00A02025 */ move $a0, $a1
|
|
/* 0A2434 7F06D904 0FC1B198 */ jal modelFindNodeMtx
|
|
/* 0A2438 7F06D908 01802825 */ move $a1, $t4
|
|
/* 0A243C 7F06D90C 10000003 */ b .L7F06D91C
|
|
/* 0A2440 7F06D910 AFA200AC */ sw $v0, 0xac($sp)
|
|
.L7F06D914:
|
|
/* 0A2444 7F06D914 8C8E0000 */ lw $t6, ($a0)
|
|
/* 0A2448 7F06D918 AFAE00AC */ sw $t6, 0xac($sp)
|
|
.L7F06D91C:
|
|
/* 0A244C 7F06D91C 8FAF00AC */ lw $t7, 0xac($sp)
|
|
/* 0A2450 7F06D920 8FA90064 */ lw $t1, 0x64($sp)
|
|
/* 0A2454 7F06D924 8FA400B0 */ lw $a0, 0xb0($sp)
|
|
/* 0A2458 7F06D928 11E00017 */ beqz $t7, .L7F06D988
|
|
/* 0A245C 7F06D92C 00095980 */ sll $t3, $t1, 6
|
|
/* 0A2460 7F06D930 8FA400B0 */ lw $a0, 0xb0($sp)
|
|
/* 0A2464 7F06D934 8FA500C4 */ lw $a1, 0xc4($sp)
|
|
/* 0A2468 7F06D938 0FC1624B */ jal matrix_4x4_set_position_and_rotation_around_xyz
|
|
/* 0A246C 7F06D93C 27A60068 */ addiu $a2, $sp, 0x68
|
|
/* 0A2470 7F06D940 8FB90064 */ lw $t9, 0x64($sp)
|
|
/* 0A2474 7F06D944 8FB80058 */ lw $t8, 0x58($sp)
|
|
/* 0A2478 7F06D948 8FA400AC */ lw $a0, 0xac($sp)
|
|
/* 0A247C 7F06D94C 00194180 */ sll $t0, $t9, 6
|
|
/* 0A2480 7F06D950 01183021 */ addu $a2, $t0, $t8
|
|
/* 0A2484 7F06D954 AFA6001C */ sw $a2, 0x1c($sp)
|
|
/* 0A2488 7F06D958 0FC16063 */ jal matrix_4x4_multiply_homogeneous
|
|
/* 0A248C 7F06D95C 27A50068 */ addiu $a1, $sp, 0x68
|
|
/* 0A2490 7F06D960 3C028003 */ lui $v0, %hi(D_80036090)
|
|
/* 0A2494 7F06D964 8C426090 */ lw $v0, %lo(D_80036090)($v0)
|
|
/* 0A2498 7F06D968 8FA6001C */ lw $a2, 0x1c($sp)
|
|
/* 0A249C 7F06D96C 8FA40064 */ lw $a0, 0x64($sp)
|
|
/* 0A24A0 7F06D970 5040000A */ beql $v0, $zero, .L7F06D99C
|
|
/* 0A24A4 7F06D974 8FAA00B4 */ lw $t2, 0xb4($sp)
|
|
/* 0A24A8 7F06D978 0040F809 */ jalr $v0
|
|
/* 0A24AC 7F06D97C 00C02825 */ move $a1, $a2
|
|
/* 0A24B0 7F06D980 10000006 */ b .L7F06D99C
|
|
/* 0A24B4 7F06D984 8FAA00B4 */ lw $t2, 0xb4($sp)
|
|
.L7F06D988:
|
|
/* 0A24B8 7F06D988 8FAC0058 */ lw $t4, 0x58($sp)
|
|
/* 0A24BC 7F06D98C 8FA500C4 */ lw $a1, 0xc4($sp)
|
|
/* 0A24C0 7F06D990 0FC1624B */ jal matrix_4x4_set_position_and_rotation_around_xyz
|
|
/* 0A24C4 7F06D994 016C3021 */ addu $a2, $t3, $t4
|
|
/* 0A24C8 7F06D998 8FAA00B4 */ lw $t2, 0xb4($sp)
|
|
.L7F06D99C:
|
|
/* 0A24CC 7F06D99C 8FA400C4 */ lw $a0, 0xc4($sp)
|
|
/* 0A24D0 7F06D9A0 314D0100 */ andi $t5, $t2, 0x100
|
|
/* 0A24D4 7F06D9A4 51A0001D */ beql $t5, $zero, .L7F06DA1C
|
|
/* 0A24D8 7F06D9A8 8FAC00B4 */ lw $t4, 0xb4($sp)
|
|
/* 0A24DC 7F06D9AC 0FC16CFD */ jal quaternion_set_rotation_around_xyzf
|
|
/* 0A24E0 7F06D9B0 27A5003C */ addiu $a1, $sp, 0x3c
|
|
/* 0A24E4 7F06D9B4 27A4003C */ addiu $a0, $sp, 0x3c
|
|
/* 0A24E8 7F06D9B8 3C053F00 */ lui $a1, 0x3f00
|
|
/* 0A24EC 7F06D9BC 0FC16F1A */ jal quaternion_7F05BC68
|
|
/* 0A24F0 7F06D9C0 27A6002C */ addiu $a2, $sp, 0x2c
|
|
/* 0A24F4 7F06D9C4 8FAE00AC */ lw $t6, 0xac($sp)
|
|
/* 0A24F8 7F06D9C8 8FB80060 */ lw $t8, 0x60($sp)
|
|
/* 0A24FC 7F06D9CC 27A5002C */ addiu $a1, $sp, 0x2c
|
|
/* 0A2500 7F06D9D0 11C0000D */ beqz $t6, .L7F06DA08
|
|
/* 0A2504 7F06D9D4 00184980 */ sll $t1, $t8, 6
|
|
/* 0A2508 7F06D9D8 8FA400B0 */ lw $a0, 0xb0($sp)
|
|
/* 0A250C 7F06D9DC 0FC16E6D */ jal quaternion_to_transform_matrix
|
|
/* 0A2510 7F06D9E0 27A60068 */ addiu $a2, $sp, 0x68
|
|
/* 0A2514 7F06D9E4 8FAF0060 */ lw $t7, 0x60($sp)
|
|
/* 0A2518 7F06D9E8 8FA80058 */ lw $t0, 0x58($sp)
|
|
/* 0A251C 7F06D9EC 8FA400AC */ lw $a0, 0xac($sp)
|
|
/* 0A2520 7F06D9F0 000FC980 */ sll $t9, $t7, 6
|
|
/* 0A2524 7F06D9F4 27A50068 */ addiu $a1, $sp, 0x68
|
|
/* 0A2528 7F06D9F8 0FC16063 */ jal matrix_4x4_multiply_homogeneous
|
|
/* 0A252C 7F06D9FC 03283021 */ addu $a2, $t9, $t0
|
|
/* 0A2530 7F06DA00 10000006 */ b .L7F06DA1C
|
|
/* 0A2534 7F06DA04 8FAC00B4 */ lw $t4, 0xb4($sp)
|
|
.L7F06DA08:
|
|
/* 0A2538 7F06DA08 8FAB0058 */ lw $t3, 0x58($sp)
|
|
/* 0A253C 7F06DA0C 8FA400B0 */ lw $a0, 0xb0($sp)
|
|
/* 0A2540 7F06DA10 0FC16E6D */ jal quaternion_to_transform_matrix
|
|
/* 0A2544 7F06DA14 012B3021 */ addu $a2, $t1, $t3
|
|
/* 0A2548 7F06DA18 8FAC00B4 */ lw $t4, 0xb4($sp)
|
|
.L7F06DA1C:
|
|
/* 0A254C 7F06DA1C 8FAD00AC */ lw $t5, 0xac($sp)
|
|
/* 0A2550 7F06DA20 318A0200 */ andi $t2, $t4, 0x200
|
|
/* 0A2554 7F06DA24 5140004A */ beql $t2, $zero, .L7F06DB50
|
|
/* 0A2558 7F06DA28 8FBF0014 */ lw $ra, 0x14($sp)
|
|
/* 0A255C 7F06DA2C 11A00004 */ beqz $t5, .L7F06DA40
|
|
/* 0A2560 7F06DA30 8FAF005C */ lw $t7, 0x5c($sp)
|
|
/* 0A2564 7F06DA34 27AE0068 */ addiu $t6, $sp, 0x68
|
|
/* 0A2568 7F06DA38 10000005 */ b .L7F06DA50
|
|
/* 0A256C 7F06DA3C AFAE0028 */ sw $t6, 0x28($sp)
|
|
.L7F06DA40:
|
|
/* 0A2570 7F06DA40 8FA80058 */ lw $t0, 0x58($sp)
|
|
/* 0A2574 7F06DA44 000FC980 */ sll $t9, $t7, 6
|
|
/* 0A2578 7F06DA48 0328C021 */ addu $t8, $t9, $t0
|
|
/* 0A257C 7F06DA4C AFB80028 */ sw $t8, 0x28($sp)
|
|
.L7F06DA50:
|
|
/* 0A2580 7F06DA50 8FA900C4 */ lw $t1, 0xc4($sp)
|
|
/* 0A2584 7F06DA54 3C018005 */ lui $at, %hi(D_80054BC4)
|
|
/* 0A2588 7F06DA58 C4244BC4 */ lwc1 $f4, %lo(D_80054BC4)($at)
|
|
/* 0A258C 7F06DA5C C52C0004 */ lwc1 $f12, 4($t1)
|
|
/* 0A2590 7F06DA60 3C018005 */ lui $at, %hi(D_80054BC8)
|
|
/* 0A2594 7F06DA64 8FA50028 */ lw $a1, 0x28($sp)
|
|
/* 0A2598 7F06DA68 4604603C */ c.lt.s $f12, $f4
|
|
/* 0A259C 7F06DA6C 00000000 */ nop
|
|
/* 0A25A0 7F06DA70 45000007 */ bc1f .L7F06DA90
|
|
/* 0A25A4 7F06DA74 00000000 */ nop
|
|
/* 0A25A8 7F06DA78 3C013F00 */ li $at, 0x3F000000 # 0.500000
|
|
/* 0A25AC 7F06DA7C 44813000 */ mtc1 $at, $f6
|
|
/* 0A25B0 7F06DA80 00000000 */ nop
|
|
/* 0A25B4 7F06DA84 46066302 */ mul.s $f12, $f12, $f6
|
|
/* 0A25B8 7F06DA88 10000009 */ b .L7F06DAB0
|
|
/* 0A25BC 7F06DA8C 00000000 */ nop
|
|
.L7F06DA90:
|
|
/* 0A25C0 7F06DA90 C4284BC8 */ lwc1 $f8, %lo(D_80054BC8)($at)
|
|
/* 0A25C4 7F06DA94 3C013F00 */ li $at, 0x3F000000 # 0.500000
|
|
/* 0A25C8 7F06DA98 44818000 */ mtc1 $at, $f16
|
|
/* 0A25CC 7F06DA9C 460C4281 */ sub.s $f10, $f8, $f12
|
|
/* 0A25D0 7F06DAA0 3C018005 */ lui $at, %hi(D_80054BCC)
|
|
/* 0A25D4 7F06DAA4 C4244BCC */ lwc1 $f4, %lo(D_80054BCC)($at)
|
|
/* 0A25D8 7F06DAA8 46105482 */ mul.s $f18, $f10, $f16
|
|
/* 0A25DC 7F06DAAC 46122301 */ sub.s $f12, $f4, $f18
|
|
.L7F06DAB0:
|
|
/* 0A25E0 7F06DAB0 0FC1617F */ jal matrix_4x4_set_rotation_around_y
|
|
/* 0A25E4 7F06DAB4 E7AC0024 */ swc1 $f12, 0x24($sp)
|
|
/* 0A25E8 7F06DAB8 3C018005 */ lui $at, %hi(D_80054BD0)
|
|
/* 0A25EC 7F06DABC C7AC0024 */ lwc1 $f12, 0x24($sp)
|
|
/* 0A25F0 7F06DAC0 C4264BD0 */ lwc1 $f6, %lo(D_80054BD0)($at)
|
|
/* 0A25F4 7F06DAC4 3C018005 */ lui $at, %hi(D_80054BD4)
|
|
/* 0A25F8 7F06DAC8 460C303E */ c.le.s $f6, $f12
|
|
/* 0A25FC 7F06DACC 00000000 */ nop
|
|
/* 0A2600 7F06DAD0 45000003 */ bc1f .L7F06DAE0
|
|
/* 0A2604 7F06DAD4 00000000 */ nop
|
|
/* 0A2608 7F06DAD8 C4284BD4 */ lwc1 $f8, %lo(D_80054BD4)($at)
|
|
/* 0A260C 7F06DADC 460C4301 */ sub.s $f12, $f8, $f12
|
|
.L7F06DAE0:
|
|
/* 0A2610 7F06DAE0 3C018005 */ lui $at, %hi(D_80054BD8)
|
|
/* 0A2614 7F06DAE4 C42A4BD8 */ lwc1 $f10, %lo(D_80054BD8)($at)
|
|
/* 0A2618 7F06DAE8 3C013FC0 */ li $at, 0x3FC00000 # 1.500000
|
|
/* 0A261C 7F06DAEC 460A603C */ c.lt.s $f12, $f10
|
|
/* 0A2620 7F06DAF0 00000000 */ nop
|
|
/* 0A2624 7F06DAF4 45020006 */ bc1fl .L7F06DB10
|
|
/* 0A2628 7F06DAF8 44816000 */ mtc1 $at, $f12
|
|
/* 0A262C 7F06DAFC 0FC16A78 */ jal sub_GAME_7F05A9E0
|
|
/* 0A2630 7F06DB00 00000000 */ nop
|
|
/* 0A2634 7F06DB04 10000003 */ b .L7F06DB14
|
|
/* 0A2638 7F06DB08 46000306 */ mov.s $f12, $f0
|
|
/* 0A263C 7F06DB0C 44816000 */ mtc1 $at, $f12
|
|
.L7F06DB10:
|
|
/* 0A2640 7F06DB10 00000000 */ nop
|
|
.L7F06DB14:
|
|
/* 0A2644 7F06DB14 0FC16293 */ jal matrix_column_3_scalar_multiply_2
|
|
/* 0A2648 7F06DB18 8FA50028 */ lw $a1, 0x28($sp)
|
|
/* 0A264C 7F06DB1C 8FA400B0 */ lw $a0, 0xb0($sp)
|
|
/* 0A2650 7F06DB20 0FC16266 */ jal matrix_4x4_set_position
|
|
/* 0A2654 7F06DB24 8FA50028 */ lw $a1, 0x28($sp)
|
|
/* 0A2658 7F06DB28 8FAB00AC */ lw $t3, 0xac($sp)
|
|
/* 0A265C 7F06DB2C 8FAC005C */ lw $t4, 0x5c($sp)
|
|
/* 0A2660 7F06DB30 8FAD0058 */ lw $t5, 0x58($sp)
|
|
/* 0A2664 7F06DB34 11600005 */ beqz $t3, .L7F06DB4C
|
|
/* 0A2668 7F06DB38 01602025 */ move $a0, $t3
|
|
/* 0A266C 7F06DB3C 000C5180 */ sll $t2, $t4, 6
|
|
/* 0A2670 7F06DB40 014D3021 */ addu $a2, $t2, $t5
|
|
/* 0A2674 7F06DB44 0FC16063 */ jal matrix_4x4_multiply_homogeneous
|
|
/* 0A2678 7F06DB48 8FA50028 */ lw $a1, 0x28($sp)
|
|
.L7F06DB4C:
|
|
/* 0A267C 7F06DB4C 8FBF0014 */ lw $ra, 0x14($sp)
|
|
.L7F06DB50:
|
|
/* 0A2680 7F06DB50 27BD00B8 */ addiu $sp, $sp, 0xb8
|
|
/* 0A2684 7F06DB54 03E00008 */ jr $ra
|
|
/* 0A2688 7F06DB58 00000000 */ nop
|
|
)
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef NONMATCHING
|
|
void sub_GAME_7F06DB5C(void) {
|
|
|
|
}
|
|
#else
|
|
GLOBAL_ASM(
|
|
.late_rodata
|
|
glabel D_80054BDC
|
|
.word 0x40490fdb /*3.1415927*/
|
|
glabel D_80054BE0
|
|
.word 0x40c90fdb /*6.2831855*/
|
|
glabel D_80054BE4
|
|
.word 0x40c90fdb /*6.2831855*/
|
|
glabel D_80054BE8
|
|
.word 0x40490fdb /*3.1415927*/
|
|
glabel D_80054BEC
|
|
.word 0x40c90fdb /*6.2831855*/
|
|
glabel D_80054BF0
|
|
.word 0x3f63dec6 /*0.890118*/
|
|
.text
|
|
glabel sub_GAME_7F06DB5C
|
|
/* 0A268C 7F06DB5C 27BDFF58 */ addiu $sp, $sp, -0xa8
|
|
/* 0A2690 7F06DB60 AFBF0014 */ sw $ra, 0x14($sp)
|
|
/* 0A2694 7F06DB64 AFA500AC */ sw $a1, 0xac($sp)
|
|
/* 0A2698 7F06DB68 AFA700B4 */ sw $a3, 0xb4($sp)
|
|
/* 0A269C 7F06DB6C 94CE0000 */ lhu $t6, ($a2)
|
|
/* 0A26A0 7F06DB70 AFAE00A4 */ sw $t6, 0xa4($sp)
|
|
/* 0A26A4 7F06DB74 8CCF0004 */ lw $t7, 4($a2)
|
|
/* 0A26A8 7F06DB78 AFAF00A0 */ sw $t7, 0xa0($sp)
|
|
/* 0A26AC 7F06DB7C 85F9000E */ lh $t9, 0xe($t7)
|
|
/* 0A26B0 7F06DB80 AFB90054 */ sw $t9, 0x54($sp)
|
|
/* 0A26B4 7F06DB84 85E80010 */ lh $t0, 0x10($t7)
|
|
/* 0A26B8 7F06DB88 AFA80050 */ sw $t0, 0x50($sp)
|
|
/* 0A26BC 7F06DB8C 85E90012 */ lh $t1, 0x12($t7)
|
|
/* 0A26C0 7F06DB90 AFA9004C */ sw $t1, 0x4c($sp)
|
|
/* 0A26C4 7F06DB94 8CAB000C */ lw $t3, 0xc($a1)
|
|
/* 0A26C8 7F06DB98 AFAB0048 */ sw $t3, 0x48($sp)
|
|
/* 0A26CC 7F06DB9C 8CCC0008 */ lw $t4, 8($a2)
|
|
/* 0A26D0 7F06DBA0 00003025 */ move $a2, $zero
|
|
/* 0A26D4 7F06DBA4 11800006 */ beqz $t4, .L7F06DBC0
|
|
/* 0A26D8 7F06DBA8 AFAC001C */ sw $t4, 0x1c($sp)
|
|
/* 0A26DC 7F06DBAC 00A02025 */ move $a0, $a1
|
|
/* 0A26E0 7F06DBB0 0FC1B198 */ jal modelFindNodeMtx
|
|
/* 0A26E4 7F06DBB4 01802825 */ move $a1, $t4
|
|
/* 0A26E8 7F06DBB8 10000003 */ b .L7F06DBC8
|
|
/* 0A26EC 7F06DBBC AFA2009C */ sw $v0, 0x9c($sp)
|
|
.L7F06DBC0:
|
|
/* 0A26F0 7F06DBC0 8C8E0000 */ lw $t6, ($a0)
|
|
/* 0A26F4 7F06DBC4 AFAE009C */ sw $t6, 0x9c($sp)
|
|
.L7F06DBC8:
|
|
/* 0A26F8 7F06DBC8 8FAF009C */ lw $t7, 0x9c($sp)
|
|
/* 0A26FC 7F06DBCC 8FA90054 */ lw $t1, 0x54($sp)
|
|
/* 0A2700 7F06DBD0 8FA400A0 */ lw $a0, 0xa0($sp)
|
|
/* 0A2704 7F06DBD4 11E00017 */ beqz $t7, .L7F06DC34
|
|
/* 0A2708 7F06DBD8 00095980 */ sll $t3, $t1, 6
|
|
/* 0A270C 7F06DBDC 8FA400A0 */ lw $a0, 0xa0($sp)
|
|
/* 0A2710 7F06DBE0 8FA500B4 */ lw $a1, 0xb4($sp)
|
|
/* 0A2714 7F06DBE4 0FC16E6D */ jal quaternion_to_transform_matrix
|
|
/* 0A2718 7F06DBE8 27A60058 */ addiu $a2, $sp, 0x58
|
|
/* 0A271C 7F06DBEC 8FB90054 */ lw $t9, 0x54($sp)
|
|
/* 0A2720 7F06DBF0 8FB80048 */ lw $t8, 0x48($sp)
|
|
/* 0A2724 7F06DBF4 8FA4009C */ lw $a0, 0x9c($sp)
|
|
/* 0A2728 7F06DBF8 00194180 */ sll $t0, $t9, 6
|
|
/* 0A272C 7F06DBFC 01183021 */ addu $a2, $t0, $t8
|
|
/* 0A2730 7F06DC00 AFA6001C */ sw $a2, 0x1c($sp)
|
|
/* 0A2734 7F06DC04 0FC16063 */ jal matrix_4x4_multiply_homogeneous
|
|
/* 0A2738 7F06DC08 27A50058 */ addiu $a1, $sp, 0x58
|
|
/* 0A273C 7F06DC0C 3C028003 */ lui $v0, %hi(D_80036090)
|
|
/* 0A2740 7F06DC10 8C426090 */ lw $v0, %lo(D_80036090)($v0)
|
|
/* 0A2744 7F06DC14 8FA6001C */ lw $a2, 0x1c($sp)
|
|
/* 0A2748 7F06DC18 8FA40054 */ lw $a0, 0x54($sp)
|
|
/* 0A274C 7F06DC1C 5040000A */ beql $v0, $zero, .L7F06DC48
|
|
/* 0A2750 7F06DC20 8FAA00A4 */ lw $t2, 0xa4($sp)
|
|
/* 0A2754 7F06DC24 0040F809 */ jalr $v0
|
|
/* 0A2758 7F06DC28 00C02825 */ move $a1, $a2
|
|
/* 0A275C 7F06DC2C 10000006 */ b .L7F06DC48
|
|
/* 0A2760 7F06DC30 8FAA00A4 */ lw $t2, 0xa4($sp)
|
|
.L7F06DC34:
|
|
/* 0A2764 7F06DC34 8FAC0048 */ lw $t4, 0x48($sp)
|
|
/* 0A2768 7F06DC38 8FA500B4 */ lw $a1, 0xb4($sp)
|
|
/* 0A276C 7F06DC3C 0FC16E6D */ jal quaternion_to_transform_matrix
|
|
/* 0A2770 7F06DC40 016C3021 */ addu $a2, $t3, $t4
|
|
/* 0A2774 7F06DC44 8FAA00A4 */ lw $t2, 0xa4($sp)
|
|
.L7F06DC48:
|
|
/* 0A2778 7F06DC48 8FA400B4 */ lw $a0, 0xb4($sp)
|
|
/* 0A277C 7F06DC4C 3C053F00 */ lui $a1, 0x3f00
|
|
/* 0A2780 7F06DC50 314D0100 */ andi $t5, $t2, 0x100
|
|
/* 0A2784 7F06DC54 51A00019 */ beql $t5, $zero, .L7F06DCBC
|
|
/* 0A2788 7F06DC58 8FAC00A4 */ lw $t4, 0xa4($sp)
|
|
/* 0A278C 7F06DC5C 0FC16F1A */ jal quaternion_7F05BC68
|
|
/* 0A2790 7F06DC60 27A6002C */ addiu $a2, $sp, 0x2c
|
|
/* 0A2794 7F06DC64 8FAE009C */ lw $t6, 0x9c($sp)
|
|
/* 0A2798 7F06DC68 8FB80050 */ lw $t8, 0x50($sp)
|
|
/* 0A279C 7F06DC6C 27A5002C */ addiu $a1, $sp, 0x2c
|
|
/* 0A27A0 7F06DC70 11C0000D */ beqz $t6, .L7F06DCA8
|
|
/* 0A27A4 7F06DC74 00184980 */ sll $t1, $t8, 6
|
|
/* 0A27A8 7F06DC78 8FA400A0 */ lw $a0, 0xa0($sp)
|
|
/* 0A27AC 7F06DC7C 0FC16E6D */ jal quaternion_to_transform_matrix
|
|
/* 0A27B0 7F06DC80 27A60058 */ addiu $a2, $sp, 0x58
|
|
/* 0A27B4 7F06DC84 8FAF0050 */ lw $t7, 0x50($sp)
|
|
/* 0A27B8 7F06DC88 8FA80048 */ lw $t0, 0x48($sp)
|
|
/* 0A27BC 7F06DC8C 8FA4009C */ lw $a0, 0x9c($sp)
|
|
/* 0A27C0 7F06DC90 000FC980 */ sll $t9, $t7, 6
|
|
/* 0A27C4 7F06DC94 27A50058 */ addiu $a1, $sp, 0x58
|
|
/* 0A27C8 7F06DC98 0FC16063 */ jal matrix_4x4_multiply_homogeneous
|
|
/* 0A27CC 7F06DC9C 03283021 */ addu $a2, $t9, $t0
|
|
/* 0A27D0 7F06DCA0 10000006 */ b .L7F06DCBC
|
|
/* 0A27D4 7F06DCA4 8FAC00A4 */ lw $t4, 0xa4($sp)
|
|
.L7F06DCA8:
|
|
/* 0A27D8 7F06DCA8 8FAB0048 */ lw $t3, 0x48($sp)
|
|
/* 0A27DC 7F06DCAC 8FA400A0 */ lw $a0, 0xa0($sp)
|
|
/* 0A27E0 7F06DCB0 0FC16E6D */ jal quaternion_to_transform_matrix
|
|
/* 0A27E4 7F06DCB4 012B3021 */ addu $a2, $t1, $t3
|
|
/* 0A27E8 7F06DCB8 8FAC00A4 */ lw $t4, 0xa4($sp)
|
|
.L7F06DCBC:
|
|
/* 0A27EC 7F06DCBC 8FAD009C */ lw $t5, 0x9c($sp)
|
|
/* 0A27F0 7F06DCC0 318A0200 */ andi $t2, $t4, 0x200
|
|
/* 0A27F4 7F06DCC4 5140004C */ beql $t2, $zero, .L7F06DDF8
|
|
/* 0A27F8 7F06DCC8 8FBF0014 */ lw $ra, 0x14($sp)
|
|
/* 0A27FC 7F06DCCC 11A00004 */ beqz $t5, .L7F06DCE0
|
|
/* 0A2800 7F06DCD0 8FAF004C */ lw $t7, 0x4c($sp)
|
|
/* 0A2804 7F06DCD4 27AE0058 */ addiu $t6, $sp, 0x58
|
|
/* 0A2808 7F06DCD8 10000005 */ b .L7F06DCF0
|
|
/* 0A280C 7F06DCDC AFAE0028 */ sw $t6, 0x28($sp)
|
|
.L7F06DCE0:
|
|
/* 0A2810 7F06DCE0 8FA80048 */ lw $t0, 0x48($sp)
|
|
/* 0A2814 7F06DCE4 000FC980 */ sll $t9, $t7, 6
|
|
/* 0A2818 7F06DCE8 0328C021 */ addu $t8, $t9, $t0
|
|
/* 0A281C 7F06DCEC AFB80028 */ sw $t8, 0x28($sp)
|
|
.L7F06DCF0:
|
|
/* 0A2820 7F06DCF0 8FA900B4 */ lw $t1, 0xb4($sp)
|
|
/* 0A2824 7F06DCF4 0FC16B2C */ jal acosf
|
|
/* 0A2828 7F06DCF8 C52C0000 */ lwc1 $f12, ($t1)
|
|
/* 0A282C 7F06DCFC 46000080 */ add.s $f2, $f0, $f0
|
|
/* 0A2830 7F06DD00 3C018005 */ lui $at, %hi(D_80054BDC)
|
|
/* 0A2834 7F06DD04 C4244BDC */ lwc1 $f4, %lo(D_80054BDC)($at)
|
|
/* 0A2838 7F06DD08 3C018005 */ lui $at, %hi(D_80054BE0)
|
|
/* 0A283C 7F06DD0C 8FA50028 */ lw $a1, 0x28($sp)
|
|
/* 0A2840 7F06DD10 4604103C */ c.lt.s $f2, $f4
|
|
/* 0A2844 7F06DD14 00000000 */ nop
|
|
/* 0A2848 7F06DD18 45000007 */ bc1f .L7F06DD38
|
|
/* 0A284C 7F06DD1C 00000000 */ nop
|
|
/* 0A2850 7F06DD20 3C013F00 */ li $at, 0x3F000000 # 0.500000
|
|
/* 0A2854 7F06DD24 44813000 */ mtc1 $at, $f6
|
|
/* 0A2858 7F06DD28 00000000 */ nop
|
|
/* 0A285C 7F06DD2C 46061302 */ mul.s $f12, $f2, $f6
|
|
/* 0A2860 7F06DD30 10000009 */ b .L7F06DD58
|
|
/* 0A2864 7F06DD34 00000000 */ nop
|
|
.L7F06DD38:
|
|
/* 0A2868 7F06DD38 C4284BE0 */ lwc1 $f8, %lo(D_80054BE0)($at)
|
|
/* 0A286C 7F06DD3C 3C013F00 */ li $at, 0x3F000000 # 0.500000
|
|
/* 0A2870 7F06DD40 44818000 */ mtc1 $at, $f16
|
|
/* 0A2874 7F06DD44 46024281 */ sub.s $f10, $f8, $f2
|
|
/* 0A2878 7F06DD48 3C018005 */ lui $at, %hi(D_80054BE4)
|
|
/* 0A287C 7F06DD4C C4244BE4 */ lwc1 $f4, %lo(D_80054BE4)($at)
|
|
/* 0A2880 7F06DD50 46105482 */ mul.s $f18, $f10, $f16
|
|
/* 0A2884 7F06DD54 46122301 */ sub.s $f12, $f4, $f18
|
|
.L7F06DD58:
|
|
/* 0A2888 7F06DD58 0FC1617F */ jal matrix_4x4_set_rotation_around_y
|
|
/* 0A288C 7F06DD5C E7AC0024 */ swc1 $f12, 0x24($sp)
|
|
/* 0A2890 7F06DD60 3C018005 */ lui $at, %hi(D_80054BE8)
|
|
/* 0A2894 7F06DD64 C7AC0024 */ lwc1 $f12, 0x24($sp)
|
|
/* 0A2898 7F06DD68 C4264BE8 */ lwc1 $f6, %lo(D_80054BE8)($at)
|
|
/* 0A289C 7F06DD6C 3C018005 */ lui $at, %hi(D_80054BEC)
|
|
/* 0A28A0 7F06DD70 460C303E */ c.le.s $f6, $f12
|
|
/* 0A28A4 7F06DD74 00000000 */ nop
|
|
/* 0A28A8 7F06DD78 45000003 */ bc1f .L7F06DD88
|
|
/* 0A28AC 7F06DD7C 00000000 */ nop
|
|
/* 0A28B0 7F06DD80 C4284BEC */ lwc1 $f8, %lo(D_80054BEC)($at)
|
|
/* 0A28B4 7F06DD84 460C4301 */ sub.s $f12, $f8, $f12
|
|
.L7F06DD88:
|
|
/* 0A28B8 7F06DD88 3C018005 */ lui $at, %hi(D_80054BF0)
|
|
/* 0A28BC 7F06DD8C C42A4BF0 */ lwc1 $f10, %lo(D_80054BF0)($at)
|
|
/* 0A28C0 7F06DD90 3C013FC0 */ li $at, 0x3FC00000 # 1.500000
|
|
/* 0A28C4 7F06DD94 460A603C */ c.lt.s $f12, $f10
|
|
/* 0A28C8 7F06DD98 00000000 */ nop
|
|
/* 0A28CC 7F06DD9C 45020006 */ bc1fl .L7F06DDB8
|
|
/* 0A28D0 7F06DDA0 44816000 */ mtc1 $at, $f12
|
|
/* 0A28D4 7F06DDA4 0FC16A78 */ jal sub_GAME_7F05A9E0
|
|
/* 0A28D8 7F06DDA8 00000000 */ nop
|
|
/* 0A28DC 7F06DDAC 10000003 */ b .L7F06DDBC
|
|
/* 0A28E0 7F06DDB0 46000306 */ mov.s $f12, $f0
|
|
/* 0A28E4 7F06DDB4 44816000 */ mtc1 $at, $f12
|
|
.L7F06DDB8:
|
|
/* 0A28E8 7F06DDB8 00000000 */ nop
|
|
.L7F06DDBC:
|
|
/* 0A28EC 7F06DDBC 0FC16293 */ jal matrix_column_3_scalar_multiply_2
|
|
/* 0A28F0 7F06DDC0 8FA50028 */ lw $a1, 0x28($sp)
|
|
/* 0A28F4 7F06DDC4 8FA400A0 */ lw $a0, 0xa0($sp)
|
|
/* 0A28F8 7F06DDC8 0FC16266 */ jal matrix_4x4_set_position
|
|
/* 0A28FC 7F06DDCC 8FA50028 */ lw $a1, 0x28($sp)
|
|
/* 0A2900 7F06DDD0 8FAB009C */ lw $t3, 0x9c($sp)
|
|
/* 0A2904 7F06DDD4 8FAC004C */ lw $t4, 0x4c($sp)
|
|
/* 0A2908 7F06DDD8 8FAD0048 */ lw $t5, 0x48($sp)
|
|
/* 0A290C 7F06DDDC 11600005 */ beqz $t3, .L7F06DDF4
|
|
/* 0A2910 7F06DDE0 01602025 */ move $a0, $t3
|
|
/* 0A2914 7F06DDE4 000C5180 */ sll $t2, $t4, 6
|
|
/* 0A2918 7F06DDE8 014D3021 */ addu $a2, $t2, $t5
|
|
/* 0A291C 7F06DDEC 0FC16063 */ jal matrix_4x4_multiply_homogeneous
|
|
/* 0A2920 7F06DDF0 8FA50028 */ lw $a1, 0x28($sp)
|
|
.L7F06DDF4:
|
|
/* 0A2924 7F06DDF4 8FBF0014 */ lw $ra, 0x14($sp)
|
|
.L7F06DDF8:
|
|
/* 0A2928 7F06DDF8 27BD00A8 */ addiu $sp, $sp, 0xa8
|
|
/* 0A292C 7F06DDFC 03E00008 */ jr $ra
|
|
/* 0A2930 7F06DE00 00000000 */ nop
|
|
)
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef NONMATCHING
|
|
void sub_GAME_7F06DE04(void) {
|
|
|
|
}
|
|
#else
|
|
GLOBAL_ASM(
|
|
.text
|
|
glabel sub_GAME_7F06DE04
|
|
/* 0A2934 7F06DE04 30CF0007 */ andi $t7, $a2, 7
|
|
/* 0A2938 7F06DE08 24180008 */ li $t8, 8
|
|
/* 0A293C 7F06DE0C 030F4823 */ subu $t1, $t8, $t7
|
|
/* 0A2940 7F06DE10 30AA00FF */ andi $t2, $a1, 0xff
|
|
/* 0A2944 7F06DE14 313900FF */ andi $t9, $t1, 0xff
|
|
/* 0A2948 7F06DE18 000638C2 */ srl $a3, $a2, 3
|
|
/* 0A294C 7F06DE1C 0159082A */ slt $at, $t2, $t9
|
|
/* 0A2950 7F06DE20 AFA50004 */ sw $a1, 4($sp)
|
|
/* 0A2954 7F06DE24 00001825 */ move $v1, $zero
|
|
/* 0A2958 7F06DE28 314200FF */ andi $v0, $t2, 0xff
|
|
/* 0A295C 7F06DE2C 00872021 */ addu $a0, $a0, $a3
|
|
/* 0A2960 7F06DE30 14200013 */ bnez $at, .L7F06DE80
|
|
/* 0A2964 7F06DE34 312800FF */ andi $t0, $t1, 0xff
|
|
/* 0A2968 7F06DE38 00402825 */ move $a1, $v0
|
|
.L7F06DE3C:
|
|
/* 0A296C 7F06DE3C 908C0000 */ lbu $t4, ($a0)
|
|
/* 0A2970 7F06DE40 240D0001 */ li $t5, 1
|
|
/* 0A2974 7F06DE44 010D7004 */ sllv $t6, $t5, $t0
|
|
/* 0A2978 7F06DE48 25CFFFFF */ addiu $t7, $t6, -1
|
|
/* 0A297C 7F06DE4C 00A81023 */ subu $v0, $a1, $t0
|
|
/* 0A2980 7F06DE50 018FC024 */ and $t8, $t4, $t7
|
|
/* 0A2984 7F06DE54 304500FF */ andi $a1, $v0, 0xff
|
|
/* 0A2988 7F06DE58 3319FFFF */ andi $t9, $t8, 0xffff
|
|
/* 0A298C 7F06DE5C 00B95804 */ sllv $t3, $t9, $a1
|
|
/* 0A2990 7F06DE60 006B1825 */ or $v1, $v1, $t3
|
|
/* 0A2994 7F06DE64 306DFFFF */ andi $t5, $v1, 0xffff
|
|
/* 0A2998 7F06DE68 28A10008 */ slti $at, $a1, 8
|
|
/* 0A299C 7F06DE6C 00A01025 */ move $v0, $a1
|
|
/* 0A29A0 7F06DE70 01A01825 */ move $v1, $t5
|
|
/* 0A29A4 7F06DE74 24840001 */ addiu $a0, $a0, 1
|
|
/* 0A29A8 7F06DE78 1020FFF0 */ beqz $at, .L7F06DE3C
|
|
/* 0A29AC 7F06DE7C 24080008 */ li $t0, 8
|
|
.L7F06DE80:
|
|
/* 0A29B0 7F06DE80 1840000A */ blez $v0, .L7F06DEAC
|
|
/* 0A29B4 7F06DE84 01026023 */ subu $t4, $t0, $v0
|
|
/* 0A29B8 7F06DE88 908E0000 */ lbu $t6, ($a0)
|
|
/* 0A29BC 7F06DE8C 24180001 */ li $t8, 1
|
|
/* 0A29C0 7F06DE90 0058C804 */ sllv $t9, $t8, $v0
|
|
/* 0A29C4 7F06DE94 272BFFFF */ addiu $t3, $t9, -1
|
|
/* 0A29C8 7F06DE98 018E7807 */ srav $t7, $t6, $t4
|
|
/* 0A29CC 7F06DE9C 01EB6824 */ and $t5, $t7, $t3
|
|
/* 0A29D0 7F06DEA0 006D1825 */ or $v1, $v1, $t5
|
|
/* 0A29D4 7F06DEA4 306EFFFF */ andi $t6, $v1, 0xffff
|
|
/* 0A29D8 7F06DEA8 01C01825 */ move $v1, $t6
|
|
.L7F06DEAC:
|
|
/* 0A29DC 7F06DEAC 240C0010 */ li $t4, 16
|
|
/* 0A29E0 7F06DEB0 018AC023 */ subu $t8, $t4, $t2
|
|
/* 0A29E4 7F06DEB4 03031804 */ sllv $v1, $v1, $t8
|
|
/* 0A29E8 7F06DEB8 03E00008 */ jr $ra
|
|
/* 0A29EC 7F06DEBC 3062FFFF */ andi $v0, $v1, 0xffff
|
|
)
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef NONMATCHING
|
|
void sub_GAME_7F06DEC0(void) {
|
|
|
|
}
|
|
#else
|
|
GLOBAL_ASM(
|
|
.late_rodata
|
|
glabel D_80054BF4
|
|
.word 0x40c90fdb /*6.2831855*/
|
|
.text
|
|
glabel sub_GAME_7F06DEC0
|
|
/* 0A29F0 7F06DEC0 27BDFFD0 */ addiu $sp, $sp, -0x30
|
|
/* 0A29F4 7F06DEC4 AFBF001C */ sw $ra, 0x1c($sp)
|
|
/* 0A29F8 7F06DEC8 AFB00018 */ sw $s0, 0x18($sp)
|
|
/* 0A29FC 7F06DECC AFA50034 */ sw $a1, 0x34($sp)
|
|
/* 0A2A00 7F06DED0 AFA60038 */ sw $a2, 0x38($sp)
|
|
/* 0A2A04 7F06DED4 10A0000B */ beqz $a1, .L7F06DF04
|
|
/* 0A2A08 7F06DED8 90F00006 */ lbu $s0, 6($a3)
|
|
/* 0A2A0C 7F06DEDC 8CD80004 */ lw $t8, 4($a2)
|
|
/* 0A2A10 7F06DEE0 0004C880 */ sll $t9, $a0, 2
|
|
/* 0A2A14 7F06DEE4 0324C823 */ subu $t9, $t9, $a0
|
|
/* 0A2A18 7F06DEE8 0019C840 */ sll $t9, $t9, 1
|
|
/* 0A2A1C 7F06DEEC 03194021 */ addu $t0, $t8, $t9
|
|
/* 0A2A20 7F06DEF0 95090004 */ lhu $t1, 4($t0)
|
|
/* 0A2A24 7F06DEF4 01300019 */ multu $t1, $s0
|
|
/* 0A2A28 7F06DEF8 00003012 */ mflo $a2
|
|
/* 0A2A2C 7F06DEFC 1000000D */ b .L7F06DF34
|
|
/* 0A2A30 7F06DF00 8FA40040 */ lw $a0, 0x40($sp)
|
|
.L7F06DF04:
|
|
/* 0A2A34 7F06DF04 8FAA0038 */ lw $t2, 0x38($sp)
|
|
/* 0A2A38 7F06DF08 00046080 */ sll $t4, $a0, 2
|
|
/* 0A2A3C 7F06DF0C 01846023 */ subu $t4, $t4, $a0
|
|
/* 0A2A40 7F06DF10 8D4B0004 */ lw $t3, 4($t2)
|
|
/* 0A2A44 7F06DF14 000C6040 */ sll $t4, $t4, 1
|
|
/* 0A2A48 7F06DF18 016C6821 */ addu $t5, $t3, $t4
|
|
/* 0A2A4C 7F06DF1C 95AE0002 */ lhu $t6, 2($t5)
|
|
/* 0A2A50 7F06DF20 01D00019 */ multu $t6, $s0
|
|
/* 0A2A54 7F06DF24 00003012 */ mflo $a2
|
|
/* 0A2A58 7F06DF28 00000000 */ nop
|
|
/* 0A2A5C 7F06DF2C 00000000 */ nop
|
|
/* 0A2A60 7F06DF30 8FA40040 */ lw $a0, 0x40($sp)
|
|
.L7F06DF34:
|
|
/* 0A2A64 7F06DF34 320500FF */ andi $a1, $s0, 0xff
|
|
/* 0A2A68 7F06DF38 0FC1B781 */ jal sub_GAME_7F06DE04
|
|
/* 0A2A6C 7F06DF3C AFA6002C */ sw $a2, 0x2c($sp)
|
|
/* 0A2A70 7F06DF40 8FA6002C */ lw $a2, 0x2c($sp)
|
|
/* 0A2A74 7F06DF44 A7A20024 */ sh $v0, 0x24($sp)
|
|
/* 0A2A78 7F06DF48 8FA40040 */ lw $a0, 0x40($sp)
|
|
/* 0A2A7C 7F06DF4C 00D03021 */ addu $a2, $a2, $s0
|
|
/* 0A2A80 7F06DF50 AFA6002C */ sw $a2, 0x2c($sp)
|
|
/* 0A2A84 7F06DF54 0FC1B781 */ jal sub_GAME_7F06DE04
|
|
/* 0A2A88 7F06DF58 320500FF */ andi $a1, $s0, 0xff
|
|
/* 0A2A8C 7F06DF5C 8FA6002C */ lw $a2, 0x2c($sp)
|
|
/* 0A2A90 7F06DF60 A7A20026 */ sh $v0, 0x26($sp)
|
|
/* 0A2A94 7F06DF64 8FA40040 */ lw $a0, 0x40($sp)
|
|
/* 0A2A98 7F06DF68 320500FF */ andi $a1, $s0, 0xff
|
|
/* 0A2A9C 7F06DF6C 0FC1B781 */ jal sub_GAME_7F06DE04
|
|
/* 0A2AA0 7F06DF70 00D03021 */ addu $a2, $a2, $s0
|
|
/* 0A2AA4 7F06DF74 97AF0024 */ lhu $t7, 0x24($sp)
|
|
/* 0A2AA8 7F06DF78 3C018005 */ lui $at, %hi(D_80054BF4)
|
|
/* 0A2AAC 7F06DF7C C4204BF4 */ lwc1 $f0, %lo(D_80054BF4)($at)
|
|
/* 0A2AB0 7F06DF80 448F2000 */ mtc1 $t7, $f4
|
|
/* 0A2AB4 7F06DF84 3C014780 */ li $at, 0x47800000 # 65536.000000
|
|
/* 0A2AB8 7F06DF88 44811000 */ mtc1 $at, $f2
|
|
/* 0A2ABC 7F06DF8C 8FA30044 */ lw $v1, 0x44($sp)
|
|
/* 0A2AC0 7F06DF90 A7A20028 */ sh $v0, 0x28($sp)
|
|
/* 0A2AC4 7F06DF94 05E10005 */ bgez $t7, .L7F06DFAC
|
|
/* 0A2AC8 7F06DF98 468021A0 */ cvt.s.w $f6, $f4
|
|
/* 0A2ACC 7F06DF9C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000
|
|
/* 0A2AD0 7F06DFA0 44814000 */ mtc1 $at, $f8
|
|
/* 0A2AD4 7F06DFA4 00000000 */ nop
|
|
/* 0A2AD8 7F06DFA8 46083180 */ add.s $f6, $f6, $f8
|
|
.L7F06DFAC:
|
|
/* 0A2ADC 7F06DFAC 46003282 */ mul.s $f10, $f6, $f0
|
|
/* 0A2AE0 7F06DFB0 46025403 */ div.s $f16, $f10, $f2
|
|
/* 0A2AE4 7F06DFB4 E4700000 */ swc1 $f16, ($v1)
|
|
/* 0A2AE8 7F06DFB8 8FB80034 */ lw $t8, 0x34($sp)
|
|
/* 0A2AEC 7F06DFBC 97A20026 */ lhu $v0, 0x26($sp)
|
|
/* 0A2AF0 7F06DFC0 97AB0026 */ lhu $t3, 0x26($sp)
|
|
/* 0A2AF4 7F06DFC4 5300001D */ beql $t8, $zero, .L7F06E03C
|
|
/* 0A2AF8 7F06DFC8 448B5000 */ mtc1 $t3, $f10
|
|
/* 0A2AFC 7F06DFCC 10400009 */ beqz $v0, .L7F06DFF4
|
|
/* 0A2B00 7F06DFD0 3C190001 */ lui $t9, 1
|
|
/* 0A2B04 7F06DFD4 03224023 */ subu $t0, $t9, $v0
|
|
/* 0A2B08 7F06DFD8 44889000 */ mtc1 $t0, $f18
|
|
/* 0A2B0C 7F06DFDC 00000000 */ nop
|
|
/* 0A2B10 7F06DFE0 46809120 */ cvt.s.w $f4, $f18
|
|
/* 0A2B14 7F06DFE4 46002202 */ mul.s $f8, $f4, $f0
|
|
/* 0A2B18 7F06DFE8 46024183 */ div.s $f6, $f8, $f2
|
|
/* 0A2B1C 7F06DFEC 10000004 */ b .L7F06E000
|
|
/* 0A2B20 7F06DFF0 E4660004 */ swc1 $f6, 4($v1)
|
|
.L7F06DFF4:
|
|
/* 0A2B24 7F06DFF4 44805000 */ mtc1 $zero, $f10
|
|
/* 0A2B28 7F06DFF8 00000000 */ nop
|
|
/* 0A2B2C 7F06DFFC E46A0004 */ swc1 $f10, 4($v1)
|
|
.L7F06E000:
|
|
/* 0A2B30 7F06E000 97A20028 */ lhu $v0, 0x28($sp)
|
|
/* 0A2B34 7F06E004 3C090001 */ lui $t1, 1
|
|
/* 0A2B38 7F06E008 10400008 */ beqz $v0, .L7F06E02C
|
|
/* 0A2B3C 7F06E00C 01225023 */ subu $t2, $t1, $v0
|
|
/* 0A2B40 7F06E010 448A8000 */ mtc1 $t2, $f16
|
|
/* 0A2B44 7F06E014 00000000 */ nop
|
|
/* 0A2B48 7F06E018 468084A0 */ cvt.s.w $f18, $f16
|
|
/* 0A2B4C 7F06E01C 46009102 */ mul.s $f4, $f18, $f0
|
|
/* 0A2B50 7F06E020 46022203 */ div.s $f8, $f4, $f2
|
|
/* 0A2B54 7F06E024 10000019 */ b .L7F06E08C
|
|
/* 0A2B58 7F06E028 E4680008 */ swc1 $f8, 8($v1)
|
|
.L7F06E02C:
|
|
/* 0A2B5C 7F06E02C 44803000 */ mtc1 $zero, $f6
|
|
/* 0A2B60 7F06E030 10000016 */ b .L7F06E08C
|
|
/* 0A2B64 7F06E034 E4660008 */ swc1 $f6, 8($v1)
|
|
/* 0A2B68 7F06E038 448B5000 */ mtc1 $t3, $f10
|
|
.L7F06E03C:
|
|
/* 0A2B6C 7F06E03C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000
|
|
/* 0A2B70 7F06E040 05610004 */ bgez $t3, .L7F06E054
|
|
/* 0A2B74 7F06E044 46805420 */ cvt.s.w $f16, $f10
|
|
/* 0A2B78 7F06E048 44819000 */ mtc1 $at, $f18
|
|
/* 0A2B7C 7F06E04C 00000000 */ nop
|
|
/* 0A2B80 7F06E050 46128400 */ add.s $f16, $f16, $f18
|
|
.L7F06E054:
|
|
/* 0A2B84 7F06E054 46008102 */ mul.s $f4, $f16, $f0
|
|
/* 0A2B88 7F06E058 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000
|
|
/* 0A2B8C 7F06E05C 46022203 */ div.s $f8, $f4, $f2
|
|
/* 0A2B90 7F06E060 E4680004 */ swc1 $f8, 4($v1)
|
|
/* 0A2B94 7F06E064 97AC0028 */ lhu $t4, 0x28($sp)
|
|
/* 0A2B98 7F06E068 448C3000 */ mtc1 $t4, $f6
|
|
/* 0A2B9C 7F06E06C 05810004 */ bgez $t4, .L7F06E080
|
|
/* 0A2BA0 7F06E070 468032A0 */ cvt.s.w $f10, $f6
|
|
/* 0A2BA4 7F06E074 44819000 */ mtc1 $at, $f18
|
|
/* 0A2BA8 7F06E078 00000000 */ nop
|
|
/* 0A2BAC 7F06E07C 46125280 */ add.s $f10, $f10, $f18
|
|
.L7F06E080:
|
|
/* 0A2BB0 7F06E080 46005402 */ mul.s $f16, $f10, $f0
|
|
/* 0A2BB4 7F06E084 46028103 */ div.s $f4, $f16, $f2
|
|
/* 0A2BB8 7F06E088 E4640008 */ swc1 $f4, 8($v1)
|
|
.L7F06E08C:
|
|
/* 0A2BBC 7F06E08C 8FBF001C */ lw $ra, 0x1c($sp)
|
|
/* 0A2BC0 7F06E090 8FB00018 */ lw $s0, 0x18($sp)
|
|
/* 0A2BC4 7F06E094 27BD0030 */ addiu $sp, $sp, 0x30
|
|
/* 0A2BC8 7F06E098 03E00008 */ jr $ra
|
|
/* 0A2BCC 7F06E09C 00000000 */ nop
|
|
)
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef NONMATCHING
|
|
void process_02_position(ModelRenderData *arg0, Model *model, ModelNode *node) {
|
|
|
|
}
|
|
#else
|
|
void process_02_position(ModelRenderData *arg0, Model *model, ModelNode *node);
|
|
GLOBAL_ASM(
|
|
.text
|
|
glabel process_02_position
|
|
/* 0A2BD0 7F06E0A0 27BDFF68 */ addiu $sp, $sp, -0x98
|
|
/* 0A2BD4 7F06E0A4 AFBF0024 */ sw $ra, 0x24($sp)
|
|
/* 0A2BD8 7F06E0A8 AFB00020 */ sw $s0, 0x20($sp)
|
|
/* 0A2BDC 7F06E0AC AFA40098 */ sw $a0, 0x98($sp)
|
|
/* 0A2BE0 7F06E0B0 AFA600A0 */ sw $a2, 0xa0($sp)
|
|
/* 0A2BE4 7F06E0B4 3C188003 */ lui $t8, %hi(D_80036094)
|
|
/* 0A2BE8 7F06E0B8 8CC20004 */ lw $v0, 4($a2)
|
|
/* 0A2BEC 7F06E0BC 8CAF0008 */ lw $t7, 8($a1)
|
|
/* 0A2BF0 7F06E0C0 27186094 */ addiu $t8, %lo(D_80036094) # addiu $t8, $t8, 0x6094
|
|
/* 0A2BF4 7F06E0C4 8F010000 */ lw $at, ($t8)
|
|
/* 0A2BF8 7F06E0C8 9444000C */ lhu $a0, 0xc($v0)
|
|
/* 0A2BFC 7F06E0CC 8DE60004 */ lw $a2, 4($t7)
|
|
/* 0A2C00 7F06E0D0 27A30080 */ addiu $v1, $sp, 0x80
|
|
/* 0A2C04 7F06E0D4 AC610000 */ sw $at, ($v1)
|
|
/* 0A2C08 7F06E0D8 8F090004 */ lw $t1, 4($t8)
|
|
/* 0A2C0C 7F06E0DC 00A08025 */ move $s0, $a1
|
|
/* 0A2C10 7F06E0E0 AC690004 */ sw $t1, 4($v1)
|
|
/* 0A2C14 7F06E0E4 8F010008 */ lw $at, 8($t8)
|
|
/* 0A2C18 7F06E0E8 AC610008 */ sw $at, 8($v1)
|
|
/* 0A2C1C 7F06E0EC 8E0A0034 */ lw $t2, 0x34($s0)
|
|
/* 0A2C20 7F06E0F0 8E070020 */ lw $a3, 0x20($s0)
|
|
/* 0A2C24 7F06E0F4 80A50024 */ lb $a1, 0x24($a1)
|
|
/* 0A2C28 7F06E0F8 AFA30014 */ sw $v1, 0x14($sp)
|
|
/* 0A2C2C 7F06E0FC AFA40090 */ sw $a0, 0x90($sp)
|
|
/* 0A2C30 7F06E100 AFA6008C */ sw $a2, 0x8c($sp)
|
|
/* 0A2C34 7F06E104 0FC1B7B0 */ jal sub_GAME_7F06DEC0
|
|
/* 0A2C38 7F06E108 AFAA0010 */ sw $t2, 0x10($sp)
|
|
/* 0A2C3C 7F06E10C 44802000 */ mtc1 $zero, $f4
|
|
/* 0A2C40 7F06E110 C606002C */ lwc1 $f6, 0x2c($s0)
|
|
/* 0A2C44 7F06E114 3C0B8003 */ lui $t3, %hi(D_800360A0)
|
|
/* 0A2C48 7F06E118 256B60A0 */ addiu $t3, %lo(D_800360A0) # addiu $t3, $t3, 0x60a0
|
|
/* 0A2C4C 7F06E11C 46062032 */ c.eq.s $f4, $f6
|
|
/* 0A2C50 7F06E120 00000000 */ nop
|
|
/* 0A2C54 7F06E124 45030015 */ bc1tl .L7F06E17C
|
|
/* 0A2C58 7F06E128 44804000 */ mtc1 $zero, $f8
|
|
/* 0A2C5C 7F06E12C 8D610000 */ lw $at, ($t3)
|
|
/* 0A2C60 7F06E130 27A20074 */ addiu $v0, $sp, 0x74
|
|
/* 0A2C64 7F06E134 AC410000 */ sw $at, ($v0)
|
|
/* 0A2C68 7F06E138 8D6D0004 */ lw $t5, 4($t3)
|
|
/* 0A2C6C 7F06E13C AC4D0004 */ sw $t5, 4($v0)
|
|
/* 0A2C70 7F06E140 8D610008 */ lw $at, 8($t3)
|
|
/* 0A2C74 7F06E144 AC410008 */ sw $at, 8($v0)
|
|
/* 0A2C78 7F06E148 8E0E0038 */ lw $t6, 0x38($s0)
|
|
/* 0A2C7C 7F06E14C 8E070020 */ lw $a3, 0x20($s0)
|
|
/* 0A2C80 7F06E150 82050024 */ lb $a1, 0x24($s0)
|
|
/* 0A2C84 7F06E154 AFA20014 */ sw $v0, 0x14($sp)
|
|
/* 0A2C88 7F06E158 8FA6008C */ lw $a2, 0x8c($sp)
|
|
/* 0A2C8C 7F06E15C 8FA40090 */ lw $a0, 0x90($sp)
|
|
/* 0A2C90 7F06E160 0FC1B7B0 */ jal sub_GAME_7F06DEC0
|
|
/* 0A2C94 7F06E164 AFAE0010 */ sw $t6, 0x10($sp)
|
|
/* 0A2C98 7F06E168 27A40080 */ addiu $a0, $sp, 0x80
|
|
/* 0A2C9C 7F06E16C 27A50074 */ addiu $a1, $sp, 0x74
|
|
/* 0A2CA0 7F06E170 0FC1B458 */ jal sub_GAME_7F06D160
|
|
/* 0A2CA4 7F06E174 8E06002C */ lw $a2, 0x2c($s0)
|
|
/* 0A2CA8 7F06E178 44804000 */ mtc1 $zero, $f8
|
|
.L7F06E17C:
|
|
/* 0A2CAC 7F06E17C C60A0084 */ lwc1 $f10, 0x84($s0)
|
|
/* 0A2CB0 7F06E180 3C0F8003 */ lui $t7, %hi(D_800360AC)
|
|
/* 0A2CB4 7F06E184 25EF60AC */ addiu $t7, %lo(D_800360AC) # addiu $t7, $t7, 0x60ac
|
|
/* 0A2CB8 7F06E188 460A4032 */ c.eq.s $f8, $f10
|
|
/* 0A2CBC 7F06E18C 8FA40098 */ lw $a0, 0x98($sp)
|
|
/* 0A2CC0 7F06E190 02002825 */ move $a1, $s0
|
|
/* 0A2CC4 7F06E194 8FA600A0 */ lw $a2, 0xa0($sp)
|
|
/* 0A2CC8 7F06E198 45010040 */ bc1t .L7F06E29C
|
|
/* 0A2CCC 7F06E19C 00000000 */ nop
|
|
/* 0A2CD0 7F06E1A0 8DE10000 */ lw $at, ($t7)
|
|
/* 0A2CD4 7F06E1A4 27A20068 */ addiu $v0, $sp, 0x68
|
|
/* 0A2CD8 7F06E1A8 AC410000 */ sw $at, ($v0)
|
|
/* 0A2CDC 7F06E1AC 8DF90004 */ lw $t9, 4($t7)
|
|
/* 0A2CE0 7F06E1B0 AC590004 */ sw $t9, 4($v0)
|
|
/* 0A2CE4 7F06E1B4 8DE10008 */ lw $at, 8($t7)
|
|
/* 0A2CE8 7F06E1B8 AC410008 */ sw $at, 8($v0)
|
|
/* 0A2CEC 7F06E1BC 8E180064 */ lw $t8, 0x64($s0)
|
|
/* 0A2CF0 7F06E1C0 8E070054 */ lw $a3, 0x54($s0)
|
|
/* 0A2CF4 7F06E1C4 82050025 */ lb $a1, 0x25($s0)
|
|
/* 0A2CF8 7F06E1C8 AFA20014 */ sw $v0, 0x14($sp)
|
|
/* 0A2CFC 7F06E1CC 8FA6008C */ lw $a2, 0x8c($sp)
|
|
/* 0A2D00 7F06E1D0 8FA40090 */ lw $a0, 0x90($sp)
|
|
/* 0A2D04 7F06E1D4 0FC1B7B0 */ jal sub_GAME_7F06DEC0
|
|
/* 0A2D08 7F06E1D8 AFB80010 */ sw $t8, 0x10($sp)
|
|
/* 0A2D0C 7F06E1DC 44808000 */ mtc1 $zero, $f16
|
|
/* 0A2D10 7F06E1E0 C612005C */ lwc1 $f18, 0x5c($s0)
|
|
/* 0A2D14 7F06E1E4 3C098003 */ lui $t1, %hi(D_800360B8)
|
|
/* 0A2D18 7F06E1E8 252960B8 */ addiu $t1, %lo(D_800360B8) # addiu $t1, $t1, 0x60b8
|
|
/* 0A2D1C 7F06E1EC 46128032 */ c.eq.s $f16, $f18
|
|
/* 0A2D20 7F06E1F0 00000000 */ nop
|
|
/* 0A2D24 7F06E1F4 45030015 */ bc1tl .L7F06E24C
|
|
/* 0A2D28 7F06E1F8 27A40080 */ addiu $a0, $sp, 0x80
|
|
/* 0A2D2C 7F06E1FC 8D210000 */ lw $at, ($t1)
|
|
/* 0A2D30 7F06E200 27A2002C */ addiu $v0, $sp, 0x2c
|
|
/* 0A2D34 7F06E204 AC410000 */ sw $at, ($v0)
|
|
/* 0A2D38 7F06E208 8D2C0004 */ lw $t4, 4($t1)
|
|
/* 0A2D3C 7F06E20C AC4C0004 */ sw $t4, 4($v0)
|
|
/* 0A2D40 7F06E210 8D210008 */ lw $at, 8($t1)
|
|
/* 0A2D44 7F06E214 AC410008 */ sw $at, 8($v0)
|
|
/* 0A2D48 7F06E218 8E0B0068 */ lw $t3, 0x68($s0)
|
|
/* 0A2D4C 7F06E21C 8E070054 */ lw $a3, 0x54($s0)
|
|
/* 0A2D50 7F06E220 82050025 */ lb $a1, 0x25($s0)
|
|
/* 0A2D54 7F06E224 AFA20014 */ sw $v0, 0x14($sp)
|
|
/* 0A2D58 7F06E228 8FA6008C */ lw $a2, 0x8c($sp)
|
|
/* 0A2D5C 7F06E22C 8FA40090 */ lw $a0, 0x90($sp)
|
|
/* 0A2D60 7F06E230 0FC1B7B0 */ jal sub_GAME_7F06DEC0
|
|
/* 0A2D64 7F06E234 AFAB0010 */ sw $t3, 0x10($sp)
|
|
/* 0A2D68 7F06E238 27A40068 */ addiu $a0, $sp, 0x68
|
|
/* 0A2D6C 7F06E23C 27A5002C */ addiu $a1, $sp, 0x2c
|
|
/* 0A2D70 7F06E240 0FC1B458 */ jal sub_GAME_7F06D160
|
|
/* 0A2D74 7F06E244 8E06005C */ lw $a2, 0x5c($s0)
|
|
/* 0A2D78 7F06E248 27A40080 */ addiu $a0, $sp, 0x80
|
|
.L7F06E24C:
|
|
/* 0A2D7C 7F06E24C 0FC16CFD */ jal quaternion_set_rotation_around_xyzf
|
|
/* 0A2D80 7F06E250 27A50058 */ addiu $a1, $sp, 0x58
|
|
/* 0A2D84 7F06E254 27A40068 */ addiu $a0, $sp, 0x68
|
|
/* 0A2D88 7F06E258 0FC16CFD */ jal quaternion_set_rotation_around_xyzf
|
|
/* 0A2D8C 7F06E25C 27A50048 */ addiu $a1, $sp, 0x48
|
|
/* 0A2D90 7F06E260 27A40058 */ addiu $a0, $sp, 0x58
|
|
/* 0A2D94 7F06E264 0FC16F84 */ jal quaternion_ensure_shortest_path
|
|
/* 0A2D98 7F06E268 27A50048 */ addiu $a1, $sp, 0x48
|
|
/* 0A2D9C 7F06E26C 27A40058 */ addiu $a0, $sp, 0x58
|
|
/* 0A2DA0 7F06E270 27A50048 */ addiu $a1, $sp, 0x48
|
|
/* 0A2DA4 7F06E274 8E060084 */ lw $a2, 0x84($s0)
|
|
/* 0A2DA8 7F06E278 0FC16E82 */ jal quaternion_slerp
|
|
/* 0A2DAC 7F06E27C 27A70038 */ addiu $a3, $sp, 0x38
|
|
/* 0A2DB0 7F06E280 8FA40098 */ lw $a0, 0x98($sp)
|
|
/* 0A2DB4 7F06E284 02002825 */ move $a1, $s0
|
|
/* 0A2DB8 7F06E288 8FA600A0 */ lw $a2, 0xa0($sp)
|
|
/* 0A2DBC 7F06E28C 0FC1B6D7 */ jal sub_GAME_7F06DB5C
|
|
/* 0A2DC0 7F06E290 27A70038 */ addiu $a3, $sp, 0x38
|
|
/* 0A2DC4 7F06E294 10000004 */ b .L7F06E2A8
|
|
/* 0A2DC8 7F06E298 8FBF0024 */ lw $ra, 0x24($sp)
|
|
.L7F06E29C:
|
|
/* 0A2DCC 7F06E29C 0FC1B62C */ jal sub_GAME_7F06D8B0
|
|
/* 0A2DD0 7F06E2A0 27A70080 */ addiu $a3, $sp, 0x80
|
|
/* 0A2DD4 7F06E2A4 8FBF0024 */ lw $ra, 0x24($sp)
|
|
.L7F06E2A8:
|
|
/* 0A2DD8 7F06E2A8 8FB00020 */ lw $s0, 0x20($sp)
|
|
/* 0A2DDC 7F06E2AC 27BD0098 */ addiu $sp, $sp, 0x98
|
|
/* 0A2DE0 7F06E2B0 03E00008 */ jr $ra
|
|
/* 0A2DE4 7F06E2B4 00000000 */ nop
|
|
)
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef NONMATCHING
|
|
void sub_GAME_7F06E2B8(void) {
|
|
|
|
}
|
|
#else
|
|
GLOBAL_ASM(
|
|
.late_rodata
|
|
glabel D_80054BF8
|
|
.word 0x40490fdb /*3.1415927*/
|
|
glabel D_80054BFC
|
|
.word 0x40c90fdb /*6.2831855*/
|
|
glabel D_80054C00
|
|
.word 0x40c90fdb /*6.2831855*/
|
|
glabel D_80054C04
|
|
.word 0x40490fdb /*3.1415927*/
|
|
glabel D_80054C08
|
|
.word 0x40c90fdb /*6.2831855*/
|
|
glabel D_80054C0C
|
|
.word 0x3f63dec6 /*0.890118*/
|
|
.text
|
|
glabel sub_GAME_7F06E2B8
|
|
/* 0A2DE8 7F06E2B8 27BDFF60 */ addiu $sp, $sp, -0xa0
|
|
/* 0A2DEC 7F06E2BC AFBF001C */ sw $ra, 0x1c($sp)
|
|
/* 0A2DF0 7F06E2C0 F7B40010 */ sdc1 $f20, 0x10($sp)
|
|
/* 0A2DF4 7F06E2C4 AFA500A4 */ sw $a1, 0xa4($sp)
|
|
/* 0A2DF8 7F06E2C8 94CE0000 */ lhu $t6, ($a2)
|
|
/* 0A2DFC 7F06E2CC 4487A000 */ mtc1 $a3, $f20
|
|
/* 0A2E00 7F06E2D0 AFAE009C */ sw $t6, 0x9c($sp)
|
|
/* 0A2E04 7F06E2D4 8CCF0004 */ lw $t7, 4($a2)
|
|
/* 0A2E08 7F06E2D8 AFAF0098 */ sw $t7, 0x98($sp)
|
|
/* 0A2E0C 7F06E2DC 85F90010 */ lh $t9, 0x10($t7)
|
|
/* 0A2E10 7F06E2E0 85E3000E */ lh $v1, 0xe($t7)
|
|
/* 0A2E14 7F06E2E4 AFB90048 */ sw $t9, 0x48($sp)
|
|
/* 0A2E18 7F06E2E8 85E80012 */ lh $t0, 0x12($t7)
|
|
/* 0A2E1C 7F06E2EC AFA80044 */ sw $t0, 0x44($sp)
|
|
/* 0A2E20 7F06E2F0 8CAA000C */ lw $t2, 0xc($a1)
|
|
/* 0A2E24 7F06E2F4 AFAA0040 */ sw $t2, 0x40($sp)
|
|
/* 0A2E28 7F06E2F8 8CC70008 */ lw $a3, 8($a2)
|
|
/* 0A2E2C 7F06E2FC 00003025 */ move $a2, $zero
|
|
/* 0A2E30 7F06E300 50E00009 */ beql $a3, $zero, .L7F06E328
|
|
/* 0A2E34 7F06E304 8C8B0000 */ lw $t3, ($a0)
|
|
/* 0A2E38 7F06E308 00A02025 */ move $a0, $a1
|
|
/* 0A2E3C 7F06E30C 00E02825 */ move $a1, $a3
|
|
/* 0A2E40 7F06E310 0FC1B198 */ jal modelFindNodeMtx
|
|
/* 0A2E44 7F06E314 AFA3004C */ sw $v1, 0x4c($sp)
|
|
/* 0A2E48 7F06E318 8FA3004C */ lw $v1, 0x4c($sp)
|
|
/* 0A2E4C 7F06E31C 10000003 */ b .L7F06E32C
|
|
/* 0A2E50 7F06E320 AFA20094 */ sw $v0, 0x94($sp)
|
|
/* 0A2E54 7F06E324 8C8B0000 */ lw $t3, ($a0)
|
|
.L7F06E328:
|
|
/* 0A2E58 7F06E328 AFAB0094 */ sw $t3, 0x94($sp)
|
|
.L7F06E32C:
|
|
/* 0A2E5C 7F06E32C 8FAC0094 */ lw $t4, 0x94($sp)
|
|
/* 0A2E60 7F06E330 8FA40098 */ lw $a0, 0x98($sp)
|
|
/* 0A2E64 7F06E334 00037980 */ sll $t7, $v1, 6
|
|
/* 0A2E68 7F06E338 1180000F */ beqz $t4, .L7F06E378
|
|
/* 0A2E6C 7F06E33C 8FB90040 */ lw $t9, 0x40($sp)
|
|
/* 0A2E70 7F06E340 4405A000 */ mfc1 $a1, $f20
|
|
/* 0A2E74 7F06E344 8FA40098 */ lw $a0, 0x98($sp)
|
|
/* 0A2E78 7F06E348 27A60050 */ addiu $a2, $sp, 0x50
|
|
/* 0A2E7C 7F06E34C 0FC16134 */ jal matrix_4x4_set_position_and_rotation_around_y
|
|
/* 0A2E80 7F06E350 AFA3004C */ sw $v1, 0x4c($sp)
|
|
/* 0A2E84 7F06E354 8FA3004C */ lw $v1, 0x4c($sp)
|
|
/* 0A2E88 7F06E358 8FAE0040 */ lw $t6, 0x40($sp)
|
|
/* 0A2E8C 7F06E35C 8FA40094 */ lw $a0, 0x94($sp)
|
|
/* 0A2E90 7F06E360 00036980 */ sll $t5, $v1, 6
|
|
/* 0A2E94 7F06E364 27A50050 */ addiu $a1, $sp, 0x50
|
|
/* 0A2E98 7F06E368 0FC16063 */ jal matrix_4x4_multiply_homogeneous
|
|
/* 0A2E9C 7F06E36C 01AE3021 */ addu $a2, $t5, $t6
|
|
/* 0A2EA0 7F06E370 10000005 */ b .L7F06E388
|
|
/* 0A2EA4 7F06E374 8FB8009C */ lw $t8, 0x9c($sp)
|
|
.L7F06E378:
|
|
/* 0A2EA8 7F06E378 4405A000 */ mfc1 $a1, $f20
|
|
/* 0A2EAC 7F06E37C 0FC16134 */ jal matrix_4x4_set_position_and_rotation_around_y
|
|
/* 0A2EB0 7F06E380 01F93021 */ addu $a2, $t7, $t9
|
|
/* 0A2EB4 7F06E384 8FB8009C */ lw $t8, 0x9c($sp)
|
|
.L7F06E388:
|
|
/* 0A2EB8 7F06E388 3C018005 */ lui $at, %hi(D_80054BF8)
|
|
/* 0A2EBC 7F06E38C 8FAA0094 */ lw $t2, 0x94($sp)
|
|
/* 0A2EC0 7F06E390 33020100 */ andi $v0, $t8, 0x100
|
|
/* 0A2EC4 7F06E394 14400003 */ bnez $v0, .L7F06E3A4
|
|
/* 0A2EC8 7F06E398 33030200 */ andi $v1, $t8, 0x200
|
|
/* 0A2ECC 7F06E39C 10600017 */ beqz $v1, .L7F06E3FC
|
|
/* 0A2ED0 7F06E3A0 00000000 */ nop
|
|
.L7F06E3A4:
|
|
/* 0A2ED4 7F06E3A4 C4244BF8 */ lwc1 $f4, %lo(D_80054BF8)($at)
|
|
/* 0A2ED8 7F06E3A8 8FA3009C */ lw $v1, 0x9c($sp)
|
|
/* 0A2EDC 7F06E3AC 3C018005 */ lui $at, %hi(D_80054BFC)
|
|
/* 0A2EE0 7F06E3B0 4604A03C */ c.lt.s $f20, $f4
|
|
/* 0A2EE4 7F06E3B4 30680200 */ andi $t0, $v1, 0x200
|
|
/* 0A2EE8 7F06E3B8 01001825 */ move $v1, $t0
|
|
/* 0A2EEC 7F06E3BC 45000007 */ bc1f .L7F06E3DC
|
|
/* 0A2EF0 7F06E3C0 00000000 */ nop
|
|
/* 0A2EF4 7F06E3C4 3C013F00 */ li $at, 0x3F000000 # 0.500000
|
|
/* 0A2EF8 7F06E3C8 44813000 */ mtc1 $at, $f6
|
|
/* 0A2EFC 7F06E3CC 00000000 */ nop
|
|
/* 0A2F00 7F06E3D0 4606A502 */ mul.s $f20, $f20, $f6
|
|
/* 0A2F04 7F06E3D4 10000009 */ b .L7F06E3FC
|
|
/* 0A2F08 7F06E3D8 00000000 */ nop
|
|
.L7F06E3DC:
|
|
/* 0A2F0C 7F06E3DC C4284BFC */ lwc1 $f8, %lo(D_80054BFC)($at)
|
|
/* 0A2F10 7F06E3E0 3C013F00 */ li $at, 0x3F000000 # 0.500000
|
|
/* 0A2F14 7F06E3E4 44818000 */ mtc1 $at, $f16
|
|
/* 0A2F18 7F06E3E8 46144281 */ sub.s $f10, $f8, $f20
|
|
/* 0A2F1C 7F06E3EC 3C018005 */ lui $at, %hi(D_80054C00)
|
|
/* 0A2F20 7F06E3F0 C4244C00 */ lwc1 $f4, %lo(D_80054C00)($at)
|
|
/* 0A2F24 7F06E3F4 46105482 */ mul.s $f18, $f10, $f16
|
|
/* 0A2F28 7F06E3F8 46122501 */ sub.s $f20, $f4, $f18
|
|
.L7F06E3FC:
|
|
/* 0A2F2C 7F06E3FC 10400019 */ beqz $v0, .L7F06E464
|
|
/* 0A2F30 7F06E400 00000000 */ nop
|
|
/* 0A2F34 7F06E404 1140000F */ beqz $t2, .L7F06E444
|
|
/* 0A2F38 7F06E408 8FA40098 */ lw $a0, 0x98($sp)
|
|
/* 0A2F3C 7F06E40C 4405A000 */ mfc1 $a1, $f20
|
|
/* 0A2F40 7F06E410 8FA40098 */ lw $a0, 0x98($sp)
|
|
/* 0A2F44 7F06E414 27A60050 */ addiu $a2, $sp, 0x50
|
|
/* 0A2F48 7F06E418 0FC16134 */ jal matrix_4x4_set_position_and_rotation_around_y
|
|
/* 0A2F4C 7F06E41C AFA30024 */ sw $v1, 0x24($sp)
|
|
/* 0A2F50 7F06E420 8FA90048 */ lw $t1, 0x48($sp)
|
|
/* 0A2F54 7F06E424 8FAC0040 */ lw $t4, 0x40($sp)
|
|
/* 0A2F58 7F06E428 8FA40094 */ lw $a0, 0x94($sp)
|
|
/* 0A2F5C 7F06E42C 00095980 */ sll $t3, $t1, 6
|
|
/* 0A2F60 7F06E430 27A50050 */ addiu $a1, $sp, 0x50
|
|
/* 0A2F64 7F06E434 0FC16063 */ jal matrix_4x4_multiply_homogeneous
|
|
/* 0A2F68 7F06E438 016C3021 */ addu $a2, $t3, $t4
|
|
/* 0A2F6C 7F06E43C 10000009 */ b .L7F06E464
|
|
/* 0A2F70 7F06E440 8FA30024 */ lw $v1, 0x24($sp)
|
|
.L7F06E444:
|
|
/* 0A2F74 7F06E444 8FAD0048 */ lw $t5, 0x48($sp)
|
|
/* 0A2F78 7F06E448 8FAF0040 */ lw $t7, 0x40($sp)
|
|
/* 0A2F7C 7F06E44C 4405A000 */ mfc1 $a1, $f20
|
|
/* 0A2F80 7F06E450 000D7180 */ sll $t6, $t5, 6
|
|
/* 0A2F84 7F06E454 AFA30024 */ sw $v1, 0x24($sp)
|
|
/* 0A2F88 7F06E458 0FC16134 */ jal matrix_4x4_set_position_and_rotation_around_y
|
|
/* 0A2F8C 7F06E45C 01CF3021 */ addu $a2, $t6, $t7
|
|
/* 0A2F90 7F06E460 8FA30024 */ lw $v1, 0x24($sp)
|
|
.L7F06E464:
|
|
/* 0A2F94 7F06E464 10600031 */ beqz $v1, .L7F06E52C
|
|
/* 0A2F98 7F06E468 8FB90094 */ lw $t9, 0x94($sp)
|
|
/* 0A2F9C 7F06E46C 13200004 */ beqz $t9, .L7F06E480
|
|
/* 0A2FA0 7F06E470 4600A306 */ mov.s $f12, $f20
|
|
/* 0A2FA4 7F06E474 27B80050 */ addiu $t8, $sp, 0x50
|
|
/* 0A2FA8 7F06E478 10000006 */ b .L7F06E494
|
|
/* 0A2FAC 7F06E47C AFB80030 */ sw $t8, 0x30($sp)
|
|
.L7F06E480:
|
|
/* 0A2FB0 7F06E480 8FA80044 */ lw $t0, 0x44($sp)
|
|
/* 0A2FB4 7F06E484 8FA90040 */ lw $t1, 0x40($sp)
|
|
/* 0A2FB8 7F06E488 00085180 */ sll $t2, $t0, 6
|
|
/* 0A2FBC 7F06E48C 01495821 */ addu $t3, $t2, $t1
|
|
/* 0A2FC0 7F06E490 AFAB0030 */ sw $t3, 0x30($sp)
|
|
.L7F06E494:
|
|
/* 0A2FC4 7F06E494 0FC1617F */ jal matrix_4x4_set_rotation_around_y
|
|
/* 0A2FC8 7F06E498 8FA50030 */ lw $a1, 0x30($sp)
|
|
/* 0A2FCC 7F06E49C 3C018005 */ lui $at, %hi(D_80054C04)
|
|
/* 0A2FD0 7F06E4A0 C4264C04 */ lwc1 $f6, %lo(D_80054C04)($at)
|
|
/* 0A2FD4 7F06E4A4 3C018005 */ lui $at, %hi(D_80054C08)
|
|
/* 0A2FD8 7F06E4A8 4614303E */ c.le.s $f6, $f20
|
|
/* 0A2FDC 7F06E4AC 00000000 */ nop
|
|
/* 0A2FE0 7F06E4B0 45000003 */ bc1f .L7F06E4C0
|
|
/* 0A2FE4 7F06E4B4 00000000 */ nop
|
|
/* 0A2FE8 7F06E4B8 C4284C08 */ lwc1 $f8, %lo(D_80054C08)($at)
|
|
/* 0A2FEC 7F06E4BC 46144501 */ sub.s $f20, $f8, $f20
|
|
.L7F06E4C0:
|
|
/* 0A2FF0 7F06E4C0 3C018005 */ lui $at, %hi(D_80054C0C)
|
|
/* 0A2FF4 7F06E4C4 C42A4C0C */ lwc1 $f10, %lo(D_80054C0C)($at)
|
|
/* 0A2FF8 7F06E4C8 3C013FC0 */ li $at, 0x3FC00000 # 1.500000
|
|
/* 0A2FFC 7F06E4CC 460AA03C */ c.lt.s $f20, $f10
|
|
/* 0A3000 7F06E4D0 00000000 */ nop
|
|
/* 0A3004 7F06E4D4 45020006 */ bc1fl .L7F06E4F0
|
|
/* 0A3008 7F06E4D8 44816000 */ mtc1 $at, $f12
|
|
/* 0A300C 7F06E4DC 0FC16A78 */ jal sub_GAME_7F05A9E0
|
|
/* 0A3010 7F06E4E0 4600A306 */ mov.s $f12, $f20
|
|
/* 0A3014 7F06E4E4 10000003 */ b .L7F06E4F4
|
|
/* 0A3018 7F06E4E8 46000306 */ mov.s $f12, $f0
|
|
/* 0A301C 7F06E4EC 44816000 */ mtc1 $at, $f12
|
|
.L7F06E4F0:
|
|
/* 0A3020 7F06E4F0 00000000 */ nop
|
|
.L7F06E4F4:
|
|
/* 0A3024 7F06E4F4 0FC16293 */ jal matrix_column_3_scalar_multiply_2
|
|
/* 0A3028 7F06E4F8 8FA50030 */ lw $a1, 0x30($sp)
|
|
/* 0A302C 7F06E4FC 8FA40098 */ lw $a0, 0x98($sp)
|
|
/* 0A3030 7F06E500 0FC16266 */ jal matrix_4x4_set_position
|
|
/* 0A3034 7F06E504 8FA50030 */ lw $a1, 0x30($sp)
|
|
/* 0A3038 7F06E508 8FAC0094 */ lw $t4, 0x94($sp)
|
|
/* 0A303C 7F06E50C 8FAD0044 */ lw $t5, 0x44($sp)
|
|
/* 0A3040 7F06E510 8FAF0040 */ lw $t7, 0x40($sp)
|
|
/* 0A3044 7F06E514 11800005 */ beqz $t4, .L7F06E52C
|
|
/* 0A3048 7F06E518 01802025 */ move $a0, $t4
|
|
/* 0A304C 7F06E51C 000D7180 */ sll $t6, $t5, 6
|
|
/* 0A3050 7F06E520 01CF3021 */ addu $a2, $t6, $t7
|
|
/* 0A3054 7F06E524 0FC16063 */ jal matrix_4x4_multiply_homogeneous
|
|
/* 0A3058 7F06E528 8FA50030 */ lw $a1, 0x30($sp)
|
|
.L7F06E52C:
|
|
/* 0A305C 7F06E52C 8FBF001C */ lw $ra, 0x1c($sp)
|
|
/* 0A3060 7F06E530 D7B40010 */ ldc1 $f20, 0x10($sp)
|
|
/* 0A3064 7F06E534 27BD00A0 */ addiu $sp, $sp, 0xa0
|
|
/* 0A3068 7F06E538 03E00008 */ jr $ra
|
|
/* 0A306C 7F06E53C 00000000 */ nop
|
|
)
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef NONMATCHING
|
|
void sub_GAME_7F06E540(void) {
|
|
|
|
}
|
|
#else
|
|
GLOBAL_ASM(
|
|
.late_rodata
|
|
glabel D_80054C10
|
|
.word 0x40c90fdb /*6.2831855*/
|
|
glabel D_80054C14
|
|
.word 0x40c90fdb /*6.2831855*/
|
|
.text
|
|
glabel sub_GAME_7F06E540
|
|
/* 0A3070 7F06E540 27BDFFD8 */ addiu $sp, $sp, -0x28
|
|
/* 0A3074 7F06E544 AFBF0014 */ sw $ra, 0x14($sp)
|
|
/* 0A3078 7F06E548 AFA5002C */ sw $a1, 0x2c($sp)
|
|
/* 0A307C 7F06E54C AFA60030 */ sw $a2, 0x30($sp)
|
|
/* 0A3080 7F06E550 90EE0006 */ lbu $t6, 6($a3)
|
|
/* 0A3084 7F06E554 44801000 */ mtc1 $zero, $f2
|
|
/* 0A3088 7F06E558 10A0000C */ beqz $a1, .L7F06E58C
|
|
/* 0A308C 7F06E55C A3AE001F */ sb $t6, 0x1f($sp)
|
|
/* 0A3090 7F06E560 8CD90004 */ lw $t9, 4($a2)
|
|
/* 0A3094 7F06E564 00044080 */ sll $t0, $a0, 2
|
|
/* 0A3098 7F06E568 01044023 */ subu $t0, $t0, $a0
|
|
/* 0A309C 7F06E56C 00084040 */ sll $t0, $t0, 1
|
|
/* 0A30A0 7F06E570 03284821 */ addu $t1, $t9, $t0
|
|
/* 0A30A4 7F06E574 952A0004 */ lhu $t2, 4($t1)
|
|
/* 0A30A8 7F06E578 31CB00FF */ andi $t3, $t6, 0xff
|
|
/* 0A30AC 7F06E57C 014B0019 */ multu $t2, $t3
|
|
/* 0A30B0 7F06E580 00003012 */ mflo $a2
|
|
/* 0A30B4 7F06E584 1000000E */ b .L7F06E5C0
|
|
/* 0A30B8 7F06E588 8FA40038 */ lw $a0, 0x38($sp)
|
|
.L7F06E58C:
|
|
/* 0A30BC 7F06E58C 8FAC0030 */ lw $t4, 0x30($sp)
|
|
/* 0A30C0 7F06E590 00047080 */ sll $t6, $a0, 2
|
|
/* 0A30C4 7F06E594 01C47023 */ subu $t6, $t6, $a0
|
|
/* 0A30C8 7F06E598 8D8D0004 */ lw $t5, 4($t4)
|
|
/* 0A30CC 7F06E59C 000E7040 */ sll $t6, $t6, 1
|
|
/* 0A30D0 7F06E5A0 93B9001F */ lbu $t9, 0x1f($sp)
|
|
/* 0A30D4 7F06E5A4 01AE7821 */ addu $t7, $t5, $t6
|
|
/* 0A30D8 7F06E5A8 95F80002 */ lhu $t8, 2($t7)
|
|
/* 0A30DC 7F06E5AC 03190019 */ multu $t8, $t9
|
|
/* 0A30E0 7F06E5B0 00003012 */ mflo $a2
|
|
/* 0A30E4 7F06E5B4 00000000 */ nop
|
|
/* 0A30E8 7F06E5B8 00000000 */ nop
|
|
/* 0A30EC 7F06E5BC 8FA40038 */ lw $a0, 0x38($sp)
|
|
.L7F06E5C0:
|
|
/* 0A30F0 7F06E5C0 93A5001F */ lbu $a1, 0x1f($sp)
|
|
/* 0A30F4 7F06E5C4 0FC1B781 */ jal sub_GAME_7F06DE04
|
|
/* 0A30F8 7F06E5C8 E7A20018 */ swc1 $f2, 0x18($sp)
|
|
/* 0A30FC 7F06E5CC 8FA8002C */ lw $t0, 0x2c($sp)
|
|
/* 0A3100 7F06E5D0 C7A20018 */ lwc1 $f2, 0x18($sp)
|
|
/* 0A3104 7F06E5D4 8FBF0014 */ lw $ra, 0x14($sp)
|
|
/* 0A3108 7F06E5D8 1100000D */ beqz $t0, .L7F06E610
|
|
/* 0A310C 7F06E5DC 27BD0028 */ addiu $sp, $sp, 0x28
|
|
/* 0A3110 7F06E5E0 10400018 */ beqz $v0, .L7F06E644
|
|
/* 0A3114 7F06E5E4 3C090001 */ lui $t1, 1
|
|
/* 0A3118 7F06E5E8 01225023 */ subu $t2, $t1, $v0
|
|
/* 0A311C 7F06E5EC 448A2000 */ mtc1 $t2, $f4
|
|
/* 0A3120 7F06E5F0 3C018005 */ lui $at, %hi(D_80054C10)
|
|
/* 0A3124 7F06E5F4 C4284C10 */ lwc1 $f8, %lo(D_80054C10)($at)
|
|
/* 0A3128 7F06E5F8 468021A0 */ cvt.s.w $f6, $f4
|
|
/* 0A312C 7F06E5FC 3C014780 */ li $at, 0x47800000 # 65536.000000
|
|
/* 0A3130 7F06E600 44818000 */ mtc1 $at, $f16
|
|
/* 0A3134 7F06E604 46083282 */ mul.s $f10, $f6, $f8
|
|
/* 0A3138 7F06E608 1000000E */ b .L7F06E644
|
|
/* 0A313C 7F06E60C 46105083 */ div.s $f2, $f10, $f16
|
|
.L7F06E610:
|
|
/* 0A3140 7F06E610 44829000 */ mtc1 $v0, $f18
|
|
/* 0A3144 7F06E614 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000
|
|
/* 0A3148 7F06E618 04410004 */ bgez $v0, .L7F06E62C
|
|
/* 0A314C 7F06E61C 46809120 */ cvt.s.w $f4, $f18
|
|
/* 0A3150 7F06E620 44813000 */ mtc1 $at, $f6
|
|
/* 0A3154 7F06E624 00000000 */ nop
|
|
/* 0A3158 7F06E628 46062100 */ add.s $f4, $f4, $f6
|
|
.L7F06E62C:
|
|
/* 0A315C 7F06E62C 3C018005 */ lui $at, %hi(D_80054C14)
|
|
/* 0A3160 7F06E630 C4284C14 */ lwc1 $f8, %lo(D_80054C14)($at)
|
|
/* 0A3164 7F06E634 3C014780 */ li $at, 0x47800000 # 65536.000000
|
|
/* 0A3168 7F06E638 44818000 */ mtc1 $at, $f16
|
|
/* 0A316C 7F06E63C 46082282 */ mul.s $f10, $f4, $f8
|
|
/* 0A3170 7F06E640 46105083 */ div.s $f2, $f10, $f16
|
|
.L7F06E644:
|
|
/* 0A3174 7F06E644 03E00008 */ jr $ra
|
|
/* 0A3178 7F06E648 46001006 */ mov.s $f0, $f2
|
|
)
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef NONMATCHING
|
|
void process_03_unknown(ModelRenderData *arg0, Model *model, ModelNode *node) {
|
|
|
|
}
|
|
#else
|
|
void process_03_unknown(ModelRenderData *arg0, Model *model, ModelNode *node);
|
|
GLOBAL_ASM(
|
|
.text
|
|
glabel process_03_unknown
|
|
/* 0A317C 7F06E64C 27BDFFB0 */ addiu $sp, $sp, -0x50
|
|
/* 0A3180 7F06E650 AFB00028 */ sw $s0, 0x28($sp)
|
|
/* 0A3184 7F06E654 AFBF0034 */ sw $ra, 0x34($sp)
|
|
/* 0A3188 7F06E658 AFB20030 */ sw $s2, 0x30($sp)
|
|
/* 0A318C 7F06E65C AFB1002C */ sw $s1, 0x2c($sp)
|
|
/* 0A3190 7F06E660 F7B40020 */ sdc1 $f20, 0x20($sp)
|
|
/* 0A3194 7F06E664 AFA40050 */ sw $a0, 0x50($sp)
|
|
/* 0A3198 7F06E668 AFA60058 */ sw $a2, 0x58($sp)
|
|
/* 0A319C 7F06E66C 8CC20004 */ lw $v0, 4($a2)
|
|
/* 0A31A0 7F06E670 8CAF0008 */ lw $t7, 8($a1)
|
|
/* 0A31A4 7F06E674 00A08025 */ move $s0, $a1
|
|
/* 0A31A8 7F06E678 8E180034 */ lw $t8, 0x34($s0)
|
|
/* 0A31AC 7F06E67C 9451000C */ lhu $s1, 0xc($v0)
|
|
/* 0A31B0 7F06E680 8DF20004 */ lw $s2, 4($t7)
|
|
/* 0A31B4 7F06E684 8E070020 */ lw $a3, 0x20($s0)
|
|
/* 0A31B8 7F06E688 80A50024 */ lb $a1, 0x24($a1)
|
|
/* 0A31BC 7F06E68C AFB80010 */ sw $t8, 0x10($sp)
|
|
/* 0A31C0 7F06E690 02202025 */ move $a0, $s1
|
|
/* 0A31C4 7F06E694 0FC1B950 */ jal sub_GAME_7F06E540
|
|
/* 0A31C8 7F06E698 02403025 */ move $a2, $s2
|
|
/* 0A31CC 7F06E69C 44802000 */ mtc1 $zero, $f4
|
|
/* 0A31D0 7F06E6A0 C606002C */ lwc1 $f6, 0x2c($s0)
|
|
/* 0A31D4 7F06E6A4 46000506 */ mov.s $f20, $f0
|
|
/* 0A31D8 7F06E6A8 02202025 */ move $a0, $s1
|
|
/* 0A31DC 7F06E6AC 46062032 */ c.eq.s $f4, $f6
|
|
/* 0A31E0 7F06E6B0 02403025 */ move $a2, $s2
|
|
/* 0A31E4 7F06E6B4 4503000C */ bc1tl .L7F06E6E8
|
|
/* 0A31E8 7F06E6B8 44804000 */ mtc1 $zero, $f8
|
|
/* 0A31EC 7F06E6BC 8E190038 */ lw $t9, 0x38($s0)
|
|
/* 0A31F0 7F06E6C0 82050024 */ lb $a1, 0x24($s0)
|
|
/* 0A31F4 7F06E6C4 8E070020 */ lw $a3, 0x20($s0)
|
|
/* 0A31F8 7F06E6C8 0FC1B950 */ jal sub_GAME_7F06E540
|
|
/* 0A31FC 7F06E6CC AFB90010 */ sw $t9, 0x10($sp)
|
|
/* 0A3200 7F06E6D0 4600A306 */ mov.s $f12, $f20
|
|
/* 0A3204 7F06E6D4 46000386 */ mov.s $f14, $f0
|
|
/* 0A3208 7F06E6D8 0FC1B433 */ jal sub_GAME_7F06D0CC
|
|
/* 0A320C 7F06E6DC 8E06002C */ lw $a2, 0x2c($s0)
|
|
/* 0A3210 7F06E6E0 46000506 */ mov.s $f20, $f0
|
|
/* 0A3214 7F06E6E4 44804000 */ mtc1 $zero, $f8
|
|
.L7F06E6E8:
|
|
/* 0A3218 7F06E6E8 C60A0084 */ lwc1 $f10, 0x84($s0)
|
|
/* 0A321C 7F06E6EC 02202025 */ move $a0, $s1
|
|
/* 0A3220 7F06E6F0 02403025 */ move $a2, $s2
|
|
/* 0A3224 7F06E6F4 460A4032 */ c.eq.s $f8, $f10
|
|
/* 0A3228 7F06E6F8 00000000 */ nop
|
|
/* 0A322C 7F06E6FC 4503001F */ bc1tl .L7F06E77C
|
|
/* 0A3230 7F06E700 4407A000 */ mfc1 $a3, $f20
|
|
/* 0A3234 7F06E704 8E080064 */ lw $t0, 0x64($s0)
|
|
/* 0A3238 7F06E708 82050025 */ lb $a1, 0x25($s0)
|
|
/* 0A323C 7F06E70C 8E070054 */ lw $a3, 0x54($s0)
|
|
/* 0A3240 7F06E710 0FC1B950 */ jal sub_GAME_7F06E540
|
|
/* 0A3244 7F06E714 AFA80010 */ sw $t0, 0x10($sp)
|
|
/* 0A3248 7F06E718 E7A00038 */ swc1 $f0, 0x38($sp)
|
|
/* 0A324C 7F06E71C C612005C */ lwc1 $f18, 0x5c($s0)
|
|
/* 0A3250 7F06E720 44808000 */ mtc1 $zero, $f16
|
|
/* 0A3254 7F06E724 02202025 */ move $a0, $s1
|
|
/* 0A3258 7F06E728 02403025 */ move $a2, $s2
|
|
/* 0A325C 7F06E72C 46128032 */ c.eq.s $f16, $f18
|
|
/* 0A3260 7F06E730 00000000 */ nop
|
|
/* 0A3264 7F06E734 4503000C */ bc1tl .L7F06E768
|
|
/* 0A3268 7F06E738 4600A306 */ mov.s $f12, $f20
|
|
/* 0A326C 7F06E73C 8E090068 */ lw $t1, 0x68($s0)
|
|
/* 0A3270 7F06E740 82050025 */ lb $a1, 0x25($s0)
|
|
/* 0A3274 7F06E744 8E070054 */ lw $a3, 0x54($s0)
|
|
/* 0A3278 7F06E748 0FC1B950 */ jal sub_GAME_7F06E540
|
|
/* 0A327C 7F06E74C AFA90010 */ sw $t1, 0x10($sp)
|
|
/* 0A3280 7F06E750 C7AC0038 */ lwc1 $f12, 0x38($sp)
|
|
/* 0A3284 7F06E754 46000386 */ mov.s $f14, $f0
|
|
/* 0A3288 7F06E758 0FC1B433 */ jal sub_GAME_7F06D0CC
|
|
/* 0A328C 7F06E75C 8E06005C */ lw $a2, 0x5c($s0)
|
|
/* 0A3290 7F06E760 E7A00038 */ swc1 $f0, 0x38($sp)
|
|
/* 0A3294 7F06E764 4600A306 */ mov.s $f12, $f20
|
|
.L7F06E768:
|
|
/* 0A3298 7F06E768 C7AE0038 */ lwc1 $f14, 0x38($sp)
|
|
/* 0A329C 7F06E76C 0FC1B433 */ jal sub_GAME_7F06D0CC
|
|
/* 0A32A0 7F06E770 8E060084 */ lw $a2, 0x84($s0)
|
|
/* 0A32A4 7F06E774 46000506 */ mov.s $f20, $f0
|
|
/* 0A32A8 7F06E778 4407A000 */ mfc1 $a3, $f20
|
|
.L7F06E77C:
|
|
/* 0A32AC 7F06E77C 8FA40050 */ lw $a0, 0x50($sp)
|
|
/* 0A32B0 7F06E780 02002825 */ move $a1, $s0
|
|
/* 0A32B4 7F06E784 0FC1B8AE */ jal sub_GAME_7F06E2B8
|
|
/* 0A32B8 7F06E788 8FA60058 */ lw $a2, 0x58($sp)
|
|
/* 0A32BC 7F06E78C 8FBF0034 */ lw $ra, 0x34($sp)
|
|
/* 0A32C0 7F06E790 D7B40020 */ ldc1 $f20, 0x20($sp)
|
|
/* 0A32C4 7F06E794 8FB00028 */ lw $s0, 0x28($sp)
|
|
/* 0A32C8 7F06E798 8FB1002C */ lw $s1, 0x2c($sp)
|
|
/* 0A32CC 7F06E79C 8FB20030 */ lw $s2, 0x30($sp)
|
|
/* 0A32D0 7F06E7A0 03E00008 */ jr $ra
|
|
/* 0A32D4 7F06E7A4 27BD0050 */ addiu $sp, $sp, 0x50
|
|
)
|
|
#endif
|
|
|
|
|
|
void process_15_subposition(ModelRenderData* arg0, Model *model, ModelNode *node)
|
|
{
|
|
union ModelRoData *rodata = node->Data;
|
|
Mtxf *sp68;
|
|
Mtxf sp28;
|
|
s32 mtxindex = rodata->GroupSimple.Group1;
|
|
RenderPosView *matrices = model->render_pos;
|
|
|
|
if (node->Parent)
|
|
{
|
|
sp68 = modelFindNodeMtx(model, node->Parent, 0);
|
|
}
|
|
else
|
|
{
|
|
sp68 = arg0->unk00;
|
|
}
|
|
|
|
if (sp68)
|
|
{
|
|
matrix_4x4_set_identity_and_position(&rodata->GroupSimple.Origin, &sp28);
|
|
matrix_4x4_multiply_homogeneous(sp68, &sp28, &matrices[mtxindex]);
|
|
}
|
|
else
|
|
{
|
|
matrix_4x4_set_identity_and_position(&rodata->GroupSimple.Origin, &matrices[mtxindex]);
|
|
}
|
|
}
|
|
|
|
/*
|
|
* Address: 0x7F06E858
|
|
*/
|
|
void modelUpdateDistanceRelations(Model* model, ModelNode* node)
|
|
{
|
|
union ModelRoData *rodata = node->Data;
|
|
union ModelRwData *rwdata = modelGetNodeRwData(model, node);
|
|
Mtxf *mtx = modelFindNodeMtx(model, node, 0);
|
|
f32 distance;
|
|
|
|
if (g_ModelDistanceDisabled)
|
|
{
|
|
distance = 0;
|
|
}
|
|
else
|
|
{
|
|
distance = -mtx->m[3][2] * getPlayer_c_lodscalez();
|
|
|
|
if (g_ModelDistanceScale != 1)
|
|
{
|
|
distance *= g_ModelDistanceScale;
|
|
}
|
|
}
|
|
|
|
if (distance > rodata->LOD.MinDistance * model->scale || rodata->LOD.MinDistance == 0)
|
|
{
|
|
if (distance <= rodata->LOD.MaxDistance * model->scale)
|
|
{
|
|
rwdata->LOD.visible = TRUE;
|
|
node->Child = rodata->LOD.Affects;
|
|
return;
|
|
}
|
|
}
|
|
|
|
rwdata->LOD.visible = FALSE;
|
|
node->Child = NULL;
|
|
}
|
|
|
|
/*
|
|
* Address: 0x7F06E970
|
|
*/
|
|
void modelApplyDistanceRelations(Model* model, ModelNode* node)
|
|
{
|
|
ModelRoData_LODRecord *rodata = &node->Data->LOD;
|
|
ModelRwData_LODRecord *rwdata = modelGetNodeRwData(model, node);
|
|
|
|
if (rwdata->visible)
|
|
{
|
|
node->Child = rodata->Affects;
|
|
}
|
|
else
|
|
{
|
|
node->Child = NULL;
|
|
}
|
|
}
|
|
|
|
|
|
void modelApplyToggleRelations(Model* model, ModelNode* node)
|
|
{
|
|
ModelRoData_SwitchRecord *rodata = &node->Data->Switch;
|
|
ModelRwData_SwitchRecord *rwdata = modelGetNodeRwData(model, node);
|
|
|
|
if (rwdata->visible)
|
|
{
|
|
node->Child = rodata->Controls;
|
|
}
|
|
else
|
|
{
|
|
node->Child = NULL;
|
|
}
|
|
}
|
|
|
|
|
|
void modelApplyHeadRelations(Model* model, ModelNode* bodynode)
|
|
{
|
|
struct ModelRwData_HeadPlaceholderRecord *rwdata = modelGetNodeRwData(model, bodynode);
|
|
|
|
if (rwdata->ModelFileHeader)
|
|
{
|
|
ModelNode *headnode = rwdata->ModelFileHeader->RootNode;
|
|
|
|
bodynode->Child = headnode;
|
|
|
|
while (headnode)
|
|
{
|
|
headnode->Parent = bodynode;
|
|
headnode = headnode->Next;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void modelApplyReorderRelationsByArg(ModelNode *basenode, bool visible)
|
|
{
|
|
union ModelRoData *rodata = basenode->Data;
|
|
ModelNode *node1;
|
|
ModelNode *node2;
|
|
ModelNode *loopnode;
|
|
|
|
if (visible)
|
|
{
|
|
node1 = rodata->BSP.leftChild;
|
|
node2 = rodata->BSP.rightChild;
|
|
}
|
|
else
|
|
{
|
|
node1 = rodata->BSP.rightChild;
|
|
node2 = rodata->BSP.leftChild;
|
|
}
|
|
|
|
if (node1)
|
|
{
|
|
// I think what's happening here is there's two groups of siblings,
|
|
// where node1 and node2 are the head nodes. Either group can be first,
|
|
// and this is ensuring the node1 group is first.
|
|
// Note that node2 might be NULL.
|
|
|
|
basenode->Child = node1;
|
|
node1->Prev = NULL;
|
|
|
|
// Skip through node1's siblings until node2 is found or the end is
|
|
// reached
|
|
loopnode = node1;
|
|
|
|
while (loopnode->Next && loopnode->Next != node2)
|
|
{
|
|
loopnode = loopnode->Next;
|
|
}
|
|
|
|
loopnode->Next = node2;
|
|
|
|
if (node2)
|
|
{
|
|
// Append node2 and its siblings to node1's siblings
|
|
node2->Prev = loopnode;
|
|
loopnode = node2;
|
|
|
|
while (loopnode->Next && loopnode->Next != node1)
|
|
{
|
|
loopnode = loopnode->Next;
|
|
}
|
|
|
|
loopnode->Next = NULL;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
basenode->Child = node2;
|
|
|
|
if (node2)
|
|
{
|
|
node2->Prev = NULL;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void modelApplyReorderRelations(Model* model, ModelNode* node)
|
|
{
|
|
union ModelRwData *rwdata = modelGetNodeRwData(model, node);
|
|
modelApplyReorderRelationsByArg(node, rwdata->BSP.visible);
|
|
}
|
|
|
|
|
|
void modelUpdateReorderRelations(Model *model, ModelNode *node)
|
|
{
|
|
union ModelRoData *rodata = node->Data;
|
|
union ModelRwData *rwdata = modelGetNodeRwData(model, node);
|
|
Mtxf *mtx = modelFindNodeMtx(model, node, 0);
|
|
coord3d sp38;
|
|
coord3d sp2c;
|
|
f32 tmp;
|
|
|
|
if (rodata->BSP.reserved == 0)
|
|
{
|
|
sp38.x = rodata->BSP.Vector.f[0];
|
|
sp38.y = rodata->BSP.Vector.f[1];
|
|
sp38.z = rodata->BSP.Vector.f[2];
|
|
mtx4RotateVecInPlace(mtx, sp38.f);
|
|
}
|
|
else if (rodata->BSP.reserved == 2)
|
|
{
|
|
sp38.x = mtx->m[1][0] * rodata->BSP.Vector.f[1];
|
|
sp38.y = mtx->m[1][1] * rodata->BSP.Vector.f[1];
|
|
sp38.z = mtx->m[1][2] * rodata->BSP.Vector.f[1];
|
|
}
|
|
else if (rodata->BSP.reserved == 3)
|
|
{
|
|
sp38.x = mtx->m[2][0] * rodata->BSP.Vector.f[2];
|
|
sp38.y = mtx->m[2][1] * rodata->BSP.Vector.f[2];
|
|
sp38.z = mtx->m[2][2] * rodata->BSP.Vector.f[2];
|
|
}
|
|
else if (rodata->BSP.reserved == 1)
|
|
{
|
|
sp38.x = mtx->m[0][0] * rodata->BSP.Vector.f[0];
|
|
sp38.y = mtx->m[0][1] * rodata->BSP.Vector.f[0];
|
|
sp38.z = mtx->m[0][2] * rodata->BSP.Vector.f[0];
|
|
}
|
|
|
|
sp2c.x = rodata->BSP.Point.f[0];
|
|
sp2c.y = rodata->BSP.Point.f[1];
|
|
sp2c.z = rodata->BSP.Point.f[2];
|
|
|
|
mtx4TransformVecInPlace(mtx, &sp2c);
|
|
|
|
tmp = sp38.f[0] * sp2c.f[0] + sp38.f[1] * sp2c.f[1] + sp38.f[2] * sp2c.f[2];
|
|
|
|
if (tmp < 0)
|
|
{
|
|
rwdata->BSP.visible = TRUE;
|
|
}
|
|
else
|
|
{
|
|
rwdata->BSP.visible = FALSE;
|
|
}
|
|
|
|
modelApplyReorderRelations(model, node);
|
|
}
|
|
|
|
|
|
void process_07_unknown(Model *model, ModelNode *node)
|
|
{
|
|
union ModelRoData *rodata = node->Data;
|
|
union ModelRwData *rwdata = modelGetNodeRwData(model, node);
|
|
Mtxf *mtx = modelFindNodeMtx(model, node, 0);
|
|
f32 ratio;
|
|
f32 coord_multiplied;
|
|
coord3d coord;
|
|
s32 index1;
|
|
f32 theta;
|
|
s32 index2;
|
|
s32 index3;
|
|
|
|
sub_GAME_7F06C550(model, &coord);
|
|
|
|
theta = acosf(((coord.x * mtx->m[1][0]) + (coord.y * mtx->m[1][1])) + (coord.z * mtx->m[1][2]));
|
|
ratio = acosf((((coord.x * mtx->m[2][0]) + (coord.y * mtx->m[2][1])) + (coord.z * mtx->m[2][2])) / sinf(theta));
|
|
coord_multiplied = ((coord.x * mtx->m[0][0]) + (coord.y * mtx->m[0][1])) + (coord.z * mtx->m[0][2]);
|
|
|
|
if ((coord_multiplied < 0.0f) && (ratio > 0.0f))
|
|
{
|
|
ratio = M_TAU_F - ratio;
|
|
}
|
|
|
|
index1 = (theta * 64.0f) / M_TAU_F;
|
|
|
|
index2 = (s32) ((ratio * M_U16_MAX_VALUE_F) / M_TAU_F);
|
|
index2 += D_800360C4[index1].unk04;
|
|
index2 = index2 >> D_800360C4[index1].unk0C;
|
|
|
|
index3 = index2 + D_800360C4[index1].unk00;
|
|
|
|
rwdata->Op07.index = rodata->Op07.Data[index3];
|
|
}
|
|
|
|
|
|
void modelUpdateRelationsQuick(Model *model, ModelNode *parent)
|
|
{
|
|
ModelNode *node = parent->Child;
|
|
ModelNode **unused_parent;
|
|
|
|
while (node)
|
|
{
|
|
s32 type = node->Opcode & 0xff;
|
|
bool dochildren = TRUE;
|
|
|
|
switch (type)
|
|
{
|
|
case MODELNODE_OPCODE_HEADER:
|
|
case MODELNODE_OPCODE_GROUP:
|
|
case MODELNODE_OPCODE_OP03:
|
|
case MODELNODE_OPCODE_OP11:
|
|
case MODELNODE_OPCODE_GUNFIRE:
|
|
case MODELNODE_OPCODE_SHADOW:
|
|
case MODELNODE_OPCODE_OP14:
|
|
case MODELNODE_OPCODE_INTERLINK:
|
|
case MODELNODE_OPCODE_OP16:
|
|
case MODELNODE_OPCODE_GROUPSIMPLE:
|
|
dochildren = FALSE;
|
|
break;
|
|
case MODELNODE_OPCODE_LOD:
|
|
modelUpdateDistanceRelations(model, node);
|
|
break;
|
|
case MODELNODE_OPCODE_BSP:
|
|
modelUpdateReorderRelations(model, node);
|
|
break;
|
|
case MODELNODE_OPCODE_OP07:
|
|
process_07_unknown(model, node);
|
|
break;
|
|
case MODELNODE_OPCODE_HEAD:
|
|
modelApplyHeadRelations(model, node);
|
|
break;
|
|
case MODELNODE_OPCODE_DLCOLLISION:
|
|
break;
|
|
}
|
|
|
|
if (dochildren && node->Child)
|
|
{
|
|
node = node->Child;
|
|
}
|
|
else
|
|
{
|
|
unused_parent = &parent;
|
|
while (node)
|
|
{
|
|
if (node == parent->Parent)
|
|
{
|
|
node = NULL;
|
|
break;
|
|
}
|
|
|
|
if (node->Next)
|
|
{
|
|
node = node->Next;
|
|
break;
|
|
}
|
|
|
|
node = node->Parent;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void sub_GAME_7F06EFC4(Model *model)
|
|
{
|
|
ModelNode *node = model->obj->RootNode;
|
|
|
|
while (node)
|
|
{
|
|
u32 type = node->Opcode & 0xff;
|
|
|
|
switch (type)
|
|
{
|
|
case MODELNODE_OPCODE_LOD:
|
|
modelUpdateDistanceRelations(model, node);
|
|
break;
|
|
|
|
case MODELNODE_OPCODE_BSP:
|
|
modelUpdateReorderRelations(model, node);
|
|
break;
|
|
|
|
case MODELNODE_OPCODE_OP07:
|
|
process_07_unknown(model, node);
|
|
break;
|
|
|
|
case MODELNODE_OPCODE_SWITCH:
|
|
modelApplyToggleRelations(model, node);
|
|
break;
|
|
|
|
case MODELNODE_OPCODE_HEAD:
|
|
modelApplyHeadRelations(model, node);
|
|
break;
|
|
|
|
case MODELNODE_OPCODE_HEADER:
|
|
case MODELNODE_OPCODE_DLCOLLISION:
|
|
default:
|
|
break;
|
|
}
|
|
|
|
if (node->Child)
|
|
{
|
|
node = node->Child;
|
|
}
|
|
else
|
|
{
|
|
while (node)
|
|
{
|
|
if (node->Next)
|
|
{
|
|
node = node->Next;
|
|
break;
|
|
}
|
|
|
|
node = node->Parent;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void modelUpdateMatrices(ModelRenderData *arg0, Model *model)
|
|
{
|
|
ModelNode *node = model->obj->RootNode;
|
|
|
|
while (node)
|
|
{
|
|
u32 type = node->Opcode & 0xff;
|
|
|
|
switch (type)
|
|
{
|
|
case MODELNODE_OPCODE_HEADER:
|
|
process_01_group_heading(arg0, model, node);
|
|
break;
|
|
|
|
case MODELNODE_OPCODE_GROUP:
|
|
process_02_position(arg0, model, node);
|
|
break;
|
|
|
|
case MODELNODE_OPCODE_OP03:
|
|
process_03_unknown(arg0, model, node);
|
|
break;
|
|
|
|
case MODELNODE_OPCODE_GROUPSIMPLE:
|
|
process_15_subposition(arg0, model, node);
|
|
break;
|
|
|
|
case MODELNODE_OPCODE_LOD:
|
|
modelUpdateDistanceRelations(model, node);
|
|
break;
|
|
|
|
case MODELNODE_OPCODE_BSP:
|
|
modelUpdateReorderRelations(model, node);
|
|
break;
|
|
|
|
case MODELNODE_OPCODE_OP07:
|
|
process_07_unknown(model, node);
|
|
break;
|
|
|
|
case MODELNODE_OPCODE_SWITCH:
|
|
modelApplyToggleRelations(model, node);
|
|
break;
|
|
|
|
case MODELNODE_OPCODE_HEAD:
|
|
modelApplyHeadRelations(model, node);
|
|
break;
|
|
|
|
case MODELNODE_OPCODE_DLCOLLISION:
|
|
default:
|
|
break;
|
|
}
|
|
|
|
if (node->Child)
|
|
{
|
|
node = node->Child;
|
|
}
|
|
else
|
|
{
|
|
while (node)
|
|
{
|
|
if (node->Next)
|
|
{
|
|
node = node->Next;
|
|
break;
|
|
}
|
|
|
|
node = node->Parent;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void instcalcmatrices(struct unk_joint_list* arg0, Model* arg1)
|
|
{
|
|
#if defined(LEFTOVERDEBUG)
|
|
if (arg1 == NULL)
|
|
{
|
|
osSyncPrintf("instcalcmatrices: no objinst!\n");
|
|
return_null();
|
|
}
|
|
|
|
if (arg0->unk_matrix == NULL)
|
|
{
|
|
osSyncPrintf("instcalcmatrices: no basemtx!\n");
|
|
return_null();
|
|
}
|
|
|
|
if (arg0->mtxlist == NULL)
|
|
{
|
|
osSyncPrintf("instcalcmatrices: no mtxlist!\n");
|
|
return_null();
|
|
}
|
|
#endif
|
|
arg1->render_pos = (RenderPosView* ) arg0->mtxlist;
|
|
arg0->mtxlist += arg1->obj->numMatrices;
|
|
modelUpdateMatrices((ModelRenderData* ) arg0, arg1);
|
|
}
|
|
|
|
|
|
/**
|
|
* Address 0x7F06F2F8 (VERSION_US, VERSION_JP)
|
|
* Address 0x7F06F670 (VERSION_EU)
|
|
*/
|
|
void subcalcmatrices(struct unk_joint_list *arg0, struct Model *arg1)
|
|
{
|
|
#if defined(LEFTOVERDEBUG)
|
|
if (arg1 == NULL)
|
|
{
|
|
osSyncPrintf("subcalcmatrices: no objanim!\n");
|
|
return_null();
|
|
}
|
|
|
|
if (arg0->unk_matrix == NULL)
|
|
{
|
|
osSyncPrintf("subcalcmatrices: no basemtx!\n");
|
|
return_null();
|
|
}
|
|
|
|
if (arg0->mtxlist == NULL)
|
|
{
|
|
osSyncPrintf("subcalcmatrices: no mtxlist!\n");
|
|
return_null();
|
|
}
|
|
#endif
|
|
|
|
if (arg1->anim != NULL)
|
|
{
|
|
#if defined(LEFTOVERDEBUG)
|
|
if ((arg1->attachedto != NULL) && (arg1->attachedto_objinst == NULL))
|
|
{
|
|
osSyncPrintf("subcalcmatrices: no attach for objinst!\n");
|
|
return_null();
|
|
}
|
|
|
|
if (((s32) arg1->framea < 0) || ((s32) arg1->framea >= (s32) arg1->anim->unk04))
|
|
{
|
|
osSyncPrintf("subcalcmatrices: framea out of range!\n");
|
|
return_null();
|
|
}
|
|
|
|
if (((s32) arg1->frameb < 0) || ((s32) arg1->frameb >= (s32) arg1->anim->unk04))
|
|
{
|
|
osSyncPrintf("subcalcmatrices: frameb out of range!\n");
|
|
return_null();
|
|
}
|
|
|
|
if ((arg1->unk84 == 0) || ((arg1->unk84 != 0) && (arg1->anim2 != NULL)))
|
|
{
|
|
//
|
|
}
|
|
else
|
|
{
|
|
osSyncPrintf("subcalcmatrices: no anim2!\n");
|
|
return_null();
|
|
}
|
|
|
|
if (
|
|
(arg1->anim2 != NULL)
|
|
&& (
|
|
(arg1->anim2 == NULL)
|
|
|| (arg1->frame2a < 0)
|
|
|| ((s32) arg1->frame2a >= (s32) arg1->anim2->unk04)
|
|
)
|
|
)
|
|
{
|
|
osSyncPrintf("subcalcmatrices: frame2a out of range!\n");
|
|
return_null();
|
|
}
|
|
|
|
if (
|
|
(arg1->anim2 == NULL)
|
|
|| (
|
|
(arg1->anim2 != NULL)
|
|
&& (arg1->frame2b >= 0)
|
|
&& ((s32) arg1->frame2b < (s32) arg1->anim2->unk04)
|
|
)
|
|
)
|
|
{
|
|
//
|
|
}
|
|
else
|
|
{
|
|
osSyncPrintf("subcalcmatrices: frame2b out of range!\n");
|
|
return_null();
|
|
}
|
|
#endif
|
|
|
|
arg1->unk34 = sub_GAME_7F0754BC(arg1->anim, arg1->framea, arg1->obj->Skeleton);
|
|
|
|
if (arg1->unk2c != 0.0f)
|
|
{
|
|
arg1->unk38 = sub_GAME_7F0754BC(arg1->anim, arg1->frameb, arg1->obj->Skeleton);
|
|
}
|
|
|
|
if (arg1->anim2 != NULL)
|
|
{
|
|
arg1->unk64 = sub_GAME_7F0754BC(arg1->anim2, arg1->frame2a, arg1->obj->Skeleton);
|
|
|
|
if (arg1->unk5c != 0.0f)
|
|
{
|
|
arg1->unk68 = sub_GAME_7F0754BC(arg1->anim2, arg1->frame2b, arg1->obj->Skeleton);
|
|
}
|
|
}
|
|
|
|
sub_GAME_7F0755B0();
|
|
}
|
|
|
|
instcalcmatrices(arg0, arg1);
|
|
}
|
|
|
|
/**
|
|
* Address 0x7F06F5AC.
|
|
*/
|
|
struct ModelAnimation * objecthandlerGetModelAnim(struct Model* model) {
|
|
return model->anim;
|
|
}
|
|
|
|
s8 objecthandlerGetModelGunhand(Model *model) {
|
|
return model->gunhand;
|
|
}
|
|
|
|
/**
|
|
* Address 0x7F06F5BC.
|
|
*/
|
|
f32 objecthandlerGetModelField28(Model *model)
|
|
{
|
|
return model->unk28;
|
|
}
|
|
|
|
f32 sub_GAME_7F06F5C4(Model *model)
|
|
{
|
|
f32 unk3c;
|
|
ModelAnimation *modelAnimation;
|
|
|
|
unk3c = model->endframe;
|
|
if (unk3c >= 0.0f)
|
|
{
|
|
return unk3c;
|
|
}
|
|
|
|
modelAnimation = model->anim;
|
|
|
|
if (modelAnimation != NULL)
|
|
{
|
|
return modelAnimation->unk04 - 1;
|
|
}
|
|
return 0.0f;
|
|
}
|
|
|
|
|
|
f32 modelGetAnimSpeed(Model *model)
|
|
{
|
|
return model->speed;
|
|
}
|
|
|
|
|
|
/**
|
|
* Address 0x7F06F618.
|
|
* PD: modelGetAbsAnimSpeed
|
|
*/
|
|
f32 modelGetAbsAnimSpeed(Model *model)
|
|
{
|
|
f32 speed;
|
|
|
|
speed = model->speed;
|
|
|
|
if (speed < 0.0f)
|
|
{
|
|
speed = -speed;
|
|
}
|
|
|
|
return speed;
|
|
}
|
|
|
|
/**
|
|
* Unused Function
|
|
*/
|
|
f32 modelGetEffectiveAnimSpeed(Model *model) {
|
|
return modelGetAnimSpeed(model) * model->playspeed;
|
|
}
|
|
|
|
|
|
#ifdef NONMATCHING
|
|
s32 modelConstrainOrWrapAnimFrame(s32 frame, ModelAnimation *anim, f32 endframe)
|
|
{
|
|
//s32 frame;
|
|
//u16 animnum->unk4;
|
|
//u16 animnum->unk4;
|
|
|
|
//frame = frame;
|
|
if (frame < 0)
|
|
{
|
|
if (animnum->unk7 & 1)
|
|
{
|
|
//animnum->unk4 = animnum->unk4;
|
|
frame = animnum->unk4 - ((s32) -frame % (s32) animnum->unk4);
|
|
}
|
|
else
|
|
{
|
|
frame = 0;
|
|
}
|
|
}
|
|
else if ((endframe >= 0.0f) && ((s32) endframe < frame))
|
|
{
|
|
frame = ceilFloatToInt(endframe);
|
|
}
|
|
else
|
|
{
|
|
//animnum->unk4 = animnum->unk4;
|
|
if (frame >= (s32) animnum->unk4)
|
|
{
|
|
if (animnum->unk7 & 1)
|
|
{
|
|
frame = frame % (s32) animnum->unk4;
|
|
}
|
|
else
|
|
{
|
|
frame = animnum->unk4 - 1;
|
|
}
|
|
}
|
|
}
|
|
return frame;
|
|
}
|
|
#else
|
|
s32 modelConstrainOrWrapAnimFrame(s32 frame, ModelAnimation *anim, f32 endframe);
|
|
GLOBAL_ASM(
|
|
.text
|
|
glabel modelConstrainOrWrapAnimFrame
|
|
/* 0A419C 7F06F66C 27BDFFE8 */ addiu $sp, $sp, -0x18
|
|
/* 0A41A0 7F06F670 44866000 */ mtc1 $a2, $f12
|
|
/* 0A41A4 7F06F674 04810017 */ bgez $a0, .L7F06F6D4
|
|
/* 0A41A8 7F06F678 AFBF0014 */ sw $ra, 0x14($sp)
|
|
/* 0A41AC 7F06F67C 90AE0007 */ lbu $t6, 7($a1)
|
|
/* 0A41B0 7F06F680 31CF0001 */ andi $t7, $t6, 1
|
|
/* 0A41B4 7F06F684 11E00011 */ beqz $t7, .L7F06F6CC
|
|
/* 0A41B8 7F06F688 00000000 */ nop
|
|
/* 0A41BC 7F06F68C 94A20004 */ lhu $v0, 4($a1)
|
|
/* 0A41C0 7F06F690 0004C023 */ negu $t8, $a0
|
|
/* 0A41C4 7F06F694 0302001A */ div $zero, $t8, $v0
|
|
/* 0A41C8 7F06F698 0000C810 */ mfhi $t9
|
|
/* 0A41CC 7F06F69C 00592023 */ subu $a0, $v0, $t9
|
|
/* 0A41D0 7F06F6A0 14400002 */ bnez $v0, .L7F06F6AC
|
|
/* 0A41D4 7F06F6A4 00000000 */ nop
|
|
/* 0A41D8 7F06F6A8 0007000D */ break 7
|
|
.L7F06F6AC:
|
|
/* 0A41DC 7F06F6AC 2401FFFF */ li $at, -1
|
|
/* 0A41E0 7F06F6B0 14410004 */ bne $v0, $at, .L7F06F6C4
|
|
/* 0A41E4 7F06F6B4 3C018000 */ lui $at, 0x8000
|
|
/* 0A41E8 7F06F6B8 17010002 */ bne $t8, $at, .L7F06F6C4
|
|
/* 0A41EC 7F06F6BC 00000000 */ nop
|
|
/* 0A41F0 7F06F6C0 0006000D */ break 6
|
|
.L7F06F6C4:
|
|
/* 0A41F4 7F06F6C4 1000002A */ b .L7F06F770
|
|
/* 0A41F8 7F06F6C8 8FBF0014 */ lw $ra, 0x14($sp)
|
|
.L7F06F6CC:
|
|
/* 0A41FC 7F06F6CC 10000027 */ b .L7F06F76C
|
|
/* 0A4200 7F06F6D0 00002025 */ move $a0, $zero
|
|
.L7F06F6D4:
|
|
/* 0A4204 7F06F6D4 44802000 */ mtc1 $zero, $f4
|
|
/* 0A4208 7F06F6D8 00000000 */ nop
|
|
/* 0A420C 7F06F6DC 460C203E */ c.le.s $f4, $f12
|
|
/* 0A4210 7F06F6E0 00000000 */ nop
|
|
/* 0A4214 7F06F6E4 4502000C */ bc1fl .L7F06F718
|
|
/* 0A4218 7F06F6E8 94A20004 */ lhu $v0, 4($a1)
|
|
/* 0A421C 7F06F6EC 4600618D */ trunc.w.s $f6, $f12
|
|
/* 0A4220 7F06F6F0 44093000 */ mfc1 $t1, $f6
|
|
/* 0A4224 7F06F6F4 00000000 */ nop
|
|
/* 0A4228 7F06F6F8 0124082A */ slt $at, $t1, $a0
|
|
/* 0A422C 7F06F6FC 50200006 */ beql $at, $zero, .L7F06F718
|
|
/* 0A4230 7F06F700 94A20004 */ lhu $v0, 4($a1)
|
|
/* 0A4234 7F06F704 0FC1712E */ jal ceilFloatToInt
|
|
/* 0A4238 7F06F708 00000000 */ nop
|
|
/* 0A423C 7F06F70C 10000017 */ b .L7F06F76C
|
|
/* 0A4240 7F06F710 00402025 */ move $a0, $v0
|
|
/* 0A4244 7F06F714 94A20004 */ lhu $v0, 4($a1)
|
|
.L7F06F718:
|
|
/* 0A4248 7F06F718 0082082A */ slt $at, $a0, $v0
|
|
/* 0A424C 7F06F71C 54200014 */ bnezl $at, .L7F06F770
|
|
/* 0A4250 7F06F720 8FBF0014 */ lw $ra, 0x14($sp)
|
|
/* 0A4254 7F06F724 90AA0007 */ lbu $t2, 7($a1)
|
|
/* 0A4258 7F06F728 314B0001 */ andi $t3, $t2, 1
|
|
/* 0A425C 7F06F72C 5160000F */ beql $t3, $zero, .L7F06F76C
|
|
/* 0A4260 7F06F730 2444FFFF */ addiu $a0, $v0, -1
|
|
/* 0A4264 7F06F734 0082001A */ div $zero, $a0, $v0
|
|
/* 0A4268 7F06F738 14400002 */ bnez $v0, .L7F06F744
|
|
/* 0A426C 7F06F73C 00000000 */ nop
|
|
/* 0A4270 7F06F740 0007000D */ break 7
|
|
.L7F06F744:
|
|
/* 0A4274 7F06F744 2401FFFF */ li $at, -1
|
|
/* 0A4278 7F06F748 14410004 */ bne $v0, $at, .L7F06F75C
|
|
/* 0A427C 7F06F74C 3C018000 */ lui $at, 0x8000
|
|
/* 0A4280 7F06F750 14810002 */ bne $a0, $at, .L7F06F75C
|
|
/* 0A4284 7F06F754 00000000 */ nop
|
|
/* 0A4288 7F06F758 0006000D */ break 6
|
|
.L7F06F75C:
|
|
/* 0A428C 7F06F75C 00002010 */ mfhi $a0
|
|
/* 0A4290 7F06F760 10000003 */ b .L7F06F770
|
|
/* 0A4294 7F06F764 8FBF0014 */ lw $ra, 0x14($sp)
|
|
/* 0A4298 7F06F768 2444FFFF */ addiu $a0, $v0, -1
|
|
.L7F06F76C:
|
|
/* 0A429C 7F06F76C 8FBF0014 */ lw $ra, 0x14($sp)
|
|
.L7F06F770:
|
|
/* 0A42A0 7F06F770 27BD0018 */ addiu $sp, $sp, 0x18
|
|
/* 0A42A4 7F06F774 00801025 */ move $v0, $a0
|
|
/* 0A42A8 7F06F778 03E00008 */ jr $ra
|
|
/* 0A42AC 7F06F77C 00000000 */ nop
|
|
)
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef NONMATCHING
|
|
void modelCopyAnimForMerge(Model *model, f32 arg1)
|
|
{
|
|
ModelNode *temp_a1;
|
|
f32 temp_f10;
|
|
f32 temp_f16;
|
|
f32 temp_f18;
|
|
f32 temp_f4;
|
|
f32 temp_f6;
|
|
f32 temp_f8;
|
|
modeldata_root *temp_v0_2;
|
|
|
|
if ((arg1 > 0.0f) && (model->anim != 0))
|
|
{
|
|
temp_a1 = model->obj->RootNode;
|
|
model->unk58 = model->unk28;
|
|
model->unk5C = model->unk2C;
|
|
model->unk54 = model->anim;
|
|
model->unk25 = model->unk24;
|
|
model->unk60 = model->unk30;
|
|
model->unk62 = model->unk32;
|
|
model->unk70 = model->speed;
|
|
model->unk74 = model->newspeed;
|
|
model->unk78 = model->oldspeed;
|
|
model->unk7C = model->timespeed;
|
|
model->unk80 = model->elapsespeed;
|
|
model->unk6C = model->endframe;
|
|
if ((temp_a1->Opcode & 0xFF) == 1)
|
|
{
|
|
temp_v0_2 = modelGetNodeRwData(model, temp_a1);
|
|
temp_f10 = temp_v0_2->unk34.x;
|
|
temp_f16 = temp_v0_2->unk34.AsArray[1];
|
|
temp_f18 = temp_v0_2->unk34.AsArray[2];
|
|
temp_f4 = temp_v0_2->unk24.x;
|
|
temp_f6 = temp_v0_2->unk24.AsArray[1];
|
|
temp_f8 = temp_v0_2->unk24.AsArray[2];
|
|
temp_v0_2->unk02 = 1;
|
|
temp_v0_2->unk4c.x = temp_f10;
|
|
temp_v0_2->unk4c.AsArray[1] = temp_f16;
|
|
temp_v0_2->unk4c.AsArray[2] = temp_f18;
|
|
temp_v0_2->unk40.x = temp_f4;
|
|
temp_v0_2->unk40.AsArray[1] = temp_f6;
|
|
temp_v0_2->unk40.AsArray[2] = temp_f8;
|
|
return;
|
|
}
|
|
// Duplicate return node #5. Try simplifying control flow for better match
|
|
return;
|
|
}
|
|
model->unk54 = NULL;
|
|
}
|
|
#else
|
|
GLOBAL_ASM(
|
|
.text
|
|
glabel modelCopyAnimForMerge
|
|
/* 0A42B0 7F06F780 44856000 */ mtc1 $a1, $f12
|
|
/* 0A42B4 7F06F784 44802000 */ mtc1 $zero, $f4
|
|
/* 0A42B8 7F06F788 27BDFFE8 */ addiu $sp, $sp, -0x18
|
|
/* 0A42BC 7F06F78C AFBF0014 */ sw $ra, 0x14($sp)
|
|
/* 0A42C0 7F06F790 460C203C */ c.lt.s $f4, $f12
|
|
/* 0A42C4 7F06F794 00000000 */ nop
|
|
/* 0A42C8 7F06F798 45020033 */ bc1fl .L7F06F868
|
|
/* 0A42CC 7F06F79C AC800054 */ sw $zero, 0x54($a0)
|
|
/* 0A42D0 7F06F7A0 8C820020 */ lw $v0, 0x20($a0)
|
|
/* 0A42D4 7F06F7A4 24010001 */ li $at, 1
|
|
/* 0A42D8 7F06F7A8 5040002F */ beql $v0, $zero, .L7F06F868
|
|
/* 0A42DC 7F06F7AC AC800054 */ sw $zero, 0x54($a0)
|
|
/* 0A42E0 7F06F7B0 8C8E0008 */ lw $t6, 8($a0)
|
|
/* 0A42E4 7F06F7B4 C4860028 */ lwc1 $f6, 0x28($a0)
|
|
/* 0A42E8 7F06F7B8 C488002C */ lwc1 $f8, 0x2c($a0)
|
|
/* 0A42EC 7F06F7BC 8DC50000 */ lw $a1, ($t6)
|
|
/* 0A42F0 7F06F7C0 80980024 */ lb $t8, 0x24($a0)
|
|
/* 0A42F4 7F06F7C4 84990030 */ lh $t9, 0x30($a0)
|
|
/* 0A42F8 7F06F7C8 94A30000 */ lhu $v1, ($a1)
|
|
/* 0A42FC 7F06F7CC E4860058 */ swc1 $f6, 0x58($a0)
|
|
/* 0A4300 7F06F7D0 E488005C */ swc1 $f8, 0x5c($a0)
|
|
/* 0A4304 7F06F7D4 84880032 */ lh $t0, 0x32($a0)
|
|
/* 0A4308 7F06F7D8 C48A0040 */ lwc1 $f10, 0x40($a0)
|
|
/* 0A430C 7F06F7DC C4900044 */ lwc1 $f16, 0x44($a0)
|
|
/* 0A4310 7F06F7E0 C4920048 */ lwc1 $f18, 0x48($a0)
|
|
/* 0A4314 7F06F7E4 C484004C */ lwc1 $f4, 0x4c($a0)
|
|
/* 0A4318 7F06F7E8 C4860050 */ lwc1 $f6, 0x50($a0)
|
|
/* 0A431C 7F06F7EC C488003C */ lwc1 $f8, 0x3c($a0)
|
|
/* 0A4320 7F06F7F0 306F00FF */ andi $t7, $v1, 0xff
|
|
/* 0A4324 7F06F7F4 AC820054 */ sw $v0, 0x54($a0)
|
|
/* 0A4328 7F06F7F8 A0980025 */ sb $t8, 0x25($a0)
|
|
/* 0A432C 7F06F7FC A4990060 */ sh $t9, 0x60($a0)
|
|
/* 0A4330 7F06F800 A4880062 */ sh $t0, 0x62($a0)
|
|
/* 0A4334 7F06F804 E48A0070 */ swc1 $f10, 0x70($a0)
|
|
/* 0A4338 7F06F808 E4900074 */ swc1 $f16, 0x74($a0)
|
|
/* 0A433C 7F06F80C E4920078 */ swc1 $f18, 0x78($a0)
|
|
/* 0A4340 7F06F810 E484007C */ swc1 $f4, 0x7c($a0)
|
|
/* 0A4344 7F06F814 E4860080 */ swc1 $f6, 0x80($a0)
|
|
/* 0A4348 7F06F818 15E10013 */ bne $t7, $at, .L7F06F868
|
|
/* 0A434C 7F06F81C E488006C */ swc1 $f8, 0x6c($a0)
|
|
/* 0A4350 7F06F820 0FC1B1E7 */ jal modelGetNodeRwData
|
|
/* 0A4354 7F06F824 00000000 */ nop
|
|
/* 0A4358 7F06F828 C44A0034 */ lwc1 $f10, 0x34($v0)
|
|
/* 0A435C 7F06F82C C4500038 */ lwc1 $f16, 0x38($v0)
|
|
/* 0A4360 7F06F830 C452003C */ lwc1 $f18, 0x3c($v0)
|
|
/* 0A4364 7F06F834 C4440024 */ lwc1 $f4, 0x24($v0)
|
|
/* 0A4368 7F06F838 C4460028 */ lwc1 $f6, 0x28($v0)
|
|
/* 0A436C 7F06F83C C448002C */ lwc1 $f8, 0x2c($v0)
|
|
/* 0A4370 7F06F840 24090001 */ li $t1, 1
|
|
/* 0A4374 7F06F844 A0490002 */ sb $t1, 2($v0)
|
|
/* 0A4378 7F06F848 E44A004C */ swc1 $f10, 0x4c($v0)
|
|
/* 0A437C 7F06F84C E4500050 */ swc1 $f16, 0x50($v0)
|
|
/* 0A4380 7F06F850 E4520054 */ swc1 $f18, 0x54($v0)
|
|
/* 0A4384 7F06F854 E4440040 */ swc1 $f4, 0x40($v0)
|
|
/* 0A4388 7F06F858 E4460044 */ swc1 $f6, 0x44($v0)
|
|
/* 0A438C 7F06F85C 10000002 */ b .L7F06F868
|
|
/* 0A4390 7F06F860 E4480048 */ swc1 $f8, 0x48($v0)
|
|
/* 0A4394 7F06F864 AC800054 */ sw $zero, 0x54($a0)
|
|
.L7F06F868:
|
|
/* 0A4398 7F06F868 8FBF0014 */ lw $ra, 0x14($sp)
|
|
/* 0A439C 7F06F86C 27BD0018 */ addiu $sp, $sp, 0x18
|
|
/* 0A43A0 7F06F870 03E00008 */ jr $ra
|
|
/* 0A43A4 7F06F874 00000000 */ nop
|
|
)
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef NONMATCHING
|
|
void modelSetAnimation2(Model *model, void *anim, s32 arg2, f32 startframe, f32 half, f32 arg5)
|
|
{
|
|
void *sp80;
|
|
f32 sp70;
|
|
f32 sp6C;
|
|
f32 sp64;
|
|
f32 sp60;
|
|
f32 sp5C;
|
|
f32 sp58;
|
|
f32 sp54;
|
|
f32 sp50;
|
|
f32 sp4C;
|
|
f32 sp48;
|
|
f32 sp44;
|
|
f32 sp40;
|
|
f32 sp30;
|
|
s32 sp2C;
|
|
ModelNode *temp_a1;
|
|
f32 temp_f0;
|
|
f32 temp_f0_2;
|
|
f32 temp_f0_3;
|
|
f32 temp_f10;
|
|
f32 temp_f12;
|
|
f32 temp_f12_2;
|
|
f32 temp_f14;
|
|
f32 temp_f14_2;
|
|
f32 temp_f2;
|
|
f32 temp_f2_2;
|
|
f32 temp_f2_3;
|
|
f32 temp_f2_4;
|
|
f32 temp_f4;
|
|
f32 temp_f6;
|
|
modeldata_root *temp_v0;
|
|
f32 phi_f14;
|
|
|
|
sp2C = model->anim == 0;
|
|
if (model->unk54 != 0)
|
|
{
|
|
model->unk88 = arg5;
|
|
model->unk8C = 0.0f;
|
|
model->unk84 = 1.0f;
|
|
}
|
|
else
|
|
{
|
|
model->unk88 = 0.0f;
|
|
model->unk84 = 0.0f;
|
|
}
|
|
model->anim = anim;
|
|
model->unk24 = arg2;
|
|
model->endframe = -1.0f;
|
|
model->speed = half;
|
|
model->timespeed = 0.0f;
|
|
modelSetAnimFrame(startframe, model, startframe, anim);
|
|
model->unk26 = 0;
|
|
temp_a1 = model->obj->RootNode;
|
|
if ((temp_a1->Opcode & 0xFF) == 1)
|
|
{
|
|
sp80 = temp_a1->Data;
|
|
temp_v0 = modelGetNodeRwData(model, temp_a1);
|
|
sp5C.unk0 = D_80036244.unk0;
|
|
temp_f2 = model->scale * model->unkB8;
|
|
sp5C.unk4 = D_80036244.unk4;
|
|
sp5C.unk8 = D_80036244.unk8;
|
|
sp70 = temp_f2;
|
|
sp58 = sub_GAME_7F06D3F4(*sp80, model->unk24, model->obj->Skeleton, model->anim, model->unk32, &sp5C);
|
|
if (temp_f2 != 1.0f)
|
|
{
|
|
sp5C *= temp_f2;
|
|
sp60 *= temp_f2;
|
|
sp64 *= temp_f2;
|
|
}
|
|
sp6C = cosf(temp_v0->unk14);
|
|
temp_f0 = sinf(temp_v0->unk14);
|
|
temp_f2_2 = model->unk2C;
|
|
if (temp_f2_2 == 0.0f)
|
|
{
|
|
temp_f2_3 = temp_v0->pos.x;
|
|
temp_v0->unk34.x = temp_f2_3;
|
|
temp_v0->unk34.AsArray[2] = temp_v0->pos.AsArray[2];
|
|
temp_v0->unk34.AsArray[1] = temp_v0->pos.AsArray[1] - temp_v0->ground;
|
|
temp_v0->unk30 = temp_v0->unk14;
|
|
temp_f4 = (sp64 * temp_f0) + (temp_f2_3 + (sp5C * sp6C));
|
|
sp4C = temp_f4;
|
|
sp50 = sp60;
|
|
sp54 = (sp64 * sp6C) + (temp_v0->unk34.AsArray[2] - (sp5C * temp_f0));
|
|
temp_v0->unk24.x = temp_f4;
|
|
temp_v0->unk24.AsArray[1] = sp50;
|
|
temp_v0->unk24.AsArray[2] = sp54;
|
|
if (temp_v0->unk18 == 0.0f)
|
|
{
|
|
temp_f0_2 = temp_v0->unk30 + sp58;
|
|
temp_v0->unk20 = temp_f0_2;
|
|
if (temp_f0_2 >= M_TAU_F)
|
|
{
|
|
temp_v0->unk20 -= M_TAU_F;
|
|
}
|
|
}
|
|
temp_v0->unk1 = 1;
|
|
}
|
|
else
|
|
{
|
|
temp_f14 = (sp64 * temp_f0) + (sp5C * sp6C);
|
|
temp_f10 = (sp64 * sp6C) + (-sp5C * temp_f0);
|
|
sp30 = temp_f10;
|
|
sp44 = sp60;
|
|
temp_f6 = temp_v0->pos.x + (temp_f14 * (1.0f - temp_f2_2));
|
|
sp40 = temp_f6;
|
|
sp48 = temp_v0->pos.AsArray[2] + (temp_f10 * (1.0f - model->unk2C));
|
|
temp_v0->unk24.x = temp_f6;
|
|
temp_v0->unk24.AsArray[1] = sp44;
|
|
temp_v0->unk24.AsArray[2] = sp48;
|
|
temp_v0->unk34.x = temp_v0->unk24.x - temp_f14;
|
|
temp_f12 = temp_v0->pos.AsArray[1] - temp_v0->ground;
|
|
temp_f2_4 = model->unk2C;
|
|
temp_f12_2 = temp_v0->unk14;
|
|
temp_v0->unk34.AsArray[1] = temp_f12 - (((sp60 - temp_f12) * temp_f2_4) / (1.0f - temp_f2_4));
|
|
temp_v0->unk34.AsArray[2] = temp_v0->unk24.AsArray[2] - sp30;
|
|
temp_f14_2 = temp_f12_2 - sp58;
|
|
phi_f14 = temp_f14_2;
|
|
if (temp_f14_2 < 0.0f)
|
|
{
|
|
phi_f14 = temp_f14_2 + M_TAU_F;
|
|
}
|
|
temp_v0->unk30 = sub_GAME_7F06D0CC(temp_f12_2, phi_f14, model->unk2C);
|
|
if (temp_v0->unk18 == 0.0f)
|
|
{
|
|
temp_f0_3 = temp_v0->unk30 + sp58;
|
|
temp_v0->unk20 = temp_f0_3;
|
|
if (temp_f0_3 >= M_TAU_F)
|
|
{
|
|
temp_v0->unk20 -= M_TAU_F;
|
|
}
|
|
}
|
|
temp_v0->unk1 = 1;
|
|
}
|
|
if (sp2C != 0)
|
|
{
|
|
temp_v0->unk34.AsArray[1] = temp_v0->unk24.AsArray[1];
|
|
}
|
|
}
|
|
}
|
|
#else
|
|
GLOBAL_ASM(
|
|
.late_rodata
|
|
glabel D_80054D40
|
|
.word 0x40c90fdb /*6.2831855*/
|
|
glabel D_80054D44
|
|
.word 0x40c90fdb /*6.2831855*/
|
|
glabel D_80054D48
|
|
.word 0x40c90fdb /*6.2831855*/
|
|
.text
|
|
glabel modelSetAnimation2
|
|
/* 0A43A8 7F06F878 27BDFF70 */ addiu $sp, $sp, -0x90
|
|
/* 0A43AC 7F06F87C AFBF0024 */ sw $ra, 0x24($sp)
|
|
/* 0A43B0 7F06F880 AFB10020 */ sw $s1, 0x20($sp)
|
|
/* 0A43B4 7F06F884 AFB0001C */ sw $s0, 0x1c($sp)
|
|
/* 0A43B8 7F06F888 AFA50094 */ sw $a1, 0x94($sp)
|
|
/* 0A43BC 7F06F88C 8C8E0020 */ lw $t6, 0x20($a0)
|
|
/* 0A43C0 7F06F890 44876000 */ mtc1 $a3, $f12
|
|
/* 0A43C4 7F06F894 00A03825 */ move $a3, $a1
|
|
/* 0A43C8 7F06F898 2DCF0001 */ sltiu $t7, $t6, 1
|
|
/* 0A43CC 7F06F89C AFAF002C */ sw $t7, 0x2c($sp)
|
|
/* 0A43D0 7F06F8A0 8C980054 */ lw $t8, 0x54($a0)
|
|
/* 0A43D4 7F06F8A4 44056000 */ mfc1 $a1, $f12
|
|
/* 0A43D8 7F06F8A8 00808825 */ move $s1, $a0
|
|
/* 0A43DC 7F06F8AC 13000008 */ beqz $t8, .L7F06F8D0
|
|
/* 0A43E0 7F06F8B0 C7A400A4 */ lwc1 $f4, 0xa4($sp)
|
|
/* 0A43E4 7F06F8B4 3C013F80 */ li $at, 0x3F800000 # 1.000000
|
|
/* 0A43E8 7F06F8B8 44803000 */ mtc1 $zero, $f6
|
|
/* 0A43EC 7F06F8BC 44814000 */ mtc1 $at, $f8
|
|
/* 0A43F0 7F06F8C0 E4840088 */ swc1 $f4, 0x88($a0)
|
|
/* 0A43F4 7F06F8C4 E486008C */ swc1 $f6, 0x8c($a0)
|
|
/* 0A43F8 7F06F8C8 10000005 */ b .L7F06F8E0
|
|
/* 0A43FC 7F06F8CC E4880084 */ swc1 $f8, 0x84($a0)
|
|
.L7F06F8D0:
|
|
/* 0A4400 7F06F8D0 44805000 */ mtc1 $zero, $f10
|
|
/* 0A4404 7F06F8D4 44802000 */ mtc1 $zero, $f4
|
|
/* 0A4408 7F06F8D8 E62A0088 */ swc1 $f10, 0x88($s1)
|
|
/* 0A440C 7F06F8DC E6240084 */ swc1 $f4, 0x84($s1)
|
|
.L7F06F8E0:
|
|
/* 0A4410 7F06F8E0 3C01BF80 */ li $at, 0xBF800000 # -1.000000
|
|
/* 0A4414 7F06F8E4 44813000 */ mtc1 $at, $f6
|
|
/* 0A4418 7F06F8E8 AE270020 */ sw $a3, 0x20($s1)
|
|
/* 0A441C 7F06F8EC A2260024 */ sb $a2, 0x24($s1)
|
|
/* 0A4420 7F06F8F0 E626003C */ swc1 $f6, 0x3c($s1)
|
|
/* 0A4424 7F06F8F4 C7A800A0 */ lwc1 $f8, 0xa0($sp)
|
|
/* 0A4428 7F06F8F8 44805000 */ mtc1 $zero, $f10
|
|
/* 0A442C 7F06F8FC 02202025 */ move $a0, $s1
|
|
/* 0A4430 7F06F900 E6280040 */ swc1 $f8, 0x40($s1)
|
|
/* 0A4434 7F06F904 0FC1BFD9 */ jal modelSetAnimFrame
|
|
/* 0A4438 7F06F908 E62A004C */ swc1 $f10, 0x4c($s1)
|
|
/* 0A443C 7F06F90C 8E390008 */ lw $t9, 8($s1)
|
|
/* 0A4440 7F06F910 A2200026 */ sb $zero, 0x26($s1)
|
|
/* 0A4444 7F06F914 24010001 */ li $at, 1
|
|
/* 0A4448 7F06F918 8F250000 */ lw $a1, ($t9)
|
|
/* 0A444C 7F06F91C 94A20000 */ lhu $v0, ($a1)
|
|
/* 0A4450 7F06F920 304800FF */ andi $t0, $v0, 0xff
|
|
/* 0A4454 7F06F924 550100C5 */ bnel $t0, $at, .L7F06FC3C
|
|
/* 0A4458 7F06F928 8FBF0024 */ lw $ra, 0x24($sp)
|
|
/* 0A445C 7F06F92C 8CA90004 */ lw $t1, 4($a1)
|
|
/* 0A4460 7F06F930 02202025 */ move $a0, $s1
|
|
/* 0A4464 7F06F934 0FC1B1E7 */ jal modelGetNodeRwData
|
|
/* 0A4468 7F06F938 AFA90080 */ sw $t1, 0x80($sp)
|
|
/* 0A446C 7F06F93C 3C0C8003 */ lui $t4, %hi(D_80036244)
|
|
/* 0A4470 7F06F940 8FAA0080 */ lw $t2, 0x80($sp)
|
|
/* 0A4474 7F06F944 8E2B0008 */ lw $t3, 8($s1)
|
|
/* 0A4478 7F06F948 258C6244 */ addiu $t4, %lo(D_80036244) # addiu $t4, $t4, 0x6244
|
|
/* 0A447C 7F06F94C 8D810000 */ lw $at, ($t4)
|
|
/* 0A4480 7F06F950 C6240014 */ lwc1 $f4, 0x14($s1)
|
|
/* 0A4484 7F06F954 C62600B8 */ lwc1 $f6, 0xb8($s1)
|
|
/* 0A4488 7F06F958 27A3005C */ addiu $v1, $sp, 0x5c
|
|
/* 0A448C 7F06F95C 95440000 */ lhu $a0, ($t2)
|
|
/* 0A4490 7F06F960 8D660004 */ lw $a2, 4($t3)
|
|
/* 0A4494 7F06F964 AC610000 */ sw $at, ($v1)
|
|
/* 0A4498 7F06F968 8D8F0004 */ lw $t7, 4($t4)
|
|
/* 0A449C 7F06F96C 46062082 */ mul.s $f2, $f4, $f6
|
|
/* 0A44A0 7F06F970 00408025 */ move $s0, $v0
|
|
/* 0A44A4 7F06F974 AC6F0004 */ sw $t7, 4($v1)
|
|
/* 0A44A8 7F06F978 8D810008 */ lw $at, 8($t4)
|
|
/* 0A44AC 7F06F97C AC610008 */ sw $at, 8($v1)
|
|
/* 0A44B0 7F06F980 86380032 */ lh $t8, 0x32($s1)
|
|
/* 0A44B4 7F06F984 8E270020 */ lw $a3, 0x20($s1)
|
|
/* 0A44B8 7F06F988 82250024 */ lb $a1, 0x24($s1)
|
|
/* 0A44BC 7F06F98C E7A20070 */ swc1 $f2, 0x70($sp)
|
|
/* 0A44C0 7F06F990 AFA30014 */ sw $v1, 0x14($sp)
|
|
/* 0A44C4 7F06F994 0FC1B4FD */ jal sub_GAME_7F06D3F4
|
|
/* 0A44C8 7F06F998 AFB80010 */ sw $t8, 0x10($sp)
|
|
/* 0A44CC 7F06F99C 3C013F80 */ li $at, 0x3F800000 # 1.000000
|
|
/* 0A44D0 7F06F9A0 C7A20070 */ lwc1 $f2, 0x70($sp)
|
|
/* 0A44D4 7F06F9A4 44814000 */ mtc1 $at, $f8
|
|
/* 0A44D8 7F06F9A8 E7A00058 */ swc1 $f0, 0x58($sp)
|
|
/* 0A44DC 7F06F9AC C7AA005C */ lwc1 $f10, 0x5c($sp)
|
|
/* 0A44E0 7F06F9B0 46081032 */ c.eq.s $f2, $f8
|
|
/* 0A44E4 7F06F9B4 00000000 */ nop
|
|
/* 0A44E8 7F06F9B8 45010009 */ bc1t .L7F06F9E0
|
|
/* 0A44EC 7F06F9BC 00000000 */ nop
|
|
/* 0A44F0 7F06F9C0 46025102 */ mul.s $f4, $f10, $f2
|
|
/* 0A44F4 7F06F9C4 C7A60060 */ lwc1 $f6, 0x60($sp)
|
|
/* 0A44F8 7F06F9C8 C7AA0064 */ lwc1 $f10, 0x64($sp)
|
|
/* 0A44FC 7F06F9CC 46023202 */ mul.s $f8, $f6, $f2
|
|
/* 0A4500 7F06F9D0 E7A4005C */ swc1 $f4, 0x5c($sp)
|
|
/* 0A4504 7F06F9D4 46025102 */ mul.s $f4, $f10, $f2
|
|
/* 0A4508 7F06F9D8 E7A80060 */ swc1 $f8, 0x60($sp)
|
|
/* 0A450C 7F06F9DC E7A40064 */ swc1 $f4, 0x64($sp)
|
|
.L7F06F9E0:
|
|
/* 0A4510 7F06F9E0 0FC15FA8 */ jal cosf
|
|
/* 0A4514 7F06F9E4 C60C0014 */ lwc1 $f12, 0x14($s0)
|
|
/* 0A4518 7F06F9E8 C60C0014 */ lwc1 $f12, 0x14($s0)
|
|
/* 0A451C 7F06F9EC 0FC15FAB */ jal sinf
|
|
/* 0A4520 7F06F9F0 E7A0006C */ swc1 $f0, 0x6c($sp)
|
|
/* 0A4524 7F06F9F4 C622002C */ lwc1 $f2, 0x2c($s1)
|
|
/* 0A4528 7F06F9F8 44803000 */ mtc1 $zero, $f6
|
|
/* 0A452C 7F06F9FC C7B2006C */ lwc1 $f18, 0x6c($sp)
|
|
/* 0A4530 7F06FA00 24190001 */ li $t9, 1
|
|
/* 0A4534 7F06FA04 46023032 */ c.eq.s $f6, $f2
|
|
/* 0A4538 7F06FA08 C7A60064 */ lwc1 $f6, 0x64($sp)
|
|
/* 0A453C 7F06FA0C C7AA005C */ lwc1 $f10, 0x5c($sp)
|
|
/* 0A4540 7F06FA10 45000032 */ bc1f .L7F06FADC
|
|
/* 0A4544 7F06FA14 00000000 */ nop
|
|
/* 0A4548 7F06FA18 C608000C */ lwc1 $f8, 0xc($s0)
|
|
/* 0A454C 7F06FA1C C60A0004 */ lwc1 $f10, 4($s0)
|
|
/* 0A4550 7F06FA20 C6020008 */ lwc1 $f2, 8($s0)
|
|
/* 0A4554 7F06FA24 C6060010 */ lwc1 $f6, 0x10($s0)
|
|
/* 0A4558 7F06FA28 460A4101 */ sub.s $f4, $f8, $f10
|
|
/* 0A455C 7F06FA2C C6080014 */ lwc1 $f8, 0x14($s0)
|
|
/* 0A4560 7F06FA30 E6020034 */ swc1 $f2, 0x34($s0)
|
|
/* 0A4564 7F06FA34 E606003C */ swc1 $f6, 0x3c($s0)
|
|
/* 0A4568 7F06FA38 E6040038 */ swc1 $f4, 0x38($s0)
|
|
/* 0A456C 7F06FA3C E6080030 */ swc1 $f8, 0x30($s0)
|
|
/* 0A4570 7F06FA40 C7AA0064 */ lwc1 $f10, 0x64($sp)
|
|
/* 0A4574 7F06FA44 C7A6005C */ lwc1 $f6, 0x5c($sp)
|
|
/* 0A4578 7F06FA48 46005102 */ mul.s $f4, $f10, $f0
|
|
/* 0A457C 7F06FA4C 00000000 */ nop
|
|
/* 0A4580 7F06FA50 46123202 */ mul.s $f8, $f6, $f18
|
|
/* 0A4584 7F06FA54 46081200 */ add.s $f8, $f2, $f8
|
|
/* 0A4588 7F06FA58 46003182 */ mul.s $f6, $f6, $f0
|
|
/* 0A458C 7F06FA5C 46082100 */ add.s $f4, $f4, $f8
|
|
/* 0A4590 7F06FA60 C7A80060 */ lwc1 $f8, 0x60($sp)
|
|
/* 0A4594 7F06FA64 E7A4004C */ swc1 $f4, 0x4c($sp)
|
|
/* 0A4598 7F06FA68 E7A80050 */ swc1 $f8, 0x50($sp)
|
|
/* 0A459C 7F06FA6C C608003C */ lwc1 $f8, 0x3c($s0)
|
|
/* 0A45A0 7F06FA70 46064201 */ sub.s $f8, $f8, $f6
|
|
/* 0A45A4 7F06FA74 46125182 */ mul.s $f6, $f10, $f18
|
|
/* 0A45A8 7F06FA78 46083280 */ add.s $f10, $f6, $f8
|
|
/* 0A45AC 7F06FA7C E7AA0054 */ swc1 $f10, 0x54($sp)
|
|
/* 0A45B0 7F06FA80 E6040024 */ swc1 $f4, 0x24($s0)
|
|
/* 0A45B4 7F06FA84 C6040018 */ lwc1 $f4, 0x18($s0)
|
|
/* 0A45B8 7F06FA88 44805000 */ mtc1 $zero, $f10
|
|
/* 0A45BC 7F06FA8C C7A60050 */ lwc1 $f6, 0x50($sp)
|
|
/* 0A45C0 7F06FA90 46045032 */ c.eq.s $f10, $f4
|
|
/* 0A45C4 7F06FA94 E6060028 */ swc1 $f6, 0x28($s0)
|
|
/* 0A45C8 7F06FA98 C7A80054 */ lwc1 $f8, 0x54($sp)
|
|
/* 0A45CC 7F06FA9C 4500000D */ bc1f .L7F06FAD4
|
|
/* 0A45D0 7F06FAA0 E608002C */ swc1 $f8, 0x2c($s0)
|
|
/* 0A45D4 7F06FAA4 C6060030 */ lwc1 $f6, 0x30($s0)
|
|
/* 0A45D8 7F06FAA8 C7A80058 */ lwc1 $f8, 0x58($sp)
|
|
/* 0A45DC 7F06FAAC 3C018005 */ lui $at, %hi(D_80054D40)
|
|
/* 0A45E0 7F06FAB0 C4224D40 */ lwc1 $f2, %lo(D_80054D40)($at)
|
|
/* 0A45E4 7F06FAB4 46083000 */ add.s $f0, $f6, $f8
|
|
/* 0A45E8 7F06FAB8 4600103E */ c.le.s $f2, $f0
|
|
/* 0A45EC 7F06FABC E6000020 */ swc1 $f0, 0x20($s0)
|
|
/* 0A45F0 7F06FAC0 45000004 */ bc1f .L7F06FAD4
|
|
/* 0A45F4 7F06FAC4 00000000 */ nop
|
|
/* 0A45F8 7F06FAC8 C60A0020 */ lwc1 $f10, 0x20($s0)
|
|
/* 0A45FC 7F06FACC 46025101 */ sub.s $f4, $f10, $f2
|
|
/* 0A4600 7F06FAD0 E6040020 */ swc1 $f4, 0x20($s0)
|
|
.L7F06FAD4:
|
|
/* 0A4604 7F06FAD4 10000053 */ b .L7F06FC24
|
|
/* 0A4608 7F06FAD8 A2190001 */ sb $t9, 1($s0)
|
|
.L7F06FADC:
|
|
/* 0A460C 7F06FADC 46003202 */ mul.s $f8, $f6, $f0
|
|
/* 0A4610 7F06FAE0 3C013F80 */ li $at, 0x3F800000 # 1.000000
|
|
/* 0A4614 7F06FAE4 C7B00060 */ lwc1 $f16, 0x60($sp)
|
|
/* 0A4618 7F06FAE8 46125102 */ mul.s $f4, $f10, $f18
|
|
/* 0A461C 7F06FAEC 46044380 */ add.s $f14, $f8, $f4
|
|
/* 0A4620 7F06FAF0 46123202 */ mul.s $f8, $f6, $f18
|
|
/* 0A4624 7F06FAF4 46005107 */ neg.s $f4, $f10
|
|
/* 0A4628 7F06FAF8 46002182 */ mul.s $f6, $f4, $f0
|
|
/* 0A462C 7F06FAFC 46064280 */ add.s $f10, $f8, $f6
|
|
/* 0A4630 7F06FB00 44814000 */ mtc1 $at, $f8
|
|
/* 0A4634 7F06FB04 00000000 */ nop
|
|
/* 0A4638 7F06FB08 46024181 */ sub.s $f6, $f8, $f2
|
|
/* 0A463C 7F06FB0C E7AA0030 */ swc1 $f10, 0x30($sp)
|
|
/* 0A4640 7F06FB10 C6040008 */ lwc1 $f4, 8($s0)
|
|
/* 0A4644 7F06FB14 E7B00044 */ swc1 $f16, 0x44($sp)
|
|
/* 0A4648 7F06FB18 46067202 */ mul.s $f8, $f14, $f6
|
|
/* 0A464C 7F06FB1C 46082180 */ add.s $f6, $f4, $f8
|
|
/* 0A4650 7F06FB20 44812000 */ mtc1 $at, $f4
|
|
/* 0A4654 7F06FB24 E7A60040 */ swc1 $f6, 0x40($sp)
|
|
/* 0A4658 7F06FB28 C628002C */ lwc1 $f8, 0x2c($s1)
|
|
/* 0A465C 7F06FB2C 46082181 */ sub.s $f6, $f4, $f8
|
|
/* 0A4660 7F06FB30 C6080010 */ lwc1 $f8, 0x10($s0)
|
|
/* 0A4664 7F06FB34 46065102 */ mul.s $f4, $f10, $f6
|
|
/* 0A4668 7F06FB38 C7A60040 */ lwc1 $f6, 0x40($sp)
|
|
/* 0A466C 7F06FB3C 46044280 */ add.s $f10, $f8, $f4
|
|
/* 0A4670 7F06FB40 E7AA0048 */ swc1 $f10, 0x48($sp)
|
|
/* 0A4674 7F06FB44 E6060024 */ swc1 $f6, 0x24($s0)
|
|
/* 0A4678 7F06FB48 C7A80044 */ lwc1 $f8, 0x44($sp)
|
|
/* 0A467C 7F06FB4C C60A0024 */ lwc1 $f10, 0x24($s0)
|
|
/* 0A4680 7F06FB50 E6080028 */ swc1 $f8, 0x28($s0)
|
|
/* 0A4684 7F06FB54 C7A40048 */ lwc1 $f4, 0x48($sp)
|
|
/* 0A4688 7F06FB58 C608000C */ lwc1 $f8, 0xc($s0)
|
|
/* 0A468C 7F06FB5C 460E5181 */ sub.s $f6, $f10, $f14
|
|
/* 0A4690 7F06FB60 E604002C */ swc1 $f4, 0x2c($s0)
|
|
/* 0A4694 7F06FB64 C6040004 */ lwc1 $f4, 4($s0)
|
|
/* 0A4698 7F06FB68 E6060034 */ swc1 $f6, 0x34($s0)
|
|
/* 0A469C 7F06FB6C 46044301 */ sub.s $f12, $f8, $f4
|
|
/* 0A46A0 7F06FB70 C622002C */ lwc1 $f2, 0x2c($s1)
|
|
/* 0A46A4 7F06FB74 44814000 */ mtc1 $at, $f8
|
|
/* 0A46A8 7F06FB78 3C018005 */ lui $at, %hi(D_80054D44)
|
|
/* 0A46AC 7F06FB7C 460C8281 */ sub.s $f10, $f16, $f12
|
|
/* 0A46B0 7F06FB80 46024101 */ sub.s $f4, $f8, $f2
|
|
/* 0A46B4 7F06FB84 46025182 */ mul.s $f6, $f10, $f2
|
|
/* 0A46B8 7F06FB88 46043283 */ div.s $f10, $f6, $f4
|
|
/* 0A46BC 7F06FB8C C606002C */ lwc1 $f6, 0x2c($s0)
|
|
/* 0A46C0 7F06FB90 460A6201 */ sub.s $f8, $f12, $f10
|
|
/* 0A46C4 7F06FB94 C60C0014 */ lwc1 $f12, 0x14($s0)
|
|
/* 0A46C8 7F06FB98 E6080038 */ swc1 $f8, 0x38($s0)
|
|
/* 0A46CC 7F06FB9C C7A40030 */ lwc1 $f4, 0x30($sp)
|
|
/* 0A46D0 7F06FBA0 46043281 */ sub.s $f10, $f6, $f4
|
|
/* 0A46D4 7F06FBA4 44803000 */ mtc1 $zero, $f6
|
|
/* 0A46D8 7F06FBA8 E60A003C */ swc1 $f10, 0x3c($s0)
|
|
/* 0A46DC 7F06FBAC C7A80058 */ lwc1 $f8, 0x58($sp)
|
|
/* 0A46E0 7F06FBB0 46086381 */ sub.s $f14, $f12, $f8
|
|
/* 0A46E4 7F06FBB4 4606703C */ c.lt.s $f14, $f6
|
|
/* 0A46E8 7F06FBB8 00000000 */ nop
|
|
/* 0A46EC 7F06FBBC 45000003 */ bc1f .L7F06FBCC
|
|
/* 0A46F0 7F06FBC0 00000000 */ nop
|
|
/* 0A46F4 7F06FBC4 C4244D44 */ lwc1 $f4, %lo(D_80054D44)($at)
|
|
/* 0A46F8 7F06FBC8 46047380 */ add.s $f14, $f14, $f4
|
|
.L7F06FBCC:
|
|
/* 0A46FC 7F06FBCC 0FC1B433 */ jal sub_GAME_7F06D0CC
|
|
/* 0A4700 7F06FBD0 8E26002C */ lw $a2, 0x2c($s1)
|
|
/* 0A4704 7F06FBD4 44805000 */ mtc1 $zero, $f10
|
|
/* 0A4708 7F06FBD8 C6080018 */ lwc1 $f8, 0x18($s0)
|
|
/* 0A470C 7F06FBDC 3C018005 */ lui $at, %hi(D_80054D48)
|
|
/* 0A4710 7F06FBE0 C4224D48 */ lwc1 $f2, %lo(D_80054D48)($at)
|
|
/* 0A4714 7F06FBE4 46085032 */ c.eq.s $f10, $f8
|
|
/* 0A4718 7F06FBE8 E6000030 */ swc1 $f0, 0x30($s0)
|
|
/* 0A471C 7F06FBEC C7A40058 */ lwc1 $f4, 0x58($sp)
|
|
/* 0A4720 7F06FBF0 24080001 */ li $t0, 1
|
|
/* 0A4724 7F06FBF4 4502000B */ bc1fl .L7F06FC24
|
|
/* 0A4728 7F06FBF8 A2080001 */ sb $t0, 1($s0)
|
|
/* 0A472C 7F06FBFC C6060030 */ lwc1 $f6, 0x30($s0)
|
|
/* 0A4730 7F06FC00 46043000 */ add.s $f0, $f6, $f4
|
|
/* 0A4734 7F06FC04 4600103E */ c.le.s $f2, $f0
|
|
/* 0A4738 7F06FC08 E6000020 */ swc1 $f0, 0x20($s0)
|
|
/* 0A473C 7F06FC0C 45020005 */ bc1fl .L7F06FC24
|
|
/* 0A4740 7F06FC10 A2080001 */ sb $t0, 1($s0)
|
|
/* 0A4744 7F06FC14 C60A0020 */ lwc1 $f10, 0x20($s0)
|
|
/* 0A4748 7F06FC18 46025201 */ sub.s $f8, $f10, $f2
|
|
/* 0A474C 7F06FC1C E6080020 */ swc1 $f8, 0x20($s0)
|
|
/* 0A4750 7F06FC20 A2080001 */ sb $t0, 1($s0)
|
|
.L7F06FC24:
|
|
/* 0A4754 7F06FC24 8FA9002C */ lw $t1, 0x2c($sp)
|
|
/* 0A4758 7F06FC28 51200004 */ beql $t1, $zero, .L7F06FC3C
|
|
/* 0A475C 7F06FC2C 8FBF0024 */ lw $ra, 0x24($sp)
|
|
/* 0A4760 7F06FC30 C6060028 */ lwc1 $f6, 0x28($s0)
|
|
/* 0A4764 7F06FC34 E6060038 */ swc1 $f6, 0x38($s0)
|
|
/* 0A4768 7F06FC38 8FBF0024 */ lw $ra, 0x24($sp)
|
|
.L7F06FC3C:
|
|
/* 0A476C 7F06FC3C 8FB0001C */ lw $s0, 0x1c($sp)
|
|
/* 0A4770 7F06FC40 8FB10020 */ lw $s1, 0x20($sp)
|
|
/* 0A4774 7F06FC44 03E00008 */ jr $ra
|
|
/* 0A4778 7F06FC48 27BD0090 */ addiu $sp, $sp, 0x90
|
|
)
|
|
#endif
|
|
|
|
|
|
void modelSetAnimationWithMerge(Model *model, ModelAnimation *modelAnimation, s32 flip, f32 startframe, f32 speed, f32 timemerge, s32 domerge) {
|
|
if (domerge != 0) {
|
|
modelCopyAnimForMerge(model, timemerge);
|
|
}
|
|
modelSetAnimation2(model, modelAnimation, flip, startframe, speed, timemerge);
|
|
}
|
|
|
|
|
|
|
|
void modelSetAnimation(Model *model, ModelAnimation *modelAnimation, s32 flip, f32 startframe, f32 speed, f32 merge) {
|
|
modelCopyAnimForMerge(model, merge);
|
|
modelSetAnimation2(model, modelAnimation, flip, startframe, speed, merge);
|
|
}
|
|
|
|
|
|
#ifdef NONMATCHING
|
|
void sub_GAME_7F06FCFC()
|
|
{
|
|
|
|
}
|
|
#else
|
|
GLOBAL_ASM(
|
|
.text
|
|
glabel sub_GAME_7F06FCFC
|
|
/* 0A482C 7F06FCFC 8CA10000 */ lw $at, ($a1)
|
|
/* 0A4830 7F06FD00 27BDFFE0 */ addiu $sp, $sp, -0x20
|
|
/* 0A4834 7F06FD04 27A20000 */ addiu $v0, $sp, 0
|
|
/* 0A4838 7F06FD08 AC410000 */ sw $at, ($v0)
|
|
/* 0A483C 7F06FD0C 8CB80004 */ lw $t8, 4($a1)
|
|
/* 0A4840 7F06FD10 00805025 */ move $t2, $a0
|
|
/* 0A4844 7F06FD14 00A05825 */ move $t3, $a1
|
|
/* 0A4848 7F06FD18 AC580004 */ sw $t8, 4($v0)
|
|
/* 0A484C 7F06FD1C 8CA10008 */ lw $at, 8($a1)
|
|
/* 0A4850 7F06FD20 248900B4 */ addiu $t1, $a0, 0xb4
|
|
/* 0A4854 7F06FD24 AC410008 */ sw $at, 8($v0)
|
|
/* 0A4858 7F06FD28 8CB8000C */ lw $t8, 0xc($a1)
|
|
/* 0A485C 7F06FD2C AC58000C */ sw $t8, 0xc($v0)
|
|
/* 0A4860 7F06FD30 8CA10010 */ lw $at, 0x10($a1)
|
|
/* 0A4864 7F06FD34 AC410010 */ sw $at, 0x10($v0)
|
|
/* 0A4868 7F06FD38 8CB80014 */ lw $t8, 0x14($a1)
|
|
/* 0A486C 7F06FD3C AC580014 */ sw $t8, 0x14($v0)
|
|
/* 0A4870 7F06FD40 8CA10018 */ lw $at, 0x18($a1)
|
|
/* 0A4874 7F06FD44 AC410018 */ sw $at, 0x18($v0)
|
|
/* 0A4878 7F06FD48 8CB8001C */ lw $t8, 0x1c($a1)
|
|
/* 0A487C 7F06FD4C AC58001C */ sw $t8, 0x1c($v0)
|
|
.L7F06FD50:
|
|
/* 0A4880 7F06FD50 8D410000 */ lw $at, ($t2)
|
|
/* 0A4884 7F06FD54 254A000C */ addiu $t2, $t2, 0xc
|
|
/* 0A4888 7F06FD58 256B000C */ addiu $t3, $t3, 0xc
|
|
/* 0A488C 7F06FD5C AD61FFF4 */ sw $at, -0xc($t3)
|
|
/* 0A4890 7F06FD60 8D41FFF8 */ lw $at, -8($t2)
|
|
/* 0A4894 7F06FD64 AD61FFF8 */ sw $at, -8($t3)
|
|
/* 0A4898 7F06FD68 8D41FFFC */ lw $at, -4($t2)
|
|
/* 0A489C 7F06FD6C 1549FFF8 */ bne $t2, $t1, .L7F06FD50
|
|
/* 0A48A0 7F06FD70 AD61FFFC */ sw $at, -4($t3)
|
|
/* 0A48A4 7F06FD74 8D410000 */ lw $at, ($t2)
|
|
/* 0A48A8 7F06FD78 AD610000 */ sw $at, ($t3)
|
|
/* 0A48AC 7F06FD7C 8D490004 */ lw $t1, 4($t2)
|
|
/* 0A48B0 7F06FD80 AD690004 */ sw $t1, 4($t3)
|
|
/* 0A48B4 7F06FD84 8C410000 */ lw $at, ($v0)
|
|
/* 0A48B8 7F06FD88 ACA10000 */ sw $at, ($a1)
|
|
/* 0A48BC 7F06FD8C 8C4F0004 */ lw $t7, 4($v0)
|
|
/* 0A48C0 7F06FD90 ACAF0004 */ sw $t7, 4($a1)
|
|
/* 0A48C4 7F06FD94 8C410008 */ lw $at, 8($v0)
|
|
/* 0A48C8 7F06FD98 ACA10008 */ sw $at, 8($a1)
|
|
/* 0A48CC 7F06FD9C 8C4F000C */ lw $t7, 0xc($v0)
|
|
/* 0A48D0 7F06FDA0 ACAF000C */ sw $t7, 0xc($a1)
|
|
/* 0A48D4 7F06FDA4 8C410010 */ lw $at, 0x10($v0)
|
|
/* 0A48D8 7F06FDA8 ACA10010 */ sw $at, 0x10($a1)
|
|
/* 0A48DC 7F06FDAC 8C4F0014 */ lw $t7, 0x14($v0)
|
|
/* 0A48E0 7F06FDB0 ACAF0014 */ sw $t7, 0x14($a1)
|
|
/* 0A48E4 7F06FDB4 8C410018 */ lw $at, 0x18($v0)
|
|
/* 0A48E8 7F06FDB8 ACA10018 */ sw $at, 0x18($a1)
|
|
/* 0A48EC 7F06FDBC 8C4F001C */ lw $t7, 0x1c($v0)
|
|
/* 0A48F0 7F06FDC0 27BD0020 */ addiu $sp, $sp, 0x20
|
|
/* 0A48F4 7F06FDC4 03E00008 */ jr $ra
|
|
/* 0A48F8 7F06FDC8 ACAF001C */ sw $t7, 0x1c($a1)
|
|
)
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
void modelSetAnimLooping(Model *model, f32 loopframe, f32 loopmerge) {
|
|
model->animlooping = 1;
|
|
model->animloopframe = loopframe;
|
|
model->animloopmerge = loopmerge;
|
|
}
|
|
|
|
|
|
void modelSetAnimEndFrame(Model *model, f32 endframe) {
|
|
ModelAnimation *modelAnimation = model->anim;
|
|
|
|
if ((modelAnimation != NULL) && (endframe < (modelAnimation->unk04 - 1))) {
|
|
model->endframe = endframe;
|
|
} else {
|
|
model->endframe = -1.0f;
|
|
}
|
|
}
|
|
|
|
void modelSetAnimFlipFunction(Model *model, void *callback) {
|
|
model->animflipfunc = callback;
|
|
}
|
|
|
|
|
|
/**
|
|
* Unused Function
|
|
*/
|
|
void sub_GAME_7F06FE44(Model *model, s32 arg1) {
|
|
model->unk9c = arg1;
|
|
}
|
|
|
|
void modelSetAnimSpeed(Model *model, f32 anim_speed, f32 startframe) {
|
|
|
|
if (startframe > 0.0f) {
|
|
model->timespeed = startframe;
|
|
model->newspeed = anim_speed;
|
|
model->elapsespeed = 0.0f;
|
|
model->oldspeed = model->speed;
|
|
return;
|
|
}
|
|
|
|
model->speed = anim_speed;
|
|
model->timespeed = 0.0f;
|
|
}
|
|
|
|
/**
|
|
* @param arg0:
|
|
* @param arg1:
|
|
* @param arg2: must be non-zero.
|
|
*
|
|
* Address 0x7F06FE90.
|
|
*/
|
|
void sub_GAME_7F06FE90(Model *model, f32 arg1, f32 arg2)
|
|
{
|
|
f32 temp_f0;
|
|
f32 phi_f2;
|
|
f32 t;
|
|
|
|
temp_f0 = model->unk28;
|
|
|
|
if (temp_f0 <= arg1)
|
|
{
|
|
phi_f2 = arg1 - temp_f0;
|
|
}
|
|
else
|
|
{
|
|
phi_f2 = ( (f32)model->anim->unk04 - temp_f0) + arg1;
|
|
}
|
|
|
|
t = model->speed + ((2.0f * phi_f2) / arg2);
|
|
modelSetAnimSpeed(model, t, arg2);
|
|
}
|
|
|
|
void modelSetAnimPlaySpeed(Model *model, f32 animation_rate, f32 startframe) {
|
|
if (startframe > 0.0f) {
|
|
model->unkb0 = startframe;
|
|
model->animrate = animation_rate;
|
|
model->unkb4 = 0.0f;
|
|
model->unkac = model->playspeed;
|
|
return;
|
|
}
|
|
model->playspeed = animation_rate;
|
|
model->unkb0 = 0.0f;
|
|
}
|
|
|
|
|
|
void sub_GAME_7F06FF5C(Model *model, s32 arg1) {
|
|
model->unka0 = arg1;
|
|
}
|
|
|
|
|
|
void modelSetAnimFrame(Model* model, f32 frame)
|
|
{
|
|
s32 framea;
|
|
s32 frameb;
|
|
bool forwards;
|
|
|
|
framea = floorFloatToInt(frame);
|
|
|
|
forwards = (model->speed >= 0);
|
|
frameb = (forwards ? framea + 1 : framea - 1);
|
|
|
|
model->framea = modelConstrainOrWrapAnimFrame(framea, model->anim, model->endframe);
|
|
model->frameb = modelConstrainOrWrapAnimFrame(frameb, model->anim, model->endframe);
|
|
|
|
if (model->framea == model->frameb)
|
|
{
|
|
model->unk2c = 0.0f;
|
|
model->unk28 = model->framea;
|
|
}
|
|
else if (forwards)
|
|
{
|
|
f32 tmp = frame - framea;
|
|
model->unk2c = tmp;
|
|
model->unk28 = model->framea + tmp;
|
|
}
|
|
else
|
|
{
|
|
f32 tmp = 1.0f - (frame - (f32) frameb);
|
|
model->unk2c = tmp;
|
|
model->unk28 = model->frameb + (1.0f - tmp);
|
|
}
|
|
}
|
|
|
|
|
|
void modelSetAnimFrame2(Model* model, f32 frame1, f32 frame2)
|
|
{
|
|
s32 framea;
|
|
s32 frameb;
|
|
bool forwards;
|
|
|
|
modelSetAnimFrame(model, frame1);
|
|
|
|
if (model->anim2 != NULL)
|
|
{
|
|
framea = floorFloatToInt(frame2);
|
|
|
|
forwards = (model->speed2 >= 0.0f);
|
|
frameb = forwards ? (framea + 1) : (framea - 1);
|
|
|
|
model->frame2a = modelConstrainOrWrapAnimFrame(framea, model->anim2, model->unk6c);
|
|
model->frame2b = modelConstrainOrWrapAnimFrame(frameb, model->anim2, model->unk6c);
|
|
|
|
if (model->frame2a == model->frame2b)
|
|
{
|
|
model->unk5c = 0.0f;
|
|
model->unk58 = model->frame2a;
|
|
}
|
|
else if (forwards != 0)
|
|
{
|
|
f32 tmp = frame2 - framea;
|
|
model->unk5c = tmp;
|
|
model->unk58 = model->frame2a + tmp;
|
|
}
|
|
else
|
|
{
|
|
f32 tmp = 1.0f - (frame2 - (f32) frameb);
|
|
model->unk5c = tmp;
|
|
model->unk58 = model->frame2b + (1.0f - tmp);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* Address 0x7F0701D4.
|
|
*/
|
|
void modelSetAnimMergingEnabled(s32 arg0)
|
|
{
|
|
g_ModelAnimMergingEnabled = arg0;
|
|
}
|
|
|
|
|
|
/**
|
|
* Address 0x7F0701E0.
|
|
*/
|
|
u32 modelIsAnimMergingEnabled(void)
|
|
{
|
|
return g_ModelAnimMergingEnabled;
|
|
}
|
|
|
|
|
|
|
|
|
|
#ifdef NONMATCHING
|
|
void modelSetAnimFrame2WithChrStuff(void) {
|
|
|
|
}
|
|
#else
|
|
GLOBAL_ASM(
|
|
.late_rodata
|
|
glabel D_80054D4C
|
|
.word 0x40c90fdb /*6.2831855*/
|
|
.text
|
|
glabel modelSetAnimFrame2WithChrStuff
|
|
/* 0A4D1C 7F0701EC 27BDFF08 */ addiu $sp, $sp, -0xf8
|
|
/* 0A4D20 7F0701F0 AFBF005C */ sw $ra, 0x5c($sp)
|
|
/* 0A4D24 7F0701F4 AFB30058 */ sw $s3, 0x58($sp)
|
|
/* 0A4D28 7F0701F8 AFB20054 */ sw $s2, 0x54($sp)
|
|
/* 0A4D2C 7F0701FC AFB10050 */ sw $s1, 0x50($sp)
|
|
/* 0A4D30 7F070200 AFB0004C */ sw $s0, 0x4c($sp)
|
|
/* 0A4D34 7F070204 F7BE0040 */ sdc1 $f30, 0x40($sp)
|
|
/* 0A4D38 7F070208 F7BC0038 */ sdc1 $f28, 0x38($sp)
|
|
/* 0A4D3C 7F07020C F7BA0030 */ sdc1 $f26, 0x30($sp)
|
|
/* 0A4D40 7F070210 F7B80028 */ sdc1 $f24, 0x28($sp)
|
|
/* 0A4D44 7F070214 F7B60020 */ sdc1 $f22, 0x20($sp)
|
|
/* 0A4D48 7F070218 F7B40018 */ sdc1 $f20, 0x18($sp)
|
|
/* 0A4D4C 7F07021C AFA60100 */ sw $a2, 0x100($sp)
|
|
/* 0A4D50 7F070220 AFA70104 */ sw $a3, 0x104($sp)
|
|
/* 0A4D54 7F070224 8C8E0008 */ lw $t6, 8($a0)
|
|
/* 0A4D58 7F070228 4485A000 */ mtc1 $a1, $f20
|
|
/* 0A4D5C 7F07022C 24010001 */ li $at, 1
|
|
/* 0A4D60 7F070230 8DC50000 */ lw $a1, ($t6)
|
|
/* 0A4D64 7F070234 00808825 */ move $s1, $a0
|
|
/* 0A4D68 7F070238 94A20000 */ lhu $v0, ($a1)
|
|
/* 0A4D6C 7F07023C 304F00FF */ andi $t7, $v0, 0xff
|
|
/* 0A4D70 7F070240 55E10218 */ bnel $t7, $at, .L7F070AA4
|
|
/* 0A4D74 7F070244 C7B40108 */ lwc1 $f20, 0x108($sp)
|
|
/* 0A4D78 7F070248 0FC1B1E7 */ jal modelGetNodeRwData
|
|
/* 0A4D7C 7F07024C 8CB20004 */ lw $s2, 4($a1)
|
|
/* 0A4D80 7F070250 80580000 */ lb $t8, ($v0)
|
|
/* 0A4D84 7F070254 00408025 */ move $s0, $v0
|
|
/* 0A4D88 7F070258 5700020A */ bnezl $t8, .L7F070A84
|
|
/* 0A4D8C 7F07025C C7B40108 */ lwc1 $f20, 0x108($sp)
|
|
/* 0A4D90 7F070260 96590000 */ lhu $t9, ($s2)
|
|
/* 0A4D94 7F070264 3C0B8003 */ lui $t3, %hi(D_80036254)
|
|
/* 0A4D98 7F070268 256B6254 */ addiu $t3, %lo(D_80036254) # addiu $t3, $t3, 0x6254
|
|
/* 0A4D9C 7F07026C AFB900E4 */ sw $t9, 0xe4($sp)
|
|
/* 0A4DA0 7F070270 8E280008 */ lw $t0, 8($s1)
|
|
/* 0A4DA4 7F070274 27AA00C8 */ addiu $t2, $sp, 0xc8
|
|
/* 0A4DA8 7F070278 4480C000 */ mtc1 $zero, $f24
|
|
/* 0A4DAC 7F07027C 8D090004 */ lw $t1, 4($t0)
|
|
/* 0A4DB0 7F070280 AFA900E0 */ sw $t1, 0xe0($sp)
|
|
/* 0A4DB4 7F070284 C62600B8 */ lwc1 $f6, 0xb8($s1)
|
|
/* 0A4DB8 7F070288 C6240014 */ lwc1 $f4, 0x14($s1)
|
|
/* 0A4DBC 7F07028C 46062202 */ mul.s $f8, $f4, $f6
|
|
/* 0A4DC0 7F070290 E7A800DC */ swc1 $f8, 0xdc($sp)
|
|
/* 0A4DC4 7F070294 8D610000 */ lw $at, ($t3)
|
|
/* 0A4DC8 7F070298 8D6E0004 */ lw $t6, 4($t3)
|
|
/* 0A4DCC 7F07029C AD410000 */ sw $at, ($t2)
|
|
/* 0A4DD0 7F0702A0 8D610008 */ lw $at, 8($t3)
|
|
/* 0A4DD4 7F0702A4 AD4E0004 */ sw $t6, 4($t2)
|
|
/* 0A4DD8 7F0702A8 AD410008 */ sw $at, 8($t2)
|
|
/* 0A4DDC 7F0702AC C44A0034 */ lwc1 $f10, 0x34($v0)
|
|
/* 0A4DE0 7F0702B0 E7AA00AC */ swc1 $f10, 0xac($sp)
|
|
/* 0A4DE4 7F0702B4 C4500038 */ lwc1 $f16, 0x38($v0)
|
|
/* 0A4DE8 7F0702B8 E7B000B0 */ swc1 $f16, 0xb0($sp)
|
|
/* 0A4DEC 7F0702BC C452003C */ lwc1 $f18, 0x3c($v0)
|
|
/* 0A4DF0 7F0702C0 C7B00100 */ lwc1 $f16, 0x100($sp)
|
|
/* 0A4DF4 7F0702C4 E7B200B4 */ swc1 $f18, 0xb4($sp)
|
|
/* 0A4DF8 7F0702C8 C4440024 */ lwc1 $f4, 0x24($v0)
|
|
/* 0A4DFC 7F0702CC C45C0030 */ lwc1 $f28, 0x30($v0)
|
|
/* 0A4E00 7F0702D0 E7A4009C */ swc1 $f4, 0x9c($sp)
|
|
/* 0A4E04 7F0702D4 C4460028 */ lwc1 $f6, 0x28($v0)
|
|
/* 0A4E08 7F0702D8 E7A600A0 */ swc1 $f6, 0xa0($sp)
|
|
/* 0A4E0C 7F0702DC C448002C */ lwc1 $f8, 0x2c($v0)
|
|
/* 0A4E10 7F0702E0 E7A800A4 */ swc1 $f8, 0xa4($sp)
|
|
/* 0A4E14 7F0702E4 C44A0020 */ lwc1 $f10, 0x20($v0)
|
|
/* 0A4E18 7F0702E8 E7AA0098 */ swc1 $f10, 0x98($sp)
|
|
/* 0A4E1C 7F0702EC 804F0001 */ lb $t7, 1($v0)
|
|
/* 0A4E20 7F0702F0 AFAF0094 */ sw $t7, 0x94($sp)
|
|
/* 0A4E24 7F0702F4 C63E0040 */ lwc1 $f30, 0x40($s1)
|
|
/* 0A4E28 7F0702F8 4618F03C */ c.lt.s $f30, $f24
|
|
/* 0A4E2C 7F0702FC 00000000 */ nop
|
|
/* 0A4E30 7F070300 45020003 */ bc1fl .L7F070310
|
|
/* 0A4E34 7F070304 C6200070 */ lwc1 $f0, 0x70($s1)
|
|
/* 0A4E38 7F070308 4600F787 */ neg.s $f30, $f30
|
|
/* 0A4E3C 7F07030C C6200070 */ lwc1 $f0, 0x70($s1)
|
|
.L7F070310:
|
|
/* 0A4E40 7F070310 4618003C */ c.lt.s $f0, $f24
|
|
/* 0A4E44 7F070314 00000000 */ nop
|
|
/* 0A4E48 7F070318 45020003 */ bc1fl .L7F070328
|
|
/* 0A4E4C 7F07031C 4610A03E */ c.le.s $f20, $f16
|
|
/* 0A4E50 7F070320 46000007 */ neg.s $f0, $f0
|
|
/* 0A4E54 7F070324 4610A03E */ c.le.s $f20, $f16
|
|
.L7F070328:
|
|
/* 0A4E58 7F070328 00009825 */ move $s3, $zero
|
|
/* 0A4E5C 7F07032C 45000002 */ bc1f .L7F070338
|
|
/* 0A4E60 7F070330 00000000 */ nop
|
|
/* 0A4E64 7F070334 24130001 */ li $s3, 1
|
|
.L7F070338:
|
|
/* 0A4E68 7F070338 5260000A */ beql $s3, $zero, .L7F070364
|
|
/* 0A4E6C 7F07033C 4600A306 */ mov.s $f12, $f20
|
|
/* 0A4E70 7F070340 4600A306 */ mov.s $f12, $f20
|
|
/* 0A4E74 7F070344 0FC170F6 */ jal floorFloatToInt
|
|
/* 0A4E78 7F070348 E7A00088 */ swc1 $f0, 0x88($sp)
|
|
/* 0A4E7C 7F07034C 24520001 */ addiu $s2, $v0, 1
|
|
/* 0A4E80 7F070350 0FC170F6 */ jal floorFloatToInt
|
|
/* 0A4E84 7F070354 C7AC0100 */ lwc1 $f12, 0x100($sp)
|
|
/* 0A4E88 7F070358 10000008 */ b .L7F07037C
|
|
/* 0A4E8C 7F07035C AFA200B8 */ sw $v0, 0xb8($sp)
|
|
/* 0A4E90 7F070360 4600A306 */ mov.s $f12, $f20
|
|
.L7F070364:
|
|
/* 0A4E94 7F070364 0FC1712E */ jal ceilFloatToInt
|
|
/* 0A4E98 7F070368 E7A00088 */ swc1 $f0, 0x88($sp)
|
|
/* 0A4E9C 7F07036C 2452FFFF */ addiu $s2, $v0, -1
|
|
/* 0A4EA0 7F070370 0FC1712E */ jal ceilFloatToInt
|
|
/* 0A4EA4 7F070374 C7AC0100 */ lwc1 $f12, 0x100($sp)
|
|
/* 0A4EA8 7F070378 AFA200B8 */ sw $v0, 0xb8($sp)
|
|
.L7F07037C:
|
|
/* 0A4EAC 7F07037C 3C018005 */ lui $at, %hi(D_80054D4C)
|
|
/* 0A4EB0 7F070380 8FA700B8 */ lw $a3, 0xb8($sp)
|
|
/* 0A4EB4 7F070384 C43A4D4C */ lwc1 $f26, %lo(D_80054D4C)($at)
|
|
.L7F070388:
|
|
/* 0A4EB8 7F070388 12600006 */ beqz $s3, .L7F0703A4
|
|
/* 0A4EBC 7F07038C 0247082A */ slt $at, $s2, $a3
|
|
/* 0A4EC0 7F070390 00F2082A */ slt $at, $a3, $s2
|
|
/* 0A4EC4 7F070394 50200006 */ beql $at, $zero, .L7F0703B0
|
|
/* 0A4EC8 7F070398 8E250020 */ lw $a1, 0x20($s1)
|
|
/* 0A4ECC 7F07039C 10000130 */ b .L7F070860
|
|
/* 0A4ED0 7F0703A0 C7A600AC */ lwc1 $f6, 0xac($sp)
|
|
.L7F0703A4:
|
|
/* 0A4ED4 7F0703A4 5420012E */ bnezl $at, .L7F070860
|
|
/* 0A4ED8 7F0703A8 C7A600AC */ lwc1 $f6, 0xac($sp)
|
|
/* 0A4EDC 7F0703AC 8E250020 */ lw $a1, 0x20($s1)
|
|
.L7F0703B0:
|
|
/* 0A4EE0 7F0703B0 8E26003C */ lw $a2, 0x3c($s1)
|
|
/* 0A4EE4 7F0703B4 AFA700B8 */ sw $a3, 0xb8($sp)
|
|
/* 0A4EE8 7F0703B8 0FC1BD9B */ jal modelConstrainOrWrapAnimFrame
|
|
/* 0A4EEC 7F0703BC 02402025 */ move $a0, $s2
|
|
/* 0A4EF0 7F0703C0 A6220030 */ sh $v0, 0x30($s1)
|
|
/* 0A4EF4 7F0703C4 8FB80094 */ lw $t8, 0x94($sp)
|
|
/* 0A4EF8 7F0703C8 00401825 */ move $v1, $v0
|
|
/* 0A4EFC 7F0703CC 8FA600E0 */ lw $a2, 0xe0($sp)
|
|
/* 0A4F00 7F0703D0 1300000E */ beqz $t8, .L7F07040C
|
|
/* 0A4F04 7F0703D4 8FA400E4 */ lw $a0, 0xe4($sp)
|
|
/* 0A4F08 7F0703D8 C7B2009C */ lwc1 $f18, 0x9c($sp)
|
|
/* 0A4F0C 7F0703DC C7A400A0 */ lwc1 $f4, 0xa0($sp)
|
|
/* 0A4F10 7F0703E0 C7A600A4 */ lwc1 $f6, 0xa4($sp)
|
|
/* 0A4F14 7F0703E4 E7B200AC */ swc1 $f18, 0xac($sp)
|
|
/* 0A4F18 7F0703E8 E7A400B0 */ swc1 $f4, 0xb0($sp)
|
|
/* 0A4F1C 7F0703EC E7A600B4 */ swc1 $f6, 0xb4($sp)
|
|
/* 0A4F20 7F0703F0 C6080018 */ lwc1 $f8, 0x18($s0)
|
|
/* 0A4F24 7F0703F4 4608C032 */ c.eq.s $f24, $f8
|
|
/* 0A4F28 7F0703F8 00000000 */ nop
|
|
/* 0A4F2C 7F0703FC 45000046 */ bc1f .L7F070518
|
|
/* 0A4F30 7F070400 00000000 */ nop
|
|
/* 0A4F34 7F070404 10000044 */ b .L7F070518
|
|
/* 0A4F38 7F070408 C7BC0098 */ lwc1 $f28, 0x98($sp)
|
|
.L7F07040C:
|
|
/* 0A4F3C 7F07040C 82250024 */ lb $a1, 0x24($s1)
|
|
/* 0A4F40 7F070410 8E270020 */ lw $a3, 0x20($s1)
|
|
/* 0A4F44 7F070414 27B900C8 */ addiu $t9, $sp, 0xc8
|
|
/* 0A4F48 7F070418 AFB90014 */ sw $t9, 0x14($sp)
|
|
/* 0A4F4C 7F07041C 0FC1B4FD */ jal sub_GAME_7F06D3F4
|
|
/* 0A4F50 7F070420 AFA30010 */ sw $v1, 0x10($sp)
|
|
/* 0A4F54 7F070424 3C013F80 */ li $at, 0x3F800000 # 1.000000
|
|
/* 0A4F58 7F070428 44818000 */ mtc1 $at, $f16
|
|
/* 0A4F5C 7F07042C C7AA00DC */ lwc1 $f10, 0xdc($sp)
|
|
/* 0A4F60 7F070430 46000586 */ mov.s $f22, $f0
|
|
/* 0A4F64 7F070434 C7A200C8 */ lwc1 $f2, 0xc8($sp)
|
|
/* 0A4F68 7F070438 46105032 */ c.eq.s $f10, $f16
|
|
/* 0A4F6C 7F07043C C7B200CC */ lwc1 $f18, 0xcc($sp)
|
|
/* 0A4F70 7F070440 4503000A */ bc1tl .L7F07046C
|
|
/* 0A4F74 7F070444 C7A200C8 */ lwc1 $f2, 0xc8($sp)
|
|
/* 0A4F78 7F070448 460A1082 */ mul.s $f2, $f2, $f10
|
|
/* 0A4F7C 7F07044C C7AC00D0 */ lwc1 $f12, 0xd0($sp)
|
|
/* 0A4F80 7F070450 460A9102 */ mul.s $f4, $f18, $f10
|
|
/* 0A4F84 7F070454 00000000 */ nop
|
|
/* 0A4F88 7F070458 460A6302 */ mul.s $f12, $f12, $f10
|
|
/* 0A4F8C 7F07045C E7A200C8 */ swc1 $f2, 0xc8($sp)
|
|
/* 0A4F90 7F070460 E7A400CC */ swc1 $f4, 0xcc($sp)
|
|
/* 0A4F94 7F070464 E7AC00D0 */ swc1 $f12, 0xd0($sp)
|
|
/* 0A4F98 7F070468 C7A200C8 */ lwc1 $f2, 0xc8($sp)
|
|
.L7F07046C:
|
|
/* 0A4F9C 7F07046C 16600008 */ bnez $s3, .L7F070490
|
|
/* 0A4FA0 7F070470 C7AC00D0 */ lwc1 $f12, 0xd0($sp)
|
|
/* 0A4FA4 7F070474 4600C03C */ c.lt.s $f24, $f0
|
|
/* 0A4FA8 7F070478 46001087 */ neg.s $f2, $f2
|
|
/* 0A4FAC 7F07047C 46006307 */ neg.s $f12, $f12
|
|
/* 0A4FB0 7F070480 E7A200C8 */ swc1 $f2, 0xc8($sp)
|
|
/* 0A4FB4 7F070484 45000002 */ bc1f .L7F070490
|
|
/* 0A4FB8 7F070488 E7AC00D0 */ swc1 $f12, 0xd0($sp)
|
|
/* 0A4FBC 7F07048C 4600D581 */ sub.s $f22, $f26, $f0
|
|
.L7F070490:
|
|
/* 0A4FC0 7F070490 0FC15FA8 */ jal cosf
|
|
/* 0A4FC4 7F070494 C60C0014 */ lwc1 $f12, 0x14($s0)
|
|
/* 0A4FC8 7F070498 46000506 */ mov.s $f20, $f0
|
|
/* 0A4FCC 7F07049C 0FC15FAB */ jal sinf
|
|
/* 0A4FD0 7F0704A0 C60C0014 */ lwc1 $f12, 0x14($s0)
|
|
/* 0A4FD4 7F0704A4 C7A600C8 */ lwc1 $f6, 0xc8($sp)
|
|
/* 0A4FD8 7F0704A8 C7B000D0 */ lwc1 $f16, 0xd0($sp)
|
|
/* 0A4FDC 7F0704AC C7AA00AC */ lwc1 $f10, 0xac($sp)
|
|
/* 0A4FE0 7F0704B0 46143202 */ mul.s $f8, $f6, $f20
|
|
/* 0A4FE4 7F0704B4 00000000 */ nop
|
|
/* 0A4FE8 7F0704B8 46008482 */ mul.s $f18, $f16, $f0
|
|
/* 0A4FEC 7F0704BC 46124100 */ add.s $f4, $f8, $f18
|
|
/* 0A4FF0 7F0704C0 C7B200CC */ lwc1 $f18, 0xcc($sp)
|
|
/* 0A4FF4 7F0704C4 46045200 */ add.s $f8, $f10, $f4
|
|
/* 0A4FF8 7F0704C8 E7B200B0 */ swc1 $f18, 0xb0($sp)
|
|
/* 0A4FFC 7F0704CC 46003287 */ neg.s $f10, $f6
|
|
/* 0A5000 7F0704D0 E7A800AC */ swc1 $f8, 0xac($sp)
|
|
/* 0A5004 7F0704D4 46005102 */ mul.s $f4, $f10, $f0
|
|
/* 0A5008 7F0704D8 C7A600B4 */ lwc1 $f6, 0xb4($sp)
|
|
/* 0A500C 7F0704DC 46148202 */ mul.s $f8, $f16, $f20
|
|
/* 0A5010 7F0704E0 46082480 */ add.s $f18, $f4, $f8
|
|
/* 0A5014 7F0704E4 46123280 */ add.s $f10, $f6, $f18
|
|
/* 0A5018 7F0704E8 E7AA00B4 */ swc1 $f10, 0xb4($sp)
|
|
/* 0A501C 7F0704EC C6100018 */ lwc1 $f16, 0x18($s0)
|
|
/* 0A5020 7F0704F0 4610C032 */ c.eq.s $f24, $f16
|
|
/* 0A5024 7F0704F4 00000000 */ nop
|
|
/* 0A5028 7F0704F8 45000007 */ bc1f .L7F070518
|
|
/* 0A502C 7F0704FC 00000000 */ nop
|
|
/* 0A5030 7F070500 4616E700 */ add.s $f28, $f28, $f22
|
|
/* 0A5034 7F070504 461CD03E */ c.le.s $f26, $f28
|
|
/* 0A5038 7F070508 00000000 */ nop
|
|
/* 0A503C 7F07050C 45000002 */ bc1f .L7F070518
|
|
/* 0A5040 7F070510 00000000 */ nop
|
|
/* 0A5044 7F070514 461AE701 */ sub.s $f28, $f28, $f26
|
|
.L7F070518:
|
|
/* 0A5048 7F070518 52600004 */ beql $s3, $zero, .L7F07052C
|
|
/* 0A504C 7F07051C 2652FFFF */ addiu $s2, $s2, -1
|
|
/* 0A5050 7F070520 10000002 */ b .L7F07052C
|
|
/* 0A5054 7F070524 26520001 */ addiu $s2, $s2, 1
|
|
/* 0A5058 7F070528 2652FFFF */ addiu $s2, $s2, -1
|
|
.L7F07052C:
|
|
/* 0A505C 7F07052C 02402025 */ move $a0, $s2
|
|
/* 0A5060 7F070530 8E250020 */ lw $a1, 0x20($s1)
|
|
/* 0A5064 7F070534 0FC1BD9B */ jal modelConstrainOrWrapAnimFrame
|
|
/* 0A5068 7F070538 8E26003C */ lw $a2, 0x3c($s1)
|
|
/* 0A506C 7F07053C A6220032 */ sh $v0, 0x32($s1)
|
|
/* 0A5070 7F070540 86290032 */ lh $t1, 0x32($s1)
|
|
/* 0A5074 7F070544 86280030 */ lh $t0, 0x30($s1)
|
|
/* 0A5078 7F070548 8FA600E0 */ lw $a2, 0xe0($sp)
|
|
/* 0A507C 7F07054C 8FA400E4 */ lw $a0, 0xe4($sp)
|
|
/* 0A5080 7F070550 110900C0 */ beq $t0, $t1, .L7F070854
|
|
/* 0A5084 7F070554 27AD00C8 */ addiu $t5, $sp, 0xc8
|
|
/* 0A5088 7F070558 82250024 */ lb $a1, 0x24($s1)
|
|
/* 0A508C 7F07055C 8E270020 */ lw $a3, 0x20($s1)
|
|
/* 0A5090 7F070560 240C0001 */ li $t4, 1
|
|
/* 0A5094 7F070564 AFAC0094 */ sw $t4, 0x94($sp)
|
|
/* 0A5098 7F070568 AFAD0014 */ sw $t5, 0x14($sp)
|
|
/* 0A509C 7F07056C 0FC1B4FD */ jal sub_GAME_7F06D3F4
|
|
/* 0A50A0 7F070570 AFA20010 */ sw $v0, 0x10($sp)
|
|
/* 0A50A4 7F070574 3C013F80 */ li $at, 0x3F800000 # 1.000000
|
|
/* 0A50A8 7F070578 44814000 */ mtc1 $at, $f8
|
|
/* 0A50AC 7F07057C C7A400DC */ lwc1 $f4, 0xdc($sp)
|
|
/* 0A50B0 7F070580 46000586 */ mov.s $f22, $f0
|
|
/* 0A50B4 7F070584 C7A200C8 */ lwc1 $f2, 0xc8($sp)
|
|
/* 0A50B8 7F070588 46082032 */ c.eq.s $f4, $f8
|
|
/* 0A50BC 7F07058C C7A600CC */ lwc1 $f6, 0xcc($sp)
|
|
/* 0A50C0 7F070590 4503000A */ bc1tl .L7F0705BC
|
|
/* 0A50C4 7F070594 C7A200C8 */ lwc1 $f2, 0xc8($sp)
|
|
/* 0A50C8 7F070598 46041082 */ mul.s $f2, $f2, $f4
|
|
/* 0A50CC 7F07059C C7AC00D0 */ lwc1 $f12, 0xd0($sp)
|
|
/* 0A50D0 7F0705A0 46043482 */ mul.s $f18, $f6, $f4
|
|
/* 0A50D4 7F0705A4 00000000 */ nop
|
|
/* 0A50D8 7F0705A8 46046302 */ mul.s $f12, $f12, $f4
|
|
/* 0A50DC 7F0705AC E7A200C8 */ swc1 $f2, 0xc8($sp)
|
|
/* 0A50E0 7F0705B0 E7B200CC */ swc1 $f18, 0xcc($sp)
|
|
/* 0A50E4 7F0705B4 E7AC00D0 */ swc1 $f12, 0xd0($sp)
|
|
/* 0A50E8 7F0705B8 C7A200C8 */ lwc1 $f2, 0xc8($sp)
|
|
.L7F0705BC:
|
|
/* 0A50EC 7F0705BC 16600008 */ bnez $s3, .L7F0705E0
|
|
/* 0A50F0 7F0705C0 C7AC00D0 */ lwc1 $f12, 0xd0($sp)
|
|
/* 0A50F4 7F0705C4 4600C03C */ c.lt.s $f24, $f0
|
|
/* 0A50F8 7F0705C8 46001087 */ neg.s $f2, $f2
|
|
/* 0A50FC 7F0705CC 46006307 */ neg.s $f12, $f12
|
|
/* 0A5100 7F0705D0 E7A200C8 */ swc1 $f2, 0xc8($sp)
|
|
/* 0A5104 7F0705D4 45000002 */ bc1f .L7F0705E0
|
|
/* 0A5108 7F0705D8 E7AC00D0 */ swc1 $f12, 0xd0($sp)
|
|
/* 0A510C 7F0705DC 4600D581 */ sub.s $f22, $f26, $f0
|
|
.L7F0705E0:
|
|
/* 0A5110 7F0705E0 0FC15FA8 */ jal cosf
|
|
/* 0A5114 7F0705E4 C60C0030 */ lwc1 $f12, 0x30($s0)
|
|
/* 0A5118 7F0705E8 46000506 */ mov.s $f20, $f0
|
|
/* 0A511C 7F0705EC 0FC15FAB */ jal sinf
|
|
/* 0A5120 7F0705F0 C60C0030 */ lwc1 $f12, 0x30($s0)
|
|
/* 0A5124 7F0705F4 3C0A8003 */ lui $t2, %hi(g_ModelAnimMergingEnabled)
|
|
/* 0A5128 7F0705F8 8D4A6250 */ lw $t2, %lo(g_ModelAnimMergingEnabled)($t2)
|
|
/* 0A512C 7F0705FC C7A200C8 */ lwc1 $f2, 0xc8($sp)
|
|
/* 0A5130 7F070600 C7AC00D0 */ lwc1 $f12, 0xd0($sp)
|
|
/* 0A5134 7F070604 11400056 */ beqz $t2, .L7F070760
|
|
/* 0A5138 7F070608 00000000 */ nop
|
|
/* 0A513C 7F07060C 8E2B0054 */ lw $t3, 0x54($s1)
|
|
/* 0A5140 7F070610 11600053 */ beqz $t3, .L7F070760
|
|
/* 0A5144 7F070614 00000000 */ nop
|
|
/* 0A5148 7F070618 C7AC00D0 */ lwc1 $f12, 0xd0($sp)
|
|
/* 0A514C 7F07061C C7A200C8 */ lwc1 $f2, 0xc8($sp)
|
|
/* 0A5150 7F070620 461EC03C */ c.lt.s $f24, $f30
|
|
/* 0A5154 7F070624 46006282 */ mul.s $f10, $f12, $f0
|
|
/* 0A5158 7F070628 46001187 */ neg.s $f6, $f2
|
|
/* 0A515C 7F07062C 3C013F00 */ li $at, 0x3F000000 # 0.500000
|
|
/* 0A5160 7F070630 46141402 */ mul.s $f16, $f2, $f20
|
|
/* 0A5164 7F070634 00000000 */ nop
|
|
/* 0A5168 7F070638 46146102 */ mul.s $f4, $f12, $f20
|
|
/* 0A516C 7F07063C 00000000 */ nop
|
|
/* 0A5170 7F070640 46003482 */ mul.s $f18, $f6, $f0
|
|
/* 0A5174 7F070644 46105200 */ add.s $f8, $f10, $f16
|
|
/* 0A5178 7F070648 E7A8009C */ swc1 $f8, 0x9c($sp)
|
|
/* 0A517C 7F07064C 46122280 */ add.s $f10, $f4, $f18
|
|
/* 0A5180 7F070650 45000028 */ bc1f .L7F0706F4
|
|
/* 0A5184 7F070654 E7AA00A4 */ swc1 $f10, 0xa4($sp)
|
|
/* 0A5188 7F070658 C6280088 */ lwc1 $f8, 0x88($s1)
|
|
/* 0A518C 7F07065C C63000A4 */ lwc1 $f16, 0xa4($s1)
|
|
/* 0A5190 7F070660 C6220084 */ lwc1 $f2, 0x84($s1)
|
|
/* 0A5194 7F070664 4608F182 */ mul.s $f6, $f30, $f8
|
|
/* 0A5198 7F070668 46068103 */ div.s $f4, $f16, $f6
|
|
/* 0A519C 7F07066C 46041001 */ sub.s $f0, $f2, $f4
|
|
/* 0A51A0 7F070670 4618003C */ c.lt.s $f0, $f24
|
|
/* 0A51A4 7F070674 00000000 */ nop
|
|
/* 0A51A8 7F070678 45020003 */ bc1fl .L7F070688
|
|
/* 0A51AC 7F07067C 46001480 */ add.s $f18, $f2, $f0
|
|
/* 0A51B0 7F070680 4600C006 */ mov.s $f0, $f24
|
|
/* 0A51B4 7F070684 46001480 */ add.s $f18, $f2, $f0
|
|
.L7F070688:
|
|
/* 0A51B8 7F070688 C6080040 */ lwc1 $f8, 0x40($s0)
|
|
/* 0A51BC 7F07068C C610004C */ lwc1 $f16, 0x4c($s0)
|
|
/* 0A51C0 7F070690 44815000 */ mtc1 $at, $f10
|
|
/* 0A51C4 7F070694 C7A40088 */ lwc1 $f4, 0x88($sp)
|
|
/* 0A51C8 7F070698 46104181 */ sub.s $f6, $f8, $f16
|
|
/* 0A51CC 7F07069C 460A9002 */ mul.s $f0, $f18, $f10
|
|
/* 0A51D0 7F0706A0 00000000 */ nop
|
|
/* 0A51D4 7F0706A4 46043482 */ mul.s $f18, $f6, $f4
|
|
/* 0A51D8 7F0706A8 461E9283 */ div.s $f10, $f18, $f30
|
|
/* 0A51DC 7F0706AC E7AA007C */ swc1 $f10, 0x7c($sp)
|
|
/* 0A51E0 7F0706B0 C6100054 */ lwc1 $f16, 0x54($s0)
|
|
/* 0A51E4 7F0706B4 C6080048 */ lwc1 $f8, 0x48($s0)
|
|
/* 0A51E8 7F0706B8 46104181 */ sub.s $f6, $f8, $f16
|
|
/* 0A51EC 7F0706BC C7B0009C */ lwc1 $f16, 0x9c($sp)
|
|
/* 0A51F0 7F0706C0 46043482 */ mul.s $f18, $f6, $f4
|
|
/* 0A51F4 7F0706C4 46105181 */ sub.s $f6, $f10, $f16
|
|
/* 0A51F8 7F0706C8 C7AA00A4 */ lwc1 $f10, 0xa4($sp)
|
|
/* 0A51FC 7F0706CC 46003102 */ mul.s $f4, $f6, $f0
|
|
/* 0A5200 7F0706D0 461E9203 */ div.s $f8, $f18, $f30
|
|
/* 0A5204 7F0706D4 46048480 */ add.s $f18, $f16, $f4
|
|
/* 0A5208 7F0706D8 E7B2009C */ swc1 $f18, 0x9c($sp)
|
|
/* 0A520C 7F0706DC 460A4181 */ sub.s $f6, $f8, $f10
|
|
/* 0A5210 7F0706E0 E7A80084 */ swc1 $f8, 0x84($sp)
|
|
/* 0A5214 7F0706E4 46003402 */ mul.s $f16, $f6, $f0
|
|
/* 0A5218 7F0706E8 46105100 */ add.s $f4, $f10, $f16
|
|
/* 0A521C 7F0706EC 10000011 */ b .L7F070734
|
|
/* 0A5220 7F0706F0 E7A400A4 */ swc1 $f4, 0xa4($sp)
|
|
.L7F0706F4:
|
|
/* 0A5224 7F0706F4 C6120040 */ lwc1 $f18, 0x40($s0)
|
|
/* 0A5228 7F0706F8 C608004C */ lwc1 $f8, 0x4c($s0)
|
|
/* 0A522C 7F0706FC C62A0084 */ lwc1 $f10, 0x84($s1)
|
|
/* 0A5230 7F070700 C7A4009C */ lwc1 $f4, 0x9c($sp)
|
|
/* 0A5234 7F070704 46089181 */ sub.s $f6, $f18, $f8
|
|
/* 0A5238 7F070708 460A3402 */ mul.s $f16, $f6, $f10
|
|
/* 0A523C 7F07070C 46102480 */ add.s $f18, $f4, $f16
|
|
/* 0A5240 7F070710 E7B2009C */ swc1 $f18, 0x9c($sp)
|
|
/* 0A5244 7F070714 C6060054 */ lwc1 $f6, 0x54($s0)
|
|
/* 0A5248 7F070718 C6080048 */ lwc1 $f8, 0x48($s0)
|
|
/* 0A524C 7F07071C C6240084 */ lwc1 $f4, 0x84($s1)
|
|
/* 0A5250 7F070720 C7B200A4 */ lwc1 $f18, 0xa4($sp)
|
|
/* 0A5254 7F070724 46064281 */ sub.s $f10, $f8, $f6
|
|
/* 0A5258 7F070728 46045402 */ mul.s $f16, $f10, $f4
|
|
/* 0A525C 7F07072C 46109200 */ add.s $f8, $f18, $f16
|
|
/* 0A5260 7F070730 E7A800A4 */ swc1 $f8, 0xa4($sp)
|
|
.L7F070734:
|
|
/* 0A5264 7F070734 C7A6009C */ lwc1 $f6, 0x9c($sp)
|
|
/* 0A5268 7F070738 C7AA00AC */ lwc1 $f10, 0xac($sp)
|
|
/* 0A526C 7F07073C C7B200A4 */ lwc1 $f18, 0xa4($sp)
|
|
/* 0A5270 7F070740 C7B000B4 */ lwc1 $f16, 0xb4($sp)
|
|
/* 0A5274 7F070744 460A3100 */ add.s $f4, $f6, $f10
|
|
/* 0A5278 7F070748 C7A600CC */ lwc1 $f6, 0xcc($sp)
|
|
/* 0A527C 7F07074C 46109200 */ add.s $f8, $f18, $f16
|
|
/* 0A5280 7F070750 E7A4009C */ swc1 $f4, 0x9c($sp)
|
|
/* 0A5284 7F070754 E7A600A0 */ swc1 $f6, 0xa0($sp)
|
|
/* 0A5288 7F070758 1000000F */ b .L7F070798
|
|
/* 0A528C 7F07075C E7A800A4 */ swc1 $f8, 0xa4($sp)
|
|
.L7F070760:
|
|
/* 0A5290 7F070760 46141102 */ mul.s $f4, $f2, $f20
|
|
/* 0A5294 7F070764 C7AA00AC */ lwc1 $f10, 0xac($sp)
|
|
/* 0A5298 7F070768 C7A600CC */ lwc1 $f6, 0xcc($sp)
|
|
/* 0A529C 7F07076C 46006402 */ mul.s $f16, $f12, $f0
|
|
/* 0A52A0 7F070770 E7A600A0 */ swc1 $f6, 0xa0($sp)
|
|
/* 0A52A4 7F070774 46045480 */ add.s $f18, $f10, $f4
|
|
/* 0A52A8 7F070778 46001102 */ mul.s $f4, $f2, $f0
|
|
/* 0A52AC 7F07077C C7AA00B4 */ lwc1 $f10, 0xb4($sp)
|
|
/* 0A52B0 7F070780 46128200 */ add.s $f8, $f16, $f18
|
|
/* 0A52B4 7F070784 46146482 */ mul.s $f18, $f12, $f20
|
|
/* 0A52B8 7F070788 46045401 */ sub.s $f16, $f10, $f4
|
|
/* 0A52BC 7F07078C E7A8009C */ swc1 $f8, 0x9c($sp)
|
|
/* 0A52C0 7F070790 46109200 */ add.s $f8, $f18, $f16
|
|
/* 0A52C4 7F070794 E7A800A4 */ swc1 $f8, 0xa4($sp)
|
|
.L7F070798:
|
|
/* 0A52C8 7F070798 C600005C */ lwc1 $f0, 0x5c($s0)
|
|
/* 0A52CC 7F07079C 4600C03C */ c.lt.s $f24, $f0
|
|
/* 0A52D0 7F0707A0 00000000 */ nop
|
|
/* 0A52D4 7F0707A4 45020020 */ bc1fl .L7F070828
|
|
/* 0A52D8 7F0707A8 C6100018 */ lwc1 $f16, 0x18($s0)
|
|
/* 0A52DC 7F0707AC 461EC03C */ c.lt.s $f24, $f30
|
|
/* 0A52E0 7F0707B0 3C013F80 */ li $at, 0x3F800000 # 1.000000
|
|
/* 0A52E4 7F0707B4 4502001C */ bc1fl .L7F070828
|
|
/* 0A52E8 7F0707B8 C6100018 */ lwc1 $f16, 0x18($s0)
|
|
/* 0A52EC 7F0707BC 44813000 */ mtc1 $at, $f6
|
|
/* 0A52F0 7F0707C0 00000000 */ nop
|
|
/* 0A52F4 7F0707C4 461E3083 */ div.s $f2, $f6, $f30
|
|
/* 0A52F8 7F0707C8 4602003C */ c.lt.s $f0, $f2
|
|
/* 0A52FC 7F0707CC 46001306 */ mov.s $f12, $f2
|
|
/* 0A5300 7F0707D0 45020005 */ bc1fl .L7F0707E8
|
|
/* 0A5304 7F0707D4 46020281 */ sub.s $f10, $f0, $f2
|
|
/* 0A5308 7F0707D8 46000306 */ mov.s $f12, $f0
|
|
/* 0A530C 7F0707DC 10000003 */ b .L7F0707EC
|
|
/* 0A5310 7F0707E0 E618005C */ swc1 $f24, 0x5c($s0)
|
|
/* 0A5314 7F0707E4 46020281 */ sub.s $f10, $f0, $f2
|
|
.L7F0707E8:
|
|
/* 0A5318 7F0707E8 E60A005C */ swc1 $f10, 0x5c($s0)
|
|
.L7F0707EC:
|
|
/* 0A531C 7F0707EC C6040058 */ lwc1 $f4, 0x58($s0)
|
|
/* 0A5320 7F0707F0 460C2482 */ mul.s $f18, $f4, $f12
|
|
/* 0A5324 7F0707F4 4612B580 */ add.s $f22, $f22, $f18
|
|
/* 0A5328 7F0707F8 4618B03C */ c.lt.s $f22, $f24
|
|
/* 0A532C 7F0707FC 00000000 */ nop
|
|
/* 0A5330 7F070800 45020004 */ bc1fl .L7F070814
|
|
/* 0A5334 7F070804 4616D03E */ c.le.s $f26, $f22
|
|
/* 0A5338 7F070808 10000006 */ b .L7F070824
|
|
/* 0A533C 7F07080C 461AB580 */ add.s $f22, $f22, $f26
|
|
/* 0A5340 7F070810 4616D03E */ c.le.s $f26, $f22
|
|
.L7F070814:
|
|
/* 0A5344 7F070814 00000000 */ nop
|
|
/* 0A5348 7F070818 45020003 */ bc1fl .L7F070828
|
|
/* 0A534C 7F07081C C6100018 */ lwc1 $f16, 0x18($s0)
|
|
/* 0A5350 7F070820 461AB581 */ sub.s $f22, $f22, $f26
|
|
.L7F070824:
|
|
/* 0A5354 7F070824 C6100018 */ lwc1 $f16, 0x18($s0)
|
|
.L7F070828:
|
|
/* 0A5358 7F070828 4610C032 */ c.eq.s $f24, $f16
|
|
/* 0A535C 7F07082C 00000000 */ nop
|
|
/* 0A5360 7F070830 45000008 */ bc1f .L7F070854
|
|
/* 0A5364 7F070834 00000000 */ nop
|
|
/* 0A5368 7F070838 4616E000 */ add.s $f0, $f28, $f22
|
|
/* 0A536C 7F07083C 4600D03E */ c.le.s $f26, $f0
|
|
/* 0A5370 7F070840 E7A00098 */ swc1 $f0, 0x98($sp)
|
|
/* 0A5374 7F070844 45000003 */ bc1f .L7F070854
|
|
/* 0A5378 7F070848 00000000 */ nop
|
|
/* 0A537C 7F07084C 461A0201 */ sub.s $f8, $f0, $f26
|
|
/* 0A5380 7F070850 E7A80098 */ swc1 $f8, 0x98($sp)
|
|
.L7F070854:
|
|
/* 0A5384 7F070854 1000FECC */ b .L7F070388
|
|
/* 0A5388 7F070858 8FA700B8 */ lw $a3, 0xb8($sp)
|
|
/* 0A538C 7F07085C C7A600AC */ lwc1 $f6, 0xac($sp)
|
|
.L7F070860:
|
|
/* 0A5390 7F070860 E6060034 */ swc1 $f6, 0x34($s0)
|
|
/* 0A5394 7F070864 C7AA00B0 */ lwc1 $f10, 0xb0($sp)
|
|
/* 0A5398 7F070868 E60A0038 */ swc1 $f10, 0x38($s0)
|
|
/* 0A539C 7F07086C C7A400B4 */ lwc1 $f4, 0xb4($sp)
|
|
/* 0A53A0 7F070870 E61C0030 */ swc1 $f28, 0x30($s0)
|
|
/* 0A53A4 7F070874 E604003C */ swc1 $f4, 0x3c($s0)
|
|
/* 0A53A8 7F070878 C7B2009C */ lwc1 $f18, 0x9c($sp)
|
|
/* 0A53AC 7F07087C E6120024 */ swc1 $f18, 0x24($s0)
|
|
/* 0A53B0 7F070880 C7B000A0 */ lwc1 $f16, 0xa0($sp)
|
|
/* 0A53B4 7F070884 E6100028 */ swc1 $f16, 0x28($s0)
|
|
/* 0A53B8 7F070888 C7A800A4 */ lwc1 $f8, 0xa4($sp)
|
|
/* 0A53BC 7F07088C E608002C */ swc1 $f8, 0x2c($s0)
|
|
/* 0A53C0 7F070890 C7A60098 */ lwc1 $f6, 0x98($sp)
|
|
/* 0A53C4 7F070894 E6060020 */ swc1 $f6, 0x20($s0)
|
|
/* 0A53C8 7F070898 86220030 */ lh $v0, 0x30($s1)
|
|
/* 0A53CC 7F07089C 86230032 */ lh $v1, 0x32($s1)
|
|
/* 0A53D0 7F0708A0 14620006 */ bne $v1, $v0, .L7F0708BC
|
|
/* 0A53D4 7F0708A4 00000000 */ nop
|
|
/* 0A53D8 7F0708A8 44825000 */ mtc1 $v0, $f10
|
|
/* 0A53DC 7F0708AC E638002C */ swc1 $f24, 0x2c($s1)
|
|
/* 0A53E0 7F0708B0 46805120 */ cvt.s.w $f4, $f10
|
|
/* 0A53E4 7F0708B4 10000019 */ b .L7F07091C
|
|
/* 0A53E8 7F0708B8 E6240028 */ swc1 $f4, 0x28($s1)
|
|
.L7F0708BC:
|
|
/* 0A53EC 7F0708BC 5260000C */ beql $s3, $zero, .L7F0708F0
|
|
/* 0A53F0 7F0708C0 44878000 */ mtc1 $a3, $f16
|
|
/* 0A53F4 7F0708C4 44878000 */ mtc1 $a3, $f16
|
|
/* 0A53F8 7F0708C8 44823000 */ mtc1 $v0, $f6
|
|
/* 0A53FC 7F0708CC C7B20100 */ lwc1 $f18, 0x100($sp)
|
|
/* 0A5400 7F0708D0 46808220 */ cvt.s.w $f8, $f16
|
|
/* 0A5404 7F0708D4 468032A0 */ cvt.s.w $f10, $f6
|
|
/* 0A5408 7F0708D8 46089001 */ sub.s $f0, $f18, $f8
|
|
/* 0A540C 7F0708DC 46005100 */ add.s $f4, $f10, $f0
|
|
/* 0A5410 7F0708E0 E620002C */ swc1 $f0, 0x2c($s1)
|
|
/* 0A5414 7F0708E4 1000000D */ b .L7F07091C
|
|
/* 0A5418 7F0708E8 E6240028 */ swc1 $f4, 0x28($s1)
|
|
/* 0A541C 7F0708EC 44878000 */ mtc1 $a3, $f16
|
|
.L7F0708F0:
|
|
/* 0A5420 7F0708F0 C7A80100 */ lwc1 $f8, 0x100($sp)
|
|
/* 0A5424 7F0708F4 44833000 */ mtc1 $v1, $f6
|
|
/* 0A5428 7F0708F8 468084A0 */ cvt.s.w $f18, $f16
|
|
/* 0A542C 7F0708FC 3C013F80 */ li $at, 0x3F800000 # 1.000000
|
|
/* 0A5430 7F070900 44812000 */ mtc1 $at, $f4
|
|
/* 0A5434 7F070904 468032A0 */ cvt.s.w $f10, $f6
|
|
/* 0A5438 7F070908 46089001 */ sub.s $f0, $f18, $f8
|
|
/* 0A543C 7F07090C 46002401 */ sub.s $f16, $f4, $f0
|
|
/* 0A5440 7F070910 E620002C */ swc1 $f0, 0x2c($s1)
|
|
/* 0A5444 7F070914 46105480 */ add.s $f18, $f10, $f16
|
|
/* 0A5448 7F070918 E6320028 */ swc1 $f18, 0x28($s1)
|
|
.L7F07091C:
|
|
/* 0A544C 7F07091C 8E2E0054 */ lw $t6, 0x54($s1)
|
|
/* 0A5450 7F070920 11C00055 */ beqz $t6, .L7F070A78
|
|
/* 0A5454 7F070924 00000000 */ nop
|
|
/* 0A5458 7F070928 0FC170F6 */ jal floorFloatToInt
|
|
/* 0A545C 7F07092C C7AC0104 */ lwc1 $f12, 0x104($sp)
|
|
/* 0A5460 7F070930 C7B40108 */ lwc1 $f20, 0x108($sp)
|
|
/* 0A5464 7F070934 00409025 */ move $s2, $v0
|
|
/* 0A5468 7F070938 0FC170F6 */ jal floorFloatToInt
|
|
/* 0A546C 7F07093C 4600A306 */ mov.s $f12, $f20
|
|
/* 0A5470 7F070940 12600004 */ beqz $s3, .L7F070954
|
|
/* 0A5474 7F070944 AFA2006C */ sw $v0, 0x6c($sp)
|
|
/* 0A5478 7F070948 0242082A */ slt $at, $s2, $v0
|
|
/* 0A547C 7F07094C 54200006 */ bnezl $at, .L7F070968
|
|
/* 0A5480 7F070950 820F0002 */ lb $t7, 2($s0)
|
|
.L7F070954:
|
|
/* 0A5484 7F070954 1660002C */ bnez $s3, .L7F070A08
|
|
/* 0A5488 7F070958 0052082A */ slt $at, $v0, $s2
|
|
/* 0A548C 7F07095C 5020002B */ beql $at, $zero, .L7F070A0C
|
|
/* 0A5490 7F070960 3C013F80 */ lui $at, 0x3f80
|
|
/* 0A5494 7F070964 820F0002 */ lb $t7, 2($s0)
|
|
.L7F070968:
|
|
/* 0A5498 7F070968 51E00005 */ beql $t7, $zero, .L7F070980
|
|
/* 0A549C 7F07096C C6060038 */ lwc1 $f6, 0x38($s0)
|
|
/* 0A54A0 7F070970 C6080044 */ lwc1 $f8, 0x44($s0)
|
|
/* 0A54A4 7F070974 10000003 */ b .L7F070984
|
|
/* 0A54A8 7F070978 E6080050 */ swc1 $f8, 0x50($s0)
|
|
/* 0A54AC 7F07097C C6060038 */ lwc1 $f6, 0x38($s0)
|
|
.L7F070980:
|
|
/* 0A54B0 7F070980 E6060050 */ swc1 $f6, 0x50($s0)
|
|
.L7F070984:
|
|
/* 0A54B4 7F070984 8FA4006C */ lw $a0, 0x6c($sp)
|
|
/* 0A54B8 7F070988 8E250054 */ lw $a1, 0x54($s1)
|
|
/* 0A54BC 7F07098C 0FC1BD9B */ jal modelConstrainOrWrapAnimFrame
|
|
/* 0A54C0 7F070990 8E26006C */ lw $a2, 0x6c($s1)
|
|
/* 0A54C4 7F070994 A6220060 */ sh $v0, 0x60($s1)
|
|
/* 0A54C8 7F070998 8FA4006C */ lw $a0, 0x6c($sp)
|
|
/* 0A54CC 7F07099C 8E250054 */ lw $a1, 0x54($s1)
|
|
/* 0A54D0 7F0709A0 8E26006C */ lw $a2, 0x6c($s1)
|
|
/* 0A54D4 7F0709A4 0FC1BD9B */ jal modelConstrainOrWrapAnimFrame
|
|
/* 0A54D8 7F0709A8 24840001 */ addiu $a0, $a0, 1
|
|
/* 0A54DC 7F0709AC A6220062 */ sh $v0, 0x62($s1)
|
|
/* 0A54E0 7F0709B0 82250025 */ lb $a1, 0x25($s1)
|
|
/* 0A54E4 7F0709B4 8E270054 */ lw $a3, 0x54($s1)
|
|
/* 0A54E8 7F0709B8 27B800C8 */ addiu $t8, $sp, 0xc8
|
|
/* 0A54EC 7F0709BC AFB80014 */ sw $t8, 0x14($sp)
|
|
/* 0A54F0 7F0709C0 AFA20010 */ sw $v0, 0x10($sp)
|
|
/* 0A54F4 7F0709C4 8FA600E0 */ lw $a2, 0xe0($sp)
|
|
/* 0A54F8 7F0709C8 0FC1B4FD */ jal sub_GAME_7F06D3F4
|
|
/* 0A54FC 7F0709CC 8FA400E4 */ lw $a0, 0xe4($sp)
|
|
/* 0A5500 7F0709D0 3C013F80 */ li $at, 0x3F800000 # 1.000000
|
|
/* 0A5504 7F0709D4 44811000 */ mtc1 $at, $f2
|
|
/* 0A5508 7F0709D8 C7AC00DC */ lwc1 $f12, 0xdc($sp)
|
|
/* 0A550C 7F0709DC C7A400CC */ lwc1 $f4, 0xcc($sp)
|
|
/* 0A5510 7F0709E0 46026032 */ c.eq.s $f12, $f2
|
|
/* 0A5514 7F0709E4 00000000 */ nop
|
|
/* 0A5518 7F0709E8 45030004 */ bc1tl .L7F0709FC
|
|
/* 0A551C 7F0709EC C7B000CC */ lwc1 $f16, 0xcc($sp)
|
|
/* 0A5520 7F0709F0 460C2282 */ mul.s $f10, $f4, $f12
|
|
/* 0A5524 7F0709F4 E7AA00CC */ swc1 $f10, 0xcc($sp)
|
|
/* 0A5528 7F0709F8 C7B000CC */ lwc1 $f16, 0xcc($sp)
|
|
.L7F0709FC:
|
|
/* 0A552C 7F0709FC 24190001 */ li $t9, 1
|
|
/* 0A5530 7F070A00 A2190002 */ sb $t9, 2($s0)
|
|
/* 0A5534 7F070A04 E6100044 */ swc1 $f16, 0x44($s0)
|
|
.L7F070A08:
|
|
/* 0A5538 7F070A08 3C013F80 */ li $at, 0x3F800000 # 1.000000
|
|
.L7F070A0C:
|
|
/* 0A553C 7F070A0C 44811000 */ mtc1 $at, $f2
|
|
/* 0A5540 7F070A10 1260000C */ beqz $s3, .L7F070A44
|
|
/* 0A5544 7F070A14 8FAD006C */ lw $t5, 0x6c($sp)
|
|
/* 0A5548 7F070A18 8FA8006C */ lw $t0, 0x6c($sp)
|
|
/* 0A554C 7F070A1C 86290060 */ lh $t1, 0x60($s1)
|
|
/* 0A5550 7F070A20 44889000 */ mtc1 $t0, $f18
|
|
/* 0A5554 7F070A24 44893000 */ mtc1 $t1, $f6
|
|
/* 0A5558 7F070A28 46809220 */ cvt.s.w $f8, $f18
|
|
/* 0A555C 7F070A2C 46803120 */ cvt.s.w $f4, $f6
|
|
/* 0A5560 7F070A30 4608A001 */ sub.s $f0, $f20, $f8
|
|
/* 0A5564 7F070A34 46002280 */ add.s $f10, $f4, $f0
|
|
/* 0A5568 7F070A38 E620005C */ swc1 $f0, 0x5c($s1)
|
|
/* 0A556C 7F070A3C 1000001E */ b .L7F070AB8
|
|
/* 0A5570 7F070A40 E62A0058 */ swc1 $f10, 0x58($s1)
|
|
.L7F070A44:
|
|
/* 0A5574 7F070A44 448D8000 */ mtc1 $t5, $f16
|
|
/* 0A5578 7F070A48 862C0062 */ lh $t4, 0x62($s1)
|
|
/* 0A557C 7F070A4C 468084A0 */ cvt.s.w $f18, $f16
|
|
/* 0A5580 7F070A50 448C3000 */ mtc1 $t4, $f6
|
|
/* 0A5584 7F070A54 00000000 */ nop
|
|
/* 0A5588 7F070A58 46803120 */ cvt.s.w $f4, $f6
|
|
/* 0A558C 7F070A5C 4612A201 */ sub.s $f8, $f20, $f18
|
|
/* 0A5590 7F070A60 46081001 */ sub.s $f0, $f2, $f8
|
|
/* 0A5594 7F070A64 46001281 */ sub.s $f10, $f2, $f0
|
|
/* 0A5598 7F070A68 E620005C */ swc1 $f0, 0x5c($s1)
|
|
/* 0A559C 7F070A6C 460A2400 */ add.s $f16, $f4, $f10
|
|
/* 0A55A0 7F070A70 10000011 */ b .L7F070AB8
|
|
/* 0A55A4 7F070A74 E6300058 */ swc1 $f16, 0x58($s1)
|
|
.L7F070A78:
|
|
/* 0A55A8 7F070A78 1000000F */ b .L7F070AB8
|
|
/* 0A55AC 7F070A7C A2000002 */ sb $zero, 2($s0)
|
|
/* 0A55B0 7F070A80 C7B40108 */ lwc1 $f20, 0x108($sp)
|
|
.L7F070A84:
|
|
/* 0A55B4 7F070A84 02202025 */ move $a0, $s1
|
|
/* 0A55B8 7F070A88 8FA50100 */ lw $a1, 0x100($sp)
|
|
/* 0A55BC 7F070A8C 4406A000 */ mfc1 $a2, $f20
|
|
/* 0A55C0 7F070A90 0FC1C024 */ jal modelSetAnimFrame2
|
|
/* 0A55C4 7F070A94 00000000 */ nop
|
|
/* 0A55C8 7F070A98 10000008 */ b .L7F070ABC
|
|
/* 0A55CC 7F070A9C 8FBF005C */ lw $ra, 0x5c($sp)
|
|
/* 0A55D0 7F070AA0 C7B40108 */ lwc1 $f20, 0x108($sp)
|
|
.L7F070AA4:
|
|
/* 0A55D4 7F070AA4 02202025 */ move $a0, $s1
|
|
/* 0A55D8 7F070AA8 8FA50100 */ lw $a1, 0x100($sp)
|
|
/* 0A55DC 7F070AAC 4406A000 */ mfc1 $a2, $f20
|
|
/* 0A55E0 7F070AB0 0FC1C024 */ jal modelSetAnimFrame2
|
|
/* 0A55E4 7F070AB4 00000000 */ nop
|
|
.L7F070AB8:
|
|
/* 0A55E8 7F070AB8 8FBF005C */ lw $ra, 0x5c($sp)
|
|
.L7F070ABC:
|
|
/* 0A55EC 7F070ABC D7B40018 */ ldc1 $f20, 0x18($sp)
|
|
/* 0A55F0 7F070AC0 D7B60020 */ ldc1 $f22, 0x20($sp)
|
|
/* 0A55F4 7F070AC4 D7B80028 */ ldc1 $f24, 0x28($sp)
|
|
/* 0A55F8 7F070AC8 D7BA0030 */ ldc1 $f26, 0x30($sp)
|
|
/* 0A55FC 7F070ACC D7BC0038 */ ldc1 $f28, 0x38($sp)
|
|
/* 0A5600 7F070AD0 D7BE0040 */ ldc1 $f30, 0x40($sp)
|
|
/* 0A5604 7F070AD4 8FB0004C */ lw $s0, 0x4c($sp)
|
|
/* 0A5608 7F070AD8 8FB10050 */ lw $s1, 0x50($sp)
|
|
/* 0A560C 7F070ADC 8FB20054 */ lw $s2, 0x54($sp)
|
|
/* 0A5610 7F070AE0 8FB30058 */ lw $s3, 0x58($sp)
|
|
/* 0A5614 7F070AE4 03E00008 */ jr $ra
|
|
/* 0A5618 7F070AE8 27BD00F8 */ addiu $sp, $sp, 0xf8
|
|
)
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef NONMATCHING
|
|
void modelTickAnimQuarterSpeed(void) {
|
|
|
|
}
|
|
#else
|
|
GLOBAL_ASM(
|
|
.text
|
|
glabel modelTickAnimQuarterSpeed
|
|
/* 0A561C 7F070AEC 27BDFF78 */ addiu $sp, $sp, -0x88
|
|
/* 0A5620 7F070AF0 AFBF0054 */ sw $ra, 0x54($sp)
|
|
/* 0A5624 7F070AF4 AFB10050 */ sw $s1, 0x50($sp)
|
|
/* 0A5628 7F070AF8 AFB0004C */ sw $s0, 0x4c($sp)
|
|
/* 0A562C 7F070AFC F7BE0040 */ sdc1 $f30, 0x40($sp)
|
|
/* 0A5630 7F070B00 F7BC0038 */ sdc1 $f28, 0x38($sp)
|
|
/* 0A5634 7F070B04 F7BA0030 */ sdc1 $f26, 0x30($sp)
|
|
/* 0A5638 7F070B08 F7B80028 */ sdc1 $f24, 0x28($sp)
|
|
/* 0A563C 7F070B0C F7B60020 */ sdc1 $f22, 0x20($sp)
|
|
/* 0A5640 7F070B10 F7B40018 */ sdc1 $f20, 0x18($sp)
|
|
/* 0A5644 7F070B14 AFA60090 */ sw $a2, 0x90($sp)
|
|
/* 0A5648 7F070B18 C4840058 */ lwc1 $f4, 0x58($a0)
|
|
/* 0A564C 7F070B1C C4920028 */ lwc1 $f18, 0x28($a0)
|
|
/* 0A5650 7F070B20 00808025 */ move $s0, $a0
|
|
/* 0A5654 7F070B24 00A08825 */ move $s1, $a1
|
|
/* 0A5658 7F070B28 18A0010A */ blez $a1, .L7F070F54
|
|
/* 0A565C 7F070B2C E7A40080 */ swc1 $f4, 0x80($sp)
|
|
/* 0A5660 7F070B30 58A000E6 */ blezl $a1, .L7F070ECC
|
|
/* 0A5664 7F070B34 8FAB0090 */ lw $t3, 0x90($sp)
|
|
/* 0A5668 7F070B38 4480C000 */ mtc1 $zero, $f24
|
|
/* 0A566C 7F070B3C 00000000 */ nop
|
|
/* 0A5670 7F070B40 C60200B0 */ lwc1 $f2, 0xb0($s0)
|
|
.L7F070B44:
|
|
/* 0A5674 7F070B44 3C013F80 */ li $at, 0x3F800000 # 1.000000
|
|
/* 0A5678 7F070B48 4602C03C */ c.lt.s $f24, $f2
|
|
/* 0A567C 7F070B4C 00000000 */ nop
|
|
/* 0A5680 7F070B50 45020017 */ bc1fl .L7F070BB0
|
|
/* 0A5684 7F070B54 C6080088 */ lwc1 $f8, 0x88($s0)
|
|
/* 0A5688 7F070B58 C60600B4 */ lwc1 $f6, 0xb4($s0)
|
|
/* 0A568C 7F070B5C 44814000 */ mtc1 $at, $f8
|
|
/* 0A5690 7F070B60 00000000 */ nop
|
|
/* 0A5694 7F070B64 46083280 */ add.s $f10, $f6, $f8
|
|
/* 0A5698 7F070B68 E60A00B4 */ swc1 $f10, 0xb4($s0)
|
|
/* 0A569C 7F070B6C C60C00B4 */ lwc1 $f12, 0xb4($s0)
|
|
/* 0A56A0 7F070B70 4602603C */ c.lt.s $f12, $f2
|
|
/* 0A56A4 7F070B74 00000000 */ nop
|
|
/* 0A56A8 7F070B78 4502000A */ bc1fl .L7F070BA4
|
|
/* 0A56AC 7F070B7C C60600A8 */ lwc1 $f6, 0xa8($s0)
|
|
/* 0A56B0 7F070B80 C60000AC */ lwc1 $f0, 0xac($s0)
|
|
/* 0A56B4 7F070B84 C60400A8 */ lwc1 $f4, 0xa8($s0)
|
|
/* 0A56B8 7F070B88 46002181 */ sub.s $f6, $f4, $f0
|
|
/* 0A56BC 7F070B8C 460C3202 */ mul.s $f8, $f6, $f12
|
|
/* 0A56C0 7F070B90 46024283 */ div.s $f10, $f8, $f2
|
|
/* 0A56C4 7F070B94 460A0100 */ add.s $f4, $f0, $f10
|
|
/* 0A56C8 7F070B98 10000004 */ b .L7F070BAC
|
|
/* 0A56CC 7F070B9C E60400A4 */ swc1 $f4, 0xa4($s0)
|
|
/* 0A56D0 7F070BA0 C60600A8 */ lwc1 $f6, 0xa8($s0)
|
|
.L7F070BA4:
|
|
/* 0A56D4 7F070BA4 E61800B0 */ swc1 $f24, 0xb0($s0)
|
|
/* 0A56D8 7F070BA8 E60600A4 */ swc1 $f6, 0xa4($s0)
|
|
.L7F070BAC:
|
|
/* 0A56DC 7F070BAC C6080088 */ lwc1 $f8, 0x88($s0)
|
|
.L7F070BB0:
|
|
/* 0A56E0 7F070BB0 C60200A4 */ lwc1 $f2, 0xa4($s0)
|
|
/* 0A56E4 7F070BB4 4608C03C */ c.lt.s $f24, $f8
|
|
/* 0A56E8 7F070BB8 00000000 */ nop
|
|
/* 0A56EC 7F070BBC 4502001D */ bc1fl .L7F070C34
|
|
/* 0A56F0 7F070BC0 C60C004C */ lwc1 $f12, 0x4c($s0)
|
|
/* 0A56F4 7F070BC4 C60A008C */ lwc1 $f10, 0x8c($s0)
|
|
/* 0A56F8 7F070BC8 3C013F80 */ li $at, 0x3F800000 # 1.000000
|
|
/* 0A56FC 7F070BCC 46025100 */ add.s $f4, $f10, $f2
|
|
/* 0A5700 7F070BD0 E604008C */ swc1 $f4, 0x8c($s0)
|
|
/* 0A5704 7F070BD4 C60C008C */ lwc1 $f12, 0x8c($s0)
|
|
/* 0A5708 7F070BD8 460CC032 */ c.eq.s $f24, $f12
|
|
/* 0A570C 7F070BDC 00000000 */ nop
|
|
/* 0A5710 7F070BE0 45020006 */ bc1fl .L7F070BFC
|
|
/* 0A5714 7F070BE4 C6000088 */ lwc1 $f0, 0x88($s0)
|
|
/* 0A5718 7F070BE8 44813000 */ mtc1 $at, $f6
|
|
/* 0A571C 7F070BEC C60200A4 */ lwc1 $f2, 0xa4($s0)
|
|
/* 0A5720 7F070BF0 1000000F */ b .L7F070C30
|
|
/* 0A5724 7F070BF4 E6060084 */ swc1 $f6, 0x84($s0)
|
|
/* 0A5728 7F070BF8 C6000088 */ lwc1 $f0, 0x88($s0)
|
|
.L7F070BFC:
|
|
/* 0A572C 7F070BFC 4600603C */ c.lt.s $f12, $f0
|
|
/* 0A5730 7F070C00 00000000 */ nop
|
|
/* 0A5734 7F070C04 45020007 */ bc1fl .L7F070C24
|
|
/* 0A5738 7F070C08 E6180088 */ swc1 $f24, 0x88($s0)
|
|
/* 0A573C 7F070C0C 460C0201 */ sub.s $f8, $f0, $f12
|
|
/* 0A5740 7F070C10 C60200A4 */ lwc1 $f2, 0xa4($s0)
|
|
/* 0A5744 7F070C14 46004283 */ div.s $f10, $f8, $f0
|
|
/* 0A5748 7F070C18 10000005 */ b .L7F070C30
|
|
/* 0A574C 7F070C1C E60A0084 */ swc1 $f10, 0x84($s0)
|
|
/* 0A5750 7F070C20 E6180088 */ swc1 $f24, 0x88($s0)
|
|
.L7F070C24:
|
|
/* 0A5754 7F070C24 E6180084 */ swc1 $f24, 0x84($s0)
|
|
/* 0A5758 7F070C28 AE000054 */ sw $zero, 0x54($s0)
|
|
/* 0A575C 7F070C2C C60200A4 */ lwc1 $f2, 0xa4($s0)
|
|
.L7F070C30:
|
|
/* 0A5760 7F070C30 C60C004C */ lwc1 $f12, 0x4c($s0)
|
|
.L7F070C34:
|
|
/* 0A5764 7F070C34 460CC03C */ c.lt.s $f24, $f12
|
|
/* 0A5768 7F070C38 00000000 */ nop
|
|
/* 0A576C 7F070C3C 45020017 */ bc1fl .L7F070C9C
|
|
/* 0A5770 7F070C40 C6100040 */ lwc1 $f16, 0x40($s0)
|
|
/* 0A5774 7F070C44 C6040050 */ lwc1 $f4, 0x50($s0)
|
|
/* 0A5778 7F070C48 46022180 */ add.s $f6, $f4, $f2
|
|
/* 0A577C 7F070C4C E6060050 */ swc1 $f6, 0x50($s0)
|
|
/* 0A5780 7F070C50 C60E0050 */ lwc1 $f14, 0x50($s0)
|
|
/* 0A5784 7F070C54 460C703C */ c.lt.s $f14, $f12
|
|
/* 0A5788 7F070C58 00000000 */ nop
|
|
/* 0A578C 7F070C5C 4502000B */ bc1fl .L7F070C8C
|
|
/* 0A5790 7F070C60 C60A0044 */ lwc1 $f10, 0x44($s0)
|
|
/* 0A5794 7F070C64 C6000048 */ lwc1 $f0, 0x48($s0)
|
|
/* 0A5798 7F070C68 C6080044 */ lwc1 $f8, 0x44($s0)
|
|
/* 0A579C 7F070C6C C60200A4 */ lwc1 $f2, 0xa4($s0)
|
|
/* 0A57A0 7F070C70 46004281 */ sub.s $f10, $f8, $f0
|
|
/* 0A57A4 7F070C74 460E5102 */ mul.s $f4, $f10, $f14
|
|
/* 0A57A8 7F070C78 460C2183 */ div.s $f6, $f4, $f12
|
|
/* 0A57AC 7F070C7C 46060200 */ add.s $f8, $f0, $f6
|
|
/* 0A57B0 7F070C80 10000005 */ b .L7F070C98
|
|
/* 0A57B4 7F070C84 E6080040 */ swc1 $f8, 0x40($s0)
|
|
/* 0A57B8 7F070C88 C60A0044 */ lwc1 $f10, 0x44($s0)
|
|
.L7F070C8C:
|
|
/* 0A57BC 7F070C8C E618004C */ swc1 $f24, 0x4c($s0)
|
|
/* 0A57C0 7F070C90 C60200A4 */ lwc1 $f2, 0xa4($s0)
|
|
/* 0A57C4 7F070C94 E60A0040 */ swc1 $f10, 0x40($s0)
|
|
.L7F070C98:
|
|
/* 0A57C8 7F070C98 C6100040 */ lwc1 $f16, 0x40($s0)
|
|
.L7F070C9C:
|
|
/* 0A57CC 7F070C9C 8E0E0054 */ lw $t6, 0x54($s0)
|
|
/* 0A57D0 7F070CA0 46101102 */ mul.s $f4, $f2, $f16
|
|
/* 0A57D4 7F070CA4 11C00020 */ beqz $t6, .L7F070D28
|
|
/* 0A57D8 7F070CA8 46049480 */ add.s $f18, $f18, $f4
|
|
/* 0A57DC 7F070CAC C60C007C */ lwc1 $f12, 0x7c($s0)
|
|
/* 0A57E0 7F070CB0 460CC03C */ c.lt.s $f24, $f12
|
|
/* 0A57E4 7F070CB4 00000000 */ nop
|
|
/* 0A57E8 7F070CB8 45020017 */ bc1fl .L7F070D18
|
|
/* 0A57EC 7F070CBC C6000070 */ lwc1 $f0, 0x70($s0)
|
|
/* 0A57F0 7F070CC0 C6060080 */ lwc1 $f6, 0x80($s0)
|
|
/* 0A57F4 7F070CC4 46023200 */ add.s $f8, $f6, $f2
|
|
/* 0A57F8 7F070CC8 E6080080 */ swc1 $f8, 0x80($s0)
|
|
/* 0A57FC 7F070CCC C60E0080 */ lwc1 $f14, 0x80($s0)
|
|
/* 0A5800 7F070CD0 460C703C */ c.lt.s $f14, $f12
|
|
/* 0A5804 7F070CD4 00000000 */ nop
|
|
/* 0A5808 7F070CD8 4502000B */ bc1fl .L7F070D08
|
|
/* 0A580C 7F070CDC C6040074 */ lwc1 $f4, 0x74($s0)
|
|
/* 0A5810 7F070CE0 C6000078 */ lwc1 $f0, 0x78($s0)
|
|
/* 0A5814 7F070CE4 C60A0074 */ lwc1 $f10, 0x74($s0)
|
|
/* 0A5818 7F070CE8 C60200A4 */ lwc1 $f2, 0xa4($s0)
|
|
/* 0A581C 7F070CEC 46005101 */ sub.s $f4, $f10, $f0
|
|
/* 0A5820 7F070CF0 460E2182 */ mul.s $f6, $f4, $f14
|
|
/* 0A5824 7F070CF4 460C3203 */ div.s $f8, $f6, $f12
|
|
/* 0A5828 7F070CF8 46080280 */ add.s $f10, $f0, $f8
|
|
/* 0A582C 7F070CFC 10000005 */ b .L7F070D14
|
|
/* 0A5830 7F070D00 E60A0070 */ swc1 $f10, 0x70($s0)
|
|
/* 0A5834 7F070D04 C6040074 */ lwc1 $f4, 0x74($s0)
|
|
.L7F070D08:
|
|
/* 0A5838 7F070D08 E618007C */ swc1 $f24, 0x7c($s0)
|
|
/* 0A583C 7F070D0C C60200A4 */ lwc1 $f2, 0xa4($s0)
|
|
/* 0A5840 7F070D10 E6040070 */ swc1 $f4, 0x70($s0)
|
|
.L7F070D14:
|
|
/* 0A5844 7F070D14 C6000070 */ lwc1 $f0, 0x70($s0)
|
|
.L7F070D18:
|
|
/* 0A5848 7F070D18 C7A60080 */ lwc1 $f6, 0x80($sp)
|
|
/* 0A584C 7F070D1C 46001202 */ mul.s $f8, $f2, $f0
|
|
/* 0A5850 7F070D20 46083280 */ add.s $f10, $f6, $f8
|
|
/* 0A5854 7F070D24 E7AA0080 */ swc1 $f10, 0x80($sp)
|
|
.L7F070D28:
|
|
/* 0A5858 7F070D28 820F0026 */ lb $t7, 0x26($s0)
|
|
/* 0A585C 7F070D2C 51E00064 */ beql $t7, $zero, .L7F070EC0
|
|
/* 0A5860 7F070D30 2631FFFF */ addiu $s1, $s1, -1
|
|
/* 0A5864 7F070D34 8E180020 */ lw $t8, 0x20($s0)
|
|
/* 0A5868 7F070D38 4610C03E */ c.le.s $f24, $f16
|
|
/* 0A586C 7F070D3C C616003C */ lwc1 $f22, 0x3c($s0)
|
|
/* 0A5870 7F070D40 97190004 */ lhu $t9, 4($t8)
|
|
/* 0A5874 7F070D44 C6020090 */ lwc1 $f2, 0x90($s0)
|
|
/* 0A5878 7F070D48 2728FFFF */ addiu $t0, $t9, -1
|
|
/* 0A587C 7F070D4C 44882000 */ mtc1 $t0, $f4
|
|
/* 0A5880 7F070D50 4500000C */ bc1f .L7F070D84
|
|
/* 0A5884 7F070D54 46802020 */ cvt.s.w $f0, $f4
|
|
/* 0A5888 7F070D58 4616C03E */ c.le.s $f24, $f22
|
|
/* 0A588C 7F070D5C 46000506 */ mov.s $f20, $f0
|
|
/* 0A5890 7F070D60 46001686 */ mov.s $f26, $f2
|
|
/* 0A5894 7F070D64 45020012 */ bc1fl .L7F070DB0
|
|
/* 0A5898 7F070D68 4610C03E */ c.le.s $f24, $f16
|
|
/* 0A589C 7F070D6C 4600B03C */ c.lt.s $f22, $f0
|
|
/* 0A58A0 7F070D70 00000000 */ nop
|
|
/* 0A58A4 7F070D74 4502000E */ bc1fl .L7F070DB0
|
|
/* 0A58A8 7F070D78 4610C03E */ c.le.s $f24, $f16
|
|
/* 0A58AC 7F070D7C 1000000B */ b .L7F070DAC
|
|
/* 0A58B0 7F070D80 4600B506 */ mov.s $f20, $f22
|
|
.L7F070D84:
|
|
/* 0A58B4 7F070D84 4616C03E */ c.le.s $f24, $f22
|
|
/* 0A58B8 7F070D88 46001506 */ mov.s $f20, $f2
|
|
/* 0A58BC 7F070D8C 46000686 */ mov.s $f26, $f0
|
|
/* 0A58C0 7F070D90 45020007 */ bc1fl .L7F070DB0
|
|
/* 0A58C4 7F070D94 4610C03E */ c.le.s $f24, $f16
|
|
/* 0A58C8 7F070D98 4600B03C */ c.lt.s $f22, $f0
|
|
/* 0A58CC 7F070D9C 00000000 */ nop
|
|
/* 0A58D0 7F070DA0 45020003 */ bc1fl .L7F070DB0
|
|
/* 0A58D4 7F070DA4 4610C03E */ c.le.s $f24, $f16
|
|
/* 0A58D8 7F070DA8 4600B686 */ mov.s $f26, $f22
|
|
.L7F070DAC:
|
|
/* 0A58DC 7F070DAC 4610C03E */ c.le.s $f24, $f16
|
|
.L7F070DB0:
|
|
/* 0A58E0 7F070DB0 00000000 */ nop
|
|
/* 0A58E4 7F070DB4 45020006 */ bc1fl .L7F070DD0
|
|
/* 0A58E8 7F070DB8 4618803C */ c.lt.s $f16, $f24
|
|
/* 0A58EC 7F070DBC 4612A03E */ c.le.s $f20, $f18
|
|
/* 0A58F0 7F070DC0 00000000 */ nop
|
|
/* 0A58F4 7F070DC4 4503000A */ bc1tl .L7F070DF0
|
|
/* 0A58F8 7F070DC8 C606004C */ lwc1 $f6, 0x4c($s0)
|
|
/* 0A58FC 7F070DCC 4618803C */ c.lt.s $f16, $f24
|
|
.L7F070DD0:
|
|
/* 0A5900 7F070DD0 00000000 */ nop
|
|
/* 0A5904 7F070DD4 4502003A */ bc1fl .L7F070EC0
|
|
/* 0A5908 7F070DD8 2631FFFF */ addiu $s1, $s1, -1
|
|
/* 0A590C 7F070DDC 4614903E */ c.le.s $f18, $f20
|
|
/* 0A5910 7F070DE0 00000000 */ nop
|
|
/* 0A5914 7F070DE4 45020036 */ bc1fl .L7F070EC0
|
|
/* 0A5918 7F070DE8 2631FFFF */ addiu $s1, $s1, -1
|
|
/* 0A591C 7F070DEC C606004C */ lwc1 $f6, 0x4c($s0)
|
|
.L7F070DF0:
|
|
/* 0A5920 7F070DF0 C61C0044 */ lwc1 $f28, 0x44($s0)
|
|
/* 0A5924 7F070DF4 C61E0048 */ lwc1 $f30, 0x48($s0)
|
|
/* 0A5928 7F070DF8 8FA90090 */ lw $t1, 0x90($sp)
|
|
/* 0A592C 7F070DFC E7A60060 */ swc1 $f6, 0x60($sp)
|
|
/* 0A5930 7F070E00 C6080050 */ lwc1 $f8, 0x50($s0)
|
|
/* 0A5934 7F070E04 02002025 */ move $a0, $s0
|
|
/* 0A5938 7F070E08 1120000A */ beqz $t1, .L7F070E34
|
|
/* 0A593C 7F070E0C E7A8005C */ swc1 $f8, 0x5c($sp)
|
|
/* 0A5940 7F070E10 8E050028 */ lw $a1, 0x28($s0)
|
|
/* 0A5944 7F070E14 4406A000 */ mfc1 $a2, $f20
|
|
/* 0A5948 7F070E18 4407C000 */ mfc1 $a3, $f24
|
|
/* 0A594C 7F070E1C E7B20084 */ swc1 $f18, 0x84($sp)
|
|
/* 0A5950 7F070E20 E7B80010 */ swc1 $f24, 0x10($sp)
|
|
/* 0A5954 7F070E24 0FC1C07B */ jal modelSetAnimFrame2WithChrStuff
|
|
/* 0A5958 7F070E28 02002025 */ move $a0, $s0
|
|
/* 0A595C 7F070E2C 10000006 */ b .L7F070E48
|
|
/* 0A5960 7F070E30 C7B20084 */ lwc1 $f18, 0x84($sp)
|
|
.L7F070E34:
|
|
/* 0A5964 7F070E34 4405A000 */ mfc1 $a1, $f20
|
|
/* 0A5968 7F070E38 4406C000 */ mfc1 $a2, $f24
|
|
/* 0A596C 7F070E3C 0FC1C024 */ jal modelSetAnimFrame2
|
|
/* 0A5970 7F070E40 E7B20084 */ swc1 $f18, 0x84($sp)
|
|
/* 0A5974 7F070E44 C7B20084 */ lwc1 $f18, 0x84($sp)
|
|
.L7F070E48:
|
|
/* 0A5978 7F070E48 C60A0040 */ lwc1 $f10, 0x40($s0)
|
|
/* 0A597C 7F070E4C 8E050020 */ lw $a1, 0x20($s0)
|
|
/* 0A5980 7F070E50 82060024 */ lb $a2, 0x24($s0)
|
|
/* 0A5984 7F070E54 E7AA0010 */ swc1 $f10, 0x10($sp)
|
|
/* 0A5988 7F070E58 C6040094 */ lwc1 $f4, 0x94($s0)
|
|
/* 0A598C 7F070E5C 4407D000 */ mfc1 $a3, $f26
|
|
/* 0A5990 7F070E60 E7B20084 */ swc1 $f18, 0x84($sp)
|
|
/* 0A5994 7F070E64 02002025 */ move $a0, $s0
|
|
/* 0A5998 7F070E68 0FC1BF2A */ jal modelSetAnimation
|
|
/* 0A599C 7F070E6C E7A40014 */ swc1 $f4, 0x14($sp)
|
|
/* 0A59A0 7F070E70 C7B20084 */ lwc1 $f18, 0x84($sp)
|
|
/* 0A59A4 7F070E74 240A0001 */ li $t2, 1
|
|
/* 0A59A8 7F070E78 A20A0026 */ sb $t2, 0x26($s0)
|
|
/* 0A59AC 7F070E7C E616003C */ swc1 $f22, 0x3c($s0)
|
|
/* 0A59B0 7F070E80 E61C0044 */ swc1 $f28, 0x44($s0)
|
|
/* 0A59B4 7F070E84 E61E0048 */ swc1 $f30, 0x48($s0)
|
|
/* 0A59B8 7F070E88 C7A60060 */ lwc1 $f6, 0x60($sp)
|
|
/* 0A59BC 7F070E8C 4612D280 */ add.s $f10, $f26, $f18
|
|
/* 0A59C0 7F070E90 E606004C */ swc1 $f6, 0x4c($s0)
|
|
/* 0A59C4 7F070E94 C7A8005C */ lwc1 $f8, 0x5c($sp)
|
|
/* 0A59C8 7F070E98 E6080050 */ swc1 $f8, 0x50($s0)
|
|
/* 0A59CC 7F070E9C E7B20080 */ swc1 $f18, 0x80($sp)
|
|
/* 0A59D0 7F070EA0 8E020098 */ lw $v0, 0x98($s0)
|
|
/* 0A59D4 7F070EA4 46145481 */ sub.s $f18, $f10, $f20
|
|
/* 0A59D8 7F070EA8 50400005 */ beql $v0, $zero, .L7F070EC0
|
|
/* 0A59DC 7F070EAC 2631FFFF */ addiu $s1, $s1, -1
|
|
/* 0A59E0 7F070EB0 0040F809 */ jalr $v0
|
|
/* 0A59E4 7F070EB4 E7B20084 */ swc1 $f18, 0x84($sp)
|
|
/* 0A59E8 7F070EB8 C7B20084 */ lwc1 $f18, 0x84($sp)
|
|
/* 0A59EC 7F070EBC 2631FFFF */ addiu $s1, $s1, -1
|
|
.L7F070EC0:
|
|
/* 0A59F0 7F070EC0 5E20FF20 */ bgtzl $s1, .L7F070B44
|
|
/* 0A59F4 7F070EC4 C60200B0 */ lwc1 $f2, 0xb0($s0)
|
|
/* 0A59F8 7F070EC8 8FAB0090 */ lw $t3, 0x90($sp)
|
|
.L7F070ECC:
|
|
/* 0A59FC 7F070ECC 4480C000 */ mtc1 $zero, $f24
|
|
/* 0A5A00 7F070ED0 8E020054 */ lw $v0, 0x54($s0)
|
|
/* 0A5A04 7F070ED4 11600014 */ beqz $t3, .L7F070F28
|
|
/* 0A5A08 7F070ED8 00000000 */ nop
|
|
/* 0A5A0C 7F070EDC 1040000A */ beqz $v0, .L7F070F08
|
|
/* 0A5A10 7F070EE0 C6000028 */ lwc1 $f0, 0x28($s0)
|
|
/* 0A5A14 7F070EE4 C7A40080 */ lwc1 $f4, 0x80($sp)
|
|
/* 0A5A18 7F070EE8 44050000 */ mfc1 $a1, $f0
|
|
/* 0A5A1C 7F070EEC 44069000 */ mfc1 $a2, $f18
|
|
/* 0A5A20 7F070EF0 8E070058 */ lw $a3, 0x58($s0)
|
|
/* 0A5A24 7F070EF4 02002025 */ move $a0, $s0
|
|
/* 0A5A28 7F070EF8 0FC1C07B */ jal modelSetAnimFrame2WithChrStuff
|
|
/* 0A5A2C 7F070EFC E7A40010 */ swc1 $f4, 0x10($sp)
|
|
/* 0A5A30 7F070F00 10000015 */ b .L7F070F58
|
|
/* 0A5A34 7F070F04 8FBF0054 */ lw $ra, 0x54($sp)
|
|
.L7F070F08:
|
|
/* 0A5A38 7F070F08 44050000 */ mfc1 $a1, $f0
|
|
/* 0A5A3C 7F070F0C 44069000 */ mfc1 $a2, $f18
|
|
/* 0A5A40 7F070F10 4407C000 */ mfc1 $a3, $f24
|
|
/* 0A5A44 7F070F14 02002025 */ move $a0, $s0
|
|
/* 0A5A48 7F070F18 0FC1C07B */ jal modelSetAnimFrame2WithChrStuff
|
|
/* 0A5A4C 7F070F1C E7B80010 */ swc1 $f24, 0x10($sp)
|
|
/* 0A5A50 7F070F20 1000000D */ b .L7F070F58
|
|
/* 0A5A54 7F070F24 8FBF0054 */ lw $ra, 0x54($sp)
|
|
.L7F070F28:
|
|
/* 0A5A58 7F070F28 10400006 */ beqz $v0, .L7F070F44
|
|
/* 0A5A5C 7F070F2C 02002025 */ move $a0, $s0
|
|
/* 0A5A60 7F070F30 44059000 */ mfc1 $a1, $f18
|
|
/* 0A5A64 7F070F34 0FC1C024 */ jal modelSetAnimFrame2
|
|
/* 0A5A68 7F070F38 8FA60080 */ lw $a2, 0x80($sp)
|
|
/* 0A5A6C 7F070F3C 10000006 */ b .L7F070F58
|
|
/* 0A5A70 7F070F40 8FBF0054 */ lw $ra, 0x54($sp)
|
|
.L7F070F44:
|
|
/* 0A5A74 7F070F44 44059000 */ mfc1 $a1, $f18
|
|
/* 0A5A78 7F070F48 4406C000 */ mfc1 $a2, $f24
|
|
/* 0A5A7C 7F070F4C 0FC1C024 */ jal modelSetAnimFrame2
|
|
/* 0A5A80 7F070F50 02002025 */ move $a0, $s0
|
|
.L7F070F54:
|
|
/* 0A5A84 7F070F54 8FBF0054 */ lw $ra, 0x54($sp)
|
|
.L7F070F58:
|
|
/* 0A5A88 7F070F58 D7B40018 */ ldc1 $f20, 0x18($sp)
|
|
/* 0A5A8C 7F070F5C D7B60020 */ ldc1 $f22, 0x20($sp)
|
|
/* 0A5A90 7F070F60 D7B80028 */ ldc1 $f24, 0x28($sp)
|
|
/* 0A5A94 7F070F64 D7BA0030 */ ldc1 $f26, 0x30($sp)
|
|
/* 0A5A98 7F070F68 D7BC0038 */ ldc1 $f28, 0x38($sp)
|
|
/* 0A5A9C 7F070F6C D7BE0040 */ ldc1 $f30, 0x40($sp)
|
|
/* 0A5AA0 7F070F70 8FB0004C */ lw $s0, 0x4c($sp)
|
|
/* 0A5AA4 7F070F74 8FB10050 */ lw $s1, 0x50($sp)
|
|
/* 0A5AA8 7F070F78 03E00008 */ jr $ra
|
|
/* 0A5AAC 7F070F7C 27BD0088 */ addiu $sp, $sp, 0x88
|
|
)
|
|
#endif
|
|
|
|
|
|
void modelApplyRenderModeType1(ModelRenderData *renderdata)
|
|
{
|
|
gDPPipeSync(renderdata->gdl++);
|
|
gDPSetCycleType(renderdata->gdl++, G_CYC_1CYCLE);
|
|
|
|
if (renderdata->zbufferenabled)
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_AA_ZB_OPA_SURF2, G_RM_AA_ZB_OPA_SURF);
|
|
}
|
|
else
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_AA_OPA_SURF, G_RM_AA_OPA_SURF2);
|
|
}
|
|
|
|
gDPSetCombineMode(renderdata->gdl++, G_CC_MODULATEIA, G_CC_MODULATEIA);
|
|
}
|
|
|
|
|
|
/*
|
|
--Copy/Paste from Doc
|
|
DisplayList Setups Depend on Object Type, Prop Guard or Gun.
|
|
These are applied to each part of an object at runtime and can be overridden. loading the next part will use these values once more.
|
|
GeometryMode is not in setup and is persistent accross parts.
|
|
|
|
|
|
7F072A0C Read Displaylist 18 Model Type
|
|
7F072A1C Read Displaylist 18 Model Type
|
|
7F072A24 Check model type 1
|
|
7F072A2C Call to do model type 1 7F070F80
|
|
7F072A40 Check model type 3
|
|
7F072A48 Call to do model type 3 7F071030
|
|
7F072A5C Check model type 4
|
|
7F072A64 Call to do model type 4 7F071B44
|
|
7F072A78 Check model type 2
|
|
7F072A80 Call to do model type 2 7F072644
|
|
|
|
7F0727F8 Read Displaylist 04 Model Type
|
|
|
|
A1 is primary = 1, secondary = 0
|
|
Inside the T8 or whatever temporary register indicates gun or not gun (0 = gun, or UseZ = 1), for different render mode
|
|
|
|
Bool UseZ //guns = false
|
|
Bool
|
|
|
|
|
|
Model Type 0: NoSetup.
|
|
type 0 Has No DL Setup and will use whaterver is currently set.
|
|
|
|
Model Type 1: 1Cycle No Sec
|
|
E700000000000000 pipesync()
|
|
BA00140200000000 CycleType(1c)
|
|
if UseZ
|
|
B900031D00552078 SetRendermode(AA_ZB_OPA_1) //cin ain cmem amem
|
|
else
|
|
B900031D00552048 SetRendermode(AA_OPA_1) //cin ain cmem amem
|
|
end if
|
|
FC121824FF33FFFF SetCombine(MODULATERGBA)
|
|
No Secondary
|
|
|
|
Model Type 2: 2Cycle No Sec
|
|
E700000000000000 pipesync()
|
|
BA00140200100000 CycleType(2c)
|
|
if UseZ
|
|
B900031D0C192078 SetRendermode(AA_ZB_OPA_2) // cin 0 cin 1 //colour only
|
|
else
|
|
B900031D0C192048 SetRendermode(AA_OPA_2) // cin 0 cin 1 //colour only
|
|
end if
|
|
FC26A0041F1093FF SetCombine(TRILERP, MODULATERGBA)
|
|
No Secondary
|
|
Model Type 3: GunLighting - Reduced Secondary Commands (guns)
|
|
This Type Uses Vertex Alpha for Secondary Surfaces and uses the FOG Alpha value for applying Fog/"Lighting".
|
|
Primary
|
|
E700000000000000 pipesync()
|
|
BA00140200100000 CycleType(2c)
|
|
F800000000000026 SetFogColor(0,0,0,38)
|
|
if dltype = full
|
|
if guard
|
|
FB0000005A0000FF SetEnvColor(90,0,0,255)
|
|
FC1598045FFEDBF8 SetCombine(((Texel0-Env)*ShadeA+Env)
|
|
((Texel0-Env)*Shade+Env),
|
|
MODULATERGB_DECALA)
|
|
else if prop
|
|
FB000000FFFFFFFF SetEnvColor(255,255,255,255)
|
|
FA00000000000000 SetPrimColor(0,0,0,0)
|
|
FC26A0041F1093FB SetCombine(TRILERP, MODULATERGB_ADDPRIM_A)
|
|
endif
|
|
else
|
|
FC26A0041F1093FF SetCombine(TRILERP, MODULATERGBA)
|
|
endif
|
|
if UseZ
|
|
B900031DC4112078 SetRendermode(AA_ZB_OPA_StanFOG_2)
|
|
else
|
|
B900031DC4112048 SetRendermode(AA_OPA_StanFOG_2) //acvg
|
|
endif
|
|
|
|
Secondary
|
|
if UseZ
|
|
B900031DC41049D8 SetRendermode(AA_Zcmp_XLU_StanFOG_2)
|
|
else
|
|
B900031DC41041C8 SetRendermode(AA_OPA_StanFOG_2)//FcBl ClrOnCvg
|
|
endif
|
|
|
|
Model Type 4: Normal Fog/Lighting object
|
|
This Type Uses Vertex Alpha for Secondary Surfaces and uses the FOG Alpha value for applying Fog/"Lighting".
|
|
Primary
|
|
E700000000000000 pipesync()
|
|
BA00140200100000 CycleType(2c)
|
|
F800000000000026 SetFogColor(0,0,0,38)
|
|
if dltype = full
|
|
if guard
|
|
FB0000005A0000FF SetEnvColor(90,0,0,255)
|
|
FC1598045FFEDBF8 SetCombine(((Texel0-Env)*ShadeA+Env)
|
|
((Texel0-Env)*Shade+Env),
|
|
MODULATERGB_DECALA)
|
|
else if prop
|
|
FB000000FFFFFFFF SetEnvColor(255,255,255,255)
|
|
FA00000000000000 SetPrimColor(0,0,0,0)
|
|
FC26A0041F1093FB SetCombine(TRILERP, MODULATERGB_ADDPRIM_A)
|
|
endif
|
|
else
|
|
FC26A0041F1093FF SetCombine(TRILERP, MODULATERGBA)
|
|
endif
|
|
if UseZ
|
|
B900031DC4112078 SetRendermode(AA_ZB_OPA_StanFOG_2)
|
|
else
|
|
B900031DC4112048 SetRendermode(AA_OPA_StanFOG_2) //acvg
|
|
endif
|
|
|
|
Secondary
|
|
E700000000000000 pipesync()
|
|
BA00140200100000 CycleType(2c)
|
|
F800000000000026 SetFogColor(0,0,0,38)
|
|
if dltype = full
|
|
if guard
|
|
FB0000005A0000FF SetEnvColor(90,0,0,255)
|
|
FC1598045FFEDBF8 SetCombine(((Texel0-Env)*ShadeA+Env)
|
|
((Texel0-Env)*Shade+Env),
|
|
MODULATERGB_DECALA)
|
|
else if prop
|
|
FB000000FFFFFFFF SetEnvColor(255,255,255,255)
|
|
FA00000000000000 SetPrimColor(0,0,0,0)
|
|
FC26A0041F1093FB SetCombine(TRILERP, MODULATERGB_ADDPRIM_A)
|
|
endif
|
|
else
|
|
FA00000000000000 SetPrimColor(0,0,0,0)
|
|
FC26A0041F1093FB SetCombine(TRILERP, MODULATERGB_ADDPRIM_A)
|
|
endif
|
|
if UseZ
|
|
B900031DC41049D8 SetRendermode(AA_Zcmp_XLU_StanFOG_2)
|
|
else
|
|
B900031DC41041C8 SetRendermode(AA_OPA_StanFOG_2)//FcBl ClrOnCvg
|
|
endif
|
|
*/
|
|
void modelApplyRenderModeType3(ModelRenderData *renderdata, bool arg1)
|
|
{
|
|
if (renderdata->unk30 == 7)
|
|
{
|
|
if (arg1)
|
|
{
|
|
u8 r, g, b, a;
|
|
gDPPipeSync(renderdata->gdl++);
|
|
gDPSetCycleType(renderdata->gdl++, G_CYC_2CYCLE);
|
|
|
|
r = _SHIFTR(renderdata->fogcolour, 24, 8);
|
|
g = _SHIFTR(renderdata->fogcolour, 16, 8);
|
|
b = _SHIFTR(renderdata->fogcolour, 8, 8);
|
|
a = _SHIFTR(renderdata->fogcolour, 0, 8);
|
|
gDPSetFogColor(renderdata->gdl++, r, g, b, a);
|
|
|
|
r = _SHIFTR(renderdata->envcolour, 24, 8);
|
|
g = _SHIFTR(renderdata->envcolour, 16, 8);
|
|
b = _SHIFTR(renderdata->envcolour, 8, 8);
|
|
a = 0xFF;
|
|
gDPSetEnvColor(renderdata->gdl++, r, g, b, a);
|
|
|
|
gDPSetCombineLERP(renderdata->gdl++, TEXEL0, ENVIRONMENT, SHADE_ALPHA, ENVIRONMENT, TEXEL0, ENVIRONMENT, SHADE, ENVIRONMENT, COMBINED, 0, SHADE, 0, 0, 0, 0, COMBINED);
|
|
|
|
if (renderdata->zbufferenabled)
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_ZB_OPA_SURF2);
|
|
}
|
|
else
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_OPA_SURF2);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (renderdata->zbufferenabled)
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_ZB_XLU_SURF2);
|
|
}
|
|
else
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_XLU_SURF2);
|
|
}
|
|
}
|
|
}
|
|
else if (renderdata->unk30 == 8)
|
|
{
|
|
if (arg1)
|
|
{
|
|
u8 r, g, b, a;
|
|
gDPPipeSync(renderdata->gdl++);
|
|
gDPSetCycleType(renderdata->gdl++, G_CYC_2CYCLE);
|
|
|
|
r = _SHIFTR(renderdata->fogcolour, 24, 8);
|
|
g = _SHIFTR(renderdata->fogcolour, 16, 8);
|
|
b = _SHIFTR(renderdata->fogcolour, 8, 8);
|
|
a = _SHIFTR(renderdata->fogcolour, 0, 8);
|
|
gDPSetFogColor(renderdata->gdl++, r, g, b, a);
|
|
|
|
r = _SHIFTR(renderdata->envcolour, 24, 8);
|
|
g = _SHIFTR(renderdata->envcolour, 16, 8);
|
|
b = _SHIFTR(renderdata->envcolour, 8, 8);
|
|
a = _SHIFTR(renderdata->envcolour, 0, 8);
|
|
gDPSetEnvColor(renderdata->gdl++, r, g, b, a);
|
|
|
|
gDPSetCombineLERP(renderdata->gdl++, TEXEL0, ENVIRONMENT, SHADE_ALPHA, ENVIRONMENT, TEXEL0, 0, ENVIRONMENT, 0, COMBINED, 0, SHADE, 0, 0, 0, 0, COMBINED);
|
|
|
|
if (renderdata->zbufferenabled)
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_ZB_XLU_SURF2);
|
|
}
|
|
else
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_XLU_SURF2);
|
|
}
|
|
}
|
|
}
|
|
else if (renderdata->unk30 == 9)
|
|
{
|
|
if ((renderdata->envcolour & 0xFF) == 0)
|
|
{
|
|
if (arg1)
|
|
{
|
|
u8 r = _SHIFTR(renderdata->fogcolour, 24, 8);
|
|
u8 g = _SHIFTR(renderdata->fogcolour, 16, 8);
|
|
u8 b = _SHIFTR(renderdata->fogcolour, 8, 8);
|
|
u8 a = _SHIFTR(renderdata->fogcolour, 0, 8);
|
|
|
|
gDPPipeSync(renderdata->gdl++);
|
|
gDPSetCycleType(renderdata->gdl++, G_CYC_2CYCLE);
|
|
gDPSetFogColor(renderdata->gdl++, r, g, b, a);
|
|
gDPSetEnvColor(renderdata->gdl++, 0xFF, 0xFF, 0xFF, 0xFF);
|
|
gDPSetPrimColor(renderdata->gdl++, 0, 0, 0, 0, 0, (renderdata->envcolour >> 8) & 0xFF);
|
|
|
|
gDPSetCombineLERP(renderdata->gdl++, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, COMBINED, 0, SHADE, 0, COMBINED, 0, SHADE, PRIMITIVE);
|
|
|
|
if (renderdata->zbufferenabled)
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_ZB_OPA_SURF2);
|
|
}
|
|
else
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_OPA_SURF2);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (renderdata->zbufferenabled)
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_ZB_XLU_SURF2);
|
|
}
|
|
else
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_XLU_SURF2);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (arg1)
|
|
{
|
|
u8 r = _SHIFTR(renderdata->fogcolour, 24, 8);
|
|
u8 g = _SHIFTR(renderdata->fogcolour, 16, 8);
|
|
u8 b = _SHIFTR(renderdata->fogcolour, 8, 8);
|
|
u8 a = _SHIFTR(renderdata->fogcolour, 0, 8);
|
|
|
|
gDPPipeSync(renderdata->gdl++);
|
|
gDPSetCycleType(renderdata->gdl++, G_CYC_2CYCLE);
|
|
gDPSetFogColor(renderdata->gdl++, r, g, b, a);
|
|
gDPSetEnvColor(renderdata->gdl++, 0, 0, 0, renderdata->envcolour & 0xFF);
|
|
|
|
gDPSetCombineLERP(renderdata->gdl++, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, 1, 0, SHADE, ENVIRONMENT, COMBINED, 0, SHADE, 0, 0, 0, 0, COMBINED);
|
|
|
|
if (renderdata->zbufferenabled)
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_ZB_TEX_EDGE2);
|
|
}
|
|
else
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_TEX_EDGE2);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
gDPSetPrimColor(renderdata->gdl++, 0, 0, 0, 0, 0, (renderdata->envcolour >> 8) & 0xFF);
|
|
gDPSetCombineLERP(renderdata->gdl++, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, SHADE, ENVIRONMENT, TEXEL0, 0, COMBINED, 0, SHADE, 0, 1, 0, PRIMITIVE, COMBINED);
|
|
|
|
if (renderdata->zbufferenabled)
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_ZB_TEX_EDGE2);
|
|
}
|
|
else
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_TEX_EDGE2);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if (renderdata->unk30 == 4)
|
|
{
|
|
if (arg1)
|
|
{
|
|
u8 r = _SHIFTR(renderdata->envcolour, 24, 8);
|
|
u8 g = _SHIFTR(renderdata->envcolour, 16, 8);
|
|
u8 b = _SHIFTR(renderdata->envcolour, 8, 8);
|
|
u8 a = _SHIFTR(renderdata->envcolour, 0, 8);
|
|
|
|
gDPPipeSync(renderdata->gdl++);
|
|
gDPSetCycleType(renderdata->gdl++, G_CYC_2CYCLE);
|
|
gDPSetFogColor(renderdata->gdl++, r, g, b, a);
|
|
|
|
gDPSetCombineMode(renderdata->gdl++, G_CC_TRILERP, G_CC_MODULATEIA2);
|
|
|
|
if (renderdata->zbufferenabled)
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_ZB_OPA_SURF2);
|
|
}
|
|
else
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_OPA_SURF2);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (renderdata->zbufferenabled)
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_ZB_XLU_SURF2);
|
|
}
|
|
else
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_XLU_SURF2);
|
|
}
|
|
}
|
|
}
|
|
else if (renderdata->unk30 == 5)
|
|
{
|
|
u8 r, g, b, a;
|
|
if (arg1)
|
|
{
|
|
gDPPipeSync(renderdata->gdl++);
|
|
gDPSetCycleType(renderdata->gdl++, G_CYC_2CYCLE);
|
|
|
|
r = _SHIFTR(renderdata->fogcolour, 24, 8);
|
|
g = _SHIFTR(renderdata->fogcolour, 16, 8);
|
|
b = _SHIFTR(renderdata->fogcolour, 8, 8);
|
|
a = _SHIFTR(renderdata->fogcolour, 0, 8);
|
|
gDPSetFogColor(renderdata->gdl++, r, g, b, a);
|
|
|
|
a = renderdata->envcolour & 0xFF;
|
|
|
|
if (a < 255)
|
|
{
|
|
gDPSetEnvColor(renderdata->gdl++, 0xFF, 0xFF, 0xFF, a);
|
|
|
|
if (renderdata->envcolour & 0xFF00)
|
|
{
|
|
gDPSetCombineLERP(renderdata->gdl++, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, 1, SHADE, ENVIRONMENT, 0, COMBINED, 0, SHADE, 0, COMBINED, 0, SHADE, 0);
|
|
}
|
|
else
|
|
{
|
|
gDPSetCombineLERP(renderdata->gdl++, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, 1, 0, ENVIRONMENT, 0, COMBINED, 0, SHADE, 0, COMBINED, 0, SHADE, 0);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
gDPSetCombineMode(renderdata->gdl++, G_CC_TRILERP, G_CC_MODULATEIA2);
|
|
}
|
|
|
|
if (renderdata->zbufferenabled)
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_ZB_XLU_SURF2);
|
|
}
|
|
else
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_XLU_SURF2);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
a = renderdata->envcolour & 0xFF;
|
|
|
|
if (a < 255)
|
|
{
|
|
gDPSetCombineLERP(renderdata->gdl++, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, TEXEL0, 0, ENVIRONMENT, 0, COMBINED, 0, SHADE, 0, COMBINED, 0, SHADE, 0);
|
|
}
|
|
else
|
|
{
|
|
gDPSetCombineMode(renderdata->gdl++, G_CC_TRILERP, G_CC_MODULATEIA2);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (arg1)
|
|
{
|
|
gDPPipeSync(renderdata->gdl++);
|
|
gDPSetCycleType(renderdata->gdl++, G_CYC_2CYCLE);
|
|
gDPSetCombineMode(renderdata->gdl++, G_CC_TRILERP, G_CC_MODULATEIA2);
|
|
|
|
if (renderdata->zbufferenabled)
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_PASS, G_RM_AA_ZB_OPA_SURF2);
|
|
}
|
|
else
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_PASS, G_RM_AA_OPA_SURF2);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (renderdata->zbufferenabled)
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_PASS, G_RM_AA_ZB_XLU_SURF2);
|
|
}
|
|
else
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_PASS, G_RM_AA_XLU_SURF2);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void modelApplyRenderModeType4(ModelRenderData *renderdata, bool arg1)
|
|
{
|
|
if (renderdata->unk30 == 7)
|
|
{
|
|
u8 r, g, b, a;
|
|
gDPPipeSync(renderdata->gdl++);
|
|
gDPSetCycleType(renderdata->gdl++, G_CYC_2CYCLE);
|
|
|
|
r = _SHIFTR(renderdata->fogcolour, 24, 8);
|
|
g = _SHIFTR(renderdata->fogcolour, 16, 8);
|
|
b = _SHIFTR(renderdata->fogcolour, 8, 8);
|
|
a = _SHIFTR(renderdata->fogcolour, 0, 8);
|
|
gDPSetFogColor(renderdata->gdl++, r, g, b, a);
|
|
|
|
r = _SHIFTR(renderdata->envcolour, 24, 8);
|
|
g = _SHIFTR(renderdata->envcolour, 16, 8);
|
|
b = _SHIFTR(renderdata->envcolour, 8, 8);
|
|
a = 0xFF;
|
|
gDPSetEnvColor(renderdata->gdl++, r, g, b, a);
|
|
|
|
gDPSetCombineLERP(renderdata->gdl++, TEXEL0, ENVIRONMENT, SHADE_ALPHA, ENVIRONMENT, TEXEL0, ENVIRONMENT, SHADE, ENVIRONMENT, COMBINED, 0, SHADE, 0, 0, 0, 0, COMBINED);
|
|
|
|
if (arg1)
|
|
{
|
|
if (renderdata->zbufferenabled)
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_ZB_OPA_SURF2);
|
|
}
|
|
else
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_OPA_SURF2);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (renderdata->zbufferenabled)
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_ZB_XLU_SURF2);
|
|
}
|
|
else
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_XLU_SURF2);
|
|
}
|
|
}
|
|
}
|
|
else if (renderdata->unk30 == 8)
|
|
{
|
|
u8 r, g, b, a;
|
|
gDPPipeSync(renderdata->gdl++);
|
|
gDPSetCycleType(renderdata->gdl++, G_CYC_2CYCLE);
|
|
|
|
r = _SHIFTR(renderdata->fogcolour, 24, 8);
|
|
g = _SHIFTR(renderdata->fogcolour, 16, 8);
|
|
b = _SHIFTR(renderdata->fogcolour, 8, 8);
|
|
a = _SHIFTR(renderdata->fogcolour, 0, 8);
|
|
gDPSetFogColor(renderdata->gdl++, r, g, b, a);
|
|
|
|
r = _SHIFTR(renderdata->envcolour, 24, 8);
|
|
g = _SHIFTR(renderdata->envcolour, 16, 8);
|
|
b = _SHIFTR(renderdata->envcolour, 8, 8);
|
|
a = _SHIFTR(renderdata->envcolour, 0, 8);
|
|
gDPSetEnvColor(renderdata->gdl++, r, g, b, a);
|
|
|
|
gDPSetCombineLERP(renderdata->gdl++, TEXEL0, ENVIRONMENT, SHADE_ALPHA, ENVIRONMENT, TEXEL0, 0, ENVIRONMENT, 0, COMBINED, 0, SHADE, 0, 0, 0, 0, COMBINED);
|
|
|
|
if (renderdata->zbufferenabled)
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_ZB_XLU_SURF2);
|
|
}
|
|
else
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_XLU_SURF2);
|
|
}
|
|
}
|
|
else if (renderdata->unk30 == 9)
|
|
{
|
|
if ((renderdata->envcolour & 0xFF) == 0)
|
|
{
|
|
u8 r = _SHIFTR(renderdata->fogcolour, 24, 8);
|
|
u8 g = _SHIFTR(renderdata->fogcolour, 16, 8);
|
|
u8 b = _SHIFTR(renderdata->fogcolour, 8, 8);
|
|
u8 a = _SHIFTR(renderdata->fogcolour, 0, 8);
|
|
|
|
gDPPipeSync(renderdata->gdl++);
|
|
gDPSetCycleType(renderdata->gdl++, G_CYC_2CYCLE);
|
|
gDPSetFogColor(renderdata->gdl++, r, g, b, a);
|
|
gDPSetEnvColor(renderdata->gdl++, 0xFF, 0xFF, 0xFF, 0xFF);
|
|
gDPSetPrimColor(renderdata->gdl++, 0, 0, 0, 0, 0, (renderdata->envcolour >> 8) & 0xFF);
|
|
|
|
if (arg1)
|
|
{
|
|
gDPSetCombineLERP(renderdata->gdl++, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, COMBINED, 0, SHADE, 0, COMBINED, 0, SHADE, PRIMITIVE);
|
|
|
|
if (renderdata->zbufferenabled)
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_ZB_OPA_SURF2);
|
|
}
|
|
else
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_OPA_SURF2);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
gDPSetCombineLERP(renderdata->gdl++, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, COMBINED, 0, SHADE, 0, COMBINED, 0, SHADE, PRIMITIVE);
|
|
|
|
if (renderdata->zbufferenabled)
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_ZB_XLU_SURF2);
|
|
}
|
|
else
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_XLU_SURF2);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
u8 r = _SHIFTR(renderdata->fogcolour, 24, 8);
|
|
u8 g = _SHIFTR(renderdata->fogcolour, 16, 8);
|
|
u8 b = _SHIFTR(renderdata->fogcolour, 8, 8);
|
|
u8 a = _SHIFTR(renderdata->fogcolour, 0, 8);
|
|
|
|
gDPPipeSync(renderdata->gdl++);
|
|
gDPSetCycleType(renderdata->gdl++, G_CYC_2CYCLE);
|
|
gDPSetFogColor(renderdata->gdl++, r, g, b, a);
|
|
gDPSetEnvColor(renderdata->gdl++, 0, 0, 0, renderdata->envcolour & 0xFF);
|
|
|
|
if (arg1)
|
|
{
|
|
gDPSetCombineLERP(renderdata->gdl++, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, 1, 0, SHADE, ENVIRONMENT, COMBINED, 0, SHADE, 0, 0, 0, 0, COMBINED);
|
|
|
|
if (renderdata->zbufferenabled)
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_ZB_TEX_EDGE2);
|
|
}
|
|
else
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_TEX_EDGE2);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
gDPSetPrimColor(renderdata->gdl++, 0, 0, 0, 0, 0, (renderdata->envcolour >> 8) & 0xFF);
|
|
gDPSetCombineLERP(renderdata->gdl++, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, SHADE, ENVIRONMENT, TEXEL0, 0, COMBINED, 0, SHADE, 0, 1, 0, PRIMITIVE, COMBINED);
|
|
|
|
if (renderdata->zbufferenabled)
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_ZB_TEX_EDGE2);
|
|
}
|
|
else
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_TEX_EDGE2);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if (renderdata->unk30 == 4)
|
|
{
|
|
u8 r = _SHIFTR(renderdata->envcolour, 24, 8);
|
|
u8 g = _SHIFTR(renderdata->envcolour, 16, 8);
|
|
u8 b = _SHIFTR(renderdata->envcolour, 8, 8);
|
|
u8 a = _SHIFTR(renderdata->envcolour, 0, 8);
|
|
|
|
gDPPipeSync(renderdata->gdl++);
|
|
gDPSetCycleType(renderdata->gdl++, G_CYC_2CYCLE);
|
|
gDPSetFogColor(renderdata->gdl++, r, g, b, a);
|
|
|
|
gDPSetCombineMode(renderdata->gdl++, G_CC_TRILERP, G_CC_MODULATEIA2);
|
|
|
|
if (arg1)
|
|
{
|
|
if (renderdata->zbufferenabled)
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_ZB_OPA_SURF2);
|
|
}
|
|
else
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_OPA_SURF2);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (renderdata->zbufferenabled)
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_ZB_XLU_SURF2);
|
|
}
|
|
else
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_XLU_SURF2);
|
|
}
|
|
}
|
|
}
|
|
else if (renderdata->unk30 == 5)
|
|
{
|
|
u8 r, g, b, a;
|
|
|
|
gDPPipeSync(renderdata->gdl++);
|
|
gDPSetCycleType(renderdata->gdl++, G_CYC_2CYCLE);
|
|
|
|
r = _SHIFTR(renderdata->fogcolour, 24, 8);
|
|
g = _SHIFTR(renderdata->fogcolour, 16, 8);
|
|
b = _SHIFTR(renderdata->fogcolour, 8, 8);
|
|
a = _SHIFTR(renderdata->fogcolour, 0, 8);
|
|
gDPSetFogColor(renderdata->gdl++, r, g, b, a);
|
|
|
|
a = renderdata->envcolour & 0xFF;
|
|
|
|
if (a < 255)
|
|
{
|
|
gDPSetEnvColor(renderdata->gdl++, 0xFF, 0xFF, 0xFF, a);
|
|
|
|
if (arg1)
|
|
{
|
|
if (renderdata->envcolour & 0xFF00)
|
|
{
|
|
gDPSetCombineLERP(renderdata->gdl++, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, 1, SHADE, ENVIRONMENT, 0, COMBINED, 0, SHADE, 0, COMBINED, 0, SHADE, 0);
|
|
}
|
|
else
|
|
{
|
|
gDPSetCombineLERP(renderdata->gdl++, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, 1, 0, ENVIRONMENT, 0, COMBINED, 0, SHADE, 0, COMBINED, 0, SHADE, 0);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
gDPSetCombineLERP(renderdata->gdl++, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, TEXEL0, 0, ENVIRONMENT, 0, COMBINED, 0, SHADE, 0, COMBINED, 0, SHADE, 0);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
gDPSetCombineMode(renderdata->gdl++, G_CC_TRILERP, G_CC_MODULATEIA2);
|
|
}
|
|
|
|
if (renderdata->zbufferenabled)
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_ZB_XLU_SURF2);
|
|
}
|
|
else
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_XLU_SURF2);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
gDPPipeSync(renderdata->gdl++);
|
|
gDPSetCycleType(renderdata->gdl++, G_CYC_2CYCLE);
|
|
gDPSetFogColor(renderdata->gdl++, 0xFF, 0xFF, 0xFF, 0x00);
|
|
gDPSetCombineMode(renderdata->gdl++, G_CC_TRILERP, G_CC_MODULATEIA2);
|
|
|
|
if (arg1)
|
|
{
|
|
if (renderdata->zbufferenabled)
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_ZB_OPA_SURF2);
|
|
}
|
|
else
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_OPA_SURF2);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (renderdata->zbufferenabled)
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_ZB_XLU_SURF2);
|
|
}
|
|
else
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_XLU_SURF2);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void modelApplyRenderModeType2(ModelRenderData *renderdata)
|
|
{
|
|
gDPPipeSync(renderdata->gdl++);
|
|
gDPSetCycleType(renderdata->gdl++, G_CYC_2CYCLE);
|
|
|
|
if (renderdata->zbufferenabled)
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_PASS, G_RM_AA_ZB_OPA_SURF2);
|
|
}
|
|
else
|
|
{
|
|
gDPSetRenderMode(renderdata->gdl++, G_RM_PASS, G_RM_AA_OPA_SURF2);
|
|
}
|
|
|
|
gDPSetCombineMode(renderdata->gdl++, G_CC_TRILERP, G_CC_MODULATEIA2);
|
|
}
|
|
|
|
|
|
void modelApplyCullMode(ModelRenderData *renderdata)
|
|
{
|
|
if (renderdata->cullmode == CULLMODE_NONE)
|
|
{
|
|
gSPClearGeometryMode(renderdata->gdl++, G_CULL_BOTH);
|
|
}
|
|
else if (renderdata->cullmode == CULLMODE_FRONT)
|
|
{
|
|
gSPSetGeometryMode(renderdata->gdl++, G_CULL_FRONT);
|
|
}
|
|
else if (renderdata->cullmode == CULLMODE_BACK)
|
|
{
|
|
gSPSetGeometryMode(renderdata->gdl++, G_CULL_BACK);
|
|
}
|
|
}
|
|
|
|
|
|
void modelRenderNodeGundl(ModelRenderData* renderdata, ModelNode* arg1)
|
|
{
|
|
ModelRoData_DisplayListRecord* rodata = &arg1->Data->DisplayList;
|
|
|
|
if (renderdata->unk18 == 0)
|
|
{
|
|
if ((renderdata->flags & 1) && rodata->Primary)
|
|
{
|
|
gSPSegment(renderdata->gdl++, SPSEGMENT_MODEL_COL1, osVirtualToPhysical(rodata->BaseAddr));
|
|
|
|
if (renderdata->cullmode)
|
|
{
|
|
modelApplyCullMode(renderdata);
|
|
}
|
|
|
|
if (rodata->ModelType == 1)
|
|
{
|
|
modelApplyRenderModeType1(renderdata);
|
|
}
|
|
else if (rodata->ModelType == 3)
|
|
{
|
|
modelApplyRenderModeType3(renderdata, 1);
|
|
}
|
|
else if (rodata->ModelType == 4)
|
|
{
|
|
modelApplyRenderModeType4(renderdata, 1);
|
|
}
|
|
else if (rodata->ModelType == 2)
|
|
{
|
|
modelApplyRenderModeType2(renderdata);
|
|
}
|
|
|
|
gSPDisplayList(renderdata->gdl++, rodata->Primary);
|
|
|
|
if ((rodata->ModelType == 3) && rodata->Secondary)
|
|
{
|
|
modelApplyRenderModeType3(renderdata, 0);
|
|
gSPDisplayList(renderdata->gdl++, rodata->Secondary);
|
|
}
|
|
}
|
|
|
|
if ((renderdata->flags & 2) && rodata->Primary && (rodata->ModelType == 4) && rodata->Secondary)
|
|
{
|
|
gSPSegment(renderdata->gdl++, SPSEGMENT_MODEL_COL1, osVirtualToPhysical(rodata->BaseAddr));
|
|
|
|
if (renderdata->cullmode)
|
|
{
|
|
modelApplyCullMode(renderdata);
|
|
}
|
|
|
|
modelApplyRenderModeType4(renderdata, 0);
|
|
gSPDisplayList(renderdata->gdl++, rodata->Secondary);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void modelRenderNodeDl(ModelRenderData *renderdata, Model *model, ModelNode *node)
|
|
{
|
|
union ModelRoData *rodata = node->Data;
|
|
|
|
if (!renderdata->unk18)
|
|
{
|
|
if (renderdata->flags & 1)
|
|
{
|
|
union ModelRwData *rwdata = modelGetNodeRwData(model, node);
|
|
|
|
if (rwdata->DisplayListCollisions.gdl)
|
|
{
|
|
gSPSegment(renderdata->gdl++, SPSEGMENT_MODEL_COL1, osVirtualToPhysical(rodata->DisplayListCollisions.BaseAddr));
|
|
|
|
if (renderdata->cullmode)
|
|
{
|
|
modelApplyCullMode(renderdata);
|
|
}
|
|
|
|
if (rodata->DisplayListCollisions.ModelType == 1)
|
|
{
|
|
modelApplyRenderModeType1(renderdata);
|
|
}
|
|
else if (rodata->DisplayListCollisions.ModelType == 3)
|
|
{
|
|
modelApplyRenderModeType3(renderdata, TRUE);
|
|
}
|
|
else if (rodata->DisplayListCollisions.ModelType == 4)
|
|
{
|
|
modelApplyRenderModeType4(renderdata, TRUE);
|
|
}
|
|
else if (rodata->DisplayListCollisions.ModelType == 2)
|
|
{
|
|
modelApplyRenderModeType2(renderdata);
|
|
}
|
|
|
|
gSPSegment(renderdata->gdl++, SPSEGMENT_MODEL_VTX, osVirtualToPhysical(rwdata->DisplayListCollisions.Vertices));
|
|
|
|
gSPDisplayList(renderdata->gdl++, rwdata->DisplayListCollisions.gdl);
|
|
|
|
if (rodata->DisplayListCollisions.ModelType == 3 && rodata->DisplayListCollisions.Secondary)
|
|
{
|
|
modelApplyRenderModeType3(renderdata, FALSE);
|
|
gSPDisplayList(renderdata->gdl++, rodata->DisplayListCollisions.Secondary);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (renderdata->flags & 2)
|
|
{
|
|
union ModelRwData *rwdata = modelGetNodeRwData(model, node);
|
|
|
|
if (rwdata->DisplayListCollisions.gdl && rodata->DisplayListCollisions.ModelType == 4 && rodata->DisplayListCollisions.Secondary)
|
|
{
|
|
gSPSegment(renderdata->gdl++, SPSEGMENT_MODEL_COL1, osVirtualToPhysical(rodata->DisplayListCollisions.BaseAddr));
|
|
|
|
if (renderdata->cullmode)
|
|
{
|
|
modelApplyCullMode(renderdata);
|
|
}
|
|
|
|
gSPSegment(renderdata->gdl++, SPSEGMENT_MODEL_VTX, osVirtualToPhysical(rwdata->DisplayListCollisions.Vertices));
|
|
|
|
modelApplyRenderModeType4(renderdata, FALSE);
|
|
|
|
gSPDisplayList(renderdata->gdl++, rodata->DisplayListCollisions.Secondary);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void sub_GAME_7F072C10(ModelRenderData *param_1, struct Model *param_2, struct ModelNode *param_3)
|
|
{
|
|
return;
|
|
}
|
|
|
|
|
|
/**
|
|
* Star gunfire is a muzzle flash in a first person perspective, where the
|
|
* muzzle flash has 3 or 4 "arms" that flare out from the main body.
|
|
*
|
|
* This function reads vertices from the model definition, tweaks them randomly,
|
|
* writes them to a newly allocated vertices table and queues the node's
|
|
* displaylist to the renderdata's DL.
|
|
*/
|
|
void dorottex(ModelRenderData *renderdata, ModelNode *node)
|
|
{
|
|
if (renderdata->unk18 == 0 && (renderdata->flags & 2))
|
|
{
|
|
|
|
ModelRoData_DisplayListPrimaryRecord *rodata = &node->Data->DisplayListPrimary;
|
|
s32 i;
|
|
|
|
if (rodata->Primary)
|
|
{
|
|
Vertex *src;
|
|
Vertex *dst;
|
|
|
|
src = (Vertex *) rodata->Vertices;
|
|
|
|
#ifndef VERSION_EU
|
|
if (vtxallocator != NULL)
|
|
{
|
|
}
|
|
else
|
|
{
|
|
osSyncPrintf("dorottex: no vtx allocator!\n");
|
|
return_null();
|
|
}
|
|
#endif
|
|
dst = vtxallocator(rodata->numVertices * 4);
|
|
|
|
gSPSegment(renderdata->gdl++, SPSEGMENT_MODEL_VTX, osVirtualToPhysical(dst));
|
|
gSPSegment(renderdata->gdl++, SPSEGMENT_MODEL_COL1, osVirtualToPhysical(rodata->BaseAddr));
|
|
|
|
gDPSetFogColor(renderdata->gdl++, 0x00, 0x00, 0x00, 0x00);
|
|
gSPDisplayList(renderdata->gdl++, rodata->Primary);
|
|
|
|
for (i = 0; i < rodata->numVertices; i++)
|
|
{
|
|
u16 rand1 = (randomGetNext() << 10) & 0xffff;
|
|
s32 s4 = ((coss(rand1) << 5) * 181) >> 18;
|
|
s32 s3 = ((sins(rand1) << 5) * 181) >> 18;
|
|
s32 s1 = (u32)randomGetNext() >> 31;
|
|
s32 mult = 0x10000 - (randomGetNext() & 0x3fff);
|
|
s32 corner1 = 0x200 + s3;
|
|
s32 corner2 = 0x200 - s3;
|
|
s32 corner3 = 0x200 - s4;
|
|
s32 corner4 = 0x200 + s4;
|
|
|
|
dst[0] = src[0];
|
|
dst[1] = src[1];
|
|
dst[2] = src[2];
|
|
dst[3] = src[3];
|
|
|
|
dst[0].s = corner3;
|
|
dst[0].t = corner2;
|
|
dst[0].coord.x = (src[(s1 + 0) % 4].coord.x * mult) >> 16;
|
|
dst[0].coord.y = (src[(s1 + 0) % 4].coord.y * mult) >> 16;
|
|
dst[0].coord.z = (src[(s1 + 0) % 4].coord.z * mult) >> 16;
|
|
|
|
dst[1].s = corner1;
|
|
dst[1].t = corner3;
|
|
dst[1].coord.x = (src[(s1 + 1) % 4].coord.x * mult) >> 16;
|
|
dst[1].coord.y = (src[(s1 + 1) % 4].coord.y * mult) >> 16;
|
|
dst[1].coord.z = (src[(s1 + 1) % 4].coord.z * mult) >> 16;
|
|
|
|
dst[2].s = corner4;
|
|
dst[2].t = corner1;
|
|
dst[2].coord.x = (src[(s1 + 2) % 4].coord.x * mult) >> 16;
|
|
dst[2].coord.y = (src[(s1 + 2) % 4].coord.y * mult) >> 16;
|
|
dst[2].coord.z = (src[(s1 + 2) % 4].coord.z * mult) >> 16;
|
|
|
|
dst[3].s = corner2;
|
|
dst[3].t = corner4;
|
|
dst[3].coord.x = (src[(s1 + 3) % 4].coord.x * mult) >> 16;
|
|
dst[3].coord.y = (src[(s1 + 3) % 4].coord.y * mult) >> 16;
|
|
dst[3].coord.z = (src[(s1 + 3) % 4].coord.z * mult) >> 16;
|
|
|
|
src += 4;
|
|
dst += 4;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void sub_GAME_7F073038(ModelRenderData *renderdata, struct sImageTableEntry *tconfig, s32 arg2)
|
|
{
|
|
likely_generate_DL_for_image_declaration(&renderdata->gdl, tconfig, arg2, renderdata->zbufferenabled, 2);
|
|
}
|
|
|
|
|
|
void sub_GAME_7F07306C(s32 param_1,struct Model *param_2,struct ModelNode *param_3)
|
|
{
|
|
return;
|
|
}
|
|
|
|
|
|
void dotube(ModelRenderData* renderdata, Model* model, ModelNode* node)
|
|
{
|
|
s32 rw_index_sel;
|
|
s32 rw_index_sel2;
|
|
s32 c_entry_count;
|
|
struct ModelRoData_Op07Record *rodata2;
|
|
s32 c_entry2_count;
|
|
s32 c_entry_index;
|
|
s32 renderpos_index;
|
|
ModelNode *node_from_07;
|
|
struct ModelRoData_Child *c_entry2;
|
|
Vertex *vtx2;
|
|
u8 *entry2_04;
|
|
s32 unused1;
|
|
bool swap_order;
|
|
struct ModelRoData_Op07Record *rodata;
|
|
struct ModelRoData_Child *c_entry;
|
|
struct ModelRwData_Op07Record *rwdata;
|
|
Vertex *vtx_10;
|
|
Vertex *vtx_10_2;
|
|
RenderPosView *render_pos2;
|
|
RenderPosView *render_pos;
|
|
s32 rw_index2;
|
|
s32 rw_index;
|
|
Vertex *vtx1;
|
|
struct ModelRwData_Op07Record *rwdata2;
|
|
u8 *entry_04;
|
|
s32 unused2;
|
|
s32 renderpos_index2;
|
|
s32 unused3;
|
|
|
|
rodata = &node->Data->Op07;
|
|
rwdata = &modelGetNodeRwData(model, node)->Op07;
|
|
|
|
if (rodata->unk00 != NULL)
|
|
{
|
|
node_from_07 = rodata->unk00;
|
|
}
|
|
else
|
|
{
|
|
node_from_07 = rodata->unk04;
|
|
}
|
|
|
|
rodata2 = &node_from_07->Data->Op07;
|
|
rwdata2 = &modelGetNodeRwData(model, node_from_07)->Op07;
|
|
swap_order = 1;
|
|
|
|
if (renderdata->flags & 1)
|
|
{
|
|
renderpos_index2 = modelFindNodeMtxIndex(node, 0);
|
|
render_pos2 = &model->render_pos[renderpos_index2];
|
|
rw_index = rwdata->index;
|
|
rw_index2 = rwdata2->index;
|
|
c_entry = &rodata->Children[rw_index];
|
|
|
|
if (rodata->unk00 != NULL)
|
|
{
|
|
rw_index_sel = rw_index2;
|
|
rw_index_sel2 = rw_index;
|
|
renderpos_index = modelFindNodeMtxIndex(node, 0x200);
|
|
}
|
|
else
|
|
{
|
|
rw_index_sel = rw_index;
|
|
rw_index_sel2 = rw_index2;
|
|
renderpos_index = modelFindNodeMtxIndex(rodata->unk04, 0x200);
|
|
}
|
|
|
|
render_pos = &model->render_pos[renderpos_index];
|
|
|
|
c_entry_index = ((rw_index_sel2 - rw_index_sel) + rodata->NumChildren) % rodata->NumChildren;
|
|
|
|
if ((c_entry_index >= 2) && (c_entry_index < 7))
|
|
{
|
|
if (c_entry_index < 4)
|
|
{
|
|
c_entry_index = ((c_entry_index / 2) + rw_index_sel + rodata->NumChildren) % rodata->NumChildren;
|
|
}
|
|
else
|
|
{
|
|
c_entry_index = ((rw_index_sel - ((8 - c_entry_index) / 2)) + rodata->NumChildren) % rodata->NumChildren;
|
|
swap_order = 0;
|
|
}
|
|
}
|
|
else if ((c_entry_index >= 0xA) && (c_entry_index < 0xF))
|
|
{
|
|
if (c_entry_index >= 0xD)
|
|
{
|
|
c_entry_index = ((rw_index_sel - ((0x10 - c_entry_index) / 2)) + rodata->NumChildren) % rodata->NumChildren;
|
|
}
|
|
else
|
|
{
|
|
c_entry_index = (((c_entry_index - 8) / 2) + rw_index_sel + rodata->NumChildren) % rodata->NumChildren;
|
|
swap_order = 0;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if ((c_entry_index >= 7) && (c_entry_index < 0xA))
|
|
{
|
|
swap_order = 0;
|
|
}
|
|
c_entry_index = rw_index_sel;
|
|
}
|
|
|
|
entry_04 = c_entry->unk04;
|
|
|
|
gSPSegment(renderdata->gdl++, SPSEGMENT_MODEL_COL1, osVirtualToPhysical(rodata->BaseAddr));
|
|
|
|
for (c_entry_count = c_entry->NumEntries; c_entry_count > 0; c_entry_count--)
|
|
{
|
|
switch (*entry_04)
|
|
{
|
|
case MODELNODE_CHILD_VTX:
|
|
{
|
|
struct ModelRoData_Child_Vtx* child_vtx = ((struct ModelRoData_Child_Vtx*)entry_04);
|
|
#if defined(LEFTOVERDEBUG)
|
|
if (vtxallocator == NULL)
|
|
{
|
|
osSyncPrintf("dotube: no vtx allocator!\n");
|
|
return_null();
|
|
}
|
|
#endif
|
|
vtx1 = vtxallocator(2);
|
|
vtx2 = &vtx1[1];
|
|
|
|
*vtx1 = rodata->Vertices[child_vtx->VtxIndex];
|
|
*vtx2 = rodata->Vertices[child_vtx->VtxIndex+1];
|
|
|
|
if (rodata->unk04 != NULL)
|
|
{
|
|
c_entry2 = &rodata->Children[c_entry_index];
|
|
entry2_04 = c_entry2->unk04;
|
|
|
|
for (c_entry2_count = c_entry2->NumEntries; c_entry2_count > 0; c_entry2_count--)
|
|
{
|
|
struct ModelRoData_Child_Vtx* entry2_04_child = ((struct ModelRoData_Child_Vtx*)entry2_04);
|
|
if (entry2_04_child->Type == (u8) 1) {
|
|
vtx_10 = &rodata->Vertices[entry2_04_child->VtxIndex];
|
|
vtx_10_2 = vtx_10+1;
|
|
|
|
vtx1->coord.AsArray[0] = vtx_10->coord.AsArray[0];
|
|
vtx1->coord.AsArray[1] = vtx_10->coord.AsArray[1];
|
|
vtx1->coord.AsArray[2] = vtx_10->coord.AsArray[2];
|
|
|
|
vtx2->coord.AsArray[0] = vtx_10_2->coord.AsArray[0];
|
|
vtx2->coord.AsArray[1] = vtx_10_2->coord.AsArray[1];
|
|
vtx2->coord.AsArray[2] = vtx_10_2->coord.AsArray[2];
|
|
break;
|
|
}
|
|
|
|
switch (*entry2_04)
|
|
{
|
|
case MODELNODE_CHILD_VTX:
|
|
entry2_04 += sizeof(struct ModelRoData_Child_Vtx);
|
|
break;
|
|
case MODELNODE_CHILD_IMAGE:
|
|
entry2_04 += sizeof(struct ModelRoData_Child_Image);
|
|
break;
|
|
case MODELNODE_CHILD_TRI:
|
|
entry2_04 += sizeof(struct ModelRoData_Child_Tri);
|
|
break;
|
|
}
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
c_entry2 = &rodata2->Children[c_entry_index];
|
|
entry2_04 = c_entry2->unk04;
|
|
|
|
for (c_entry2_count = c_entry2->NumEntries; c_entry2_count > 0; c_entry2_count--)
|
|
{
|
|
struct ModelRoData_Child_Vtx* entry2_04_child = ((struct ModelRoData_Child_Vtx*)entry2_04);
|
|
if (entry2_04_child->Type == (u8) 1)
|
|
{
|
|
vtx_10 = &rodata2->Vertices[entry2_04_child->VtxIndex];
|
|
vtx_10_2 = vtx_10 + 1;
|
|
if (swap_order != 0)
|
|
{
|
|
#if defined(LEFTOVERDEBUG)
|
|
if (vtx_10->coord.AsArray);
|
|
#endif
|
|
vtx1->coord.AsArray[0] = vtx_10_2->coord.AsArray[0];
|
|
vtx1->coord.AsArray[1] = vtx_10_2->coord.AsArray[1];
|
|
vtx1->coord.AsArray[2] = vtx_10_2->coord.AsArray[2];
|
|
|
|
vtx2->coord.AsArray[0] = vtx_10->coord.AsArray[0];
|
|
vtx2->coord.AsArray[1] = vtx_10->coord.AsArray[1];
|
|
vtx2->coord.AsArray[2] = vtx_10->coord.AsArray[2];
|
|
}
|
|
else
|
|
{
|
|
vtx1->coord.AsArray[0] = vtx_10->coord.AsArray[0];
|
|
vtx1->coord.AsArray[1] = vtx_10->coord.AsArray[1];
|
|
vtx1->coord.AsArray[2] = vtx_10->coord.AsArray[2];
|
|
|
|
vtx2->coord.AsArray[0] = vtx_10_2->coord.AsArray[0];
|
|
vtx2->coord.AsArray[1] = vtx_10_2->coord.AsArray[1];
|
|
vtx2->coord.AsArray[2] = vtx_10_2->coord.AsArray[2];
|
|
}
|
|
break;
|
|
}
|
|
|
|
switch (*entry2_04)
|
|
{
|
|
case MODELNODE_CHILD_VTX:
|
|
entry2_04 += sizeof(struct ModelRoData_Child_Vtx);
|
|
break;
|
|
|
|
case MODELNODE_CHILD_IMAGE:
|
|
entry2_04 += sizeof(struct ModelRoData_Child_Image);
|
|
break;
|
|
|
|
case MODELNODE_CHILD_TRI:
|
|
entry2_04 += sizeof(struct ModelRoData_Child_Tri);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
gSPMatrix(renderdata->gdl++, osVirtualToPhysical(render_pos), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
|
gSPVertex(renderdata->gdl++, osVirtualToPhysical(vtx1), 2, 0);
|
|
gSPMatrix(renderdata->gdl++, osVirtualToPhysical(render_pos2), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
|
gSPVertex(renderdata->gdl++, osVirtualToPhysical(&rodata->Vertices[child_vtx->VtxIndex] + 2), (u32)(child_vtx->unk01 - 2), 2);
|
|
|
|
entry_04 += sizeof(struct ModelRoData_Child_Vtx);
|
|
|
|
break;
|
|
}
|
|
|
|
case MODELNODE_CHILD_IMAGE:
|
|
{
|
|
struct ModelRoData_Child_Image* child_image = (struct ModelRoData_Child_Image*)entry_04;
|
|
if (child_image->ImageIndex != 0xFF)
|
|
{
|
|
sub_GAME_7F073038(renderdata, &rodata->Images[child_image->ImageIndex], 1);
|
|
entry_04 += sizeof(struct ModelRoData_Child_Image);
|
|
}
|
|
else
|
|
{
|
|
sub_GAME_7F073038(renderdata, NULL, 1);
|
|
entry_04 += sizeof(struct ModelRoData_Child_Image);
|
|
}
|
|
break;
|
|
}
|
|
|
|
case MODELNODE_CHILD_TRI:
|
|
{
|
|
struct ModelRoData_Child_Tri* child_tri = (struct ModelRoData_Child_Tri*)entry_04;
|
|
gSP1Triangle(renderdata->gdl++, child_tri->VtxIndex1, child_tri->VtxIndex2, child_tri->VtxIndex3, 0);
|
|
entry_04 += sizeof(struct ModelRoData_Child_Tri);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void sub_GAME_7F0737EC(s32 param_1,struct Model *param_2, struct ModelNode *param_3)
|
|
{
|
|
return;
|
|
}
|
|
|
|
|
|
void sub_GAME_7F0737FC(s32 param_1,struct Model *param_2,struct ModelNode *param_3)
|
|
{
|
|
return;
|
|
}
|
|
|
|
|
|
// PD: modelRenderNodeChrGunfire
|
|
void dogfnegx(ModelRenderData *renderdata, Model *model, ModelNode *node)
|
|
{
|
|
u32 unused[3];
|
|
f32 negspc0;
|
|
ModelRoData_GunfireRecord *rodata = &node->Data->Gunfire;
|
|
union ModelRwData *rwdata = modelGetNodeRwData(model, node);
|
|
sImageTableEntry *tconfig;
|
|
f32 spf0;
|
|
f32 spec;
|
|
coord3d spe0;
|
|
f32 spdc;
|
|
f32 spd8;
|
|
f32 spd4;
|
|
f32 spd0;
|
|
f32 spcc;
|
|
f32 spc8;
|
|
f32 spc4;
|
|
f32 spc0;
|
|
f32 spbc;
|
|
f32 negspcc;
|
|
f32 negspc8;
|
|
f32 scale;
|
|
Mtxf *mtx;
|
|
f32 tmp;
|
|
coord3d sp9c;
|
|
coord3d sp90;
|
|
Vertex vtxtemplate = D_800363E0;
|
|
Vertex *vertices;
|
|
f32 distance;
|
|
|
|
if ((renderdata->flags & 2) && rwdata->Gunfire.visible)
|
|
{
|
|
s32 index = modelFindNodeMtxIndex(node, 0);
|
|
mtx = &model->render_pos[index].pos;
|
|
|
|
spe0.x = -(rodata->Offset.f[0] * mtx->m[0][0] + rodata->Offset.f[1] * mtx->m[1][0] + rodata->Offset.f[2] * mtx->m[2][0] + mtx->m[3][0]);
|
|
spe0.y = -(rodata->Offset.f[0] * mtx->m[0][1] + rodata->Offset.f[1] * mtx->m[1][1] + rodata->Offset.f[2] * mtx->m[2][1] + mtx->m[3][1]);
|
|
spe0.z = -(rodata->Offset.f[0] * mtx->m[0][2] + rodata->Offset.f[1] * mtx->m[1][2] + rodata->Offset.f[2] * mtx->m[2][2] + mtx->m[3][2]);
|
|
|
|
distance = sqrtf(spe0.f[0] * spe0.f[0] + spe0.f[1] * spe0.f[1] + spe0.f[2] * spe0.f[2]);
|
|
|
|
if (distance > 0)
|
|
{
|
|
f32 tmp = 1 / (model->scale * distance);
|
|
spe0.f[0] *= tmp;
|
|
spe0.f[1] *= tmp;
|
|
spe0.f[2] *= tmp;
|
|
}
|
|
else
|
|
{
|
|
spe0.f[0] = 0;
|
|
spe0.f[1] = 0;
|
|
spe0.f[2] = 1 / model->scale;
|
|
}
|
|
|
|
spec = acosf(spe0.f[0] * mtx->m[1][0] + spe0.f[1] * mtx->m[1][1] + spe0.f[2] * mtx->m[1][2]);
|
|
spf0 = acosf(-(spe0.f[0] * mtx->m[2][0] + spe0.f[1] * mtx->m[2][1] + spe0.f[2] * mtx->m[2][2]) / sinf(spec));
|
|
|
|
tmp = -(spe0.f[0] * mtx->m[0][0] + spe0.f[1] * mtx->m[0][1] + spe0.f[2] * mtx->m[0][2]);
|
|
|
|
if (tmp < 0)
|
|
{
|
|
spf0 = M_TAU_F - spf0;
|
|
}
|
|
|
|
spdc = cosf(spf0);
|
|
spd8 = sinf(spf0);
|
|
spd4 = cosf(spec);
|
|
spd0 = sinf(spec);
|
|
|
|
scale = 0.75f + (randomGetNext() % 128) * (1.0f / 256.0f); // 0.75 to 1.25
|
|
|
|
sp9c.f[0] = rodata->Size.f[0] * scale;
|
|
sp9c.f[1] = rodata->Size.f[1] * scale;
|
|
sp9c.f[2] = rodata->Size.f[2] * scale;
|
|
|
|
spcc = sp9c.f[0] * spdc * 0.5f;
|
|
spc8 = sp9c.f[2] * spd8 * 0.5f;
|
|
spc4 = sp9c.f[1] * spd0 * 0.5f;
|
|
|
|
spc0 = sp9c.f[0] * spd4 * spd8 * 0.5f;
|
|
spbc = sp9c.f[2] * spd4 * spdc * 0.5f;
|
|
|
|
negspcc = -spcc;
|
|
negspc8 = -spc8;
|
|
negspc0 = -spc0;
|
|
|
|
sp90.f[0] = rodata->Offset.f[0] - sp9c.f[0] * 0.5f;
|
|
sp90.f[1] = rodata->Offset.f[1];
|
|
sp90.f[2] = rodata->Offset.f[2];
|
|
|
|
#if defined (LEFTOVERDEBUG)
|
|
if (vtxallocator == NULL) {
|
|
osSyncPrintf("dogfnegx: no vtx allocator!\n");
|
|
return_null();
|
|
}
|
|
#endif
|
|
|
|
vertices = vtxallocator(4);
|
|
|
|
vertices[0] = vtxtemplate;
|
|
vertices[1] = vtxtemplate;
|
|
vertices[2] = vtxtemplate;
|
|
vertices[3] = vtxtemplate;
|
|
|
|
vertices[0].coord.x = sp90.f[0] + negspcc + negspc0;
|
|
vertices[0].coord.y = sp90.f[1] - spc4;
|
|
vertices[0].coord.z = sp90.f[2] - negspc8 + -spbc;
|
|
vertices[1].coord.x = sp90.f[0] + negspcc - negspc0;
|
|
vertices[1].coord.y = sp90.f[1] + spc4;
|
|
vertices[1].coord.z = sp90.f[2] - negspc8 - -spbc;
|
|
vertices[2].coord.x = sp90.f[0] - negspcc - negspc0;
|
|
vertices[2].coord.y = sp90.f[1] + spc4;
|
|
vertices[2].coord.z = sp90.f[2] + negspc8 - -spbc;
|
|
vertices[3].coord.x = sp90.f[0] - negspcc + negspc0;
|
|
vertices[3].coord.y = sp90.f[1] - spc4;
|
|
vertices[3].coord.z = sp90.f[2] + negspc8 + -spbc;
|
|
|
|
gSPSegment(renderdata->gdl++, SPSEGMENT_MODEL_COL1, osVirtualToPhysical(rodata->BaseAddr));
|
|
|
|
if (rodata->Image)
|
|
{
|
|
s32 centre;
|
|
u16 sp62;
|
|
s32 sp5c;
|
|
s32 sp58;
|
|
|
|
tconfig = rodata->Image;
|
|
|
|
sp62 = (randomGetNext() * 1024) & 0xffff;
|
|
sp5c = (coss(sp62) * tconfig->width * 0xb5) >> 18;
|
|
sp58 = (sins(sp62) * tconfig->width * 0xb5) >> 18;
|
|
|
|
centre = tconfig->width << 4;
|
|
|
|
vertices[0].s = centre - sp5c;
|
|
vertices[0].t = centre - sp58;
|
|
vertices[1].s = centre + sp58;
|
|
vertices[1].t = centre - sp5c;
|
|
vertices[2].s = centre + sp5c;
|
|
vertices[2].t = centre + sp58;
|
|
vertices[3].s = centre - sp58;
|
|
vertices[3].t = centre + sp5c;
|
|
|
|
sub_GAME_7F073038(renderdata, tconfig, 4);
|
|
}
|
|
else
|
|
{
|
|
sub_GAME_7F073038(renderdata, NULL, 1);
|
|
}
|
|
|
|
gSPSetGeometryMode(renderdata->gdl++, G_CULL_BACK);
|
|
gSPMatrix(renderdata->gdl++, osVirtualToPhysical(mtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
|
gSPVertex(renderdata->gdl++, osVirtualToPhysical(vertices), 4, 0);
|
|
if (1);
|
|
gDPTri2(renderdata->gdl++, 0, 1, 2, 2, 3, 0);
|
|
}
|
|
}
|
|
|
|
|
|
void sub_GAME_7F073FC8(s32 arg0)
|
|
{
|
|
D_800363F0 = arg0;
|
|
}
|
|
|
|
|
|
|
|
#ifdef NONMATCHING
|
|
void doshadow(void) {
|
|
|
|
}
|
|
#else
|
|
#ifndef VERSION_EU
|
|
//D:80054A94
|
|
const char aDoshadowNoVtxAllocator[] = "doshadow: no vtx allocator!\n";
|
|
GLOBAL_ASM(
|
|
.text
|
|
glabel doshadow
|
|
/* 0A8B04 7F073FD4 3C038003 */ lui $v1, %hi(D_800363F0)
|
|
/* 0A8B08 7F073FD8 246363F0 */ addiu $v1, %lo(D_800363F0) # addiu $v1, $v1, 0x63f0
|
|
/* 0A8B0C 7F073FDC 8C6E0000 */ lw $t6, ($v1)
|
|
/* 0A8B10 7F073FE0 27BDFF88 */ addiu $sp, $sp, -0x78
|
|
/* 0A8B14 7F073FE4 AFB00018 */ sw $s0, 0x18($sp)
|
|
/* 0A8B18 7F073FE8 00808025 */ move $s0, $a0
|
|
/* 0A8B1C 7F073FEC AFBF001C */ sw $ra, 0x1c($sp)
|
|
/* 0A8B20 7F073FF0 AFA60080 */ sw $a2, 0x80($sp)
|
|
/* 0A8B24 7F073FF4 19C00142 */ blez $t6, .L7F074500
|
|
/* 0A8B28 7F073FF8 00A03825 */ move $a3, $a1
|
|
/* 0A8B2C 7F073FFC 3C198003 */ lui $t9, %hi(D_800363F8)
|
|
/* 0A8B30 7F074000 273963F8 */ addiu $t9, %lo(D_800363F8) # addiu $t9, $t9, 0x63f8
|
|
/* 0A8B34 7F074004 8F210000 */ lw $at, ($t9)
|
|
/* 0A8B38 7F074008 8F290004 */ lw $t1, 4($t9)
|
|
/* 0A8B3C 7F07400C 8CC60004 */ lw $a2, 4($a2)
|
|
/* 0A8B40 7F074010 27B80058 */ addiu $t8, $sp, 0x58
|
|
/* 0A8B44 7F074014 AF010000 */ sw $at, ($t8)
|
|
/* 0A8B48 7F074018 AF090004 */ sw $t1, 4($t8)
|
|
/* 0A8B4C 7F07401C 8F29000C */ lw $t1, 0xc($t9)
|
|
/* 0A8B50 7F074020 8F210008 */ lw $at, 8($t9)
|
|
/* 0A8B54 7F074024 00A02025 */ move $a0, $a1
|
|
/* 0A8B58 7F074028 AF09000C */ sw $t1, 0xc($t8)
|
|
/* 0A8B5C 7F07402C AF010008 */ sw $at, 8($t8)
|
|
/* 0A8B60 7F074030 8CC50014 */ lw $a1, 0x14($a2)
|
|
/* 0A8B64 7F074034 AFA7007C */ sw $a3, 0x7c($sp)
|
|
/* 0A8B68 7F074038 0FC1B1E7 */ jal modelGetNodeRwData
|
|
/* 0A8B6C 7F07403C AFA6006C */ sw $a2, 0x6c($sp)
|
|
/* 0A8B70 7F074040 8E0A0008 */ lw $t2, 8($s0)
|
|
/* 0A8B74 7F074044 8FA6006C */ lw $a2, 0x6c($sp)
|
|
/* 0A8B78 7F074048 C444000C */ lwc1 $f4, 0xc($v0)
|
|
/* 0A8B7C 7F07404C C4460004 */ lwc1 $f6, 4($v0)
|
|
/* 0A8B80 7F074050 3C038003 */ lui $v1, %hi(D_800363F0)
|
|
/* 0A8B84 7F074054 314B0002 */ andi $t3, $t2, 2
|
|
/* 0A8B88 7F074058 246363F0 */ addiu $v1, %lo(D_800363F0) # addiu $v1, $v1, 0x63f0
|
|
/* 0A8B8C 7F07405C 8FA7007C */ lw $a3, 0x7c($sp)
|
|
/* 0A8B90 7F074060 C4CC0008 */ lwc1 $f12, 8($a2)
|
|
/* 0A8B94 7F074064 C4CE000C */ lwc1 $f14, 0xc($a2)
|
|
/* 0A8B98 7F074068 11600125 */ beqz $t3, .L7F074500
|
|
/* 0A8B9C 7F07406C 46062081 */ sub.s $f2, $f4, $f6
|
|
/* 0A8BA0 7F074070 8E020030 */ lw $v0, 0x30($s0)
|
|
/* 0A8BA4 7F074074 24010003 */ li $at, 3
|
|
/* 0A8BA8 7F074078 00002825 */ move $a1, $zero
|
|
/* 0A8BAC 7F07407C 10410003 */ beq $v0, $at, .L7F07408C
|
|
/* 0A8BB0 7F074080 24010008 */ li $at, 8
|
|
/* 0A8BB4 7F074084 5441000F */ bnel $v0, $at, .L7F0740C4
|
|
/* 0A8BB8 7F074088 8C780000 */ lw $t8, ($v1)
|
|
.L7F07408C:
|
|
/* 0A8BBC 7F07408C 8E0C0034 */ lw $t4, 0x34($s0)
|
|
/* 0A8BC0 7F074090 8C6E0000 */ lw $t6, ($v1)
|
|
/* 0A8BC4 7F074094 240100FF */ li $at, 255
|
|
/* 0A8BC8 7F074098 318D00FF */ andi $t5, $t4, 0xff
|
|
/* 0A8BCC 7F07409C 01AE0019 */ multu $t5, $t6
|
|
/* 0A8BD0 7F0740A0 00001012 */ mflo $v0
|
|
/* 0A8BD4 7F0740A4 00000000 */ nop
|
|
/* 0A8BD8 7F0740A8 00000000 */ nop
|
|
/* 0A8BDC 7F0740AC 0041001B */ divu $zero, $v0, $at
|
|
/* 0A8BE0 7F0740B0 00004012 */ mflo $t0
|
|
/* 0A8BE4 7F0740B4 A3A80067 */ sb $t0, 0x67($sp)
|
|
/* 0A8BE8 7F0740B8 10000004 */ b .L7F0740CC
|
|
/* 0A8BEC 7F0740BC 8FA40080 */ lw $a0, 0x80($sp)
|
|
/* 0A8BF0 7F0740C0 8C780000 */ lw $t8, ($v1)
|
|
.L7F0740C4:
|
|
/* 0A8BF4 7F0740C4 A3B80067 */ sb $t8, 0x67($sp)
|
|
/* 0A8BF8 7F0740C8 8FA40080 */ lw $a0, 0x80($sp)
|
|
.L7F0740CC:
|
|
/* 0A8BFC 7F0740CC AFA6006C */ sw $a2, 0x6c($sp)
|
|
/* 0A8C00 7F0740D0 AFA7007C */ sw $a3, 0x7c($sp)
|
|
/* 0A8C04 7F0740D4 E7A20040 */ swc1 $f2, 0x40($sp)
|
|
/* 0A8C08 7F0740D8 E7AC0048 */ swc1 $f12, 0x48($sp)
|
|
/* 0A8C0C 7F0740DC 0FC1B15C */ jal modelFindNodeMtxIndex
|
|
/* 0A8C10 7F0740E0 E7AE0044 */ swc1 $f14, 0x44($sp)
|
|
/* 0A8C14 7F0740E4 8FA7007C */ lw $a3, 0x7c($sp)
|
|
/* 0A8C18 7F0740E8 00024980 */ sll $t1, $v0, 6
|
|
/* 0A8C1C 7F0740EC 8FA6006C */ lw $a2, 0x6c($sp)
|
|
/* 0A8C20 7F0740F0 8CF9000C */ lw $t9, 0xc($a3)
|
|
/* 0A8C24 7F0740F4 C7A20040 */ lwc1 $f2, 0x40($sp)
|
|
/* 0A8C28 7F0740F8 C7AC0048 */ lwc1 $f12, 0x48($sp)
|
|
/* 0A8C2C 7F0740FC 03295021 */ addu $t2, $t9, $t1
|
|
/* 0A8C30 7F074100 AFAA0070 */ sw $t2, 0x70($sp)
|
|
/* 0A8C34 7F074104 8E0B0004 */ lw $t3, 4($s0)
|
|
/* 0A8C38 7F074108 C7AE0044 */ lwc1 $f14, 0x44($sp)
|
|
/* 0A8C3C 7F07410C 3C014000 */ li $at, 0x40000000 # 2.000000
|
|
/* 0A8C40 7F074110 1160000B */ beqz $t3, .L7F074140
|
|
/* 0A8C44 7F074114 3C028003 */ lui $v0, %hi(vtxallocator)
|
|
/* 0A8C48 7F074118 44814000 */ mtc1 $at, $f8
|
|
/* 0A8C4C 7F07411C C4F20014 */ lwc1 $f18, 0x14($a3)
|
|
/* 0A8C50 7F074120 46024281 */ sub.s $f10, $f8, $f2
|
|
/* 0A8C54 7F074124 46125103 */ div.s $f4, $f10, $f18
|
|
/* 0A8C58 7F074128 4600218D */ trunc.w.s $f6, $f4
|
|
/* 0A8C5C 7F07412C 44033000 */ mfc1 $v1, $f6
|
|
/* 0A8C60 7F074130 00000000 */ nop
|
|
/* 0A8C64 7F074134 00036C00 */ sll $t5, $v1, 0x10
|
|
/* 0A8C68 7F074138 10000009 */ b .L7F074160
|
|
/* 0A8C6C 7F07413C 000D1C03 */ sra $v1, $t5, 0x10
|
|
.L7F074140:
|
|
/* 0A8C70 7F074140 C4EA0014 */ lwc1 $f10, 0x14($a3)
|
|
/* 0A8C74 7F074144 46001207 */ neg.s $f8, $f2
|
|
/* 0A8C78 7F074148 460A4483 */ div.s $f18, $f8, $f10
|
|
/* 0A8C7C 7F07414C 4600910D */ trunc.w.s $f4, $f18
|
|
/* 0A8C80 7F074150 44032000 */ mfc1 $v1, $f4
|
|
/* 0A8C84 7F074154 00000000 */ nop
|
|
/* 0A8C88 7F074158 00034400 */ sll $t0, $v1, 0x10
|
|
/* 0A8C8C 7F07415C 00081C03 */ sra $v1, $t0, 0x10
|
|
.L7F074160:
|
|
/* 0A8C90 7F074160 3C014248 */ li $at, 0x42480000 # 50.000000
|
|
/* 0A8C94 7F074164 44813000 */ mtc1 $at, $f6
|
|
/* 0A8C98 7F074168 3C048005 */ lui $a0, %hi(aDoshadowNoVtxAllocator)
|
|
/* 0A8C9C 7F07416C 3C014396 */ li $at, 0x43960000 # 300.000000
|
|
/* 0A8CA0 7F074170 4606103C */ c.lt.s $f2, $f6
|
|
/* 0A8CA4 7F074174 24844A94 */ addiu $a0, %lo(aDoshadowNoVtxAllocator) # addiu $a0, $a0, 0x4a94
|
|
/* 0A8CA8 7F074178 4502000A */ bc1fl .L7F0741A4
|
|
/* 0A8CAC 7F07417C 44818000 */ mtc1 $at, $f16
|
|
/* 0A8CB0 7F074180 3C013FA0 */ li $at, 0x3FA00000 # 1.250000
|
|
/* 0A8CB4 7F074184 44810000 */ mtc1 $at, $f0
|
|
/* 0A8CB8 7F074188 00000000 */ nop
|
|
/* 0A8CBC 7F07418C 46006302 */ mul.s $f12, $f12, $f0
|
|
/* 0A8CC0 7F074190 00000000 */ nop
|
|
/* 0A8CC4 7F074194 46007382 */ mul.s $f14, $f14, $f0
|
|
/* 0A8CC8 7F074198 10000012 */ b .L7F0741E4
|
|
/* 0A8CCC 7F07419C 00000000 */ nop
|
|
/* 0A8CD0 7F0741A0 44818000 */ mtc1 $at, $f16
|
|
.L7F0741A4:
|
|
/* 0A8CD4 7F0741A4 3C014348 */ li $at, 0x43480000 # 200.000000
|
|
/* 0A8CD8 7F0741A8 4602803C */ c.lt.s $f16, $f2
|
|
/* 0A8CDC 7F0741AC 00000000 */ nop
|
|
/* 0A8CE0 7F0741B0 45020005 */ bc1fl .L7F0741C8
|
|
/* 0A8CE4 7F0741B4 46028201 */ sub.s $f8, $f16, $f2
|
|
/* 0A8CE8 7F0741B8 44807000 */ mtc1 $zero, $f14
|
|
/* 0A8CEC 7F0741BC 10000009 */ b .L7F0741E4
|
|
/* 0A8CF0 7F0741C0 46007306 */ mov.s $f12, $f14
|
|
/* 0A8CF4 7F0741C4 46028201 */ sub.s $f8, $f16, $f2
|
|
.L7F0741C8:
|
|
/* 0A8CF8 7F0741C8 44815000 */ mtc1 $at, $f10
|
|
/* 0A8CFC 7F0741CC 00000000 */ nop
|
|
/* 0A8D00 7F0741D0 460A4003 */ div.s $f0, $f8, $f10
|
|
/* 0A8D04 7F0741D4 46006302 */ mul.s $f12, $f12, $f0
|
|
/* 0A8D08 7F0741D8 00000000 */ nop
|
|
/* 0A8D0C 7F0741DC 46007382 */ mul.s $f14, $f14, $f0
|
|
/* 0A8D10 7F0741E0 00000000 */ nop
|
|
.L7F0741E4:
|
|
/* 0A8D14 7F0741E4 8C42608C */ lw $v0, %lo(vtxallocator)($v0)
|
|
/* 0A8D18 7F0741E8 5440000F */ bnezl $v0, .L7F074228
|
|
/* 0A8D1C 7F0741EC 24040004 */ li $a0, 4
|
|
/* 0A8D20 7F0741F0 A7A30052 */ sh $v1, 0x52($sp)
|
|
/* 0A8D24 7F0741F4 AFA6006C */ sw $a2, 0x6c($sp)
|
|
/* 0A8D28 7F0741F8 E7AC0048 */ swc1 $f12, 0x48($sp)
|
|
/* 0A8D2C 7F0741FC 0C0033D1 */ jal osSyncPrintf
|
|
/* 0A8D30 7F074200 E7AE0044 */ swc1 $f14, 0x44($sp)
|
|
/* 0A8D34 7F074204 0FC1B11B */ jal return_null
|
|
/* 0A8D38 7F074208 00000000 */ nop
|
|
/* 0A8D3C 7F07420C 3C028003 */ lui $v0, %hi(vtxallocator)
|
|
/* 0A8D40 7F074210 8C42608C */ lw $v0, %lo(vtxallocator)($v0)
|
|
/* 0A8D44 7F074214 87A30052 */ lh $v1, 0x52($sp)
|
|
/* 0A8D48 7F074218 8FA6006C */ lw $a2, 0x6c($sp)
|
|
/* 0A8D4C 7F07421C C7AC0048 */ lwc1 $f12, 0x48($sp)
|
|
/* 0A8D50 7F074220 C7AE0044 */ lwc1 $f14, 0x44($sp)
|
|
/* 0A8D54 7F074224 24040004 */ li $a0, 4
|
|
.L7F074228:
|
|
/* 0A8D58 7F074228 A7A30052 */ sh $v1, 0x52($sp)
|
|
/* 0A8D5C 7F07422C AFA6006C */ sw $a2, 0x6c($sp)
|
|
/* 0A8D60 7F074230 E7AC0048 */ swc1 $f12, 0x48($sp)
|
|
/* 0A8D64 7F074234 0040F809 */ jalr $v0
|
|
/* 0A8D68 7F074238 E7AE0044 */ swc1 $f14, 0x44($sp)
|
|
/* 0A8D6C 7F07423C 27A40058 */ addiu $a0, $sp, 0x58
|
|
/* 0A8D70 7F074240 8C810000 */ lw $at, ($a0)
|
|
/* 0A8D74 7F074244 87A30052 */ lh $v1, 0x52($sp)
|
|
/* 0A8D78 7F074248 8FA6006C */ lw $a2, 0x6c($sp)
|
|
/* 0A8D7C 7F07424C C7AC0048 */ lwc1 $f12, 0x48($sp)
|
|
/* 0A8D80 7F074250 C7AE0044 */ lwc1 $f14, 0x44($sp)
|
|
/* 0A8D84 7F074254 AC410000 */ sw $at, ($v0)
|
|
/* 0A8D88 7F074258 8C8A0004 */ lw $t2, 4($a0)
|
|
/* 0A8D8C 7F07425C AC4A0004 */ sw $t2, 4($v0)
|
|
/* 0A8D90 7F074260 8C810008 */ lw $at, 8($a0)
|
|
/* 0A8D94 7F074264 AC410008 */ sw $at, 8($v0)
|
|
/* 0A8D98 7F074268 8C8A000C */ lw $t2, 0xc($a0)
|
|
/* 0A8D9C 7F07426C AC4A000C */ sw $t2, 0xc($v0)
|
|
/* 0A8DA0 7F074270 8C810000 */ lw $at, ($a0)
|
|
/* 0A8DA4 7F074274 AC410010 */ sw $at, 0x10($v0)
|
|
/* 0A8DA8 7F074278 8C8D0004 */ lw $t5, 4($a0)
|
|
/* 0A8DAC 7F07427C AC4D0014 */ sw $t5, 0x14($v0)
|
|
/* 0A8DB0 7F074280 8C810008 */ lw $at, 8($a0)
|
|
/* 0A8DB4 7F074284 AC410018 */ sw $at, 0x18($v0)
|
|
/* 0A8DB8 7F074288 8C8D000C */ lw $t5, 0xc($a0)
|
|
/* 0A8DBC 7F07428C AC4D001C */ sw $t5, 0x1c($v0)
|
|
/* 0A8DC0 7F074290 8C810000 */ lw $at, ($a0)
|
|
/* 0A8DC4 7F074294 AC410020 */ sw $at, 0x20($v0)
|
|
/* 0A8DC8 7F074298 8C880004 */ lw $t0, 4($a0)
|
|
/* 0A8DCC 7F07429C AC480024 */ sw $t0, 0x24($v0)
|
|
/* 0A8DD0 7F0742A0 8C810008 */ lw $at, 8($a0)
|
|
/* 0A8DD4 7F0742A4 AC410028 */ sw $at, 0x28($v0)
|
|
/* 0A8DD8 7F0742A8 8C88000C */ lw $t0, 0xc($a0)
|
|
/* 0A8DDC 7F0742AC AC48002C */ sw $t0, 0x2c($v0)
|
|
/* 0A8DE0 7F0742B0 8C810000 */ lw $at, ($a0)
|
|
/* 0A8DE4 7F0742B4 AC410030 */ sw $at, 0x30($v0)
|
|
/* 0A8DE8 7F0742B8 8C990004 */ lw $t9, 4($a0)
|
|
/* 0A8DEC 7F0742BC AC590034 */ sw $t9, 0x34($v0)
|
|
/* 0A8DF0 7F0742C0 8C810008 */ lw $at, 8($a0)
|
|
/* 0A8DF4 7F0742C4 AC410038 */ sw $at, 0x38($v0)
|
|
/* 0A8DF8 7F0742C8 8C99000C */ lw $t9, 0xc($a0)
|
|
/* 0A8DFC 7F0742CC AC59003C */ sw $t9, 0x3c($v0)
|
|
/* 0A8E00 7F0742D0 C4D20000 */ lwc1 $f18, ($a2)
|
|
/* 0A8E04 7F0742D4 A4430002 */ sh $v1, 2($v0)
|
|
/* 0A8E08 7F0742D8 460C9101 */ sub.s $f4, $f18, $f12
|
|
/* 0A8E0C 7F0742DC 4600218D */ trunc.w.s $f6, $f4
|
|
/* 0A8E10 7F0742E0 440C3000 */ mfc1 $t4, $f6
|
|
/* 0A8E14 7F0742E4 00000000 */ nop
|
|
/* 0A8E18 7F0742E8 A44C0000 */ sh $t4, ($v0)
|
|
/* 0A8E1C 7F0742EC C4C80004 */ lwc1 $f8, 4($a2)
|
|
/* 0A8E20 7F0742F0 460E4281 */ sub.s $f10, $f8, $f14
|
|
/* 0A8E24 7F0742F4 4600548D */ trunc.w.s $f18, $f10
|
|
/* 0A8E28 7F0742F8 440D9000 */ mfc1 $t5, $f18
|
|
/* 0A8E2C 7F0742FC 00000000 */ nop
|
|
/* 0A8E30 7F074300 A44D0004 */ sh $t5, 4($v0)
|
|
/* 0A8E34 7F074304 C4C40000 */ lwc1 $f4, ($a2)
|
|
/* 0A8E38 7F074308 A4430012 */ sh $v1, 0x12($v0)
|
|
/* 0A8E3C 7F07430C 460C2181 */ sub.s $f6, $f4, $f12
|
|
/* 0A8E40 7F074310 4600320D */ trunc.w.s $f8, $f6
|
|
/* 0A8E44 7F074314 440E4000 */ mfc1 $t6, $f8
|
|
/* 0A8E48 7F074318 00000000 */ nop
|
|
/* 0A8E4C 7F07431C A44E0010 */ sh $t6, 0x10($v0)
|
|
/* 0A8E50 7F074320 C4CA0004 */ lwc1 $f10, 4($a2)
|
|
/* 0A8E54 7F074324 460E5480 */ add.s $f18, $f10, $f14
|
|
/* 0A8E58 7F074328 4600910D */ trunc.w.s $f4, $f18
|
|
/* 0A8E5C 7F07432C 44092000 */ mfc1 $t1, $f4
|
|
/* 0A8E60 7F074330 00000000 */ nop
|
|
/* 0A8E64 7F074334 A4490014 */ sh $t1, 0x14($v0)
|
|
/* 0A8E68 7F074338 C4C60000 */ lwc1 $f6, ($a2)
|
|
/* 0A8E6C 7F07433C A4430022 */ sh $v1, 0x22($v0)
|
|
/* 0A8E70 7F074340 3C09BC00 */ lui $t1, (0xBC001406 >> 16) # lui $t1, 0xbc00
|
|
/* 0A8E74 7F074344 460C3200 */ add.s $f8, $f6, $f12
|
|
/* 0A8E78 7F074348 35291406 */ ori $t1, (0xBC001406 & 0xFFFF) # ori $t1, $t1, 0x1406
|
|
/* 0A8E7C 7F07434C 4600428D */ trunc.w.s $f10, $f8
|
|
/* 0A8E80 7F074350 44195000 */ mfc1 $t9, $f10
|
|
/* 0A8E84 7F074354 00000000 */ nop
|
|
/* 0A8E88 7F074358 A4590020 */ sh $t9, 0x20($v0)
|
|
/* 0A8E8C 7F07435C C4D20004 */ lwc1 $f18, 4($a2)
|
|
/* 0A8E90 7F074360 460E9100 */ add.s $f4, $f18, $f14
|
|
/* 0A8E94 7F074364 4600218D */ trunc.w.s $f6, $f4
|
|
/* 0A8E98 7F074368 440C3000 */ mfc1 $t4, $f6
|
|
/* 0A8E9C 7F07436C 00000000 */ nop
|
|
/* 0A8EA0 7F074370 A44C0024 */ sh $t4, 0x24($v0)
|
|
/* 0A8EA4 7F074374 C4C80000 */ lwc1 $f8, ($a2)
|
|
/* 0A8EA8 7F074378 A4430032 */ sh $v1, 0x32($v0)
|
|
/* 0A8EAC 7F07437C 460C4280 */ add.s $f10, $f8, $f12
|
|
/* 0A8EB0 7F074380 4600548D */ trunc.w.s $f18, $f10
|
|
/* 0A8EB4 7F074384 440D9000 */ mfc1 $t5, $f18
|
|
/* 0A8EB8 7F074388 00000000 */ nop
|
|
/* 0A8EBC 7F07438C A44D0030 */ sh $t5, 0x30($v0)
|
|
/* 0A8EC0 7F074390 C4C40004 */ lwc1 $f4, 4($a2)
|
|
/* 0A8EC4 7F074394 460E2181 */ sub.s $f6, $f4, $f14
|
|
/* 0A8EC8 7F074398 4600320D */ trunc.w.s $f8, $f6
|
|
/* 0A8ECC 7F07439C 440E4000 */ mfc1 $t6, $f8
|
|
/* 0A8ED0 7F0743A0 00000000 */ nop
|
|
/* 0A8ED4 7F0743A4 A44E0034 */ sh $t6, 0x34($v0)
|
|
/* 0A8ED8 7F0743A8 8E03000C */ lw $v1, 0xc($s0)
|
|
/* 0A8EDC 7F0743AC 24680008 */ addiu $t0, $v1, 8
|
|
/* 0A8EE0 7F0743B0 AE08000C */ sw $t0, 0xc($s0)
|
|
/* 0A8EE4 7F0743B4 AC690000 */ sw $t1, ($v1)
|
|
/* 0A8EE8 7F0743B8 8CC4001C */ lw $a0, 0x1c($a2)
|
|
/* 0A8EEC 7F0743BC AFA20054 */ sw $v0, 0x54($sp)
|
|
/* 0A8EF0 7F0743C0 AFA6006C */ sw $a2, 0x6c($sp)
|
|
/* 0A8EF4 7F0743C4 0C003A2C */ jal osVirtualToPhysical
|
|
/* 0A8EF8 7F0743C8 AFA30038 */ sw $v1, 0x38($sp)
|
|
/* 0A8EFC 7F0743CC 8FA50038 */ lw $a1, 0x38($sp)
|
|
/* 0A8F00 7F0743D0 8FA6006C */ lw $a2, 0x6c($sp)
|
|
/* 0A8F04 7F0743D4 8FA70054 */ lw $a3, 0x54($sp)
|
|
/* 0A8F08 7F0743D8 ACA20004 */ sw $v0, 4($a1)
|
|
/* 0A8F0C 7F0743DC 8CC30010 */ lw $v1, 0x10($a2)
|
|
/* 0A8F10 7F0743E0 24060001 */ li $a2, 1
|
|
/* 0A8F14 7F0743E4 00002825 */ move $a1, $zero
|
|
/* 0A8F18 7F0743E8 1060001C */ beqz $v1, .L7F07445C
|
|
/* 0A8F1C 7F0743EC 02002025 */ move $a0, $s0
|
|
/* 0A8F20 7F0743F0 A4E00008 */ sh $zero, 8($a3)
|
|
/* 0A8F24 7F0743F4 A4E0000A */ sh $zero, 0xa($a3)
|
|
/* 0A8F28 7F0743F8 90780004 */ lbu $t8, 4($v1)
|
|
/* 0A8F2C 7F0743FC A4E0001A */ sh $zero, 0x1a($a3)
|
|
/* 0A8F30 7F074400 00602825 */ move $a1, $v1
|
|
/* 0A8F34 7F074404 0018C940 */ sll $t9, $t8, 5
|
|
/* 0A8F38 7F074408 272AFFFF */ addiu $t2, $t9, -1
|
|
/* 0A8F3C 7F07440C A4EA0018 */ sh $t2, 0x18($a3)
|
|
/* 0A8F40 7F074410 906C0004 */ lbu $t4, 4($v1)
|
|
/* 0A8F44 7F074414 02002025 */ move $a0, $s0
|
|
/* 0A8F48 7F074418 24060004 */ li $a2, 4
|
|
/* 0A8F4C 7F07441C 000C5940 */ sll $t3, $t4, 5
|
|
/* 0A8F50 7F074420 256DFFFF */ addiu $t5, $t3, -1
|
|
/* 0A8F54 7F074424 A4ED0028 */ sh $t5, 0x28($a3)
|
|
/* 0A8F58 7F074428 906F0005 */ lbu $t7, 5($v1)
|
|
/* 0A8F5C 7F07442C A4E00038 */ sh $zero, 0x38($a3)
|
|
/* 0A8F60 7F074430 000F7140 */ sll $t6, $t7, 5
|
|
/* 0A8F64 7F074434 25C8FFFF */ addiu $t0, $t6, -1
|
|
/* 0A8F68 7F074438 A4E8002A */ sh $t0, 0x2a($a3)
|
|
/* 0A8F6C 7F07443C 90690005 */ lbu $t1, 5($v1)
|
|
/* 0A8F70 7F074440 0009C140 */ sll $t8, $t1, 5
|
|
/* 0A8F74 7F074444 2719FFFF */ addiu $t9, $t8, -1
|
|
/* 0A8F78 7F074448 A4F9003A */ sh $t9, 0x3a($a3)
|
|
/* 0A8F7C 7F07444C 0FC1CC0E */ jal sub_GAME_7F073038
|
|
/* 0A8F80 7F074450 AFA70054 */ sw $a3, 0x54($sp)
|
|
/* 0A8F84 7F074454 10000004 */ b .L7F074468
|
|
/* 0A8F88 7F074458 8FA70054 */ lw $a3, 0x54($sp)
|
|
.L7F07445C:
|
|
/* 0A8F8C 7F07445C 0FC1CC0E */ jal sub_GAME_7F073038
|
|
/* 0A8F90 7F074460 AFA70054 */ sw $a3, 0x54($sp)
|
|
/* 0A8F94 7F074464 8FA70054 */ lw $a3, 0x54($sp)
|
|
.L7F074468:
|
|
/* 0A8F98 7F074468 8E03000C */ lw $v1, 0xc($s0)
|
|
/* 0A8F9C 7F07446C 3C0CB700 */ lui $t4, 0xb700
|
|
/* 0A8FA0 7F074470 240B2000 */ li $t3, 8192
|
|
/* 0A8FA4 7F074474 246A0008 */ addiu $t2, $v1, 8
|
|
/* 0A8FA8 7F074478 AE0A000C */ sw $t2, 0xc($s0)
|
|
/* 0A8FAC 7F07447C AC6C0000 */ sw $t4, ($v1)
|
|
/* 0A8FB0 7F074480 AC6B0004 */ sw $t3, 4($v1)
|
|
/* 0A8FB4 7F074484 8E03000C */ lw $v1, 0xc($s0)
|
|
/* 0A8FB8 7F074488 3C0F0102 */ lui $t7, (0x01020040 >> 16) # lui $t7, 0x102
|
|
/* 0A8FBC 7F07448C 35EF0040 */ ori $t7, (0x01020040 & 0xFFFF) # ori $t7, $t7, 0x40
|
|
/* 0A8FC0 7F074490 246D0008 */ addiu $t5, $v1, 8
|
|
/* 0A8FC4 7F074494 AE0D000C */ sw $t5, 0xc($s0)
|
|
/* 0A8FC8 7F074498 AC6F0000 */ sw $t7, ($v1)
|
|
/* 0A8FCC 7F07449C AFA70054 */ sw $a3, 0x54($sp)
|
|
/* 0A8FD0 7F0744A0 8FA40070 */ lw $a0, 0x70($sp)
|
|
/* 0A8FD4 7F0744A4 0C003A2C */ jal osVirtualToPhysical
|
|
/* 0A8FD8 7F0744A8 AFA3002C */ sw $v1, 0x2c($sp)
|
|
/* 0A8FDC 7F0744AC 8FA5002C */ lw $a1, 0x2c($sp)
|
|
/* 0A8FE0 7F0744B0 8FA40054 */ lw $a0, 0x54($sp)
|
|
/* 0A8FE4 7F0744B4 3C080430 */ lui $t0, (0x04300040 >> 16) # lui $t0, 0x430
|
|
/* 0A8FE8 7F0744B8 ACA20004 */ sw $v0, 4($a1)
|
|
/* 0A8FEC 7F0744BC 8E03000C */ lw $v1, 0xc($s0)
|
|
/* 0A8FF0 7F0744C0 35080040 */ ori $t0, (0x04300040 & 0xFFFF) # ori $t0, $t0, 0x40
|
|
/* 0A8FF4 7F0744C4 246E0008 */ addiu $t6, $v1, 8
|
|
/* 0A8FF8 7F0744C8 AE0E000C */ sw $t6, 0xc($s0)
|
|
/* 0A8FFC 7F0744CC AC680000 */ sw $t0, ($v1)
|
|
/* 0A9000 7F0744D0 0C003A2C */ jal osVirtualToPhysical
|
|
/* 0A9004 7F0744D4 AFA30028 */ sw $v1, 0x28($sp)
|
|
/* 0A9008 7F0744D8 8FA60028 */ lw $a2, 0x28($sp)
|
|
/* 0A900C 7F0744DC 3C18B100 */ lui $t8, (0xB1000002 >> 16) # lui $t8, 0xb100
|
|
/* 0A9010 7F0744E0 37180002 */ ori $t8, (0xB1000002 & 0xFFFF) # ori $t8, $t8, 2
|
|
/* 0A9014 7F0744E4 ACC20004 */ sw $v0, 4($a2)
|
|
/* 0A9018 7F0744E8 8E03000C */ lw $v1, 0xc($s0)
|
|
/* 0A901C 7F0744EC 24193210 */ li $t9, 12816
|
|
/* 0A9020 7F0744F0 24690008 */ addiu $t1, $v1, 8
|
|
/* 0A9024 7F0744F4 AE09000C */ sw $t1, 0xc($s0)
|
|
/* 0A9028 7F0744F8 AC790004 */ sw $t9, 4($v1)
|
|
/* 0A902C 7F0744FC AC780000 */ sw $t8, ($v1)
|
|
.L7F074500:
|
|
/* 0A9030 7F074500 8FBF001C */ lw $ra, 0x1c($sp)
|
|
/* 0A9034 7F074504 8FB00018 */ lw $s0, 0x18($sp)
|
|
/* 0A9038 7F074508 27BD0078 */ addiu $sp, $sp, 0x78
|
|
/* 0A903C 7F07450C 03E00008 */ jr $ra
|
|
/* 0A9040 7F074510 00000000 */ nop
|
|
)
|
|
#endif
|
|
#ifdef VERSION_EU
|
|
GLOBAL_ASM(
|
|
.text
|
|
glabel doshadow
|
|
/* 0A6AD8 7F0740E8 3C038003 */ lui $v1, %hi(D_800363F0) # $v1, 0x8003
|
|
/* 0A6ADC 7F0740EC 24631940 */ addiu $v1, %lo(D_800363F0) # addiu $v1, $v1, 0x1940
|
|
/* 0A6AE0 7F0740F0 8C6E0000 */ lw $t6, ($v1)
|
|
/* 0A6AE4 7F0740F4 27BDFF88 */ addiu $sp, $sp, -0x78
|
|
/* 0A6AE8 7F0740F8 AFB00018 */ sw $s0, 0x18($sp)
|
|
/* 0A6AEC 7F0740FC 00808025 */ move $s0, $a0
|
|
/* 0A6AF0 7F074100 AFBF001C */ sw $ra, 0x1c($sp)
|
|
/* 0A6AF4 7F074104 AFA60080 */ sw $a2, 0x80($sp)
|
|
/* 0A6AF8 7F074108 19C00132 */ blez $t6, .L7F0745D4
|
|
/* 0A6AFC 7F07410C 00A03825 */ move $a3, $a1
|
|
/* 0A6B00 7F074110 3C198003 */ lui $t9, %hi(D_800363F8) # $t9, 0x8003
|
|
/* 0A6B04 7F074114 27391948 */ addiu $t9, %lo(D_800363F8) # addiu $t9, $t9, 0x1948
|
|
/* 0A6B08 7F074118 8F210000 */ lw $at, ($t9)
|
|
/* 0A6B0C 7F07411C 8F2A0004 */ lw $t2, 4($t9)
|
|
/* 0A6B10 7F074120 8CC60004 */ lw $a2, 4($a2)
|
|
/* 0A6B14 7F074124 27B80058 */ addiu $t8, $sp, 0x58
|
|
/* 0A6B18 7F074128 AF010000 */ sw $at, ($t8)
|
|
/* 0A6B1C 7F07412C AF0A0004 */ sw $t2, 4($t8)
|
|
/* 0A6B20 7F074130 8F2A000C */ lw $t2, 0xc($t9)
|
|
/* 0A6B24 7F074134 8F210008 */ lw $at, 8($t9)
|
|
/* 0A6B28 7F074138 00A02025 */ move $a0, $a1
|
|
/* 0A6B2C 7F07413C AF0A000C */ sw $t2, 0xc($t8)
|
|
/* 0A6B30 7F074140 AF010008 */ sw $at, 8($t8)
|
|
/* 0A6B34 7F074144 8CC50014 */ lw $a1, 0x14($a2)
|
|
/* 0A6B38 7F074148 AFA7007C */ sw $a3, 0x7c($sp)
|
|
/* 0A6B3C 7F07414C 0FC1B3A3 */ jal modelGetNodeRwData
|
|
/* 0A6B40 7F074150 AFA6006C */ sw $a2, 0x6c($sp)
|
|
/* 0A6B44 7F074154 8E0B0008 */ lw $t3, 8($s0)
|
|
/* 0A6B48 7F074158 8FA6006C */ lw $a2, 0x6c($sp)
|
|
/* 0A6B4C 7F07415C C444000C */ lwc1 $f4, 0xc($v0)
|
|
/* 0A6B50 7F074160 C4460004 */ lwc1 $f6, 4($v0)
|
|
/* 0A6B54 7F074164 3C038003 */ lui $v1, %hi(D_800363F0) # $v1, 0x8003
|
|
/* 0A6B58 7F074168 316C0002 */ andi $t4, $t3, 2
|
|
/* 0A6B5C 7F07416C 24631940 */ addiu $v1, %lo(D_800363F0) # addiu $v1, $v1, 0x1940
|
|
/* 0A6B60 7F074170 8FA7007C */ lw $a3, 0x7c($sp)
|
|
/* 0A6B64 7F074174 C4C20008 */ lwc1 $f2, 8($a2)
|
|
/* 0A6B68 7F074178 C4CC000C */ lwc1 $f12, 0xc($a2)
|
|
/* 0A6B6C 7F07417C 11800115 */ beqz $t4, .L7F0745D4
|
|
/* 0A6B70 7F074180 46062381 */ sub.s $f14, $f4, $f6
|
|
/* 0A6B74 7F074184 8E020030 */ lw $v0, 0x30($s0)
|
|
/* 0A6B78 7F074188 24010003 */ li $at, 3
|
|
/* 0A6B7C 7F07418C 00002825 */ move $a1, $zero
|
|
/* 0A6B80 7F074190 10410003 */ beq $v0, $at, .L7F0741A0
|
|
/* 0A6B84 7F074194 24010008 */ li $at, 8
|
|
/* 0A6B88 7F074198 5441000F */ bnel $v0, $at, .L7F0741D8
|
|
/* 0A6B8C 7F07419C 8C790000 */ lw $t9, ($v1)
|
|
.L7F0741A0:
|
|
/* 0A6B90 7F0741A0 8E0D0034 */ lw $t5, 0x34($s0)
|
|
/* 0A6B94 7F0741A4 8C6F0000 */ lw $t7, ($v1)
|
|
/* 0A6B98 7F0741A8 240100FF */ li $at, 255
|
|
/* 0A6B9C 7F0741AC 31AE00FF */ andi $t6, $t5, 0xff
|
|
/* 0A6BA0 7F0741B0 01CF0019 */ multu $t6, $t7
|
|
/* 0A6BA4 7F0741B4 00001012 */ mflo $v0
|
|
/* 0A6BA8 7F0741B8 00000000 */ nop
|
|
/* 0A6BAC 7F0741BC 00000000 */ nop
|
|
/* 0A6BB0 7F0741C0 0041001B */ divu $zero, $v0, $at
|
|
/* 0A6BB4 7F0741C4 0000C012 */ mflo $t8
|
|
/* 0A6BB8 7F0741C8 A3B80067 */ sb $t8, 0x67($sp)
|
|
/* 0A6BBC 7F0741CC 10000004 */ b .L7F0741E0
|
|
/* 0A6BC0 7F0741D0 8FA40080 */ lw $a0, 0x80($sp)
|
|
/* 0A6BC4 7F0741D4 8C790000 */ lw $t9, ($v1)
|
|
.L7F0741D8:
|
|
/* 0A6BC8 7F0741D8 A3B90067 */ sb $t9, 0x67($sp)
|
|
/* 0A6BCC 7F0741DC 8FA40080 */ lw $a0, 0x80($sp)
|
|
.L7F0741E0:
|
|
/* 0A6BD0 7F0741E0 AFA6006C */ sw $a2, 0x6c($sp)
|
|
/* 0A6BD4 7F0741E4 AFA7007C */ sw $a3, 0x7c($sp)
|
|
/* 0A6BD8 7F0741E8 E7A20048 */ swc1 $f2, 0x48($sp)
|
|
/* 0A6BDC 7F0741EC E7AC0044 */ swc1 $f12, 0x44($sp)
|
|
/* 0A6BE0 7F0741F0 0FC1B32A */ jal modelFindNodeMtxIndex
|
|
/* 0A6BE4 7F0741F4 E7AE0040 */ swc1 $f14, 0x40($sp)
|
|
/* 0A6BE8 7F0741F8 8FA7007C */ lw $a3, 0x7c($sp)
|
|
/* 0A6BEC 7F0741FC 00025980 */ sll $t3, $v0, 6
|
|
/* 0A6BF0 7F074200 8FA6006C */ lw $a2, 0x6c($sp)
|
|
/* 0A6BF4 7F074204 8CEA000C */ lw $t2, 0xc($a3)
|
|
/* 0A6BF8 7F074208 C7A20048 */ lwc1 $f2, 0x48($sp)
|
|
/* 0A6BFC 7F07420C C7AC0044 */ lwc1 $f12, 0x44($sp)
|
|
/* 0A6C00 7F074210 014B6021 */ addu $t4, $t2, $t3
|
|
/* 0A6C04 7F074214 AFAC0070 */ sw $t4, 0x70($sp)
|
|
/* 0A6C08 7F074218 8E0D0004 */ lw $t5, 4($s0)
|
|
/* 0A6C0C 7F07421C C7AE0040 */ lwc1 $f14, 0x40($sp)
|
|
/* 0A6C10 7F074220 3C014000 */ li $at, 0x40000000 # 2.000000
|
|
/* 0A6C14 7F074224 11A0000B */ beqz $t5, .L7F074254
|
|
/* 0A6C18 7F074228 24040004 */ li $a0, 4
|
|
/* 0A6C1C 7F07422C 44814000 */ mtc1 $at, $f8
|
|
/* 0A6C20 7F074230 C4F20014 */ lwc1 $f18, 0x14($a3)
|
|
/* 0A6C24 7F074234 460E4281 */ sub.s $f10, $f8, $f14
|
|
/* 0A6C28 7F074238 46125103 */ div.s $f4, $f10, $f18
|
|
/* 0A6C2C 7F07423C 4600218D */ trunc.w.s $f6, $f4
|
|
/* 0A6C30 7F074240 44033000 */ mfc1 $v1, $f6
|
|
/* 0A6C34 7F074244 00000000 */ nop
|
|
/* 0A6C38 7F074248 00037C00 */ sll $t7, $v1, 0x10
|
|
/* 0A6C3C 7F07424C 10000009 */ b .L7F074274
|
|
/* 0A6C40 7F074250 000F1C03 */ sra $v1, $t7, 0x10
|
|
.L7F074254:
|
|
/* 0A6C44 7F074254 C4EA0014 */ lwc1 $f10, 0x14($a3)
|
|
/* 0A6C48 7F074258 46007207 */ neg.s $f8, $f14
|
|
/* 0A6C4C 7F07425C 460A4483 */ div.s $f18, $f8, $f10
|
|
/* 0A6C50 7F074260 4600910D */ trunc.w.s $f4, $f18
|
|
/* 0A6C54 7F074264 44032000 */ mfc1 $v1, $f4
|
|
/* 0A6C58 7F074268 00000000 */ nop
|
|
/* 0A6C5C 7F07426C 0003CC00 */ sll $t9, $v1, 0x10
|
|
/* 0A6C60 7F074270 00191C03 */ sra $v1, $t9, 0x10
|
|
.L7F074274:
|
|
/* 0A6C64 7F074274 3C014248 */ li $at, 0x42480000 # 50.000000
|
|
/* 0A6C68 7F074278 44813000 */ mtc1 $at, $f6
|
|
/* 0A6C6C 7F07427C 3C014396 */ li $at, 0x43960000 # 300.000000
|
|
/* 0A6C70 7F074280 3C198003 */ lui $t9, %hi(vtxallocator) # $t9, 0x8003
|
|
/* 0A6C74 7F074284 4606703C */ c.lt.s $f14, $f6
|
|
/* 0A6C78 7F074288 00000000 */ nop
|
|
/* 0A6C7C 7F07428C 4502000A */ bc1fl .L7F0742B8
|
|
/* 0A6C80 7F074290 44818000 */ mtc1 $at, $f16
|
|
/* 0A6C84 7F074294 3C013FA0 */ li $at, 0x3FA00000 # 1.250000
|
|
/* 0A6C88 7F074298 44810000 */ mtc1 $at, $f0
|
|
/* 0A6C8C 7F07429C 00000000 */ nop
|
|
/* 0A6C90 7F0742A0 46001082 */ mul.s $f2, $f2, $f0
|
|
/* 0A6C94 7F0742A4 00000000 */ nop
|
|
/* 0A6C98 7F0742A8 46006302 */ mul.s $f12, $f12, $f0
|
|
/* 0A6C9C 7F0742AC 10000012 */ b .L7F0742F8
|
|
/* 0A6CA0 7F0742B0 00000000 */ nop
|
|
/* 0A6CA4 7F0742B4 44818000 */ mtc1 $at, $f16
|
|
.L7F0742B8:
|
|
/* 0A6CA8 7F0742B8 3C014348 */ li $at, 0x43480000 # 200.000000
|
|
/* 0A6CAC 7F0742BC 460E803C */ c.lt.s $f16, $f14
|
|
/* 0A6CB0 7F0742C0 00000000 */ nop
|
|
/* 0A6CB4 7F0742C4 45020005 */ bc1fl .L7F0742DC
|
|
/* 0A6CB8 7F0742C8 460E8201 */ sub.s $f8, $f16, $f14
|
|
/* 0A6CBC 7F0742CC 44806000 */ mtc1 $zero, $f12
|
|
/* 0A6CC0 7F0742D0 10000009 */ b .L7F0742F8
|
|
/* 0A6CC4 7F0742D4 46006086 */ mov.s $f2, $f12
|
|
/* 0A6CC8 7F0742D8 460E8201 */ sub.s $f8, $f16, $f14
|
|
.L7F0742DC:
|
|
/* 0A6CCC 7F0742DC 44815000 */ mtc1 $at, $f10
|
|
/* 0A6CD0 7F0742E0 00000000 */ nop
|
|
/* 0A6CD4 7F0742E4 460A4003 */ div.s $f0, $f8, $f10
|
|
/* 0A6CD8 7F0742E8 46001082 */ mul.s $f2, $f2, $f0
|
|
/* 0A6CDC 7F0742EC 00000000 */ nop
|
|
/* 0A6CE0 7F0742F0 46006302 */ mul.s $f12, $f12, $f0
|
|
/* 0A6CE4 7F0742F4 00000000 */ nop
|
|
.L7F0742F8:
|
|
/* 0A6CE8 7F0742F8 8F3915DC */ lw $t9, %lo(vtxallocator)($t9)
|
|
/* 0A6CEC 7F0742FC A7A30052 */ sh $v1, 0x52($sp)
|
|
/* 0A6CF0 7F074300 AFA6006C */ sw $a2, 0x6c($sp)
|
|
/* 0A6CF4 7F074304 E7A20048 */ swc1 $f2, 0x48($sp)
|
|
/* 0A6CF8 7F074308 0320F809 */ jalr $t9
|
|
/* 0A6CFC 7F07430C E7AC0044 */ swc1 $f12, 0x44($sp)
|
|
/* 0A6D00 7F074310 27A80058 */ addiu $t0, $sp, 0x58
|
|
/* 0A6D04 7F074314 8D010000 */ lw $at, ($t0)
|
|
/* 0A6D08 7F074318 87A30052 */ lh $v1, 0x52($sp)
|
|
/* 0A6D0C 7F07431C 8FA6006C */ lw $a2, 0x6c($sp)
|
|
/* 0A6D10 7F074320 C7A20048 */ lwc1 $f2, 0x48($sp)
|
|
/* 0A6D14 7F074324 C7AC0044 */ lwc1 $f12, 0x44($sp)
|
|
/* 0A6D18 7F074328 AC410000 */ sw $at, ($v0)
|
|
/* 0A6D1C 7F07432C 8D0D0004 */ lw $t5, 4($t0)
|
|
/* 0A6D20 7F074330 AC4D0004 */ sw $t5, 4($v0)
|
|
/* 0A6D24 7F074334 8D010008 */ lw $at, 8($t0)
|
|
/* 0A6D28 7F074338 AC410008 */ sw $at, 8($v0)
|
|
/* 0A6D2C 7F07433C 8D0D000C */ lw $t5, 0xc($t0)
|
|
/* 0A6D30 7F074340 AC4D000C */ sw $t5, 0xc($v0)
|
|
/* 0A6D34 7F074344 8D010000 */ lw $at, ($t0)
|
|
/* 0A6D38 7F074348 AC410010 */ sw $at, 0x10($v0)
|
|
/* 0A6D3C 7F07434C 8D090004 */ lw $t1, 4($t0)
|
|
/* 0A6D40 7F074350 AC490014 */ sw $t1, 0x14($v0)
|
|
/* 0A6D44 7F074354 8D010008 */ lw $at, 8($t0)
|
|
/* 0A6D48 7F074358 AC410018 */ sw $at, 0x18($v0)
|
|
/* 0A6D4C 7F07435C 8D09000C */ lw $t1, 0xc($t0)
|
|
/* 0A6D50 7F074360 AC49001C */ sw $t1, 0x1c($v0)
|
|
/* 0A6D54 7F074364 8D010000 */ lw $at, ($t0)
|
|
/* 0A6D58 7F074368 AC410020 */ sw $at, 0x20($v0)
|
|
/* 0A6D5C 7F07436C 8D190004 */ lw $t9, 4($t0)
|
|
/* 0A6D60 7F074370 AC590024 */ sw $t9, 0x24($v0)
|
|
/* 0A6D64 7F074374 8D010008 */ lw $at, 8($t0)
|
|
/* 0A6D68 7F074378 AC410028 */ sw $at, 0x28($v0)
|
|
/* 0A6D6C 7F07437C 8D19000C */ lw $t9, 0xc($t0)
|
|
/* 0A6D70 7F074380 AC59002C */ sw $t9, 0x2c($v0)
|
|
/* 0A6D74 7F074384 8D010000 */ lw $at, ($t0)
|
|
/* 0A6D78 7F074388 AC410030 */ sw $at, 0x30($v0)
|
|
/* 0A6D7C 7F07438C 8D0D0004 */ lw $t5, 4($t0)
|
|
/* 0A6D80 7F074390 AC4D0034 */ sw $t5, 0x34($v0)
|
|
/* 0A6D84 7F074394 8D010008 */ lw $at, 8($t0)
|
|
/* 0A6D88 7F074398 AC410038 */ sw $at, 0x38($v0)
|
|
/* 0A6D8C 7F07439C 8D0D000C */ lw $t5, 0xc($t0)
|
|
/* 0A6D90 7F0743A0 AC4D003C */ sw $t5, 0x3c($v0)
|
|
/* 0A6D94 7F0743A4 C4D20000 */ lwc1 $f18, ($a2)
|
|
/* 0A6D98 7F0743A8 A4430002 */ sh $v1, 2($v0)
|
|
/* 0A6D9C 7F0743AC 3C0DBC00 */ lui $t5, (0xBC001406 >> 16) # lui $t5, 0xbc00
|
|
/* 0A6DA0 7F0743B0 46029101 */ sub.s $f4, $f18, $f2
|
|
/* 0A6DA4 7F0743B4 35AD1406 */ ori $t5, (0xBC001406 & 0xFFFF) # ori $t5, $t5, 0x1406
|
|
/* 0A6DA8 7F0743B8 4600218D */ trunc.w.s $f6, $f4
|
|
/* 0A6DAC 7F0743BC 440E3000 */ mfc1 $t6, $f6
|
|
/* 0A6DB0 7F0743C0 00000000 */ nop
|
|
/* 0A6DB4 7F0743C4 A44E0000 */ sh $t6, ($v0)
|
|
/* 0A6DB8 7F0743C8 C4C80004 */ lwc1 $f8, 4($a2)
|
|
/* 0A6DBC 7F0743CC 460C4281 */ sub.s $f10, $f8, $f12
|
|
/* 0A6DC0 7F0743D0 4600548D */ trunc.w.s $f18, $f10
|
|
/* 0A6DC4 7F0743D4 440A9000 */ mfc1 $t2, $f18
|
|
/* 0A6DC8 7F0743D8 00000000 */ nop
|
|
/* 0A6DCC 7F0743DC A44A0004 */ sh $t2, 4($v0)
|
|
/* 0A6DD0 7F0743E0 C4C40000 */ lwc1 $f4, ($a2)
|
|
/* 0A6DD4 7F0743E4 A4430012 */ sh $v1, 0x12($v0)
|
|
/* 0A6DD8 7F0743E8 46022181 */ sub.s $f6, $f4, $f2
|
|
/* 0A6DDC 7F0743EC 4600320D */ trunc.w.s $f8, $f6
|
|
/* 0A6DE0 7F0743F0 44194000 */ mfc1 $t9, $f8
|
|
/* 0A6DE4 7F0743F4 00000000 */ nop
|
|
/* 0A6DE8 7F0743F8 A4590010 */ sh $t9, 0x10($v0)
|
|
/* 0A6DEC 7F0743FC C4CA0004 */ lwc1 $f10, 4($a2)
|
|
/* 0A6DF0 7F074400 460C5480 */ add.s $f18, $f10, $f12
|
|
/* 0A6DF4 7F074404 4600910D */ trunc.w.s $f4, $f18
|
|
/* 0A6DF8 7F074408 440C2000 */ mfc1 $t4, $f4
|
|
/* 0A6DFC 7F07440C 00000000 */ nop
|
|
/* 0A6E00 7F074410 A44C0014 */ sh $t4, 0x14($v0)
|
|
/* 0A6E04 7F074414 C4C60000 */ lwc1 $f6, ($a2)
|
|
/* 0A6E08 7F074418 A4430022 */ sh $v1, 0x22($v0)
|
|
/* 0A6E0C 7F07441C 46023200 */ add.s $f8, $f6, $f2
|
|
/* 0A6E10 7F074420 4600428D */ trunc.w.s $f10, $f8
|
|
/* 0A6E14 7F074424 440F5000 */ mfc1 $t7, $f10
|
|
/* 0A6E18 7F074428 00000000 */ nop
|
|
/* 0A6E1C 7F07442C A44F0020 */ sh $t7, 0x20($v0)
|
|
/* 0A6E20 7F074430 C4D20004 */ lwc1 $f18, 4($a2)
|
|
/* 0A6E24 7F074434 460C9100 */ add.s $f4, $f18, $f12
|
|
/* 0A6E28 7F074438 4600218D */ trunc.w.s $f6, $f4
|
|
/* 0A6E2C 7F07443C 44093000 */ mfc1 $t1, $f6
|
|
/* 0A6E30 7F074440 00000000 */ nop
|
|
/* 0A6E34 7F074444 A4490024 */ sh $t1, 0x24($v0)
|
|
/* 0A6E38 7F074448 C4C80000 */ lwc1 $f8, ($a2)
|
|
/* 0A6E3C 7F07444C A4430032 */ sh $v1, 0x32($v0)
|
|
/* 0A6E40 7F074450 46024280 */ add.s $f10, $f8, $f2
|
|
/* 0A6E44 7F074454 4600548D */ trunc.w.s $f18, $f10
|
|
/* 0A6E48 7F074458 44189000 */ mfc1 $t8, $f18
|
|
/* 0A6E4C 7F07445C 00000000 */ nop
|
|
/* 0A6E50 7F074460 A4580030 */ sh $t8, 0x30($v0)
|
|
/* 0A6E54 7F074464 C4C40004 */ lwc1 $f4, 4($a2)
|
|
/* 0A6E58 7F074468 460C2181 */ sub.s $f6, $f4, $f12
|
|
/* 0A6E5C 7F07446C 4600320D */ trunc.w.s $f8, $f6
|
|
/* 0A6E60 7F074470 440B4000 */ mfc1 $t3, $f8
|
|
/* 0A6E64 7F074474 00000000 */ nop
|
|
/* 0A6E68 7F074478 A44B0034 */ sh $t3, 0x34($v0)
|
|
/* 0A6E6C 7F07447C 8E03000C */ lw $v1, 0xc($s0)
|
|
/* 0A6E70 7F074480 246C0008 */ addiu $t4, $v1, 8
|
|
/* 0A6E74 7F074484 AE0C000C */ sw $t4, 0xc($s0)
|
|
/* 0A6E78 7F074488 AC6D0000 */ sw $t5, ($v1)
|
|
/* 0A6E7C 7F07448C 8CC4001C */ lw $a0, 0x1c($a2)
|
|
/* 0A6E80 7F074490 AFA20054 */ sw $v0, 0x54($sp)
|
|
/* 0A6E84 7F074494 AFA6006C */ sw $a2, 0x6c($sp)
|
|
/* 0A6E88 7F074498 0C003838 */ jal osVirtualToPhysical
|
|
/* 0A6E8C 7F07449C AFA30038 */ sw $v1, 0x38($sp)
|
|
/* 0A6E90 7F0744A0 8FA50038 */ lw $a1, 0x38($sp)
|
|
/* 0A6E94 7F0744A4 8FA6006C */ lw $a2, 0x6c($sp)
|
|
/* 0A6E98 7F0744A8 8FA70054 */ lw $a3, 0x54($sp)
|
|
/* 0A6E9C 7F0744AC ACA20004 */ sw $v0, 4($a1)
|
|
/* 0A6EA0 7F0744B0 8CC30010 */ lw $v1, 0x10($a2)
|
|
/* 0A6EA4 7F0744B4 24060001 */ li $a2, 1
|
|
/* 0A6EA8 7F0744B8 00002825 */ move $a1, $zero
|
|
/* 0A6EAC 7F0744BC 1060001C */ beqz $v1, .L7F074530
|
|
/* 0A6EB0 7F0744C0 02002025 */ move $a0, $s0
|
|
/* 0A6EB4 7F0744C4 A4E00008 */ sh $zero, 8($a3)
|
|
/* 0A6EB8 7F0744C8 A4E0000A */ sh $zero, 0xa($a3)
|
|
/* 0A6EBC 7F0744CC 906F0004 */ lbu $t7, 4($v1)
|
|
/* 0A6EC0 7F0744D0 A4E0001A */ sh $zero, 0x1a($a3)
|
|
/* 0A6EC4 7F0744D4 00602825 */ move $a1, $v1
|
|
/* 0A6EC8 7F0744D8 000F7140 */ sll $t6, $t7, 5
|
|
/* 0A6ECC 7F0744DC 25C9FFFF */ addiu $t1, $t6, -1
|
|
/* 0A6ED0 7F0744E0 A4E90018 */ sh $t1, 0x18($a3)
|
|
/* 0A6ED4 7F0744E4 906A0004 */ lbu $t2, 4($v1)
|
|
/* 0A6ED8 7F0744E8 02002025 */ move $a0, $s0
|
|
/* 0A6EDC 7F0744EC 24060004 */ li $a2, 4
|
|
/* 0A6EE0 7F0744F0 000AC140 */ sll $t8, $t2, 5
|
|
/* 0A6EE4 7F0744F4 2719FFFF */ addiu $t9, $t8, -1
|
|
/* 0A6EE8 7F0744F8 A4F90028 */ sh $t9, 0x28($a3)
|
|
/* 0A6EEC 7F0744FC 906B0005 */ lbu $t3, 5($v1)
|
|
/* 0A6EF0 7F074500 A4E00038 */ sh $zero, 0x38($a3)
|
|
/* 0A6EF4 7F074504 000B6140 */ sll $t4, $t3, 5
|
|
/* 0A6EF8 7F074508 258DFFFF */ addiu $t5, $t4, -1
|
|
/* 0A6EFC 7F07450C A4ED002A */ sh $t5, 0x2a($a3)
|
|
/* 0A6F00 7F074510 906F0005 */ lbu $t7, 5($v1)
|
|
/* 0A6F04 7F074514 000F7140 */ sll $t6, $t7, 5
|
|
/* 0A6F08 7F074518 25C9FFFF */ addiu $t1, $t6, -1
|
|
/* 0A6F0C 7F07451C A4E9003A */ sh $t1, 0x3a($a3)
|
|
/* 0A6F10 7F074520 0FC1CC67 */ jal sub_GAME_7F073038
|
|
/* 0A6F14 7F074524 AFA70054 */ sw $a3, 0x54($sp)
|
|
/* 0A6F18 7F074528 10000004 */ b .L7F07453C
|
|
/* 0A6F1C 7F07452C 8FA70054 */ lw $a3, 0x54($sp)
|
|
.L7F074530:
|
|
/* 0A6F20 7F074530 0FC1CC67 */ jal sub_GAME_7F073038
|
|
/* 0A6F24 7F074534 AFA70054 */ sw $a3, 0x54($sp)
|
|
/* 0A6F28 7F074538 8FA70054 */ lw $a3, 0x54($sp)
|
|
.L7F07453C:
|
|
/* 0A6F2C 7F07453C 8E03000C */ lw $v1, 0xc($s0)
|
|
/* 0A6F30 7F074540 3C18B700 */ lui $t8, 0xb700
|
|
/* 0A6F34 7F074544 24192000 */ li $t9, 8192
|
|
/* 0A6F38 7F074548 246A0008 */ addiu $t2, $v1, 8
|
|
/* 0A6F3C 7F07454C AE0A000C */ sw $t2, 0xc($s0)
|
|
/* 0A6F40 7F074550 AC780000 */ sw $t8, ($v1)
|
|
/* 0A6F44 7F074554 AC790004 */ sw $t9, 4($v1)
|
|
/* 0A6F48 7F074558 8E03000C */ lw $v1, 0xc($s0)
|
|
/* 0A6F4C 7F07455C 3C0C0102 */ lui $t4, (0x01020040 >> 16) # lui $t4, 0x102
|
|
/* 0A6F50 7F074560 358C0040 */ ori $t4, (0x01020040 & 0xFFFF) # ori $t4, $t4, 0x40
|
|
/* 0A6F54 7F074564 246B0008 */ addiu $t3, $v1, 8
|
|
/* 0A6F58 7F074568 AE0B000C */ sw $t3, 0xc($s0)
|
|
/* 0A6F5C 7F07456C AC6C0000 */ sw $t4, ($v1)
|
|
/* 0A6F60 7F074570 AFA70054 */ sw $a3, 0x54($sp)
|
|
/* 0A6F64 7F074574 8FA40070 */ lw $a0, 0x70($sp)
|
|
/* 0A6F68 7F074578 0C003838 */ jal osVirtualToPhysical
|
|
/* 0A6F6C 7F07457C AFA3002C */ sw $v1, 0x2c($sp)
|
|
/* 0A6F70 7F074580 8FA5002C */ lw $a1, 0x2c($sp)
|
|
/* 0A6F74 7F074584 8FA40054 */ lw $a0, 0x54($sp)
|
|
/* 0A6F78 7F074588 3C0F0430 */ lui $t7, (0x04300040 >> 16) # lui $t7, 0x430
|
|
/* 0A6F7C 7F07458C ACA20004 */ sw $v0, 4($a1)
|
|
/* 0A6F80 7F074590 8E03000C */ lw $v1, 0xc($s0)
|
|
/* 0A6F84 7F074594 35EF0040 */ ori $t7, (0x04300040 & 0xFFFF) # ori $t7, $t7, 0x40
|
|
/* 0A6F88 7F074598 246D0008 */ addiu $t5, $v1, 8
|
|
/* 0A6F8C 7F07459C AE0D000C */ sw $t5, 0xc($s0)
|
|
/* 0A6F90 7F0745A0 AC6F0000 */ sw $t7, ($v1)
|
|
/* 0A6F94 7F0745A4 0C003838 */ jal osVirtualToPhysical
|
|
/* 0A6F98 7F0745A8 AFA30028 */ sw $v1, 0x28($sp)
|
|
/* 0A6F9C 7F0745AC 8FA60028 */ lw $a2, 0x28($sp)
|
|
/* 0A6FA0 7F0745B0 3C09B100 */ lui $t1, (0xB1000002 >> 16) # lui $t1, 0xb100
|
|
/* 0A6FA4 7F0745B4 35290002 */ ori $t1, (0xB1000002 & 0xFFFF) # ori $t1, $t1, 2
|
|
/* 0A6FA8 7F0745B8 ACC20004 */ sw $v0, 4($a2)
|
|
/* 0A6FAC 7F0745BC 8E03000C */ lw $v1, 0xc($s0)
|
|
/* 0A6FB0 7F0745C0 240A3210 */ li $t2, 12816
|
|
/* 0A6FB4 7F0745C4 246E0008 */ addiu $t6, $v1, 8
|
|
/* 0A6FB8 7F0745C8 AE0E000C */ sw $t6, 0xc($s0)
|
|
/* 0A6FBC 7F0745CC AC6A0004 */ sw $t2, 4($v1)
|
|
/* 0A6FC0 7F0745D0 AC690000 */ sw $t1, ($v1)
|
|
.L7F0745D4:
|
|
/* 0A6FC4 7F0745D4 8FBF001C */ lw $ra, 0x1c($sp)
|
|
/* 0A6FC8 7F0745D8 8FB00018 */ lw $s0, 0x18($sp)
|
|
/* 0A6FCC 7F0745DC 27BD0078 */ addiu $sp, $sp, 0x78
|
|
/* 0A6FD0 7F0745E0 03E00008 */ jr $ra
|
|
/* 0A6FD4 7F0745E4 00000000 */ nop
|
|
)
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
void sub_GAME_7F074514(s32 param_1,struct Model *param_2,struct ModelNode *param_3)
|
|
{
|
|
return;
|
|
}
|
|
|
|
|
|
void sub_GAME_7F074524(Gfx *param_1,struct Model *param_2, struct ModelNode *param_3)
|
|
{
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void sub_GAME_7F074534(ModelRenderData* data, Model* model, ModelNode* node) {
|
|
u32 id = node->Opcode & 0xFF;
|
|
switch (id) {
|
|
case MODELNODE_OPCODE_LOD:
|
|
modelApplyDistanceRelations(model, node);
|
|
return;
|
|
case MODELNODE_OPCODE_SWITCH:
|
|
modelApplyToggleRelations(model, node);
|
|
return;
|
|
case MODELNODE_OPCODE_HEAD:
|
|
modelApplyHeadRelations(model, node);
|
|
return;
|
|
case MODELNODE_OPCODE_BSP:
|
|
modelApplyReorderRelations(model, node);
|
|
return;
|
|
case MODELNODE_OPCODE_OP11:
|
|
sub_GAME_7F0737FC(data, model, node);
|
|
return;
|
|
case MODELNODE_OPCODE_GUNFIRE:
|
|
dogfnegx(data, model, node);
|
|
return;
|
|
case MODELNODE_OPCODE_SHADOW:
|
|
doshadow(data, model, node);
|
|
return;
|
|
case MODELNODE_OPCODE_BBOX:
|
|
sub_GAME_7F074514(data, model, node);
|
|
return;
|
|
case MODELNODE_OPCODE_OP17:
|
|
sub_GAME_7F074524(data, model, node);
|
|
return;
|
|
case MODELNODE_OPCODE_DL:
|
|
modelRenderNodeGundl(data, node);
|
|
return;
|
|
case MODELNODE_OPCODE_DLCOLLISION:
|
|
modelRenderNodeDl(data, model, node);
|
|
return;
|
|
case MODELNODE_OPCODE_OP20:
|
|
sub_GAME_7F072C10(data, model, node);
|
|
return;
|
|
case MODELNODE_OPCODE_DLPRIMARY:
|
|
dorottex(data, node);
|
|
return;
|
|
case MODELNODE_OPCODE_OP05:
|
|
sub_GAME_7F07306C(data, model, node);
|
|
return;
|
|
case MODELNODE_OPCODE_OP07:
|
|
dotube(data, model, node);
|
|
return;
|
|
case MODELNODE_OPCODE_OP06:
|
|
sub_GAME_7F0737EC(data,model,node);
|
|
return;
|
|
case MODELNODE_OPCODE_HEADER:
|
|
case MODELNODE_OPCODE_GROUP:
|
|
case MODELNODE_OPCODE_OP03:
|
|
case MODELNODE_OPCODE_OP14:
|
|
case MODELNODE_OPCODE_INTERLINK:
|
|
case MODELNODE_OPCODE_OP16:
|
|
default:
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef NONMATCHING
|
|
void subdraw(void) {
|
|
|
|
}
|
|
#else
|
|
#ifndef VERSION_EU
|
|
//D:80054AB4
|
|
const char aSubdrawNoGfxlist[] = "subdraw: no gfxlist!\n";
|
|
//D:80054ACC
|
|
const char aSubdrawObjectNotInitialised0xX[] = "subdraw: object not initialised! (0x%X)\n";
|
|
GLOBAL_ASM(
|
|
.text
|
|
glabel subdraw
|
|
/* 0A91B4 7F074684 27BDFFD0 */ addiu $sp, $sp, -0x30
|
|
/* 0A91B8 7F074688 AFBF0024 */ sw $ra, 0x24($sp)
|
|
/* 0A91BC 7F07468C AFB20020 */ sw $s2, 0x20($sp)
|
|
/* 0A91C0 7F074690 AFB1001C */ sw $s1, 0x1c($sp)
|
|
/* 0A91C4 7F074694 AFB00018 */ sw $s0, 0x18($sp)
|
|
/* 0A91C8 7F074698 8C8E000C */ lw $t6, 0xc($a0)
|
|
/* 0A91CC 7F07469C 8CA20008 */ lw $v0, 8($a1)
|
|
/* 0A91D0 7F0746A0 00808825 */ move $s1, $a0
|
|
/* 0A91D4 7F0746A4 00A09025 */ move $s2, $a1
|
|
/* 0A91D8 7F0746A8 15C00007 */ bnez $t6, .L7F0746C8
|
|
/* 0A91DC 7F0746AC 8C500000 */ lw $s0, ($v0)
|
|
/* 0A91E0 7F0746B0 3C048005 */ lui $a0, %hi(aSubdrawNoGfxlist)
|
|
/* 0A91E4 7F0746B4 0C0033D1 */ jal osSyncPrintf
|
|
/* 0A91E8 7F0746B8 24844AB4 */ addiu $a0, %lo(aSubdrawNoGfxlist) # addiu $a0, $a0, 0x4ab4
|
|
/* 0A91EC 7F0746BC 0FC1B11B */ jal return_null
|
|
/* 0A91F0 7F0746C0 00000000 */ nop
|
|
/* 0A91F4 7F0746C4 8E420008 */ lw $v0, 8($s2)
|
|
.L7F0746C8:
|
|
/* 0A91F8 7F0746C8 8C4F001C */ lw $t7, 0x1c($v0)
|
|
/* 0A91FC 7F0746CC 3C048005 */ lui $a0, %hi(aSubdrawObjectNotInitialised0xX)
|
|
/* 0A9200 7F0746D0 24844ACC */ addiu $a0, %lo(aSubdrawObjectNotInitialised0xX) # addiu $a0, $a0, 0x4acc
|
|
/* 0A9204 7F0746D4 11E00003 */ beqz $t7, .L7F0746E4
|
|
/* 0A9208 7F0746D8 00000000 */ nop
|
|
/* 0A920C 7F0746DC 10000006 */ b .L7F0746F8
|
|
/* 0A9210 7F0746E0 8E22000C */ lw $v0, 0xc($s1)
|
|
.L7F0746E4:
|
|
/* 0A9214 7F0746E4 0C0033D1 */ jal osSyncPrintf
|
|
/* 0A9218 7F0746E8 00402825 */ move $a1, $v0
|
|
/* 0A921C 7F0746EC 0FC1B11B */ jal return_null
|
|
/* 0A9220 7F0746F0 00000000 */ nop
|
|
/* 0A9224 7F0746F4 8E22000C */ lw $v0, 0xc($s1)
|
|
.L7F0746F8:
|
|
/* 0A9228 7F0746F8 24580008 */ addiu $t8, $v0, 8
|
|
/* 0A922C 7F0746FC 3C19BC00 */ lui $t9, (0xBC000C06 >> 16) # lui $t9, 0xbc00
|
|
/* 0A9230 7F074700 37390C06 */ ori $t9, (0xBC000C06 & 0xFFFF) # ori $t9, $t9, 0xc06
|
|
/* 0A9234 7F074704 AE38000C */ sw $t8, 0xc($s1)
|
|
/* 0A9238 7F074708 AC590000 */ sw $t9, ($v0)
|
|
/* 0A923C 7F07470C 8E44000C */ lw $a0, 0xc($s2)
|
|
/* 0A9240 7F074710 0C003A2C */ jal osVirtualToPhysical
|
|
/* 0A9244 7F074714 AFA20028 */ sw $v0, 0x28($sp)
|
|
/* 0A9248 7F074718 8FA30028 */ lw $v1, 0x28($sp)
|
|
/* 0A924C 7F07471C 12000016 */ beqz $s0, .L7F074778
|
|
/* 0A9250 7F074720 AC620004 */ sw $v0, 4($v1)
|
|
/* 0A9254 7F074724 02202025 */ move $a0, $s1
|
|
.L7F074728:
|
|
/* 0A9258 7F074728 02402825 */ move $a1, $s2
|
|
/* 0A925C 7F07472C 0FC1D14D */ jal sub_GAME_7F074534
|
|
/* 0A9260 7F074730 02003025 */ move $a2, $s0
|
|
/* 0A9264 7F074734 8E020014 */ lw $v0, 0x14($s0)
|
|
/* 0A9268 7F074738 10400003 */ beqz $v0, .L7F074748
|
|
/* 0A926C 7F07473C 00000000 */ nop
|
|
/* 0A9270 7F074740 1000000B */ b .L7F074770
|
|
/* 0A9274 7F074744 00408025 */ move $s0, $v0
|
|
.L7F074748:
|
|
/* 0A9278 7F074748 12000009 */ beqz $s0, .L7F074770
|
|
/* 0A927C 7F07474C 00000000 */ nop
|
|
/* 0A9280 7F074750 8E02000C */ lw $v0, 0xc($s0)
|
|
.L7F074754:
|
|
/* 0A9284 7F074754 50400004 */ beql $v0, $zero, .L7F074768
|
|
/* 0A9288 7F074758 8E100008 */ lw $s0, 8($s0)
|
|
/* 0A928C 7F07475C 10000004 */ b .L7F074770
|
|
/* 0A9290 7F074760 00408025 */ move $s0, $v0
|
|
/* 0A9294 7F074764 8E100008 */ lw $s0, 8($s0)
|
|
.L7F074768:
|
|
/* 0A9298 7F074768 5600FFFA */ bnezl $s0, .L7F074754
|
|
/* 0A929C 7F07476C 8E02000C */ lw $v0, 0xc($s0)
|
|
.L7F074770:
|
|
/* 0A92A0 7F074770 5600FFED */ bnezl $s0, .L7F074728
|
|
/* 0A92A4 7F074774 02202025 */ move $a0, $s1
|
|
.L7F074778:
|
|
/* 0A92A8 7F074778 8FBF0024 */ lw $ra, 0x24($sp)
|
|
/* 0A92AC 7F07477C 8FB00018 */ lw $s0, 0x18($sp)
|
|
/* 0A92B0 7F074780 8FB1001C */ lw $s1, 0x1c($sp)
|
|
/* 0A92B4 7F074784 8FB20020 */ lw $s2, 0x20($sp)
|
|
/* 0A92B8 7F074788 03E00008 */ jr $ra
|
|
/* 0A92BC 7F07478C 27BD0030 */ addiu $sp, $sp, 0x30
|
|
)
|
|
#endif
|
|
#ifdef VERSION_EU
|
|
GLOBAL_ASM(
|
|
.text
|
|
glabel subdraw
|
|
/* 0A7148 7F074758 27BDFFD0 */ addiu $sp, $sp, -0x30
|
|
/* 0A714C 7F07475C AFBF0024 */ sw $ra, 0x24($sp)
|
|
/* 0A7150 7F074760 AFB20020 */ sw $s2, 0x20($sp)
|
|
/* 0A7154 7F074764 AFB1001C */ sw $s1, 0x1c($sp)
|
|
/* 0A7158 7F074768 AFB00018 */ sw $s0, 0x18($sp)
|
|
/* 0A715C 7F07476C 8CAE0008 */ lw $t6, 8($a1)
|
|
/* 0A7160 7F074770 8C82000C */ lw $v0, 0xc($a0)
|
|
/* 0A7164 7F074774 3C18BC00 */ lui $t8, (0xBC000C06 >> 16) # lui $t8, 0xbc00
|
|
/* 0A7168 7F074778 8DD00000 */ lw $s0, ($t6)
|
|
/* 0A716C 7F07477C 244F0008 */ addiu $t7, $v0, 8
|
|
/* 0A7170 7F074780 AC8F000C */ sw $t7, 0xc($a0)
|
|
/* 0A7174 7F074784 37180C06 */ ori $t8, (0xBC000C06 & 0xFFFF) # ori $t8, $t8, 0xc06
|
|
/* 0A7178 7F074788 00809025 */ move $s2, $a0
|
|
/* 0A717C 7F07478C AC580000 */ sw $t8, ($v0)
|
|
/* 0A7180 7F074790 8CA4000C */ lw $a0, 0xc($a1)
|
|
/* 0A7184 7F074794 00A08825 */ move $s1, $a1
|
|
/* 0A7188 7F074798 0C003838 */ jal osVirtualToPhysical
|
|
/* 0A718C 7F07479C AFA20028 */ sw $v0, 0x28($sp)
|
|
/* 0A7190 7F0747A0 8FA30028 */ lw $v1, 0x28($sp)
|
|
/* 0A7194 7F0747A4 12000016 */ beqz $s0, .L7F074800
|
|
/* 0A7198 7F0747A8 AC620004 */ sw $v0, 4($v1)
|
|
/* 0A719C 7F0747AC 02402025 */ move $a0, $s2
|
|
.L7F0747B0:
|
|
/* 0A71A0 7F0747B0 02202825 */ move $a1, $s1
|
|
/* 0A71A4 7F0747B4 0FC1D182 */ jal sub_GAME_7F074534
|
|
/* 0A71A8 7F0747B8 02003025 */ move $a2, $s0
|
|
/* 0A71AC 7F0747BC 8E020014 */ lw $v0, 0x14($s0)
|
|
/* 0A71B0 7F0747C0 10400003 */ beqz $v0, .L7F0747D0
|
|
/* 0A71B4 7F0747C4 00000000 */ nop
|
|
/* 0A71B8 7F0747C8 1000000B */ b .L7F0747F8
|
|
/* 0A71BC 7F0747CC 00408025 */ move $s0, $v0
|
|
.L7F0747D0:
|
|
/* 0A71C0 7F0747D0 12000009 */ beqz $s0, .L7F0747F8
|
|
/* 0A71C4 7F0747D4 00000000 */ nop
|
|
/* 0A71C8 7F0747D8 8E02000C */ lw $v0, 0xc($s0)
|
|
.L7F0747DC:
|
|
/* 0A71CC 7F0747DC 50400004 */ beql $v0, $zero, .L7F0747F0
|
|
/* 0A71D0 7F0747E0 8E100008 */ lw $s0, 8($s0)
|
|
/* 0A71D4 7F0747E4 10000004 */ b .L7F0747F8
|
|
/* 0A71D8 7F0747E8 00408025 */ move $s0, $v0
|
|
/* 0A71DC 7F0747EC 8E100008 */ lw $s0, 8($s0)
|
|
.L7F0747F0:
|
|
/* 0A71E0 7F0747F0 5600FFFA */ bnezl $s0, .L7F0747DC
|
|
/* 0A71E4 7F0747F4 8E02000C */ lw $v0, 0xc($s0)
|
|
.L7F0747F8:
|
|
/* 0A71E8 7F0747F8 5600FFED */ bnezl $s0, .L7F0747B0
|
|
/* 0A71EC 7F0747FC 02402025 */ move $a0, $s2
|
|
.L7F074800:
|
|
/* 0A71F0 7F074800 8FBF0024 */ lw $ra, 0x24($sp)
|
|
/* 0A71F4 7F074804 8FB00018 */ lw $s0, 0x18($sp)
|
|
/* 0A71F8 7F074808 8FB1001C */ lw $s1, 0x1c($sp)
|
|
/* 0A71FC 7F07480C 8FB20020 */ lw $s2, 0x20($sp)
|
|
/* 0A7200 7F074810 03E00008 */ jr $ra
|
|
/* 0A7204 7F074814 27BD0030 */ addiu $sp, $sp, 0x30
|
|
)
|
|
#endif
|
|
#endif
|
|
|
|
|
|
void sub_GAME_7F074790(struct unk_joint_list* arg0, Model* arg1)
|
|
{
|
|
subcalcpos(arg1);
|
|
subcalcmatrices(arg0, arg1);
|
|
subdraw((s32) arg0, arg1);
|
|
}
|
|
|
|
|
|
#ifdef NONMATCHING
|
|
void sub_GAME_7F0747D0(void) {
|
|
|
|
}
|
|
#else
|
|
GLOBAL_ASM(
|
|
.text
|
|
glabel sub_GAME_7F0747D0
|
|
/* 0A9300 7F0747D0 C4A00000 */ lwc1 $f0, ($a1)
|
|
/* 0A9304 7F0747D4 C4A20004 */ lwc1 $f2, 4($a1)
|
|
/* 0A9308 7F0747D8 27BDFF48 */ addiu $sp, $sp, -0xb8
|
|
/* 0A930C 7F0747DC 46000402 */ mul.s $f16, $f0, $f0
|
|
/* 0A9310 7F0747E0 00000000 */ nop
|
|
/* 0A9314 7F0747E4 46021102 */ mul.s $f4, $f2, $f2
|
|
/* 0A9318 7F0747E8 E7A400B0 */ swc1 $f4, 0xb0($sp)
|
|
/* 0A931C 7F0747EC C4AC0008 */ lwc1 $f12, 8($a1)
|
|
/* 0A9320 7F0747F0 C7A800B0 */ lwc1 $f8, 0xb0($sp)
|
|
/* 0A9324 7F0747F4 460C6182 */ mul.s $f6, $f12, $f12
|
|
/* 0A9328 7F0747F8 46088280 */ add.s $f10, $f16, $f8
|
|
/* 0A932C 7F0747FC E7A600AC */ swc1 $f6, 0xac($sp)
|
|
/* 0A9330 7F074800 C7A400AC */ lwc1 $f4, 0xac($sp)
|
|
/* 0A9334 7F074804 C4860004 */ lwc1 $f6, 4($a0)
|
|
/* 0A9338 7F074808 46045380 */ add.s $f14, $f10, $f4
|
|
/* 0A933C 7F07480C 46007387 */ neg.s $f14, $f14
|
|
/* 0A9340 7F074810 46067202 */ mul.s $f8, $f14, $f6
|
|
/* 0A9344 7F074814 E7A800A4 */ swc1 $f8, 0xa4($sp)
|
|
/* 0A9348 7F074818 C48A0008 */ lwc1 $f10, 8($a0)
|
|
/* 0A934C 7F07481C 460A7102 */ mul.s $f4, $f14, $f10
|
|
/* 0A9350 7F074820 E7A400A0 */ swc1 $f4, 0xa0($sp)
|
|
/* 0A9354 7F074824 C4E60008 */ lwc1 $f6, 8($a3)
|
|
/* 0A9358 7F074828 E7A60014 */ swc1 $f6, 0x14($sp)
|
|
/* 0A935C 7F07482C C4E80000 */ lwc1 $f8, ($a3)
|
|
/* 0A9360 7F074830 E7A80010 */ swc1 $f8, 0x10($sp)
|
|
/* 0A9364 7F074834 C4EA0004 */ lwc1 $f10, 4($a3)
|
|
/* 0A9368 7F074838 C7A40010 */ lwc1 $f4, 0x10($sp)
|
|
/* 0A936C 7F07483C E7AA000C */ swc1 $f10, 0xc($sp)
|
|
/* 0A9370 7F074840 46040182 */ mul.s $f6, $f0, $f4
|
|
/* 0A9374 7F074844 C7A8000C */ lwc1 $f8, 0xc($sp)
|
|
/* 0A9378 7F074848 46081282 */ mul.s $f10, $f2, $f8
|
|
/* 0A937C 7F07484C C7A80014 */ lwc1 $f8, 0x14($sp)
|
|
/* 0A9380 7F074850 460A3100 */ add.s $f4, $f6, $f10
|
|
/* 0A9384 7F074854 460C4182 */ mul.s $f6, $f8, $f12
|
|
/* 0A9388 7F074858 46043280 */ add.s $f10, $f6, $f4
|
|
/* 0A938C 7F07485C E7AA009C */ swc1 $f10, 0x9c($sp)
|
|
/* 0A9390 7F074860 C4A60038 */ lwc1 $f6, 0x38($a1)
|
|
/* 0A9394 7F074864 C4C80008 */ lwc1 $f8, 8($a2)
|
|
/* 0A9398 7F074868 46064101 */ sub.s $f4, $f8, $f6
|
|
/* 0A939C 7F07486C E7A40008 */ swc1 $f4, 8($sp)
|
|
/* 0A93A0 7F074870 C4A60030 */ lwc1 $f6, 0x30($a1)
|
|
/* 0A93A4 7F074874 C4C80000 */ lwc1 $f8, ($a2)
|
|
/* 0A93A8 7F074878 46064101 */ sub.s $f4, $f8, $f6
|
|
/* 0A93AC 7F07487C E7A40004 */ swc1 $f4, 4($sp)
|
|
/* 0A93B0 7F074880 C4A60034 */ lwc1 $f6, 0x34($a1)
|
|
/* 0A93B4 7F074884 C4C80004 */ lwc1 $f8, 4($a2)
|
|
/* 0A93B8 7F074888 46064101 */ sub.s $f4, $f8, $f6
|
|
/* 0A93BC 7F07488C C7A80004 */ lwc1 $f8, 4($sp)
|
|
/* 0A93C0 7F074890 E7A40000 */ swc1 $f4, ($sp)
|
|
/* 0A93C4 7F074894 46080182 */ mul.s $f6, $f0, $f8
|
|
/* 0A93C8 7F074898 C7A40000 */ lwc1 $f4, ($sp)
|
|
/* 0A93CC 7F07489C 46041202 */ mul.s $f8, $f2, $f4
|
|
/* 0A93D0 7F0748A0 46083100 */ add.s $f4, $f6, $f8
|
|
/* 0A93D4 7F0748A4 C7A60008 */ lwc1 $f6, 8($sp)
|
|
/* 0A93D8 7F0748A8 460C3202 */ mul.s $f8, $f6, $f12
|
|
/* 0A93DC 7F0748AC 44806000 */ mtc1 $zero, $f12
|
|
/* 0A93E0 7F0748B0 C7A600A0 */ lwc1 $f6, 0xa0($sp)
|
|
/* 0A93E4 7F0748B4 460C503C */ c.lt.s $f10, $f12
|
|
/* 0A93E8 7F0748B8 46044480 */ add.s $f18, $f8, $f4
|
|
/* 0A93EC 7F0748BC C7A800A4 */ lwc1 $f8, 0xa4($sp)
|
|
/* 0A93F0 7F0748C0 46069000 */ add.s $f0, $f18, $f6
|
|
/* 0A93F4 7F0748C4 46089480 */ add.s $f18, $f18, $f8
|
|
/* 0A93F8 7F0748C8 46000007 */ neg.s $f0, $f0
|
|
/* 0A93FC 7F0748CC 45000005 */ bc1f .L7F0748E4
|
|
/* 0A9400 7F0748D0 46009487 */ neg.s $f18, $f18
|
|
/* 0A9404 7F0748D4 46005107 */ neg.s $f4, $f10
|
|
/* 0A9408 7F0748D8 46009487 */ neg.s $f18, $f18
|
|
/* 0A940C 7F0748DC E7A4009C */ swc1 $f4, 0x9c($sp)
|
|
/* 0A9410 7F0748E0 46000007 */ neg.s $f0, $f0
|
|
.L7F0748E4:
|
|
/* 0A9414 7F0748E4 460C903C */ c.lt.s $f18, $f12
|
|
/* 0A9418 7F0748E8 00000000 */ nop
|
|
/* 0A941C 7F0748EC 45020008 */ bc1fl .L7F074910
|
|
/* 0A9420 7F0748F0 4612003C */ c.lt.s $f0, $f18
|
|
/* 0A9424 7F0748F4 460C003C */ c.lt.s $f0, $f12
|
|
/* 0A9428 7F0748F8 00000000 */ nop
|
|
/* 0A942C 7F0748FC 45020004 */ bc1fl .L7F074910
|
|
/* 0A9430 7F074900 4612003C */ c.lt.s $f0, $f18
|
|
/* 0A9434 7F074904 100000D6 */ b .L7F074C60
|
|
/* 0A9438 7F074908 00001025 */ move $v0, $zero
|
|
/* 0A943C 7F07490C 4612003C */ c.lt.s $f0, $f18
|
|
.L7F074910:
|
|
/* 0A9440 7F074910 E7A00094 */ swc1 $f0, 0x94($sp)
|
|
/* 0A9444 7F074914 45020005 */ bc1fl .L7F07492C
|
|
/* 0A9448 7F074918 C4A00010 */ lwc1 $f0, 0x10($a1)
|
|
/* 0A944C 7F07491C 46009086 */ mov.s $f2, $f18
|
|
/* 0A9450 7F074920 46000486 */ mov.s $f18, $f0
|
|
/* 0A9454 7F074924 E7A20094 */ swc1 $f2, 0x94($sp)
|
|
/* 0A9458 7F074928 C4A00010 */ lwc1 $f0, 0x10($a1)
|
|
.L7F07492C:
|
|
/* 0A945C 7F07492C 46000182 */ mul.s $f6, $f0, $f0
|
|
/* 0A9460 7F074930 E7A60088 */ swc1 $f6, 0x88($sp)
|
|
/* 0A9464 7F074934 C4A20014 */ lwc1 $f2, 0x14($a1)
|
|
/* 0A9468 7F074938 C7A40088 */ lwc1 $f4, 0x88($sp)
|
|
/* 0A946C 7F07493C 46021202 */ mul.s $f8, $f2, $f2
|
|
/* 0A9470 7F074940 E7A80084 */ swc1 $f8, 0x84($sp)
|
|
/* 0A9474 7F074944 C4AC0018 */ lwc1 $f12, 0x18($a1)
|
|
/* 0A9478 7F074948 C7A60084 */ lwc1 $f6, 0x84($sp)
|
|
/* 0A947C 7F07494C 460C6282 */ mul.s $f10, $f12, $f12
|
|
/* 0A9480 7F074950 46062200 */ add.s $f8, $f4, $f6
|
|
/* 0A9484 7F074954 E7AA0080 */ swc1 $f10, 0x80($sp)
|
|
/* 0A9488 7F074958 C7AA0080 */ lwc1 $f10, 0x80($sp)
|
|
/* 0A948C 7F07495C C484000C */ lwc1 $f4, 0xc($a0)
|
|
/* 0A9490 7F074960 460A4380 */ add.s $f14, $f8, $f10
|
|
/* 0A9494 7F074964 46007387 */ neg.s $f14, $f14
|
|
/* 0A9498 7F074968 46047182 */ mul.s $f6, $f14, $f4
|
|
/* 0A949C 7F07496C C7A40010 */ lwc1 $f4, 0x10($sp)
|
|
/* 0A94A0 7F074970 E7A60078 */ swc1 $f6, 0x78($sp)
|
|
/* 0A94A4 7F074974 C4880010 */ lwc1 $f8, 0x10($a0)
|
|
/* 0A94A8 7F074978 46087282 */ mul.s $f10, $f14, $f8
|
|
/* 0A94AC 7F07497C C7A8000C */ lwc1 $f8, 0xc($sp)
|
|
/* 0A94B0 7F074980 46040182 */ mul.s $f6, $f0, $f4
|
|
/* 0A94B4 7F074984 E7AA0074 */ swc1 $f10, 0x74($sp)
|
|
/* 0A94B8 7F074988 46081282 */ mul.s $f10, $f2, $f8
|
|
/* 0A94BC 7F07498C C7A80014 */ lwc1 $f8, 0x14($sp)
|
|
/* 0A94C0 7F074990 460A3100 */ add.s $f4, $f6, $f10
|
|
/* 0A94C4 7F074994 460C4182 */ mul.s $f6, $f8, $f12
|
|
/* 0A94C8 7F074998 C7A80004 */ lwc1 $f8, 4($sp)
|
|
/* 0A94CC 7F07499C 46043280 */ add.s $f10, $f6, $f4
|
|
/* 0A94D0 7F0749A0 46080182 */ mul.s $f6, $f0, $f8
|
|
/* 0A94D4 7F0749A4 C7A40000 */ lwc1 $f4, ($sp)
|
|
/* 0A94D8 7F0749A8 E7AA0070 */ swc1 $f10, 0x70($sp)
|
|
/* 0A94DC 7F0749AC 46041202 */ mul.s $f8, $f2, $f4
|
|
/* 0A94E0 7F0749B0 46005386 */ mov.s $f14, $f10
|
|
/* 0A94E4 7F0749B4 46083100 */ add.s $f4, $f6, $f8
|
|
/* 0A94E8 7F0749B8 C7A60008 */ lwc1 $f6, 8($sp)
|
|
/* 0A94EC 7F0749BC 460C3202 */ mul.s $f8, $f6, $f12
|
|
/* 0A94F0 7F0749C0 44806000 */ mtc1 $zero, $f12
|
|
/* 0A94F4 7F0749C4 C7A60074 */ lwc1 $f6, 0x74($sp)
|
|
/* 0A94F8 7F0749C8 460C503C */ c.lt.s $f10, $f12
|
|
/* 0A94FC 7F0749CC 46044400 */ add.s $f16, $f8, $f4
|
|
/* 0A9500 7F0749D0 C7A80078 */ lwc1 $f8, 0x78($sp)
|
|
/* 0A9504 7F0749D4 C7A4009C */ lwc1 $f4, 0x9c($sp)
|
|
/* 0A9508 7F0749D8 46068000 */ add.s $f0, $f16, $f6
|
|
/* 0A950C 7F0749DC 46088400 */ add.s $f16, $f16, $f8
|
|
/* 0A9510 7F0749E0 46000007 */ neg.s $f0, $f0
|
|
/* 0A9514 7F0749E4 45000004 */ bc1f .L7F0749F8
|
|
/* 0A9518 7F0749E8 46008407 */ neg.s $f16, $f16
|
|
/* 0A951C 7F0749EC 46005387 */ neg.s $f14, $f10
|
|
/* 0A9520 7F0749F0 46008407 */ neg.s $f16, $f16
|
|
/* 0A9524 7F0749F4 46000007 */ neg.s $f0, $f0
|
|
.L7F0749F8:
|
|
/* 0A9528 7F0749F8 460C803C */ c.lt.s $f16, $f12
|
|
/* 0A952C 7F0749FC 00000000 */ nop
|
|
/* 0A9530 7F074A00 45020008 */ bc1fl .L7F074A24
|
|
/* 0A9534 7F074A04 4610003C */ c.lt.s $f0, $f16
|
|
/* 0A9538 7F074A08 460C003C */ c.lt.s $f0, $f12
|
|
/* 0A953C 7F074A0C 00000000 */ nop
|
|
/* 0A9540 7F074A10 45020004 */ bc1fl .L7F074A24
|
|
/* 0A9544 7F074A14 4610003C */ c.lt.s $f0, $f16
|
|
/* 0A9548 7F074A18 10000091 */ b .L7F074C60
|
|
/* 0A954C 7F074A1C 00001025 */ move $v0, $zero
|
|
/* 0A9550 7F074A20 4610003C */ c.lt.s $f0, $f16
|
|
.L7F074A24:
|
|
/* 0A9554 7F074A24 C7A80094 */ lwc1 $f8, 0x94($sp)
|
|
/* 0A9558 7F074A28 45000004 */ bc1f .L7F074A3C
|
|
/* 0A955C 7F074A2C 00000000 */ nop
|
|
/* 0A9560 7F074A30 46008086 */ mov.s $f2, $f16
|
|
/* 0A9564 7F074A34 46000406 */ mov.s $f16, $f0
|
|
/* 0A9568 7F074A38 46001006 */ mov.s $f0, $f2
|
|
.L7F074A3C:
|
|
/* 0A956C 7F074A3C 46048302 */ mul.s $f12, $f16, $f4
|
|
/* 0A9570 7F074A40 00000000 */ nop
|
|
/* 0A9574 7F074A44 460E9082 */ mul.s $f2, $f18, $f14
|
|
/* 0A9578 7F074A48 4602603C */ c.lt.s $f12, $f2
|
|
/* 0A957C 7F074A4C 00000000 */ nop
|
|
/* 0A9580 7F074A50 4500000E */ bc1f .L7F074A8C
|
|
/* 0A9584 7F074A54 00000000 */ nop
|
|
/* 0A9588 7F074A58 46040302 */ mul.s $f12, $f0, $f4
|
|
/* 0A958C 7F074A5C 4602603C */ c.lt.s $f12, $f2
|
|
/* 0A9590 7F074A60 00000000 */ nop
|
|
/* 0A9594 7F074A64 45020004 */ bc1fl .L7F074A78
|
|
/* 0A9598 7F074A68 C7A60094 */ lwc1 $f6, 0x94($sp)
|
|
/* 0A959C 7F074A6C 1000007C */ b .L7F074C60
|
|
/* 0A95A0 7F074A70 00001025 */ move $v0, $zero
|
|
/* 0A95A4 7F074A74 C7A60094 */ lwc1 $f6, 0x94($sp)
|
|
.L7F074A78:
|
|
/* 0A95A8 7F074A78 C7AA009C */ lwc1 $f10, 0x9c($sp)
|
|
/* 0A95AC 7F074A7C E7B2005C */ swc1 $f18, 0x5c($sp)
|
|
/* 0A95B0 7F074A80 460E3082 */ mul.s $f2, $f6, $f14
|
|
/* 0A95B4 7F074A84 1000000D */ b .L7F074ABC
|
|
/* 0A95B8 7F074A88 E7AA0058 */ swc1 $f10, 0x58($sp)
|
|
.L7F074A8C:
|
|
/* 0A95BC 7F074A8C 460E4082 */ mul.s $f2, $f8, $f14
|
|
/* 0A95C0 7F074A90 460C103C */ c.lt.s $f2, $f12
|
|
/* 0A95C4 7F074A94 00000000 */ nop
|
|
/* 0A95C8 7F074A98 45020004 */ bc1fl .L7F074AAC
|
|
/* 0A95CC 7F074A9C C7A4009C */ lwc1 $f4, 0x9c($sp)
|
|
/* 0A95D0 7F074AA0 1000006F */ b .L7F074C60
|
|
/* 0A95D4 7F074AA4 00001025 */ move $v0, $zero
|
|
/* 0A95D8 7F074AA8 C7A4009C */ lwc1 $f4, 0x9c($sp)
|
|
.L7F074AAC:
|
|
/* 0A95DC 7F074AAC E7B0005C */ swc1 $f16, 0x5c($sp)
|
|
/* 0A95E0 7F074AB0 E7AE0058 */ swc1 $f14, 0x58($sp)
|
|
/* 0A95E4 7F074AB4 46040302 */ mul.s $f12, $f0, $f4
|
|
/* 0A95E8 7F074AB8 00000000 */ nop
|
|
.L7F074ABC:
|
|
/* 0A95EC 7F074ABC 460C103C */ c.lt.s $f2, $f12
|
|
/* 0A95F0 7F074AC0 C7AA0094 */ lwc1 $f10, 0x94($sp)
|
|
/* 0A95F4 7F074AC4 45020006 */ bc1fl .L7F074AE0
|
|
/* 0A95F8 7F074AC8 E7A00054 */ swc1 $f0, 0x54($sp)
|
|
/* 0A95FC 7F074ACC C7A6009C */ lwc1 $f6, 0x9c($sp)
|
|
/* 0A9600 7F074AD0 E7AA0054 */ swc1 $f10, 0x54($sp)
|
|
/* 0A9604 7F074AD4 10000003 */ b .L7F074AE4
|
|
/* 0A9608 7F074AD8 E7A60050 */ swc1 $f6, 0x50($sp)
|
|
/* 0A960C 7F074ADC E7A00054 */ swc1 $f0, 0x54($sp)
|
|
.L7F074AE0:
|
|
/* 0A9610 7F074AE0 E7AE0050 */ swc1 $f14, 0x50($sp)
|
|
.L7F074AE4:
|
|
/* 0A9614 7F074AE4 C4A00020 */ lwc1 $f0, 0x20($a1)
|
|
/* 0A9618 7F074AE8 C4A20024 */ lwc1 $f2, 0x24($a1)
|
|
/* 0A961C 7F074AEC 46000482 */ mul.s $f18, $f0, $f0
|
|
/* 0A9620 7F074AF0 00000000 */ nop
|
|
/* 0A9624 7F074AF4 46021202 */ mul.s $f8, $f2, $f2
|
|
/* 0A9628 7F074AF8 E7A80040 */ swc1 $f8, 0x40($sp)
|
|
/* 0A962C 7F074AFC C4AC0028 */ lwc1 $f12, 0x28($a1)
|
|
/* 0A9630 7F074B00 C7AA0040 */ lwc1 $f10, 0x40($sp)
|
|
/* 0A9634 7F074B04 460C6102 */ mul.s $f4, $f12, $f12
|
|
/* 0A9638 7F074B08 460A9180 */ add.s $f6, $f18, $f10
|
|
/* 0A963C 7F074B0C E7A4003C */ swc1 $f4, 0x3c($sp)
|
|
/* 0A9640 7F074B10 C7A8003C */ lwc1 $f8, 0x3c($sp)
|
|
/* 0A9644 7F074B14 C4840014 */ lwc1 $f4, 0x14($a0)
|
|
/* 0A9648 7F074B18 46083400 */ add.s $f16, $f6, $f8
|
|
/* 0A964C 7F074B1C 46008407 */ neg.s $f16, $f16
|
|
/* 0A9650 7F074B20 46048282 */ mul.s $f10, $f16, $f4
|
|
/* 0A9654 7F074B24 C7A40010 */ lwc1 $f4, 0x10($sp)
|
|
/* 0A9658 7F074B28 E7AA0034 */ swc1 $f10, 0x34($sp)
|
|
/* 0A965C 7F074B2C C4860018 */ lwc1 $f6, 0x18($a0)
|
|
/* 0A9660 7F074B30 46068202 */ mul.s $f8, $f16, $f6
|
|
/* 0A9664 7F074B34 C7A6000C */ lwc1 $f6, 0xc($sp)
|
|
/* 0A9668 7F074B38 46040282 */ mul.s $f10, $f0, $f4
|
|
/* 0A966C 7F074B3C E7A80030 */ swc1 $f8, 0x30($sp)
|
|
/* 0A9670 7F074B40 46061202 */ mul.s $f8, $f2, $f6
|
|
/* 0A9674 7F074B44 C7A60014 */ lwc1 $f6, 0x14($sp)
|
|
/* 0A9678 7F074B48 46085100 */ add.s $f4, $f10, $f8
|
|
/* 0A967C 7F074B4C 460C3282 */ mul.s $f10, $f6, $f12
|
|
/* 0A9680 7F074B50 C7A60004 */ lwc1 $f6, 4($sp)
|
|
/* 0A9684 7F074B54 46045200 */ add.s $f8, $f10, $f4
|
|
/* 0A9688 7F074B58 46060282 */ mul.s $f10, $f0, $f6
|
|
/* 0A968C 7F074B5C C7A40000 */ lwc1 $f4, ($sp)
|
|
/* 0A9690 7F074B60 E7A8002C */ swc1 $f8, 0x2c($sp)
|
|
/* 0A9694 7F074B64 46041182 */ mul.s $f6, $f2, $f4
|
|
/* 0A9698 7F074B68 44801000 */ mtc1 $zero, $f2
|
|
/* 0A969C 7F074B6C 00000000 */ nop
|
|
/* 0A96A0 7F074B70 4602403C */ c.lt.s $f8, $f2
|
|
/* 0A96A4 7F074B74 46065100 */ add.s $f4, $f10, $f6
|
|
/* 0A96A8 7F074B78 C7AA0008 */ lwc1 $f10, 8($sp)
|
|
/* 0A96AC 7F074B7C 460C5182 */ mul.s $f6, $f10, $f12
|
|
/* 0A96B0 7F074B80 C7AA0030 */ lwc1 $f10, 0x30($sp)
|
|
/* 0A96B4 7F074B84 46004306 */ mov.s $f12, $f8
|
|
/* 0A96B8 7F074B88 46043380 */ add.s $f14, $f6, $f4
|
|
/* 0A96BC 7F074B8C C7A60034 */ lwc1 $f6, 0x34($sp)
|
|
/* 0A96C0 7F074B90 C7A4005C */ lwc1 $f4, 0x5c($sp)
|
|
/* 0A96C4 7F074B94 460A7000 */ add.s $f0, $f14, $f10
|
|
/* 0A96C8 7F074B98 46067380 */ add.s $f14, $f14, $f6
|
|
/* 0A96CC 7F074B9C 46000007 */ neg.s $f0, $f0
|
|
/* 0A96D0 7F074BA0 45000004 */ bc1f .L7F074BB4
|
|
/* 0A96D4 7F074BA4 46007387 */ neg.s $f14, $f14
|
|
/* 0A96D8 7F074BA8 46004307 */ neg.s $f12, $f8
|
|
/* 0A96DC 7F074BAC 46007387 */ neg.s $f14, $f14
|
|
/* 0A96E0 7F074BB0 46000007 */ neg.s $f0, $f0
|
|
.L7F074BB4:
|
|
/* 0A96E4 7F074BB4 4602703C */ c.lt.s $f14, $f2
|
|
/* 0A96E8 7F074BB8 C7A80058 */ lwc1 $f8, 0x58($sp)
|
|
/* 0A96EC 7F074BBC 45020008 */ bc1fl .L7F074BE0
|
|
/* 0A96F0 7F074BC0 460E003C */ c.lt.s $f0, $f14
|
|
/* 0A96F4 7F074BC4 4602003C */ c.lt.s $f0, $f2
|
|
/* 0A96F8 7F074BC8 00000000 */ nop
|
|
/* 0A96FC 7F074BCC 45020004 */ bc1fl .L7F074BE0
|
|
/* 0A9700 7F074BD0 460E003C */ c.lt.s $f0, $f14
|
|
/* 0A9704 7F074BD4 10000022 */ b .L7F074C60
|
|
/* 0A9708 7F074BD8 00001025 */ move $v0, $zero
|
|
/* 0A970C 7F074BDC 460E003C */ c.lt.s $f0, $f14
|
|
.L7F074BE0:
|
|
/* 0A9710 7F074BE0 C7A60058 */ lwc1 $f6, 0x58($sp)
|
|
/* 0A9714 7F074BE4 45000004 */ bc1f .L7F074BF8
|
|
/* 0A9718 7F074BE8 00000000 */ nop
|
|
/* 0A971C 7F074BEC 46007086 */ mov.s $f2, $f14
|
|
/* 0A9720 7F074BF0 46000386 */ mov.s $f14, $f0
|
|
/* 0A9724 7F074BF4 46001006 */ mov.s $f0, $f2
|
|
.L7F074BF8:
|
|
/* 0A9728 7F074BF8 460C2082 */ mul.s $f2, $f4, $f12
|
|
/* 0A972C 7F074BFC 00000000 */ nop
|
|
/* 0A9730 7F074C00 46087282 */ mul.s $f10, $f14, $f8
|
|
/* 0A9734 7F074C04 460A103C */ c.lt.s $f2, $f10
|
|
/* 0A9738 7F074C08 00000000 */ nop
|
|
/* 0A973C 7F074C0C 4500000C */ bc1f .L7F074C40
|
|
/* 0A9740 7F074C10 00000000 */ nop
|
|
/* 0A9744 7F074C14 C7A60054 */ lwc1 $f6, 0x54($sp)
|
|
/* 0A9748 7F074C18 C7A80050 */ lwc1 $f8, 0x50($sp)
|
|
/* 0A974C 7F074C1C 460C3102 */ mul.s $f4, $f6, $f12
|
|
/* 0A9750 7F074C20 00000000 */ nop
|
|
/* 0A9754 7F074C24 46087282 */ mul.s $f10, $f14, $f8
|
|
/* 0A9758 7F074C28 460A203C */ c.lt.s $f4, $f10
|
|
/* 0A975C 7F074C2C 00000000 */ nop
|
|
/* 0A9760 7F074C30 4500000A */ bc1f .L7F074C5C
|
|
/* 0A9764 7F074C34 00000000 */ nop
|
|
/* 0A9768 7F074C38 10000009 */ b .L7F074C60
|
|
/* 0A976C 7F074C3C 00001025 */ move $v0, $zero
|
|
.L7F074C40:
|
|
/* 0A9770 7F074C40 46060202 */ mul.s $f8, $f0, $f6
|
|
/* 0A9774 7F074C44 4602403C */ c.lt.s $f8, $f2
|
|
/* 0A9778 7F074C48 00000000 */ nop
|
|
/* 0A977C 7F074C4C 45020004 */ bc1fl .L7F074C60
|
|
/* 0A9780 7F074C50 24020001 */ li $v0, 1
|
|
/* 0A9784 7F074C54 10000002 */ b .L7F074C60
|
|
/* 0A9788 7F074C58 00001025 */ move $v0, $zero
|
|
.L7F074C5C:
|
|
/* 0A978C 7F074C5C 24020001 */ li $v0, 1
|
|
.L7F074C60:
|
|
/* 0A9790 7F074C60 03E00008 */ jr $ra
|
|
/* 0A9794 7F074C64 27BD00B8 */ addiu $sp, $sp, 0xb8
|
|
)
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef NONMATCHING
|
|
void sub_GAME_7F074C68(void) {
|
|
|
|
}
|
|
#else
|
|
GLOBAL_ASM(
|
|
.text
|
|
glabel sub_GAME_7F074C68
|
|
/* 0A9798 7F074C68 27BDFFE0 */ addiu $sp, $sp, -0x20
|
|
/* 0A979C 7F074C6C AFBF0014 */ sw $ra, 0x14($sp)
|
|
/* 0A97A0 7F074C70 AFA60028 */ sw $a2, 0x28($sp)
|
|
/* 0A97A4 7F074C74 AFA7002C */ sw $a3, 0x2c($sp)
|
|
/* 0A97A8 7F074C78 8CAE0004 */ lw $t6, 4($a1)
|
|
/* 0A97AC 7F074C7C 00003025 */ move $a2, $zero
|
|
/* 0A97B0 7F074C80 0FC1B198 */ jal modelFindNodeMtx
|
|
/* 0A97B4 7F074C84 AFAE001C */ sw $t6, 0x1c($sp)
|
|
/* 0A97B8 7F074C88 8FA4001C */ lw $a0, 0x1c($sp)
|
|
/* 0A97BC 7F074C8C 00402825 */ move $a1, $v0
|
|
/* 0A97C0 7F074C90 8FA60028 */ lw $a2, 0x28($sp)
|
|
/* 0A97C4 7F074C94 0FC1D1F4 */ jal sub_GAME_7F0747D0
|
|
/* 0A97C8 7F074C98 8FA7002C */ lw $a3, 0x2c($sp)
|
|
/* 0A97CC 7F074C9C 8FBF0014 */ lw $ra, 0x14($sp)
|
|
/* 0A97D0 7F074CA0 27BD0020 */ addiu $sp, $sp, 0x20
|
|
/* 0A97D4 7F074CA4 03E00008 */ jr $ra
|
|
/* 0A97D8 7F074CA8 00000000 */ nop
|
|
)
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef NONMATCHING
|
|
void sub_GAME_7F074CAC(void) {
|
|
|
|
}
|
|
#else
|
|
GLOBAL_ASM(
|
|
.text
|
|
glabel sub_GAME_7F074CAC
|
|
/* 0A97DC 7F074CAC 27BDFF50 */ addiu $sp, $sp, -0xb0
|
|
/* 0A97E0 7F074CB0 AFBF001C */ sw $ra, 0x1c($sp)
|
|
/* 0A97E4 7F074CB4 AFB00018 */ sw $s0, 0x18($sp)
|
|
/* 0A97E8 7F074CB8 AFA400B0 */ sw $a0, 0xb0($sp)
|
|
/* 0A97EC 7F074CBC 8CA80004 */ lw $t0, 4($a1)
|
|
/* 0A97F0 7F074CC0 00C08025 */ move $s0, $a2
|
|
/* 0A97F4 7F074CC4 00003025 */ move $a2, $zero
|
|
/* 0A97F8 7F074CC8 AFA700BC */ sw $a3, 0xbc($sp)
|
|
/* 0A97FC 7F074CCC AFA500B4 */ sw $a1, 0xb4($sp)
|
|
/* 0A9800 7F074CD0 0FC1B198 */ jal modelFindNodeMtx
|
|
/* 0A9804 7F074CD4 AFA800AC */ sw $t0, 0xac($sp)
|
|
/* 0A9808 7F074CD8 3C0B8003 */ lui $t3, %hi(D_80036408)
|
|
/* 0A980C 7F074CDC 256B6408 */ addiu $t3, %lo(D_80036408) # addiu $t3, $t3, 0x6408
|
|
/* 0A9810 7F074CE0 8D610000 */ lw $at, ($t3)
|
|
/* 0A9814 7F074CE4 8FA700BC */ lw $a3, 0xbc($sp)
|
|
/* 0A9818 7F074CE8 8FA800AC */ lw $t0, 0xac($sp)
|
|
/* 0A981C 7F074CEC 27AA0090 */ addiu $t2, $sp, 0x90
|
|
/* 0A9820 7F074CF0 AD410000 */ sw $at, ($t2)
|
|
/* 0A9824 7F074CF4 8D610008 */ lw $at, 8($t3)
|
|
/* 0A9828 7F074CF8 8D790004 */ lw $t9, 4($t3)
|
|
/* 0A982C 7F074CFC 00401825 */ move $v1, $v0
|
|
/* 0A9830 7F074D00 AD410008 */ sw $at, 8($t2)
|
|
/* 0A9834 7F074D04 AD590004 */ sw $t9, 4($t2)
|
|
/* 0A9838 7F074D08 C5080004 */ lwc1 $f8, 4($t0)
|
|
/* 0A983C 7F074D0C 8FB800B4 */ lw $t8, 0xb4($sp)
|
|
/* 0A9840 7F074D10 E7A8008C */ swc1 $f8, 0x8c($sp)
|
|
/* 0A9844 7F074D14 C4E60000 */ lwc1 $f6, ($a3)
|
|
/* 0A9848 7F074D18 E7A6009C */ swc1 $f6, 0x9c($sp)
|
|
/* 0A984C 7F074D1C C4EA0004 */ lwc1 $f10, 4($a3)
|
|
/* 0A9850 7F074D20 E7AA00A0 */ swc1 $f10, 0xa0($sp)
|
|
/* 0A9854 7F074D24 C4E40008 */ lwc1 $f4, 8($a3)
|
|
/* 0A9858 7F074D28 E7A400A4 */ swc1 $f4, 0xa4($sp)
|
|
/* 0A985C 7F074D2C 97040000 */ lhu $a0, ($t8)
|
|
/* 0A9860 7F074D30 308E0100 */ andi $t6, $a0, 0x100
|
|
/* 0A9864 7F074D34 11C0003C */ beqz $t6, .L7F074E28
|
|
/* 0A9868 7F074D38 308F0200 */ andi $t7, $a0, 0x200
|
|
/* 0A986C 7F074D3C C5080008 */ lwc1 $f8, 8($t0)
|
|
/* 0A9870 7F074D40 E7A80080 */ swc1 $f8, 0x80($sp)
|
|
/* 0A9874 7F074D44 C506000C */ lwc1 $f6, 0xc($t0)
|
|
/* 0A9878 7F074D48 C7A40080 */ lwc1 $f4, 0x80($sp)
|
|
/* 0A987C 7F074D4C E7A60084 */ swc1 $f6, 0x84($sp)
|
|
/* 0A9880 7F074D50 C50A0010 */ lwc1 $f10, 0x10($t0)
|
|
/* 0A9884 7F074D54 E7AA0088 */ swc1 $f10, 0x88($sp)
|
|
/* 0A9888 7F074D58 C4480000 */ lwc1 $f8, ($v0)
|
|
/* 0A988C 7F074D5C C7AA0084 */ lwc1 $f10, 0x84($sp)
|
|
/* 0A9890 7F074D60 46082182 */ mul.s $f6, $f4, $f8
|
|
/* 0A9894 7F074D64 C4480010 */ lwc1 $f8, 0x10($v0)
|
|
/* 0A9898 7F074D68 E7A40020 */ swc1 $f4, 0x20($sp)
|
|
/* 0A989C 7F074D6C C4440020 */ lwc1 $f4, 0x20($v0)
|
|
/* 0A98A0 7F074D70 46085202 */ mul.s $f8, $f10, $f8
|
|
/* 0A98A4 7F074D74 46083180 */ add.s $f6, $f6, $f8
|
|
/* 0A98A8 7F074D78 C7A80088 */ lwc1 $f8, 0x88($sp)
|
|
/* 0A98AC 7F074D7C 46044102 */ mul.s $f4, $f8, $f4
|
|
/* 0A98B0 7F074D80 46043180 */ add.s $f6, $f6, $f4
|
|
/* 0A98B4 7F074D84 C4440030 */ lwc1 $f4, 0x30($v0)
|
|
/* 0A98B8 7F074D88 E7AA0024 */ swc1 $f10, 0x24($sp)
|
|
/* 0A98BC 7F074D8C C60A0000 */ lwc1 $f10, ($s0)
|
|
/* 0A98C0 7F074D90 460A2101 */ sub.s $f4, $f4, $f10
|
|
/* 0A98C4 7F074D94 46062280 */ add.s $f10, $f4, $f6
|
|
/* 0A98C8 7F074D98 C7A40020 */ lwc1 $f4, 0x20($sp)
|
|
/* 0A98CC 7F074D9C E7AA0090 */ swc1 $f10, 0x90($sp)
|
|
/* 0A98D0 7F074DA0 C4460004 */ lwc1 $f6, 4($v0)
|
|
/* 0A98D4 7F074DA4 46062282 */ mul.s $f10, $f4, $f6
|
|
/* 0A98D8 7F074DA8 C7A60024 */ lwc1 $f6, 0x24($sp)
|
|
/* 0A98DC 7F074DAC E7A80024 */ swc1 $f8, 0x24($sp)
|
|
/* 0A98E0 7F074DB0 C4480014 */ lwc1 $f8, 0x14($v0)
|
|
/* 0A98E4 7F074DB4 46083202 */ mul.s $f8, $f6, $f8
|
|
/* 0A98E8 7F074DB8 46085280 */ add.s $f10, $f10, $f8
|
|
/* 0A98EC 7F074DBC C7A80024 */ lwc1 $f8, 0x24($sp)
|
|
/* 0A98F0 7F074DC0 E7A40024 */ swc1 $f4, 0x24($sp)
|
|
/* 0A98F4 7F074DC4 C4440024 */ lwc1 $f4, 0x24($v0)
|
|
/* 0A98F8 7F074DC8 46044102 */ mul.s $f4, $f8, $f4
|
|
/* 0A98FC 7F074DCC 46045280 */ add.s $f10, $f10, $f4
|
|
/* 0A9900 7F074DD0 C4440034 */ lwc1 $f4, 0x34($v0)
|
|
/* 0A9904 7F074DD4 E7A60020 */ swc1 $f6, 0x20($sp)
|
|
/* 0A9908 7F074DD8 C6060004 */ lwc1 $f6, 4($s0)
|
|
/* 0A990C 7F074DDC 46062101 */ sub.s $f4, $f4, $f6
|
|
/* 0A9910 7F074DE0 460A2180 */ add.s $f6, $f4, $f10
|
|
/* 0A9914 7F074DE4 C7A40024 */ lwc1 $f4, 0x24($sp)
|
|
/* 0A9918 7F074DE8 E7A60094 */ swc1 $f6, 0x94($sp)
|
|
/* 0A991C 7F074DEC C44A0008 */ lwc1 $f10, 8($v0)
|
|
/* 0A9920 7F074DF0 460A2182 */ mul.s $f6, $f4, $f10
|
|
/* 0A9924 7F074DF4 C44A0018 */ lwc1 $f10, 0x18($v0)
|
|
/* 0A9928 7F074DF8 C7A40020 */ lwc1 $f4, 0x20($sp)
|
|
/* 0A992C 7F074DFC 460A2102 */ mul.s $f4, $f4, $f10
|
|
/* 0A9930 7F074E00 46043280 */ add.s $f10, $f6, $f4
|
|
/* 0A9934 7F074E04 C4460028 */ lwc1 $f6, 0x28($v0)
|
|
/* 0A9938 7F074E08 46064102 */ mul.s $f4, $f8, $f6
|
|
/* 0A993C 7F074E0C C4460038 */ lwc1 $f6, 0x38($v0)
|
|
/* 0A9940 7F074E10 46045200 */ add.s $f8, $f10, $f4
|
|
/* 0A9944 7F074E14 C60A0008 */ lwc1 $f10, 8($s0)
|
|
/* 0A9948 7F074E18 460A3101 */ sub.s $f4, $f6, $f10
|
|
/* 0A994C 7F074E1C 46082180 */ add.s $f6, $f4, $f8
|
|
/* 0A9950 7F074E20 1000003E */ b .L7F074F1C
|
|
/* 0A9954 7F074E24 E7A60098 */ swc1 $f6, 0x98($sp)
|
|
.L7F074E28:
|
|
/* 0A9958 7F074E28 51E00031 */ beql $t7, $zero, .L7F074EF0
|
|
/* 0A995C 7F074E2C C4460030 */ lwc1 $f6, 0x30($v0)
|
|
/* 0A9960 7F074E30 8D050014 */ lw $a1, 0x14($t0)
|
|
/* 0A9964 7F074E34 8FA400B0 */ lw $a0, 0xb0($sp)
|
|
/* 0A9968 7F074E38 00003025 */ move $a2, $zero
|
|
/* 0A996C 7F074E3C 50A0001F */ beql $a1, $zero, .L7F074EBC
|
|
/* 0A9970 7F074E40 C4480030 */ lwc1 $f8, 0x30($v0)
|
|
/* 0A9974 7F074E44 AFA300A8 */ sw $v1, 0xa8($sp)
|
|
/* 0A9978 7F074E48 0FC1B198 */ jal modelFindNodeMtx
|
|
/* 0A997C 7F074E4C AFA800AC */ sw $t0, 0xac($sp)
|
|
/* 0A9980 7F074E50 8FA300A8 */ lw $v1, 0xa8($sp)
|
|
/* 0A9984 7F074E54 C4440030 */ lwc1 $f4, 0x30($v0)
|
|
/* 0A9988 7F074E58 3C013F00 */ li $at, 0x3F000000 # 0.500000
|
|
/* 0A998C 7F074E5C C46A0030 */ lwc1 $f10, 0x30($v1)
|
|
/* 0A9990 7F074E60 44810000 */ mtc1 $at, $f0
|
|
/* 0A9994 7F074E64 8FA800AC */ lw $t0, 0xac($sp)
|
|
/* 0A9998 7F074E68 46045200 */ add.s $f8, $f10, $f4
|
|
/* 0A999C 7F074E6C C60A0000 */ lwc1 $f10, ($s0)
|
|
/* 0A99A0 7F074E70 46004182 */ mul.s $f6, $f8, $f0
|
|
/* 0A99A4 7F074E74 460A3101 */ sub.s $f4, $f6, $f10
|
|
/* 0A99A8 7F074E78 E7A40090 */ swc1 $f4, 0x90($sp)
|
|
/* 0A99AC 7F074E7C C4460034 */ lwc1 $f6, 0x34($v0)
|
|
/* 0A99B0 7F074E80 C4680034 */ lwc1 $f8, 0x34($v1)
|
|
/* 0A99B4 7F074E84 46064280 */ add.s $f10, $f8, $f6
|
|
/* 0A99B8 7F074E88 C6080004 */ lwc1 $f8, 4($s0)
|
|
/* 0A99BC 7F074E8C 46005102 */ mul.s $f4, $f10, $f0
|
|
/* 0A99C0 7F074E90 46082181 */ sub.s $f6, $f4, $f8
|
|
/* 0A99C4 7F074E94 E7A60094 */ swc1 $f6, 0x94($sp)
|
|
/* 0A99C8 7F074E98 C4440038 */ lwc1 $f4, 0x38($v0)
|
|
/* 0A99CC 7F074E9C C46A0038 */ lwc1 $f10, 0x38($v1)
|
|
/* 0A99D0 7F074EA0 46045200 */ add.s $f8, $f10, $f4
|
|
/* 0A99D4 7F074EA4 C60A0008 */ lwc1 $f10, 8($s0)
|
|
/* 0A99D8 7F074EA8 46004182 */ mul.s $f6, $f8, $f0
|
|
/* 0A99DC 7F074EAC 460A3101 */ sub.s $f4, $f6, $f10
|
|
/* 0A99E0 7F074EB0 1000001A */ b .L7F074F1C
|
|
/* 0A99E4 7F074EB4 E7A40098 */ swc1 $f4, 0x98($sp)
|
|
/* 0A99E8 7F074EB8 C4480030 */ lwc1 $f8, 0x30($v0)
|
|
.L7F074EBC:
|
|
/* 0A99EC 7F074EBC C6060000 */ lwc1 $f6, ($s0)
|
|
/* 0A99F0 7F074EC0 46064281 */ sub.s $f10, $f8, $f6
|
|
/* 0A99F4 7F074EC4 E7AA0090 */ swc1 $f10, 0x90($sp)
|
|
/* 0A99F8 7F074EC8 C6080004 */ lwc1 $f8, 4($s0)
|
|
/* 0A99FC 7F074ECC C4440034 */ lwc1 $f4, 0x34($v0)
|
|
/* 0A9A00 7F074ED0 46082181 */ sub.s $f6, $f4, $f8
|
|
/* 0A9A04 7F074ED4 E7A60094 */ swc1 $f6, 0x94($sp)
|
|
/* 0A9A08 7F074ED8 C6040008 */ lwc1 $f4, 8($s0)
|
|
/* 0A9A0C 7F074EDC C44A0038 */ lwc1 $f10, 0x38($v0)
|
|
/* 0A9A10 7F074EE0 46045201 */ sub.s $f8, $f10, $f4
|
|
/* 0A9A14 7F074EE4 1000000D */ b .L7F074F1C
|
|
/* 0A9A18 7F074EE8 E7A80098 */ swc1 $f8, 0x98($sp)
|
|
/* 0A9A1C 7F074EEC C4460030 */ lwc1 $f6, 0x30($v0)
|
|
.L7F074EF0:
|
|
/* 0A9A20 7F074EF0 C60A0000 */ lwc1 $f10, ($s0)
|
|
/* 0A9A24 7F074EF4 460A3101 */ sub.s $f4, $f6, $f10
|
|
/* 0A9A28 7F074EF8 E7A40090 */ swc1 $f4, 0x90($sp)
|
|
/* 0A9A2C 7F074EFC C6060004 */ lwc1 $f6, 4($s0)
|
|
/* 0A9A30 7F074F00 C4480034 */ lwc1 $f8, 0x34($v0)
|
|
/* 0A9A34 7F074F04 46064281 */ sub.s $f10, $f8, $f6
|
|
/* 0A9A38 7F074F08 E7AA0094 */ swc1 $f10, 0x94($sp)
|
|
/* 0A9A3C 7F074F0C C6080008 */ lwc1 $f8, 8($s0)
|
|
/* 0A9A40 7F074F10 C4440038 */ lwc1 $f4, 0x38($v0)
|
|
/* 0A9A44 7F074F14 46082181 */ sub.s $f6, $f4, $f8
|
|
/* 0A9A48 7F074F18 E7A60098 */ swc1 $f6, 0x98($sp)
|
|
.L7F074F1C:
|
|
/* 0A9A4C 7F074F1C 8FA900B4 */ lw $t1, 0xb4($sp)
|
|
/* 0A9A50 7F074F20 C7A400A4 */ lwc1 $f4, 0xa4($sp)
|
|
/* 0A9A54 7F074F24 C7A600A0 */ lwc1 $f6, 0xa0($sp)
|
|
/* 0A9A58 7F074F28 95240000 */ lhu $a0, ($t1)
|
|
/* 0A9A5C 7F074F2C 308D0400 */ andi $t5, $a0, 0x400
|
|
/* 0A9A60 7F074F30 11A00074 */ beqz $t5, .L7F075104
|
|
/* 0A9A64 7F074F34 30820800 */ andi $v0, $a0, 0x800
|
|
/* 0A9A68 7F074F38 C46A0008 */ lwc1 $f10, 8($v1)
|
|
/* 0A9A6C 7F074F3C C50C0018 */ lwc1 $f12, 0x18($t0)
|
|
/* 0A9A70 7F074F40 C510001C */ lwc1 $f16, 0x1c($t0)
|
|
/* 0A9A74 7F074F44 46045202 */ mul.s $f8, $f10, $f4
|
|
/* 0A9A78 7F074F48 C46A0004 */ lwc1 $f10, 4($v1)
|
|
/* 0A9A7C 7F074F4C C4600000 */ lwc1 $f0, ($v1)
|
|
/* 0A9A80 7F074F50 E7A40024 */ swc1 $f4, 0x24($sp)
|
|
/* 0A9A84 7F074F54 460A3282 */ mul.s $f10, $f6, $f10
|
|
/* 0A9A88 7F074F58 C7A4009C */ lwc1 $f4, 0x9c($sp)
|
|
/* 0A9A8C 7F074F5C E7A80020 */ swc1 $f8, 0x20($sp)
|
|
/* 0A9A90 7F074F60 46002202 */ mul.s $f8, $f4, $f0
|
|
/* 0A9A94 7F074F64 460A4200 */ add.s $f8, $f8, $f10
|
|
/* 0A9A98 7F074F68 C7AA0020 */ lwc1 $f10, 0x20($sp)
|
|
/* 0A9A9C 7F074F6C 46085280 */ add.s $f10, $f10, $f8
|
|
/* 0A9AA0 7F074F70 460C5082 */ mul.s $f2, $f10, $f12
|
|
/* 0A9AA4 7F074F74 00000000 */ nop
|
|
/* 0A9AA8 7F074F78 46020202 */ mul.s $f8, $f0, $f2
|
|
/* 0A9AAC 7F074F7C 46044280 */ add.s $f10, $f8, $f4
|
|
/* 0A9AB0 7F074F80 E7AA009C */ swc1 $f10, 0x9c($sp)
|
|
/* 0A9AB4 7F074F84 C4680004 */ lwc1 $f8, 4($v1)
|
|
/* 0A9AB8 7F074F88 46024102 */ mul.s $f4, $f8, $f2
|
|
/* 0A9ABC 7F074F8C 46062200 */ add.s $f8, $f4, $f6
|
|
/* 0A9AC0 7F074F90 E7A800A0 */ swc1 $f8, 0xa0($sp)
|
|
/* 0A9AC4 7F074F94 C4640008 */ lwc1 $f4, 8($v1)
|
|
/* 0A9AC8 7F074F98 46022182 */ mul.s $f6, $f4, $f2
|
|
/* 0A9ACC 7F074F9C C7A40024 */ lwc1 $f4, 0x24($sp)
|
|
/* 0A9AD0 7F074FA0 46043180 */ add.s $f6, $f6, $f4
|
|
/* 0A9AD4 7F074FA4 E7A600A4 */ swc1 $f6, 0xa4($sp)
|
|
/* 0A9AD8 7F074FA8 C4640008 */ lwc1 $f4, 8($v1)
|
|
/* 0A9ADC 7F074FAC C4600000 */ lwc1 $f0, ($v1)
|
|
/* 0A9AE0 7F074FB0 E7AA0024 */ swc1 $f10, 0x24($sp)
|
|
/* 0A9AE4 7F074FB4 C7AA0098 */ lwc1 $f10, 0x98($sp)
|
|
/* 0A9AE8 7F074FB8 E7A80020 */ swc1 $f8, 0x20($sp)
|
|
/* 0A9AEC 7F074FBC E7A60028 */ swc1 $f6, 0x28($sp)
|
|
/* 0A9AF0 7F074FC0 460A2102 */ mul.s $f4, $f4, $f10
|
|
/* 0A9AF4 7F074FC4 C4660004 */ lwc1 $f6, 4($v1)
|
|
/* 0A9AF8 7F074FC8 C7A80094 */ lwc1 $f8, 0x94($sp)
|
|
/* 0A9AFC 7F074FCC E7AA002C */ swc1 $f10, 0x2c($sp)
|
|
/* 0A9B00 7F074FD0 C7AA0090 */ lwc1 $f10, 0x90($sp)
|
|
/* 0A9B04 7F074FD4 46064182 */ mul.s $f6, $f8, $f6
|
|
/* 0A9B08 7F074FD8 E7A40030 */ swc1 $f4, 0x30($sp)
|
|
/* 0A9B0C 7F074FDC 46005102 */ mul.s $f4, $f10, $f0
|
|
/* 0A9B10 7F074FE0 46062100 */ add.s $f4, $f4, $f6
|
|
/* 0A9B14 7F074FE4 C7A60030 */ lwc1 $f6, 0x30($sp)
|
|
/* 0A9B18 7F074FE8 46043180 */ add.s $f6, $f6, $f4
|
|
/* 0A9B1C 7F074FEC 460C3382 */ mul.s $f14, $f6, $f12
|
|
/* 0A9B20 7F074FF0 00000000 */ nop
|
|
/* 0A9B24 7F074FF4 460E0102 */ mul.s $f4, $f0, $f14
|
|
/* 0A9B28 7F074FF8 460A2180 */ add.s $f6, $f4, $f10
|
|
/* 0A9B2C 7F074FFC E7A60090 */ swc1 $f6, 0x90($sp)
|
|
/* 0A9B30 7F075000 C4640004 */ lwc1 $f4, 4($v1)
|
|
/* 0A9B34 7F075004 460E2282 */ mul.s $f10, $f4, $f14
|
|
/* 0A9B38 7F075008 46085100 */ add.s $f4, $f10, $f8
|
|
/* 0A9B3C 7F07500C E7A40094 */ swc1 $f4, 0x94($sp)
|
|
/* 0A9B40 7F075010 C46A0008 */ lwc1 $f10, 8($v1)
|
|
/* 0A9B44 7F075014 460E5202 */ mul.s $f8, $f10, $f14
|
|
/* 0A9B48 7F075018 C7AA002C */ lwc1 $f10, 0x2c($sp)
|
|
/* 0A9B4C 7F07501C 460A4200 */ add.s $f8, $f8, $f10
|
|
/* 0A9B50 7F075020 C7AA0024 */ lwc1 $f10, 0x24($sp)
|
|
/* 0A9B54 7F075024 E7A80098 */ swc1 $f8, 0x98($sp)
|
|
/* 0A9B58 7F075028 C4600010 */ lwc1 $f0, 0x10($v1)
|
|
/* 0A9B5C 7F07502C E7A60030 */ swc1 $f6, 0x30($sp)
|
|
/* 0A9B60 7F075030 E7A4002C */ swc1 $f4, 0x2c($sp)
|
|
/* 0A9B64 7F075034 E7A80024 */ swc1 $f8, 0x24($sp)
|
|
/* 0A9B68 7F075038 46005182 */ mul.s $f6, $f10, $f0
|
|
/* 0A9B6C 7F07503C C4680014 */ lwc1 $f8, 0x14($v1)
|
|
/* 0A9B70 7F075040 C7A40020 */ lwc1 $f4, 0x20($sp)
|
|
/* 0A9B74 7F075044 46082202 */ mul.s $f8, $f4, $f8
|
|
/* 0A9B78 7F075048 46083180 */ add.s $f6, $f6, $f8
|
|
/* 0A9B7C 7F07504C C7A80028 */ lwc1 $f8, 0x28($sp)
|
|
/* 0A9B80 7F075050 E7AA0028 */ swc1 $f10, 0x28($sp)
|
|
/* 0A9B84 7F075054 C46A0018 */ lwc1 $f10, 0x18($v1)
|
|
/* 0A9B88 7F075058 46085282 */ mul.s $f10, $f10, $f8
|
|
/* 0A9B8C 7F07505C 46065280 */ add.s $f10, $f10, $f6
|
|
/* 0A9B90 7F075060 C7A60028 */ lwc1 $f6, 0x28($sp)
|
|
/* 0A9B94 7F075064 46105082 */ mul.s $f2, $f10, $f16
|
|
/* 0A9B98 7F075068 00000000 */ nop
|
|
/* 0A9B9C 7F07506C 46020282 */ mul.s $f10, $f0, $f2
|
|
/* 0A9BA0 7F075070 46065280 */ add.s $f10, $f10, $f6
|
|
/* 0A9BA4 7F075074 E7AA009C */ swc1 $f10, 0x9c($sp)
|
|
/* 0A9BA8 7F075078 C4660014 */ lwc1 $f6, 0x14($v1)
|
|
/* 0A9BAC 7F07507C 46023282 */ mul.s $f10, $f6, $f2
|
|
/* 0A9BB0 7F075080 46045180 */ add.s $f6, $f10, $f4
|
|
/* 0A9BB4 7F075084 E7A600A0 */ swc1 $f6, 0xa0($sp)
|
|
/* 0A9BB8 7F075088 C46A0018 */ lwc1 $f10, 0x18($v1)
|
|
/* 0A9BBC 7F07508C 46025102 */ mul.s $f4, $f10, $f2
|
|
/* 0A9BC0 7F075090 C7AA0030 */ lwc1 $f10, 0x30($sp)
|
|
/* 0A9BC4 7F075094 46082180 */ add.s $f6, $f4, $f8
|
|
/* 0A9BC8 7F075098 C7A8002C */ lwc1 $f8, 0x2c($sp)
|
|
/* 0A9BCC 7F07509C E7A600A4 */ swc1 $f6, 0xa4($sp)
|
|
/* 0A9BD0 7F0750A0 C4600010 */ lwc1 $f0, 0x10($v1)
|
|
/* 0A9BD4 7F0750A4 C4660014 */ lwc1 $f6, 0x14($v1)
|
|
/* 0A9BD8 7F0750A8 E7AA0030 */ swc1 $f10, 0x30($sp)
|
|
/* 0A9BDC 7F0750AC 46005102 */ mul.s $f4, $f10, $f0
|
|
/* 0A9BE0 7F0750B0 C46A0018 */ lwc1 $f10, 0x18($v1)
|
|
/* 0A9BE4 7F0750B4 46064182 */ mul.s $f6, $f8, $f6
|
|
/* 0A9BE8 7F0750B8 46062100 */ add.s $f4, $f4, $f6
|
|
/* 0A9BEC 7F0750BC C7A60024 */ lwc1 $f6, 0x24($sp)
|
|
/* 0A9BF0 7F0750C0 46065282 */ mul.s $f10, $f10, $f6
|
|
/* 0A9BF4 7F0750C4 46045280 */ add.s $f10, $f10, $f4
|
|
/* 0A9BF8 7F0750C8 C7A40030 */ lwc1 $f4, 0x30($sp)
|
|
/* 0A9BFC 7F0750CC 46105302 */ mul.s $f12, $f10, $f16
|
|
/* 0A9C00 7F0750D0 00000000 */ nop
|
|
/* 0A9C04 7F0750D4 460C0282 */ mul.s $f10, $f0, $f12
|
|
/* 0A9C08 7F0750D8 46045280 */ add.s $f10, $f10, $f4
|
|
/* 0A9C0C 7F0750DC E7AA0090 */ swc1 $f10, 0x90($sp)
|
|
/* 0A9C10 7F0750E0 C4640014 */ lwc1 $f4, 0x14($v1)
|
|
/* 0A9C14 7F0750E4 460C2282 */ mul.s $f10, $f4, $f12
|
|
/* 0A9C18 7F0750E8 46085100 */ add.s $f4, $f10, $f8
|
|
/* 0A9C1C 7F0750EC E7A40094 */ swc1 $f4, 0x94($sp)
|
|
/* 0A9C20 7F0750F0 C46A0018 */ lwc1 $f10, 0x18($v1)
|
|
/* 0A9C24 7F0750F4 460C5202 */ mul.s $f8, $f10, $f12
|
|
/* 0A9C28 7F0750F8 46064100 */ add.s $f4, $f8, $f6
|
|
/* 0A9C2C 7F0750FC 1000004F */ b .L7F07523C
|
|
/* 0A9C30 7F075100 E7A40098 */ swc1 $f4, 0x98($sp)
|
|
.L7F075104:
|
|
/* 0A9C34 7F075104 14400005 */ bnez $v0, .L7F07511C
|
|
/* 0A9C38 7F075108 308C1000 */ andi $t4, $a0, 0x1000
|
|
/* 0A9C3C 7F07510C 15800003 */ bnez $t4, .L7F07511C
|
|
/* 0A9C40 7F075110 308A2000 */ andi $t2, $a0, 0x2000
|
|
/* 0A9C44 7F075114 5140004A */ beql $t2, $zero, .L7F075240
|
|
/* 0A9C48 7F075118 C7B2009C */ lwc1 $f18, 0x9c($sp)
|
|
.L7F07511C:
|
|
/* 0A9C4C 7F07511C C50A0018 */ lwc1 $f10, 0x18($t0)
|
|
/* 0A9C50 7F075120 308B1000 */ andi $t3, $a0, 0x1000
|
|
/* 0A9C54 7F075124 10400008 */ beqz $v0, .L7F075148
|
|
/* 0A9C58 7F075128 E7AA0060 */ swc1 $f10, 0x60($sp)
|
|
/* 0A9C5C 7F07512C C4680000 */ lwc1 $f8, ($v1)
|
|
/* 0A9C60 7F075130 E7A80054 */ swc1 $f8, 0x54($sp)
|
|
/* 0A9C64 7F075134 C4660004 */ lwc1 $f6, 4($v1)
|
|
/* 0A9C68 7F075138 E7A60058 */ swc1 $f6, 0x58($sp)
|
|
/* 0A9C6C 7F07513C C4640008 */ lwc1 $f4, 8($v1)
|
|
/* 0A9C70 7F075140 10000012 */ b .L7F07518C
|
|
/* 0A9C74 7F075144 E7A4005C */ swc1 $f4, 0x5c($sp)
|
|
.L7F075148:
|
|
/* 0A9C78 7F075148 11600008 */ beqz $t3, .L7F07516C
|
|
/* 0A9C7C 7F07514C 30992000 */ andi $t9, $a0, 0x2000
|
|
/* 0A9C80 7F075150 C46A0010 */ lwc1 $f10, 0x10($v1)
|
|
/* 0A9C84 7F075154 E7AA0054 */ swc1 $f10, 0x54($sp)
|
|
/* 0A9C88 7F075158 C4680014 */ lwc1 $f8, 0x14($v1)
|
|
/* 0A9C8C 7F07515C E7A80058 */ swc1 $f8, 0x58($sp)
|
|
/* 0A9C90 7F075160 C4660018 */ lwc1 $f6, 0x18($v1)
|
|
/* 0A9C94 7F075164 10000009 */ b .L7F07518C
|
|
/* 0A9C98 7F075168 E7A6005C */ swc1 $f6, 0x5c($sp)
|
|
.L7F07516C:
|
|
/* 0A9C9C 7F07516C 53200008 */ beql $t9, $zero, .L7F075190
|
|
/* 0A9CA0 7F075170 C7AC0054 */ lwc1 $f12, 0x54($sp)
|
|
/* 0A9CA4 7F075174 C4640020 */ lwc1 $f4, 0x20($v1)
|
|
/* 0A9CA8 7F075178 E7A40054 */ swc1 $f4, 0x54($sp)
|
|
/* 0A9CAC 7F07517C C46A0024 */ lwc1 $f10, 0x24($v1)
|
|
/* 0A9CB0 7F075180 E7AA0058 */ swc1 $f10, 0x58($sp)
|
|
/* 0A9CB4 7F075184 C4680028 */ lwc1 $f8, 0x28($v1)
|
|
/* 0A9CB8 7F075188 E7A8005C */ swc1 $f8, 0x5c($sp)
|
|
.L7F07518C:
|
|
/* 0A9CBC 7F07518C C7AC0054 */ lwc1 $f12, 0x54($sp)
|
|
.L7F075190:
|
|
/* 0A9CC0 7F075190 C7B2009C */ lwc1 $f18, 0x9c($sp)
|
|
/* 0A9CC4 7F075194 C7AE0058 */ lwc1 $f14, 0x58($sp)
|
|
/* 0A9CC8 7F075198 C7A400A0 */ lwc1 $f4, 0xa0($sp)
|
|
/* 0A9CCC 7F07519C 460C9182 */ mul.s $f6, $f18, $f12
|
|
/* 0A9CD0 7F0751A0 C7B0005C */ lwc1 $f16, 0x5c($sp)
|
|
/* 0A9CD4 7F0751A4 460E2282 */ mul.s $f10, $f4, $f14
|
|
/* 0A9CD8 7F0751A8 460A3200 */ add.s $f8, $f6, $f10
|
|
/* 0A9CDC 7F0751AC C7A600A4 */ lwc1 $f6, 0xa4($sp)
|
|
/* 0A9CE0 7F0751B0 46068282 */ mul.s $f10, $f16, $f6
|
|
/* 0A9CE4 7F0751B4 46085280 */ add.s $f10, $f10, $f8
|
|
/* 0A9CE8 7F0751B8 C7A80060 */ lwc1 $f8, 0x60($sp)
|
|
/* 0A9CEC 7F0751BC 46085002 */ mul.s $f0, $f10, $f8
|
|
/* 0A9CF0 7F0751C0 E7A80030 */ swc1 $f8, 0x30($sp)
|
|
/* 0A9CF4 7F0751C4 46006282 */ mul.s $f10, $f12, $f0
|
|
/* 0A9CF8 7F0751C8 46125480 */ add.s $f18, $f10, $f18
|
|
/* 0A9CFC 7F0751CC 46007282 */ mul.s $f10, $f14, $f0
|
|
/* 0A9D00 7F0751D0 E7B2009C */ swc1 $f18, 0x9c($sp)
|
|
/* 0A9D04 7F0751D4 46045280 */ add.s $f10, $f10, $f4
|
|
/* 0A9D08 7F0751D8 46008102 */ mul.s $f4, $f16, $f0
|
|
/* 0A9D0C 7F0751DC E7AA00A0 */ swc1 $f10, 0xa0($sp)
|
|
/* 0A9D10 7F0751E0 46062280 */ add.s $f10, $f4, $f6
|
|
/* 0A9D14 7F0751E4 C7A40090 */ lwc1 $f4, 0x90($sp)
|
|
/* 0A9D18 7F0751E8 E7AA00A4 */ swc1 $f10, 0xa4($sp)
|
|
/* 0A9D1C 7F0751EC 460C2182 */ mul.s $f6, $f4, $f12
|
|
/* 0A9D20 7F0751F0 C7AA0094 */ lwc1 $f10, 0x94($sp)
|
|
/* 0A9D24 7F0751F4 E7A4002C */ swc1 $f4, 0x2c($sp)
|
|
/* 0A9D28 7F0751F8 460E5202 */ mul.s $f8, $f10, $f14
|
|
/* 0A9D2C 7F0751FC 46083180 */ add.s $f6, $f6, $f8
|
|
/* 0A9D30 7F075200 C7A80098 */ lwc1 $f8, 0x98($sp)
|
|
/* 0A9D34 7F075204 46088102 */ mul.s $f4, $f16, $f8
|
|
/* 0A9D38 7F075208 46062100 */ add.s $f4, $f4, $f6
|
|
/* 0A9D3C 7F07520C C7A60030 */ lwc1 $f6, 0x30($sp)
|
|
/* 0A9D40 7F075210 46062082 */ mul.s $f2, $f4, $f6
|
|
/* 0A9D44 7F075214 C7A6002C */ lwc1 $f6, 0x2c($sp)
|
|
/* 0A9D48 7F075218 46026102 */ mul.s $f4, $f12, $f2
|
|
/* 0A9D4C 7F07521C 46062100 */ add.s $f4, $f4, $f6
|
|
/* 0A9D50 7F075220 46027182 */ mul.s $f6, $f14, $f2
|
|
/* 0A9D54 7F075224 E7A40090 */ swc1 $f4, 0x90($sp)
|
|
/* 0A9D58 7F075228 460A3100 */ add.s $f4, $f6, $f10
|
|
/* 0A9D5C 7F07522C 46028182 */ mul.s $f6, $f16, $f2
|
|
/* 0A9D60 7F075230 E7A40094 */ swc1 $f4, 0x94($sp)
|
|
/* 0A9D64 7F075234 46083280 */ add.s $f10, $f6, $f8
|
|
/* 0A9D68 7F075238 E7AA0098 */ swc1 $f10, 0x98($sp)
|
|
.L7F07523C:
|
|
/* 0A9D6C 7F07523C C7B2009C */ lwc1 $f18, 0x9c($sp)
|
|
.L7F075240:
|
|
/* 0A9D70 7F075240 C7A40090 */ lwc1 $f4, 0x90($sp)
|
|
/* 0A9D74 7F075244 C7AE00A0 */ lwc1 $f14, 0xa0($sp)
|
|
/* 0A9D78 7F075248 C7A80094 */ lwc1 $f8, 0x94($sp)
|
|
/* 0A9D7C 7F07524C 46049182 */ mul.s $f6, $f18, $f4
|
|
/* 0A9D80 7F075250 C7B000A4 */ lwc1 $f16, 0xa4($sp)
|
|
/* 0A9D84 7F075254 E7A40030 */ swc1 $f4, 0x30($sp)
|
|
/* 0A9D88 7F075258 46087282 */ mul.s $f10, $f14, $f8
|
|
/* 0A9D8C 7F07525C 8FBF001C */ lw $ra, 0x1c($sp)
|
|
/* 0A9D90 7F075260 00001025 */ move $v0, $zero
|
|
/* 0A9D94 7F075264 460A3180 */ add.s $f6, $f6, $f10
|
|
/* 0A9D98 7F075268 C7AA0098 */ lwc1 $f10, 0x98($sp)
|
|
/* 0A9D9C 7F07526C 46105102 */ mul.s $f4, $f10, $f16
|
|
/* 0A9DA0 7F075270 46062080 */ add.s $f2, $f4, $f6
|
|
/* 0A9DA4 7F075274 44802000 */ mtc1 $zero, $f4
|
|
/* 0A9DA8 7F075278 00000000 */ nop
|
|
/* 0A9DAC 7F07527C 4602203C */ c.lt.s $f4, $f2
|
|
/* 0A9DB0 7F075280 00000000 */ nop
|
|
/* 0A9DB4 7F075284 4500001A */ bc1f .L7F0752F0
|
|
/* 0A9DB8 7F075288 00000000 */ nop
|
|
/* 0A9DBC 7F07528C 46129182 */ mul.s $f6, $f18, $f18
|
|
/* 0A9DC0 7F075290 00000000 */ nop
|
|
/* 0A9DC4 7F075294 460E7102 */ mul.s $f4, $f14, $f14
|
|
/* 0A9DC8 7F075298 46043180 */ add.s $f6, $f6, $f4
|
|
/* 0A9DCC 7F07529C 46108102 */ mul.s $f4, $f16, $f16
|
|
/* 0A9DD0 7F0752A0 46062000 */ add.s $f0, $f4, $f6
|
|
/* 0A9DD4 7F0752A4 C7A40030 */ lwc1 $f4, 0x30($sp)
|
|
/* 0A9DD8 7F0752A8 46042182 */ mul.s $f6, $f4, $f4
|
|
/* 0A9DDC 7F0752AC 00000000 */ nop
|
|
/* 0A9DE0 7F0752B0 46084102 */ mul.s $f4, $f8, $f8
|
|
/* 0A9DE4 7F0752B4 46043200 */ add.s $f8, $f6, $f4
|
|
/* 0A9DE8 7F0752B8 460A5182 */ mul.s $f6, $f10, $f10
|
|
/* 0A9DEC 7F0752BC C7AA008C */ lwc1 $f10, 0x8c($sp)
|
|
/* 0A9DF0 7F0752C0 46021102 */ mul.s $f4, $f2, $f2
|
|
/* 0A9DF4 7F0752C4 46083300 */ add.s $f12, $f6, $f8
|
|
/* 0A9DF8 7F0752C8 460A6181 */ sub.s $f6, $f12, $f10
|
|
/* 0A9DFC 7F0752CC 46003202 */ mul.s $f8, $f6, $f0
|
|
/* 0A9E00 7F0752D0 4604403E */ c.le.s $f8, $f4
|
|
/* 0A9E04 7F0752D4 00000000 */ nop
|
|
/* 0A9E08 7F0752D8 45000003 */ bc1f .L7F0752E8
|
|
/* 0A9E0C 7F0752DC 00000000 */ nop
|
|
/* 0A9E10 7F0752E0 10000003 */ b .L7F0752F0
|
|
/* 0A9E14 7F0752E4 24020001 */ li $v0, 1
|
|
.L7F0752E8:
|
|
/* 0A9E18 7F0752E8 10000001 */ b .L7F0752F0
|
|
/* 0A9E1C 7F0752EC 00001025 */ move $v0, $zero
|
|
.L7F0752F0:
|
|
/* 0A9E20 7F0752F0 8FB00018 */ lw $s0, 0x18($sp)
|
|
/* 0A9E24 7F0752F4 03E00008 */ jr $ra
|
|
/* 0A9E28 7F0752F8 27BD00B0 */ addiu $sp, $sp, 0xb0
|
|
)
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef NONMATCHING
|
|
void sub_GAME_7F0752FC(void) {
|
|
|
|
}
|
|
#else
|
|
GLOBAL_ASM(
|
|
.late_rodata
|
|
/*D:80054DB4*/
|
|
glabel jpt_80054DB4
|
|
.word .L7F075470
|
|
.word .L7F075470
|
|
.word .L7F075470
|
|
.word .L7F075470
|
|
.word .L7F075470
|
|
.word .L7F075470
|
|
.word .L7F075470
|
|
.word .L7F07543C
|
|
.word .L7F075470
|
|
.word .L7F0753CC
|
|
.word .L7F075470
|
|
.word .L7F075470
|
|
.word .L7F075470
|
|
.word .L7F075470
|
|
.word .L7F075470
|
|
.word .L7F075470
|
|
.word .L7F075404
|
|
.word .L7F075450
|
|
.word .L7F075470
|
|
.word .L7F075470
|
|
.word .L7F075470
|
|
.word .L7F075470
|
|
.word .L7F075464
|
|
.word .L7F075470
|
|
|
|
.text
|
|
glabel sub_GAME_7F0752FC
|
|
/* 0A9E2C 7F0752FC 27BDFFD0 */ addiu $sp, $sp, -0x30
|
|
/* 0A9E30 7F075300 AFBF002C */ sw $ra, 0x2c($sp)
|
|
/* 0A9E34 7F075304 AFB40028 */ sw $s4, 0x28($sp)
|
|
/* 0A9E38 7F075308 AFB30024 */ sw $s3, 0x24($sp)
|
|
/* 0A9E3C 7F07530C AFB20020 */ sw $s2, 0x20($sp)
|
|
/* 0A9E40 7F075310 AFB1001C */ sw $s1, 0x1c($sp)
|
|
/* 0A9E44 7F075314 AFB00018 */ sw $s0, 0x18($sp)
|
|
/* 0A9E48 7F075318 AFA7003C */ sw $a3, 0x3c($sp)
|
|
/* 0A9E4C 7F07531C 8CE20000 */ lw $v0, ($a3)
|
|
/* 0A9E50 7F075320 00809025 */ move $s2, $a0
|
|
/* 0A9E54 7F075324 00A09825 */ move $s3, $a1
|
|
/* 0A9E58 7F075328 00C0A025 */ move $s4, $a2
|
|
/* 0A9E5C 7F07532C 10400004 */ beqz $v0, .L7F075340
|
|
/* 0A9E60 7F075330 24110001 */ li $s1, 1
|
|
/* 0A9E64 7F075334 00408025 */ move $s0, $v0
|
|
/* 0A9E68 7F075338 10000003 */ b .L7F075348
|
|
/* 0A9E6C 7F07533C ACE00000 */ sw $zero, ($a3)
|
|
.L7F075340:
|
|
/* 0A9E70 7F075340 8E4F0008 */ lw $t7, 8($s2)
|
|
/* 0A9E74 7F075344 8DF00000 */ lw $s0, ($t7)
|
|
.L7F075348:
|
|
/* 0A9E78 7F075348 5200004C */ beql $s0, $zero, .L7F07547C
|
|
/* 0A9E7C 7F07534C 00001025 */ move $v0, $zero
|
|
.L7F075350:
|
|
/* 0A9E80 7F075350 12200006 */ beqz $s1, .L7F07536C
|
|
/* 0A9E84 7F075354 00000000 */ nop
|
|
/* 0A9E88 7F075358 8E020014 */ lw $v0, 0x14($s0)
|
|
/* 0A9E8C 7F07535C 10400003 */ beqz $v0, .L7F07536C
|
|
/* 0A9E90 7F075360 00000000 */ nop
|
|
/* 0A9E94 7F075364 1000000D */ b .L7F07539C
|
|
/* 0A9E98 7F075368 00408025 */ move $s0, $v0
|
|
.L7F07536C:
|
|
/* 0A9E9C 7F07536C 12000009 */ beqz $s0, .L7F075394
|
|
/* 0A9EA0 7F075370 00000000 */ nop
|
|
/* 0A9EA4 7F075374 8E02000C */ lw $v0, 0xc($s0)
|
|
.L7F075378:
|
|
/* 0A9EA8 7F075378 50400004 */ beql $v0, $zero, .L7F07538C
|
|
/* 0A9EAC 7F07537C 8E100008 */ lw $s0, 8($s0)
|
|
/* 0A9EB0 7F075380 10000004 */ b .L7F075394
|
|
/* 0A9EB4 7F075384 00408025 */ move $s0, $v0
|
|
/* 0A9EB8 7F075388 8E100008 */ lw $s0, 8($s0)
|
|
.L7F07538C:
|
|
/* 0A9EBC 7F07538C 5600FFFA */ bnezl $s0, .L7F075378
|
|
/* 0A9EC0 7F075390 8E02000C */ lw $v0, 0xc($s0)
|
|
.L7F075394:
|
|
/* 0A9EC4 7F075394 52000039 */ beql $s0, $zero, .L7F07547C
|
|
/* 0A9EC8 7F075398 00001025 */ move $v0, $zero
|
|
.L7F07539C:
|
|
/* 0A9ECC 7F07539C 96020000 */ lhu $v0, ($s0)
|
|
/* 0A9ED0 7F0753A0 24110001 */ li $s1, 1
|
|
/* 0A9ED4 7F0753A4 305800FF */ andi $t8, $v0, 0xff
|
|
/* 0A9ED8 7F0753A8 2719FFFF */ addiu $t9, $t8, -1
|
|
/* 0A9EDC 7F0753AC 2F210018 */ sltiu $at, $t9, 0x18
|
|
/* 0A9EE0 7F0753B0 1020002F */ beqz $at, .L7F075470
|
|
/* 0A9EE4 7F0753B4 0019C880 */ sll $t9, $t9, 2
|
|
/* 0A9EE8 7F0753B8 3C018005 */ lui $at, %hi(jpt_80054DB4)
|
|
/* 0A9EEC 7F0753BC 00390821 */ addu $at, $at, $t9
|
|
/* 0A9EF0 7F0753C0 8C394DB4 */ lw $t9, %lo(jpt_80054DB4)($at)
|
|
.L7F0753C4:
|
|
/* 0A9EF4 7F0753C4 03200008 */ jr $t9
|
|
/* 0A9EF8 7F0753C8 00000000 */ nop
|
|
.L7F0753CC:
|
|
/* 0A9EFC 7F0753CC 02402025 */ move $a0, $s2
|
|
/* 0A9F00 7F0753D0 02002825 */ move $a1, $s0
|
|
/* 0A9F04 7F0753D4 02603025 */ move $a2, $s3
|
|
/* 0A9F08 7F0753D8 0FC1D31A */ jal sub_GAME_7F074C68
|
|
/* 0A9F0C 7F0753DC 02803825 */ move $a3, $s4
|
|
/* 0A9F10 7F0753E0 10400006 */ beqz $v0, .L7F0753FC
|
|
/* 0A9F14 7F0753E4 00000000 */ nop
|
|
/* 0A9F18 7F0753E8 8FA8003C */ lw $t0, 0x3c($sp)
|
|
/* 0A9F1C 7F0753EC AD100000 */ sw $s0, ($t0)
|
|
/* 0A9F20 7F0753F0 8E090004 */ lw $t1, 4($s0)
|
|
/* 0A9F24 7F0753F4 10000021 */ b .L7F07547C
|
|
/* 0A9F28 7F0753F8 8D220000 */ lw $v0, ($t1)
|
|
.L7F0753FC:
|
|
/* 0A9F2C 7F0753FC 1000001C */ b .L7F075470
|
|
/* 0A9F30 7F075400 00008825 */ move $s1, $zero
|
|
.L7F075404:
|
|
/* 0A9F34 7F075404 02402025 */ move $a0, $s2
|
|
/* 0A9F38 7F075408 02002825 */ move $a1, $s0
|
|
/* 0A9F3C 7F07540C 02603025 */ move $a2, $s3
|
|
/* 0A9F40 7F075410 0FC1D32B */ jal sub_GAME_7F074CAC
|
|
/* 0A9F44 7F075414 02803825 */ move $a3, $s4
|
|
/* 0A9F48 7F075418 10400006 */ beqz $v0, .L7F075434
|
|
/* 0A9F4C 7F07541C 00000000 */ nop
|
|
/* 0A9F50 7F075420 8FAA003C */ lw $t2, 0x3c($sp)
|
|
/* 0A9F54 7F075424 AD500000 */ sw $s0, ($t2)
|
|
/* 0A9F58 7F075428 8E0B0004 */ lw $t3, 4($s0)
|
|
/* 0A9F5C 7F07542C 10000013 */ b .L7F07547C
|
|
/* 0A9F60 7F075430 8D620000 */ lw $v0, ($t3)
|
|
.L7F075434:
|
|
/* 0A9F64 7F075434 1000000E */ b .L7F075470
|
|
/* 0A9F68 7F075438 00008825 */ move $s1, $zero
|
|
.L7F07543C:
|
|
/* 0A9F6C 7F07543C 02402025 */ move $a0, $s2
|
|
/* 0A9F70 7F075440 0FC1BA5C */ jal modelApplyDistanceRelations
|
|
/* 0A9F74 7F075444 02002825 */ move $a1, $s0
|
|
/* 0A9F78 7F075448 10000009 */ b .L7F075470
|
|
/* 0A9F7C 7F07544C 00000000 */ nop
|
|
.L7F075450:
|
|
/* 0A9F80 7F075450 02402025 */ move $a0, $s2
|
|
/* 0A9F84 7F075454 0FC1BA6F */ jal modelApplyToggleRelations
|
|
/* 0A9F88 7F075458 02002825 */ move $a1, $s0
|
|
/* 0A9F8C 7F07545C 10000004 */ b .L7F075470
|
|
/* 0A9F90 7F075460 00000000 */ nop
|
|
.L7F075464:
|
|
/* 0A9F94 7F075464 02402025 */ move $a0, $s2
|
|
/* 0A9F98 7F075468 0FC1BA82 */ jal modelApplyHeadRelations
|
|
/* 0A9F9C 7F07546C 02002825 */ move $a1, $s0
|
|
def_7F0753C4:
|
|
.L7F075470:
|
|
/* 0A9FA0 7F075470 1600FFB7 */ bnez $s0, .L7F075350
|
|
/* 0A9FA4 7F075474 00000000 */ nop
|
|
/* 0A9FA8 7F075478 00001025 */ move $v0, $zero
|
|
.L7F07547C:
|
|
/* 0A9FAC 7F07547C 8FBF002C */ lw $ra, 0x2c($sp)
|
|
/* 0A9FB0 7F075480 8FB00018 */ lw $s0, 0x18($sp)
|
|
/* 0A9FB4 7F075484 8FB1001C */ lw $s1, 0x1c($sp)
|
|
/* 0A9FB8 7F075488 8FB20020 */ lw $s2, 0x20($sp)
|
|
/* 0A9FBC 7F07548C 8FB30024 */ lw $s3, 0x24($sp)
|
|
/* 0A9FC0 7F075490 8FB40028 */ lw $s4, 0x28($sp)
|
|
/* 0A9FC4 7F075494 03E00008 */ jr $ra
|
|
/* 0A9FC8 7F075498 27BD0030 */ addiu $sp, $sp, 0x30
|
|
)
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef NONMATCHING
|
|
void sub_GAME_7F07549C(s32 arg0, f32 *arg1, f32 *arg2, ModelNode *arg3)
|
|
{
|
|
//uses sh vs sw
|
|
arg3->Opcode = 0;
|
|
sub_GAME_7F0752FC(arg0, arg1, arg2, arg3);
|
|
}
|
|
#else
|
|
GLOBAL_ASM(
|
|
.text
|
|
glabel sub_GAME_7F07549C
|
|
/* 0A9FCC 7F07549C 27BDFFE8 */ addiu $sp, $sp, -0x18
|
|
/* 0A9FD0 7F0754A0 AFBF0014 */ sw $ra, 0x14($sp)
|
|
/* 0A9FD4 7F0754A4 0FC1D4BF */ jal sub_GAME_7F0752FC
|
|
/* 0A9FD8 7F0754A8 ACE00000 */ sw $zero, ($a3)
|
|
/* 0A9FDC 7F0754AC 8FBF0014 */ lw $ra, 0x14($sp)
|
|
/* 0A9FE0 7F0754B0 27BD0018 */ addiu $sp, $sp, 0x18
|
|
/* 0A9FE4 7F0754B4 03E00008 */ jr $ra
|
|
/* 0A9FE8 7F0754B8 00000000 */ nop
|
|
)
|
|
#endif
|
|
|
|
|
|
s32 sub_GAME_7F0754BC(ModelAnimation* arg0, s32 arg1, ModelSkeleton* arg2)
|
|
{
|
|
s32 ret;
|
|
s32 var_a1;
|
|
s32 shiftede;
|
|
u32 tmp;
|
|
u32 temp_a2_2;
|
|
|
|
ret = 0;
|
|
shiftede = arg0->unk0E >> 3;
|
|
|
|
if (arg0->unk00 & 0x80000000)
|
|
{
|
|
ret = arg0->unk00 + (arg1 * shiftede);
|
|
}
|
|
else if (D_80036414 != NULL)
|
|
{
|
|
tmp = ((u32) (D_80036414->unk08 + 0xF) >> 4) * 0x10;
|
|
ret = tmp;
|
|
var_a1 = arg0->unk00 + (arg1 * shiftede);
|
|
if (var_a1 & 1)
|
|
{
|
|
var_a1--;
|
|
shiftede++;
|
|
ret++;
|
|
}
|
|
temp_a2_2 = ((u32) (shiftede + 0xF) >> 4) * 0x10;
|
|
romCopy((void* ) tmp, (void* ) var_a1, temp_a2_2);
|
|
D_80036414->unk00 += 1;
|
|
D_80036414->unk08 = tmp + temp_a2_2;
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
|
|
void sub_GAME_7F0755B0(void)
|
|
{
|
|
if (D_80036414 != NULL)
|
|
{
|
|
D_80036414->unk08 = D_80036414->unk04;
|
|
D_80036414->unk00 = NULL;
|
|
}
|
|
}
|
|
|
|
|
|
#define PROMOTE(var) \
|
|
if (var) \
|
|
var = (void *)((u32)var + diff)
|
|
|
|
void modelPromoteNodeOffsetsToPointers(ModelNode *node, u32 vma, u32 fileramaddr)
|
|
{
|
|
s32 diff = fileramaddr - vma;
|
|
s32 i;
|
|
|
|
while (node)
|
|
{
|
|
u32 type = node->Opcode & 0xff;
|
|
|
|
PROMOTE(node->Data);
|
|
PROMOTE(node->Parent);
|
|
PROMOTE(node->Next);
|
|
PROMOTE(node->Prev);
|
|
PROMOTE(node->Child);
|
|
|
|
switch (type)
|
|
{
|
|
case MODELNODE_OPCODE_HEADER:
|
|
{
|
|
ModelRoData_HeaderRecord* rodata = &node->Data->Header;
|
|
PROMOTE(rodata->FirstGroup);
|
|
break;
|
|
}
|
|
|
|
case MODELNODE_OPCODE_GROUP:
|
|
{
|
|
ModelRoData_GroupRecord* rodata = &node->Data->Group;
|
|
PROMOTE(rodata->ChildGroup);
|
|
break;
|
|
}
|
|
|
|
case MODELNODE_OPCODE_OP03:
|
|
{
|
|
ModelRoData_GroupRecord* rodata = &node->Data->Group;
|
|
PROMOTE(rodata->ChildGroup);
|
|
break;
|
|
}
|
|
|
|
case MODELNODE_OPCODE_DL:
|
|
{
|
|
ModelRoData_DisplayListRecord* rodata = &node->Data->DisplayList;
|
|
PROMOTE(rodata->Vertices);
|
|
rodata->BaseAddr = (void *)fileramaddr;
|
|
break;
|
|
}
|
|
|
|
case MODELNODE_OPCODE_DLCOLLISION:
|
|
{
|
|
ModelRoData_DisplayList_CollisionRecord* rodata = &node->Data->DisplayListCollisions;
|
|
PROMOTE(rodata->Vertices);
|
|
PROMOTE(rodata->CollisionVertices);
|
|
PROMOTE(rodata->PointUsage);
|
|
for (i = 0; i < rodata->numCollisionVertices; i++)
|
|
{
|
|
PROMOTE(rodata->CollisionVertices[i].LinkedTo);
|
|
}
|
|
rodata->BaseAddr = (void *)fileramaddr;
|
|
break;
|
|
}
|
|
|
|
case MODELNODE_OPCODE_OP20:
|
|
{
|
|
ModelRoData_HeaderRecord* rodata = &node->Data->Header;
|
|
PROMOTE(rodata->FirstGroup);
|
|
break;
|
|
}
|
|
|
|
case MODELNODE_OPCODE_OP05:
|
|
{
|
|
ModelRoData_Op05Record* rodata = &node->Data->Op05;
|
|
|
|
// shared with op07
|
|
PROMOTE(rodata->Children);
|
|
PROMOTE(rodata->Vertices);
|
|
PROMOTE(rodata->Images);
|
|
for (i = 0; i < rodata->NumChildren; i++)
|
|
{
|
|
PROMOTE(rodata->Children[i].unk04);
|
|
}
|
|
|
|
rodata->BaseAddr = (void *)fileramaddr;
|
|
break;
|
|
}
|
|
|
|
case MODELNODE_OPCODE_OP07:
|
|
{
|
|
ModelRoData_Op07Record* rodata = &node->Data->Op07;
|
|
PROMOTE(rodata->unk00);
|
|
PROMOTE(rodata->unk04);
|
|
|
|
// shared with op05
|
|
PROMOTE(rodata->Children);
|
|
PROMOTE(rodata->Vertices);
|
|
PROMOTE(rodata->Images);
|
|
for (i = 0; i < rodata->NumChildren; i++)
|
|
{
|
|
PROMOTE(rodata->Children[i].unk04);
|
|
}
|
|
|
|
rodata->BaseAddr = (void *)fileramaddr;
|
|
break;
|
|
}
|
|
|
|
case MODELNODE_OPCODE_OP06:
|
|
{
|
|
ModelRoData_Op06Record* rodata = &node->Data->Op06;
|
|
rodata->BaseAddr = (void *)fileramaddr;
|
|
break;
|
|
}
|
|
|
|
case MODELNODE_OPCODE_LOD:
|
|
{
|
|
ModelRoData_LODRecord* rodata = &node->Data->LOD;
|
|
PROMOTE(rodata->Affects);
|
|
node->Child = rodata->Affects;
|
|
break;
|
|
}
|
|
|
|
case MODELNODE_OPCODE_SWITCH:
|
|
{
|
|
ModelRoData_SwitchRecord* rodata = &node->Data->Switch;
|
|
PROMOTE(rodata->Controls);
|
|
break;
|
|
}
|
|
|
|
case MODELNODE_OPCODE_BSP:
|
|
{
|
|
ModelRoData_BSPRecord* rodata = &node->Data->BSP;
|
|
PROMOTE(rodata->leftChild);
|
|
PROMOTE(rodata->rightChild);
|
|
break;
|
|
}
|
|
|
|
case MODELNODE_OPCODE_OP17:
|
|
{
|
|
ModelRoData_GroupRecord* rodata = &node->Data->Group;
|
|
PROMOTE(rodata->ChildGroup);
|
|
break;
|
|
}
|
|
|
|
case MODELNODE_OPCODE_OP11:
|
|
{
|
|
ModelRoData_Op11Record* rodata = &node->Data->Op11;
|
|
PROMOTE(rodata->unk0c[15]);
|
|
rodata->BaseAddr = (void *)fileramaddr;
|
|
break;
|
|
}
|
|
|
|
case MODELNODE_OPCODE_GUNFIRE:
|
|
{
|
|
ModelRoData_GunfireRecord* rodata = &node->Data->Gunfire;
|
|
PROMOTE(rodata->Image);
|
|
rodata->BaseAddr = (void *)fileramaddr;
|
|
break;
|
|
}
|
|
|
|
case MODELNODE_OPCODE_SHADOW:
|
|
{
|
|
ModelRoData_ShadowRecord* rodata = &node->Data->Shadow;
|
|
PROMOTE(rodata->image);
|
|
PROMOTE(rodata->Header);
|
|
rodata->BaseAddr = (void *)fileramaddr;
|
|
break;
|
|
}
|
|
|
|
case MODELNODE_OPCODE_DLPRIMARY:
|
|
{
|
|
ModelRoData_DisplayListPrimaryRecord* rodata = &node->Data->DisplayListPrimary;
|
|
PROMOTE(rodata->Vertices);
|
|
rodata->BaseAddr = (void *)fileramaddr;
|
|
break;
|
|
}
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
if (node->Child)
|
|
{
|
|
node = node->Child;
|
|
}
|
|
else
|
|
{
|
|
while (node)
|
|
{
|
|
if (node->Next)
|
|
{
|
|
node = node->Next;
|
|
break;
|
|
}
|
|
|
|
node = node->Parent;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void sub_GAME_7F075A90(ModelFileHeader *header, s32 vma, u32 addr) {
|
|
s32 diff = addr - vma;
|
|
s32 i;
|
|
|
|
for(i = 0;i < header->numSwitches;i++)
|
|
{
|
|
PROMOTE(header->Switches[i]);
|
|
}
|
|
modelPromoteNodeOffsetsToPointers(header->RootNode, vma, addr);
|
|
}
|
|
|
|
void REMOVED_sub_GAME_7F075B08(s32 param_1,s32 param_2,s32 param_3,s32 param_4)
|
|
{
|
|
return;
|
|
}
|
|
|
|
|
|
s32 modelCalculateRwDataIndexes(ModelNode *basenode)
|
|
{
|
|
u16 len = 0;
|
|
ModelNode *node = basenode;
|
|
union ModelRoData *rodata;
|
|
|
|
while (node)
|
|
{
|
|
u32 type = node->Opcode & 0xff;
|
|
|
|
switch (type)
|
|
{
|
|
case MODELNODE_OPCODE_HEADER:
|
|
if (1)
|
|
{
|
|
ModelRoData_HeaderRecord *rodata = &node->Data->Header;
|
|
rodata->RwDataIndex = len;
|
|
len += sizeof(struct ModelRwData_HeaderRecord) / 4;
|
|
break;
|
|
}
|
|
case MODELNODE_OPCODE_OP07:
|
|
if (1)
|
|
{
|
|
ModelRoData_Op07Record *rodata = &node->Data->Op07;
|
|
rodata->RwDataIndex = len;
|
|
len += sizeof(struct ModelRwData_Op07Record) / 4;
|
|
break;
|
|
}
|
|
case MODELNODE_OPCODE_LOD:
|
|
if (1)
|
|
{
|
|
ModelRoData_LODRecord *rodata = &node->Data->LOD;
|
|
rodata->RwDataIndex = len;
|
|
len += sizeof(struct ModelRwData_LODRecord) / 4;
|
|
node->Child = rodata->Affects;
|
|
break;
|
|
}
|
|
case MODELNODE_OPCODE_SWITCH:
|
|
if (1)
|
|
{
|
|
ModelRoData_SwitchRecord *rodata = &node->Data->Switch;
|
|
rodata->RwDataIndex = len;
|
|
len += sizeof(struct ModelRwData_SwitchRecord) / 4;
|
|
node->Child = rodata->Controls;
|
|
break;
|
|
}
|
|
case MODELNODE_OPCODE_HEAD:
|
|
if (1)
|
|
{
|
|
ModelRoData_HeadPlaceholderRecord *rodata = &node->Data->HeadPlaceholder;
|
|
rodata->RwDataIndex = len;
|
|
len += sizeof(struct ModelRwData_HeadPlaceholderRecord) / 4;
|
|
node->Child = NULL;
|
|
break;
|
|
}
|
|
case MODELNODE_OPCODE_BSP:
|
|
if (1)
|
|
{
|
|
ModelRoData_BSPRecord *rodata = &node->Data->BSP;
|
|
rodata->RwDataIndex = len;
|
|
len += sizeof(struct ModelRwData_BSPRecord) / 4;
|
|
modelApplyReorderRelationsByArg(node, FALSE);
|
|
break;
|
|
}
|
|
case MODELNODE_OPCODE_OP11:
|
|
if (1)
|
|
{
|
|
ModelRoData_Op11Record *rodata = &node->Data->Op11;
|
|
rodata->RwDataIndex = len;
|
|
len += sizeof(struct ModelRwData_Op11Record) / 4;
|
|
break;
|
|
}
|
|
case MODELNODE_OPCODE_GUNFIRE:
|
|
if (1)
|
|
{
|
|
ModelRoData_GunfireRecord *rodata = &node->Data->Gunfire;
|
|
rodata->RwDataIndex = len;
|
|
len += sizeof(struct ModelRwData_GunfireRecord) / 4;
|
|
break;
|
|
}
|
|
case MODELNODE_OPCODE_DLCOLLISION:
|
|
if (1)
|
|
{
|
|
ModelRoData_DisplayList_CollisionRecord *rodata = &node->Data->DisplayListCollisions;
|
|
rodata->RwDataIndex = len;
|
|
len += sizeof(struct ModelRwData_DisplayList_CollisionRecord) / 4;
|
|
break;
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
|
|
if (node->Child)
|
|
{
|
|
node = node->Child;
|
|
}
|
|
else
|
|
{
|
|
while (node)
|
|
{
|
|
if (node == basenode->Parent)
|
|
{
|
|
node = NULL;
|
|
break;
|
|
}
|
|
|
|
if (node->Next)
|
|
{
|
|
node = node->Next;
|
|
break;
|
|
}
|
|
|
|
node = node->Parent;
|
|
}
|
|
}
|
|
}
|
|
|
|
return len;
|
|
}
|
|
|
|
|
|
void modelCalculateRwDataLen(struct ModelFileHeader *objheader)
|
|
{
|
|
#if defined(LEFTOVERDEBUG)
|
|
objheader->isLoaded = 1;
|
|
#endif
|
|
objheader->numRecords = modelCalculateRwDataIndexes(objheader->RootNode);
|
|
}
|
|
|
|
|
|
void modelInitRwData(Model *model, ModelNode *startnode)
|
|
{
|
|
ModelNode *node = startnode;
|
|
|
|
while (node)
|
|
{
|
|
u32 type = node->Opcode & 0xFF;
|
|
|
|
switch (type)
|
|
{
|
|
case MODELNODE_OPCODE_HEADER:
|
|
if (1)
|
|
{
|
|
ModelRwData_HeaderRecord* rwdata = &modelGetNodeRwData(model, node)->Header;
|
|
|
|
rwdata->unk00 = 0;
|
|
rwdata->ground = 0;
|
|
rwdata->pos.x = 0;
|
|
rwdata->pos.y = 0;
|
|
rwdata->pos.z = 0;
|
|
rwdata->unk14 = 0;
|
|
rwdata->unk18 = 0;
|
|
rwdata->unk1c = 0;
|
|
|
|
rwdata->unk01 = 0;
|
|
rwdata->unk34.x = 0;
|
|
rwdata->unk34.y = 0;
|
|
rwdata->unk34.z = 0;
|
|
rwdata->unk30 = 0;
|
|
rwdata->unk24.x = 0;
|
|
rwdata->unk24.y = 0;
|
|
rwdata->unk24.z = 0;
|
|
rwdata->unk20 = 0;
|
|
|
|
rwdata->unk02 = 0;
|
|
rwdata->unk4c.x = 0;
|
|
rwdata->unk4c.y = 0;
|
|
rwdata->unk4c.z = 0;
|
|
rwdata->unk40.x = 0;
|
|
rwdata->unk40.y = 0;
|
|
rwdata->unk40.z = 0;
|
|
rwdata->unk5c = 0;
|
|
break;
|
|
}
|
|
|
|
case MODELNODE_OPCODE_OP07:
|
|
if (1)
|
|
{
|
|
ModelRwData_Op07Record* rwdata = &modelGetNodeRwData(model, node)->Op07;
|
|
rwdata->index = 0;
|
|
break;
|
|
}
|
|
|
|
|
|
case MODELNODE_OPCODE_LOD:
|
|
if (1)
|
|
{
|
|
ModelRoData_LODRecord* rodata = &node->Data->LOD;
|
|
ModelRwData_LODRecord* rwdata = &modelGetNodeRwData(model, node)->LOD;
|
|
rwdata->visible = FALSE;
|
|
node->Child = rodata->Affects;
|
|
break;
|
|
}
|
|
|
|
case MODELNODE_OPCODE_SWITCH:
|
|
if (1)
|
|
{
|
|
ModelRoData_SwitchRecord* rodata = &node->Data->Switch;
|
|
ModelRwData_SwitchRecord* rwdata = &modelGetNodeRwData(model, node)->Switch;
|
|
rwdata->visible = TRUE;
|
|
node->Child = rodata->Controls;
|
|
break;
|
|
}
|
|
|
|
case MODELNODE_OPCODE_HEAD:
|
|
if (1)
|
|
{
|
|
ModelRwData_HeadPlaceholderRecord* rwdata = &modelGetNodeRwData(model, node)->HeadPlaceholder;
|
|
rwdata->ModelFileHeader = NULL;
|
|
rwdata->RwDatas = NULL;
|
|
break;
|
|
}
|
|
|
|
case MODELNODE_OPCODE_BSP:
|
|
if (1)
|
|
{
|
|
ModelRwData_BSPRecord* rwdata = &modelGetNodeRwData(model, node)->BSP;
|
|
rwdata->visible = FALSE;
|
|
modelApplyReorderRelations(model, node);
|
|
break;
|
|
}
|
|
|
|
case MODELNODE_OPCODE_OP11:
|
|
if (1)
|
|
{
|
|
ModelRwData_Op11Record* rwdata = &modelGetNodeRwData(model, node)->Op11;
|
|
rwdata->unk00 = FALSE;
|
|
break;
|
|
}
|
|
|
|
case MODELNODE_OPCODE_GUNFIRE:
|
|
if (1)
|
|
{
|
|
ModelRwData_GunfireRecord* rwdata = &modelGetNodeRwData(model, node)->Gunfire;
|
|
rwdata->visible = FALSE;
|
|
break;
|
|
}
|
|
|
|
case MODELNODE_OPCODE_DLCOLLISION:
|
|
if (1)
|
|
{
|
|
ModelRoData_DisplayList_CollisionRecord* rodata = &node->Data->DisplayListCollisions;
|
|
ModelRwData_DisplayList_CollisionRecord* rwdata = &modelGetNodeRwData(model, node)->DisplayListCollisions;
|
|
rwdata->Vertices = rodata->Vertices;
|
|
rwdata->gdl = rodata->Primary;
|
|
break;
|
|
}
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
if (node->Child)
|
|
{
|
|
node = node->Child;
|
|
}
|
|
else
|
|
{
|
|
while (node)
|
|
{
|
|
if (node == startnode->Parent)
|
|
{
|
|
node = NULL;
|
|
break;
|
|
}
|
|
|
|
if (node->Next)
|
|
{
|
|
node = node->Next;
|
|
break;
|
|
}
|
|
|
|
node = node->Parent;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void modelInit(struct Model *objinst, struct ModelFileHeader *header, u32 *data)
|
|
{
|
|
objinst->obj = header;
|
|
objinst->datas = data;
|
|
objinst->Type = -1;
|
|
objinst->attachedto = NULL;
|
|
objinst->attachedto_objinst = NULL;
|
|
objinst->scale = 1.0;
|
|
modelInitRwData(objinst, header->RootNode);
|
|
}
|
|
|
|
|
|
// PD: animInit
|
|
void animInit(struct Model *objinst, struct ModelFileHeader *header, u32 *data)
|
|
{
|
|
modelInit(objinst, header, data);
|
|
objinst->anim = NULL;
|
|
objinst->anim2 = NULL;
|
|
objinst->animlooping = 0;
|
|
objinst->animflipfunc = 0;
|
|
objinst->unk9c = 0;
|
|
objinst->unka0 = 0;
|
|
objinst->unk2c = 0.0f;
|
|
objinst->timespeed = 0.0f;
|
|
objinst->unk5c = 0.0f;
|
|
objinst->unk7c = 0.0f;
|
|
objinst->unk84 = 0.0f;
|
|
objinst->unk88 = 0.0f;
|
|
objinst->unkb0 = 0.0f;
|
|
objinst->speed = 1.0f;
|
|
objinst->speed2 = 1.0f;
|
|
objinst->playspeed = 1.0f;
|
|
objinst->unkb8 = 1.0f;
|
|
objinst->endframe = -1.0f;
|
|
objinst->unk6c = -1.0f;
|
|
}
|
|
|
|
|
|
// PD: model00023108
|
|
void modelAttachPart(Model *pmodel, ModelFileHeader *pmodeldef, ModelNode *pnode, ModelFileHeader *cmodeldef)
|
|
{
|
|
ModelRwData_HeadPlaceholderRecord *rwdata = modelGetNodeRwData(pmodel, pnode);
|
|
ModelNode *node;
|
|
|
|
rwdata->ModelFileHeader = cmodeldef;
|
|
rwdata->RwDatas = &pmodel->datas[pmodeldef->numRecords];
|
|
|
|
pnode->Child = cmodeldef->RootNode;
|
|
|
|
node = pnode->Child;
|
|
|
|
while (node)
|
|
{
|
|
node->Parent = pnode;
|
|
node = node->Next;
|
|
}
|
|
|
|
pmodeldef->numRecords += modelCalculateRwDataIndexes(pnode->Child);
|
|
}
|
|
|
|
|
|
/**
|
|
* This function can be called repeatedly to iterate a model's display lists.
|
|
*
|
|
* On the first call, the value passed as nodeptr should point to a NULL value.
|
|
* Each time the function is called, it will update *gdlptr to point to the next
|
|
* display list, and will update *nodeptr to point to the current node. On
|
|
* subsequent calls, the same values should be passed as nodeptr and gdlptr so
|
|
* the function can continue correctly.
|
|
*
|
|
* Note that some node types support multiple display lists, so the function
|
|
* may return the same node while it iterates the display lists for that node.
|
|
*/
|
|
void modelIterateDisplayLists(ModelFileHeader *fileheader, ModelNode **nodeptr, Gfx **gdlptr)
|
|
{
|
|
ModelNode *node = *nodeptr;
|
|
union ModelRoData *rodata;
|
|
Gfx *gdl = NULL;
|
|
|
|
if (node == NULL)
|
|
{
|
|
node = fileheader->RootNode;
|
|
}
|
|
|
|
while (node)
|
|
{
|
|
u32 type = node->Opcode & 0xff;
|
|
|
|
switch (type)
|
|
{
|
|
case MODELNODE_OPCODE_DL:
|
|
rodata = node->Data;
|
|
|
|
if (node != *nodeptr)
|
|
{
|
|
gdl = rodata->DisplayList.Primary;
|
|
}
|
|
else if (rodata->DisplayList.Secondary != *gdlptr)
|
|
{
|
|
gdl = rodata->DisplayList.Secondary;
|
|
}
|
|
break;
|
|
|
|
case MODELNODE_OPCODE_DLCOLLISION:
|
|
rodata = node->Data;
|
|
|
|
if (node != *nodeptr)
|
|
{
|
|
gdl = rodata->DisplayListCollisions.Primary;
|
|
}
|
|
else if (rodata->DisplayListCollisions.Secondary != *gdlptr)
|
|
{
|
|
gdl = rodata->DisplayListCollisions.Secondary;
|
|
}
|
|
break;
|
|
|
|
case MODELNODE_OPCODE_DLPRIMARY:
|
|
rodata = node->Data;
|
|
|
|
if (node != *nodeptr)
|
|
{
|
|
gdl = rodata->DisplayListPrimary.Primary;
|
|
}
|
|
break;
|
|
|
|
case MODELNODE_OPCODE_LOD:
|
|
rodata = node->Data;
|
|
node->Child = rodata->LOD.Affects;
|
|
break;
|
|
|
|
case MODELNODE_OPCODE_SWITCH:
|
|
rodata = node->Data;
|
|
node->Child = rodata->Switch.Controls;
|
|
break;
|
|
|
|
case MODELNODE_OPCODE_BSP:
|
|
modelApplyReorderRelationsByArg(node, TRUE);
|
|
break;
|
|
}
|
|
|
|
if (gdl) { break; }
|
|
|
|
if (node->Child)
|
|
{
|
|
node = node->Child;
|
|
}
|
|
else
|
|
{
|
|
while (node)
|
|
{
|
|
if (node->Next)
|
|
{
|
|
node = node->Next;
|
|
break;
|
|
}
|
|
|
|
node = node->Parent;
|
|
}
|
|
}
|
|
}
|
|
|
|
*gdlptr = gdl;
|
|
*nodeptr = node;
|
|
}
|
|
|
|
|
|
void modelNodeReplaceGdl(u32 arg0, ModelNode *node, Gfx *find, Gfx *replacement)
|
|
{
|
|
union ModelRoData *rodata;
|
|
u32 type = node->Opcode & 0xff;
|
|
|
|
switch (type) {
|
|
case MODELNODE_OPCODE_DL:
|
|
rodata = node->Data;
|
|
|
|
if (rodata->DisplayList.Primary == find)
|
|
{
|
|
rodata->DisplayList.Primary = replacement;
|
|
return;
|
|
}
|
|
|
|
if (rodata->DisplayList.Secondary == find)
|
|
{
|
|
rodata->DisplayList.Secondary = replacement;
|
|
return;
|
|
}
|
|
break;
|
|
|
|
case MODELNODE_OPCODE_DLCOLLISION:
|
|
rodata = node->Data;
|
|
|
|
if (rodata->DisplayListCollisions.Primary == find)
|
|
{
|
|
rodata->DisplayListCollisions.Primary = replacement;
|
|
return;
|
|
}
|
|
|
|
if (rodata->DisplayListCollisions.Secondary == find)
|
|
{
|
|
rodata->DisplayListCollisions.Secondary = replacement;
|
|
return;
|
|
}
|
|
break;
|
|
|
|
case MODELNODE_OPCODE_DLPRIMARY:
|
|
rodata = node->Data;
|
|
|
|
if (rodata->DisplayListPrimary.Primary == find)
|
|
{
|
|
rodata->DisplayListPrimary.Primary = replacement;
|
|
return;
|
|
}
|
|
break;
|
|
}
|
|
}
|