princess-synergy/www/js/plugins/JsScript45Set.js
2026-02-05 14:03:22 -06:00

134 lines
5.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*:
* @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'));
}());