NEStinymachines

マリオのように固い、地面とブロックと壁

ジャンプのレッスンの四角を、自前の小さなレベルに置いた: 地面、頭上のブロック、そして壁。遊んで、ブロックの下で跳び、それから壁へ歩いて押し続けてみてほしい。プログラムは 1,078 バイトの命令 396 個で、作り方も確かめ方も同じだ。

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

画面の上では

フレーム 70
フレーム 70
フレーム 88
フレーム 88
フレーム 104
フレーム 104
フレーム 250
フレーム 250

ブロックのあるところでジャンプは終わる

スーパーマリオブラザーズで、マリオが跳んでブロックにぶつかると、ジャンプはそこで止まる: 頭がブロックに触れたフレームで上向きの速さが消え、その場から落ちていく。突き上げられたブロックのタイルは消え(跳ね上がる姿はスプライトで描く)、数フレーム後に使用済みのブロックとして戻る。壁では、右を押し続けても位置は動かない: ゲームが速さを取り上げ続け、速さはまた溜まっては数フレーム後にまた取り上げられる。このカートリッジは、16 ピクセル角のブロックの格子としてレベルをメモリに持ち、四角自身の縁で調べる。歩くときは前を、上るときは上を、落ちるときは下を見て、同じことをする。

このカートリッジスーパーマリオブラザーズ
ブロックに触れたとき、まだ上っていた速さ(ピクセル毎フレーム)33
触れてから地面に立つまでのフレーム数1414
触れてからブロックのタイルが消えるまでのフレーム数10
使用済みとして描き直すまでのフレーム数1316
壁で横の速さが取り上げられた回数と、その間のフレーム数24 回、7 フレームおき21 回、7, 8, 9 フレームおき
壁から一ピクセル押し戻されるいいえはい

書いたとおりに

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

rising:
    LDA $15
    STA $21
    LDA $11
    STA $20
    JSR solid
    BNE head
    LDA $11
    CLC
    ADC #$0F
    STA $20
    JSR solid
    BEQ flying
head:
    PHA
    LDA $21
    AND #$F0
    CLC
    ADC #$10
    STA $15
    LDA #$00
    STA $14
    STA $16
    STA $17
    PLA
    CMP #$02
    BNE flying
    JMP bump
;; The two bottom corners, one pixel under the square: the block under
;; either, in A.
feet:
    LDA $15
    CLC
    ADC #$10
    STA $21
    LDA $11
    STA $20
    JSR solid
    BNE footed
    LDA $11
    CLC
    ADC #$0F
    STA $20
    JSR solid
footed:
    RTS
;; A block bumped from below: bumped in the level at once, and its tiles
;; blank now and drawn bumped 12 frames later. Its tiles' place: the
;; name table, 64 for each row of blocks and 2 for each column.
bump:
    LDX $22
    LDA #$03
    STA $0400,X
    TXA
    LSR A
    LSR A
    LSR A
    LSR A
    LSR A
    LSR A
    CLC
    ADC #$20
    STA $32
    TXA
    AND #$30
    ASL A
    ASL A
    STA $33
    TXA
    AND #$0F
    ASL A
    ORA $33
    STA $33
    LDA #$01
    STA $30
    LDA #$0C
    STA $31
    RTS

この前は: マリオのように見分ける、踏みつけとぶつかり

次は: マリオのクリボーのように、壁でも互いにでも向きを変える歩き手

すべてのレッスン