Merge branch 'mr-origin-86'

This commit is contained in:
banjo.decomp
2024-10-08 01:58:19 -05:00
34 changed files with 568 additions and 508 deletions

View File

@@ -1736,6 +1736,8 @@ enum actor_e
ACTOR_E_BULL_INTRO,
ACTOR_F_CHIMPY = 0xF,
ACTOR_10E_BLUBBER_SHIP_TOP_HATCH = 0x10e,
ACTOR_11_JUJU_CTRL = 0x11,
ACTOR_12_BEEHIVE,
//ACTOR_13_SINKING_BOBBER
@@ -1914,6 +1916,10 @@ enum actor_e
ACTOR_146_GV_KAZOOIE_TARGET,
ACTOR_147_ANCIENT_ONE,
ACTOR_149_TTC_BLUBBER_UNKNOWN = 0x149,
ACTOR_14A_TTC_BLUBBER_UNKNOWN = 0x14a,
ACTOR_14B_TTC_BLUBBER_UNKNOWN = 0x14b,
ACTOR_14E_BGS_ELEVATED_WALKWAY_SWITCH = 0x14E,
ACTOR_14F_DESTROYED_JIGGY,
@@ -2071,6 +2077,11 @@ enum actor_e
ACTOR_2DB_DINGPOT = 0x2DB,
ACTOR_2DF_LIGHTHOUSE_B = 0x2DF,
ACTOR_2E0_TTC_STAIRS_1,
ACTOR_2E1_TTC_STAIRS_2,
ACTOR_2E2_LIGHTHOUSE_A,
ACTOR_2E5_DOOR_OF_GRUNTY = 0x2e5,
ACTOR_30D_BOOM_BOX_FAST = 0x30D,
@@ -2404,6 +2415,18 @@ enum mm_specific_flags {
MM_SPECIFIC_FLAG_A_UNKNOWN
};
enum ttc_specific_flags {
TTC_SPECIFIC_FLAG_0_BLUBBER_UNKNOWN,
TTC_SPECIFIC_FLAG_1_UNKNOWN, // something related to the sand castle
TTC_SPECIFIC_FLAG_2_BLUBBER_JIGGY_SPAWNED_TEXT_SHOWN,
TTC_SPECIFIC_FLAG_3_BLUBBER_SHOW_JIGGY_SPAWNED_TEXT_FLAG,
// unused
TTC_SPECIFIC_FLAG_5_CLAM_FIRST_MEET_TEXT_SHOWN = 0x5,
// unused
TTC_SPECIFIC_FLAG_7_NIPPER_FIRST_MEET_TEXT_SHOWN = 0x7
};
enum item_e
{
ITEM_0_HOURGLASS_TIMER = 0x0,
@@ -2856,7 +2879,7 @@ enum asset_e
ASSET_236_ANIM_BSPUMPKIN_REBOUND = 0x236,
ASSET_238_ANIM_LOGGO_IDLE = 0x238,
ASSET_239_ANIM_LEAKY_IDLE = 0x239,
ASSET_240_ANIM_LOGGO_FLUSH = 0x240,
ASSET_242_ANIM_GOBI_RELAXING = 0x242,
@@ -3110,16 +3133,16 @@ enum asset_e
// 3b3 Mumbo's Hut
// Unused
// Unused
// 3b6 TTC Stairs 1
// 3b7 TTC Stairs 2
ASSET_3B6_MODEL_TTC_STAIRS_1 = 0x3B6,
ASSET_3B7_MODEL_TTC_STAIRS_1,
// Unused
// Unused
// Unused
ASSET_3BB_MODEL_JINJO_YELLOW = 0x3BB,
ASSET_3BC_MODEL_JINJO_ORANGE,
// 3bd TTC Lighthouse A
// 3be TTC Lighthouse B
ASSET_3BF_MODEL_PLAYER_SHADOW = 0x3BF,
ASSET_3BD_MODEL_LIGHTHOUSE_A,
ASSET_3BE_MODEL_LIGHTHOUSE_B,
ASSET_3BF_MODEL_PLAYER_SHADOW,
ASSET_3C0_MODEL_JINJO_BLUE,
ASSET_3C1_MODEL_JINJO_PINK,
ASSET_3C2_MODEL_JINJO_GREEN,
@@ -3138,7 +3161,7 @@ enum asset_e
// 3cf MMM Cellar Hatch
// 3d0 MMM Locked Gate (Lock On Left)
// 3d1 MMM Locked Gate (Lock On Right) 1
// 3d2 TTC Blubber's Ship Top Hatch
ASSET_3D2_MODEL_BLUBBER_SHIP_TOP_HATCH = 0x3d2,
// 3d3 MMM Church Door
// 3d4 Lockup
ASSET_3D4_MODEL_LOCKUP = 0x3d4,
@@ -4080,17 +4103,24 @@ enum asset_e
ASSET_896_MODEL_GOLD_ROCK = 0x896,
ASSET_89D_ZOOMBOX_SPRITE = 0x89d,
ASSET_89D_ZOOMBOX_SPRITE = 0x89D,
ASSET_8A0_SPRITE_WATER_DROP = 0x8a0,
ASSET_8A0_SPRITE_WATER_DROP = 0x8A0,
ASSET_A0B_TEXT_UNKNOWN = 0xA0B,
ASSET_A0C_TEXT_UNKNOWN = 0xA0C,
ASSET_A0D_TEXT_UNKNOWN = 0xA0D,
ASSET_A0B_TEXT_BLUBBER_FIRST_MEET = 0xA0B,
ASSET_A0C_TEXT_BLUBBER_HALF_GOLD,
ASSET_A0D_TEXT_BLUBBER_COMPLETE,
ASSET_A0E_TEXT_NIPPER_SPAWNED,
ASSET_A14_TEXT_UNKNOWN = 0xA14,
ASSET_A10_TEXT_TTC_NIPPER_HURT = 0xa10,
ASSET_A17_TEXT_BURIED_TREASURE_SPAWNED = 0xa17,
ASSET_A14_TEXT_CLAM_TAUNT = 0xA14,
ASSET_A15_TEXT_TTC_LOCKUP_SPAWNED,
ASSET_A17_TEXT_BURIED_TREASURE_SPAWNED = 0xA17,
ASSET_A18_TEXT_TREASUREHUNT_FOLLOW_CLUES,
ASSET_A19_TEXT_TREASUREHUNT_SECOND_STEP,
ASSET_A1A_TEXT_LEAKY_FIRST_MEET,
ASSET_A1F_DIALOG_SHOCKJUMP_LEARN = VER_SELECT(0xa1f, 0x91f, 0, 0),
ASSET_A20_DIALOG_FLY_LEARN,
@@ -4103,7 +4133,7 @@ enum asset_e
ASSET_A27_TEXT_BOTTLES_ALL_TTC_MOVES_LEARNED,
ASSET_A28_TEXT_LEAKY_DONE,
ASSET_A2A_TEXT_UNKNOWN = 0xA2A,
ASSET_A2A_BLUBBER_COMPLETE_JIGGY_COLLECTED = 0xA2A,
ASSET_A6F_TEXT_CHARMER_MEET = 0xA6F,
ASSET_A70_TEXT_CHARMER_HELPED,
@@ -4668,6 +4698,8 @@ enum marker_e{
MARKER_99_TEEHEE = 0x99,
MARKER_A1_BLUBBER_SHIP_TOP_HATCH = 0xa1,
MARKER_A3_BLUBBER = 0xA3,
MARKER_A4_LOCKUP_SLOW,
MARKER_A5_NIPPER,
@@ -4773,6 +4805,7 @@ enum marker_e{
MARKER_169_SNS_EGG,
MARKER_16B_SNIPPET_UPSIDEDOWN = 0x16B,
MARKER_16C_NIPPER,
MARKER_173_CHUMP_FISH_2 = 0x173,
MARKER_174_GAME_OVER = 0x174,
@@ -4905,6 +4938,11 @@ enum marker_e{
MARKER_261_FIGHT_FLIGHT_PAD = 0x261,
MARKER_267_LIGHTHOUSE_A = 0x267,
MARKER_268_STAIRS_1,
MARKER_269_STAIRS_2,
MARKER_26A_LIGHTHOUSE_B,
MARKER_276_STONE_JINJO = 0x276,
MARKER_27A_JINJO_STATUE_BASE = 0x27A,

View File

@@ -450,7 +450,7 @@ void func_80352CF4(f32 *, f32 *, f32, f32);
AnimCtrl *baanim_getAnimCtrlPtr(void);
void player_setYPosition(f32);
NodeProp *func_80304C38(enum actor_e arg0, Actor *arg1);
NodeProp *nodeprop_findByActorIdAndActorPosition(enum actor_e arg0, Actor *arg1);
NodeProp *func_80304CAC(s32 arg0, f32 position[3]);
Actor *actorArray_findClosestActorFromActorId(f32 position[3], enum actor_e actor_id, s32 arg2, f32 *min_distance_ptr);
Actor *subaddie_getLinkedActor(Actor *);

View File

@@ -165,7 +165,7 @@ typedef struct actor_s{
u32 is_bundle:1;
AnimCtrl *animctrl;
ActorAnimationInfo *unk18;
TUPLE(f32, unk1C);
TUPLE(f32, unk1C); // actor position?
f32 actor_specific_1_f; //used in cheggs
TUPLE(f32, velocity);
u32 unk38_31:10; // hit count for jinjo base in fight

View File

@@ -1,6 +1,6 @@
sm_func_80386810 = 0x80386810;
mm_func_803888B0 = 0x803888B0;
ttc_func_80388AC0 = 0x80388AC0;
TTC_resetSpawnableActors = 0x80388AC0;
ttc_func_8038BF8C = 0x8038BF8C;
cc_func_803870E0 = 0x803870E0;
cc_func_80387DA0 = 0x80387DA0;

View File

@@ -260,7 +260,7 @@ func_802F9FD0 = 0x802fa1b0;
func_802FA060 = 0x802fa240;
func_802FADD4 = 0x802fafb4;
cubeList_findNodePropByActorId = 0x80304b6c;
func_80304C38 = 0x80304dd8;
nodeprop_findByActorIdAndActorPosition = 0x80304dd8;
func_80304CAC = 0x80304e4c;
nodeprop_getPosition_s32 = 0x80304eec;
nodeprop_getPosition = 0x80304f08;

View File

@@ -100,7 +100,7 @@ void func_8038F6A4(Actor *this)
NodeProp *temp_v0;
if (!this->initialized)
{
temp_v0 = func_80304C38(ACTOR_32B_UNKNOWN, this);
temp_v0 = nodeprop_findByActorIdAndActorPosition(ACTOR_32B_UNKNOWN, this);
if (temp_v0 == 0)
{
local->unk18[0] = 3672.0f;

View File

@@ -211,7 +211,7 @@ void func_80391744(Actor *this, Actor* other){
void *sp24;
f32 tmp_f0;
sp24 = func_80304C38(0x22A, this);
sp24 = nodeprop_findByActorIdAndActorPosition(0x22A, this);
tmp_f0 = (f32)func_80304DA8(sp24);
other->yaw = tmp_f0;
this->yaw = tmp_f0;

View File

@@ -221,7 +221,7 @@ void func_803876D0(Actor *this){
this->initialized = TRUE;
this->velocity_x = 0.0f;
this->actor_specific_1_f = 0.0f;
node_prop = func_80304C38(0x150, this);
node_prop = nodeprop_findByActorIdAndActorPosition(0x150, this);
((ActorLocal_Conga *)&this->local)->unk1C = nodeprop_getRadius(node_prop);
nodeprop_getPosition_s32(node_prop, &((ActorLocal_Conga *)&this->local)->unk10);
}

View File

@@ -409,7 +409,7 @@ void chsmmole_Update(Actor * this){
this->initialized = TRUE;
marker_setFreeMethod(this->marker, func_80389984);
if(this->unkF4_8 == 1 || this->unkF4_8 == 8){//L80389A30
sp40 = func_80304C38(0x349, this);
sp40 = nodeprop_findByActorIdAndActorPosition(0x349, this);
if(!sp40){
this->unk1C_x = this->position_x;
this->unk1C_y = this->position_y;

View File

@@ -28,7 +28,7 @@ void func_8038A8F8(Actor *this){
NodeProp *other;
if(!this->volatile_initialized){
other = func_80304C38(0x3be, this);
other = nodeprop_findByActorIdAndActorPosition(0x3be, this);
if(!other){
this->unk1C_x = this->position_x;
this->unk1C_y = this->position_y;

View File

@@ -2,26 +2,34 @@
#include "functions.h"
#include "variables.h"
extern void func_8028E668(f32[3], f32, f32, f32);
extern void func_8028E668(f32 arg0[3], f32 arg1, f32 arg2, f32 arg3);
extern void func_8028FA34(s32, Actor*);
extern s32 func_802E0970(s32, f32, f32, f32, s32, s32, f32[3]);
typedef struct {
u8 unk0[0xE];
s16 unkE;
u8 unk0[0xE]; // unused?
s16 unkE; // some sort of index
f32 throw_target_position[3];
s32 throw_target_radius;
NodeProp* unk20;
s32 unk24;
}ActorLocal_Blubber;
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);
static void __chBlubber_updateFunc(Actor *this);
static void __chBlubber_update2Func(Actor *this);
static Actor *__chBlubber_drawFunc(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx);
enum ch_blubber_states_e {
CH_BLUBBER_STATE_1_UNKNOWN = 1, // initial state (80387A84)
CH_BLUBBER_STATE_2_UNKNOWN = 2, // 80387B10
CH_BLUBBER_STATE_3_UNKNOWN = 3,
CH_BLUBBER_STATE_4_UNKNOWN = 4, // 80387C04
CH_BLUBBER_STATE_5_UNKNOWN = 5 // 80387CD4
};
/* .data */
ActorAnimationInfo D_8038C4E0[] = {
{0x00, 0.0f},
ActorAnimationInfo gChBlubberAnimations[6] = {
{NULL, NULL},
{ASSET_B5_ANIM_BLUBBER_WALK, 2.0f},
{ASSET_B6_ANIM_BLUBBER_CRY, 2.0f},
{ASSET_B6_ANIM_BLUBBER_CRY, 2.0f},
@@ -29,78 +37,77 @@ ActorAnimationInfo D_8038C4E0[] = {
{ASSET_B8_ANIM_BLUBBER_RUN, 0.8f}
};
ActorInfo TTC_D_8038C510 = {
ActorInfo gChBlubber = {
MARKER_A3_BLUBBER, ACTOR_115_BLUBBER, ASSET_370_MODEL_BLUBBER,
0x1, D_8038C4E0,
func_803878CC, TTC_func_80387CF4, func_80387D6C,
0x1, gChBlubberAnimations,
__chBlubber_updateFunc, __chBlubber_update2Func, __chBlubber_drawFunc,
0, 0x399, 1.8f, 0
};
/* .code */
void func_80387490(Actor *this){
static void __chBlubber_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){
static void __chBlubber_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_TEXT_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, CH_BLUBBER_STATE_2_UNKNOWN, 0, 1);
}
}
void func_80387574(ActorMarker *caller, enum asset_e text_id, s32 arg1){
static void __chBlubber_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){
static void __chBlubber_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, CH_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_SPECIFIC_FLAG_2_BLUBBER_JIGGY_SPAWNED_TEXT_SHOWN)) {
text_id = jiggyscore_isCollected(JIGGY_14_TTC_BLUBBER) ? ASSET_A2A_BLUBBER_COMPLETE_JIGGY_COLLECTED : ASSET_A0D_TEXT_BLUBBER_COMPLETE;
gcdialog_showText(text_id, 0xf, this->position, this->marker, __chBlubber_showTextCallback, __chBlubber_showTextCallback2);
mapSpecificFlags_set(TTC_SPECIFIC_FLAG_2_BLUBBER_JIGGY_SPAWNED_TEXT_SHOWN, TRUE);
}
}
void func_80387678(Actor *this){
if( !mapSpecificFlags_get(1) ) return;
if( mapSpecificFlags_get(3) ) return;
static void __chBlubber_checkJiggySpawnedTextAndAdvanceState(Actor *this){
if( !mapSpecificFlags_get(TTC_SPECIFIC_FLAG_1_UNKNOWN) ) return;
if( mapSpecificFlags_get(TTC_SPECIFIC_FLAG_3_BLUBBER_SHOW_JIGGY_SPAWNED_TEXT_FLAG) ) return;
this->yaw_ideal = (f32) func_80329784(this);
mapSpecificFlags_set(3, TRUE);
mapSpecificFlags_set(TTC_SPECIFIC_FLAG_3_BLUBBER_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)__chBlubber_showJiggySpawnedText, (s32)this->marker);
subaddie_set_state_with_direction(this, CH_BLUBBER_STATE_1_UNKNOWN, 0.0f, 1);
}
void func_8038771C(Actor *this){
static void __func_8038771C(Actor *this){
if( !func_80329030(this, 0)
&& func_80329480(this)
){
@@ -108,39 +115,40 @@ void func_8038771C(Actor *this){
}
}
void func_80387774(Actor **this_ptr){
// probably something related to blubber throwing the bullions
static void __func_80387774(Actor **this_ptr){
ActorLocal_Blubber *local = (ActorLocal_Blubber *)&(*this_ptr)->local;
player_setCarryObjectPoseInCylinder(local->throw_target_position, local->throw_target_radius, 100.0f, ACTOR_2A_GOLD_BULLION, 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_SPECIFIC_FLAG_0_BLUBBER_UNKNOWN) ? ACTOR_149_TTC_BLUBBER_UNKNOWN : ACTOR_14A_TTC_BLUBBER_UNKNOWN, *this_ptr);
(*this_ptr)->has_met_before = TRUE;
}
}
void func_80387830(Actor *this , f32 arg1, f32 arg2){
static 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){
static void __chBlubber_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_SPECIFIC_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 == CH_BLUBBER_STATE_3_UNKNOWN){
subaddie_set_state_with_direction(this, CH_BLUBBER_STATE_2_UNKNOWN, 0.0f, 1);
}
this->volatile_initialized = TRUE;
}//L80387970
@@ -149,44 +157,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_TEXT_BLUBBER_FIRST_MEET, 0xe, this->position, this->marker, __chBlubber_showTextCallback, NULL);
this->has_met_before = TRUE;
subaddie_set_state_forward(this, 3);
subaddie_set_state_forward(this, CH_BLUBBER_STATE_3_UNKNOWN);
}
if( mapSpecificFlags_get(0)
if( mapSpecificFlags_get(TTC_SPECIFIC_FLAG_0_BLUBBER_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_TEXT_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 CH_BLUBBER_STATE_1_UNKNOWN:
if(!this->initialized){
actor_collisionOff(this);
func_80387490(this);
__chBlubber_initiliaze(this);
}
func_80387774(&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, CH_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);
__func_8038771C(this);
__func_80387830(this, 0.14f, 0.68f);
__chBlubber_checkJiggySpawnedTextAndAdvanceState(this);
break;
case 2:// 80387B10
func_80387774(&this);
case CH_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, CH_BLUBBER_STATE_1_UNKNOWN, 0.0f, 1, 0.78f)
){
this->actor_specific_1_f = 4.0f;
break;
@@ -204,18 +211,18 @@ void func_803878CC(Actor * this){
FUNC_8030E8B4(SFX_83_BLUBBER_CRYING, 0.91f, 17000, this->position, 1250, 2500);
}
func_80387678(this);
__chBlubber_checkJiggySpawnedTextAndAdvanceState(this);
break;
case 3:
case CH_BLUBBER_STATE_3_UNKNOWN:
break;
case 4:// 80387C04
case CH_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, CH_BLUBBER_STATE_5_UNKNOWN);
this->actor_specific_1_f = 8.0f;
}
}
@@ -231,24 +238,24 @@ void func_803878CC(Actor * this){
}
break;
case 5:// 80387CD4
case CH_BLUBBER_STATE_5_UNKNOWN:
local = (ActorLocal_Blubber*)&this->local;
func_8032A95C(this, local->unkE, 0x21c);
break;
}
}
void TTC_func_80387CF4(Actor *this){
static void __chBlubber_update2Func(Actor *this){
func_80343DEC(this);
if(0.99 <= this->unk48){
func_8028F918(0);
timed_exitStaticCamera(0.0f);
marker_despawn(this->marker);
}
func_80387830(this, 0.5f, 0.97f);
__func_80387830(this, 0.5f, 0.97f);
}
Actor *func_80387D6C(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx){
static Actor *__chBlubber_drawFunc(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx){
func_8033A45C(4, 0);
return actor_draw(marker, gfx, mtx, vtx);
}

View File

@@ -6,41 +6,41 @@ extern Actor *spawnQueue_bundle_f32(s32, s32, s32, s32);
extern f32 func_80257204(f32, f32, f32, f32);
extern ActorProp * func_80320EB0(ActorMarker *, f32, s32);
void chClam_update(Actor *this);
static void __chClam_updateFunc(Actor *this);
/* .data */
ActorAnimationInfo chClamAnimations[] = {
{0x00, 0.0f},
ActorAnimationInfo gChClamAnimations[4] = {
{NULL, NULL},
{ASSET_AA_ANIM_CLAM_IDLE, 2.0f},
{ASSET_24_ANIM_CLAM_HOP, 1.0f},
{ASSET_AB_ANIM_CLAM_EAT, 0.6f}
};
ActorInfo chClam = {
ActorInfo gChClam = {
MARKER_15_CLAM, ACTOR_69_CLAM, ASSET_351_MODEL_CLAM,
0x1, chClamAnimations,
chClam_update, actor_update_func_80326224, actor_draw,
0x1, gChClamAnimations,
__chClam_updateFunc, actor_update_func_80326224, actor_draw,
4500, 0x366, 1.6f, 0
};
/* .code */
void __chClam_func_803863F0(enum sfx_e sfx_id, f32 arg1, s32 arg2, f32 position[3], f32 arg4, f32 arg5){
static void __chClam_playSfx(enum sfx_e sfx_id, f32 volume, s32 sampleRate, f32 position[3], f32 minFadeDistance, f32 maxFadeDistance){
if(func_803114B0()){
arg2 -= 10000;
if(arg2 < 0)
arg2 = 0;
sampleRate -= 10000;
if(sampleRate < 0)
sampleRate = 0;
}
func_8030E878(sfx_id, arg1, arg2, position, arg4, arg5);
func_8030E878(sfx_id, volume, sampleRate, position, minFadeDistance, maxFadeDistance);
}
void __chClam_func_80386454(Actor *this){
static void __chClam_func_80386454(Actor *this){
subaddie_set_state_with_direction(this, 1, 0.01f, 1);
actor_loopAnimation(this);
animctrl_setDuration(this->animctrl, randf2(1.9f, 2.1f));
}
bool __chClam_updateTarget(Actor *this, f32 arg1) {
static bool __chClam_updateFuncTarget(Actor *this, f32 arg1) {
f32 egg_dist;
f32 red_feather_dist;
f32 pad;
@@ -84,13 +84,13 @@ bool __chClam_updateTarget(Actor *this, f32 arg1) {
if ((volatileFlag_get(VOLATILE_FLAG_C1_IN_FINAL_CHARACTER_PARADE) ? 0 : 0x11) < this->actor_specific_1_f) {
this->actor_specific_1_f = (volatileFlag_get(VOLATILE_FLAG_C1_IN_FINAL_CHARACTER_PARADE) != 0) ? 0.0f : 17.0f;
} else if (sp38 == 0) {
__chClam_func_803863F0(SFX_AE_YUMYUM_TALKING, randf2(0.9f, 1.0f), 22000, this->position, 500.0f, 2000.0f);
__chClam_playSfx(SFX_AE_YUMYUM_TALKING, randf2(0.9f, 1.0f), 22000, this->position, 500.0f, 2000.0f);
}
return TRUE;
}
bool __chClam_rotateTowardTarget(Actor *this, s32 arg1) {
static bool __chClam_rotateTowardTarget(Actor *this, s32 arg1) {
f32 temp_f0_2;
s32 position;
s32 sp2C;
@@ -100,7 +100,7 @@ bool __chClam_rotateTowardTarget(Actor *this, s32 arg1) {
animctrl_setDuration(this->animctrl, 1.0f);
sp2C = (s32) ((f64) (60.0f / (f32) func_8033DD90()) * 0.5);
if ((this->unk1C[0] != 0.0f) || !__chClam_updateTarget(this, sp2C)) {
if ((this->unk1C[0] != 0.0f) || !__chClam_updateFuncTarget(this, sp2C)) {
if (((f64) animctrl_getAnimTimer(this->animctrl) < 0.1) && ((f64) randf() < 0.5)) {
if (this->unk1C[0] != 0.0f) {
arg1 *= 2;
@@ -132,7 +132,7 @@ bool __chClam_rotateTowardTarget(Actor *this, s32 arg1) {
}
void __chClam_particalEmitterInit(ParticleEmitter *pCtrl, f32 position[3]){
static void __chClam_particalEmitterInit(ParticleEmitter *pCtrl, f32 position[3]){
particleEmitter_setPosition(pCtrl, position);
particleEmitter_func_802EF9F8(pCtrl, 0.7f);
particleEmitter_func_802EFA18(pCtrl, 3);
@@ -144,7 +144,7 @@ void __chClam_particalEmitterInit(ParticleEmitter *pCtrl, f32 position[3]){
particleEmitter_setDrawMode(pCtrl, 2);
}
void __chClam_emitLargeShellParticles(f32 position[3], s32 count){
static void __chClam_emitLargeShellParticles(f32 position[3], s32 count){
static ParticleSettingsVelocityAcceleration D_8038C3F4 = {
{{-50.0f, 750.0f, -50.0f}, {120.0f, 900.0f, 120.0f}},
{{ 0.0f, -1800.0f, 0.0f}, { 0.0f, -1800.0f, 0.0f}}
@@ -160,7 +160,7 @@ void __chClam_emitLargeShellParticles(f32 position[3], s32 count){
particleEmitter_emitN(pCtrl, count);
}
void __chClam_emitEyeParticles(f32 position[3], s32 count){
static void __chClam_emitEyeParticles(f32 position[3], s32 count){
static ParticleSettingsVelocityAcceleration D_8038C424 = {
{{-80.0f, 400.0f, -80.0f}, {160.0f, 860.0f, 160.0f}},
{{ 0.0f, -1400.0f, 0.0f}, { 0.0f, -1400.0f, 0.0f}}
@@ -176,7 +176,7 @@ void __chClam_emitEyeParticles(f32 position[3], s32 count){
particleEmitter_emitN(pCtrl, count);
}
void __chClam_emitSmallShellParticles(f32 position[3], s32 count){
static void __chClam_emitSmallShellParticles(f32 position[3], s32 count){
static ParticleSettingsVelocityAcceleration D_8038C454 = {
{{-200.0f, 850.0f, -200.0f}, {400.0f, 1000.0f, 400.0f}},
{{ 0.0f, -1800.0f, 0.0f}, { 0.0f, -1800.0f, 0.0f}}
@@ -192,7 +192,7 @@ void __chClam_emitSmallShellParticles(f32 position[3], s32 count){
particleEmitter_emitN(pCtrl, count);
}
void __chClam_emitEatencollectibleParticles(f32 position[3], enum asset_e sprite_id, s32 count){
static void __chClam_emitEatencollectibleParticles(f32 position[3], enum asset_e sprite_id, s32 count){
static ParticleScaleAndLifetimeRanges D_8038C484 = {
{0.2f, 0.35f},
{0.0f, 0.0f},
@@ -217,14 +217,14 @@ void __chClam_emitEatencollectibleParticles(f32 position[3], enum asset_e sprite
particleEmitter_emitN(pCtrl, count);
}
void __chClam_takeDamage(ActorMarker *this_marker, ActorMarker *other_marker){
static void __chClam_takeDamage(ActorMarker *this_marker, ActorMarker *other_marker){
Actor *this;
this = marker_getActor(this_marker);
this->marker->collidable = FALSE;
this->unk138_27 = TRUE;
__chClam_func_803863F0(SFX_1D_HITTING_AN_ENEMY_1, 1.0f, 26000, this->position, 1500.0f, 2000.0f);
__chClam_func_803863F0(SFX_115_BUZZBOMB_DEATH, 1.2f, 26000, this->position, 1500.0f, 2000.0f);
__chClam_playSfx(SFX_1D_HITTING_AN_ENEMY_1, 1.0f, 26000, this->position, 1500.0f, 2000.0f);
__chClam_playSfx(SFX_115_BUZZBOMB_DEATH, 1.2f, 26000, this->position, 1500.0f, 2000.0f);
__chClam_emitLargeShellParticles(this->position, 2);
__chClam_emitEyeParticles(this->position, 2);
__chClam_emitSmallShellParticles(this->position, 0xC);
@@ -232,7 +232,7 @@ void __chClam_takeDamage(ActorMarker *this_marker, ActorMarker *other_marker){
marker_despawn(this->marker);
}
void __chClam_playerDropsItem(enum bundle_e bundle_id, enum item_e item_id){
static void __chClam_playerDropsItem(enum bundle_e bundle_id, enum item_e item_id){
f32 position[3];
player_getPosition(position);
@@ -241,12 +241,12 @@ void __chClam_playerDropsItem(enum bundle_e bundle_id, enum item_e item_id){
item_dec(item_id);
}
void __chClam_attackOther(ActorMarker *this_marker, ActorMarker *other_marker){
static void __chClam_attackOther(ActorMarker *this_marker, ActorMarker *other_marker){
if(func_80297C6C() == 3) return;
if( !mapSpecificFlags_get(5) && gcdialog_showText(ASSET_A14_TEXT_UNKNOWN, 0, NULL, NULL, NULL, NULL)){
mapSpecificFlags_set(5, TRUE);
if( !mapSpecificFlags_get(TTC_SPECIFIC_FLAG_5_CLAM_FIRST_MEET_TEXT_SHOWN) && gcdialog_showText(ASSET_A14_TEXT_CLAM_TAUNT, 0, NULL, NULL, NULL, NULL)){
mapSpecificFlags_set(TTC_SPECIFIC_FLAG_5_CLAM_FIRST_MEET_TEXT_SHOWN, TRUE);
}
if (item_getCount(ITEM_D_EGGS) != 0) {
@@ -258,7 +258,7 @@ void __chClam_attackOther(ActorMarker *this_marker, ActorMarker *other_marker){
}
}
void chClam_update(Actor *this){
static void __chClam_updateFunc(Actor *this){
ActorProp *sp4C = func_80320EB0(this->marker, 30.0f, 1);
f32 sp48;
s32 sp44;
@@ -290,8 +290,8 @@ void chClam_update(Actor *this){
animctrl_setDuration(this->animctrl, 0.6f);
marker_despawn(sp4C->marker);
}
}//L80387140
}//L80387144
}
}
switch(this->state){
case 1://L80387170
@@ -299,7 +299,7 @@ void chClam_update(Actor *this){
subaddie_set_state_with_direction(this, 2, 0.01f, 1);
actor_playAnimationOnce(this);
animctrl_setDuration(this->animctrl, 1.0f);
__chClam_func_803863F0(SFX_3F2_UNKNOWN, randf2(1.0f, 1.1f), 22000, this->position, 1500.0f, 2000.0f);
__chClam_playSfx(SFX_3F2_UNKNOWN, randf2(1.0f, 1.1f), 22000, this->position, 1500.0f, 2000.0f);
}
else{
animctrl_setDuration(this->animctrl, 2.0f);
@@ -310,7 +310,7 @@ void chClam_update(Actor *this){
this->position_y += this->velocity_y;
this->velocity_y += -5.0f;
if(actor_animationIsAt(this, 0.63f)){
__chClam_func_803863F0(SFX_80_YUMYUM_CLACK, 1.0f, 20000, this->position, 1500.0f, 2000.0f);
__chClam_playSfx(SFX_80_YUMYUM_CLACK, 1.0f, 20000, this->position, 1500.0f, 2000.0f);
}
if(this->position_y <= sp48){
@@ -337,7 +337,7 @@ void chClam_update(Actor *this){
}
if(actor_animationIsAt(this, 0.8f) && 2.0f == this->velocity_x){
__chClam_func_803863F0(SFX_4B_GULPING, randf2(0.8f, 0.9f), 22000, this->position, 700.0f, 2000.0f);
__chClam_playSfx(SFX_4B_GULPING, randf2(0.8f, 0.9f), 22000, this->position, 700.0f, 2000.0f);
break;
}//L803873C4
@@ -345,7 +345,7 @@ void chClam_update(Actor *this){
if(!this->marker->unk14_21) break;
__chClam_func_803863F0(SFX_4C_LIP_SMACK, 1.0f, 20000, this->position, 500.0f, 2000.0f);
__chClam_playSfx(SFX_4C_LIP_SMACK, 1.0f, 20000, this->position, 500.0f, 2000.0f);
func_8034A174(this->marker->unk44, 5, sp38);
switch(this->unk38_31){

View File

@@ -6,33 +6,33 @@ extern void func_8028E668(f32 [3], f32, f32, f32);
extern void func_8028F9DC(s32);
extern void func_803272D0(f32 arg0[3], f32 arg1, s32 arg2, int (*arg3)(Actor *));
void chLeaky_update(Actor *this);
static void __chLeaky_updateFunc(Actor *this);
/* .data */
ActorAnimationInfo D_8038C700[] = {
{0x000, 0.0f},
{0x239, 2.5f},
{0x239, 2.5f}
ActorAnimationInfo gChLeakyAnimations[3] = {
{NULL, NULL},
{ASSET_239_ANIM_LEAKY_IDLE, 2.5f},
{ASSET_239_ANIM_LEAKY_IDLE, 2.5f}
};
ActorInfo D_8038C718 = {
ActorInfo gChLeaky = {
MARKER_33_LEAKY, ACTOR_1E_LEAKY, ASSET_51A_MODEL_LEAKY,
0x1, D_8038C700,
chLeaky_update, actor_update_func_80326224, actor_draw,
0x1, gChLeakyAnimations,
__chLeaky_updateFunc, actor_update_func_80326224, actor_draw,
0, 0, 0.0f, 0
};
/* .code */
bool TTC_func_80388F70(Actor *this){
static bool __chLeaky_isCurrentModelShrapnel(Actor *this){
return this->modelCacheIndex == ACTOR_56_SHRAPNEL;
}
void func_80388F88(void){
static void __func_80388F88(void){
static f32 D_8038C73C[3] = {2500.0f, 250.0f, 4600.0f};
func_803272D0(D_8038C73C, 2000.0f, 2, TTC_func_80388F70);
func_803272D0(D_8038C73C, 2000.0f, 2, __chLeaky_isCurrentModelShrapnel);
}
void chLeaky_update(Actor *this) {
static void __chLeaky_updateFunc(Actor *this) {
void *temp_v0_2;
func_8028E668(this->position, 100.0f, -20.0f, 100.0f);
@@ -55,21 +55,23 @@ void chLeaky_update(Actor *this) {
this->state = 1;
}
}
if( this->state == 1
&& !this->has_met_before
&& func_80329530(this, 250) && !func_80329530(this, 160)
&& !func_8028ECAC()
&& gcdialog_showText(0xA1A, 0, NULL, NULL, NULL, NULL)
&& gcdialog_showText(ASSET_A1A_TEXT_LEAKY_FIRST_MEET, 0, NULL, NULL, NULL, NULL)
){
this->has_met_before = TRUE;
}
if (func_803114B0() == 0) {
if (actor_animationIsAt(this, 0.83f)) {
func_8030E878(0x109, randf2(0.775f, 0.825f), 22000, this->position, 400.0f, 1000.0f);
func_8030E878(SFX_109_LOGGO_LID_CLAP, randf2(0.775f, 0.825f), 22000, this->position, 400.0f, 1000.0f);
return;
}
if (actor_animationIsAt(this, 0.01f)) {
func_8030E878(0x109, randf2(1.025f, 1.075f), 18000, this->position, 400.0f, 1000.0f);
func_8030E878(SFX_109_LOGGO_LID_CLAP, randf2(1.025f, 1.075f), 18000, this->position, 400.0f, 1000.0f);
return;
}
if( actor_animationIsAt(this, 0.15f)
@@ -77,12 +79,12 @@ void chLeaky_update(Actor *this) {
|| actor_animationIsAt(this, 0.53f)
|| actor_animationIsAt(this, 0.66f)
){
func_8030E878(0x109, randf2(1.225f, 1.275f), 14000, this->position, 400.0f, 1000.0f);
func_8030E878(SFX_109_LOGGO_LID_CLAP, randf2(1.225f, 1.275f), 14000, this->position, 400.0f, 1000.0f);
}
}
}
void __chLeaky_startCutscene(ActorMarker *caller, enum asset_e text_id, s32 arg2){
static void __chLeaky_showDoneText(ActorMarker *caller, enum asset_e text_id, s32 arg2){
Actor *this = marker_getActor(caller);
Struct73s *temp_v0;
subaddie_set_state(this, 2);
@@ -93,7 +95,7 @@ void __chLeaky_startCutscene(ActorMarker *caller, enum asset_e text_id, s32 arg2
func_80324E38(0.0f, 3);
timed_setStaticCameraToNode(0.5f, 7);
timedFunc_set_0(1.0f, func_80388F88);
timedFunc_set_0(1.0f, __func_80388F88);
func_80324E38(2.5f, 0);
timedFunc_set_1(2.5f, func_8028F9DC, 2);
timedFunc_set_3(2.5f, (GenFunction_3)func_802E4078, MAP_A_TTC_SANDCASTLE, 0, 0);
@@ -114,8 +116,8 @@ bool chLeaky_eggCollision(ActorMarker *marker){
return TRUE;
}
levelSpecificFlags_set(LEVEL_FLAG_2_TTC_UNKNOWN, TRUE);
levelSpecificFlags_set(LEVEL_FLAG_5_TTC_UNKNOWN, TRUE);
gcdialog_showText(ASSET_A28_TEXT_LEAKY_DONE, 0x2a, this->position, this->marker, __chLeaky_startCutscene, NULL);
levelSpecificFlags_set(2, TRUE);
levelSpecificFlags_set(5, TRUE);
gcdialog_showText(ASSET_A28_TEXT_LEAKY_DONE, 0x2a, this->position, this->marker, __chLeaky_showDoneText, NULL);
return TRUE;
}

View File

@@ -5,16 +5,24 @@
extern void func_802EE6CC(f32[3], s32[4], s32[4], s32, f32, f32, s32, s32, s32);
typedef struct {
s32 unk0;
s32 unk4;
}ActorLocal_Lockup;
s32 closed_ticks_counter;
s32 open_ticks_counter;
} ActorLocal_Lockup;
Actor *func_803894C0(ActorMarker *this, Gfx **gfx, Mtx **mtx, Vtx **vtx);
void func_80389600(Actor *this);
static Actor *__chLockup_drawFunc(ActorMarker *this, Gfx **gfx, Mtx **mtx, Vtx **vtx);
static void __chLockup_updateFunc(Actor *this);
enum ch_lockup_states_e {
CH_LOCKUP_STATE_CLOSED = 1, // L803896F0
CH_LOCKUP_STATE_OPENING = 2, // L803897DC
CH_LOCKUP_STATE_OPEN = 3, // L80389864
CH_LOCKUP_STATE_CLOSING = 4, // L803898F4
CH_LOCKUP_STATE_CLOSING2 = 5 // L803898F4
};
/* .data */
ActorAnimationInfo D_8038C760[] ={
{0, 0.0f},
ActorAnimationInfo gChLockupAnimations[6] ={
{NULL, NULL},
{ASSET_BC_ANIM_LOCKUP, 8000000.0f},
{ASSET_BC_ANIM_LOCKUP, 4.0f},
{ASSET_BC_ANIM_LOCKUP, 8000000.0f},
@@ -22,55 +30,53 @@ ActorAnimationInfo D_8038C760[] ={
{ASSET_BC_ANIM_LOCKUP, 8000000.0f}
};
ActorInfo D_8038C790 = {
ActorInfo gChLockupSlow = {
MARKER_A4_LOCKUP_SLOW, ACTOR_151_LOCKUP_SLOW, ASSET_3D4_MODEL_LOCKUP,
1, D_8038C760,
func_80389600, actor_update_func_80326224, func_803894C0,
1, gChLockupAnimations,
__chLockup_updateFunc, actor_update_func_80326224, __chLockup_drawFunc,
2500, 0x366, 0.0f, 0
};
ActorInfo D_8038C7B4 = {
ActorInfo gChLockupMedium = {
MARKER_F6_LOCKUP_MEDIUM, ACTOR_152_LOCKUP_MEDIUM, ASSET_3D4_MODEL_LOCKUP,
1, D_8038C760,
func_80389600, actor_update_func_80326224, func_803894C0,
1, gChLockupAnimations,
__chLockup_updateFunc, actor_update_func_80326224, __chLockup_drawFunc,
2500, 0x366, 0.0f, 0
};
ActorInfo D_8038C7D8 = {
ActorInfo gChLockupFast = {
MARKER_F7_LOCKUP_FAST, ACTOR_153_LOCKUP_FAST, ASSET_3D4_MODEL_LOCKUP,
1, D_8038C760,
func_80389600, actor_update_func_80326224, func_803894C0,
1, gChLockupAnimations,
__chLockup_updateFunc, actor_update_func_80326224, __chLockup_drawFunc,
2500, 0x366, 0.0f, 0
};
s32 D_8038C7FC[4] = {120, 120, 120, 120};
s32 D_8038C80C[4] = {0,0,0,0};
static s32 sLockup_CloseColor[4] = {120, 120, 120, 120};
static s32 sLockup_CloseVelocity[3] = {0,0,0};
/* .code */
Actor *func_803894C0(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx){
static Actor *__chLockup_drawFunc(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx){
Actor * actor = marker_getActor(marker);
func_8033A45C(3, actor->unk38_31);
func_8033A45C(4, actor->unk38_31);
actor_draw(marker, gfx, mtx, vtx);
}
void TTC_func_80389530(Actor *this){
subaddie_set_state_with_direction(this, 1, 0.2f, 1);
static void __chLockup_close(Actor *this){
subaddie_set_state_with_direction(this, CH_LOCKUP_STATE_CLOSED, 0.2f, 1);
this->marker->collidable = FALSE;
this->unk38_31 = 0;
FUNC_8030E8B4(SFX_6C_LOCKUP_CLOSING, 1.0f, 32000, this->position, 1250, 2500);
}
void func_8038959C(Actor *this){
static void __chLockup_open(Actor *this){
func_80389468();
subaddie_set_state_with_direction(this, 2, 0.2f, 1);
subaddie_set_state_with_direction(this, CH_LOCKUP_STATE_OPENING, 0.2f, 1);
this->unk38_31 = 1;
FUNC_8030E8B4(SFX_6B_LOCKUP_OPENING, 1.0f, 32000, this->position, 1250, 2500);
}
void func_80389600(Actor *this){
static void __chLockup_updateFunc(Actor *this){
ActorLocal_Lockup *local = (ActorLocal_Lockup *)&this->local;
s32 tmp_v1;
int i;
@@ -81,25 +87,25 @@ void func_80389600(Actor *this){
&& func_80329530(this, 320)
&& !func_80329530(this, 160)
&& !func_8028ECAC()
&& gcdialog_showText(0xA15, 0, NULL, NULL, NULL, NULL)
&& gcdialog_showText(ASSET_A15_TEXT_TTC_LOCKUP_SPAWNED, 0, NULL, NULL, NULL, NULL)
){
this->has_met_before = TRUE;
}//L803896AC
}
if(!this->volatile_initialized){
this->volatile_initialized = TRUE;
}
switch(this->state){
case 1: //L803896F0
case CH_LOCKUP_STATE_CLOSED:
if(!this->initialized){
this->marker->propPtr->unk8_3 = TRUE;
subaddie_set_state_with_direction(this, 1, 0.2f, 1);
subaddie_set_state_with_direction(this, CH_LOCKUP_STATE_CLOSED, 0.2f, 1);
this->marker->collidable = FALSE;
this->unk38_31 = 0;
this->initialized = TRUE;
}//L80389758
local->unk0++;
}
local->closed_ticks_counter++;
tmp_v1 = (this->modelCacheIndex == ACTOR_151_LOCKUP_SLOW) ? 0x1E :
(this->modelCacheIndex == ACTOR_152_LOCKUP_MEDIUM) ? 0x14 :
@@ -107,47 +113,47 @@ void func_80389600(Actor *this){
10000;
if(!(local->unk0 < tmp_v1)){
local->unk0 = 0;
func_8038959C(this);
if(!(local->closed_ticks_counter < tmp_v1)){
local->closed_ticks_counter = 0;
__chLockup_open(this);
}
break;
case 2: //L803897DC
case CH_LOCKUP_STATE_OPENING:
if(subaddie_playerIsWithinSphere(this, 400) && func_8028FB48(0x8000000)){
func_8028F428(0xA, this->marker);
}
if(actor_animationIsAt(this, 0.5f)){
subaddie_set_state_with_direction(this, 3, 0.5f, 1);
subaddie_set_state_with_direction(this, CH_LOCKUP_STATE_OPEN, 0.5f, 1);
}
if(0.15 < animctrl_getAnimTimer(this->animctrl)){
this->marker->collidable = TRUE;
}
break;
case 3: //L80389864
local->unk4++;
case CH_LOCKUP_STATE_OPEN:
local->open_ticks_counter++;
tmp_v1 = (this->modelCacheIndex == ACTOR_151_LOCKUP_SLOW) ? 0x1E :
(this->modelCacheIndex == ACTOR_152_LOCKUP_MEDIUM) ? 0x14 :
(this->modelCacheIndex == ACTOR_153_LOCKUP_FAST) ? 0xA :
10000;
if(!(local->unk4 < tmp_v1)){
local->unk4 = 0;
subaddie_set_state_with_direction(this, 4, 0.5f, 1);
if(!(local->open_ticks_counter < tmp_v1)){
local->open_ticks_counter = 0;
subaddie_set_state_with_direction(this, CH_LOCKUP_STATE_CLOSING, 0.5f, 1);
}
break;
case 4: //L803898F4
case 5: //L803898F4
case CH_LOCKUP_STATE_CLOSING:
case CH_LOCKUP_STATE_CLOSING2:
if(this->marker->unk14_21 && actor_animationIsAt(this, 0.99f)){
TTC_func_80389530(this);
__chLockup_close(this);
for(i = 5; i < 0xe; i++){
func_8034A174(this->marker->unk44, i, this->unk1C);
func_802EE6CC(this->unk1C, D_8038C80C, D_8038C7FC, 1, 0.4f, 50.0f, 0xb4, 0xa0, 0);
func_802EE6CC(this->unk1C, sLockup_CloseVelocity, sLockup_CloseColor, 1, 0.4f, 50.0f, 0xb4, 0xa0, 0);
}
}
break;
}//L8038999C
}
}

View File

@@ -2,33 +2,40 @@
#include "functions.h"
#include "variables.h"
void func_80388434(Actor *this);
Actor *func_80387EB0(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx);
static void __chNipper_updateFunc(Actor *this);
static Actor *__chNipper_animFunc(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx);
enum ch_nipper_states_e {
CH_NIPPER_STATE_1_UNKNOWN = 1, // L80388578
CH_NIPPER_STATE_2_UNKNOWN, // L8038872C
CH_NIPPER_STATE_3_UNKNOWN, // L803887B4
CH_NIPPER_STATE_4_DIEING, // L80388910
CH_NIPPER_STATE_5_SPAWNED, // L80388938
CH_NIPPER_STATE_6_DEAD, // L803889A8
CH_NIPPER_STATE_7_UNKNOWN // already dead? L80388A20
};
/* .data */
ActorAnimationInfo D_8038C540[] = {
{0x00, 0.0f},
ActorAnimationInfo gChNipperAnimations[8] = {
{NULL, NULL},
{ASSET_C0_ANIM_NIPPER_IDLE, 2.0f},
{ASSET_BD_ANIM_NIPPER_VULNERABLE, 1.5f},
{ASSET_BF_ANIM_NIPPER_ATTACK, 1.2f},
{ASSET_BE_ANIM_NIPPER_OW, 1.3f},
{ASSET_C0_ANIM_NIPPER_IDLE, 2.0f},
{ASSET_133_ANIM_NIPPER_DIE, 3.0f},
{0x00, 0.0f}
{NULL, NULL}
};
ActorInfo D_8038C580 = {
ActorInfo gChNipper = {
MARKER_A5_NIPPER, ACTOR_117_NIPPER, ASSET_3D5_MODEL_NIPPER,
0x1, D_8038C540,
func_80388434, actor_update_func_80326224, func_80387EB0,
0x1, gChNipperAnimations,
__chNipper_updateFunc, actor_update_func_80326224, __chNipper_animFunc,
0, 0x299, 10.0f, 0
};
/* .code */
void func_80387DC0(f32 *position, s32 count) {
static void __chNipper_drawParticlesAtPosition(f32 *position, s32 count) {
static s32 D_8038C5A4[3] = {180, 180, 180};
static ParticleScaleAndLifetimeRanges D_8038C5B0 = {
{0.1f, 0.5f},
@@ -57,7 +64,7 @@ void func_80387DC0(f32 *position, s32 count) {
particleEmitter_emitN(pCtrl, count);
}
Actor *func_80387EB0(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx) {
static Actor *__chNipper_animFunc(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx) {
Actor *this;
this = marker_getActor(marker);
@@ -65,43 +72,45 @@ Actor *func_80387EB0(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx) {
return actor_draw(marker, gfx, mtx, vtx);
}
void TTC_func_80387F18(Actor *this) {
subaddie_set_state_looped(this, 3);
static void __chNipper_setAnimationDuration(Actor *this) {
subaddie_set_state_looped(this, CH_NIPPER_STATE_3_UNKNOWN);
this->unk1C[0] = 0.0f;
switch((s32)this->lifetime_value){
case 0x78:
case 120:
animctrl_setDuration(this->animctrl, 1.2f);
break;
case 0x50:
case 80:
animctrl_setDuration(this->animctrl, 1.05f);
break;
case 0x28:
case 40:
animctrl_setDuration(this->animctrl, 0.9f);
break;
}
}
void TTC_func_80387FB0(ActorMarker *caller, enum asset_e text_id, s32 arg2){
static void __chNipper_spawnedShowTextCallback(ActorMarker *caller, enum asset_e text_id, s32 arg2){
Actor *this;
this = marker_getActor(caller);
TTC_func_80387F18(this);
__chNipper_setAnimationDuration(this);
ncStaticCamera_exit();
comusic_8025AB44(COMUSIC_12_TTC_NIPPER, -1, 300);
}
void TTC_func_80387FF4(Actor *this) {
static void __chNipper_playDeathAnimation(Actor *this) {
s32 i;
subaddie_set_state_with_direction(this, 4, 0.01f, 1);
subaddie_set_state_with_direction(this, CH_NIPPER_STATE_4_DIEING, 0.01f, 1);
actor_playAnimationOnce(this);
for(i = 0; i < 3; i ++){
FUNC_8030E8B4(SFX_79_TICKER_DEATH, 0.5f, 17000, this->position, 1500, 3000);
};
}
bool func_80388088(Actor *this){
// if player too far away -> false
// otherwise return whether sp2C is within -35 and 35?
static bool __func_80388088(Actor *this){
f32 sp2C;
f32 sp20[3];
bool out;
@@ -115,11 +124,11 @@ bool func_80388088(Actor *this){
return BOOL(-35.0f < sp2C && sp2C < 35.0f);
}
bool func_8038812C(Actor *this){
return BOOL(func_80329530(this, 1300) && func_80388088(this));
static bool __chNipper_shouldShowActor(Actor *this){
return BOOL(func_80329530(this, 1300) && __func_80388088(this));
}
void func_80388178(ActorMarker *this_marker, ActorMarker *other_marker) {
static void __chNipper_dieFunc(ActorMarker *this_marker, ActorMarker *other_marker) {
Actor *this;
s32 i;
@@ -127,33 +136,33 @@ void func_80388178(ActorMarker *this_marker, ActorMarker *other_marker) {
func_8032B4DC(this, other_marker, 7);
if (this->lifetime_value == 40.0f) {
subaddie_set_state_with_direction(this, 6, 0.01f, 1);
subaddie_set_state_with_direction(this, CH_NIPPER_STATE_6_DEAD, 0.01f, 1);
actor_playAnimationOnce(this);
for(i = 0; i < 3; i++){
FUNC_8030E8B4(SFX_78_EAGLECRY, 0.7f, 20000, this->position, 1500, 3000);
};
comusic_8025AB44(COMUSIC_12_TTC_NIPPER, 0, 300);
func_8025AABC(0x12);
func_8025AABC(COMUSIC_12_TTC_NIPPER);
func_8032BB88(this, -1, 300);
func_802BAFE4(0x1C);
return;
}
if (this->lifetime_value == 80.0f) {
TTC_func_80387FF4(this);
__chNipper_playDeathAnimation(this);
this->lifetime_value = 40.0f;
return;
}
TTC_func_80387FF4(this);
__chNipper_playDeathAnimation(this);
this->lifetime_value = 80.0f;
gcdialog_showText(0xA10, 4, NULL, NULL, NULL, NULL);
gcdialog_showText(ASSET_A10_TEXT_TTC_NIPPER_HURT, 4, NULL, NULL, NULL, NULL);
return;
}
bool func_803882E4(ActorMarker * this_marker, ActorMarker * other_marker){
static bool __chNipper_determineMarkerId(ActorMarker * this_marker, ActorMarker * other_marker){
if(this_marker->unk40_31 == 1){
this_marker->id = 0x16C;
this_marker->id = MARKER_16C_NIPPER;
}
else{
this_marker->id = MARKER_A5_NIPPER;
@@ -161,21 +170,21 @@ bool func_803882E4(ActorMarker * this_marker, ActorMarker * other_marker){
return TRUE;
}
void func_80388344(ActorMarker * this_marker, ActorMarker *other_marker){
static void __chNipper_ow2Func(ActorMarker * this_marker, ActorMarker *other_marker){
Actor *this;
if(other_marker->id == 1){
this = marker_getActor(this_marker);
if( !mapSpecificFlags_get(7)
if( !mapSpecificFlags_get(TTC_SPECIFIC_FLAG_7_NIPPER_FIRST_MEET_TEXT_SHOWN)
&& this->has_met_before
&& gcdialog_showText(0xa0f, 0, NULL, NULL, NULL, NULL)
){
mapSpecificFlags_set(7, TRUE);
mapSpecificFlags_set(TTC_SPECIFIC_FLAG_7_NIPPER_FIRST_MEET_TEXT_SHOWN, TRUE);
}
}
}
void func_803883C8(ActorMarker * this_marker, ActorMarker *other_marker){
static void __chNipper_owFunc(ActorMarker * this_marker, ActorMarker *other_marker){
Actor *this = marker_getActor(this_marker);
if( !this->unk138_23
&& this->has_met_before
@@ -185,68 +194,67 @@ void func_803883C8(ActorMarker * this_marker, ActorMarker *other_marker){
}
}
void func_80388434(Actor *this){
f32 sp4C[3];
static void __chNipper_updateFunc(Actor *this){
f32 particlePosition[3];
s32 sp48;
s32 sp44;
f32 sp38[3];
s32 xVelocity;
f32 playerPosition[3];
s32 temp_v0;
player_getPosition(sp38);
sp44 = func_80309D58(sp38, 1);
player_getPosition(playerPosition);
xVelocity = func_80309D58(playerPosition, 1);
if(!this->volatile_initialized){
this->volatile_initialized = TRUE;
this->velocity_x = sp44;
this->velocity_x = xVelocity;
func_8032BC18(this);
}
if(this->state != 7){
// sp30 = sp44;
if(0.0f == this->velocity_x && sp44){
if(this->state != CH_NIPPER_STATE_7_UNKNOWN){
if(0.0f == this->velocity_x && xVelocity){
comusic_8025AB44(COMUSIC_12_TTC_NIPPER, -1, 5000);
func_8032BB88(this, 0, 4000);
func_8024BD08(0);
}
else if(!sp44 && 0.0f != this->velocity_x){
else if(!xVelocity && 0.0f != this->velocity_x){
comusic_8025AB44(COMUSIC_12_TTC_NIPPER, 0, 300);
func_8025AABC(COMUSIC_12_TTC_NIPPER);
func_8032BB88(this, -1, 300);
func_8024BD08(1);
}
this->velocity_x = sp44;
}//L80388554
this->velocity_x = xVelocity;
}
switch(this->state){
case 1:// L80388578
case CH_NIPPER_STATE_1_UNKNOWN:
if(!this->initialized){
animctrl_setTransitionDuration(this->animctrl, 0.35f);
subaddie_set_state_with_direction(this, 1, 0.01f, 1);
subaddie_set_state_with_direction(this, CH_NIPPER_STATE_1_UNKNOWN, 0.01f, 1);
this->lifetime_value = 120.0f;
this->marker->propPtr->unk8_3 = TRUE;
marker_setCollisionScripts(this->marker, func_803883C8, func_80388344, func_80388178);
func_803300C0(this->marker, func_803882E4);
marker_setCollisionScripts(this->marker, __chNipper_owFunc, __chNipper_ow2Func, __chNipper_dieFunc);
func_803300C0(this->marker, __chNipper_determineMarkerId);
this->initialized = TRUE;
}//L8038860C
if(func_8038812C(this)){
}
if(__chNipper_shouldShowActor(this)){
temp_v0 = func_8028ECAC();
if( !this->has_met_before
&& temp_v0 != 1
&& temp_v0 != 10
){
subaddie_set_state_with_direction(this, 5, 0.01f, 1);
if(gcdialog_showText(0xa0e, 0xf, this->position, this->marker, TTC_func_80387FB0, NULL)){
subaddie_set_state_with_direction(this, CH_NIPPER_STATE_5_SPAWNED, 0.01f, 1);
if(gcdialog_showText(ASSET_A0E_TEXT_NIPPER_SPAWNED, 0xf, this->position, this->marker, __chNipper_spawnedShowTextCallback, NULL)){
this->has_met_before = TRUE;
}
comusic_8025AB44(COMUSIC_12_TTC_NIPPER, 5000, 300);
ncStaticCamera_setToNode(11);
}
else{//L803886B0
TTC_func_80387F18(this);
else{
__chNipper_setAnimationDuration(this);
}
break;
}
//L803886C0
if( actor_animationIsAt(this, 0.2f)
|| actor_animationIsAt(this, 0.2f)
|| actor_animationIsAt(this, 0.6f)
@@ -256,35 +264,35 @@ void func_80388434(Actor *this){
}
break;
case 2:// L8038872C
if(!func_8038812C(this)){
subaddie_set_state_looped(this, 1);
case CH_NIPPER_STATE_2_UNKNOWN:
if(!__chNipper_shouldShowActor(this)){
subaddie_set_state_looped(this, CH_NIPPER_STATE_1_UNKNOWN);
break;
}
if(this->lifetime_value <= this->unk38_31){
TTC_func_80387F18(this);
__chNipper_setAnimationDuration(this);
break;
}
this->unk38_31++;
break;
case 3:// L803887B4
case CH_NIPPER_STATE_3_UNKNOWN:
if(actor_animationIsAt(this, 0.5f) && this->marker->unk14_21){
func_8034A174(this->marker->unk44, 6, sp4C);
func_80387DC0(sp4C, 2);
func_8034A174(this->marker->unk44, 6, particlePosition);
__chNipper_drawParticlesAtPosition(particlePosition, 2);
}
else if(actor_animationIsAt(this, 0.95f) && this->marker->unk14_21){//L80388800
func_8034A174(this->marker->unk44, 5, sp4C);
func_80387DC0(sp4C, 2);
}//L80388848
func_8034A174(this->marker->unk44, 5, particlePosition);
__chNipper_drawParticlesAtPosition(particlePosition, 2);
}
if(actor_animationIsAt(this, 0.99f)){
this->unk1C[0] += 1.0f;
}
if(2.0f <= this->unk1C[0]){
subaddie_set_state_looped(this, 2);
subaddie_set_state_looped(this, CH_NIPPER_STATE_2_UNKNOWN);
this->unk38_31 = 0;
break;
}
@@ -298,13 +306,13 @@ void func_80388434(Actor *this){
}
break;
case 4:// L80388910
case CH_NIPPER_STATE_4_DIEING:
if(actor_animationIsAt(this, 0.99f)){
TTC_func_80387F18(this);
__chNipper_setAnimationDuration(this);
}
break;
case 5:// L80388938
case CH_NIPPER_STATE_5_SPAWNED:
if( actor_animationIsAt(this, 0.2f)
|| actor_animationIsAt(this, 0.2f)
|| actor_animationIsAt(this, 0.6f)
@@ -314,7 +322,7 @@ void func_80388434(Actor *this){
}
break;
case 6:// L803889A8
case CH_NIPPER_STATE_6_DEAD:
this->marker->collidable = FALSE;
if(actor_animationIsAt(this, 0.6f)){
FUNC_8030E8B4(SFX_7C_CHEBOOF, 0.9f, 20000, this->position, 1500, 3000);
@@ -322,18 +330,17 @@ void func_80388434(Actor *this){
}
if(actor_animationIsAt(this, 0.99f)){
subaddie_set_state_with_direction(this, 7, 0.01f, 1);
subaddie_set_state_with_direction(this, CH_NIPPER_STATE_7_UNKNOWN, 0.01f, 1);
}
break;
case 7:// L80388A20
case CH_NIPPER_STATE_7_UNKNOWN:
this->marker->collidable = FALSE;
break;
}//L80388A30
}
}
bool func_80388A44(s16 arg0[3]){
bool chNipper_isInState7(s16 arg0[3]){
f32 sp1C[3];
Actor *nipper;
@@ -342,5 +349,5 @@ bool func_80388A44(s16 arg0[3]){
sp1C[2] = (f32) arg0[2];
nipper = actorArray_findClosestActorFromActorId(sp1C, ACTOR_117_NIPPER, -1, NULL);
return nipper->state == 7;
return nipper->state == CH_NIPPER_STATE_7_UNKNOWN;
}

View File

@@ -2,25 +2,25 @@
#include "functions.h"
#include "variables.h"
void chtreasure_update(Actor *this);
static void __chTreasure_updateFunc(Actor *this);
/* .data */
ActorAnimationInfo gChTreasureAnim[]={
{0, 0.0f},
ActorAnimationInfo gChTreasureAnimations[4] = {
{NULL, NULL},
{ASSET_153_ANIM_BURIED_TREASURE_APPEAR, 2.0f},
{ASSET_166_ANIM_BURIED_TREASURE_BOUNCE, 0.33f},
{0, 0.0}
{NULL, NULL}
};
ActorInfo gChTreasureInfo = {
ActorInfo gChTreasure = {
MARKER_DB_BURIED_TREASURE, ACTOR_F4_BURIED_TREASURE, ASSET_42C_MODEL_BURIED_TREASURE,
1, gChTreasureAnim,
chtreasure_update, actor_update_func_80326224, actor_draw,
1, gChTreasureAnimations,
__chTreasure_updateFunc, actor_update_func_80326224, actor_draw,
0, 0, 1.7f, 0
};
/* .code */
void __chtreasure_die(ActorMarker *marker, ActorMarker *otherMarker){
static void __chTreasure_die(ActorMarker *marker, ActorMarker *otherMarker){
Actor *this = marker_getActor(marker);
__spawnQueue_add_4((GenFunction_4) spawnQueue_actor_f32, 0x4C, reinterpret_cast(s32, this->position[0]), reinterpret_cast(s32, this->position[1]), reinterpret_cast(s32, this->position[2]));
func_802EE278(this, 3, 0xf, 0x3C, 0.2f, 1.2f);
@@ -29,7 +29,7 @@ void __chtreasure_die(ActorMarker *marker, ActorMarker *otherMarker){
marker_despawn(marker);
}
void __chtreasure_updatePosition(Actor *this){
static void __chTreasure_updateFuncPosition(Actor *this){
this->position[0] = this->unk1C[0];\
this->position[1] = this->unk1C[1];\
this->position[2] = this->unk1C[2];
@@ -42,7 +42,7 @@ void __chtreasure_updatePosition(Actor *this){
this->yaw = this->lifetime_value*180.0/M_PI;
}
void chtreasure_update(Actor *this){
static void __chTreasure_updateFunc(Actor *this){
f32 sp3C[3];
s16 sp34[3];
@@ -61,9 +61,9 @@ void chtreasure_update(Actor *this){
this->unk1C[2] = this->position[2];
actor_playAnimationOnce(this);
marker_setCollisionScripts(this->marker, NULL, NULL, __chtreasure_die);
}//L8038C214
__chtreasure_updatePosition(this);
marker_setCollisionScripts(this->marker, NULL, NULL, __chTreasure_die);
}
__chTreasure_updateFuncPosition(this);
func_8034A174(this->marker->unk44, 5, sp3C);
sp34[0] = (s16)sp3C[0];
sp34[1] = (s16)sp3C[1];

View File

@@ -7,15 +7,15 @@ extern void func_8028F45C(s32, f32[3]);
typedef struct {
s32 unk0;
}ActorLocal_TreasureHunt;
} ActorLocal_TreasureHunt;
void TTC_func_80389E90(Actor *this);
Actor *func_8038A0D0(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx);
static void __chTreasurehunt_updateFunc(Actor *this);
static Actor *__chTreasurehunt_animFunc(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx);
extern u32 D_8037DCB4;
extern u32 CH_TREASUREHUNT_PUZZLE_CURRENT_STEP;
/* .data */
f32 D_8038C820[6][3] = {
static f32 sChTreasurehunt_stepPositions[6][3] = {
{2904.0f, 2458.0f, -7351.0f},
{-7007.0f, 2013.0f, 401.0f},
{-3388.0f, 1519.0f, 5939.0f},
@@ -24,40 +24,41 @@ f32 D_8038C820[6][3] = {
{7667.0f, 717.0f, 1676.0f}
};
f32 D_8038C868[6] = { 300.0f, 180.0f, 220.0f, 270.0f, 330.0f, 255.0f};
s32 D_8038C880[6] = {0x6E, 0xD2, 0x10E, 0x145, 0x14A, 0};
s32 D_8038C898[6] = {
static f32 sChTreasurehunt_StepRedXYaws[6] = { 300.0f, 180.0f, 220.0f, 270.0f, 330.0f, 255.0f };
static s32 sChTreasurehunt_StepYaws[6] = { 0x6E, 0xD2, 0x10E, 0x145, 0x14A, 0 };
static s32 sChTreasurehunt_StepActors[6] = {
ACTOR_53_RED_ARROW,
ACTOR_53_RED_ARROW,
ACTOR_53_RED_ARROW,
ACTOR_53_RED_ARROW,
ACTOR_54_RED_QUESTION_MARK,
0x46
}; //enum actor_e
ACTOR_46_JIGGY
};
ActorInfo D_8038C8B0 = {
ActorInfo gChTreasurehuntRedArrow = {
MARKER_62_RED_ARROW, ACTOR_53_RED_ARROW, ASSET_3E9_MODEL_RED_ARROW,
0, NULL,
TTC_func_80389E90, actor_update_func_80326224, func_8038A0D0,
__chTreasurehunt_updateFunc, actor_update_func_80326224, __chTreasurehunt_animFunc,
0, 0x400, 0.0f, 0
};
ActorInfo D_8038C8D4 = {
ActorInfo gChTreasurehuntRedQuestionMark = {
MARKER_63_RED_QUESTION_MARK, ACTOR_54_RED_QUESTION_MARK, ASSET_3EB_MODEL_RED_QUESTION_MARK,
0, NULL,
TTC_func_80389E90, actor_update_func_80326224, func_8038A0D0,
__chTreasurehunt_updateFunc, actor_update_func_80326224, __chTreasurehunt_animFunc,
0, 0x400, 0.0f, 0
};
ActorInfo D_8038C8F8 = {
ActorInfo gChTreasurehuntRedX = {
MARKER_64_RED_X, ACTOR_55_RED_X, ASSET_3EA_MODEL_RED_X,
0, NULL,
TTC_func_80389E90, actor_update_func_80326224, func_8038A0D0,
__chTreasurehunt_updateFunc, actor_update_func_80326224, __chTreasurehunt_animFunc,
0, 0x400, 0.0f, 0
};
s32 D_8038C91C[3] = {160, 120, 20};
ParticleScaleAndLifetimeRanges D_8038C928 = {
static s32 sChTreasurehuntParticleRGB[3] = {160, 120, 20};
ParticleScaleAndLifetimeRanges CH_TREASUREHUNT_PARTICLE_SCALE_AND_LIFETIME_RANGES = {
{1.1f, 1.5f},
{4.0f, 4.6f},
{0.0f, 0.01f},
@@ -65,121 +66,120 @@ ParticleScaleAndLifetimeRanges D_8038C928 = {
0.0f, 0.01f
};
ParticleSettingsVelocityPosition D_8038C950 = {
ParticleSettingsVelocityPosition CH_TREASUREHUNT_VELOCITY_RANGES = {
{{-230.0f, 30.0f, -230.0f}, {230.0f, 110.0f, 230.0f}},
{{-60.0f, 0.0f, -60.0f}, {60.0f, 30.0f, 60.0f}},
};
/* .code */
bool TTC_func_803899C0(void) {
enum comusic_e phi_a0;
s32 phi_a1;
static bool __chTreasurehunt_isActiveHitboxBeakBusterHitbox(void) {
enum comusic_e comusic_id;
s32 music_volume;
if (player_getActiveHitbox(0) == HITBOX_1_BEAK_BUSTER) {
phi_a0 = COMUSIC_2B_DING_B;
phi_a1 = 28000;
if (D_8037DCB4 == 5) {
phi_a0 = COMUSIC_2D_PUZZLE_SOLVED_FANFARE;
phi_a1 = 0x7FFF;
comusic_id = COMUSIC_2B_DING_B;
music_volume = 28000;
if (CH_TREASUREHUNT_PUZZLE_CURRENT_STEP == 5) {
comusic_id = COMUSIC_2D_PUZZLE_SOLVED_FANFARE;
music_volume = 0x7FFF;
}
func_8025A6EC(phi_a0, phi_a1);
func_8025A6EC(comusic_id, music_volume);
return TRUE;
}
return FALSE;
}
void func_80389A1C(void) {
static void __chTreasurehunt_spawnRedXForNextStep(void) {
Actor *actor;
ActorLocal_TreasureHunt *local;
actor = actor_spawnWithYaw_f32(0x55, D_8038C820[D_8037DCB4], 0);
actor = actor_spawnWithYaw_f32(ACTOR_55_RED_X, sChTreasurehunt_stepPositions[CH_TREASUREHUNT_PUZZLE_CURRENT_STEP], 0);
local = (ActorLocal_TreasureHunt *)&actor->local;
actor->yaw = D_8038C868[D_8037DCB4];
local->unk0 = D_8037DCB4;
actor->yaw = sChTreasurehunt_StepRedXYaws[CH_TREASUREHUNT_PUZZLE_CURRENT_STEP];
local->unk0 = CH_TREASUREHUNT_PUZZLE_CURRENT_STEP;
actor->lifetime_value = 0.0f;
actor->state = 0;
}
void func_80389A9C(void) {
static void __chTreasurehunt_spawnActorForNextStep(void) {
Actor *actor;
ActorLocal_TreasureHunt *local;
s32 actor_id;
actor = actor_spawnWithYaw_f32((D_8038C898 - 1)[D_8037DCB4], D_8038C820[D_8037DCB4 - 1], 0);
actor = actor_spawnWithYaw_f32((sChTreasurehunt_StepActors - 1)[CH_TREASUREHUNT_PUZZLE_CURRENT_STEP], sChTreasurehunt_stepPositions[CH_TREASUREHUNT_PUZZLE_CURRENT_STEP - 1], 0);
local = (ActorLocal_TreasureHunt *)&actor->local;
actor->yaw = D_8038C880[D_8037DCB4 - 1];
local->unk0 = D_8037DCB4;
actor->yaw = sChTreasurehunt_StepYaws[CH_TREASUREHUNT_PUZZLE_CURRENT_STEP - 1];
local->unk0 = CH_TREASUREHUNT_PUZZLE_CURRENT_STEP;
actor->lifetime_value = 0.0f;
actor->state = 0;
}
void func_80389B38(s32 arg0){
if(D_8037DCB4 == arg0 && TTC_func_803899C0()){
if(arg0 == 0 && !jiggyscore_isCollected(JIGGY_11_TTC_RED_X)){
gcdialog_showText(0xA18, 4, NULL, NULL, NULL, NULL);
static void __chTreasurehunt_checkStepProgress(s32 currentStep){
if(CH_TREASUREHUNT_PUZZLE_CURRENT_STEP == currentStep && __chTreasurehunt_isActiveHitboxBeakBusterHitbox()){
if(currentStep == 0 && !jiggyscore_isCollected(JIGGY_11_TTC_RED_X)){
gcdialog_showText(ASSET_A18_TEXT_TREASUREHUNT_FOLLOW_CLUES, 4, NULL, NULL, NULL, NULL);
}
else if(arg0 == 4){
gcdialog_showText(0xA19, 4, NULL, NULL, NULL, NULL);
else if(currentStep == 4){
gcdialog_showText(ASSET_A19_TEXT_TREASUREHUNT_SECOND_STEP, 4, NULL, NULL, NULL, NULL);
}
D_8037DCB4++;
__spawnQueue_add_0(func_80389A9C);
__spawnQueue_add_0(func_80389A1C);
CH_TREASUREHUNT_PUZZLE_CURRENT_STEP++;
__spawnQueue_add_0(__chTreasurehunt_spawnActorForNextStep);
__spawnQueue_add_0(__chTreasurehunt_spawnRedXForNextStep);
}
}
void TTC_func_80389BFC(ActorMarker *this, ActorMarker *arg1){\
func_80389B38(0);
void chTreasurehunt_checkStepProgress0(ActorMarker *this, ActorMarker *arg1){\
__chTreasurehunt_checkStepProgress(0);
}
void func_80389C24(ActorMarker *this, ActorMarker *arg1){\
func_80389B38(1);
void chTreasurehunt_checkStepProgress1(ActorMarker *this, ActorMarker *arg1){\
__chTreasurehunt_checkStepProgress(1);
}
void func_80389C4C(ActorMarker *this, ActorMarker *arg1){\
func_80389B38(2);
void chTreasurehunt_checkStepProgress2(ActorMarker *this, ActorMarker *arg1){\
__chTreasurehunt_checkStepProgress(2);
}
void func_80389C74(ActorMarker *this, ActorMarker *arg1){\
func_80389B38(3);
void chTreasurehunt_checkStepProgress3(ActorMarker *this, ActorMarker *arg1){\
__chTreasurehunt_checkStepProgress(3);
}
void func_80389C9C(ActorMarker *this, ActorMarker *arg1){\
func_80389B38(4);
void chTreasurehunt_checkStepProgress4(ActorMarker *this, ActorMarker *arg1){\
__chTreasurehunt_checkStepProgress(4);
}
void func_80389CC4(s16 arg0[3], s32 arg1){
static ParticleEmitter *D_8038D700;
static f32 D_8038D708[3];
void chTreasurehunt_checkStepProgress5(s16 arg0[3], s32 arg1){
static ParticleEmitter *particleEmitter;
static f32 particleTargetPosition[3];
if(D_8037DCB4 == 5 && TTC_func_803899C0()){
D_8038D708[0] = (f32)arg0[0];
D_8038D708[1] = (f32)arg0[1];
D_8038D708[2] = (f32)arg0[2];
D_8038D708[1] = mapModel_getFloorY(D_8038D708);
__spawnQueue_add_4((GenFunction_4)spawnQueue_actor_f32, 0xF4, reinterpret_cast(s32, D_8038D708[0]), reinterpret_cast(s32, D_8038D708[1]), reinterpret_cast(s32, D_8038D708[2]));
D_8038D700 = partEmitMgr_newEmitter(3);
particleEmitter_setRGB(D_8038D700, D_8038C91C);
particleEmitter_setSprite(D_8038D700, ASSET_700_SPRITE_DUST);
particleEmitter_setStartingFrameRange(D_8038D700, 0, 7);
particleEmitter_setPosition(D_8038D700, D_8038D708);
particleEmitter_setPositionAndVelocityRanges(D_8038D700, &D_8038C950);
particleEmitter_setScaleAndLifetimeRanges(D_8038D700, &D_8038C928);
particleEmitter_emitN(D_8038D700, 5);
D_8038D708[2] += 300.0f;
if(CH_TREASUREHUNT_PUZZLE_CURRENT_STEP == 5 && __chTreasurehunt_isActiveHitboxBeakBusterHitbox()){
particleTargetPosition[0] = (f32)arg0[0];
particleTargetPosition[1] = (f32)arg0[1];
particleTargetPosition[2] = (f32)arg0[2];
particleTargetPosition[1] = mapModel_getFloorY(particleTargetPosition);
__spawnQueue_add_4((GenFunction_4)spawnQueue_actor_f32, 0xF4, reinterpret_cast(s32, particleTargetPosition[0]), reinterpret_cast(s32, particleTargetPosition[1]), reinterpret_cast(s32, particleTargetPosition[2]));
particleEmitter = partEmitMgr_newEmitter(3);
particleEmitter_setRGB(particleEmitter, sChTreasurehuntParticleRGB);
particleEmitter_setSprite(particleEmitter, ASSET_700_SPRITE_DUST);
particleEmitter_setStartingFrameRange(particleEmitter, 0, 7);
particleEmitter_setPosition(particleEmitter, particleTargetPosition);
particleEmitter_setPositionAndVelocityRanges(particleEmitter, &CH_TREASUREHUNT_VELOCITY_RANGES);
particleEmitter_setScaleAndLifetimeRanges(particleEmitter, &CH_TREASUREHUNT_PARTICLE_SCALE_AND_LIFETIME_RANGES);
particleEmitter_emitN(particleEmitter, 5);
particleTargetPosition[2] += 300.0f;
gcpausemenu_80314AC8(0);
timedFunc_set_2(0.1f, (GenFunction_2) func_8028F45C, 9, (s32)&D_8038D708);
timedFunc_set_2(0.1f, (GenFunction_2) func_8028F45C, 9, (s32)&particleTargetPosition);
timedFunc_set_1(0.1f, (GenFunction_1) gcpausemenu_80314AC8, 1);
gcdialog_showText(ASSET_A17_TEXT_BURIED_TREASURE_SPAWNED, 4, NULL, NULL, NULL, NULL);
D_8037DCB4++;
}//L80389E70
CH_TREASUREHUNT_PUZZLE_CURRENT_STEP++;
}
}
void ttc_resetTresureHunt(void){
D_8037DCB4 = 0;
void chTreasurehunt_resetProgress(void){
CH_TREASUREHUNT_PUZZLE_CURRENT_STEP = 0;
}
void TTC_func_80389E90(Actor *this){
static void __chTreasurehunt_updateFunc(Actor *this){
f32 tick = time_getDelta();
ActorLocal_TreasureHunt *local = (ActorLocal_TreasureHunt*)&this->local;
f64 tmp_f12;
@@ -191,28 +191,28 @@ void TTC_func_80389E90(Actor *this){
}
switch(this->state){
case 0://L80389F20
case 0:
this->lifetime_value = MIN(255.0, this->lifetime_value + tick*150.0);
if(255.0 == this->lifetime_value){
this->state = 1;
}
break;
case 1://L80389F94
if(local->unk0 < D_8037DCB4){
case 1:
if(local->unk0 < CH_TREASUREHUNT_PUZZLE_CURRENT_STEP){
this->state = 2;
}
break;
case 2://L80389FC4
case 2:
this->lifetime_value = MAX(0.0, this->lifetime_value - tick*((this->marker->modelId == ASSET_3EA_MODEL_RED_X)? 200.0 : 150.0));
if(0.0 == this->lifetime_value)
marker_despawn(this->marker);
break;
}//L8038A094
}
actor_setOpacity(this, (s32)this->lifetime_value);
this->depth_mode = 2;
}
Actor *func_8038A0D0(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx){
static Actor *__chTreasurehunt_animFunc(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx){
f32 sp4C[3];
f32 sp40[3];
f32 sp3C;
@@ -221,19 +221,19 @@ Actor *func_8038A0D0(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx){
actor = marker_getActorAndRotation(marker, sp4C);
switch(marker->modelId){
case ASSET_3E9_MODEL_RED_ARROW://L8038A12C
case ASSET_3E9_MODEL_RED_ARROW:
sp3C = 1.0f;
sp38 = 8.0f;
break;
case ASSET_3EB_MODEL_RED_QUESTION_MARK: //L8038A14C
case ASSET_3EB_MODEL_RED_QUESTION_MARK:
sp3C = 1.0f;
sp38 = 8.0f;
break;
case ASSET_3EA_MODEL_RED_X://L8038A164
sp3C = (((ActorLocal_TreasureHunt *)&actor->local)->unk0 == 5)? 0.8f : 0.4f;
case ASSET_3EA_MODEL_RED_X:
sp3C = (((ActorLocal_TreasureHunt *)&actor->local)->unk0 == 5) ? 0.8f : 0.4f;
sp38 = 4.0f;
break;
}//L8038A1A0
}
sp40[0] = actor->position[0];
sp40[1] = actor->position[1] + sp38;
sp40[2] = actor->position[2];

View File

@@ -5,121 +5,121 @@
#include "SnS.h"
#include "actor.h"
extern ActorInfo chClam;
extern ActorInfo TTC_D_8038C510;
extern ActorInfo D_8038C580;
extern ActorInfo D_8038C5E0;
extern ActorInfo D_8038C604;
extern ActorInfo D_8038C628;
extern ActorInfo D_8038C64C;
extern ActorInfo D_8038C670;
extern ActorInfo D_8038C694;
extern ActorInfo D_8038C6B8;
extern ActorInfo D_8038C6DC;
extern ActorInfo D_8038C718;
extern ActorInfo D_8038C790;
extern ActorInfo D_8038C7B4;
extern ActorInfo D_8038C7D8;
extern ActorInfo D_8038C8B0;
extern ActorInfo D_8038C8D4;
extern ActorInfo D_8038C8F8;
extern ActorInfo gChTreasureInfo;
extern ActorInfo gChClam;
extern ActorInfo gChBlubber;
extern ActorInfo gChNipper;
extern ActorInfo gBlubberShipTopHatch;
extern ActorInfo gLighthouseDoor;
extern ActorInfo gSharkfoodIsland;
extern ActorInfo gLighthouseA;
extern ActorInfo gLighthouseB;
extern ActorInfo gStairs1;
extern ActorInfo gStairs2;
extern ActorInfo gPalmTree;
extern ActorInfo gChLeaky;
extern ActorInfo gChLockupSlow;
extern ActorInfo gChLockupMedium;
extern ActorInfo gChLockupFast;
extern ActorInfo gChTreasurehuntRedArrow;
extern ActorInfo gChTreasurehuntRedQuestionMark;
extern ActorInfo gChTreasurehuntRedX;
extern ActorInfo gChTreasure;
void TTC_func_80388C78(Actor *this);
void func_80388CB8(Actor *this);
void func_80388D34(Actor *this);
void code26D0_genericUpdateFunc(Actor *this);
void code26D0_palmTreeUpdateFunc(Actor *this);
void code26D0_lighthouseAUpdateFunc(Actor *this);
void func_802D3D54(Actor *this);
void func_80388D8C(Actor *this);
void code26D0_sharkfoodIslandUpdateFunc(Actor *this);
/* .data */
ActorInfo D_8038C5E0 = {
0xA1, 0x10E, 0x3D2,
ActorInfo gBlubberShipTopHatch = {
MARKER_A1_BLUBBER_SHIP_TOP_HATCH, ACTOR_10E_BLUBBER_SHIP_TOP_HATCH, ASSET_3D2_MODEL_BLUBBER_SHIP_TOP_HATCH,
0x1, NULL,
func_802D3D54, actor_update_func_80326224, actor_drawFullDepth,
0, 0, 0.0f, 0
};
ActorInfo D_8038C604 = {
ActorInfo gLighthouseDoor = {
MARKER_EA_LIGHTHOUSE_DOOR, ACTOR_13E_LIGHTHOUSE_DOOR, ASSET_3D6_MODEL_LIGHTHOUSE_DOOR,
0x1, NULL,
func_802D3D54, actor_update_func_80326224, actor_drawFullDepth,
0, 0, 0.0f, 0
};
ActorInfo D_8038C628 = {
ActorInfo gSharkfoodIsland = {
MARKER_167_SHARKFOOD_ISLAND, ACTOR_25C_SHARKFOOD_ISLAND, ASSET_50A_MODEL_SHARKFOOD_ISLAND,
0x1, NULL,
func_80388D8C, actor_update_func_80326224, actor_drawFullDepth,
code26D0_sharkfoodIslandUpdateFunc, actor_update_func_80326224, actor_drawFullDepth,
0, 0, 0.0f, 0
};
ActorInfo D_8038C64C = {
0x267, 0x2E2, 0x3BD,
ActorInfo gLighthouseA = {
MARKER_267_LIGHTHOUSE_A, ACTOR_2E2_LIGHTHOUSE_A, ASSET_3BD_MODEL_LIGHTHOUSE_A,
0x1, NULL,
func_80388D34, actor_update_func_80326224, actor_drawFullDepth,
code26D0_lighthouseAUpdateFunc, actor_update_func_80326224, actor_drawFullDepth,
0, 0, 0.0f, 0
};
ActorInfo D_8038C670 = {
0x26A, 0x2DF, 0x3BE,
ActorInfo gLighthouseB = {
MARKER_26A_LIGHTHOUSE_B, ACTOR_2DF_LIGHTHOUSE_B, ASSET_3BE_MODEL_LIGHTHOUSE_B,
0x1, NULL,
TTC_func_80388C78, actor_update_func_80326224, actor_drawFullDepth,
code26D0_genericUpdateFunc, actor_update_func_80326224, actor_drawFullDepth,
0, 0, 0.0f, 0
};
ActorInfo D_8038C694 = {
0x268, 0x2E0, 0x3B6,
ActorInfo gStairs1 = {
MARKER_268_STAIRS_1, ACTOR_2E0_TTC_STAIRS_1, ASSET_3B6_MODEL_TTC_STAIRS_1,
0x1, NULL,
TTC_func_80388C78, actor_update_func_80326224, actor_drawFullDepth,
code26D0_genericUpdateFunc, actor_update_func_80326224, actor_drawFullDepth,
0, 0, 0.0f, 0
};
ActorInfo D_8038C6B8 = {
0x269, 0x2E1, 0x3B7,
ActorInfo gStairs2 = {
MARKER_269_STAIRS_2, ACTOR_2E1_TTC_STAIRS_2, ASSET_3B7_MODEL_TTC_STAIRS_1,
0x1, NULL,
TTC_func_80388C78, actor_update_func_80326224, actor_drawFullDepth,
code26D0_genericUpdateFunc, actor_update_func_80326224, actor_drawFullDepth,
0, 0, 0.0f, 0
};
ActorInfo D_8038C6DC = {
ActorInfo gPalmTree = {
MARKER_1D5_PALM_TREE, ACTOR_31E_PALM_TREE, ASSET_3A9_MODEL_PALM_TREE,
0x1, NULL,
func_80388CB8, actor_update_func_80326224, actor_drawFullDepth,
code26D0_palmTreeUpdateFunc, actor_update_func_80326224, actor_drawFullDepth,
0, 0, 0.0f, 0
};
/* .code */
void TTC_func_80388AC0(void)
void TTC_resetSpawnableActors(void)
{
spawnableActorList_add(&D_8038C5E0, actor_new, ACTOR_FLAG_NONE);
spawnableActorList_add(&D_8038C604, actor_new, ACTOR_FLAG_NONE);
spawnableActorList_add(&D_8038C580, actor_new, ACTOR_FLAG_UNKNOWN_3 | ACTOR_FLAG_UNKNOWN_5 | ACTOR_FLAG_UNKNOWN_6 | ACTOR_FLAG_UNKNOWN_8 | ACTOR_FLAG_UNKNOWN_20 | ACTOR_FLAG_UNKNOWN_26);
spawnableActorList_add(&TTC_D_8038C510, actor_new, ACTOR_FLAG_UNKNOWN_0 | ACTOR_FLAG_UNKNOWN_8 | ACTOR_FLAG_UNKNOWN_26);
spawnableActorList_add(&D_8038C718, actor_new, ACTOR_FLAG_UNKNOWN_3 | ACTOR_FLAG_UNKNOWN_7 | ACTOR_FLAG_UNKNOWN_8);
spawnableActorList_add(&D_8038C790, actor_new, ACTOR_FLAG_UNKNOWN_3 | ACTOR_FLAG_UNKNOWN_6 | ACTOR_FLAG_UNKNOWN_8);
spawnableActorList_add(&D_8038C7B4, actor_new, ACTOR_FLAG_UNKNOWN_3 | ACTOR_FLAG_UNKNOWN_6 | ACTOR_FLAG_UNKNOWN_8);
spawnableActorList_add(&D_8038C7D8, actor_new, ACTOR_FLAG_UNKNOWN_3 | ACTOR_FLAG_UNKNOWN_6 | ACTOR_FLAG_UNKNOWN_8);
spawnableActorList_add(&D_8038C8B0, actor_new, ACTOR_FLAG_UNKNOWN_10);
spawnableActorList_add(&D_8038C8D4, actor_new, ACTOR_FLAG_UNKNOWN_10);
spawnableActorList_add(&D_8038C8F8, actor_new, ACTOR_FLAG_UNKNOWN_10);
spawnableActorList_add(&gChTreasureInfo, actor_new, ACTOR_FLAG_UNKNOWN_3 | ACTOR_FLAG_UNKNOWN_6 | ACTOR_FLAG_UNKNOWN_25);
spawnableActorList_add(&D_8038C628, actor_new, ACTOR_FLAG_UNKNOWN_7 | ACTOR_FLAG_UNKNOWN_9 | ACTOR_FLAG_UNKNOWN_10 | ACTOR_FLAG_UNKNOWN_15);
spawnableActorList_add(&D_8038C64C, actor_new, ACTOR_FLAG_UNKNOWN_10);
spawnableActorList_add(&D_8038C670, actor_new, ACTOR_FLAG_UNKNOWN_2 | ACTOR_FLAG_UNKNOWN_10 | ACTOR_FLAG_UNKNOWN_17);
spawnableActorList_add(&D_8038C694, actor_new, ACTOR_FLAG_UNKNOWN_10);
spawnableActorList_add(&D_8038C6B8, actor_new, ACTOR_FLAG_UNKNOWN_10);
spawnableActorList_add(&D_8038C6DC, actor_new, ACTOR_FLAG_UNKNOWN_10);
spawnableActorList_add(&chClam, actor_new, ACTOR_FLAG_UNKNOWN_0 | ACTOR_FLAG_UNKNOWN_6 | ACTOR_FLAG_UNKNOWN_25);
spawnableActorList_add(&gBlubberShipTopHatch, actor_new, ACTOR_FLAG_NONE);
spawnableActorList_add(&gLighthouseDoor, actor_new, ACTOR_FLAG_NONE);
spawnableActorList_add(&gChNipper, actor_new, ACTOR_FLAG_UNKNOWN_3 | ACTOR_FLAG_UNKNOWN_5 | ACTOR_FLAG_UNKNOWN_6 | ACTOR_FLAG_UNKNOWN_8 | ACTOR_FLAG_UNKNOWN_20 | ACTOR_FLAG_UNKNOWN_26);
spawnableActorList_add(&gChBlubber, actor_new, ACTOR_FLAG_UNKNOWN_0 | ACTOR_FLAG_UNKNOWN_8 | ACTOR_FLAG_UNKNOWN_26);
spawnableActorList_add(&gChLeaky, actor_new, ACTOR_FLAG_UNKNOWN_3 | ACTOR_FLAG_UNKNOWN_7 | ACTOR_FLAG_UNKNOWN_8);
spawnableActorList_add(&gChLockupSlow, actor_new, ACTOR_FLAG_UNKNOWN_3 | ACTOR_FLAG_UNKNOWN_6 | ACTOR_FLAG_UNKNOWN_8);
spawnableActorList_add(&gChLockupMedium, actor_new, ACTOR_FLAG_UNKNOWN_3 | ACTOR_FLAG_UNKNOWN_6 | ACTOR_FLAG_UNKNOWN_8);
spawnableActorList_add(&gChLockupFast, actor_new, ACTOR_FLAG_UNKNOWN_3 | ACTOR_FLAG_UNKNOWN_6 | ACTOR_FLAG_UNKNOWN_8);
spawnableActorList_add(&gChTreasurehuntRedArrow, actor_new, ACTOR_FLAG_UNKNOWN_10);
spawnableActorList_add(&gChTreasurehuntRedQuestionMark, actor_new, ACTOR_FLAG_UNKNOWN_10);
spawnableActorList_add(&gChTreasurehuntRedX, actor_new, ACTOR_FLAG_UNKNOWN_10);
spawnableActorList_add(&gChTreasure, actor_new, ACTOR_FLAG_UNKNOWN_3 | ACTOR_FLAG_UNKNOWN_6 | ACTOR_FLAG_UNKNOWN_25);
spawnableActorList_add(&gSharkfoodIsland, actor_new, ACTOR_FLAG_UNKNOWN_7 | ACTOR_FLAG_UNKNOWN_9 | ACTOR_FLAG_UNKNOWN_10 | ACTOR_FLAG_UNKNOWN_15);
spawnableActorList_add(&gLighthouseA, actor_new, ACTOR_FLAG_UNKNOWN_10);
spawnableActorList_add(&gLighthouseB, actor_new, ACTOR_FLAG_UNKNOWN_2 | ACTOR_FLAG_UNKNOWN_10 | ACTOR_FLAG_UNKNOWN_17);
spawnableActorList_add(&gStairs1, actor_new, ACTOR_FLAG_UNKNOWN_10);
spawnableActorList_add(&gStairs2, actor_new, ACTOR_FLAG_UNKNOWN_10);
spawnableActorList_add(&gPalmTree, actor_new, ACTOR_FLAG_UNKNOWN_10);
spawnableActorList_add(&gChClam, actor_new, ACTOR_FLAG_UNKNOWN_0 | ACTOR_FLAG_UNKNOWN_6 | ACTOR_FLAG_UNKNOWN_25);
}
void TTC_func_80388C78(Actor *this){
void code26D0_genericUpdateFunc(Actor *this){
if(!this->initialized){
func_802D3D74(this);
this->initialized = TRUE;
}
}
void func_80388CB8(Actor *this){
void code26D0_palmTreeUpdateFunc(Actor *this){
if(!this->initialized){
func_802D3D74(this);
this->initialized = TRUE;
@@ -127,22 +127,22 @@ void func_80388CB8(Actor *this){
}
}
void func_80388D04(s32 arg0){
void code26D0_spawnLighthouseB(s32 arg0){
ActorMarker *marker = reinterpret_cast(ActorMarker *, arg0);
Actor *this = marker_getActor(marker);
spawn_child_actor(0x2df, &this);
spawn_child_actor(ACTOR_2DF_LIGHTHOUSE_B, &this);
}
void func_80388D34(Actor *this){
TTC_func_80388C78(this);
void code26D0_lighthouseAUpdateFunc(Actor *this){
code26D0_genericUpdateFunc(this);
if(!this->volatile_initialized){
__spawnQueue_add_1((GenFunction_1)func_80388D04, (s32)this->marker);
__spawnQueue_add_1((GenFunction_1)code26D0_spawnLighthouseB, (s32)this->marker);
this->volatile_initialized = TRUE;
}
}
void func_80388D8C(Actor *this){
f32 sp1C[3];
void code26D0_sharkfoodIslandUpdateFunc(Actor *this){
f32 player_position[3];
if(!this->initialized){
func_802D3CE8(this);
@@ -163,12 +163,12 @@ void func_80388D8C(Actor *this){
}//L80388E7C
if(this->position_y == 700.0f){
player_getPosition(sp1C);
if( 695.0f <= sp1C[1] && sp1C[1] < 1000.0f
&& (sp1C[0] - 5542.0f)*(sp1C[0] - 5542.0f) + (sp1C[2] - 8687.0f)*(sp1C[2] - 8687.0f) < 96100.0f
&& (sp1C[0] - 6837.0f)*(sp1C[0] - 6837.0f) + (sp1C[2] - 12714.0f)*(sp1C[2] - 12714.0f) < 17640000.0f
player_getPosition(player_position);
if( 695.0f <= player_position[1] && player_position[1] < 1000.0f
&& (player_position[0] - 5542.0f)*(player_position[0] - 5542.0f) + (player_position[2] - 8687.0f)*(player_position[2] - 8687.0f) < 96100.0f
&& (player_position[0] - 6837.0f)*(player_position[0] - 6837.0f) + (player_position[2] - 12714.0f)*(player_position[2] - 12714.0f) < 17640000.0f
){
func_8031D04C(0x8f, 1);
func_8031D04C(MAP_8F_TTC_SHARKFOOD_ISLAND, 1);
}
}
}

View File

@@ -147,7 +147,7 @@ void func_8038A328(void) {
i_ptr->unk3 = 2;
i_ptr->unk4 = 0.0f;
}
mapSpecificFlags_set(1, FALSE);
mapSpecificFlags_set(TTC_SPECIFIC_FLAG_1_UNKNOWN, FALSE);
}
void func_8038A37C(s32 arg0, BKVtxRef *ref, Vtx *dst, s32 arg3) {
@@ -318,7 +318,7 @@ void func_8038AC48(LetterFloorTile *arg0) {
if (var_v0 & 1) {
D_8038D720.unk8 = 2U;
D_8038D720.unkC = 0.0f;
mapSpecificFlags_set(1, TRUE);
mapSpecificFlags_set(TTC_SPECIFIC_FLAG_1_UNKNOWN, TRUE);
fileProgressFlag_set(0xFA, TRUE);
func_8030E2C4(D_8038D720.sfxsourceIdx);
func_8038A258(2);

View File

@@ -56,7 +56,7 @@ void bacarriedobj_spawn(enum actor_e actor_id){
void func_8028DEEC(enum actor_e actor_id, Actor *actor){
f32 sp1C[3];
nodeprop_getPosition(func_80304C38(actor_id, actor), sp1C);
nodeprop_getPosition(nodeprop_findByActorIdAndActorPosition(actor_id, actor), sp1C);
set_throw_target_position(sp1C);
}

View File

@@ -80,7 +80,7 @@ ActorInfo D_80365F00 = { 0xE6, 0x197, 0x532, 0x1, D_80365ED0, func_802C4C14, act
/* .bss */
s32 mm_hut_smash_count;
u32 D_8037DCB4;
u32 CH_TREASUREHUNT_PUZZLE_CURRENT_STEP;
struct FF_StorageStruct* D_8037DCB8;
s32 D_8037DCBC;
u8 D_8037DCC0[7];

View File

@@ -349,7 +349,7 @@ void chmole_update(Actor *this){
if(!this->initialized){
// Checks if player is within radius of a specific actor exists within the same cube
// If actor exists and player is within radius, force trigger conversation
node_prop = func_80304C38(0x372, this);
node_prop = nodeprop_findByActorIdAndActorPosition(0x372, this);
if(node_prop == NULL){
this->unk38_0 = FALSE;
}
@@ -363,7 +363,7 @@ void chmole_update(Actor *this){
this->marker->collidable = FALSE;
this->initialized = TRUE;
if(this->unkF4_8 == 0x12){
node_prop = func_80304C38(0x349, this);
node_prop = nodeprop_findByActorIdAndActorPosition(0x349, this);
if(node_prop == NULL){
this->velocity[0] = this->position[0];
this->velocity[1] = this->position[1];

View File

@@ -142,7 +142,7 @@ void func_802CEEA4(Actor *this, Struct_core2_47BD0_0 *arg1) {
}
void func_802CEF54(Actor *this, f32 arg1[3], f32 arg2){
void func_802CEF54(Actor *this, f32 arg1[3], f32 distance){
f32 sp34[3];
s32 phi_v1;
s32 phi_v0;
@@ -153,7 +153,7 @@ void func_802CEF54(Actor *this, f32 arg1[3], f32 arg2){
phi_v1 = (this->state == 5) ? 200 : 50;
phi_v0 = (this->state == 5) ? 200 : 100;
func_802CEDE4(sp34, this->unk1C, arg2, &this->actor_specific_1_f, (f32) phi_v1, (f32) phi_v0);
func_802CEDE4(sp34, this->unk1C, distance, &this->actor_specific_1_f, (f32) phi_v1, (f32) phi_v0);
this->unk1C[0] = this->unk1C[0] + arg1[0];
this->unk1C[1] = this->unk1C[1] + arg1[1];
this->unk1C[2] = this->unk1C[2] + arg1[2];

View File

@@ -2,13 +2,13 @@
#include "functions.h"
#include "variables.h"
s32 func_802E0970(s32 arg0, f32 arg1, f32 arg2, f32 arg3, s32 arg4, bool arg5, f32 arg6[3]) {
s32 func_802E0970(enum sfx_e sfxId, f32 arg1, f32 arg2, f32 arg3, s32 sampleRate, bool arg5, f32 position[3]) {
f32 temp_f0;
f32 phi_f2;
phi_f2 = (arg5) ? arg1 : arg2;
temp_f0 = arg3 * 0.5;
func_8030E878(arg0, randf2(phi_f2 - temp_f0, phi_f2 + temp_f0), arg4, arg6, 1000.0f, 2300.0f);
func_8030E878(sfxId, randf2(phi_f2 - temp_f0, phi_f2 + temp_f0), sampleRate, position, 1000.0f, 2300.0f);
return NOT(arg5);
}

View File

@@ -995,7 +995,7 @@ NodeProp *cubeList_findNodePropByActorId(enum actor_e actor_id, s32 position[3])
return NULL;
}
NodeProp *func_80304C38(enum actor_e actor_id, Actor *actor){
NodeProp *nodeprop_findByActorIdAndActorPosition(enum actor_e actor_id, Actor *actor){
s32 tmp_position[3];
s32 *position;

View File

@@ -39,7 +39,7 @@ typedef struct {
u8 unk40;
u8 unk41;
u8 busy;
u8 unk43_7:3;
u8 unk43_7:3; // value is set to 1, 2 or 3
u8 unk43_4:3;
u8 unk43_1:2;
}SfxSource;
@@ -420,11 +420,11 @@ void func_8030D644(void){
}
}
void func_8030D6C4(enum sfx_e uid, f32 arg1, s32 arg2, s32 arg3, s32 arg4){
void func_8030D6C4(enum sfx_e uid, f32 arg1, s32 sampleRate, s32 arg3, s32 arg4){
u8 indx = sfxsource_createSfxsourceAndReturnIndex();
if(indx){
sfxsource_setSfxId(indx, uid);
sfxsource_setSampleRate(indx, arg2);
sfxsource_setSampleRate(indx, sampleRate);
sfxsource_playSfxAtVolume(indx, arg1);
func_8030DCCC(indx, arg3);
func_8030DD14(indx, 1);
@@ -850,8 +850,8 @@ void func_8030E4E4(enum sfx_e uid){
func_8030D6C4(uid, 1.0f, 22000, 0, 0);
}
void sfxsource_play(enum sfx_e uid, s32 sample_rate){
func_8030D6C4(uid, 1.0f, sample_rate, 0, 2);
void sfxsource_play(enum sfx_e uid, s32 sampleRate){
func_8030D6C4(uid, 1.0f, sampleRate, 0, 2);
}
void func_8030E540(enum sfx_e uid){
@@ -899,7 +899,7 @@ void func_8030E760(enum sfx_e uid, f32 arg1, s32 arg2){
func_8030D6C4(uid, arg1, arg2, 0, 0);
}
void sfx_play(enum sfx_e uid, f32 arg1, u32 sampleRate, f32 position[3], f32 minFadeDistance, f32 maxFadeDistance, s32 arg6){
void sfx_play(enum sfx_e uid, f32 volume, u32 sampleRate, f32 position[3], f32 minFadeDistance, f32 maxFadeDistance, s32 arg6){
u8 sfxsource;
f32 player_position[3];
@@ -913,7 +913,7 @@ void sfx_play(enum sfx_e uid, f32 arg1, u32 sampleRate, f32 position[3], f32 min
func_8030DD90(sfxsource, arg6); // priority ?
sfxsource_setSfxId(sfxsource, uid);
sfxsource_setSampleRate(sfxsource, sampleRate);
sfxsource_playSfxAtVolume(sfxsource, arg1); // volume ?
sfxsource_playSfxAtVolume(sfxsource, volume);
sfxsource_set_fade_distances(sfxsource, minFadeDistance, maxFadeDistance);
sfxsource_set_position(sfxsource, position);
func_8030DD14(sfxsource, 1);
@@ -922,8 +922,8 @@ void sfx_play(enum sfx_e uid, f32 arg1, u32 sampleRate, f32 position[3], f32 min
}
}
void func_8030E878(enum sfx_e id, f32 arg1, u32 sampleRate, f32 position[3], f32 minFadeDistance, f32 maxFadeDistance){
sfx_play(id, arg1, sampleRate, position, minFadeDistance, maxFadeDistance, 2);
void func_8030E878(enum sfx_e id, f32 volume, u32 sampleRate, f32 position[3], f32 minFadeDistance, f32 maxFadeDistance){
sfx_play(id, volume, sampleRate, position, minFadeDistance, maxFadeDistance, 2);
}
// fadeDistance is a 32-bit value where the lower 16 bits represent minFadeDistance and the upper 16 bits represent maxFadeDistance.
@@ -935,12 +935,12 @@ void func_8030E8B4(u32 arg0, f32 position[3], u32 fadeDistance){
);
}
void func_8030E988(enum sfx_e uid, f32 arg1, u32 sampleRate, f32 position[3], f32 minFadeDistance, f32 maxFadeDistance){
sfx_play(uid, arg1, sampleRate, position, minFadeDistance, maxFadeDistance, 1);
void func_8030E988(enum sfx_e uid, f32 volume, u32 sampleRate, f32 position[3], f32 minFadeDistance, f32 maxFadeDistance){
sfx_play(uid, volume, sampleRate, position, minFadeDistance, maxFadeDistance, 1);
}
void func_8030E9C4(enum sfx_e uid, f32 arg1, u32 sampleRate, f32 position[3], f32 minFadeDistance, f32 maxFadeDistance){
sfx_play(uid, arg1, sampleRate, position, minFadeDistance, maxFadeDistance, 0);
void func_8030E9C4(enum sfx_e uid, f32 volume, u32 sampleRate, f32 position[3], f32 minFadeDistance, f32 maxFadeDistance){
sfx_play(uid, volume, sampleRate, position, minFadeDistance, maxFadeDistance, 0);
}
void func_8030E9FC(enum sfx_e uid, f32 arg1, f32 arg2, u32 sampleRate, f32 position[3], f32 minFadeDistance, f32 maxFadeDistance){

View File

@@ -4,14 +4,14 @@
extern void func_8028F3D8(f32 *, f32, void(*)(ActorMarker *), ActorMarker *);
extern void func_8028F760(s32, f32, f32);
extern void func_8031CE70(f32 *arg0, s32 arg1, s32 arg2);
extern void func_8031CE70(f32 *arg0, enum map_e arg1, s32 arg2);
extern s32 fileProgressFlag_get(s32);
extern s32 fileProgressFlag_getN(s32 offset, s32 numBits);
extern void func_8031FFAC(void);
extern void fileProgressFlag_set(s32 index, s32 set);
extern void ml_vec3h_to_vec3f(f32 *, s32);
extern NodeProp *func_80304ED0(void*, f32 *);
extern void func_8031CD44(s32, s32, f32, f32, s32);
extern void func_8031CD44(enum map_e, s32, f32, f32, s32);
extern void func_80256E24(f32 *, f32, f32, f32, f32, f32);
extern void mapSpecificFlags_set(s32, s32);
@@ -170,7 +170,7 @@ void func_8031CD20(s32 arg0, s32 arg1, s32 arg2) {
func_8031CC8C(arg0, (arg1 << 8) + arg2);
}
void func_8031CD44(s32 arg0, s32 arg1, f32 arg2, f32 arg3, s32 arg4) {
void func_8031CD44(enum map_e arg0, s32 arg1, f32 arg2, f32 arg3, s32 arg4) {
f32 sp3C[3];
f32 sp30[3];
f32 sp24[3];
@@ -195,7 +195,7 @@ void func_8031CE28(s32 arg0, s32 arg1, f32 arg2) {
func_8031CD44(arg0, arg1, vec[1], arg2, 0x25);
}
void func_8031CE70(f32 *arg0, s32 arg1, s32 arg2) {
void func_8031CE70(f32 *arg0, enum map_e arg1, s32 arg2) {
f32 playerPos[3];
f32 sp38[3];
NodeProp *phi_s0;
@@ -231,12 +231,12 @@ void func_8031CE70(f32 *arg0, s32 arg1, s32 arg2) {
}
}
void func_8031D04C(s32 arg0, s32 arg1) {
void func_8031D04C(enum map_e arg0, s32 arg1) {
func_8031CB50(arg0, arg1, 0);
}
void func_8031D06C(s32 arg0, s32 arg1) {
func_8031CB50(0x20, 0, 0);
void func_8031D06C(enum map_e arg0, s32 arg1) {
func_8031CB50(MAP_20_CS_END_NOT_100, 0, 0);
}
void func_8031D09C(s32 arg0, s32 arg1) {
@@ -402,7 +402,7 @@ void func_8031D628(s32 arg0, s32 arg1) {
if (actor) {
marker_despawn(actor->marker);
}
func_8031CB50(7, 0xC, 0);
func_8031CB50(MAP_7_TTC_TREASURE_TROVE_COVE, 0xC, 0);
}
void warp_mmmEnterDiningRoomDoor(s32 arg0, s32 arg1) {
@@ -527,7 +527,7 @@ void warp_mmmEnterChurchSecretRoom(s32 arg0, s32 arg1) {
func_8031CC8C(arg0, 0x2B01);
}
void func_8031DAA8(s32 arg0, s32 arg1) {
void func_8031DAA8(enum map_e arg0, s32 arg1) {
func_8028F918(0);
func_8031CB50(arg0, arg1, 0);
}
@@ -560,7 +560,7 @@ void warp_mmmEnterRainBarrel(s32 arg0, s32 arg1) {
}
void func_8031DBE8(void) {
func_8031CB50(0x2F, 1, 1);
func_8031CB50(MAP_2F_MMM_WATERDRAIN_BARREL, 1, 1);
}
void func_8031DC10(s32 arg0, s32 arg1) {
@@ -598,7 +598,7 @@ void warp_bgsEnterTanktupConditional(s32 arg0, s32 arg1) {
}
void warp_ttcEnterNippersShell(s32 arg0, s32 arg1) {
if (func_80388A44() != 0) {
if (chNipper_isInState7() != 0) {
func_8031CC8C(arg0, 0x601);
}
}

View File

@@ -54,7 +54,7 @@ void func_803216D0(enum map_e map){
mm_resetHuts();
break;
case MAP_7_TTC_TREASURE_TROVE_COVE:
ttc_resetTresureHunt();
chTreasurehunt_resetProgress();
break;
case MAP_1B_MMM_MAD_MONSTER_MANSION:
mmm_resetFlowerPots();

View File

@@ -1932,7 +1932,7 @@ void func_8032A82C(Actor *arg0, s32 arg1) {
Actorlocal_Core2_9E370 *sp1C;
sp1C = &arg0->local;
sp24 = func_80304C38(arg1, arg0);
sp24 = nodeprop_findByActorIdAndActorPosition(arg1, arg0);
if (sp24 != NULL) {
sp1C->unkC = func_80304DA8(sp24);
nodeprop_getPosition(sp24, sp1C->unk0);

View File

@@ -291,12 +291,12 @@ extern void warp_lairEnterLairFromSMLevel(s32, s32);
extern void func_802C1674(s32, s32);
extern void func_802C169C(s32, s32);
extern void TTC_func_80389BFC(s32, s32);
extern void func_80389C24(s32, s32);
extern void func_80389C4C(s32, s32);
extern void func_80389C74(s32, s32);
extern void func_80389C9C(s32, s32);
extern void func_80389CC4(s32, s32);
extern void chTreasurehunt_checkStepProgress0(s32, s32);
extern void chTreasurehunt_checkStepProgress1(s32, s32);
extern void chTreasurehunt_checkStepProgress2(s32, s32);
extern void chTreasurehunt_checkStepProgress3(s32, s32);
extern void chTreasurehunt_checkStepProgress4(s32, s32);
extern void chTreasurehunt_checkStepProgress5(s32, s32);
extern void chMumbo_detransformWarn(s32, s32);
extern void chMumbo_detransformTrigger(s32, s32);
extern void func_8033443C(s32, s32);
@@ -413,8 +413,8 @@ Method_core2_AD110 D_8036FE5C[] ={
func_8033443C, func_8033443C, func_8033443C, func_8033443C,
func_8033443C, func_8033443C, func_8033443C, func_8033443C,
func_8033443C, func_8033443C, func_8033443C, func_8033443C,
func_8033443C, TTC_func_80389BFC, func_80389C24, func_80389C4C,
func_80389C74, func_80389C9C, func_80389CC4, chMumbo_detransformWarn,
func_8033443C, chTreasurehunt_checkStepProgress0, chTreasurehunt_checkStepProgress1, chTreasurehunt_checkStepProgress2,
chTreasurehunt_checkStepProgress3, chTreasurehunt_checkStepProgress4, chTreasurehunt_checkStepProgress5, chMumbo_detransformWarn,
chMumbo_detransformTrigger, func_8033443C, func_8033443C, func_8033443C,
func_8033443C, func_8033443C, func_8033443C, func_8033443C,
func_8033443C, func_8033443C, func_8033443C, func_8033443C,

View File

@@ -374,7 +374,7 @@ void spawnQueue_reset(void){
GV_func_8038F154();
break;
case OVERLAY_5_BEACH:
TTC_func_80388AC0();
TTC_resetSpawnableActors();
break;
case OVERLAY_6_JUNGLE:
MM_func_803888B0();

View File

@@ -357,7 +357,7 @@ void chWarpCauldron_update(Actor *this) {
volatileFlag_set(VOLATILE_FLAG_1E, 0);
func_802D677C(0);
func_8028FCAC();
nodeprop_getPosition(func_80304C38(D_80393620[this->unkF4_8 - 1].unk6, this), sp54);
nodeprop_getPosition(nodeprop_findByActorIdAndActorPosition(D_80393620[this->unkF4_8 - 1].unk6, this), sp54);
if (this->unkF4_8 == 7) {
func_8028F66C(BS_INTR_36_DINGPOT);
func_802BAFE4(0x82);

View File

@@ -978,7 +978,7 @@ void func_80388450(Actor *actor1, Actor *actor2)
{
f32 vec1[3];
f32 vec2[3];
void *actor3 = func_80304C38(0x22A, actor1);
void *actor3 = nodeprop_findByActorIdAndActorPosition(0x22A, actor1);
s32 val = func_80304DA8(actor3);
actor2->yaw = val;

View File

@@ -35,7 +35,7 @@ void func_80392B6C(Actor *this) {
marker_despawn(this->marker);
return;
}
phi_a0 = func_80304C38(0x3BE, this);
phi_a0 = nodeprop_findByActorIdAndActorPosition(0x3BE, this);
if (this == NULL) {
this->unk1C[0] = -1300.0f;
this->unk1C[1] = 250.0f;