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

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

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

■18393 / inTopicNo.1)  バトルコンフィグを設定したいのですが
  
□投稿者/ 赤寅 -(2006/04/30(Sun) 23:26:18) [ID:bWWAEbKR]
    SFCソフト「魔装機神 The Load of Elemantel」と同じような、ユニットの属性と属性ランクによって攻撃のダメージが変動するシステムを作ろうと思っています。
    どういうことかというと…

    例)ダミー特殊能力「風系高位『○○』」を持ったユニットが、ダミー特殊能力「大地系低位『××』」を持ったユニットを攻撃する場合、最終ダメージに+32%(*1.32)の補正がかかり、その反撃(大地>風)の最終ダメージには-20%(*0.8)の補正がかかる。

    という感じにしようと、バトルコンフィグファイルを作ろうと思ったのですが、困っています。

    攻撃側・防御側のユニットの属性の種類及びランクによって補正のかかり具合が異なるので「if」を使うことになると思うのですが、このifで攻撃側・防御側の特殊能力を、なんというか"調べる"には、どのようにテキストを書けばいいんでしょうか? つまり、「battle.txt」に

    if ○○(←攻撃側属性) = 風系低位
    if ××(←防御側属性) = 大地系低位
    最終ダメージ = ダメージ * 1.32
    ElseIf …

    という風にテキストを作る場合(上のはだいぶ大まかですが)○○や××の部分はなんと書けばいいでしょうか? インクルを使ったほうがいいらしいですが・・・
    どなたか教えてください、お願いします。
引用返信/返信 削除キー/
■18395 / inTopicNo.2)  Re[1]: バトルコンフィグを設定したいのですが
□投稿者/ 明けの明星 -(2006/05/01(Mon) 00:25:25) [ID:KdLAMfKc]
     すみません、わざわざ移動させてしまって。内容から、ある程度の長さになると思いましたので…。
     バトルコンフィグには、関数の記述は可能ですが、イベントコマンドは不可能だったハズです。
    ですので、今回の場合自作関数を使用し、Returnによる値取得が必要となります。
     また、特殊能力の「風系高位『○○』」の「○○」だけを取り出す、
    といった手順は複雑になり易い為、今回は特殊能力の所有・非所有で代用します。
    不都合がありましたら、返信して下さればその時に対処します。
    「風系高位『○○』」を「風高位」、「大地系低位『××』」を「地低位」とします。
    これ等の特殊能力はエリアスにて作成し、ユニットで別名指定をしない様にします。
    こちらも不都合がありましたら返信にてご報告下さい。
    
    例の場合、まずバトルコンフィグには
    
    ### 此処から
    最終ダメージ
    ダメージ * Call(AttributeRank,対象ユニットID,相手ユニットID)
    ### 此処まで
    
    として、関数『AttributeRank』を呼び出し、ダメージ計算の係数を求めます。
    
    関数『AttributeRank』は、
    
    ### 此処から
    AttributeRank:
    Local UID = Args(1)
    Local EID = Args(2)
    If IsAvailable(UID,風高位) = 1 Then
      If IsAvailable(EID,地低位) = 1 Then
        Return 1.32
      EndIf
    ElseIF IsAvailable(UID,地低位) = 1 Then
      If IsAvailable(EID,風高位) = 1 Then
        Return 0.8
      EndIf
    EndIf
    Return 1
    ### 此処まで
    
    とします。他の属性は、適宜『ElseIF』を使用する等で対処して下さい。
    
    If・EndIf間を分かり易くする為、図表モードで書き込みましたので、
    見辛かったら申し訳ありません。

引用返信/返信 削除キー/
■18414 / inTopicNo.3)  Re[2]:エリアスの特殊能力設定について
□投稿者/ 赤寅 -(2006/05/03(Wed) 02:06:28) [ID:bWWAEbKR]
    明けの明星さん、ありがとうございます。流れとかはだいたいわかったと思います。

    >特殊能力の「風系高位『○○』」の「○○」だけを取り出す、といった手順は複雑になり易い為、今回は特殊能力の所有・非所有で代用します。
    >これ等の特殊能力はエリアスにて作成し、ユニットで別名指定をしない様にします。
    エリアスで、ダミー特殊能力でLv指定のできる能力の設定はできるでしょうか?
    こんなふうに。


    #エリアスファイル
    風属性
    ダミー特殊能力名=風属性
    風属性Lv1=解説 風の低位属性を持ったユニット。地系に強く、炎系に弱い。
    風属性Lv2=解説 風の高位属性を持ったユニット。地系に強く、炎系に弱い。
    #ここまで

    これができればインクル組むのはけっこう楽になるんですが・・・
引用返信/返信 削除キー/
■18418 / inTopicNo.4)  Re[2]: 上手くいきません
□投稿者/ 赤寅 -(2006/05/03(Wed) 21:17:03) [ID:bWWAEbKR]
    教えていただいたとおり、各種ファイルを作成して実際に動かしてみたのですが、どうも上手くいきません。
    なぜかダメージが全部10になってしまいます。
    ファイルの内容は…
    
    
    #エリアス
    #ここから
    無属性
    ダミー特殊能力名=無属性
    無属性=解説 属性の相性による影響を受けない。
    
    風系低位
    ダミー特殊能力名=風系低位
    風系低位=解説 (略)地系に強く、炎系に弱い。
    
    風系高位
    ダミー特殊能力名=風系高位
    風系高位=解説 (略)地系に強く、炎系に弱い。
    
    風系聖位
    ダミー特殊能力名=風系聖位
    風系聖位=解説 (略)地系に強く、炎系に弱い。
    #他の属性も同じスタイル。
    #レス「エリアスの特殊能力設定について」でやりたかったスタイルが上手くいかなのでこういうスタイルで組みました。
    #ここまで
    
    
    #バトルコンフィグ
    #ここから
    ダメージ
    (攻撃地形補正 - 防御補正) * 地形ダメージ修正 * Call(AttributeRank,攻撃側ユニットID,防御側ユニットID)
    #フィールドで減少したりする前のダメージに補正をかけようとしてます。
    #インクルで設定した関数"AttributeRank"をコールしています。
    #ここまで
    
    
    #インクル
    #ここから
    AttributeRank:
    Local UID = Args(1)
    Local EID = Args(2)
    ###どちらかが無属性
    If (IsAvailable(UID,無属性) = 1) Or (IsAvailable(EID,無属性) = 1) Then
    	Return 1
    #########################風系#########################
    ###風系低位###
    ElseIf IsAvailable(UID,風系低位) = 1 Then
    #対炎系(不利)
    	If (IsAvailable(EID,炎系低位) = 1) Or (IsAvailable(EID,炎系高位) = 1) Or (IsAvailable(EID,炎系聖位) = 1) Then
        		Return 0.8
    #対大地系(有利)
    	ElseIf (IsAvailable(EID,大地系低位) = 1) Or (IsAvailable(EID,大地系高位) = 1) Or (IsAvailable(EID,大地系聖位) = 1) Then
    		Return 1.2
    #対風・水系(影響なし)
    	Else
    		Return 1
    	EndIf
    (以下はほとんど同じスタイルなので省略)
    #攻撃側・防御側どちらかのユニットが特殊能力"無属性"を持つ場合、ダメージに変化は無し。
    #攻撃側ユニットが特殊能力"風系低位"を持っている場合、防御側ユニットの持つ特殊能力が"大地系○位"ならダメージは1.2倍、"炎系○位"なら0.8倍、その他("風系""水系")の場合は変化なし。
    #ここまで
    
    
    どこに問題があるのでしょうか? 

引用返信/返信 削除キー/
■18424 / inTopicNo.5)  Re[3]: 上手くいきません
□投稿者/ ギルフェイム -(2006/05/04(Thu) 12:46:31) [ID:GZd7QGfJ]
http://www.geocities.jp/gillfame_rgb/
    IsAvailable関数で指定する特殊能力に別名を使うことは出来ません。
    意図したとおりに動作させるにはエリアスを


    >無属性
    >無属性=無属性
    >無属性=解説 属性の相性による影響を受けない。

    >風系低位
    >風系低位=風系低位
    >風系低位=解説 (略)地系に強く、炎系に弱い。
    # 以降省略


    こんな感じに直せば出来るのではないかと思います。
引用返信/返信 削除キー/
■18427 / inTopicNo.6)  Re[4]: やっぱり上手くいきません
□投稿者/ 赤寅 -(2006/05/04(Thu) 22:44:45) [ID:bWWAEbKR]
    ギルフェイムさん、ありがとうございます。
    エリアスの修正はしましたが、やはりダメージが全部10のままです。
    "Battle"か"Include"、恐らく"Battle"に問題があると思うのですが…
    
    
    #バトルコンフィグ
    #ここから
    ダメージ
    (攻撃地形補正 - 防御補正) * 地形ダメージ修正 * Call(AttributeRank,攻撃側ユニットID,防御側ユニットID)
    #フィールドで減少したりする前のダメージに補正をかけようとしてます。
    #インクルで設定した関数"AttributeRank"をコールしています。
    #ここまで
    
    
    
    #インクル
    #ここから
    AttributeRank:
    Local UID = Args(1)
    Local EID = Args(2)
    ###どちらかが無属性
    If (IsAvailable(UID,無属性) = 1) Or (IsAvailable(EID,無属性) = 1) Then
    	Return 1
    #########################風系#########################
    ###風系低位###
    ElseIf IsAvailable(UID,風系低位) = 1 Then
    #対炎系(不利)
    	If (IsAvailable(EID,炎系低位) = 1) Or (IsAvailable(EID,炎系高位) = 1) Or (IsAvailable(EID,炎系聖位) = 1) Then
        		Return 0.8
    #対大地系(有利)
    	ElseIf (IsAvailable(EID,大地系低位) = 1) Or (IsAvailable(EID,大地系高位) = 1) Or (IsAvailable(EID,大地系聖位) = 1) Then
    		Return 1.2
    #対風・水系(影響なし)
    	Else
    		Return 1
    	EndIf
    (以下はほとんど同じスタイルなので省略)
    #攻撃側・防御側どちらかのユニットが特殊能力"無属性"を持つ場合、ダメージに変化は無し。
    #攻撃側ユニットが特殊能力"風系低位"を持っている場合、防御側ユニットの持つ特殊能力が"大地系○位"ならダメージは1.2倍、"炎系○位"なら0.8倍、その他("風系""水系")の場合は変化なし。
    #ここまで
    
    
    過去ログを見てみたところ、""で囲むべきところを囲んでいなかったというパターンが多かったようですが、"Battle"の項目一つ一つを""で囲んでも同じでした。
    となると、"Call()"の部分に問題があるのかもしれませんがわかりません。
    どなたか、おわかりにならないでしょうか。

引用返信/返信 削除キー/
■18428 / inTopicNo.7)  Re[5]: やっぱり上手くいきません
□投稿者/ 明けの明星 -(2006/05/04(Thu) 23:01:36) [ID:KdLAMfKc]
    『IsAvailable(UID,無属性)』を『IsAvailable(UID,"無属性")』と、ダブルコーテーションで囲んでみてください。
    あと、しっかり関数が働いているのか、要所要所にTalkコマンドを使って調べてみてください。
    もしかすると、『Ifのどれも真になっていない』可能性がありますので。
引用返信/返信 削除キー/
■18431 / inTopicNo.8)  Re[6]: まだ上手くいきません
□投稿者/ 赤寅 -(2006/05/04(Thu) 23:48:52) [ID:bWWAEbKR]
    明けの明星さん、ありがとうございます。
    ご指摘の通り、インクルを修正しましたが、まだダメージが全部10です。
    それで、
    
    
    #ここからインクル
    AttributeRank:
    Local UID = Args(1)
    Local EID = Args(2)
    #略
    ###風系高位###
    ElseIf IsAvailable(UID,"風系高位") = 1 Then
    #対大地系(有利)
    	ElseIf IsAvailable(EID,"大地系低位") = 1 Then
    		Talk (パイロットA)
    		相性はこっちが有利だ!
    		End
    		Return 1.32
    	ElseIf (IsAvailable(EID,"大地系高位") = 1) or (IsAvailable(EID,"大地系聖位") = 1) Then
        		Return 1.2
    #以下略
    #風系高位のユニットのパイロットAが、大地系低位のユニットに攻撃した場合、セリフを言うように設定。
    #ここまで
    
    
    このようにTalkをはさんでみたんですが、このTalkが何度も行われます。
    「攻撃」コマンド選択時に攻撃範囲内に大地系低位ユニット(以下"地低機")がいると、その数だけトーク発生。移動後もしかり。
    「攻撃」コマンド選択後、攻撃目標選択時に地低機にカーソルを合わせるたびにトーク。どうも、ステータスウィンドウに双方のダメージを表示しようとするたびに起こるようです。
    戦闘メッセでも出てきます。普通の戦闘メッセが出ません。
    等等です。
    これは、この関数"AttributeRank"が、何度も呼び出されているということでしょうか。
    やはり、"Battle"に原因があるような気がするのですが…
    
    
    #バトルコンフィグ
    #ここから
    ダメージ
    (攻撃地形補正 - 防御補正) * 地形ダメージ修正 * Call(AttributeRank,攻撃側ユニットID,防御側ユニットID)
    #フィールドで減少したりする前のダメージに補正をかけようとしてます。
    #インクルで設定した関数"AttributeRank"をコールしています。
    #ここまで
    
    
    何度もすいませんが、どうでしょうか…?

引用返信/返信 削除キー/
■18433 / inTopicNo.9)  Re[7]: まだ上手くいきません
□投稿者/ Mr.tonkati -(2006/05/05(Fri) 00:27:36) [ID:I1fvYQYl]
    初めまして、こんばんは。
    Mr.tonkatiです。


    >#バトルコンフィグ
    >#ここから
    >ダメージ
    >(攻撃地形補正 - 防御補正) * 地形ダメージ修正 * Call(AttributeRank,攻撃側ユニットID,防御側ユニットID)





    最終ダメージ
    最終値 * Call(AttributeRank,攻撃側ユニットID,防御側ユニットID)


    バトルコンフィグにこう記載してみては如何でしょう。


    >これは、この関数"AttributeRank"が、何度も呼び出されているということでしょうか。


    そうなります、そしてこれは仕様ではないかと愚考致します。


    的外れであれば、失礼致しました。
引用返信/返信 削除キー/
■18444 / inTopicNo.10)  Re[8]: "最終ダメージ"は上手くいきましたが…
□投稿者/ 赤寅 -(2006/05/05(Fri) 23:13:49) [ID:bWWAEbKR]
    Mr.tonkatiさん、あいがとうございます。
    お教えいただいたとおりにした所、ちゃんと処理が行われたようです。
    ですが、この処理はダメージではなく攻撃力に加える方がいいのではないかと思い直し、その方面で現在、バトルコンフィグを考えています。急にコロッと変わってすいません。
    最終ダメージはそれこそ最終手段として、どうしてもムリそうだと判断したら使うことにします。
    とは言ったものの、大苦戦しております。
    "攻撃補正"の編集では"防御側ユニットID"が使えないため、"攻撃地形補正"か"ダメージ"を編集しようとしているのですが…どっちも上手くいきません。
    
    
    #バトルコンフィグファイルここから
    #攻撃地形補正を編集
    攻撃地形補正
    攻撃補正 * 地形適応 * Call(AttributeRank,攻撃側ユニットID,防御側ユニットID)
    #ここまで
    
    あるいは
    
    #バトルコンフィグファイルここから
    #ダメージを編集
    ダメージ
    (攻撃側補正 * Call(AttributeRank,攻撃側ユニットID,防御側ユニットID) - 防御側補正) * 地形ダメージ修正
    #ここまで
    
    としようと考えたのですが、どっちを使っても、攻撃範囲内に敵がいても「攻撃」コマンドさえ出ない、反撃はできるが設定してもいないバリアが出てダメージ0という有様です。
    攻撃地形補正は"攻撃補正"、ダメージは"地形適応"の部分が問題だと思うのですが、ヘルプ(SRC.exe同封のやつ)ではわかりません…
    何度も何度もご迷惑をおかけしておりますが、どなたかおわかりでしたらお教えください、お願いします。

引用返信/返信 削除キー/
■18446 / inTopicNo.11)  Re[9]: "最終ダメージ"は上手くいきましたが…
□投稿者/ 中箱 -(2006/05/06(Sat) 00:57:16) [ID:MKF5ROxp]
    赤寅さんはじめまして、中箱と申します。

    ヘルプのバトルコンフィグデータの項は確かに分かりにくい構成だと思いますが、
    書いてはあります。

    同項の (2)計算式 において

    >〜〜上の計算式の「=」の右側の式を自分で定義し直すと考えてください。
    >(中略)
    > 計算式中で戦闘に参加しているユニットに関する各種の数値を
    >以下のバトルコンフィグ変数を使って参照することが出来ます。
    >バトルコンフィグ変数はバトルコンフィグデータの式の計算時にのみ参照可能なシステム変数です。

    とあるように、システム変数としてこの記述の下にある
     「攻撃値」〜「武器番号」
    が使えます。
    そして、これらの中には、赤寅さんが示されたデータに使われている「攻撃補正」や「地形ダメージ修正」は含まれていません。
    (つまり、(1)コンフィグ対象 の各式の右辺と同じように記述しても、正常には全く動作しません)

    これらの定義されていない変数の値が0として計算されるためにダメージが0となっているのだと考えます。

    ヘルプに従い、
     「攻撃補正」→「攻撃値」
     「地形ダメージ修正」→「地形適応」
    と変更することで正しい値になると思います。

    *(実際にテストし、正常に動作することを確認したわけではありませんので、間違っていたら申し訳ありません)



    以下、やや余談となりますが、

    攻撃をしてもダメージが0となる相手は攻撃対象に選ぶことが出来ません。
    (相手がその攻撃に対する「無効化」能力を持っているのと同じ。ただし、特殊効果のみの攻撃の場合は別だったと思います)
    そして、攻撃対象に選べる相手がいなければその武器は選択できず、
    すべての武器が選択できない場合、攻撃コマンド自体が出ません。
    これはSRCの仕様だった筈です。

    また、反撃した時に出るバリアというのは、 ダメージ0=攻撃を無効化した と判断されているからではないかと
    メッセージにも「○○(武器名)を無効化した〜」のような表示が出たように記憶していますし。
引用返信/返信 削除キー/
■18447 / inTopicNo.12)  修正案です
□投稿者/ Mr.tonkati -(2006/05/06(Sat) 09:47:21) [ID:I1fvYQYl]
    2006/05/06(Sat) 10:24:28 編集(投稿者)
    2006/05/06(Sat) 10:15:57 編集(投稿者)
    2006/05/06(Sat) 09:54:38 編集(投稿者)

    こんにちは、Mr.tonkatiです。
    書いてみたものの、空中にいる場合を失念していた為、練り直しました。


    #バトルコンフィグ
    ダメージ
    (攻撃側補正 * Call(AttributeRank,攻撃側ユニットID,防御側ユニットID) - 防御側補正)

    最終ダメージ
    最終値 * Call(空地判定,防御側ユニットID)

    #インクルード
    空地判定:
    If Area(Args(1)) = 空中 Or Area(Args(1)) = 地中 Then
    Return 1
    Else
    Return ((-1 * Info(マップ,X(Args(1)),Y(Args(1)),ダメージ修正) + 100) / 100)
    Endif


    と、やってみては如何でしょう。


    下手を打ってしまい、誠に申し訳ありませんでした。
    また、的外れであれば、申し訳ありません。


    *更に地中の可能性も浮上、修正。
引用返信/返信 削除キー/
■18448 / inTopicNo.13)  Re[10]: できました!
□投稿者/ 赤寅 -(2006/05/06(Sat) 21:12:39) [ID:bWWAEbKR]
    みなさんのおかげでようやく完成しました!
    中箱さんの助言どおり、


    #ここからバトルコンフィグ
    攻撃地形補正
    攻撃値 * 地形適応 * Call(AttributeRank,攻撃側ユニットID,防御側ユニットID)
    #ここまで


    としたら上手く行きました。中箱さん、ありがとうございました。
    ちなみに、助言していただいたもう一つの方法、

    #ここからバトルコンフィグ
    ダメージ
    (攻撃側補正 * Call(AttributeRank,攻撃側ユニットID,防御側ユニットID) - 防御側補正) * 地形適応
    #ここまで

    でも成立しました。


    Mr.tonkatiさんの方法では、残念ながら上手く行きませんでした。なんでかはわかりませんが…
    あと、空中・地中の他に、水上も入れとかないといけないですよね?

    みなさん、本当にありがとうございました。
    このツリーに答えてくださった皆さんのHNをスペシャルサンクスに入れてもいいでしょうか?
解決済み!
引用返信/返信 削除キー/



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

このトピックに書きこむ

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

Pass/

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

- Child Tree -
- Antispam Version -