mirror of https://github.com/nmlgc/ReC98.git
61 lines
1.4 KiB
C++
61 lines
1.4 KiB
C++
#include "th05/main/boss/impl.hpp"
|
|
|
|
extern y_direction_t boss_flystep_random_next_y_direction;
|
|
|
|
bool pascal near boss_flystep_random(int frame)
|
|
{
|
|
flystep_random_for(
|
|
boss,
|
|
boss_flystep_random_next_y_direction,
|
|
4.0f,
|
|
BOSS_FLYSTEP_RANDOM_FRAMES,
|
|
boss_flystep_random_clamp.left.v,
|
|
boss_flystep_random_clamp.right.v,
|
|
boss_flystep_random_clamp.top.v,
|
|
boss_flystep_random_clamp.bottom.v,
|
|
boss_sprite_left,
|
|
boss_sprite_right,
|
|
boss_sprite_stay,
|
|
frame
|
|
);
|
|
}
|
|
|
|
static const int TOWARDS_FRACTION = 16; // higher = slower
|
|
|
|
inline int towards(int val, int speed = 1) {
|
|
return (val / (TOWARDS_FRACTION / speed));
|
|
}
|
|
|
|
bool pascal near boss_flystep_towards(subpixel_t target_x, subpixel_t target_y)
|
|
{
|
|
int reached_dimensions = 0;
|
|
subpixel_t dist;
|
|
|
|
dist = (target_x - boss.pos.cur.x.v);
|
|
/**/ if(towards(dist) != 0) { boss.pos.cur.x.v += towards(dist); }
|
|
else if(towards(dist, 4) != 0) { boss.pos.cur.x.v += towards(dist, 4); }
|
|
else {
|
|
boss.pos.cur.x.v = target_x;
|
|
reached_dimensions++;
|
|
}
|
|
if(dist < 0) {
|
|
boss.sprite = boss_sprite_left;
|
|
} else {
|
|
boss.sprite = boss_sprite_right;
|
|
}
|
|
|
|
dist = (target_y - boss.pos.cur.y.v);
|
|
/**/ if(towards(dist) != 0) { boss.pos.cur.y.v += towards(dist); }
|
|
else if(towards(dist, 8) != 0) { boss.pos.cur.y.v += towards(dist, 8); }
|
|
else {
|
|
boss.pos.cur.y.v = target_y;
|
|
reached_dimensions++;
|
|
}
|
|
|
|
if(reached_dimensions != 2) {
|
|
return false;
|
|
}
|
|
boss.sprite = boss_sprite_stay;
|
|
return true;
|
|
}
|