Implemented the backstab skill
This commit is contained in:
parent
81ccf8a730
commit
743e4a3bac
|
@ -91,7 +91,7 @@ menu_create_character_selector(void (*onCharacterSelect)(const char *))
|
||||||
"Commissions/Rogue.png"
|
"Commissions/Rogue.png"
|
||||||
};
|
};
|
||||||
|
|
||||||
char *callbackData[] = {
|
static char *callbackData[] = {
|
||||||
"warrior",
|
"warrior",
|
||||||
"rogue"
|
"rogue"
|
||||||
};
|
};
|
||||||
|
|
84
src/skill.c
84
src/skill.c
|
@ -93,6 +93,25 @@ static char *trip_tooltip[] = {
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static char *backstab_tooltip[] = {
|
||||||
|
"BACKSTAB",
|
||||||
|
"",
|
||||||
|
" You flip over an adjecant enemy taking it's place and",
|
||||||
|
" it taking yours, finnishing off with a stab in the back",
|
||||||
|
" of your foe.",
|
||||||
|
"",
|
||||||
|
"COOLDOWN:",
|
||||||
|
" 5 turns",
|
||||||
|
"",
|
||||||
|
"USAGE:",
|
||||||
|
" activate the skill (press 1)",
|
||||||
|
" followed by a direction (left, right, up or down)",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"Press ESC to close",
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
static char *charge_tooltip[] = {
|
static char *charge_tooltip[] = {
|
||||||
"CHARGE",
|
"CHARGE",
|
||||||
"",
|
"",
|
||||||
|
@ -412,6 +431,68 @@ create_trip(void)
|
||||||
return skill;
|
return skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool
|
||||||
|
skill_backstab(Skill *skill, SkillData *data)
|
||||||
|
{
|
||||||
|
UNUSED(skill);
|
||||||
|
|
||||||
|
Position playerPos, targetPos;
|
||||||
|
if (!check_skill_validity(&playerPos, &targetPos, data)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
RoomSpace *targetSpace = &data->matrix->spaces[targetPos.x][targetPos.y];
|
||||||
|
if (targetSpace->occupied) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector2d reverseDirection = data->direction;
|
||||||
|
reverseDirection.x *= -1;
|
||||||
|
reverseDirection.y *= -1;
|
||||||
|
|
||||||
|
mixer_play_effect(SWING0 + get_random(2));
|
||||||
|
|
||||||
|
data->player->sprite->pos.x += (int) data->direction.x * TILE_DIMENSION;
|
||||||
|
data->player->sprite->pos.y += (int) data->direction.y * TILE_DIMENSION;
|
||||||
|
player_turn(data->player, &reverseDirection);
|
||||||
|
animation_run(data->player->swordAnimation);
|
||||||
|
|
||||||
|
if (targetSpace->monster) {
|
||||||
|
targetSpace->monster->sprite->pos.x += (int) reverseDirection.x * TILE_DIMENSION;
|
||||||
|
targetSpace->monster->sprite->pos.y += (int) reverseDirection.y * TILE_DIMENSION;
|
||||||
|
|
||||||
|
targetSpace->monster->stats.disadvantage = true;
|
||||||
|
int dmg = stats_fight(&data->player->stats, &targetSpace->monster->stats);
|
||||||
|
targetSpace->monster->stats.disadvantage = false;
|
||||||
|
monster_hit(targetSpace->monster, dmg);
|
||||||
|
player_monster_kill_check(data->player, targetSpace->monster);
|
||||||
|
if (dmg) {
|
||||||
|
mixer_play_effect(SWORD_HIT);
|
||||||
|
monster_set_state(targetSpace->monster, STUNNED, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Skill *
|
||||||
|
create_backstab(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(0, 0);
|
||||||
|
s->fixed = true;
|
||||||
|
Skill *skill = create_default("Backstab", s);
|
||||||
|
skill->levelcap = 2;
|
||||||
|
skill->instantUse = false;
|
||||||
|
skill->resetTime = 5;
|
||||||
|
skill->available = NULL;
|
||||||
|
skill->use = skill_backstab;
|
||||||
|
skill->actionRequired = true;
|
||||||
|
return skill;
|
||||||
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
skill_sip_health_available(Player *player)
|
skill_sip_health_available(Player *player)
|
||||||
{
|
{
|
||||||
|
@ -623,6 +704,9 @@ skill_create(enum SkillType t, Camera *cam)
|
||||||
skill->tooltip = tooltip_create(trip_tooltip, cam);
|
skill->tooltip = tooltip_create(trip_tooltip, cam);
|
||||||
break;
|
break;
|
||||||
case BACKSTAB:
|
case BACKSTAB:
|
||||||
|
skill = create_backstab();
|
||||||
|
skill->tooltip = tooltip_create(backstab_tooltip, cam);
|
||||||
|
break;
|
||||||
case BLINK:
|
case BLINK:
|
||||||
error("Skill %d not implemented", t);
|
error("Skill %d not implemented", t);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
Loading…
Reference in New Issue