ひっそりとまだやってるTIC-80
TIC-80 Rubber Texture Mapping #TIC80
https://tic.computer/play?cart=509
https://tic.computer/play?cart=509
「textri」を使ったテクスチャーマッピングの例題です。
マウスでドラッグすると画像がグニャグニャに動きます。
元画像は0x4000~のスプライト領域に貼ってますが、どうも関数の動きがイマイチです?
マウスでドラッグすると画像がグニャグニャに動きます。
元画像は0x4000~のスプライト領域に貼ってますが、どうも関数の動きがイマイチです?
lua言語を勉強しませんか?
TIC-80、日本でやってる人ほぼゼロかも?
TIC-80、日本でやってる人ほぼゼロかも?
チャレンジャー求む!
============================================
以下ソースコードです。
============================================
以下ソースコードです。
============================================
-- title: Rubber
-- author: Time Tripper
-- desc: Rubber Texture Mapping
-- script: lua
-- author: Time Tripper
-- desc: Rubber Texture Mapping
-- script: lua
pic_data={
"000000
:
【省略】
:
0000000"
}
"000000
:
【省略】
:
0000000"
}
pal={
"000000",
"070707",
"0E0E0E",
"151515",
"1C1C1C",
"232323",
"2A2A2A",
"313131",
"383838",
"3F3F3F",
"464646",
"4D4D4D",
"545454",
"5B5B5B",
"626262",
"696969"
}
"000000",
"070707",
"0E0E0E",
"151515",
"1C1C1C",
"232323",
"2A2A2A",
"313131",
"383838",
"3F3F3F",
"464646",
"4D4D4D",
"545454",
"5B5B5B",
"626262",
"696969"
}
function pallet()
i=0x3FC0
for y=1,16 do
endfor y=1,16 do
for x=1,6,2 do
endpoke(i,tonumber(string.sub(pal[y],x,x+1),16))
i=i+1
endi=i+1
function draw_pic()
cls()
i=0x4000
for sy=0,16 do
endi=0x4000
for sy=0,16 do
for sx=5,20 do
endfor iy=0,7 do
endfor ix=0,3 do
endx=sx*8+ix*2+1
y=sy*8+iy+1
poke(i,tonumber(string.sub(pic_data[y],x+1,x+1)..string.sub(pic_data[y],x,x),16))
i=i+1
endy=sy*8+iy+1
poke(i,tonumber(string.sub(pic_data[y],x+1,x+1)..string.sub(pic_data[y],x,x),16))
i=i+1
--
sqrt=math.sqrt
max=math.max
min=math.min
abs=math.abs
rand=math.random
--
sqrt=math.sqrt
max=math.max
min=math.min
abs=math.abs
rand=math.random
--
function len(x1,y1,x2,y2)
return sqrt((x1-x2)^2+(y1-y2)^2)
end
par={}
function make_data()
function make_data()
for y=-10,150,5 do
endfor x=-10,250,5 do
endlocal p={}
p.px=x
p.py=y
p.vx=0
p.vy=0
p.pc=15
table.insert(par,p)
endp.px=x
p.py=y
p.vx=0
p.vy=0
p.pc=15
table.insert(par,p)
function move()
for y=1,31 do
endfor x=2,52 do
endi=x+y*53
local p=par[i]
p.px=p.px+p.vx
p.py=p.py+p.vy
p.vx=p.vx*0.93
p.vy=p.vy*0.93
p.vx=p.vx+(par[i-1].px-p.px)/50
p.vx=p.vx+(par[i+1].px-p.px)/50
p.vx=p.vx+(par[i-53].px-p.px)/50
p.vx=p.vx+(par[i+53].px-p.px)/50
p.vy=p.vy+(par[i-1].py-p.py)/50
p.vy=p.vy+(par[i+1].py-p.py)/50
p.vy=p.vy+(par[i-53].py-p.py)/50
p.vy=p.vy+(par[i+53].py-p.py)/50
endlocal p=par[i]
p.px=p.px+p.vx
p.py=p.py+p.vy
p.vx=p.vx*0.93
p.vy=p.vy*0.93
p.vx=p.vx+(par[i-1].px-p.px)/50
p.vx=p.vx+(par[i+1].px-p.px)/50
p.vx=p.vx+(par[i-53].px-p.px)/50
p.vx=p.vx+(par[i+53].px-p.px)/50
p.vy=p.vy+(par[i-1].py-p.py)/50
p.vy=p.vy+(par[i+1].py-p.py)/50
p.vy=p.vy+(par[i-53].py-p.py)/50
p.vy=p.vy+(par[i+53].py-p.py)/50
function draw()
--cls()
for y=0,31 do
endfor y=0,31 do
for x=1,52 do
endi=x+y*53
local p=par[i]
textri(par[i].px,par[i].py,
endlocal p=par[i]
textri(par[i].px,par[i].py,
par[i+1].px,par[i+1].py,
par[i+53].px,par[i+53].py,
(x-1)*5,y*5,
x*5,y*5,
(x-1)*5,(y+1)*5,
false,
0)
textri(par[i+54].px,par[i+54].py,
par[i+53].px,par[i+53].py,
(x-1)*5,y*5,
x*5,y*5,
(x-1)*5,(y+1)*5,
false,
0)
par[i+1].px,par[i+1].py,
par[i+53].px,par[i+53].py,
x*5,(y+1)*5,
x*5,y*5,
(x-1)*5,(y+1)*5,
false,
0)
--pix(p.px,p.py,15)par[i+53].px,par[i+53].py,
x*5,(y+1)*5,
x*5,y*5,
(x-1)*5,(y+1)*5,
false,
0)
function init()
draw_pic()
pallet()
make_data()
endpallet()
make_data()
--
init()
--
function TIC()
mx,my,md=mouse()
if md then
move()
draw()
endif md then
for i=1,#par do
endlocal p=par[i]
w=len(mx,my,p.px,p.py)
if w<10 then
endw=len(mx,my,p.px,p.py)
if w<10 then
p.px=mx
p.py=my
endp.py=my
move()
draw()