NEStinymachines

最後の命と、そのあとに来るもの、マリオのように

命のレッスンのレベルを、終わりまで遊ぶ。三つの命をすべて失って、最後の命でゲームが何をするかを見てほしい: 今度は残りの命の画面は出ず、ひとりでに留まる GAME OVER の画面、それから Start を待つタイトルが来る。プログラムは 1,576 バイトの命令 610 個で、作り方も確かめ方も同じだ。

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

画面の上では

フレーム 50
フレーム 50
フレーム 600
フレーム 600
フレーム 850
フレーム 850
フレーム 950
フレーム 950

最後の死は画面をひとつ飛ばし、ふたつ足す

スーパーマリオブラザーズでは、最後の命もほかの命と同じに失われる。固まり、跳ね、落ちる。だがそのあとが違う。絵は残りの命の画面ではなく GAME OVER のために消され、その画面は押すものもないまま七秒ほど留まり、それからタイトルがまた描かれ、命は新しいゲームの始まりの数に戻る。タイトルで Start を押せば、いつものカードを通ってレベルへ入る。このカートリッジも、自前の画面と間合いと言葉で同じことをする。

このカートリッジスーパーマリオブラザーズ
最後の触れから GAME OVER の画面までのフレーム数55211
その画面に書かれるタイル数、消去を除いて9105
タイトルまで留まるフレーム数255422
タイトルに書かれるタイル数191,794
タイトルで Start を押してから遊べるまでのフレーム数1168
命は新しいゲームの始まりの数に戻るはいはい

書いたとおりに

このレッスンが扱うプログラムの部分。プログラム全体は、ただのテキストファイルだ: 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

この前は: マリオのように、穴に落ちる

次は: ゼルダのように、絵が滑ってどいて現れるアイテム画面

すべてのレッスン