#include #include "functions.h" #include "variables.h" typedef struct { s32 unk0; }ActorLocal_Core2_3ECE0; void chBubble_update(Actor *this); extern void func_802F32C4(s32, f32[3], f32, ActorMarker *, s32(*)(f32[3], f32, ActorMarker *)); /* .data */ ActorInfo chBubble = { MARKER_6B_GLOOPBUBBLE, ACTOR_E7_GLOOP_BUBBLE, ASSET_704_SPRITE_BUBBLE, 0, NULL, chBubble_update, actor_update_func_80326224, func_80325340, 0, 0, 0.0f, 0 }; /* .code */ s32 __chBubble_func_802C5C70(f32 arg0[3], f32 arg1, ActorMarker *marker){ s32 pad2C; Actor *this = marker_getActor(marker); ActorLocal_Core2_3ECE0 *local = (ActorLocal_Core2_3ECE0 *) &this->local; s32 pad20; s32 sp1C = local->unk0; this->position_x = arg0[0]; this->position_y = arg0[1] - arg1/2; this->position_z = arg0[2]; func_8032AA58(this, arg1/200.0); this->lifetime_value -= time_getDelta(); if(this->lifetime_value < 0.0f){ sp1C = 1; } if(sp1C) marker_despawn(marker); return sp1C; } void __chBubble_freeCallback(Actor *this){ func_8030E988(SFX_C5_TWINKLY_POP, 1.0f, 32000, this->position, 100.0f, 3000.0f); } void __chBubble_collisionCallback(ActorMarker *this_marker, ActorMarker *other_marker){ Actor *this = marker_getActor(this_marker); ActorLocal_Core2_3ECE0 *local = (ActorLocal_Core2_3ECE0 *) &this->local; local->unk0 = 1; this_marker->collidable = FALSE; } void chBubble_update(Actor *this){ if(!this->initialized){ this->initialized = TRUE; marker_setCollisionScripts(this->marker, __chBubble_collisionCallback, NULL, NULL); marker_setFreeMethod(this->marker, __chBubble_freeCallback); func_802F32C4(func_8032994C(), this->position, 200.0f, this->marker, __chBubble_func_802C5C70); this->lifetime_value = 10.0f; } }