Resynchronize WF platforms using Network Area Timer

This commit is contained in:
MysterD 2021-08-03 23:26:32 -07:00
parent 6a957757d4
commit f8c5fb0725
3 changed files with 16 additions and 30 deletions

View file

@ -1119,8 +1119,8 @@ void cur_obj_fake_update(void) {
}
u16 position_based_random_u16(void) {
u16 value = (u16)(gCurrentObject->oPosX * 2659);
value ^= (u16)(gCurrentObject->oPosY * 1901);
u16 value = (u16)(gCurrentObject->oPosX * 17);
value ^= (u16)(gCurrentObject->oPosY * 613);
value ^= (u16)(gCurrentObject->oPosZ * 3331);
return value;
}

View file

@ -8,33 +8,25 @@ struct WFRotatingPlatformData sWFRotatingPlatformData[] = {
{ 0, 150, wdw_seg7_collision_070186B4, 1000 }
};
void bhv_wf_rotating_wooden_platform_loop(void) {
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->oAngleVelYaw);
network_init_object_field(o, &o->oFaceAngleYaw);
network_init_object_field(o, &o->oMoveAngleYaw);
network_init_object_field(o, &o->oTimer);
}
static void bhv_wf_rotating_wooden_platform_loop_inner(void) {
if (o->oAction == 0) {
o->oAngleVelYaw = 0;
if (o->oTimer > 60 && network_owns_object(o)) {
if (o->oTimer > 60) {
o->oAction++;
o->oFaceAngleYaw = (o->oFaceAngleYaw & 0x8000);
network_send_object(o);
}
} else {
o->oAngleVelYaw = 0x100;
if (o->oTimer > 126) {
if (o->oTimer > 126)
o->oAction = 0;
}
cur_obj_play_sound_1(SOUND_ENV_ELEVATOR2);
}
cur_obj_rotate_face_angle_using_vel();
}
void bhv_wf_rotating_wooden_platform_loop(void) {
cur_obj_area_timer_loop(380, bhv_wf_rotating_wooden_platform_loop_inner);
}
void bhv_rotating_platform_loop(void) {
s8 sp1F = o->oBehParams >> 24;
if (o->oTimer == 0) {

View file

@ -19,19 +19,10 @@ void bhv_wf_sliding_platform_init(void) {
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);
}
o->oTimer = position_based_random_float_position() * 100.0f;
}
void bhv_wf_sliding_platform_loop(void) {
static void bhv_wf_sliding_platform_loop_inner(void) {
switch (o->oAction) {
case WF_SLID_BRICK_PTFM_ACT_WAIT:
if (o->oTimer >= 101) {
@ -59,12 +50,15 @@ void bhv_wf_sliding_platform_loop(void) {
o->oPosX = o->oHomeX;
}
if (o->oTimer >= 90 && network_owns_object(o)) {
if (o->oTimer == 90) {
o->oAction = WF_SLID_BRICK_PTFM_ACT_EXTEND;
o->oForwardVel = o->oWFSlidBrickPtfmMovVel;
o->oMoveAngleYaw -= 0x8000;
network_send_object(o);
}
break;
}
}
void bhv_wf_sliding_platform_loop(void) {
cur_obj_area_timer_loop(152, bhv_wf_sliding_platform_loop_inner);
}