NEStinymachines

走ること、そして走ってのジャンプが高く上がるわけ

ジャンプのレッスンの四角に、B で走ることを足した。走ると速く、走りながらのジャンプは速く始まって強く引かれるので、高く上がり、それでもほどよく降りてくる。プログラムは 616 バイトの命令 276 個で、作り方も確かめ方も同じだ。

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

画面の上では

フレーム 150
フレーム 150
フレーム 170
フレーム 170
フレーム 430
フレーム 430
フレーム 445
フレーム 445

速さで選ぶ、二つのジャンプ

スーパーマリオブラザーズで B を押していると、最高速とそこへの速まり方が上がる。いろいろな速さで跳んでみると、速さにつれて伸びる一つのジャンプではなく、二つのジャンプがあった: 歩く速さまでは一方、それより速ければもう一方で、そちらは速く始まり、上りも下りも強く引かれる。走りながらのジャンプは歩くジャンプを伸ばしたものではなく、跳ぶ瞬間に選ばれる別の数の組だ。このカートリッジも同じように選ぶ。

このカートリッジスーパーマリオブラザーズ
歩く最高速、1 フレームあたりのピクセル1.51.5
走る最高速と、B を押してそこに達するまでのフレーム数2.5、452.5、45
歩いてのジャンプ: 最初の上向きの速さ、A を押している間の引き、その後の引き4、30/256、96/2564、30/256、96/256
走ってのジャンプ: 同じもの5、40/256、144/2565、40/256、144/256
A を 20 フレーム押したときの上がり: 歩いて、走って63、7563、75
跳ぶ前の速さ (16 分の 1 単位): 弱いジャンプの最も速いもの、強いジャンプの最も遅いもの24.5、25.3824、25

書いたとおりに

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

;; Up and down: a new press of A on the ground starts a jump.
jump:
    LDA $03
    BNE air
    LDA $02
    EOR #$FF
    AND $01
    AND #$80
    BEQ done
;; How fast it was going chooses the jump: $18 is 0 for the light one,
;; 1 for the strong one (speed 25/16 or more).
    LDA #$00
    STA $18
    STA $16
    LDA $13
    CMP #$01
    BCC light
    BNE strong
    LDA $12
    CMP #$90
    BCC light
strong:
    INC $18
    LDA #$FB
    STA $17
    JMP leapt
light:
    LDA #$FC
    STA $17
leapt:
    LDA #$01
    STA $03

すべてのレッスン