NEStinymachines

マリオのように、動かないステータスバー

スクロールのレッスンの上に、レベルがその下でスクロールしても動かない帯を一本渡し、帯の中でタイマーが減っていく。プログラムは 1,071 バイトの命令 517 個で、作り方も確かめ方も同じだ。

ここで遊ぶ カートリッジ。NES のカートリッジを遊べるところならどこでも遊べる: status.nes

画面の上では

フレーム 100
フレーム 100
フレーム 400
フレーム 400
フレーム 800
フレーム 800
フレーム 1200
フレーム 1,200

一枚の絵に、二つのスクロール

絵のチップのスクロールは一つで、絵は一ラインずつ描かれる。動くレベルの上に帯を止めておくには、絵の途中でスクロールを変える。いつ変えるかを知らなければならず、チップが知らせる方法は一つある: 最初のスプライトが背景の不透明な点の上に描かれると、フラグが立つ。だからスプライトを帯の下の線の裏に置き、プログラムはフラグを待って、その下のすべてにレベルのスクロールを設定する。スーパーマリオブラザーズは毎フレーム同じラインでレベルのスクロールを設定し、帯の中ではタイマーのほかは何も書き直していなかった。

このカートリッジスーパーマリオブラザーズ
レベルのスクロールを設定するライン、そうしたフレーム数、遊んだフレーム数のうちライン 31、1,440 フレームのうち 1,440ライン 31、180 フレームのうち 180
帯のスクロール、ブランクで設定0, 00, 0
タイマー: 行、列、タイルの数2, 26, 33, 26, 3
タイマー: 書き直しの間のフレーム数2423, 24, 25
遊んでいる間に帯へ書いたほかのもの00

書いたとおりに

このレッスンが扱うプログラムの部分。プログラム全体は、ただのテキストファイルだ: status.s

;; The split: wait for the flag from the last picture to clear, then for
;; sprite 0 to be drawn over the bar's line; everything under it gets
;; the level's scroll.
oldhit:
    BIT $2002
    BVS oldhit
newhit:
    BIT $2002
    BVC newhit
    LDA $21
    AND #$01
    ORA #$80
    STA $2000
    LDA $20
    STA $2005
    LDA #$00
    STA $2005
    JSR readpad
    JSR walk
    JSR jump
    JSR camera
    JSR strips
    JSR timer
    JSR draw
    JMP main

すべてのレッスン