Skip to content

Commit

Permalink
use skill helper functions
Browse files Browse the repository at this point in the history
  • Loading branch information
mateofio committed Oct 10, 2020
1 parent 1566ff0 commit 35450bc
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 16 deletions.
10 changes: 3 additions & 7 deletions src/algo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -112,8 +112,7 @@ int CalcSkillToHit(const Game_Battler& source, const Game_Battler& target, const

// RPG_RT BUG: rm2k3 editor doesn't let you set the failure message for skills, and so you can't make them physical type anymore.
// Despite that, RPG_RT still checks the flag and run the below code?
if (skill.failure_message != 3
|| (skill.scope != lcf::rpg::Skill::Scope_enemy && skill.scope != lcf::rpg::Skill::Scope_enemies)) {
if (skill.failure_message != 3 || SkillTargetsAllies(skill)) {
return to_hit;
}

Expand Down Expand Up @@ -225,9 +224,7 @@ int CalcSkillEffect(const Game_Battler& source,
effect += skill.physical_rate * source.GetAtk() / 20;
effect += skill.magical_rate * source.GetSpi() / 40;

if ((skill.scope == lcf::rpg::Skill::Scope_enemy
|| skill.scope == lcf::rpg::Skill::Scope_enemies)
&& !skill.ignore_defense) {
if (SkillTargetsEnemies(skill) && !skill.ignore_defense) {
effect -= skill.physical_rate * target.GetDef() / 40;
effect -= skill.magical_rate * target.GetSpi() / 80;
}
Expand Down Expand Up @@ -285,8 +282,7 @@ bool IsSkillUsable(const lcf::rpg::Skill& skill,
return true;
}

if (skill.scope == lcf::rpg::Skill::Scope_enemy
|| skill.scope == lcf::rpg::Skill::Scope_enemies) {
if (SkillTargetsEnemies(skill)) {
return false;
}

Expand Down
10 changes: 5 additions & 5 deletions src/autobattle.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,8 @@ static int CalcSkillCostAutoBattle(const Game_Actor& source, const lcf::rpg::Ski
}

double CalcSkillHealAutoBattleTargetRank(const Game_Actor& source, const Game_Battler& target, const lcf::rpg::Skill& skill, bool apply_variance, bool emulate_bugs) {
assert(skill.type == lcf::rpg::Skill::Type_normal || skill.type >= lcf::rpg::Skill::Type_subskill);
assert(skill.scope == lcf::rpg::Skill::Scope_self || skill.scope == lcf::rpg::Skill::Scope_ally || skill.scope == lcf::rpg::Skill::Scope_party);
assert(Algo::IsNormalOrSubskill(skill));
assert(Algo::SkillTargetsAllies(skill));

const double src_max_sp = source.GetMaxSp();
const double tgt_max_hp = target.GetMaxHp();
Expand Down Expand Up @@ -124,8 +124,8 @@ double CalcSkillHealAutoBattleTargetRank(const Game_Actor& source, const Game_Ba
}

double CalcSkillDmgAutoBattleTargetRank(const Game_Actor& source, const Game_Battler& target, const lcf::rpg::Skill& skill, bool apply_variance, bool emulate_bugs) {
assert(skill.type == lcf::rpg::Skill::Type_normal || skill.type >= lcf::rpg::Skill::Type_subskill);
assert(skill.scope == lcf::rpg::Skill::Scope_enemy || skill.scope == lcf::rpg::Skill::Scope_enemies);
assert(Algo::IsNormalOrSubskill(skill));
assert(Algo::SkillTargetsEnemies(skill));
(void)emulate_bugs;

if (!(skill.affect_hp && target.Exists())) {
Expand Down Expand Up @@ -164,7 +164,7 @@ double CalcSkillAutoBattleRank(const Game_Actor& source, const lcf::rpg::Skill&
if (!source.IsSkillUsable(skill.ID)) {
return 0.0;
}
if (skill.type != lcf::rpg::Skill::Type_normal && skill.type < lcf::rpg::Skill::Type_subskill) {
if (!Algo::IsNormalOrSubskill(skill)) {
return 0.0;
}

Expand Down
5 changes: 1 addition & 4 deletions src/game_battlealgorithm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1136,10 +1136,7 @@ bool Game_BattleAlgorithm::Skill::Execute() {

auto* target = GetTarget();

this->healing =
skill.scope == lcf::rpg::Skill::Scope_ally ||
skill.scope == lcf::rpg::Skill::Scope_party ||
skill.scope == lcf::rpg::Skill::Scope_self;
this->healing = Algo::SkillTargetsAllies(skill);

this->revived = this->healing
&& !skill.state_effects.empty()
Expand Down
51 changes: 51 additions & 0 deletions tests/algo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1009,4 +1009,55 @@ TEST_CASE("SkillCost") {
}
}

TEST_CASE("SkillTargets") {
const MockActor m;

auto* skill = MakeDBSkill(1, 90, 0, 0, 0, 0);

skill->scope = lcf::rpg::Skill::Scope_enemy;
REQUIRE(Algo::SkillTargetsEnemies(*skill));
REQUIRE_FALSE(Algo::SkillTargetsAllies(*skill));

skill->scope = lcf::rpg::Skill::Scope_enemies;
REQUIRE(Algo::SkillTargetsEnemies(*skill));
REQUIRE_FALSE(Algo::SkillTargetsAllies(*skill));

skill->scope = lcf::rpg::Skill::Scope_self;
REQUIRE_FALSE(Algo::SkillTargetsEnemies(*skill));
REQUIRE(Algo::SkillTargetsAllies(*skill));

skill->scope = lcf::rpg::Skill::Scope_ally;
REQUIRE_FALSE(Algo::SkillTargetsEnemies(*skill));
REQUIRE(Algo::SkillTargetsAllies(*skill));

skill->scope = lcf::rpg::Skill::Scope_party;
REQUIRE_FALSE(Algo::SkillTargetsEnemies(*skill));
REQUIRE(Algo::SkillTargetsAllies(*skill));
}

TEST_CASE("SkillTypes") {
const MockActor m;

auto* skill = MakeDBSkill(1, 90, 0, 0, 0, 0);

skill->type = lcf::rpg::Skill::Type_normal;
REQUIRE(Algo::IsNormalOrSubskill(*skill));

skill->type = lcf::rpg::Skill::Type_teleport;
REQUIRE_FALSE(Algo::IsNormalOrSubskill(*skill));

skill->type = lcf::rpg::Skill::Type_escape;
REQUIRE_FALSE(Algo::IsNormalOrSubskill(*skill));

skill->type = lcf::rpg::Skill::Type_switch;
REQUIRE_FALSE(Algo::IsNormalOrSubskill(*skill));

skill->type = lcf::rpg::Skill::Type_subskill;
REQUIRE(Algo::IsNormalOrSubskill(*skill));

skill->type = lcf::rpg::Skill::Type_subskill + 1;
REQUIRE(Algo::IsNormalOrSubskill(*skill));

}

TEST_SUITE_END();

0 comments on commit 35450bc

Please sign in to comment.