diff --git a/include/d/d_timer.h b/include/d/d_timer.h index 83e18046d54..5bf12915734 100644 --- a/include/d/d_timer.h +++ b/include/d/d_timer.h @@ -17,15 +17,18 @@ private: /* 0x108 */ request_of_phase_process_class mPhase; /* 0x110 */ OSTime mTime1; /* 0x118 */ OSTime mTime2; - /* 0x120 */ u8 field_0x120[32]; - /* 0x140 */ OSTime mTime3; + /* 0x120 */ u8 field_0x120[16]; + /* 0x130 */ OSTime mTime3; + /* 0x138 */ u8 field_0x138[8]; + /* 0x140 */ OSTime mTime4; /* 0x148 */ u8 field_0x148[12]; /* 0x154 */ int mTimerMode; /* 0x158 */ u8 field_0x158[12]; /* 0x164 */ u8 mSeIdx; /* 0x165 */ u8 field_0x165[3]; /* 0x168 */ s16 field_0x168; - /* 0x16A */ u8 field_0x16A[2]; + /* 0x16A */ u8 field_0x16A; + /* 0x16B */ u8 field_0x16B; /* 0x16C */ u8 mDeleteCheck; public: @@ -38,7 +41,7 @@ public: /* 8025D538 */ void start(int); /* 8025D7C0 */ int stock_start(s16); /* 8025D708 */ bool stock_start(); - /* 8025D7E8 */ void stop(u8); + /* 8025D7E8 */ int stop(u8); /* 8025D86C */ void restart(u8); /* 8025D920 */ void end(int); /* 8025D9E0 */ void deleteRequest(); diff --git a/src/d/d_timer.cpp b/src/d/d_timer.cpp index 618c6b0b987..acb67d80030 100644 --- a/src/d/d_timer.cpp +++ b/src/d/d_timer.cpp @@ -316,6 +316,24 @@ int dTimer_c::stock_start(s16 param_0) { } /* 8025D7E8-8025D86C 258128 0084+00 3/3 1/1 0/0 .text stop__8dTimer_cFUc */ +#ifndef NONMATCHING +int dTimer_c::stop(u8 param_0) { + int ret; + + if (field_0x16A == 1 || field_0x16B != 0) { + ret = 0; + } else if (mDeleteCheck != 4) { + ret = 0; + } else { + mTime3 = dLib_time_c::getTime(); + field_0x16A = 1; + field_0x16B = param_0; + ret = 1; + } + + return ret; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -324,6 +342,7 @@ asm void dTimer_c::stop(u8 param_0) { #include "asm/d/d_timer/stop__8dTimer_cFUc.s" } #pragma pop +#endif /* 8025D86C-8025D920 2581AC 00B4+00 1/1 1/1 0/0 .text restart__8dTimer_cFUc */ #pragma push