kinara-aspira/js/rpg_objects.js

10633 lines
287 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//=============================================================================
// rpg_objects.js v1.5.1
//=============================================================================
//-----------------------------------------------------------------------------
// Game_Temp
//
// The game object class for temporary data that is not included in save data.
function Game_Temp() {
this.initialize.apply(this, arguments);
}
Game_Temp.prototype.initialize = function() {
this._isPlaytest = Utils.isOptionValid('test');
this._commonEventId = 0;
this._destinationX = null;
this._destinationY = null;
};
Game_Temp.prototype.isPlaytest = function() {
return this._isPlaytest;
};
Game_Temp.prototype.reserveCommonEvent = function(commonEventId) {
this._commonEventId = commonEventId;
};
Game_Temp.prototype.clearCommonEvent = function() {
this._commonEventId = 0;
};
Game_Temp.prototype.isCommonEventReserved = function() {
return this._commonEventId > 0;
};
Game_Temp.prototype.reservedCommonEvent = function() {
return $dataCommonEvents[this._commonEventId];
};
Game_Temp.prototype.setDestination = function(x, y) {
this._destinationX = x;
this._destinationY = y;
};
Game_Temp.prototype.clearDestination = function() {
this._destinationX = null;
this._destinationY = null;
};
Game_Temp.prototype.isDestinationValid = function() {
return this._destinationX !== null;
};
Game_Temp.prototype.destinationX = function() {
return this._destinationX;
};
Game_Temp.prototype.destinationY = function() {
return this._destinationY;
};
//-----------------------------------------------------------------------------
// Game_System
//
// The game object class for the system data.
function Game_System() {
this.initialize.apply(this, arguments);
}
Game_System.prototype.initialize = function() {
this._saveEnabled = true;
this._menuEnabled = true;
this._encounterEnabled = true;
this._formationEnabled = true;
this._battleCount = 0;
this._winCount = 0;
this._escapeCount = 0;
this._saveCount = 0;
this._versionId = 0;
this._framesOnSave = 0;
this._bgmOnSave = null;
this._bgsOnSave = null;
this._windowTone = null;
this._battleBgm = null;
this._victoryMe = null;
this._defeatMe = null;
this._savedBgm = null;
this._walkingBgm = null;
};
Game_System.prototype.isJapanese = function() {
return $dataSystem.locale.match(/^ja/);
};
Game_System.prototype.isChinese = function() {
return $dataSystem.locale.match(/^zh/);
};
Game_System.prototype.isKorean = function() {
return $dataSystem.locale.match(/^ko/);
};
Game_System.prototype.isCJK = function() {
return $dataSystem.locale.match(/^(ja|zh|ko)/);
};
Game_System.prototype.isRussian = function() {
return $dataSystem.locale.match(/^ru/);
};
Game_System.prototype.isSideView = function() {
return $dataSystem.optSideView;
};
Game_System.prototype.isSaveEnabled = function() {
return this._saveEnabled;
};
Game_System.prototype.disableSave = function() {
this._saveEnabled = false;
};
Game_System.prototype.enableSave = function() {
this._saveEnabled = true;
};
Game_System.prototype.isMenuEnabled = function() {
return this._menuEnabled;
};
Game_System.prototype.disableMenu = function() {
this._menuEnabled = false;
};
Game_System.prototype.enableMenu = function() {
this._menuEnabled = true;
};
Game_System.prototype.isEncounterEnabled = function() {
return this._encounterEnabled;
};
Game_System.prototype.disableEncounter = function() {
this._encounterEnabled = false;
};
Game_System.prototype.enableEncounter = function() {
this._encounterEnabled = true;
};
Game_System.prototype.isFormationEnabled = function() {
return this._formationEnabled;
};
Game_System.prototype.disableFormation = function() {
this._formationEnabled = false;
};
Game_System.prototype.enableFormation = function() {
this._formationEnabled = true;
};
Game_System.prototype.battleCount = function() {
return this._battleCount;
};
Game_System.prototype.winCount = function() {
return this._winCount;
};
Game_System.prototype.escapeCount = function() {
return this._escapeCount;
};
Game_System.prototype.saveCount = function() {
return this._saveCount;
};
Game_System.prototype.versionId = function() {
return this._versionId;
};
Game_System.prototype.windowTone = function() {
return this._windowTone || $dataSystem.windowTone;
};
Game_System.prototype.setWindowTone = function(value) {
this._windowTone = value;
};
Game_System.prototype.battleBgm = function() {
return this._battleBgm || $dataSystem.battleBgm;
};
Game_System.prototype.setBattleBgm = function(value) {
this._battleBgm = value;
};
Game_System.prototype.victoryMe = function() {
return this._victoryMe || $dataSystem.victoryMe;
};
Game_System.prototype.setVictoryMe = function(value) {
this._victoryMe = value;
};
Game_System.prototype.defeatMe = function() {
return this._defeatMe || $dataSystem.defeatMe;
};
Game_System.prototype.setDefeatMe = function(value) {
this._defeatMe = value;
};
Game_System.prototype.onBattleStart = function() {
this._battleCount++;
};
Game_System.prototype.onBattleWin = function() {
this._winCount++;
};
Game_System.prototype.onBattleEscape = function() {
this._escapeCount++;
};
Game_System.prototype.onBeforeSave = function() {
this._saveCount++;
this._versionId = $dataSystem.versionId;
this._framesOnSave = Graphics.frameCount;
this._bgmOnSave = AudioManager.saveBgm();
this._bgsOnSave = AudioManager.saveBgs();
};
Game_System.prototype.onAfterLoad = function() {
Graphics.frameCount = this._framesOnSave;
AudioManager.playBgm(this._bgmOnSave);
AudioManager.playBgs(this._bgsOnSave);
};
Game_System.prototype.playtime = function() {
return Math.floor(Graphics.frameCount / 60);
};
Game_System.prototype.playtimeText = function() {
var hour = Math.floor(this.playtime() / 60 / 60);
var min = Math.floor(this.playtime() / 60) % 60;
var sec = this.playtime() % 60;
return hour.padZero(2) + ':' + min.padZero(2) + ':' + sec.padZero(2);
};
Game_System.prototype.saveBgm = function() {
this._savedBgm = AudioManager.saveBgm();
};
Game_System.prototype.replayBgm = function() {
if (this._savedBgm) {
AudioManager.replayBgm(this._savedBgm);
}
};
Game_System.prototype.saveWalkingBgm = function() {
this._walkingBgm = AudioManager.saveBgm();
};
Game_System.prototype.replayWalkingBgm = function() {
if (this._walkingBgm) {
AudioManager.playBgm(this._walkingBgm);
}
};
Game_System.prototype.saveWalkingBgm2 = function() {
this._walkingBgm = $dataMap.bgm;
};
//-----------------------------------------------------------------------------
// Game_Timer
//
// The game object class for the timer.
function Game_Timer() {
this.initialize.apply(this, arguments);
}
Game_Timer.prototype.initialize = function() {
this._frames = 0;
this._working = false;
};
Game_Timer.prototype.update = function(sceneActive) {
if (sceneActive && this._working && this._frames > 0) {
this._frames--;
if (this._frames === 0) {
this.onExpire();
}
}
};
Game_Timer.prototype.start = function(count) {
this._frames = count;
this._working = true;
};
Game_Timer.prototype.stop = function() {
this._working = false;
};
Game_Timer.prototype.isWorking = function() {
return this._working;
};
Game_Timer.prototype.seconds = function() {
return Math.floor(this._frames / 60);
};
Game_Timer.prototype.onExpire = function() {
BattleManager.abort();
};
//-----------------------------------------------------------------------------
// Game_Message
//
// The game object class for the state of the message window that displays text
// or selections, etc.
function Game_Message() {
this.initialize.apply(this, arguments);
}
Game_Message.prototype.initialize = function() {
this.clear();
};
Game_Message.prototype.clear = function() {
this._texts = [];
this._choices = [];
this._faceName = '';
this._faceIndex = 0;
this._background = 0;
this._positionType = 2;
this._choiceDefaultType = 0;
this._choiceCancelType = 0;
this._choiceBackground = 0;
this._choicePositionType = 2;
this._numInputVariableId = 0;
this._numInputMaxDigits = 0;
this._itemChoiceVariableId = 0;
this._itemChoiceItypeId = 0;
this._scrollMode = false;
this._scrollSpeed = 2;
this._scrollNoFast = false;
this._choiceCallback = null;
};
Game_Message.prototype.choices = function() {
return this._choices;
};
Game_Message.prototype.faceName = function() {
return this._faceName;
};
Game_Message.prototype.faceIndex = function() {
return this._faceIndex;
};
Game_Message.prototype.background = function() {
return this._background;
};
Game_Message.prototype.positionType = function() {
return this._positionType;
};
Game_Message.prototype.choiceDefaultType = function() {
return this._choiceDefaultType;
};
Game_Message.prototype.choiceCancelType = function() {
return this._choiceCancelType;
};
Game_Message.prototype.choiceBackground = function() {
return this._choiceBackground;
};
Game_Message.prototype.choicePositionType = function() {
return this._choicePositionType;
};
Game_Message.prototype.numInputVariableId = function() {
return this._numInputVariableId;
};
Game_Message.prototype.numInputMaxDigits = function() {
return this._numInputMaxDigits;
};
Game_Message.prototype.itemChoiceVariableId = function() {
return this._itemChoiceVariableId;
};
Game_Message.prototype.itemChoiceItypeId = function() {
return this._itemChoiceItypeId;
};
Game_Message.prototype.scrollMode = function() {
return this._scrollMode;
};
Game_Message.prototype.scrollSpeed = function() {
return this._scrollSpeed;
};
Game_Message.prototype.scrollNoFast = function() {
return this._scrollNoFast;
};
Game_Message.prototype.add = function(text) {
this._texts.push(text);
};
Game_Message.prototype.setFaceImage = function(faceName, faceIndex) {
this._faceName = faceName;
this._faceIndex = faceIndex;
};
Game_Message.prototype.setBackground = function(background) {
this._background = background;
};
Game_Message.prototype.setPositionType = function(positionType) {
this._positionType = positionType;
};
Game_Message.prototype.setChoices = function(choices, defaultType, cancelType) {
this._choices = choices;
this._choiceDefaultType = defaultType;
this._choiceCancelType = cancelType;
};
Game_Message.prototype.setChoiceBackground = function(background) {
this._choiceBackground = background;
};
Game_Message.prototype.setChoicePositionType = function(positionType) {
this._choicePositionType = positionType;
};
Game_Message.prototype.setNumberInput = function(variableId, maxDigits) {
this._numInputVariableId = variableId;
this._numInputMaxDigits = maxDigits;
};
Game_Message.prototype.setItemChoice = function(variableId, itemType) {
this._itemChoiceVariableId = variableId;
this._itemChoiceItypeId = itemType;
};
Game_Message.prototype.setScroll = function(speed, noFast) {
this._scrollMode = true;
this._scrollSpeed = speed;
this._scrollNoFast = noFast;
};
Game_Message.prototype.setChoiceCallback = function(callback) {
this._choiceCallback = callback;
};
Game_Message.prototype.onChoice = function(n) {
if (this._choiceCallback) {
this._choiceCallback(n);
this._choiceCallback = null;
}
};
Game_Message.prototype.hasText = function() {
return this._texts.length > 0;
};
Game_Message.prototype.isChoice = function() {
return this._choices.length > 0;
};
Game_Message.prototype.isNumberInput = function() {
return this._numInputVariableId > 0;
};
Game_Message.prototype.isItemChoice = function() {
return this._itemChoiceVariableId > 0;
};
Game_Message.prototype.isBusy = function() {
return (this.hasText() || this.isChoice() ||
this.isNumberInput() || this.isItemChoice());
};
Game_Message.prototype.newPage = function() {
if (this._texts.length > 0) {
this._texts[this._texts.length - 1] += '\f';
}
};
Game_Message.prototype.allText = function() {
return this._texts.join('\n');
};
//-----------------------------------------------------------------------------
// Game_Switches
//
// The game object class for switches.
function Game_Switches() {
this.initialize.apply(this, arguments);
}
Game_Switches.prototype.initialize = function() {
this.clear();
};
Game_Switches.prototype.clear = function() {
this._data = [];
};
Game_Switches.prototype.value = function(switchId) {
return !!this._data[switchId];
};
Game_Switches.prototype.setValue = function(switchId, value) {
if (switchId > 0 && switchId < $dataSystem.switches.length) {
this._data[switchId] = value;
this.onChange();
}
};
Game_Switches.prototype.onChange = function() {
$gameMap.requestRefresh();
};
//-----------------------------------------------------------------------------
// Game_Variables
//
// The game object class for variables.
function Game_Variables() {
this.initialize.apply(this, arguments);
}
Game_Variables.prototype.initialize = function() {
this.clear();
};
Game_Variables.prototype.clear = function() {
this._data = [];
};
Game_Variables.prototype.value = function(variableId) {
return this._data[variableId] || 0;
};
Game_Variables.prototype.setValue = function(variableId, value) {
if (variableId > 0 && variableId < $dataSystem.variables.length) {
if (typeof value === 'number') {
value = Math.floor(value);
}
this._data[variableId] = value;
this.onChange();
}
};
Game_Variables.prototype.onChange = function() {
$gameMap.requestRefresh();
};
//-----------------------------------------------------------------------------
// Game_SelfSwitches
//
// The game object class for self switches.
function Game_SelfSwitches() {
this.initialize.apply(this, arguments);
}
Game_SelfSwitches.prototype.initialize = function() {
this.clear();
};
Game_SelfSwitches.prototype.clear = function() {
this._data = {};
};
Game_SelfSwitches.prototype.value = function(key) {
return !!this._data[key];
};
Game_SelfSwitches.prototype.setValue = function(key, value) {
if (value) {
this._data[key] = true;
} else {
delete this._data[key];
}
this.onChange();
};
Game_SelfSwitches.prototype.onChange = function() {
$gameMap.requestRefresh();
};
//-----------------------------------------------------------------------------
// Game_Screen
//
// The game object class for screen effect data, such as changes in color tone
// and flashes.
function Game_Screen() {
this.initialize.apply(this, arguments);
}
Game_Screen.prototype.initialize = function() {
this.clear();
};
Game_Screen.prototype.clear = function() {
this.clearFade();
this.clearTone();
this.clearFlash();
this.clearShake();
this.clearZoom();
this.clearWeather();
this.clearPictures();
};
Game_Screen.prototype.onBattleStart = function() {
this.clearFade();
this.clearFlash();
this.clearShake();
this.clearZoom();
this.eraseBattlePictures();
};
Game_Screen.prototype.brightness = function() {
return this._brightness;
};
Game_Screen.prototype.tone = function() {
return this._tone;
};
Game_Screen.prototype.flashColor = function() {
return this._flashColor;
};
Game_Screen.prototype.shake = function() {
return this._shake;
};
Game_Screen.prototype.zoomX = function() {
return this._zoomX;
};
Game_Screen.prototype.zoomY = function() {
return this._zoomY;
};
Game_Screen.prototype.zoomScale = function() {
return this._zoomScale;
};
Game_Screen.prototype.weatherType = function() {
return this._weatherType;
};
Game_Screen.prototype.weatherPower = function() {
return this._weatherPower;
};
Game_Screen.prototype.picture = function(pictureId) {
var realPictureId = this.realPictureId(pictureId);
return this._pictures[realPictureId];
};
Game_Screen.prototype.realPictureId = function(pictureId) {
if ($gameParty.inBattle()) {
return pictureId + this.maxPictures();
} else {
return pictureId;
}
};
Game_Screen.prototype.clearFade = function() {
this._brightness = 255;
this._fadeOutDuration = 0;
this._fadeInDuration = 0;
};
Game_Screen.prototype.clearTone = function() {
this._tone = [0, 0, 0, 0];
this._toneTarget = [0, 0, 0, 0];
this._toneDuration = 0;
};
Game_Screen.prototype.clearFlash = function() {
this._flashColor = [0, 0, 0, 0];
this._flashDuration = 0;
};
Game_Screen.prototype.clearShake = function() {
this._shakePower = 0;
this._shakeSpeed = 0;
this._shakeDuration = 0;
this._shakeDirection = 1;
this._shake = 0;
};
Game_Screen.prototype.clearZoom = function() {
this._zoomX = 0;
this._zoomY = 0;
this._zoomScale = 1;
this._zoomScaleTarget = 1;
this._zoomDuration = 0;
};
Game_Screen.prototype.clearWeather = function() {
this._weatherType = 'none';
this._weatherPower = 0;
this._weatherPowerTarget = 0;
this._weatherDuration = 0;
};
Game_Screen.prototype.clearPictures = function() {
this._pictures = [];
};
Game_Screen.prototype.eraseBattlePictures = function() {
this._pictures = this._pictures.slice(0, this.maxPictures() + 1);
};
Game_Screen.prototype.maxPictures = function() {
return 100;
};
Game_Screen.prototype.startFadeOut = function(duration) {
this._fadeOutDuration = duration;
this._fadeInDuration = 0;
};
Game_Screen.prototype.startFadeIn = function(duration) {
this._fadeInDuration = duration;
this._fadeOutDuration = 0;
};
Game_Screen.prototype.startTint = function(tone, duration) {
this._toneTarget = tone.clone();
this._toneDuration = duration;
if (this._toneDuration === 0) {
this._tone = this._toneTarget.clone();
}
};
Game_Screen.prototype.startFlash = function(color, duration) {
this._flashColor = color.clone();
this._flashDuration = duration;
};
Game_Screen.prototype.startShake = function(power, speed, duration) {
this._shakePower = power;
this._shakeSpeed = speed;
this._shakeDuration = duration;
};
Game_Screen.prototype.startZoom = function(x, y, scale, duration) {
this._zoomX = x;
this._zoomY = y;
this._zoomScaleTarget = scale;
this._zoomDuration = duration;
};
Game_Screen.prototype.setZoom = function(x, y, scale) {
this._zoomX = x;
this._zoomY = y;
this._zoomScale = scale;
};
Game_Screen.prototype.changeWeather = function(type, power, duration) {
if (type !== 'none' || duration === 0) {
this._weatherType = type;
}
this._weatherPowerTarget = type === 'none' ? 0 : power;
this._weatherDuration = duration;
if (duration === 0) {
this._weatherPower = this._weatherPowerTarget;
}
};
Game_Screen.prototype.update = function() {
this.updateFadeOut();
this.updateFadeIn();
this.updateTone();
this.updateFlash();
this.updateShake();
this.updateZoom();
this.updateWeather();
this.updatePictures();
};
Game_Screen.prototype.updateFadeOut = function() {
if (this._fadeOutDuration > 0) {
var d = this._fadeOutDuration;
this._brightness = (this._brightness * (d - 1)) / d;
this._fadeOutDuration--;
}
};
Game_Screen.prototype.updateFadeIn = function() {
if (this._fadeInDuration > 0) {
var d = this._fadeInDuration;
this._brightness = (this._brightness * (d - 1) + 255) / d;
this._fadeInDuration--;
}
};
Game_Screen.prototype.updateTone = function() {
if (this._toneDuration > 0) {
var d = this._toneDuration;
for (var i = 0; i < 4; i++) {
this._tone[i] = (this._tone[i] * (d - 1) + this._toneTarget[i]) / d;
}
this._toneDuration--;
}
};
Game_Screen.prototype.updateFlash = function() {
if (this._flashDuration > 0) {
var d = this._flashDuration;
this._flashColor[3] *= (d - 1) / d;
this._flashDuration--;
}
};
Game_Screen.prototype.updateShake = function() {
if (this._shakeDuration > 0 || this._shake !== 0) {
var delta = (this._shakePower * this._shakeSpeed * this._shakeDirection) / 10;
if (this._shakeDuration <= 1 && this._shake * (this._shake + delta) < 0) {
this._shake = 0;
} else {
this._shake += delta;
}
if (this._shake > this._shakePower * 2) {
this._shakeDirection = -1;
}
if (this._shake < - this._shakePower * 2) {
this._shakeDirection = 1;
}
this._shakeDuration--;
}
};
Game_Screen.prototype.updateZoom = function() {
if (this._zoomDuration > 0) {
var d = this._zoomDuration;
var t = this._zoomScaleTarget;
this._zoomScale = (this._zoomScale * (d - 1) + t) / d;
this._zoomDuration--;
}
};
Game_Screen.prototype.updateWeather = function() {
if (this._weatherDuration > 0) {
var d = this._weatherDuration;
var t = this._weatherPowerTarget;
this._weatherPower = (this._weatherPower * (d - 1) + t) / d;
this._weatherDuration--;
if (this._weatherDuration === 0 && this._weatherPowerTarget === 0) {
this._weatherType = 'none';
}
}
};
Game_Screen.prototype.updatePictures = function() {
this._pictures.forEach(function(picture) {
if (picture) {
picture.update();
}
});
};
Game_Screen.prototype.startFlashForDamage = function() {
this.startFlash([255, 0, 0, 128], 8);
};
Game_Screen.prototype.showPicture = function(pictureId, name, origin, x, y,
scaleX, scaleY, opacity, blendMode) {
var realPictureId = this.realPictureId(pictureId);
var picture = new Game_Picture();
picture.show(name, origin, x, y, scaleX, scaleY, opacity, blendMode);
this._pictures[realPictureId] = picture;
};
Game_Screen.prototype.movePicture = function(pictureId, origin, x, y, scaleX,
scaleY, opacity, blendMode, duration) {
var picture = this.picture(pictureId);
if (picture) {
picture.move(origin, x, y, scaleX, scaleY, opacity, blendMode, duration);
}
};
Game_Screen.prototype.rotatePicture = function(pictureId, speed) {
var picture = this.picture(pictureId);
if (picture) {
picture.rotate(speed);
}
};
Game_Screen.prototype.tintPicture = function(pictureId, tone, duration) {
var picture = this.picture(pictureId);
if (picture) {
picture.tint(tone, duration);
}
};
Game_Screen.prototype.erasePicture = function(pictureId) {
var realPictureId = this.realPictureId(pictureId);
this._pictures[realPictureId] = null;
};
//-----------------------------------------------------------------------------
// Game_Picture
//
// The game object class for a picture.
function Game_Picture() {
this.initialize.apply(this, arguments);
}
Game_Picture.prototype.initialize = function() {
this.initBasic();
this.initTarget();
this.initTone();
this.initRotation();
};
Game_Picture.prototype.name = function() {
return this._name;
};
Game_Picture.prototype.origin = function() {
return this._origin;
};
Game_Picture.prototype.x = function() {
return this._x;
};
Game_Picture.prototype.y = function() {
return this._y;
};
Game_Picture.prototype.scaleX = function() {
return this._scaleX;
};
Game_Picture.prototype.scaleY = function() {
return this._scaleY;
};
Game_Picture.prototype.opacity = function() {
return this._opacity;
};
Game_Picture.prototype.blendMode = function() {
return this._blendMode;
};
Game_Picture.prototype.tone = function() {
return this._tone;
};
Game_Picture.prototype.angle = function() {
return this._angle;
};
Game_Picture.prototype.initBasic = function() {
this._name = '';
this._origin = 0;
this._x = 0;
this._y = 0;
this._scaleX = 100;
this._scaleY = 100;
this._opacity = 255;
this._blendMode = 0;
};
Game_Picture.prototype.initTarget = function() {
this._targetX = this._x;
this._targetY = this._y;
this._targetScaleX = this._scaleX;
this._targetScaleY = this._scaleY;
this._targetOpacity = this._opacity;
this._duration = 0;
};
Game_Picture.prototype.initTone = function() {
this._tone = null;
this._toneTarget = null;
this._toneDuration = 0;
};
Game_Picture.prototype.initRotation = function() {
this._angle = 0;
this._rotationSpeed = 0;
};
Game_Picture.prototype.show = function(name, origin, x, y, scaleX,
scaleY, opacity, blendMode) {
this._name = name;
this._origin = origin;
this._x = x;
this._y = y;
this._scaleX = scaleX;
this._scaleY = scaleY;
this._opacity = opacity;
this._blendMode = blendMode;
this.initTarget();
this.initTone();
this.initRotation();
};
Game_Picture.prototype.move = function(origin, x, y, scaleX, scaleY,
opacity, blendMode, duration) {
this._origin = origin;
this._targetX = x;
this._targetY = y;
this._targetScaleX = scaleX;
this._targetScaleY = scaleY;
this._targetOpacity = opacity;
this._blendMode = blendMode;
this._duration = duration;
};
Game_Picture.prototype.rotate = function(speed) {
this._rotationSpeed = speed;
};
Game_Picture.prototype.tint = function(tone, duration) {
if (!this._tone) {
this._tone = [0, 0, 0, 0];
}
this._toneTarget = tone.clone();
this._toneDuration = duration;
if (this._toneDuration === 0) {
this._tone = this._toneTarget.clone();
}
};
Game_Picture.prototype.erase = function() {
this._name = '';
this._origin = 0;
this.initTarget();
this.initTone();
this.initRotation();
};
Game_Picture.prototype.update = function() {
this.updateMove();
this.updateTone();
this.updateRotation();
};
Game_Picture.prototype.updateMove = function() {
if (this._duration > 0) {
var d = this._duration;
this._x = (this._x * (d - 1) + this._targetX) / d;
this._y = (this._y * (d - 1) + this._targetY) / d;
this._scaleX = (this._scaleX * (d - 1) + this._targetScaleX) / d;
this._scaleY = (this._scaleY * (d - 1) + this._targetScaleY) / d;
this._opacity = (this._opacity * (d - 1) + this._targetOpacity) / d;
this._duration--;
}
};
Game_Picture.prototype.updateTone = function() {
if (this._toneDuration > 0) {
var d = this._toneDuration;
for (var i = 0; i < 4; i++) {
this._tone[i] = (this._tone[i] * (d - 1) + this._toneTarget[i]) / d;
}
this._toneDuration--;
}
};
Game_Picture.prototype.updateRotation = function() {
if (this._rotationSpeed !== 0) {
this._angle += this._rotationSpeed / 2;
}
};
//-----------------------------------------------------------------------------
// Game_Item
//
// The game object class for handling skills, items, weapons, and armor. It is
// required because save data should not include the database object itself.
function Game_Item() {
this.initialize.apply(this, arguments);
}
Game_Item.prototype.initialize = function(item) {
this._dataClass = '';
this._itemId = 0;
if (item) {
this.setObject(item);
}
};
Game_Item.prototype.isSkill = function() {
return this._dataClass === 'skill';
};
Game_Item.prototype.isItem = function() {
return this._dataClass === 'item';
};
Game_Item.prototype.isUsableItem = function() {
return this.isSkill() || this.isItem();
};
Game_Item.prototype.isWeapon = function() {
return this._dataClass === 'weapon';
};
Game_Item.prototype.isArmor = function() {
return this._dataClass === 'armor';
};
Game_Item.prototype.isEquipItem = function() {
return this.isWeapon() || this.isArmor();
};
Game_Item.prototype.isNull = function() {
return this._dataClass === '';
};
Game_Item.prototype.itemId = function() {
return this._itemId;
};
Game_Item.prototype.object = function() {
if (this.isSkill()) {
return $dataSkills[this._itemId];
} else if (this.isItem()) {
return $dataItems[this._itemId];
} else if (this.isWeapon()) {
return $dataWeapons[this._itemId];
} else if (this.isArmor()) {
return $dataArmors[this._itemId];
} else {
return null;
}
};
Game_Item.prototype.setObject = function(item) {
if (DataManager.isSkill(item)) {
this._dataClass = 'skill';
} else if (DataManager.isItem(item)) {
this._dataClass = 'item';
} else if (DataManager.isWeapon(item)) {
this._dataClass = 'weapon';
} else if (DataManager.isArmor(item)) {
this._dataClass = 'armor';
} else {
this._dataClass = '';
}
this._itemId = item ? item.id : 0;
};
Game_Item.prototype.setEquip = function(isWeapon, itemId) {
this._dataClass = isWeapon ? 'weapon' : 'armor';
this._itemId = itemId;
};
//-----------------------------------------------------------------------------
// Game_Action
//
// The game object class for a battle action.
function Game_Action() {
this.initialize.apply(this, arguments);
}
Game_Action.EFFECT_RECOVER_HP = 11;
Game_Action.EFFECT_RECOVER_MP = 12;
Game_Action.EFFECT_GAIN_TP = 13;
Game_Action.EFFECT_ADD_STATE = 21;
Game_Action.EFFECT_REMOVE_STATE = 22;
Game_Action.EFFECT_ADD_BUFF = 31;
Game_Action.EFFECT_ADD_DEBUFF = 32;
Game_Action.EFFECT_REMOVE_BUFF = 33;
Game_Action.EFFECT_REMOVE_DEBUFF = 34;
Game_Action.EFFECT_SPECIAL = 41;
Game_Action.EFFECT_GROW = 42;
Game_Action.EFFECT_LEARN_SKILL = 43;
Game_Action.EFFECT_COMMON_EVENT = 44;
Game_Action.SPECIAL_EFFECT_ESCAPE = 0;
Game_Action.HITTYPE_CERTAIN = 0;
Game_Action.HITTYPE_PHYSICAL = 1;
Game_Action.HITTYPE_MAGICAL = 2;
Game_Action.prototype.initialize = function(subject, forcing) {
this._subjectActorId = 0;
this._subjectEnemyIndex = -1;
this._forcing = forcing || false;
this.setSubject(subject);
this.clear();
};
Game_Action.prototype.clear = function() {
this._item = new Game_Item();
this._targetIndex = -1;
};
Game_Action.prototype.setSubject = function(subject) {
if (subject.isActor()) {
this._subjectActorId = subject.actorId();
this._subjectEnemyIndex = -1;
} else {
this._subjectEnemyIndex = subject.index();
this._subjectActorId = 0;
}
};
Game_Action.prototype.subject = function() {
if (this._subjectActorId > 0) {
return $gameActors.actor(this._subjectActorId);
} else {
return $gameTroop.members()[this._subjectEnemyIndex];
}
};
Game_Action.prototype.friendsUnit = function() {
return this.subject().friendsUnit();
};
Game_Action.prototype.opponentsUnit = function() {
return this.subject().opponentsUnit();
};
Game_Action.prototype.setEnemyAction = function(action) {
if (action) {
this.setSkill(action.skillId);
} else {
this.clear();
}
};
Game_Action.prototype.setAttack = function() {
this.setSkill(this.subject().attackSkillId());
};
Game_Action.prototype.setGuard = function() {
this.setSkill(this.subject().guardSkillId());
};
Game_Action.prototype.setSkill = function(skillId) {
this._item.setObject($dataSkills[skillId]);
};
Game_Action.prototype.setItem = function(itemId) {
this._item.setObject($dataItems[itemId]);
};
Game_Action.prototype.setItemObject = function(object) {
this._item.setObject(object);
};
Game_Action.prototype.setTarget = function(targetIndex) {
this._targetIndex = targetIndex;
};
Game_Action.prototype.item = function() {
return this._item.object();
};
Game_Action.prototype.isSkill = function() {
return this._item.isSkill();
};
Game_Action.prototype.isItem = function() {
return this._item.isItem();
};
Game_Action.prototype.numRepeats = function() {
var repeats = this.item().repeats;
if (this.isAttack()) {
repeats += this.subject().attackTimesAdd();
}
return Math.floor(repeats);
};
Game_Action.prototype.checkItemScope = function(list) {
return list.contains(this.item().scope);
};
Game_Action.prototype.isForOpponent = function() {
return this.checkItemScope([1, 2, 3, 4, 5, 6]);
};
Game_Action.prototype.isForFriend = function() {
return this.checkItemScope([7, 8, 9, 10, 11]);
};
Game_Action.prototype.isForDeadFriend = function() {
return this.checkItemScope([9, 10]);
};
Game_Action.prototype.isForUser = function() {
return this.checkItemScope([11]);
};
Game_Action.prototype.isForOne = function() {
return this.checkItemScope([1, 3, 7, 9, 11]);
};
Game_Action.prototype.isForRandom = function() {
return this.checkItemScope([3, 4, 5, 6]);
};
Game_Action.prototype.isForAll = function() {
return this.checkItemScope([2, 8, 10]);
};
Game_Action.prototype.needsSelection = function() {
return this.checkItemScope([1, 7, 9]);
};
Game_Action.prototype.numTargets = function() {
return this.isForRandom() ? this.item().scope - 2 : 0;
};
Game_Action.prototype.checkDamageType = function(list) {
return list.contains(this.item().damage.type);
};
Game_Action.prototype.isHpEffect = function() {
return this.checkDamageType([1, 3, 5]);
};
Game_Action.prototype.isMpEffect = function() {
return this.checkDamageType([2, 4, 6]);
};
Game_Action.prototype.isDamage = function() {
return this.checkDamageType([1, 2]);
};
Game_Action.prototype.isRecover = function() {
return this.checkDamageType([3, 4]);
};
Game_Action.prototype.isDrain = function() {
return this.checkDamageType([5, 6]);
};
Game_Action.prototype.isHpRecover = function() {
return this.checkDamageType([3]);
};
Game_Action.prototype.isMpRecover = function() {
return this.checkDamageType([4]);
};
Game_Action.prototype.isCertainHit = function() {
return this.item().hitType === Game_Action.HITTYPE_CERTAIN;
};
Game_Action.prototype.isPhysical = function() {
return this.item().hitType === Game_Action.HITTYPE_PHYSICAL;
};
Game_Action.prototype.isMagical = function() {
return this.item().hitType === Game_Action.HITTYPE_MAGICAL;
};
Game_Action.prototype.isAttack = function() {
return this.item() === $dataSkills[this.subject().attackSkillId()];
};
Game_Action.prototype.isGuard = function() {
return this.item() === $dataSkills[this.subject().guardSkillId()];
};
Game_Action.prototype.isMagicSkill = function() {
if (this.isSkill()) {
return $dataSystem.magicSkills.contains(this.item().stypeId);
} else {
return false;
}
};
Game_Action.prototype.decideRandomTarget = function() {
var target;
if (this.isForDeadFriend()) {
target = this.friendsUnit().randomDeadTarget();
} else if (this.isForFriend()) {
target = this.friendsUnit().randomTarget();
} else {
target = this.opponentsUnit().randomTarget();
}
if (target) {
this._targetIndex = target.index();
} else {
this.clear();
}
};
Game_Action.prototype.setConfusion = function() {
this.setAttack();
};
Game_Action.prototype.prepare = function() {
if (this.subject().isConfused() && !this._forcing) {
this.setConfusion();
}
};
Game_Action.prototype.isValid = function() {
return (this._forcing && this.item()) || this.subject().canUse(this.item());
};
Game_Action.prototype.speed = function() {
var agi = this.subject().agi;
var speed = agi + Math.randomInt(Math.floor(5 + agi / 4));
if (this.item()) {
speed += this.item().speed;
}
if (this.isAttack()) {
speed += this.subject().attackSpeed();
}
return speed;
};
Game_Action.prototype.makeTargets = function() {
var targets = [];
if (!this._forcing && this.subject().isConfused()) {
targets = [this.confusionTarget()];
} else if (this.isForOpponent()) {
targets = this.targetsForOpponents();
} else if (this.isForFriend()) {
targets = this.targetsForFriends();
}
return this.repeatTargets(targets);
};
Game_Action.prototype.repeatTargets = function(targets) {
var repeatedTargets = [];
var repeats = this.numRepeats();
for (var i = 0; i < targets.length; i++) {
var target = targets[i];
if (target) {
for (var j = 0; j < repeats; j++) {
repeatedTargets.push(target);
}
}
}
return repeatedTargets;
};
Game_Action.prototype.confusionTarget = function() {
switch (this.subject().confusionLevel()) {
case 1:
return this.opponentsUnit().randomTarget();
case 2:
if (Math.randomInt(2) === 0) {
return this.opponentsUnit().randomTarget();
}
return this.friendsUnit().randomTarget();
default:
return this.friendsUnit().randomTarget();
}
};
Game_Action.prototype.targetsForOpponents = function() {
var targets = [];
var unit = this.opponentsUnit();
if (this.isForRandom()) {
for (var i = 0; i < this.numTargets(); i++) {
targets.push(unit.randomTarget());
}
} else if (this.isForOne()) {
if (this._targetIndex < 0) {
targets.push(unit.randomTarget());
} else {
targets.push(unit.smoothTarget(this._targetIndex));
}
} else {
targets = unit.aliveMembers();
}
return targets;
};
Game_Action.prototype.targetsForFriends = function() {
var targets = [];
var unit = this.friendsUnit();
if (this.isForUser()) {
return [this.subject()];
} else if (this.isForDeadFriend()) {
if (this.isForOne()) {
targets.push(unit.smoothDeadTarget(this._targetIndex));
} else {
targets = unit.deadMembers();
}
} else if (this.isForOne()) {
if (this._targetIndex < 0) {
targets.push(unit.randomTarget());
} else {
targets.push(unit.smoothTarget(this._targetIndex));
}
} else {
targets = unit.aliveMembers();
}
return targets;
};
Game_Action.prototype.evaluate = function() {
var value = 0;
this.itemTargetCandidates().forEach(function(target) {
var targetValue = this.evaluateWithTarget(target);
if (this.isForAll()) {
value += targetValue;
} else if (targetValue > value) {
value = targetValue;
this._targetIndex = target.index();
}
}, this);
value *= this.numRepeats();
if (value > 0) {
value += Math.random();
}
return value;
};
Game_Action.prototype.itemTargetCandidates = function() {
if (!this.isValid()) {
return [];
} else if (this.isForOpponent()) {
return this.opponentsUnit().aliveMembers();
} else if (this.isForUser()) {
return [this.subject()];
} else if (this.isForDeadFriend()) {
return this.friendsUnit().deadMembers();
} else {
return this.friendsUnit().aliveMembers();
}
};
Game_Action.prototype.evaluateWithTarget = function(target) {
if (this.isHpEffect()) {
var value = this.makeDamageValue(target, false);
if (this.isForOpponent()) {
return value / Math.max(target.hp, 1);
} else {
var recovery = Math.min(-value, target.mhp - target.hp);
return recovery / target.mhp;
}
}
};
Game_Action.prototype.testApply = function(target) {
return (this.isForDeadFriend() === target.isDead() &&
($gameParty.inBattle() || this.isForOpponent() ||
(this.isHpRecover() && target.hp < target.mhp) ||
(this.isMpRecover() && target.mp < target.mmp) ||
(this.hasItemAnyValidEffects(target))));
};
Game_Action.prototype.hasItemAnyValidEffects = function(target) {
return this.item().effects.some(function(effect) {
return this.testItemEffect(target, effect);
}, this);
};
Game_Action.prototype.testItemEffect = function(target, effect) {
switch (effect.code) {
case Game_Action.EFFECT_RECOVER_HP:
return target.hp < target.mhp || effect.value1 < 0 || effect.value2 < 0;
case Game_Action.EFFECT_RECOVER_MP:
return target.mp < target.mmp || effect.value1 < 0 || effect.value2 < 0;
case Game_Action.EFFECT_ADD_STATE:
return !target.isStateAffected(effect.dataId);
case Game_Action.EFFECT_REMOVE_STATE:
return target.isStateAffected(effect.dataId);
case Game_Action.EFFECT_ADD_BUFF:
return !target.isMaxBuffAffected(effect.dataId);
case Game_Action.EFFECT_ADD_DEBUFF:
return !target.isMaxDebuffAffected(effect.dataId);
case Game_Action.EFFECT_REMOVE_BUFF:
return target.isBuffAffected(effect.dataId);
case Game_Action.EFFECT_REMOVE_DEBUFF:
return target.isDebuffAffected(effect.dataId);
case Game_Action.EFFECT_LEARN_SKILL:
return target.isActor() && !target.isLearnedSkill(effect.dataId);
default:
return true;
}
};
Game_Action.prototype.itemCnt = function(target) {
if (this.isPhysical() && target.canMove()) {
return target.cnt;
} else {
return 0;
}
};
Game_Action.prototype.itemMrf = function(target) {
if (this.isMagical()) {
return target.mrf;
} else {
return 0;
}
};
Game_Action.prototype.itemHit = function(target) {
if (this.isPhysical()) {
return this.item().successRate * 0.01 * this.subject().hit;
} else {
return this.item().successRate * 0.01;
}
};
Game_Action.prototype.itemEva = function(target) {
if (this.isPhysical()) {
return target.eva;
} else if (this.isMagical()) {
return target.mev;
} else {
return 0;
}
};
Game_Action.prototype.itemCri = function(target) {
return this.item().damage.critical ? this.subject().cri * (1 - target.cev) : 0;
};
Game_Action.prototype.apply = function(target) {
var result = target.result();
this.subject().clearResult();
result.clear();
result.used = this.testApply(target);
result.missed = (result.used && Math.random() >= this.itemHit(target));
result.evaded = (!result.missed && Math.random() < this.itemEva(target));
result.physical = this.isPhysical();
result.drain = this.isDrain();
if (result.isHit()) {
if (this.item().damage.type > 0) {
result.critical = (Math.random() < this.itemCri(target));
var value = this.makeDamageValue(target, result.critical);
this.executeDamage(target, value);
}
this.item().effects.forEach(function(effect) {
this.applyItemEffect(target, effect);
}, this);
this.applyItemUserEffect(target);
}
};
Game_Action.prototype.makeDamageValue = function(target, critical) {
var item = this.item();
var baseValue = this.evalDamageFormula(target);
var value = baseValue * this.calcElementRate(target);
if (this.isPhysical()) {
value *= target.pdr;
}
if (this.isMagical()) {
value *= target.mdr;
}
if (baseValue < 0) {
value *= target.rec;
}
if (critical) {
value = this.applyCritical(value);
}
value = this.applyVariance(value, item.damage.variance);
value = this.applyGuard(value, target);
value = Math.round(value);
return value;
};
Game_Action.prototype.evalDamageFormula = function(target) {
try {
var item = this.item();
var a = this.subject();
var b = target;
var v = $gameVariables._data;
var sign = ([3, 4].contains(item.damage.type) ? -1 : 1);
var value = Math.max(eval(item.damage.formula), 0) * sign;
if (isNaN(value)) value = 0;
return value;
} catch (e) {
return 0;
}
};
Game_Action.prototype.calcElementRate = function(target) {
if (this.item().damage.elementId < 0) {
return this.elementsMaxRate(target, this.subject().attackElements());
} else {
return target.elementRate(this.item().damage.elementId);
}
};
Game_Action.prototype.elementsMaxRate = function(target, elements) {
if (elements.length > 0) {
return Math.max.apply(null, elements.map(function(elementId) {
return target.elementRate(elementId);
}, this));
} else {
return 1;
}
};
Game_Action.prototype.applyCritical = function(damage) {
return damage * 3;
};
Game_Action.prototype.applyVariance = function(damage, variance) {
var amp = Math.floor(Math.max(Math.abs(damage) * variance / 100, 0));
var v = Math.randomInt(amp + 1) + Math.randomInt(amp + 1) - amp;
return damage >= 0 ? damage + v : damage - v;
};
Game_Action.prototype.applyGuard = function(damage, target) {
return damage / (damage > 0 && target.isGuard() ? 2 * target.grd : 1);
};
Game_Action.prototype.executeDamage = function(target, value) {
var result = target.result();
if (value === 0) {
result.critical = false;
}
if (this.isHpEffect()) {
this.executeHpDamage(target, value);
}
if (this.isMpEffect()) {
this.executeMpDamage(target, value);
}
};
Game_Action.prototype.executeHpDamage = function(target, value) {
if (this.isDrain()) {
value = Math.min(target.hp, value);
}
this.makeSuccess(target);
target.gainHp(-value);
if (value > 0) {
target.onDamage(value);
}
this.gainDrainedHp(value);
};
Game_Action.prototype.executeMpDamage = function(target, value) {
if (!this.isMpRecover()) {
value = Math.min(target.mp, value);
}
if (value !== 0) {
this.makeSuccess(target);
}
target.gainMp(-value);
this.gainDrainedMp(value);
};
Game_Action.prototype.gainDrainedHp = function(value) {
if (this.isDrain()) {
var gainTarget = this.subject();
if (this._reflectionTarget !== undefined) {
gainTarget = this._reflectionTarget;
}
gainTarget.gainHp(value);
}
};
Game_Action.prototype.gainDrainedMp = function(value) {
if (this.isDrain()) {
var gainTarget = this.subject();
if (this._reflectionTarget !== undefined) {
gainTarget = this._reflectionTarget;
}
gainTarget.gainMp(value);
}
};
Game_Action.prototype.applyItemEffect = function(target, effect) {
switch (effect.code) {
case Game_Action.EFFECT_RECOVER_HP:
this.itemEffectRecoverHp(target, effect);
break;
case Game_Action.EFFECT_RECOVER_MP:
this.itemEffectRecoverMp(target, effect);
break;
case Game_Action.EFFECT_GAIN_TP:
this.itemEffectGainTp(target, effect);
break;
case Game_Action.EFFECT_ADD_STATE:
this.itemEffectAddState(target, effect);
break;
case Game_Action.EFFECT_REMOVE_STATE:
this.itemEffectRemoveState(target, effect);
break;
case Game_Action.EFFECT_ADD_BUFF:
this.itemEffectAddBuff(target, effect);
break;
case Game_Action.EFFECT_ADD_DEBUFF:
this.itemEffectAddDebuff(target, effect);
break;
case Game_Action.EFFECT_REMOVE_BUFF:
this.itemEffectRemoveBuff(target, effect);
break;
case Game_Action.EFFECT_REMOVE_DEBUFF:
this.itemEffectRemoveDebuff(target, effect);
break;
case Game_Action.EFFECT_SPECIAL:
this.itemEffectSpecial(target, effect);
break;
case Game_Action.EFFECT_GROW:
this.itemEffectGrow(target, effect);
break;
case Game_Action.EFFECT_LEARN_SKILL:
this.itemEffectLearnSkill(target, effect);
break;
case Game_Action.EFFECT_COMMON_EVENT:
this.itemEffectCommonEvent(target, effect);
break;
}
};
Game_Action.prototype.itemEffectRecoverHp = function(target, effect) {
var value = (target.mhp * effect.value1 + effect.value2) * target.rec;
if (this.isItem()) {
value *= this.subject().pha;
}
value = Math.floor(value);
if (value !== 0) {
target.gainHp(value);
this.makeSuccess(target);
}
};
Game_Action.prototype.itemEffectRecoverMp = function(target, effect) {
var value = (target.mmp * effect.value1 + effect.value2) * target.rec;
if (this.isItem()) {
value *= this.subject().pha;
}
value = Math.floor(value);
if (value !== 0) {
target.gainMp(value);
this.makeSuccess(target);
}
};
Game_Action.prototype.itemEffectGainTp = function(target, effect) {
var value = Math.floor(effect.value1);
if (value !== 0) {
target.gainTp(value);
this.makeSuccess(target);
}
};
Game_Action.prototype.itemEffectAddState = function(target, effect) {
if (effect.dataId === 0) {
this.itemEffectAddAttackState(target, effect);
} else {
this.itemEffectAddNormalState(target, effect);
}
};
Game_Action.prototype.itemEffectAddAttackState = function(target, effect) {
this.subject().attackStates().forEach(function(stateId) {
var chance = effect.value1;
chance *= target.stateRate(stateId);
chance *= this.subject().attackStatesRate(stateId);
chance *= this.lukEffectRate(target);
if (Math.random() < chance) {
target.addState(stateId);
this.makeSuccess(target);
}
}.bind(this), target);
};
Game_Action.prototype.itemEffectAddNormalState = function(target, effect) {
var chance = effect.value1;
if (!this.isCertainHit()) {
chance *= target.stateRate(effect.dataId);
chance *= this.lukEffectRate(target);
}
if (Math.random() < chance) {
target.addState(effect.dataId);
this.makeSuccess(target);
}
};
Game_Action.prototype.itemEffectRemoveState = function(target, effect) {
var chance = effect.value1;
if (Math.random() < chance) {
target.removeState(effect.dataId);
this.makeSuccess(target);
}
};
Game_Action.prototype.itemEffectAddBuff = function(target, effect) {
target.addBuff(effect.dataId, effect.value1);
this.makeSuccess(target);
};
Game_Action.prototype.itemEffectAddDebuff = function(target, effect) {
var chance = target.debuffRate(effect.dataId) * this.lukEffectRate(target);
if (Math.random() < chance) {
target.addDebuff(effect.dataId, effect.value1);
this.makeSuccess(target);
}
};
Game_Action.prototype.itemEffectRemoveBuff = function(target, effect) {
if (target.isBuffAffected(effect.dataId)) {
target.removeBuff(effect.dataId);
this.makeSuccess(target);
}
};
Game_Action.prototype.itemEffectRemoveDebuff = function(target, effect) {
if (target.isDebuffAffected(effect.dataId)) {
target.removeBuff(effect.dataId);
this.makeSuccess(target);
}
};
Game_Action.prototype.itemEffectSpecial = function(target, effect) {
if (effect.dataId === Game_Action.SPECIAL_EFFECT_ESCAPE) {
target.escape();
this.makeSuccess(target);
}
};
Game_Action.prototype.itemEffectGrow = function(target, effect) {
target.addParam(effect.dataId, Math.floor(effect.value1));
this.makeSuccess(target);
};
Game_Action.prototype.itemEffectLearnSkill = function(target, effect) {
if (target.isActor()) {
target.learnSkill(effect.dataId);
this.makeSuccess(target);
}
};
Game_Action.prototype.itemEffectCommonEvent = function(target, effect) {
};
Game_Action.prototype.makeSuccess = function(target) {
target.result().success = true;
};
Game_Action.prototype.applyItemUserEffect = function(target) {
var value = Math.floor(this.item().tpGain * this.subject().tcr);
this.subject().gainSilentTp(value);
};
Game_Action.prototype.lukEffectRate = function(target) {
return Math.max(1.0 + (this.subject().luk - target.luk) * 0.001, 0.0);
};
Game_Action.prototype.applyGlobal = function() {
this.item().effects.forEach(function(effect) {
if (effect.code === Game_Action.EFFECT_COMMON_EVENT) {
$gameTemp.reserveCommonEvent(effect.dataId);
}
}, this);
};
//-----------------------------------------------------------------------------
// Game_ActionResult
//
// The game object class for a result of a battle action. For convinience, all
// member variables in this class are public.
function Game_ActionResult() {
this.initialize.apply(this, arguments);
}
Game_ActionResult.prototype.initialize = function() {
this.clear();
};
Game_ActionResult.prototype.clear = function() {
this.used = false;
this.missed = false;
this.evaded = false;
this.physical = false;
this.drain = false;
this.critical = false;
this.success = false;
this.hpAffected = false;
this.hpDamage = 0;
this.mpDamage = 0;
this.tpDamage = 0;
this.addedStates = [];
this.removedStates = [];
this.addedBuffs = [];
this.addedDebuffs = [];
this.removedBuffs = [];
};
Game_ActionResult.prototype.addedStateObjects = function() {
return this.addedStates.map(function(id) {
return $dataStates[id];
});
};
Game_ActionResult.prototype.removedStateObjects = function() {
return this.removedStates.map(function(id) {
return $dataStates[id];
});
};
Game_ActionResult.prototype.isStatusAffected = function() {
return (this.addedStates.length > 0 || this.removedStates.length > 0 ||
this.addedBuffs.length > 0 || this.addedDebuffs.length > 0 ||
this.removedBuffs.length > 0);
};
Game_ActionResult.prototype.isHit = function() {
return this.used && !this.missed && !this.evaded;
};
Game_ActionResult.prototype.isStateAdded = function(stateId) {
return this.addedStates.contains(stateId);
};
Game_ActionResult.prototype.pushAddedState = function(stateId) {
if (!this.isStateAdded(stateId)) {
this.addedStates.push(stateId);
}
};
Game_ActionResult.prototype.isStateRemoved = function(stateId) {
return this.removedStates.contains(stateId);
};
Game_ActionResult.prototype.pushRemovedState = function(stateId) {
if (!this.isStateRemoved(stateId)) {
this.removedStates.push(stateId);
}
};
Game_ActionResult.prototype.isBuffAdded = function(paramId) {
return this.addedBuffs.contains(paramId);
};
Game_ActionResult.prototype.pushAddedBuff = function(paramId) {
if (!this.isBuffAdded(paramId)) {
this.addedBuffs.push(paramId);
}
};
Game_ActionResult.prototype.isDebuffAdded = function(paramId) {
return this.addedDebuffs.contains(paramId);
};
Game_ActionResult.prototype.pushAddedDebuff = function(paramId) {
if (!this.isDebuffAdded(paramId)) {
this.addedDebuffs.push(paramId);
}
};
Game_ActionResult.prototype.isBuffRemoved = function(paramId) {
return this.removedBuffs.contains(paramId);
};
Game_ActionResult.prototype.pushRemovedBuff = function(paramId) {
if (!this.isBuffRemoved(paramId)) {
this.removedBuffs.push(paramId);
}
};
//-----------------------------------------------------------------------------
// Game_BattlerBase
//
// The superclass of Game_Battler. It mainly contains parameters calculation.
function Game_BattlerBase() {
this.initialize.apply(this, arguments);
}
Game_BattlerBase.TRAIT_ELEMENT_RATE = 11;
Game_BattlerBase.TRAIT_DEBUFF_RATE = 12;
Game_BattlerBase.TRAIT_STATE_RATE = 13;
Game_BattlerBase.TRAIT_STATE_RESIST = 14;
Game_BattlerBase.TRAIT_PARAM = 21;
Game_BattlerBase.TRAIT_XPARAM = 22;
Game_BattlerBase.TRAIT_SPARAM = 23;
Game_BattlerBase.TRAIT_ATTACK_ELEMENT = 31;
Game_BattlerBase.TRAIT_ATTACK_STATE = 32;
Game_BattlerBase.TRAIT_ATTACK_SPEED = 33;
Game_BattlerBase.TRAIT_ATTACK_TIMES = 34;
Game_BattlerBase.TRAIT_STYPE_ADD = 41;
Game_BattlerBase.TRAIT_STYPE_SEAL = 42;
Game_BattlerBase.TRAIT_SKILL_ADD = 43;
Game_BattlerBase.TRAIT_SKILL_SEAL = 44;
Game_BattlerBase.TRAIT_EQUIP_WTYPE = 51;
Game_BattlerBase.TRAIT_EQUIP_ATYPE = 52;
Game_BattlerBase.TRAIT_EQUIP_LOCK = 53;
Game_BattlerBase.TRAIT_EQUIP_SEAL = 54;
Game_BattlerBase.TRAIT_SLOT_TYPE = 55;
Game_BattlerBase.TRAIT_ACTION_PLUS = 61;
Game_BattlerBase.TRAIT_SPECIAL_FLAG = 62;
Game_BattlerBase.TRAIT_COLLAPSE_TYPE = 63;
Game_BattlerBase.TRAIT_PARTY_ABILITY = 64;
Game_BattlerBase.FLAG_ID_AUTO_BATTLE = 0;
Game_BattlerBase.FLAG_ID_GUARD = 1;
Game_BattlerBase.FLAG_ID_SUBSTITUTE = 2;
Game_BattlerBase.FLAG_ID_PRESERVE_TP = 3;
Game_BattlerBase.ICON_BUFF_START = 32;
Game_BattlerBase.ICON_DEBUFF_START = 48;
Object.defineProperties(Game_BattlerBase.prototype, {
// Hit Points
hp: { get: function() { return this._hp; }, configurable: true },
// Magic Points
mp: { get: function() { return this._mp; }, configurable: true },
// Tactical Points
tp: { get: function() { return this._tp; }, configurable: true },
// Maximum Hit Points
mhp: { get: function() { return this.param(0); }, configurable: true },
// Maximum Magic Points
mmp: { get: function() { return this.param(1); }, configurable: true },
// ATtacK power
atk: { get: function() { return this.param(2); }, configurable: true },
// DEFense power
def: { get: function() { return this.param(3); }, configurable: true },
// Magic ATtack power
mat: { get: function() { return this.param(4); }, configurable: true },
// Magic DeFense power
mdf: { get: function() { return this.param(5); }, configurable: true },
// AGIlity
agi: { get: function() { return this.param(6); }, configurable: true },
// LUcK
luk: { get: function() { return this.param(7); }, configurable: true },
// HIT rate
hit: { get: function() { return this.xparam(0); }, configurable: true },
// EVAsion rate
eva: { get: function() { return this.xparam(1); }, configurable: true },
// CRItical rate
cri: { get: function() { return this.xparam(2); }, configurable: true },
// Critical EVasion rate
cev: { get: function() { return this.xparam(3); }, configurable: true },
// Magic EVasion rate
mev: { get: function() { return this.xparam(4); }, configurable: true },
// Magic ReFlection rate
mrf: { get: function() { return this.xparam(5); }, configurable: true },
// CouNTer attack rate
cnt: { get: function() { return this.xparam(6); }, configurable: true },
// Hp ReGeneration rate
hrg: { get: function() { return this.xparam(7); }, configurable: true },
// Mp ReGeneration rate
mrg: { get: function() { return this.xparam(8); }, configurable: true },
// Tp ReGeneration rate
trg: { get: function() { return this.xparam(9); }, configurable: true },
// TarGet Rate
tgr: { get: function() { return this.sparam(0); }, configurable: true },
// GuaRD effect rate
grd: { get: function() { return this.sparam(1); }, configurable: true },
// RECovery effect rate
rec: { get: function() { return this.sparam(2); }, configurable: true },
// PHArmacology
pha: { get: function() { return this.sparam(3); }, configurable: true },
// Mp Cost Rate
mcr: { get: function() { return this.sparam(4); }, configurable: true },
// Tp Charge Rate
tcr: { get: function() { return this.sparam(5); }, configurable: true },
// Physical Damage Rate
pdr: { get: function() { return this.sparam(6); }, configurable: true },
// Magical Damage Rate
mdr: { get: function() { return this.sparam(7); }, configurable: true },
// Floor Damage Rate
fdr: { get: function() { return this.sparam(8); }, configurable: true },
// EXperience Rate
exr: { get: function() { return this.sparam(9); }, configurable: true }
});
Game_BattlerBase.prototype.initialize = function() {
this.initMembers();
};
Game_BattlerBase.prototype.initMembers = function() {
this._hp = 1;
this._mp = 0;
this._tp = 0;
this._hidden = false;
this.clearParamPlus();
this.clearStates();
this.clearBuffs();
};
Game_BattlerBase.prototype.clearParamPlus = function() {
this._paramPlus = [0,0,0,0,0,0,0,0];
};
Game_BattlerBase.prototype.clearStates = function() {
this._states = [];
this._stateTurns = {};
};
Game_BattlerBase.prototype.eraseState = function(stateId) {
var index = this._states.indexOf(stateId);
if (index >= 0) {
this._states.splice(index, 1);
}
delete this._stateTurns[stateId];
};
Game_BattlerBase.prototype.isStateAffected = function(stateId) {
return this._states.contains(stateId);
};
Game_BattlerBase.prototype.isDeathStateAffected = function() {
return this.isStateAffected(this.deathStateId());
};
Game_BattlerBase.prototype.deathStateId = function() {
return 1;
};
Game_BattlerBase.prototype.resetStateCounts = function(stateId) {
var state = $dataStates[stateId];
var variance = 1 + Math.max(state.maxTurns - state.minTurns, 0);
this._stateTurns[stateId] = state.minTurns + Math.randomInt(variance);
};
Game_BattlerBase.prototype.isStateExpired = function(stateId) {
return this._stateTurns[stateId] === 0;
};
Game_BattlerBase.prototype.updateStateTurns = function() {
this._states.forEach(function(stateId) {
if (this._stateTurns[stateId] > 0) {
this._stateTurns[stateId]--;
}
}, this);
};
Game_BattlerBase.prototype.clearBuffs = function() {
this._buffs = [0,0,0,0,0,0,0,0];
this._buffTurns = [0,0,0,0,0,0,0,0];
};
Game_BattlerBase.prototype.eraseBuff = function(paramId) {
this._buffs[paramId] = 0;
this._buffTurns[paramId] = 0;
};
Game_BattlerBase.prototype.buffLength = function() {
return this._buffs.length;
};
Game_BattlerBase.prototype.buff = function(paramId) {
return this._buffs[paramId];
};
Game_BattlerBase.prototype.isBuffAffected = function(paramId) {
return this._buffs[paramId] > 0;
};
Game_BattlerBase.prototype.isDebuffAffected = function(paramId) {
return this._buffs[paramId] < 0;
};
Game_BattlerBase.prototype.isBuffOrDebuffAffected = function(paramId) {
return this._buffs[paramId] !== 0;
};
Game_BattlerBase.prototype.isMaxBuffAffected = function(paramId) {
return this._buffs[paramId] === 2;
};
Game_BattlerBase.prototype.isMaxDebuffAffected = function(paramId) {
return this._buffs[paramId] === -2;
};
Game_BattlerBase.prototype.increaseBuff = function(paramId) {
if (!this.isMaxBuffAffected(paramId)) {
this._buffs[paramId]++;
}
};
Game_BattlerBase.prototype.decreaseBuff = function(paramId) {
if (!this.isMaxDebuffAffected(paramId)) {
this._buffs[paramId]--;
}
};
Game_BattlerBase.prototype.overwriteBuffTurns = function(paramId, turns) {
if (this._buffTurns[paramId] < turns) {
this._buffTurns[paramId] = turns;
}
};
Game_BattlerBase.prototype.isBuffExpired = function(paramId) {
return this._buffTurns[paramId] === 0;
};
Game_BattlerBase.prototype.updateBuffTurns = function() {
for (var i = 0; i < this._buffTurns.length; i++) {
if (this._buffTurns[i] > 0) {
this._buffTurns[i]--;
}
}
};
Game_BattlerBase.prototype.die = function() {
this._hp = 0;
this.clearStates();
this.clearBuffs();
};
Game_BattlerBase.prototype.revive = function() {
if (this._hp === 0) {
this._hp = 1;
}
};
Game_BattlerBase.prototype.states = function() {
return this._states.map(function(id) {
return $dataStates[id];
});
};
Game_BattlerBase.prototype.stateIcons = function() {
return this.states().map(function(state) {
return state.iconIndex;
}).filter(function(iconIndex) {
return iconIndex > 0;
});
};
Game_BattlerBase.prototype.buffIcons = function() {
var icons = [];
for (var i = 0; i < this._buffs.length; i++) {
if (this._buffs[i] !== 0) {
icons.push(this.buffIconIndex(this._buffs[i], i));
}
}
return icons;
};
Game_BattlerBase.prototype.buffIconIndex = function(buffLevel, paramId) {
if (buffLevel > 0) {
return Game_BattlerBase.ICON_BUFF_START + (buffLevel - 1) * 8 + paramId;
} else if (buffLevel < 0) {
return Game_BattlerBase.ICON_DEBUFF_START + (-buffLevel - 1) * 8 + paramId;
} else {
return 0;
}
};
Game_BattlerBase.prototype.allIcons = function() {
return this.stateIcons().concat(this.buffIcons());
};
Game_BattlerBase.prototype.traitObjects = function() {
// Returns an array of the all objects having traits. States only here.
return this.states();
};
Game_BattlerBase.prototype.allTraits = function() {
return this.traitObjects().reduce(function(r, obj) {
return r.concat(obj.traits);
}, []);
};
Game_BattlerBase.prototype.traits = function(code) {
return this.allTraits().filter(function(trait) {
return trait.code === code;
});
};
Game_BattlerBase.prototype.traitsWithId = function(code, id) {
return this.allTraits().filter(function(trait) {
return trait.code === code && trait.dataId === id;
});
};
Game_BattlerBase.prototype.traitsPi = function(code, id) {
return this.traitsWithId(code, id).reduce(function(r, trait) {
return r * trait.value;
}, 1);
};
Game_BattlerBase.prototype.traitsSum = function(code, id) {
return this.traitsWithId(code, id).reduce(function(r, trait) {
return r + trait.value;
}, 0);
};
Game_BattlerBase.prototype.traitsSumAll = function(code) {
return this.traits(code).reduce(function(r, trait) {
return r + trait.value;
}, 0);
};
Game_BattlerBase.prototype.traitsSet = function(code) {
return this.traits(code).reduce(function(r, trait) {
return r.concat(trait.dataId);
}, []);
};
Game_BattlerBase.prototype.paramBase = function(paramId) {
return 0;
};
Game_BattlerBase.prototype.paramPlus = function(paramId) {
return this._paramPlus[paramId];
};
Game_BattlerBase.prototype.paramMin = function(paramId) {
if (paramId === 1) {
return 0; // MMP
} else {
return 1;
}
};
Game_BattlerBase.prototype.paramMax = function(paramId) {
if (paramId === 0) {
return 999999; // MHP
} else if (paramId === 1) {
return 9999; // MMP
} else {
return 999;
}
};
Game_BattlerBase.prototype.paramRate = function(paramId) {
return this.traitsPi(Game_BattlerBase.TRAIT_PARAM, paramId);
};
Game_BattlerBase.prototype.paramBuffRate = function(paramId) {
return this._buffs[paramId] * 0.25 + 1.0;
};
Game_BattlerBase.prototype.param = function(paramId) {
var value = this.paramBase(paramId) + this.paramPlus(paramId);
value *= this.paramRate(paramId) * this.paramBuffRate(paramId);
var maxValue = this.paramMax(paramId);
var minValue = this.paramMin(paramId);
return Math.round(value.clamp(minValue, maxValue));
};
Game_BattlerBase.prototype.xparam = function(xparamId) {
return this.traitsSum(Game_BattlerBase.TRAIT_XPARAM, xparamId);
};
Game_BattlerBase.prototype.sparam = function(sparamId) {
return this.traitsPi(Game_BattlerBase.TRAIT_SPARAM, sparamId);
};
Game_BattlerBase.prototype.elementRate = function(elementId) {
return this.traitsPi(Game_BattlerBase.TRAIT_ELEMENT_RATE, elementId);
};
Game_BattlerBase.prototype.debuffRate = function(paramId) {
return this.traitsPi(Game_BattlerBase.TRAIT_DEBUFF_RATE, paramId);
};
Game_BattlerBase.prototype.stateRate = function(stateId) {
return this.traitsPi(Game_BattlerBase.TRAIT_STATE_RATE, stateId);
};
Game_BattlerBase.prototype.stateResistSet = function() {
return this.traitsSet(Game_BattlerBase.TRAIT_STATE_RESIST);
};
Game_BattlerBase.prototype.isStateResist = function(stateId) {
return this.stateResistSet().contains(stateId);
};
Game_BattlerBase.prototype.attackElements = function() {
return this.traitsSet(Game_BattlerBase.TRAIT_ATTACK_ELEMENT);
};
Game_BattlerBase.prototype.attackStates = function() {
return this.traitsSet(Game_BattlerBase.TRAIT_ATTACK_STATE);
};
Game_BattlerBase.prototype.attackStatesRate = function(stateId) {
return this.traitsSum(Game_BattlerBase.TRAIT_ATTACK_STATE, stateId);
};
Game_BattlerBase.prototype.attackSpeed = function() {
return this.traitsSumAll(Game_BattlerBase.TRAIT_ATTACK_SPEED);
};
Game_BattlerBase.prototype.attackTimesAdd = function() {
return Math.max(this.traitsSumAll(Game_BattlerBase.TRAIT_ATTACK_TIMES), 0);
};
Game_BattlerBase.prototype.addedSkillTypes = function() {
return this.traitsSet(Game_BattlerBase.TRAIT_STYPE_ADD);
};
Game_BattlerBase.prototype.isSkillTypeSealed = function(stypeId) {
return this.traitsSet(Game_BattlerBase.TRAIT_STYPE_SEAL).contains(stypeId);
};
Game_BattlerBase.prototype.addedSkills = function() {
return this.traitsSet(Game_BattlerBase.TRAIT_SKILL_ADD);
};
Game_BattlerBase.prototype.isSkillSealed = function(skillId) {
return this.traitsSet(Game_BattlerBase.TRAIT_SKILL_SEAL).contains(skillId);
};
Game_BattlerBase.prototype.isEquipWtypeOk = function(wtypeId) {
return this.traitsSet(Game_BattlerBase.TRAIT_EQUIP_WTYPE).contains(wtypeId);
};
Game_BattlerBase.prototype.isEquipAtypeOk = function(atypeId) {
return this.traitsSet(Game_BattlerBase.TRAIT_EQUIP_ATYPE).contains(atypeId);
};
Game_BattlerBase.prototype.isEquipTypeLocked = function(etypeId) {
return this.traitsSet(Game_BattlerBase.TRAIT_EQUIP_LOCK).contains(etypeId);
};
Game_BattlerBase.prototype.isEquipTypeSealed = function(etypeId) {
return this.traitsSet(Game_BattlerBase.TRAIT_EQUIP_SEAL).contains(etypeId);
};
Game_BattlerBase.prototype.slotType = function() {
var set = this.traitsSet(Game_BattlerBase.TRAIT_SLOT_TYPE);
return set.length > 0 ? Math.max.apply(null, set) : 0;
};
Game_BattlerBase.prototype.isDualWield = function() {
return this.slotType() === 1;
};
Game_BattlerBase.prototype.actionPlusSet = function() {
return this.traits(Game_BattlerBase.TRAIT_ACTION_PLUS).map(function(trait) {
return trait.value;
});
};
Game_BattlerBase.prototype.specialFlag = function(flagId) {
return this.traits(Game_BattlerBase.TRAIT_SPECIAL_FLAG).some(function(trait) {
return trait.dataId === flagId;
});
};
Game_BattlerBase.prototype.collapseType = function() {
var set = this.traitsSet(Game_BattlerBase.TRAIT_COLLAPSE_TYPE);
return set.length > 0 ? Math.max.apply(null, set) : 0;
};
Game_BattlerBase.prototype.partyAbility = function(abilityId) {
return this.traits(Game_BattlerBase.TRAIT_PARTY_ABILITY).some(function(trait) {
return trait.dataId === abilityId;
});
};
Game_BattlerBase.prototype.isAutoBattle = function() {
return this.specialFlag(Game_BattlerBase.FLAG_ID_AUTO_BATTLE);
};
Game_BattlerBase.prototype.isGuard = function() {
return this.specialFlag(Game_BattlerBase.FLAG_ID_GUARD) && this.canMove();
};
Game_BattlerBase.prototype.isSubstitute = function() {
return this.specialFlag(Game_BattlerBase.FLAG_ID_SUBSTITUTE) && this.canMove();
};
Game_BattlerBase.prototype.isPreserveTp = function() {
return this.specialFlag(Game_BattlerBase.FLAG_ID_PRESERVE_TP);
};
Game_BattlerBase.prototype.addParam = function(paramId, value) {
this._paramPlus[paramId] += value;
this.refresh();
};
Game_BattlerBase.prototype.setHp = function(hp) {
this._hp = hp;
this.refresh();
};
Game_BattlerBase.prototype.setMp = function(mp) {
this._mp = mp;
this.refresh();
};
Game_BattlerBase.prototype.setTp = function(tp) {
this._tp = tp;
this.refresh();
};
Game_BattlerBase.prototype.maxTp = function() {
return 100;
};
Game_BattlerBase.prototype.refresh = function() {
this.stateResistSet().forEach(function(stateId) {
this.eraseState(stateId);
}, this);
this._hp = this._hp.clamp(0, this.mhp);
this._mp = this._mp.clamp(0, this.mmp);
this._tp = this._tp.clamp(0, this.maxTp());
};
Game_BattlerBase.prototype.recoverAll = function() {
this.clearStates();
this._hp = this.mhp;
this._mp = this.mmp;
};
Game_BattlerBase.prototype.hpRate = function() {
return this.hp / this.mhp;
};
Game_BattlerBase.prototype.mpRate = function() {
return this.mmp > 0 ? this.mp / this.mmp : 0;
};
Game_BattlerBase.prototype.tpRate = function() {
return this.tp / this.maxTp();
};
Game_BattlerBase.prototype.hide = function() {
this._hidden = true;
};
Game_BattlerBase.prototype.appear = function() {
this._hidden = false;
};
Game_BattlerBase.prototype.isHidden = function() {
return this._hidden;
};
Game_BattlerBase.prototype.isAppeared = function() {
return !this.isHidden();
};
Game_BattlerBase.prototype.isDead = function() {
return this.isAppeared() && this.isDeathStateAffected();
};
Game_BattlerBase.prototype.isAlive = function() {
return this.isAppeared() && !this.isDeathStateAffected();
};
Game_BattlerBase.prototype.isDying = function() {
return this.isAlive() && this._hp < this.mhp / 4;
};
Game_BattlerBase.prototype.isRestricted = function() {
return this.isAppeared() && this.restriction() > 0;
};
Game_BattlerBase.prototype.canInput = function() {
return this.isAppeared() && !this.isRestricted() && !this.isAutoBattle();
};
Game_BattlerBase.prototype.canMove = function() {
return this.isAppeared() && this.restriction() < 4;
};
Game_BattlerBase.prototype.isConfused = function() {
return this.isAppeared() && this.restriction() >= 1 && this.restriction() <= 3;
};
Game_BattlerBase.prototype.confusionLevel = function() {
return this.isConfused() ? this.restriction() : 0;
};
Game_BattlerBase.prototype.isActor = function() {
return false;
};
Game_BattlerBase.prototype.isEnemy = function() {
return false;
};
Game_BattlerBase.prototype.sortStates = function() {
this._states.sort(function(a, b) {
var p1 = $dataStates[a].priority;
var p2 = $dataStates[b].priority;
if (p1 !== p2) {
return p2 - p1;
}
return a - b;
});
};
Game_BattlerBase.prototype.restriction = function() {
return Math.max.apply(null, this.states().map(function(state) {
return state.restriction;
}).concat(0));
};
Game_BattlerBase.prototype.addNewState = function(stateId) {
if (stateId === this.deathStateId()) {
this.die();
}
var restricted = this.isRestricted();
this._states.push(stateId);
this.sortStates();
if (!restricted && this.isRestricted()) {
this.onRestrict();
}
};
Game_BattlerBase.prototype.onRestrict = function() {
};
Game_BattlerBase.prototype.mostImportantStateText = function() {
var states = this.states();
for (var i = 0; i < states.length; i++) {
if (states[i].message3) {
return states[i].message3;
}
}
return '';
};
Game_BattlerBase.prototype.stateMotionIndex = function() {
var states = this.states();
if (states.length > 0) {
return states[0].motion;
} else {
return 0;
}
};
Game_BattlerBase.prototype.stateOverlayIndex = function() {
var states = this.states();
if (states.length > 0) {
return states[0].overlay;
} else {
return 0;
}
};
Game_BattlerBase.prototype.isSkillWtypeOk = function(skill) {
return true;
};
Game_BattlerBase.prototype.skillMpCost = function(skill) {
return Math.floor(skill.mpCost * this.mcr);
};
Game_BattlerBase.prototype.skillTpCost = function(skill) {
return skill.tpCost;
};
Game_BattlerBase.prototype.canPaySkillCost = function(skill) {
return this._tp >= this.skillTpCost(skill) && this._mp >= this.skillMpCost(skill);
};
Game_BattlerBase.prototype.paySkillCost = function(skill) {
this._mp -= this.skillMpCost(skill);
this._tp -= this.skillTpCost(skill);
};
Game_BattlerBase.prototype.isOccasionOk = function(item) {
if ($gameParty.inBattle()) {
return item.occasion === 0 || item.occasion === 1;
} else {
return item.occasion === 0 || item.occasion === 2;
}
};
Game_BattlerBase.prototype.meetsUsableItemConditions = function(item) {
return this.canMove() && this.isOccasionOk(item);
};
Game_BattlerBase.prototype.meetsSkillConditions = function(skill) {
return (this.meetsUsableItemConditions(skill) &&
this.isSkillWtypeOk(skill) && this.canPaySkillCost(skill) &&
!this.isSkillSealed(skill.id) && !this.isSkillTypeSealed(skill.stypeId));
};
Game_BattlerBase.prototype.meetsItemConditions = function(item) {
return this.meetsUsableItemConditions(item) && $gameParty.hasItem(item);
};
Game_BattlerBase.prototype.canUse = function(item) {
if (!item) {
return false;
} else if (DataManager.isSkill(item)) {
return this.meetsSkillConditions(item);
} else if (DataManager.isItem(item)) {
return this.meetsItemConditions(item);
} else {
return false;
}
};
Game_BattlerBase.prototype.canEquip = function(item) {
if (!item) {
return false;
} else if (DataManager.isWeapon(item)) {
return this.canEquipWeapon(item);
} else if (DataManager.isArmor(item)) {
return this.canEquipArmor(item);
} else {
return false;
}
};
Game_BattlerBase.prototype.canEquipWeapon = function(item) {
return this.isEquipWtypeOk(item.wtypeId) && !this.isEquipTypeSealed(item.etypeId);
};
Game_BattlerBase.prototype.canEquipArmor = function(item) {
return this.isEquipAtypeOk(item.atypeId) && !this.isEquipTypeSealed(item.etypeId);
};
Game_BattlerBase.prototype.attackSkillId = function() {
return 1;
};
Game_BattlerBase.prototype.guardSkillId = function() {
return 2;
};
Game_BattlerBase.prototype.canAttack = function() {
return this.canUse($dataSkills[this.attackSkillId()]);
};
Game_BattlerBase.prototype.canGuard = function() {
return this.canUse($dataSkills[this.guardSkillId()]);
};
//-----------------------------------------------------------------------------
// Game_Battler
//
// The superclass of Game_Actor and Game_Enemy. It contains methods for sprites
// and actions.
function Game_Battler() {
this.initialize.apply(this, arguments);
}
Game_Battler.prototype = Object.create(Game_BattlerBase.prototype);
Game_Battler.prototype.constructor = Game_Battler;
Game_Battler.prototype.initialize = function() {
Game_BattlerBase.prototype.initialize.call(this);
};
Game_Battler.prototype.initMembers = function() {
Game_BattlerBase.prototype.initMembers.call(this);
this._actions = [];
this._speed = 0;
this._result = new Game_ActionResult();
this._actionState = '';
this._lastTargetIndex = 0;
this._animations = [];
this._damagePopup = false;
this._effectType = null;
this._motionType = null;
this._weaponImageId = 0;
this._motionRefresh = false;
this._selected = false;
};
Game_Battler.prototype.clearAnimations = function() {
this._animations = [];
};
Game_Battler.prototype.clearDamagePopup = function() {
this._damagePopup = false;
};
Game_Battler.prototype.clearWeaponAnimation = function() {
this._weaponImageId = 0;
};
Game_Battler.prototype.clearEffect = function() {
this._effectType = null;
};
Game_Battler.prototype.clearMotion = function() {
this._motionType = null;
this._motionRefresh = false;
};
Game_Battler.prototype.requestEffect = function(effectType) {
this._effectType = effectType;
};
Game_Battler.prototype.requestMotion = function(motionType) {
this._motionType = motionType;
};
Game_Battler.prototype.requestMotionRefresh = function() {
this._motionRefresh = true;
};
Game_Battler.prototype.select = function() {
this._selected = true;
};
Game_Battler.prototype.deselect = function() {
this._selected = false;
};
Game_Battler.prototype.isAnimationRequested = function() {
return this._animations.length > 0;
};
Game_Battler.prototype.isDamagePopupRequested = function() {
return this._damagePopup;
};
Game_Battler.prototype.isEffectRequested = function() {
return !!this._effectType;
};
Game_Battler.prototype.isMotionRequested = function() {
return !!this._motionType;
};
Game_Battler.prototype.isWeaponAnimationRequested = function() {
return this._weaponImageId > 0;
};
Game_Battler.prototype.isMotionRefreshRequested = function() {
return this._motionRefresh;
};
Game_Battler.prototype.isSelected = function() {
return this._selected;
};
Game_Battler.prototype.effectType = function() {
return this._effectType;
};
Game_Battler.prototype.motionType = function() {
return this._motionType;
};
Game_Battler.prototype.weaponImageId = function() {
return this._weaponImageId;
};
Game_Battler.prototype.shiftAnimation = function() {
return this._animations.shift();
};
Game_Battler.prototype.startAnimation = function(animationId, mirror, delay) {
var data = { animationId: animationId, mirror: mirror, delay: delay };
this._animations.push(data);
};
Game_Battler.prototype.startDamagePopup = function() {
this._damagePopup = true;
};
Game_Battler.prototype.startWeaponAnimation = function(weaponImageId) {
this._weaponImageId = weaponImageId;
};
Game_Battler.prototype.action = function(index) {
return this._actions[index];
};
Game_Battler.prototype.setAction = function(index, action) {
this._actions[index] = action;
};
Game_Battler.prototype.numActions = function() {
return this._actions.length;
};
Game_Battler.prototype.clearActions = function() {
this._actions = [];
};
Game_Battler.prototype.result = function() {
return this._result;
};
Game_Battler.prototype.clearResult = function() {
this._result.clear();
};
Game_Battler.prototype.refresh = function() {
Game_BattlerBase.prototype.refresh.call(this);
if (this.hp === 0) {
this.addState(this.deathStateId());
} else {
this.removeState(this.deathStateId());
}
};
Game_Battler.prototype.addState = function(stateId) {
if (this.isStateAddable(stateId)) {
if (!this.isStateAffected(stateId)) {
this.addNewState(stateId);
this.refresh();
}
this.resetStateCounts(stateId);
this._result.pushAddedState(stateId);
}
};
Game_Battler.prototype.isStateAddable = function(stateId) {
return (this.isAlive() && $dataStates[stateId] &&
!this.isStateResist(stateId) &&
!this._result.isStateRemoved(stateId) &&
!this.isStateRestrict(stateId));
};
Game_Battler.prototype.isStateRestrict = function(stateId) {
return $dataStates[stateId].removeByRestriction && this.isRestricted();
};
Game_Battler.prototype.onRestrict = function() {
Game_BattlerBase.prototype.onRestrict.call(this);
this.clearActions();
this.states().forEach(function(state) {
if (state.removeByRestriction) {
this.removeState(state.id);
}
}, this);
};
Game_Battler.prototype.removeState = function(stateId) {
if (this.isStateAffected(stateId)) {
if (stateId === this.deathStateId()) {
this.revive();
}
this.eraseState(stateId);
this.refresh();
this._result.pushRemovedState(stateId);
}
};
Game_Battler.prototype.escape = function() {
if ($gameParty.inBattle()) {
this.hide();
}
this.clearActions();
this.clearStates();
SoundManager.playEscape();
};
Game_Battler.prototype.addBuff = function(paramId, turns) {
if (this.isAlive()) {
this.increaseBuff(paramId);
if (this.isBuffAffected(paramId)) {
this.overwriteBuffTurns(paramId, turns);
}
this._result.pushAddedBuff(paramId);
this.refresh();
}
};
Game_Battler.prototype.addDebuff = function(paramId, turns) {
if (this.isAlive()) {
this.decreaseBuff(paramId);
if (this.isDebuffAffected(paramId)) {
this.overwriteBuffTurns(paramId, turns);
}
this._result.pushAddedDebuff(paramId);
this.refresh();
}
};
Game_Battler.prototype.removeBuff = function(paramId) {
if (this.isAlive() && this.isBuffOrDebuffAffected(paramId)) {
this.eraseBuff(paramId);
this._result.pushRemovedBuff(paramId);
this.refresh();
}
};
Game_Battler.prototype.removeBattleStates = function() {
this.states().forEach(function(state) {
if (state.removeAtBattleEnd) {
this.removeState(state.id);
}
}, this);
};
Game_Battler.prototype.removeAllBuffs = function() {
for (var i = 0; i < this.buffLength(); i++) {
this.removeBuff(i);
}
};
Game_Battler.prototype.removeStatesAuto = function(timing) {
this.states().forEach(function(state) {
if (this.isStateExpired(state.id) && state.autoRemovalTiming === timing) {
this.removeState(state.id);
}
}, this);
};
Game_Battler.prototype.removeBuffsAuto = function() {
for (var i = 0; i < this.buffLength(); i++) {
if (this.isBuffExpired(i)) {
this.removeBuff(i);
}
}
};
Game_Battler.prototype.removeStatesByDamage = function() {
this.states().forEach(function(state) {
if (state.removeByDamage && Math.randomInt(100) < state.chanceByDamage) {
this.removeState(state.id);
}
}, this);
};
Game_Battler.prototype.makeActionTimes = function() {
return this.actionPlusSet().reduce(function(r, p) {
return Math.random() < p ? r + 1 : r;
}, 1);
};
Game_Battler.prototype.makeActions = function() {
this.clearActions();
if (this.canMove()) {
var actionTimes = this.makeActionTimes();
this._actions = [];
for (var i = 0; i < actionTimes; i++) {
this._actions.push(new Game_Action(this));
}
}
};
Game_Battler.prototype.speed = function() {
return this._speed;
};
Game_Battler.prototype.makeSpeed = function() {
this._speed = Math.min.apply(null, this._actions.map(function(action) {
return action.speed();
})) || 0;
};
Game_Battler.prototype.currentAction = function() {
return this._actions[0];
};
Game_Battler.prototype.removeCurrentAction = function() {
this._actions.shift();
};
Game_Battler.prototype.setLastTarget = function(target) {
if (target) {
this._lastTargetIndex = target.index();
} else {
this._lastTargetIndex = 0;
}
};
Game_Battler.prototype.forceAction = function(skillId, targetIndex) {
this.clearActions();
var action = new Game_Action(this, true);
action.setSkill(skillId);
if (targetIndex === -2) {
action.setTarget(this._lastTargetIndex);
} else if (targetIndex === -1) {
action.decideRandomTarget();
} else {
action.setTarget(targetIndex);
}
this._actions.push(action);
};
Game_Battler.prototype.useItem = function(item) {
if (DataManager.isSkill(item)) {
this.paySkillCost(item);
} else if (DataManager.isItem(item)) {
this.consumeItem(item);
}
};
Game_Battler.prototype.consumeItem = function(item) {
$gameParty.consumeItem(item);
};
Game_Battler.prototype.gainHp = function(value) {
this._result.hpDamage = -value;
this._result.hpAffected = true;
this.setHp(this.hp + value);
};
Game_Battler.prototype.gainMp = function(value) {
this._result.mpDamage = -value;
this.setMp(this.mp + value);
};
Game_Battler.prototype.gainTp = function(value) {
this._result.tpDamage = -value;
this.setTp(this.tp + value);
};
Game_Battler.prototype.gainSilentTp = function(value) {
this.setTp(this.tp + value);
};
Game_Battler.prototype.initTp = function() {
this.setTp(Math.randomInt(25));
};
Game_Battler.prototype.clearTp = function() {
this.setTp(0);
};
Game_Battler.prototype.chargeTpByDamage = function(damageRate) {
var value = Math.floor(50 * damageRate * this.tcr);
this.gainSilentTp(value);
};
Game_Battler.prototype.regenerateHp = function() {
var value = Math.floor(this.mhp * this.hrg);
value = Math.max(value, -this.maxSlipDamage());
if (value !== 0) {
this.gainHp(value);
}
};
Game_Battler.prototype.maxSlipDamage = function() {
return $dataSystem.optSlipDeath ? this.hp : Math.max(this.hp - 1, 0);
};
Game_Battler.prototype.regenerateMp = function() {
var value = Math.floor(this.mmp * this.mrg);
if (value !== 0) {
this.gainMp(value);
}
};
Game_Battler.prototype.regenerateTp = function() {
var value = Math.floor(100 * this.trg);
this.gainSilentTp(value);
};
Game_Battler.prototype.regenerateAll = function() {
if (this.isAlive()) {
this.regenerateHp();
this.regenerateMp();
this.regenerateTp();
}
};
Game_Battler.prototype.onBattleStart = function() {
this.setActionState('undecided');
this.clearMotion();
if (!this.isPreserveTp()) {
this.initTp();
}
};
Game_Battler.prototype.onAllActionsEnd = function() {
this.clearResult();
this.removeStatesAuto(1);
this.removeBuffsAuto();
};
Game_Battler.prototype.onTurnEnd = function() {
this.clearResult();
this.regenerateAll();
if (!BattleManager.isForcedTurn()) {
this.updateStateTurns();
this.updateBuffTurns();
}
this.removeStatesAuto(2);
};
Game_Battler.prototype.onBattleEnd = function() {
this.clearResult();
this.removeBattleStates();
this.removeAllBuffs();
this.clearActions();
if (!this.isPreserveTp()) {
this.clearTp();
}
this.appear();
};
Game_Battler.prototype.onDamage = function(value) {
this.removeStatesByDamage();
this.chargeTpByDamage(value / this.mhp);
};
Game_Battler.prototype.setActionState = function(actionState) {
this._actionState = actionState;
this.requestMotionRefresh();
};
Game_Battler.prototype.isUndecided = function() {
return this._actionState === 'undecided';
};
Game_Battler.prototype.isInputting = function() {
return this._actionState === 'inputting';
};
Game_Battler.prototype.isWaiting = function() {
return this._actionState === 'waiting';
};
Game_Battler.prototype.isActing = function() {
return this._actionState === 'acting';
};
Game_Battler.prototype.isChanting = function() {
if (this.isWaiting()) {
return this._actions.some(function(action) {
return action.isMagicSkill();
});
}
return false;
};
Game_Battler.prototype.isGuardWaiting = function() {
if (this.isWaiting()) {
return this._actions.some(function(action) {
return action.isGuard();
});
}
return false;
};
Game_Battler.prototype.performActionStart = function(action) {
if (!action.isGuard()) {
this.setActionState('acting');
}
};
Game_Battler.prototype.performAction = function(action) {
};
Game_Battler.prototype.performActionEnd = function() {
this.setActionState('done');
};
Game_Battler.prototype.performDamage = function() {
};
Game_Battler.prototype.performMiss = function() {
SoundManager.playMiss();
};
Game_Battler.prototype.performRecovery = function() {
SoundManager.playRecovery();
};
Game_Battler.prototype.performEvasion = function() {
SoundManager.playEvasion();
};
Game_Battler.prototype.performMagicEvasion = function() {
SoundManager.playMagicEvasion();
};
Game_Battler.prototype.performCounter = function() {
SoundManager.playEvasion();
};
Game_Battler.prototype.performReflection = function() {
SoundManager.playReflection();
};
Game_Battler.prototype.performSubstitute = function(target) {
};
Game_Battler.prototype.performCollapse = function() {
};
//-----------------------------------------------------------------------------
// Game_Actor
//
// The game object class for an actor.
function Game_Actor() {
this.initialize.apply(this, arguments);
}
Game_Actor.prototype = Object.create(Game_Battler.prototype);
Game_Actor.prototype.constructor = Game_Actor;
Object.defineProperty(Game_Actor.prototype, 'level', {
get: function() {
return this._level;
},
configurable: true
});
Game_Actor.prototype.initialize = function(actorId) {
Game_Battler.prototype.initialize.call(this);
this.setup(actorId);
};
Game_Actor.prototype.initMembers = function() {
Game_Battler.prototype.initMembers.call(this);
this._actorId = 0;
this._name = '';
this._nickname = '';
this._classId = 0;
this._level = 0;
this._characterName = '';
this._characterIndex = 0;
this._faceName = '';
this._faceIndex = 0;
this._battlerName = '';
this._exp = {};
this._skills = [];
this._equips = [];
this._actionInputIndex = 0;
this._lastMenuSkill = new Game_Item();
this._lastBattleSkill = new Game_Item();
this._lastCommandSymbol = '';
};
Game_Actor.prototype.setup = function(actorId) {
var actor = $dataActors[actorId];
this._actorId = actorId;
this._name = actor.name;
this._nickname = actor.nickname;
this._profile = actor.profile;
this._classId = actor.classId;
this._level = actor.initialLevel;
this.initImages();
this.initExp();
this.initSkills();
this.initEquips(actor.equips);
this.clearParamPlus();
this.recoverAll();
};
Game_Actor.prototype.actorId = function() {
return this._actorId;
};
Game_Actor.prototype.actor = function() {
return $dataActors[this._actorId];
};
Game_Actor.prototype.name = function() {
return this._name;
};
Game_Actor.prototype.setName = function(name) {
this._name = name;
};
Game_Actor.prototype.nickname = function() {
return this._nickname;
};
Game_Actor.prototype.setNickname = function(nickname) {
this._nickname = nickname;
};
Game_Actor.prototype.profile = function() {
return this._profile;
};
Game_Actor.prototype.setProfile = function(profile) {
this._profile = profile;
};
Game_Actor.prototype.characterName = function() {
return this._characterName;
};
Game_Actor.prototype.characterIndex = function() {
return this._characterIndex;
};
Game_Actor.prototype.faceName = function() {
return this._faceName;
};
Game_Actor.prototype.faceIndex = function() {
return this._faceIndex;
};
Game_Actor.prototype.battlerName = function() {
return this._battlerName;
};
Game_Actor.prototype.clearStates = function() {
Game_Battler.prototype.clearStates.call(this);
this._stateSteps = {};
};
Game_Actor.prototype.eraseState = function(stateId) {
Game_Battler.prototype.eraseState.call(this, stateId);
delete this._stateSteps[stateId];
};
Game_Actor.prototype.resetStateCounts = function(stateId) {
Game_Battler.prototype.resetStateCounts.call(this, stateId);
this._stateSteps[stateId] = $dataStates[stateId].stepsToRemove;
};
Game_Actor.prototype.initImages = function() {
var actor = this.actor();
this._characterName = actor.characterName;
this._characterIndex = actor.characterIndex;
this._faceName = actor.faceName;
this._faceIndex = actor.faceIndex;
this._battlerName = actor.battlerName;
};
Game_Actor.prototype.expForLevel = function(level) {
var c = this.currentClass();
var basis = c.expParams[0];
var extra = c.expParams[1];
var acc_a = c.expParams[2];
var acc_b = c.expParams[3];
return Math.round(basis*(Math.pow(level-1, 0.9+acc_a/250))*level*
(level+1)/(6+Math.pow(level,2)/50/acc_b)+(level-1)*extra);
};
Game_Actor.prototype.initExp = function() {
this._exp[this._classId] = this.currentLevelExp();
};
Game_Actor.prototype.currentExp = function() {
return this._exp[this._classId];
};
Game_Actor.prototype.currentLevelExp = function() {
return this.expForLevel(this._level);
};
Game_Actor.prototype.nextLevelExp = function() {
return this.expForLevel(this._level + 1);
};
Game_Actor.prototype.nextRequiredExp = function() {
return this.nextLevelExp() - this.currentExp();
};
Game_Actor.prototype.maxLevel = function() {
return this.actor().maxLevel;
};
Game_Actor.prototype.isMaxLevel = function() {
return this._level >= this.maxLevel();
};
Game_Actor.prototype.initSkills = function() {
this._skills = [];
this.currentClass().learnings.forEach(function(learning) {
if (learning.level <= this._level) {
this.learnSkill(learning.skillId);
}
}, this);
};
Game_Actor.prototype.initEquips = function(equips) {
var slots = this.equipSlots();
var maxSlots = slots.length;
this._equips = [];
for (var i = 0; i < maxSlots; i++) {
this._equips[i] = new Game_Item();
}
for (var j = 0; j < equips.length; j++) {
if (j < maxSlots) {
this._equips[j].setEquip(slots[j] === 1, equips[j]);
}
}
this.releaseUnequippableItems(true);
this.refresh();
};
Game_Actor.prototype.equipSlots = function() {
var slots = [];
for (var i = 1; i < $dataSystem.equipTypes.length; i++) {
slots.push(i);
}
if (slots.length >= 2 && this.isDualWield()) {
slots[1] = 1;
}
return slots;
};
Game_Actor.prototype.equips = function() {
return this._equips.map(function(item) {
return item.object();
});
};
Game_Actor.prototype.weapons = function() {
return this.equips().filter(function(item) {
return item && DataManager.isWeapon(item);
});
};
Game_Actor.prototype.armors = function() {
return this.equips().filter(function(item) {
return item && DataManager.isArmor(item);
});
};
Game_Actor.prototype.hasWeapon = function(weapon) {
return this.weapons().contains(weapon);
};
Game_Actor.prototype.hasArmor = function(armor) {
return this.armors().contains(armor);
};
Game_Actor.prototype.isEquipChangeOk = function(slotId) {
return (!this.isEquipTypeLocked(this.equipSlots()[slotId]) &&
!this.isEquipTypeSealed(this.equipSlots()[slotId]));
};
Game_Actor.prototype.changeEquip = function(slotId, item) {
if (this.tradeItemWithParty(item, this.equips()[slotId]) &&
(!item || this.equipSlots()[slotId] === item.etypeId)) {
this._equips[slotId].setObject(item);
this.refresh();
}
};
Game_Actor.prototype.forceChangeEquip = function(slotId, item) {
this._equips[slotId].setObject(item);
this.releaseUnequippableItems(true);
this.refresh();
};
Game_Actor.prototype.tradeItemWithParty = function(newItem, oldItem) {
if (newItem && !$gameParty.hasItem(newItem)) {
return false;
} else {
$gameParty.gainItem(oldItem, 1);
$gameParty.loseItem(newItem, 1);
return true;
}
};
Game_Actor.prototype.changeEquipById = function(etypeId, itemId) {
var slotId = etypeId - 1;
if (this.equipSlots()[slotId] === 1) {
this.changeEquip(slotId, $dataWeapons[itemId]);
} else {
this.changeEquip(slotId, $dataArmors[itemId]);
}
};
Game_Actor.prototype.isEquipped = function(item) {
return this.equips().contains(item);
};
Game_Actor.prototype.discardEquip = function(item) {
var slotId = this.equips().indexOf(item);
if (slotId >= 0) {
this._equips[slotId].setObject(null);
}
};
Game_Actor.prototype.releaseUnequippableItems = function(forcing) {
for (;;) {
var slots = this.equipSlots();
var equips = this.equips();
var changed = false;
for (var i = 0; i < equips.length; i++) {
var item = equips[i];
if (item && (!this.canEquip(item) || item.etypeId !== slots[i])) {
if (!forcing) {
this.tradeItemWithParty(null, item);
}
this._equips[i].setObject(null);
changed = true;
}
}
if (!changed) {
break;
}
}
};
Game_Actor.prototype.clearEquipments = function() {
var maxSlots = this.equipSlots().length;
for (var i = 0; i < maxSlots; i++) {
if (this.isEquipChangeOk(i)) {
this.changeEquip(i, null);
}
}
};
Game_Actor.prototype.optimizeEquipments = function() {
var maxSlots = this.equipSlots().length;
this.clearEquipments();
for (var i = 0; i < maxSlots; i++) {
if (this.isEquipChangeOk(i)) {
this.changeEquip(i, this.bestEquipItem(i));
}
}
};
Game_Actor.prototype.bestEquipItem = function(slotId) {
var etypeId = this.equipSlots()[slotId];
var items = $gameParty.equipItems().filter(function(item) {
return item.etypeId === etypeId && this.canEquip(item);
}, this);
var bestItem = null;
var bestPerformance = -1000;
for (var i = 0; i < items.length; i++) {
var performance = this.calcEquipItemPerformance(items[i]);
if (performance > bestPerformance) {
bestPerformance = performance;
bestItem = items[i];
}
}
return bestItem;
};
Game_Actor.prototype.calcEquipItemPerformance = function(item) {
return item.params.reduce(function(a, b) {
return a + b;
});
};
Game_Actor.prototype.isSkillWtypeOk = function(skill) {
var wtypeId1 = skill.requiredWtypeId1;
var wtypeId2 = skill.requiredWtypeId2;
if ((wtypeId1 === 0 && wtypeId2 === 0) ||
(wtypeId1 > 0 && this.isWtypeEquipped(wtypeId1)) ||
(wtypeId2 > 0 && this.isWtypeEquipped(wtypeId2))) {
return true;
} else {
return false;
}
};
Game_Actor.prototype.isWtypeEquipped = function(wtypeId) {
return this.weapons().some(function(weapon) {
return weapon.wtypeId === wtypeId;
});
};
Game_Actor.prototype.refresh = function() {
this.releaseUnequippableItems(false);
Game_Battler.prototype.refresh.call(this);
};
Game_Actor.prototype.isActor = function() {
return true;
};
Game_Actor.prototype.friendsUnit = function() {
return $gameParty;
};
Game_Actor.prototype.opponentsUnit = function() {
return $gameTroop;
};
Game_Actor.prototype.index = function() {
return $gameParty.members().indexOf(this);
};
Game_Actor.prototype.isBattleMember = function() {
return $gameParty.battleMembers().contains(this);
};
Game_Actor.prototype.isFormationChangeOk = function() {
return true;
};
Game_Actor.prototype.currentClass = function() {
return $dataClasses[this._classId];
};
Game_Actor.prototype.isClass = function(gameClass) {
return gameClass && this._classId === gameClass.id;
};
Game_Actor.prototype.skills = function() {
var list = [];
this._skills.concat(this.addedSkills()).forEach(function(id) {
if (!list.contains($dataSkills[id])) {
list.push($dataSkills[id]);
}
});
return list;
};
Game_Actor.prototype.usableSkills = function() {
return this.skills().filter(function(skill) {
return this.canUse(skill);
}, this);
};
Game_Actor.prototype.traitObjects = function() {
var objects = Game_Battler.prototype.traitObjects.call(this);
objects = objects.concat([this.actor(), this.currentClass()]);
var equips = this.equips();
for (var i = 0; i < equips.length; i++) {
var item = equips[i];
if (item) {
objects.push(item);
}
}
return objects;
};
Game_Actor.prototype.attackElements = function() {
var set = Game_Battler.prototype.attackElements.call(this);
if (this.hasNoWeapons() && !set.contains(this.bareHandsElementId())) {
set.push(this.bareHandsElementId());
}
return set;
};
Game_Actor.prototype.hasNoWeapons = function() {
return this.weapons().length === 0;
};
Game_Actor.prototype.bareHandsElementId = function() {
return 1;
};
Game_Actor.prototype.paramMax = function(paramId) {
if (paramId === 0) {
return 9999; // MHP
}
return Game_Battler.prototype.paramMax.call(this, paramId);
};
Game_Actor.prototype.paramBase = function(paramId) {
return this.currentClass().params[paramId][this._level];
};
Game_Actor.prototype.paramPlus = function(paramId) {
var value = Game_Battler.prototype.paramPlus.call(this, paramId);
var equips = this.equips();
for (var i = 0; i < equips.length; i++) {
var item = equips[i];
if (item) {
value += item.params[paramId];
}
}
return value;
};
Game_Actor.prototype.attackAnimationId1 = function() {
if (this.hasNoWeapons()) {
return this.bareHandsAnimationId();
} else {
var weapons = this.weapons();
return weapons[0] ? weapons[0].animationId : 0;
}
};
Game_Actor.prototype.attackAnimationId2 = function() {
var weapons = this.weapons();
return weapons[1] ? weapons[1].animationId : 0;
};
Game_Actor.prototype.bareHandsAnimationId = function() {
return 1;
};
Game_Actor.prototype.changeExp = function(exp, show) {
this._exp[this._classId] = Math.max(exp, 0);
var lastLevel = this._level;
var lastSkills = this.skills();
while (!this.isMaxLevel() && this.currentExp() >= this.nextLevelExp()) {
this.levelUp();
}
while (this.currentExp() < this.currentLevelExp()) {
this.levelDown();
}
if (show && this._level > lastLevel) {
this.displayLevelUp(this.findNewSkills(lastSkills));
}
this.refresh();
};
Game_Actor.prototype.levelUp = function() {
this._level++;
this.currentClass().learnings.forEach(function(learning) {
if (learning.level === this._level) {
this.learnSkill(learning.skillId);
}
}, this);
};
Game_Actor.prototype.levelDown = function() {
this._level--;
};
Game_Actor.prototype.findNewSkills = function(lastSkills) {
var newSkills = this.skills();
for (var i = 0; i < lastSkills.length; i++) {
var index = newSkills.indexOf(lastSkills[i]);
if (index >= 0) {
newSkills.splice(index, 1);
}
}
return newSkills;
};
Game_Actor.prototype.displayLevelUp = function(newSkills) {
var text = TextManager.levelUp.format(this._name, TextManager.level, this._level);
$gameMessage.newPage();
$gameMessage.add(text);
newSkills.forEach(function(skill) {
$gameMessage.add(TextManager.obtainSkill.format(skill.name));
});
};
Game_Actor.prototype.gainExp = function(exp) {
var newExp = this.currentExp() + Math.round(exp * this.finalExpRate());
this.changeExp(newExp, this.shouldDisplayLevelUp());
};
Game_Actor.prototype.finalExpRate = function() {
return this.exr * (this.isBattleMember() ? 1 : this.benchMembersExpRate());
};
Game_Actor.prototype.benchMembersExpRate = function() {
return $dataSystem.optExtraExp ? 1 : 0;
};
Game_Actor.prototype.shouldDisplayLevelUp = function() {
return true;
};
Game_Actor.prototype.changeLevel = function(level, show) {
level = level.clamp(1, this.maxLevel());
this.changeExp(this.expForLevel(level), show);
};
Game_Actor.prototype.learnSkill = function(skillId) {
if (!this.isLearnedSkill(skillId)) {
this._skills.push(skillId);
this._skills.sort(function(a, b) {
return a - b;
});
}
};
Game_Actor.prototype.forgetSkill = function(skillId) {
var index = this._skills.indexOf(skillId);
if (index >= 0) {
this._skills.splice(index, 1);
}
};
Game_Actor.prototype.isLearnedSkill = function(skillId) {
return this._skills.contains(skillId);
};
Game_Actor.prototype.hasSkill = function(skillId) {
return this.skills().contains($dataSkills[skillId]);
};
Game_Actor.prototype.changeClass = function(classId, keepExp) {
if (keepExp) {
this._exp[classId] = this.currentExp();
}
this._classId = classId;
this.changeExp(this._exp[this._classId] || 0, false);
this.refresh();
};
Game_Actor.prototype.setCharacterImage = function(characterName, characterIndex) {
this._characterName = characterName;
this._characterIndex = characterIndex;
};
Game_Actor.prototype.setFaceImage = function(faceName, faceIndex) {
this._faceName = faceName;
this._faceIndex = faceIndex;
};
Game_Actor.prototype.setBattlerImage = function(battlerName) {
this._battlerName = battlerName;
};
Game_Actor.prototype.isSpriteVisible = function() {
return $gameSystem.isSideView();
};
Game_Actor.prototype.startAnimation = function(animationId, mirror, delay) {
mirror = !mirror;
Game_Battler.prototype.startAnimation.call(this, animationId, mirror, delay);
};
Game_Actor.prototype.performActionStart = function(action) {
Game_Battler.prototype.performActionStart.call(this, action);
};
Game_Actor.prototype.performAction = function(action) {
Game_Battler.prototype.performAction.call(this, action);
if (action.isAttack()) {
this.performAttack();
} else if (action.isGuard()) {
this.requestMotion('guard');
} else if (action.isMagicSkill()) {
this.requestMotion('spell');
} else if (action.isSkill()) {
this.requestMotion('skill');
} else if (action.isItem()) {
this.requestMotion('item');
}
};
Game_Actor.prototype.performActionEnd = function() {
Game_Battler.prototype.performActionEnd.call(this);
};
Game_Actor.prototype.performAttack = function() {
var weapons = this.weapons();
var wtypeId = weapons[0] ? weapons[0].wtypeId : 0;
var attackMotion = $dataSystem.attackMotions[wtypeId];
if (attackMotion) {
if (attackMotion.type === 0) {
this.requestMotion('thrust');
} else if (attackMotion.type === 1) {
this.requestMotion('swing');
} else if (attackMotion.type === 2) {
this.requestMotion('missile');
}
this.startWeaponAnimation(attackMotion.weaponImageId);
}
};
Game_Actor.prototype.performDamage = function() {
Game_Battler.prototype.performDamage.call(this);
if (this.isSpriteVisible()) {
this.requestMotion('damage');
} else {
$gameScreen.startShake(5, 5, 10);
}
SoundManager.playActorDamage();
};
Game_Actor.prototype.performEvasion = function() {
Game_Battler.prototype.performEvasion.call(this);
this.requestMotion('evade');
};
Game_Actor.prototype.performMagicEvasion = function() {
Game_Battler.prototype.performMagicEvasion.call(this);
this.requestMotion('evade');
};
Game_Actor.prototype.performCounter = function() {
Game_Battler.prototype.performCounter.call(this);
this.performAttack();
};
Game_Actor.prototype.performCollapse = function() {
Game_Battler.prototype.performCollapse.call(this);
if ($gameParty.inBattle()) {
SoundManager.playActorCollapse();
}
};
Game_Actor.prototype.performVictory = function() {
if (this.canMove()) {
this.requestMotion('victory');
}
};
Game_Actor.prototype.performEscape = function() {
if (this.canMove()) {
this.requestMotion('escape');
}
};
Game_Actor.prototype.makeActionList = function() {
var list = [];
var action = new Game_Action(this);
action.setAttack();
list.push(action);
this.usableSkills().forEach(function(skill) {
action = new Game_Action(this);
action.setSkill(skill.id);
list.push(action);
}, this);
return list;
};
Game_Actor.prototype.makeAutoBattleActions = function() {
for (var i = 0; i < this.numActions(); i++) {
var list = this.makeActionList();
var maxValue = Number.MIN_VALUE;
for (var j = 0; j < list.length; j++) {
var value = list[j].evaluate();
if (value > maxValue) {
maxValue = value;
this.setAction(i, list[j]);
}
}
}
this.setActionState('waiting');
};
Game_Actor.prototype.makeConfusionActions = function() {
for (var i = 0; i < this.numActions(); i++) {
this.action(i).setConfusion();
}
this.setActionState('waiting');
};
Game_Actor.prototype.makeActions = function() {
Game_Battler.prototype.makeActions.call(this);
if (this.numActions() > 0) {
this.setActionState('undecided');
} else {
this.setActionState('waiting');
}
if (this.isAutoBattle()) {
this.makeAutoBattleActions();
} else if (this.isConfused()) {
this.makeConfusionActions();
}
};
Game_Actor.prototype.onPlayerWalk = function() {
this.clearResult();
this.checkFloorEffect();
if ($gamePlayer.isNormal()) {
this.turnEndOnMap();
this.states().forEach(function(state) {
this.updateStateSteps(state);
}, this);
this.showAddedStates();
this.showRemovedStates();
}
};
Game_Actor.prototype.updateStateSteps = function(state) {
if (state.removeByWalking) {
if (this._stateSteps[state.id] > 0) {
if (--this._stateSteps[state.id] === 0) {
this.removeState(state.id);
}
}
}
};
Game_Actor.prototype.showAddedStates = function() {
this.result().addedStateObjects().forEach(function(state) {
if (state.message1) {
$gameMessage.add(this._name + state.message1);
}
}, this);
};
Game_Actor.prototype.showRemovedStates = function() {
this.result().removedStateObjects().forEach(function(state) {
if (state.message4) {
$gameMessage.add(this._name + state.message4);
}
}, this);
};
Game_Actor.prototype.stepsForTurn = function() {
return 20;
};
Game_Actor.prototype.turnEndOnMap = function() {
if ($gameParty.steps() % this.stepsForTurn() === 0) {
this.onTurnEnd();
if (this.result().hpDamage > 0) {
this.performMapDamage();
}
}
};
Game_Actor.prototype.checkFloorEffect = function() {
if ($gamePlayer.isOnDamageFloor()) {
this.executeFloorDamage();
}
};
Game_Actor.prototype.executeFloorDamage = function() {
var damage = Math.floor(this.basicFloorDamage() * this.fdr);
damage = Math.min(damage, this.maxFloorDamage());
this.gainHp(-damage);
if (damage > 0) {
this.performMapDamage();
}
};
Game_Actor.prototype.basicFloorDamage = function() {
return 10;
};
Game_Actor.prototype.maxFloorDamage = function() {
return $dataSystem.optFloorDeath ? this.hp : Math.max(this.hp - 1, 0);
};
Game_Actor.prototype.performMapDamage = function() {
if (!$gameParty.inBattle()) {
$gameScreen.startFlashForDamage();
}
};
Game_Actor.prototype.clearActions = function() {
Game_Battler.prototype.clearActions.call(this);
this._actionInputIndex = 0;
};
Game_Actor.prototype.inputtingAction = function() {
return this.action(this._actionInputIndex);
};
Game_Actor.prototype.selectNextCommand = function() {
if (this._actionInputIndex < this.numActions() - 1) {
this._actionInputIndex++;
return true;
} else {
return false;
}
};
Game_Actor.prototype.selectPreviousCommand = function() {
if (this._actionInputIndex > 0) {
this._actionInputIndex--;
return true;
} else {
return false;
}
};
Game_Actor.prototype.lastMenuSkill = function() {
return this._lastMenuSkill.object();
};
Game_Actor.prototype.setLastMenuSkill = function(skill) {
this._lastMenuSkill.setObject(skill);
};
Game_Actor.prototype.lastBattleSkill = function() {
return this._lastBattleSkill.object();
};
Game_Actor.prototype.setLastBattleSkill = function(skill) {
this._lastBattleSkill.setObject(skill);
};
Game_Actor.prototype.lastCommandSymbol = function() {
return this._lastCommandSymbol;
};
Game_Actor.prototype.setLastCommandSymbol = function(symbol) {
this._lastCommandSymbol = symbol;
};
Game_Actor.prototype.testEscape = function(item) {
return item.effects.some(function(effect, index, ar) {
return effect && effect.code === Game_Action.EFFECT_SPECIAL;
});
};
Game_Actor.prototype.meetsUsableItemConditions = function(item) {
if ($gameParty.inBattle() && !BattleManager.canEscape() && this.testEscape(item)) {
return false;
}
return Game_BattlerBase.prototype.meetsUsableItemConditions.call(this, item);
};
//-----------------------------------------------------------------------------
// Game_Enemy
//
// The game object class for an enemy.
function Game_Enemy() {
this.initialize.apply(this, arguments);
}
Game_Enemy.prototype = Object.create(Game_Battler.prototype);
Game_Enemy.prototype.constructor = Game_Enemy;
Game_Enemy.prototype.initialize = function(enemyId, x, y) {
Game_Battler.prototype.initialize.call(this);
this.setup(enemyId, x, y);
};
Game_Enemy.prototype.initMembers = function() {
Game_Battler.prototype.initMembers.call(this);
this._enemyId = 0;
this._letter = '';
this._plural = false;
this._screenX = 0;
this._screenY = 0;
};
Game_Enemy.prototype.setup = function(enemyId, x, y) {
this._enemyId = enemyId;
this._screenX = x;
this._screenY = y;
this.recoverAll();
};
Game_Enemy.prototype.isEnemy = function() {
return true;
};
Game_Enemy.prototype.friendsUnit = function() {
return $gameTroop;
};
Game_Enemy.prototype.opponentsUnit = function() {
return $gameParty;
};
Game_Enemy.prototype.index = function() {
return $gameTroop.members().indexOf(this);
};
Game_Enemy.prototype.isBattleMember = function() {
return this.index() >= 0;
};
Game_Enemy.prototype.enemyId = function() {
return this._enemyId;
};
Game_Enemy.prototype.enemy = function() {
return $dataEnemies[this._enemyId];
};
Game_Enemy.prototype.traitObjects = function() {
return Game_Battler.prototype.traitObjects.call(this).concat(this.enemy());
};
Game_Enemy.prototype.paramBase = function(paramId) {
return this.enemy().params[paramId];
};
Game_Enemy.prototype.exp = function() {
return this.enemy().exp;
};
Game_Enemy.prototype.gold = function() {
return this.enemy().gold;
};
Game_Enemy.prototype.makeDropItems = function() {
return this.enemy().dropItems.reduce(function(r, di) {
if (di.kind > 0 && Math.random() * di.denominator < this.dropItemRate()) {
return r.concat(this.itemObject(di.kind, di.dataId));
} else {
return r;
}
}.bind(this), []);
};
Game_Enemy.prototype.dropItemRate = function() {
return $gameParty.hasDropItemDouble() ? 2 : 1;
};
Game_Enemy.prototype.itemObject = function(kind, dataId) {
if (kind === 1) {
return $dataItems[dataId];
} else if (kind === 2) {
return $dataWeapons[dataId];
} else if (kind === 3) {
return $dataArmors[dataId];
} else {
return null;
}
};
Game_Enemy.prototype.isSpriteVisible = function() {
return true;
};
Game_Enemy.prototype.screenX = function() {
return this._screenX;
};
Game_Enemy.prototype.screenY = function() {
return this._screenY;
};
Game_Enemy.prototype.battlerName = function() {
return this.enemy().battlerName;
};
Game_Enemy.prototype.battlerHue = function() {
return this.enemy().battlerHue;
};
Game_Enemy.prototype.originalName = function() {
return this.enemy().name;
};
Game_Enemy.prototype.name = function() {
return this.originalName() + (this._plural ? this._letter : '');
};
Game_Enemy.prototype.isLetterEmpty = function() {
return this._letter === '';
};
Game_Enemy.prototype.setLetter = function(letter) {
this._letter = letter;
};
Game_Enemy.prototype.setPlural = function(plural) {
this._plural = plural;
};
Game_Enemy.prototype.performActionStart = function(action) {
Game_Battler.prototype.performActionStart.call(this, action);
this.requestEffect('whiten');
};
Game_Enemy.prototype.performAction = function(action) {
Game_Battler.prototype.performAction.call(this, action);
};
Game_Enemy.prototype.performActionEnd = function() {
Game_Battler.prototype.performActionEnd.call(this);
};
Game_Enemy.prototype.performDamage = function() {
Game_Battler.prototype.performDamage.call(this);
SoundManager.playEnemyDamage();
this.requestEffect('blink');
};
Game_Enemy.prototype.performCollapse = function() {
Game_Battler.prototype.performCollapse.call(this);
switch (this.collapseType()) {
case 0:
this.requestEffect('collapse');
SoundManager.playEnemyCollapse();
break;
case 1:
this.requestEffect('bossCollapse');
SoundManager.playBossCollapse1();
break;
case 2:
this.requestEffect('instantCollapse');
break;
}
};
Game_Enemy.prototype.transform = function(enemyId) {
var name = this.originalName();
this._enemyId = enemyId;
if (this.originalName() !== name) {
this._letter = '';
this._plural = false;
}
this.refresh();
if (this.numActions() > 0) {
this.makeActions();
}
};
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');
};
//-----------------------------------------------------------------------------
// Game_Actors
//
// The wrapper class for an actor array.
function Game_Actors() {
this.initialize.apply(this, arguments);
}
Game_Actors.prototype.initialize = function() {
this._data = [];
};
Game_Actors.prototype.actor = function(actorId) {
if ($dataActors[actorId]) {
if (!this._data[actorId]) {
this._data[actorId] = new Game_Actor(actorId);
}
return this._data[actorId];
}
return null;
};
//-----------------------------------------------------------------------------
// Game_Unit
//
// The superclass of Game_Party and Game_Troop.
function Game_Unit() {
this.initialize.apply(this, arguments);
}
Game_Unit.prototype.initialize = function() {
this._inBattle = false;
};
Game_Unit.prototype.inBattle = function() {
return this._inBattle;
};
Game_Unit.prototype.members = function() {
return [];
};
Game_Unit.prototype.aliveMembers = function() {
return this.members().filter(function(member) {
return member.isAlive();
});
};
Game_Unit.prototype.deadMembers = function() {
return this.members().filter(function(member) {
return member.isDead();
});
};
Game_Unit.prototype.movableMembers = function() {
return this.members().filter(function(member) {
return member.canMove();
});
};
Game_Unit.prototype.clearActions = function() {
return this.members().forEach(function(member) {
return member.clearActions();
});
};
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;
};
Game_Unit.prototype.tgrSum = function() {
return this.aliveMembers().reduce(function(r, member) {
return r + member.tgr;
}, 0);
};
Game_Unit.prototype.randomTarget = function() {
var tgrRand = Math.random() * this.tgrSum();
var target = null;
this.aliveMembers().forEach(function(member) {
tgrRand -= member.tgr;
if (tgrRand <= 0 && !target) {
target = member;
}
});
return target;
};
Game_Unit.prototype.randomDeadTarget = function() {
var members = this.deadMembers();
if (members.length === 0) {
return null;
}
return members[Math.floor(Math.random() * members.length)];
};
Game_Unit.prototype.smoothTarget = function(index) {
if (index < 0) {
index = 0;
}
var member = this.members()[index];
return (member && member.isAlive()) ? member : this.aliveMembers()[0];
};
Game_Unit.prototype.smoothDeadTarget = function(index) {
if (index < 0) {
index = 0;
}
var member = this.members()[index];
return (member && member.isDead()) ? member : this.deadMembers()[0];
};
Game_Unit.prototype.clearResults = function() {
this.members().forEach(function(member) {
member.clearResult();
});
};
Game_Unit.prototype.onBattleStart = function() {
this.members().forEach(function(member) {
member.onBattleStart();
});
this._inBattle = true;
};
Game_Unit.prototype.onBattleEnd = function() {
this._inBattle = false;
this.members().forEach(function(member) {
member.onBattleEnd();
});
};
Game_Unit.prototype.makeActions = function() {
this.members().forEach(function(member) {
member.makeActions();
});
};
Game_Unit.prototype.select = function(activeMember) {
this.members().forEach(function(member) {
if (member === activeMember) {
member.select();
} else {
member.deselect();
}
});
};
Game_Unit.prototype.isAllDead = function() {
return this.aliveMembers().length === 0;
};
Game_Unit.prototype.substituteBattler = function() {
var members = this.members();
for (var i = 0; i < members.length; i++) {
if (members[i].isSubstitute()) {
return members[i];
}
}
};
//-----------------------------------------------------------------------------
// Game_Party
//
// The game object class for the party. Information such as gold and items is
// included.
function Game_Party() {
this.initialize.apply(this, arguments);
}
Game_Party.prototype = Object.create(Game_Unit.prototype);
Game_Party.prototype.constructor = Game_Party;
Game_Party.ABILITY_ENCOUNTER_HALF = 0;
Game_Party.ABILITY_ENCOUNTER_NONE = 1;
Game_Party.ABILITY_CANCEL_SURPRISE = 2;
Game_Party.ABILITY_RAISE_PREEMPTIVE = 3;
Game_Party.ABILITY_GOLD_DOUBLE = 4;
Game_Party.ABILITY_DROP_ITEM_DOUBLE = 5;
Game_Party.prototype.initialize = function() {
Game_Unit.prototype.initialize.call(this);
this._gold = 0;
this._steps = 0;
this._lastItem = new Game_Item();
this._menuActorId = 0;
this._targetActorId = 0;
this._actors = [];
this.initAllItems();
};
Game_Party.prototype.initAllItems = function() {
this._items = {};
this._weapons = {};
this._armors = {};
};
Game_Party.prototype.exists = function() {
return this._actors.length > 0;
};
Game_Party.prototype.size = function() {
return this.members().length;
};
Game_Party.prototype.isEmpty = function() {
return this.size() === 0;
};
Game_Party.prototype.members = function() {
return this.inBattle() ? this.battleMembers() : this.allMembers();
};
Game_Party.prototype.allMembers = function() {
return this._actors.map(function(id) {
return $gameActors.actor(id);
});
};
Game_Party.prototype.battleMembers = function() {
return this.allMembers().slice(0, this.maxBattleMembers()).filter(function(actor) {
return actor.isAppeared();
});
};
Game_Party.prototype.maxBattleMembers = function() {
return 4;
};
Game_Party.prototype.leader = function() {
return this.battleMembers()[0];
};
Game_Party.prototype.reviveBattleMembers = function() {
this.battleMembers().forEach(function(actor) {
if (actor.isDead()) {
actor.setHp(1);
}
});
};
Game_Party.prototype.items = function() {
var list = [];
for (var id in this._items) {
list.push($dataItems[id]);
}
return list;
};
Game_Party.prototype.weapons = function() {
var list = [];
for (var id in this._weapons) {
list.push($dataWeapons[id]);
}
return list;
};
Game_Party.prototype.armors = function() {
var list = [];
for (var id in this._armors) {
list.push($dataArmors[id]);
}
return list;
};
Game_Party.prototype.equipItems = function() {
return this.weapons().concat(this.armors());
};
Game_Party.prototype.allItems = function() {
return this.items().concat(this.equipItems());
};
Game_Party.prototype.itemContainer = function(item) {
if (!item) {
return null;
} else if (DataManager.isItem(item)) {
return this._items;
} else if (DataManager.isWeapon(item)) {
return this._weapons;
} else if (DataManager.isArmor(item)) {
return this._armors;
} else {
return null;
}
};
Game_Party.prototype.setupStartingMembers = function() {
this._actors = [];
$dataSystem.partyMembers.forEach(function(actorId) {
if ($gameActors.actor(actorId)) {
this._actors.push(actorId);
}
}, this);
};
Game_Party.prototype.name = function() {
var numBattleMembers = this.battleMembers().length;
if (numBattleMembers === 0) {
return '';
} else if (numBattleMembers === 1) {
return this.leader().name();
} else {
return TextManager.partyName.format(this.leader().name());
}
};
Game_Party.prototype.setupBattleTest = function() {
this.setupBattleTestMembers();
this.setupBattleTestItems();
};
Game_Party.prototype.setupBattleTestMembers = function() {
$dataSystem.testBattlers.forEach(function(battler) {
var actor = $gameActors.actor(battler.actorId);
if (actor) {
actor.changeLevel(battler.level, false);
actor.initEquips(battler.equips);
actor.recoverAll();
this.addActor(battler.actorId);
}
}, this);
};
Game_Party.prototype.setupBattleTestItems = function() {
$dataItems.forEach(function(item) {
if (item && item.name.length > 0) {
this.gainItem(item, this.maxItems(item));
}
}, this);
};
Game_Party.prototype.highestLevel = function() {
return Math.max.apply(null, this.members().map(function(actor) {
return actor.level;
}));
};
Game_Party.prototype.addActor = function(actorId) {
if (!this._actors.contains(actorId)) {
this._actors.push(actorId);
$gamePlayer.refresh();
$gameMap.requestRefresh();
}
};
Game_Party.prototype.removeActor = function(actorId) {
if (this._actors.contains(actorId)) {
this._actors.splice(this._actors.indexOf(actorId), 1);
$gamePlayer.refresh();
$gameMap.requestRefresh();
}
};
Game_Party.prototype.gold = function() {
return this._gold;
};
Game_Party.prototype.gainGold = function(amount) {
this._gold = (this._gold + amount).clamp(0, this.maxGold());
};
Game_Party.prototype.loseGold = function(amount) {
this.gainGold(-amount);
};
Game_Party.prototype.maxGold = function() {
return 99999999;
};
Game_Party.prototype.steps = function() {
return this._steps;
};
Game_Party.prototype.increaseSteps = function() {
this._steps++;
};
Game_Party.prototype.numItems = function(item) {
var container = this.itemContainer(item);
return container ? container[item.id] || 0 : 0;
};
Game_Party.prototype.maxItems = function(item) {
return 99;
};
Game_Party.prototype.hasMaxItems = function(item) {
return this.numItems(item) >= this.maxItems(item);
};
Game_Party.prototype.hasItem = function(item, includeEquip) {
if (includeEquip === undefined) {
includeEquip = false;
}
if (this.numItems(item) > 0) {
return true;
} else if (includeEquip && this.isAnyMemberEquipped(item)) {
return true;
} else {
return false;
}
};
Game_Party.prototype.isAnyMemberEquipped = function(item) {
return this.members().some(function(actor) {
return actor.equips().contains(item);
});
};
Game_Party.prototype.gainItem = function(item, amount, includeEquip) {
var container = this.itemContainer(item);
if (container) {
var lastNumber = this.numItems(item);
var newNumber = lastNumber + amount;
container[item.id] = newNumber.clamp(0, this.maxItems(item));
if (container[item.id] === 0) {
delete container[item.id];
}
if (includeEquip && newNumber < 0) {
this.discardMembersEquip(item, -newNumber);
}
$gameMap.requestRefresh();
}
};
Game_Party.prototype.discardMembersEquip = function(item, amount) {
var n = amount;
this.members().forEach(function(actor) {
while (n > 0 && actor.isEquipped(item)) {
actor.discardEquip(item);
n--;
}
});
};
Game_Party.prototype.loseItem = function(item, amount, includeEquip) {
this.gainItem(item, -amount, includeEquip);
};
Game_Party.prototype.consumeItem = function(item) {
if (DataManager.isItem(item) && item.consumable) {
this.loseItem(item, 1);
}
};
Game_Party.prototype.canUse = function(item) {
return this.members().some(function(actor) {
return actor.canUse(item);
});
};
Game_Party.prototype.canInput = function() {
return this.members().some(function(actor) {
return actor.canInput();
});
};
Game_Party.prototype.isAllDead = function() {
if (Game_Unit.prototype.isAllDead.call(this)) {
return this.inBattle() || !this.isEmpty();
} else {
return false;
}
};
Game_Party.prototype.onPlayerWalk = function() {
this.members().forEach(function(actor) {
return actor.onPlayerWalk();
});
};
Game_Party.prototype.menuActor = function() {
var actor = $gameActors.actor(this._menuActorId);
if (!this.members().contains(actor)) {
actor = this.members()[0];
}
return actor;
};
Game_Party.prototype.setMenuActor = function(actor) {
this._menuActorId = actor.actorId();
};
Game_Party.prototype.makeMenuActorNext = function() {
var index = this.members().indexOf(this.menuActor());
if (index >= 0) {
index = (index + 1) % this.members().length;
this.setMenuActor(this.members()[index]);
} else {
this.setMenuActor(this.members()[0]);
}
};
Game_Party.prototype.makeMenuActorPrevious = function() {
var index = this.members().indexOf(this.menuActor());
if (index >= 0) {
index = (index + this.members().length - 1) % this.members().length;
this.setMenuActor(this.members()[index]);
} else {
this.setMenuActor(this.members()[0]);
}
};
Game_Party.prototype.targetActor = function() {
var actor = $gameActors.actor(this._targetActorId);
if (!this.members().contains(actor)) {
actor = this.members()[0];
}
return actor;
};
Game_Party.prototype.setTargetActor = function(actor) {
this._targetActorId = actor.actorId();
};
Game_Party.prototype.lastItem = function() {
return this._lastItem.object();
};
Game_Party.prototype.setLastItem = function(item) {
this._lastItem.setObject(item);
};
Game_Party.prototype.swapOrder = function(index1, index2) {
var temp = this._actors[index1];
this._actors[index1] = this._actors[index2];
this._actors[index2] = temp;
$gamePlayer.refresh();
};
Game_Party.prototype.charactersForSavefile = function() {
return this.battleMembers().map(function(actor) {
return [actor.characterName(), actor.characterIndex()];
});
};
Game_Party.prototype.facesForSavefile = function() {
return this.battleMembers().map(function(actor) {
return [actor.faceName(), actor.faceIndex()];
});
};
Game_Party.prototype.partyAbility = function(abilityId) {
return this.battleMembers().some(function(actor) {
return actor.partyAbility(abilityId);
});
};
Game_Party.prototype.hasEncounterHalf = function() {
return this.partyAbility(Game_Party.ABILITY_ENCOUNTER_HALF);
};
Game_Party.prototype.hasEncounterNone = function() {
return this.partyAbility(Game_Party.ABILITY_ENCOUNTER_NONE);
};
Game_Party.prototype.hasCancelSurprise = function() {
return this.partyAbility(Game_Party.ABILITY_CANCEL_SURPRISE);
};
Game_Party.prototype.hasRaisePreemptive = function() {
return this.partyAbility(Game_Party.ABILITY_RAISE_PREEMPTIVE);
};
Game_Party.prototype.hasGoldDouble = function() {
return this.partyAbility(Game_Party.ABILITY_GOLD_DOUBLE);
};
Game_Party.prototype.hasDropItemDouble = function() {
return this.partyAbility(Game_Party.ABILITY_DROP_ITEM_DOUBLE);
};
Game_Party.prototype.ratePreemptive = function(troopAgi) {
var rate = this.agility() >= troopAgi ? 0.05 : 0.03;
if (this.hasRaisePreemptive()) {
rate *= 4;
}
return rate;
};
Game_Party.prototype.rateSurprise = function(troopAgi) {
var rate = this.agility() >= troopAgi ? 0.03 : 0.05;
if (this.hasCancelSurprise()) {
rate = 0;
}
return rate;
};
Game_Party.prototype.performVictory = function() {
this.members().forEach(function(actor) {
actor.performVictory();
});
};
Game_Party.prototype.performEscape = function() {
this.members().forEach(function(actor) {
actor.performEscape();
});
};
Game_Party.prototype.removeBattleStates = function() {
this.members().forEach(function(actor) {
actor.removeBattleStates();
});
};
Game_Party.prototype.requestMotionRefresh = function() {
this.members().forEach(function(actor) {
actor.requestMotionRefresh();
});
};
//-----------------------------------------------------------------------------
// Game_Troop
//
// The game object class for a troop and the battle-related data.
function Game_Troop() {
this.initialize.apply(this, arguments);
}
Game_Troop.prototype = Object.create(Game_Unit.prototype);
Game_Troop.prototype.constructor = Game_Troop;
Game_Troop.LETTER_TABLE_HALF = [
' A',' B',' C',' D',' E',' F',' G',' H',' I',' J',' K',' L',' M',
' N',' O',' P',' Q',' R',' S',' T',' U',' V',' W',' X',' Y',' Z'
];
Game_Troop.LETTER_TABLE_FULL = [
'','','','','','','','','','','','','',
'','','','','','','','','','','','',''
];
Game_Troop.prototype.initialize = function() {
Game_Unit.prototype.initialize.call(this);
this._interpreter = new Game_Interpreter();
this.clear();
};
Game_Troop.prototype.isEventRunning = function() {
return this._interpreter.isRunning();
};
Game_Troop.prototype.updateInterpreter = function() {
this._interpreter.update();
};
Game_Troop.prototype.turnCount = function() {
return this._turnCount;
};
Game_Troop.prototype.members = function() {
return this._enemies;
};
Game_Troop.prototype.clear = function() {
this._interpreter.clear();
this._troopId = 0;
this._eventFlags = {};
this._enemies = [];
this._turnCount = 0;
this._namesCount = {};
};
Game_Troop.prototype.troop = function() {
return $dataTroops[this._troopId];
};
Game_Troop.prototype.setup = function(troopId) {
this.clear();
this._troopId = troopId;
this._enemies = [];
this.troop().members.forEach(function(member) {
if ($dataEnemies[member.enemyId]) {
var enemyId = member.enemyId;
var x = member.x;
var y = member.y;
var enemy = new Game_Enemy(enemyId, x, y);
if (member.hidden) {
enemy.hide();
}
this._enemies.push(enemy);
}
}, this);
this.makeUniqueNames();
};
Game_Troop.prototype.makeUniqueNames = function() {
var table = this.letterTable();
this.members().forEach(function(enemy) {
if (enemy.isAlive() && enemy.isLetterEmpty()) {
var name = enemy.originalName();
var n = this._namesCount[name] || 0;
enemy.setLetter(table[n % table.length]);
this._namesCount[name] = n + 1;
}
}, this);
this.members().forEach(function(enemy) {
var name = enemy.originalName();
if (this._namesCount[name] >= 2) {
enemy.setPlural(true);
}
}, this);
};
Game_Troop.prototype.letterTable = function() {
return $gameSystem.isCJK() ? Game_Troop.LETTER_TABLE_FULL :
Game_Troop.LETTER_TABLE_HALF;
};
Game_Troop.prototype.enemyNames = function() {
var names = [];
this.members().forEach(function(enemy) {
var name = enemy.originalName();
if (enemy.isAlive() && !names.contains(name)) {
names.push(name);
}
});
return names;
};
Game_Troop.prototype.meetsConditions = function(page) {
var c = page.conditions;
if (!c.turnEnding && !c.turnValid && !c.enemyValid &&
!c.actorValid && !c.switchValid) {
return false; // Conditions not set
}
if (c.turnEnding) {
if (!BattleManager.isTurnEnd()) {
return false;
}
}
if (c.turnValid) {
var n = this._turnCount;
var a = c.turnA;
var b = c.turnB;
if ((b === 0 && n !== a)) {
return false;
}
if ((b > 0 && (n < 1 || n < a || n % b !== a % b))) {
return false;
}
}
if (c.enemyValid) {
var enemy = $gameTroop.members()[c.enemyIndex];
if (!enemy || enemy.hpRate() * 100 > c.enemyHp) {
return false;
}
}
if (c.actorValid) {
var actor = $gameActors.actor(c.actorId);
if (!actor || actor.hpRate() * 100 > c.actorHp) {
return false;
}
}
if (c.switchValid) {
if (!$gameSwitches.value(c.switchId)) {
return false;
}
}
return true;
};
Game_Troop.prototype.setupBattleEvent = function() {
if (!this._interpreter.isRunning()) {
if (this._interpreter.setupReservedCommonEvent()) {
return;
}
var pages = this.troop().pages;
for (var i = 0; i < pages.length; i++) {
var page = pages[i];
if (this.meetsConditions(page) && !this._eventFlags[i]) {
this._interpreter.setup(page.list);
if (page.span <= 1) {
this._eventFlags[i] = true;
}
break;
}
}
}
};
Game_Troop.prototype.increaseTurn = function() {
var pages = this.troop().pages;
for (var i = 0; i < pages.length; i++) {
var page = pages[i];
if (page.span === 1) {
this._eventFlags[i] = false;
}
}
this._turnCount++;
};
Game_Troop.prototype.expTotal = function() {
return this.deadMembers().reduce(function(r, enemy) {
return r + enemy.exp();
}, 0);
};
Game_Troop.prototype.goldTotal = function() {
return this.deadMembers().reduce(function(r, enemy) {
return r + enemy.gold();
}, 0) * this.goldRate();
};
Game_Troop.prototype.goldRate = function() {
return $gameParty.hasGoldDouble() ? 2 : 1;
};
Game_Troop.prototype.makeDropItems = function() {
return this.deadMembers().reduce(function(r, enemy) {
return r.concat(enemy.makeDropItems());
}, []);
};
//-----------------------------------------------------------------------------
// Game_Map
//
// The game object class for a map. It contains scrolling and passage
// determination functions.
function Game_Map() {
this.initialize.apply(this, arguments);
}
Game_Map.prototype.initialize = function() {
this._interpreter = new Game_Interpreter();
this._mapId = 0;
this._tilesetId = 0;
this._events = [];
this._commonEvents = [];
this._vehicles = [];
this._displayX = 0;
this._displayY = 0;
this._nameDisplay = true;
this._scrollDirection = 2;
this._scrollRest = 0;
this._scrollSpeed = 4;
this._parallaxName = '';
this._parallaxZero = false;
this._parallaxLoopX = false;
this._parallaxLoopY = false;
this._parallaxSx = 0;
this._parallaxSy = 0;
this._parallaxX = 0;
this._parallaxY = 0;
this._battleback1Name = null;
this._battleback2Name = null;
this.createVehicles();
};
Game_Map.prototype.setup = function(mapId) {
if (!$dataMap) {
throw new Error('The map data is not available');
}
this._mapId = mapId;
this._tilesetId = $dataMap.tilesetId;
this._displayX = 0;
this._displayY = 0;
this.refereshVehicles();
this.setupEvents();
this.setupScroll();
this.setupParallax();
this.setupBattleback();
this._needsRefresh = false;
};
Game_Map.prototype.isEventRunning = function() {
return this._interpreter.isRunning() || this.isAnyEventStarting();
};
Game_Map.prototype.tileWidth = function() {
return 48;
};
Game_Map.prototype.tileHeight = function() {
return 48;
};
Game_Map.prototype.mapId = function() {
return this._mapId;
};
Game_Map.prototype.tilesetId = function() {
return this._tilesetId;
};
Game_Map.prototype.displayX = function() {
return this._displayX;
};
Game_Map.prototype.displayY = function() {
return this._displayY;
};
Game_Map.prototype.parallaxName = function() {
return this._parallaxName;
};
Game_Map.prototype.battleback1Name = function() {
return this._battleback1Name;
};
Game_Map.prototype.battleback2Name = function() {
return this._battleback2Name;
};
Game_Map.prototype.requestRefresh = function(mapId) {
this._needsRefresh = true;
};
Game_Map.prototype.isNameDisplayEnabled = function() {
return this._nameDisplay;
};
Game_Map.prototype.disableNameDisplay = function() {
this._nameDisplay = false;
};
Game_Map.prototype.enableNameDisplay = function() {
this._nameDisplay = true;
};
Game_Map.prototype.createVehicles = function() {
this._vehicles = [];
this._vehicles[0] = new Game_Vehicle('boat');
this._vehicles[1] = new Game_Vehicle('ship');
this._vehicles[2] = new Game_Vehicle('airship');
};
Game_Map.prototype.refereshVehicles = function() {
this._vehicles.forEach(function(vehicle) {
vehicle.refresh();
});
};
Game_Map.prototype.vehicles = function() {
return this._vehicles;
};
Game_Map.prototype.vehicle = function(type) {
if (type === 0 || type === 'boat') {
return this.boat();
} else if (type === 1 || type === 'ship') {
return this.ship();
} else if (type === 2 || type === 'airship') {
return this.airship();
} else {
return null;
}
};
Game_Map.prototype.boat = function() {
return this._vehicles[0];
};
Game_Map.prototype.ship = function() {
return this._vehicles[1];
};
Game_Map.prototype.airship = function() {
return this._vehicles[2];
};
Game_Map.prototype.setupEvents = function() {
this._events = [];
for (var i = 0; i < $dataMap.events.length; i++) {
if ($dataMap.events[i]) {
this._events[i] = new Game_Event(this._mapId, i);
}
}
this._commonEvents = this.parallelCommonEvents().map(function(commonEvent) {
return new Game_CommonEvent(commonEvent.id);
});
this.refreshTileEvents();
};
Game_Map.prototype.events = function() {
return this._events.filter(function(event) {
return !!event;
});
};
Game_Map.prototype.event = function(eventId) {
return this._events[eventId];
};
Game_Map.prototype.eraseEvent = function(eventId) {
this._events[eventId].erase();
};
Game_Map.prototype.parallelCommonEvents = function() {
return $dataCommonEvents.filter(function(commonEvent) {
return commonEvent && commonEvent.trigger === 2;
});
};
Game_Map.prototype.setupScroll = function() {
this._scrollDirection = 2;
this._scrollRest = 0;
this._scrollSpeed = 4;
};
Game_Map.prototype.setupParallax = function() {
this._parallaxName = $dataMap.parallaxName || '';
this._parallaxZero = ImageManager.isZeroParallax(this._parallaxName);
this._parallaxLoopX = $dataMap.parallaxLoopX;
this._parallaxLoopY = $dataMap.parallaxLoopY;
this._parallaxSx = $dataMap.parallaxSx;
this._parallaxSy = $dataMap.parallaxSy;
this._parallaxX = 0;
this._parallaxY = 0;
};
Game_Map.prototype.setupBattleback = function() {
if ($dataMap.specifyBattleback) {
this._battleback1Name = $dataMap.battleback1Name;
this._battleback2Name = $dataMap.battleback2Name;
} else {
this._battleback1Name = null;
this._battleback2Name = null;
}
};
Game_Map.prototype.setDisplayPos = function(x, y) {
if (this.isLoopHorizontal()) {
this._displayX = x.mod(this.width());
this._parallaxX = x;
} else {
var endX = this.width() - this.screenTileX();
this._displayX = endX < 0 ? endX / 2 : x.clamp(0, endX);
this._parallaxX = this._displayX;
}
if (this.isLoopVertical()) {
this._displayY = y.mod(this.height());
this._parallaxY = y;
} else {
var endY = this.height() - this.screenTileY();
this._displayY = endY < 0 ? endY / 2 : y.clamp(0, endY);
this._parallaxY = this._displayY;
}
};
Game_Map.prototype.parallaxOx = function() {
if (this._parallaxZero) {
return this._parallaxX * this.tileWidth();
} else if (this._parallaxLoopX) {
return this._parallaxX * this.tileWidth() / 2;
} else {
return 0;
}
};
Game_Map.prototype.parallaxOy = function() {
if (this._parallaxZero) {
return this._parallaxY * this.tileHeight();
} else if (this._parallaxLoopY) {
return this._parallaxY * this.tileHeight() / 2;
} else {
return 0;
}
};
Game_Map.prototype.tileset = function() {
return $dataTilesets[this._tilesetId];
};
Game_Map.prototype.tilesetFlags = function() {
var tileset = this.tileset();
if (tileset) {
return tileset.flags;
} else {
return [];
}
};
Game_Map.prototype.displayName = function() {
return $dataMap.displayName;
};
Game_Map.prototype.width = function() {
return $dataMap.width;
};
Game_Map.prototype.height = function() {
return $dataMap.height;
};
Game_Map.prototype.data = function() {
return $dataMap.data;
};
Game_Map.prototype.isLoopHorizontal = function() {
return $dataMap.scrollType === 2 || $dataMap.scrollType === 3;
};
Game_Map.prototype.isLoopVertical = function() {
return $dataMap.scrollType === 1 || $dataMap.scrollType === 3;
};
Game_Map.prototype.isDashDisabled = function() {
return $dataMap.disableDashing;
};
Game_Map.prototype.encounterList = function() {
return $dataMap.encounterList;
};
Game_Map.prototype.encounterStep = function() {
return $dataMap.encounterStep;
};
Game_Map.prototype.isOverworld = function() {
return this.tileset() && this.tileset().mode === 0;
};
Game_Map.prototype.screenTileX = function() {
return Graphics.width / this.tileWidth();
};
Game_Map.prototype.screenTileY = function() {
return Graphics.height / this.tileHeight();
};
Game_Map.prototype.adjustX = function(x) {
if (this.isLoopHorizontal() && x < this._displayX -
(this.width() - this.screenTileX()) / 2) {
return x - this._displayX + $dataMap.width;
} else {
return x - this._displayX;
}
};
Game_Map.prototype.adjustY = function(y) {
if (this.isLoopVertical() && y < this._displayY -
(this.height() - this.screenTileY()) / 2) {
return y - this._displayY + $dataMap.height;
} else {
return y - this._displayY;
}
};
Game_Map.prototype.roundX = function(x) {
return this.isLoopHorizontal() ? x.mod(this.width()) : x;
};
Game_Map.prototype.roundY = function(y) {
return this.isLoopVertical() ? y.mod(this.height()) : y;
};
Game_Map.prototype.xWithDirection = function(x, d) {
return x + (d === 6 ? 1 : d === 4 ? -1 : 0);
};
Game_Map.prototype.yWithDirection = function(y, d) {
return y + (d === 2 ? 1 : d === 8 ? -1 : 0);
};
Game_Map.prototype.roundXWithDirection = function(x, d) {
return this.roundX(x + (d === 6 ? 1 : d === 4 ? -1 : 0));
};
Game_Map.prototype.roundYWithDirection = function(y, d) {
return this.roundY(y + (d === 2 ? 1 : d === 8 ? -1 : 0));
};
Game_Map.prototype.deltaX = function(x1, x2) {
var result = x1 - x2;
if (this.isLoopHorizontal() && Math.abs(result) > this.width() / 2) {
if (result < 0) {
result += this.width();
} else {
result -= this.width();
}
}
return result;
};
Game_Map.prototype.deltaY = function(y1, y2) {
var result = y1 - y2;
if (this.isLoopVertical() && Math.abs(result) > this.height() / 2) {
if (result < 0) {
result += this.height();
} else {
result -= this.height();
}
}
return result;
};
Game_Map.prototype.distance = function(x1, y1, x2, y2) {
return Math.abs(this.deltaX(x1, x2)) + Math.abs(this.deltaY(y1, y2));
};
Game_Map.prototype.canvasToMapX = function(x) {
var tileWidth = this.tileWidth();
var originX = this._displayX * tileWidth;
var mapX = Math.floor((originX + x) / tileWidth);
return this.roundX(mapX);
};
Game_Map.prototype.canvasToMapY = function(y) {
var tileHeight = this.tileHeight();
var originY = this._displayY * tileHeight;
var mapY = Math.floor((originY + y) / tileHeight);
return this.roundY(mapY);
};
Game_Map.prototype.autoplay = function() {
if ($dataMap.autoplayBgm) {
if ($gamePlayer.isInVehicle()) {
$gameSystem.saveWalkingBgm2();
} else {
AudioManager.playBgm($dataMap.bgm);
}
}
if ($dataMap.autoplayBgs) {
AudioManager.playBgs($dataMap.bgs);
}
};
Game_Map.prototype.refreshIfNeeded = function() {
if (this._needsRefresh) {
this.refresh();
}
};
Game_Map.prototype.refresh = function() {
this.events().forEach(function(event) {
event.refresh();
});
this._commonEvents.forEach(function(event) {
event.refresh();
});
this.refreshTileEvents();
this._needsRefresh = false;
};
Game_Map.prototype.refreshTileEvents = function() {
this.tileEvents = this.events().filter(function(event) {
return event.isTile();
});
};
Game_Map.prototype.eventsXy = function(x, y) {
return this.events().filter(function(event) {
return event.pos(x, y);
});
};
Game_Map.prototype.eventsXyNt = function(x, y) {
return this.events().filter(function(event) {
return event.posNt(x, y);
});
};
Game_Map.prototype.tileEventsXy = function(x, y) {
return this.tileEvents.filter(function(event) {
return event.posNt(x, y);
});
};
Game_Map.prototype.eventIdXy = function(x, y) {
var list = this.eventsXy(x, y);
return list.length === 0 ? 0 : list[0].eventId();
};
Game_Map.prototype.scrollDown = function(distance) {
if (this.isLoopVertical()) {
this._displayY += distance;
this._displayY %= $dataMap.height;
if (this._parallaxLoopY) {
this._parallaxY += distance;
}
} else if (this.height() >= this.screenTileY()) {
var lastY = this._displayY;
this._displayY = Math.min(this._displayY + distance,
this.height() - this.screenTileY());
this._parallaxY += this._displayY - lastY;
}
};
Game_Map.prototype.scrollLeft = function(distance) {
if (this.isLoopHorizontal()) {
this._displayX += $dataMap.width - distance;
this._displayX %= $dataMap.width;
if (this._parallaxLoopX) {
this._parallaxX -= distance;
}
} else if (this.width() >= this.screenTileX()) {
var lastX = this._displayX;
this._displayX = Math.max(this._displayX - distance, 0);
this._parallaxX += this._displayX - lastX;
}
};
Game_Map.prototype.scrollRight = function(distance) {
if (this.isLoopHorizontal()) {
this._displayX += distance;
this._displayX %= $dataMap.width;
if (this._parallaxLoopX) {
this._parallaxX += distance;
}
} else if (this.width() >= this.screenTileX()) {
var lastX = this._displayX;
this._displayX = Math.min(this._displayX + distance,
this.width() - this.screenTileX());
this._parallaxX += this._displayX - lastX;
}
};
Game_Map.prototype.scrollUp = function(distance) {
if (this.isLoopVertical()) {
this._displayY += $dataMap.height - distance;
this._displayY %= $dataMap.height;
if (this._parallaxLoopY) {
this._parallaxY -= distance;
}
} else if (this.height() >= this.screenTileY()) {
var lastY = this._displayY;
this._displayY = Math.max(this._displayY - distance, 0);
this._parallaxY += this._displayY - lastY;
}
};
Game_Map.prototype.isValid = function(x, y) {
return x >= 0 && x < this.width() && y >= 0 && y < this.height();
};
Game_Map.prototype.checkPassage = function(x, y, bit) {
var flags = this.tilesetFlags();
var tiles = this.allTiles(x, y);
for (var i = 0; i < tiles.length; i++) {
var flag = flags[tiles[i]];
if ((flag & 0x10) !== 0) // [*] No effect on passage
continue;
if ((flag & bit) === 0) // [o] Passable
return true;
if ((flag & bit) === bit) // [x] Impassable
return false;
}
return false;
};
Game_Map.prototype.tileId = function(x, y, z) {
var width = $dataMap.width;
var height = $dataMap.height;
return $dataMap.data[(z * height + y) * width + x] || 0;
};
Game_Map.prototype.layeredTiles = function(x, y) {
var tiles = [];
for (var i = 0; i < 4; i++) {
tiles.push(this.tileId(x, y, 3 - i));
}
return tiles;
};
Game_Map.prototype.allTiles = function(x, y) {
var tiles = this.tileEventsXy(x, y).map(function(event) {
return event.tileId();
});
return tiles.concat(this.layeredTiles(x, y));
};
Game_Map.prototype.autotileType = function(x, y, z) {
var tileId = this.tileId(x, y, z);
return tileId >= 2048 ? Math.floor((tileId - 2048) / 48) : -1;
};
Game_Map.prototype.isPassable = function(x, y, d) {
return this.checkPassage(x, y, (1 << (d / 2 - 1)) & 0x0f);
};
Game_Map.prototype.isBoatPassable = function(x, y) {
return this.checkPassage(x, y, 0x0200);
};
Game_Map.prototype.isShipPassable = function(x, y) {
return this.checkPassage(x, y, 0x0400);
};
Game_Map.prototype.isAirshipLandOk = function(x, y) {
return this.checkPassage(x, y, 0x0800) && this.checkPassage(x, y, 0x0f);
};
Game_Map.prototype.checkLayeredTilesFlags = function(x, y, bit) {
var flags = this.tilesetFlags();
return this.layeredTiles(x, y).some(function(tileId) {
return (flags[tileId] & bit) !== 0;
});
};
Game_Map.prototype.isLadder = function(x, y) {
return this.isValid(x, y) && this.checkLayeredTilesFlags(x, y, 0x20);
};
Game_Map.prototype.isBush = function(x, y) {
return this.isValid(x, y) && this.checkLayeredTilesFlags(x, y, 0x40);
};
Game_Map.prototype.isCounter = function(x, y) {
return this.isValid(x, y) && this.checkLayeredTilesFlags(x, y, 0x80);
};
Game_Map.prototype.isDamageFloor = function(x, y) {
return this.isValid(x, y) && this.checkLayeredTilesFlags(x, y, 0x100);
};
Game_Map.prototype.terrainTag = function(x, y) {
if (this.isValid(x, y)) {
var flags = this.tilesetFlags();
var tiles = this.layeredTiles(x, y);
for (var i = 0; i < tiles.length; i++) {
var tag = flags[tiles[i]] >> 12;
if (tag > 0) {
return tag;
}
}
}
return 0;
};
Game_Map.prototype.regionId = function(x, y) {
return this.isValid(x, y) ? this.tileId(x, y, 5) : 0;
};
Game_Map.prototype.startScroll = function(direction, distance, speed) {
this._scrollDirection = direction;
this._scrollRest = distance;
this._scrollSpeed = speed;
};
Game_Map.prototype.isScrolling = function() {
return this._scrollRest > 0;
};
Game_Map.prototype.update = function(sceneActive) {
this.refreshIfNeeded();
if (sceneActive) {
this.updateInterpreter();
}
this.updateScroll();
this.updateEvents();
this.updateVehicles();
this.updateParallax();
};
Game_Map.prototype.updateScroll = function() {
if (this.isScrolling()) {
var lastX = this._displayX;
var lastY = this._displayY;
this.doScroll(this._scrollDirection, this.scrollDistance());
if (this._displayX === lastX && this._displayY === lastY) {
this._scrollRest = 0;
} else {
this._scrollRest -= this.scrollDistance();
}
}
};
Game_Map.prototype.scrollDistance = function() {
return Math.pow(2, this._scrollSpeed) / 256;
};
Game_Map.prototype.doScroll = function(direction, distance) {
switch (direction) {
case 2:
this.scrollDown(distance);
break;
case 4:
this.scrollLeft(distance);
break;
case 6:
this.scrollRight(distance);
break;
case 8:
this.scrollUp(distance);
break;
}
};
Game_Map.prototype.updateEvents = function() {
this.events().forEach(function(event) {
event.update();
});
this._commonEvents.forEach(function(event) {
event.update();
});
};
Game_Map.prototype.updateVehicles = function() {
this._vehicles.forEach(function(vehicle) {
vehicle.update();
});
};
Game_Map.prototype.updateParallax = function() {
if (this._parallaxLoopX) {
this._parallaxX += this._parallaxSx / this.tileWidth() / 2;
}
if (this._parallaxLoopY) {
this._parallaxY += this._parallaxSy / this.tileHeight() / 2;
}
};
Game_Map.prototype.changeTileset = function(tilesetId) {
this._tilesetId = tilesetId;
this.refresh();
};
Game_Map.prototype.changeBattleback = function(battleback1Name, battleback2Name) {
this._battleback1Name = battleback1Name;
this._battleback2Name = battleback2Name;
};
Game_Map.prototype.changeParallax = function(name, loopX, loopY, sx, sy) {
this._parallaxName = name;
this._parallaxZero = ImageManager.isZeroParallax(this._parallaxName);
if (this._parallaxLoopX && !loopX) {
this._parallaxX = 0;
}
if (this._parallaxLoopY && !loopY) {
this._parallaxY = 0;
}
this._parallaxLoopX = loopX;
this._parallaxLoopY = loopY;
this._parallaxSx = sx;
this._parallaxSy = sy;
};
Game_Map.prototype.updateInterpreter = function() {
for (;;) {
this._interpreter.update();
if (this._interpreter.isRunning()) {
return;
}
if (this._interpreter.eventId() > 0) {
this.unlockEvent(this._interpreter.eventId());
this._interpreter.clear();
}
if (!this.setupStartingEvent()) {
return;
}
}
};
Game_Map.prototype.unlockEvent = function(eventId) {
if (this._events[eventId]) {
this._events[eventId].unlock();
}
};
Game_Map.prototype.setupStartingEvent = function() {
this.refreshIfNeeded();
if (this._interpreter.setupReservedCommonEvent()) {
return true;
}
if (this.setupTestEvent()) {
return true;
}
if (this.setupStartingMapEvent()) {
return true;
}
if (this.setupAutorunCommonEvent()) {
return true;
}
return false;
};
Game_Map.prototype.setupTestEvent = function() {
if ($testEvent) {
this._interpreter.setup($testEvent, 0);
$testEvent = null;
return true;
}
return false;
};
Game_Map.prototype.setupStartingMapEvent = function() {
var events = this.events();
for (var i = 0; i < events.length; i++) {
var event = events[i];
if (event.isStarting()) {
event.clearStartingFlag();
this._interpreter.setup(event.list(), event.eventId());
return true;
}
}
return false;
};
Game_Map.prototype.setupAutorunCommonEvent = function() {
for (var i = 0; i < $dataCommonEvents.length; i++) {
var event = $dataCommonEvents[i];
if (event && event.trigger === 1 && $gameSwitches.value(event.switchId)) {
this._interpreter.setup(event.list);
return true;
}
}
return false;
};
Game_Map.prototype.isAnyEventStarting = function() {
return this.events().some(function(event) {
return event.isStarting();
});
};
//-----------------------------------------------------------------------------
// Game_CommonEvent
//
// The game object class for a common event. It contains functionality for
// running parallel process events.
function Game_CommonEvent() {
this.initialize.apply(this, arguments);
}
Game_CommonEvent.prototype.initialize = function(commonEventId) {
this._commonEventId = commonEventId;
this.refresh();
};
Game_CommonEvent.prototype.event = function() {
return $dataCommonEvents[this._commonEventId];
};
Game_CommonEvent.prototype.list = function() {
return this.event().list;
};
Game_CommonEvent.prototype.refresh = function() {
if (this.isActive()) {
if (!this._interpreter) {
this._interpreter = new Game_Interpreter();
}
} else {
this._interpreter = null;
}
};
Game_CommonEvent.prototype.isActive = function() {
var event = this.event();
return event.trigger === 2 && $gameSwitches.value(event.switchId);
};
Game_CommonEvent.prototype.update = function() {
if (this._interpreter) {
if (!this._interpreter.isRunning()) {
this._interpreter.setup(this.list());
}
this._interpreter.update();
}
};
//-----------------------------------------------------------------------------
// Game_CharacterBase
//
// The superclass of Game_Character. It handles basic information, such as
// coordinates and images, shared by all characters.
function Game_CharacterBase() {
this.initialize.apply(this, arguments);
}
Object.defineProperties(Game_CharacterBase.prototype, {
x: { get: function() { return this._x; }, configurable: true },
y: { get: function() { return this._y; }, configurable: true }
});
Game_CharacterBase.prototype.initialize = function() {
this.initMembers();
};
Game_CharacterBase.prototype.initMembers = function() {
this._x = 0;
this._y = 0;
this._realX = 0;
this._realY = 0;
this._moveSpeed = 4;
this._moveFrequency = 6;
this._opacity = 255;
this._blendMode = 0;
this._direction = 2;
this._pattern = 1;
this._priorityType = 1;
this._tileId = 0;
this._characterName = '';
this._characterIndex = 0;
this._isObjectCharacter = false;
this._walkAnime = true;
this._stepAnime = false;
this._directionFix = false;
this._through = false;
this._transparent = false;
this._bushDepth = 0;
this._animationId = 0;
this._balloonId = 0;
this._animationPlaying = false;
this._balloonPlaying = false;
this._animationCount = 0;
this._stopCount = 0;
this._jumpCount = 0;
this._jumpPeak = 0;
this._movementSuccess = true;
};
Game_CharacterBase.prototype.pos = function(x, y) {
return this._x === x && this._y === y;
};
Game_CharacterBase.prototype.posNt = function(x, y) {
// No through
return this.pos(x, y) && !this.isThrough();
};
Game_CharacterBase.prototype.moveSpeed = function() {
return this._moveSpeed;
};
Game_CharacterBase.prototype.setMoveSpeed = function(moveSpeed) {
this._moveSpeed = moveSpeed;
};
Game_CharacterBase.prototype.moveFrequency = function() {
return this._moveFrequency;
};
Game_CharacterBase.prototype.setMoveFrequency = function(moveFrequency) {
this._moveFrequency = moveFrequency;
};
Game_CharacterBase.prototype.opacity = function() {
return this._opacity;
};
Game_CharacterBase.prototype.setOpacity = function(opacity) {
this._opacity = opacity;
};
Game_CharacterBase.prototype.blendMode = function() {
return this._blendMode;
};
Game_CharacterBase.prototype.setBlendMode = function(blendMode) {
this._blendMode = blendMode;
};
Game_CharacterBase.prototype.isNormalPriority = function() {
return this._priorityType === 1;
};
Game_CharacterBase.prototype.setPriorityType = function(priorityType) {
this._priorityType = priorityType;
};
Game_CharacterBase.prototype.isMoving = function() {
return this._realX !== this._x || this._realY !== this._y;
};
Game_CharacterBase.prototype.isJumping = function() {
return this._jumpCount > 0;
};
Game_CharacterBase.prototype.jumpHeight = function() {
return (this._jumpPeak * this._jumpPeak -
Math.pow(Math.abs(this._jumpCount - this._jumpPeak), 2)) / 2;
};
Game_CharacterBase.prototype.isStopping = function() {
return !this.isMoving() && !this.isJumping();
};
Game_CharacterBase.prototype.checkStop = function(threshold) {
return this._stopCount > threshold;
};
Game_CharacterBase.prototype.resetStopCount = function() {
this._stopCount = 0;
};
Game_CharacterBase.prototype.realMoveSpeed = function() {
return this._moveSpeed + (this.isDashing() ? 1 : 0);
};
Game_CharacterBase.prototype.distancePerFrame = function() {
return Math.pow(2, this.realMoveSpeed()) / 256;
};
Game_CharacterBase.prototype.isDashing = function() {
return false;
};
Game_CharacterBase.prototype.isDebugThrough = function() {
return false;
};
Game_CharacterBase.prototype.straighten = function() {
if (this.hasWalkAnime() || this.hasStepAnime()) {
this._pattern = 1;
}
this._animationCount = 0;
};
Game_CharacterBase.prototype.reverseDir = function(d) {
return 10 - d;
};
Game_CharacterBase.prototype.canPass = function(x, y, d) {
var x2 = $gameMap.roundXWithDirection(x, d);
var y2 = $gameMap.roundYWithDirection(y, d);
if (!$gameMap.isValid(x2, y2)) {
return false;
}
if (this.isThrough() || this.isDebugThrough()) {
return true;
}
if (!this.isMapPassable(x, y, d)) {
return false;
}
if (this.isCollidedWithCharacters(x2, y2)) {
return false;
}
return true;
};
Game_CharacterBase.prototype.canPassDiagonally = function(x, y, horz, vert) {
var x2 = $gameMap.roundXWithDirection(x, horz);
var y2 = $gameMap.roundYWithDirection(y, vert);
if (this.canPass(x, y, vert) && this.canPass(x, y2, horz)) {
return true;
}
if (this.canPass(x, y, horz) && this.canPass(x2, y, vert)) {
return true;
}
return false;
};
Game_CharacterBase.prototype.isMapPassable = function(x, y, d) {
var x2 = $gameMap.roundXWithDirection(x, d);
var y2 = $gameMap.roundYWithDirection(y, d);
var d2 = this.reverseDir(d);
return $gameMap.isPassable(x, y, d) && $gameMap.isPassable(x2, y2, d2);
};
Game_CharacterBase.prototype.isCollidedWithCharacters = function(x, y) {
return this.isCollidedWithEvents(x, y) || this.isCollidedWithVehicles(x, y);
};
Game_CharacterBase.prototype.isCollidedWithEvents = function(x, y) {
var events = $gameMap.eventsXyNt(x, y);
return events.some(function(event) {
return event.isNormalPriority();
});
};
Game_CharacterBase.prototype.isCollidedWithVehicles = function(x, y) {
return $gameMap.boat().posNt(x, y) || $gameMap.ship().posNt(x, y);
};
Game_CharacterBase.prototype.setPosition = function(x, y) {
this._x = Math.round(x);
this._y = Math.round(y);
this._realX = x;
this._realY = y;
};
Game_CharacterBase.prototype.copyPosition = function(character) {
this._x = character._x;
this._y = character._y;
this._realX = character._realX;
this._realY = character._realY;
this._direction = character._direction;
};
Game_CharacterBase.prototype.locate = function(x, y) {
this.setPosition(x, y);
this.straighten();
this.refreshBushDepth();
};
Game_CharacterBase.prototype.direction = function() {
return this._direction;
};
Game_CharacterBase.prototype.setDirection = function(d) {
if (!this.isDirectionFixed() && d) {
this._direction = d;
}
this.resetStopCount();
};
Game_CharacterBase.prototype.isTile = function() {
return this._tileId > 0 && this._priorityType === 0;
};
Game_CharacterBase.prototype.isObjectCharacter = function() {
return this._isObjectCharacter;
};
Game_CharacterBase.prototype.shiftY = function() {
return this.isObjectCharacter() ? 0 : 6;
};
Game_CharacterBase.prototype.scrolledX = function() {
return $gameMap.adjustX(this._realX);
};
Game_CharacterBase.prototype.scrolledY = function() {
return $gameMap.adjustY(this._realY);
};
Game_CharacterBase.prototype.screenX = function() {
var tw = $gameMap.tileWidth();
return Math.round(this.scrolledX() * tw + tw / 2);
};
Game_CharacterBase.prototype.screenY = function() {
var th = $gameMap.tileHeight();
return Math.round(this.scrolledY() * th + th -
this.shiftY() - this.jumpHeight());
};
Game_CharacterBase.prototype.screenZ = function() {
return this._priorityType * 2 + 1;
};
Game_CharacterBase.prototype.isNearTheScreen = function() {
var gw = Graphics.width;
var gh = Graphics.height;
var tw = $gameMap.tileWidth();
var th = $gameMap.tileHeight();
var px = this.scrolledX() * tw + tw / 2 - gw / 2;
var py = this.scrolledY() * th + th / 2 - gh / 2;
return px >= -gw && px <= gw && py >= -gh && py <= gh;
};
Game_CharacterBase.prototype.update = function() {
if (this.isStopping()) {
this.updateStop();
}
if (this.isJumping()) {
this.updateJump();
} else if (this.isMoving()) {
this.updateMove();
}
this.updateAnimation();
};
Game_CharacterBase.prototype.updateStop = function() {
this._stopCount++;
};
Game_CharacterBase.prototype.updateJump = function() {
this._jumpCount--;
this._realX = (this._realX * this._jumpCount + this._x) / (this._jumpCount + 1.0);
this._realY = (this._realY * this._jumpCount + this._y) / (this._jumpCount + 1.0);
this.refreshBushDepth();
if (this._jumpCount === 0) {
this._realX = this._x = $gameMap.roundX(this._x);
this._realY = this._y = $gameMap.roundY(this._y);
}
};
Game_CharacterBase.prototype.updateMove = function() {
if (this._x < this._realX) {
this._realX = Math.max(this._realX - this.distancePerFrame(), this._x);
}
if (this._x > this._realX) {
this._realX = Math.min(this._realX + this.distancePerFrame(), this._x);
}
if (this._y < this._realY) {
this._realY = Math.max(this._realY - this.distancePerFrame(), this._y);
}
if (this._y > this._realY) {
this._realY = Math.min(this._realY + this.distancePerFrame(), this._y);
}
if (!this.isMoving()) {
this.refreshBushDepth();
}
};
Game_CharacterBase.prototype.updateAnimation = function() {
this.updateAnimationCount();
if (this._animationCount >= this.animationWait()) {
this.updatePattern();
this._animationCount = 0;
}
};
Game_CharacterBase.prototype.animationWait = function() {
return (9 - this.realMoveSpeed()) * 3;
};
Game_CharacterBase.prototype.updateAnimationCount = function() {
if (this.isMoving() && this.hasWalkAnime()) {
this._animationCount += 1.5;
} else if (this.hasStepAnime() || !this.isOriginalPattern()) {
this._animationCount++;
}
};
Game_CharacterBase.prototype.updatePattern = function() {
if (!this.hasStepAnime() && this._stopCount > 0) {
this.resetPattern();
} else {
this._pattern = (this._pattern + 1) % this.maxPattern();
}
};
Game_CharacterBase.prototype.maxPattern = function() {
return 4;
};
Game_CharacterBase.prototype.pattern = function() {
return this._pattern < 3 ? this._pattern : 1;
};
Game_CharacterBase.prototype.setPattern = function(pattern) {
this._pattern = pattern;
};
Game_CharacterBase.prototype.isOriginalPattern = function() {
return this.pattern() === 1;
};
Game_CharacterBase.prototype.resetPattern = function() {
this.setPattern(1);
};
Game_CharacterBase.prototype.refreshBushDepth = function() {
if (this.isNormalPriority() && !this.isObjectCharacter() &&
this.isOnBush() && !this.isJumping()) {
if (!this.isMoving()) {
this._bushDepth = 12;
}
} else {
this._bushDepth = 0;
}
};
Game_CharacterBase.prototype.isOnLadder = function() {
return $gameMap.isLadder(this._x, this._y);
};
Game_CharacterBase.prototype.isOnBush = function() {
return $gameMap.isBush(this._x, this._y);
};
Game_CharacterBase.prototype.terrainTag = function() {
return $gameMap.terrainTag(this._x, this._y);
};
Game_CharacterBase.prototype.regionId = function() {
return $gameMap.regionId(this._x, this._y);
};
Game_CharacterBase.prototype.increaseSteps = function() {
if (this.isOnLadder()) {
this.setDirection(8);
}
this.resetStopCount();
this.refreshBushDepth();
};
Game_CharacterBase.prototype.tileId = function() {
return this._tileId;
};
Game_CharacterBase.prototype.characterName = function() {
return this._characterName;
};
Game_CharacterBase.prototype.characterIndex = function() {
return this._characterIndex;
};
Game_CharacterBase.prototype.setImage = function(characterName, characterIndex) {
this._tileId = 0;
this._characterName = characterName;
this._characterIndex = characterIndex;
this._isObjectCharacter = ImageManager.isObjectCharacter(characterName);
};
Game_CharacterBase.prototype.setTileImage = function(tileId) {
this._tileId = tileId;
this._characterName = '';
this._characterIndex = 0;
this._isObjectCharacter = true;
};
Game_CharacterBase.prototype.checkEventTriggerTouchFront = function(d) {
var x2 = $gameMap.roundXWithDirection(this._x, d);
var y2 = $gameMap.roundYWithDirection(this._y, d);
this.checkEventTriggerTouch(x2, y2);
};
Game_CharacterBase.prototype.checkEventTriggerTouch = function(x, y) {
return false;
};
Game_CharacterBase.prototype.isMovementSucceeded = function(x, y) {
return this._movementSuccess;
};
Game_CharacterBase.prototype.setMovementSuccess = function(success) {
this._movementSuccess = success;
};
Game_CharacterBase.prototype.moveStraight = function(d) {
this.setMovementSuccess(this.canPass(this._x, this._y, d));
if (this.isMovementSucceeded()) {
this.setDirection(d);
this._x = $gameMap.roundXWithDirection(this._x, d);
this._y = $gameMap.roundYWithDirection(this._y, d);
this._realX = $gameMap.xWithDirection(this._x, this.reverseDir(d));
this._realY = $gameMap.yWithDirection(this._y, this.reverseDir(d));
this.increaseSteps();
} else {
this.setDirection(d);
this.checkEventTriggerTouchFront(d);
}
};
Game_CharacterBase.prototype.moveDiagonally = function(horz, vert) {
this.setMovementSuccess(this.canPassDiagonally(this._x, this._y, horz, vert));
if (this.isMovementSucceeded()) {
this._x = $gameMap.roundXWithDirection(this._x, horz);
this._y = $gameMap.roundYWithDirection(this._y, vert);
this._realX = $gameMap.xWithDirection(this._x, this.reverseDir(horz));
this._realY = $gameMap.yWithDirection(this._y, this.reverseDir(vert));
this.increaseSteps();
}
if (this._direction === this.reverseDir(horz)) {
this.setDirection(horz);
}
if (this._direction === this.reverseDir(vert)) {
this.setDirection(vert);
}
};
Game_CharacterBase.prototype.jump = function(xPlus, yPlus) {
if (Math.abs(xPlus) > Math.abs(yPlus)) {
if (xPlus !== 0) {
this.setDirection(xPlus < 0 ? 4 : 6);
}
} else {
if (yPlus !== 0) {
this.setDirection(yPlus < 0 ? 8 : 2);
}
}
this._x += xPlus;
this._y += yPlus;
var distance = Math.round(Math.sqrt(xPlus * xPlus + yPlus * yPlus));
this._jumpPeak = 10 + distance - this._moveSpeed;
this._jumpCount = this._jumpPeak * 2;
this.resetStopCount();
this.straighten();
};
Game_CharacterBase.prototype.hasWalkAnime = function() {
return this._walkAnime;
};
Game_CharacterBase.prototype.setWalkAnime = function(walkAnime) {
this._walkAnime = walkAnime;
};
Game_CharacterBase.prototype.hasStepAnime = function() {
return this._stepAnime;
};
Game_CharacterBase.prototype.setStepAnime = function(stepAnime) {
this._stepAnime = stepAnime;
};
Game_CharacterBase.prototype.isDirectionFixed = function() {
return this._directionFix;
};
Game_CharacterBase.prototype.setDirectionFix = function(directionFix) {
this._directionFix = directionFix;
};
Game_CharacterBase.prototype.isThrough = function() {
return this._through;
};
Game_CharacterBase.prototype.setThrough = function(through) {
this._through = through;
};
Game_CharacterBase.prototype.isTransparent = function() {
return this._transparent;
};
Game_CharacterBase.prototype.bushDepth = function() {
return this._bushDepth;
};
Game_CharacterBase.prototype.setTransparent = function(transparent) {
this._transparent = transparent;
};
Game_CharacterBase.prototype.requestAnimation = function(animationId) {
this._animationId = animationId;
};
Game_CharacterBase.prototype.requestBalloon = function(balloonId) {
this._balloonId = balloonId;
};
Game_CharacterBase.prototype.animationId = function() {
return this._animationId;
};
Game_CharacterBase.prototype.balloonId = function() {
return this._balloonId;
};
Game_CharacterBase.prototype.startAnimation = function() {
this._animationId = 0;
this._animationPlaying = true;
};
Game_CharacterBase.prototype.startBalloon = function() {
this._balloonId = 0;
this._balloonPlaying = true;
};
Game_CharacterBase.prototype.isAnimationPlaying = function() {
return this._animationId > 0 || this._animationPlaying;
};
Game_CharacterBase.prototype.isBalloonPlaying = function() {
return this._balloonId > 0 || this._balloonPlaying;
};
Game_CharacterBase.prototype.endAnimation = function() {
this._animationPlaying = false;
};
Game_CharacterBase.prototype.endBalloon = function() {
this._balloonPlaying = false;
};
//-----------------------------------------------------------------------------
// Game_Character
//
// The superclass of Game_Player, Game_Follower, GameVehicle, and Game_Event.
function Game_Character() {
this.initialize.apply(this, arguments);
}
Game_Character.prototype = Object.create(Game_CharacterBase.prototype);
Game_Character.prototype.constructor = Game_Character;
Game_Character.ROUTE_END = 0;
Game_Character.ROUTE_MOVE_DOWN = 1;
Game_Character.ROUTE_MOVE_LEFT = 2;
Game_Character.ROUTE_MOVE_RIGHT = 3;
Game_Character.ROUTE_MOVE_UP = 4;
Game_Character.ROUTE_MOVE_LOWER_L = 5;
Game_Character.ROUTE_MOVE_LOWER_R = 6;
Game_Character.ROUTE_MOVE_UPPER_L = 7;
Game_Character.ROUTE_MOVE_UPPER_R = 8;
Game_Character.ROUTE_MOVE_RANDOM = 9;
Game_Character.ROUTE_MOVE_TOWARD = 10;
Game_Character.ROUTE_MOVE_AWAY = 11;
Game_Character.ROUTE_MOVE_FORWARD = 12;
Game_Character.ROUTE_MOVE_BACKWARD = 13;
Game_Character.ROUTE_JUMP = 14;
Game_Character.ROUTE_WAIT = 15;
Game_Character.ROUTE_TURN_DOWN = 16;
Game_Character.ROUTE_TURN_LEFT = 17;
Game_Character.ROUTE_TURN_RIGHT = 18;
Game_Character.ROUTE_TURN_UP = 19;
Game_Character.ROUTE_TURN_90D_R = 20;
Game_Character.ROUTE_TURN_90D_L = 21;
Game_Character.ROUTE_TURN_180D = 22;
Game_Character.ROUTE_TURN_90D_R_L = 23;
Game_Character.ROUTE_TURN_RANDOM = 24;
Game_Character.ROUTE_TURN_TOWARD = 25;
Game_Character.ROUTE_TURN_AWAY = 26;
Game_Character.ROUTE_SWITCH_ON = 27;
Game_Character.ROUTE_SWITCH_OFF = 28;
Game_Character.ROUTE_CHANGE_SPEED = 29;
Game_Character.ROUTE_CHANGE_FREQ = 30;
Game_Character.ROUTE_WALK_ANIME_ON = 31;
Game_Character.ROUTE_WALK_ANIME_OFF = 32;
Game_Character.ROUTE_STEP_ANIME_ON = 33;
Game_Character.ROUTE_STEP_ANIME_OFF = 34;
Game_Character.ROUTE_DIR_FIX_ON = 35;
Game_Character.ROUTE_DIR_FIX_OFF = 36;
Game_Character.ROUTE_THROUGH_ON = 37;
Game_Character.ROUTE_THROUGH_OFF = 38;
Game_Character.ROUTE_TRANSPARENT_ON = 39;
Game_Character.ROUTE_TRANSPARENT_OFF = 40;
Game_Character.ROUTE_CHANGE_IMAGE = 41;
Game_Character.ROUTE_CHANGE_OPACITY = 42;
Game_Character.ROUTE_CHANGE_BLEND_MODE = 43;
Game_Character.ROUTE_PLAY_SE = 44;
Game_Character.ROUTE_SCRIPT = 45;
Game_Character.prototype.initialize = function() {
Game_CharacterBase.prototype.initialize.call(this);
};
Game_Character.prototype.initMembers = function() {
Game_CharacterBase.prototype.initMembers.call(this);
this._moveRouteForcing = false;
this._moveRoute = null;
this._moveRouteIndex = 0;
this._originalMoveRoute = null;
this._originalMoveRouteIndex = 0;
this._waitCount = 0;
};
Game_Character.prototype.memorizeMoveRoute = function() {
this._originalMoveRoute = this._moveRoute;
this._originalMoveRouteIndex = this._moveRouteIndex;
};
Game_Character.prototype.restoreMoveRoute = function() {
this._moveRoute = this._originalMoveRoute;
this._moveRouteIndex = this._originalMoveRouteIndex;
this._originalMoveRoute = null;
};
Game_Character.prototype.isMoveRouteForcing = function() {
return this._moveRouteForcing;
};
Game_Character.prototype.setMoveRoute = function(moveRoute) {
this._moveRoute = moveRoute;
this._moveRouteIndex = 0;
this._moveRouteForcing = false;
};
Game_Character.prototype.forceMoveRoute = function(moveRoute) {
if (!this._originalMoveRoute) {
this.memorizeMoveRoute();
}
this._moveRoute = moveRoute;
this._moveRouteIndex = 0;
this._moveRouteForcing = true;
this._waitCount = 0;
};
Game_Character.prototype.updateStop = function() {
Game_CharacterBase.prototype.updateStop.call(this);
if (this._moveRouteForcing) {
this.updateRoutineMove();
}
};
Game_Character.prototype.updateRoutineMove = function() {
if (this._waitCount > 0) {
this._waitCount--;
} else {
this.setMovementSuccess(true);
var command = this._moveRoute.list[this._moveRouteIndex];
if (command) {
this.processMoveCommand(command);
this.advanceMoveRouteIndex();
}
}
};
Game_Character.prototype.processMoveCommand = function(command) {
var gc = Game_Character;
var params = command.parameters;
switch (command.code) {
case gc.ROUTE_END:
this.processRouteEnd();
break;
case gc.ROUTE_MOVE_DOWN:
this.moveStraight(2);
break;
case gc.ROUTE_MOVE_LEFT:
this.moveStraight(4);
break;
case gc.ROUTE_MOVE_RIGHT:
this.moveStraight(6);
break;
case gc.ROUTE_MOVE_UP:
this.moveStraight(8);
break;
case gc.ROUTE_MOVE_LOWER_L:
this.moveDiagonally(4, 2);
break;
case gc.ROUTE_MOVE_LOWER_R:
this.moveDiagonally(6, 2);
break;
case gc.ROUTE_MOVE_UPPER_L:
this.moveDiagonally(4, 8);
break;
case gc.ROUTE_MOVE_UPPER_R:
this.moveDiagonally(6, 8);
break;
case gc.ROUTE_MOVE_RANDOM:
this.moveRandom();
break;
case gc.ROUTE_MOVE_TOWARD:
this.moveTowardPlayer();
break;
case gc.ROUTE_MOVE_AWAY:
this.moveAwayFromPlayer();
break;
case gc.ROUTE_MOVE_FORWARD:
this.moveForward();
break;
case gc.ROUTE_MOVE_BACKWARD:
this.moveBackward();
break;
case gc.ROUTE_JUMP:
this.jump(params[0], params[1]);
break;
case gc.ROUTE_WAIT:
this._waitCount = params[0] - 1;
break;
case gc.ROUTE_TURN_DOWN:
this.setDirection(2);
break;
case gc.ROUTE_TURN_LEFT:
this.setDirection(4);
break;
case gc.ROUTE_TURN_RIGHT:
this.setDirection(6);
break;
case gc.ROUTE_TURN_UP:
this.setDirection(8);
break;
case gc.ROUTE_TURN_90D_R:
this.turnRight90();
break;
case gc.ROUTE_TURN_90D_L:
this.turnLeft90();
break;
case gc.ROUTE_TURN_180D:
this.turn180();
break;
case gc.ROUTE_TURN_90D_R_L:
this.turnRightOrLeft90();
break;
case gc.ROUTE_TURN_RANDOM:
this.turnRandom();
break;
case gc.ROUTE_TURN_TOWARD:
this.turnTowardPlayer();
break;
case gc.ROUTE_TURN_AWAY:
this.turnAwayFromPlayer();
break;
case gc.ROUTE_SWITCH_ON:
$gameSwitches.setValue(params[0], true);
break;
case gc.ROUTE_SWITCH_OFF:
$gameSwitches.setValue(params[0], false);
break;
case gc.ROUTE_CHANGE_SPEED:
this.setMoveSpeed(params[0]);
break;
case gc.ROUTE_CHANGE_FREQ:
this.setMoveFrequency(params[0]);
break;
case gc.ROUTE_WALK_ANIME_ON:
this.setWalkAnime(true);
break;
case gc.ROUTE_WALK_ANIME_OFF:
this.setWalkAnime(false);
break;
case gc.ROUTE_STEP_ANIME_ON:
this.setStepAnime(true);
break;
case gc.ROUTE_STEP_ANIME_OFF:
this.setStepAnime(false);
break;
case gc.ROUTE_DIR_FIX_ON:
this.setDirectionFix(true);
break;
case gc.ROUTE_DIR_FIX_OFF:
this.setDirectionFix(false);
break;
case gc.ROUTE_THROUGH_ON:
this.setThrough(true);
break;
case gc.ROUTE_THROUGH_OFF:
this.setThrough(false);
break;
case gc.ROUTE_TRANSPARENT_ON:
this.setTransparent(true);
break;
case gc.ROUTE_TRANSPARENT_OFF:
this.setTransparent(false);
break;
case gc.ROUTE_CHANGE_IMAGE:
this.setImage(params[0], params[1]);
break;
case gc.ROUTE_CHANGE_OPACITY:
this.setOpacity(params[0]);
break;
case gc.ROUTE_CHANGE_BLEND_MODE:
this.setBlendMode(params[0]);
break;
case gc.ROUTE_PLAY_SE:
AudioManager.playSe(params[0]);
break;
case gc.ROUTE_SCRIPT:
eval(params[0]);
break;
}
};
Game_Character.prototype.deltaXFrom = function(x) {
return $gameMap.deltaX(this.x, x);
};
Game_Character.prototype.deltaYFrom = function(y) {
return $gameMap.deltaY(this.y, y);
};
Game_Character.prototype.moveRandom = function() {
var d = 2 + Math.randomInt(4) * 2;
if (this.canPass(this.x, this.y, d)) {
this.moveStraight(d);
}
};
Game_Character.prototype.moveTowardCharacter = function(character) {
var sx = this.deltaXFrom(character.x);
var sy = this.deltaYFrom(character.y);
if (Math.abs(sx) > Math.abs(sy)) {
this.moveStraight(sx > 0 ? 4 : 6);
if (!this.isMovementSucceeded() && sy !== 0) {
this.moveStraight(sy > 0 ? 8 : 2);
}
} else if (sy !== 0) {
this.moveStraight(sy > 0 ? 8 : 2);
if (!this.isMovementSucceeded() && sx !== 0) {
this.moveStraight(sx > 0 ? 4 : 6);
}
}
};
Game_Character.prototype.moveAwayFromCharacter = function(character) {
var sx = this.deltaXFrom(character.x);
var sy = this.deltaYFrom(character.y);
if (Math.abs(sx) > Math.abs(sy)) {
this.moveStraight(sx > 0 ? 6 : 4);
if (!this.isMovementSucceeded() && sy !== 0) {
this.moveStraight(sy > 0 ? 2 : 8);
}
} else if (sy !== 0) {
this.moveStraight(sy > 0 ? 2 : 8);
if (!this.isMovementSucceeded() && sx !== 0) {
this.moveStraight(sx > 0 ? 6 : 4);
}
}
};
Game_Character.prototype.turnTowardCharacter = function(character) {
var sx = this.deltaXFrom(character.x);
var sy = this.deltaYFrom(character.y);
if (Math.abs(sx) > Math.abs(sy)) {
this.setDirection(sx > 0 ? 4 : 6);
} else if (sy !== 0) {
this.setDirection(sy > 0 ? 8 : 2);
}
};
Game_Character.prototype.turnAwayFromCharacter = function(character) {
var sx = this.deltaXFrom(character.x);
var sy = this.deltaYFrom(character.y);
if (Math.abs(sx) > Math.abs(sy)) {
this.setDirection(sx > 0 ? 6 : 4);
} else if (sy !== 0) {
this.setDirection(sy > 0 ? 2 : 8);
}
};
Game_Character.prototype.turnTowardPlayer = function() {
this.turnTowardCharacter($gamePlayer);
};
Game_Character.prototype.turnAwayFromPlayer = function() {
this.turnAwayFromCharacter($gamePlayer);
};
Game_Character.prototype.moveTowardPlayer = function() {
this.moveTowardCharacter($gamePlayer);
};
Game_Character.prototype.moveAwayFromPlayer = function() {
this.moveAwayFromCharacter($gamePlayer);
};
Game_Character.prototype.moveForward = function() {
this.moveStraight(this.direction());
};
Game_Character.prototype.moveBackward = function() {
var lastDirectionFix = this.isDirectionFixed();
this.setDirectionFix(true);
this.moveStraight(this.reverseDir(this.direction()));
this.setDirectionFix(lastDirectionFix);
};
Game_Character.prototype.processRouteEnd = function() {
if (this._moveRoute.repeat) {
this._moveRouteIndex = -1;
} else if (this._moveRouteForcing) {
this._moveRouteForcing = false;
this.restoreMoveRoute();
}
};
Game_Character.prototype.advanceMoveRouteIndex = function() {
var moveRoute = this._moveRoute;
if (moveRoute && (this.isMovementSucceeded() || moveRoute.skippable)) {
var numCommands = moveRoute.list.length - 1;
this._moveRouteIndex++;
if (moveRoute.repeat && this._moveRouteIndex >= numCommands) {
this._moveRouteIndex = 0;
}
}
};
Game_Character.prototype.turnRight90 = function() {
switch (this.direction()) {
case 2:
this.setDirection(4);
break;
case 4:
this.setDirection(8);
break;
case 6:
this.setDirection(2);
break;
case 8:
this.setDirection(6);
break;
}
};
Game_Character.prototype.turnLeft90 = function() {
switch (this.direction()) {
case 2:
this.setDirection(6);
break;
case 4:
this.setDirection(2);
break;
case 6:
this.setDirection(8);
break;
case 8:
this.setDirection(4);
break;
}
};
Game_Character.prototype.turn180 = function() {
this.setDirection(this.reverseDir(this.direction()));
};
Game_Character.prototype.turnRightOrLeft90 = function() {
switch (Math.randomInt(2)) {
case 0:
this.turnRight90();
break;
case 1:
this.turnLeft90();
break;
}
};
Game_Character.prototype.turnRandom = function() {
this.setDirection(2 + Math.randomInt(4) * 2);
};
Game_Character.prototype.swap = function(character) {
var newX = character.x;
var newY = character.y;
character.locate(this.x, this.y);
this.locate(newX, newY);
};
Game_Character.prototype.findDirectionTo = function(goalX, goalY) {
var searchLimit = this.searchLimit();
var mapWidth = $gameMap.width();
var nodeList = [];
var openList = [];
var closedList = [];
var start = {};
var best = start;
if (this.x === goalX && this.y === goalY) {
return 0;
}
start.parent = null;
start.x = this.x;
start.y = this.y;
start.g = 0;
start.f = $gameMap.distance(start.x, start.y, goalX, goalY);
nodeList.push(start);
openList.push(start.y * mapWidth + start.x);
while (nodeList.length > 0) {
var bestIndex = 0;
for (var i = 0; i < nodeList.length; i++) {
if (nodeList[i].f < nodeList[bestIndex].f) {
bestIndex = i;
}
}
var current = nodeList[bestIndex];
var x1 = current.x;
var y1 = current.y;
var pos1 = y1 * mapWidth + x1;
var g1 = current.g;
nodeList.splice(bestIndex, 1);
openList.splice(openList.indexOf(pos1), 1);
closedList.push(pos1);
if (current.x === goalX && current.y === goalY) {
best = current;
break;
}
if (g1 >= searchLimit) {
continue;
}
for (var j = 0; j < 4; j++) {
var direction = 2 + j * 2;
var x2 = $gameMap.roundXWithDirection(x1, direction);
var y2 = $gameMap.roundYWithDirection(y1, direction);
var pos2 = y2 * mapWidth + x2;
if (closedList.contains(pos2)) {
continue;
}
if (!this.canPass(x1, y1, direction)) {
continue;
}
var g2 = g1 + 1;
var index2 = openList.indexOf(pos2);
if (index2 < 0 || g2 < nodeList[index2].g) {
var neighbor;
if (index2 >= 0) {
neighbor = nodeList[index2];
} else {
neighbor = {};
nodeList.push(neighbor);
openList.push(pos2);
}
neighbor.parent = current;
neighbor.x = x2;
neighbor.y = y2;
neighbor.g = g2;
neighbor.f = g2 + $gameMap.distance(x2, y2, goalX, goalY);
if (!best || neighbor.f - neighbor.g < best.f - best.g) {
best = neighbor;
}
}
}
}
var node = best;
while (node.parent && node.parent !== start) {
node = node.parent;
}
var deltaX1 = $gameMap.deltaX(node.x, start.x);
var deltaY1 = $gameMap.deltaY(node.y, start.y);
if (deltaY1 > 0) {
return 2;
} else if (deltaX1 < 0) {
return 4;
} else if (deltaX1 > 0) {
return 6;
} else if (deltaY1 < 0) {
return 8;
}
var deltaX2 = this.deltaXFrom(goalX);
var deltaY2 = this.deltaYFrom(goalY);
if (Math.abs(deltaX2) > Math.abs(deltaY2)) {
return deltaX2 > 0 ? 4 : 6;
} else if (deltaY2 !== 0) {
return deltaY2 > 0 ? 8 : 2;
}
return 0;
};
Game_Character.prototype.searchLimit = function() {
return 12;
};
//-----------------------------------------------------------------------------
// Game_Player
//
// The game object class for the player. It contains event starting
// determinants and map scrolling functions.
function Game_Player() {
this.initialize.apply(this, arguments);
}
Game_Player.prototype = Object.create(Game_Character.prototype);
Game_Player.prototype.constructor = Game_Player;
Game_Player.prototype.initialize = function() {
Game_Character.prototype.initialize.call(this);
this.setTransparent($dataSystem.optTransparent);
};
Game_Player.prototype.initMembers = function() {
Game_Character.prototype.initMembers.call(this);
this._vehicleType = 'walk';
this._vehicleGettingOn = false;
this._vehicleGettingOff = false;
this._dashing = false;
this._needsMapReload = false;
this._transferring = false;
this._newMapId = 0;
this._newX = 0;
this._newY = 0;
this._newDirection = 0;
this._fadeType = 0;
this._followers = new Game_Followers();
this._encounterCount = 0;
};
Game_Player.prototype.clearTransferInfo = function() {
this._transferring = false;
this._newMapId = 0;
this._newX = 0;
this._newY = 0;
this._newDirection = 0;
};
Game_Player.prototype.followers = function() {
return this._followers;
};
Game_Player.prototype.refresh = function() {
var actor = $gameParty.leader();
var characterName = actor ? actor.characterName() : '';
var characterIndex = actor ? actor.characterIndex() : 0;
this.setImage(characterName, characterIndex);
this._followers.refresh();
};
Game_Player.prototype.isStopping = function() {
if (this._vehicleGettingOn || this._vehicleGettingOff) {
return false;
}
return Game_Character.prototype.isStopping.call(this);
};
Game_Player.prototype.reserveTransfer = function(mapId, x, y, d, fadeType) {
this._transferring = true;
this._newMapId = mapId;
this._newX = x;
this._newY = y;
this._newDirection = d;
this._fadeType = fadeType;
};
Game_Player.prototype.requestMapReload = function() {
this._needsMapReload = true;
};
Game_Player.prototype.isTransferring = function() {
return this._transferring;
};
Game_Player.prototype.newMapId = function() {
return this._newMapId;
};
Game_Player.prototype.fadeType = function() {
return this._fadeType;
};
Game_Player.prototype.performTransfer = function() {
if (this.isTransferring()) {
this.setDirection(this._newDirection);
if (this._newMapId !== $gameMap.mapId() || this._needsMapReload) {
$gameMap.setup(this._newMapId);
this._needsMapReload = false;
}
this.locate(this._newX, this._newY);
this.refresh();
this.clearTransferInfo();
}
};
Game_Player.prototype.isMapPassable = function(x, y, d) {
var vehicle = this.vehicle();
if (vehicle) {
return vehicle.isMapPassable(x, y, d);
} else {
return Game_Character.prototype.isMapPassable.call(this, x, y, d);
}
};
Game_Player.prototype.vehicle = function() {
return $gameMap.vehicle(this._vehicleType);
};
Game_Player.prototype.isInBoat = function() {
return this._vehicleType === 'boat';
};
Game_Player.prototype.isInShip = function() {
return this._vehicleType === 'ship';
};
Game_Player.prototype.isInAirship = function() {
return this._vehicleType === 'airship';
};
Game_Player.prototype.isInVehicle = function() {
return this.isInBoat() || this.isInShip() || this.isInAirship();
};
Game_Player.prototype.isNormal = function() {
return this._vehicleType === 'walk' && !this.isMoveRouteForcing();
};
Game_Player.prototype.isDashing = function() {
return this._dashing;
};
Game_Player.prototype.isDebugThrough = function() {
return Input.isPressed('control') && $gameTemp.isPlaytest();
};
Game_Player.prototype.isCollided = function(x, y) {
if (this.isThrough()) {
return false;
} else {
return this.pos(x, y) || this._followers.isSomeoneCollided(x, y);
}
};
Game_Player.prototype.centerX = function() {
return (Graphics.width / $gameMap.tileWidth() - 1) / 2.0;
};
Game_Player.prototype.centerY = function() {
return (Graphics.height / $gameMap.tileHeight() - 1) / 2.0;
};
Game_Player.prototype.center = function(x, y) {
return $gameMap.setDisplayPos(x - this.centerX(), y - this.centerY());
};
Game_Player.prototype.locate = function(x, y) {
Game_Character.prototype.locate.call(this, x, y);
this.center(x, y);
this.makeEncounterCount();
if (this.isInVehicle()) {
this.vehicle().refresh();
}
this._followers.synchronize(x, y, this.direction());
};
Game_Player.prototype.increaseSteps = function() {
Game_Character.prototype.increaseSteps.call(this);
if (this.isNormal()) {
$gameParty.increaseSteps();
}
};
Game_Player.prototype.makeEncounterCount = function() {
var n = $gameMap.encounterStep();
this._encounterCount = Math.randomInt(n) + Math.randomInt(n) + 1;
};
Game_Player.prototype.makeEncounterTroopId = function() {
var encounterList = [];
var weightSum = 0;
$gameMap.encounterList().forEach(function(encounter) {
if (this.meetsEncounterConditions(encounter)) {
encounterList.push(encounter);
weightSum += encounter.weight;
}
}, this);
if (weightSum > 0) {
var value = Math.randomInt(weightSum);
for (var i = 0; i < encounterList.length; i++) {
value -= encounterList[i].weight;
if (value < 0) {
return encounterList[i].troopId;
}
}
}
return 0;
};
Game_Player.prototype.meetsEncounterConditions = function(encounter) {
return (encounter.regionSet.length === 0 ||
encounter.regionSet.contains(this.regionId()));
};
Game_Player.prototype.executeEncounter = function() {
if (!$gameMap.isEventRunning() && this._encounterCount <= 0) {
this.makeEncounterCount();
var troopId = this.makeEncounterTroopId();
if ($dataTroops[troopId]) {
BattleManager.setup(troopId, true, false);
BattleManager.onEncounter();
return true;
} else {
return false;
}
} else {
return false;
}
};
Game_Player.prototype.startMapEvent = function(x, y, triggers, normal) {
if (!$gameMap.isEventRunning()) {
$gameMap.eventsXy(x, y).forEach(function(event) {
if (event.isTriggerIn(triggers) && event.isNormalPriority() === normal) {
event.start();
}
});
}
};
Game_Player.prototype.moveByInput = function() {
if (!this.isMoving() && this.canMove()) {
var direction = this.getInputDirection();
if (direction > 0) {
$gameTemp.clearDestination();
} else if ($gameTemp.isDestinationValid()){
var x = $gameTemp.destinationX();
var y = $gameTemp.destinationY();
direction = this.findDirectionTo(x, y);
}
if (direction > 0) {
this.executeMove(direction);
}
}
};
Game_Player.prototype.canMove = function() {
if ($gameMap.isEventRunning() || $gameMessage.isBusy()) {
return false;
}
if (this.isMoveRouteForcing() || this.areFollowersGathering()) {
return false;
}
if (this._vehicleGettingOn || this._vehicleGettingOff) {
return false;
}
if (this.isInVehicle() && !this.vehicle().canMove()) {
return false;
}
return true;
};
Game_Player.prototype.getInputDirection = function() {
return Input.dir4;
};
Game_Player.prototype.executeMove = function(direction) {
this.moveStraight(direction);
};
Game_Player.prototype.update = function(sceneActive) {
var lastScrolledX = this.scrolledX();
var lastScrolledY = this.scrolledY();
var wasMoving = this.isMoving();
this.updateDashing();
if (sceneActive) {
this.moveByInput();
}
Game_Character.prototype.update.call(this);
this.updateScroll(lastScrolledX, lastScrolledY);
this.updateVehicle();
if (!this.isMoving()) {
this.updateNonmoving(wasMoving);
}
this._followers.update();
};
Game_Player.prototype.updateDashing = function() {
if (this.isMoving()) {
return;
}
if (this.canMove() && !this.isInVehicle() && !$gameMap.isDashDisabled()) {
this._dashing = this.isDashButtonPressed() || $gameTemp.isDestinationValid();
} else {
this._dashing = false;
}
};
Game_Player.prototype.isDashButtonPressed = function() {
var shift = Input.isPressed('shift');
if (ConfigManager.alwaysDash) {
return !shift;
} else {
return shift;
}
};
Game_Player.prototype.updateScroll = function(lastScrolledX, lastScrolledY) {
var x1 = lastScrolledX;
var y1 = lastScrolledY;
var x2 = this.scrolledX();
var y2 = this.scrolledY();
if (y2 > y1 && y2 > this.centerY()) {
$gameMap.scrollDown(y2 - y1);
}
if (x2 < x1 && x2 < this.centerX()) {
$gameMap.scrollLeft(x1 - x2);
}
if (x2 > x1 && x2 > this.centerX()) {
$gameMap.scrollRight(x2 - x1);
}
if (y2 < y1 && y2 < this.centerY()) {
$gameMap.scrollUp(y1 - y2);
}
};
Game_Player.prototype.updateVehicle = function() {
if (this.isInVehicle() && !this.areFollowersGathering()) {
if (this._vehicleGettingOn) {
this.updateVehicleGetOn();
} else if (this._vehicleGettingOff) {
this.updateVehicleGetOff();
} else {
this.vehicle().syncWithPlayer();
}
}
};
Game_Player.prototype.updateVehicleGetOn = function() {
if (!this.areFollowersGathering() && !this.isMoving()) {
this.setDirection(this.vehicle().direction());
this.setMoveSpeed(this.vehicle().moveSpeed());
this._vehicleGettingOn = false;
this.setTransparent(true);
if (this.isInAirship()) {
this.setThrough(true);
}
this.vehicle().getOn();
}
};
Game_Player.prototype.updateVehicleGetOff = function() {
if (!this.areFollowersGathering() && this.vehicle().isLowest()) {
this._vehicleGettingOff = false;
this._vehicleType = 'walk';
this.setTransparent(false);
}
};
Game_Player.prototype.updateNonmoving = function(wasMoving) {
if (!$gameMap.isEventRunning()) {
if (wasMoving) {
$gameParty.onPlayerWalk();
this.checkEventTriggerHere([1,2]);
if ($gameMap.setupStartingEvent()) {
return;
}
}
if (this.triggerAction()) {
return;
}
if (wasMoving) {
this.updateEncounterCount();
} else {
$gameTemp.clearDestination();
}
}
};
Game_Player.prototype.triggerAction = function() {
if (this.canMove()) {
if (this.triggerButtonAction()) {
return true;
}
if (this.triggerTouchAction()) {
return true;
}
}
return false;
};
Game_Player.prototype.triggerButtonAction = function() {
if (Input.isTriggered('ok')) {
if (this.getOnOffVehicle()) {
return true;
}
this.checkEventTriggerHere([0]);
if ($gameMap.setupStartingEvent()) {
return true;
}
this.checkEventTriggerThere([0,1,2]);
if ($gameMap.setupStartingEvent()) {
return true;
}
}
return false;
};
Game_Player.prototype.triggerTouchAction = function() {
if ($gameTemp.isDestinationValid()){
var direction = this.direction();
var x1 = this.x;
var y1 = this.y;
var x2 = $gameMap.roundXWithDirection(x1, direction);
var y2 = $gameMap.roundYWithDirection(y1, direction);
var x3 = $gameMap.roundXWithDirection(x2, direction);
var y3 = $gameMap.roundYWithDirection(y2, direction);
var destX = $gameTemp.destinationX();
var destY = $gameTemp.destinationY();
if (destX === x1 && destY === y1) {
return this.triggerTouchActionD1(x1, y1);
} else if (destX === x2 && destY === y2) {
return this.triggerTouchActionD2(x2, y2);
} else if (destX === x3 && destY === y3) {
return this.triggerTouchActionD3(x2, y2);
}
}
return false;
};
Game_Player.prototype.triggerTouchActionD1 = function(x1, y1) {
if ($gameMap.airship().pos(x1, y1)) {
if (TouchInput.isTriggered() && this.getOnOffVehicle()) {
return true;
}
}
this.checkEventTriggerHere([0]);
return $gameMap.setupStartingEvent();
};
Game_Player.prototype.triggerTouchActionD2 = function(x2, y2) {
if ($gameMap.boat().pos(x2, y2) || $gameMap.ship().pos(x2, y2)) {
if (TouchInput.isTriggered() && this.getOnVehicle()) {
return true;
}
}
if (this.isInBoat() || this.isInShip()) {
if (TouchInput.isTriggered() && this.getOffVehicle()) {
return true;
}
}
this.checkEventTriggerThere([0,1,2]);
return $gameMap.setupStartingEvent();
};
Game_Player.prototype.triggerTouchActionD3 = function(x2, y2) {
if ($gameMap.isCounter(x2, y2)) {
this.checkEventTriggerThere([0,1,2]);
}
return $gameMap.setupStartingEvent();
};
Game_Player.prototype.updateEncounterCount = function() {
if (this.canEncounter()) {
this._encounterCount -= this.encounterProgressValue();
}
};
Game_Player.prototype.canEncounter = function() {
return (!$gameParty.hasEncounterNone() && $gameSystem.isEncounterEnabled() &&
!this.isInAirship() && !this.isMoveRouteForcing() && !this.isDebugThrough());
};
Game_Player.prototype.encounterProgressValue = function() {
var value = $gameMap.isBush(this.x, this.y) ? 2 : 1;
if ($gameParty.hasEncounterHalf()) {
value *= 0.5;
}
if (this.isInShip()) {
value *= 0.5;
}
return value;
};
Game_Player.prototype.checkEventTriggerHere = function(triggers) {
if (this.canStartLocalEvents()) {
this.startMapEvent(this.x, this.y, triggers, false);
}
};
Game_Player.prototype.checkEventTriggerThere = function(triggers) {
if (this.canStartLocalEvents()) {
var direction = this.direction();
var x1 = this.x;
var y1 = this.y;
var x2 = $gameMap.roundXWithDirection(x1, direction);
var y2 = $gameMap.roundYWithDirection(y1, direction);
this.startMapEvent(x2, y2, triggers, true);
if (!$gameMap.isAnyEventStarting() && $gameMap.isCounter(x2, y2)) {
var x3 = $gameMap.roundXWithDirection(x2, direction);
var y3 = $gameMap.roundYWithDirection(y2, direction);
this.startMapEvent(x3, y3, triggers, true);
}
}
};
Game_Player.prototype.checkEventTriggerTouch = function(x, y) {
if (this.canStartLocalEvents()) {
this.startMapEvent(x, y, [1,2], true);
}
};
Game_Player.prototype.canStartLocalEvents = function() {
return !this.isInAirship();
};
Game_Player.prototype.getOnOffVehicle = function() {
if (this.isInVehicle()) {
return this.getOffVehicle();
} else {
return this.getOnVehicle();
}
};
Game_Player.prototype.getOnVehicle = function() {
var direction = this.direction();
var x1 = this.x;
var y1 = this.y;
var x2 = $gameMap.roundXWithDirection(x1, direction);
var y2 = $gameMap.roundYWithDirection(y1, direction);
if ($gameMap.airship().pos(x1, y1)) {
this._vehicleType = 'airship';
} else if ($gameMap.ship().pos(x2, y2)) {
this._vehicleType = 'ship';
} else if ($gameMap.boat().pos(x2, y2)) {
this._vehicleType = 'boat';
}
if (this.isInVehicle()) {
this._vehicleGettingOn = true;
if (!this.isInAirship()) {
this.forceMoveForward();
}
this.gatherFollowers();
}
return this._vehicleGettingOn;
};
Game_Player.prototype.getOffVehicle = function() {
if (this.vehicle().isLandOk(this.x, this.y, this.direction())) {
if (this.isInAirship()) {
this.setDirection(2);
}
this._followers.synchronize(this.x, this.y, this.direction());
this.vehicle().getOff();
if (!this.isInAirship()) {
this.forceMoveForward();
this.setTransparent(false);
}
this._vehicleGettingOff = true;
this.setMoveSpeed(4);
this.setThrough(false);
this.makeEncounterCount();
this.gatherFollowers();
}
return this._vehicleGettingOff;
};
Game_Player.prototype.forceMoveForward = function() {
this.setThrough(true);
this.moveForward();
this.setThrough(false);
};
Game_Player.prototype.isOnDamageFloor = function() {
return $gameMap.isDamageFloor(this.x, this.y) && !this.isInAirship();
};
Game_Player.prototype.moveStraight = function(d) {
if (this.canPass(this.x, this.y, d)) {
this._followers.updateMove();
}
Game_Character.prototype.moveStraight.call(this, d);
};
Game_Player.prototype.moveDiagonally = function(horz, vert) {
if (this.canPassDiagonally(this.x, this.y, horz, vert)) {
this._followers.updateMove();
}
Game_Character.prototype.moveDiagonally.call(this, horz, vert);
};
Game_Player.prototype.jump = function(xPlus, yPlus) {
Game_Character.prototype.jump.call(this, xPlus, yPlus);
this._followers.jumpAll();
};
Game_Player.prototype.showFollowers = function() {
this._followers.show();
};
Game_Player.prototype.hideFollowers = function() {
this._followers.hide();
};
Game_Player.prototype.gatherFollowers = function() {
this._followers.gather();
};
Game_Player.prototype.areFollowersGathering = function() {
return this._followers.areGathering();
};
Game_Player.prototype.areFollowersGathered = function() {
return this._followers.areGathered();
};
//-----------------------------------------------------------------------------
// Game_Follower
//
// The game object class for a follower. A follower is an allied character,
// other than the front character, displayed in the party.
function Game_Follower() {
this.initialize.apply(this, arguments);
}
Game_Follower.prototype = Object.create(Game_Character.prototype);
Game_Follower.prototype.constructor = Game_Follower;
Game_Follower.prototype.initialize = function(memberIndex) {
Game_Character.prototype.initialize.call(this);
this._memberIndex = memberIndex;
this.setTransparent($dataSystem.optTransparent);
this.setThrough(true);
};
Game_Follower.prototype.refresh = function() {
var characterName = this.isVisible() ? this.actor().characterName() : '';
var characterIndex = this.isVisible() ? this.actor().characterIndex() : 0;
this.setImage(characterName, characterIndex);
};
Game_Follower.prototype.actor = function() {
return $gameParty.battleMembers()[this._memberIndex];
};
Game_Follower.prototype.isVisible = function() {
return this.actor() && $gamePlayer.followers().isVisible();
};
Game_Follower.prototype.update = function() {
Game_Character.prototype.update.call(this);
this.setMoveSpeed($gamePlayer.realMoveSpeed());
this.setOpacity($gamePlayer.opacity());
this.setBlendMode($gamePlayer.blendMode());
this.setWalkAnime($gamePlayer.hasWalkAnime());
this.setStepAnime($gamePlayer.hasStepAnime());
this.setDirectionFix($gamePlayer.isDirectionFixed());
this.setTransparent($gamePlayer.isTransparent());
};
Game_Follower.prototype.chaseCharacter = function(character) {
var sx = this.deltaXFrom(character.x);
var sy = this.deltaYFrom(character.y);
if (sx !== 0 && sy !== 0) {
this.moveDiagonally(sx > 0 ? 4 : 6, sy > 0 ? 8 : 2);
} else if (sx !== 0) {
this.moveStraight(sx > 0 ? 4 : 6);
} else if (sy !== 0) {
this.moveStraight(sy > 0 ? 8 : 2);
}
this.setMoveSpeed($gamePlayer.realMoveSpeed());
};
//-----------------------------------------------------------------------------
// Game_Followers
//
// The wrapper class for a follower array.
function Game_Followers() {
this.initialize.apply(this, arguments);
}
Game_Followers.prototype.initialize = function() {
this._visible = $dataSystem.optFollowers;
this._gathering = false;
this._data = [];
for (var i = 1; i < $gameParty.maxBattleMembers(); i++) {
this._data.push(new Game_Follower(i));
}
};
Game_Followers.prototype.isVisible = function() {
return this._visible;
};
Game_Followers.prototype.show = function() {
this._visible = true;
};
Game_Followers.prototype.hide = function() {
this._visible = false;
};
Game_Followers.prototype.follower = function(index) {
return this._data[index];
};
Game_Followers.prototype.forEach = function(callback, thisObject) {
this._data.forEach(callback, thisObject);
};
Game_Followers.prototype.reverseEach = function(callback, thisObject) {
this._data.reverse();
this._data.forEach(callback, thisObject);
this._data.reverse();
};
Game_Followers.prototype.refresh = function() {
this.forEach(function(follower) {
return follower.refresh();
}, this);
};
Game_Followers.prototype.update = function() {
if (this.areGathering()) {
if (!this.areMoving()) {
this.updateMove();
}
if (this.areGathered()) {
this._gathering = false;
}
}
this.forEach(function(follower) {
follower.update();
}, this);
};
Game_Followers.prototype.updateMove = function() {
for (var i = this._data.length - 1; i >= 0; i--) {
var precedingCharacter = (i > 0 ? this._data[i - 1] : $gamePlayer);
this._data[i].chaseCharacter(precedingCharacter);
}
};
Game_Followers.prototype.jumpAll = function() {
if ($gamePlayer.isJumping()) {
for (var i = 0; i < this._data.length; i++) {
var follower = this._data[i];
var sx = $gamePlayer.deltaXFrom(follower.x);
var sy = $gamePlayer.deltaYFrom(follower.y);
follower.jump(sx, sy);
}
}
};
Game_Followers.prototype.synchronize = function(x, y, d) {
this.forEach(function(follower) {
follower.locate(x, y);
follower.setDirection(d);
}, this);
};
Game_Followers.prototype.gather = function() {
this._gathering = true;
};
Game_Followers.prototype.areGathering = function() {
return this._gathering;
};
Game_Followers.prototype.visibleFollowers = function() {
return this._data.filter(function(follower) {
return follower.isVisible();
}, this);
};
Game_Followers.prototype.areMoving = function() {
return this.visibleFollowers().some(function(follower) {
return follower.isMoving();
}, this);
};
Game_Followers.prototype.areGathered = function() {
return this.visibleFollowers().every(function(follower) {
return !follower.isMoving() && follower.pos($gamePlayer.x, $gamePlayer.y);
}, this);
};
Game_Followers.prototype.isSomeoneCollided = function(x, y) {
return this.visibleFollowers().some(function(follower) {
return follower.pos(x, y);
}, this);
};
//-----------------------------------------------------------------------------
// Game_Vehicle
//
// The game object class for a vehicle.
function Game_Vehicle() {
this.initialize.apply(this, arguments);
}
Game_Vehicle.prototype = Object.create(Game_Character.prototype);
Game_Vehicle.prototype.constructor = Game_Vehicle;
Game_Vehicle.prototype.initialize = function(type) {
Game_Character.prototype.initialize.call(this);
this._type = type;
this.resetDirection();
this.initMoveSpeed();
this.loadSystemSettings();
};
Game_Vehicle.prototype.initMembers = function() {
Game_Character.prototype.initMembers.call(this);
this._type = '';
this._mapId = 0;
this._altitude = 0;
this._driving = false;
this._bgm = null;
};
Game_Vehicle.prototype.isBoat = function() {
return this._type === 'boat';
};
Game_Vehicle.prototype.isShip = function() {
return this._type === 'ship';
};
Game_Vehicle.prototype.isAirship = function() {
return this._type === 'airship';
};
Game_Vehicle.prototype.resetDirection = function() {
this.setDirection(4);
};
Game_Vehicle.prototype.initMoveSpeed = function() {
if (this.isBoat()) {
this.setMoveSpeed(4);
} else if (this.isShip()) {
this.setMoveSpeed(5);
} else if (this.isAirship()) {
this.setMoveSpeed(6);
}
};
Game_Vehicle.prototype.vehicle = function() {
if (this.isBoat()) {
return $dataSystem.boat;
} else if (this.isShip()) {
return $dataSystem.ship;
} else if (this.isAirship()) {
return $dataSystem.airship;
} else {
return null;
}
};
Game_Vehicle.prototype.loadSystemSettings = function() {
var vehicle = this.vehicle();
this._mapId = vehicle.startMapId;
this.setPosition(vehicle.startX, vehicle.startY);
this.setImage(vehicle.characterName, vehicle.characterIndex);
};
Game_Vehicle.prototype.refresh = function() {
if (this._driving) {
this._mapId = $gameMap.mapId();
this.syncWithPlayer();
} else if (this._mapId === $gameMap.mapId()) {
this.locate(this.x, this.y);
}
if (this.isAirship()) {
this.setPriorityType(this._driving ? 2 : 0);
} else {
this.setPriorityType(1);
}
this.setWalkAnime(this._driving);
this.setStepAnime(this._driving);
this.setTransparent(this._mapId !== $gameMap.mapId());
};
Game_Vehicle.prototype.setLocation = function(mapId, x, y) {
this._mapId = mapId;
this.setPosition(x, y);
this.refresh();
};
Game_Vehicle.prototype.pos = function(x, y) {
if (this._mapId === $gameMap.mapId()) {
return Game_Character.prototype.pos.call(this, x, y);
} else {
return false;
}
};
Game_Vehicle.prototype.isMapPassable = function(x, y, d) {
var x2 = $gameMap.roundXWithDirection(x, d);
var y2 = $gameMap.roundYWithDirection(y, d);
if (this.isBoat()) {
return $gameMap.isBoatPassable(x2, y2);
} else if (this.isShip()) {
return $gameMap.isShipPassable(x2, y2);
} else if (this.isAirship()) {
return true;
} else {
return false;
}
};
Game_Vehicle.prototype.getOn = function() {
this._driving = true;
this.setWalkAnime(true);
this.setStepAnime(true);
$gameSystem.saveWalkingBgm();
this.playBgm();
};
Game_Vehicle.prototype.getOff = function() {
this._driving = false;
this.setWalkAnime(false);
this.setStepAnime(false);
this.resetDirection();
$gameSystem.replayWalkingBgm();
};
Game_Vehicle.prototype.setBgm = function(bgm) {
this._bgm = bgm;
};
Game_Vehicle.prototype.playBgm = function() {
AudioManager.playBgm(this._bgm || this.vehicle().bgm);
};
Game_Vehicle.prototype.syncWithPlayer = function() {
this.copyPosition($gamePlayer);
this.refreshBushDepth();
};
Game_Vehicle.prototype.screenY = function() {
return Game_Character.prototype.screenY.call(this) - this._altitude;
};
Game_Vehicle.prototype.shadowX = function() {
return this.screenX();
};
Game_Vehicle.prototype.shadowY = function() {
return this.screenY() + this._altitude;
};
Game_Vehicle.prototype.shadowOpacity = function() {
return 255 * this._altitude / this.maxAltitude();
};
Game_Vehicle.prototype.canMove = function() {
if (this.isAirship()) {
return this.isHighest();
} else {
return true;
}
};
Game_Vehicle.prototype.update = function() {
Game_Character.prototype.update.call(this);
if (this.isAirship()) {
this.updateAirship();
}
};
Game_Vehicle.prototype.updateAirship = function() {
this.updateAirshipAltitude();
this.setStepAnime(this.isHighest());
this.setPriorityType(this.isLowest() ? 0 : 2);
};
Game_Vehicle.prototype.updateAirshipAltitude = function() {
if (this._driving && !this.isHighest()) {
this._altitude++;
}
if (!this._driving && !this.isLowest()) {
this._altitude--;
}
};
Game_Vehicle.prototype.maxAltitude = function() {
return 48;
};
Game_Vehicle.prototype.isLowest = function() {
return this._altitude <= 0;
};
Game_Vehicle.prototype.isHighest = function() {
return this._altitude >= this.maxAltitude();
};
Game_Vehicle.prototype.isTakeoffOk = function() {
return $gamePlayer.areFollowersGathered();
};
Game_Vehicle.prototype.isLandOk = function(x, y, d) {
if (this.isAirship()) {
if (!$gameMap.isAirshipLandOk(x, y)) {
return false;
}
if ($gameMap.eventsXy(x, y).length > 0) {
return false;
}
} else {
var x2 = $gameMap.roundXWithDirection(x, d);
var y2 = $gameMap.roundYWithDirection(y, d);
if (!$gameMap.isValid(x2, y2)) {
return false;
}
if (!$gameMap.isPassable(x2, y2, this.reverseDir(d))) {
return false;
}
if (this.isCollidedWithCharacters(x2, y2)) {
return false;
}
}
return true;
};
//-----------------------------------------------------------------------------
// Game_Event
//
// The game object class for an event. It contains functionality for event page
// switching and running parallel process events.
function Game_Event() {
this.initialize.apply(this, arguments);
}
Game_Event.prototype = Object.create(Game_Character.prototype);
Game_Event.prototype.constructor = Game_Event;
Game_Event.prototype.initialize = function(mapId, eventId) {
Game_Character.prototype.initialize.call(this);
this._mapId = mapId;
this._eventId = eventId;
this.locate(this.event().x, this.event().y);
this.refresh();
};
Game_Event.prototype.initMembers = function() {
Game_Character.prototype.initMembers.call(this);
this._moveType = 0;
this._trigger = 0;
this._starting = false;
this._erased = false;
this._pageIndex = -2;
this._originalPattern = 1;
this._originalDirection = 2;
this._prelockDirection = 0;
this._locked = false;
};
Game_Event.prototype.eventId = function() {
return this._eventId;
};
Game_Event.prototype.event = function() {
return $dataMap.events[this._eventId];
};
Game_Event.prototype.page = function() {
return this.event().pages[this._pageIndex];
};
Game_Event.prototype.list = function() {
return this.page().list;
};
Game_Event.prototype.isCollidedWithCharacters = function(x, y) {
return (Game_Character.prototype.isCollidedWithCharacters.call(this, x, y) ||
this.isCollidedWithPlayerCharacters(x, y));
};
Game_Event.prototype.isCollidedWithEvents = function(x, y) {
var events = $gameMap.eventsXyNt(x, y);
return events.length > 0;
};
Game_Event.prototype.isCollidedWithPlayerCharacters = function(x, y) {
return this.isNormalPriority() && $gamePlayer.isCollided(x, y);
};
Game_Event.prototype.lock = function() {
if (!this._locked) {
this._prelockDirection = this.direction();
this.turnTowardPlayer();
this._locked = true;
}
};
Game_Event.prototype.unlock = function() {
if (this._locked) {
this._locked = false;
this.setDirection(this._prelockDirection);
}
};
Game_Event.prototype.updateStop = function() {
if (this._locked) {
this.resetStopCount();
}
Game_Character.prototype.updateStop.call(this);
if (!this.isMoveRouteForcing()) {
this.updateSelfMovement();
}
};
Game_Event.prototype.updateSelfMovement = function() {
if (!this._locked && this.isNearTheScreen() &&
this.checkStop(this.stopCountThreshold())) {
switch (this._moveType) {
case 1:
this.moveTypeRandom();
break;
case 2:
this.moveTypeTowardPlayer();
break;
case 3:
this.moveTypeCustom();
break;
}
}
};
Game_Event.prototype.stopCountThreshold = function() {
return 30 * (5 - this.moveFrequency());
};
Game_Event.prototype.moveTypeRandom = function() {
switch (Math.randomInt(6)) {
case 0: case 1:
this.moveRandom();
break;
case 2: case 3: case 4:
this.moveForward();
break;
case 5:
this.resetStopCount();
break;
}
};
Game_Event.prototype.moveTypeTowardPlayer = function() {
if (this.isNearThePlayer()) {
switch (Math.randomInt(6)) {
case 0: case 1: case 2: case 3:
this.moveTowardPlayer();
break;
case 4:
this.moveRandom();
break;
case 5:
this.moveForward();
break;
}
} else {
this.moveRandom();
}
};
Game_Event.prototype.isNearThePlayer = function() {
var sx = Math.abs(this.deltaXFrom($gamePlayer.x));
var sy = Math.abs(this.deltaYFrom($gamePlayer.y));
return sx + sy < 20;
};
Game_Event.prototype.moveTypeCustom = function() {
this.updateRoutineMove();
};
Game_Event.prototype.isStarting = function() {
return this._starting;
};
Game_Event.prototype.clearStartingFlag = function() {
this._starting = false;
};
Game_Event.prototype.isTriggerIn = function(triggers) {
return triggers.contains(this._trigger);
};
Game_Event.prototype.start = function() {
var list = this.list();
if (list && list.length > 1) {
this._starting = true;
if (this.isTriggerIn([0,1,2])) {
this.lock();
}
}
};
Game_Event.prototype.erase = function() {
this._erased = true;
this.refresh();
};
Game_Event.prototype.refresh = function() {
var newPageIndex = this._erased ? -1 : this.findProperPageIndex();
if (this._pageIndex !== newPageIndex) {
this._pageIndex = newPageIndex;
this.setupPage();
}
};
Game_Event.prototype.findProperPageIndex = function() {
var pages = this.event().pages;
for (var i = pages.length - 1; i >= 0; i--) {
var page = pages[i];
if (this.meetsConditions(page)) {
return i;
}
}
return -1;
};
Game_Event.prototype.meetsConditions = function(page) {
var c = page.conditions;
if (c.switch1Valid) {
if (!$gameSwitches.value(c.switch1Id)) {
return false;
}
}
if (c.switch2Valid) {
if (!$gameSwitches.value(c.switch2Id)) {
return false;
}
}
if (c.variableValid) {
if ($gameVariables.value(c.variableId) < c.variableValue) {
return false;
}
}
if (c.selfSwitchValid) {
var key = [this._mapId, this._eventId, c.selfSwitchCh];
if ($gameSelfSwitches.value(key) !== true) {
return false;
}
}
if (c.itemValid) {
var item = $dataItems[c.itemId];
if (!$gameParty.hasItem(item)) {
return false;
}
}
if (c.actorValid) {
var actor = $gameActors.actor(c.actorId);
if (!$gameParty.members().contains(actor)) {
return false;
}
}
return true;
};
Game_Event.prototype.setupPage = function() {
if (this._pageIndex >= 0) {
this.setupPageSettings();
} else {
this.clearPageSettings();
}
this.refreshBushDepth();
this.clearStartingFlag();
this.checkEventTriggerAuto();
};
Game_Event.prototype.clearPageSettings = function() {
this.setImage('', 0);
this._moveType = 0;
this._trigger = null;
this._interpreter = null;
this.setThrough(true);
};
Game_Event.prototype.setupPageSettings = function() {
var page = this.page();
var image = page.image;
if (image.tileId > 0) {
this.setTileImage(image.tileId);
} else {
this.setImage(image.characterName, image.characterIndex);
}
if (this._originalDirection !== image.direction) {
this._originalDirection = image.direction;
this._prelockDirection = 0;
this.setDirectionFix(false);
this.setDirection(image.direction);
}
if (this._originalPattern !== image.pattern) {
this._originalPattern = image.pattern;
this.setPattern(image.pattern);
}
this.setMoveSpeed(page.moveSpeed);
this.setMoveFrequency(page.moveFrequency);
this.setPriorityType(page.priorityType);
this.setWalkAnime(page.walkAnime);
this.setStepAnime(page.stepAnime);
this.setDirectionFix(page.directionFix);
this.setThrough(page.through);
this.setMoveRoute(page.moveRoute);
this._moveType = page.moveType;
this._trigger = page.trigger;
if (this._trigger === 4) {
this._interpreter = new Game_Interpreter();
} else {
this._interpreter = null;
}
};
Game_Event.prototype.isOriginalPattern = function() {
return this.pattern() === this._originalPattern;
};
Game_Event.prototype.resetPattern = function() {
this.setPattern(this._originalPattern);
};
Game_Event.prototype.checkEventTriggerTouch = function(x, y) {
if (!$gameMap.isEventRunning()) {
if (this._trigger === 2 && $gamePlayer.pos(x, y)) {
if (!this.isJumping() && this.isNormalPriority()) {
this.start();
}
}
}
};
Game_Event.prototype.checkEventTriggerAuto = function() {
if (this._trigger === 3) {
this.start();
}
};
Game_Event.prototype.update = function() {
Game_Character.prototype.update.call(this);
this.checkEventTriggerAuto();
this.updateParallel();
};
Game_Event.prototype.updateParallel = function() {
if (this._interpreter) {
if (!this._interpreter.isRunning()) {
this._interpreter.setup(this.list(), this._eventId);
}
this._interpreter.update();
}
};
Game_Event.prototype.locate = function(x, y) {
Game_Character.prototype.locate.call(this, x, y);
this._prelockDirection = 0;
};
Game_Event.prototype.forceMoveRoute = function(moveRoute) {
Game_Character.prototype.forceMoveRoute.call(this, moveRoute);
this._prelockDirection = 0;
};
//-----------------------------------------------------------------------------
// Game_Interpreter
//
// The interpreter for running event commands.
function Game_Interpreter() {
this.initialize.apply(this, arguments);
}
Game_Interpreter.prototype.initialize = function(depth) {
this._depth = depth || 0;
this.checkOverflow();
this.clear();
this._branch = {};
this._params = [];
this._indent = 0;
this._frameCount = 0;
this._freezeChecker = 0;
};
Game_Interpreter.prototype.checkOverflow = function() {
if (this._depth >= 100) {
throw new Error('Common event calls exceeded the limit');
}
};
Game_Interpreter.prototype.clear = function() {
this._mapId = 0;
this._eventId = 0;
this._list = null;
this._index = 0;
this._waitCount = 0;
this._waitMode = '';
this._comments = '';
this._character = null;
this._childInterpreter = null;
};
Game_Interpreter.prototype.setup = function(list, eventId) {
this.clear();
this._mapId = $gameMap.mapId();
this._eventId = eventId || 0;
this._list = list;
Game_Interpreter.requestImages(list);
};
Game_Interpreter.prototype.eventId = function() {
return this._eventId;
};
Game_Interpreter.prototype.isOnCurrentMap = function() {
return this._mapId === $gameMap.mapId();
};
Game_Interpreter.prototype.setupReservedCommonEvent = function() {
if ($gameTemp.isCommonEventReserved()) {
this.setup($gameTemp.reservedCommonEvent().list);
$gameTemp.clearCommonEvent();
return true;
} else {
return false;
}
};
Game_Interpreter.prototype.isRunning = function() {
return !!this._list;
};
Game_Interpreter.prototype.update = function() {
while (this.isRunning()) {
if (this.updateChild() || this.updateWait()) {
break;
}
if (SceneManager.isSceneChanging()) {
break;
}
if (!this.executeCommand()) {
break;
}
if (this.checkFreeze()) {
break;
}
}
};
Game_Interpreter.prototype.updateChild = function() {
if (this._childInterpreter) {
this._childInterpreter.update();
if (this._childInterpreter.isRunning()) {
return true;
} else {
this._childInterpreter = null;
}
}
return false;
};
Game_Interpreter.prototype.updateWait = function() {
return this.updateWaitCount() || this.updateWaitMode();
};
Game_Interpreter.prototype.updateWaitCount = function() {
if (this._waitCount > 0) {
this._waitCount--;
return true;
}
return false;
};
Game_Interpreter.prototype.updateWaitMode = function() {
var waiting = false;
switch (this._waitMode) {
case 'message':
waiting = $gameMessage.isBusy();
break;
case 'transfer':
waiting = $gamePlayer.isTransferring();
break;
case 'scroll':
waiting = $gameMap.isScrolling();
break;
case 'route':
waiting = this._character.isMoveRouteForcing();
break;
case 'animation':
waiting = this._character.isAnimationPlaying();
break;
case 'balloon':
waiting = this._character.isBalloonPlaying();
break;
case 'gather':
waiting = $gamePlayer.areFollowersGathering();
break;
case 'action':
waiting = BattleManager.isActionForced();
break;
case 'video':
waiting = Graphics.isVideoPlaying();
break;
case 'image':
waiting = !ImageManager.isReady();
break;
}
if (!waiting) {
this._waitMode = '';
}
return waiting;
};
Game_Interpreter.prototype.setWaitMode = function(waitMode) {
this._waitMode = waitMode;
};
Game_Interpreter.prototype.wait = function(duration) {
this._waitCount = duration;
};
Game_Interpreter.prototype.fadeSpeed = function() {
return 24;
};
Game_Interpreter.prototype.executeCommand = function() {
var command = this.currentCommand();
if (command) {
this._params = command.parameters;
this._indent = command.indent;
var methodName = 'command' + command.code;
if (typeof this[methodName] === 'function') {
if (!this[methodName]()) {
return false;
}
}
this._index++;
} else {
this.terminate();
}
return true;
};
Game_Interpreter.prototype.checkFreeze = function() {
if (this._frameCount !== Graphics.frameCount) {
this._frameCount = Graphics.frameCount;
this._freezeChecker = 0;
}
if (this._freezeChecker++ >= 100000) {
return true;
} else {
return false;
}
};
Game_Interpreter.prototype.terminate = function() {
this._list = null;
this._comments = '';
};
Game_Interpreter.prototype.skipBranch = function() {
while (this._list[this._index + 1].indent > this._indent) {
this._index++;
}
};
Game_Interpreter.prototype.currentCommand = function() {
return this._list[this._index];
};
Game_Interpreter.prototype.nextEventCode = function() {
var command = this._list[this._index + 1];
if (command) {
return command.code;
} else {
return 0;
}
};
Game_Interpreter.prototype.iterateActorId = function(param, callback) {
if (param === 0) {
$gameParty.members().forEach(callback);
} else {
var actor = $gameActors.actor(param);
if (actor) {
callback(actor);
}
}
};
Game_Interpreter.prototype.iterateActorEx = function(param1, param2, callback) {
if (param1 === 0) {
this.iterateActorId(param2, callback);
} else {
this.iterateActorId($gameVariables.value(param2), callback);
}
};
Game_Interpreter.prototype.iterateActorIndex = function(param, callback) {
if (param < 0) {
$gameParty.members().forEach(callback);
} else {
var actor = $gameParty.members()[param];
if (actor) {
callback(actor);
}
}
};
Game_Interpreter.prototype.iterateEnemyIndex = function(param, callback) {
if (param < 0) {
$gameTroop.members().forEach(callback);
} else {
var enemy = $gameTroop.members()[param];
if (enemy) {
callback(enemy);
}
}
};
Game_Interpreter.prototype.iterateBattler = function(param1, param2, callback) {
if ($gameParty.inBattle()) {
if (param1 === 0) {
this.iterateEnemyIndex(param2, callback);
} else {
this.iterateActorId(param2, callback);
}
}
};
Game_Interpreter.prototype.character = function(param) {
if ($gameParty.inBattle()) {
return null;
} else if (param < 0) {
return $gamePlayer;
} else if (this.isOnCurrentMap()) {
return $gameMap.event(param > 0 ? param : this._eventId);
} else {
return null;
}
};
Game_Interpreter.prototype.operateValue = function(operation, operandType, operand) {
var value = operandType === 0 ? operand : $gameVariables.value(operand);
return operation === 0 ? value : -value;
};
Game_Interpreter.prototype.changeHp = function(target, value, allowDeath) {
if (target.isAlive()) {
if (!allowDeath && target.hp <= -value) {
value = 1 - target.hp;
}
target.gainHp(value);
if (target.isDead()) {
target.performCollapse();
}
}
};
// Show Text
Game_Interpreter.prototype.command101 = function() {
if (!$gameMessage.isBusy()) {
$gameMessage.setFaceImage(this._params[0], this._params[1]);
$gameMessage.setBackground(this._params[2]);
$gameMessage.setPositionType(this._params[3]);
while (this.nextEventCode() === 401) { // Text data
this._index++;
$gameMessage.add(this.currentCommand().parameters[0]);
}
switch (this.nextEventCode()) {
case 102: // Show Choices
this._index++;
this.setupChoices(this.currentCommand().parameters);
break;
case 103: // Input Number
this._index++;
this.setupNumInput(this.currentCommand().parameters);
break;
case 104: // Select Item
this._index++;
this.setupItemChoice(this.currentCommand().parameters);
break;
}
this._index++;
this.setWaitMode('message');
}
return false;
};
// Show Choices
Game_Interpreter.prototype.command102 = function() {
if (!$gameMessage.isBusy()) {
this.setupChoices(this._params);
this._index++;
this.setWaitMode('message');
}
return false;
};
Game_Interpreter.prototype.setupChoices = function(params) {
var choices = params[0].clone();
var cancelType = params[1];
var defaultType = params.length > 2 ? params[2] : 0;
var positionType = params.length > 3 ? params[3] : 2;
var background = params.length > 4 ? params[4] : 0;
if (cancelType >= choices.length) {
cancelType = -2;
}
$gameMessage.setChoices(choices, defaultType, cancelType);
$gameMessage.setChoiceBackground(background);
$gameMessage.setChoicePositionType(positionType);
$gameMessage.setChoiceCallback(function(n) {
this._branch[this._indent] = n;
}.bind(this));
};
// When [**]
Game_Interpreter.prototype.command402 = function() {
if (this._branch[this._indent] !== this._params[0]) {
this.skipBranch();
}
return true;
};
// When Cancel
Game_Interpreter.prototype.command403 = function() {
if (this._branch[this._indent] >= 0) {
this.skipBranch();
}
return true;
};
// Input Number
Game_Interpreter.prototype.command103 = function() {
if (!$gameMessage.isBusy()) {
this.setupNumInput(this._params);
this._index++;
this.setWaitMode('message');
}
return false;
};
Game_Interpreter.prototype.setupNumInput = function(params) {
$gameMessage.setNumberInput(params[0], params[1]);
};
// Select Item
Game_Interpreter.prototype.command104 = function() {
if (!$gameMessage.isBusy()) {
this.setupItemChoice(this._params);
this._index++;
this.setWaitMode('message');
}
return false;
};
Game_Interpreter.prototype.setupItemChoice = function(params) {
$gameMessage.setItemChoice(params[0], params[1] || 2);
};
// Show Scrolling Text
Game_Interpreter.prototype.command105 = function() {
if (!$gameMessage.isBusy()) {
$gameMessage.setScroll(this._params[0], this._params[1]);
while (this.nextEventCode() === 405) {
this._index++;
$gameMessage.add(this.currentCommand().parameters[0]);
}
this._index++;
this.setWaitMode('message');
}
return false;
};
// Comment
Game_Interpreter.prototype.command108 = function() {
this._comments = [this._params[0]];
while (this.nextEventCode() === 408) {
this._index++;
this._comments.push(this.currentCommand().parameters[0]);
}
return true;
};
// Conditional Branch
Game_Interpreter.prototype.command111 = function() {
var result = false;
switch (this._params[0]) {
case 0: // Switch
result = ($gameSwitches.value(this._params[1]) === (this._params[2] === 0));
break;
case 1: // Variable
var value1 = $gameVariables.value(this._params[1]);
var value2;
if (this._params[2] === 0) {
value2 = this._params[3];
} else {
value2 = $gameVariables.value(this._params[3]);
}
switch (this._params[4]) {
case 0: // Equal to
result = (value1 === value2);
break;
case 1: // Greater than or Equal to
result = (value1 >= value2);
break;
case 2: // Less than or Equal to
result = (value1 <= value2);
break;
case 3: // Greater than
result = (value1 > value2);
break;
case 4: // Less than
result = (value1 < value2);
break;
case 5: // Not Equal to
result = (value1 !== value2);
break;
}
break;
case 2: // Self Switch
if (this._eventId > 0) {
var key = [this._mapId, this._eventId, this._params[1]];
result = ($gameSelfSwitches.value(key) === (this._params[2] === 0));
}
break;
case 3: // Timer
if ($gameTimer.isWorking()) {
if (this._params[2] === 0) {
result = ($gameTimer.seconds() >= this._params[1]);
} else {
result = ($gameTimer.seconds() <= this._params[1]);
}
}
break;
case 4: // Actor
var actor = $gameActors.actor(this._params[1]);
if (actor) {
var n = this._params[3];
switch (this._params[2]) {
case 0: // In the Party
result = $gameParty.members().contains(actor);
break;
case 1: // Name
result = (actor.name() === n);
break;
case 2: // Class
result = actor.isClass($dataClasses[n]);
break;
case 3: // Skill
result = actor.hasSkill(n);
break;
case 4: // Weapon
result = actor.hasWeapon($dataWeapons[n]);
break;
case 5: // Armor
result = actor.hasArmor($dataArmors[n]);
break;
case 6: // State
result = actor.isStateAffected(n);
break;
}
}
break;
case 5: // Enemy
var enemy = $gameTroop.members()[this._params[1]];
if (enemy) {
switch (this._params[2]) {
case 0: // Appeared
result = enemy.isAlive();
break;
case 1: // State
result = enemy.isStateAffected(this._params[3]);
break;
}
}
break;
case 6: // Character
var character = this.character(this._params[1]);
if (character) {
result = (character.direction() === this._params[2]);
}
break;
case 7: // Gold
switch (this._params[2]) {
case 0: // Greater than or equal to
result = ($gameParty.gold() >= this._params[1]);
break;
case 1: // Less than or equal to
result = ($gameParty.gold() <= this._params[1]);
break;
case 2: // Less than
result = ($gameParty.gold() < this._params[1]);
break;
}
break;
case 8: // Item
result = $gameParty.hasItem($dataItems[this._params[1]]);
break;
case 9: // Weapon
result = $gameParty.hasItem($dataWeapons[this._params[1]], this._params[2]);
break;
case 10: // Armor
result = $gameParty.hasItem($dataArmors[this._params[1]], this._params[2]);
break;
case 11: // Button
result = Input.isPressed(this._params[1]);
break;
case 12: // Script
result = !!eval(this._params[1]);
break;
case 13: // Vehicle
result = ($gamePlayer.vehicle() === $gameMap.vehicle(this._params[1]));
break;
}
this._branch[this._indent] = result;
if (this._branch[this._indent] === false) {
this.skipBranch();
}
return true;
};
// Else
Game_Interpreter.prototype.command411 = function() {
if (this._branch[this._indent] !== false) {
this.skipBranch();
}
return true;
};
// Loop
Game_Interpreter.prototype.command112 = function() {
return true;
};
// Repeat Above
Game_Interpreter.prototype.command413 = function() {
do {
this._index--;
} while (this.currentCommand().indent !== this._indent);
return true;
};
// Break Loop
Game_Interpreter.prototype.command113 = function() {
while (this._index < this._list.length - 1) {
this._index++;
var command = this.currentCommand();
if (command.code === 413 && command.indent < this._indent) {
break;
}
}
return true;
};
// Exit Event Processing
Game_Interpreter.prototype.command115 = function() {
this._index = this._list.length;
return true;
};
// Common Event
Game_Interpreter.prototype.command117 = function() {
var commonEvent = $dataCommonEvents[this._params[0]];
if (commonEvent) {
var eventId = this.isOnCurrentMap() ? this._eventId : 0;
this.setupChild(commonEvent.list, eventId);
}
return true;
};
Game_Interpreter.prototype.setupChild = function(list, eventId) {
this._childInterpreter = new Game_Interpreter(this._depth + 1);
this._childInterpreter.setup(list, eventId);
};
// Label
Game_Interpreter.prototype.command118 = function() {
return true;
};
// Jump to Label
Game_Interpreter.prototype.command119 = function() {
var labelName = this._params[0];
for (var i = 0; i < this._list.length; i++) {
var command = this._list[i];
if (command.code === 118 && command.parameters[0] === labelName) {
this.jumpTo(i);
return;
}
}
return true;
};
Game_Interpreter.prototype.jumpTo = function(index) {
var lastIndex = this._index;
var startIndex = Math.min(index, lastIndex);
var endIndex = Math.max(index, lastIndex);
var indent = this._indent;
for (var i = startIndex; i <= endIndex; i++) {
var newIndent = this._list[i].indent;
if (newIndent !== indent) {
this._branch[indent] = null;
indent = newIndent;
}
}
this._index = index;
};
// Control Switches
Game_Interpreter.prototype.command121 = function() {
for (var i = this._params[0]; i <= this._params[1]; i++) {
$gameSwitches.setValue(i, this._params[2] === 0);
}
return true;
};
// Control Variables
Game_Interpreter.prototype.command122 = function() {
var value = 0;
switch (this._params[3]) { // Operand
case 0: // Constant
value = this._params[4];
break;
case 1: // Variable
value = $gameVariables.value(this._params[4]);
break;
case 2: // Random
value = this._params[5] - this._params[4] + 1;
for (var i = this._params[0]; i <= this._params[1]; i++) {
this.operateVariable(i, this._params[2], this._params[4] + Math.randomInt(value));
}
return true;
break;
case 3: // Game Data
value = this.gameDataOperand(this._params[4], this._params[5], this._params[6]);
break;
case 4: // Script
value = eval(this._params[4]);
break;
}
for (var i = this._params[0]; i <= this._params[1]; i++) {
this.operateVariable(i, this._params[2], value);
}
return true;
};
Game_Interpreter.prototype.gameDataOperand = function(type, param1, param2) {
switch (type) {
case 0: // Item
return $gameParty.numItems($dataItems[param1]);
case 1: // Weapon
return $gameParty.numItems($dataWeapons[param1]);
case 2: // Armor
return $gameParty.numItems($dataArmors[param1]);
case 3: // Actor
var actor = $gameActors.actor(param1);
if (actor) {
switch (param2) {
case 0: // Level
return actor.level;
case 1: // EXP
return actor.currentExp();
case 2: // HP
return actor.hp;
case 3: // MP
return actor.mp;
default: // Parameter
if (param2 >= 4 && param2 <= 11) {
return actor.param(param2 - 4);
}
}
}
break;
case 4: // Enemy
var enemy = $gameTroop.members()[param1];
if (enemy) {
switch (param2) {
case 0: // HP
return enemy.hp;
case 1: // MP
return enemy.mp;
default: // Parameter
if (param2 >= 2 && param2 <= 9) {
return enemy.param(param2 - 2);
}
}
}
break;
case 5: // Character
var character = this.character(param1);
if (character) {
switch (param2) {
case 0: // Map X
return character.x;
case 1: // Map Y
return character.y;
case 2: // Direction
return character.direction();
case 3: // Screen X
return character.screenX();
case 4: // Screen Y
return character.screenY();
}
}
break;
case 6: // Party
actor = $gameParty.members()[param1];
return actor ? actor.actorId() : 0;
case 7: // Other
switch (param1) {
case 0: // Map ID
return $gameMap.mapId();
case 1: // Party Members
return $gameParty.size();
case 2: // Gold
return $gameParty.gold();
case 3: // Steps
return $gameParty.steps();
case 4: // Play Time
return $gameSystem.playtime();
case 5: // Timer
return $gameTimer.seconds();
case 6: // Save Count
return $gameSystem.saveCount();
case 7: // Battle Count
return $gameSystem.battleCount();
case 8: // Win Count
return $gameSystem.winCount();
case 9: // Escape Count
return $gameSystem.escapeCount();
}
break;
}
return 0;
};
Game_Interpreter.prototype.operateVariable = function(variableId, operationType, value) {
try {
var oldValue = $gameVariables.value(variableId);
switch (operationType) {
case 0: // Set
$gameVariables.setValue(variableId, oldValue = value);
break;
case 1: // Add
$gameVariables.setValue(variableId, oldValue + value);
break;
case 2: // Sub
$gameVariables.setValue(variableId, oldValue - value);
break;
case 3: // Mul
$gameVariables.setValue(variableId, oldValue * value);
break;
case 4: // Div
$gameVariables.setValue(variableId, oldValue / value);
break;
case 5: // Mod
$gameVariables.setValue(variableId, oldValue % value);
break;
}
} catch (e) {
$gameVariables.setValue(variableId, 0);
}
};
// Control Self Switch
Game_Interpreter.prototype.command123 = function() {
if (this._eventId > 0) {
var key = [this._mapId, this._eventId, this._params[0]];
$gameSelfSwitches.setValue(key, this._params[1] === 0);
}
return true;
};
// Control Timer
Game_Interpreter.prototype.command124 = function() {
if (this._params[0] === 0) { // Start
$gameTimer.start(this._params[1] * 60);
} else { // Stop
$gameTimer.stop();
}
return true;
};
// Change Gold
Game_Interpreter.prototype.command125 = function() {
var value = this.operateValue(this._params[0], this._params[1], this._params[2]);
$gameParty.gainGold(value);
return true;
};
// Change Items
Game_Interpreter.prototype.command126 = function() {
var value = this.operateValue(this._params[1], this._params[2], this._params[3]);
$gameParty.gainItem($dataItems[this._params[0]], value);
return true;
};
// Change Weapons
Game_Interpreter.prototype.command127 = function() {
var value = this.operateValue(this._params[1], this._params[2], this._params[3]);
$gameParty.gainItem($dataWeapons[this._params[0]], value, this._params[4]);
return true;
};
// Change Armors
Game_Interpreter.prototype.command128 = function() {
var value = this.operateValue(this._params[1], this._params[2], this._params[3]);
$gameParty.gainItem($dataArmors[this._params[0]], value, this._params[4]);
return true;
};
// Change Party Member
Game_Interpreter.prototype.command129 = function() {
var actor = $gameActors.actor(this._params[0]);
if (actor) {
if (this._params[1] === 0) { // Add
if (this._params[2]) { // Initialize
$gameActors.actor(this._params[0]).setup(this._params[0]);
}
$gameParty.addActor(this._params[0]);
} else { // Remove
$gameParty.removeActor(this._params[0]);
}
}
return true;
};
// Change Battle BGM
Game_Interpreter.prototype.command132 = function() {
$gameSystem.setBattleBgm(this._params[0]);
return true;
};
// Change Victory ME
Game_Interpreter.prototype.command133 = function() {
$gameSystem.setVictoryMe(this._params[0]);
return true;
};
// Change Save Access
Game_Interpreter.prototype.command134 = function() {
if (this._params[0] === 0) {
$gameSystem.disableSave();
} else {
$gameSystem.enableSave();
}
return true;
};
// Change Menu Access
Game_Interpreter.prototype.command135 = function() {
if (this._params[0] === 0) {
$gameSystem.disableMenu();
} else {
$gameSystem.enableMenu();
}
return true;
};
// Change Encounter Disable
Game_Interpreter.prototype.command136 = function() {
if (this._params[0] === 0) {
$gameSystem.disableEncounter();
} else {
$gameSystem.enableEncounter();
}
$gamePlayer.makeEncounterCount();
return true;
};
// Change Formation Access
Game_Interpreter.prototype.command137 = function() {
if (this._params[0] === 0) {
$gameSystem.disableFormation();
} else {
$gameSystem.enableFormation();
}
return true;
};
// Change Window Color
Game_Interpreter.prototype.command138 = function() {
$gameSystem.setWindowTone(this._params[0]);
return true;
};
// Change Defeat ME
Game_Interpreter.prototype.command139 = function() {
$gameSystem.setDefeatMe(this._params[0]);
return true;
};
// Change Vehicle BGM
Game_Interpreter.prototype.command140 = function() {
var vehicle = $gameMap.vehicle(this._params[0]);
if (vehicle) {
vehicle.setBgm(this._params[1]);
}
return true;
};
// Transfer Player
Game_Interpreter.prototype.command201 = function() {
if (!$gameParty.inBattle() && !$gameMessage.isBusy()) {
var mapId, x, y;
if (this._params[0] === 0) { // Direct designation
mapId = this._params[1];
x = this._params[2];
y = this._params[3];
} else { // Designation with variables
mapId = $gameVariables.value(this._params[1]);
x = $gameVariables.value(this._params[2]);
y = $gameVariables.value(this._params[3]);
}
$gamePlayer.reserveTransfer(mapId, x, y, this._params[4], this._params[5]);
this.setWaitMode('transfer');
this._index++;
}
return false;
};
// Set Vehicle Location
Game_Interpreter.prototype.command202 = function() {
var mapId, x, y;
if (this._params[1] === 0) { // Direct designation
mapId = this._params[2];
x = this._params[3];
y = this._params[4];
} else { // Designation with variables
mapId = $gameVariables.value(this._params[2]);
x = $gameVariables.value(this._params[3]);
y = $gameVariables.value(this._params[4]);
}
var vehicle = $gameMap.vehicle(this._params[0]);
if (vehicle) {
vehicle.setLocation(mapId, x, y);
}
return true;
};
// Set Event Location
Game_Interpreter.prototype.command203 = function() {
var character = this.character(this._params[0]);
if (character) {
if (this._params[1] === 0) { // Direct designation
character.locate(this._params[2], this._params[3]);
} else if (this._params[1] === 1) { // Designation with variables
var x = $gameVariables.value(this._params[2]);
var y = $gameVariables.value(this._params[3]);
character.locate(x, y);
} else { // Exchange with another event
var character2 = this.character(this._params[2]);
if (character2) {
character.swap(character2);
}
}
if (this._params[4] > 0) {
character.setDirection(this._params[4]);
}
}
return true;
};
// Scroll Map
Game_Interpreter.prototype.command204 = function() {
if (!$gameParty.inBattle()) {
if ($gameMap.isScrolling()) {
this.setWaitMode('scroll');
return false;
}
$gameMap.startScroll(this._params[0], this._params[1], this._params[2]);
}
return true;
};
// Set Movement Route
Game_Interpreter.prototype.command205 = function() {
$gameMap.refreshIfNeeded();
this._character = this.character(this._params[0]);
if (this._character) {
this._character.forceMoveRoute(this._params[1]);
if (this._params[1].wait) {
this.setWaitMode('route');
}
}
return true;
};
// Getting On and Off Vehicles
Game_Interpreter.prototype.command206 = function() {
$gamePlayer.getOnOffVehicle();
return true;
};
// Change Transparency
Game_Interpreter.prototype.command211 = function() {
$gamePlayer.setTransparent(this._params[0] === 0);
return true;
};
// Show Animation
Game_Interpreter.prototype.command212 = function() {
this._character = this.character(this._params[0]);
if (this._character) {
this._character.requestAnimation(this._params[1]);
if (this._params[2]) {
this.setWaitMode('animation');
}
}
return true;
};
// Show Balloon Icon
Game_Interpreter.prototype.command213 = function() {
this._character = this.character(this._params[0]);
if (this._character) {
this._character.requestBalloon(this._params[1]);
if (this._params[2]) {
this.setWaitMode('balloon');
}
}
return true;
};
// Erase Event
Game_Interpreter.prototype.command214 = function() {
if (this.isOnCurrentMap() && this._eventId > 0) {
$gameMap.eraseEvent(this._eventId);
}
return true;
};
// Change Player Followers
Game_Interpreter.prototype.command216 = function() {
if (this._params[0] === 0) {
$gamePlayer.showFollowers();
} else {
$gamePlayer.hideFollowers();
}
$gamePlayer.refresh();
return true;
};
// Gather Followers
Game_Interpreter.prototype.command217 = function() {
if (!$gameParty.inBattle()) {
$gamePlayer.gatherFollowers();
this.setWaitMode('gather');
}
return true;
};
// Fadeout Screen
Game_Interpreter.prototype.command221 = function() {
if (!$gameMessage.isBusy()) {
$gameScreen.startFadeOut(this.fadeSpeed());
this.wait(this.fadeSpeed());
this._index++;
}
return false;
};
// Fadein Screen
Game_Interpreter.prototype.command222 = function() {
if (!$gameMessage.isBusy()) {
$gameScreen.startFadeIn(this.fadeSpeed());
this.wait(this.fadeSpeed());
this._index++;
}
return false;
};
// Tint Screen
Game_Interpreter.prototype.command223 = function() {
$gameScreen.startTint(this._params[0], this._params[1]);
if (this._params[2]) {
this.wait(this._params[1]);
}
return true;
};
// Flash Screen
Game_Interpreter.prototype.command224 = function() {
$gameScreen.startFlash(this._params[0], this._params[1]);
if (this._params[2]) {
this.wait(this._params[1]);
}
return true;
};
// Shake Screen
Game_Interpreter.prototype.command225 = function() {
$gameScreen.startShake(this._params[0], this._params[1], this._params[2]);
if (this._params[3]) {
this.wait(this._params[2]);
}
return true;
};
// Wait
Game_Interpreter.prototype.command230 = function() {
this.wait(this._params[0]);
return true;
};
// Show Picture
Game_Interpreter.prototype.command231 = function() {
var x, y;
if (this._params[3] === 0) { // Direct designation
x = this._params[4];
y = this._params[5];
} else { // Designation with variables
x = $gameVariables.value(this._params[4]);
y = $gameVariables.value(this._params[5]);
}
$gameScreen.showPicture(this._params[0], this._params[1], this._params[2],
x, y, this._params[6], this._params[7], this._params[8], this._params[9]);
return true;
};
// Move Picture
Game_Interpreter.prototype.command232 = function() {
var x, y;
if (this._params[3] === 0) { // Direct designation
x = this._params[4];
y = this._params[5];
} else { // Designation with variables
x = $gameVariables.value(this._params[4]);
y = $gameVariables.value(this._params[5]);
}
$gameScreen.movePicture(this._params[0], this._params[2], x, y, this._params[6],
this._params[7], this._params[8], this._params[9], this._params[10]);
if (this._params[11]) {
this.wait(this._params[10]);
}
return true;
};
// Rotate Picture
Game_Interpreter.prototype.command233 = function() {
$gameScreen.rotatePicture(this._params[0], this._params[1]);
return true;
};
// Tint Picture
Game_Interpreter.prototype.command234 = function() {
$gameScreen.tintPicture(this._params[0], this._params[1], this._params[2]);
if (this._params[3]) {
this.wait(this._params[2]);
}
return true;
};
// Erase Picture
Game_Interpreter.prototype.command235 = function() {
$gameScreen.erasePicture(this._params[0]);
return true;
};
// Set Weather Effect
Game_Interpreter.prototype.command236 = function() {
if (!$gameParty.inBattle()) {
$gameScreen.changeWeather(this._params[0], this._params[1], this._params[2]);
if (this._params[3]) {
this.wait(this._params[2]);
}
}
return true;
};
// Play BGM
Game_Interpreter.prototype.command241 = function() {
AudioManager.playBgm(this._params[0]);
return true;
};
// Fadeout BGM
Game_Interpreter.prototype.command242 = function() {
AudioManager.fadeOutBgm(this._params[0]);
return true;
};
// Save BGM
Game_Interpreter.prototype.command243 = function() {
$gameSystem.saveBgm();
return true;
};
// Resume BGM
Game_Interpreter.prototype.command244 = function() {
$gameSystem.replayBgm();
return true;
};
// Play BGS
Game_Interpreter.prototype.command245 = function() {
AudioManager.playBgs(this._params[0]);
return true;
};
// Fadeout BGS
Game_Interpreter.prototype.command246 = function() {
AudioManager.fadeOutBgs(this._params[0]);
return true;
};
// Play ME
Game_Interpreter.prototype.command249 = function() {
AudioManager.playMe(this._params[0]);
return true;
};
// Play SE
Game_Interpreter.prototype.command250 = function() {
AudioManager.playSe(this._params[0]);
return true;
};
// Stop SE
Game_Interpreter.prototype.command251 = function() {
AudioManager.stopSe();
return true;
};
// Play Movie
Game_Interpreter.prototype.command261 = function() {
if (!$gameMessage.isBusy()) {
var name = this._params[0];
if (name.length > 0) {
var ext = this.videoFileExt();
Graphics.playVideo('movies/' + name + ext);
this.setWaitMode('video');
}
this._index++;
}
return false;
};
Game_Interpreter.prototype.videoFileExt = function() {
if (Graphics.canPlayVideoType('video/webm') && !Utils.isMobileDevice()) {
return '.webm';
} else {
return '.mp4';
}
};
// Change Map Name Display
Game_Interpreter.prototype.command281 = function() {
if (this._params[0] === 0) {
$gameMap.enableNameDisplay();
} else {
$gameMap.disableNameDisplay();
}
return true;
};
// Change Tileset
Game_Interpreter.prototype.command282 = function() {
var tileset = $dataTilesets[this._params[0]];
if(!this._imageReservationId){
this._imageReservationId = Utils.generateRuntimeId();
}
var allReady = tileset.tilesetNames.map(function(tilesetName) {
return ImageManager.reserveTileset(tilesetName, 0, this._imageReservationId);
}, this).every(function(bitmap) {return bitmap.isReady();});
if (allReady) {
$gameMap.changeTileset(this._params[0]);
ImageManager.releaseReservation(this._imageReservationId);
this._imageReservationId = null;
return true;
} else {
return false;
}
};
// Change Battle Back
Game_Interpreter.prototype.command283 = function() {
$gameMap.changeBattleback(this._params[0], this._params[1]);
return true;
};
// Change Parallax
Game_Interpreter.prototype.command284 = function() {
$gameMap.changeParallax(this._params[0], this._params[1],
this._params[2], this._params[3], this._params[4]);
return true;
};
// Get Location Info
Game_Interpreter.prototype.command285 = function() {
var x, y, value;
if (this._params[2] === 0) { // Direct designation
x = this._params[3];
y = this._params[4];
} else { // Designation with variables
x = $gameVariables.value(this._params[3]);
y = $gameVariables.value(this._params[4]);
}
switch (this._params[1]) {
case 0: // Terrain Tag
value = $gameMap.terrainTag(x, y);
break;
case 1: // Event ID
value = $gameMap.eventIdXy(x, y);
break;
case 2: // Tile ID (Layer 1)
case 3: // Tile ID (Layer 2)
case 4: // Tile ID (Layer 3)
case 5: // Tile ID (Layer 4)
value = $gameMap.tileId(x, y, this._params[1] - 2);
break;
default: // Region ID
value = $gameMap.regionId(x, y);
break;
}
$gameVariables.setValue(this._params[0], value);
return true;
};
// Battle Processing
Game_Interpreter.prototype.command301 = function() {
if (!$gameParty.inBattle()) {
var troopId;
if (this._params[0] === 0) { // Direct designation
troopId = this._params[1];
} else if (this._params[0] === 1) { // Designation with a variable
troopId = $gameVariables.value(this._params[1]);
} else { // Same as Random Encounter
troopId = $gamePlayer.makeEncounterTroopId();
}
if ($dataTroops[troopId]) {
BattleManager.setup(troopId, this._params[2], this._params[3]);
BattleManager.setEventCallback(function(n) {
this._branch[this._indent] = n;
}.bind(this));
$gamePlayer.makeEncounterCount();
SceneManager.push(Scene_Battle);
}
}
return true;
};
// If Win
Game_Interpreter.prototype.command601 = function() {
if (this._branch[this._indent] !== 0) {
this.skipBranch();
}
return true;
};
// If Escape
Game_Interpreter.prototype.command602 = function() {
if (this._branch[this._indent] !== 1) {
this.skipBranch();
}
return true;
};
// If Lose
Game_Interpreter.prototype.command603 = function() {
if (this._branch[this._indent] !== 2) {
this.skipBranch();
}
return true;
};
// Shop Processing
Game_Interpreter.prototype.command302 = function() {
if (!$gameParty.inBattle()) {
var goods = [this._params];
while (this.nextEventCode() === 605) {
this._index++;
goods.push(this.currentCommand().parameters);
}
SceneManager.push(Scene_Shop);
SceneManager.prepareNextScene(goods, this._params[4]);
}
return true;
};
// Name Input Processing
Game_Interpreter.prototype.command303 = function() {
if (!$gameParty.inBattle()) {
if ($dataActors[this._params[0]]) {
SceneManager.push(Scene_Name);
SceneManager.prepareNextScene(this._params[0], this._params[1]);
}
}
return true;
};
// Change HP
Game_Interpreter.prototype.command311 = function() {
var value = this.operateValue(this._params[2], this._params[3], this._params[4]);
this.iterateActorEx(this._params[0], this._params[1], function(actor) {
this.changeHp(actor, value, this._params[5]);
}.bind(this));
return true;
};
// Change MP
Game_Interpreter.prototype.command312 = function() {
var value = this.operateValue(this._params[2], this._params[3], this._params[4]);
this.iterateActorEx(this._params[0], this._params[1], function(actor) {
actor.gainMp(value);
}.bind(this));
return true;
};
// Change TP
Game_Interpreter.prototype.command326 = function() {
var value = this.operateValue(this._params[2], this._params[3], this._params[4]);
this.iterateActorEx(this._params[0], this._params[1], function(actor) {
actor.gainTp(value);
}.bind(this));
return true;
};
// Change State
Game_Interpreter.prototype.command313 = function() {
this.iterateActorEx(this._params[0], this._params[1], function(actor) {
var alreadyDead = actor.isDead();
if (this._params[2] === 0) {
actor.addState(this._params[3]);
} else {
actor.removeState(this._params[3]);
}
if (actor.isDead() && !alreadyDead) {
actor.performCollapse();
}
actor.clearResult();
}.bind(this));
return true;
};
// Recover All
Game_Interpreter.prototype.command314 = function() {
this.iterateActorEx(this._params[0], this._params[1], function(actor) {
actor.recoverAll();
}.bind(this));
return true;
};
// Change EXP
Game_Interpreter.prototype.command315 = function() {
var value = this.operateValue(this._params[2], this._params[3], this._params[4]);
this.iterateActorEx(this._params[0], this._params[1], function(actor) {
actor.changeExp(actor.currentExp() + value, this._params[5]);
}.bind(this));
return true;
};
// Change Level
Game_Interpreter.prototype.command316 = function() {
var value = this.operateValue(this._params[2], this._params[3], this._params[4]);
this.iterateActorEx(this._params[0], this._params[1], function(actor) {
actor.changeLevel(actor.level + value, this._params[5]);
}.bind(this));
return true;
};
// Change Parameter
Game_Interpreter.prototype.command317 = function() {
var value = this.operateValue(this._params[3], this._params[4], this._params[5]);
this.iterateActorEx(this._params[0], this._params[1], function(actor) {
actor.addParam(this._params[2], value);
}.bind(this));
return true;
};
// Change Skill
Game_Interpreter.prototype.command318 = function() {
this.iterateActorEx(this._params[0], this._params[1], function(actor) {
if (this._params[2] === 0) {
actor.learnSkill(this._params[3]);
} else {
actor.forgetSkill(this._params[3]);
}
}.bind(this));
return true;
};
// Change Equipment
Game_Interpreter.prototype.command319 = function() {
var actor = $gameActors.actor(this._params[0]);
if (actor) {
actor.changeEquipById(this._params[1], this._params[2]);
}
return true;
};
// Change Name
Game_Interpreter.prototype.command320 = function() {
var actor = $gameActors.actor(this._params[0]);
if (actor) {
actor.setName(this._params[1]);
}
return true;
};
// Change Class
Game_Interpreter.prototype.command321 = function() {
var actor = $gameActors.actor(this._params[0]);
if (actor && $dataClasses[this._params[1]]) {
actor.changeClass(this._params[1], this._params[2]);
}
return true;
};
// Change Actor Images
Game_Interpreter.prototype.command322 = function() {
var actor = $gameActors.actor(this._params[0]);
if (actor) {
actor.setCharacterImage(this._params[1], this._params[2]);
actor.setFaceImage(this._params[3], this._params[4]);
actor.setBattlerImage(this._params[5]);
}
$gamePlayer.refresh();
return true;
};
// Change Vehicle Image
Game_Interpreter.prototype.command323 = function() {
var vehicle = $gameMap.vehicle(this._params[0]);
if (vehicle) {
vehicle.setImage(this._params[1], this._params[2]);
}
return true;
};
// Change Nickname
Game_Interpreter.prototype.command324 = function() {
var actor = $gameActors.actor(this._params[0]);
if (actor) {
actor.setNickname(this._params[1]);
}
return true;
};
// Change Profile
Game_Interpreter.prototype.command325 = function() {
var actor = $gameActors.actor(this._params[0]);
if (actor) {
actor.setProfile(this._params[1]);
}
return true;
};
// Change Enemy HP
Game_Interpreter.prototype.command331 = function() {
var value = this.operateValue(this._params[1], this._params[2], this._params[3]);
this.iterateEnemyIndex(this._params[0], function(enemy) {
this.changeHp(enemy, value, this._params[4]);
}.bind(this));
return true;
};
// Change Enemy MP
Game_Interpreter.prototype.command332 = function() {
var value = this.operateValue(this._params[1], this._params[2], this._params[3]);
this.iterateEnemyIndex(this._params[0], function(enemy) {
enemy.gainMp(value);
}.bind(this));
return true;
};
// Change Enemy TP
Game_Interpreter.prototype.command342 = function() {
var value = this.operateValue(this._params[1], this._params[2], this._params[3]);
this.iterateEnemyIndex(this._params[0], function(enemy) {
enemy.gainTp(value);
}.bind(this));
return true;
};
// Change Enemy State
Game_Interpreter.prototype.command333 = function() {
this.iterateEnemyIndex(this._params[0], function(enemy) {
var alreadyDead = enemy.isDead();
if (this._params[1] === 0) {
enemy.addState(this._params[2]);
} else {
enemy.removeState(this._params[2]);
}
if (enemy.isDead() && !alreadyDead) {
enemy.performCollapse();
}
enemy.clearResult();
}.bind(this));
return true;
};
// Enemy Recover All
Game_Interpreter.prototype.command334 = function() {
this.iterateEnemyIndex(this._params[0], function(enemy) {
enemy.recoverAll();
}.bind(this));
return true;
};
// Enemy Appear
Game_Interpreter.prototype.command335 = function() {
this.iterateEnemyIndex(this._params[0], function(enemy) {
enemy.appear();
$gameTroop.makeUniqueNames();
}.bind(this));
return true;
};
// Enemy Transform
Game_Interpreter.prototype.command336 = function() {
this.iterateEnemyIndex(this._params[0], function(enemy) {
enemy.transform(this._params[1]);
$gameTroop.makeUniqueNames();
}.bind(this));
return true;
};
// Show Battle Animation
Game_Interpreter.prototype.command337 = function() {
if (this._params[2] == true) {
this.iterateEnemyIndex(-1,function(enemy) {
if (enemy.isAlive()) {
enemy.startAnimation(this._params[1],false,0);
}
}.bind(this));
} else {
this.iterateEnemyIndex(this._params[0], function (enemy) {
if (enemy.isAlive()) {
enemy.startAnimation(this._params[1], false, 0);
}
}.bind(this));
}
return true;
};
// Force Action
Game_Interpreter.prototype.command339 = function() {
this.iterateBattler(this._params[0], this._params[1], function(battler) {
if (!battler.isDeathStateAffected()) {
battler.forceAction(this._params[2], this._params[3]);
BattleManager.forceAction(battler);
this.setWaitMode('action');
}
}.bind(this));
return true;
};
// Abort Battle
Game_Interpreter.prototype.command340 = function() {
BattleManager.abort();
return true;
};
// Open Menu Screen
Game_Interpreter.prototype.command351 = function() {
if (!$gameParty.inBattle()) {
SceneManager.push(Scene_Menu);
Window_MenuCommand.initCommandPosition();
}
return true;
};
// Open Save Screen
Game_Interpreter.prototype.command352 = function() {
if (!$gameParty.inBattle()) {
SceneManager.push(Scene_Save);
}
return true;
};
// Game Over
Game_Interpreter.prototype.command353 = function() {
SceneManager.goto(Scene_Gameover);
return true;
};
// Return to Title Screen
Game_Interpreter.prototype.command354 = function() {
SceneManager.goto(Scene_Title);
return true;
};
// Script
Game_Interpreter.prototype.command355 = function() {
var script = this.currentCommand().parameters[0] + '\n';
while (this.nextEventCode() === 655) {
this._index++;
script += this.currentCommand().parameters[0] + '\n';
}
eval(script);
return true;
};
// Plugin Command
Game_Interpreter.prototype.command356 = function() {
var args = this._params[0].split(" ");
var command = args.shift();
this.pluginCommand(command, args);
return true;
};
Game_Interpreter.prototype.pluginCommand = function(command, args) {
// to be overridden by plugins
};
Game_Interpreter.requestImages = function(list, commonList){
if(!list) return;
list.forEach(function(command){
var params = command.parameters;
switch(command.code){
// Show Text
case 101:
ImageManager.requestFace(params[0]);
break;
// Common Event
case 117:
var commonEvent = $dataCommonEvents[params[0]];
if (commonEvent) {
if (!commonList) {
commonList = [];
}
if (!commonList.contains(params[0])) {
commonList.push(params[0]);
Game_Interpreter.requestImages(commonEvent.list, commonList);
}
}
break;
// Change Party Member
case 129:
var actor = $gameActors.actor(params[0]);
if (actor && params[1] === 0) {
var name = actor.characterName();
ImageManager.requestCharacter(name);
}
break;
// Set Movement Route
case 205:
if(params[1]){
params[1].list.forEach(function(command){
var params = command.parameters;
if(command.code === Game_Character.ROUTE_CHANGE_IMAGE){
ImageManager.requestCharacter(params[0]);
}
});
}
break;
// Show Animation, Show Battle Animation
case 212: case 337:
if(params[1]) {
var animation = $dataAnimations[params[1]];
var name1 = animation.animation1Name;
var name2 = animation.animation2Name;
var hue1 = animation.animation1Hue;
var hue2 = animation.animation2Hue;
ImageManager.requestAnimation(name1, hue1);
ImageManager.requestAnimation(name2, hue2);
}
break;
// Change Player Followers
case 216:
if (params[0] === 0) {
$gamePlayer.followers().forEach(function(follower) {
var name = follower.characterName();
ImageManager.requestCharacter(name);
});
}
break;
// Show Picture
case 231:
ImageManager.requestPicture(params[1]);
break;
// Change Tileset
case 282:
var tileset = $dataTilesets[params[0]];
tileset.tilesetNames.forEach(function(tilesetName){
ImageManager.requestTileset(tilesetName);
});
break;
// Change Battle Back
case 283:
if ($gameParty.inBattle()) {
ImageManager.requestBattleback1(params[0]);
ImageManager.requestBattleback2(params[1]);
}
break;
// Change Parallax
case 284:
if (!$gameParty.inBattle()) {
ImageManager.requestParallax(params[0]);
}
break;
// Change Actor Images
case 322:
ImageManager.requestCharacter(params[1]);
ImageManager.requestFace(params[3]);
ImageManager.requestSvActor(params[5]);
break;
// Change Vehicle Image
case 323:
var vehicle = $gameMap.vehicle(params[0]);
if(vehicle){
ImageManager.requestCharacter(params[1]);
}
break;
// Enemy Transform
case 336:
var enemy = $dataEnemies[params[1]];
var name = enemy.battlerName;
var hue = enemy.battlerHue;
if ($gameSystem.isSideView()) {
ImageManager.requestSvEnemy(name, hue);
} else {
ImageManager.requestEnemy(name, hue);
}
break;
}
});
};