apply enemy walking animations
This commit is contained in:
parent
d6e89dc625
commit
f28231ff22
|
@ -67,12 +67,8 @@ set(ASSETS
|
|||
assets-cg/enemies/slime_left.aseprite
|
||||
assets-cg/enemies/slime_right.aseprite
|
||||
# Enemies: Bat
|
||||
assets-cg/enemies/bat_idle_left.png
|
||||
assets-cg/enemies/bat_idle_right.png
|
||||
assets-cg/enemies/bat_damage_left.png
|
||||
assets-cg/enemies/bat_damage_right.png
|
||||
assets-cg/enemies/bat_death_left.png
|
||||
assets-cg/enemies/bat_death_right.png
|
||||
assets-cg/enemies/bat_left.aseprite
|
||||
assets-cg/enemies/bat_right.aseprite
|
||||
# Misc
|
||||
assets-cg/font_damage_red.png
|
||||
assets-cg/font_damage_white.png
|
||||
|
|
|
@ -1,38 +1,15 @@
|
|||
*.png:
|
||||
custom-type: animation
|
||||
name_regex: (.*)\.png anim_\1
|
||||
profile: p8
|
||||
|
||||
*.aseprite:
|
||||
custom-type: aseprite-anim
|
||||
name_regex: (.*)\.aseprite anims_\1
|
||||
profile: p8
|
||||
next: Idle=Idle, Walking=Walking, Hit=Idle
|
||||
|
||||
slime_*.aseprite:
|
||||
next: Idle=Idle, Walking=Idle, Hit=Idle
|
||||
slime_left.aseprite:
|
||||
center: 12, 17
|
||||
slime_right.aseprite:
|
||||
center: 13, 17
|
||||
|
||||
# Bat
|
||||
|
||||
bat_*.png:
|
||||
bat_left.aseprite:
|
||||
center: 10, 12
|
||||
bat_right.aseprite:
|
||||
center: 12, 12
|
||||
|
||||
bat_idle_left.png:
|
||||
frame_duration: 50, 100, 50, 100, 100
|
||||
next: anim_bat_idle_left
|
||||
bat_idle_right.png:
|
||||
frame_duration: 50, 100, 50, 100, 100
|
||||
next: anim_bat_idle_right
|
||||
|
||||
bat_damage_left.png:
|
||||
frame_duration: 120
|
||||
next: anim_bat_idle_left
|
||||
bat_damage_right.png:
|
||||
frame_duration: 120
|
||||
next: anim_bat_idle_right
|
||||
|
||||
bat_death_*.png:
|
||||
frame_duration: 100, 100, 100, 100
|
||||
|
|
12
src/anim.h
12
src/anim.h
|
@ -64,12 +64,12 @@ extern anim_frame_t anims_slime_right_Hit[];
|
|||
extern anim_frame_t anims_slime_left_Death[];
|
||||
extern anim_frame_t anims_slime_right_Death[];
|
||||
|
||||
extern anim_frame_t anim_bat_idle_left[];
|
||||
extern anim_frame_t anim_bat_idle_right[];
|
||||
extern anim_frame_t anim_bat_death_left[];
|
||||
extern anim_frame_t anim_bat_death_right[];
|
||||
extern anim_frame_t anim_bat_damage_left[];
|
||||
extern anim_frame_t anim_bat_damage_right[];
|
||||
extern anim_frame_t anims_bat_left_Idle[];
|
||||
extern anim_frame_t anims_bat_right_Idle[];
|
||||
extern anim_frame_t anims_bat_left_Hit[];
|
||||
extern anim_frame_t anims_bat_right_Hit[];
|
||||
extern anim_frame_t anims_bat_left_Death[];
|
||||
extern anim_frame_t anims_bat_right_Death[];
|
||||
|
||||
/* Quadri-directional animations. */
|
||||
extern anim_frame_t *anims_player_Idle[4];
|
||||
|
|
|
@ -7,8 +7,9 @@ static enemy_t const slime = {
|
|||
.hitbox = (frect_t){ -fix(3)/16, fix(4)/16, -fix(2)/16, fix(3)/16 },
|
||||
.sprite = (frect_t){ -fix(5)/16, fix(5)/16, -fix(4)/16, fix(3)/16 },
|
||||
.anim_idle = { anims_slime_left_Idle, anims_slime_right_Idle },
|
||||
.anim_walking = { anims_slime_left_Walking, anims_slime_right_Walking },
|
||||
.anim_hit = { anims_slime_left_Hit, anims_slime_right_Hit },
|
||||
.anim_death = { anims_slime_left_Death, anims_slime_right_Death },
|
||||
.anim_damage = { anims_slime_left_Hit, anims_slime_right_Hit },
|
||||
.movement_params = {
|
||||
.max_speed = fix(1),
|
||||
.propulsion = fix(12),
|
||||
|
@ -34,9 +35,10 @@ static enemy_t const bat = {
|
|||
.name = "Bat",
|
||||
.hitbox = (frect_t){ -fix(3)/16, fix(4)/16, -fix(2)/16, fix(3)/16 },
|
||||
.sprite = (frect_t){ -fix(5)/16, fix(5)/16, -fix(4)/16, fix(3)/16 },
|
||||
.anim_idle = { anim_bat_idle_left, anim_bat_idle_right },
|
||||
.anim_death = { anim_bat_death_left, anim_bat_death_right },
|
||||
.anim_damage = { anim_bat_damage_left, anim_bat_damage_right },
|
||||
.anim_idle = { anims_bat_left_Idle, anims_bat_right_Idle },
|
||||
.anim_walking = { anims_bat_left_Idle, anims_bat_right_Idle },
|
||||
.anim_hit = { anims_bat_left_Hit, anims_bat_right_Hit },
|
||||
.anim_death = { anims_bat_left_Death, anims_bat_right_Death },
|
||||
.movement_params = {
|
||||
.max_speed = fix(1.8),
|
||||
.propulsion = fix(8),
|
||||
|
|
|
@ -28,7 +28,7 @@ typedef struct {
|
|||
/* Sprite hitbox (interacts with attacks and effect areas) */
|
||||
frect_t sprite;
|
||||
/* Idle animation, death animation, damage animation */
|
||||
anim_frame_t *anim_idle[2], *anim_death[2], *anim_damage[2];
|
||||
anim_frame_t *anim_idle[2], *anim_walking[2], *anim_hit[2], *anim_death[2];
|
||||
/* Movement parameters */
|
||||
entity_movement_params_t movement_params;
|
||||
/* Statistics model */
|
||||
|
|
|
@ -161,7 +161,7 @@ int entity_damage(entity_t *e, int base_damage)
|
|||
if(e->HP == 0)
|
||||
entity_set_anim(e, enemies[e->identity]->anim_death[index], 4);
|
||||
else
|
||||
entity_set_anim(e, enemies[e->identity]->anim_damage[index], 3);
|
||||
entity_set_anim(e, enemies[e->identity]->anim_hit[index], 3);
|
||||
}
|
||||
else {
|
||||
entity_set_anim(e, anims_player_Hit[e->movement.facing], 3);
|
||||
|
|
13
src/main.c
13
src/main.c
|
@ -407,11 +407,18 @@ int main(void)
|
|||
else if(direction.x < 0) next.facing = LEFT;
|
||||
else if(e->movement.x < player->movement.x) next.facing = RIGHT;
|
||||
else next.facing = LEFT;
|
||||
bool set_anim = (e->movement.facing != next.facing);
|
||||
|
||||
bool will_move = !in_range;
|
||||
bool set_anim = (e->movement.facing != next.facing) ||
|
||||
((entity_moving(e) == 0) != (will_move == false)) ||
|
||||
(e->anim.frame == NULL);
|
||||
|
||||
game_try_move_entity(&game, e, &next);
|
||||
if(set_anim) entity_set_anim(e,
|
||||
enemies[e->identity]->anim_idle[e->movement.facing==RIGHT], 1);
|
||||
int id = e->movement.facing == RIGHT;
|
||||
if(set_anim && will_move)
|
||||
entity_set_anim(e, enemies[e->identity]->anim_walking[id], 1);
|
||||
else if(set_anim && !will_move)
|
||||
entity_set_anim(e, enemies[e->identity]->anim_idle[id], 1);
|
||||
|
||||
if(in_range && !e->current_attack) {
|
||||
/* Enemy attack */
|
||||
|
|
Loading…
Reference in New Issue