sakura-gozen/js/plugins/base/KMS_DebugUtil.js
2025-01-14 14:06:54 -06:00

5438 lines
159 KiB
JavaScript

//=============================================================================
// KMS_DebugUtil.js
// Last update: 2018/01/06
//=============================================================================
/*:
* @target MZ
* @plugindesc
* [v0.1.1] Improve debug functions.
*
* @author Kameo (Kamesoft)
*
* @param Variable input digits
* @default 9
* @desc Specify digits for inputting values. The parameter range is from 1 to 15.
*
* @param Map grid color
* @default rgba(255, 255, 255, 0.6)
* @desc Specify grid color for map transfer mode.
*
* @param Watch window font size
* @default 18
* @desc Font size for the watch window's text.
*
* @param Watch highlight color
* @default rgba(255, 224, 192, 0.6)
* @desc Specify background color for updated watch items by CSS color.
*
* @param Watch window width
* @default 360
* @desc Specify watch window width by pixel.
*
* @param Watch window position
* @default 0
* @desc
* Specify watch window position.
* 0: TopLeft 1: TopRight 2: BottomLeft 3: BottomRight
*
* @help
*
* ## Plugin command
*
* DebugUtil watch S 10 # Add switch:10 to the watch window
* DebugUtil watch V 20 # Add variable:20 to the watch window
*/
/*:ja
* @target MZ
* @plugindesc
* [v0.1.1] 標準のデバッグ画面を差し替え、様々な機能を追加します。
*
* @author かめお (Kamesoft)
*
* @param Variable input digits
* @default 9
* @desc 変数入力時の桁数を指定します。最大値は 15 です。
*
* @param Map grid color
* @default rgba(255, 255, 255, 0.6)
* @desc マップ移動画面のグリッド色を CSS カラーで指定します。
*
* @param Watch window font size
* @default 18
* @desc ウォッチウィンドウのフォントサイズを指定します。(標準のウィンドウでは 28 です)
*
* @param Watch highlight color
* @default rgba(255, 224, 192, 0.6)
* @desc ウォッチしている値が変化したときの背景色を CSS カラーで指定します。
*
* @param Watch window width
* @default 360
* @desc ウォッチウィンドウの幅をピクセル単位で指定します。
*
* @param Watch window position
* @default 0
* @desc
* ウォッチウィンドウの表示位置を指定します。
* 0: 左上 1: 右上 2: 左下 3: 右下
*
* ■ プラグインコマンド
*
* DebugUtil watch S 10 # スイッチ ID:10 をウォッチウィンドウに追加
* DebugUtil watch V 20 # 変数 ID:20 をウォッチウィンドウに追加
*/
// テストプレイ時のみ有効
if (Utils.isOptionValid("test")) {
var KMS = KMS || {};
// MapData の一時読み込み先
var $dataKmsTemporallyMapData = null;
// セーブデータからの復元を可能にするため、セーブデータに入るクラスをグローバルスコープに置く
function DebugWatchItemForSave() {
this.initialize.apply(this, arguments);
}
(function () {
"use strict";
// 定数
var Const = {
debug: false, // デバッグモード
pluginCode: "DebugUtil", // プラグインコード
pixiVersion: (function () {
var match = /^(\d+)\..*/gi.exec(PIXI.VERSION);
return match ? parseInt(match[1]) : 0;
})(),
mapTileScale: 0.5, // マップ移動画面のタイル表示倍率
mapGridLineWidth: 2, // マップ移動画面のグリッドの線幅
watchUpdateDuration: 30, // ウォッチ更新通知のアニメーション時間
WatchItemType: {
user: -1, // ユーザー定義 (TODO: 現状非対応)
none: 0, // なし
switch: 1, // スイッチ
variable: 2, // 変数
},
// ウォッチ項目の編集モード
WatchItemEditMode: {
add: 0, // 追加
edit: 1, // 編集
},
// ウォッチウィンドウ表示位置
WatchWindowPosition: {
topLeft: 0, // 左上
topRight: 1, // 右上
bottomLeft: 2, // 左下
bottomRight: 3, // 右下
},
};
var PluginName = "KMS_" + Const.pluginCode;
KMS.imported = KMS.imported || {};
KMS.imported[Const.pluginCode] = true;
KMS.DebugUtil = {};
// デバッグコマンドのリスト
KMS.DebugUtil.debugCommands = [];
// データベースリロード時に呼び出す処理のリスト
KMS.DebugUtil.databaseReloadHandlers = [];
// デフォルト値つきで文字列から int を解析
function parseIntWithDefault(param, defaultValue) {
var value = parseInt(param);
return isNaN(value) ? defaultValue : value;
}
var pluginParams = PluginManager.parameters(PluginName);
var Params = {};
Params.variableInputDigits = Math.min(
Math.max(
parseIntWithDefault(pluginParams["Variable input digits"], 9),
1
),
15
);
Params.formationButton = pluginParams["Formation button"] || "shift";
Params.mapGridColor =
pluginParams["Map grid color"] || "rgba(255, 255, 255, 0.6)";
Params.watchFontSize = Math.max(
parseIntWithDefault(pluginParams["Watch window font size"], 18),
1
);
Params.watchUpdateColor =
pluginParams["Watch update color"] || "rgba(255, 224, 192, 0.6)";
Params.watchWindowPosition = parseIntWithDefault(
pluginParams["Watch window position"],
0
);
Params.watchWindowWidth = Math.max(
parseIntWithDefault(pluginParams["Watch window width"], 360),
1
);
Params.WatchWindowPosition = Math.min(
Math.max(
parseIntWithDefault(
pluginParams["Watch window position"],
Const.WatchWindowPosition.topLeft
),
Const.WatchWindowPosition.topLeft
),
Const.WatchWindowPosition.bottomRight
);
// デバッグログ
var debuglog;
if (Const.debug) {
debuglog = function () {
console.log.apply(console, arguments);
};
} else {
debuglog = function () {};
}
var _Game_Interpreter_pluginCommand =
Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function (command, args) {
_Game_Interpreter_pluginCommand.call(this, command, args);
if (command !== Const.pluginCode) {
return;
}
switch (args[0]) {
case "watch": // ウォッチ ( {S|V} {id} )
{
var id = parseInt(args[2]);
if (!id) {
console.error(
"[%s %s] Invalid ID: %s",
Const.pluginCode,
args[0],
args[2]
);
return;
}
var item = new DebugWatchItem();
switch (args[1].toUpperCase()) {
case "S":
item.setupSwitch(id);
break;
case "V":
item.setupVariable(id);
break;
default:
console.error(
"[%s %s] Invalid type: %s",
Const.pluginCode,
args[0],
args[1]
);
return;
}
$gameTemp.registerDebugWatchItem(item);
}
break;
default:
// 不明なコマンド
console.error("[%s %s] Unknown command.", Const.pluginCode, args[0]);
break;
}
};
/**
* 日本語環境か否か
*/
var isJp = (function () {
var language =
(navigator.languages && navigator.languages[0]) ||
navigator.browserLanguage ||
navigator.userLanguage ||
navigator.language;
if (language) {
return language.substr(0, 2) === "ja";
} else {
return false;
}
})();
/**
* 指定桁数を指定文字で埋めた文字列を返す
*/
function padDigits(number, digits, pad) {
var holder = Array(digits + 1).join(pad);
return (holder + number).slice(-digits);
}
/**
* 他プラグインの影響を除いた素のパラメータ強化値 (Game_Actor に対して呼ぶ)
*/
var originalParamPlus = function (paramId) {
return this._paramPlus[paramId];
};
/**
* 文字列であるか判定
*/
function isString(obj) {
return typeof obj === "string" || obj instanceof String;
}
/**
* アイテム系のオブジェクトであるか判定
*/
function isItemObject(item) {
return (
DataManager.isSkill(item) ||
DataManager.isItem(item) ||
DataManager.isWeapon(item) ||
DataManager.isArmor(item)
);
}
/**
* アクターが作成されているか
* ($gameActors に対して呼ぶ)
*/
function isActorCreated(actorId) {
return !!this._data[actorId];
}
/**
* アクターがパーティ内に存在するか
* ($gameParty に対して呼ぶ)
*/
function containsActor(actorId) {
return this._actors.contains(actorId);
}
/**
* outActor を inActor の位置に加入させ、outActor を外す
* ($gameParty に対して呼ぶ)
*/
function replaceActor(inActorId, outActorId) {
if (this._actors.contains(outActorId)) {
for (var i = 0; i < this._actors.length; i++) {
if (this._actors[i] !== outActorId) {
continue;
}
if (inActorId) {
// in/out を入れ替える
this._actors[i] = inActorId;
break;
} else {
// in がなしの場合は out を外すだけ
this.removeActor(outActorId);
return;
}
}
} else if (inActorId) {
// in だけ存在する場合は単純に追加
this.addActor(inActorId);
return;
} else {
// out が不在で、in も存在しないので何もしない
return;
}
$gamePlayer.refresh();
$gameMap.requestRefresh();
}
//-----------------------------------------------------------------------------
// KMS
/**
* デバッグコマンドの登録
*
* command には id, name, onSelect の 3 つを持たせる。
*/
KMS.DebugUtil.registerCommand = function (command) {
// 有効判定
function isValid(cmd) {
return cmd.id && cmd.name && cmd.onSelect;
}
// 一致判定
function isSame(lhs, rhs) {
return lhs.id === rhs.id;
}
if (!isValid(command)) {
// 未指定のパラメータがある
return false;
}
var exists = KMS.DebugUtil.debugCommands.some(function (item) {
return isSame(item, command);
});
if (exists) {
// 登録済み
console.log(
'[%s] Command "%s" is already registered',
Const.pluginCode,
command.id
);
return false;
}
KMS.DebugUtil.debugCommands.push(command);
return true;
};
/**
* データベースリロード時に呼び出す処理を登録
*/
KMS.DebugUtil.registerDatabaseReloadHandler = function (handler) {
if (!handler) {
return false;
}
// 一致判定
function isSame(lhs, rhs) {
return lhs === rhs;
}
var exists = KMS.DebugUtil.databaseReloadHandlers.some(function (item) {
return isSame(item, command);
});
if (exists) {
// 登録済み
console.log(
"[%s] Specified reload handler is already registered",
Const.pluginCode
);
return false;
}
KMS.DebugUtil.databaseReloadHandlers.push(handler);
return true;
};
//-----------------------------------------------------------------------------
// DebugWatchItemForSave
//
// セーブデータに残す情報のみに絞ったウォッチ項目
DebugWatchItemForSave.constructor = DebugWatchItemForSave;
Object.defineProperties(DebugWatchItemForSave.prototype, {
type: {
get: function () {
return this._type;
},
set: function (value) {
this._type = value;
},
configurable: true,
},
id: {
get: function () {
return this._id;
},
set: function (value) {
this._id = value;
},
configurable: true,
},
});
DebugWatchItemForSave.prototype.initialize = function () {
this._type = Const.WatchItemType.switch;
this._id = 1;
};
/**
* 実際の表示用ウォッチ項目に変換
*/
DebugWatchItemForSave.prototype.toActualItem = function () {
var item = new DebugWatchItem();
switch (this._type) {
case Const.WatchItemType.switch:
item.setupSwitch(this._id);
break;
case Const.WatchItemType.variable:
item.setupVariable(this._id);
break;
default:
console.error(
"%s: toDisplayItem() failed. Invalid item type (%d)",
Const.pluginCode,
this._type
);
return null;
}
return item;
};
//-----------------------------------------------------------------------------
// DebugWatchItem
//
// ウォッチウィンドウに表示する項目
function DebugWatchItem() {
this.initialize.apply(this, arguments);
}
DebugWatchItem.prototype.constructor = DebugWatchItem;
Object.defineProperties(DebugWatchItem.prototype, {
type: {
get: function () {
return this._type;
},
configurable: true,
},
typeSymbol: {
get: function () {
return this._typeSymbol;
},
configurable: true,
},
typename: {
get: function () {
return this._typename;
},
configurable: true,
},
id: {
get: function () {
return this._id;
},
configurable: true,
},
name: {
get: function () {
return this._name;
},
configurable: true,
},
});
/**
* デフォルトの取得関数
*/
DebugWatchItem.defaultGetter = function () {
return "";
};
/**
* スイッチ用の生値取得関数
*/
DebugWatchItem.switchRawValueGetter = function () {
return $gameSwitches.value(this._id);
};
/**
* スイッチ用の表示値取得関数
*/
DebugWatchItem.switchDispValueGetter = function () {
return this._getterRaw.call(this) ? "ON" : "OFF";
};
/**
* 変数用の値取得関数
*/
DebugWatchItem.variableValueGetter = function () {
return $gameVariables.value(this._id);
};
/**
* 初期化
*/
DebugWatchItem.prototype.initialize = function () {
this.invalidate();
};
/**
* ユーザー定義か
*/
DebugWatchItem.prototype.isUserDef = function () {
return this._type === Const.WatchItemType.user;
};
/**
* 一致判定
*/
DebugWatchItem.prototype.equals = function (rhs) {
if (!(rhs instanceof DebugWatchItem) || this._type !== rhs._type) {
// タイプ違い
return false;
}
if (this.isUserDef() && rhs.isUserDef()) {
// ユーザー定義の場合は名前以外完全一致を要求
return (
this._id === rhs._id &&
this._getterRaw === rhs._getterRaw &&
this._getterDisp === rhs._getterDisp
);
} else {
return this._id === rhs._id;
}
};
/**
* 生値を取得
*/
DebugWatchItem.prototype.getRaw = function () {
return this._getterRaw.call(this);
};
/**
* 表示用の値を取得
*/
DebugWatchItem.prototype.getDisp = function () {
return this._getterDisp.call(this);
};
/**
* 値を監視して更新を通知
*/
DebugWatchItem.prototype.checkUpdate = function () {
var currValue = this.getRaw();
if (this._lastValue !== currValue) {
this._lastValue = currValue;
return true;
} else {
return false;
}
};
/**
* 無効化
*/
DebugWatchItem.prototype.invalidate = function () {
this._type = Const.WatchItemType.none;
this._typeSymbol = "";
this._typename = "";
this._id = 0;
this._name = "";
this._getterRaw = DebugWatchItem.defaultGetter;
this._getterDisp = DebugWatchItem.defaultGetter;
this._lastValue = null;
};
/**
* スイッチを表示するようにセットアップ
*/
DebugWatchItem.prototype.setupSwitch = function (switchId) {
this._type = Const.WatchItemType.switch;
this._id = switchId.clamp(1, $dataSystem.switches.length - 1);
this.refresh();
};
/**
* 変数を表示するようにセットアップ
*/
DebugWatchItem.prototype.setupVariable = function (variableId) {
this._type = Const.WatchItemType.variable;
this._id = variableId.clamp(1, $dataSystem.variables.length - 1);
this.refresh();
};
/**
* 表示する情報の再構築 (データベースリロード時にも呼ぶ)
*/
DebugWatchItem.prototype.refresh = function () {
switch (this._type) {
case Const.WatchItemType.switch:
if (this._id >= $dataSystem.switches.length) {
this.invalidate();
return;
}
this._typeSymbol = "S";
this._typename = isJp ? "スイッチ" : "Switch";
this._name = $dataSystem.switches[this._id];
this._getterRaw = DebugWatchItem.switchRawValueGetter;
this._getterDisp = DebugWatchItem.switchDispValueGetter;
break;
case Const.WatchItemType.variable:
if (this._id >= $dataSystem.variables.length) {
this.invalidate();
return;
}
this._typeSymbol = "V";
this._typename = isJp ? "変数" : "Variable";
this._name = $dataSystem.variables[this._id];
this._getterRaw = DebugWatchItem.variableValueGetter;
this._getterDisp = DebugWatchItem.variableValueGetter;
break;
default:
// 何もしない
break;
}
// 更新通知用の初期値を取得
this._lastValue = this.getRaw();
};
/**
* セーブ用のデータに変換
*/
DebugWatchItem.prototype.toSaveItem = function () {
var item = new DebugWatchItemForSave();
item.type = this._type;
item.id = this._id;
return item;
};
/**
* 別の項目からコピー
*/
DebugWatchItem.prototype.copyFrom = function (item) {
if (!item) {
this.invalidate();
return;
}
switch (item.type) {
case Const.WatchItemType.switch:
this.setupSwitch(item.id);
break;
case Const.WatchItemType.variable:
this.setupVariable(item.id);
break;
default:
this.invalidate();
break;
}
};
//-----------------------------------------------------------------------------
// DataManager
/**
* データベースファイルの同期読み込み
* ※ 警告が出るので使わない
*/
/*
DataManager.loadDataFileSync = function(name, src)
{
var xhr = new XMLHttpRequest();
var url = 'data/' + src;
xhr.open('GET', url, false);
xhr.overrideMimeType('application/json');
window[name] = null;
xhr.send(null);
if (xhr.status < 400)
{
window[name] = JSON.parse(xhr.responseText);
DataManager.onLoad(window[name]);
}
else
{
DataManager._errorUrl = DataManager._errorUrl || url;
}
};
*/
/**
* 一時マップデータの読み込み
*/
DataManager.loadKmsTemporallyMapData = function (mapId) {
if (mapId > 0) {
var filename = "Map%1.json".format(mapId.padZero(3));
this.loadDataFile("$dataKmsTemporallyMapData", filename);
} else {
var dataBackup = $dataMap;
this.makeEmptyMap();
$dataKmsTemporallyMapData = $dataMap;
$dataMap = dataBackup;
}
};
/**
* 一時マップデータの読み込みが完了しているか
*/
DataManager.isKmsTemporallyMapLoaded = function () {
this.checkError();
return !!$dataKmsTemporallyMapData;
};
//-----------------------------------------------------------------------------
// TextManager
TextManager.DebugUtil = {};
var simpleGetter = function (text) {
return {
get: function () {
return text;
},
configurable: true,
};
};
Object.defineProperties(TextManager.DebugUtil, {
sceneTitle: simpleGetter(isJp ? "デバッグメニュー" : "Debug menu"),
// コマンド名
itemNumber: simpleGetter(
isJp ? "アイテム所持数変更" : "Edit item numbers"
),
actorParam: simpleGetter(isJp ? "アクター編集" : "Edit actor's param"),
member: simpleGetter(isJp ? "メンバー変更" : "Edit party"),
reloadMap: simpleGetter(isJp ? "マップ再読み込み" : "Reload map"),
loadDatabase: simpleGetter(
isJp ? "データベース再読み込み" : "Reload database"
),
transfer: simpleGetter(isJp ? "場所移動" : "Transfer"),
switchVar: simpleGetter(
isJp ? "スイッチ・変数操作" : "Edit switches/variables"
),
selfSwitch: simpleGetter(
isJp ? "セルフスイッチ操作" : "Edit self-switches"
),
systemValue: simpleGetter(isJp ? "システム値操作" : "Edit system values"),
watchWindow: simpleGetter(
isJp ? "スイッチ・変数監視" : "Watch switches/variables"
),
encounter: simpleGetter(isJp ? "エンカウント" : "Encounter"),
dispPassage: simpleGetter(isJp ? "通行可否表示" : "Display passage"),
// パラメータ名
battleCount: simpleGetter(isJp ? "戦闘回数" : "Battle count"),
winCount: simpleGetter(isJp ? "勝利回数" : "Victory count"),
escapeCount: simpleGetter(isJp ? "逃走回数" : "Escape count"),
saveCount: simpleGetter(isJp ? "セーブ回数" : "Save count"),
// その他
activeParty: simpleGetter(isJp ? "パーティ内メンバー" : "Active member"),
reserveParty: simpleGetter(
isJp ? "パーティ外メンバー" : "Reserve member"
),
addToParty: simpleGetter(isJp ? "追加" : "Add"),
removeFromParty: simpleGetter(isJp ? "外す" : "Remove"),
tilePosition: simpleGetter(isJp ? "移動先" : "Position"),
mapSize: simpleGetter(isJp ? "マップサイズ" : "Map size"),
encounterRandom: simpleGetter(
isJp ? "現在のマップからランダム" : "Random in current map"
),
addWatchItem: simpleGetter(isJp ? "追加" : "Add"),
watchItemType: simpleGetter(isJp ? "タイプ" : "Type"),
watchItemRemove: simpleGetter(isJp ? "削除" : "Remove"),
});
//-----------------------------------------------------------------------------
// Game_Temp
var _Game_Temp_initialize = Game_Temp.prototype.initialize;
Game_Temp.prototype.initialize = function () {
_Game_Temp_initialize.call(this);
this.clearDebugWatchRefreshRequest();
this.clearDebugWatchItem();
};
/**
* ウォッチウィンドウを再構築するか
*/
Game_Temp.prototype.isDebugWatchRefreshRequested = function () {
return this._debugWatchRefreshRequested;
};
/**
* ウォッチウィンドウの再構築要求
*/
Game_Temp.prototype.requestDebugWatchRefresh = function () {
this._debugWatchRefreshRequested = true;
};
/**
* ウォッチウィンドウの再構築要求を解除
*/
Game_Temp.prototype.clearDebugWatchRefreshRequest = function () {
this._debugWatchRefreshRequested = false;
};
/**
* ウォッチウィンドウに表示する項目を登録
*/
Game_Temp.prototype.registerDebugWatchItem = function (item) {
if (!item) {
return;
}
for (var i = 0; i < this._debugWatchItems.length; i++) {
if (this._debugWatchItems[i].equals(item)) {
// 同じ設定のものが登録済み
return;
}
}
var newItem = new DebugWatchItem();
newItem.copyFrom(item);
this._debugWatchItems.push(newItem);
this.requestDebugWatchRefresh();
};
/**
* ウォッチウィンドウに表示する項目を差し替え
*/
Game_Temp.prototype.replaceDebugWatchItem = function (item, index) {
if (!item || this._debugWatchItems.length <= index) {
return;
}
this._debugWatchItems[index] = item;
this.requestDebugWatchRefresh();
};
/**
* ウォッチウィンドウに表示する項目を解除
*/
Game_Temp.prototype.removeDebugWatchItem = function (item) {
if (!item) {
return;
}
this._debugWatchItems = this._debugWatchItems.filter(function (v) {
return !v.equals(item);
});
this.requestDebugWatchRefresh();
};
/**
* ウォッチウィンドウに表示する項目を全解除
*/
Game_Temp.prototype.clearDebugWatchItem = function () {
this._debugWatchItems = [];
};
/**
* ウォッチウィンドウに表示する項目の一覧を取得
*/
Game_Temp.prototype.getDebugWatchItemList = function () {
return this._debugWatchItems;
};
//-----------------------------------------------------------------------------
// Game_System
var _Game_System_onBeforeSave = Game_System.prototype.onBeforeSave;
Game_System.prototype.onBeforeSave = function () {
_Game_System_onBeforeSave.call(this);
this.createDebugWatchItemsForSave();
};
var _Game_System_onAfterLoad = Game_System.prototype.onAfterLoad;
Game_System.prototype.onAfterLoad = function () {
_Game_System_onAfterLoad.call(this);
this.restoreDebugWatchItemsFromSave();
};
/**
* セーブ用のウォッチ項目リストを作成
*
* DebugWatchItem の全メンバを保存すると無駄があるので、最小限の情報のみ保存する
*/
Game_System.prototype.createDebugWatchItemsForSave = function () {
var list = $gameTemp.getDebugWatchItemList();
if (list.length === 0) {
// ウォッチリストが空なら何もセーブしない
delete this._debugWatchItemList;
return;
}
this._debugWatchItemList = [];
list.forEach(function (item) {
this._debugWatchItemList.push(item.toSaveItem());
}, this);
};
/**
* セーブ用のウォッチ項目リストからウォッチリストを復元
*/
Game_System.prototype.restoreDebugWatchItemsFromSave = function () {
if (!this._debugWatchItemList) {
return;
}
$gameTemp.clearDebugWatchItem();
this._debugWatchItemList.forEach(function (item) {
$gameTemp.registerDebugWatchItem(item.toActualItem());
}, this);
};
//-----------------------------------------------------------------------------
// Sprite_DebugMapDestination
//
// デバッグ画面で移動先タイルを強調表示するスプライト
function Sprite_DebugMapDestination() {
this.initialize.apply(this, arguments);
}
Sprite_DebugMapDestination.prototype = Object.create(
Sprite_Destination.prototype
);
Sprite_DebugMapDestination.prototype.constructor =
Sprite_DebugMapDestination;
Sprite_DebugMapDestination.prototype.initialize = function () {
Sprite_Destination.prototype.initialize.call(this);
this.blendMode = 0;
this._map = null;
this._destination = new Point();
this._visibleArea = new Rectangle();
};
/**
* 参照するマップオブジェクトを設定
*/
Sprite_DebugMapDestination.prototype.setMap = function (map) {
this._map = map;
};
/**
* 目的地のタイル座標を設定
*/
Sprite_DebugMapDestination.prototype.setDestination = function (x, y) {
this._destination.x = x;
this._destination.y = y;
};
/**
* 可視領域を設定
*/
Sprite_DebugMapDestination.prototype.setVisibleArea = function (
x,
y,
width,
height
) {
this._visibleArea.x = x;
this._visibleArea.y = y;
this._visibleArea.width = width;
this._visibleArea.height = height;
};
Sprite_DebugMapDestination.prototype.update = function () {
// 判定自体を書き直すので、Sprite の方を呼ぶ
Sprite.prototype.update.call(this);
if (this.visible) {
this.updateAnimation();
this.updatePosition();
} else {
this._frameCount = 0;
}
};
Sprite_DebugMapDestination.prototype.updatePosition = function () {
if (!this._map) {
return;
}
var tileWidth = this._map.tileWidth();
var tileHeight = this._map.tileHeight();
this.x = (this._map.adjustX(this._destination.x) + 0.5) * tileWidth;
this.y = (this._map.adjustY(this._destination.y) + 0.5) * tileHeight;
// 可視領域外に出た場合は消す
if (
this.x < this._visibleArea.x ||
this.y < this._visibleArea.y ||
this.x > this._visibleArea.width ||
this.y > this._visibleArea.height
) {
this.opacity = 0;
}
};
//-----------------------------------------------------------------------------
// Sprite_DebugWatchUpdate
//
// ウォッチウィンドウで値の更新を通知するスプライト
function Sprite_DebugWatchUpdate() {
this.initialize.apply(this, arguments);
}
Sprite_DebugWatchUpdate.prototype = Object.create(Sprite.prototype);
Sprite_DebugWatchUpdate.prototype.constructor = Sprite_DebugWatchUpdate;
Sprite_DebugWatchUpdate.prototype.initialize = function () {
Sprite.prototype.initialize.call(this);
this._duration = 0;
this.visible = false;
};
/**
* 更新アニメーションを実行
*/
Sprite_DebugWatchUpdate.prototype.animate = function () {
this._duration = Const.watchUpdateDuration;
this.visible = true;
};
/**
* セットアップ
*/
Sprite_DebugWatchUpdate.prototype.setup = function (x, y, width, height) {
this._bitmap = new Bitmap(width, height);
this._bitmap.fillRect(0, 0, width, height, Params.watchUpdateColor);
this.setFrame(0, 0, width, height);
//this.blendMode = Graphics.BLEND_ADD;
this.move(x, y);
};
Sprite_DebugWatchUpdate.prototype.update = function () {
Sprite.prototype.update.call(this);
if (this.visible) {
this.updateAnimation();
}
};
/**
* アニメーションの更新
*/
Sprite_DebugWatchUpdate.prototype.updateAnimation = function () {
this.opacity = (255 * this._duration) / Const.watchUpdateDuration;
this._duration--;
if (this._duration < 0) {
this.visible = false;
}
};
//-----------------------------------------------------------------------------
// MZ対応のための拡張
function _textPadding() {
return 6;
}
function _standardPadding() {
return $gameSystem.windowPadding();
}
function _standardFontSize() {
return $gameSystem.mainFontSize();
}
function _itemRectForText(window, index) {
var rect = window.itemRect(index);
rect.x += _textPadding();
rect.width -= _textPadding() * 2;
return rect;
}
//-----------------------------------------------------------------------------
// Window_DebugEdit
/**
* 現在のモードを取得
*/
Window_DebugEdit.prototype.getMode = function () {
return this._mode;
};
//-----------------------------------------------------------------------------
// Window_DebugTitle
//
// デバッグ画面で機能名を表示するウィンドウ
function Window_DebugTitle() {
this.initialize.apply(this, arguments);
}
Window_DebugTitle.prototype = Object.create(Window_Help.prototype);
Window_DebugTitle.prototype.constructor = Window_DebugTitle;
Window_DebugTitle.prototype.initialize = function (width, numLines) {
const wx = 0;
const wy = 0;
const ww = Graphics.boxWidth;
const wh = this.fittingHeight(numLines);
Window_Help.prototype.initialize.call(
this,
new Rectangle(wx, wy, ww, wh)
);
this.width = width;
this.createContents();
};
Window_DebugTitle.prototype.refresh = function () {
this.contents.clear();
var x = _textPadding();
var w = this.contentsWidth() - _textPadding() * 2;
this.contents.drawText(this._text, x, 0, w, this.lineHeight(), "center");
};
//-----------------------------------------------------------------------------
// Window_DebugCommand
//
// デバッグ機能を選択するウィンドウ
function Window_DebugCommand() {
this.initialize.apply(this, arguments);
}
Window_DebugCommand.prototype = Object.create(Window_Command.prototype);
Window_DebugCommand.prototype.constructor = Window_DebugCommand;
Window_DebugCommand.prototype.initialize = function (x, y) {
const rect = new Rectangle(x, y, 240, this.fittingHeight(6));
Window_Command.prototype.initialize.call(this, rect);
this.selectLast();
this.activate();
this.refresh();
};
Window_DebugCommand.prototype.numVisibleRows = function () {
return Math.ceil(this.maxItems() / this.maxCols());
};
Window_DebugCommand._lastCommandSymbol = null;
Window_DebugCommand.initCommandPosition = function () {
this._lastCommandSymbol = null;
};
Window_DebugCommand.prototype.windowWidth = function () {
return Graphics.boxWidth - 64;
};
Window_DebugCommand.prototype.maxCols = function () {
return 2;
};
Window_DebugCommand.prototype.makeCommandList = function () {
this.addCommand(TextManager.DebugUtil.itemNumber, "itemNumber");
this.addCommand(TextManager.DebugUtil.actorParam, "actorParam");
this.addCommand(TextManager.DebugUtil.member, "member");
this.addCommand(TextManager.DebugUtil.reloadMap, "reloadMap");
this.addCommand(TextManager.DebugUtil.loadDatabase, "loadDatabase");
this.addCommand(TextManager.DebugUtil.transfer, "transfer");
this.addCommand(TextManager.DebugUtil.switchVar, "switchVar");
this.addCommand(TextManager.DebugUtil.selfSwitch, "selfSwitch");
this.addCommand(TextManager.DebugUtil.systemValue, "systemValue");
this.addCommand(TextManager.DebugUtil.watchWindow, "watchWindow");
this.addCommand(TextManager.DebugUtil.encounter, "encounter");
//this.addCommand(TextManager.DebugUtil.dispPassage, 'dispPassage');
//this.addCommand(TextManager.DebugUtil.loadJs, 'loadJs');
// 追加コマンド
KMS.DebugUtil.debugCommands.forEach(function (command) {
this.addCommand(command.name, command.id);
}, this);
};
Window_DebugCommand.prototype.processOk = function () {
Window_DebugCommand._lastCommandSymbol = this.currentSymbol();
Window_Command.prototype.processOk.call(this);
};
Window_DebugCommand.prototype.selectLast = function () {
if (Window_DebugCommand._lastCommandSymbol) {
this.selectSymbol(Window_DebugCommand._lastCommandSymbol);
} else {
this.selectSymbol("itemNumber");
}
};
//-----------------------------------------------------------------------------
// Window_DebugNumberInput
//
// デバッグモードで値を入力するためのウィンドウ
function Window_DebugNumberInput() {
this.initialize.apply(this, arguments);
}
Window_DebugNumberInput.prototype = Object.create(
Window_NumberInput.prototype
);
Window_DebugNumberInput.prototype.constructor = Window_DebugNumberInput;
Object.defineProperty(Window_DebugNumberInput.prototype, "number", {
get: function () {
return this._number * (this._isNegative ? -1 : 1);
},
configurable: true,
});
Window_DebugNumberInput.prototype.initialize = function () {
Window_NumberInput.prototype.initialize.call(this);
this._number = 0;
this._maxDigits = 1;
this._isAllowNegative = false;
this._isNegative = false;
this._caption = null;
this._okCallback = null;
};
Window_DebugNumberInput.prototype.windowWidth = function () {
var captionWidth = _standardPadding() * 2;
if (isItemObject(this._caption)) {
captionWidth += this.textWidth(this._caption.name) + 32 + 4;
} else if (isString(this._caption)) {
captionWidth += this.textWidth(this._caption) + 4;
}
var originWidth = Window_NumberInput.prototype.windowWidth.call(this);
return Math.max(originWidth, captionWidth);
};
Window_DebugNumberInput.prototype.windowHeight = function () {
return this.fittingHeight(this._caption ? 2 : 1);
};
Window_DebugNumberInput.prototype.maxCols = function () {
return (
Window_NumberInput.prototype.maxCols.call(this) +
(this._isAllowNegative ? 1 : 0)
);
};
Window_NumberInput.prototype.maxItems = function () {
return this.maxCols();
};
Window_DebugNumberInput.prototype.setAllowNegative = function (enabled) {
this._isAllowNegative = enabled;
};
Window_DebugNumberInput.prototype.setCaption = function (caption) {
this._caption = caption;
this.updatePlacement();
this.refresh();
};
/**
* 値の入力を開始
*/
Window_DebugNumberInput.prototype.start = function (
number,
maxDigits,
callback
) {
this._isNegative = number < 0;
this._number = Math.abs(number);
this._number = this._number.clamp(0, Math.pow(10, maxDigits) - 1);
this._maxDigits = maxDigits;
this._okCallback = callback;
this.updatePlacement();
this.placeButtons();
//this.updateButtonsVisiblity();
this.createContents();
this.refresh();
this.open();
this.activate();
this.select(this._maxDigits - 1 + (this._isAllowNegative ? 1 : 0));
};
Window_DebugNumberInput.prototype.changeDigit = function (up) {
var index = this.index();
if (this._isAllowNegative) {
if (index === 0) {
// +/- 切り替え
this._isNegative = !this._isNegative;
this.refresh();
SoundManager.playCursor();
return;
}
// +/- 部分の桁位置をずらす
index--;
}
var place = Math.pow(10, this._maxDigits - 1 - index);
var n = Math.floor(this._number / place) % 10;
this._number -= n * place;
if (up) {
n = (n + 1) % 10;
} else {
n = (n + 9) % 10;
}
this._number += n * place;
this.refresh();
SoundManager.playCursor();
};
Window_DebugNumberInput.prototype.itemRect = function (index) {
var rect = Window_NumberInput.prototype.itemRect.call(this, index);
if (this._caption) {
rect.y += this.lineHeight();
}
return rect;
};
Window_DebugNumberInput.prototype.drawItem = function (index) {
var rect = this.itemRect(index);
var align = "center";
var sign = this._isAllowNegative ? (this._isNegative ? "-" : "+") : "";
var s = "%1%2".format(sign, this._number.padZero(this._maxDigits));
var c = s.slice(index, index + 1);
this.resetTextColor();
this.drawText(c, rect.x, rect.y, rect.width, align);
};
Window_DebugNumberInput.prototype.drawCaption = function () {
if (!this._caption) {
return;
}
if (isItemObject(this._caption)) {
this.drawItemName(this._caption, 0, 0, this.contentsWidth());
} else if (isString(this._caption)) {
this.changeTextColor(this.systemColor());
this.drawText(this._caption, 0, 0, this.contentsWidth());
this.resetTextColor();
}
};
Window_DebugNumberInput.prototype.refresh = function () {
if (this.contents) {
Window_NumberInput.prototype.refresh.call(this);
this.drawCaption();
}
};
/**
* 表示位置・サイズの調整
*/
Window_DebugNumberInput.prototype.updatePlacement = function () {
this.width = this.windowWidth();
this.height = this.windowHeight();
this.x = (Graphics.boxWidth - this.width) / 2;
this.y = (Graphics.boxHeight - this.height) / 2;
};
Window_DebugNumberInput.prototype.buttonY = function () {
var spacing = 8;
return this.height + spacing;
};
Window_DebugNumberInput.prototype.isCancelEnabled = function () {
return true;
};
Window_DebugNumberInput.prototype.processOk = function () {
SoundManager.playOk();
if (this._okCallback) {
this._okCallback(this.number);
}
this.updateInputData();
this.deactivate();
this.close();
};
//-----------------------------------------------------------------------------
// Window_DebugItemList
//
// アイテム所持数編集ウィンドウ
function Window_DebugItemList() {
this.initialize.apply(this, arguments);
}
Window_DebugItemList.prototype = Object.create(Window_Selectable.prototype);
Window_DebugItemList.prototype.constructor = Window_DebugItemList;
Window_DebugItemList._lastIndex = 0;
Window_DebugItemList.prototype.initialize = function (x, y, width, height) {
Window_Selectable.prototype.initialize.call(
this,
new Rectangle(x, y, width, height)
);
this.refresh();
this.selectLast();
this.hide();
};
Window_DebugItemList.prototype.maxCols = function () {
return 4;
};
Window_DebugItemList.prototype.maxItems = function () {
return this._data ? this._data.length : 0;
};
Window_DebugItemList.prototype.item = function () {
var index = this.index();
return index >= 0 ? this._data[index] : null;
};
Window_DebugItemList.prototype.selectLast = function () {
var index = this._data.indexOf(Window_DebugItemList._lastIndex);
this.select(index >= 0 ? index : 0);
};
Window_DebugItemList.prototype.makeItemList = function () {
this._data = $dataItems.slice(1);
this._data = this._data.concat($dataWeapons.slice(1));
this._data = this._data.concat($dataArmors.slice(1));
};
Window_DebugItemList.prototype.refresh = function () {
this.makeItemList();
this.createContents();
this.drawAllItems();
};
Window_DebugItemList.prototype.drawItem = function (index) {
var item = this._data[index];
if (!item) {
return;
}
var numberWidth = this.numberWidth();
var rect = _itemRectForText(this, index);
this.drawItemName(item, rect.x, rect.y, rect.width - numberWidth);
this.drawItemNumber(item, rect.x, rect.y, rect.width);
};
Window_DebugItemList.prototype.numberWidth = function () {
return this.textWidth("000");
};
Window_DebugItemList.prototype.drawItemNumber = function (
item,
x,
y,
width
) {
this.drawText(":", x, y, width - this.textWidth("00"), "right");
this.drawText($gameParty.numItems(item), x, y, width, "right");
};
Window_DebugItemList.prototype.processCancel = function () {
Window_Selectable.prototype.processCancel.call(this);
Window_DebugItemList.lastTopRow = this.topRow();
Window_DebugItemList.lastIndex = this.index();
};
Window_DebugItemList.prototype.updateHelp = function () {
this.setHelpWindowItem(this.item());
};
//-----------------------------------------------------------------------------
// Window_DebugActorList
//
// デバッグモード用アクター選択ウィンドウ
function Window_DebugActorList() {
this.initialize.apply(this, arguments);
}
Window_DebugActorList.prototype = Object.create(
Window_Selectable.prototype
);
Window_DebugActorList.prototype.constructor = Window_DebugActorList;
Window_DebugActorList.prototype.initialize = function (
x,
y,
width,
height
) {
Window_Selectable.prototype.initialize.call(
this,
new Rectangle(x, y, width, height)
);
this._data = [];
this.refresh();
this.hide();
this.selectLast();
};
Window_DebugActorList._lastIndex = 0;
Window_DebugActorList.prototype.maxCols = function () {
return 1;
};
Window_DebugActorList.prototype.spacing = function () {
return 48;
};
Window_DebugActorList.prototype.maxItems = function () {
return this._data ? this._data.length : 1;
};
Window_DebugActorList.prototype.item = function () {
var index = this.index();
return this._data && index >= 0 ? this._data[index] : null;
};
Window_DebugActorList.prototype.includes = function (item) {
return item != null;
};
Window_DebugActorList.prototype.isEnabled = function (item) {
return true;
};
Window_DebugActorList.prototype.select = function (index) {
Window_Selectable.prototype.select.call(this, index);
if (this._statusWindow) {
this._statusWindow.setActor(this.item());
}
};
Window_DebugActorList.prototype.setStatusWindow = function (window) {
this._statusWindow = window;
this.select(this.index());
};
Window_DebugActorList.prototype.makeItemList = function () {
this._data = [];
for (var i = 1; i < $dataActors.length; i++) {
this._data.push($gameActors.actor(i));
}
};
Window_DebugActorList.prototype.selectLast = function () {
var index = this._data.indexOf(Window_DebugActorList._lastIndex);
this.select(index >= 0 ? index : 0);
};
Window_DebugActorList.prototype.drawItem = function (index) {
var item = this._data[index];
if (!item) {
return;
}
this.changePaintOpacity(this.isEnabled(item));
this.resetTextColor();
var text = "%1:%2".format(item.actorId().padZero(4), item.name());
var rect = _itemRectForText(this, index);
this.drawText(text, rect.x, rect.y, rect.width);
this.changePaintOpacity(1);
};
Window_DebugActorList.prototype.refresh = function () {
this.makeItemList();
this.createContents();
this.drawAllItems();
};
//-----------------------------------------------------------------------------
// Window_DebugActorParam
//
// デバッグ用アクターパラメータ変更ウィンドウ
function Window_DebugActorParam() {
this.initialize.apply(this, arguments);
}
Window_DebugActorParam.prototype = Object.create(
Window_Selectable.prototype
);
Window_DebugActorParam.prototype.constructor = Window_DebugActorParam;
Window_DebugActorParam.prototype.initialize = function (
x,
y,
width,
height
) {
this._data = [
"level",
"skill",
"hp",
"mp",
"atk",
"def",
"mat",
"mdf",
"agi",
"luk",
];
this._paramId = {
level: null,
skill: null,
hp: 0,
mp: 1,
atk: 2,
def: 3,
mat: 4,
mdf: 5,
agi: 6,
luk: 7,
};
this._actor = null;
Window_Selectable.prototype.initialize.call(
this,
new Rectangle(x, y, width, height)
);
this.createContents();
this.refresh();
this.hide();
this.selectLast();
};
Window_DebugActorParam._lastIndex = 0;
Window_DebugActorParam.prototype.maxCols = function () {
return 1;
};
Window_DebugActorParam.prototype.maxItems = function () {
return this._data ? this._data.length : 1;
};
Window_DebugActorParam.prototype.item = function () {
var index = this.index();
return this._data && index >= 0 ? this._data[index] : null;
};
Window_DebugActorParam.prototype.paramId = function () {
return this._paramId[this.item()];
};
Window_DebugActorParam.prototype.setActor = function (actor) {
if (this._actor !== actor) {
this._actor = actor;
this.refresh();
}
};
Window_DebugActorParam.prototype.selectLast = function () {
var index = this._data.indexOf(Window_DebugActorParam._lastIndex);
this.select(index >= 0 ? index : 0);
};
Window_DebugActorParam.prototype.drawItem = function (index) {
var item = this._data[index];
if (!item) {
return;
}
var rect = _itemRectForText(this, index);
var paramName;
var paramValue1;
var paramValue2;
var paramId = this._paramId[item];
if (paramId != null) {
// 通常パラメータはパラメータ名と現在値、加算値を表示
paramName = TextManager.param(paramId) + "+";
paramValue1 = originalParamPlus.call(this._actor, paramId);
paramValue2 = this._actor.param(paramId);
} else {
paramName = TextManager[item];
switch (item) {
case "level":
paramValue1 = this._actor.level;
break;
case "skill":
paramValue1 = ">";
break;
default:
return;
}
}
this.changeTextColor(this.systemColor());
this.drawText(paramName, 0, rect.y, 160);
this.resetTextColor();
this.drawText(paramValue1, 160, rect.y, 90, "right");
if (paramValue2 != null) {
this.drawText(
"(%1)".format(padDigits(paramValue2, 6, " ")),
270,
rect.y,
120
);
}
};
Window_DebugActorParam.prototype.refresh = function () {
this.contents.clear();
if (!this._actor) {
return;
}
this.drawAllItems();
};
//-----------------------------------------------------------------------------
// Window_DebugActorSkill
//
// デバッグ用アクタースキル編集ウィンドウ
function Window_DebugActorSkill() {
this.initialize.apply(this, arguments);
}
Window_DebugActorSkill.prototype = Object.create(
Window_SkillList.prototype
);
Window_DebugActorSkill.prototype.constructor = Window_DebugActorSkill;
Window_DebugActorSkill.prototype.initialize = function (
x,
y,
width,
height
) {
Window_SkillList.prototype.initialize.call(
this,
new Rectangle(x, y, width, height)
);
this.hide();
};
Window_DebugActorSkill.prototype.isCurrentItemEnabled = function () {
return true;
};
Window_DebugActorSkill.prototype.includes = function (item) {
return item != null;
};
Window_DebugActorSkill.prototype.isEnabled = function (item) {
return this._actor && this._actor.isLearnedSkill(item.id);
};
Window_DebugActorSkill.prototype.makeItemList = function () {
if (!this._actor) {
this._data = [];
return;
}
this._data = $dataSkills.filter(function (item) {
return this.includes(item);
}, this);
};
Window_DebugActorSkill.prototype.selectLast = function () {
this.select(0);
};
Window_DebugActorSkill.prototype.drawItem = function (index) {
var skill = this._data[index];
if (!skill) {
return;
}
var rect = _itemRectForText(this, index);
this.changePaintOpacity(this.isEnabled(skill));
this.drawItemName(skill, rect.x, rect.y, rect.width);
this.changePaintOpacity(1);
};
/**
* 項目の再描画
*/
Window_DebugActorSkill.prototype.redrawItem = function (index) {
this.clearItem(index);
this.drawItem(index);
};
//-----------------------------------------------------------------------------
// Window_DebugPartyListBase
//
// デバッグモード用パーティメンバー選択ウィンドウの基底クラス
function Window_DebugPartyListBase() {
this.initialize.apply(this, arguments);
}
Window_DebugPartyListBase.prototype = Object.create(
Window_Selectable.prototype
);
Window_DebugPartyListBase.prototype.constructor = Window_DebugPartyListBase;
Window_DebugPartyListBase.prototype.initialize = function (
x,
y,
width,
height
) {
Window_Selectable.prototype.initialize.call(
this,
new Rectangle(x, y, width, height)
);
this._data = [];
this.refresh();
this.hide();
};
Window_DebugPartyListBase.prototype.maxCols = function () {
return 1;
};
Window_DebugPartyListBase.prototype.maxItems = function () {
return this._data ? this._data.length : 1;
};
Window_DebugPartyListBase.prototype.item = function () {
var index = this.index();
return this._data && index >= 0 ? this._data[index] : null;
};
Window_DebugPartyListBase.prototype.makeItemList = function () {
this._data = [];
// 継承先で追加
};
Window_DebugPartyListBase.prototype.drawItem = function (index) {
this.drawItemBackground(index);
var rect = _itemRectForText(this, index);
var item = this._data[index];
if (!item) {
this.drawBlankItem(rect);
return;
}
var name;
var level;
if (isActorCreated.call($gameActors, item)) {
var actor = $gameActors.actor(item);
name = actor.name();
level = actor.level;
} else {
var actor = $dataActors[item];
name = actor.name;
level = "--";
}
this.drawText(name, rect.x, rect.y, rect.width);
this.drawText(
"%1%2".format(TextManager.levelA, level),
rect.x,
rect.y,
rect.width,
"right"
);
};
/**
* 空欄の描画
*/
Window_DebugPartyListBase.prototype.drawBlankItem = function (rect) {
// 継承先で実装
};
/**
* 項目の背景描画
*/
Window_DebugPartyListBase.prototype.drawItemBackground = function (index) {
// 継承先で実装
};
Window_DebugPartyListBase.prototype.refresh = function () {
this.makeItemList();
this.createContents();
this.drawAllItems();
};
//-----------------------------------------------------------------------------
// Window_DebugActivePartyList
//
// デバッグモードでパーティに加入しているメンバーを選択するウィンドウ
function Window_DebugActivePartyList() {
this.initialize.apply(this, arguments);
}
Window_DebugActivePartyList.prototype = Object.create(
Window_DebugPartyListBase.prototype
);
Window_DebugActivePartyList.prototype.constructor =
Window_DebugActivePartyList;
Window_DebugActivePartyList.prototype.initialize = function (
x,
y,
width,
height
) {
this._isFormationChangeMode = false;
this._pendingIndex = -1;
Window_DebugPartyListBase.prototype.initialize.call(
this,
x,
y,
width,
height
);
};
/**
* 並び替え中のインデックスを取得
*/
Window_DebugActivePartyList.prototype.getPendingIndex = function () {
return this._pendingIndex;
};
/**
* 並び替え中のインデックスを設定
*/
Window_DebugActivePartyList.prototype.setPendingIndex = function (index) {
this._pendingIndex = index;
};
/**
* 並び替え状態か
*/
Window_DebugActivePartyList.prototype.isFormationChangeMode = function () {
return this._isFormationChangeMode;
};
/**
* 並び替え状態を設定
*/
Window_DebugActivePartyList.prototype.setFormationChangeMode = function (
mode
) {
this._isFormationChangeMode = !!mode;
if (!this.isFormationChangeMode()) {
this.setPendingIndex(-1);
}
};
/**
* 選択中の項目が有効か
*/
Window_DebugActivePartyList.prototype.isCurrentItemEnabled = function () {
if (this.isFormationChangeMode()) {
var item = this._data[this.index()];
return item && $gameActors.actor(item).isFormationChangeOk();
} else {
return true;
}
};
Window_DebugActivePartyList.prototype.makeItemList = function () {
Window_DebugPartyListBase.prototype.makeItemList.call(this);
// パーティ内の全メンバーの ID を格納
$gameParty.allMembers().forEach(function (actor) {
this._data.push(actor.actorId());
}, this);
// 「追加」コマンド
this._data.push(null);
};
Window_DebugActivePartyList.prototype.drawBlankItem = function (rect) {
// 「追加」項目
this.drawText(
"( %1 )".format(TextManager.DebugUtil.addToParty),
rect.x,
rect.y,
rect.width,
"center"
);
};
Window_DebugActivePartyList.prototype.drawItemBackground = function (
index
) {
if (index !== this._pendingIndex) {
return;
}
var rect = this.itemRect(index);
var color = this.pendingColor();
this.changePaintOpacity(false);
this.contents.fillRect(rect.x, rect.y, rect.width, rect.height, color);
this.changePaintOpacity(true);
};
Window_DebugActivePartyList.prototype.processHandling = function () {
if (this.isOpenAndActive() && this.isHandled("formation")) {
if (this.isFormationChangeMode()) {
// 並び替え決定
if (
this.isOkTriggered() ||
Input.isTriggered(Params.formationButton)
) {
this.processFormation();
return;
}
} else {
// 並び替え開始
if (Input.isTriggered(Params.formationButton)) {
this.processFormation();
return;
}
}
}
// 入力が確定しなかったら元の処理
Window_DebugPartyListBase.prototype.processHandling.call(this);
};
/**
* 並び替え操作の処理
*/
Window_DebugActivePartyList.prototype.processFormation = function () {
if (!this.item() || !this.isCurrentItemEnabled()) {
// 並び替え対象にできない
this.playBuzzerSound();
return;
}
this.playOkSound();
this.updateInputData();
//this.deactivate();
this.callHandler("formation");
};
//-----------------------------------------------------------------------------
// Window_DebugReservePartyList
//
// デバッグモードでパーティに加入しているメンバーを選択するウィンドウ
function Window_DebugReservePartyList() {
this.initialize.apply(this, arguments);
}
Window_DebugReservePartyList.prototype = Object.create(
Window_DebugPartyListBase.prototype
);
Window_DebugReservePartyList.prototype.constructor =
Window_DebugReservePartyList;
Window_DebugReservePartyList.prototype.initialize = function (
x,
y,
width,
height
) {
Window_DebugPartyListBase.prototype.initialize.call(
this,
x,
y,
width,
height
);
};
Window_DebugReservePartyList.prototype.makeItemList = function () {
Window_DebugPartyListBase.prototype.makeItemList.call(this);
// パーティ外の全メンバーの ID を格納
for (var i = 1; i < $dataActors.length; i++) {
if (!containsActor.call($gameParty, i)) {
this._data.push(i);
}
}
// 「外す」コマンド
this._data.push(null);
};
Window_DebugReservePartyList.prototype.drawBlankItem = function (rect) {
// 「外す」項目
this.drawText(
"( %1 )".format(TextManager.DebugUtil.removeFromParty),
rect.x,
rect.y,
rect.width,
"center"
);
};
//-----------------------------------------------------------------------------
// Window_DebugMapList
//
// デバッグモード用マップ選択ウィンドウ
function Window_DebugMapList() {
this.initialize.apply(this, arguments);
}
Window_DebugMapList.prototype = Object.create(Window_Selectable.prototype);
Window_DebugMapList.prototype.constructor = Window_DebugMapList;
Window_DebugMapList.prototype.initialize = function (x, y, width, height) {
Window_Selectable.prototype.initialize.call(
this,
new Rectangle(x, y, width, height)
);
this._data = [];
this.refresh();
this.hide();
this.selectLast();
};
Window_DebugMapList._lastIndex = 0;
Window_DebugMapList.prototype.maxCols = function () {
return 1;
};
Window_DebugMapList.prototype.spacing = function () {
return 48;
};
Window_DebugMapList.prototype.maxItems = function () {
return this._data ? this._data.length : 1;
};
Window_DebugMapList.prototype.item = function () {
var index = this.index();
return this._data && index >= 0 ? this._data[index] : null;
};
Window_DebugMapList.prototype.includes = function (item) {
return item != null;
};
Window_DebugMapList.prototype.isEnabled = function (item) {
return true;
};
Window_DebugMapList.prototype.select = function (index) {
Window_Selectable.prototype.select.call(this, index);
if (this._eventListWindow) {
this._eventListWindow.setMap(this.item());
}
};
Window_DebugMapList.prototype.setEventListWindow = function (window) {
this._eventListWindow = window;
this.select(this.index());
};
Window_DebugMapList.prototype.makeItemList = function () {
this._data = $dataMapInfos.filter(function (info) {
return info != null;
});
};
Window_DebugMapList.prototype.selectLast = function () {
var index = this._data.indexOf(Window_DebugMapList._lastIndex);
this.select(index >= 0 ? index : 0);
};
Window_DebugMapList.prototype.drawItem = function (index) {
var item = this._data[index];
if (item == null) {
return;
}
this.changePaintOpacity(this.isEnabled(item));
this.resetTextColor();
// マップ名描画
var text = "%1:%2".format(item.id.padZero(3), item.name);
var rect = _itemRectForText(this, index);
this.drawText(text, rect.x, rect.y, rect.width);
this.changePaintOpacity(1);
};
Window_DebugMapList.prototype.refresh = function () {
this.makeItemList();
this.createContents();
this.drawAllItems();
};
//-----------------------------------------------------------------------------
// Window_DebugMapTilePosition
//
// デバッグモード用タイル座標ウィンドウ
function Window_DebugMapTilePosition() {
this.initialize.apply(this, arguments);
}
Window_DebugMapTilePosition.prototype = Object.create(
Window_Base.prototype
);
Window_DebugMapTilePosition.prototype.constructor =
Window_DebugMapTilePosition;
Window_DebugMapTilePosition.prototype.initialize = function (x, y, width) {
this._mapSize = { width: 0, height: 0 };
this._position = { x: 0, y: 0 };
var wh = this.fittingHeight(2);
Window_Base.prototype.initialize.call(
this,
new Rectangle(x, y, width, wh)
);
};
/**
* マップサイズの設定
*/
Window_DebugMapTilePosition.prototype.setMapSize = function (
width,
height
) {
this._mapSize.width = width;
this._mapSize.height = height;
// 今のところ直後に setPosition が呼ばれるので、refresh 不要
};
/**
* カーソル位置の設定
*/
Window_DebugMapTilePosition.prototype.setPosition = function (x, y) {
this._position.x = x;
this._position.y = y;
this.refresh();
};
Window_DebugMapTilePosition.prototype.clear = function () {
this.contents.clear();
};
Window_DebugMapTilePosition.prototype.refresh = function () {
this.clear();
this.changeTextColor(this.systemColor());
this.drawText(TextManager.DebugUtil.mapSize, 0, 0, 160);
this.drawText(
TextManager.DebugUtil.tilePosition,
0,
this.lineHeight(),
160
);
this.resetTextColor();
this.drawText(
"%1,%2".format(this._mapSize.width, this._mapSize.height),
180,
0,
120
);
this.drawText(
"%1,%2".format(this._position.x, this._position.y),
180,
this.lineHeight(),
120
);
};
//-----------------------------------------------------------------------------
// Window_DebugMapTile
//
// デバッグモード用タイル選択ウィンドウ
function Window_DebugMapTile() {
this.initialize.apply(this, arguments);
}
Window_DebugMapTile.prototype = Object.create(Window_Selectable.prototype);
Window_DebugMapTile.prototype.constructor = Window_DebugMapTile;
Window_DebugMapTile.prototype.initialize = function (x, y, width, height) {
this._data = [];
this._map = new Game_Map();
this._positionWindow = null;
Window_Selectable.prototype.initialize.call(
this,
new Rectangle(x, y, width, height)
);
this.createArrowSprites();
// Pixi.js が古いと Tilemap が大きめに出るので、padding を増やす
this.padding += Const.pixiVersion >= 4 ? 18 : 26;
this.createBaseSprite();
this.createGridSprite();
this.createDestinationSprite();
this.select(0);
this.hide();
};
Window_DebugMapTile.prototype.maxCols = function () {
return this._map.width();
};
Window_DebugMapTile.prototype.maxItems = function () {
return this._data.length;
};
/**
* 現在の列を取得
*/
Window_DebugMapTile.prototype.col = function () {
return Math.floor(this.index() % this.maxCols());
};
/**
* 左端に表示している列を取得
*/
Window_DebugMapTile.prototype.leftCol = function () {
return Math.floor(this._scrollX / this.itemWidth());
};
/**
* 左端に表示する列の最大値を取得
*/
Window_DebugMapTile.prototype.maxLeftCol = function () {
return Math.max(0, this.maxCols() - this.maxPageCols());
};
/**
* 左端に表示する列を設定
*/
Window_DebugMapTile.prototype.setLeftCol = function (col) {
var scrollX = col.clamp(0, this.maxLeftCol()) * this.itemWidth();
if (this._scrollX !== scrollX) {
this.scrollTo(scrollX, this._scrollY);
this._scrollX = scrollX;
// this._scrollX = scrollX;
this.refresh();
// this.updateCursor();
}
};
Window_DebugMapTile.prototype.resetScroll = function () {
this.setTopRow(0);
this.setLeftCol(0);
};
/**
* ページ内の最大列数を取得
*/
Window_DebugMapTile.prototype.maxPageCols = function () {
var pageWidth = this.width - this.padding * 2;
return Math.floor(pageWidth / this.itemWidth());
};
Window_DebugMapTile.prototype.maxPageItems = function () {
return this.maxPageRows() * this.maxPageCols();
};
/**
* 右端の列を取得
*/
Window_DebugMapTile.prototype.rightCol = function () {
return Math.max(0, this.leftCol() + this.maxPageCols() - 1);
};
/**
* 右端に表示する列を設定
*/
Window_DebugMapTile.prototype.setRightCol = function (col) {
this.setLeftCol(col - (this.maxPageCols() - 1));
};
Window_DebugMapTile.prototype.spacing = function () {
return 0;
};
Window_DebugMapTile.prototype.itemWidth = function () {
return this._map.tileWidth() * Const.mapTileScale;
};
Window_DebugMapTile.prototype.itemHeight = function () {
return this._map.tileHeight() * Const.mapTileScale;
};
Window_DebugMapTile.prototype.activate = function () {
Window_Selectable.prototype.activate.call(this);
if (this._destinationSprite) {
this._destinationSprite.visible = true;
}
};
Window_DebugMapTile.prototype.deactivate = function () {
Window_Selectable.prototype.deactivate.call(this);
if (this._destinationSprite) {
this._destinationSprite.visible = false;
}
};
Window_DebugMapTile.prototype.select = function (index) {
Window_Selectable.prototype.select.call(this, index);
if (this._positionWindow) {
var cursor = this.getCursorTile();
this._positionWindow.setPosition(cursor.x, cursor.y);
}
this.updateTilemap();
this.updateDestinationPosition();
this._stayCount = 0;
};
/**
* 左スクロール
*/
Window_DebugMapTile.prototype.scrollLeft = function () {
if (this.leftCol() > 0) {
this.setLeftCol(this.leftCol() - 1);
}
};
/**
* 右スクロール
*/
Window_DebugMapTile.prototype.scrollRight = function () {
if (this.leftCol() + 1 < this.maxCols()) {
this.setLeftCol(this.leftCol() + 1);
}
};
Window_DebugMapTile.prototype.updateArrows = function () {
Window_Selectable.prototype.updateArrows.call(this);
// 左右アローの表示
var leftCol = this.leftCol();
var maxLeftCol = this.maxLeftCol();
this._rightArrowSprite.visible = maxLeftCol > 0 && leftCol < maxLeftCol;
this._leftArrowSprite.visible = leftCol > 0;
};
Window_DebugMapTile.prototype.processWheel = function () {
Window_Selectable.prototype.processWheel.call(this);
if (this.isOpenAndActive()) {
var threshold = 20;
if (TouchInput.wheelX >= threshold) {
this.scrollRight();
}
if (TouchInput.wheelX <= -threshold) {
this.scrollLeft();
}
}
};
Window_DebugMapTile.prototype.onTouchSelect = function (triggered) {
var lastIndex = this.index();
Window_Selectable.prototype.onTouchSelect.call(this, triggered);
if (this.index() !== lastIndex) {
// カーソル移動が行われた場合は後続の処理は不要
return;
}
if (this._stayCount >= 10) {
// 左右端のタップ判定
const touchPos = new Point(TouchInput.x, TouchInput.y);
const localPos = this.worldTransform.applyInverse(touchPos);
const winRect = new Rectangle(0, 0, this.width, this.height);
//
if (winRect.contains(localPos.x, localPos.y)) {
var x = localPos.x;
if (x < this.padding) {
this.cursorLeft();
} else if (x >= this.width - this.padding) {
this.cursorRight();
}
}
}
if (this.index() !== lastIndex) {
SoundManager.playCursor();
}
};
Window_DebugMapTile.prototype.update = function () {
Window_Selectable.prototype.update.call(this);
this._stayCount++;
};
Window_DebugMapTile.prototype.hitTest = function (x, y) {
// if (!this.isContentsArea(x, y))
// {
// return -1;
// }
var cx = x - this.padding;
var cy = y - this.padding;
var maxCols = this.maxCols();
var maxPageCols = this.maxPageCols();
var topIndex = this.leftCol() + this.topRow() * maxCols;
for (var i = 0; i < this.maxPageItems(); i++) {
var topOffset = Math.floor(i / maxPageCols) * maxCols;
var index = topIndex + topOffset + (i % maxPageCols);
if (index < this.maxItems()) {
var rect = this.itemRect(index);
var right = rect.x + rect.width;
var bottom = rect.y + rect.height;
if (cx >= rect.x && cy >= rect.y && cx < right && cy < bottom) {
return index;
}
}
}
return -1;
};
Window_DebugMapTile.prototype.ensureCursorVisible = function () {
Window_Selectable.prototype.ensureCursorVisible.call(this);
var col = this.col();
if (col < this.leftCol()) {
this.setLeftCol(col);
} else if (col > this.rightCol()) {
this.setRightCol(col);
}
};
/**
* 対象のマップを指定
*/
Window_DebugMapTile.prototype.setupMap = function (mapId) {
if (mapId === 0) {
if (this._positionWindow) {
this._positionWindow.clear();
}
this._baseSprite.visible = false;
return;
} else {
this._baseSprite.visible = true;
}
// この時点でマップデータはロード済みでなければならない
debuglog("Window_DebugMapTile.setupMap() called");
this._map.setup(mapId);
if (this._positionWindow) {
this._positionWindow.setMapSize(this._map.width(), this._map.height());
}
this.makeItemList();
this.select(0);
this.refreshTilemap();
};
/**
* 有効なマップが指定されているか
*/
Window_DebugMapTile.prototype.isMapValid = function () {
return this._map && this._map.mapId() > 0;
};
/**
* マップ表示サイズの取得
*/
Window_DebugMapTile.prototype.getMapDisplaySize = function () {
return {
width:
(this._baseSprite.width + this._tilemap._margin * 2) /
this._baseSprite.scale.x,
height:
(this._baseSprite.height + this._tilemap._margin * 2) /
this._baseSprite.scale.y,
};
};
/**
* カーソル位置のタイル座標を取得
*/
Window_DebugMapTile.prototype.getCursorTile = function () {
return {
x: this.index() % this._map.width(),
y: Math.floor(this.index() / this._map.width()),
};
};
/**
* マップ転送用の情報を取得
*/
Window_DebugMapTile.prototype.getTransferInfo = function () {
var tile = this.getCursorTile();
// とりあえず下向き、黒フェード固定
return {
mapId: this._map.mapId(),
x: tile.x,
y: tile.y,
d: 2,
fadeType: 0,
};
};
/**
* マップ位置ウィンドウの設定
*/
Window_DebugMapTile.prototype.setPositionWindow = function (window) {
this._positionWindow = window;
};
Window_DebugMapTile.prototype.itemRect = function (index) {
var maxCols = this.maxCols();
var rect = new Rectangle();
rect.width = this.itemWidth();
rect.height = this.itemHeight();
rect.x =
(index % maxCols) * (rect.width + this.spacing()) - this._scrollX;
rect.y = Math.floor(index / maxCols) * rect.height - this._scrollY;
return rect;
};
Window_DebugMapTile.prototype.isCursorVisible = function () {
return false;
};
Window_DebugMapTile.prototype.makeItemList = function () {
var tileCount = this._map.width() * this._map.height();
this._data = Array.apply(null, { length: tileCount }).map(
Number.call,
Number
);
};
/**
* アロースプライトの作成
*/
Window_DebugMapTile.prototype.createArrowSprites = function () {
// あえて Window.prototype._refreshArrows に近い書き方
var p = 12;
var q = p * 2;
var sx = 96 + q;
var sy = 0 + q;
this._leftArrowSprite = new Sprite();
this._leftArrowSprite.bitmap = this.windowskin;
this._leftArrowSprite.anchor.x = 0.5;
this._leftArrowSprite.anchor.y = 0.5;
this._leftArrowSprite.setFrame(sx, sy + p, p, q);
this._leftArrowSprite.move(p, this.height / 2);
this.addChild(this._leftArrowSprite);
this._rightArrowSprite = new Sprite();
this._rightArrowSprite.bitmap = this.windowskin;
this._rightArrowSprite.anchor.x = 0.5;
this._rightArrowSprite.anchor.y = 0.5;
this._rightArrowSprite.setFrame(sx + p + q, sy + p, p, q);
this._rightArrowSprite.move(this.width - p, this.height / 2);
this.addChild(this._rightArrowSprite);
};
/**
* ベーススプライトの作成
*/
Window_DebugMapTile.prototype.createBaseSprite = function () {
var sx = this.padding;
var sy = this.padding;
var sw = this.contentsWidth() - this.padding * 2;
var sh = this.contentsHeight() - this.padding * 2;
this._baseSprite = new Sprite();
this._baseSprite.setFrame(0, 0, sw, sh);
this._baseSprite.x = sx;
this._baseSprite.y = sy;
this._baseSprite.scale.x = Const.mapTileScale;
this._baseSprite.scale.y = Const.mapTileScale;
this.addChild(this._baseSprite);
};
/**
* グリッドスプライトの作成
*/
Window_DebugMapTile.prototype.createGridSprite = function () {
var bw = this.contentsWidth() / Const.mapTileScale;
var bh = this.contentsHeight() / Const.mapTileScale;
this._gridSprite = new Sprite();
this._gridSprite.bitmap = new Bitmap(bw, bh);
this._baseSprite.addChild(this._gridSprite);
};
/**
* グリッドスプライトの再描画
*/
Window_DebugMapTile.prototype.refreshGridSprite = function () {
var lineWidth = Const.mapGridLineWidth;
function alignSize(value, align) {
return value - (value % align) + lineWidth;
}
var color = Params.mapGridColor;
var bitmap = this._gridSprite.bitmap;
bitmap.clear();
// グリッド描画用のサイズ計算
// * カーソルが当たる範囲のみ描画するように調整
var dispSize = this.getMapDisplaySize();
var tileWidth = this._tilemap.tileWidth;
var tileHeight = this._tilemap.tileHeight;
var mapWidth = this._map.width() * tileWidth;
var mapHeight = this._map.height() * tileHeight;
var dispWidth = alignSize(Math.min(dispSize.width, mapWidth), tileWidth);
var dispHeight = alignSize(
Math.min(dispSize.height, mapHeight),
tileHeight
);
// 横線
var vCount = Math.ceil(dispHeight / tileHeight);
for (var i = 0; i < vCount; i++) {
var dy = i * tileHeight;
bitmap.fillRect(0, dy, dispWidth, lineWidth, color);
}
// 縦線
var hCount = Math.ceil(dispWidth / tileWidth);
for (var i = 0; i < hCount; i++) {
var dx = i * tileWidth;
bitmap.fillRect(dx, 0, lineWidth, dispHeight, color);
}
};
/**
* 移動先スプライトの作成
*/
Window_DebugMapTile.prototype.createDestinationSprite = function () {
this._destinationSprite = new Sprite_DebugMapDestination();
this._destinationSprite.setMap(this._map);
this._destinationSprite.visible = false;
this._baseSprite.addChild(this._destinationSprite);
};
/**
* タイルマップの作成
*/
Window_DebugMapTile.prototype.createTilemap = function () {
if (this._tilemap || !this.isMapValid()) {
// 過剰に作成しない
return;
}
//this._tilemap = new ShaderTilemap(); //MZでShaderTilemap消えてる...
this._tilemap = new Tilemap();
// サイズをウィンドウ内に収める
var size = this.getMapDisplaySize();
this._tilemap.width = size.width;
this._tilemap.height = size.height;
this._destinationSprite.setVisibleArea(0, 0, size.width, size.height);
// PIXI.js が v4 なら mask が正常に動くので、はみ出た部分を除外
if (Const.pixiVersion >= 4) {
this._maskGraphic = new PIXI.Graphics();
this._maskGraphic.beginFill(0x000000);
this._maskGraphic.drawRect(0, 0, size.width, size.height);
this._maskGraphic.endFill();
this._baseSprite.addChild(this._maskGraphic);
this._tilemap.mask = this._maskGraphic;
}
// 最下層に配置
this._baseSprite.addChildAt(this._tilemap, 0);
};
/**
* タイルマップの再構築
*/
Window_DebugMapTile.prototype.refreshTilemap = function () {
this.createTilemap();
this._tilemap.tileWidth = this._map.tileWidth();
this._tilemap.tileHeight = this._map.tileHeight();
this._tilemap.setData(
this._map.width(),
this._map.height(),
this._map.data()
);
// ループは無効化
this._tilemap.horizontalWrap = false; // this._map.isLoopHorizontal();
this._tilemap.verticalWrap = false; // this._map.isLoopVertical();
// ウィンドウのスクロール量とタイルマップのスクロール量の比率
this._scrollTileRatioX = this._tilemap.tileWidth / this.itemWidth();
this._scrollTileRatioY = this._tilemap.tileHeight / this.itemHeight();
this.refreshGridSprite();
// ロード完了までスプライトを隠す
this._tilemap.visible = false;
this._destinationSprite.visible = false;
};
/**
* タイルセットの再構築
*/
Window_DebugMapTile.prototype.refreshTileset = function () {
if (!this._map) {
return;
}
this._tileset = this._map.tileset();
if (!this._tileset) {
return;
}
// この時点でタイルセット画像はロード済みでなければならない
debuglog("Window_DebugMapTile.refreshTileset() called");
var newTilesetFlags = this._map.tilesetFlags();
//this._tilemap.refreshTileset();
if (!this._tilemap.flags.equals(newTilesetFlags)) {
this._tilemap.refresh();
}
this._tilemap.flags = newTilesetFlags;
// 読み込みが完了したらスプライトを表示
this._tilemap.visible = true;
this._destinationSprite.visible = true;
};
/**
* タイルセットの読み込み
*/
Window_DebugMapTile.prototype.loadTileset = function () {
if (!this._map) {
return;
}
this._tileset = this._map.tileset();
if (!this._tileset) {
return;
}
var tilesetNames = this._tileset.tilesetNames;
for (var i = 0; i < tilesetNames.length; i++) {
this._tilemap._bitmaps[i] = ImageManager.loadTileset(tilesetNames[i]);
}
};
/**
* タイルマップ表示の更新
*/
Window_DebugMapTile.prototype.updateTilemap = function () {
if (!this._tilemap) {
return;
}
this._tilemap.origin.x = this._scrollX * this._scrollTileRatioX;
this._tilemap.origin.y = this._scrollY * this._scrollTileRatioY;
this._tilemap.refresh();
};
/**
* 移動先スプライトの位置を更新
*/
Window_DebugMapTile.prototype.updateDestinationPosition = function () {
if (!this._destinationSprite) {
return;
}
var cursor = this.getCursorTile();
this._destinationSprite.setDestination(
cursor.x - this.leftCol(),
cursor.y - this.topRow()
);
};
Window_DebugMapTile.prototype.refresh = function () {
Window_Selectable.prototype.refresh.call(this);
this.updateTilemap();
this.updateDestinationPosition();
};
//-----------------------------------------------------------------------------
// Window_DebugEventList
//
// イベント選択用ウィンドウ
function Window_DebugEventList() {
this.initialize.apply(this, arguments);
}
Window_DebugEventList.prototype = Object.create(
Window_Selectable.prototype
);
Window_DebugEventList.prototype.constructor = Window_DebugEventList;
Window_DebugEventList.prototype.initialize = function (
x,
y,
width,
height
) {
Window_Selectable.prototype.initialize.call(
this,
new Rectangle(x, y, width, height)
);
this._data = [];
this._map = null;
this.refresh();
this.hide();
this.selectLast();
};
Window_DebugEventList._lastIndex = 0;
Window_DebugEventList.prototype.maxCols = function () {
return 1;
};
Window_DebugEventList.prototype.maxItems = function () {
return this._data ? this._data.length : 1;
};
Window_DebugEventList.prototype.item = function () {
var index = this.index();
return this._data && index >= 0 ? this._data[index] : null;
};
Window_DebugEventList.prototype.includes = function (item) {
return item != null;
};
Window_DebugEventList.prototype.isEnabled = function (item) {
return true;
};
Window_DebugEventList.prototype.select = function (index) {
Window_Selectable.prototype.select.call(this, index);
if (this._switchListWindow) {
this._switchListWindow.setEvent(this.item());
}
};
Window_DebugEventList.prototype.setMap = function (map) {
this._map = map;
this.refresh();
};
Window_DebugEventList.prototype.setSwitchListWindow = function (window) {
this._switchListWindow = window;
this.select(this.index());
};
Window_DebugEventList.prototype.makeItemList = function () {
if (this._map == null) {
this._data = [];
return;
}
// この時点でマップデータが一時領域に読み込み済みでなければならない
this._data = $dataKmsTemporallyMapData.events.filter(function (event) {
return event != null;
});
};
Window_DebugEventList.prototype.selectLast = function () {
var index = this._data.indexOf(Window_DebugEventList._lastIndex);
index = Math.min(index, this._data.length - 1);
this.select(index >= 0 ? index : 0);
};
Window_DebugEventList.prototype.drawItem = function (index) {
var item = this._data[index];
if (item == null) {
return;
}
this.changePaintOpacity(this.isEnabled(item));
this.resetTextColor();
// イベント名描画
var text = "%1:%2".format(item.id.padZero(4), item.name);
var rect = _itemRectForText(this, index);
this.drawText(text, rect.x, rect.y, rect.width);
this.changePaintOpacity(1);
};
Window_DebugEventList.prototype.refresh = function () {
this.makeItemList();
this.createContents();
this.drawAllItems();
};
//-----------------------------------------------------------------------------
// Window_DebugSelfSwitchList
//
// セルフスイッチ選択用ウィンドウ
function Window_DebugSelfSwitchList() {
this.initialize.apply(this, arguments);
}
Window_DebugSelfSwitchList.prototype = Object.create(
Window_Selectable.prototype
);
Window_DebugSelfSwitchList.prototype.constructor =
Window_DebugSelfSwitchList;
Window_DebugSelfSwitchList.prototype.initialize = function (
x,
y,
width,
height
) {
Window_Selectable.prototype.initialize.call(
this,
new Rectangle(x, y, width, height)
);
this._data = ["A", "B", "C", "D"];
this._map = null;
this._event = null;
this.refresh();
this.hide();
this.selectLast();
};
Window_DebugSelfSwitchList.prototype.maxCols = function () {
return 1;
};
Window_DebugSelfSwitchList.prototype.maxItems = function () {
return this._data ? this._data.length : 1;
};
Window_DebugSelfSwitchList.prototype.item = function () {
var index = this.index();
return this._data && index >= 0 ? this._data[index] : null;
};
Window_DebugSelfSwitchList.prototype.includes = function (item) {
return item != null;
};
Window_DebugSelfSwitchList.prototype.isEnabled = function (item) {
return true;
};
Window_DebugSelfSwitchList.prototype.setMap = function (map) {
this._map = map;
this.refresh();
};
Window_DebugSelfSwitchList.prototype.setEvent = function (event) {
this._event = event;
this.refresh();
};
Window_DebugSelfSwitchList.prototype.selectLast = function () {
this.select(0);
};
/**
* セルフスイッチアクセス用のキーを取得
*/
Window_DebugSelfSwitchList.prototype.getKey = function (type) {
var switchType = type != null ? type : this.item();
if (this._map != null && this._event.id != null && switchType != null) {
return [this._map.id, this._event.id, switchType];
} else {
return null;
}
};
Window_DebugSelfSwitchList.prototype.drawItem = function (index) {
var item = this._data[index];
if (item == null || this._map == null || this._event == null) {
return;
}
this.changePaintOpacity(this.isEnabled(item));
this.resetTextColor();
var switchValue = $gameSelfSwitches.value(this.getKey(item));
var text = "[%1] %2".format(item, switchValue ? "ON" : "OFF");
var rect = _itemRectForText(this, index);
this.drawText(text, rect.x, rect.y, rect.width);
this.changePaintOpacity(1);
};
Window_DebugSelfSwitchList.prototype.refresh = function () {
this.createContents();
this.drawAllItems();
};
//-----------------------------------------------------------------------------
// Window_DebugSystemValue
//
// デバッグ用システム値変更ウィンドウ
function Window_DebugSystemValue() {
this.initialize.apply(this, arguments);
}
Window_DebugSystemValue.prototype = Object.create(
Window_Selectable.prototype
);
Window_DebugSystemValue.prototype.constructor = Window_DebugSystemValue;
// 表示データの設定
Window_DebugSystemValue.DataTypeConfig = {
// type ... uint: 非負整数
// get ... 値取得関数
// set ... 値変更関数
battleCount: {
type: "uint",
get: function () {
return $gameSystem._battleCount;
},
set: function (value) {
$gameSystem._battleCount = value;
},
},
winCount: {
type: "uint",
get: function () {
return $gameSystem._winCount;
},
set: function (value) {
$gameSystem._winCount = value;
},
},
escapeCount: {
type: "uint",
get: function () {
return $gameSystem._escapeCount;
},
set: function (value) {
$gameSystem._escapeCount = value;
},
},
saveCount: {
type: "uint",
get: function () {
return $gameSystem._saveCount;
},
set: function (value) {
$gameSystem._saveCount = value;
},
},
};
Window_DebugSystemValue.prototype.initialize = function (x, y) {
this._data = ["battleCount", "winCount", "escapeCount", "saveCount"];
var width = this.windowWidth();
var height = this.windowHeight();
Window_Selectable.prototype.initialize.call(
this,
new Rectangle(x, y, width, height)
);
this.createContents();
this.refresh();
this.select(0);
this.hide();
};
Window_DebugSystemValue.prototype.windowWidth = function () {
return 360 + _standardPadding() * 2;
};
Window_DebugSystemValue.prototype.windowHeight = function () {
return this.fittingHeight(this.maxItems());
};
Window_DebugSystemValue.prototype.maxCols = function () {
return 1;
};
Window_DebugSystemValue.prototype.maxItems = function () {
return this._data ? this._data.length : 1;
};
/**
* 選択されているシステム値を表すキー文字列を取得
*/
Window_DebugSystemValue.prototype.getKey = function () {
return this.getKeyByIndex(this.index());
};
/**
* インデックスを指定して、システム値を表すキー文字列を取得
*/
Window_DebugSystemValue.prototype.getKeyByIndex = function (index) {
if (!this._data || index < 0) {
return null;
}
return this._data[index];
};
/**
* 選択されているシステム値を取得
*/
Window_DebugSystemValue.prototype.item = function () {
return this.getItemByIndex(this.index());
};
/**
* インデックスを指定して、システム値を取得
*/
Window_DebugSystemValue.prototype.getItemByIndex = function (index) {
var key = this.getKeyByIndex(index);
if (key == null) {
return null;
}
return Window_DebugSystemValue.DataTypeConfig[key];
};
Window_DebugSystemValue.prototype.drawItem = function (index) {
var key = this.getKeyByIndex(index);
var item = this.getItemByIndex(index);
if (key == null || item == null) {
return;
}
var paramName = TextManager.DebugUtil[key];
var paramValue = item.get();
var nameWidth = 180;
var rect = _itemRectForText(this, index);
this.changeTextColor(this.systemColor());
this.drawText(paramName, rect.x, rect.y, nameWidth);
this.resetTextColor();
var numWidth = rect.width - (rect.x + nameWidth);
this.drawText(paramValue, rect.x + nameWidth, rect.y, numWidth, "right");
};
Window_DebugSystemValue.prototype.refresh = function () {
this.contents.clear();
this.drawAllItems();
};
//-----------------------------------------------------------------------------
// Window_DebugWatch
//
// ウォッチ対象データの内容を表示するウィンドウ
function Window_DebugWatch() {
this.initialize.apply(this, arguments);
}
Window_DebugWatch.prototype = Object.create(Window_Base.prototype);
Window_DebugWatch.prototype.constructor = Window_DebugWatch;
Window_DebugWatch.prototype.initialize = function (x, y, width, height) {
this._isAutoPosition = false;
Window_Base.prototype.initialize.call(
this,
new Rectangle(x, y, width, height)
);
this.opacity = 0;
this.openness = 0;
// Dimmer より手前に更新通知演出を出すため、先に更新通知スプライトを作成
this.createUpdateSprites();
this.showBackgroundDimmer();
this.refresh();
this.hide();
};
/**
* 更新通知スプライトの作成
*/
Window_DebugWatch.prototype.createUpdateSprites = function () {
this._updateSprites = [];
var lineHeight = this.lineHeight();
var padding = _standardPadding();
var count = Math.max(
Math.floor(
(Graphics.boxHeight - this.y - _standardPadding() * 2) / lineHeight
),
1
);
for (var i = 0; i < count; i++) {
var sprite = new Sprite_DebugWatchUpdate();
sprite.setup(
padding,
padding + i * lineHeight,
this.contentsWidth(),
lineHeight
);
this._updateSprites.push(sprite);
this.addChildToBack(sprite);
}
};
Window_DebugWatch.prototype.lineHeight = function () {
return (36 * Params.watchFontSize) / _standardFontSize();
};
/**
* ウォッチ対象を取得
*/
Window_DebugWatch.prototype.getWatchList = function () {
return $gameTemp.getDebugWatchItemList();
};
Window_DebugWatch.prototype.resetFontSettings = function () {
Window_Base.prototype.resetFontSettings.call(this);
this.contents.fontSize = Params.watchFontSize;
};
/**
* ウォッチ対象を取得
*/
Window_DebugWatch.prototype.setAutoPositionEnabled = function (isEnabled) {
this._isAutoPosition = !!isEnabled;
if (this._isAutoPosition) {
this.adjustWindowPosition();
}
};
Window_DebugWatch.prototype.update = function () {
Window_Base.prototype.update.call(this);
this.visible = this.getWatchList().length > 0;
this.openness = this.visible ? 255 : 0;
if ($gameTemp.isDebugWatchRefreshRequested()) {
this.refresh();
} else {
// 更新された項目を再描画
var list = this.getWatchList();
for (var i = 0; i < list.length; i++) {
if (list[i].checkUpdate()) {
this.updateItem(i);
}
}
}
};
/**
* ウォッチ項目の更新
*/
Window_DebugWatch.prototype.updateItem = function (index) {
this.drawItem(index);
var sprite = this._updateSprites[index];
if (sprite) {
sprite.animate();
}
};
/**
* ウィンドウサイズの調整
*/
Window_DebugWatch.prototype.adjustWindowSize = function () {
this.height = this.fittingHeight(Math.max(this.getWatchList().length, 1));
this.refreshDimmerBitmap();
};
/**
* ウィンドウ位置の調整
*/
Window_DebugWatch.prototype.adjustWindowPosition = function () {
if (!this._isAutoPosition) {
return;
}
switch (Params.watchWindowPosition) {
case Const.WatchWindowPosition.topLeft:
default:
this.x = 0;
this.y = -8;
break;
case Const.WatchWindowPosition.topRight:
this.x = Graphics.boxWidth - this.width;
this.y = -8;
break;
case Const.WatchWindowPosition.bottomLeft:
this.x = 0;
this.y = Graphics.boxHeight - this.height + 8;
break;
case Const.WatchWindowPosition.bottomRight:
this.x = Graphics.boxWidth - this.width;
this.y = Graphics.boxHeight - this.height + 8;
break;
}
};
Window_DebugWatch.prototype.itemRect = function (index) {
var rect = new Rectangle();
rect.width = this.contentsWidth();
rect.height = this.lineHeight();
rect.x = 0;
rect.y = index * rect.height;
return rect;
};
Window_DebugWatch.prototype.itemRectForText = function (index) {
// Window_Selectable の処理を流用
return _itemRectForText(this, index);
};
Window_DebugWatch.prototype.clearItem = function (index) {
// Window_Selectable の処理を流用
Window_Selectable.prototype.clearItem.call(this, index);
};
Window_DebugWatch.prototype.drawItem = function (index) {
var item = this.getWatchList()[index];
if (!item) {
return;
}
this.clearItem(index);
var rect = _itemRectForText(this, index);
this.changeTextColor(this.systemColor());
this.drawText(
"[%1:%2] %3".format(item.typeSymbol, item.id.padZero(4), item.name),
rect.x,
rect.y,
rect.width
);
this.resetTextColor();
this.drawText(item.getDisp(), rect.x, rect.y, rect.width, "right");
};
Window_DebugWatch.prototype.drawAllItems = function () {
this.resetFontSettings();
for (var i = 0; i < this.getWatchList().length; i++) {
this.drawItem(i);
}
};
Window_DebugWatch.prototype.refresh = function () {
$gameTemp.clearDebugWatchRefreshRequest();
this.adjustWindowSize();
this.adjustWindowPosition();
this.createContents();
this.drawAllItems();
};
//-----------------------------------------------------------------------------
// Window_DebugWatchItemList
//
// ウォッチ項目選択用ウィンドウ
function Window_DebugWatchItemList() {
this.initialize.apply(this, arguments);
}
Window_DebugWatchItemList.prototype = Object.create(
Window_Selectable.prototype
);
Window_DebugWatchItemList.prototype.constructor = Window_DebugWatchItemList;
Window_DebugWatchItemList._lastIndex = 0;
Window_DebugWatchItemList.prototype.initialize = function (
x,
y,
width,
height
) {
Window_Selectable.prototype.initialize.call(
this,
new Rectangle(x, y, width, height)
);
this.refresh();
this.hide();
this.selectLast();
};
Window_DebugWatchItemList.prototype.lineHeight = function () {
return Window_Selectable.prototype.lineHeight.call(this) * 2;
};
Window_DebugWatchItemList.prototype.maxItems = function () {
return this._data ? this._data.length : 1;
};
Window_DebugWatchItemList.prototype.selectLast = function () {
var index = Window_DebugWatchItemList._lastIndex;
this.select(index < this._data.length ? index : 0);
};
/**
* 選択されている項目を取得
*/
Window_DebugWatchItemList.prototype.item = function () {
var index = this.index();
return this._data && index >= 0 ? this._data[index] : null;
};
Window_DebugWatchItemList.prototype.makeItemList = function () {
this._data = $gameTemp.getDebugWatchItemList().concat("add");
};
Window_DebugWatchItemList.prototype.drawItem = function (index) {
var rect = _itemRectForText(this, index);
rect.y -= rect.height / 4;
var item = this._data[index];
if (!item) {
return;
} else if (item === "add") {
this.drawText(
"( %1 )".format(TextManager.DebugUtil.addWatchItem),
rect.x + 32,
rect.y + rect.height / 4,
rect.width - 32,
rect.height / 2
);
return;
}
this.changeTextColor(this.systemColor());
this.drawText(item.typename, rect.x, rect.y, rect.width, rect.height / 2);
this.resetTextColor();
this.drawText(
"%1: %2".format(item.id.padZero(4), item.name),
rect.x,
rect.y + rect.height / 2,
rect.width,
rect.height / 2
);
};
Window_DebugWatchItemList.prototype.refresh = function () {
this.makeItemList();
this.createContents();
this.drawAllItems();
};
//-----------------------------------------------------------------------------
// Window_DebugWatchItemEdit
//
// ウォッチ項目編集用ウィンドウ
function Window_DebugWatchItemEdit() {
this.initialize.apply(this, arguments);
}
Window_DebugWatchItemEdit.prototype = Object.create(
Window_Selectable.prototype
);
Window_DebugWatchItemEdit.prototype.constructor = Window_DebugWatchItemEdit;
Window_DebugWatchItemEdit.prototype.initialize = function (
x,
y,
width,
height
) {
Window_Selectable.prototype.initialize.call(
this,
new Rectangle(x, y, width, height)
);
this._item = new DebugWatchItem();
this.setMode(Const.WatchItemEditMode.add);
this.openness = 0;
this.deactivate();
this.refresh();
};
Window_DebugWatchItemEdit.prototype.maxItems = function () {
return this._data ? this._data.length : 1;
};
/**
* 編集している項目
*/
Window_DebugWatchItemEdit.prototype.item = function () {
return this._item;
};
/**
* 編集する項目の設定
*/
Window_DebugWatchItemEdit.prototype.setItem = function (item) {
if (item instanceof DebugWatchItem) {
this._item.copyFrom(item);
this.setMode(Const.WatchItemEditMode.edit);
} else {
// DebugWatchItem でなければ追加モード (初期状態はスイッチ 1 を選択)
this._item = new DebugWatchItem();
this._item.setupSwitch(1);
this.setMode(Const.WatchItemEditMode.add);
}
this.refresh();
this.select(0);
};
/**
* 編集モードの設定
*/
Window_DebugWatchItemEdit.prototype.setMode = function (mode) {
if (this._mode === mode) {
return;
}
this._data = ["target", "ok"];
this._mode = mode;
if (mode === Const.WatchItemEditMode.edit) {
this._data.push("remove");
}
};
/**
* 編集モードの取得
*/
Window_DebugWatchItemEdit.prototype.getMode = function () {
var index = this.index();
return this._data && index >= 0 ? this._data[index] : null;
};
Window_DebugWatchItemEdit.prototype.itemRect = function (index) {
var rect = Window_Selectable.prototype.itemRect.call(this, index);
// 先頭だけ 2 行サイズにする
if (index === 0) {
rect.height += this.lineHeight();
} else if (index > 0) {
rect.y += this.lineHeight();
}
return rect;
};
Window_DebugWatchItemEdit.prototype.drawItem = function (index) {
var rect = _itemRectForText(this, index);
var item = this._data[index];
switch (item) {
case "target":
this.drawItemType(rect.x, rect.y, rect.width);
this.drawItemId(rect.x, rect.y + this.lineHeight(), rect.width);
break;
case "ok":
this.changeTextColor(this.systemColor());
this.drawText("OK", rect.x + 40, rect.y, rect.width);
this.resetTextColor();
break;
case "remove":
this.changeTextColor(this.systemColor());
this.drawText(
TextManager.DebugUtil.watchItemRemove,
rect.x + 40,
rect.y,
rect.width
);
this.resetTextColor();
break;
default:
// 何も表示しない
break;
}
};
/**
* 項目の種類を描画
*/
Window_DebugWatchItemEdit.prototype.drawItemType = function (x, y, width) {
this.changeTextColor(this.systemColor());
this.drawText(TextManager.DebugUtil.watchItemType, x, y, 120);
this.resetTextColor();
this.drawText(this._item.typename, x + 120, y, width - 120);
};
/**
* 項目の ID を描画
*/
Window_DebugWatchItemEdit.prototype.drawItemId = function (x, y, width) {
this.drawText(
"%1: %2".format(this._item.id.padZero(4), this._item.name),
x,
y,
width
);
};
Window_DebugWatchItemEdit.prototype.refresh = function () {
this.height = this.fittingHeight(this.maxItems() + 1);
this.createContents();
if (this._item) {
this.drawAllItems();
}
};
//-----------------------------------------------------------------------------
// Window_DebugTroopList
//
// 敵グループ選択用ウィンドウ
function Window_DebugTroopList() {
this.initialize.apply(this, arguments);
}
Window_DebugTroopList.prototype = Object.create(
Window_Selectable.prototype
);
Window_DebugTroopList.prototype.constructor = Window_DebugTroopList;
Window_DebugTroopList.prototype.initialize = function (
x,
y,
width,
height
) {
Window_Selectable.prototype.initialize.call(
this,
new Rectangle(x, y, width, height)
);
this._data = [];
this.refresh();
this.hide();
this.selectLast();
};
Window_DebugTroopList._lastIndex = 0;
Window_DebugTroopList.prototype.maxCols = function () {
return 1;
};
Window_DebugTroopList.prototype.spacing = function () {
return 48;
};
Window_DebugTroopList.prototype.maxItems = function () {
return this._data ? this._data.length : 1;
};
Window_DebugTroopList.prototype.item = function () {
var index = this.index();
return this._data && index >= 0 ? this._data[index] : null;
};
Window_DebugTroopList.prototype.includes = function (item) {
return item != null;
};
Window_DebugTroopList.prototype.isEnabled = function (item) {
if (item == null) {
// ランダムエンカウント枠があれば有効
return $gameMap.encounterList().length > 0;
} else {
// 常に有効
return true;
}
};
Window_DebugTroopList.prototype.makeItemList = function () {
this._data = $dataTroops.filter(function (item) {
return this.includes(item);
}, this);
// 先頭は現在マップからのランダム選定用 null
this._data.unshift(null);
};
Window_DebugTroopList.prototype.selectLast = function () {
var index = this._data.indexOf(Window_DebugTroopList._lastIndex);
this.select(index >= 0 ? index : 0);
};
Window_DebugTroopList.prototype.drawItem = function (index) {
var item = this._data[index];
this.changePaintOpacity(this.isEnabled(item));
this.resetTextColor();
var rect = _itemRectForText(this, index);
if (item == null) {
// ランダム選定
var text = "< %1 >".format(TextManager.DebugUtil.encounterRandom);
this.drawText(text, rect.x + 80, rect.y, rect.width);
} else {
// データベース
var text = "%1:%2".format(index.padZero(4), item.name);
this.drawText(text, rect.x, rect.y, rect.width);
}
this.changePaintOpacity(1);
};
Window_DebugTroopList.prototype.refresh = function () {
this.makeItemList();
this.createContents();
this.drawAllItems();
};
//-----------------------------------------------------------------------------
// Scene_Map
var _Scene_Map_createAllWindows = Scene_Map.prototype.createAllWindows;
Scene_Map.prototype.createAllWindows = function () {
_Scene_Map_createAllWindows.call(this);
this.createDebugWatchWindow();
};
/**
* ウォッチウィンドウの作成
*/
Scene_Map.prototype.createDebugWatchWindow = function () {
if (!$gameTemp.isPlaytest()) {
return;
}
this._debugWatchWindow = new Window_DebugWatch(
0,
0,
Params.watchWindowWidth,
100
);
this._debugWatchWindow.setAutoPositionEnabled(true);
this._debugWatchWindow.show();
this.addWindow(this._debugWatchWindow);
};
//-----------------------------------------------------------------------------
// Scene_Debug
var _Scene_Debug_create = Scene_Debug.prototype.create;
Scene_Debug.prototype.create = function () {
_Scene_Debug_create.call(this);
// 初期化時間短縮のため、汎用のウィンドウ以外は遅延初期化する
this.createUpperWindowLayer();
this.createTitleWindow();
this.createCommandWindow();
this.createHelpWindow();
this.createNumberWindow();
this.initializeWindowStates();
};
var _Scene_Debug_createHelpWindow = Scene_Debug.prototype.createHelpWindow;
Scene_Debug.prototype.createHelpWindow = function () {
_Scene_Debug_createHelpWindow.call(this);
this._helpWindow.y = this._titleWindow.height;
};
var _Scene_Debug_createEditWindow = Scene_Debug.prototype.createEditWindow;
Scene_Debug.prototype.createEditWindow = function () {
_Scene_Debug_createEditWindow.call(this);
// updateSwitch と updateVariable は都度置き換えて使うので一旦消す
this._editWindow.updateSwitch = this._editWindow.updateVariable =
function () {};
};
/**
* ウィンドウの初期パラメータ調整
*/
Scene_Debug.prototype.initializeWindowStates = function () {
// タイトルウィンドウ分の高さ調整
var wy = this._titleWindow.height;
this._rangeWindow.y = wy;
this._rangeWindow.height -= wy;
this._editWindow.y = wy;
this._editWindow.height = this._rangeWindow.height;
/*
this._debugHelpWindow.y = wy + this._editWindow.height;
this._debugHelpWindow.height = Graphics.boxHeight - this._debugHelpWindow.y;
this._debugHelpWindow.resetFontSettings = function()
{
Window_Base.prototype.resetFontSettings.call(this);
this.contents.fontSize *= 0.75;
};
*/
// 表示状態で作成されるが、初期状態では非表示にしておくウィンドウ群
this._rangeWindow.deactivate();
this._rangeWindow.hide();
this._editWindow.hide();
this._debugHelpWindow.hide();
this._helpWindow.hide();
};
/**
* 上層ウィンドウレイヤーの作成
*/
Scene_Debug.prototype.createUpperWindowLayer = function () {
var width = Graphics.boxWidth;
var height = Graphics.boxHeight;
var x = (Graphics.width - width) / 2;
var y = (Graphics.height - height) / 2;
this._upperWindowLayer = new WindowLayer();
this._upperWindowLayer.x = x;
this._upperWindowLayer.y = y;
this._upperWindowLayer.width = width;
this._upperWindowLayer.height = height;
//this._upperWindowLayer.move(x, y, width, height);
this.addChild(this._upperWindowLayer);
if (KMS.imported["CursorAnimation"]) {
this._animationCursor.addWindowLayer(this._upperWindowLayer);
}
};
/**
* タイトルウィンドウを作成
*/
Scene_Debug.prototype.createTitleWindow = function () {
this._titleWindow = new Window_DebugTitle(Graphics.boxWidth, 1);
this._titleWindow.setText(TextManager.DebugUtil.sceneTitle);
this.addWindow(this._titleWindow);
};
/**
* コマンドウィンドウを作成
*/
Scene_Debug.prototype.createCommandWindow = function () {
var wx = 32;
var wy = this._titleWindow.height + 32;
this._commandWindow = new Window_DebugCommand(wx, wy);
this._commandWindow.setHandler(
"itemNumber",
this.onSelectItem.bind(this)
);
this._commandWindow.setHandler(
"actorParam",
this.onSelectActor.bind(this)
);
this._commandWindow.setHandler(
"member",
this.onSelectPartyMember.bind(this)
);
this._commandWindow.setHandler("reloadMap", this.onReloadMap.bind(this));
this._commandWindow.setHandler(
"loadDatabase",
this.onReloadDatabase.bind(this)
);
this._commandWindow.setHandler(
"transfer",
this.onTransferMapStart.bind(this)
);
this._commandWindow.setHandler(
"switchVar",
this.onSwitchVarStart.bind(this)
);
this._commandWindow.setHandler(
"selfSwitch",
this.onSelfSwitchMapStart.bind(this)
);
this._commandWindow.setHandler(
"systemValue",
this.onSelectSystemValue.bind(this)
);
this._commandWindow.setHandler(
"watchWindow",
this.onWatchWindow.bind(this)
);
this._commandWindow.setHandler(
"encounter",
this.onForceEncounter.bind(this)
);
//this._commandWindow.setHandler('dispPassage', this.onDispPassage.bind(this));
this._commandWindow.setHandler("cancel", this.popScene.bind(this));
// 追加コマンド
KMS.DebugUtil.debugCommands.forEach(function (command) {
this._commandWindow.setHandler(command.id, command.onSelect.bind(this));
}, this);
this.addWindow(this._commandWindow);
};
/**
* アイテムウィンドウを作成
*/
Scene_Debug.prototype.createItemWindow = function () {
if (this._itemWindow) {
return;
}
var wy = this._helpWindow.y + this._helpWindow.height;
var wh = Graphics.boxHeight - wy;
this._itemWindow = new Window_DebugItemList(0, wy, Graphics.boxWidth, wh);
this._itemWindow.setHelpWindow(this._helpWindow);
this._itemWindow.setHandler("ok", this.onItemOk.bind(this));
this._itemWindow.setHandler("cancel", this.onItemCancel.bind(this));
this.addWindow(this._itemWindow);
};
/**
* アクターパラメータ編集ウィンドウを作成
*/
Scene_Debug.prototype.createActorParamWindow = function () {
if (this._actorParamWindow) {
return;
}
var wx = 360;
var wy = this._titleWindow.height;
var ww = Graphics.boxWidth - wx;
var wh = Graphics.boxHeight - wy;
this._actorParamWindow = new Window_DebugActorParam(wx, wy, ww, wh);
this._actorParamWindow.setHandler("ok", this.onActorParamOk.bind(this));
this._actorParamWindow.setHandler(
"cancel",
this.onActorParamCancel.bind(this)
);
this.addWindow(this._actorParamWindow);
if (this._actorListWindow) {
// 先に ActorListWindow を作ったときに腐らない用
this._actorListWindow.setStatusWindow(this._actorParamWindow);
}
};
/**
* アクター一覧ウィンドウを作成
*/
Scene_Debug.prototype.createActorListWindow = function () {
if (this._actorListWindow) {
return;
}
var wy = this._titleWindow.height;
var wh = Graphics.boxHeight - wy;
this._actorListWindow = new Window_DebugActorList(0, wy, 360, wh);
this._actorListWindow.setHandler("ok", this.onActorOk.bind(this));
this._actorListWindow.setHandler("cancel", this.onActorCancel.bind(this));
this._actorListWindow.setStatusWindow(this._actorParamWindow);
this.addWindow(this._actorListWindow);
};
/**
* アクタースキル編集ウィンドウを作成
*/
Scene_Debug.prototype.createActorSkillWindow = function () {
if (this._actorSkillWindow) {
return;
}
var wy = this._helpWindow.y + this._helpWindow.height;
var wh = Graphics.boxHeight - wy;
this._actorSkillWindow = new Window_DebugActorSkill(
0,
wy,
Graphics.boxWidth,
wh
);
this._actorSkillWindow.setHelpWindow(this._helpWindow);
this._actorSkillWindow.setHandler("ok", this.onActorSkillOk.bind(this));
this._actorSkillWindow.setHandler(
"cancel",
this.onActorSkillCancel.bind(this)
);
this.addWindow(this._actorSkillWindow);
};
/**
* パーティメンバー用ウィンドウを作成
*/
Scene_Debug.prototype.createPartyWindow = function () {
if (this._activePartyWindow) {
return;
}
var wy = this._titleWindow.height;
var ww = Graphics.boxWidth / 2;
this._activePartyTitleWindow = new Window_DebugTitle(ww, 1);
this._activePartyTitleWindow.y = wy;
this._activePartyTitleWindow.setText(TextManager.DebugUtil.activeParty);
this.addWindow(this._activePartyTitleWindow);
this._reservePartyTitleWindow = new Window_DebugTitle(ww, 1);
this._reservePartyTitleWindow.x = ww;
this._reservePartyTitleWindow.y = wy;
this._reservePartyTitleWindow.setText(TextManager.DebugUtil.reserveParty);
this.addWindow(this._reservePartyTitleWindow);
wy += this._activePartyTitleWindow.height;
var wh = Graphics.boxHeight - wy;
this._activePartyWindow = new Window_DebugActivePartyList(0, wy, ww, wh);
this._activePartyWindow.setHandler("ok", this.onActivePartyOk.bind(this));
this._activePartyWindow.setHandler(
"formation",
this.onActivePartyFormationStart.bind(this)
);
this._activePartyWindow.setHandler(
"cancel",
this.onActivePartyCancel.bind(this)
);
this.addWindow(this._activePartyWindow);
this._reservePartyWindow = new Window_DebugReservePartyList(
ww,
wy,
ww,
wh
);
this._reservePartyWindow.setHandler(
"ok",
this.onReservePartyOk.bind(this)
);
this._reservePartyWindow.setHandler(
"cancel",
this.onReservePartyCancel.bind(this)
);
this.addWindow(this._reservePartyWindow);
};
/**
* マップ一覧ウィンドウを作成
*/
Scene_Debug.prototype.createMapListWindow = function () {
if (this._mapListWindow) {
return;
}
// OK / キャンセルハンドラはコマンドに応じて変わるので、ここでは設定しない
var wy = this._titleWindow.height;
var wh = Graphics.boxHeight - wy;
this._mapListWindow = new Window_DebugMapList(0, wy, 360, wh);
this.addWindow(this._mapListWindow);
};
/**
* タイルウィンドウを作成
*/
Scene_Debug.prototype.createMapTileWindow = function () {
if (this._mapTileWindow) {
return;
}
var wx = 360;
var wy = this._titleWindow.height;
var ww = Graphics.boxWidth - wx;
this._mapTilePositionWindow = new Window_DebugMapTilePosition(wx, wy, ww);
this.addWindow(this._mapTilePositionWindow);
wy = this._mapTilePositionWindow.y + this._mapTilePositionWindow.height;
var wh = Graphics.boxHeight - wy;
this._mapTileWindow = new Window_DebugMapTile(wx, wy, ww, wh);
this._mapTileWindow.setHandler("ok", this.onTransferMapTileOk.bind(this));
this._mapTileWindow.setHandler(
"cancel",
this.onTransferMapTileCancel.bind(this)
);
this._mapTileWindow.setPositionWindow(this._mapTilePositionWindow);
this.addWindow(this._mapTileWindow);
};
/**
* イベント一覧ウィンドウを作成
*/
Scene_Debug.prototype.createEventListWindow = function () {
if (this._eventListWindow) {
return;
}
var wx = 360;
var wy = this._titleWindow.height;
var ww = Graphics.boxWidth - wx;
this._eventListWindow = new Window_DebugEventList(wx, wy, ww, 64);
var wh = Graphics.boxHeight - wy - this._eventListWindow.fittingHeight(4);
this._eventListWindow.height = wh;
this._eventListWindow.setHandler(
"ok",
this.onSelfSwitchEventListOk.bind(this)
);
this._eventListWindow.setHandler(
"cancel",
this.onSelfSwitchEventListCancel.bind(this)
);
this.addWindow(this._eventListWindow);
};
/**
* セルフスイッチ一覧ウィンドウを作成
*/
Scene_Debug.prototype.createSelfSwitchListWindow = function () {
if (this._selfSwitchListWindow) {
return;
}
var wx = this._eventListWindow.x;
var wy = this._eventListWindow.y + this._eventListWindow.height;
var ww = this._eventListWindow.width;
var wh = Graphics.boxHeight - wy;
this._selfSwitchListWindow = new Window_DebugSelfSwitchList(
wx,
wy,
ww,
wh
);
this._selfSwitchListWindow.setHandler(
"ok",
this.onSelfSwitchListOk.bind(this)
);
this._selfSwitchListWindow.setHandler(
"cancel",
this.onSelfSwitchListCancel.bind(this)
);
this.addWindow(this._selfSwitchListWindow);
this._eventListWindow.setSwitchListWindow(this._selfSwitchListWindow);
};
/**
* システム値ウィンドウを作成
*/
Scene_Debug.prototype.createSystemValueWindow = function () {
if (this._systemValueWindow) {
return;
}
var wy = this._titleWindow.height + 32;
this._systemValueWindow = new Window_DebugSystemValue(0, wy);
this._systemValueWindow.x =
(Graphics.boxWidth - this._systemValueWindow.width) / 2;
this._systemValueWindow.setHandler("ok", this.onSystemValueOk.bind(this));
this._systemValueWindow.setHandler(
"cancel",
this.onSystemValueCancel.bind(this)
);
this.addWindow(this._systemValueWindow);
};
/**
* ウォッチウィンドウを作成
*/
Scene_Debug.prototype.createWatchWindow = function () {
if (this._watchWindow) {
return;
}
var wx = 0;
var wy = this._titleWindow.height;
var ww = Graphics.boxWidth / 2;
var wh = Graphics.boxHeight - wy;
this._watchWindow = new Window_DebugWatch(wx, wy, ww, wh);
// ウォッチ項目リストウィンドウより前に入れる
if (this._watchEditWindow) {
var index = this._windowLayer.getChildIndex(this._watchEditWindow);
this._windowLayer.addChildAt(this._watchWindow, index);
} else {
this.addWindow(this._watchWindow);
}
};
/**
* ウォッチウィンドウを破棄
*/
Scene_Debug.prototype.destroyWatchWindow = function () {
if (!this._watchWindow) {
return;
}
this._windowLayer.removeChild(this._watchWindow);
delete this._watchWindow;
};
/**
* ウォッチ項目リストウィンドウを作成
*/
Scene_Debug.prototype.createWatchListWindow = function () {
if (this._watchListWindow) {
return;
}
var wx = Graphics.boxWidth / 2;
var wy = this._titleWindow.height;
var ww = Graphics.boxWidth - wx;
var wh = Graphics.boxHeight - wy;
this._watchListWindow = new Window_DebugWatchItemList(wx, wy, ww, wh);
this._watchListWindow.setHandler("ok", this.onWatchListOk.bind(this));
this._watchListWindow.setHandler(
"cancel",
this.onWatchListCancel.bind(this)
);
this.addWindow(this._watchListWindow);
};
/**
* ウォッチ項目編集ウィンドウを作成
*/
Scene_Debug.prototype.createWatchEditWindow = function () {
if (this._watchEditWindow) {
return;
}
var ww = (Graphics.boxWidth * 3) / 5;
var wx = (Graphics.boxWidth - ww) / 2;
var wy = this._titleWindow.height + 32;
var wh = Graphics.boxHeight - wy - 32;
this._watchEditWindow = new Window_DebugWatchItemEdit(wx, wy, ww, wh);
this._watchEditWindow.setHandler("ok", this.onWatchEditOk.bind(this));
this._watchEditWindow.setHandler(
"cancel",
this.onWatchEditCancel.bind(this)
);
this.addWindow(this._watchEditWindow);
};
/**
* 敵グループウィンドウを作成
*/
Scene_Debug.prototype.createTroopWindow = function () {
if (this._troopWindow) {
return;
}
var wx = 32;
var wy = this._titleWindow.height + 32;
var ww = Graphics.boxWidth - 64;
var wh = Graphics.boxHeight - wy - 32;
this._troopWindow = new Window_DebugTroopList(wx, wy, ww, wh);
this._troopWindow.setHandler("ok", this.onTroopOk.bind(this));
this._troopWindow.setHandler("cancel", this.onTroopCancel.bind(this));
this.addWindow(this._troopWindow);
};
/**
* 数値入力ウィンドウを作成
*/
Scene_Debug.prototype.createNumberWindow = function () {
this._numberWindow = new Window_DebugNumberInput();
this._upperWindowLayer.addChild(this._numberWindow);
};
/**
* シーンの準備完了判定
*/
var _Scene_Debug_isReady = Scene_Debug.prototype.isReady;
Scene_Debug.prototype.isReady = function () {
return (
_Scene_Debug_isReady.call(this) &&
DataManager.isDatabaseLoaded() &&
DataManager.isMapLoaded() &&
(!this._isLoadingTemporallyMap ||
DataManager.isKmsTemporallyMapLoaded())
);
};
/**
* シーンの更新
*/
var _Scene_Debug_update = Scene_Debug.prototype.update;
Scene_Debug.prototype.update = function () {
// 読み込み中は更新しない
if (!this.isReady()) {
return;
}
// ロード完了時の処理
if (this._loadCompleteHandler) {
this._loadCompleteHandler.call(this);
delete this._loadCompleteHandler;
}
_Scene_Debug_update.call(this);
// update 後の処理
if (this._postUpdateProc) {
this._postUpdateProc.call(this);
delete this._postUpdateProc;
}
};
/**
* メインコマンドウィンドウをアクティブ化
*/
Scene_Debug.prototype.activateCommandWindow = function () {
this._commandWindow.show();
this._commandWindow.activate();
this._titleWindow.setText(TextManager.DebugUtil.sceneTitle);
};
/**
* アイテム選択の実行
*/
Scene_Debug.prototype.onSelectItem = function () {
this.createItemWindow();
this._commandWindow.hide();
this._helpWindow.show();
this._itemWindow.show();
this._itemWindow.activate();
this._titleWindow.setText(TextManager.DebugUtil.itemNumber);
};
/**
* アイテムの決定
*/
Scene_Debug.prototype.onItemOk = function () {
this._numberWindow.setHandler(
"cancel",
this.onItemNumberCancel.bind(this)
);
var item = this._itemWindow.item();
var number = $gameParty.numItems(item);
var digits = $gameParty.maxItems(item).toString().length;
this._numberWindow.setCaption(item);
this._numberWindow.setAllowNegative(false);
this._numberWindow.start(number, digits, this.onItemNumberOk.bind(this));
};
/**
* アイテム選択のキャンセル処理
*/
Scene_Debug.prototype.onItemCancel = function () {
this._helpWindow.hide();
this._itemWindow.hide();
this.activateCommandWindow();
};
/**
* アイテム個数入力の決定
*/
Scene_Debug.prototype.onItemNumberOk = function (number) {
// アイテム所持数の設定 (Game_Party に対して呼ぶ)
var setItemNumber = function (item, number) {
var currNumber = this.numItems(item);
var amount = number - currNumber;
this.gainItem(item, amount, false);
};
setItemNumber.call($gameParty, this._itemWindow.item(), number);
this._itemWindow.refresh();
this.onItemNumberCancel();
};
/**
* アイテム個数入力のキャンセル処理
*/
Scene_Debug.prototype.onItemNumberCancel = function () {
this._numberWindow.close();
this._itemWindow.activate();
};
/**
* アクター選択の実行
*/
Scene_Debug.prototype.onSelectActor = function () {
this.createActorParamWindow();
this.createActorListWindow();
this.createActorSkillWindow();
this._commandWindow.hide();
this._actorListWindow.show();
this._actorParamWindow.show();
this._actorListWindow.activate();
this._titleWindow.setText(TextManager.DebugUtil.actorParam);
};
/**
* アクターの決定
*/
Scene_Debug.prototype.onActorOk = function () {
this._actorParamWindow.activate();
};
/**
* アクター選択のキャンセル処理
*/
Scene_Debug.prototype.onActorCancel = function () {
this._actorListWindow.hide();
this._actorParamWindow.hide();
this.activateCommandWindow();
};
/**
* アクターパラメータの決定
*/
Scene_Debug.prototype.onActorParamOk = function () {
var actor = this._actorListWindow.item();
var param = this._actorParamWindow.item();
var caption;
var number;
var digits;
var negative;
switch (param) {
case "level":
{
caption = TextManager.level;
number = actor.level;
digits = actor.maxLevel().toString().length;
negative = false;
}
break;
case "skill":
{
// スキル編集ウィンドウに切り替え
this._actorListWindow.hide();
this._actorParamWindow.hide();
this._helpWindow.show();
this._actorSkillWindow.setActor(actor);
this._actorSkillWindow.selectLast();
this._actorSkillWindow.show();
this._actorSkillWindow.activate();
}
return;
default:
{
var paramId = this._actorParamWindow.paramId();
caption = TextManager.param(paramId) + "+";
number = originalParamPlus.call(actor, paramId);
digits = 4;
negative = true;
}
break;
}
this._numberWindow.setCaption(caption);
this._numberWindow.setAllowNegative(negative);
this._numberWindow.setHandler(
"cancel",
this.onActorParamInputCancel.bind(this)
);
this._numberWindow.start(
number,
digits,
this.onActorParamInputOk.bind(this)
);
};
/**
* アクターパラメータのキャンセル処理
*/
Scene_Debug.prototype.onActorParamCancel = function () {
this._actorListWindow.activate();
};
/**
* アクターパラメータ入力の決定
*/
Scene_Debug.prototype.onActorParamInputOk = function (number) {
var actor = this._actorListWindow.item();
var param = this._actorParamWindow.item();
if (param === "level") {
if (actor.level !== number) {
actor.changeLevel(number, false);
}
} else {
// パラメータの設定 (Game_Actor に対して呼ぶ)
var setParameter = function (paramId, value) {
var currValue = originalParamPlus.call(this, paramId);
var amount = value - currValue;
this.addParam(paramId, amount);
};
var paramId = this._actorParamWindow.paramId();
setParameter.call(actor, paramId, number);
}
this._actorParamWindow.refresh();
this.onActorParamInputCancel();
};
/**
* アクターパラメータ入力のキャンセル処理
*/
Scene_Debug.prototype.onActorParamInputCancel = function () {
this._numberWindow.close();
this._actorParamWindow.activate();
};
/**
* アクタースキル編集の決定処理
*/
Scene_Debug.prototype.onActorSkillOk = function () {
// 選択したスキルの習得状態を切り替え
var skill = this._actorSkillWindow.item();
var actor = this._actorListWindow.item();
if (actor.isLearnedSkill(skill.id)) {
actor.forgetSkill(skill.id);
} else {
actor.learnSkill(skill.id);
}
this._actorSkillWindow.redrawItem(this._actorSkillWindow.index());
this._actorSkillWindow.activate();
};
/**
* アクタースキル編集のキャンセル処理
*/
Scene_Debug.prototype.onActorSkillCancel = function () {
this._helpWindow.hide();
this._actorSkillWindow.hide();
this._actorListWindow.show();
this._actorParamWindow.refresh();
this._actorParamWindow.show();
this._actorParamWindow.activate();
};
/**
* パーティ編成の実行
*/
Scene_Debug.prototype.onSelectPartyMember = function () {
this.createPartyWindow();
this._commandWindow.hide();
this._activePartyTitleWindow.show();
this._reservePartyTitleWindow.show();
this._activePartyWindow.show();
this._activePartyWindow.activate();
this._activePartyWindow.select(0);
this._reservePartyWindow.show();
this._reservePartyWindow.select(0);
this._titleWindow.setText(TextManager.DebugUtil.member);
};
/**
* パーティ編成: パーティ内アクター選択の決定
*/
Scene_Debug.prototype.onActivePartyOk = function () {
this._reservePartyWindow.activate();
};
/**
* パーティ編成: パーティ内アクター選択のキャンセル
*/
Scene_Debug.prototype.onActivePartyCancel = function () {
this._activePartyTitleWindow.hide();
this._reservePartyTitleWindow.hide();
this._activePartyWindow.hide();
this._reservePartyWindow.hide();
this.activateCommandWindow();
};
/**
* パーティ編成: パーティ内アクター並び替えの開始
*/
Scene_Debug.prototype.onActivePartyFormationStart = function () {
this._activePartyWindow.setPendingIndex(this._activePartyWindow.index());
this._activePartyWindow.setFormationChangeMode(true);
this._activePartyWindow.refresh();
this._activePartyWindow.setHandler(
"ok",
this.onActivePartyFormationOk.bind(this)
);
this._activePartyWindow.setHandler(
"formation",
this.onActivePartyFormationOk.bind(this)
);
this._activePartyWindow.setHandler(
"cancel",
this.onActivePartyFormationCancel.bind(this)
);
};
/**
* パーティ編成: パーティ内アクター並び替えの決定
*/
Scene_Debug.prototype.onActivePartyFormationOk = function () {
$gameParty.swapOrder(
this._activePartyWindow.getPendingIndex(),
this._activePartyWindow.index()
);
this._activePartyWindow.setFormationChangeMode(false);
this._activePartyWindow.refresh();
this._activePartyWindow.setHandler("ok", this.onActivePartyOk.bind(this));
this._activePartyWindow.setHandler(
"formation",
this.onActivePartyFormationStart.bind(this)
);
this._activePartyWindow.setHandler(
"cancel",
this.onActivePartyCancel.bind(this)
);
};
/**
* パーティ編成: パーティ内アクター並び替えのキャンセル
*/
Scene_Debug.prototype.onActivePartyFormationCancel = function () {
this._activePartyWindow.setFormationChangeMode(false);
this._activePartyWindow.refresh();
this._activePartyWindow.setHandler("ok", this.onActivePartyOk.bind(this));
this._activePartyWindow.setHandler(
"formation",
this.onActivePartyFormationStart.bind(this)
);
this._activePartyWindow.setHandler(
"cancel",
this.onActivePartyCancel.bind(this)
);
this._activePartyWindow.activate();
};
/**
* パーティ編成: 待機メンバー選択の決定
*/
Scene_Debug.prototype.onReservePartyOk = function () {
// 選択したアクター同士を入れ替える
var inActor = this._reservePartyWindow.item();
var outActor = this._activePartyWindow.item();
replaceActor.call($gameParty, inActor, outActor);
this._activePartyWindow.refresh();
this._activePartyWindow.activate();
this._reservePartyWindow.refresh();
};
/**
* パーティ編成: 待機メンバー選択のキャンセル
*/
Scene_Debug.prototype.onReservePartyCancel = function () {
this._activePartyWindow.activate();
};
/**
* マップリロードの実行
*/
Scene_Debug.prototype.onReloadMap = function () {
$gameMap.setup($gameMap._mapId);
this.popScene();
// XXX: 入り直しせずにリロードする?
//DataManager.loadMapData();
//$gameMap._tilesetId = $dataMap.tilesetId;
//$gameMap.refereshVehicles();
//$gameMap.setupParallax();
//$gameMap.setupBattleback();
//$gameMap.refresh();
};
/**
* データベースリロードの実行
*/
Scene_Debug.prototype.onReloadDatabase = function () {
// null 参照回避のため、update 完了後にリロードする
this._postUpdateProc = function () {
DataManager.loadDatabase();
};
// データベースロード完了後の処理
this._loadCompleteHandler = function () {
// ウォッチ項目の再構築
$gameTemp.getDebugWatchItemList().forEach(function (item) {
item.refresh();
});
function reload(window) {
if (window) {
window.refresh();
}
}
// データベースに依存しているウィンドウを再描画
reload(this._itemWindow);
reload(this._actorListWindow);
reload(this._actorParamWindow);
reload(this._activePartyWindow);
reload(this._reservePartyWindow);
reload(this._mapListWindow);
reload(this._rangeWindow);
reload(this._editWindow);
reload(this._watchListWindow);
reload(this._troopWindow);
// 追加コマンド
KMS.DebugUtil.debugCommands.forEach(function (command) {
command.onReloadDatabase.call(this);
}, this);
// 追加処理
KMS.DebugUtil.databaseReloadHandlers.forEach(function (handler) {
handler.call(window);
});
this._commandWindow.activate();
};
};
/**
* 場所移動コマンドの実行
*/
Scene_Debug.prototype.onTransferMapStart = function () {
this.createMapListWindow();
this.createMapTileWindow();
// マップ一覧のハンドラを設定
this._mapListWindow.setHandler("ok", this.onTransferMapListOk.bind(this));
this._mapListWindow.setHandler(
"cancel",
this.onTransferMapListCancel.bind(this)
);
this._commandWindow.hide();
this._mapListWindow.show();
this._mapTilePositionWindow.show();
this._mapTileWindow.show();
this._mapListWindow.selectLast();
this._mapListWindow.activate();
this._titleWindow.setText(TextManager.DebugUtil.transfer);
};
/**
* 場所移動: マップの決定
*/
Scene_Debug.prototype.onTransferMapListOk = function () {
// null 参照回避のため、update 完了後にマップを読み込む
this._postUpdateProc = function () {
var map = this._mapListWindow.item();
DataManager.loadMapData(map.id);
};
// マップデータ読み込み完了時の処理
this._loadCompleteHandler = function () {
debuglog("DataManager.loadMapData finished");
// update 完了後にタイルセットを読み込む
this._postUpdateProc = function () {
var map = this._mapListWindow.item();
this._mapTileWindow.setupMap(map.id);
this._mapTileWindow.loadTileset();
// タイルセットの読み込み完了後に表示を反映
this._loadCompleteHandler = function () {
debuglog("Window_DebugMapTile.loadTileset finished");
this._mapTileWindow.refreshTileset();
this._mapTileWindow.activate();
};
};
};
};
/**
* 場所移動: マップ選択のキャンセル
*/
Scene_Debug.prototype.onTransferMapListCancel = function () {
this._mapListWindow.hide();
this._mapTileWindow.hide();
this._mapTilePositionWindow.hide();
this.activateCommandWindow();
};
/**
* 場所移動: タイルの決定
*/
Scene_Debug.prototype.onTransferMapTileOk = function () {
// 移動先を設定
var info = this._mapTileWindow.getTransferInfo();
$gamePlayer.reserveTransfer(
info.mapId,
info.x,
info.y,
info.d,
info.fadeType
);
// マップに戻る
this.popScene();
};
/**
* 場所移動: タイル選択のキャンセル
*/
Scene_Debug.prototype.onTransferMapTileCancel = function () {
this._mapTileWindow.setupMap(0);
this._mapListWindow.activate();
};
/**
* スイッチ・変数コマンドの実行
*/
Scene_Debug.prototype.onSwitchVarStart = function () {
// ハンドラの切り替え
this._rangeWindow.setHandler("cancel", this.onSwitchVarCancel.bind(this));
this._editWindow.setHandler("ok", this.onSwitchVarOk.bind(this));
this._commandWindow.hide();
this._rangeWindow.show();
this._editWindow.show();
this._rangeWindow.activate();
this.refreshHelpWindow();
this._titleWindow.setText(TextManager.DebugUtil.switchVar);
};
/**
* スイッチ・変数範囲ウィンドウのキャンセル処理
*/
Scene_Debug.prototype.onSwitchVarCancel = function () {
this._rangeWindow.hide();
this._editWindow.hide();
this.activateCommandWindow();
};
/**
* スイッチ・変数編集ウィンドウの決定
*/
Scene_Debug.prototype.onSwitchVarOk = function () {
var id = this._editWindow.currentId();
switch (this._editWindow.getMode()) {
case "switch":
{
// スイッチを切り替える
$gameSwitches.setValue(id, !$gameSwitches.value(id));
this._editWindow.redrawCurrentItem();
this._editWindow.activate();
}
break;
case "variable":
{
// 変数の入力
var caption = "%1:%2".format(
id.padZero(4),
this._editWindow.itemName(id)
);
var number = $gameVariables.value(id);
var digits = Params.variableInputDigits;
this._numberWindow.setCaption(caption);
this._numberWindow.setAllowNegative(true);
this._numberWindow.setHandler(
"cancel",
this.onSwitchVarInputCancel.bind(this)
);
this._numberWindow.start(
number,
digits,
this.onSwitchVarInputOk.bind(this)
);
}
break;
default:
// 来ないはずだが、とりあえず無反応にする
this._editWindow.activate();
break;
}
};
/**
* スイッチ・変数操作: 入力の決定
*/
Scene_Debug.prototype.onSwitchVarInputOk = function (number) {
$gameVariables.setValue(this._editWindow.currentId(), number);
this._editWindow.redrawCurrentItem();
// 入力の終了処理はキャンセルと同じ
this.onSwitchVarInputCancel();
};
/**
* スイッチ・変数操作: 入力のキャンセル処理
*/
Scene_Debug.prototype.onSwitchVarInputCancel = function () {
this._numberWindow.close();
this._editWindow.activate();
};
/**
* セルフスイッチコマンドの実行
*/
Scene_Debug.prototype.onSelfSwitchMapStart = function () {
this.createMapListWindow();
this.createEventListWindow();
this.createSelfSwitchListWindow();
// マップ一覧のハンドラを設定
this._mapListWindow.setHandler(
"ok",
this.onSelfSwitchMapListOk.bind(this)
);
this._mapListWindow.setHandler(
"cancel",
this.onSelfSwitchMapListCancel.bind(this)
);
// ウィンドウ切り替え
this._commandWindow.hide();
this._mapListWindow.show();
this._eventListWindow.show();
this._selfSwitchListWindow.show();
this._mapListWindow.selectLast();
this._mapListWindow.activate();
this.refreshHelpWindow();
this._titleWindow.setText(TextManager.DebugUtil.selfSwitch);
};
/**
* セルフスイッチ: マップの決定
*/
Scene_Debug.prototype.onSelfSwitchMapListOk = function () {
this._isLoadingTemporallyMap = true;
var map = this._mapListWindow.item();
DataManager.loadKmsTemporallyMapData(map.id);
// マップデータ読み込み完了後の処理
this._loadCompleteHandler = function () {
this._isLoadingTemporallyMap = false;
var map = this._mapListWindow.item();
this._eventListWindow.setMap(map);
this._selfSwitchListWindow.setMap(map);
this._eventListWindow.selectLast();
this._eventListWindow.activate();
};
};
/**
* セルフスイッチ: マップ選択のキャンセル
*/
Scene_Debug.prototype.onSelfSwitchMapListCancel = function () {
this._mapListWindow.hide();
this._eventListWindow.hide();
this._selfSwitchListWindow.hide();
this.activateCommandWindow();
};
/**
* セルフスイッチ: イベントの決定
*/
Scene_Debug.prototype.onSelfSwitchEventListOk = function () {
//var event = this._eventListWindow.item();
//this._selfSwitchListWindow.setEvent(event);
this._selfSwitchListWindow.activate();
};
/**
* セルフスイッチ: イベント選択のキャンセル
*/
Scene_Debug.prototype.onSelfSwitchEventListCancel = function () {
this._eventListWindow.setMap(null);
this._selfSwitchListWindow.setMap(null);
this._mapListWindow.activate();
$dataKmsTemporallyMapData = null;
};
/**
* セルフスイッチの決定
*/
Scene_Debug.prototype.onSelfSwitchListOk = function () {
var key = this._selfSwitchListWindow.getKey();
if (key == null) {
return;
}
// ON/OFF 切り替え
$gameSelfSwitches.setValue(key, !$gameSelfSwitches.value(key));
this._selfSwitchListWindow.refresh();
this._selfSwitchListWindow.activate();
};
/**
* セルフスイッチ選択のキャンセル
*/
Scene_Debug.prototype.onSelfSwitchListCancel = function () {
this._eventListWindow.activate();
};
/**
* システム値コマンドの実行
*/
Scene_Debug.prototype.onSelectSystemValue = function () {
this.createSystemValueWindow();
this._commandWindow.hide();
this._systemValueWindow.show();
this._systemValueWindow.activate();
this._titleWindow.setText(TextManager.DebugUtil.systemValue);
};
/**
* システム値: 項目の決定
*/
Scene_Debug.prototype.onSystemValueOk = function () {
var key = this._systemValueWindow.getKey();
var value = this._systemValueWindow.item();
if (key == null || value == null) {
return;
}
var caption = TextManager.DebugUtil[key];
var number = value.get();
var digits = Params.variableInputDigits;
this._numberWindow.setCaption(caption);
this._numberWindow.setAllowNegative(false);
this._numberWindow.setHandler(
"cancel",
this.onSystemValueInputCancel.bind(this)
);
this._numberWindow.start(
number,
digits,
this.onSystemValueInputOk.bind(this)
);
};
/**
* システム値: 項目選択のキャンセル
*/
Scene_Debug.prototype.onSystemValueCancel = function () {
this._systemValueWindow.hide();
this.activateCommandWindow();
};
/**
* システム値: 入力の決定
*/
Scene_Debug.prototype.onSystemValueInputOk = function (number) {
var value = this._systemValueWindow.item();
if (value != null) {
value.set(number);
}
this._systemValueWindow.refresh();
this.onSystemValueInputCancel();
};
/**
* システム値: 入力のキャンセル処理
*/
Scene_Debug.prototype.onSystemValueInputCancel = function () {
this._numberWindow.close();
this._systemValueWindow.refresh();
this._systemValueWindow.activate();
};
/**
* ウォッチウィンドウコマンドの実行
*/
Scene_Debug.prototype.onWatchWindow = function () {
this.createWatchWindow();
this.createWatchListWindow();
this.createWatchEditWindow();
// _watchWindow は自動で表示状態が変わるので何もしない
this._commandWindow.hide();
this._watchListWindow.show();
this._watchListWindow.activate();
this._titleWindow.setText(TextManager.DebugUtil.watchWindow);
};
/**
* ウォッチ: 項目の決定
*/
Scene_Debug.prototype.onWatchListOk = function () {
this._watchEditWindow.setItem(this._watchListWindow.item());
this._watchEditWindow.open();
this._watchEditWindow.activate();
};
/**
* ウォッチ: 項目選択のキャンセル
*/
Scene_Debug.prototype.onWatchListCancel = function () {
// update で自動表示されてしまうので消去ついでに削除
this.destroyWatchWindow();
this._watchListWindow.hide();
this.activateCommandWindow();
};
/**
* ウォッチ: 項目編集の決定
*/
Scene_Debug.prototype.onWatchEditOk = function () {
var selectedItem = this._watchListWindow.item();
switch (this._watchEditWindow.getMode()) {
case "target":
{
// ウォッチ対象を選択
this.onWatchSelectSwitchVarStart();
}
return;
case "ok":
{
var editItem = this._watchEditWindow.item();
if (selectedItem instanceof DebugWatchItem) {
// 編集 (選択項目を差し替える)
$gameTemp.replaceDebugWatchItem(
editItem,
this._watchListWindow.index()
);
} else {
// 追加
$gameTemp.registerDebugWatchItem(editItem);
}
this._watchListWindow.refresh();
}
break;
case "remove":
{
// 選択項目を削除
// * 末尾の「追加」コマンドは消せないので、index の修正は不要
$gameTemp.removeDebugWatchItem(selectedItem);
this._watchListWindow.refresh();
}
break;
default:
// 何もしない (キャンセル扱い)
break;
}
this._watchEditWindow.close();
this._watchListWindow.activate();
};
/**
* ウォッチ: スイッチ・変数選択の開始
*/
Scene_Debug.prototype.onWatchSelectSwitchVarStart = function () {
// ハンドラの切り替え
this._rangeWindow.setHandler(
"cancel",
this.onWatchSelectSwitchVarCancel.bind(this)
);
this._editWindow.setHandler(
"ok",
this.onWatchSelectSwitchVarOk.bind(this)
);
this.destroyWatchWindow();
this._watchListWindow.hide();
this._watchEditWindow.hide();
this._rangeWindow.show();
this._editWindow.show();
this._rangeWindow.activate();
};
/**
* ウォッチ: スイッチ・変数選択の決定
*/
Scene_Debug.prototype.onWatchSelectSwitchVarOk = function () {
var item = this._watchEditWindow.item();
if (this._editWindow.getMode() === "switch") {
// スイッチを選択
item.setupSwitch(this._editWindow.currentId());
} else {
// 変数を選択
item.setupVariable(this._editWindow.currentId());
}
this._watchEditWindow.refresh();
// ウィンドウを閉じる処理はキャンセルと一緒
this.onWatchSelectSwitchVarCancel();
};
/**
* ウォッチ: スイッチ・変数選択のキャンセル処理
*/
Scene_Debug.prototype.onWatchSelectSwitchVarCancel = function () {
this.createWatchWindow();
this._rangeWindow.hide();
this._editWindow.hide();
this._watchListWindow.show();
this._watchEditWindow.show();
this._watchEditWindow.activate();
};
/**
* ウォッチ: 項目編集のキャンセル
*/
Scene_Debug.prototype.onWatchEditCancel = function () {
this._watchEditWindow.close();
this._watchListWindow.activate();
};
/**
* エンカウントコマンドの実行
*/
Scene_Debug.prototype.onForceEncounter = function () {
this.createTroopWindow();
this._commandWindow.hide();
this._troopWindow.show();
this._troopWindow.activate();
this._titleWindow.setText(TextManager.DebugUtil.encounter);
};
/**
* 敵グループの決定
*/
Scene_Debug.prototype.onTroopOk = function () {
var troop = this._troopWindow.item();
if (!troop) {
// null の場合は現在のマップからランダム選定
var troopId = $gamePlayer.makeEncounterTroopId();
troop = $dataTroops[troopId];
if (!troop) {
// マップに敵がいなければ何もしない
this._troopWindow.activate();
return;
}
}
// エンカウント実行 (逃走、敗北可)
BattleManager.setup(troop.id, true, true);
SceneManager.push(Scene_Battle);
};
/**
* 敵グループ選択のキャンセル処理
*/
Scene_Debug.prototype.onTroopCancel = function () {
this._troopWindow.hide();
this.activateCommandWindow();
};
/**
* 通行可否表示コマンドの実行
*/
Scene_Debug.prototype.onDispPassage = function () {
// TODO: 実装
this._titleWindow.setText(TextManager.DebugUtil.dispPassage);
};
})();
} // <-- if (Utils.isOptionValid('test'))