设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
楼主: hcm
打印 上一主题 下一主题

[RMVA发布] 【RMVA全动画脚本】Sideview横版战斗系统改编版(2013.1.17更新)

  [复制链接]

Lv3.寻梦者

虚空人形

梦石
0
星屑
4517
在线时间
2037 小时
注册时间
2011-8-11
帖子
3398

贵宾

81
 楼主| 发表于 2012-11-27 12:25:18 | 只看该作者
这个按理应该没问题啊,直接上工程好了。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
116 小时
注册时间
2006-7-29
帖子
29
82
发表于 2012-11-27 13:34:40 | 只看该作者
工程太大了,有很多素材,这是我的三个脚本,
  1. #==============================================================================
  2. # ■ SideViewアクション設定 Ver100
  3. #------------------------------------------------------------------------------
  4. #  サイドビューバトル全般のセッティングやアクションを作成します
  5. #==============================================================================

  6. module N03
  7. #--------------------------------------------------------------------------
  8. # ● 全体のセッティング
  9. #--------------------------------------------------------------------------
  10.   # アクター初期位置     一人目       二人目       三人目       四人目
  11.   #                    X軸 Y軸 H軸  X軸 Y軸 H軸  X軸 Y軸 H軸  X軸 Y軸 H軸
  12.   ACTOR_POSITION   = [[495,360, 0],[585,295, 0],[495,250, 0],[425,295, 0]]
  13.   # 行動終了時のウエイト(待ち時間・単位は1フレーム)
  14.   ACTION_END_WAIT = 8
  15.   # ターン終了時のウエイト(待ち時間・単位は1フレーム)
  16.   TURN_END_WAIT = 12
  17.   # 敵の不意打ち時にバックアタック(左右反転)を許可するならtrue しないならfalse
  18.   BACK_ATTACK = true
  19.   # 味方バトラーがダメージを受けた時、デフォルトのエフェクトを採用するならtrue
  20.   ACTOR_DAMAGE = false
  21.   # 敵バトラーがダメージを受けた時、デフォルトのエフェクトを採用するならtrue
  22.   ENEMY_DAMAGE = false
  23.   # 敵バトラーのX座標、回転計算、戦闘アニメを自動で反転させるならtrue
  24.   ENEMY_MIRROR = true
  25.   # コラプス禁止処理に使う、データベースの不死身ステートID
  26.   IMMORTAL_ID = 10
  27.   
  28.   # バトルログ(戦闘の進行を実況表示するウィンドウ)を表示させるならtrue
  29.   # OFFにした場合、スキル名ウインドウが画面上部に表示されます
  30.   BATTLE_LOG = true
  31.   # スキル名ウインドウON時の、非表示にするスキルIDを配列に入れます
  32.   NO_DISPLAY_SKILL_ID = [1,2,3,4,5,6,7]
  33.   # ダメージ数字をPOPさせるならtrue
  34.   DAMAGE_POP = true
  35.   # ステート付加をPOPさせるならtrue
  36.   STATE_POP = true
  37.   # ダメージ数字画像のファイル名(Systemフォルダを参照します)
  38.   DAMAGE_PLUS = "damage_num+"
  39.   # 回復数字画像のファイル名(Systemフォルダを参照します)
  40.   DAMAGE_MINUS = "damage_num-"
  41.   # MPダメージ数字画像のファイル名(Systemフォルダを参照します)
  42.   DAMAGE_MP = "damage_mp"
  43.   # TPダメージ数字画像のファイル名(Systemフォルダを参照します)
  44.   DAMAGE_TP = "damage_tp"
  45.   # ダメージ数字の文字間隔を調整
  46.   DAMAGE_ADJUST = -4
  47.   
  48.   # 戦闘カメラのフォーカス(移動先の焦点)を調整 [X軸, Y軸]
  49.   CAMERA_POSITION = [   0, -40]
  50.   
  51. #--------------------------------------------------------------------------
  52. # ● 戦闘背景セッティング  背景の座標調整や拡大率を設定します
  53. #--------------------------------------------------------------------------
  54.   # 床背景ファイル名…設定する床背景(Battlebacks1)画像ファイル名。
  55.   #               "全Battlebacks1"は指定のないBattlebacks1画像を一括設定する項目です
  56.   # 壁背景ファイル名…設定する壁背景(Battlebacks2)画像ファイル名。
  57.   #               "全Battlebacks2"は指定のないBattlebacks2画像を一括設定する項目です
  58.   # 座標調整…[X軸, Y軸]
  59.   # 拡大率……[横拡大率, 縦拡大率]
  60.   # シェイク可……シェイクアクションで揺れを許可するならtrue しないならfalse
  61.   # スイッチトリガー…戦闘開始時に自動でONにするゲームスイッチ番号。マイナスでサイドビュー専用スイッチがON
  62.   #            背景とバトルプログラムをセットで管理したい場合などに利用します
  63.   #            スイッチ操作をしないなら0
  64.   
  65.    FLOOR1_DATA = {
  66. #――床背景ファイル名―――         座標調整      拡大率    シェイク可  スイッチトリガー
  67.   "Sea_ex01"              => [ [   0, 120], [ 150, 150], false,   -1],
  68.   "全Battlebacks1"        => [ [   0, 120], [ 150, 150],  true,    0],
  69.   
  70.   }
  71.    FLOOR2_DATA = {
  72.   #――壁背景ファイル名―――        座標調整      拡大率    シェイク可  スイッチトリガー
  73.   "Ship_ex"               => [ [   0, 120], [ 150, 150],  true,    0],
  74.   "全Battlebacks2"        => [ [   0, 120], [ 150, 150],  true,    0],
  75.   

  76. }  
  77.   
  78. #==============================================================================
  79. # ■ アクション
  80. #------------------------------------------------------------------------------
  81. #  バトラーが戦闘中に行う単発行動です。組み合わせてフルアクションにできます
  82. #==============================================================================
  83. # ここのアクション名やフルアクション名は、かぶらないようにしてください
  84.   ACTION = {
  85.   
  86. #--------------------------------------------------------------------------
  87. # ● バトラーアニメ設定
  88. #--------------------------------------------------------------------------
  89.   # デフォルトのキャラチップは一つの画像ファイルに複数のキャラが配置されています
  90.   # キャラチップを利用する場合、追加画像はキャラの画像配置に合うようにしてください
  91.   # 一人のキャラで一つの画像を用いる(ファイルの頭に$がある)場合は特に問題ありません
  92.   
  93.   # インデックス…利用するバトラー画像ファイルの後ろに付くインデックス名。
  94.   #          サイドビューのバトラーはアクターの場合だとキャラクターファイル名を参照しますが
  95.   #          インデックスが付くと、キャラクターファイル名+インデックス名の画像ファイルを参照します
  96.   #          例)Actor1のバトラーがインデックス"_1"のアニメを実行する場合の参照ファイルはActor1_1
  97.   #          キャラチップを利用する場合のアニメのインデックスは""になります
  98.   #          アクターはCharactersフォルダ、エネミーはBattlersフォルダに画像を入れます
  99.   #
  100.   # 縦セル…画像ファイルのセルの縦位置。上から0~3と続きます。数に制限はありません
  101.   #       セル数の設定はバトラー設定で行ってください
  102.   # 横セル…画像ファイルのセルの横位置で、再生開始セル。左から0~3と続きます。
  103.   #       アニメはこの横セルの左から右へと再生します。セル数に制限はありません
  104.   # パターン… 0:セル固定 1:片道 2:往復 3:片道ループ 4:往復ループ
  105.   # 速度…アニメの更新速度。数字が低いほど早く更新します
  106.   # Z軸…手前に表示するならプラス。通常は画面下ほど手前に表示されます
  107.   # ウエイト…アニメパターンが最後まで再生されてから次の行動に移るならtrue
  108.   # 影…影グラフィックを表示するならtrue、しない場合はfalse
  109.   # 武器…武器を表示する場合は武器アクション名を。しない場合は""
  110.   #       武器アクションはいくつでも同時追加可能で、追加分は配列の後ろに入れていきます
  111.   
  112.   #―アクション名(待機系)―   判別   インデックス  縦セル 横セル パターン 速度  Z軸  ウエイト   影   武器
  113.   "待機"            => ["motion",   "_1",    0,   0,   4,   12,   0, true, true, "" ],
  114.   "待機固定WT"      => ["motion",   "_1",    0,   1,   0,   12,   0, true, true, "" ],
  115.   "待機固定"        => ["motion",   "_1",    0,   1,   0,   12,   0,false, true, "" ],
  116.   "倒れ"            => ["motion", "_2",    0,   0,   0,   12,   0, true,false, "" ],
  117.   "魔法"            => ["motion", "_2",    1,   0,   3,   12,   0, true,false, "" ],
  118.   "特技"            => ["motion", "_2",    2,   0,   3,   12,   0, true,false, "" ],
  119.   "右向き"          => ["motion",   "_2",    3,   0,   4,   12,   0, true, true, "" ],
  120.   
  121.   #―アクション名(移動系)―    判別   ファイルNo 縦セル 横セル パターン 速度  Z軸 ウエイト   影    武器
  122.   "左向き移動"      => ["motion",   "_1",    2,   0,   4,    6,  10, true, true, "" ],
  123.   "右向き移動"      => ["motion",   "_1",    3,   0,   4,    6,  10, true, true, "" ],
  124.   
  125.   #―アクション名(ポーズ系)―   判別   ファイルNo 縦セル 横セル パターン 速度  Z軸 ウエイト   影    武器
  126.   "武器掲げ"        => ["motion",   "_1",    1,   0,   2,    2, 200,false, true, "" ],
  127.   
  128.   #―アクション名(攻撃系)―    判別   ファイルNo 縦セル 横セル パターン 速度  Z軸 ウエイト   影    武器
  129.   "武器振りR"       => ["motion",   "_1",    1,   0,   1,    2, 200,false, true, ""],
  130.   "武器振りL"       => ["motion",   "_1",    1,   0,   1,    2, 200,false, true, ""],
  131.   "武器振りLR"      => ["motion",   "_1",    1,   0,   1,    2, 200,false, true, "",""],
  132.   "盾防御"          => ["motion",   "_3",    0,   0,   1,    2, 200,false, true, ""],
  133.   "武器拳突き"      => ["motion",   "_1",    1,   0,   1,    2, 200,false, true, "" ],
  134.   "武器突き"        => ["motion",   "_1",    1,   0,   1,    2, 200,false, true, "" ],
  135.   "弓撃ち"          => ["motion",   "_1",    1,   0,   1,    2, 200,false, true, ""],
  136.   
  137. #--------------------------------------------------------------------------
  138. # ● バトラー移動  エネミーのX軸移動は自動で逆計算になります
  139. #--------------------------------------------------------------------------
  140.   # 目標…移動する目標座標の参照先。数値が正で現在地、負で初期位置を参照します([0=自分]は負が設定できないので-7にしてください)
  141.   #       [0=自分] [1=ターゲット] [2=敵全] [3=味方全] [4=敵味方全] [5=セカンドターゲット] [6=画面]
  142.   # X軸…対象から見たX座標
  143.   # Y軸…対象から見たY座標
  144.   # H軸…対象から見たH座標(地面からの高さ) nilにするとH軸を無視してXYのみの移動に
  145.   # 速度…1フレームで移動するピクセル数。数値をマイナスにすると時間指定になり、移動完了までの総フレーム数になります
  146.   # カーブ…移動時の軌道が正は上、負は下にカーブします。
  147.   # ジャンプ…ジャンプ放物線軌道。[ジャンプ開始から頂点までの軌道, 頂点から着地までの軌道]
  148.   # アニメ…その移動に利用するバトラーアニメのアクション名。

  149.   #――アクション名(システム系)――   判別 目標 X軸  Y軸  H軸 速度  カーブ  ジャンプ    アニメ
  150.   "戦闘前の味方配置"    => ["move",-7, 180,   0,   0,  0,   0, [  0,  0], "待機"],
  151.   "退場"                => ["move",-7, 280,   0,   0,  7,   0, [  0,  0], "右向き移動"],
  152.   "逃走途中"            => ["move",-7, 80,   0,   0,  7,   0, [  0,  0], "右向き移動"],
  153.   "コマンド入力移動"    => ["move",-7, -20,   0, nil,-10,   0, [  0,  0], "待機"],
  154.   "ダメージのけぞり"    => ["move", 0,  20,   0, nil,-10,   0, [  0,  0], ""],
  155.   "ダメージのけぞり大"  => ["move", 0,  60,   0, nil,-10,   0, [  0,  0], ""],
  156.   
  157.   #――アクション名(リセット系)――   判別 目標 X軸  Y軸  H軸 速度  カーブ  ジャンプ    アニメ
  158.   "座標リセット早"      => ["move",-7,   0,   0,   0,-10,   0, [  0,  0], "右向き移動"],
  159.   "座標リセット"        => ["move",-7,   0,   0,   0,-20,   0, [  0,  0], "右向き移動"],
  160.   "座標リセットカーブ"  => ["move",-7,   0,   0,   0,-20,  -2, [  0,  0], "右向き移動"],
  161.   "座標リセット左向き"  => ["move",-7,   0,   0,   0,-20,   0, [  0,  0], "待機"],
  162.   
  163.   #――アクション名(自身系)――   判別 目標 X軸  Y軸  H軸 速度  カーブ  ジャンプ    アニメ
  164.   "一歩前移動"          => ["move", 0, -20,   0,   0,-10,   0, [  0,  0], "待機"],
  165.   "一歩後移動"          => ["move", 0,  20,   0,   0,-10,   0, [  0,  0], "待機"],
  166.   "一歩前ジャンプ"      => ["move", 0, -30,   0,   0,-10,   0, [ 20,-20], "待機"],
  167.   "一歩後ジャンプ"      => ["move", 0,  30,   0,   0,-10,   0, [ 20,-20], "待機"],
  168.   "勝利ジャンプ"        => ["move", 0,  10,   0,   0,-25,   0, [ 30,-30], "待機固定"],
  169.   "勝利ジャンプ武器"    => ["move", 0,   0,   0,   0,-15,   0, [ 20,  0], ""],
  170.   "勝利ジャンプ着地"    => ["move",-7,   0,   0,   0,-10,   0, [  0,  0], ""],
  171.   "縦揺れ01"            => ["move", 0,   0,   0,  20, -2,   0, [  0,  0], ""],
  172.   "縦揺れ02"            => ["move", 0,   0,   0, -20, -2,   0, [  0,  0], ""],
  173.   
  174.   #――アクション名(目標系)――   判別 目標 X軸  Y軸  H軸 速度  カーブ  ジャンプ    アニメ
  175.   "敵前移動"            => ["move", 1,  30,   0,   0,-20,   0, [  0,  0], "左向き移動"],
  176.   "敵後移動"            => ["move", 1, -60,   0,   0,-20,   0, [  0,  0], "左向き移動"],
  177.   "敵中移動早"          => ["move", 1,   0,   0,   0,-10,   0, [  0,  0], "左向き移動"],
  178.   "叩き付け前ジャンプ"  => ["move",-1,   0,   0, 100,-20,   0, [ 40,-20], "武器掲げ"],
  179.   "叩き付け"            => ["move",-1,   0,   0,   0,-10,   0, [  0,  0], "武器振りR"],
  180.   
  181. #--------------------------------------------------------------------------
  182. # ● 武器アクション バトラーアニメや武器・アニメ飛ばしに利用するアクション
  183. #--------------------------------------------------------------------------
  184.   # タイプ…[0…アイコン利用]
  185.   #       [1…独自画像(画像名はバトラー設定の武器の項目で行います。参照先はCharactersフォルダ)]
  186.   #       [2…アニメセル(※2003仕様。バトラーと同じセル数でアニメします。画像名はバトラー設定の武器の項目で行います。参照先はCharactersフォルダ)]
  187.   # 移動…画像を動かす距離。[X軸, Y軸]
  188.   # 調整…微調整する画像の初期座標。[X軸, Y軸]
  189.   # 始度…動作前の最初の角度。反時計回りで0~360度。負が時計回り
  190.   # 終度…動作後の角度
  191.   # 原点…画像の原点。[0…中心] [1…左上] [2…右上] [3…左下] [4…右下] [5…バトラーと同じ(画像下と縦半分)]
  192.   # 反転…trueにすると画像を反転して表示
  193.   # 拡大…[X軸拡大率, Y軸拡大率] 小数点でも受け付けます
  194.   # Z軸…画像をキャラより手前に表示するならtrue
  195.   # 逆手…盾画像、もしくは二刀流時の左(項目だと下)の武器画像を表示
  196.   #       アイコンを利用しない場合、盾の画像はバトラー設定の盾の項目で行います
  197.   # 更新…-1でバトラーアニメ更新と同期化。独立させる場合は [更新時間間隔, 更新パターン数, ループするか]
  198.   #         
  199.   # インデックス…武器画像は装備している武器(盾)に設定された画像ファイルを参照しますが、
  200.   #          ここでインデックスを付けると、画像ファイル名+インデックス名の画像を参照します
  201.   #          一つの武器で複数のパターンがある画像を用いる場合に利用します
  202.   #          例) "縦振り"のインデックスは"" => 画像ファイル名"IconSet"を参照
  203.   #          例) "縦振り2"のインデックスは"_1" => 画像ファイル名"IconSet_1"を参照
  204.   #          参照フォルダはアイコン利用の場合はSystemフォルダ、独自画像とアニメセルはCharactersフォルダです
  205.   #         
  206.   # 画像…武器や盾に設定された画像ファイルやインデックスを無視して、武器画像を直接指定する場合は
  207.   #       ここに画像ファイル名を入れます。画像はCharactersフォルダを参照します
  208.   
  209.   #―アクション名―    判別 タイプ  移動     調整   始度 終度 原点 反転   拡大    Z軸   逆手   更新  インデックス  画像
  210.   "縦振り"    => ["wp", 0,[  6, 0],[ -4,-10], -45,  45,  4, false, [1,1], false, false,   -1,   "",    ""],
  211.   "盾"        => ["wp", 0,[  0, 0],[ 12,  0],   0,   0,  4, false, [1,1],  true,  true,   -1,   "",    ""],
  212.   "縦振りL"   => ["wp", 0,[  6, 0],[  0, -8],-135,  45,  4, false, [1,1],  true,  true,   -1,   "",    ""],
  213.   "拳突き"    => ["wp", 0,[-20, 0],[  5,  5], -45, -45,  4, false, [1,1], false, false,   -1,   "",    ""],
  214.   "突き"      => ["wp", 0,[-25, 0],[ 25,-10],  45,  45,  4, false, [1,1], false, false,   -1,   "",    ""],
  215.   "掲げ"      => ["wp", 0,[  6,-4],[ -4,-10],  90, -45,  4, false, [1,1], false, false,   -1,   "",    ""],
  216.   
  217.   #―2003仕様―   判別 タイプ  移動     調整   始度 終度 原点 反転   拡大    Z軸   逆手   更新  インデックス  画像
  218.   "弓"        => ["wp", 0,[  1, 0],[  -1,  0],   50,   45,  5, false, [1,1],  true, false,   -1,   "",    ""],
  219.   
  220.   # 武器飛ばし用  判別 タイプ  移動     調整   始度 終度 原点 反転   拡大    Z軸   二刀     更新      インデックス  画像
  221.   "矢"        => ["wp", 0,[  0, 0],[  0,  0],   0,  45,  0, false, [1,1],  true, false,[2,6,false],   "",    "arrow01"],
  222.   "回転"      => ["wp", 0,[  0, 0],[  0,  0],   0, 360,  0, false, [1,1],  true, false,[1,8, true],   "",    ""],
  223.   
  224. #--------------------------------------------------------------------------
  225. # ● 武器・アニメ飛ばし 武器や戦闘アニメを移動させます。飛び道具などに
  226. #--------------------------------------------------------------------------
  227.   # ID…データベースのアニメID。[移動させるアニメID, ヒット時のアニメID] 0はアニメ非表示、-1は武器のアニメを表示。
  228.   # 始…アニメ移動の開始位置。マイナスにすると、複数ターゲットでも一個のアニメだけ実行
  229.   #     [0=自分] [1=ターゲット] [2=敵全] [3=味方全] [4=敵味方全] [5=セカンドターゲット] [6=画面]
  230.   # 後…アニメ移動の終了位置。マイナスにすると、複数ターゲットでも一個のアニメだけ実行
  231.   #     [0=自分] [1=ターゲット] [2=敵全] [3=味方全] [4=敵味方全] [5=セカンドターゲット] [6=画面]
  232.   # 始調整…移動開始座標の微調整。[X軸, Y軸] エネミーはX軸が自動で逆計算に
  233.   # 後調整…移動終了座標の微調整。[X軸, Y軸] エネミーはX軸が自動で逆計算に
  234.   # 速度…1フレームに移動するX軸ピクセル数。マイナスにすると時間扱いになり、距離によって速度が変わります
  235.   # タイプ…移動後の処理。[0=消える(ミス時は自動で貫通に変化)] [1=貫通] [2=消える(ミス時も消える)]
  236.   # 軌道…移動の軌道。[開始から頂点までの軌道, 頂点から終了までの軌道]
  237.   # Z軸…アニメや武器をキャラより手前に表示するならtrue
  238.   # ウエイト…アクションが終わるまで次のアクションに移行しないならtrue [移動させるアニメのウエイト, ヒット時アニメのウエイト]
  239.   # ダメージ…目標到達時にダメージ計算を適用するならtrue
  240.   # ホーミング…移動するターゲットに対してホーミングするならtrue。しないならfalse
  241.   # カメラ…カメラのズームに合わせてアニメを拡大縮小するならtrue
  242.   # ループ…移動させるアニメの再生が終わった時、最初にループさせるならtrue
  243.   # 反転不可…いかなる場合でもアニメを反転させないならtrue
  244.   # 武器…武器アクション名を入れます。利用しないなら""
  245.   
  246.   #――アクション名――     判別     ID   始 後  始調整   後調整  速度 タイプ  軌道    Z軸       ウエイト      ダメージ  ホーミング カメラ    ループ 反転不可 武器
  247.   "矢発射WT"       => ["m_a",[ 0,-1], 0, 1, [ 0, 0], [ 0, 0], 20,  0, [0,0], true, [ true, true],  true,  true,  true, false, false,  "矢"],
  248.   "矢発射"         => ["m_a",[ 0,-1], 0, 1, [ 0, 0], [ 0, 0], 20,  0, [0,0], true, [false,false],  true,  true,  true, false, false,  "矢"],
  249.   "水鉄砲発射"     => ["m_a",[69,69], 0, 1, [ 0, 0], [ 0, 0], 10,  0, [ 0, 0], true, [ true, true],  true,  true,  true,  true, false,  ""],
  250.   "武器投げ開始"   => ["m_a",[ 0,-1], 0, 1, [ 4,-6], [ 0, 0], 10,  2, [-3,-3], true, [ true,false],  true,  true,  true, false, false,  "回転"],
  251.   "武器投げ戻し"   => ["m_a",[ 0, 0], 1, 0, [ 0, 0], [ 4,-6], 10,  0, [ 3, 3], true, [ true,false], false,  true,  true, false, false,  "回転"],
  252.   
  253. #--------------------------------------------------------------------------
  254. # ● 戦闘アニメ データベースの戦闘アニメを表示します
  255. #--------------------------------------------------------------------------
  256.   # ID…アニメID。-1で武器に設定されたアニメに  -2は二刀流のもう片方の武器アニメに
  257.   #               -3でスキルに設定されたアニメに
  258.   # 対象…[0=自分] [1=ターゲット] [2=敵全] [3=味方全] [4=敵味方全] [5=セカンドターゲット]
  259.   # ホーミング… 対象の座標移動にアニメが追尾するならtrue
  260.   # ウエイト…アニメ表示が終わるまで待つならtrue
  261.   # ダメージ…ダメージ計算を適用するならtrue
  262.   # カメラ…カメラのズームに合わせてアニメを拡大縮小するならtrue
  263.   # 反転不可…いかなる場合でもアニメを反転させないならtrue
  264.   # 反転…アニメを反転させるならtrue
  265.   # Z軸…アニメをキャラより手前に表示するならtrue
  266.   
  267.   #―アクション名(ダメージ系)―     判別     ID 対象  ホーミング ウエイト  ダメージ   カメラ 反転不可  反転    Z軸
  268.   "対象アニメ武器"      => ["anime",  -1,  1, false, false,  true,  true, false,  false,  true],
  269.   "対象アニメ武器WT"    => ["anime",  -1,  1, false,  true,  true,  true, false,  false,  true],
  270.   "対象アニメ武器LWT"   => ["anime",  -2,  1, false,  true,  true,  true, false,  false,  true],
  271.   "対象アニメ"          => ["anime",  -3,  1, false, false,  true,  true, false,  false,  true],
  272.   "対象アニメWT"        => ["anime",  -3,  1, false,  true,  true,  true, false,  false,  true],
  273.   
  274.   #――アクション名(自身系)――   判別     ID 対象  ホーミング ウエイト  ダメージ   カメラ 反転不可  反転    Z軸
  275.   "魔法詠唱中"          => ["anime", 113,  0,  true,  true, false,  true, false,  false,  true],
  276.   "特技待機中"          => ["anime", 114,  0,  true,  true, false,  true, false,  false,  true],
  277.   "魔法発動アニメ"      => ["anime", 115,  0, false,  true, false,  true, false,  false, false],
  278.   "特技発動アニメ"      => ["anime", 116,  0, false,  true, false,  true, false,  false, false],
  279.   
  280. #--------------------------------------------------------------------------
  281. # ● カメラワーク  画面のズームやスクロールを行います
  282. #--------------------------------------------------------------------------
  283.   # 対象…移動やズームの対象
  284.   #       [0=自分] [1=ターゲット] [2=敵全] [3=味方全] [4=敵味方全] [5=セカンドターゲット] [6=画面]
  285.   # 調整座標…カメラ座標の最終地点微調整 [X軸(プラスで画面→), Y軸(プラスで画面↓)]
  286.   # 時間…カメラワークにかける時間
  287.   # ズーム…カメラのズーム率(%)。100でズームなし。
  288.   # ウエイト…カメラワークが終わるまで待つならtrue。待たないならfalse
  289.   
  290.   #――アクション名――      判別    対象  調整座標   ズーム  時間  ウエイト
  291.   "カメラリセット"=> ["camera",   6, [   0,   0], 100,  40, false],
  292.   "ズームイン"    => ["camera",   6, [   0, 100], 120,  40, false],
  293.   "ズームアウト"  => ["camera",   6, [   0,   0],  80,  40, false],
  294.   
  295. #--------------------------------------------------------------------------
  296. # ● 画面のシェイク  画面を揺らします。空中座標(H座標が0以上)のバトラーは揺れません
  297. #--------------------------------------------------------------------------
  298.   # 方向…揺れる方向 [横,縦] 数値が大きいほど揺れ幅は大きくなります
  299.   # 速度…揺れの速度。小さいほど早く揺れます
  300.   # 時間…揺れの続く時間。揺れ幅は時間と共に弱まっていきます
  301.   # ウエイト…シェイクが終わるまで待つならtrue。待たないならfalse
  302.   
  303.   #――アクション名――       判別      方向   速度  時間  ウエイト
  304.   "シェイク小"     => ["shake", [  0, 4],  2,    16, false],
  305.   "シェイク中"     => ["shake", [  0, 6],  3,    30, false],
  306.   "シェイク大"     => ["shake", [  0,12],  3,    40, false],
  307.   
  308. #--------------------------------------------------------------------------
  309. # ● 画面色調変更 背景やバトラーの色調を変更します
  310. #--------------------------------------------------------------------------
  311.   # 対象…色調変更の対象
  312.   #       [0=自分] [1=ターゲット] [2=敵全] [3=味方全] [4=敵味方全] [5=セカンドターゲット]
  313.   #       [6=背景] [7=自分+ターゲット] [8=自分以外] [9=自分+ターゲット以外] [10=全て]
  314.   # 色調レベル…[ R, G, B, アルファ(色の強さ), 変更時間, ※戻り]
  315.   #             ※戻り…変更完了してから元の色に戻す時間。戻さないなら0
  316.   # ウエイト…色調変更が終わるまで待つならtrue。待たないならfalse
  317.   
  318.   # 変更名                        判別    対象     R,   G,   B,アルファ  時間 戻り  ウエイト
  319.   "色調初期化"               => ["color",  10, [   0,   0,   0,   0,  30,   0], false],
  320.   "ピンチ色調"               => ["color",   0, [ 255,  50,  50, 100,  40,  40], false],
  321.   "毒色調"                   => ["color",   0, [ 170,  50, 255, 170,  30,  30], false],
  322.   "汎用状態異常色調"         => ["color",   0, [ 255, 255,  50, 170,  40,  40], false],
  323.   "背景のみ暗転"             => ["color",   6, [   0,   0,   0, 255,  30,   0], false],
  324.   "自分とターゲット以外暗転" => ["color",   9, [   0,   0,   0, 255,  30,   0], false],
  325.    
  326. #--------------------------------------------------------------------------
  327. # ● トランジション 画面を固定した後に実行するトランジションです
  328. #--------------------------------------------------------------------------
  329.   # 実行する前にアクション"画面固定"を実行し、画面を固定させてください
  330.   #
  331.   # 境界…境界の曖昧さ。値が大きいほど曖昧になります
  332.   # 時間…トランジションにかける時間。トランジション中はゲーム画面は固定されます
  333.   # トランジションファイル名…トランジション画像。Picturesフォルダに入れてください
  334.   
  335.   #―――アクション名―――   判別  境界  時間  トランジションファイル名
  336.   "サークル"         => ["ts",  40,   60,  "circle"],
  337.   
  338. #--------------------------------------------------------------------------
  339. # ● 残像  バトラーの移動に残像を残します
  340. #--------------------------------------------------------------------------
  341.   # 数…残像数。0は表示中の残像を消します。あまり多いと負荷が高くなります
  342.   # 間隔…残像の表示間隔。小さいほど狭い。単位は1フレーム
  343.   # 処理…残像の後処理。trueはフルアクション終了時に消え、falseは消えずにずっと表示
  344.   # 透明度…残像の透明度
  345.   
  346.   #――アクション名――      判別    数  間隔  処理  透明度
  347.   "残像ON"        => ["mirage",  4,   3,  true,  160],
  348.   "残像OFF"       => ["mirage",  0,   0,  true,    0],
  349.   
  350. #--------------------------------------------------------------------------
  351. # ● バトラー回転 画像を回転
  352. #--------------------------------------------------------------------------
  353.   # 回転しているバトラーのフルアクションが終了すると、回転角度はリセットされます
  354.   # 回転中の画像転送元原点は中心になります。反転と違い、武器アクションは反映されません
  355.   #
  356.   # 時間…回転にかける時間。0で即座に反映されます
  357.   # 始度…回転開始時の角度。0~360度を指定。正が反時計周り、負が時計周り
  358.   # 終度…回転終了時の角度。0~360度を指定。上記ともにエネミーは逆計算になります
  359.   # タイプ…回転終了後の処理。[0…回転リセット] [1…終了角度のまま] [2…ループ]

  360.   #――アクション名――     判別    時間  始度  終度  タイプ
  361.   "右1回転"        => ["angle",  12,    0, -360,   0],
  362.   "左1回転"        => ["angle",  12,    0,  360,   0],
  363.   
  364. #--------------------------------------------------------------------------
  365. # ● バトラー拡大縮小 画像を拡大縮小
  366. #--------------------------------------------------------------------------
  367.   # 拡大縮小しているバトラーのフルアクションが終了すると、拡大縮小はリセットされます
  368.   # 反転と違い、武器アクションは反映されません
  369.   #
  370.   # 時間…拡大縮小にかける時間。
  371.   # 開始サイズ…拡大縮小開始時のサイズ。小数点で入れてください。[X軸(横), Y軸(縦)]
  372.   # 終了サイズ…拡大縮小終了時のサイズ。小数点で入れてください。[X軸(横), Y軸(縦)]
  373.   # タイプ…拡大縮小終了後の処理。[0…サイズリセット] [1…終了サイズのまま] [2…ループ]

  374.   #――アクション名――     判別   時間    開始サイズ     終了サイズ  タイプ
  375.   "横縮み"         => ["zoom",  12,  [1.0, 1.0],  [0.5, 1.0],  0],
  376.   "縦縮み"         => ["zoom",  12,  [1.0, 1.0],  [1.0, 0.5],  0],

  377. #--------------------------------------------------------------------------
  378. # ● バトラー透明度操作 画像の透明度を変更
  379. #--------------------------------------------------------------------------
  380.   # 透明度操作しているバトラーのフルアクションが終了すると、透明度操作はリセットされます
  381.   #
  382.   # 時間…透明度変更にかける時間。
  383.   # 開始…変更開始時の透明度。0が完全に消えた状態、255が完全に不透明な状態
  384.   # 終了…変更終了時の透明度
  385.   # 影…影も同じ透明度操作をするならtrue
  386.   # 武器…武器も同じ透明度操作をするならtrue
  387.   # ループ…透明度変更が終了した後、操作を自動で逆転させ続けるならtrue
  388.   # ウエイト…操作終了まで次のアクションに移行せず待つならtrue
  389.   
  390.   #――アクション名――         判別    時間  開始  終了    影   武器   ループ  ウエイト
  391.   "逃走透明"         => ["opacity",   30,  255,   0,  true,  true, false, false],
  392.   "透明化"           => ["opacity",   60,  255,   0,  true,  true, false, false],
  393.   "透明化WT"         => ["opacity",   60,  255,   0,  true,  true, false,  true],
  394.   "透明化解除"       => ["opacity",   60,    0, 255,  true,  true, false, false],
  395.   "透明化解除WT"     => ["opacity",   60,    0, 255,  true,  true, false,  true],
  396.   
  397. #--------------------------------------------------------------------------
  398. # ● ふきだしアニメ イベントに使うふきだしアイコンを表示
  399. #--------------------------------------------------------------------------
  400.   # 種類…ふきだしの種類(縦位置)を0~9で指定
  401.   # 速度…更新速度。セルは2コマ目から再生されます
  402.   # サイズ…ふきだしのサイズ
  403.   
  404.   # ふきだし名         判別      種類 速度  サイズ
  405.   "状態異常/汎用"   => ["balloon",   6,  10,  1],
  406.   "状態異常/ピンチ" => ["balloon",   5,  10,  1],
  407.   "状態異常/睡眠"   => ["balloon",   9,  10,  1],
  408.   
  409. #--------------------------------------------------------------------------
  410. # ● ピクチャの表示  カットインなどに
  411. #--------------------------------------------------------------------------
  412.   # 番号…使用するピクチャの番号。ピクチャを管理するための番号です。何枚でも表示できます
  413.   #       フルアクションが終了すると自動で消去(Bitmap解放)されます
  414.   # 開始座標…移動開始位置。ピクチャの左上を原点とします。[X軸, Y軸]
  415.   #           既にピクチャがある場合、[]にすると開始座標はその場所になります
  416.   # 終了座標…移動終了位置。開始位置と同じ値にすると移動せず表示のみになります
  417.   #           プレーン使用の場合、開始と終了を[]にすると移動速度を維持します
  418.   # 時間…移動時間。0でピクチャを消去します
  419.   # Z軸…ピクチャのZ座標。100以上にするとウインドウより手前に表示されます
  420.   # 透明度…透明度設定。[開始時の透明度, 1フレームごとに加算される透明度]
  421.   # プレーン使用…プレーンクラス(画像がタイル状に並ぶ画像)を使用する場合の矩形。[X軸,Y軸]
  422.   #            プレーンを使用しない場合は[]
  423.   # BA反転…バックアタック時に画像反転とX座標移動を逆にするならtrue
  424.   #         プレーン使用時の画像はtrueでも反転せず、X座標移動のみ逆になります
  425.   # ピクチャファイル名…ピクチャフォルダ内のファイル名。

  426.   #―――アクション名―――    判別  番号  開始座標     終了座標   時間 Z軸   透明度    プレーン使用  BA反転 ピクチャファイル名
  427.   "カットインA1"    => ["pic",  0, [-300,   8], [ 100,   8],  30, 90, [  0, 10],        [],  true, "Actor4-1"],
  428.   "カットインA2"    => ["pic",  0, [-300,   8], [ 100,   8],  30, 90, [  0, 10],        [],  true, "Actor4-2"],
  429.   "カットインA3"    => ["pic",  0, [-300,   8], [ 100,   8],  30, 90, [  0, 10],        [],  true, "Actor5-2"],
  430.   "カットインA4"    => ["pic",  0, [-300,   8], [ 100,   8],  30, 90, [  0, 10],        [],  true, "Actor5-3"],
  431.   "カットイン終"    => ["pic",  0,          [], [ 600,   8],  30, 90, [255,  0],        [],  true, ""],
  432.   "カットイン背景始"=> ["pic",  1, [   0,   8], [ 100,   8],  10, 80, [  0, 10], [544,288],  true, "cutin_back"],
  433.   "カットイン背景終"=> ["pic",  1,          [],          [],  10, 80, [255, -7], [544,288],  true, ""],
  434.   "白フェードイン"  => ["pic",  0, [   0,   0], [   0,   0],  50,500, [  0,  6],        [], false, "white"],
  435.   "白フェードアウト"=> ["pic",  0, [   0,   0], [   0,   0],  50,500, [255, -6],        [], false, "white"],
  436.   
  437. #--------------------------------------------------------------------------
  438. # ● ステート操作
  439. #--------------------------------------------------------------------------
  440.   # 対象…[0=自分] [1=ターゲット] [2=敵全] [3=味方全] [4=敵味方全] [5=セカンドターゲット]
  441.   # 拡張…上で設定した対象をさらに拡張します [0=拡張なし] [1=ランダム1体] [2=自分を除く]
  442.   # 操作…ステートを付与するなら"+" 解除するなら"-"
  443.   # ステートID…操作するステートのIDをまとめて配列に入れます
  444.   
  445.   # ステート付与名           判別  対象 拡張 操作 ステートID
  446.   "戦闘不能付与"         => ["sta",  0,   0, "+",  [1]],
  447.   
  448. #--------------------------------------------------------------------------
  449. # ● FPS(ゲーム全体のスピード)変更  アクションの細部チェック用
  450. #--------------------------------------------------------------------------
  451.   # ゲームスピード…60がデフォルトで、低くなるほどスローになります。 
  452.   
  453.   #――アクション名――   判別  ゲームスピード
  454.   "スロー再生"   => ["fps",  15],
  455.   "通常再生"     => ["fps",  60],
  456.   
  457. #--------------------------------------------------------------------------
  458. # ● バトラー画像変更  バトラー画像の参照先ファイルを変更します
  459. #--------------------------------------------------------------------------
  460.   # 維持…アクターの場合、戦闘後も変更を維持するならtrue
  461.   # インデックス…アクターの場合、歩行グラのどの矩形かを設定します
  462.   #          [0][1][2][3]
  463.   #          [4][5][6][7]
  464.   #
  465.   # ファイル名…変更する画像ファイル名。アクターはCharactersフォルダ、
  466.   #         エネミーはBattlersフォルダを参照します
  467.   # 顔グラ…アクターの場合、戦闘後の顔グラも変更するなら[顔グラインデックス, ファイル名]
  468.   #        変更しないなら[]
  469.   
  470.   #―――アクション名―――      判別     維持  インデックス  ファイル名        顔グラ
  471.   "オオカミに変身"    => ["change", false,    0,    "$辛德蕾拉", [0, "辛德蕾拉"]],

  472. #--------------------------------------------------------------------------
  473. # ● スキル派生  アクションを中断し、別のスキルに派生させます
  474. #--------------------------------------------------------------------------
  475.   # 習得…派生するスキルが未修得でも実行可能ならtrue
  476.   # コスト条件…派生するスキルのコストが足りなくても実行可能ならtrue
  477.   # スキルID…派生するスキルID
  478.   
  479.   #―――アクション名―――    判別   習得  コスト条件  スキルID
  480.   "多段攻撃に派生"   => ["der",  true,  false,   130],

  481. #--------------------------------------------------------------------------
  482. # ● サウンドの演奏  BGM・BGS・SEを鳴らします
  483. #--------------------------------------------------------------------------
  484.   # 種別…効果音は"se"  BGMは"bgm"  BGSは"bgs"
  485.   # ピッチ…ピッチ。50~150まで指定できます。100がデフォルトです
  486.   # 音量…ボリューム。50~150まで指定できます。100がデフォルトです
  487.   # ファイル名…再生するファイル名。""にするとBGM、BGSを変えずに各種設定可能。
  488.   
  489.   #――アクション名――     判別    種別  ピッチ  音量  ファイル名
  490.   "Bow1"          => ["sound",  "se", 100,  80, "Bow1"],
  491.   
  492. #--------------------------------------------------------------------------
  493. # ● ムービーの再生  ogvファイルのムービーを再生します
  494. #--------------------------------------------------------------------------
  495.   # ファイル名…再生するムービーファイル名。Moviesフォルダを参照します
  496.   
  497.   #――アクション名――          判別     ファイル名
  498.   "死亡フラグムービー" => ["movie", "sample1"],
  499.   
  500. #--------------------------------------------------------------------------
  501. # ● ゲームスイッチ(サイドビュー専用スイッチ)の操作
  502. #--------------------------------------------------------------------------
  503.   # IDがプラスでゲームスイッチ、マイナスでサイドビュー専用スイッチの操作になります
  504.   #
  505.   # ON番号…ONにするスイッチIDをまとめて配列に入れます
  506.   # OFF番号…OFFにするスイッチIDをまとめて配列に入れます
  507.   #
  508.   #――アクション名――       判別     ON番号   OFF番号   
  509.   "スイッチNo1/ON"  => ["switch",  [ 1],   []],
  510.   "背景を宇宙に変更"=> ["switch",  [-4],   []],
  511.   "背景宇宙を解除"  => ["switch",    [],   [-4]],
  512.   "魔方陣ON"        => ["switch",  [-5],   []],
  513.   "魔方陣OFF"       => ["switch",    [],   [-5]],
  514.   
  515. #--------------------------------------------------------------------------
  516. # ● ゲーム変数の操作
  517. #--------------------------------------------------------------------------
  518.   # 変数No…何番の変数を操作するか
  519.   # 操作…[0=代入] [1=加算] [2=減算] [3=乗算] [4=除算] [5=剰余]
  520.   # オペランド…演算の対象となる数値を指定します。マイナスにすると、その数字の
  521.   #          絶対値の変数Noに格納されている数値が演算の対象となります
  522.   #
  523.   # ――アクション名――     判別     変数No  操作  オペランド
  524.   "変数No1/+1"     => ["variable",   1,     1,     1],
  525.   
  526. #--------------------------------------------------------------------------
  527. # ● 条件分岐 (ゲームスイッチ) 条件を設定し、アクションを分岐させます
  528. #--------------------------------------------------------------------------
  529.   # スイッチNo…何番のスイッチを参照するか。マイナスでサイドビュー専用スイッチを操作します
  530.   # 条件…ONならtrue、OFFならfalse
  531.   # 分岐…条件を満たした場合の分岐処理。満たさない場合はその逆の処理がされます
  532.   #       [0=次のアクションを実行] [1=次のアクションをキャンセル] [2=フルアクション終了]
  533.   #
  534.   #―――アクション名―――       判別  スイッチNo  条件  分岐
  535.   "スイッチNo1=ONで実行" => ["n_1",   1,   true,   0],
  536.   
  537. #--------------------------------------------------------------------------
  538. # ● 条件分岐 (ゲーム変数)
  539. #--------------------------------------------------------------------------
  540.   # 変数No…何番の変数を参照するか
  541.   # 数値…条件となる数字を入れます。マイナスでその絶対値の変数に格納された数値を参照します
  542.   # 条件…参照した変数が条件の数字と比べて…[0=同値] [1=少ない] [2=多い]
  543.   # 分岐…条件を満たした場合の分岐処理。満たさない場合はその逆の処理がされます
  544.   #       [0=次のアクションを実行] [1=次のアクションをキャンセル] [2=フルアクション終了]
  545.   #
  546.   #―――アクション名―――       判別  変数No 数値  条件  分岐
  547.   "変数No1=1で実行"      => ["n_2",   1,    1,    0,    0],

  548. #--------------------------------------------------------------------------
  549. # ● 条件分岐 (ステート)
  550. #--------------------------------------------------------------------------
  551.   # 対象…条件を参照する対象 [0=自分] [1=ターゲット] [2=敵全体] [3=味方全体] [4=敵味方全体] [5=セカンドターゲット]
  552.   # ステートID…何番のステートを条件にするか
  553.   # 条件…[0=付加している] [1=付加していない]
  554.   # 人数…上の条件となる必要人数。条件対象がグループの場合、0でグループ全員の数になります
  555.   # 分岐…条件を満たした場合の分岐処理。満たさない場合はその逆の処理がされます
  556.   #       [0=次のアクションを実行] [1=次のアクションをキャンセル] [2=フルアクション終了]
  557.   #
  558.   #―――アクション名―――       判別  対象  ステートID 条件  人数  分岐
  559.   "死亡確認"             => ["n_3",   1,    1,    0,     1,   1],

  560. #--------------------------------------------------------------------------
  561. # ● 条件分岐 (スキル)
  562. #--------------------------------------------------------------------------
  563.   # 対象…条件を参照する対象 [0=自分] [1=ターゲット] [2=敵全体] [3=味方全体] [4=敵味方全体] [5=セカンドターゲット]
  564.   # スキルID…何番のスキルを条件にするか
  565.   # 条件…[0=使える] [1=使えない]
  566.   # 人数…上の条件となる必要人数。条件対象がグループの場合、0でグループ全員の数になります
  567.   # 分岐…条件を満たした場合の分岐処理。満たさない場合はその逆の処理がされます
  568.   #       [0=次のアクションを実行] [1=次のアクションをキャンセル] [2=フルアクション終了]
  569.   #
  570.   #―――アクション名―――       判別  対象 スキルID  条件  人数  分岐
  571.   "強撃使用可限定"       => ["n_4",  0,   80,    0,    1,   0],

  572. #--------------------------------------------------------------------------
  573. # ● 条件分岐 (パラメータ)
  574. #--------------------------------------------------------------------------
  575.   # 対象…条件を参照する対象 [0=自分] [1=ターゲット] [2=敵全体] [3=味方全体] [4=敵味方全体] [5=セカンドターゲット]
  576.   # 種別…どのパラメータを条件にするか
  577.   #       [1=Lv] [2=最大HP] [3=最大MP] [4=HP] [5=MP] [6=TP] [7=攻撃力]
  578.   #       [8=防御力] [9=魔法力] [10=魔法防御] [11=敏捷性] [12=運]
  579.   #
  580.   # 数値…条件となる数字を入れます。マイナスで最大値からの割合%に(HP・MP・TP限定)
  581.   # 条件…参照したパラメータが条件の数字と比べて…[0=同じ] [1=少ない] [2=多い]
  582.   # 人数…上の条件となる必要人数。条件対象がグループの場合、0でグループ全員の数になります
  583.   # 分岐…条件を満たした場合の分岐処理。満たさない場合はその逆の処理がされます
  584.   #       [0=次のアクションを実行] [1=次のアクションをキャンセル] [2=フルアクション終了]
  585.   #
  586.   #―――アクション名―――       判別  対象  種別  数値  条件  人数  分岐
  587.   "HP50%以上で実行"      => ["n_5",  0,    4,  -50,    2,    1,   0],

  588. #--------------------------------------------------------------------------
  589. # ● 条件分岐 (装備)
  590. #--------------------------------------------------------------------------
  591.   # 対象…条件を参照する対象 [0=自分] [1=ターゲット] [2=敵全体] [3=味方全体] [4=敵味方全体] [5=セカンドターゲット]
  592.   # 種類…条件となる装備の種類 [0=武器] [1=防具]
  593.   # 装備ID…上の種類のアイテムID。IDは一括して配列[]に入れます。
  594.   #         マイナスで武器(防具)タイプを参照します
  595.   # 条件…[0=装備している] [1=装備していない]
  596.   # 人数…上の条件となる必要人数。条件対象がグループの場合、0でグループ全員の数になります
  597.   # 分岐…条件を満たした場合の分岐処理。満たさない場合はその逆の処理がされます
  598.   #       [0=次のアクションを実行] [1=次のアクションをキャンセル] [2=フルアクション終了]
  599.   #
  600.   #―――アクション名―――       判別  対象  種類     ID   条件  人数  分岐
  601.   "ハンドアクス限定"     => ["n_6",  0,    0,    [1],    0,    1,   0],
  602.   "拳限定"               => ["n_6",  0,    0,   [-2],    0,    1,   0],
  603.   "拳除外"               => ["n_6",  0,    0,   [-2],    0,    1,   1],
  604.   "弓限定"               => ["n_6",  0,    0,   [-6],    0,    1,   0],
  605.   "弓除外"               => ["n_6",  0,    0,   [-6],    0,    1,   1],
  606.   "拳弓除外"             => ["n_6",  0,    0,[-2,-6],    0,    1,   1],
  607.   
  608. #--------------------------------------------------------------------------
  609. # ● 条件分岐 (スクリプト) 
  610. #--------------------------------------------------------------------------
  611.   # 分岐…条件を満たした場合の分岐処理。満たさない場合はその逆の処理がされます
  612.   #       [0=次のアクションを実行] [1=次のアクションをキャンセル] [2=フルアクション終了]
  613.   # スクリプト…trueかfalseを返すスクリプトを入れます
  614.   #
  615.   #―――アクション名―――       判別   分岐  スクリプト
  616.   "50%の確率で実行"      => ["n_7",   0,  "rand(100) < 50"],
  617.   "アクター限定"         => ["n_7",   0,  "@battler.actor?"],
  618.   "アクターID1限定"      => ["n_7",   0,  "@battler.actor? && @battler.actor_id == 1"],
  619.   "アクターID2限定"      => ["n_7",   0,  "@battler.actor? && @battler.actor_id == 2"],
  620.   "アクターID6限定"      => ["n_7",   0,  "@battler.actor? && @battler.actor_id == 6"],
  621.   "アクターID7限定"      => ["n_7",   0,  "@battler.actor? && @battler.actor_id == 7"],
  622.   "エネミー限定"         => ["n_7",   0,  "[email protected]?"],
  623.   "エネミー中止"         => ["n_7",   2,  "[email protected]?"],
  624.   "二刀流限定"           => ["n_7",   0,  "@battler.dual_wield?"],
  625.   
  626. #--------------------------------------------------------------------------
  627. # ● セカンドターゲット操作
  628. #--------------------------------------------------------------------------
  629.   # セカンドターゲットとは、通常のターゲットとは別の独立したターゲット情報です
  630.   # 何も操作しない場合、通常ターゲットと同じ対象がセットされています
  631.   #
  632.   # 対象…[0=自分] [1=ターゲット] [2=敵全体] [3=味方全体] [4=敵味方全体] [5=セカンドターゲット]
  633.   #
  634.   # INDEX…対象をパーティのインデックス(並び順)で絞込みます INDEX = [インデックス, 判別]
  635.   #        インデックス…パーティのインデックス数値
  636.   #        判別…数値の条件 [0=絞込まない] [1=そのインデックスが対象に] [2=そのインデックスを排除]
  637.   #
  638.   # ID…対象をアクター(エネミー)IDで絞込むならIDの数字を入れる。0で絞込まない
  639.   #     マイナスにするとその絶対値のIDが排除条件になります
  640.   #
  641.   # ステート…対象を現在付加しているステートIDで絞込むならステートIDの数字を入れる。0で絞込まない
  642.   #       マイナスにすると付加していないことが条件になります
  643.   #
  644.   # スキル…対象を使用可能なスキルIDで絞込むならスキルIDの数字を入れる。0で絞込まない
  645.   #      マイナスにすると使用不可能が条件になります
  646.   #
  647.   # パラメータ…対象のパラメータを条件に絞込みます パラメータ = [種別, 数値, 判別]
  648.   #         種別…[0=絞込まない] [1=Lv] [2=最大HP] [3=最大MP] [4=HP] [5=MP] [6=TP]
  649.   #               [7=攻撃力] [8=防御力] [9=魔法力] [10=魔法防御] [11=敏捷性] [12=運]
  650.   #         数値…種別で決定した数値を入れる。マイナスで最大値からの割合%に(HP・MP・TP限定)
  651.   #         判別…数値の条件 [0=同じ] [1=少ない] [2=多い]
  652.   #
  653.   # 装備…対象の装備物を条件に絞込みます。アクター限定 装備 = [種類, ID]
  654.   #       種類…[0=武器] [1=防具]
  655.   #       ID…装備種別の条件となるアイテムIDを配列[]に入れます。0で絞込まない
  656.   #           マイナスで武器(防具)タイプを参照します
  657.   #
  658.   # 拡張…上で設定した対象をさらに拡張します [0=拡張なし] [1=ランダム1体]  [2=自分を除く]
  659.   # 操作…[0=操作しない] [1=通常ターゲットをセカンドターゲットに変更]  [2=セカンドターゲット・通常ターゲットを初期化]
  660.   
  661.   #――アクション名――      判別 対象  INDEX  ID  ステート スキル   パラメータ      装備   拡張 操作
  662.   "自分以外味方全員"=> ["s_t", 3, [ 0, 0], 0,  0,   0, [ 0, 0, 0], [ 0,[0]],  2,   0],
  663.   "全域化"          => ["s_t", 4, [ 0, 0], 0, -1,   0, [ 0, 0, 0], [ 0,[0]],  0,   1],
  664.   
  665. #--------------------------------------------------------------------------
  666. # ● コモンイベントの呼び出し  
  667. #--------------------------------------------------------------------------
  668.   # ID…コモンイベントID
  669.   # ウエイト…イベント実行中はアクションをストップさせるならtrue
  670.   #
  671.   #―――アクション名―――    判別    ID   ウエイト
  672.   "コモンNo1"       => ["common",  1,  true],
  673.   
  674. #--------------------------------------------------------------------------
  675. # ● スクリプトの操作  
  676. #--------------------------------------------------------------------------
  677.   # スクリプトを実行。サンプルのp = 1 の部分にevalで実行するスクリプトを入れます
  678.   #
  679.   #―――アクション名―――  
  680.   "テストスクリプト" => ["p = 1 "],
  681.   
  682. #--------------------------------------------------------------------------
  683. # ● その他 設定項目なしでフルアクションに入れます
  684. #--------------------------------------------------------------------------
  685.   # 戦闘アニメ消去…表示中の戦闘アニメを消去します(飛ばしアニメは消去されません)
  686.   # 強制戦闘終了…戦闘を強制終了させます
  687.   # 画面固定…ゲーム画面を固定させます。トランジション前に入れます
  688.   # ダメージアニメ…スキルアニメを再生し、それが終わる直前にダメージをPOPさせます
  689.   # 反転…画像と武器アニメを反転します。再度反転させるかフルアクション終了で反転解除
  690.   # 武器消去…表示中の武器画像を消去します
  691.   # 武器消去解除…消去した武器画像を表示します
  692.   # 敵コラプス…崩御エフェクトを実行します。主に敵の戦闘不能に使用します
  693.   # コラプス禁止…対象のHPが0になった場合のコラプスを禁止します。連続攻撃開始時などに
  694.   # コラプス禁止解除…コラプス禁止を解除します。連続攻撃の終わりなどに。入れなくても行動終了時にコラプス許可になります
  695.   # 待機キャンセル…待機アクションを行わないようになります。戦闘イベントでの演出などに
  696.   # 待機キャンセル解除…待機キャンセルを解除し、待機アクションを行います
  697.   # 初期位置変更…元の座標(初期位置)を現在の座標に変更します
  698.   # 初期位置変更解除…初期位置変更で変更した座標を元に戻します
  699.   # 強制…この次にある行動をターゲットに強制させます(リアクション)
  700.   # 強制2…この次にある行動をセカンドターゲットに強制させます(リアクション)
  701.   # 次の行動者へ…戦闘行動が終了したとみなし、直後に次のキャラが行動開始します
  702.   # 個別開始…複数ターゲット攻撃を個別で処理する場合の、リピート行動開始の目印です
  703.   # 個別終了…複数ターゲット攻撃を個別で処理する場合の、リピート行動終了の目印です
  704.   # ループ開始…"ループ開始"と"ループ終了"の間のアクションを永遠に繰り返します
  705.   # ループ終了…"ループ開始"と"ループ終了"の間のアクションを永遠に繰り返します
  706.    
  707.   #―――アクション名―――       判別
  708.   "戦闘アニメ消去"    => ["anime_off"],
  709.   "強制戦闘終了"      => ["battle_end"],
  710.   "画面固定"          => ["graphics_freeze"],
  711.   "ダメージアニメ"    => ["damage_anime"],
  712.   "反転"              => ["mirror"],
  713.   "武器消去"          => ["weapon_off"],
  714.   "武器消去解除"      => ["weapon_on"],
  715.   "敵コラプス"        => ["normal_collapse"],
  716.   "コラプス禁止"      => ["no_collapse"],
  717.   "コラプス禁止解除"  => ["collapse"],
  718.   "待機キャンセル"    => ["non_motion"],
  719.   "待機キャンセル解除"=> ["non_motion_cancel"],
  720.   "初期位置変更"      => ["change_base_position"],
  721.   "初期位置変更解除"  => ["set_base_position"],
  722.   "強制"              => ["force_action"],
  723.   "強制2"             => ["force_action2"],
  724.   "次の行動者へ"      => ["next_battler"],
  725.   "個別開始"          => ["individual_start"],
  726.   "個別終了"          => ["individual_end"],
  727.   "ループ開始"        => ["loop_start"],
  728.   "ループ終了"        => ["loop_end"],
  729.   
  730. #--------------------------------------------------------------------------
  731. # ● ウエイト 次のアクションに行かずに待つ時間
  732. #--------------------------------------------------------------------------
  733.   # アクションで数値のみの場合、それがそのままウエイト時間となります。
  734.   # (例) "20" …次のアクションに行かずに20フレーム待つ
  735.   #
  736.   # 数値をマイナスにするとランダムウエイトとなり、その数値の0~絶対値の間で
  737.   # ランダムにウエイト時間が決定されます。
  738.   # (例) "-20" …ランダムで0~20フレーム待つ
  739.    
  740. #--------------------------------------------------------------------------
  741. # ● ショートカットコマンド
  742. #--------------------------------------------------------------------------
  743.   # 通常は設定したアクション名をフルアクション配列に入れて行動を作りますが
  744.   # アクション設定せず直接コマンドを記述して、作業を短縮できるものがあります
  745.   # 頻繁に利用するものはこのショートカットを使うと登録アクションが増えないのでお勧めです
  746.   #
  747.   # [戦闘アニメ]
  748.   # (例) "anime(20)" …データベース20番のアニメをターゲットに実行(ウエイトあり)
  749.   # (例) "anime(20,false)" …データベース20番のアニメをターゲットに実行(ウエイトなし)
  750.   # (例) "anime_me(20)" …データベース20番のアニメを自分に実行(ウエイトあり)
  751.   # (例) "anime_me(20,false)" …データベース20番のアニメを自分に実行(ウエイトなし)
  752.   #
  753.   # [ウエイト インデックスディレイ] ※パーティインデックスでウエイトにディレイを掛けます
  754.   # (例) "delay(12)"…インデックス1番のウエイトが0フレーム 2番のウエイトが12フレーム  3番のウエイトが24フレーム…
  755.   #
  756.   # [効果音(SE)]
  757.   # (例) "se('Bow1')" …ファイル名がBow1のSEを鳴らします
  758.   # (例) "se('Bow1',50)" …ファイル名がBow1のSEをピッチ50で鳴らします
  759.   #
  760.   # [ターゲットへアクション(フルアクション)を強制]
  761.   # (例) "target('ダメージのけぞり')" …ターゲットに"ダメージのけぞり"のアクションを強制します
  762.   # (例) "target2('被ダメージ')" …セカンドターゲットに"被ダメージ"のフルアクションを強制します
  763.    
  764.   }  
  765. #==============================================================================
  766. # ■ フルアクション
  767. #------------------------------------------------------------------------------
  768. #  アクションを組み合わせたもので、行動は左側から順番に行われます。
  769. #   フルアクションの中にフルアクションを入れることも可能で、アクションのパーツ化や
  770. #   条件分岐の次にフルアクションを置く等の使い方が便利です
  771. #==============================================================================
  772.   FULLACTION = {
  773.   
  774.   # ―――待機系―――
  775.   "通常待機"        => ["待機"],
  776.   "通常待機固定"    => ["待機固定WT"],
  777.   "ピンチ待機"      => ["状態異常/ピンチ","ピンチ色調","待機","待機"],
  778.   "防御待機"        => ["待機固定WT"],
  779.   "毒待機"          => ["状態異常/汎用","毒色調","待機","待機","エネミー限定","80"],
  780.   "睡眠待機"        => ["状態異常/睡眠","エネミー限定","40","エネミー中止","倒れ","倒れ"],
  781.   "汎用状態異常待機"=> ["状態異常/汎用","汎用状態異常色調","待機","待機","エネミー限定","80"],
  782.   "様子見"          => ["待機","60"],
  783.   "戦闘不能"        => ["倒れ"],
  784.   
  785.   # ――システム系――
  786.   "戦闘開始味方"    => ["戦闘前の味方配置","delay(4)","座標リセット左向き"],
  787.   "味方退場"        => ["退場"],
  788.   "逃走"            => ["対象アニメ","カメラリセット","delay(4)","退場"],
  789.   "敵逃走"          => ["対象アニメ","逃走透明","退場"],
  790.   "逃走失敗"        => ["カメラリセット","delay(4)","逃走途中","一歩後移動","座標リセット左向き"],
  791.   "コマンド入力"    => ["戦闘アニメ消去","コマンド入力移動"],
  792.   "コマンド入力終了"=> ["座標リセット早"],
  793.   "コマンド後防御"  => ["待機固定WT"],
  794.   "コマンド後魔法"  => ["待機固定","魔法詠唱中"],
  795.   "コマンド後特技"  => ["待機固定","特技待機中"],
  796.   "防御"            => ["対象アニメ","待機固定WT"],
  797.   "回避"            => ["アクター限定","右1回転","一歩後ジャンプ","10","座標リセット左向き"],
  798.   "盾ガード"        => ["se('Evasion2')","盾防御","60"],
  799.   "身代わり開始"    => ["敵中移動早","初期位置変更"],
  800.   "身代わり終了"    => ["初期位置変更解除","座標リセット左向き"],
  801.   "被身代わり開始"  => ["一歩後移動","一歩後移動","待機固定WT"],
  802.   "被身代わり終了"  => ["座標リセット左向き"],
  803.   "勝利ポーズ振り"  => ["戦闘アニメ消去","勝利ジャンプ武器","勝利ジャンプ着地","120"],
  804.   "勝利ポーズバク転"=> ["戦闘アニメ消去","右1回転","勝利ジャンプ","拳限定","武器拳突き","拳除外","武器振りR","120"],
  805.   "閃き"            => ["anime_me(119)","20"],
  806.   
  807.   # ―リアクション系―
  808.   "被ダメージ"      => ["ダメージのけぞり","座標リセット左向き"],
  809.   "被ダメージ大"    => ["シェイク中","ダメージのけぞり大","座標リセット左向き"],
  810.   "縦揺れ"          => ["縦揺れ01","縦揺れ02","縦揺れ01","縦揺れ02","縦揺れ01","縦揺れ02"],
  811.   
  812.   # ―ショートカット系(他のフルアクションから呼び出されるパーツ)―
  813.   "斬り"            => ["武器振りR","対象アニメ武器","10"],
  814.   "拳"              => ["武器拳突き","対象アニメ武器","10"],
  815.   "弓"              => ["Bow1","弓撃ち","矢発射","9"],
  816.   "攻撃"            => ["拳限定","拳","弓限定","弓","拳弓除外","斬り"],
  817.   "通常攻撃始め"    => ["敵前移動","コラプス禁止","個別開始","二刀流限定","二刀左"],
  818.   "通常攻撃終わり"  => ["死亡確認","対象アニメ武器WT","個別終了","コラプス禁止解除","次の行動者へ","座標リセットカーブ"],
  819.   "二刀左"          => ["武器振りL","対象アニメ武器LWT"],
  820.   "特技発動"        => ["一歩前移動","特技","特技発動アニメ"],
  821.   "魔法発動"        => ["一歩前移動","魔法","魔法発動アニメ"],
  822.   "カットイン"      => ["カットイン背景始","カットイン分岐","70","カットイン終","カットイン背景終","20"],
  823.   "カットイン分岐"  => ["アクターID1限定","カットインA1","アクターID2限定","カットインA2","アクターID6限定","カットインA3","アクターID7限定","カットインA4"],
  824.   "死亡フラグ動画"  => ["白フェードイン","50","死亡フラグムービー","白フェードアウト","50"],
  825.   "背景を宇宙に"    => ["ズームアウト","se('Blind',70)","背景のみ暗転","自分以外味方全員","強制2","透明化","透明化","40","背景を宇宙に変更","色調初期化"],
  826.   "背景宇宙解除"    => ["カメラリセット","背景のみ暗転","target2('透明化解除WT')","透明化解除","40","背景宇宙を解除","色調初期化"],
  827.   "魔方陣表示"      => ["se('Blind',70)","画面固定","魔方陣ON","サークル"],
  828.   "魔方陣消去"      => ["40","画面固定","魔方陣OFF","サークル"],
  829.   
  830.   # ――通常攻撃系――
  831.   "通常攻撃"        => ["通常攻撃始め","待機固定","通常攻撃終わり"],
  832.   "斬り攻撃"        => ["通常攻撃始め","死亡確認","武器振りR","通常攻撃終わり"],
  833.   "拳攻撃"          => ["通常攻撃始め","武器拳突き","通常攻撃終わり"],
  834.   "突き攻撃"        => ["通常攻撃始め","武器突き","通常攻撃終わり"],
  835.   "弓攻撃"          => ["一歩前移動","コラプス禁止","個別開始","Bow1","弓撃ち",
  836.                         "矢発射WT","個別終了","コラプス禁止解除","座標リセット"],
  837.   
  838.   # ――スキル系―――
  839.   "汎用スキル"      => ["特技発動","特技","ダメージアニメ","座標リセット"],
  840.   "汎用魔法"        => ["魔法発動","魔法","ダメージアニメ","座標リセット"],
  841.   
  842.   "水鉄砲"          => ["特技発動","武器振りR","水鉄砲発射","座標リセット"],
  843.   "武器投げ"        => ["特技発動","Bow1","武器振りR","6","待機固定","武器投げ開始","武器投げ戻し","座標リセット"],
  844.   "カットイン攻撃"  => ["特技発動","カットイン","攻撃","座標リセット"],
  845.   "ムービー攻撃"    => ["特技発動","待機固定","死亡フラグ動画","通常攻撃始め","武器振りR","通常攻撃終わり"],
  846.   "オオカミ変身"    => ["特技発動","anime(110,false)","オオカミに変身","待機固定","120","座標リセット"],
  847.   "5回攻撃"         => ["特技発動","コラプス禁止","弓除外","敵前移動","攻撃","攻撃","攻撃","攻撃","攻撃","コラプス禁止解除","座標リセット"],
  848.   "スキル派生"      => ["武器投げ","多段攻撃に派生","斬り攻撃"],
  849.   "背景変更攻撃"    => ["魔法発動","武器振りR","背景を宇宙に","ダメージアニメ","背景宇宙解除","座標リセット"],
  850.   "ピクチャ攻撃"    => ["魔法発動","魔方陣表示","武器振りR","anime(80,false)","60","シェイク大","対象アニメ","魔方陣消去","座標リセット"],
  851.   "暗転攻撃"        => ["特技発動","自分とターゲット以外暗転","se('Laser',150)",
  852.                         "残像ON","敵前移動","anime(35,false)","敵後移動","対象アニメ",
  853.                         "武器振りR","20","色調初期化","座標リセット","残像OFF"],
  854.   "空中攻撃"        => ["特技発動","Bow1","一歩前ジャンプ","敵前移動",
  855.                         "待機固定","左1回転","anime(1,false)","叩き付け",
  856.                         "対象アニメ","シェイク中","強制","縦揺れ","20",
  857.                         "一歩後ジャンプ","座標リセット"],
  858.   
  859.   # ――アイテム系―――
  860.   "アイテム使用"     => ["敵前移動","待機固定","対象アニメWT","座標リセット左向き"],
  861.   
  862.   
  863.   
  864.   }
  865.   
  866.   
  867.   
  868. #==============================================================================
  869. # ■ バトルプログラム
  870. #------------------------------------------------------------------------------
  871. #  バトルシーンの演出を時間管理します
  872. #  制御はゲームスイッチ・サイドビュー専用スイッチで行います
  873. #==============================================================================
  874.   BATTLE_PROGRAM = {
  875.   
  876. #--------------------------------------------------------------------------
  877. # ● スイッチの制御  スイッチの時間操作で、演出をプログラムします
  878. #--------------------------------------------------------------------------
  879.   # スイッチ…プログラム実行合図となるゲームスイッチ番号。マイナスでサイドビュー専用スイッチ番号になります
  880.   #       OFFにすると、実行中のプログラムは中止されます
  881.   #       サイドビュー専用スイッチは戦闘終了時に初期化(全てOFFに)されます
  882.   #       イベントで戦闘前にサイドビュー専用スイッチを操作する場合、イベントスクリプトで
  883.   #       $sv_camera.switches[1] = true と入れてください
  884.   #       (1は操作するスイッチ番号、ONにするならtrue OFFにするならfalse)
  885.   #
  886.   # ON番号…ONにするするゲームスイッチ番号。マイナスでサイドビュー専用スイッチ番号になります
  887.   #         番号は一括して配列に入れます。
  888.   #         例…[1,2,-5] ゲームスイッチ1番2番とサイドビュー専用スイッチ5番がON
  889.   #
  890.   # OFF番号…OFFにするするゲームスイッチ番号。マイナスでサイドビュー専用スイッチ番号になります
  891.   #          操作しない場合は[]と入れます
  892.   #
  893.   # 時間…上のスイッチ操作を実行するまでの時間(単位は1フレーム)
  894.   #       例えば100とした場合、プログラム開始から100フレーム後にスイッチ操作が実行されます
  895.   #       [参考値] 30秒…1800 1分…3600 5分…18000 10分…36000 1時間…216000
  896.   #
  897.   # ランダム幅…時間に加算されるランダム幅。単位は1フレーム
  898.   #          例えば時間300、ランダム幅300だと最終的に300~600フレームの時間になります
  899.    
  900.   #――プログラム名――       判別   スイッチ   ON番号  OFF番号   時間  ランダム幅
  901.   "背景を砦に"       => ["switch",  -1,   [-2],      [],  1200,     0],
  902.   "背景を海に"       => ["switch",  -2,   [-3],      [],  2400,     0],
  903.   
  904. #--------------------------------------------------------------------------
  905. # ● SE/BGM/BGSの演奏  
  906. #--------------------------------------------------------------------------
  907.   # スイッチ…実行合図となるゲームスイッチ番号。マイナスはサイドビュー専用スイッチ。
  908.   #
  909.   # 種別…SEの操作なら"se"  BGMの操作なら"bgm"  BGSの操作なら"bgs"
  910.   #
  911.   # ピッチ…ピッチ。50~150まで指定できます。100がデフォルトです
  912.   # 音量…ボリューム。50~150まで指定できます。100がデフォルトです
  913.   # ファイル名…再生するファイル名。""にするとBGM、BGSを変えずに各種設定可能。
  914.    
  915.   #――プログラム名――      判別   スイッチ  種別  ピッチ  音量  ファイル名
  916.   "潮騒"            => ["sound",  -1, "bgs",  100,  80, "Sea"],
  917.   
  918. #--------------------------------------------------------------------------
  919. # ● 背景の制御  画像変更や自動スクロールを行います
  920. #--------------------------------------------------------------------------
  921.   # スイッチ…実行合図となるスイッチ番号
  922.   #
  923.   # No.…操作する背景のナンバー。1が床背景、2が壁背景(遠景)になります
  924.   #
  925.   # スクロール速度…背景の移動する速度。[X軸, Y軸]
  926.   #            単位は100フレームあたりに移動するピクセル数になります
  927.   #            高速で移動させる場合は、1000単位の数値が目安です
  928.   #
  929.   # BA反転…バックアタック時に背景のX座標スクロールを逆にするならtrue 画像は反転しません
  930.   #
  931.   # 画像…背景画像を変更する場合、ファイル名を入れます。変更しない場合は""
  932.   #       床背景はBattlebacks1フォルダ、壁背景はBattlebacks2フォルダから参照します
  933.   #       変更する背景設定は、変更前のものを引き継ぎます
  934.   #
  935.   # 繋ぎ画像…背景スクロール時、背景変更を自然に見せるための繋ぎ画像ファイル名
  936.   #           スクロール途中で背景変更が行われた場合、スクロールが終わってから変更が行われます
  937.   #           性質上、斜めスクロールには対応していません
  938.   #
  939.   # 割込み…この背景が表示されている時に別の背景制御が割り込んできた場合、
  940.   #         割込みを許可するならtrue(繋ぎ画像表示中はスクロールなしの背景だけが割込みます)
  941.   #         割込みを許可しないならfalse(別の背景制御は保留され、この背景が消えた時に変更されます)
  942.    
  943.   #――プログラム名――      判別   スイッチ No.   スクロール速度   BA反転   画像       繋ぎ画像     割込み
  944.   "遠景右移動"      => ["scroll", -1,  1, [  40,    0],  true,  "",                 "",  true],
  945.   "海背景3に変更"   => ["scroll", -2,  1, [ 120,    0],  true,  "Sea_ex03", "Sea_ex02",  true],
  946.   "海背景4に変更"   => ["scroll", -3,  1, [  40,    0],  true,  "Sea_ex01", "Sea_ex04",  true],
  947.   "宇宙に変更1"     => ["scroll", -4,  1, [   0,    0],  true,  "DarkSpace",        "", false],
  948.   "宇宙に変更2"     => ["scroll", -4,  2, [   0,    0],  true,  "DarkSpace",        "", false],
  949.   
  950. #--------------------------------------------------------------------------
  951. # ● 周期ピクチャ 周期的にタイル状のピクチャを操作します。風や巨大魔方陣などに
  952. #--------------------------------------------------------------------------
  953.   # スイッチ…実行合図となるゲームスイッチ番号
  954.   # No.…操作するピクチャの番号。ピクチャは何枚も表示できます
  955.   # 移動速度…100フレームあたりに移動するピクチャの速度。[X軸, Y軸] 0で背景スクロールと同期化
  956.   # 期間…このプログラムを行う期間。単位は1フレーム。0にすると時間無制限でループ
  957.   #
  958.   # 透明操作…ピクチャの透明度操作。[開始透明度, 100フレームあたりに加算する透明度]
  959.   #           透明度が255になると開始透明度まで戻り、それを繰り返します
  960.   # Z軸…ピクチャのZ座標。100以上にするとウインドウより手前に表示されます
  961.   # シェイク許可…シェイクアクションの揺れと連動するならtrue
  962.   # BA反転…バックアタック時にピクチャのX座標移動を逆にするならtrue 画像は反転しません
  963.   # ファイル名…ピクチャのファイル名。Picturesフォルダを参照します
  964.    
  965.   #――プログラム名――  判別   スイッチ  No.    移動速度   期間    透明操作   Z軸  シェイク許可 BA反転 ファイル名
  966.   "風"            => ["kpic", -1,  0, [  500,    0],    0, [ 255,   0],  90,   false,  true, "back_wind"],
  967.   "魔方陣"        => ["kpic", -5,  1, [    0,    0],    0, [ 255,   0],  90,    true,  true, "magic_square01"],
  968.   
  969. #--------------------------------------------------------------------------
  970. # ● 周期SE 周期的に効果音を鳴らします。雷鳴や潮騒などに
  971. #--------------------------------------------------------------------------
  972.   # スイッチ…実行合図となるゲームスイッチ番号
  973.   # 周期…効果音を鳴らす周期。単位は1フレーム。この間隔で効果音が定期的に鳴ります
  974.   # ランダム幅…周期に加算されるランダム幅。単位は1フレーム
  975.   #
  976.   # ピッチ…ピッチ。50~150まで指定できます。100がデフォルトです
  977.   # 音量…ボリューム。50~150まで指定できます。100がデフォルトです
  978.   # 開始実行…プログラム実行直後に周期を待たず鳴らすならtrue
  979.   # ファイル名…再生するファイル名。
  980.    
  981.   #――プログラム名――      判別   スイッチ 周期  ランダム幅  ピッチ 音量 開始実行 ファイル名
  982.   "カモメ"         => ["keep_se", -1,  400,    100,  150,  60,  false,  "Crow"],
  983.   "カモメ2"        => ["keep_se", -1,  300,    200,  140,  45,   true,  "Crow"],
  984.   
  985. #--------------------------------------------------------------------------
  986. # ● 周期シェイク 周期的に画面を揺らします
  987. #--------------------------------------------------------------------------
  988.   # スイッチ…実行合図となるゲームスイッチ番号。これがONになることで開始されます
  989.   # 周期…画面を揺らす周期。単位は1フレーム
  990.   # ランダム幅…周期に加算されるランダム幅。単位は1フレーム
  991.   #
  992.   # 方向…揺れる方向 [横,縦] 数値が大きいほど揺れも大きくなります
  993.   # 速度…揺れの速度。小さいほど早く揺れます
  994.   # 時間…揺れの続く時間。揺れ幅は時間と共に少しずつ弱まっていきます
  995.   # 開始実行…プログラム実行直後に周期を待たず揺らすならtrue
  996.    
  997.   #――プログラム名――     判別    スイッチ 周期 ランダム幅   方向   速度  時間 開始実行
  998.   "船の揺れ"       => ["keep_sk", -1,  130,    0,  [  0, 4], 80,  120,  true],
  999.   
  1000. #--------------------------------------------------------------------------
  1001. # ● 周期色調変更 周期的に画面の色調を変更します
  1002. #--------------------------------------------------------------------------
  1003.   # スイッチ…実行合図となるゲームスイッチ番号。これがONになることで開始されます
  1004.   # 周期…色調変更させる周期。単位は1フレーム
  1005.   # ランダム幅…周期に加算されるランダム幅。単位は1フレーム
  1006.   #
  1007.   # 対象…色調変更の対象 [0=背景] [1=敵全] [2=味方全] [3=敵味方全] [4=全て]
  1008.   # 色調レベル…[ R, G, B, アルファ(色の強さ), 変更時間, ※戻り]
  1009.   #             ※戻り…変更完了してから元の色に戻す時間。戻さないなら0
  1010.   # 開始実行…プログラム実行直後に周期を待たず色調変更するならtrue
  1011.   
  1012.   #――プログラム名――       判別   スイッチ 周期 ランダム幅  対象     R,   G,   B, アルファ  時間 戻り  開始実行
  1013.   "雷光"             => ["keep_c",  0,  300,  100,     4,  [ 255, 255, 255, 255,   8,   8],  true],
  1014.   "エマージェンシー" => ["keep_c",  0,  150,    0,     4,  [ 255,   0,   0, 100,  40,  40],  true],
  1015.    
  1016. }
  1017. #==============================================================================
  1018. # ■ カメラ設定
  1019. #------------------------------------------------------------------------------
  1020. #  アクションとは別にバトルシーンの各ポイントでカメラワークを行います
  1021. #  アクション名でカメラが動くため、名前は変えないようにしてください
  1022. #==============================================================================
  1023.   BATTLE_CAMERA = {
  1024. #--------------------------------------------------------------------------
  1025. # ● カメラワーク  画面のズームやスクロールを行います
  1026. #--------------------------------------------------------------------------
  1027.   # 対象…移動やズームの対象 [2=敵全] [3=味方全] [4=敵味方全] [6=画面]
  1028.   # 調整座標…カメラ座標の最終地点微調整 [X軸(プラスで画面→), Y軸(プラスで画面↓)]
  1029.   # 時間…カメラワークにかける時間
  1030.   # ズーム…カメラのズーム率(%)。100でズームなし。
  1031.   
  1032.   #――アクション名――       判別    対象  調整座標   ズーム  時間
  1033.   "ターン開始前"   => ["camera",   6, [  40,   0],  95, 40],
  1034.   "ターン開始後"   => ["camera",   6, [   0,   0], 100, 40],
  1035.   "戦闘終了時"     => ["camera",   6, [ 100,   0], 100, 50],
  1036.   

  1037. }  
  1038. end

复制代码
  1. #==============================================================================
  2. # ■ Sideview
  3. #------------------------------------------------------------------------------
  4. #  サイドビューバトラーを管理するクラスです。
  5. #==============================================================================
  6. class SideView
  7. #--------------------------------------------------------------------------
  8. # ● 公開インスタンス変数 
  9. #--------------------------------------------------------------------------
  10. attr_accessor :x # 画面X座標
  11. attr_accessor :y # 画面Y座標
  12. attr_accessor :z # 画面Z座標
  13. attr_accessor :h # 高さ座標
  14. attr_accessor :j # ジャンプ座標
  15. attr_accessor :c # カーブ座標
  16. attr_accessor :ox # 横原点
  17. attr_accessor :oy # 縦原点
  18. attr_accessor :oy_adjust # 縦原点補正
  19. attr_accessor :angle # 回転角度
  20. attr_accessor :zoom_x # 横の拡大率
  21. attr_accessor :zoom_y # 縦の拡大率
  22. attr_accessor :pattern_w # セル横位置(矩形内)
  23. attr_accessor :pattern_h # セル縦位置(矩形内)
  24. attr_accessor :sx # セル横位置(画像全体)
  25. attr_accessor :sy # セル縦位置(画像全体)
  26. attr_accessor :pattern_type # セル更新タイプ
  27. attr_accessor :pattern_time # セル更新間隔
  28. attr_accessor :graphic_name # バトラー画像ファイル名
  29. attr_accessor :graphic_file_index # バトラー画像ファイル名インデックス
  30. attr_accessor :graphic_index # バトラー画像インデックス
  31. attr_accessor :cw # セル横矩形
  32. attr_accessor :ch # セル縦矩形
  33. attr_accessor :shadow_visible # 影表示
  34. attr_accessor :weapon_visible # 武器表示

  35. attr_accessor :wait # 次の動作待ち時間
  36. attr_accessor :weapon_index # 表示中の武器画像インデックス配列
  37. attr_accessor :weapon_end # 武器アニメ終了フラグ
  38. attr_accessor :force_action # 強制アクション
  39. attr_accessor :target_battler # ターゲットバトラー情報
  40. attr_accessor :second_targets # セカンドターゲット情報
  41. attr_accessor :m_a_targets # アニメ飛ばしターゲット情報
  42. attr_accessor :individual_targets # 個別処理ターゲットバトラー情報
  43. attr_accessor :effect_data # エフェクトデータ
  44. attr_accessor :anime_id # アニメID配列
  45. attr_accessor :anime_move_id # 飛ばしアニメID配列
  46. attr_accessor :mirror # 反転フラグ
  47. attr_accessor :opacity # 透明度
  48. attr_accessor :opacity_data # 透明度操作情報
  49. attr_accessor :set_damage # バトルシーンでのダメージ処理
  50. attr_accessor :m_a_data # アニメ飛ばし情報
  51. attr_accessor :m_a_starter # アニメ飛ばし開始ターゲット情報
  52. attr_accessor :action_end # バトルシーンでの行動終了
  53. attr_accessor :damage_anime_data # ダメージ戦闘アニメのデータ
  54. attr_accessor :anime_no_mirror # 戦闘アニメの反転禁止フラグ
  55. attr_accessor :anime_horming # 戦闘アニメのホーミングフラグ
  56. attr_accessor :anime_camera_zoom # 戦闘アニメがカメラに合わせて拡大縮小するか
  57. attr_accessor :anime_plus_z # 戦闘アニメZ座標補正
  58. attr_accessor :derivation_skill_id # スキル派生ID
  59. attr_accessor :immortal # 不死身フラグ
  60. attr_accessor :mirage # 残像データ
  61. attr_accessor :balloon_data # ふきだしデータ
  62. attr_accessor :timing # 別バトラーからのタイミングデータ
  63. attr_accessor :timing_targets # タイミングデータを渡す別バトラー
  64. attr_accessor :color_set # 色調変更データ
  65. attr_accessor :color # 色調データ
  66. attr_accessor :change_up # 画像変更フラグ
  67. attr_accessor :hit # 被攻撃回数
  68. attr_accessor :add_state # 何度も付加ステートの表示を防ぐフラグ
  69. attr_accessor :counter_id # カウンター時のスキルID
  70. attr_accessor :reflection_id # 魔法反射時のアニメID
  71. attr_accessor :result_damage # ターン終了時のHP変動データ
  72. attr_accessor :active # 行動権
  73. attr_accessor :anime_off # 戦闘アニメ消去
  74. attr_accessor :command_action # コマンドアクションフラグ

  75. attr_accessor :base_x # 初期位置 X座標
  76. attr_accessor :base_y # 初期位置 Y座標
  77. attr_accessor :base_h # 初期位置 高さ座標
  78. attr_accessor :max_pattern_w # セルの横分割数
  79. attr_accessor :max_pattern_h # セルの縦分割数

  80. attr_reader :collapse # コラプスフラグ
  81. attr_reader :picture # ピクチャ表示フラグ
  82. #--------------------------------------------------------------------------
  83. # ● オブジェクト初期化
  84. #--------------------------------------------------------------------------
  85. def initialize(battler)
  86. [url=home.php?mod=space&uid=133701]@battler[/url] = battler
  87. reset
  88. end
  89. #--------------------------------------------------------------------------
  90. # ● 初期化
  91. #--------------------------------------------------------------------------
  92. def reset
  93. @x = 0
  94. @y = 0
  95. @z = 0
  96. @h = 0
  97. @j = 0
  98. @c = 0
  99. [url=home.php?mod=space&uid=271873]@jump[/url] = []
  100. @curve = []
  101. @ox = 0
  102. @oy = 0
  103. @oy_adjust = 0
  104. @z_plus = 0
  105. @move_time = 0
  106. [url=home.php?mod=space&uid=124954]@Angle[/url] = 0
  107. @angle_time = 0
  108. @zoom_x = 1
  109. @zoom_y = 1
  110. @zoom_time = 0
  111. @pattern_w = 0
  112. @pattern_h = 0
  113. @sx = 0
  114. @sy = 0
  115. @pattern_type = 0
  116. @pattern_time = 0
  117. @pattern_rest_time = 0
  118. @graphic_name = ""
  119. @graphic_file_index = ""
  120. @graphic_index = 0
  121. @cw = 0
  122. @ch = 0
  123. @shadow_visible = false
  124. @weapon_visible = true

  125. [url=home.php?mod=space&uid=36110]@Wait[/url] = 0
  126. @weapon_index = []
  127. @weapon_end = true
  128. @full_action = []
  129. @action = []
  130. @force_action = ""
  131. @target_battler = []
  132. @second_targets = []
  133. @individual_targets = []
  134. @m_a_targets = []
  135. @effect_data = []
  136. @anime_id = []
  137. @anime_move_id = []
  138. @opacity = 255
  139. @opacity_data = []
  140. @set_damage = false
  141. @m_a_data = []
  142. @m_a_starter = []
  143. @action_end = false
  144. @damage_anime_data = []
  145. @anime_no_mirror = false
  146. @anime_horming = false
  147. @anime_camera_zoom = false
  148. @anime_plus_z = true
  149. @derivation_skill_id = 0
  150. @immortal = false
  151. @mirage = []
  152. @play_data = []
  153. @balloon_data = []
  154. @picture = false
  155. @timing = []
  156. @timing_targets = []
  157. @color_set = []
  158. [url=home.php?mod=space&uid=10453]@color[/url] = []
  159. @change_up = false
  160. @non_motion = false
  161. @graphics_change = false
  162. @hit = 0
  163. @add_state = []
  164. @collapse = false
  165. @counter_id = 0
  166. @reflection_id = 0
  167. @result_damage = [0,0]
  168. @active = false
  169. @anime_off = false
  170. @command_action = false

  171. @base_x = 0
  172. @base_y = 0
  173. @base_z = 0
  174. @base_h = 0
  175. @max_pattern_w = 0
  176. @max_pattern_h = 0
  177. @pattern_kind = 0
  178. @pattern_count = 0
  179. @move_time = 0
  180. [url=home.php?mod=space&uid=111303]@mirror[/url] = false
  181. @battler.set_graphic(@pre_change_data[0], @pre_change_data[1], @pre_change_data[2], @pre_change_data[3]) if @pre_change_data != nil
  182. @pre_change_data = nil
  183. end
  184. #--------------------------------------------------------------------------
  185. # ● セットアップ
  186. #--------------------------------------------------------------------------
  187. def setup(bitmap_width, bitmap_height, first_action_flag)
  188. reset if first_action_flag
  189. set_data
  190. set_base_position if !@graphics_change
  191. set_graphics(bitmap_width, bitmap_height)
  192. set_target
  193. setup_graphics_change if @graphics_change
  194. first_battler_anime_set if first_action_flag
  195. end
  196. #--------------------------------------------------------------------------
  197. # ● バトラーデータ取得
  198. #--------------------------------------------------------------------------
  199. def set_data
  200. return if @battler == nil
  201. if @battler.actor?
  202. @graphic_name = @battler.character_name
  203. @graphic_index = @battler.character_index
  204. else
  205. @graphic_name = @battler.battler_name
  206. @graphic_index = 0
  207. end
  208. @max_pattern_w = max_pattern[0]
  209. @max_pattern_h = max_pattern[1]
  210. end
  211. #--------------------------------------------------------------------------
  212. # ● ベース座標をセット data = [X軸, Y軸, H軸] moment_set…瞬間配置
  213. #--------------------------------------------------------------------------
  214. def set_base_position(moment_set = true)
  215. mirroring_reset
  216. if @battler.actor?
  217. data = N03::ACTOR_POSITION[@battler.index].dup
  218. @base_x = data[0] * 100 if !@mirror
  219. @base_x = (Graphics.width - data[0]) * 100 if @mirror
  220. else
  221. data = [@battler.screen_x, @battler.screen_y, 0].dup
  222. @base_x = data[0] * 100 if !$sv_camera.mirror
  223. @base_x = (Graphics.width - data[0]) * 100 if $sv_camera.mirror
  224. end
  225. @base_y = data[1] * 100
  226. @base_h = data[2] * 100
  227. @base_z = @y
  228. return if !moment_set
  229. @x = @base_x
  230. @y = @base_y
  231. @z = @base_z
  232. end
  233. #--------------------------------------------------------------------------
  234. # ● グラフィックデータ取得
  235. #--------------------------------------------------------------------------
  236. def set_graphics(bitmap_width, bitmap_height)
  237. sign = @graphic_name[/^[\!\$]./]
  238. if sign && sign.include?('$')
  239. @cw = bitmap_width / @max_pattern_w
  240. @ch = bitmap_height / @max_pattern_h
  241. elsif @max_pattern_w == 1 && @max_pattern_h == 1
  242. @cw = bitmap_width
  243. @ch = bitmap_height
  244. else
  245. @cw = bitmap_width / (@max_pattern_w * 4)
  246. @ch = bitmap_height / (@max_pattern_h * 2)
  247. end
  248. @ox = @cw / 2
  249. @oy = @ch
  250. @sx = (@graphic_index % 4 * @max_pattern_w + @pattern_w) * @cw
  251. @sy = (@graphic_index / 4 * @max_pattern_h + @pattern_h) * @ch
  252. end
  253. #--------------------------------------------------------------------------
  254. # ● ターゲットをセット
  255. #--------------------------------------------------------------------------
  256. def set_target(target = nil)
  257. @target_battler = target
  258. @target_battler = [@battler] if target == nil
  259. @second_targets = @target_battler
  260. end
  261. #--------------------------------------------------------------------------
  262. # ● 画像変更用のセットアップ
  263. #--------------------------------------------------------------------------
  264. def setup_graphics_change
  265. @graphics_change = false
  266. @sx = (@graphic_index % 4 * @max_pattern_w + @pattern_w) * @cw
  267. @sy = (@graphic_index / 4 * @max_pattern_h + @pattern_h) * @ch
  268. end
  269. #--------------------------------------------------------------------------
  270. # ● 戦闘開始時の待機アニメ画像データ取得
  271. #--------------------------------------------------------------------------
  272. def first_battler_anime_set
  273. loop do
  274. update
  275. break if @action_data[0] == "motion"
  276. break if @action_data[0] == "move" && @action_data[8] != ""
  277. break if @full_action == []
  278. end
  279. start_action(first_action) if @battler.movable?
  280. end
  281. #--------------------------------------------------------------------------
  282. # ● アクション開始
  283. #--------------------------------------------------------------------------
  284. def start_action(kind = nil)
  285. return if @event_fix && $game_troop.interpreter.running?
  286. # ウェイト中の場合キャンセル
  287. return @wait -= 1 if @wait > 0 && kind == nil
  288. action_setup if kind != nil
  289. set_action(kind)
  290. @action = kind if @action == nil
  291. # 行動配列が無い場合は行動終了処理へ移行
  292. action_terminate if @action == nil
  293. # 次のアクション決定
  294. @action_data = N03::ACTION[@action]
  295. next_action
  296. end
  297. #--------------------------------------------------------------------------
  298. # ● 行動パラメータの初期化
  299. #--------------------------------------------------------------------------
  300. def action_setup
  301. @event_fix = false
  302. @set_damage = false
  303. @action_end = false
  304. @balloon_data = []
  305. @loop_act = []
  306. angle_reset
  307. zoom_reset
  308. opacity_reset
  309. @curve = []
  310. @c = 0
  311. convert_jump
  312. end
  313. #--------------------------------------------------------------------------
  314. # ● 行動終了処理
  315. #--------------------------------------------------------------------------
  316. def action_terminate
  317. @mirage = [] if @mirage_end
  318. mirroring_reset
  319. @picture = false
  320. @individual_targets = []
  321. action_setup
  322. # 待機アクションへ移行
  323. stand_by_action if !@non_motion
  324. # 戦闘行動のアクティブ権を終了
  325. next_battler
  326. end
  327. #--------------------------------------------------------------------------
  328. # ● 新しいアクション内容の決定
  329. #--------------------------------------------------------------------------
  330. def set_action(kind = nil)
  331. full_act = N03::FULLACTION[kind]
  332. @full_action = full_act.dup if full_act != nil
  333. @action = @full_action.shift
  334. # 参照したアクションがフルアクションであれば全体のアクションを統合
  335. full_act2 = N03::FULLACTION[@action]
  336. @full_action = full_act2.dup + @full_action if full_act2 != nil
  337. end
  338. #--------------------------------------------------------------------------
  339. # ● 次のアクションへ
  340. #--------------------------------------------------------------------------
  341. def next_action
  342. @wait = 0
  343. # ショートカット確認
  344. eval(@action) if @action != nil && @action_data == nil && N03::FULLACTION[@action] == nil
  345. # ウエイト設定
  346. @wait = @action.to_i if @wait == 0 && @action_data == nil
  347. @wait = rand(@wait.abs + 1) if @wait < 0
  348. # アクション開始
  349. action_play
  350. end
  351. #--------------------------------------------------------------------------
  352. # ● 待機アクションへ移行
  353. #--------------------------------------------------------------------------
  354. def stand_by_action
  355. # 通常待機に
  356. stand_by_act = normal
  357. # HPが1/4でピンチアクションに
  358. stand_by_act = pinch if @battler.hp <= @battler.mhp / 4
  359. # ステートチェック
  360. stand_by_act = state(@battler.states[0].id) if @battler.states[0] != nil && state(@battler.states[0].id) != nil
  361. # コマンドチェック
  362. stand_by_act = command if @command_action && command != nil
  363. set_action(stand_by_act)
  364. @action = stand_by_act if @action == nil
  365. end
  366. #--------------------------------------------------------------------------
  367. # ● 強制アクション開始
  368. #--------------------------------------------------------------------------
  369. def start_force_action
  370. return if @active
  371. start_action(@force_action)
  372. @force_action = ""
  373. end
  374. #--------------------------------------------------------------------------
  375. # ● アクション追加
  376. #--------------------------------------------------------------------------
  377. def add_action(kind)
  378. @full_action.push(kind)
  379. end
  380. #--------------------------------------------------------------------------
  381. # ● アクションの挿入
  382. #--------------------------------------------------------------------------
  383. def unshift_action(kind)
  384. @full_action.unshift(kind)
  385. end
  386. #--------------------------------------------------------------------------
  387. # ● フレーム更新
  388. #--------------------------------------------------------------------------
  389. def update
  390. # アクション開始
  391. start_action
  392. # 強制アクション開始
  393. start_force_action if @force_action != ""
  394. # アニメパターン更新
  395. update_pattern
  396. # 移動更新
  397. update_move
  398. # 回転更新
  399. update_angle if @angle_time != 0
  400. # 拡大縮小更新
  401. update_zoom if @zoom_time != 0
  402. # 透明度更新
  403. update_opacity if @opacity_data != []
  404. end
  405. #--------------------------------------------------------------------------
  406. # ● アニメパターン更新
  407. #--------------------------------------------------------------------------
  408. def update_pattern
  409. return @pattern_rest_time -= 1 if @pattern_rest_time != 0
  410. return if @max_pattern_w == 1 && @max_pattern_h == 1
  411. @pattern_rest_time = @pattern_time
  412. # 再生開始・終了セル位置を取得
  413. if @pattern_kind > 0 # 通常再生中
  414. @pattern_start = 0
  415. @pattern_end = @max_pattern_w - 1
  416. elsif @pattern_kind < 0 # 逆転再生中
  417. @pattern_start = @max_pattern_w - 1
  418. @pattern_end = 0
  419. end
  420. # 片道の再生が終了
  421. @pattern_count += 1 if @pattern_w == @pattern_end && @pattern_kind != 0
  422. # ループ処理
  423. case @pattern_type.abs
  424. when 1,3 # 片道
  425. @pattern_kind = 0 if @pattern_count != 0 && @pattern_type == 1
  426. @pattern_kind = 0 if @pattern_count != 0 && @pattern_type == -1
  427. @pattern_kind = 1 if @pattern_count != 0 && @pattern_type == 3
  428. @pattern_kind = -1 if @pattern_count != 0 && @pattern_type == -3
  429. @pattern_w = @pattern_start - @pattern_kind if @pattern_count != 0 && @pattern_type.abs == 3
  430. @pattern_count = 0
  431. when 2,4 # 往復
  432. @pattern_kind = -1 if @pattern_count == 1 && @pattern_type == 2
  433. @pattern_kind = 1 if @pattern_count == 1 && @pattern_type == -2
  434. @pattern_kind = 0 if @pattern_count == 2 && @pattern_type == 2
  435. @pattern_kind = 0 if @pattern_count == 2 && @pattern_type == -2
  436. @pattern_kind = -1 if @pattern_count == 1 && @pattern_type == 4
  437. @pattern_kind = 1 if @pattern_count == 1 && @pattern_type == -4
  438. @pattern_kind = 1 if @pattern_count == 2 && @pattern_type == 4
  439. @pattern_kind = -1 if @pattern_count == 2 && @pattern_type == -4
  440. @pattern_count = 0 if @pattern_count == 2
  441. end
  442. # セル更新
  443. @pattern_w += 1 * @pattern_kind
  444. @sx = (@graphic_index % 4 * @max_pattern_w + @pattern_w) * @cw
  445. end
  446. #--------------------------------------------------------------------------
  447. # ● 移動の更新
  448. #--------------------------------------------------------------------------
  449. def update_move
  450. @z = @y / 100 + @z_plus
  451. return if @move_time == 0
  452. target_position_set if @horming_move
  453. @x = (@x * (@move_time - 1) + @target_x) / @move_time
  454. @y = (@y * (@move_time - 1) + @target_y) / @move_time
  455. @h = (@h * (@move_time - 1) + @target_h) / @move_time if @move_h != nil
  456. @c += @curve[@move_time - 1] if @curve[@move_time - 1] != nil
  457. @j += @jump[@move_time - 1] if @jump[@move_time - 1] != nil
  458. @move_time -= 1
  459. convert_jump if @move_time == 0
  460. end
  461. #--------------------------------------------------------------------------
  462. # ● 移動目標の更新
  463. #--------------------------------------------------------------------------
  464. def target_position_set
  465. target_position = N03.get_targets_position(@move_targets, @horming_move)
  466. @target_x = target_position[0] + @move_x
  467. @target_y = target_position[1] + @move_y
  468. @target_h = target_position[2] + @move_h if @move_h != nil
  469. end
  470. #--------------------------------------------------------------------------
  471. # ● 回転更新
  472. #--------------------------------------------------------------------------
  473. def update_angle
  474. @angle += @angling
  475. @angle_time -= 1
  476. return if @angle_time != 0
  477. return angle_reset if @angle_data[4] == 0
  478. angling(@angle_data) if @angle_data[4] == 2
  479. end
  480. #--------------------------------------------------------------------------
  481. # ● 拡大縮小更新
  482. #--------------------------------------------------------------------------
  483. def update_zoom
  484. @zoom_x += @zooming_x
  485. @zoom_y += @zooming_y
  486. @zoom_time -= 1
  487. return if @zoom_time != 0
  488. return zoom_reset if @zoom_data[4] == 0
  489. zooming(@zoom_data) if @zoom_data[4] == 2
  490. end
  491. #--------------------------------------------------------------------------
  492. # ● 透明度更新
  493. #--------------------------------------------------------------------------
  494. def update_opacity
  495. @opacity += @opacity_data[2]
  496. @opacity_data[0] -= 1
  497. return if @opacity_data[0] != 0
  498. return if !@opacity_data[5]
  499. @opacity_data[2] *= -1
  500. @opacity_data[0] = @opacity_data[1]
  501. end
  502. #--------------------------------------------------------------------------
  503. # ● アクション実行
  504. #--------------------------------------------------------------------------
  505. def action_play
  506. return if @action_data == nil
  507. action = @action_data[0]
  508. # バトラー反転の場合
  509. return mirroring if action == "mirror"
  510. # 残像の場合
  511. return mirage_set if action == "mirage"
  512. # 回転の場合
  513. return angling if action == "angle"
  514. # 拡大縮小の場合
  515. return zooming if action == "zoom"
  516. # 透明度操作の場合
  517. return set_opacity if action == "opacity"
  518. # バトラーアニメの場合
  519. return battler_anime if action == "motion"
  520. # 移動の場合
  521. return move if action == "move"
  522. # 武器アニメの場合
  523. return weapon_anime([@action_data]) if action == "wp"
  524. # アニメ飛ばしの場合
  525. return move_anime if action == "m_a"
  526. # 戦闘シーン通信の場合(コラプス)
  527. return set_play_data if action == "collapse" or action == "no_collapse"
  528. # データベース戦闘アニメ表示の場合
  529. return battle_anime if action == "anime"
  530. # カメラワークの場合
  531. return camera if action == "camera"
  532. # 画面のシェイクの場合
  533. return shake if action == "shake"
  534. # 画面色調変更の場合
  535. return color_effect if action == "color"
  536. # トランジションの場合
  537. return transition if action == "ts"
  538. # ふきだしアニメ表示の場合
  539. return balloon_anime if action == "balloon"
  540. # ピクチャ表示の場合
  541. return picture_set if action == "pic"
  542. # ステート操作の場合
  543. return state_set if action == "sta"
  544. # FPS変更の場合
  545. return fps if action == "fps"
  546. # バトラー画像変更の場合
  547. return graphics_change if action == "change"
  548. # スキル派生の場合
  549. return derivating_skill if action == "der"
  550. # BGM/BGS/SE演奏の場合
  551. return sound if action == "sound"
  552. # ムービー再生の場合
  553. return movie if action == "movie"
  554. # ゲームスイッチ操作の場合
  555. return switches if action == "switch"
  556. # ゲーム変数操作の場合
  557. return variable if action == "variable"
  558. # 条件分岐(ゲームスイッチ)の場合
  559. return nece_1 if action == "n_1"
  560. # 条件分岐(ゲーム変数)の場合
  561. return nece_2 if action == "n_2"
  562. # 条件分岐(ステート)の場合
  563. return nece_3 if action == "n_3"
  564. # 条件分岐(スキル)の場合
  565. return nece_4 if action == "n_4"
  566. # 条件分岐(パラメータ)の場合
  567. return nece_5 if action == "n_5"
  568. # 条件分岐(装備)の場合
  569. return nece_6 if action == "n_6"
  570. # 条件分岐(スクリプト)の場合
  571. return nece_7 if action == "n_7"
  572. # セカンドターゲット操作の場合
  573. return second_targets_set if action == "s_t"
  574. # コモンイベント呼び出しの場合
  575. return call_common_event if action == "common"
  576. # 戦闘アニメ消去の場合
  577. return @anime_off = true if action == "anime_off"
  578. # 強制戦闘終了の場合
  579. return BattleManager.process_abort if action == "battle_end"
  580. # 画面固定の場合
  581. return Graphics.freeze if action == "graphics_freeze"
  582. # ダメージアニメの場合
  583. return damage_anime if action == "damage_anime"
  584. # 武器消去の場合
  585. return @weapon_visible = false if action == "weapon_off"
  586. # 武器消去解除の場合
  587. return @weapon_visible = true if action == "weapon_on"
  588. # 待機キャンセルの場合
  589. return @non_motion = true if action == "non_motion"
  590. # 待機キャンセル解除の場合
  591. return @non_motion = false if action == "non_motion_cancel"
  592. # 初期位置変更の場合
  593. return change_base_position if action == "change_base_position"
  594. # 初期位置変更解除の場合
  595. return set_base_position(false) if action == "set_base_position"
  596. # 強制アクションの場合
  597. return force_act if action == "force_action"
  598. # 強制アクションの場合 (セカンドターゲット)
  599. return force_act2 if action == "force_action2"
  600. # 個別開始の場合
  601. return individual_start if action == "individual_start"
  602. # 個別終了の場合
  603. return individual_end if action == "individual_end"
  604. # ループ開始の場合
  605. return loop_start if action == "loop_start"
  606. # ループ終了の場合
  607. return loop_end if action == "loop_end"
  608. # 自分のみ更新の場合
  609. return only_action_on if action == "only_action_on"
  610. # 自分のみ更新解除の場合
  611. return only_action_off if action == "only_action_off"
  612. # 次の行動者へ移行の場合
  613. return next_battler if action == "next_battler"
  614. # 画像変更フラグの場合
  615. return set_change if action == "set_change"
  616. # スクリプト操作の場合
  617. return eval(@action_data[0])
  618. end
  619. #--------------------------------------------------------------------------
  620. # ● バトラー反転実行
  621. #--------------------------------------------------------------------------
  622. def mirroring
  623. @mirror = !@mirror
  624. end
  625. #--------------------------------------------------------------------------
  626. # ● 反転初期化
  627. #--------------------------------------------------------------------------
  628. def mirroring_reset
  629. @mirror = false
  630. mirroring if [email protected]? && N03::ENEMY_MIRROR
  631. mirroring if $sv_camera.mirror
  632. end
  633. #--------------------------------------------------------------------------
  634. # ● 残像実行
  635. #--------------------------------------------------------------------------
  636. def mirage_set
  637. @mirage = @action_data.dup
  638. @mirage_end = @mirage[3]
  639. @mirage = [] if @mirage[1] == 0
  640. end
  641. #--------------------------------------------------------------------------
  642. # ● 回転実行
  643. #--------------------------------------------------------------------------
  644. def angling(data = @action_data)
  645. @angle_data = data.dup
  646. @oy = @ch / 2
  647. @oy_adjust = @ch * 50
  648. @angle_time = data[1]
  649. start_angle = data[2] * N03.mirror_num(@mirror)
  650. end_angle = data[3] * N03.mirror_num(@mirror)
  651. # 時間が0以下なら即座に最終角度へ
  652. @angle_time = 1 if @angle_time <= 0
  653. # 回転時間から1フレームあたりの角度を出す
  654. @angling = (end_angle - start_angle) / @angle_time
  655. # 割り切れない余りを初期角度に
  656. @angle = (end_angle - start_angle) % @angle_time + start_angle
  657. end
  658. #--------------------------------------------------------------------------
  659. # ● 回転初期化
  660. #--------------------------------------------------------------------------
  661. def angle_reset
  662. @oy = @ch
  663. @angle = @angle_time = @oy_adjust = 0
  664. end
  665. #--------------------------------------------------------------------------
  666. # ● 拡大縮小実行
  667. #--------------------------------------------------------------------------
  668. def zooming(data = @action_data)
  669. @zoom_data = data.dup
  670. @zoom_time = data[1]
  671. start_zoom_x = data[2][0]
  672. start_zoom_y = data[2][1]
  673. end_zoom_x = data[3][0]
  674. end_zoom_y = data[3][1]
  675. # 時間が0以下なら即座に最終サイズへ
  676. @zoom_time = 1 if @zoom_time <= 0
  677. # 拡大縮小時間から1フレームあたりの拡大縮小率を出す
  678. @zooming_x = (end_zoom_x - start_zoom_x) / @zoom_time
  679. @zooming_y = (end_zoom_y - start_zoom_y) / @zoom_time
  680. # 開始サイズに
  681. @zoom_x = start_zoom_x
  682. @zoom_y = start_zoom_y
  683. end
  684. #--------------------------------------------------------------------------
  685. # ● 拡大縮小初期化
  686. #--------------------------------------------------------------------------
  687. def zoom_reset
  688. @zoom_x = @zoom_y = 1
  689. @zoom_time = 0
  690. end
  691. #--------------------------------------------------------------------------
  692. # ● バトラー透明度操作
  693. #--------------------------------------------------------------------------
  694. def set_opacity
  695. data = @action_data.dup
  696. @opacity = data[2]
  697. opacity_move = (data[3] - data[2])/ data[1]
  698. @opacity_data = [data[1], data[1], opacity_move, data[4], data[5], data[6]]
  699. @wait = data[1] if data[7]
  700. @wait *= 2 if data[6] && data[7]
  701. end
  702. #--------------------------------------------------------------------------
  703. # ● 透明度操作初期化
  704. #--------------------------------------------------------------------------
  705. def opacity_reset
  706. @opacity = 255
  707. @opacity = 0 if @battler.hidden?
  708. @opacity_data = []
  709. end
  710. #--------------------------------------------------------------------------
  711. # ● バトラーアニメ実行
  712. #--------------------------------------------------------------------------
  713. def battler_anime(anime_data = nil)
  714. anime_data = @action_data.dup if anime_data == nil
  715. @graphic_file_index = anime_data[1] if !graphic_fix
  716. @pattern_h = anime_data[2]
  717. @pattern_w = anime_data[3]
  718. @pattern_h = 0 if @max_pattern_w == 1
  719. @pattern_w = 0 if @max_pattern_h == 1
  720. @pattern_type = anime_data[4]
  721. @pattern_time = anime_data[5]
  722. @pattern_rest_time = anime_data[5]
  723. @pattern_count = 0
  724. @pattern_kind = 1
  725. @pattern_kind = -1 if @pattern_type < 0
  726. @pattern_kind = 0 if @pattern_type == 0
  727. @sx = (@graphic_index % 4 * @max_pattern_w + @pattern_w) * @cw
  728. @sy = (@graphic_index / 4 * @max_pattern_h + @pattern_h) * @ch
  729. @z_plus = anime_data[6]
  730. @wait = set_anime_wait if anime_data[7]
  731. @shadow_visible = anime_data[8]
  732. weapon_anime(anime_data)
  733. end
  734. #--------------------------------------------------------------------------
  735. # ● アニメウエイト計算
  736. #--------------------------------------------------------------------------
  737. def set_anime_wait
  738. if @pattern_type > 0
  739. pattern_time_a = @max_pattern_w - @pattern_w.abs
  740. elsif @pattern_type < 0
  741. pattern_time_a = @pattern_w.abs + 1
  742. else
  743. return @pattern_time if @pattern_type == 0
  744. end
  745. case @pattern_type
  746. when 1,-1, 3,-3
  747. return pattern_time_a * @pattern_time
  748. when 2,-2, 4,-4
  749. return pattern_time_a * @pattern_time + (@max_pattern_w - 2) * @pattern_time
  750. end
  751. end
  752. #--------------------------------------------------------------------------
  753. # ● 移動実行
  754. #--------------------------------------------------------------------------
  755. def move
  756. @move_targets = N03.get_targets(@action_data[1].abs, @battler)
  757. return if @move_targets == []
  758. @move_targets = [@battler] if @action_data[1].abs == 7
  759. @move_x = @action_data[2] * 100 * N03.mirror_num(@mirror)
  760. @move_y = @action_data[3] * 100
  761. @move_h = @action_data[4] * 100 if @action_data[4] != nil
  762. @move_h = nil if @action_data[4] == nil
  763. battler_anime(N03::ACTION[@action_data[8]].dup) if N03::ACTION[@action_data[8]] != nil
  764. @horming_move = true
  765. @horming_move = false if @action_data[1] < 0 or @action_data[1].abs == 7
  766. target_position_set
  767. target_position = [@target_x, @target_y, @target_z]
  768. distanse_move = @action_data[5] > 0
  769. @move_time = N03.distanse_calculation(@action_data[5].abs, target_position, [@x, @y, @z], distanse_move)
  770. @wait = @move_time
  771. curve
  772. jump
  773. @move_time = 1 if @move_time == 0
  774. @horming_move = false if !@move_targets or @move_targets.include?(@battler)
  775. update_move if @move_time == 1
  776. end
  777. #--------------------------------------------------------------------------
  778. # ● カーブ実行
  779. #--------------------------------------------------------------------------
  780. def curve
  781. @c = 0
  782. return if @action_data[6] == 0
  783. @curve = N03.parabola([@action_data[6], -@action_data[6]], @move_time, 100, 4)
  784. end
  785. #--------------------------------------------------------------------------
  786. # ● ジャンプ実行
  787. #--------------------------------------------------------------------------
  788. def jump
  789. convert_jump
  790. return if @action_data[7] == [0,0]
  791. @jump = N03.parabola(@action_data[7].dup, @move_time, 100)
  792. end
  793. #--------------------------------------------------------------------------
  794. # ● J座標(ジャンプ高度)をH座標に変換
  795. #--------------------------------------------------------------------------
  796. def convert_jump
  797. @h += @j
  798. @j = 0
  799. @jump = []
  800. end
  801. #--------------------------------------------------------------------------
  802. # ● データベース戦闘アニメ実行
  803. #--------------------------------------------------------------------------
  804. def battle_anime
  805. data = @action_data.dup
  806. targets = N03.get_targets(data[2], @battler)
  807. return if targets == []
  808. data[8] = !data[8] if @mirror
  809. @set_damage = data[5]
  810. @damage_anime_data[0] = N03.get_attack_anime_id(data[1], @battler)
  811. @damage_anime_data[1] = data[8]
  812. @damage_anime_data[2] = data[7]
  813. @damage_anime_data[3] = data[6]
  814. @damage_anime_data[4] = data[9]
  815. @wait = N03.get_anime_time(@damage_anime_data[0]) - 2 if data[4]
  816. return if @set_damage
  817. for target in targets do display_anime(targets, target, data) end
  818. end
  819. #--------------------------------------------------------------------------
  820. # ● 武器アニメ開始
  821. #--------------------------------------------------------------------------
  822. def weapon_anime(anime_data)
  823. @weapon_end = true
  824. for i in 9...anime_data.size
  825. set_effect_data(anime_data[i]) if anime_data[i] != ""
  826. end
  827. end
  828. #--------------------------------------------------------------------------
  829. # ● アニメ飛ばし開始
  830. #--------------------------------------------------------------------------
  831. def move_anime
  832. @m_a_starter = []
  833. @m_a_targets = []
  834. starters = N03.get_targets(@action_data[2], @battler)
  835. targets = N03.get_targets(@action_data[3], @battler)
  836. return if starters == [] or targets == []
  837. single_start = true if starters != nil && @action_data[2] < 0
  838. single_start = true if @action_data[1][0] != 0 && $data_animations[N03.get_attack_anime_id(@action_data[1][0], @battler)].position == 3
  839. starters = [starters[0]] if single_start
  840. single_end = true if targets != nil && @action_data[3] < 0
  841. single_end = true if @action_data[1][1] != 0 && $data_animations[N03.get_attack_anime_id(@action_data[1][1], @battler)].position == 3
  842. targets = [targets[0]] if single_end
  843. se_flag = true
  844. for starter in starters
  845. for target in targets
  846. data = @action_data.dup
  847. data[17] = se_flag
  848. @effect_data.push(data)
  849. @m_a_targets.push(target)
  850. @m_a_starter.push(starter)
  851. se_flag = false
  852. end
  853. end
  854. end
  855. #--------------------------------------------------------------------------
  856. # ● スプライトセット通信
  857. #--------------------------------------------------------------------------
  858. def set_effect_data(data = @action)
  859. action_data = N03::ACTION[data]
  860. return if action_data == nil
  861. @effect_data.push(action_data.dup)
  862. end
  863. #--------------------------------------------------------------------------
  864. # ● 戦闘シーン通信のデータを格納
  865. #--------------------------------------------------------------------------
  866. def set_play_data(data = @action_data)
  867. @play_data = data.dup
  868. end
  869. #--------------------------------------------------------------------------
  870. # ● 戦闘アニメの表示
  871. #--------------------------------------------------------------------------
  872. def display_anime(targets, target, data)
  873. return if !N03.first_of_all_screen_anime(data[1], target, targets)
  874. target.animation_id = N03.get_attack_anime_id(data[1], @battler)
  875. target.animation_mirror = data[8]
  876. target.sv.anime_horming = data[3]
  877. target.sv.anime_camera_zoom = data[6]
  878. target.sv.anime_no_mirror = data[7]
  879. target.sv.anime_plus_z = data[9]
  880. end
  881. #--------------------------------------------------------------------------
  882. # ● 戦闘アニメ拡張データの初期化
  883. #--------------------------------------------------------------------------
  884. def reset_anime_data
  885. @anime_no_mirror = false
  886. @anime_horming = false
  887. @anime_camera_zoom = false
  888. @timing_targets = []
  889. @anime_plus_z = true
  890. end
  891. #--------------------------------------------------------------------------
  892. # ● カメラワーク
  893. #--------------------------------------------------------------------------
  894. def camera
  895. data = @action_data.dup
  896. N03.camera(@battler, data)
  897. @wait = data[4] if data[5]
  898. end
  899. #--------------------------------------------------------------------------
  900. # ● 画面のシェイク
  901. #--------------------------------------------------------------------------
  902. def shake
  903. data = @action_data.dup
  904. $sv_camera.shake(data[1], data[2], data[3])
  905. @wait = data[3] if data[4]
  906. end
  907. #--------------------------------------------------------------------------
  908. # ● 画面色調変更
  909. #--------------------------------------------------------------------------
  910. def color_effect
  911. case @action_data[1]
  912. when 0,1,2,3,4,5
  913. targets = N03.get_targets(@action_data[1], @battler)
  914. when 6
  915. screen = true
  916. when 7
  917. targets = [@battler] + @target_battler
  918. when 8
  919. screen = true
  920. targets = $game_troop.members + $game_party.battle_members - [@battler]
  921. when 9
  922. screen = true
  923. targets = $game_troop.members + $game_party.battle_members - [@battler] - @target_battler
  924. when 10
  925. screen = true
  926. targets = $game_troop.members + $game_party.battle_members
  927. end
  928. return if screen == nil && targets == []
  929. for target in targets do target.sv.color_set = @action_data[2] end if targets
  930. @wait = @action_data[2][4] if @action_data[3]
  931. return if !screen
  932. $sv_camera.color_set[1] = @action_data[2]
  933. $sv_camera.color_set[2] = @action_data[2]
  934. end
  935. #--------------------------------------------------------------------------
  936. # ● トランジション
  937. #--------------------------------------------------------------------------
  938. def transition
  939. $sv_camera.perform_transition(@action_data)
  940. end
  941. #--------------------------------------------------------------------------
  942. # ● ふきだしアニメ表示
  943. #--------------------------------------------------------------------------
  944. def balloon_anime
  945. @balloon_data = @action_data.dup
  946. end
  947. #--------------------------------------------------------------------------
  948. # ● ピクチャ表示
  949. #--------------------------------------------------------------------------
  950. def picture_set
  951. @picture = true
  952. set_effect_data
  953. end
  954. #--------------------------------------------------------------------------
  955. # ● ステート操作
  956. #--------------------------------------------------------------------------
  957. def state_set
  958. targets = N03.get_targets(@action_data[1], @battler)
  959. return if targets == []
  960. case @action_data[2]
  961. when 1 ; targets = [targets[rand(targets.size)]]
  962. when 2 ; targets -= @battler if targets.include?(@battler)
  963. end
  964. for target in targets
  965. for id in @action_data[4]
  966. target.add_state(id) if @action_data[3] == "+"
  967. target.remove_state(id) if @action_data[3] == "-"
  968. end
  969. end
  970. end
  971. #--------------------------------------------------------------------------
  972. # ● FPS変更
  973. #--------------------------------------------------------------------------
  974. def fps
  975. Graphics.frame_rate = @action_data[1]
  976. start_action
  977. end
  978. #--------------------------------------------------------------------------
  979. # ● バトラー画像変更の場合
  980. #--------------------------------------------------------------------------
  981. def graphics_change
  982. @graphics_change = true
  983. return @battler.graphics_change(@action_data[3]) if [email protected]?
  984. @pre_change_data = [@battler.character_name, @battler.character_index, @battler.face_name, @battler.face_index] if @pre_change_data == nil && !@action_data[1]
  985. if @action_data[4] == []
  986. face_name = @battler.face_name
  987. face_index = @battler.face_index
  988. else
  989. face_name = @action_data[4][1]
  990. face_index = @action_data[4][0]
  991. end
  992. @battler.set_graphic(@action_data[3], @action_data[2], face_name, face_index)
  993. end
  994. #--------------------------------------------------------------------------
  995. # ● スキル派生
  996. #--------------------------------------------------------------------------
  997. def derivating_skill
  998. # 未修得スキルは派生不可なら
  999. return if !@action_data[1] && [email protected]_learn?($data_skills[@action_data[3]])
  1000. # コスト不足は派生不可なら
  1001. return if !@action_data[2] && [email protected]_cost_payable?($data_skills[@action_data[3]])
  1002. # 派生
  1003. @derivation_skill_id = @action_data[3]
  1004. # 以降のアクションをキャンセル
  1005. @full_action = []
  1006. end
  1007. #--------------------------------------------------------------------------
  1008. # ● BGM/BGS/SE演奏
  1009. #--------------------------------------------------------------------------
  1010. def sound
  1011. pitch = @action_data[2]
  1012. vol = @action_data[3]
  1013. name = @action_data[4]
  1014. case @action_data[1]
  1015. when "se"
  1016. Audio.se_play("Audio/SE/" + name, vol, pitch)
  1017. when "bgm"
  1018. # 名前指定のない場合、現在のBGMを変えないように
  1019. name = RPG::BGM.last.name if @action_data[4] == ""
  1020. Audio.bgm_play("Audio/BGM/" + name, vol, pitch)
  1021. when "bgs"
  1022. name = RPG::BGS.last.name if @action_data[4] == ""
  1023. Audio.bgs_play("Audio/BGS/" + name, vol, pitch)
  1024. end
  1025. end
  1026. #--------------------------------------------------------------------------
  1027. # ● ムービーの再生
  1028. #--------------------------------------------------------------------------
  1029. def movie
  1030. Graphics.play_movie('Movies/' + @action_data[1])
  1031. end
  1032. #--------------------------------------------------------------------------
  1033. # ● ゲームスイッチ操作
  1034. #--------------------------------------------------------------------------
  1035. def switches
  1036. for id in @action_data[1]
  1037. $game_switches[id] = true if id > 0
  1038. $sv_camera.switches[id.abs] = true if id < 0
  1039. end
  1040. for id in @action_data[2]
  1041. $game_switches[id] = false if id > 0
  1042. $sv_camera.switches[id.abs] = false if id < 0
  1043. end
  1044. $sv_camera.program_check
  1045. end
  1046. #--------------------------------------------------------------------------
  1047. # ● ゲーム変数操作
  1048. #--------------------------------------------------------------------------
  1049. def variable
  1050. # オペランドチェック
  1051. operand = @action_data[3]
  1052. operand = $game_variables[@action_data[3].abs] if @action_data[3] < 0
  1053. # 変数操作で分岐
  1054. case @action_data[2]
  1055. when 0 ; $game_variables[@action_data[1]] = operand # 代入
  1056. when 1 ; $game_variables[@action_data[1]] += operand # 加算
  1057. when 2 ; $game_variables[@action_data[1]] -= operand # 減算
  1058. when 3 ; $game_variables[@action_data[1]] *= operand # 乗算
  1059. when 4 ; $game_variables[@action_data[1]] /= operand # 除算
  1060. when 5 ; $game_variables[@action_data[1]] %= operand # 剰余
  1061. end
  1062. end
  1063. #--------------------------------------------------------------------------
  1064. # ● 条件分岐 (ゲームスイッチ)
  1065. #--------------------------------------------------------------------------
  1066. def nece_1
  1067. judgment = $game_switches[@action_data[1]] == @action_data[2] if @action_data[1] > 0
  1068. judgment = $sv_camera.switches[@action_data[1].abs] == @action_data[2] if @action_data[1] < 0
  1069. action_diverging(judgment, @action_data[3])
  1070. end
  1071. #--------------------------------------------------------------------------
  1072. # ● 条件分岐 (ゲーム変数)
  1073. #--------------------------------------------------------------------------
  1074. def nece_2
  1075. variable = $game_variables[@action_data[1]]
  1076. num = @action_data[2]
  1077. num = $game_variables[@action_data[2].abs] if num < 0
  1078. case @action_data[3]
  1079. when 0 ; judgment = variable == num
  1080. when 1 ; judgment = variable < num
  1081. when 2 ; judgment = variable > num
  1082. end
  1083. action_diverging(judgment, @action_data[4])
  1084. end
  1085. #--------------------------------------------------------------------------
  1086. # ● 条件分岐 (ステート)
  1087. #--------------------------------------------------------------------------
  1088. def nece_3
  1089. targets = N03.get_targets(@action_data[1], @battler)
  1090. return if targets == []
  1091. member_num = @action_data[4]
  1092. member_num = targets.size if @action_data[4] == 0 && targets.size > 1
  1093. hit_count = 0
  1094. miss_count = 0
  1095. for target in targets
  1096. hit_count += 1 if target.state?(@action_data[2])
  1097. miss_count += 1 if !target.state?(@action_data[2])
  1098. end
  1099. case @action_data[3]
  1100. when 0 ; judgment = hit_count >= member_num
  1101. when 1 ; judgment = miss_count >= member_num
  1102. end
  1103. action_diverging(judgment, @action_data[5])
  1104. end
  1105. #--------------------------------------------------------------------------
  1106. # ● 条件分岐 (スキル)
  1107. #--------------------------------------------------------------------------
  1108. def nece_4
  1109. targets = N03.get_targets(@action_data[1], @battler)
  1110. return if targets == []
  1111. member_num = @action_data[4]
  1112. member_num = targets.size if @action_data[4] == 0 && targets.size > 1
  1113. hit_count = 0
  1114. miss_count = 0
  1115. for target in targets
  1116. hit_count += 1 if target.skill_learn?($data_skills[@action_data[2]]) && target.skill_conditions_met?($data_skills[@action_data[2]])
  1117. miss_count += 1 if !target.skill_learn?($data_skills[@action_data[2]]) or !target.skill_conditions_met?($data_skills[@action_data[2]])
  1118. end
  1119. case @action_data[3]
  1120. when 0 ; judgment = hit_count >= member_num
  1121. when 1 ; judgment = miss_count >= member_num
  1122. end
  1123. action_diverging(judgment, @action_data[5])
  1124. end
  1125. #--------------------------------------------------------------------------
  1126. # ● 条件分岐 (パラメータ)
  1127. #--------------------------------------------------------------------------
  1128. def nece_5
  1129. targets = N03.get_targets(@action_data[1], @battler)
  1130. return if targets == []
  1131. member_num = @action_data[5]
  1132. member_num = targets.size if @action_data[5] == 0 && targets.size > 1
  1133. hit_count = 0
  1134. for target in targets
  1135. hit_count += 1 if target.comparison_parameter([@action_data[2],@action_data[3],@action_data[4]])
  1136. end
  1137. judgment = hit_count >= member_num
  1138. action_diverging(judgment, @action_data[6])
  1139. end
  1140. #--------------------------------------------------------------------------
  1141. # ● 条件分岐 (装備)
  1142. #--------------------------------------------------------------------------
  1143. def nece_6
  1144. targets = N03.get_targets(@action_data[1], @battler)
  1145. return if targets == []
  1146. member_num = @action_data[5]
  1147. member_num = targets.size if @action_data[5] == 0 && targets.size > 1
  1148. hit_count = 0
  1149. miss_count = 0
  1150. for target in targets
  1151. hit_count += 1 if target.comparison_equip([@action_data[2],@action_data[3]])
  1152. miss_count += 1 if !target.comparison_equip([@action_data[2],@action_data[3]])
  1153. end
  1154. case @action_data[4]
  1155. when 0 ; judgment = hit_count >= member_num
  1156. when 1 ; judgment = miss_count >= member_num
  1157. end
  1158. action_diverging(judgment, @action_data[6])
  1159. end
  1160. #--------------------------------------------------------------------------
  1161. # ● 条件分岐 (スクリプト)
  1162. #--------------------------------------------------------------------------
  1163. def nece_7
  1164. judgment = eval(@action_data[2])
  1165. action_diverging(judgment, @action_data[1])
  1166. end
  1167. #--------------------------------------------------------------------------
  1168. # ● アクション分岐
  1169. #--------------------------------------------------------------------------
  1170. def action_diverging(judgment, kind)
  1171. result = 0
  1172. if judgment
  1173. result = 1 if kind == 1
  1174. result = 2 if kind == 2
  1175. else
  1176. result = 1 if kind == 0
  1177. end
  1178. # フルアクション終了
  1179. return @full_action = [] if result == 2
  1180. # 次のアクションを除去
  1181. @full_action.shift if result == 1
  1182. set_action
  1183. # 次のアクションを実行
  1184. @action_data = N03::ACTION[@action]
  1185. next_action
  1186. end
  1187. #--------------------------------------------------------------------------
  1188. # ● セカンドターゲット操作
  1189. #--------------------------------------------------------------------------
  1190. def second_targets_set
  1191. targets = N03.get_targets(@action_data[1], @battler)
  1192. for target in targets
  1193. targets.delete(target) if @action_data[2][1] == 1 && target.index != @action_data[2][0]
  1194. targets.delete(target) if @action_data[2][1] == 2 && target.index == @action_data[2][0].abs
  1195. targets.delete(target) if @action_data[3] > 0 && target.id != @action_data[3]
  1196. targets.delete(target) if @action_data[3] < 0 && target.id == @action_data[3].abs
  1197. targets.delete(target) if @action_data[4] > 0 && !target.state?(@action_data[4])
  1198. targets.delete(target) if @action_data[4] < 0 && target.state?(@action_data[4].abs)
  1199. targets.delete(target) if @action_data[5] > 0 && !target.skill_conditions_met?($data_skills[@action_data[5]])
  1200. targets.delete(target) if @action_data[5] < 0 && target.skill_conditions_met?($data_skills[@action_data[5].abs])
  1201. targets.delete(target) if !target.comparison_parameter(@action_data[6])
  1202. targets.delete(target) if !@action_data[7][1].include?(0) && !target.comparison_equip(@action_data[7])
  1203. end
  1204. return @second_targets = [] if targets.size == 0
  1205. case @action_data[8]
  1206. when 1 ; targets = [targets[rand(targets.size)]]
  1207. when 2 ; targets.delete(@battler)
  1208. end
  1209. return @second_targets = [] if targets.size == 0
  1210. @second_targets = targets
  1211. case @action_data[9]
  1212. when 0 ; return
  1213. when 1 ; set_play_data(["second_targets_set"])
  1214. when 2 ; set_play_data(["targets_set"])
  1215. end
  1216. @wait += 1
  1217. end
  1218. #--------------------------------------------------------------------------
  1219. # ● コモンイベント呼び出し
  1220. #--------------------------------------------------------------------------
  1221. def call_common_event
  1222. $game_temp.reserve_common_event(@action_data[1])
  1223. $sv_camera.event = true
  1224. @event_fix = @action_data[2]
  1225. end
  1226. #--------------------------------------------------------------------------
  1227. # ● ダメージアニメ
  1228. #--------------------------------------------------------------------------
  1229. def damage_anime(delay_time = 12)
  1230. anime(N03.get_attack_anime_id(-3, @battler), wait = true)
  1231. action_play
  1232. @wait -= delay_time
  1233. @full_action.unshift("eval('@damage_anime_data = []
  1234. @set_damage = true')")
  1235. end
  1236. #--------------------------------------------------------------------------
  1237. # ● 通常コラプス
  1238. #--------------------------------------------------------------------------
  1239. def normal_collapse
  1240. @collapse = true
  1241. return
  1242. end
  1243. #--------------------------------------------------------------------------
  1244. # ● 初期位置変更
  1245. #--------------------------------------------------------------------------
  1246. def change_base_position
  1247. @base_x = @x
  1248. @base_y = @y
  1249. @base_h = @h
  1250. end
  1251. #--------------------------------------------------------------------------
  1252. # ● 強制アクション実行
  1253. #--------------------------------------------------------------------------
  1254. def force_act
  1255. target(@full_action.shift)
  1256. end
  1257. #--------------------------------------------------------------------------
  1258. # ● 強制アクション実行 (セカンドターゲット)
  1259. #--------------------------------------------------------------------------
  1260. def force_act2
  1261. target2(@full_action.shift)
  1262. end
  1263. #--------------------------------------------------------------------------
  1264. # ● 個別処理開始
  1265. #--------------------------------------------------------------------------
  1266. def individual_start
  1267. @individual_targets = @target_battler.dup
  1268. @remain_targets = @target_battler.dup
  1269. @target_battler = [@individual_targets[0]]
  1270. # リピート部分のアクションを保持
  1271. @individual_act = @full_action.dup
  1272. end
  1273. #--------------------------------------------------------------------------
  1274. # ● 個別処理終了
  1275. #--------------------------------------------------------------------------
  1276. def individual_end
  1277. @individual_targets.shift
  1278. for target in @individual_targets
  1279. @individual_targets.shift if target.dead?
  1280. end
  1281. # ターゲットが残っているなら行動リピート
  1282. return @target_battler = @remain_targets if @individual_targets.size == 0
  1283. @full_action = @individual_act.dup
  1284. @target_battler = [@individual_targets[0]]
  1285. end
  1286. #--------------------------------------------------------------------------
  1287. # ● ループ開始
  1288. #--------------------------------------------------------------------------
  1289. def loop_start
  1290. # ループ部分のアクションを保持
  1291. @loop_act = @full_action.dup
  1292. end
  1293. #--------------------------------------------------------------------------
  1294. # ● ループ終了
  1295. #--------------------------------------------------------------------------
  1296. def loop_end
  1297. # 行動リピート
  1298. @full_action = @loop_act.dup if @loop_act != []
  1299. end
  1300. #--------------------------------------------------------------------------
  1301. # ● 次の行動者へ移行
  1302. #--------------------------------------------------------------------------
  1303. def next_battler
  1304. @action_end = true
  1305. @active = false
  1306. end
  1307. #--------------------------------------------------------------------------
  1308. # ● 画像変更フラグ
  1309. #--------------------------------------------------------------------------
  1310. def set_change
  1311. @change_up = true
  1312. end
  1313. #--------------------------------------------------------------------------
  1314. # ● 戦闘シーン通信
  1315. #--------------------------------------------------------------------------
  1316. def play_data
  1317. data = @play_data
  1318. @play_data = []
  1319. return data
  1320. end
  1321. #--------------------------------------------------------------------------
  1322. # ● ショートカットコマンド
  1323. #--------------------------------------------------------------------------
  1324. def anime(anime_id, wait = true)
  1325. @action_data = ["anime",anime_id,1,false,wait,false,true,false]
  1326. end
  1327. def anime_me(anime_id, wait = true)
  1328. @action_data = ["anime",anime_id,0,false,wait,false,true,false]
  1329. end
  1330. def se(file, pitch = 100)
  1331. @action_data = ["sound", "se", pitch, 100, file]
  1332. end
  1333. def target(act)
  1334. for target in @target_battler do target.sv.force_action = act end
  1335. end
  1336. def target2(act)
  1337. for target in @second_targets do target.sv.force_action = act end
  1338. end
  1339. def delay(time)
  1340. @wait = @battler.index * time
  1341. end
  1342. #--------------------------------------------------------------------------
  1343. # ● バトラーのIDを取得
  1344. #--------------------------------------------------------------------------
  1345. def id
  1346. return @battler.id if @battler.actor?
  1347. return [email protected]
  1348. end
  1349. #--------------------------------------------------------------------------
  1350. # ● 被クリティカルフラグを取得
  1351. #--------------------------------------------------------------------------
  1352. def critical?
  1353. return @battler.result.critical
  1354. end
  1355. #--------------------------------------------------------------------------
  1356. # ● 被回復フラグを取得
  1357. #--------------------------------------------------------------------------
  1358. def recovery?
  1359. recovery = false
  1360. recovery = true if @battler.result.hp_damage < 0
  1361. recovery = true if @battler.result.mp_damage < 0
  1362. recovery = true if @battler.result.tp_damage < 0
  1363. return recovery
  1364. end
  1365. #--------------------------------------------------------------------------
  1366. # ● 被スキルIDを取得
  1367. #--------------------------------------------------------------------------
  1368. def damage_skill_id
  1369. return @damage_skill_id
  1370. end
  1371. #--------------------------------------------------------------------------
  1372. # ● 被アイテムIDを取得
  1373. #--------------------------------------------------------------------------
  1374. def damage_item_id
  1375. return @damage_item_id
  1376. end
  1377. #--------------------------------------------------------------------------
  1378. # ● 装備武器を取得
  1379. #--------------------------------------------------------------------------
  1380. def weapon_id
  1381. return 0 if [email protected][0]
  1382. return @battler.weapons[0].id
  1383. end
  1384. #--------------------------------------------------------------------------
  1385. # ● 装備武器のタイプを取得
  1386. #--------------------------------------------------------------------------
  1387. def weapon_type
  1388. return 0 if [email protected][0]
  1389. return @battler.weapons[0].wtype_id
  1390. end
  1391. #--------------------------------------------------------------------------
  1392. # ● 盾を装備しているか
  1393. #--------------------------------------------------------------------------
  1394. def shield?
  1395. for armor in @battler.armors do return true if armor != nil && armor.etype_id == 1 end
  1396. return false
  1397. end
  1398. #--------------------------------------------------------------------------
  1399. # ● ダメージがあるか
  1400. #--------------------------------------------------------------------------
  1401. def damage_zero?
  1402. return @battler.result.hp_damage == 0 && @battler.result.mp_damage == 0 && @battler.result.tp_damage == 0
  1403. end
  1404. #--------------------------------------------------------------------------
  1405. # ● スキルIDを取得
  1406. #--------------------------------------------------------------------------
  1407. def skill_id
  1408. return @counter_id if @counter_id != 0
  1409. return 0 if @battler.current_action == nil or @battler.current_action.item == nil
  1410. return 0 if @battler.current_action.item.is_a?(RPG::Item)
  1411. return @battler.current_action.item.id
  1412. end
  1413. #--------------------------------------------------------------------------
  1414. # ● スキルのタイプを取得
  1415. #--------------------------------------------------------------------------
  1416. def skill_type
  1417. return 0 if skill_id == 0
  1418. return $data_skills[skill_id].stype_id
  1419. end
  1420. #--------------------------------------------------------------------------
  1421. # ● スキル名を取得
  1422. #--------------------------------------------------------------------------
  1423. def skill_name
  1424. return "" if skill_id == 0
  1425. return $data_skills[skill_id].name
  1426. end
  1427. #--------------------------------------------------------------------------
  1428. # ● アイテムIDを取得
  1429. #--------------------------------------------------------------------------
  1430. def item_id
  1431. return 0 if @battler.current_action == nil or @battler.current_action.item == nil
  1432. return @battler.current_action.item.id
  1433. end
  1434. #--------------------------------------------------------------------------
  1435. # ● 攻撃アクション
  1436. #--------------------------------------------------------------------------
  1437. def attack_action(item)
  1438. return skill_action if item.is_a?(RPG::Skill)
  1439. return item_action
  1440. end
  1441. #--------------------------------------------------------------------------
  1442. # ● ダメージアクションベース
  1443. #--------------------------------------------------------------------------
  1444. def damage_action_base(item)
  1445. @damage_skill_id = 0
  1446. @damage_item_id = 0
  1447. @damage_skill_id = item.id if item.is_a?(RPG::Skill)
  1448. @damage_item_id = item.id if item.is_a?(RPG::Item)
  1449. end
  1450. #--------------------------------------------------------------------------
  1451. # ● ダメージアクション
  1452. #--------------------------------------------------------------------------
  1453. def damage_action(attacker, item)
  1454. damage_action_base(item)
  1455. act = damage(attacker)
  1456. return if @active
  1457. start_action(act) if act != nil
  1458. end
  1459. #--------------------------------------------------------------------------
  1460. # ● 回避アクション
  1461. #--------------------------------------------------------------------------
  1462. def evasion_action(attacker, item)
  1463. damage_action_base(item)
  1464. act = evasion(attacker)
  1465. return if @active
  1466. start_action(act) if act != nil
  1467. end
  1468. #--------------------------------------------------------------------------
  1469. # ● ミスアクション
  1470. #--------------------------------------------------------------------------
  1471. def miss_action(attacker, item)
  1472. damage_action_base(item)
  1473. act = miss(attacker)
  1474. return if @active
  1475. start_action(act) if act != nil
  1476. end
  1477. #--------------------------------------------------------------------------
  1478. # ● 閃きスクリプト併用処理
  1479. #--------------------------------------------------------------------------
  1480. def flash_action
  1481. return "閃き"
  1482. end

  1483. end


  1484. #==============================================================================
  1485. # ■ module N03
  1486. #------------------------------------------------------------------------------
  1487. #  サイドビューバトルのモジュールです。
  1488. #==============================================================================
  1489. module N03
  1490. #--------------------------------------------------------------------------
  1491. # ● バトラーの敵グループを取得
  1492. #--------------------------------------------------------------------------
  1493. def self.get_enemy_unit(battler)
  1494. return $game_troop if battler.actor?
  1495. return $game_party
  1496. end
  1497. #--------------------------------------------------------------------------
  1498. # ● バトラーの味方グループを取得
  1499. #--------------------------------------------------------------------------
  1500. def self.get_party_unit(battler)
  1501. return $game_party if battler.actor?
  1502. return $game_troop
  1503. end
  1504. #--------------------------------------------------------------------------
  1505. # ● 戦闘アニメ時間の取得
  1506. #--------------------------------------------------------------------------
  1507. def self.get_anime_time(anime_id)
  1508. return 0 if anime_id <= 0
  1509. return $data_animations[anime_id].frame_max * 4
  1510. end
  1511. #--------------------------------------------------------------------------
  1512. # ● 攻撃アニメの取得
  1513. #--------------------------------------------------------------------------
  1514. def self.get_attack_anime_id(kind, battler)
  1515. return $data_skills[battler.sv.counter_id].animation_id if kind == -3 && battler.sv.counter_id != 0
  1516. case kind
  1517. when -1 ; anime_id = battler.atk_animation_id1
  1518. when -2 ; anime_id = battler.atk_animation_id2
  1519. when -3
  1520. if battler.current_action != nil
  1521. anime_id = battler.current_action.item.animation_id if battler.current_action.item != nil
  1522. end
  1523. else ; anime_id = kind
  1524. end
  1525. case anime_id
  1526. when -1 ; anime_id = battler.atk_animation_id1
  1527. when -2 ; anime_id = battler.atk_animation_id2
  1528. end
  1529. return anime_id if anime_id
  1530. return 0
  1531. end
  1532. #--------------------------------------------------------------------------
  1533. # ● 戦闘アニメデータをセット
  1534. #--------------------------------------------------------------------------
  1535. def self.set_damage_anime_data(targets, target, data)
  1536. return if !first_of_all_screen_anime(data[0], target, targets)
  1537. target.animation_id = data[0]
  1538. target.animation_mirror = data[1]
  1539. target.sv.anime_no_mirror = data[2]
  1540. target.sv.anime_camera_zoom = data[3]
  1541. target.sv.anime_plus_z = data[4]
  1542. end
  1543. #--------------------------------------------------------------------------
  1544. # ● ターゲットの取得
  1545. #--------------------------------------------------------------------------
  1546. def self.get_targets(kind, battler)
  1547. case kind.abs
  1548. when 0 ; return [battler].dup
  1549. when 1 ; return battler.sv.target_battler.dup
  1550. when 2 ; return get_enemy_unit(battler).members.dup
  1551. when 3 ; return get_party_unit(battler).members.dup
  1552. when 4 ; return $game_troop.members.dup + $game_party.battle_members.dup
  1553. when 5 ; return battler.sv.second_targets.dup
  1554. end
  1555. end
  1556. #--------------------------------------------------------------------------
  1557. # ● ターゲットの座標を取得
  1558. #--------------------------------------------------------------------------
  1559. def self.get_targets_position(targets, horming, m_a = nil)
  1560. return [0,0,0] if targets == nil && !$sv_camera.mirror
  1561. return [Graphics.width,0,0] if targets == nil && $sv_camera.mirror
  1562. x = y = h = 0
  1563. for i in 0...targets.size
  1564. x += targets[i].sv.base_x if !horming
  1565. y += targets[i].sv.base_y if !horming
  1566. h += targets[i].sv.base_h if !horming
  1567. x += targets[i].sv.x if horming
  1568. y += targets[i].sv.y if horming
  1569. h += targets[i].sv.h if horming
  1570. y -= targets[i].sv.ch * 100 if m_a == 0
  1571. y -= targets[i].sv.ch * 50 if m_a == 1
  1572. end
  1573. return [x / targets.size, y / targets.size, h / targets.size]
  1574. end
  1575. #--------------------------------------------------------------------------
  1576. # ● 速度を時間に変換
  1577. #--------------------------------------------------------------------------
  1578. def self.distanse_calculation(time, target_position, self_position, distanse_move)
  1579. return time if !distanse_move
  1580. distanse_x = self_position[0] - target_position[0]
  1581. distanse_x = target_position[0] - self_position[0] if target_position[0] > self_position[0]
  1582. distanse_y = self_position[1] - target_position[1]
  1583. distanse_y = target_position[1] - self_position[1] if target_position[1] > self_position[1]
  1584. if self_position[2] != nil && target_position[2] != nil
  1585. distanse_h = self_position[2] - target_position[2]
  1586. distanse_h = target_position[2] - self_position[2] if target_position[2] > self_position[2]
  1587. else
  1588. distanse_h = 0
  1589. end
  1590. distanse = [distanse_x, distanse_y, distanse_h].max
  1591. return distanse / (time * 100) + 1
  1592. end
  1593. #--------------------------------------------------------------------------
  1594. # ● 放物線移動計算
  1595. #--------------------------------------------------------------------------
  1596. def self.parabola(data, time, size, type = 1)
  1597. move_data = data
  1598. move_data[0] *= size
  1599. move_data[1] *= size
  1600. move = []
  1601. move_d = []
  1602. for i in 0...time / 2
  1603. move[i] = move_data[0]
  1604. move_d[i] = move_data[1]
  1605. move_data[0] = move_data[0] * type / (1 + type)
  1606. move_data[1] = move_data[1] * type / (1 + type)
  1607. end
  1608. move = move + move_d.reverse!
  1609. move.reverse!
  1610. adjust = move.inject(0) {|result, item| result + item }
  1611. move[move.size - 1] += adjust if data[0] == data[1] && adjust != 0
  1612. move.unshift(0) if time % 2 != 0
  1613. return move
  1614. end
  1615. #--------------------------------------------------------------------------
  1616. # ● 反転値
  1617. #--------------------------------------------------------------------------
  1618. def self.mirror_num(mirror)
  1619. return 1 if !mirror
  1620. return -1
  1621. end
  1622. #--------------------------------------------------------------------------
  1623. # ● カメラワーク
  1624. #--------------------------------------------------------------------------
  1625. def self.camera(battler, data)
  1626. battler = $game_party.battle_members[0] if !battler
  1627. cx = data[2][0] * 100
  1628. cy = data[2][1] * 100
  1629. return $sv_camera.move(cx, cy, data[3], data[4], true) if data[1] == 6
  1630. targets = self.get_targets(data[1], battler)
  1631. return if targets == nil or targets == []
  1632. position = self.get_targets_position(targets, true)
  1633. $sv_camera.move(position[0], position[1] - position[2], data[3], data[4], false)
  1634. end
  1635. #--------------------------------------------------------------------------
  1636. # ● コラプス禁止
  1637. #--------------------------------------------------------------------------
  1638. def self.immortaling
  1639. # 全員に不死身付与
  1640. for member in $game_party.battle_members + $game_troop.members
  1641. # イベント操作等で不死身設定になっていたら解除を無効にするフラグを立てる
  1642. member.sv.immortal = true if member.state?(N03::IMMORTAL_ID)
  1643. member.add_state(N03::IMMORTAL_ID)
  1644. end
  1645. return true
  1646. end
  1647. #--------------------------------------------------------------------------
  1648. # ● コラプス許可
  1649. #--------------------------------------------------------------------------
  1650. def self.unimmortaling
  1651. # 全員の不死身化解除(イベント等で不死身設定がされていれば除く)
  1652. for member in $game_party.battle_members + $game_troop.members
  1653. next if member.dead?
  1654. # 不死身ステートが行動中に解除されていた場合、解除無効を解除
  1655. member.sv.immortal = false if !member.state?(N03::IMMORTAL_ID) && member.sv.immortal
  1656. next member.sv.immortal = false if member.sv.immortal
  1657. member.remove_state(N03::IMMORTAL_ID)
  1658. next if member.hp != 0
  1659. member.add_state(1)
  1660. member.perform_collapse_effect
  1661. member.sv.action_terminate
  1662. end
  1663. return false
  1664. end
  1665. #--------------------------------------------------------------------------
  1666. # ● スキル派生
  1667. #--------------------------------------------------------------------------
  1668. def self.derived_skill(battler)
  1669. battler.force_action(battler.sv.derivation_skill_id, -2)
  1670. BattleManager.unshift_action_battlers(battler)
  1671. end
  1672. #--------------------------------------------------------------------------
  1673. # ● ダメージの作成
  1674. #--------------------------------------------------------------------------
  1675. def self.set_damage(battler, hp_damage, mp_damage)
  1676. battler.result.hp_damage = hp_damage
  1677. battler.result.mp_damage = mp_damage
  1678. end
  1679. #--------------------------------------------------------------------------
  1680. # ● ターゲット生死確認
  1681. #--------------------------------------------------------------------------
  1682. def self.targets_alive?(targets)
  1683. return false if targets == []
  1684. for target in targets do return true if !target.dead? end
  1685. return false
  1686. end
  1687. #--------------------------------------------------------------------------
  1688. # ● ターゲットをセカンドターゲットへ
  1689. #--------------------------------------------------------------------------
  1690. def self.s_targets(battler)
  1691. battler.sv.target_battler = battler.sv.second_targets
  1692. return battler.sv.second_targets
  1693. end
  1694. #--------------------------------------------------------------------------
  1695. # ● セカンドターゲットをターゲットへ
  1696. #--------------------------------------------------------------------------
  1697. def self.targets_set(battler)
  1698. battler.sv.second_targets = battler.current_action.make_targets.compact
  1699. battler.sv.target_battler = battler.sv.second_targets
  1700. end
  1701. #--------------------------------------------------------------------------
  1702. # ● 戦闘アニメ実行判定 (対象:画面時は最初のターゲットのみアニメ実行)
  1703. #--------------------------------------------------------------------------
  1704. def self.first_of_all_screen_anime(anime_id, target, targets)
  1705. anime = $data_animations[anime_id]
  1706. return false if !anime
  1707. return true if anime.position != 3
  1708. return false if anime.position == 3 && target != targets[0]
  1709. targets.delete(target)
  1710. target.sv.timing_targets = targets
  1711. return true
  1712. end
  1713. #--------------------------------------------------------------------------
  1714. # ● 戦闘不能付加攻撃か
  1715. #--------------------------------------------------------------------------
  1716. def self.dead_attack?(battler, item)
  1717. for state in battler.atk_states
  1718. return true if state == battler.death_state_id
  1719. end
  1720. for effect in item.effects
  1721. return true if effect.code == 21 && effect.data_id == battler.death_state_id
  1722. end
  1723. return false
  1724. end

  1725. end

复制代码
  1. #==============================================================================
  2. # ■ Sprite_Weapon
  3. #------------------------------------------------------------------------------
  4. #  ウエポン表示用のスプライトです。
  5. #==============================================================================
  6. class Sprite_Weapon < Sprite_Base
  7. #--------------------------------------------------------------------------
  8. # ● 公開インスタンス変数 
  9. #--------------------------------------------------------------------------
  10. attr_reader :index # ウエポン画像配列のインデックス
  11. attr_reader :battler # 画像が参照しているバトラー
  12. attr_reader :move_time # 画像が目標に到達するまでの時間
  13. attr_reader :through # 貫通フラグ
  14. attr_reader :action_end # 武器アクション終了フラグ
  15. attr_reader :action_end_cancel # 武器アクション終了フラグ
  16. attr_reader :hit_position # 画像が目標に到達した時の座標
  17. attr_accessor :hit_anime_id # 画像が目標に到達した時のアニメID
  18. #--------------------------------------------------------------------------
  19. # ● オブジェクト初期化
  20. #--------------------------------------------------------------------------
  21. def initialize(viewport, index, battler)
  22. super(viewport)
  23. @index = index
  24. @battler = battler
  25. @position_x = @position_y = 0
  26. @o = 0
  27. @real_x = @real_y = 0
  28. @mirror = @battler.sv.mirror
  29. reset
  30. set_action
  31. end
  32. #--------------------------------------------------------------------------
  33. # ● 初期化
  34. #--------------------------------------------------------------------------
  35. def reset
  36. @z_plus = 0
  37. @weapon_data = []
  38. @move_data = []
  39. @move_x = 0
  40. @move_y = 0
  41. @orbit = []
  42. @through = false
  43. @distanse_move = false
  44. @weapon_width = 0
  45. @weapon_height = 0
  46. @anime_time = 0
  47. @anime_position = 1
  48. @move_time = 0
  49. @hit_anime_id = 0
  50. @move_anime = true
  51. @action_end = false
  52. @action_end_cancel = false
  53. reset_position
  54. end
  55. #--------------------------------------------------------------------------
  56. # ● アクションをセット
  57. #--------------------------------------------------------------------------
  58. def set_action
  59. return if @battler.sv.effect_data == []
  60. weapon_anime if @battler.sv.effect_data[0][0] == "wp"
  61. move_anime if @battler.sv.effect_data[0][0] == "m_a"
  62. @battler.sv.effect_data.shift
  63. end
  64. #--------------------------------------------------------------------------
  65. # ● 武器アニメ実行
  66. #--------------------------------------------------------------------------
  67. def weapon_anime
  68. @weapon_data = @battler.sv.effect_data[0].dup
  69. set_graphics
  70. set_ox
  71. set_weapon_move
  72. end
  73. #--------------------------------------------------------------------------
  74. # ● アニメ移動実行
  75. #--------------------------------------------------------------------------
  76. def move_anime
  77. @move_data = @battler.sv.effect_data[0].dup
  78. # ターゲットを取得
  79. @target_battler = [@battler.sv.m_a_targets.shift]
  80. @target_battler = N03.get_targets(@move_data[3], @battler) if @move_data[3] < 0
  81. set_move
  82. return if @move_data[16] == ""
  83. weapon_data = N03::ACTION[@move_data[16]]
  84. return if weapon_data == nil
  85. @weapon_data = weapon_data.dup
  86. set_graphics
  87. set_ox
  88. set_weapon_move
  89. end
  90. #--------------------------------------------------------------------------
  91. # ● 武器画像を取得
  92. #--------------------------------------------------------------------------
  93. def set_graphics
  94. # 武器に依存しない画像設定がある場合
  95. if @weapon_data[13] != ""
  96. self.bitmap = Cache.character(@weapon_data[13]).dup
  97. @weapon_width = self.bitmap.width
  98. @weapon_height = self.bitmap.height
  99. return
  100. end
  101. # 武器を取得
  102. weapon = @battler.weapons[0]
  103. # 逆手装備を取得
  104. if @weapon_data[10]
  105. weapon = nil
  106. for armor in @battler.armors do break weapon = armor if armor.is_a?(RPG::Armor) && armor.etype_id == 1 end
  107. weapon = @battler.weapons[1] if !weapon
  108. end
  109. # 武器がなければ処理をキャンセル
  110. return if weapon == nil
  111. # インデックスを取得
  112. file_index = @weapon_data[12]
  113. # アイコンを利用するなら
  114. if @weapon_data[1] == 0
  115. icon_index = weapon.icon_index
  116. self.bitmap = Cache.system("Iconset" + file_index).dup
  117. self.src_rect.set(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
  118. @weapon_width = @weapon_height = 24
  119. # 独自画像指定
  120. else
  121. file_name = @battler.sv.weapon_graphic(weapon.id, weapon.wtype_id) if weapon.is_a?(RPG::Weapon)
  122. file_name = @battler.sv.shield_graphic(weapon.id, weapon.atype_id) if weapon.is_a?(RPG::Armor)
  123. self.bitmap = Cache.character(file_name + file_index).dup
  124. @weapon_width = self.bitmap.width
  125. @weapon_height = self.bitmap.height
  126. return if @weapon_data[1] == 1
  127. # 2003仕様の武器アニメ
  128. @weapon_width /= @battler.sv.max_pattern[0]
  129. end
  130. end
  131. #--------------------------------------------------------------------------
  132. # ● 画像の原点を取得
  133. #--------------------------------------------------------------------------
  134. def set_ox
  135. # 反転時は設定を逆に
  136. if @mirror
  137. case @weapon_data[6]
  138. when 1 ; @weapon_data[6] = 2 # 左上→右上に
  139. when 2 ; @weapon_data[6] = 1 # 右上→左上に
  140. when 3 ; @weapon_data[6] = 4 # 左下→右下に
  141. when 4 ; @weapon_data[6] = 3 # 右下→左下に
  142. end
  143. end
  144. # 原点を設定
  145. case @weapon_data[6]
  146. when 0 # 中心
  147. self.ox = @weapon_width / 2
  148. self.oy = @weapon_height / 2
  149. when 1 # 左上
  150. self.ox = 0
  151. self.oy = 0
  152. when 2 # 右上
  153. self.ox = @weapon_width
  154. self.oy = 0
  155. when 3 # 左下
  156. self.ox = 0
  157. self.oy = @weapon_height
  158. when 4 # 右下
  159. self.ox = @weapon_width
  160. self.oy = @weapon_height
  161. when 5 # バトラーと同じ
  162. self.ox = @weapon_width / 2
  163. self.oy = @weapon_height
  164. end
  165. end
  166. #--------------------------------------------------------------------------
  167. # ● バトラーの座標を取得
  168. #--------------------------------------------------------------------------
  169. def set_battler_position
  170. @position_x = @battler.sv.x + @weapon_data[3][0] * N03.mirror_num(@mirror) * 100
  171. @position_y = (@battler.sv.y - @battler.sv.h - @battler.sv.j - @battler.sv.c - @battler.sv.oy_adjust) + @weapon_data[3][1] * 100
  172. reset_position
  173. end
  174. #--------------------------------------------------------------------------
  175. # ● 座標を初期化
  176. #--------------------------------------------------------------------------
  177. def reset_position
  178. @real_x = @position_x / 100
  179. @real_y = @position_y / 100
  180. @real_zoom_x = 1
  181. @real_zoom_y = 1
  182. end
  183. #--------------------------------------------------------------------------
  184. # ● 戦闘アニメを表示
  185. #--------------------------------------------------------------------------
  186. def set_animation(anime_id)
  187. return if $data_animations[anime_id] == nil
  188. @anime_position = $data_animations[anime_id].position
  189. @horming = true
  190. @horming = false if @anime_position == 3
  191. @anime_camera_zoom = true
  192. @anime_no_mirror = false
  193. start_animation($data_animations[anime_id], @mirror)
  194. timings = $data_animations[anime_id].timings
  195. end
  196. #--------------------------------------------------------------------------
  197. # ● ヒット時の戦闘アニメ実行
  198. #--------------------------------------------------------------------------
  199. def set_hit_animation(position_data, hit_anime_id, target)
  200. return if $data_animations[hit_anime_id] == nil
  201. @real_x = position_data[0]
  202. @real_y = position_data[1]
  203. @position_x = position_data[0] * 100
  204. @position_y = position_data[1] * 100
  205. self.z = position_data[2]
  206. @z_plus = 1000
  207. @action_end = false
  208. @horming = true
  209. set_animation(hit_anime_id)
  210. @anime_time = $data_animations[hit_anime_id].frame_max * 4
  211. @timing_targets = [target]
  212. @move_time = @hit_anime_id = 0
  213. @weapon_data = []
  214. end
  215. #--------------------------------------------------------------------------
  216. # ● タイミングバトラー追加
  217. #--------------------------------------------------------------------------
  218. def timing_battler_set(target)
  219. @timing_targets.push(target)
  220. end
  221. #--------------------------------------------------------------------------
  222. # ● 武器の動きを取得
  223. #--------------------------------------------------------------------------
  224. def set_weapon_move
  225. # 開始位置を取得
  226. set_battler_position if @move_time == 0
  227. @z_plus = 50 if @z_plus == 0 && @weapon_data[9]
  228. self.z = @battler.sv.z + @z_plus
  229. # 反転処理
  230. @mirror = !@mirror if @weapon_data[7]
  231. self.mirror = @mirror
  232. # 更新パターンをセット
  233. set_pattern
  234. @max_pattern = 2 if @max_pattern == 1
  235. # 動きを計算
  236. @weapon_move_data = []
  237. @weapon_angle_data = []
  238. @weapon_zoom_data = []
  239. num = N03.mirror_num(@mirror)
  240. for i in 0...@max_pattern
  241. move_data_x = @weapon_data[2][0] * num * 100 * i / (@max_pattern - 1)
  242. move_data_y = @weapon_data[2][1] * 100 * i / (@max_pattern - 1)
  243. move_angle = @weapon_data[4] * num + (@weapon_data[5] * num - @weapon_data[4] * num) * i / (@max_pattern - 1)
  244. move_zoom_x = 1 + (@weapon_data[8][0] - 1) * i / (@max_pattern - 1)
  245. move_zoom_y = 1 + (@weapon_data[8][1] - 1) * i / (@max_pattern - 1)
  246. @weapon_move_data.push([move_data_x, move_data_y])
  247. @weapon_angle_data.push(move_angle)
  248. @weapon_zoom_data.push([move_zoom_x, move_zoom_y])
  249. end
  250. end
  251. #--------------------------------------------------------------------------
  252. # ● 更新パターン
  253. #--------------------------------------------------------------------------
  254. def set_pattern
  255. if @weapon_data[11] == -1
  256. return @max_pattern = @battler.sv.max_pattern[0] if @battler.sv.pattern_type != 0
  257. @count = @battler.sv.pattern_time
  258. @max_count = @battler.sv.pattern_time
  259. @max_pattern = @battler.sv.max_pattern[0]
  260. @repeat = false
  261. else
  262. @count = @weapon_data[11][0]
  263. @max_count = @weapon_data[11][0]
  264. @max_pattern = @weapon_data[11][1]
  265. @repeat = @weapon_data[11][2]
  266. end
  267. @pattern = 0
  268. end
  269. #--------------------------------------------------------------------------
  270. # ● 移動実行
  271. #--------------------------------------------------------------------------
  272. def set_move
  273. # 戦闘アニメを取得
  274. set_animation(@move_data[1][0]) if $data_animations[@move_data[1][0]] != nil && $data_animations[@move_data[1][0]].position != 3
  275. @anime_camera_zoom = @move_data[13]
  276. @loop = @move_data[14]
  277. @loop = false if @move_data[1][0] == 0
  278. @anime_no_mirror = @move_data[15]
  279. @se_flag = @move_data[17]
  280. # 開始位置を取得
  281. start_position
  282. @z_plus = 1000 if @move_data[9]
  283. # ターゲットバトラー画像にこのアニメのSEとタイミング設定を反映させる
  284. @timing_targets = @target_battler
  285. # 座標計算
  286. @move_x = @move_data[5][0] * 100 * N03.mirror_num(@mirror)
  287. @move_y = @move_data[5][1] * 100
  288. # 時間計算か速度計算か
  289. @distanse_move = true if @move_data[6] > 0
  290. @move_time = @move_data[6].abs
  291. # 時間0の場合、アニメが設定されていればアニメ表示時間に合わせる
  292. if @move_time == 0
  293. @move_time = $data_animations[@move_data[1][0]].frame_max * 4 if $data_animations[@move_data[1][0]]
  294. @move_time = 1 if !$data_animations[@move_data[1][0]]
  295. @distanse_move = false
  296. end
  297. # 貫通タイプの場合
  298. @through = true if @move_data[7] == 1
  299. @auto_through_flag = false
  300. @auto_through_flag = true if @move_data[7] == 0
  301. # ターゲット座標計算
  302. if @target_battler == nil
  303. @target_x = @move_x * 100
  304. @target_x = (Graphics.width - @move_x) * 100 if @mirror
  305. @target_y = @move_y * 100
  306. else
  307. move_data_set
  308. end
  309. # ターゲットに到達するまでの時間を計算
  310. @move_time = distanse_calculation(@move_time, @target_x, @target_y)
  311. # 円軌道計算
  312. orbit
  313. # バトラーのウエイト設定
  314. @battler.sv.wait = @move_time - 1 if @move_data[10][0]
  315. @move_horming = @move_data[12]
  316. end
  317. #--------------------------------------------------------------------------
  318. # ● 速度を時間に変換
  319. #--------------------------------------------------------------------------
  320. def distanse_calculation(time, target_x, target_y)
  321. return time if !@distanse_move
  322. distanse_x = @position_x - @target_x
  323. distanse_x = @target_x - @position_x if @target_x > @position_x
  324. distanse_y = @position_y - @target_y
  325. distanse_y = @target_y - @position_y if @target_y > @position_y
  326. distanse = [distanse_x, distanse_y].max
  327. return distanse / (time * 100) + 1
  328. end
  329. #--------------------------------------------------------------------------
  330. # ● 移動目標の更新
  331. #--------------------------------------------------------------------------
  332. def move_data_set
  333. return if @target_battler == nil
  334. position = N03.get_targets_position(@target_battler, true, @anime_position)
  335. @target_x = position[0] + @move_x
  336. @target_y = position[1] - position[2] + @move_y
  337. end
  338. #--------------------------------------------------------------------------
  339. # ● 開始位置を計算
  340. #--------------------------------------------------------------------------
  341. def start_position
  342. starter = [@battler.sv.m_a_starter.shift]
  343. starter = N03.get_targets(@move_data[2], @battler) if @move_data[2] < 0
  344. position = [0, 0]
  345. position = N03.get_targets_position(starter, true, @anime_position) if starter != nil
  346. @position_x = position[0] + @move_data[4][0] * 100
  347. @position_y = position[1] + position[2] + @move_data[4][1] * 100
  348. @position_z = @position_y
  349. end
  350. #--------------------------------------------------------------------------
  351. # ● 円軌道計算
  352. #--------------------------------------------------------------------------
  353. def orbit
  354. orbit_data = @move_data[8].dup
  355. orbit_data[0] *= 100
  356. orbit_data[1] *= 100
  357. orbit_d = []
  358. for i in 0...@move_time / 2
  359. @orbit[i] = orbit_data[0]
  360. orbit_data[0] /= 2
  361. orbit_d[i] = orbit_data[1]
  362. orbit_data[1] /= 2
  363. end
  364. @orbit = @orbit + orbit_d.reverse!
  365. @orbit.reverse!
  366. end
  367. #--------------------------------------------------------------------------
  368. # ● フレーム更新
  369. #--------------------------------------------------------------------------
  370. def update
  371. update_hit_anime if @anime_time != 0
  372. update_move if @move_time != 0
  373. update_weapon_move if @weapon_data != []
  374. update_position
  375. update_color
  376. self.visible = @battler.sv.weapon_visible
  377. super
  378. end
  379. #--------------------------------------------------------------------------
  380. # ● ヒット時の戦闘アニメ
  381. #--------------------------------------------------------------------------
  382. def update_hit_anime
  383. @anime_time -= 1
  384. @action_end = true if @anime_time == 0
  385. end
  386. #--------------------------------------------------------------------------
  387. # ● 移動の更新
  388. #--------------------------------------------------------------------------
  389. def update_move
  390. move_data_set if @move_horming && !@hit_position
  391. through_set(@move_time, @target_x, @target_y) if @move_time == 1 && !@hit_position
  392. @o += @orbit[@move_time - 1] if @orbit[@move_time - 1] != nil
  393. @position_x = (@position_x * (@move_time - 1) + @target_x) / @move_time
  394. @position_y = (@position_y * (@move_time - 1) + @target_y) / @move_time + @o
  395. reset_position
  396. set_animation(@move_data[1][0]) if @loop && !animation?
  397. @move_time -= 1
  398. return if @move_time != 0
  399. @action_end = true if !@action_end_cancel
  400. end
  401. #--------------------------------------------------------------------------
  402. # ● 武器の動きを更新
  403. #--------------------------------------------------------------------------
  404. def update_weapon_move
  405. pattern = update_pattern
  406. set_battler_position if @move_time == 0 && !@action_end_cancel
  407. @real_x = @position_x / 100 + @weapon_move_data[pattern][0] / 100
  408. @real_y = @position_y / 100 + @weapon_move_data[pattern][1] / 100
  409. @real_zoom_x = @weapon_zoom_data[pattern][0]
  410. @real_zoom_y = @weapon_zoom_data[pattern][1]
  411. self.angle = @weapon_angle_data[pattern]
  412. self.src_rect.set(@weapon_width * pattern, 0, @weapon_width, @weapon_height) if @weapon_data[1] == 2
  413. end
  414. #--------------------------------------------------------------------------
  415. # ● パターンを更新
  416. #--------------------------------------------------------------------------
  417. def update_pattern
  418. return @battler.sv.pattern_w if @count == nil
  419. @count -= 1
  420. return @pattern if @count != 0
  421. @count = @max_count
  422. @pattern += 1
  423. if !@repeat && @pattern == @max_pattern
  424. @pattern = @max_pattern - 1
  425. elsif @pattern == @max_pattern
  426. @pattern = 0
  427. end
  428. return @pattern
  429. end
  430. #--------------------------------------------------------------------------
  431. # ● 座標を更新
  432. #--------------------------------------------------------------------------
  433. def update_position
  434. self.x = (@real_x - $sv_camera.x) * $sv_camera.convert / 1000
  435. self.y = (@real_y - $sv_camera.y) * $sv_camera.convert / 1000
  436. self.x += $sv_camera.sx / 100 unless @battler.sv.h != 0 && @weapon_data != []
  437. self.y += $sv_camera.sy / 100 unless @battler.sv.h != 0 && @weapon_data != []
  438. self.z = @battler.sv.z + @z_plus - 10
  439. self.zoom_x = @real_zoom_x * $sv_camera.zoom
  440. self.zoom_y = @real_zoom_y * $sv_camera.zoom
  441. self.opacity = @battler.sv.opacity if @battler.sv.opacity_data[4]
  442. end
  443. #--------------------------------------------------------------------------
  444. # ● 貫通の処理
  445. #--------------------------------------------------------------------------
  446. def through_set(time, target_x, target_y)
  447. @hit_anime_id = N03.get_attack_anime_id(@move_data[1][1], @battler)
  448. @battler.sv.wait = N03.get_anime_time(@hit_anime_id) if @move_data[10][1]
  449. moving_x = (target_x / 100 - @position_x / 100) / time
  450. moving_y = (target_y / 100 - @position_y / 100) / time
  451. goal_x = $sv_camera.max_left - 100 if moving_x < 0
  452. goal_x = Graphics.width + $sv_camera.max_right + 100 if moving_x > 0
  453. goal_y = $sv_camera.max_top - 100 if moving_y < 0
  454. goal_y = Graphics.height + $sv_camera.max_bottom + 100 if moving_y > 0
  455. if goal_x == nil && goal_y == nil
  456. time = 0
  457. reset_position
  458. else
  459. time = move_calculation(moving_x, moving_y, goal_x, goal_y)
  460. end
  461. target_x = @position_x + moving_x * time * 100
  462. target_y = @position_y + moving_y * time * 100
  463. @pre_data = [time, target_x, target_y]
  464. @battler.sv.m_a_data.push([@move_data[11], @target_battler, @index, @auto_through_flag, []])
  465. @action_end_cancel = true
  466. @hit_position = [@real_x, @real_y, self.z]
  467. end
  468. #--------------------------------------------------------------------------
  469. # ● 到達時間試算
  470. #--------------------------------------------------------------------------
  471. def move_calculation(moving_x, moving_y, goal_x, goal_y)
  472. move_x = @position_x / 100
  473. move_y = @position_y / 100
  474. time = 0
  475. loop do
  476. move_x += moving_x
  477. move_y += moving_y
  478. time += 1
  479. return time if moving_x < 0 && move_x < goal_x
  480. return time if moving_x > 0 && move_x > goal_x
  481. return time if moving_y < 0 && move_y < goal_y
  482. return time if moving_y > 0 && move_y > goal_y
  483. end
  484. end
  485. #--------------------------------------------------------------------------
  486. # ● ミス時に消える処理から貫通処理に変換
  487. #--------------------------------------------------------------------------
  488. def through_change
  489. @action_end_cancel = false
  490. @through = true
  491. @move_time = @pre_data[0]
  492. @target_x = @pre_data[1]
  493. @target_y = @pre_data[2]
  494. @pre_data = nil
  495. end
  496. #--------------------------------------------------------------------------
  497. # ● SE とフラッシュのタイミング処理
  498. #--------------------------------------------------------------------------
  499. def animation_process_timing(timing)
  500. return if !@timing_targets
  501. se_flag = true
  502. se_flag = @se_flag if @se_flag != nil
  503. for target in @timing_targets
  504. target.sv.timing.push([se_flag, timing.dup])
  505. se_flag = false if @animation.position == 3
  506. end
  507. end
  508. #--------------------------------------------------------------------------
  509. # ● 色調の更新
  510. #--------------------------------------------------------------------------
  511. def update_color
  512. return if @battler.sv.color == []
  513. self.color.set(@battler.sv.color[0], @battler.sv.color[1], @battler.sv.color[2], @battler.sv.color[3])
  514. end
  515. #--------------------------------------------------------------------------
  516. # ● 解放
  517. #--------------------------------------------------------------------------
  518. def dispose
  519. super
  520. self.bitmap.dispose if self.bitmap != nil
  521. end
  522. end

  523. #==============================================================================
  524. # ■ Sprite_Battle_Picture
  525. #------------------------------------------------------------------------------
  526. #  ピクチャ表示用のスプライトです。
  527. #==============================================================================
  528. class Sprite_Battle_Picture < Sprite
  529. #--------------------------------------------------------------------------
  530. # ● 公開インスタンス変数 
  531. #--------------------------------------------------------------------------
  532. attr_accessor :action_end # 終了フラグ
  533. #--------------------------------------------------------------------------
  534. # ● オブジェクト初期化
  535. #--------------------------------------------------------------------------
  536. def initialize(viewport = nil)
  537. super(viewport)
  538. @action_end = false
  539. self.ox = 0
  540. end
  541. #--------------------------------------------------------------------------
  542. # ● セット
  543. #--------------------------------------------------------------------------
  544. def set(battler)
  545. @battler = battler
  546. @data = @battler.sv.effect_data.shift
  547. @time = @data[4]
  548. @mirror = $sv_camera.mirror
  549. @mirror = false if !@data[8]
  550. self.opacity = @data[6][0]
  551. @s_x = @data[2][0] if @data[2] != []
  552. @s_x = Graphics.width - @data[2][0] if @data[2] != [] && @mirror
  553. @s_y = @data[2][1] if @data[2] != []
  554. @e_x = @data[3][0] if @data[3] != []
  555. @e_x = Graphics.width - @data[3][0] if @data[3] != [] && @mirror
  556. @e_y = @data[3][1] if @data[3] != []
  557. @s_x = self.x if @data[2] == []
  558. @s_y = self.y if @data[2] == []
  559. @e_x = self.x if @data[3] == []
  560. @e_y = self.y if @data[3] == []
  561. self.x = @s_x
  562. self.y = @s_y
  563. return @action_end = true if @time == 0
  564. @move_x = (@e_x * 1.0 - @s_x) / @time
  565. @move_y = (@e_y * 1.0 - @s_y) / @time
  566. self.z = @data[5]
  567. return set_plane(battler) if @data[7] != []
  568. self.bitmap = Cache.picture(@data[9]) if !bitmap or @data[9] != ""
  569. return @action_end = true if !bitmap
  570. self.mirror = @mirror
  571. self.ox = self.bitmap.width if @mirror
  572. end
  573. #--------------------------------------------------------------------------
  574. # ● プレーン移行
  575. #--------------------------------------------------------------------------
  576. def set_plane(battler)
  577. @viewport = Viewport.new(@data[2][0],@data[2][1],@data[7][0],@data[7][1]) if !@viewport
  578. viewport = @viewport
  579. @plane = Plane.new(viewport) if !@plane
  580. @plane.bitmap = Cache.picture(@data[9]) if [email protected] or @data[9] != ""
  581. return @action_end = true if [email protected]
  582. @plane.ox = @data[7][0]
  583. @plane.oy = @data[7][1]
  584. @plane.opacity = @data[6][0]
  585. @move_x = @remain_move[0] if @data[2] == @data[3]
  586. @move_y = @remain_move[1] if @data[2] == @data[3]
  587. @remain_move = [@move_x, @move_y]
  588. end
  589. #--------------------------------------------------------------------------
  590. # ● フレーム更新
  591. #--------------------------------------------------------------------------
  592. def update
  593. @action_end = true if [email protected]
  594. return if @time == 0
  595. return if @action_end
  596. @time -= 1
  597. return plane_update if @plane
  598. super
  599. self.x += @move_x
  600. self.y += @move_y
  601. self.opacity += @data[6][1]
  602. return if @time != 1
  603. self.x = @e_x
  604. self.y = @e_y
  605. @time = 0
  606. end
  607. #--------------------------------------------------------------------------
  608. # ● フレーム更新
  609. #--------------------------------------------------------------------------
  610. def plane_update
  611. @plane.ox += @move_x
  612. @plane.oy += @move_y
  613. @plane.opacity += @data[6][1]
  614. @time = @data[4] if @time == 0
  615. end
  616. #--------------------------------------------------------------------------
  617. # ● 解放
  618. #--------------------------------------------------------------------------
  619. def dispose
  620. bitmap.dispose if bitmap
  621. @plane.dispose if @plane
  622. @viewport.dispose if @viewport
  623. super
  624. end
  625. end

  626. #==============================================================================
  627. # ■ Sprite_Back_Picture
  628. #------------------------------------------------------------------------------
  629. #  周期ピクチャ用のスプライトです。
  630. #==============================================================================
  631. class Sprite_Back_Picture < Plane
  632. #--------------------------------------------------------------------------
  633. # ● 公開インスタンス変数 
  634. #--------------------------------------------------------------------------
  635. attr_accessor :action_end # 終了フラグ
  636. #--------------------------------------------------------------------------
  637. # ● オブジェクト初期化
  638. #--------------------------------------------------------------------------
  639. def initialize(viewport = nil, index)
  640. super(viewport)
  641. @index = index
  642. @real_x = 0
  643. @real_y = 0
  644. @real_opacity = 0
  645. @move_x = 0
  646. @move_y = 0
  647. @move_opacity = 0
  648. @time = 0
  649. @switche = 0
  650. @action_end = false
  651. end
  652. #--------------------------------------------------------------------------
  653. # ● セットアップ
  654. #--------------------------------------------------------------------------
  655. def setup(data)
  656. self.bitmap = Cache.picture(data[9])
  657. self.z = data[6]
  658. @switche = data[1]
  659. mirror = $sv_camera.mirror
  660. mirror = false if !data[8]
  661. @move_x = data[3][0]
  662. @move_x *= -1 if mirror
  663. @move_y = data[3][1]
  664. @time = data[4]
  665. @time = -1 if @time == 0
  666. @real_opacity = (data[5][0] + 1) * 100
  667. @move_opacity = data[5][1]
  668. @start_opacity = data[5][0]
  669. @shake_ok = data[7]
  670. end
  671. #--------------------------------------------------------------------------
  672. # ● フレーム更新
  673. #--------------------------------------------------------------------------
  674. def update
  675. update_picture if @time != 0
  676. self.ox = $sv_camera.x - @real_x
  677. self.oy = $sv_camera.y - @real_y
  678. if @shake_ok
  679. self.ox -= $sv_camera.sx / 100
  680. self.oy -= $sv_camera.sy / 100
  681. end
  682. self.ox *= $sv_camera.zoom
  683. self.oy *= $sv_camera.zoom
  684. self.zoom_x = @zoom_x * $sv_camera.zoom
  685. self.zoom_y = @zoom_y * $sv_camera.zoom
  686. self.opacity = @real_opacity / 100
  687. @move_opacity *= -1 if self.opacity == 255 or self.opacity <= @start_opacity
  688. @switche
  689. @action_end = true if @switche > 0 && !$game_switches[@switche]
  690. @action_end = true if @switche < 0 && !$sv_camera.switches[@switche.abs]
  691. end
  692. #--------------------------------------------------------------------------
  693. # ● ピクチャの更新
  694. #--------------------------------------------------------------------------
  695. def update_picture
  696. @real_x += @move_x / 100
  697. @real_y += @move_y / 100
  698. @real_x = 0 if @real_x >= self.bitmap.width or @real_x <= -self.bitmap.width
  699. @real_y = 0 if @real_y >= self.bitmap.height or @real_y <= -self.bitmap.height
  700. @zoom_x = 1
  701. @zoom_y = 1
  702. @real_opacity += @move_opacity
  703. @time -= 1
  704. @time = -1 if @time < -100
  705. end
  706. end

  707. #==============================================================================
  708. # ■ Sprite_Back_Picture
  709. #------------------------------------------------------------------------------
  710. #  ダメージ表示のスプライトです。
  711. #==============================================================================
  712. class Sprite_Damage < Sprite
  713. #--------------------------------------------------------------------------
  714. # ● 公開インスタンス変数 
  715. #--------------------------------------------------------------------------
  716. attr_reader :action_end # POP終了フラグ
  717. #--------------------------------------------------------------------------
  718. # ● オブジェクト初期化
  719. #--------------------------------------------------------------------------
  720. def initialize(viewport = nil, battler)
  721. super(viewport)
  722. @battler = battler
  723. @time = 0
  724. return @action_end = true if !@battler
  725. @direction = -1
  726. @direction *= -1 if @battler.actor?
  727. @direction *= -1 if $sv_camera.mirror
  728. set_state
  729. set_damage
  730. update
  731. end
  732. #--------------------------------------------------------------------------
  733. # ● ステート表示
  734. #--------------------------------------------------------------------------
  735. def set_state
  736. return if !N03::STATE_POP
  737. states = @battler.result.added_state_objects
  738. states.delete($data_states[@battler.death_state_id]) if @battler.result.hp_damage != 0
  739. return if states == []
  740. return if @battler.sv.add_state == @battler.result.added_state_objects
  741. @battler.sv.add_state = states.dup
  742. @st = []
  743. @st_base = []
  744. for i in 0...states.size
  745. @st[i] = Sprite.new
  746. bitmap_state(@st[i], states[i])
  747. @st_base[i] = []
  748. @st_base[i][0] = @direction * (-20 + 5 * i) + @battler.sv.x / 100
  749. @st_base[i][1] = -40 - @state_height * i + (@battler.sv.y - @battler.sv.h - @battler.sv.j - @battler.sv.oy_adjust)/ 100
  750. @st[i].z = 1000 + i
  751. @st[i].opacity = 0
  752. end
  753. @time = @pop_time = 80
  754. end
  755. #--------------------------------------------------------------------------
  756. # ● ステート画像
  757. #--------------------------------------------------------------------------
  758. def bitmap_state(state, state_object)
  759. name = state_object.name
  760. state.bitmap = Cache.system("Iconset").dup
  761. state.src_rect.set(state_object.icon_index % 16 * 24, state_object.icon_index / 16 * 24, 24, 24)
  762. @state_height = 24
  763. end
  764. #--------------------------------------------------------------------------
  765. # ● ダメージ表示
  766. #--------------------------------------------------------------------------
  767. def set_damage
  768. return @action_end = true if !N03::DAMAGE_POP
  769. damage = @battler.result.hp_damage if @battler.result.hp_damage != 0
  770. damage = @battler.result.hp_drain if @battler.result.hp_drain != 0
  771. damage = @battler.result.mp_damage if @battler.result.mp_damage != 0
  772. damage = @battler.result.mp_drain if @battler.result.mp_drain != 0
  773. damage = @battler.result.tp_damage if @battler.result.tp_damage != 0
  774. if !damage or damage == 0
  775. @action_end = true if @st == nil
  776. return # ステートだけPOPする設定を考慮して@action_endは返さない
  777. end
  778. @hit = @battler.sv.hit
  779. @battler.sv.hit += 1 if damage > 0
  780. file = N03::DAMAGE_PLUS if damage > 0
  781. file = N03::DAMAGE_MINUS if damage < 0
  782. add_file = N03::DAMAGE_MP if @battler.result.mp_damage != 0
  783. add_file = N03::DAMAGE_TP if @battler.result.tp_damage != 0
  784. adjust_x = N03::DAMAGE_ADJUST
  785. @num = []
  786. @num_base = []
  787. damage = damage.abs
  788. max_num = damage.to_s.size
  789. max_num += 1 if add_file != nil
  790. for i in 0...max_num
  791. @num[i] = Sprite.new
  792. if add_file != nil && i == max_num - 1
  793. @num[i].bitmap = Cache.system(add_file)
  794. cw = (damage % (10 * 10 ** i))/(10 ** i)
  795. sw = 0 if sw == nil
  796. else
  797. @num[i].bitmap = Cache.system(file)
  798. cw = (damage % (10 * 10 ** i))/(10 ** i)
  799. sw = @num[i].bitmap.width / 10
  800. @num[i].src_rect.set(cw * sw, 0, sw, @num[i].bitmap.height)
  801. end
  802. @num_base[i] = []
  803. @num_base[i][0] = (sw + adjust_x) * i * -1 + (@battler.sv.x / 100)
  804. @num_base[i][1] = -(@num[i].bitmap.height / 3) - i * 2 - @hit * 2 + (@battler.sv.y - @battler.sv.h - @battler.sv.j - @battler.sv.oy_adjust)/ 100
  805. @num_base[i][0] -= @num[i].bitmap.width / 2 - adjust_x if add_file != nil && i == max_num - 1
  806. @num[i].z = 1000 + i + @hit * 10
  807. end
  808. @time = @pop_time = 80
  809. end
  810. #--------------------------------------------------------------------------
  811. # ● フレーム更新
  812. #--------------------------------------------------------------------------
  813. def update
  814. return if @time == 0
  815. for i in [email protected] do update_state_move(@st[i], i) end if @st != nil
  816. for i in [email protected] do update_num_move(@num[i], i) end if @num != nil
  817. @time -= 1
  818. @action_end = true if @time == 0
  819. end
  820. #--------------------------------------------------------------------------
  821. # ● ステート画像の更新
  822. #--------------------------------------------------------------------------
  823. def update_state_move(state, index)
  824. min = @pop_time - index * 2
  825. case @time
  826. when min-15..min
  827. @st_base[index][0] += @direction
  828. state.opacity += 25
  829. when min-80..min-50
  830. @st_base[index][0] += @direction
  831. state.opacity -= 25
  832. end
  833. state.x = (@st_base[index][0] - $sv_camera.x) * $sv_camera.zoom
  834. state.y = (@st_base[index][1] - $sv_camera.y) * $sv_camera.zoom
  835. end
  836. #--------------------------------------------------------------------------
  837. # ● 数値の更新
  838. #--------------------------------------------------------------------------
  839. def update_num_move(num, index)
  840. min = @pop_time - index * 2
  841. case @time
  842. when min-1..min
  843. @num_base[index][0] += @direction * @hit
  844. @num_base[index][1] -= 5 + @hit * 2
  845. when min-3..min-2
  846. @num_base[index][0] += @direction * @hit
  847. @num_base[index][1] -= 4 + @hit * 2
  848. when min-6..min-4
  849. @num_base[index][0] += @direction
  850. @num_base[index][1] -= 3 + @hit * 2
  851. when min-14..min-7
  852. @num_base[index][0] += @direction
  853. @num_base[index][1] += 2
  854. when min-17..min-15
  855. @num_base[index][1] -= 2 + @hit * 2
  856. when min-23..min-18
  857. @num_base[index][1] += 1
  858. when min-27..min-24
  859. @num_base[index][1] -= 1
  860. when min-30..min-28
  861. @num_base[index][1] += 1
  862. when min-33..min-31
  863. @num_base[index][1] -= 1
  864. when min-36..min-34
  865. @num_base[index][1] += 1
  866. end
  867. num.x = (@num_base[index][0] - $sv_camera.x) * $sv_camera.zoom
  868. num.y = (@num_base[index][1] - $sv_camera.y) * $sv_camera.zoom
  869. num.opacity = 256 - (12 - @time) * 32
  870. num.visible = false if @time == 0
  871. end
  872. #--------------------------------------------------------------------------
  873. # ● 解放
  874. #--------------------------------------------------------------------------
  875. def dispose
  876. @battler.sv.hit = 0
  877. bitmap.dispose if bitmap
  878. for i in [email protected] do @num[i].dispose end if @num != nil
  879. for i in [email protected] do @st[i].dispose end if @st != nil
  880. super
  881. end
  882. end

  883. #==============================================================================
  884. # ■ Window_Skill_name
  885. #------------------------------------------------------------------------------
  886. #  スキル名を表示するウィンドウです。
  887. #==============================================================================
  888. class Window_Skill_name < Window_Base
  889. #--------------------------------------------------------------------------
  890. # ● オブジェクト初期化
  891. #--------------------------------------------------------------------------
  892. def initialize(text)
  893. super(0, 0, Graphics.width, line_height + standard_padding * 2)
  894. draw_text(4, 0, Graphics.width - 64, line_height,text, 1)
  895. end
  896. end

  897. #==============================================================================
  898. # ■ Spriteset_Sideview
  899. #------------------------------------------------------------------------------
  900. #  サイドビュー独自のスプライトをまとめたクラスです。
  901. #==============================================================================
  902. class Spriteset_Sideview
  903. #--------------------------------------------------------------------------
  904. # ● オブジェクト初期化
  905. #--------------------------------------------------------------------------
  906. def initialize(viewport)
  907. @viewport = viewport
  908. @weapons = []
  909. @pictures = []
  910. @back_pic = []
  911. @damage = []
  912. $sv_camera.setup
  913. N03.camera(nil, N03::BATTLE_CAMERA["ターン開始前"].dup)
  914. end
  915. #--------------------------------------------------------------------------
  916. # ● フレーム更新
  917. #--------------------------------------------------------------------------
  918. def update
  919. update_battler_data
  920. update_damage
  921. update_pictures
  922. update_back_pic
  923. update_weapons
  924. end
  925. #--------------------------------------------------------------------------
  926. # ● バトラーデータの更新
  927. #--------------------------------------------------------------------------
  928. def update_battler_data
  929. for battler in $game_party.battle_members + $game_troop.members
  930. weapon_end(battler) if battler.sv.weapon_end
  931. next if battler.sv.effect_data == []
  932. for effect_data in battler.sv.effect_data do set_effects(battler, effect_data) end
  933. end
  934. end
  935. #--------------------------------------------------------------------------
  936. # ● ダメージ画像の更新
  937. #--------------------------------------------------------------------------
  938. def update_damage
  939. for i in [email protected]
  940. next if @damage[i] == nil
  941. @damage[i].update if @damage[i] != nil
  942. next if !@damage[i].action_end
  943. @damage[i].dispose
  944. @damage[i] = nil
  945. end
  946. end
  947. #--------------------------------------------------------------------------
  948. # ● ピクチャアクションの更新
  949. #--------------------------------------------------------------------------
  950. def update_pictures
  951. for i in [email protected]
  952. next if @pictures[i] == nil
  953. @pictures[i].update if @pictures[i] != nil
  954. next if !@pictures[i].action_end
  955. @pictures[i].dispose
  956. @pictures[i] = nil
  957. end
  958. end
  959. #--------------------------------------------------------------------------
  960. # ● 周期ピクチャの更新
  961. #--------------------------------------------------------------------------
  962. def update_back_pic
  963. set_back_pic if $sv_camera.program_picture != []
  964. for i in 0...@back_pic.size
  965. next if @back_pic[i] == nil
  966. @back_pic[i].update if @back_pic[i] != nil
  967. next if !@back_pic[i].action_end
  968. @back_pic[i].dispose
  969. @back_pic[i] = nil
  970. end
  971. end
  972. #--------------------------------------------------------------------------
  973. # ● 武器アクションの更新
  974. #--------------------------------------------------------------------------
  975. def update_weapons
  976. for i in [email protected]
  977. next if @weapons[i] == nil
  978. @weapons[i].update if @weapons[i] != nil
  979. next if !@weapons[i].action_end
  980. @weapons[i].dispose
  981. @weapons[i] = nil
  982. end
  983. end
  984. #--------------------------------------------------------------------------
  985. # ● ダメージ実行
  986. #--------------------------------------------------------------------------
  987. def set_damage_pop(target)
  988. for i in [email protected]
  989. next if @damage[i] != nil
  990. return @damage[i] = Sprite_Damage.new(@viewport, target)
  991. end
  992. @damage.push(Sprite_Damage.new(@viewport, target))
  993. end
  994. #--------------------------------------------------------------------------
  995. # ● 周期ピクチャ実行
  996. #--------------------------------------------------------------------------
  997. def set_back_pic
  998. for data in $sv_camera.program_picture
  999. if @back_pic[data[2]] != nil
  1000. @back_pic[data[2]].dispose
  1001. @back_pic[data[2]] = nil
  1002. end
  1003. @back_pic[data[2]] = Sprite_Back_Picture.new(@viewport, data[2])
  1004. @back_pic[data[2]].setup(data)
  1005. end
  1006. $sv_camera.program_picture = []
  1007. end
  1008. #--------------------------------------------------------------------------
  1009. # ● エフェクト開始
  1010. #--------------------------------------------------------------------------
  1011. def set_effects(battler, effect_data)
  1012. case effect_data[0]
  1013. when "pic" ; set_pictures(battler, effect_data)
  1014. when "wp" ; set_weapons(battler, true)
  1015. when "m_a" ; set_weapons(battler, false)
  1016. end
  1017. end
  1018. #--------------------------------------------------------------------------
  1019. # ● ピクチャアクション実行
  1020. #--------------------------------------------------------------------------
  1021. def set_pictures(battler, effect_data)
  1022. @pictures[effect_data[1]] = Sprite_Battle_Picture.new if @pictures[effect_data[1]] == nil
  1023. @pictures[effect_data[1]].set(battler)
  1024. end
  1025. #--------------------------------------------------------------------------
  1026. # ● 武器アクション実行
  1027. #--------------------------------------------------------------------------
  1028. def set_weapons(battler, weapon_flag, test = true)
  1029. for i in [email protected]
  1030. next if @weapons[i] != nil
  1031. @weapons[i] = Sprite_Weapon.new(@viewport, i, battler)
  1032. battler.sv.weapon_index.push(i) if weapon_flag
  1033. return i
  1034. end
  1035. @weapons.push(Sprite_Weapon.new(@viewport, @weapons.size, battler))
  1036. battler.sv.weapon_index.push(@weapons.size - 1) if weapon_flag
  1037. return @weapons.size - 1
  1038. end
  1039. #--------------------------------------------------------------------------
  1040. # ● バトラーの武器アクション終了
  1041. #--------------------------------------------------------------------------
  1042. def weapon_end(battler)
  1043. battler.sv.weapon_end = false
  1044. for index in battler.sv.weapon_index
  1045. weapon_index = battler.sv.weapon_index.shift
  1046. @weapons[weapon_index].dispose if @weapons[weapon_index] != nil
  1047. @weapons[weapon_index] = nil
  1048. end
  1049. battler.sv.weapon_index.compact!
  1050. end
  1051. #--------------------------------------------------------------------------
  1052. # ● ヒット時の戦闘アニメ実行
  1053. #--------------------------------------------------------------------------
  1054. def set_hit_animation(battler, weapon_index, hit_targets, miss)
  1055. weapon = @weapons[weapon_index]
  1056. for target in hit_targets
  1057. next @weapons[@hit_index].timing_battler_set(target) if @hit_index != nil
  1058. @hit_index = set_weapons(battler, false, false)
  1059. @weapons[@hit_index].set_hit_animation(weapon.hit_position, weapon.hit_anime_id, target)
  1060. end
  1061. @hit_index = nil
  1062. if !weapon.through && !miss
  1063. @weapons[weapon_index].dispose
  1064. @weapons[weapon_index] = nil
  1065. else
  1066. @weapons[weapon_index].through_change
  1067. end
  1068. end
  1069. #--------------------------------------------------------------------------
  1070. # ● サイドビューデータの初期化
  1071. #--------------------------------------------------------------------------
  1072. def reset_sideview
  1073. $sv_camera.reset
  1074. for member in $game_troop.members + $game_party.battle_members do member.sv.reset end
  1075. end
  1076. #--------------------------------------------------------------------------
  1077. # ● 解放
  1078. #--------------------------------------------------------------------------
  1079. def dispose
  1080. dispose_effects(@weapons)
  1081. dispose_effects(@pictures)
  1082. dispose_effects(@back_pic)
  1083. dispose_effects(@damage)
  1084. reset_sideview
  1085. end
  1086. #--------------------------------------------------------------------------
  1087. # ● エフェクト画像の解放
  1088. #--------------------------------------------------------------------------
  1089. def dispose_effects(effects)
  1090. for i in 0...effects.size
  1091. effects[i].dispose if effects[i] != nil
  1092. effects[i] = nil
  1093. end
  1094. end
  1095. end


  1096. #==============================================================================
  1097. # ■ Sprite_Battle_Back
  1098. #------------------------------------------------------------------------------
  1099. #  戦闘背景用のスプライトです。
  1100. #==============================================================================
  1101. class Sprite_Battle_Back < Plane
  1102. #--------------------------------------------------------------------------
  1103. # ● オブジェクト初期化
  1104. #--------------------------------------------------------------------------
  1105. def initialize(viewport = nil, index, battleback_name)
  1106. super(viewport)
  1107. @index = index
  1108. if @index == 1
  1109. data = N03::FLOOR1_DATA[battleback_name]
  1110. data = N03::FLOOR1_DATA["全Battlebacks1"] if data == nil
  1111. elsif @index == 2
  1112. data = N03::FLOOR2_DATA[battleback_name]
  1113. data = N03::FLOOR2_DATA["全Battlebacks2"] if data == nil
  1114. end
  1115. data = data.dup
  1116. @adjust_position = data[0]
  1117. @zoom_x = data[1][0] / 100.0
  1118. @zoom_y = data[1][1] / 100.0
  1119. @shake_on = data[2]
  1120. $game_switches[data[3]] = true if data[3] > 0
  1121. $sv_camera.switches[data[3].abs] = true if data[3] < 0
  1122. reset_scroll
  1123. reset_back_data(battleback_name)
  1124. end
  1125. #--------------------------------------------------------------------------
  1126. # ● 背景スクロールを初期化
  1127. #--------------------------------------------------------------------------
  1128. def reset_scroll
  1129. @scroll_x = 0
  1130. @scroll_y = 0
  1131. @move_x = 0
  1132. @move_y = 0
  1133. end
  1134. #--------------------------------------------------------------------------
  1135. # ● 背景データを初期化
  1136. #--------------------------------------------------------------------------
  1137. def reset_back_data(battleback_name)
  1138. @back_data = []
  1139. @active_data = ["scroll",0, @move_x, @move_y, false, battleback_name,""]
  1140. start_back_data(@active_data)
  1141. end
  1142. #--------------------------------------------------------------------------
  1143. # ● 背景画像のセッティング
  1144. #--------------------------------------------------------------------------
  1145. def set_graphics(new_bitmap)
  1146. self.bitmap = new_bitmap
  1147. @base_x = (self.bitmap.width * @zoom_x - Graphics.width) / 2 + @adjust_position[0]
  1148. @base_y = (self.bitmap.height * @zoom_y - Graphics.height) / 2 + @adjust_position[1]
  1149. # 限界座標を取得
  1150. max_top = 0
  1151. max_bottom = self.bitmap.height * @zoom_y - Graphics.height
  1152. max_left = 0
  1153. max_right = self.bitmap.width * @zoom_x - Graphics.width
  1154. exist = true
  1155. exist = false if self.bitmap.height == 32 && self.bitmap.width == 32
  1156. $sv_camera.setting(@index, [max_top, max_bottom, max_left, max_right, @base_x, @base_y,exist])
  1157. end
  1158. #--------------------------------------------------------------------------
  1159. # ● フレーム更新
  1160. #--------------------------------------------------------------------------
  1161. def update
  1162. return if !bitmap
  1163. update_back_data
  1164. update_scroll unless @move_x == 0 && @move_y == 0
  1165. update_color
  1166. update_position
  1167. update_back_adjust if @bt_back != nil
  1168. create_back_adjust if @bt_back == nil && !@active_data[10] && @scroll_x == 0 && @scroll_y == 0
  1169. end
  1170. #--------------------------------------------------------------------------
  1171. # ● 背景データを更新
  1172. #--------------------------------------------------------------------------
  1173. def update_back_data
  1174. delete = true if @active_data[1] > 0 && !$game_switches[@active_data[1]]
  1175. delete = true if @active_data[1] < 0 && !$sv_camera.switches[@active_data[1].abs]
  1176. return if !delete
  1177. for i in 0...@back_data.size
  1178. @back_data[i] = nil if @back_data[i][1] > 0 && !$game_switches[@back_data[i][1]]
  1179. @back_data[i] = nil if @back_data[i][1] < 0 && !$sv_camera.switches[@back_data[i][1].abs]
  1180. end
  1181. @back_data.compact!
  1182. next_back_data
  1183. end
  1184. #--------------------------------------------------------------------------
  1185. # ● 次の背景データをセット
  1186. #--------------------------------------------------------------------------
  1187. def next_back_data
  1188. @back_data.delete(@active_data[11]) if @active_data[11] != nil
  1189. @back_data.push(@active_data[11]) if @active_data[11] != nil
  1190. @active_data = nil
  1191. data = @back_data.pop
  1192. @back_data = [@active_data] if @back_data.size == 0
  1193. start_back_data(data)
  1194. end
  1195. #--------------------------------------------------------------------------
  1196. # ● 背景データを実行
  1197. #--------------------------------------------------------------------------
  1198. def start_back_data(data)
  1199. return if back_data_remain(data)
  1200. bt_back_dispose
  1201. pre_active_data = @active_data
  1202. @active_data[8] = [@back_name, @move_x, @move_y, @scroll_x, @scroll_y] if @active_data != nil
  1203. @back_data.push(@active_data) if @active_data != nil
  1204. @active_data = data.dup
  1205. @active_data[5] = @back_name if @active_data[5] == ""
  1206. @active_data[9] = set_back_adjust if @active_data[9] == nil
  1207. back_data_scroll_on if @active_data[8] == nil && @active_data[9][0] == false
  1208. set_remain_back_data if @active_data[8] != nil
  1209. create_back(@active_data[5]) if @active_data[9][0] == false
  1210. create_back_adjust if @active_data[10]
  1211. @active_data[11] = pre_active_data if pre_active_data && @active_data[7] == false
  1212. end
  1213. #--------------------------------------------------------------------------
  1214. # ● 背景データの保留
  1215. #--------------------------------------------------------------------------
  1216. def back_data_remain(data)
  1217. remain = false
  1218. remain = true if data[6] != "" && @active_data != nil && @active_data[9] != nil && @active_data[9][0] != false
  1219. remain = true if @active_data != nil && @active_data[7] == false
  1220. return remain if !remain
  1221. @remain = true
  1222. @back_data.push(data)
  1223. return remain
  1224. end
  1225. #--------------------------------------------------------------------------
  1226. # ● 背景変更補正データをセット
  1227. #--------------------------------------------------------------------------
  1228. def set_back_adjust
  1229. bt_adjust = []
  1230. sign = -1
  1231. if @active_data[6] == ""
  1232. reset_scroll if @active_data[3][0] == 0 && @active_data[3][1] == 0
  1233. bt_adjust = [false,false,0,0]
  1234. return bt_adjust
  1235. elsif @move_x != 0 or @active_data[3][0] != 0
  1236. sign = 1 if @move_x < 0
  1237. bt_adjust[0] = [self.bitmap.width * @zoom_x * sign, 0]
  1238. bt_adjust[1] = [self.bitmap.width * @zoom_x * sign * 2, 0]
  1239. elsif @move_y != 0 or @active_data[3][1] != 0
  1240. sign = 1 if @move_y < 0
  1241. bt_adjust[0] = [0, self.bitmap.height * @zoom_y * sign]
  1242. bt_adjust[1] = [0, self.bitmap.height * @zoom_y * sign * 2]
  1243. else
  1244. reset_scroll if @active_data[3][0] == 0 && @active_data[3][1] == 0
  1245. bt_adjust = [false,false,0,0]
  1246. return bt_adjust
  1247. end
  1248. bt_adjust[2] = [bt_adjust[0][0], bt_adjust[0][1]]
  1249. return bt_adjust
  1250. end
  1251. #--------------------------------------------------------------------------
  1252. # ● 背景スクロールデータを実行
  1253. #--------------------------------------------------------------------------
  1254. def back_data_scroll_on
  1255. mirror = $sv_camera.mirror
  1256. mirror = false if !@active_data[4]
  1257. @move_x = @active_data[3][0]
  1258. @move_x *= -1 if mirror
  1259. @move_y = @active_data[3][1]
  1260. end
  1261. #--------------------------------------------------------------------------
  1262. # ● 保持している背景データを実行
  1263. #--------------------------------------------------------------------------
  1264. def set_remain_back_data
  1265. return back_data_scroll_on if @move_x != 0 or @move_y != 0
  1266. create_back(@active_data[8][0])
  1267. @move_x = @active_data[8][1]
  1268. @move_y = @active_data[8][2]
  1269. @scroll_x = @active_data[8][3]
  1270. @scroll_y = @active_data[8][4]
  1271. end
  1272. #--------------------------------------------------------------------------
  1273. # ● 背景画像の作成
  1274. #--------------------------------------------------------------------------
  1275. def create_back(back_name)
  1276. return if back_name == @back_name or back_name == ""
  1277. self.bitmap = Cache.battleback1(back_name) if @index == 1
  1278. self.bitmap = Cache.battleback2(back_name) if @index == 2
  1279. @back_name = back_name
  1280. end
  1281. #--------------------------------------------------------------------------
  1282. # ● 背景変更補正画像の作成
  1283. #--------------------------------------------------------------------------
  1284. def create_back_adjust
  1285. return if @active_data[9][0] == false
  1286. @active_data[10] = true
  1287. mirror = $sv_camera.mirror
  1288. mirror = false if !@active_data[4]
  1289. @bt_back = []
  1290. @bt_back[0] = Sprite.new(viewport)
  1291. @bt_back[0].bitmap = Cache.battleback1(@active_data[6]) if @index == 1
  1292. @bt_back[0].bitmap = Cache.battleback2(@active_data[6]) if @index == 2
  1293. @bt_back[0].mirror = mirror
  1294. @bt_back[1] = Sprite.new(viewport)
  1295. @bt_back[1].bitmap = Cache.battleback1(@active_data[5]) if @index == 1
  1296. @bt_back[1].bitmap = Cache.battleback2(@active_data[5]) if @index == 2
  1297. @bt_back[1].mirror = mirror
  1298. end
  1299. #--------------------------------------------------------------------------
  1300. # ● 背景スクロールの更新
  1301. #--------------------------------------------------------------------------
  1302. def update_scroll
  1303. @scroll_x += @move_x
  1304. @scroll_y += @move_y
  1305. @scroll_x = 0 if @scroll_x / 100 >= self.bitmap.width * @zoom_x or @scroll_x / 100 <= -self.bitmap.width * @zoom_x
  1306. @scroll_y = 0 if @scroll_y / 100 >= self.bitmap.height * @zoom_y or @scroll_y / 100 <= -self.bitmap.height * @zoom_y
  1307. end
  1308. #--------------------------------------------------------------------------
  1309. # ● 色調変更の更新
  1310. #--------------------------------------------------------------------------
  1311. def update_color
  1312. color_set if $sv_camera.color_set[@index] != nil
  1313. return if @color_data == nil
  1314. @color_data[4] -= 1
  1315. if @color_data[4] == 0 && @color_data[5] != 0
  1316. @color_data[4] = @color_data[5]
  1317. @color_data[5] = 0
  1318. @color_data[6] = [0,0,0,0]
  1319. elsif @color_data[4] == 0
  1320. @remain_color_data = @color_data
  1321. return @color_data = nil
  1322. end
  1323. for i in 0..3
  1324. @color_data[i] = (@color_data[i] * (@color_data[4] - 1) + @color_data[6][i]) / @color_data[4]
  1325. end
  1326. self.color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3])
  1327. end
  1328. #--------------------------------------------------------------------------
  1329. # ● 座標の更新
  1330. #--------------------------------------------------------------------------
  1331. def update_position
  1332. self.ox = $sv_camera.x + @base_x - @scroll_x / 100
  1333. self.oy = $sv_camera.y + @base_y - @scroll_y / 100
  1334. self.ox -= $sv_camera.sx / 100 if @shake_on
  1335. self.oy -= $sv_camera.sy / 100 if @shake_on
  1336. self.zoom_x = @zoom_x * $sv_camera.zoom
  1337. self.zoom_y = @zoom_y * $sv_camera.zoom
  1338. self.ox *= $sv_camera.zoom
  1339. self.oy *= $sv_camera.zoom
  1340. self.z = @index * 10
  1341. end
  1342. #--------------------------------------------------------------------------
  1343. # ● 背景変更補正画像を更新
  1344. #--------------------------------------------------------------------------
  1345. def update_back_adjust
  1346. @active_data[9][0][0] = 0 if @scroll_x == 0
  1347. @active_data[9][0][1] = 0 if @scroll_y == 0
  1348. @active_data[9][1][0] -= @active_data[9][2][0] if @scroll_x == 0
  1349. @active_data[9][1][1] -= @active_data[9][2][1] if @scroll_y == 0
  1350. for i in 0...@bt_back.size
  1351. @bt_back[i].x = -self.ox + @active_data[9][i][0] * $sv_camera.zoom
  1352. @bt_back[i].y = -self.oy + @active_data[9][i][1] * $sv_camera.zoom
  1353. @bt_back[i].zoom_x = self.zoom_x
  1354. @bt_back[i].zoom_y = self.zoom_y
  1355. @bt_back[i].z = self.z + 1
  1356. @bt_back[i].color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3]) if @color_data != nil
  1357. end
  1358. back_data_scroll_on if @active_data[9][0][0] == 0 && @active_data[9][0][1] == 0
  1359. return unless @active_data[9][1][0] == 0 && @active_data[9][1][1] == 0
  1360. bt_back_dispose
  1361. create_back(@active_data[5])
  1362. @active_data[9][0] = false
  1363. next_back_data if @remain && @back_data.size != 1
  1364. @remain = false
  1365. end
  1366. #--------------------------------------------------------------------------
  1367. # ● 色調変更
  1368. #--------------------------------------------------------------------------
  1369. def color_set
  1370. set = $sv_camera.color_set[@index]
  1371. $sv_camera.color_set[@index] = nil
  1372. set[4] = 1 if set[4] == 0
  1373. @remain_color_data = [0,0,0,0] if @remain_color_data == nil
  1374. @color_data = @remain_color_data
  1375. @color_data[4] = set[4]
  1376. @color_data[5] = set[5]
  1377. @color_data[6] = set
  1378. end
  1379. #--------------------------------------------------------------------------
  1380. # ● 背景変更補正画像の解放
  1381. #--------------------------------------------------------------------------
  1382. def bt_back_dispose
  1383. for i in 0...@bt_back.size do @bt_back[i].dispose end if @bt_back != nil
  1384. @bt_back = nil
  1385. end
  1386. #--------------------------------------------------------------------------
  1387. # ● 解放
  1388. #--------------------------------------------------------------------------
  1389. def dispose
  1390. bitmap.dispose if bitmap
  1391. bt_back_dispose
  1392. super
  1393. end
  1394. end

  1395. #==============================================================================
  1396. # ■ Battle_Camera
  1397. #------------------------------------------------------------------------------
  1398. #  戦闘カメラやバトルプログラムを扱うクラスです。
  1399. #==============================================================================
  1400. class Battle_Camera
  1401. #--------------------------------------------------------------------------
  1402. # ● 公開インスタンス変数 
  1403. #--------------------------------------------------------------------------
  1404. attr_reader :sx # シェイクX座標
  1405. attr_reader :sy # シェイクY座標
  1406. attr_reader :max_top # 上限界座標
  1407. attr_reader :max_bottom # 下限界座標
  1408. attr_reader :max_left # 左限界座標
  1409. attr_reader :max_right # 右限界座標
  1410. attr_accessor :switches # サイドビュー専用スイッチ
  1411. attr_accessor :color_set # 色調変更データ
  1412. attr_accessor :wait # 戦闘シーンの強制ウエイト
  1413. attr_accessor :win_wait # 戦闘勝利前のウエイト
  1414. attr_accessor :mirror # 画面反転フラグ
  1415. attr_accessor :program_scroll # バトルプログラム 背景の自動スクロール
  1416. attr_accessor :program_picture # バトルプログラム 周期ピクチャ
  1417. attr_accessor :event # コモンイベント呼び出し
  1418. #--------------------------------------------------------------------------
  1419. # ● オブジェクト初期化
  1420. #--------------------------------------------------------------------------
  1421. def initialize
  1422. @switches = []
  1423. @max_data = []
  1424. @color_set = []
  1425. @wait = 0
  1426. @win_wait = false
  1427. @mirror = false
  1428. @event = false
  1429. setup
  1430. end
  1431. #--------------------------------------------------------------------------
  1432. # ● カメラX座標
  1433. #--------------------------------------------------------------------------
  1434. def x
  1435. return @x / 100
  1436. end
  1437. #--------------------------------------------------------------------------
  1438. # ● カメラY座標
  1439. #--------------------------------------------------------------------------
  1440. def y
  1441. return @y / 100
  1442. end
  1443. #--------------------------------------------------------------------------
  1444. # ● ズーム率
  1445. #--------------------------------------------------------------------------
  1446. def zoom
  1447. return @zoom * 0.001
  1448. end
  1449. #--------------------------------------------------------------------------
  1450. # ● ズーム率による座標変換
  1451. #--------------------------------------------------------------------------
  1452. def convert
  1453. return @zoom
  1454. end
  1455. #--------------------------------------------------------------------------
  1456. # ● カメラセットアップ
  1457. #--------------------------------------------------------------------------
  1458. def setup
  1459. @x = 0
  1460. @y = 0
  1461. @sx = 0
  1462. @sy = 0
  1463. @zoom = 1000
  1464. @time = 0
  1465. @shake_time = 0
  1466. program_setup
  1467. end
  1468. #--------------------------------------------------------------------------
  1469. # ● カメラ初期化
  1470. #--------------------------------------------------------------------------
  1471. def reset
  1472. @switches = []
  1473. @max_data = []
  1474. @color_set = []
  1475. @wait = 0
  1476. @win_wait = false
  1477. @mirror = false
  1478. program_setup(false)
  1479. end
  1480. #--------------------------------------------------------------------------
  1481. # ● バトルプログラムのセットアップ
  1482. #--------------------------------------------------------------------------
  1483. def program_setup(check = true)
  1484. @played_program = []
  1485. @program_switch = []
  1486. @program_sound = []
  1487. @program_scroll = []
  1488. @program_se = []
  1489. @program_shake = []
  1490. @program_color = []
  1491. @program_picture = []
  1492. @program_base = N03::BATTLE_PROGRAM.values.dup
  1493. program_check if check
  1494. end
  1495. #--------------------------------------------------------------------------
  1496. # ● バトルプログラムのチェック
  1497. #--------------------------------------------------------------------------
  1498. def program_check
  1499. for data in @program_base
  1500. if program_start?(data) && !@played_program.include?(data)
  1501. @played_program.push(data.dup)
  1502. @program_scroll.push(data.dup) if data[0] == "scroll"
  1503. @program_picture.push(data.dup) if data[0] == "kpic"
  1504. start_sound(data.dup) if data[0] == "sound"
  1505. start_program_switch(data.dup) if data[0] == "switch"
  1506. start_program_se(data.dup) if data[0] == "keep_se"
  1507. start_program_shake(data.dup) if data[0] == "keep_sk"
  1508. start_program_color(data.dup) if data[0] == "keep_c"
  1509. else
  1510. @played_program.delete(data) if !program_start?(data)
  1511. @program_scroll.delete(data) if data[0] == "scroll"
  1512. @program_picture.delete(data) if data[0] == "kpic"
  1513. @program_switch.delete(data) if data[0] == "switch"
  1514. @program_sound.delete(data) if data[0] == "sound"
  1515. @program_se.delete(data) if data[0] == "keep_se"
  1516. @program_shake.delete(data) if data[0] == "keep_sk"
  1517. @program_color.delete(data) if data[0] == "keep_c"
  1518. end
  1519. end
  1520. end
  1521. #--------------------------------------------------------------------------
  1522. # ● バトルプログラムの開始
  1523. #--------------------------------------------------------------------------
  1524. def program_start?(data)
  1525. start = false
  1526. start = true if $game_switches[data[1].abs] && data[1] > 0
  1527. start = true if @switches[data[1].abs] && data[1] < 0
  1528. return start
  1529. end
  1530. #--------------------------------------------------------------------------
  1531. # ● バトルプログラム スイッチ操作の開始
  1532. #--------------------------------------------------------------------------
  1533. def start_program_switch(data)
  1534. data[4] = data[4] + rand(data[5] + 1)
  1535. data[4] = 1 if data[4] <= 0
  1536. @program_switch.push(data)
  1537. end
  1538. #--------------------------------------------------------------------------
  1539. # ● スイッチ操作の更新
  1540. #--------------------------------------------------------------------------
  1541. def update_program_switch
  1542. for data in @program_switch
  1543. data[4] -= 1
  1544. next @program_switch.delete(data) if data[1] > 0 && !$game_switches[data[1]]
  1545. next @program_switch.delete(data) if data[1] < 0 && !@switches[data[1].abs]
  1546. next if data[4] != 0
  1547. for id in data[2]
  1548. $game_switches[id] = true if id > 0
  1549. @switches[id.abs] = true if id < 0
  1550. end
  1551. for id in data[3]
  1552. $game_switches[id] = false if id > 0
  1553. @switches[id.abs] = false if id < 0
  1554. end
  1555. @program_switch.delete(data)
  1556. program_check
  1557. end
  1558. end
  1559. #--------------------------------------------------------------------------
  1560. # ● バトルプログラム BGM/BGSの開始
  1561. #--------------------------------------------------------------------------
  1562. def start_sound(data)
  1563. @program_sound.push(data)
  1564. name = data[5]
  1565. case data[2]
  1566. when "se"
  1567. Audio.se_play("Audio/SE/" + name, data[4], data[3])
  1568. when "bgm"
  1569. name = RPG::BGM.last.name if data[5] == ""
  1570. Audio.bgm_play("Audio/BGM/" + name, data[4], data[3])
  1571. when "bgs"
  1572. name = RPG::BGS.last.name if data[5] == ""
  1573. Audio.bgs_play("Audio/BGS/" + name, data[4], data[3])
  1574. end
  1575. end
  1576. #--------------------------------------------------------------------------
  1577. # ● バトルプログラム 周期SEの開始
  1578. #--------------------------------------------------------------------------
  1579. def start_program_se(data)
  1580. data[3] = [data[2], data[3]]
  1581. data[2] = data[3][0] + rand(data[3][1] + 1)
  1582. @program_se.push(data)
  1583. Audio.se_play("Audio/SE/" + data[7], data[5], data[4]) if data[6]
  1584. end
  1585. #--------------------------------------------------------------------------
  1586. # ● 周期SEの更新
  1587. #--------------------------------------------------------------------------
  1588. def update_program_se
  1589. for data in @program_se
  1590. data[2] -= 1
  1591. next @program_se.delete(data) if data[1] > 0 && !$game_switches[data[1]]
  1592. next @program_se.delete(data) if data[1] < 0 && !@switches[data[1].abs]
  1593. next if data[2] != 0
  1594. Audio.se_play("Audio/SE/" + data[7], data[5], data[4])
  1595. data[2] = data[3][0] + rand(data[3][1] + 1)
  1596. end
  1597. end
  1598. #--------------------------------------------------------------------------
  1599. # ● バトルプログラム 周期シェイクの開始
  1600. #--------------------------------------------------------------------------
  1601. def start_program_shake(data)
  1602. data[3] = [data[2], data[3]]
  1603. data[2] = data[3][0] + rand(data[3][1] + 1)
  1604. @program_shake.push(data)
  1605. shake(data[4], data[5], data[6]) if data[7]
  1606. end
  1607. #--------------------------------------------------------------------------
  1608. # ● 周期シェイクの更新
  1609. #--------------------------------------------------------------------------
  1610. def update_program_shake
  1611. for data in @program_shake
  1612. data[2] -= 1
  1613. next @program_shake.delete(data) if data[1] > 0 && !$game_switches[data[1]]
  1614. next @program_shake.delete(data) if data[1] < 0 && !@switches[data[1].abs]
  1615. next if data[2] != 0
  1616. shake(data[4], data[5], data[6])
  1617. data[2] = data[3][0] + rand(data[3][1] + 1)
  1618. end
  1619. end
  1620. #--------------------------------------------------------------------------
  1621. # ● バトルプログラム 周期色調変更の開始
  1622. #--------------------------------------------------------------------------
  1623. def start_program_color(data)
  1624. data[3] = [data[2], data[3]]
  1625. data[2] = data[3][0] + rand(data[3][1] + 1)
  1626. data[7] = true if data[4] == 0 or data[4] == 4
  1627. case data[4]
  1628. when 1 ;data[4] = $game_troop.members
  1629. when 2 ;data[4] = $game_party.battle_members
  1630. when 3,4 ;data[4] = $game_troop.members + $game_party.battle_members
  1631. else ;data[4] = []
  1632. end
  1633. @program_color.push(data)
  1634. return if !data[6]
  1635. for target in data[4] do target.sv.color_set = data[5] end if data[4] != []
  1636. @color_set[1] = data[5] if data[7]
  1637. @color_set[2] = data[5] if data[7]
  1638. end
  1639. #--------------------------------------------------------------------------
  1640. # ● 周期色調変更の更新
  1641. #--------------------------------------------------------------------------
  1642. def update_program_color
  1643. for data in @program_color
  1644. data[2] -= 1
  1645. next @program_color.delete(data) if data[1] > 0 && !$game_switches[data[1]]
  1646. next @program_color.delete(data) if data[1] < 0 && !@switches[data[1].abs]
  1647. next if data[2] != 0
  1648. for target in data[4] do target.sv.color_set = data[5] end if data[4] != []
  1649. @color_set[1] = data[5] if data[7]
  1650. @color_set[2] = data[5] if data[7]
  1651. data[2] = data[3][0] + rand(data[3][1] + 1)
  1652. end
  1653. end
  1654. #--------------------------------------------------------------------------
  1655. # ● トランジション実行
  1656. #--------------------------------------------------------------------------
  1657. def perform_transition(data)
  1658. Graphics.transition(data[2], "Graphics/Pictures/" + data[3], data[1])
  1659. end
  1660. #--------------------------------------------------------------------------
  1661. # ● 背景からカメラの限界値を取得 data = [max_top, max_bottom, max_left, max_right]
  1662. #--------------------------------------------------------------------------
  1663. def setting(index, data)
  1664. @max_data[index - 1] = data
  1665. return if index != 2
  1666. setup
  1667. # カメラの中心座標
  1668. @center_x = (Graphics.width / 2 + N03::CAMERA_POSITION[0]) * 100
  1669. @center_y = (Graphics.height / 2 + N03::CAMERA_POSITION[1]) * 100
  1670. # 上下左右の移動限界距離
  1671. @max_top = [@max_data[0][5], @max_data[1][5]].min * -1
  1672. @max_bottom = [@max_data[0][1], @max_data[1][1]].min + @max_top
  1673. @max_left = [@max_data[0][4], @max_data[1][4]].min * -1
  1674. @max_right = [@max_data[0][3], @max_data[1][3]].min + @max_left
  1675. exist_data = @max_data[0] if !@max_data[1][6]
  1676. exist_data = @max_data[1] if !@max_data[0][6]
  1677. @max_top = exist_data[5] * -1 if exist_data != nil
  1678. @max_bottom = exist_data[1] + @max_top if exist_data != nil
  1679. @max_left = exist_data[4] * -1 if exist_data != nil
  1680. @max_right = exist_data[3] + @max_left if exist_data != nil
  1681. @max_top = @max_bottom = @max_left = @max_right = 0 if !@max_data[1][6] && !@max_data[0][6]
  1682. @max_width = @max_right - @max_left + Graphics.width
  1683. @max_height = @max_bottom - @max_top + Graphics.height
  1684. # ズームアウト限界値
  1685. max_zoom_x = 100 * Graphics.width / @max_width
  1686. max_zoom_y = 100 * Graphics.height / @max_height
  1687. @max_zoom_out = [max_zoom_x, max_zoom_y].max
  1688. end
  1689. #--------------------------------------------------------------------------
  1690. # ● カメラ移動
  1691. #--------------------------------------------------------------------------
  1692. def move(target_x, target_y, zoom, time, screen = true)
  1693. # 戦闘背景以上のサイズまでズームアウトしないよう調整
  1694. @target_zoom = [zoom * 0.01, @max_zoom_out * 0.01].max
  1695. target_x *= -1 if screen && @mirror
  1696. # ズーム分の中心座標補正
  1697. if screen && @target_zoom != 1
  1698. target_x = target_x + @center_x
  1699. target_y = target_y + @center_y
  1700. end
  1701. adjust_x = @center_x * (@target_zoom - 1) / (@target_zoom ** 2 - @target_zoom)
  1702. adjust_y = @center_y * (@target_zoom - 1) / (@target_zoom ** 2 - @target_zoom)
  1703. adjust_x = 0 if adjust_x.nan?
  1704. adjust_y = 0 if adjust_y.nan?
  1705. adjust_x = @center_x if !screen && adjust_x == 0
  1706. adjust_y = @center_y if !screen && adjust_y == 0
  1707. @target_x = target_x - adjust_x.to_i
  1708. @target_y = target_y - adjust_y.to_i
  1709. @target_zoom = (@target_zoom * 1000).to_i
  1710. @zoom = @zoom.to_i
  1711. limit_test
  1712. # 時間0の場合は即実行
  1713. return @time = time.abs if time != 0
  1714. @time = 1
  1715. update
  1716. end
  1717. #--------------------------------------------------------------------------
  1718. # ● 限界座標の試算
  1719. #--------------------------------------------------------------------------
  1720. def limit_test
  1721. new_width = @max_width * @target_zoom / 1000
  1722. new_height = @max_height * @target_zoom / 1000
  1723. new_max_right = @max_right - (@max_width - new_width)
  1724. new_max_bottom = @max_bottom - (@max_height - new_height)
  1725. # 画面の移動先が限界の場合、限界座標をセット
  1726. if @target_x < @max_left * 100
  1727. @target_x = @max_left * 100
  1728. end
  1729. if @target_x > new_max_right * 100
  1730. @target_x = new_max_right * 100
  1731. end
  1732. if @target_y < @max_top * 100
  1733. @target_y = @max_top * 100
  1734. end
  1735. if @target_y > new_max_bottom * 100
  1736. @target_y = new_max_bottom * 100
  1737. end
  1738. end
  1739. #--------------------------------------------------------------------------
  1740. # ● 画面のシェイク
  1741. #--------------------------------------------------------------------------
  1742. def shake(power, speed, time)
  1743. @shake_x = power[0] * 100
  1744. @shake_y = power[1] * 100
  1745. @power_time_base = @power_time = speed
  1746. @shake_time = time
  1747. update_shake
  1748. end
  1749. #--------------------------------------------------------------------------
  1750. # ● シェイクの更新
  1751. #--------------------------------------------------------------------------
  1752. def update_shake
  1753. @sx = (@sx * (@power_time - 1) + @shake_x) / @power_time
  1754. @sy = (@sy * (@power_time - 1) + @shake_y) / @power_time
  1755. @power_time -= 1
  1756. @shake_time -= 1
  1757. return @sx = @sy = 0 if @shake_time == 0
  1758. return if @power_time != 0
  1759. @power_time = @power_time_base
  1760. @shake_x = @shake_x * -4 / 5
  1761. @shake_y = @shake_y * -4 / 5
  1762. end
  1763. #--------------------------------------------------------------------------
  1764. # ● フレーム更新
  1765. #--------------------------------------------------------------------------
  1766. def update
  1767. update_shake if @shake_time != 0
  1768. update_program
  1769. return if @time == 0
  1770. @x = (@x * (@time - 1) + @target_x) / @time
  1771. @y = (@y * (@time - 1) + @target_y) / @time
  1772. @zoom = (@zoom * (@time - 1) + @target_zoom) / @time
  1773. @time -= 1
  1774. end
  1775. #--------------------------------------------------------------------------
  1776. # ● フレーム更新
  1777. #--------------------------------------------------------------------------
  1778. def update_program
  1779. update_program_switch if @program_switch != []
  1780. update_program_se if @program_se != []
  1781. update_program_shake if @program_shake != []
  1782. update_program_color if @program_color != []
  1783. end
  1784. end

  1785. #==============================================================================
  1786. # ■ Scene_Battle
  1787. #------------------------------------------------------------------------------
  1788. #  バトル画面の処理を行うクラスです。
  1789. #==============================================================================
  1790. class Scene_Battle < Scene_Base
  1791. #--------------------------------------------------------------------------
  1792. # ● フレーム更新(基本)
  1793. #--------------------------------------------------------------------------
  1794. alias update_basic_scene_battle_n03 update_basic
  1795. def update_basic
  1796. update_basic_scene_battle_n03
  1797. $sv_camera.update
  1798. $sv_camera.wait = N03::TURN_END_WAIT + 1 if $sv_camera.win_wait
  1799. camera_wait
  1800. end
  1801. #--------------------------------------------------------------------------
  1802. # ● カメラウェイト
  1803. #--------------------------------------------------------------------------
  1804. def camera_wait
  1805. process_event if $sv_camera.event
  1806. $sv_camera.event = false if $sv_camera.event
  1807. while $sv_camera.wait != 0
  1808. Graphics.update
  1809. Input.update
  1810. update_all_windows
  1811. $game_timer.update
  1812. $game_troop.update
  1813. $sv_camera.update
  1814. @spriteset.update
  1815. update_info_viewport
  1816. update_message_open
  1817. $sv_camera.wait -= 1 if $sv_camera.wait > 0
  1818. $sv_camera.wait = 1 if $sv_camera.wait == 0 && @spriteset.effect?
  1819. BattleManager.victory if $sv_camera.win_wait && $sv_camera.wait == 0
  1820. end
  1821. end
  1822. #--------------------------------------------------------------------------
  1823. # ● カメラウェイトのセット
  1824. #--------------------------------------------------------------------------
  1825. def set_camera_wait(time)
  1826. $sv_camera.wait = time
  1827. camera_wait
  1828. end
  1829. #--------------------------------------------------------------------------
  1830. # ● エフェクト実行が終わるまでウェイト ★再定義
  1831. #--------------------------------------------------------------------------
  1832. def wait_for_effect
  1833. end
  1834. #--------------------------------------------------------------------------
  1835. # ● ターン開始
  1836. #--------------------------------------------------------------------------
  1837. alias turn_start_scene_battle_n03 turn_start
  1838. def turn_start
  1839. turn_start_scene_battle_n03
  1840. N03.camera(nil, N03::BATTLE_CAMERA["ターン開始後"].dup)
  1841. end
  1842. #--------------------------------------------------------------------------
  1843. # ● ターン終了
  1844. #--------------------------------------------------------------------------
  1845. alias turn_end_scene_battle_n03 turn_end
  1846. def turn_end
  1847. turn_end_scene_battle_n03
  1848. for member in $game_troop.members + $game_party.members
  1849. N03.set_damage(member, member.sv.result_damage[0],member.sv.result_damage[1])
  1850. member.sv.result_damage = [0,0]
  1851. @spriteset.set_damage_pop(member) if member.result.hp_damage != 0 or member.result.mp_damage != 0
  1852. end
  1853. set_camera_wait(N03::TURN_END_WAIT)
  1854. N03.camera(nil, N03::BATTLE_CAMERA["ターン開始前"].dup) if $game_party.inputable?
  1855. @log_window.clear
  1856. end
  1857. #--------------------------------------------------------------------------
  1858. # ● スキル/アイテムの使用 ★再定義
  1859. #--------------------------------------------------------------------------
  1860. def use_item
  1861. item = @subject.current_action.item
  1862. display_item(item)
  1863. @subject.use_item(item)
  1864. refresh_status
  1865. @targets = @subject.current_action.make_targets.compact
  1866. @targets = [@subject] if @targets.size == 0
  1867. set_substitute(item)
  1868. for time in item.repeats.times do play_sideview(@targets, item) end
  1869. end_reaction(item)
  1870. display_end_item
  1871. end
  1872. #--------------------------------------------------------------------------
  1873. # ● スキル/アイテム名の表示
  1874. #--------------------------------------------------------------------------
  1875. def display_item(item)
  1876. return @log_window.display_use_item(@subject, item) if N03::BATTLE_LOG
  1877. @log_window.off
  1878. @skill_name_window = Window_Skill_name.new(item.name) unless N03::NO_DISPLAY_SKILL_ID.include?(item.id) && item.is_a?(RPG::Skill)
  1879. end
  1880. #--------------------------------------------------------------------------
  1881. # ● スキル/アイテム名の表示終了
  1882. #--------------------------------------------------------------------------
  1883. def display_end_item
  1884. @skill_name_window.dispose if @skill_name_window != nil
  1885. @skill_name_window = nil
  1886. set_camera_wait(N03::ACTION_END_WAIT) if @subject.sv.derivation_skill_id == 0
  1887. @log_window.clear if N03::BATTLE_LOG
  1888. end
  1889. #--------------------------------------------------------------------------
  1890. # ● 反撃/魔法反射/身代わり処理
  1891. #--------------------------------------------------------------------------
  1892. def end_reaction(item)
  1893. end_substitute if @substitute != nil
  1894. set_reflection(item) if @reflection_data != nil
  1895. set_counter_attack if @counter_attacker != nil
  1896. end
  1897. #--------------------------------------------------------------------------
  1898. # ● 反撃の発動 ★再定義
  1899. #--------------------------------------------------------------------------
  1900. def invoke_counter_attack(target, item)
  1901. return if @subject.sv.counter_id != 0
  1902. @counter_attacker = [] if @counter_attacker == nil
  1903. return apply_item_effects(apply_substitute(target, item), item) if !target.movable?
  1904. @log_window.add_text(sprintf(Vocab::CounterAttack, target.name)) if N03::BATTLE_LOG
  1905. target.sv.counter_id = target.sv.counter_skill_id
  1906. @counter_attacker.push(target)
  1907. end
  1908. #--------------------------------------------------------------------------
  1909. # ● 魔法反射の発動 ★再定義
  1910. #--------------------------------------------------------------------------
  1911. def invoke_magic_reflection(target, item)
  1912. return if @subject.sv.reflection_id != 0
  1913. @log_window.add_text(sprintf(Vocab::MagicReflection, target.name)) if N03::BATTLE_LOG
  1914. target.sv.reflection_id = target.sv.reflection_anime_id
  1915. end
  1916. #--------------------------------------------------------------------------
  1917. # ● 身代わりの適用 ★再定義
  1918. #--------------------------------------------------------------------------
  1919. def apply_substitute(target, item)
  1920. return target if @substitute == nil
  1921. return target if !check_substitute(target, item)
  1922. return @substitute
  1923. end
  1924. #--------------------------------------------------------------------------
  1925. # ● 身代わりセット
  1926. #--------------------------------------------------------------------------
  1927. def set_substitute(item)
  1928. @substitute = N03.get_enemy_unit(@subject).substitute_battler
  1929. return if @substitute == nil
  1930. s_targets = []
  1931. for i in [email protected]
  1932. next if @targets[i] == @substitute
  1933. next if !check_substitute(@targets[i], item)
  1934. @log_window.add_text(sprintf(Vocab::Substitute, @substitute.name, @targets[i].name))
  1935. @targets[i].sv.start_action(@targets[i].sv.substitute_receiver_start_action)
  1936. s_targets.push(@targets[i])
  1937. @targets[i] = @substitute
  1938. end
  1939. return @substitute = nil if s_targets == []
  1940. @substitute.sv.set_target(s_targets)
  1941. @substitute.sv.start_action(@substitute.sv.substitute_start_action)
  1942. end
  1943. #--------------------------------------------------------------------------
  1944. # ● 身代わり終了
  1945. #--------------------------------------------------------------------------
  1946. def end_substitute
  1947. for member in @substitute.sv.target_battler
  1948. member.sv.start_action(member.sv.substitute_receiver_end_action)
  1949. end
  1950. @substitute.sv.start_action(@substitute.sv.substitute_end_action)
  1951. @substitute = nil
  1952. end
  1953. #--------------------------------------------------------------------------
  1954. # ● 反撃
  1955. #--------------------------------------------------------------------------
  1956. def set_counter_attack
  1957. pre_subject = @subject
  1958. for attacker in @counter_attacker
  1959. @subject = attacker
  1960. item = $data_skills[attacker.sv.counter_skill_id]
  1961. play_sideview([pre_subject], item)
  1962. end
  1963. # 同一カウンター者を考慮してカウンターIDの初期化はアクション後に実行
  1964. for attacker in @counter_attacker do attacker.sv.counter_id = 0 end
  1965. @subject = pre_subject
  1966. @counter_attacker = nil
  1967. end
  1968. #--------------------------------------------------------------------------
  1969. # ● 魔法反射
  1970. #--------------------------------------------------------------------------
  1971. def set_reflection(item)
  1972. @log_window.back_to(1)
  1973. for data in @reflection_data
  1974. @subject.sv.damage_action(@subject, item)
  1975. N03.set_damage_anime_data([@subject], @subject, data)
  1976. apply_item_effects(@subject, item)
  1977. @spriteset.set_damage_pop(@subject)
  1978. end
  1979. set_camera_wait(N03.get_anime_time(@reflection_data[0][0]))
  1980. @reflection_data = nil
  1981. end
  1982. #--------------------------------------------------------------------------
  1983. # ● サイドビューアクション実行
  1984. #--------------------------------------------------------------------------
  1985. def play_sideview(targets, item)
  1986. @subject.sv.set_target(targets)
  1987. return if @subject.sv.attack_action(item) == nil
  1988. return if [email protected]?
  1989. return if item.scope != 9 && item.scope != 10 && !N03.targets_alive?(targets)
  1990. @subject.sv.start_action(@subject.sv.attack_action(item))
  1991. @subject.sv.unshift_action(@subject.sv.flash_action) if @subject.flash_flg
  1992. @subject.sv.active = true
  1993. @subject.sv.command_action = false
  1994. loop do
  1995. update_basic
  1996. data = @subject.sv.play_data
  1997. @targets = N03.s_targets(@subject) if data[0] == "second_targets_set"
  1998. N03.targets_set(@subject) if data[0] == "targets_set"
  1999. @immortal = N03.immortaling if data[0] == "no_collapse" && !N03.dead_attack?(@subject, item)
  2000. @immortal = N03.unimmortaling if data[0] == "collapse"
  2001. next set_move_anime(item) if @subject.sv.m_a_data != []
  2002. set_damage(item) if @subject.sv.set_damage
  2003. break N03.derived_skill(@subject) if @subject.sv.derivation_skill_id != 0
  2004. break if @subject.sv.action_end or @subject.hidden?
  2005. end
  2006. @immortal = N03.unimmortaling if @immortal
  2007. end
  2008. #--------------------------------------------------------------------------
  2009. # ● ダメージの実行
  2010. #--------------------------------------------------------------------------
  2011. def set_damage(item)
  2012. targets = @targets
  2013. targets = [@subject.sv.individual_targets[0]] if @subject.sv.individual_targets.size != 0
  2014. for target in targets do damage_anime(targets.dup, target, item) end
  2015. @subject.sv.set_damage = false
  2016. @subject.sv.damage_anime_data = []
  2017. end
  2018. #--------------------------------------------------------------------------
  2019. # ● ダメージ戦闘アニメ処理
  2020. #--------------------------------------------------------------------------
  2021. def damage_anime(targets, target, item)
  2022. @log_window.back_to(1) if @log_window.line_number == 5
  2023. return if item.scope != 9 && item.scope != 10 && target.dead?
  2024. @miss = false
  2025. invoke_item(target,item)
  2026. if target.result.missed
  2027. target.sv.miss_action(@subject, item)
  2028. return @miss = true
  2029. elsif target.result.evaded or target.sv.counter_id != 0
  2030. target.sv.evasion_action(@subject, item)
  2031. return @miss = true
  2032. elsif target.sv.reflection_id != 0
  2033. N03.set_damage_anime_data(targets, target, [target.sv.reflection_id, false, false, true])
  2034. target.sv.reflection_id = 0
  2035. @reflection_data = [] if @reflection_data == nil
  2036. return @reflection_data.push([N03.get_attack_anime_id(-3, @subject), false, false, true])
  2037. end
  2038. target.sv.damage_action(@subject, item)
  2039. N03.set_damage(@subject, -target.result.hp_drain, -target.result.mp_drain) if target != @subject
  2040. @spriteset.set_damage_pop(target)
  2041. @spriteset.set_damage_pop(@subject) if target != @subject && @subject.result.hp_damage != 0 or @subject.result.mp_damage != 0
  2042. N03.set_damage_anime_data(targets, target, @subject.sv.damage_anime_data) if @subject.sv.damage_anime_data != []
  2043. end
  2044. #--------------------------------------------------------------------------
  2045. # ● 飛ばしアニメ処理
  2046. #--------------------------------------------------------------------------
  2047. def set_move_anime(item)
  2048. for data in @subject.sv.m_a_data
  2049. @subject.sv.damage_anime_data = data[4]
  2050. hit_targets = []
  2051. for target in data[1]
  2052. damage_anime(data[1], target, item) if data[0]
  2053. hit_targets.push(target) if !@miss
  2054. end
  2055. @miss = false if !data[3]
  2056. @spriteset.set_hit_animation(@subject, data[2], hit_targets, @miss)
  2057. end
  2058. @subject.sv.set_damage = false
  2059. @subject.sv.m_a_data = []
  2060. end
  2061. end

  2062. #==============================================================================
  2063. # ■ DataManager
  2064. #------------------------------------------------------------------------------
  2065. #  データベースとゲームオブジェクトを管理するモジュールです。
  2066. #==============================================================================
  2067. module DataManager
  2068. #--------------------------------------------------------------------------
  2069. # ● 各種ゲームオブジェクトの作成 ★再定義
  2070. #--------------------------------------------------------------------------
  2071. def self.create_game_objects
  2072. $game_temp = Game_Temp.new
  2073. $game_system = Game_System.new
  2074. $game_timer = Game_Timer.new
  2075. $game_message = Game_Message.new
  2076. $game_switches = Game_Switches.new
  2077. $game_variables = Game_Variables.new
  2078. $game_self_switches = Game_SelfSwitches.new
  2079. $game_actors = Game_Actors.new
  2080. $game_party = Game_Party.new
  2081. $game_troop = Game_Troop.new
  2082. $game_map = Game_Map.new
  2083. $game_player = Game_Player.new
  2084. $sv_camera = Battle_Camera.new
  2085. end
  2086. end

  2087. #==============================================================================
  2088. # ■ BattleManager
  2089. #------------------------------------------------------------------------------
  2090. #  戦闘の進行を管理するモジュールです。
  2091. #==============================================================================
  2092. module BattleManager
  2093. #--------------------------------------------------------------------------
  2094. # ● エンカウント時の処理 ★再定義
  2095. #--------------------------------------------------------------------------
  2096. def self.on_encounter
  2097. @preemptive = (rand < rate_preemptive)
  2098. @surprise = (rand < rate_surprise && !@preemptive)
  2099. $sv_camera.mirror = @surprise if N03::BACK_ATTACK
  2100. end
  2101. #--------------------------------------------------------------------------
  2102. # ● 勝利の処理 ★再定義
  2103. #--------------------------------------------------------------------------
  2104. def self.process_victory
  2105. $sv_camera.win_wait = true
  2106. end
  2107. #--------------------------------------------------------------------------
  2108. # ● 勝利
  2109. #--------------------------------------------------------------------------
  2110. def self.victory
  2111. $sv_camera.win_wait = false
  2112. N03.camera(nil, N03::BATTLE_CAMERA["戦闘終了時"].dup)
  2113. for member in $game_party.members do member.sv.start_action(member.sv.win) if member.movable? end
  2114. play_battle_end_me
  2115. replay_bgm_and_bgs
  2116. $game_message.add(sprintf(Vocab::Victory, $game_party.name))
  2117. display_exp
  2118. gain_gold
  2119. gain_drop_items
  2120. gain_exp
  2121. SceneManager.return
  2122. battle_end(0)
  2123. return true
  2124. end
  2125. #--------------------------------------------------------------------------
  2126. # ● 逃走の処理 ★再定義
  2127. #--------------------------------------------------------------------------
  2128. def self.process_escape
  2129. $game_message.add(sprintf(Vocab::EscapeStart, $game_party.name))
  2130. success = @preemptive ? true : (rand < @escape_ratio)
  2131. Sound.play_escape
  2132. if success
  2133. process_abort
  2134. for member in $game_party.members do member.sv.start_action(member.sv.escape) if member.movable? end
  2135. else
  2136. @escape_ratio += 0.1
  2137. $game_message.add('\.' + Vocab::EscapeFailure)
  2138. $game_party.clear_actions
  2139. for member in $game_party.members do member.sv.start_action(member.sv.escape_ng) if member.movable? end
  2140. end
  2141. wait_for_message
  2142. return success
  2143. end
  2144. #--------------------------------------------------------------------------
  2145. # ● 次のコマンド入力へ ★再定義
  2146. #--------------------------------------------------------------------------
  2147. def self.next_command
  2148. begin
  2149. if !actor || !actor.next_command
  2150. $game_party.battle_members[@actor_index].sv.command_action = true
  2151. @actor_index += 1
  2152. if @actor_index >= $game_party.members.size
  2153. for member in $game_party.battle_members.reverse
  2154. break member.sv.start_action(member.sv.command_a) if member.inputable?
  2155. end
  2156. return false
  2157. end
  2158. end
  2159. end until actor.inputable?
  2160. actor.sv.start_action(actor.sv.command_b) if actor != nil && actor.inputable?
  2161. if pre_actor
  2162. pre_actor.sv.start_action(pre_actor.sv.command_a) if pre_actor != nil && pre_actor.inputable?
  2163. end
  2164. return true
  2165. end
  2166. #--------------------------------------------------------------------------
  2167. # ● 前のコマンド入力へ ★再定義
  2168. #--------------------------------------------------------------------------
  2169. def self.prior_command
  2170. begin
  2171. if !actor || !actor.prior_command
  2172. $game_party.battle_members[@actor_index].sv.command_action = false
  2173. @actor_index -= 1
  2174. if @actor_index < 0
  2175. for member in $game_party.battle_members
  2176. break member.sv.start_action(member.sv.command_a) if member.inputable?
  2177. end
  2178. return false
  2179. end
  2180. end
  2181. end until actor.inputable?
  2182. actor.make_actions if actor.inputable?
  2183. actor.sv.start_action(actor.sv.command_b) if actor.inputable?
  2184. after_actor.sv.start_action(after_actor.sv.command_a) if after_actor != nil && after_actor.inputable?
  2185. return true
  2186. end
  2187. #--------------------------------------------------------------------------
  2188. # ● コマンド入力前のアクターを取得
  2189. #--------------------------------------------------------------------------
  2190. def self.pre_actor
  2191. return if @actor_index == 0
  2192. $game_party.members[@actor_index - 1]
  2193. end
  2194. #--------------------------------------------------------------------------
  2195. # ● コマンド入力後のアクターを取得
  2196. #--------------------------------------------------------------------------
  2197. def self.after_actor
  2198. $game_party.members[@actor_index + 1]
  2199. end
  2200. #--------------------------------------------------------------------------
  2201. # ● 戦闘行動者を前に追加
  2202. #--------------------------------------------------------------------------
  2203. def self.unshift_action_battlers(battler)
  2204. @action_battlers.unshift(battler)
  2205. end
  2206. end

  2207. #==============================================================================
  2208. # ■ Game_Battler
  2209. #------------------------------------------------------------------------------
  2210. #  スプライトや行動に関するメソッドを追加したバトラーのクラスです。
  2211. #==============================================================================
  2212. class Game_Battler < Game_BattlerBase
  2213. #--------------------------------------------------------------------------
  2214. # ● 公開インスタンス変数
  2215. #--------------------------------------------------------------------------
  2216. attr_reader :sv # サイドビューデータ
  2217. attr_accessor :flash_flg # 閃きフラグ
  2218. #--------------------------------------------------------------------------
  2219. # ● オブジェクト初期化
  2220. #--------------------------------------------------------------------------
  2221. alias initialize_game_battler_n03 initialize
  2222. def initialize
  2223. initialize_game_battler_n03
  2224. @sv = SideView.new(self)
  2225. end
  2226. #--------------------------------------------------------------------------
  2227. # ● 現在の戦闘行動を除去
  2228. #--------------------------------------------------------------------------
  2229. alias remove_current_action_game_battler_n03 remove_current_action
  2230. def remove_current_action
  2231. return @sv.derivation_skill_id = 0 if @sv.derivation_skill_id != 0
  2232. remove_current_action_game_battler_n03
  2233. end
  2234. #--------------------------------------------------------------------------
  2235. # ● ターン終了処理
  2236. #--------------------------------------------------------------------------
  2237. alias on_turn_end_game_battler_n03 on_turn_end
  2238. def on_turn_end
  2239. on_turn_end_game_battler_n03
  2240. @sv.add_state = []
  2241. @sv.result_damage = [@result.hp_damage, @result.mp_damage]
  2242. end
  2243. #--------------------------------------------------------------------------
  2244. # ● パラメータ条件比較 data = [種別, 数値, 判別]
  2245. #--------------------------------------------------------------------------
  2246. def comparison_parameter(data)
  2247. return true if data[0][0] == 0
  2248. kind = data[0]
  2249. num = data[1]
  2250. select = data[2]
  2251. case kind
  2252. when 1 ; par = level
  2253. when 2 ; par = mhp
  2254. when 3 ; par = mmp
  2255. when 4 ; par = hp
  2256. when 5 ; par = mp
  2257. when 6 ; par = tp
  2258. when 7 ; par = atk
  2259. when 8 ; par = self.def
  2260. when 9 ; par = mat
  2261. when 10 ; par = mdf
  2262. when 11 ; par = agi
  2263. when 12 ; par = luk
  2264. end
  2265. if num < 0
  2266. case kind
  2267. when 4 ; num = mhp * num / 100
  2268. when 5 ; num = mmp * num / 100
  2269. when 6 ; num = max_tp * num / 100
  2270. end
  2271. num = num.abs
  2272. end
  2273. case select
  2274. when 0 ; return par == num
  2275. when 1 ; return par < num
  2276. when 2 ; return par > num
  2277. end
  2278. end
  2279. #--------------------------------------------------------------------------
  2280. # ● 装備条件比較 data = [装備種別, タイプID]
  2281. #--------------------------------------------------------------------------
  2282. def comparison_equip(data)
  2283. kind = data[0]
  2284. items = weapons if kind == 0
  2285. items = armors if kind == 1
  2286. for item in items
  2287. for id in data[1]
  2288. return true if id > 0 && item.is_a?(RPG::Weapon) && item == $data_weapons[id.abs]
  2289. return true if id > 0 && item.is_a?(RPG::Armor) && item == $data_armors[id.abs]
  2290. return true if id < 0 && item.is_a?(RPG::Weapon) && item.wtype_id == id.abs
  2291. return true if id < 0 && item.is_a?(RPG::Armor) && item.stype_id == id.abs
  2292. end
  2293. end
  2294. return false
  2295. end

  2296. end
  2297. #==============================================================================
  2298. # ■ Game_Actor
  2299. #------------------------------------------------------------------------------
  2300. #  アクターを扱うクラスです。
  2301. #==============================================================================
  2302. class Game_Actor < Game_Battler
  2303. #--------------------------------------------------------------------------
  2304. # ● 公開インスタンス変数
  2305. #--------------------------------------------------------------------------
  2306. attr_reader :actor_id # ID
  2307. #--------------------------------------------------------------------------
  2308. # ● ID
  2309. #--------------------------------------------------------------------------
  2310. def id
  2311. return @actor_id
  2312. end
  2313. #--------------------------------------------------------------------------
  2314. # ● スプライトを使うか? ★再定義
  2315. #--------------------------------------------------------------------------
  2316. def use_sprite?
  2317. return true
  2318. end
  2319. #--------------------------------------------------------------------------
  2320. # ● ダメージ効果の実行 ★再定義
  2321. #--------------------------------------------------------------------------
  2322. def perform_damage_effect
  2323. return if !N03::ACTOR_DAMAGE
  2324. $game_troop.screen.start_shake(5, 5, 10)
  2325. @sprite_effect_type = :blink
  2326. Sound.play_actor_damage
  2327. end

  2328. end

  2329. #==============================================================================
  2330. # ■ Game_Enemy
  2331. #------------------------------------------------------------------------------
  2332. #  敵キャラを扱うクラスです。
  2333. #==============================================================================
  2334. class Game_Enemy < Game_Battler
  2335. #--------------------------------------------------------------------------
  2336. # ● 公開インスタンス変数
  2337. #--------------------------------------------------------------------------
  2338. attr_reader :enemy_id # ID
  2339. #--------------------------------------------------------------------------
  2340. # ● ID
  2341. #--------------------------------------------------------------------------
  2342. def id
  2343. return @enemy_id
  2344. end
  2345. #--------------------------------------------------------------------------
  2346. # ● レベル
  2347. #--------------------------------------------------------------------------
  2348. def level
  2349. return @sv.level
  2350. end
  2351. #--------------------------------------------------------------------------
  2352. # ● ダメージ効果の実行 ★再定義
  2353. #--------------------------------------------------------------------------
  2354. def perform_damage_effect
  2355. return if !N03::ENEMY_DAMAGE
  2356. @sprite_effect_type = :blink
  2357. Sound.play_enemy_damage
  2358. end
  2359. #--------------------------------------------------------------------------
  2360. # ● 武器
  2361. #--------------------------------------------------------------------------
  2362. def weapons
  2363. weapon1 = $data_weapons[@sv.enemy_weapon1_id]
  2364. weapon2 = $data_weapons[@sv.enemy_weapon2_id]
  2365. return [weapon1, weapon2]
  2366. end
  2367. #--------------------------------------------------------------------------
  2368. # ● 防具
  2369. #--------------------------------------------------------------------------
  2370. def armors
  2371. return [$data_armors[@sv.enemy_shield_id]]
  2372. end
  2373. #--------------------------------------------------------------------------
  2374. # ● 二刀流の判定
  2375. #--------------------------------------------------------------------------
  2376. def dual_wield?
  2377. return $data_weapons[@sv.enemy_weapon2_id] != nil
  2378. end
  2379. #--------------------------------------------------------------------------
  2380. # ● バトラー画像変更
  2381. #--------------------------------------------------------------------------
  2382. def graphics_change(battler_name)
  2383. @battler_name = battler_name
  2384. end
  2385. #--------------------------------------------------------------------------
  2386. # ● 通常攻撃 アニメーション ID の取得
  2387. #--------------------------------------------------------------------------
  2388. def atk_animation_id1
  2389. return weapons[0].animation_id if weapons[0]
  2390. return weapons[1] ? 0 : 1
  2391. end
  2392. #--------------------------------------------------------------------------
  2393. # ● 通常攻撃 アニメーション ID の取得(二刀流:武器2)
  2394. #--------------------------------------------------------------------------
  2395. def atk_animation_id2
  2396. return weapons[1] ? weapons[1].animation_id : 0
  2397. end
  2398. end

  2399. #==============================================================================
  2400. # ■ Sprite_Base
  2401. #------------------------------------------------------------------------------
  2402. #  アニメーションの表示処理を追加したスプライトのクラスです。
  2403. #==============================================================================
  2404. class Sprite_Base < Sprite
  2405. #--------------------------------------------------------------------------
  2406. # ● アニメーションの座標更新 (ホーミングあり)
  2407. #--------------------------------------------------------------------------
  2408. def update_animation_position_horming
  2409. return if @action_end_cancel
  2410. ani_ox_set if @horming
  2411. camera_zoom = $sv_camera.zoom
  2412. camera_zoom = 1 if @move_anime
  2413. kind = 1
  2414. kind = -1 if @ani_mirror && !@anime_no_mirror
  2415. cell_data = @animation.frames[@animation.frame_max - (@ani_duration + @ani_rate - 1) / @ani_rate].cell_data
  2416. for i in 0..15
  2417. @ani_sprites[i].x = (@ani_ox + cell_data[i, 1] * kind - $sv_camera.x) * camera_zoom if @ani_sprites[i] != nil && cell_data[i, 1] != nil
  2418. @ani_sprites[i].y = (@ani_oy + cell_data[i, 2] - $sv_camera.y) * camera_zoom if @ani_sprites[i] != nil && cell_data[i, 2] != nil
  2419. end
  2420. end
  2421. #--------------------------------------------------------------------------
  2422. # ● アニメーション元の座標をセット
  2423. #--------------------------------------------------------------------------
  2424. def ani_ox_set
  2425. if !SceneManager.scene_is?(Scene_Battle)
  2426. @real_x = x
  2427. @real_y = y
  2428. end
  2429. @ani_ox = @real_x - ox + width / 2
  2430. @ani_oy = @real_y - oy + height / 2
  2431. @ani_oy -= height / 2 if @animation.position == 0
  2432. @ani_oy += height / 2 if @animation.position == 2
  2433. end
  2434. #--------------------------------------------------------------------------
  2435. # ● アニメーションの更新
  2436. #--------------------------------------------------------------------------
  2437. alias update_animation_sprite_base_n03 update_animation
  2438. def update_animation
  2439. update_animation_position_horming if animation? && SceneManager.scene_is?(Scene_Battle) && @animation.position != 3
  2440. update_animation_sprite_base_n03
  2441. end
  2442. #--------------------------------------------------------------------------
  2443. # ● アニメーションの原点設定 ★再定義
  2444. #--------------------------------------------------------------------------
  2445. def set_animation_origin
  2446. return ani_ox_set if @animation.position != 3
  2447. if viewport == nil
  2448. @ani_ox = Graphics.width / 2
  2449. @ani_oy = Graphics.height / 2
  2450. else
  2451. @ani_ox = viewport.rect.width / 2
  2452. @ani_oy = viewport.rect.height / 2
  2453. end
  2454. end
  2455. #--------------------------------------------------------------------------
  2456. # ● アニメーションスプライトの設定 ★再定義
  2457. #--------------------------------------------------------------------------
  2458. def animation_set_sprites(frame)
  2459. camera_zoom = 1
  2460. camera_zoom = $sv_camera.zoom if @anime_camera_zoom && @animation.position != 3 && SceneManager.scene_is?(Scene_Battle)
  2461. camera_x = $sv_camera.x
  2462. camera_y = $sv_camera.y
  2463. camera_x = camera_y = 0 if @animation.position == 3 or !SceneManager.scene_is?(Scene_Battle)
  2464. plus_z = 5
  2465. plus_z = 1000 if @animation.position == 3
  2466. plus_z = -17 if @plus_z != nil && @plus_z == false
  2467. plus_z = -self.z + 10 if @plus_z != nil && @plus_z == false && @animation.position == 3
  2468. cell_data = frame.cell_data
  2469. @ani_sprites.each_with_index do |sprite, i|
  2470. next unless sprite
  2471. pattern = cell_data[i, 0]
  2472. if !pattern || pattern < 0
  2473. sprite.visible = false
  2474. next
  2475. end
  2476. sprite.bitmap = pattern < 100 ? @ani_bitmap1 : @ani_bitmap2
  2477. sprite.visible = true
  2478. sprite.src_rect.set(pattern % 5 * 192,
  2479. pattern % 100 / 5 * 192, 192, 192)
  2480. if @ani_mirror && !@anime_no_mirror
  2481. sprite.x = (@ani_ox - cell_data[i, 1] - camera_x) * camera_zoom
  2482. sprite.y = (@ani_oy + cell_data[i, 2] - camera_y) * camera_zoom
  2483. sprite.angle = (360 - cell_data[i, 4])
  2484. sprite.mirror = (cell_data[i, 5] == 0)
  2485. else
  2486. sprite.x = (@ani_ox + cell_data[i, 1] - camera_x) * camera_zoom
  2487. sprite.y = (@ani_oy + cell_data[i, 2] - camera_y) * camera_zoom
  2488. sprite.angle = cell_data[i, 4]
  2489. sprite.mirror = (cell_data[i, 5] == 1)
  2490. end
  2491. sprite.z = self.z + plus_z + i
  2492. sprite.ox = 96
  2493. sprite.oy = 96
  2494. sprite.zoom_x = cell_data[i, 3] * camera_zoom / 100.0
  2495. sprite.zoom_y = cell_data[i, 3] * camera_zoom/ 100.0
  2496. sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
  2497. sprite.blend_type = cell_data[i, 7]
  2498. end
  2499. end
  2500. #--------------------------------------------------------------------------
  2501. # ● 子スプライトフラグ
  2502. #--------------------------------------------------------------------------
  2503. def set(battler, horming, camera_zoom, no_mirror)
  2504. @battler = battler
  2505. @next = true
  2506. self.bitmap = Bitmap.new(@battler.sv.cw, @battler.sv.ch)
  2507. self.ox = bitmap.width / 2
  2508. self.oy = bitmap.height
  2509. @horming = horming
  2510. @anime_camera_zoom = camera_zoom
  2511. @anime_no_mirror = no_mirror
  2512. @battler.sv.reset_anime_data
  2513. end
  2514. #--------------------------------------------------------------------------
  2515. # ● 子スプライト座標セット
  2516. #--------------------------------------------------------------------------
  2517. def set_position(z, zoom_x, zoom_y, real_x, real_y)
  2518. self.z = z
  2519. self.zoom_x = zoom_x
  2520. self.zoom_y = zoom_y
  2521. @real_x = real_x
  2522. @real_y = real_y
  2523. end
  2524. #--------------------------------------------------------------------------
  2525. # ● 他スプライトへのタイミング処理
  2526. #--------------------------------------------------------------------------
  2527. def other_process_timing(timing)
  2528. se_flag = true
  2529. se_flag = @se_flag if @se_flag != nil
  2530. @battler.sv.timing.push([se_flag, timing.dup])
  2531. end
  2532. #--------------------------------------------------------------------------
  2533. # ● 他バトラーへのタイミング処理
  2534. #--------------------------------------------------------------------------
  2535. def target_battler_process_timing(timing)
  2536. for target in @timing_targets
  2537. target.sv.timing.push([false, timing.dup])
  2538. end
  2539. end
  2540. #--------------------------------------------------------------------------
  2541. # ● SE とフラッシュのタイミング処理
  2542. #--------------------------------------------------------------------------
  2543. alias animation_process_timing_sprite_base_n03 animation_process_timing
  2544. def animation_process_timing(timing)
  2545. target_battler_process_timing(timing) if @timing_targets && @timing_targets != []
  2546. return other_process_timing(timing) if @next != nil
  2547. animation_process_timing_sprite_base_n03(timing)
  2548. end
  2549. #--------------------------------------------------------------------------
  2550. # ● アニメーションの解放
  2551. #--------------------------------------------------------------------------
  2552. alias dispose_animation_sprite_base_n03 dispose_animation
  2553. def dispose_animation
  2554. dispose_animation_sprite_base_n03
  2555. end
  2556. end


  2557. #==============================================================================
  2558. # ■ Sprite_Battler
  2559. #------------------------------------------------------------------------------
  2560. #  バトラー表示用のスプライトです。
  2561. #==============================================================================
  2562. class Sprite_Battler < Sprite_Base
  2563. #--------------------------------------------------------------------------
  2564. # ● 公開インスタンス変数 
  2565. #--------------------------------------------------------------------------
  2566. attr_accessor :removing # パーティ離脱中
  2567. #--------------------------------------------------------------------------
  2568. # ● オブジェクト初期化
  2569. #--------------------------------------------------------------------------
  2570. alias initialize_sprite_battler_n03 initialize
  2571. def initialize(viewport, battler = nil)
  2572. initialize_sprite_battler_n03(viewport, battler)
  2573. @real_x = @real_y = 0
  2574. update_bitmap if @battler != nil
  2575. end
  2576. #--------------------------------------------------------------------------
  2577. # ● アニメーションの開始 ★再定義
  2578. #--------------------------------------------------------------------------
  2579. def start_animation(animation, mirror = false)
  2580. return next_animation(animation, mirror) if animation?
  2581. @animation = animation
  2582. if @animation
  2583. @horming = @battler.sv.anime_horming
  2584. @anime_camera_zoom = @battler.sv.anime_camera_zoom
  2585. @anime_no_mirror = @battler.sv.anime_no_mirror
  2586. @timing_targets = @battler.sv.timing_targets
  2587. @plus_z = @battler.sv.anime_plus_z
  2588. @battler.sv.reset_anime_data
  2589. @ani_mirror = mirror
  2590. set_animation_rate
  2591. @ani_duration = @animation.frame_max * @ani_rate + 1
  2592. load_animation_bitmap
  2593. make_animation_sprites
  2594. set_animation_origin
  2595. end
  2596. end
  2597. #--------------------------------------------------------------------------
  2598. # ● 次のアニメを開始
  2599. #--------------------------------------------------------------------------
  2600. def next_animation(animation, mirror)
  2601. @next_anime = [] if @next_anime == nil
  2602. @next_anime.push(Sprite_Base.new(viewport))
  2603. @next_anime[@next_anime.size - 1].set(battler, @battler.sv.anime_horming, @battler.sv.anime_camera_zoom, @battler.sv.anime_no_mirror)
  2604. @next_anime[@next_anime.size - 1].set_position(self.z, self.zoom_x, self.zoom_y, @real_x, @real_y)
  2605. @next_anime[@next_anime.size - 1].start_animation(animation, mirror)
  2606. end
  2607. #--------------------------------------------------------------------------
  2608. # ● 影グラフィック作成
  2609. #--------------------------------------------------------------------------
  2610. def create_shadow
  2611. reset_shadow
  2612. return if @battler.sv.shadow == false
  2613. @shadow = Sprite.new(viewport) if @shadow == nil
  2614. @shadow.bitmap = Cache.character(@battler.sv.shadow)
  2615. @shadow.ox = @shadow.bitmap.width / 2
  2616. @shadow.oy = @shadow.bitmap.height / 2
  2617. end
  2618. #--------------------------------------------------------------------------
  2619. # ● 影グラフィック初期化
  2620. #--------------------------------------------------------------------------
  2621. def reset_shadow
  2622. return if @shadow == nil
  2623. @shadow.dispose
  2624. @shadow = nil
  2625. end
  2626. #--------------------------------------------------------------------------
  2627. # ● 転送元ビットマップの更新 ★再定義
  2628. #--------------------------------------------------------------------------
  2629. def update_bitmap
  2630. update_bitmap_enemy if [email protected]?
  2631. update_bitmap_actor if @battler.actor?
  2632. update_src_rect if @battler != nil
  2633. update_color if @battler != nil
  2634. end
  2635. #--------------------------------------------------------------------------
  2636. # ● 転送元ビットマップ:エネミー
  2637. #--------------------------------------------------------------------------
  2638. def update_bitmap_enemy
  2639. if @battler.battler_name != @battler_name or @battler.battler_hue != @battler_hue
  2640. @battler_name = @battler.battler_name
  2641. @battler_hue = @battler.battler_hue
  2642. @battler_graphic_file_index = @battler.sv.graphic_file_index
  2643. @graphic_mirror_flag = @battler.sv.graphic_mirror_flag
  2644. self.bitmap = Cache.battler(@battler_name + @battler_graphic_file_index, @battler_hue)
  2645. @battler.sv.setup(self.bitmap.width, self.bitmap.height, @battler_id != @battler.id)
  2646. create_shadow
  2647. init_visibility
  2648. @battler_id = @battler.id
  2649. end
  2650. end
  2651. #--------------------------------------------------------------------------
  2652. # ● 転送元ビットマップ:アクター
  2653. #--------------------------------------------------------------------------
  2654. def update_bitmap_actor
  2655. if @battler.character_name != @battler_name or @battler.character_index != @battler_index
  2656. @battler_name = @battler.character_name
  2657. @battler_index = @battler.character_index
  2658. @battler_graphic_file_index = @battler.sv.graphic_file_index
  2659. @graphic_mirror_flag = @battler.sv.graphic_mirror_flag
  2660. self.bitmap = Cache.character(@battler_name + @battler_graphic_file_index)
  2661. @battler.sv.setup(self.bitmap.width, self.bitmap.height, @battler_id != @battler.id)
  2662. create_shadow
  2663. init_visibility
  2664. @battler_id = @battler.id
  2665. end
  2666. end
  2667. #--------------------------------------------------------------------------
  2668. # ● 可視状態の初期化 ★再定義
  2669. #--------------------------------------------------------------------------
  2670. def init_visibility
  2671. @battler_visible = @battler.alive?
  2672. @battler_visible = true if @battler.sv.state(1) != "敵コラプス"
  2673. @battler_visible = false if @battler.hidden?
  2674. @battler.sv.opacity = 0 unless @battler_visible
  2675. self.opacity = 0 unless @battler_visible
  2676. self.opacity = 255 if @battler_visible
  2677. @battler.sv.weapon_visible = @battler_visible
  2678. end
  2679. #--------------------------------------------------------------------------
  2680. # ● 転送元矩形の更新
  2681. #--------------------------------------------------------------------------
  2682. def update_src_rect
  2683. return if @battler.sv.collapse
  2684. if @battler_graphic_file_index != @battler.sv.graphic_file_index
  2685. @battler_graphic_file_index = @battler.sv.graphic_file_index
  2686. self.bitmap = Cache.character(@battler_name + @battler_graphic_file_index) if @battler.actor?
  2687. self.bitmap = Cache.battler(@battler_name + @battler_graphic_file_index, @battler_hue) if [email protected]?
  2688. @battler.sv.set_graphics(self.bitmap.width, self.bitmap.height)
  2689. end
  2690. anime_off if @battler.sv.anime_off
  2691. self.src_rect.set(@battler.sv.sx, @battler.sv.sy, @battler.sv.cw, @battler.sv.ch)
  2692. self.opacity = @battler.sv.opacity if @battler_visible
  2693. set_process_timing(@battler.sv.timing) if @battler && @battler.sv.timing != []
  2694. end
  2695. #--------------------------------------------------------------------------
  2696. # ● 位置の更新 ★再定義
  2697. #--------------------------------------------------------------------------
  2698. def update_position
  2699. @real_x = @battler.sv.x / 100
  2700. @real_y = (@battler.sv.y - @battler.sv.h - @battler.sv.j - @battler.sv.c - @battler.sv.oy_adjust)/ 100
  2701. self.x = @real_x - $sv_camera.x
  2702. self.y = @real_y - $sv_camera.y
  2703. self.z = @battler.sv.z - @battler.sv.c / 100
  2704. if @battler.sv.h <= 0
  2705. self.x += $sv_camera.sx / 100
  2706. self.y += $sv_camera.sy / 100
  2707. end
  2708. self.x *= $sv_camera.zoom
  2709. self.y *= $sv_camera.zoom
  2710. end
  2711. #--------------------------------------------------------------------------
  2712. # ● 原点の更新 ★再定義
  2713. #--------------------------------------------------------------------------
  2714. def update_origin
  2715. return if !bitmap or @battler.sv.collapse
  2716. self.ox = @battler.sv.ox
  2717. self.oy = @battler.sv.oy
  2718. self.angle = @battler.sv.angle
  2719. self.zoom_x = @battler.sv.zoom_x * $sv_camera.zoom
  2720. self.zoom_y = @battler.sv.zoom_y * $sv_camera.zoom
  2721. self.mirror = @battler.sv.mirror if !@graphic_mirror_flag
  2722. self.mirror = [email protected] if @graphic_mirror_flag
  2723. end
  2724. #--------------------------------------------------------------------------
  2725. # ● 影グラフィックの更新
  2726. #--------------------------------------------------------------------------
  2727. def update_shadow
  2728. @shadow.visible = @battler.sv.shadow_visible
  2729. @shadow.opacity = @battler.sv.opacity if @battler.sv.opacity_data[3]
  2730. @shadow.opacity = self.opacity if [email protected]_data[3]
  2731. @shadow.x = @real_x - $sv_camera.x
  2732. @shadow.y = (@battler.sv.y - @battler.sv.c)/ 100 - $sv_camera.y
  2733. @shadow.z = @battler.sv.z - 10
  2734. @shadow.zoom_x = $sv_camera.zoom
  2735. @shadow.zoom_y = $sv_camera.zoom
  2736. @shadow.x += $sv_camera.sx / 100
  2737. @shadow.y += $sv_camera.sy / 100
  2738. @shadow.x *= $sv_camera.zoom
  2739. @shadow.y *= $sv_camera.zoom
  2740. @shadow.color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3]) if @color_data != nil
  2741. end
  2742. #--------------------------------------------------------------------------
  2743. # ● ふきだしの更新
  2744. #--------------------------------------------------------------------------
  2745. def update_balloon
  2746. if @battler.sv.balloon_data == [] && @balloon
  2747. @balloon_data = []
  2748. @balloon.dispose
  2749. return @balloon = nil
  2750. elsif @battler.sv.balloon_data != [] && @battler.sv.balloon_data != @balloon_data
  2751. @balloon_data = @battler.sv.balloon_data
  2752. @balloon = Sprite.new(self.viewport)
  2753. @balloon.bitmap = Cache.system("Balloon")
  2754. @balloon.zoom_x = @balloon_data[3]
  2755. @balloon.zoom_y = @balloon_data[3]
  2756. @balloon.ox = 32 if @battler.sv.mirror
  2757. @balloon.oy = 16
  2758. @balloon_count = 0
  2759. end
  2760. return if !@balloon
  2761. @balloon.opacity = self.opacity
  2762. @balloon.x = self.x
  2763. @balloon.y = self.y - @battler.sv.ch * $sv_camera.zoom
  2764. @balloon.z = self.z + 20
  2765. @balloon.src_rect.set(32 + @balloon_count / @balloon_data[2] * 32, @balloon_data[1] * 32, 32, 32) if @balloon_count % @balloon_data[2] == 0
  2766. @balloon.color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3]) if @color_data != nil
  2767. @balloon_count += 1
  2768. @balloon_count = 0 if @balloon_count == @balloon_data[2] * 7
  2769. end
  2770. #--------------------------------------------------------------------------
  2771. # ● 色調変更の更新
  2772. #--------------------------------------------------------------------------
  2773. def update_color
  2774. color_set if @battler.sv.color_set != []
  2775. return if @color_data == nil
  2776. @color_data[4] -= 1
  2777. if @color_data[4] == 0 && @color_data[5] != 0
  2778. @color_data[4] = @color_data[5]
  2779. @color_data[5] = 0
  2780. @color_data[6] = [0,0,0,0]
  2781. elsif @color_data[4] == 0
  2782. @remain_color_data = @color_data
  2783. @battler.sv.color = @color_data.dup
  2784. return @color_data = nil
  2785. end
  2786. for i in 0..3
  2787. @color_data[i] = (@color_data[i] * (@color_data[4] - 1) + @color_data[6][i]) / @color_data[4]
  2788. end
  2789. @battler.sv.color = @color_data.dup
  2790. self.color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3])
  2791. end
  2792. #--------------------------------------------------------------------------
  2793. # ● 残像の更新
  2794. #--------------------------------------------------------------------------
  2795. def update_mirage
  2796. if @battler.sv.mirage == [] && @mirages
  2797. @mirage_data = []
  2798. for mirage in @mirages do mirage.dispose end
  2799. return @mirages = nil
  2800. elsif @battler.sv.mirage != [] && @battler.sv.mirage != @mirage_data
  2801. @mirage_data = @battler.sv.mirage
  2802. @mirages = []
  2803. for i in 0...@mirage_data[1] do @mirages[i] = Sprite.new(self.viewport) end
  2804. @mirage_count = 0
  2805. end
  2806. return if !@mirages
  2807. @mirage_count += 1
  2808. @mirage_count = 0 if @mirage_count == @mirage_data[2] * @mirages.size
  2809. for i in [email protected]
  2810. mirage_body(@mirages[i], @mirage_data[4]) if @mirage_count == 1 + i * @mirage_data[2]
  2811. end
  2812. end
  2813. #--------------------------------------------------------------------------
  2814. # ● 残像本体
  2815. #--------------------------------------------------------------------------
  2816. def mirage_body(body, opacity)
  2817. body.bitmap = self.bitmap.dup
  2818. body.x = self.x
  2819. body.y = self.y
  2820. body.ox = self.ox
  2821. body.oy = self.oy
  2822. body.z = self.z - 20
  2823. body.mirror = self.mirror
  2824. body.angle = self.angle
  2825. body.opacity = opacity * self.opacity / 255
  2826. body.zoom_x = self.zoom_x
  2827. body.zoom_y = self.zoom_y
  2828. body.src_rect.set(@battler.sv.sx, @battler.sv.sy, @battler.sv.cw, @battler.sv.ch)
  2829. body.color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3]) if @color_data != nil
  2830. end
  2831. #--------------------------------------------------------------------------
  2832. # ● 次のアニメを更新
  2833. #--------------------------------------------------------------------------
  2834. def update_next_anime
  2835. return if !@next_anime
  2836. for anime in @next_anime
  2837. anime.update
  2838. anime.set_position(self.z, self.zoom_x, self.zoom_y, @real_x, @real_y) if @horming
  2839. anime.dispose if !anime.animation?
  2840. @next_anime.delete(anime) if !anime.animation?
  2841. end
  2842. end
  2843. #--------------------------------------------------------------------------
  2844. # ● フレーム更新
  2845. #--------------------------------------------------------------------------
  2846. alias update_sprite_battler_n03 update
  2847. def update
  2848. @battler.sv.update if @battler
  2849. update_sprite_battler_n03
  2850. update_next_anime
  2851. update_shadow if @battler && @shadow
  2852. update_mirage if @battler
  2853. update_balloon if @battler
  2854. update_remove if @battler && @removing && @battler.sv.change_up
  2855. end
  2856. #--------------------------------------------------------------------------
  2857. # ● 戦闘アニメ消去
  2858. #--------------------------------------------------------------------------
  2859. def anime_off
  2860. @battler.sv.anime_off = false
  2861. dispose_animation
  2862. for anime in @next_anime do anime.dispose_animation end if @next_anime
  2863. end
  2864. #--------------------------------------------------------------------------
  2865. # ● バトラー入れ替え
  2866. #--------------------------------------------------------------------------
  2867. def remove
  2868. @battler.sv.start_action(@battler.sv.remove_action)
  2869. $sv_camera.wait = 40
  2870. @battler.sv.add_action("eval('set_change')")
  2871. @removing = true
  2872. end
  2873. #--------------------------------------------------------------------------
  2874. # ● バトラー入れ替えの更新
  2875. #--------------------------------------------------------------------------
  2876. def update_remove
  2877. @battler.sv.change_up = false
  2878. @removing = false
  2879. @battler = nil
  2880. end

  2881. #--------------------------------------------------------------------------
  2882. # ● バトラー加入
  2883. #--------------------------------------------------------------------------
  2884. def join(join_battler)
  2885. $sv_camera.wait = 30
  2886. @battler = join_battler
  2887. @battler_name = @battler.character_name
  2888. @battler_index = @battler.character_index
  2889. @battler_graphic_file_index = @battler.sv.graphic_file_index
  2890. self.bitmap = Cache.character(@battler_name)
  2891. @battler.sv.setup(self.bitmap.width, self.bitmap.height, true)
  2892. create_shadow
  2893. init_visibility
  2894. end

  2895. #--------------------------------------------------------------------------
  2896. # ● 通常の設定に戻す ★再定義
  2897. #--------------------------------------------------------------------------
  2898. def revert_to_normal
  2899. self.blend_type = 0
  2900. self.opacity = 255
  2901. end
  2902. #--------------------------------------------------------------------------
  2903. # ● 崩壊エフェクトの更新
  2904. #--------------------------------------------------------------------------
  2905. alias update_collapse_sprite_battler_n03 update_collapse
  2906. def update_collapse
  2907. return if @battler.sv.state(1) != "敵コラプス"
  2908. update_collapse_sprite_battler_n03
  2909. @battler.sv.weapon_visible = false
  2910. end
  2911. #--------------------------------------------------------------------------
  2912. # ● ボス崩壊エフェクトの更新 ★再定義
  2913. #--------------------------------------------------------------------------
  2914. def update_boss_collapse
  2915. @effect_duration = @battler.sv.ch if @effect_duration >= @battler.sv.ch
  2916. alpha = @effect_duration * 120 / @battler.sv.ch
  2917. self.ox = @battler.sv.cw / 2 + @effect_duration % 2 * 4 - 2
  2918. self.blend_type = 1
  2919. self.color.set(255, 255, 255, 255 - alpha)
  2920. self.opacity = alpha
  2921. self.src_rect.y -= 1
  2922. Sound.play_boss_collapse2 if @effect_duration % 20 == 19
  2923. end
  2924. #--------------------------------------------------------------------------
  2925. # ● 別スプライトからのタイミング処理
  2926. #--------------------------------------------------------------------------
  2927. def set_process_timing(timing_data)
  2928. for data in timing_data
  2929. set_timing(data[0],data[1])
  2930. end
  2931. @battler.sv.timing = []
  2932. end
  2933. #--------------------------------------------------------------------------
  2934. # ● タイミング処理
  2935. #--------------------------------------------------------------------------
  2936. def set_timing(se_flag, data)
  2937. @ani_rate = 4
  2938. data.se.play if se_flag
  2939. case data.flash_scope
  2940. when 1 ;self.flash(data.flash_color, data.flash_duration * @ani_rate)
  2941. when 2 ;viewport.flash(data.flash_color, data.flash_duration * @ani_rate) if viewport
  2942. when 3 ;self.flash(nil, data.flash_duration * @ani_rate)
  2943. end
  2944. end
  2945. #--------------------------------------------------------------------------
  2946. # ● 色調変更
  2947. #--------------------------------------------------------------------------
  2948. def color_set
  2949. set = @battler.sv.color_set
  2950. @battler.sv.color_set= []
  2951. set[4] = 1 if set[4] == 0
  2952. @remain_color_data = [0,0,0,0] if @remain_color_data == nil
  2953. @color_data = @remain_color_data
  2954. @color_data[4] = set[4]
  2955. @color_data[5] = set[5]
  2956. @color_data[6] = set
  2957. end
  2958. #--------------------------------------------------------------------------
  2959. # ● 解放
  2960. #--------------------------------------------------------------------------
  2961. alias dispose_sprite_battler_n03 dispose
  2962. def dispose
  2963. dispose_sprite_battler_n03
  2964. @shadow.dispose if @shadow != nil
  2965. @balloon.dispose if @balloon != nil
  2966. for mirage in @mirages do mirage.dispose end if @mirages != nil
  2967. for anime in @next_anime do anime.dispose end if @next_anime
  2968. end
  2969. end


  2970. #==============================================================================
  2971. # ■ Spriteset_Battle
  2972. #------------------------------------------------------------------------------
  2973. #  バトル画面のスプライトをまとめたクラスです。
  2974. #==============================================================================
  2975. class Spriteset_Battle
  2976. #--------------------------------------------------------------------------
  2977. # ● 戦闘背景(床)スプライトの作成 ★再定義
  2978. #--------------------------------------------------------------------------
  2979. def create_battleback1
  2980. @back1_sprite = Sprite_Battle_Back.new(@viewport1, 1, battleback1_name)
  2981. @back1_sprite.set_graphics(battleback1_bitmap) if battleback1_name != nil
  2982. @back1_sprite.z = 0
  2983. end
  2984. #--------------------------------------------------------------------------
  2985. # ● 戦闘背景(壁)スプライトの作成 ★再定義
  2986. #--------------------------------------------------------------------------
  2987. def create_battleback2
  2988. @back2_sprite = Sprite_Battle_Back.new(@viewport1, 2, battleback2_name)
  2989. @back2_sprite.set_graphics(battleback2_bitmap) if battleback2_name != nil
  2990. @back2_sprite.z = 1
  2991. end
  2992. #--------------------------------------------------------------------------
  2993. # ● アクタースプライトの作成 ★再定義
  2994. #--------------------------------------------------------------------------
  2995. def create_actors
  2996. @actor_sprites = []
  2997. for i in 0...$game_party.max_battle_members
  2998. @actor_sprites[i] = Sprite_Battler.new(@viewport1, $game_party.members[i])
  2999. end
  3000. @effect_sprites = Spriteset_Sideview.new(@viewport1)
  3001. end
  3002. #--------------------------------------------------------------------------
  3003. # ● アクタースプライトの更新 ★再定義
  3004. #--------------------------------------------------------------------------
  3005. def update_actors
  3006. @actor_sprites.each_with_index do |sprite, i|
  3007. sprite_join($game_party.members[i], sprite) if sprite.battler == nil && sprite.battler != $game_party.members[i]
  3008. sprite.remove if sprite.battler != nil && !sprite.removing && sprite.battler != $game_party.members[i]
  3009. sprite.update
  3010. end
  3011. @effect_sprites.update
  3012. update_program
  3013. end
  3014. #--------------------------------------------------------------------------
  3015. # ● メンバーを加える
  3016. #--------------------------------------------------------------------------
  3017. def sprite_join(member, sprite)
  3018. for sp in @actor_sprites
  3019. sp.update_remove if member == sp.battler && !sp.battler.sv.change_up
  3020. end
  3021. sprite.join(member)
  3022. end
  3023. #--------------------------------------------------------------------------
  3024. # ● バトルプログラムの更新
  3025. #--------------------------------------------------------------------------
  3026. def update_program
  3027. return if $sv_camera.program_scroll == []
  3028. for data in $sv_camera.program_scroll
  3029. @back1_sprite.start_back_data(data) if data[2] == 1
  3030. @back2_sprite.start_back_data(data) if data[2] == 2
  3031. end
  3032. $sv_camera.program_scroll = []
  3033. end
  3034. #--------------------------------------------------------------------------
  3035. # ● ヒット時の戦闘アニメ実行
  3036. #--------------------------------------------------------------------------
  3037. def set_hit_animation(battler, weapon_index, hit_targets, miss)
  3038. @effect_sprites.set_hit_animation(battler, weapon_index, hit_targets, miss)
  3039. end
  3040. #--------------------------------------------------------------------------
  3041. # ● ダメージPOP
  3042. #--------------------------------------------------------------------------
  3043. def set_damage_pop(target)
  3044. @effect_sprites.set_damage_pop(target)
  3045. end
  3046. #--------------------------------------------------------------------------
  3047. # ● 解放
  3048. #--------------------------------------------------------------------------
  3049. alias dispose_spriteset_battle_n03 dispose
  3050. def dispose
  3051. dispose_spriteset_battle_n03
  3052. @effect_sprites.dispose
  3053. end



  3054. end


  3055. #==============================================================================
  3056. # ■ Window_BattleLog
  3057. #------------------------------------------------------------------------------
  3058. #  戦闘の進行を実況表示するウィンドウです。
  3059. #==============================================================================
  3060. class Window_BattleLog < Window_Selectable
  3061. #--------------------------------------------------------------------------
  3062. # ● ウェイト ★再定義
  3063. #--------------------------------------------------------------------------
  3064. def wait
  3065. end
  3066. #--------------------------------------------------------------------------
  3067. # ● ウェイトとクリア ★再定義
  3068. #--------------------------------------------------------------------------
  3069. def wait_and_clear
  3070. $sv_camera.wait = 10
  3071. end
  3072. #--------------------------------------------------------------------------
  3073. # ● 行動結果の表示 ★再定義
  3074. #--------------------------------------------------------------------------
  3075. def display_action_results(target, item)
  3076. if target.result.used
  3077. last_line_number = line_number
  3078. display_critical(target, item)
  3079. display_damage(target, item)
  3080. display_affected_status(target, item)
  3081. display_failure(target, item)
  3082. end
  3083. off if !N03::BATTLE_LOG
  3084. end
  3085. #--------------------------------------------------------------------------
  3086. # ● ウインドウ非表示
  3087. #--------------------------------------------------------------------------
  3088. def off
  3089. @back_sprite.visible = self.visible = false
  3090. end
  3091. end
  3092. #==============================================================================
  3093. # ■ Game_Interpreter
  3094. #------------------------------------------------------------------------------
  3095. #  イベントコマンドを実行するインタプリタです。
  3096. #==============================================================================
  3097. class Game_Interpreter
  3098. #--------------------------------------------------------------------------
  3099. # ● スイッチの操作
  3100. #--------------------------------------------------------------------------
  3101. alias command_121_game_interpreter_n03 command_121
  3102. def command_121
  3103. command_121_game_interpreter_n03
  3104. $sv_camera.program_check
  3105. end
  3106. end
复制代码
回复 支持 反对

使用道具 举报

Lv3.寻梦者

虚空人形

梦石
0
星屑
4517
在线时间
2037 小时
注册时间
2011-8-11
帖子
3398

贵宾

83
 楼主| 发表于 2012-11-27 16:45:19 | 只看该作者
本帖最后由 hcm 于 2012-11-27 16:50 编辑
飒沓拂柳絮 发表于 2012-11-27 13:34
工程太大了,有很多素材,这是我的三个脚本,


这样可不好看出问题呢,
只能给你一个应急措施,
  1.   "回避"            =>["アクター限定","右1回転","一歩後ジャンプ","10","座標リセット左向き"],
  2.   "盾ガード"        => ["se('Evasion2')","盾防御","60"],
复制代码
改成
  1.   "回避"            => ["ダメージのけぞり","座標リセット左向き"],
  2.   "盾ガード"        => ["ダメージのけぞり","座標リセット左向き"],
复制代码
把那些回避动画屏蔽掉了,回避时和挨打显示是一样的。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
116 小时
注册时间
2006-7-29
帖子
29
84
发表于 2012-11-27 18:35:34 | 只看该作者
hcm 发表于 2012-11-27 16:45
这样可不好看出问题呢,
只能给你一个应急措施,
把改成把那些回避动画屏蔽掉了,回避时和挨打显示是一样 ...

神啊我终于会了,我都想死了,貌似必须要装备盾牌类物品时才会触发动画3的效果,我试过了,脱下盾牌就是后空翻,戴上盾牌就是回避动画,这么简单我纠结了半天,和攻击动画一样,必须要武器.
那么只有最后一个问题了,求问_2最后一排图片的含义,貌似其他三列是死亡,技能,魔法,就是不知道最后一列用在什么情况,因此现在最后一列都是乱设的
回复 支持 反对

使用道具 举报

Lv3.寻梦者

虚空人形

梦石
0
星屑
4517
在线时间
2037 小时
注册时间
2011-8-11
帖子
3398

贵宾

85
 楼主| 发表于 2012-11-27 19:40:11 | 只看该作者
飒沓拂柳絮 发表于 2012-11-27 18:35
神啊我终于会了,我都想死了,貌似必须要装备盾牌类物品时才会触发动画3的效果,我试过了,脱下盾牌就是后空 ...


因为原版的脚本有一个“右向き”
的动作,原来也是行走图的,我就顺便一起改成了全动画图,就是_2最后一排,
但那个脚本里“右向き”这个动作并无使用,
如果加了新的技能类型又稍懂些修改脚本的话才用得上。
不懂的话无视即可。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
116 小时
注册时间
2006-7-29
帖子
29
86
发表于 2012-11-27 19:46:00 | 只看该作者
soga,明白了,多谢版主大大!
小小吐槽一句:为啥要设定必须穿戴盾牌才能触发回避动画的设定呢,这样如果有人物不需要盾牌那么不就这个动画浪费了嘛~~~
回复 支持 反对

使用道具 举报

Lv3.寻梦者

虚空人形

梦石
0
星屑
4517
在线时间
2037 小时
注册时间
2011-8-11
帖子
3398

贵宾

87
 楼主| 发表于 2012-11-27 23:21:28 | 只看该作者
飒沓拂柳絮 发表于 2012-11-27 19:46
soga,明白了,多谢版主大大!
小小吐槽一句:为啥要设定必须穿戴盾牌才能触发回避动画的设定呢,这样如果有人物 ...

这个得去问整套脚本的原作者了。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
47 小时
注册时间
2012-12-13
帖子
30
88
发表于 2012-12-14 12:27:16 | 只看该作者
正好在寻找这个。。。。脚本盲的福利啊。。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
14 小时
注册时间
2012-12-21
帖子
6
89
发表于 2013-1-2 04:04:55 | 只看该作者
我也下载失败了
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
36 小时
注册时间
2011-5-6
帖子
22
90
发表于 2013-1-6 13:31:14 | 只看该作者
问下,如果要新创个人物怎么办?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-29 17:31

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表