/* eslint-disable no-undef */ /*:ja * @plugindesc ファストトラベルプラグイン * @author COBRA * * @help * スイッチで指定したファストトラベルを解放 */ function Scene_Travel() { this.initialize(...arguments); } (function () { //メニューに追加 Scene_Menu.prototype.commandTravel = function () { SceneManager.push(Scene_Travel); }; Scene_Travel.prototype = Object.create(Scene_MenuBase.prototype); Scene_Travel.prototype.constructor = Scene_Travel; Scene_Travel.prototype.initialize = function () { SDN_SetFastTravel(); Scene_MenuBase.prototype.initialize.call(this); }; Scene_Travel.prototype.create = function () { Scene_MenuBase.prototype.create.call(this); DataManager.loadAllSavefileImages(); this.createHelpWindow(); this.createListWindow(); this._helpWindow.setText(""); }; Scene_Travel.prototype.createBackground = function () { this._backgroundSprite = new Sprite(); this._backgroundSprite.bitmap = ImageManager.loadSystem("menu_travel_back"); this.addChild(this._backgroundSprite); this._backgroundTextSprite = new Sprite(new Bitmap(Graphics.width, Graphics.height)); var b = this._backgroundTextSprite.bitmap; b.fontFace = "serif"; b.fontSize = 32; b.textColor = "#000000"; b.drawTextM("Fast Travel", 22, 20, 200, 22, "center"); this.addChild(this._backgroundTextSprite); }; Scene_Travel.prototype.createHelpWindow = function () { const rect = this.helpWindowRect(); this._helpWindow = new Window_TravelHelp(rect); this.addWindow(this._helpWindow); }; Scene_Travel.prototype.helpWindowRect = function () { const wx = 762; const wy = 80; const ww = Graphics.boxWidth - wx; const wh = 630; return new Rectangle(wx, wy, ww, wh); }; Scene_Travel.prototype.createListWindow = function () { const rect = this.listWindowRect(); this._listWindow = new Window_TravelList(rect); this._listWindow.setHandler("ok", this.onCategoryOk.bind(this)); this._listWindow.setHandler("cancel", this.popScene.bind(this)); //this._listWindow.setMode(this.mode(), this.needsAutosave()); this._listWindow.setHelpWindow(this._helpWindow); //this._listWindow.selectSavefile(this.firstSavefileId()); this._listWindow.refresh(); this.addWindow(this._listWindow); }; Scene_Travel.prototype.listWindowRect = function () { const wx = 120; const wy = 80; const ww = Graphics.boxWidth - this._helpWindow.width - wx; const wh = 596; return new Rectangle(wx, wy, ww, wh); }; Scene_Travel.prototype.helpWindowText = function () { return ""; }; Scene_Travel.prototype.helpWindowText = function () { return TextManager.saveMessage; }; //コモンイベントを実行 Scene_Travel.prototype.onCategoryOk = function () { this._listWindow.go_travel(); }; // ######################################################## // ################### 一覧ウィンドウ ###################### // ######################################################## function Window_TravelList() { this.initialize(...arguments); } Window_TravelList.prototype = Object.create(Window_Selectable.prototype); Window_TravelList.prototype.constructor = Window_TravelList; Window_TravelList.prototype.go_travel = function () { var data = this.CBR_travel_list[this.index()]; $gameVariables.setValue(121, data.map_id); $gameVariables.setValue(122, data.x); $gameVariables.setValue(123, data.y); $gameVariables.setValue(130, data.d); $gameTemp.reserveCommonEvent(1104); SceneManager.goto(Scene_Map); /* $gamePlayer.reserveTransfer( 97, 16, 8, 8, 0 ); */ }; Window_TravelList.prototype.initialize = function (rect) { Window_Selectable.prototype.initialize.call(this, rect); //最初に0番目って指定、commandではデフォでやってるけど this.select(0); this.activate(); this.CBR_travel_data = [ { switch: 371, name: "Iris Academy", file: "travel01.png", map_id: 10, x: 24, y: 41, d: 8 }, { switch: 372, name: "Iris Academy", file: "travel02.png", map_id: 34, x: 24, y: 41, d: 8 }, { switch: 373, name: "Okutada Mountain", file: "travel03.png", map_id: 64, x: 14, y: 13, d: 8 }, { switch: 374, name: "Kamiyado", file: "travel04.png", map_id: 72, x: 34, y: 12, d: 2 }, { switch: 375, name: "Kamiyado", file: "travel05.png", map_id: 76, x: 34, y: 12, d: 2 }, { switch: 376, name: "Chichitake Cave", file: "travel06.png", map_id: 86, x: 16, y: 12, d: 8 }, { switch: 377, name: "Oshika Forest", file: "travel07.png", map_id: 92, x: 9, y: 46, d: 8 }, { switch: 378, name: "Tsukuba Peak", file: "travel08.png", map_id: 97, x: 22, y: 15, d: 8 }, { switch: 379, name: "Iris Headquarters", file: "travel09.png", map_id: 104, x: 19, y: 27, d: 8 }, { switch: 380, name: "Iris Dungeon", file: "travel10.png", map_id: 115, x: 12, y: 4, d: 2 }, { switch: 381, name: "Ichinotani Fishing Park", file: "travel11.png", map_id: 120, x: 17, y: 11, d: 2 }, { switch: 382, name: "Akagi Pass -Trailhead", file: "travel12.png", map_id: 134, x: 12, y: 11, d: 8 }, { switch: 383, name: "Meikyo Wharf", file: "travel13.png", map_id: 140, x: 49, y: 36, d: 8 }, { switch: 384, name: "Shibuno", file: "travel14.png", map_id: 143, x: 20, y: 33, d: 8 }, { switch: 385, name: "Shibuno", file: "travel15.png", map_id: 144, x: 20, y: 33, d: 8 }, { switch: 386, name: "Aoiyama Cemetery", file: "travel16.png", map_id: 150, x: 14, y: 18, d: 8 }, { switch: 387, name: "Shirakawa Research Institute Ruins", file: "travel17.png", map_id: 154, x: 11, y: 12, d: 8 }, { switch: 388, name: "Nexus Future Hideout", file: "travel18.png", map_id: 169, x: 32, y: 6, d: 2 }, { switch: 389, name: "Erodoll Dungeon", file: "travel19.png", map_id: 173, x: 12, y: 13, d: 8 }, { switch: 390, name: "Hayama Highlands", file: "travel20.png", map_id: 180, x: 21, y: 27, d: 8 }, { switch: 391, name: "Sendai Dungeon", file: "travel21.png", map_id: 185, x: 12, y: 12, d: 8 }, { switch: 392, name: "Magical Crime Prison", file: "travel22.png", map_id: 190, x: 12, y: 14, d: 8 }, { switch: 393, name: "Yaba Island", file: "travel23.png", map_id: 196, x: 19, y: 20, d: 8 }, { switch: 394, name: "Tochigi Dungeon", file: "travel24.png", map_id: 204, x: 20, y: 26, d: 8 }, { switch: 395, name: "Toto Ancient Ruins", file: "travel25.png", map_id: 212, x: 12, y: 12, d: 8 }, { switch: 396, name: "Dahlia's Hideout", file: "travel26.png", map_id: 225, x: 25, y: 25, d: 8 }, { switch: 397, name: "Fuji Sea of Trees", file: "travel27.png", map_id: 232, x: 30, y: 46, d: 8 }, { switch: 398, name: "Toriei Peak", file: "travel28.png", map_id: 242, x: 8, y: 26, d: 8 }, { switch: 399, name: "Road to Seien Church", file: "travel29.png", map_id: 247, x: 6, y: 37, d: 8 }, { switch: 403, name: "Underground Arena", file: "travel30.png", map_id: 253, x: 14, y: 16, d: 8 }, { switch: 404, name: "Road to Iris Headquarters", file: "travel31.png", map_id: 255, x: 29, y: 39, d: 8 } ]; this.CBR_travel_list = []; for (data of this.CBR_travel_data) { if ($gameSwitches.value(data.switch)) { ImageManager.loadSystem(data.file.slice(0, -4)); this.CBR_travel_list.push(data); } } }; Window_TravelList.prototype.maxItems = function () { return this.CBR_travel_list.length; }; Window_TravelList.prototype.numVisibleRows = function () { return 15; }; //右のウィンドウにデータを渡す Window_TravelList.prototype.callUpdateHelp = function () { if (this.active && this._helpWindow) { this.updateHelp(); } }; Window_TravelList.prototype.updateHelp = function () { this._helpWindow.setItem(this.CBR_travel_list[this.index()]); }; Window_TravelList.prototype.drawItem = function (index) { const info = this.CBR_travel_list[index]; const rect = this.itemRectWithPadding(index); this.resetTextColor(); //this.changePaintOpacity(this.isEnabled(savefileId)); //this.drawTitle(savefileId, rect.x, rect.y + 4); if (info) { this.drawContents(info, rect); } }; Window_TravelList.prototype.drawContents = function (info, rect) { // const bottom = rect.y + rect.height; this.contents.fontFace = "serif"; // this.contents.fontSize = 20; //b.textColor = "#000000"; this.changeTextColor("#000000"); this.drawTextM(info.name, 104, rect.y + 2, 400, "left"); // const lineHeight = this.lineHeight(); // const y2 = bottom - lineHeight - 4; // if (y2 >= lineHeight) { // this.drawPlaytime(info, rect.x, y2, rect.width); // } }; // ################# カーソルの変更 ################## Window_TravelList.prototype.loadWindowskin = function () { this.windowskin = ImageManager.loadSystem("Window"); this.menu_cursor_skin = ImageManager.loadSystem("menu_item_selected"); this.menu_item_skin = ImageManager.loadSystem("menu_item_selected_2"); if (!this.menu_item_skin.isReady()) { this.menu_item_skin.addLoadListener(() => { this.refresh(); // 画像がロードされたら再描画 }); return; } }; //56×200にする Window_TravelList.prototype._refreshCursor = function () { const drect = this._cursorRect.clone(); const srect = { x: 0, y: 40, width: 588, height: 40 }; const m = 0; for (const child of this._cursorSprite.children) { child.bitmap = this.menu_item_skin; } this._setRectPartsGeometry(this._cursorSprite, srect, drect, m); }; //未選択コマンドの背景を画像に Window_TravelList.prototype.drawItemBackground = function (index) { const rect = this.itemRect(index); if (this.menu_item_skin) { const bitmap = this.menu_item_skin; const dx = rect.x; const dy = rect.y; const dw = rect.width; const dh = rect.height; this.contentsBack.blt(bitmap, 0, 0, 588, 40, dx, dy, dw, dh); } }; Window_TravelList.prototype._refreshAllParts = function () { //this._refreshBack(); //this._refreshFrame(); this._refreshCursor(); this._refreshArrows(); this._refreshPauseSign(); }; // ########################################################### // ##################### 移動先ウィンドウ ##################### // ########################################################### function Window_TravelHelp() { this.initialize(...arguments); } Window_TravelHelp.prototype = Object.create(Window_Help.prototype); Window_TravelHelp.prototype.constructor = Window_TravelHelp; Window_TravelHelp.prototype.setItem = function (item) { if (item) { //this.setText(item ? item.name : ""); this._CBR_travel_data = item; this.refresh(); } }; Window_TravelHelp.prototype.refresh = function () { const rect = this.baseTextRect(); this.contents.clear(); var data = this._CBR_travel_data; if (data) { this.contents.fontFace = "serif"; this.contents.fontSize = 22; this.changeTextColor("#000000"); this.drawTextM("Travel", 8, 32, rect.width, "center"); this.contents.fontSize = 28; this.changeTextColor("#000000"); this.drawTextM(data.name, 8, 97, rect.width, "center"); const bitmap = ImageManager.loadSystem(data.file.slice(0, -4)); this.contents.blt(bitmap, 0, 0, 426, 240, 37, 151); if (!bitmap.isReady()) { bitmap.addLoadListener(() => { this.refresh(); // 画像がロードされたら再描画 }); return; } this.contents.fontSize = 20; this.drawTextM("Current", 30, 398, 100, "left"); this.drawTextM("Destination", 30, 429, 100, "left"); this.changeTextColor("#FFFFFF"); this.drawTextS($dataMapInfos[$gameMap.mapId()].name, 148, 398, 200, "left"); this.drawTextS(data.name, 148, 429, 200, "left"); } }; Window_TravelHelp.prototype._refreshAllParts = function () { //this._refreshBack(); //this._refreshFrame(); this._refreshCursor(); this._refreshArrows(); this._refreshPauseSign(); }; })();