40 lines
862 B
Fennel
40 lines
862 B
Fennel
(local {: lo : hi} (require :lib.util))
|
|
(local {: vm : mapw : maph : rot8l} (require :game.defs))
|
|
|
|
(vm:def :lookup-flags ; itile -- flags
|
|
[:lda vm.TOP :x]
|
|
(rot8l 3) ; lllhhhhh > hhhhhlll
|
|
[:adc #(lo ($1:lookup-addr :tileflags))]
|
|
[:sta vm.W]
|
|
[:lda #(hi ($1:lookup-addr :tileflags))]
|
|
[:adc 0]
|
|
[:sta vm.WH]
|
|
[:ldy 0] [:lda [vm.W] :y]
|
|
[:sta vm.TOP :x])
|
|
|
|
(vm:def :map-at ; yx -- pmap
|
|
[:lda (- maph 1)]
|
|
[:sec]
|
|
[:sbc vm.TOPH :x]
|
|
[:asl :a] ; x2
|
|
[:asl :a] ; x4
|
|
[:sta vm.TOPH :x]
|
|
[:asl :a] ; x8
|
|
[:asl :a] ; x16
|
|
[:clc] [:adc vm.TOPH :x] ; x20
|
|
[:adc vm.TOP :x]
|
|
[:sta vm.TOP :x]
|
|
[:lda :map-page]
|
|
[:sta vm.TOPH :x])
|
|
(vm:word :itile-at ; yx -- itile
|
|
:map-at :bget)
|
|
|
|
(vm:word :update-itile ; yx itile --
|
|
:over :map-at :bset :drawtile-at)
|
|
|
|
(vm:word :drawtile-at ; yx --
|
|
:dup :yx>screen :swap
|
|
:itile-at :lookup-tile
|
|
:drawtile)
|
|
|