RhythmLynx [Lexaloffle Blog Feed]https://www.lexaloffle.com/bbs/?uid=11704 Curious Fishing - an aquatic puzzle game inspired by PICO-8 <p>Curious Fishing is an aquatic puzzle game where you move a fishing hook around in a grid, trying to catch a variety of sea creatures which each embody different puzzle mechanics. Sort of Fishing + Sokoban.</p> <p>The game started way back in 2016 as a jam game on the PICO-8 called Hook, Line and Thinker. In the full game I'm still using the lovely 16-color palette and 128x128 resolution, and all the game's audio was made in PICO-8 and then exported!</p> <p>It's a free browser game that works on both desktop and mobile. You can check it out here:<br /> <a href="https://rhythmlynx.itch.io/curious-fishing">https://rhythmlynx.itch.io/curious-fishing</a></p> <p>The game is designed to be approachable and stress-free, so there are simple controls (including support for mouse, keyboard, gamepad and mobile touchscreen), no timers, you have an unlimited undo, and you can try the levels in almost any order so you won&rsquo;t get stuck.</p> <p>I thought I'd share in case anyone was interested. I hope you like it :)</p> <img style="margin-bottom:16px" border=0 src="/media/11704/screenshot-1-level08-start.png" alt="" /> <p>.</p> <img style="margin-bottom:16px" border=0 src="/media/11704/screenshot-2-level29-moved.png" alt="" /> <p>.</p> <img style="margin-bottom:16px" border=0 src="/media/11704/screenshot-3-aquarium.png" alt="" /> <p>.</p> <img style="margin-bottom:16px" border=0 src="/media/11704/screenshot-6-customization-portrait.png" alt="" /> https://www.lexaloffle.com/bbs/?tid=49238 https://www.lexaloffle.com/bbs/?tid=49238 Thu, 08 Sep 2022 17:46:21 UTC RPGs Done Quick <p> <table><tr><td> <a href="/bbs/?pid=51916#p"> <img src="/bbs/thumbs/pico51915.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=51916#p"> RPGs Done Quick</a><br><br> by <a href="/bbs/?uid=11704"> RhythmLynx</a> <br><br><br> <a href="/bbs/?pid=51916#p"> [Click to Play]</a> </td></tr></table> <br /> You are at a speedrun event. You're trying to complete an RPG as quickly as possible, skipping as much as you can.</p> <p>Made solo from scratch in 48 hours for Ludum Dare 41 based on the theme 'Combine 2 Incompatible Genres'. </p> <img style="margin-bottom:16px" border=0 src="https://www.lexaloffle.com/bbs/files/11704/09.gif" width=512 height=512 alt="" /> <p>&#8203;<a href="https://ldjam.com/events/ludum-dare/41/rpgs-done-quick">Ludum Dare entry page</a></p> <p>&#8203;<a href="https://twitter.com/rhythm_lynx/status/987646151577960448">Tweet thread</a></p> <p><a href="https://rhythmlynx.itch.io/ld41">itch.io page</a></p> <p>Timelapse:<br /> <object width="640" height="400"><param name="movie" value="https://www.youtube.com/v/iG3Oteb8Dvw&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/iG3Oteb8Dvw&hl=en&fs=1&rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="400"></embed></object></p> https://www.lexaloffle.com/bbs/?tid=31167 https://www.lexaloffle.com/bbs/?tid=31167 Sun, 22 Apr 2018 21:06:52 UTC Complicity Inc. <p> <table><tr><td> <a href="/bbs/?pid=47048#p"> <img src="/bbs/thumbs/pico47046.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=47048#p"> Complicity Inc.</a><br><br> by <a href="/bbs/?uid=11704"> RhythmLynx</a> <br><br><br> <a href="/bbs/?pid=47048#p"> [Click to Play]</a> </td></tr></table> <br /> <strong>Greetings Employee #452783. You have a lot of work to do.</strong></p> <p>Made solo from scratch in 48 hours for Ludum Dare 40 based on the theme<br /> <em>The more you have, the worse it is</em>.</p> <p><strong>NOTE</strong>: Unfortunately dragging with the mouse often causes issues with the web player used here on the forum. This has been fixed on the itch.io page courtesy of ultrabrite (<a href="https://www.lexaloffle.com/bbs/?tid=30380">https://www.lexaloffle.com/bbs/?tid=30380</a>).</p> <p><a href="https://ldjam.com/events/ludum-dare/40/complicity-inc"><span style="text-decoration: underline;">Ludum Dare page</span></a><br /> <a href="https://rhythmlynx.itch.io/complicity-inc"><span style="text-decoration: underline;">itch.io</span></a><br /> <a href="https://twitter.com/rhythm_lynx/status/937498478623842304"><span style="text-decoration: underline;">Employee recruitment homepage</span></a></p> <p>As part of your induction please enjoy this educational video on the history of Complicity Inc.<br /> <object width="640" height="400"><param name="movie" value="https://www.youtube.com/v/N492udLVUz4&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/N492udLVUz4&hl=en&fs=1&rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="400"></embed></object></p> https://www.lexaloffle.com/bbs/?tid=30384 https://www.lexaloffle.com/bbs/?tid=30384 Mon, 04 Dec 2017 14:35:31 UTC Hook, Line and Thinker case designs <p>I'm making a fishing puzzle game called <em>Hook, Line and Thinker</em>. I started it on PICO-8 in a game jam and have since ported it to Defold so I can release it on Android and iOS. I've just done some variations on the case and I'm curious what people think! What's your favorite? What would you change? <a href="https://twitter.com/rhythm_lynx/status/909748375913992192">Original tweet</a>.</p> <img style="margin-bottom:16px" border=0 src="https://www.lexaloffle.com/bbs/files/11704/21.gif" width=720 height=1280 alt="" /> <img style="margin-bottom:16px" border=0 src="https://www.lexaloffle.com/bbs/files/11704/21b.png" width=5400 height=3840 alt="" /> <p>If you're curious here's an overview of my progress on the game so far. <a href="https://twitter.com/rhythm_lynx/status/901574620238802944">Original tweet</a>.<br /> <object width="640" height="400"><param name="movie" value="https://www.youtube.com/v/nEr4OH3oNUQ&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/nEr4OH3oNUQ&hl=en&fs=1&rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="400"></embed></object></p> https://www.lexaloffle.com/bbs/?tid=29951 https://www.lexaloffle.com/bbs/?tid=29951 Mon, 18 Sep 2017 08:19:28 UTC How to know the current music pattern? <p>I'm working on a game with separate menu music and in-game music. What I'd like to do is cache what the current music pattern is and resume each song from there, rather than constantly starting each song from the beginning.</p> <p>I know I can see what SFX are currently playing on each of the channels using stat(16)-stat(19). I could cache that then peek through the music memory for a pattern with the right SFX on the right channels, but that is obviously not guaranteed to resume at the right point (or even the right song) if that set of SFX are used together in the same way in multiple patterns.</p> <p>I checked all the values of stat() from 0-127 in case it was there but none of them corresponded to the music pattern.</p> <p>I could manually track the pattern since I know what pattern I start the music from. With a combination of stat(16)-stat(19) for SFX and stat(20)-stat(23) for notes I <em>should</em> be able to tell whenever the pattern changes. If I know how many patterns long my song is (or just check for the loop flags in memory) I'll know when to reset the tracker back to the start of the song.</p> <p>I say <em>should</em> because while it would be straightforward to write something like this that works for <em>most</em> music, it might be quite tricky in cases where the same SFX are used in consecutive patterns and use looping instead of a full 32 notes. It's doable but it just seems like a lot of work for what I was expecting to be a simple stat() call.</p> https://www.lexaloffle.com/bbs/?tid=28232 https://www.lexaloffle.com/bbs/?tid=28232 Sat, 17 Dec 2016 12:22:49 UTC The Museum <p> <table><tr><td> <a href="/bbs/?pid=27596#p"> <img src="/bbs/thumbs/pico27595.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=27596#p"> The Museum</a><br><br> by <a href="/bbs/?uid=11704"> RhythmLynx</a> <br><br><br> <a href="/bbs/?pid=27596#p"> [Click to Play]</a> </td></tr></table> <br /> It's your first day at the museum and your boss is sick. Guess you'll have to improvise!</p> <p>Made in 48 hours for Ludum Dare 36 based on the theme 'Ancient Technology'.<br /> <a href="https://www.youtube.com/watch?v=apD8Honkrq4">Timelapse</a><br /> <a href="http://ludumdare.com/compo/ludum-dare-36/?action=preview&amp;amp;uid=39966">LD entry page</a></p> https://www.lexaloffle.com/bbs/?tid=27556 https://www.lexaloffle.com/bbs/?tid=27556 Sun, 28 Aug 2016 21:02:27 UTC PICO-8.ttf + variants <p>Based on feedback I've created several variants of the unofficial PICO-8 font file. Please note, I do <em>not</em> claim any copyright - I used <a href="https://fontstruct.com/fontstructors/1302418/rhythmlynx">FontStruct</a> to make these and it automatically inserts your username for copyright purposes.</p> <p><strong>PICO-8 mono</strong><br /> <a href="https://drive.google.com/uc?export=download&amp;id=0B97Um39fHXlcN0xLMWxkSUdlNFE&amp;resourcekey=0-66wLfWyB7-YBce08y9sgqg">https://drive.google.com/uc?export=download&amp;id=0B97Um39fHXlcN0xLMWxkSUdlNFE&amp;resourcekey=0-66wLfWyB7-YBce08y9sgqg</a><br /> A monospaced font which includes punctuation, uppercase and lowercase letters.</p> <p><strong>PICO-8 mono upper</strong><br /> <a href="https://drive.google.com/uc?export=download&amp;id=0B97Um39fHXlcRWowOXB0Zko5dkk&amp;resourcekey=0-7fJImsUrevG_99_pf4YOEA">https://drive.google.com/uc?export=download&amp;id=0B97Um39fHXlcRWowOXB0Zko5dkk&amp;resourcekey=0-7fJImsUrevG_99_pf4YOEA</a><br /> A monospaced font which includes punctuation and uppercase letters. Lowercase letters are replaced with uppercase.</p> <p><strong>PICO-8 mono reversed</strong><br /> <a href="https://drive.google.com/uc?export=download&amp;id=0B97Um39fHXlcQnlFNnRKVC1wc28&amp;resourcekey=0-gheBygTpIzOwdeLUppUpNw">https://drive.google.com/uc?export=download&amp;id=0B97Um39fHXlcQnlFNnRKVC1wc28&amp;resourcekey=0-gheBygTpIzOwdeLUppUpNw</a><br /> A monospaced font which includes punctuation, uppercase and lowercase letters. The uppercase and lowercase letters have been swapped around.</p> <p><strong>PICO-8 wide</strong><br /> <a href="https://drive.google.com/uc?export=download&amp;id=0B97Um39fHXlcR3hWT1JwWUtXbGc&amp;resourcekey=0-ywYaagztNH6Wh7t5ZoP5Ag">https://drive.google.com/uc?export=download&amp;id=0B97Um39fHXlcR3hWT1JwWUtXbGc&amp;resourcekey=0-ywYaagztNH6Wh7t5ZoP5Ag</a><br /> A variable-width font which includes punctuation, uppercase letters, lowercase letters and wide characters.</p> <p><strong>PICO-8 wide upper</strong><br /> <a href="https://drive.google.com/uc?export=download&amp;id=0B97Um39fHXlcbXhaWEdfbjFVelU&amp;resourcekey=0-80t-HzGtrbJjKQt1r-ouhw">https://drive.google.com/uc?export=download&amp;id=0B97Um39fHXlcbXhaWEdfbjFVelU&amp;resourcekey=0-80t-HzGtrbJjKQt1r-ouhw</a><br /> A variable-width font which includes punctuation, uppercase letters and wide characters. Lowercase letters are replaced with uppercase.</p> <p><strong>PICO-8 wide reversed</strong><br /> <a href="https://drive.google.com/uc?export=download&amp;id=0B97Um39fHXlcdmwyMGZLWGs0Ymc&amp;resourcekey=0-yfFO10YWTUZUxqaT9uJSig">https://drive.google.com/uc?export=download&amp;id=0B97Um39fHXlcdmwyMGZLWGs0Ymc&amp;resourcekey=0-yfFO10YWTUZUxqaT9uJSig</a><br /> A variable-width font which includes punctuation, uppercase letters, lowercase letters and wide characters. The uppercase and lowercase letters have been swapped around.</p> <img style="margin-bottom:16px" border=0 src="https://www.lexaloffle.com/bbs/files/11704/font_09072016.png" width=650 height=711 alt="" /> <p>For the wide characters I decided to pack them into the following unicode characters U+00C0 to U+00D9: &Agrave;&Aacute;&Acirc;&Atilde;&Auml;&Aring;&AElig;&Ccedil;&Egrave;&Eacute;&Ecirc;&Euml;&Igrave;&Iacute;&Icirc;&Iuml;&ETH;&Ntilde;&Ograve;&Oacute;&Ocirc;&Otilde;&Ouml;&times;&Oslash;&Ugrave;</p> <p>So for example this:</p> <img style="margin-bottom:16px" border=0 src="https://www.lexaloffle.com/bbs/files/11704/font_before.png" width=323 height=145 alt="" /> <p>Becomes this:</p> <img style="margin-bottom:16px" border=0 src="https://www.lexaloffle.com/bbs/files/11704/font_after.png" width=425 height=137 alt="" /> <p>Original post:<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;">With the recently discovered <a href="https://www.lexaloffle.com/bbs/?tid=3217">smallcaps and extended characters</a> I decided to update the unofficial font file and make a thread for it. I do <em>not</em> claim any copyright - I used <a href="http://fontstruct.com/">FontStruct</a> to make it and it automatically inserts your username for copyright purposes.</p> <p>Download the .ttf file here: <a href="https://drive.google.com/file/d/0B97Um39fHXlcWUFRZlBqUndhbXM/"><a href="https://drive.google.com/file/d/0B97Um39fHXlcWUFRZlBqUndhbXM/">https://drive.google.com/file/d/0B97Um39fHXlcWUFRZlBqUndhbXM/</a></a></p> <p>Edit: included ampersand, backtick and DEL missing characters.</p> <img style="margin-bottom:16px" border=0 src="https://www.lexaloffle.com/bbs/files/11704/font_09072016.png" width=650 height=711 alt="" /> <p>For the extended characters I decided to pack them into the following unicode characters U+00C0 to U+00D9: &Agrave;&Aacute;&Acirc;&Atilde;&Auml;&Aring;&AElig;&Ccedil;&Egrave;&Eacute;&Ecirc;&Euml;&Igrave;&Iacute;&Icirc;&Iuml;&ETH;&Ntilde;&Ograve;&Oacute;&Ocirc;&Otilde;&Ouml;&times;&Oslash;&Ugrave;</p> <p>So for example this:</p> <img style="margin-bottom:16px" border=0 src="https://www.lexaloffle.com/bbs/files/11704/font_before.png" width=323 height=145 alt="" /> <p>Becomes this:<br /> <img style="margin-bottom:16px" border=0 src="https://www.lexaloffle.com/bbs/files/11704/font_after.png" width=425 height=137 alt="" /></div></div></div></p> https://www.lexaloffle.com/bbs/?tid=3760 https://www.lexaloffle.com/bbs/?tid=3760 Sun, 03 Jul 2016 11:44:56 UTC Block placement algorithm <p>I decided to do <a href="http://codetrip.weebly.com/blog/finding-every-configuration-of-blocks-in-a-line">a write-up</a> of a little recursive algorithm I made for finding every configuration of a set of blocks in a line. While I was doing that I figured I might as well make a PICO-8 cartridge and do a little rendering.</p> <p>Left and right to change the rendering size, up and down to scroll. To change the number and size of the blocks, the size of the line and the minimum number of spaces between blocks just change the appropriate values in _init().</p> <p> <table><tr><td> <a href="/bbs/?pid=23324#p"> <img src="/bbs/thumbs/pico23323.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=23324#p"> Block placement algorithm</a><br><br> by <a href="/bbs/?uid=11704"> RhythmLynx</a> <br><br><br> <a href="/bbs/?pid=23324#p"> [Click to Play]</a> </td></tr></table> </p> <p>Algorithm (full code in cartridge)<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> function block_char(block_id) local chars = &quot;abcdefghij&quot; return sub(chars, block_id, block_id) end function can_shift(line) return sub(line, #line, #line) == &quot;-&quot; end -- shifts all blocks of the given id or higher rightwards one cell, -- leaving all blocks left of that id unchanged function shift(line, block_id) local char = block_char(block_id) local pos = 1 for i = 1, #line do if sub(line, i, i) == char then pos = i break end end local pre = sub(line, 1, pos-1) local post = sub(line, pos, #line-1) return pre..&quot;-&quot;..post end function find_solutions(blocks, length, min_spaces) -- build and store the leftmost solution local line = &quot;&quot; for block_id = 1, #blocks do for i = 1, blocks[block_id] do line = line..block_char(block_id) end if block_id ~= #blocks then for i = 1, min_spaces do line = line..&quot;-&quot; end end end if (#line &gt; length) return {} -- no solutions, can't fit while #line &lt; length do line = line..&quot;-&quot; end local solutions = {line} find_spreads(solutions, line, 1, #blocks) return solutions end function find_spreads(solutions, line, block_id, num_blocks) local my_line = line while can_shift(my_line) do if block_id &lt; num_blocks then find_spreads(solutions, my_line, block_id + 1, num_blocks) end my_line = shift(my_line, block_id) solutions[#solutions + 1] = my_line end end blocks = {2, 2, 2} length = 8 min_spaces = 0 solutions = find_solutions(blocks, length, min_spaces) </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=3660 https://www.lexaloffle.com/bbs/?tid=3660 Mon, 20 Jun 2016 18:40:09 UTC One Hour Game Jam <p>There is a <a href="http://onehourgamejam.com/">onehourgamejam</a> every Saturday at 20:00 UTC. Feel free to post your own entries here too!</p> <p><strong>60th jam (18 June 2016). The theme was <em>Castle</em>.</strong><br /> This was my first 1HGJ. I worked feverishly on the first idea that came into my head: archery. I was in such a rush that I spelled castle wrong in the title graphic! Didn't realise until after submission that you can just hold down fire to win.<br /> <table><tr><td> <a href="/bbs/?pid=23209#p"> <img src="/bbs/thumbs/pico23205.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=23209#p"> Castle</a><br><br> by <a href="/bbs/?uid=11704"> RhythmLynx</a> <br><br><br> <a href="/bbs/?pid=23209#p"> [Click to Play]</a> </td></tr></table> </p> https://www.lexaloffle.com/bbs/?tid=3643 https://www.lexaloffle.com/bbs/?tid=3643 Sun, 19 Jun 2016 11:46:11 UTC Micro Pico <p> <table><tr><td> <a href="/bbs/?pid=19840#p"> <img src="/bbs/thumbs/pico19838.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=19840#p"> Micro Pico 0.5</a><br><br> by <a href="/bbs/?uid=11704"> RhythmLynx</a> <br><br><br> <a href="/bbs/?pid=19840#p"> [Click to Play]</a> </td></tr></table> <br /> I made this game for <a href="https://itch.io/jam/lowrezjam2016">Low Rez Jam 2016</a> where the goal was to make a 64x64 game. I figured that was too many pixels so I made a collection of 20x20 microgames instead! I made <a href="https://twitter.com/rhythm_lynx">one game a day</a> for two weeks, April 1st - 14th. Here's the <a href="https://rhythmlynx.itch.io/micro">itch.io page</a> for the game.</p> <p>Games get harder with each level and unfortunately a lot of them will become impossibly difficult - balancing 14 games is pretty time consuming! I used 6590/8192 tokens and a decent chunk of the spritesheets (though a lot of what's there wasn't used). The <a href="https://www.lexaloffle.com/bbs/?tid=2547">screen mode hack found by sta64</a> forces the resolution from 128x128 to 64x64.</p> <p>Things I'd like to add when I have time:</p> <ul> <li>Menu music</li> <li>Level win/fail music</li> <li>In-game music which speeds up with the gameplay</li> <li>Sound effects for all the games</li> <li>Practice mode for trying each game</li> </ul> https://www.lexaloffle.com/bbs/?tid=3227 https://www.lexaloffle.com/bbs/?tid=3227 Sun, 17 Apr 2016 17:33:01 UTC Secret smaller font! <p>So if you have caps lock on or hold shift and start typing in the search bar it uses a 3x4 font! I'm guessing zep tried out other font sizes or tried having 3x5 for uppercase and 3x4 for lowercase or something, and some weird loophole means it accidentally uses the small font for uppercase characters but only in the search bar.</p> <img style="margin-bottom:16px" border=0 src="https://www.lexaloffle.com/bbs/files/11704/3x4.png" width=580 height=540 alt="" /> https://www.lexaloffle.com/bbs/?tid=3217 https://www.lexaloffle.com/bbs/?tid=3217 Fri, 15 Apr 2016 16:54:08 UTC PicoPalette <p> <table><tr><td> <a href="/bbs/?pid=18838#p"> <img src="/bbs/thumbs/pico18837.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=18838#p"> PicoPalette</a><br><br> by <a href="/bbs/?uid=11704"> RhythmLynx</a> <br><br><br> <a href="/bbs/?pid=18838#p"> [Click to Play]</a> </td></tr></table> <br /> A simple tool to make playing around with the PICO-8 palette easier.<br /> Arrow keys to change selection, Z or X or to pause/unpause the fade animation.<br /> Fade charts and function by <a href="https://twitter.com/cap_colors">@cap_colors</a></p> https://www.lexaloffle.com/bbs/?tid=3068 https://www.lexaloffle.com/bbs/?tid=3068 Sun, 14 Feb 2016 19:08:09 UTC TinyText + MiniText + 3Text <p>I've made a series of fonts for the PICO-8. Each font uses as few sprites and as little code as possible. An 'LS' version of a font uses Less Sprites at the expense of longer code.</p> <p><span style="text-decoration: underline;">TinyText</span>: a lowercase font meant for use alongside the uppercase system font. Each character is just 3x4 pixels and aligns to the bottom of the system font, meaning lines of text are still 5 pixels tall and 3-pixel monospaced. The whole font uses just 5 sprites. Can fit 21 lines of text on-screen (the same as the system font).</p> <p><span style="text-decoration: underline;">TinyTextLS</span>: the same font as TinyText but with just 4 sprites!</p> <p><span style="text-decoration: underline;">MiniText</span>: a prettier lowercase font also meant for use alongside the uppercase system font. Character size varies and can hang below the writing line, meaning lines of text are now 7 pixels tall (but are still 3-pixel monospaced). The code is a bit longer, but the font still only uses 5 sprites. Can fit 16 lines of text on-screen.</p> <p><span style="text-decoration: underline;">MiniTextLS</span>: the same font as MiniText but with just 3 sprites! [deprecated, see LRP's Mini]</p> <p><span style="text-decoration: underline;">LRP's Mini</span>: the same font as MiniText but packed into just <span style="text-decoration: underline;">2</span> sprites by LRP!! It also uses less code than MiniTextLS, so it's all-round better - use this one instead of MiniTextLS! Find it in the comments.</p> <p>These fonts come with 3 text rendering functions, plus there's the system print, so we have:</p> <ul> <li>print(str [x y [col]]) the system print function, which &quot;PRINTS IN ALL CAPS&quot;.</li> <li>printlower(str x y [col]) which &quot;prints in all lowercase&quot;.</li> <li>printfirst(str x y [col]) which &quot;Capitalizes just the first word&quot;.</li> <li>printevery(str x y [col]) which &quot;Capitalizes Every Word&quot;.</li> </ul> <p><span style="text-decoration: underline;">3Text</span>: this is a standalone font that replaces the system font for printing. Every character is just 3x3 pixels and the code is very short, but it uses 10 sprites and is the hardest one to read. Can fit 32 lines of text on-screen.</p> <ul> <li>print3(str x y [col])</li> </ul> <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> [b]SPRITES USED: TOKENS USED: LINES ON-SCREEN:[/b] LRP's Mini 2 3Text 164 3Text 32 MiniTextLS 3 TinyText 245 TinyText 21 TinyTextLS 4 TinyTextLS 410 TinyTextLS 21 TinyText 5 MiniText 411 MiniText 16 MiniText 5 LRP's Mini 590 LRP's Mini 16 3Text 10 MiniTextLS 676 MiniTextLS 16 </pre></div></td> <td background=/gfx/code_bg1.png width=16><div style="width:16px;display:block"></div></td> </tr></table></div></div> <p> <table><tr><td> <a href="/bbs/?pid=18769#p"> <img src="/bbs/thumbs/pico18802.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=18769#p"> TinyText 1.1</a><br><br> by <a href="/bbs/?uid=11704"> RhythmLynx</a> <br><br><br> <a href="/bbs/?pid=18769#p"> [Click to Play]</a> </td></tr></table> <br /> <table><tr><td> <a href="/bbs/?pid=18769#p"> <img src="/bbs/thumbs/pico18803.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=18769#p"> TinyTextLS</a><br><br> by <a href="/bbs/?uid=11704"> RhythmLynx</a> <br><br><br> <a href="/bbs/?pid=18769#p"> [Click to Play]</a> </td></tr></table> <br /> <table><tr><td> <a href="/bbs/?pid=18769#p"> <img src="/bbs/thumbs/pico18804.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=18769#p"> MiniText 1.1</a><br><br> by <a href="/bbs/?uid=11704"> RhythmLynx</a> <br><br><br> <a href="/bbs/?pid=18769#p"> [Click to Play]</a> </td></tr></table> <br /> <table><tr><td> <a href="/bbs/?pid=18769#p"> <img src="/bbs/thumbs/pico18805.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=18769#p"> MiniTextLS</a><br><br> by <a href="/bbs/?uid=11704"> RhythmLynx</a> <br><br><br> <a href="/bbs/?pid=18769#p"> [Click to Play]</a> </td></tr></table> <br /> <table><tr><td> <a href="/bbs/?pid=18769#p"> <img src="/bbs/thumbs/pico18806.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=18769#p"> 3Text</a><br><br> by <a href="/bbs/?uid=11704"> RhythmLynx</a> <br><br><br> <a href="/bbs/?pid=18769#p"> [Click to Play]</a> </td></tr></table> <br /> License:<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 /> Please feel free to use these for anything you like! I've tagged these with the CC license so people know immediately that they can use them, but I'm actually releasing the sprites and code under the zlib license. The zlib license is even more permissive than CC BY-NC-SA and basically means you can do whatever you want with them, but I can't be held liable. Attribution is not necessary, but I'd love to hear from you if you use them for anything!</div></div></div><br /> Pictures:<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 /> Here's the TinyText font rendered, in TinyText 1.1 and in TinyTextLS:</p> <img style="margin-bottom:16px" border=0 src="https://www.lexaloffle.com/bbs/files/11704/tinyfont.png" width=225 height=164 alt="" /> <p>Here's the MiniText font rendered, in MiniText 1.1 and in MiniTextLS:</p> <img style="margin-bottom:16px" border=0 src="https://www.lexaloffle.com/bbs/files/11704/minifont.png" width=227 height=182 alt="" /> <p>And here's the 3Text font rendered and in 3Text (I haven't been able to do 3TextLS because of what seems to be a PICO-8 string parser error):<br /> <img style="margin-bottom:16px" border=0 src="https://www.lexaloffle.com/bbs/files/11704/3font.png" width=428 height=87 alt="" /></div></div></div><br /> How the 'LS' versions work:<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 /> The Less Sprites versions use flipping and overlapping characters to reduce the number of sprites used, which requires a bit more code to setup and render.</p> <p>The TinyTextLS sprites contain the following characters:</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> abcefghijk lmnosvxyz </pre></div></td> <td background=/gfx/code_bg1.png width=16><div style="width:16px;display:block"></div></td> </tr></table></div></div> <p>d, p and q are flipped versions of b; t is flipped from f; r is flipped from l; w is flipped from m; u is flipped from n.</p> <p>The MiniTextLS sprites contain the following characters:</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> cemorsvx dfghljky </pre></div></td> <td background=/gfx/code_bg1.png width=16><div style="width:16px;display:block"></div></td> </tr></table></div></div> <p>a overlaps d; b, p and q are flipped from d; i overlaps j; the dot of j overlaps the bottom left of s; n overlaps h; u is a flipped subset of h; t is a flipped subset of f; w is flipped from m; z is flipped from s.</div></div></div><br /> Old versions:<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 /> While doing the LS versions of TinyText and MiniText I made small changes to the p and q characters, so I updated the original ones to match. Here are the first versions of TinyText and MiniText:</p> <p> <table><tr><td> <a href="/bbs/?pid=18769#p"> <img src="/bbs/thumbs/pico18768.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=18769#p"> TinyText</a><br><br> by <a href="/bbs/?uid=11704"> RhythmLynx</a> <br><br><br> <a href="/bbs/?pid=18769#p"> [Click to Play]</a> </td></tr></table> <br /> <table><tr><td> <a href="/bbs/?pid=18769#p"> <img src="/bbs/thumbs/pico18785.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=18769#p"> MiniText</a><br><br> by <a href="/bbs/?uid=11704"> RhythmLynx</a> <br><br><br> <a href="/bbs/?pid=18769#p"> [Click to Play]</a> </td></tr></table> </div></div></div></p> https://www.lexaloffle.com/bbs/?tid=3059 https://www.lexaloffle.com/bbs/?tid=3059 Thu, 11 Feb 2016 15:27:00 UTC Need For Seed: Undergrowth v1.1 <p> <table><tr><td> <a href="/bbs/?pid=17756#p"> <img src="/bbs/thumbs/pico17893.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=17756#p"> Need For Seed: Undergrowth 1.1</a><br><br> by <a href="/bbs/?uid=11704"> RhythmLynx</a> <br><br><br> <a href="/bbs/?pid=17756#p"> [Click to Play]</a> </td></tr></table> <br /> Direct the growth of vines to avoid lawnmowers. If you run out of seeds, fly the bee to lots of flowers to pollinate them for more. Try to survive as long as possible!</p> <p>I originally made this game in 48 hours for <a href="http://ludumdare.com/compo/ludum-dare-34/?action=preview&amp;amp;uid=39966">Ludum Dare 34</a> with the dual themes of 'Growing' and 'Two Button Controls'. There's a timelapse of that <a href="https://www.youtube.com/watch?v=_UnzuhcYywM">here</a>. This is an updated version of the game with lots of improvements based on feedback from the LD community.</p> <p>===Changelog 1.1<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;">- The next spawn point for vines is now indicated by a seed sprite. The direction the seed is pointing is the direction the vine will grow (away from nearest screen edge, like always).</p> <ul> <li>The spawn point for bees is now indicated by a beehive sprite. Along with the seed sprites, this means you can plan ahead much more.</li> <li>If the lawnmower hits a seed or beehive it's position is re-randomized.</li> <li>A big particle ring now emanates from the vine/bee spawn position to draw your attention and help you quickly work out where you are.</li> <li>There's a warning flash on the side of the screen before a lawnmower appears.</li> <li>The bee leaves a trail of pollen behind it once it has visited it's first flower. Players were getting confused about how to acquire seeds; the first flower visited gives you nothing but every subsequent flower gives a seed, because you pollinated it.</li> <li>Rebalanced the game in various ways. In general, games should last longer now.</li> <li>Added some berries and flowers to the titles to make them prettier.</li> <li>Much clearer instructions on the title screen.</li> <li>Many, many more title screen puns (from 14 to 27).</div></div></div><br /> Original LD version:<br /> <table><tr><td> <a href="/bbs/?pid=17756#p"> <img src="/bbs/thumbs/pico17755.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=17756#p"> Need For Seed: Undergrowth</a><br><br> by <a href="/bbs/?uid=11704"> RhythmLynx</a> <br><br><br> <a href="/bbs/?pid=17756#p"> [Click to Play]</a> </td></tr></table> </li> </ul> https://www.lexaloffle.com/bbs/?tid=2891 https://www.lexaloffle.com/bbs/?tid=2891 Sun, 13 Dec 2015 18:48:53 UTC