224 lines
8.4 KiB
JavaScript
224 lines
8.4 KiB
JavaScript
//=============================================================================
|
|
// Yanfly Engine Plugins - Picture Spritesheets
|
|
// YEP_PictureSpritesheets.js
|
|
//=============================================================================
|
|
|
|
var Imported = Imported || {};
|
|
Imported.YEP_PictureSpritesheets = true;
|
|
|
|
var Yanfly = Yanfly || {};
|
|
Yanfly.PicSS = Yanfly.PicSS || {};
|
|
Yanfly.PicSS.version = 1.00;
|
|
|
|
//=============================================================================
|
|
/*:
|
|
* @plugindesc v1.00 Another function from RPG Maker 2003 is back. You can now
|
|
* use spritesheets in your pictures folder and change them to specific frames.
|
|
* @author Yanfly Engine Plugins
|
|
*
|
|
* @help
|
|
* ============================================================================
|
|
* Introduction
|
|
* ============================================================================
|
|
*
|
|
* In RPG Maker 2003, pictures had the ability to load spritesheets and display
|
|
* certain frames from them at the issue of a command. Ever since then, later
|
|
* iterations of RPG Maker lacked the feature. This plugin will bring back that
|
|
* old feature and give you access to use spritesheets as pictures once more
|
|
* with complete frame control.
|
|
*
|
|
* ============================================================================
|
|
* Instructions
|
|
* ============================================================================
|
|
*
|
|
* When putting a spritesheet into your project's /img/pictures/ folder, you
|
|
* have to name them a certain way.
|
|
*
|
|
* filename[HxV]
|
|
*
|
|
* Replace H in the filename with the number of horizontal cells it has.
|
|
* Replace V in the filename with the number of vertical cells it has.
|
|
*
|
|
* --- For example ---
|
|
*
|
|
* "Actor1_1(9x6)" will have 9 horizontal cells and 6 vertical cells.
|
|
*
|
|
* As long as the picture's filename is formatted in such a way, it will be
|
|
* displayed in-game as a spritesheet.
|
|
*
|
|
* --- Frames ---
|
|
*
|
|
* Individual frames can be displayed using Plugin Commands or Script Calls
|
|
* (look in the later help sections to figure out how). To identify which frame
|
|
* ID a particular spritesheet cell is, start with 0 in the upper left. The
|
|
* frame ID increases as you go left to right, then it loops back around at the
|
|
* start of a new row. For example:
|
|
*
|
|
* 0 1 2 3 4 5 6 7 8
|
|
* 9 10 11 12 13 14 15 16 17
|
|
* 18 19 20 21 22 23 24 25 26
|
|
* 27 28 29 30 31 32 33 34 35
|
|
* 36 37 38 39 40 41 42 43 44
|
|
* 45 46 47 48 49 50 51 52 53
|
|
*
|
|
* ============================================================================
|
|
* Plugin Commands
|
|
* ============================================================================
|
|
*
|
|
* Using the Plugin Command event, you can set a specific picture to change to
|
|
* a different cell by using the Plugin Command below:
|
|
*
|
|
* Plugin Commands:
|
|
*
|
|
* Picture x Frame y
|
|
* - Replace 'x' with the ID of the picture you wish to change the frame of.
|
|
* - Replace 'y' with the frame ID to change the picture to.
|
|
*
|
|
* ============================================================================
|
|
* Script Calls
|
|
* ============================================================================
|
|
*
|
|
* For those who wish to use JavaScript code instead of Plugin Commands, you
|
|
* can use the Script Call event command to do so:
|
|
*
|
|
* var pictureId = 5;
|
|
* var frame = 10;
|
|
* $gameScreen.picture(pictureId).setSpritesheetFrame(frame);
|
|
*
|
|
* The above code will adjust the designated picture to change to desired frame
|
|
* setting you would like.
|
|
*
|
|
* ============================================================================
|
|
* Changelog
|
|
* ============================================================================
|
|
*
|
|
* Version 1.00:
|
|
* - Finished Plugin!
|
|
*
|
|
* ============================================================================
|
|
* End of Helpfile
|
|
* ============================================================================
|
|
*
|
|
*/
|
|
//=============================================================================
|
|
|
|
//=============================================================================
|
|
// Game_Picture
|
|
//=============================================================================
|
|
|
|
Yanfly.PicSS.Game_Picture_initialize = Game_Picture.prototype.initialize;
|
|
Game_Picture.prototype.initialize = function() {
|
|
Yanfly.PicSS.Game_Picture_initialize.call(this);
|
|
this.initSpritesheetFrame();
|
|
};
|
|
|
|
Game_Picture.prototype.initSpritesheetFrame = function() {
|
|
this._spritesheetFrame = 0;
|
|
};
|
|
|
|
Game_Picture.prototype.getSpritesheetFrame = function() {
|
|
if (this._spritesheetFrame === undefined) this.initSpritesheetFrame();
|
|
return this._spritesheetFrame;
|
|
};
|
|
|
|
Game_Picture.prototype.setSpritesheetFrame = function(value) {
|
|
if (this._spritesheetFrame === undefined) this.initSpritesheetFrame();
|
|
this._spritesheetFrame = value;
|
|
};
|
|
|
|
Yanfly.PicSS.Game_Picture_show = Game_Picture.prototype.show;
|
|
Game_Picture.prototype.show = function(name, origin, x, y, scaleX, scaleY, opacity, blendMode) {
|
|
Yanfly.PicSS.Game_Picture_show.call(this, name, origin, x, y, scaleX, scaleY, opacity, blendMode);
|
|
this.initSpritesheetFrame();
|
|
};
|
|
|
|
Yanfly.PicSS.Game_Picture_erase = Game_Picture.prototype.erase;
|
|
Game_Picture.prototype.erase = function() {
|
|
Yanfly.PicSS.Game_Picture_erase.call(this);
|
|
this.initSpritesheetFrame();
|
|
};
|
|
|
|
//=============================================================================
|
|
// Game_Interpreter
|
|
//=============================================================================
|
|
|
|
Yanfly.PicSS.Game_Interpreter_pluginCommand =
|
|
Game_Interpreter.prototype.pluginCommand;
|
|
Game_Interpreter.prototype.pluginCommand = function(command, args) {
|
|
Yanfly.PicSS.Game_Interpreter_pluginCommand.call(this, command, args);
|
|
var line = this._params[0];
|
|
if (line.match(/Picture (\d+) Frame (\d+)/i)) {
|
|
var pictureId = Number(RegExp.$1);
|
|
var frame = Number(RegExp.$2);
|
|
$gameScreen.picture(pictureId).setSpritesheetFrame(frame);
|
|
}
|
|
};
|
|
|
|
//=============================================================================
|
|
// Sprite_Picture
|
|
//=============================================================================
|
|
|
|
Yanfly.PicSS.Sprite_Picture_initialize = Sprite_Picture.prototype.initialize;
|
|
Sprite_Picture.prototype.initialize = function(pictureId) {
|
|
Yanfly.PicSS.Sprite_Picture_initialize.call(this, pictureId);
|
|
this.initPictureSpritesheetSettings();
|
|
};
|
|
|
|
Sprite_Picture.prototype.initPictureSpritesheetSettings = function() {
|
|
this._spritesheetHorzCells = 1;
|
|
this._spritesheetVertCells = 1;
|
|
this._lastSpritesheetFrame = -1;
|
|
};
|
|
|
|
Yanfly.PicSS.Sprite_Picture_loadBitmap = Sprite_Picture.prototype.loadBitmap;
|
|
Sprite_Picture.prototype.loadBitmap = function() {
|
|
Yanfly.PicSS.Sprite_Picture_loadBitmap.call(this);
|
|
this.initPictureSpritesheetSettings();
|
|
this.setupPictureSpritesheetSettings();
|
|
if (this.isSpritesheet()) {
|
|
this.bitmap.addLoadListener(this.updateSpritesheetFrame.bind(this));
|
|
} else {
|
|
this.bitmap.addLoadListener(this.resetSpritesheetFrame.bind(this));
|
|
}
|
|
};
|
|
|
|
Sprite_Picture.prototype.setupPictureSpritesheetSettings = function() {
|
|
var name = this.picture().name();
|
|
if (name && name.match(/\((\d+)x(\d+)\)/i)) {
|
|
this._spritesheetHorzCells = Number(RegExp.$1);
|
|
this._spritesheetVertCells = Number(RegExp.$2);
|
|
}
|
|
};
|
|
|
|
Sprite_Picture.prototype.isSpritesheet = function() {
|
|
return this._spritesheetHorzCells > 1 || this._spritesheetVertCells > 1;
|
|
};
|
|
|
|
Sprite_Picture.prototype.spritesheetFrame = function() {
|
|
return this.picture().getSpritesheetFrame();
|
|
};
|
|
|
|
Sprite_Picture.prototype.updateSpritesheetFrame = function() {
|
|
if (this._lastSpritesheetFrame === this.spritesheetFrame()) return;
|
|
if (this.bitmap.width <= 0) return;
|
|
this._lastSpritesheetFrame = this.spritesheetFrame();
|
|
var pw = this.bitmap.width / this._spritesheetHorzCells;
|
|
var ph = this.bitmap.height / this._spritesheetVertCells;
|
|
var sx = this.spritesheetFrame() % this._spritesheetHorzCells * pw;
|
|
var sy = Math.floor(this.spritesheetFrame() / this._spritesheetHorzCells) * ph;
|
|
this.setFrame(sx, sy, pw, ph);
|
|
};
|
|
|
|
Sprite_Picture.prototype.resetSpritesheetFrame = function() {
|
|
this.setFrame(0, 0, this.bitmap.width, this.bitmap.height);
|
|
};
|
|
|
|
Yanfly.PicSS.Sprite_Picture_update = Sprite_Picture.prototype.update;
|
|
Sprite_Picture.prototype.update = function() {
|
|
Yanfly.PicSS.Sprite_Picture_update.call(this);
|
|
if (this.isSpritesheet()) this.updateSpritesheetFrame();
|
|
};
|
|
|
|
//=============================================================================
|
|
// End of File
|
|
//=============================================================================
|