Skip to content

Instantly share code, notes, and snippets.

@AntonPetrochenko
Last active April 22, 2025 07:42
Show Gist options
  • Select an option

  • Save AntonPetrochenko/b37b9b3ae5156b5962c3d882b02980bd to your computer and use it in GitHub Desktop.

Select an option

Save AntonPetrochenko/b37b9b3ae5156b5962c3d882b02980bd to your computer and use it in GitHub Desktop.
-- Заготовим повторение текстуры, иначе по краям экрана будет чёрные полосы
poke(0x5f38,16)
poke(0x5f39,16)
-- Функция радианы -> вектор
function mda(a)
return cos(a)/8,
sin(a)/8
end
-- Цвета для смещающейся палитры
local clrs = {7,6,13,1}
-- Вращение масива вправо
function rottbl(tbl)
for i=4,1,-1 do
tbl[i+1] = tbl[i]
end
tbl[1] = tbl[5]
end
-- Применение матрицы вращения к паре координат x,y на угол a вокруг точки ox,oy
function rot2d(x,y,a,ox,oy)
local ox = ox or 0
local oy = oy or 0
local tx = x - ox
local ty = y - oy
return cos(a)*tx-sin(a)*ty+ox,
sin(a)*tx+cos(a)*ty+oy
end
-- Таймеры
t=0
cdwn = 0
-- Рисование
while true do
t+=1
-- Раскомментировать это и чуть ниже: переливание первых 4 цветов палитры цветами из таблицы clrs
-- cdwn-=1
-- if cdwn<0 then
-- cdwn = 15
-- rottbl(clrs)
--end
cls()
-- Первая часть вращения экрана: подготовка направления для tline
local mdx, mdy = mda(t/512)
for i=0,127 do
local sx = 0
local sy = i/8
-- Эффекты, от которых картинка "волнуется"
sy += sin(t/256+i/128)
sx += sin(t/128+i/128)
-- Вторая половина вращения экрана: смещение точек начала tline
sx, sy = rot2d(sx,sy,t/512,8,8)
-- Раскомментировать этот блок: применить цвета из clrs к первым 4 цветам
-- for i=1,4 do
-- pal(i,clrs[i])
-- end
-- А вот самая соль...
-- ТЕКСТУРИРОВАННАЯ ЛИНИЯ PICO-8
-- Первые 4 параметра: x1, y1, x2, y2 линии
-- 5, 6 параметр: точка начала "указателя"
-- 7, 8 параметры: направление движения "указателя"
-- По мере рисования линии по карте текстур движется указатель,
-- по которому на линию выкладываются цвета.
-- Этой магической операции достаточно, чтобы реализовать прикольные
-- визуальные эффекты.
-- В данном случае мы используем её, чтобы повторить растровые
-- "построчные" эффекты как на ретро-консолях: каждая линия
-- является "строкой растра"
tline(
0,
i,
127,
i,
-- Параметры ниже: вращение экрана
sx, -- Из точки...
sy,
mdx, -- Выдвинулся указатель...
mdy
)
end
-- Нарисуем на экран, синхронизируемся к 30 fps
flip()
end
@AntonPetrochenko
Copy link
Author

untitled_1_0.gif.mp4
jija_0.gif.mp4

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment