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

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

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

■22709 / inTopicNo.1)  武器の地形適応の変更について
  
□投稿者/ Shun -(2012/10/13(Sat) 15:15:01) [ID:fB0PVJCO]

    以下のような地形適応を変化させるアイテムを作成しています。

    河童の作業着
    河童の作業着, かっぱのさぎょうぎ, 汎用, アイテム
    特殊能力
    水中移動
    パイロット地形適応変更=0 0 3 0
    0, 0, 0, 0, 0
    *地形適応『水』をAにし、移動タイプに水が追加される。
    *武器の地形適応『水』がB以下の場合、Aとして計算される。

    例えば、上記のアイテムの設定では、
    パイロットとユニットの地形適応『水』をAにすることができますが、
    武器の地形適応『水』はAにできません。
    過去の同様の質問内容を調べたところ、
    地形適応を変更させた同名の武器をアイテムで付け替える
    という内容の方法があったのですが、
    個別のユニットごとにそれをやるのはデータが膨大になりすぎるので、
    出来れば別の方法で武器の地形適応を変化させたいのですが、
    現在のSRCの仕様でそれは可能でしょうか?
    あるいは、表記上の変化(BをAに変化させるなど)が無理ならば、
    ダメージの計算式を変化させるなどで
    擬似的に再現する方法があれば教えていただきたいと思います。


引用返信/返信 削除キー/
■22710 / inTopicNo.2)  Re[1]: 武器の地形適応の変更について
□投稿者/ Shun -(2012/10/22(Mon) 23:42:53) [ID:fB0PVJCO]
    前回の質問についての補足です。
    武器の地形適応の変化に関してですが、バトルコンフィグにおいて、
    武器の地形適応にサブルーチンで地形適応の補正値を変化させることで
    地形適応の変化を擬似的に再現させる方法を考えました。

    # アイテム

    河童の作業着
    河童の作業着, かっぱのさぎょうぎ, 汎用, アイテム
    特殊能力
    水中移動
    パイロット地形適応変更=0 0 3 0
    0, 0, 0, 0, 0
    *地形適応『水』をAにし、移動タイプに水が追加される。
    *武器の地形適応『水』がB以下の場合、Aとして計算される。

    # バトルコンフィグ

    攻撃地形補正
    攻撃値 * (地形適応 + Call(武器地形適応変更, 攻撃側ユニットID, 武器番号))

    # サブルーチン

    武器地形適応変更:

    Local Re_Terrain = 0

    If IsEquiped(PilotID(対象ユニットID),河童の作業着) = 1 Then
    If Mid(Info(ユニット,Args(1),武器,Args(2),"地形適応"), 3, 1) = B Then
    Re_Terrain = Re_Terrain + 0.1
    ElseIf Mid(Info(ユニット,Args(1),武器,Args(2),"地形適応"), 3, 1) = C Then
    Re_Terrain = Re_Terrain + 0.2
    ElseIf Mid(Info(ユニット,Args(1),武器,Args(2),"地形適応"), 3, 1) = D Then
    Re_Terrain = Re_Terrain + 0.3
    EndIf
    EndIf

    Return Re_Terrain

    #####

    上記のサブルーチンでは、河童の作業着を装備した時に
    攻撃側の使用した武器の水の地形適応に合わせて数値(Re_Terrain)を足して、
    その合計値が1.0(地形適応Aに相当)になるようにしています。

    例:水適応がBの武器を使用した場合
    バトルコンフィグの攻撃地形補正の地形適応の数値は0.9となり、
    サブルーチンは「If Mid(Info(ユニット,Args(1),武器,Args(2),"地形適応"), 3, 1) = B Then」が取得され、
    その結果の0.1が武器地形適応の0.9に足されて1.0になる。

    理論上はこうなるはずなのですが、
    上記の記述だとサブルーチンの数値が足されておらず、計算式が変化しません。
    武器の地形適応の関数の取得は正しく記せてあると思うのですが、
    もし、問題点があれば教えていただきたいと思います。
引用返信/返信 削除キー/
■22711 / inTopicNo.3)  Re[2]: 武器の地形適応の変更について
□投稿者/ RST -(2012/10/24(Wed) 21:56:56) [ID:vpBme9gz]
    2012/10/24(Wed) 22:06:05 編集(投稿者)

    RSTです。

    こちらでも提示されているデータをコピーして、
    河童の作業着を装備したユニットで攻撃をしてみましたが、水適応がB以下の武器によるダメージが変更した補正分だけ増加していました。

    データの書式自体は正しいようなので、

    ・Battle.txt のファイル名が間違っている
    ・Battle.txt が Data\System 以外のフォルダに置かれている
    ・「河童の作業着」を装備させたつもりが実際には装備していない
     (イベントファイルの中身を書き換えた後、リスタートやクイックセーブのファイルから再開している等)

    くらいしか、計算式が変化しない原因が思い浮かばないです…。


    ただ、計算式が変化しないこととは直接は関係ないと思いますが、
    提示されているサブルーチンを試してみて、気になった点がありました。

    > 武器地形適応変更:
    >
    > Local Re_Terrain = 0
    >
    > If IsEquiped(PilotID(対象ユニットID),河童の作業着) = 1 Then
    > If Mid(Info(ユニット,Args(1),武器,Args(2),"地形適応"), 3, 1) = B Then
    > Re_Terrain = Re_Terrain + 0.1
    > ElseIf Mid(Info(ユニット,Args(1),武器,Args(2),"地形適応"), 3, 1) = C Then
    > Re_Terrain = Re_Terrain + 0.2
    > ElseIf Mid(Info(ユニット,Args(1),武器,Args(2),"地形適応"), 3, 1) = D Then
    > Re_Terrain = Re_Terrain + 0.3
    > EndIf
    > EndIf
    >
    > Return Re_Terrain

    ・上の処理だと、相手が水以外の地形にいてもダメージが増加してしまうので、
     Ifコマンドで「防御側ユニットが水中にいる場合」という条件も加えたほうが良いと思います。
     (ユニットが現在いる位置については、Area関数で調べられます)

     また、水上にいる相手に対しては「陸と水のうち、どちらか高いほう」の適応が用いられるようなので、
     シナリオに水上移動ができるユニットが登場する場合は、その点も考慮してやる必要がありそうです。


    ・攻撃する際の「地形適応」は「ユニットの適応と武器の適応のどちらか低いほう」が用いられる(※)ので、
     攻撃側ユニットが現在いる地形の適応がB以下の場合は、適応を上昇させる処理を飛ばしたほうが良いと思います。

     ※例えば、空適応がBのユニットが空中から水中に攻撃をしかけた場合、武器の水適応がAであっても、
      地形適応は「B」として計算されるということです。


    この2点についても確認してみてはどうでしょうか。
引用返信/返信 削除キー/
■22712 / inTopicNo.4)  Re[2]: 武器の地形適応の変更について
□投稿者/ 中箱 -(2012/10/25(Thu) 00:27:51) [ID:ewg8I7R8]
    ># バトルコンフィグ
    >攻撃地形補正
    >攻撃値 * (地形適応 + Call(武器地形適応変更, 攻撃側ユニットID, 武器番号))

    ># サブルーチン
    >武器地形適応変更:

    >Local Re_Terrain = 0

    >If IsEquiped(PilotID(対象ユニットID),河童の作業着) = 1 Then
    > If Mid(Info(ユニット,Args(1),武器,Args(2),"地形適応"), 3, 1) = B Then
    (中略)
    > EndIf
    >EndIf

    >Return Re_Terrain


    >上記の記述だとサブルーチンの数値が足されておらず、計算式が変化しません。



    見ただけで動作確認していないので、的外れでしたらすいませんが

    IsEquiped関数のユニット指定に Args(1)(=攻撃側ユニットID) ではなくて 対象ユニットID を使っているところが怪しい気がします。
引用返信/返信 削除キー/
■22713 / inTopicNo.5)  Re[3]: 武器の地形適応の変更について
□投稿者/ Shun -(2012/10/25(Thu) 08:29:08) [ID:fB0PVJCO]
    計算式が変化しない原因ですが、「武器地形適応変更」のラベルに関して、
    中身が白紙の状態の同名のラベルをもう一つ記していて、
    それを消し忘れていたのが原因でした。

    #####

    武器地形適応変更:
    (こちらは何も書かれていない)
    Return Re_Terrain

    # 何も書かれてない上記のラベルを読み込んだため、
    # 下記のラベルを読み込まなくなった。

    武器地形適応変更:
    Local Re_Terrain = 0
    (中略)
    Return Re_Terrain

    #####

    ちなみに、中箱さんが指摘されたIsEquiped関数のユニット指定については、
    Args(1)(=攻撃側ユニットID)と対象ユニットID、どちらでも正常に起動しました。
    一応、バグ防止の為にArgs(1)で修正をしておきます。

    とりあえず計算式自体に関しては正常に機能しました。
    そして、ご指摘の通りサブルーチンにも問題があったようです。
    RSTさんが指摘された2つの項目の内、二番目の
    『攻撃する際の「地形適応」は「ユニットの適応と武器の適応のどちらか低いほう」が用いられる』に関しては、
    「地形適応命中率修正」のオプションを使っているので、
    攻撃力は武器の地形適応のみから計算される状態となり、その点は問題ありませんでした。
    問題は一番目の『相手が水以外の地形にいてもダメージが増加してしまう』という点で、
    下記の通りにバトルコンフィグとサブルーチンを修正したのですが、
    そうすると補正値が加算されないようなのです。

    # バトルコンフィグ

    攻撃地形補正
    攻撃値 * (地形適応 + Call(武器地形適応変更, 攻撃側ユニットID, 防御側ユニットID, 武器番号))

    # サブルーチン

    武器地形適応変更:

    Local Re_Terrain = 0

    If IsEquiped(PilotID(Args(1)), 河童の作業着) = 1 Then
    If Mid(Info(ユニット, Args(1), 武器, Args(3),"地形適応"), 3, 1) = B Then
    If Area(Args(2)) = 水中 Then
    Re_Terrain = Re_Terrain + 0.1
    EndIf
    ElseIf Mid(Info(ユニット, Args(1), 武器, Args(3),"地形適応"), 3, 1) = C Then
    If Area(Args(2)) = 水中 Then
    Re_Terrain = Re_Terrain + 0.2
    EndIf
    ElseIf Mid(Info(ユニット, Args(1), 武器, Args(3),"地形適応"), 3, 1) = D Then
    If Area(Args(2)) = 水中 Then
    Re_Terrain = Re_Terrain + 0.3
    EndIf
    EndIf
    EndIf

    Return Re_Terrain

    #####

    具体的な修正点ですが、
    バトルコンフィグは、サブルーチンの引数に防御側ユニットIDを追加し、
    それをArgs(2)に、武器番号はArgs(3)に対応させました。
    サブルーチン内では、「If Area(Args(2)) = 水中 Then」の形で
    「防御側ユニットが水中にいる場合」を取得させたのですが、
    これだと補正値が加算されない状態となってしまうようです。
    水中にいるかどうかのIfコマンドを外すと、
    これまで通り相手の居る地形に関係なく攻撃側の武器の水適応に応じてダメージが変化するので、
    もしかしたら条件式の記し方に問題があるのかも知れません。
    上記の修正後のバトルコンフィグとサブルーチンを見て、問題点があればご指摘をお願いします。
引用返信/返信 削除キー/
■22714 / inTopicNo.6)  Re[4]: 武器の地形適応の変更について
□投稿者/ 中箱 -(2012/10/26(Fri) 18:27:03) [ID:ewg8I7R8]
    >攻撃地形補正
    >攻撃値 * (地形適応 + Call(武器地形適応変更, 攻撃側ユニットID, 防御側ユニットID, 武器番号))


    バトルコンフィグ変数「防御側ユニットID」ですが、
    PaintStringやTalkなどで変数の中身を確認してみると分かりますが、攻撃地形補正の計算式中では使えないようです。

    ヘルプには
    >防御側ユニットID 防御側ユニットのユニットIDに置換されます。
    >ただし、計算処理の都合上攻撃補正の計算式では置換されません。
    としか書かれていませんので本体のバグかヘルプの記述漏れかは分かりませんが
    とりあえず動かないのはこのせいかと。
引用返信/返信 削除キー/
■22715 / inTopicNo.7)  Re[5]: 武器の地形適応の変更について
□投稿者/ Shun -(2012/10/26(Fri) 22:45:53) [ID:fB0PVJCO]
    攻撃地形補正のコンフィグでは防御側ユニットIDが使えないのですね。
    逆に言えば、攻撃関連以外だったら使えるということなので、
    まず攻撃地形補正のコンフィグはデフォルトに戻し、
    ダメージのコンフィグにサブルーチンを加えました。

    攻撃地形補正
    攻撃値 * 地形適応

    ダメージ
    (攻撃側補正 * Call(武器地形適応変更, 攻撃側ユニットID, 防御側ユニットID, 武器番号) - 防御側補正) * 地形適応

    そして、サブルーチンを以下のように修正しました。

    武器地形適応変更:

    Local Re_Terrain = 1

    If IsEquiped(PilotID(Args(1)), 河童の作業着) = 1 Then
    If Area(Args(2)) = 水中 Then
    If Mid(Info(ユニット, Args(1), 武器, Args(3),"地形適応"), 3, 1) = B Then
    Re_Terrain = Re_Terrain / 0.9
    ElseIf Mid(Info(ユニット, Args(1), 武器, Args(3),"地形適応"), 3, 1) = C Then
    Re_Terrain = Re_Terrain / 0.8
    ElseIf Mid(Info(ユニット, Args(1), 武器, Args(3),"地形適応"), 3, 1) = D Then
    Re_Terrain = Re_Terrain / 0.7
    EndIf
    EndIf
    EndIf

    Return Re_Terrain

    バトルコンフィグ全体の計算式としては、
    ((攻撃値 * 地形適応 / 武器地形適応変更ルーチン) - 防御側補正) * 地形適応
    の計算式になるようにし、
    地形適応の数値と同じ数値の分だけサブルーチン内で割り算する形で
    地形適応 / 武器地形適応変更ルーチン = 1となるようにし、
    武器の地形適応がAの時の数値になるように調整しました。
    相手の地形の取得に関しても前回の記述で問題なかったようです。

    ひとまず水の武器地形適応の上昇は一段落ついたので、
    これを流用して空や陸等の他の地形にも対応したアイテムも作成できそうです。
    なお、RSTさんからの指摘にあった水上にいる相手への対処は、
    陸の武器地形適応上昇アイテム作成の際にサブルーチンのArea関数で
    地上と水上の両方を取得できる様にする事で対処することにします。
    長くなりましたがRSTさん、中箱さん、
    様々なアドバイスをいただきありがとうございました。

解決済み!
引用返信/返信 削除キー/



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

このトピックに書きこむ

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

Pass/

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

- Child Tree -
- Antispam Version -