175 lines
5.6 KiB
JavaScript
175 lines
5.6 KiB
JavaScript
//=============================================================================
|
|
// Lazy Tilesets
|
|
// by Shaz
|
|
// Last Updated: 2015.10.21
|
|
//=============================================================================
|
|
|
|
/*:
|
|
* @plugindesc Allows you to export/import/copy tilesets and all their data
|
|
* @author Shaz
|
|
*
|
|
* @help This plugin does not provide plugin commands.
|
|
*
|
|
* Tileset Note:
|
|
* <lzexport: filename> # Export settings to img/tilesets/filename.MVTileset
|
|
* <lzimport: filename> # Import settings from img/tilesets/filename.MVTileset
|
|
* <lzcopy: ID> # Copy settings from tileset with ID
|
|
*
|
|
* <lzimport: filename A1 A2 B C>
|
|
* <lzcopy: ID A1 A2 B C> # Import/copy slots A1, A2, B and C
|
|
*
|
|
* <lzimport: filename B:D C:E>
|
|
* <lzcopy: ID B:D C:E> # Import/copy slots B and C, placing them into D and E
|
|
*
|
|
* Remember to remove the commands after use to prevent loss of custom changes
|
|
* This plugin only runs in DEBUG mode (from PlayTest)
|
|
*/
|
|
*
|
|
/*:ja
|
|
* @plugindesc タイルセットとその全データの
|
|
* エクスポート/インポート/コピーを可能にします。
|
|
* @author Shaz
|
|
*
|
|
* @help このプラグインは、プラグインコマンドを含みません。
|
|
*
|
|
* Tileset Note:
|
|
* <lzexport: filename> #
|
|
* img/tilesets/filename.MVTilesetに設定をエクスポートします。
|
|
* <lzimport: filename> #
|
|
* img/tilesets/filename.MVTilesetからファイルをインポートします。
|
|
* <lzcopy: ID> #
|
|
* タイルセットから設定をコピーします。
|
|
*
|
|
* <lzimport: filename A1 A2 B C>
|
|
* <lzcopy: ID A1 A2 B C> #
|
|
* A1, A2, B, Cのインポート/コピーを行います。
|
|
*
|
|
* <lzimport: filename B:D C:E>
|
|
* <lzcopy: ID B:D C:E> #
|
|
* B, Cのインポート/コピーを行い、D, Eに置換します。
|
|
*
|
|
* 変更の反映を失わないために、使用後はコマンドを消去してください。
|
|
* このプラグインはデバッグモードのみで動作します。
|
|
*/
|
|
|
|
|
|
(function() {
|
|
|
|
var slots = {
|
|
'A1': [0, 2048, 2815],
|
|
'A2': [1, 2816, 4351],
|
|
'A3': [2, 4352, 5887],
|
|
'A4': [3, 5888, 8191],
|
|
'A5': [4, 1536, 1663],
|
|
'B': [5, 0, 255],
|
|
'C': [6, 256, 511],
|
|
'D': [7, 512, 767],
|
|
'E': [8, 768, 1023]
|
|
};
|
|
|
|
var _Scene_Boot_start = Scene_Boot.prototype.start;
|
|
Scene_Boot.prototype.start = function() {
|
|
_Scene_Boot_start.call(this);
|
|
|
|
if (!Utils.isOptionValid('test')) return;
|
|
|
|
var saveMods = false;
|
|
var fs = require('fs');
|
|
|
|
for (var i = 0; i < $dataTilesets.length; i++) {
|
|
ts = $dataTilesets[i];
|
|
|
|
if (!ts) continue;
|
|
|
|
if (ts.meta.lzexport) {
|
|
filename = ts.meta.lzexport.trim();
|
|
fs.writeFileSync(StorageManager.lzFile(filename), JSON.stringify(ts));
|
|
}
|
|
|
|
if (ts.meta.lzimport) {
|
|
var options = ts.meta.lzimport.trim().split(' ');
|
|
filename = options.shift();
|
|
data = JSON.parse(fs.readFileSync(StorageManager.lzFile(filename)));
|
|
$dataTilesets[i] = this.lzReadData(data, options, i);
|
|
saveMods = true;
|
|
}
|
|
|
|
if (ts.meta.lzcopy) {
|
|
var options = ts.meta.lzcopy.trim().split(' ');
|
|
tilesetId = options.shift();
|
|
data = $dataTilesets[Number(tilesetId)];
|
|
$dataTilesets[i] = this.lzReadData(data, options, i);
|
|
saveMods = true;
|
|
}
|
|
}
|
|
|
|
if (saveMods) {
|
|
fs.writeFileSync(StorageManager.lzData('Tilesets'), JSON.stringify($dataTilesets));
|
|
}
|
|
};
|
|
|
|
Scene_Boot.prototype.lzReadData = function(data, options, tilesetId) {
|
|
if (options.length < 1) {
|
|
return data;
|
|
} else {
|
|
var rtnData = $dataTilesets[tilesetId];
|
|
msgprfx = 'Tileset #' + String(tilesetId) + ' - ' + rtnData.name + ': ';
|
|
|
|
for (i = 0; i < options.length; i++) {
|
|
var group = options[i].toUpperCase().split(':');
|
|
var fromSlot = group[0];
|
|
var toSlot = group[1] || group[0];
|
|
|
|
// 'from' slot not valid
|
|
if ((slots[fromSlot] || 'X') === 'X') {
|
|
window.alert(msgprfx + 'Invalid slot ' + fromSlot);
|
|
return rtnData;
|
|
}
|
|
|
|
// 'to' slot not valid
|
|
if ((slots[toSlot] || 'X') === 'X') {
|
|
window.alert(msgprfx + 'Invalid slot ' + toSlot);
|
|
return rtnData;
|
|
}
|
|
|
|
// trying to move something invalid into/out of one of the A slots
|
|
if (fromSlot !== toSlot && ('BCDE'.indexOf(fromSlot) < 0 || 'BCDE'.indexOf(toSlot) < 0)) {
|
|
window.alert(msgprfx + 'A1-A5 slots cannot be moved');
|
|
return rtnData;
|
|
}
|
|
|
|
// all good - copy the slot data in
|
|
fromSlotId = slots[fromSlot][0];
|
|
fromSlotStart = slots[fromSlot][1];
|
|
fromSlotEnd = slots[fromSlot][2];
|
|
|
|
toSlotId = slots[toSlot][0];
|
|
k = slots[toSlot][1];
|
|
|
|
rtnData.tilesetNames[toSlotId] = data.tilesetNames[fromSlotId];
|
|
for (j = fromSlotStart; j <= fromSlotEnd; j++) {
|
|
rtnData.flags[k] = data.flags[j];
|
|
k++;
|
|
}
|
|
|
|
}
|
|
}
|
|
return rtnData;
|
|
};
|
|
|
|
StorageManager.lzFile = function(filename) {
|
|
var path = window.location.pathname.replace(/\/[^\/]*$/, '/img/tilesets/');
|
|
if (path.match(/^\/([A-Z]\:)/)) {
|
|
path = path.slice(1);
|
|
}
|
|
return decodeURIComponent(path) + filename.replace(/[^a-zA-Z0-9]/,'') + '.MVTileset';
|
|
};
|
|
|
|
StorageManager.lzData = function(filename) {
|
|
var path = window.location.pathname.replace(/\/[^\/]*$/, '/data/');
|
|
if (path.match(/^\/([A-Z]\:)/)) {
|
|
path = path.slice(1);
|
|
}
|
|
return decodeURIComponent(path) + filename.replace(/[^a-zA-Z0-9]/,'') + '.json';
|
|
}
|
|
})();
|