0,]']±>Sļ}W’Ķu§šp8·d%qy)6o;]ÉA¦ösļ÷ōōō”°ĀVl†30 then sz=rnd(-5,5) end for i=-1,16 do circ(c1[i].x,68+18*2+sz,c1[i].r,12) end rect(0,68+18*2+sz,240,68,12) end function draw_cloud2() local sz=0 if flash_timer>0 then sz=rnd(-5,5) end for i=-1,16 do circ(c2[i].x,68+23*1+sz,c2[i].r,11) end rect(0,68+23*1,240,68,11) end function draw_cloud3() local sz=0 if flash_timer>0 then sz=rnd(-5,12) end for i=-1,16 do circ(c3[i].x,68+23*0+10+sz,c3[i].r,10) end rect(0,68+23*0+10+sz,240,68,10) end function upd_cloud1() for i=-1,16 do c1[i].x=c1[i].x-16/30 if c1[i].x<-32 then c1[i].x=256 end end end function upd_cloud2() for i=-1,16 do c2[i].x=c2[i].x-16/40 if c2[i].x<-32 then c2[i].x=256 end end end function upd_cloud3() for i=-1,16 do c3[i].x=c3[i].x-16/60 if c3[i].x<-32 then c3[i].x=256 end end end t=0 x=0 y=0 r=3 h=140 l=240 dx=.61 dy=.61 n=50 f={} for i=1,n do f[i]= { x=x+math.random(-r,r), y=y+math.random(-r,r), r= math.random(2,5) } end fmin=1 fmax=5 function upd_f() for i=1,n do f[i].r=f[i].r-1/8 if f[i].r<0 then f[i]= { x=x+math.random(-r,r), y=y+math.random(-r,r), r=math.random(fmin,fmax) } end end end function draw_f() for i=1,n do circ (f[i].x, f[i].y, 2*f[i].r,12) circb (f[i].x, f[i].y, 2*f[i].r,9+rnd(0,2)) end end function upd() x=x+dx y=y+dy if xl-r then x,dx =l-r,-dx music(0) end if yh-r then y,dy =h-r,-dy music(0) end end my_text = { "The sky shifted, pale shapes", " drifting where once there was only warmth.", " Nothing moved beneath the pale glow, ", " but the air held whispers of something lost.", "The sky breathed quiet colors.", "Ash fell where dawn once stood.", "Clouds curled like forgotten thoughts.", "A small fire blinked in distance,", "just like a pale haze.", "Ash fell there another time.", "No voices called from the night,", "Days' soft glow faded too soon.", "Embers floated in the wind,", "but between empty gusts it was calm.", "The horizon blurred without promise.", "A hush draped over the clouds,", "shadows lingered without shape,", "it carried an old warmth with it.", "Clouds parted without revealing more light.", "Night came but left no sound.", "A faint gleam sank beneath a faraway mist.", "The air shifted, heavy with waiting,", "clouds drifted as if remembering.", "Nothing stirred in the quiet blaze.", "Echoes danced across the pale expanse.", "The nights's breath grew thin and cold.", "Fire spiraled in unseen patterns.", "Clouds held stories they would not tell.", "A shimmer lost itself in distant blue.", "Sparks fell like stars unclaimed.", "The edge of light softened to gray.", "Clouds swallowed the horizon whole.", "Fire dimmed without surrender.", "Mist gathered where clouds once roared.", "A faint crack split silent skies.", "Clouds thickened with quiet purpose.", "A smolder drifted between empty skies.", "The air pressed close, unseen and still.", "New clouds bowed under an invisible weight.", "A soft flare died in twilight in silence.", "Shadows rose without warning or reason.", "Then clouds veiled the stars' pale gaze.", "Fire pulsed behind a silent veil.", "A sigh slipped through drifting clouds.", "No shapes formed from the smoke.", "Clouds pooled where night hesitated.", "A spark promised what light could not.", "Whispers hid behind shifting clouds.", "A glow lingered beneath silver mist.", "Fire etched brief paths through dark.", "Clouds wept without rain or sound.", "Stillness wrapped itself around light.", "Clouds leaned close to the quiet fire.", "A flicker passed, unseen by sky’s edge.", "Ash spread beyond where clouds dreamed.", "The horizon trembled with quiet heat.", "A final cloud exhaled soft silence." } function split_text(text, max_chars) local lines = {} local current_line = "" for word in text:gmatch("%S+") do -- %S+ matches non-space sequences if #current_line + #word + 1 <= max_chars then if #current_line > 0 then current_line = current_line .. " " .. word else current_line = word end else table.insert(lines, current_line) current_line = word end end if #current_line > 0 then table.insert(lines, current_line) end return lines end text_start_time = -1 text_duration = 7000 -- milliseconds current_line = 1 active_text = nil wrap_width = 18 -- max characters before wrapping text_color=5 function display_text(text_array) if active_text ~= text_array then -- first time calling with this text array active_text = text_array current_line = 1 text_start_time = time() end if current_line <= #active_text then local text = active_text[current_line] local lines = split_text(text, wrap_width) local sz=0 if flash_timer>0 then sz=rnd(-3,4) sz=rnd(-3,4) end for i, line in ipairs(lines) do print(line, 10+sz, 10+sz + (i - 1) * 17, text_color,3,2) end local elapsed = time() - text_start_time if elapsed > text_duration then text_start_time = time() current_line = current_line + 1 end end end normal_bg_color = 24 flash_bg_color = 12 flash_duration = 20 flash_timer = 0 function update_flash() if flash_timer > 0 then flash_timer = flash_timer - 1 cls(flash_bg_color) else cls(normal_bg_color) if math.random(1, 100) == 1 then flash_timer = flash_duration end end end function TIC() update_flash() local t=time()// 100 local text_blink = t % 50 -- alternates 0, 1 every second if text_blink == 0 then text_color=8+rnd(1,2) end upd_cloud3() draw_cloud3() upd_cloud2() draw_cloud2() upd_cloud1() draw_cloud1() upd() upd_f() draw_f() display_text(my_text) if btnp(0) and current_line>1 then current_line= current_line-1 end if btnp(1) and current_line<#my_text then current_line= current_line+1 end if btnp(2) and current_line>1 then current_line= current_line-1 end if btnp(3) and current_line<#my_text then current_line= current_line+1 end if current_line>=#my_text then current_line=1 end end