From 9b66c2c82c71c4af345a56b142971460c25db070 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sat, 2 Oct 2021 15:55:51 +1000 Subject: [PATCH] Attempt to decompile func0f14c50c --- src/game/camdraw.c | 68 ++++++++++++++++++++++++++++++++++++-- src/include/game/camdraw.h | 12 +++---- src/include/types.h | 14 +++----- 3 files changed, 76 insertions(+), 18 deletions(-) diff --git a/src/game/camdraw.c b/src/game/camdraw.c index c6046027c..704d02efd 100644 --- a/src/game/camdraw.c +++ b/src/game/camdraw.c @@ -790,7 +790,7 @@ void func0f14a830(void) } } -u8 **func0f14a89c(s32 index) +struct textureconfig *func0f14a89c(s32 index) { struct var8007f8e0 *thing = func0f14a06c(index); @@ -1437,13 +1437,13 @@ void func0f14b394(struct var8007f8e0 *arg0) size = align32(func0f14c814(&arg0->unk004)); for (i = 0; i < size; i++) { - arg0->unk004[i] = random() % 0xff; + arg0->unk004.textureptr[i] = random() % 0xff; } size = align32(func0f14c814(&arg0->unk010)); for (i = 0; i < size; i++) { - arg0->unk010[i] = random() % 0xff; + arg0->unk010.textureptr[i] = random() % 0xff; } func0f14b228(arg0); @@ -2065,6 +2065,68 @@ glabel func0f14c50c /* f14c758: 27bd0020 */ addiu $sp,$sp,0x20 ); +// Mismatch: Goal loads var8007f8e0 into a2 then does nothing with it. +// The below optimises it out. +//void func0f14c50c(struct var8007f8e0 *dst, struct var8007f8e0 *src, u32 line, char *file) +//{ +// struct var8007f8e0 *thing = var8007f8e0; +// s32 i; +// s32 j; +// s32 row = 0; +// +// for (i = 0; i < 22; i++); +// +// dst->unk3f4_00 = src->unk3f4_00; +// dst->unk3f4_01 = src->unk3f4_01; +// dst->unk3f4_02 = src->unk3f4_02; +// dst->unk3f4_03 = src->unk3f4_03; +// dst->colournum = src->colournum; +// dst->stylenum = src->stylenum; +// dst->unk3a4 = src->unk3a4; +// dst->unk3b4 = src->unk3b4; +// dst->unk3b8 = src->unk3b8; +// dst->unk3bc = src->unk3bc; +// dst->unk3c0 = src->unk3c0; +// dst->unk3c4 = src->unk3c4; +// dst->unk3c8 = src->unk3c8; +// dst->unk3cc = src->unk3cc; +// dst->unk3ec = src->unk3ec; +// dst->unk3f0 = src->unk3f0; +// +// dst->fileguid.fileid = src->fileguid.fileid; +// dst->fileguid.deviceserial = src->fileguid.deviceserial; +// +// for (i = 0; i != 7; i++) { +// dst->unk3d0[i] = src->unk3d0[i]; +// } +// +// if (dst->unk01c) { +// s32 i; +// +// for (i = 63; i != -1; i--) { +// for (j = 0; j != 64; j++) { +// s32 fudge = (i & 1) ? ((j & 4) ? -4 : 4) : 0; +// +// dst->unk01c[row * 64 + j] = src->unk004.textureptr[i * 64 + j + fudge]; +// } +// +// row++; +// } +// } +// +// func0f14c75c(&dst->unk004, &src->unk004); +// +// if (dst->unk010.textureptr && src->unk010.textureptr) { +// func0f14c75c(&dst->unk010, &src->unk010); +// } +// +// if (src->unk3f4_04) { +// for (i = 0; i < 1024; i++) { +// dst->unk020[i] = src->unk020[i]; +// } +// } +//} + GLOBAL_ASM( glabel func0f14c75c /* f14c75c: 27bdffd8 */ addiu $sp,$sp,-40 diff --git a/src/include/game/camdraw.h b/src/include/game/camdraw.h index a96dd3400..a78dc3595 100644 --- a/src/include/game/camdraw.h +++ b/src/include/game/camdraw.h @@ -45,19 +45,19 @@ void func0f14bdbc(s32 index); void func0f14bec8(s32 index); void func0f14c1cc(s32 index); void func0f14c50c(struct var8007f8e0 *arg0, struct var8007f8e0 *arg1, u32 line, char *file); -void func0f14c75c(struct textureconfig *tconfig, u8 **arg1); +void func0f14c75c(struct textureconfig *arg0, struct textureconfig *arg1); u32 func0f14c7dc(void); -u32 func0f14c814(u8 **arg0); +u32 func0f14c814(struct textureconfig *arg0); Gfx *func0f14c870(Gfx *gdl, struct textureconfig *tconfig, f32 *arg2, f32 arg3, f32 arg4); void func0f14cdb8(s32 index, u8 *arg1); u32 func0f14cf6c(void); void func0f14d064(s32 index, u8 *arg1); -void func0f14d2c8(u8 *arg0, u32 arg1); -void func0f14d4f0(u8 *arg0, u32 arg1); -void func0f14d714(u8 *arg0, u32 arg1); +void func0f14d2c8(u8 *arg0, u8 *arg1); +void func0f14d4f0(u8 *arg0, u8 *arg1); +void func0f14d714(u8 *arg0, u8 *arg1); u32 func0f14d84c(void); u32 func0f14d8d8(void); -void func0f14dac0(u8 *arg0, u8 **arg1); +void func0f14dac0(u8 *arg0, struct textureconfig *arg1); void func0f14dc30(s32 arg0, bool arg1); void func0f14def0(s32 arg0, u32 line, char *file); u32 func0f14dfc0(void); diff --git a/src/include/types.h b/src/include/types.h index b1fceaf54..fb4b28477 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -7419,15 +7419,11 @@ struct var800a45a0 { struct var8007f8e0 { // perfect head? /*0x000*/ u32 unk000; - /*0x004*/ u8 *unk004; - /*0x008*/ u32 unk008; - /*0x00c*/ u32 unk00c; - /*0x010*/ u8 *unk010; - /*0x014*/ u32 unk014; - /*0x018*/ u32 unk018; - /*0x01c*/ u32 unk01c; - /*0x020*/ u32 unk020; - /*0x024*/ u32 unk024; + /*0x004*/ struct textureconfig unk004; + /*0x010*/ struct textureconfig unk010; + /*0x01c*/ u8 *unk01c; + /*0x028*/ u8 *unk020; + /*0x028*/ u32 unk024; /*0x028*/ u32 unk028; /*0x02c*/ u32 unk02c; /*0x030*/ f32 unk030;