This plugin upgrades how your pets are displayed in the menu! Instead of showing pets the same as your actors, this plugin moves them into a fresh new menu.
This menu consists of a catalog and an inspection page that provides all the information you need. All windows are customizable so you can for example hide level and experience information.
Consequently…
- Players can see their pets‘ skills but cannot inspect or chant them
- Players can no longer equip their pets
- Without customizing, this menu will not show the current HP/MP or affected States, as it assumes that your pets are auto-healed when summoned
- You can decide whether Level and Exp info should be displayed
Ultimately, these features can be exactly what you wish for your game or what you don’t wish for, so it’s up to you whether you want to include this plugin or not.
Biography Notetag
Can be assigned to any Actor.
<Biography>
Lorem ipsum...
</Biography>
Code Snippets
This plugin allows many code customizations. Here are some examples:
Exp & Stats, no HP/MP/TP, no States
This is the default code, useful when temporary battle information is not useful for the player (because pets are auto-healed when summoned).
Level and Exp are not shown when disabled in Plugin Manager.
// constants
const pet = arguments[0];
const faceWidth = ImageManager.faceWidth || Window_Base._faceWidth;
const faceHeight = ImageManager.faceHeight || Window_Base._faceHeight;
// draw
if (!pet) return;
let yName = 0;
if ('Face' == MK.SummoningMenuAddon.statusMenuPortraitStyle) {
this.drawFace(
pet.faceName(),
pet.faceIndex(),
0,
0,
);
yName += faceHeight;
}
if ('Sprite' == MK.SummoningMenuAddon.statusMenuPortraitStyle) {
this.drawCharacter(
pet.characterName(),
pet.characterIndex(),
faceWidth / 2,
this.height / 2,
);
yName += this.height / 2;
}
if ('Battler Sprite' == MK.SummoningMenuAddon.statusMenuPortraitStyle) {
this.drawBattlerSprite(
pet,
faceWidth / 2,
this.height / 2,
);
yName += this.height / 2;
}
this.drawText(
pet.name(),
0,
yName,
faceWidth,
'center',
);
// Level
let x = faceWidth + 20;
if (MK.SummoningMenuAddon.showPetLevel) {
const levelInfoWidth = 160;
const y1 = this.height / 2 - 2 * this.lineHeight();
this.changeTextColor(this.systemColor());
this.drawText(
TextManager.levelA,
x,
y1,
levelInfoWidth,
);
this.resetTextColor();
this.drawText(
pet.level,
x,
y1,
levelInfoWidth,
'right',
);
// EXP
if (!pet.isMaxLevel()) {
this.changeTextColor(this.systemColor());
this.drawText(
MK.SummoningMenuAddon.Vocabulary.exp,
x,
y1 + this.lineHeight(),
levelInfoWidth,
);
this.drawText(
MK.SummoningMenuAddon.Vocabulary.toNextExp,
x,
y1 + 2 * this.lineHeight(),
levelInfoWidth,
);
this.resetTextColor();
this.drawText(
pet.isMaxLevel() ? '-----' : pet.currentExp(),
x,
y1 + this.lineHeight(),
levelInfoWidth,
'right',
);
this.drawText(
pet.isMaxLevel() ? '-----' : pet.nextRequiredExp(),
x,
y1 + 2 * this.lineHeight(),
levelInfoWidth,
'right',
);
}
x += levelInfoWidth + 30;
}
// HP, MP, Atk, Def, etc.
const paramBoxWidth = Math.min(this.contentsWidth() - x, 400);
const xParamBox = this.contentsWidth() - paramBoxWidth;
const w2 = this.textWidth('9999');
const w1 = paramBoxWidth / 2 - w2;
const y2 = this.height / 2 - 2.5 * this.lineHeight();
for (let i = 0; i < 8; i++) {
this.changeTextColor(this.systemColor());
this.drawText(
TextManager.param(i),
xParamBox + Math.floor(i / 4) * (w1 + w2),
(i % 4) * this.lineHeight() + y2,
w1 - 20,
);
this.resetTextColor();
this.drawText(
pet.param(i),
xParamBox + Math.floor(i / 4) * (w1 + w2) + w1 - 20,
(i % 4) * this.lineHeight() + y2,
w2,
'right',
);
}
HP/MP/TP Gauges, current States, & Stats
Level and TP are not shown when disabled in Plugin Manager/database.
// constants
const pet = arguments[0];
const faceWidth = ImageManager.faceWidth || Window_Base._faceWidth;
const faceHeight = ImageManager.faceHeight || Window_Base._faceHeight;
// draw
if (!pet) return;
let yName = 0;
if ('Face' == MK.SummoningMenuAddon.statusMenuPortraitStyle) {
this.drawFace(
pet.faceName(),
pet.faceIndex(),
0,
0,
);
yName += faceHeight;
}
if ('Sprite' == MK.SummoningMenuAddon.statusMenuPortraitStyle) {
this.drawCharacter(
pet.characterName(),
pet.characterIndex(),
faceWidth / 2,
this.height / 2,
);
yName += this.height / 2;
}
if ('Battler Sprite' == MK.SummoningMenuAddon.statusMenuPortraitStyle) {
this.drawBattlerSprite(
pet,
faceWidth / 2,
this.height / 2,
);
yName += this.height / 2;
}
this.drawText(
pet.name(),
0,
yName,
faceWidth,
'center',
);
let x = faceWidth + 20;
// Basic Info
const y1 = this.height / 2 - 2.5 * this.lineHeight();
if (MK.SummoningMenuAddon.showPetLevel) {
this.drawActorLevel(pet, x, 0 * this.lineHeight() + y1);
}
this.drawActorIcons(pet, x, 1 * this.lineHeight() + y1);
this.placeBasicGauges(pet, x, 2 * this.lineHeight() + y1);
x += 200;
// Atk, Def, etc.
const paramBoxWidth = Math.min(this.contentsWidth() - x, 400);
const xParamBox = this.contentsWidth() - paramBoxWidth;
const w2 = this.textWidth('9999');
const w1 = paramBoxWidth / 2 - w2;
const y2 = this.height / 2 - 2 * this.lineHeight();
for (let i = 0; i < 6; i++) {
this.changeTextColor(this.systemColor());
this.drawText(
TextManager.param(i + 2),
xParamBox + Math.floor(i / 3) * (w1 + w2),
(i % 3) * this.lineHeight() + y2,
w1 - 20,
);
this.resetTextColor();
this.drawText(
pet.param(i + 2),
xParamBox + Math.floor(i / 3) * (w1 + w2) + w1 - 20,
(i % 3) * this.lineHeight() + y2,
w2,
'right',
);
}
// constants
const pet = arguments[0];
const faceWidth = ImageManager.faceWidth || Window_Base._faceWidth;
const faceHeight = ImageManager.faceHeight || Window_Base._faceHeight;
// draw
if (!pet) return;
let yName = 0;
if ('Face' == MK.SummoningMenuAddon.statusMenuPortraitStyle) {
this.drawFace(
pet.faceName(),
pet.faceIndex(),
0,
0,
);
yName += faceHeight;
}
if ('Sprite' == MK.SummoningMenuAddon.statusMenuPortraitStyle) {
this.drawCharacter(
pet.characterName(),
pet.characterIndex(),
faceWidth / 2,
this.height / 2,
);
yName += this.height / 2;
}
if ('Battler Sprite' == MK.SummoningMenuAddon.statusMenuPortraitStyle) {
this.drawBattlerSprite(
pet,
faceWidth / 2,
this.height / 2,
);
yName += this.height / 2;
}
this.drawText(
pet.name(),
0,
yName,
faceWidth,
'center',
);
let x = faceWidth + 20;
// Basic Info
if (MK.SummoningMenuAddon.showPetLevel) {
this.drawActorLevel(pet, x, 0);
}
this.drawActorIcons(pet, x, 1 * this.lineHeight());
this.drawActorHp(pet, x, 2 * this.lineHeight(), 186);
this.drawActorMp(pet, x, 3 * this.lineHeight(), 186);
if ($dataSystem.optDisplayTp) {
this.drawActorTp(pet, x, 4 * this.lineHeight(), 186);
}
x += 200;
// Atk, Def, etc.
const paramBoxWidth = Math.min(this.contentsWidth() - x, 400);
const xParamBox = this.contentsWidth() - paramBoxWidth;
const w2 = this.textWidth('9999');
const w1 = paramBoxWidth / 2 - w2;
const y2 = this.height / 2 - 2 * this.lineHeight();
for (let i = 0; i < 6; i++) {
this.changeTextColor(this.systemColor());
this.drawText(
TextManager.param(i + 2),
xParamBox + Math.floor(i / 3) * (w1 + w2),
(i % 3) * this.lineHeight() + y2,
w1 - 20,
);
this.resetTextColor();
this.drawText(
pet.param(i + 2),
xParamBox + Math.floor(i / 3) * (w1 + w2) + w1 - 20,
(i % 3) * this.lineHeight() + y2,
w2,
'right',
);
}
Skills
This is the default code to display Skills
// constants
const pet = arguments[0];
// custom code
if (!pet) return;
this.changeTextColor(this.systemColor());
this.drawText(
MK.SummoningMenuAddon.Vocabulary.skills,
0,
0.25 * this.lineHeight(),
this.contentsWidth(),
'center',
);
this.resetTextColor();
pet.skills().forEach((skill, i) => {
this.drawItemName(
skill,
20,
i * this.lineHeight() + 1.5 * this.lineHeight(),
this.contentsWidth() - 20,
);
});
Biography
This is the default code to show the pet’s biography.
// constants
const pet = arguments[0];
// custom code
if (!pet) return;
if (!pet.actor().meta) return;
const biography = (pet.actor().meta.petBiography || '').trim();
const nLines = biography.split('\n').length + 1;
if (biography) {
this.drawTextEx(
biography,
0,
this.height / 2 - nLines * this.lineHeight() / 2,
this.contentsWidth(),
);
}
Main Stats
Use this code to show ATK, DEF, …
// constants
const pet = arguments[0];
// draw
if (!pet) return;
const y = this.contentsHeight() / 2 - 4.5 * this.lineHeight();
for (let i = 0; i < 8; i++) {
this.changeTextColor(this.systemColor());
this.drawText(
TextManager.param(i),
10,
i * this.lineHeight() + y,
this.contentsWidth() - this.textWidth('99999') - 10,
);
this.resetTextColor();
this.drawText(
pet.param(i),
0,
i * this.lineHeight() + y,
this.contentsWidth() - 10,
'right',
);
}
3rd Party Plugin Compatibility
VS Main Menu lets you define the command list in the main menu. If you want to add this menu through VS, follow this procedure:
Switch off „Is visible in Menu“ in „MK_Summon_MenuAddon“.
Go to „VS Main Menu Core“ -> Command Window List and create a new entry.
Symbol | pets |
Icon | <as you prefer> |
STR: Text | <as you prefer> |
JS: Text | <empty> |
JS: Show | return true; Alternatively return $gameSwitches.value(1) Replace 1 with a Switch ID to bind visibility |
JS: Enable | return $gameParty.pets().length; Alternatively return $gameSwitches.value(1) Replace 1 with a Switch ID to bind accessibility |
JS: Run Code | SceneManager.push(Scene_Pets); |
JS: Personal Code | <as it is> |
Download
Right-click, save as…