mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2025-10-30 08:01:01 +00:00
Resynchronize WF platforms using Network Area Timer
This commit is contained in:
parent
6a957757d4
commit
f8c5fb0725
3 changed files with 16 additions and 30 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue