449 lines
16 KiB
JavaScript
449 lines
16 KiB
JavaScript
(function () {
|
||
//##################### メニューの背景変える #####################
|
||
Scene_Skill.prototype.createBackground = function () {
|
||
this._backgroundSprite = new Sprite();
|
||
this._backgroundSprite.bitmap = ImageManager.loadSystem("menu_skill_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("Skills", 22, 20, 200, 22, "center");
|
||
this.addChild(this._backgroundTextSprite);
|
||
|
||
this._backgroundTextSprite3 = new Sprite(new Bitmap(200, 50));
|
||
var b3 = this._backgroundTextSprite3.bitmap;
|
||
b3.fontFace = "serif";
|
||
b3.fontSize = 18;
|
||
b3.textColor = "#000000";
|
||
b3.drawTextM("SP Cost", 0, 0, 200, 50, "center");
|
||
this._backgroundTextSprite3.x = 572;
|
||
this._backgroundTextSprite3.y = 58;
|
||
this.addChild(this._backgroundTextSprite3);
|
||
|
||
this._backgroundTextSprite4 = new Sprite(new Bitmap(200, 50));
|
||
var b4 = this._backgroundTextSprite4.bitmap;
|
||
b4.fontFace = "serif";
|
||
b4.fontSize = 26;
|
||
b4.textColor = "#000000";
|
||
b4.drawTextM("Use Skill", 0, 0, 200, 50, "center");
|
||
this._backgroundTextSprite4.x = 920;
|
||
this._backgroundTextSprite4.y = 124;
|
||
this.addChild(this._backgroundTextSprite4);
|
||
};
|
||
|
||
Scene_Skill.prototype.create = function () {
|
||
Scene_ItemBase.prototype.create.call(this);
|
||
this.createHelpWindow();
|
||
this.createSkillTypeWindow();
|
||
//this.createStatusWindow();
|
||
this.createItemWindow();
|
||
this.createActorWindow();
|
||
};
|
||
|
||
// ####################################################
|
||
// ################# アイテムの種類 ####################
|
||
// ####################################################
|
||
Scene_Skill.prototype.skillTypeWindowRect = function () {
|
||
const wx = 270;
|
||
const wy = -6;
|
||
const ww = 600;
|
||
const wh = 58 + 8;
|
||
return new Rectangle(wx, wy, ww, wh);
|
||
};
|
||
|
||
Window_SkillType.prototype.maxCols = function () {
|
||
return 5;
|
||
};
|
||
|
||
Window_SkillType.prototype.initialize = function (rect) {
|
||
Window_HorzCommand.prototype.initialize.call(this, rect);
|
||
this._padding = 0;
|
||
this.contents.fontFace = "serif";
|
||
};
|
||
Window_SkillType.prototype._refreshAllParts = function () {
|
||
this._padding = 0;
|
||
//this._refreshBack();
|
||
//this._refreshFrame();
|
||
this._refreshCursor();
|
||
this._refreshArrows();
|
||
this._refreshPauseSign();
|
||
};
|
||
|
||
// デザイン関係
|
||
//カーソルの変更
|
||
Window_SkillType.prototype.loadWindowskin = function () {
|
||
this.windowskin = ImageManager.loadSystem("Window");
|
||
this.menu_item_skin = ImageManager.loadSystem("menu_item_categoly_select");
|
||
this.menu_cursor_skin = ImageManager.loadSystem("menu_item_categoly_cursor");
|
||
|
||
if (!this.menu_item_skin.isReady()) {
|
||
this.menu_item_skin.addLoadListener(() => {
|
||
this.refresh(); // 画像がロードされたら再描画
|
||
});
|
||
return;
|
||
}
|
||
};
|
||
|
||
Window_SkillType.prototype.lineHeight = function () {
|
||
return 58;
|
||
};
|
||
|
||
Window_SkillType.prototype._refreshCursor = function () {
|
||
const drect = this._cursorRect.clone();
|
||
const srect = { x: 0, y: 0, width: 126, height: 58 };
|
||
const m = 0;
|
||
for (const child of this._cursorSprite.children) {
|
||
child.bitmap = this.menu_cursor_skin;
|
||
}
|
||
this._setRectPartsGeometry(this._cursorSprite, srect, drect, m);
|
||
};
|
||
//カーソルを微調整、あとカーソルを常に不透明に
|
||
Window_SkillType.prototype._updateCursor = function () {
|
||
this._cursorSprite.alpha = 255;
|
||
this._cursorSprite.visible = this.isOpen() && this.cursorVisible;
|
||
this._cursorSprite.x = this._cursorRect.x;
|
||
this._cursorSprite.y = this._cursorRect.y - 4;
|
||
};
|
||
//未選択コマンドの背景を画像に
|
||
Window_SkillType.prototype.drawItemBackground = function (index) {
|
||
const rect = this.itemRect(index);
|
||
if (this.menu_item_skin.isReady()) {
|
||
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, 126, 58, dx, dy - 4, dw, dh);
|
||
}
|
||
};
|
||
|
||
//カーソルが来た時、アイテムの文字名の色を変更する
|
||
Window_SkillType.prototype.drawItem = function (index) {
|
||
const rect = this.itemLineRect(index);
|
||
const align = this.itemTextAlign();
|
||
this.resetTextColor();
|
||
if (index == this._index) {
|
||
this.changeTextColor("#000000");
|
||
}
|
||
this.changePaintOpacity(this.isCommandEnabled(index));
|
||
//文字をちょっと下にする
|
||
this.drawTextS(this.commandName(index), rect.x, rect.y + 8, rect.width, align);
|
||
};
|
||
|
||
//セレクトするたびに背景をリフレッシュ
|
||
Window_SkillType.prototype.select = function (index) {
|
||
this._index = index;
|
||
|
||
this.contents.clear();
|
||
this.contentsBack.clear();
|
||
this.drawAllItems();
|
||
|
||
this.refreshCursor();
|
||
this.callUpdateHelp();
|
||
};
|
||
//↑のセレクトでの不具合を出ないようにする
|
||
Window_SkillType.prototype.drawAllItems = function () {
|
||
const topIndex = this.topIndex();
|
||
for (let i = 0; i < this.maxVisibleItems(); i++) {
|
||
const index = topIndex + i;
|
||
|
||
if (this._list && index < this.maxItems()) {
|
||
//選択ちゅうだけ背景なくす
|
||
if (i != this._index) {
|
||
this.drawItemBackground(index);
|
||
}
|
||
this.drawItem(index);
|
||
}
|
||
}
|
||
};
|
||
|
||
// コマンド関係
|
||
// コマンドの追加、2は必殺技
|
||
Window_SkillType.prototype.makeCommandList = function () {
|
||
if (this._actor) {
|
||
const skillTypes = this._actor.skillTypes();
|
||
for (const stypeId of skillTypes) {
|
||
const name = $dataSystem.skillTypes[stypeId];
|
||
this.addCommand("All Skills", "skill", true, stypeId, "all");
|
||
}
|
||
|
||
this.addCommand("Attack", "skill", true, 2, "attack");
|
||
this.addCommand("Healing", "skill", true, 2, "cure");
|
||
this.addCommand("Support", "skill", true, 2, "support");
|
||
this.addCommand("Lewd", "skill", true, 2, "h");
|
||
}
|
||
};
|
||
// コマンドにCBR_typeって属性作れるようにする
|
||
Window_SkillType.prototype.addCommand = function (name, symbol, enabled = true, ext = null, CBR_type = null) {
|
||
this._list.push({ name: name, symbol: symbol, enabled: enabled, ext: ext, CBR_type: CBR_type });
|
||
};
|
||
// 上の_listからextを引っ張ってくる
|
||
Window_SkillType.prototype.currentExt = function () {
|
||
return this.currentData() ? this.currentData() : null;
|
||
};
|
||
// updateで毎回これが更新されてる
|
||
Window_SkillList.prototype.setStypeId = function (stype) {
|
||
if (stype) {
|
||
if (this._stypeId !== stype.ext || this._CBR_type !== stype.CBR_type) {
|
||
this._stypeId = stype.ext;
|
||
this._CBR_type = stype.CBR_type;
|
||
this.refresh();
|
||
this.scrollTo(0, 0);
|
||
}
|
||
}
|
||
};
|
||
//スキル一覧に表示するべきstypeIdを設定する、コメント欄を使用
|
||
Window_SkillList.prototype.includes = function (item) {
|
||
//return item && item.stypeId === this._stypeId;
|
||
if (!this._CBR_type || this._CBR_type === "all") {
|
||
return item;
|
||
} else {
|
||
return item && item.meta.CBR_type === this._CBR_type;
|
||
}
|
||
};
|
||
|
||
// #############################################################
|
||
// ################## スキル一覧ウィンドウ #######################
|
||
// #############################################################
|
||
Scene_Skill.prototype.createItemWindow = function () {
|
||
const rect = this.itemWindowRect();
|
||
this._itemWindow = new Window_MenuSkillList(rect);
|
||
this._itemWindow.setHelpWindow(this._helpWindow);
|
||
this._itemWindow.setHandler("ok", this.onItemOk.bind(this));
|
||
this._itemWindow.setHandler("cancel", this.onItemCancel.bind(this));
|
||
this._skillTypeWindow.setSkillWindow(this._itemWindow);
|
||
this.addWindow(this._itemWindow);
|
||
};
|
||
|
||
Scene_Skill.prototype.itemWindowRect = function () {
|
||
const wx = 147;
|
||
const wy = 82;
|
||
const ww = 630;
|
||
const wh = 464;
|
||
return new Rectangle(wx, wy, ww, wh);
|
||
};
|
||
|
||
function Window_MenuSkillList() {
|
||
this.initialize(...arguments);
|
||
}
|
||
Window_MenuSkillList.prototype = Object.create(Window_SkillList.prototype);
|
||
Window_MenuSkillList.prototype.constructor = Window_MenuSkillList;
|
||
|
||
Window_MenuSkillList.prototype.initialize = function (rect) {
|
||
Window_Selectable.prototype.initialize.call(this, rect);
|
||
this._actor = null;
|
||
this._stypeId = 0;
|
||
this._data = [];
|
||
this.contents.fontFace = "serif";
|
||
};
|
||
|
||
Window_MenuSkillList.prototype.maxCols = function () {
|
||
return 1;
|
||
};
|
||
|
||
Window_MenuSkillList.prototype.drawItemName = function (item, x, y, width) {
|
||
if (item) {
|
||
const iconY = y + (this.lineHeight() - ImageManager.iconHeight) / 2;
|
||
const delta = ImageManager.standardIconWidth - ImageManager.iconWidth;
|
||
const textMargin = ImageManager.standardIconWidth + 4;
|
||
const itemWidth = Math.max(0, width - textMargin);
|
||
this.resetTextColor();
|
||
//this.drawIcon(item.iconIndex, x + delta / 2, iconY);
|
||
this.changeTextColor("#000000");
|
||
this.drawTextS(item.name, x + textMargin + 24, y, itemWidth);
|
||
this.resetTextColor();
|
||
}
|
||
};
|
||
Window_MenuSkillList.prototype.drawItemNumber = function (item, x, y, width) {
|
||
if (this.needsNumber()) {
|
||
this.changeTextColor("#000000");
|
||
this.drawTextS($gameParty.numItems(item), x - 30, y, width, "right");
|
||
this.resetTextColor();
|
||
}
|
||
};
|
||
|
||
Window_MenuSkillList.prototype.changePaintOpacity = function (enabled) {
|
||
this.contents.paintOpacity = enabled ? 255 : 100;
|
||
};
|
||
Window_MenuSkillList.prototype.drawItem = function (index) {
|
||
const skill = this.itemAt(index);
|
||
if (skill) {
|
||
this.contents.fontSize = 22;
|
||
const costWidth = this.costWidth();
|
||
const rect = this.itemLineRect(index);
|
||
this.changePaintOpacity(this.isEnabled(skill));
|
||
this.drawItemName(skill, rect.x + 8, rect.y, rect.width);
|
||
this.drawSkillCost(skill, rect.x - 70, rect.y, rect.width);
|
||
this.changePaintOpacity(1);
|
||
}
|
||
};
|
||
|
||
Window_MenuSkillList.prototype.drawSkillCost = function (skill, x, y, width) {
|
||
this.changeTextColor("#000000");
|
||
this.contents.fontSize = 22;
|
||
if (this._actor.skillTpCost(skill) > 0) {
|
||
//this.changeTextColor(ColorManager.tpCostColor());
|
||
this.drawTextM(this._actor.skillTpCost(skill), x, y, width, "right");
|
||
} else if (this._actor.skillMpCost(skill) > 0) {
|
||
//this.changeTextColor(ColorManager.mpCostColor());
|
||
this.drawTextM(this._actor.skillMpCost(skill), x, y, width, "right");
|
||
}
|
||
this.contents.fontSize = 16;
|
||
this.drawTextM("SP", x + 24, y + 2, width, "right");
|
||
};
|
||
|
||
//カーソルの変更
|
||
Window_MenuSkillList.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");
|
||
};
|
||
|
||
//56×200にする
|
||
Window_MenuSkillList.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_MenuSkillList.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_MenuSkillList.prototype._refreshAllParts = function () {
|
||
//this._refreshBack();
|
||
//this._refreshFrame();
|
||
this._refreshCursor();
|
||
this._refreshArrows();
|
||
this._refreshPauseSign();
|
||
};
|
||
|
||
// ##################################################
|
||
// ############# ステータスウィンドウ #################
|
||
// ##################################################
|
||
Scene_Skill.prototype.actorWindowRect = function () {
|
||
const wx = 756;
|
||
const wy = 170;
|
||
const ww = 522;
|
||
const wh = 540;
|
||
return new Rectangle(wx, wy, ww, wh);
|
||
};
|
||
Scene_Skill.prototype.refreshActor = function () {
|
||
const actor = this.actor();
|
||
this._skillTypeWindow.setActor(actor);
|
||
//this._statusWindow.setActor(actor);
|
||
this._itemWindow.setActor(actor);
|
||
};
|
||
|
||
Scene_Skill.prototype.useItem = function () {
|
||
Scene_ItemBase.prototype.useItem.call(this);
|
||
//this._statusWindow.refresh();
|
||
this._itemWindow.refresh();
|
||
};
|
||
|
||
Scene_Skill.prototype.showActorWindow = function () {
|
||
this._actorWindow.show();
|
||
this._actorWindow.activate();
|
||
};
|
||
Scene_Skill.prototype.hideActorWindow = function () {
|
||
// this._actorWindow.hide();
|
||
this._actorWindow.deactivate();
|
||
};
|
||
// ############################################
|
||
// ############# ヘルプウィンドウ ##############
|
||
// ############################################
|
||
Scene_Skill.prototype.onItemCancel = function () {
|
||
this._itemWindow.setHelpWindowItem(null);
|
||
this._itemWindow.deselect();
|
||
this._skillTypeWindow.activate();
|
||
};
|
||
|
||
Scene_Skill.prototype.helpWindowRect = function () {
|
||
const wx = 20;
|
||
const wy = 542;
|
||
const ww = 740;
|
||
const wh = this.helpAreaHeight() + 50;
|
||
return new Rectangle(wx, wy, ww, wh);
|
||
};
|
||
|
||
function Window_SkillHelp() {
|
||
this.initialize(...arguments);
|
||
}
|
||
Window_SkillHelp.prototype = Object.create(Window_Help.prototype);
|
||
Window_SkillHelp.prototype.constructor = Window_SkillHelp;
|
||
|
||
Window_SkillHelp.prototype.setItem = function (item) {
|
||
if (item) {
|
||
this.CBR_skill = item;
|
||
} else {
|
||
this.CBR_skill = null;
|
||
}
|
||
this.setText(item ? item.description : "");
|
||
};
|
||
|
||
Window_SkillHelp.prototype.refresh = function () {
|
||
const rect = this.baseTextRect();
|
||
this.contents.clear();
|
||
|
||
this.contents.fontFace = "serif";
|
||
this.changeTextColor("#000000");
|
||
this.contents.fontSize = 20;
|
||
this.drawTextM("Description", 16, 35, 80, "center");
|
||
this.drawTextM("Attribute", rect.x + 8, rect.y + 4, rect.width);
|
||
this.drawTextM("Range", rect.x + 388, rect.y + 4, rect.width);
|
||
if (this.CBR_skill) {
|
||
this.changeTextColor("#FFFFFF");
|
||
this.drawTextS(["Sure Hit", "Physical", "Magical"][this.CBR_skill.hitType], rect.x + 108, rect.y + 4, rect.width);
|
||
|
||
const scopeNames = [
|
||
"None", // 0: None
|
||
"One Enemy", // 1: One enemy
|
||
"All Enemies", // 2: All enemies
|
||
"1 Random Enemy", // 3: 1 random enemy
|
||
"2 Random Enemies", // 4: 2 random enemies
|
||
"3 Random Enemies", // 5: 3 random enemies
|
||
"4 Random Enemies", // 6: 4 random enemies
|
||
"One Ally", // 7: One ally
|
||
"All Allies", // 8: All allies
|
||
"One Ally (KO)", // 9: One dead ally
|
||
"All Allies (KO)", // 10: All dead allies
|
||
"User", // 11: The user
|
||
"One Ally (Unconditional)", // 12: One ally (unconditional)
|
||
"All Allies (Unconditional)", // 13: All allies (unconditional)
|
||
"All Enemies & Allies"
|
||
];
|
||
this.drawTextS(scopeNames[this.CBR_skill.scope], rect.x + 468, rect.y + 4, rect.width);
|
||
}
|
||
this.changeTextColor("#FFFFFF");
|
||
this.drawTextExS(this._text, rect.x + 100, rect.y + 40, rect.width);
|
||
};
|
||
|
||
Scene_Skill.prototype.createHelpWindow = function () {
|
||
const rect = this.helpWindowRect();
|
||
this._helpWindow = new Window_SkillHelp(rect);
|
||
// 背景を透明にする
|
||
this._helpWindow.setBackgroundType(2);
|
||
//フォントサイズの変更
|
||
this._helpWindow.contents.fontSize = 22;
|
||
//文字の枠線を削除
|
||
|
||
this.addWindow(this._helpWindow);
|
||
};
|
||
})();
|