/*
* ==============================================================================
* ** Victor Engine MV - Fog And Overlay
* ------------------------------------------------------------------------------
* VE_FogAndOverlay.js
* ==============================================================================
*/
var Imported = Imported || {};
Imported['VE - Fog And Overlay'] = '1.07';
var VictorEngine = VictorEngine || {};
VictorEngine.FogAndOverlay = VictorEngine.FogAndOverlay || {};
(function () {
VictorEngine.FogAndOverlay.loadDatabase = DataManager.loadDatabase;
DataManager.loadDatabase = function () {
VictorEngine.FogAndOverlay.loadDatabase.call(this);
PluginManager.requiredPlugin.call(PluginManager, 'VE - Fog And Overlay', 'VE - Basic Module', '1.21');
PluginManager.requiredPlugin.call(PluginManager, 'VE - Fog And Overlay', 'VE - Tile Priority');
};
VictorEngine.FogAndOverlay.requiredPlugin = PluginManager.requiredPlugin;
PluginManager.requiredPlugin = function (name, required, version) {
if (!VictorEngine.BasicModule) {
var msg = 'The plugin ' + name + ' requires the plugin ' + required;
msg += ' v' + version + ' or higher installed to work properly.';
msg += ' Go to http://victorenginescripts.wordpress.com/ to download the plugin.';
throw new Error(msg);
} else {
VictorEngine.FogAndOverlay.requiredPlugin.call(this, name, required, version)
};
};
})();
/*:
* @plugindesc v1.07 - Display fogs and overlay on maps and battles.
* @author Victor Sant
*
* @param Max Fogs
* @desc Max number of simultaneous fogs and overlay effects
* Default: 5.
* @default 5
*
* @help
* ==============================================================================
* Notetags:
* ==============================================================================
*
* ==============================================================================
* Fog Effect (notetag for Maps)
* ------------------------------------------------------------------------------
*
* settings
*
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Create a fog effect on the map, add the following values to the info
* the ID and name must be added, other values are optional.
* id: n : fog ID
* name: 's' : fog graphic filename ('filename' in quotations)
* opacity: n : fog opacity (0-255)
* zoom: n% : fog zoom (100% = default size)
* hue: n : fog hue (0-360)
* blend: n : fog blend mode (0: normal, 1: addition, 2: subtraction)
* move x: n : fog horizontal movement (Numeric value, can be negative)
* move y: n : fog vertical movement (Numeric value, can be negative)
* pan x: n : fog horizontal panning (Numeric value)
* pan y: n : fog vertical panning (Numeric value)
* depth: n : fog depth (1-7, see details bellow)
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Ex.:
* id: 1
* name: 'Sky'
* opacity: 160
* hue: 100
* move x: 3
* move y: 2
*
*
*
* id: 3
* name: '$Fog'
* opacity: 92
* zoom: 150%
* pan x: -5
* blend: 2
*
* ==============================================================================
*
* ==============================================================================
* Plugin Commands
* ------------------------------------------------------------------------------
*
* ------------------------------------------------------------------------------
* FogEffect id name opacity hue blend depth
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Show the fog effect on map.
* id : fog effect id. (Number)
* name : fog filename. (filename can't contain white space)
* opacity : fog opacity. (0-255)
* hue : fog hue. (0-360)
* blend : fog blend mode (0: normal, 1: addition, 2: subtraction)
* depth : fog depth (1-7, see details bellow)
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Ex.: FogEffect 1 Sky 160 100 0 0
* FogEffect 2 $Fog 92 0 1 3
* ------------------------------------------------------------------------------
*
* ------------------------------------------------------------------------------
* FogOpacity id opacity duration
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Changes the fog effect opacity.
* id : fog effect id. (Number)
* opacity : opacity. (0-255)
* duration : opacity change duration. (in frames, 0 if not set).
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Ex.: FogOpacity 1 92 60
* FogOpacity 2 0 120
* ------------------------------------------------------------------------------
*
* ------------------------------------------------------------------------------
* FogMove id x y
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Adds continuous movement to the fog effect.
* id : fog effect id. (Number)
* x : fog move X. (Number, can be negative)
* y : fog move Y. (Number, can be negative)
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Ex.: FogMove 1 5 -5
* FogMove 2 0 4
* ------------------------------------------------------------------------------
*
* ------------------------------------------------------------------------------
* FogPan id x y
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Change fog effect panning.
* id : fog effect id. (Number)
* x : fog pan X. (Number, can be negative)
* y : fog pan Y. (Number, can be negative)
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Ex.: FogPan 1 4 4
* FogPan 2 0 -5
* ==============================================================================
*
* ==============================================================================
* Additional Information:
* ------------------------------------------------------------------------------
*
* - Fogs Depths:
* The fog depth represents wich objects will be displayed above or bellow the
* overlay effect. There are 8 depths available from 0 to 7.
*
* On map:
* 1: above animations
* 2: above airship/upper characters
* 3: above upper tiles
* 4: above normal characters
* 5: above lower characters
* 6: above lower tilesets
* 7: above parallax
*
* On battle:
* 0, 1, 2, 3, 4: above battlers
* 5: above battleback2
* 6: above battleback1
* 7: above background (blured map image)
*
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*
* - Fogs in Battle:
* By default, fogs are shown only on Map. You can make some fogs to display
* during battle by adding a prefix to it's filename.
* Add '$' on the fog filename, for the fog to be shown in the map and battle.
* Add '%' on the fog filename, for the fog to be shown only in battle.
* For example, a fog named '%Clouds' will be shown only in battle.
*
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*
* - Creating Fogs
* The fog images must be placed on the folder img/fogs/ (you must create this
* new folder).
* The fogs can be created either adding a notetag on the map note box or using
* plugin commands. Fogs created with plugin commands will disappear when you
* leave the map. You can also control fogs created with notetags using plugin
* commands with their Ids, but any change will reset when you leave the map.
* Fogs on the same depht are sorted based on their IDs. The ones with higher
* IDs will be shown above the ones with lower IDs.
*
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*
* If you want to create a fixed overlay (that follows the map movement),
* add '!' on the start of the overlay filename. For example, an overlay
* named "Over" should be renamed "!Over". You can combine this prefix with
* the battle and battle only prefixes.
*
* ==============================================================================
*
* ==============================================================================
* Compatibility:
* ------------------------------------------------------------------------------
* - To be used together with this plugin, the following plugins must be placed
* bellow this plugin:
* VE - Tile Priority
* ==============================================================================
*
* ==============================================================================
* Version History:
* ------------------------------------------------------------------------------
* v 1.00 - 2015.12.07 > First release.
* v 1.01 - 2015.12.25 > Revised code for better performance.
* > Added more depth options.
* v 1.02 - 2016.01.06 > Fixed issue with fogs not clearing.
* v 1.03 - 2016.01.27 > Fixed issue with loading games with fogs on the map.
* v 1.04 - 2016.03.12 > Fixed issue with stack call and battle fogs.
* v 1.05 - 2016.03.23 > Compatibility with Basic Module 1.16.
* v 1.06 - 2016.06.04 > Fixed issue when calling new Fogs with Plugin Commands.
* v 1.07 - 2016.06.11 > Compatibility with Tile Priority.
* > Fixed issue with crash at battle start.
* ------------------------------------------------------------------------------
*/
/*:ja
* @plugindesc v1.07 マップや戦闘にフォグやオーバーレイを表示できます
* @author Victor Sant
*
* @param Max Fogs
* @text フォグ最大数
* @type number
* @desc 同時フォグとオーバーレイ効果の最大数
* デフォルト: 5
* @default 5
*
* @help
* 翻訳:ムノクラ
* https://fungamemake.com/
* https://twitter.com/munokura/
*
* 元プラグイン:
* https://victorenginescripts.wordpress.com/rpg-maker-mv/fog-and-overlay/
*
*
* ===========================================================================
* 必要プラグイン
* ===========================================================================
*
* このプラグインを使用するには、下記のプラグインが必要です。
* - VE_BasicModule
*
*
* ===========================================================================
* メモタグ
* ===========================================================================
*
* ===========================================================================
* フォグ効果 (マップのメモタグ)
* ---------------------------------------------------------------------------
*
* settings
*
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* マップ上にフォグ効果を作成し、以下の値を情報に追加します。
* idとnameを指定する必要がありますが、その他の値は任意です。
* id: n : フォグID (数値)
* name: 's' : フォグの画像ファイル名 ('ファイル名'を引用符で囲む)
* opacity: n : フォグの不透明度 (0-255)
* zoom: n% : フォグの拡縮率 (100% = デフォルトサイズ)
* hue: n : フォグの色相 (0-360)
* blend: n : フォグの合成方法(0:通常、1:加算、2:減算)
* move x: n : フォグの水平移動(数値、負の値にすることができます)
* move y: n : フォグの垂直移動(数値、負の値にすることができます)
* pan x: n : フォグの水平パン(数値)
* pan y: n : フォグの垂直パン(数値)
* depth: n : フォグの深さ
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* 例:
*
* id: 1
* name: 'Sky'
* opacity: 160
* hue: 100
* move x: 3
* move y: 2
*
*
*
* id: 3
* name: '$Fog'
* opacity: 92
* zoom: 150%
* pan x: -5
* blend: 2
*
* ===========================================================================
*
* ===========================================================================
* プラグインコマンド
* ---------------------------------------------------------------------------
*
* ---------------------------------------------------------------------------
* FogEffect id name opacity hue blend depth
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* マップ上にフォグ効果を表示します。
* id : フォグID (数値)
* name : フォグの画像ファイル名 (ファイル名にスペースを含められません)
* opacity : フォグの不透明度 (0-255)
* hue : フォグの色相 (0-360)
* blend : フォグの合成方法(0:通常、1:加算、2:減算)
* depth : フォグの深さ (1-7、詳細は下記参照)
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* 例 : FogEffect 1 Sky 160 100 0 0
* FogEffect 2 $Fog 92 0 1 3
* ---------------------------------------------------------------------------
*
* ---------------------------------------------------------------------------
* FogOpacity id opacity duration
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* フォグ効果の不透明度を変更します。
* id : フォグID (数値)
* opacity : フォグの不透明度 (0-255)
* duration : 不透明度変化の速度。 (フレーム数、無指定は0)
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* 例 : FogOpacity 1 92 60
* FogOpacity 2 0 120
* ---------------------------------------------------------------------------
*
* ---------------------------------------------------------------------------
* FogMove id x y
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* フォグ効果に連続的な動きを加えます。
* id : フォグID (数値)
* x : フォグの水平移動(数値、負の値にすることができます)
* y : フォグの垂直移動(数値、負の値にすることができます)
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* 例 : FogMove 1 5 -5
* FogMove 2 0 4
* ---------------------------------------------------------------------------
*
* ---------------------------------------------------------------------------
* FogPan id x y
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* フォグ効果のパン動作を変更します。
* id : フォグ効果ID (数値)
* x : フォグ効果のパン水平移動(数値、負の値にすることができます)
* y : フォグ効果のパン垂直移動(数値、負の値にすることができます)
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* 例 : FogPan 1 4 4
* FogPan 2 0 -5
* ===========================================================================
*
* ===========================================================================
* 追加情報
* ---------------------------------------------------------------------------
*
* - フォグの深さ
* フォグの深さは、
* オーバーレイ効果の上/下に表示されるオブジェクトの種類を表します。
* 0から7までの8つの深さがあります。
*
* マップ中:
* 1: アニメーションの上
* 2:飛行船/上のキャラの上
* 3: 上のタイルの上
* 4: 通常キャラの上に
* 5: 下のキャラの上に
* 6:下のタイルセットの上
* 7: 視差の上
*
* 戦闘中:
* 0,1,2,3,4:バトラーの上
* 5:戦闘背景2の上
* 6:戦闘背景1の上
* 7: 背景の上(ブラー化マップ画像)
*
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*
* - 戦闘中のフォグ
* デフォルトではフォグはマップ上にのみ表示されます。
* フォグのファイル名に接頭辞を追加することで、
* 一部のフォグを戦闘中に表示させることができます。
* フォグのファイル名に'$'を追加すると、マップとバトルにフォグが表示されます。
* フォグのファイル名に'%'を追加すると、フォグは戦闘時にのみ表示されます。
* 例えば、'%Clouds'という名前のフォグは、戦闘でのみ表示されます。
*
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*
* - フォグの作成
* フォグ画像はimg/fogs/フォルダに配置する必要があります。
* この新しいフォルダを作成する必要があります。
* フォグは、マップメモ欄にメモタグを追加するか、
* プラグインコマンドを使用して作成できます。
* プラグインコマンドで作成したフォグは、マップを離れると消えます。
* プラグインコマンドを使用してメモタグで作成されたフォグを
* IDで制御することもできますが、変更はマップを離れるとリセットされます。
* 同じ深さにあるフォグは、IDに基づいてソートされます。
* 高いIDを持つフォグは低いIDを持つフォグの上に表示されます。
*
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*
* 固定オーバーレイ(マップの動きに沿った)を作成する場合、
* オーバーレイファイル名の先頭に'!'を追加します。
* 例えば、'Over'という名前のオーバーレイは、'!Over'と名前を変更します。
* この接頭辞は、戦闘や戦闘のみの接頭辞と組み合わせることができます。
*
* ===========================================================================
*
* ===========================================================================
* 互換性
* ---------------------------------------------------------------------------
* - このプラグインと一緒に使用する場合、
* 以下のプラグインは、このプラグインの下に配置する必要があります。
* VE - Tile Priority
* ===========================================================================
*
* ===========================================================================
* Version History:
* ---------------------------------------------------------------------------
* v 1.00 - 2015.12.07 > First release.
* v 1.01 - 2015.12.25 > Revised code for better performance.
* > Added more depth options.
* v 1.02 - 2016.01.06 > Fixed issue with fogs not clearing.
* v 1.03 - 2016.01.27 > Fixed issue with loading games with fogs on the map.
* v 1.04 - 2016.03.12 > Fixed issue with stack call and battle fogs.
* v 1.05 - 2016.03.23 > Compatibility with Basic Module 1.16.
* v 1.06 - 2016.06.04 > Fixed issue when calling new Fogs with Plugin
* Commands.
* v 1.07 - 2016.06.11 > Compatibility with Tile Priority.
* > Fixed issue with crash at battle start.
* ---------------------------------------------------------------------------
*/
(function () {
//=============================================================================
// Parameters
//=============================================================================
if (Imported['VE - Basic Module']) {
var parameters = VictorEngine.getPluginParameters();
VictorEngine.Parameters = VictorEngine.Parameters || {};
VictorEngine.Parameters.FogAndOverlay = {};
VictorEngine.Parameters.FogAndOverlay.MaxFogs = Number(parameters["Max Fogs"]) || 1;
};
//=============================================================================
// ImageManager
//=============================================================================
/* Overwritten fucntion */
Tilemap.prototype._compareChildOrder = function (a, b) {
if ((a.z || 0) !== (b.z || 0)) {
return (a.z || 0) - (b.z || 0);
} else if ((a.y || 0) !== (b.y || 0)) {
return (a.y || 0) - (b.y || 0);
} else {
return a.spriteId - b.spriteId;
}
};
//=============================================================================
// ImageManager
//=============================================================================
ImageManager.loadFog = function (filename, hue) {
return this.loadBitmap('img/fogs/', filename, hue, true);
};
ImageManager.isBattleOnlyFog = function (filename) {
var sign = filename.match(/^[\!\%]+/);
return sign && sign[0].contains('%');
};
ImageManager.isBattleFog = function (filename) {
var sign = filename.match(/^[\!\$]+/);
return sign && sign[0].contains('$');
};
ImageManager.isFixedFog = function (filename) {
var sign = filename.match(/^[\!\$\%]+/);
return sign && sign[0].contains('!');
};
//=============================================================================
// Game_Screen
//=============================================================================
VictorEngine.FogAndOverlay.clear = Game_Screen.prototype.clear;
Game_Screen.prototype.clear = function () {
VictorEngine.FogAndOverlay.clear.call(this);
this.clearFogs();
};
VictorEngine.FogAndOverlay.GameScreenUpdate = Game_Screen.prototype.update;
Game_Screen.prototype.update = function () {
VictorEngine.FogAndOverlay.GameScreenUpdate.call(this);
this.updateFogs();
};
Game_Screen.prototype.fog = function (fogId) {
return this._fogs[fogId];
};
Game_Screen.prototype.clearFogs = function () {
this._fogs = [];
};
Game_Screen.prototype.updateFogs = function () {
this._fogs.forEach(function (fog) {
if (fog) fog.update();
});
};
Game_Screen.prototype.showFog = function (fogId, name, opacity, hue, blend, depth) {
var fog = new Game_Fog();
fog.show(name, opacity, hue, blend, depth);
this._fogs[fogId] = fog;
};
Game_Screen.prototype.moveFog = function (fogId, x, y) {
var fog = this.fog(fogId);
if (fog) {
fog.move(x, y);
}
};
Game_Screen.prototype.panFog = function (fogId, x, y) {
var fog = this.fog(fogId);
if (fog) {
fog.pan(x, y);
}
};
Game_Screen.prototype.changeFogZoom = function (fogId, zoom, duration) {
var fog = this.fog(fogId);
if (fog) {
fog.changeZoom(zoom, duration);
}
};
Game_Screen.prototype.changeFogOpacity = function (fogId, opacity, duration) {
var fog = this.fog(fogId);
if (fog) {
fog.changeOpacity(opacity, duration);
}
};
Game_Screen.prototype.eraseFog = function (fogId) {
this._fogs[fogId] = null;
};
Game_Screen.prototype.mapFog = function () {
this._fogScene = 'map';
};
Game_Screen.prototype.battleFog = function () {
this._fogScene = 'battle';
};
Game_Screen.prototype.fogScene = function () {
return this._fogScene
};
//=============================================================================
// Game_Map
//=============================================================================
VictorEngine.FogAndOverlay.setup = Game_Map.prototype.setup;
Game_Map.prototype.setup = function (mapId) {
VictorEngine.FogAndOverlay.setup.call(this, mapId);
this.setupFogs();
};
VictorEngine.FogAndOverlay.setDisplayPos = Game_Map.prototype.setDisplayPos;
Game_Map.prototype.setDisplayPos = function (x, y) {
VictorEngine.FogAndOverlay.setDisplayPos.call(this, x, y);
this._fogX = this.isLoopHorizontal() ? x : this._displayX;
this._fogY = this.isLoopVertical() ? y : this._displayY;
};
VictorEngine.FogAndOverlay.scrollDown = Game_Map.prototype.scrollDown;
Game_Map.prototype.scrollDown = function (distance) {
var lastY = this._displayY;
VictorEngine.FogAndOverlay.scrollDown.call(this, distance);
this._fogY += this.isLoopVertical() ? distance : this._displayY - lastY;
};
VictorEngine.FogAndOverlay.scrollLeft = Game_Map.prototype.scrollLeft;
Game_Map.prototype.scrollLeft = function (distance) {
var lastX = this._displayX;
VictorEngine.FogAndOverlay.scrollLeft.call(this, distance);
this._fogX += this.isLoopHorizontal() ? -distance : this._displayX - lastX;
};
VictorEngine.FogAndOverlay.scrollRight = Game_Map.prototype.scrollRight;
Game_Map.prototype.scrollRight = function (distance) {
var lastX = this._displayX;
VictorEngine.FogAndOverlay.scrollRight.call(this, distance);
this._fogX += this.isLoopHorizontal() ? distance : this._displayX - lastX;
};
VictorEngine.FogAndOverlay.scrollUp = Game_Map.prototype.scrollUp;
Game_Map.prototype.scrollUp = function (distance) {
var lastY = this._displayY;
VictorEngine.FogAndOverlay.scrollUp.call(this, distance);
this._fogY += this.isLoopVertical() ? -distance : this._displayY - lastY;
};
Game_Map.prototype.fogX = function () {
return this._fogX;
};
Game_Map.prototype.fogY = function () {
return this._fogY;
};
Game_Map.prototype.setupFogs = function () {
$gameScreen.clearFogs();
var note = $dataMap.note;
this._fogX = 0
this._fogY = 0
this.createFog(note);
};
Game_Map.prototype.createFog = function (note) {
var regex = VictorEngine.getNotesValues('fog effect');
var match;
while (match = regex.exec(note)) {
this.setupFog(match[1]);
};
};
Game_Map.prototype.setupFog = function (note) {
var name = String(this.fogName(note, new RegExp("name:[ ]*('[^\']+'|\"[^\"]+\")", 'gi'), ''));
var id = Number(this.fogValue(note, new RegExp('id:[ ]*(\\d+)', 'gi'), 0));
var op = Number(this.fogValue(note, new RegExp('opacity:[ ]*(\\d+)', 'gi'), 192));
var zoom = Number(this.fogValue(note, new RegExp('zoom:[ ]*(\\d+)%?', 'gi'), 100));
var hue = Number(this.fogValue(note, new RegExp('hue:[ ]*(\\d+)', 'gi'), 0));
var blend = Number(this.fogValue(note, new RegExp('blend:[ ]*(\\d+)', 'gi'), 0));
var moveX = Number(this.fogValue(note, new RegExp('move x:[ ]*([+-]?\\d+)', 'gi'), 0));
var moveY = Number(this.fogValue(note, new RegExp('move y:[ ]*([+-]?\\d+)', 'gi'), 0));
var panX = Number(this.fogValue(note, new RegExp('pan x:[ ]*(\\d+)', 'gi'), 0));
var panY = Number(this.fogValue(note, new RegExp('pan y:[ ]*(\\d+)', 'gi'), 0));
var depth = Number(this.fogValue(note, new RegExp('depth:[ ]*(\\d+)', 'gi'), 1));
$gameScreen.showFog(id, name, op, hue, blend, depth);
$gameScreen.moveFog(id, moveX, moveY);
$gameScreen.panFog(id, panX, panY);
$gameScreen.changeFogZoom(id, zoom, 0);
};
Game_Map.prototype.fogValue = function (note, regex, value) {
var result = regex.exec(note);
return result ? result[1] : value;
};
Game_Map.prototype.fogName = function (note, regex, value) {
var result = regex.exec(note);
return result ? result[1].slice(1, -1) : value;
};
//=============================================================================
// Game_Interpreter
//=============================================================================
VictorEngine.FogAndOverlay.pluginCommand = Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function (command, args) {
VictorEngine.FogAndOverlay.pluginCommand.call(this, command, args);
if (command.toLowerCase() === 'fogeffect') {
var id = Number(args[0]);
var name = String(args[1]);
var op = Number(args[2]);
var hue = Number(args[3]) || 0;
var blend = Number(args[4]) || 0;
var depth = Number(args[5]) || 1;
$gameScreen.showFog(id, name, op, hue, blend, depth)
}
if (command.toLowerCase() === 'fogmove') {
var id = Number(args[0]);
var x = Number(args[1]);
var y = Number(args[2]);
$gameScreen.moveFog(id, x, y)
}
if (command.toLowerCase() === 'fogpan') {
var id = Number(args[0]);
var x = Number(args[1]);
var y = Number(args[2]);
$gameScreen.panFog(id, x, y)
}
if (command.toLowerCase() === 'fogopacity') {
var id = Number(args[0]);
var op = Number(args[1]);
var d = Number(args[2]) || 0;
$gameScreen.changeFogOpacity(id, op, d)
}
if (command.toLowerCase() === 'fogzoom') {
var id = Number(args[0]);
var z = Number(args[1]);
var d = Number(args[2]) || 0;
$gameScreen.changeFogZoom(id, z, d)
}
};
//=============================================================================
// Spriteset_Base
//=============================================================================
VictorEngine.FogAndOverlay.createLowerLayer = Spriteset_Base.prototype.createLowerLayer;
Spriteset_Base.prototype.createLowerLayer = function () {
VictorEngine.FogAndOverlay.createLowerLayer.call(this);
this._fogEffects = [];
};
VictorEngine.FogAndOverlay.SpritesetBaseUpdate = Spriteset_Base.prototype.update;
Spriteset_Base.prototype.update = function () {
VictorEngine.FogAndOverlay.SpritesetBaseUpdate.call(this);
for (var i = 1; i < VictorEngine.Parameters.FogAndOverlay.MaxFogs; i++) {
this.updateFogs(i);
};
};
Spriteset_Base.prototype.updateFogs = function (fogId) {
if (!this._fogEffects[fogId] && this.validFog(fogId)) {
this.createFog(fogId);
this.updateFog(fogId);
} else if (this._fogEffects[fogId] && !this.validFog(fogId)) {
this.deleteFog(fogId);
} else if (this._fogEffects[fogId] && this.validFog(fogId)) {
this.updateFog(fogId);
}
};
Spriteset_Base.prototype.updateFog = function (fogId) {
var sprite = this._fogEffects[fogId];
var fog = $gameScreen.fog(fogId);
if (sprite.fogName !== fog.name || sprite.fogHue !== fog.hue ||
sprite.blendMode !== fog.blend || sprite.z !== fog.z) {
this.deleteFog(fogId)
this.createFog(fogId)
}
sprite.origin.x = Math.floor(fog.x);
sprite.origin.y = Math.floor(fog.y);
sprite.scale.x = fog.zoom;
sprite.scale.y = fog.zoom;
sprite.opacity = fog.opacity;
};
Spriteset_Base.prototype.setFogSpriteBitmap = function (sprite, bitmap) {
sprite.bitmap = bitmap;
};
//=============================================================================
// Spriteset_Map
//=============================================================================
Spriteset_Map.prototype.createFog = function (fogId) {
var sprite = new TilingSprite();
var fog = $gameScreen.fog(fogId);
var bitmap = ImageManager.loadFog(fog.name, fog.hue);
sprite.spriteId = sprite.spriteId || Sprite._counter++;
sprite.bitmap = new Bitmap();
sprite.fogName = fog.name;
sprite.fogHue = fog.hue;
sprite.blendMode = fog.blend;
sprite.z = fog.z;
sprite.move(0, 0, Graphics.width, Graphics.height);
bitmap.addLoadListener(this.setFogSpriteBitmap.bind(this, sprite, bitmap));
this._fogEffects[fogId] = sprite;
if (fog.blend === 2 && fog.z > 3) {
this.addChild(this._fogEffects[fogId]);
} else {
this._tilemap.addChild(this._fogEffects[fogId]);
}
};
Spriteset_Map.prototype.deleteFog = function (fogId) {
this._tilemap.removeChild(this._fogEffects[fogId]);
this.removeChild(this._fogEffects[fogId]);
this._fogEffects[fogId] = null;
};
Spriteset_Map.prototype.validFog = function (fogId) {
var fog = $gameScreen.fog(fogId);
if (!fog || fog.isBattleOnlyFog()) {
return false;
}
return true;
};
//=============================================================================
// Spriteset_Battle
//=============================================================================
VictorEngine.FogAndOverlay.createBattleback = Spriteset_Battle.prototype.createBattleback;
Spriteset_Battle.prototype.createBattleback = function () {
VictorEngine.FogAndOverlay.createBattleback.call(this)
this._back1Sprite.z = 0
this._back2Sprite.z = 1
};
VictorEngine.FogAndOverlay.updateSpritesetBattle = Spriteset_Battle.prototype.update;
Spriteset_Battle.prototype.update = function () {
VictorEngine.FogAndOverlay.updateSpritesetBattle.call(this);
this.sortBattleSprites();
};
Spriteset_Battle.prototype.createFog = function (fogId) {
var sprite = new TilingSprite();
var fog = $gameScreen.fog(fogId);
var bitmap = ImageManager.loadFog(fog.name, fog.hue);
sprite.spriteId = sprite.spriteId || Sprite._counter++;
sprite.bitmap = new Bitmap();
sprite.bitmap = ImageManager.loadFog(fog.name, fog.hue);
sprite.fogName = fog.name;
sprite.fogHue = fog.hue;
sprite.blendMode = fog.blend;
sprite.z = fog.z;
sprite.move(0, 0, Graphics.width, Graphics.height);
bitmap.addLoadListener(this.setFogSpriteBitmap.bind(this, sprite, bitmap));
this._fogEffects[fogId] = sprite;
if (fog.blend === 2 && fog.z > 3) {
this.addChild(this._fogEffects[fogId]);
} else {
this._battleField.addChild(this._fogEffects[fogId]);
}
};
Spriteset_Battle.prototype.deleteFog = function (fogId) {
this._battleField.removeChild(this._fogEffects[fogId]);
this.removeChild(this._fogEffects[fogId]);
this._fogEffects[fogId] = null;
};
Spriteset_Battle.prototype.validFog = function (fogId) {
var fog = $gameScreen.fog(fogId);
if (!fog || !fog.isBattleFog()) {
return false;
}
return true;
};
})();
//=============================================================================
// Game_Fog
//=============================================================================
function Game_Fog() {
this.initialize.apply(this, arguments);
}
Game_Fog.prototype.constructor = Game_Fog;
(function () {
Object.defineProperties(Game_Fog.prototype, {
x: {
get: function () {
return this._x;
},
configurable: true
},
y: {
get: function () {
return this._y;
},
configurable: true
},
hue: {
get: function () {
return this._hue;
},
configurable: true
},
name: {
get: function () {
return this._name;
},
configurable: true
},
zoom: {
get: function () {
return this._zoom;
},
configurable: true
},
blend: {
get: function () {
return this._blend;
},
configurable: true
},
opacity: {
get: function () {
return this._opacity;
},
configurable: true
},
z: {
get: function () {
var values = [9, 9, 6, 4, 3.5, 2, 1, -1];
return values[this._depth] || 9;
},
configurable: true
}
});
Game_Fog.prototype.initialize = function () {
this.initBasic();
};
Game_Fog.prototype.isBattleFog = function () {
return this._battleFog || this._battleOnly;
};
Game_Fog.prototype.isBattleOnlyFog = function () {
return this._battleOnly;
};
Game_Fog.prototype.initBasic = function () {
this.erase();
this._x = 0;
this._y = 0;
this._sX = 0;
this._sY = 0;
this._zoomTarget = 192;
this._zoomDuration = 0;
this._opacityTarget = 192;
this._opacityDuration = 0;
};
Game_Fog.prototype.show = function (name, opacity, hue, blend, depth) {
this._name = name;
this._hue = hue;
this._blend = blend;
this._depth = depth;
this._opacity = opacity;
this._fixed = ImageManager.isFixedFog(name);
this._battleFog = ImageManager.isBattleFog(name);
this._battleOnly = ImageManager.isBattleOnlyFog(name);
this.update();
};
Game_Fog.prototype.erase = function () {
this._name = '';
this._hue = 0;
this._blend = 0;
this._moveX = 0;
this._moveY = 0;
this._depth = 1;
this._panX = 1;
this._panY = 1;
this._zoom = 1;
this._fixed = false;
this._opacity = 192;
this._battleFog = false;
this._battleOnly = false;
};
Game_Fog.prototype.update = function () {
this.updateMove();
this.updateZoom();
this.updateOpacity();
};
Game_Fog.prototype.pan = function (x, y) {
this._panX = Math.max((10 + x) / 10, 1);
this._panY = Math.max((10 + y) / 10, 1);
};
Game_Fog.prototype.move = function (x, y) {
this._moveX = x;
this._moveY = y;
};
Game_Fog.prototype.changeOpacity = function (opacity, duration) {
this._opacityTarget = opacity;
this._opacityDuration = duration;
if (duration === 0) this._opacity = this._opacityTarget;
};
Game_Fog.prototype.changeZoom = function (zoom, duration) {
this._zoomTarget = zoom / 100;
this._zoomDuration = duration;
if (duration === 0) {
this._zoom = this._zoomTarget;
}
};
Game_Fog.prototype.updateMove = function () {
this._sX += this._moveX / $gameMap.tileWidth() / 2;
this._sY += this._moveY / $gameMap.tileHeight() / 2;
var mapX = $gameMap.fogX();
var mapY = $gameMap.fogY();
var tileW = $gameMap.tileWidth();
var tileH = $gameMap.tileHeight();
if (this._fixed) {
this._x = (mapX + this._sX) * tileW;
this._y = (mapY + this._sY) * tileH;
} else {
this._x = (mapX * this._panX + this._sX) * tileW / 2;
this._y = (mapY * this._panY + this._sY) * tileH / 2;
}
};
Game_Fog.prototype.updateOpacity = function () {
if (this._opacityDuration > 0) {
var d = this._opacityDuration;
this._opacity = (this._opacity * (d - 1) + this._opacityTarget) / d;
this._opacityDuration--;
}
};
Game_Fog.prototype.updateZoom = function () {
if (this._zoomDuration > 0) {
var d = this._zoomDuration;
this._zoom = (this._zoom * (d - 1) + this._zoomTarget) / d;
this._zoomDuration--;
}
};
})();