diff --git a/assets-cg/levels/lv1.txt b/assets-cg/levels/lv1.txt index e0cff64..d5afa27 100644 --- a/assets-cg/levels/lv1.txt +++ b/assets-cg/levels/lv1.txt @@ -22,10 +22,11 @@ delay: 8s wave: 10s 10*slime/1 wave: 12s 4*slime/1 4*bat/2 -wave: 4s 2*fire_slime/4 +wave: 8s 2*fire_slime/4 +wave: 5s 4*slime/1 # "Boss" wave #2 item: potion_hp wave: 6s 8*slime/1 8*bat/2 2*fire_slime/4 -delay: 5s +delay: 8s wave: 8s 12*bat/2 4*fire_slime/4 1*gunslinger/8 diff --git a/assets-cg/skillicons.png b/assets-cg/skillicons.png index f6aa9c1..1ab876a 100644 Binary files a/assets-cg/skillicons.png and b/assets-cg/skillicons.png differ diff --git a/src/aoe.c b/src/aoe.c index fbd65de..7980a0b 100644 --- a/src/aoe.c +++ b/src/aoe.c @@ -115,7 +115,7 @@ entity_t *aoe_make_attack(uint16_t type, entity_t *origin, vec2 dir) || type == AOE_SLASH || type == AOE_IMPALE || type == AOE_JUDGEMENT) { - aoe->data.generic.strength = f->ATK; + aoe->data.generic.strength = f->MAG; aoe->data.generic.dir = p->facing; } else if(type == AOE_PROJECTILE) { @@ -132,7 +132,7 @@ entity_t *aoe_make_attack(uint16_t type, entity_t *origin, vec2 dir) aoe->repeat_delay = fix(0.2); } else if(type == AOE_BULLET) { - aoe->data.bullet.strength = f->ATK; + aoe->data.bullet.strength = f->MAG; aoe->data.bullet.dir = p->facing; aoe->data.bullet.v = fix(10.0); aoe->data.bullet.final_v = fix(4.5); @@ -221,7 +221,7 @@ static bool attack_apply(game_t *game, aoe_t *aoe, entity_t *target) } else if(aoe->type == AOE_JUDGEMENT) { r = fix(0); - damage = aoe->data.generic.strength * 5; + damage = aoe->data.generic.strength * 3; } else if(aoe->type == AOE_BULLET) { /* TODO: Sideways knockback */ diff --git a/src/enemies.c b/src/enemies.c index 6e64b1d..810c057 100644 --- a/src/enemies.c +++ b/src/enemies.c @@ -31,8 +31,8 @@ static enemy_t const slime_1 = { .friction = fix(0.6), .max_disruption_speed = fix(999.0), }, - .stats_base = { .HP=10, .ATK=8, .MAG=5, .DEF=4 }, - .stats_growth = { .HP=8, .ATK=4, .MAG=4, .DEF=3 }, + .stats_base = { .HP=10, .ATK=8, .MAG=5, .DEF=5 }, + .stats_growth = { .HP=8, .ATK=4, .MAG=4, .DEF=2 }, .shadow_size = 4, .xp = 2, @@ -70,8 +70,8 @@ static enemy_t const fire_slime_4 = { .max_disruption_speed = fix(999.0), }, /* Same as slime/1 */ - .stats_base = { .HP=10, .ATK=8, .MAG=5, .DEF=4 }, - .stats_growth = { .HP=8, .ATK=4, .MAG=4, .DEF=3 }, + .stats_base = { .HP=10, .ATK=8, .MAG=5, .DEF=5 }, + .stats_growth = { .HP=8, .ATK=4, .MAG=4, .DEF=2 }, .shadow_size = 4, .xp = 14, diff --git a/src/main.c b/src/main.c index b88f753..3334d2d 100644 --- a/src/main.c +++ b/src/main.c @@ -461,8 +461,17 @@ int main(void) player_data.equipment[slot] = game.menu_cursor; /* Update skills */ - player_compute_skills(player, player_data.equipment, - player_f->skills); + int sk[6]; + player_compute_skills(player, player_data.equipment, sk); + /* Reet the cooldown for all skills that changed */ + for(int i = 0; i < 6; i++) { + if(sk[i] < 0) + player_f->actions_cooldown[i] = 0; + else if(sk[i] != player_f->skills[i]) + player_f->actions_cooldown[i] = + skill_cooldown(sk[i]); + player_f->skills[i] = sk[i]; + } } } } diff --git a/src/render.c b/src/render.c index 2c975e0..098a67c 100644 --- a/src/render.c +++ b/src/render.c @@ -693,14 +693,14 @@ void render_game(game_t const *g, bool show_hitboxes) if(selected_item >= 0) { int w, h; dsize(item_name(selected_item), NULL, &w, &h); - drect(x1+5, 99, x1+w+8, 98+h+4, RGB24(0x3d5050)); - dtext(x1+7, 100, C_WHITE, item_name(selected_item)); + drect(x1+5, 104, x1+w+8, 104+h+3, RGB24(0x3d5050)); + dtext(x1+7, 105, C_WHITE, item_name(selected_item)); char const *desc = item_description(selected_item); if(desc) - dtext_multi(x1+7, 116, C_WHITE, desc); + dtext_multi(x1+7, 123, C_WHITE, desc); - int dx = small_text(x1+7, 158, -1, "SHIFT", -1); + int dx = small_text(x1+7, 156, -1, "SHIFT", -1); char const *use_str = "Use"; if(item_is_equip(selected_item)) { use_str = "Equip"; @@ -708,7 +708,7 @@ void render_game(game_t const *g, bool show_hitboxes) if(slot >= 0 && player_data->equipment[slot] == g->menu_cursor) use_str = "Unequip"; } - dtext(x1+7+dx+4, 158, C_WHITE, use_str); + dtext(x1+7+dx+4, 156, C_WHITE, use_str); } /* What the growth is with the current equips */ @@ -747,7 +747,7 @@ void render_game(game_t const *g, bool show_hitboxes) if(s1 == s2) continue; int x = 31 + 48*i + 64*(i>=3); int y = HUD_Y - 33; - skill_render(x+2, y+2, s2, 1, RGB24(0x3868a8)); + skill_render(x+2, y+2, s2, 3, C_WHITE); } } diff --git a/src/skills.c b/src/skills.c index cffb809..a42522d 100644 --- a/src/skills.c +++ b/src/skills.c @@ -109,24 +109,40 @@ bool skill_use(game_t *game, entity_t *e, int slot, vec2 dir) return true; } -void skill_render(int x, int y, int skill, int bg, int color) +bool skill_render_get(int skill, image_t **img, int *left, int *top) { extern bopti_image_t img_skillicons; + *img = &img_skillicons; + *top = 0; + + int base = 3; - int n = -1; if(skill == SKILL_DASH) - n = 0; - if(skill == AOE_SHOCK) - n = 1; - if(skill == AOE_JUDGEMENT) - n = 2; - if(skill == AOE_BULLET) - n = 3; + *left = 23 * (base + 0); + else if(skill == AOE_SHOCK) + *left = 23 * (base + 1); + else if(skill == AOE_JUDGEMENT) + *left = 23 * (base + 2); + else if(skill == AOE_BULLET) + *left = 23 * (base + 3); + else + return false; + + return true; +} + +void skill_render(int x, int y, int skill, int bg, int color) +{ + image_t *img; + int left, top; + bool exists = skill_render_get(skill, &img, &left, &top); if(bg > 0) - dsubimage(x, y, &img_skillicons, 23*(bg-1), 0, 23, 23, DIMAGE_NONE); - if(n >= 0) - dsubimage(x, y, &img_skillicons, 23*(n+2), 0, 23, 23, DIMAGE_NONE); + dsubimage(x, y, img, 23*(bg-1), 0, 23, 23, DIMAGE_NONE); + if(!exists) + return; + + dsubimage(x, y, img, left, top, 23, 23, DIMAGE_NONE); /* Hacky color change */ for(int dy = 0; dy < 23; dy++) diff --git a/src/skills.h b/src/skills.h index 254cb1f..80e540b 100644 --- a/src/skills.h +++ b/src/skills.h @@ -27,3 +27,6 @@ bool skill_use(game_t *g, entity_t *e, int slot, vec2 dir); /* Render a skill's image */ void skill_render(int x, int y, int skill, int bg, int color); + +/* Reference to a skill's image */ +bool skill_render_get(int skill, image_t **img, int *left, int *top);