未整理解析ネタ

ボスのライフバー

<BSLコマンドで表示できるおなじみのアレだが、このライフバーの長さの基準値は表示の瞬間に決まっている。
つまりHP1000のボスを相手にしたとき、ライフバーが表示される前にHPを100削ったとしても、ライフバーが表示された瞬間はMaxの長さで表示され、削っていなかった場合と見た目は同一の長さとなる。
見た目には削れていないが、実際のHPは削れているため無駄撃ちとはならない。
原作のボロス第二形態において、タイムアタックではよくライフバー出現前から攻撃しているのはこのためである。

<CATと<SAT

この2つのコマンドは何が違うのか謎と言われていたが、内部処理は全く同じであると現在明らかになっている。

メニュー画面

以下のようにメニュー画面を挟みながらボタン入力を行うことで、通常ゲーム画面の時間において2F連続で「押した瞬間」の判定が作り出せる。

実フレーム時間(赤:通常ゲーム画面,青:メニュー画面,太字は押した瞬間判定)
1 2 3 4 5
Z o o
Q o o

通常ゲーム画面時間
1 2 3
Z o o

+ 詳しい解説
洞窟物語は各キーの入力管理に

「現在のフレームで押されているキー」
「前のフレームで押されていたキー」
「現在のフレームで押され始めたキー」

の3種類の変数を用いている。

「現在のフレームで押され始めたキー」は、

前のフレームにおいて押されておらず、かつ現在のフレームにおいて押されている

という条件で判定されている。(これを「押した瞬間判定」と呼称)
これらの変数はどの画面状態でも共有されており、分けられてはいない。
これを利用すると、メニュー画面などを介することによって疑似的に「2F連続で『押した瞬間』にする」といった芸当ができる。

応用例として、通常はジャンプしてからブーストを始めるという時、ジャンプ入力→離す→再びジャンプ入力という操作が必要になるが、この技法を用いることでゲーム内時間においては「ジャンプしたフレームの次のフレームでブーストを始める」といったことが可能になる。
+ 3F以上の判定を作る場合
上記の方法だと3F連続での押した瞬間判定は発生できない。
なぜなら以下のようになってしまうからである。
1 2 3 4 5 6 7 8
Z o o o
Q o o o o
本当は5のフレームで再びメニュー画面を開きたいのだが、メニュー画面への移行には「押した瞬間判定」を必要とする。4と5でQが連続して押されているため、6のフレームではメニュー画面に行けない。

しかしマップシステムがある場合、この制限をかいくぐることが可能と思われる。(未検証)
緑はマップ画面である。
1 2 3 4 5 6 ... 7 ... 8 9
Z o o o o
Q o o o
W o
上のようにメニュー画面とマップ画面を交互に利用することによって無限に連続した押した瞬間判定を作り出すことが可能と思われる。

マップ画面は開閉に長いフレーム数を要するため、実時間最短を目指すTAでの利用は現実的でないが、にくまるカウンター記録での最短などを目指す場合は利用価値があると思われる。
  • メニュー画面やマップ画面と違い、Escキーの黒画面は使えない。Escキーの画面はF1で戻る際に押した瞬間判定をリセットするためである。
  • 武器の連射では必ずしも有用ではない。武器の連射には別途タイマー変数が使われており、押した瞬間判定を作れば撃てるというものではない。

ブースター2.0における下向きブースト

ブースターの処理も重力加速度の処理も全く同じ「加速」であり、加速量の違いのために最大速度まで達するまでの時間が違うに過ぎない。よって、下向きに最大速度に達したら下向きにブーストを行っても全く無駄である(せいぜいX速度がキャンセルされるくらい)。
ブースターは1Fで最大速度に達するため、下向きにブースターを吹かす場合、燃料の節約を考えると理想的には1Fだけ吹かすのが最善である。

ブースター2.0なしでの横移動に関する考察

  • 空中での横加速は32であり、歩きでの横加速は実質34である。加速は歩きの方が速い。
  • 空中では速度が812以上になると加速されなくなる。812-1+34=845なので最大速度は理論上845となる。
  • 812-1+32=843なので、812を空中で超える場合は843が限界速度となる。
  • 歩きの場合は速度が812以上になるたびに摩擦で速度が51減る。34*3=51*2であるため、飽和状態での速度変化は5F周期になる。基準速度をvとした場合,平均速度は
v+(\sum_{k=1}^{3}34k-\sum_{k=1}^{2}51k)/5=v+10.2
となる。812-51=761≦v≦777=811-34であるため、歩行の平均速度は771.2~787.2となる。
ジャンプ中の最大速度は812~845であることから、闇雲にジャンプしてさえいれば歩行より速くなる。
速度0から自力で加速する場合…
  • 32*20+34*5=810なので、5F歩いてからジャンプすると速度842が出る。
  • 34*14+32*10=796,796+32=828,828-51+34=811なので、14F歩いてからジャンプして空中に11F以上留まり、着地後2F歩いてから再びジャンプすると最高速度845が出せる。

ブースター2.0での斜め移動

ブースター2.0は噴射開始時に違う方向の速度を消してしまう。
縦噴射時は横の入力を受け付けるが、横噴射時はそのような訳にいかないため、横斜めのブースター移動は若干の工夫が要る。
横ブーストしたまま縦方向の速度を付ける方法としてはダメージ、マシンガン、スプライトとの衝突、風(水流)、扇風機、壁などがある。
横噴射時に横壁に当たると上に速度が付くので、一瞬横壁に当たってすぐに壁から離れるという方法がある。聖域のわたり廊下などで有用。

最速慣性

ブースター2.0は噴射停止(ジャンプボタンを離す、もしくはガス切れ)時に速度を半分にしてしまうため、長距離にわたって慣性を働かせ続けるにはブロックに「乗り上げる」テクニックが一般的に使われる。これによって「噴射停止」という処理をしないまま「噴射していない状態」に持ち込むことが出来るため、速い慣性が保たれる。
しかし乗り上げる際に当然摩擦を受けるため、一般的に慣性を保つべく乗り上げた後すぐにジャンプするが、着地時間を0にできない以上減速も0にできない。
ジャンプするには着地中判定を必要とするため、最低でも"着地"→"ジャンプ始め"の2Fの摩擦を受けなければならない。しかし、あるテクニックによって摩擦を1Fだけで済ますことができる。
通常の真横移動ではなく、斜め上移動を行うのである。上方向にも速度が付いた状態で乗り上げることによって、着地した瞬間にはもう宙に浮き始めているため、次のフレームで摩擦を受けることはない。
斜め上方向への移動で乗り上げさえすれば良いため、上方向への速度の付け方によって実現方法はいくつか考えられる。

硬いスプライトとブロックの違い

ブロックに歩いてぶつかり続けている状態でジャンプする。するとブロックを飛び越えた瞬間の自機の速度ベクトルは斜め上を向いている。つまり横方向にも速度がついているのである。
ブロックに突っかかっている間は横方向に速度が無いと思うとこれは不自然な挙動だが、実際にはブロックに突っかかっていても歩き続けている間は横方向に速度が溜められている。そのためこのような挙動となる。
しかしプレスや扇風機などの硬いスプライトでは、歩きながら突っかかっても速度が溜まるなどと言うことはないため、ジャンプして飛び越えた瞬間の速度ベクトルは真上を向く。
最終更新:2018年11月03日 23:02