diff --git a/configure.py b/configure.py index 89cdd1994..bf357950b 100755 --- a/configure.py +++ b/configure.py @@ -1391,7 +1391,7 @@ config.libs = [ ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_bita"), ActorRel(Matching, "d_a_branch"), ActorRel(NonMatching, "d_a_bridge"), - ActorRel(NonMatching, "d_a_coming2"), + ActorRel(Matching, "d_a_coming2"), ActorRel(Matching, "d_a_coming3"), ActorRel(Matching, "d_a_demo_dk"), ActorRel(Matching, "d_a_demo_kmm"), @@ -1433,7 +1433,7 @@ config.libs = [ ActorRel(Matching, "d_a_obj_barrel2"), ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_obj_bscurtain"), ActorRel(Matching, "d_a_obj_cafelmp"), - ActorRel(NonMatching, "d_a_obj_coming"), + ActorRel(Matching, "d_a_obj_coming"), ActorRel(Matching, "d_a_obj_demo_barrel"), ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_obj_doguu"), ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_obj_doguu_demo"), diff --git a/include/d/actor/d_a_obj_barrel2.h b/include/d/actor/d_a_obj_barrel2.h index 998cf2b03..71a4d68da 100644 --- a/include/d/actor/d_a_obj_barrel2.h +++ b/include/d/actor/d_a_obj_barrel2.h @@ -63,7 +63,7 @@ namespace daObjBarrel2 { PRM_TYPE_S = 0x18, PRM_TEXTURE_W = 1, - PRM_TEXTURE_S = 10, + PRM_TEXTURE_S = 0xA, PRM_COMING_W = 1, PRM_COMING_S = 0x1C, @@ -72,17 +72,23 @@ namespace daObjBarrel2 { const Attr_c* attr() const { return &M_attr[m410]; } u8 chk_item_give() const { return m476; } void delete_req() {} - void exit_req() {} - void get_item_id() {} - static fpc_ProcID make_coming(cXyz* pos, int roomNo, Type_e type, int droppedItem, bool hasFlag, short angleY, daObjBuoyflag::Texture_e arg6) { + void exit_req() { m474 = 1; } + fpc_ProcID get_item_id() { return mItemId; } + static fpc_ProcID make_coming(cXyz* pos, int roomNo, Type_e type, int droppedItem, bool hasFlag, s16 angleY, daObjBuoyflag::Texture_e tex) { csXyz angle(0, angleY, 0); - return fopAcM_create(PROC_Obj_Barrel2, make_prm(type, droppedItem, hasFlag, false, arg6), pos, roomNo, &angle); + return fopAcM_create(PROC_Obj_Barrel2, make_prm(type, droppedItem, !hasFlag, true, tex), pos, roomNo, &angle); } - static u32 make_prm(Type_e arg0, int droppedItem, bool hasFlag, bool flagType, daObjBuoyflag::Texture_e arg4) { - s32 item = (droppedItem & 0x3F); - s32 tmp = hasFlag ? 1 : 0; - s32 a6 = arg4; - return (item | (0x7F << 16)) | (arg0 << 24) | (tmp << 8) | ((flagType ? 1 : 0) << 10) | (a6 << 28); + static u32 make_prm(Type_e type, int droppedItem, bool hasFlag, bool _unused, daObjBuoyflag::Texture_e tex) { + int itemNo = (droppedItem & 0x3F); + int buoy = hasFlag ? 1 : 0; + bool coming = true; + return + (itemNo << PRM_ITEM_NO_S) | + (0x7F << PRM_ITEM_SAVE_S) | + (type << PRM_TYPE_S) | + (buoy << PRM_BUOY_S) | + ((tex == daObjBuoyflag::Texture_00_e ? 0 : 1) << PRM_TEXTURE_S) | + (coming << PRM_COMING_S); } s32 prm_get_buoy() const { return daObj::PrmAbstract(this, PRM_BUOY_W, PRM_BUOY_S); @@ -181,7 +187,7 @@ namespace daObjBarrel2 { /* 0x44C */ f32 m44C; /* 0x450 */ f32 m450; /* 0x458 */ f32 m454; - /* 0x458 */ fpc_ProcID m458; + /* 0x458 */ fpc_ProcID mItemId; /* 0x45C */ f32 m45C; /* 0x460 */ fpc_ProcID m460; /* 0x464 */ s32 m464; diff --git a/src/d/actor/d_a_coming2.cpp b/src/d/actor/d_a_coming2.cpp index 441e88a26..ff28897f1 100644 --- a/src/d/actor/d_a_coming2.cpp +++ b/src/d/actor/d_a_coming2.cpp @@ -16,9 +16,21 @@ #include "d/actor/d_a_obj_barrel2.h" s32 daComing2::coming_make_item_no_table[] = { - dItem_GREEN_RUPEE_e, dItem_GREEN_RUPEE_e, dItem_GREEN_RUPEE_e, dItem_GREEN_RUPEE_e, dItem_GREEN_RUPEE_e, - dItem_BLUE_RUPEE_e, dItem_BLUE_RUPEE_e, dItem_BLUE_RUPEE_e, dItem_BLUE_RUPEE_e, dItem_BLUE_RUPEE_e, - dItem_YELLOW_RUPEE_e, dItem_YELLOW_RUPEE_e, dItem_YELLOW_RUPEE_e, dItem_YELLOW_RUPEE_e, dItem_YELLOW_RUPEE_e + dItem_GREEN_RUPEE_e, + dItem_GREEN_RUPEE_e, + dItem_GREEN_RUPEE_e, + dItem_GREEN_RUPEE_e, + dItem_GREEN_RUPEE_e, + dItem_BLUE_RUPEE_e, + dItem_BLUE_RUPEE_e, + dItem_BLUE_RUPEE_e, + dItem_BLUE_RUPEE_e, + dItem_BLUE_RUPEE_e, + dItem_YELLOW_RUPEE_e, + dItem_YELLOW_RUPEE_e, + dItem_YELLOW_RUPEE_e, + dItem_YELLOW_RUPEE_e, + dItem_YELLOW_RUPEE_e, }; static void dummy() { @@ -232,7 +244,7 @@ BOOL daComing2::Act_c::request_barrel_exitN(int idx) { if (barrelProc != fpcM_ERROR_PROCESS_ID_e) { if (fopAcM_SearchByID(barrelProc, (fopAc_ac_c**)&barrel) != NULL && barrel != NULL) { - barrel->m474 = 1; + barrel->exit_req(); return TRUE; } else { return FALSE; @@ -281,7 +293,7 @@ BOOL daComing2::Act_c::request_all_flag_exit() { daObjBarrel2::Act_c* buoy; if (buoyProc != fpcM_ERROR_PROCESS_ID_e && fopAcM_SearchByID(buoyProc, (fopAc_ac_c**)&buoy) != NULL && buoy != NULL) { - buoy->m474 = 1; + buoy->exit_req(); mStartBuoy[i].unk_00 = fpcM_ERROR_PROCESS_ID_e; } } @@ -434,12 +446,16 @@ void daComing2::Act_c::coming_setF_main() { cMtx_multVec(sp4C, &sp34[i], &sp28); if (get_water_height(&sp28.y, &sp28) && check_in_large_sea(&sp28) && position_is_none_obj(&sp28) && no_ship_obstacle(&sp28)) { -#if VERSION == VERSION_DEMO - fpc_ProcID barrel = daObjBarrel2::Act_c::make_coming(&sp28, -1, daObjBarrel2::Type_01_e, 0x3F, false, mStartStat.unk_00, daObjBuoyflag::Texture_01_e); -#else daObjBarrel2::Type_e type(daObjBarrel2::Type_01_e); - fpc_ProcID barrel = daObjBarrel2::Act_c::make_coming(&sp28, -1, type, 0x3F, false, mStartStat.unk_00, daObjBuoyflag::Texture_01_e); -#endif + fpc_ProcID barrel = daObjBarrel2::Act_c::make_coming( + &sp28, + -1, + DEMO_SELECT(daObjBarrel2::Type_01_e, type), + 0x3F, + true, + mStartStat.unk_00, + daObjBuoyflag::Texture_01_e + ); mStartBuoy[i].unk_00 = barrel; if (barrel != fpcM_ERROR_PROCESS_ID_e) { mStartBuoy[i].unk_04 = sp28; @@ -503,7 +519,15 @@ void daComing2::Act_c::coming_game_main() { if ((mBarrelInfo[unk_2A4].unk_00 == fpcM_ERROR_PROCESS_ID_e && make_coming_param(&sp1C, &type, &droppedItem, &hasFlag))) { if (check_in_large_sea(&sp1C) != 0) { if (position_is_none_obj(&sp1C) && no_ship_obstacle(&sp1C)) { - fpc_ProcID barrel = daObjBarrel2::Act_c::make_coming(&sp1C, -1, type, droppedItem, hasFlag, mStartStat.unk_00, daObjBuoyflag::Texture_01_e); + fpc_ProcID barrel = daObjBarrel2::Act_c::make_coming( + &sp1C, + -1, + type, + droppedItem, + hasFlag, + mStartStat.unk_00, + daObjBuoyflag::Texture_00_e + ); mBarrelInfo[unk_2A4].unk_00 = barrel; if (barrel != fpcM_ERROR_PROCESS_ID_e) { unk_29A = 0; diff --git a/src/d/actor/d_a_coming3.cpp b/src/d/actor/d_a_coming3.cpp index e7e93f99c..acde30a83 100644 --- a/src/d/actor/d_a_coming3.cpp +++ b/src/d/actor/d_a_coming3.cpp @@ -198,7 +198,15 @@ void daComing3::Act_c::coming_start_main() { static s32 make_item_table[] = { dItem_BLUE_RUPEE_e, dItem_YELLOW_RUPEE_e, }; - unk_400 = daObjBarrel2::Act_c::make_coming(&sp18, fopAcM_GetRoomNo(this), daObjBarrel2::Type_01_e, make_item_table[get_challenge_id()], true, shape_angle.y, daObjBuoyflag::Texture_01_e); + unk_400 = daObjBarrel2::Act_c::make_coming( + &sp18, + fopAcM_GetRoomNo(this), + daObjBarrel2::Type_01_e, + make_item_table[get_challenge_id()], + false, + shape_angle.y, + daObjBuoyflag::Texture_00_e + ); } if (unk_400 != fpcM_ERROR_PROCESS_ID_e) { @@ -253,7 +261,7 @@ void daComing3::Act_c::coming_game_main() { unk_404 = 3; eff_break_tsubo(); } else if ((unk_478 <= get_limit_dist()) && (barrel != NULL)) { - barrel->m474 = 1; + barrel->exit_req(); unk_404 = 2; } break; @@ -284,8 +292,8 @@ void daComing3::Act_c::coming_wait_main() { fopAcM_SearchByID(unk_400, &ac1); daObjBarrel2::Act_c* barrel = (daObjBarrel2::Act_c*)ac1; - if (barrel != NULL && !fopAcM_SearchByID(barrel->m458, &ac2)) { - barrel->m474 = 1; + if (barrel != NULL && !fopAcM_SearchByID(barrel->get_item_id(), &ac2)) { + barrel->exit_req(); fopAcM_delete(this); } } diff --git a/src/d/actor/d_a_obj_barrel2.cpp b/src/d/actor/d_a_obj_barrel2.cpp index feddad927..97e0af5bd 100644 --- a/src/d/actor/d_a_obj_barrel2.cpp +++ b/src/d/actor/d_a_obj_barrel2.cpp @@ -272,8 +272,15 @@ cPhs_State daObjBarrel2::Act_c::_create() { csXyz sp10(0, home.angle.y, 0); sp24.setall(attr()->m28 * attr()->m2C); - m458 = - fopAcM_createRaceItemFromTable(&sp30, prm_get_itemNo(), prm_get_itemSave(), fopAcM_GetHomeRoomNo(this), &sp10, &sp24, prm_get_coming() ? 1 : 0); + mItemId = fopAcM_createRaceItemFromTable( + &sp30, + prm_get_itemNo(), + prm_get_itemSave(), + fopAcM_GetHomeRoomNo(this), + &sp10, + &sp24, + prm_get_coming() ? 1 : 0 + ); m45C = 3.4028235e+38f; m468 = 0; m470 = 0; @@ -796,7 +803,7 @@ void daObjBarrel2::Act_c::item_delete() { void daObjBarrel2::Act_c::item_give() { if (M_tmp_item_actor != NULL) { M_tmp_item_actor->raceItemForceGet(); - m458 = fpcM_ERROR_PROCESS_ID_e; + mItemId = fpcM_ERROR_PROCESS_ID_e; m476 = 1; M_tmp_item_actor = NULL; } @@ -805,19 +812,19 @@ void daObjBarrel2::Act_c::item_give() { /* 000022A4-0000233C .text item_connect_check__Q212daObjBarrel25Act_cFv */ void daObjBarrel2::Act_c::item_connect_check() { M_tmp_item_actor = NULL; - if (m458 != fpcM_ERROR_PROCESS_ID_e) { + if (mItemId != fpcM_ERROR_PROCESS_ID_e) { fopAc_ac_c* pRaceitem; - if (fopAcM_SearchByID(m458, &pRaceitem)) { + if (fopAcM_SearchByID(mItemId, &pRaceitem)) { daRaceItem_c* raceitem = (daRaceItem_c*)pRaceitem; if (raceitem != NULL) { if (raceitem->checkOffsetPos()) { M_tmp_item_actor = raceitem; } else { - m458 = fpcM_ERROR_PROCESS_ID_e; + mItemId = fpcM_ERROR_PROCESS_ID_e; } } } else { - m458 = fpcM_ERROR_PROCESS_ID_e; + mItemId = fpcM_ERROR_PROCESS_ID_e; } } } diff --git a/src/d/actor/d_a_obj_coming.cpp b/src/d/actor/d_a_obj_coming.cpp index 7e03ba766..683df90d8 100644 --- a/src/d/actor/d_a_obj_coming.cpp +++ b/src/d/actor/d_a_obj_coming.cpp @@ -441,7 +441,7 @@ void daObjComing::Act_c::mode_barrel2_wait(daObjComing::Ctrl_c* ctrl) { barrel2.mItem, barrel2.m14, barrel2.mAngleY, - daObjBuoyflag::Texture_01_e + daObjBuoyflag::Texture_00_e ); ctrl->set_appear_timer(this); ctrl->m00 = 1; @@ -463,7 +463,7 @@ void daObjComing::Act_c::mode_barrel2_appear(daObjComing::Ctrl_c* ctrl) { if (ac != NULL) { daObjBarrel2::Act_c* barrel2_act = (daObjBarrel2::Act_c*)ac; JUT_ASSERT(1119, fopAcM_GetName(barrel2_act) == tk_Obj_Barrel2_e); - barrel2_act->m474 = 1; + barrel2_act->exit_req(); } } else { ctrl->m08 = fpcM_ERROR_PROCESS_ID_e; @@ -487,7 +487,7 @@ void daObjComing::Act_c::mode_barrel2_leave(daObjComing::Ctrl_c* ctrl) { if (ac != NULL) { daObjBarrel2::Act_c* barrel2_act = (daObjBarrel2::Act_c*)ac; JUT_ASSERT(1145, fopAcM_GetName(barrel2_act) == tk_Obj_Barrel2_e); - barrel2_act->m474 = 1; + barrel2_act->exit_req(); } } else { ctrl->m08 = fpcM_ERROR_PROCESS_ID_e;