318 lines
11 KiB
JavaScript
318 lines
11 KiB
JavaScript
//=============================================================================
|
|
// TDS Extra Followers
|
|
// Version: 1.0
|
|
//=============================================================================
|
|
// Add to Imported List
|
|
var Imported = Imported || {} ; Imported.TDS_ExtraFollowers = true;
|
|
// Initialize Alias Object
|
|
var _TDS_ = _TDS_ || {} ; _TDS_.ExtraFollowers = _TDS_.ExtraFollowers || {};
|
|
//=============================================================================
|
|
/*:
|
|
* @plugindesc
|
|
* This plugin allows you to add extra followers to your party.
|
|
*
|
|
* @param Max Extra Followers
|
|
* @desc Max amount of Extra Followers to add.
|
|
* @default 4
|
|
*
|
|
* @author TDS
|
|
*
|
|
* @help
|
|
* ============================================================================
|
|
* * Script Calls
|
|
* ============================================================================
|
|
*
|
|
* To clear all extra followers use the following script
|
|
* call:
|
|
*
|
|
* this.clearExtraFollowers();
|
|
*
|
|
*
|
|
*
|
|
*
|
|
* To add an extra follower use the following script call:
|
|
*
|
|
*
|
|
* this.addExtraFollower(ID, NAME, INDEX, POSITION);
|
|
*
|
|
* ID
|
|
* ^ Id used for tracking the follower.
|
|
*
|
|
* NAME:
|
|
* ^ Graphics name.
|
|
*
|
|
* INDEX:
|
|
* ^ Graphics Index.
|
|
*
|
|
* POSITION
|
|
* ^ Position of the extra follower. (1~8)
|
|
* (Optional: Defaults to the last available position.)
|
|
*
|
|
* Examples:
|
|
*
|
|
* this.addExtraFollower('OldMan', 'FA_CHURCH_MARKET', 1);
|
|
*
|
|
*
|
|
* this.addExtraFollower('girl', 'FA_CHURCH_MARKET', 3, 6);
|
|
*
|
|
*
|
|
*
|
|
*
|
|
* To remove an extra follower use the following script call:
|
|
*
|
|
* this.removeExtraFollower(POSITION);
|
|
*
|
|
* POSITION:
|
|
* ^ Position of the extra follower. (1~8);
|
|
* (Optional: Defaults to the last position.)
|
|
*
|
|
*
|
|
* Examples:
|
|
*
|
|
* this.removeExtraFollower();
|
|
*
|
|
* this.removeExtraFollower(5);
|
|
*
|
|
*
|
|
*
|
|
* To remove an extra follower by it's ID use the following
|
|
* script call:
|
|
*
|
|
* $gamePlayer._followers.removeExtraFollower(ID);
|
|
*
|
|
* ID
|
|
* ^ Follower Id.
|
|
*
|
|
* Examples:
|
|
*
|
|
* this.removeFollowerById('OldMan')
|
|
*
|
|
*/
|
|
//=============================================================================
|
|
// Node.js path
|
|
var path = require('path');
|
|
// Get Parameters
|
|
var parameters = PluginManager.parameters("Extra_Followers");
|
|
// Initialize Parameters
|
|
_TDS_.ExtraFollowers.params = {};
|
|
_TDS_.ExtraFollowers.params.maxExtraFollowers = Number(parameters['Max Extra Followers'] || 4);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//=============================================================================
|
|
// ** Game_Followers
|
|
//-----------------------------------------------------------------------------
|
|
// The wrapper class for a follower array.
|
|
//=============================================================================
|
|
// Alias Listing
|
|
//=============================================================================
|
|
_TDS_.ExtraFollowers.Game_Followers_initialize = Game_Followers.prototype.initialize;
|
|
//=============================================================================
|
|
// * Object Initialization
|
|
//=============================================================================
|
|
Game_Followers.prototype.initialize = function() {
|
|
// Run Original Function
|
|
_TDS_.ExtraFollowers.Game_Followers_initialize.call(this);
|
|
// Extra Start
|
|
var extraStart = this._data.length;
|
|
for (var i = 0; i < _TDS_.ExtraFollowers.params.maxExtraFollowers; i++) {
|
|
this._data.push(new Game_Follower(extraStart + i + 1))
|
|
};
|
|
};
|
|
//=============================================================================
|
|
// * Add Extra Follower Last
|
|
//=============================================================================
|
|
Game_Followers.prototype.nextExtraFollowerSlot = function() {
|
|
// Get Starting Index
|
|
var index = $gameParty.maxBattleMembers()-1;
|
|
// Go Through Data
|
|
for (var i = index; i < this._data.length; i++) {
|
|
// Get Follower
|
|
var follower = this._data[i];
|
|
// Set Index
|
|
index = i;
|
|
// If Follower Graphics data is undefined
|
|
if (follower._graphicsData === undefined) { break; }
|
|
};
|
|
// Return Index
|
|
return index;
|
|
};
|
|
//=============================================================================
|
|
// * Last Extra Follower Slot
|
|
//=============================================================================
|
|
Game_Followers.prototype.lastExtraFollowerSlot = function() {
|
|
// Start
|
|
var start = $gameParty.maxBattleMembers()-1;
|
|
// Get Starting Index
|
|
var index = this._data.length-1
|
|
// Go Through Data in reverse
|
|
for (var i = this._data.length-1; i >= start; i--) {
|
|
// Get Follower
|
|
var follower = this._data[i];
|
|
// Set Index
|
|
index = i;
|
|
if (follower._graphicsData !== undefined) { break; }
|
|
};
|
|
// Return Index
|
|
return index;
|
|
};
|
|
//=============================================================================
|
|
// * Clear Extra Followers
|
|
//=============================================================================
|
|
Game_Followers.prototype.clearExtraFollowers = function() {
|
|
// Go Through Data
|
|
for (var i = 0; i < this._data.length; i++) {
|
|
// Get Follower
|
|
var follower = this._data[i];
|
|
// Delete Follower Graphics Data
|
|
delete follower._graphicsData;
|
|
};
|
|
// Refresh
|
|
this.refresh();
|
|
};
|
|
//=============================================================================
|
|
// * Add Extra Follower
|
|
//=============================================================================
|
|
Game_Followers.prototype.addExtraFollower = function(id, name, index, cIndex) {
|
|
// Set default character index
|
|
if (cIndex === undefined) { cIndex = this.nextExtraFollowerSlot(); };
|
|
// Follower Object
|
|
var follower = this._data[cIndex];
|
|
// Set Graphics Data
|
|
follower._graphicsData = {id: id, name: name, index: index};
|
|
// Refresh
|
|
this.refresh();
|
|
};
|
|
//=============================================================================
|
|
// * Add Extra Follower
|
|
//=============================================================================
|
|
Game_Followers.prototype.removeExtraFollower = function(index) {
|
|
// Set Default Index
|
|
if (index === undefined) { index = this.lastExtraFollowerSlot(); };
|
|
// Follower Object
|
|
var follower = this._data[index];
|
|
// Delete Graphics Data
|
|
delete follower._graphicsData;
|
|
// Realign Extra Followers
|
|
this.realignExtraFollowers();
|
|
// Refresh
|
|
this.refresh();
|
|
};
|
|
//=============================================================================
|
|
// * Remove Follower By ID
|
|
//=============================================================================
|
|
Game_Followers.prototype.removeFollowerById = function(id) {
|
|
// Go Through Data
|
|
for (var i = 0; i < this._data.length; i++) {
|
|
// Get Follower
|
|
var follower = this._data[i];
|
|
// If Follower Graphics Data matches the ID
|
|
if (follower._graphicsData && follower._graphicsData.id === id) {
|
|
delete follower._graphicsData;
|
|
};
|
|
};
|
|
// Realign Extra Followers
|
|
this.realignExtraFollowers();
|
|
// Refresh
|
|
this.refresh();
|
|
};
|
|
//=============================================================================
|
|
// * Realign Extar Followers
|
|
//=============================================================================
|
|
Game_Followers.prototype.realignExtraFollowers = function(index) {
|
|
var graphics = this._data.filter(function(follower) {
|
|
return follower._graphicsData !== undefined;
|
|
});
|
|
// Get Starting Index
|
|
var index = $gameParty.maxBattleMembers()-1;
|
|
// Go Through Data
|
|
for (var i = index; i < this._data.length; i++) {
|
|
// Get Follower
|
|
var follower = this._data[i];
|
|
// Get Data
|
|
var data = graphics[i - index];
|
|
// Get Graphics Data
|
|
var graphicsData = data ? Object.assign({}, data._graphicsData) : null;
|
|
// Delete Follower Data
|
|
delete follower._graphicsData
|
|
// If Graphics DAta
|
|
if (graphicsData) {
|
|
// Set Graphics Data
|
|
follower._graphicsData = graphicsData;
|
|
};
|
|
};
|
|
};
|
|
|
|
|
|
//=============================================================================
|
|
// ** Game_Follower
|
|
//-----------------------------------------------------------------------------
|
|
// The game object class for a follower. A follower is an allied character,
|
|
// other than the front character, displayed in the party.
|
|
//=============================================================================
|
|
// Alias Listing
|
|
//=============================================================================
|
|
_TDS_.ExtraFollowers.Game_Follower_isVisible = Game_Follower.prototype.isVisible;
|
|
_TDS_.ExtraFollowers.Game_Follower_refresh = Game_Follower.prototype.refresh;
|
|
//=============================================================================
|
|
// * Determine if visible
|
|
//=============================================================================
|
|
Game_Follower.prototype.isVisible = function() {
|
|
// Return true if follower has graphics data
|
|
if ($gamePlayer.followers().isVisible() && this._graphicsData) { return true; };
|
|
// Return default
|
|
return _TDS_.ExtraFollowers.Game_Follower_isVisible.call(this);
|
|
};
|
|
//=============================================================================
|
|
// * Add Extra Follower
|
|
//=============================================================================
|
|
Game_Follower.prototype.refresh = function() {
|
|
// If Graphics Data Exists
|
|
if (this._graphicsData) {
|
|
this.setImage(this._graphicsData.name, this._graphicsData.index);
|
|
} else {
|
|
// Run Original Function
|
|
_TDS_.ExtraFollowers.Game_Follower_refresh.call(this);
|
|
}
|
|
};
|
|
|
|
|
|
|
|
//=============================================================================
|
|
// ** Game_Interpreter
|
|
//-----------------------------------------------------------------------------
|
|
// The interpreter for running event commands.
|
|
//=============================================================================
|
|
// * Clear Extra Followers
|
|
//=============================================================================
|
|
Game_Interpreter.prototype.clearExtraFollowers = function() {
|
|
// Clear Extra Followers
|
|
$gamePlayer._followers.clearExtraFollowers();
|
|
};
|
|
//=============================================================================
|
|
// * Add Extra Follower
|
|
//=============================================================================
|
|
Game_Interpreter.prototype.addExtraFollower = function(id, name, index, cIndex) {
|
|
// Add Extra Follower
|
|
$gamePlayer._followers.addExtraFollower(id, name, index, cIndex);
|
|
};
|
|
//=============================================================================
|
|
// * Remove Extra Follower
|
|
//=============================================================================
|
|
Game_Interpreter.prototype.removeExtraFollower = function(index) {
|
|
// Remove Extra Follower
|
|
$gamePlayer._followers.removeExtraFollower(index);
|
|
};
|
|
//=============================================================================
|
|
// * Remove Extra Follower by ID
|
|
//=============================================================================
|
|
Game_Interpreter.prototype.removeFollowerById = function(id) {
|
|
// Remove Extra Follower
|
|
$gamePlayer._followers.removeFollowerById(id);
|
|
};
|
|
|
|
|
|
|