From 70d78e2b37c8623572b7d1068b518ca7a117ded2 Mon Sep 17 00:00:00 2001 From: bQUARKz Date: Fri, 27 Mar 2026 23:16:56 +0000 Subject: [PATCH] added fragments --- test-projects/fragments/cartridge/program.pbx | Bin 4895 -> 9160 bytes test-projects/fragments/src/main.pbs | 79 +++++++++++++++--- 2 files changed, 67 insertions(+), 12 deletions(-) diff --git a/test-projects/fragments/cartridge/program.pbx b/test-projects/fragments/cartridge/program.pbx index 94fd28b85918533bbf7772ea23255df7f1c77269..544f79172ad8cf76702f73a3a21f1dca6497cec7 100644 GIT binary patch literal 9160 zcmai)33L|K8HOie5fKp)2~xxmQrs{^MGhiT_=Bj38W3ENW7rZ2LJT1+1&To3i>Qc* zNG(N*OL0R~q-v34DQ>u-RqBFBEl1HRTBR=7=e_ezGW_cCJLjEwpZV^+bMKus|D-f? zPNZlUmOotNu&GpeOfKuetY_>KMGf#THHo5Q+D1_${C5RW^c?FJNKq88Smp*#QAbYH z4VUI#S=esM-Qag$AP@|~0aTGNdhRBI}nN?mj24wM2IG;>B#)i=}xDy1T(lBXk?i2E* zq5eRU+K<+%RnHkH9&r>MN7ceQiZdN38@qw*QIQu~$dCG%dedND*mcLK#M@Sfa=9$E zO?&K((&d!XJgeIb%)TUaJ`}GzoPy zcNr8#s-qdmgk@gXLq{m?$Dw2jX-~(yLzGWh^(o`M=q#)+D=MI@_O3env5xELY|Dh2 zCDFdYYfDKuVo6_BIuq*Tg&wP~gXlyi)F=&mEQy+hQaaMfmi@z)xK%9+sG)qkET9K@ zQ8BE3s_*%%RVN;)`m4TlWP4uNljcLC&7}6FQf)%1Oen23G(Smy)owv(;XqtraB5X; z9T3W?#boT-5|2HppTic-t>z#%It|==)ViwU@g$?xelp=|&qVV1b$yBFKpY=q9Tk!K zt1%wNI_}}D;7X#FtTSPm7nR|UXXbOM7LPd@sanemMi^31dxZM& zafsVb_OB!O!+P;Ch>t}fGjR~5k~Wh*Eevg{WYQ-#?A52%b#3qbkv?q-_2Xl^cb~Y4 zx=*SXU$e>Hbv<=to5rGkmqe{_NjB+QhGKb<+DZDh_k1N+ZroZvWtETTVG$dX_LBLV z7TSxC``&$3|Lg1J`Px;PW-L5&yP%M4P?8bPgo}R^a)v{ekZwj6v=Vc7$=0Q z>!kDo84bL8hr#m8wvnERhDJHgMkOc>1%`Mtm=f z?^F}QeQ{uPohHgL2!90!N;MP->)0t0)?H7LuBEE)^R^`E5?5?8endNKLl~YhEQHS*xUl& z9St>i#vg-*n~U+sqKZ^rtm{khOZ;(YY>ZJ~{3)o~d@{Ztsxe=JpNyuOYw?rN%&h#Z zEWXlw8S6P{uK9ZE-hk$tFE=kRPls zXtnuo_zh@nDldNA{2>1CXubJ8{5G`F`~rSE+GPF)|1H{V{s{k2lPKDf#aqqEcs|I= z@5tg$%tz)%(NX9N^D+1?=<8Ho{H-}3UyO3;hvIa6f7HZ$BK}_b*F1}Lo+*;!)ix{N zE{hAy(`j!8IwGl$pN)!Ad9lt*MGbxq>SkVoza8~7{}I0oWm0*u&Qrym_?4)?`F{L^ zs5F%q>pE6EjDHlJZ(d;@YS#YOpke0g@sFXA=2!8rp)uw+@Nc53R9;+deiy$T>6%ge z8@~h1Nae*d%{%d*AYBKFcg$Cscfntvx#qXc^UUhsf03>!#RmMBNY{a)C6AsqXo^fr=i#-< zya-;5Hk;?;Z$n$m*Wj0+t>(w^PofXZkKq4`cAD?SuS2`cZ{goTyUp+6-$#2=d2x6+ zv-$wP12tw26(8Y0M$OF1i<_I(zPN??GyLbMwfUdsHs-J3?@)X57PGEfMJ{vG5Op%| zgKvU5r}E+=b2I$@sH-{0+|8`^o3pLE`9OS2)GL)2_cp&w`Geqo<}UbS(ExK-d^e=O zx)jQb2b+7~d!nJ{BJ(hFZ@3>CX+Fk0+I$9FipHAH!Jmh!%|r1QqRFYecxtM?c$&Ek zKLX7%_c!Yvq|p9HqRY+Y_zHAwDleXEF2rAq=9_Jx?$@TQKc`J3dp=Zro@b9CS%rD`$qu0$jy!JLgZ<)U# z*AU)j{tRve>z<{^$9F`!XDK@2k3_mhDU=s~Y3__KM&Fu`$9F}!oM#H<#kwykRA1cK zd?LOFYGyte-wWx!rchqo%G?Lv54BC@#qG@f@dHqSxx2a0to@&fbRSd<#1BTD&4-zb z%q`&|NcT}i6}}erFi*k%8ud=)#ToM@c>Ok}`>J9tJP(~^z6rkw4L09~UxJ33pQ6rs zG(45RgZ#);eer1Xo%p-ZSo3`IIJ5SDH`0Auk@Th zPeI$vGw`#~4)f*sE6^wA&o ztXa=Yh1%bWJ}@Wy-)U}4U-m(}%+2sE(Qfm>_||AoDld+>k0{#W+o8th{mlABUZM66 zMNQ4U=u2m~g}Fce4Ak0u7Jd+Fm&%LVn}^`fMTO=I@E4+^QhBkS(+agOE;3()FGG4} zCwXxE zUHn$GDwP+nPSt-8e#HDSeiwS&{22ZVwBFp5AKIFsjppX~7HE^XCB7BfY(50v9&Isq zz!#vcsl0fbxfA|yw8PxS{GnOxAAxq7yW&qoyUbtH*OTDg=7IQg&>r&;{CTJ$_gTdS z_zO`}^Kg7QYGEFOuSBg=d2t)_czhLVZ!R$~W6sJ~gymjy`QQ&oNiKa}2&2AOZh zKY;XJqWnnwqe$Od#ktIH12o*+2(Nogg}DiSUo_6F`%w#2WBw2Kp9A5k=H+l3Sp8J{ z^YJ&KS>~JZ3(=M4Mfh8h#;EeQ;qOFxM-ktR*Y9bI%(L;U(e38;_`jf~NuK@x7OgN} zfxil^H0xRQJG9EI=arsEYs@#|7osQ4)%aV`)8=2`Z%6w6tp4eEXVCNJzW7tnE9O)2 zr=d5@{qbj@cg$zvbl@J~cnZSapu>GWX_K_CdSNCHTH*kGUWI zOw^D*tNpX_gOT1-#9i=1klusDTls`F4A%E^@wc?|9cp9#9v|V`n{!z=K!xT;tQ(`F z%uQJDkMs_t_CBJ1b9^`RV)$UZzRxRv75kru^js6)fWH~_HQ$0?g!-Eo<8MQy=HKI& zqjSwG@DHG2=2iGLXry^9ejOTPUXS01^j@X?KZ}0_)tV>aUq#c*Rrt+FU*Qz`K2}y% zJ#u1EMa_uuN4Xm9X%<@jW5<~ zy1u=|ZC2M@I<|aNZCr7Dcqi6)ce%d{i0O&bHXfy`uoP))&HC@QR%H3Kx(Voh)0kUX*ScPHH5udt{X$Djiyok LAoL$6Innz?tGqq76`OKHqbHr`+Cc;iTVl zzn}9v=iGD7z4tu#wmEaHQyT5_|IShrHKXGwjT$M~Gs-#s+;JK$n&4a+zIC#5hdE9} zO105}JnenOFsIxce4OVcxCx%FlezJz%yr@`g+8TR(O6@1F6CAxcmS>@63uC}+YQ&i z8mICj2_AwkBvS6<<*tUwRpUeZCOF={05=jJi&EtEM1Of8fuHTb-RK9qVBl!8MnTJta-&8yd+>Ho*0HR<(t!l`TNPB>Mq z=nC}O{T_|^e~nA4f2zKE{T+6yTH%^U_fd3*ME8QOTCZQ(7B`3wX$Z5Q>VzF7Rv#P=INiT?{y9i{j1AD}}Kx)1Rmp*M^b7r$xzG5$03j`1=4 zm*}stxcI|Zd+|}@Z}9&>pBTSu{HgI__&EB?cw*YQN$9xo6nqsLip9kzjL*QIjned? zGy^{qRTwKS9&4=r#p8|7#h;HR8&?`nF;2l3pfik{@C#72@s;?6s3sN{pJ&{HZ$-7n zmmAj^-vGCvImTIhJDMAdi|57Ki|dVZ_$8>xxY2ll@lW8}(ACCk@M}@4@jdu^(ao{A zxXt(h{05|FLTNL83%V^97wZ{NT5a)y@iurnDjKgcE*UR}|Aw(yWn^ z&MzKq+<;$##u~4}uSTaC--Ta`rWp^?$3djGQKi6o?v=Jv_fd47aS8u8sx=P#>+D4P zpC;mS6P!t~_5h{u`*XE%7>}O$c>MYVwedG+>;r;9Cr7Pf-0b zd^y@`T!9~h9yT6_KMn0N{+gGhN$``#JK@ve-NwJe{~ql%-iY6X_8D)%KZp((KZJi2 zy<+@0{#m4FUgP^UelL2QAPvb|S8;#5G<>*%93j74rY5WE4E8(TaTj8m2!FV0# zA3#Op_4tjb-*_{A3%WD3$3KMD82~Z~P4YMYPFyAN~N^W_%ET2<EeZM55X8U6?g|F@XNnq;#*9euT3#rE!8_KsqEPfxBmtJ}XI@K25q%@=an z{IYy$R#zRjlAAId>At;ld5CrE=fF)Jj`b98Uz%H7iW+v;=>q5z)SpU51?p56iJQb- z(bZqOxR7fvvcmr3akwCR>6}ZsmHfC>*ja49BfB_Xq_!IBLvy&eGvBwEDUK{GZw0Tgvs9)MMziD_OjM%L$4bY!*zi++6|A-|*Z5O@q2i^QK&;gIh-Q%T-*fTWn!<>lhvyLMW2`$l K3H@Uy<^BWkvgJ$w diff --git a/test-projects/fragments/src/main.pbs b/test-projects/fragments/src/main.pbs index d81851a6..e8f1dcb6 100644 --- a/test-projects/fragments/src/main.pbs +++ b/test-projects/fragments/src/main.pbs @@ -4,7 +4,7 @@ import { Gfx } from @sdk:gfx; declare global ticks: int = 0; declare const SCREEN_W: int = 320; declare const SCREEN_H: int = 180; -declare const CELL: int = 8; +declare const CELL: int = 4; [Init] fn init() -> void @@ -12,25 +12,80 @@ fn init() -> void ticks = 0; } +fn abs_i(v: int) -> int +{ + if (v < 0) { + return 0 - v; + } + return v; +} + [Frame] fn frame() -> void { ticks += 1; - for y: int from 0 until SCREEN_H step CELL { - let gy = y / CELL; - for x: int from 0 until SCREEN_W step CELL { - let gx = x / CELL; - let wave_a = (gx * 211 + ticks * 9) % 31; - let wave_b = (gy * 173 + ticks * 7) % 63; - let wave_c = ((gx + gy) * 149 + ticks * 11) % 31; - let wave_d = ((gx * gy) + ticks * 5) % 63; + let cx = SCREEN_W / 2; + let cy = SCREEN_H / 2; + let phase = ticks / 2; - let r = (wave_a + wave_c) % 31; - let g = (wave_b + wave_d) % 63; - let b = ((wave_a + wave_b + wave_c) / 3) % 31; + Gfx.clear(new Color(0)); + + 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 seed_x = dx / 3 + ((phase % 29) - 14); + let seed_y = dy / 3 + (((phase * 3) % 23) - 11); + + let zx: int = seed_x; + let zy: int = seed_y; + let iter: int = 0; + + while iter < 5 { + let ax = abs_i(zx); + let ay = abs_i(zy); + let nx = ((zx * zx - zy * zy) / 48) + seed_x + ((ay * 3) / 8) - 9; + let ny = ((ax * zy) / 24) + seed_y + ((phase + iter * 7) % 17) - 8; + zx = nx; + zy = ny; + iter += 1; + } + + let axf = abs_i(zx); + let ayf = abs_i(zy); + let energy = (axf + ayf + iter * 9 + ((x + y + phase) % 31)) % 128; + + let r = if energy > 95 { + 24 + ((phase + x / CELL) % 7) + } else if energy > 63 { + 10 + ((energy + phase) % 12) + } else { + (energy / 8) % 8 + }; + + let g = if energy > 95 { + 8 + ((phase + y / CELL) % 22) + } else if energy > 63 { + 14 + ((energy + phase) % 26) + } else { + 2 + ((energy / 4) % 10) + }; + + let b = if energy > 95 { + 26 + ((phase + x / CELL + y / CELL) % 5) + } else if energy > 63 { + 16 + ((energy + phase) % 14) + } else { + 6 + ((energy / 3) % 16) + }; let color_raw = r * 2048 + g * 32 + b; Gfx.fill_rect(x, y, CELL, CELL, new Color(color_raw)); } } + + 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)); } +// Estimated frame cost: 3600 fills + ~18000 fractal-iteration steps + 3 circles/frame at CELL=4.