Misc sync fixes to various enemies

Considered nearest player for various things within the following
entities that I missed the first time around: cloud, koopa, monty mole,
moving coin, piranha bubbles, scuttlebug, shock wave, spindrift.
This commit is contained in:
MysterD 2020-10-17 23:58:24 -07:00
parent cbf8505516
commit 4cb49d3946
8 changed files with 26 additions and 16 deletions

View file

@ -145,9 +145,9 @@ static void cloud_act_main(void) {
} else if (o->oBehParams2ndByte != CLOUD_BP_FWOOSH) {
// This code should never run, since a lakitu cloud should always have
// a parent
if (o->oDistanceToMario > 1500.0f) {
/*if (o->oDistanceToMario > 1500.0f) {
o->oAction = CLOUD_ACT_UNLOAD;
}
}*/
} else {
cloud_fwoosh_update();
}

View file

@ -371,6 +371,10 @@ static void koopa_shelled_update(void) {
* action.
*/
static void koopa_unshelled_act_run(void) {
struct Object* player = nearest_player_to_object(o);
int distanceToPlayer = dist_between_objects(o, player);
int angleToPlayer = obj_angle_to_object(o, player);
f32 distToShell = 99999.0f;
struct Object *shell;
@ -380,9 +384,6 @@ static void koopa_unshelled_act_run(void) {
if (o->oKoopaTurningAwayFromWall) {
o->oKoopaTurningAwayFromWall = obj_resolve_collisions_and_turn(o->oKoopaTargetYaw, 0x600);
} else {
struct Object* player = nearest_player_to_object(o);
int distanceToPlayer = dist_between_objects(o, player);
int angleToPlayer = obj_angle_to_object(o, player);
// If far from home, then turn toward home
if (distanceToPlayer >= 25000.0f) {
@ -413,7 +414,7 @@ static void koopa_unshelled_act_run(void) {
cur_obj_rotate_yaw_toward(o->oKoopaTargetYaw, 0x600);
} else {
// otherwise continue running from mario
cur_obj_rotate_yaw_toward(o->oAngleToMario + 0x8000, 0x600);
cur_obj_rotate_yaw_toward(angleToPlayer + 0x8000, 0x600);
}
}

View file

@ -215,8 +215,11 @@ static void monty_mole_act_select_hole(void) {
o->oPosY = o->oFloorHeight = o->oMontyMoleCurrentHole->oPosY;
o->oPosZ = o->oMontyMoleCurrentHole->oPosZ;
struct Object* holePlayer = nearest_player_to_object(o->oMontyMoleCurrentHole);
int angleToHolePlayer = obj_angle_to_object(o->oMontyMoleCurrentHole, holePlayer);
o->oFaceAnglePitch = 0;
o->oMoveAngleYaw = o->oMontyMoleCurrentHole->oAngleToMario;
o->oMoveAngleYaw = angleToHolePlayer;
struct Object* player = nearest_player_to_object(o);
int distanceToPlayer = dist_between_objects(o, player);

View file

@ -149,10 +149,13 @@ void bhv_blue_coin_sliding_jumping_init(void) {
}
void blue_coin_sliding_away_from_mario(void) {
struct Object* player = nearest_player_to_object(o);
int angleToPlayer = obj_angle_to_object(o, player);
s16 collisionFlags;
o->oForwardVel = 15.0;
o->oMoveAngleYaw = o->oAngleToMario + 0x8000;
o->oMoveAngleYaw = angleToPlayer + 0x8000;
if (coin_step(&collisionFlags) != 0)
o->oVelY += 18.0f;

View file

@ -39,6 +39,9 @@ void bhv_piranha_plant_bubble_loop(void) {
cur_obj_set_pos_relative(parent, 0, 72.0f, 180.0f);
struct Object* parentPlayer = nearest_player_to_object(parent);
int distanceToParentPlayer = dist_between_objects(parent, parentPlayer);
switch (o->oAction) {
case PIRANHA_PLANT_BUBBLE_ACT_IDLE:
cur_obj_disable_rendering();
@ -50,7 +53,7 @@ void bhv_piranha_plant_bubble_loop(void) {
break;
case PIRANHA_PLANT_BUBBLE_ACT_GROW_SHRINK_LOOP:
if (parent->oDistanceToMario < parent->oDrawingDistance) {
if (distanceToParentPlayer < parent->oDrawingDistance) {
cur_obj_enable_rendering();
if (parent->oAction == PIRANHA_PLANT_ACT_SLEEPING) {

View file

@ -61,11 +61,11 @@ void bhv_scuttlebug_loop(void) {
case 1:
o->oForwardVel = 5.0f;
if (cur_obj_lateral_dist_from_obj_to_home(player) > 1000.0f)
o->oAngleToMario = angleToPlayer;
angleToPlayer = angleToPlayer;
else {
if (o->oScuttlebugUnkF8 == 0) {
o->oScuttlebugUnkFC = 0;
o->oAngleToMario = obj_angle_to_object(o, player);
angleToPlayer = obj_angle_to_object(o, player);
if (abs_angle_diff(angleToPlayer, o->oMoveAngleYaw) < 0x800) {
o->oScuttlebugUnkF8 = 1;
o->oVelY = 20.0f;
@ -84,11 +84,11 @@ void bhv_scuttlebug_loop(void) {
break;
case 2:
o->oForwardVel = 5.0f;
if ((s16) o->oMoveAngleYaw == (s16) o->oAngleToMario)
if ((s16) o->oMoveAngleYaw == (s16)angleToPlayer)
o->oSubAction = 1;
if (o->oPosY - o->oHomeY < -200.0f)
obj_mark_for_deletion(o);
cur_obj_rotate_yaw_toward(o->oAngleToMario, 0x400);
cur_obj_rotate_yaw_toward(angleToPlayer, 0x400);
break;
case 3:
o->oFlags &= ~8;

View file

@ -20,7 +20,7 @@ void bhv_bowser_shock_wave_loop(void) {
sp20 = o->oBowserShockWaveUnkF4 * D_8032F420[3];
if ((sp2C < o->oDistanceToMario && o->oDistanceToMario < sp28)
|| (sp24 < o->oDistanceToMario && o->oDistanceToMario < sp20))
gMarioObject->oInteractStatus |=
gMarioStates[0].marioObj->oInteractStatus |=
0x10; // This is interact_coin, but the name sounds wrong in this behiavor
}
}

View file

@ -30,9 +30,9 @@ void bhv_spindrift_loop(void) {
case 0:
approach_forward_vel(&o->oForwardVel, 4.0f, 1.0f);
if (cur_obj_lateral_dist_from_mario_to_home() > 1000.0f)
o->oAngleToMario = cur_obj_angle_to_home();
angleToPlayer = cur_obj_angle_to_home();
else if (distanceToPlayer > 300.0f)
o->oAngleToMario = angleToPlayer;
angleToPlayer = angleToPlayer;
cur_obj_rotate_yaw_toward(angleToPlayer, 0x400);
break;
case 1: