kaimonkey [Lexaloffle Blog Feed]https://www.lexaloffle.com/bbs/?uid=68054 Birb Bird Hills <h1><img style="margin-bottom:16px" border=0 src="/media/68054/birdbirdhills.png" alt="" /></h1> <h3>Music by <a href="https://www.lexaloffle.com/bbs/?uid=40166"> <a href="https://www.lexaloffle.com/bbs/?uid=40166"> @packbat</a></a>, Game by <a href="https://www.lexaloffle.com/bbs/?uid=68054"> <a href="https://www.lexaloffle.com/bbs/?uid=68054"> @kaimonkey</a></a></h3> <p> <table><tr><td> <a href="/bbs/?pid=135479#p"> <img src="/bbs/thumbs/pico8_birbbird-12.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=135479#p"> birbbird</a><br><br> by <a href="/bbs/?uid=68054"> kaimonkey</a> <br><br><br> <a href="/bbs/?pid=135479#p"> [Click to Play]</a> </td></tr></table> </p> <h2>Description</h2> <p>Tiny Wings? Never heard of her! In this totally originally concept, land as many jumps as you can without crashing! Every time you land a jump, you get a point! </p> <h3>Controls</h3> <ul> <li><strong>X/x</strong> If in the air go down, if on the ground go fast</li> <li><strong>Z/O</strong> If in the air go down, if on the ground go fast <em>(again)</em></li> <li><strong>Down</strong> If in the air go down, if on the ground go fast <em>(again, again)</em></li> <li><strong>Clicking the screen</strong> If in the air go down, if on the ground go fast <em>(Listen, it's a 1-button game)</em></li> </ul> <h3>Features</h3> <ul> <li>Five different terrain types which come as you get higher and higher score</li> <li>A trajectory helper to get you to learn the ropes - be careful, once your points go above 5, or your highscore gets to 8 you'll lose it!</li> <li>Music by <a href="https://www.lexaloffle.com/bbs/?uid=40166"> <a href="https://www.lexaloffle.com/bbs/?uid=40166"> @packbat</a></a> which has different instruments change volume when you break a combo!</li> <li>No death screen: every time you lose a combo, you can just start your next attempt straight away. In just a few hills time you'll be back in those gently flower hills, but maybe you'll get some extra cheeky points before you get there</li> </ul> <h3>Highscore Table</h3> <table> <thead> <tr> <th>#</th> <th>Username</th> <th>Score</th> </tr> </thead> <tbody> <tr> <td>🥇</td> <td><a href="https://www.lexaloffle.com/bbs/?uid=68054"> <a href="https://www.lexaloffle.com/bbs/?uid=68054"> @kaimonkey</a></a></td> <td>17</td> </tr> </tbody> </table> https://www.lexaloffle.com/bbs/?tid=54475 https://www.lexaloffle.com/bbs/?tid=54475 Thu, 05 Oct 2023 22:00:32 UTC Penny the Pumpkin V1.1 <p><img style="margin-bottom:16px" border=0 src="/media/68054/image.png" alt="" />by <a href="https://www.lexaloffle.com/bbs/?uid=68054"> <a href="https://www.lexaloffle.com/bbs/?uid=68054"> @kaimonkey</a></a></p> <p> <table><tr><td> <a href="/bbs/?pid=127456#p"> <img src="/bbs/thumbs/pico8_blob-25.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=127456#p"> Penny the Pumpkin 1.2</a><br><br> by <a href="/bbs/?uid=68054"> kaimonkey</a> <br><br><br> <a href="/bbs/?pid=127456#p"> [Click to Play]</a> </td></tr></table> </p> <h2>Controls</h2> <p><strong>Left/Right</strong> arrows: Move Penny left or right<br /> <strong>Up/Down</strong> arrows: Stretch Penny up or down<br /> <strong>X/O/Z</strong> buttons: Make Penny jump. <strong>HOLD</strong> jump for a bigger leap!<br /> <strong>Menu/Space</strong>: Access the menu, featuring a soft-lock ejector just in case!</p> <img style="margin-bottom:16px" border=0 src="/media/68054/penny.png" alt="" /> <h2>Description</h2> <p><strong>Penny the Pumpkin</strong> takes you on a delightful platforming journey with light puzzles to solve. Guide Penny, our lovable gourd, as she collects 12 precious coins! Your progress is saved every time she grabs a coin or enters a new area.</p> <p>Once you've collected all 12 coins, put your skills to the test by unlocking the thrilling speedrun mode! Note that saving is disabled in this mode, so it's all about your skill and reflexes. Can you beat the programmer's current record of 2:51.5? 🏆</p> <img style="margin-bottom:16px" border=0 src="/media/68054/penny.png" alt="" /> <h2>Technical Notes</h2> <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 /> This game uses <a href="https://www.lexaloffle.com/bbs/?tid=34058">P9 Compression</a> to have four banks of 16x128 tiles that can be switched between during gameplay.<br /> <table><tr><td width=512> <img src="https://www.lexaloffle.com/bbs/gfxc/68054_4.png" width=512 height=128> </td> <td valign=bottom> <a style="cursor:pointer;font-size:8pt" onclick=' var el = document.getElementById("gfxcode_68054_4"); if (el.style.display == "none") el.style.display = ""; else el.style.display = "none"; microAjax("https://www.lexaloffle.com/bbs/gfxc/68054_4.txt", function (retdata){ var el = document.getElementById("gfxcode_68054_4"); el.innerHTML = retdata; el.focus(); el.select(); } ); '> [128x32]</a> </td></tr> <tr><td colspan=2> <textarea rows=3 class=lexinput id="gfxcode_68054_4" style="width:640px;background-color:#fed;display:none;overflow:hidden; font-size:4pt;"></textarea> </td> </tr> </table> <br /> Each level is then defined as an array of &quot;blocks&quot;, where each block is a rectangle of the tilemap somewhere in the level. This allows me to have seven different areas, some of which are quite large, as well as easily having overlapping elements. Blocks can also have properties such as an update method ran each frame, if they should have collision disabled, if they should be drawn in front of the player, if they should be drawn just as a cheap rect fill, if they should be repeated etc. This gives me a lot of power in level design.</p> <p>The physics is relatively simple, with the character animations being based on a very simple <a href="https://en.wikipedia.org/wiki/Hooke%27s_law">spring math</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>spring_dy = (spring_y - spring_y_target) * SPRING_CONSTANT spring_dy *= (1-DAMPING_CONSTANT) spring_y += spring_dy</pre></div></td> <td background=/gfx/code_bg1.png width=16><div style="width:16px;display:block"></div></td> </tr></table></div></div> <p>Each level uses a different screen pallete, which often use the <a href="https://pico-8.fandom.com/wiki/Palette#128..143:_Undocumented_extra_colors">secret palette</a>. Additionally for the title screen, a (trick)[<a href="https://www.lexaloffle.com/bbs/?tid=38565">https://www.lexaloffle.com/bbs/?tid=38565</a>] documented by <a href="https://www.lexaloffle.com/bbs/?uid=38130"> @BoneVolt</a> is used to switch to a different pallete for the area of the screen behind the logo! I had to do some extra bit of bit math to have it drawn to an arbitrary place on the screen without clobbering memory!</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> y= 10 -- The vertical position in PIXELS h= 3 -- The height in rows of EIGHT pixels poke(0x5f5f,0x10) -- enable the effect pal(NEW_PAL,2) -- Set the pallete for the section pal_memset(0x5f70,0,16) -- clear the settings from previous update local rem=flr(y)%8 -- calculate the remainder, since the dual-pallete mode works rows of 8 at a pixels at a time pal_memset(0x5f70+(y)/8-1,255&lt;&lt;rem,1) -- Set the flags above where main body made of full 8-high rows can be set pal_memset(0x5f70+(y)/8,255,h) --Set the flags for the main body of h 8-pixel-high rows pal_memset(0x5f70+(y)/8+h,~(255&lt;&lt;rem),1) -- Set the flags below where main body made of full 8-high rows can be set</pre></div></td> <td background=/gfx/code_bg1.png width=16><div style="width:16px;display:block"></div></td> </tr></table></div></div> <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 pal_memset(addr, val, len) local min_mem = 0x5f70 local max_mem = 0x5f70 + 18 if addr &gt;= min_mem and (addr + len - 1) &lt;= max_mem then memset(addr, val, len) 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> <img style="margin-bottom:16px" border=0 src="/media/68054/penny.png" alt="" /> <h2>New in Version 1.2</h2> <h3>Halloween Mode</h3> <p>Play between 24th of October and 7th of November and Penny will be a Spooky Jack'o'Lantern! 🎃</p> <img style="margin-bottom:16px" border=0 src="/media/68054/13_image (1).png" alt="" /> <h2>New in Version 1.1</h2> <h3>Area Complete Notification (And cute heart thought bubble)</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;"></p> <img style="margin-bottom:16px" border=0 src="/media/68054/blob_25.gif" alt="" /> <ul> <li>Penny will now heart her family in<br /> </div></div></div> <h3>Thought bubble to help players in common difficult locations</h3> <img style="margin-bottom:16px" border=0 src="/media/68054/blob_21.gif" alt="" /> <p><img style="margin-bottom:16px" border=0 src="/media/68054/blob_22.gif" alt="" />.</p></li> </ul> <img style="margin-bottom:16px" border=0 src="/media/68054/penny.png" alt="" /> <h2>Speedrun Leaderboard</h2> <table> <thead> <tr> <th>#</th> <th>Runner</th> <th>Time</th> </tr> </thead> <tbody> <tr> <td>🥇</td> <td>Josiah Winslow</td> <td><a href="https://cdn.discordapp.com/attachments/215267007245975552/1156859898269806654/penny_the_pumpkin_1_1_0.gif?ex=6516813d&amp;amp;is=65152fbd&amp;amp;hm=0fbc2167feeb90b5ff422ccf8447b79294faa0a088eec0e1b6de8bb031c1c501&amp;amp;">1:20.2 (gif)</a></td> </tr> <tr> <td>🥈</td> <td><a href="https://www.lexaloffle.com/bbs/?uid=75892"> @ikumo</a></td> <td><a href="https://www.youtube.com/watch?v=AAkuU91UY14">1:22.1 (video)</a></td> </tr> <tr> <td>🥉</td> <td><a href="https://www.lexaloffle.com/bbs/?uid=37245"> @supreee</a></td> <td><a href="https://www.lexaloffle.com/bbs/?pid=131219#p">1:46.9 (gif)</a></td> </tr> <tr> <td>4</td> <td><a href="https://www.lexaloffle.com/bbs/?uid=27691"> @pancelor</a></td> <td><a href="https://www.youtube.com/watch?v=OMVk8mKMq90&amp;amp;ab_channel=pancelorp">1:54.4 (video)</a></td> </tr> <tr> <td>5</td> <td><a href="https://www.lexaloffle.com/bbs/?uid=65636"> @mcman</a></td> <td>2:03.7</td> </tr> <tr> <td>6</td> <td><a href="https://www.lexaloffle.com/bbs/?uid=68822"> @Ruva</a></td> <td>2:26.5</td> </tr> <tr> <td>7</td> <td><a href="https://www.lexaloffle.com/bbs/?uid=46538"> @Gabe_8_bit</a></td> <td>2:29.3</td> </tr> <tr> <td>8</td> <td><a href="https://www.lexaloffle.com/bbs/?uid=68054"> <a href="https://www.lexaloffle.com/bbs/?uid=68054"> @kaimonkey</a></a></td> <td>2:51.5</td> </tr> <tr> <td>9</td> <td><a href="https://www.lexaloffle.com/bbs/?uid=74153"> @VaniaIsAnIdiot</a></td> <td>3:34.6</td> </tr> <tr> <td>10</td> <td><a href="https://www.lexaloffle.com/bbs/?uid=76133"> @Lisa</a></td> <td>3:50.8</td> </tr> <tr> <td>11</td> <td><a href="https://www.lexaloffle.com/bbs/?uid=73077"> @TrevorJacobs</a></td> <td>3:59.8</td> </tr> <tr> <td>12</td> <td><a href="https://www.lexaloffle.com/bbs/?uid=66501"> @Heracleum</a></td> <td>5:58.4</td> </tr> <tr> <td>13</td> <td><a href="https://www.lexaloffle.com/bbs/?uid=2185"> @phil</a></td> <td>6:44.6</td> </tr> </tbody> </table> https://www.lexaloffle.com/bbs/?tid=52122 https://www.lexaloffle.com/bbs/?tid=52122 Wed, 22 Mar 2023 13:39:59 UTC