NEStinymachines

マリオのように、命を失ってやり直す

命が三つある、歩き手たちのレベル。遊んで歩き手に歩いてぶつかってみてほしい: 一回が止まり、四角が跳ねて落ち、残りの命を知らせる画面が出て、レベルがまた始まる。三つとも失うと終わりが見える。プログラムは 1,456 バイトの命令 566 個で、作り方も確かめ方も同じだ。

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

画面の上では

フレーム 40
フレーム 40
フレーム 70
フレーム 70
フレーム 160
フレーム 160
フレーム 1300
フレーム 1,300

命を失うのは、それだけで短い一場面だ

スーパーマリオブラザーズでマリオがクリボーに触れても、ゲームはすぐに次の挑戦へは行かない。すべてが止まり、マリオは触れられた場所でしばらく固まったままになる。それから跳ね上がり、地面など無いかのように、まっすぐ画面の下へ落ちていく。命が取られるのは、落ち切ってからだ。そのあと絵が消され、残りの命を見せる素朴な画面になり、しばらくしてレベルが初めから始まる。このカートリッジも、自前の間合いと、もっと低い跳ねと、自前の言葉で同じ場面を演じる。

このカートリッジスーパーマリオブラザーズ
触れたとき、すべてが止まっているフレーム数2116
跳ねが上るピクセル数2453
触れてから命が取られるまでのフレーム数55208
そこから絵が消されるまでのフレーム数02
また遊べるようになるまでのフレーム数121168
レベルは初めからやり直すはいはい

書いたとおりに

このレッスンが扱うプログラムの部分。プログラム全体は、ただのテキストファイルだ: lives.s

;; The square and each walker: closer than 14 pixels across and 14 up
;; and down (the walkers stand on the ground, their top at 192) is a touch,
;; and the round stops there: the square hangs for 20 frames with the hop
;; already in it, 4 pixels a frame upward.
touch:
    LDX #$01
near:
    LDA $11
    SEC
    SBC $40,X
    BCS across1
    EOR #$FF
    ADC #$01
across1:
    CMP #$0E
    BCS apart
    LDA $15
    SEC
    SBC #$C0
    BCS down1
    EOR #$FF
    ADC #$01
down1:
    CMP #$0E
    BCS apart
    LDA #$01
    STA $50
    LDA #$14
    STA $51
    LDA #$00
    STA $16
    LDA #$FC
    STA $17
    RTS
apart:
    DEX
    BPL near
    RTS
;; The fall: the speed moves the square and pulls 96/256 a frame, up to 4
;; pixels a frame, through anything. Past the bottom of the screen a life
;; is taken and the screen for what is left comes up.
drop:
    CLC
    LDA $14
    ADC $16
    STA $14
    LDA $15
    ADC $17
    STA $15
    CLC
    LDA $16
    ADC #$60
    STA $16
    LDA $17
    ADC #$00
    STA $17
    BMI dropping
    CMP #$04
    BCC low
    LDA #$00
    STA $16
    LDA #$04
    STA $17
low:
    LDA $15
    CMP #$F0
    BCC dropping
    DEC $52
    JSR lives
dropping:
    RTS
;; 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, or GAME OVER with none left; it stays 120 frames.
lives:
    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
    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
    JMP shown
gameover:
    LDX #$00
word2:
    LDA overword,X
    STA $2007
    INX
    CPX #$09
    BNE word2
    LDA #$04
    STA $50
shown:
    LDA #$78
    STA $51
    LDA #$00
    STA $2005
    STA $2005
    LDA #$1E
    STA $2001
    RTS

この前は: マリオのように、世界を止めておくポーズ

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

すべてのレッスン