0,]']>S}Wup8d%qy)6o;]AsVl3=>???4'``N'@4'`4``Y` `G'`9'`9`;`N'`aaaaaaaaaaaaaaaa4'`;'`W)``G`9`9`[(` `K`g)`7`7`7`W)``G`9`9`[(` `Y)`[(`;`;`;`aaaaaaaaaaaaaaaa[)` `K'`[)` `[)` `K'`[)` `=(` `='`=(` `=(` `='`=(` `[)` `K'`[)` `[)` `K'`[)` `L'` `L&`L'` `N'``N&`N'` `               @ @              @ @                                                         wd` Gd@`   d`b     wd` Gd@`        wd`  bbb bb        [(`[(`[(`[(`[(`[(`[(`[(`;(`;(`Y)`Y)`W)`W)`G)`G)`                                               [(`[(`[(`[(`[(`[(`[(`[(`;(`;(`Y)`Y)`W)`W)`G'`G'`                                   ;(`;(`;(`;(`;(`;(`;(`;(`N)`N)`=(`=(`;(`;(`;(`;(`;(`;(`;(`;(`;(`;(`;(`;(`N)`N)`=(`=(`;(`;(`[(`[(`                                  32B B R cGs Gs ٦  a H ?33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333""""""""""""""",""""",""""","","""""",""""""3333333333333333333333,""""""333333333333333333333333333333333333333333333333333333333333333#""3"""#""3"""#""3""""D43"""""D43"""""D43"""""3#""""""""""3#""""""""""3#"""""333333333""""23,",""""""83333333333333333333333333333333333333333333333333333333333""","",",""""""""""""","",",""""""""""""",""""""""",""""","""""""""""","""",""""""""""""","""","""""""""""""""",""2""")"""",""""""""")"""",""""""""")"""",""""""3"""""""13333333333333333333333333333333333333333333333333333333333+""3""")""""""+""3""")"""+""3""")""""D43"""""""D43"""""""D43""""""3#"""""""3#"""""""3#""""",",","""""","13333333333333333333333333333333333333333333333333333333333333,","""""",",","""""""""""""",""""""""",""""""""","""""""""""""""""""""""""!+","""""!+","""""!33333333333333333333333333333333333333333333333333333333333333333333333333333+","""""!̙""̙""̙""""""""","133333333333333333333333333333333333333333333333333333333333333333333333333333+",","+",","+","""̌""",""""̌""",""""̌""",""""!""",""","!""",""",",""","333333333333333333333333333333333333333333333333"""",","1333333333333333"""",",""""""""",",""""""""<3,"""""""""<3,""""","""""<3,""""",""+"LD3#",""""",""+"LD3#","",""""""+"LD3#","",""""""+"<3"""",",""""""33333333333333333333333333333333333333333333333#"<3"""","13333333333333;!""3""";;;;;+"<3"""","333;+""3""";;""""""","33;;#""3""";;;;""""""",";33;;"D43"""";;;""""""",";3;"D43"""";;;;;;,"""","""3;3;3333333"D43""""333>333333333333333333333333333333,"""","""333333333333333333;3"3#""""";;,"""","""3;3;3"3#""""";;,"""","";;3;3"3#""""";;,"""","";;;3;,","""""";;;,"""",""333;,","""""";;;;"""",""33333333333,",""""""833333333333333333333333333333333333333333"""",""333333333333333333333;""""""",";;;"""","";;3;;""""""",";;;;;;""""""","1;;;;3;3;3;"""""""1;;;3;""""""";;;;333333333"""""""133333333333333333333333333333333333333333313333333333333333333333;/",""""";;;;;;/",""""";;;333;/",""""";;;3;;;;3;;;;;;333333333333333333333333333333333333333333333333333333333313333333333333333333333333;;;;;3;;;;;;;;;;;3;;;3;;;;;;;33333333133333333333333333333333333333333333333333333333333333333333333333333333333333333333;;;;3;;;;;;;;;;;;;;;;;3;;;;;;;3;333333333333333133333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333;;;;;;;;;;;;;;;;;;;;;3;;;;;;33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333;;;;;;;;;;;;;;;;;;;3>-- title: Te Gusta Guay -- author: ScenePT All Stars -- desc: Demo for Posadas 2025 -- site: https://inercia.pt -- license: MIT License (change this to your license of choice) -- version: 0.1 -- script: lua function no_fn() end ----------------------------------- -- amiga balls local bgcolor = 11 local ballsize = 16*3 local nballs=7 local balls={} --function posadas_screen_init() for i=1,nballs do balls[i]={} balls[i][1]=math.random(240) balls[i][2]=math.random()*math.pi local rnd=math.floor(math.random()*2.0)*2-1 balls[i][3]=rnd end --end function amiga_balls_screen() poke(16379,0) poke(0x3FF8,bgcolor) local _t=time() cls(bgcolor) local col = 3 local ysplit = 90 for x=20,220,10 do line(x,0,x,ysplit,col) line(x,ysplit,x*2-120,140,col) end for y=0,ysplit,10 do line(20,y,220,y,col) end line(9,ysplit+6,231,ysplit+6,col) for y=ysplit+12,190,6 do line(0,y,240,y,col) end for i=nballs,1,-1 do balls[i][1] = balls[i][1]+balls[i][3] if balls[i][1] > 240-ballsize then balls[i][1] = 240-ballsize balls[i][3] = -1 end if balls[i][1] < 0 then balls[i][1] = 0 balls[i][3] = 1 end local x = balls[i][1] local y = math.abs(math.sin(time()/200+balls[i][2])*50) elli(x+ballsize/2,140-i*6,ballsize/3,2,16-y/50*2) end for i=nballs,1,-1 do local x = balls[i][1] local y = -i*6+96-math.abs(math.sin(time()/200+ balls[i][2])*50) spr(1,x,y,15,3,0,0,2,2) end --rect(0,4,240,20,0) --[[vbank(1) --poke4(0x3FF0*2+12,15) spr(49,2,-6,8,1,0,0,10,3) print("6-7 Dec 2025\nAlmada, Portugal",2,20,12) --poke4(0x3FF0*2+12,0) vbank(0)--]] end function posadas_bdr(l) --vbank(1) poke(0x3fc0+12*3+0,255+math.sin(-l/10+time()/100)*40+180) poke(0x3fc0+12*3+1,255) poke(0x3fc0+12*3+2,255+math.sin(l/10+time()/200)*50+200)--math.sin(time()/1000)*100+100) -- poke(0x3FF8,14) --end --vbank(0) end --------------- function love_hurts_screen() poke(0x3FF8,0) cls() for x=0,240,2 do for y=0,136,2 do pix(x,y, math.sin(y*.1+time()/600+math.sin(time()/1200)*2)*(math.sin(time()/1100)*2+1) -math.cos(time()/1200+x*.005+(x~y)//1)*2%3+3 +math.sin(math.atan(x-120,y-66)*7+time()/1200)*(math.cos(time()/2200)*3+3) ) end end if _row < 16 then elseif _row < 32 then rect(10,120,61,7,0) print("suule - sprites",11,121,12,true,1,true) elseif _row < 48 then rect(10,120,58,7,0) print("jeenio - audio",11,121,12,true,1,true) else rect(10,120,38,7,0) print("ps - rest",11,121,12,true,1,true) end end ---------------------------- function sinebobs2_screen() local bgcolor = time()//1e3*8 poke(0x3FF8,bgcolor) cls(bgcolor) n=time()/1e3 for x=-9,9 do for y=-5,5 do circ(x*11+120, y*10+68, 3*math.sin(time()/400+x/2-y/3*math.sin(time()/300+y/10))+3, 7+time()//1e3*3) circb(x*11+120, y*10+68, 3*math.sin(time()/400+x/2-y/3*math.sin(time()/300+y/10))+2, 4+time()//1e3*8) end end print("en el verano se come menos! vamos a posadas party!",250-time()/10%500,128,12) for x=-9,9 do for y=-5,5 do i=y*math.sin(time()/300-11)+x*math.sin(time()/400) circ( (x*math.sin(time()/300-11)-y*math.sin(time()/400))*9+120, (i-(x//1~y//1))*3+61, math.sin(n*5+x+y)*3+4, 2+time()//1e3*3) circb( (x*math.sin(time()/300-11)-y*math.sin(time()/400))*9+120, (i-(x//1~y//1))*3+61, math.sin(n*5+x+y)*3+3, time()//1e3*8) end end end ------------------------------ function watermelons_screen() poke(0x3FF8,10) cls(10) local ttt = time()//200%4+2 for i=0,2 do circ(180+i*8-time()//2000,20,6,12) circ(188-time()//2000,18,8,12) end math.randomseed(2) for x=0,14 do local w=math.random()*70+30 local h=math.random()*20+10 local sw=math.cos(time()/500+x)*10 local sh=math.cos(sw*.0001+time()/2000+x*2)*sw local posx=(sw+math.random()*240+time()/w*6)%(240+w+x)-w local posy=sh+math.random()*(136)-h spr(9,posx,posy,15,2,0,0,2,2) end print("Te Gusta Guay",42,60,13,1,2) print("Te Gusta Guay",40,58,12,1,2) end ---------------------------- function bob_twister_screen() memcpy(120, 0, 120*135) local t=time()//16 for x=0,6,2 do for y=0,26,3 do local col=x%3+9 local px = 90+(x*6+math.cos(time()/500+x+y)*75+math.cos(y*10+x+time()/1000)*10)+math.cos(y/10)*30 local py = (y*6-t)%154-13+math.cos(t/10+x/10)*2 local size = 5--(x+y)%6+2 circ(px,py,size,col) circ(px,py,math.random(2),12) pix(math.random(240),math.random(136),12) end end end ------------------------------- function leviathan_tower_screen() local t = 5000+time()*0.0001 local s = math.sin local c = math.cos local x = 240 local y = 136 line(x/4 +s(t*10+2)*15+c(t*10+2)*15, 9 +s(t*10)*5-c(t*10)*5, x-x/4+s(t*10)*15+c(t*10)*15, 9 +s(t*10+1)*5-c(t*10+1)*5, 0) line(0,0,x,0,7) if s(t)>0.5 then line(0,2,x,2,9) end memcpy(0x6000,0,x*y/2) memcpy(x*2,0x6000,x*y/2-x*2) end -------------------------------- -- spinner function spinner(posx,posy,t,speed,crazy) for i=0,358 do for j=10,20 do pix( posx + math.sin(i+t*speed)*(20+j), posy + math.cos(i+t*speed)*(20+j), (i/(ang/div))%8+8) end j=9 pix( posx + math.sin(i+t*speed)*(20+j), posy + math.cos(i+t*speed)*(20+j), (i/((ang/div))+crazy)%8+8) j=21 pix( posx + math.sin(i+t*speed)*(20+j), posy + math.cos(i+t*speed)*(20+j), (i/((ang/div))-crazy)%8+8) end end div=100 ang=10 speed=0.002 function spinner_screen() dt = time() posx = 240/4 posy = 136/2 crazy = math.sin(dt*speed)*2 cls(14) spinner(posx,posy,dt,speed,crazy) posx=240-240/3+20 spinner(posx,posy,dt,-speed,crazy) print("te sientes mareado como si fuera 1995?!",250-time()/10%500,128,12) end ----------------------------- --[[ rect(12,42,106,50,0) print("TPOLM",20,50,12,false,7) rect(118,42,106,50,12) clip(118,42,106,50) print("TPOLM",20,50,0,false,7) clip() --]] pbtex={} function store_pbtex() for y=0,135 do pbtex[y]={} for x=0,239 do pbtex[y][x]=pix(x,y) end end end local rz_prep = false function rotozoomer_screen() if rz_prep == false then amiga_balls_screen() spr(49,2,-6,8,2,0,0,10,3) store_pbtex() rz_prep = true end local t=time() local a=t/1000 local s=1+0.8*math.sin(t/2300) local cx=120+120*math.sin(t/1234) local cy=68+120*math.sin(t/2345) for y=0,135 do for x=0,239 do local dx=x-cx local dy=y-cy local tx=(cx+math.cos(a)*s*dx+math.sin(a)*s*dy)//1 local ty=(cy+math.cos(a)*s*dy-math.sin(a)*s*dx)//1 pix(x,y,pbtex[ty%136][tx%240]) end end --rect(0,100,240,50,0) local txt = "perdon senor(a), es que puedo le hablar un poquito acerca de nuestro salvador, la inercia demoparty que ocurre 6-7 Deciembre en Almada Portugal?" print(txt,200-time()/10%4000+1,60,0,false,3) print(txt,200-time()/10%4000,58,math.sin(time()/1000)*8%8+2,false,3) end ----------------------------- function zombie_print(text,x,y,c,hop_spd) local lineidx=0 math.randomseed(_t//hop_spd) for str in string.gmatch(text, "([^%s]+)") do --print(str,0,lineidx*10,c) local charlen=0 for char in str:gmatch"." do local rsize = math.random(3) local msin = math.sin(_t/500+charlen/20+lineidx)*3 local msinx = math.sin(_t/500+lineidx)*5 local rnd = math.random(5) local tc = print(char,msinx+x+charlen+2,y+msin+lineidx*20+rnd*(3-rsize)+2,15,false,rsize) local xx=msinx+x+1+charlen local yy=msin+y+lineidx*20+rnd*(3-rsize) print(char,xx-1,yy,1,false,rsize) print(char,xx+1,yy,1,false,rsize) print(char,xx,yy-1,1,false,rsize) print(char,xx,yy+1,1,false,rsize) print(char,xx,yy,c,false,rsize) charlen = charlen + tc + 3-rsize end lineidx = lineidx+1 end end function greets1_screen() local rp = (_row+2)%4 if rp > 1 then rp = 0 end if rz_prep == false then amiga_balls_screen() spr(49,2,-6,8,2,0,0,10,3) store_pbtex() rz_prep = true end local t=time() local a=t/1000 local s=1+0.8*math.sin(t/2300) local cx=120+120*math.sin(t/1234) local cy=68+120*math.sin(t/2345) for y=0,135 do for x=0,239 do local dx=x-cx local dy=y-cy local tx=(cx+math.cos(a)*s*dx+math.sin(a)*s*dy)//1 local ty=(cy+math.cos(a)*s*dy-math.sin(a)*s*dx)//1 pix(x,y,pbtex[ty%136][tx%240]) end end rect(5,5,25,8,0) print("greets",6,6,12,true,1,true) local t = _t/100--(_t-flt)/60 local text = "" if _pattern == 10 then text = "batman_group collapse rift network tpolm" elseif _pattern == 11 then text = "spreadpoint the_black_lotus the_twitch_elite desire ephidrena" elseif _pattern == 12 then text = "capsule software_failure limbo spaceballs accession" elseif _pattern == 13 then text = "goblins ozone oftenhide thepetsmode obsolete" end zombie_print(text,25,20,12,rp) end function greets2_screen() local rp = (_row+2)%4 if rp > 1 then rp = 0 end poke(0x3FF8,bgcolor) cls(bgcolor) rect(5,5,25,8,0) print("greets",6,6,12,true,1,true) local t = _t/100--(_t-flt)/60 -- poke(0x3FF8,1) -- transparency layer index 1 -- cls(1) local text = "" if _pattern == 10 then text = "batman_group collapse rift network tpolm" elseif _pattern == 11 then text = "spreadpoint the_black_lotus the_twitch_elite desire ephidrena" elseif _pattern == 12 then text = "capsule software_failure limbo spaceballs accession" elseif _pattern == 13 then text = "goblins ozone oftenhide thepetsmode obsolete" end zombie_print(text,25,20,12,rp) end function greets2_bdr(l) local rp = (_row+2)%4 if rp > 1 then rp = 0 end local t=_t local max=16 local channel = {} --math.randomseed(l) channel[1] = 0 channel[2] = 0 channel[3] = 0 for i=1,max do local y=70+math.sin(rp/10+t/2000+i*math.pi/2+i*.45)*60 +math.sin(i*math.pi+math.sin(t//4000)*2)*15+2 local h=math.sin(y/300+t//1000)*2+4 if ((l > (y-h)) and (l < (y+h))) then channel[i%3+1] = channel[i%3+1] + (max-i)/2*(h-math.abs(l-y)+1) if channel[i%3+1] > 255 then channel[i%3+1] = 255 end end end poke(0x3fc0+bgcolor*3+0,channel[1]) poke(0x3fc0+bgcolor*3+1,channel[2]) poke(0x3fc0+bgcolor*3+2,channel[3]) end ------------------------------ function greets3_screen() local rp = (_row+2)%4 if rp > 1 then rp = 0 end local t=_t//32 local c=math.cos local a=math.abs for x=0,40 do for y=0,22 do local col=c(a(x-20)-a(y-10)*t*0.1)%3+2 rect(x*6,y*6,6,6,col) end end rect(5,5,25,8,0) print("greets",6,6,12,true,1,true) local t = _t/100 local text = "" if _pattern == 10 then text = "batman_group collapse rift network tpolm" elseif _pattern == 11 then text = "spreadpoint the_black_lotus the_twitch_elite desire ephidrena" elseif _pattern == 12 then text = "capsule software_failure limbo spaceballs accession" elseif _pattern == 13 then text = "goblins ozone oftenhide thepetsmode obsolete" end zombie_print(text,25,20,12,rp) end function greets4_screen() local rp = (_row+2)%4 if rp > 1 then rp = 0 end local t=_t/1000 for x=-80,80,1.5 do for z=-40,40,.5 do y=(math.sin(x/9-t)*2 +math.cos(x/30-t)*4 +math.sin(z/8))/7 u=64+x*4+z*8 v=64+x*2-z*2-y*12 circb(u,v,4-(y*8)%3,(y*5)%7+8) end end rect(5,5,25,8,0) print("greets",6,6,12,true,1,true) local t = _t/100 local text = "" if _pattern == 10 then text = "batman_group collapse rift network tpolm" elseif _pattern == 11 then text = "spreadpoint the_black_lotus the_twitch_elite desire ephidrena" elseif _pattern == 12 then text = "capsule software_failure limbo spaceballs accession" elseif _pattern == 13 then text = "goblins ozone oftenhide thepetsmode obsolete" end zombie_print(text,25,20,12,rp) end ----------------------------- _track = 0 _pattern = 0 _row = 0 _t=0 musicplaying = false current_bank_id = 0 current_track_id = 0 -- jumpstart somewhere, default should be 1 -- because indexes for arrays in lua start in 1 instead of 0 lol current_scene_id = 1 scenes = { { init = no_fn, frame = amiga_balls_screen, bdr = no_fn, bank_switch = 0, bank_switch_mask = 0, track_start = 0, pattern_start = 0 },{ init = no_fn, frame = watermelons_screen, bdr = no_fn, bank_switch = 0, bank_switch_mask = 0, track_start = 0, pattern_start = 1 },{ init = no_fn, frame = love_hurts_screen, bdr = no_fn, bank_switch = 0, bank_switch_mask = 0, track_start = 0, pattern_start = 2 },{ init = no_fn, frame = sinebobs2_screen, bdr = no_fn, bank_switch = 0, bank_switch_mask = 0, track_start = 0, pattern_start = 3 },{ init = no_fn, frame = leviathan_tower_screen, bdr = no_fn, bank_switch = 0, bank_switch_mask = 0, track_start = 0, pattern_start = 4 },{ init = no_fn, frame = spinner_screen, bdr = no_fn, bank_switch = 0, bank_switch_mask = 0, track_start = 0, pattern_start = 5 },{ init = no_fn, frame = rotozoomer_screen, bdr = no_fn, bank_switch = 0, bank_switch_mask = 0, track_start = 0, pattern_start = 6 },{ init = no_fn, frame = rotozoomer_screen, bdr = no_fn, bank_switch = 0, bank_switch_mask = 0, track_start = 0, pattern_start = 7 },{ init = no_fn, frame = rotozoomer_screen, bdr = no_fn, bank_switch = 0, bank_switch_mask = 0, track_start = 0, pattern_start = 8 },{ init = no_fn, frame = rotozoomer_screen, bdr = no_fn, bank_switch = 0, bank_switch_mask = 0, track_start = 0, pattern_start = 9 },{ init = no_fn, frame = greets1_screen, bdr = no_fn, bank_switch = 0, bank_switch_mask = 0, track_start = 0, pattern_start = 10 },{ init = no_fn, frame = greets2_screen, bdr = greets2_bdr, bank_switch = 0, bank_switch_mask = 0, track_start = 0, pattern_start = 11 },{ init = no_fn, frame = greets3_screen, bdr = no_fn, bank_switch = 0, bank_switch_mask = 0, track_start = 0, pattern_start = 12 },{ init = no_fn, frame = greets4_screen, bdr = no_fn, bank_switch = 0, bank_switch_mask = 0, track_start = 0, pattern_start = 13 } } function start_scene(scene_id) current_scene_id = scene_id sync(scenes[scene_id].bank_switch_mask, scenes[scene_id].bank_switch) music(scenes[scene_id].track_start, scenes[scene_id].pattern_start, -1, false) musicplaying = true scenes[current_scene_id].init() current_bank_id = scenes[scene_id].bank_switch end function TIC() --hide cursor poke(16379,2) if keyp(60) then -- left arrow, go back one frame musicplaying = false music() current_scene_id = current_scene_id - 1 if current_scene_id < 1 then current_scene_id = 1 end start_scene(current_scene_id) end if keyp(61) then -- right arrow, go forward one frame musicplaying = false music() current_scene_id = current_scene_id + 1 if current_scene_id > #scenes then current_scene_id = current_scene_id - 1 end start_scene(current_scene_id) end if not musicplaying then if current_scene_id < 1 then current_scene_id = 1 end start_scene(current_scene_id) end -- get global music sync refs _t=time() _track = peek(0x13FFC) _pattern = peek(0x13FFD) _row = peek(0x13FFE) -- check what track we are at -- skip to next track and scene when no longer playing music (loop false) if _track == 255 then --[[if current_scene_id < #scenes then current_scene_id = current_scene_id + 1 if current_scene_id <= #scenes then musicplaying = false music() start_scene(current_scene_id) end else--]] current_scene_id = 11 start_scene(current_scene_id) --trace("... and don't forget to come ...") --trace("6-7 Dec 2025 | Almada, Portugal") --exit() --end else current_scene_id = _pattern + 1 end if current_scene_id <= #scenes then scenes[current_scene_id].frame() end --[[ print(_track,2,0,5) print(_pattern,20,0,5) print(_row,40,0,5) print("scene: " .. current_scene_id,2,10,5) print("bank: " .. current_bank_id,2,20,5)--]] --print(ftime(),60,0,5) end function BDR(l) scenes[current_scene_id].bdr(l) end