技術部の御供餅です。前回で絵の読み方を決めたので、今日から要素を1つずつ見ていきます。第1弾はクリボーです。
型は毎回同じにします——①どこに出るか ②実機で測る ③式にする ④外した話 ⑤走行で確かめる。④を必ず入れます。この連載でいちばん書く価値があるのは、そこだと思っているからです。
本記事は LLM による自動執筆パイプラインで生成されました。現在は人間が補助していますが、pareido.jp では最終的に AI が自律的にコンテンツを制作できる仕組みの構築を目指しています。
① どこに出るか
クリボーの id は $06 です。正規面では 1-1・1-2・1-3・1-4・2-1 に出ます。
今日の走行で、画面に居た総フレーム数を数えるとこうなりました。
| 面 | クリボーが居たフレーム数 |
|---|---|
| 1-1 | 3061 |
| 1-2 | 3893 |
| 1-3 | 1359 |
いちばん多いのは 1-2 です。以下の実測もほとんど 1-2 で採っています。
② 実機で測る
歩く速さは、ちょうど 0.5px/F
生の記録をそのまま貼ります(1-1、フレーム252 から)。
f252 x352 f253 x351 (Δ-1)
f254 x351 (Δ0) f255 x350 (Δ-1)
f256 x350 (Δ0) f257 x349 (Δ-1)
2フレームで1px。整数で持っているので1フレームおきに動くように見えますが、速さは −0.5px/F ちょうどです。別の場面で長く採っても同じで、14フレームで −7px でした。
大きさは変わりません。変わるのは向きだけです。向きは画面から取り、大きさは表の値を使います。
当たる範囲(横)は、±10px
前回、横は「座標どうしの距離」で見ると書きました。その距離を、接触したフレームそのもので測ります。
接触した dx … −10 −9 −8 −6 −4 −3 −2 −1 0 +1 +2 +4 +6 +8 +9 +10(33件)
当たらなかった … −11 以下(多数)/ +11 以上(多数)
±10 が当たる側、±11 からは当たらない。 境目が両側とも見本で挟めています。
★ ここは長らく「敵の幅10+余裕2=片側12」という全部の敵に共通の窓でした。その式は幅が 10px で頭打ちなので、クリボーもクッパも同じ窓だったことになります。詳しくは④で書きます。
当たる範囲(縦)は、足の差 −14〜+10
縦は足の高さの差で見ます。同じ器具(接触したフレームそのもの)で、1-1・1-2・1-4 の8か所から 48 件採れました。生の RAM の dy で並べます。
接触した dy … 10 11 12 13 14 15 16 17 18 ← 19 以上は1件も無い(48件)
クリボーの足は 生y+24、マリオの足は 生y+32 なので 8px ずれます。式の足の差に直すと 2〜10。上端は 10 です。
★ 下端(相手が自分より上)は、いまも見本が1件もありません。 ここは既定の −14 を据え置いています。測れたら直します。測っていないところに数字を作らない、というのがこの連載の決めごとです。
踏める境目は、足の差 6px ── ただし、踏みと死は重なっている
「上から落ちれば踏める」だけでは足りません。どれくらい上にいれば踏みなのかを測ります。
踏みは敵の状態バイトが変わったフレームで拾えます。そのフレームの敵はまだ動いていないので、確かな値です。死は接触の1フレーム前を採ります。
踏んだ … 足の差 3 4 5 7 8 9(29件)
死んだ … 足の差 0 0 6
重なっています。足の差 3〜6 は、踏むこともあれば死ぬこともある。
つまり、この2つを足の差だけでは分けられません。どんな値を置いても必ずどちらかを間違えます。
- 低い値にする … 「死ぬ組を踏みと読む」側に倒れる = 死ぬ
- 高い値にする … 「踏める組を死と読む」側に倒れる = 無害な敵を避けるだけ
だから実測どおりの値というものは存在しません。ここは「どちらを間違える側に倒すか」を選ぶ話で、6 を採っています。間違える向きを選んだのであって、成績を見て選んだのではありません。
★ 実際に 3(実測の下端)にしてみたら、1-1 が 18位相中18クリア → 1クリアになりました。踏めるはずの組を拾いに行って、死ぬ組まで拾ったわけです。
★ 本当に分けている条件は「落下しているか」で、それは式が別に見ています。足の差は、その上に乗せた余裕です(式の位置には 1〜3px の誤差があるので)。
★ 参考までに、ノコノコ($00)の踏みは 足の差 7〜15(13件)でした。敵ごとに違います。
踏むと、跳ね返る
今日の走行から、踏んだ瞬間をそのまま貼ります(1-2)。
f288 横+5 足差+12 マリオ足y196
f289 横+3 足差+9 マリオ足y199
f290 横+2 足差+5 マリオ足y203 ← ここで踏んだ
f291 横+0 足差+8 マリオ足y200
f292 横-1 足差+11 マリオ足y197
…
f299 横-12 足差+23 マリオ足y185 ← 頂点
そしてクリボーの x は f290 から 189 で止まりました。それまで2フレームに1px ずつ左へ動いていたのが、ぴたりと止まる。踏まれた、ということです。
マリオの足は 203 → 185 = 18px 上がり、頂点まで9フレームでした。
③ 式にする
以上をまとめると、こうなります。
もし(相手が踏める種類 かつ 落下中 かつ 自分の足 <= 相手の足 - 6)なら
相手を消す
自分に踏みつけの跳ね返りを与える ← 踏み切りと同じ形の放物線
そうでなく、dx が −10〜+10 かつ 足の差が −14〜+10 なら
死ぬ
3つの条件が要ります。落下中であること(地上で横から当たるのは踏みではない)、足の差が6px以上あること、そして跳ね返りを与えること。3つとも、入れていなかった時期があります。
★ 横の窓も縦の帯も、この敵のために測った値です。ほかの敵は、その敵のために測った値を使います(クッパの縦は −17〜+31、クッパの炎は −13〜−4)。まだ測れていない相手だけが、共通の既定に落ちます。
④ 外した話
(1) 足の差を 0 にしていた
最初の条件は「落下中で、足が相手の足以上の高さ」でした。接触の箱は 18px あるので、足が相手の足のすぐ上にいるだけで「踏んだ」になります。つまり、横から当たって死ぬ場面を「倒した」と読んでいました。
実例です(1-1 のフレーム1567)。
- 式:
A×4は「+81px・安全」——しかも唯一の生き残りだったので、これが選ばれる - 実機:同じ
A×4を走らせると、フレーム1595 にdx8 dy11で死亡
差0 の条件では、この dy11 が「踏んだ」に分類されていたわけです。
(2) 縦の箱が高すぎた
横は測って直したのに、縦は長らくマリオの体と同じ 16px のままでした。結果として、通り過ぎただけのクリボーを「踏んだ」ことにして、跳ね返りまで足していました。
実例(1-2 のフレーム9069、A×2):
- 実機:クリボーの上を素通りして x1112 に着地
- 式:踏んだ跳ね返りがついて x1153 まで飛ぶ
41px の差です。この状態で「安全だ」と読んだ手を選んでいたことになります。
(3) 踏んでも跳ね返りを与えていなかった
相手を消すだけで跳ね返りを入れていなかった時期は、拘束の長さを 23 フレーム短く読んでいました。
実例(1-1 の levelX1920、A×6):
- 式:「固定30F」
- 実機:フレーム1457 から 1510 の 53フレーム
その 23 フレームのあいだ、マリオはずっと空中です。空中では次の判断ができないので、機械は右を出し続け、クリボー4体の固まりへ流されて死んでいました(levelX2009。3機とも同じ死に方)。
(4) ★ そして、測り方そのものが揃っていなかった
いちばん大きい話を最後に書きます。上の①〜③を直したあとも、私は同じものを毎回ちがうやり方で測っていました。
- 接触の1フレーム前の値で決めたことがある(式は1フレーム動かしたあとの位置で見るので、縦で 3〜4px ずれる)
- 生の
dyで決めたことがある(式の「足の差」とは、敵ごとに 8〜24px ずれる) - 敵の種類を混ぜたことがある(クリボーとノコノコで踏みの範囲が違うのに)
- 踏みと死を混ぜたことがある
- 地形の当たり判定の寸法を借りたことがある(壁と床のために測った箱を、敵の窓に流用した)
そのせいで「実測どおりに直したら成績が落ちる → 別の説明を作る」を何度も繰り返しました。
直したのは値ではなく、測り方の側です。いまは5つを先に決めてから測ります——どの走行で/どの瞬間の/どの単位で/どの敵の・どの結末を/どこで。この記事の②の数字は、全部その5つを固定して採り直したものです。
そして採り直した結果、縦の上端が 15 → 10 に縮みました。これが 1-1 の最後の死因でした。跡を貼ります。
f1313 実機 x1523 足y196 / 式 x1523 足y196 ← 位置の予測は当たっている
f1314 式は s0(もう通り過ぎたクリボー・dx−9・dy20)を「踏んだ」と読んで跳ね返る
実機はそこでは当たらず、2フレーム後に s1(dx+10・dy13)に横から当たって死ぬ
外れていたのは位置ではなく、dy20 を「当たる」と読んだことでした。この1点を実測に直しただけで、1-1 は18通りの位相すべてでミス0クリアになりました。
★ この④に共通しているのは、どれも「判断の分かれ目」ではなく「当たり判定の寸法」か「測り方」だったことです。何px 以内なら跳ぶ、といった規則は1つも足していません。
⑤ 走行で確かめる
では、いまの式はこれを読めているのか。1-2 の同じ場面を見てください。まず判断した瞬間です。

軌跡が「山ふたつ」になっています。
点を順に読むと、画面x106 の y204 から上がって x124 で頂点 y179、そこから下りて x136〜139 で y193〜192——ここがクリボーの高さです。そしてもう一度上がって x151〜154 で y176、最後に x169 の y203 へ落ちる。
つまり機械は、跳んで、踏んで、跳ね返って、着地するところまで読んだうえでこの手を選んでいます。同じ場面で A×4・A×6・A×8・A×10 は全部排除されていて、理由はどれも「クリボーに当たる・落下中でない」=踏みではなく死、でした。
そして 24 フレーム後、実際にこうなりました。

★ 2枚とも、上の測り直しより前に描いたものです。黄色い帯は測り直しの前の寸法(横 23px・縦は足の差15まで)で出ています。
答え合わせ
この手は 44 フレーム拘束でした。長い先の予測がどれくらい当たったかを出します。
| 予測 | 実測 | |
|---|---|---|
| 44フレーム後(f310)の位置 | levelX 224 | levelX 217 |
| 着地 | f310 に足y208 | f311 に足y208(levelX 219) |
7px 手前、着地は1フレーム遅い。 前回お見せした25フレーム先の「ぴたり」に比べると、先を読むほどずれます。
走行全体での答え合わせはこうでした。
| 面 | 件数 | 横の平均(最悪) | 縦の平均(最悪) |
|---|---|---|---|
| 1-1 | 536 | 0.5px(27) | 0.7px(36) |
| 1-2 | 745 | 0.3px(23) | 0.8px(80) |
そしてこの2本とも、クリボーで一度も死んでいません。横が重なった組は 1-1 で 186件、1-2 で 168件あって、そのうち「死んだ瞬間の組」は 0件。どちらの面もミス0でクリアしています。
⚠ ただし縦の最悪 80px の1件は、いまも説明できていません。1-2 のフレーム1061 から12フレーム先で、式は (937, 208)、実機は (960, 32) でした。横も 23px 外しています。12フレームでクリボーが動ける距離は 6px なので、「同じ敵の予測が外れた」のではなく、別の物を追っている(スロットの使い回し)疑いがあります。1-2 は 18通りの位相のうち 8通りしか通っておらず、その死因もここです。分かったら書きます。
まとめ
- クリボーは id
$06、正規面では 1-1・1-2・1-3・1-4・2-1。歩く速さはちょうど 0.5px/F(2フレームで1px) - 当たる範囲は 横 dx −10〜+10(33件)/縦 足の差 −14〜+10(48件)。★ 縦の下端だけは見本が1件も無く、既定の据え置き
- 踏める条件は「落下中 かつ 足が相手より 6px 以上 上」。踏むと18px 跳ね返る
- ★ ただし踏み(3〜9)と死(0・0・6)は足の差 3〜6 で重なる。実測どおりの値は存在せず、どちらを間違える側に倒すかを選んでいる
- 外した4件のうち3件は当たり判定の寸法、最後の1件は測り方そのものだった。判断の規則は1つも足していない
- 機械は踏んで跳ね返るところまで読んだうえで手を選んでいる(軌跡が山ふたつになる)
- 縦の帯を測り直しただけで、1-1 は18通りの位相すべてでミス0クリアになった
- ⚠ 1-2 の縦 80px の外れは未解決。ここが 1-2 の死因
次回はクッパと炎です。クリボーとは何もかも違います——敵スロットを2つ使い、跳びは固定の放物線で、着地から次の踏み切りまでの最短フレーム数が決まっている。そして第1回でお見せしたとおり、いまも勝てていない相手です。
2026-09-16 の訂正と、その後
この回を書いたあと、自動プレイの側が大きく変わりました。この記事の記述のうち、いまと違うところを挙げておきます。
- 敵とマリオの当たり箱は、実測ではなく ROM の表から引くようになりました。 物ごとの箱は RAM
$049a + スロットが行を指し、 ROM$e1fdから4バイトずつ(左・上・右・下のずれ)並んでいます。マリオも同じ表で、大きいマリオが2,8,14,32、小さいマリオが3,20,13,32です。 - 踏みか傷かの判定も ROM の形に揃えました(
$d8f9)。縦速度の整数部が正、または id ≧ 7 で「マリオの生y + 12 < 敵の生y」なら踏み、 どちらでもなければ傷です。当たりを見るのは偶数フレームだけで、重なり始めた最初の1回だけ当たります($0491)。 - 走行の現在地(2026-09-16): ブラウザのベンチで本編32面を単面で全部クリア(100点)、通しは 1-1 から 5-1 まで(51.6点)。 ヘッドレスの32面は、無敵なしで 32/32(うち30面はミス0)、無敵ありで 32/32(全面ミス0)です。
- クリボーの「0.5px/フレーム」「崖では落ちる」は変わりません。変わったのは当たる範囲の出どころで、実測の帯ではなく ROM の表になりました。
原典:スーパーマリオブラザーズ(ファミリーコンピュータ/1985年)© 1985 NINTENDO ── 掲載した画面写真は、上記作品を実ROMで動作させて撮影したものです(技術解説のための引用)。図は撮影した画面に、こちらで作成した解析用の描画を重ねたものです。原権利者の許諾・監修を受けたものではありません。