sm64pc/src/game/behaviors/grill_door.inc.c

54 lines
2.0 KiB
C

// grill_door.c.inc
extern u8 bob_seg7_collision_gate[];
extern u8 hmc_seg7_collision_0702B65C[];
struct Struct8032FCE8 D_8032FCE8[] = { { 320, MODEL_BOB_BARS_GRILLS, bob_seg7_collision_gate },
{ 410, MODEL_HMC_RED_GRILLS, hmc_seg7_collision_0702B65C } };
void bhv_openable_cage_door_loop(void) {
if (gCurrentObject->oAction == 0) {
if (gCurrentObject->parentObj->oOpenableGrillUnk88 != 0)
gCurrentObject->oAction++;
} else if (gCurrentObject->oAction == 1) {
if (gCurrentObject->oTimer < 64)
gCurrentObject->oMoveAngleYaw -= gCurrentObject->oBehParams2ndByte * 0x100;
else
gCurrentObject->oAction++;
}
}
void bhv_openable_grill_loop(void) {
struct Object *sp3C;
s32 sp38;
switch (o->oAction) {
case 0:
sp38 = o->oBehParams2ndByte;
sp3C = spawn_object_relative(-1, D_8032FCE8[sp38].unk0, 0, 0, o, D_8032FCE8[sp38].unk1,
bhvOpenableCageDoor);
sp3C->oMoveAngleYaw += 0x8000;
obj_set_collision_data(sp3C, D_8032FCE8[sp38].unk2);
sp3C = spawn_object_relative(1, -D_8032FCE8[sp38].unk0, 0, 0, o, D_8032FCE8[sp38].unk1,
bhvOpenableCageDoor);
obj_set_collision_data(sp3C, D_8032FCE8[sp38].unk2);
o->oAction++;
break;
case 1:
if ((o->oOpenableGrillUnkF4 = cur_obj_nearest_object_with_behavior(bhvFloorSwitchGrills))
!= NULL)
o->oAction++;
break;
case 2:
sp3C = o->oOpenableGrillUnkF4;
if (sp3C->oAction == 2) {
o->oOpenableGrillUnk88 = 2;
cur_obj_play_sound_2(SOUND_GENERAL_CAGE_OPEN);
o->oAction++;
if (o->oBehParams2ndByte != 0)
play_puzzle_jingle();
}
break;
case 3:
break;
}
}