mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2024-10-20 20:22:38 +00:00
8c650a5b7d
This allows clients to spawn a new sync object after the level loads and synchronize it. Changed how un-initialized sync objects are detected Koopa shells are the first thing to use this new system Removed network_object_settings() command, instead explicitly setting the sync object parameters
70 lines
2.2 KiB
C
70 lines
2.2 KiB
C
// sliding_platform.c.inc
|
|
|
|
void bhv_wf_sliding_platform_init(void) {
|
|
o->oFaceAngleYaw -= 0x4000;
|
|
o->oPosX += 2.0f;
|
|
o->oHomeX = o->oPosX;
|
|
|
|
switch (o->oBehParams2ndByte) {
|
|
case WF_SLID_BRICK_PTFM_BP_MOV_VEL_10:
|
|
o->oWFSlidBrickPtfmMovVel = 10.0f;
|
|
break;
|
|
|
|
case WF_SLID_BRICK_PTFM_BP_MOV_VEL_15:
|
|
o->oWFSlidBrickPtfmMovVel = 15.0f;
|
|
break;
|
|
|
|
case WF_SLID_BRICK_PTFM_BP_MOV_VEL_20:
|
|
o->oWFSlidBrickPtfmMovVel = 20.0f;
|
|
break;
|
|
}
|
|
|
|
o->oTimer = random_float() * 100.0f;
|
|
|
|
if (!network_sync_object_initialized(o)) {
|
|
network_init_object(o, SYNC_DISTANCE_ONLY_EVENTS);
|
|
network_init_object_field(o, &o->oAction);
|
|
network_init_object_field(o, &o->oMoveAngleYaw);
|
|
network_init_object_field(o, &o->oPosX);
|
|
network_init_object_field(o, &o->oForwardVel);
|
|
network_init_object_field(o, &o->oTimer);
|
|
}
|
|
}
|
|
|
|
void bhv_wf_sliding_platform_loop(void) {
|
|
switch (o->oAction) {
|
|
case WF_SLID_BRICK_PTFM_ACT_WAIT:
|
|
if (o->oTimer >= 101) {
|
|
o->oAction = WF_SLID_BRICK_PTFM_ACT_EXTEND;
|
|
o->oForwardVel = o->oWFSlidBrickPtfmMovVel;
|
|
}
|
|
break;
|
|
|
|
case WF_SLID_BRICK_PTFM_ACT_EXTEND:
|
|
if (o->oTimer >= 500.0f / o->oWFSlidBrickPtfmMovVel) {
|
|
o->oForwardVel = 0;
|
|
o->oPosX = o->oHomeX + 510.0f;
|
|
}
|
|
|
|
if (o->oTimer == 60) {
|
|
o->oAction = WF_SLID_BRICK_PTFM_ACT_RETRACT;
|
|
o->oForwardVel = o->oWFSlidBrickPtfmMovVel;
|
|
o->oMoveAngleYaw -= 0x8000;
|
|
}
|
|
break;
|
|
|
|
case WF_SLID_BRICK_PTFM_ACT_RETRACT:
|
|
if (o->oTimer >= 500.0f / o->oWFSlidBrickPtfmMovVel) {
|
|
o->oForwardVel = 0;
|
|
o->oPosX = o->oHomeX;
|
|
}
|
|
|
|
if (o->oTimer >= 90 && network_owns_object(o)) {
|
|
o->oAction = WF_SLID_BRICK_PTFM_ACT_EXTEND;
|
|
o->oForwardVel = o->oWFSlidBrickPtfmMovVel;
|
|
o->oMoveAngleYaw -= 0x8000;
|
|
network_send_object(o);
|
|
}
|
|
break;
|
|
}
|
|
}
|