mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2024-11-26 22:13:01 +00:00
Synchronized BITFS platforms
This commit is contained in:
parent
c6da1a057a
commit
57b092c26b
4 changed files with 58 additions and 13 deletions
|
@ -55,17 +55,37 @@ void bhv_activated_back_and_forth_platform_init(void) {
|
||||||
o->oActivatedBackAndForthPlatformVertical = (u16)(o->oBehParams >> 16) & 0x0080;
|
o->oActivatedBackAndForthPlatformVertical = (u16)(o->oBehParams >> 16) & 0x0080;
|
||||||
|
|
||||||
o->oActivatedBackAndForthPlatformStartYaw = o->oFaceAngleYaw;
|
o->oActivatedBackAndForthPlatformStartYaw = o->oFaceAngleYaw;
|
||||||
|
|
||||||
|
network_init_object(o, SYNC_DISTANCE_ONLY_EVENTS);
|
||||||
|
network_init_object_field(o, &o->oPosX);
|
||||||
|
network_init_object_field(o, &o->oPosY);
|
||||||
|
network_init_object_field(o, &o->oPosZ);
|
||||||
|
network_init_object_field(o, &o->oVelX);
|
||||||
|
network_init_object_field(o, &o->oVelY);
|
||||||
|
network_init_object_field(o, &o->oVelZ);
|
||||||
|
network_init_object_field(o, &o->oActivatedBackAndForthPlatformMaxOffset);
|
||||||
|
network_init_object_field(o, &o->oActivatedBackAndForthPlatformOffset);
|
||||||
|
network_init_object_field(o, &o->oActivatedBackAndForthPlatformVel);
|
||||||
|
network_init_object_field(o, &o->oActivatedBackAndForthPlatformCountdown);
|
||||||
|
network_init_object_field(o, &o->oActivatedBackAndForthPlatformStartYaw);
|
||||||
|
network_init_object_field(o, &o->oActivatedBackAndForthPlatformVertical);
|
||||||
|
network_init_object_field(o, &o->oActivatedBackAndForthPlatformFlipRotation);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Activated back-and-forth platform update function.
|
* Activated back-and-forth platform update function.
|
||||||
*/
|
*/
|
||||||
void bhv_activated_back_and_forth_platform_update(void) {
|
void bhv_activated_back_and_forth_platform_update(void) {
|
||||||
|
u8 doSendNetwork = FALSE;
|
||||||
UNUSED s32 unused[3];
|
UNUSED s32 unused[3];
|
||||||
|
|
||||||
|
struct Object* player = nearest_player_to_object(o);
|
||||||
|
int distanceToPlayer = dist_between_objects(o, player);
|
||||||
|
int angleToPlayer = obj_angle_to_object(o, player);
|
||||||
|
|
||||||
// oVelY is used for vertical platforms' movement and also for
|
// oVelY is used for vertical platforms' movement and also for
|
||||||
// horizontal platforms' dipping up/down when Mario gets on/off them
|
// horizontal platforms' dipping up/down when Mario gets on/off them
|
||||||
if (gMarioObject->platform == o) {
|
if (cur_obj_is_any_player_on_platform()) {
|
||||||
o->oVelY = -6.0f;
|
o->oVelY = -6.0f;
|
||||||
} else {
|
} else {
|
||||||
o->oVelY = 6.0f;
|
o->oVelY = 6.0f;
|
||||||
|
@ -91,7 +111,7 @@ void bhv_activated_back_and_forth_platform_update(void) {
|
||||||
o->oActivatedBackAndForthPlatformMaxOffset)
|
o->oActivatedBackAndForthPlatformMaxOffset)
|
||||||
||
|
||
|
||||||
// The platform will not reset if Mario goes far away and it's travelling backwards
|
// The platform will not reset if Mario goes far away and it's travelling backwards
|
||||||
(o->oActivatedBackAndForthPlatformVel > 0.0f && o->oDistanceToMario > 3000.0f)) {
|
(o->oActivatedBackAndForthPlatformVel > 0.0f && distanceToPlayer > 3000.0f)) {
|
||||||
// Reset the wait timer
|
// Reset the wait timer
|
||||||
o->oActivatedBackAndForthPlatformCountdown = 20;
|
o->oActivatedBackAndForthPlatformCountdown = 20;
|
||||||
|
|
||||||
|
@ -115,6 +135,7 @@ void bhv_activated_back_and_forth_platform_update(void) {
|
||||||
// oVelY is only negative if Mario is on the platform
|
// oVelY is only negative if Mario is on the platform
|
||||||
if (o->oVelY < 0.0f) {
|
if (o->oVelY < 0.0f) {
|
||||||
o->oActivatedBackAndForthPlatformVel = 10.0f;
|
o->oActivatedBackAndForthPlatformVel = 10.0f;
|
||||||
|
doSendNetwork = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set waiting countdown to 20 frames
|
// Set waiting countdown to 20 frames
|
||||||
|
@ -143,4 +164,5 @@ void bhv_activated_back_and_forth_platform_update(void) {
|
||||||
|
|
||||||
// Compute the object's velocity using the old saved position.
|
// Compute the object's velocity using the old saved position.
|
||||||
obj_perform_position_op(POS_OP_COMPUTE_VELOCITY);
|
obj_perform_position_op(POS_OP_COMPUTE_VELOCITY);
|
||||||
|
if (doSendNetwork) { network_send_object(o); }
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,28 @@
|
||||||
// falling_rising_platform.c.inc
|
// falling_rising_platform.c.inc
|
||||||
|
|
||||||
void bhv_squishable_platform_loop(void) {
|
void bhv_squishable_platform_loop(void) {
|
||||||
|
if (!network_sync_object_initialized(o)) {
|
||||||
|
struct SyncObject* so = network_init_object(o, 4000.0f);
|
||||||
|
so->minUpdateRate = 5.0f;
|
||||||
|
network_init_object_field(o, &o->oPlatformTimer);
|
||||||
|
network_init_object_field(o, &o->header.gfx.scale[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((((o->oPlatformTimer / 0x80) % 300) == 0) && network_owns_object(o)) {
|
||||||
|
network_send_object(o);
|
||||||
|
}
|
||||||
|
|
||||||
o->header.gfx.scale[1] = (sins(o->oPlatformTimer) + 1.0) * 0.3 + 0.4;
|
o->header.gfx.scale[1] = (sins(o->oPlatformTimer) + 1.0) * 0.3 + 0.4;
|
||||||
o->oPlatformTimer += 0x80;
|
o->oPlatformTimer += 0x80;
|
||||||
}
|
}
|
||||||
|
|
||||||
void bhv_bitfs_sinking_platform_loop(void) {
|
void bhv_bitfs_sinking_platform_loop(void) {
|
||||||
|
if (!network_sync_object_initialized(o)) {
|
||||||
|
struct SyncObject* so = network_init_object(o, 4000.0f);
|
||||||
|
so->minUpdateRate = 5.0f;
|
||||||
|
network_init_object_field(o, &o->oPlatformTimer);
|
||||||
|
}
|
||||||
|
|
||||||
o->oPosY -=
|
o->oPosY -=
|
||||||
sins(o->oPlatformTimer)
|
sins(o->oPlatformTimer)
|
||||||
* 0.58; //! f32 double conversion error accumulates on Wii VC causing the platform to rise up
|
* 0.58; //! f32 double conversion error accumulates on Wii VC causing the platform to rise up
|
||||||
|
@ -18,6 +35,16 @@ void bhv_ddd_moving_pole_loop(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void bhv_bitfs_sinking_cage_platform_loop(void) {
|
void bhv_bitfs_sinking_cage_platform_loop(void) {
|
||||||
|
if (!network_sync_object_initialized(o)) {
|
||||||
|
struct SyncObject* so = network_init_object(o, 4000.0f);
|
||||||
|
so->minUpdateRate = 5.0f;
|
||||||
|
network_init_object_field(o, &o->oPlatformTimer);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((((o->oPlatformTimer / 0x100) % 60) == 0) && network_owns_object(o)) {
|
||||||
|
network_send_object(o);
|
||||||
|
}
|
||||||
|
|
||||||
if (o->oBehParams2ndByte != 0) {
|
if (o->oBehParams2ndByte != 0) {
|
||||||
if (o->oTimer == 0)
|
if (o->oTimer == 0)
|
||||||
o->oPosY -= 300.0f;
|
o->oPosY -= 300.0f;
|
||||||
|
@ -25,4 +52,5 @@ void bhv_bitfs_sinking_cage_platform_loop(void) {
|
||||||
} else
|
} else
|
||||||
o->oPosY -= sins(o->oPlatformTimer) * 3.0f;
|
o->oPosY -= sins(o->oPlatformTimer) * 3.0f;
|
||||||
o->oPlatformTimer += 0x100;
|
o->oPlatformTimer += 0x100;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,18 +34,13 @@ void bhv_sliding_plat_2_init(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void bhv_sliding_plat_2_loop(void) {
|
void bhv_sliding_plat_2_loop(void) {
|
||||||
if (network_sync_object_initialized(o)) {
|
if (!network_sync_object_initialized(o)) {
|
||||||
struct SyncObject* so = network_init_object(o, 1000.0f);
|
struct SyncObject* so = network_init_object(o, 4000.0f);
|
||||||
so->maxUpdateRate = 5.0f;
|
so->minUpdateRate = 5.0f;
|
||||||
|
network_init_object_field(o, &o->oBackAndForthPlatformUnkF4);
|
||||||
|
network_init_object_field(o, &o->oBackAndForthPlatformUnkF8);
|
||||||
network_init_object_field(o, &o->oBackAndForthPlatformUnkFC);
|
network_init_object_field(o, &o->oBackAndForthPlatformUnkFC);
|
||||||
network_init_object_field(o, &o->oBackAndForthPlatformUnk100);
|
network_init_object_field(o, &o->oBackAndForthPlatformUnk100);
|
||||||
network_init_object_field(o, &o->oPosX);
|
|
||||||
network_init_object_field(o, &o->oPosY);
|
|
||||||
network_init_object_field(o, &o->oPosZ);
|
|
||||||
network_init_object_field(o, &o->oVelX);
|
|
||||||
network_init_object_field(o, &o->oVelY);
|
|
||||||
network_init_object_field(o, &o->oVelZ);
|
|
||||||
network_init_object_field(o, &o->oTimer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (o->oTimer > 10) {
|
if (o->oTimer > 10) {
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
|
|
||||||
static u8 warpToLevel = LEVEL_HMC;
|
static u8 warpToLevel = LEVEL_BITFS;
|
||||||
|
|
||||||
#define SCANCODE_0 0x0B
|
#define SCANCODE_0 0x0B
|
||||||
#define SCANCODE_1 0x02
|
#define SCANCODE_1 0x02
|
||||||
|
|
Loading…
Reference in a new issue