【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 필요하지만, 이 정도라면 괜찮을까, 이번에 다시 만들어 보자.

    좋은 웹페이지 즐겨찾기