alter-egoism/js/plugins/CBR_travel.js

575 lines
12 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

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

/* 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();
};
})();