Game_Enemy.prototype.meetsCondition = function(action) {
var param1 = action.conditionParam1;
var param2 = action.conditionParam2;
switch (action.conditionType) {
case 1:
return this.meetsTurnCondition(param1, param2);
case 2:
return this.meetsHpCondition(param1, param2);
case 3:
return this.meetsMpCondition(param1, param2);
case 4:
return this.meetsStateCondition(param1);
case 5:
return this.meetsPartyLevelCondition(param1);
case 6:
return this.meetsSwitchCondition(param1);
default:
return true;
}
};
Game_Enemy.prototype.meetsTurnCondition = function(param1, param2) {
var n = $gameTroop.turnCount();
if (param2 === 0) {
return n === param1;
} else {
return n > 0 && n >= param1 && n % param2 === param1 % param2;
}
};
Game_Enemy.prototype.meetsHpCondition = function(param1, param2) {
return this.hpRate() >= param1 && this.hpRate() <= param2;
};
Game_Enemy.prototype.meetsMpCondition = function(param1, param2) {
return this.mpRate() >= param1 && this.mpRate() <= param2;
};
Game_Enemy.prototype.meetsStateCondition = function(param) {
return this.isStateAffected(param);
};
Game_Enemy.prototype.meetsPartyLevelCondition = function(param) {
return $gameParty.highestLevel() >= param;
};
Game_Enemy.prototype.meetsSwitchCondition = function(param) {
return $gameSwitches.value(param);
};
Game_Enemy.prototype.isActionValid = function(action) {
return this.meetsCondition(action) && this.canUse($dataSkills[action.skillId]);
};
Game_Enemy.prototype.selectAction = function(actionList, ratingZero) {
var sum = actionList.reduce(function(r, a) {
return r + a.rating - ratingZero;
}, 0);
if (sum > 0) {
var value = Math.randomInt(sum);
for (var i = 0; i < actionList.length; i++) {
var action = actionList[i];
value -= action.rating - ratingZero;
if (value < 0) {
return action;
}
}
} else {
return null;
}
};
Game_Enemy.prototype.selectAllActions = function(actionList) {
var ratingMax = Math.max.apply(null, actionList.map(function(a) {
return a.rating;
}));
var ratingZero = ratingMax - 3;
actionList = actionList.filter(function(a) {
return a.rating > ratingZero;
});
for (var i = 0; i < this.numActions(); i++) {
this.action(i).setEnemyAction(this.selectAction(actionList, ratingZero));
}
};
Game_Enemy.prototype.makeActions = function() {
Game_Battler.prototype.makeActions.call(this);
if (this.numActions() > 0) {
var actionList = this.enemy().actions.filter(function(a) {
return this.isActionValid(a);
}, this);
if (actionList.length > 0) {
this.selectAllActions(actionList);
}
}
this.setActionState('waiting');
};