/*:
* @plugindesc Animated Mugshots
* @author Shaz
*
* @param defaultStartFrame
* @desc Frame to start on by default (top left is 1)
* @default 1
*
* @param defaultEndFrame
* @desc Frame to end on by default (bottom right is 8)
* @default 8
*
* @param defaultSpeed
* @desc Frame speed (number of characters before changing frame)
* @default 5
*
* @help
*
* This plugin allows a message box to animate a face image by specifying
* a starting and ending frame, and an animation speed.
*
* When the text has been displayed, the face will revert to the first
* frame.
*
* Starting and ending frame, and animation speed, revert to the defaults
* after each message, so use a plugin command to override the defaults
* with each Show Text command if necessary.
*
*
* Plugin Command:
* SetFaceAnim startFrame endFrame
* : sets starting and ending frame and uses default speed
* SetFaceAnim startFrame endFrame animSpeed
* : sets starting and ending frame and animation speed
*/
(function() {
function toNumber(str, def) {
return isNaN(str) ? def : +(str || def);
}
var parameters = PluginManager.parameters('Shaz_AnimatedMugshots');
var defaultFaceStartFrame = toNumber(parameters['defaultStartFrame'], 1) - 1;
var defaultFaceEndFrame = toNumber(parameters['defaultEndFrame'], 8) - 1;
var defaultFaceAnimSpeed = toNumber(parameters['defaultSpeed'], 5);
var finishAnim = parameters['finishAnim'].toLowerCase() === 'true';
var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function(command, args) {
switch (command.toLowerCase()) {
case 'setfaceanim':
$gameMessage.setFaceStartFrame(Number(args[0]) - 1);
$gameMessage.setFaceEndFrame(Number(args[1]) - 1);
$gameMessage.setFaceAnimSpeed(Number(args[2] || defaultFaceAnimSpeed));
break;
default:
_Game_Interpreter_pluginCommand.call(this, command, args);
break;
}
};
var _Game_Message_clear = Game_Message.prototype.clear;
Game_Message.prototype.clear = function() {
_Game_Message_clear.call(this);
this._faceStartFrame = defaultFaceStartFrame;
this._faceEndFrame = defaultFaceEndFrame;
this._faceAnimSpeed = defaultFaceAnimSpeed;
};
Game_Message.prototype.setFaceStartFrame = function(startFrame) {
this._faceStartFrame = startFrame;
};
Game_Message.prototype.setFaceEndFrame = function(endFrame) {
this._faceEndFrame = endFrame;
};
Game_Message.prototype.setFaceAnimSpeed = function(animSpeed) {
this._faceAnimSpeed = animSpeed;
};
Game_Message.prototype.faceStartFrame = function() {
return this._faceStartFrame;
};
Game_Message.prototype.faceEndFrame = function() {
return this._faceEndFrame;
};
Game_Message.prototype.faceAnimSpeed = function() {
return this._faceAnimSpeed;
};
var _Window_Message_clearFlags = Window_Message.prototype.clearFlags;
Window_Message.prototype.clearFlags = function() {
_Window_Message_clearFlags.call(this);
this._faceFrame = $gameMessage.faceStartFrame();
this._faceFrameWait = 0;
};
var _Window_Message_terminateMessage = Window_Message.prototype.terminateMessage;
Window_Message.prototype.terminateMessage = function() {
ImageManager.releaseReservation(this._imageReservationId);
_Window_Message_terminateMessage.call(this);
};
var _Window_Message_onEndOfText = Window_Message.prototype.onEndOfText;
Window_Message.prototype.onEndOfText = function() {
if ($gameMessage.faceName() !== "" && this._faceFrame > $gameMessage.faceStartFrame()) {
this._faceFrame = $gameMessage.faceStartFrame();
this.drawMessageFace();
}
_Window_Message_onEndOfText.call(this);
};
var _Window_Message_processNormalCharacter = Window_Base.prototype.processNormalCharacter;
Window_Message.prototype.processNormalCharacter = function(textState) {
if ($gameMessage.faceName() !== "" && (textState || this._faceFrame > $gameMessage.faceStartFrame())) {
if (this._faceFrameWait > $gameMessage.faceAnimSpeed()) {
this._faceFrame += 1;
if (this._faceFrame > $gameMessage.faceEndFrame()) {
this._faceFrame = $gameMessage.faceStartFrame();
}
this.drawMessageFace();
this._faceFrameWait = 0;
}
this._faceFrameWait += 1;
}
if (textState) {
_Window_Message_processNormalCharacter.call(this, textState);
}
};
Window_Message.prototype.drawMessageFace = function() {
this.contents.clearRect(0, 0, Window_Base._faceWidth, Window_Base._faceHeight);
this.drawFace($gameMessage.faceName(), this._faceFrame, 0, 0);
};
})();