霧の湖の畔

2017-11

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

駄文(airファイルについて)

今週もぼちぼちドットは進みましたが・・・という感じ
作業が芳しくないと思わず現実逃避的に別の作業を進めてしまったりしますが
思わず以前から気になっていた「最大の当たり判定」について確認してみたりしました。


<前提>
とりあえず基本的なところで、airファイルの判定の作りですが
Clsn1: 1
Clsn1[0] = 16,-80, 61,-71
Clsn2: 2
Clsn2[0] = 19, 0,-10,-80
Clsn2[1] = 6,-94, 18,-78
こんな感じになっていると思います。
赤字部分が判定の個数をしていて、こことその下の判定と数が一致してないとエラーが出ます。
あと判定を示す座標用の数はちゃんと4個以上ないとダメです。
座標を示す数値ですが、x軸とy軸の範囲が判れば大小の順番は問わないので
左上と右下でも、左下と右上でも、右下と左上でもちゃんと動いてくれます。
他はあまり制限がなくて、↓のように無茶苦茶書いてもとりあえず動いてくれます。

Clsn1: 5
Clsn1[あなたが、] = 3コンティニュー,2出来ないのさ,1 ,!0      . ‐-‐-、/i
Clsn1[] =  とか1938315です!,など1、,こんな0感じ-1 ,でね0  (, === .lス
Clsn1[P] = わりと0,フリーダム-5,に書いても15,-50!        〈(リノノメノ)ヽ( )<>
Clsn1[P] = ちゃんと動くの0,-1, っ-1て,偉いよね0            リ、゚ヮ ゚ i ))乂<>
Clsn1[F] = -999999999999,1+1=9,大ちゃんかわいい1,1,9, ⊂〈i.Y..i〉つ<>

ちなみに記号とか書いても基本的に無視されて、
頭から数字を探して、見つかったら読み取って、次に進むって感じです。
ちゃんと動くといっても、わざわざチャレンジャー精神発揮させずに、
普通に書いたほうが安全だと思いますが。

 超蛇足
 普通のCNSでもairと一緒で、わりと頑張って読んでくれるので気をつけないとバグが残るかも?
 Hitdefのガードフラグなら
 GuardFlag = がーどなどさせるものか!
 とかだとガー不になりますし
 GuardFlag = 立ガード可能だよ
 だと立ちガ可能になりますし、エラーとかあまり出さずに頑張ってくれます。
  (ド8368にh68が含まれてます、読み取りパターンは何種類かあるっぽいです)



<本題>
本命の最大値ですが、MUGENで最大値というと2147483647がお約束のようです。
「符号付き32bit整数での最大値」だそうです。ちなみに最小値は-2147483648。
というわけで片方の座標を0,0にして、
Clsn1: 1
Clsn1[0] = 0,0, 2147483647,-2147483648
こんな感じだとキッチリ判定がでて、
これより大きくしようとすると判定が消えてしまいました。

2147483647 (01111111111111111111111111111111)2
より大きな数値をいれるとどうなるかというと、一旦読み取ったあと、
コンピュータ的に下32桁だけ使って判定するようです。
2147483648 (11111111111111111111111111111111)2なら-2147483648に、
9999999999(1001010100000010111110001111111111)2なら 1410065407に
なります。たぶん。
あふれた分がどうなるかは知りません。
ひょっとしたら最初から読み込む桁数に制限があるかも知れませんがわかりません。

というわけで最大の判定は
Clsn1: 1
Clsn1[0] = -2147483648,-2147483648,2147483647,2147483647
というわけですね。
わりとサックリ分かりましたね。
やったね。すごいね。


実際にMUGENで試して頂ければ、私のこのざまっぷりを追体験できるかと思いますが
上記の判定、さっぱり当りません。
でも最大の当たり判定というとやっぱり上記の指定になるようです。
上記の指定なら「相手と座標が同じなら」相手がどんな変な食らい判定でも接触します。

…どうやらMUGENでは、相手と判定が接触しているかを
「双方の座標差を攻撃側に足し引きしてから判定する」という方法をとっているようです。
つまり相手が前方100の地点にいるなら、判定のためにx座標から100引いて…
でも最大値を超えてるから変になって…
Clsn1: 1
Clsn1[0] = 2147483548,-2147483648,2147483547,2147483647
実質こんな感じの判定になります。たぶん。
相手の遙か後方に縦長の判定が発生していると思います。きっと。


<結論?>
相手がどんな座標にいても最大の面積を持つ、だと
Clsn1: 1
Clsn1[0] = -1073741824,-1073741824,1073741823,1073741823
とかが判定が一番大きくなりそうです。
レーザーの様に、一方方向だけで問題がない場合は、
xを 0前後~2147483647 にしてしまってもまぁいいかなと
判定を4つ指定していいなら、
Clsn1: 4
Clsn1[0] = 0,0, 2147483647, 2147483647
Clsn1[1] = 0,0, 2147483647,-2147483648
Clsn1[2] = 0,0,-2147483648, 2147483647
Clsn1[3] = 0,0,-2147483648,-2147483648
こんな判定にすれば最大になるかな、と思います。
また、防御側の食らい判定なら普通に最大値で問題はなさそうです。
Clsn2: 1
Clsn2[0] = -2147483648,-2147483648,2147483647,2147483647

ちなみに
Clsn1: 1
Clsn1[0] = -1073741824,-2147483648,1073741823,2147483647
こんな感じでy座標だけ限界にしておけば
「相手の判定の大きさとはほぼ無関係に、相手が自分と同じy座標にいる時にHITする」
という位置座標指定の攻撃になってちょっぴり面白いかも知れません。
自分がpos y=0にいれば、相手も地上にいる時、大きさとは無関係に当たる攻撃。

最大値からすこし小さくすれば幅を持たさられるので
Clsn1: 1
Clsn1[0] = -2147483548,-2147483548,2147483547,2147483547
こんな感じなら自分の周囲200四方に相手の座標があればHITです。
(判定もなんかなんかそれっぽいのが表示されます。)

判定はトリガーで直接調べられませんが、座標なら簡単にわかるので便利!
・・・・・・ないなー(´・ω・`)
そもそも普通の数値の動きじゃないと思いますので、
精々半分位までで留めておいたほうが賢いかも知れません。
何か他で別の使い方をしてるかもですし
スポンサーサイト

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

http://mistylake.blog111.fc2.com/tb.php/193-fd0abcb2
この記事にトラックバックする(FC2ブログユーザー)

| HOME |

FC2Ad

    プロフィール

    Arima

    Author:Arima
    FC2ブログへようこそ!

    ダウンロード

    最新記事

    最新コメント

    最新トラックバック

    月別アーカイブ

    カテゴリ

    未分類 (5)
    MUGEN (215)
    注意事項 (1)

    リンク

    検索フォーム

    QRコード

    QR

    管理用

    FC2カウンター

    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。