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 b751c296da1..ed8904e6151 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 @@ -27,52 +27,76 @@ public: /* 0x5B5 */ u8 field_0x5b5; /* 0x5B6 */ u8 field_0x5b6; /* 0x5B7 */ u8 field_0x5b7[17]; - /* 0x5C8 */ float field_0x5c8; + /* 0x5C8 */ f32 field_0x5c8; /* 0x5CC */ s16 field_0x5cc; /* 0x5CE */ u8 field_0x5ce[2]; /* 0x5D8 */ mDoExt_McaMorf* mpMorf; /* 0x5D4 */ u8 field_0x5d4[8]; - /* 0x5DC */ u8 field_0x5dc[8]; + /* 0x5DC */ u8 field_0x5dc[2]; + /* 0x5DE */ s16 field_0x5de; + /* 0x5E0 */ s16 field_0x5e0; + /* 0x5E2 */ u8 field_0x5e2[2]; /* 0x5E4 */ s32 mResIdx; - /* 0x5E8 */ float field_0x5e8; - /* 0x5EC */ float field_0x5ec; - /* 0x5F0 */ u8 field_0x5f0[2]; + /* 0x5E8 */ f32 field_0x5e8; + /* 0x5EC */ f32 field_0x5ec; + /* 0x5F0 */ s16 field_0x5f0; /* 0x5F2 */ s16 mActionStatus; /* 0x5F4 */ u16 field_0x5f4; - /* 0x5F6 */ s16 mStayStatus; + /* 0x5F6 */ s16 mStayStatus; // probably a better name for this /* 0x5F8 */ u8 field_0x5f8[4]; /* 0x5FC */ s16 field_0x5fc; /* 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; - /* 0x60C */ u8 field_0x60c[8]; + /* 0x606 */ s16 field_0x606; + /* 0x608 */ f32 field_0x608; + /* 0x60C */ u8 field_0x60c[2]; + /* 0x60E */ s16 field_0x60e; + /* 0x60E */ s16 field_0x610; + /* 0x60E */ s16 field_0x612; /* 0x614 */ s16 field_0x614; /* 0x616 */ u8 field_0x616; - /* 0x617 */ u8 field_0x617[29]; - /* 0x634 */ u32 field_0x634; - /* 0x638 */ u8 field_0x638[16]; + /* 0x617 */ u8 field_0x617[14]; + /* 0x624 */ s16 field_0x624; + /* 0x626 */ u8 field_0x626[2]; + /* 0x628 */ s16 field_0x628; + /* 0x62A */ s16 field_0x62a; + /* 0x62C */ u8 field_0x62c[2]; + /* 0x62E */ u16 field_0x62e; + /* 0x630 */ u16 field_0x630; + /* 0x632 */ s16 field_0x632; + /* 0x634 */ f32 field_0x634; + /* 0x638 */ f32 field_0x638; + /* 0x63C */ s16 field_0x63c; + /* 0x63E */ s16 field_0x63e; + /* 0x640 */ s16 field_0x640; + /* 0x642 */ u8 field_0x642[2]; // some weird alignmnet here /* 0x648 */ f32 field_0x648; - /* 0x64c */ u8 field_0x64c[12]; - /* 0x658 */ float field_0x658; - /* 0x65C */ float field_0x65c; - /* 0x660 */ u8 field_0x660[28]; - /* 0x67C */ float field_0x67c; - /* 0x680 */ u8 field_0x680[4]; + /* 0x64C */ f32 field_0x64c; + /* 0x650 */ f32 field_0x650; + /* 0x654 */ u8 field_0x654[4]; + /* 0x658 */ f32 field_0x658; + /* 0x65C */ f32 field_0x65c; + /* 0x660 */ u16 field_0x660; + /* 0x662 */ u8 field_0x662[26]; + /* 0x67C */ f32 field_0x67c; + /* 0x680 */ u32 field_0x680; /* 0x684 */ u32 mFoodBsPcId; /* 0x688 */ u8 field_0x688; /* 0x689 */ u8 field_0x689; /* 0x68A */ u8 field_0x68a; /* 0x68B */ u8 field_0x68b; - /* 0x68C */ float field_0x68c; - /* 0x690 */ float field_0x690; - /* 0x694 */ float field_0x694; + /* 0x68C */ f32 field_0x68c; + /* 0x690 */ f32 field_0x690; + /* 0x694 */ f32 field_0x694; /* 0x698 */ u8 field_0x698[36]; /* 0x6BC */ dBgS_AcchCir mBgS_AcchCir; /* 0x6FC */ dBgS_Acch mBgS_Acch; - /* 0x8D4 */ u8 field_0x8d4[24]; + /* 0x8D4 */ f32 field_0x8d4; + /* 0x8D8 */ u8 field_0x8d8[4]; + /* 0x8DC */ f32 field_0x8dc; + /* 0x8E0 */ u8 field_0x8e0[12]; /* 0x8EC */ dCcD_GStts mCcD_GStts; /* 0x90C */ u8 field_0x90c[4]; /* 0x910 */ dCcD_GObjInf mCcD_GObjInf1; @@ -86,6 +110,7 @@ public: /* 0xC05 */ s8 field_0xc05; /* 0xC06 */ s16 field_0xc06; /* 0xC08 */ s16 field_0xc08; + /* 0xC0A */ u8 field_0xc0a[2]; /* 0xC0C */ dMsgFlow_c mMsg; /* 0xC58 */ u8 field_0xc58[104]; /* 0xCC0 */ u8 field_0xcc0; 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 ee592aadb42..1aeca49d9fe 100644 --- a/rel/d/a/d_a_do/d_a_do.cpp +++ b/rel/d/a/d_a_do/d_a_do.cpp @@ -694,7 +694,18 @@ static u8 lit_3657[12]; /* 8066F2C4-8066F2E4 000054 0020+00 11/12 0/0 0/0 .bss l_HIO */ // likely is a more complicated struct that needs to be mapped -static f32 l_HIO[8]; +struct do_class_HIO { + /* 0x00 */ f32 field_0x00; + /* 0x04 */ f32 field_0x04; + /* 0x08 */ f32 field_0x08; + /* 0x0C */ f32 field_0x0c; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ u8 field_0x1c; + /* 0x1D */ u8 field_0x1d; +}; +static do_class_HIO l_HIO; /* 8066F2E4-8066F2F8 000074 0014+00 1/2 0/0 0/0 .bss target_info */ static fopAc_ac_c* target_info[5]; @@ -886,8 +897,6 @@ static bool water_check(do_class* i_dogP) { } else { return 0; } - - } #else #pragma push @@ -1352,6 +1361,46 @@ COMPILER_STRIP_GATE(0x8066EEA4, &lit_4378); #pragma pop /* 8066973C-806698D0 001ADC 0194+00 1/1 0/0 0/0 .text do_walk_run__FP8do_class */ +#ifndef NONMATCHING +static void do_walk_run(do_class* i_dogP) { + i_dogP->field_0x616 = 1; + i_dogP->field_0x648 = FLOAT_LABEL(lit_4344); + + switch (i_dogP->mStayStatus) { + case 0: { + i_dogP->field_0x5e8 = FLOAT_LABEL(lit_4377); + + anm_init(i_dogP,22,FLOAT_LABEL(lit_4192),2,i_dogP->field_0x5e8); + i_dogP->mStayStatus++; + } + case 1: { + cLib_addCalc2(&i_dogP->field_0x5e8,FLOAT_LABEL(lit_3665),FLOAT_LABEL(lit_3662),FLOAT_LABEL(lit_4345)); + i_dogP->mpMorf->setPlaySpeed(i_dogP->field_0x5e8); + + if (i_dogP->field_0x5e8 >= FLOAT_LABEL(lit_3665) ) { + i_dogP->mActionStatus = do_class::ACTION_STATUS_RUN; + i_dogP->mStayStatus = 0; + + + i_dogP->mSound.startSound(JAISoundID(327693),0,-1); + } + } + default: { + cLib_addCalc2(&i_dogP->mSpeedF, i_dogP->field_0x5e8 * l_HIO.field_0x0c, FLOAT_LABEL(lit_3662), FLOAT_LABEL(lit_4342) * l_HIO.field_0x0c); + cLib_addCalcAngleS2(&i_dogP->current.angle.y,i_dogP->field_0x5cc,8,0x400); + + if (i_dogP->field_0x5c8 < FLOAT_LABEL(lit_4378) * i_dogP->field_0x67c) { + + l_HIO.field_0x1c != 0 ? i_dogP->mActionStatus = do_class::ACTION_STATUS_WAIT_2 : i_dogP->mActionStatus = do_class::ACTION_STATUS_WAIT_1; + i_dogP->mStayStatus = 0; + } + + area_check(i_dogP); + move_dansa_check(i_dogP,i_dogP->mSpeedF); + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -1360,6 +1409,7 @@ static asm void do_walk_run(do_class* i_dogP) { #include "asm/rel/d/a/d_a_do/d_a_do/do_walk_run__FP8do_class.s" } #pragma pop +#endif /* ############################################################################################## */ /* 8066EEA8-8066EEAC 0000C0 0004+00 0/3 0/0 0/0 .rodata @4400 */ @@ -1723,7 +1773,7 @@ static void do_swim(do_class* i_dogP) { } } - cLib_addCalc2(&i_dogP->mSpeedF,l_HIO[5],FLOAT_LABEL(lit_3662),FLOAT_LABEL(lit_4588)*l_HIO[5]); + cLib_addCalc2(&i_dogP->mSpeedF,l_HIO.field_0x14,FLOAT_LABEL(lit_3662),FLOAT_LABEL(lit_4588)*l_HIO.field_0x14); cLib_addCalcAngleS2(&i_dogP->current.angle.y,i_dogP->field_0x5cc,16,0x100); i_dogP->mSpeed.y = FLOAT_LABEL(lit_3682);