522 lines
16 KiB
JavaScript
522 lines
16 KiB
JavaScript
//-----------------------------------------------------------------------------
|
|
// Galv's Bust Menu
|
|
//-----------------------------------------------------------------------------
|
|
// For: RPGMAKER MV
|
|
// GALV_BustMenu.js
|
|
//-----------------------------------------------------------------------------
|
|
// 2019-08-09 - Version 1.8 - added fix for busts not loading in MV updated
|
|
// projects when lots of actors
|
|
// 2016-03-28 - Version 1.7 - added ability to disable certain info with -1
|
|
// 2016-02-12 - Version 1.6 - Added nickname, made changable actor display no.
|
|
// 2016-01-12 - Version 1.5 - Fixed MAX level and EXP bar issue.
|
|
// - compatibility: Rocketmancers prettier gauges
|
|
// 2015-11-21 - Version 1.4 - fixed tiny JP alignment issue
|
|
// 2015-11-21 - Version 1.3 - added compatiblity for Yanfly's JobPoints
|
|
// 2015-11-19 - Version 1.2 - fixed issue with drawing single character bust
|
|
// 2015-11-08 - Version 1.1 - added EXP bar and settings
|
|
// 2015-11-07 - Version 1.0 - release
|
|
//-----------------------------------------------------------------------------
|
|
// Terms can be found at:
|
|
// galvs-scripts.com
|
|
//-----------------------------------------------------------------------------
|
|
|
|
var Imported = Imported || {};
|
|
Imported.Galv_BustMenu = true;
|
|
|
|
var Galv = Galv || {}; // Galv's main object
|
|
Galv.BM = Galv.BM || {}; // Galv's stuff
|
|
|
|
//-----------------------------------------------------------------------------
|
|
/*:
|
|
* @plugindesc Changes the default actor layout in the main menu to use
|
|
* vertical "bust" or portrait graphics from /img/pictures/
|
|
* @author Galv - galvs-scripts.com
|
|
*
|
|
* @param Menu Actors
|
|
* @desc Number of actors that appear in the menu before scrolling (can be changed in-game)
|
|
* @default 3
|
|
*
|
|
* @param Menu Actor Rows
|
|
* @desc Number of rows of actors (cannot be changed in-game). You will need to change settings below to fit
|
|
* @default 1
|
|
*
|
|
* @param Name
|
|
* @desc Line number of actor's name
|
|
* -1 to not display
|
|
* @default 1
|
|
*
|
|
* @param Nickname
|
|
* @desc Line number of actor's name
|
|
* -1 to not display
|
|
* @default 0
|
|
*
|
|
* @param Class
|
|
* @desc Line number of actor's class
|
|
* -1 to not display
|
|
* @default 2
|
|
*
|
|
* @param Level
|
|
* @desc Line number of actor's level
|
|
* -1 to not display
|
|
* @default 3
|
|
*
|
|
* @param States
|
|
* @desc Line number of actor's state icons
|
|
* -1 to not display
|
|
* @default 13
|
|
*
|
|
* @param Bars
|
|
* @desc Line number of actor's hp/mp bars
|
|
* -1 to not display
|
|
* @default 14
|
|
*
|
|
* @param Show Exp Bar
|
|
* @desc Can be true or false to display exp bar or not
|
|
* @default true
|
|
*
|
|
* @param Exp Bar
|
|
* @desc Line number of actor's EXP bar
|
|
* -1 to not display
|
|
* @default 4
|
|
*
|
|
* @param JP
|
|
* @desc Line number of actor's JP (If Yanfly's JobPoints is installed)
|
|
* -1 to not display
|
|
* @default 2
|
|
*
|
|
* @param Exp Bar Height
|
|
* @desc Height of the EXP bar in pixels
|
|
* @default 10
|
|
*
|
|
* @param Show Exp Text
|
|
* @desc Can be true or false to display exp text on the bar or not
|
|
* @default true
|
|
*
|
|
* @param Exp Text
|
|
* @desc Text displayed before the exp-till-next-level number
|
|
* @default Next
|
|
*
|
|
* @param Max Exp Text
|
|
* @desc When actor reaches maximum level, this text is displayed on exp bar
|
|
* @default Max
|
|
*
|
|
* @param Exp Bar Color 1
|
|
* @desc Uses text color numbers from windowskin file. Will gradient into color 2
|
|
* @default 0
|
|
*
|
|
* @param Exp Bar Color 2
|
|
* @desc Uses text color numbers from windowskin file. Will gradient into color 1
|
|
* @default 8
|
|
*
|
|
* @param Bust Y
|
|
* @desc Y position of the bust image in pixels
|
|
* @default 100
|
|
*
|
|
* @param Bust Height
|
|
* @desc Height of the bust image in pixels
|
|
* @default 360
|
|
*
|
|
* @param -----------
|
|
* @desc
|
|
*
|
|
* @default
|
|
*
|
|
* @param Bust Offsets
|
|
* @desc See the help section for how to use this.
|
|
* @default
|
|
*
|
|
* @help
|
|
* Galv's Bust Menu
|
|
* ----------------------------------------------------------------------------
|
|
* This plugin changes the layout of actors in the main menu. The plugin
|
|
* includes settings that allow you to change the positioning of the actor
|
|
* data (such as name, level, hp, image, etc.) including how many actors will
|
|
* appear on the menu screen. (NOTE: 1 actor is not working)
|
|
*
|
|
* The plugin displays bust images from /img/pictures/ folder based on the
|
|
* actor's face. For example:
|
|
* If an actor uses the 2nd face from the "Actor1" faces file, then the bust
|
|
* will instead use /img/pictures/Actor1_2.png bust image.
|
|
*
|
|
* ----------------------------------------------------------------------------
|
|
* Bust Offsets (Scroll down the plugin settings to find this)
|
|
* ----------------------------------------------------------------------------
|
|
* Bust images are centered in the actor positions, but sometimes the bust
|
|
* images are not centered themselves. This setting is used to tweak the x,y
|
|
* position of busts if required.
|
|
* To add an x,y offset to busts, add data to this setting as below:
|
|
*
|
|
* bustImageName_1,x,y|bustImageName_2,x,y|bustImageName_3,x,y
|
|
*
|
|
* Each image and data are separated by a pipe (the "|" symbol). For example:
|
|
* Actor1_2,-10,0|Actor1_5,20,5
|
|
* The Actor1_2.png bust will be offset 10 pixels to the left
|
|
* The Actor1_5.png bust will be offset 20 pixels to the right, 5 pixels down
|
|
* ----------------------------------------------------------------------------
|
|
* SCRIPT CALL
|
|
* ----------------------------------------------------------------------------
|
|
* $gameParty._bustActorCount = x; // x is number of actors to display
|
|
* ----------------------------------------------------------------------------
|
|
*/
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// CODE STUFFS
|
|
//-----------------------------------------------------------------------------
|
|
|
|
(function () {
|
|
Galv.BM.a = Number(PluginManager.parameters("Galv_BustMenu")["Menu Actors"]);
|
|
Galv.BM.ar = Number(
|
|
PluginManager.parameters("Galv_BustMenu")["Menu Actor Rows"]
|
|
);
|
|
Galv.BM.name = Number(PluginManager.parameters("Galv_BustMenu")["Name"] - 1);
|
|
Galv.BM.nickname = Number(
|
|
PluginManager.parameters("Galv_BustMenu")["Nickname"] - 1
|
|
);
|
|
Galv.BM.class = Number(
|
|
PluginManager.parameters("Galv_BustMenu")["Class"] - 1
|
|
);
|
|
Galv.BM.level = Number(
|
|
PluginManager.parameters("Galv_BustMenu")["Level"] - 1
|
|
);
|
|
Galv.BM.bars = Number(PluginManager.parameters("Galv_BustMenu")["Bars"] - 1);
|
|
Galv.BM.JP = Number(PluginManager.parameters("Galv_BustMenu")["JP"] - 1);
|
|
Galv.BM.xp = Number(PluginManager.parameters("Galv_BustMenu")["Exp Bar"] - 1);
|
|
Galv.BM.xpBar =
|
|
PluginManager.parameters("Galv_BustMenu")["Show Exp Bar"] == "true"
|
|
? true
|
|
: false;
|
|
Galv.BM.xpText =
|
|
PluginManager.parameters("Galv_BustMenu")["Show Exp Text"] == "true"
|
|
? true
|
|
: false;
|
|
Galv.BM.xpLabel = PluginManager.parameters("Galv_BustMenu")["Exp Text"];
|
|
Galv.BM.xpHeight =
|
|
PluginManager.parameters("Galv_BustMenu")["Exp Bar Height"];
|
|
Galv.BM.maxTxt = PluginManager.parameters("Galv_BustMenu")["Max Exp Text"];
|
|
|
|
Galv.BM.xpCol1 = Number(
|
|
PluginManager.parameters("Galv_BustMenu")["Exp Bar Color 1"]
|
|
);
|
|
Galv.BM.xpCol2 = Number(
|
|
PluginManager.parameters("Galv_BustMenu")["Exp Bar Color 2"]
|
|
);
|
|
Galv.BM.icons = Number(
|
|
PluginManager.parameters("Galv_BustMenu")["States"] - 1
|
|
);
|
|
Galv.BM.bust = Number(PluginManager.parameters("Galv_BustMenu")["Bust Y"]);
|
|
Galv.BM.bustHeight = Number(
|
|
PluginManager.parameters("Galv_BustMenu")["Bust Height"]
|
|
);
|
|
Galv.BM.offsets = (function () {
|
|
var array =
|
|
PluginManager.parameters("Galv_BustMenu")["Bust Offsets"].split("|");
|
|
var obj = {};
|
|
for (i = 0; i < array.length; i++) {
|
|
if (array[i]) {
|
|
var data = array[i].split(",");
|
|
obj[data[0]] = [Number(data[1]), Number(data[2])];
|
|
}
|
|
}
|
|
return obj;
|
|
})();
|
|
|
|
//------------------------------------------------------------
|
|
// COMPATIBILITY WITH ROCKETMANCER'S PRETTIER GAUGES
|
|
|
|
if (
|
|
PluginManager.parameters("PrettyGauges") &&
|
|
Object.keys(PluginManager.parameters("PrettyGauges")).length > 0
|
|
) {
|
|
Galv.BM.rmplugin = true;
|
|
}
|
|
//------------------------------------------------------------
|
|
|
|
var Galv_Game_Party_initialize = Game_Party.prototype.initialize;
|
|
Game_Party.prototype.initialize = function () {
|
|
Galv_Game_Party_initialize.call(this);
|
|
this._bustActorCount = Galv.BM.a;
|
|
};
|
|
|
|
// OVERWRITE
|
|
Window_MenuStatus.prototype.numVisibleRows = function () {
|
|
return Galv.BM.ar;
|
|
};
|
|
Window_MenuStatus.prototype.maxCols = function () {
|
|
return $gameParty._bustActorCount;
|
|
};
|
|
Window_Selectable.prototype.spacing = function () {
|
|
return 0;
|
|
};
|
|
|
|
Window_MenuStatus.prototype.drawItemStatus = function (index) {
|
|
var actor = $gameParty.members()[index];
|
|
var rect = this.itemRect(index);
|
|
var x = rect.x;
|
|
var y = rect.y;
|
|
var width = rect.width - x - this.textPadding();
|
|
this.drawActorSimpleStatus(actor, x, y, width);
|
|
};
|
|
|
|
var Galv_Window_MenuStatus_update = Window_MenuStatus.prototype.update;
|
|
Window_MenuStatus.prototype.update = function () {
|
|
Galv_Window_MenuStatus_update.call(this);
|
|
|
|
// Added as a check if bust bitmaps don't load from cache, refresh again to draw loaded bitmap.
|
|
if (this._galvRefresh) {
|
|
this._galvRefresh = false;
|
|
this.refresh();
|
|
}
|
|
};
|
|
|
|
// OVERWRITE
|
|
Window_MenuStatus.prototype.drawActorSimpleStatus = function (
|
|
actor,
|
|
x,
|
|
y,
|
|
width
|
|
) {
|
|
var lineHeight = this.lineHeight();
|
|
var width = this.bustWidth();
|
|
|
|
var x = x + 5;
|
|
var width2 = Math.max(100, width - this.textPadding()) - 5;
|
|
if (Galv.BM.xp > -1)
|
|
this.drawActorEXP(actor, x, y + lineHeight * Galv.BM.xp, width2);
|
|
if (Galv.BM.name > -1)
|
|
this.drawActorName(actor, x, y + lineHeight * Galv.BM.name);
|
|
if (Galv.BM.nickname > -1)
|
|
this.drawActorNickname(actor, x, y + lineHeight * Galv.BM.nickname);
|
|
if (Galv.BM.level > -1)
|
|
this.drawActorLevel(actor, x, y + lineHeight * Galv.BM.level);
|
|
if (Galv.BM.icons > -1)
|
|
this.drawActorIcons(actor, x, y + lineHeight * Galv.BM.icons);
|
|
if (Galv.BM.class > -1)
|
|
this.drawActorClass(actor, x, y + lineHeight * Galv.BM.class, width2);
|
|
if (Galv.BM.bars > -1) {
|
|
this.drawActorHp(actor, x, y + lineHeight * Galv.BM.bars, width2);
|
|
this.drawActorMp(actor, x, y + lineHeight * (Galv.BM.bars + 1), width2);
|
|
if (Imported.YEP_CoreEngine && eval(Yanfly.Param.MenuTpGauge)) {
|
|
this.drawActorTp(actor, x, y + lineHeight * (Galv.BM.bars + 2), width2);
|
|
}
|
|
}
|
|
if (Imported.YEP_JobPoints && eval(Yanfly.Param.JpShowMenu)) {
|
|
var classId = actor.currentClass().id;
|
|
if (Galv.BM.JP > -1)
|
|
this.drawActorJp(
|
|
actor,
|
|
classId,
|
|
x,
|
|
y + lineHeight * Galv.BM.JP,
|
|
width2,
|
|
"right"
|
|
);
|
|
}
|
|
};
|
|
|
|
Game_Actor.prototype.xpRate = function () {
|
|
return (
|
|
(this.nextLevelExp() - this.currentExp()) /
|
|
(this.nextLevelExp() - this.currentLevelExp())
|
|
);
|
|
};
|
|
|
|
Window_MenuStatus.prototype.drawActorEXP = function (actor, x, y, width) {
|
|
if (Galv.BM.xpBar) {
|
|
var color1 = this.xpGaugeColor1();
|
|
var color2 = this.xpGaugeColor2();
|
|
if (actor.isMaxLevel()) {
|
|
var xprate = 0;
|
|
} else {
|
|
var xprate = actor.xpRate();
|
|
}
|
|
this.drawExpGauge(x, y, width, xprate, color1, color2);
|
|
}
|
|
if (Galv.BM.xpText) {
|
|
this.changeTextColor(this.systemColor());
|
|
this.drawText(xprate > 0 ? Galv.BM.xpLabel : Galv.BM.maxTxt, x, y, 44);
|
|
this.changeTextColor(this.normalColor());
|
|
if (xprate > 0)
|
|
this.drawText(actor.nextRequiredExp(), x, y, width, "right");
|
|
}
|
|
};
|
|
|
|
if (Galv.BM.rmplugin) {
|
|
// IF ROCKETMANCER'S PRETTIER GAUGES PLUGIN
|
|
|
|
var parameters = PluginManager.parameters("PrettyGauges");
|
|
var barTypeLeft = String(parameters["barType"]).substring(0, 1);
|
|
var barTypeRight = String(parameters["barType"]).substring(1, 2);
|
|
var outline = Number(parameters["outline"] || 0);
|
|
var barHeight = Number(parameters["barHeight"] || 0);
|
|
var outlineColor1 = String(parameters["outlineColor1"]);
|
|
var outlineColor2 = String(parameters["outlineColor2"]);
|
|
var backgroundColor1 = String(parameters["backgroundColor1"]);
|
|
var backgroundColor2 = String(parameters["backgroundColor2"]);
|
|
var hpColor1 = String(parameters["hpColor1"]);
|
|
var hpColor2 = String(parameters["hpColor2"]);
|
|
var mpColor1 = String(parameters["mpColor1"]);
|
|
var mpColor2 = String(parameters["mpColor2"]);
|
|
var tpColor1 = String(parameters["tpColor1"]);
|
|
var tpColor2 = String(parameters["tpColor2"]);
|
|
|
|
Window_Base.prototype.drawExpGauge = function (
|
|
x,
|
|
y,
|
|
width,
|
|
rate,
|
|
color1,
|
|
color2
|
|
) {
|
|
var color3 = this.gaugeBackColor();
|
|
var fillW = Math.floor(width * rate).clamp(0, width);
|
|
var gaugeH = Galv.BM.xpHeight;
|
|
var gaugeY = y + this.lineHeight() - gaugeH - 2;
|
|
var fillW = Math.floor(width * rate);
|
|
var gaugeY = y + this.lineHeight() - gaugeH - 2;
|
|
|
|
var fillW = Math.floor(width * rate);
|
|
var gaugeY = y + this.lineHeight() - 2 - barHeight;
|
|
this.contents.fillTrap(
|
|
x,
|
|
gaugeY,
|
|
width,
|
|
width,
|
|
barHeight,
|
|
this.gaugeBackColor1(),
|
|
this.gaugeBackColor2()
|
|
);
|
|
this.contents.fillTrap(
|
|
x,
|
|
gaugeY,
|
|
width,
|
|
fillW,
|
|
barHeight,
|
|
color1,
|
|
color2
|
|
);
|
|
if (outline) {
|
|
this.contents.outlineTrap(
|
|
x,
|
|
gaugeY,
|
|
width,
|
|
barHeight,
|
|
outlineColor1,
|
|
outlineColor2
|
|
);
|
|
}
|
|
};
|
|
} else {
|
|
// IF GALV ONLY
|
|
Window_Base.prototype.drawExpGauge = function (
|
|
dx,
|
|
dy,
|
|
dw,
|
|
rate,
|
|
color1,
|
|
color2
|
|
) {
|
|
var color3 = this.gaugeBackColor();
|
|
var fillW = Math.floor(dw * rate).clamp(0, dw);
|
|
var gaugeH = Galv.BM.xpHeight;
|
|
var gaugeY = dy + this.lineHeight() - gaugeH - 2;
|
|
var fillW = Math.floor(dw * rate);
|
|
var gaugeY = dy + this.lineHeight() - gaugeH - 2;
|
|
this.contents.fillRect(dx, gaugeY, dw, gaugeH, color3);
|
|
this.contents.gradientFillRect(
|
|
dx,
|
|
gaugeY,
|
|
dw - fillW,
|
|
gaugeH,
|
|
color1,
|
|
color2
|
|
);
|
|
};
|
|
}
|
|
|
|
Window_Base.prototype.xpGaugeColor1 = function () {
|
|
return this.textColor(Galv.BM.xpCol1);
|
|
};
|
|
|
|
Window_Base.prototype.xpGaugeColor2 = function () {
|
|
return this.textColor(Galv.BM.xpCol2);
|
|
};
|
|
|
|
// Because blt didn't let you draw a bitmap if it was a tiny bit off
|
|
Bitmap.prototype.unlimitedBlt = function (
|
|
source,
|
|
sx,
|
|
sy,
|
|
sw,
|
|
sh,
|
|
dx,
|
|
dy,
|
|
dw,
|
|
dh
|
|
) {
|
|
if (!source.isReady()) return; // inaba byakko: Fix for Edge?
|
|
dw = dw || sw;
|
|
dh = dh || sh;
|
|
this._context.globalCompositeOperation = "source-over";
|
|
this._context.drawImage(source._canvas, sx, sy, sw, sh, dx, dy, dw, dh);
|
|
this._setDirty();
|
|
};
|
|
|
|
Window_MenuStatus.prototype.drawFace = function (
|
|
faceName,
|
|
faceIndex,
|
|
x,
|
|
y,
|
|
width,
|
|
height
|
|
) {
|
|
var width = this.bustWidth();
|
|
|
|
var bustName = faceName + "_" + (faceIndex + 1);
|
|
var bitmap = ImageManager.loadPicture(bustName);
|
|
|
|
if (!bitmap.isReady()) this._galvRefresh = true; // fix for bitmaps not loading
|
|
|
|
var ox = 0;
|
|
var oy = 0;
|
|
if (Galv.BM.offsets[bustName]) {
|
|
ox = Galv.BM.offsets[bustName][0] || 0;
|
|
oy = Galv.BM.offsets[bustName][1] || 0;
|
|
}
|
|
|
|
var sw = width;
|
|
var sh = Galv.BM.bustHeight;
|
|
var dx = x - 1;
|
|
var dy = y + Galv.BM.bust;
|
|
var sx = bitmap.width / 2 - width / 2 - ox;
|
|
var sy = oy;
|
|
this.contents.unlimitedBlt(bitmap, sx, sy, sw, sh, dx, dy);
|
|
};
|
|
|
|
Window_MenuStatus.prototype.bustWidth = function () {
|
|
return Math.floor(
|
|
(this.width - this.standardPadding() * 2) / this.maxCols()
|
|
);
|
|
};
|
|
|
|
Window_MenuStatus.prototype.cursorDown = function (wrap) {
|
|
var index = this.index();
|
|
var maxItems = this.maxItems();
|
|
var maxCols = this.maxCols();
|
|
if (index < maxItems - maxCols || (wrap && maxCols === 1)) {
|
|
this.select((index + maxCols) % maxItems);
|
|
} else {
|
|
this.select(maxItems - 1);
|
|
}
|
|
};
|
|
|
|
Window_MenuStatus.prototype.cursorUp = function (wrap) {
|
|
var index = this.index();
|
|
var maxItems = this.maxItems();
|
|
var maxCols = this.maxCols();
|
|
if (index >= maxCols || (wrap && maxCols === 1)) {
|
|
this.select((index - maxCols + maxItems) % maxItems);
|
|
} else {
|
|
this.select(0);
|
|
}
|
|
};
|
|
})();
|