//============================================================================= // TMPlugin - バトルミスト // バージョン: 2.1.0 // 最終更新日: 2018/11/28 // 配布元 : https://hikimoki.sakura.ne.jp/ //----------------------------------------------------------------------------- // Copyright (c) 2016 tomoaky // Released under the MIT license. // http://opensource.org/licenses/mit-license.php //============================================================================= /*: @plugindesc Displays fog-like effects in battle scenes. @author tomoaky @url https://github.com/munokura/tomoaky-MV-plugins @license MIT License @help English Help Translator: munokura This is an unofficial English translation of the plugin help, created to support global RPG Maker users. Feedback is welcome to improve translation quality (see: https://github.com/munokura/tomoaky-MV-plugins ). Original plugin by tomoaky. ----- TMPlugin - Battle Mist ver. 2.1.0 How to Use: Save the fog image distributed with the plugin in the img/system folder. The file name is mist.png. If you need to change the file name, please also change the mistImage plugin parameter. https://github.com/munokura/tomoaky-MV-plugins/tree/master/img/system The image is set to the game's 816*624 resolution, so changing the resolution may cause distortion. Adjust the plugin parameter value to suit your needs. This plugin has been tested with RPG Maker MV Version 1.6.1. This plugin is distributed under the MIT License and is free to use commercially, modify, and redistribute. Plugin Commands: stopMist Disables Battle Mist. This setting is also saved in your save data, and the fog will not be displayed until the startMist command is executed. startMist Enables Battle Mist if it is disabled. onMistMirror Inverts the direction of fog movement. This function is only available in side view. This setting is stored in save data and remains inverted until the offMistMirror command is executed. offMistMirror Removes the inversion of fog movement direction. This function is only available in side view. setFrontMist Allows fog to flow in the same direction as in front view, even when Battle is in side view. setSideMist Allows fog to flow in the same direction as in side view, even when Battle is in front view. @param mistImage @desc Image file name to use as fog. Default: mist @default mist @type file @require 1 @dir img/system/ @param mistNumber @desc Number of fog sprites to display. Default: 32 @default 32 @param mistTopSide @desc The top coordinate of the range where fog is displayed in side view. Default: 200 @default 200 @param mistRangeSide @desc Range of the Y direction to display fog in side view. Default: 300 @default 300 @param mistTopFront @desc The top coordinate of the area where fog is displayed in the front view. Default: 240 @default 240 @param mistRangeFront @desc Range in Y direction to display fog in front view. Default: 340 @default 340 @param mistScale @desc Magnification rate of fog sprite. Default: 1 @default 1 @param mistOpacityMax @desc Maximum opacity of fog sprites. Default: 224 @default 224 */ /*:ja @plugindesc 戦闘シーンにそれっぽい霧を表示します。 @author tomoaky @url https://github.com/munokura/tomoaky-MV-plugins @license MIT License @help TMPlugin - バトルミスト ver2.1.0 使い方: プラグインと一緒に配布している霧の画像を img/system フォルダに 保存してください。ファイル名は mist.png となっています。 ファイル名を変更しなければならない場合はプラグインパラメータの mistImage も一緒に変更してください。 https://github.com/munokura/tomoaky-MV-plugins/tree/master/img/system ゲーム画面の解像度 816*624 に合わせてあるため、解像度を変更すると 表示が乱れる場合があります。 プラグインパラメータの値をいじって調整してください。 このプラグインは RPGツクールMV Version 1.6.1 で動作確認をしています。 このプラグインはMITライセンスのもとに配布しています、商用利用、 改造、再配布など、自由にお使いいただけます。 プラグインコマンド: stopMist バトルミストを無効にします。この設定はセーブデータにも記録され、 startMist コマンドが実行されるまで霧が表示されなくなります。 startMist 無効になっているバトルミストを有効にします。 onMistMirror 霧の移動方向を反転します。サイドビュー限定の機能です。この設定は セーブデータにも記録され、offMistMirror コマンドが実行されるまで 反転したままとなります。 offMistMirror 霧の移動方向反転を解除します。サイドビュー限定の機能です。 setFrontMist 戦闘がサイドビューであっても霧をフロントビューと同じ流れにします。 setSideMist 戦闘がフロントビューであっても霧をサイドビューと同じ流れにします。 @param mistImage @desc 霧として利用する画像ファイル名。 初期値: mist @default mist @type file @require 1 @dir img/system/ @param mistNumber @desc 表示する霧スプライトの数です。 初期値: 32 @default 32 @param mistTopSide @desc サイドビューで霧を表示する範囲の上端の座標。 初期値: 200 @default 200 @param mistRangeSide @desc サイドビューで霧を表示するY方向の範囲。 初期値: 300 @default 300 @param mistTopFront @desc フロントビューで霧を表示する範囲の上端の座標。 初期値: 240 @default 240 @param mistRangeFront @desc フロントビューで霧を表示するY方向の範囲。 初期値: 340 @default 340 @param mistScale @desc 霧スプライトの拡大率。 初期値: 1 @default 1 @param mistOpacityMax @desc 霧スプライトの最大不透明度。 初期値: 224 @default 224 */ var Imported = Imported || {}; Imported.TMBattleMist = true; var TMPlugin = TMPlugin || {}; TMPlugin.BattleMist = {}; TMPlugin.BattleMist.Parameters = PluginManager.parameters('TMBattleMist'); TMPlugin.BattleMist.MistImage = TMPlugin.BattleMist.Parameters['mistImage'] || 'mist'; TMPlugin.BattleMist.MaxMists = +(TMPlugin.BattleMist.Parameters['mistNumber'] || 32); TMPlugin.BattleMist.TopSide = +(TMPlugin.BattleMist.Parameters['mistTopSide'] || 200); TMPlugin.BattleMist.RangeSide = +(TMPlugin.BattleMist.Parameters['mistRangeSide'] || 300); TMPlugin.BattleMist.TopFront = +(TMPlugin.BattleMist.Parameters['mistTopFront'] || 240); TMPlugin.BattleMist.RangeFront = +(TMPlugin.BattleMist.Parameters['mistRangeFront'] || 340); TMPlugin.BattleMist.Scale = +(TMPlugin.BattleMist.Parameters['mistScale'] || 1); TMPlugin.BattleMist.OpacityMax = +(TMPlugin.BattleMist.Parameters['mistOpacityMax'] || 224); (function() { //----------------------------------------------------------------------------- // Game_System // Game_System.prototype.isMistEnabled = function() { if (this._mistEnabled === undefined) this._mistEnabled = true; return this._mistEnabled; }; Game_System.prototype.disableMist = function() { this._mistEnabled = false; }; Game_System.prototype.enableMist = function() { this._mistEnabled = true; }; Game_System.prototype.mistMirror = function() { return this._mistMirror; }; Game_System.prototype.setMistMirror = function(mirror) { this._mistMirror = mirror; }; Game_System.prototype.isSideMist = function() { if (!this._mistDirection) { return this.isSideView(); } return this._mistDirection === 6; }; Game_System.prototype.setMistDirection = function(direction) { this._mistDirection = direction; }; //----------------------------------------------------------------------------- // Game_Interpreter // var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand; Game_Interpreter.prototype.pluginCommand = function(command, args) { _Game_Interpreter_pluginCommand.call(this, command, args); if (command === 'startMist') { $gameSystem.enableMist(); } else if (command === 'stopMist') { $gameSystem.disableMist(); } else if (command === 'onMistMirror') { $gameSystem.setMistMirror(true); } else if (command === 'offMistMirror') { $gameSystem.setMistMirror(false); } else if (command === 'setFrontMist') { $gameSystem.setMistDirection(2); } else if (command === 'setSideMist') { $gameSystem.setMistDirection(6); } }; //----------------------------------------------------------------------------- // Sprite_BattleMist // function Sprite_BattleMist() { this.initialize.apply(this, arguments); } Sprite_BattleMist.prototype = Object.create(Sprite.prototype); Sprite_BattleMist.prototype.constructor = Sprite_BattleMist; Sprite_BattleMist.prototype.initialize = function() { Sprite.prototype.initialize.call(this); this.loadBitmap(); this.blendMode = 1; this.z = 5; this.anchor.x = 0.5; this.anchor.y = 1; }; Sprite_BattleMist.prototype.loadBitmap = function() { this.bitmap = ImageManager.loadSystem(TMPlugin.BattleMist.MistImage); }; Sprite_BattleMist.prototype.setRandomPosition = function() { if ($gameSystem.isSideMist()) { this.resetSideView(); var w = this.width * this.scale.x; this.x = Math.random() * (Graphics.width + w) - w / 2 - this.parent.x; } else { this.resetFrontView(); this.y = Math.random() * TMPlugin.BattleMist.RangeFront + TMPlugin.BattleMist.TopFront; } this.update(); }; Sprite_BattleMist.prototype.resetSideView = function() { var r = Math.random(); this._count = Math.floor(Math.random() * 180); this.y = r * TMPlugin.BattleMist.RangeSide + TMPlugin.BattleMist.TopSide; r = (r + 0.5) * TMPlugin.BattleMist.Scale; this.scale.set(r, r); this._vx = this.scale.x * 2 - 0.5; if ($gameSystem.mistMirror()) { this.x = Graphics.width + this.width / 2 * this.scale.x; this._vx = 0 - this._vx; } else { this.x = -this.width / 2 * this.scale.x; } this.x -= this.parent.x; }; Sprite_BattleMist.prototype.resetFrontView = function() { var r = Math.random(); this.x = r * Graphics.width; this.y = TMPlugin.BattleMist.TopFront; this._vx = (this.x - Graphics.width / 2) * 0.01; this.x -= this.parent.x; }; Sprite_BattleMist.prototype.update = function() { Sprite.prototype.update.call(this); if ($gameSystem.isSideMist()) { this.updateSideView(); } else { this.updateFrontView(); } }; Sprite_BattleMist.prototype.updateSideView = function() { this.x += this._vx; this._count++; if (this._count >= 180) { this._count = 0; } this.opacity = TMPlugin.BattleMist.OpacityMax - 16 + Math.sin(this._count * Math.PI / 90) * 16; if ($gameSystem.mistMirror()) { if (this.x + this.width / 2 * this.scale.x < 0 - this.parent.x) { this.resetSideView(); } } else { if (this.x - this.width / 2 * this.scale.x > Graphics.width - this.parent.x) { this.resetSideView(); } } }; Sprite_BattleMist.prototype.updateFrontView = function() { this.x += this._vx; this.y += TMPlugin.BattleMist.Scale; var w = this.width / 2; if (this.y > TMPlugin.BattleMist.RangeFront + TMPlugin.BattleMist.TopFront || this.x < 0 - w - this.parent.x || this.x > Graphics.width + w - this.parent.x) { this.resetFrontView(); } this.updateScaleFront(); this.updateOpacityFront(); }; Sprite_BattleMist.prototype.updateScaleFront = function() { var r = (0.5 + (this.y - TMPlugin.BattleMist.TopFront) / TMPlugin.BattleMist.RangeFront) * TMPlugin.BattleMist.Scale; this.scale.set(r, r); }; Sprite_BattleMist.prototype.updateOpacityFront = function() { var borderY = TMPlugin.BattleMist.TopFront + TMPlugin.BattleMist.RangeFront * 0.8; if (this.y > borderY) { this.opacity = (1 - (this.y - borderY) / (TMPlugin.BattleMist.RangeFront * 0.2)) * TMPlugin.BattleMist.OpacityMax; } else { this.opacity = Math.min((this.y - TMPlugin.BattleMist.TopFront) / TMPlugin.BattleMist.Scale * 8, TMPlugin.BattleMist.OpacityMax); } }; //----------------------------------------------------------------------------- // Spriteset_Battle // var _Spriteset_Battle_createLowerLayer = Spriteset_Battle.prototype.createLowerLayer; Spriteset_Battle.prototype.createLowerLayer = function() { _Spriteset_Battle_createLowerLayer.call(this); this.createMists(); this._back1Sprite.z = 0; this._back2Sprite.z = 1; for (var i = 0; i < this._enemySprites.length; i++) { this._enemySprites[i].z = 5; } this.updateActors(); for (var j = 0; j < this._actorSprites.length; j++) { this._actorSprites[j].z = 5; } }; Spriteset_Battle.prototype.createMists = function() { this._mistSprites = []; if ($gameSystem.isMistEnabled()) { for (var i = 0; i < TMPlugin.BattleMist.MaxMists; i++) { this._mistSprites[i] = new Sprite_BattleMist(); this._battleField.addChild(this._mistSprites[i]); this._mistSprites[i].setRandomPosition(); } } }; var _Spriteset_Battle_update = Spriteset_Battle.prototype.update; Spriteset_Battle.prototype.update = function() { _Spriteset_Battle_update.call(this); this._sortBattleField(); }; Spriteset_Battle.prototype._sortBattleField = function() { this._battleField.children.sort(function(a, b) { a.z = a.z != null ? a.z : 10; b.z = b.z != null ? b.z : 10; if (a.z !== b.z) { return a.z - b.z; } else if (a.y !== b.y) { return a.y - b.y; } else { return a.spriteId - b.spriteId; } }); }; })();