return;
}
if (Victory()) {
- // TODO: push victory state
ctrl.PopState();
return;
}
if (Defeat()) {
- // TODO: push defeat state
ctrl.PopState();
return;
}
if (ac.GetType() == AttackChoice::DEFEND) return;
TargetSelection &ts(ac.Selection());
- // TODO: this only evaluates SWORD type attacks
if (CurrentAttack().isMonster) {
const Stats &attackerStats(MonsterAt(CurrentAttack().index).GetStats());
CalculateDamage(attackerStats, ts);
AttackChoice &ac(m.GetAttackChoice());
TargetSelection &ts(ac.Selection());
ac.Reset();
- // TODO: run monster's attack script
int target(rand() % NumHeroes());
while (!HeroPositionOccupied(target)) {
target = rand() % NumHeroes();
}
Uint16 BattleState::CalculateDamage(const Stats &attacker, const Stats &defender) const {
- // TODO: find out real formula and add some randomness
return attacker.Attack() / 2 - defender.Defense() / 4;
}
maxim.SetIP(0);
maxim.SetStats(Stats(28, 22, 28, 17, 14, 100, 10));
ComplexAnimation maximAttackAnimation(&maximSprite, framerate);
- // TODO: cross check double frames; could be related to differences in framerates
- maximAttackAnimation.AddFrames(1, 0, Vector<int>(0, 0), 7); // TODO: maybe this could also be a pause before the battle animation
+ maximAttackAnimation.AddFrames(1, 0, Vector<int>(0, 0), 7);
maximAttackAnimation.AddFrames(1, 0, Vector<int>(4, -1), 2);
maximAttackAnimation.AddFrames(2, 0, Vector<int>(4, -2), 2);
maximAttackAnimation.AddFrames(2, 0, Vector<int>(6, -2), 2);
maximAttackAnimation.AddFrames(2, 1, Vector<int>(0, 0), 1);
maximAttackAnimation.AddFrames(2, 2, Vector<int>(0, 0), 2);
maximAttackAnimation.AddFrames(2, 2, Vector<int>(2, 0), 1);
- maximAttackAnimation.AddFrames(1, 0, Vector<int>(0, 0), 7); // TODO: maybe this could also be a pause between two animations
+ maximAttackAnimation.AddFrames(1, 0, Vector<int>(0, 0), 7);
maxim.SetAttackAnimation(&maximAttackAnimation);
ComplexAnimation maximSpellAnimation(&maximSprite, 5 * framerate);
maximSpellAnimation.AddFrames(3, 0, Vector<int>(), 2);
Ikari lightGuard;
lightGuard.SetName("Light guard");
lightGuard.SetCost(128);
- lightGuard.GetTargetingMode().TargetAllAllies(); // FIXME: actually only targets self
+ lightGuard.GetTargetingMode().TargetAllAllies(); // actually only targets self
lightGuard.SetMagical();
holyShield.SetIkari(&lightGuard);
maxim.SetShield(&holyShield);
Ikari boomerang;
boomerang.SetName("Boomerang");
boomerang.SetCost(164);
- boomerang.GetTargetingMode().TargetAllAllies(); // FIXME: actually only targets self
+ boomerang.GetTargetingMode().TargetAllAllies(); // actually only targets self
boomerang.SetMagical();
legendHelm.SetIkari(&boomerang);
maxim.SetHelmet(&legendHelm);
Ikari ironBarrier;
ironBarrier.SetName("Iron barrier");
ironBarrier.SetCost(255);
- ironBarrier.GetTargetingMode().TargetAllAllies(); // FIXME: actually only targets self
+ ironBarrier.GetTargetingMode().TargetAllAllies(); // actually only targets self
ironBarrier.SetMagical();
megaShield.SetIkari(&ironBarrier);
guy.SetShield(&megaShield);