|
|
|
|
//=============================================================================
|
|
|
|
|
// rpg_objects.js v1.6.2
|
|
|
|
|
//=============================================================================
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
// 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 = [
|
|
|
|
|
'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.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 () {
|
|
|
|
|
var depth = 0;
|
|
|
|
|
while (this._index < this._list.length - 1) {
|
|
|
|
|
this._index++;
|
|
|
|
|
var command = this.currentCommand();
|
|
|
|
|
|
|
|
|
|
if (command.code === 112)
|
|
|
|
|
depth++;
|
|
|
|
|
|
|
|
|
|
if (command.code === 413) {
|
|
|
|
|
if (depth > 0)
|
|
|
|
|
depth--;
|
|
|
|
|
else
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
};
|