add non-matching functions
This commit is contained in:
@@ -41,49 +41,58 @@ u8 D_803831F8[0x21]; //copy of D_803831D0
|
||||
|
||||
|
||||
/* .code */
|
||||
#ifndef NONMATCHING
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_98CB0/func_8031FC40.s")
|
||||
// void func_8031FC40(void) {
|
||||
// s32 scrambled_ptr;
|
||||
// s32 temp_a1;
|
||||
// s32 temp_lo;
|
||||
// s32 temp_t0;
|
||||
// s32 temp_t1;
|
||||
// s32 temp_t6;
|
||||
// s32 temp_t9;
|
||||
// s32 var_a0;
|
||||
// s32 var_t3;
|
||||
// u32 var_v0;
|
||||
// u32 var_v1;
|
||||
// u8 temp_a3;
|
||||
#else
|
||||
void func_8031FC40(void) {
|
||||
s32 scrambled_ptr;
|
||||
s32 *unscrambled_ptr;
|
||||
s32 temp_a1;
|
||||
s32 temp_lo;
|
||||
s32 temp_t0;
|
||||
s32 temp_t1;
|
||||
s32 temp_a2;
|
||||
s32 temp_t9;
|
||||
s32 var_a0;
|
||||
u8* b_ptr;
|
||||
s32 var_t3;
|
||||
u32 var_v0 = 0x17536C34;
|
||||
u32 var_v1 = 0;
|
||||
|
||||
//obsucre address
|
||||
temp_t0 = (((s32)&D_803831A0.unk8 & 0xE0000000) >> 15) +
|
||||
(((s32)&D_803831A0.unk8 & 0x1FC00000) >> 22) +
|
||||
(((s32)&D_803831A0.unk8 & 0x00300000) << 10) +
|
||||
(((s32)&D_803831A0.unk8 & 0x000F0000) << 7) +
|
||||
(((s32)&D_803831A0.unk8 & 0x0000E000) << 14) +
|
||||
(((s32)&D_803831A0.unk8 & 0x00001800) >> 4) +
|
||||
(((s32)&D_803831A0.unk8 & 0x00000780) << 10) +
|
||||
(((s32)&D_803831A0.unk8 & 0x00000060) << 4) +
|
||||
(((s32)&D_803831A0.unk8 & 0x00000018) << 18) +
|
||||
(((s32)&D_803831A0.unk8 & 0x00000007) << 11);
|
||||
|
||||
//unobscure address
|
||||
temp_t9 = (temp_t0 & 0x38000000) / (1 << 24);
|
||||
temp_t1 = ((temp_t0 & 0x1E0600) << 0xB) | ((s32) (temp_t0 & 0x603800) / 8);
|
||||
temp_a1 = (((temp_t0 & 0x1C07F) << 0xF) + ((u32) (temp_t0 & 0xC7800000) >> 0x11)) | (temp_t9 + ((s32) (temp_t0 & 0x180) >> 6)); \
|
||||
var_a0 = ((temp_a1 & 0x3FE000) << 7)
|
||||
| (((temp_t1 >> 8) & 7) + ((temp_a1 << 0xA) & 0xFF800))
|
||||
| ((((u32) (temp_t1 & 0xF0000000) >> 0x15) + (temp_a1 & 0xE0000000)) ^ ((s32) ((temp_t1 /0x40) & 0xF000) >> 9));
|
||||
|
||||
//calculate checksum
|
||||
temp_a1 = 0x25;
|
||||
for(var_v1 = 0; var_v1 < temp_a1; var_v1++){
|
||||
b_ptr = (u8*)(var_a0 + var_v1);
|
||||
var_v0 = (((var_v0 - *b_ptr) & 0x1F) << 0xF) ^ ((*b_ptr* 0x1B) + (var_v0 >> 0xB));
|
||||
}
|
||||
|
||||
scrambled_ptr = (((s32) &D_803831A0 & 0x55555555) * 2) + ((u32) ((s32) &D_803831A0 & 0xAAAAAAAA) >> 1);
|
||||
unscrambled_ptr = (((scrambled_ptr & 0x55555555) * 2) | ((u32) (scrambled_ptr & 0xAAAAAAAA) >> 1));
|
||||
*unscrambled_ptr = var_v0;
|
||||
if(!var_a0);
|
||||
}
|
||||
#endif
|
||||
|
||||
// temp_t0 = (((s32) &D_803831A0.unk8 & 0xE0000000) >> 0xF)
|
||||
// + (((s32) &D_803831A0.unk8 & 0x1FC00000) >> 0x16)
|
||||
// + (((s32) &D_803831A0.unk8 & 0x300000) << 0xA)
|
||||
// + (((s32) &D_803831A0.unk8 & 0xF0000) << 7)
|
||||
// + (((s32) &D_803831A0.unk8 & 0xE000) << 0xE)
|
||||
// + (((s32) &D_803831A0.unk8 & 0x1800) >> 4)
|
||||
// + (((s32) &D_803831A0.unk8 & 0x780) << 0xA)
|
||||
// + (((s32) &D_803831A0.unk8 & 0x60) << 4)
|
||||
// + (((s32) &D_803831A0.unk8 & 0x18) << 0x12)
|
||||
// + (((s32) &D_803831A0.unk8 & 7) << 0xB);
|
||||
// temp_t9 = (temp_t0 & 0x38000000);
|
||||
// var_v0 = 0x17536C34;
|
||||
// var_t3 = temp_t9 >> 0x18;
|
||||
// if (temp_t9 < 0) {
|
||||
// var_t3 = (s32) (0xFFFFFF + temp_t9) >> 0x18;
|
||||
// }
|
||||
// temp_a1 = (((temp_t0 & 0x1C07F) << 0xF) + ((u32) (temp_t0 & 0xC7800000) >> 0x11)) | (var_t3 + ((s32) (temp_t0 & 0x180) >> 6));
|
||||
// temp_t1 = ((temp_t0 & 0x1E0600) << 0xB) | ((s32) (temp_t0 & 0x603800) >> 3);
|
||||
// var_a0 = ((temp_a1 & 0x3FE000) << 7)
|
||||
// | (((temp_t1 >> 8) & 7) + ((temp_a1 << 0xA) & 0xFF800))
|
||||
// | ((((u32) (temp_t1 & 0xF0000000) >> 0x15) + (temp_a1 & 0xE0000000)) ^ ((s32) ((temp_t1 >> 6) & 0xF000) >> 9));
|
||||
// for(var_v1 = 0; var_v1 < 0x25; var_v1++){
|
||||
// u8 byte = *(u8*)(var_a0 + var_v1);
|
||||
// var_v0 = ((byte * 0x1B) + (var_v0 >> 0xB)) ^ (((var_v0 - byte) & 0x1F) << 0xF);
|
||||
// }
|
||||
// scrambled_ptr = (((s32) &D_803831A0 & 0x55555555) * 2) + ((u32) ((s32) &D_803831A0 & 0xAAAAAAAA) >> 1);
|
||||
// *(s32 *)(((scrambled_ptr & 0x55555555) * 2) | ((u32) (scrambled_ptr & 0xAAAAAAAA) >> 1)) = var_v0;
|
||||
// }
|
||||
|
||||
|
||||
u32 func_8031FE40(void) {
|
||||
|
@@ -260,8 +260,79 @@ f32 glspline_catmull_rom_interpolate(f32 x, s32 knotCount, f32 *knotList) {
|
||||
return (((((sp24[2] * x) + sp24[1]) * x) + sp24[0]) * x) + (1.0*knotList[1]);
|
||||
}
|
||||
|
||||
#ifndef NONMATCHING
|
||||
void func_80340BE4(f32 arg0, s32 arg1, s32 arg2, s32 arg3, f32 * arg4, f32 arg5[3]);
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_B9770/func_80340BE4.s")
|
||||
#else
|
||||
void func_80340BE4(f32 x, s32 length, s32 stride, s32 width, f32 *arg4, f32 *dst){
|
||||
s32 spD0;
|
||||
s32 max_interval;
|
||||
s32 i;
|
||||
s32 var_a3;
|
||||
f32 temp_f2;
|
||||
f32 f3;
|
||||
f32 f1;
|
||||
f32 f2;
|
||||
f32 sp94[3][3];
|
||||
|
||||
max_interval = length - 1;
|
||||
if (length < 4) {
|
||||
/* not enough points in spline to perform catmull-rom interpolation*/
|
||||
ml_vec3f_copy(sp94[0], arg4);
|
||||
ml_vec3f_copy(sp94[1], arg4);
|
||||
ml_vec3f_copy(sp94[2], arg4 + stride);
|
||||
if (length - 1 == 1) {
|
||||
ml_vec3f_copy(sp94[3], arg4 + stride);
|
||||
} else {
|
||||
ml_vec3f_copy(sp94[3], arg4 + 2*stride);
|
||||
}
|
||||
func_80340BE4(x, 4, 3, 3, sp94, dst);
|
||||
return;
|
||||
}
|
||||
|
||||
temp_f2 = func_80340700(x, 0.0f, 1.0f) * max_interval;
|
||||
var_a3 = (s32)temp_f2;
|
||||
var_a3 = ((length - 1) < var_a3) ? (length - 1) : var_a3;
|
||||
x = temp_f2 - (f32) var_a3;
|
||||
if (0 == var_a3) {
|
||||
/* desired point in interval[0,1], duplicate P0 to left */
|
||||
arg4 = arg4 + 0;
|
||||
for(var_a3 = var_a3; var_a3 < width; var_a3++){
|
||||
f3 = -0.5*arg4[var_a3] + 1.5*arg4[var_a3] + -1.5*arg4[stride + var_a3] + 0.5*arg4[2*stride + var_a3];
|
||||
f1 = 1.0*arg4[var_a3] + -2.5*arg4[var_a3] + 2.0*arg4[stride + var_a3] + -0.5*arg4[2*stride + var_a3];
|
||||
f2 = -0.5*arg4[var_a3] + 0.0*arg4[var_a3] + 0.5*arg4[stride + var_a3] + 0.0*arg4[2*stride + var_a3];
|
||||
dst[var_a3] = ((((f3 * x) + f1)* x + f2) * x) + (1.0*arg4[var_a3]);
|
||||
}
|
||||
return;
|
||||
}
|
||||
spD0 = var_a3 - 1;
|
||||
if (length == (var_a3 + 1)) {
|
||||
arg4 = arg4 + spD0*stride;
|
||||
for(var_a3 = 0; var_a3 < width; var_a3++){
|
||||
/* desired point in interval[n, inf], linearly interpret */
|
||||
dst[var_a3] = arg4[var_a3];
|
||||
}
|
||||
} else if (length == (spD0 + 2)) {
|
||||
/* desired point in interval[n-1, n], duplicate Pn to right */
|
||||
for(var_a3 = 0; var_a3 < width; var_a3++){
|
||||
f3 = -0.5*arg4[spD0*stride + var_a3] + 1.5*arg4[(spD0 + 1)* stride + var_a3] + -1.5*arg4[(spD0 + 2)* stride + var_a3] + 0.5*arg4[(spD0 + 2)* stride + var_a3];
|
||||
f1 = 1.0*arg4[spD0*stride + var_a3] + -2.5*arg4[(spD0 + 1)* stride + var_a3] + 2.0*arg4[(spD0 + 2)* stride + var_a3] + -0.5*arg4[(spD0 + 2)* stride + var_a3];
|
||||
f2 = -0.5*arg4[spD0*stride + var_a3] + 0.0*arg4[(spD0 + 1)* stride + var_a3] + 0.5*arg4[(spD0 + 2)* stride + var_a3] + 0.0*arg4[(spD0 + 2)* stride + var_a3];
|
||||
dst[var_a3] = ((((f3 * x) + f1)* x + f2) * x) + (1.0*arg4[((spD0 + 1) * stride) + var_a3]);
|
||||
}
|
||||
} else {
|
||||
/* normal conditions */
|
||||
for(var_a3 = 0; var_a3 < width; var_a3++){
|
||||
f3 = -0.5*arg4[spD0*stride + var_a3] + 1.5*arg4[(spD0 + 1)*stride + var_a3] + -1.5*arg4[(spD0 + 2)* stride + var_a3] + 0.5*arg4[(spD0 + 3)* stride + var_a3];
|
||||
f1 = 1.0*arg4[spD0*stride + var_a3] + -2.5*arg4[(spD0 + 1)*stride + var_a3] + 2.0*arg4[(spD0 + 2)* stride + var_a3] + -0.5*arg4[(spD0 + 3)* stride + var_a3];
|
||||
f2 = -0.5*arg4[spD0*stride + var_a3] + 0.0*arg4[(spD0 + 1)*stride + var_a3] + 0.5*arg4[(spD0 + 2)* stride + var_a3] + 0.0*arg4[(spD0 + 3)* stride + var_a3];
|
||||
// var_f8 =
|
||||
dst[var_a3] = ((((f3 * x) + f1)* x + f2) * x) + (1.0*arg4[(spD0 + 1)*stride + var_a3]);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
void func_80341180(f32 arg0, s32 arg1, s32 arg2, f32 arg3[3], f32 arg4[3]){
|
||||
func_80340BE4(arg0, arg1, arg2, arg2, arg3, arg4);
|
||||
|
Reference in New Issue
Block a user