Страница 3 из 19 ПерваяПервая 1234513 ... ПоследняяПоследняя
Показано с 21 по 30 из 185

Тема: Поиск плагинов.

  1. #21
    Хранитель Аватар для Темный
    Информация о пользователе
    Регистрация
    13.05.2011
    Сообщений
    2,449
    Записей в дневнике
    20
    Репутация: 50 Добавить или отнять репутацию

    По умолчанию

    демку не нашел го скрипт вытащил
    Спойлер плагин:
    Код:
    //=============================================================================
    // TMVplugin - ジャンプアクション
    // 作者: tomoaky (http://hikimoki.sakura.ne.jp/)
    // Version: 0.2b
    // 最終更新日: 2015/11/13
    //=============================================================================
    
    /*:
     * @plugindesc マップシーンをそれっぽいアクションゲームにします。
     * 細かい仕様などは配布サイトを参照してください。
     * @author tomoaky (http://hikimoki.sakura.ne.jp/)
     *
     * @param Gravity
     * @desc 重力の強さ。
     * 初期値: 0.004
     * @default 0.004
     *
     * @param Friction
     * @desc 通常の地形とイベントの摩擦の強さ。
     * 初期値: 0.001
     * @default 0.001
     *
     * @param Tile Margin Top
     * @desc 地形との接触判定に使う座標をどれだけ上へずらすか。
     * 初期値: 0.5
     * @default 0.5
     *
     * @param Steps For Turn
     * @desc 何マスの移動で1ターン経過するか。
     * 初期値: 20
     * @default 20
     *
     * @param All Dead Event
     * @desc 全滅時に起動するコモンイベント番号。
     * 初期値: 1
     * @default 1
     *
     * @param Event Collapse
     * @desc イベント戦闘不能時に崩壊エフェクトを使う。
     * 初期値: true( false でエフェクトなし)
     * @default true
     *
     * @param Floor Damage
     * @desc ダメージ床から受けるダメージ。
     * 初期値: 10
     * @default 10
     *
     * @param Flick Weight
     * @desc はじき飛ばせる重さの差。
     * 初期値: 1( 0 なら同じ重さではじき飛ばせる)
     * @default 1
     *
     * @param Flick Skill
     * @desc はじき飛ばしのダメージ計算に使うスキル番号。
     * 初期値: 1( 0 ならダメージなし)
     * @default 1
     *
     * @param Stage Region
     * @desc 足場として扱うリージョン番号。
     * 初期値: 60
     * @default 60
     *
     * @param Wall Region
     * @desc 壁として扱うリージョン番号。
     * 初期値: 61
     * @default 61
     *
     * @param Slip Wall Region
     * @desc 壁ジャンプができない壁として扱うリージョン番号。
     * 初期値: 62
     * @default 62
     *
     * @param Slip Floor Region
     * @desc すべる床として扱うリージョン番号。
     * 初期値: 63
     * @default 63
     *
     * @param Rough Floor Region
     * @desc 移動速度半減の床として扱うリージョン番号。
     * 初期値: 64
     * @default 64
     *
     * @param Marsh Floor Region
     * @desc 移動できない床として扱うリージョン番号。
     * 初期値: 65
     * @default 65
     *
     * @param Water Terrain Tag
     * @desc 水中として扱う地形タグ番号。
     * 初期値: 1
     * @default 1
     *
     * @param Use Event Se Swim
     * @desc 水に入ったときの効果音をイベントに適用する。
     * 初期値: true( false で適用しない)
     * @default true
     *
     * @param Se Jump
     * @desc ジャンプしたときに鳴らす効果音。
     * 初期値: {name: "Crossbow", volume: 90, pitch: 100, pan: 0}
     * @default {name: "Crossbow", volume: 90, pitch: 100, pan: 0}
     *
     * @param Se Dash
     * @desc ダッシュしたときに鳴らす効果音。
     * 初期値: {name: "Wind4", volume: 90, pitch: 50, pan: 0}
     * @default {name: "Wind4", volume: 90, pitch: 50, pan: 0}
     *
     * @param Se Flick
     * @desc ダッシュで相手をはじき飛ばしたときに鳴らす効果音。
     * 初期値: {name: "Damage1", volume: 90, pitch: 100, pan: 0}
     * @default {name: "Damage1", volume: 90, pitch: 100, pan: 0}
     *
     * @param Se Swim
     * @desc 水に入ったときと出たときに鳴らす効果音。
     * 初期値: {name: "Water1", volume: 90, pitch: 100, pan: 0}
     * @default {name: "Water1", volume: 90, pitch: 100, pan: 0}
     *
     * @param Se Change
     * @desc 操作キャラ切り替えのときに鳴らす効果音。
     * 初期値: {name: "Sword1", volume: 90, pitch: 100, pan: 0}
     * @default {name: "Sword1", volume: 90, pitch: 100, pan: 0}
     *
     * @help 横方向、縦方向ともにループマップには対応していません。
     *
     * アクション用のパラメータ(ジャンプ力など)はメモ欄を使って設定します。
     * アクター、装備、ステートのメモ欄に書かれたタグがパラメータになります。
     * ただし、アクターにタグがなかった場合は自動的に初期値が設定されます。
     *
     * メモ欄(アクター、装備、ステート)タグ:
     *   <move_speed:0.05>        # 歩行速度
     *   <jump_speed:0.14>        # ジャンプ力
     *   <swim_speed:0.02>        # 泳ぐ速度
     *   <ladder_speed:0.04>      # はしご移動速度
     *   <accele:0.003>           # 歩行加速度
     *   <ladder_accele:0.003>    # はしご移動加速度
     *   <jump_input:0>           # ジャンプ追加入力時間
     *   <swim_jump:0.1>          # 水中ジャンプ力
     *   <mulch_jump:1>           # 連続ジャンプ回数
     *   <weigth:2>               # 重さ
     *   <gravity:0.0045>         # 重力
     *   <friction:0>             # 摩擦
     *   <wall_jump>              # 壁ジャンプ
     *   <dash_speed_x:0.14>      # ダッシュ速度(横方向)
     *   <dash_speed_y:0.03>      # ダッシュ速度(縦方向)
     *   <dash_count:15>          # ダッシュ時間
     *   <dash_delay:30>          # ダッシュ後硬直時間
     *
     * メモ欄(イベント)タグ:
     *   <w:0.375>                # 当たり判定(中心から左右の端までのサイズ)
     *   <h:0.75>                 # 当たり判定(足元から頭までのサイズ)
     *   <enemy:1>                # バトラー(敵番号)
     *   <dead:A>                 # バトラー戦闘不能時セルフスイッチ
     *   <lift>                   # リフト属性
     *   <weigth:1>               # 重さ
     *   <gravity:0.004>          # 重力
     *
     * プラグインコマンド:
     *   JumpAction hp_damage -1 5     # プレイヤーに5ダメージを与える。
     *   JumpAction hp_damage 1 100    # イベント1番に100ダメージを与える。
     *   JumpAction hp 1 2             # イベント1番のHPをゲーム変数2番に代入。
     *   JumpAction force_x -1 0.1     # プレイヤーの X 速度を 0.1 に強制変更。
     *   JumpAction force_y 1 -0.15    # イベント1番の Y 速度を -0.15 に強制変更。
     *   JumpAction change_actor 2     # 操作キャラクターをアクター2番に変更。
     *
     */
    
    var Imported = Imported || {};
    Imported.TMJumpAction = true;
    
    var Tomoaky = Tomoaky || {};
    Tomoaky.JA = Tomoaky.JA || {};
    
    Tomoaky.Parameters = PluginManager.parameters('TMJumpAction');
    Tomoaky.Param = Tomoaky.Param || {};
    
    Tomoaky.Param.JAGravity = Number(Tomoaky.Parameters['Gravity']);
    Tomoaky.Param.JAFriction = Number(Tomoaky.Parameters['Friction']);
    Tomoaky.Param.JATileMarginTop = Number(Tomoaky.Parameters['Tile Margin Top']);
    Tomoaky.Param.JAStepsForTurn = Number(Tomoaky.Parameters['Steps For Turn']);
    Tomoaky.Param.JAAllDeadEvent = Number(Tomoaky.Parameters['All Dead Event']);
    Tomoaky.Param.JAEventCollapse = (Tomoaky.Parameters['Event Collapse']) === 'true' ? true : false;
    Tomoaky.Param.JAFloorDamage = Number(Tomoaky.Parameters['Floor Damage']);
    Tomoaky.Param.JAFlickWeight = Number(Tomoaky.Parameters['Flick Weight']);
    Tomoaky.Param.JAFlickSkill = Number(Tomoaky.Parameters['Flick Skill']);
    Tomoaky.Param.JAStageRegion = Number(Tomoaky.Parameters['Stage Region']);
    Tomoaky.Param.JAWallRegion = Number(Tomoaky.Parameters['Wall Region']);
    Tomoaky.Param.JASlipWallRegion = Number(Tomoaky.Parameters['Slip Wall Region']);
    Tomoaky.Param.JASlipFloorRegion = Number(Tomoaky.Parameters['Slip Floor Region']);
    Tomoaky.Param.JARoughFloorRegion = Number(Tomoaky.Parameters['Rough Floor Region']);
    Tomoaky.Param.JAMarshFloorRegion = Number(Tomoaky.Parameters['Marsh Floor Region']);
    Tomoaky.Param.JAWaterTerrainTag = Number(Tomoaky.Parameters['Water Terrain Tag']);
    Tomoaky.Param.JAUseEventSeSwim = (Tomoaky.Parameters['Use Event Se Swim']) === 'true' ? true : false;
    Tomoaky.Param.JASeJump = (new Function("return " + Tomoaky.Parameters['Se Jump']))();
    Tomoaky.Param.JASeDash = (new Function("return " + Tomoaky.Parameters['Se Dash']))();
    Tomoaky.Param.JASeFlick = (new Function("return " + Tomoaky.Parameters['Se Flick']))();
    Tomoaky.Param.JASeSwim = (new Function("return " + Tomoaky.Parameters['Se Swim']))();
    Tomoaky.Param.JASeChange = (new Function("return " + Tomoaky.Parameters['Se Change']))();
    
    //-----------------------------------------------------------------------------
    // Input
    //
    
    Input.keyMapper[65] = 'attack';
    Input.keyMapper[83] = 'jump';
    Input.keyMapper[68] = 'dash';
    
    Input.gamepadMapper = {
      0: 'ok',        // A
      1: 'cancel',    // B
      2: 'dash',      // X
      3: 'jump',      // Y
      4: 'pageup',    // LB
      5: 'pagedown',  // RB
      6: 'menu',      // LT
      7: 'attack',    // RT
      12: 'up',       // D-pad up
      13: 'down',     // D-pad down
      14: 'left',     // D-pad left
      15: 'right',    // D-pad right
    };
    
    //-----------------------------------------------------------------------------
    // Game_Battler
    //
    
    // メンバ変数の初期化
    Tomoaky.JA.Game_Battler_initMembers = Game_Battler.prototype.initMembers;
    Game_Battler.prototype.initMembers = function() {
      Tomoaky.JA.Game_Battler_initMembers.call(this);
      this._actionResult = new Game_ActionResult();
    };
    
    // リザルトのクリア
    Tomoaky.JA.Game_Battler_clearResult = Game_Battler.prototype.clearResult;
    Game_Battler.prototype.clearResult = function() {
      this._actionResult.hpDamage += this._result.hpDamage;
      this._actionResult.missed |= this._result.missed;
      this._actionResult.evaded |= this._result.evaded;
      this._actionResult.critical |= this._result.critical;
      this._actionResult.addedStates = this._actionResult.addedStates.concat(this._result.addedStates);
      this._actionResult.removedStates = this._actionResult.removedStates.concat(this._result.removedStates);
      Tomoaky.JA.Game_Battler_clearResult.call(this);
    };
    
    // ジャンプアクションリザルトのクリア
    Game_Battler.prototype.clearActionResult = function() {
      this._actionResult.clear();
    };
    
    // バトル終了処理
    Tomoaky.JA.Game_Battler_onBattleEnd = Game_Battler.prototype.onBattleEnd;
    Game_Battler.prototype.onBattleEnd = function() {
      Tomoaky.JA.Game_Battler_onBattleEnd.call(this);
      this.clearActionResult();
    };
    
    //-----------------------------------------------------------------------------
    // Game_Actor
    //
    
    // ダメージ床から受けるダメージ
    Game_Actor.prototype.basicFloorDamage = function() {
      return Tomoaky.Param.JAFloorDamage;
    };
    
    // 何マスの移動で1ターン経過するか
    Game_Actor.prototype.stepsForTurn = function() {
      return Tomoaky.Param.JAStepsForTurn;
    };
    
    // 付加されたステートの表示
    Tomoaky.JA.Game_Actor_showAddedStates = Game_Actor.prototype.showAddedStates;
    Game_Actor.prototype.showAddedStates = function() {
      if ($gameParty.inBattle()) {
        Tomoaky.JA.Game_Actor_showAddedStates.call(this);
      }
    };
    
    // 解除されたステートの表示
    Tomoaky.JA.Game_Actor_showRemovedStates = Game_Actor.prototype.showRemovedStates;
    Game_Actor.prototype.showRemovedStates = function() {
      if ($gameParty.inBattle()) {
        Tomoaky.JA.Game_Actor_showRemovedStates.call(this);
      }
    };
    
    // アクター(+装備、ステート)のタグからパラメータ(数値)をロード
    Game_Actor.prototype.loadTagParam = function(param_name, default_value) {
      var result = this.actor().meta[param_name];
      result = result ? Number(result) : default_value;
      var equips = this.equips().concat(this.states());
      for (var i = 0; i < equips.length; i++) {
        var item = equips[i];
        if (item && item.meta[param_name]) {
          result += Number(item.meta[param_name]);
        }
      }
      return result;
    };
    
    // アクター(+装備、ステート)のタグからパラメータ(真偽値)をロード
    Game_Actor.prototype.loadTagBool = function(param_name) {
      var equips = this.equips().concat(this.states(), this.actor());
      for (var i = 0; i < equips.length; i++) {
        var item = equips[i];
        if (item && item.meta[param_name]) {
          return true;
        }
      }
      return false;
    };
    
    // アクター(+装備、ステート)のタグからパラメータ(文字列)をロード
    Game_Actor.prototype.loadTagString = function(param_name, default_value) {
      var equips = this.states().concat(this.equips(), this.actor());
      for (var i = equips.length - 1; i >= 0; i--) {
        var item = equips[i];
        if (item && item.meta[param_name]) {
          return item.meta[param_name];
        }
      }
      return default_value;
    };
    
    //-----------------------------------------------------------------------------
    // Game_Map
    //
    
    // 乗り物は作らない
    Game_Map.prototype.createVehicles = function() {
        this._vehicles = [];
    };
    
    // 壁ジャンプが可能か判定する
    Game_Map.prototype.canWallJump = function(x, y, d) {
      if (!this.isValid(x, y)) {
        return false;
      }
      if (this.tileId(x, y, 5) == Tomoaky.Param.JASlipWallRegion) {
        return false;
      }
      return !this.isPassable(x, y, d);
    };
    
    // 通行チェック
    Game_Map.prototype.checkPassage = function(x, y, bit) {
      if (!this.isValid(x, y)) {
        return false;
      }
      var rg = this.tileId(x, y, 5);
      if (rg == Tomoaky.Param.JAWallRegion) {
        return false;
      }
      var flags = this.tilesetFlags();
      var tiles = this.allTiles(x, y);
      for (var i = 0; i < tiles.length; i++) {
        var flag = flags[tiles[i]];
        if (rg == Tomoaky.Param.JAStageRegion) {
          flag |= 1;
        }
        if ((flag & 0x10) !== 0)  //[*] No effect on passage
          continue;
        if ((flag & bit) === 0)   // [o] Passable
          return true;
        if ((flag & bit) === bit) // [x] Impassable
          return false;
      }
      return false;
    };
    
    //-----------------------------------------------------------------------------
    // Game_CharacterBase
    //
    
    // メンバ変数の初期化
    Tomoaky.JA.Game_CharacterBase_initMembers = Game_CharacterBase.prototype.initMembers;
    Game_CharacterBase.prototype.initMembers = function() {
      Tomoaky.JA.Game_CharacterBase_initMembers.call(this);
      this._needsRefresh = false;
      this._vx = 0;
      this._vy = 0;
      this._vxPlus = 0;
      this._lastY = 0;
      this._lastSwim = false;
      this._collideW = 0.375;
      this._collideH = 0.75;
      this._collideIds = [];
      this._landingObject = null;
      this._landingRegion = 0;
      this._ladder = false;
      this._lift = false;
      this._lockCount = 0;
      this._moveCount = 0;
      this._jumpInput = 0;
      this._dashCount = 0;
      this._friction = 0;
      this._moveSpeed = 0.05;
      this._jumpSpeed = 0.14;
      this._swimSpeed = 0.02;
      this._dashSpeedX = 0.1;
      this._dashSpeedY = 0.03;
      this._ladderSpeed = 0.04;
      this._accele = 0.003
      this._ladderAccele = 0.003;
      this._jumpInputTime = 0;
      this._dashCountTime = 30;
      this._swimJump = 0.1;
      this._mulchJump = 1;
      this._weight = 0;
      this._gravity = Tomoaky.Param.JAGravity;
    };
    
    // バトラーの取得
    Game_CharacterBase.prototype.battler = function() {
      return null;
    };
    
    // バトラーが設定されているか
    Game_CharacterBase.prototype.isBattler = function() {
      return this.battler() !== null;
    };
    
    // 移動状態判定
    Game_CharacterBase.prototype.isMoving = function() {
      return this._moveCount > 0;
    };
    
    // ダッシュ状態判定
    Game_CharacterBase.prototype.isDashing = function() {
      return this._dashCount > 0;
    };
    
    // 地面に立っているか
    Game_CharacterBase.prototype.isLanding = function() {
      return this._landingObject !== null;
    };
    
    // およぎ状態判定
    Game_CharacterBase.prototype.isSwimming = function() {
      return this.terrainTag() == Tomoaky.Param.JAWaterTerrainTag;
    };
    
    // ロック状態判定
    Game_CharacterBase.prototype.isLocking = function() {
      return this._lockCount > 0;
    };
    
    // 自分の重さで相手をはじき飛ばせるかチェック
    Game_CharacterBase.prototype.checkFlickWeight = function(weight) {
      return this._weight >= weight + Tomoaky.Param.JAFlickWeight;
    };
    
    // リフレッシュフラグを立てる
    Game_CharacterBase.prototype.requestRefresh = function() {
      this._needsRefresh = true;
    };
    
    // 移動速度のセット
    Game_CharacterBase.prototype.setMoveSpeed = function(moveSpeed) {
      this._moveSpeed = moveSpeed / 100 + 0.02;
    };
    
    // フレーム更新
    Game_CharacterBase.prototype.update = function() {
      this.updateMove();
      this.updateAnimation();
      this.updateCollideIds();
      if (this.isDashing()) {
        this.updateDashCount();
      }
      if (this.isMoving()) {
        this.updateMoveCount();
      } else {
        this.updateStop();
      }
      if (this.isSwimming() != this._lastSwim) {
        this.updateSwiming();
      }
      if (this._needsRefresh) {
        this.refresh();
      }
    };
    
    // 画面 X 座標の取得
    Game_CharacterBase.prototype.screenX = function() {
      var tw = $gameMap.tileWidth();
      return Math.round(this.scrolledX() * tw);
    };
    
    // 画面 Y 座標の取得
    Game_CharacterBase.prototype.screenY = function() {
      var th = $gameMap.tileHeight();
      return Math.round(this.scrolledY() * th);
    };
    
    // 移動の処理
    Game_CharacterBase.prototype.updateMove = function() {
      this.updateGravity();
      this.updateFriction();
      if (this._vx != 0 || this._vxPlus != 0) {
        this._realX += this._vx + this._vxPlus;
        if (this._vx > 0) {
          this.collideMapRight();
          if (!this._through) {
              this.collideCharacterRight();
          }
        } else {
          this.collideMapLeft();
          if (!this._through) {
              this.collideCharacterLeft();
          }
        }
        this._x = Math.floor(this._realX);
      }
      if (this._vy != 0) {
        this._landingObject = null;
        this._realY += this._vy;
        if (this._vy > 0) {
          this.collideMapDown();
          if (!this._through) {
              this.collideCharacterDown();
          }
        } else {
          this.collideMapUp();
          if (!this._through) {
              this.collideCharacterUp();
          }
        }
        this._y = Math.floor(this._realY);
        this._lastY = Math.floor(this._realY + Tomoaky.Param.JATileMarginTop);
      }
    };
    
    // 重力の処理
    Game_CharacterBase.prototype.updateGravity = function() {
      this._vy = Math.min(this._vy + this._gravity, this.maxFallSpeed());
    };
    
    // 最大落下速度の取得
    Game_CharacterBase.prototype.maxFallSpeed = function() {
      return this.isSwimming() ? 0.04 : 0.6;
    };
    
    // 摩擦の処理
    Game_CharacterBase.prototype.updateFriction = function() {
      if (this.isLanding()) {
        if (Object.prototype.toString.call(this._landingObject) !== '[object Array]') {
          if (this._landingObject._lift) {
            this._vxPlus = this._landingObject._vx;
          }
        }
      } else {
        this._vxPlus = 0;
      }
    };
    
    // 移動カウントの処理
    Game_CharacterBase.prototype.updateMoveCount = function() {
      this._moveCount--;
      if (this._moveCount == 0 && !this.isDashing()) {
        this._vx = 0;
        if (this._gravity == 0) {
          this._vy = 0;
        }
      }
    };
    
    // ダッシュカウントの処理
    Game_CharacterBase.prototype.updateDashCount = function() {
      this._dashCount--;
    };
    
    // 衝突しているキャラクターの処理
    Game_CharacterBase.prototype.updateCollideIds = function() {
      for(var i = this._collideIds.length - 1; i >= 0; i--) {
        var id = this._collideIds[i];
        var character = id < 0 ? $gamePlayer : $gameMap.event(id);
        if (!this.isCollide(character)) {
          this._collideIds.splice(i, 1);
        }
      }
    };
    
    // キャラクターとの直線距離を返す
    Game_CharacterBase.prototype.distFromCharacter = function(character) {
      var x = this._realX - character._realX;
      var y = this._realY - character._realY;
      return Math.sqrt(x * x + y * y);
    };
    
    // マップとの衝突判定(上方向)
    Game_CharacterBase.prototype.collideMapUp = function() {
      var lx = Math.floor(this._realX - this._collideW);
      var rx = Math.floor(this._realX + this._collideW);
      var y = Math.floor(this._realY - this._collideH);
      for (var x = lx; x <= rx; x++) {
        if (!$gameMap.isPassable(x, y, 8)) {
          this._realY = y + 1.001 + this._collideH;
          this._vy = 0;
          this._jumpInput = 0;
          return;
        }
      }
    };
    
    // マップとの衝突判定(下方向)
    Game_CharacterBase.prototype.collideMapDown = function() {
      var y = Math.floor(this._realY + Tomoaky.Param.JATileMarginTop);
      if (y == this._lastY) {
        return;
      }
      var lx = Math.floor(this._realX - this._collideW);
      var rx = Math.floor(this._realX + this._collideW);
      var y = Math.floor(this._realY + Tomoaky.Param.JATileMarginTop);
      for (var x = lx; x <= rx; x++) {
        if (!$gameMap.isPassable(x, y, 2)) {
          if (this._ladder && $gameMap.isLadder(x, y)) {
            continue;
          }
          this._landingObject = [x, y];
          this._landingRegion = $gameMap.regionId(x, y);
          this.getLand(y - Tomoaky.Param.JATileMarginTop - 0.001);
          return;
        }
      }
    };
    
    // マップとの衝突判定(左方向)
    Game_CharacterBase.prototype.collideMapLeft = function() {
      var ty = Math.floor(this._realY - this._collideH);
      var by = Math.floor(this._realY + Tomoaky.Param.JATileMarginTop);
      var x = Math.floor(this._realX - this._collideW);
      for (var y = ty; y <= by; y++) {
        if (!$gameMap.isPassable(x, y, 4)) {
          this._realX = x + 1.001 + this._collideW;
          this._vx = 0;
          return;
        }
      }
    };
    
    // マップとの衝突判定(右方向)
    Game_CharacterBase.prototype.collideMapRight = function() {
      var ty = Math.floor(this._realY - this._collideH);
      var by = Math.floor(this._realY + Tomoaky.Param.JATileMarginTop);
      var x = Math.floor(this._realX + this._collideW);
      for (var y = ty; y <= by; y++) {
        if (!$gameMap.isPassable(x, y, 6)) {
          this._realX = x - 0.001 - this._collideW;
          this._vx = 0;
          return;
        }
      }
    };
    
    // キャラクターとの衝突判定(上方向)
    Game_CharacterBase.prototype.collideCharacterUp = function() {
      var targets = this.collideTargets();
      for (var i = 0; i < targets.length; i++) {
        var character = targets[i];
        if (this.isCollide(character)) {
          this.addCollideId(character.eventId());
          if (!character._through) {
            if (this._lift) {
              character._realY = this._realY - this._collideH - 0.001;
              character._vy = this._vy;
              character._landingObject = this;
              character.resetJump();
            } else {
              this._realY = character._realY + this._collideH + 0.001;
              this._vy = 0;
              this._jumpInput = 0;
            }
          }
        }
      }
    };
    
    // キャラクターとの衝突判定(下方向)
    Game_CharacterBase.prototype.collideCharacterDown = function() {
      var targets = this.collideTargets();
      for (var i = 0; i < targets.length; i++) {
        var character = targets[i];
        if (this.isCollide(character)) {
          this.addCollideId(character.eventId());
          if (!character._through) {
            if (this._lift) {
              character._realY = this._realY + character._collideH + 0.001;
              character._jumpInput = 0;
              character._vy = this._vy;
            } else {
              this._landingObject = character;
              this._landingRegion = -1;
              this.getLand(character._realY - character._collideH - 0.001);
            }
          }
        }
      }
    };
    
    // キャラクターとの衝突判定(左方向)
    Game_CharacterBase.prototype.collideCharacterLeft = function() {
      var targets = this.collideTargets();
      for (var i = 0; i < targets.length; i++) {
        var character = targets[i];
        if (this.isCollide(character)) {
          this.addCollideId(character.eventId());
          if (!character._through) {
            if (this._lift || this._ladder) {
              character._realX = this._realX - this._collideW - 0.001 - character._collideW;
              character._vx = this._vx;
            } else {
              if (this.isDashing() && this.checkFlickWeight(character._weight)) {
                character.flick(this);
              }
              this._realX = character._realX + character._collideW + 0.001 + this._collideW;
              this._vx = 0;
            }
          }
        }
      }
    };
    
    // キャラクターとの衝突判定(右方向)
    Game_CharacterBase.prototype.collideCharacterRight = function() {
      var targets = this.collideTargets();
      for (var i = 0; i < targets.length; i++) {
        var character = targets[i];
        if (this.isCollide(character)) {
          this.addCollideId(character.eventId());
          if (!character._through) {
            if (this._lift || this._ladder) {
              character._realX = this._realX + this._collideW + 0.001 + character._collideW;
              character._vx = this._vx;
            } else {
              if (this.isDashing() && this.checkFlickWeight(character._weight)) {
                character.flick(this);
              }
              this._realX = character._realX - character._collideW - 0.001 - this._collideW;
              this._vx = 0;
            }
          }
        }
      }
    };
    
    // キャラクターとの衝突判定
    Game_CharacterBase.prototype.isCollide = function(character) {
      if (this.eventId() == character.eventId()) {
        return false;
      }
      if (this._realX - this._collideW <= character._realX + character._collideW) {
        if (this._realX + this._collideW >= character._realX - character._collideW) {
          if (this._realY - this._collideH <= character._realY) {
            if (this._realY >= character._realY - character._collideH) {
              return true;
            }
          }
        }
      }
      return false;
    };
    
    // 衝突判定を行う対象を返す
    Game_CharacterBase.prototype.collideTargets = function() {
      return $gameMap.events().concat($gamePlayer);
    };
    
    // 衝突している対象を追加する
    Game_CharacterBase.prototype.addCollideId = function(id) {
      if (this._collideIds.indexOf(id) == -1) {
        this._collideIds.push(id);
        this.checkEventTriggerCollide(id);
      }
    };
    
    // 地面に降りる
    Game_CharacterBase.prototype.getLand = function(y) {
      this._realY = y;
      this._vy = 0;
      this.resetJump();
      if (this._ladder) {
        this.getOffLadder();
      }
    };
    // ジャンプカウントのリセット
    Game_CharacterBase.prototype.resetJump = function() {
      this._jumpCount = this._mulchJump;
      this._jumpInput = 0;
    };
    
    // 泳ぎ状態の更新
    Game_CharacterBase.prototype.updateSwiming = function() {
      this._lastSwim = !this._lastSwim;
    };
    
    // まっすぐに移動
    Game_CharacterBase.prototype.moveStraight = function(d) {
      this.setDirection(d);
      this._moveCount = Math.floor(1 / this._moveSpeed);
      switch (d) {
      case 2:
        this._vy = this._moveSpeed;
        return;
      case 4:
        this._vx = -this._moveSpeed;
        return;
      case 6:
        this._vx = this._moveSpeed;
        return;
      default:
        this._vy = -this._moveSpeed;
        return;
      }
    };
    
    // ジャンプ
    Game_CharacterBase.prototype.jump = function(xPlus, yPlus) {
      if (this._jumpCount <= 0) {
        return;
      }
      this._jumpCount--;
      if (xPlus < 0) {
        this.setDirection(4);
        var speed = this._moveSpeed / 100 + 0.02;
        this._moveCount = Math.floor(1 / speed);
        this._vx = -speed;
      } else if (xPlus > 0) {
        this.setDirection(6);
        var speed = this._moveSpeed / 100 + 0.02;
        this._moveCount = Math.floor(1 / speed);
        this._vx = speed;
      }
      if (yPlus != 0) {
        this._vy = -Math.abs(yPlus) / 100;
      } else {
        this._vy = this.isSwimming() ? -this._swimJump : -this._jumpSpeed;
      }
      this.resetStopCount();
      this.straighten();
    };
    
    // ダッシュ
    Game_CharacterBase.prototype.dash = function(direction) {
      this._dashCount = this._dashCountTime;
      if (direction == 4) {
        this._vx = -this._dashSpeedX;
      } else {
        this._vx = this._dashSpeedX;
      }
      this._vy = -this._dashSpeedY;
      this._moveCount = this._dashCount / 2;
      this.resetStopCount();
      this.straighten;
    };
    
    // はじかれ
    Game_CharacterBase.prototype.flick = function(user) {
      if (Tomoaky.Param.JAFlickSkill > 0 && user.isBattler() && this.isBattler()) {
        this.applySkill(user, Tomoaky.Param.JAFlickSkill);
      }
      this._vx = user._vx;
      var n = 1 + (user._weight - this._weight - Tomoaky.Param.JAFlickWeight) / 2;
      this._moveCount = Math.floor(n / Math.abs(this._vx));
      AudioManager.playSe(Tomoaky.Param.JASeFlick);
    };
    
    // スキルの適用
    Game_CharacterBase.prototype.applySkill = function(user, skillId) {
      user.battler().clearActions();
      var action = new Game_Action(user.battler());
      action.setSkill(skillId);
      user.battler().setAction(0, action);
      user.battler().action(0).apply(this.battler());
    };
    
    // ダメージの処理
    Game_CharacterBase.prototype.updateDamage = function() {
      this.battler().clearResult();
      if (this.battler()._actionResult.hpDamage != 0) {
        this.battler()._actionResult.hpAffected = true;
        this.battler()._actionResult.missed = false;
        this.battler()._actionResult.evaded = false;
        this.damaged();
        if (this.battler().isActor()) {
          SoundManager.playActorDamage();
        } else {
          SoundManager.playEnemyDamage();
        }
      } else if (this.battler()._actionResult.missed ||
                 this.battler()._actionResult.evaded) {
        this.damaged();
        SoundManager.playMiss();
      }
      if (this.battler()._actionResult.isStatusAffected()) {
        this.requestRefresh();
      }
    };
    
    // ダメージ後の処理
    Game_CharacterBase.prototype.damaged = function() {
    //  if (this.isLocking()) {
    //    return;
    //  }
      this.battler().startDamagePopup();
      if (this.battler()._actionResult.isStateAdded(this.battler().deathStateId())) {
        this.battlerDead();
      }
    };
    
    // 座標のセット
    Game_CharacterBase.prototype.setPosition = function(x, y) {
      this._x = Math.floor(x);
      this._y = Math.floor(y);
      this._realX = x;
      this._realY = y;
    };
    
    // 指定位置へ移動
    Tomoaky.JA.Game_CharacterBase_locate = Game_CharacterBase.prototype.locate;
    Game_CharacterBase.prototype.locate = function(x, y) {
      Tomoaky.JA.Game_CharacterBase_locate.call(this, x, y);
      this._vx = 0;
      this._vy = 0;
      this._lastY = -1;
      this._lastSwim = this.isSwimming();
      this._collideIds = [];
    };
    
    //-----------------------------------------------------------------------------
    // Game_Character
    //
    
    // ランダムに移動
    Game_Character.prototype.moveRandom = function() {
      if (this._gravity == 0) {
        this.moveStraight(2 + Math.randomInt(4) * 2);
      } else {
        this.moveStraight(4 + Math.randomInt(2) * 2);
      }
    };
    
    // キャラクターの方を向く
    Game_Character.prototype.turnTowardCharacter = function(character) {
        var sx = this._realX - character._realX;
        var sy = this._realY - character._realY;
        if (Math.abs(sx) > Math.abs(sy)) {
            this.setDirection(sx > 0 ? 4 : 6);
        } else if (sy !== 0) {
            this.setDirection(sy > 0 ? 8 : 2);
        }
    };
    
    // キャラクターの反対を向く
    Game_Character.prototype.turnAwayFromCharacter = function(character) {
        var sx = this._realX - character._realX;
        var sy = this._realY - character._realY;
        if (Math.abs(sx) > Math.abs(sy)) {
            this.setDirection(sx > 0 ? 6 : 4);
        } else if (sy !== 0) {
            this.setDirection(sy > 0 ? 2 : 8);
        }
    };
    
    //-----------------------------------------------------------------------------
    // Game_Player
    //
    
    // メンバ変数の初期化
    Tomoaky.JA.Game_Player_initMembers = Game_Player.prototype.initMembers;
    Game_Player.prototype.initMembers = function() {
      Tomoaky.JA.Game_Player_initMembers.call(this);
      this._memberIndex = 0;
      this._realSteps = 0;
      this._wallJump = false;
      this._dashDelay = 0;
      this._dashDelayTime = 30;
    };
    
    // 画面中央の X 座標
    Game_Player.prototype.centerX = function() {
        return (Graphics.width / $gameMap.tileWidth() - 1) / 2.0 + 0.5;
    };
    
    // 画面中央の Y 座標
    Game_Player.prototype.centerY = function() {
        return (Graphics.height / $gameMap.tileHeight() - 1) / 2.0 + 0.5;
    };
    
    // イベントIDを返す
    Game_Player.prototype.eventId = function() {
      return -1;
    };
    
    // アクターの取得
    Game_Player.prototype.actor = function() {
      return $gameParty.allMembers()[this._memberIndex];
    };
    
    // バトラーを返す
    Game_Player.prototype.battler = function() {
      return this.actor();
    };
    
    // バトラーが設定されているか
    Game_Player.prototype.isBattler = function() {
      return this.actor() ? true : false;
    };
    
    // ダッシュ状態判定
    Game_Player.prototype.isDashing = function() {
      return this._dashCount > 0;
    };
    
    // 衝突判定を行う対象を返す
    Game_Player.prototype.collideTargets = function() {
      return $gameMap.events();
    };
    
    // はしごにつかまる
    Game_Player.prototype.getOnLadder = function(downFlag) {
      this._ladder = true;
      this._landingObject = null;
      this.setDirection(8);
      var lastRealX = this._realX;
      this._realX = Math.floor(this._realX) + 0.5;
      if (downFlag) {
        this._realY += 0.04;
      }
      this._lastY = Math.floor(this._realY + Tomoaky.Param.JATileMarginTop);
      if (lastRealX < this._realX) {
        this.collideCharacterLeft();
      } else if (lastRealX > this._realX) {
        this.collideCharacterRight();
      }
      this._vx = 0;
      this._vy = 0;
      this.resetJump();
    };
    
    // はしごから降りる
    Game_Player.prototype.getOffLadder = function() {
      this._ladder = false;
      this.setDirection(Input.isPressed('left') ? 4 : 6);
    };
    
    // 衝突したイベントの起動
    Game_Player.prototype.checkEventTriggerCollide = function(id) {
      if (!$gameMap.isEventRunning()) {
        var event = $gameMap.event(id);
    //    if (event.isTriggerIn([1, 2]) && event.isNormalPriority() === normal) {
        if (event.isTriggerIn([1, 2])) {
          event.start();
        }
      }
    };
    
    // フレーム更新
    Game_Player.prototype.update = function(sceneActive) {
      var lastScrolledX = this.scrolledX();
      var lastScrolledY = this.scrolledY();
      if (this.isLocking()) {
        this.updateLock();
      } else {
        if (sceneActive && this.canMove()) {
          this.updateInput();
        }
        var lastRealX = this._realX;
        var lastRealY = this._realY;
        Game_Character.prototype.update.call(this);
        this.updateSteps(lastRealX, lastRealY);
      }
      this.updateScroll(lastScrolledX, lastScrolledY);
      if (this.isBattler()) {
        this.updateDamage();
      }
    //  this._followers.update();
    };
    
    // 入力の処理
    Game_Player.prototype.updateInput = function() {
      this.changeByInput();
      this.moveByInput();
      this.jumpByInput();
      this.dashByInput();
      this.triggerButtonAction();
    };
    
    // 重力の処理
    Game_Player.prototype.updateGravity = function() {
      if (!this._ladder) {
        Game_CharacterBase.prototype.updateGravity.call(this);
      }
    };
    
    // 摩擦の処理
    Game_Player.prototype.updateFriction = function() {
      Game_Character.prototype.updateFriction.call(this);
      this._friction = 0;
      if (this._ladder) {
        var n = this.isMoving() ? 0 : Tomoaky.Param.JAFriction;
        if (this._vy != 0) {
          if (this._vy > 0) {
            this._vy = Math.max(this._vy - n, 0);
          } else {
            this._vy = Math.min(this._vy + n, 0);
          }
        }
      } else {
        // ダッシュ状態でなければ移動速度を超えないように調整する
        if (!this.isDashing()) {
          var n = this.isSwimming() ? this._swimSpeed : this._moveSpeed;
          if (this._vx < -n) {
            this._vx = Math.min(this._vx + 0.005, -n);
          } else if (this._vx > n) {
            this._vx = Math.max(this._vx - 0.005, n);
          }
        }
        if (this.isLanding()) {
          var n = Tomoaky.Param.JAFriction;
          switch (this._landingRegion) {
          case Tomoaky.Param.JASlipFloorRegion:
            this._friction = 0.0025;
            return;
          case Tomoaky.Param.JARoughFloorRegion:
            if (Math.abs(this._vx) > this._moveSpeed / 2) {
              this._vx = this._vx > 0 ? this._moveSpeed / 2 : -this._moveSpeed / 2;
            }
            break;
          case Tomoaky.Param.JAMarshFloorRegion:
            this._vx = 0;
            return;
          }
          if (!this.isMoving()) {
            if (this._vx > 0) {
              this._vx = Math.max(this._vx - n, 0);
            } else if (this._vx < 0) {
              this._vx = Math.min(this._vx + n, 0);
            }
          }
        }
      }
    };
    
    // 移動カウントの処理
    Game_Player.prototype.updateMoveCount = function() {
      this._moveCount--;
    };
    
    // ロック状態の処理
    Game_Player.prototype.updateLock = function() {
      this._lockCount--;
      if (this._lockCount == 0) {
        if (this.battler().isDead()) {
          this.changeMember(1);
        }
      }
    };
    
    // ボタン入力による操作アクター変更
    Game_Player.prototype.changeByInput = function() {
      if (Input.isTriggered('pageup')) {
        this.changeMember(-1);
      } else if (Input.isTriggered('pagedown')) {
        this.changeMember(1);
      }
    };
    
    // 操作メンバーの切り替え
    Game_Player.prototype.changeMember = function(shift) {
      if ($gameParty.isAllDead()) {
        return;
      }
      this._memberIndex = (this._memberIndex + shift + $gameParty.size()) % $gameParty.size();
      while (this.actor().isDead()) {
        this._memberIndex = (this._memberIndex + shift + $gameParty.size()) % $gameParty.size();
      }
      this.refresh();
      this.battler().requestEffect('appear');
      AudioManager.playSe(Tomoaky.Param.JASeChange);
    };
    
    // 方向ボタン入力による移動処理
    Game_Player.prototype.moveByInput = function() {
      if (this._ladder) {
        if (Input.isPressed('up')) {
          this.setDirection(8);
          this._vy = Math.max(this._vy - this._ladderAccele, -this._ladderSpeed);
          this._moveCount = 4;
          this.resetStopCount();
        } else if (Input.isPressed('down')) {
          this.setDirection(8);
          this._vy = Math.min(this._vy + this._ladderAccele, this._ladderSpeed);
          this._moveCount = 4;
          this.resetStopCount();
        }
        if (!this.isCollideLadder(false)) {
          this.getOffLadder();
        }
      } else {
        if (!this.isDashing()) {
          if (Input.isPressed('left')) {
            this.setDirection(4);
            if (this._vx > -this._moveSpeed) {
              var accele = Math.max(this._accele - this._friction, 0);
              this._vx = Math.max(this._vx - accele, -this._moveSpeed);
            }
            this._moveCount = 4;
          } else if (Input.isPressed('right')) {
            this.setDirection(6);
            if (this._vx < this._moveSpeed) {
              var accele = Math.max(this._accele - this._friction, 0);
              this._vx = Math.min(this._vx + accele, this._moveSpeed);
            }
            this._moveCount = 4;
          }
        }
        if (Input.isPressed('up')) {
          if (this.isCollideLadder(false)) {
            this.getOnLadder(false);
          }
        } else if (Input.isPressed('down')) {
          if (this.isCollideLadder(true)) {
            this.getOnLadder(true);
          }
        }
      }
    };
    
    // ボタン入力によるジャンプ処理
    Game_Player.prototype.jumpByInput = function() {
      if (this._jumpInput > 0) {
        this._jumpInput--;
        if (Input.isPressed('jump')) {
          this._vy = -this._jumpSpeed;
        } else {
          this._jumpInput = 0;
        }
      }
      if (Input.isTriggered('jump')) {
        if (this.isSwimming()) {
          this.resetJump();
          this._jumpCount--;
        } else if (this._jumpCount > 0) {
          this._jumpCount--;
        } else {
          if (!this._wallJump) {
            return;
          }
          if (this._direction == 4) {
            var x = Math.floor(this._realX - this._collideW - 0.16);
          } else {
            var x = Math.floor(this._realX + this._collideW + 0.16);
          }
          var y = Math.floor(this._realY);
          if (!$gameMap.canWallJump(x, y, this._direction)) {
            return;
          }
          this.wallJump();
        }
        if (this._ladder) {
          this.getOffLadder();
          if (Input.isPressed('down')) {
            return;
          }
        }
        this._jumpInput = this._jumpInputTime;
        if (this.isDashing()) {
          this._dashCount = this._dashCountTime;
          this._vx = this._direction == 4 ? -this._dashSpeedX : this._dashSpeedX
        }
        this._vy = this.isSwimming() ? -this._swimJump : -this._jumpSpeed;
        this.resetStopCount();
        this.straighten();
        AudioManager.playSe(Tomoaky.Param.JASeJump);
      }
    };
    
    // 壁ジャンプの X 方向処理
    Game_Player.prototype.wallJump = function() {
      this._vx = this._direction == 4 ? this._moveSpeed : -this._moveSpeed;
      this.setDirection(this.reverseDir(this._direction));
    };
    
    // ボタン入力によるダッシュ処理
    Game_Player.prototype.dashByInput = function() {
      if (this._dashDelay > 0) {
        this._dashDelay--;
      } else {
        if (Input.isTriggered('dash') && !this.isSwimming()) {
          if (!$gameMap.isDashDisabled()) {
            if (this._ladder) {
              this.getOffLadder()
              if (Input.isPressed('left')) {
                this.setDirection(4);
              } else if (Input.isPressed('right')) {
                this.setDirection(6);
              }
            } else {
              if (!this._direction == 4) {
                this.setDirection(6);
              }
            }
            this.dash(this._direction);
            this._dashDelay = this._dashDelayTime;
            AudioManager.playSe(Tomoaky.Param.JASeDash);
          }
        }
      }
    };
    
    // 歩数の処理
    Game_Player.prototype.updateSteps = function(lastRealX, lastRealY) {
      this._realSteps += Math.max(Math.abs(this._realX - lastRealX), Math.abs(this._realY - lastRealY));
      if (this._realSteps >= 1) {
        if (this.isNormal()) {
          $gameParty.increaseSteps();
          if (this.actor()) {
            this.actor().onPlayerWalk();
          }
        }
        this._realSteps = 0;
      }
    };
    
    // 泳ぎ状態の更新
    Game_Player.prototype.updateSwiming = function() {
      Game_Character.prototype.updateSwiming.call(this);
      AudioManager.playSe(Tomoaky.Param.JASeSwim);
    };
    
    // マップイベントの起動
    Game_Player.prototype.startMapEvent = function(triggers, normal) {
      if (!$gameMap.isEventRunning()) {
        var targets = this.collideTargets();
        for (var i = 0; i < targets.length; i++) {
          var character = targets[i];
          if (this.isCollide(character)) {
            if (character.isTriggerIn(triggers) && character.isNormalPriority() === normal) {
              if (character.isBattler() && character.battler().isDead()) {
                continue;
              }
              character.start();
            }
          }
        }
      }
    };
    
    // 接触しているイベントの起動判定
    Game_Player.prototype.checkEventTriggerHere = function(triggers) {
        if (this.canStartLocalEvents()) {
            this.startMapEvent(triggers, false);
        }
    };
    
    // 正面のイベント起動判定
    Game_Player.prototype.checkEventTriggerThere = function(triggers) {
      var lastRealX = this._realX;
      this._realX += this._direction == 4 ? -this._collideW : this._collideW
      this.startMapEvent(triggers, true);
      this._realX += this._direction == 4 ? -0.5 : 0.5;
      if (!$gameMap.isAnyEventStarting() && $gameMap.isCounter(Math.floor(this._realX), this._y)) {
        this._realX += this._direction == 4 ? -0.5 : 0.5;
        this.startMapEvent(triggers, true);
      }
      this._realX = lastRealX;
    };
    
    // はしごと接触しているか
    Game_Player.prototype.isCollideLadder = function(downFlag) {
      var x = Math.floor(this._realX);
      if (downFlag) {
        if (!this.isLanding()) {
          return false;
        }
        var y = Math.floor(this._realY + Tomoaky.Param.JATileMarginTop + 0.1);
        return $gameMap.isLadder(x, y);
      } else {
        var ty = Math.floor(this._realY - this._collideH);
        var by = Math.floor(this._realY + Tomoaky.Param.JATileMarginTop);
        for (var y = ty; y <= by; y++) {
          if ($gameMap.isLadder(x, y)) {
            return true;
          }
        }
        return false;
      }
    };
    
    // 場所移動の実行
    Game_Player.prototype.performTransfer = function() {
      if (this.isTransferring()) {
        this.setDirection(this._newDirection);
        if (this._newMapId !== $gameMap.mapId() || this._needsMapReload) {
          $gameMap.setup(this._newMapId);
          this._needsMapReload = false;
        }
        this.locate(this._newX + 0.5, this._newY + 1 - Tomoaky.Param.JATileMarginTop);
        this.refresh();
        this.clearTransferInfo();
      }
    };
    
    // リフレッシュ
    Game_Player.prototype.refresh = function() {
      var actor = this.actor();
      if (actor) {
        var characterName = actor.characterName();
        var characterIndex = actor.characterIndex();
        this._moveSpeed = actor.loadTagParam('move_speed', 0.05);
        this._jumpSpeed = actor.loadTagParam('jump_speed', 0.14);
        this._swimSpeed = actor.loadTagParam('swim_speed', 0.02);
        this._ladderSpeed = actor.loadTagParam('ladder_speed', 0.04);
        this._accele = actor.loadTagParam('accele', 0.003);
        this._ladderAccele = actor.loadTagParam('ladder_accele', 0.003);
        this._jumpInputTime = actor.loadTagParam('jump_input', 0);
        this._swimJump = actor.loadTagParam('swim_jump', 0.1);
        this._mulchJump = actor.loadTagParam('mulch_jump', 1);
        this._weight = actor.loadTagParam('weight', 0);
        this._gravity = actor.loadTagParam('gravity', 0.0045);
        this._wallJump = actor.loadTagBool('wall_jump');
        this._dashSpeedX = actor.loadTagParam('dash_speed_x', 0.14);
        this._dashSpeedY = actor.loadTagParam('dash_speed_y', 0.03);
        this._dashCountTime = actor.loadTagParam('dash_count', 15);
        this._dashDelayTime = actor.loadTagParam('dash_delay', 30);
      } else {
        var characterName = '';
        var characterIndex = 0;
      }
      this.setImage(characterName, characterIndex);
      this._followers.refresh();
      this._needsRefresh = false;
    };
    
    // 飛行船の乗り降り
    Game_Player.prototype.getOnOffVehicle = function() {
      return false;
    };
    
    // まっすぐに移動
    Game_Player.prototype.moveStraight = function(d) {
      Game_Character.prototype.moveStraight.call(this, d);
    };
    
    // バトラーが戦闘不能になったときの処理
    Game_Player.prototype.battlerDead = function() {
      this._lockCount = 32;
      this.battler().requestEffect('collapse');
      SoundManager.playActorCollapse();
      if ($gameParty.isAllDead()) {
        $gameTemp.reserveCommonEvent(Tomoaky.Param.JAAllDeadEvent);
      }
    };
    
    //-----------------------------------------------------------------------------
    // Game_Event
    //
    
    // 初期化
    Game_Event.prototype.initialize = function(mapId, eventId) {
        Game_Character.prototype.initialize.call(this);
        this._mapId = mapId;
        this._eventId = eventId;
        this.locate(this.event().x + 0.5, this.event().y + 1);
        this.refresh();
    };
    
    // メンバ変数の初期化
    Tomoaky.JA.Game_Event_initMembers = Game_Event.prototype.initMembers;
    Game_Event.prototype.initMembers = function() {
      Tomoaky.JA.Game_Event_initMembers.call(this);
      this._enemyId = 0;
      this._battler = null;
      this._deadSelfSwitch = null;
      this._commentParams = {};
    };
    
    // バトラーの取得
    Game_Event.prototype.battler = function() {
      return this._battler;
    };
    
    // 衝突したイベントの起動
    Game_Event.prototype.checkEventTriggerCollide = function(id) {
      if (!$gameMap.isEventRunning() && id < 0) {
        if (this.isTriggerIn([1, 2]) && this.isNormalPriority() === normal) {
          this.start();
        }
      }
    };
    
    // リフレッシュ
    Tomoaky.JA.Game_Event_refresh = Game_Event.prototype.refresh;
    Game_Event.prototype.refresh = function() {
      Tomoaky.JA.Game_Event_refresh.call(this);
      this._needsRefresh = false;
    };
    
    // イベントページのセットアップ
    Tomoaky.JA.Game_Event_setupPage = Game_Event.prototype.setupPage;
    Game_Event.prototype.setupPage = function() {
      Tomoaky.JA.Game_Event_setupPage.call(this);
      if (this._pageIndex >= 0) {
        this.loadCommentParams();
        this._enemyId = Number(this.loadTagParam('enemy', 0));
        this._deadSelfSwitch = this.loadTagParam('dead', null);
        this._collideW = Number(this.loadTagParam('w', 0.375));
        this._collideH = Number(this.loadTagParam('h', 0.75));
        this._weight = Number(this.loadTagParam('weight', 0));
        this._gravity = Number(this.loadTagParam('gravity', Tomoaky.Param.JAGravity));
        this._lift = this.loadTagParam('lift', false);
        this.setupBattler();
      }
    };
    
    // 先頭にある注釈からパラメータ群をロード
    Game_Event.prototype.loadCommentParams = function() {
      this._commentParams = {};
      var re = /<([^<>:]+)(:?)([^>]*)>/g;
      var list = this.list();
      for (var i = 0; i < list.length; i++) {
        var command = list[i];
        if (command) {
          if (command.code == 108 || command.code == 408) {
            for (;;) {
              var match = re.exec(command.parameters[0]);
              if (match) {
                if (match[2] === ':') {
                  this._commentParams[match[1]] = match[3];
                } else {
                  this._commentParams[match[1]] = true;
                }
              } else {
                break;
              }
            }
          } else {
            break;
          }
        }
      }
    };
    
    // メモ欄と注釈のタグからパラメータ(数値)をロード
    Game_Event.prototype.loadTagParam = function(param_name, default_value) {
      if (this._commentParams[param_name]) {
        return this._commentParams[param_name];
      } else if (this.event().meta[param_name]) {
        return this.event().meta[param_name];
      } else {
        return default_value;
      }
    };
    
    // バトラーのセットアップ
    Game_Event.prototype.setupBattler = function() {
      if (this._enemyId > 0) {
        this._battler = new Game_Enemy(this._enemyId, this.eventId(), 0);
      } else {
        this._battler = null;
      }
    };
    
    // フレーム更新
    Tomoaky.JA.Game_Event_update = Game_Event.prototype.update;
    Game_Event.prototype.update = function() {
      if (this.isLocking()) {
        this.updateLock();
      } else {
        Tomoaky.JA.Game_Event_update.call(this);
      }
      if (this.isBattler()) {
        this.updateDamage();
      }
    };
    
    // 摩擦の処理
    Game_Event.prototype.updateFriction = function() {
      Game_Character.prototype.updateFriction.call(this);
      if (!this.isMoving() && this._vx != 0) {
        if (!this.isDashing()) {
          console.log(this._moveSpeed);
          var n = this.isSwimming() ? this._swimSpeed : this._moveSpeed;
          if (this._vx < -n) {
            this._vx = Math.min(this._vx + 0.005, -n);
          }
          if (this._vx > n) {
            this._vx = Math.max(this._vx - 0.005, n);
          }
        }
        if (this.isLanding()) {
          var n = Tomoaky.Param.JAFriction;
          switch (this._landingRegion) {
          case Tomoaky.Param.JASlipFloorRegion:
            return;
          case Tomoaky.Param.JARoughFloorRegion:
            if (Math.abs(this._vx) > this._moveSpeed / 2) {
              this._vx = this._vx > 0 ? this._moveSpeed / 2 : -this._moveSpeed / 2;
            }
            break;
          case Tomoaky.Param.JAMarshFloorRegion:
            this._vx = 0;
            return;
          }
          if (this._vx > 0) {
            this._vx = Math.max(this._vx - n, 0);
          } else {
            this._vx = Math.min(this._vx + n, 0);
          }
        }
      }
    };
    
    // バトラーが戦闘不能になったときの処理
    Game_Event.prototype.battlerDead = function() {
      if (Tomoaky.Param.JAEventCollapse) {
        this._lockCount = 32;
        this.battler().requestEffect('collapse');
        SoundManager.playEnemyCollapse();
      } else {
        this._lockCount = 1;
      }
    };
    
    // ロック状態の処理
    Game_Event.prototype.updateLock = function() {
      this._lockCount--;
      if (this._lockCount == 0) {
        if (this.battler().isDead()) {
          if (this._deadSelfSwitch !== null) {
            var key = [$gameMap.mapId(), this._eventId, this._deadSelfSwitch];
            $gameSelfSwitches.setValue(key, true);
            this.refresh();
            if (this.isBattler()) {
              if (Tomoaky.Param.JAEventCollapse) {
                this.battler().requestEffect('appear');
              }
            } else {
            }
          } else {
            this.erase();
          }
        }
      }
    };
    
    // 泳ぎ状態の更新
    Game_Event.prototype.updateSwiming = function() {
      Game_Character.prototype.updateSwiming.call(this);
      if (Tomoaky.Param.JAUseEventSeSwim) {
        var origin_volume = Tomoaky.Param.JASeSwim.volume;
        var volume = Math.floor(origin_volume * ((15 - this.distFromCharacter($gamePlayer))) / 15);
        var se = {};
        se.name = Tomoaky.Param.JASeSwim.name;
        se.volume = Math.min(Math.max(volume, 0), 100);
        se.pitch = Tomoaky.Param.JASeSwim.pitch;
        if (this._realX < $gamePlayer._realX) {
          se.pan = Math.max(Math.floor((this._realX - $gamePlayer._realX) * 10, -100));
        } else {
          se.pan = Math.min(Math.floor((this._realX - $gamePlayer._realX) * 10, 100));
        }
        AudioManager.playSe(se);
      }
    };
    
    //-----------------------------------------------------------------------------
    // Game_Interpreter
    //
    
    // イベントの位置変更
    Game_Interpreter.prototype.command203 = function() {
        var character = this.character(this._params[0]);
        if (character) {
            if (this._params[1] === 0) {  // Direct designation
                character.locate(this._params[2] + 0.5, this._params[3] + 1);
            } else if (this._params[1] === 1) {  // Designation with variables
                var x = $gameVariables.value(this._params[2] + 0.5);
                var y = $gameVariables.value(this._params[3] + 1);
                character.locate(x, y);
            } else {  // Exchange with another event
                var character2 = this.character(this._params[2]);
                if (character2) {
                    character.swap(character2);
                }
            }
            if (this._params[4] > 0) {
                character.setDirection(this._params[4]);
            }
        }
        return true;
    };
    
    // 装備の変更
    Tomoaky.JA.Game_Interpreter_command319 = Game_Interpreter.prototype.command319;
    Game_Interpreter.prototype.command319 = function() {
      Tomoaky.JA.Game_Interpreter_command319.call(this);
      if (!$gameParty.inBattle()) {
        $gamePlayer.requestRefresh();
      }
      return true;
    };
    
    // プラグインコマンド
    Tomoaky.JA.Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
    Game_Interpreter.prototype.pluginCommand = function(command, args) {
      Tomoaky.JA.Game_Interpreter_pluginCommand.call(this, command, args);
      if (command === 'JumpAction') {
        switch (args[0]) {
        case 'hp_damage':
          var character = this.character(args[1]);
          if (character && character.isBattler()) {
            character.battler().clearResult();
            character.battler().gainHp(-Number(args[2]));
          }
          break;
        case 'hp':
          var character = this.character(args[1]);
          if (character && character.isBattler()) {
            $gameVariables.setValue(Number(args[2]), character.battler().hp);
          }
          break;
        case 'force_x':
          var character = this.character(args[1]);
          if (character) {
            character._vx = Number(args[2]);
          }
          break;
        case 'force_y':
          var character = this.character(args[1]);
          if (character) {
            character._vy = Number(args[2]);
          }
          break;
        case 'change_actor':
          var actor = $gameActors.actor(Number(args[1]));
          if (actor && actor.isAlive() && $gameParty.members().contains(actor)) {
            var newIndex = $gameParty.members().indexOf(actor);
            if ($gamePlayer._memberIndex != newIndex) {
              $gamePlayer._memberIndex = newIndex;
              $gamePlayer.refresh();
              $gamePlayer.battler().requestEffect('appear');
            }
          }
          break;
        }
      }
    };
    
    //-----------------------------------------------------------------------------
    // Sprite_Character
    //
    
    // メンバ変数の初期化
    Tomoaky.JA.Sprite_Character_initMembers = Sprite_Character.prototype.initMembers;
    Sprite_Character.prototype.initMembers = function() {
      Tomoaky.JA.Sprite_Character_initMembers.call(this);
      this._damages = [];
      this._effectType = null;
      this._effectDuration = 0;
      this._shake = 0;
    };
    
    // フレーム更新
    Tomoaky.JA.Sprite_Character_update = Sprite_Character.prototype.update;
    Sprite_Character.prototype.update = function() {
      Tomoaky.JA.Sprite_Character_update.call(this);
      this.updateDamagePopup();
      if (this._character.isBattler()) {
        this.updateEffect();
      }
    };
    
    // その他の更新
    Tomoaky.JA.Sprite_Character_updateOther = Sprite_Character.prototype.updateOther;
    Sprite_Character.prototype.updateOther = function() {
      if (!this.isEffecting()) {
        Tomoaky.JA.Sprite_Character_updateOther.call(this);
      }
    };
    
    // ダメージポップアップの更新
    Sprite_Character.prototype.updateDamagePopup = function() {
      if (this._character.isBattler()) {
        this.setupDamagePopup();
      }
      if (this._damages.length > 0) {
        for (var i = 0; i < this._damages.length; i++) {
          this._damages[i].update();
          this._damages[i].x = this.x;
          this._damages[i].y = this.y;
        }
        if (!this._damages[0].isPlaying()) {
          this.parent.removeChild(this._damages[0]);
          this._damages.shift();
        }
      }
    };
    
    // ダメージポップアップのセット
    Sprite_Character.prototype.setupDamagePopup = function() {
      var battler = this._character.battler();
      if (battler.isDamagePopupRequested()) {
        var sprite = new Sprite_MapDamage();
        sprite.x = this.x;
        sprite.y = this.y;
        sprite.z = this.z + 1;
        sprite.setup(battler);
        this._damages.push(sprite);
        this.parent.addChild(sprite);
        battler.clearDamagePopup();
        battler.clearActionResult();
      }
    };
    
    // エフェクトのセット
    Sprite_Character.prototype.setupEffect = function() {
      if (this._character.battler().isEffectRequested()) {
        this.startEffect(this._character.battler().effectType());
        this._character.battler().clearEffect();
      }
    };
    
    // エフェクトの開始
    Sprite_Character.prototype.startEffect = function(effectType) {
      this._effectType = effectType;
      switch (this._effectType) {
      case 'appear':
        this.startAppear();
        break;
      case 'whiten':
        this.startWhiten();
        break;
      case 'blink':
        this.startBlink();
        break;
      case 'collapse':
        this.startCollapse();
        break;
      case 'bossCollapse':
        this.startBossCollapse();
        break;
      }
      this.revertToNormal();
    };
    
    // 出現エフェクトの開始
    Sprite_Character.prototype.startAppear = function() {
      this._effectDuration = 16;
    };
    
    // 白フラッシュエフェクトの開始
    Sprite_Character.prototype.startWhiten = function() {
      this._effectDuration = 16;
    };
    
    // 点滅エフェクトの開始
    Sprite_Character.prototype.startBlink = function() {
      this._effectDuration = this._character._invincibleTime;
    };
    
    // 崩壊エフェクトの開始
    Sprite_Character.prototype.startCollapse = function() {
      this._effectDuration = 32;
      this._appeared = false;
    };
    
    // ボス崩壊エフェクトの開始
    Sprite_Character.prototype.startBossCollapse = function() {
      this._effectDuration = this.bitmap.height;
      this._appeared = false;
    };
    
    // エフェクトの更新
    Sprite_Character.prototype.updateEffect = function() {
      this.setupEffect();
      if (this._effectDuration > 0) {
        this._effectDuration--;
        switch (this._effectType) {
        case 'appear':
          this.updateAppear();
          break;
        case 'whiten':
          this.updateWhiten();
          break;
        case 'blink':
          this.updateBlink();
          break;
        case 'collapse':
          this.updateCollapse();
          break;
        case 'bossCollapse':
          this.updateBossCollapse();
          break;
        }
        if (this._effectDuration === 0) {
          this._effectType = null;
          this.setBlendColor([0, 0, 0, 0]);
        }
      }
    };
    
    // エフェクトが実行中かどうか
    Sprite_Character.prototype.isEffecting = function() {
      return this._effectType !== null;
    };
    
    // スプライトのエフェクト設定を元に戻す
    Sprite_Character.prototype.revertToNormal = function() {
      this._shake = 0;
      this.blendMode = 0;
      this.opacity = 255;
      this.setBlendColor([0, 0, 0, 0]);
    };
    
    // 出現エフェクトの更新
    Sprite_Character.prototype.updateAppear = function() {
      this.opacity = (16 - this._effectDuration) * 16;
    };
    
    // 白フラッシュエフェクトの更新
    Sprite_Character.prototype.updateWhiten = function() {
      var alpha = 128 - (16 - this._effectDuration) * 10;
      this.setBlendColor([255, 255, 255, alpha]);
    };
    
    // 点滅エフェクトの更新
    Sprite_Character.prototype.updateBlink = function() {
      this.opacity = (this._effectDuration % 10 < 5) ? 255 : 0;
    };
    
    // 崩壊エフェクトの更新
    Sprite_Character.prototype.updateCollapse = function() {
      this.blendMode = Graphics.BLEND_ADD;
      this.setBlendColor([255, 128, 128, 128]);
      this.opacity *= this._effectDuration / (this._effectDuration + 1);
    };
    
    // ボス崩壊エフェクトの更新
    Sprite_Character.prototype.updateBossCollapse = function() {
      this._shake = this._effectDuration % 2 * 4 - 2;
      this.blendMode = Graphics.BLEND_ADD;
      this.opacity *= this._effectDuration / (this._effectDuration + 1);
      this.setBlendColor([255, 255, 255, 255 - this.opacity]);
      if (this._effectDuration % 20 === 19) {
        SoundManager.playBossCollapse2();
      }
    };
    
    //-----------------------------------------------------------------------------
    // Sprite_MapDamage
    //
    
    function Sprite_MapDamage() {
      this.initialize.apply(this, arguments);
    }
    
    Sprite_MapDamage.prototype = Object.create(Sprite_Damage.prototype);
    Sprite_MapDamage.prototype.constructor = Sprite_MapDamage;
    
    // セットアップ
    Sprite_MapDamage.prototype.setup = function(target) {
      var result = target._actionResult;
      if (result.missed || result.evaded) {
        this.createMiss();
      } else if (result.hpAffected) {
        this.createDigits(0, result.hpDamage);
      } else if (target.isAlive() && result.mpDamage !== 0) {
        this.createDigits(2, result.mpDamage);
      }
      if (result.critical) {
        this.setupCriticalEffect();
      }
    };
    
    //-----------------------------------------------------------------------------
    // Spriteset_Map
    //
    
    // 飛行船の影の作成
    Spriteset_Map.prototype.createShadow = function() {
    };
    
    // 飛行船の影の更新
    Spriteset_Map.prototype.updateShadow = function() {
    };
    
    //-----------------------------------------------------------------------------
    // Scene_Map
    //
    
    Tomoaky.JA.Scene_Map_start = Scene_Map.prototype.start;
    Scene_Map.prototype.start = function() {
      Tomoaky.JA.Scene_Map_start.call(this);
      $gamePlayer.refresh();
    };
    
    Scene_Base.prototype.checkGameover = function() {
    };
    
    Scene_Map.prototype.processMapTouch = function() {
    };



  2. #22

    По умолчанию

    а мне бы вот от этой боёвки плагин нужен
    из игры Stories of Sheidh II - All Stars Demo v1.1



  3. #23

    По умолчанию

    Цитата Сообщение от Темный Посмотреть сообщение
    демку не нашел го скрипт вытащил
    Спойлер плагин:
    Код:
    //=============================================================================
    // TMVplugin - ジャンプアクション
    // 作者: tomoaky (http://hikimoki.sakura.ne.jp/)
    // Version: 0.2b
    // 最終更新日: 2015/11/13
    //=============================================================================
    
    /*:
     * @plugindesc マップシーンをそれっぽいアクションゲームにします。
     * 細かい仕様などは配布サイトを参照してください。
     * @author tomoaky (http://hikimoki.sakura.ne.jp/)
     *
     * @param Gravity
     * @desc 重力の強さ。
     * 初期値: 0.004
     * @default 0.004
     *
     * @param Friction
     * @desc 通常の地形とイベントの摩擦の強さ。
     * 初期値: 0.001
     * @default 0.001
     *
     * @param Tile Margin Top
     * @desc 地形との接触判定に使う座標をどれだけ上へずらすか。
     * 初期値: 0.5
     * @default 0.5
     *
     * @param Steps For Turn
     * @desc 何マスの移動で1ターン経過するか。
     * 初期値: 20
     * @default 20
     *
     * @param All Dead Event
     * @desc 全滅時に起動するコモンイベント番号。
     * 初期値: 1
     * @default 1
     *
     * @param Event Collapse
     * @desc イベント戦闘不能時に崩壊エフェクトを使う。
     * 初期値: true( false でエフェクトなし)
     * @default true
     *
     * @param Floor Damage
     * @desc ダメージ床から受けるダメージ。
     * 初期値: 10
     * @default 10
     *
     * @param Flick Weight
     * @desc はじき飛ばせる重さの差。
     * 初期値: 1( 0 なら同じ重さではじき飛ばせる)
     * @default 1
     *
     * @param Flick Skill
     * @desc はじき飛ばしのダメージ計算に使うスキル番号。
     * 初期値: 1( 0 ならダメージなし)
     * @default 1
     *
     * @param Stage Region
     * @desc 足場として扱うリージョン番号。
     * 初期値: 60
     * @default 60
     *
     * @param Wall Region
     * @desc 壁として扱うリージョン番号。
     * 初期値: 61
     * @default 61
     *
     * @param Slip Wall Region
     * @desc 壁ジャンプができない壁として扱うリージョン番号。
     * 初期値: 62
     * @default 62
     *
     * @param Slip Floor Region
     * @desc すべる床として扱うリージョン番号。
     * 初期値: 63
     * @default 63
     *
     * @param Rough Floor Region
     * @desc 移動速度半減の床として扱うリージョン番号。
     * 初期値: 64
     * @default 64
     *
     * @param Marsh Floor Region
     * @desc 移動できない床として扱うリージョン番号。
     * 初期値: 65
     * @default 65
     *
     * @param Water Terrain Tag
     * @desc 水中として扱う地形タグ番号。
     * 初期値: 1
     * @default 1
     *
     * @param Use Event Se Swim
     * @desc 水に入ったときの効果音をイベントに適用する。
     * 初期値: true( false で適用しない)
     * @default true
     *
     * @param Se Jump
     * @desc ジャンプしたときに鳴らす効果音。
     * 初期値: {name: "Crossbow", volume: 90, pitch: 100, pan: 0}
     * @default {name: "Crossbow", volume: 90, pitch: 100, pan: 0}
     *
     * @param Se Dash
     * @desc ダッシュしたときに鳴らす効果音。
     * 初期値: {name: "Wind4", volume: 90, pitch: 50, pan: 0}
     * @default {name: "Wind4", volume: 90, pitch: 50, pan: 0}
     *
     * @param Se Flick
     * @desc ダッシュで相手をはじき飛ばしたときに鳴らす効果音。
     * 初期値: {name: "Damage1", volume: 90, pitch: 100, pan: 0}
     * @default {name: "Damage1", volume: 90, pitch: 100, pan: 0}
     *
     * @param Se Swim
     * @desc 水に入ったときと出たときに鳴らす効果音。
     * 初期値: {name: "Water1", volume: 90, pitch: 100, pan: 0}
     * @default {name: "Water1", volume: 90, pitch: 100, pan: 0}
     *
     * @param Se Change
     * @desc 操作キャラ切り替えのときに鳴らす効果音。
     * 初期値: {name: "Sword1", volume: 90, pitch: 100, pan: 0}
     * @default {name: "Sword1", volume: 90, pitch: 100, pan: 0}
     *
     * @help 横方向、縦方向ともにループマップには対応していません。
     *
     * アクション用のパラメータ(ジャンプ力など)はメモ欄を使って設定します。
     * アクター、装備、ステートのメモ欄に書かれたタグがパラメータになります。
     * ただし、アクターにタグがなかった場合は自動的に初期値が設定されます。
     *
     * メモ欄(アクター、装備、ステート)タグ:
     *   <move_speed:0.05>        # 歩行速度
     *   <jump_speed:0.14>        # ジャンプ力
     *   <swim_speed:0.02>        # 泳ぐ速度
     *   <ladder_speed:0.04>      # はしご移動速度
     *   <accele:0.003>           # 歩行加速度
     *   <ladder_accele:0.003>    # はしご移動加速度
     *   <jump_input:0>           # ジャンプ追加入力時間
     *   <swim_jump:0.1>          # 水中ジャンプ力
     *   <mulch_jump:1>           # 連続ジャンプ回数
     *   <weigth:2>               # 重さ
     *   <gravity:0.0045>         # 重力
     *   <friction:0>             # 摩擦
     *   <wall_jump>              # 壁ジャンプ
     *   <dash_speed_x:0.14>      # ダッシュ速度(横方向)
     *   <dash_speed_y:0.03>      # ダッシュ速度(縦方向)
     *   <dash_count:15>          # ダッシュ時間
     *   <dash_delay:30>          # ダッシュ後硬直時間
     *
     * メモ欄(イベント)タグ:
     *   <w:0.375>                # 当たり判定(中心から左右の端までのサイズ)
     *   <h:0.75>                 # 当たり判定(足元から頭までのサイズ)
     *   <enemy:1>                # バトラー(敵番号)
     *   <dead:A>                 # バトラー戦闘不能時セルフスイッチ
     *   <lift>                   # リフト属性
     *   <weigth:1>               # 重さ
     *   <gravity:0.004>          # 重力
     *
     * プラグインコマンド:
     *   JumpAction hp_damage -1 5     # プレイヤーに5ダメージを与える。
     *   JumpAction hp_damage 1 100    # イベント1番に100ダメージを与える。
     *   JumpAction hp 1 2             # イベント1番のHPをゲーム変数2番に代入。
     *   JumpAction force_x -1 0.1     # プレイヤーの X 速度を 0.1 に強制変更。
     *   JumpAction force_y 1 -0.15    # イベント1番の Y 速度を -0.15 に強制変更。
     *   JumpAction change_actor 2     # 操作キャラクターをアクター2番に変更。
     *
     */
    
    var Imported = Imported || {};
    Imported.TMJumpAction = true;
    
    var Tomoaky = Tomoaky || {};
    Tomoaky.JA = Tomoaky.JA || {};
    
    Tomoaky.Parameters = PluginManager.parameters('TMJumpAction');
    Tomoaky.Param = Tomoaky.Param || {};
    
    Tomoaky.Param.JAGravity = Number(Tomoaky.Parameters['Gravity']);
    Tomoaky.Param.JAFriction = Number(Tomoaky.Parameters['Friction']);
    Tomoaky.Param.JATileMarginTop = Number(Tomoaky.Parameters['Tile Margin Top']);
    Tomoaky.Param.JAStepsForTurn = Number(Tomoaky.Parameters['Steps For Turn']);
    Tomoaky.Param.JAAllDeadEvent = Number(Tomoaky.Parameters['All Dead Event']);
    Tomoaky.Param.JAEventCollapse = (Tomoaky.Parameters['Event Collapse']) === 'true' ? true : false;
    Tomoaky.Param.JAFloorDamage = Number(Tomoaky.Parameters['Floor Damage']);
    Tomoaky.Param.JAFlickWeight = Number(Tomoaky.Parameters['Flick Weight']);
    Tomoaky.Param.JAFlickSkill = Number(Tomoaky.Parameters['Flick Skill']);
    Tomoaky.Param.JAStageRegion = Number(Tomoaky.Parameters['Stage Region']);
    Tomoaky.Param.JAWallRegion = Number(Tomoaky.Parameters['Wall Region']);
    Tomoaky.Param.JASlipWallRegion = Number(Tomoaky.Parameters['Slip Wall Region']);
    Tomoaky.Param.JASlipFloorRegion = Number(Tomoaky.Parameters['Slip Floor Region']);
    Tomoaky.Param.JARoughFloorRegion = Number(Tomoaky.Parameters['Rough Floor Region']);
    Tomoaky.Param.JAMarshFloorRegion = Number(Tomoaky.Parameters['Marsh Floor Region']);
    Tomoaky.Param.JAWaterTerrainTag = Number(Tomoaky.Parameters['Water Terrain Tag']);
    Tomoaky.Param.JAUseEventSeSwim = (Tomoaky.Parameters['Use Event Se Swim']) === 'true' ? true : false;
    Tomoaky.Param.JASeJump = (new Function("return " + Tomoaky.Parameters['Se Jump']))();
    Tomoaky.Param.JASeDash = (new Function("return " + Tomoaky.Parameters['Se Dash']))();
    Tomoaky.Param.JASeFlick = (new Function("return " + Tomoaky.Parameters['Se Flick']))();
    Tomoaky.Param.JASeSwim = (new Function("return " + Tomoaky.Parameters['Se Swim']))();
    Tomoaky.Param.JASeChange = (new Function("return " + Tomoaky.Parameters['Se Change']))();
    
    //-----------------------------------------------------------------------------
    // Input
    //
    
    Input.keyMapper[65] = 'attack';
    Input.keyMapper[83] = 'jump';
    Input.keyMapper[68] = 'dash';
    
    Input.gamepadMapper = {
      0: 'ok',        // A
      1: 'cancel',    // B
      2: 'dash',      // X
      3: 'jump',      // Y
      4: 'pageup',    // LB
      5: 'pagedown',  // RB
      6: 'menu',      // LT
      7: 'attack',    // RT
      12: 'up',       // D-pad up
      13: 'down',     // D-pad down
      14: 'left',     // D-pad left
      15: 'right',    // D-pad right
    };
    
    //-----------------------------------------------------------------------------
    // Game_Battler
    //
    
    // メンバ変数の初期化
    Tomoaky.JA.Game_Battler_initMembers = Game_Battler.prototype.initMembers;
    Game_Battler.prototype.initMembers = function() {
      Tomoaky.JA.Game_Battler_initMembers.call(this);
      this._actionResult = new Game_ActionResult();
    };
    
    // リザルトのクリア
    Tomoaky.JA.Game_Battler_clearResult = Game_Battler.prototype.clearResult;
    Game_Battler.prototype.clearResult = function() {
      this._actionResult.hpDamage += this._result.hpDamage;
      this._actionResult.missed |= this._result.missed;
      this._actionResult.evaded |= this._result.evaded;
      this._actionResult.critical |= this._result.critical;
      this._actionResult.addedStates = this._actionResult.addedStates.concat(this._result.addedStates);
      this._actionResult.removedStates = this._actionResult.removedStates.concat(this._result.removedStates);
      Tomoaky.JA.Game_Battler_clearResult.call(this);
    };
    
    // ジャンプアクションリザルトのクリア
    Game_Battler.prototype.clearActionResult = function() {
      this._actionResult.clear();
    };
    
    // バトル終了処理
    Tomoaky.JA.Game_Battler_onBattleEnd = Game_Battler.prototype.onBattleEnd;
    Game_Battler.prototype.onBattleEnd = function() {
      Tomoaky.JA.Game_Battler_onBattleEnd.call(this);
      this.clearActionResult();
    };
    
    //-----------------------------------------------------------------------------
    // Game_Actor
    //
    
    // ダメージ床から受けるダメージ
    Game_Actor.prototype.basicFloorDamage = function() {
      return Tomoaky.Param.JAFloorDamage;
    };
    
    // 何マスの移動で1ターン経過するか
    Game_Actor.prototype.stepsForTurn = function() {
      return Tomoaky.Param.JAStepsForTurn;
    };
    
    // 付加されたステートの表示
    Tomoaky.JA.Game_Actor_showAddedStates = Game_Actor.prototype.showAddedStates;
    Game_Actor.prototype.showAddedStates = function() {
      if ($gameParty.inBattle()) {
        Tomoaky.JA.Game_Actor_showAddedStates.call(this);
      }
    };
    
    // 解除されたステートの表示
    Tomoaky.JA.Game_Actor_showRemovedStates = Game_Actor.prototype.showRemovedStates;
    Game_Actor.prototype.showRemovedStates = function() {
      if ($gameParty.inBattle()) {
        Tomoaky.JA.Game_Actor_showRemovedStates.call(this);
      }
    };
    
    // アクター(+装備、ステート)のタグからパラメータ(数値)をロード
    Game_Actor.prototype.loadTagParam = function(param_name, default_value) {
      var result = this.actor().meta[param_name];
      result = result ? Number(result) : default_value;
      var equips = this.equips().concat(this.states());
      for (var i = 0; i < equips.length; i++) {
        var item = equips[i];
        if (item && item.meta[param_name]) {
          result += Number(item.meta[param_name]);
        }
      }
      return result;
    };
    
    // アクター(+装備、ステート)のタグからパラメータ(真偽値)をロード
    Game_Actor.prototype.loadTagBool = function(param_name) {
      var equips = this.equips().concat(this.states(), this.actor());
      for (var i = 0; i < equips.length; i++) {
        var item = equips[i];
        if (item && item.meta[param_name]) {
          return true;
        }
      }
      return false;
    };
    
    // アクター(+装備、ステート)のタグからパラメータ(文字列)をロード
    Game_Actor.prototype.loadTagString = function(param_name, default_value) {
      var equips = this.states().concat(this.equips(), this.actor());
      for (var i = equips.length - 1; i >= 0; i--) {
        var item = equips[i];
        if (item && item.meta[param_name]) {
          return item.meta[param_name];
        }
      }
      return default_value;
    };
    
    //-----------------------------------------------------------------------------
    // Game_Map
    //
    
    // 乗り物は作らない
    Game_Map.prototype.createVehicles = function() {
        this._vehicles = [];
    };
    
    // 壁ジャンプが可能か判定する
    Game_Map.prototype.canWallJump = function(x, y, d) {
      if (!this.isValid(x, y)) {
        return false;
      }
      if (this.tileId(x, y, 5) == Tomoaky.Param.JASlipWallRegion) {
        return false;
      }
      return !this.isPassable(x, y, d);
    };
    
    // 通行チェック
    Game_Map.prototype.checkPassage = function(x, y, bit) {
      if (!this.isValid(x, y)) {
        return false;
      }
      var rg = this.tileId(x, y, 5);
      if (rg == Tomoaky.Param.JAWallRegion) {
        return false;
      }
      var flags = this.tilesetFlags();
      var tiles = this.allTiles(x, y);
      for (var i = 0; i < tiles.length; i++) {
        var flag = flags[tiles[i]];
        if (rg == Tomoaky.Param.JAStageRegion) {
          flag |= 1;
        }
        if ((flag & 0x10) !== 0)  //[*] No effect on passage
          continue;
        if ((flag & bit) === 0)   // [o] Passable
          return true;
        if ((flag & bit) === bit) // [x] Impassable
          return false;
      }
      return false;
    };
    
    //-----------------------------------------------------------------------------
    // Game_CharacterBase
    //
    
    // メンバ変数の初期化
    Tomoaky.JA.Game_CharacterBase_initMembers = Game_CharacterBase.prototype.initMembers;
    Game_CharacterBase.prototype.initMembers = function() {
      Tomoaky.JA.Game_CharacterBase_initMembers.call(this);
      this._needsRefresh = false;
      this._vx = 0;
      this._vy = 0;
      this._vxPlus = 0;
      this._lastY = 0;
      this._lastSwim = false;
      this._collideW = 0.375;
      this._collideH = 0.75;
      this._collideIds = [];
      this._landingObject = null;
      this._landingRegion = 0;
      this._ladder = false;
      this._lift = false;
      this._lockCount = 0;
      this._moveCount = 0;
      this._jumpInput = 0;
      this._dashCount = 0;
      this._friction = 0;
      this._moveSpeed = 0.05;
      this._jumpSpeed = 0.14;
      this._swimSpeed = 0.02;
      this._dashSpeedX = 0.1;
      this._dashSpeedY = 0.03;
      this._ladderSpeed = 0.04;
      this._accele = 0.003
      this._ladderAccele = 0.003;
      this._jumpInputTime = 0;
      this._dashCountTime = 30;
      this._swimJump = 0.1;
      this._mulchJump = 1;
      this._weight = 0;
      this._gravity = Tomoaky.Param.JAGravity;
    };
    
    // バトラーの取得
    Game_CharacterBase.prototype.battler = function() {
      return null;
    };
    
    // バトラーが設定されているか
    Game_CharacterBase.prototype.isBattler = function() {
      return this.battler() !== null;
    };
    
    // 移動状態判定
    Game_CharacterBase.prototype.isMoving = function() {
      return this._moveCount > 0;
    };
    
    // ダッシュ状態判定
    Game_CharacterBase.prototype.isDashing = function() {
      return this._dashCount > 0;
    };
    
    // 地面に立っているか
    Game_CharacterBase.prototype.isLanding = function() {
      return this._landingObject !== null;
    };
    
    // およぎ状態判定
    Game_CharacterBase.prototype.isSwimming = function() {
      return this.terrainTag() == Tomoaky.Param.JAWaterTerrainTag;
    };
    
    // ロック状態判定
    Game_CharacterBase.prototype.isLocking = function() {
      return this._lockCount > 0;
    };
    
    // 自分の重さで相手をはじき飛ばせるかチェック
    Game_CharacterBase.prototype.checkFlickWeight = function(weight) {
      return this._weight >= weight + Tomoaky.Param.JAFlickWeight;
    };
    
    // リフレッシュフラグを立てる
    Game_CharacterBase.prototype.requestRefresh = function() {
      this._needsRefresh = true;
    };
    
    // 移動速度のセット
    Game_CharacterBase.prototype.setMoveSpeed = function(moveSpeed) {
      this._moveSpeed = moveSpeed / 100 + 0.02;
    };
    
    // フレーム更新
    Game_CharacterBase.prototype.update = function() {
      this.updateMove();
      this.updateAnimation();
      this.updateCollideIds();
      if (this.isDashing()) {
        this.updateDashCount();
      }
      if (this.isMoving()) {
        this.updateMoveCount();
      } else {
        this.updateStop();
      }
      if (this.isSwimming() != this._lastSwim) {
        this.updateSwiming();
      }
      if (this._needsRefresh) {
        this.refresh();
      }
    };
    
    // 画面 X 座標の取得
    Game_CharacterBase.prototype.screenX = function() {
      var tw = $gameMap.tileWidth();
      return Math.round(this.scrolledX() * tw);
    };
    
    // 画面 Y 座標の取得
    Game_CharacterBase.prototype.screenY = function() {
      var th = $gameMap.tileHeight();
      return Math.round(this.scrolledY() * th);
    };
    
    // 移動の処理
    Game_CharacterBase.prototype.updateMove = function() {
      this.updateGravity();
      this.updateFriction();
      if (this._vx != 0 || this._vxPlus != 0) {
        this._realX += this._vx + this._vxPlus;
        if (this._vx > 0) {
          this.collideMapRight();
          if (!this._through) {
              this.collideCharacterRight();
          }
        } else {
          this.collideMapLeft();
          if (!this._through) {
              this.collideCharacterLeft();
          }
        }
        this._x = Math.floor(this._realX);
      }
      if (this._vy != 0) {
        this._landingObject = null;
        this._realY += this._vy;
        if (this._vy > 0) {
          this.collideMapDown();
          if (!this._through) {
              this.collideCharacterDown();
          }
        } else {
          this.collideMapUp();
          if (!this._through) {
              this.collideCharacterUp();
          }
        }
        this._y = Math.floor(this._realY);
        this._lastY = Math.floor(this._realY + Tomoaky.Param.JATileMarginTop);
      }
    };
    
    // 重力の処理
    Game_CharacterBase.prototype.updateGravity = function() {
      this._vy = Math.min(this._vy + this._gravity, this.maxFallSpeed());
    };
    
    // 最大落下速度の取得
    Game_CharacterBase.prototype.maxFallSpeed = function() {
      return this.isSwimming() ? 0.04 : 0.6;
    };
    
    // 摩擦の処理
    Game_CharacterBase.prototype.updateFriction = function() {
      if (this.isLanding()) {
        if (Object.prototype.toString.call(this._landingObject) !== '[object Array]') {
          if (this._landingObject._lift) {
            this._vxPlus = this._landingObject._vx;
          }
        }
      } else {
        this._vxPlus = 0;
      }
    };
    
    // 移動カウントの処理
    Game_CharacterBase.prototype.updateMoveCount = function() {
      this._moveCount--;
      if (this._moveCount == 0 && !this.isDashing()) {
        this._vx = 0;
        if (this._gravity == 0) {
          this._vy = 0;
        }
      }
    };
    
    // ダッシュカウントの処理
    Game_CharacterBase.prototype.updateDashCount = function() {
      this._dashCount--;
    };
    
    // 衝突しているキャラクターの処理
    Game_CharacterBase.prototype.updateCollideIds = function() {
      for(var i = this._collideIds.length - 1; i >= 0; i--) {
        var id = this._collideIds[i];
        var character = id < 0 ? $gamePlayer : $gameMap.event(id);
        if (!this.isCollide(character)) {
          this._collideIds.splice(i, 1);
        }
      }
    };
    
    // キャラクターとの直線距離を返す
    Game_CharacterBase.prototype.distFromCharacter = function(character) {
      var x = this._realX - character._realX;
      var y = this._realY - character._realY;
      return Math.sqrt(x * x + y * y);
    };
    
    // マップとの衝突判定(上方向)
    Game_CharacterBase.prototype.collideMapUp = function() {
      var lx = Math.floor(this._realX - this._collideW);
      var rx = Math.floor(this._realX + this._collideW);
      var y = Math.floor(this._realY - this._collideH);
      for (var x = lx; x <= rx; x++) {
        if (!$gameMap.isPassable(x, y, 8)) {
          this._realY = y + 1.001 + this._collideH;
          this._vy = 0;
          this._jumpInput = 0;
          return;
        }
      }
    };
    
    // マップとの衝突判定(下方向)
    Game_CharacterBase.prototype.collideMapDown = function() {
      var y = Math.floor(this._realY + Tomoaky.Param.JATileMarginTop);
      if (y == this._lastY) {
        return;
      }
      var lx = Math.floor(this._realX - this._collideW);
      var rx = Math.floor(this._realX + this._collideW);
      var y = Math.floor(this._realY + Tomoaky.Param.JATileMarginTop);
      for (var x = lx; x <= rx; x++) {
        if (!$gameMap.isPassable(x, y, 2)) {
          if (this._ladder && $gameMap.isLadder(x, y)) {
            continue;
          }
          this._landingObject = [x, y];
          this._landingRegion = $gameMap.regionId(x, y);
          this.getLand(y - Tomoaky.Param.JATileMarginTop - 0.001);
          return;
        }
      }
    };
    
    // マップとの衝突判定(左方向)
    Game_CharacterBase.prototype.collideMapLeft = function() {
      var ty = Math.floor(this._realY - this._collideH);
      var by = Math.floor(this._realY + Tomoaky.Param.JATileMarginTop);
      var x = Math.floor(this._realX - this._collideW);
      for (var y = ty; y <= by; y++) {
        if (!$gameMap.isPassable(x, y, 4)) {
          this._realX = x + 1.001 + this._collideW;
          this._vx = 0;
          return;
        }
      }
    };
    
    // マップとの衝突判定(右方向)
    Game_CharacterBase.prototype.collideMapRight = function() {
      var ty = Math.floor(this._realY - this._collideH);
      var by = Math.floor(this._realY + Tomoaky.Param.JATileMarginTop);
      var x = Math.floor(this._realX + this._collideW);
      for (var y = ty; y <= by; y++) {
        if (!$gameMap.isPassable(x, y, 6)) {
          this._realX = x - 0.001 - this._collideW;
          this._vx = 0;
          return;
        }
      }
    };
    
    // キャラクターとの衝突判定(上方向)
    Game_CharacterBase.prototype.collideCharacterUp = function() {
      var targets = this.collideTargets();
      for (var i = 0; i < targets.length; i++) {
        var character = targets[i];
        if (this.isCollide(character)) {
          this.addCollideId(character.eventId());
          if (!character._through) {
            if (this._lift) {
              character._realY = this._realY - this._collideH - 0.001;
              character._vy = this._vy;
              character._landingObject = this;
              character.resetJump();
            } else {
              this._realY = character._realY + this._collideH + 0.001;
              this._vy = 0;
              this._jumpInput = 0;
            }
          }
        }
      }
    };
    
    // キャラクターとの衝突判定(下方向)
    Game_CharacterBase.prototype.collideCharacterDown = function() {
      var targets = this.collideTargets();
      for (var i = 0; i < targets.length; i++) {
        var character = targets[i];
        if (this.isCollide(character)) {
          this.addCollideId(character.eventId());
          if (!character._through) {
            if (this._lift) {
              character._realY = this._realY + character._collideH + 0.001;
              character._jumpInput = 0;
              character._vy = this._vy;
            } else {
              this._landingObject = character;
              this._landingRegion = -1;
              this.getLand(character._realY - character._collideH - 0.001);
            }
          }
        }
      }
    };
    
    // キャラクターとの衝突判定(左方向)
    Game_CharacterBase.prototype.collideCharacterLeft = function() {
      var targets = this.collideTargets();
      for (var i = 0; i < targets.length; i++) {
        var character = targets[i];
        if (this.isCollide(character)) {
          this.addCollideId(character.eventId());
          if (!character._through) {
            if (this._lift || this._ladder) {
              character._realX = this._realX - this._collideW - 0.001 - character._collideW;
              character._vx = this._vx;
            } else {
              if (this.isDashing() && this.checkFlickWeight(character._weight)) {
                character.flick(this);
              }
              this._realX = character._realX + character._collideW + 0.001 + this._collideW;
              this._vx = 0;
            }
          }
        }
      }
    };
    
    // キャラクターとの衝突判定(右方向)
    Game_CharacterBase.prototype.collideCharacterRight = function() {
      var targets = this.collideTargets();
      for (var i = 0; i < targets.length; i++) {
        var character = targets[i];
        if (this.isCollide(character)) {
          this.addCollideId(character.eventId());
          if (!character._through) {
            if (this._lift || this._ladder) {
              character._realX = this._realX + this._collideW + 0.001 + character._collideW;
              character._vx = this._vx;
            } else {
              if (this.isDashing() && this.checkFlickWeight(character._weight)) {
                character.flick(this);
              }
              this._realX = character._realX - character._collideW - 0.001 - this._collideW;
              this._vx = 0;
            }
          }
        }
      }
    };
    
    // キャラクターとの衝突判定
    Game_CharacterBase.prototype.isCollide = function(character) {
      if (this.eventId() == character.eventId()) {
        return false;
      }
      if (this._realX - this._collideW <= character._realX + character._collideW) {
        if (this._realX + this._collideW >= character._realX - character._collideW) {
          if (this._realY - this._collideH <= character._realY) {
            if (this._realY >= character._realY - character._collideH) {
              return true;
            }
          }
        }
      }
      return false;
    };
    
    // 衝突判定を行う対象を返す
    Game_CharacterBase.prototype.collideTargets = function() {
      return $gameMap.events().concat($gamePlayer);
    };
    
    // 衝突している対象を追加する
    Game_CharacterBase.prototype.addCollideId = function(id) {
      if (this._collideIds.indexOf(id) == -1) {
        this._collideIds.push(id);
        this.checkEventTriggerCollide(id);
      }
    };
    
    // 地面に降りる
    Game_CharacterBase.prototype.getLand = function(y) {
      this._realY = y;
      this._vy = 0;
      this.resetJump();
      if (this._ladder) {
        this.getOffLadder();
      }
    };
    // ジャンプカウントのリセット
    Game_CharacterBase.prototype.resetJump = function() {
      this._jumpCount = this._mulchJump;
      this._jumpInput = 0;
    };
    
    // 泳ぎ状態の更新
    Game_CharacterBase.prototype.updateSwiming = function() {
      this._lastSwim = !this._lastSwim;
    };
    
    // まっすぐに移動
    Game_CharacterBase.prototype.moveStraight = function(d) {
      this.setDirection(d);
      this._moveCount = Math.floor(1 / this._moveSpeed);
      switch (d) {
      case 2:
        this._vy = this._moveSpeed;
        return;
      case 4:
        this._vx = -this._moveSpeed;
        return;
      case 6:
        this._vx = this._moveSpeed;
        return;
      default:
        this._vy = -this._moveSpeed;
        return;
      }
    };
    
    // ジャンプ
    Game_CharacterBase.prototype.jump = function(xPlus, yPlus) {
      if (this._jumpCount <= 0) {
        return;
      }
      this._jumpCount--;
      if (xPlus < 0) {
        this.setDirection(4);
        var speed = this._moveSpeed / 100 + 0.02;
        this._moveCount = Math.floor(1 / speed);
        this._vx = -speed;
      } else if (xPlus > 0) {
        this.setDirection(6);
        var speed = this._moveSpeed / 100 + 0.02;
        this._moveCount = Math.floor(1 / speed);
        this._vx = speed;
      }
      if (yPlus != 0) {
        this._vy = -Math.abs(yPlus) / 100;
      } else {
        this._vy = this.isSwimming() ? -this._swimJump : -this._jumpSpeed;
      }
      this.resetStopCount();
      this.straighten();
    };
    
    // ダッシュ
    Game_CharacterBase.prototype.dash = function(direction) {
      this._dashCount = this._dashCountTime;
      if (direction == 4) {
        this._vx = -this._dashSpeedX;
      } else {
        this._vx = this._dashSpeedX;
      }
      this._vy = -this._dashSpeedY;
      this._moveCount = this._dashCount / 2;
      this.resetStopCount();
      this.straighten;
    };
    
    // はじかれ
    Game_CharacterBase.prototype.flick = function(user) {
      if (Tomoaky.Param.JAFlickSkill > 0 && user.isBattler() && this.isBattler()) {
        this.applySkill(user, Tomoaky.Param.JAFlickSkill);
      }
      this._vx = user._vx;
      var n = 1 + (user._weight - this._weight - Tomoaky.Param.JAFlickWeight) / 2;
      this._moveCount = Math.floor(n / Math.abs(this._vx));
      AudioManager.playSe(Tomoaky.Param.JASeFlick);
    };
    
    // スキルの適用
    Game_CharacterBase.prototype.applySkill = function(user, skillId) {
      user.battler().clearActions();
      var action = new Game_Action(user.battler());
      action.setSkill(skillId);
      user.battler().setAction(0, action);
      user.battler().action(0).apply(this.battler());
    };
    
    // ダメージの処理
    Game_CharacterBase.prototype.updateDamage = function() {
      this.battler().clearResult();
      if (this.battler()._actionResult.hpDamage != 0) {
        this.battler()._actionResult.hpAffected = true;
        this.battler()._actionResult.missed = false;
        this.battler()._actionResult.evaded = false;
        this.damaged();
        if (this.battler().isActor()) {
          SoundManager.playActorDamage();
        } else {
          SoundManager.playEnemyDamage();
        }
      } else if (this.battler()._actionResult.missed ||
                 this.battler()._actionResult.evaded) {
        this.damaged();
        SoundManager.playMiss();
      }
      if (this.battler()._actionResult.isStatusAffected()) {
        this.requestRefresh();
      }
    };
    
    // ダメージ後の処理
    Game_CharacterBase.prototype.damaged = function() {
    //  if (this.isLocking()) {
    //    return;
    //  }
      this.battler().startDamagePopup();
      if (this.battler()._actionResult.isStateAdded(this.battler().deathStateId())) {
        this.battlerDead();
      }
    };
    
    // 座標のセット
    Game_CharacterBase.prototype.setPosition = function(x, y) {
      this._x = Math.floor(x);
      this._y = Math.floor(y);
      this._realX = x;
      this._realY = y;
    };
    
    // 指定位置へ移動
    Tomoaky.JA.Game_CharacterBase_locate = Game_CharacterBase.prototype.locate;
    Game_CharacterBase.prototype.locate = function(x, y) {
      Tomoaky.JA.Game_CharacterBase_locate.call(this, x, y);
      this._vx = 0;
      this._vy = 0;
      this._lastY = -1;
      this._lastSwim = this.isSwimming();
      this._collideIds = [];
    };
    
    //-----------------------------------------------------------------------------
    // Game_Character
    //
    
    // ランダムに移動
    Game_Character.prototype.moveRandom = function() {
      if (this._gravity == 0) {
        this.moveStraight(2 + Math.randomInt(4) * 2);
      } else {
        this.moveStraight(4 + Math.randomInt(2) * 2);
      }
    };
    
    // キャラクターの方を向く
    Game_Character.prototype.turnTowardCharacter = function(character) {
        var sx = this._realX - character._realX;
        var sy = this._realY - character._realY;
        if (Math.abs(sx) > Math.abs(sy)) {
            this.setDirection(sx > 0 ? 4 : 6);
        } else if (sy !== 0) {
            this.setDirection(sy > 0 ? 8 : 2);
        }
    };
    
    // キャラクターの反対を向く
    Game_Character.prototype.turnAwayFromCharacter = function(character) {
        var sx = this._realX - character._realX;
        var sy = this._realY - character._realY;
        if (Math.abs(sx) > Math.abs(sy)) {
            this.setDirection(sx > 0 ? 6 : 4);
        } else if (sy !== 0) {
            this.setDirection(sy > 0 ? 2 : 8);
        }
    };
    
    //-----------------------------------------------------------------------------
    // Game_Player
    //
    
    // メンバ変数の初期化
    Tomoaky.JA.Game_Player_initMembers = Game_Player.prototype.initMembers;
    Game_Player.prototype.initMembers = function() {
      Tomoaky.JA.Game_Player_initMembers.call(this);
      this._memberIndex = 0;
      this._realSteps = 0;
      this._wallJump = false;
      this._dashDelay = 0;
      this._dashDelayTime = 30;
    };
    
    // 画面中央の X 座標
    Game_Player.prototype.centerX = function() {
        return (Graphics.width / $gameMap.tileWidth() - 1) / 2.0 + 0.5;
    };
    
    // 画面中央の Y 座標
    Game_Player.prototype.centerY = function() {
        return (Graphics.height / $gameMap.tileHeight() - 1) / 2.0 + 0.5;
    };
    
    // イベントIDを返す
    Game_Player.prototype.eventId = function() {
      return -1;
    };
    
    // アクターの取得
    Game_Player.prototype.actor = function() {
      return $gameParty.allMembers()[this._memberIndex];
    };
    
    // バトラーを返す
    Game_Player.prototype.battler = function() {
      return this.actor();
    };
    
    // バトラーが設定されているか
    Game_Player.prototype.isBattler = function() {
      return this.actor() ? true : false;
    };
    
    // ダッシュ状態判定
    Game_Player.prototype.isDashing = function() {
      return this._dashCount > 0;
    };
    
    // 衝突判定を行う対象を返す
    Game_Player.prototype.collideTargets = function() {
      return $gameMap.events();
    };
    
    // はしごにつかまる
    Game_Player.prototype.getOnLadder = function(downFlag) {
      this._ladder = true;
      this._landingObject = null;
      this.setDirection(8);
      var lastRealX = this._realX;
      this._realX = Math.floor(this._realX) + 0.5;
      if (downFlag) {
        this._realY += 0.04;
      }
      this._lastY = Math.floor(this._realY + Tomoaky.Param.JATileMarginTop);
      if (lastRealX < this._realX) {
        this.collideCharacterLeft();
      } else if (lastRealX > this._realX) {
        this.collideCharacterRight();
      }
      this._vx = 0;
      this._vy = 0;
      this.resetJump();
    };
    
    // はしごから降りる
    Game_Player.prototype.getOffLadder = function() {
      this._ladder = false;
      this.setDirection(Input.isPressed('left') ? 4 : 6);
    };
    
    // 衝突したイベントの起動
    Game_Player.prototype.checkEventTriggerCollide = function(id) {
      if (!$gameMap.isEventRunning()) {
        var event = $gameMap.event(id);
    //    if (event.isTriggerIn([1, 2]) && event.isNormalPriority() === normal) {
        if (event.isTriggerIn([1, 2])) {
          event.start();
        }
      }
    };
    
    // フレーム更新
    Game_Player.prototype.update = function(sceneActive) {
      var lastScrolledX = this.scrolledX();
      var lastScrolledY = this.scrolledY();
      if (this.isLocking()) {
        this.updateLock();
      } else {
        if (sceneActive && this.canMove()) {
          this.updateInput();
        }
        var lastRealX = this._realX;
        var lastRealY = this._realY;
        Game_Character.prototype.update.call(this);
        this.updateSteps(lastRealX, lastRealY);
      }
      this.updateScroll(lastScrolledX, lastScrolledY);
      if (this.isBattler()) {
        this.updateDamage();
      }
    //  this._followers.update();
    };
    
    // 入力の処理
    Game_Player.prototype.updateInput = function() {
      this.changeByInput();
      this.moveByInput();
      this.jumpByInput();
      this.dashByInput();
      this.triggerButtonAction();
    };
    
    // 重力の処理
    Game_Player.prototype.updateGravity = function() {
      if (!this._ladder) {
        Game_CharacterBase.prototype.updateGravity.call(this);
      }
    };
    
    // 摩擦の処理
    Game_Player.prototype.updateFriction = function() {
      Game_Character.prototype.updateFriction.call(this);
      this._friction = 0;
      if (this._ladder) {
        var n = this.isMoving() ? 0 : Tomoaky.Param.JAFriction;
        if (this._vy != 0) {
          if (this._vy > 0) {
            this._vy = Math.max(this._vy - n, 0);
          } else {
            this._vy = Math.min(this._vy + n, 0);
          }
        }
      } else {
        // ダッシュ状態でなければ移動速度を超えないように調整する
        if (!this.isDashing()) {
          var n = this.isSwimming() ? this._swimSpeed : this._moveSpeed;
          if (this._vx < -n) {
            this._vx = Math.min(this._vx + 0.005, -n);
          } else if (this._vx > n) {
            this._vx = Math.max(this._vx - 0.005, n);
          }
        }
        if (this.isLanding()) {
          var n = Tomoaky.Param.JAFriction;
          switch (this._landingRegion) {
          case Tomoaky.Param.JASlipFloorRegion:
            this._friction = 0.0025;
            return;
          case Tomoaky.Param.JARoughFloorRegion:
            if (Math.abs(this._vx) > this._moveSpeed / 2) {
              this._vx = this._vx > 0 ? this._moveSpeed / 2 : -this._moveSpeed / 2;
            }
            break;
          case Tomoaky.Param.JAMarshFloorRegion:
            this._vx = 0;
            return;
          }
          if (!this.isMoving()) {
            if (this._vx > 0) {
              this._vx = Math.max(this._vx - n, 0);
            } else if (this._vx < 0) {
              this._vx = Math.min(this._vx + n, 0);
            }
          }
        }
      }
    };
    
    // 移動カウントの処理
    Game_Player.prototype.updateMoveCount = function() {
      this._moveCount--;
    };
    
    // ロック状態の処理
    Game_Player.prototype.updateLock = function() {
      this._lockCount--;
      if (this._lockCount == 0) {
        if (this.battler().isDead()) {
          this.changeMember(1);
        }
      }
    };
    
    // ボタン入力による操作アクター変更
    Game_Player.prototype.changeByInput = function() {
      if (Input.isTriggered('pageup')) {
        this.changeMember(-1);
      } else if (Input.isTriggered('pagedown')) {
        this.changeMember(1);
      }
    };
    
    // 操作メンバーの切り替え
    Game_Player.prototype.changeMember = function(shift) {
      if ($gameParty.isAllDead()) {
        return;
      }
      this._memberIndex = (this._memberIndex + shift + $gameParty.size()) % $gameParty.size();
      while (this.actor().isDead()) {
        this._memberIndex = (this._memberIndex + shift + $gameParty.size()) % $gameParty.size();
      }
      this.refresh();
      this.battler().requestEffect('appear');
      AudioManager.playSe(Tomoaky.Param.JASeChange);
    };
    
    // 方向ボタン入力による移動処理
    Game_Player.prototype.moveByInput = function() {
      if (this._ladder) {
        if (Input.isPressed('up')) {
          this.setDirection(8);
          this._vy = Math.max(this._vy - this._ladderAccele, -this._ladderSpeed);
          this._moveCount = 4;
          this.resetStopCount();
        } else if (Input.isPressed('down')) {
          this.setDirection(8);
          this._vy = Math.min(this._vy + this._ladderAccele, this._ladderSpeed);
          this._moveCount = 4;
          this.resetStopCount();
        }
        if (!this.isCollideLadder(false)) {
          this.getOffLadder();
        }
      } else {
        if (!this.isDashing()) {
          if (Input.isPressed('left')) {
            this.setDirection(4);
            if (this._vx > -this._moveSpeed) {
              var accele = Math.max(this._accele - this._friction, 0);
              this._vx = Math.max(this._vx - accele, -this._moveSpeed);
            }
            this._moveCount = 4;
          } else if (Input.isPressed('right')) {
            this.setDirection(6);
            if (this._vx < this._moveSpeed) {
              var accele = Math.max(this._accele - this._friction, 0);
              this._vx = Math.min(this._vx + accele, this._moveSpeed);
            }
            this._moveCount = 4;
          }
        }
        if (Input.isPressed('up')) {
          if (this.isCollideLadder(false)) {
            this.getOnLadder(false);
          }
        } else if (Input.isPressed('down')) {
          if (this.isCollideLadder(true)) {
            this.getOnLadder(true);
          }
        }
      }
    };
    
    // ボタン入力によるジャンプ処理
    Game_Player.prototype.jumpByInput = function() {
      if (this._jumpInput > 0) {
        this._jumpInput--;
        if (Input.isPressed('jump')) {
          this._vy = -this._jumpSpeed;
        } else {
          this._jumpInput = 0;
        }
      }
      if (Input.isTriggered('jump')) {
        if (this.isSwimming()) {
          this.resetJump();
          this._jumpCount--;
        } else if (this._jumpCount > 0) {
          this._jumpCount--;
        } else {
          if (!this._wallJump) {
            return;
          }
          if (this._direction == 4) {
            var x = Math.floor(this._realX - this._collideW - 0.16);
          } else {
            var x = Math.floor(this._realX + this._collideW + 0.16);
          }
          var y = Math.floor(this._realY);
          if (!$gameMap.canWallJump(x, y, this._direction)) {
            return;
          }
          this.wallJump();
        }
        if (this._ladder) {
          this.getOffLadder();
          if (Input.isPressed('down')) {
            return;
          }
        }
        this._jumpInput = this._jumpInputTime;
        if (this.isDashing()) {
          this._dashCount = this._dashCountTime;
          this._vx = this._direction == 4 ? -this._dashSpeedX : this._dashSpeedX
        }
        this._vy = this.isSwimming() ? -this._swimJump : -this._jumpSpeed;
        this.resetStopCount();
        this.straighten();
        AudioManager.playSe(Tomoaky.Param.JASeJump);
      }
    };
    
    // 壁ジャンプの X 方向処理
    Game_Player.prototype.wallJump = function() {
      this._vx = this._direction == 4 ? this._moveSpeed : -this._moveSpeed;
      this.setDirection(this.reverseDir(this._direction));
    };
    
    // ボタン入力によるダッシュ処理
    Game_Player.prototype.dashByInput = function() {
      if (this._dashDelay > 0) {
        this._dashDelay--;
      } else {
        if (Input.isTriggered('dash') && !this.isSwimming()) {
          if (!$gameMap.isDashDisabled()) {
            if (this._ladder) {
              this.getOffLadder()
              if (Input.isPressed('left')) {
                this.setDirection(4);
              } else if (Input.isPressed('right')) {
                this.setDirection(6);
              }
            } else {
              if (!this._direction == 4) {
                this.setDirection(6);
              }
            }
            this.dash(this._direction);
            this._dashDelay = this._dashDelayTime;
            AudioManager.playSe(Tomoaky.Param.JASeDash);
          }
        }
      }
    };
    
    // 歩数の処理
    Game_Player.prototype.updateSteps = function(lastRealX, lastRealY) {
      this._realSteps += Math.max(Math.abs(this._realX - lastRealX), Math.abs(this._realY - lastRealY));
      if (this._realSteps >= 1) {
        if (this.isNormal()) {
          $gameParty.increaseSteps();
          if (this.actor()) {
            this.actor().onPlayerWalk();
          }
        }
        this._realSteps = 0;
      }
    };
    
    // 泳ぎ状態の更新
    Game_Player.prototype.updateSwiming = function() {
      Game_Character.prototype.updateSwiming.call(this);
      AudioManager.playSe(Tomoaky.Param.JASeSwim);
    };
    
    // マップイベントの起動
    Game_Player.prototype.startMapEvent = function(triggers, normal) {
      if (!$gameMap.isEventRunning()) {
        var targets = this.collideTargets();
        for (var i = 0; i < targets.length; i++) {
          var character = targets[i];
          if (this.isCollide(character)) {
            if (character.isTriggerIn(triggers) && character.isNormalPriority() === normal) {
              if (character.isBattler() && character.battler().isDead()) {
                continue;
              }
              character.start();
            }
          }
        }
      }
    };
    
    // 接触しているイベントの起動判定
    Game_Player.prototype.checkEventTriggerHere = function(triggers) {
        if (this.canStartLocalEvents()) {
            this.startMapEvent(triggers, false);
        }
    };
    
    // 正面のイベント起動判定
    Game_Player.prototype.checkEventTriggerThere = function(triggers) {
      var lastRealX = this._realX;
      this._realX += this._direction == 4 ? -this._collideW : this._collideW
      this.startMapEvent(triggers, true);
      this._realX += this._direction == 4 ? -0.5 : 0.5;
      if (!$gameMap.isAnyEventStarting() && $gameMap.isCounter(Math.floor(this._realX), this._y)) {
        this._realX += this._direction == 4 ? -0.5 : 0.5;
        this.startMapEvent(triggers, true);
      }
      this._realX = lastRealX;
    };
    
    // はしごと接触しているか
    Game_Player.prototype.isCollideLadder = function(downFlag) {
      var x = Math.floor(this._realX);
      if (downFlag) {
        if (!this.isLanding()) {
          return false;
        }
        var y = Math.floor(this._realY + Tomoaky.Param.JATileMarginTop + 0.1);
        return $gameMap.isLadder(x, y);
      } else {
        var ty = Math.floor(this._realY - this._collideH);
        var by = Math.floor(this._realY + Tomoaky.Param.JATileMarginTop);
        for (var y = ty; y <= by; y++) {
          if ($gameMap.isLadder(x, y)) {
            return true;
          }
        }
        return false;
      }
    };
    
    // 場所移動の実行
    Game_Player.prototype.performTransfer = function() {
      if (this.isTransferring()) {
        this.setDirection(this._newDirection);
        if (this._newMapId !== $gameMap.mapId() || this._needsMapReload) {
          $gameMap.setup(this._newMapId);
          this._needsMapReload = false;
        }
        this.locate(this._newX + 0.5, this._newY + 1 - Tomoaky.Param.JATileMarginTop);
        this.refresh();
        this.clearTransferInfo();
      }
    };
    
    // リフレッシュ
    Game_Player.prototype.refresh = function() {
      var actor = this.actor();
      if (actor) {
        var characterName = actor.characterName();
        var characterIndex = actor.characterIndex();
        this._moveSpeed = actor.loadTagParam('move_speed', 0.05);
        this._jumpSpeed = actor.loadTagParam('jump_speed', 0.14);
        this._swimSpeed = actor.loadTagParam('swim_speed', 0.02);
        this._ladderSpeed = actor.loadTagParam('ladder_speed', 0.04);
        this._accele = actor.loadTagParam('accele', 0.003);
        this._ladderAccele = actor.loadTagParam('ladder_accele', 0.003);
        this._jumpInputTime = actor.loadTagParam('jump_input', 0);
        this._swimJump = actor.loadTagParam('swim_jump', 0.1);
        this._mulchJump = actor.loadTagParam('mulch_jump', 1);
        this._weight = actor.loadTagParam('weight', 0);
        this._gravity = actor.loadTagParam('gravity', 0.0045);
        this._wallJump = actor.loadTagBool('wall_jump');
        this._dashSpeedX = actor.loadTagParam('dash_speed_x', 0.14);
        this._dashSpeedY = actor.loadTagParam('dash_speed_y', 0.03);
        this._dashCountTime = actor.loadTagParam('dash_count', 15);
        this._dashDelayTime = actor.loadTagParam('dash_delay', 30);
      } else {
        var characterName = '';
        var characterIndex = 0;
      }
      this.setImage(characterName, characterIndex);
      this._followers.refresh();
      this._needsRefresh = false;
    };
    
    // 飛行船の乗り降り
    Game_Player.prototype.getOnOffVehicle = function() {
      return false;
    };
    
    // まっすぐに移動
    Game_Player.prototype.moveStraight = function(d) {
      Game_Character.prototype.moveStraight.call(this, d);
    };
    
    // バトラーが戦闘不能になったときの処理
    Game_Player.prototype.battlerDead = function() {
      this._lockCount = 32;
      this.battler().requestEffect('collapse');
      SoundManager.playActorCollapse();
      if ($gameParty.isAllDead()) {
        $gameTemp.reserveCommonEvent(Tomoaky.Param.JAAllDeadEvent);
      }
    };
    
    //-----------------------------------------------------------------------------
    // Game_Event
    //
    
    // 初期化
    Game_Event.prototype.initialize = function(mapId, eventId) {
        Game_Character.prototype.initialize.call(this);
        this._mapId = mapId;
        this._eventId = eventId;
        this.locate(this.event().x + 0.5, this.event().y + 1);
        this.refresh();
    };
    
    // メンバ変数の初期化
    Tomoaky.JA.Game_Event_initMembers = Game_Event.prototype.initMembers;
    Game_Event.prototype.initMembers = function() {
      Tomoaky.JA.Game_Event_initMembers.call(this);
      this._enemyId = 0;
      this._battler = null;
      this._deadSelfSwitch = null;
      this._commentParams = {};
    };
    
    // バトラーの取得
    Game_Event.prototype.battler = function() {
      return this._battler;
    };
    
    // 衝突したイベントの起動
    Game_Event.prototype.checkEventTriggerCollide = function(id) {
      if (!$gameMap.isEventRunning() && id < 0) {
        if (this.isTriggerIn([1, 2]) && this.isNormalPriority() === normal) {
          this.start();
        }
      }
    };
    
    // リフレッシュ
    Tomoaky.JA.Game_Event_refresh = Game_Event.prototype.refresh;
    Game_Event.prototype.refresh = function() {
      Tomoaky.JA.Game_Event_refresh.call(this);
      this._needsRefresh = false;
    };
    
    // イベントページのセットアップ
    Tomoaky.JA.Game_Event_setupPage = Game_Event.prototype.setupPage;
    Game_Event.prototype.setupPage = function() {
      Tomoaky.JA.Game_Event_setupPage.call(this);
      if (this._pageIndex >= 0) {
        this.loadCommentParams();
        this._enemyId = Number(this.loadTagParam('enemy', 0));
        this._deadSelfSwitch = this.loadTagParam('dead', null);
        this._collideW = Number(this.loadTagParam('w', 0.375));
        this._collideH = Number(this.loadTagParam('h', 0.75));
        this._weight = Number(this.loadTagParam('weight', 0));
        this._gravity = Number(this.loadTagParam('gravity', Tomoaky.Param.JAGravity));
        this._lift = this.loadTagParam('lift', false);
        this.setupBattler();
      }
    };
    
    // 先頭にある注釈からパラメータ群をロード
    Game_Event.prototype.loadCommentParams = function() {
      this._commentParams = {};
      var re = /<([^<>:]+)(:?)([^>]*)>/g;
      var list = this.list();
      for (var i = 0; i < list.length; i++) {
        var command = list[i];
        if (command) {
          if (command.code == 108 || command.code == 408) {
            for (;;) {
              var match = re.exec(command.parameters[0]);
              if (match) {
                if (match[2] === ':') {
                  this._commentParams[match[1]] = match[3];
                } else {
                  this._commentParams[match[1]] = true;
                }
              } else {
                break;
              }
            }
          } else {
            break;
          }
        }
      }
    };
    
    // メモ欄と注釈のタグからパラメータ(数値)をロード
    Game_Event.prototype.loadTagParam = function(param_name, default_value) {
      if (this._commentParams[param_name]) {
        return this._commentParams[param_name];
      } else if (this.event().meta[param_name]) {
        return this.event().meta[param_name];
      } else {
        return default_value;
      }
    };
    
    // バトラーのセットアップ
    Game_Event.prototype.setupBattler = function() {
      if (this._enemyId > 0) {
        this._battler = new Game_Enemy(this._enemyId, this.eventId(), 0);
      } else {
        this._battler = null;
      }
    };
    
    // フレーム更新
    Tomoaky.JA.Game_Event_update = Game_Event.prototype.update;
    Game_Event.prototype.update = function() {
      if (this.isLocking()) {
        this.updateLock();
      } else {
        Tomoaky.JA.Game_Event_update.call(this);
      }
      if (this.isBattler()) {
        this.updateDamage();
      }
    };
    
    // 摩擦の処理
    Game_Event.prototype.updateFriction = function() {
      Game_Character.prototype.updateFriction.call(this);
      if (!this.isMoving() && this._vx != 0) {
        if (!this.isDashing()) {
          console.log(this._moveSpeed);
          var n = this.isSwimming() ? this._swimSpeed : this._moveSpeed;
          if (this._vx < -n) {
            this._vx = Math.min(this._vx + 0.005, -n);
          }
          if (this._vx > n) {
            this._vx = Math.max(this._vx - 0.005, n);
          }
        }
        if (this.isLanding()) {
          var n = Tomoaky.Param.JAFriction;
          switch (this._landingRegion) {
          case Tomoaky.Param.JASlipFloorRegion:
            return;
          case Tomoaky.Param.JARoughFloorRegion:
            if (Math.abs(this._vx) > this._moveSpeed / 2) {
              this._vx = this._vx > 0 ? this._moveSpeed / 2 : -this._moveSpeed / 2;
            }
            break;
          case Tomoaky.Param.JAMarshFloorRegion:
            this._vx = 0;
            return;
          }
          if (this._vx > 0) {
            this._vx = Math.max(this._vx - n, 0);
          } else {
            this._vx = Math.min(this._vx + n, 0);
          }
        }
      }
    };
    
    // バトラーが戦闘不能になったときの処理
    Game_Event.prototype.battlerDead = function() {
      if (Tomoaky.Param.JAEventCollapse) {
        this._lockCount = 32;
        this.battler().requestEffect('collapse');
        SoundManager.playEnemyCollapse();
      } else {
        this._lockCount = 1;
      }
    };
    
    // ロック状態の処理
    Game_Event.prototype.updateLock = function() {
      this._lockCount--;
      if (this._lockCount == 0) {
        if (this.battler().isDead()) {
          if (this._deadSelfSwitch !== null) {
            var key = [$gameMap.mapId(), this._eventId, this._deadSelfSwitch];
            $gameSelfSwitches.setValue(key, true);
            this.refresh();
            if (this.isBattler()) {
              if (Tomoaky.Param.JAEventCollapse) {
                this.battler().requestEffect('appear');
              }
            } else {
            }
          } else {
            this.erase();
          }
        }
      }
    };
    
    // 泳ぎ状態の更新
    Game_Event.prototype.updateSwiming = function() {
      Game_Character.prototype.updateSwiming.call(this);
      if (Tomoaky.Param.JAUseEventSeSwim) {
        var origin_volume = Tomoaky.Param.JASeSwim.volume;
        var volume = Math.floor(origin_volume * ((15 - this.distFromCharacter($gamePlayer))) / 15);
        var se = {};
        se.name = Tomoaky.Param.JASeSwim.name;
        se.volume = Math.min(Math.max(volume, 0), 100);
        se.pitch = Tomoaky.Param.JASeSwim.pitch;
        if (this._realX < $gamePlayer._realX) {
          se.pan = Math.max(Math.floor((this._realX - $gamePlayer._realX) * 10, -100));
        } else {
          se.pan = Math.min(Math.floor((this._realX - $gamePlayer._realX) * 10, 100));
        }
        AudioManager.playSe(se);
      }
    };
    
    //-----------------------------------------------------------------------------
    // Game_Interpreter
    //
    
    // イベントの位置変更
    Game_Interpreter.prototype.command203 = function() {
        var character = this.character(this._params[0]);
        if (character) {
            if (this._params[1] === 0) {  // Direct designation
                character.locate(this._params[2] + 0.5, this._params[3] + 1);
            } else if (this._params[1] === 1) {  // Designation with variables
                var x = $gameVariables.value(this._params[2] + 0.5);
                var y = $gameVariables.value(this._params[3] + 1);
                character.locate(x, y);
            } else {  // Exchange with another event
                var character2 = this.character(this._params[2]);
                if (character2) {
                    character.swap(character2);
                }
            }
            if (this._params[4] > 0) {
                character.setDirection(this._params[4]);
            }
        }
        return true;
    };
    
    // 装備の変更
    Tomoaky.JA.Game_Interpreter_command319 = Game_Interpreter.prototype.command319;
    Game_Interpreter.prototype.command319 = function() {
      Tomoaky.JA.Game_Interpreter_command319.call(this);
      if (!$gameParty.inBattle()) {
        $gamePlayer.requestRefresh();
      }
      return true;
    };
    
    // プラグインコマンド
    Tomoaky.JA.Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
    Game_Interpreter.prototype.pluginCommand = function(command, args) {
      Tomoaky.JA.Game_Interpreter_pluginCommand.call(this, command, args);
      if (command === 'JumpAction') {
        switch (args[0]) {
        case 'hp_damage':
          var character = this.character(args[1]);
          if (character && character.isBattler()) {
            character.battler().clearResult();
            character.battler().gainHp(-Number(args[2]));
          }
          break;
        case 'hp':
          var character = this.character(args[1]);
          if (character && character.isBattler()) {
            $gameVariables.setValue(Number(args[2]), character.battler().hp);
          }
          break;
        case 'force_x':
          var character = this.character(args[1]);
          if (character) {
            character._vx = Number(args[2]);
          }
          break;
        case 'force_y':
          var character = this.character(args[1]);
          if (character) {
            character._vy = Number(args[2]);
          }
          break;
        case 'change_actor':
          var actor = $gameActors.actor(Number(args[1]));
          if (actor && actor.isAlive() && $gameParty.members().contains(actor)) {
            var newIndex = $gameParty.members().indexOf(actor);
            if ($gamePlayer._memberIndex != newIndex) {
              $gamePlayer._memberIndex = newIndex;
              $gamePlayer.refresh();
              $gamePlayer.battler().requestEffect('appear');
            }
          }
          break;
        }
      }
    };
    
    //-----------------------------------------------------------------------------
    // Sprite_Character
    //
    
    // メンバ変数の初期化
    Tomoaky.JA.Sprite_Character_initMembers = Sprite_Character.prototype.initMembers;
    Sprite_Character.prototype.initMembers = function() {
      Tomoaky.JA.Sprite_Character_initMembers.call(this);
      this._damages = [];
      this._effectType = null;
      this._effectDuration = 0;
      this._shake = 0;
    };
    
    // フレーム更新
    Tomoaky.JA.Sprite_Character_update = Sprite_Character.prototype.update;
    Sprite_Character.prototype.update = function() {
      Tomoaky.JA.Sprite_Character_update.call(this);
      this.updateDamagePopup();
      if (this._character.isBattler()) {
        this.updateEffect();
      }
    };
    
    // その他の更新
    Tomoaky.JA.Sprite_Character_updateOther = Sprite_Character.prototype.updateOther;
    Sprite_Character.prototype.updateOther = function() {
      if (!this.isEffecting()) {
        Tomoaky.JA.Sprite_Character_updateOther.call(this);
      }
    };
    
    // ダメージポップアップの更新
    Sprite_Character.prototype.updateDamagePopup = function() {
      if (this._character.isBattler()) {
        this.setupDamagePopup();
      }
      if (this._damages.length > 0) {
        for (var i = 0; i < this._damages.length; i++) {
          this._damages[i].update();
          this._damages[i].x = this.x;
          this._damages[i].y = this.y;
        }
        if (!this._damages[0].isPlaying()) {
          this.parent.removeChild(this._damages[0]);
          this._damages.shift();
        }
      }
    };
    
    // ダメージポップアップのセット
    Sprite_Character.prototype.setupDamagePopup = function() {
      var battler = this._character.battler();
      if (battler.isDamagePopupRequested()) {
        var sprite = new Sprite_MapDamage();
        sprite.x = this.x;
        sprite.y = this.y;
        sprite.z = this.z + 1;
        sprite.setup(battler);
        this._damages.push(sprite);
        this.parent.addChild(sprite);
        battler.clearDamagePopup();
        battler.clearActionResult();
      }
    };
    
    // エフェクトのセット
    Sprite_Character.prototype.setupEffect = function() {
      if (this._character.battler().isEffectRequested()) {
        this.startEffect(this._character.battler().effectType());
        this._character.battler().clearEffect();
      }
    };
    
    // エフェクトの開始
    Sprite_Character.prototype.startEffect = function(effectType) {
      this._effectType = effectType;
      switch (this._effectType) {
      case 'appear':
        this.startAppear();
        break;
      case 'whiten':
        this.startWhiten();
        break;
      case 'blink':
        this.startBlink();
        break;
      case 'collapse':
        this.startCollapse();
        break;
      case 'bossCollapse':
        this.startBossCollapse();
        break;
      }
      this.revertToNormal();
    };
    
    // 出現エフェクトの開始
    Sprite_Character.prototype.startAppear = function() {
      this._effectDuration = 16;
    };
    
    // 白フラッシュエフェクトの開始
    Sprite_Character.prototype.startWhiten = function() {
      this._effectDuration = 16;
    };
    
    // 点滅エフェクトの開始
    Sprite_Character.prototype.startBlink = function() {
      this._effectDuration = this._character._invincibleTime;
    };
    
    // 崩壊エフェクトの開始
    Sprite_Character.prototype.startCollapse = function() {
      this._effectDuration = 32;
      this._appeared = false;
    };
    
    // ボス崩壊エフェクトの開始
    Sprite_Character.prototype.startBossCollapse = function() {
      this._effectDuration = this.bitmap.height;
      this._appeared = false;
    };
    
    // エフェクトの更新
    Sprite_Character.prototype.updateEffect = function() {
      this.setupEffect();
      if (this._effectDuration > 0) {
        this._effectDuration--;
        switch (this._effectType) {
        case 'appear':
          this.updateAppear();
          break;
        case 'whiten':
          this.updateWhiten();
          break;
        case 'blink':
          this.updateBlink();
          break;
        case 'collapse':
          this.updateCollapse();
          break;
        case 'bossCollapse':
          this.updateBossCollapse();
          break;
        }
        if (this._effectDuration === 0) {
          this._effectType = null;
          this.setBlendColor([0, 0, 0, 0]);
        }
      }
    };
    
    // エフェクトが実行中かどうか
    Sprite_Character.prototype.isEffecting = function() {
      return this._effectType !== null;
    };
    
    // スプライトのエフェクト設定を元に戻す
    Sprite_Character.prototype.revertToNormal = function() {
      this._shake = 0;
      this.blendMode = 0;
      this.opacity = 255;
      this.setBlendColor([0, 0, 0, 0]);
    };
    
    // 出現エフェクトの更新
    Sprite_Character.prototype.updateAppear = function() {
      this.opacity = (16 - this._effectDuration) * 16;
    };
    
    // 白フラッシュエフェクトの更新
    Sprite_Character.prototype.updateWhiten = function() {
      var alpha = 128 - (16 - this._effectDuration) * 10;
      this.setBlendColor([255, 255, 255, alpha]);
    };
    
    // 点滅エフェクトの更新
    Sprite_Character.prototype.updateBlink = function() {
      this.opacity = (this._effectDuration % 10 < 5) ? 255 : 0;
    };
    
    // 崩壊エフェクトの更新
    Sprite_Character.prototype.updateCollapse = function() {
      this.blendMode = Graphics.BLEND_ADD;
      this.setBlendColor([255, 128, 128, 128]);
      this.opacity *= this._effectDuration / (this._effectDuration + 1);
    };
    
    // ボス崩壊エフェクトの更新
    Sprite_Character.prototype.updateBossCollapse = function() {
      this._shake = this._effectDuration % 2 * 4 - 2;
      this.blendMode = Graphics.BLEND_ADD;
      this.opacity *= this._effectDuration / (this._effectDuration + 1);
      this.setBlendColor([255, 255, 255, 255 - this.opacity]);
      if (this._effectDuration % 20 === 19) {
        SoundManager.playBossCollapse2();
      }
    };
    
    //-----------------------------------------------------------------------------
    // Sprite_MapDamage
    //
    
    function Sprite_MapDamage() {
      this.initialize.apply(this, arguments);
    }
    
    Sprite_MapDamage.prototype = Object.create(Sprite_Damage.prototype);
    Sprite_MapDamage.prototype.constructor = Sprite_MapDamage;
    
    // セットアップ
    Sprite_MapDamage.prototype.setup = function(target) {
      var result = target._actionResult;
      if (result.missed || result.evaded) {
        this.createMiss();
      } else if (result.hpAffected) {
        this.createDigits(0, result.hpDamage);
      } else if (target.isAlive() && result.mpDamage !== 0) {
        this.createDigits(2, result.mpDamage);
      }
      if (result.critical) {
        this.setupCriticalEffect();
      }
    };
    
    //-----------------------------------------------------------------------------
    // Spriteset_Map
    //
    
    // 飛行船の影の作成
    Spriteset_Map.prototype.createShadow = function() {
    };
    
    // 飛行船の影の更新
    Spriteset_Map.prototype.updateShadow = function() {
    };
    
    //-----------------------------------------------------------------------------
    // Scene_Map
    //
    
    Tomoaky.JA.Scene_Map_start = Scene_Map.prototype.start;
    Scene_Map.prototype.start = function() {
      Tomoaky.JA.Scene_Map_start.call(this);
      $gamePlayer.refresh();
    };
    
    Scene_Base.prototype.checkGameover = function() {
    };
    
    Scene_Map.prototype.processMapTouch = function() {
    };
    скрипт от этой игры?
    http://hikimoki.sakura.ne.jp/mv/EiseleDefence/

    Последний раз редактировалось Kerotan; 18.01.2016 в 00:12.



  4. #24
    Администратор Аватар для Пётр
    Информация о пользователе
    Регистрация
    24.04.2014
    Адрес
    Краснодар
    Сообщений
    3,940
    Записей в дневнике
    6
    Репутация: 132 Добавить или отнять репутацию

    По умолчанию

    Цитата Сообщение от Kerotan Посмотреть сообщение
    а мне бы вот от этой боёвки плагин нужен
    из игры Stories of Sheidh II - All Stars Demo v1.1
    Оно? http://forums.rpgmakerweb.com/index....mated-enemies/
    А Худ у Мога возьми. https://atelierrgss.wordpress.com/rmv-battle-hud/

    И доделай уже хоть что-нить дальше 5минутной демки.

  5. #25

    По умолчанию

    Спасибо, Пётр, для меня Худ не важен, главное чтобы чубрик на чубрика нападал Одни будут нейтральными, другие-светлыми, игра для готв 2016



  6. #26
    Хранитель Аватар для Темный
    Информация о пользователе
    Регистрация
    13.05.2011
    Сообщений
    2,449
    Записей в дневнике
    20
    Репутация: 50 Добавить или отнять репутацию

    По умолчанию

    Kerotan плагин который предложил peter8031983 раньше имел пару багов. первый был с оружием врагов другой с выводом винтовки. Надеюсь сейчас это исправленно. А вообще возьми коре янфи боевое его скрипт на статус и его же скрипт на аниме баттлеры. Минимум настроек а результат тот же)
    Последний раз редактировалось Темный; 18.01.2016 в 11:10.



  7. #27
    Местный Аватар для RastaManGames
    Информация о пользователе
    Регистрация
    19.06.2013
    Адрес
    Сибирь, Красноярск
    Сообщений
    147
    Репутация: 4 Добавить или отнять репутацию

    18 Концепция Для Плагина

    Извините, прорвало и не знал, куда написать. Это что-то вроде просьбы кого-то написать (или найти) такой плагин.

    Какое-то время я восхищался плагинов TerraxLighting (кстати, перед тем как прочитать этот пост рекомендуется скачать последнюю версию этого чудесного плагина и разобраться в нём. Суть его - вызов при помощи небольшой строки в комментарии внутри события (пустая форма, которая находится правее формы имени). Из себя свет в этом плагине представляет точку, которой можно задать цвет, радиус, яркость и обрезание с одной из плоскостей. Я подумал "а почему такое не изобрести для звука" и представил небольшой концепт этого плагина.

    Плагин назывался бы AmbientSoundSystem.

    По сути после установки плагина нам бы потребовалось задать какому-либо id свой звук. Поле id включало бы номера от 00 до 99 (думаю столько должно хватит, ибо 999 и 255 это много).



    Суть работы была бы как в TerraxLighting. Выбирается произвольное событие и в его комментарий писалась бы строка вида "snd 01 192 100 5".
    snd - вызов функции (я могу быть безграмотным, так как студент, а не сеньор), 01 - id звука, 192 - радиус (пиксели), 100 - громкость, 5 - интервал между повторами звука (секунды и если поставить 0, то будет идеальное зацикливание звука).



    Поведение было бы следующее. При радиусе 192 в самом центре клетки, в котором стоит событие громкость была бы максимальной - 100. То есть, стоя на 4 клетке напротив события (или на 2-3 клетке по диагонали) мы бы слышали звук с громкостью = 25. Зайдя на 5 клетку от события мы бы не слышали звук вообще. Предусматривается, чтобы при приближении к событию, которое является источником фонового звука, громкость менялась плавно.

    Скорее всего такой плагин весил бы не меньше плагина на освещение (может даже больше, чем 55 КБ) и скорее всего его было бы труднее написать, но он получился бы очень классным и полезным. Думаю многим было бы приятно гулять по картам в RPG и, проходя мимо водопада, слышать его шум или, проходя мимо костра, слышать его потрескивание .

    P.S.: Можно было бы спокойно совмещать этот плагин с TerraxLighting. Да, они оба используют одинаковый метод вызова, но что мешает рядом с событием, отвечающим за свет поставить событие, отвечающее за фоновый звук?

    P.P.S.: Чтобы ощутить всю плавность смены громкости, можно было бы использовать Super Orange Movement.

  8. #28

    По умолчанию

    Цитата Сообщение от Темный Посмотреть сообщение
    Kerotan плагин который предложил peter8031983 раньше имел пару багов. первый был с оружием врагов другой с выводом винтовки. Надеюсь сейчас это исправленно. А вообще возьми коре янфи боевое его скрипт на статус и его же скрипт на аниме баттлеры. Минимум настроек а результат тот же)
    С горем пополам я навязал им парочку пистолей, но когда враги стреляют, слышен режущий звук, а не стреляющий



  9. #29
    Хранитель Аватар для Темный
    Информация о пользователе
    Регистрация
    13.05.2011
    Сообщений
    2,449
    Записей в дневнике
    20
    Репутация: 50 Добавить или отнять репутацию

    По умолчанию

    керотан я в аниме батлерах от yanfi сразу проверил оружие там нет такой фигни как в плагине которой тебе посоветовали.





  10. #30

    По умолчанию

    Цитата Сообщение от Темный Посмотреть сообщение
    керотан я в аниме батлерах от yanfi сразу проверил оружие там нет такой фигни как в плагине которой тебе посоветовали.
    Всё установил и отладил, теперь принцесса готова мир поработить



Страница 3 из 19 ПерваяПервая 1234513 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 2 (пользователей: 0 , гостей: 2)

Метки этой темы

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
Поиск плагинов.