赞 | 204 |
VIP | 13 |
好人卡 | 7 |
积分 | 122 |
经验 | 52899 |
最后登录 | 2021-6-29 |
在线时间 | 4435 小时 |
Lv4.逐梦者
- 梦石
- 0
- 星屑
- 12157
- 在线时间
- 4435 小时
- 注册时间
- 2014-4-11
- 帖子
- 5955
|
/*============================================================================= * Orange - Mapshot * By Hudell - [url]www.hudell.com[/url] * OrangeMapshot.js * Version: 1.7 * Free for commercial and non commercial use. *=============================================================================*/ /*: * @plugindesc This plugin will save a picture of the entire map on a Mapshots folder when you press a key. <OrangeMapshot> * @author Hudell * * @param useMapName * @desc if true, the filename will be the name of the map. If false it will be the number. * @default true * * @param layerType * @desc 0 = all, 1 = upper and lower, 2 = separate everything * @default 0 * * @param drawAutoShadows * @desc set this to false to disable autoshadows on the map shot * @default true * * @param drawEvents * @desc set this to false to stop drawing the events on the full bitmap * @default true * * @param keyCode * @desc code of the key that will be used (44 = printscreen). [url]http://link.hudell.com/js-keys[/url] * @default 44 * * @param imageType * @desc What type of image should be generated. Can be png, jpeg or webp * @default png * * @param imageQuality * @desc If the imageType is jpeg or webp, you can set this to a number between 0 and 100 indicating the quality of the image * @default 70 * * @param imagePath * @desc The path where the images will be saved * @default ./Mapshots * * @help * Check keycodes at [url]http://link.hudell.com/js-keys[/url] */ var Imported = Imported || {}; var OrangeMapshot = OrangeMapshot || {}; (function($) { "use strict"; var parameters = $plugins.filter(function(plugin) { return plugin.description.indexOf('<OrangeMapshot>') >= 0; }); if (parameters.length === 0) { throw new Error("Couldn't find OrangeMapshot parameters."); } $.Parameters = parameters[0].parameters; $.Param = {}; $.Param.useMapName = $.Parameters.useMapName !== "false"; $.Param.drawAutoShadows = $.Parameters.drawAutoShadows !== "false"; $.Param.drawEvents = $.Parameters.drawEvents !== "false"; $.Param.layerType = Number($.Parameters.layerType || 0); $.Param.imageType = $.Parameters.imageType || 'png'; $.Param.imagePath = $.Parameters.imagePath || './Mapshots'; $.Param.imageQuality = Number($.Parameters.imageQuality || 70); $.Param.keyCode = Number($.Parameters.keyCode || 44); $.imageType = function() { if ($.Param.imageType == 'webp') return 'image/webp'; if ($.Param.imageType == 'jpeg' || $.Param.imageType == 'jpg') return 'image/jpeg'; return 'image/png'; }; $.imageRegex = function() { if ($.Param.imageType == 'webp') return (/^data:image\/webp;base64,/); if ($.Param.imageType == 'jpeg' || $.Param.imageType == 'jpg') return (/^data:image\/jpeg;base64,/); return (/^data:image\/png;base64,/); }; $.fileExtension = function() { if ($.Param.imageType == 'webp') return '.webp'; if ($.Param.imageType == 'jpeg' || $.Param.imageType == 'jpg') return '.jpg'; return '.png'; }; $.imageQuality = function() { if ($.fileExtension() == '.jpg' || $.fileExtension() == '.webp') { return Math.min($.Param.imageQuality, 100) / 100; } return 1; }; $.baseFileName = function() { var mapName = ($gameMap._mapId).padZero(3); if ($.Param.useMapName) { mapName = $dataMapInfos[$gameMap._mapId].name; } else { mapName = 'Map' + mapName; } return mapName; }; $.getMapshot = function() { var lowerBitmap; var upperBitmap; switch($.Param.layerType) { case 1 : lowerBitmap = new Bitmap($dataMap.width * $gameMap.tileWidth(), $dataMap.height * $gameMap.tileHeight()); upperBitmap = new Bitmap($dataMap.width * $gameMap.tileWidth(), $dataMap.height * $gameMap.tileHeight()); SceneManager._scene._spriteset._tilemap._paintEverything(lowerBitmap, upperBitmap); return [lowerBitmap, upperBitmap]; case 2 : var groundBitmap = new Bitmap($dataMap.width * $gameMap.tileWidth(), $dataMap.height * $gameMap.tileHeight()); var ground2Bitmap = new Bitmap($dataMap.width * $gameMap.tileWidth(), $dataMap.height * $gameMap.tileHeight()); var lowerBitmapLayer = new Bitmap($dataMap.width * $gameMap.tileWidth(), $dataMap.height * $gameMap.tileHeight()); var upperBitmapLayer = new Bitmap($dataMap.width * $gameMap.tileWidth(), $dataMap.height * $gameMap.tileHeight()); var shadowBitmap = new Bitmap($dataMap.width * $gameMap.tileWidth(), $dataMap.height * $gameMap.tileHeight()); var lowerEvents = new Bitmap($dataMap.width * $gameMap.tileWidth(), $dataMap.height * $gameMap.tileHeight()); var normalEvents = new Bitmap($dataMap.width * $gameMap.tileWidth(), $dataMap.height * $gameMap.tileHeight()); var upperEvents = new Bitmap($dataMap.width * $gameMap.tileWidth(), $dataMap.height * $gameMap.tileHeight()); SceneManager._scene._spriteset._tilemap._paintLayered(groundBitmap, ground2Bitmap, lowerBitmapLayer, upperBitmapLayer, shadowBitmap, lowerEvents, normalEvents, upperEvents); return [groundBitmap, ground2Bitmap, lowerBitmapLayer, upperBitmapLayer, shadowBitmap, lowerEvents, normalEvents, upperEvents]; default : lowerBitmap = new Bitmap($dataMap.width * $gameMap.tileWidth(), $dataMap.height * $gameMap.tileHeight()); upperBitmap = new Bitmap($dataMap.width * $gameMap.tileWidth(), $dataMap.height * $gameMap.tileHeight()); SceneManager._scene._spriteset._tilemap._paintEverything(lowerBitmap, upperBitmap); var bitmap = new Bitmap($dataMap.width * $gameMap.tileWidth(), $dataMap.height * $gameMap.tileHeight()); bitmap.blt(lowerBitmap, 0, 0, lowerBitmap.width, lowerBitmap.height, 0, 0, lowerBitmap.width, lowerBitmap.height); bitmap.blt(upperBitmap, 0, 0, upperBitmap.width, upperBitmap.height, 0, 0, upperBitmap.width, upperBitmap.height); return [bitmap]; } }; function MapShotTileMap() { } MapShotTileMap.prototype = Object.create(Tilemap.prototype); MapShotTileMap.prototype.constructor = MapShotTileMap; MapShotTileMap.prototype._drawAutotile = function(bitmap, tileId, dx, dy) { var autotileTable = Tilemap.FLOOR_AUTOTILE_TABLE; var kind = Tilemap.getAutotileKind(tileId); var shape = Tilemap.getAutotileShape(tileId); var tx = kind % 8; var ty = Math.floor(kind / 8); var bx = 0; var by = 0; var setNumber = 0; var isTable = false; if (Tilemap.isTileA1(tileId)) { var waterSurfaceIndex = [0, 1, 2, 1][this.animationFrame % 4]; setNumber = 0; if (kind === 0) { bx = waterSurfaceIndex * 2; by = 0; } else if (kind === 1) { bx = waterSurfaceIndex * 2; by = 3; } else if (kind === 2) { bx = 6; by = 0; } else if (kind === 3) { bx = 6; by = 3; } else { bx = Math.floor(tx / 4) * 8; by = ty * 6 + Math.floor(tx / 2) % 2 * 3; if (kind % 2 === 0) { bx += waterSurfaceIndex * 2; } else { bx += 6; autotileTable = Tilemap.WATERFALL_AUTOTILE_TABLE; by += this.animationFrame % 3; } } } else if (Tilemap.isTileA2(tileId)) { setNumber = 1; bx = tx * 2; by = (ty - 2) * 3; isTable = this._isTableTile(tileId); } else if (Tilemap.isTileA3(tileId)) { setNumber = 2; bx = tx * 2; by = (ty - 6) * 2; autotileTable = Tilemap.WALL_AUTOTILE_TABLE; } else if (Tilemap.isTileA4(tileId)) { setNumber = 3; bx = tx * 2; by = Math.floor((ty - 10) * 2.5 + (ty % 2 === 1 ? 0.5 : 0)); if (ty % 2 === 1) { autotileTable = Tilemap.WALL_AUTOTILE_TABLE; } } var table = autotileTable[shape]; var source = this.bitmaps[setNumber]; if (table && source) { var w1 = this._tileWidth / 2; var h1 = this._tileHeight / 2; for (var i = 0; i < 4; i++) { var qsx = table[i][0]; var qsy = table[i][1]; var sx1 = (bx * 2 + qsx) * w1; var sy1 = (by * 2 + qsy) * h1; var dx1 = dx + (i % 2) * w1; var dy1 = dy + Math.floor(i / 2) * h1; if (isTable && (qsy === 1 || qsy === 5)) { var qsx2 = qsx; var qsy2 = 3; if (qsy === 1) { qsx2 = [0,3,2,1][qsx]; } var sx2 = (bx * 2 + qsx2) * w1; var sy2 = (by * 2 + qsy2) * h1; bitmap.blt(source, sx2, sy2, w1, h1, dx1, dy1, w1, h1); dy1 += h1/2; bitmap.blt(source, sx1, sy1, w1, h1 / 2, dx1, dy1, w1, h1 / 2); } else { bitmap.blt(source, sx1, sy1, w1, h1, dx1, dy1, w1, h1); } } } }; MapShotTileMap.prototype._drawNormalTile = function(bitmap, tileId, dx, dy) { var setNumber = 0; if (Tilemap.isTileA5(tileId)) { setNumber = 4; } else { setNumber = 5 + Math.floor(tileId / 256); } var w = this._tileWidth; var h = this._tileHeight; var sx = (Math.floor(tileId / 128) % 2 * 8 + tileId % 8) * w; var sy = (Math.floor(tileId % 256 / 8) % 16) * h; var source = this.bitmaps[setNumber]; if (source) { bitmap.blt(source, sx, sy, w, h, dx, dy, w, h); } }; MapShotTileMap.prototype._drawTableEdge = function(bitmap, tileId, dx, dy) { if (Tilemap.isTileA2(tileId)) { var autotileTable = Tilemap.FLOOR_AUTOTILE_TABLE; var kind = Tilemap.getAutotileKind(tileId); var shape = Tilemap.getAutotileShape(tileId); var tx = kind % 8; var ty = Math.floor(kind / 8); var setNumber = 1; var bx = tx * 2; var by = (ty - 2) * 3; var table = autotileTable[shape]; if (table) { var source = this.bitmaps[setNumber]; var w1 = this._tileWidth / 2; var h1 = this._tileHeight / 2; for (var i = 0; i < 2; i++) { var qsx = table[2 + i][0]; var qsy = table[2 + i][1]; var sx1 = (bx * 2 + qsx) * w1; var sy1 = (by * 2 + qsy) * h1 + h1/2; var dx1 = dx + (i % 2) * w1; var dy1 = dy + Math.floor(i / 2) * h1; bitmap.blt(source, sx1, sy1, w1, h1/2, dx1, dy1, w1, h1/2); } } } }; Tilemap.prototype._drawTileOldStyle = function(bitmap, tileId, dx, dy) { if (Tilemap.isVisibleTile(tileId)) { if (Tilemap.isAutotile(tileId)) { MapShotTileMap.prototype._drawAutotile.call(this, bitmap, tileId, dx, dy); } else { MapShotTileMap.prototype._drawNormalTile.call(this, bitmap, tileId, dx, dy); } } }; Tilemap.prototype._paintEverything = function(lowerBitmap, upperBitmap) { var tileCols = $dataMap.width; var tileRows = $dataMap.height; for (var y = 0; y < tileRows; y++) { for (var x = 0; x < tileCols; x++) { this._paintTilesOnBitmap(lowerBitmap, upperBitmap, x, y); } } if ($.Param.drawEvents !== false) { this._paintCharacters(lowerBitmap, 0); this._paintCharacters(lowerBitmap, 1); this._paintCharacters(upperBitmap, 2); } }; Tilemap.prototype._paintLayered = function(groundBitmap, ground2Bitmap, lowerBitmap, upperLayer, shadowBitmap, lowerEvents, normalEvents, upperEvents) { var tileCols = $dataMap.width; var tileRows = $dataMap.height; for (var y = 0; y < tileRows; y++) { for (var x = 0; x < tileCols; x++) { this._paintTileOnLayers(groundBitmap, ground2Bitmap, lowerBitmap, upperLayer, shadowBitmap, x, y); } } this._paintCharacters(lowerEvents, 0); this._paintCharacters(normalEvents, 1); this._paintCharacters(upperEvents, 2); }; Tilemap.prototype._paintCharacters = function(bitmap, priority) { this.children.forEach(function(child) { if (child instanceof Sprite_Character) { if (child._character !== null) { if (child._character instanceof Game_Player || child._character instanceof Game_Follower || child._character instanceof Game_Vehicle) return; } child.update(); if (child._characterName === '' && child._tileId === 0) return; if (priority !== undefined && child._character._priorityType !== priority) return; var x = child.x - child._frame.width / 2 + $gameMap._displayX * $gameMap.tileWidth(); var y = child.y - child._frame.height + $gameMap._displayY * $gameMap.tileHeight(); bitmap.blt(child.bitmap, child._frame.x, child._frame.y, child._frame.width, child._frame.height, x, y, child._frame.width, child._frame.height); } }); }; Tilemap.prototype._paintTileOnLayers = function(groundBitmap, ground2Bitmap, lowerBitmap, upperBitmap, shadowBitmap, x, y) { var tableEdgeVirtualId = 10000; var mx = x; var my = y; var dx = (mx * this._tileWidth); var dy = (my * this._tileHeight); var lx = dx / this._tileWidth; var ly = dy / this._tileHeight; var tileId0 = this._readMapData(mx, my, 0); var tileId1 = this._readMapData(mx, my, 1); var tileId2 = this._readMapData(mx, my, 2); var tileId3 = this._readMapData(mx, my, 3); var shadowBits = this._readMapData(mx, my, 4); var upperTileId1 = this._readMapData(mx, my - 1, 1); if (groundBitmap !== undefined) { groundBitmap.clearRect(dx, dy, this._tileWidth, this._tileHeight); } if (ground2Bitmap !== undefined) { ground2Bitmap.clearRect(dx, dy, this._tileWidth, this._tileHeight); } if (lowerBitmap !== undefined) { lowerBitmap.clearRect(dx, dy, this._tileWidth, this._tileHeight); } if (upperBitmap !== undefined) { upperBitmap.clearRect(dx, dy, this._tileWidth, this._tileHeight); } if (shadowBitmap !== undefined) { shadowBitmap.clearRect(dx, dy, this._tileWidth, this._tileHeight); } var me = this; function drawTiles(bitmap, tileId, shadowBits, upperTileId1) { if (tileId < 0) { if ($.Param.drawAutoShadows && shadowBits !== undefined) { MapShotTileMap.prototype._drawShadow.call(me, bitmap, shadowBits, dx, dy); } } else if (tileId >= tableEdgeVirtualId) { MapShotTileMap.prototype._drawTableEdge.call(me, bitmap, upperTileId1, dx, dy); } else { me._drawTileOldStyle(bitmap, tileId, dx, dy); } } if (groundBitmap !== undefined) { drawTiles(groundBitmap, tileId0, undefined, upperTileId1); if (shadowBitmap !== undefined && tileId0 < 0) { drawTiles(shadowBitmap, tileId0, shadowBits, upperTileId1); } } if (ground2Bitmap !== undefined) { drawTiles(ground2Bitmap, tileId1, undefined, upperTileId1); if (shadowBitmap !== undefined && tileId1 < 0) { drawTiles(shadowBitmap, tileId1, shadowBits, upperTileId1); } } if (lowerBitmap !== undefined) { drawTiles(lowerBitmap, tileId2, undefined, upperTileId1); if (shadowBitmap !== undefined && tileId2 < 0) { drawTiles(shadowBitmap, tileId2, shadowBits, upperTileId1); } } if (upperBitmap !== undefined) { drawTiles(upperBitmap, tileId3, shadowBits, upperTileId1); if (shadowBitmap !== undefined && tileId3 < 0) { drawTiles(shadowBitmap, tileId3, shadowBits, upperTileId1); } } }; Tilemap.prototype._paintTilesOnBitmap = function(lowerBitmap, upperBitmap, x, y) { var tableEdgeVirtualId = 10000; var mx = x; var my = y; var dx = (mx * this._tileWidth); var dy = (my * this._tileHeight); var lx = dx / this._tileWidth; var ly = dy / this._tileHeight; var tileId0 = this._readMapData(mx, my, 0); var tileId1 = this._readMapData(mx, my, 1); var tileId2 = this._readMapData(mx, my, 2); var tileId3 = this._readMapData(mx, my, 3); var shadowBits = this._readMapData(mx, my, 4); var upperTileId1 = this._readMapData(mx, my - 1, 1); var lowerTiles = []; var upperTiles = []; if (this._isHigherTile(tileId0)) { upperTiles.push(tileId0); } else { lowerTiles.push(tileId0); } if (this._isHigherTile(tileId1)) { upperTiles.push(tileId1); } else { lowerTiles.push(tileId1); } lowerTiles.push(-shadowBits); if (this._isTableTile(upperTileId1) && !this._isTableTile(tileId1)) { if (!Tilemap.isShadowingTile(tileId0)) { lowerTiles.push(tableEdgeVirtualId + upperTileId1); } } if (this._isOverpassPosition(mx, my)) { upperTiles.push(tileId2); upperTiles.push(tileId3); } else { if (this._isHigherTile(tileId2)) { upperTiles.push(tileId2); } else { lowerTiles.push(tileId2); } if (this._isHigherTile(tileId3)) { upperTiles.push(tileId3); } else { lowerTiles.push(tileId3); } } lowerBitmap.clearRect(dx, dy, this._tileWidth, this._tileHeight); upperBitmap.clearRect(dx, dy, this._tileWidth, this._tileHeight); for (var i = 0; i < lowerTiles.length; i++) { var lowerTileId = lowerTiles[i]; if (lowerTileId < 0) { if ($.Param.drawAutoShadows) { MapShotTileMap.prototype._drawShadow.call(this, lowerBitmap, shadowBits, dx, dy); } } else if (lowerTileId >= tableEdgeVirtualId) { MapShotTileMap.prototype._drawTableEdge.call(this, lowerBitmap, upperTileId1, dx, dy); } else { this._drawTileOldStyle(lowerBitmap, lowerTileId, dx, dy); } } for (var j = 0; j < upperTiles.length; j++) { this._drawTileOldStyle(upperBitmap, upperTiles[j], dx, dy); } }; $.saveMapshot = function() { if (!Utils.isNwjs()) return; var fs = require('fs'); var path = $.Param.imagePath; try { fs.mkdir(path, function() { try{ var fileName = path + '/' + $.baseFileName(); var ext = $.fileExtension(); var names = [fileName + ext]; var regex = $.imageRegex(); switch ($.Param.layerType) { case 1 : names = [ fileName + ' Lower' + ext, fileName + ' Upper' + ext ]; break; case 2 : names = [ fileName + ' Ground' + ext, fileName + ' Ground 2' + ext, fileName + ' Lower' + ext, fileName + ' Upper' + ext, fileName + ' Shadows' + ext, fileName + ' Lower Events' + ext, fileName + ' Normal Events' + ext, fileName + ' Upper Events' + ext ]; break; default : names = [fileName + ext]; break; } var snaps = $.getMapshot(); var callback = function(error) { if (error !== undefined && error !== null) { console.error('An error occured while saving the mapshot', error); } }; for (var i = 0; i < names.length; i++) { var urlData = snaps[i].canvas.toDataURL($.imageType(), $.imageQuality()); var base64Data = urlData.replace(regex, ""); fs.writeFile(names[i], base64Data, 'base64', callback); } } catch (error) { if (error !== undefined && error !== null) { console.error('An error occured while saving the map shot:', error); } } }); var nodePath = require('path'); var longPath = nodePath.resolve(path); if (process.platform == 'win32' && $._openedFolder === undefined) { $._openedFolder = true; setTimeout(function(){ var exec = require('child_process').exec; exec('explorer ' + longPath); }, 100); } else { $gameMessage.add('Mapshot saved to \n' + longPath.replace(/\\/g, '\\\\').match(/.{1,40}/g).join('\n')); } } catch (error) { if (error !== undefined && error !== null) { console.error('An error occured while saving the mapshot:', error); } } }; $.onKeyUp = function(event) { if (event.keyCode == $.Param.keyCode) { if (SceneManager._scene instanceof Scene_Map) { $.saveMapshot(); } } }; document.addEventListener('keyup', $.onKeyUp); })(OrangeMapshot); Imported.OrangeMapshot = 1.7;
/*=============================================================================
* Orange - Mapshot
* By Hudell - [url]www.hudell.com[/url]
* OrangeMapshot.js
* Version: 1.7
* Free for commercial and non commercial use.
*=============================================================================*/
/*:
* @plugindesc This plugin will save a picture of the entire map on a Mapshots folder when you press a key. <OrangeMapshot>
* @author Hudell
*
* @param useMapName
* @desc if true, the filename will be the name of the map. If false it will be the number.
* @default true
*
* @param layerType
* @desc 0 = all, 1 = upper and lower, 2 = separate everything
* @default 0
*
* @param drawAutoShadows
* @desc set this to false to disable autoshadows on the map shot
* @default true
*
* @param drawEvents
* @desc set this to false to stop drawing the events on the full bitmap
* @default true
*
* @param keyCode
* @desc code of the key that will be used (44 = printscreen). [url]http://link.hudell.com/js-keys[/url]
* @default 44
*
* @param imageType
* @desc What type of image should be generated. Can be png, jpeg or webp
* @default png
*
* @param imageQuality
* @desc If the imageType is jpeg or webp, you can set this to a number between 0 and 100 indicating the quality of the image
* @default 70
*
* @param imagePath
* @desc The path where the images will be saved
* @default ./Mapshots
*
* @help
* Check keycodes at [url]http://link.hudell.com/js-keys[/url]
*/
var Imported = Imported || {};
var OrangeMapshot = OrangeMapshot || {};
(function($) {
"use strict";
var parameters = $plugins.filter(function(plugin) {
return plugin.description.indexOf('<OrangeMapshot>') >= 0;
});
if (parameters.length === 0) {
throw new Error("Couldn't find OrangeMapshot parameters.");
}
$.Parameters = parameters[0].parameters;
$.Param = {};
$.Param.useMapName = $.Parameters.useMapName !== "false";
$.Param.drawAutoShadows = $.Parameters.drawAutoShadows !== "false";
$.Param.drawEvents = $.Parameters.drawEvents !== "false";
$.Param.layerType = Number($.Parameters.layerType || 0);
$.Param.imageType = $.Parameters.imageType || 'png';
$.Param.imagePath = $.Parameters.imagePath || './Mapshots';
$.Param.imageQuality = Number($.Parameters.imageQuality || 70);
$.Param.keyCode = Number($.Parameters.keyCode || 44);
$.imageType = function() {
if ($.Param.imageType == 'webp') return 'image/webp';
if ($.Param.imageType == 'jpeg' || $.Param.imageType == 'jpg') return 'image/jpeg';
return 'image/png';
};
$.imageRegex = function() {
if ($.Param.imageType == 'webp') return (/^data:image\/webp;base64,/);
if ($.Param.imageType == 'jpeg' || $.Param.imageType == 'jpg') return (/^data:image\/jpeg;base64,/);
return (/^data:image\/png;base64,/);
};
$.fileExtension = function() {
if ($.Param.imageType == 'webp') return '.webp';
if ($.Param.imageType == 'jpeg' || $.Param.imageType == 'jpg') return '.jpg';
return '.png';
};
$.imageQuality = function() {
if ($.fileExtension() == '.jpg' || $.fileExtension() == '.webp') {
return Math.min($.Param.imageQuality, 100) / 100;
}
return 1;
};
$.baseFileName = function() {
var mapName = ($gameMap._mapId).padZero(3);
if ($.Param.useMapName) {
mapName = $dataMapInfos[$gameMap._mapId].name;
} else {
mapName = 'Map' + mapName;
}
return mapName;
};
$.getMapshot = function() {
var lowerBitmap;
var upperBitmap;
switch($.Param.layerType) {
case 1 :
lowerBitmap = new Bitmap($dataMap.width * $gameMap.tileWidth(), $dataMap.height * $gameMap.tileHeight());
upperBitmap = new Bitmap($dataMap.width * $gameMap.tileWidth(), $dataMap.height * $gameMap.tileHeight());
SceneManager._scene._spriteset._tilemap._paintEverything(lowerBitmap, upperBitmap);
return [lowerBitmap, upperBitmap];
case 2 :
var groundBitmap = new Bitmap($dataMap.width * $gameMap.tileWidth(), $dataMap.height * $gameMap.tileHeight());
var ground2Bitmap = new Bitmap($dataMap.width * $gameMap.tileWidth(), $dataMap.height * $gameMap.tileHeight());
var lowerBitmapLayer = new Bitmap($dataMap.width * $gameMap.tileWidth(), $dataMap.height * $gameMap.tileHeight());
var upperBitmapLayer = new Bitmap($dataMap.width * $gameMap.tileWidth(), $dataMap.height * $gameMap.tileHeight());
var shadowBitmap = new Bitmap($dataMap.width * $gameMap.tileWidth(), $dataMap.height * $gameMap.tileHeight());
var lowerEvents = new Bitmap($dataMap.width * $gameMap.tileWidth(), $dataMap.height * $gameMap.tileHeight());
var normalEvents = new Bitmap($dataMap.width * $gameMap.tileWidth(), $dataMap.height * $gameMap.tileHeight());
var upperEvents = new Bitmap($dataMap.width * $gameMap.tileWidth(), $dataMap.height * $gameMap.tileHeight());
SceneManager._scene._spriteset._tilemap._paintLayered(groundBitmap, ground2Bitmap, lowerBitmapLayer, upperBitmapLayer, shadowBitmap, lowerEvents, normalEvents, upperEvents);
return [groundBitmap, ground2Bitmap, lowerBitmapLayer, upperBitmapLayer, shadowBitmap, lowerEvents, normalEvents, upperEvents];
default :
lowerBitmap = new Bitmap($dataMap.width * $gameMap.tileWidth(), $dataMap.height * $gameMap.tileHeight());
upperBitmap = new Bitmap($dataMap.width * $gameMap.tileWidth(), $dataMap.height * $gameMap.tileHeight());
SceneManager._scene._spriteset._tilemap._paintEverything(lowerBitmap, upperBitmap);
var bitmap = new Bitmap($dataMap.width * $gameMap.tileWidth(), $dataMap.height * $gameMap.tileHeight());
bitmap.blt(lowerBitmap, 0, 0, lowerBitmap.width, lowerBitmap.height, 0, 0, lowerBitmap.width, lowerBitmap.height);
bitmap.blt(upperBitmap, 0, 0, upperBitmap.width, upperBitmap.height, 0, 0, upperBitmap.width, upperBitmap.height);
return [bitmap];
}
};
function MapShotTileMap() {
}
MapShotTileMap.prototype = Object.create(Tilemap.prototype);
MapShotTileMap.prototype.constructor = MapShotTileMap;
MapShotTileMap.prototype._drawAutotile = function(bitmap, tileId, dx, dy) {
var autotileTable = Tilemap.FLOOR_AUTOTILE_TABLE;
var kind = Tilemap.getAutotileKind(tileId);
var shape = Tilemap.getAutotileShape(tileId);
var tx = kind % 8;
var ty = Math.floor(kind / 8);
var bx = 0;
var by = 0;
var setNumber = 0;
var isTable = false;
if (Tilemap.isTileA1(tileId)) {
var waterSurfaceIndex = [0, 1, 2, 1][this.animationFrame % 4];
setNumber = 0;
if (kind === 0) {
bx = waterSurfaceIndex * 2;
by = 0;
} else if (kind === 1) {
bx = waterSurfaceIndex * 2;
by = 3;
} else if (kind === 2) {
bx = 6;
by = 0;
} else if (kind === 3) {
bx = 6;
by = 3;
} else {
bx = Math.floor(tx / 4) * 8;
by = ty * 6 + Math.floor(tx / 2) % 2 * 3;
if (kind % 2 === 0) {
bx += waterSurfaceIndex * 2;
}
else {
bx += 6;
autotileTable = Tilemap.WATERFALL_AUTOTILE_TABLE;
by += this.animationFrame % 3;
}
}
} else if (Tilemap.isTileA2(tileId)) {
setNumber = 1;
bx = tx * 2;
by = (ty - 2) * 3;
isTable = this._isTableTile(tileId);
} else if (Tilemap.isTileA3(tileId)) {
setNumber = 2;
bx = tx * 2;
by = (ty - 6) * 2;
autotileTable = Tilemap.WALL_AUTOTILE_TABLE;
} else if (Tilemap.isTileA4(tileId)) {
setNumber = 3;
bx = tx * 2;
by = Math.floor((ty - 10) * 2.5 + (ty % 2 === 1 ? 0.5 : 0));
if (ty % 2 === 1) {
autotileTable = Tilemap.WALL_AUTOTILE_TABLE;
}
}
var table = autotileTable[shape];
var source = this.bitmaps[setNumber];
if (table && source) {
var w1 = this._tileWidth / 2;
var h1 = this._tileHeight / 2;
for (var i = 0; i < 4; i++) {
var qsx = table[i][0];
var qsy = table[i][1];
var sx1 = (bx * 2 + qsx) * w1;
var sy1 = (by * 2 + qsy) * h1;
var dx1 = dx + (i % 2) * w1;
var dy1 = dy + Math.floor(i / 2) * h1;
if (isTable && (qsy === 1 || qsy === 5)) {
var qsx2 = qsx;
var qsy2 = 3;
if (qsy === 1) {
qsx2 = [0,3,2,1][qsx];
}
var sx2 = (bx * 2 + qsx2) * w1;
var sy2 = (by * 2 + qsy2) * h1;
bitmap.blt(source, sx2, sy2, w1, h1, dx1, dy1, w1, h1);
dy1 += h1/2;
bitmap.blt(source, sx1, sy1, w1, h1 / 2, dx1, dy1, w1, h1 / 2);
} else {
bitmap.blt(source, sx1, sy1, w1, h1, dx1, dy1, w1, h1);
}
}
}
};
MapShotTileMap.prototype._drawNormalTile = function(bitmap, tileId, dx, dy) {
var setNumber = 0;
if (Tilemap.isTileA5(tileId)) {
setNumber = 4;
} else {
setNumber = 5 + Math.floor(tileId / 256);
}
var w = this._tileWidth;
var h = this._tileHeight;
var sx = (Math.floor(tileId / 128) % 2 * 8 + tileId % 8) * w;
var sy = (Math.floor(tileId % 256 / 8) % 16) * h;
var source = this.bitmaps[setNumber];
if (source) {
bitmap.blt(source, sx, sy, w, h, dx, dy, w, h);
}
};
MapShotTileMap.prototype._drawTableEdge = function(bitmap, tileId, dx, dy) {
if (Tilemap.isTileA2(tileId)) {
var autotileTable = Tilemap.FLOOR_AUTOTILE_TABLE;
var kind = Tilemap.getAutotileKind(tileId);
var shape = Tilemap.getAutotileShape(tileId);
var tx = kind % 8;
var ty = Math.floor(kind / 8);
var setNumber = 1;
var bx = tx * 2;
var by = (ty - 2) * 3;
var table = autotileTable[shape];
if (table) {
var source = this.bitmaps[setNumber];
var w1 = this._tileWidth / 2;
var h1 = this._tileHeight / 2;
for (var i = 0; i < 2; i++) {
var qsx = table[2 + i][0];
var qsy = table[2 + i][1];
var sx1 = (bx * 2 + qsx) * w1;
var sy1 = (by * 2 + qsy) * h1 + h1/2;
var dx1 = dx + (i % 2) * w1;
var dy1 = dy + Math.floor(i / 2) * h1;
bitmap.blt(source, sx1, sy1, w1, h1/2, dx1, dy1, w1, h1/2);
}
}
}
};
Tilemap.prototype._drawTileOldStyle = function(bitmap, tileId, dx, dy) {
if (Tilemap.isVisibleTile(tileId)) {
if (Tilemap.isAutotile(tileId)) {
MapShotTileMap.prototype._drawAutotile.call(this, bitmap, tileId, dx, dy);
} else {
MapShotTileMap.prototype._drawNormalTile.call(this, bitmap, tileId, dx, dy);
}
}
};
Tilemap.prototype._paintEverything = function(lowerBitmap, upperBitmap) {
var tileCols = $dataMap.width;
var tileRows = $dataMap.height;
for (var y = 0; y < tileRows; y++) {
for (var x = 0; x < tileCols; x++) {
this._paintTilesOnBitmap(lowerBitmap, upperBitmap, x, y);
}
}
if ($.Param.drawEvents !== false) {
this._paintCharacters(lowerBitmap, 0);
this._paintCharacters(lowerBitmap, 1);
this._paintCharacters(upperBitmap, 2);
}
};
Tilemap.prototype._paintLayered = function(groundBitmap, ground2Bitmap, lowerBitmap, upperLayer, shadowBitmap, lowerEvents, normalEvents, upperEvents) {
var tileCols = $dataMap.width;
var tileRows = $dataMap.height;
for (var y = 0; y < tileRows; y++) {
for (var x = 0; x < tileCols; x++) {
this._paintTileOnLayers(groundBitmap, ground2Bitmap, lowerBitmap, upperLayer, shadowBitmap, x, y);
}
}
this._paintCharacters(lowerEvents, 0);
this._paintCharacters(normalEvents, 1);
this._paintCharacters(upperEvents, 2);
};
Tilemap.prototype._paintCharacters = function(bitmap, priority) {
this.children.forEach(function(child) {
if (child instanceof Sprite_Character) {
if (child._character !== null) {
if (child._character instanceof Game_Player || child._character instanceof Game_Follower || child._character instanceof Game_Vehicle) return;
}
child.update();
if (child._characterName === '' && child._tileId === 0) return;
if (priority !== undefined && child._character._priorityType !== priority) return;
var x = child.x - child._frame.width / 2 + $gameMap._displayX * $gameMap.tileWidth();
var y = child.y - child._frame.height + $gameMap._displayY * $gameMap.tileHeight();
bitmap.blt(child.bitmap, child._frame.x, child._frame.y, child._frame.width, child._frame.height, x, y, child._frame.width, child._frame.height);
}
});
};
Tilemap.prototype._paintTileOnLayers = function(groundBitmap, ground2Bitmap, lowerBitmap, upperBitmap, shadowBitmap, x, y) {
var tableEdgeVirtualId = 10000;
var mx = x;
var my = y;
var dx = (mx * this._tileWidth);
var dy = (my * this._tileHeight);
var lx = dx / this._tileWidth;
var ly = dy / this._tileHeight;
var tileId0 = this._readMapData(mx, my, 0);
var tileId1 = this._readMapData(mx, my, 1);
var tileId2 = this._readMapData(mx, my, 2);
var tileId3 = this._readMapData(mx, my, 3);
var shadowBits = this._readMapData(mx, my, 4);
var upperTileId1 = this._readMapData(mx, my - 1, 1);
if (groundBitmap !== undefined) {
groundBitmap.clearRect(dx, dy, this._tileWidth, this._tileHeight);
}
if (ground2Bitmap !== undefined) {
ground2Bitmap.clearRect(dx, dy, this._tileWidth, this._tileHeight);
}
if (lowerBitmap !== undefined) {
lowerBitmap.clearRect(dx, dy, this._tileWidth, this._tileHeight);
}
if (upperBitmap !== undefined) {
upperBitmap.clearRect(dx, dy, this._tileWidth, this._tileHeight);
}
if (shadowBitmap !== undefined) {
shadowBitmap.clearRect(dx, dy, this._tileWidth, this._tileHeight);
}
var me = this;
function drawTiles(bitmap, tileId, shadowBits, upperTileId1) {
if (tileId < 0) {
if ($.Param.drawAutoShadows && shadowBits !== undefined) {
MapShotTileMap.prototype._drawShadow.call(me, bitmap, shadowBits, dx, dy);
}
} else if (tileId >= tableEdgeVirtualId) {
MapShotTileMap.prototype._drawTableEdge.call(me, bitmap, upperTileId1, dx, dy);
} else {
me._drawTileOldStyle(bitmap, tileId, dx, dy);
}
}
if (groundBitmap !== undefined) {
drawTiles(groundBitmap, tileId0, undefined, upperTileId1);
if (shadowBitmap !== undefined && tileId0 < 0) {
drawTiles(shadowBitmap, tileId0, shadowBits, upperTileId1);
}
}
if (ground2Bitmap !== undefined) {
drawTiles(ground2Bitmap, tileId1, undefined, upperTileId1);
if (shadowBitmap !== undefined && tileId1 < 0) {
drawTiles(shadowBitmap, tileId1, shadowBits, upperTileId1);
}
}
if (lowerBitmap !== undefined) {
drawTiles(lowerBitmap, tileId2, undefined, upperTileId1);
if (shadowBitmap !== undefined && tileId2 < 0) {
drawTiles(shadowBitmap, tileId2, shadowBits, upperTileId1);
}
}
if (upperBitmap !== undefined) {
drawTiles(upperBitmap, tileId3, shadowBits, upperTileId1);
if (shadowBitmap !== undefined && tileId3 < 0) {
drawTiles(shadowBitmap, tileId3, shadowBits, upperTileId1);
}
}
};
Tilemap.prototype._paintTilesOnBitmap = function(lowerBitmap, upperBitmap, x, y) {
var tableEdgeVirtualId = 10000;
var mx = x;
var my = y;
var dx = (mx * this._tileWidth);
var dy = (my * this._tileHeight);
var lx = dx / this._tileWidth;
var ly = dy / this._tileHeight;
var tileId0 = this._readMapData(mx, my, 0);
var tileId1 = this._readMapData(mx, my, 1);
var tileId2 = this._readMapData(mx, my, 2);
var tileId3 = this._readMapData(mx, my, 3);
var shadowBits = this._readMapData(mx, my, 4);
var upperTileId1 = this._readMapData(mx, my - 1, 1);
var lowerTiles = [];
var upperTiles = [];
if (this._isHigherTile(tileId0)) {
upperTiles.push(tileId0);
} else {
lowerTiles.push(tileId0);
}
if (this._isHigherTile(tileId1)) {
upperTiles.push(tileId1);
} else {
lowerTiles.push(tileId1);
}
lowerTiles.push(-shadowBits);
if (this._isTableTile(upperTileId1) && !this._isTableTile(tileId1)) {
if (!Tilemap.isShadowingTile(tileId0)) {
lowerTiles.push(tableEdgeVirtualId + upperTileId1);
}
}
if (this._isOverpassPosition(mx, my)) {
upperTiles.push(tileId2);
upperTiles.push(tileId3);
} else {
if (this._isHigherTile(tileId2)) {
upperTiles.push(tileId2);
} else {
lowerTiles.push(tileId2);
}
if (this._isHigherTile(tileId3)) {
upperTiles.push(tileId3);
} else {
lowerTiles.push(tileId3);
}
}
lowerBitmap.clearRect(dx, dy, this._tileWidth, this._tileHeight);
upperBitmap.clearRect(dx, dy, this._tileWidth, this._tileHeight);
for (var i = 0; i < lowerTiles.length; i++) {
var lowerTileId = lowerTiles[i];
if (lowerTileId < 0) {
if ($.Param.drawAutoShadows) {
MapShotTileMap.prototype._drawShadow.call(this, lowerBitmap, shadowBits, dx, dy);
}
} else if (lowerTileId >= tableEdgeVirtualId) {
MapShotTileMap.prototype._drawTableEdge.call(this, lowerBitmap, upperTileId1, dx, dy);
} else {
this._drawTileOldStyle(lowerBitmap, lowerTileId, dx, dy);
}
}
for (var j = 0; j < upperTiles.length; j++) {
this._drawTileOldStyle(upperBitmap, upperTiles[j], dx, dy);
}
};
$.saveMapshot = function() {
if (!Utils.isNwjs()) return;
var fs = require('fs');
var path = $.Param.imagePath;
try {
fs.mkdir(path, function() {
try{
var fileName = path + '/' + $.baseFileName();
var ext = $.fileExtension();
var names = [fileName + ext];
var regex = $.imageRegex();
switch ($.Param.layerType) {
case 1 :
names = [
fileName + ' Lower' + ext,
fileName + ' Upper' + ext
];
break;
case 2 :
names = [
fileName + ' Ground' + ext,
fileName + ' Ground 2' + ext,
fileName + ' Lower' + ext,
fileName + ' Upper' + ext,
fileName + ' Shadows' + ext,
fileName + ' Lower Events' + ext,
fileName + ' Normal Events' + ext,
fileName + ' Upper Events' + ext
];
break;
default :
names = [fileName + ext];
break;
}
var snaps = $.getMapshot();
var callback = function(error) {
if (error !== undefined && error !== null) {
console.error('An error occured while saving the mapshot', error);
}
};
for (var i = 0; i < names.length; i++) {
var urlData = snaps[i].canvas.toDataURL($.imageType(), $.imageQuality());
var base64Data = urlData.replace(regex, "");
fs.writeFile(names[i], base64Data, 'base64', callback);
}
} catch (error) {
if (error !== undefined && error !== null) {
console.error('An error occured while saving the map shot:', error);
}
}
});
var nodePath = require('path');
var longPath = nodePath.resolve(path);
if (process.platform == 'win32' && $._openedFolder === undefined) {
$._openedFolder = true;
setTimeout(function(){
var exec = require('child_process').exec;
exec('explorer ' + longPath);
}, 100);
} else {
$gameMessage.add('Mapshot saved to \n' + longPath.replace(/\\/g, '\\\\').match(/.{1,40}/g).join('\n'));
}
} catch (error) {
if (error !== undefined && error !== null) {
console.error('An error occured while saving the mapshot:', error);
}
}
};
$.onKeyUp = function(event) {
if (event.keyCode == $.Param.keyCode) {
if (SceneManager._scene instanceof Scene_Map) {
$.saveMapshot();
}
}
};
document.addEventListener('keyup', $.onKeyUp);
})(OrangeMapshot);
Imported.OrangeMapshot = 1.7;
|
|