From b852ba5cb8afdf522e3c7338acc14ab501447ab5 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sat, 25 Jan 2020 01:08:58 +1000 Subject: [PATCH] Attempt to decompile func0f08ed74 --- src/game/game_066310.c | 84 +++++++++++++++++++++++++++++++++- src/include/constants.h | 2 +- src/include/game/game_066310.h | 8 ++-- src/include/types.h | 6 +-- 4 files changed, 91 insertions(+), 9 deletions(-) diff --git a/src/game/game_066310.c b/src/game/game_066310.c index 196aaba35..6abe82426 100644 --- a/src/game/game_066310.c +++ b/src/game/game_066310.c @@ -46200,7 +46200,7 @@ void func0f08e0c4(struct doorobj *door) door->fadetime60 = door->doortype == DOORTYPE_LASER ? 60 : 0; if (door->doortype == DOORTYPE_LASER) { - door->laserfade = -1; + door->laserfade = 255; } } @@ -47149,6 +47149,88 @@ glabel func0f08ed74 /* f08f118: 27bd0040 */ addiu $sp,$sp,0x40 ); +//bool func0f08ed74(struct doorobj *door) +//{ +// bool result = false; +// +// if (door->doortype == DOORTYPE_LASER && door->fadetime60 != 0) { +// door->fadetime60 -= g_Vars.lvupdate240_60; +// +// if (door->fadetime60 < 0) { +// door->fadetime60 = 0; +// } +// +// if (door->mode == 1) { +// u32 laserfade = (door->fadetime60 * 255.0f) / 60.0f; +// door->laserfade = laserfade; +// +// return result; +// } else { +// u32 laserfade = ((60.0f - door->fadetime60) * 255.0f) / 60.0f; +// door->laserfade = laserfade; +// } +// } +// +// if (door->mode == 1 || door->mode == 2) { +// f32 maxfrac = door->mode == 1 ? door->maxfrac : 0; +// +// if (door->base.flags3 & OBJECTFLAG2_00000004) { +// s32 value = (random() % 64) + 30; +// +// if ((g_Vars.lvframenum % value) == 0) { +// bool dothething = false; +// struct doorobj *loopdoor; +// +// door->fracspeed = 0; +// func0f08ea50(door); +// +// if (random() % 2) { +// dothething = true; +// func0f0926bc(door->base.prop, 12, 0xffff); +// door->mode = 0; +// door->lastopen60 = g_Vars.lvframe60; +// } +// +// loopdoor = door; +// +// while (loopdoor) { +// if (random() % 2 && loopdoor->mode != 0) { +// loopdoor->fracspeed = 0; +// func0f08ea50(loopdoor); +// +// if (dothething) { +// func0f0926bc(loopdoor->base.prop, 12, 0xffff); +// loopdoor->mode = 0; +// loopdoor->lastopen60 = g_Vars.lvframe60; +// } +// } +// +// loopdoor = loopdoor->sibling; +// +// if (loopdoor == door) { +// break; +// } +// } +// +// func0f08df10(door->soundtype, door->base.prop); +// } +// } +// +// func0f06d90c(&door->frac, maxfrac, &door->fracspeed, +// door->accel, door->decel, door->maxspeed); +// +// if (door->frac >= door->maxfrac) { +// door->frac = door->maxfrac; +// } else if (door->frac <= 0) { +// door->frac = 0; +// } +// +// result = true; +// } +// +// return result; +//} + GLOBAL_ASM( glabel func0f08f11c /* f08f11c: 27bdffc8 */ addiu $sp,$sp,-56 diff --git a/src/include/constants.h b/src/include/constants.h index dc729ca4d..a84814d0e 100644 --- a/src/include/constants.h +++ b/src/include/constants.h @@ -672,7 +672,7 @@ // obj->flags3 #define OBJECTFLAG2_PUSHABLE 0x00000001 #define OBJECTFLAG2_GRABBABLE 0x00000002 -#define OBJECTFLAG2_00000004 0x00000004 // Not used in scripts +#define OBJECTFLAG2_00000004 0x00000004 // Related to doors #define OBJECTFLAG2_00000008 0x00000008 // Not used in scripts #define OBJECTFLAG2_00000010 0x00000010 // Used heaps #define OBJECTFLAG2_00000020 0x00000020 // Not used in scripts diff --git a/src/include/game/game_066310.h b/src/include/game/game_066310.h index b93d315f1..c0c75a3b4 100644 --- a/src/include/game/game_066310.h +++ b/src/include/game/game_066310.h @@ -105,7 +105,7 @@ u32 func0f06c28c(void); u32 func0f06c8ac(void); u32 func0f06cd00(void); u32 func0f06d37c(void); -u32 func0f06d90c(void); +void func0f06d90c(f32 *frac, f32 maxfrac, f32 *fracspeed, f32 accel, f32 decel, f32 maxspeed); u32 func0f06db00(void); u32 func0f06dbd8(void); u32 func0f06e87c(void); @@ -315,8 +315,8 @@ u32 func0f08e6bc(void); u32 func0f08e794(void); u32 func0f08e8ac(void); u32 func0f08e9e4(void); -u32 func0f08ea50(void); -u32 func0f08ed74(void); +void func0f08ea50(struct doorobj *door); +bool func0f08ed74(struct doorobj *door); u32 func0f08f11c(void); u32 func0f08f538(void); u32 func0f08f604(void); @@ -351,7 +351,7 @@ u32 func0f0923d4(void); u32 func0f092420(void); u32 func0f092484(void); u32 func0f092610(void); -u32 func0f0926bc(struct prop *prop, u32 arg1, u32 arg2); +void func0f0926bc(struct prop *prop, u32 arg1, s32 arg2); s32 func0f0927d4(f32 arg0, f32 arg1, f32 arg2, f32 arg3, s16 arg4); s32 func0f092914(s32 arg0); u32 func0f09294c(void); diff --git a/src/include/types.h b/src/include/types.h index 3b70b2899..c8564880d 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -700,9 +700,9 @@ struct doorobj { // objtype 0x01 struct defaultobj base; /*0x5c*/ f32 maxfrac; /*0x60*/ f32 perimfrac; - /*0x64*/ u32 accel; - /*0x68*/ u32 decel; - /*0x6c*/ u32 maxspeed; + /*0x64*/ f32 accel; + /*0x68*/ f32 decel; + /*0x6c*/ f32 maxspeed; /*0x70*/ u16 doorflags; /*0x72*/ u16 doortype; /*0x74*/ u32 keyflags;