2019-08-25 04:46:40 +00:00
|
|
|
// checkerboard_platform.c.inc
|
|
|
|
|
|
|
|
struct Struct8032F754 D_8032F754[] = { { 145, { 0.7f, 1.5f, 0.7f }, 7.0f },
|
|
|
|
{ 235, { 1.2f, 2.0f, 1.2f }, 11.6f } };
|
|
|
|
|
|
|
|
void bhv_checkerboard_elevator_group_init(void) {
|
2020-08-28 04:39:13 +00:00
|
|
|
o->header.gfx.node.flags |= GRAPH_RENDER_INVISIBLE;
|
|
|
|
struct SyncObject* so = network_init_object(o, 1000.0f);
|
|
|
|
so->hasStandardFields = FALSE;
|
|
|
|
so->maxUpdateRate = 5.0f;
|
|
|
|
so->keepRandomSeed = TRUE;
|
2019-08-25 04:46:40 +00:00
|
|
|
s32 sp3C;
|
|
|
|
s32 sp38;
|
|
|
|
s32 sp34;
|
|
|
|
s32 i;
|
|
|
|
struct Object *sp2C;
|
|
|
|
if (o->oBehParams2ndByte == 0)
|
|
|
|
o->oBehParams2ndByte = 65;
|
|
|
|
sp3C = o->oBehParams2ndByte * 10;
|
|
|
|
sp34 = (o->oBehParams >> 24) & 0XFF;
|
|
|
|
for (i = 0; i < 2; i++) {
|
|
|
|
if (i == 0)
|
|
|
|
sp38 = -D_8032F754[sp34].unk0;
|
|
|
|
else
|
|
|
|
sp38 = D_8032F754[sp34].unk0;
|
2019-10-05 19:08:05 +00:00
|
|
|
|
2019-08-25 04:46:40 +00:00
|
|
|
sp2C = spawn_object_relative(i, 0, i * sp3C, sp38, o, MODEL_CHECKERBOARD_PLATFORM,
|
|
|
|
bhvCheckerboardPlatformSub);
|
2019-10-05 19:08:05 +00:00
|
|
|
sp2C->oCheckerBoardPlatformUnk1AC = D_8032F754[sp34].unk2;
|
2020-03-02 03:42:52 +00:00
|
|
|
vec3f_copy_2(sp2C->header.gfx.scale, D_8032F754[sp34].unk1);
|
2020-08-28 04:39:13 +00:00
|
|
|
|
|
|
|
network_init_object_field(o, &sp2C->oMoveAnglePitch);
|
|
|
|
network_init_object_field(o, &sp2C->oMoveAngleYaw);
|
|
|
|
network_init_object_field(o, &sp2C->oFaceAnglePitch);
|
|
|
|
network_init_object_field(o, &sp2C->oFaceAngleYaw);
|
|
|
|
network_init_object_field(o, &sp2C->oAngleVelPitch);
|
|
|
|
network_init_object_field(o, &sp2C->oAngleVelYaw);
|
|
|
|
network_init_object_field(o, &sp2C->oForwardVel);
|
|
|
|
network_init_object_field(o, &sp2C->oPosX);
|
|
|
|
network_init_object_field(o, &sp2C->oPosY);
|
|
|
|
network_init_object_field(o, &sp2C->oPosZ);
|
|
|
|
network_init_object_field(o, &sp2C->oVelX);
|
|
|
|
network_init_object_field(o, &sp2C->oVelY);
|
|
|
|
network_init_object_field(o, &sp2C->oVelZ);
|
|
|
|
network_init_object_field(o, &sp2C->oAction);
|
|
|
|
network_init_object_field(o, &sp2C->oPrevAction);
|
|
|
|
network_init_object_field(o, &sp2C->oTimer);
|
|
|
|
network_init_object_field(o, &sp2C->oCheckerBoardPlatformUnkF8);
|
|
|
|
network_init_object_field(o, &sp2C->oCheckerBoardPlatformUnkFC);
|
2019-08-25 04:46:40 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-08-28 04:39:13 +00:00
|
|
|
void bhv_checkerboard_elevator_group_loop(void) { }
|
|
|
|
|
2020-03-02 03:42:52 +00:00
|
|
|
void checkerboard_plat_act_move_y(UNUSED s32 unused, f32 vel, s32 a2) {
|
2019-08-25 04:46:40 +00:00
|
|
|
o->oMoveAnglePitch = 0;
|
|
|
|
o->oAngleVelPitch = 0;
|
|
|
|
o->oForwardVel = 0.0f;
|
|
|
|
o->oVelY = vel;
|
|
|
|
if (o->oTimer > a2)
|
|
|
|
o->oAction++;
|
|
|
|
}
|
|
|
|
|
2020-03-02 03:42:52 +00:00
|
|
|
void checkerboard_plat_act_rotate(s32 a0, s16 a1) {
|
2019-08-25 04:46:40 +00:00
|
|
|
o->oVelY = 0.0f;
|
|
|
|
o->oAngleVelPitch = a1;
|
|
|
|
if (o->oTimer + 1 == 0x8000 / absi(a1))
|
|
|
|
o->oAction = a0;
|
|
|
|
o->oCheckerBoardPlatformUnkF8 = a0;
|
|
|
|
}
|
|
|
|
|
|
|
|
void bhv_checkerboard_platform_init(void) {
|
|
|
|
o->oCheckerBoardPlatformUnkFC = o->parentObj->oBehParams2ndByte;
|
|
|
|
}
|
|
|
|
|
|
|
|
void bhv_checkerboard_platform_loop(void) {
|
2019-10-05 19:08:05 +00:00
|
|
|
f32 sp24 = o->oCheckerBoardPlatformUnk1AC;
|
2019-08-25 04:46:40 +00:00
|
|
|
o->oCheckerBoardPlatformUnkF8 = 0;
|
|
|
|
if (o->oDistanceToMario < 1000.0f)
|
2020-03-02 03:42:52 +00:00
|
|
|
cur_obj_play_sound_1(SOUND_ENV_ELEVATOR4);
|
2019-08-25 04:46:40 +00:00
|
|
|
switch (o->oAction) {
|
|
|
|
case 0:
|
|
|
|
if (o->oBehParams2ndByte == 0)
|
|
|
|
o->oAction = 1;
|
|
|
|
else
|
|
|
|
o->oAction = 3;
|
|
|
|
break;
|
|
|
|
case 1:
|
2020-03-02 03:42:52 +00:00
|
|
|
checkerboard_plat_act_move_y(2, 10.0f, o->oCheckerBoardPlatformUnkFC);
|
2019-08-25 04:46:40 +00:00
|
|
|
break;
|
|
|
|
case 2:
|
2020-03-02 03:42:52 +00:00
|
|
|
checkerboard_plat_act_rotate(3, 512);
|
2019-08-25 04:46:40 +00:00
|
|
|
break;
|
|
|
|
case 3:
|
2020-03-02 03:42:52 +00:00
|
|
|
checkerboard_plat_act_move_y(4, -10.0f, o->oCheckerBoardPlatformUnkFC);
|
2019-08-25 04:46:40 +00:00
|
|
|
break;
|
|
|
|
case 4:
|
2020-03-02 03:42:52 +00:00
|
|
|
checkerboard_plat_act_rotate(1, -512);
|
2019-08-25 04:46:40 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
o->oMoveAnglePitch += absi(o->oAngleVelPitch);
|
|
|
|
o->oFaceAnglePitch += absi(o->oAngleVelPitch);
|
|
|
|
o->oFaceAngleYaw = o->oMoveAngleYaw;
|
|
|
|
if (o->oMoveAnglePitch != 0) {
|
|
|
|
o->oForwardVel = signum_positive(o->oAngleVelPitch) * sins(o->oMoveAnglePitch) * sp24;
|
|
|
|
o->oVelY = signum_positive(o->oAngleVelPitch) * coss(o->oMoveAnglePitch) * sp24;
|
|
|
|
}
|
|
|
|
if (o->oCheckerBoardPlatformUnkF8 == 1) {
|
|
|
|
o->oAngleVelPitch = 0;
|
|
|
|
o->oFaceAnglePitch &= ~0x7FFF;
|
2020-03-02 03:42:52 +00:00
|
|
|
cur_obj_move_using_fvel_and_gravity();
|
2019-08-25 04:46:40 +00:00
|
|
|
} else
|
2020-03-02 03:42:52 +00:00
|
|
|
cur_obj_move_using_fvel_and_gravity();
|
2019-08-25 04:46:40 +00:00
|
|
|
load_object_collision_model();
|
|
|
|
}
|