マリオのように、ブロックから出るコインと点数
固さのレッスンのレベルに、上の帯を足した: 点数とコインの数。遊んでブロックに跳び上がってみてほしい。プログラムは 1,379 バイトの命令 548 個で、作り方も確かめ方も同じだ。
ここで遊ぶ 机の上で変えてみる カートリッジ。NES のカートリッジを遊べるところならどこでも遊べる: coins.nes
画面の上では
数はすぐ変わり、コインはゆっくり動く
スーパーマリオブラザーズでは、マリオの頭がブロックを突き上げたまさにそのフレームでコインが数えられ、点数が足され、上の帯もそのフレームで書き直される: コインの数と、変わったのは一つだけでも点数のすべての桁を。そのあとに見えるものは飾りだ。コインのスプライトがブロックから飛び出し、上がって落ちる間に四つの絵を回り、それが消えると、その値打ちの点数がいた場所からゆっくり浮かび上がる。このカートリッジも、自前のコインと飛び方と数字で、同じ順番で出来事を起こす。
| このカートリッジ | スーパーマリオブラザーズ | |
|---|---|---|
| 点数はコインの数と同じフレームで変わる | はい | はい |
| そのフレームの前後に帯へ書いたタイルの数 | 11 | 8 |
| コインが見えているフレーム数 | 17 | 31 |
| コインが上がるピクセル数 | 27 | 38 |
| コインが回る絵の数と、それぞれを見せるフレーム数 | 4 枚、それぞれ 2 フレーム | 4 枚、それぞれ 2 フレーム |
| 点数が見えているフレーム数と、上がるピクセル数 | 40、19 上がる | 46、22 上がる |
書いたとおりに
このレッスンが扱うプログラムの部分。プログラム全体は、ただのテキストファイルだ: coins.s
;; The bar: the score's six digits on row 2 from column 2, a coin, and
;; the coins' two digits, all written again whenever either changes.
bar:
LDA #$20
STA $2006
LDA #$42
STA $2006
LDX #$00
digits:
LDA $60,X
CLC
ADC #$2A
STA $2007
INX
CPX #$06
BNE digits
LDA #$00
STA $2007
STA $2007
LDA #$08
STA $2007
LDA $66
CLC
ADC #$2A
STA $2007
LDA $67
CLC
ADC #$2A
STA $2007
LDA #$00
STA $68
RTS
;; The coin: 18 frames, rising 3 pixels a frame for 10 and falling 2 for
;; 8; then the points, 40 frames, rising a pixel every second frame.
coin:
LDA $69
BEQ points
CMP #$09
BCC sinking
LDA $6A
SEC
SBC #$03
STA $6A
JMP flown
sinking:
LDA $6A
CLC
ADC #$02
STA $6A
flown:
DEC $69
BNE floated
LDA #$28
STA $6D
LDA $6A
STA $6E
RTSこの前は: マリオのように固い、地面とブロックと壁