SophieHoulden [Lexaloffle Blog Feed]https://www.lexaloffle.com/bbs/?uid=10355 VGFX (Vector Graphics Library and Editor) <p> <table><tr><td> <a href="/bbs/?pid=146784#p"> <img src="/bbs/thumbs/pico64_veditor-5.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=146784#p"> veditor</a><br><br> by <a href="/bbs/?uid=10355"> SophieHoulden</a> <br><br><br> <a href="/bbs/?pid=146784#p"> [Click to Play]</a> </td></tr></table> <br /> <table><tr><td> <a href="/bbs/?pid=146784#p"> <img src="/bbs/thumbs/pico64_vgfx_demo-2.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=146784#p"> vgfx_demo</a><br><br> by <a href="/bbs/?uid=10355"> SophieHoulden</a> <br><br><br> <a href="/bbs/?pid=146784#p"> [Click to Play]</a> </td></tr></table> </p> <h3>First up:</h3> <p><strong>This was a big project! if you want to help me out plz see my <a href="https://www.patreon.com/SophieHoulden">patreon</a> or <a href="https://ko-fi.com/sophieh">ko-fi</a> &lt;3</strong></p> <h3>What:</h3> <ul> <li>Veditor is a vector graphics editor that lets you work on multiple, layered vector sprites</li> <li>vgfx.lua is a script you can include in your own projects to display said vector sprites (and other things)</li> </ul> <h3>How:</h3> <ul> <li>To get Veditor: <code>load #veditor</code> and save a local copy.</li> <li> <p>There is an extensive help included! (press F1 or click the '?' icon)</p> </li> <li>To get vgfx.lua, select <em>&quot;Copy vgfx.lua to RAM&quot;</em> from the Veditor menu.</li> </ul> <h3>Why:</h3> <ul> <li>Vector graphics usually take up little space compared to bitmaps</li> <li>Vector graphics don't degrade when scaled or rotated</li> </ul> <hr /> <p>Here's a video where I go over explanation/usage of the thing:<br /> <object width="640" height="400"><param name="movie" value="https://www.youtube.com/v/d0PLyjMbOxU&hl=en&fs=1&rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="https://www.youtube.com/v/d0PLyjMbOxU&hl=en&fs=1&rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="400"></embed></object></p> <p><em>Huge thanks to folk in the discord for the feedback!</em></p> <hr /> <p>Changelog:<br /> <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;">v1.01:</p> <ul> <li>fixed bug where loading a .vgfx file with only one sprite crashed when trying to draw it</li> <li>you can no longer switch tools whilst actively using one</li> <li>you can no longer use major keyboard shortcuts (cut, delete, select all, etc) when actively using a tool</div></div></div></li> </ul> https://www.lexaloffle.com/bbs/?tid=141774 https://www.lexaloffle.com/bbs/?tid=141774 Tue, 16 Apr 2024 19:16:33 UTC Matrix Screensaver <p> <table><tr><td> <a href="/bbs/?pid=145727#p"> <img src="/bbs/thumbs/pico64_matrix_screensaver-1.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=145727#p"> matrix_screensaver</a><br><br> by <a href="/bbs/?uid=10355"> SophieHoulden</a> <br><br><br> <a href="/bbs/?pid=145727#p"> [Click to Play]</a> </td></tr></table> </p> <hr /> <p>&quot;The image translators work for the construct program - but there's way too much information to decode the Matrix.</p> <p>You get used to it. I don't even see the code - all I see is blonde, brunette, redhead...&quot;</p> <hr /> <p><div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;"><br /> Changelog:</p> <h3>1.1</h3> <ul> <li>Characters are now sprites more resembling matrix code</li> <li>Characters fade out more smoothly<br /> </div></div></div></li> </ul> https://www.lexaloffle.com/bbs/?tid=141455 https://www.lexaloffle.com/bbs/?tid=141455 Thu, 04 Apr 2024 22:30:29 UTC VGFX (Vector graphics library) <p> <table><tr><td> <a href="/bbs/?pid=146784#p"> <img src="/bbs/thumbs/pico64_vgfx_demo-2.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=146784#p"> vgfx_demo</a><br><br> by <a href="/bbs/?uid=10355"> SophieHoulden</a> <br><br><br> <a href="/bbs/?pid=146784#p"> [Click to Play]</a> </td></tr></table> <br /> (click for different demos)</p> <p>I want to make a game using vector animations so I got started on a way for drawing that.</p> <p>Main tips for speedy drawing:</p> <ul> <li>Scaling/rotating is slower</li> <li>More vector sprites is slower</li> <li>Bigger vector sprites is slower</li> <li>More triangles is MUCH slower</li> </ul> <p>code here:<br /> <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;"></p> <div> <div class=scrollable_with_touch style="width:100%; max-width:800px; overflow:auto; margin-bottom:12px"> <table style="width:100%" cellspacing=0 cellpadding=0> <tr><td background=/gfx/code_bg1.png width=16><div style="width:16px;display:block"></div></td> <td background=/gfx/code_bg0.png> <div style="font-family : courier; color: #000000; display:absolute; padding-left:10px; padding-top:4px; padding-bottom:4px; "> <pre>--[[ vgfx.lua vector graphics drawing === todo: === -more triangulation functions -tween/interpolate between two vector sprites/polygons -animation playback -compression for vector data -maybe look into userdata for optimisations -maybe try writing directly to graphics memory if it's faster also: -make a vector sprite editor/animator app === docs: === &quot;vector sprite&quot;: an array of polygons &quot;polygon&quot;: an array with 3 elements: color 1, color 2, vertices &quot;vertices&quot;: array of numbers (x0,y0, y1,y2, ...etc) vertices list should be triangulated, sprv() will NOT triangulate arbitrary polygons tri() and triraster() are decent triangle drawing functions, for lightweight vector drawing, skip the vector sprite stuff and just use these ]] vgfx_wire=false--enable for debug view of polygon triangles vgfx_precise=false--enable if you have issues with edge seams function make_polygon(col1,col2, verts) return {col1,col2,verts} end --vector sprite expectations: -- array of polygons -- each polygon is an array with: -- color1, color2, vertices --vertices expectations: -- array of numbers (x0,y0, y1,y2, ...etc) -- should be triangulated already - each three vertices will be drawn as a tri --draw a vector sprite function sprv(v, x,y, rot,scale, col) local s, cs = 0,0 if rot and rot!=0 then s = sin(rot) cs = cos(rot) end if (col) color(col) for p=1,#v do--loop through each polygon in the vector sprite --prep to draw this polygon's colours if not col then fillp(0b1010010110100101) color((v[p][1]&lt;&lt;8)+v[p][2]) end --third item in each polygon is a list of vertices (triangulated!) local t = v[p][3] --draw each tri now local b=0 local l=#t/6 local v0 = {} local v1 = {} local v2 = {} for i=1, l do if rot and rot!=0 then v0 = rotvert(t[1+b],t[2+b],s,cs) v1 = rotvert(t[3+b],t[4+b],s,cs) v2 =rotvert(t[5+b],t[6+b],s,cs) else v0 = {x=t[1+b],y=t[2+b]} v1 = {x=t[3+b],y=t[4+b]} v2 = {x=t[5+b],y=t[6+b]} end if scale and scale!=1 then tri(x+v0.x*scale,y+v0.y*scale, x+v1.x*scale,y+v1.y*scale, x+v2.x*scale,y+v2.y*scale) else tri(x+v0.x,y+v0.y, x+v1.x,y+v1.y, x+v2.x,y+v2.y) end b+=6 end end return tris end function rotvert(x,y,s,c) local v={} v.x=x*c-y*s v.y=x*s+y*c return v end function fan_triangulate(points) local v,i={},3 while i&lt;=#points do add(v,points[i].x) add(v,points[i].y) add(v,points[i-1].x) add(v,points[i-1].y) add(v,points[1].x) add(v,points[1].y) i+=1 end return v end function strip_triangulate(points) if (#points&lt;=3) return points local v,i={},4 add(v,points[1].x) add(v,points[1].y) add(v,points[2].x) add(v,points[2].y) add(v,points[3].x) add(v,points[3].y) while i&lt;=#points do add(v,points[i].x) add(v,points[i].y) add(v,points[i-1].x) add(v,points[i-1].y) add(v,points[i-2].x) add(v,points[i-2].y) i+=1 end return v end vgfx_trisdrawn=0 function tri(x0,y0, x1,y1, x2,y2) vgfx_trisdrawn += 1 if (vgfx_precise) x0,y0,x1,y1,x2,y2 = flr(x0),flr(y0),flr(x1),flr(y1),flr(x2),flr(y2) --wireframe if vgfx_wire then fillp() line(x0,y0, x1,y1, 7) line(x1,y1, x2,y2, 7) line(x2,y2, x0,y0, 7) return end --order the vertices so they are descending from top to bottom --we need this since we are drawing it as two triangles: --one with a flat base, one with a flat top if (y1&lt;y0) x0,x1=x1,x0; y0,y1=y1,y0 if (y2&lt;y0) x0,x2=x2,x0; y0,y2=y2,y0 if (y2&lt;y1) x1,x2=x2,x1; y1,y2=y2,y1 --draw the top half local hh=y1-y0--height of the half local x3=x0+hh*(x2-x0)/(y2-y0)--slicing the tri in two makes another vertex if (y0!=y1) triraster(y0,y1, (x3-x0)/hh,(x1-x0)/hh, x0,x0) --draw the bottom half hh=y2-y1 if (y1!=y2) triraster(y1,y2, (x2-x1)/hh,(x2-x3)/hh, x1,x3) end --draws a filled triangle line-by-line, top-to-bottom --args: top, bottom, step left, step right, left pixel, right pixel function triraster(t,b, sl,sr, pl,pr) for y=t,b do rectfill(pl,y,pr,y) pl+=sl pr+=sr end end</pre></div></td> <td background=/gfx/code_bg1.png width=16><div style="width:16px;display:block"></div></td> </tr></table></div></div> <p></div></div></div></p> https://www.lexaloffle.com/bbs/?tid=140989 https://www.lexaloffle.com/bbs/?tid=140989 Fri, 22 Mar 2024 11:49:12 UTC Enview (API viewer) <p> <table><tr><td> <a href="/bbs/?pid=144968#p"> <img src="/bbs/thumbs/pico64_enview-3.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=144968#p"> enview</a><br><br> by <a href="/bbs/?uid=10355"> SophieHoulden</a> <br><br><br> <a href="/bbs/?pid=144968#p"> [Click to Play]</a> </td></tr></table> </p> <p>The largest part of this work is based on <a href="https://www.lexaloffle.com/bbs/?pid=143203#p">pancelor's api explorer</a></p> <p>It has some improvements like sub-tables being sorted, and not printing text above/below the screen.<br /> Also I made some style changes to try and get it to gel with the OS as a windowed app.</p> <p>I'd like to have it so clicking on a function shows you what parameters it expects, but honestly I have no idea if that's a thing you can even query in lua.</p> <p>I may hard-code stuff so it gives an authored explanation of each item and how to use it, but right now it just lists the stuff and nothing else.</p> <p>anyway I'm still very much learning picotron (which is why I wanted a nice API list I can quickly check in the GUI) so things might not be ideal.</p> https://www.lexaloffle.com/bbs/?tid=140816 https://www.lexaloffle.com/bbs/?tid=140816 Sun, 17 Mar 2024 18:58:23 UTC Dusk Child Wallpaper <p> <table><tr><td> <a href="/bbs/?pid=143345#p"> <img src="/bbs/thumbs/pico64_duskchild_wp-0.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=143345#p"> duskchild_wp</a><br><br> by <a href="/bbs/?uid=10355"> SophieHoulden</a> <br><br><br> <a href="/bbs/?pid=143345#p"> [Click to Play]</a> </td></tr></table> </p> <p>An animated wallpaper using graphics from Dusk Child.</p> <p>Made just to learn picotron a little bit, and it was fun!</p> https://www.lexaloffle.com/bbs/?tid=140736 https://www.lexaloffle.com/bbs/?tid=140736 Sat, 16 Mar 2024 17:47:55 UTC Return of the SLIMEPIRES! <p> <table><tr><td> <a href="/bbs/?pid=110276#p"> <img src="/bbs/thumbs/pico8_rotslimepires_1_1-0.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=110276#p"> rotslimepires_1_1</a><br><br> by <a href="/bbs/?uid=10355"> SophieHoulden</a> <br><br><br> <a href="/bbs/?pid=110276#p"> [Click to Play]</a> </td></tr></table> </p> <p>Hi! It's been a while since I have finished a pico-8 game to be able to share it here, but this is one!</p> <p>The controls are <strong>Z/C to Jump</strong>, and <strong>X/V = Shoot</strong> (or respawn if you become a slimepire)</p> <hr /> <p><strong>~ Story: ~</strong><br /> Years after the horde have claimed Earth's surface, they find their way into Bunker 4103 - the last bastion of humanity. You awake in a remote part of the underground shelter, and if you want to remain human you must reach the bunker's deepest point: the safe room.</p> <hr /> <p><strong>~ Extras ~</strong><br /> You can tip $3 or more on itch.io for access to extra goodies: illustrated &amp; pixel maps, a comprehensive manual, and also a 2 hour video of me talking through the game project and its code.</p> <hr /> <p><strong>~ Links: ~</strong><br /> <a href="https://sophieh.itch.io/return-of-the-slimepires">Return of the SLIMEPIRES! on itch.io</a><br /> <a href="https://www.patreon.com/SophieHoulden">My Patreon</a> - supports things like this &lt;3<br /> <a href="https://twitter.com/mxSophieH/status/1481573538234519552">Development thread on twitter</a></p> https://www.lexaloffle.com/bbs/?tid=47392 https://www.lexaloffle.com/bbs/?tid=47392 Fri, 15 Apr 2022 10:46:27 UTC Curse of Greed ULTIMATE <p> <table><tr><td> <a href="/bbs/?pid=47743#p"> <img src="/bbs/thumbs/pico47742.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=47743#p"> Curse of Greed ULTIMATE 1</a><br><br> by <a href="/bbs/?uid=10355"> SophieHoulden</a> <br><br><br> <a href="/bbs/?pid=47743#p"> [Click to Play]</a> </td></tr></table> </p> <p>Originally made for Ludum Dare 40, then upgraded a bunch for my patrons, now available for everyone! &lt;3</p> <p>The vector drawing/animation on the title screen is based on Gabriel Crowe's systems found <a href="http://hotmessgames.com/poly/">&gt;here&lt;</a>.</p> <hr /> <p><strong>~ Links: ~</strong><br /> <a href="https://sophieh.itch.io/curse-of-greed">Curse of Greed on itch.io</a><br /> <a href="https://www.patreon.com/SophieHoulden">My Patreon</a> - supports things like this ;)</p> <hr /> <p><strong>~ Changelog: ~</strong><br /> Curse of Greed - Ludum Dare Release<br /> Ultimate 1.0 - New levels, difficulties, fixes &amp; improvements, title effects</p> https://www.lexaloffle.com/bbs/?tid=30528 https://www.lexaloffle.com/bbs/?tid=30528 Fri, 29 Dec 2017 06:16:11 UTC Pumpking <p> <table><tr><td> <a href="/bbs/?pid=45827#p"> <img src="/bbs/thumbs/pico45961.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=45827#p"> Pumpking 1.1a</a><br><br> by <a href="/bbs/?uid=10355"> SophieHoulden</a> <br><br><br> <a href="/bbs/?pid=45827#p"> [Click to Play]</a> </td></tr></table> </p> <p>It's a platformer, a difficult one!</p> <p>I made this in 3 days for my patrons as a Halloween gift, then took an extra day to polish it up and include some spooOOooky music by Tim Monks. Now it's available for everyone, hooray!</p> <p>Good luck, little pumpkin!</p> <hr /> <p><strong>~ Links: ~</strong><br /> <a href="https://sophieh.itch.io/pumpking">Pumpking on itch.io</a><br /> <a href="https://www.patreon.com/SophieHoulden">My Patreon</a> - supports things like this ;)</p> <hr /> <p><strong>~ Changelog: ~</strong><br /> 1.0 Patreon release<br /> <a href="https://www.lexaloffle.com/bbs/cposts/4/45826.p8.png">1.1</a> first public release (Game improvements, added music by Tim Monks, extra boss stages)<br /> <a href="https://www.lexaloffle.com/bbs/cposts/4/45961.p8.png">1.1a</a> Commented all code for learners, made small background improvements, better cartridge label.</p> https://www.lexaloffle.com/bbs/?tid=30179 https://www.lexaloffle.com/bbs/?tid=30179 Fri, 03 Nov 2017 10:18:18 UTC Mystic Realm Dizzy <p> <table><tr><td> <a href="/bbs/?pid=41037#p"> <img src="/bbs/thumbs/pico41286.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=41037#p"> Mystic Realm Dizzy 1.0</a><br><br> by <a href="/bbs/?uid=10355"> SophieHoulden</a> <br><br><br> <a href="/bbs/?pid=41037#p"> [Click to Play]</a> </td></tr></table> </p> <p><strong>~ Story: ~</strong><br /> Oh no! Zaks the evil wizard has once again captured Dizzy's girlfriend, Daisy! And the other yolkfolk need help too, looks like another adventure for Dizzy!</p> <p>~</p> <p><strong>~ Controls: ~</strong><br /> [ Left ]/[ Right ] - Move<br /> [ Z ] - Jump<br /> [ Down ] - Drop from ledge<br /> [ Up ] - Cycle through inventory<br /> [ X ] - Interact/pick up item/drop item</p> <p>~</p> <p><strong>~ Music: ~</strong><br /> Huge thanks to @gruber_music for making a brilliant pico-8 version of the Amiga Magicland Dizzy theme :D</p> <p>~</p> <p><strong>~ About: ~</strong><br /> I wanted there to be a Dizzy game for Pico-8, so now there is! Heads up though; I've tried to be faithful to the classic Dizzy games - that means limited lives, rubbish platforming, cheesy dialogue and a kidnapped damsel.</p> <p>Obviously this is a fan project and not an official dizzy game, they don't make those anymore :(</p> <p>~</p> <p><strong>~ Changelog: ~</strong><br /> <a href="https://www.lexaloffle.com/bbs/cposts/4/41036.p8.png">beta1</a>: First Release<br /> <a href="https://www.lexaloffle.com/bbs/cposts/4/41089.p8.png">beta2</a>: Added music &amp; minor fixes<br /> <a href="https://www.lexaloffle.com/bbs/cposts/4/41286.p8.png">1.0</a>: Animated water</p> https://www.lexaloffle.com/bbs/?tid=29388 https://www.lexaloffle.com/bbs/?tid=29388 Sat, 27 May 2017 04:58:29 UTC Dusk Child <p> <table><tr><td> <a href="/bbs/?pid=12682#p"> <img src="/bbs/thumbs/pico39705.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=12682#p"> Dusk Child 1.4</a><br><br> by <a href="/bbs/?uid=10355"> SophieHoulden</a> <br><br><br> <a href="/bbs/?pid=12682#p"> [Click to Play]</a> </td></tr></table> </p> <p><strong>Controls:</strong><br /> Z - Examine/Pick-up/Drop<br /> X - (not used until later in the game)<br /> Up - Jump<br /> Down - Duck/Crawl<br /> Left/Right - Move</p> <p><strong>Story:</strong><br /> You have been drawn to a mysterious place, what secrets does it hold, and what will they mean for you?</p> <p><strong>Help:</strong><br /> When not carrying an item, you can examine things. If you're stuck, try examining signs and other objects.<br /> When you have explored far enough into the western temple, you can use the 'X' button.</p> <hr /> <p>I'm calling this &quot;done&quot; though there are a few things I might touch up in the future. Right now though, I've spent too long working on this already and need to get back to work on things that stand a chance of making some money :P</p> <hr /> <p>1.4: fixed map initialisation corrupting some sprites<br /> <a href="https://www.lexaloffle.com/bbs/cposts/3/39133.p8.png">1.3</a>: fixed a bug &amp; added some minor text<br /> <a href="https://www.lexaloffle.com/bbs/cposts/1/18973.p8.png">1.2</a>: fixed special effects rendering wrong in newer pico-8 builds<br /> <a href="https://www.lexaloffle.com/bbs/cposts/1/12756.p8.png">1.1</a>: fixed a couple of bugs<br /> <a href="https://www.lexaloffle.com/bbs/cposts/1/12681.p8.png">1.0</a>: first version</p> https://www.lexaloffle.com/bbs/?tid=2274 https://www.lexaloffle.com/bbs/?tid=2274 Sat, 15 Aug 2015 11:11:08 UTC