Implements the erupt skill
Also fixed monsters dying through bleeding logic
This commit is contained in:
parent
223a3b00c1
commit
c043ad09cf
Binary file not shown.
|
@ -91,6 +91,7 @@ load_effects(void)
|
||||||
effects[DOOR_OPEN] = load_effect("Sounds/FX/door_open.wav");
|
effects[DOOR_OPEN] = load_effect("Sounds/FX/door_open.wav");
|
||||||
effects[KEY_PICKUP] = load_effect("Sounds/FX/key_pickup.wav");
|
effects[KEY_PICKUP] = load_effect("Sounds/FX/key_pickup.wav");
|
||||||
effects[BLINK_EFFECT] = load_effect("Sounds/FX/blink.wav");
|
effects[BLINK_EFFECT] = load_effect("Sounds/FX/blink.wav");
|
||||||
|
effects[BLAST_EFFECT] = load_effect("Sounds/FX/blast.wav");
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -67,6 +67,7 @@ typedef enum Fx_t {
|
||||||
DOOR_OPEN,
|
DOOR_OPEN,
|
||||||
KEY_PICKUP,
|
KEY_PICKUP,
|
||||||
BLINK_EFFECT,
|
BLINK_EFFECT,
|
||||||
|
BLAST_EFFECT,
|
||||||
LAST_EFFECT
|
LAST_EFFECT
|
||||||
} Fx;
|
} Fx;
|
||||||
|
|
||||||
|
|
|
@ -552,7 +552,7 @@ monster_perform_aoe_attack(Monster *m, RoomMatrix *rm)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
apply_bleed_damage(Monster *m)
|
apply_bleed_damage(Player *p, Monster *m)
|
||||||
{
|
{
|
||||||
if (!m->emitters.bleed->enabled)
|
if (!m->emitters.bleed->enabled)
|
||||||
return;
|
return;
|
||||||
|
@ -560,12 +560,13 @@ apply_bleed_damage(Monster *m)
|
||||||
uint32_t dmg = m->stats.lvl * 2;
|
uint32_t dmg = m->stats.lvl * 2;
|
||||||
monster_hit(m, dmg);
|
monster_hit(m, dmg);
|
||||||
m->stats.hp -= dmg;
|
m->stats.hp -= dmg;
|
||||||
|
player_monster_kill_check(p, m);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
monster_move(Monster *m, RoomMatrix *rm, Map *map)
|
monster_move(Monster *m, RoomMatrix *rm, Map *map)
|
||||||
{
|
{
|
||||||
apply_bleed_damage(m);
|
apply_bleed_damage(roommatrix_get_player(rm), m);
|
||||||
|
|
||||||
Player *player = roommatrix_get_player(rm);
|
Player *player = roommatrix_get_player(rm);
|
||||||
if (player && player->phase_count)
|
if (player && player->phase_count)
|
||||||
|
|
|
@ -542,6 +542,7 @@ player_create(class_t class, Camera *cam)
|
||||||
case MAGE:
|
case MAGE:
|
||||||
m_strcpy(asset, 100, "Commissions/Mage.png");
|
m_strcpy(asset, 100, "Commissions/Mage.png");
|
||||||
player->stats = (Stats) MAGE_STATS;
|
player->stats = (Stats) MAGE_STATS;
|
||||||
|
player->skills[1] = skill_create(ERUPT, cam);
|
||||||
player->skills[2] = skill_create(BLINK, cam);
|
player->skills[2] = skill_create(BLINK, cam);
|
||||||
break;
|
break;
|
||||||
case PALADIN:
|
case PALADIN:
|
||||||
|
|
77
src/skill.c
77
src/skill.c
|
@ -163,7 +163,7 @@ static char *blink_tooltip[] = {
|
||||||
" object. Monsters will not obstruct your blink.", "",
|
" object. Monsters will not obstruct your blink.", "",
|
||||||
"",
|
"",
|
||||||
"COOLDOWN:", "",
|
"COOLDOWN:", "",
|
||||||
" 5 turns", "",
|
" 4 turns", "",
|
||||||
"",
|
"",
|
||||||
"USAGE:",
|
"USAGE:",
|
||||||
" activate the skill (press ", "3", ")", "",
|
" activate the skill (press ", "3", ")", "",
|
||||||
|
@ -174,6 +174,23 @@ static char *blink_tooltip[] = {
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static char *erupt_tooltip[] = {
|
||||||
|
"ERUPT", "",
|
||||||
|
"",
|
||||||
|
" You erupt in a magical explosion damaging monsters", "",
|
||||||
|
" around you and causing bleeding.", "",
|
||||||
|
"",
|
||||||
|
"COOLDOWN:", "",
|
||||||
|
" 3 turns", "",
|
||||||
|
"",
|
||||||
|
"USAGE:",
|
||||||
|
" Erupt (press ", "2", ")", "",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"Press ", "ESC", " to close", "",
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
static char *dagger_tooltip[] = {
|
static char *dagger_tooltip[] = {
|
||||||
"THROW DAGGER", "",
|
"THROW DAGGER", "",
|
||||||
"",
|
"",
|
||||||
|
@ -835,8 +852,60 @@ create_blink(void)
|
||||||
s->clip = CLIP32(32, 0);
|
s->clip = CLIP32(32, 0);
|
||||||
s->fixed = true;
|
s->fixed = true;
|
||||||
Skill *skill = create_default("Blink", s);
|
Skill *skill = create_default("Blink", s);
|
||||||
skill->levelcap = 4;
|
skill->levelcap = 3;
|
||||||
skill->use = skill_blink;
|
skill->use = skill_blink;
|
||||||
|
skill->resetTime = 4;
|
||||||
|
return skill;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool
|
||||||
|
skill_erupt(Skill *skill, SkillData *data)
|
||||||
|
{
|
||||||
|
UNUSED(skill);
|
||||||
|
|
||||||
|
Player *player = data->player;
|
||||||
|
RoomMatrix *rm = data->matrix;
|
||||||
|
|
||||||
|
gui_log("You erupt in a magical explosion");
|
||||||
|
particle_engine_eldritch_explosion(player->sprite->pos, DIM(32, 32));
|
||||||
|
mixer_play_effect(BLAST_EFFECT);
|
||||||
|
|
||||||
|
Position playerMPos = position_to_matrix_coords(&player->sprite->pos);
|
||||||
|
for (Sint32 i = -1; i <= 1; ++i) {
|
||||||
|
for (Sint32 j = -1; j <= 1; ++j) {
|
||||||
|
|
||||||
|
if (i == 0 && j == 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
RoomSpace *r = &rm->spaces[playerMPos.x + i][playerMPos.y + j];
|
||||||
|
if (r->monster) {
|
||||||
|
player->stats.advantage = true;
|
||||||
|
int dmg = stats_fight(&player->stats, &r->monster->stats);
|
||||||
|
player->stats.advantage = false;
|
||||||
|
monster_hit(r->monster, dmg);
|
||||||
|
gui_log("%s takes %d damage from the explosion", r->monster->label, dmg);
|
||||||
|
monster_set_bleeding(r->monster);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Skill *
|
||||||
|
create_erupt(void)
|
||||||
|
{
|
||||||
|
Texture *t = texturecache_add("Extras/Skills.png");
|
||||||
|
Sprite *s = sprite_create();
|
||||||
|
sprite_set_texture(s, t, 0);
|
||||||
|
s->dim = GAME_DIMENSION;
|
||||||
|
s->clip = CLIP32(32, 0);
|
||||||
|
s->fixed = true;
|
||||||
|
Skill *skill = create_default("Erupt", s);
|
||||||
|
skill->levelcap = 3;
|
||||||
|
skill->use = skill_erupt;
|
||||||
|
skill->instantUse = true;
|
||||||
|
skill->resetTime = 3;
|
||||||
return skill;
|
return skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -861,6 +930,10 @@ skill_create(enum SkillType t, Camera *cam)
|
||||||
skill = create_blink();
|
skill = create_blink();
|
||||||
skill->tooltip = tooltip_create(blink_tooltip, cam);
|
skill->tooltip = tooltip_create(blink_tooltip, cam);
|
||||||
break;
|
break;
|
||||||
|
case ERUPT:
|
||||||
|
skill = create_erupt();
|
||||||
|
skill->tooltip = tooltip_create(erupt_tooltip, cam);
|
||||||
|
break;
|
||||||
case DAGGER_THROW:
|
case DAGGER_THROW:
|
||||||
skill = create_throw_dagger();
|
skill = create_throw_dagger();
|
||||||
skill->tooltip = tooltip_create(dagger_tooltip, cam);
|
skill->tooltip = tooltip_create(dagger_tooltip, cam);
|
||||||
|
|
|
@ -36,7 +36,8 @@ enum SkillType {
|
||||||
BACKSTAB,
|
BACKSTAB,
|
||||||
TRIP,
|
TRIP,
|
||||||
PHASE,
|
PHASE,
|
||||||
BLINK
|
BLINK,
|
||||||
|
ERUPT
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct SkillData_t {
|
typedef struct SkillData_t {
|
||||||
|
|
Loading…
Reference in New Issue