NEStinymachines

マリオのように、レベルの中に描くタイトル

私たちの四角のためのタイトル画面: 二画面ぶんのレベル、SQUARE と書いた枠、メニュー、そして放っておくとひとりでに遊ぶデモ。遊んで待ってみるか、セレクトとスタートを押してみてほしい。プログラムは 1,181 バイトの命令 536 個で、作り方も確かめ方も同じだ。

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

画面の上では

フレーム 30
フレーム 30
フレーム 300
フレーム 300
フレーム 600
フレーム 600
フレーム 1300
フレーム 1,300

タイトルはレベルの一部

スーパーマリオブラザーズには、タイトル専用の絵がない。背景を消し、最初のレベルの最初の画面を数列ずつ描き、そのあと同じ絵の中にタイトルの枠とメニューを書き込む。カーソルもスプライトではない: セレクトを押すと、縦に並んだ背景のタイル三つを書き直し、カーソルを上か下に置く。誰も何も押さなければ、カウントダウンが尽きてデモが始まる: レベルがひとりでに遊ばれ、タイトルの枠は絵の一部なので、ほかの部分と一緒にスクロールして流れていく。デモが終わるか、デモの途中でスタートを押すと、すべてを消して描き直す。このカートリッジも、自前のレベルと枠とデモで同じように動く。

このカートリッジスーパーマリオブラザーズ
最初に書いてからタイトルができあがるまでのフレーム数2528
はじめに丸ごと消した背景の表の数24
そのあと書いたタイルの数8841,794
セレクトでカーソルのために書くタイルの数3 個、縦に並べて3 個、縦に並べて
最後のセレクトからデモまでのフレーム数367500
タイトルが戻るまでデモが遊ぶフレーム数2651,117
デモの間にタイトルがスクロールで流れていくはいはい
デモ中のスタートからタイトルを描き始めるまでのフレーム数15
タイトルでのスタートから次の画面を描き始めるまでのフレーム数14

書いたとおりに

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

すべてのレッスン