2ちゃんねるログビューア

カルネージハートポータブル 23機目   を含む(ツリー表示)

■TOP■ 全部 1- 101- 201- 301- 401- 501- 601- 701- 801- 901- ツリー表示
334: 名前:枯れた名無しの水平思考 :2006/12/30(土) 09:55:22 ID:nCjyO2hj0(6)
>>329

これが試作機で使っている予測射撃の中心部分です

例 アラクネ対アラクネ
  
カウンタA = 14 (敵の残りジャンプ移動フレーム数)
カウンタB = カウンタA
カウンタB = カウンタB + 2 (予測射撃の有効射程距離計算)
カウンタB = カウンタB * 11.9 (予測射撃の有効射程距離計算)

ターゲットの距離がカウンタB以下か?
Yes
ターゲットがジャンプしたか?
Yes
カウンタC = 敵の方向
ターゲット射撃 通常 武装1 1発
カウンタD = 敵の距離
カウンタE = 210 (機体本来のずれの補正用)
カウンタE = カウンタE / カウンタD (機体本来のずれの補正値)
カウンタF = 敵の方向
カウンタC = カウンタC - カウンタF (方向の差を計算し)
カウンタC = カウンタC * カウンタA (敵の残りジャンプ移動フレーム数を掛ける)
カウンタF = カウンタF + カウンタE (機体本来のずれの補正値適用)
カウンタF = カウンタF - カウンタC (敵のジャンプ着地地点予測補正数値適用)
敵は多脚か?
Yes
カウンタG = -60 (対多脚用仰角方向補正用)
カウンタG = カウンタG / カウンタD (対多脚用仰角方向値)
カウンタ指定発射 方位カウンタF 仰角カウンタG 武装1 1発
335: 名前:枯れた名無しの水平思考 :2006/12/30(土) 09:56:45 ID:nCjyO2hj0(6)
・機体本来のずれの補正
 「敵の方向を取得」チップで取得できる角度は自機の中心と相手の中心を
 結んだ角度になるため、取得した角度をそのまま使うと左腕にカノンがある
アラクネの場合は向かって敵の左側に弾が飛んでいってしまう。
それを敵の中心に飛んでいくように補正する。
動かないターゲットを用意して200mあたりから射撃実験し「定数/敵の距離」
を角度に足して補正した。
実験機では「210を敵の距離で割った数値」を角度に足している。
他の機体の場合も数値をかえればOK、右側に武器がある機体は同じようにして
得た数値を引けばよい
本格的にやると三角関数の世界になるのかな?

カウンタA = 210
カウンタB = 敵の距離
カウンタA = カウンタA / カウンタB
カウンタB = 敵の方向
カウンタB = カウンタB + カウンタA
336: 名前:枯れた名無しの水平思考 :2006/12/30(土) 09:59:42 ID:nCjyO2hj0(6)
・敵のジャンプ着地地点予測補正
ここからが本題
実験機は「自機から見たジャンプ中の敵の1フレームあたりにずれた角度 に 敵の残りジャンプ移動フレーム数」を掛けている。
文章にするとややこしいが要は「ジャンプ中の1フレームに1度ずれるなら5フレーム後には5度ずれるだろう」を計算している、けっこう大雑把だ。
実際にはあらかじめ「敵の残りジャンプ移動フレーム数」を敵の種類ごとに定数として持っておき、敵のジャンプを感知後敵の方向を取得、
1フレーム後にもう一度取得し前回との差を計算、それに先ほどの定数を掛けることで得た数値を最後に取得した角度から引くことで補正している。
実験機ではこうなる
 
<ジャンプ感知したら>
カウンタA = 敵の方向
(間に4チップ)
カウンタB = 敵の方向
カウンタA = カウンタA - カウンタB
カウンタA = カウンタA * 定数
カウンタB = カウンタB - カウンタA

ここで定数の「敵の残りジャンプ移動フレーム数」って何となるのだが、たとえば
重量制限ぎりぎりアラクネの場合、ジャンプしてから着地まで(空中を移動
している)のフレーム数は18くらい。
実際のプログラムは自機がホーム側だとすると

1フレーム目 相手がジャンプ
2フレーム目 相手のジャンプを感知し分岐
3フレーム目 1回目の角度を所得
4フレーム目 2回目の角度を取得

となりこの時点で4フレーム過ぎているため
相手の残り移動フレーム数は18-4=14となる。これを機種ごとに持つことになる。
アウェーだと感知が1フレーム早くなり数値は1ずれるかも?、相手の重量に
よっても空中にいるフレーム数が変化するのだが、少しならずれても大丈夫みたい。
敵が常に自機から一定の距離を円を書くようにジャンプしているわけではない
ので、厳密にはこんな計算は成り立たず敵が接近するほど誤差が大きくなるし
そもそもジャンプ中の横移動速度が一定じゃないと思うのですが、
敵の横幅がある程度あるので多少ずれても当たってしまうようです。

337: 名前:枯れた名無しの水平思考 :2006/12/30(土) 10:00:58 ID:nCjyO2hj0(6)
○仰角方向補正
・対多脚補正
多脚のメイン機体であるアラクネと冥界は着地するとペッタンコになり
水平に撃つと当たらないことが多い。
これも簡易的だが「定数 ÷ 距離」を角度として使い補正する
実験機では-60を数値として使っている
 
カウンタA = -60
カウンタB = 敵の距離
カウンタA = カウンタA / カウンタB

本当はもう少し小さい値のほうが良いのだが、小さすぎると地面に当たってしまい
悲しいのでこのくらいにしている。
これも本格的にやると三角関数の世界になるのかな?

・対二脚補正
二脚は胸のあたりを狙うと当たりやすい機体が多いので、一律0.3で済ませている
厳密にやる場合さっきと逆に+の値を距離で割ればいいのだが、こちらは地面に
当たって消えるリスクがないので適当

・でこぼこの地面に対応するには
「ターゲットのいる仰角」で取得した値に上記の値を
加えれば良いのかな?ともおもったが実験せず現在は平らな地面のみの対応です。

・空中にいる敵への対応
敵が近いとまだ空中にいるときに射撃してしまい弾が敵の下をくぐってしまうとき
があります。
途中のバージョンまではある程度対応していましたが、チップ数の関係で実用性が
低いと判断し削りました。
機体ごとのジャンプ性能の差が大きいので難しいですが目の前で横っ飛び中の
ネグローニを空中でパッコーン!と吹き飛ばすのは快感ですので何とかしたいです

338: 名前:枯れた名無しの水平思考 :2006/12/30(土) 10:04:28 ID:nCjyO2hj0(6)
○予測射撃の有効射程距離
・敵の隙となるフレーム数
敵がジャンプ、着地し再び動けるようになるには機種や重量により21フレームから
30数フレームほどのばらつきがある。同じ機体でも軽いほうがジャンプで高く遠くに
飛び空中にいるフレーム数も増加、その分ジャンプの隙が増える。
重量制限ギリギリの機体ならたとえばアラクネで26くらい、ジェイラーが一番少なく
て21くらいだった。全機種地味に調べました。
実戦ではギリギリの重量で出てくる機体が多いと思い、各機体のそのときの値を計算
に使っている。

・予測射撃発射までのフレーム数
アラクネでは射撃チップを踏んでから11フレームで発射されることが多いため
この数値を使った。
事前に射撃チップを踏んでおき、弾が発射される前にカウンタ射撃チップを踏めば
ちゃんと方向が補正されることを利用している

・弾速
カノンの速度は11.9を使って計算した(nas_Bさんの資料より使わせていただきました、ありがとうございます)

・実際の計算
「(敵の隙フレーム数 - 発射までのフレーム数) * 弾速」を有効射程とし
実際には水平方向補正のときに使った「敵の残りジャンプ移動フレーム数」
から距離を計算している
「敵の残りジャンプ移動フレーム数」は敵が空中を移動しているフレーム数
から4を引いた値を使っているため
「敵の残りジャンプ移動フレーム数」+ 4で「実際の滞空フレーム数」
着地してからの硬直時間は8フレームの機体が多く、たまに7がいるので
多いほうをとって8とし「実際の滞空フレーム数 + 8」 を敵の隙として使う。
で、「(敵の隙 - 11) * 11.9」が確実な有効射程なのだが、敵が1フレームで
回避動作ができないことも多いだろうし軽くなった場合のことも考えて
「(敵の隙 - 10) * 11.9」を実戦的な有効射程とした。

実際には数値はまとめられるのでこうなる
(「敵の残りジャンプ移動フレーム数」+ 4 + 8 - 10) * 11.9
= (「敵の残りジャンプ移動フレーム数」) + 2 * 11.9

アラクネは「敵の残りジャンプ移動フレーム数」として14を使っているため
対アラクネ戦の場合 (14 + 2) * 11.9 = 190.4 となりこれ以下の距離になったら
予測射撃を開始する。

339: 名前:枯れた名無しの水平思考 :2006/12/30(土) 10:09:23 ID:nCjyO2hj0(6)
以上です
数値をちょっと変えれば飛行以外の全機体で使えると思いますが
ここは変だというところがあればぜひ教えてください

時間がかかりすぎてその他の機体に対する部分がまったく製作できず
年越しには間に合いませんでしたorz

■TOP■ 全部 1- 101- 201- 301- 401- 501- 601- 701- 801- 901- ツリー表示 dat