parent
e1c821c26f
commit
450b28da84
Binary file not shown.
Binary file not shown.
@ -0,0 +1,7 @@ |
||||
--[[pod_format="raw",created="2024-08-07 14:22:44",modified="2024-08-07 14:25:39",revision=3]] |
||||
create_process( |
||||
"/listcolors.p64", |
||||
{window_attribs = |
||||
{workspace = "tooltray", x=2, y=2, width=64*4, height=16*8} |
||||
} |
||||
) |
@ -0,0 +1,269 @@ |
||||
picotron cartridge // www.picotron.net |
||||
version 2 |
||||
|
||||
:: gfx/ |
||||
:: map/ |
||||
:: sfx/ |
||||
:: drawing_stuff.lua |
||||
--[[pod_format="raw",created="2024-07-30 00:32:19",modified="2024-07-30 20:17:30",revision=366]] |
||||
include "matrix_math.lua" |
||||
|
||||
palette_greens = {5, 3, 27, 11, 26} |
||||
palette_greens_flip = {5, 3, 27, 11, 26, 11, 27, 3} |
||||
|
||||
function spr_point(sprite, x) |
||||
local p = uncamera(x) |
||||
draw_scaled_sprite(sprite, p[1], p[2], p[3]) |
||||
if debug then |
||||
print("z is " .. x[3],p[1], p[2]+8, 8) |
||||
print("s is " .. p[3],p[1], p[2], 8) |
||||
end |
||||
end |
||||
|
||||
function spr_skewed(s, x, y, z, sx, sy) |
||||
local result = skew(x,y,z, sx, sy) |
||||
spr3d(s, result[1], result[2], result[3]) |
||||
end |
||||
|
||||
|
||||
function draw_scaled_sprite(sprite, x, y, scale) |
||||
sspr(sprite, 0,0, 16,16, x-8*scale, y-8*scale, 16*scale, 16*scale) |
||||
end |
||||
|
||||
function draw_percent_of_a_line(x1, y1, x2, y2, percent) |
||||
local start_x = (x2-x1)*percent + x1 |
||||
local start_y = (y2-y1)*percent + y1 |
||||
local end_x = (x1-x2)*percent + x2 |
||||
local end_y = (y1-y2)*percent + y2 |
||||
line(start_x, start_y, end_x, end_y) |
||||
end |
||||
|
||||
function draw_shorter_line(x1, y1, x2, y2, beginning_cut, end_cut) |
||||
local length = sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1)) |
||||
if beginning_cut + end_cut > length then |
||||
return |
||||
end |
||||
local start_x = x1 + (x2-x1)*beginning_cut/length |
||||
local start_y = y1 + (y2-y1)*beginning_cut/length |
||||
local end_x = x2 + (x1-x2)*end_cut/length |
||||
local end_y = y2 + (y1-y2)*end_cut/length |
||||
line(start_x, start_y, end_x, end_y) |
||||
end |
||||
:: gfx/0.gfx |
||||
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA3LTMwIDAwOjI4OjU2Iixtb2RpZmllZD0iMjAyNC0w |
||||
Ny0zMCAyMDoxNzozMCIscmV2aXNpb249Mjk0XV1sejQAQwEAABsyAADzFHtbMF09e2JtcD1weHUA |
||||
QyAQEATw8CxmbGFncz0wLHBhbl94CADLeT0wLHpvb209OH0sMQD5BBo3wCdgNwA3UHcAB0AXMBdg |
||||
F1ACAK9gFzAXgFegN-AXWgAcECA-AI8nMCdgd4BXgFkACJ_Qd3B3oBfQF2C6AB2RBBfAR6BHsBfQ |
||||
AgDxAgAnkGeAJxAXgBcQJ4AXEBeQCACPIBeAFyAn8ARcAB1-AhcgFyAXMAYAC5Q3ABcAN0CXcFeE |
||||
AE-QF-AHagAdawOXUJdQFwIAz5dQl5AX0BewV5BXsFYAIkAFV4B3cQFyQBdwFyAXkBABRRcwFzAG |
||||
AAIUAFAgF3AXQI0BX3eAV-AFZgAdH-AxAP------------------------------------------ |
||||
--------------------sFBtPTh9fQ== |
||||
:: gfx/.info.pod |
||||
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA3LTMwIDAwOjI4OjU1IixzdG9yZWQ9IjIwMjQtMDct |
||||
MzAgMDA6Mjg6NTUiXV1sejQABAAAAAMAAAAwbmls |
||||
:: main.lua |
||||
--[[pod_format="raw",created="2024-07-30 00:28:56",modified="2024-07-30 20:17:30",revision=528]] |
||||
include "drawing_stuff.lua" |
||||
include "matrix_math.lua" |
||||
debug = false |
||||
symbols = {} |
||||
for i=0,8 do |
||||
add(symbols, {1+(i % 5), {rnd(400)-200, rnd(200)-100, rnd(50)-25}, {0,0,0}}) |
||||
end |
||||
for a=-1,1,2 do |
||||
for b=-1,1,2 do |
||||
for c=-1,1,2 do |
||||
add(symbols, {1, {a*20, b*20, c*20}, {0,0,0}}) |
||||
end |
||||
end |
||||
end |
||||
links = {} |
||||
for i=0,8 do |
||||
add(links, {flr(rnd(#symbols))+1, flr(rnd(#symbols-1))+1}) |
||||
end |
||||
|
||||
circles = {} |
||||
|
||||
function _draw() |
||||
cls() |
||||
|
||||
for c in all(circles) do |
||||
circfill(c[2], c[3], c[1], c[4]) |
||||
end |
||||
color() |
||||
|
||||
local skew_orientation = -0.1*t() |
||||
local skew_amount = 0.05+0.025*(sin(0.3*t())+1) |
||||
|
||||
for thing in all(symbols) do |
||||
local sprite = thing[1] |
||||
local rotated = thing[2] |
||||
rotated = transform(rot_z(-skew_orientation), rotated) |
||||
rotated = transform(rot_y(skew_amount), rotated) |
||||
rotated = transform(rot_z(skew_orientation), rotated) |
||||
|
||||
local ssc = uncamera(rotated) |
||||
thing[3] = ssc |
||||
spr_point(sprite, rotated) |
||||
circ(ssc[1], ssc[2], ssc[3]*12, 12) |
||||
end |
||||
|
||||
for link in all(links) do |
||||
local startpoint = symbols[link[1]][3] |
||||
local endpoint = symbols[link[2]][3] |
||||
|
||||
draw_shorter_line( |
||||
startpoint[1], startpoint[2], |
||||
endpoint[1], endpoint[2], |
||||
startpoint[3]*12, endpoint[3]*12) |
||||
end |
||||
|
||||
--print("time is " .. time_since_last_symbol, 40, 40, 7) |
||||
end |
||||
|
||||
last_t = t() |
||||
|
||||
time_since_last_symbol = 0 |
||||
delta = 0 |
||||
function _update() |
||||
local new_circles = {} |
||||
for c in all(circles) do |
||||
if c[1] > 0 then |
||||
add(new_circles, c) |
||||
end |
||||
end |
||||
circles = new_circles |
||||
|
||||
local x = cos(0.1*t())*200 + rnd(100)-50 + 240 |
||||
local y = sin(0.1*t())*100 + rnd(100)-50 + 135 |
||||
|
||||
add(circles, { |
||||
10+rnd(2), -- size |
||||
x,y, |
||||
palette_greens_flip[flr((t()%3/3)*#palette_greens_flip)+1]--color |
||||
}) |
||||
|
||||
for c in all(circles) do |
||||
c[1] = c[1] - 0.05 |
||||
end |
||||
|
||||
delta = t() - last_t |
||||
last_t = t() |
||||
|
||||
time_since_last_symbol += delta |
||||
if time_since_last_symbol > 3 then |
||||
time_since_last_symbol = 0 |
||||
deli(symbols, 1) |
||||
local new_links = {} |
||||
for link in all(links) do |
||||
if link[1] != 1 and link[2] != 1 then |
||||
add(new_links, {link[1]-1, link[2]-1}) |
||||
end |
||||
end |
||||
links = new_links |
||||
|
||||
add(symbols, {flr(rnd(5))+1, {rnd(440)-220, rnd(200)-100, rnd(50)-25}, {0,0,0}}) |
||||
|
||||
--links = {} |
||||
for i=0,8 do |
||||
--add(links, {flr(rnd(#symbols))+1, flr(rnd(#symbols-1))+1}) |
||||
end |
||||
add(links, {flr(rnd(#symbols))+1, #symbols}) |
||||
add(links, {flr(rnd(#symbols))+1, #symbols}) |
||||
end |
||||
end |
||||
:: map/0.map |
||||
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA3LTMwIDAwOjI4OjU2Iixtb2RpZmllZD0iMjAyNC0w |
||||
Ny0zMCAyMDoxNzozMCIscmV2aXNpb249MjgwXV1sejQAaAAAAFgQAADwCHt7Ym1wPXVzZXJkYXRh |
||||
KCJpMTYiLDMyAwAvIjABAP--------------------vxCCIpLGhpZGRlbj1mYWxzZSxwYW5feD0w |
||||
CADSeT0wLHRpbGVfaD0xNgoAEHcKAIB6b29tPTF9fQ== |
||||
:: map/.info.pod |
||||
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA3LTMwIDAwOjI4OjU1IixzdG9yZWQ9IjIwMjQtMDct |
||||
MzAgMDA6Mjg6NTUiXV1sejQABAAAAAMAAAAwbmls |
||||
:: matrix_math.lua |
||||
--[[pod_format="raw",created="2024-07-30 00:58:28",modified="2024-07-30 20:17:30",revision=350]] |
||||
function skew(x, y, z, strength_x, strength_y) |
||||
local dot = x*strength_x + y*strength_y |
||||
return {x + strength_x*(z+10), y+strength_y*(z+10), z-(dot/600)} |
||||
end |
||||
|
||||
function p(x,y,z) |
||||
return {x, y, z} |
||||
end |
||||
|
||||
-- this camera trransform will put our camera looking ttowards -z, i think |
||||
-- looking from 200 unitsts away on the z axis |
||||
function uncamera(x) |
||||
if x[3]+25 == 0 then |
||||
return {30, 30, 1} |
||||
end |
||||
x = translate(x, p(0,0,200)) |
||||
return { |
||||
(150*x[1]/x[3]) + 240, |
||||
(150*x[2]/x[3]) + 135, |
||||
150/x[3]} |
||||
end |
||||
|
||||
function transform(m, x) |
||||
return { |
||||
x[1]*m[1][1] + x[2]*m[2][1] + x[3]*m[3][1], |
||||
x[1]*m[1][2] + x[2]*m[2][2] + x[3]*m[3][2], |
||||
x[1]*m[1][3] + x[2]*m[2][3] + x[3]*m[3][3] |
||||
} |
||||
end |
||||
|
||||
function translate(a, b) |
||||
return {a[1]+b[1], a[2]+b[2], a[3]+b[3]} |
||||
end |
||||
|
||||
function transpose(m) |
||||
return { |
||||
{m[1][1], m[2][1], m[3][1]}, |
||||
{m[1][2], m[2][2], m[3][2]}, |
||||
{m[1][3], m[2][3], m[3][3]} |
||||
} |
||||
end |
||||
|
||||
function rot_x(angle) |
||||
return { |
||||
{1, 0, 0}, |
||||
{0, cos(angle), -sin(angle)}, |
||||
{0, sin(angle), cos(angle)} |
||||
} |
||||
end |
||||
|
||||
function rot_y(angle) |
||||
return { |
||||
{cos(angle), 0, sin(angle)}, |
||||
{0, 1, 0}, |
||||
{-sin(angle), 0, cos(angle)} |
||||
} |
||||
end |
||||
|
||||
function rot_z(angle) |
||||
return { |
||||
{cos(angle), -sin(angle), 0}, |
||||
{sin(angle), cos(angle), 0}, |
||||
{0, 0, 1} |
||||
} |
||||
end |
||||
:: sfx/0.sfx |
||||
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA3LTMwIDAwOjI4OjU2Iixtb2RpZmllZD0iMjAyNC0w |
||||
Ny0zMCAyMDoxNzozMCIscmV2aXNpb249Mjc3XV1sejQAEQEAAMEIAADwJ3B4dQADKAAAAwAED0AQ |
||||
Ag4AAaABIAKgDgAPEAAN8MoBAgMEBQYHAA--kAgJCgsPDA8NDw4PDxAA8AANDxEPEg8TDxQPFQ8W |
||||
DxcTAPEBDxgPGQ8aDxsPHA8dDx4PHxQA8QAgDyEPIg8jDyQPJQ8mDycUAPEAKA8pDyoPKw8sDy0P |
||||
Lg8vFADxADAPMQ8yDzMPNA81DzYPNxQA-wU4DzkPOg87DzwPPQ8_Dz8AD--w-wEA6-8nWgEQBg8g |
||||
EAEgASAB8AACEAIMEAEgDyEgATAPQPDDDygP--DGD-gKD-8PgA-3Dw0B8AkBEAYMMAD--7of-wEA |
||||
zL-oD0AADUD--7DwcAoA--9kH-8BAJdQ-----x8= |
||||
:: sfx/.info.pod |
||||
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA3LTMwIDAwOjI4OjU1IixzdG9yZWQ9IjIwMjQtMDct |
||||
MzAgMDA6Mjg6NTUiXV1sejQABAAAAAMAAAAwbmls |
||||
:: .info.pod |
||||
b64$LS1bW3BvZCxydW50aW1lPTUsc3RvcmVkPSIyMDI0LTA3LTMwIDIwOjE3OjMwIix3b3Jrc3Bh |
||||
Y2VzPXt7bG9jYXRpb249Im1haW4ubHVhIzMxIix3b3Jrc3BhY2VfaW5kZXg9MX0se2xvY2F0aW9u |
||||
PSJkcmF3aW5nX3N0dWZmLmx1YSM0Iix3b3Jrc3BhY2VfaW5kZXg9MX0se2xvY2F0aW9uPSJtYXRy |
||||
aXhfbWF0aC5sdWEjMTEiLHdvcmtzcGFjZV9pbmRleD0xfSx7bG9jYXRpb249ImdmeC8wLmdmeCIs |
||||
d29ya3NwYWNlX2luZGV4PTJ9LHtsb2NhdGlvbj0ibWFwLzAubWFwIix3b3Jrc3BhY2VfaW5kZXg9 |
||||
M30se2xvY2F0aW9uPSJzZngvMC5zZngiLHdvcmtzcGFjZV9pbmRleD00fX1dXWx6NAAEAAAAAwAA |
||||
ADBuaWw= |
||||
:: [eoc] |
Loading…
Reference in new issue