OMORI_Android/www.eng/js/plugins/Extra_Followers.js
2024-01-15 18:44:53 +03:00

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);
};