exorcist-evangeline/www/js/plugins/GALV_BasicEventShadows.js
2025-10-08 13:42:52 -05:00

268 lines
No EOL
9 KiB
JavaScript

//-----------------------------------------------------------------------------
// Galv's Basic Event Shadows
//-----------------------------------------------------------------------------
// For: RPGMAKER MV
// GALV_ActionIndicators.js
//-----------------------------------------------------------------------------
// 2016-08-16 - Version 1.2 - fixed a bug with vehicles
// 2016-07-18 - Version 1.1 - fixed a bug when event shadows are disabled
// it would crash on map transfer
// 2016-04-05 - Version 1.0 - release
//-----------------------------------------------------------------------------
// Terms can be found at:
// galvs-scripts.com
//-----------------------------------------------------------------------------
var Imported = Imported || {};
Imported.Galv_BasicEventShadows = true;
var Galv = Galv || {}; // Galv's main object
Galv.BES = Galv.BES || {}; // Galv's plugin stuff
//-----------------------------------------------------------------------------
/*:
* @plugindesc (v.1.2) Display shadows under the player or events on the map.
*
* @author Galv - galvs-scripts.com
*
* @param Shadow Image
* @desc The image file used from /img/system/ folder.
* @default Shadow1
*
* @param Shadow Offset
* @desc Pixel offset of the shadows
* @default 5
*
* @help
* Galv's Basic Event Shadows
* ----------------------------------------------------------------------------
* This plugin allows you to add shadows to events and player characters on the
* map. These shadows can be enabled and disabled in the following ways:
*
* ----------------------------------------------------------------------------
* EVENT SHADOWS
* ----------------------------------------------------------------------------
*
* <shadow>
*
* By putting this tag in an event's "Note" field, the event will always have
* a shadow, no matter what page the event uses as long as the event page has
* a graphic in it.
*
* Alternatively, you can put this tag in a "Comment" anywhere on an event
* page. As long as the event page conditions are active, the shadow will be
* drawn. If the tag is not on a page, no shadow is drawn.
* ----------------------------------------------------------------------------
* PLAYER SHADOWS - SCRIPT CALL
* ----------------------------------------------------------------------------
*
* Galv.BES.pShadows(true); // turn shadows on for player actors
* Galv.BES.pShadows(false); // turn shadows off for player actors
*
* Galv.BES.eShadows(true); // turn shadows on for all events
* Galv.BES.eShadows(false); // turn shadows off for all events
*
* These are used in "Script" event command. It turns shadows on and off for
* all player characters or all events.
* ----------------------------------------------------------------------------
*/
//-----------------------------------------------------------------------------
// CODE STUFFS
//-----------------------------------------------------------------------------
(function() {
Galv.BES.img = PluginManager.parameters('Galv_BasicEventShadows')["Shadow Image"];
Galv.BES.os = Number(PluginManager.parameters('Galv_BasicEventShadows')["Shadow Offset"]);
Galv.BES.pShadows = function(status) {
$gameSystem._playerShadow = status;
SceneManager._scene._spriteset.doActorShadows();
};
Galv.BES.eShadows = function(status) {
$gameSystem._eventShadows = status;
SceneManager._scene._spriteset.doEventShadows();
};
// Game_System
//-----------------------------------------------------------------------------
Galv.BES.Game_System_initialize = Game_System.prototype.initialize;
Game_System.prototype.initialize = function() {
Galv.BES.Game_System_initialize.call(this);
this._playerShadow = true;
this._eventShadows = true;
};
// Scene and Spriteset Map
//-----------------------------------------------------------------------------
Galv.BES.Spriteset_Map_hideCharacters = Spriteset_Map.prototype.hideCharacters;
Spriteset_Map.prototype.hideCharacters = function() {
for (var sprite in this._bshadowSprites) {
this._bshadowSprites[sprite].hide();
};
Galv.BES.Spriteset_Map_hideCharacters.call(this);
};
Galv.BES.Spriteset_Map_createCharacters = Spriteset_Map.prototype.createCharacters;
Spriteset_Map.prototype.createCharacters = function() {
Galv.BES.Spriteset_Map_createCharacters.call(this);
this.createCharacterShadows();
};
Spriteset_Map.prototype.createCharacterShadows = function() {
this._bshadowSprites = {};
this.doEventShadows();
this.doActorShadows();
};
Spriteset_Map.prototype.doEventShadows = function() {
$gameMap.events().forEach(function(event) {
if ($gameSystem._eventShadows) {
this.createBShadow(event._eventId,event);
} else {
this.destroyBShadow(event._eventId,event);
};
}, this);
};
Spriteset_Map.prototype.doActorShadows = function() {
if ($gameSystem._playerShadow) { // add
var fols = $gamePlayer.followers()._data;
for (var i = 0; i < fols.length; i++) {
fols[i]._shadow = true;
this.createBShadow("f" + i + 1,fols[i]);
};
$gamePlayer._shadow = true;
this.createBShadow("f0",$gamePlayer);
} else { // Remove
var fols = $gamePlayer.followers()._data;
for (var i = 0; i < fols.length; i++) {
fols[i]._shadow = false;
this.destroyBShadow("f" + i + 1,fols[i]);
};
$gamePlayer._shadow = false;
this.destroyBShadow("f0",$gamePlayer);
};
};
Spriteset_Map.prototype.createBShadow = function(id,character) {
if (!character) return;
if (!this._bshadowSprites[id] && character._shadow) {
this._bshadowSprites[id] = new Sprite_BasicShadow(character);
this._tilemap.addChild(this._bshadowSprites[id]);
character._shadSprite = true;
};
};
Spriteset_Map.prototype.destroyBShadow = function(id,character) {
if (!id) return;
if (this._bshadowSprites[id]) {
this._tilemap.removeChild(this._bshadowSprites[id]);
delete(this._bshadowSprites[id]);
if (character) character._shadSprite = false;
};
};
Spriteset_Map.prototype.destroyAllBShadows = function() {
var fols = $gamePlayer.followers()._data;
for (var i = 0; i < fols.length; i++) {
fols[i]._shadow = false;
this.destroyBShadow("f" + i + 1,fols[i]);
};
$gamePlayer._shadow = false;
this.destroyBShadow("f0",$gamePlayer);
$gameMap.events().forEach(function(event) {
this.destroyBShadow(event._eventId,event);
}, this);
};
// Game_Event
//-----------------------------------------------------------------------------
Galv.BES.Game_Event_refresh = Game_Event.prototype.refresh;
Game_Event.prototype.refresh = function() {
Galv.BES.Game_Event_refresh.call(this);
this.doShadows();
};
Game_Event.prototype.doShadows = function() {
if (!$gameSystem._eventShadows) {
if (SceneManager._scene._spriteset) SceneManager._scene._spriteset.destroyBShadow(this._eventId);
return;
};
if (this.event().note.contains("<shadow>") && this._characterName != "") {
this._shadow = true;
} else {
// check if page has shadow
var page = this.page();
var shadow = false;
if (page) {
for (var i = 0; i < page.list.length; i++) {
if (page.list[i].code == 108 && page.list[i].parameters[0].contains("<shadow>")) {
var shadow = true;
};
};
};
if (shadow) {
this._shadow = true;
if (SceneManager._scene._spriteset) SceneManager._scene._spriteset.createBShadow(this._eventId,this);
} else {
this._shadow = false;
if (SceneManager._scene._spriteset) SceneManager._scene._spriteset.destroyBShadow(this._eventId);
this._shadSprite = false;
};
};
};
Galv.BES.Game_Event_erase = Game_Event.prototype.erase;
Game_Event.prototype.erase = function() {
this._shadow = false;
if (SceneManager._scene._spriteset) SceneManager._scene._spriteset.destroyBShadow(this._eventId);
this._shadSprite = false;
Galv.BES.Game_Event_erase.call(this);
};
// Sprite_BasicShadow
//-----------------------------------------------------------------------------
function Sprite_BasicShadow() {
this.initialize.apply(this, arguments);
}
Sprite_BasicShadow.prototype = Object.create(Sprite_Base.prototype);
Sprite_BasicShadow.prototype.constructor = Sprite_BasicShadow;
Sprite_BasicShadow.prototype.initialize = function(character) {
Sprite_Base.prototype.initialize.call(this);
this.setCharacter(character);
};
Sprite_BasicShadow.prototype.setCharacter = function(character) {
this._character = character;
this.bitmap = ImageManager.loadSystem(Galv.BES.img);
this.anchor.x = 0.5;
this.anchor.y = 1;
};
Sprite_BasicShadow.prototype.update = function() {
this.x = this._character.screenX();
this.y = this._character.screenY() + this._character.jumpHeight() + Galv.BES.os;
this.z = this._character.screenZ() - 1;
if (this._character._characterName == "" || this._character._transparent) {
this.opacity = 0;
} else {
this.opacity = this._character._opacity
};
};
})();