document: Blubber actor from TTC
This commit is contained in:
@@ -11,16 +11,31 @@ typedef struct {
|
||||
s16 unkE;
|
||||
f32 throw_target_position[3];
|
||||
s32 throw_target_radius;
|
||||
NodeProp* unk20;
|
||||
s32 unk24;
|
||||
NodeProp* gold_bullion_throw_target_node_prop;
|
||||
s32 unk24; // bullions left to collect ? (changes from 4 to 0)
|
||||
}ActorLocal_Blubber;
|
||||
|
||||
void func_803878CC(Actor *this);
|
||||
void TTC_func_80387CF4(Actor *this);
|
||||
Actor *func_80387D6C(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx);
|
||||
void TTC_Blubber_updateFunc(Actor *this);
|
||||
void TTC_Blubber_update2Func(Actor *this);
|
||||
Actor *TTC_Blubber_drawFunc(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx);
|
||||
|
||||
enum ttc_blubber_map_flags_e {
|
||||
TTC_BLUBBER_MAP_FLAG_0_UNKNOWN = 0,
|
||||
TTC_BLUBBER_MAP_FLAG_1_UNKNOWN = 1, // If this is not set some things will not run like showing the jiggy collected text
|
||||
TTC_BLUBBER_MAP_FLAG_2_JIGGY_SPAWNED_TEXT_SHOWN = 2, // Jiggy collected text shown
|
||||
TTC_BLUBBER_MAP_FLAG_3_SHOW_JIGGY_SPAWNED_TEXT_FLAG = 3
|
||||
};
|
||||
|
||||
enum ttc_blubber_states_e {
|
||||
TTC_BLUBBER_STATE_1_UNKNOWN = 1, // initial state (80387A84)
|
||||
TTC_BLUBBER_STATE_2_UNKNOWN = 2, // 80387B10
|
||||
TTC_BLUBBER_STATE_3_UNKNOWN = 3,
|
||||
TTC_BLUBBER_STATE_4_UNKNOWN = 4, // 80387C04
|
||||
TTC_BLUBBER_STATE_5_UNKNOWN = 5 // 80387CD4
|
||||
};
|
||||
|
||||
/* .data */
|
||||
ActorAnimationInfo D_8038C4E0[] = {
|
||||
ActorAnimationInfo TTC_BLUBBER_ACTOR_ANIMATIONS[6] = {
|
||||
{0x00, 0.0f},
|
||||
{ASSET_B5_ANIM_BLUBBER_WALK, 2.0f},
|
||||
{ASSET_B6_ANIM_BLUBBER_CRY, 2.0f},
|
||||
@@ -29,75 +44,74 @@ ActorAnimationInfo D_8038C4E0[] = {
|
||||
{ASSET_B8_ANIM_BLUBBER_RUN, 0.8f}
|
||||
};
|
||||
|
||||
ActorInfo TTC_D_8038C510 = {
|
||||
ActorInfo TTC_BLUBBER_ACTOR_INFO = {
|
||||
MARKER_A3_BLUBBER, ACTOR_115_BLUBBER, ASSET_370_MODEL_BLUBBER,
|
||||
0x1, D_8038C4E0,
|
||||
func_803878CC, TTC_func_80387CF4, func_80387D6C,
|
||||
0x1, TTC_BLUBBER_ACTOR_ANIMATIONS,
|
||||
TTC_Blubber_updateFunc, TTC_Blubber_update2Func, TTC_Blubber_drawFunc,
|
||||
0, 0x399, 1.8f, 0
|
||||
};
|
||||
|
||||
/* .code */
|
||||
void func_80387490(Actor *this){
|
||||
void TTC_Blubber_initiliaze(Actor *this){
|
||||
ActorLocal_Blubber *local = (ActorLocal_Blubber *)&this->local;
|
||||
|
||||
animctrl_setTransitionDuration(this->animctrl, 0.2f);
|
||||
this->initialized = TRUE;
|
||||
local->unk20 = func_80304C38(ACTOR_2B_GOLD_BULLION_THROW_TARGET, this);
|
||||
if(local->unk20){
|
||||
|
||||
nodeprop_getPosition(local->unk20, local->throw_target_position);
|
||||
local->throw_target_radius = nodeprop_getRadius(local->unk20);
|
||||
local->gold_bullion_throw_target_node_prop = nodeprop_findByActorIdAndActorPosition(ACTOR_2B_GOLD_BULLION_THROW_TARGET, this);
|
||||
if(local->gold_bullion_throw_target_node_prop){
|
||||
nodeprop_getPosition(local->gold_bullion_throw_target_node_prop, local->throw_target_position);
|
||||
local->throw_target_radius = nodeprop_getRadius(local->gold_bullion_throw_target_node_prop);
|
||||
}
|
||||
local->unk24 = 4;
|
||||
func_8032A82C(this, 0x14C);
|
||||
}
|
||||
|
||||
void func_80387520(ActorMarker *caller, enum asset_e text_id, s32 arg1){
|
||||
void TTC_Blubber_showTextCallback(ActorMarker *caller, enum asset_e text_id, s32 arg1){
|
||||
Actor *this = marker_getActor(caller);
|
||||
ActorLocal_Blubber *local = (ActorLocal_Blubber*)&this->local;
|
||||
|
||||
if(text_id == 0xa0d || text_id == 0xa2a){
|
||||
if(text_id == ASSET_A0D_BLUBBER_COMPLETE || text_id == ASSET_A2A_BLUBBER_COMPLETE_JIGGY_COLLECTED){
|
||||
local->unk24 = 0;
|
||||
}
|
||||
else{
|
||||
subaddie_set_state_with_direction(this, 2, 0, 1);
|
||||
subaddie_set_state_with_direction(this, TTC_BLUBBER_STATE_2_UNKNOWN, 0, 1);
|
||||
}
|
||||
}
|
||||
|
||||
void func_80387574(ActorMarker *caller, enum asset_e text_id, s32 arg1){
|
||||
void TTC_Blubber_showTextCallback2(ActorMarker *caller, enum asset_e text_id, s32 arg1){
|
||||
f32 sp24[3];
|
||||
|
||||
if(nodeProp_findPositionFromActorId(0x14b, sp24)){
|
||||
if(nodeProp_findPositionFromActorId(ACTOR_14B_TTC_BLUBBER_UNKNOWN, sp24)){
|
||||
jiggy_spawn(JIGGY_14_TTC_BLUBBER, sp24);
|
||||
__spawnQueue_add_4((GenFunction_4)spawnQueue_actor_f32, ACTOR_4C_STEAM, reinterpret_cast(s32, sp24[0]), reinterpret_cast(s32, sp24[1]), reinterpret_cast(s32, sp24[2]));
|
||||
}
|
||||
}
|
||||
|
||||
void func_803875D4(ActorMarker *marker){
|
||||
void TTC_Blubber_showJiggySpawnedText(ActorMarker *marker){
|
||||
Actor *this = marker_getActor(reinterpret_cast(ActorMarker *, marker));
|
||||
enum asset_e text_id;
|
||||
|
||||
subaddie_set_state(this, 4);
|
||||
subaddie_set_state(this, TTC_BLUBBER_STATE_4_UNKNOWN);
|
||||
actor_loopAnimation(this);
|
||||
this->actor_specific_1_f = 0.0f;
|
||||
|
||||
if(!mapSpecificFlags_get(2)) {
|
||||
text_id = jiggyscore_isCollected(JIGGY_14_TTC_BLUBBER) ? ASSET_A2A_TEXT_UNKNOWN : ASSET_A0D_TEXT_UNKNOWN;
|
||||
gcdialog_showText(text_id, 0xf, this->position, this->marker, func_80387520, func_80387574);
|
||||
mapSpecificFlags_set(2, TRUE);
|
||||
if(!mapSpecificFlags_get(TTC_BLUBBER_MAP_FLAG_2_JIGGY_SPAWNED_TEXT_SHOWN)) {
|
||||
text_id = jiggyscore_isCollected(JIGGY_14_TTC_BLUBBER) ? ASSET_A2A_BLUBBER_COMPLETE_JIGGY_COLLECTED : ASSET_A0D_BLUBBER_COMPLETE;
|
||||
gcdialog_showText(text_id, 0xf, this->position, this->marker, TTC_Blubber_showTextCallback, TTC_Blubber_showTextCallback2);
|
||||
mapSpecificFlags_set(TTC_BLUBBER_MAP_FLAG_2_JIGGY_SPAWNED_TEXT_SHOWN, TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
void func_80387678(Actor *this){
|
||||
if( !mapSpecificFlags_get(1) ) return;
|
||||
if( mapSpecificFlags_get(3) ) return;
|
||||
void TTC_Blubber_checkJiggySpawnedTextAndAdvanceState(Actor *this){
|
||||
if( !mapSpecificFlags_get(TTC_BLUBBER_MAP_FLAG_1_UNKNOWN) ) return;
|
||||
if( mapSpecificFlags_get(TTC_BLUBBER_MAP_FLAG_3_SHOW_JIGGY_SPAWNED_TEXT_FLAG) ) return;
|
||||
|
||||
this->yaw_ideal = (f32) func_80329784(this);
|
||||
mapSpecificFlags_set(3, TRUE);
|
||||
mapSpecificFlags_set(TTC_BLUBBER_MAP_FLAG_3_SHOW_JIGGY_SPAWNED_TEXT_FLAG, TRUE);
|
||||
func_8028F918(2);
|
||||
timed_setStaticCameraToNode(0.0f, 4);
|
||||
timedFunc_set_1(1.0f, (GenFunction_1)func_803875D4, (s32)this->marker);
|
||||
subaddie_set_state_with_direction(this, 1, 0.0f, 1);
|
||||
timedFunc_set_1(1.0f, (GenFunction_1)TTC_Blubber_showJiggySpawnedText, (s32)this->marker);
|
||||
subaddie_set_state_with_direction(this, TTC_BLUBBER_STATE_1_UNKNOWN, 0.0f, 1);
|
||||
}
|
||||
|
||||
void func_8038771C(Actor *this){
|
||||
@@ -108,6 +122,7 @@ void func_8038771C(Actor *this){
|
||||
}
|
||||
}
|
||||
|
||||
// probably something related to blubber throwing the bullions
|
||||
void func_80387774(Actor **this_ptr){
|
||||
ActorLocal_Blubber *local = (ActorLocal_Blubber *)&(*this_ptr)->local;
|
||||
|
||||
@@ -115,8 +130,8 @@ void func_80387774(Actor **this_ptr){
|
||||
if( func_80329530(*this_ptr, 200)
|
||||
&& bacarry_get_markerId() == MARKER_37_GOLD_BULLION
|
||||
&& player_throwCarriedObject()
|
||||
){
|
||||
func_8028FA34(!mapSpecificFlags_get(0)? 0x149 : 0x14a, *this_ptr);
|
||||
) {
|
||||
func_8028FA34(!mapSpecificFlags_get(TTC_BLUBBER_MAP_FLAG_0_UNKNOWN) ? ACTOR_149_TTC_BLUBBER_UNKNOWN : ACTOR_14A_TTC_BLUBBER_UNKNOWN, *this_ptr);
|
||||
(*this_ptr)->has_met_before = TRUE;
|
||||
}
|
||||
|
||||
@@ -126,21 +141,21 @@ void func_80387830(Actor *this , f32 arg1, f32 arg2){
|
||||
if( actor_animationIsAt(this, arg1)
|
||||
|| actor_animationIsAt(this, arg2)
|
||||
){
|
||||
this->unk10_12 = func_802E0970(0x26, 0.75f, 0.85f, 0.05f, 11000, this->unk10_12, this->position);
|
||||
this->unk10_12 = func_802E0970(SFX_26_BANJO_LANDING_09, 0.75f, 0.85f, 0.05f, 11000, this->unk10_12, this->position);
|
||||
}
|
||||
}
|
||||
|
||||
void func_803878CC(Actor * this){
|
||||
void TTC_Blubber_updateFunc(Actor * this){
|
||||
ActorLocal_Blubber *local;
|
||||
|
||||
this->marker->propPtr->unk8_3 = TRUE;
|
||||
func_8028E668(this->position, 90.0f, -10.0f, 110.0f);
|
||||
if(!mapSpecificFlags_get(1) && !func_80329530(this, 2500))
|
||||
if(!mapSpecificFlags_get(TTC_BLUBBER_MAP_FLAG_1_UNKNOWN) && !func_80329530(this, 2500))
|
||||
return;
|
||||
|
||||
if(!this->volatile_initialized){
|
||||
if(this->state == 3){
|
||||
subaddie_set_state_with_direction(this, 2, 0.0f, 1);
|
||||
if(this->state == TTC_BLUBBER_STATE_3_UNKNOWN){
|
||||
subaddie_set_state_with_direction(this, TTC_BLUBBER_STATE_2_UNKNOWN, 0.0f, 1);
|
||||
}
|
||||
this->volatile_initialized = TRUE;
|
||||
}//L80387970
|
||||
@@ -149,44 +164,43 @@ void func_803878CC(Actor * this){
|
||||
&& !this->has_met_before
|
||||
&& item_getCount(ITEM_18_GOLD_BULLIONS) == 0
|
||||
){
|
||||
gcdialog_showText(ASSET_A0B_TEXT_UNKNOWN, 0xe, this->position, this->marker, func_80387520, NULL);
|
||||
gcdialog_showText(ASSET_A0B_FIRST_MEET_BLUBBER, 0xe, this->position, this->marker, TTC_Blubber_showTextCallback, NULL);
|
||||
this->has_met_before = TRUE;
|
||||
subaddie_set_state_forward(this, 3);
|
||||
subaddie_set_state_forward(this, TTC_BLUBBER_STATE_3_UNKNOWN);
|
||||
}
|
||||
|
||||
if( mapSpecificFlags_get(0)
|
||||
if( mapSpecificFlags_get(TTC_BLUBBER_MAP_FLAG_0_UNKNOWN)
|
||||
&& !this->unk138_23
|
||||
){
|
||||
if (item_getCount(ITEM_18_GOLD_BULLIONS) == 0) {
|
||||
gcdialog_showText(ASSET_A0C_TEXT_UNKNOWN, 4, NULL, NULL, NULL, NULL);
|
||||
gcdialog_showText(ASSET_A0C_BLUBBER_HALF_GOLD, 4, NULL, NULL, NULL, NULL);
|
||||
}
|
||||
|
||||
this->unk138_23 = TRUE;
|
||||
this->has_met_before = TRUE;
|
||||
|
||||
}//L80387A54
|
||||
|
||||
switch(this->state){//D_8038CD40
|
||||
case 1:// 80387A84
|
||||
case TTC_BLUBBER_STATE_1_UNKNOWN:
|
||||
if(!this->initialized){
|
||||
actor_collisionOff(this);
|
||||
func_80387490(this);
|
||||
TTC_Blubber_initiliaze(this);
|
||||
}
|
||||
func_80387774(&this);
|
||||
|
||||
if(subaddie_maybe_set_state_position_direction(this, 2, 0.0f, 1, 0.007f))
|
||||
if(subaddie_maybe_set_state_position_direction(this, TTC_BLUBBER_STATE_2_UNKNOWN, 0.0f, 1, 0.007f))
|
||||
break;
|
||||
|
||||
func_80328FB0(this, 3.0f);
|
||||
func_8038771C(this);
|
||||
func_80387830(this, 0.14f, 0.68f);
|
||||
func_80387678(this);
|
||||
TTC_Blubber_checkJiggySpawnedTextAndAdvanceState(this);
|
||||
break;
|
||||
|
||||
case 2:// 80387B10
|
||||
case TTC_BLUBBER_STATE_2_UNKNOWN:
|
||||
func_80387774(&this);
|
||||
if( actor_animationIsAt(this, 0.99f)
|
||||
&& subaddie_maybe_set_state_position_direction(this, 1, 0.0f, 1, 0.78f)
|
||||
&& subaddie_maybe_set_state_position_direction(this, TTC_BLUBBER_STATE_1_UNKNOWN, 0.0f, 1, 0.78f)
|
||||
){
|
||||
this->actor_specific_1_f = 4.0f;
|
||||
break;
|
||||
@@ -204,18 +218,18 @@ void func_803878CC(Actor * this){
|
||||
FUNC_8030E8B4(SFX_83_BLUBBER_CRYING, 0.91f, 17000, this->position, 1250, 2500);
|
||||
}
|
||||
|
||||
func_80387678(this);
|
||||
TTC_Blubber_checkJiggySpawnedTextAndAdvanceState(this);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
case TTC_BLUBBER_STATE_3_UNKNOWN:
|
||||
break;
|
||||
|
||||
case 4:// 80387C04
|
||||
case TTC_BLUBBER_STATE_4_UNKNOWN:
|
||||
{
|
||||
func_80328FB0(this, 3.0f);
|
||||
local = (ActorLocal_Blubber*)&this->local;
|
||||
if(actor_animationIsAt(this, 0.99f) && !local->unk24){
|
||||
subaddie_set_state(this, 5);
|
||||
subaddie_set_state(this, TTC_BLUBBER_STATE_5_UNKNOWN);
|
||||
this->actor_specific_1_f = 8.0f;
|
||||
}
|
||||
}
|
||||
@@ -231,14 +245,14 @@ void func_803878CC(Actor * this){
|
||||
}
|
||||
break;
|
||||
|
||||
case 5:// 80387CD4
|
||||
case TTC_BLUBBER_STATE_5_UNKNOWN:
|
||||
local = (ActorLocal_Blubber*)&this->local;
|
||||
func_8032A95C(this, local->unkE, 0x21c);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void TTC_func_80387CF4(Actor *this){
|
||||
void TTC_Blubber_update2Func(Actor *this){
|
||||
func_80343DEC(this);
|
||||
if(0.99 <= this->unk48){
|
||||
func_8028F918(0);
|
||||
@@ -248,7 +262,7 @@ void TTC_func_80387CF4(Actor *this){
|
||||
func_80387830(this, 0.5f, 0.97f);
|
||||
}
|
||||
|
||||
Actor *func_80387D6C(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx){
|
||||
Actor *TTC_Blubber_drawFunc(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx){
|
||||
func_8033A45C(4, 0);
|
||||
return actor_draw(marker, gfx, mtx, vtx);
|
||||
}
|
||||
|
Reference in New Issue
Block a user