走ること、そして走ってのジャンプが高く上がるわけ
ジャンプのレッスンの四角に、B で走ることを足した。走ると速く、走りながらのジャンプは速く始まって強く引かれるので、高く上がり、それでもほどよく降りてくる。プログラムは 616 バイトの命令 276 個で、作り方も確かめ方も同じだ。
ここで遊ぶ カートリッジ。NES のカートリッジを遊べるところならどこでも遊べる: run.nes
画面の上では
速さで選ぶ、二つのジャンプ
スーパーマリオブラザーズで B を押していると、最高速とそこへの速まり方が上がる。いろいろな速さで跳んでみると、速さにつれて伸びる一つのジャンプではなく、二つのジャンプがあった: 歩く速さまでは一方、それより速ければもう一方で、そちらは速く始まり、上りも下りも強く引かれる。走りながらのジャンプは歩くジャンプを伸ばしたものではなく、跳ぶ瞬間に選ばれる別の数の組だ。このカートリッジも同じように選ぶ。
| このカートリッジ | スーパーマリオブラザーズ | |
|---|---|---|
| 歩く最高速、1 フレームあたりのピクセル | 1.5 | 1.5 |
| 走る最高速と、B を押してそこに達するまでのフレーム数 | 2.5、45 | 2.5、45 |
| 歩いてのジャンプ: 最初の上向きの速さ、A を押している間の引き、その後の引き | 4、30/256、96/256 | 4、30/256、96/256 |
| 走ってのジャンプ: 同じもの | 5、40/256、144/256 | 5、40/256、144/256 |
| A を 20 フレーム押したときの上がり: 歩いて、走って | 63、75 | 63、75 |
| 跳ぶ前の速さ (16 分の 1 単位): 弱いジャンプの最も速いもの、強いジャンプの最も遅いもの | 24.5、25.38 | 24、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