ゼルダのように、絵が滑ってどいて現れるアイテム画面
帯のある部屋と、私たちのアイテム画面: 枠と言葉と三つの物。遊んで歩き、スタートを押すと絵が下へ滑る。もう一度押すと滑って戻る。プログラムは 737 バイトの命令 339 個で、作り方も確かめ方も同じだ。
ここで遊ぶ カートリッジ。NES のカートリッジを遊べるところならどこでも遊べる: items.nes
画面の上では
アイテム画面は部屋の上にある
ゼルダの伝説は、スタートを押しても部屋を枠で覆わない。部屋と帯をあわせた絵全体が毎フレーム数ピクセルずつ下へ滑り、その上からアイテム画面が見えてくる。コンソールには背景二画面ぶんの場所があり、このボードではそれが上下に積まれている。アイテム画面はもう一方に置かれる。ゲームはそこへ、下から上へ一行ずつ、滑りのすぐ先を描くので、見える直前まで行を描かない。動いている間に絵を分けることはなく、滑りの途中で二度目のスタートを押しても読まない。止まってからスタートを押すと、すべてが滑って戻り、その間は何も描かない。このカートリッジも、自前の部屋とアイテム画面で同じようにする。
| このカートリッジ | ゼルダの伝説 | |
|---|---|---|
| 絵が毎フレーム滑るピクセル数 | 4 | 3 |
| 滑るピクセル数の合計 | 176 | 175 |
| スタートから止まるまでのフレーム数 | 44 | 65 |
| 滑る間に描くアイテム画面の行数と、その間のフレーム数 | 22 行、2 フレームおき | 23 行、2 フレームおき |
| 行は下から上へ描く | はい | はい |
| 滑りの途中の二度目のスタートは何も変えなかった | はい | はい |
| 滑る間に絵を分ける | いいえ | いいえ |
| ボードの二画面の並べ方が変わる | いいえ、ボードで決まっている | いいえ |
| スタートから部屋が戻るまでのフレーム数 | 45 | 60 |
| 戻る間に描く行数 | 0 | 0 |
書いたとおりに
このレッスンが扱うプログラムの部分。プログラム全体は、ただのテキストファイルだ: items.s
;; While opening, the item screen's row that the slide is about to show,
;; if it is not there yet.
picture:
LDA $40
CMP #$01
BNE nodraw
LDA $41
LSR A
LSR A
LSR A
CMP $43
BEQ nodraw
STA $43
JSR itemrow
nodraw:
RTS
;; Row $43 of the item screen, built in $0300 and written across: the
;; box's edge on rows 10 and 27, its sides between them, the word ITEMS
;; on row 12 and the three things on row 18.
itemrow:
LDA #$00
LDX #$1F
empty:
STA $0300,X
DEX
BPL empty
LDA $43
CMP #$0A
BEQ edge
CMP #$1B
BEQ edge
BCS built
CMP #$0A
BCC built
LDA #$05
STA $0304
STA $031B
LDA $43
CMP #$0C
BNE things
LDX #$04
word:
LDA letters,X
STA $030D,X
DEX
BPL word
things:
LDA $43
CMP #$12
BNE built
LDA #$0B
STA $030A
LDA #$0C
STA $030F
LDA #$0D
STA $0314
JMP built
edge:
LDA #$05
LDX #$17
top:
STA $0304,X
DEX
BPL top
built:
LDA #$80
STA $2000
LDA $43
LSR A
LSR A
LSR A
ORA #$28
STA $2006
LDA $43
ASL A
ASL A
ASL A
ASL A
ASL A
STA $2006
LDX #$00
copy:
LDA $0300,X
STA $2007
INX
CPX #$20
BNE copy
RTS