From a2c1e7afafc5c494aabf55629909eaea4264f0fa Mon Sep 17 00:00:00 2001 From: Pheenoh Date: Thu, 22 Dec 2022 10:36:47 -0700 Subject: [PATCH] dTimer_createStockTimer --- include/d/com/d_com_inf_game.h | 8 ++++++ include/d/d_timer.h | 2 +- include/f_op/f_op_msg_mng.h | 6 +++++ src/d/d_timer.cpp | 48 ++++++++++++++++++++-------------- 4 files changed, 44 insertions(+), 20 deletions(-) diff --git a/include/d/com/d_com_inf_game.h b/include/d/com/d_com_inf_game.h index 82e13fd1230..3e1779f3811 100644 --- a/include/d/com/d_com_inf_game.h +++ b/include/d/com/d_com_inf_game.h @@ -703,10 +703,18 @@ inline int dComIfG_getTimerMode() { return g_dComIfG_gameInfo.play.getTimerMode(); } +inline void dComIfG_setTimerMode(int mode) { + return g_dComIfG_gameInfo.play.setTimerMode(mode); +} + inline dTimer_c* dComIfG_getTimerPtr() { return g_dComIfG_gameInfo.play.getTimerPtr(); } +inline u8 dComIfG_getTimerType() { + return g_dComIfG_gameInfo.play.getTimerType(); +} + inline int dComIfG_setObjectRes(const char* name, u8 param_1, JKRHeap* heap) { return g_dComIfG_gameInfo.mResControl.setObjectRes(name, param_1, heap); } diff --git a/include/d/d_timer.h b/include/d/d_timer.h index 69f7499c9ea..0d64c5870ac 100644 --- a/include/d/d_timer.h +++ b/include/d/d_timer.h @@ -8,7 +8,7 @@ #include "d/msg/d_msg_class.h" #include "JSystem/JKernel/JKRExpHeap.h" -void dTimer_createStockTimer(); +s32 dTimer_createStockTimer(); class dTimer_c : public msg_class { private: diff --git a/include/f_op/f_op_msg_mng.h b/include/f_op/f_op_msg_mng.h index 05abfdc3f06..a43df3d4446 100644 --- a/include/f_op/f_op_msg_mng.h +++ b/include/f_op/f_op_msg_mng.h @@ -40,5 +40,11 @@ int fopMsgM_messageSet(u32 param_0, u32 param_1); int fopMsgM_messageSetDemo(u32 param_0); msg_class* fopMsgM_SearchByID(unsigned int param_0); char* fopMsgM_messageGet(char* msg, u32 string_id); +s32 fop_Timer_create(s16 param_0, u8 param_1, u32 param_2, u8 param_3, u8 param_4, f32 param_5, + f32 param_6, f32 param_7, f32 param_8, fopMsgCreateFunc createFunc); +inline s32 fopMsgM_Timer_create(s16 param_0, u8 param_1, u32 param_2, u8 param_3, u8 param_4, f32 param_5, + f32 param_6, f32 param_7, f32 param_8, fopMsgCreateFunc createFunc) { + return fop_Timer_create(param_0, param_1, param_2, param_3, param_4, param_5, param_6, param_7, param_8, createFunc); + } #endif diff --git a/src/d/d_timer.cpp b/src/d/d_timer.cpp index 554cbbccc5f..6cb0841bf4f 100644 --- a/src/d/d_timer.cpp +++ b/src/d/d_timer.cpp @@ -5,9 +5,11 @@ #include "d/d_timer.h" #include "d/com/d_com_inf_game.h" +#include "f_op/f_op_msg_mng.h" #include "dol2asm.h" #include "dolphin/types.h" + // // Types: // @@ -815,32 +817,24 @@ static void dTimer_Delete(dTimer_c* i_timer) { } /* 80260F6C-80260F8C 25B8AC 0020+00 1/0 0/0 0/0 .text dTimer_Create__FP9msg_class */ -#ifndef NONMATCHING static void dTimer_Create(msg_class* i_timer) { ((dTimer_c*)i_timer)->_create(); } -#else -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dTimer_Create(msg_class* param_0) { - nofralloc -#include "asm/d/d_timer/dTimer_Create__FP9msg_class.s" -} -#pragma pop -#endif /* 80260F8C-80261034 25B8CC 00A8+00 0/0 1/1 9/9 .text dTimer_createTimer__FlUlUcUcffff */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dTimer_createTimer(s32 param_0, u32 param_1, u8 param_2, u8 param_3, f32 param_4, +s32 dTimer_createTimer(s32 param_0, u32 param_1, u8 param_2, u8 param_3, f32 param_4, f32 param_5, f32 param_6, f32 param_7) { - nofralloc -#include "asm/d/d_timer/dTimer_createTimer__FlUlUcUcffff.s" -} -#pragma pop + s32 ret; + if (dComIfG_getTimerMode() == -1) { + ret = fopMsgM_Timer_create(0x315,param_0,param_1,param_2,param_3,param_4,param_5,param_6,param_7,0); + } + else { + ret = -1; + } + + return ret; +} /* ############################################################################################## */ /* 8039A3D8-8039A3D8 026A38 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ #pragma push @@ -863,6 +857,21 @@ SECTION_SDATA2 static f32 lit_5546 = 32.0f; SECTION_SDATA2 static f32 lit_5547 = 419.0f; /* 80261034-80261100 25B974 00CC+00 0/0 1/1 0/0 .text dTimer_createStockTimer__Fv */ +#ifndef NONMATCHING +s32 dTimer_createStockTimer() { + if (dComIfG_getTimerMode() != -1) { + if ((dComIfG_getTimerMode() == 3 || dComIfG_getTimerMode() == 4) && strcmp(dComIfGp_getStartStageName(),"F_SP115")) { + dComIfG_setTimerMode(-1); + return -1; + } else { + u8 timer_type = dComIfG_getTimerType(); + return fopMsgM_Timer_create(0x315,10,0,timer_type,0,FLOAT_LABEL(lit_5544),FLOAT_LABEL(lit_5545),FLOAT_LABEL(lit_5546),FLOAT_LABEL(lit_5547),0); + } + } else { + return -1; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -871,6 +880,7 @@ asm void dTimer_createStockTimer() { #include "asm/d/d_timer/dTimer_createStockTimer__Fv.s" } #pragma pop +#endif /* 80261100-80261188 25BA40 0088+00 0/0 0/0 1/1 .text dTimer_createGetIn2D__Fl4cXyz */ #pragma push