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

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

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

■22467 / inTopicNo.1)  戦闘中の一時的な位置変更
  
□投稿者/ 鉄也 -(2011/10/14(Fri) 22:53:20) [ID:SvLstnel]
    ヘルプに
    「接近戦攻撃であるとみなされ、ダメージ計算の際に攻撃目標のいる位置に対する地形適応がユニットの地形適応として使われます。このため、ユニットに飛行能力がなく(空の地形適応が「-」)、攻撃目標が空中にいる場合にはこの種の攻撃は行えません。」
    とありますが、空中にいるユニット@が地上にいるユニットAに近接攻撃をした場合、その戦闘中一時的にユニット@が地上にいるかのような状態にすることはできるでしょうか。

    たとえば、ユニット@がAに近接攻撃をした場合、Aは空の適応が-・地上の適応がAの武器bでも反撃できるが、同じ武器bでAから@攻撃した場合・または@の遠距離攻撃に対してAが武器bで反撃した場合は地形が適応せずに反撃できない、というような感じです。
    また、Aが空中にいる場合に@から近接攻撃を受けた場合も武器bによる反撃はできない、という具合です。

    ざっくりまとめると、普段は飛んでいて攻撃できないけど、相手から攻撃してくれば反撃で倒せる、というような敵を作りたいと想定しています。
引用返信/返信 削除キー/
■22476 / inTopicNo.2)  敵ユニットだけでいいならば…
□投稿者/ RST -(2011/10/16(Sun) 10:42:54) [ID:3OCqustr]
    2011/10/16(Sun) 12:56:54 編集(投稿者)

    敵味方の関係なく全ユニットとも汎用的に使えるような方法というのはちょっと思いつかないんですが、
    「普段は飛んでいて攻撃できないけど、相手から攻撃してくれば反撃で倒せる、というような敵を作りたい」
    というだけならば、以下のような手順で一応は可能だと思います。


    1. 「陸上移動」「水中移動」「ホバー移動」の能力と、マップで使うすべての地形に対する「地形適応」の能力を持ったアイテムを作る。
    2. ターンイベントで敵フェイズ開始時に、ユニット@に 1.のアイテムを装備させてChangeAreaコマンドで地上(もしくは水中か水上)に降ろす。
    3. ユニット@の攻撃イベントで、ユニットAが空中にいる、またはユニット@とユニットAが両方とも近接攻撃を使うとき以外は、
      ユニット@を空中に上げる。
    4. ユニット@が地上(もしくは水中)にいるときは、バトルコンフィグで地形ダメージ修正と地形命中率修正を無視する、
      または、あらかじめユニット@のいる地点の地形を平地などダメージと命中率の修正がない地形に変更しておく。
    5. ユニット@の攻撃後に、ユニット@が地上にいたままならば空中に上げて、2.で装備させたアイテムを外す。
      4.で地形を変更した場合は、元に戻しておく。

    まあ、この方法だとフェイズ開始時に空中ユニットを地上に降ろしてしまうので、
    ・本来サポートアタックが発動できないのに発動してしまう可能性がある
    ・本来は空中にいる相手に対して、「対地上」の戦闘メッセージが使われてしまう場合がある
    という問題もありますが。

    ※ 追記
    地上にいる場合、地形適応の能力があっても崖や高層ビルなどタイプが「空」の地形には進入できないことを忘れていました…。
    申し訳ないですが、その問題への対応も思いつかないです。 

    参考になれば幸いです。
引用返信/返信 削除キー/
■22477 / inTopicNo.3)  Re[2]: 敵ユニットだけでいいならば…
□投稿者/ 鉄也 -(2011/10/16(Sun) 22:56:28) [ID:SvLstnel]
    回答どうもです。
    実際のところまだ製作前の構想段階のものに使う予定なので、テストデータ作って予定の動作になるか確認してみようと思います。。
    -適応の攻撃を使用可能にすれば、1・2を省略して、3の方法で逆に地上に落とす、と言う手も使えそうなので、そっちも模索してみます。
    1〜3は、空-適応の反撃を使えるようにするために、戦闘前に空から落とす操作、と言うことでいいんですよね?
    おそらく、バトルコンフィグをいじって、攻撃地形適応を予測計算のときだけ-の補正値を0から別の数値に誤認させればいける気がするので、そのまま4・5の手順を使わせてもらえばかなり理想通り行く目算ではあります。
    4の手順は、@の地形をAのいる地形と同じものに一時変更、と言うのがこっちのイメージに近くなりそうです。

    前の質問には書いてませんが、もうひとつ構想していた、「飛行する敵を一時的に飛べなくする武器属性」等も応用すれば作れそうですね。

    試してみてからまた報告・あるいは追加質問すると思いますが、回答ありがとうございました。
引用返信/返信 削除キー/
■22478 / inTopicNo.4)  追記:中間報告
□投稿者/ 鉄也 -(2011/10/17(Mon) 00:27:23) [ID:SvLstnel]
    バトルコンフィグいじっても、-適応つけてる時点で使用できないみたいですね。
    適応での補正地が0.6以下にならないように組んでみてもだめでした。
    おとなしくそのままで使うか、-をD適応で代用するしかないようです。

    さっきのはキー入れ忘れたので、次からの追記もここで
引用返信/返信 削除キー/
■22479 / inTopicNo.5)  Re[3]: 敵ユニットだけでいいならば…
□投稿者/ 中箱 -(2011/10/17(Mon) 00:48:12) [ID:XAPi9INn]
    >-適応の攻撃を使用可能にすれば、1・2を省略して、3の方法で逆に地上に落とす、と言う手も使えそうなので、そっちも模索してみます。

    >おそらく、バトルコンフィグをいじって、攻撃地形適応を予測計算のときだけ-の補正値を0から別の数値に誤認させればいける気がするので、


    これと同じように考えて調べていたのですが、
    どうやら、地形適応がEの場合はバトルコンフィグデータをどう設定しても攻撃手段として選択不能になるようです。(バトルコンフィグデータの参照自体行われないようになっていました)


    この点に関しては、まだ実際には試してみていないものの、
    ・バトルコンフィグデータを利用するために、データには地形適応Eを使わず最低Dにしておく
    ・本当の適応はEだということを示す特殊能力を持たせる
    のような工夫をした上でバトルコンフィグデータを利用すれば回避できそうな気はしているのですが。
引用返信/返信 削除キー/
■22480 / inTopicNo.6)  Re[4]: 敵ユニットだけでいいならば…
□投稿者/ 鉄也 -(2011/10/17(Mon) 02:17:47) [ID:SvLstnel]
    2011/10/17(Mon) 03:16:19 編集(投稿者)
    2011/10/17(Mon) 03:12:12 編集(投稿者)
    2011/10/17(Mon) 02:32:23 編集(投稿者)

    どうも。
    熱中して作ってたらこんな時間に・・・
    確かにEではだめみたいですね。
    確かに中箱さんの言うとおり、特殊能力で何か説明的なのを持たせて、その特殊能力を持っている場合に、それに対応した適応の補正を0にするような仕組みを作るのがよさそうです。
    空への命中を0固定にする、とかでも面白いかもしれません。
    届かないから当たらないと言う意味で。

    その点を除けば、一応Dでなら敵味方関係なくいけそうなデータ完成しました。
    一応試作品張ります。
    ここ、こうしたほうがよくね?とか突っ込みどころがあれば突っ込んでほしいしだいです。
    自分では一応の動作確認はして、思ったとおり動いているはずなのですが。

    追記:
    攻撃側の地面変える仕組み忘れてた。
    このままだと水と陸とかになるとエラーでます。
    追記2:
    地面入れ替え対応。
    後は擬似Eを作るのみ。
    一応解決なのでいったんチェック入れたほうがいいのかな。
    突っ込みどころがありそうならまたはずすとして。
    追記3:
    大事なこと忘れてた。
    RSTさん、中箱さん、回答ありがとうございました。

    イベントここから↓

    攻撃 味方 敵 :
    攻撃 敵 味方 :
    Talk システム

    ラベル起動1
    $(Unit(対象ユニットID))
    $(Area(対象ユニットID))

    End

    着地テスト装備 = 0
    If Area(対象ユニットID) = 空中 Then
    Talk システム

    $(Unit(対象ユニットID))
    $(Area(対象ユニットID))
    条件クリア1

    End

    If Info(ユニット,対象ユニットID,武器, 対象ユニット使用武器, 属性所有,武) + Info(ユニット,対象ユニットID,武器, 対象ユニット使用武器, 属性所有,突) + Info(ユニット,対象ユニットID,武器, 対象ユニット使用武器, 属性所有,接) > 0 Then
    Talk システム

    $(Info(ユニット,対象ユニットID,武器, 対象ユニット使用武器, 属性所有,武))
    $(Info(ユニット,対象ユニットID,武器, 対象ユニット使用武器, 属性所有,突))
    $(Info(ユニット,対象ユニットID,武器, 対象ユニット使用武器, 属性所有,接))
    条件クリア2

    End

    If Area(相手ユニットID) <> 空中 Then
    Talk システム

    条件クリア3

    End
    元の地形 = Info(マップ, X(対象ユニットID), Y(対象ユニットID), 地形名)
    元のビット = Mid(Info(マップ, X(対象ユニットID), Y(対象ユニットID), ビットマップ名),Len(Info(マップ, X(対象ユニットID), Y(対象ユニットID), ビットマップ名)) - 7,4)
    ChangeTerrain X(対象ユニットID) Y(対象ユニットID) Info(マップ, X(相手ユニットID), Y(相手ユニットID), 地形名) 1
    ChangeArea 対象ユニットID Area(相手ユニットID)
    Talk システム

    条件クリア5
    $(元の地形)
    $(元のビット)

    End
    着地テスト装備 = 1
    EndIf
    EndIf
    EndIf
    Exit

    攻撃後 敵 味方 :
    攻撃後 味方 敵 :
    If 着地テスト装備 = 1 Then
    ChangeArea 対象ユニットID 空中
    着地テスト装備 = 0
    ChangeTerrain X(対象ユニットID) Y(対象ユニットID) 元の地形 元のビット
    EndIf
    Exit
    ↑ここまで

    ユニットここから↓

    テスト用地上味方
    テスト用地上味方, テスト用地上味方, テスト, 1, 4
    陸, 5, M, 1000, 1000
    特殊能力なし
    5000, 500, 800, 50
    DACB, -.bmp
    地上近接攻撃, 1000, 1, 1, +999, -, -, -, AAAA, +0, 武

    テスト用飛行敵
    テスト用飛行敵, テスト用飛行敵, テスト, 1, 4
    空, 5, M, 1000, 1000
    特殊能力なし
    5000, 500, 800, 50
    AACB, -.bmp
    飛行近接攻撃, 1000, 1, 1, +999, -, -, -, AAAA, +0, 武

    ↑ここまで




    空の上からヒットアンドウェイしてくる敵を捨て身で倒すってロマンだよね。←今回の動機
解決済み!
引用返信/返信 削除キー/
■22481 / inTopicNo.7)  Re[5]: 敵ユニットだけでいいならば…
□投稿者/ 中箱 -(2011/10/17(Mon) 19:07:43) [ID:XAPi9INn]
    >ここ、こうしたほうがよくね?とか突っ込みどころがあれば突っ込んでほしいしだいです。


    では幾つか気付いた事、気になった所を。



    攻撃後イベントは、攻撃側反撃側どちらかでも破壊された場合に起こりませんから、
    破壊ラベルも設定する必要があります。
    また、これらのイベントラベルは全て常時イベントにしておかないとほかのイベントを阻害してしまいます。



    移動可能地形が「空」のみのユニットのAreaを"地上"に変更するような処理になっていますが、
    ChangeAreaコマンドの注意として
    >ユニットが本来活動できない地形にユニットを移動させた場合、動作は保証されません。
    とありますから、

    RSTさんの案にあるように「陸上移動」など移動可能地形を追加するアイテムを装備させるか、
    そこもバトルコンフィグに任せてChangeAreaコマンドを使用しないようにした方が安全だと思います。



    地形を元に戻す処理のChangeTerrainコマンドで X(対象ユニットID) Y(対象ユニットID) を使っていますが、
    これだと、もしもデータで 吹K転引属性 や 緊急テレポート能力など、戦闘前後でユニットの座標移動が起こるものを利用している場合にまずいです。
    その場合、変更した地形の座標も、元の地形名と同様、変数に保存しておく必要があるかと。
引用返信/返信 削除キー/
■22482 / inTopicNo.8)  Re[6]: 敵ユニットだけでいいならば…
□投稿者/ 鉄也 -(2011/10/17(Mon) 19:48:48) [ID:SvLstnel]
    2011/10/18(Tue) 15:22:21 編集(投稿者)


    > ●
    > 攻撃後イベントは、攻撃側反撃側どちらかでも破壊された場合に起こりませんから、
    > 破壊ラベルも設定する必要があります。
    > また、これらのイベントラベルは全て常時イベントにしておかないとほかのイベントを阻害してしまいます。

    なるほど、破壊ラベルは設定いりますね。
    見落としてました。
    ただ、攻撃を常時にした場合、 敵 味方 と 味方 敵 の両方が動きそうなのが問題かもですが。
    攻撃反撃かかわらず、先に書いたほう(敵 味方 なら敵)が対象ユニットになるっぽいので、両方のラベルを作った感じなので。
    片方にしたとき(敵 味方)は、地上から攻撃したときも対象ユニットが空中のやつになってたので。
    攻撃と反撃を区別する何かを設定する必要もあるかもですね。
    あるいは一般のイベントのほうを常時イベントにしてしまう、というのもひとつの手として考えています。
    追記:
    よく考えれば、どちらのターンかによってifで切り替えれば、攻撃側を区別できますね。
    それを使ってラベルを片方だけにすれば常時イベントでいけそうです。

    > ●
    > 移動可能地形が「空」のみのユニットのAreaを"地上"に変更するような処理になっていますが、
    > ChangeAreaコマンドの注意として
    > >ユニットが本来活動できない地形にユニットを移動させた場合、動作は保証されません。
    > とありますから、
    >
    > RSTさんの案にあるように「陸上移動」など移動可能地形を追加するアイテムを装備させるか、
    > そこもバトルコンフィグに任せてChangeAreaコマンドを使用しないようにした方が安全だと思います。

    アイテムのほうは最初使ってましたが、適応もAになるので、地上や水中が苦手な飛行キャラを想定するとあれかな、というところですね。
    おっしゃるとおりコンフィグでやるか、あるいは最初から陸や水中にいけるようにしておいて、特殊能力で陸や水中の移動に制限をかけておくことでAI的に「使いたくない」状態を作ってごまかすか、ですかね。
    一応、想定しているシナリオは等身大のファンタジー、このシステムを使う飛行ユニットも、鳥・ドラゴンなどになるため地上や水で動けたところで設定的な無理はないものなので。
    サンプルはめんどくさいので空限定にしましたが。
    SRCのダメージや命中算出式が個人的にあまり好ましくないため、コンフィグを大幅にいじる可能性があるので、コンフィグで対応する場合は本格的に作ってから考えることになりそうです。

    > ●
    > 地形を元に戻す処理のChangeTerrainコマンドで X(対象ユニットID) Y(対象ユニットID) を使っていますが、
    > これだと、もしもデータで 吹K転引属性 や 緊急テレポート能力など、戦闘前後でユニットの座標移動が起こるものを利用している場合にまずいです。
    > その場合、変更した地形の座標も、元の地形名と同様、変数に保存しておく必要があるかと。

    これはばっちり見落としてました。
    処理も簡単なので追加してみようと思います。

    ありがとうございました。
引用返信/返信 削除キー/
■22484 / inTopicNo.9)  ほぼ完成報告
□投稿者/ 鉄也 -(2011/10/18(Tue) 18:52:13) [ID:SvLstnel]
    2011/10/18(Tue) 21:18:05 編集(投稿者)


    一応理想のものが完成したので、報告させていただきます。
    今までの回答、ありがとうございました。
    確認用Talkつきですが、完成したものをはっときます。

    イベント↓

    *攻撃 敵 味方 :
    *攻撃 敵 中立 :
    *攻撃 中立 味方 :

    Talk システム

    ラベル起動1
    $(Unit(対象ユニットID))
    $(Area(対象ユニットID))

    End
    If Party(対象ユニットID) = フェイズ Then

    攻撃ユニットID = 対象ユニットID
    防御ユニットID = 相手ユニットID
    攻撃ユニット使用武器 = 対象ユニット使用武器
    Talk システム

    ラベル起動フェイズ=対象
    $(Party(攻撃ユニットID))
    $(フェイズ)
    $(攻撃ユニットID)
    $(防御ユニットID)
    $(攻撃ユニット使用武器)

    End

    Else

    攻撃ユニットID = 相手ユニットID
    防御ユニットID = 対象ユニットID
    攻撃ユニット使用武器 = 相手ユニット使用武器
    Talk システム

    ラベル起動フェイズ≠対象
    $(Party(攻撃ユニットID))
    $(フェイズ)
    $(攻撃ユニットID)
    $(防御ユニットID)
    $(攻撃ユニット使用武器)

    End

    EndIf

    着地テスト装備 = 0
    If Area(攻撃ユニットID) = 空中 Then
    Talk システム

    $(Unit(攻撃ユニットID))
    $(Area(攻撃ユニットID))
    条件クリア1

    End

    If Info(ユニット,攻撃ユニットID,武器, 攻撃ユニット使用武器, 属性所有,武) + Info(ユニット,攻撃ユニットID,武器, 攻撃ユニット使用武器, 属性所有,突) + Info(ユニット,攻撃ユニットID,武器, 攻撃ユニット使用武器, 属性所有,接) + Info(ユニット,攻撃ユニットID,武器, 攻撃ユニット使用武器, 属性所有,近) - ( Info(ユニット,攻撃ユニットID,武器, 攻撃ユニット使用武器, 属性所有,M) * 4 ) > 0 Then
    Talk システム

    $(Info(ユニット,攻撃ユニットID,武器, 攻撃ユニット使用武器, 属性所有,武))
    $(Info(ユニット,攻撃ユニットID,武器, 攻撃ユニット使用武器, 属性所有,突))
    $(Info(ユニット,攻撃ユニットID,武器, 攻撃ユニット使用武器, 属性所有,接))
    条件クリア2

    End

    If Area(防御ユニットID) <> 空中 Then
    Talk システム

    条件クリア3

    End
    元の地形 = Info(マップ, X(攻撃ユニットID), Y(攻撃ユニットID), 地形名)
    元のビット = Mid(Info(マップ, X(攻撃ユニットID), Y(攻撃ユニットID), ビットマップ名),Len(Info(マップ, X(攻撃ユニットID), Y(攻撃ユニットID), ビットマップ名)) - 7,4)
    元の座標X = X(攻撃ユニットID)
    元の座標Y = Y(攻撃ユニットID)
    ChangeTerrain X(攻撃ユニットID) Y(攻撃ユニットID) Info(マップ, X(防御ユニットID), Y(防御ユニットID), 地形名) 1
    ChangeArea 攻撃ユニットID Area(防御ユニットID)
    Talk システム

    条件クリア5
    $(元の地形)
    $(元のビット)

    End
    着地テスト装備 = 1
    EndIf
    EndIf
    EndIf

    Exit


    *攻撃後 敵 味方 :
    *攻撃後 敵 中立 :
    *攻撃後 中立 味方 :
    *破壊 敵 :
    *破壊 中立 :
    *破壊 味方 :

    If Status(攻撃ユニットID) = 出撃 Then
    If 着地テスト装備 = 1 Then
    ChangeArea 攻撃ユニットID 空中
    着地テスト装備 = 0
    ChangeTerrain 元の座標X 元の座標Y 元の地形 元のビット
    EndIf
    EndIf
    攻撃不可能力補正 = 1
    Exit

    攻撃不可能力計算:


    Talk システム

    敵は$(Area(防御側ユニットID))にあり
    $(攻撃不可能力補正)

    End

    If Info(ユニット,攻撃側ユニットID,特殊能力所有,"$(Area(防御側ユニットID))攻撃不可") = 1 Then

    Talk システム

    $(Area(防御側ユニットID))攻撃不可 所有

    End

    If Info(ユニット,攻撃側ユニットID,武器, 武器番号, 属性所有,武) + Info(ユニット,攻撃側ユニットID,武器, 武器番号, 属性所有,突) + Info(ユニット,武器番号, 武器番号, 属性所有,接) + Info(ユニット,攻撃側ユニットID,武器, 武器番号, 属性所有,近) > 0 Then

    攻撃不可能力補正 = 0

    Talk システム

    $(Area(防御側ユニットID))攻撃不可 所有2
    $(攻撃不可能力補正)

    End

    Else

    攻撃不可能力補正 = 1

    Talk システム

    $(Area(防御側ユニットID))攻撃不可 所有2
    $(攻撃不可能力補正)

    End

    EndIf



    Else

    攻撃不可能力補正 = 1

    Talk システム

    $(Area(防御側ユニットID))攻撃不可 なし
    $(攻撃不可能力補正)

    End

    EndIf

    Return 攻撃不可能力補正

    イベント↑

    バトルコンフィグ↓

    最終命中率
    最終値 * Call(攻撃不可能力計算)

    バトルコンフィグ↑

    テストユニット↓

    テスト用地上味方
    テスト用地上味方, テスト用地上味方, テスト, 1, 4
    陸, 5, M, 1000, 1000
    特殊能力
    空中攻撃不可
    5000, 500, 800, 50
    DACB, -.bmp
    地上近接攻撃, 1000, 1, 1, +999, -, -, -, AAAA, +0, 武

    テスト用飛行敵
    テスト用飛行敵, テスト用飛行敵, テスト, 1, 4
    空陸, 5, M, 1000, 1000
    特殊能力
    水中攻撃不可
    追加移動力Lv-3=鈍足 地上 水中
    5000, 500, 800, 50
    AACB, -.bmp
    飛行近接攻撃, 1000, 1, 1, +999, -, -, -, AAAA, +0, 武

    テストユニット↑
解決済み!
引用返信/返信 削除キー/



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

このトピックに書きこむ

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

Pass/

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

- Child Tree -
- Antispam Version -