Added hacks for fire spitter and skeeter to prevent glitching through the floor on water level change
This commit is contained in:
parent
d911c09c25
commit
efd22a81ab
|
@ -481,7 +481,8 @@
|
||||||
#define /*0x0F4*/ oFallingPillarPitchAcceleration OBJECT_FIELD_F32(0x1B)
|
#define /*0x0F4*/ oFallingPillarPitchAcceleration OBJECT_FIELD_F32(0x1B)
|
||||||
|
|
||||||
/* Fire Spitter */
|
/* Fire Spitter */
|
||||||
#define /*0x0F4*/ oFireSpitterScaleVel OBJECT_FIELD_F32(0x1B)
|
#define /*0x0F4*/ oFireSpitterScaleVel OBJECT_FIELD_F32(0x1B)
|
||||||
|
#define /*0x0F8*/ oFireSpitterLastWaterY OBJECT_FIELD_F32(0x1C)
|
||||||
|
|
||||||
/* Blue Fish */
|
/* Blue Fish */
|
||||||
#define /*0x0F4*/ oBlueFishRandomVel OBJECT_FIELD_F32(0x1B)
|
#define /*0x0F4*/ oBlueFishRandomVel OBJECT_FIELD_F32(0x1B)
|
||||||
|
@ -867,6 +868,7 @@
|
||||||
#define /*0x0F8*/ oSkeeterUnkF8 OBJECT_FIELD_S32(0x1C)
|
#define /*0x0F8*/ oSkeeterUnkF8 OBJECT_FIELD_S32(0x1C)
|
||||||
#define /*0x0FC*/ oSkeeterUnkFC OBJECT_FIELD_F32(0x1D)
|
#define /*0x0FC*/ oSkeeterUnkFC OBJECT_FIELD_F32(0x1D)
|
||||||
#define /*0x100*/ oSkeeterWaitTime OBJECT_FIELD_S32(0x1E)
|
#define /*0x100*/ oSkeeterWaitTime OBJECT_FIELD_S32(0x1E)
|
||||||
|
#define /*0x0F8*/ oSkeeterLastWaterY OBJECT_FIELD_F32(0x1F)
|
||||||
#define /*0x1AC*/ oSkeeterUnk1AC OBJECT_FIELD_S16(0x49, 0)
|
#define /*0x1AC*/ oSkeeterUnk1AC OBJECT_FIELD_S16(0x49, 0)
|
||||||
|
|
||||||
/* Jrb Sliding Box */
|
/* Jrb Sliding Box */
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
static void fire_spitter_act_idle(void) {
|
static void fire_spitter_act_idle(void) {
|
||||||
struct Object* player = nearest_player_to_object(o);
|
struct Object* player = nearest_player_to_object(o);
|
||||||
int distanceToPlayer = dist_between_objects(o, player);
|
int distanceToPlayer = dist_between_objects(o, player);
|
||||||
|
|
||||||
approach_f32_ptr(&o->header.gfx.scale[0], 0.2f, 0.002f);
|
approach_f32_ptr(&o->header.gfx.scale[0], 0.2f, 0.002f);
|
||||||
if (o->oTimer > 150 && distanceToPlayer < 800.0f && !(o->oMoveFlags & OBJ_MOVE_MASK_IN_WATER)) {
|
if (o->oTimer > 150 && distanceToPlayer < 800.0f && !(o->oMoveFlags & OBJ_MOVE_MASK_IN_WATER)) {
|
||||||
o->oAction = FIRE_SPITTER_ACT_SPIT_FIRE;
|
o->oAction = FIRE_SPITTER_ACT_SPIT_FIRE;
|
||||||
|
@ -70,5 +69,11 @@ void bhv_fire_spitter_update(void) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// HACK: when water level suddenly changes, the fire spitter can disappear into the floor
|
||||||
|
f32 waterLevel = find_water_level(o->oPosX, o->oPosZ);
|
||||||
|
if (fabs(o->oFireSpitterLastWaterY - waterLevel) > 100) {
|
||||||
|
o->oMoveFlags = OBJ_MOVE_IN_AIR;
|
||||||
|
}
|
||||||
|
o->oFireSpitterLastWaterY = waterLevel;
|
||||||
cur_obj_move_standard(78);
|
cur_obj_move_standard(78);
|
||||||
}
|
}
|
||||||
|
|
|
@ -172,6 +172,12 @@ void bhv_skeeter_update(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
obj_check_attacks(&sSkeeterHitbox, o->oAction);
|
obj_check_attacks(&sSkeeterHitbox, o->oAction);
|
||||||
|
// HACK: when water level suddenly changes, the skeeter can disappear into the floor
|
||||||
|
f32 waterLevel = find_water_level(o->oPosX, o->oPosZ);
|
||||||
|
if (fabs(o->oSkeeterLastWaterY - waterLevel) > 100) {
|
||||||
|
o->oMoveFlags = OBJ_MOVE_IN_AIR;
|
||||||
|
}
|
||||||
|
o->oSkeeterLastWaterY = waterLevel;
|
||||||
cur_obj_move_standard(-78);
|
cur_obj_move_standard(-78);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue