diff --git a/include/rel/d/a/d_a_do/d_a_do.h b/include/rel/d/a/d_a_do/d_a_do.h index c21f958edd1..22fb7709e2b 100644 --- a/include/rel/d/a/d_a_do/d_a_do.h +++ b/include/rel/d/a/d_a_do/d_a_do.h @@ -23,7 +23,9 @@ class do_class : public fopAc_ac_c { public: /* 0x56C */ u8 field_0x56c[68]; /* 0x5AC */ request_of_phase_process_class mPhase; - /* 0x5B4 */ u8 field_0x5b4[20]; + /* 0x5B4 */ u8 field_0x5b4[2]; + /* 0x5B6 */ u8 field_0x5b6; + /* 0x5B7 */ u8 field_0x5b7[17]; /* 0x5C8 */ float field_0x5c8; /* 0x5CC */ u8 field_0x5cc[4]; /* 0x5D8 */ mDoExt_McaMorf* mpMorf; @@ -35,10 +37,12 @@ public: /* 0x5F0 */ u8 field_0x5f0[2]; /* 0x5F2 */ s16 field_0x5f2; /* 0x5F4 */ u8 field_0x5f4[2]; - /* 0x5F6 */ u16 field_0x5f6; + /* 0x5F6 */ s16 field_0x5f6; /* 0x5F8 */ u8 field_0x5f8[4]; /* 0x5FC */ u16 field_0x5fc; - /* 0x5FE */ u8 field_0x5fe[6]; + /* 0x5FE */ u8 field_0x5fe[2]; + /* 0x600 */ s16 field_0x600; + /* 0x602 */ u8 field_0x602[2]; /* 0x604 */ u16 field_0x604; /* 0x606 */ u8 field_0x606[2]; /* 0x608 */ float field_0x608; diff --git a/rel/d/a/d_a_do/d_a_do.cpp b/rel/d/a/d_a_do/d_a_do.cpp index 196ce4f32e4..2f35dc147dc 100644 --- a/rel/d/a/d_a_do/d_a_do.cpp +++ b/rel/d/a/d_a_do/d_a_do.cpp @@ -10,6 +10,7 @@ #include "dolphin/types.h" #include "f_op/f_op_actor_mng.h" #include "f_pc/f_pc_executor.h" +#include "SSystem/SComponent/c_math.h" // // Forward References: @@ -1048,6 +1049,20 @@ COMPILER_STRIP_GATE(0x8066EE58, &lit_4138); #pragma pop /* 80668BA0-80668D5C 000F40 01BC+00 5/5 0/0 0/0 .text area_check__FP8do_class */ +#ifdef NONMATCHING +// matches with literals +static void area_check(do_class* i_dogP) { + cXyz pos_delta = i_dogP->orig.pos - i_dogP->current.pos; + + if (i_dogP->field_0x5b6 != 255) { + if ((i_dogP->field_0x5b6 * 100.f * 2.0f) > pos_delta.abs()) { + i_dogP->field_0x5f2 = 1; + i_dogP->field_0x5f6 = -1; + i_dogP->field_0x600 = cM_rndF(100.0f) + 100.0f; // random value between 100 and 200 + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -1056,6 +1071,7 @@ static asm void area_check(do_class* i_dogP) { #include "asm/rel/d/a/d_a_do/d_a_do/area_check__FP8do_class.s" } #pragma pop +#endif /* ############################################################################################## */ /* 8066EE60-8066EE64 000078 0004+00 0/5 0/0 0/0 .rodata @4189 */