355 lines
No EOL
11 KiB
JavaScript
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;
|
|
}; |