shiftalow [Lexaloffle Blog Feed]https://www.lexaloffle.com/bbs/?uid=32759 Jongtelling wallpaper 🀄️🀄️🀄️ <p> <table><tr><td> <a href="/bbs/?pid=146583#p"> <img src="/bbs/thumbs/pico64_jongtelling_wp-1.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=146583#p"> jongtelling_wp</a><br><br> by <a href="/bbs/?uid=32759"> shiftalow</a> <br><br><br> <a href="/bbs/?pid=146583#p"> [Click to Play]</a> </td></tr></table> </p> <p>Fortune telling with mahjong tiles.</p> <ul> <li>When three tiles line up, it's a <code>暗刻 Anko</code></li> <li>When all four tiles are aligned, it's called <code>暗槓 Ankan</code></li> <li>When a pair is formed, it becomes a <code>対子 Toitsu</code></li> <li>There is also a secret combination. </li> </ul> <p><strong> It's not real mahjong. </strong></p> <p><code>save /appdata/system/wallpapers/jongtelling_wp.p64</code><br /> Please save it and use it.</p> <h3>release note</h3> <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 /> <strong>v0.11</strong></p> <ul> <li>fixed YAKU sprite</li> <li>add when matched to YAKU.</li> </ul> <p><strong>v0.1</strong></p> <ul> <li>first release<br /> </div></div></div></li> </ul> https://www.lexaloffle.com/bbs/?tid=141708 https://www.lexaloffle.com/bbs/?tid=141708 Sun, 14 Apr 2024 00:50:19 UTC Instrument materials <h2>How to use</h2> <p>Open the music editor, select the specified INSTRUENTS_ID, and then copy and paste the <code>--[[pod_type=&quot;instrument&quot;]]</code> line below.</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>## elec bass --[[pod_type=&quot;instrument&quot;]]unpod(&quot;b64:bHo0AG4AAABsAAAA8F17aW5zdHJ1bWVudD1weHUAAygAAgAABAABEAYPIBABIAEgAfAAAhACDhABIA8hIAEwD0CQDxECEA8UDzAAATAPERAR4AIIIA9QYA9C8IsPKA_0CvAEBA8zDzAJ8K0P_AoP-w_AD-cPDQHwCH0=&quot;) ## metal scratch --[[pod_type=&quot;instrument&quot;]]unpod(&quot;b64:bHo0AJUAAACTAAAA8IR7aW5zdHJ1bWVudD1weHUAAygAAgAABAABEAYPIAARIAEgAfAAAhAGDiEgDyEAD-8AAeAPEQIgDyUAATAFD9AAAgHgDxICIA8vUAUPMAACATAPLJACCKAPRvBrDygP--AGDygPXA8ZsAIQCQ8SDw8QX_kv5A--D8QPjw9qD1UPHw8P8IkP_AoP-w_AD-cPDQHwCH0=&quot;) ## buzz bass --[[pod_type=&quot;instrument&quot;]]unpod(&quot;b64:bHo0AI4AAACVAAAA9TN7aW5zdHJ1bWVudD1weHUAAygAAgAABAABEAYPGBABIAEgAfAAAhACDyAQASAPISABIAQPfwABcA8RAhAEDycAATAiABESIgBwD-QQAeAPEx4AEA4eAPAlDBAB8AAJIA8_IA_j8E8PKA--8AUFD3EPOA808AQMD3APXw8o8JUP_AoP-w_AD-cNAfAIfQ==&quot;) </pre></div></td> <td background=/gfx/code_bg1.png width=16><div style="width:16px;display:block"></div></td> </tr></table></div></div> <hr /> <p>It may be useful to save the text in the picotron drive.</p> <img style="margin-bottom:16px" border=0 src="/media/32759/sshot3.png" alt="" /> https://www.lexaloffle.com/bbs/?tid=141606 https://www.lexaloffle.com/bbs/?tid=141606 Wed, 10 Apr 2024 06:58:34 UTC Is it possible to reproduce the sound of past game consoles? <p><a href="https://www.youtube.com/watch?v=hqALoHicVlY">https://www.youtube.com/watch?v=hqALoHicVlY</a></p> <p>Is it possible to reproduce these sounds with a picotron?</p> <p>I have almost no basic knowledge of how to combine operators or create algorithms, so I'm just trying to figure it out.</p> <p>It has been my secret desire for many years to be exposed to FM modulated sound production.<br /> In particular, I have a history of admiring sounds like the Mega Drive (Genesis).<br /> Of course, the songs that make full use of not only FM sound but also PSG sound are nothing short of amazing.</p> https://www.lexaloffle.com/bbs/?tid=141408 https://www.lexaloffle.com/bbs/?tid=141408 Wed, 03 Apr 2024 12:26:44 UTC Non-editable instruments <img style="margin-bottom:16px" border=0 src="/media/32759/sshot_inst8.png" alt="" /> <p>I cannot edit after ID8 in the instrument edit.</p> <hr /> <p><a href="https://www.lexaloffle.com/dl/docs/picotron_synth.html#Instruments">https://www.lexaloffle.com/dl/docs/picotron_synth.html#Instruments</a></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>There are 128 global instruments defined at 0x40000 by default, each 512 bytes.</pre></div></td> <td background=/gfx/code_bg1.png width=16><div style="width:16px;display:block"></div></td> </tr></table></div></div> <p>Are the 128 instruments mentioned in the specifications scheduled to be available in the editor? Currently there are up to 25.</p> <p>Also, when multiple envelopes are set to &quot;DATA&quot; mode, the window extends outside of the screen.<br /> Scrolling is required in the same way as for the waveform configuration windows.</p> https://www.lexaloffle.com/bbs/?tid=141025 https://www.lexaloffle.com/bbs/?tid=141025 Sat, 23 Mar 2024 15:25:47 UTC skytest_hello <p> <table><tr><td> <a href="/bbs/?pid=143110#p"> <img src="/bbs/thumbs/pico64_skytest_hello-2.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=143110#p"> skytest_hello</a><br><br> by <a href="/bbs/?uid=32759"> shiftalow</a> <br><br><br> <a href="/bbs/?pid=143110#p"> [Click to Play]</a> </td></tr></table> </p> <p><code>🐱hello picotron</code></p> <p>Z button: Background changes<br /> X button: Redisplays text</p> <h3>release note</h3> <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 /> <strong>v0.2</strong></p> <ul> <li>add music </li> </ul> <p><strong>v0.1</strong></p> <ul> <li>first release<br /> </div></div></div></li> </ul> https://www.lexaloffle.com/bbs/?tid=140679 https://www.lexaloffle.com/bbs/?tid=140679 Fri, 15 Mar 2024 13:29:06 UTC PELOGEN2 is released! <p>The distribution URL is here!<br /> <a href="https://bitchunk.itch.io/pelogen2">https://bitchunk.itch.io/pelogen2</a></p> <img style="margin-bottom:16px" border=0 src="/media/32759/titleanimation_tr.gif" alt="" /> <h2>What tools?</h2> <p>PELOGEN2 is a 3D modeling tool created on PICO-8.</p> <p>Because it was created for such small specifications, it is not suitable for overly complex and large modeling.</p> <p>In today's era of large-scale, detailed works, what would you create with this small-scale 3D modeling tool?</p> <p>I think there is still value in being able to express creativity within limitations.<br /> Even if it imitates something that exists in reality, it is precisely because it is low-poly that an unrealistic and creative world can be created.</p> <p>Tutorials will be added to the devlog from time to time.</p> <p>You may have questions about things you don't know about how to make or features. I would appreciate it if you could create a thread in that case. It's easy to deal with, and others can use it as a reference.</p> <img style="margin-bottom:16px" border=0 src="/media/32759/tri_add.gif" alt="" /> <h2>Features etc.</h2> <h3>Data management</h3> <img style="margin-bottom:16px" border=0 src="/media/32759/dataimport.gif" alt="" /> <ul> <li>You can manage data while viewing the 3D model.</li> <li>Up to 16 data can be saved.</li> <li>The data can be exported to text, so it is virtually unlimited.</li> <li>You can organize and rearrange data by copying and pasting.</li> </ul> <h3>3D view (when editing the model)</h3> <img style="margin-bottom:16px" border=0 src="/media/32759/select_axis.gif" alt="" /> <ul> <li>View that can be rotated to any angle</li> <li>Enlarge/reduce/slide in the Z-axis direction</li> <li>View rotated along grid (every 22.5 degrees)</li> <li>Vertical flip prevention</li> </ul> <h3>3D modeling editing</h3> <img style="margin-bottom:16px" border=0 src="/media/32759/tri_join.gif" alt="" /> <ul> <li>Add triangular face and manipulate vertices</li> <li>JOIN selects vertices and combines them into one (equivalent to merge in blender)</li> <li>Move selected triangular face, rotate 90 degrees, change color, duplicate</li> </ul> <h3>Other features</h3> <img style="margin-bottom:16px" border=0 src="/media/32759/sample_start.png" alt="" /> <ul> <li>Sample code copy function</li> <li>Assembly mode (next version planned)</li> </ul> <p><strong> <a href=" https://www.lexaloffle.com/bbs/?tid=140324">PELOGEN2</a> </strong></p> https://www.lexaloffle.com/bbs/?tid=140324 https://www.lexaloffle.com/bbs/?tid=140324 Sat, 24 Feb 2024 00:25:29 UTC CPU meter toggles with Ctrl + O <p>CPU meter can also be switched using <code>Ctrl + O</code>. As per the PICO-8 manual, originally only <code>Ctrl + P</code> is required.<br /> This specification seems strange to me.</p> <p>Recently, it has become possible to implement an option to operate in combination with Ctrl.<br /> For example, when developing tools, there are times when you want to use the <code>Ctrl + O</code> keys to open files (data).</p> https://www.lexaloffle.com/bbs/?tid=140065 https://www.lexaloffle.com/bbs/?tid=140065 Thu, 01 Feb 2024 05:58:03 UTC Development of new PELOGEN <p>I previously created a 3D modeling tool called &quot;<a href="https://www.lexaloffle.com/bbs/?tid=37287">pelogen</a>&quot;.<br /> It was designed to run on pico-8 with a minimum amount of data, and with its 16x16x16 vertex coordinates and one-stroke triangulation, it was almost exclusively a tool for myself.</p> <img style="margin-bottom:16px" border=0 src="/media/32759/pelogen_0.gif" alt="" /> <p>This time, the specifications were revised from there, and the tool was created with an eye to making the data a bit larger and easier to model.</p> <ul> <li> <p>The vertices will be edited in such a way that triangles are added, instead of the specification of adding vertices one by one.<br /> And we will set a color for each face.<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> <img style="margin-bottom:16px" border=0 src="/media/32759/pelogen2_4.gif" alt="" /> <p></div></div></div></p> </li> <li>You can JOIN the vertices of each triangle to simplify vertex movement and build complex shapes.</li> <li> <p>You can duplicate selected triangles and rotate or flip vertices by a limited number of angles.<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> <img style="margin-bottom:16px" border=0 src="/media/32759/pelogen2_9.gif" alt="" /> <p></div></div></div></p> </li> <li>Data management of the model becomes more intuitive and easier to understand.<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;"> <img style="margin-bottom:16px" border=0 src="/media/32759/pelogen2_15.gif" alt="" /> <p></div></div></div></p></li> </ul> <p>Development is about 90% complete until ready for release.<br /> Data import/export, sample code, and model size limit checks remain.</p> https://www.lexaloffle.com/bbs/?tid=55367 https://www.lexaloffle.com/bbs/?tid=55367 Mon, 29 Jan 2024 14:00:42 UTC Match 3 in development (Part 3) <h3>This is my own public blog posted on pixivFanbox on August 28, 2023 at 13:40.</h3> <p><strong>Other private blogs and other private blogs are posted here.</strong><br /> <a href="https://bitchunk.fanbox.cc/">https://bitchunk.fanbox.cc/</a></p> <hr /> <p>I am able to get some time before bedtime, but I don't have much physical time and often fall asleep right away.</p> <h2>Match judging and then erasing blocks</h2> <img style="margin-bottom:16px" border=0 src="/media/32759/dmO9SHCt6TkGh1mJ9ojgW0qd.gif" alt="" /> <p>We also create a direction to make the matched and erased blocks fly away.<br /> However, this leaves the block full of gaps.</p> <h2>Match, then drop the top block</h2> <img style="margin-bottom:16px" border=0 src="/media/32759/RQneLjn6eHq14JjDVrl7bFvG.gif" alt="" /> <p>There is no falling direction, but the erased area will be filled with blocks.<br /> However, this also leaves a lot of gaps. It is necessary to make up for the gaps.</p> <h2>Compensate for the topmost block so that there are no gaps</h2> <img style="margin-bottom:16px" border=0 src="/media/32759/VDrCotBIYVdwYYH0dLvGc5ww.gif" alt="" /> <p>Place an additional block at the top of the erased area and drop it.<br /> The falling direction has also been added.<br /> It is becoming more like Match 3!</p> <h2>Redetermine the match after a block falls</h2> <img style="margin-bottom:16px" border=0 src="/media/32759/bQLyJE9tKYSaAvkP7hF5jJuj.gif" alt="" /> <p>After a block falls, erasing the already aligned blocks becomes just a tedious element.<br /> We now need to judge matches other than the block-flip action.<br /> It will be exhilarating to match in a row!<br /> (Since the previous work description, the block falling process has been radically reworked.)</p> <h2>Completed this time</h2> <ul> <li>✔Actual replacement of ingredients.</li> <li>✔Match production.</li> <li>✔Disappear when matched.</li> <li>✔Compensate for the missing part. Drop new ingredients from above.</li> </ul> <h2>Plans for next time</h2> <ul> <li>✔Counting of matched ingredients.</li> <li>✔Select 7 out of 16 ingredients to make them appear.</li> <li>✔Standstill judgment and shuffling process.</li> <li>Time is up and the game is over. <ul> <li>Fever Element</li> </ul></li> <li>Game ends when the number of times has expired. <ul> <li>Skill Element</li> </ul></li> </ul> https://www.lexaloffle.com/bbs/?tid=54644 https://www.lexaloffle.com/bbs/?tid=54644 Wed, 18 Oct 2023 02:03:28 UTC DBG() [Displays any timing debugging value] <p> <table><tr><td> <a href="/bbs/?pid=132923#p"> <img src="/bbs/thumbs/pico8_knutil_dbg-1.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=132923#p"> knutil_dbg</a><br><br> by <a href="/bbs/?uid=32759"> shiftalow</a> <br><br><br> <a href="/bbs/?pid=132923#p"> [Click to Play]</a> </td></tr></table> </p> <h2>Feature Overview</h2> <p><code>DBG()</code> Displays any timing value in real time.</p> <ul> <li>Executed with arguments, it stacks values for display.</li> <li>You need to specify 'd?' at the timing you want to display.</li> <li>When the stacked value display is complete, it is reset.</li> <li>This function consumes 71 Token.</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>function _update() dbg('Debug Test!',time()) end function _draw() dbg('d?') -- 'Debug Test! [time value]' 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>This function will be included in the next version(0.14.0) of <a href="https://www.lexaloffle.com/bbs/?tid=32411">KNUTIL</a> library.<br /> If you want to stop processing and investigate detailed values, consider <a href="https://www.lexaloffle.com/bbs/?tid=32830">DMP()</a>.</p> <h3>release note</h3> <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 /> <strong>v0.1</strong></p> <ul> <li>first release<br /> </div></div></div></li> </ul> https://www.lexaloffle.com/bbs/?tid=53711 https://www.lexaloffle.com/bbs/?tid=53711 Thu, 10 Aug 2023 13:40:57 UTC AMID() [Returns the median positive and negative] <p> <table><tr><td> <a href="/bbs/?pid=132902#p"> <img src="/bbs/thumbs/pico8_knutil_amid-1.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=132902#p"> knutil_amid</a><br><br> by <a href="/bbs/?uid=32759"> shiftalow</a> <br><br><br> <a href="/bbs/?pid=132902#p"> [Click to Play]</a> </td></tr></table> </p> <h2>Feature Overview</h2> <p><code>AMID()</code> Returns the median of a given positive and negative number.</p> <ul> <li>It is used in controlling the camera and parameters that can swing either + or -.</li> <li>This function consumes 10 Token.</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>x,y=0,0 w,h=16,8 -- range of movement(*2+1) while 1 do cls(12) camera(-64,-64) rectfill(w,h,-w,-h,0) ?'⬆️⬇️⬅️➡️ key to move',-60,-60 x+=tonum(btn(1))-tonum(btn(0)) x=amid(w,x) y+=tonum(btn(3))-tonum(btn(2)) y=amid(h,y) pset(x,y,8) ?x..' '..y,-w,h+1,7 flip() 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>This function will be included in the next version(0.14.0) of <a href="https://www.lexaloffle.com/bbs/?tid=32411">KNUTIL</a> library.<br /> If you want to determine that two values are within range, consider <a href="https://www.lexaloffle.com/bbs/?tid=35802">INRNG()</a>.</p> <h3>release note</h3> <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 /> <strong>v0.1</strong></p> <ul> <li>first release<br /> </div></div></div></li> </ul> https://www.lexaloffle.com/bbs/?tid=53703 https://www.lexaloffle.com/bbs/?tid=53703 Wed, 09 Aug 2023 14:42:22 UTC HTD() [Split a continuous string of hexadecimal numbers] <p> <table><tr><td> <a href="/bbs/?pid=132863#p"> <img src="/bbs/thumbs/pico8_knutil_htd-0.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=132863#p"> knutil_htd</a><br><br> by <a href="/bbs/?uid=32759"> shiftalow</a> <br><br><br> <a href="/bbs/?pid=132863#p"> [Click to Play]</a> </td></tr></table> </p> <h2>Feature Overview</h2> <p><code>HTD()</code> Split a continuous string of hexadecimal numbers into a table.</p> <ul> <li>the number of supported delimited bits is 4,8,12,16 bits (1~4 nibbles).</li> <li>characters that cannot be converted to numbers are ignored. <ul> <li>the result of the api's <code>tonum('0x'..v)</code> of the api.</li> </ul></li> <li>depending on the delimiter, a missing last character will result in a lower digit by the number of missing characters.</li> <li>This function consumes 30 Token.</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> local a=htd('12a30f',1) -- a={1,2,10,3,0,15} local b=htd('12a30f',3) -- b={297,783} </pre></div></td> <td background=/gfx/code_bg1.png width=16><div style="width:16px;display:block"></div></td> </tr></table></div></div> <p>Perhaps consider <a href="https://www.lexaloffle.com/bbs/?tid=50425">BUNPACK()</a> if you want to separate NUMBER every few bits.</p> <p>This function is included in the <a href="https://www.lexaloffle.com/bbs/?tid=32411">KNUTIL</a> library.</p> <h3>release note</h3> <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 /> <strong>v0.1</strong></p> <ul> <li>first release<br /> </div></div></div></li> </ul> https://www.lexaloffle.com/bbs/?tid=53696 https://www.lexaloffle.com/bbs/?tid=53696 Tue, 08 Aug 2023 10:18:29 UTC ECPALT() [set transparency from palette table] <p> <table><tr><td> <a href="/bbs/?pid=132688#p"> <img src="/bbs/thumbs/pico8_knutil_ecpalt-0.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=132688#p"> knutil_ecpalt</a><br><br> by <a href="/bbs/?uid=32759"> shiftalow</a> <br><br><br> <a href="/bbs/?pid=132688#p"> [Click to Play]</a> </td></tr></table> </p> <h2>Feature Overview</h2> <p><code>ECPALT()</code> set transparency from palette table.</p> <ul> <li>Transparency is reset at each function execution.</li> <li>If the value of the &quot;color id key&quot; in the palette table is 0, the palette becomes transparent.</li> <li>The palette that was made black by <code>MKPAL()</code> can be used as transparent as it is.</li> <li>The format is redundant due to the specification to match <code>MKPAL()</code>.</li> <li>This function consumes 20 Token.</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>-- Make 6, 7, and 13 transparent. ecpalt({[6]=0,[7]=0,[13]=0}) spr(1,16,32,2,2) </pre></div></td> <td background=/gfx/code_bg1.png width=16><div style="width:16px;display:block"></div></td> </tr></table></div></div> <p>This function will be included in the next version(0.14.0) of <a href="https://www.lexaloffle.com/bbs/?tid=32411">KNUTIL</a> library.</p> <h3>release note</h3> <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 /> <strong>v0.1</strong></p> <ul> <li>first release<br /> </div></div></div></li> </ul> https://www.lexaloffle.com/bbs/?tid=53623 https://www.lexaloffle.com/bbs/?tid=53623 Mon, 07 Aug 2023 15:57:25 UTC MKPAL() [Create a color swap table] <p> <table><tr><td> <a href="/bbs/?pid=130356#p"> <img src="/bbs/thumbs/pico8_knutil_mkpal-0.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=130356#p"> knutil_mkpal</a><br><br> by <a href="/bbs/?uid=32759"> shiftalow</a> <br><br><br> <a href="/bbs/?pid=130356#p"> [Click to Play]</a> </td></tr></table> </p> <h2>Feature Overview</h2> <p><code>MKPAL()</code> Create a color swap table for use in <code>PAL()</code>.</p> <ul> <li>This is useful for creating several color patterns.</li> <li>It is not an error if the number of elements in the swap table does not match.</li> <li>This function consumes 44 Token.</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>-- Color swap to darken &quot;blue, white, and green&quot;. local p=mkpal({12,7,11},{13,6,3}) -- mkpal('c7b','d63') is also the same. pal(p) spr(1,16,32,2,2) </pre></div></td> <td background=/gfx/code_bg1.png width=16><div style="width:16px;display:block"></div></td> </tr></table></div></div> <p>This function will be included in the next version(0.14.0) of <a href="https://www.lexaloffle.com/bbs/?tid=32411">KNUTIL</a> library.</p> <h3>release note</h3> <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 /> <strong>v0.1</strong></p> <ul> <li>first release<br /> </div></div></div></li> </ul> https://www.lexaloffle.com/bbs/?tid=52934 https://www.lexaloffle.com/bbs/?tid=52934 Mon, 07 Aug 2023 06:15:14 UTC Reset P8SCII cursor movement by newline code <p>Horizontal alignment is reset when a <strong>line break</strong> or <strong>tab</strong> is inserted in p8scii.</p> <p>The example below expects the first line to start at the beginning of the first line after a line break.<br /> Also, the tab position seems to reset the shift cursor.</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>cls() ?&quot;\+jjtest p8scii\ntest p8scii (𝘹ADJUST:j)&quot;,0,0 ?&quot;\+ljtest p8scii\ntest p8scii (𝘹ADJUST:l)&quot;,0,16 ?&quot;\-jtest\-j p8scii (𝘹ADJUST:j)&quot;,0,64 ?&quot;\-ltest\-l p8scii (𝘹ADJUST:l)&quot;,0,72 </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=130237#p"> <img src="/bbs/thumbs/pico8_p8scii_nl_adjust_bug-0.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=130237#p"> p8scii_nl_adjust_bug</a><br><br> by <a href="/bbs/?uid=32759"> shiftalow</a> <br><br><br> <a href="/bbs/?pid=130237#p"> [Click to Play]</a> </td></tr></table> </p> https://www.lexaloffle.com/bbs/?tid=52893 https://www.lexaloffle.com/bbs/?tid=52893 Sun, 28 May 2023 06:18:31 UTC OPRINT() [Printing with outline] <p> <table><tr><td> <a href="/bbs/?pid=130214#p"> <img src="/bbs/thumbs/pico8_knutil_oprint-3.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=130214#p"> knutil_oprint</a><br><br> by <a href="/bbs/?uid=32759"> shiftalow</a> <br><br><br> <a href="/bbs/?pid=130214#p"> [Click to Play]</a> </td></tr></table> </p> <h2>Feature Overview</h2> <p><code>OPRINT()</code> Adds outlines to text and prints them.</p> <ul> <li>enclosure is not possible if tabs or newlines are included. (in pico8_v0.2.5.g)</li> <li>operation cannot be guaranteed if p8scii for decoration is included.</li> <li>Custom decorations other than outlines can be made by specifying a comma-separated p8scii as an argument.</li> <li>This function consumes 33 Token.</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>-- Split a pair of data and further split it into colors and names. oprint('outline print',10,6,7,13) -- text, x, y, foreground-color, outline-color [, custom decoration] </pre></div></td> <td background=/gfx/code_bg1.png width=16><div style="width:16px;display:block"></div></td> </tr></table></div></div> <p>This function is an inheritance of OUTLINE contained in the <a href="https://www.lexaloffle.com/bbs/?tid=32411">KNUTIL</a> library.</p> <h3>release note</h3> <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 /> <strong>v0.3</strong></p> <ul> <li>add custom decoration argument.</li> </ul> <p><strong>v0.2</strong></p> <ul> <li>remove color()</li> </ul> <p><strong>v0.1</strong></p> <ul> <li>first release<br /> </div></div></div></li> </ul> https://www.lexaloffle.com/bbs/?tid=52886 https://www.lexaloffle.com/bbs/?tid=52886 Sat, 27 May 2023 15:02:46 UTC 5*5px custom font 「傾きかな」(Katamuki kana) <p>When you see the default kana font, you might think that you could create something a little better.<br /> But then you realize that it was a kind of provocation for creators (or designers).</p> <h2>Why the tilt?</h2> <p>Hiragana can be quite difficult to express in 5x5px.<br /> One answer to this problem is a slanted design.<br /> This allowed us to secure a space, albeit a small one, per character.</p> <h3>x4 size</h3> <img style="margin-bottom:16px" border=0 src="/media/32759/custom_font_5_8_6_x4.png" alt="" /> <h3>Original size</h3> <img style="margin-bottom:16px" border=0 src="/media/32759/custom_font_5_8_6.png" alt="" /> <h3>Preview gif</h3> <img style="margin-bottom:16px" border=0 src="/media/32759/knutil_5.gif" alt="" /> <h3>Text conversion scripts for SpreadSheet custom scripts</h3> <p>This script converts &quot;Kana/Kana&quot; text to &quot;Katamuki kana&quot; specification in a spreadsheet.<br /> Register it in a custom script and execute <code>p8Katamukikana([Cell-ID])</code> on the cell you want to convert.</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 p8Katamukikana(text) { const kanamap = { 'が': 'か゛', 'ぎ': 'き゛','ぐ': 'く゛','げ': 'け゛','ご': 'こ゛', 'ざ': 'さ゛', 'じ': 'し゛','ず': 'す゛','ぜ': 'せ゛','ぞ': 'そ゛', 'だ': 'た゛', 'ぢ': 'ち゛','づ': 'つ゛','で': 'て゛','ど': 'と゛', 'ば': 'は゛', 'び': 'ひ゛','ぶ': 'ふ゛','べ': 'へ゛','ぼ': 'ほ゛', 'ぱ': 'は゜', 'ぴ': 'ひ゜','ぷ': 'ふ゜','ぺ': 'へ゜','ぽ': 'ほ゜', 'ガ': 'カ゛', 'ギ': 'キ゛','グ': 'ク゛','ゲ': 'け゛','ゴ': 'コ゛', 'ザ': 'サ゛', 'ジ': 'シ゛','ズ': 'ス゛','ゼ': 'セ゛','ゾ': 'ソ゛', 'ダ': 'タ゛', 'ヂ': 'チ゛','ヅ': 'ツ゛','デ': 'テ゛','ド': 'ト゛', 'バ': 'ハ゛', 'ビ': 'ヒ゛','ブ': 'フ゛','ベ': 'ヘ゛','ボ': 'ホ゛', 'パ': 'ハ゜', 'ピ': 'ヒ゜','プ': 'フ゜','ペ': 'ヘ゜','ポ': 'ホ゜', 'ぁ': '&hellip;', 'ぃ': '➡️','ぅ': '★','ぇ': '⧗','ぉ': '⬆️', 'ァ': 'ˇ', 'ィ': '&and;','ゥ': '❎','ェ': '▤','ォ': '▥', 'ゔ': 'う゛', 'ヴ': 'ウ゛','ぅ゙': 'ぅ゛','ゥ゙': 'ゥ゛', 'ー': '-', '-': '-', '~': '~', } var result = '' for (var i = 0; i &lt; text.length; i++) { result += kanamap[text.charAt(i)] || text.charAt(i); } return result; }</pre></div></td> <td background=/gfx/code_bg1.png width=16><div style="width:16px;display:block"></div></td> </tr></table></div></div> <img style="margin-bottom:16px" border=0 src="/media/32759/スクリーンショット 2023-05-29 143859.png" alt="" /> <h3>Notes</h3> <p>chrcode 144-153 are used as discarded kana.(ぁぃぅぇぉァィゥェォ)</p> <p>It is quite difficult to maintain hiragana visibility at small sizes. As a desperate measure, I tilted the characters and crammed them into that area.<br /> <code>Katamuki = tilt</code></p> https://www.lexaloffle.com/bbs/?tid=52858 https://www.lexaloffle.com/bbs/?tid=52858 Thu, 25 May 2023 14:08:03 UTC MSPLIT() [Multi-layer split] <p> <table><tr><td> <a href="/bbs/?pid=130014#p"> <img src="/bbs/thumbs/pico8_knutil_msplit-1.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=130014#p"> knutil_msplit</a><br><br> by <a href="/bbs/?uid=32759"> shiftalow</a> <br><br><br> <a href="/bbs/?pid=130014#p"> [Click to Play]</a> </td></tr></table> </p> <h2>Feature Overview</h2> <p><code>MSPLIT()</code> Converts a string into a table by splitting it with multiple delimiters.</p> <ul> <li>The default delimiter is &quot; &quot; for ease of data entry and readability(according to one's own preference).</li> <li>the default delimiters and numeric conversion flags should be modified according to your project.</li> <li>This function consumes 36 Token.</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>-- Split a pair of data and further split it into colors and names. local value=msplit( '10-yellow 11-green 8-red 12-blue' ,' ','-' ) for i,v in pairs(value) do local col,name=unpack(v) ?name,i*32-24,48,col 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>If you want to check the type at once, consider using a <a href="https://www.lexaloffle.com/bbs/?tid=32830">DMP()</a>.<br /> This function is included in the <a href="https://www.lexaloffle.com/bbs/?tid=32411">KNUTIL</a> library.</p> <h3>release note</h3> <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 /> <strong>v0.1</strong></p> <ul> <li>first release<br /> </div></div></div></li> </ul> https://www.lexaloffle.com/bbs/?tid=52825 https://www.lexaloffle.com/bbs/?tid=52825 Mon, 22 May 2023 08:40:56 UTC TOHEX() [Hexadecimal conversion with aligned digits] <p> <table><tr><td> <a href="/bbs/?pid=129956#p"> <img src="/bbs/thumbs/pico8_knutil_tohex-1.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=129956#p"> knutil_tohex</a><br><br> by <a href="/bbs/?uid=32759"> shiftalow</a> <br><br><br> <a href="/bbs/?pid=129956#p"> [Click to Play]</a> </td></tr></table> </p> <h2>Feature Overview</h2> <p><code>TOHEX()</code> Converts to a hexadecimal string filled with zeros.</p> <ul> <li>If the number of digits is not specified, specify 0.</li> <li>The maximum number of digits specified is 4.</li> <li>This function consumes 40 Token.</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>?tohex(32) -- 20 ?tohex(32,3) -- 020 ?tohex('0x32',1) -- 32 </pre></div></td> <td background=/gfx/code_bg1.png width=16><div style="width:16px;display:block"></div></td> </tr></table></div></div> <p>This function is included in the <a href="https://www.lexaloffle.com/bbs/?tid=32411">KNUTIL</a> library.</p> <h3>release note</h3> <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 /> <strong>v0.1</strong></p> <ul> <li>first release<br /> </div></div></div></li> </ul> https://www.lexaloffle.com/bbs/?tid=52809 https://www.lexaloffle.com/bbs/?tid=52809 Sat, 20 May 2023 10:56:52 UTC TONORM() [Normalize argument string values] <p> <table><tr><td> <a href="/bbs/?pid=129901#p"> <img src="/bbs/thumbs/pico8_knutil_tonorm-0.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=129901#p"> knutil_tonorm</a><br><br> by <a href="/bbs/?uid=32759"> shiftalow</a> <br><br><br> <a href="/bbs/?pid=129901#p"> [Click to Play]</a> </td></tr></table> </p> <h2>Feature Overview</h2> <p><code>TONORM()</code> normalize argument values (strings) to the correct type.</p> <ul> <li>Mainly converts from strings to values of the correct type. <ul> <li>Especially used to initialize multiple values from a long string, see <strong><a href="https://www.lexaloffle.com/bbs/?tid=36325">HTBL()</a></strong>.</li> </ul></li> <li>Hexadecimal numbers are converted to decimal numbers.</li> <li>This function consumes 28 Token.</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> ?tonorm('true') -- true (The type is 'boolean') ?tonorm('nil') -- [nil] (The type is 'nil') </pre></div></td> <td background=/gfx/code_bg1.png width=16><div style="width:16px;display:block"></div></td> </tr></table></div></div> <p>This function was included in the <a href="https://www.lexaloffle.com/bbs/?tid=32411">KNUTIL</a> library, but has been deprecated since v0.14.0.<br /> If you want to check the type at once, consider using a <a href="https://www.lexaloffle.com/bbs/?tid=32830">DMP()</a>.</p> <h3>release note</h3> <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 /> <strong>v0.1</strong></p> <ul> <li>first release<br /> </div></div></div></li> </ul> https://www.lexaloffle.com/bbs/?tid=52789 https://www.lexaloffle.com/bbs/?tid=52789 Fri, 19 May 2023 08:17:10 UTC