Path: blob/master/src/game/behaviors/breakable_box_small.inc.c
7861 views
// breakable_box.c.inc12struct ObjectHitbox sBreakableBoxSmallHitbox = {3/* interactType: */ INTERACT_GRABBABLE,4/* downOffset: */ 20,5/* damageOrCoinValue: */ 0,6/* health: */ 1,7/* numLootCoins: */ 0,8/* radius: */ 150,9/* height: */ 250,10/* hurtboxRadius: */ 150,11/* hurtboxHeight: */ 250,12};1314void bhv_breakable_box_small_init(void) {15o->oGravity = 2.5f;16o->oFriction = 0.99f;17o->oBuoyancy = 1.4f;18cur_obj_scale(0.4f);19obj_set_hitbox(o, &sBreakableBoxSmallHitbox);20o->oAnimState = 1;21o->activeFlags |= ACTIVE_FLAG_UNK9;22}2324void small_breakable_box_spawn_dust(void) {25struct Object *sp24 = spawn_object(o, MODEL_SMOKE, bhvSmoke);26sp24->oPosX += (s32)(random_float() * 80.0f) - 40;27sp24->oPosZ += (s32)(random_float() * 80.0f) - 40;28}2930void small_breakable_box_act_move(void) {31s16 sp1E = object_step();3233obj_attack_collided_from_other_object(o);34if (sp1E == 1)35cur_obj_play_sound_2(SOUND_GENERAL_BOX_LANDING_2);36if (sp1E & 1) {37if (o->oForwardVel > 20.0f) {38cur_obj_play_sound_2(SOUND_ENV_SLIDING);39small_breakable_box_spawn_dust();40}41}4243if (sp1E & 2) {44spawn_mist_particles();45spawn_triangle_break_particles(20, MODEL_DIRT_ANIMATION, 0.7f, 3);46obj_spawn_yellow_coins(o, 3);47create_sound_spawner(SOUND_GENERAL_BREAK_BOX);48o->activeFlags = ACTIVE_FLAG_DEACTIVATED;49}5051obj_check_floor_death(sp1E, sObjFloor);52}5354void breakable_box_small_released_loop(void) {55o->oBreakableBoxSmallFramesSinceReleased++;5657// Begin flashing58if (o->oBreakableBoxSmallFramesSinceReleased > 810) {59if (o->oBreakableBoxSmallFramesSinceReleased & 1)60o->header.gfx.node.flags |= GRAPH_RENDER_INVISIBLE;61else62o->header.gfx.node.flags &= ~GRAPH_RENDER_INVISIBLE;63}6465// Despawn, and create a corkbox respawner66if (o->oBreakableBoxSmallFramesSinceReleased > 900) {67create_respawner(MODEL_BREAKABLE_BOX_SMALL, bhvBreakableBoxSmall, 3000);68o->activeFlags = ACTIVE_FLAG_DEACTIVATED;69}70}7172void breakable_box_small_idle_loop(void) {73switch (o->oAction) {74case 0:75small_breakable_box_act_move();76break;7778case 100:79obj_lava_death();80break;8182case 101:83o->activeFlags = ACTIVE_FLAG_DEACTIVATED;84create_respawner(MODEL_BREAKABLE_BOX_SMALL, bhvBreakableBoxSmall, 3000);85break;86}8788if (o->oBreakableBoxSmallReleased == 1)89breakable_box_small_released_loop();90}9192void breakable_box_small_get_dropped(void) {93cur_obj_become_tangible();94cur_obj_enable_rendering();95cur_obj_get_dropped();96o->header.gfx.node.flags &= ~GRAPH_RENDER_INVISIBLE;97o->oHeldState = 0;98o->oBreakableBoxSmallReleased = 1;99o->oBreakableBoxSmallFramesSinceReleased = 0;100}101102void breakable_box_small_get_thrown(void) {103cur_obj_become_tangible();104cur_obj_enable_rendering_2();105cur_obj_enable_rendering();106o->header.gfx.node.flags &= ~GRAPH_RENDER_INVISIBLE;107o->oHeldState = 0;108o->oFlags &= ~0x08;109o->oForwardVel = 40.0f;110o->oVelY = 20.0f;111o->oBreakableBoxSmallReleased = 1;112o->oBreakableBoxSmallFramesSinceReleased = 0;113o->activeFlags &= ~ACTIVE_FLAG_UNK9;114}115116void bhv_breakable_box_small_loop(void) {117switch (o->oHeldState) {118case 0:119breakable_box_small_idle_loop();120break;121122case 1:123cur_obj_disable_rendering();124cur_obj_become_intangible();125break;126127case 2:128breakable_box_small_get_thrown();129break;130131case 3:132breakable_box_small_get_dropped();133break;134}135136o->oInteractStatus = 0;137}138139140