マリオのように、レベルの中に描くタイトル
私たちの四角のためのタイトル画面: 二画面ぶんのレベル、SQUARE と書いた枠、メニュー、そして放っておくとひとりでに遊ぶデモ。遊んで待ってみるか、セレクトとスタートを押してみてほしい。プログラムは 1,181 バイトの命令 536 個で、作り方も確かめ方も同じだ。
ここで遊ぶ カートリッジ。NES のカートリッジを遊べるところならどこでも遊べる: title.nes
画面の上では
タイトルはレベルの一部
スーパーマリオブラザーズには、タイトル専用の絵がない。背景を消し、最初のレベルの最初の画面を数列ずつ描き、そのあと同じ絵の中にタイトルの枠とメニューを書き込む。カーソルもスプライトではない: セレクトを押すと、縦に並んだ背景のタイル三つを書き直し、カーソルを上か下に置く。誰も何も押さなければ、カウントダウンが尽きてデモが始まる: レベルがひとりでに遊ばれ、タイトルの枠は絵の一部なので、ほかの部分と一緒にスクロールして流れていく。デモが終わるか、デモの途中でスタートを押すと、すべてを消して描き直す。このカートリッジも、自前のレベルと枠とデモで同じように動く。
| このカートリッジ | スーパーマリオブラザーズ | |
|---|---|---|
| 最初に書いてからタイトルができあがるまでのフレーム数 | 25 | 28 |
| はじめに丸ごと消した背景の表の数 | 2 | 4 |
| そのあと書いたタイルの数 | 884 | 1,794 |
| セレクトでカーソルのために書くタイルの数 | 3 個、縦に並べて | 3 個、縦に並べて |
| 最後のセレクトからデモまでのフレーム数 | 367 | 500 |
| タイトルが戻るまでデモが遊ぶフレーム数 | 265 | 1,117 |
| デモの間にタイトルがスクロールで流れていく | はい | はい |
| デモ中のスタートからタイトルを描き始めるまでのフレーム数 | 1 | 5 |
| タイトルでのスタートから次の画面を描き始めるまでのフレーム数 | 1 | 4 |
書いたとおりに
このレッスンが扱うプログラムの部分。プログラム全体は、ただのテキストファイルだ: title.s
;; The title, waiting: Select moves the cursor and starts the countdown
;; over; Start wipes the title for play; the countdown running out starts
;; the demo.
waiting:
LDA $02
EOR #$FF
AND $01
TAX
AND #$20
BEQ noselect
LDA $43
EOR #$01
STA $43
LDA #$01
STA $09
LDA #$00
STA $44
LDA #$12
STA $45
RTS
noselect:
TXA
AND #$10
BEQ count
LDA #$00
STA $41
LDA #$06
STA $40
RTS
count:
INC $44
LDA $44
CMP #$14
BNE still
LDA #$00
STA $44
DEC $45
BNE still
LDA #$04
STA $40
still:
RTS
;; The demo: the pad is read only for Start, which brings the title back;
;; the square is moved by the list instead, entry by entry (frames, then
;; the pad), until an entry of 0 frames, which also brings the title back.
demo:
LDA $02
EOR #$FF
AND $01
AND #$10
BNE over
LDA $47
BNE playing
LDX $46
LDA presses,X
BEQ over
STA $47
INX
LDA presses,X
STA $0A
INX
STX $46
playing:
DEC $47
LDA $08
STA $02
LDA $0A
STA $01
STA $08
JSR walk
JSR jump
RTS
over:
JSR start
RTS