more improvements to UI and balance

This commit is contained in:
Lephenixnoir 2022-05-31 20:45:48 +01:00
parent 07bffbdc2c
commit 26c4fd9e1c
Signed by: Lephenixnoir
GPG Key ID: 1BBA026E13FC0495
8 changed files with 58 additions and 29 deletions

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 588 B

After

Width:  |  Height:  |  Size: 7.7 KiB

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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