マリオのように、動かないステータスバー
スクロールのレッスンの上に、レベルがその下でスクロールしても動かない帯を一本渡し、帯の中でタイマーが減っていく。プログラムは 1,071 バイトの命令 517 個で、作り方も確かめ方も同じだ。
ここで遊ぶ カートリッジ。NES のカートリッジを遊べるところならどこでも遊べる: status.nes
画面の上では
一枚の絵に、二つのスクロール
絵のチップのスクロールは一つで、絵は一ラインずつ描かれる。動くレベルの上に帯を止めておくには、絵の途中でスクロールを変える。いつ変えるかを知らなければならず、チップが知らせる方法は一つある: 最初のスプライトが背景の不透明な点の上に描かれると、フラグが立つ。だからスプライトを帯の下の線の裏に置き、プログラムはフラグを待って、その下のすべてにレベルのスクロールを設定する。スーパーマリオブラザーズは毎フレーム同じラインでレベルのスクロールを設定し、帯の中ではタイマーのほかは何も書き直していなかった。
| このカートリッジ | スーパーマリオブラザーズ | |
|---|---|---|
| レベルのスクロールを設定するライン、そうしたフレーム数、遊んだフレーム数のうち | ライン 31、1,440 フレームのうち 1,440 | ライン 31、180 フレームのうち 180 |
| 帯のスクロール、ブランクで設定 | 0, 0 | 0, 0 |
| タイマー: 行、列、タイルの数 | 2, 26, 3 | 3, 26, 3 |
| タイマー: 書き直しの間のフレーム数 | 24 | 23, 24, 25 |
| 遊んでいる間に帯へ書いたほかのもの | 0 | 0 |
書いたとおりに
このレッスンが扱うプログラムの部分。プログラム全体は、ただのテキストファイルだ: 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