une petite analyse rapide du fonctionnement de la fuite :
géré via cette fonction :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| BattleManager.processEscape = function() {
$gameParty.performEscape();
SoundManager.playEscape();
var success = this._preemptive ? true : (Math.random() < this._escapeRatio);
if (success) {
this.displayEscapeSuccessMessage();
this._escaped = true;
this.processAbort();
} else {
this.displayEscapeFailureMessage();
this._escapeRatio += 0.1;
$gameParty.clearActions();
this.startTurn();
}
return success;
}; |
Math.random() retourne une valeur entre 0 et 1. Donc si attaque préemptive la fuite résussie obligatoirement, sinon la valeur random doit être inférieur au ratio de fuite.
En cas d'echec, le ratio augmente de 0.1
le ratio est initialisé de la sorte :
1
2
3
4
5
6
7
8
| BattleManager.setup = function(troopId, canEscape, canLose) {
this.initMembers();
this._canEscape = canEscape;
this._canLose = canLose;
$gameTroop.setup(troopId);
$gameScreen.onBattleStart();
this.makeEscapeRatio();
}; |
1
2
3
| BattleManager.makeEscapeRatio = function() {
this._escapeRatio = 0.5 * $gameParty.agility() / $gameTroop.agility();
}; |
donc le ratio de fuite, en début de combat, vaut 0.5 * (agilité du groupe / agilité de la troupe ennemie)
Game_Troup et Game_Party partage la même classe mère : Game_Unit :
1
2
3
4
5
6
7
8
9
10
| Game_Unit.prototype.agility = function() {
var members = this.members();
if (members.length === 0) {
return 1;
}
var sum = members.reduce(function(r, member) {
return r + member.agi;
}, 0);
return sum / members.length;
}; |
Bref ça retourne la moyenne de l'agilité de tous les membres du groupe ou de la troupe.
Voila, voila!!
|