NEStinymachines

マリオのリフトのように、乗ると運んでくれる動く足場

地面の穴の上を、リフトが行き来している。遊んでリフトに乗り、パッドから手を離してみてほしい: 四角はリフトに乗って向こうへ行って戻り、その先の端から向こう側へ歩いて降りる。プログラムは 1,122 バイトの命令 420 個で、作り方も確かめ方も同じだ。

ここで遊ぶ 机の上で変えてみる カートリッジ。NES のカートリッジを遊べるところならどこでも遊べる: platforms.nes

画面の上では

フレーム 70
フレーム 70
フレーム 110
フレーム 110
フレーム 150
フレーム 150
フレーム 230
フレーム 230

動くものの上に立てば、一緒に動く

スーパーマリオブラザーズのリフトは敵と同じようなもので、同じ枠に置かれ、一歩ずつ動かされる。マリオがその上に立っていると、ゲームは同じフレームにリフト自身の一歩だけマリオを動かすので、何も押さなくてもマリオはリフトの上の同じ場所に留まる。1-2 のリフトがマリオを運ぶのを見て、その一歩一歩を確かめた。このカートリッジも同じやり方で、うまくいく順序でそれをする: まずリフトが動き、次にその上の四角が同じだけ動き、パッドが求めることはそのあとだ。

このカートリッジスーパーマリオブラザーズ
リフトが動く向き横縦
一歩のピクセル数と、歩と歩のあいだのフレーム数1、1 フレームごと1、1 フレームごと
端から端まで動くピクセル数48無い: 画面の下へ出て、上から戻ってくる
プレイヤーが乗っていたフレーム数15877
その向きに一秒何も押さずに乗っているあいだの歩のうち、プレイヤーを同じだけ動かしたもの68 のうち 6872 のうち 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

この前は: マリオのように固い、地面とブロックと壁

次は: マリオのように、ブロックから出るコインと点数

すべてのレッスン