最後の命と、そのあとに来るもの、マリオのように
命のレッスンのレベルを、終わりまで遊ぶ。三つの命をすべて失って、最後の命でゲームが何をするかを見てほしい: 今度は残りの命の画面は出ず、ひとりでに留まる GAME OVER の画面、それから Start を待つタイトルが来る。プログラムは 1,576 バイトの命令 610 個で、作り方も確かめ方も同じだ。
ここで遊ぶ 机の上で変えてみる カートリッジ。NES のカートリッジを遊べるところならどこでも遊べる: gameover.nes
画面の上では
最後の死は画面をひとつ飛ばし、ふたつ足す
スーパーマリオブラザーズでは、最後の命もほかの命と同じに失われる。固まり、跳ね、落ちる。だがそのあとが違う。絵は残りの命の画面ではなく GAME OVER のために消され、その画面は押すものもないまま七秒ほど留まり、それからタイトルがまた描かれ、命は新しいゲームの始まりの数に戻る。タイトルで Start を押せば、いつものカードを通ってレベルへ入る。このカートリッジも、自前の画面と間合いと言葉で同じことをする。
| このカートリッジ | スーパーマリオブラザーズ | |
|---|---|---|
| 最後の触れから GAME OVER の画面までのフレーム数 | 55 | 211 |
| その画面に書かれるタイル数、消去を除いて | 9 | 105 |
| タイトルまで留まるフレーム数 | 255 | 422 |
| タイトルに書かれるタイル数 | 19 | 1,794 |
| タイトルで Start を押してから遊べるまでのフレーム数 | 1 | 168 |
| 命は新しいゲームの始まりの数に戻る | はい | はい |
書いたとおりに
このレッスンが扱うプログラムの部分。プログラム全体は、ただのテキストファイルだ: gameover.s
;; The screen between rounds, drawn with the picture off: both tables
;; empty, every sprite out of sight, and a line of words in the middle,
;; LIVES and the count for 120 frames, or GAME OVER with none left, which
;; stays 255 frames before the title.
lives:
JSR wipe
LDA #$21
STA $2006
LDA #$CC
STA $2006
LDA $52
BEQ gameover
LDX #$00
word1:
LDA livesword,X
STA $2007
INX
CPX #$06
BNE word1
LDA $52
CLC
ADC #$2A
STA $2007
LDA #$03
STA $50
LDA #$78
STA $51
JMP shown
gameover:
LDX #$00
word2:
LDA overword,X
STA $2007
INX
CPX #$09
BNE word2
LDA #$04
STA $50
LDA #$FF
STA $51
shown:
LDA #$00
STA $2005
STA $2005
LDA #$1E
STA $2001
RTS
;; The title, drawn the same way: its two lines of words, OUR GAME above
;; and PRESS START below, and then it waits.
titlescreen:
JSR wipe
LDA #$21
STA $2006
LDA #$8C
STA $2006
LDX #$00
word3:
LDA ourword,X
STA $2007
INX
CPX #$08
BNE word3
LDA #$22
STA $2006
LDA #$0B
STA $2006
LDX #$00
word4:
LDA startword,X
STA $2007
INX
CPX #$0B
BNE word4
LDA #$06
STA $50
LDA #$00
STA $2005
STA $2005
LDA #$1E
STA $2001
RTS
;; The picture off, both tables emptied, every sprite out of sight.
wipe:
LDA #$00
STA $2001
LDA #$20
STA $2006
LDA #$00
STA $2006
TAX
LDY #$04
wipe2:
STA $2007
INX
BNE wipe2
DEY
BNE wipe2
LDA #$FF
hide2:
STA $0200,X
INX
BNE hide2
RTS
;; LIVES and a space, GAME OVER, OUR GAME and PRESS START, in our letters.
livesword:
.byte $1B,$18,$25,$14,$22,$00
overword:
.byte $16,$10,$1C,$14,$00,$1E,$25,$14,$21
ourword:
.byte $1E,$24,$21,$00,$16,$10,$1C,$14
startword:
.byte $1F,$21,$14,$22,$22,$00,$22,$23,$10,$21,$23この前は: マリオのように、穴に落ちる