From cf548fd4f39fe0b20b9fda1eef89b81963a62ea1 Mon Sep 17 00:00:00 2001 From: bQUARKz Date: Fri, 27 Mar 2026 23:53:41 +0000 Subject: [PATCH] added fragments --- test-projects/fragments/cartridge/program.pbx | Bin 9160 -> 14326 bytes test-projects/fragments/src/main.pbs | 76 ++++++++++++++---- 2 files changed, 59 insertions(+), 17 deletions(-) diff --git a/test-projects/fragments/cartridge/program.pbx b/test-projects/fragments/cartridge/program.pbx index 544f79172ad8cf76702f73a3a21f1dca6497cec7..b5cbd5e6a5954883c1586db624a18b7100bc8b25 100644 GIT binary patch literal 14326 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 HEhqY4ZyO$0 literal 9160 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 LAoL$6Inn void @@ -28,12 +28,13 @@ fn frame() -> void let cy = SCREEN_H / 2; let phase = ticks / 2; - Gfx.clear(new Color(0)); + Gfx.clear(new Color(33)); for y: int from 0 until SCREEN_H step CELL { let dy = y - cy; for x: int from 0 until SCREEN_W step CELL { let dx = x - cx; + let md = abs_i(dx) + abs_i(dy); let seed_x = dx / 3 + ((phase % 29) - 14); let seed_y = dy / 3 + (((phase * 3) % 23) - 11); @@ -41,7 +42,7 @@ fn frame() -> void let zy: int = seed_y; let iter: int = 0; - while iter < 5 { + while iter < 3 { let ax = abs_i(zx); let ay = abs_i(zy); let nx = ((zx * zx - zy * zy) / 48) + seed_x + ((ay * 3) / 8) - 9; @@ -53,30 +54,33 @@ fn frame() -> void let axf = abs_i(zx); let ayf = abs_i(zy); - let energy = (axf + ayf + iter * 9 + ((x + y + phase) % 31)) % 128; + let ripple = (md / 9 + phase + ((dx - dy) / 12)) % 64; + let cloud = ((axf * 2) + (ayf * 3) + ripple + ((x - y + phase) % 29)) % 128; + let glow = ((abs_i(dx / 3) + abs_i(dy / 2)) / 8 + phase) % 32; + let energy = (cloud + glow) % 128; let r = if energy > 95 { - 24 + ((phase + x / CELL) % 7) + 6 + ((phase + x / CELL) % 6) } else if energy > 63 { - 10 + ((energy + phase) % 12) + 4 + ((energy + phase) % 8) } else { - (energy / 8) % 8 + (energy / 24) % 3 }; let g = if energy > 95 { - 8 + ((phase + y / CELL) % 22) + 6 + ((phase + y / CELL) % 12) } else if energy > 63 { - 14 + ((energy + phase) % 26) + 8 + ((energy + phase) % 14) } else { - 2 + ((energy / 4) % 10) + 2 + ((energy / 12) % 5) }; let b = if energy > 95 { - 26 + ((phase + x / CELL + y / CELL) % 5) + 24 + ((phase + x / CELL + y / CELL) % 5) } else if energy > 63 { - 16 + ((energy + phase) % 14) + 18 + ((energy + phase) % 10) } else { - 6 + ((energy / 3) % 16) + 7 + ((energy / 6) % 12) }; let color_raw = r * 2048 + g * 32 + b; @@ -84,8 +88,46 @@ fn frame() -> void } } - Gfx.draw_circle(cx, cy, 24 + (phase % 6), new Color(31743)); - Gfx.draw_circle(cx, cy, 52 + ((phase + 3) % 9), new Color(21119)); - Gfx.draw_circle(cx, cy, 78 + ((phase + 5) % 7), new Color(10591)); + let star_a = (phase * 3) % SCREEN_W; + let star_b = (phase * 5 + 37) % SCREEN_W; + let star_c = (phase * 7 + 91) % SCREEN_W; + let star_d = (phase * 11 + 143) % SCREEN_W; + let star_e = (phase * 13 + 211) % SCREEN_W; + let star_f = (phase * 17 + 17) % SCREEN_W; + + let star_y0 = 18 + ((phase * 2) % 24); + let star_y1 = 42 + ((phase * 3) % 18); + let star_y2 = 70 + ((phase * 4) % 22); + let star_y3 = 104 + ((phase * 5) % 16); + let star_y4 = 132 + ((phase * 6) % 20); + let star_y5 = 154 + ((phase * 7) % 14); + + let twinkle0 = phase % 6; + let twinkle1 = (phase + 2) % 6; + let twinkle2 = (phase + 4) % 6; + let twinkle3 = (phase + 1) % 6; + let twinkle4 = (phase + 3) % 6; + let twinkle5 = (phase + 5) % 6; + + let star_s0 = 1 + (twinkle0 / 4); + let star_s1 = 1 + (twinkle1 / 4); + let star_s2 = 1 + (twinkle2 / 4); + let star_s3 = 1 + (twinkle3 / 4); + let star_s4 = 1 + (twinkle4 / 4); + let star_s5 = 1 + (twinkle5 / 4); + + let star_c0 = 57023 + twinkle0 * 1056; + let star_c1 = 48607 + twinkle1 * 1376; + let star_c2 = 44383 + twinkle2 * 1584; + let star_c3 = 61279 + twinkle3 * 704; + let star_c4 = 40159 + twinkle4 * 1696; + let star_c5 = 52831 + twinkle5 * 992; + + Gfx.fill_rect(star_a, star_y0, star_s0, star_s0, new Color(star_c0)); + Gfx.fill_rect(star_b, star_y1, star_s1, star_s1, new Color(star_c1)); + Gfx.fill_rect(star_c, star_y2, star_s2, star_s2, new Color(star_c2)); + Gfx.fill_rect(star_d, star_y3, star_s3, star_s3, new Color(star_c3)); + Gfx.fill_rect(star_e, star_y4, star_s4, star_s4, new Color(star_c4)); + Gfx.fill_rect(star_f, star_y5, star_s5, star_s5, new Color(star_c5)); } -// Estimated frame cost: 3600 fills + ~18000 fractal-iteration steps + 3 circles/frame at CELL=4. +// Estimated frame cost: ~920 fills + ~2760 fractal-iteration steps + 6 twinkling parallax stars/frame at CELL=8.