apply enemy walking animations

This commit is contained in:
Lephenixnoir 2021-10-23 17:14:59 +02:00
parent d6e89dc625
commit f28231ff22
Signed by: Lephenixnoir
GPG Key ID: 1BBA026E13FC0495
7 changed files with 30 additions and 48 deletions

View File

@ -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

View File

@ -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

View File

@ -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];

View File

@ -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),

View File

@ -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 */

View File

@ -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);

View File

@ -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 */