//============================================================================= // TMPlugin - ジャンプアクション // バージョン: 1.0.4 // 最終更新日: 2018/02/21 // 配布元 : http://hikimoki.sakura.ne.jp/ //----------------------------------------------------------------------------- // Copyright (c) 2015 tomoaky // Released under the MIT license. // http://opensource.org/licenses/mit-license.php //============================================================================= /*: @plugindesc Make the map scene look like an action game. @author tomoaky @url https://github.com/munokura/tomoaky-MV-plugins @license MIT License @help English Help Translator: munokura This is an unofficial English translation of the plugin help, created to support global RPG Maker users. Feedback is welcome to improve translation quality (see: https://github.com/munokura/tomoaky-MV-plugins ). Original plugin by tomoaky. ----- TMPlugin - Jump Action ver. 1.0.4 How to Use: For details, please refer to the distribution site. This plugin has been tested with RPG Maker MV Version 1.5.0. This plugin is distributed under the MIT License. You are free to use it commercially, modify it, redistribute it, and more. Sample image https://github.com/munokura/tomoaky-MV-plugins/tree/master/img/system Sample Project https://github.com/munokura/tomoaky-MV-plugins/tree/master/zip Memo Tags (Actor, Equipment, State): # Walking Speed # Jumping Power # Swimming Speed # Ladder Movement Speed # Walking Acceleration # Ladder Movement Acceleration # Additional Jump Input Time # Underwater Jump Power # Number of Consecutive Jumps # Weight # Gravity # Friction # Wall Jump # Dash Speed (Horizontal) # Dash speed (vertical) # Dash duration # Post-dash recovery time # MP required for dash # Fall damage resistance # Guard transition speed # Invincible time after taking damage # Number of shots fired simultaneously # Distance between shots (radians) # Shot travel speed # Shot lifespan # Shot type # Shot image index # Shot skill number # Post-fire freeze time # Bullet firing sound effect filename # Bullet firing sound effect volume # Bullet firing sound effect pitch Memo Tag (Event): # Hitbox (size from center to left and right edges) # Hitbox (size from feet to head) # Butler (enemy number) # Self-switch when Butler is KO'd # Time until respawn (frames) # Lift Elements # Weight # Gravity Memo Tag (Skill): # Animation played upon impact # Bullets penetrate terrain regardless of terrain. # Bullets bounce off terrain without disappearing. Fires a new bullet when the previous one is deleted due to timeout. Set the parameters from n to skillId of the "nallShot" plugin command. Plugin Command: actGainHp -1 -5 # Deals 5 damage to the player. actGainHp 1 -100 # Deals 100 damage to Event 1. actHp 1 2 # Assigns Event 1's HP to Game Variable 2. actForceX -1 0.1 # Forces the player's X velocity to 0.1. actForceY 1 -0.15 # Forces Event 1's Y velocity to -0.15. actForceStop -1 # Force the player's speed to 0. actChangeActor 2 # Change the controlled character to actor number 2. actHideHpGauge # Hides the HP gauge at your feet actShowHpGauge # Shows the HP gauge at your feet actPopup -1 text #ff0000 Pops up red text for the player. nwayShot eventId n space angle speed count type index skillId eventId: Number of bullets fired (-1 for player) n: Number of bullets fired simultaneously space: Distance between bullets (radians) angle: Fire direction (radians) speed: Bullet speed count: Bullet lifespan type: Bullet type index: Bullet image index skillId: Bullet skill (for damage calculation, optional) nwayAim eventId n space angle speed count type index skillId Similar to nway_shot, but the angle automatically adds the player's direction (radians). A value of 0 will aim at the player. nallShot eventId n angle speed count type index skillId Fires bullets in all directions. The spacing between bullets is set automatically. nallAim eventId n space angle speed count type index skillId This is the player-aiming version of nall_shot. @param gravity @desc Gravity strength. Default: 0.004 @default 0.004 @type string @param friction @desc Strength of normal terrain and event friction. Default: 0.001 @default 0.001 @type string @param tileMarginTop @desc How much to shift the coordinates used to detect contact with the terrain upwards. Default: 0.5 @default 0.5 @type string @param stepsForTurn @desc How many squares does it take to move one turn? Default: 20 @default 20 @type number @param allDeadEvent @desc Common event number to be triggered when all enemies are wiped out. Default: 0 @default 0 @type number @param guardState @desc State number to treat as defensive state Initial value: 2 @default 2 @type state @param guardMoveRate @desc Defensive Movement Speed Correction (%) Default: 25 @default 25 @type number @param jumpRule @desc This is the jump rule setting. This rule is only applied when there is one jump. @default 1 @type select @option You can jump even if your feet are not on the ground @value 1 @option You can only jump when your feet are on the ground @value 2 @param eventCollapse @desc Use the collapse effect when the event is defeated. Default: ON (false = OFF disabled / true = ON enabled) @default true @type boolean @param hpGauge @desc Uses the function to display the HP gauge at your feet. Default: ON (false = OFF disabled / true = ON enabled) @default true @type boolean @param floorDamage @desc Damage received from floors. Default: 10 @default 10 @type number @param damageFallRate @desc Fall damage multiplier. Default: 10 @default 10 @type number @param damageFallHeight @desc Height at which fall damage is taken. Default: 5 @default 5 @type number @param flickWeight @desc The difference in weight that can be repelled. Default: 1 (0 means the same weight can be repelled) @default 1 @type number @param flickSkill @desc Skill number used to calculate knockback damage. Default: 1 (0 means no damage). @default 1 @type skill @param stageRegion @desc Region number to treat as a base. Default: 60 @default 60 @type number @param wallRegion @desc Region number to treat as wall. Default: 61 @default 61 @type number @param slipWallRegion @desc Region number that cannot be used for wall jumping. Default: 62 @default 62 @type number @param slipFloorRegion @desc Region number to treat as slippery floor. Default: 63 @default 63 @type number @param roughFloorRegion @desc Region number to treat as floor where movement speed is halved. Default: 64 @default 64 @type number @param marshFloorRegion @desc Region number to treat as immovable floor. Default: 65 @default 65 @type number @param waterTerrainTag @desc Terrain tag number to treat as underwater. Default: 1 @default 1 @type number @param levelupPopup @desc Pop-up displayed when leveling up. Default: LEVEL UP!! @default LEVEL UP!! @type string @param levelupAnimationId @desc Animation number displayed when leveling up. Default: 46 @default 46 @type animation @require 1 @param attackToOk @desc Whether to use the attack button as the menu confirm button. Default: ON ( false = OFF - disabled / true = ON - enabled ) @default true @type boolean @param jumpToCancel @desc Whether to use the jump button as a cancel button for the menu. Default: ON ( false = OFF - disabled / true = ON - enabled ) @default true @type boolean @param useEventSeSwim @desc Apply the sound effect when entering water to the event. Default: ON ( false = OFF disabled / true = ON enabled ) @default true @type boolean @param jumpSe @desc Jump sound effect filename. Default: Crossbow @default Crossbow @type file @require 1 @dir audio/se/ @param jumpSeParam @desc Jump sound effect parameters. Default: {"volume":90, "pitch":100, "pan":0} @default {"volume":90, "pitch":100, "pan":0} @type string @param dashSe @desc Dash sound effect file name. Default: Wind4 @default Wind4 @type file @require 1 @dir audio/se/ @param dashSeParam @desc Parameters for dash sound effect. Default: {"volume":90, "pitch":50, "pan":0} @default {"volume":90, "pitch":50, "pan":0} @type string @param flickSe @desc File name of the dash flick sound effect. Default: Damage1 @default Damage1 @type file @require 1 @dir audio/se/ @param flickSeParam @desc Parameters for the dash flick sound effect. Default: {"volume":90, "pitch":100, "pan":0} @default {"volume":90, "pitch":100, "pan":0} @type string @param swimSe @desc File name of water entry sound effect. Default: Water1 @default Water1 @type file @require 1 @dir audio/se/ @param swimSeParam @desc Parameters for the water entry sound effect. Default: {"volume":90, "pitch":100, "pan":0} @default {"volume":90, "pitch":100, "pan":0} @type string @param changeSe @desc The file name of the sound effect when switching between playable characters. Default: Sword1 @default Sword1 @type file @require 1 @dir audio/se/ @param changeSeParam @desc Parameters for the sound effect when switching between controlled characters. Default: {"volume":90, "pitch":100, "pan":0} @default {"volume":90, "pitch":100, "pan":0} @type string @param carrySe @desc Event lift sound effect file name. Default: Cancel1 @default Cancel1 @type file @require 1 @dir audio/se/ @param carrySeParam @desc Event lift sound effect parameters. Default: {"volume":90, "pitch":70, "pan":0} @default {"volume":90, "pitch":70, "pan":0} @type string @param hurlSe @desc Event throw sound effect file name. Default: Evasion1 @default Evasion1 @type file @require 1 @dir audio/se/ @param hurlSeParam @desc Event throw sound effect parameters. Default: {"volume":90, "pitch":70, "pan":0} @default {"volume":90, "pitch":70, "pan":0} @type string @param guardSe @desc Defensive sound effect file name. Default: Equip1 @default Equip1 @type file @require 1 @dir audio/se/ @param guardSeParam @desc Defensive sound effect parameters. Default: {"volume":90, "pitch":150, "pan":0} @default {"volume":90, "pitch":150, "pan":0} @type string @param playerBulletsMax @desc Maximum number of bullets for the player. Default: 32 @default 32 @type number @param enemyBulletsMax @desc Maximum number of bullets for the event. Default: 256 @default 256 @type number @param weaponSprite @desc Displays the weapon image when firing a bullet. Default: ON ( false = OFF - disabled / true = ON - enabled ) @default true @type boolean @param autoDamageSe @desc Automatically plays a sound effect when a bullet hits the target. Default: ON (false = OFF disabled / true = ON enabled) @default true @type boolean @param bulletTypeName1 @desc Image file name for bullet type 1. Default: Bullet1 @default Bullet1 @type file @require 1 @dir img/system/ @param bulletTypeName2 @desc Image file name for bullet type 2. Default: Bullet1 @default Bullet1 @type file @require 1 @dir img/system/ @param bulletTypeName3 @desc Image file name for bullet type 3. Default: Bullet1 @default Bullet1 @type file @require 1 @dir img/system/ @param bulletTypeName4 @desc Image file name for bullet type 4. Default: Bullet1 @default Bullet1 @type file @require 1 @dir img/system/ @param bulletTypeSize @desc Hitbox size for each bullet type. Default: 6,6,6,6 @default 6,6,6,6 @type string @param attackKey @desc Key used to fire the player's bullet Default: Z @default Z @type string @param jumpKey @desc Key used to make the player jump Default: X @default X @type string @param dashKey @desc Key used to sprint the player Default: C @default C @type string @param padButtons @desc Pad button code to use Default: ok,cancel,menu,shift,attack,jump,pageup,pagedown @default ok,cancel,menu,shift,attack,jump,pageup,pagedown @type string @param padButtonNames @desc Pad Button Names Please set the button names in the same order as padButtons @default ok,cancel,menu,shift,attack,jump,pageup,pagedown @type string @param defaultPadButtons @desc Pad button default layout Default: Please set the code corresponding to buttons 1 to 12 @default cancel,ok,shift,jump,pageup,pagedown,attack,menu,menu,menu,menu,menu @type string @param padConfigCommand @desc Command name of pad button layout (if empty, function is disabled) Default: Pad button layout @default Pad button layout @type string @param stepAnimeConstantA @desc Stepping speed constant A Initial value: 0.1 @default 0.1 @type string @param stepAnimeConstantB @desc Stepping speed constant B Initial value: 300 @default 300 @type string */ /*:ja @plugindesc マップシーンをそれっぽいアクションゲームにします。 @author tomoaky @url https://github.com/munokura/tomoaky-MV-plugins @license MIT License @help TMPlugin - ジャンプアクション ver1.0.4 使い方: 詳細は配布サイトを参照してください。 このプラグインは RPGツクールMV Version 1.5.0 で動作確認をしています。 このプラグインはMITライセンスのもとに配布しています、商用利用、 改造、再配布など、自由にお使いいただけます。 サンプル画像 https://github.com/munokura/tomoaky-MV-plugins/tree/master/img/system サンプルプロジェクト https://github.com/munokura/tomoaky-MV-plugins/tree/master/zip メモ欄タグ(アクター、装備、ステート): # 歩行速度 # ジャンプ力 # 泳ぐ速度 # はしご移動速度 # 歩行加速度 # はしご移動加速度 # ジャンプ追加入力時間 # 水中ジャンプ力 # 連続ジャンプ回数 # 重さ # 重力 # 摩擦 # 壁ジャンプ # ダッシュ速度(横方向) # ダッシュ速度(縦方向) # ダッシュ時間 # ダッシュ後硬直時間 # ダッシュに必要なMP # 落下ダメージ耐性 # 防御状態への移行速度 # 被ダメージ後の無敵時間 # 同時に発射する弾の数 # 弾同士の間隔(ラジアン) # 弾の移動速度 # 弾の寿命 # 弾のタイプ # 弾画像のインデックス # 弾のスキル番号 # 発射後の硬直時間 # 弾発射効果音のファイル名 # 弾発射効果音のボリューム # 弾発射効果音のピッチ メモ欄タグ(イベント): # 当たり判定(中心から左右の端までのサイズ) # 当たり判定(足元から頭までのサイズ) # バトラー(敵番号) # バトラー戦闘不能時セルフスイッチ # 再出現までの時間(フレーム) # リフト属性 # 重さ # 重力 メモ欄タグ(スキル): # 着弾時に再生するアニメーション # 弾が地形を無視して貫通する # 弾が地形に当たると消えずに跳ね返る 弾が時間切れで削除される際に新しく弾を発射する。 パラメータはプラグインコマンド『nallShot』の n ~ skillId までを 設定します。 プラグインコマンド: actGainHp -1 -5 # プレイヤーに 5 ダメージを与える。 actGainHp 1 -100 # イベント 1 番に 100 ダメージを与える。 actHp 1 2 # イベント 1 番のHPをゲーム変数 2 番に代入。 actForceX -1 0.1 # プレイヤーの X 速度を 0.1 に強制変更。 actForceY 1 -0.15 # イベント 1 番の Y 速度を -0.15 に強制変更。 actForceStop -1 # プレイヤーの速度を 0 に強制変更。 actChangeActor 2 # 操作キャラクターをアクター 2 番に変更。 actHideHpGauge # 足元HPゲージを隠す actShowHpGauge # 足元HPゲージを表示する actPopup -1 テキスト #ff0000 プレイヤーに赤色のテキストをポップアップ nwayShot eventId n space angle speed count type index skillId eventId: 弾を発射するイベントの番号( -1 でプレイヤー) n: 同時に発射する弾の数 space: 弾同士の間隔(ラジアン) angle: 発射する方向(ラジアン) speed: 弾の移動速度 count: 弾の寿命 type: 弾のタイプ index: 弾画像のインデックス skillId: 弾のスキル(ダメージ計算用、省略可) nwayAim eventId n space angle speed count type index skillId nway_shot と同様ですが、angleにプレイヤーがいる方向(ラジアン)を 自動的に加算します。angleが 0 なら自機狙いになります。 nallShot eventId n angle speed count type index skillId 全方位に向けて弾を発射します、弾同士の間隔は自動で設定されます。 nallAim eventId n space angle speed count type index skillId nall_shot の自機狙い版です。 @param gravity @desc 重力の強さ。 初期値: 0.004 @default 0.004 @type string @param friction @desc 通常の地形とイベントの摩擦の強さ。 初期値: 0.001 @default 0.001 @type string @param tileMarginTop @desc 地形との接触判定に使う座標をどれだけ上へずらすか。 初期値: 0.5 @default 0.5 @type string @param stepsForTurn @desc 何マスの移動で1ターン経過するか。 初期値: 20 @default 20 @type number @param allDeadEvent @desc 全滅時に起動するコモンイベント番号。 初期値: 0 @default 0 @type number @param guardState @desc 防御状態として扱うステート番号 初期値: 2 @default 2 @type state @param guardMoveRate @desc 防御状態の移動速度補正(%) 初期値: 25 @default 25 @type number @param jumpRule @desc ジャンプのルール設定です。 このルールはジャンプ回数が 1 回のときのみ適用されます。 @default 1 @type select @option 地面に足がついていなくてもジャンプ可能 @value 1 @option 地面に足がついてるときのみジャンプ可能 @value 2 @param eventCollapse @desc イベント戦闘不能時に崩壊エフェクトを使う。 初期値: ON ( false = OFF 無効 / true = ON 有効 ) @default true @type boolean @param hpGauge @desc 足元にHPゲージを表示する機能を利用する。 初期値: ON ( false = OFF 無効 / true = ON 有効 ) @default true @type boolean @param floorDamage @desc ダメージ床から受けるダメージ。 初期値: 10 @default 10 @type number @param damageFallRate @desc 落下ダメージの倍率。 初期値: 10 @default 10 @type number @param damageFallHeight @desc 落下ダメージを受ける高さ。 初期値: 5 @default 5 @type number @param flickWeight @desc はじき飛ばせる重さの差。 初期値: 1( 0 なら同じ重さではじき飛ばせる ) @default 1 @type number @param flickSkill @desc はじき飛ばしのダメージ計算に使うスキル番号。 初期値: 1( 0 ならダメージなし ) @default 1 @type skill @param stageRegion @desc 足場として扱うリージョン番号。 初期値: 60 @default 60 @type number @param wallRegion @desc 壁として扱うリージョン番号。 初期値: 61 @default 61 @type number @param slipWallRegion @desc 壁ジャンプができない壁として扱うリージョン番号。 初期値: 62 @default 62 @type number @param slipFloorRegion @desc すべる床として扱うリージョン番号。 初期値: 63 @default 63 @type number @param roughFloorRegion @desc 移動速度半減の床として扱うリージョン番号。 初期値: 64 @default 64 @type number @param marshFloorRegion @desc 移動できない床として扱うリージョン番号。 初期値: 65 @default 65 @type number @param waterTerrainTag @desc 水中として扱う地形タグ番号。 初期値: 1 @default 1 @type number @param levelupPopup @desc レベルアップ時に表示するポップアップ。 初期値: LEVEL UP!! @default LEVEL UP!! @type string @param levelupAnimationId @desc レベルアップ時に表示するアニメーション番号。 初期値: 46 @default 46 @type animation @require 1 @param attackToOk @desc 攻撃ボタンをメニューの決定ボタンとしても使うかどうか 初期値: ON ( false = OFF 無効 / true = ON 有効 ) @default true @type boolean @param jumpToCancel @desc ジャンプボタンをメニューのキャンセルボタンとしても使うかどうか 初期値: ON ( false = OFF 無効 / true = ON 有効 ) @default true @type boolean @param useEventSeSwim @desc 水に入ったときの効果音をイベントに適用する。 初期値: ON ( false = OFF 無効 / true = ON 有効 ) @default true @type boolean @param jumpSe @desc ジャンプ効果音のファイル名。 初期値: Crossbow @default Crossbow @type file @require 1 @dir audio/se/ @param jumpSeParam @desc ジャンプ効果音のパラメータ。 初期値: {"volume":90, "pitch":100, "pan":0} @default {"volume":90, "pitch":100, "pan":0} @type string @param dashSe @desc ダッシュ効果音のファイル名。 初期値: Wind4 @default Wind4 @type file @require 1 @dir audio/se/ @param dashSeParam @desc ダッシュ効果音のパラメータ。 初期値: {"volume":90, "pitch":50, "pan":0} @default {"volume":90, "pitch":50, "pan":0} @type string @param flickSe @desc ダッシュはじき効果音のファイル名。 初期値: Damage1 @default Damage1 @type file @require 1 @dir audio/se/ @param flickSeParam @desc ダッシュはじき効果音のパラメータ。 初期値: {"volume":90, "pitch":100, "pan":0} @default {"volume":90, "pitch":100, "pan":0} @type string @param swimSe @desc 入水効果音のファイル名。 初期値: Water1 @default Water1 @type file @require 1 @dir audio/se/ @param swimSeParam @desc 入水効果音のパラメータ。 初期値: {"volume":90, "pitch":100, "pan":0} @default {"volume":90, "pitch":100, "pan":0} @type string @param changeSe @desc 操作キャラ切り替え効果音のファイル名。 初期値: Sword1 @default Sword1 @type file @require 1 @dir audio/se/ @param changeSeParam @desc 操作キャラ切り替え効果音のパラメータ。 初期値: {"volume":90, "pitch":100, "pan":0} @default {"volume":90, "pitch":100, "pan":0} @type string @param carrySe @desc イベント持ち上げ効果音のファイル名。 初期値: Cancel1 @default Cancel1 @type file @require 1 @dir audio/se/ @param carrySeParam @desc イベント持ち上げ効果音のパラメータ。 初期値: {"volume":90, "pitch":70, "pan":0} @default {"volume":90, "pitch":70, "pan":0} @type string @param hurlSe @desc イベント投げ効果音のファイル名。 初期値: Evasion1 @default Evasion1 @type file @require 1 @dir audio/se/ @param hurlSeParam @desc イベント投げ効果音のパラメータ。 初期値: {"volume":90, "pitch":70, "pan":0} @default {"volume":90, "pitch":70, "pan":0} @type string @param guardSe @desc 防御効果音のファイル名。 初期値: Equip1 @default Equip1 @type file @require 1 @dir audio/se/ @param guardSeParam @desc 防御効果音のパラメータ。 初期値: {"volume":90, "pitch":150, "pan":0} @default {"volume":90, "pitch":150, "pan":0} @type string @param playerBulletsMax @desc プレイヤーの弾の最大数。 初期値: 32 @default 32 @type number @param enemyBulletsMax @desc イベントの弾の最大数。 初期値: 256 @default 256 @type number @param weaponSprite @desc 弾発射時に武器画像を表示する。 初期値: ON ( false = OFF 無効 / true = ON 有効 ) @default true @type boolean @param autoDamageSe @desc 着弾時に自動で効果音を再生する。 初期値: ON (false = OFF 無効 / true = ON 有効 ) @default true @type boolean @param bulletTypeName1 @desc 弾タイプ 1 の画像ファイル名。 初期値: Bullet1 @default Bullet1 @type file @require 1 @dir img/system/ @param bulletTypeName2 @desc 弾タイプ 2 の画像ファイル名。 初期値: Bullet1 @default Bullet1 @type file @require 1 @dir img/system/ @param bulletTypeName3 @desc 弾タイプ 3 の画像ファイル名。 初期値: Bullet1 @default Bullet1 @type file @require 1 @dir img/system/ @param bulletTypeName4 @desc 弾タイプ 4 の画像ファイル名。 初期値: Bullet1 @default Bullet1 @type file @require 1 @dir img/system/ @param bulletTypeSize @desc 弾タイプごとの当たり判定のサイズ。 初期値: 6,6,6,6 @default 6,6,6,6 @type string @param attackKey @desc プレイヤーの弾発射に使用するキー 初期値: Z @default Z @type string @param jumpKey @desc プレイヤーのジャンプに使用するキー 初期値: X @default X @type string @param dashKey @desc プレイヤーのダッシュに使用するキー 初期値: C @default C @type string @param padButtons @desc 利用するパッドボタンのコード 初期値: ok,cancel,menu,shift,attack,jump,pageup,pagedown @default ok,cancel,menu,shift,attack,jump,pageup,pagedown @type string @param padButtonNames @desc パッドボタンの名前 padButtonsと同じ並び順でボタンの名前を設定してください @default 決定,キャンセル,メニュー,ダッシュ,アタック,ジャンプ,キャラ変更(前),キャラ変更(次) @type string @param defaultPadButtons @desc パッドボタンの初期配置 初期値: ボタン 1 ~ 12 に対応するコードを設定してください @default cancel,ok,shift,jump,pageup,pagedown,attack,menu,menu,menu,menu,menu @type string @param padConfigCommand @desc パッドボタン配置のコマンド名 (空にすると機能を無効化) 初期値: パッドボタン配置 @default パッドボタン配置 @type string @param stepAnimeConstantA @desc 足踏み速度定数A 初期値: 0.1 @default 0.1 @type string @param stepAnimeConstantB @desc 足踏み速度定数B 初期値: 300 @default 300 @type string */ var Imported = Imported || {}; Imported.TMJumpAction = true; if (!Imported.TMEventBase) { Imported.TMEventBase = true; (function() { //----------------------------------------------------------------------------- // Game_Event // var _Game_Event_setupPage = Game_Event.prototype.setupPage; Game_Event.prototype.setupPage = function() { _Game_Event_setupPage.call(this); if (this._pageIndex >= 0) this.loadCommentParams(); }; 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 && command.code == 108 || command.code == 408) { for (;;) { var match = re.exec(command.parameters[0]); if (match) { this._commentParams[match[1]] = match[2] === ':' ? match[3] : true; } else { break; } } } else { break; } } }; Game_Event.prototype.loadTagParam = function(paramName) { return this._commentParams[paramName] || this.event().meta[paramName] || null; }; })(); } function Game_Bullet() { this.initialize.apply(this, arguments); } (function() { var parameters = PluginManager.parameters('TMJumpAction'); var actGravity = +(parameters['gravity'] || 0.004); var actFriction = +(parameters['friction'] || 0.001); var actTileMarginTop = +(parameters['tileMarginTop'] || 0.5); var actStepsForTurn = +(parameters['stepsForTurn'] || 20); var actAllDeadEvent = +(parameters['allDeadEvent'] || 0); var actGuardStateId = +(parameters['guardState'] || 2); var actGuardMoveRate = +(parameters['guardMoveRate'] || 25); var actJumpRule = parameters['jumpRule'] || '1'; var actEventCollapse = JSON.parse(parameters['eventCollapse']); var actHpGauge = JSON.parse(parameters['hpGauge']); var actFloorDamage = +(parameters['floorDamage'] || 10); var actDamageFallRate = +(parameters['damageFallRate'] || 10); var actDamageFallHeight = +(parameters['damageFallHeight'] || 5); var actFlickWeight = +(parameters['flickWeight'] || 1); var actFlickSkill = +(parameters['flickSkill'] || 1); var actStageRegion = +(parameters['stageRegion'] || 60); var actWallRegion = +(parameters['wallRegion'] || 61); var actSlipWallRegion = +(parameters['slipWallRegion'] || 62); var actSlipFloorRegion = +(parameters['slipFloorRegion'] || 63); var actRoughFloorRegion = +(parameters['roughFloorRegion'] || 64); var actMarshFloorRegion = +(parameters['marshFloorRegion'] || 65); var actWaterTerrainTag = +(parameters['waterTerrainTag'] || 1); var actLevelupPopup = parameters['levelupPopup']; var actLevelupAnimationId = +(parameters['levelupAnimationId'] || 0); var actAttackToOk = JSON.parse(parameters['attackToOk']); var actJumpToCancel = JSON.parse(parameters['jumpToCancel']); var actUseEventSeSwim = JSON.parse(parameters['useEventSeSwim']); var actSeJump = JSON.parse(parameters['jumpSeParam'] || '{}'); actSeJump.name = parameters['jumpSe'] || ''; var actSeDash = JSON.parse(parameters['dashSeParam'] || '{}'); actSeDash.name = parameters['dashSe'] || ''; var actSeFlick = JSON.parse(parameters['flickSeParam'] || '{}'); actSeFlick.name = parameters['flickSe'] || ''; var actSeSwim = JSON.parse(parameters['swimSeParam'] || '{}'); actSeSwim.name = parameters['swimSe'] || ''; var actSeChange = JSON.parse(parameters['changeSeParam'] || '{}'); actSeChange.name = parameters['changeSe'] || ''; var actSeCarry = JSON.parse(parameters['carrySeParam'] || '{}'); actSeCarry.name = parameters['carrySe'] || ''; var actSeHurl = JSON.parse(parameters['hurlSeParam'] || '{}'); actSeHurl.name = parameters['hurlSe'] || ''; var actSeGuard = JSON.parse(parameters['guardSeParam'] || '{}'); actSeGuard.name = parameters['guardSe'] || ''; var actPlayerBulletsMax = +(parameters['playerBulletsMax'] || 32); var actEnemyBulletsMax = +(parameters['enemyBulletsMax'] || 256); var actWeaponSprite = JSON.parse(parameters['weaponSprite']); var actAutoDamageSe = JSON.parse(parameters['autoDamageSe']); var actBulletNames = []; actBulletNames[1] = parameters['bulletTypeName1']; actBulletNames[2] = parameters['bulletTypeName2']; actBulletNames[3] = parameters['bulletTypeName3']; actBulletNames[4] = parameters['bulletTypeName4']; var actBulletSizes = parameters['bulletTypeSize'].split(',').map(function(n) { return +n / 48; }); actBulletSizes.unshift(0); var padButtons = parameters['padButtons'].split(','); var padButtonNames = parameters['padButtonNames'].split(','); var defaultPadButtons = parameters['defaultPadButtons'].split(','); var padConfigCommand = parameters['padConfigCommand']; var actStepAnimeConstantA = +(parameters['stepAnimeConstantA'] || 0.1); var actStepAnimeConstantB = +(parameters['stepAnimeConstantB'] || 300); //----------------------------------------------------------------------------- // Input // if (parameters['attackKey']) { Input.keyMapper[parameters['attackKey'].charCodeAt()] = 'attack'; } if (parameters['jumpKey']) { Input.keyMapper[parameters['jumpKey'].charCodeAt()] = 'jump'; } if (parameters['dashKey']) { Input.keyMapper[parameters['dashKey'].charCodeAt()] = 'dash'; } //----------------------------------------------------------------------------- // ConfigManager // ConfigManager.getPadButton = function(id) { return Input.gamepadMapper[id]; }; ConfigManager.setPadButton = function(id, code) { Input.gamepadMapper[id] = code; }; var _ConfigManager_makeData = ConfigManager.makeData; ConfigManager.makeData = function() { var config = _ConfigManager_makeData.call(this); for (var i = 0; i < 12; i++) { config['padButton' + i] = this.getPadButton(i); } return config; }; var _ConfigManager_applyData = ConfigManager.applyData; ConfigManager.applyData = function(config) { _ConfigManager_applyData.call(this, config); for (var i = 0; i < 12; i++) { this.setPadButton(i, this.readPadButton(config, i)); } }; ConfigManager.readPadButton = function(config, id) { return config['padButton' + id] || defaultPadButtons[id]; }; //----------------------------------------------------------------------------- // Game_System // var _Game_System_initialize = Game_System.prototype.initialize; Game_System.prototype.initialize = function() { _Game_System_initialize.call(this); this._actHpGaugeVisible = true; }; Game_System.prototype.isActHpGaugeVisible = function() { return this._actHpGaugeVisible; }; Game_System.prototype.setActHpGaugeVisible = function(flag) { this._actHpGaugeVisible = flag; }; //----------------------------------------------------------------------------- // Game_Action // var _Game_Action_setSubject = Game_Action.prototype.setSubject; Game_Action.prototype.setSubject = function(subject) { if (!subject.isActor() && !$gameParty.inBattle()) { this._subjectEnemyIndex = subject._screenX; this._subjectActorId = 0; } else { _Game_Action_setSubject.call(this, subject); } }; var _Game_Action_subject = Game_Action.prototype.subject; Game_Action.prototype.subject = function() { if (this._subjectActorId == 0 && !$gameParty.inBattle()) { return $gameMap.event(this._subjectEnemyIndex).battler(); } else { return _Game_Action_subject.call(this); } }; //----------------------------------------------------------------------------- // Game_Battler // // メンバ変数の初期化 var _Game_Battler_initMembers = Game_Battler.prototype.initMembers; Game_Battler.prototype.initMembers = function() { _Game_Battler_initMembers.call(this); this._actionResult = new Game_ActionResult(); }; // リザルトのクリア var _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); _Game_Battler_clearResult.call(this); }; // バトル終了処理 var _Game_Battler_onBattleEnd = Game_Battler.prototype.onBattleEnd; Game_Battler.prototype.onBattleEnd = function() { _Game_Battler_onBattleEnd.call(this); this.clearActionResult(); }; // ジャンプアクションリザルトのクリア Game_Battler.prototype.clearActionResult = function() { this._actionResult.clear(); }; // ダメージ効果音の再生 Game_Battler.prototype.playDamageSe = function() { if (!actAutoDamageSe) return; SoundManager.playEnemyDamage(); }; // 回復効果音の再生 Game_Battler.prototype.playRecovarySe = function() { if (!actAutoDamageSe) return; SoundManager.playRecovery(); }; // ミス効果音の再生 Game_Battler.prototype.playMissSe = function() { if (!actAutoDamageSe) return; SoundManager.playMiss(); }; //----------------------------------------------------------------------------- // Game_Actor // // ダメージ床から受けるダメージ Game_Actor.prototype.basicFloorDamage = function() { return actFloorDamage; }; // 何マスの移動で1ターン経過するか Game_Actor.prototype.stepsForTurn = function() { return actStepsForTurn; }; // 付加されたステートの表示 var _Game_Actor_showAddedStates = Game_Actor.prototype.showAddedStates; Game_Actor.prototype.showAddedStates = function() { if ($gameParty.inBattle()) { _Game_Actor_showAddedStates.call(this); } }; // レベルアップの表示 var _Game_Actor_displayLevelUp = Game_Actor.prototype.displayLevelUp; Game_Actor.prototype.displayLevelUp = function(newSkills) { if ($gameParty.inBattle()) { _Game_Actor_displayLevelUp.call(this, newSkills); } else { $gamePlayer.setMapPopup(actLevelupPopup, '#ffffff'); $gamePlayer.requestAnimation(actLevelupAnimationId); } }; // 解除されたステートの表示 var _Game_Actor_showRemovedStates = Game_Actor.prototype.showRemovedStates; Game_Actor.prototype.showRemovedStates = function() { if ($gameParty.inBattle()) { _Game_Actor_showRemovedStates.call(this); } }; // アクター(+装備、ステート)のタグからパラメータ(数値)をロード Game_Actor.prototype.loadTagParam = function(param_name, default_value) { var result = +(this.actor().meta[param_name] || default_value); var equips = this.equips().concat(this.states()); for (var i = 0; i < equips.length; i++) { if (equips[i] && equips[i].meta[param_name]) { result += +equips[i].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++) { if (equips[i] && equips[i].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--) { if (equips[i] && equips[i].meta[param_name]) { return equips[i].meta[param_name]; } } return default_value; }; // ダメージ効果音の再生 Game_Actor.prototype.playDamageSe = function() { if (!actAutoDamageSe) return; SoundManager.playActorDamage(); }; //----------------------------------------------------------------------------- // Game_Party // Game_Party.prototype.frontSlideActor = function() { for (var i = 0; i < this.size(); i++) { this._actors.push(this._actors.shift()); if (!this.leader().isDead()) break; } $gamePlayer.refresh(); }; Game_Party.prototype.backSlideActor = function() { for (var i = 0; i < this.size(); i++) { this._actors.unshift(this._actors.pop()); if (!this.leader().isDead()) break; } $gamePlayer.refresh(); }; Game_Party.prototype.sortActor = function(actorId) { for (var i = 0; i < this.size(); i++) { this._actors.push(this._actors.shift()); if (this._actors[0] === actorId) break; } $gamePlayer.refresh(); }; //----------------------------------------------------------------------------- // Game_Map // // セットアップ var _Game_Map_setup = Game_Map.prototype.setup; Game_Map.prototype.setup = function(mapId) { _Game_Map_setup.call(this, mapId); this.setupBullets(); }; // 弾のセットアップ Game_Map.prototype.setupBullets = function() { this._playerBullets = []; this._alivePlayerBullets = []; this._blankPlayerBullets = []; for (var i = 0; i < actPlayerBulletsMax; i++) { this._playerBullets.push(new Game_Bullet()); this._blankPlayerBullets.push(i); } this._enemyBullets = []; this._aliveEnemyBullets = []; this._blankEnemyBullets = []; for (var i = 0; i < actEnemyBulletsMax; i++) { this._enemyBullets.push(new Game_Bullet()); this._blankEnemyBullets.push(i); } }; // 自機弾を返す Game_Map.prototype.playerBullets = function() { return this._playerBullets; }; // 敵機弾を返す Game_Map.prototype.enemyBullets = function() { return this._enemyBullets; }; // 乗り物は作らない 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) === actSlipWallRegion) 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 === actWallRegion || rg === actSlipWallRegion) 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 === actStageRegion) flag |= 1; if ((flag & 0x10) !== 0) continue; // [*] No effect on passage if ((flag & bit) === 0) return true; // [o] Passable if ((flag & bit) === bit) return false; // [x] Impassable } return false; }; // 弾の通行チェック Game_Map.prototype.checkPassageBullet = function(x, y) { if (!this.isValid(x, y)) return false; var rg = this.tileId(x, y, 5); if (rg === actWallRegion || rg === actSlipWallRegion) return false; var flags = this.tilesetFlags(); var tiles = this.layeredTiles(x, y); for (var i = 0; i < tiles.length; i++) { var flag = flags[tiles[i]]; if ((flag & 0x10) !== 0) continue; if ((flag & 0x0f) !== 0x0f) return true; if ((flag & 0x0f) !== 0) return false; } return false; }; // フレーム更新 var _Game_Map_update = Game_Map.prototype.update; Game_Map.prototype.update = function(sceneActive) { _Game_Map_update.call(this, sceneActive); this.updateBullets(); }; // 弾の更新 Game_Map.prototype.updateBullets = function() { for (var i = this._alivePlayerBullets.length - 1; i >= 0; i--) { var bi = this._alivePlayerBullets[i]; if (!this._playerBullets[bi].update()) { this._alivePlayerBullets.splice(i, 1); this._blankPlayerBullets.push(bi); } } for (var i = this._aliveEnemyBullets.length - 1; i >= 0; i--) { var bi = this._aliveEnemyBullets[i]; if (!this._enemyBullets[bi].update()) { this._aliveEnemyBullets.splice(i, 1); this._blankEnemyBullets.push(bi); } } }; // 弾の追加 Game_Map.prototype.addBullet = function(x, y, z, vx, vy, angle, count, type, index, enemyFlag, skillId, owner) { if (enemyFlag) { if (this._blankEnemyBullets.length > 0) { var bi = this._blankEnemyBullets.shift(); this._enemyBullets[bi].setup(x, y, z, vx, vy, angle, count, type, index, true, skillId, owner); this._aliveEnemyBullets.push(bi); } } else { if (this._blankPlayerBullets.length > 0) { var bi = this._blankPlayerBullets.shift(); this._playerBullets[bi].setup(x, y, z, vx, vy, angle, count, type, index, false, skillId, owner); this._alivePlayerBullets.push(bi); } } }; // 自機弾の全削除 Game_Map.prototype.clearPlayerBullets = function() { for (var i = 0; i < this._alivePlayerBullets.length; i++) { this._playerBullets[this._alivePlayerBullets[i]].erase(); } this._blankPlayerBullets.concat(this._alivePlayerBullets); this._alivePlayerBullets = []; }; // 敵機弾の全削除 Game_Map.prototype.clearEnemyBullets = function() { for (var i = 0; i < this._aliveEnemyBullets.length; i++) { this._enemyBullets[this._aliveEnemyBullets[i]].erase(); } this._blankEnemyBullets.concat(this._aliveEnemyBullets); this._aliveEnemyBullets = []; }; // すべての弾を削除 Game_Map.prototype.clearAllBullets = function() { this.clearPlayerBullets(); this.clearEnemyBullets(); }; //----------------------------------------------------------------------------- // Game_Bullet // // 初期化 Game_Bullet.prototype.initialize = function() { this._opacity = 0; }; // セットアップ Game_Bullet.prototype.setup = function(x, y, z, vx, vy, angle, count, type, index, enemyFlag, skillId, owner) { this._opacity = 255; this._x = x; this._y = y; this._z = z; this._vx = vx; this._vy = vy; this._angle = angle; this._count = count; this._type = type; this._characterName = actBulletNames[this._type]; this._characterIndex = index; this._enemyFlag = enemyFlag; this._skillId = skillId; this._owner = owner; this._collideSize = actBulletSizes[this._type]; this._mapCollide = !$dataSkills[this._skillId].meta['map_through']; this._gravity = +$dataSkills[this._skillId].meta['gravity']; }; // 存在状態判定 Game_Bullet.prototype.isExist = function() { return this._characterName !== ''; }; // 敵機の弾判定 Game_Bullet.prototype.isEnemy = function() { return this._enemyFlag; }; // 弾タイプの取得 Game_Bullet.prototype.type = function() { return this._type; }; // 角度の取得 Game_Bullet.prototype.angle = function() { return this._angle; }; // 画面 X 座標の取得 Game_Bullet.prototype.screenX = function() { var tw = $gameMap.tileWidth(); return Math.round($gameMap.adjustX(this._x) * tw); }; // 画面 Y 座標の取得 Game_Bullet.prototype.screenY = function() { var th = $gameMap.tileHeight(); return Math.round($gameMap.adjustY(this._y) * th); }; // キャラクターがいる方向(角度)を取得 Game_Bullet.prototype.angleToCharacter = function(character) { return Math.atan2(character._realY - character.collideH / 2 - this._y, character._realX - this._x); }; // プレイヤーがいる方向(角度)を取得 Game_Bullet.prototype.angleToPlayer = function() { return this.angleToCharacter($gamePlayer); }; // フレーム更新 Game_Bullet.prototype.update = function() { this._x += this._vx; this._y += this._vy; this._count--; if (this._count <= 0) { if ($dataSkills[this._skillId].meta['time_bomb']) this.timeBomb(); this.erase(); } else if (this.updateCollide()) { this.erase(); } if (this._gravity) this._vy = Math.min(this._vy + this._gravity, 0.6); return this.isExist(); }; // 削除 Game_Bullet.prototype.erase = function() { this._characterName = ''; this._opacity = 0; }; // 地形反射 Game_Bullet.prototype.reflect = function() { this._x -= this._vx; if (this.collideMap()) { this._y -= this._vy; this._vy = 0 - this._vy; } else { this._y -= this._vy; this._vx = 0 - this._vx; } }; // 時限爆弾 Game_Bullet.prototype.timeBomb = function() { var a = $dataSkills[this._skillId].meta['time_bomb'].split(' ').map(Number); var space = Math.PI * 2 / a[0]; for (var i = 0; i < a[0]; i++) { $gameMap.addBullet(this._x, this._y, 200 + i, Math.cos(a[1]) * a[2], Math.sin(a[1]) * a[2], a[1], a[3], a[4], a[5], this._enemyFlag, a[6], this._owner); a[1] += space; } }; // 接触判定 Game_Bullet.prototype.updateCollide = function() { if (this._mapCollide && this.collideMap()) { if ($dataSkills[this._skillId].meta['map_reflect']) { // 弾反射の処理 this.reflect(); return false; } else { return true; } } if (this._enemyFlag) { if (this.collideCharacter($gamePlayer)) { this.executeDamage($gamePlayer); return true; } } else { var targets = $gameMap.events(); for (i = 0; i < targets.length; i++) { var character = targets[i]; if (this.collideCharacter(character)) { this.executeDamage(character); return true; } } } return false; }; // 弾によるダメージ処理 Game_Bullet.prototype.executeDamage = function(character) { if (character.isBattler() && this._owner.isBattler() && !character.isInvincible()) { character.applySkill(this._owner, this._skillId); if (character.battler()._result.isHit()) { character.setupInvincible(); var animeId = $dataSkills[this._skillId].meta.bulletAnime; if (!animeId) animeId = $dataSkills[this._skillId].meta.bullet_anime; if (animeId) character.requestAnimation(+animeId); } } }; // キャラクターと接触しているかどうかを返す Game_Bullet.prototype.collideCharacter = function(character) { if (!character.isNormalPriority()) return false; return this._x - this._collideSize <= character._realX + character._collideW && this._x + this._collideSize >= character._realX - character._collideW && this._y - this._collideSize <= character._realY && this._y + this._collideSize >= character._realY - character._collideH; }; // マップと接触しているかどうかを返す Game_Bullet.prototype.collideMap = function() { var x = Math.floor(this._x); var y = Math.floor(this._y); return !$gameMap.checkPassageBullet(x, y); } //----------------------------------------------------------------------------- // Game_CharacterBase // // メンバ変数の初期化 var _Game_CharacterBase_initMembers = Game_CharacterBase.prototype.initMembers; Game_CharacterBase.prototype.initMembers = function() { _Game_CharacterBase_initMembers.call(this); this._needsRefresh = false; this._mapPopups = []; 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 = actGravity; this._fallGuard = 0; this._invincibleCount = 0; this._invincibleTime = 10; this._carried = false; this._carryingObject = null; }; // バトラーの取得 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() === actWaterTerrainTag; }; // 持ち上げられ状態判定 Game_CharacterBase.prototype.isCarried = function() { return this._carried; }; // ガード状態判定 Game_CharacterBase.prototype.isGuarding = function() { if (!this.isBattler()) return false; return this.battler().isStateAffected(actGuardStateId); }; // ロック状態判定 Game_CharacterBase.prototype.isLocking = function() { return this._lockCount > 0; }; // 自分の重さで相手をはじき飛ばせるかチェック Game_CharacterBase.prototype.checkFlickWeight = function(weight) { return this._weight >= weight + actFlickWeight; }; // 被弾後の無敵状態判定 Game_CharacterBase.prototype.isInvincible = function() { return this._invincibleCount > 0; }; // リフレッシュフラグを立てる Game_CharacterBase.prototype.requestRefresh = function() { this._needsRefresh = true; }; // 移動速度のセット Game_CharacterBase.prototype.setMoveSpeed = function(moveSpeed) { this._moveSpeed = moveSpeed / 100 + 0.02; }; // 無敵状態のセット Game_CharacterBase.prototype.setupInvincible = function() { this._invincibleCount = this._invincibleTime; this.battler().requestEffect('blink'); }; // アニメーション間隔 Game_CharacterBase.prototype.animationWait = function() { return (actStepAnimeConstantA - this._moveSpeed - (this.isDashing() ? 0.01 : 0)) * actStepAnimeConstantB; }; // フレーム更新 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(); if (this.isInvincible()) this._invincibleCount--; }; // 画面 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._through) { this._realX = this._realX.clamp(0, $gameMap.width()); } else { if (this._vx > 0) { this.collideMapRight(); this.collideCharacterRight(); } else { this.collideMapLeft(); this.collideCharacterLeft(); } } this._x = Math.floor(this._realX); } if (this._vy !== 0) { this._landingObject = null; this._realY += this._vy; if (this._through) { this._realY = this._realY.clamp(0, $gameMap.height()); } else { if (this._vy > 0) { this.collideMapDown(); this.collideCharacterDown(); } else { this.collideMapUp(); this.collideCharacterUp(); } } this._y = Math.floor(this._realY); this._lastY = Math.floor(this._realY + actTileMarginTop); } }; // 重力の処理 Game_CharacterBase.prototype.updateGravity = function() { if (this._jumpPeak > this._realY && this._gravity > 0) { this.resetPeak(); } 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]' && 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 + actTileMarginTop); if (y === this._lastY) return; var lx = Math.floor(this._realX - this._collideW); var rx = Math.floor(this._realX + this._collideW); 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 - actTileMarginTop - 0.001); return; } } }; // マップとの衝突判定(左方向) Game_CharacterBase.prototype.collideMapLeft = function() { var ty = Math.floor(this._realY - this._collideH); var by = Math.floor(this._realY + actTileMarginTop); 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 + actTileMarginTop); 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) && !character.isCarried()) { this.addCollideId(character.eventId()); if (this.isNormalPriority() && character.isNormalPriority()) { 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) && !character.isCarried()) { this.addCollideId(character.eventId()); if (this.isNormalPriority() && character.isNormalPriority()) { 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) && !character.isCarried()) { this.addCollideId(character.eventId()); if (this.isNormalPriority() && character.isNormalPriority()) { 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) && !character.isCarried()) { this.addCollideId(character.eventId()); if (this.isNormalPriority() && character.isNormalPriority()) { 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; return this._realX - this._collideW <= character._realX + character._collideW && this._realX + this._collideW >= character._realX - character._collideW && this._realY - this._collideH <= character._realY && this._realY >= character._realY - character._collideH; }; // 衝突判定を行う対象を返す 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(); this.updateDamageFall(); }; // ジャンプカウントのリセット Game_CharacterBase.prototype.resetJump = function() { this._jumpCount = this._mulchJump; this._jumpInput = 0; }; // 落下ダメージの処理 Game_CharacterBase.prototype.updateDamageFall = function() { if (this.isBattler() && this._fallGuard < 100) { var n = this._realY - this._jumpPeak - actDamageFallHeight; if (n > 0 && !this.isSwimming()) { var rate = 100 - this._fallGuard; var damage = Math.floor(Math.max(n * actDamageFallRate * rate / 100), 1); this.battler().clearResult(); this.battler().gainHp(-damage); } } this.resetPeak(); }; // 最高到達点のリセット Game_CharacterBase.prototype.resetPeak = function() { this._jumpPeak = this._realY; }; // 泳ぎ状態の更新 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); if (d === 2) { this._vy = this._moveSpeed; } else if (d === 4) { this._vx = -this._moveSpeed; } else if (d === 6) { this._vx = this._moveSpeed; } else { this._vy = -this._moveSpeed; } }; // ななめに移動 Game_CharacterBase.prototype.moveDiagonally = function(horz, vert) { this.setDirection(horz); this._moveCount = Math.floor(1 / this._moveSpeed); this._vx = horz === 4 ? -this._moveSpeed : this._moveSpeed; this._vy = vert === 8 ? -this._moveSpeed : this._moveSpeed; }; // ジャンプ 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 = yPlus / 100; } else { this._vy = this.isSwimming() ? -this._swimJump : -this._jumpSpeed; } this.resetStopCount(); this.straighten(); }; // ダッシュ(方向指定) Game_CharacterBase.prototype.dashFromDirection = function(direction) { var vx = direction === 4 ? -this._dashSpeedX : this._dashSpeedX; var vy = -this._dashSpeedY; this.dash(vx, vy); }; // ダッシュ(速度指定) Game_CharacterBase.prototype.dash = function(vx, vy) { this._vx = vx; this._vy = vy; this._dashCount = this._dashCountTime; this._moveCount = this._dashCount / 2; this.resetStopCount(); this.straighten(); }; // はじかれ Game_CharacterBase.prototype.flick = function(user) { if (actFlickSkill > 0) { if (user.isBattler() && this.isBattler()) { this.applySkill(user, actFlickSkill); } var animeId = $dataSkills[actFlickSkill].meta.bulletAnime; if (!animeId) animeId = $dataSkills[actFlickSkill].meta.bullet_anime; if (animeId) this.requestAnimation(+animeId); } this._vx = user._vx; var n = 1 + (user._weight - this._weight - actFlickWeight) / 2; this._moveCount = Math.floor(n / Math.abs(this._vx)); AudioManager.playSe(actSeFlick); }; // 持ち上げられる Game_CharacterBase.prototype.carry = function() { this._carried = true; this._through = true; }; // 投げられる Game_CharacterBase.prototype.hurl = function() { this._carried = false; this._through = false; this._lastSwim = this.isSwimming(); }; // スキルの適用 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() { var battler = this.battler(); battler.clearResult(); if (battler._actionResult.hpDamage != 0) { battler._actionResult.hpAffected = true; battler._actionResult.missed = false; battler._actionResult.evaded = false; this.damaged(); if (battler._actionResult.hpDamage > 0) { battler.playDamageSe(); } else { battler.playRecovarySe(); } } else if (battler._actionResult.missed || battler._actionResult.evaded) { this.damaged(); battler.playMissSe(); } if (battler._actionResult.isStatusAffected()) { this.requestRefresh(); } }; // ダメージ後の処理 Game_CharacterBase.prototype.damaged = function() { var battler = this.battler(); // if (this.isLocking()) { // return; // } battler.startDamagePopup(); if (battler._actionResult.isStateAdded(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; }; // 指定位置へ移動 var _Game_CharacterBase_locate = Game_CharacterBase.prototype.locate; Game_CharacterBase.prototype.locate = function(x, y) { _Game_CharacterBase_locate.call(this, x, y); this._vx = 0; this._vy = 0; this._lastY = -1; this._lastSwim = this.isSwimming(); this._collideIds = []; this.resetPeak(); this._carried = false; this._carryingObject = null; }; // マップ用ポップアップのセット Game_CharacterBase.prototype.setMapPopup = function(text, color, ry, dy, g) { var popup = {}; popup.text = text; popup.color = color; popup.ry = ry == null ? -40 : ry; popup.dy = dy == null ? -4 : dy; popup.g = g == null ? 0.5 : g; this._mapPopups.push(popup); }; // マップ用ポップアップがたまっているかどうかを返す Game_CharacterBase.prototype.isMapPopupExist = function() { return this._mapPopups.length > 0; }; // マップ用ポップアップをひとつ返す Game_CharacterBase.prototype.getMapPopup = function() { return this._mapPopups.shift(); }; //----------------------------------------------------------------------------- // 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_Character.prototype.angleToCharacter = function(character) { return Math.atan2(character._realY - character._collideH / 2 - (this._realY - this._collideH / 2), character._realX - this._realX); }; // プレイヤーのいる方向(角度)を取得 Game_Character.prototype.angleToPlayer = function() { return this.angleToCharacter($gamePlayer); }; // n方向ショット Game_Character.prototype.nwayShot = function(n, space, angle, speed, count, type, index, skillId) { angle = angle - (space * (n - 1) / 2); for (var i = 0; i < n; i++) { $gameMap.addBullet(this._realX, this._realY - this._collideH / 2, 200 + i, Math.cos(angle) * speed, Math.sin(angle) * speed, angle, count, type, index, this.battler().isEnemy(), skillId, this); angle += space; } }; // 自機狙いn方向ショット Game_Character.prototype.nwayAim = function(n, space, angle, speed, count, type, index, skillId) { var a = angle + this.angleToPlayer(); this.nwayShot(n, space, a, speed, count, type, index, skillId); }; // 全方位ショット Game_Character.prototype.nallShot = function(n, angle, speed, count, type, index, skillId) { var space = Math.PI * 2 / n; for (var i = 0; i < n; i++) { $gameMap.addBullet(this._realX, this._realY - this._collideH / 2, 200 + i, Math.cos(angle) * speed, Math.sin(angle) * speed, angle, count, type, index, this.battler().isEnemy(), skillId, this); angle += space; } }; // 自機狙い全方位ショット Game_Character.prototype.nallAim = function(n, angle, speed, count, type, index, skillId) { var a = angle + this.angleToPlayer() this.nallShot(n, a, speed, count, type, index, skillId); }; //----------------------------------------------------------------------------- // Game_Player // // メンバ変数の初期化 var _Game_Player_initMembers = Game_Player.prototype.initMembers; Game_Player.prototype.initMembers = function() { _Game_Player_initMembers.call(this); this._realSteps = 0; this._carryPower = 0; this._wallJump = false; this._dashDelay = 0; this._dashDelayTime = 30; this._dashMpCost = 0; this._guardInput = 0; this._guardSpeed = 0; this._shotWay = 0; this._shotSpace = 0.2; this._shotSpeed = 0.1; this._shotCountTime = 30; this._shotDelayTime = 10; this._shotType = 1; this._shotIndex = 0; this._shotSkillId = 0; this._shotSeName = ""; this._shotSeVolume = 0; this._shotSePitch = 0; this._carryingObject = null; }; // 画面中央の 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.leader(); }; // バトラーを返す 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.isCarrying = function() { return this._carryingObject !== null; }; // 衝突判定を行う対象を返す 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 + actTileMarginTop); if (lastRealX < this._realX) { this.collideCharacterLeft(); } else if (lastRealX > this._realX) { this.collideCharacterRight(); } this._vx = 0; this._vy = 0; this.resetJump(); this.resetPeak(); }; // はしごから降りる 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.carryByInput(); if (this.isCarrying()) this._shotDelay = 1; this.attackByInput(); this.changeByInput(); this.moveByInput(); this.jumpByInput(); this.dashByInput(); this.guardByInput(); this.triggerButtonAction(); }; // 重力の処理 Game_Player.prototype.updateGravity = function() { if (this._ladder || (this._jumpPeak > this._realY && this._gravity > 0)) { this.resetPeak(); if (this._ladder) return; } Game_Character.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 : actFriction; if (this._vy !== 0) { this._vy = this._vy > 0 ? Math.max(this._vy - n, 0) : 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 = actFriction; var speed = this._moveSpeed; if (this.isGuarding()) speed = speed * actGuardMoveRate / 100; switch (this._landingRegion) { case actSlipFloorRegion: this._friction = 0.0025; return; case actRoughFloorRegion: if (Math.abs(this._vx) > speed / 2) { this._vx = this._vx > 0 ? speed / 2 : -speed / 2; } break; case actMarshFloorRegion: this._vx = 0; return; default: if (this.isGuarding() && Math.abs(this._vx) > speed) { this._vx = this._vx > 0 ? speed : -speed; } break; } 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 && this.battler().isDead()) { this.changeMember(); } }; // ボタン操作による持ち上げ(投げ) Game_Player.prototype.carryByInput = function() { if (this.isCarrying()) { if (Input.isTriggered('attack')) { var target = this._carryingObject; var lastRealX = target._realX; target.collideMapLeft(); if (lastRealX !== target._realX) { target._realX = lastRealX; return; } target.collideMapRight(); if (lastRealX !== target._realX) { target._realX = lastRealX; return; } var lastRealY = target._realY; target.collideMapUp(); if (lastRealY !== target._realY) { target._realY = lastRealY; return; } target.collideMapDown(); if (lastRealY !== target._realY) { target._realY = lastRealY; return; } var targets = target.collideTargets(); for (var i = 0; i < targets.length; i++) { var character = targets[i]; if (!character._through && target.isCollide(character)) return; } this.executeHurl(); } } else { if (Input.isTriggered('attack') && Input.isPressed('down') && this.isLanding() && !this.isGuarding() && Object.prototype.toString.call(this._landingObject) !== '[object Array]') { if (this._carryPower >= this._landingObject._weight) { this.executeCarry(); } else { this._shotDelay = 1; } } } }; // 持ち上げる Game_Player.prototype.executeCarry = function() { this._carryingObject = $gameMap.event(this._landingObject.eventId()); this._carryingObject.carry(); this._landingObject = null; AudioManager.playSe(actSeCarry); }; // 投げる Game_Player.prototype.executeHurl = function() { this._carryingObject.hurl(); if (Input.isPressed('up')) { // 上を押しながら投げた this._carryingObject.dash(this._vx, -0.14); } else if (Input.isPressed('down')) { // 下を押しながら投げた if (this._direction === 4) { this._carryingObject.dash(-0.05, -0.02); } else if (this._direction === 6) { this._carryingObject.dash(0.05, -0.02); } else { this._carryingObject.dash(0, -0.02); } } else { // 左右いずれかを押しながら、またはどちらも押さずに投げた if (this._direction === 4 || Input.isPressed('left')) { this._carryingObject.dash(-0.14, -0.03) } else if (this._direction === 6 || Input.isPressed('right')) { this._carryingObject.dash(0.14, -0.03) } else { this._carryingObject.dash(0, 0); } } this._carryingObject = null; this._shotDelay = 1; AudioManager.playSe(actSeHurl); }; // ボタン入力による攻撃 Game_Player.prototype.attackByInput = function() { if (this._shotDelay > 0) { this._shotDelay--; this.removeGuard(); // 防御状態の解除 } else { var n = this._shotWay; if (Input.isTriggered('attack') && n > 0) { var space = this._shotSpace; var speed = this._shotSpeed; var count = this._shotCountTime; var type = this._shotType; var index = this._shotIndex; if (this._shotSkillId > 0) { var skillId = this._shotSkillId; } else { var skillId = this.battler().attackSkillId(); } if (this._ladder) { if (Input.isPressed('left')) { this.setDirection(4); } else if (Input.isPressed('right')) { this.setDirection(6); } } var pan = 0; if (this._direction == 4) { this.nwayShot(n, space, Math.PI, speed, count, type, index, skillId) pan = -10; } else if (this._direction == 6){ this.nwayShot(n, space, 0, speed, count, type, index, skillId) pan = 10; } else { this.nwayShot(n, space, Math.PI * 1.5, speed, count, type, index, skillId) } this._shotDelay = this._shotDelayTime; if (actWeaponSprite) this.battler().performAttack(); AudioManager.playSe({name:this._shotSeName, pitch:this._shotSePitch, volume:this._shotSeVolume, pan:pan}); this.removeGuard(); // 防御状態の解除 } } }; // ボタン入力による操作アクター変更 Game_Player.prototype.changeByInput = function() { if (this._carryingObject) return; if (Input.isTriggered('pageup')) { this.changeMember(true); } else if (Input.isTriggered('pagedown')) { this.changeMember(false); } }; // 操作メンバーの切り替え Game_Player.prototype.changeMember = function(reverse) { var startActorId = this.actor().actorId(); if (reverse) { $gameParty.backSlideActor(); } else { $gameParty.frontSlideActor(); } if (!this.isChangeMemberEnable()) $gameParty.sortActor(startActorId); if (startActorId !== this.actor().actorId()) { this.removeGuard(); // 防御状態の解除 this.battler().requestEffect('appear'); AudioManager.playSe(actSeChange); $gameMap.requestRefresh(); } }; // 指定したアクターに切り替えが可能かどうか Game_Player.prototype.isChangeMemberEnable = function() { var actor = this.actor(); if (actor.isDead()) return false; var targets = this.collideTargets(); for (var i = 0; i < targets.length; i++) { var character = targets[i]; if (character.isNormalPriority() && this.isCollide(character)) return false; } var lx = Math.floor(this._realX - this._collideW); var rx = Math.floor(this._realX + this._collideW); var ty = Math.floor(this._realY - this._collideH); var by = Math.floor(this._realY + actTileMarginTop); for (var x = lx; x <= rx; x++) { if (!$gameMap.isPassable(x, ty, 8)) return false; if (!$gameMap.isPassable(x, by, 2)) return false; } for (var y = ty; y <= by; y++) { if (!$gameMap.isPassable(lx, y, 4)) return false; if (!$gameMap.isPassable(rx, y, 6)) return false; } return true; }; // 方向ボタン入力による移動処理 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')) { var speed = this.isGuarding() ? -this._moveSpeed * actGuardMoveRate / 100 : -this._moveSpeed; this.setDirection(4); if (this._vx > speed) { var accele = Math.max(this._accele - this._friction, 0); this._vx = Math.max(this._vx - accele, speed); } this._moveCount = 4; } else if (Input.isPressed('right')) { var speed = this.isGuarding() ? this._moveSpeed * actGuardMoveRate / 100 : this._moveSpeed; this.setDirection(6); if (this._vx < speed) { var accele = Math.max(this._accele - this._friction, 0); this._vx = Math.min(this._vx + accele, speed); } 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) { if (actJumpRule === '2' && !this.isLanding() && !this._ladder && this._mulchJump === 1) return; 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(actSeJump); } }; // 壁ジャンプの X 方向処理 Game_Player.prototype.wallJump = function() { this._vx = this._direction == 4 ? this._moveSpeed : -this._moveSpeed; this.setDirection(this.reverseDir(this._direction)); this.resetPeak(); }; // ボタン入力によるダッシュ処理 Game_Player.prototype.dashByInput = function() { if (this._dashDelay > 0) { this._dashDelay--; this.removeGuard(); // 防御状態の解除 } else { var battler = this.actor(); if (Input.isTriggered('dash') && !this.isSwimming() && !$gameMap.isDashDisabled() && battler.mp >= this._dashMpCost) { 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.dashFromDirection(this._direction); this._dashDelay = this._dashDelayTime; AudioManager.playSe(actSeDash); this.removeGuard(); // 防御状態の解除 if (this._dashMpCost > 0) battler.gainMp(-this._dashMpCost); } } }; // ボタン入力によるガード処理 Game_Player.prototype.guardByInput = function() { if (!actGuardStateId) return; if (Input.isPressed('down')) { if (this.isCarrying() || this._ladder || !this.isLanding() || this.isSwimming()) { this.removeGuard(); return; } var battler = this.actor(); if (battler && !battler.isStateAffected(actGuardStateId)) { this._guardInput += this._guardSpeed; if (this._guardInput > 600) { battler.addState(actGuardStateId); AudioManager.playSe(actSeGuard); } } } else { this.removeGuard(); } }; // ガードの解除 Game_Player.prototype.removeGuard = function() { var battler = this.actor(); this._guardInput = 0; if (battler) battler.removeState(actGuardStateId); }; // 歩数の処理 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(actSeSwim); this.resetPeak(); }; // マップイベントの起動 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 + actTileMarginTop + 0.1); return $gameMap.isLadder(x, y); } else { var ty = Math.floor(this._realY - this._collideH); var by = Math.floor(this._realY + actTileMarginTop); 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 + 0.99 - actTileMarginTop); this.refresh(); this.clearTransferInfo(); } }; // リフレッシュ Game_Player.prototype.refresh = function() { var actor = this.actor(); if (actor) { var characterName = actor.characterName(); var characterIndex = actor.characterIndex(); var data = actor.actor(); this._moveSpeed = +(data.meta['move_speed'] || 0.05); this._jumpSpeed = +(data.meta['jump_speed'] || 0.14); this._swimSpeed = +(data.meta['swim_speed'] || 0.02); this._ladderSpeed = +(data.meta['ladder_speed'] || 0.04); this._accele = +(data.meta['accele'] || 0.003); this._ladderAccele = +(data.meta['ladder_accele'] || 0.003); this._jumpInputTime = +(data.meta['jump_input'] || 0); this._swimJump = +(data.meta['swim_jump'] || 0.1); this._mulchJump = +(data.meta['mulch_jump'] || 1); this._weight = +(data.meta['weight'] || 0); this._carryPower = +(data.meta['carry_power'] || 0); this._gravity = +(data.meta['gravity'] || 0.0045); this._dashSpeedX = +(data.meta['dash_speed_x'] || 0.14); this._dashSpeedY = +(data.meta['dash_speed_y'] || 0.03); this._dashCountTime = +(data.meta['dash_count'] || 15); this._dashDelayTime = +(data.meta['dash_delay'] || 30); this._dashMpCost = +(data.meta['dash_mp_cost'] || 0); this._collideW = +(data.meta['w'] || 0.375); this._collideH = +(data.meta['h'] || 0.75); this._fallGuard = +(data.meta['fall_guard'] || 0); this._guardSpeed = +(data.meta['guard_speed'] || 0); this._invincibleTime = +(data.meta['invincible_time'] || 30); this._shotWay = +(data.meta['shot_way'] || 0); this._shotSpace = +(data.meta['shot_space'] || 0.2); this._shotSpeed = +(data.meta['shot_speed'] || 0.1); this._shotCountTime = +(data.meta['shot_count'] || 30); this._shotDelayTime = +(data.meta['shot_delay'] || 10); var traitObjects = actor.equips().concat(actor.states()); for (var i = 0; i < traitObjects.length; i++) { var obj = traitObjects[i]; if (obj) { if (obj.meta['move_speed']) this._moveSpeed += +obj.meta['move_speed']; if (obj.meta['jump_speed']) this._jumpSpeed += +obj.meta['jump_speed']; if (obj.meta['swim_speed']) this._swimSpeed += +obj.meta['swim_speed']; if (obj.meta['ladder_speed']) this._ladderSpeed += +obj.meta['ladder_speed']; if (obj.meta['accele']) this._accele += +obj.meta['accele']; if (obj.meta['ladder_accele']) this._ladderAccele += +obj.meta['ladder_accele']; if (obj.meta['jump_input']) this._jumpInputTime += +obj.meta['jump_input']; if (obj.meta['swim_jump']) this._swimJump += +obj.meta['swim_jump']; if (obj.meta['mulch_jump']) this._mulchJump += +obj.meta['mulch_jump']; if (obj.meta['weight']) this._weight += +obj.meta['weight']; if (obj.meta['carry_power']) this._carryPower += +obj.meta['carry_power']; if (obj.meta['gravity']) this._gravity += +obj.meta['gravity']; if (obj.meta['dash_speed_x']) this._dashSpeedX += +obj.meta['dash_speed_x']; if (obj.meta['dash_speed_y']) this._dashSpeedY += +obj.meta['dash_speed_y']; if (obj.meta['dash_count']) this._dashCountTime += +obj.meta['dash_count']; if (obj.meta['dash_delay']) this._dashDelayTime += +obj.meta['dash_delay']; if (obj.meta['dash_mp_cost']) this._dashMpCost += +obj.meta['dash_mp_cost']; if (obj.meta['w']) this._collideW += +obj.meta['w']; if (obj.meta['h']) this._collideH += +obj.meta['h']; if (obj.meta['fall_guard']) this._fallGuard += +obj.meta['fall_guard']; if (obj.meta['guard_speed']) this._guardSpeed += +obj.meta['guard_speed']; if (obj.meta['invincible_time']) this._invincibleTime += +obj.meta['invincible_time']; if (obj.meta['shot_way']) this._shotWay += +obj.meta['shot_way']; if (obj.meta['shot_space']) this._shotSpace += +obj.meta['shot_space']; if (obj.meta['shot_speed']) this._shotSpeed += +obj.meta['shot_speed']; if (obj.meta['shot_count']) this._shotCountTime += +obj.meta['shot_count']; if (obj.meta['shot_delay']) this._shotDelayTime += +obj.meta['shot_delay']; } } this._wallJump = actor.loadTagBool('wall_jump'); this._shotType = +actor.loadTagString('shot_type', 1); this._shotIndex = +actor.loadTagString('shot_index', 0); this._shotSkillId = +actor.loadTagString('shot_skill', 0); this._shotSeName = actor.loadTagString('shot_se_name', ''); this._shotSeVolume = +actor.loadTagString('shot_se_volume', 90); this._shotSePitch = +actor.loadTagString('shot_se_pitch', 100); } 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(actAllDeadEvent); } }; //----------------------------------------------------------------------------- // Game_Event // // 初期化 Game_Event.prototype.initialize = function(mapId, eventId) { Game_Character.prototype.initialize.call(this); this._mapId = mapId; this._eventId = eventId; this._repopCount = 0; this.locate(this.event().x + 0.5, this.event().y + 1); this.refresh(); }; // メンバ変数の初期化 var _Game_Event_initMembers = Game_Event.prototype.initMembers; Game_Event.prototype.initMembers = function() { _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) { if (this.isTriggerIn([1, 2])) this.start(); } }; // リフレッシュ var _Game_Event_refresh = Game_Event.prototype.refresh; Game_Event.prototype.refresh = function() { _Game_Event_refresh.call(this); this._needsRefresh = false; }; // イベントページのセットアップ var _Game_Event_setupPage = Game_Event.prototype.setupPage; Game_Event.prototype.setupPage = function() { _Game_Event_setupPage.call(this); if (this._pageIndex >= 0) { this._enemyId = +this.loadTagParam('enemy') || 0; this._collideW = +this.loadTagParam('w') || 0.375; this._collideH = +this.loadTagParam('h') || 0.75; this._weight = +this.loadTagParam('weight') || 0; this._deadSelfSwitch = this.loadTagParam('dead'); this._repopTimer = +this.loadTagParam('repop') || 0; if (this._repopTimer > 0) { this._repopCount = this._repopTimer; } var param = this.loadTagParam('gravity'); this._gravity = param ? +param : actGravity; this._lift = this.loadTagParam('lift') || false; this.setupBattler(); } }; // バトラーのセットアップ Game_Event.prototype.setupBattler = function() { if (this._enemyId > 0) { this._battler = new Game_Enemy(this._enemyId, this.eventId(), 0); } else { this._battler = null; } }; // フレーム更新 var _Game_Event_update = Game_Event.prototype.update; Game_Event.prototype.update = function() { if (this._carried) { this._realX = $gamePlayer._realX; this._realY = $gamePlayer._realY - $gamePlayer._collideH - 0.001; this._x = Math.floor(this._realX); this._y = Math.floor(this._realY); } else { if (this.isLocking()) { this.updateLock(); } else { _Game_Event_update.call(this); if (this._repopCount > 0) this.updateRepop(); } 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()) { 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 = actFriction; switch (this._landingRegion) { case actSlipFloorRegion: return; case actRoughFloorRegion: if (Math.abs(this._vx) > this._moveSpeed / 2) { this._vx = this._vx > 0 ? this._moveSpeed / 2 : -this._moveSpeed / 2; } break; case actMarshFloorRegion: 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.updateRepop = function() { this._repopCount--; if (this._repopCount === 0) { var key = [$gameMap.mapId(), this._eventId, this._deadSelfSwitch]; if ($gameSelfSwitches.value(key)) { $gameSelfSwitches.setValue(key, false); this.refresh(); this.requestAppear(); } } }; // 出現エフェクトのリクエスト Game_Event.prototype.requestAppear = function() { if (this.isBattler()) { if (actEventCollapse) this.battler().requestEffect('appear'); } }; // バトラーが戦闘不能になったときの処理 Game_Event.prototype.battlerDead = function() { if (actEventCollapse) { this._lockCount = 32; this.battler().requestEffect('collapse'); SoundManager.playEnemyCollapse(); } else { this._lockCount = 2; this.battler().requestEffect('normal'); } }; // ロック状態の処理 Game_Event.prototype.updateLock = function() { this._lockCount--; if (this._lockCount == 0) { if (this.battler().isDead()) { this.gainRewards(); if (this._deadSelfSwitch !== null) { var key = [$gameMap.mapId(), this._eventId, this._deadSelfSwitch]; $gameSelfSwitches.setValue(key, true); this.refresh(); this.requestAppear(); } else { this.erase(); } } } }; // 撃破報酬の獲得 Game_Event.prototype.gainRewards = function() { var exp = this.battler().exp(); if (exp > 0) this.gainRewardExp(exp); var gold = this.battler().gold(); if (gold > 0) this.gainRewardGold(gold); var items = this.battler().makeDropItems(); for (var i = 0; i < items.length; i++) { this.gainRewardItem(items[i], -16 - (items.length - i) * 24); } }; // 撃破報酬(経験値)の獲得 Game_Event.prototype.gainRewardExp = function(exp) { $gameParty.allMembers().forEach(function(actor) { actor.gainExp(exp); }); this.setMapPopup('' + exp + TextManager.exp, '#ffe0ff', -40, -0.2, 0); }; // 撃破報酬(お金)の獲得 Game_Event.prototype.gainRewardGold = function(gold) { $gameParty.gainGold(gold); this.setMapPopup('' + gold + TextManager.currencyUnit, '#ffffe0', -64, -0.2, 0); }; // 撃破報酬(アイテム)の獲得 Game_Event.prototype.gainRewardItem = function(item, y) { $gameParty.gainItem(item, 1); this.setMapPopup('\\I[' + item.iconIndex + ']', '#000000', y, -4, 0.5); }; // 泳ぎ状態の更新 Game_Event.prototype.updateSwiming = function() { Game_Character.prototype.updateSwiming.call(this); if (actUseEventSeSwim) { var origin_volume = actSeSwim.volume; var volume = Math.floor(origin_volume * ((15 - this.distFromCharacter($gamePlayer))) / 15); var se = {}; se.name = actSeSwim.name; se.volume = Math.min(Math.max(volume, 0), 100); se.pitch = actSeSwim.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]); var y = $gameVariables.value(this._params[3]); character.locate(x + 0.5, y + 1); } 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; }; // 装備の変更 var _Game_Interpreter_command319 = Game_Interpreter.prototype.command319; Game_Interpreter.prototype.command319 = function() { _Game_Interpreter_command319.call(this); if (!$gameParty.inBattle()) $gamePlayer.requestRefresh(); return true; }; // プラグインコマンド var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand; Game_Interpreter.prototype.pluginCommand = function(command, args) { _Game_Interpreter_pluginCommand.call(this, command, args); if (command === 'actGainHp') { var character = this.character(args[0]); if (character && character.isBattler()) { character.battler().clearResult(); character.battler().gainHp(+args[1]); } } else if (command === 'actHp') { var character = this.character(args[0]); if (character && character.isBattler()) { $gameVariables.setValue(+args[1], character.battler().hp); } } else if (command === 'actForceX') { var character = this.character(args[0]); if (character) character._vx = +args[1]; } else if (command === 'actForceY') { var character = this.character(args[0]); if (character) character._vy = +args[1]; } else if (command === 'actForceStop') { var character = this.character(args[0]); if (character) { character._vx = 0; character._vy = 0; } } else if (command === 'actChangeActor') { var actor = $gameActors.actor(+args[0]); if (actor && actor.isAlive() && $gameParty.members().contains(actor)) { var currentActorId = $gamePlayer.actor().actorId(); $gameParty.sortActor(+args[0]); if (currentActorId !== $gamePlayer.actor().actorId()) { $gamePlayer.refresh(); $gamePlayer.battler().requestEffect('appear'); } } } else if (command === 'actPopup') { var character = this.character(args[0]); if (character) character.setMapPopup(args[1], args[2]); } else if (command === 'nwayShot') { var character = this.character(args[0]); if (character && character.isBattler()) { if (!args[8]) args[8] = character.battler().attackSkillId(); character.nwayShot(+args[1], +args[2], +args[3], +args[4], +args[5], +args[6], +args[7], +args[8]); } } else if (command === 'nwayAim') { var character = this.character(args[0]); if (character && character.isBattler()) { if (!args[8]) args[8] = character.battler().attackSkillId(); character.nwayAim(+args[1], +args[2], +args[3], +args[4], +args[5], +args[6], +args[7], +args[8]); } } else if (command === 'nallShot') { var character = this.character(args[0]); if (character && character.isBattler()) { if (!args[7]) args[7] = character.battler().attackSkillId(); character.nallShot(+args[1], +args[2], +args[3], +args[4], +args[5], +args[6], +args[7]); } } else if (command === 'nallAim') { var character = this.character(args[0]); if (character && character.isBattler()) { if (!args[7]) args[7] = character.battler().attackSkillId(); character.nallAim(+args[1], +args[2], +args[3], +args[4], +args[5], +args[6], +args[7]); } } else if (command === 'actShowHpGauge') { $gameSystem.setActHpGaugeVisible(true); } else if (command === 'actHideHpGauge') { $gameSystem.setActHpGaugeVisible(false); } }; //----------------------------------------------------------------------------- // Sprite_Bullet // function Sprite_Bullet() { this.initialize.apply(this, arguments); } Sprite_Bullet.prototype = Object.create(Sprite.prototype); Sprite_Bullet.prototype.constructor = Sprite_Bullet; // 初期化 Sprite_Bullet.prototype.initialize = function(bullet) { Sprite.prototype.initialize.call(this); this.anchor.x = 0.5; this.anchor.y = 0.5; this._bullet = bullet; this._characterName = ''; this._characterIndex = 0; }; // フレーム更新 Sprite_Bullet.prototype.update = function() { Sprite.prototype.update.call(this); this.opacity = this._bullet._opacity; if (this.opacity > 0) { this.updateBitmap(); this.x = this._bullet.screenX(); this.y = this._bullet.screenY(); this.z = this._bullet._z; this.rotation = this._bullet.angle(); } }; // 転送元ビットマップの更新 Sprite_Bullet.prototype.updateBitmap = function() { if (this.isImageChanged()) { this._characterName = this._bullet._characterName; this._characterIndex = this._bullet._characterIndex; this.setCharacterBitmap(); } }; // グラフィックの変更判定 Sprite_Bullet.prototype.isImageChanged = function() { return this._characterName !== this._bullet.characterName || this._characterIndex !== this._bullet.characterIndex; }; // ビットマップの設定 Sprite_Bullet.prototype.setCharacterBitmap = function() { this.bitmap = ImageManager.loadSystem(this._characterName); var pw = Math.floor(this.bitmap.width / 8); var sx = this._characterIndex * pw; this.setFrame(sx, 0, pw, this.bitmap.height); this.blendMode = this._characterName.charAt(0) === '!' ? 1 : 0; }; //----------------------------------------------------------------------------- // Sprite_Shield // function Sprite_Shield() { this.initialize.apply(this, arguments); } Sprite_Shield.prototype = Object.create(Sprite.prototype); Sprite_Shield.prototype.constructor = Sprite_Shield; // 初期化 Sprite_Shield.prototype.initialize = function() { Sprite.prototype.initialize.call(this); this.anchor.x = 0.5; this.anchor.y = 1.0; this.bitmap = ImageManager.loadSystem('TMJumpActionShield'); }; //----------------------------------------------------------------------------- // Sprite_Character // // メンバ変数の初期化 var _Sprite_Character_initMembers = Sprite_Character.prototype.initMembers; Sprite_Character.prototype.initMembers = function() { _Sprite_Character_initMembers.call(this); this._damages = []; this._popups = []; this._effectType = null; this._effectDuration = 0; this._shake = 0; this.createWeaponSprite(); }; // 武器スプライトの作成 Sprite_Character.prototype.createWeaponSprite = function() { this._weaponSprite = new Sprite_Weapon(); this.addChild(this._weaponSprite); }; // 武器アニメーションのセットアップ Sprite_Character.prototype.setupWeaponAnimation = function() { if (this._character.battler().isWeaponAnimationRequested()) { this._weaponSprite.setup(this._character.battler().weaponImageId()); this._character.battler().clearWeaponAnimation(); } }; // フレーム更新 var _Sprite_Character_update = Sprite_Character.prototype.update; Sprite_Character.prototype.update = function() { _Sprite_Character_update.call(this); this.updateDamagePopup(); this.updateMapPopup(); if (this._character.isBattler()) { this.updateEffect(); this.updateMotion(); this.updateShield(); if (actHpGauge) this.updateHpGauge(); } }; // その他の更新 var _Sprite_Character_updateOther = Sprite_Character.prototype.updateOther; Sprite_Character.prototype.updateOther = function() { if (!this.isEffecting()) _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.updateMapPopup = function() { this.setupMapPopup(); if (this._popups.length > 0) { for (var i = this._popups.length - 1; i >= 0; i--) { this._popups[i].update(); this._popups[i].x = this.x; this._popups[i].y = this.y; if (!this._popups[i].isPlaying()) { this.parent.removeChild(this._popups[i]); this._popups.splice(i, 1); } } } }; // マップ用ポップアップのセット Sprite_Character.prototype.setupMapPopup = function() { while (this._character.isMapPopupExist()) { var sprite = new Sprite_MapPopup(); sprite.x = this.x; sprite.y = this.y; var popup = this._character.getMapPopup(); var re = /\\I\[(\d+)\]/i; var match = re.exec(popup.text); if (match) { sprite.z = this.z + 1; sprite.setup(popup, Number(match[1])); } else { sprite.z = this.z + 2; sprite.setup(popup, -1); } this._popups.push(sprite); this.parent.addChild(sprite); } }; // エフェクトのセット 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_Character.prototype.updateMotion = function() { this.setupWeaponAnimation(); if (this._weaponSprite.isPlaying()) { if (this._character._direction == 4) { this._weaponSprite.scale.x = 1; this._weaponSprite.x = -16; } else { this._weaponSprite.scale.x = -1; this._weaponSprite.x = 16; } } }; // HPゲージの更新 Sprite_Character.prototype.updateHpGauge = function() { if (!this._hpGaugeSprite) { this._hpGaugeSprite = new Sprite_HpGauge(this._character); this._hpGaugeSprite.y = -2; this.addChild(this._hpGaugeSprite); } }; // シールドの更新 Sprite_Character.prototype.updateShield = function() { var battler = this._character.battler(); if (this._shieldSprite) { this._shieldSprite.visible = battler.isStateAffected(actGuardStateId); } else { if (battler.isStateAffected(actGuardStateId)) { this._shieldSprite = new Sprite_Shield(); this.addChild(this._shieldSprite); } } }; // HPゲージとシールドのbushDepth対応 var _Sprite_Character_createHalfBodySprites = Sprite_Character.prototype.createHalfBodySprites; Sprite_Character.prototype.createHalfBodySprites = function() { var flag = !this._upperBody; _Sprite_Character_createHalfBodySprites.call(this); if (flag) { if (this._hpGaugeSprite) this.addChild(this.removeChild(this._hpGaugeSprite)); if (this._shieldSprite) this.addChild(this.removeChild(this._shieldSprite)); } }; //----------------------------------------------------------------------------- // 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(); } }; //----------------------------------------------------------------------------- // Sprite_MapPopup // function Sprite_MapPopup() { this.initialize.apply(this, arguments); } Sprite_MapPopup.prototype = Object.create(Sprite.prototype); Sprite_MapPopup.prototype.constructor = Sprite_MapPopup; Sprite_MapPopup.prototype.initialize = function() { Sprite.prototype.initialize.call(this); this._duration = 150; }; Sprite_MapPopup.prototype.setup = function(popup, iconIndex) { var sprite = new Sprite(); if (iconIndex >= 0) { sprite.bitmap = ImageManager.loadSystem('IconSet'); var pw = Window_Base._iconWidth; var ph = Window_Base._iconHeight; var sx = iconIndex % 16 * pw; var sy = Math.floor(iconIndex / 16) * ph; sprite.setFrame(sx, sy, pw, ph); } else { sprite.bitmap = new Bitmap(160, 32); sprite.bitmap.outlineColor = 'black'; sprite.bitmap.outlineWidth = 5; sprite.bitmap.fontSize = 28; sprite.bitmap.textColor = popup.color; sprite.bitmap.drawText(popup.text, 0, 0, 160, 32, 'center'); } sprite.anchor.x = 0.5; sprite.anchor.y = 1; sprite.y = popup.ry; sprite.ry = sprite.y; sprite.by = sprite.y + 40; sprite.dy = popup.dy; sprite.g = popup.g; this.addChild(sprite); }; Sprite_MapPopup.prototype.update = function() { Sprite.prototype.update.call(this); if (this._duration > 0) { this._duration--; for (var i = 0; i < this.children.length; i++) { var sprite = this.children[i]; sprite.dy += sprite.g; sprite.ry += sprite.dy; if (sprite.ry >= sprite.by) { sprite.ry = sprite.by; sprite.dy *= -0.6; } sprite.y = Math.round(sprite.ry); } } this.updateOpacity(); }; Sprite_MapPopup.prototype.updateOpacity = function() { if (this._duration < 10) { this.opacity = 255 * this._duration / 10; } }; Sprite_MapPopup.prototype.isPlaying = function() { return this._duration > 0; }; //----------------------------------------------------------------------------- // Sprite_HpGauge // function Sprite_HpGauge() { this.initialize.apply(this, arguments); } Sprite_HpGauge.prototype = Object.create(Sprite.prototype); Sprite_HpGauge.prototype.constructor = Sprite_HpGauge; Sprite_HpGauge.prototype.initialize = function(character) { this._character = character; this._battler = this._character.battler(); Sprite.prototype.initialize.call(this); this.bitmap = new Bitmap(32, 4); this.z = 9; this.anchor.x = 0.5; this.anchor.y = 1; }; Sprite_HpGauge.prototype.update = function() { Sprite.prototype.update.call(this); this.visible = $gameSystem.isActHpGaugeVisible(); if (this._battler !== this._character.battler()) { this._battler = this._character.battler(); if (!this._battler) { // バトラーが削除された場合はゲージを消去 this._hp = 0; this.refresh(); } } if (this._battler) { if (this._hp !== this._battler.hp || this._mhp !== this._battler.mhp) { this._hp = this._battler.hp; this._mhp = this._battler.mhp; this.refresh(); } } }; Sprite_HpGauge.prototype.refresh = function() { this.bitmap.clear(); if (this._hp === 0) return; this.bitmap.fillRect(0, 0, 32, 4, '#000000'); var w = Math.floor(this._hp / this._mhp * 30); this.bitmap.fillRect(1, 1, w, 2, this._hp === this._mhp ? '#fff060' : '#ffa030'); }; //----------------------------------------------------------------------------- // Spriteset_Map // var _Spriteset_Map_createLowerLayer = Spriteset_Map.prototype.createLowerLayer; Spriteset_Map.prototype.createLowerLayer = function() { _Spriteset_Map_createLowerLayer.call(this); this.createBullets(); }; // 弾スプライトの作成 Spriteset_Map.prototype.createBullets = function() { this._bulletSprites = []; $gameMap.playerBullets().forEach(function(bullet) { this._bulletSprites.push(new Sprite_Bullet(bullet)); this._baseSprite.addChild(this._bulletSprites[this._bulletSprites.length - 1]); }, this); $gameMap.enemyBullets().forEach(function(bullet) { this._bulletSprites.push(new Sprite_Bullet(bullet)); this._baseSprite.addChild(this._bulletSprites[this._bulletSprites.length - 1]); }, this); }; // 飛行船の影の作成 Spriteset_Map.prototype.createShadow = function() { }; // 飛行船の影の更新 Spriteset_Map.prototype.updateShadow = function() { }; //----------------------------------------------------------------------------- // Window_Selectable // var _Window_Selectable_isOkTriggered = Window_Selectable.prototype.isOkTriggered; Window_Selectable.prototype.isOkTriggered = function() { return _Window_Selectable_isOkTriggered.call(this) || (actAttackToOk && Input.isRepeated('attack')); }; var _Window_Selectable_isCancelTriggered = Window_Selectable.prototype.isCancelTriggered; Window_Selectable.prototype.isCancelTriggered = function() { return _Window_Selectable_isCancelTriggered.call(this) || (actJumpToCancel && Input.isRepeated('jump')); }; //----------------------------------------------------------------------------- // Window_Option // var _Window_Option_makeCommandList = Window_Options.prototype.makeCommandList; Window_Options.prototype.makeCommandList = function() { _Window_Option_makeCommandList.call(this); if (padConfigCommand) this.addCommand(padConfigCommand, 'padConfig'); // 常にダッシュは不要なので削除してしまう。 for (var i = 0; i < this._list.length; i++) { if (this._list[i].symbol === 'alwaysDash') { this._list.splice(i, 1); break; } } }; var _Window_Options_statusText = Window_Options.prototype.statusText; Window_Options.prototype.statusText = function(index) { var symbol = this.commandSymbol(index); if (symbol === 'padConfig') return ''; return _Window_Options_statusText.call(this, index); }; Window_Options.prototype.isPadSymbol = function(symbol) { return symbol.contains('padButton'); }; var _Window_Options_processOk = Window_Options.prototype.processOk; Window_Options.prototype.processOk = function() { var index = this.index(); var symbol = this.commandSymbol(index); if (symbol === 'padConfig') { this.playOkSound(); this.updateInputData(); this.deactivate(); this.callHandler('padConfig'); } else { _Window_Options_processOk.call(this); } }; var _Window_Options_cursorRight = Window_Options.prototype.cursorRight; Window_Options.prototype.cursorRight = function(wrap) { var index = this.index(); var symbol = this.commandSymbol(index); if (symbol !== 'padConfig') { _Window_Options_cursorRight.call(this, wrap); } }; var _Window_Options_cursorLeft = Window_Options.prototype.cursorLeft; Window_Options.prototype.cursorLeft = function(wrap) { var index = this.index(); var symbol = this.commandSymbol(index); if (symbol !== 'padConfig') { _Window_Options_cursorLeft.call(this, wrap); } }; //----------------------------------------------------------------------------- // Window_PadOptions // function Window_PadOptions() { this.initialize.apply(this, arguments); } Window_PadOptions.prototype = Object.create(Window_Options.prototype); Window_PadOptions.prototype.constructor = Window_PadOptions; Window_PadOptions.prototype.initialize = function() { Window_Options.prototype.initialize.call(this, 0, 0); this.hide(); this.deactivate(); }; Window_PadOptions.prototype.makeCommandList = function() { for (var i = 1; i <= 12; i++) { this.addCommand('パッドボタン' + i, 'padButton' + i); } }; Window_PadOptions.prototype.statusWidth = function() { return 120; }; Window_PadOptions.prototype.statusText = function(index) { var value = this.getConfigValue(index); return value ? padButtonNames[padButtons.indexOf(value)] : ''; }; Window_PadOptions.prototype.processOk = function() { var index = this.index(); var value = this.getConfigValue(index); value = padButtons.indexOf(value); value = (value + 1) % padButtons.length; this.changeValue(index, padButtons[value]); }; Window_PadOptions.prototype.cursorRight = function(wrap) { var index = this.index(); var value = this.getConfigValue(index); value = padButtons.indexOf(value); value = (value + 1).clamp(0, padButtons.length - 1); this.changeValue(index, padButtons[value]); }; Window_PadOptions.prototype.cursorLeft = function(wrap) { var index = this.index(); var value = this.getConfigValue(index); value = padButtons.indexOf(value); value = (value - 1).clamp(0, padButtons.length - 1); this.changeValue(index, padButtons[value]); }; Window_PadOptions.prototype.changeValue = function(index, value) { var lastValue = this.getConfigValue(index); if (lastValue !== value) { this.setConfigValue(index, value); this.redrawItem(index); SoundManager.playCursor(); } }; Window_PadOptions.prototype.getConfigValue = function(index) { return ConfigManager.getPadButton(index); }; Window_PadOptions.prototype.setConfigValue = function(index, value) { ConfigManager.setPadButton(index, value); }; //----------------------------------------------------------------------------- // Scene_Map // var _Scene_Map_start = Scene_Map.prototype.start; Scene_Map.prototype.start = function() { _Scene_Map_start.call(this); $gamePlayer.refresh(); }; Scene_Base.prototype.checkGameover = function() { }; Scene_Map.prototype.processMapTouch = function() { }; //----------------------------------------------------------------------------- // Scene_Options // var _Scene_Options_create = Scene_Options.prototype.create; Scene_Options.prototype.create = function() { _Scene_Options_create.call(this); this.createPadOptionsWindow(); }; var _Scene_Options_createOptionsWindow = Scene_Options.prototype.createOptionsWindow; Scene_Options.prototype.createOptionsWindow = function() { _Scene_Options_createOptionsWindow.call(this); this._optionsWindow.setHandler('padConfig', this.onPadConfig.bind(this)); }; Scene_Options.prototype.createPadOptionsWindow = function() { this._padOptionsWindow = new Window_PadOptions(); this._padOptionsWindow.setHandler('cancel', this.cancelPadConfig.bind(this)); this.addWindow(this._padOptionsWindow); }; Scene_Options.prototype.onPadConfig = function() { this._optionsWindow.hide(); this._padOptionsWindow.show(); this._padOptionsWindow.activate(); }; Scene_Options.prototype.cancelPadConfig = function() { this._padOptionsWindow.hide(); this._optionsWindow.show(); this._optionsWindow.activate(); }; })();