reduce out-of-bounds lifetime of player bullets
This commit is contained in:
parent
f25c88942a
commit
929987da41
5 changed files with 18 additions and 5 deletions
|
@ -117,6 +117,7 @@ TASK(marisa_star_slave_projectile, {
|
|||
.type = PROJ_PLAYER,
|
||||
.damage = ARGS.damage,
|
||||
.shader_ptr = ARGS.shader,
|
||||
.max_viewport_dist = 128,
|
||||
));
|
||||
|
||||
real freq = 0.1;
|
||||
|
|
|
@ -169,7 +169,7 @@ TASK(reimu_spirit_homing, { cmplx pos; cmplx vel; real damage; ShaderProgram *sh
|
|||
.damage = ARGS.damage,
|
||||
.shader_ptr = ARGS.shader,
|
||||
.scale = REIMU_SPIRIT_HOMING_SCALE,
|
||||
.flags = PFLAG_NOCOLLISIONEFFECT,
|
||||
.flags = PFLAG_NOCOLLISIONEFFECT | PFLAG_NOAUTOREMOVE,
|
||||
));
|
||||
|
||||
INVOKE_TASK_WHEN(&p->events.killed, reimu_spirit_homing_impact, ENT_BOX(p));
|
||||
|
@ -187,6 +187,8 @@ TASK(reimu_spirit_homing, { cmplx pos; cmplx vel; real damage; ShaderProgram *sh
|
|||
reimu_spirit_spawn_ofuda_particle(p, t, 0.25);
|
||||
YIELD;
|
||||
}
|
||||
|
||||
p->flags &= ~PFLAG_NOAUTOREMOVE;
|
||||
}
|
||||
|
||||
static Color *reimu_spirit_orb_color(Color *c, int i) {
|
||||
|
@ -336,7 +338,7 @@ TASK(reimu_spirit_bomb_orb, { BoxedPlayer plr; int index; real angle; }) {
|
|||
.damage_type = DMG_PLAYER_BOMB,
|
||||
.size = 10 * (1+I),
|
||||
.layer = LAYER_NODRAW,
|
||||
.flags = PFLAG_NOREFLECT | PFLAG_NOCOLLISION | PFLAG_NOMOVE | PFLAG_MANUALANGLE,
|
||||
.flags = PFLAG_NOREFLECT | PFLAG_NOCOLLISION | PFLAG_NOMOVE | PFLAG_MANUALANGLE | PFLAG_NOAUTOREMOVE,
|
||||
));
|
||||
|
||||
BoxedProjectile b_orb = ENT_BOX(orb);
|
||||
|
|
|
@ -87,6 +87,11 @@ static void reimu_dream_gap_bomb_projectile_draw(Projectile *p, int t, ProjDrawR
|
|||
TASK(reimu_dream_gap_bomb_projectile_impact, { BoxedProjectile p; Sprite *impact_sprite; }) {
|
||||
Projectile *p = TASK_BIND(ARGS.p);
|
||||
|
||||
if(p->collision && p->collision->type == PCOL_VOID) {
|
||||
// Auto-removed out of bounds; don't explode.
|
||||
return;
|
||||
}
|
||||
|
||||
real range = BOMB_PROJECTILE_IMPACT_AREA_RADIUS;
|
||||
real damage = BOMB_PROJECTILE_IMPACT_AREA_DAMAGE;
|
||||
|
||||
|
@ -124,6 +129,7 @@ TASK(reimu_dream_gap_bomb_projectile, {
|
|||
.size = 32 * (1 + I),
|
||||
.sprite_ptr = ARGS.sprite,
|
||||
.type = PROJ_PLAYER,
|
||||
.max_viewport_dist = BOMB_PROJECTILE_PERIODIC_AREA_RADIUS
|
||||
));
|
||||
|
||||
INVOKE_TASK_WHEN(&p->events.killed, reimu_dream_gap_bomb_projectile_impact,
|
||||
|
|
|
@ -266,6 +266,7 @@ TASK(youmu_orb_homing_spirit, { YoumuBController *ctrl; cmplx pos; cmplx velocit
|
|||
.timeout = timeout,
|
||||
.damage = ARGS.damage,
|
||||
.shader_ptr = ctrl->shot_shader,
|
||||
.flags = PFLAG_NOAUTOREMOVE
|
||||
));
|
||||
|
||||
INVOKE_TASK_AFTER(&p->events.killed, youmu_orb_homing_spirit_expire, ENT_BOX(p));
|
||||
|
@ -309,7 +310,9 @@ TASK(youmu_orb_homing_spirit, { YoumuBController *ctrl; cmplx pos; cmplx velocit
|
|||
|
||||
if(aim_peaked) {
|
||||
if(!orb) {
|
||||
approach_p(&aim_strength, 0.00, 0.001);
|
||||
if(approach_p(&aim_strength, 0.00, 0.001) == 0) {
|
||||
p->flags &= ~PFLAG_NOAUTOREMOVE;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
approach_p(&aim_strength, 0.1, 0.02);
|
||||
|
@ -420,7 +423,7 @@ TASK(youmu_orb_shot, { YoumuBController *ctrl; int lifetime; real spirit_damage;
|
|||
.type = PROJ_PLAYER,
|
||||
.timeout = ARGS.lifetime,
|
||||
.move = move_asymptotic(-30.0*I, -0.7*I, 0.8),
|
||||
.flags = PFLAG_MANUALANGLE | PFLAG_NOCOLLISION,
|
||||
.flags = PFLAG_MANUALANGLE | PFLAG_NOCOLLISION | PFLAG_NOAUTOREMOVE,
|
||||
));
|
||||
|
||||
INVOKE_TASK(youmu_orb_update, ctrl, ENT_BOX(orb));
|
||||
|
|
|
@ -79,7 +79,8 @@ static void process_projectile_args(ProjArgs *args, ProjArgs *defaults) {
|
|||
args->color = defaults->color;
|
||||
}
|
||||
|
||||
if(!args->max_viewport_dist && (args->type == PROJ_PARTICLE || args->type == PROJ_PLAYER)) {
|
||||
if(!args->max_viewport_dist && args->type == PROJ_PARTICLE) {
|
||||
// TODO consider a saner value?
|
||||
args->max_viewport_dist = 300;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue