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

Project1

 找回密码
 注册会员
搜索
查看: 2193|回复: 17
打印 上一主题 下一主题

全动画战斗脚本下如何改角色图形

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
7 小时
注册时间
2008-12-25
帖子
104
跳转到指定楼层
1
发表于 2009-2-13 07:05:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
我采用的是全动画战斗脚本,
求教如何在角色战斗不能情况下不显示角色图形或者显示我指定的角色死亡图形,完全看不明白该在哪里修改,泪......
脚本一共是3个,全部如下:
第一个脚本名字:サイドビュー設定

晕,脚本贴不下,偶分开放= =
  1. #==============================================================================
  2. # ■ module N01 Ver2.6
  3. #------------------------------------------------------------------------------
  4. #  サイドビューバトルのカスタマイズ項目です。
  5. #==============================================================================
  6. module N01
  7. #--------------------------------------------------------------------------
  8. # ● セッティング
  9. #--------------------------------------------------------------------------
  10.   # アクター初期位置 一人目    二人目    三人目    四人目
  11.   #                  X軸 Y軸   X軸 Y軸   X軸 Y軸   X軸 Y軸
  12.   ACTOR_POSITION = [[515,170],[530,210],[545,250],[560,290]]
  13.   # 戦闘メンバー最大数(多人数パーティスクリプト等で増えた時専用)
  14.   # 上の初期位置も人数分増やしてください
  15.   MAX_MEMBER = 4
  16.   # 戦闘コマンドのウインドウ位置微調整  COMMAND_POSITION = [X軸,Y軸]
  17.   COMMAND_POSITION = [ -208, -116]
  18.   # バックアタック時の戦闘コマンドのウインドウ位置微調整
  19.   COMMAND_POSITION_BACKATTACK = [  48, -116]
  20.   # アクターカーソル位置微調整  ACTOR_CURSOR = [X軸,Y軸]
  21.   ACTOR_CURSOR = [ 0, 48]
  22.   # エネミーカーソル位置微調整  ENEMY_CURSOR = [X軸,Y軸]
  23.   ENEMY_CURSOR = [ 0, 32]
  24.   
  25.   # 戦闘で行動終了後、次のバトラーが行動開始するまでに挟むウエイト時間
  26.   ACTION_WAIT = 2
  27.   # エネミーのコラプス(撃破時の退場)前に挟むウエイト時間
  28.   COLLAPSE_WAIT = 6
  29.   # 勝利前に挟むウエイト時間
  30.   WIN_WAIT = 10
  31.   # アクターが武器なしで攻撃した場合のヒットアニメID(エネミーはデータベースの設定を優先)
  32.   NO_WEAPON = 4
  33.   # 攻撃回避時の効果音(SEフォルダを参照) EVA_SE = [ファイル名,ボリュ-ム,ピッチ]
  34.   EVA_SE = ["063-Swing02", 80, 100]
  35.   # ステート拡張・自動復活時のアニメID
  36.   RESURRECTION = 26
  37.   
  38.   # 影グラフィック 利用するならtrueしないならfalse
  39.   SHADOW = true  
  40.   # 歩行グラフィック認識 歩行グラを利用するならtrueしないならfalse
  41.   # falseにした場合、必ずファイルNo1以降を用意し、ファイルNo0は使わないように
  42.   # またNo1以降の画像サイズは統一させる(全キャラ統一ではなくそのキャラで統一)
  43.   WALK_ANIME = true
  44.   # バトラーグラフィックのアニメセル数(横分割数)
  45.   ANIME_PATTERN = 4
  46.   # バトラーグラフィックのアニメ種類数(縦分割数)
  47.   ANIME_KIND = 4
  48.   # 逃走成功メッセージ
  49.   RUN_SUCCESS = "逃げ出した!"
  50.   # 逃走失敗メッセージ
  51.   RUN_NG = "逃走失敗!"
  52.   
  53.   # バックアタック(不意打ちと画面反転) 利用するならtrueしないならfalse
  54.   BACK_ATTACK = true
  55.   # バックアタック基本確率 これに敵素早さ平均/味方平均を掛けたものが実際の確率
  56.   BACK_ATTACK_RATE = 8
  57.   # バックアタックを知らせるメッセージ
  58.   BACK_ATTACK_COMMENTS = "エネミーのバックアタック!"
  59.   # バックアタックで戦闘背景まで反転させないならfalse
  60.   BACK_ATTACK_MIRROR = false
  61.   # イベント戦闘でも通常通りバックアタック発生計算を行うならtrue
  62.   EVENT_BACK_ATTACK = true
  63.   # バックアタック無効化設定  不意打ちに対しても効果を発揮。
  64.   # 全て装備していることが条件で、スキルは取得しているだけで効果を発揮します。
  65.   # バックアタックを無効化する武器ID 表記例) = [1] 複数ある表記例) = [1,2]
  66.   NON_BACK_ATTACK_WEAPONS = []
  67.   # バックアタックを無効化する盾ID
  68.   NON_BACK_ATTACK_ARMOR1 = []
  69.   # バックアタックを無効化する頭防具ID
  70.   NON_BACK_ATTACK_ARMOR2 = []
  71.   # バックアタックを無効化する体防具ID
  72.   NON_BACK_ATTACK_ARMOR3 = []
  73.   # バックアタックを無効化するアクセサリID
  74.   NON_BACK_ATTACK_ARMOR4 = []
  75.   # バックアタックを無効化するスキルID
  76.   NON_BACK_ATTACK_SKILLS = []
  77.   # バックアタックを無効化するスイッチNo
  78.   NON_BACK_ATTACK_SWITCH = []
  79.   # 必ずバックアタックを発生させるスイッチNo(無効化よりも優先されます)
  80.   BACK_ATTACK_SWITCH = []

  81. #==============================================================================
  82. # ■ 単発アクション
  83. #------------------------------------------------------------------------------
  84. #  通しアクションに利用するものです。これ単体では意味を持ちません。
  85. #==============================================================================
  86. # ここの単発アクション名同士は、かぶらないようにしてください。
  87. # 通しアクション名とかぶる分には問題ありません。
  88.   ANIME = {
  89. #--------------------------------------------------------------------------
  90. # ● バトラーアニメ設定
  91. #--------------------------------------------------------------------------
  92.   # ファイルNo…利用するグラフィックファイルのナンバー。
  93.   #             アクターの場合、0は歩行グラフィックを参照します。
  94.   #             1以降は"キャラクターグラフィック名+_1"のように_の後のナンバーの
  95.   #             グラフィックを参照します。例)001-Fighter01_1 のファイルNoは1
  96.   #             グラフィックは全てキャラクターフォルダから探します。
  97.   #
  98.   # 種類…グラフィックファイルのセルの縦位置。上から0~3と続きます。
  99.   # 速度…アニメの更新速度。数字が低いほど早く更新します。
  100.   # ループ… [0=往復ループ] [1=片道ループ] [2=片道のみでループしない]
  101.   # 待ち…ループしない(2)場合、最後のアニメを表示してからの待ち(ウエイト)時間。
  102.   # 固定…アニメせずに固定する場合、セル番号(横位置)を指定。固定しない通常は-1。
  103.   # Z軸…手前に表示するならプラス。通常は画面下ほど手前に表示されます。
  104.   # 影…影グラフィックを表示するならtrue、しない場合はfalse
  105.   # 武器…武器を表示する場合は武器アクション名を。しない場合は""。
  106.   
  107.   # バトラーアニメ名      ファイルNo 種類 速度 ループ 待ち 固定  Z軸  影  武器
  108.   "待機"            => [ 0,  1,  10,   1,   0,  -1,   0, true,"" ],
  109.   "待機(固定)"      => [ 0,  1,  10,   2,   0,   0,   0, true,"" ],
  110.   "右向き(固定)"    => [ 0,  2,  10,   1,   2,   0,   0, true,"" ],
  111.   "ダメージ"        => [ 0,  3,   4,   2,   0,  -1,   0, true,"" ],
  112.   "戦闘不能"        => [ 0,  3,  10,   1,   8,   0,   0,false,"" ],
  113.   "前進"            => [ 0,  1,   1,   1,   0,  -1,   0, true,"" ],
  114.   "後退"            => [ 0,  2,   2,   1,   0,  -1,   0, true,"" ],
  115.   "手前表示"        => [ 0,  1,   2,   1,   0,  -1, 600, true,"" ],
  116.   "武器振り攻撃"    => [ 0,  1,   1,   2,   0,  -1,   2, true,"縦振り"],
  117.   "武器振り攻撃遅"  => [ 0,  1,   3,   2,   0,  -1,   2, true,"縦振り"],
  118.   "武器回し下"      => [ 0,  1,   2,   2,   0,  -1,   2, true,"下半回転"],
  119.   "武器回し上"      => [ 0,  1,   2,   2,   0,  -1,   2, true,"上半回転"],
  120.   "武器掲げ"        => [ 0,  1,   2,   2,  14,  -1,   2, true,"掲げ"],
  121.   
  122. #--------------------------------------------------------------------------
  123. # ● 武器アクション 武器グラフィックの動かし方
  124. #--------------------------------------------------------------------------
  125.   # ここで使用する武器アクション名は、上のバトラーアニメ設定でのみ有効です。
  126.   
  127.   # X軸…横に動かす距離。
  128.   # Y軸…縦に動かす距離。
  129.   # Z軸…バトラーより手前に表示するならtrue。
  130.   # 始度…動作前の最初の角度。半時計回りで0~360度。負が半時計回り。
  131.   # 終度…動作後の角度。
  132.   # 原点…回転元の原点。[0…中心] [1…左上] [2…右上] [3…左下] [4…右下]
  133.   # 反転…trueにすると動作前にグラフィックを反転して表示します。
  134.   # X拡…X軸拡大率、横の拡大率です。1が当倍、2が2倍、0.5が1/2になります。
  135.   # Y拡…Y軸拡大率、縦の拡大率です。1が当倍、2が2倍、0.5が1/2になります。
  136.   # 調X…微調整するX軸。この数字ぶん初期X座標が変化します。
  137.   # 調Y…微調整するY軸。この数字ぶん初期Y座標が変化します。
  138.   
  139.   # 武器アクション名   X軸  Y軸  Z軸  始度 終度 原点 反転  X拡  Y拡  調X  調Y
  140.   "縦振り"     => [   6,  20,false,-135,  45,  4,false,   1,  1,  -4,  -40],
  141.   "下半回転"   => [   6,  10,false, 270,  45,  4,false,   1,  1,  -4,  -32],
  142.   "上半回転"   => [   6,  10,false,  45,-100,  4,false,   1,  1,  -4,  -32],
  143.   "掲げ"       => [   6,  -2,false,  90, -45,  4,false,   1,  1,  -4,  -32],

  144. #--------------------------------------------------------------------------
  145. # ● バトラー移動  エネミーのX軸移動は逆計算になります
  146. #--------------------------------------------------------------------------
  147.   # 目標…移動する座標の参照先 [0=自身の現在位置] [1=ターゲット] [2=画面] [3=初期位置]
  148.   # X軸…対象から見たX座標。絶対値は最低でも時間より高く
  149.   # Y軸…対象から見たY座標。絶対値は最低でも時間より高く
  150.   # 時間…移動時間。大きいほど遅い。これを距離で割ったのが1フレーム移動距離です。
  151.   # 加速…正は加速、負は減速。数値分1フレームの移動距離が増減しつづけます。
  152.   # ジャンプ…ジャンプ軌道。正は下、負は上軌道。0はジャンプしません。
  153.   # アニメ…その移動に利用するバトラーアニメ名。

  154.   #                        目標  X軸  Y軸 時間 加速 ジャンプ アニメ
  155.   "移動しない"          => [  0,   0,   0,  1,   0,   0,  "待機(固定)"],
  156.   "戦闘開始前の位置へ"  => [  0,  54,   0,  1,   0,   0,  "前進"],
  157.   "一歩前移動"          => [  3, -32,   0, 12,  -1,   0,  "前進"],
  158.   "一歩後移動"          => [  0,  32,   0,  5,  -1,   0,  "前進"],
  159.   "四人攻撃移動1"       => [  2, 564, 186, 12,  -1,   0,  "前進"],
  160.   "四人攻撃移動2"       => [  2, 564, 212, 12,  -1,   0,  "前進"],
  161.   "四人攻撃移動3"       => [  2, 504, 174, 12,  -1,   0,  "前進"],
  162.   "四人攻撃移動4"       => [  2, 504, 254, 12,  -1,   0,  "前進"],
  163.   "被ダメージ"          => [  0,  32,   0,  3,  -1,   0,  "ダメージ"],
  164.   "押し出す"            => [  0,  12,   0,  1,   1,   0,  "ダメージ"],
  165.   "味方逃走"            => [  0, 150,   0, 20,   2,   0,  "後退"],
  166.   "逃走失敗"            => [  0,  48,   0, 10,   1,   0,  "後退"],
  167.   "勝利のジャンプ"      => [  0,   0,   0, 16,   0,  -5,  "前進"],
  168.   "目標移動"            => [  1,   0,   0, 10,  -1,   0,  "前進"],
  169.   "目標高速移動"        => [  1,   0, -12,  7,   0,  -2,  "前進"],
  170.   "目標前移動"          => [  1,  24,   0, 10,  -1,   0,  "前進"],
  171.   "目標前高速移動"      => [  1,  24,   0,  1,   0,   0,  "前進"],
  172.   "目標右前移動"        => [  1,  96,  32, 12,  -1,   0,  "前進"],
  173.   "目標左前移動"        => [  1,  96, -32, 12,  -1,   0,  "前進"],
  174.   "一歩前ジャンプ"      => [  0, -32,   0,  5,  -1,  -4,  "前進"],
  175.   "一歩後ジャンプ"      => [  0,  32,   0,  5,  -1,  -4,  "後退"],
  176.   "目標にジャンプ"      => [  1,  12, -12,  8,  -1,  -6,  "前進"],
  177.   "味方投げ"            => [  0, -24,   0, 10,   0,  -2,  "前進"],
  178.   "踏みつけ"            => [  1,  12, -32,  8,  -1,  -6,  "手前表示"],
  179.   "一歩前ジャンプ叩き"  => [  0, -32,   0,  8,  -1,  -2,  "武器振り攻撃"],
  180.   "前ジャンプ叩き"      => [  1,  12,   0,  8,  -1,  -5,  "武器振り攻撃遅"],
  181.   "後方に払い上げ"      => [  1,  12,   0, 10,   0,  -3,  "武器振り攻撃"],
  182.   "その場ジャンプ叩き"  => [  1,   0,   0, 10,   0,  -5,  "武器振り攻撃"],
  183.   "払い抜け"            => [  1, -96,   0, 10,   2,   0,  "武器振り攻撃"],
  184.   "右払い抜け"          => [  1, -96,  32, 10,   2,   0,  "武器振り攻撃"],
  185.   "左払い抜け"          => [  1, -96, -32, 10,   2,   0,  "武器振り攻撃"],
  186.   "右払い抜け2"         => [  1,-128,  48, 10,   2,   0,  "武器振り攻撃"],
  187.   "左払い抜け2"         => [  1,-128, -48, 10,   2,   0,  "武器振り攻撃"],
  188.   
  189. #--------------------------------------------------------------------------
  190. # ● バトラー浮遊  バトラーを影から離します
  191. #--------------------------------------------------------------------------
  192.   # 判別…判別に使うので、すべて"float"で統一してください。
  193.   # 始高…浮遊開始の高さ。符号が負で影より高く、正だと低くなります。
  194.   # 終高…浮遊終了の高さ。移動系のアクションがあるまでこの高さを維持します。
  195.   # 時間…浮遊にかける時間。
  196.   # アニメ…浮遊に利用するバトラーアニメ名。
  197.   
  198.   #                      判別  始高 終高 時間 アニメ
  199.   "低空浮遊中"      => ["float", -22, -20,  2, "待機(固定)"],
  200.   "低空浮遊中2"     => ["float", -20, -18,  2, "待機(固定)"],
  201.   "低空浮遊中3"     => ["float", -18, -20,  2, "待機(固定)"],
  202.   "低空浮遊中4"     => ["float", -20, -22,  2, "待機(固定)"],
  203.   "ジャンプ停止"    => ["float",   0, -80,  4, "待機(固定)"],
  204.   "ジャンプ着地"    => ["float", -80,   0,  4, "待機(固定)"],
  205.   "持ち上げられる"  => ["float",   0, -30,  4, "待機(固定)"],
  206.   
  207. #--------------------------------------------------------------------------
  208. # ● 座標リセット 元の位置に戻る移動設定
  209. #--------------------------------------------------------------------------
  210.   # 判別…判別に使うので、すべて"reset"で統一してください。
  211.   # 時間…戻るのにかける時間。同じ時間でも距離が大きいと移動速度が変わります。
  212.   # 加速…正は加速、負は減速。数値分1フレームの移動距離が増減しつづけます。
  213.   # ジャンプ…ジャンプ軌道。正は下、負は上軌道。0はジャンプしません。
  214.   # アニメ…その移動に利用するバトラーアニメ名を入れます。

  215.   #                      判別  時間 加速 ジャンプ アニメ
  216.   "座標リセット"    => ["reset", 12,  0,   0,  "前進"],
  217.   "後退リセット"    => ["reset", 12,  0,   0,  "後退"],
  218.   
  219. #--------------------------------------------------------------------------
  220. # ● 強制アクション 自分以外のバトラーにアクションを取らせます
  221. #--------------------------------------------------------------------------
  222.   # 識別…取らせるアクションが単発か通しか。"単発"はここの単発アクション名を。
  223.   #       "通し"とは単発アクションを組み合わせたものを指します。
  224.   #
  225.   # 対象…アクションを取らせる対象。0はターゲット、それ以外はそのステートNoが
  226.   #       付いているバトラー全部を対象とします。
  227.   #       数値に-マイナスを付けることで、その絶対値のスキルIDを習得している
  228.   #       自分以外のアクターを対象とします(アクター限定)
  229.   #       インデックス(メンバー位置)で指定する場合、インデックス値に1000足します。
  230.   #       指定したインデックスが自分だったり存在しない場合(戦闘不能や逃走)は
  231.   #       0番から順に参照し、誰も該当しなかった時は行動を中断します。
  232.   #
  233.   # 復帰…アクション後位置を戻すなら座標リセット系の単発アクション名を入れます。
  234.   #       戻さない場合""とします。
  235.   # アクション名…強制するアクション名。識別が単発なら、単発アクション名を。
  236.   #               通しなら通しアクション名を。
  237.   
  238.   #                       識別    対象   復帰              アクション名
  239.   "小吹き飛ばし"     => ["単発",    0, "座標リセット",  "押し出す"],
  240.   "縦にぺしゃんこ"   => ["単発",    0, "座標リセット",  "縦縮み"],
  241.   "着弾1"            => ["単発",    0, "座標リセット",  "対象から自身へ1"],
  242.   "味方持ち上げ"     => ["単発",    0,             "",  "持ち上げられる"],
  243.   "上昇"             => ["単発",    0, "座標リセット",  "勝利のジャンプ"],
  244.   "バジルと攻撃"     => ["通し",   18, "座標リセット",  "バジル合体攻撃1"],
  245.   "四人で攻撃1"      => ["通し", -101, "座標リセット",  "四人合体攻撃1"],
  246.   "四人で攻撃2"      => ["通し", -102, "座標リセット",  "四人合体攻撃2"],
  247.   "四人で攻撃3"      => ["通し", -103, "座標リセット",  "四人合体攻撃3"],
  248.   "味方投げ飛ばし"   => ["通し", 1000, "座標リセット",  "投げつけられる"],

  249. #--------------------------------------------------------------------------
  250. # ● ターゲット変更  バトラーの現在ターゲットしている対象を変えます
  251. #--------------------------------------------------------------------------
  252.   # ※あくまでスプライトアクション上のターゲットを変えるだけで、戦闘上での
  253.   #   ターゲットは変更されません。戦闘行動中のバトラーだけが実行できます。
  254.   # 判別…判別に使うので、すべて"target"で統一してください。
  255.   #
  256.   # 対象…ターゲットを変更させる対象。0はターゲット、それ以外はそのステートNoが
  257.   #       付いているバトラー全部のターゲットを変えます。
  258.   #       数値を負にすることでその絶対値のスキルIDを習得している味方全員を対象に。
  259.   #       インデックス(メンバー位置)で指定する場合、インデックス値に1000足します。
  260.   #       指定したインデックスが自分だったり存在しない場合(戦闘不能や逃走)は
  261.   #       0番から順に参照します。
  262.   #
  263.   # 変更先…変更先内容   0=自分に  1=自分のターゲットに 
  264.   #                      2=自分のターゲットに変更後、自身のターゲットを変更相手に
  265.   #                      3=変更した自身のターゲットを戻す(事前に2を実行していること)
  266.   
  267.   # ターゲット変更名             判別   対象  変更先
  268.   "標的を自身に"          => ["target",    0,  0],
  269.   "二人攻撃目標統一"      => ["target",   18,  1],
  270.   "四人攻撃目標統一"      => ["target",   19,  1],
  271.   "投げる相手選択"        => ["target", 1000,  2],
  272.   "投げつけ目標セット"    => ["target", 1000,  3],
  273.   
  274. #--------------------------------------------------------------------------
  275. # ● スキル派生 アクションを中断し、別のスキルに派生させます
  276. #--------------------------------------------------------------------------
  277.   # 判別…判別に使うので、すべて"der"で統一してください。
  278.   # 確率…派生する確率、0~100で。派生しなかった場合、残りアクションを続行します。
  279.   # 習得…派生するスキルが未修得でも実行可能ならtrue
  280.   # スキルID…派生するスキルのID
  281.   
  282.   # 派生名               判別  確率  習得 スキルID
  283.   "ヒールに派生"     => ["der", 100, true,  91],
  284.   "適当に派生"       => ["der", 100, true,  92],

  285. #--------------------------------------------------------------------------
  286. # ● アクション条件  条件を設定し、満たされなかったら以降の全行動を中断します
  287. #--------------------------------------------------------------------------
  288.   # 判別…判別に使うので、すべて"nece"で統一してください。
  289.   # 対象…条件を参照する対象。[0=自分] [1=ターゲット] [2=敵全体] [3=味方全体]
  290.   # 内容… [0=ステート] [1=パラメータ] [2=スイッチ] [3=変数] [4=習得スキル]
  291.   #
  292.   # 条件…上の内容で決めた項目に合致する数値を入れます。
  293.   # [0]ステート…ステートID
  294.   # [1]パラメータ…[0=現HP] [1=現MP] [2=攻撃力] [3=防御力] [4=精神力] [5=敏捷性]
  295.   # [2]スイッチ…ゲーム中のスイッチNo
  296.   # [3]変数…ゲーム中の変数No
  297.   # [4]習得スキル…特定のスキル習得を条件とし、そのスキルIDを指定します。
  298.   #
  299.   # 補足…上の条件補足。
  300.   # [0]ステート…条件となる被ステート人数。
  301.   #              符号が正でかかっている、負でかかっていないことが条件となります。
  302.   # [1]パラメータ…パラメータの数値。対象が複数だと平均を出します。
  303.   #                符号が正で数値以上、負で数値以下が条件となります。
  304.   # [2]スイッチ…スイッチONが条件なら true、OFFが条件なら false
  305.   # [3]変数…符号が正で数値以上、負で数値以下が条件となります。
  306.   # [4]習得スキル…条件となるスキル習得人数。
  307.   
  308.   # 派生名                 判別  対象  内容 条件 補足
  309.   "二人攻撃条件確認"  => ["nece",   3,   0,  18,    1],
  310.   "四人攻撃条件確認"  => ["nece",   3,   0,  19,    3],
  311.   "浮遊ステート確認"  => ["nece",   0,   0,  17,    1],
  312.   "ネコに変身してるか"=> ["nece",   0,   0,  20,    1],
  313.   
  314. #--------------------------------------------------------------------------
  315. # ● バトラー回転 画像を回転。反転と違い、武器アクションは反映されません
  316. #--------------------------------------------------------------------------
  317.   # 判別…判別に使うので、すべて"angle"で統一してください。
  318.   # 時間…回転にかける時間。
  319.   # 始度…回転開始時の角度。0~360度を指定。正が半時計周り、負が時計周り。
  320.   # 終度…回転終了時の角度。0~360度を指定。上記ともにエネミーは逆計算になります。
  321.   # 復帰…trueにすると終了と同時に通常角度に戻る。falseはアクション中そのまま。

  322.   #                     判別  時間 始度 終度 復帰
  323.   "倒れたまま"     => ["angle",  0, -90, -90,false],
  324.   "右回り1回転"    => ["angle", 24,   0,-360,false],

  325. #--------------------------------------------------------------------------
  326. # ● バトラー拡大縮小 武器アクションは反映されません
  327. #--------------------------------------------------------------------------
  328.   # 判別…判別に使うので、すべて"zoom"で統一してください。
  329.   # 時間…拡大縮小にかける時間。
  330.   # X拡…横の拡大率。1.0が等倍で、0.5が半分になります。
  331.   # Y拡…縦の拡大率。1.0が等倍で、0.5が半分になります。
  332.   # 復帰…trueにすると終了と同時に等倍に戻ります。falseはそのまま。
  333.   #       拡大縮小中は一時的に転送元原点が変わりますが、この復帰で元に戻ります。

  334.   #                   判別  時間  X拡  Y拡  復帰
  335.   "縦縮み"         => ["zoom", 16, 1.0, 0.5, true],
  336.   
  337. #--------------------------------------------------------------------------
  338. # ● 戦闘アニメ データベースの戦闘アニメを表示します
  339. #--------------------------------------------------------------------------
  340.   # 判別…判別に使うので、すべて"anime"で統一してください。
  341.   # ID…アニメID。-1で武器やスキルに設定された対象側アニメになりダメージを表示。
  342.   #     -2にするとスキルでも武器依存のアニメになります。
  343.   #     -3にするとスキルに設定された使用側アニメを表示。
  344.   # 対象… [0=自分] [1=ターゲット]
  345.   # 反転…trueでアニメ画像が反転されます。
  346.   # ウエイト…アニメ表示が終わるまで待つならtrue。
  347.   
  348.   #                       判別      ID 対象  反転  ウエイト
  349.   "使用側アニメ"      => ["anime",  -3,  0,false,false],
  350.   "対象アニメ"        => ["anime",  -1,  1,false,false],
  351.   "対象アニメウエイト"=> ["anime",  -1,  1,false, true],
  352.   "対象アニメ武器"    => ["anime",  -2,  1,false,false],
  353.   "打撃アニメ"        => ["anime",   4,  1,false,false],
  354.   "斬撃/必殺技1"      => ["anime",  67,  1,false,false],
  355.   "同時攻撃/雷"       => ["anime",  34,  1,false,false],
  356.   "同時攻撃/土"       => ["anime",  40,  1,false,false],
  357.    
  358. #--------------------------------------------------------------------------
  359. # ● アニメ飛ばし 戦闘アニメを飛ばします。飛び道具、遠距離攻撃用
  360. #--------------------------------------------------------------------------
  361.   # ID…データベースで設定されているアニメのID。0はアニメを非表示に。
  362.   # 対象…飛ばす対象 [0=ターゲット] [1=敵全体の中心] [2=味方全体の中心] [4=自身]
  363.   # タイプ…[0=当たって消える] [1=直線に貫通]
  364.   # 時間…アニメを飛ばす際の移動時間。大きいほど速度も遅い。
  365.   # 軌道…アニメを飛ばす際の軌道。数値を入れると曲線に。正が下、負が上軌道。
  366.   # 調X…微調整するX軸。飛ばす初期X座標が変化します。エネミーは自動で逆計算に。
  367.   # 調Y…微調整するY軸。飛ばす初期Y座標が変化します。
  368.   # 始…アニメを飛ばす際の開始位置。[0=自身] [1=対象] [2=移動させない]
  369.   # ループ…アニメセルを最初にループさせる場合はtrue
  370.   # 武器…下の貼り付ける武器アクション名を入れます。武器を表示しないなら""
  371.   
  372.   #                     判別   ID 対象 タイプ 時間  軌 調X 調Y 始  ループ 武器
  373.   "魔法始動アニメ"  => ["m_a",  1,   4,  0,  25,   0,  0,  0, 2,false,""],
  374.   "対象から自身へ1" => ["m_a", 92,   0,  0,  12,   0,  0,  0, 1, true,""],
  375.   "武器投げ開始"    => ["m_a",  0,   0,  0,  12, -24,  0,  0, 0,false,"回転投げ"],
  376.   "武器投げ戻し"    => ["m_a",  0,   0,  0,  12,  24,  0,  0, 1,false,"回転投げ"],
  377.   "全体アニメ単体化"=> ["m_a",100,   1,  0,  52,   0,  0,  0, 2,false,""],
  378.   
  379. #--------------------------------------------------------------------------
  380. # ● アニメ飛ばしに貼り付ける武器画像アクション 上のアニメ飛ばし専用
  381. #--------------------------------------------------------------------------
  382.   # 貼り付けた武器画像の動き。この画像は武器アクションの画像とは別に設定できます。
  383.   # その場合貼り付ける画像は武器設定で行ってください。
  384.   # 始度…動作前の最初の角度。半時計回りで0~360度。
  385.   # 終度…動作後の角度。半時計回りで0~360度。
  386.   # 時間…回転にかける時間。小さいほど早い。動作は消えるまでループし続けます。
  387.   
  388.   # 武器アクション名    始度 終度 時間
  389.   "回転投げ"     => [   0, 360,  8],
  390.   
  391. #--------------------------------------------------------------------------
  392. # ● サウンドの演奏
  393. #--------------------------------------------------------------------------
  394.   # 判別…判別に使うので、すべて"sound"で統一してください。
  395.   # 種別…効果音は"se"  BGMは"bgm"  BGSは"bgs"
  396.   # ピッチ…ピッチ、50~150まで指定。音量…ボリューム どちらも100がデフォルト。
  397.   # ファイル名…再生するファイル名。""にするとBGM、BGSを変えずに各種設定可能。
  398.   
  399.   #   SE名              判別   種別 ピッチ 音量  SEファイル名
  400.   "062-Swing01"       => ["sound", "se",  80, 100, "062-Swing01"],
  401.   
  402. #--------------------------------------------------------------------------
  403. # ● ゲーム全体のスピード変更  アクションの細部チェック用
  404. #--------------------------------------------------------------------------
  405.   # 判別…判別に使うので、すべて"fps"で統一してください。
  406.   # ゲームスピード…60がデフォルトで、低くなるほどスローになります。 
  407.   # ※このコマンドはFPSを直接変更するものです。取り扱いには注意してください。
  408.   #  またタイマーカウント、ゲーム内時間もその分ズレることになります。
  409.   
  410.   # 変更名           判別  ゲームスピード
  411.   "スロー再生"   => ["fps",  10],
  412.   "通常再生に"   => ["fps",  40],
  413.   
  414. #--------------------------------------------------------------------------
  415. # ● ステート付与
  416. #--------------------------------------------------------------------------
  417.   # 判別…判別に使うので、すべて"sta+"で統一してください。
  418.   # 対象…[0=自分] [1=ターゲット] [2=敵全体] [3=味方全体] [4=自分を除く味方全体]
  419.   # ステートID…付与するステートのID。「抵抗しない」ステート以外は抵抗します。
  420.   
  421.   # ステート付与名           判別  対象  ステートID
  422.   "二人攻撃ステート付与" => ["sta+",  0,  18],
  423.   "四人攻撃ステート付与" => ["sta+",  0,  19],
  424.   "neko"                 => ["sta+",  0,  20],
  425.   
  426. #--------------------------------------------------------------------------
  427. # ● ステート解除
  428. #--------------------------------------------------------------------------
  429.   # 判別…判別に使うので、すべて"sta-"で統一してください。
  430.   # 対象…[0=自分] [1=ターゲット] [2=敵全体] [3=味方全体] [4=自分を除く味方全体]
  431.   # ステートID…解除するステートのID
  432.   
  433.   # ステート付与名           判別  対象  ステートID
  434.   "二人攻撃ステート解除" => ["sta-",  3,  18],
  435.   "四人攻撃ステート解除" => ["sta-",  3,  19],

  436. #--------------------------------------------------------------------------
  437. # ● バトラー画像ファイル変更  自身のみアクター限定
  438. #--------------------------------------------------------------------------
  439.   # 判別…判別に使うので、すべて"change"で統一してください。
  440.   # リセット…戦闘後も変更を反映させるならfalse。キャラチップも変わります。
  441.   # ファイル名…変更する画像ファイル名。認識先を変えるので"_1"は指定しないように。
  442.   
  443.   # 変更名               判別   リセット  ファイル名
  444.   "ネコに変身"    => ["change", true,"007-Fighter07"],
  445.   "変身解除"      => ["change", true,"019-Thief04"],
  446.   
  447. #--------------------------------------------------------------------------
  448. # ● ピクチャの表示 バトラー一体につき同時に1枚表示できます
  449. #--------------------------------------------------------------------------
  450.   # 始X…移動開始位置。画面から見たX座標。ピクチャの左上を原点とします。
  451.   # 始Y…移動開始位置。画面から見たY座標。
  452.   # 終X…移動終了X座標。
  453.   # 終Y…移動終了Y座標。
  454.   # 時間…移動時間。大きいほど遅い。これを距離で割ったのが1フレーム移動距離です。
  455.   # Z軸…HPウインドウよりも手前に表示するならtrue
  456.   # ピクチャファイル名…ピクチャフォルダ内のファイル名。

  457.   #                       判別   始X  始Y  終X  終Y 時間  Z軸 ピクチャファイル名
  458.   "カットイン1始"     => ["pic",   0,-480,   0,   0,  8, true,"ピクチャテスト"],
  459.   "カットイン1終"     => ["pic",   0,   0,   0, 480,  8, true,"ピクチャテスト"],
  460.   
  461. #--------------------------------------------------------------------------
  462. # ● ゲームスイッチの操作
  463. #--------------------------------------------------------------------------
  464.   # 判別…判別に使うので、すべて"switch"で統一してください。
  465.   # スイッチNo…何番のスイッチを操作するか
  466.   # ON/OFF…ONにするならtrue、OFFにするならfalse
  467.   #
  468.   # スイッチ操作名          判別   スイッチNo ON/OFF   
  469.   "スイッチNo1/ON"    => ["switch",   1,  true],
  470.   
  471. #--------------------------------------------------------------------------
  472. # ● ゲーム変数の操作
  473. #--------------------------------------------------------------------------
  474.   # 判別…判別に使うので、すべて"variable"で統一してください。
  475.   # 変数No…何番の変数を操作するか
  476.   # 操作…[0=代入] [1=加算] [2=減算] [3=乗算] [4=除算] [5=剰余]
  477.   # オペランド…演算の対象となる数値を指定します。
  478.   #
  479.   # 変数操作名           判別     変数No 操作 オペランド
  480.   "変数No1/+1"       => ["variable",   1,   1,    1],
  481.   
  482. #--------------------------------------------------------------------------
  483. # ● その他 設定項目なし。ここで使われている名称は変更しないでください。
  484. #--------------------------------------------------------------------------
  485.   # ピクチャ消去…表示しているピクチャを消します。
  486.   # 残像ON…バトラーの軌跡に残像を残します。通しアクション中は残像し続けます。
  487.   # 残像OFF…残像を消します。
  488.   # 反転…画像を反転します。再度反転させるか座標リセットしない限り反転したまま。
  489.   # 待機に移行しない…行動後、待機アクションを取らせません。
  490.   # コラプス許可…ターゲットのHPが0になった場合、このタイミングでコラプスを
  491.   #               開始させます。これがなければアクション終了時にコラプスします。
  492.   # 個別処理開始…全体攻撃を個別で処理する場合の、リピート行動開始の目印です。
  493.   # 個別処理終了…全体攻撃を個別で処理する場合の、リピート行動終了の目印です。
  494.   # 初期位置変更…元の座標(初期位置)を今いる位置に変更します。
  495.   # 初期位置変更解除…初期位置変更で変化した座標を元に戻します。
  496.   # アクティブ解除…戦闘行動が終了したとみなし、直後に次のキャラが行動開始します。
  497.   #                 コラプス許可機能も含んでおり、これ以降ダメージは与えられません。
  498.   # 終了…行動の終了。これは入れなくてもアクションがなくなれば自動で認識します。
  499.   
  500.   "ピクチャ消去"    => ["ピクチャ消去"],
  501.   "残像ON"          => ["残像ON"],
  502.   "残像OFF"         => ["残像OFF"],
  503.   "反転"            => ["反転"],
  504.   "待機に移行しない"=> ["待機に移行しない"],
  505.   "コラプス許可"    => ["コラプス許可"],
  506.   "個別処理開始"    => ["個別処理開始"],
  507.   "個別処理終了"    => ["個別処理終了"],
  508.   "初期位置変更"    => ["初期位置変更"],
  509.   "初期位置変更解除"=> ["初期位置変更解除"],
  510.   "アクティブ解除"  => ["アクティブ解除"],
  511.   "終了"            => ["終了"]
  512.   
  513. #--------------------------------------------------------------------------
  514. # ● ウエイトについて
  515. #--------------------------------------------------------------------------
  516.   # 単発アクションで数値のみの場合、それがそのままウエイト時間となります。
  517.   # つまり単発アクション名に数値のみの名称は使えないので注意してください。
  518.   # ウエイトは次のアクションに行かずに待つ時間ですが、バトラーアニメの更新は
  519.   # 止まらずに行われます。
  520.   
  521.   }
  522. #==============================================================================
  523. # ■ 通しアクション
  524. #------------------------------------------------------------------------------
  525. #  上の単発アクションを組み合わせたもので、これが実際に取る行動となります
  526. #==============================================================================
  527.   # ここの通しアクション名が下のアクター、エネミー指定アクションに使われます。
  528.   # 行動は左側から順番に行われます。
  529.   ACTION = {
  530. #------------------------------- 待機系 -----------------------------------------  
  531.   # 通しアクション名     行動
  532.   
  533.   "戦闘開始"          => ["戦闘開始前の位置へ","座標リセット"],
  534.                           
  535.   "待機"              => ["待機"],
  536.                           
  537.   "浮遊待機"          => ["待機(固定)","6","低空浮遊中","4",
  538.                           "低空浮遊中2","4","低空浮遊中3","4",
  539.                           "低空浮遊中4","4"],
  540.                           
  541.   "気絶"              => ["倒れたまま","戦闘不能"],
  542.                           
  543.   "ダメージ"          => ["被ダメージ","座標リセット"],
  544.                           
  545.   "逃走"              => ["味方逃走"],
  546.                           
  547.   "エネミー逃走"      => ["味方逃走","座標リセット"],
  548.                           
  549.   "逃走失敗"          => ["逃走失敗","待機(固定)","8","座標リセット"],
  550.                           
  551.   "コマンド入力"      => ["一歩前移動"],
  552.                           
  553.   "コマンド入力後"    => ["座標リセット"],
  554.                           
  555.   "防御"              => ["待機(固定)","4","浮遊ステート確認","低空浮遊中",
  556.                           "2","低空浮遊中2","2","低空浮遊中3","2",
  557.                           "低空浮遊中4","2"],
  558.                           
  559.   "回避"              => ["一歩後ジャンプ","一歩後ジャンプ","待機(固定)","16",
  560.                           "座標リセット"],
  561.                           
  562.   "エネミー回避"      => ["一歩後ジャンプ","待機(固定)","16","座標リセット"],
  563.                           
  564.   "勝利"              => ["待機(固定)","16","右向き(固定)","勝利のジャンプ",
  565.                           "待機(固定)","待機に移行しない","ネコに変身してるか",
  566.                           "魔法始動アニメ","変身解除","待機(固定)","待機に移行しない",],
  567.                           
  568.   "座標復帰"          => ["座標リセット"],
  569.                           
  570. #------------------------------- 強制系 ----------------------------------------                          
  571.                           
  572.   "バジル合体攻撃1"   => ["2","目標左前移動","待機(固定)",
  573.                           "魔法始動アニメ","武器回し下","武器掲げ",
  574.                           "右払い抜け","32","後退リセット"],
  575.                           
  576.   "四人合体攻撃1"     => ["2","四人攻撃移動2","待機(固定)","魔法始動アニメ",
  577.                           "武器回し下","武器掲げ","58",
  578.                           "左払い抜け","46","後退リセット"],
  579.                           
  580.   "四人合体攻撃2"     => ["2","四人攻撃移動3","待機(固定)","魔法始動アニメ",
  581.                           "武器回し下","武器掲げ","16","右払い抜け2","上昇",
  582.                           "同時攻撃/土","82","後退リセット"],
  583.                           
  584.   "四人合体攻撃3"     => ["2","四人攻撃移動4","待機(固定)","魔法始動アニメ",
  585.                           "武器回し下","武器掲げ","左払い抜け2","小吹き飛ばし",
  586.                           "同時攻撃/雷","94","後退リセット"],
  587.                           
  588.   "投げつけられる"    => ["右回り1回転","4","目標高速移動","一歩後ジャンプ","4",
  589.                           "待機(固定)","一歩後ジャンプ","待機(固定)","18"],
  590.                           
  591. #--------------------------- 基本アクション系 ----------------------------------
  592.   
  593.   "通常攻撃"          => ["目標前移動","対象アニメ","武器振り攻撃","10",
  594.                           "コラプス許可","後退リセット"],
  595.                           
  596.                           
  597.   "敵武器なし攻撃"    => ["目標前移動","対象アニメ","武器振り攻撃","4",
  598.                           "コラプス許可","後退リセット"],
  599.                           
  600.   "汎用スキル使用"    => ["一歩前移動","待機(固定)","使用側アニメ",
  601.                           "武器回し下","武器掲げ","武器振り攻撃",
  602.                           "対象アニメ","コラプス許可","座標リセット"],
  603.                           
  604.   "汎用スキル個別処理"=> ["一歩前移動","使用側アニメ","武器回し下","武器掲げ",
  605.                           "個別処理開始","武器振り攻撃","対象アニメ","12",
  606.                           "個別処理終了","コラプス許可","座標リセット"],
  607.                           
  608.   "アイテム使用"      => ["目標前移動","待機(固定)","8","対象アニメウエイト",
  609.                           "コラプス許可","座標リセット"],
  610.                           
  611. #------------------------------ スキル系 ---------------------------------------                          
  612.   
  613.   "多段攻撃"          => ["残像ON","前ジャンプ叩き","対象アニメ武器","16",
  614.                           "対象アニメ武器","武器回し下","武器回し上",
  615.                           "その場ジャンプ叩き","対象アニメ武器","8",
  616.                           "対象アニメ武器","反転","武器振り攻撃","8","反転",
  617.                           "その場ジャンプ叩き","対象アニメ武器","一歩後ジャンプ",
  618.                           "一歩後ジャンプ","待機(固定)","対象アニメ武器",
  619.                           "払い抜け","コラプス許可","残像OFF","16","後退リセット"],
  620.                         
  621.                           
  622.   "多段攻撃ランダム用"=> ["前ジャンプ叩き","対象アニメ武器","12","待機(固定)",
  623.                           "前ジャンプ叩き","対象アニメ武器","12","待機(固定)",
  624.                           "前ジャンプ叩き","対象アニメ武器","12","待機(固定)",
  625.                           "前ジャンプ叩き","対象アニメ武器","12","コラプス許可","座標リセット"],
  626.                           
  627.   "高速多段攻撃"      => ["目標前移動","武器振り攻撃","小吹き飛ばし","対象アニメ武器",
  628.                           "目標前高速移動","武器振り攻撃","小吹き飛ばし","武器振り攻撃L","対象アニメ武器",
  629.                           "目標前高速移動","武器振り攻撃","小吹き飛ばし","武器振り攻撃L","対象アニメ武器",
  630.                           "目標前高速移動","武器振り攻撃","小吹き飛ばし","武器振り攻撃L","対象アニメ武器",
  631.                           "目標前高速移動","武器振り攻撃","小吹き飛ばし","武器振り攻撃L","対象アニメ武器",
  632.                           "目標前高速移動","武器振り攻撃","小吹き飛ばし","武器振り攻撃L","対象アニメ武器",
  633.                           "コラプス許可","12","座標リセット"],
  634.                           
  635.   "二人同時攻撃"      => ["二人攻撃条件確認","二人攻撃目標統一","バジルと攻撃",
  636.                           "目標右前移動","待機(固定)","魔法始動アニメ","武器回し下",
  637.                           "武器掲げ","斬撃/必殺技1","左払い抜け","32","対象アニメ",
  638.                           "コラプス許可","後退リセット","二人攻撃ステート解除"],
  639.                           
  640.   "二人同時攻撃準備"  => ["二人攻撃ステート付与"],  
  641.                           
  642.   "四人同時攻撃"      => ["四人攻撃条件確認","四人攻撃目標統一","四人で攻撃1",
  643.                           "四人で攻撃2","四人で攻撃3","四人攻撃移動1","待機(固定)",
  644.                           "魔法始動アニメ","武器回し下","武器掲げ","58",
  645.                           "斬撃/必殺技1","右払い抜け","14","対象アニメウエイト",
  646.                           "コラプス許可","後退リセット","合体攻撃解除"],
  647.                           
  648.   "四人同時攻撃準備"  => ["四人攻撃ステート付与"],
  649.                           
  650.   "武器投げ"          => ["一歩前移動","武器振り攻撃","062-Swing01","待機(固定)",
  651.                           "武器投げ開始","12","対象アニメ武器","コラプス許可",
  652.                           "武器投げ戻し","座標リセット"],
  653.                           
  654.   "個別全体遠距離攻撃"=> ["使用側アニメ","待機(固定)","16","一歩前ジャンプ",
  655.                           "ジャンプ停止","個別処理開始","標的を自身に","着弾1",
  656.                           "武器振り攻撃","対象アニメ武器","個別処理終了",
  657.                           "コラプス許可","ジャンプ着地","座標リセット"],
  658.                           
  659.   "全体遠距離攻撃"    => ["標的を自身に","武器振り攻撃","着弾1","4",
  660.                           "対象アニメウエイト","コラプス許可"],
  661.                         
  662.   "ヒールに派生"      => ["目標前移動","対象アニメ","武器振り攻撃",
  663.                           "8","ヒールに派生","座標リセット"],
  664.                           
  665.   "適当に派生"        => ["逃走失敗","魔法始動アニメ","武器回し下","武器掲げ",
  666.                           "対象アニメウエイト","適当に派生","座標リセット"],
  667.                           
  668.   "カットイン"        => ["待機(固定)","魔法始動アニメ","カットイン1始",
  669.                           "40","カットイン1終","目標前移動",
  670.                           "武器振り攻撃","対象アニメウエイト","コラプス許可",
  671.                           "ピクチャ消去","後退リセット"],
  672.                           
  673.   "踏み潰し"          => ["目標にジャンプ","打撃アニメ","縦にぺしゃんこ","一歩後ジャンプ",
  674.                           "踏みつけ","打撃アニメ","縦にぺしゃんこ","一歩後ジャンプ",
  675.                           "踏みつけ","対象アニメ","縦にぺしゃんこ","一歩後ジャンプ",
  676.                           "一歩後ジャンプ","コラプス許可","待機(固定)","8","後退リセット"],
  677.                           
  678.   "全体攻撃1"         => ["一歩前移動","待機(固定)","魔法始動アニメ","武器回し下",
  679.                           "武器掲げ","全体アニメ単体化","武器振り攻撃","48",
  680.                           "対象アニメウエイト","コラプス許可","座標リセット"],
  681.                           
  682.   "ネコに変身"        => ["一歩前ジャンプ","待機(固定)","魔法始動アニメ","16",
  683.                           "ネコに変身","待機(固定)","neko","対象アニメウエイト",
  684.                           "一歩後ジャンプ","座標リセット"],                     
  685.                           
  686.   "味方投げつけ"      => ["投げる相手選択","目標移動","味方持ち上げ","4",
  687.                           "062-Swing01","投げつけ目標セット","味方投げ飛ばし",
  688.                           "味方投げ","待機(固定)","対象アニメ","コラプス許可",
  689.                           "座標リセット","待機(固定)","32"],
  690.                           
  691.                           
  692. #-------------------------------------------------------------------------------
  693.   "終了"              => ["終了"]}
  694. end
  695. #==============================================================================
  696. # ■ Game_Actor
  697. #------------------------------------------------------------------------------
  698. #  アクターごとに基本アクションを指定します
  699. #==============================================================================
  700. class Game_Actor < Game_Battler
  701.   #--------------------------------------------------------------------------
  702.   # ● アクターIDから素手(武器なし)時のアクションを決めます
  703.   #--------------------------------------------------------------------------
  704.   # when 1 ←この数字がアクターID
  705.   # return "通常攻撃" ←対応する通しアクション名を入れてください
  706.   def non_weapon
  707.     case @actor_id
  708.     when 1
  709.       return "通常攻撃"
  710.     end
  711.     # 上記のアクターID以外すべてに適用されるアクション
  712.     return "通常攻撃"
  713.   end
复制代码


此贴于 2009-2-13 0:09:14 被版主redant提醒,请楼主看到后对本贴做出回应。
此贴于 2009-2-16 13:36:22 被版主darkten提醒,请楼主看到后对本贴做出回应。
版务信息:本贴由楼主自主结贴~

Lv1.梦旅人

梦石
0
星屑
50
在线时间
7 小时
注册时间
2008-12-25
帖子
104
2
 楼主| 发表于 2009-2-13 07:09:18 | 只看该作者
接楼上的脚本:
  1.   #--------------------------------------------------------------------------
  2.   # ● 通常待機
  3.   #--------------------------------------------------------------------------
  4.   def normal
  5.     case @actor_id
  6.     when 1
  7.       return "待機"
  8.     end
  9.     # 上記のアクターID以外すべてに適用されるアクション
  10.     return "待機"
  11.   end
  12.   #--------------------------------------------------------------------------
  13.   # ● ピンチ(HP1/4以下)
  14.   #--------------------------------------------------------------------------
  15.   def pinch
  16.     case @actor_id
  17.     when 1
  18.       return "待機"
  19.     end
  20.     # 上記のアクターID以外すべてに適用されるアクション
  21.     return "待機"
  22.   end
  23.   #--------------------------------------------------------------------------
  24.   # ● 防御
  25.   #--------------------------------------------------------------------------
  26.   def defence
  27.     case @actor_id
  28.     when 1
  29.       return "防御"
  30.     end
  31.     # 上記のアクターID以外すべてに適用されるアクション
  32.     return "防御"
  33.   end
  34.   #--------------------------------------------------------------------------
  35.   # ● ダメージ 対象アニメ時、ヒットしていればこのアクションを取ります
  36.   #--------------------------------------------------------------------------
  37.   def damage_hit
  38.     case @actor_id
  39.     when 1
  40.       return "ダメージ"
  41.     end
  42.     # 上記のアクターID以外すべてに適用されるアクション
  43.     return "ダメージ"
  44.   end  
  45.   #--------------------------------------------------------------------------
  46.   # ● 回避 対象アニメ時、ヒットしていなければこのアクションを取ります
  47.   #--------------------------------------------------------------------------
  48.   def evasion
  49.     case @actor_id
  50.     when 1
  51.       return "回避"
  52.     end
  53.     # 上記のアクターID以外すべてに適用されるアクション
  54.     return "回避"
  55.   end  
  56.   #--------------------------------------------------------------------------
  57.   # ● コマンド入力前動作
  58.   #--------------------------------------------------------------------------
  59.   def command_b
  60.     case @actor_id
  61.     when 1
  62.       return "コマンド入力"
  63.     end
  64.     # 上記のアクターID以外すべてに適用されるアクション
  65.     return "コマンド入力"
  66.   end
  67.   #--------------------------------------------------------------------------
  68.   # ● コマンド入力後動作
  69.   #--------------------------------------------------------------------------
  70.   def command_a
  71.     case @actor_id
  72.     when 1
  73.       return "コマンド入力後"
  74.     end
  75.     # 上記のアクターID以外すべてに適用されるアクション
  76.     return "コマンド入力後"
  77.   end
  78.   #--------------------------------------------------------------------------
  79.   # ● 逃走成功
  80.   #--------------------------------------------------------------------------
  81.   def run_success
  82.     case @actor_id
  83.     when 1
  84.       return "逃走"
  85.     end
  86.     # 上記のアクターID以外すべてに適用されるアクション
  87.     return "逃走"
  88.   end
  89.   #--------------------------------------------------------------------------
  90.   # ● 逃走失敗
  91.   #--------------------------------------------------------------------------
  92.   def run_ng
  93.     case @actor_id
  94.     when 1
  95.       return "逃走失敗"
  96.     end
  97.     # 上記のアクターID以外すべてに適用されるアクション
  98.     return "逃走失敗"
  99.   end
  100.   #--------------------------------------------------------------------------
  101.   # ● 勝利
  102.   #--------------------------------------------------------------------------
  103.   def win
  104.     case @actor_id
  105.     when 1
  106.       return "勝利"
  107.     end
  108.     # 上記のアクターID以外すべてに適用されるアクション
  109.     return "勝利"
  110.   end
  111.   #--------------------------------------------------------------------------
  112.   # ● 戦闘突入時のアクション
  113.   #--------------------------------------------------------------------------  
  114.   def first_action
  115.     case @actor_id
  116.     when 1
  117.       return "戦闘開始"
  118.     end
  119.     # 上記のアクターID以外すべてに適用されるアクション
  120.     return "戦闘開始"
  121.   end
  122.   #--------------------------------------------------------------------------
  123.   # ● アクションが中断された場合の復帰アクション
  124.   #--------------------------------------------------------------------------  
  125.   def recover_action
  126.     case @actor_id
  127.     when 1
  128.       return "座標復帰"
  129.     end
  130.     # 上記のアクターID以外すべてに適用されるアクション
  131.     return "座標復帰"
  132.   end
  133.   #--------------------------------------------------------------------------
  134.   # ● 影グラフィック  キャラクターフォルダから参照
  135.   #--------------------------------------------------------------------------
  136.   # return "shadow00" ←指定する画像ファイル名を入れてください
  137.   def shadow
  138.     case @actor_id
  139.     when 1
  140.       return "shadow00"
  141.     end
  142.     # 上記のアクターID以外すべてに適用される影グラフィック
  143.     return "shadow00"
  144.   end
  145.   #--------------------------------------------------------------------------
  146.   # ● 影グラフィックの位置を微調整
  147.   #--------------------------------------------------------------------------
  148.   # return [横座標, 縦座標]  数値分加算されます
  149.   def shadow_plus
  150.     case @actor_id
  151.     when 1
  152.       return [ 0, 0]
  153.     end
  154.     # 上記のアクターID以外すべてに適用される位置
  155.     return [ 0, 0]
  156.   end
  157. end
  158. #==============================================================================
  159. # ■ Game_Enemy
  160. #------------------------------------------------------------------------------
  161. #  エネミーの基本アクション指定
  162. #==============================================================================
  163. class Game_Enemy < Game_Battler
  164.   #--------------------------------------------------------------------------
  165.   # ● エネミーIDから武器設定なしの通常攻撃アクションを決めます
  166.   #--------------------------------------------------------------------------
  167.   # when 1 ←この数字がエネミーID
  168.   # return "敵武器なし攻撃" ←対応する通しアクション名を入れてください
  169.   def base_action
  170.     case @enemy_id
  171.     when 1
  172.       return "敵武器なし攻撃"
  173.     end
  174.     # 上記のエネミーID以外すべてに適用されるアクション
  175.     return "敵武器なし攻撃"
  176.   end
  177.   #--------------------------------------------------------------------------
  178.   # ● 通常待機
  179.   #--------------------------------------------------------------------------
  180.   def normal
  181.     case @enemy_id
  182.     when 1
  183.       return "待機"
  184.     end
  185.     # 上記のエネミーID以外すべてに適用されるアクション
  186.     return "待機"
  187.   end
  188.   #--------------------------------------------------------------------------
  189.   # ● ピンチ(HP1/4以下)
  190.   #--------------------------------------------------------------------------
  191.   def pinch
  192.     case @enemy_id
  193.     when 1
  194.       return "待機"
  195.     end
  196.     # 上記のエネミーID以外すべてに適用されるアクション
  197.     return "待機"
  198.   end
  199.   #--------------------------------------------------------------------------
  200.   # ● 防御
  201.   #--------------------------------------------------------------------------  
  202.   def defence
  203.     case @enemy_id
  204.     when 1
  205.       return "防御"
  206.     end
  207.     # 上記のエネミーID以外すべてに適用されるアクション
  208.     return "防御"
  209.   end
  210.   #--------------------------------------------------------------------------
  211.   # ● ダメージ 対象アニメ時、ヒットしていればこのアクションを取ります
  212.   #--------------------------------------------------------------------------
  213.   def damage_hit
  214.     case @enemy_id
  215.     when 1
  216.       return "ダメージ"
  217.     end
  218.     # 上記のエネミーID以外すべてに適用されるアクション
  219.     return "ダメージ"
  220.   end
  221.   #--------------------------------------------------------------------------
  222.   # ● 回避 対象アニメ時、ヒットしてなければこのアクションを取ります
  223.   #--------------------------------------------------------------------------
  224.   def evasion
  225.     case @enemy_id
  226.     when 1
  227.       return "エネミー回避"
  228.     end
  229.     # 上記のエネミーID以外すべてに適用されるアクション
  230.     return "エネミー回避"
  231.   end
  232.   #--------------------------------------------------------------------------
  233.   # ● 逃走
  234.   #--------------------------------------------------------------------------
  235.   def run_success
  236.     case @enemy_id
  237.     when 1
  238.       return "エネミー逃走"
  239.     end
  240.     # 上記のエネミーID以外すべてに適用されるアクション
  241.     return "エネミー逃走"
  242.   end
  243.   #--------------------------------------------------------------------------
  244.   # ● 戦闘突入時のアクション
  245.   #--------------------------------------------------------------------------  
  246.   def first_action
  247.     case @enemy_id
  248.     when 1
  249.       return "戦闘開始"
  250.     end
  251.     # 上記のエネミーID以外すべてに適用されるアクション
  252.     return "戦闘開始"
  253.   end
  254.   #--------------------------------------------------------------------------
  255.   # ● アクションが中断された場合の復帰アクション
  256.   #--------------------------------------------------------------------------  
  257.   def recover_action
  258.     case @enemy_id
  259.     when 1
  260.       return "座標復帰"
  261.     end
  262.     # 上記のエネミーID以外すべてに適用されるアクション
  263.     return "座標復帰"
  264.   end
  265.   #--------------------------------------------------------------------------
  266.   # ● 影グラフィック  キャラクターフォルダから参照
  267.   #--------------------------------------------------------------------------
  268.   # return "shadow01" ←指定する画像ファイル名を入れてください。
  269.   def shadow
  270.     case @enemy_id
  271.     when 1
  272.       return "shadow01"
  273.     end
  274.     # 上記のエネミーID以外すべてに適用される影グラフィック
  275.     return "shadow01"
  276.   end
  277.   #--------------------------------------------------------------------------
  278.   # ● 影グラフィックの位置を微調整
  279.   #--------------------------------------------------------------------------
  280.   # return [横座標, 縦座標]
  281.   def shadow_plus
  282.     case @enemy_id
  283.     when 1
  284.       return [ 0, 0]
  285.     end
  286.     # 上記のエネミーID以外すべてに適用される位置
  287.     return [ 0, 0]
  288.   end
  289.   #--------------------------------------------------------------------------
  290.   # ● エネミー武器設定  アクションとアニメは武器のものに反映されます
  291.   #--------------------------------------------------------------------------
  292.   # return 1 ←この数字が武器ID。0にすると素手扱いになります。
  293.   #            エネミーアニメをONにしていると画像も表示されます。
  294.   def weapon
  295.     case @enemy_id
  296.     when 1
  297.       return 0
  298.     end
  299.     # 上記のエネミーID以外すべてに適用される武器ID
  300.     return 0
  301.   end
  302.   #--------------------------------------------------------------------------
  303.   # ● 戦闘配置の微調整  データベースで設定できない広範囲の座標はここで調整
  304.   #--------------------------------------------------------------------------
  305.   # return [ 0, 0] => [X座標、Y座標] この数値分データベース上の配置から変化します
  306.   def position_plus
  307.     case @enemy_id
  308.     when 1
  309.       return [0, 0]
  310.     end
  311.     # 上記のエネミーID以外すべてに適用される座標調整
  312.     return [ 0, 0]
  313.   end
  314.   #--------------------------------------------------------------------------
  315.   # ● エネミーのコラプス(撃破時の退場)タイプ
  316.   #--------------------------------------------------------------------------
  317.   # コラプスせずに残すなら1、ノーマルタイプは2、ボスタイプは3、ラスボスタイプは4
  318.   def collapse_type
  319.     case @enemy_id
  320.     when 1
  321.       return 2
  322.     when 33
  323.       return 3
  324.     when 34
  325.       return 4
  326.     end
  327.     # 上記のエネミーID以外すべてに適用されるコラプス
  328.     return 2
  329.   end
  330.   #--------------------------------------------------------------------------
  331.   # ● エネミー行動回数 1ターンに何回行動するか ATBとの併用はできません
  332.   #--------------------------------------------------------------------------
  333.   #        回数  確率  補正               
  334.   # return [  2, 100,  50]                       
  335.   #                        
  336.   # 回数…最大行動回数
  337.   # 確率…次の行動を取る確率。数値は%
  338.   # 補正…素早さ補正。行動するたびにこの数値%分素早さが低下
  339.   def action_time
  340.     case @enemy_id
  341.     when 1
  342.       return [ 1, 100, 100]
  343.     end
  344.     # 上記のエネミーID以外すべてに適用される行動回数
  345.     return [ 1, 100, 100]
  346.   end
  347.   #--------------------------------------------------------------------------
  348.   # ● エネミーアニメ
  349.   #--------------------------------------------------------------------------
  350.   # エネミーにアニメさせるか trueにするとアクターと同等の扱いになります。
  351.   # [設定方法]
  352.   # 1.エネミーのアニメ画像をキャラクターフォルダに用意
  353.   # 2.データベースのエネミーバトラーファイル名を、参照するキャラファイル名にする
  354.   def anime_on
  355.     case @enemy_id
  356.     when 1
  357.       return false
  358.     end
  359.     # 上記のエネミーID以外すべてに適用されるアニメ設定
  360.     return false
  361.   end
  362.   #--------------------------------------------------------------------------
  363.   # ● エネミーアニメ時の自動反転
  364.   #--------------------------------------------------------------------------
  365.   # 上のアニメがONになっているエネミーの画像や武器アニメを自動反転させるならtrue
  366.   def action_mirror
  367.     case @enemy_id
  368.     when 1
  369.       return false
  370.     end
  371.     # 上記のエネミーID以外すべてに適用されるアニメ設定
  372.     return false
  373.   end
  374. end
  375. module RPG
  376. #==============================================================================
  377. # ■ module RPG
  378. #------------------------------------------------------------------------------
  379. #  ステートアクション設定です。
  380. #==============================================================================
  381. class State
  382. #--------------------------------------------------------------------------
  383. # ● ID指定 ステートによって通常待機、ピンチのアクションが変わります。
  384. #--------------------------------------------------------------------------
  385. # when 1 ←この数字がステートID
  386. # return "気絶" ←対応する通しアクション名を入れてください
  387.   def base_action
  388.     case @id
  389.     when 1  # 戦闘不能(HP0)時です。最優先で選択されます
  390.       return "気絶"
  391.     when 21  
  392.       return "浮遊待機"
  393.     end
  394.     # 上記IDのステート以外すべてに適用される通しアクション
  395.     return "待機"
  396.   end
  397. #--------------------------------------------------------------------------
  398. # ● 拡張設定 ステートIDから拡張設定を決めます。重複可能。
  399. #--------------------------------------------------------------------------
  400. # "自動復活/50"…戦闘不能時に自動で復帰。戦闘不能付与で解除されない設定にすること。
  401. #                /の後ろの数字は復帰時のHP(最大値からの割合%)復帰後ステートは自動解除される
  402. # "魔法反射/64"…魔法(int_fが0ではない)スキルを反射。/の後に反射時のアニメIDを入れる
  403. # "物理反射/64"…物理(str_fが0ではない)スキルを反射。/の後に反射時のアニメIDを入れる
  404. # "魔法無効/65"…魔法(int_fが0ではない)スキルを無効化。/の後に無効時のアニメIDを入れる
  405. # "物理無効/65"…物理(str_fが0ではない)スキルを無効化。/の後に無効時のアニメIDを入れる
  406. # "コスト吸収"…受けたスキルのコストを自身に還元。数値はPOPしません
  407. # "0ターン解除"…行動順にかかわらずそのターン終了時にステートを解除
  408. # "エネミー除外"…エネミーに取らせたくないステートアクション
  409. # "ステートアクション禁止"…ステートが付加しても待機アクションに反映させない
  410. # "なし"…拡張なし
  411.   def extension
  412.     case @id
  413.     when 1  # 戦闘不能
  414.       return ["エネミー除外"]
  415.     when 18  
  416.       return ["0ターン解除"]
  417.     when 19  
  418.       return ["0ターン解除"]
  419.     when 20  
  420.       return ["ステートアクション禁止"]
  421.     when 21  
  422.       return ["魔法反射/64"]
  423.     end
  424.     # 上記のID以外すべてに適用される拡張設定
  425.     return ["なし"]
  426.   end
  427. end
  428. #==============================================================================
  429. # ■ module RPG
  430. #------------------------------------------------------------------------------
  431. #  武器アクション設定です。
  432. #==============================================================================
  433. class Weapon
  434. #--------------------------------------------------------------------------
  435. # ● アクション指定 装備している武器のIDから通常攻撃のアクションを決めます。
  436. #--------------------------------------------------------------------------
  437. # when 1 ←この数字が武器ID
  438. # return "通常攻撃" ←対応する通しアクション名を入れてください
  439.   def base_action
  440.     case @id
  441.     when 1
  442.       return "通常攻撃"
  443.     end
  444.     # 上記のID以外すべてに適用されるアクション
  445.     return "通常攻撃"
  446.   end
  447. #--------------------------------------------------------------------------
  448. # ● グラフィック指定 装備している武器のIDから武器グラフィックを指定します
  449. #--------------------------------------------------------------------------
  450. # return "001-Weapon01" ←対応する武器グラフィックのファイル名を入れてください
  451. #                         武器グラフィックはアイコンフォルダに入れてください
  452. # アイコンを利用する場合、IDにないものは全てアイコン画像を利用します
  453. # 特定の武器を非表示にしたい場合は空の画像を用意して、それを指定します
  454.   def graphic
  455.     case @id
  456.     when 1
  457.       return ""
  458.     end
  459.     # 上記ID以外は全てアイコン画像を利用
  460.     return ""
  461.   end
  462. #--------------------------------------------------------------------------
  463. # ● 飛ばしアニメに貼り付ける武器グラフィック アイコンフォルダを参照します
  464. #--------------------------------------------------------------------------
  465. # アニメ飛ばし用の武器画像は上の設定とは別に指定。弓と矢の表現などに。
  466. # ここで設定しなかった武器は上の画像と同じになります。
  467.   def flying_graphic
  468.     case @id
  469.     when 1
  470.       return ""
  471.     end
  472.     # 上記ID以外は全て上の画像を利用
  473.     return ""
  474.   end
  475. end  
  476. #==============================================================================
  477. # ■ module RPG
  478. #------------------------------------------------------------------------------
  479. #  スキルアクション設定です。
  480. #==============================================================================
  481. class Skill
  482. #--------------------------------------------------------------------------
  483. # ● スキルIDからアクションを決めます。
  484. #--------------------------------------------------------------------------  
  485.   def base_action
  486.     case @id
  487.     when 84
  488.       return "武器投げ"
  489.     when 85
  490.       return "多段攻撃"
  491.     when 86
  492.       return "高速多段攻撃"  
  493.     when 87
  494.       return "個別全体遠距離攻撃"  
  495.     when 88
  496.       return "全体遠距離攻撃"
  497.     when 89
  498.       return "多段攻撃ランダム用"  
  499.     when 90
  500.       return "ヒールに派生"  
  501.     when 91
  502.       return "適当に派生"  
  503.     when 92
  504.       return "通常攻撃"  
  505.     when 93
  506.       return "カットイン"  
  507.     when 94
  508.       return "踏み潰し"
  509.     when 95
  510.       return "全体攻撃1"
  511.     when 96
  512.       return "汎用スキル個別処理"
  513.     when 97
  514.       return "ネコに変身"
  515.     when 98
  516.       return "二人同時攻撃"
  517.     when 99
  518.       return "二人同時攻撃準備"
  519.     when 100
  520.       return "四人同時攻撃"
  521.     when 101
  522.       return "四人同時攻撃準備"
  523.     when 102
  524.       return "四人同時攻撃準備"
  525.     when 103
  526.       return "四人同時攻撃準備"
  527.     when 104
  528.       return "味方投げつけ"
  529.     end
  530.     # 上記のID以外すべてに適用されるアクション  
  531.     return "汎用スキル使用"
  532.   end
  533. #--------------------------------------------------------------------------
  534. # ● 拡張設定 スキルIDから拡張設定を決めます。重複可能。
  535. #--------------------------------------------------------------------------
  536. # "絶対先制"…かならずターンの最初に行動
  537. # "絶対後発"…かならずターンの最後に行動
  538. # "SPダメージ"…HPダメージ(回復)処理をそのままSPに変換
  539. # "吸収/50"…与えたダメージの/から後ろの数値%分回復。例だとダメージの50%回復
  540. # "必中"…絶対に攻撃が回避されない
  541. # "HP消費"…SP消費がHP消費に変わる
  542. # "%コストMAX"…スキルコストが最大SP(HP)からの割合に変化。例)MAXSP500でコスト10だとSP50消費に
  543. # "%コストNOW"…スキルコストが現在SP(HP)からの割合に変化
  544. # "反射無視"…魔法・物理スキル反射ステートを無視する
  545. # "%ダメージMAX/30"…ダメージ計算が対象の最大HP(SP)からの割合に変化。/から後の数値%分ダメージ
  546. # "%ダメージNOW/30"…ダメージ計算が対象の現在HP(SP)からの割合に変化。/から後の数値%分ダメージ
  547. # "コスト威力"…使用者の最大SP(HP)に対する消費SP(HP)の割合で威力が変化。MAX消費でそのままの威力、MAXの10%で威力1/10
  548. # "現HP威力"…使用者の最大HPに対する現在HPの割合で威力が変化。MAXでそのままの威力、MAXの10%で威力1/10
  549. # "現SP威力"…使用者の最大SPに対する現在SPの割合で威力が変化。MAXでそのままの威力、MAXの10%で威力1/10
  550. # "ヘルプ非表示"…アクション時、ヘルプウインドウにスキル名を表示しない
  551. # "全域"…ターゲット範囲が敵味方全体に
  552. # "ランダムターゲット"…ターゲット内から一体をランダムで選ぶように
  553. # "自分以外"…ターゲット内から自分を除く
  554. # "ダメージアクション禁止"…ダメージを与えた際のアクションを取らせない
  555.   def extension
  556.     case @id
  557.     when 86
  558.       return ["ダメージアクション禁止"]
  559.     when 89
  560.       return ["ランダムターゲット"]
  561.     when 94
  562.       return ["ダメージアクション禁止"]
  563.     when 96
  564.       return ["全域"]
  565.     when 98
  566.       return ["ダメージアクション禁止"]
  567.     when 99
  568.       return ["ヘルプ非表示","絶対先制"]
  569.     when 100
  570.       return ["ダメージアクション禁止"]
  571.     when 101
  572.       return ["ヘルプ非表示","絶対先制"]
  573.     when 102
  574.       return ["ヘルプ非表示","絶対先制"]
  575.     when 103
  576.       return ["ヘルプ非表示","絶対先制"]
  577.     end
  578.     # 上記スキルID以外は拡張設定なし
  579.     return []
  580.   end
  581. end  
  582. #==============================================================================
  583. # ■ module RPG
  584. #------------------------------------------------------------------------------
  585. #  アイテムアクション設定です。
  586. #==============================================================================
  587. class Item
  588. #--------------------------------------------------------------------------
  589. # ● アイテムIDからアクションを決めます。
  590. #--------------------------------------------------------------------------  
  591.   def base_action
  592.     case @id
  593.     when 1
  594.       return "アイテム使用"
  595.     end
  596.     # 上記のID以外すべてに適用されるアクション
  597.     return "アイテム使用"
  598.   end
  599. #--------------------------------------------------------------------------
  600. # ● 拡張設定 アイテムIDから拡張設定を決めます。重複可能。
  601. #--------------------------------------------------------------------------
  602. # "絶対先制"…かならずターンの最初に行動
  603. # "絶対後発"…かならずターンの最後に行動
  604. # "ヘルプ非表示"…ヘルプウインドウにアイテム名を表示しない
  605. # "全域"…ターゲット範囲が敵味方全体に
  606. # "ランダムターゲット"…ターゲット内から一体をランダムで選ぶように
  607. # "自分以外"…ターゲット内から自分を除く
  608. # "ダメージアクション禁止"…ダメージを与えた際のアクションを取らせない
  609. # "なし"…拡張なし
  610.   def extension
  611.     case @id
  612.     when 1
  613.       return ["なし"]
  614.     end
  615.     # 上記アイテムID以外は拡張設定なし
  616.     return []
  617.   end
  618. end
  619. end
复制代码



这是第2个脚本= =
名字是:        Sideview 1


  1. #==============================================================================
  2. # ■ Sprite_Battler Ver2.6
  3. #------------------------------------------------------------------------------
  4. #  バトラー表示用のスプライトです。
  5. #==============================================================================
  6. class Sprite_Battler < RPG::Sprite
  7.   #--------------------------------------------------------------------------
  8.   # ● オブジェクト初期化
  9.   #--------------------------------------------------------------------------
  10.   def initialize(viewport, battler = nil)
  11.     super(viewport)
  12.     @battler = battler
  13.     @battler_visible = false
  14.     @effect_type = 0                   # エフェクトの種類
  15.     @effect_duration = 0               # エフェクトの残り時間
  16.     @move_x = 0                        # 変化したX座標の累計
  17.     @move_y = 0                        # 変化したY座標の累計
  18.     @move_z = 0                        # 変化したZ座標の累計
  19.     @distanse_x = 0                    # X座標の移動距離
  20.     @distanse_y = 0                    # Y座標の移動距離
  21.     @moving_x = 0                      #1フレームあたりのX座標移動距離
  22.     @moving_y = 0                      #1フレームあたりのY座標移動距離
  23.     @move_speed_x = 0                  # X座標の移動速度
  24.     @move_speed_y = 0                  # Y座標の移動速度
  25.     @move_speed_plus_x = 0             # X座標の加減速時の補足移動速度
  26.     @move_speed_plus_y = 0             # Y座標の加減速時の補足移動速度
  27.     @move_boost_x = 0                  # X座標加速度
  28.     @move_boost_y = 0                  # Y座標加速度
  29.     @jump_time = 0                     # ジャンプ時間
  30.     @jump_time_plus = 0                # ジャンプ時間補足
  31.     @jump_up = 0                       # ジャンプ上昇
  32.     @jump_down = 0                     # ジャンプ下降
  33.     @jump_size = 0                     # ジャンプ高度
  34.     @float_time = 0                    # 浮遊時間
  35.     @float_up = 0                      # 1フレームあたりの浮遊高度
  36.     @jump_plus = 0                     # ジャンプに対する影位置補正
  37.     @angle = 0                         # 回転角度
  38.     @angling = 0                       # 1フレームあたりの回転角度
  39.     @angle_time = 0                    # 回転時間
  40.     @angle_reset = 0                   # 角度をリセットするか
  41.     @zoom_x = 0                        # 横の拡大率
  42.     @zoom_y = 0                        # 縦の拡大率
  43.     @zooming_x = 0                     # 1フレームあたりの横拡大率
  44.     @zooming_y = 0                     # 1フレームあたりの縦拡大率
  45.     @zoom_time = 0                     # 拡大時間
  46.     @zoom_reset = 0                    # 拡大をリセットするか
  47.     @target_battler = []               # ターゲットバトラー情報
  48.     @now_targets = []                  # ターゲットバトラー記憶
  49.     @pattern = 0                       # セル横位置(更新位置)
  50.     @pattern_back = false              # リピートフラグ
  51.     @wait = 0                          # 次の動作待ち時間
  52.     @unloop_wait = 0                   # 非ループ系アニメ終了時の待ち時間
  53.     @action = []                       # 行動
  54.     @anime_kind = 0                    # セル縦位置(アニメ種類位置)
  55.     @anime_speed = 0                   # セル更新速度
  56.     @frame = 0                         # 消費されるセル更新時間
  57.     @anime_loop = 0                    # ループ方式
  58.     @anime_end = false                 # バトラーのアニメが終わったか
  59.     @anime_freeze = false              # 固定アニメか
  60.     @anime_freeze_kind = false         # 固定するパターン位置
  61.     @anime_moving = false              # 飛ばしアニメ中か
  62.     @base_width = N01::ANIME_PATTERN   # セルの横分割数
  63.     @base_height = N01::ANIME_KIND     # セルの縦分割数
  64.     @width = 0                         # 横矩形
  65.     @height = 0                        # 縦矩形
  66.     @picture_time = 0                  # ピクチャー表示時間
  67.     @individual_targets = []           # 個別処理の保持ターゲット
  68.     @balloon_duration = 65             # ふきだしアニメ時間
  69.     @atb_flug = false                  # ATB判別
  70.     # バトラーがいない場合は処理を中断
  71.     return @battler_visible = false if @battler == nil
  72.     # バトラーがアクターの場合、またはエネミーアニメがオンの場合
  73.     @anime_flug = true if @battler.actor?
  74.     @anime_flug = true if [email protected]? && @battler.anime_on
  75.     # バトラー作成
  76.     make_battler
  77.   end
  78.   #--------------------------------------------------------------------------
  79.   # ● バトラー作成
  80.   #--------------------------------------------------------------------------
  81.   def make_battler
  82.     # 初期配置の取得
  83.     @battler.base_position
  84.     # 色相はバトラーとして認識
  85.     @battler_hue = @battler.battler_hue
  86.     # バトラーがアクターの場合、またはエネミーアニメがオンの場合
  87.     if @anime_flug
  88.       # メイン武器を用意
  89.       @weapon_R = Sprite_Weapon.new(viewport,@battler)
  90.       # 味方はキャラクター名、エネミーはバトラー名を取得
  91.       @battler_name = @battler.character_name if @battler.actor?
  92.       @battler_name = @battler.battler_name unless @battler.actor?
  93.       # エネミー反転がオンの場合、画像を反転させる
  94.       self.mirror = true if [email protected]? && @battler.action_mirror
  95.       # 歩行グラフィックを利用するかどうかで転送元の矩形サイズの認識先を変える
  96.       self.bitmap = RPG::Cache.character(@battler_name, @battler_hue) if N01::WALK_ANIME
  97.       self.bitmap = RPG::Cache.character(@battler_name + "_1", @battler_hue) unless N01::WALK_ANIME
  98.       # 転送元の矩形を取得
  99.       @width = self.bitmap.width / @base_width
  100.       @height = self.bitmap.height / @base_height
  101.       # 矩形を設定
  102.       @sx = @pattern * @width
  103.       @sy = @anime_kind * @height
  104.       # バトラー本体を描画
  105.       self.src_rect.set(@sx, @sy, @width, @height)
  106.     # アニメしないバトラーの場合
  107.     else
  108.       # ビットマップを取得、設定
  109.       @battler_name = @battler.battler_name
  110.       self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
  111.       @width = bitmap.width
  112.       @height = bitmap.height
  113.     end
  114.     # バックアタック時には画像を反転させる
  115.     unless @back_attack_flug
  116.       if self.mirror && $back_attack
  117.         self.mirror = false
  118.       elsif $back_attack
  119.         self.mirror = true
  120.       end
  121.       @back_attack_flug = true
  122.     end
  123.     # 位置を初期化
  124.     @battler.reset_coordinate
  125.     # 原点を決定
  126.     self.ox = @width / 2
  127.     self.oy = @height
  128.     # 画像の縦幅をバトラーに記録
  129.     @battler.battler_height = @height
  130.     # スプライトの座標を設定
  131.     update_move
  132.     # アニメ飛ばし用スプライトを用意
  133.     @move_anime = Sprite_MoveAnime.new(viewport,battler)
  134.     # ピクチャ用スプライトを用意
  135.     @picture = Sprite.new
  136.     # 影スプライトを用意
  137.     make_shadow if N01::SHADOW
  138.   end
  139.   #--------------------------------------------------------------------------
  140.   # ● 影作成
  141.   #--------------------------------------------------------------------------
  142.   def make_shadow
  143.     @shadow.dispose if @shadow != nil
  144.     @battler_hue = @battler.battler_hue
  145.     @shadow = Sprite.new(viewport)
  146.     @shadow.z = 200
  147.     @shadow.visible = false
  148.     # バトラーに当てられた影グラフィックを用意
  149.     @shadow.bitmap = RPG::Cache.character(@battler.shadow, @battler_hue)
  150.     # 影位置の微調整用インスタンス
  151.     @shadow_plus_x = @battler.shadow_plus[0] - @width / 2
  152.     @shadow_plus_y = @battler.shadow_plus[1] - @shadow.bitmap.height
  153.     # バトラー画像のサイズに合わせて影画像をリサイズ
  154.     @shadow.zoom_x = @width * 1.0 / @shadow.bitmap.width
  155.     # 更新
  156.     update_shadow
  157.     # フェードに影が引っかからないようにフラグを立てる
  158.     @skip_shadow = true
  159.   end
  160.   #--------------------------------------------------------------------------
  161.   # ● 解放
  162.   #--------------------------------------------------------------------------
  163.   def dispose
  164.     self.bitmap.dispose if self.bitmap != nil
  165.     @weapon_R.dispose if @weapon_R != nil
  166.     @move_anime.dispose if @move_anime != nil
  167.     @picture.dispose if @picture != nil
  168.     @shadow.dispose if @shadow != nil
  169.     mirage_off
  170.     super
  171.   end  
  172.   #--------------------------------------------------------------------------
  173.   # ● ATB判別
  174.   #--------------------------------------------------------------------------
  175.   def set_atb
  176.     @atb_flug = true
  177.   end
  178.   #--------------------------------------------------------------------------
  179.   # ● ダメージアクション  action = [アニメID,反転フラグ,リアクション許可]
  180.   #--------------------------------------------------------------------------
  181.   def damage_action(action)
  182.     # 吸収処理
  183.     if action[0] == "absorb"
  184.       action[0] = nil
  185.       now_hp = @battler.hp
  186.       now_sp = @battler.sp
  187.       @battler.hp += action[3] if action[2] == "hp"
  188.       @battler.sp += action[3] if action[2] == "sp"
  189.       @battler.damage = now_hp - @battler.hp if action[2] == "hp"
  190.       @battler.damage = now_sp - @battler.sp if action[2] == "sp"
  191.       @battler.sp_damage = true if @battler.damage != 0 && action[2] == "sp"
  192.       action[2] = false
  193.     end
  194.     @battler.damage = "" if @battler.damage == 0
  195.     dam = @battler.damage
  196.     # ヒットしている時のみアニメ実行
  197.     unless dam == "Miss" or action[0] == nil
  198.       @battler.animation_id = action[0]
  199.       @battler.animation_hit = true
  200.       @battler.anime_mirror = action[1]
  201.     end
  202.     # ダメージアクション実行
  203.     unless dam == nil or dam == "Miss" or dam == "" or action[2] == false
  204.       start_action(@battler.damage_hit) if dam > 0
  205.     end
  206.     # 攻撃が当たっていない場合は回避アクション実行
  207.     if dam == "Miss"
  208.       start_action(@battler.evasion) if action[2]
  209.       Audio.se_play("Audio/SE/" + N01::EVA_SE[0], N01::EVA_SE[1], N01::EVA_SE[2]) if action[2]
  210.     end
  211.     damage_pop
  212.   end
  213.   #--------------------------------------------------------------------------
  214.   # ● ダメージ数値POP
  215.   #--------------------------------------------------------------------------
  216.   def damage_pop
  217.     @battler.critical = "sp_damage" if @battler.sp_damage
  218.     damage(@battler.damage, @battler.critical)
  219.     @battler.damage = nil
  220.     @battler.sp_damage = false
  221.     @battler.critical = false
  222.     @battler.damage_pop = false
  223.   end  
  224.   #--------------------------------------------------------------------------
  225.   # ● 戦闘開始行動
  226.   #--------------------------------------------------------------------------
  227.   def first_action
  228.     # 行動できるかチェックし、できなければそのステートのアクション開始
  229.     action = @battler.first_action unless @battler.restriction == 4
  230.     action = $data_states[@battler.state_id].base_action if @battler.states[0] != nil && @battler.restriction == 4
  231.     # 戦闘不能を最優先
  232.     action = $data_states[1].base_action if @battler.states.include?(1)
  233.     start_action(action)
  234.     @skip_shadow = false
  235.   end
  236.   #--------------------------------------------------------------------------
  237.   # ● アクション開始
  238.   #--------------------------------------------------------------------------
  239.   def start_action(kind)
  240.     # 各種動作を初期化
  241.     reset
  242.     # 現在取っている待機アクションを記憶
  243.     stand_by
  244.     # 新しいアクション内容の決定
  245.     @action = N01::ACTION[kind].dup
  246.     # 行動配列の先頭からシフト
  247.     active = @action.shift
  248.     # 自動で終了を付ける
  249.     @action.push("終了")
  250.     # 現在のアクションを決定
  251.     @active_action = N01::ANIME[active]
  252.     # ウエイト設定
  253.     @wait = active.to_i if @active_action == nil
  254.     # 単発アクション開始
  255.     action
  256.   end
  257.   #--------------------------------------------------------------------------
  258.   # ● 強制単発アクション開始
  259.   #--------------------------------------------------------------------------
  260.   def start_one_action(kind,back)
  261.     # 各種動作を初期化
  262.     reset
  263.     # 現在取っている待機アクションを記憶
  264.     stand_by
  265.     # 座標リセットアクションをセッティング
  266.     @action = [back]
  267.     # 自動で終了を付ける
  268.     @action.push("終了")
  269.     # 現在のアクションを決定
  270.     @active_action = N01::ANIME[kind]
  271.     # 単発アクション開始
  272.     action
  273.   end
  274.   #--------------------------------------------------------------------------
  275.   # ● 次のアクションへ
  276.   #--------------------------------------------------------------------------
  277.   def next_action
  278.     # ウェイト中の場合キャンセル
  279.     return @wait -= 1 if @wait > 0
  280.     # まだ全アニメセルが終了していない場合キャンセル
  281.     return if @anime_end == false
  282.     # 最後のアニメセル表示待ち
  283.     return @unloop_wait -= 1 if @unloop_wait > 0
  284.     # 行動配列の先頭からシフト
  285.     active = @action.shift
  286.     # 現在のアクションを決定
  287.     @active_action = N01::ANIME[active]
  288.     # ウエイト設定
  289.     @wait = active.to_i if @active_action == nil
  290.     # 単発アクション開始
  291.     action
  292.   end
  293.   #--------------------------------------------------------------------------
  294.   # ● 待機アクション
  295.   #--------------------------------------------------------------------------
  296.   def stand_by
  297.     # 通常待機に
  298.     @repeat_action = @battler.normal
  299.     # HPが1/4でピンチモーションに
  300.     @repeat_action = @battler.pinch if @battler.hp <= @battler.maxhp / 4
  301.     # 防御中
  302.     @repeat_action = @battler.defence if @battler.guarding?
  303.     # 何もステートがなければ終了
  304.     return if @battler.state_id == nil
  305.     # オートステート対策として戦闘不能を優先させる処置
  306.     if @battler.states.include?(1)
  307.       # アクション禁止のステートだったらスキップ
  308.       return if $data_states[1].extension.include?("ステートアクション禁止")
  309.       # エネミーで禁止されているステートアクションだったらスキップ
  310.       return if @battler.is_a?(Game_Enemy) && $data_states[1].extension.include?("エネミー除外")
  311.       # ステートのモーションに
  312.       return @repeat_action = $data_states[1].base_action
  313.     end
  314.     # 通常処理
  315.     for state in @battler.states.reverse
  316.       next if $data_states[state].extension.include?("ステートアクション禁止")
  317.       next if @battler.is_a?(Game_Enemy) && $data_states[state].extension.include?("エネミー除外")
  318.       @repeat_action = $data_states[state].base_action
  319.     end
  320.   end
  321.   #--------------------------------------------------------------------------
  322.   # ● 待機アクションの割り込み
  323.   #--------------------------------------------------------------------------
  324.   def push_stand_by
  325.     reset unless @battler.dead?
  326.     action = @battler.normal
  327.     action = @battler.pinch if @battler.hp <= @battler.maxhp / 4
  328.     action = @battler.defence if @battler.guarding?
  329.     # オートステート対策として戦闘不能を優先させる処置
  330.     if @battler.states.include?(1)
  331.       # アクション禁止のステートだったらスキップ
  332.       unless $data_states[1].extension.include?("ステートアクション禁止")
  333.         # エネミーで禁止されているステートアクションだったらスキップ
  334.         unless @battler.is_a?(Game_Enemy) && $data_states[1].extension.include?("エネミー除外")
  335.           # ステートのモーションに
  336.           action = $data_states[1].base_action
  337.           # 通常処理をスキップさせるフラグオン
  338.           skip_flug = true
  339.         end  
  340.       end   
  341.     end
  342.     # 通常処理
  343.     unless skip_flug
  344.       for state in @battler.states.reverse
  345.         next if $data_states[state].extension.include?("ステートアクション禁止")
  346.         next if @battler.is_a?(Game_Enemy) && $data_states[state].extension.include?("エネミー除外")
  347.         action = $data_states[state].base_action
  348.       end
  349.     end  
  350.     @repeat_action = action
  351.     # 割り込み
  352.     @action.delete("終了")
  353.     act = N01::ACTION[action].dup
  354.     for i in 0...act.size
  355.       @action.push(act[i])
  356.     end  
  357.     @action.push("終了")
  358.     @wait = @anime_end = @unloop_wait = 0
  359.   end
复制代码

放不下,下一贴继续.....T T
回复 支持 反对

使用道具 举报

Lv1.梦旅人

蚂蚁卡卡

梦石
0
星屑
116
在线时间
66 小时
注册时间
2007-12-16
帖子
3081
3
发表于 2009-2-13 07:11:45 | 只看该作者
http://rpg.blue/web/htm/news729.htm

这个是全动画的脚本

注释里写的很明白
《隋唐乱》完整解密版点击进入
米兰,让我怎么说离开……

曾经我也是一个有志青年,直到我膝盖中了一箭……

《隋唐乱》博客地址
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
7 小时
注册时间
2008-12-25
帖子
104
4
 楼主| 发表于 2009-2-13 07:13:15 | 只看该作者
继续第2个脚本T T

  1.   #--------------------------------------------------------------------------
  2.   # ● 各種変化を初期化
  3.   #--------------------------------------------------------------------------
  4.   def reset
  5.     self.zoom_x = self.zoom_y = 1
  6.     self.oy = @height
  7.     @angle = self.angle = 0
  8.     @anime_end = true
  9.     @non_repeat = false
  10.     @anime_freeze = false
  11.     @unloop_wait = 0
  12.   end  
  13.   #--------------------------------------------------------------------------
  14.   # ● ジャンプを初期化
  15.   #--------------------------------------------------------------------------
  16.   def jump_reset
  17.     @battler.jump = @jump_time = @jump_time_plus = @jump_up = @jump_down = 0
  18.     @jump_size = @jump_plus = @float_time = @float_up = 0
  19.   end
  20.   #--------------------------------------------------------------------------
  21.   # ● ターゲット情報を受け取る
  22.   #--------------------------------------------------------------------------
  23.   def get_target(target)
  24.     # 個別処理中は中止(全域で自分が巻き込まれた時ターゲット情報が狂わないように)
  25.     return if @battler.individual
  26.     @target_battler = target
  27.   end
  28.   #--------------------------------------------------------------------------
  29.   # ● アクション情報をバトラーに格納
  30.   #--------------------------------------------------------------------------
  31.   def send_action(action)
  32.     @battler.play = 0
  33.     @battler.play = action if @battler.active
  34.   end
  35.   #--------------------------------------------------------------------------
  36.   # ● バトラー追加
  37.   #--------------------------------------------------------------------------
  38.   def battler_join
  39.     if @battler.exist? && !@battler_visible
  40.       # 戦闘不能からの復活なら処理をスキップ
  41.       if @battler.revival && @anime_flug
  42.         return @battler.revival = false
  43.       elsif @battler.revival && !@anime_flug
  44.         @battler.revival = false
  45.         return self.visible = true
  46.       end  
  47.       @anime_flug = true if @battler.actor?
  48.       @anime_flug = true if [email protected]? && @battler.anime_on
  49.       make_battler
  50.       first_action
  51.     end
  52.   end
  53.   #--------------------------------------------------------------------------
  54.   # ● フレーム更新 ※再定義
  55.   #--------------------------------------------------------------------------
  56.   def update
  57.     super
  58.     # バトラーがいない場合スキップ
  59.     return self.bitmap = nil && loop_animation(nil) if @battler == nil
  60.     # バトラー追加
  61.     battler_join
  62.     # 次のアクションへ
  63.     next_action
  64.     # アニメパターン更新
  65.     update_anime_pattern
  66.     # ターゲット更新
  67.     update_target
  68.     # 強制アクション更新
  69.     update_force_action
  70.     # 座標更新
  71.     update_move
  72.     # 影更新
  73.     update_shadow if @shadow != nil
  74.     # 武器更新
  75.     @weapon_R.update if @weapon_action
  76.     # 浮遊更新
  77.     update_float if @float_time > 0
  78.     # 回転更新
  79.     update_angle if @angle_time > 0
  80.     # 拡大縮小更新
  81.     update_zoom if @zoom_time > 0
  82.     # 残像更新
  83.     update_mirage if @mirage_flug
  84.     # ピクチャ更新
  85.     update_picture if @picture_time > 0
  86.     # アニメ飛ばし更新
  87.     update_move_anime if @anime_moving
  88.     # ダメージPOP監視
  89.     damage_pop if @battler.damage_pop
  90.     # スプライト監視
  91.     update_battler_bitmap
  92.     # エフェクト監視
  93.     setup_new_effect
  94.     # エフェクト更新
  95.     update_effect
  96.     # ATB更新
  97.     update_atb if @atb_flug
  98.   end
  99.   #--------------------------------------------------------------------------
  100.   # ● アニメパターン更新
  101.   #--------------------------------------------------------------------------
  102.   def update_anime_pattern
  103.     # 更新時間がくるまでスキップ
  104.     return @frame -= 1 if @frame != 0
  105.     # 必要な時だけ武器アニメ更新
  106.     @weapon_R.action if @weapon_action && @weapon_R != nil
  107.     # アニメのコマが最後まで到達したらリピート方法をチェック
  108.     if @pattern_back
  109.       # 往復ループ
  110.       if @anime_loop == 0
  111.         @pattern -= 1
  112.         @pattern_back = false if @pattern == 0
  113.         @anime_end = true if @pattern == 0
  114.       # 片道ループもしくはループしない
  115.       else
  116.         @anime_end = true
  117.         @pattern = 0 if @anime_loop == 1
  118.         @pattern_back = false if @anime_loop == 1
  119.       end  
  120.     # アニメのコマを進める
  121.     else
  122.       @pattern += 1
  123.       @pattern_back = true if @pattern == @base_width - 1
  124.     end
  125.     # 更新時間を初期化
  126.     @frame = @anime_speed
  127.     # アニメ固定の場合は横矩形を固定
  128.     return if @anime_freeze
  129.     # 転送元の矩形を設定
  130.     return unless @anime_flug
  131.     @sx = @pattern * @width
  132.     @sy = @anime_kind * @height
  133.     self.src_rect.set(@sx, @sy, @width, @height)
  134.   end
  135.   #--------------------------------------------------------------------------
  136.   # ● ターゲット更新 action = ["N01target_change",ターゲット情報]
  137.   #--------------------------------------------------------------------------
  138.   def update_target
  139.     # ターゲットチェック
  140.     return if @battler.force_target == 0
  141.     # 個別処理中は中止(全域で自分が巻き込まれた時ターゲット情報が狂わないように)
  142.     return if @battler.individual
  143.     @target_battler = @battler.force_target[1]
  144.     @battler.force_target = 0
  145.   end  
  146.   #--------------------------------------------------------------------------
  147.   # ● 強制アクション更新 action = [識別,復帰,実行するアクション]
  148.   #--------------------------------------------------------------------------
  149.   def update_force_action
  150.     # 強制アクションチェック
  151.     action = @battler.force_action
  152.     return if action == 0
  153.     @battler.force_action = 0
  154.     # コラプスならそのまま行動に直結
  155.     return collapse_action if action[0] == "N01collapse"
  156.     # アクティブ中は割り込ませない
  157.     return if @battler.active
  158.     # 単発ならそのまま行動に直結
  159.     return start_one_action(action[2],action[1]) if action[0] == "単発"
  160.     # 通しはアクションとして扱う
  161.     start_action(action[2])
  162.     # 座標復帰の有無
  163.     return if action[1] == ""
  164.     # 終了位置を入れ替えて復帰アクションを入れる
  165.     @action.delete("終了")
  166.     @action.push(action[1])
  167.     @action.push("終了")
  168.   end   
  169.   #--------------------------------------------------------------------------
  170.   # ● 座標更新
  171.   #--------------------------------------------------------------------------
  172.   def update_move
  173.     # 加減速で出る距離の増減を補完
  174.     if @move_speed_plus_x > 0
  175.       # 移動計算
  176.       @move_x += @moving_x
  177.       # 移動を実行
  178.       @battler.move_x = @move_x
  179.       @move_speed_plus_x -= 1
  180.     elsif @move_speed_x > 0
  181.       # 加速の場合
  182.       if @move_boost_x != 0
  183.         @moving_x += @move_boost_x
  184.       end  
  185.       # 移動計算
  186.       @move_x += @moving_x
  187.       # 移動を実行
  188.       @battler.move_x = @move_x
  189.       @move_speed_x -= 1
  190.     end
  191.     # 加減速で出る距離の増減を補完
  192.     if @move_speed_plus_y > 0
  193.       # 移動計算
  194.       @move_y += @moving_y
  195.       # 移動を実行
  196.       @battler.move_y = @move_y
  197.       @move_speed_plus_y -= 1
  198.     elsif @move_speed_y > 0
  199.       # 加速の場合
  200.       if @move_boost_y != 0
  201.         @moving_y += @move_boost_y
  202.       end  
  203.       # 移動計算
  204.       @move_y += @moving_y
  205.       # 移動を実行
  206.       @battler.move_y = @move_y
  207.       @move_speed_y -= 1
  208.     end
  209.     # ジャンプ上昇
  210.     if @jump_up != 0
  211.       # 移動計算
  212.       @jump_plus += @jump_up
  213.       # 移動を実行
  214.       @battler.jump = @jump_plus
  215.       @jump_up = @jump_up / 2
  216.       @jump_time -= 1
  217.       # ジャンプが頂点に達したら
  218.       if @jump_time == 0 or @jump_up == @jump_sign
  219.         @jump_down = @jump_up * 2 * @jump_sign * @jump_sign2
  220.         @jump_time_plus += @jump_time * 2
  221.         @jump_up = 0
  222.         return
  223.       end  
  224.     end  
  225.     # ジャンプ下降
  226.     if @jump_down != 0
  227.       if @jump_time_plus != 0
  228.         @jump_time_plus -= 1
  229.       elsif @jump_down != @jump_size
  230.         # 移動計算
  231.         @jump_plus += @jump_down
  232.         # 移動を実行
  233.         @battler.jump = @jump_plus
  234.         @jump_down = @jump_down * 2
  235.         if @jump_down == @jump_size
  236.           if @jump_flug
  237.             @jump_flug = false
  238.           else
  239.             # 移動計算
  240.             @jump_plus += @jump_down
  241.             # 移動を実行
  242.             @battler.jump = @jump_plus
  243.             @jump_down = @jump_size = 0
  244.           end
  245.         end  
  246.       end
  247.     end
  248.     # スプライトの座標を設定
  249.     self.x = @battler.position_x
  250.     self.y = @battler.position_y
  251.     self.z = @battler.position_z
  252.   end
  253.   #--------------------------------------------------------------------------
  254.   # ● 影更新
  255.   #--------------------------------------------------------------------------
  256.   def update_shadow
  257.     @shadow.opacity = self.opacity
  258.     @shadow.x = self.x + @shadow_plus_x
  259.     @shadow.y = self.y + @shadow_plus_y - @jump_plus
  260.   end
  261.   #--------------------------------------------------------------------------
  262.   # ● 浮遊更新
  263.   #--------------------------------------------------------------------------
  264.   def update_float
  265.     @float_time -= 1
  266.     @jump_plus += @float_up
  267.     @battler.jump = @jump_plus
  268.   end   
  269.   #--------------------------------------------------------------------------
  270.   # ● 回転更新
  271.   #--------------------------------------------------------------------------
  272.   def update_angle
  273.     # 回転実行
  274.     @angle += @angling
  275.     self.angle = @angle
  276.     @angle_time -= 1
  277.     # 回転時間がなくなったら項目をリセット
  278.     @angle = 0 if @angle_time == 0
  279.     return self.oy = @height if @angle_time == 0
  280.     # 復帰フラグがあれば角度を0に戻す
  281.     self.angle = 0 if @angle_reset
  282.   end  
  283.   #--------------------------------------------------------------------------
  284.   # ● 拡大縮小更新
  285.   #--------------------------------------------------------------------------
  286.   def update_zoom
  287.     # 拡大縮小実行
  288.     @zoom_x += @zooming_x
  289.     @zoom_y += @zooming_y
  290.     self.zoom_x = @zoom_x
  291.     self.zoom_y = @zoom_y
  292.     @zoom_time -= 1
  293.     # 拡大縮小時間がなくなったら項目をリセット
  294.     return if @zoom_time != 0
  295.     @zoom_x = @zoom_y = 0
  296.     self.oy = @height
  297.     # 復帰フラグがあれば戻す
  298.     self.zoom_x = self.zoom_y = 1 if @zoom_reset
  299.   end  
  300.   #--------------------------------------------------------------------------
  301.   # ● 残像更新
  302.   #--------------------------------------------------------------------------
  303.   def update_mirage
  304.     # 残像は最大3つまで表示し、2フレームごとに更新
  305.     mirage(@mirage0) if @mirage_count == 1
  306.     mirage(@mirage1) if @mirage_count == 3
  307.     mirage(@mirage2) if @mirage_count == 5
  308.     @mirage_count += 1
  309.     @mirage_count = 0 if @mirage_count == 6
  310.   end
  311.   #--------------------------------------------------------------------------
  312.   # ● ピクチャ更新
  313.   #--------------------------------------------------------------------------
  314.   def update_picture
  315.     @picture_time -= 1
  316.     @picture.x += @moving_pic_x
  317.     @picture.y += @moving_pic_y
  318.   end  
  319.   #--------------------------------------------------------------------------
  320.   # ● アニメ飛ばし更新
  321.   #--------------------------------------------------------------------------
  322.   def update_move_anime
  323.     @move_anime.update
  324.     @anime_moving = false if @move_anime.finish?
  325.     @move_anime.action_reset if @move_anime.finish?
  326.   end  
  327.   #--------------------------------------------------------------------------
  328.   # ● スプライト監視
  329.   #--------------------------------------------------------------------------
  330.   def update_battler_bitmap
  331.     return if @graphic_change
  332.     if @battler.actor?
  333.       actor = $game_party.actors[@battler.index]
  334.       if actor.character_name != @battler_name or actor.character_hue != @battler_hue
  335.         @battler_name = actor.character_name
  336.         @battler_hue = actor.character_hue
  337.         @anime_flug = true
  338.         make_battler
  339.         self.opacity = 0 if @battler.dead? or @battler.hidden
  340.         first_action
  341.       end
  342.     elsif [email protected]?
  343.       if @battler.battler_name != @battler_name or @battler.battler_hue != @battler_hue
  344.         @battler_name = @battler.battler_name
  345.         @battler_hue = @battler.battler_hue
  346.         @anime_flug = true if @battler.anime_on
  347.         make_battler
  348.         self.opacity = 0 if @battler.dead? or @battler.hidden
  349.         first_action
  350.       end  
  351.     end
  352.   end
  353.   #--------------------------------------------------------------------------
  354.   # ● 新しいエフェクトの設定
  355.   #--------------------------------------------------------------------------
  356.   def setup_new_effect
  357.     # フラッシュ
  358.     if @battler.white_flash
  359.       @effect_type = 1
  360.       @effect_duration = 16
  361.       @battler.white_flash = false
  362.     end
  363.     # 点滅開始
  364.     if @battler.blink && @blink_count == nil
  365.       @blink_count = 0
  366.     end
  367.     # 点滅終了
  368.     if [email protected] && @blink_count != nil
  369.       @blink_count = nil
  370.       self.color.set(0, 0, 0, 0)
  371.     end
  372.     # 出現
  373.     if not @battler_visible and @battler.exist?
  374.       @effect_type = 3
  375.       @effect_duration = 16
  376.       @battler_visible = true
  377.     end
  378.     # 消滅
  379.     if @battler_visible and @battler.hidden
  380.       @effect_type = 4
  381.       @effect_duration = 32
  382.       @battler_visible = false
  383.     end
  384.     # コラプス
  385.     if @battler.collapse
  386.       @effect_type = 5
  387.       @effect_duration = 48
  388.       @battler.collapse = false
  389.       @battler_visible = false
  390.     end
  391.     # ループ戦闘アニメ
  392.     if @battler.damage == nil and
  393.       @battler.state_animation_id != @state_animation_id
  394.       @state_animation_id = @battler.state_animation_id
  395.       loop_animation($data_animations[@state_animation_id])
  396.     end
  397.     # 通常戦闘アニメ
  398.     if @battler_visible && @battler.animation_id != 0
  399.       animation = $data_animations[@battler.animation_id]
  400.       animation(animation, @battler.animation_hit)
  401.       animation_mirror if @battler.anime_mirror
  402.       @battler.animation_id = 0
  403.       @battler.anime_mirror = false
  404.     end
  405.   end
  406.   #--------------------------------------------------------------------------
  407.   # ● エフェクトの更新
  408.   #--------------------------------------------------------------------------
  409.   def update_effect
  410.     if @effect_duration > 0
  411.       @effect_duration -= 1
  412.       update_whiten if @effect_type == 1
  413.       update_appear if @effect_type == 3
  414.       update_disappear if @effect_type == 4
  415.       update_collapse if @effect_type == 5
  416.     end
  417.     update_blink if @battler.blink
  418.   end
  419.   #--------------------------------------------------------------------------
  420.   # ● 白フラッシュエフェクトの更新
  421.   #--------------------------------------------------------------------------
  422.   def update_whiten
  423.     self.blend_type = 0
  424.     self.color.set(255, 255, 255, 128)
  425.     self.opacity = 255
  426.     self.color.alpha = 128 - (16 - @effect_duration) * 10
  427.   end
  428.   #--------------------------------------------------------------------------
  429.   # ● 点滅エフェクトの更新
  430.   #--------------------------------------------------------------------------
  431.   def update_blink
  432.     @blink_count = (@blink_count + 1) % 32
  433.     if @blink_count < 16
  434.       alpha = (16 - @blink_count) * 6
  435.     else
  436.       alpha = (@blink_count - 16) * 6
  437.     end
  438.     self.color.set(255, 255, 255, alpha)
  439.   end
  440.   #--------------------------------------------------------------------------
  441.   # ● 出現エフェクトの更新
  442.   #--------------------------------------------------------------------------
  443.   def update_appear
  444.     self.blend_type = 0
  445.     self.color.set(0, 0, 0, 0)
  446.     self.opacity = (16 - @effect_duration) * 16
  447.   end
  448.   #--------------------------------------------------------------------------
  449.   # ● 消滅エフェクトの更新
  450.   #--------------------------------------------------------------------------
  451.   def update_disappear
  452.     self.blend_type = 0
  453.     self.color.set(0, 0, 0, 0)
  454.     self.opacity = 256 - (32 - @effect_duration) * 10
  455.   end
  456.   #--------------------------------------------------------------------------
  457.   # ● 崩壊エフェクトの更新
  458.   #--------------------------------------------------------------------------
  459.   def update_collapse
  460.     normal_collapse if @collapse_type == 2
  461.     boss_collapse1 if @collapse_type == 3
  462.     boss_collapse2 if @collapse_type == 4
  463.   end
  464.   #--------------------------------------------------------------------------
  465.   # ● ATB更新
  466.   #--------------------------------------------------------------------------
  467.   def update_atb
  468.     if @battler != nil
  469.       if @battler.full_ct and @battler.ct_visible
  470.         # CTが溜まったバトラーの色調を変化させる
  471.         fullct_color = PARA_CTB::FULL_CT_COLOR
  472.         self.tone = fullct_color
  473.       else
  474.         fullct_color = Tone.new(0,0,0)
  475.         self.tone = fullct_color
  476.       end
  477.     end
  478.   end
  479.   #--------------------------------------------------------------------------
  480.   # ● アクション実行
  481.   #--------------------------------------------------------------------------
  482.   def action
  483.     return if @active_action == nil
  484.     action = @active_action[0]
  485.     # 反転の場合
  486.     return mirroring if action == "反転"
  487.     # 回転の場合  
  488.     return angling if action == "angle"
  489.     # 拡大縮小の場合  
  490.     return zooming if action == "zoom"
  491.     # 残像ONの場合
  492.     return mirage_on if action == "残像ON"
  493.     # 残像OFFの場合
  494.     return mirage_off if action == "残像OFF"
  495.     # ピクチャ表示の場合
  496.     return picture if action == "pic"
  497.     # ピクチャ消去の場合
  498.     return @picture.visible = false && @picture_time = 0 if action == "ピクチャ消去"
  499.     # グラフィックファイル変更の場合  
  500.     return graphics_change if action == "change"
  501.     # 戦闘アニメ表示の場合  
  502.     return battle_anime if action == "anime"
  503.     # ふきだしアニメ表示の場合  
  504.     return balloon_anime if action == "balloon"
  505.     # BGM/BGS/SE演奏の場合  
  506.     return sound if action == "sound"
  507.     # ゲームスイッチ操作の場合  
  508.     return $game_switches[@active_action[1]] = @active_action[2] if action == "switch"
  509.     # ゲーム変数操作の場合  
  510.     return variable if action == "variable"
  511.     # アクション条件の場合
  512.     return necessary if action == "nece"
  513.     # スキル派生の場合  
  514.     return derivating if action == "der"
  515.     # 個別処理開始の場合
  516.     return individual_action if action == "個別処理開始"
  517.     # 個別処理終了の場合
  518.     return individual_action_end if action == "個別処理終了"
  519.     # 待機に移行しない場合
  520.     return non_repeat if action == "待機に移行しない"
  521.     # 初期位置変更の場合
  522.     return @battler.change_base_position(self.x, self.y) if action == "初期位置変更"
  523.     # 初期位置変更解除の場合
  524.     return @battler.base_position if action == "初期位置変更解除"
  525.     # ターゲット変更の場合  
  526.     return change_target if action == "target"
  527.     # ターゲットのコラプス許可
  528.     return send_action(action) if action == "コラプス許可"
  529.     # アクティブ解除
  530.     return send_action(action) if action == "アクティブ解除"
  531.     # ステート付与の場合  
  532.     return state_on if action == "sta+"
  533.     # ステート解除の場合  
  534.     return state_off if action == "sta-"
  535.     # ゲーム全体のスピード変更の場合
  536.     return Graphics.frame_rate = @active_action[1] if action == "fps"
  537.     # 浮遊の場合  
  538.     return floating if action == "float"
  539.     # 強制アクションの場合  
  540.     return force_action if @active_action.size == 4
  541.     # 座標リセットの場合  
  542.     return reseting if @active_action.size == 5
  543.     # 移動の場合
  544.     return moving if @active_action.size == 7
  545.     # バトラーアニメの場合
  546.     return battler_anime if @active_action.size == 9
  547.     # アニメ飛ばしの場合
  548.     return moving_anime if @active_action.size == 11
  549.     # 終了の場合
  550.     return anime_finish if action == "終了"
  551.   end
  552.   #--------------------------------------------------------------------------
  553.   # ● 反転実行
  554.   #--------------------------------------------------------------------------
  555.   def mirroring  
  556.     # すでに反転されていれば元に戻す
  557.     if self.mirror
  558.       self.mirror = false
  559.       # 武器アニメも反映
  560.       @weapon_R.mirroring if @anime_flug
  561.     else
  562.       self.mirror = true
  563.       # 武器アニメも反映
  564.       @weapon_R.mirroring if @anime_flug
  565.     end
  566.   end  
  567.   #--------------------------------------------------------------------------
  568.   # ● 回転実行
  569.   #--------------------------------------------------------------------------
  570.   def angling  
  571.     # ジャンプを初期化
  572.     jump_reset
  573.     # 情報確認
  574.     @angle_time = @active_action[1]
  575.     start_angle = @active_action[2]
  576.     end_angle = @active_action[3]
  577.     @angle_reset = @active_action[4]
  578.     # バックアタック時には逆に
  579.     start_angle *= -1 if $back_attack
  580.     end_angle *= -1 if $back_attack
  581.     # エネミーは逆に
  582.     start_angle *= -1 if @battler.is_a?(Game_Enemy)
  583.     end_angle *= -1 if @battler.is_a?(Game_Enemy)
  584.     # 一時的に原点を中心に変更
  585.     self.oy = @height / 2
  586.     # 時間が0以下なら即座に最終角度へ
  587.     if @angle_time <= 0
  588.       self.angle = end_angle
  589.       return  @angle_time = 0
  590.     end  
  591.     # 回転時間から1フレームあたりの角度を出す
  592.     @angling = (end_angle - start_angle) / @angle_time
  593.     # 割り切れない余りを初期角度に
  594.     @angle = (end_angle - start_angle) % @angle_time + start_angle
  595.   end
  596.   #--------------------------------------------------------------------------
  597.   # ● 拡大縮小実行
  598.   #--------------------------------------------------------------------------
  599.   def zooming  
  600.     # ジャンプを初期化
  601.     jump_reset
  602.     # 情報確認
  603.     @zoom_time = @active_action[1]
  604.     zoom_x = @active_action[2] - 1
  605.     zoom_y = @active_action[3] - 1
  606.     @zoom_reset = @active_action[4]
  607.     @zoom_x = @zoom_y = 1
  608.     # 時間が0以下ならスキップ
  609.     return @zoom_time = 0 if @zoom_time <= 0
  610.     # 拡大時間から1フレームあたりの拡大率を出す
  611.     @zooming_x = zoom_x / @zoom_time
  612.     @zooming_y = zoom_y / @zoom_time
  613.   end  
  614.   #--------------------------------------------------------------------------
  615.   # ● 残像開始
  616.   #--------------------------------------------------------------------------
  617.   def mirage_on
  618.     # 戦闘不能時には残像させない
  619.     return if @battler.dead?
  620.     @mirage0 = Sprite.new(self.viewport)
  621.     @mirage1 = Sprite.new(self.viewport)
  622.     @mirage2 = Sprite.new(self.viewport)
  623.     @mirage_flug = true
  624.     @mirage_count = 0
  625.   end  
  626.   #--------------------------------------------------------------------------
  627.   # ● 残像表示
  628.   #--------------------------------------------------------------------------
  629.   def mirage(body)
  630.     body.bitmap = self.bitmap.dup
  631.     body.x = self.x
  632.     body.y = self.y
  633.     body.ox = self.ox
  634.     body.oy = self.oy
  635.     body.z = self.z
  636.     body.mirror = self.mirror
  637.     body.angle = @angle
  638.     body.opacity = 160
  639.     body.zoom_x = self.zoom_x
  640.     body.zoom_y = self.zoom_y   
  641.     body.src_rect.set(@sx, @sy, @width, @height) if @anime_flug
  642.     body.src_rect.set(0, 0, @width, @height) unless @anime_flug
  643.   end   
  644.   #--------------------------------------------------------------------------
  645.   # ● 残像終了
  646.   #--------------------------------------------------------------------------
  647.   def mirage_off
  648.     @mirage_flug = false
  649.     @mirage0.dispose if @mirage0 != nil
  650.     @mirage1.dispose if @mirage1 != nil
  651.     @mirage2.dispose if @mirage2 != nil
  652.   end   
  653.   #--------------------------------------------------------------------------
  654.   # ● ピクチャ表示
  655.   #--------------------------------------------------------------------------
  656.   def picture
  657.     # 移動開始位置を確認
  658.     pic_x = @active_action[1]
  659.     pic_y = @active_action[2]
  660.     # 移動終了位置を確認
  661.     pic_end_x = @active_action[3]
  662.     pic_end_y = @active_action[4]
  663.     @picture_time = @active_action[5]
  664.     # 時間で割り、1フレーム当たりの移動速度を計算
  665.     @moving_pic_x = (pic_end_x - pic_x)/ @picture_time
  666.     @moving_pic_y = (pic_end_y - pic_y)/ @picture_time
  667.     # 割り切れない場合最初に加算
  668.     plus_x = (pic_end_x - pic_x)% @picture_time
  669.     plus_y = (pic_end_y - pic_y)% @picture_time
  670.     # ピクチャ表示
  671.     @picture.bitmap = RPG::Cache.picture(@active_action[7])
  672.     @picture.x = pic_x + plus_x
  673.     @picture.y = pic_y + plus_y
  674.     # Z座標調整
  675.     @picture.z = 1
  676.     @picture.z = 1000 if @active_action[6]
  677.     @picture.visible = true
  678.   end
  679.   #--------------------------------------------------------------------------
  680.   # ● グラフィックファイル変更
  681.   #--------------------------------------------------------------------------
  682.   def graphics_change  
  683.     # アクター限定
  684.     return if @battler.is_a?(Game_Enemy)
  685.     # グラフィック変更
  686.     @battler_name = @active_action[2]
  687.     # 戦闘後も変更を反映させるならキャラチップもここで変更
  688.     @battler.graphic_change(@active_action[2]) unless @active_action[1]
  689.     # イベントの画像変更に引っかからないようフラグを立てる
  690.     @graphic_change = true
  691.   end  
  692.   #--------------------------------------------------------------------------
  693.   # ● 戦闘アニメ表示 [判別,ID,対象,反転,ウエイト]
  694.   #--------------------------------------------------------------------------
  695.   def battle_anime
  696.     anime_id = @active_action[1]
  697.     # バックアタック時にアニメ画像を反転
  698.     if $back_attack
  699.       mirror = true if @active_action[3] == false
  700.       mirror = false if @active_action[3]
  701.     else
  702.       mirror = @active_action[3]
  703.     end
  704.     # 使用側アニメの場合
  705.     if anime_id == -3 && @battler.active
  706.       kind = @battler.current_action.kind
  707.       case kind
  708.       when 0
  709.         weapon_id = @battler.weapon_id if @battler.actor?
  710.         weapon_id = @battler.weapon unless @battler.actor?
  711.         anime_id = $data_weapons[weapon_id].animation1_id if weapon_id != 0
  712.         anime_id = $data_enemies[@battler.id].animation1_id if weapon_id == 0 && [email protected]?
  713.       when 1
  714.         anime_id = $data_skills[@battler.current_action.skill_id].animation1_id
  715.       when 2
  716.         anime_id = $data_items[@battler.current_action.item_id].animation1_id
  717.       end
  718.     # 武器とスキルの対象アニメの場合
  719.     elsif anime_id < 0
  720.       # 行動の種類でアニメ先を分岐
  721.       if @battler.current_action.kind == 1 && anime_id != -2
  722.         skill = $data_skills[@battler.current_action.skill_id]
  723.         anime_id = skill.animation2_id
  724.       elsif @battler.current_action.kind == 2 && anime_id != -2
  725.         item = $data_items[@battler.current_action.item_id]
  726.         anime_id = item.animation2_id
  727.       else
  728.         # 武器がなければ素手アニメを使用
  729.         anime_id = N01::NO_WEAPON
  730.         if @battler.actor?
  731.           weapon_id = @battler.weapon_id
  732.           anime_id = $data_weapons[weapon_id].animation2_id if weapon_id != 0
  733.         else
  734.           weapon_id = @battler.weapon
  735.           anime_id = $data_weapons[weapon_id].animation2_id if weapon_id != 0
  736.           anime_id = $data_enemies[@battler.id].animation2_id if weapon_id == 0
  737.         end
  738.       end
  739.       # ウエイト設定
  740.       @wait = $data_animations[anime_id].frame_max * 4 if $data_animations[anime_id] != nil && @active_action[4]
  741.       waitflug = true
  742.       # ダメージ表示のアニメなら、ダメージ計算を先に済ませるため処理を中断
  743.       damage_action = [anime_id, mirror, true]
  744.       return @battler.play = ["対象アニメ",damage_action] if @battler.active
  745.     end
  746.     # アニメ実行
  747.     if @active_action[2] == 0 && $data_animations[anime_id] != nil
  748.       @battler.animation_id = anime_id
  749.       @battler.animation_hit = true
  750.       @battler.anime_mirror = mirror
  751.     elsif $data_animations[anime_id] != nil
  752.       for target in @target_battler
  753.         target.animation_id = anime_id
  754.         target.anime_mirror = mirror
  755.       end  
  756.     end
  757.     # ウエイト設定
  758.     @wait = $data_animations[anime_id].frame_max * 4 if $data_animations[anime_id] != nil && @active_action[4] && !waitflug
  759.   end
  760.   #--------------------------------------------------------------------------
  761.   # ● BGM/BGS/SE演奏
  762.   #--------------------------------------------------------------------------
  763.   def sound   
  764.     # 情報を取得
  765.     pitch = @active_action[2]
  766.     vol =  @active_action[3]
  767.     name = @active_action[4]
  768.     # 実行
  769.     case @active_action[1]
  770.     when "se"
  771.       Audio.se_play("Audio/SE/" + name, vol, pitch)
  772.     when "bgm"
  773.       # 名前指定のない場合、現在のBGMを変えないように
  774.       if @active_action[4] == ""
  775.         now_bgm = RPG::BGM.last
  776.         name = now_bgm.name
  777.       end
  778.       Audio.bgm_play("Audio/BGM/" + name, vol, pitch)
  779.     when "bgs"
  780.       # 名前指定のない場合、現在のBGSを変えないように
  781.       if @active_action[4] == ""
  782.         now_bgs = RPG::BGS.last
  783.         name = now_bgs.name
  784.       end
  785.       Audio.bgs_play("Audio/BGS/" + name, vol, pitch)
  786.     end
  787.   end
  788.   #--------------------------------------------------------------------------
  789.   # ● ゲーム変数操作
  790.   #--------------------------------------------------------------------------
  791.   def variable
  792.     # オペランドチェック
  793.     operand = @active_action[3]
  794.     # 変数操作で分岐
  795.     case @active_action[2]
  796.     when 0 # 代入
  797.       $game_variables[@active_action[1]] = operand
  798.     when 1 # 加算
  799.       $game_variables[@active_action[1]] += operand
  800.     when 2 # 減算
  801.       $game_variables[@active_action[1]] -= operand
  802.     when 3 # 乗算
  803.       $game_variables[@active_action[1]] *= operand
  804.     when 4 # 除算
  805.       $game_variables[@active_action[1]] /= operand
  806.     when 5 # 剰余
  807.       $game_variables[@active_action[1]] %= operand
  808.     end
  809.   end  
复制代码


还是没贴完,下一贴继续.....我晕,这样贴没关系吧....


我的脚本不是楼上的那个呀T T........
而且,就算是楼上的那个我还是没看明白
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
7 小时
注册时间
2008-12-25
帖子
104
5
 楼主| 发表于 2009-2-13 07:22:17 | 只看该作者
继续第2个脚本= =....

  1.   #--------------------------------------------------------------------------
  2.   # ● アクション条件
  3.   #--------------------------------------------------------------------------
  4.   def necessary
  5.     nece1 = @active_action[3]
  6.     nece2 = @active_action[4]
  7.     # ターゲットチェック
  8.     case @active_action[1]
  9.     # 0自身 1ターゲット 2敵全体 3味方全体
  10.     when 0
  11.       target = [$game_party.actors[@battler.index]] if @battler.is_a?(Game_Actor)
  12.       target = [$game_troop.enemies[@battler.index]] if @battler.is_a?(Game_Enemy)
  13.     when 1
  14.       target = @target_battler
  15.     when 2
  16.       target = $game_troop.enemies
  17.     when 3
  18.       target = $game_party.actors
  19.     end
  20.     # ターゲットが空の場合は失敗とみなす
  21.     return start_action(@battler.recover_action) if target.size == 0
  22.     # 内容チェック
  23.     case @active_action[2]
  24.     # ステートID指定だった場合
  25.     when 0
  26.       # 補足が正で「ステートにかかっている」、負は「かかっていない」が条件に
  27.       state_on = true if nece2 > 0
  28.       # 条件人数を出す
  29.       state_member = nece2.abs
  30.       # 0は仲間数を出す
  31.       if nece2 == 0
  32.         state_member = $game_party.actors.size if @battler.is_a?(Game_Actor)
  33.         state_member = $game_troop.enemies.size if @battler.is_a?(Game_Enemy)
  34.       end  
  35.       # ターゲットのステートチェックし人数をカウント
  36.       for member in target
  37.         state_member -= 1 if member.state?(nece1)
  38.       end
  39.       # 条件が満たされていればアクション続行
  40.       if state_member == 0 && state_on
  41.         return
  42.       elsif state_member == nece2.abs
  43.         return if state_on == nil
  44.       end  
  45.     # パラメータ指定だった場合
  46.     when 1  
  47.       # 補足が正で「数値以上」、負は「数値以下」が条件に
  48.       num_over = true if nece2 > 0
  49.       # 参照数値
  50.       num = 0
  51.       # ターゲットのパラメータチェック
  52.       for member in target
  53.         # 参照パラメータで分岐
  54.         case  nece1
  55.         when 0 # 現HP
  56.           num += member.hp
  57.         when 1 # 現SP
  58.           num += member.sp
  59.         when 2 # 力
  60.           num += member.str
  61.         when 3 # 器用さ
  62.           num += member.dex
  63.         when 4 # 素早さ
  64.           num += member.agi
  65.         when 5 # 魔力
  66.           num += member.int
  67.         end
  68.       end
  69.       # 平均を出す
  70.       num = num / target.size
  71.       # 条件が満たされていればアクション続行
  72.       if num > nece2.abs && num_over
  73.         return
  74.       elsif num < nece2.abs
  75.         return if num_over == nil
  76.       end
  77.     # スイッチ指定だった場合
  78.     when 2
  79.       # 条件が満たされていればアクション続行
  80.       if $game_switches[nece1]
  81.         # 補足がtrueで「スイッチON」、falseは「スイッチOFF」が条件に
  82.         return if nece2
  83.       # スイッチがOFFの場合はON時とは逆に  
  84.       else
  85.         return unless nece2
  86.       end  
  87.     # 変数指定だった場合
  88.     when 3
  89.       # 補足が正で「数値以上」、負は「数値以下」が条件に
  90.       if nece2 > 0
  91.         return if $game_variables[nece1] > nece2
  92.       else
  93.         return unless $game_variables[nece1] > nece2.abs
  94.       end
  95.     # 習得スキル指定だった場合
  96.     when 4
  97.       # スキル条件人数を出す
  98.       skill_member = nece2.abs
  99.       for member in target
  100.         skill_member -= 1 if member.skill_learn?(nece1)
  101.         # 条件確認
  102.         return if skill_member == 0
  103.       end  
  104.     end
  105.     # 条件を満たせなければ以降のアクションを中断
  106.     return @action = ["終了"] if @non_repeat
  107.     # 防御中は不自然に見えないように座標復帰させない
  108.     action = @battler.recover_action
  109.     action = @battler.defence if @battler.guarding?
  110.     return start_action(action)
  111.   end  
  112.   #--------------------------------------------------------------------------
  113.   # ● スキル派生
  114.   #--------------------------------------------------------------------------
  115.   def derivating
  116.     # 未修得スキルは派生不可なら
  117.     return unless @active_action[2] && [email protected]_learn?(@active_action[3])
  118.     # 確率分岐
  119.     return if rand(100) > @active_action[1]
  120.     # 派生成功
  121.     @battler.derivation = @active_action[3]
  122.     # 以降のアクションを中断
  123.     @action = ["終了"]
  124.   end
  125.   #--------------------------------------------------------------------------
  126.   # ● 個別処理開始
  127.   #--------------------------------------------------------------------------
  128.   def individual_action
  129.     # リピートフラグオン
  130.     @battler.individual = true
  131.     # リピートアクションを保持
  132.     @individual_act = @action.dup
  133.     # ターゲットを保持し、行動ターゲットをひとつずつ抜き出す
  134.     send_action(["個別処理"])
  135.     @individual_targets = @target_battler.dup
  136.     @target_battler = [@individual_targets.shift]
  137.   end
  138.   #--------------------------------------------------------------------------
  139.   # ● 個別処理終了
  140.   #--------------------------------------------------------------------------
  141.   def individual_action_end
  142.     # ターゲットが残っていないなら行動終了
  143.     return @battler.individual = false if @individual_targets.size == 0
  144.     @action = @individual_act.dup
  145.     @target_battler = [@individual_targets.shift]
  146.   end  
  147.   #--------------------------------------------------------------------------
  148.   # ● 待機に移行しない
  149.   #--------------------------------------------------------------------------
  150.   def non_repeat
  151.     @repeat_action = []
  152.     @non_repeat = true
  153.     anime_finish
  154.   end  
  155.   #--------------------------------------------------------------------------
  156.   # ● ターゲット変更 action = [判別, 変更する対象, 変更先]
  157.   #--------------------------------------------------------------------------
  158.   def change_target
  159.     # 自身の変更したターゲットを元に戻す
  160.     return @target_battler = @now_targets.dup if @active_action[2] == 3
  161.     # 送るターゲット情報
  162.     target = [@battler] if @active_action[2] == 0
  163.     target = @target_battler.dup if @active_action[2] != 0
  164.     # 自身のターゲットを送った相手にする場合、現在のターゲットを記憶
  165.     if @active_action[2] == 2
  166.       @now_targets = @target_battler.dup
  167.       @target_battler = []
  168.     end  
  169.     # 送るターゲットがインデックス指定の場合
  170.     if @active_action[1] >= 1000
  171.       members = $game_party.actors if @battler.actor?
  172.       members = $game_troop.enemies unless @battler.actor?
  173.       index = @active_action[1] - 1000
  174.       if index < members.size
  175.         if members[index].exist? && @battler.index != index
  176.           # ターゲット変更
  177.           members[index].force_target = ["N01target_change", target]
  178.           # 自身のターゲットを送った相手にする場合
  179.           @target_battler = [members[index]] if @active_action[2] == 2
  180.           change = true
  181.         else
  182.           for member in members
  183.             next if @battler.index == member.index
  184.             next unless member.exist?
  185.             member.force_target = ["N01target_change", target]
  186.             @target_battler = [member] if @active_action[2] == 2
  187.             break change = true
  188.           end
  189.         end
  190.       end
  191.     # 送るターゲットがステートID指定だった場合
  192.     elsif @active_action[1] > 0
  193.       for member in $game_party.actors + $game_troop.enemies
  194.         if member.state?(@active_action[1])
  195.           member.force_target = ["N01target_change", target]
  196.           @target_battler.push(member) if @active_action[2] == 2
  197.           change = true
  198.         end  
  199.       end  
  200.     # 送るターゲットが習得スキル指定だった場合
  201.     elsif @active_action[1] < 0
  202.       skill_id = @active_action[1].abs
  203.       for actor in $game_party.actors
  204.         if actor.skill_learn?(skill_id)
  205.           actor.force_target = ["N01target_change", target]
  206.           @target_battler.push(target) if @active_action[2] == 2
  207.           change = true
  208.         end  
  209.       end
  210.     # 送るターゲットがターゲットだった場合
  211.     else
  212.       for member in @target_battler
  213.         member.force_target = ["N01target_change", target]
  214.         @target_battler.push(member) if @active_action[2] == 2
  215.         change = true
  216.       end
  217.     end
  218.     # 条件を満たせなければ以降のアクションを中断
  219.     return if change
  220.     return @action = ["終了"] if @non_repeat
  221.     return start_action(@battler.recover_action)
  222.   end   
  223.   #--------------------------------------------------------------------------
  224.   # ● ステート付与
  225.   #--------------------------------------------------------------------------
  226.   def state_on
  227.     state_id = @active_action[2]
  228.     # 対象で分岐
  229.     case @active_action[1]
  230.     when 0
  231.       @battler.add_state(state_id)
  232.     when 1
  233.       if @target_battler != nil
  234.         for target in @target_battler
  235.           target.add_state(state_id)
  236.         end
  237.       end
  238.     when 2
  239.       for target in $game_troop.enemies
  240.         target.add_state(state_id)
  241.       end
  242.     when 3
  243.       for target in $game_party.actors
  244.         target.add_state(state_id)
  245.       end
  246.     when 4
  247.       for target in $game_party.actors
  248.         if target.index != @battler.index
  249.           target.add_state(state_id)
  250.         end  
  251.       end
  252.     end
  253.     # 行動不能のステートが付いた場合、アクション終了
  254.     start_action(@battler.recover_action) unless @battler.movable?
  255.   end
  256.   #--------------------------------------------------------------------------
  257.   # ● ステート解除
  258.   #--------------------------------------------------------------------------
  259.   def state_off  
  260.     state_id = @active_action[2]
  261.     # 対象で分岐
  262.     case @active_action[1]
  263.     when 0
  264.       @battler.remove_state(state_id)
  265.     when 1
  266.       if @target_battler != nil
  267.         for target in @target_battler
  268.           target.remove_state(state_id)
  269.         end
  270.       end
  271.     when 2
  272.       for target in $game_troop.enemies
  273.         target.remove_state(state_id)
  274.       end
  275.     when 3
  276.       for target in $game_party.actors
  277.         target.remove_state(state_id)
  278.       end
  279.     when 4
  280.       for target in $game_party.actors
  281.         if target.index != @battler.index
  282.           target.remove_state(state_id)
  283.         end  
  284.       end
  285.     end
  286.   end  
  287.   #--------------------------------------------------------------------------
  288.   # ● 浮遊実行
  289.   #--------------------------------------------------------------------------
  290.   def floating  
  291.     # ジャンプを初期化
  292.     jump_reset
  293.     # 情報確認
  294.     @jump_plus = @active_action[1]
  295.     float_end = @active_action[2]
  296.     @float_time = @active_action[3]
  297.     # 1フレーム当たりの移動高度を計算
  298.     @float_up = (float_end - @jump_plus)/ @float_time
  299.     # 浮遊が完了するまで次のアクションに行かない
  300.     @wait = @float_time
  301.     # 浮遊アニメ設定を反映
  302.     if @anime_flug
  303.       move_anime = N01::ANIME[@active_action[4]]
  304.       # グラフィック指定がない場合はスキップ
  305.       if move_anime != nil
  306.         # 現在のアクションを上書き
  307.         @active_action = move_anime
  308.         # バトラーアニメ開始
  309.         battler_anime
  310.         # 浮遊が完了したら即アニメが終わるように
  311.         @anime_end = true
  312.       end
  313.     end
  314.     # 初期高度に浮遊
  315.     @battler.jump = @jump_plus
  316.   end      
  317.   #--------------------------------------------------------------------------
  318.   # ● 強制アクション
  319.   #--------------------------------------------------------------------------
  320.   def force_action
  321.     # アクションが単発か通しか判別
  322.     kind = @active_action[0]
  323.     # 復帰の有無をチェック
  324.     rebirth = @active_action[2]
  325.     # 強制アクション内容を取得
  326.     play = @active_action[3]
  327.     # 上3つの情報をまとめて格納
  328.     action = [kind,rebirth,play]
  329.     # ターゲットがインデックス指定の場合
  330.     if @active_action[1] >= 1000
  331.       members = $game_party.actors if @battler.actor?
  332.       members = $game_troop.enemies unless @battler.actor?
  333.       index = @active_action[1] - 1000
  334.       if index < members.size
  335.         if members[index].exist? && @battler.index != index
  336.           # バトラー情報に渡す
  337.           return members[index].force_action = action
  338.         else
  339.           for target in members
  340.             next if @battler.index == target.index
  341.             next unless target.exist?
  342.             force = true
  343.             break target.force_action = action
  344.           end
  345.         end
  346.       end
  347.       # 条件を満たせなければ以降のアクションを中断
  348.       return if force
  349.       return @action = ["終了"] if @non_repeat
  350.       return start_action(@battler.recover_action)
  351.     # ターゲット指定の場合  
  352.     elsif @active_action[1] == 0
  353.       for target in @target_battler
  354.         target.force_action = action if target != nil
  355.       end
  356.     # ステートID指定だった場合  
  357.     elsif @active_action[1] > 0
  358.       for target in $game_party.actors + $game_troop.enemies
  359.         target.force_action = action if target.state?(@active_action[1])
  360.       end
  361.     # 習得スキル指定だった場合  
  362.     elsif @active_action[1] < 0  
  363.       # エネミーは処理させない
  364.       return if @battler.is_a?(Game_Enemy)
  365.       for actor in $game_party.actors
  366.         # 自分は除く
  367.         unless actor.id == @battler.id
  368.           # バトラー情報に渡す
  369.           actor.force_action = action if actor.skill_id_learn?(@active_action[1].abs)
  370.         end
  371.       end
  372.     end
  373.   end
  374.   #--------------------------------------------------------------------------
  375.   # ● 座標リセット実行
  376.   #--------------------------------------------------------------------------
  377.   def reseting
  378.     # ジャンプを初期化
  379.     jump_reset
  380.     # 回転を元に戻す
  381.     self.angle = 0
  382.     # 情報確認
  383.     @distanse_x   = @move_x * -1
  384.     @distanse_y   = @move_y * -1
  385.     @move_speed_x = @active_action[1]
  386.     @move_speed_y = @move_speed_x
  387.     @move_boost_x = @active_action[2]
  388.     @move_boost_y = @move_boost_x
  389.     @jump         = @active_action[3]
  390.     # 移動計算
  391.     move_distance
  392.     # 移動アニメ設定を反映
  393.     if @anime_flug
  394.       move_anime = N01::ANIME[@active_action[4]]
  395.       # グラフィック指定がない場合はスキップ
  396.       if move_anime != nil
  397.         # 現在のアクションを上書き
  398.         @active_action = move_anime
  399.         # バトラーアニメ開始
  400.         battler_anime
  401.       end
  402.       # 移動が完了したら即アニメが終わるように
  403.       @anime_end = true
  404.     end
  405.   end
  406.   #--------------------------------------------------------------------------
  407.   # ● 移動実行
  408.   #--------------------------------------------------------------------------
  409.   def moving  
  410.     # ジャンプを初期化
  411.     jump_reset
  412.     # X軸移動を便宜上抜き出す
  413.     xx = @active_action[1]
  414.     # バックアタック時にはX軸を逆に
  415.     xx *= -1 if $back_attack
  416.     # 移動目標のターゲットを確認
  417.     case @active_action[0]
  418.     when 0 # 自身
  419.       @distanse_x = xx
  420.       @distanse_y = @active_action[2]
  421.     when 1 # ターゲット
  422.       # ターゲットが決まってない場合、自身に変換
  423.       if @target_battler == nil
  424.         @distanse_x = xx
  425.         @distanse_y = @active_action[2]
  426.       else
  427.         # ターゲット対象をひとつずつチェック
  428.         target_x = 0
  429.         target_y = 0
  430.         time = 0
  431.         for i in 0...@target_battler.size
  432.           if @target_battler[i] != nil
  433.             time += 1
  434.             target_x += @target_battler[i].position_x
  435.             target_y += @target_battler[i].position_y
  436.           end  
  437.         end
  438.         # ターゲットが空だった場合、自身に変換
  439.         if time == 0
  440.           @distanse_x = xx
  441.           @distanse_y = @active_action[2]
  442.         else  
  443.           # 複数ターゲットの中心を計算
  444.           target_x = target_x / time
  445.           target_y = target_y / time
  446.           # 最終的な移動距離を算出
  447.           @distanse_y = target_y - self.y + @active_action[2]
  448.           # X座標はアクターとエネミーで逆計算
  449.           if @battler.is_a?(Game_Actor)
  450.             @distanse_x = target_x - self.x + xx
  451.           else
  452.             @distanse_x = self.x - target_x + xx
  453.           end  
  454.         end  
  455.       end  
  456.     when 2 # 画面
  457.       # X座標はアクターとエネミーで逆計算
  458.       if @battler.is_a?(Game_Actor)
  459.         @distanse_x = xx - self.x
  460.         @distanse_x = 640 + xx - self.x if $back_attack
  461.       else
  462.         @distanse_x = self.x - xx
  463.         @distanse_x = self.x - (Graphics.width + xx) if $back_attack
  464.       end
  465.       @distanse_y = @active_action[2] - self.y
  466.     when 3 # 初期位置
  467.       # X座標はアクターとエネミーで逆計算
  468.       if @battler.is_a?(Game_Actor)
  469.         @distanse_x = xx + @battler.base_position_x - self.x
  470.       else
  471.         @distanse_x = xx + self.x - @battler.base_position_x
  472.       end
  473.       @distanse_y = @active_action[2] + @battler.base_position_y - @battler.position_y
  474.     end
  475.     @move_speed_x = @active_action[3]
  476.     @move_speed_y = @active_action[3]
  477.     @move_boost_x = @active_action[4]
  478.     @move_boost_y = @active_action[4]
  479.     @jump         = @active_action[5]
  480.     @jump_plus = 0
  481.     # 移動計算
  482.     move_distance
  483.     # 移動アニメ設定を反映
  484.     if @anime_flug
  485.       move_anime = N01::ANIME[@active_action[6]]
  486.       # グラフィック指定がない場合はスキップ
  487.       if move_anime != nil
  488.         # 現在のアクションを上書き
  489.         @active_action = move_anime
  490.         # バトラーアニメ開始
  491.         battler_anime
  492.       end  
  493.       # 移動が完了したら即アニメが終わるように
  494.       @anime_end = true
  495.     end
  496.   end
  497.   #--------------------------------------------------------------------------
  498.   # ● 移動計算
  499.   #--------------------------------------------------------------------------
  500.   def move_distance
  501.     # 速度が0の場合、その場に留まる
  502.     if @move_speed_x == 0
  503.       @moving_x = 0
  504.       @moving_y = 0
  505.     else  
  506.       # 1フレームあたりの移動距離を計算
  507.       @moving_x = @distanse_x / @move_speed_x
  508.       @moving_y = @distanse_y / @move_speed_y
  509.       # 余った距離はこの時点で移動し消化
  510.       over_x = @distanse_x % @move_speed_x
  511.       over_y = @distanse_y % @move_speed_y
  512.       @move_x += over_x
  513.       @move_y += over_y
  514.       @battler.move_x = @move_x
  515.       @battler.move_y = @move_y
  516.       @distanse_x -= over_x
  517.       @distanse_y -= over_y
  518.     end  
  519.     # 移動があるかどうかの判定
  520.     if @distanse_x == 0
  521.       @move_speed_x = 0
  522.     end
  523.     if @distanse_y == 0
  524.       @move_speed_y = 0
  525.     end
  526.     # X座標移動計算
  527.     # 加減速による移動フレーム数の修正
  528.     boost_x = @moving_x
  529.     move_x = 0
  530.     # 加速がある場合
  531.     if @move_boost_x > 0 && @distanse_x != 0
  532.       # 加減速の正負を左右移動に合わせて変換
  533.       if @distanse_x == 0
  534.         @move_boost_x = 0
  535.       elsif @distanse_x < 0
  536.         @move_boost_x *= -1
  537.       end
  538.       # 距離の変化を事前計算
  539.       for i in 0...@move_speed_x
  540.         boost_x += @move_boost_x
  541.         move_x += boost_x
  542.         # オーバー距離を記録
  543.         over_distance = @distanse_x - move_x
  544.         # 右移動で距離オーバーする直前が何フレーム目だったか記録
  545.         if @distanse_x > 0 && over_distance < 0
  546.           @move_speed_x = i
  547.           break
  548.         # 左移動で距離オーバーする直前が何フレーム目だったか記録
  549.         elsif @distanse_x < 0 && over_distance > 0
  550.           @move_speed_x = i
  551.           break
  552.         end
  553.       end
  554.       # オーバー距離を一回前に戻す
  555.       before = over_distance + boost_x
  556.       # 余った距離を等速移動させるフレーム数を加算
  557.       @move_speed_plus_x = (before / @moving_x).abs
  558.       # それでも余った距離はこの時点で移動し消化
  559.       @move_x += before % @moving_x
  560.       @battler.move_x = @move_x
  561.     # 減速がある場合  
  562.     elsif @move_boost_x < 0 && @distanse_x != 0
  563.       # 加減速の正負を左右移動に合わせて変換
  564.       if @distanse_x == 0
  565.         @move_boost_x = 0
  566.       elsif @distanse_x < 0
  567.         @move_boost_x *= -1
  568.       end
  569.       # 距離の変化を事前計算
  570.       for i in 0...@move_speed_x
  571.         boost_x += @move_boost_x
  572.         move_x += boost_x
  573.         # 足りない距離を記録
  574.         lost_distance = @distanse_x - move_x
  575.         before = lost_distance
  576.         # 右移動で速度が0になる直前が何フレーム目だったか記録
  577.         if @distanse_x > 0 && boost_x < 0
  578.           @move_speed_x = i - 1
  579.           # 足りない距離を一回前に戻す
  580.           before = lost_distance + boost_x
  581.           break
  582.         # 左移動で速度が0になる直前が何フレーム目だったか記録
  583.         elsif @distanse_x < 0 && boost_x > 0
  584.           @move_speed_x= i - 1
  585.           # 足りない距離を一回前に戻す
  586.           before = lost_distance + boost_x
  587.           break
  588.         end
  589.       end
  590.       # 足りない距離を等速移動させるフレーム数を加算
  591.       plus = before / @moving_x
  592.       @move_speed_plus_x = plus.abs
  593.       # それでも余った距離はこの時点で移動し消化
  594.       @move_x += before % @moving_x
  595.       @battler.move_x = @move_x
  596.     end
  597.     # Y座標移動計算
  598.     # 加減速による移動フレーム数の修正
  599.     boost_y = @moving_y
  600.     move_y = 0
  601.     # 加速がある場合
  602.     if @move_boost_y > 0 && @distanse_y != 0
  603.       # 加減速の正負を左右移動に合わせて変換
  604.       if @distanse_y == 0
  605.         @move_boost_y = 0
  606.       elsif @distanse_y < 0
  607.         @move_boost_y *= -1
  608.       end
  609.       # 距離の変化を事前計算
  610.       for i in 0...@move_speed_y
  611.         boost_y += @move_boost_y
  612.         move_y += boost_y
  613.         # オーバー距離を記録
  614.         over_distance = @distanse_y - move_y
  615.         # 右移動で距離オーバーする直前が何フレーム目だったか記録
  616.         if @distanse_y > 0 && over_distance < 0
  617.           @move_speed_y = i
  618.           break
  619.         # 左移動で距離オーバーする直前が何フレーム目だったか記録
  620.         elsif @distanse_y < 0 && over_distance > 0
  621.           @move_speed_y = i
  622.           break
  623.         end
  624.       end
  625.       # オーバー距離を一回前に戻す
  626.       before = over_distance + boost_y
  627.       # 余った距離を等速移動させるフレーム数を加算
  628.       @move_speed_plus_y = (before / @moving_y).abs
  629.       # それでも余った距離はこの時点で移動し消化
  630.       @move_y += before % @moving_y
  631.       @battler.move_y = @move_y
  632.     # 減速がある場合  
  633.     elsif @move_boost_y < 0 && @distanse_y != 0
  634.       # 加減速の正負を左右移動に合わせて変換
  635.       if @distanse_y == 0
  636.         @move_boost_y = 0
  637.       elsif @distanse_y < 0
  638.         @move_boost_y *= -1
  639.       end
  640.       # 距離の変化を事前計算
  641.       for i in 0...@move_speed_y
  642.         boost_y += @move_boost_y
  643.         move_y += boost_y
  644.         # 足りない距離を記録
  645.         lost_distance = @distanse_y - move_y
  646.         before = lost_distance
  647.         # 右移動で速度が0になる直前が何フレーム目だったか記録
  648.         if @distanse_y > 0 && boost_y < 0
  649.           @move_speed_y = i
  650.           # 足りない距離を一回前に戻す
  651.           before = lost_distance + boost_y
  652.           break
  653.         # 左移動で速度が0になる直前が何フレーム目だったか記録
  654.         elsif @distanse_y < 0 && boost_y > 0
  655.           @move_speed_y = i
  656.           # 足りない距離を一回前に戻す
  657.           before = lost_distance + boost_y
  658.           break
  659.         end
  660.       end
  661.       # 足りない距離を等速移動させるフレーム数を加算
  662.       plus = before / @moving_y
  663.       @move_speed_plus_y = plus.abs
  664.       # それでも余った距離はこの時点で移動し消化
  665.       @move_y += before % @moving_y
  666.       @battler.move_y = @move_y
  667.     end
  668.     # 移動完了時間を算出
  669.     x = @move_speed_plus_x + @move_speed_x
  670.     y = @move_speed_plus_y + @move_speed_y
  671.     if x > y
  672.       end_time = x
  673.     else
  674.       end_time = y
  675.     end
  676.     # 移動が完了するまで次のアクションに行かない
  677.     @wait = end_time
  678.     # ジャンプ計算
  679.     if @jump != 0
  680.       # 移動がなくジャンプのみの場合
  681.       if @wait == 0
  682.         # 時間に計上
  683.         @wait = @active_action[3]
  684.       end  
  685.       # 移動完了時間からジャンプ時間を算出
  686.       @jump_time = @wait / 2
  687.       # 割り切れない場合の余り時間
  688.       @jump_time_plus = @wait % 2
  689.       # ジャンプの正負を判別
  690.       @jump_sign = 0
  691.       @jump_sign2 = 0
  692.       if @jump < 0
  693.         @jump_sign = -1
  694.         @jump_sign2 = 1
  695.         @jump = @jump * -1
  696.       else
  697.         @jump_sign = 1
  698.         @jump_sign2 = -1
  699.       end
  700.       # ジャンプ初速度を決定
  701.       @jump_up = 2 ** @jump * @jump_sign
  702.       # ジャンプ時間の端数を微調整
  703.       if @jump_time == 0
  704.         @jump_up = 0
  705.       elsif @jump_time != 1
  706.         @jump_size = @jump_up * @jump_sign * @jump_sign2
  707.       else
  708.         @jump_size = @jump_up * 2 * @jump_sign * @jump_sign2
  709.         @jump_flug = true
  710.       end  
  711.     end
  712.   end
  713.   #--------------------------------------------------------------------------
  714.   # ● バトラーアニメ開始
  715.   #--------------------------------------------------------------------------
  716.   def battler_anime
  717.     # アニメ設定を反映
  718.     @anime_kind  = @active_action[1]
  719.     @anime_speed = @active_action[2]
  720.     @anime_loop  = @active_action[3]
  721.     # ウエイト時間があれば加算
  722.     @unloop_wait = @active_action[4]
  723.     @anime_end = true
  724.     # 武器アクションがある場合だけ更新する
  725.     if @weapon_R != nil && @active_action[8] != ""
  726.       # 武器の設定をチェック
  727.       weapon_kind = N01::ANIME[@active_action[8]]
  728.       # 初期化
  729.       @weapon_R.action_reset
  730.       # アニメパターンが固定だった場合の武器位置を取得
  731.       @weapon_R.freeze(@active_action[5]) if @active_action[5] != -1
  732.       # 武器画像を設定
  733.       @weapon_R.weapon_graphics
  734.       # 武器アクションを渡す
  735.       @weapon_R.weapon_action(@active_action[8],@anime_loop)
  736.       @weapon_action = true
  737.       # 最初の武器アクションを更新
  738.       @weapon_R.action
  739.     elsif @weapon_R != nil
  740.       @weapon_R.action_reset
  741.     end  
  742.     @anime_end = false
  743.     # アニメパターンが固定だった場合
  744.     if @active_action[5] != -1
  745.       # アニメが常に終了しているとみなす
  746.       @anime_freeze = @anime_end = true
  747.     # 通常のアニメ更新の場合  
  748.     else  
  749.       @anime_freeze = false
  750.       # 最初のアニメパターンを更新
  751.       @pattern = 0
  752.       # 武器アニメがある時だけフレーム更新
  753.       if @weapon_action && @weapon_R != nil
  754.         @weapon_R.action
  755.         @weapon_R.update
  756.       end
  757.     end  
  758.     @pattern_back = false
  759.     @frame = @anime_speed
  760.     # Z座標設定
  761.     @battler.move_z = @active_action[6]
  762.     # 影の有無
  763.     if @shadow != nil
  764.       @shadow.visible = true if @active_action[7]
  765.       @shadow.visible = false unless @active_action[7]
  766.       @shadow.visible = false if @skip_shadow
  767.     end
  768.     # ナンバリングから読み取るファイル名を分岐
  769.     if @active_action[0] == 0
  770.       file_name = @battler_name
  771.     else
  772.       file_name = @battler_name + "_" + @active_action[0].to_s
  773.     end  
  774.     # アニメしないバトラーなら処理終了
  775.     return unless @anime_flug
  776.     self.bitmap = RPG::Cache.character(file_name, @battler_hue)
  777.     # 転送元の矩形を設定
  778.     @sx = @pattern * @width
  779.     @sy = @anime_kind * @height
  780.     @sx = @active_action[5] * @width if @anime_freeze
  781.     self.src_rect.set(@sx, @sy, @width, @height)
  782.   end
  783.   #--------------------------------------------------------------------------
  784.   # ● アニメ飛ばし
  785.   #--------------------------------------------------------------------------
  786.   def moving_anime
  787.     # まだ前のアニメ飛ばしが残っているなら初期化
  788.     @move_anime.action_reset if @anime_moving
  789.     @anime_moving = true
  790.     # バックアタック中はアニメ、武器画像反転
  791.     mirror = false
  792.     mirror = true if $back_attack
  793.     # アニメID
  794.     id = @active_action[1]
  795.     # 対象
  796.     target = @active_action[2]
  797.     x = y = 0
  798.     # 対象が単体の場合
  799.     if target == 0
  800.       # ターゲットが決まってない場合、自身に変換
  801.       if @target_battler == nil or @target_battler[0] == nil
  802.         x = self.x
  803.         y = self.y
  804.       else
  805.         x = @target_battler[0].position_x
  806.         y = @target_battler[0].position_y - @target_battler[0].battler_height / 2
  807.       end  
  808.     # 対象が敵の中心の場合  
  809.     elsif target == 1
  810.       targets = $game_troop.enemies if @battler.is_a?(Game_Actor)
  811.       targets = $game_party.actors if @battler.is_a?(Game_Enemy)
  812.       for target in targets
  813.         x += target.position_x
  814.         y += target.position_y - target.battler_height / 2
  815.       end
  816.       x = x / targets.size
  817.       y = y / targets.size
  818.     # 対象が味方の中心の場合  
  819.     elsif target == 2
  820.       targets = $game_party.actors if @battler.is_a?(Game_Actor)
  821.       targets = $game_troop.enemies if @battler.is_a?(Game_Enemy)
  822.       for target in targets
  823.         x += target.position_x
  824.         y += target.position_y - target.battler_height / 2
  825.         mem += 1
  826.       end
  827.       x = x / targets.size
  828.       y = y / targets.size
  829.     # 対象が自身の場合  
  830.     else
  831.       x = self.x
  832.       y = self.y - @battler.battler_height / 2
  833.     end  
  834.     # 開始位置の微調整
  835.     plus_x = @active_action[6]
  836.     plus_y = @active_action[7]
  837.     # エネミーはX軸を逆に
  838.     plus_x *= -1 if @battler.is_a?(Game_Enemy)
  839.     # 最終的な移動距離を算出
  840.     distanse_x = x - self.x - plus_x
  841.     distanse_y = y - self.y - plus_y
  842.     # 飛ばしタイプ
  843.     type = @active_action[3]
  844.     # 速度
  845.     speed = @active_action[4]
  846.     # 軌道
  847.     orbit = @active_action[5]
  848.     # 自身が開始位置なら
  849.     if @active_action[8] == 0
  850.       @move_anime.base_x = self.x + plus_x
  851.       @move_anime.base_y = self.y + plus_y
  852.     # 対象が開始位置なら
  853.     elsif @active_action[8] == 1
  854.       @move_anime.base_x = x + plus_x
  855.       @move_anime.base_y = y + plus_y
  856.       # 距離を反対に
  857.       distanse_y = distanse_y * -1
  858.       distanse_x = distanse_x * -1
  859.     # 動かさないなら
  860.     else
  861.       @move_anime.base_x = x
  862.       @move_anime.base_y = y
  863.       distanse_x = distanse_y = 0
  864.     end
  865.     # 武器アクションなしは武器表示しない
  866.     if @active_action[10] == ""
  867.       weapon = ""  
  868.     # アニメなしエネミーは武器表示しない
  869.     elsif @anime_flug != true
  870.       weapon = ""  
  871.     # 武器アクションがある場合
  872.     else
  873.       # 飛ばす武器グラフィックが指定されているかチェック
  874.       weapon_id = @battler.weapon_id if @battler.actor?
  875.       weapon_id = @battler.weapon unless @battler.actor?
  876.       # 素手でなければ
  877.       if weapon_id != 0
  878.         weapon_file = $data_weapons[weapon_id].flying_graphic
  879.         # 別画像が指定されていなければ既存の武器グラフィックを取得
  880.         if weapon_file == ""
  881.           weapon_name = $data_weapons[weapon_id].graphic
  882.           # さらに指定がなければアイコングラフィックを利用
  883.           weapon_name = $data_weapons[weapon_id].icon_name if weapon_name == ""
  884.         # 指定されていればそのグラフィック名を取得  
  885.         else
  886.           weapon_name = weapon_file
  887.         end
  888.         # 武器アクション情報を取得
  889.         weapon = @active_action[10]
  890.       # 素手なら表示しない
  891.       else
  892.         weapon = ""
  893.       end
  894.     end
  895.     # ループするか
  896.     loop = @active_action[9]
  897.     # 以上の情報を全てアニメ飛ばしスプライトに送る
  898.     @move_anime.anime_action(id,mirror,distanse_x,distanse_y,type,speed,orbit,weapon,weapon_name,loop)
  899.   end  
  900.   #--------------------------------------------------------------------------
  901.   # ● アクション終了
  902.   #--------------------------------------------------------------------------
  903.   def anime_finish
  904.     # 個別処理終了が省略された場合リピートさせる
  905.     return individual_action_end if @individual_targets.size != 0
  906.     # アクティブバトラーにアクション情報を格納
  907.     send_action(@active_action[0]) if @battler.active
  908.     # 残像があれば開放
  909.     mirage_off if @mirage_flug
  910.     # 待機アクションを繰り返す
  911.     start_action(@repeat_action) unless @non_repeat
  912.   end   
  913.   #--------------------------------------------------------------------------
  914.   # ● コラプスアクション
  915.   #--------------------------------------------------------------------------
  916.   def collapse_action
  917.     @non_repeat = true
  918.     @effect_type = 5
  919.     @collapse_type = @battler.collapse_type unless @battler.actor?
  920.     @battler_visible = false unless @battler.actor?
  921.     @effect_duration = N01::COLLAPSE_WAIT + 32 if @collapse_type == 2
  922.     @effect_duration = 360 if @collapse_type == 3
  923.     @effect_duration = 560 if @collapse_type == 4
  924.   end  
  925.   #--------------------------------------------------------------------------
  926.   # ● ノーマルコラプス
  927.   #--------------------------------------------------------------------------
  928.   def normal_collapse
  929.     if @effect_duration == 31
  930.       $game_system.se_play($data_system.enemy_collapse_se)
  931.       self.blend_type = 1
  932.       self.color.set(255, 64, 64, 255)
  933.     end
  934.     self.opacity = 256 - (48 - @effect_duration) * 6 if @effect_duration <= 31
  935.   end  
  936.   #--------------------------------------------------------------------------
  937.   # ● ボスコラプス1
  938.   #--------------------------------------------------------------------------
  939.   def boss_collapse1
  940.     if @effect_duration == 320
  941.       Audio.se_play("Audio/SE/124-Thunder02", 100, 80)
  942.       self.flash(Color.new(255, 255, 255), 60)
  943.       viewport.flash(Color.new(255, 255, 255), 20)
  944.     end
  945.     if @effect_duration == 290
  946.       Audio.se_play("Audio/SE/124-Thunder02", 100, 80)
  947.       self.flash(Color.new(255, 255, 255), 60)
  948.       viewport.flash(Color.new(255, 255, 255), 20)
  949.     end
  950.     if @effect_duration == 250
  951.       Audio.se_play("Audio/SE/049-Explosion02",100, 50)
  952.       reset
  953.       self.blend_type = 1
  954.       self.color.set(255, 128, 128, 128)
  955.     end
  956.     if @effect_duration < 250
  957.       self.src_rect.set(0, @effect_duration - 250, @width, @height - @shadow.bitmap.height / 2)
  958.       self.x += 10 if @effect_duration % 2 == 0
  959.       self.opacity = @effect_duration - 20
  960.       return if @effect_duration < 100
  961.       Audio.se_play("Audio/SE/049-Explosion02",100, 50) if @effect_duration % 80 == 0
  962.     end
  963.   end
  964.   #--------------------------------------------------------------------------
  965.   # ● ボスコラプス2
  966.   #--------------------------------------------------------------------------
  967.   def boss_collapse2
  968.     duration = @effect_duration
  969.     if duration == 550
  970.       Audio.bgm_fade(2000)
  971.       Audio.bgs_fade(2000)
  972.     end
  973.     if duration == 440 or duration == 380 or duration == 280 or duration == 180
  974.       Audio.se_play("Audio/SE/124-Thunder02", 100, 100)
  975.       self.flash(Color.new(255, 255, 255), 60)
  976.       viewport.flash(Color.new(255, 255, 255), 20)
  977.     end
  978.     if duration == 420 or duration == 360 or duration == 260 or duration == 160
  979.       Audio.se_play("Audio/SE/124-Thunder02", 100, 50)
  980.       self.flash(Color.new(255, 255, 255), 60)
  981.       viewport.flash(Color.new(255, 255, 255), 20)
  982.     end
  983.     if duration == 350
  984.       Audio.se_play("Audio/SE/137-Light03",80, 50)
  985.       reset
  986.       self.blend_type = 1
  987.       self.color.set(255, 255, 255, 128)
  988.     end
  989.     if duration < 350 && duration > 40
  990.       self.src_rect.set(175 - duration / 2, duration / 2 - 175, @width, @height - @shadow.bitmap.height / 2)
  991.       self.x += 10 if duration % 2 == 0
  992.       self.opacity = duration - 60
  993.       self.color.set(255, 255, 255, duration / 2 - 35)
  994.       viewport.color = Color.new(255, 255, 255, 350 - duration)
  995.       Audio.se_play("Audio/SE/137-Light03",80, 50) if duration % 90 == 0
  996.     end
  997.     Audio.se_play("Audio/SE/137-Light03",80, 30) if duration == 38
  998.     viewport.color = Color.new(255, 255, 255, duration * 6) if duration < 40
  999.   end
  1000. end
复制代码


第2个脚本贴完了
我总感觉是脚本里的某几句,但是我就是不知道是哪几句T T
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
7 小时
注册时间
2008-12-25
帖子
104
6
 楼主| 发表于 2009-2-13 07:25:06 | 只看该作者
还有第3个脚本,最长的那个....但是我不知道需要不需要贴....
名字是这个:  Sideview 2

开头是这样的:

  1. #==============================================================================
  2. # ■ Scene_Battle Ver2.6
  3. #------------------------------------------------------------------------------
  4. #  バトル画面の処理を行うクラスです。
  5. #==============================================================================
  6. class Scene_Battle
  7.   #--------------------------------------------------------------------------
  8.   # ● フレーム更新 ※再定義
  9.   #--------------------------------------------------------------------------
  10.   def update
  11.     # バトルイベント実行中
  12.     update_battle_event if $game_system.battle_interpreter.running?
  13.     # ATB更新(@countupの有無で判別)  
  14.     update_countup if @countup != nil && !$game_system.battle_interpreter.running?
  15.     # システム (タイマー)、画面を更新
  16.     $game_system.update
  17.     $game_screen.update
  18.     # タイマー0でバトル中断
  19.     $game_temp.battle_abort = true if $game_system.timer_working and $game_system.timer == 0
  20.     # ウィンドウを更新
  21.     @help_window.update
  22.     @party_command_window.update
  23.     @actor_command_window.update
  24.     @status_window.update
  25.     @message_window.update
  26.     # スプライトセットを更新
  27.     @spriteset.update
  28.     # トランジション処理中
  29.     update_transition if $game_temp.transition_processing
  30.     # メッセージウィンドウ表示中
  31.     return if $game_temp.message_window_showing
  32.     # エフェクト表示中
  33.     return if @spriteset.effect?
  34.     # タイトル画面に戻す場合
  35.     return $scene = Scene_Title.new if $game_temp.to_title
  36.     # バトル中断
  37.     return battle_break if $game_temp.battle_abort
  38.     # ウェイト中
  39.     return @wait_count -= 1 if @wait_count > 0
  40.     # ゲームオーバー
  41.     return $scene = Scene_Gameover.new if $game_temp.gameover
  42.     # アクション強制バトラーが存在せず、バトルイベントが実行中の場合
  43.     return if $game_temp.forcing_battler == nil and $game_system.battle_interpreter.running?
  44.     # フェーズによって分岐
  45.     case @phase
  46.     when 1  # プレバトルフェーズ
  47.       update_phase1
  48.     when 2  # パーティコマンドフェーズ
  49.       update_phase2
  50.     when 3  # アクターコマンドフェーズ
  51.       update_phase3
  52.     when 4  # メインフェーズ
  53.       update_phase4
  54.     when 5  # アフターバトルフェーズ
  55.       update_phase5
  56.     end
  57.   end
  58.   #--------------------------------------------------------------------------
  59.   # ● 基本更新処理
  60.   #--------------------------------------------------------------------------
  61.   def update_basic
  62.     Graphics.update      # ゲーム画面を更新
  63.     Input.update         # 入力情報を更新
  64.     $game_system.update  # タイマーを更新
  65.     $game_screen.update  # スクリーン更新
  66.     @spriteset.update    # スプライトセットを更新
  67.     # アニメウエイトOFFならゲージを止めない(ATB用)
  68.     update_countup if @countup != nil && !PARA_CTB::ANIMATION_WAIT && !@atb_back_attack
  69.   end
  70.   #--------------------------------------------------------------------------
  71.   # ● 基本更新処理 (エフェクト表示中ウエイト)
  72.   #--------------------------------------------------------------------------
  73.   def update_effect_wait
  74.     loop do
  75.       update_basic
  76.       # エフェクトが終わるまで待つ
  77.       break unless @spriteset.effect?
  78.     end
  79.   end
  80.   #--------------------------------------------------------------------------
  81.   # ● 一定時間ウェイト
  82.   #--------------------------------------------------------------------------
  83.   def wait(duration)
  84.     for i in 0...duration
  85.       update_basic
  86.     end
  87.   end
  88.   #--------------------------------------------------------------------------
  89.   # ● 状況メッセージ(バックアタック・逃走)表示
  90.   #--------------------------------------------------------------------------
  91.   def battle_message(text)
  92.     @help_window.set_text(text, 1)
  93.     loop do
  94.       update_basic
  95.       # Cボタンが押されるまで待つ
  96.       break @help_window.visible = @atb_back_attack = false if Input.trigger?(Input::C)
  97.     end
  98.   end
  99.   #--------------------------------------------------------------------------
  100.   # ● トランジション更新
  101.   #--------------------------------------------------------------------------
  102.   def update_transition
  103.     # トランジション処理中フラグをクリア
  104.     $game_temp.transition_processing = false
  105.     # トランジション実行
  106.     if $game_temp.transition_name == ""
  107.       Graphics.transition(20)
  108.     else
  109.       Graphics.transition(40, "Graphics/Transitions/" + $game_temp.transition_name)
  110.     end
  111.   end
  112.   #--------------------------------------------------------------------------
  113.   # ● バトルイベント更新
  114.   #--------------------------------------------------------------------------
  115.   def update_battle_event
  116.     # インタプリタを更新
  117.     $game_system.battle_interpreter.update
  118.     # アクションを強制されているバトラーが存在しない場合
  119.     if $game_temp.forcing_battler == nil
  120.       # バトルイベントの実行が終わった場合
  121.       unless $game_system.battle_interpreter.running?
  122.         # 戦闘継続の場合、バトルイベントのセットアップを再実行
  123.         setup_battle_event unless judge
  124.       end
  125.       # アフターバトルフェーズでなければ
  126.       return if @phase == 5
  127.       # ステータスウィンドウをリフレッシュ
  128.       @status_window.refresh
  129.       # エネミー名リストを更新(パラ犬印のATB用)
  130.       @status_window2.refresh if @status_window2 != nil
  131.     end
  132.   end   
  133.   #--------------------------------------------------------------------------
  134.   # ● ATB更新
  135.   #--------------------------------------------------------------------------
  136.   def update_countup
  137.     return update_ct if PARA_CTB::CT_SKIP == 0
  138.     return @ct_wait -= 1 if @ct_wait > 0
  139.     update_ct
  140.     @ct_wait = PARA_CTB::CT_SKIP
  141.   end
  142.   #--------------------------------------------------------------------------
  143.   # ● バトル中断
  144.   #--------------------------------------------------------------------------
  145.   def battle_break
  146.     # バトル開始前の BGM に戻す
  147.     $game_system.bgm_play($game_temp.map_bgm)
  148.     # バトル終了
  149.     battle_end(3)
  150.   end
  151.   #--------------------------------------------------------------------------
  152.   # ● プレバトルフェーズ開始
  153.   #--------------------------------------------------------------------------
  154.   alias start_phase1_n01 start_phase1
  155.   def start_phase1  
  156.     start_phase1_n01
  157.     # ATB判別
  158.     @spriteset.set_atb if @countup != nil
  159.     # バックアタックが発生した場合
  160.     return unless $back_attack
  161.     @atb_back_attack = true
  162.     battle_message(N01::BACK_ATTACK_COMMENTS)
  163.     # ATBがある場合
  164.     if @countup != nil
  165.       # アクターのCTを0に
  166.       for actor in $game_party.actors
  167.         clear_ct(actor)
  168.       end  
  169.       # エネミーのCTを2倍に
  170.       for enemy in $game_troop.enemies
  171.         declease_ct(enemy,200)
  172.       end
  173.       return
  174.     end
  175.     # パーティ全員のアクションをクリア
  176.     $game_party.clear_actions
  177.     # メインフェーズ開始
  178.     start_phase4
  179.   end
  180.   #--------------------------------------------------------------------------
  181.   # ● 勝敗判定
  182.   #--------------------------------------------------------------------------
  183.   alias judge_n01 judge
  184.   def judge
  185.     # 勝利判定
  186.     win = true
  187.     for enemy in $game_troop.enemies
  188.       win = false if enemy.exist?
  189.       boss_wait1 = true if enemy.collapse_type == 3
  190.       boss_wait2 = true if enemy.collapse_type == 4
  191.     end
  192.     if win
  193.       wait(N01::WIN_WAIT)
  194.       # ボスコラプスはウエイトを長く挟む
  195.       wait(380) if boss_wait1
  196.       wait(640) if boss_wait2
  197.       # 動けないアクターを除いて勝利アクション
  198.       for actor in $game_party.actors
  199.         @spriteset.set_action(true, actor.index,actor.win) unless actor.restriction == 4
  200.       end
  201.       # CTを初期化(ATB用)
  202.       initialize_ct if @countup != nil
  203.     end  
  204.     judge_n01
  205.   end
  206.   #--------------------------------------------------------------------------
  207.   # ● バトル終了 result : 結果 (0:勝利 1:逃走 2:敗北 3:中断)
  208.   #--------------------------------------------------------------------------
  209.   alias battle_end_n01 battle_end
  210.   def battle_end(result)
  211.     # 逃走成功
  212.     if result == 1
  213.       # パーティコマンドウィンドウを無効化
  214.       @party_command_window.active = @party_command_window.visible = false
  215.       for actor in $game_party.actors
  216.         @spriteset.set_action(true, actor.index,actor.run_success) unless actor.restriction == 4
  217.       end
  218.       battle_message(N01::RUN_SUCCESS)
  219.     end  
  220.     # バトル中断を通常処理に戻す
  221.     result = 1 if result == 3
  222.     battle_end_n01(result)
  223.   end  
  224.   #--------------------------------------------------------------------------
  225.   # ● フレーム更新 (パーティコマンドフェーズ : 逃げる)
  226.   #--------------------------------------------------------------------------
  227.   alias update_phase2_escape_n01 update_phase2_escape
  228.   def update_phase2_escape
  229.     update_phase2_escape_n01
  230.     # パーティコマンドウィンドウを無効化
  231.     @party_command_window.active = @party_command_window.visible = false
  232.     # 逃走失敗
  233.     return unless @phase == 4
  234.     for actor in $game_party.actors
  235.       @spriteset.set_action(true, actor.index,actor.run_ng) unless actor.restriction == 4
  236.     end
  237.     battle_message(N01::RUN_NG)
  238.   end  
  239.   #--------------------------------------------------------------------------
  240.   # ● 次のアクターのコマンド入力へ
  241.   #--------------------------------------------------------------------------
  242.   alias phase3_next_actor_n01 phase3_next_actor
  243.   def phase3_next_actor
  244.     # 動けるキャラのみコマンドアクション
  245.     if @active_battler != nil && @active_battler.inputable?
  246.       @spriteset.set_action(true, @actor_index, @active_battler.command_a)
  247.     end
  248.     # 最後のアクターの場合、アクションが終わるまで待つ(ATBがなければ)
  249.     @wait_count = 24 if @countup == nil && @actor_index == $game_party.actors.size-1
  250.     # ATBがあるかで分岐
  251.     phase3_next_actor_n01 if @countup == nil
  252.     phase3_next_actor_for_atb if @countup != nil
  253.     # 動けるキャラのみコマンドアクション
  254.     if @active_battler != nil && @active_battler.inputable?
  255.       @spriteset.set_action(true, @actor_index,@active_battler.command_b)
  256.     end  
  257.   end  
  258.   #--------------------------------------------------------------------------
  259.   # ● 前のアクターのコマンド入力へ
  260.   #--------------------------------------------------------------------------
  261.   alias phase3_prior_actor_n01 phase3_prior_actor
  262.   def phase3_prior_actor
  263.     # 動けるキャラのみコマンドアクション
  264.     if @active_battler != nil && @active_battler.inputable?
  265.       @active_battler.current_action.clear
  266.       @spriteset.set_action(true, @actor_index,@active_battler.command_a)
  267.     end
  268.     # ATBがあるかで分岐
  269.     phase3_prior_actor_n01 if @countup == nil
  270.     phase3_prior_actor_for_atb if @countup != nil
  271.     # 動けるキャラのみコマンドアクション
  272.     if @active_battler != nil && @active_battler.inputable?
  273.       @active_battler.current_action.clear
  274.       @spriteset.set_action(true, @actor_index,@active_battler.command_b)
  275.     end
  276.   end
  277.   #--------------------------------------------------------------------------
  278.   # ● 次のアクターのコマンド入力へ(ATB用)
  279.   #--------------------------------------------------------------------------
  280.   def phase3_next_actor_for_atb
  281.     # ループ
  282.     begin
  283.       # アクターの明滅エフェクト OFF
  284.       @active_battler.blink = false if @active_battler != nil
  285.       # 最後のキャラでメインフェーズ開始
  286.       return start_phase4 if @actor_array_index + 1 == @pre_action_battlers.size
  287.       return start_phase4 if $game_troop.enemies.include?(@pre_action_battlers[@actor_array_index + 1])
  288.       # アクターのインデックスを進める
  289.       @actor_array_index += 1
  290.       @actor_index = @pre_action_battlers[@actor_array_index].index
  291.       @active_battler = $game_party.actors[@actor_index]
  292.       @active_battler.blink = true
  293.       @active_battler.current_action.clear
  294.     # アクターがコマンド入力を受け付けない状態ならもう一度
  295.     end until @active_battler.inputable?
  296.     # アクターコマンドウィンドウをセットアップ
  297.     phase3_setup_command_window
  298.   end
  299.   #--------------------------------------------------------------------------
  300.   # ● 前のアクターのコマンド入力へ(ATB用)
  301.   #--------------------------------------------------------------------------
  302.   def phase3_prior_actor_for_atb
  303.     # ループ
  304.     begin
  305.       # アクターの明滅エフェクト OFF
  306.       @active_battler.blink = false if @active_battler != nil
  307.       # 最初のアクターの場合 アクターコマンドフェーズ開始
  308.       return start_phase2 if @actor_array_index <= 0
  309.       # アクターのインデックスを戻す
  310.       @actor_array_index -= 1
  311.       @actor_index = @pre_action_battlers[@actor_array_index].index
  312.       @active_battler = $game_party.actors[@actor_index]
  313.       @active_battler.blink = true
  314.       @active_battler.current_action.clear
  315.     # アクターがコマンド入力を受け付けない状態ならもう一度
  316.     end until @active_battler.inputable?
  317.     # アクターコマンドウィンドウをセットアップ
  318.     phase3_setup_command_window
  319.   end
  320.   #--------------------------------------------------------------------------
  321.   # ● アクターコマンドウィンドウのセットアップ
  322.   #--------------------------------------------------------------------------
  323.   alias phase3_setup_command_window_n01 phase3_setup_command_window
  324.   def phase3_setup_command_window
  325.     phase3_setup_command_window_n01
  326.     # コマンドウインドウ位置を微調整
  327.     unless $back_attack
  328.       adjuster_x = N01::COMMAND_POSITION[0]
  329.       adjuster_y = N01::COMMAND_POSITION[1]
  330.     # バックアタック用調整
  331.     else
  332.       adjuster_x = N01::COMMAND_POSITION_BACKATTACK[0]
  333.       adjuster_y = N01::COMMAND_POSITION_BACKATTACK[1]
  334.     end
  335.     # コマンド位置を決定
  336.     @actor_command_window.x = @active_battler.position_x + adjuster_x
  337.     @actor_command_window.y = @active_battler.position_y + adjuster_y
  338.     @actor_command_window.z = 9999
  339.   end
  340.   #--------------------------------------------------------------------------
  341.   # ● エネミー選択開始
  342.   #--------------------------------------------------------------------------
  343.   alias start_enemy_select_n01 start_enemy_select
  344.   def start_enemy_select
  345.     # 拡張設定を調べる
  346.     extension = $data_skills[@skill.id].extension if @active_battler.current_action.kind == 1
  347.     extension = $data_items[@item.id].extension if @active_battler.current_action.kind == 2
  348.     if extension != nil
  349.       if extension.include?("全域") or extension.include?("ランダムターゲット")
  350.         # 選択終了
  351.         end_skill_select if @active_battler.current_action.kind == 1
  352.         end_item_select if @active_battler.current_action.kind == 2
  353.         # 次のアクターのコマンド入力へ
  354.         phase3_next_actor
  355.         return
  356.       end  
  357.     end
  358.     start_enemy_select_n01
  359.   end
  360.   #--------------------------------------------------------------------------
  361.   # ● アクター選択開始
  362.   #--------------------------------------------------------------------------
  363.   alias start_actor_select_n01 start_actor_select
  364.   def start_actor_select
  365.     # 拡張設定を調べる
  366.     extension = $data_skills[@skill.id].extension if @active_battler.current_action.kind == 1
  367.     extension = $data_items[@item.id].extension if @active_battler.current_action.kind == 2
  368.     if extension != nil
  369.       if extension.include?("全域") or extension.include?("ランダムターゲット")
  370.         # 選択終了
  371.         end_skill_select if @active_battler.current_action.kind == 1
  372.         end_item_select if @active_battler.current_action.kind == 2
  373.         # 次のアクターのコマンド入力へ
  374.         phase3_next_actor
  375.         return
  376.       end  
  377.     end
  378.     start_actor_select_n01
  379.   end
  380.   #--------------------------------------------------------------------------
  381.   # ● 行動順序作成
  382.   #--------------------------------------------------------------------------
  383.   alias make_action_orders_n01 make_action_orders
  384.   def make_action_orders
  385.     make_action_orders_n01
  386.     # 拡張設定があるかチェック
  387.     for battler in @action_battlers
  388.       skill_id = battler.current_action.skill_id
  389.       item_id = battler.current_action.item_id
  390.       next if battler.current_action.kind == 0
  391.       extension = $data_skills[skill_id].extension if skill_id != 0
  392.       extension = $data_items[item_id].extension if item_id != 0
  393.       battler.current_action.speed = 9999 if extension.include?("絶対先制")
  394.       battler.current_action.speed = -1 if extension.include?("絶対後発")
  395.     end
  396.     # 再度アクションスピードの大きい順に並び替え
  397.     @action_battlers.sort! {|a,b|
  398.       b.current_action.speed - a.current_action.speed }
  399.     # エネミーの行動回数チェック
  400.     for enemy in $game_troop.enemies
  401.       if enemy.action_time[0] != 1
  402.         action_time = 0
  403.         # 確率から回数を取得
  404.         for i in 1...enemy.action_time[0]
  405.           action_time += 1 if rand(100) < enemy.action_time[1]
  406.         end
  407.         enemy.act_time = action_time
  408.         action_time.times do
  409.           enemy_order_time(enemy)
  410.           action_time -= 1
  411.           break if action_time == 0
  412.         end  
  413.         enemy.adj_speed = nil
  414.       end
  415.     end
  416.   end
  417.   #--------------------------------------------------------------------------
  418.   # ● エネミーの行動回数作成
  419.   #--------------------------------------------------------------------------
  420.   def enemy_order_time(enemy)
  421.     enemy.make_action_speed2(enemy.action_time[2])
  422.     select_time = 0
  423.     for member in @action_battlers
  424.       select_time += 1
  425.       break @action_battlers.push(enemy) if member.current_action.speed < enemy.adj_speed
  426.       break @action_battlers.push(enemy) if select_time == @action_battlers.size
  427.     end
  428.   end  
  429.   #--------------------------------------------------------------------------
  430.   # ● フレーム更新 (メインフェーズ ステップ 1 : アクション準備)
  431.   #--------------------------------------------------------------------------
  432.   alias update_phase4_step1_n01 update_phase4_step1
  433.   def update_phase4_step1
  434.     # エフェクト表示中の場合
  435.     return if @spriteset.effect?
  436.     # ウェイト中の場合
  437.     return @wait_count -= 1 if @wait_count > 0
  438.     # 未行動バトラーが存在しない場合 (全員行動した)
  439.     turn_end if @action_battlers.size == 0
  440.     # スリップダメージチェック
  441.     @slip_flug = false
  442.     if @action_battlers[0] != nil
  443.       # フラグオン
  444.       @slip_flug = true if @action_battlers[0].hp > 0 and @action_battlers[0].slip_damage?
  445.     end  
  446.     # スリップダメージによる勝敗判定
  447.     judge if @battle_end
  448.     # 呼び戻す
  449.     update_phase4_step1_n01 unless @battle_end
  450.     # スリップダメージで戦闘不能になったか
  451.     if @slip_flug && @active_battler.dead?
  452.       # コラプス処理
  453.       @active_battler.perform_collapse
  454.       # 待機アクション反映
  455.       @spriteset.set_stand_by_action(@active_battler.actor?, @active_battler.index)
  456.       # 全滅判定が真、またはパーティ人数が 0 人の場合
  457.       return @battle_end = true if $game_party.all_dead? or $game_party.actors.size == 0
  458.       # エネミーが 1 体でも存在すれば処理中止
  459.       for enemy in $game_troop.enemies
  460.         return if enemy.exist?
  461.       end  
  462.       @battle_end = true
  463.     end  
  464.   end
  465.   #--------------------------------------------------------------------------
  466.   # ● ターン終了
  467.   #--------------------------------------------------------------------------
  468.   def turn_end
  469.     # 全バトラーの状態をチェック
  470.     for battler in $game_troop.enemies + $game_party.actors
  471.       # 防御中のアクションをクリア(ATBは性質上ここではクリアさせない)
  472.       battler.current_action.clear if battler.guarding? && @countup == nil
  473.       # そのターンのみ有効なステートがある場合、それを解除
  474.       for state in battler.states
  475.         if $data_states[state].extension.include?("0ターン解除")
  476.           battler.remove_state(state)
  477.           # ステータスウィンドウをリフレッシュ
  478.           @status_window.refresh
  479.         end
  480.       end
  481.     end
  482.   end   #--------------------------------------------------------------------------
  483.   # ● フレーム更新 (メインフェーズ ステップ 2 : アクション開始) ※再定義
  484.   #--------------------------------------------------------------------------
  485.   def update_phase4_step2
  486.     # アニメーション再生中にCTをカウントするか(ATB用)
  487.     if @countup != nil
  488.       @countup = PARA_CTB::ANIMATION_WAIT ? false : true
  489.     end  
  490.     # 強制アクションでなければ
  491.     unless @active_battler.current_action.forcing
  492.       # 制約が [敵を通常攻撃する] か [味方を通常攻撃する] の場合
  493.       if @active_battler.restriction == 2 or @active_battler.restriction == 3
  494.         # アクションに攻撃を設定
  495.         @active_battler.current_action.kind = 0
  496.         @active_battler.current_action.basic = 0
  497.       end
  498.       # 制約が [行動できない] の場合
  499.       if @active_battler.restriction == 4
  500.         # CTをクリア(ATB用)
  501.         clear_ct(@active_battler) if @countup != nil
  502.         # アクション強制対象のバトラーをクリア
  503.         $game_temp.forcing_battler = nil
  504.         # バトラーのアクティブ化を解除
  505.         @active_battler.active = false
  506.         # ステップ 1 に移行
  507.         return @phase4_step = 1
  508.       end
  509.     end
  510.     # 対象バトラーをクリア
  511.     @target_battlers = []
  512.     # バトラーをアクティブ化
  513.     @active_battler.active = true
  514.     # アクションの種別で分岐
  515.     case @active_battler.current_action.kind
  516.     when 0  # 基本
  517.       kind = @active_battler.current_action.basic
  518.       execute_action_attack if kind == 0
  519.       execute_action_guard if kind == 1
  520.       execute_action_escape if kind == 2
  521.       execute_action_none if kind == 3
  522.     when 1  # スキル
  523.       execute_action_skill
  524.     when 2  # アイテム
  525.       execute_action_item
  526.     end
  527.     # 複数回行動のエネミーがいる場合、次の行動を決定
  528.     if !@active_battler.actor? && @active_battler.act_time != 0
  529.       @active_battler.make_action
  530.       @active_battler.act_time -= 1
  531.     end  
  532.     # ステップ6へ(スキル派生+ATBの場合は除く)
  533.     update_phase4_step6 unless @phase4_step == "derivation"
  534.     # バトラーのアクティブ化を解除
  535.     @active_battler.active = false
  536.     # スキル派生+ATBの場合ステップ1へ
  537.     @phase4_step = 1 if @phase4_step == "derivation"
  538.   end
  539.   #--------------------------------------------------------------------------
  540.   # ● 戦闘行動の実行 : 攻撃
  541.   #--------------------------------------------------------------------------
  542.   def execute_action_attack
  543.     # 行動中に死なないようメンバー全員を不死身化
  544.     immortaling
  545.     # 行動側バトラーがエネミーの場合
  546.     if @active_battler.is_a?(Game_Enemy)
  547.       if @active_battler.restriction == 3
  548.         target = $game_troop.random_target_enemy
  549.       elsif @active_battler.restriction == 2
  550.         target = $game_party.random_target_actor
  551.       else
  552.         index = @active_battler.current_action.target_index
  553.         target = $game_party.smooth_target_actor(index)
  554.       end
  555.     end
  556.     # 行動側バトラーがアクターの場合
  557.     if @active_battler.is_a?(Game_Actor)
  558.       if @active_battler.restriction == 3
  559.         target = $game_party.random_target_actor
  560.       elsif @active_battler.restriction == 2
  561.         target = $game_troop.random_target_enemy
  562.       else
  563.         index = @active_battler.current_action.target_index
  564.         target = $game_troop.smooth_target_enemy(index)
  565.       end
  566.     end
  567.     # 対象側バトラーの配列を設定
  568.     @target_battlers = [target]
  569.     target_decision
  570.     if @active_battler.actor?
  571.       if @active_battler.weapon_id == 0
  572.         action = @active_battler.non_weapon
  573.       else  
  574.         action = $data_weapons[@active_battler.weapon_id].base_action
  575.       end  
  576.     else
  577.       if @active_battler.weapon == 0
  578.         action = @active_battler.base_action
  579.       else
  580.         action = $data_weapons[@active_battler.weapon].base_action
  581.       end  
  582.     end
  583.     @spriteset.set_action(@active_battler.actor?, @active_battler.index, action)
  584.     playing_action
  585.   end
  586.   #--------------------------------------------------------------------------
  587.   # ● 戦闘行動の実行 : 防御  
  588.   #--------------------------------------------------------------------------
  589.   def execute_action_guard
  590.     @help_window.set_text("防御", 1)
  591.     @help_window.visible = true
  592.     @active_battler.blink = true
  593.     @spriteset.set_action(@active_battler.actor?, @active_battler.index, @active_battler.defence)
  594.     wait(20)
  595.     @active_battler.blink = false
  596.     @help_window.visible = false
  597.   end
  598.   #--------------------------------------------------------------------------
  599.   # ● 戦闘行動の実行 : 逃走
  600.   #--------------------------------------------------------------------------
  601.   def execute_action_escape
  602.     @spriteset.set_action(false, @active_battler.index, @active_battler.run_success)
  603.     @help_window.set_text("逃走", 1)
  604.     @help_window.visible = true
  605.     @active_battler.escape
  606.     $game_system.se_play($data_system.escape_se)
  607.     wait(20)
  608.     @help_window.visible = false
  609.   end
  610.   #--------------------------------------------------------------------------
  611.   # ● 戦闘行動の実行 : 行動なし
  612.   #--------------------------------------------------------------------------
  613.   def execute_action_none
  614.     # CTをクリア(ATB用)
  615.     clear_ct(@active_battler) if @countup != nil
  616.     $game_temp.forcing_battler = nil
  617.     @phase4_step = 1
  618.   end  
  619.   #--------------------------------------------------------------------------
  620.   # ● 戦闘行動の実行 : スキル  
  621.   #--------------------------------------------------------------------------
  622.   def execute_action_skill
  623.     skill = $data_skills[@active_battler.current_action.skill_id]
  624.     # スキル使用判定
  625.     return break_action("skill") unless @active_battler.skill_can_use?(skill.id)
  626.     # 行動中に死なないようメンバー全員を不死身化
  627.     immortaling
  628.     # ターゲットの決定
  629.     target_decision(skill)
  630.     # バトラーアクション実行
  631.     @spriteset.set_action(@active_battler.actor?, @active_battler.index, skill.base_action)
  632.     # ヘルプにスキル名表示
  633.     @help_window.set_text(skill.name, 1) unless skill.extension.include?("ヘルプ非表示")
  634.     # コスト消費
  635.     @active_battler.consum_skill_cost(skill)
  636.     # アクションタイム
  637.     playing_action
  638.     # コモンイベント取得
  639.     @common_event_id = skill.common_event_id
  640.   end
  641.   #--------------------------------------------------------------------------
  642.   # ● 戦闘行動の実行 : アイテム  
  643.   #--------------------------------------------------------------------------
  644.   def execute_action_item
  645.     item = $data_items[@active_battler.current_action.item_id]
  646.     return break_action("item") unless $game_party.item_can_use?(item.id)
  647.     immortaling
  648.     target_decision(item)
  649.     @spriteset.set_action(@active_battler.actor?, @active_battler.index, item.base_action)
  650.     @help_window.set_text(item.name, 1) unless item.extension.include?("ヘルプ非表示")
  651.     $game_party.lose_item(@item.id, 1) if @item.consumable
  652.     playing_action
  653.     @common_event_id = item.common_event_id
  654.   end
  655.   #--------------------------------------------------------------------------
  656.   # ● 行動中断
  657.   #--------------------------------------------------------------------------
  658.   def break_action(obj)
  659.     # アクション強制対象のバトラーをクリア
  660.     $game_temp.forcing_battler = nil
  661.     # CTをクリア(ATB用)
  662.     declease_ct(@active_battler,100-PARA_CTB::ACT_SKILL_CT) if obj == "skill" && @countup != nil
  663.     declease_ct(@active_battler,100-PARA_CTB::ACT_SKILL_CT) if obj == "item" && @countup != nil
  664.   end      
  665.   #--------------------------------------------------------------------------
  666.   # ● ターゲット決定
  667.   #--------------------------------------------------------------------------
  668.   def target_decision(obj = nil)
  669.     # スキル、アイテムのターゲット範囲拡張
  670.     if obj != nil
  671.       set_target_battlers(obj.scope)
  672.       if obj.extension.include?("全域")
  673.         @target_battlers = []
  674.         # 戦闘不能用のターゲットで区別
  675.         if obj.scope != 5 or obj.scope != 6
  676.           for target in $game_troop.enemies + $game_party.actors
  677.             @target_battlers.push(target) if target.exist?
  678.           end
  679.         else
  680.           for target in $game_troop.enemies + $game_party.actors
  681.             @target_battlers.push(target) if target != nil && target.hp0?
  682.           end
  683.         end
  684.       end
  685.       @target_battlers.delete(@active_battler) if obj.extension.include?("自分以外")
  686.       # ランダムターゲットの場合、一体を選択しランダム範囲を保持
  687.       if obj.extension.include?("ランダムターゲット")
  688.         randum_targets = @target_battlers.dup
  689.         @target_battlers = [randum_targets[rand(randum_targets.size)]]
  690.       end
  691.     end
  692.     # ターゲットがいない場合、アクション中断
  693.     if @target_battlers.size == 0
  694.       action = @active_battler.recover_action
  695.       @spriteset.set_action(@active_battler.actor?, @active_battler.index, action)
  696.     end
  697.     @spriteset.set_target(@active_battler.actor?, @active_battler.index, @target_battlers)
  698.   end   
  699.   #--------------------------------------------------------------------------
  700.   # ● アクション実行中
  701.   #--------------------------------------------------------------------------
  702.   def playing_action
  703.     loop do
  704.       update_basic
  705.       # アクティブバトラーに格納されているアクション情報を見る
  706.       action = @active_battler.play
  707.       next if action == 0
  708.       @active_battler.play = 0
  709.       if action[0] == "個別処理"
  710.         individual
  711.       elsif action == "コラプス許可"
  712.         unimmortaling
  713.       elsif action == "アクティブ解除"
  714.         break action_end
  715.       elsif action == "終了"
  716.         break action_end
  717.       elsif action[0] == "対象アニメ"
  718.         damage_action(action[1])
  719.       end
  720.     end  
  721.   end
  722.   #--------------------------------------------------------------------------
  723.   # ● 個別処理
  724.   #--------------------------------------------------------------------------
  725.   def individual
  726.     # ターゲット情報を保持
  727.     @individual_target = @target_battlers
  728.     @stand_by_target = @target_battlers.dup
  729.   end
  730.   #--------------------------------------------------------------------------
  731.   # ● コラプス禁止
  732.   #--------------------------------------------------------------------------
  733.   def immortaling
  734.     # 全員に不死身付与
  735.     for member in $game_party.actors + $game_troop.enemies
  736.       # 既に戦闘不能ならスキップ
  737.       next if member.dead?
  738.       # イベント等で不死身設定になっていたら解除を無効にするフラグを立てる
  739.       member.non_dead = true if member.immortal
  740.       member.immortal = true
  741.     end  
  742.   end  
  743.   #--------------------------------------------------------------------------
  744.   # ● コラプス許可
  745.   #--------------------------------------------------------------------------
  746.   def unimmortaling
  747.     # 個別処理中はコラプス許可しない
  748.     return if @active_battler.individual
  749.     # 全員の不死身化解除(イベント等で不死身設定がされていれば除く)
  750.     for member in $game_party.actors + $game_troop.enemies
  751.       next if member.dead?
  752.       next if member.non_dead
  753.       member.immortal = false
  754.       member.add_state(1) if member.hp == 0
  755.       member.perform_collapse
  756.     end
  757.     # この時点で待機アクションに即反映させる
  758.     @target_battlers = @stand_by_target if @stand_by_target != nil
  759.     return if @target_battlers == nil or @target_battlers.size == 0
  760.     for target in @target_battlers
  761.       @spriteset.set_stand_by_action(target.actor?, target.index)
  762.       # 自動復活チェック
  763.       next unless target.hp == 0
  764.       resurrection(target)
  765.     end
  766.     # ステータスウインドウをリフレッシュ
  767.     @status_window.refresh
  768.   end
  769.   #--------------------------------------------------------------------------
  770.   # ● 自動復活
  771.   #--------------------------------------------------------------------------
  772.   def resurrection(target)
  773.     for state in target.states
  774.       for ext in $data_states[state].extension
  775.         name = ext.split('')
  776.         next unless name[0] == "自"
  777.         name = name.join
  778.         name.slice!("自動復活/")
  779.         target.hp = target.maxhp * name.to_i / 100
  780.         target.remove_state(1)
  781.         target.remove_state(state)
  782.         target.animation_id = N01::RESURRECTION
  783.         target.animation_hit = true
  784.         @status_window.refresh
  785.       end  
  786.     end
  787.   end  #--------------------------------------------------------------------------
  788.   # ● 魔法反射・無効
  789.   #--------------------------------------------------------------------------
  790.   def magic_reflection(target)
  791.     return unless $data_skills[@active_battler.current_action.skill_id].int_f != 0
  792.     for state in target.states
  793.       for ext in $data_states[state].extension
  794.         name = ext.split('')
  795.         next unless name[0] == "魔"
  796.         if name[2] == "反"
  797.           name = name.join
  798.           name.slice!("魔法反射/")
  799.           target.animation_id = name.to_i
  800.           target.animation_hit = true
  801.           @reflection = true
  802.         else
  803.           name = name.join
  804.           name.slice!("魔法無効/")
  805.           target.animation_id = name.to_i
  806.           target.animation_hit = true
  807.           @invalid = true
  808.         end  
  809.       end  
  810.     end
  811.   end
  812.   #--------------------------------------------------------------------------
  813.   # ● 物理反射・無効
  814.   #--------------------------------------------------------------------------
  815.   def physics_reflection(target)
  816.     return unless $data_skills[@active_battler.current_action.skill_id].str_f != 0
  817.     for state in target.states
  818.       for ext in $data_states[state].extension
  819.         name = ext.split('')
  820.         next unless name[0] == "物"
  821.         if name[2] == "反"
  822.           name = name.join
  823.           name.slice!("物理反射/")
  824.           target.animation_id = name.to_i
  825.           target.animation_hit = true
  826.           @reflection = true
  827.         else
  828.           name = name.join
  829.           name.slice!("物理無効/")
  830.           target.animation_id = name.to_i
  831.           target.animation_hit = true
  832.           @invalid = true
  833.         end
  834.       end  
  835.     end
  836.   end
  837.   #--------------------------------------------------------------------------
  838.   # ● スキルコスト吸収
  839.   #--------------------------------------------------------------------------
  840.   def absorb_cost(target)
  841.     for state in target.states
  842.       if $data_states[state].extension.include?("コスト吸収")
  843.         skill = $data_skills[@active_battler.current_action.skill_id]
  844.         cost = @active_battler.make_skill_cost(@active_battler, skill)
  845.         # SP消費とHP消費で分ける
  846.         return target.hp += cost if skill.extension.include?("HP消費")
  847.         return target.sp += cost
  848.       end  
  849.     end
  850.   end  
复制代码


没完,还有很长很长= =...................
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
7 小时
注册时间
2008-12-25
帖子
104
7
 楼主| 发表于 2009-2-13 07:35:02 | 只看该作者
继续很长的第3个T T


  1.   #--------------------------------------------------------------------------
  2.   # ● アクション終了
  3.   #--------------------------------------------------------------------------
  4.   def action_end
  5.     # 初期化
  6.     @individual_target = nil
  7.     @help_window.visible = false if @help_window != nil && @help_window.visible
  8.     # 念のため不死身化解除
  9.     unimmortaling
  10.     for member in $game_troop.enemies
  11.       member.non_dead = false if member.non_dead
  12.     end  
  13.     # スキル反射されていた場合
  14.     if @active_battler.reflex != nil
  15.       obj = $data_skills[@active_battler.current_action.skill_id]
  16.       @active_battler.perfect_skill_effect(@active_battler, obj)
  17.       pop_damage(@active_battler, obj, @active_battler.reflex)
  18.       if @active_battler.dead?
  19.         update_effect_wait
  20.         @active_battler.perform_collapse
  21.         wait(40)
  22.       end
  23.       @active_battler.reflex = nil
  24.     end  
  25.     # スキル派生がある場合、行動続行
  26.     if @active_battler.derivation != 0
  27.       @active_battler.current_action.skill_id = @active_battler.derivation
  28.       @active_battler.current_action.kind = 1
  29.       @active_battler.derivation = 0
  30.       @action_battlers.unshift(@active_battler)
  31.       derivate_action if @countup != nil
  32.     else
  33.       # 次の行動までウエイトを挟む
  34.       wait(N01::ACTION_WAIT)
  35.       @spriteset.set_stand_by_action(@active_battler.actor?, @active_battler.index)
  36.     end
  37.   end  
  38.   #--------------------------------------------------------------------------
  39.   # ● スキル派生(ATB用)
  40.   #--------------------------------------------------------------------------
  41.   def derivate_action
  42.     # アクション強制対象のバトラーをクリア
  43.     $game_temp.forcing_battler = nil
  44.     # コモンイベント ID が有効の場合
  45.     if @common_event_id > 0
  46.       # イベントをセットアップ
  47.       common_event = $data_common_events[@common_event_id]
  48.       $game_system.battle_interpreter.setup(common_event.list, 0)
  49.     end
  50.     # ステップ6に移行させないフラグを立てる
  51.     @phase4_step = "derivation"
  52.   end
  53.   #--------------------------------------------------------------------------
  54.   # ● ダメージ処理
  55.   #--------------------------------------------------------------------------
  56.   def damage_action(action)
  57.     # 個別処理の場合ターゲットを一つずつ抜き出す
  58.     @target_battlers = [@individual_target.shift] if @active_battler.individual
  59.     # スキル時
  60.     if @active_battler.current_action.kind == 1
  61.       obj = $data_skills[@active_battler.current_action.skill_id]
  62.       for target in @target_battlers
  63.         return if target == nil
  64.         # HPが0なら戦闘不能復活以外はミスしない
  65.         if obj.scope == 5 or obj.scope == 6
  66.           return unless target.dead?
  67.         else
  68.           return if target.dead?
  69.         end
  70.         if target.hp == 0 && obj.scope != 5 && obj.scope != 6
  71.           target.perfect_skill_effect(@active_battler, obj)
  72.         elsif obj.extension.include?("必中")
  73.           target.perfect_skill_effect(@active_battler, obj)
  74.         else
  75.           magic_reflection(target) unless obj.extension.include?("反射無視")
  76.           physics_reflection(target) unless obj.extension.include?("反射無視")
  77.           target.skill_effect(@active_battler, obj) unless @reflection or @invalid
  78.         end
  79.         pop_damage(target, obj, action) unless @reflection or @invalid
  80.         absorb_cost(target)
  81.         @active_battler.reflex = action if @reflection
  82.         @reflection = false
  83.         @invalid = false
  84.         target.movable_backup = target.movable? if @countup != nil
  85.       end
  86.     # アイテム時
  87.     elsif @active_battler.current_action.kind == 2
  88.       obj = $data_items[@active_battler.current_action.item_id]
  89.       for target in @target_battlers
  90.         return if target == nil
  91.         if obj.scope == 5 or obj.scope == 6
  92.           return unless target.dead?
  93.         else
  94.           return if target.dead?
  95.         end
  96.         target.revival = true if obj.scope == 5 or obj.scope == 6
  97.         target.item_effect(obj)
  98.         pop_damage(target, obj, action)
  99.         target.movable_backup = target.movable? if @countup != nil
  100.       end
  101.     # 通常攻撃時
  102.     else
  103.       for target in @target_battlers
  104.         return if target == nil or target.dead?
  105.         target.perfect_attack_effect(@active_battler) if target.hp <= 0
  106.         target.attack_effect(@active_battler) unless target.hp <= 0
  107.         pop_damage(target, nil, action)
  108.         target.movable_backup = target.movable? if @countup != nil
  109.       end
  110.     end
  111.     # 連続行動中のランダムターゲットを考慮し、すぐに次のターゲットを選択
  112.     return if obj == nil
  113.     target_decision(obj) if obj.extension.include?("ランダムターゲット")
  114.   end
  115.   #--------------------------------------------------------------------------
  116.   # ● ダメージ表示  action = [アニメID,反転フラグ,リアクション許可]
  117.   #--------------------------------------------------------------------------
  118.   def pop_damage(target, obj, action)
  119.     index = @active_battler.index
  120.     actor = @active_battler.actor?
  121.     # 拡張設定チェック
  122.     if obj != nil && obj.extension.size != 0
  123.       # 吸収攻撃
  124.       absorb_attack(obj, target, index, actor)
  125.       # ダメージアクション禁止
  126.       action[2] = false if obj.extension.include?("ダメージアクション禁止")
  127.     end
  128.     # 対象のリアクション
  129.     @spriteset.set_damage_action(target.actor?, target.index, action)
  130.     # ステータスウインドウをリフレッシュ
  131.     @status_window.refresh
  132.   end
  133. end  
  134. #==============================================================================
  135. # ■ Spriteset_Battle
  136. #------------------------------------------------------------------------------
  137. #  バトル画面のスプライトをまとめたクラスです。
  138. #==============================================================================
  139. class Spriteset_Battle
  140.   #--------------------------------------------------------------------------
  141.   # ● オブジェクト初期化
  142.   #--------------------------------------------------------------------------
  143.   alias initialize_n01 initialize  
  144.   def initialize
  145.     initialize_n01
  146.     # スプライトを一旦解放
  147.     for sprite in @enemy_sprites + @actor_sprites
  148.       sprite.dispose
  149.     end
  150.     # バックアタック判定
  151.     back_attack if N01::BACK_ATTACK
  152.     # スプライトの作成
  153.     create_enemies
  154.     create_actors
  155.     # フレーム更新
  156.     update
  157.   end   
  158.   #--------------------------------------------------------------------------
  159.   # ● エネミースプライトの作成
  160.   #--------------------------------------------------------------------------
  161.   def create_enemies
  162.     @enemy_sprites = []
  163.     for i in 0...$game_troop.enemies.size
  164.       enemy = $game_troop.enemies[i]
  165.       @enemy_sprites.push(Sprite_Battler.new(@viewport1, enemy))
  166.       # バトル開始アクションを起こす
  167.       @enemy_sprites[i].opacity = 0 if $game_troop.enemies[i].hidden
  168.       @enemy_sprites[i].first_action if $game_troop.enemies[i] != nil
  169.     end
  170.   end
  171.   #--------------------------------------------------------------------------
  172.   # ● アクタースプライトの作成
  173.   #--------------------------------------------------------------------------
  174.   def create_actors
  175.     @actor_sprites = []
  176.     # メンバー最大数スプライトを用意
  177.     member = N01::MAX_MEMBER
  178.     for i in 0...member
  179.       actor = $game_party.actors[i]
  180.       @actor_sprites.push(Sprite_Battler.new(@viewport1, actor))
  181.       @actor_sprites[i].first_action if $game_party.actors[i] != nil
  182.     end
  183.   end
  184.   #--------------------------------------------------------------------------
  185.   # ● バックアタック 
  186.   #--------------------------------------------------------------------------
  187.   def back_attack
  188.     # 強制バックアタックならフラグON
  189.     for i in 0...N01::BACK_ATTACK_SWITCH.size
  190.       return $back_attack = true if $game_switches[N01::BACK_ATTACK_SWITCH[i]]
  191.     end
  192.     # イベントバックアタック回避がONなら
  193.     return $back_attack = false if $back_attack == "boss"
  194.     # バックアタック無効化スイッチをチェック
  195.     for i in 0...N01::NON_BACK_ATTACK_SWITCH.size
  196.       return $back_attack = false if $game_switches[N01::NON_BACK_ATTACK_SWITCH[i]]
  197.     end
  198.     # 装備等によるバックアタック無効化をチェック
  199.     for actor in $game_party.actors
  200.       return $back_attack = false if N01::NON_BACK_ATTACK_WEAPONS.include?(actor.weapon_id)
  201.       return $back_attack = false if N01::NON_BACK_ATTACK_ARMOR1.include?(actor.armor1_id)
  202.       return $back_attack = false if N01::NON_BACK_ATTACK_ARMOR2.include?(actor.armor2_id)
  203.       return $back_attack = false if N01::NON_BACK_ATTACK_ARMOR3.include?(actor.armor3_id)
  204.       return $back_attack = false if N01::NON_BACK_ATTACK_ARMOR4.include?(actor.armor4_id)
  205.       for i in 0...N01::NON_BACK_ATTACK_SKILLS.size
  206.         return $back_attack = false if actor.skill_id_learn?(N01::NON_BACK_ATTACK_SKILLS[i])
  207.       end  
  208.     end
  209.     # エネミーの素早さ平均値を計算
  210.     enemies_agi = 0
  211.     for enemy in $game_troop.enemies
  212.       enemies_agi += enemy.agi
  213.     end
  214.     enemies_agi /= $game_troop.enemies.size if $game_troop.enemies.size != 0
  215.     # アクターの素早さ平均値を計算
  216.     actors_agi = 0
  217.     for actor in $game_party.actors
  218.       actors_agi += actor.agi
  219.     end
  220.     actors_agi /= $game_party.actors.size if $game_party.actors.size != 0
  221.     # バックアタック判定
  222.     $back_attack = rand(100) < N01::BACK_ATTACK_RATE * enemies_agi / actors_agi if actors_agi != 0
  223.     @battleback_sprite.mirror = true if $back_attack && N01::BACK_ATTACK_MIRROR
  224.   end
  225.   #--------------------------------------------------------------------------
  226.   # ● フレーム更新 ※再定義
  227.   #--------------------------------------------------------------------------
  228.   def update
  229.     # アクタースプライトの内容を更新 (アクターの入れ替えに対応)
  230.     for i in 0...$game_party.actors.size
  231.       @actor_sprites[i].battler = $game_party.actors[i]
  232.     end
  233.     # バトルバックのファイル名が現在のものと違う場合
  234.     if @battleback_name != $game_temp.battleback_name
  235.       @battleback_name = $game_temp.battleback_name
  236.         @battleback_sprite.bitmap.dispose if @battleback_sprite.bitmap != nil
  237.       @battleback_sprite.bitmap = RPG::Cache.battleback(@battleback_name)
  238.       @battleback_sprite.src_rect.set(0, 0, 640, 320)
  239.     end
  240.     # バトラースプライトを更新
  241.     for sprite in @enemy_sprites + @actor_sprites
  242.       sprite.update
  243.     end
  244.     # 天候グラフィックを更新
  245.     @weather.type = $game_screen.weather_type
  246.     @weather.max = $game_screen.weather_max
  247.     @weather.update
  248.     # ピクチャスプライトを更新
  249.     for sprite in @picture_sprites
  250.       sprite.update
  251.     end
  252.     # タイマースプライトを更新
  253.     @timer_sprite.update
  254.     # 画面の色調とシェイク位置を設定
  255.     @viewport1.tone = $game_screen.tone
  256.     @viewport1.ox = $game_screen.shake
  257.     # 画面のフラッシュ色を設定
  258.     @viewport4.color = $game_screen.flash_color
  259.     # ビューポートを更新
  260.     @viewport1.update
  261.     @viewport2.update
  262.     @viewport4.update
  263.   end
  264.   #--------------------------------------------------------------------------
  265.   # ● ATB判別 
  266.   #--------------------------------------------------------------------------  
  267.   def set_atb
  268.     for sprite in @enemy_sprites + @actor_sprites
  269.       sprite.set_atb
  270.     end
  271.   end
  272.   #--------------------------------------------------------------------------
  273.   # ● ダメージアクションセット 
  274.   #--------------------------------------------------------------------------  
  275.   def set_damage_action(actor, index, action)
  276.     @actor_sprites[index].damage_action(action) if actor
  277.     @enemy_sprites[index].damage_action(action) unless actor
  278.   end
  279.   #--------------------------------------------------------------------------
  280.   # ● ダメージPOPセット 
  281.   #--------------------------------------------------------------------------  
  282.   def set_damage_pop(actor, index, damage)
  283.     @actor_sprites[index].damage_pop(damage) if actor
  284.     @enemy_sprites[index].damage_pop(damage) unless actor
  285.   end
  286.   #--------------------------------------------------------------------------
  287.   # ● ターゲットセット
  288.   #--------------------------------------------------------------------------  
  289.   def set_target(actor, index, target)
  290.     @actor_sprites[index].get_target(target) if actor
  291.     @enemy_sprites[index].get_target(target) unless actor
  292.   end
  293.   #--------------------------------------------------------------------------
  294.   # ● アクションセット
  295.   #--------------------------------------------------------------------------  
  296.   def set_action(actor, index, kind)
  297.     @actor_sprites[index].start_action(kind) if actor
  298.     @enemy_sprites[index].start_action(kind) unless actor
  299.   end  
  300.   #--------------------------------------------------------------------------
  301.   # ● 待機アクションセット
  302.   #--------------------------------------------------------------------------  
  303.   def set_stand_by_action(actor, index)
  304.     @actor_sprites[index].push_stand_by if actor
  305.     @enemy_sprites[index].push_stand_by unless actor
  306.   end  
  307. end
  308. #==============================================================================
  309. # ■ Sprite_MoveAnime
  310. #------------------------------------------------------------------------------
  311. #  アニメ飛ばし用のスプライトです。
  312. #==============================================================================
  313. class Sprite_MoveAnime < RPG::Sprite
  314.   #--------------------------------------------------------------------------
  315.   # ● 公開インスタンス変数
  316.   #--------------------------------------------------------------------------
  317.   attr_accessor :battler
  318.   attr_accessor :base_x   # 自身の基本X座標
  319.   attr_accessor :base_y   # 自身の基本Y座標
  320.   #--------------------------------------------------------------------------
  321.   # ● オブジェクト初期化
  322.   #--------------------------------------------------------------------------
  323.   def initialize(viewport,battler = nil)
  324.     super(viewport)
  325.     @battler = battler
  326.     self.visible = false
  327.     @base_x = 0
  328.     @base_y = 0
  329.     @move_x = 0                # 動かしたX座標
  330.     @move_y = 0                # 動かしたY座標
  331.     @moving_x = 0              # 1フレーム当たり動かすX座標
  332.     @moving_y = 0              # 1フレーム当たり動かすY座標
  333.     @orbit = 0                 # 円軌道
  334.     @orbit_plus = 0            # 加算する円軌道
  335.     @orbit_time = 0            # 円軌道計算時間
  336.     @through = false           # 貫通するかどうか
  337.     @finish = false            # 移動終了フラグ
  338.     @time = 0                  # 移動時間
  339.     @angle = 0                 # 武器の角度
  340.     @angling = 0               # 1フレーム当たり動かす武器の角度
  341.   end
  342.   #--------------------------------------------------------------------------
  343.   # ● アクションを取得
  344.   #--------------------------------------------------------------------------  
  345.   def anime_action(id,mirror,distanse_x,distanse_y,type,speed,orbit,weapon,weapon_name,loop)
  346.     # 1フレームあたりの移動距離を算出
  347.     @time = speed
  348.     @moving_x = distanse_x / speed
  349.     @moving_y = distanse_y / speed
  350.     # 貫通するかどうか
  351.     @through = true if type == 1
  352.     # 円軌道を取得
  353.     @orbit_plus = orbit
  354.     @orbit_time = @time
  355.     # 武器グラフィックの有無
  356.     if weapon != ""
  357.       action = N01::ANIME[weapon].dup
  358.       @angle = action[0]
  359.       end_angle = action[1]
  360.       time = action[2]
  361.       # 1フレームあたりの回転角度を出す
  362.       @angling = (end_angle - @angle)/ time
  363.       # 開始角度を取る
  364.       self.angle = @angle
  365.       # 反転
  366.       self.mirror = mirror
  367.       # 武器グラフィックを表示
  368.       self.bitmap = RPG::Cache.icon(weapon_name)
  369.       self.ox = self.bitmap.width / 2
  370.       self.oy = self.bitmap.height / 2
  371.       self.visible = true
  372.       # バトラーより手前に表示
  373.       self.z = 1000
  374.     end  
  375.     # 最初は動かさず一回だけ表示
  376.     self.x = @base_x + @move_x
  377.     self.y = @base_y + @move_y + @orbit
  378.     if id != 0 && !loop
  379.       animation($data_animations[id],true)
  380.     elsif id != 0 && loop
  381.       loop_animation($data_animations[id])
  382.     end
  383.   end  
  384.   #--------------------------------------------------------------------------
  385.   # ● 変化した動きをリセット
  386.   #--------------------------------------------------------------------------  
  387.   def action_reset
  388.     @moving_x = @moving_y = @move_x = @move_y = @base_x = @base_y = @orbit = 0
  389.     @orbit_time = @angling = @angle = 0   
  390.     @through = self.visible = @finish = false
  391.     animation(nil,false)
  392.     loop_animation(nil)
  393.     dispose_animation
  394.   end   
  395.   #--------------------------------------------------------------------------
  396.   # ● 貫通終了
  397.   #--------------------------------------------------------------------------  
  398.   def finish?
  399.     return @finish
  400.   end
  401.   #--------------------------------------------------------------------------
  402.   # ● フレーム更新
  403.   #--------------------------------------------------------------------------
  404.   def update
  405.     super
  406.     # 時間消費
  407.     @time -= 1
  408.     # 時間まで指定の動きを
  409.     if @time >= 0
  410.       @move_x += @moving_x
  411.       @move_y += @moving_y
  412.       # 円軌道計算
  413.       if @time < @orbit_time / 2
  414.         @orbit_plus = @orbit_plus * 5 / 4
  415.       elsif @time == @orbit_time / 2
  416.         @orbit_plus *= -1
  417.       else
  418.         @orbit_plus = @orbit_plus * 2 / 3
  419.       end  
  420.       @orbit += @orbit_plus
  421.     end   
  422.     # 時間がきても貫通ならそのまま直進
  423.     @time = 100 if @time < 0 && @through
  424.     @finish = true if @time < 0 && !@through
  425.     # スプライトの座標を更新
  426.     self.x = @base_x + @move_x
  427.     self.y = @base_y + @move_y + @orbit
  428.     # 貫通の場合、画面から消えたら終了フラグオン
  429.     if self.x < -200 or self.x > 840 or self.y < -200 or self.y > 680
  430.       @finish = true
  431.     end
  432.     # 武器グラフィック更新
  433.     if self.visible
  434.       @angle += @angling
  435.       self.angle = @angle
  436.     end  
  437.   end
  438. end
  439. #==============================================================================
  440. # ■ Sprite_Weapon
  441. #------------------------------------------------------------------------------
  442. #  ウエポン表示用のスプライトです。
  443. #==============================================================================
  444. class Sprite_Weapon < RPG::Sprite
  445.   #--------------------------------------------------------------------------
  446.   # ● 公開インスタンス変数
  447.   #--------------------------------------------------------------------------
  448.   attr_accessor :battler
  449.   #--------------------------------------------------------------------------
  450.   # ● オブジェクト初期化
  451.   #--------------------------------------------------------------------------
  452.   def initialize(viewport,battler = nil)
  453.     super(viewport)
  454.     @battler = battler
  455.     @action = []                     # 武器のアクション情報
  456.     @move_x = 0                      # 動かしたX座標
  457.     @move_y = 0                      # 動かしたY座標
  458.     @move_z = 0                      # 動かしたZ座標
  459.     @plus_x = 0                      # 微調整分のX座標
  460.     @plus_y = 0                      # 微調整分のY座標
  461.     @angle = 0                       # 武器の回転角度
  462.     @zoom_x = 1                      # 武器の横拡大率
  463.     @zoom_y = 1                      # 武器の縦拡大率
  464.     @moving_x = 0                    # 1フレーム当たり動かすX座標
  465.     @moving_y = 0                    # 1フレーム当たり動かすY座標
  466.     @angling = 0                     # 1フレーム当たりの回転角度
  467.     @zooming_x = 1                   # 1フレーム当たりの横拡大率
  468.     @zooming_y = 1                   # 1フレーム当たりの縦拡大率   
  469.     @weapon_width = 0                # 武器の横幅   
  470.     @weapon_height = 0               # 武器の縦幅   
  471.     @freeze = -1                     # 固定アニメ用武器位置
  472.     @mirroring = false               # バトラーが反転しているか
  473.     @time = N01::ANIME_PATTERN + 1   # 更新回数
  474.     # 武器を取得
  475.     weapon_graphics
  476.   end
  477.   #--------------------------------------------------------------------------
  478.   # ● 解放
  479.   #--------------------------------------------------------------------------
  480.   def dispose
  481.     self.bitmap.dispose if self.bitmap != nil
  482.     super
  483.   end
  484.   #--------------------------------------------------------------------------
  485.   # ● 武器を取得
  486.   #--------------------------------------------------------------------------  
  487.   def weapon_graphics
  488.     if @battler.actor?
  489.       weapon = $data_weapons[@battler.weapon_id]
  490.     else
  491.       weapon = $data_weapons[@battler.weapon]
  492.       # エネミー反転フラグ確認
  493.       @mirroring = true if @battler.action_mirror
  494.     end
  495.     # 武器がなければ処理をキャンセル
  496.     return if weapon == nil
  497.     # アイコンを利用するなら
  498.     if weapon.graphic == ""
  499.       self.bitmap = RPG::Cache.icon(weapon.icon_name)
  500.       @weapon_width = @weapon_height = 24
  501.     # ID指定があったら、アイコンではなくそのグラフィックを取得  
  502.     else
  503.       self.bitmap = RPG::Cache.icon(weapon.graphic)
  504.       @weapon_width = self.bitmap.width
  505.       @weapon_height = self.bitmap.height
  506.     end
  507.   end
  508.   #--------------------------------------------------------------------------
  509.   # ● アニメ固定時の武器位置を取得
  510.   #--------------------------------------------------------------------------  
  511.   def freeze(action)
  512.     @freeze = action
  513.   end
  514.   #--------------------------------------------------------------------------
  515.   # ● 武器アクションを取得 freeze
  516.   #--------------------------------------------------------------------------  
  517.   def weapon_action(action,loop)
  518.     # 名称がない場合は非表示に
  519.     if action == ""
  520.       self.visible = false
  521.     # 素手なら非表示に
  522.     elsif @weapon_id == 0
  523.       self.visible = false
  524.     # 武器アクション情報を受け取る
  525.     else
  526.       @action = N01::ANIME[action]
  527.       act0 = @action[0]
  528.       act1 = @action[1]
  529.       act2 = @action[2]
  530.       act3 = @action[3]
  531.       act4 = @action[4]
  532.       act5 = @action[5]
  533.       act6 = @action[6]
  534.       act7 = @action[7]
  535.       act8 = @action[8]
  536.       act9 = @action[9]
  537.       act10 = @action[10]
  538.       # バトラーが反転してる場合、X軸の動きを逆に
  539.       if @mirroring
  540.         act0 *= -1
  541.         act3 *= -1
  542.         act4 *= -1
  543.         act9 *= -1
  544.       end
  545.       # バックアタック時には逆に
  546.       if $back_attack && N01::BACK_ATTACK
  547.         act0 *= -1
  548.         act3 *= -1
  549.         act4 *= -1
  550.         act9 *= -1
  551.       end
  552.       # キャラのアニメパターン数をチェック
  553.       time = N01::ANIME_PATTERN
  554.       # Z座標をチェック
  555.       if act2
  556.         self.z = @battler.position_z + 1
  557.       else
  558.         self.z = @battler.position_z - 1
  559.       end
  560.       # 反転はここで実行し、すでに反転している場合は元に戻す
  561.       if act6
  562.         if self.mirror
  563.           self.mirror = false
  564.         else
  565.           self.mirror = true
  566.         end
  567.       end
  568.       # バトラーの反転を反映
  569.       if @mirroring
  570.         if self.mirror
  571.           self.mirror = false
  572.         else
  573.           self.mirror = true
  574.         end
  575.       end
  576.       # バックアタック時には逆に
  577.       if $back_attack && N01::BACK_ATTACK
  578.         if self.mirror
  579.           self.mirror = false
  580.         else
  581.           self.mirror = true
  582.         end
  583.       end  
  584.       # アニメパターン数で割った変化を計算
  585.       @moving_x = act0 / time
  586.       @moving_y = act1 / time
  587.       # 最初の角度を代入
  588.       @angle = act3
  589.       self.angle = @angle
  590.       # 更新角度を計算
  591.       @angling = (act4 - act3)/ time
  592.       # 角度が割り切れない場合、ここで余り分を回転加算
  593.       @angle += (act4 - act3) % time
  594.       # 拡大縮小
  595.       @zooming_x = (1 - act7) / time
  596.       @zooming_y = (1 - act8) / time
  597.       # 反転してる場合、回転元の原点を逆に
  598.       if self.mirror
  599.         case act5
  600.         when 1 # 左上→右上に
  601.           act5 = 2
  602.         when 2 # 右上→左上に
  603.           act5 = 1
  604.         when 3 # 左下→右下に
  605.           act5 = 4
  606.         when 4 # 右下→左下に
  607.           act5 = 3
  608.         end  
  609.       end   
  610.       # 回転元の原点を設定
  611.       case act5
  612.       when 0 # 中心
  613.         self.ox = @weapon_width / 2
  614.         self.oy = @weapon_height / 2
  615.       when 1 # 左上
  616.         self.ox = 0
  617.         self.oy = 0
  618.       when 2 # 右上
  619.         self.ox = @weapon_width
  620.         self.oy = 0
  621.       when 3 # 左下
  622.         self.ox = 0
  623.         self.oy = @weapon_height
  624.       when 4 # 右下
  625.         self.ox = @weapon_width
  626.         self.oy = @weapon_height
  627.       end  
  628.       # 座標微調整
  629.       @plus_x = act9
  630.       @plus_y = act10
  631.       # 往復ループならフラグオン
  632.       @loop = true if loop == 0
  633.       # 初回で0から始まるように、この時点で-1回の動きをさせる
  634.       @angle -= @angling
  635.       @zoom_x -= @zooming_x
  636.       @zoom_y -= @zooming_y
  637.       # スプライトの座標を更新
  638.       @move_x -= @moving_x
  639.       @move_y -= @moving_y
  640.       @move_z = 1000 if act2
  641.       # 固定アニメの場合、この時点で動きを消化
  642.       if @freeze != -1
  643.         for i in 0..@freeze + 1
  644.           @angle += @angling
  645.           @zoom_x += @zooming_x
  646.           @zoom_y += @zooming_y
  647.           # スプライトの座標を更新
  648.           @move_x += @moving_x
  649.           @move_y += @moving_y
  650.         end
  651.         @angling = 0
  652.         @zooming_x = 0
  653.         @zooming_y = 0
  654.         @moving_x = 0
  655.         @moving_y = 0
  656.       end
  657.       # 可視
  658.       self.visible = true
  659.     end
  660.   end  
  661.   #--------------------------------------------------------------------------
  662.   # ● 変化した動きを全部リセット
  663.   #--------------------------------------------------------------------------  
  664.   def action_reset
  665.     @moving_x = @moving_y = @move_x = @move_y = @plus_x = @plus_y = 0
  666.     @angling = @zooming_x = @zooming_y = @angle = self.angle = @move_z = 0
  667.     @zoom_x = @zoom_y = self.zoom_x = self.zoom_y = 1
  668.     self.mirror = self.visible = @loop = false
  669.     @freeze = -1
  670.     @action = []
  671.     @time = N01::ANIME_PATTERN + 1
  672.   end
  673.   #--------------------------------------------------------------------------
  674.   # ● 往復ループさせる
  675.   #--------------------------------------------------------------------------  
  676.   def action_loop
  677.     # 動きを反対に
  678.     @angling *= -1
  679.     @zooming_x *= -1
  680.     @zooming_y *= -1
  681.     @moving_x *= -1
  682.     @moving_y *= -1
  683.   end  
  684.   #--------------------------------------------------------------------------
  685.   # ● アクターが反転している場合、自身も反転させる
  686.   #--------------------------------------------------------------------------
  687.   def mirroring
  688.     return @mirroring = false if @mirroring
  689.     @mirroring = true
  690.   end  
  691.   #--------------------------------------------------------------------------
  692.   # ● アクターアニメが更新された時のみ武器アクションの変化を更新
  693.   #--------------------------------------------------------------------------
  694.   def action
  695.     return if @time <= 0
  696.     @time -= 1
  697.     # 回転、拡大縮小を更新
  698.     @angle += @angling
  699.     @zoom_x += @zooming_x
  700.     @zoom_y += @zooming_y
  701.     # スプライトの座標を更新
  702.     @move_x += @moving_x
  703.     @move_y += @moving_y
  704.     # 往復ループなら動きを反転
  705.     if @loop && @time == 0
  706.       @time = N01::ANIME_PATTERN + 1
  707.       action_loop
  708.     end
  709.   end  
  710.   #--------------------------------------------------------------------------
  711.   # ● フレーム更新
  712.   #--------------------------------------------------------------------------
  713.   def update
  714.     super
  715.     # 回転、拡大縮小を更新
  716.     self.angle = @angle
  717.     self.zoom_x = @zoom_x
  718.     self.zoom_y = @zoom_y
  719.     # スプライトの座標を更新
  720.     self.x = @battler.position_x + @move_x + @plus_x
  721.     self.y = @battler.position_y + @move_y + @plus_y
  722.     self.z = @battler.position_z + @move_z - 1
  723.   end
  724. end
  725. #==============================================================================
  726. # ■ Scene_Map
  727. #------------------------------------------------------------------------------
  728. #  マップ画面の処理を行うクラスです。
  729. #==============================================================================
  730. class Scene_Map
  731.   #--------------------------------------------------------------------------
  732.   # ● バトルの呼び出し (イベント戦闘でバックアタックを無効化する)
  733.   #--------------------------------------------------------------------------
  734.   alias call_battle_n01 call_battle
  735.   def call_battle
  736.     call_battle_n01
  737.     $back_attack = "boss" unless N01::EVENT_BACK_ATTACK
  738.   end
  739. end  
  740. #==============================================================================
  741. # ■ Game_Battler (分割定義 1)
  742. #------------------------------------------------------------------------------
  743. #  バトラーを扱うクラスです。
  744. #==============================================================================
  745. class Game_Battler
  746.   #--------------------------------------------------------------------------
  747.   # ● 公開インスタンス変数
  748.   #--------------------------------------------------------------------------
  749.   attr_accessor :sp_damage         # 行動結果: SP ダメージ
  750.   attr_accessor :collapse          # 崩壊フラグ
  751.   attr_accessor :move_x            # X方向の移動補正
  752.   attr_accessor :move_y            # Y方向の移動補正
  753.   attr_accessor :move_z            # Z方向の移動補正
  754.   attr_accessor :jump              # ジャンプ補正
  755.   attr_accessor :active            # アクティブか
  756.   attr_accessor :non_dead          # 不死身フラグ
  757.   attr_accessor :slip_damage       # スリップダメージフラグ
  758.   attr_accessor :derivation        # スキル派生ID
  759.   attr_accessor :individual        # 個別処理
  760.   attr_accessor :play              # アクション情報
  761.   attr_accessor :force_action      # 強制されるアクション情報
  762.   attr_accessor :force_target      # ターゲット変更情報
  763.   attr_accessor :revival           # 復活
  764.   attr_accessor :reflex            # スキル反射情報
  765.   attr_accessor :absorb            # スキルコスト吸収
  766.   attr_accessor :battler_height    # バトラー画像の縦幅
  767.   attr_accessor :anime_mirror      # 戦闘アニメの反転フラグ
  768.   attr_reader   :base_position_x   # 初期配置X座標
  769.   attr_reader   :base_position_y   # 初期配置Y座標   
  770.   #--------------------------------------------------------------------------
  771.   # ● オブジェクト初期化
  772.   #--------------------------------------------------------------------------
  773.   alias initialize_n01 initialize
  774.   def initialize
  775.     initialize_n01
  776.     @move_x = @move_y = @move_z = @plus_y = @jump = @derivation = @act_time = 0
  777.     @force_action = @force_target = @base_position_x = @base_position_y = 0
  778.     @absorb = @play = @battler_height = 0
  779.     @active = @non_dead = @individual = @slip_damage = @revival = false
  780.     @collapse = @sp_damage = @anime_mirror = false
  781.   end
  782.   #--------------------------------------------------------------------------
  783.   # ● 一番新しいステートIDを返す
  784.   #--------------------------------------------------------------------------
  785.   def state_id
  786.     return @states[@states.size - 1]
  787.   end
  788.   #--------------------------------------------------------------------------
  789.   # ● スキルの使用可能判定  ※再定義
  790.   #--------------------------------------------------------------------------
  791.   def skill_can_use?(skill_id)
  792.     skill = $data_skills[skill_id]
  793.     cost = make_skill_cost(self, skill)
  794.     # HP消費かSP消費かで分岐
  795.     if skill.extension.include?("HP消費")
  796.       return false if cost >= self.hp
  797.     else  
  798.       return false if cost > self.sp
  799.     end
  800.     # 戦闘不能の場合は使用不可
  801.     return false if dead?
  802.     # 沈黙状態の場合、物理スキル以外は使用不可
  803.     return false if skill.atk_f == 0 and self.restriction == 1
  804.     # 使用可能時を取得
  805.     occasion = skill.occasion
  806.     # 戦闘中の場合 [常時] または [バトルのみ] なら使用可
  807.     return (occasion == 0 or occasion == 1) if $game_temp.in_battle
  808.     # 戦闘中ではない場合 [常時] または [メニューのみ] なら使用可
  809.     return (occasion == 0 or occasion == 2)
  810.   end  
  811.   #--------------------------------------------------------------------------
  812.   # ● スキルコスト計算
  813.   #--------------------------------------------------------------------------
  814.   def make_skill_cost(user, skill)
  815.     cost = skill.sp_cost
  816.     if skill.extension.include?("%コストMAX")
  817.       return user.maxhp * cost / 100 if skill.extension.include?("HP消費")
  818.       return user.maxsp * cost / 100
  819.     elsif skill.extension.include?("%コストNOW")
  820.       return user.hp * cost / 100 if skill.extension.include?("HP消費")
  821.       return user.sp * cost / 100
  822.     end
  823.     return cost
  824.   end
  825.   #--------------------------------------------------------------------------
  826.   # ● スキルコスト消費
  827.   #--------------------------------------------------------------------------
  828.   def consum_skill_cost(skill)
  829.     cost = make_skill_cost(self, skill)
  830.     return self.hp -= cost if skill.extension.include?("HP消費")
  831.     return self.sp -= cost
  832.   end  
  833.   #--------------------------------------------------------------------------
  834.   # ● スキルの効果適用
  835.   #--------------------------------------------------------------------------
  836.   alias skill_effect_n01 skill_effect
  837.   def skill_effect(user, skill)
  838.     # ダメージ計算
  839.     now_hp = self.hp
  840.     # スキルの効果範囲が HP 1 以上の味方で、自分の HP が 0、
  841.     # またはスキルの効果範囲が HP 0 の味方で、自分の HP が 1 以上の場合
  842.     if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
  843.        ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
  844.       # メソッド終了
  845.       return false
  846.     end
  847.     effective = skill_effect_n01(user, skill)
  848.     # 効果がなければ処理中断
  849.     return if effective == false
  850.     # 拡張設定チェック
  851.     check_extension(skill)
  852.     # 割合ダメージ
  853.     if @ratio_maxdamage != nil
  854.       self.damage = self.maxhp * @ratio_maxdamage / 100 unless @sp_damage
  855.       self.damage = self.maxsp * @ratio_maxdamage / 100 if @sp_damage
  856.     end
  857.     if @ratio_nowdamage != nil
  858.       self.damage = self.hp * @ratio_nowdamage / 100 unless @sp_damage
  859.       self.damage = self.sp * @ratio_nowdamage / 100 if @sp_damage
  860.     end
  861.     # コスト威力
  862.     if @cost_damage
  863.       cost = make_skill_cost(user, skill)
  864.       if skill.extension.include?("HP消費")
  865.         self.damage = self.damage * cost / user.maxhp
  866.       else
  867.         self.damage = self.damage * cost / user.maxsp
  868.       end  
  869.     end
  870.     # 現在HP威力
  871.     self.damage = self.damage * user.hp / user.maxhp if @nowhp_damage
  872.     # 現在SP威力
  873.     self.damage = self.damage * user.sp / user.maxsp if @nowsp_damage
  874.     # 拡張反映
  875.     if @sp_damage
  876.       self.hp = now_hp
  877.       self.sp -= self.damage
  878.     elsif @extension
  879.       self.hp = now_hp
  880.       self.hp -= self.damage
  881.     end
  882.     return true
  883.   end
复制代码
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
7 小时
注册时间
2008-12-25
帖子
104
8
 楼主| 发表于 2009-2-13 07:35:45 | 只看该作者
最后一部分:


  1.   #--------------------------------------------------------------------------
  2.   # ● 拡張設定チェック
  3.   #--------------------------------------------------------------------------
  4.   def check_extension(skill)
  5.     # 初期化
  6.     @extension = false
  7.     @sp_damage = false
  8.     @cost_damage = false
  9.     @nowhp_damage = false
  10.     @nowsp_damage = false
  11.     @ratio_maxdamage = nil
  12.     @ratio_nowdamage = nil
  13.     for ext in skill.extension
  14.       break if self.damage == "Miss" or self.damage == "" or self.damage == 0
  15.       # SPダメージ
  16.       if ext == "SPダメージ"
  17.         next @sp_damage = true
  18.       # コスト威力
  19.       elsif ext == "コスト威力"  
  20.         @extension = true
  21.         next @cost_damage = true
  22.       # 現在HP威力
  23.       elsif ext == "現HP威力"
  24.         @extension = true
  25.         next @nowhp_damage = true
  26.       # 現在SP威力
  27.       elsif ext == "現SP威力"
  28.         @extension = true
  29.         next @nowsp_damage = true
  30.       else
  31.         # 割合ダメージ
  32.         name = ext.split('')
  33.         if name[5] == "M"
  34.           name = name.join
  35.           name.slice!("%ダメージMAX/")
  36.           @extension = true
  37.           next @ratio_maxdamage = name.to_i
  38.         elsif name[5] == "N"
  39.           name = name.join
  40.           name.slice!("%ダメージNOW/")
  41.           @extension = true
  42.           next @ratio_nowdamage = name.to_i
  43.         end  
  44.       end
  45.     end  
  46.   end
  47.   #--------------------------------------------------------------------------
  48.   # ● 通常攻撃の効果適用  絶対に回避できない処理
  49.   #--------------------------------------------------------------------------
  50.   def perfect_attack_effect(attacker)
  51.     # クリティカルフラグをクリア
  52.     self.critical = false
  53.     # 基本ダメージを計算
  54.     atk = [attacker.atk - self.pdef / 2, 0].max
  55.     self.damage = atk * (20 + attacker.str) / 20
  56.     # 属性修正
  57.     self.damage *= elements_correct(attacker.element_set)
  58.     self.damage /= 100
  59.     # ダメージの符号が正の場合
  60.     if self.damage > 0
  61.       # クリティカル修正
  62.       if rand(100) < 4 * attacker.dex / self.agi
  63.         self.damage *= 2
  64.         self.critical = true
  65.       end
  66.       # 防御修正
  67.       self.damage /= 2 if self.guarding?
  68.     end
  69.     # 分散
  70.     if self.damage.abs > 0
  71.       amp = [self.damage.abs * 15 / 100, 1].max
  72.       self.damage += rand(amp+1) + rand(amp+1) - amp
  73.     end
  74.     # ステート衝撃解除
  75.     remove_states_shock
  76.     # HP からダメージを減算
  77.     self.hp -= self.damage
  78.     # ステート変化
  79.     @state_changed = false
  80.     states_plus(attacker.plus_state_set)
  81.     states_minus(attacker.minus_state_set)
  82.     # メソッド終了
  83.     return true
  84.   end
  85.   #--------------------------------------------------------------------------
  86.   # ● スキルの効果適用  絶対に回避できない処理
  87.   #--------------------------------------------------------------------------
  88.   def perfect_skill_effect(user, skill)
  89.     # クリティカルフラグをクリア
  90.     self.critical = false
  91.     # スキルの効果範囲が HP 1 以上の味方で、自分の HP が 0、
  92.     # またはスキルの効果範囲が HP 0 の味方で、自分の HP が 1 以上の場合
  93.     if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
  94.        ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
  95.       # メソッド終了
  96.       return false
  97.     end
  98.     # 有効フラグをクリア
  99.     effective = false
  100.     # コモンイベント ID が有効の場合は有効フラグをセット
  101.     effective |= skill.common_event_id > 0
  102.     # 威力を計算
  103.     power = skill.power + user.atk * skill.atk_f / 100
  104.     if power > 0
  105.       power -= self.pdef * skill.pdef_f / 200
  106.       power -= self.mdef * skill.mdef_f / 200
  107.       power = [power, 0].max
  108.     end
  109.     # 倍率を計算
  110.     rate = 20
  111.     rate += (user.str * skill.str_f / 100)
  112.     rate += (user.dex * skill.dex_f / 100)
  113.     rate += (user.agi * skill.agi_f / 100)
  114.     rate += (user.int * skill.int_f / 100)
  115.     # 基本ダメージを計算
  116.     self.damage = power * rate / 20
  117.     # 属性修正
  118.     self.damage *= elements_correct(skill.element_set)
  119.     self.damage /= 100
  120.     # ダメージの符号が正の場合 防御修正
  121.     self.damage /= 2 if self.damage > 0 && self.guarding?
  122.     # 分散
  123.     if skill.variance > 0 and self.damage.abs > 0
  124.       amp = [self.damage.abs * skill.variance / 100, 1].max
  125.       self.damage += rand(amp+1) + rand(amp+1) - amp
  126.     end
  127.     # 威力 0 以外の物理攻撃の場合
  128.     if skill.power != 0 and skill.atk_f > 0
  129.       # ステート衝撃解除
  130.       remove_states_shock
  131.       # 有効フラグをセット
  132.       effective = true
  133.     end
  134.     # HP からダメージを減算
  135.     last_hp = self.hp
  136.     self.hp -= self.damage
  137.     effective |= self.hp != last_hp
  138.     # ステート変化
  139.     @state_changed = false
  140.     effective |= states_plus(skill.plus_state_set)
  141.     effective |= states_minus(skill.minus_state_set)
  142.     # 威力が 0 の場合ダメージに空文字列を設定
  143.     self.damage = "" if skill.power == 0
  144.     # メソッド終了
  145.     return effective
  146.   end
  147.   #--------------------------------------------------------------------------
  148.   # ● 初期配置の変更
  149.   #--------------------------------------------------------------------------
  150.   def change_base_position(x, y)
  151.     @base_position_x = x
  152.     @base_position_y = y
  153.   end
  154.   #--------------------------------------------------------------------------
  155.   # ● 初期化
  156.   #--------------------------------------------------------------------------
  157.   def reset_coordinate
  158.     @move_x = @move_y = @move_z = @jump = @derivation = 0
  159.     @active = @non_dead = @individual = false   
  160.   end
  161. end  
  162. #==============================================================================
  163. # ■ Game_Actor
  164. #------------------------------------------------------------------------------
  165. #  アクターを扱うクラスです。
  166. #==============================================================================
  167. class Game_Actor < Game_Battler
  168.   #--------------------------------------------------------------------------
  169.   # ● アクターか否かの判定
  170.   #--------------------------------------------------------------------------
  171.   def actor?
  172.     return true
  173.   end
  174.   #--------------------------------------------------------------------------
  175.   # ● IDによるスキルの習得済み判定
  176.   #--------------------------------------------------------------------------
  177.   def skill_id_learn?(skill_id)
  178.     return @skills.include?(skill_id)
  179.   end
  180.   #--------------------------------------------------------------------------
  181.   # ● スキルの使用可能判定  ※再定義
  182.   #--------------------------------------------------------------------------
  183.   def skill_can_use?(skill_id)
  184.     return super
  185.   end
  186.   #--------------------------------------------------------------------------
  187.   # ● グラフィックの変更
  188.   #--------------------------------------------------------------------------
  189.   def graphic_change(character_name)
  190.     @character_name = character_name
  191.   end
  192.   #--------------------------------------------------------------------------
  193.   # ● コラプスの実行
  194.   #--------------------------------------------------------------------------
  195.   def perform_collapse
  196.     $game_system.se_play($data_system.actor_collapse_se) if $game_temp.in_battle and dead?
  197.   end
  198.   #--------------------------------------------------------------------------
  199.   # ● 初期配置の取得
  200.   #--------------------------------------------------------------------------
  201.   def base_position
  202.     base = N01::ACTOR_POSITION[self.index]
  203.     @base_position_x = base[0]
  204.     @base_position_y = base[1]
  205.     # バックアタック時はX軸を逆に
  206.     @base_position_x = 640 - base[0] if $back_attack && N01::BACK_ATTACK
  207.   end
  208.   #--------------------------------------------------------------------------
  209.   # ● バトル画面 X 座標の取得
  210.   #--------------------------------------------------------------------------
  211.   def position_x
  212.     return 0 if self.index == nil
  213.     return @base_position_x + @move_x
  214.   end
  215.   #--------------------------------------------------------------------------
  216.   # ● バトル画面 Y 座標の取得
  217.   #--------------------------------------------------------------------------
  218.   def position_y
  219.     return 0 if self.index == nil
  220.     return @base_position_y + @move_y + @jump
  221.   end
  222.   #--------------------------------------------------------------------------
  223.   # ● バトル画面 Z 座標の取得
  224.   #--------------------------------------------------------------------------
  225.   def position_z
  226.     return 0 if self.index == nil
  227.     return self.index + @base_position_y + @move_y + @move_z - @jump + 200
  228.   end  
  229. end
  230. #==============================================================================
  231. # ■ Game_Enemy
  232. #------------------------------------------------------------------------------
  233. #  エネミーを扱うクラスです。
  234. #==============================================================================
  235. class Game_Enemy < Game_Battler
  236.   #--------------------------------------------------------------------------
  237.   # ● 公開インスタンス変数
  238.   #--------------------------------------------------------------------------
  239.   attr_accessor :adj_speed        # 複数回行動の速度補正
  240.   attr_accessor :act_time         # 行動数回
  241.   #--------------------------------------------------------------------------
  242.   # ● アクターか否かの判定
  243.   #--------------------------------------------------------------------------
  244.   def actor?
  245.     return false
  246.   end
  247.   #--------------------------------------------------------------------------
  248.   # ● アクションスピードの決定 複数回行動用
  249.   #--------------------------------------------------------------------------
  250.   def make_action_speed2(adj)
  251.     @adj_speed = @current_action.speed if @adj_speed == nil
  252.     @adj_speed = @adj_speed * adj / 100
  253.   end
  254.   #--------------------------------------------------------------------------
  255.   # ● コラプスの実行
  256.   #--------------------------------------------------------------------------
  257.   def perform_collapse
  258.     @force_action = ["N01collapse"] if $game_temp.in_battle and dead?
  259.   end
  260.   #--------------------------------------------------------------------------
  261.   # ● 初期配置の取得
  262.   #--------------------------------------------------------------------------
  263.   def base_position
  264.     return if self.index == nil
  265.     @base_position_x = self.screen_x + self.position_plus[0]
  266.     @base_position_y = self.screen_y + self.position_plus[1]
  267.     # バックアタック時はX軸を逆に
  268.     @base_position_x = 640 - self.screen_x - self.position_plus[0] if $back_attack
  269.   end
  270.   #--------------------------------------------------------------------------
  271.   # ● バトル画面 X 座標の取得
  272.   #--------------------------------------------------------------------------
  273.   def position_x
  274.     return @base_position_x - @move_x
  275.   end
  276.   #--------------------------------------------------------------------------
  277.   # ● バトル画面 Y 座標の取得
  278.   #--------------------------------------------------------------------------
  279.   def position_y
  280.     return @base_position_y + @move_y + @jump
  281.   end
  282.   #--------------------------------------------------------------------------
  283.   # ● バトル画面 Z 座標の取得
  284.   #--------------------------------------------------------------------------
  285.   def position_z
  286.     return position_y + @move_z - @jump + 200
  287.   end
  288. end
  289. #==============================================================================
  290. # ■ Arrow_Enemy
  291. #------------------------------------------------------------------------------
  292. #  エネミーを選択させるためのアローカーソルです。
  293. #==============================================================================
  294. class Arrow_Enemy < Arrow_Base
  295.   #--------------------------------------------------------------------------
  296.   # ● フレーム更新
  297.   #--------------------------------------------------------------------------
  298.   def update
  299.     super
  300.     # 存在しないエネミーを指していたら飛ばす
  301.     $game_troop.enemies.size.times do
  302.       break if self.enemy.exist?
  303.       @index += 1
  304.       @index %= $game_troop.enemies.size
  305.     end
  306.     # カーソル右
  307.     next_cursor if Input.repeat?(Input::LEFT) && !$back_attack
  308.     back_cursor if Input.repeat?(Input::LEFT) && $back_attack
  309.     # カーソル左
  310.     back_cursor if Input.repeat?(Input::RIGHT) && !$back_attack
  311.     next_cursor if Input.repeat?(Input::RIGHT) && $back_attack
  312.     # カーソル下
  313.     next_cursor if Input.repeat?(Input::UP)
  314.     # カーソル上
  315.     back_cursor if Input.repeat?(Input::DOWN)
  316.     # スプライトの座標を設定
  317.     if self.enemy != nil
  318.       self.x = self.enemy.position_x + N01::ENEMY_CURSOR[0]
  319.       self.y = self.enemy.position_y + N01::ENEMY_CURSOR[1]
  320.     end
  321.   end
  322.   #--------------------------------------------------------------------------
  323.   # ● カーソルを次に進める
  324.   #--------------------------------------------------------------------------
  325.   def next_cursor
  326.     $game_system.se_play($data_system.cursor_se)
  327.     $game_troop.enemies.size.times do
  328.       @index += 1
  329.       @index %= $game_troop.enemies.size
  330.       break if self.enemy.exist?
  331.     end
  332.   end  
  333.   #--------------------------------------------------------------------------
  334.   # ● カーソルを前に戻す
  335.   #--------------------------------------------------------------------------
  336.   def back_cursor
  337.     $game_system.se_play($data_system.cursor_se)
  338.     $game_troop.enemies.size.times do
  339.       @index += $game_troop.enemies.size - 1
  340.       @index %= $game_troop.enemies.size
  341.       break if self.enemy.exist?
  342.     end
  343.   end
  344. end
  345. #==============================================================================
  346. # ■ Arrow_Actor
  347. #------------------------------------------------------------------------------
  348. #  アクターを選択させるためのアローカーソルです。
  349. #==============================================================================
  350. class Arrow_Actor < Arrow_Base
  351.   #--------------------------------------------------------------------------
  352.   # ● フレーム更新
  353.   #--------------------------------------------------------------------------
  354.   def update
  355.     super
  356.     # カーソル右
  357.     next_cursor if Input.repeat?(Input::RIGHT) && !$back_attack
  358.     back_cursor if Input.repeat?(Input::RIGHT) && $back_attack
  359.     # カーソル左
  360.     back_cursor if Input.repeat?(Input::LEFT) && !$back_attack
  361.     next_cursor if Input.repeat?(Input::LEFT) && $back_attack
  362.     # カーソル下
  363.     next_cursor if Input.repeat?(Input::DOWN)
  364.     # カーソル上
  365.     back_cursor if Input.repeat?(Input::UP)
  366.     # スプライトの座標を設定
  367.     if self.actor != nil
  368.       self.x = self.actor.position_x + N01::ACTOR_CURSOR[0]
  369.       self.y = self.actor.position_y + N01::ACTOR_CURSOR[1]
  370.     end
  371.   end
  372.   #--------------------------------------------------------------------------
  373.   # ● カーソルを次に進める
  374.   #--------------------------------------------------------------------------
  375.   def next_cursor
  376.     $game_system.se_play($data_system.cursor_se)
  377.     @index += 1
  378.     @index %= $game_party.actors.size
  379.   end  
  380.   #--------------------------------------------------------------------------
  381.   # ● カーソルを前に戻す
  382.   #--------------------------------------------------------------------------
  383.   def back_cursor
  384.     $game_system.se_play($data_system.cursor_se)
  385.     @index += $game_party.actors.size - 1
  386.     @index %= $game_party.actors.size
  387.   end
  388. end
  389. #==============================================================================
  390. # ■ Window_Base
  391. #------------------------------------------------------------------------------
  392. #  ゲーム中のすべてのウィンドウのスーパークラスです。
  393. #==============================================================================

  394. class Window_Base < Window
  395.   #--------------------------------------------------------------------------
  396.   # ● ステートの描画  ※再定義
  397.   #--------------------------------------------------------------------------
  398.   def draw_actor_state(actor, x, y, width = 120)
  399.     text = make_battler_state_text(actor, width, true)
  400.     self.contents.font.color = actor.dead? ? knockout_color : normal_color
  401.     self.contents.draw_text(x, y, width, 32, text)
  402.   end
  403. end

  404. #==============================================================================
  405. # ■ Window_Skill
  406. #------------------------------------------------------------------------------
  407. #  スキル画面、バトル画面で、使用できるスキルの一覧を表示するウィンドウです。
  408. #==============================================================================

  409. class Window_Skill < Window_Selectable
  410.   #--------------------------------------------------------------------------
  411.   # ● 項目の描画  ※再定義
  412.   #--------------------------------------------------------------------------
  413.   def draw_item(index)
  414.     skill = @data[index]
  415.     if @actor.skill_can_use?(skill.id)
  416.       self.contents.font.color = normal_color
  417.     else
  418.       self.contents.font.color = disabled_color
  419.     end
  420.     x = 4 + index % 2 * (288 + 32)
  421.     y = index / 2 * 32
  422.     rect = Rect.new(x, y, self.width / @column_max - 32, 32)
  423.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  424.     bitmap = RPG::Cache.icon(skill.icon_name)
  425.     opacity = self.contents.font.color == normal_color ? 255 : 128
  426.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  427.     self.contents.draw_text(x + 28, y, 204, 32, skill.name, 0)
  428.     cost = @actor.make_skill_cost(@actor, skill)
  429.     self.contents.draw_text(x + 232, y, 48, 32, cost.to_s, 2)
  430.   end
  431. end
  432. #==============================================================================
  433. # ■ Window_Base
  434. #------------------------------------------------------------------------------
  435. #  スプライトモジュールの再定義
  436. #==============================================================================
  437. module RPG
  438.   class Sprite < ::Sprite
  439.     # エフェクト処理を無効化
  440.     def whiten
  441.     end
  442.     def appear
  443.     end
  444.     def escape
  445.     end
  446.     def collapse
  447.     end
  448.     # SPダメージ用の文字描画
  449.     def damage(value, critical)
  450.       dispose_damage
  451.       if value.is_a?(Numeric)
  452.         damage_string = value.abs.to_s
  453.       else
  454.         damage_string = value.to_s
  455.       end
  456.       bitmap = Bitmap.new(160, 48)
  457.       bitmap.font.name = "Arial Black"
  458.       bitmap.font.size = 32
  459.       bitmap.font.color.set(0, 0, 0)
  460.       bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
  461.       bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
  462.       bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
  463.       bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
  464.       if value.is_a?(Numeric) and value < 0
  465.         bitmap.font.color.set(176, 255, 144)
  466.       else
  467.         bitmap.font.color.set(255, 255, 255)
  468.       end
  469.       bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
  470.       if critical == "sp_damage"
  471.         text = "SP DAMAGE"
  472.         text = "SP RECOVER" if value.is_a?(Numeric) and value < 0
  473.         bitmap.font.size = 20
  474.         bitmap.font.color.set(0, 0, 0)
  475.         bitmap.draw_text(-1, -1, 160, 20, text, 1)
  476.         bitmap.draw_text(+1, -1, 160, 20, text, 1)
  477.         bitmap.draw_text(-1, +1, 160, 20, text, 1)
  478.         bitmap.draw_text(+1, +1, 160, 20, text, 1)
  479.         bitmap.font.color.set(255, 255, 255)
  480.         bitmap.font.color.set(176, 255, 144) if value.is_a?(Numeric) and value < 0
  481.         bitmap.draw_text(0, 0, 160, 20, text, 1)
  482.       elsif critical
  483.         bitmap.font.size = 20
  484.         bitmap.font.color.set(0, 0, 0)
  485.         bitmap.draw_text(-1, -1, 160, 20, "CRITICAL", 1)
  486.         bitmap.draw_text(+1, -1, 160, 20, "CRITICAL", 1)
  487.         bitmap.draw_text(-1, +1, 160, 20, "CRITICAL", 1)
  488.         bitmap.draw_text(+1, +1, 160, 20, "CRITICAL", 1)
  489.         bitmap.font.color.set(255, 255, 255)
  490.         bitmap.draw_text(0, 0, 160, 20, "CRITICAL", 1)
  491.       end
  492.       @_damage_sprite = ::Sprite.new(self.viewport)
  493.       @_damage_sprite.bitmap = bitmap
  494.       @_damage_sprite.ox = 80
  495.       @_damage_sprite.oy = 20
  496.       @_damage_sprite.x = self.x
  497.       @_damage_sprite.y = self.y - self.oy / 2
  498.       @_damage_sprite.z = 3000
  499.       @_damage_duration = 40
  500.     end
  501.     # アニメ反転処理
  502.     def dispose_animation
  503.       if @_animation_sprites != nil
  504.         sprite = @_animation_sprites[0]
  505.         if sprite != nil
  506.           @@_reference_count[sprite.bitmap] -= 1
  507.           if @@_reference_count[sprite.bitmap] == 0
  508.             sprite.bitmap.dispose
  509.           end
  510.         end
  511.         for sprite in @_animation_sprites
  512.           sprite.dispose
  513.         end
  514.         @_animation_sprites = nil
  515.         @_animation = nil
  516.       end
  517.       @mirror = false
  518.     end
  519.     def animation_mirror
  520.       @mirror = true
  521.     end
  522.     def animation_set_sprites(sprites, cell_data, position)
  523.       for i in 0..15
  524.         sprite = sprites[i]
  525.         pattern = cell_data[i, 0]
  526.         if sprite == nil or pattern == nil or pattern == -1
  527.           sprite.visible = false if sprite != nil
  528.           next
  529.         end
  530.         sprite.visible = true
  531.         sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192)
  532.         if position == 3
  533.           if self.viewport != nil
  534.             sprite.x = self.viewport.rect.width / 2
  535.             sprite.y = self.viewport.rect.height - 160
  536.           else
  537.             sprite.x = 320
  538.             sprite.y = 240
  539.           end
  540.         else
  541.           sprite.x = self.x - self.ox + self.src_rect.width / 2
  542.           sprite.y = self.y - self.oy + self.src_rect.height / 2
  543.           sprite.y -= self.src_rect.height / 4 if position == 0
  544.           sprite.y += self.src_rect.height / 4 if position == 2
  545.         end
  546.         sprite.x += cell_data[i, 1]
  547.         sprite.y += cell_data[i, 2]
  548.         sprite.z = 2000
  549.         sprite.ox = 96
  550.         sprite.oy = 96
  551.         sprite.zoom_x = cell_data[i, 3] / 100.0
  552.         sprite.zoom_y = cell_data[i, 3] / 100.0
  553.         sprite.angle = cell_data[i, 4]
  554.         sprite.mirror = (cell_data[i, 5] == 1)
  555.         if @mirror
  556.           if sprite.mirror
  557.             sprite.mirror = false
  558.           else  
  559.             sprite.mirror = true
  560.           end
  561.         end
  562.         sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
  563.         sprite.blend_type = cell_data[i, 7]
  564.       end
  565.     end
  566.   end  
  567. end
  568.   
复制代码




全部3个脚本贴完了,擦汗....
回复 支持 反对

使用道具 举报

Lv1.梦旅人

蚂蚁卡卡

梦石
0
星屑
116
在线时间
66 小时
注册时间
2007-12-16
帖子
3081
9
发表于 2009-2-13 08:04:45 | 只看该作者
本论坛可上传rar、txt文件
也可上传工程压缩包

另外全动画好像就是我给的链接 -。-
《隋唐乱》完整解密版点击进入
米兰,让我怎么说离开……

曾经我也是一个有志青年,直到我膝盖中了一箭……

《隋唐乱》博客地址
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
7 小时
注册时间
2008-12-25
帖子
104
10
 楼主| 发表于 2009-2-13 18:05:52 | 只看该作者
是吗?我比较笨,看见就一个脚本,本能的就以为不是了,狂汗,
请允许偶仔细研究下....
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-17 23:17

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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