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

355 lines
No EOL
11 KiB
JavaScript

//=============================================================================
// Liquid's Lovely Plugin for Jasmin - Event Icons
// Liquid_EventIcons.js
//=============================================================================
var Imported = Imported || {};
Imported.Liquid_EventIcons = true;
var Liquid = Liquid || {};
Liquid.Eventcons = Liquid.Eventcons || {};
Liquid.Eventcons.version = 2.01;
//=============================================================================
/*:
* @plugindesc v2 adds persistent balloon icons.
* @author Liquidize
*
* @param ---General---
* @default
*
* @param Icon Width
* @parent ---General---
* @type number
* @min 0
* @desc Determines the width of each icon frame.
* Default: 32
* @default 32
*
* @param Icon Height
* @parent ---General---
* @type number
* @min 0
* @desc Determines the height of each icon frame.
* Default: 24
* @default 24
*
* @param Default Sprite Sheet
* @parent ---General---
* @type string
* @desc Determines the default sprite sheet to use for eventcons.
* Default: quest
* @default quest
*
* @param Speed
* @parent ---General---
* @type number
* @min 0
* @desc Determines the speed at which the frame is updated.
* Default: 16
* @default 16
*
* @param Wait Time
* @parent ---General---
* @type number
* @min 0
* @desc Helps determine the wait between each icon frame.
* Default: 64
* @default 64
*
* @help
* ============================================================================
* Introduction and Instructions
* ============================================================================
*
* To add an indicator add a note to the event with the following:
* Indicator: IMAGE_NAME,INDEX
*
* Example:
* Indicator: quest,1
*
*
* ============================================================================
* Changelog
* ============================================================================
*
* Version 2.01:
* - Fixed an issue where icons wouldn't change on the same map.
*
* Version 2.00:
* - Plugin redo!
*
* Version 1.02:
* - Added Plugin Command to change event icon
*
* Version 1.01:
* - Changed it so icons can be added via notes.
* - Made icons persist through saves properly.
*
* Version 1.00:
* - Finished plugin!
*/
//=============================================================================
//=============================================================================
// Parameter Variables
//=============================================================================
Liquid.Parameters = PluginManager.parameters('Liquid_EventIcons');
Liquid.Param = Liquid.Param || {};
Liquid.Param.EventconWidth = Number(Liquid.Parameters['Icon Width'] || 32);
Liquid.Param.EventconHeight = Number(Liquid.Parameters['Icon Height'] || 24);
Liquid.Param.EventconSheet = String(Liquid.Parameters['Default Sprite Sheet'] || 'quest');
Liquid.Param.EventconSpeed = Number(Liquid.Parameters['Speed'] || 16);
Liquid.Param.EventconWaitTime = Number(Liquid.Parameters['Wait Time'] || 64);
Liquid.Eventcons.Game_Interpreter_pluginCommand =
Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function (command, args) {
// Plugin Commands
if (command === "ChangeEventcon") {
if (args.length !== 4) {
return;
}
var map = parseInt(args[0]);
var event = parseInt(args[1]);
var img = args[2];
var index = parseInt(args[3]);
if (!$eventData.hasCategory("eventcon")) $eventData.addCategory("eventcon");
$eventData.setValueExt("eventcon", map, event, [img, index]);
if (map === $gameMap.mapId()) {
if ($gameMap._events[event]) {
$gameMap._events[event].removeEventcon();
$gameMap._events[event].setupEventcon(img,index);
}
}
} else if (command === "RemoveEventcon") {
if (args.length !== 2) {
return;
}
var map = parseInt(args[0]);
var event = parseInt(args[1]);
if (!$eventData.hasCategory("eventcon")) $eventData.addCategory("eventcon");
$eventData.setValueExt("eventcon", map, event);
if (map === $gameMap.mapId()) {
if ($gameMap._events[event]) {
$gameMap._events[event].removeEventcon();
}
}
}
Liquid.Eventcons.Game_Interpreter_pluginCommand.call(this, command, args);
};
//=============================================================================
// TDS PATCH : USE SCRIPT CALL
// this.setEventIcon(42, 'quest', 1);
//=============================================================================
Game_Interpreter.prototype.setEventIcon = function(eventId, img, index) {
var map = $gameMap.mapId();
var event = $gameMap.event(eventId);
if (!$eventData.hasCategory("eventcon")) $eventData.addCategory("eventcon");
$eventData.setValueExt("eventcon", map, eventId, [img, index]);
event.removeEventcon();
event.setupEventcon(img, index);
event.refresh();
};
//=============================================================================
// Game_CharacterBase
//=============================================================================
Game_CharacterBase.prototype.setupEventcon = function (img, index) {
if (this.isEventconPlaying()) {
this.removeEventcon();
}
this._eventImg = img;
this._eventIndex = index;
};
Game_CharacterBase.prototype.startEventcon = function () {
this._eventconPlaying = true;
};
Game_CharacterBase.prototype.isEventconPlaying = function () {
return this._eventIndex > 0 || this._eventconPlaying;
};
Game_CharacterBase.prototype.removeEventcon = function () {
this._eventImg = null;
this._eventIndex = -1;
this._eventconPlaying = false;
};
Game_CharacterBase.prototype.eventconId = function () {
return this._eventIndex;
};
Game_CharacterBase.prototype.eventconImg = function () {
return this._eventImg;
};
Game_CharacterBase.prototype.endEventcon = function () {
this._eventconPlaying = false;
};
//=============================================================================
// Game_Event
//=============================================================================
Liquid.Eventcons.Game_Event_refresh = Game_Event.prototype.refresh;
Game_Event.prototype.refresh = function () {
if (!this._eventIndex) {
if ($eventData.hasCategory("eventcon")) {
var eventIconInfo = $eventData.value("eventcon", [this._mapId, this._eventId]);
if (eventIconInfo) {
this.setupEventcon(eventIconInfo[0], eventIconInfo[1]);
}
} else if (this.event().note.match(/(?:INDICATOR):[ ](.+)[,](\d+)/i)) {
var img = String(RegExp.$1);
var index = Number(RegExp.$2);
this.setupEventcon(img, index);
if (!$eventData.hasCategory("eventcon")) {
$eventData.addCategory("eventcon");
}
$eventData.setValueExt("eventcon", this._mapId, this._eventId, [img, index]);
}
}
Liquid.Eventcons.Game_Event_refresh.call(this);
};
//=============================================================================
// Sprite_Character
//=============================================================================
Liquid.Eventcons.Sprite_Character_update = Sprite_Character.prototype.update;
Sprite_Character.prototype.update = function () {
Liquid.Eventcons.Sprite_Character_update.call(this);
this.updateEventcon();
};
Sprite_Character.prototype.setupEventcon = function () {
if (this._character.eventconId() > 0) {
this.startEventcon();
this._character.startEventcon();
if (!this.currentEventcondId) {
this.currentEventcondId = this._character.eventconId();
}
if (!this.currentEventcondImg) {
this.currentEventcondImg = this._character.eventconImg();
}
}
};
Sprite_Character.prototype.startEventcon = function () {
if (!this._eventconSprite || (this.currentEventcondId != this._character.eventconId()) || (this.currentEventcondImg != this._character.eventconImg())) {
this.endEventcon();
this._eventconSprite = new Sprite_EventCon();
this._eventconSprite.setup(this._character.eventconImg(), this._character.eventconId());
this.parent.addChild(this._eventconSprite);
this.currentEventcondId = this._character.eventconId();
this.currentEventcondImg = this._character.eventconImg();
}
};
Sprite_Character.prototype.updateEventcon = function () {
this.setupEventcon();
if (this._eventconSprite) {
this._eventconSprite.x = this.x;
this._eventconSprite.y = this.y - this.height;
if (!this._character.isEventconPlaying()) {
this.endEventcon();
}
}
};
Sprite_Character.prototype.endEventcon = function () {
if (this._eventconSprite) {
this.parent.removeChild(this._eventconSprite);
this._eventconSprite = null;
}
};
Sprite_Character.prototype.isEventconPlaying = function () {
return !!this._eventconSprite;
};
Liquid.Eventcons.Sprite_Character_updateAnimation = Sprite_Character.prototype.updateAnimation;
Sprite_Character.prototype.updateAnimation = function () {
Liquid.Eventcons.Sprite_Character_updateAnimation.call(this);
if (!this.isEventconPlaying()) {
this._character.endEventcon();
}
};
//=============================================================================
// Sprite_EventCon
//=============================================================================
function Sprite_EventCon() {
this.initialize.apply(this, arguments);
}
Sprite_EventCon.prototype = Object.create(Sprite_Base.prototype);
Sprite_EventCon.prototype.constructor = Sprite_EventCon;
Sprite_EventCon.prototype.initialize = function () {
Sprite_Base.prototype.initialize.call(this);
this.initMembers();
};
Sprite_EventCon.prototype.initMembers = function () {
this._eventconId = 0;
this._eventconImg = Liquid.Param.EventconSheet
this._duration = 0;
this.anchor.x = 0.5;
this.anchor.y = 1;
this.z = 7;
};
Sprite_EventCon.prototype.loadBitmap = function () {
this.bitmap = ImageManager.loadSystem(this._eventconImg);
this.setFrame(0, 0, 0, 0);
};
Sprite_EventCon.prototype.setup = function (img, index) {
this._eventconImg = img;
this._eventconId = index;
this._duration = 4 * this.speed() + this.waitTime();
this.loadBitmap();
};
Sprite_EventCon.prototype.update = function () {
Sprite_Base.prototype.update.call(this);
if (this._duration > 0) {
this._duration--;
if (this._duration > 0) {
this.updateFrame();
} else {
this._duration = 4 * this.speed() + this.waitTime();
}
}
};
Sprite_EventCon.prototype.updateFrame = function () {
var w = Liquid.Param.EventconWidth;
var h = Liquid.Param.EventconHeight;
var sx = this.frameIndex() * w;
var sy = (this._eventconId - 1) * h;
this.setFrame(sx, sy, w, h);
};
Sprite_EventCon.prototype.speed = function () {
return Liquid.Param.EventconSpeed;
};
Sprite_EventCon.prototype.waitTime = function () {
return Liquid.Param.EventconWaitTime;
};
Sprite_EventCon.prototype.frameIndex = function () {
var index = (this._duration - this.waitTime()) / this.speed();
return 3 - Math.max(Math.floor(index), 0);
};
Sprite_EventCon.prototype.isPlaying = function () {
return this._duration > 0;
};