mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2024-10-19 03:32:41 +00:00
Synchronized Bubs
This commit is contained in:
parent
6dc5819583
commit
f0eba71c77
1 changed files with 25 additions and 7 deletions
|
@ -20,8 +20,11 @@ void bub_spawner_act_0(void) {
|
|||
}
|
||||
|
||||
void bub_spawner_act_1(void) {
|
||||
if (gMarioObject->oPosY - o->oPosY > 2000.0f)
|
||||
#ifndef NODRAWINGDISTANCE
|
||||
struct Object* player = nearest_player_to_object(o);
|
||||
if (player->oPosY - o->oPosY > 2000.0f)
|
||||
o->oAction = 2;
|
||||
#endif
|
||||
}
|
||||
|
||||
void bub_spawner_act_2(void) {
|
||||
|
@ -55,12 +58,14 @@ void bub_act_0(void) {
|
|||
}
|
||||
|
||||
void bub_act_1(void) {
|
||||
struct Object* player = nearest_player_to_object(o);
|
||||
int distanceToPlayer = dist_between_objects(o, player);
|
||||
f32 dy;
|
||||
if (o->oTimer == 0) {
|
||||
o->oForwardVel = random_float() * 2 + 2;
|
||||
o->oCheepCheepUnk108 = random_float();
|
||||
}
|
||||
dy = o->oPosY - gMarioObject->oPosY;
|
||||
dy = o->oPosY - player->oPosY;
|
||||
if (o->oPosY < o->oCheepCheepUnkF4 - 50.0f) {
|
||||
if (dy < 0.0f)
|
||||
dy = 0.0f - dy;
|
||||
|
@ -77,13 +82,15 @@ void bub_act_1(void) {
|
|||
o->oAngleToMario = cur_obj_angle_to_home();
|
||||
cur_obj_rotate_yaw_toward(o->oAngleToMario, 0x100);
|
||||
if (o->oDistanceToMario < 200.0f)
|
||||
if (o->oCheepCheepUnk108 < 0.5)
|
||||
if (distanceToPlayer < 0.5)
|
||||
o->oAction = 2;
|
||||
if (o->oInteractStatus & INT_STATUS_INTERACTED)
|
||||
o->oAction = 2;
|
||||
}
|
||||
|
||||
void bub_act_2(void) {
|
||||
struct Object* player = nearest_player_to_object(o);
|
||||
int angleToPlayer = obj_angle_to_object(o, player);
|
||||
f32 dy;
|
||||
if (o->oTimer < 20) {
|
||||
if (o->oInteractStatus & INT_STATUS_INTERACTED)
|
||||
|
@ -94,7 +101,7 @@ void bub_act_2(void) {
|
|||
cur_obj_play_sound_2(SOUND_GENERAL_MOVING_WATER);
|
||||
if (o->oForwardVel == 0.0f)
|
||||
o->oForwardVel = 6.0f;
|
||||
dy = o->oPosY - gMarioObject->oPosY;
|
||||
dy = o->oPosY - player->oPosY;
|
||||
if (o->oPosY < o->oCheepCheepUnkF4 - 50.0f) {
|
||||
if (dy < 0.0f)
|
||||
dy = 0.0f - dy;
|
||||
|
@ -108,8 +115,8 @@ void bub_act_2(void) {
|
|||
o->oPosY -= 1.0f;
|
||||
}
|
||||
if (cur_obj_lateral_dist_from_mario_to_home() > 800.0f)
|
||||
o->oAngleToMario = cur_obj_angle_to_home();
|
||||
cur_obj_rotate_yaw_toward(o->oAngleToMario + 0x8000, 0x400);
|
||||
angleToPlayer = cur_obj_angle_to_home();
|
||||
cur_obj_rotate_yaw_toward(angleToPlayer + 0x8000, 0x400);
|
||||
if (o->oTimer > 200 && o->oDistanceToMario > 600.0f)
|
||||
o->oAction = 1;
|
||||
}
|
||||
|
@ -117,8 +124,19 @@ void bub_act_2(void) {
|
|||
void (*sCheepCheepActions[])(void) = { bub_act_0, bub_act_1, bub_act_2 };
|
||||
|
||||
void bhv_bub_loop(void) {
|
||||
if (!network_sync_object_initialized(o)) {
|
||||
network_init_object(o, 4000.0f);
|
||||
network_init_object_field(o, &o->oCheepCheepUnkF4);
|
||||
network_init_object_field(o, &o->oCheepCheepUnkF8);
|
||||
network_init_object_field(o, &o->oCheepCheepUnkFC);
|
||||
network_init_object_field(o, &o->oCheepCheepUnk104);
|
||||
network_init_object_field(o, &o->oCheepCheepUnk108);
|
||||
}
|
||||
|
||||
struct Object* player = nearest_player_to_object(o);
|
||||
|
||||
o->oCheepCheepUnkF4 = find_water_level(o->oPosX, o->oPosZ);
|
||||
o->oCheepCheepUnkF8 = gMarioObject->oPosY + o->oCheepCheepUnkFC;
|
||||
o->oCheepCheepUnkF8 = player->oPosY + o->oCheepCheepUnkFC;
|
||||
o->oWallHitboxRadius = 30.0f;
|
||||
cur_obj_update_floor_and_walls();
|
||||
cur_obj_call_action_function(sCheepCheepActions);
|
||||
|
|
Loading…
Reference in a new issue