NEStinymachines

ゼルダのように、絵が滑ってどいて現れるアイテム画面

帯のある部屋と、私たちのアイテム画面: 枠と言葉と三つの物。遊んで歩き、スタートを押すと絵が下へ滑る。もう一度押すと滑って戻る。プログラムは 737 バイトの命令 339 個で、作り方も確かめ方も同じだ。

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

画面の上では

フレーム 50
フレーム 50
フレーム 80
フレーム 80
フレーム 120
フレーム 120
フレーム 200
フレーム 200

アイテム画面は部屋の上にある

ゼルダの伝説は、スタートを押しても部屋を枠で覆わない。部屋と帯をあわせた絵全体が毎フレーム数ピクセルずつ下へ滑り、その上からアイテム画面が見えてくる。コンソールには背景二画面ぶんの場所があり、このボードではそれが上下に積まれている。アイテム画面はもう一方に置かれる。ゲームはそこへ、下から上へ一行ずつ、滑りのすぐ先を描くので、見える直前まで行を描かない。動いている間に絵を分けることはなく、滑りの途中で二度目のスタートを押しても読まない。止まってからスタートを押すと、すべてが滑って戻り、その間は何も描かない。このカートリッジも、自前の部屋とアイテム画面で同じようにする。

このカートリッジゼルダの伝説
絵が毎フレーム滑るピクセル数43
滑るピクセル数の合計176175
スタートから止まるまでのフレーム数4465
滑る間に描くアイテム画面の行数と、その間のフレーム数22 行、2 フレームおき23 行、2 フレームおき
行は下から上へ描くはいはい
滑りの途中の二度目のスタートは何も変えなかったはいはい
滑る間に絵を分けるいいえいいえ
ボードの二画面の並べ方が変わるいいえ、ボードで決まっているいいえ
スタートから部屋が戻るまでのフレーム数4560
戻る間に描く行数00

書いたとおりに

このレッスンが扱うプログラムの部分。プログラム全体は、ただのテキストファイルだ: 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

すべてのレッスン