1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-07-08 08:55:17 +00:00

z_skin_matrix.c decompiled (1 non matching, 1 non equivalent) (#243)

* func_800A7BE4 and func_800A7C20 done

- func_800A7BE4 copy of "Math_Vec3f_ToVec3s" in z_lib.c
- func_800A7C20 copy of "Math_Vec3s_ToVec3f" in z_lib.c

* done func_800A7A24

* func_800A76A4 done

* func_800A6E10 done

* func_800A6EF4 done

* func_800A6FA0 done

* func_800A72FC done

* Deleted z_skin_matrix.data.s and updated spec

* func_800A730C done

* func_800A735C done

* func_800A7E70 done, func_800A7C60 matching but I'm not happy with it (weird types in function params)

* Corrections. func_800A7C60 in skin_matrix done, Matrix_MtxFToMtx in sys_matrix done.

* func_800A7EC0 nonmatching

* func_800A8030 nonmatching but VERY close (two registers swapped)

* func_800A8030 done

* updating comments

* func_800A7704 done

* func_800A7894 done

* halfway through deciphering mips_to_c for func_800A73E0

* func_800A73E0 functional but non-matching (saved register differences and probably regalloc)

* Renaming some arguments and rewriting comments

* Renamed files across whole project and deleted asm nonmatchings

* ran format.sh

* fixed function name

* fixing multiplcation order in SkinMatrix_MtxFMtxFMult

* Corrections in SkinMatrix_MtxFMtxFMult

* Formatting changes after review

* Changes as per code review

* fixing rename error

* fixing rename error

* rename fixes

* fixing function rename error

* ran ./format.sh

* last couple of changes as per code review

* renamed SetScaling -> SetScale

* Skin_Matrix_Invert -> SkinMatrix_Invert

* Renaming and fixing debug message print

* Renamed argument "mf" to more specific "clear" in SkinMatrix_GetClear

* renamed again to "mfp"

* snake case to camel case changes
This commit is contained in:
AdamKiddle 2020-08-08 16:23:16 +01:00 committed by GitHub
parent 34c73dda62
commit 54f762b419
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
85 changed files with 947 additions and 1443 deletions

View file

@ -53,7 +53,7 @@ void Matrix_Mult(MtxF* mf, u8 mode) {
MtxF* cmf = Matrix_GetCurrent();
if (mode == MTXMODE_APPLY) {
func_800A6FA0(cmf, mf, cmf);
SkinMatrix_MtxFMtxFMult(cmf, mf, cmf);
} else {
Matrix_MtxFCopy(sCurrentMatrix, mf);
}
@ -78,7 +78,7 @@ void Matrix_Translate(f32 x, f32 y, f32 z, u8 mode) {
ty = cmf->yw;
cmf->ww += tx * x + ty * y + cmf->zw * z;
} else {
func_800A7A24(cmf, x, y, z);
SkinMatrix_SetTranslate(cmf, x, y, z);
}
}
@ -99,7 +99,7 @@ void Matrix_Scale(f32 x, f32 y, f32 z, u8 mode) {
cmf->yw *= y;
cmf->zw *= z;
} else {
func_800A76A4(cmf, x, y, z);
SkinMatrix_SetScale(cmf, x, y, z);
}
}
@ -382,7 +382,7 @@ void Matrix_RotateRPY(s16 x, s16 y, s16 z, u8 mode) {
cmf->zw = temp2 * cos - temp1 * sin;
}
} else {
func_800A7704(cmf, x, y, z);
SkinMatrix_SetRotateRPY(cmf, x, y, z);
}
}
@ -540,82 +540,76 @@ void func_800D1694(f32 x, f32 y, f32 z, Vec3s* vec) {
#pragma GLOBAL_ASM("asm/non_matchings/code/sys_matrix/func_800D1694.s")
#endif
#ifdef NON_MATCHING
// mostly regalloc differences
Mtx* Matrix_MtxFToMtx(MtxF* src, Mtx* dest) {
s32 temp;
u16* m1 = (u16*)&dest->m[0][0];
u16* m2 = (u16*)&dest->m[2][0];
s32 temp;
temp = src->xx * 65536.0f;
m1[0] = (temp >> 0x10) & 0xFFFF;
m2[0] = temp & 0xFFFF;
temp = src->xx * 0x10000;
m1[0] = (temp >> 0x10);
m1[16 + 0] = temp & 0xFFFF;
temp = src->xy * 65536.0f;
m1[1] = (temp >> 0x10) & 0xFFFF;
m2[1] = temp & 0xFFFF;
temp = src->xy * 0x10000;
m1[1] = (temp >> 0x10);
m1[16 + 1] = temp & 0xFFFF;
temp = src->xz * 65536.0f;
m1[2] = (temp >> 0x10) & 0xFFFF;
m2[2] = temp & 0xFFFF;
temp = src->xz * 0x10000;
m1[2] = (temp >> 0x10);
m1[16 + 2] = temp & 0xFFFF;
temp = src->xw * 65536.0f;
m1[3] = (temp >> 0x10) & 0xFFFF;
m2[3] = temp & 0xFFFF;
temp = src->xw * 0x10000;
m1[3] = (temp >> 0x10);
m1[16 + 3] = temp & 0xFFFF;
temp = src->yx * 65536.0f;
m1[4] = (temp >> 0x10) & 0xFFFF;
m2[4] = temp & 0xFFFF;
temp = src->yx * 0x10000;
m1[4] = (temp >> 0x10);
m1[16 + 4] = temp & 0xFFFF;
temp = src->yy * 65536.0f;
m1[5] = (temp >> 0x10) & 0xFFFF;
m2[5] = temp & 0xFFFF;
temp = src->yy * 0x10000;
m1[5] = (temp >> 0x10);
m1[16 + 5] = temp & 0xFFFF;
temp = src->yz * 65536.0f;
m1[6] = (temp >> 0x10) & 0xFFFF;
m2[6] = temp & 0xFFFF;
temp = src->yz * 0x10000;
m1[6] = (temp >> 0x10);
m1[16 + 6] = temp & 0xFFFF;
temp = src->yw * 65536.0f;
m1[7] = (temp >> 0x10) & 0xFFFF;
m2[7] = temp & 0xFFFF;
temp = src->yw * 0x10000;
m1[7] = (temp >> 0x10);
m1[16 + 7] = temp & 0xFFFF;
temp = src->zx * 65536.0f;
m1[8] = (temp >> 0x10) & 0xFFFF;
m2[8] = temp & 0xFFFF;
temp = src->zx * 0x10000;
m1[8] = (temp >> 0x10);
m1[16 + 8] = temp & 0xFFFF;
temp = src->zy * 65536.0f;
m1[9] = (temp >> 0x10) & 0xFFFF;
temp = src->zy * 0x10000;
m1[9] = (temp >> 0x10);
m2[9] = temp & 0xFFFF;
temp = src->zz * 65536.0f;
m1[10] = (temp >> 0x10) & 0xFFFF;
temp = src->zz * 0x10000;
m1[10] = (temp >> 0x10);
m2[10] = temp & 0xFFFF;
temp = src->zw * 65536.0f;
m1[11] = (temp >> 0x10) & 0xFFFF;
temp = src->zw * 0x10000;
m1[11] = (temp >> 0x10);
m2[11] = temp & 0xFFFF;
temp = src->wx * 65536.0f;
m1[12] = (temp >> 0x10) & 0xFFFF;
temp = src->wx * 0x10000;
m1[12] = (temp >> 0x10);
m2[12] = temp & 0xFFFF;
temp = src->wy * 65536.0f;
m1[13] = (temp >> 0x10) & 0xFFFF;
temp = src->wy * 0x10000;
m1[13] = (temp >> 0x10);
m2[13] = temp & 0xFFFF;
temp = src->wz * 65536.0f;
m1[14] = (temp >> 0x10) & 0xFFFF;
temp = src->wz * 0x10000;
m1[14] = (temp >> 0x10);
m2[14] = temp & 0xFFFF;
temp = src->ww * 65536.0f;
m1[15] = (temp >> 0x10) & 0xFFFF;
temp = src->ww * 0x10000;
m1[15] = (temp >> 0x10);
m2[15] = temp & 0xFFFF;
return dest;
}
#else
#pragma GLOBAL_ASM("asm/non_matchings/code/sys_matrix/Matrix_MtxFToMtx.s")
#endif
Mtx* Matrix_ToMtx(Mtx* dest, char* file, s32 line) {
return Matrix_MtxFToMtx(Matrix_CheckFloats(sCurrentMatrix, file, line), dest);
@ -625,7 +619,7 @@ Mtx* Matrix_NewMtx(GraphicsContext* gfxCtx, char* file, s32 line) {
return Matrix_ToMtx(Graph_Alloc(gfxCtx, sizeof(Mtx)), file, line);
}
Mtx* Matrix_MtxFToNewMtx(MtxF* src, GraphicsContext* gfxCtx) {
Mtx* Matrix_SkinMatrix_MtxFToNewMtx(MtxF* src, GraphicsContext* gfxCtx) {
return Matrix_MtxFToMtx(src, Graph_Alloc(gfxCtx, sizeof(Mtx)));
}