The first commit
This commit is contained in:
387
src/core1/code_13990.c
Normal file
387
src/core1/code_13990.c
Normal file
@@ -0,0 +1,387 @@
|
||||
#include <ultra64.h>
|
||||
#include "functions.h"
|
||||
#include "variables.h"
|
||||
|
||||
#include "ml/mtx.h"
|
||||
|
||||
extern Mtx *D_80282FD0;
|
||||
extern Mtx_t D_80282810;
|
||||
|
||||
f32 func_80263FF0(f32);
|
||||
f32 cosf(f32);
|
||||
extern f64 D_80278220;
|
||||
|
||||
#ifndef NONMATCHING
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_13990/func_802513B0.s")
|
||||
#else
|
||||
void func_802513B0(f32 arg0[4][4]){
|
||||
s32 i;
|
||||
s32 j;
|
||||
for(i = 0; i < 4; i++){
|
||||
for(j = 0; j < 4; j++){
|
||||
reinterpret_cast(f32, arg0[i][j]) = reinterpret_cast(f32, D_80282FD0->m[i][j]);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
Mtx *func_80251488(void){
|
||||
return D_80282FD0;
|
||||
}
|
||||
|
||||
void mlMtxApply(Mtx *mPtr){
|
||||
func_80245A7C(D_80282FD0, mPtr);
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_13990/func_802514BC.s")
|
||||
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_13990/func_802515D4.s")
|
||||
|
||||
void mlMtxPop(void){
|
||||
D_80282FD0--;
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_13990/func_802516E0.s")
|
||||
|
||||
void func_80251738(void){
|
||||
s32 i;
|
||||
f32 *v0 = ++D_80282FD0;
|
||||
for(i = 0; i<3; i++){
|
||||
v0[0] = 1.0f;
|
||||
v0[1] = 0.0f;
|
||||
v0[2] = 0.0f;
|
||||
v0[3] = 0.0f;
|
||||
v0[4] = 0.0f;
|
||||
v0 += 5;
|
||||
}
|
||||
v0[0] = 1.0f;
|
||||
}
|
||||
|
||||
#ifndef NONMATCHING
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_13990/func_80251788.s")
|
||||
#else
|
||||
f32 *func_80251788(f32 arg0, f32 arg1, f32 arg2){
|
||||
f32 (* v0)[4][4] = (f32 *) ++D_80282FD0;
|
||||
|
||||
(*v0)[0][3] = 0.0f;
|
||||
(*v0)[0][2] = 0.0f;
|
||||
(*v0)[0][1] = 0.0f;
|
||||
(*v0)[1][3] = 0.0f;
|
||||
(*v0)[1][2] = 0.0f;
|
||||
(*v0)[1][0] = 0.0f;
|
||||
(*v0)[2][3] = 0.0f;
|
||||
(*v0)[2][1] = 0.0f;
|
||||
(*v0)[2][0] = 0.0f;
|
||||
(*v0)[0][0] = 1.0f;
|
||||
(*v0)[1][1] = 1.0f;
|
||||
(*v0)[2][2] = 1.0f;
|
||||
(*v0)[3][3] = 1.0f;
|
||||
(*v0)[3][2] = arg2;
|
||||
(*v0)[3][1] = arg1;
|
||||
(*v0)[3][0] = arg0;
|
||||
return &(*v0)[3][3];
|
||||
}
|
||||
#endif
|
||||
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_13990/func_802517F8.s")
|
||||
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_13990/func_80251878.s")
|
||||
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_13990/func_802519C8.s")
|
||||
|
||||
//mlMtx
|
||||
void mlMtxIdent(void){
|
||||
s32 i;
|
||||
f32 *v0 = D_80282FD0 = D_80282810;
|
||||
for(i = 0; i<3; i++){
|
||||
v0[0] = 1.0f;
|
||||
v0[1] = 0.0f;
|
||||
v0[2] = 0.0f;
|
||||
v0[3] = 0.0f;
|
||||
v0[4] = 0.0f;
|
||||
v0 += 5;
|
||||
}
|
||||
v0[0] = 1.0f;
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_13990/func_80251B5C.s")
|
||||
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_13990/func_80251BCC.s")
|
||||
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_13990/func_80251C20.s")
|
||||
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_13990/mlMtxRotPitch.s")
|
||||
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_13990/mlMtxRotYaw.s")
|
||||
/*void mlMtxRotYaw(f32 yaw) {
|
||||
f32 sin;
|
||||
f32 cos;
|
||||
f32 phi_f12;
|
||||
f32 phi_f10;
|
||||
f32 phi_f8;
|
||||
f32 phi_f4;
|
||||
f32 *phi_v0;
|
||||
s32 phi_v1;
|
||||
|
||||
if (yaw == 0.0f)
|
||||
return;
|
||||
|
||||
sin = sinf(yaw*0.0174533);
|
||||
cos = cosf(yaw*0.0174533);
|
||||
phi_v0 = D_80282FD0;
|
||||
for(phi_v1 = 0; phi_v1 < 0xC; phi_v1 += 4){
|
||||
phi_v0 = (u32)D_80282FD0 + phi_v1;
|
||||
phi_f12 = phi_v0[0] * cos;
|
||||
phi_f10 = phi_v0[8] * sin;
|
||||
phi_f8 = phi_v0[0] * sin;
|
||||
phi_f4 = phi_v0[8] * cos;
|
||||
phi_v0[0] = phi_f12 - phi_f10;
|
||||
phi_v0 = (u32)D_80282FD0 + phi_v1;
|
||||
phi_v0[8] = phi_f8 + phi_f4;
|
||||
}
|
||||
|
||||
}//*/
|
||||
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_13990/mlMtxRotRoll.s")
|
||||
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_13990/func_80251F8C.s")
|
||||
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_13990/func_8025208C.s")
|
||||
|
||||
void mlMtxRotate(f32 pitch, f32 yaw, f32 roll){
|
||||
mlMtxRotYaw(yaw);
|
||||
mlMtxRotPitch(pitch);
|
||||
mlMtxRotRoll(roll);
|
||||
}
|
||||
|
||||
void mlMtxScale_xyz(f32 x, f32 y, f32 z){
|
||||
int i;
|
||||
for(i = 0; i < 3; i++){
|
||||
reinterpret_cast(f32, D_80282FD0->m[0][i]) *= x;
|
||||
reinterpret_cast(f32, D_80282FD0->m[1][i]) *= y;
|
||||
reinterpret_cast(f32, D_80282FD0->m[2][i]) *= z;
|
||||
}
|
||||
}
|
||||
|
||||
void mlMtxScale(f32 scale){
|
||||
int i;
|
||||
for(i = 0; i < 3; i++){
|
||||
reinterpret_cast(f32, D_80282FD0->m[0][i]) *= scale;
|
||||
reinterpret_cast(f32, D_80282FD0->m[1][i]) *= scale;
|
||||
reinterpret_cast(f32, D_80282FD0->m[2][i]) *= scale;
|
||||
}
|
||||
}
|
||||
|
||||
void func_80252330(f32 x, f32 y, f32 z){
|
||||
reinterpret_cast(f32, D_80282FD0->m[3][0]) = x;
|
||||
reinterpret_cast(f32, D_80282FD0->m[3][1]) = y;
|
||||
reinterpret_cast(f32, D_80282FD0->m[3][2]) = z;
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_13990/func_8025235C.s")
|
||||
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_13990/func_80252434.s")
|
||||
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_13990/func_802524F0.s")
|
||||
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_13990/func_802525A4.s")
|
||||
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_13990/func_8025276C.s")
|
||||
|
||||
void mlMtxTranslate(f32 x, f32 y, f32 z) {
|
||||
f32 *temp_t6;
|
||||
f32 *phi_v0;
|
||||
f32 phi_f18;
|
||||
f32 phi_f16;
|
||||
f32 phi_f10;
|
||||
s32 phi_v1;
|
||||
|
||||
phi_v0 = D_80282FD0;
|
||||
for(phi_v1 = 0; phi_v1 < 0xC; phi_v1 +=4){
|
||||
phi_v0 = (u32)D_80282FD0 + phi_v1;
|
||||
phi_f18 = phi_v0[0] * x;
|
||||
phi_f16 = phi_v0[4] * y;
|
||||
phi_v0[0xC] += phi_f18 + phi_f16 + (phi_v0[8] * z);
|
||||
}
|
||||
}
|
||||
|
||||
void func_80252A38(f32 x, f32 y, f32 z) {
|
||||
s32 var_v1;
|
||||
|
||||
for(var_v1 = 0; var_v1 != 3; var_v1++){
|
||||
reinterpret_cast(f32, D_80282FD0->m[3][var_v1]) += reinterpret_cast(f32, D_80282FD0->m[0][var_v1])*x + reinterpret_cast(f32, D_80282FD0->m[1][var_v1])*y + reinterpret_cast(f32, D_80282FD0->m[2][var_v1])*z;
|
||||
}
|
||||
}
|
||||
|
||||
void func_80252AF0(f32 arg0[3], f32 arg1[3], f32 rotation[3], f32 scale, f32 arg4[3]) {
|
||||
f32 sp1C[3];
|
||||
|
||||
if (arg1 != NULL) {
|
||||
sp1C[0] = arg1[0] - arg0[0];
|
||||
sp1C[1] = arg1[1] - arg0[1];
|
||||
sp1C[2] = arg1[2] - arg0[2];
|
||||
} else {
|
||||
sp1C[0] = arg0[0] * -1.0f;
|
||||
sp1C[1] = arg0[1] * -1.0f;
|
||||
sp1C[2] = arg0[2] * -1.0f;
|
||||
}
|
||||
mlMtxTranslate(sp1C[0], sp1C[1], sp1C[2]);
|
||||
if (rotation != NULL) {
|
||||
mlMtxRotYaw(rotation[1]);
|
||||
mlMtxRotPitch(rotation[0]);
|
||||
mlMtxRotRoll(rotation[2]);
|
||||
}
|
||||
if (scale != 1.0f) {
|
||||
mlMtxScale_xyz(scale, scale, scale);
|
||||
}
|
||||
if (arg4 != NULL) {
|
||||
mlMtxTranslate(-arg4[0], -arg4[1], -arg4[2]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void func_80252C08(f32 arg0[3], f32 arg1[3], f32 scale, f32 arg3[3]){
|
||||
if(arg0 != NULL)
|
||||
mlMtxTranslate(arg0[0], arg0[1], arg0[2]);
|
||||
|
||||
if(arg1 != NULL){
|
||||
mlMtxRotYaw(arg1[1]);
|
||||
mlMtxRotPitch(arg1[0]);
|
||||
mlMtxRotRoll(arg1[2]);
|
||||
}
|
||||
|
||||
if(scale != 1.0f){
|
||||
mlMtxScale_xyz(scale, scale, scale);
|
||||
}
|
||||
|
||||
if(arg3 != NULL)
|
||||
mlMtxTranslate(-arg3[0], -arg3[1], -arg3[2]);
|
||||
|
||||
}
|
||||
|
||||
void func_80252CC4(f32 arg0[3], f32 arg1[3], f32 scale, f32 arg3[3]){
|
||||
if(arg3 != NULL)
|
||||
mlMtxTranslate(arg3[0], arg3[1], arg3[2]);
|
||||
|
||||
if(scale != 1.0f){
|
||||
mlMtxScale_xyz(1.0f/scale, 1.0f/scale, 1.0f/scale);
|
||||
}
|
||||
|
||||
if(arg1 != NULL){
|
||||
mlMtxRotRoll(-arg1[2]);
|
||||
mlMtxRotPitch(-arg1[0]);
|
||||
mlMtxRotYaw(-arg1[1]);
|
||||
}
|
||||
|
||||
if(arg0 != NULL)
|
||||
mlMtxTranslate(-arg0[0], -arg0[1], -arg0[2]);
|
||||
|
||||
}
|
||||
|
||||
void func_80252D8C(f32 arg0[3], f32 arg1[3]){
|
||||
mlMtxTranslate(arg0[0], arg0[1], arg0[2]);
|
||||
mlMtxRotRoll(arg1[2]);
|
||||
mlMtxRotPitch(arg1[0]);
|
||||
mlMtxRotYaw(arg1[1]);
|
||||
}
|
||||
|
||||
void func_80252DDC(f32 arg0[3], f32 arg1[3]){
|
||||
mlMtxRotYaw(-arg1[1]);
|
||||
mlMtxRotPitch(-arg1[0]);
|
||||
mlMtxRotRoll(-arg1[2]);
|
||||
mlMtxTranslate(-arg0[0], -arg0[1], -arg0[2]);
|
||||
}
|
||||
|
||||
void func_80252E4C(f32 arg0[3], f32 arg1[3]){
|
||||
mlMtxTranslate(arg0[0], arg0[1], arg0[2]);
|
||||
mlMtxRotRoll(arg1[2]);
|
||||
mlMtxRotPitch(arg1[0]);
|
||||
mlMtxRotYaw(arg1[1]);
|
||||
mlMtxTranslate(-arg0[0], -arg0[1], -arg0[2]);
|
||||
}
|
||||
|
||||
void func_80252EC8(f32 arg0[3], f32 arg1[3]){
|
||||
mlMtxTranslate(arg0[0], arg0[1], arg0[2]);
|
||||
mlMtxRotYaw(-arg1[1]);
|
||||
mlMtxRotPitch(-arg1[0]);
|
||||
mlMtxRotRoll(-arg1[2]);
|
||||
mlMtxTranslate(-arg0[0], -arg0[1], -arg0[2]);
|
||||
}
|
||||
|
||||
void func_80252F50(f32 arg0[3]){
|
||||
mlMtxRotYaw(arg0[1]);
|
||||
mlMtxRotPitch(arg0[0]);
|
||||
mlMtxRotRoll(arg0[2]);
|
||||
}
|
||||
|
||||
void func_80252F8C(f32 arg0[3]){
|
||||
mlMtxRotRoll(arg0[2]);
|
||||
mlMtxRotPitch(arg0[0]);
|
||||
mlMtxRotYaw(arg0[1]);
|
||||
}
|
||||
|
||||
void func_80252FC8(f32 arg0[3]){
|
||||
mlMtxRotYaw(-arg0[1]);
|
||||
mlMtxRotPitch(-arg0[0]);
|
||||
mlMtxRotRoll(-arg0[2]);
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_13990/func_80253010.s")
|
||||
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_13990/func_80253034.s")
|
||||
|
||||
typedef struct{
|
||||
u32 unk0;
|
||||
u32 unk4;
|
||||
}struct49s;
|
||||
|
||||
extern struct49s D_803FFE10[];
|
||||
|
||||
extern u8 D_8000E800;
|
||||
extern u8 D_8002D500;
|
||||
extern u32 D_8027BF2C;
|
||||
extern u32 D_8027BF30;
|
||||
|
||||
void func_80253050(
|
||||
s32 overlay_id, u32 ram_start, u32 ram_end, u32 rom_start, u32 rom_end,
|
||||
u32 code_start, u32 code_end, u32 data_start, u32 data_end, u32 bss_start, u32 bss_end
|
||||
){
|
||||
u32 sp34;
|
||||
u32 sp30;
|
||||
u32 sp2C;
|
||||
u32 *tmp;
|
||||
|
||||
osWriteBackDCacheAll();
|
||||
osInvalDCache(ram_start, ram_end - ram_start);
|
||||
osInvalICache(ram_start, ram_end - ram_start);
|
||||
|
||||
if(bss_start){
|
||||
osInvalDCache(bss_start, bss_end - bss_start);
|
||||
}
|
||||
|
||||
rom_start = D_803FFE10[overlay_id].unk0;
|
||||
rom_end = D_803FFE10[overlay_id].unk4;
|
||||
|
||||
if(overlay_id){
|
||||
func_80254008();
|
||||
sp34 = &D_8000E800;
|
||||
}
|
||||
else{
|
||||
sp34 = &D_8002D500;
|
||||
}
|
||||
func_802405F0(sp34, rom_start, rom_end - rom_start);
|
||||
rarezip_uncompress(&sp34, &ram_start);
|
||||
sp2C = D_8027BF2C;
|
||||
sp30 = D_8027BF30;
|
||||
rarezip_uncompress(&sp34, &ram_start);
|
||||
|
||||
if(bss_start){
|
||||
bzero(bss_start, bss_end - bss_start);
|
||||
osWriteBackDCacheAll();
|
||||
tmp = (u32*) bss_start;
|
||||
tmp[0] = sp2C;
|
||||
tmp[1] = sp30;
|
||||
tmp[2] = D_8027BF2C;
|
||||
tmp[3] = D_8027BF30;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user