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

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

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

■17435 / inTopicNo.1)  battle.txt を使って・・・
  
□投稿者/ ナオ -(2005/09/26(Mon) 22:39:14) [ID:OWnuX2b4]
    始めまして、ナオと言います。
    battle.txt を使って、スパロボの計算式を作ろうと考えました。
    しかし、実際動かしてみると、敵のCT率と命中率が高い様な気がします。
    何故でしょうか?分かる方が居ましたら、教えてくれると助かります。


    #####battle.txt の中身

    #命中率計算

    命中補正
    140 + 命中 + 攻撃値 * Call(地形適正修正,攻撃側ユニットID,防御側ユニットID)

    回避補正
    回避 + 運動性 * Call(地形適正修正,攻撃側ユニットID,防御側ユニットID)

    #攻撃力計算

    攻撃補正
    (攻撃値 + 気力) / 200

    装甲補正
    (反応 + 気力) / 200


    #CT率

    クリティカル攻撃補正
    攻撃値 + 技量 * Call(攻撃時CT補正,攻撃側ユニットID)

    クリティカル防御補正
    攻撃値 + 技量 * Call(攻撃時CT補正,防御側ユニットID)



    ######続けて Callコマンドtxt の中身

    攻撃時CT補正:

    Unset 敵CT補正

    If Party(Args(1)) = "敵" Then
     敵CT補正 = "0.25"
    EndIf

    Talk システム
    "$(敵CT補正)"
    End

    Return 敵CT補正


    地形適正修正:

    #命中補正

    If Info(Unit(Args(1)), 武器, 相手ユニット使用武器, 最大射程) = 1 Then
       If Info(Unit(Args(1)), 武器, 相手ユニット使用武器, 属性所有, 射) = 0 Then      
          攻撃者 = "Args(2)"
       Else       
          攻撃者 = "Args(1)"
       EndIf
    ElseIf Info(Unit(Args(1)), 武器, 相手ユニット使用武器, 属性所有, 格) = 1 Then      
          攻撃者 = "Args(2)"
    Else
          攻撃者 = "Args(1)"
    EndIf

    Switch Area(攻撃者)

    Case 空中

    If Mid(Info(ユニット,攻撃者,地形適応),1,1) = S Then
     攻撃側補正 = "1.2"
    ElseIf Mid(Info(ユニット,攻撃者,地形適応),1,1) = A Then
     攻撃側補正 = "1"
    ElseIf Mid(Info(ユニット,攻撃者,地形適応),1,1) = B Then
     攻撃側補正 = "0.8"
    ElseIf Mid(Info(ユニット,攻撃者,地形適応),1,1) = C Then
     攻撃側補正 = "0.6"
    EndIf


    Case 地上 水上

    If Mid(Info(ユニット,攻撃者,地形適応),2,1) = S Then
     攻撃側補正 = "1.2"
    ElseIf Mid(Info(ユニット,攻撃者,地形適応),2,1) = A Then
     攻撃側補正 = "1"
    ElseIf Mid(Info(ユニット,攻撃者,地形適応),2,1) = B Then
     攻撃側補正 = "0.8"
    ElseIf Mid(Info(ユニット,攻撃者,地形適応),2,1) = C Then
     攻撃側補正 = "0.6"
    EndIf

    Case 水中

    If Mid(Info(ユニット,攻撃者,地形適応),3,1) = S Then
     攻撃側補正 = "1.2"
    ElseIf Mid(Info(ユニット,攻撃者,地形適応),3,1) = A Then
     攻撃側補正 = "1"
    ElseIf Mid(Info(ユニット,攻撃者,地形適応),3,1) = B Then
     攻撃側補正 = "0.8"
    ElseIf Mid(Info(ユニット,攻撃者,地形適応),3,1) = C Then
     攻撃側補正 = "0.6"
    EndIf

    Case 宇宙

    If Mid(Info(ユニット,攻撃者,地形適応),4,1) = S Then
     攻撃側補正 = "1.2"
    ElseIf Mid(Info(ユニット,攻撃者,地形適応),4,1) = A Then
     攻撃側補正 = "1"
    ElseIf Mid(Info(ユニット,攻撃者,地形適応),4,1) = B Then
     攻撃側補正 = "0.8"
    ElseIf Mid(Info(ユニット,攻撃者,地形適応),4,1) = C Then
     攻撃側補正 = "0.6"
    EndIf

    EndSw


    #回避補正

    Switch Area(Args(2))

    Case 空中

    If Mid(Info(ユニット,Args(2),地形適応),1,1) = S Then
     防御側補正 = "0.75"
    ElseIf Mid(Info(ユニット,Args(2),地形適応),1,1) = A Then
     防御側補正 = "1"
    ElseIf Mid(Info(ユニット,Args(2),地形適応),1,1) = B Then
     防御側補正 = "1.25"
    ElseIf Mid(Info(ユニット,Args(2),地形適応),1,1) = C Then
     防御側補正 = "1.5"
    EndIf


    Case 地上 水上

    If Mid(Info(ユニット,Args(2),地形適応),2,1) = S Then
     防御側補正 = "0.75"
    ElseIf Mid(Info(ユニット,Args(2),地形適応),2,1) = A Then
     防御側補正 = "1"
    ElseIf Mid(Info(ユニット,Args(2),地形適応),2,1) = B Then
     防御側補正 = "1.25"
    ElseIf Mid(Info(ユニット,Args(2),地形適応),2,1) = C Then
     防御側補正 = "1.5"
    EndIf

    Case 水中

    If Mid(Info(ユニット,Args(2),地形適応),3,1) = S Then
     防御側補正 = "0.75"
    ElseIf Mid(Info(ユニット,Args(2),地形適応),3,1) = A Then
     防御側補正 = "1"
    ElseIf Mid(Info(ユニット,Args(2),地形適応),3,1) = B Then
     防御側補正 = "1.25"
    ElseIf Mid(Info(ユニット,Args(2),地形適応),3,1) = C Then
     防御側補正 = "1.5"
    EndIf

    Case 宇宙

    If Mid(Info(ユニット,Args(2),地形適応),4,1) = S Then
     防御側補正 = "0.75"
    ElseIf Mid(Info(ユニット,Args(2),地形適応),4,1) = A Then
     防御側補正 = "1"
    ElseIf Mid(Info(ユニット,Args(2),地形適応),4,1) = B Then
     防御側補正 = "1.25"
    ElseIf Mid(Info(ユニット,Args(2),地形適応),4,1) = C Then
     防御側補正 = "1.5"
    EndIf

    EndSw

    Unset 攻撃者


    Return (攻撃側補正 * 防御側補正)


    以上です。何処が可笑しいのでしょうか?
引用返信/返信 削除キー/
■17437 / inTopicNo.2)  Re[1]: battle.txt を使って・・・
□投稿者/ 幻魔の公子 -(2005/09/27(Tue) 00:05:16) [ID:p43CvhkI]
    2005/09/27(Tue) 00:16:47 編集(投稿者)

     幻魔の公子です。


     命中率に関してですが、すべての武器にちゃんと『格』や『射』といった属性は付加されているでしょうか?
     最大射程が1の武器は格闘、2以上の武器は射撃で判定されますが、かといって格や射がついているものとして扱われるわけではありません。

     もしついていない場合、変数『攻撃者』には値が格納されません。
     当然、その後のSwitchにも引っかからず、『攻撃側補正』が0になります。掛け算で片方が0なら結果は絶対に0ですから、戻り値は0になります。
     よって、攻撃補正における攻撃値、回避補正における運動性には0が掛けられて計算される……つまりは、影響を与えないことになります。

     実質、<140+攻撃側の命中>-<回避側の回避>になります。
     この計算式なら命中率が高くなるのは必然かと。

     ちゃんと格や射をすべての武器に付加しているなら、ちょっと原因はわかりません。


     さて、クリティカル値についてです。

     サブルーチン『攻撃時CT補正』では、陣営が敵なら0.25が返ります。では、味方ではどうでしょうか?
     件のサブルーチンは、味方の計算値に対しても同様に適用されます。
     そして、変数『敵CT補正』はリセットされ、また味方の場合は特に値が格納されないのですから、当然0です。

     結果、クリティカル値において、味方の技量は常に0が掛けられて計算されるわけです。
     敵の技量は、1/4とは言えちゃんと計算に加えられます。仮に敵の技量が140しかないとしても35%+武器のCT補正。馬鹿にしたものでもありません。
     そういうわけで、敵のCT率は高くなるわけです。


     なお、これは余計なつっこみですが、『可笑しい』という言葉は『滑稽だ』という意味です。
     異常とか不自然という意味で使ってらっしゃると考えますが、ひらがなで『おかしい』と書くべきかと。


     それでは。
引用返信/返信 削除キー/
■17442 / inTopicNo.3)  Re[2]: battle.txt を使って・・・
□投稿者/ ナオ -(2005/09/27(Tue) 22:49:47) [ID:OWnuX2b4]

    >  命中率に関してですが、すべての武器にちゃんと『格』や『射』といった属性は付加>されているでしょうか?

    これを指摘されて、全ての武器に  |格 |射   をつけました。
    確かに、つけていなければ変数に代入されないみたいですね。
    ご指摘ありがとう御座ました。


    >  さて、クリティカル値についてです。
    >
    >  サブルーチン『攻撃時CT補正』では、陣営が敵なら0.25が返ります。では、味方ではどうでしょうか?
    >  件のサブルーチンは、味方の計算値に対しても同様に適用されます。
    >  そして、変数『敵CT補正』はリセットされ、また味方の場合は特に値が格納されないのですから、当然0です。


    こちらは下記の通りに訂正してみました。

    攻撃時CT補正:

    Unset 敵CT補正

    If Party(Args(1)) = "敵" Then
     敵CT補正 = "0.25"
    Else
     敵CT補正 = "1"
    EndIf

    Return 敵CT補正

    CT補正の方は上手く計算してくれるようになりました。

    しかし、どうも、命中・回避補正の時の
    攻撃側ユニットID と 防御側ユニットID に
    上手く代入されてないみたいなんです。

    攻撃側ユニットID と 防御側ユニットID というのは
    HELPのバトルコンフィグデータの所に書いてあったので使用してみたんですが
    この二つは本当にシステム変数の一部なんでしょうか?

    Talk システム
    "$(Args(1))"
    End

    と表記しても「Args(1)」とでるだけで代入されるはずの値を返してくれません。
    どうしたら良いのでしょうか?


引用返信/返信 削除キー/
■17449 / inTopicNo.4)  Re[3]: battle.txt を使って・・・
□投稿者/ gaine -(2005/09/29(Thu) 21:43:56) [ID:fWmDQdEd]
    「攻撃側ユニットID」と「防御側ユニットID」はシステム変数ではありません。
    あくまで、バトルコンフィグデータ内にて使用できる特殊なものです。

    Talk システム
    "$(Args(1))"
    End

    はサブルーチン「地形適正修正」内で使用しないと意図する表示にならないかもしれません。
引用返信/返信 削除キー/
■17461 / inTopicNo.5)  Re[4]: battle.txt を使って・・・
□投稿者/ ナオ -(2005/10/01(Sat) 08:51:47) [ID:OWnuX2b4]
    2005/10/01(Sat) 08:53:21 編集(投稿者)
    2005/10/01(Sat) 08:53:17 編集(投稿者)

    gaineさん、ありがとう御座いました。

    なるほど、攻撃側と防御側はバトルコンフィグデータ用の変数なんですね。
    通りで、ほかの所に載ってなのか………

    しかし、どうにも命中・回避補正の時、攻撃側ユニットIDが代入されてない
    みたいなんです。防御側はきちんと代入してくれるんですが……

    見苦しいかと思いますが、もう一度少し修正した物を載せます。

    ########

    地形適正修正:

    #命中補正

    If Info(攻撃側ユニットID, 武器, 対象ユニット使用武器, 最大射程) = 1 Then
       If Info(攻撃側ユニットID, 武器, 対象ユニット使用武器, 属性所有, 射) = 0 Then      
          攻撃時地形 = "Args(2)"
       Else       
          攻撃時地形 = "攻撃側ユニットID"
       EndIf
    ElseIf Info(攻撃側ユニットID, 武器, 対象ユニット使用武器, 属性所有, 格) = 1 Then      
          攻撃時地形 = "Args(2)"
    Else
          攻撃時地形 = "攻撃側ユニットID"
    EndIf

    Switch Area($(攻撃時地形))

    Case 空中

    If Mid(Info(ユニット,攻撃側ユニットID,地形適応),1,1) = S Then
     攻撃側補正 = "1.2"
    ElseIf Mid(Info(ユニット,攻撃側ユニットID,地形適応),1,1) = A Then
     攻撃側補正 = "1"
    ElseIf Mid(Info(ユニット,攻撃側ユニットID,地形適応),1,1) = B Then
     攻撃側補正 = "0.8"
    ElseIf Mid(Info(ユニット,攻撃側ユニットID,地形適応),1,1) = C Then
     攻撃側補正 = "0.6"
    EndIf


    Case 地上 水上

    If Mid(Info(ユニット,攻撃側ユニットID,地形適応),2,1) = S Then
     攻撃側補正 = "1.2"
    ElseIf Mid(Info(ユニット,攻撃側ユニットID,地形適応),2,1) = A Then
     攻撃側補正 = "1"
    ElseIf Mid(Info(ユニット,攻撃側ユニットID,地形適応),2,1) = B Then
     攻撃側補正 = "0.8"
    ElseIf Mid(Info(ユニット,攻撃側ユニットID,地形適応),2,1) = C Then
     攻撃側補正 = "0.6"
    EndIf

    Case 水中

    If Mid(Info(ユニット,攻撃側ユニットID,地形適応),3,1) = S Then
     攻撃側補正 = "1.2"
    ElseIf Mid(Info(ユニット,攻撃側ユニットID,地形適応),3,1) = A Then
     攻撃側補正 = "1"
    ElseIf Mid(Info(ユニット,攻撃側ユニットID,地形適応),3,1) = B Then
     攻撃側補正 = "0.8"
    ElseIf Mid(Info(ユニット,攻撃側ユニットID,地形適応),3,1) = C Then
     攻撃側補正 = "0.6"
    EndIf

    Case 宇宙

    If Mid(Info(ユニット,攻撃側ユニットID,地形適応),4,1) = S Then
     攻撃側補正 = "1.2"
    ElseIf Mid(Info(ユニット,攻撃側ユニットID,地形適応),4,1) = A Then
     攻撃側補正 = "1"
    ElseIf Mid(Info(ユニット,攻撃側ユニットID,地形適応),4,1) = B Then
     攻撃側補正 = "0.8"
    ElseIf Mid(Info(ユニット,攻撃側ユニットID,地形適応),4,1) = C Then
     攻撃側補正 = "0.6"
    EndIf

    EndSw


    #回避補正

    Switch Area(Args(2))

    Case 空中

    If Mid(Info(ユニット,Args(2),地形適応),1,1) = S Then
     防御側補正 = "0.75"
    ElseIf Mid(Info(ユニット,Args(2),地形適応),1,1) = A Then
     防御側補正 = "1"
    ElseIf Mid(Info(ユニット,Args(2),地形適応),1,1) = B Then
     防御側補正 = "1.25"
    ElseIf Mid(Info(ユニット,Args(2),地形適応),1,1) = C Then
     防御側補正 = "1.5"
    EndIf


    Case 地上 水上

    If Mid(Info(ユニット,Args(2),地形適応),2,1) = S Then
     防御側補正 = "0.75"
    ElseIf Mid(Info(ユニット,Args(2),地形適応),2,1) = A Then
     防御側補正 = "1"
    ElseIf Mid(Info(ユニット,Args(2),地形適応),2,1) = B Then
     防御側補正 = "1.25"
    ElseIf Mid(Info(ユニット,Args(2),地形適応),2,1) = C Then
     防御側補正 = "1.5"
    EndIf

    Case 水中

    If Mid(Info(ユニット,Args(2),地形適応),3,1) = S Then
     防御側補正 = "0.75"
    ElseIf Mid(Info(ユニット,Args(2),地形適応),3,1) = A Then
     防御側補正 = "1"
    ElseIf Mid(Info(ユニット,Args(2),地形適応),3,1) = B Then
     防御側補正 = "1.25"
    ElseIf Mid(Info(ユニット,Args(2),地形適応),3,1) = C Then
     防御側補正 = "1.5"
    EndIf

    Case 宇宙

    If Mid(Info(ユニット,Args(2),地形適応),4,1) = S Then
     防御側補正 = "0.75"
    ElseIf Mid(Info(ユニット,Args(2),地形適応),4,1) = A Then
     防御側補正 = "1"
    ElseIf Mid(Info(ユニット,Args(2),地形適応),4,1) = B Then
     防御側補正 = "1.25"
    ElseIf Mid(Info(ユニット,Args(2),地形適応),4,1) = C Then
     防御側補正 = "1.5"
    EndIf

    EndSw


    Talk システム
    $(攻撃側補正)
    $(防御側補正)
    $(攻撃時地形)

    End

    Return (攻撃側補正 * 防御側補正)

    ######

    攻撃時地形で攻撃の時に、自分がどっちのエリアに居るかを決め、
    Areaコマンドで地形を判別、その後攻撃側の地形適応で修正値を決めてます。
    それと、武器全てに格・射のいずれかを付けています。

    Talkコマンドで調べた結果、『攻撃時地形』を決める段階でバグがおきているようです。
    そのため、攻撃側の補正値が格納できませんでした。
    それと、『攻撃側ユニットID』を『Args(1)』に変えてもダメでした。

    自分としては、結構きちんと組んだつもりなのです。
    どこかが間違っているのでしょうか?

    Ver2.1.0.10で試しています。

引用返信/返信 削除キー/
■17463 / inTopicNo.6)  とりあえず、解決です。
□投稿者/ ナオ -(2005/10/02(Sun) 08:31:16) [ID:OWnuX2b4]

    幻魔の公子さん、gaineさん、ありがとう御座いました。

    開発版本体のVer2.1.11 が出たので計算式もほとんど自由に弄れる様になりました。
    ですから、このインクルも用無しになってしまったようです。頑張ったのに……

    とりあえず、これからは Ver2.1.11 でやっていこうと思うので、
    このスレは解決という方向にしました。
    今回、教えて貰った事は次への糧とする事にします。
解決済み!
引用返信/返信 削除キー/



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

このトピックに書きこむ

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

Pass/

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

- Child Tree -
- Antispam Version -