`"3"3DUfwDUfwˆ™ª»ˆ™ª»ÌÝîÿÌÝîÿ"3"3DUfwDUfwˆ™ª»ˆ™ª»ÌÝîÿÌÝîÿx -- title: color functions -- author: MonstersGoBoom -- desc: findCloseRGB in palette & HSV -- script: lua local min = math.min local max = math.max function RGBto24() local v = (self.r*255)<< 16 v = v | (self.g*255) << 8 v = v | (self.b*255) return v end function RGBfrom24(v) local r = ((v>>16)&0xff)/255 local g = ((v>>8)&0xff)/255 local b = ((v)&0xff)/255 return r,g,b end function HSVtoRGB(h, s, v) local r, g, b local i = (h * 6)//1; local f = h * 6 - i; local p = v * (1 - s); local q = v * (1 - f * s); local t = v * (1 - (1 - f) * s); i = i % 6 if i == 0 then r, g, b = v, t, p elseif i == 1 then r, g, b = q, v, p elseif i == 2 then r, g, b = p, v, t elseif i == 3 then r, g, b = p, q, v elseif i == 4 then r, g, b = t, p, v elseif i == 5 then r, g, b = v, p, q end return r,g,b end function RGBtoHSV(r,g,b) local max, min = math.max(r, g, b),math.min(r, g, b) local h, s, v v = max local d = max - min if max == 0 then s = 0 else s = d / max end if max == min then h = 0 -- achromatic else if max == r then h = (g - b) / d if g < b then h = h + 6 end elseif max == g then h = (b - r) / d + 2 elseif max == b then h = (r - g) / d + 4 end h = h / 6 end return h, s, v end function pal(i,r,g,b) --sanity checks if i<0 then i=0 end if i>15 then i=15 end --returning color r,g,b of the color if r==nil and g==nil and b==nil then return peek(0x3fc0+(i*3)),peek(0x3fc0+(i*3)+1),peek(0x3fc0+(i*3)+2) else if r==nil or r<0 then r=0 end if g==nil or g<0 then g=0 end if b==nil or b<0 then b=0 end if r>255 then r=255 end if g>255 then g=255 end if b>255 then b=255 end poke(0x3fc0+(i*3)+2,b) poke(0x3fc0+(i*3)+1,g) poke(0x3fc0+(i*3),r) end end t=0 x=104 y=24 h = 0 s = 0 v = 0 function findCloseRGB(nr,ng,nb) local minDistance = 99999999 local value = 0 for i=0,15 do local dr = peek(0x3fc0+(i*3)) local dg = peek(0x3fc0+(i*3)+1) local db = peek(0x3fc0+(i*3)+2) local dist = math.sqrt( math.pow(nr - dr, 2) + math.pow(ng - dg, 2) + math.pow(nb - db, 2) ) if (dist <= minDistance) then minDistance = dist value = i end end return value end palette = {} for p=1,16 do palette[p] = {} r,g,b = pal(p-1) palette[p][1] = r palette[p][2] = g palette[p][3] = b end function TIC() if btn(0) then h=h-0.01 end if btn(1) then h=h+0.01 end if btn(2) then s=s-0.01 end if btn(3) then s=s+0.01 end if btn(4) then v=v-0.01 end if btn(5) then v=v+0.01 end h = max(-2.0,h) h = min(2.0,h) s = max(-2.0,s) s = min(2.0,s) v = max(-2.0,v) v = min(2.0,v) cls(0) for b=0,15 do for r=0,15 do for g=0,15 do local id = findCloseRGB(r*16,g*16,b*16) rect(r+(b*16),g,1,1,id) end end end for y=0,3 do for x=0,3 do local id = y*4 + x rect(x*16,16+y*16,16,16,id) end end -- spr(1,34,0,-1,4) for p=1,16 do r = palette[p][1]/255 g = palette[p][2]/255 b = palette[p][3]/255 _h,_s,_v = RGBtoHSV(r,g,b) _h = _h + h _s = _s + s _v = _v + v r,g,b = HSVtoRGB(_h,_s,_v) pal(p-1,r*255,g*255,b*255) end print(string.format("h %.2f s %.2f v%.2f",h,s,v),84,120) t=t+1 end > 0ÿÿÿÿÿÿÿÿ2Tv˜ºÜþïÍ«‰gE#2Tv˜ºÜþ2Tv˜ºÜþ 0 D$404mNJN…L04e$ÿuqaY}Îÿ…•¡mª,Òª™mÂÊÚÔ^ÿÿÿ|GIF87aðˆ³ D$304mNJN…L04e$ÿuqaX|Îÿ…•¡lª+Òª™mÂÊÚÔ^ÿÿÿ,ðˆÿHj Äh=©Å7YväeŠ@ªfÛ˜b0'ÜI×xŸïŸhöˆÆ£)‰;8Å$bŠP0FªöêÓz¯�ViÅ�ɨíäQ£Ûç•$§#F{qžq°ƒ1ûL@‚NOXL‡V‰BZ Œ]^S‘7“_ iqlpv2nrp/¢.€67uH>|§{®kw¬„…I‡„\·¸ºŽ”�½8“À�—T‘Ƙš§,ª²Ÿ�Ì£}&ÓÔ�8­­×³ÚÔB߀{¸4�>¸ˆ»NŒè–ÇÄè—òðÆîÉ�`ýà1øõ#õL`�<²ZˆE@m mÝ€�Õ¶kâÚñuBÿ>^é(A»z=ArgÏËÊ‘ùªà‹éΟM€löCç?œ:/^óG±âÄ¢Ôzh3wÎâÇÁ<ŠŒ:HÝÈwñ^ö¦•A¾®4g~éó穲‚nÄ Wc^½‰ðZíÅ0º§îæ�ÜRfâÆ©þ{,d› r/à¬S÷î™{çÆ÷pàÅý}$࠹ΧP�÷ól:ô«MÔ±.ùkqm•‹¯Âþîòucñ²¯ ÷­[º?öíÝ÷ƒŸ»yòôí߇@ÿó�þ)××ÿm×a'Õj©yÞ` .8Wæ•÷ày0¥w~ô-`ŸqùÉ—a€óuè^†n"|ú—€ jgØa2èà‹ÊXc‚“4Ѐ�Zè¨ã„=ú˜ZD’X¢Dbøas ()bpFHbŠ'¢(å“Òév€wWØ7ÅŽÞш€�\¢7æ�á™é#š8~¹æ�W5ø¦�qR1'�#Yä’Hîù¤žSÚç§•‚&¨ ‡"ʧ¢¾­”¢o–yÕœ’^q'˜ ^ 礚6g§:rÚéHèi蟀¢:h|…žJ(“«Ö—b¬²êGë£HÒ§®w:šâ¥/20ê§ÃŽ*±Å>ª§4kªÿ«¾Ùjê«}Þ*m¬�NË^¶Ö^K-¬ðíší¥¼jÚ¥}ÇŠz)²æ^¡ì±Í¾Ûi¼¥>ûê³Ð kªÑ^»*·ØÎÊo­þn °ÁãÞY.¹¿ˤ o³ËÒ[q¼ad† [ HF…²Æ$—lòÉ(§¬òÊ,·ìòË0ƒÒq [$òÍĬóÎ<÷ìóÏ<ÏÌqÍJá|3ÐH'­ôÒL—,´ Dgc´ÈMWmõÕX£ü4ÍQ{3õÈY‡-öØHoMB×^­ Ùl·í¶Êf{ܵÚ½m÷ÝvÇ]Út¯�÷߀c­w|÷�sàˆ'^¶Þ…÷­øã�Ç·ÿá˜wî¹Ì[S®öç¤_>ù掗®ºâ§Gmøá«ÇþwëD¿.ûíLóÄSY¼ÂïÀt¸�´î–õ®SðÌ ?üGÆGß3òÔ(ïSóÁ?½ôÜÃL}Ö/�ýïÚ«Óýù-¿Cø6�O~ù‡ /ÊêÓÀ¾?î‡üó÷Orý¸_?ò·�ý9Á  @ßÐyûK °À>‚ð›`+(À ðD ïçA†Ð#d_ #xÂù¥0|+Ì` å÷BëŰ|3¤!-øÀæ}5TÞ µ÷ÃóÅÄ øJ¢žÂÄÄ• >EìÞµ D%6±‰OdO¹7E*ÿT1‰Wdb}³Eéuq _ÄWÃ4FÝ”1zgD@ŸµFï´17o4^çhª:.æŽ ÈcñöÈG"ùщw$îYÈCB�м#ùèH@2’±›ä+yILªN“iäd"=ùÉ3Ò�Žì$)?Ê/в�«,]+«øÊ1Æ’t³´b*GyËÎ医„e/;§b²kY¸J¦èÅÌf>`˜Ä4¦4—µ&eâÊ™Ø|&4/'ÍiRSGÖ|T6�¹Mnv³˜ßg8õ3Îf–ÓrçDg:×ÉÎvÒë�‘‹ç1AEOûØóžø|œ>Õ…Ì~.óŸÍ ¨@j©y¡ UhâÚÐoôÿ •èD)šÎ\¢ÚÔ(à(*1‹>¢" I;úQ”¦ôo+uh?AúR˜rT¦ô¤iMïS“ÎÔ¥;}[O©ÙÒŒõ¨HMªR—ÊÔ¦:õ©P�ªT§JÕªZõªXͪV·ÊÕ®zõ«` «XÇJÖ²šõ¬hM«Z×ÊÖ¶ºõ­p�«\çJ׺Úõ®xÍ«^÷Ê×¾úõ¯€ ¬`»´�f c@,›2Æ.6¢�5,É«XÇbÕ²Ú„lfŸ¹ÙÃBV�-h9;Ú0dv±¥ícQ»Ú­ž6±¨ )igËÚ |Ö¶±Å-mI ÛÜòÖ·Àu­jmûÚÖr¶¸‰•lDe{Úåš–µÎ1Míq‡›UäŽöµ•½md5†ØÍ2W²Ôíîu‰ ^š÷¼èM¯z×ËÞöº÷½ð�ïW#;