projects
/
hackover2013-badge-firmware.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Textdateiankuckdingviech.
[hackover2013-badge-firmware.git]
/
badge
/
jumpnrun
/
enemies.c
diff --git
a/badge/jumpnrun/enemies.c
b/badge/jumpnrun/enemies.c
index
ed044bd
..
0ca8ad0
100644
(file)
--- a/
badge/jumpnrun/enemies.c
+++ b/
badge/jumpnrun/enemies.c
@@
-99,9
+99,14
@@
static void enemy_spawn(jumpnrun_enemy *self) {
self->base.jumpable_frames = 0;
}
self->base.jumpable_frames = 0;
}
+static void jumpnrun_enemy_kill(jumpnrun_enemy *self) {
+ self->base.flags |= JUMPNRUN_MOVEABLE_DYING;
+ self->base.tick_minor = 0;
+}
+
void jumpnrun_enemy_despawn(jumpnrun_enemy *self) {
// Despawned enemies are reset to their spawn position, so enemy_in_spawn_area will determine whether the spawn point is in the spawn area.
void jumpnrun_enemy_despawn(jumpnrun_enemy *self) {
// Despawned enemies are reset to their spawn position, so enemy_in_spawn_area will determine whether the spawn point is in the spawn area.
- self->base.flags &= ~(JUMPNRUN_ENEMY_SPAWNED | JUMPNRUN_ENEMY_MOVING);
+ self->base.flags &= ~(JUMPNRUN_ENEMY_SPAWNED | JUMPNRUN_ENEMY_MOVING
| JUMPNRUN_MOVEABLE_DYING
);
self->base.hitbox = rectangle_new(self->spawn_pos, self->type->hitbox.extent);
self->base.inertia = self->type->spawn_inertia;
}
self->base.hitbox = rectangle_new(self->spawn_pos, self->type->hitbox.extent);
self->base.inertia = self->type->spawn_inertia;
}
@@
-147,6
+152,15
@@
void jumpnrun_process_enemy(jumpnrun_enemy *self,
if(self->base.flags & JUMPNRUN_ENEMY_SPAWNED) {
if(!enemy_in_spawn_area(self, state) || fixed_point_gt(rectangle_top (enemy_hitbox(self)), FIXED_INT(BADGE_DISPLAY_HEIGHT))) {
jumpnrun_enemy_despawn(self);
if(self->base.flags & JUMPNRUN_ENEMY_SPAWNED) {
if(!enemy_in_spawn_area(self, state) || fixed_point_gt(rectangle_top (enemy_hitbox(self)), FIXED_INT(BADGE_DISPLAY_HEIGHT))) {
jumpnrun_enemy_despawn(self);
+ } else if(jumpnrun_moveable_dying(&self->base)) {
+ if(jumpnrun_moveable_finished_dying(&self->base)) {
+ jumpnrun_enemy_despawn(self);
+ } else {
+ if(fb) {
+ jumpnrun_render_splosion(fb, state, &self->base);
+ }
+ ++self->base.tick_minor;
+ }
} else {
if((self->base.flags & JUMPNRUN_ENEMY_MOVING) || enemy_on_screen(self, state)) {
self->base.flags |= JUMPNRUN_ENEMY_MOVING;
} else {
if((self->base.flags & JUMPNRUN_ENEMY_MOVING) || enemy_on_screen(self, state)) {
self->base.flags |= JUMPNRUN_ENEMY_MOVING;
@@
-182,9
+196,10
@@
void enemy_collision_tiles_bounce_horiz(jumpnrun_enemy *self,
lv,
visible_tiles,
&inertia_mod);
lv,
visible_tiles,
&inertia_mod);
+ self->base.inertia.y = inertia_mod.y;
if(killed) {
if(killed) {
- jumpnrun_enemy_
despawn
(self);
+ jumpnrun_enemy_
kill
(self);
} else if(fixed_point_ne(inertia_mod.x, self->base.inertia.x)) {
enemy_bounce(self);
}
} else if(fixed_point_ne(inertia_mod.x, self->base.inertia.x)) {
enemy_bounce(self);
}
@@
-196,7
+211,7
@@
void enemy_collision_player_deadly(struct jumpnrun_enemy *self,
(void) player_inertia_mod;
if(rectangle_intersect(enemy_hitbox(self), &state->player.base.hitbox)) {
(void) player_inertia_mod;
if(rectangle_intersect(enemy_hitbox(self), &state->player.base.hitbox)) {
-
state->player.base.flags |= JUMPNRUN_PLAYER_DEAD
;
+
jumpnrun_player_kill(&state->player)
;
}
}
}
}
@@
-206,13
+221,14
@@
void enemy_collision_player_jumpable(jumpnrun_enemy *self,
{
if(rectangle_intersect(enemy_hitbox(self), &state->player.base.hitbox)) {
if(fixed_point_lt(rectangle_top(&state->player.base.hitbox), rectangle_top(enemy_hitbox(self))) &&
{
if(rectangle_intersect(enemy_hitbox(self), &state->player.base.hitbox)) {
if(fixed_point_lt(rectangle_top(&state->player.base.hitbox), rectangle_top(enemy_hitbox(self))) &&
- fixed_point_gt(state->player.base.inertia.y, FIXED_INT(0)))
+ fixed_point_gt(state->player.base.inertia.y, FIXED_INT(0)) &&
+ jumpnrun_player_alive(&state->player))
{
{
- jumpnrun_enemy_
despawn
(self);
+ jumpnrun_enemy_
kill
(self);
player_inertia_mod->y = FIXED_POINT(0, -250);
state->player.base.jumpable_frames = 12;
} else {
player_inertia_mod->y = FIXED_POINT(0, -250);
state->player.base.jumpable_frames = 12;
} else {
-
state->player.base.flags |= JUMPNRUN_PLAYER_DEAD
;
+
jumpnrun_player_kill(&state->player)
;
}
}
}
}
}
}
@@
-234,7
+250,7
@@
void enemy_collision_shots_die(struct jumpnrun_enemy *self,
if(jumpnrun_shot_spawned(shot)) {
if(rectangle_intersect(enemy_hitbox(self), &shot->current_box)) {
if(jumpnrun_shot_spawned(shot)) {
if(rectangle_intersect(enemy_hitbox(self), &shot->current_box)) {
-
self->base.flags &= ~JUMPNRUN_ENEMY_SPAWNED
;
+
jumpnrun_enemy_kill(self)
;
jumpnrun_shot_despawn(shot);
}
}
jumpnrun_shot_despawn(shot);
}
}
This page took
0.025239 seconds
and
4
git commands to generate.