From 068f98249c868a9e1739a081879c9aa5fef3d715 Mon Sep 17 00:00:00 2001 From: Lephenixnoir Date: Fri, 23 Dec 2022 22:34:49 +0100 Subject: [PATCH] hud: backpack animation when picking up items --- CMakeLists.txt | 1 + assets-cg/fxconv-metadata.txt | 6 ++++++ assets-cg/hud.png | Bin 8371 -> 8154 bytes assets-cg/hud_backpack.ase | Bin 0 -> 1171 bytes src/anim.c | 2 ++ src/anim.h | 2 ++ src/aoe.c | 4 +++- src/game.c | 9 +++++++++ src/game.h | 5 +++++ src/render.c | 12 ++++++++++-- 10 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 assets-cg/hud_backpack.ase diff --git a/CMakeLists.txt b/CMakeLists.txt index 3415713..c8b868e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -62,6 +62,7 @@ set(ASSETS assets-cg/menu_title.png # HUD assets-cg/hud.png + assets-cg/hud_backpack.ase assets-cg/hud_delay.png assets-cg/hud_flag.png assets-cg/hud_itemslots.png diff --git a/assets-cg/fxconv-metadata.txt b/assets-cg/fxconv-metadata.txt index 1883b2f..28f2eb6 100644 --- a/assets-cg/fxconv-metadata.txt +++ b/assets-cg/fxconv-metadata.txt @@ -9,6 +9,12 @@ hud_xp.ase: center: 6, 8 next: Idle=Idle, Shine=Idle, Explode=Idle +hud_backpack.ase: + custom-type: aseprite-anim + name: frames_hud_backpack + center: 0, 0 + next: Idle=Idle, Open=Idle + font_rogue.png: type: font name: font_rogue diff --git a/assets-cg/hud.png b/assets-cg/hud.png index e8958d49dd771b875fc0760eb5fe76f986a4e34a..b5c8522746973a383539daa1da4041e06e38a6b2 100644 GIT binary patch delta 4466 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 Ef+T=-p#T5? delta 4699 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 diff --git a/assets-cg/hud_backpack.ase b/assets-cg/hud_backpack.ase new file mode 100644 index 0000000000000000000000000000000000000000..7f68e70695f1bf942ec3aa8dbab803588c00d1b2 GIT binary patch literal 1171 zcmcJNdq`7J9LJBkH8GtN(hLG`VM7vaiup)Oni!>}rlpojiPQ3tk9?G^8i_Pm=8zQ8 zZA}G}VhdD4(vr;HDM}?~;VQJGCJW27oO%21W=;kF>~}dI&OP^BKHuNH=L(CE_l>K_ zT3i&dAcTl8%!M`6BC*ExKPt+SkeLZ<#%eM+VQ?r$xk&d0^K}$8zv8m!2{WY$*+}_- zp>9E7T7VZQj|~Lh)4(C_)t4Hn8-(6im;^01w4RgGE9asPXm&hvHJeL2)}M zuMPucIRZKZ4X{k#ox%i7paaB5b_7RiL`GhOMN-5>Mg&AUL_;owLL$U5Wua-LKm_<9 zhZ$NpA%qR89S}HE_}nWMi|i3)rCJd7(hV#UnVXu;#Ul0ZZF=dQ3!bqkt3|J&Il>`( zlZ#VNQeG!;!=_AavIxE4w` z&Ns&{OAB|mda9@Po+()0;~g=!KftePKrlve@DtD?p pxsR{t_W$}h`@x)M^@zVt;I>Tcytrr6KVZs|thA5$H4FPJ$RB|hO!)u+ literal 0 HcmV?d00001 diff --git a/src/anim.c b/src/anim.c index 107f3eb..0780f01 100644 --- a/src/anim.c +++ b/src/anim.c @@ -60,6 +60,8 @@ ANIM4(player, Hit); ANIM1(hud_xp_Idle); ANIM1(hud_xp_Shine); ANIM1(hud_xp_Explode); +ANIM1(hud_backpack_Idle); +ANIM1(hud_backpack_Open); /* Items */ ANIM1(item_life); diff --git a/src/anim.h b/src/anim.h index d9f7bf7..30c873a 100644 --- a/src/anim.h +++ b/src/anim.h @@ -103,6 +103,8 @@ extern anim_t anims_player_Hit; extern anim_t anims_hud_xp_Idle; extern anim_t anims_hud_xp_Shine; extern anim_t anims_hud_xp_Explode; +extern anim_t anims_hud_backpack_Idle; +extern anim_t anims_hud_backpack_Open; /* Items */ extern anim_t anims_item_life; diff --git a/src/aoe.c b/src/aoe.c index 38dc9d6..1377bbf 100644 --- a/src/aoe.c +++ b/src/aoe.c @@ -273,8 +273,10 @@ void aoe_apply(game_t *game, entity_t *entity, entity_t *e) if(aoe->type == AOE_ITEM && e_f && e_f->player) { bool picked = player_give_item(e, aoe->data.item.type); - if(picked) + if(picked) { + game_hud_start_backpack_anim(game); aoe->lifetime = 0; + } /* Don't bother recording the hit since the item will disappear */ was_hit = false; } diff --git a/src/game.c b/src/game.c index 397ea6b..0d0132a 100644 --- a/src/game.c +++ b/src/game.c @@ -43,6 +43,8 @@ bool game_load(game_t *g, level_t const *level) g->hud_xp_anim.frame = anims_hud_xp_Idle.start[0]; g->hud_xp_anim.elapsed = 0; + g->hud_backpack_anim.frame = anims_hud_backpack_Idle.start[0]; + g->hud_backpack_anim.elapsed = 0; g->menu_time = fix(0); g->menu_open = false; @@ -185,6 +187,12 @@ void game_message(game_t *g, fixed_t duration, char const *fmt, ...) g->message_time = duration; } +void game_hud_start_backpack_anim(game_t *g) +{ + g->hud_backpack_anim.frame = anims_hud_backpack_Open.start[0]; + g->hud_backpack_anim.elapsed = 0; +} + //--- // Object management functions //--- @@ -430,6 +438,7 @@ void game_update_animations(game_t *g, fixed_t dt) g->map_anim[i] += fround(dt * 1000); anim_state_update(&g->hud_xp_anim, dt); + anim_state_update(&g->hud_backpack_anim, dt); } void game_update_effects(game_t *g, fixed_t dt) diff --git a/src/game.h b/src/game.h index f40a979..3722dbf 100644 --- a/src/game.h +++ b/src/game.h @@ -52,6 +52,8 @@ typedef struct game { /* XP bar animation */ anim_state_t hud_xp_anim; + /* Backpack animation */ + anim_state_t hud_backpack_anim; /* Inventory/status menu opening time (0 is closed, 1 is open) */ fixed_t menu_time; /* Whether the menu is open or closed. Dictates whether menu_time goes @@ -90,6 +92,9 @@ void game_shake(game_t *g, int amplitude, fixed_t duration); /* Set the current game message */ void game_message(game_t *g, fixed_t duration, char const *fmt, ...); +/* Start the backpack animation */ +void game_hud_start_backpack_anim(game_t *g); + //--- // Managing dynamic game elements //--- diff --git a/src/render.c b/src/render.c index f7b8fa8..3d2e604 100644 --- a/src/render.c +++ b/src/render.c @@ -527,6 +527,11 @@ static void dtext_multi(int x0, int y, int color, char const *str) } } +static int skill_x(int i) +{ + return 23 + 44*i + 103*(i>=3); +} + void render_game(game_t const *g, bool show_hitboxes) { camera_t const *camera = &g->camera; @@ -627,7 +632,7 @@ void render_game(game_t const *g, bool show_hitboxes) fixed_t cooldown_remaining = player_f->actions_cooldown[i+1]; int skill = player_f->skills[i+1]; - int x = 23 + 44*i + 103*(i>=3); + int x = skill_x(i); int y = HUD_Y - 33; int bg = (cooldown_remaining != 0) ? 2 : 1; skill_render(x+2, y+2, skill, bg, C_WHITE); @@ -648,6 +653,9 @@ void render_game(game_t const *g, bool show_hitboxes) } } + /* Render backpack icon */ + anim_frame_render(skill_x(5)+2, HUD_Y-33+2, g->hud_backpack_anim.frame); + if(g->menu_time > 0) { int x1 = cubic(-130, 0, g->menu_time, fix(1)); int x2 = DWIDTH - 130 - x1; @@ -745,7 +753,7 @@ void render_game(game_t const *g, bool show_hitboxes) for(int i = 0; i < 5; i++) { int s1 = player_f->skills[i+1], s2 = switched_skills[i+1]; if(s1 == s2) continue; - int x = 23 + 44*i + 103*(i>=3); + int x = skill_x(i); int y = HUD_Y - 33; skill_render(x+2, y+2, s2, 3, C_WHITE); }