SRC質問掲示板Mk2
(現在 過去ログ115 を表示中)

HOME HELP 新規作成 新着記事 トピック表示 検索 掲示板新着情報RSS配信新着情報 過去ログ

[ 最新記事及び返信フォームをトピックトップへ ]

■20368 / inTopicNo.1)  武器劣化について
  
□投稿者/ ZANI -(2007/10/14(Sun) 11:29:39) [ID:anlaQxHq]
    No20171,20177,20181であったjam武器劣化インクルードですが
    私もFE風シナリオを作っているので是非とも実装したいです
    ですが記事を見てもどのようにすれば実装できるかもわからないしヘルプを見てもどうも関数がよく理解できません。
    どうやったら実装できるかと言う手順を例を出しながら教えていただきたいです。

引用返信/返信 削除キー/
■20440 / inTopicNo.2)  Re[1]: 武器劣化について
□投稿者/ jam -(2007/11/06(Tue) 11:43:34) [ID:cYSkfGMh]
    どうも。
    ちょっと複雑ですが、実際に作りました武器劣化インクルードを公開します。
    細かい部分は、ご自身でいろいろと調整なさってください。

    なお、他の皆様も、更に動作が向上させられる案をお持ちでしたならば、ぜひともご意見、ご教示を願えればと思います。



    武器ID整理:
    Local i j k 使用武器ID 装備判定 存在判定 武器ID E判定

    ForEach 味方
     For i = 1 To CountItem(対象パイロット)
      Switch Info(アイテム,Item(対象パイロット,i),装備個所)
       Case 主武器
        Set 使用武器ID[対象パイロット,1] ItemID(対象パイロット,i)
        Set 装備判定[対象パイロット,1]
       Case 副武器
        Set 使用武器ID[対象パイロット,2] ItemID(対象パイロット,i)
        Set 装備判定[対象パイロット,2]

       ●装備箇所で武器を判定しています。ですので、アイテムとして武器を設定し、更に装備箇所をそれぞれに指定していることが必須となります。
        もちろん、種類を増やすのであればその分Caseを増やし、IDの序数を足していくことも忘れてはなりません。●

      Endsw
     Next
     Set i 0

     ↓ ★上で指定した装備箇所の種類の数だけ、ここでルーチン処理することになります。
        コマンドの内容は、もしそれを装備していて、その武器に関する磨耗度の変数が定義されていない場合、新たに武器の磨耗度を変数として作るというものです。
        上では「主武器」と「副武器」の二種類ですので、Forコマンドで二回行っています。

     For i = 1 To 2
      If 装備判定[対象パイロット,i] = 1 And IsVarDefined(武器磨耗度["$(使用武器ID[対象パイロット,i])"]) = 0 Then
       Set 武器磨耗度["$(使用武器ID[対象パイロット,i])"] 0
      EndIf
     Next
     Set i 0
    Next
    Set i 0

     ↓ ■これは誰も装備していない武器について、上と同じ判定をしている箇所です。

    For i = 1 To CountItem(未装備)
     Switch Info(アイテム,Item(未装備,i),装備個所)
      Case 主武器
       Set 使用武器ID[未装備,i,1] ItemID(未装備,i)
       Set 装備判定[未装備,i,1]
      Case 副武器
       Set 使用武器ID[未装備,i,2] ItemID(未装備,i)
       Set 装備判定[未装備,i,2]
     Endsw
    Next
    Set i 0

    For i = 1 To CountItem(未装備)
     For j = 1 To 2
      If 装備判定[未装備,i,j] = 1 And IsVarDefined(武器磨耗度["$(使用武器ID[未装備,i,j])"]) = 0 Then
       Set 武器磨耗度["$(使用武器ID[未装備,i,j])"] 0
      EndIf
     Next
    Next
    Set i 0
    Set j 0

    ▼上の二つの作業で、全てのアイテムとしての武器に武器磨耗度が変数として割り当てられます。

    ▲ ↓ こっちはややこしいのですが、アイテム武器が無くなった時、余計な変数を除去するコマンドです。

    ForEach 武器ID In 武器磨耗度
     Set 存在判定[i] 武器ID
     Incr i
    Next
    Set i 0

    For i = 0 To Count(武器磨耗度)
     ForEach 味方 (出撃 待機 格納 離脱)
      For j = 1 To CountItem(対象パイロット)
       If Info(アイテム,Item(対象パイロット,i),装備個所) Not 非表示 Then
        If 存在判定[i] = ItemID(対象パイロット,j) Then
         Set E判定 1
         Break
        Else
         Set E判定 0
        EndIf
       EndIf
      Next

      If E判定 = 1 Then
       Break
      EndIf
     Next

     If E判定 = 0 Then
      For k = 1 To CountItem(未装備)
       If Info(アイテム,Item(対象パイロット,i),装備個所) Not 非表示 Then
        If 存在判定[i] = ItemID(未装備,k) Then
         Set E判定 1
         Break
        Else
         Set E判定 0
        EndIf
       EndIf
      Next
     EndIf

     If E判定 = 0 Then
      UnSet 武器磨耗度["$(存在判定[i])"]
     EndIf
    Next

    Return

    ◆以上で、下準備が完了します。次に、以下のように実際のバトルの様々な状況において、武器磨耗度が加算されるように設定します。

    *攻撃 味方 全:
    Set HP判定[相手ユニット] HP(相手ユニット)
    Exit

    *攻撃後 味方 全:
    If (HP判定[相手ユニット] - HP(相手ユニット)) = 0 Then
     UnSet HP判定
     Exit
    EndIf

    Call 武器劣化共通処理

    UnSet HP判定
    UnSet 使用武器判定
    UnSet 使用武器ID
    Exit

    *破壊 全:
    If Party(相手パイロット) = 中立 or Party(相手パイロット) = 敵 Then
     UnSet HP判定
     Exit
    EndIf

    Call 武器劣化共通処理

    UnSet HP判定
    UnSet 使用武器判定
    UnSet 使用武器ID
    Exit

    ★こうしておいて、本インクルードのキモとなる「武器劣化共通処理」が以下です

    武器劣化共通処理:
    Local i

    Switch 対象ユニット使用武器
     Case "" 防御 回避 応戦
      UnSet HP判定
      Exit

     Case Else
      Set 使用武器判定 対象ユニット使用武器
    Endsw

    ▲注:例えば「連続切り」などのように、武器アイテム名と異なる技でも武器を劣化させたい、という場合は、

    例:Case 連続切り
       If IsEquiped(対象パイロット,鉄の剣) = 1 Then
        Set 使用武器判定 鉄の剣
       ElseIf IsEquiped(対象パイロット,鋼の剣) = 1 Then
        Set 使用武器判定 鋼の剣
       EndIf

    ●などのように、「使用武器判定」変数にどうにかして、そのキャラが今装備し、使用した武器名を入れるよう工夫する必要があります。

    Set i 0
    For i = 1 To CountItem(対象パイロット)
     If Item(対象パイロット,i) = 使用武器判定 Then
      Set 使用武器ID ItemID(対象パイロット,i)
     EndIf
    Next

    Incr 武器磨耗度["$(使用武器ID)"] 1

    If 武器磨耗度["$(使用武器ID)"] >= Info(アイテム,使用武器判定,特殊能力レベル,使用耐久) Then
     Call 武器破壊処理
    EndIf

    Return

    ★ ↑ いい忘れましたが、アイテムの特殊能力に「使用耐久」を指定しておいてください。例えば「鉄の剣」ならば「使用耐久Lv50=非表示」といった感じです。

    ■そして、武器破壊処理 ↓

    武器破壊処理:
    RemoveItem 対象ユニット 使用武器判定
    Unset 武器磨耗度["$(使用武器ID)"]

    Talk
    $(NickName(対象パイロット))が所持していた$(使用武器判定)は、壊れてしまった。
    End

    Return


    以上です。
    偉そうにいってますが、素人が組んだコマンドですので、なかなか複雑になってしまっています。

    まぁ、参考になさってください。
引用返信/返信 削除キー/
■20441 / inTopicNo.3)  Re[2]: 武器劣化について
□投稿者/ 中箱 -(2007/11/06(Tue) 19:51:31) [ID:8NrUE61r]
    2007/11/06(Tue) 23:06:42 編集(投稿者)

    #23時ごろ、アップしたファイルに明らかなミスを見つけたので修正しました

    どうも、FEは昔にSFC紋章を齧ったぐらいの中箱と申します。


    えー、主にjamさんの
    >他の皆様も、更に動作が向上させられる案をお持ちでしたならば、ぜひともご意見、ご教示を願えればと思います。
    を真に受けてのレスなので、ZANIさんの質問の本筋からは少し外れているかもしれません。



    >ZANIさん

    jamさんが提示されたものに加えて、そのインクルードを使用する際にシナリオ側で必要そうな処置としては、


    ・シナリオ開始時に
    Global変数として "武器磨耗度"を設定しておく。


    ・サブルーチン「武器ID整理」は、武器アイテムが増減した場合にその都度必ず実行する。(特に、増えた時は必ず?)
    (耐久度が尽きて壊れた場合は、提示されているものに含まれていますから、それ以外で増減した時)
    具体的には、
     ・マップ中でアイテムを入手した直後
     ・アイテムを自主的に捨てた直後
     ・ショップ(あれば)で買った直後と売った直後(売り買いの切り替え時?)
    あたりでしょうか。


    また、インクルードを見た限り

     1.攻撃が当たらなかった場合は耐久度が減らない
     2.バリアで防がれるなど、当たってもダメージを与えられなかった場合も、耐久度が減らない
     3.一人が同じ名前の武器を二つ以上持っていた場合、それらのうちのどれを使うかは選べない
     4.敵がHP吸収などして戦闘中に回復した場合、こちらの攻撃が当たっていなくとも耐久度が減ってしまう。
     5.残り耐久度を確認する方法が、追加で必要

    という仕様になっているようです。(3,4以外は割合楽に対応可能でしょう)




    >jamさん
    上に書いたもので、私の誤解がありましたらすいません&ZANIさんへ補足訂正を是非。

    さて、お言葉に甘えてためしにインクルードを弄らせていただいたのですが、
    ここはZANIさんの質問のツリーですので、長々とここに張るのは控えて、
    http://www.geocities.jp/zecto_ver/SRC/FE-Like.txt
    に置いておきます

    実行した結果や必要な設定は基本的に変わっていないと思います。
    動作確認は甘いですが・・・



    的外れな部分がありましたらすいません。
    では。
引用返信/返信 削除キー/
■20442 / inTopicNo.4)  Re[3]: 武器劣化について
□投稿者/ jam -(2007/11/07(Wed) 13:56:30) [ID:cYSkfGMh]
    中箱様、御指摘、まことにありがとうございます。
    早速チェックし、改良に努めたいと思います。

    なお、一応この場はZANI様のご質問スレですので、詳しい話は新しくスレを立ち上げさせていただきましたので、そちらでしたいと思います。

    ただここで補足させていただくとすれば、

    5に関してですが、こんなインクルを作ってあります。


    -*ユニットコマンド 装備武器情報 味方:
    Local i 使用武器 使用武器ID 初期強度 磨耗度 劣化具合 T判定
    Set T判定[1] 0
    Set T判定[2] 0

    For i = 1 To CountItem(対象パイロット)
     Switch Info(アイテム,Item(対象パイロット,i),装備個所)
      Case 主武器
       Set 使用武器ID[1] ItemID(対象パイロット,i)
       Set 使用武器[1] Item(対象パイロット,i)
      Case 副武器
       Set 使用武器ID[2] ItemID(対象パイロット,i)
       Set 使用武器[2] Item(対象パイロット,i)
     Endsw
    Next

    If IsVarDefined(使用武器[1]) = 1 Then
     Set 初期強度[1] Info(アイテム,使用武器[1],特殊能力レベル,使用耐久)
     Set 磨耗度[1] 武器磨耗度["$(使用武器ID[1])"]
     Set 劣化具合[1] Round((100 * (磨耗度[1] / 初期強度[1])),1)
     Set T判定[1] 1
    EndIf
    If IsVarDefined(使用武器[2]) = 1 Then
     Set 初期強度[2] Info(アイテム,使用武器[2],特殊能力レベル,使用耐久)
     Set 磨耗度[2] 武器磨耗度["$(使用武器ID[2])"]
     Set 劣化具合[2] Round((100 * (磨耗度[2] / 初期強度[2])),1)
     Set T判定[2] 1
    EndIf

    Switch T判定[1]
     Case 0
      Switch T判定[2]
       Case 0
       Case 1
        Talk
        【$(使用武器[2])】の劣化度は、現在約<B><COLOR=Blue> $(劣化具合[2]) </COLOR></B>%です。
        End
      Endsw
     Case 1
      Switch T判定[2]
       Case 0
        Talk
        【$(使用武器[1])】の劣化度は現在、約<B><COLOR=Blue> $(劣化具合[1]) </COLOR></B>%です。
       End
       Case 1
        Talk
        【$(使用武器[1])】の劣化度は現在、約<B><COLOR=Blue> $(劣化具合[1]) </COLOR></B>%です。;【$(使用武器[2])】の劣化度は現在、約<B><COLOR=Blue> $(劣化具合[2]) </COLOR></B>%です。
        End
      Endsw
    Endsw

    Exit

    稚拙で大変申し訳ありませんが、こちらもよろしければ目を通していただけるとありがたいです。

    そして、ZANIさんも是非参考にしてくだされば幸いです。

    それでは。
引用返信/返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Pass/

HOME HELP 新規作成 新着記事 トピック表示 検索 掲示板新着情報RSS配信新着情報 過去ログ

- Child Tree -
- Antispam Version -