さて、前回スペランカーの赤いクスリにまつわる裏技を一通り説明したが、ページ数の関係上スペランカー体内で起きている現象を大分省略して説明した。 そこで、今回はその補足講義を、スペランカー考古学チームの協力を得て解説する。

Spelunker D・N・A

okureflow

アルゴ解説

左の図は遺跡から発掘されたスペランカーのDNAに関する古文書のうち、 オクレモードが”OFF”になる仕組みをフローチャート化したものである。

オクレを取得すると

オクレ兄さん(赤いクスリ)を取得した場合、スペランカー内部では OkureTimerの値を1引く処理が行われる。 スペランカーが通常モードの場合、OkureTimerの値は0である。OkureTimerは符号無し8bitのため1を引くと255となる。 これを念頭において、なぜオクレモードがOFFになるのか説明していこう。

オクレモードがOFFになるまで

さて、スペランカー体内では左の図のルーチンを4フレームに1回(約0.067秒に1回)実行している。 このルーチンが実行されると、まずスペランカーはOkureTimerの値をチェックする。 OkureTimerの値が0より大きい場合は"N"に分岐しオクレモード処理を続行する。

スペランカーはオクレに関して処理の高速化のため(?)2つの変数でオクレを管理している。

  • オクレモードフラグ
  • オクレタイマー

である。オクレタイマーはオクレモードかどうかの判定にもちいられ、 オクレモードフラグは実際の移動量の増加に使われる。

さて、オクレモード中と判定されると、オクレモードフラグがONになり、 次にオクレタイマーを1引く処理が行われる。 その後オクレタイマーが0になったかどうかチェックされる。 このときオクレタイマーが0になるとオクレモード終了ルーチンが呼ばれる("Y"分岐)。 まだオクレタイマーの時間が残っている場合はオクレモードのまま処理を続行する。

オクレ兄さん永久持続理論とは?

それでは、オクレ理論を用いるとスペランカーはなぜオクレモードのままなのだろうか?これには先ほど述べた2つ法則が関係している。

  1. オクレを取得するとOkureTimerが1引かれる。
  2. オクレモードフラグが実際の移動量に関係する。

さて、オクレが切れる最後の瞬間(上の図中の赤い矢印の位置)でのパラメータは

  • OkureTimer = 1
  • OkureMode = on

となっている。しかし、この瞬間に2つ目のオクレを取得するとどうなるのだろうか? オクレ取得ルーチンはオクレを取得した瞬間からオクレ効果を出すために、OFFにするルーチンよりも前に実行される。

つまり OkureTimerを1引いてしまうのだ。つまり赤い矢印の位置の時パラメータが

  • OkureTimer = 0
  • OkureMode = on

となってしまう。するとスペランカー体内ではOkureTimerが0のため、 な〜んだオクレ取ってないじゃん。と勘違いし、オクレタイマー減算及び

オクレモードフラグをOFFにするルーチンをスキップしてしまう

そのため、音楽こそ通常に戻るもののオクレ効果は持続する。以上がオクレ理論発動の原理である。

結局オクレ理論って?

かなり暴走気味に解説してしまいましたが、結局のところオクレ理論って スペランカーのバグなんじゃ、、、 なんて思ったとしたら、即座にその考えを捨てること。 条件が超限定された上に特定の1フレームのみでしか起きないという、 まさにスペランカー的難しさを誇る奥義と理解してほしい。

でもバグだよな、、、(ボソ

補足の補足

さて、ここまで読んでくれた人で、同様にして永久無敵とか、 永久点数2倍とかも実現するのではと思い必死に1フレームを狙って努力している人がいたら悪いので、 永久無敵、永久点数2倍は起きない事もここで触れておこう。 無敵と点数2倍はタイマーの値自身をフラグとして用いているため、 オクレ理論を適用することはできないのだ、、、無念。

こうして、またしてもスペランカー無敵技は否定されたのであった。 真のスペランカー無敵技を求めて、スペランカー考古学チームは今日も遺跡の発掘を黙々と進めるのであった(涙)