mieki256's diary



2018/10/27() [n年前の日記]

#1 [tic80] TIC-80でラスタースクロール処理

TIC-80関係のスクリーンショット画像を眺めていたらラスタースクロールっぽい処理をしてる事例があったので、どうやったらそんな処理ができるのか少し試したり。

こんな感じかなあ…。

tic80_scn_ss01.gif

-- title:  game title
-- author: game developer
-- desc:   short description
-- script: lua

t=0
x=96
y=24

function TIC()

 if btn(0) then y=y-1 end
 if btn(1) then y=y+1 end
 if btn(2) then x=x-1 end
 if btn(3) then x=x+1 end

 cls(13)
 map(0,0)
 spr(1+t%60//30*2,x,y,14,3,0,0,2,2)
 print("HELLO WORLD!",84,84)
 t=t+1
end

function SCN(row)
 local x,y
 x=8*math.cos(math.rad(3*t+4*row))
 y=6*math.sin(math.rad(2*t+4*row))
 poke(0x3FF9,x)
 poke(0x3FF9+1,y)
end

SCN()関数を記述すれば、y方向に1ライン描画する度に処理が呼ばれるそうで。 *1

_SCN - nesbox/TIC-80 Wiki

ちなみに、昔の版では SCN() ではなく scanline() という関数名だった模様。

また、 で、画面描画のオフセット(SCREEN OFFSET)を書き換えることができるらしい。コレを利用すれば、ラスタースクロールっぽいことができる。

_poke - nesbox/TIC-80 Wiki
_RAM - nesbox/TIC-80 Wiki

しかしコレ、BGだけをラスタースクロール、みたいなことはできるのだろうか…。現状ではスプライト相当までグネグネしちゃってるけど…。

OVR()を使って分離。 :

OVR() という関数を記述すれば、SCN() で描画した後から別の何かを描画できる ―― SCN() の処理とは分離した描画ができるらしい。

コレを使えば、BGだけラスタースクロールをして、スプライトは処理をかけない、ということもできる模様。

tic80_scn_ovr_ss01.gif

_OVR - nesbox/TIC-80 Wiki

-- title:  game title
-- author: game developer
-- desc:   short description
-- script: lua

t=0
x=96
y=24

function TIC()

 if btn(0) then y=y-1 end
 if btn(1) then y=y+1 end
 if btn(2) then x=x-1 end
 if btn(3) then x=x+1 end

 cls(13)
 map(0,0)
 t=t+1
end

function SCN(row)
 local x,y
 x=8*math.cos(math.rad(3*t+4*row))
 y=6*math.sin(math.rad(2*t+4*row))
 poke(0x3FF9,x)
 poke(0x3FF9+1,y)
end

function OVR()
 spr(1+t%60//30*2,x,y,14,3,0,0,2,2)
 print("HELLO WORLD!",84,84)
end

このソースの例では、OVR() 内でスプライト相当の描画+文字描画をしているので、そこだけはラスタースクロールしない状態になっている。

一応ブラウザ上でも動くソレも置いてみたり。

_rasterttest02.tic.html

*1: もしかすると、TIC() で画面に描画する内容を作ってから、画面描画用のバッファに、SCN() でy方向に1ラインずつ転送している…のかな…。

以上です。

過去ログ表示

Prev - 2018/10 - Next
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project