workaround for enemies dropping items when disappearing offscreen
This commit is contained in:
parent
83a8961df6
commit
eb6ee85872
12 changed files with 131 additions and 96 deletions
74
src/enemy.c
74
src/enemy.c
|
@ -70,7 +70,7 @@ Enemy *create_enemy_p(EnemyList *enemies, complex pos, int hp, EnemyVisualRule v
|
|||
void* _delete_enemy(ListAnchor *enemies, List* enemy, void *arg) {
|
||||
Enemy *e = (Enemy*)enemy;
|
||||
|
||||
if(e->hp <= 0 && e->hp > ENEMY_IMMUNE) {
|
||||
if(e->hp <= 0 && e->hp != ENEMY_IMMUNE) {
|
||||
play_sound("enemydeath");
|
||||
|
||||
for(int i = 0; i < 10; i++) {
|
||||
|
@ -133,12 +133,6 @@ static void ent_draw_enemy(EntityInterface *ent) {
|
|||
#endif
|
||||
}
|
||||
|
||||
void killall(EnemyList *enemies) {
|
||||
for(Enemy *e = enemies->first; e; e = e->next) {
|
||||
e->hp = 0;
|
||||
}
|
||||
}
|
||||
|
||||
int enemy_flare(Projectile *p, int t) { // a[0] velocity, a[1] ref to enemy
|
||||
if(t == EVENT_DEATH) {
|
||||
free_ref(p->args[1]);
|
||||
|
@ -241,10 +235,52 @@ void Swirl(Enemy *e, int t, bool render) {
|
|||
});
|
||||
}
|
||||
|
||||
void process_enemies(EnemyList *enemies) {
|
||||
Enemy *enemy = enemies->first, *del = NULL;
|
||||
bool enemy_is_vulnerable(Enemy *enemy) {
|
||||
if(enemy->hp <= ENEMY_IMMUNE) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool enemy_in_viewport(Enemy *enemy) {
|
||||
double s = 60; // TODO: make this adjustable
|
||||
|
||||
return
|
||||
creal(enemy->pos) >= -s &&
|
||||
creal(enemy->pos) <= VIEWPORT_W + s &&
|
||||
cimag(enemy->pos) >= -s &&
|
||||
cimag(enemy->pos) <= VIEWPORT_H + s;
|
||||
}
|
||||
|
||||
void enemy_kill_all(EnemyList *enemies) {
|
||||
for(Enemy *e = enemies->first; e; e = e->next) {
|
||||
e->hp = ENEMY_KILLED;
|
||||
}
|
||||
}
|
||||
|
||||
bool enemy_damage(Enemy *enemy, int damage) {
|
||||
if(!enemy_is_vulnerable(enemy)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if((enemy->hp -= damage) <= 0) {
|
||||
enemy->hp = ENEMY_KILLED;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void process_enemies(EnemyList *enemies) {
|
||||
for(Enemy *enemy = enemies->first, *next; enemy; enemy = next) {
|
||||
next = enemy->next;
|
||||
|
||||
if(enemy->hp == ENEMY_KILLED) {
|
||||
enemy->logic_rule(enemy, EVENT_KILLED);
|
||||
delete_enemy(enemies, enemy);
|
||||
continue;
|
||||
}
|
||||
|
||||
while(enemy != NULL) {
|
||||
int action = enemy->logic_rule(enemy, global.frames - enemy->birthtime);
|
||||
|
||||
if(enemy->hp > ENEMY_IMMUNE && enemy->alpha >= 1.0 && cabs(enemy->pos - global.plr.pos) < 7) {
|
||||
|
@ -253,19 +289,13 @@ void process_enemies(EnemyList *enemies) {
|
|||
|
||||
enemy->alpha = approach(enemy->alpha, 1.0, 1.0/60.0);
|
||||
|
||||
if((enemy->hp > ENEMY_IMMUNE
|
||||
&& (creal(enemy->pos) < -20 || creal(enemy->pos) > VIEWPORT_W + 20
|
||||
|| cimag(enemy->pos) < -20 || cimag(enemy->pos) > VIEWPORT_H + 20
|
||||
|| enemy->hp <= 0)) || action == ACTION_DESTROY) {
|
||||
del = enemy;
|
||||
enemy = enemy->next;
|
||||
delete_enemy(enemies, del);
|
||||
} else {
|
||||
if(enemy->visual_rule) {
|
||||
enemy->visual_rule(enemy, global.frames - enemy->birthtime, false);
|
||||
}
|
||||
if((enemy->hp > ENEMY_IMMUNE && (!enemy_in_viewport(enemy) || enemy->hp <= 0)) || action == ACTION_DESTROY) {
|
||||
delete_enemy(enemies, enemy);
|
||||
continue;
|
||||
}
|
||||
|
||||
enemy = enemy->next;
|
||||
if(enemy->visual_rule) {
|
||||
enemy->visual_rule(enemy, global.frames - enemy->birthtime, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,7 +25,8 @@ typedef void (*EnemyVisualRule)(struct Enemy*, int t, bool render);
|
|||
|
||||
enum {
|
||||
ENEMY_IMMUNE = -9000,
|
||||
ENEMY_BOMB = -9001
|
||||
ENEMY_BOMB = -9001,
|
||||
ENEMY_KILLED = -9002,
|
||||
};
|
||||
|
||||
struct Enemy {
|
||||
|
@ -72,7 +73,10 @@ void delete_enemies(EnemyList *enemies);
|
|||
|
||||
void process_enemies(EnemyList *enemies);
|
||||
|
||||
void killall(EnemyList *enemies);
|
||||
bool enemy_is_vulnerable(Enemy *enemy);
|
||||
bool enemy_in_viewport(Enemy *enemy);
|
||||
void enemy_kill_all(EnemyList *enemies);
|
||||
bool enemy_damage(Enemy *enemy, int damage);
|
||||
|
||||
void Fairy(Enemy*, int t, bool render);
|
||||
void Swirl(Enemy*, int t, bool render);
|
||||
|
|
|
@ -70,6 +70,7 @@ enum {
|
|||
|
||||
EVENT_DEATH = -8999,
|
||||
EVENT_BIRTH,
|
||||
EVENT_KILLED,
|
||||
ACTION_DESTROY,
|
||||
ACTION_ACK,
|
||||
ACTION_NONE,
|
||||
|
|
|
@ -276,9 +276,7 @@ void player_logic(Player* plr) {
|
|||
const int damage = 100;
|
||||
|
||||
for(Enemy *en = global.enemies.first; en; en = en->next) {
|
||||
if(en->hp > ENEMY_IMMUNE) {
|
||||
en->hp -= damage;
|
||||
}
|
||||
enemy_damage(en, damage);
|
||||
}
|
||||
|
||||
if(global.boss) {
|
||||
|
|
|
@ -416,7 +416,7 @@ void apply_projectile_collision(ProjectileList *projlist, Projectile *p, ProjCol
|
|||
Enemy *e = col->entity;
|
||||
player_add_points(&global.plr, col->damage * 0.5);
|
||||
player_register_damage(&global.plr, col->damage);
|
||||
e->hp -= col->damage;
|
||||
enemy_damage(e, col->damage);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -894,9 +894,10 @@ Boss *create_cirno(void) {
|
|||
|
||||
int stage1_burst(Enemy *e, int time) {
|
||||
TIMER(&time);
|
||||
AT(EVENT_DEATH) {
|
||||
|
||||
AT(EVENT_KILLED) {
|
||||
spawn_items(e->pos, Point, 3, NULL);
|
||||
return 1;
|
||||
return ACTION_ACK;
|
||||
}
|
||||
|
||||
FROM_TO(0, 60, 1) {
|
||||
|
@ -931,7 +932,7 @@ int stage1_burst(Enemy *e, int time) {
|
|||
|
||||
int stage1_circletoss(Enemy *e, int time) {
|
||||
TIMER(&time);
|
||||
AT(EVENT_DEATH) {
|
||||
AT(EVENT_KILLED) {
|
||||
spawn_items(e->pos, Point, 2, Power, 1, NULL);
|
||||
return 1;
|
||||
}
|
||||
|
@ -966,7 +967,7 @@ int stage1_circletoss(Enemy *e, int time) {
|
|||
|
||||
int stage1_sinepass(Enemy *e, int time) {
|
||||
TIMER(&time);
|
||||
AT(EVENT_DEATH) {
|
||||
AT(EVENT_KILLED) {
|
||||
tsrand_fill(2);
|
||||
spawn_items(e->pos, Point, afrand(0)>0.5, Power, afrand(1)>0.8, NULL);
|
||||
return 1;
|
||||
|
@ -987,7 +988,7 @@ int stage1_sinepass(Enemy *e, int time) {
|
|||
|
||||
int stage1_drop(Enemy *e, int t) {
|
||||
TIMER(&t);
|
||||
AT(EVENT_DEATH) {
|
||||
AT(EVENT_KILLED) {
|
||||
spawn_items(e->pos, Point, 2, Power, frand()>0.8, NULL);
|
||||
return 1;
|
||||
}
|
||||
|
@ -1010,7 +1011,7 @@ int stage1_drop(Enemy *e, int t) {
|
|||
|
||||
int stage1_circle(Enemy *e, int t) {
|
||||
TIMER(&t);
|
||||
AT(EVENT_DEATH) {
|
||||
AT(EVENT_KILLED) {
|
||||
spawn_items(e->pos, Point, 3, Power, 2, NULL);
|
||||
return 1;
|
||||
}
|
||||
|
@ -1033,7 +1034,7 @@ int stage1_circle(Enemy *e, int t) {
|
|||
|
||||
int stage1_multiburst(Enemy *e, int t) {
|
||||
TIMER(&t);
|
||||
AT(EVENT_DEATH) {
|
||||
AT(EVENT_KILLED) {
|
||||
spawn_items(e->pos, Point, 3, Power, 2, NULL);
|
||||
return 1;
|
||||
}
|
||||
|
@ -1063,7 +1064,7 @@ int stage1_multiburst(Enemy *e, int t) {
|
|||
|
||||
int stage1_instantcircle(Enemy *e, int t) {
|
||||
TIMER(&t);
|
||||
AT(EVENT_DEATH) {
|
||||
AT(EVENT_KILLED) {
|
||||
spawn_items(e->pos, Point, 2, Power, 4, NULL);
|
||||
return 1;
|
||||
}
|
||||
|
@ -1101,7 +1102,7 @@ int stage1_instantcircle(Enemy *e, int t) {
|
|||
|
||||
int stage1_tritoss(Enemy *e, int t) {
|
||||
TIMER(&t);
|
||||
AT(EVENT_DEATH) {
|
||||
AT(EVENT_KILLED) {
|
||||
spawn_items(e->pos, Point, 5, Power, 2, NULL);
|
||||
return 1;
|
||||
}
|
||||
|
@ -1308,7 +1309,7 @@ void stage1_events(void) {
|
|||
create_enemy2c(VIEWPORT_W/2.0, 4000, BigFairy, stage1_tritoss, 2.0*I, -2.6*I);
|
||||
|
||||
AT(5000) {
|
||||
killall(&global.enemies);
|
||||
enemy_kill_all(&global.enemies);
|
||||
global.boss = create_cirno();
|
||||
}
|
||||
|
||||
|
|
|
@ -53,7 +53,7 @@ Dialog *stage2_post_dialog(void) {
|
|||
|
||||
int stage2_great_circle(Enemy *e, int t) {
|
||||
TIMER(&t);
|
||||
AT(EVENT_DEATH) {
|
||||
AT(EVENT_KILLED) {
|
||||
spawn_items(e->pos, Point, 5, Power, 4, NULL);
|
||||
return 1;
|
||||
}
|
||||
|
@ -98,7 +98,7 @@ int stage2_great_circle(Enemy *e, int t) {
|
|||
|
||||
int stage2_small_spin_circle(Enemy *e, int t) {
|
||||
TIMER(&t);
|
||||
AT(EVENT_DEATH) {
|
||||
AT(EVENT_KILLED) {
|
||||
spawn_items(e->pos, Point, 2, NULL);
|
||||
return 1;
|
||||
}
|
||||
|
@ -131,7 +131,7 @@ int stage2_small_spin_circle(Enemy *e, int t) {
|
|||
|
||||
int stage2_aim(Enemy *e, int t) {
|
||||
TIMER(&t);
|
||||
AT(EVENT_DEATH) {
|
||||
AT(EVENT_KILLED) {
|
||||
spawn_items(e->pos, Power, 2, NULL);
|
||||
return 1;
|
||||
}
|
||||
|
@ -160,7 +160,7 @@ int stage2_aim(Enemy *e, int t) {
|
|||
|
||||
int stage2_sidebox_trail(Enemy *e, int t) { // creal(a[0]): velocity, cimag(a[0]): angle, a[1]: d angle/dt, a[2]: time of acceleration
|
||||
TIMER(&t);
|
||||
AT(EVENT_DEATH) {
|
||||
AT(EVENT_KILLED) {
|
||||
spawn_items(e->pos, Point, 1, Power, 1, NULL);
|
||||
return 1;
|
||||
}
|
||||
|
@ -186,7 +186,7 @@ int stage2_sidebox_trail(Enemy *e, int t) { // creal(a[0]): velocity, cimag(a[0]
|
|||
|
||||
int stage2_flea(Enemy *e, int t) {
|
||||
TIMER(&t);
|
||||
AT(EVENT_DEATH) {
|
||||
AT(EVENT_KILLED) {
|
||||
spawn_items(e->pos, Point, 2, NULL);
|
||||
return 1;
|
||||
}
|
||||
|
@ -215,7 +215,7 @@ int stage2_flea(Enemy *e, int t) {
|
|||
|
||||
int stage2_accel_circle(Enemy *e, int t) {
|
||||
TIMER(&t);
|
||||
AT(EVENT_DEATH) {
|
||||
AT(EVENT_KILLED) {
|
||||
spawn_items(e->pos, Point, 1, Power, 3, NULL);
|
||||
return 1;
|
||||
}
|
||||
|
@ -640,7 +640,7 @@ void hina_monty(Boss *h, int time) {
|
|||
static complex targetpos;
|
||||
|
||||
if(time == EVENT_DEATH) {
|
||||
killall(&global.enemies);
|
||||
enemy_kill_all(&global.enemies);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -662,7 +662,7 @@ void hina_monty(Boss *h, int time) {
|
|||
create_laserline_ab(x, x + VIEWPORT_H*I, 20, 240, 600, rgb(1.0, 0.3, 1.0));
|
||||
}
|
||||
|
||||
killall(&global.enemies);
|
||||
enemy_kill_all(&global.enemies);
|
||||
}
|
||||
|
||||
AT(120) {
|
||||
|
|
|
@ -55,7 +55,7 @@ static Dialog *stage3_post_dialog(void) {
|
|||
static int stage3_enterswirl(Enemy *e, int t) {
|
||||
TIMER(&t)
|
||||
|
||||
AT(EVENT_DEATH) {
|
||||
AT(EVENT_KILLED) {
|
||||
spawn_items(e->pos, Point, 1, Power, 1, NULL);
|
||||
|
||||
float r, g;
|
||||
|
@ -86,7 +86,7 @@ static int stage3_enterswirl(Enemy *e, int t) {
|
|||
}
|
||||
|
||||
AT(60) {
|
||||
e->hp = 0;
|
||||
e->hp = ENEMY_KILLED;
|
||||
}
|
||||
|
||||
e->pos += e->args[0];
|
||||
|
@ -97,7 +97,7 @@ static int stage3_enterswirl(Enemy *e, int t) {
|
|||
static int stage3_slavefairy(Enemy *e, int t) {
|
||||
TIMER(&t)
|
||||
|
||||
AT(EVENT_DEATH) {
|
||||
AT(EVENT_KILLED) {
|
||||
spawn_items(e->pos, Point, 1, Power, 3, NULL);
|
||||
return 1;
|
||||
}
|
||||
|
@ -138,7 +138,7 @@ static int stage3_slavefairy(Enemy *e, int t) {
|
|||
static int stage3_slavefairy2(Enemy *e, int t) {
|
||||
TIMER(&t)
|
||||
|
||||
AT(EVENT_DEATH) {
|
||||
AT(EVENT_KILLED) {
|
||||
spawn_items(e->pos, Point, 1, Power, 3, NULL);
|
||||
return 1;
|
||||
}
|
||||
|
@ -197,7 +197,7 @@ static void charge_effect(Enemy *e, int t, int chargetime) {
|
|||
static int stage3_burstfairy(Enemy *e, int t) {
|
||||
TIMER(&t)
|
||||
|
||||
AT(EVENT_DEATH) {
|
||||
AT(EVENT_KILLED) {
|
||||
spawn_items(e->pos, Point, 2, Power, 5, NULL);
|
||||
return 1;
|
||||
}
|
||||
|
@ -297,7 +297,7 @@ static int stage3_chargefairy_proj(Projectile *p, int t) {
|
|||
static int stage3_chargefairy(Enemy *e, int t) {
|
||||
TIMER(&t)
|
||||
|
||||
AT(EVENT_DEATH) {
|
||||
AT(EVENT_KILLED) {
|
||||
spawn_items(e->pos, Point, 5, Power, 3, NULL);
|
||||
return 1;
|
||||
}
|
||||
|
@ -364,7 +364,7 @@ static int stage3_chargefairy(Enemy *e, int t) {
|
|||
static int stage3_bigfairy(Enemy *e, int t) {
|
||||
TIMER(&t)
|
||||
|
||||
AT(EVENT_DEATH) {
|
||||
AT(EVENT_KILLED) {
|
||||
spawn_items(e->pos, Point, 5, Power, 5, NULL);
|
||||
if(creal(e->args[0]) && global.timer > 2800)
|
||||
spawn_items(e->pos, Bomb, 1, NULL);
|
||||
|
@ -388,7 +388,7 @@ static int stage3_bigfairy(Enemy *e, int t) {
|
|||
}
|
||||
|
||||
AT(creal(e->args[1]))
|
||||
e->hp = 0;
|
||||
e->hp = ENEMY_KILLED;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -400,7 +400,7 @@ static int stage3_bitchswirl(Enemy *e, int t) {
|
|||
return 1;
|
||||
}
|
||||
|
||||
AT(EVENT_DEATH) {
|
||||
AT(EVENT_KILLED) {
|
||||
spawn_items(e->pos, Point, 1, Power, 1, NULL);
|
||||
return -1;
|
||||
}
|
||||
|
@ -422,7 +422,7 @@ static int stage3_bitchswirl(Enemy *e, int t) {
|
|||
static int stage3_cornerfairy(Enemy *e, int t) {
|
||||
TIMER(&t)
|
||||
|
||||
AT(EVENT_DEATH) {
|
||||
AT(EVENT_KILLED) {
|
||||
spawn_items(e->pos, Point, 5, Power, 5, NULL);
|
||||
return -1;
|
||||
}
|
||||
|
@ -939,7 +939,7 @@ void wriggle_moonlight_rocket(Boss *boss, int time) {
|
|||
TIMER(&time)
|
||||
|
||||
AT(EVENT_DEATH) {
|
||||
killall(&global.enemies);
|
||||
enemy_kill_all(&global.enemies);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1000,7 +1000,7 @@ void wriggle_night_ignite(Boss *boss, int time) {
|
|||
float dfactor = global.diff / (float)D_Lunatic;
|
||||
|
||||
if(time == EVENT_DEATH) {
|
||||
killall(&global.enemies);
|
||||
enemy_kill_all(&global.enemies);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1314,7 +1314,7 @@ static void wriggle_nonspell_common(Boss *boss, int time, int level) {
|
|||
create_enemy4c(boss->pos, ENEMY_IMMUNE, wriggle_slave_visual, wriggle_nonspell_slave, add_ref(boss), i*2*M_PI/cnt, j, level);
|
||||
|
||||
AT(EVENT_DEATH) {
|
||||
killall(&global.enemies);
|
||||
enemy_kill_all(&global.enemies);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -63,7 +63,7 @@ Dialog *stage4_dialog_end(void) {
|
|||
|
||||
int stage4_splasher(Enemy *e, int t) {
|
||||
TIMER(&t);
|
||||
AT(EVENT_DEATH) {
|
||||
AT(EVENT_KILLED) {
|
||||
spawn_items(e->pos, Point, 1, Power, 3, Bomb, 1, NULL);
|
||||
return 1;
|
||||
}
|
||||
|
@ -96,7 +96,7 @@ int stage4_splasher(Enemy *e, int t) {
|
|||
|
||||
int stage4_fodder(Enemy *e, int t) {
|
||||
TIMER(&t);
|
||||
AT(EVENT_DEATH) {
|
||||
AT(EVENT_KILLED) {
|
||||
spawn_items(e->pos, Power, 1, NULL);
|
||||
return 1;
|
||||
}
|
||||
|
@ -120,7 +120,7 @@ int stage4_fodder(Enemy *e, int t) {
|
|||
|
||||
int stage4_partcircle(Enemy *e, int t) {
|
||||
TIMER(&t);
|
||||
AT(EVENT_DEATH) {
|
||||
AT(EVENT_KILLED) {
|
||||
spawn_items(e->pos, Point, 2, Power, 1, NULL);
|
||||
return 1;
|
||||
}
|
||||
|
@ -148,7 +148,7 @@ int stage4_partcircle(Enemy *e, int t) {
|
|||
|
||||
int stage4_cardbuster(Enemy *e, int t) {
|
||||
TIMER(&t);
|
||||
AT(EVENT_DEATH) {
|
||||
AT(EVENT_KILLED) {
|
||||
spawn_items(e->pos, Point, 1, Power, 2, NULL);
|
||||
return 1;
|
||||
}
|
||||
|
@ -179,7 +179,7 @@ int stage4_cardbuster(Enemy *e, int t) {
|
|||
|
||||
int stage4_backfire(Enemy *e, int t) {
|
||||
TIMER(&t);
|
||||
AT(EVENT_DEATH) {
|
||||
AT(EVENT_KILLED) {
|
||||
spawn_items(e->pos, Point, 3, Power, 2, NULL);
|
||||
return 1;
|
||||
}
|
||||
|
@ -209,7 +209,7 @@ int stage4_backfire(Enemy *e, int t) {
|
|||
|
||||
int stage4_bigcircle(Enemy *e, int t) {
|
||||
TIMER(&t);
|
||||
AT(EVENT_DEATH) {
|
||||
AT(EVENT_KILLED) {
|
||||
spawn_items(e->pos, Point, 1, Power, 3, NULL);
|
||||
|
||||
return 1;
|
||||
|
@ -258,9 +258,10 @@ int stage4_bigcircle(Enemy *e, int t) {
|
|||
}
|
||||
|
||||
int stage4_explosive(Enemy *e, int t) {
|
||||
if(t == EVENT_DEATH || (t >= 100 && global.diff >= D_Normal)) {
|
||||
if(t == EVENT_KILLED || (t >= 100 && global.diff >= D_Normal)) {
|
||||
int i;
|
||||
if(t == EVENT_DEATH)
|
||||
|
||||
if(t == EVENT_KILLED)
|
||||
spawn_items(e->pos, Power, 1, NULL);
|
||||
|
||||
int n = 10*global.diff;
|
||||
|
@ -351,7 +352,7 @@ void kurumi_slaveburst(Boss *b, int time) {
|
|||
TIMER(&t);
|
||||
|
||||
if(time == EVENT_DEATH)
|
||||
killall(&global.enemies);
|
||||
enemy_kill_all(&global.enemies);
|
||||
|
||||
if(time < 0)
|
||||
return;
|
||||
|
@ -395,7 +396,7 @@ void kurumi_redspike(Boss *b, int time) {
|
|||
int t = time % 500;
|
||||
|
||||
if(time == EVENT_DEATH)
|
||||
killall(&global.enemies);
|
||||
enemy_kill_all(&global.enemies);
|
||||
|
||||
if(time < 0)
|
||||
return;
|
||||
|
@ -520,7 +521,7 @@ int stage4_supercard(Enemy *e, int t) {
|
|||
int time = t % 150;
|
||||
|
||||
TIMER(&t);
|
||||
AT(EVENT_DEATH) {
|
||||
AT(EVENT_KILLED) {
|
||||
spawn_items(e->pos, Point, 2, Power, 3, NULL);
|
||||
return 1;
|
||||
}
|
||||
|
@ -707,7 +708,7 @@ void kurumi_aniwall(Boss *b, int time) {
|
|||
TIMER(&time);
|
||||
|
||||
AT(EVENT_DEATH) {
|
||||
killall(&global.enemies);
|
||||
enemy_kill_all(&global.enemies);
|
||||
}
|
||||
|
||||
GO_TO(b, VIEWPORT_W/2 + VIEWPORT_W/3*sin(time/200) + I*cimag(b->pos),0.03)
|
||||
|
@ -832,7 +833,7 @@ void kurumi_blowwall(Boss *b, int time) {
|
|||
TIMER(&t);
|
||||
|
||||
if(time == EVENT_DEATH)
|
||||
killall(&global.enemies);
|
||||
enemy_kill_all(&global.enemies);
|
||||
|
||||
if(time < 0) {
|
||||
return;
|
||||
|
@ -958,7 +959,7 @@ void kurumi_danmaku(Boss *b, int time) {
|
|||
TIMER(&t);
|
||||
|
||||
if(time == EVENT_DEATH)
|
||||
killall(&global.enemies);
|
||||
enemy_kill_all(&global.enemies);
|
||||
if(time < 0)
|
||||
return;
|
||||
|
||||
|
@ -1133,7 +1134,7 @@ int kurumi_extra_drainer(Projectile *p, int time) {
|
|||
// TODO: maybe add a special sound for this?
|
||||
|
||||
int drain = clamp(4, 0, e->hp);
|
||||
e->hp -= drain;
|
||||
enemy_damage(e, drain);
|
||||
global.boss->current->hp = min(global.boss->current->maxhp, global.boss->current->hp + drain * 2);
|
||||
}
|
||||
} else {
|
||||
|
@ -1199,7 +1200,7 @@ void kurumi_extra_bigfairy_visual(Enemy *e, int time, bool render) {
|
|||
|
||||
int kurumi_extra_fairy(Enemy *e, int t) {
|
||||
TIMER(&t);
|
||||
AT(EVENT_DEATH) {
|
||||
AT(EVENT_KILLED) {
|
||||
spawn_items(e->pos, Point, 1, NULL);
|
||||
return 1;
|
||||
}
|
||||
|
@ -1283,7 +1284,7 @@ void kurumi_extra(Boss *b, int time) {
|
|||
TIMER(&t);
|
||||
|
||||
if(time == EVENT_DEATH) {
|
||||
killall(&global.enemies);
|
||||
enemy_kill_all(&global.enemies);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1381,7 +1382,7 @@ static int scythe_post_mid(Enemy *e, int t) {
|
|||
|
||||
int fleetime = creal(e->args[3]);
|
||||
|
||||
if(t == EVENT_DEATH) {
|
||||
if(t == EVENT_KILLED) {
|
||||
if(fleetime >= 300) {
|
||||
spawn_items(e->pos, Life, 1, NULL);
|
||||
}
|
||||
|
|
|
@ -78,7 +78,7 @@ Dialog *stage5_post_boss_dialog(void) {
|
|||
|
||||
int stage5_greeter(Enemy *e, int t) {
|
||||
TIMER(&t)
|
||||
AT(EVENT_DEATH) {
|
||||
AT(EVENT_KILLED) {
|
||||
spawn_items(e->pos, Point, 2, Power, 2, NULL);
|
||||
return 1;
|
||||
}
|
||||
|
@ -109,7 +109,7 @@ int stage5_greeter(Enemy *e, int t) {
|
|||
|
||||
int stage5_lightburst(Enemy *e, int t) {
|
||||
TIMER(&t);
|
||||
AT(EVENT_DEATH) {
|
||||
AT(EVENT_KILLED) {
|
||||
spawn_items(e->pos, Point, 4, Power, 2, NULL);
|
||||
return 1;
|
||||
}
|
||||
|
@ -136,7 +136,7 @@ int stage5_lightburst(Enemy *e, int t) {
|
|||
|
||||
int stage5_swirl(Enemy *e, int t) {
|
||||
TIMER(&t);
|
||||
AT(EVENT_DEATH) {
|
||||
AT(EVENT_KILLED) {
|
||||
spawn_items(e->pos, Point, 1, NULL);
|
||||
return 1;
|
||||
}
|
||||
|
@ -157,7 +157,7 @@ int stage5_swirl(Enemy *e, int t) {
|
|||
|
||||
int stage5_limiter(Enemy *e, int t) {
|
||||
TIMER(&t);
|
||||
AT(EVENT_DEATH) {
|
||||
AT(EVENT_KILLED) {
|
||||
spawn_items(e->pos, Point, 4, Power, 4, NULL);
|
||||
return 1;
|
||||
}
|
||||
|
@ -174,7 +174,7 @@ int stage5_limiter(Enemy *e, int t) {
|
|||
|
||||
int stage5_laserfairy(Enemy *e, int t) {
|
||||
TIMER(&t)
|
||||
AT(EVENT_DEATH) {
|
||||
AT(EVENT_KILLED) {
|
||||
spawn_items(e->pos, Point, 5, Power, 5, NULL);
|
||||
return 1;
|
||||
}
|
||||
|
@ -199,7 +199,7 @@ int stage5_laserfairy(Enemy *e, int t) {
|
|||
|
||||
int stage5_miner(Enemy *e, int t) {
|
||||
TIMER(&t);
|
||||
AT(EVENT_DEATH) {
|
||||
AT(EVENT_KILLED) {
|
||||
spawn_items(e->pos, Point, 2, NULL);
|
||||
return 1;
|
||||
}
|
||||
|
@ -234,7 +234,7 @@ static void lightning_particle(complex pos, int t) {
|
|||
int stage5_magnetto(Enemy *e, int t) {
|
||||
TIMER(&t);
|
||||
|
||||
AT(EVENT_DEATH) {
|
||||
AT(EVENT_KILLED) {
|
||||
spawn_items(e->pos, Point, 5, Power, 5, NULL);
|
||||
return 1;
|
||||
}
|
||||
|
@ -287,7 +287,7 @@ int stage5_magnetto(Enemy *e, int t) {
|
|||
|
||||
int stage5_explosion(Enemy *e, int t) {
|
||||
TIMER(&t)
|
||||
AT(EVENT_DEATH) {
|
||||
AT(EVENT_KILLED) {
|
||||
spawn_items(e->pos, Point, 5, Power, 5, Life, (int)creal(e->args[1]), NULL);
|
||||
play_sound("boom");
|
||||
return 1;
|
||||
|
@ -358,7 +358,7 @@ void iku_mid_intro(Boss *b, int t) {
|
|||
}
|
||||
|
||||
AT(960)
|
||||
killall(&global.enemies);
|
||||
enemy_kill_all(&global.enemies);
|
||||
}
|
||||
|
||||
static void midboss_dummy(Boss *b, int t) { }
|
||||
|
@ -378,7 +378,7 @@ Boss *create_iku_mid(void) {
|
|||
|
||||
int stage5_lightburst2(Enemy *e, int t) {
|
||||
TIMER(&t);
|
||||
AT(EVENT_DEATH) {
|
||||
AT(EVENT_KILLED) {
|
||||
spawn_items(e->pos, Point, 4, Power, 4, NULL);
|
||||
return 1;
|
||||
}
|
||||
|
@ -416,7 +416,7 @@ int stage5_lightburst2(Enemy *e, int t) {
|
|||
|
||||
int stage5_superbullet(Enemy *e, int t) {
|
||||
TIMER(&t);
|
||||
AT(EVENT_DEATH) {
|
||||
AT(EVENT_KILLED) {
|
||||
spawn_items(e->pos, Point, 4, Power, 3, NULL);
|
||||
return 1;
|
||||
}
|
||||
|
@ -658,7 +658,7 @@ void iku_lightning(Boss *b, int time) {
|
|||
int t = time % 141;
|
||||
|
||||
if(time == EVENT_DEATH) {
|
||||
killall(&global.enemies);
|
||||
enemy_kill_all(&global.enemies);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1108,7 +1108,7 @@ void iku_extra(Boss *b, int t) {
|
|||
TIMER(&t);
|
||||
|
||||
AT(EVENT_DEATH) {
|
||||
killall(&global.enemies);
|
||||
enemy_kill_all(&global.enemies);
|
||||
}
|
||||
|
||||
if(t < 0) {
|
||||
|
@ -1294,7 +1294,7 @@ void stage5_events(void) {
|
|||
}
|
||||
|
||||
AT(5600) {
|
||||
killall(&global.enemies);
|
||||
enemy_kill_all(&global.enemies);
|
||||
}
|
||||
|
||||
{
|
||||
|
|
|
@ -342,7 +342,7 @@ static void stage6_spellpractice_events(void) {
|
|||
}
|
||||
|
||||
if(!global.boss) {
|
||||
killall(&global.enemies);
|
||||
enemy_kill_all(&global.enemies);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -52,7 +52,7 @@ static Dialog *stage6_interboss_dialog(void) {
|
|||
|
||||
int stage6_hacker(Enemy *e, int t) {
|
||||
TIMER(&t);
|
||||
AT(EVENT_DEATH) {
|
||||
AT(EVENT_KILLED) {
|
||||
spawn_items(e->pos, Point, 4, Power, 3, NULL);
|
||||
return 1;
|
||||
}
|
||||
|
@ -77,7 +77,7 @@ int stage6_hacker(Enemy *e, int t) {
|
|||
|
||||
int stage6_side(Enemy *e, int t) {
|
||||
TIMER(&t);
|
||||
AT(EVENT_DEATH) {
|
||||
AT(EVENT_KILLED) {
|
||||
spawn_items(e->pos, Point, 4, Power, 3, NULL);
|
||||
return 1;
|
||||
}
|
||||
|
@ -133,7 +133,7 @@ int wait_proj(Projectile *p, int t) {
|
|||
|
||||
int stage6_flowermine(Enemy *e, int t) {
|
||||
TIMER(&t);
|
||||
AT(EVENT_DEATH) {
|
||||
AT(EVENT_KILLED) {
|
||||
spawn_items(e->pos, Point, 4, Power, 3, NULL);
|
||||
return 1;
|
||||
}
|
||||
|
@ -1879,7 +1879,7 @@ void elly_baryon_explode(Boss *b, int t) {
|
|||
global.shake_view_fade = 0.05;
|
||||
play_sound("boom");
|
||||
petal_explosion(100, b->pos + 100*afrand(0)*cexp(2.0*I*M_PI*afrand(1)));
|
||||
killall(&global.enemies);
|
||||
enemy_kill_all(&global.enemies);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue