マリオのリフトのように、乗ると運んでくれる動く足場
地面の穴の上を、リフトが行き来している。遊んでリフトに乗り、パッドから手を離してみてほしい: 四角はリフトに乗って向こうへ行って戻り、その先の端から向こう側へ歩いて降りる。プログラムは 1,122 バイトの命令 420 個で、作り方も確かめ方も同じだ。
ここで遊ぶ 机の上で変えてみる カートリッジ。NES のカートリッジを遊べるところならどこでも遊べる: platforms.nes
画面の上では
動くものの上に立てば、一緒に動く
スーパーマリオブラザーズのリフトは敵と同じようなもので、同じ枠に置かれ、一歩ずつ動かされる。マリオがその上に立っていると、ゲームは同じフレームにリフト自身の一歩だけマリオを動かすので、何も押さなくてもマリオはリフトの上の同じ場所に留まる。1-2 のリフトがマリオを運ぶのを見て、その一歩一歩を確かめた。このカートリッジも同じやり方で、うまくいく順序でそれをする: まずリフトが動き、次にその上の四角が同じだけ動き、パッドが求めることはそのあとだ。
| このカートリッジ | スーパーマリオブラザーズ | |
|---|---|---|
| リフトが動く向き | 横 | 縦 |
| 一歩のピクセル数と、歩と歩のあいだのフレーム数 | 1、1 フレームごと | 1、1 フレームごと |
| 端から端まで動くピクセル数 | 48 | 無い: 画面の下へ出て、上から戻ってくる |
| プレイヤーが乗っていたフレーム数 | 158 | 77 |
| その向きに一秒何も押さずに乗っているあいだの歩のうち、プレイヤーを同じだけ動かしたもの | 68 のうち 68 | 72 のうち 72 |
| リフトの上面からのプレイヤーの高さは変わらなかった | はい | はい |
書いたとおりに
このレッスンが扱うプログラムの部分。プログラム全体は、ただのテキストファイルだ: platforms.s
;; Across: Right adds 10/256 a frame up to 1.5 pixels a frame; without
;; it the speed falls by the same until it is 0. Then the right edge's
;; two corners are looked up: in a block, the square goes back to touch
;; it and its speed across is taken away.
;; The lift: a pixel a frame along its path, turning at either end (x
;; 80, where the hole begins, and x 128, where its far end meets the far
;; side). A square standing on it is moved the same pixel on the same
;; frame, before anything the pad asks for; and moved by the step the
;; lift just took, so the turn comes after the carry (turned first, the
;; square went one way while the lift went the other, once at each end).
lift:
LDA $30
CLC
ADC $31
STA $30
LDA $32
BEQ carried
LDA $11
CLC
ADC $31
STA $11
carried:
LDA $30
CMP #$50
BEQ turn
CMP #$80
BNE moved
turn:
LDA #$00
SEC
SBC $31
STA $31
moved:
RTSこの前は: マリオのように固い、地面とブロックと壁