戦闘処理

Ver1.120時点でのattack_order.js内の戦闘内容に関する処理の内容。
attackEntryという戦闘の流れを保存するところに情報を順に詰め込んでいくイメージ。
(○○の先制攻撃で△△に10ダメージ、△△の反撃で○○に8ダメージ、○○の再攻撃で△△は回避、みたいな感じ)
ゲーム上で表示される戦闘アニメはアニメーションと同時に計算しているのではなく、
戦闘開始時に予め計算・準備されたこのattackEntryの情報に沿って再生されている。


NormalAttackOrderBuilder


_isDefaultPriority

反撃側ユニットの「先制攻撃」スキルが発動するかどうか調べて、
攻撃側ユニットが先に攻撃出来るかどうか調べる。
falseなら反撃側が先制攻撃を仕掛ける。

  • 変更例
var alias1 = NormalAttackOrderBuilder._isDefaultPriority;
NormalAttackOrderBuilder._isDefaultPriority = function(virtualActive, virtualPassive) {
	var active = virtualActive.unitSelf;
	var passive = virtualPassive.unitSelf;
	var agi_a = AbilityCalculator.getAgility(active, ItemControl.getEquippedWeapon(active));
	var agi_p = AbilityCalculator.getAgility(passive, ItemControl.getEquippedWeapon(passive));
	
	if (agi_a < 0){return false;}
	if (agi_p - agi_a >= 10){return false;}
	
	return alias1.call(this, virtualActive, virtualPassive);
};

攻撃側の攻撃速度がマイナスだった場合は反撃側が先制攻撃を仕掛ける。
攻撃側の攻撃速度が反撃側の攻撃速度より10以上少なかった場合も反撃側が先制攻撃する。

_getAttackCount

「連続攻撃」スキルの発動を調べて攻撃回数を乗算する箇所。

_setDamage

実際の攻撃行動をattackEntryに登録する箇所。

_isAttackContinue

武器が破損した、またはステートで行動を封じられた時に再攻撃できないようにする箇所。
(実際の判定はVirtualAttackControl.isAttackContinueで行う)
falseだと再攻撃不能。

VirtualAttackControl

戦闘中のユニットの情報を構築する。

AttackEvaluator

戦闘における実際の攻撃内容の計算を行う。

HitCritical.calculateDamage

「HP1」、「とどめを刺す」スキル、武器などの特殊ダメージの計算を行う。

  • 変更例
AttackEvaluator.HitCritical.calculateDamage = function(virtualActive, virtualPassive, attackEntry) {
		var trueHitValue = 0;
		
		if (this._skill !== null) {
			trueHitValue = this._skill.getSkillValue();
		}
		
		if (DamageCalculator.isHpMinimum(virtualActive.unitSelf, virtualPassive.unitSelf, virtualActive.weapon, attackEntry.isCritical, trueHitValue)) {
			if (virtualPassive.hp <= 20){
				// 現在HPをダメージにすることで、攻撃が当たれば相手のHPは0になる
				return virtualPassive.hp;
			}
			// 現在HP-1をダメージにすることで、攻撃が当たれば相手のHPは1になる
			return virtualPassive.hp - 1;
		}
		
		if (DamageCalculator.isFinish(virtualActive.unitSelf, virtualPassive.unitSelf, virtualActive.weapon, attackEntry.isCritical, trueHitValue)) {
			return virtualPassive.hp;
		}
		
		return DamageCalculator.calculateDamage(virtualActive.unitSelf, virtualPassive.unitSelf, virtualActive.weapon, attackEntry.isCritical, virtualActive.totalStatus, virtualPassive.totalStatus, trueHitValue);
	};

HPが20以下の相手に「HP1」攻撃を当てると即死させるようになる。
最終更新:2017年05月24日 06:08