134 lines
5.9 KiB
JavaScript
134 lines
5.9 KiB
JavaScript
/*:
|
||
* @plugindesc
|
||
* @author 奏ねこま(おとぶき ねこま)
|
||
*
|
||
* @param GetImageTrigger1
|
||
* @desc マップを画像出力するトリガーを指定してください。
|
||
* @default Input.isPressed('control') && Input.isTriggered('pageup')
|
||
*
|
||
* @param GetImageTrigger2
|
||
* @desc マップを画像出力するトリガーを指定してください。(キャラクター表示OFF)
|
||
* @default Input.isPressed('control') && Input.isTriggered('pagedown')
|
||
*
|
||
* @param OutputFolder
|
||
* @desc 画像を出力するフォルダを指定してください。
|
||
* @default output
|
||
*
|
||
* @param TestModeOnly
|
||
* @desc テスト時のみ有効にする場合は true を指定してください。
|
||
* @default true
|
||
*
|
||
* @help
|
||
*/
|
||
var Imported = Imported || {};
|
||
var Makonet = Makonet || {};
|
||
(function(){
|
||
'use strict';
|
||
var plugin = 'JsScript45Set';
|
||
Imported[plugin] = true;
|
||
Makonet[plugin] = {};
|
||
var $mpi = Makonet[plugin];
|
||
$mpi.parameters = PluginManager.parameters(plugin);
|
||
$mpi.getImageTrigger1 = $mpi.parameters['GetImageTrigger1'];
|
||
$mpi.getImageTrigger2 = $mpi.parameters['GetImageTrigger2'];
|
||
$mpi.outputFolder = $mpi.parameters['OutputFolder'];
|
||
$mpi.testModeOnly = $mpi.parameters['TestModeOnly'].toLowerCase() === 'true';
|
||
var _ = plugin;
|
||
var $_ = `$${_}`;
|
||
function getMapImage() {
|
||
var mapWidth = $gameMap.width();
|
||
var mapHeight = $gameMap.height();
|
||
var screenWidth = Math.floor(Graphics.width / $gameMap.tileWidth());
|
||
var screenHeight = Math.floor(Graphics.height / $gameMap.tileHeight());
|
||
var screenPixcelWidth = screenWidth * $gameMap.tileWidth();
|
||
var screenPixcelHeight = screenHeight * $gameMap.tileHeight();
|
||
var rows = Math.ceil(mapWidth / screenWidth);
|
||
var columns = Math.ceil(mapHeight / screenHeight);
|
||
var displayX = $gameMap.displayX();
|
||
var displayY = $gameMap.displayY();
|
||
var parallaxOx = $gameMap.parallaxOx();
|
||
var parallaxOy = $gameMap.parallaxOy();
|
||
if ($gameMap.foregroundOx) {
|
||
var foregroundOx = $gameMap.foregroundOx();
|
||
var foregroundOy = $gameMap.foregroundOy();
|
||
}
|
||
var mapBitmap = new Bitmap(mapWidth * $gameMap.tileWidth(), mapHeight * $gameMap.tileHeight());
|
||
var spriteset = SceneManager._scene._spriteset;
|
||
for (var i = 0; i < rows; i++) {
|
||
for (var j = 0; j < columns; j++) {
|
||
$gameMap._displayX = i * screenWidth;
|
||
$gameMap._displayY = j * screenHeight;
|
||
spriteset.update();
|
||
if (spriteset._parallax.bitmap) {
|
||
spriteset._parallax.origin.x = parallaxOx + ($gameMap._displayX - displayX) * $gameMap.tileWidth();
|
||
spriteset._parallax.origin.y = parallaxOy + ($gameMap._displayY - displayY) * $gameMap.tileHeight();
|
||
}
|
||
if (spriteset._foreground && spriteset._foreground.bitmap) {
|
||
spriteset._foreground.origin.x = foregroundOx + ($gameMap._displayX - displayX) * $gameMap.tileWidth();
|
||
spriteset._foreground.origin.y = foregroundOy + ($gameMap._displayY - displayY) * $gameMap.tileHeight();
|
||
}
|
||
Graphics._renderer.render(SceneManager._scene);
|
||
var bitmap = Bitmap.snap(SceneManager._scene);
|
||
mapBitmap.blt(bitmap, 0, 0, screenPixcelWidth, screenPixcelHeight, screenPixcelWidth * i, screenPixcelHeight * j, screenPixcelWidth, screenPixcelHeight);
|
||
}
|
||
}
|
||
$gameMap._displayX = displayX;
|
||
$gameMap._displayY = displayY;
|
||
spriteset.update();
|
||
Graphics._renderer.render(SceneManager._scene);
|
||
return mapBitmap;
|
||
}
|
||
function getDateString() {
|
||
var date = new Date();
|
||
var year = date.getFullYear();
|
||
var month = date.getMonth() + 1;
|
||
var day = date.getDate();
|
||
var hours = date.getHours();
|
||
var minutes = date.getMinutes();
|
||
var seconds = date.getSeconds();
|
||
return year + month.padZero(2) + day.padZero(2) + hours.padZero(2) + minutes.padZero(2) + seconds.padZero(2);
|
||
}
|
||
function outputMapImage(bitmap) {
|
||
var fs = require('fs');
|
||
var path = StorageManager.localFileDirectoryPath().replace(/save[\\/]$/, '');
|
||
var folder = path + $mpi.outputFolder;
|
||
if (!fs.existsSync(folder)) {
|
||
fs.mkdirSync(folder);
|
||
}
|
||
var file = folder + '\\Map' + $gameMap.mapId().padZero(3) + '_' + getDateString() + '.png';
|
||
var data = bitmap._canvas.toDataURL('img/png').replace(/^.*,/, '');
|
||
var buffer = new Buffer(data, 'base64');
|
||
fs.writeFileSync(file, buffer);
|
||
}
|
||
function showCharacters() {
|
||
for (var i = 0; i < this._characterSprites.length; i++) {
|
||
var sprite = this._characterSprites[i];
|
||
if (!sprite.isTile()) {
|
||
sprite.show();
|
||
}
|
||
}
|
||
};
|
||
(function(o,p){
|
||
var f=o[p];o[p]=function(){
|
||
if (Utils.isOptionValid('test') || !$mpi.testModeOnly) {
|
||
var trigger1 = !!eval($mpi.getImageTrigger1);
|
||
var trigger2 = !!eval($mpi.getImageTrigger2);
|
||
if (trigger1 || trigger2) {
|
||
var mapImage = null;
|
||
if (trigger1) {
|
||
mapImage = getMapImage();
|
||
}
|
||
if (trigger2) {
|
||
this._spriteset.hideCharacters();
|
||
mapImage = getMapImage();
|
||
showCharacters.call(this._spriteset);
|
||
}
|
||
if (mapImage) {
|
||
outputMapImage(mapImage);
|
||
}
|
||
}
|
||
}
|
||
f.apply(this,arguments);
|
||
};
|
||
}(Scene_Map.prototype,'update'));
|
||
}());
|