【TIC-80】 4tile to 2x2 simple Auto tile
4tile2x2auto.lua
-- title: auto2x2tile
-- author: uokagi
-- desc: 4tiles to 2x2 simple auto tile
-- script: lua
W,H=240,136
U,D,L,R,LU,RU,LD,RD=1,2,3,4,5,6,7,8
AT={[0]={U,L,LU},{U,R,RU},{D,L,LD},{D,R,RD}}
OF={{{0,3},{1,1}},{{1,1},{2,2}}}
FN={[0]=1,0,3,2}
-- my function
rm2x2tile=function(t,x,y)
if t==0 then return 0 end
local fU=(t==mget(x%W,(y-2)%H))and 1 or 2
local fD=(t==mget(x%W,(y+2)%H))and 1 or 2
local fL=(t==mget((x-2)%W,y%H))and 1 or 2
local fR=(t==mget((x+2)%W,y%H))and 1 or 2
local fLU=(t==mget((x-2)%W,(y-2)%H))and 1 or 2
local fRU=(t==mget((x+2)%W,(y-2)%H))and 1 or 2
local fLD=(t==mget((x-2)%W,(y+2)%H))and 1 or 2
local fRD=(t==mget((x+2)%W,(y+2)%H))and 1 or 2
local an=x%2+y%2*2
local fl={fU,fD,fL,fR,fLU,fRU,fLD,fRD}
local vn,hn,sn=AT[an][1],AT[an][2],AT[an][3]
local oid=OF[fl[vn]][fl[hn]][fl[sn]]
if fl[vn]==2 and fl[hn]==1 then
return t+oid*16,FN[an],1 end
return t+oid*16,an end
testinit=function()
chipset={0,1,2,3,4}
i=1
end
testinit()
function TIC()
cls(13)
map(0,0,30,17,0,0,12,1,rm2x2tile)
if btnp(4,1,20) then i=i%#chipset+1 end
x,y,p=mouse()
spr(256,x-x%16,y-y%16,0,2)
idx=chipset[i]
for j=0,3 do
spr(idx+32,208+j%2*8,8+j//2*8,12,1,j)
end
spr(257,208-4,8-4,12,3)
if p then
for j=0,3 do
mset(x//16*2+j%2,y//16*2+j//2,idx) end end
if btnp(5,1,20) then sync(0,0,true)end
end
이전 8x8의 간이 오토 타일 gif 동영상을 트위터로 올리면 외국에서
"좋아요"를 받고 비비고 있습니다.
TIC-80은 8x8 도트의 타일 단위로 표시됩니다.
remap은 타일 ID 외에 flip(반전), rotate(회전)도 지정할 수 있습니다.
따라서 상하 좌우 대칭이라면,
4 종류의 타일을 준비해 두면, 후에는 반전과 회전으로
16x16의 심플한 오토 타일이라면 실현이 가능합니다.
타일을 조합하여 유지할 필요도 없기 때문에
타일 영역을 절약할 수도 있습니다.
다만, remap용의 함수에 할당할 수 있는 메모리가 작은(?)인가,
쓸데없이 쓰면 정상적으로 작동하지 않습니다.
(로컬 변수의 종류를 줄이면 움직이게 되거나?)
대칭이 아닌 것은 4x5의 20 필요하지만, 이 정도라면 괜찮을까, 이번에 다시 만들어 보자.
Reference
이 문제에 관하여(【TIC-80】 4tile to 2x2 simple Auto tile), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/uokagi/items/ed2465018fad4b9083de텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)