
//=============================================================================
// MOG_BattlerMotion.js
//=============================================================================

/*:
 * @target MZ
 * @plugindesc (v1.0) Adiciona efeitos animados nos battlers.
 * @author Moghunter
 * @url https://mogplugins.wordpress.com
 *
 * @param Default Damage Motion
 * @desc Definição da animação ao receber dano.
 * @default 0
 * @type select
 * @option Shake
 * @value 0
 * @option Zoom
 * @value 1
 * @option Knockback (Left)
 * @value 2 
 * @option Knockback (Right)
 * @value 3
 *
 * @param Damage Motion Actor
 * @desc Ativar o efeito tremer no aliado.
 * @default true
 * @type boolean 
 *
 * @param Damage Motion Enemy
 * @desc Ativar o efeito tremer no aliado.
 * @default true
 * @type boolean
 *
 * @param Disable Blink Damage
 * @desc Desativar o efeito de piscar o battler no dano.
 * @default true
 * @type boolean
 *
 * @param Actor Action Motion
 * @desc Ativar o Motion de ação para no grupo.
 * @default false
 * @type boolean
 *
 * @param Enemy Action Motion
 * @desc Ativar o Motion de ação para nos inimigos.
 * @default true
 * @type boolean
 *
 * @param Shadow (Float Motion)
 * @desc Ativar a sombra no movimento de levitar.
 * @default true
 * @type boolean
 *
 * @param Shadow Opacity
 * @desc Definição da transparência da sombra.
 * @default 170
 * @type boolean
 *
 * @param Shadow Zoom Effect
 * @desc Ativar o efeito de zoom na sombra.
 * @default true
 * @type boolean
 *
 * @param Battleback Ground Height
 * @desc O valor define o limite Y-axis da sombra baseado no battleback.
 * @default 200
 * @type number
 *
 * @help  
 * =============================================================================
 * =============================================================================
 * ♦♦♦ MOG - Battler Motion ♦♦♦
 * Author   -   Moghunter
 * Version  -   1.0
 * Updated  -   2021/04/17
 * https://mogplugins.wordpress.com
 * =============================================================================
 * Adiciona efeitos animados nos battlers.
 *
 * =============================================================================
 * - IDLE MOTION -      (Enemy Notetags)
 * =============================================================================
 * Para ativar os esfeitos de animações em posição de espera use as Tags abaixo
 * na caixa de notas dos battlers.
 *
 * breath motion : X
 * 
 *      0 -  Vertical Zoom
 *      1 -  Vertical & Horizontal Zoom
 *      2 -  Vertical & Horizontal Zoom (Strong/Slime Mode)
 *      3 -  Horizontal Zoom (Strong)
 *      4 -  Diagonal Breath (Right)
 *      5 -  Diagonal Breath (Left)
 *
 * float motion : X
 * 
 *      0 - Vertical
 *      1 - Vertical Right 
 *      2 - Vertical Left
 *      3 - Vertical Right & Left
 *
 * swing motion : X
 *   
 *      0 - Swing Left & Right
 *      1 - Rotation 360
 * 
 * damage motion : X
 *
 *      0 - Shake
 *      1 - Slime Mode
 *      2 - Move Left
 *      3 - Move Right
 *
 * =============================================================================
 * - X & Y Offset -      (Enemy Notetags)
 * =============================================================================
 * Use as tags abaixo para forçar a posição dos battlers.
 *
 * X Offset : X
 * Y Offset : Y
 *
 * =============================================================================
 * - ACTION MOTION -      (Skill Notetags)  
 * =============================================================================
 * Para ativar os esfeitos de animações de ação use as Tags abaixo na caixa
 * de notas das habilidades.
 *
 * Action Motion : X
 *
 *      0 - Zoom
 *      1 - Round Attack Right
 *      2 - Round Attack Left
 *      3 - Jump Attack
 *      4 - Jump Attack (Rotation)
 *      5 - Jump Slime
 *      6 - Rotation Attack
 *      7 - Move Down
 *      8 - Wave Attack
 *      9 - Shake
 *     10 - Swing Right
 *     11 - Swing Right (Double)
 *     12 - Move Right              
 *     13 - Charged Attack Right
 *
 */

//=============================================================================
// ** PLUGIN PARAMETERS
//=============================================================================
　　var Imported = Imported || {};
　　Imported.MOG_BattlerMotion = true;
　　var Moghunter = Moghunter || {}; 

    Moghunter.parameters = PluginManager.parameters('MOG_BattlerMotion');
    Moghunter.b_motion_shake_effect_actor = String(Moghunter.parameters['Damage Motion Actor'] || "true");
    Moghunter.b_motion_shake_effect_enemy = String(Moghunter.parameters['Damage Motion Enemy'] || "true");
    Moghunter.b_motion_disable_blink_damage = String(Moghunter.parameters['Disable Blink Damage'] || "true");
    Moghunter.b_motion_shadow = String(Moghunter.parameters['Shadow (Float Motion)'] || "true");
	Moghunter.b_motion_shadowOpacity = Number(Moghunter.parameters['Shadow Opacity'] || 170);
	Moghunter.b_motion_shadowZoom = String(Moghunter.parameters['Shadow Zoom Effect'] || "true");
	Moghunter.b_motion_defaultDamage = Number(Moghunter.parameters['Default Damage Motion'] || 0);
	Moghunter.b_motion_actorAction = String(Moghunter.parameters['Actor Action Motion'] || "false");
	Moghunter.b_motion_enemyAction = String(Moghunter.parameters['Enemy Action Motion'] || "true");
	Moghunter.b_motion_groundHeight = Number(Moghunter.parameters['Battleback Ground Height'] || 200);


//=============================================================================
// ■■■ Game System ■■■
//=============================================================================

//==============================
// ♦ ALIAS ♦  Initialize
//==============================
var _mog_bmotion_sys_initialize = Game_System.prototype.initialize
Game_System.prototype.initialize = function() {
	_mog_bmotion_sys_initialize.call(this);
	this._bmotion = [false,false,false,false];
    if (String(Moghunter.b_motion_shake_effect_actor) == "true") {this._bmotion[0] = true};
	if (String(Moghunter.b_motion_shake_effect_enemy) == "true") {this._bmotion[1] = true};
	if (String(Moghunter.b_motion_actorAction) == "true") {this._bmotion[2] = true};
	if (String(Moghunter.b_motion_enemyAction) == "true") {this._bmotion[3] = true};
};

//=============================================================================
// ■■■ Game Action ■■■
//=============================================================================

//==============================
// ♦ ALIAS ♦  Prepare
//==============================
var _mog_bmotion_gaction_prepare = Game_Action.prototype.prepare
Game_Action.prototype.prepare = function() {	
	_mog_bmotion_gaction_prepare.call(this);
	if (this.canBmotionAction(this._item)){
		this.subject().prepareBmotionAction(this._item,0)
	    this.subject().	clearBwalk();
    };
};

//==============================
// * can Bmotion Action
//==============================
Game_Action.prototype.canBmotionAction = function(item) {
   if (this.subject().isActor() && !$gameSystem._bmotion[2]) {return false};
   if (this.subject().isEnemy() && !$gameSystem._bmotion[3]) {return false};
   return true;
};	

//==============================
// * need Set Bmotion Damage
//==============================
Game_Action.prototype.needSetBmotionDamage = function(target,oldhp) {
	if (target._bmotion.damage.mode == -1) {return false};
	if (target.hp >= oldhp) {return false};
	if (target.isActor() && !$gameSystem._bmotion[0]) {return false};
	if (target.isEnemy() && !$gameSystem._bmotion[1]) {return false};
	return true;
};

//==============================
// ♦ ALIAS ♦  Apply
//==============================
var _mog_bMotion_apply = Game_Action.prototype.apply
Game_Action.prototype.apply = function(target) {
	var oldHP = target.hp;
	_mog_bMotion_apply.call(this,target);
    if ($dataSystem.optSideView) {target.clearBwalk()};
	if (this.needSetBmotionDamage(target,oldHP)) {target.setBmotionDamageApply(target)}
};

//=============================================================================
// ■■■ Game Battler ■■■
//=============================================================================

//==============================
// ♦ ALIAS ♦  iniMembers
//==============================
var _mog_bmotion_gbattler_initMembers = Game_Battler.prototype.initMembers;
Game_Battler.prototype.initMembers = function() {
	_mog_bmotion_gbattler_initMembers.call(this);
	this.setMotionData();	
};

//==============================
// * Notetags
//==============================
Game_Battler.prototype.notetags = function() {
	if (this.isEnemy()) {return this.enemy().note.split(/[\r\n]+/)};
	if (this.isActor()) {return this.actor().note.split(/[\r\n]+/)};
};

//==============================
// ** Set Motion Data
//==============================
Game_Battler.prototype.setMotionData = function() {
	this._bmotion = {};	
	this._bmotion.action = {};	
	this.clearBaction();
	this._bmotion.idle = {};
	this._bmotion.idle.mode = -1;
	this._bmotion.idle.wait = false;
	this._bmotion.idle.walk = {};
	this._bmotion.idle.walk.enable = false;	
	this._bmotion.idle.walk.start = true;
	this._bmotion.idle.walk.rangeReal = 40;
	this._bmotion.x_Offset = 0;
	this._bmotion.y_Offset = 0;
	this._bmotion.breathEffect = {};
	this._bmotion.breathEffect.phase = 0;
	this._bmotion.breathEffect.duration;
	this._bmotion.breathEffect.rangeMax = 0.00100;
	this._bmotion.breathEffect.range = 0;
	this._bmotion.breathEffect.speed = 0;
	this._bmotion.breathEffect.scale = 0;	
	this._bmotion.idle.float = {};
	this._bmotion.idle.float.mode = 0;
	this._bmotion.idle.float.enable = false;
	this._bmotion.idle.float.shadow = Moghunter.b_motion_shadow == "true" ? true : false;	
	this._bmotion.idle.float.range = 1.00;	
	this._bmotion.idle.float.speed = 0.02;
	this._bmotion.idle.float.animation = [0,0,0,0,0,0,0,0,0,0,0];
	this._bmotion.idle.float.x = 0;
	this._bmotion.idle.float.y = 0;
	this._bmotion.idle.float.groundH = Moghunter.b_motion_groundHeight;
	if (Imported.MOG_BattleCameraFrontal) {
		this._bmotion.idle.float.groundH -= Moghunter.b_motion_groundHeight * 50 / 100
	};
	this._bmotion.idle.swing = {};
	this._bmotion.idle.swing.mode = 0;
	this._bmotion.idle.swing.enable = false;
	this._bmotion.idle.swing.range = 0.30;
	this._bmotion.idle.swing.rotation = 0;
	this._bmotion.idle.swing.speed = 0.005;
	this._bmotion.idle.swing.animation = [0,0,0,0,0,0,0,0,0,0,0];
	this._bmotion.idle.swing.y = 0;
	this.clearBidle();
	this._bmotion.damage = {};
	this._bmotion.damage.mode = Math.min(Math.max(Moghunter.b_motion_defaultDamage,0),3);
	this._bmotion.damage.wait = false;
	this.clearBdamage();
};

//==============================
// ** clear Baction
//==============================
Game_Battler.prototype.clearBaction = function() {
	this._bmotion.action.mode = -1;	
	this._bmotion.action.initial = true;
	this._bmotion.action.wait = false;
	this._bmotion.action.x = 0;
	this._bmotion.action.y = 0;
	this._bmotion.action.y2 = 0;
	this._bmotion.action.orgX = 0;
	this._bmotion.action.orgY = 0;	
	this._bmotion.action.scaleX = 0;
	this._bmotion.action.scaleY = 0;
	this._bmotion.action.rotation = 0;
	this._bmotion.action.animation = [0,0,0,0,0,0];
	if (this._batPoses && this._batPoses[2] > 0) {this._batPoses[2] = 1};
};	

//==============================
// ** clear idle
//==============================
Game_Battler.prototype.clearBidle = function() {
    this._bmotion.idle.wait = false;
	this._bmotion.idle.x = 0;
	this._bmotion.idle.y = 0;
	this._bmotion.idle.orgX = 0;
	this._bmotion.idle.orgY = 0;
	this._bmotion.idle.walk.x = 0
	this._bmotion.idle.walk.y = 0
	this._bmotion.idle.walk.wait = 0;
	this._bmotion.idle.walk.scaleX = 0;
	this._bmotion.idle.walk.phase = 0;
	this._bmotion.idle.walk.duration = 0;
	this._bmotion.idle.walk.frequence = 20;
	this._bmotion.idle.walk.sX = 0;
	this._bmotion.idle.walk.sY = 0;	
	this._bmotion.idle.walk.speed = 0.007;
	this._bmotion.idle.walk.skip = 0;
	this._bmotion.idle.walk.skipN = false;
	this.clearBidleWalk();
	this._bmotion.idle.scaleX = 0;
	this._bmotion.idle.scaleY = 0;
	this._bmotion.idle.rotation = 0;
	this._bmotion.idle.animation = [0,0,0,0,0,0,0,0,0,0,0];
};	

//==============================
// ** clear Bidle Walk
//==============================
Game_Battler.prototype.clearBidleWalk = function() {
	this._bmotion.idle.walk.rangeRealM = this._bmotion.idle.walk.rangeReal * 70 / 100;
	this._bmotion.idle.walk.rangeX1 = -this._bmotion.idle.walk.rangeReal;
	this._bmotion.idle.walk.rangeX2 = this._bmotion.idle.walk.rangeReal;
	this._bmotion.idle.walk.rangeX3 = Graphics.boxWidth;
	this._bmotion.idle.walk.rangeY1 = -this._bmotion.idle.walk.rangeReal;
	this._bmotion.idle.walk.rangeY2 = this._bmotion.idle.walk.rangeReal;
	this._bmotion.idle.walk.rangeY3 = Graphics.boxHeight - 160;
};

//==============================
// ** clear B walk
//==============================
Game_Battler.prototype.clearBwalk = function() {
	this._bmotion.idle.walk.sX = 0;
	this._bmotion.idle.walk.sY = 0;
	this._bmotion.idle.walk.wait = 5;
    this._bmotion.idle.walk.duration = 30;
	this._bmotion.idle.walk.scaleX = 0;
	this._bmotion.idle.walk.scaleY = 0;
	this._bmotion.idle.walk.start = true;
};

//==============================
// ** clear idle
//==============================
Game_Battler.prototype.clearBdamage = function() {
    this._bmotion.damage.wait = false;
	this._bmotion.damage.duration = 0;
	this._bmotion.damage.x = 0;
	this._bmotion.damage.y = 0;
	this._bmotion.damage.orgX = 0;
	this._bmotion.damage.orgY = 0;
	this._bmotion.damage.scaleX = 0;
	this._bmotion.damage.scaleY = 0;
	this._bmotion.damage.rotation = 0;
	this._bmotion.damage.animation = [0,0,0,0,0,0];	
};

//==============================
// ** need Refresh Bmotion Walk
//==============================
Game_Battler.prototype.needRefreshBmotionWalk = function(x,y) {
	if (this._bmotion.idle.walk.skip > 0) {return false};
	if (this._bmotion.idle.walk.x < this._bmotion.idle.walk.rangeX1) {return true};
	if (this._bmotion.idle.walk.x > this._bmotion.idle.walk.rangeX2) {return true};
	if (this._bmotion.idle.walk.y < this._bmotion.idle.walk.rangeY1) {return true};
	if (this._bmotion.idle.walk.y > this._bmotion.idle.walk.rangeY2) {return true};
	if (x < 0) {return true};
	if (x > this._bmotion.idle.walk.rangeX3) {return true};
	if (y < 0) {return true};
	if (y > this._bmotion.idle.walk.rangeY3) {return true};	
	if (this._bmotion.idle.walk.duration <= 0) {return true};
	return false;
};

//==============================
// ** setBmotionWalkD
//==============================
Game_Battler.prototype.setBmotionWalkD = function(value,x,y) {
	if (x > this._bmotion.idle.walk.rangeX3) {return 1};
	if (x < 0) {return 0};
	if (y > this._bmotion.idle.walk.rangeY3) {return 1};
	if (y < 0) {return 0};	
    if (value > this._bmotion.idle.walk.rangeRealM) {return 1};
	if (value < -this._bmotion.idle.walk.rangeRealM) {return 0};
	return Math.randomInt(2)
};

//==============================
// ** refreshBmotionWalk
//==============================
Game_Battler.prototype.refreshBmotionWalk = function(x,y) {
    this._bmotion.idle.walk.duration = 60 + Math.randomInt(60);
	var wait = Math.randomInt(100);
	if (!this._bmotion.idle.walk.start && wait < this._bmotion.idle.walk.frequence) {
	   this._bmotion.idle.walk.sX = 0;
	   this._bmotion.idle.walk.sY = 0;
	   this._bmotion.idle.walk.wait = this._bmotion.idle.walk.duration; 
	   return;
	};
	this._bmotion.idle.walk.start = false;
	var preD = this._bmotion.idle.walk.sX
	var sx = (Math.randomInt(100) * this._bmotion.idle.walk.speed);
	var d = this.setBmotionWalkD(this._bmotion.idle.walk.x,x,y);
	this._bmotion.idle.walk.sX = d == 0 ? sx : -sx;
	var sy = (Math.randomInt(100) * this._bmotion.idle.walk.speed);
	var d = this.setBmotionWalkD(this._bmotion.idle.walk.y,x,y);
	this._bmotion.idle.walk.sY = d == 0 ? sy : -sy;
	this._bmotion.idle.walk.skip = 20
};

//==============================
// * update Bmotion Walk
//==============================
Sprite_Battler.prototype.updateBmotionWalk = function(x,y) {
	if (this._battler._bmotion.idle.walk.wait > 0) {this._battler._bmotion.idle.walk.wait--;return};
	if (this._battler._bmotion.idle.walk.skip > 0) {this._battler._bmotion.idle.walk.skip--};
	this._battler._bmotion.idle.walk.duration--;
    this._battler._bmotion.idle.walk.x += this._battler._bmotion.idle.walk.sX;
	this._battler._bmotion.idle.walk.y += this._battler._bmotion.idle.walk.sY;
	if (this._battler.needRefreshBmotionWalk(x,y)) {this._battler.refreshBmotionWalk(x,y)};
};

//==============================
// ** get Bmotion Idle
//==============================
Game_Battler.prototype.getBmotionIdle = function() {
    this.notetags().forEach(function(note) {			
         var note_data = note.split(' : ')
    	 if (note_data[0].toLowerCase() == "breath motion"){
			 var par = note_data[1].split(':');
			 this._bmotion.idle.mode = Math.min(Math.max(Number(par[0]),0),5);
		 } else if (note_data[0].toLowerCase() == "float motion"){
			 var par = note_data[1].split(':');
			 var floatMode = Math.min(Math.max(Number(par[0]),0),3)
			 this._bmotion.idle.float.mode = floatMode;
			 this._bmotion.idle.float.enable = true;		 
		 } else if (note_data[0].toLowerCase() == "float motion height"){
			 var par = note_data[1].split(':');
			 var floatHeight = Math.min(Math.max(Number(par[0]),0),20);
			 this._bmotion.idle.float.range = floatHeight * 0.1;
			 this._bmotion.idle.float.enable = true;
		 } else if (note_data[0].toLowerCase() == "float motion speed"){
			 var par = note_data[1].split(':');
			 var floatSpeed = Math.min(Math.max(Number(par[0]),1),10);
			 this._bmotion.idle.float.speed = floatSpeed * 0.01;
			 this._bmotion.idle.float.enable = true;	
		 } else if (note_data[0].toLowerCase() == "swing motion"){
			 var par = note_data[1].split(':');
			 var mode = Math.min(Math.max(Number(par[0]),0),1);
			 this._bmotion.idle.swing.mode = mode;
			 this._bmotion.idle.swing.enable = true;
		 } else if (note_data[0].toLowerCase() == "swing motion speed"){
			 var par = note_data[1].split(':');
			 this._bmotion.idle.swing.speed = Number(par[0]) * 0.001;
			 this._bmotion.idle.swing.enable = true;			 
		 } else if (note_data[0].toLowerCase() == "swing motion rate"){
			 var par = note_data[1].split(':');
			 var rate = Math.min(Math.max(Number(par[0]),0),360);
			 this._bmotion.idle.swing.range = rate * 0.01;
			 this._bmotion.idle.swing.enable = true;			 			 
		 } else if (note_data[0].toLowerCase() == "walk motion speed") {
			 var par = note_data[1].split(':');   
			 var walkSpeed =  Math.min(Math.max(Number(par[0]),1),20); 
		     this._bmotion.idle.walk.speed = walkSpeed * 0.001;
			 this._bmotion.idle.walk.enable = true;
		 } else if (note_data[0].toLowerCase() == "walk motion frequence") {
			 var par = note_data[1].split(':');   
			 var walkfreq =  Math.min(Math.max(Number(par[0]),0),100);
			 var walkfreqReal = 100 - walkfreq;
		     this._bmotion.idle.walk.frequence = walkfreqReal;
			 this._bmotion.idle.walk.enable = true;	
		 } else if (note_data[0].toLowerCase() == "walk motion range") {
			 var par = note_data[1].split(':');   
			 var walkRange =  Math.min(Math.max(Number(par[0]),10),Graphics.boxWidth); 
		     this._bmotion.idle.walk.rangeReal = walkRange;
			 this._bmotion.idle.walk.enable = true;
			 this.clearBidleWalk();
		 } else if (note_data[0].toLowerCase() == "damage motion") {
			 var par = note_data[1].split(':');   
			 var mode =  Math.min(Math.max(Number(par[0]),0),3); 
		     this._bmotion.damage.mode = mode;
		 } else if (note_data[0].toLowerCase() == "x offset") {
			 var par = note_data[1].split(':');   			 
			 this._bmotion.x_Offset = Number(par[0]);
		 } else if (note_data[0].toLowerCase() == "y offset") {
			 var par = note_data[1].split(':');   			 
			 this._bmotion.y_Offset = Number(par[0]);			 
    	 };
	},this);
};

//==============================
// ** prepare Bmotion Action
//==============================
Game_Battler.prototype.prepareBmotionAction = function(item,mode) {
	if (!item) {return};
	if (mode == 1) {
    	var item_notes = item.note.split(/[\r\n]+/);
	} else {
		if (!item.object()) {return};
	    var item_notes = item.object().note.split(/[\r\n]+/);
	};
    item_notes.forEach(function(note) {
         var note_data = note.split(' : ')
		 if (note_data[0].toLowerCase() == "action motion"){
			 var par = note_data[1].split(':');
			   this.clearBaction();
			   this.clearBdamage();
               this._bmotion.action.mode = Math.min(Math.max(Number(par[0]),0),13);
         };
	},this);
};

//==============================
// ** b motion X
//==============================
Game_Battler.prototype.bmotionX = function() {
    return this._bmotion.x_Offset + this._bmotion.action.x + this._bmotion.idle.x + Math.abs(this._bmotion.damage.x) + this._bmotion.idle.walk.x + this._bmotion.idle.float.x;
};

//==============================
// ** b motion Y
//==============================
Game_Battler.prototype.bmotionY = function() {
   return this._bmotion.y_Offset +  this.bmotionFlyY() + this._bmotion.action.y + this._bmotion.idle.y + this._bmotion.damage.y + this._bmotion.idle.walk.y + this._bmotion.idle.swing.y;
}; 

//==============================
// ** bmotion Fly Y
//==============================
Game_Battler.prototype.bmotionFlyY = function() {
   return this._bmotion.idle.float.y + this._bmotion.action.y2
};

//==============================
// ** b motion scale X
//==============================
Game_Battler.prototype.bmotionScaleX = function() {
	var n = this._bmotion.action.scaleX + this._bmotion.idle.scaleX + this._bmotion.damage.scaleX;
    if (Imported.MOG_BattleCameraFrontal) {n += this.camScaleX()};
	return n;
};
//==============================
// ** b motion scale Y
//==============================
Game_Battler.prototype.bmotionScaleY = function() {
    var n = this._bmotion.action.scaleY + this._bmotion.idle.scaleY + this._bmotion.damage.scaleY;
    if (Imported.MOG_BattleCameraFrontal) {n += this.camScaleY()};
    return n;
};

//==============================
// ** b motion rotation
//==============================
Game_Battler.prototype.bmotionRotation = function() {
    return this._bmotion.action.rotation + this._bmotion.idle.rotation + this._bmotion.idle.swing.rotation + this._bmotion.damage.rotation;
};

//==============================
// * Force Action
//==============================
var _mog_bmotion_gbattler_forceAction = Game_Battler.prototype.forceAction;
Game_Battler.prototype.forceAction = function(skillId, targetIndex) {
    _mog_bmotion_gbattler_forceAction.call(this,skillId, targetIndex);
    var itemD = $dataSkills[skillId]
	this.prepareBmotionAction(itemD,1);
};

//==============================
// ** set Bmotion Damage Apply
//==============================
Game_Battler.prototype.setBmotionDamageApply = function(target) {
	target.clearBdamage();
	if (target._bmotion.damage.mode == 0) { 
	    target._bmotion.damage.duration = 45;
	} else {
		target._bmotion.damage.duration = 20;
	};
};

//=============================================================================
// ■■■ Sprite Enemy ■■■
//=============================================================================

//==============================
// ♦ ALIAS ♦  init Visibility
//==============================
var _mog_bmotion_sprtEnemy_initVisibility = Sprite_Enemy.prototype.initVisibility;
Sprite_Enemy.prototype.initVisibility = function() {
	_mog_bmotion_sprtEnemy_initVisibility.call(this);
	this.refreshBmotionData();
};

//=============================================================================
// ■■■ Sprite Enemy ■■■
//=============================================================================

//==============================
// ♦ ALIAS ♦  createStateIconSprite
//==============================
const _mog_battlerMotion_spriteEnemy_createStateIconSprite = Sprite_Enemy.prototype.createStateIconSprite;
Sprite_Enemy.prototype.createStateIconSprite = function() {
	_mog_battlerMotion_spriteEnemy_createStateIconSprite.call(this);
    this.removeChild(this._stateIconSprite);
};

//=============================================================================
// ■■■ Spriteset_Battle ■■■
//=============================================================================

//==============================
//  ♦ ALIAS ♦  create Enemies
//==============================
const _mog_battlerMotion_spriteset_battle = Spriteset_Battle.prototype.createEnemies;
Spriteset_Battle.prototype.createEnemies = function() {
	  _mog_battlerMotion_spriteset_battle.call(this);
	  this.createStateIconsEnemies();
};

//==============================
// * createStateIconsEnemies
//==============================
Spriteset_Battle.prototype.createStateIconsEnemies = function() {
	for (const enemy of this._enemySprites) {
	     var enemySprite = new EnemyIconsSprites(enemy)
   	     this._battleField.addChild(enemySprite);
	};
};

//=============================================================================
// ■■■  EnemyIconsSprites ■■■ 
//=============================================================================
function EnemyIconsSprites() {
    this.initialize.apply(this, arguments);
};

EnemyIconsSprites.prototype = Object.create(Sprite.prototype);
EnemyIconsSprites.prototype.constructor = EnemyIconsSprites;

//==============================
// * Initialize
//==============================
EnemyIconsSprites.prototype.initialize = function(enemy_sprite) {
	Sprite.prototype.initialize.call(this);	
	this._enemy_sprite = enemy_sprite
	this.addChild(this._enemy_sprite._stateIconSprite);
};

//==============================
// * Is Visible
//==============================
EnemyIconsSprites.prototype.isVisible = function() {
   if (!this._enemy_sprite.visible) {return false};	
   if (!this._enemy_sprite._battler) {return false};
   if (this._enemy_sprite._battler.allIcons().length == 0) {return false};
   if (this._enemy_sprite._battler.isDead()) {return false};
   return true;
};

//==============================
// * Update
//==============================
EnemyIconsSprites.prototype.update = function(update) {
	Sprite.prototype.update.call(this);	
    this.x = this._enemy_sprite.x;
	this.y = this._enemy_sprite.y;
	this.opacity = this._enemy_sprite.opacity;
	this.visible = this.isVisible();
};

//=============================================================================
// ■■■ Sprite Battler ■■■
//=============================================================================

//==============================
// ♦ ALIAS ♦  init Members
//==============================
var _mog_bmotion_sprBat_initMembers = Sprite_Battler.prototype.initMembers;
Sprite_Battler.prototype.initMembers = function() {
	_mog_bmotion_sprBat_initMembers.call(this);
    this.initBmotion();
};

//==============================
// * init Bmotion
//==============================
Sprite_Battler.prototype.initBmotion = function() {
    this._bmotion = {};
	this._bmotion.initial = true;
	this._bmotion.shadow = false;
};

//==============================
// * set Init Bmotion Data
//==============================
Sprite_Battler.prototype.setInitBmotionData = function() {
	this._bmotion.initial = false;
	this._bmotion.shadow = this._battler._bmotion.idle.float.shadow
    this._battler.clearBaction();
	this._battler.clearBidle();
	this._battler.clearBdamage();
    this._battler._bmotion.idle.orgX = this.x;
	this._battler._bmotion.idle.orgY = this.y;
	this.setBmotionIdle();
};

//==============================
// * set Init Bmotion Data
//==============================
Sprite_Battler.prototype.setBmotionIdle = function() {
   this._battler.getBmotionIdle();
   if (this._battler._bmotion.idle.float.enable) {
	   this.setupBmotionFloat();
   } else if (this._battler._bmotion.idle.swing.enable) {
	   this.setupBmotionSwing()
   };
   if (this._battler._bmotion.idle.mode >= 0) {this.setupBmotionBreath()};   
   if (this._battler._bmotion.idle.walk.enable) {this._battler.refreshBmotionWalk()};
   this._battler._bmotion.idle.animation[10] = Math.randomInt(25);
};
   
//==============================
// * setup Bmotion Breath
//==============================
Sprite_Battler.prototype.setupBmotionBreath = function() {
    switch (this._battler._bmotion.idle.mode) {
	   case 0:
          this.setupBMotionIdle1(); // Normal Breath Effect
          break;
	   case 1:
          this.setupBMotionIdle1();; // Normal Breath Effect 2
          break;
	   case 2:
          this.setupBMotionIdle3();; // Normal Breath Effect 3
          break;
	   case 3:
          this.setupBMotionIdle1();; // Normal Breath Effect 4
          break;	
	   case 4:
          this.setupBMotionIdle4();; // Normal Breath Effect 5
          break;		  
	   case 5:
          this.setupBMotionIdle4();; // Normal Breath Effect 6
          break;			  	  
	   default :
          break				
    };
};

//==============================
// * update Idle Bmotion
//==============================
Sprite_Battler.prototype.updateIdleBmotion = function() {
	if (this._battler._bmotion.idle.animation[10] > 0) {this._battler._bmotion.idle.animation[10]--;return};
	if (this.canUpdateWalk()) {this.updateBmotionWalk(this.x,this.y)};
	if (this.canUpdateFloat()) {
		this.updateBMotionFloat();
	} else if (this._battler._bmotion.idle.swing.enable) {
		this.updateBmotionSwing()
	};
    this.updateBmotionBreathEffect(); 			
};

//==============================
// * update Bmotion Breath Effect
//==============================
Sprite_Battler.prototype.updateBmotionBreathEffect = function() {
    switch (this._battler._bmotion.idle.mode) {
	   case 0:
          this.updateBMotionIdle1();
          break;
	   case 1:
          this.updateBMotionIdle2();
          break;
	   case 2:
          this.updateBMotionIdle3();
          break;
	   case 3:
          this.updateBMotionIdle4();
          break;		  
	   case 4:
	     this.updateBMotionIdle5();
	      break;
	   case 5:
	     this.updateBMotionIdle6();
	      break		  
	   default :
          break				
    }; 
};

//==============================
// * setupBmotionSwing
//==============================
Sprite_Battler.prototype.setupBmotionSwing = function() {
    if (this._battler._bmotion.idle.swing.mode == 0) {
		this.setupBmotionSwingWave()
	} else if (this._battler._bmotion.idle.swing.mode == 1) {
		this.setupBmotionSwing360()
	};
};

//==============================
// * setupBmotionSwingWave
//==============================
Sprite_Battler.prototype.setupBmotionSwingWave = function() {
  	this._battler._bmotion.idle.swing.animation[0] = 0;
	var rds = Math.randomInt(100);
	var rds2 = rds * 0.0000001;		
	this._battler._bmotion.idle.swing.animation[2] = 0.00048 + (0.01  / this.bitmap.height) + rds2;
	this._battler._bmotion.idle.swing.animation[3] = 0.0096 + (0.25 / this.bitmap.height);
	var int = this._battler._bmotion.idle.swing.animation[3];
    var int2 = (Math.randomInt(int) * 0.0001).toFixed(4);
  	this._battler._bmotion.idle.swing.animation[1] = int2;
};

//==============================
// * updateBmotionSwing
//==============================
Sprite_Battler.prototype.updateBmotionSwing = function() {
    if (this._battler._bmotion.idle.swing.mode == 0) {
		 this.updateBmotionSwingWave();
	} else if (this._battler._bmotion.idle.swing.mode == 1) {
		 this.updateBmotionSwing360();
	};
};

//==============================
// * update Bmotion Swing Wave
//==============================
Sprite_Battler.prototype.updateBmotionSwingWave = function() {
	var maxAngle = this._battler._bmotion.idle.swing.range;
	if (this._battler._bmotion.idle.swing.animation[0] == 0) {	
	    var speed = this._battler._bmotion.idle.swing.speed + Math.abs(this._battler._bmotion.idle.swing.rotation -  maxAngle) * 0.015;
	    this._battler._bmotion.idle.swing.rotation += speed;		  
	    if (this._battler._bmotion.idle.swing.rotation >= maxAngle) {	
		    this._battler._bmotion.idle.swing.rotation = maxAngle
		    this._battler._bmotion.idle.swing.animation[0] = 1;
	    };	
	  } else {
	    var speed = this._battler._bmotion.idle.swing.speed + Math.abs(-this._battler._bmotion.idle.swing.rotation -  maxAngle) * 0.01;
    	this._battler._bmotion.idle.swing.rotation -= speed;		  
		if (this._battler._bmotion.idle.swing.rotation <= -maxAngle) {
		    this._battler._bmotion.idle.swing.rotation = -maxAngle
		    this._battler._bmotion.idle.swing.animation[0] = 0;
		};		  	  
	  }; 
};

//==============================
// * setupBmotionSwing360
//==============================
Sprite_Battler.prototype.setupBmotionSwing360 = function() {
   this._battler._bmotion.idle.swing.speed *= 3;
   this._battler._bmotion.idle.swing.y =  -(this.bitmap.height / 2);
   this._battler._bmotion.idle.swing.rotation = Math.randomInt(360);
   this.anchor.y = 0.5;
};

//==============================
// * update BmotionSwing360
//==============================
Sprite_Battler.prototype.updateBmotionSwing360 = function() {
   this._battler._bmotion.idle.swing.rotation += this._battler._bmotion.idle.swing.speed;
};

//==============================
// * need Get Data Motion
//==============================
Sprite_Battler.prototype.needGetDataBmotion = function() {
	if (!this._bmotion.initial) {return false};
	if (!this._battler) {return false};
	if (!this.bitmap) {return false};
	if (!this.bitmap.isReady()) {return false};
	return true;
};

//==============================
// * can Update Bmotion
//==============================
Sprite_Battler.prototype.canUpdateBmotion = function() {
    if (!this._battler) {return false};
	if (!this.visible) {return false};
    return true;
};

//==============================
// * can Update Idle BMotion
//==============================
Sprite_Battler.prototype.canUpdateIdleBMotion = function() {   
    if (this.canUpdateActionBMotion()) {return false};
	if (this._battler.isDead()) {return false}
	return true;
};

//==============================
// * can Update Action BMotion
//==============================
Sprite_Battler.prototype.canUpdateActionBMotion = function() {
    if (this._battler._bmotion.action.mode < 0) {return false};
    return true;	
};

//==============================
// * can Update Walk
//==============================
Sprite_Battler.prototype.canUpdateWalk = function() {
   if (!this._battler._bmotion.idle.walk.enable) {return false};
   if (BattleManager.isBusy()) {return false};
   return true;	
};

//==============================
// * can Update Float
//==============================
Sprite_Battler.prototype.canUpdateFloat = function() {
	if (!this._battler._bmotion.idle.float.enable) {return false};
	return true;
};

//==============================
// * setup BMotion Idle 1
//==============================
Sprite_Battler.prototype.setupBMotionIdle1 = function() {
 	    this._battler._bmotion.idle.animation[0] = 0;
		this._battler._bmotion.breathEffect = {};
		this._battler._bmotion.breathEffect.phase = 0;
		this._battler._bmotion.breathEffect.duration = 0;
		this._battler._bmotion.breathEffect.rangeMax = 0.00170;
		var sp = Number(Math.randomInt(170) * 0.00001).toFixed(5);
		this._battler._bmotion.breathEffect.range = Number(sp);
		var sp = Number(Math.randomInt(50) * 0.0000001).toFixed(7);
		this._battler._bmotion.breathEffect.speed = 0.000060 + Number(sp);
		this._battler._bmotion.breathEffect.scale = 0.000000
};

//==============================
// * update BMotion Idle 1
//==============================
Sprite_Battler.prototype.updateBMotionIdle1 = function() {
	  if (this._battler._bmotion.breathEffect.phase == 0) {
		  this._battler._bmotion.breathEffect.range -= this._battler._bmotion.breathEffect.speed;
	      if (this._battler._bmotion.breathEffect.range <= -this._battler._bmotion.breathEffect.rangeMax) {
			  this._battler._bmotion.breathEffect.range = -this._battler._bmotion.breathEffect.rangeMax;
			  this._battler._bmotion.breathEffect.phase = 1;
		  };
	  } else {
		  this._battler._bmotion.breathEffect.range += this._battler._bmotion.breathEffect.speed;
		  if (this._battler._bmotion.breathEffect.range >= this._battler._bmotion.breathEffect.rangeMax) {
			  this._battler._bmotion.breathEffect.range = this._battler._bmotion.breathEffect.rangeMax;
			  this._battler._bmotion.breathEffect.phase = 0;
		   };
	  };
	  this._battler._bmotion.breathEffect.scale -= this._battler._bmotion.breathEffect.range;
	  this._battler._bmotion.idle.scaleY = this._battler._bmotion.breathEffect.scale;
};

//==============================
// * update BMotionIdle 2
//==============================
Sprite_Battler.prototype.updateBMotionIdle2 = function() {
	  if (this._battler._bmotion.breathEffect.phase == 0) {
		  this._battler._bmotion.breathEffect.range -= this._battler._bmotion.breathEffect.speed;
	      if (this._battler._bmotion.breathEffect.range <= -this._battler._bmotion.breathEffect.rangeMax) {
	  		  this._battler._bmotion.breathEffect.range = -this._battler._bmotion.breathEffect.rangeMax;
			  this._battler._bmotion.breathEffect.phase = 1;
		   };
	  } else {
		  this._battler._bmotion.breathEffect.range += this._battler._bmotion.breathEffect.speed;
		  if (this._battler._bmotion.breathEffect.range >= this._battler._bmotion.breathEffect.rangeMax) {
			  this._battler._bmotion.breathEffect.range = this._battler._bmotion.breathEffect.rangeMax;
			  this._battler._bmotion.breathEffect.phase = 0;
		  };
	  };
	  this._battler._bmotion.breathEffect.scale -= this._battler._bmotion.breathEffect.range;
	  this._battler._bmotion.idle.scaleX = -this._battler._bmotion.breathEffect.scale;
	  this._battler._bmotion.idle.scaleY = this._battler._bmotion.breathEffect.scale;
};

//==============================
// * setup BMotion Idle 3
//==============================
Sprite_Battler.prototype.setupBMotionIdle3 = function() {
 	    this._battler._bmotion.idle.animation[0] = 0;
		var rds = Math.randomInt(100);
		var rds2 = rds * 0.0000001;		
		this._battler._bmotion.idle.animation[2] = 0.00001 + (0.01  / this.bitmap.height) + rds2;
	    this._battler._bmotion.idle.animation[3] = 0.0002 + (0.25 / this.bitmap.height);
		var int = this._battler._bmotion.idle.animation[3];
        var int2 = (Math.randomInt(int) * 0.0001).toFixed(4);
  	    this._battler._bmotion.idle.animation[1] = int2;
};

//==============================
// * update BMotionIdle 3
//==============================
Sprite_Battler.prototype.updateBMotionIdle3 = function() {
	  if (this._battler._bmotion.idle.animation[0] == 0) {		  
		  this._battler._bmotion.idle.animation[1] -= this._battler._bmotion.idle.animation[2];
		  var speed = this._battler._bmotion.idle.animation[1] * 5;
	      this._battler._bmotion.idle.scaleY += speed;
	      this._battler._bmotion.idle.scaleX -= speed * 1.5;
		  if (this._battler._bmotion.idle.animation[1] <= -this._battler._bmotion.idle.animation[3]) {	
			  this._battler._bmotion.idle.animation[1] = -this._battler._bmotion.idle.animation[3];
			  this._battler._bmotion.idle.animation[0] = 1;
		  };	
	  } else {
		  this._battler._bmotion.idle.animation[1] += this._battler._bmotion.idle.animation[2];
		  var speed = this._battler._bmotion.idle.animation[1] * 5;
	      this._battler._bmotion.idle.scaleY += speed;
	      this._battler._bmotion.idle.scaleX -= speed  * 1.5;
		  if (this._battler._bmotion.idle.animation[1] >= this._battler._bmotion.idle.animation[3]) {	
			  this._battler._bmotion.idle.animation[1] = this._battler._bmotion.idle.animation[3];
			  this._battler._bmotion.idle.animation[0] = 0;
		  };
	  };
};

//==============================
// * update BMotionIdle 4
//==============================
Sprite_Battler.prototype.updateBMotionIdle4 = function() {	
	  if (this._battler._bmotion.breathEffect.phase == 0) {
		  this._battler._bmotion.breathEffect.range -= this._battler._bmotion.breathEffect.speed;
	      if (this._battler._bmotion.breathEffect.range <= -this._battler._bmotion.breathEffect.rangeMax) {
			  this._battler._bmotion.breathEffect.range = -this._battler._bmotion.breathEffect.rangeMax;
			  this._battler._bmotion.breathEffect.phase = 1;
		  };
	  } else {
		  this._battler._bmotion.breathEffect.range += this._battler._bmotion.breathEffect.speed;
		  if (this._battler._bmotion.breathEffect.range >= this._battler._bmotion.breathEffect.rangeMax) {
		      this._battler._bmotion.breathEffect.range = this._battler._bmotion.breathEffect.rangeMax
			  this._battler._bmotion.breathEffect.phase = 0;
		  };
	  };
	  this._battler._bmotion.breathEffect.scale -= this._battler._bmotion.breathEffect.range;
	  this._battler._bmotion.idle.scaleX = -this._battler._bmotion.breathEffect.scale;
};

//==============================
// * setup BMotion Idle 4
//==============================
Sprite_Battler.prototype.setupBMotionIdle4 = function() {
   this._battler._bmotion.idle.animation[1] = -Math.randomInt(60)
};

//==============================
// * updateBmotionDamageKnock
//==============================
Sprite_Battler.prototype.updateBMotionIdle5 = function() {
	var speed = 2;
	var speedScale = 0.003
	var rot = 0.003;
	var range = -80;
	if (this._battler._bmotion.idle.animation[0] == 0) {
        this._battler._bmotion.idle.animation[1] -= speed;
		this._battler._bmotion.idle.rotation +=rot;
		this._battler._bmotion.idle.scaleX -=  speedScale;
		this._battler._bmotion.idle.scaleY +=  speedScale;
		if (this._battler._bmotion.idle.animation[1] <= range) {
		    this._battler._bmotion.idle.animation[1]  = range;
			this._battler._bmotion.idle.animation[0] = 1;
		}
	} else if (this._battler._bmotion.idle.animation[0] == 1) {
		this._battler._bmotion.idle.animation[1] += speed;
		this._battler._bmotion.idle.rotation -=rot;
		this._battler._bmotion.idle.scaleX +=  speedScale;
		this._battler._bmotion.idle.scaleY -=  speedScale;		
		if (this._battler._bmotion.idle.animation[1] >= 0) {
		    this._battler._bmotion.idle.animation[0] = 0;
		};
	};
};

//==============================
// * updateBmotionDamageKnock
//==============================
Sprite_Battler.prototype.updateBMotionIdle6 = function() {
	var speed = 2;
	var speedScale = 0.003
	var rot = 0.003;
	var range = -80;
	if (this._battler._bmotion.idle.animation[0] == 0) {
        this._battler._bmotion.idle.animation[1] -= speed;
		this._battler._bmotion.idle.rotation -=rot;
		this._battler._bmotion.idle.scaleX -=  speedScale;
		this._battler._bmotion.idle.scaleY +=  speedScale;
		if (this._battler._bmotion.idle.animation[1]  <= range) {
		    this._battler._bmotion.idle.animation[1]  = range;
			this._battler._bmotion.idle.animation[0] = 1;
		}
	} else if (this._battler._bmotion.idle.animation[0] == 1) {
		this._battler._bmotion.idle.animation[1] += speed;
		this._battler._bmotion.idle.rotation +=rot;
		this._battler._bmotion.idle.scaleX +=  speedScale;
		this._battler._bmotion.idle.scaleY -=  speedScale;		
		if (this._battler._bmotion.idle.animation[1] >= 0) {
		    this._battler._bmotion.idle.animation[0] = 0;
		};
	};
};

//==============================
// * setup BMotion Float
//==============================
Sprite_Battler.prototype.setupBmotionFloat = function() {
 	    this._battler._bmotion.idle.animation[0] = 0;
		var rds = Math.randomInt(100);
		var rds2 = rds * 0.0001;
		this._battler._bmotion.idle.float.animation[2] = this._battler._bmotion.idle.float.speed + rds2;
	    this._battler._bmotion.idle.float.animation[3] = this._battler._bmotion.idle.float.range;
		var int = this._battler._bmotion.idle.float.animation[3] * 10000;
        var int2 = Math.randomInt(int) * 0.01;
  	    this._battler._bmotion.idle.animation[1] = int2;
		this._battler._bmotion.idle.float.animation[9] = Math.randomInt(10);
		this._battler._bmotion.idle.float.animation[5] = 0;
		this._battler._bmotion.idle.float.animation[6] = Math.randomInt(2);
		this._battler._bmotion.idle.float.animation[7] = Math.random(2);
		this._d = [0,0];
};

//==============================
// * set Bmotion Float Mode
//==============================
Sprite_Battler.prototype.setBmotionFloatMode = function() {
	if (this._battler._bmotion.idle.float.mode == 0) {return 0;
    } else if (this._battler._bmotion.idle.float.mode == 1) {return -this._battler._bmotion.idle.float.animation[1]	;
	} else if (this._battler._bmotion.idle.float.mode == 2) {return this._battler._bmotion.idle.float.animation[1]	;
	} else if (this._battler._bmotion.idle.float.mode == 3) {
		if (this._battler._bmotion.idle.float.animation[6] == 0) {
			if (this._battler._bmotion.idle.float.animation[5] == 0) {
			  return -this._battler._bmotion.idle.float.animation[1];	
	 
			} else {
				
			  return this._battler._bmotion.idle.float.animation[1];
			};
		} else {
			if (this._battler._bmotion.idle.float.animation[5] == 0) {
			  return this._battler._bmotion.idle.float.animation[1];	
			} else {
			  return -this._battler._bmotion.idle.float.animation[1];
			};
		};
	};
    return this._battler._bmotion.idle.float.animation[1]	;
};

//==============================
// * update BMotion Float
//==============================
Sprite_Battler.prototype.updateBMotionFloat = function() {
	if (this._battler._bmotion.idle.float.animation[9] > 0) {
		this._battler._bmotion.idle.float.animation[9]--;
		return
	};		
    if (this._battler._bmotion.idle.float.animation[0] == 0) {		  
		this._battler._bmotion.idle.float.animation[1] -= this._battler._bmotion.idle.float.animation[2];
		this._battler._bmotion.idle.float.animation[4] = this.setBmotionFloatMode();
		this._battler._bmotion.idle.float.y += this._battler._bmotion.idle.float.animation[1];
		this._battler._bmotion.idle.float.x += this._battler._bmotion.idle.float.animation[4];	
		this._d[0] = 0;  
		if (this._battler._bmotion.idle.float.animation[1] <= -this._battler._bmotion.idle.float.animation[3]) {	
			  this._battler._bmotion.idle.float.animation[1] = -this._battler._bmotion.idle.float.animation[3]
			  this._battler._bmotion.idle.float.animation[0] = 1;
		};	
	  } else {
		this._battler._bmotion.idle.float.animation[1] += this._battler._bmotion.idle.float.animation[2];
		this._battler._bmotion.idle.float.animation[4] = this.setBmotionFloatMode();
		this._battler._bmotion.idle.float.y += this._battler._bmotion.idle.float.animation[1];
		this._battler._bmotion.idle.float.x += this._battler._bmotion.idle.float.animation[4];
		this._d[0] = 1;
	    if (this._battler._bmotion.idle.float.animation[1] >= this._battler._bmotion.idle.float.animation[3]) {	
			this._battler._bmotion.idle.float.animation[1] = this._battler._bmotion.idle.float.animation[3]
		    this._battler._bmotion.idle.float.animation[0] = 0;
		};
	  };
      this._d[0] = this._battler._bmotion.idle.float.animation[1] > 0 ? 0 : 1;
      if (this._d[1] != this._d[0]){
		  this._d[1] = this._d[0]
		  this._battler._bmotion.idle.float.animation[5]++;
		  if (this._battler._bmotion.idle.float.animation[5] > 1) {
			  this._battler._bmotion.idle.float.animation[5] = 0;
			  this._battler._bmotion.idle.float.animation[6]++;
			  if (this._battler._bmotion.idle.float.animation[6] > 1) {
				  this._battler._bmotion.idle.float.animation[6] = 0 
			  };
		  };
     }; 
};

//==============================
// * update Action Bmotion
//==============================
Sprite_Battler.prototype.updateActionBmotion = function() {
	if (this._battler._bmotion.action.initial) {this.setupInitialBmotionAction()};
	if (this._battler._bmotion.action.animation[9] > 0) {
		this._battler._bmotion.action.animation[9]--;
		return;
	};	
    switch (this._battler._bmotion.action.mode) {
	   case 0:
          this.updateBMotionActionZoom1();
          break;	
	   case 1:
          this.updateBMotionSwingRight();
          break;
	   case 2:
          this.updateBMotionSwingLeft();
          break;
	   case 3:
          this.updateBmotionJump();
          break;
	   case 4:
          this.updateBmotionJumpRoll();
          break;	
	   case 5:
	      this.updateBmotionJumpSlime();
          break;		  
	   case 6:
          this.updateBmotionRotation();
          break; 	
	   case 7: 
	      this.updateBmotionFrontalAttackCharge();
          break;
	   case 8:
         this.updateBmotionWaveAttack();	
          break;
	   case 9:
	      this.updateBmotionShakeAttack();
          break;		    
	   case 10:
	      this.updateBmotionSideRightSlash();
          break;
	   case 11:
          this.updateBmotionSideRightSlashDouble();
          break;
	   case 12:
          this.updateBmotionSideAttack();
		  break;
	   case 13:     
          this.updateBmotionSideRightAttackCharge();
		  break;
	   default :
          break				
    };
	if (this.needBmotionResetZoomAction()) {
		this._battler._bmotion.action.scaleX = 0;
		this._battler._bmotion.action.scaleY = 0
	};
};

//==============================
// * need Bmotion ResetZoom Action
//==============================
Sprite_Battler.prototype.needBmotionResetZoomAction = function() {
	return false;
};

//==============================
// * is Jump Action?
//==============================
Sprite_Battler.prototype.isBJumpAction = function() {
	if (this._battler._bmotion.action.mode == 3) {return true};
	if (this._battler._bmotion.action.mode == 4) {return true};
	if (this._battler._bmotion.action.mode == 10) {return true};
	return false;
};

//==============================
// * setup Initial Bmotion Action
//==============================
Sprite_Battler.prototype.setupInitialBmotionAction = function() {
	this._battler._bmotion.action.initial = false;
 	if (this._battler._bmotion.action.initial) {this.setupInitialBmotionAction()};
    switch (this._battler._bmotion.action.mode) {
	   case 0:
          this.setupBMotionActionZoom1();
          break;
	   case 3:
          this.setupBMotionActionJump1();
          break;
	   case 4:
          this.setupBMotionActionJumpRoll();
          break;
	   case 5:
          this.setupBmotionJumpSlime();		  
          break;
	   case 8:
          this.setupBmotionWaveAttack();			  
	   case 13:
          this.setupBmotionSideRightSlashCharge();		  
          break;
	   default :
          break				
    };  			
};

//==============================
// * setup B motion Action Zoom 1
//==============================
Sprite_Battler.prototype.setupBMotionActionZoom1 = function() {
 	this._battler._bmotion.action.animation[1] = 0.005 + (1.00 / this.bitmap.height);
};

//==============================
// * update BMotion Action 1
//==============================
Sprite_Battler.prototype.updateBMotionActionZoom1 = function() {
   	this._battler._bmotion.action.animation[0]+= 0.5;
	if (this._battler._bmotion.action.animation[0] < 15) {
		this._battler._bmotion.action.scaleX += this._battler._bmotion.action.animation[1];
		this._battler._bmotion.action.scaleY = this._battler._bmotion.action.scaleX;
	} else if (this._battler._bmotion.action.animation[0] < 30) {
	    this._battler._bmotion.action.scaleX -= this._battler._bmotion.action.animation[1];
		this._battler._bmotion.action.scaleY = this._battler._bmotion.action.scaleX;
	} else {
	    this._battler.clearBaction();
	};		
};

//==============================
// * updateBMotionSwingRight
//==============================
Sprite_Battler.prototype.updateBMotionSwingRight = function() {
    this._battler._bmotion.action.animation[0]++;
	var speed = 8;
	if (this._battler._bmotion.action.animation[0] < 10) {
        this._battler._bmotion.action.x += speed;
        this._battler._bmotion.action.y += speed;
		if (Imported.MOG_BattleCameraFrontal) {		
		    this._battler._bmotion.action.scaleX = -2.00 - this._battler.camScaleX() * 2.0;
		} else {
			this._battler._bmotion.action.scaleX = -2.00;
		};
	} else if (this._battler._bmotion.action.animation[0] < 30) {
        this._battler._bmotion.action.x -= speed;
 	} else if (this._battler._bmotion.action.animation[0] < 40) {
		this._battler._bmotion.action.scaleX = 0
        this._battler._bmotion.action.x += speed;
        this._battler._bmotion.action.y -= speed;			
	} else {
	    this._battler.clearBaction();
	};	
};

//==============================
// * updateBMotionSwingLeft
//==============================
Sprite_Battler.prototype.updateBMotionSwingLeft = function() {
    this._battler._bmotion.action.animation[0]++;
	var speed = 8;
	if (this._battler._bmotion.action.animation[0] < 10) {
        this._battler._bmotion.action.x -= speed;
        this._battler._bmotion.action.y += speed; 
	} else if (this._battler._bmotion.action.animation[0] < 30) {
        this._battler._bmotion.action.x += speed;
 	} else if (this._battler._bmotion.action.animation[0] < 40) {
        this._battler._bmotion.action.x -= speed;
        this._battler._bmotion.action.y -= speed;
		if (Imported.MOG_BattleCameraFrontal) {		
		    this._battler._bmotion.action.scaleX = -2.00 - this._battler.camScaleX() * 2.0;
		} else {
			this._battler._bmotion.action.scaleX = -2.00;
		};
	} else {
	    this._battler.clearBaction();
	};	
};

//==============================
// * setup B motion Action Jump 1
//==============================
Sprite_Battler.prototype.setupBMotionActionJump1 = function() {
	this._battler._bmotion.action.animation[1] = -7;
};

//==============================
// * update BMotion Jump
//==============================
Sprite_Battler.prototype.updateBmotionJump = function() {
	  this._battler._bmotion.action.animation[1] += 0.30;
	  this._battler._bmotion.action.y2 += this._battler._bmotion.action.animation[1];	  
	  if (this._battler._bmotion.action.animation[1] >= 7) {
		  this._battler._bmotion.action.y2 = 0
		  this._battler.clearBaction()
	  };
};

//==============================
// * setup B motion Action Jump Roll
//==============================
Sprite_Battler.prototype.setupBMotionActionJumpRoll = function() {
	this._battler._bmotion.action.animation[1] = -8;
};

//==============================
// * update BMotion Jump Roll
//==============================
Sprite_Battler.prototype.updateBmotionJumpRoll = function() {
	this._battler._bmotion.action.animation[0]++;		  
	this._battler._bmotion.action.animation[1] += 0.30;
	this._battler._bmotion.action.y2 += this._battler._bmotion.action.animation[1];	
	if (this._battler._bmotion.action.animation[1] >= 8) {this._battler.clearBaction()};
    if (this._battler._bmotion.action.animation[0] > 5) {
	    this._battler._bmotion.action.animation[0] = 0;
    	if (Imported.MOG_BattleCameraFrontal) {		
		    var s = -2.00 - this._battler.camScaleX() * 2.0;
	    	this._battler._bmotion.action.scaleX = this._battler._bmotion.action.scaleX == 0 ? s : 0;
		} else {
			this._battler._bmotion.action.scaleX = this._battler._bmotion.action.scaleX == 0 ? -2.00 : 0;
		};				
	};
};

//==============================
// * setup B motion Action Jump Slime
//==============================
Sprite_Battler.prototype.setupBmotionJumpSlime = function() {
	this._battler._bmotion.action.animation[1] = -14
	this._battler._bmotion.action.wait = true;
	this._movementDuration = 10	
};

//==============================
// * update BMotion Jump Slime
//==============================
Sprite_Battler.prototype.updateBmotionJumpSlime = function() {
	if (this._battler._bmotion.action.animation[0] == 0) { 		  
	    this._battler._bmotion.action.animation[1] += 1;
    	this._battler._bmotion.action.y2 += this._battler._bmotion.action.animation[1];	
		if (this._battler._bmotion.action.scaleX >= -0.8) {
			this._battler._bmotion.action.scaleX -= 0.02;
			this._battler._bmotion.action.scaleY += 0.05;
		};
	    if (this._battler._bmotion.action.animation[1] >= 14) {
			this._battler._bmotion.action.animation[0] = 1;
			this._battler._bmotion.action.y2 = 0;
	    };
	} else if (this._battler._bmotion.action.animation[0] == 1) { 
	    this._battler._bmotion.action.scaleX += 0.12;
		this._battler._bmotion.action.scaleY -= 0.08;		
	    if (this._battler._bmotion.action.scaleX >= 2.50) {
			this._battler._bmotion.action.animation[0] = 2;
	    	this._battler._bmotion.action.wait = false;
		    this._movementDuration = 0;
	    };
	} else if (this._battler._bmotion.action.animation[0] == 2) { 	
        if (this._battler._bmotion.action.scaleX >= 0.00) {
			this._battler._bmotion.action.scaleX -= 0.14;
			if (this._battler._bmotion.action.scaleX < 0.00) {this._battler._bmotion.action.scaleX = 0}
		}
        if (this._battler._bmotion.action.scaleY < 0.00) {
			this._battler._bmotion.action.scaleY += 0.06;
			if (this._battler._bmotion.action.scaleY >= 0.00) {this._battler._bmotion.action.scaleY = 0}
		};
		if (this._battler._bmotion.action.scaleX == 0 && this._battler._bmotion.action.scaleY == 0  ) {
			this._battler.clearBaction();
			this._movementDuration = 0;
		};
	};
};

//==============================
// * setup B motion Action Jump Frontal
//==============================
Sprite_Battler.prototype.setupBMotionActionJumpFrontal = function() {
	this._battler._bmotion.action.animation[1] = -7;
	this._battler._bmotion.action.wait = true;
	this._movementDuration = 10
};

//==============================
// * update BMotion Jump Frontal
//==============================
Sprite_Battler.prototype.updateBmotionJumpFrontal = function() {
	this._battler._bmotion.action.animation[1] += 0.30;
	this._battler._bmotion.action.y2 += this._battler._bmotion.action.animation[1];	  
	if (this._battler._bmotion.action.animation[1] > 4) {
		this._battler._bmotion.action.wait = false;
		this._movementDuration = 0
	};
	if (this._battler._bmotion.action.animation[1] >= 7) {
		if (this._battler._bmotion.action.animation[0] == 0) {
			this._battler._bmotion.action.animation[0] = 1; 
	    	this._battler._bmotion.action.animation[1] = -7;
			this._battler._bmotion.action.animation[9] = 5;
		} else {
		    this._battler.clearBaction();
		};
	};
	if (this._battler._bmotion.action.animation[0] == 0) {
		this._battler._bmotion.action.scaleX += 0.015;
		this._battler._bmotion.action.y2 += 3;
	} else {
	    this._battler._bmotion.action.scaleX -= 0.015;
		this._battler._bmotion.action.y2 -= 3;
	};
	this._battler._bmotion.action.scaleY = this._battler._bmotion.action.scaleX;
};

//==============================
// * update BMotion Rotation
//==============================
Sprite_Battler.prototype.updateBmotionRotation = function() {	
	this._battler._bmotion.action.animation[1]++;
	var speed = this._battler.isActor() ? -0.2 : 0.2;
    this._battler._bmotion.action.rotation += speed;
    if (this._battler._bmotion.action.animation[1] > 30) {
		this._battler.clearBaction();
		this._movementDuration = 0;
	};
};

//==============================
// * update BMotion Side Right Slash
//==============================
Sprite_Battler.prototype.updateBmotionSideRightSlash = function() {
	  var speed = this._battler.isActor() ? -0.1 : 0.1;
      this._battler._bmotion.action.animation[0]++;
	  if (this._battler._bmotion.action.animation[0] < 10) {
          this._battler._bmotion.action.rotation -= speed;
	  } else if (this._battler._bmotion.action.animation[0] < 30) {
          this._battler._bmotion.action.rotation += speed;
 	  } else if (this._battler._bmotion.action.animation[0] < 40) {
          this._battler._bmotion.action.rotation -= speed;			
	  } else {
	      this._battler.clearBaction();
	  };		  
};

//==============================
// * update BMotion Frontal Side Slash Double
//==============================
Sprite_Battler.prototype.updateBmotionSideRightSlashDouble = function() {
	  var speed = this._battler.isActor() ? -0.2 : 0.2; 		  
      this._battler._bmotion.action.animation[0]++;
	  if (this._battler._bmotion.action.animation[0] < 5) {
          this._battler._bmotion.action.rotation -= speed;
	  } else if (this._battler._bmotion.action.animation[0] < 15) {
          this._battler._bmotion.action.rotation += speed;
 	  } else if (this._battler._bmotion.action.animation[0] < 25) {
          this._battler._bmotion.action.rotation -= speed;
	  } else if (this._battler._bmotion.action.animation[0] < 35) {
          this._battler._bmotion.action.rotation += speed;
 	  } else if (this._battler._bmotion.action.animation[0] < 40) {
          this._battler._bmotion.action.rotation -= speed;			  
	  } else {
	      this._battler.clearBaction();
	  };			  
};

//==============================
// * update BMotion Side Attack
//==============================
Sprite_Battler.prototype.updateBmotionSideAttack = function() {
	var speed = this._battler.isActor() ? -3 : 3;
	this._battler._bmotion.action.animation[0]++
	if (this._battler._bmotion.action.animation[0] < 20) {
		this._battler._bmotion.action.x += speed;	
	} else if (this._battler._bmotion.action.animation[0] < 40) {
		this._battler._bmotion.action.x -= speed;	  	
	} else {
		this._battler.clearBaction();
	};
};

//==============================
// * setup BMotion Frontal Side Slash Charge
//==============================
Sprite_Battler.prototype.setupBmotionSideRightSlashCharge = function() {
	this._battler._bmotion.action.animation[1] = -8;
	this._battler._bmotion.action.wait = true;
	this._movementDuration = 10	
};

//==============================
// * update BMotion Frontal Side Attack Charge
//==============================
Sprite_Battler.prototype.updateBmotionSideRightAttackCharge = function() { 		  
	  if (this._battler._bmotion.action.animation[0] == 0) {
		  this._battler._bmotion.action.animation[1] += 0.45;
		  this._battler._bmotion.action.y += this._battler._bmotion.action.animation[1];
		  var speed = this._battler.isActor() ? -3 : 3; 
		  this._battler._bmotion.action.x -= speed;  
		  if (this._battler._bmotion.action.animation[1] >= 8) {
			  this._battler._bmotion.action.animation[0] = 1
			  this._battler._bmotion.action.y = 0;  
		  };	  
	  } else if (this._battler._bmotion.action.animation[0] == 1) {
		  this._battler._bmotion.action.animation[0] = 2;
		  this._battler._bmotion.action.animation[3] = -this._battler._bmotion.action.x;
		  this._battler._bmotion.action.animation[9] = 10;
		  this._movementDuration = 0;
		  this._battler._bmotion.action.wait = false;		  
	  } else if (this._battler._bmotion.action.animation[0] == 2) {
          this._battler._bmotion.action.scaleX = 0
		  if (this._battler.isActor()) {
			  this._battler._bmotion.action.x -= 24;
			  if (this._battler._bmotion.action.x <= this._battler._bmotion.action.animation[3] ) {
				  this._battler._bmotion.action.x = this._battler._bmotion.action.animation[3];
				  this._battler._bmotion.action.animation[0] = 3;
			  };		  
	      } else {
			  this._battler._bmotion.action.x += 24;
			  if (this._battler._bmotion.action.x >= this._battler._bmotion.action.animation[3] ) {
				  this._battler._bmotion.action.x = this._battler._bmotion.action.animation[3];
				  this._battler._bmotion.action.animation[0] = 3;
			  };
	      };
	  } else if (this._battler._bmotion.action.animation[0] == 3) {
		  if (this._battler.isActor()) {
			  var speed = this._battler.isActor() ? -3 : 3;
			  this._battler._bmotion.action.x -= speed;
			  if (this._battler._bmotion.action.x >= 0) {	
				  this._battler.clearBaction()
			  };		  
		  } else {
			  var speed = this._battler.isActor() ? -3 : 3;
			  this._battler._bmotion.action.x -= speed;
			  if (this._battler._bmotion.action.x <= 0) {	
				  this._battler.clearBaction();
			  };	
		  };
	  };
};

//==============================
// * setup BMotion Wave Attack
//==============================
Sprite_Battler.prototype.setupBmotionWaveAttack = function() {
	this._battler._bmotion.action.wait = true;
	this._movementDuration = 10		
};

//==============================
// * update BMotion Wave Attack
//==============================
Sprite_Battler.prototype.updateBmotionWaveAttack = function() { 	
     this._battler._bmotion.action.animation[0]++;
	 var speed = 0.2;
     if (this._battler._bmotion.action.animation[0] < 5) {
		 this._battler._bmotion.action.rotation += speed;
	 } else if (this._battler._bmotion.action.animation[0] < 15) {
		 this._battler._bmotion.action.rotation -= speed;
	 } else if (this._battler._bmotion.action.animation[0] < 25) {
		 this._battler._bmotion.action.rotation += speed;
		 this._battler._bmotion.action.wait = false;
		 this._movementDuration = 0;		 
	 } else if (this._battler._bmotion.action.animation[0] < 35) {	 	 
		 this._battler._bmotion.action.rotation -= speed;
	 } else if (this._battler._bmotion.action.animation[0] < 45) {	
		 this._battler._bmotion.action.rotation += speed;
	 } else if (this._battler._bmotion.action.animation[0] < 50) {	
		 this._battler._bmotion.action.rotation -= speed;		 		 
	 } else {
		 this._battler._bmotion.action.rotation = 0;
		 this._battler.clearBaction();
		 this._movementDuration = 0	;
	 };
};

//==============================
// * update BMotion Shake Attack
//==============================
Sprite_Battler.prototype.updateBmotionShakeAttack = function() { 	
     this._battler._bmotion.action.animation[0]++;
     this._battler._bmotion.action.animation[1]++;
     if (this._battler._bmotion.action.animation[1] < 2) {return};
     this._battler._bmotion.action.animation[1] = 0
     this._battler._bmotion.action.x = Math.randomInt(30) - 15;
	 this._battler._bmotion.action.y = Math.randomInt(30) - 15;
     if (this._battler._bmotion.action.animation[0] > 40) {
		 this._battler.clearBaction();
		 this._movementDuration = 0	;		 
	 };
};

//==============================
// * update BMotion Frontal Attack Charge
//==============================
Sprite_Battler.prototype.updateBmotionFrontalAttackCharge = function() {
	 this._movementDuration = 10	;
	 this._battler._bmotion.action.wait = true;
     this._battler._bmotion.action.animation[0]++;
     if (this._battler._bmotion.action.animation[0] < 20) {
	 } else if (this._battler._bmotion.action.animation[0] < 30) {
		 this._battler._bmotion.action.scaleX = 0
		 this._battler._bmotion.action.y += 15
	     this._movementDuration = 0	;
	     this._battler._bmotion.action.wait = false;		 
	 } else if (this._battler._bmotion.action.animation[0] < 40) {	 
		 this._battler._bmotion.action.y -= 15
	 } else {
		 this._battler.clearBaction();
		 this._movementDuration = 0	;			
	 };
};

//==============================
// * update Bmotion Base
//==============================
Sprite_Battler.prototype.updateBmotionBase = function() {
    if (this.canUpdateIdleBMotion()) {this.updateIdleBmotion()};
	if (this.canUpdateActionBMotion()) {this.updateActionBmotion()};
	if (this.canUpdateDamageBmotion()) {this.updateDamageBmotion()};
};

//==============================
// * can Update Damage Bmotion
//==============================
Sprite_Battler.prototype.canUpdateDamageBmotion = function() {
    if (this._battler._bmotion.damage.mode < 0) {return false};
	if (this._battler._bmotion.damage.duration <= 0) {return false};
    return true;
};

//==============================
// * update Damage Bmotion
//==============================
Sprite_Battler.prototype.updateDamageBmotion = function() {
   if (this._battler._bmotion.damage.mode == 0) {
	   this.updateBmotionDamageShake();
   } else if (this._battler._bmotion.damage.mode == 1) {
	   this.updateBmotionDamageZoom();
   } else if (this._battler._bmotion.damage.mode == 2) {
	   this.updateBmotionDamageKnockBackRight();	 
   } else if (this._battler._bmotion.damage.mode == 3) {
	   this.updateBmotionDamageKnockBackLeft();
   };
};

//==============================
// * update Bmotion Damage Shake
//==============================
Sprite_Battler.prototype.updateBmotionDamageShake = function() {
   this._battler._bmotion.damage.animation[0]++
   if (this._battler._bmotion.damage.animation[0] < 1) {return};
   this._battler._bmotion.damage.animation[0] = 0;
   this._battler._bmotion.damage.x = -10 + Math.randomInt(20);
   this._battler._bmotion.damage.duration--;
   if (this._battler._bmotion.damage.duration <= 0) {
	   this._movementDuration = 0;
	   this._battler.clearBdamage();
   };
};

//==============================
// * update Bmotion Damage Zoom
//==============================
Sprite_Battler.prototype.updateBmotionDamageZoom = function() {
	var speed = 0.03;
	var range = 0.40;
	if (this._battler._bmotion.damage.animation[0] == 0) {
        this._battler._bmotion.damage.scaleX -= speed;
		this._battler._bmotion.damage.scaleY += speed
		if (this._battler._bmotion.damage.scaleX <= -range) {
		    this._battler._bmotion.damage.scaleX = -range;
			this._battler._bmotion.damage.scaleY = range;
			this._battler._bmotion.damage.animation[0] = 1;
		}
	} else if (this._battler._bmotion.damage.animation[0] == 1) {
		this._battler._bmotion.damage.scaleX += speed;
		this._battler._bmotion.damage.scaleY -= speed;
		if (this._battler._bmotion.damage.scaleX >= 0.00) {
		    this._battler.clearBdamage();
		    this._movementDuration = 0;			
		};
	};
};

//==============================
// * updateBmotionDamageKnockBackLeft
//==============================
Sprite_Battler.prototype.updateBmotionDamageKnockBackLeft = function() {
	var speed = 3;
	var rot = 0.01;
	var range = 40;
	if (this._battler._bmotion.damage.animation[0] == 0) {
        this._battler._bmotion.damage.x += speed;
		this._battler._bmotion.damage.rotation +=rot;
		if (this._battler._bmotion.damage.x >= range) {
		    this._battler._bmotion.damage.x = range;
			this._battler._bmotion.damage.animation[0] = 1;
		}
	} else if (this._battler._bmotion.damage.animation[0] == 1) {
		this._battler._bmotion.damage.x -= speed;
		this._battler._bmotion.damage.rotation -=rot;
		if (this._battler._bmotion.damage.x <= 0) {
		    this._battler.clearBdamage();
		    this._movementDuration = 0;			
		};
	};
};

//==============================
// * updateBmotionDamageKnockBackRight
//==============================
Sprite_Battler.prototype.updateBmotionDamageKnockBackRight = function() {
	var speed = 3;
	var rot = 0.01;
	var range = -40;
	if (this._battler._bmotion.damage.animation[0] == 0) {
        this._battler._bmotion.damage.x -= speed;
		this._battler._bmotion.damage.rotation -=rot;
		if (this._battler._bmotion.damage.x <= range) {
		    this._battler._bmotion.damage.x = range;
			this._battler._bmotion.damage.animation[0] = 1;
		}
	} else if (this._battler._bmotion.damage.animation[0] == 1) {
		this._battler._bmotion.damage.x += speed;
		this._battler._bmotion.damage.rotation +=rot;
		if (this._battler._bmotion.damage.x >= 0) {
		    this._battler.clearBdamage();
		    this._movementDuration = 0;			
		};
	};
};

//==============================
// * init Members
//==============================
var _mog_bmotion_sprtEnemy_initMembers = Sprite_Enemy.prototype.initMembers;
Sprite_Enemy.prototype.initMembers = function() {
    _mog_bmotion_sprtEnemy_initMembers.call(this);
	this._skipBlink = String(Moghunter.b_motion_disable_blink_damage) == "true" ? true : false;
};

//==============================
// * startBlink
//==============================
var _mog_bmotion_srtenemy_startBlink = Sprite_Enemy.prototype.startBlink
Sprite_Enemy.prototype.startBlink = function() {
	if (this._skipBlink) {this._effectDuration = 1;return};
	_mog_bmotion_srtenemy_startBlink.call(this);
};

//==============================
// * can Update Battler Motion
//==============================
Sprite_Battler.prototype.canUpdateBattlerMotion = function() {
    if (!this._battler) {return false};
	if (Imported.MOG_EmergeMotion) {
	    if (this._battler._emergeMotion.enabled) {return false};
	};
	return true;
};

//==============================
// * update Battler Motion
//==============================
Sprite_Battler.prototype.updateBattlerMotion = function() {
    if (this.needGetDataBmotion()) {this.setInitBmotionData()};
	if (this.canUpdateBmotion()) {this.updateBmotionBase()};
	if (this._battler) {this.updatepBmotionRealData()}; 
};

//==============================
// * update
//==============================
var _mog_bmotion_sptBat_update = Sprite_Battler.prototype.update;
Sprite_Battler.prototype.update = function() {
	_mog_bmotion_sptBat_update.call(this);
    if (this.canUpdateBattlerMotion()) {this.updateBattlerMotion()}
};

//==============================
// * Update Bmotion Real Data
//==============================
Sprite_Battler.prototype.updatepBmotionRealData = function() {
	 this.x += this._battler.bmotionX();
	 this.y += this._battler.bmotionY();
	 if (!this._battler.isDead()) {
	     this.scale.x = 1.00 + this._battler.bmotionScaleX();
	     this.scale.y = 1.00 + this._battler.bmotionScaleY();
	     this.rotation = this._battler.bmotionRotation();
	 };
	 if (this.scale.y < 0) {this.scale.y = 0};
};

//==============================
// * need Wait Update Move
//==============================
Sprite_Battler.prototype.needWaitUpdateMove = function() {
	if (!this._battler) {return false};
	if (this._battler._bmotion.action.wait) {return true};
	if (this._battler._bmotion.idle.wait) {return true};
	if (this._battler._bmotion.damage.wait) {return true};
	return false;
};

//==============================
// * Update Move
//==============================
var _mog_battlerMotion_sprbtr_updateMove = Sprite_Battler.prototype.updateMove;
Sprite_Battler.prototype.updateMove = function() {
	if (this.needWaitUpdateMove()) {return};
    _mog_battlerMotion_sprbtr_updateMove.call(this);
};

//==============================
// * refresh Bmotion Data
//==============================
Sprite_Battler.prototype.refreshBmotionData = function() {
	this._bmotion.initial = true;
	this._bmotion.shadow = false;
	if (this._bmotionShadow) {this.removeBShadow()};
	this._battler.setMotionData();
};

//==============================
// * update Idle Bmotion
//==============================
var _mog_bmotion_sprtBattler_updateIdleBmotion = Sprite_Battler.prototype.updateIdleBmotion;
Sprite_Battler.prototype.updateIdleBmotion = function() {
    _mog_bmotion_sprtBattler_updateIdleBmotion.call(this);
	if (this.needCreateBmotionShadow()) {this.createBmotionShadow()} 
};

//==============================
// * need Create Shadow
//==============================
Sprite_Battler.prototype.needCreateBmotionShadow = function() {
    if (this._bmotionShadow) {return false}
	if (!this._bmotion.shadow) {return false};
	if (!this._battler._bmotion.idle.float.enable) {return false};
	return true;
};

//==============================
// * create Bmotion Shadow
//==============================
Sprite_Battler.prototype.createBmotionShadow = function() {
    this._bmotionShadow = new Sprite(this.bitmap)
	this._bmotionShadow.anchor.x = 0.5
	this._bmotionShadow.anchor.y = 0.5
	this._bmotionShadow.y = 10;
	this._bmotionShadow.org = [this._bmotionShadow.x,this._bmotionShadow.y];
	this._bmotionShadow.zoomEffect = Moghunter.b_motion_shadowZoom == "true" ? true : false;
	this._bmotionShadow.scale.y = 0.20;
	this._bmotionShadow.opacity = Moghunter.b_motion_shadowOpacity;
	this._bmotionShadow.scale.mv = (this.bitmap.height * 10 / 100);
	this._bmotionShadow.setBlendColor([0, 0, 0, 255]);
	this.addChild(this._bmotionShadow); 
	if (Imported.MOG_EnemyPoses && this._battler._batPoses[0]) {
		w = this.bitmap.width / 4
		h = this.bitmap.height;
		this._bmotionShadow.setFrame(0,0,w,h)	
    };	
};

//==============================
// * setBmotionFloatActionOffset
//==============================
Sprite_Battler.prototype.setBmotionFloatActionOffset = function() {
	return 0
};

//==============================
// * update Bmotion Shadow
//==============================
Sprite_Battler.prototype.updateBmotionShadow = function() {
	 var mz = (this.bitmap.height * 10 / 100);
	 var nz = this.setBmotionFloatActionOffset()
		 var rz = 0
		 if (this.y < this._battler._bmotion.idle.float.groundH) {
			 rz = this._battler._bmotion.idle.float.groundH - this.y;
		 };	 
	 this._bmotionShadow.y = mz + this._bmotionShadow.org[1] - this._battler.bmotionFlyY() + nz + rz;
	 this._bmotionShadow.rotation = -this._battler._bmotion.action.rotation;
	 if (this._bmotionShadow.zoomEffect) {
		 var nz = Number((this._battler.bmotionFlyY() / 5) * 0.004);
  	     this._bmotionShadow.scale.x = 1.0 + nz;
	     this._bmotionShadow.scale.y = 0.2 + nz;
	 };
};

//==============================
// * update Bmotion Base
//==============================
var _mog_bmotion_sprtBattler_updateBmotionBase = Sprite_Battler.prototype.updateBmotionBase;
Sprite_Battler.prototype.updateBmotionBase = function() {
    _mog_bmotion_sprtBattler_updateBmotionBase.call(this);
	if (this._bmotionShadow) {this.updateBmotionShadow()};
};

//==============================
// * remove BShadow
//==============================
Sprite_Battler.prototype.removeBShadow = function() {
     this.removeChild(this._bmotionShadow);
	 this._bmotionShadow = null;
};
