Tw1zTeD616 [Lexaloffle Blog Feed]https://www.lexaloffle.com/bbs/?uid=101688 Cosmic Crash--Playtesting needed <p> <table><tr><td> <a href="/bbs/?pid=166978#p"> <img src="/bbs/thumbs/pico8_cosmic_crash-0.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=166978#p"> cosmic_crash</a><br><br> by <a href="/bbs/?uid=101688"> Tw1zTeD616</a> <br><br><br> <a href="/bbs/?pid=166978#p"> [Click to Play]</a> </td></tr></table> </p> <h2>What if Arkanoid and Geometry Wars had a baby?</h2> <p>Cosmic Crash (stupid name, I know) is my version of <a href="https://www.lexaloffle.com/bbs/?uid=16423"> @Krystman</a>'s Breakout Hero. </p> <p>A few notable changes:</p> <ul> <li>The player has the ability to change the angle of a ball stuck to the paddle by pressing up or down</li> <li>Powerups are collected and stored in the paddle. Use your stored powerup with the O/Z button. Collecting a new powerup will replace the currently held one.</li> </ul> <p>There are still two bugs that I'm not sure have been fixed. </p> <ul> <li>Sometimes, at the right angle, the ball can leave the top corners of the screen. I believe the ball is slipping through the screen collision box, so I increased the ball's collision radius by a pixel hoping this will fix it. I haven't encountered the bug since, but it's rare</li> <li>Repeatedly retrying a level will sometimes skip the next level in the sequence when you finally advance. This one is <strong>EXTREMELY</strong> rare, and I have absolutely no idea why or how it happens.</li> </ul> <p>If anyone encounters these bugs, or any others, please let me know and I'll break out the can of Raid.</p> <p>I hope you enjoy the game.</p> https://www.lexaloffle.com/bbs/?tid=148978 https://www.lexaloffle.com/bbs/?tid=148978 Wed, 14 May 2025 05:23:29 UTC BOOM - A Rip &amp; Tear Rougelike <p><strong><em>Content Warning</em></strong> Pixelated gore, mild language, some religious imagery, &amp; a flickering sprite that could pose problems for people with photosensitive seizures.</p> <p><strong>Changelog</strong> </p> <ul> <li>New weapon - Chaingun </li> <li>New enemies - Nightmare Imp, Hell Knight, Arachnotron </li> <li>Minor sprite changes </li> <li>Minor UI updates</li> <li>New SFX added</li> <li>Fixed a bug that would incorrectly place decorative lights</li> <li>Fixed a bug that didn't change the player's visor color when moving to a new level</li> </ul> <p>Hopefully this is the final version, but if any new bugs crop up, or the game has balancing issues, please let me know.</p> <p>Thank you very much <a href="https://www.lexaloffle.com/bbs/?uid=16423"> @Krystman</a> for your Lazy Devs Academy rougelike tutorial. I had an absolute blast following along and learning from your videos. I hope you like what I've done with your engine. lol</p> <p>Thank you also to Gruber @gruber_music on socials. The background music is track #9 Evil from Pico-8 Tunes Vol.1 <strong>(Update: track #6 Eyes in the Dark from Pico Tunes Vol 2)</strong>. I am a terrible musician, and even worse with the Pico-8 editor. Boomguy's adventures would be awfully silent without Gruber's generosity.</p> <p>BOOM is a rougelike built using the Porklike engine from the Lazy Devs Academy tutorial series with a DOOM flavor. Descend through 10 levels of a military base overrun by zombies and demons from &quot;somewhere else.&quot; Equip yourself with armor and your shotgun, chainsaw, or if you're lucky, the BSG 9.5. Can you stop the demon invasion?</p> <h3>Basic Controls</h3> <p>Arrow keys - Move up, down, left, and right<br /> x - Open Inventory, Confirm Selection, Confirm Shot<br /> z - Close inventory, Cancel Selection, Open Aim for Shot, Cancel Shot</p> <h3>Tips</h3> <p>Your basic attack is still a bump into an enemy. An equipped weapon will increase your base attack (except for the Pistol, 1 DMG period), with a ranged shot dealing more damage. But beware, each weapon has it's own ammo cost needed to fire a shot. Use your shots wisely to kill enemies and position yourself.</p> <p>Some enemies will also attack at range. Any enemy with a ranged attack will attack EITHER adjacent OR at their specified range. I felt like this was better for game balance, let me know if you disagree. Some enemies are also faster, moving more than one space per turn if they can. In contrast, some enemies are slow, moving only every other turn.</p> <p>Keep an eye out for healing items, upgrades to your health and ammo, and other items to help in your quest to become the Boomslayer.</p> <p>I hope you all enjoy the game.</p> <p> <table><tr><td> <a href="/bbs/?pid=164331#p"> <img src="/bbs/thumbs/pico8_boom_ver1_2-0.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=164331#p"> boom_ver1_2</a><br><br> by <a href="/bbs/?uid=101688"> Tw1zTeD616</a> <br><br><br> <a href="/bbs/?pid=164331#p"> [Click to Play]</a> </td></tr></table> </p> https://www.lexaloffle.com/bbs/?tid=148022 https://www.lexaloffle.com/bbs/?tid=148022 Mon, 24 Mar 2025 02:28:30 UTC The Adventures of Pico Panda <p> <table><tr><td> <a href="/bbs/?pid=155379#p"> <img src="/bbs/thumbs/pico8_picopanda-4.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=155379#p"> picopanda</a><br><br> by <a href="/bbs/?uid=101688"> Tw1zTeD616</a> <br><br><br> <a href="/bbs/?pid=155379#p"> [Click to Play]</a> </td></tr></table> </p> <h2>Changelog</h2> <ul> <li>Fixed bug that moved the player over the HUD if they were one tile below it and rolled with an empty hunger bar</li> <li>Audio and visual cue for traveling through tunnels</li> <li>Sound effects for player damage and poison added</li> <li>Sound effect for walking added</li> <li>Sound effect for whirlwind travel added</li> <li>Fixed softlock when interacting with a whirlwind and tunnel</li> <li>Fixed bugs that allowed movement on the HUD -- Hopefully finally fixed!</li> <li>Added statistics for time and turns taken that are displayed on game over</li> <li>Added method to hunt for secrets</li> <li>Minor map updates</li> </ul> <h2>Pico Panda</h2> <p>The Adventures of Pico Panda is my 2nd &quot;completed&quot; project(it's still missing some sfx, music, and polishing.) It's a small adventure game inspired by my wife. She wanted a game that lets you plays as a panda who eats bamboo and rolls. So, I had my own little mini game jam lol. I hope you all enjoy, and as always, any advice is welcome.</p> <h2>Game Overview</h2> <p>The Adventures of Pico Panda is a turn-based adventure game. Each movement the player makes increases the amount of hunger accrued(a little for walking, more for rolling) and takes one turn. Any enemies onscreen will move one tile per player turn. Eat to restore your strength, solve puzzles, and set out to save your true love.</p> <h2>Story</h2> <p>While enjoying a lovely picnic of the best bamboo, Pico Panda and his true love, Amanda Panda are suddenly surrounded by nefarious poachers. After a heroic struggle, Pico wakes up with a splitting headache to find Amanda is gone! With steely determination, he sets out to rescue her before it's too late.</p> <h3>Keyboard Controls</h3> <p>Movement - Arrow keys move up, down, left, and right<br /> Rolling - Press X to roll into enemies and some obstacles (if you're not too hungry)<br /> Wait - Press Z to wait one turn, allowing enemies to move while you do not</p> <h3>HUD</h3> <p>Pico Panda's health is represented by his heart icon. As he takes damage, his despair at saving Amanda grows and his heart breaks. Pico can take 3 points of damage before it's game over.</p> <p><strong>Optimistic</strong> <table><tr><td width=32> <img src="https://www.lexaloffle.com/bbs/gfxc/101688_1.png" width=32 height=32> </td> <td valign=bottom> <a style="cursor:pointer;font-size:8pt" onclick=' var el = document.getElementById("gfxcode_101688_1"); if (el.style.display == "none") el.style.display = ""; else el.style.display = "none"; microAjax("https://www.lexaloffle.com/bbs/gfxc/101688_1.txt", function (retdata){ var el = document.getElementById("gfxcode_101688_1"); el.innerHTML = retdata; el.focus(); el.select(); } ); '> [8x8]</a> </td></tr> <tr><td colspan=2> <textarea rows=3 class=lexinput id="gfxcode_101688_1" style="width:640px;background-color:#fed;display:none;overflow:hidden; font-size:6pt;"></textarea> </td> </tr> </table> <br /> <strong>Sad</strong> <table><tr><td width=32> <img src="https://www.lexaloffle.com/bbs/gfxc/101688_2.png" width=32 height=32> </td> <td valign=bottom> <a style="cursor:pointer;font-size:8pt" onclick=' var el = document.getElementById("gfxcode_101688_2"); if (el.style.display == "none") el.style.display = ""; else el.style.display = "none"; microAjax("https://www.lexaloffle.com/bbs/gfxc/101688_2.txt", function (retdata){ var el = document.getElementById("gfxcode_101688_2"); el.innerHTML = retdata; el.focus(); el.select(); } ); '> [8x8]</a> </td></tr> <tr><td colspan=2> <textarea rows=3 class=lexinput id="gfxcode_101688_2" style="width:640px;background-color:#fed;display:none;overflow:hidden; font-size:6pt;"></textarea> </td> </tr> </table> <br /> <strong>Heartbroken</strong> <table><tr><td width=32> <img src="https://www.lexaloffle.com/bbs/gfxc/101688_3.png" width=32 height=32> </td> <td valign=bottom> <a style="cursor:pointer;font-size:8pt" onclick=' var el = document.getElementById("gfxcode_101688_3"); if (el.style.display == "none") el.style.display = ""; else el.style.display = "none"; microAjax("https://www.lexaloffle.com/bbs/gfxc/101688_3.txt", function (retdata){ var el = document.getElementById("gfxcode_101688_3"); el.innerHTML = retdata; el.focus(); el.select(); } ); '> [8x8]</a> </td></tr> <tr><td colspan=2> <textarea rows=3 class=lexinput id="gfxcode_101688_3" style="width:640px;background-color:#fed;display:none;overflow:hidden; font-size:6pt;"></textarea> </td> </tr> </table> </p> <p>Pico's hunger bar will change from green to red as he becomes hungry. Eating bamboo will fill Pico's belly and give him the energy he needs to save Amanda.</p> <p>The number of panda cubs Pico has rescued (there are 99 total) and the keys he's collected are both listed as well.</p> <p>Pico's status icon is in the top right of the HUD, and each of three icons show how he's feeling.</p> <p><strong>Healthy</strong><br /> Pico Panda's base state. <table><tr><td width=32> <img src="https://www.lexaloffle.com/bbs/gfxc/101688_5.png" width=32 height=32> </td> <td valign=bottom> <a style="cursor:pointer;font-size:8pt" onclick=' var el = document.getElementById("gfxcode_101688_5"); if (el.style.display == "none") el.style.display = ""; else el.style.display = "none"; microAjax("https://www.lexaloffle.com/bbs/gfxc/101688_5.txt", function (retdata){ var el = document.getElementById("gfxcode_101688_5"); el.innerHTML = retdata; el.focus(); el.select(); } ); '> [8x8]</a> </td></tr> <tr><td colspan=2> <textarea rows=3 class=lexinput id="gfxcode_101688_5" style="width:640px;background-color:#fed;display:none;overflow:hidden; font-size:6pt;"></textarea> </td> </tr> </table> <br /> <strong>Poisoned</strong><br /> Pico moves slower and each action generates more hunger when he's poisoned. <table><tr><td width=32> <img src="https://www.lexaloffle.com/bbs/gfxc/101688_6.png" width=32 height=32> </td> <td valign=bottom> <a style="cursor:pointer;font-size:8pt" onclick=' var el = document.getElementById("gfxcode_101688_6"); if (el.style.display == "none") el.style.display = ""; else el.style.display = "none"; microAjax("https://www.lexaloffle.com/bbs/gfxc/101688_6.txt", function (retdata){ var el = document.getElementById("gfxcode_101688_6"); el.innerHTML = retdata; el.focus(); el.select(); } ); '> [8x8]</a> </td></tr> <tr><td colspan=2> <textarea rows=3 class=lexinput id="gfxcode_101688_6" style="width:640px;background-color:#fed;display:none;overflow:hidden; font-size:6pt;"></textarea> </td> </tr> </table> <br /> <strong>Energized</strong><br /> When Pico is energized he speeds up and his walk becomes like his roll (without the extra hunger loss). Squash those beetles and boulders by walking into them. <table><tr><td width=32> <img src="https://www.lexaloffle.com/bbs/gfxc/101688_7.png" width=32 height=32> </td> <td valign=bottom> <a style="cursor:pointer;font-size:8pt" onclick=' var el = document.getElementById("gfxcode_101688_7"); if (el.style.display == "none") el.style.display = ""; else el.style.display = "none"; microAjax("https://www.lexaloffle.com/bbs/gfxc/101688_7.txt", function (retdata){ var el = document.getElementById("gfxcode_101688_7"); el.innerHTML = retdata; el.focus(); el.select(); } ); '> [8x8]</a> </td></tr> <tr><td colspan=2> <textarea rows=3 class=lexinput id="gfxcode_101688_7" style="width:640px;background-color:#fed;display:none;overflow:hidden; font-size:6pt;"></textarea> </td> </tr> </table> </p> <h3>Gameplay</h3> <p><strong>Bamboo</strong><br /> <table><tr><td width=32> <img src="https://www.lexaloffle.com/bbs/gfxc/101688_9.png" width=32 height=32> </td> <td valign=bottom> <a style="cursor:pointer;font-size:8pt" onclick=' var el = document.getElementById("gfxcode_101688_9"); if (el.style.display == "none") el.style.display = ""; else el.style.display = "none"; microAjax("https://www.lexaloffle.com/bbs/gfxc/101688_9.txt", function (retdata){ var el = document.getElementById("gfxcode_101688_9"); el.innerHTML = retdata; el.focus(); el.select(); } ); '> [8x8]</a> </td></tr> <tr><td colspan=2> <textarea rows=3 class=lexinput id="gfxcode_101688_9" style="width:640px;background-color:#fed;display:none;overflow:hidden; font-size:6pt;"></textarea> </td> </tr> </table> Bamboo is Pico's primary food source</p> <p><strong>Blackberries</strong><br /> <table><tr><td width=32> <img src="https://www.lexaloffle.com/bbs/gfxc/101688_10.png" width=32 height=32> </td> <td valign=bottom> <a style="cursor:pointer;font-size:8pt" onclick=' var el = document.getElementById("gfxcode_101688_10"); if (el.style.display == "none") el.style.display = ""; else el.style.display = "none"; microAjax("https://www.lexaloffle.com/bbs/gfxc/101688_10.txt", function (retdata){ var el = document.getElementById("gfxcode_101688_10"); el.innerHTML = retdata; el.focus(); el.select(); } ); '> [8x8]</a> </td></tr> <tr><td colspan=2> <textarea rows=3 class=lexinput id="gfxcode_101688_10" style="width:640px;background-color:#fed;display:none;overflow:hidden; font-size:6pt;"></textarea> </td> </tr> </table> Keep an eye out for these handy bushes. Eating blackberries will cure Pico of being poisoned.</p> <p><strong>Ramen</strong><br /> <table><tr><td width=32> <img src="https://www.lexaloffle.com/bbs/gfxc/101688_11.png" width=32 height=32> </td> <td valign=bottom> <a style="cursor:pointer;font-size:8pt" onclick=' var el = document.getElementById("gfxcode_101688_11"); if (el.style.display == "none") el.style.display = ""; else el.style.display = "none"; microAjax("https://www.lexaloffle.com/bbs/gfxc/101688_11.txt", function (retdata){ var el = document.getElementById("gfxcode_101688_11"); el.innerHTML = retdata; el.focus(); el.select(); } ); '> [8x8]</a> </td></tr> <tr><td colspan=2> <textarea rows=3 class=lexinput id="gfxcode_101688_11" style="width:640px;background-color:#fed;display:none;overflow:hidden; font-size:6pt;"></textarea> </td> </tr> </table> Ramen isn't Pico's preferred food, but eating it has some unique benefits. He becomes energized and gains a short boost of energy.</p> <p><strong>Keys</strong><br /> <table><tr><td width=32> <img src="https://www.lexaloffle.com/bbs/gfxc/101688_12.png" width=32 height=32> </td> <td valign=bottom> <a style="cursor:pointer;font-size:8pt" onclick=' var el = document.getElementById("gfxcode_101688_12"); if (el.style.display == "none") el.style.display = ""; else el.style.display = "none"; microAjax("https://www.lexaloffle.com/bbs/gfxc/101688_12.txt", function (retdata){ var el = document.getElementById("gfxcode_101688_12"); el.innerHTML = retdata; el.focus(); el.select(); } ); '> [8x8]</a> </td></tr> <tr><td colspan=2> <textarea rows=3 class=lexinput id="gfxcode_101688_12" style="width:640px;background-color:#fed;display:none;overflow:hidden; font-size:6pt;"></textarea> </td> </tr> </table> Pick up keys to unlock the gates Pico will find throughout the world.</p> <p><strong>Panda Cubs</strong><br /> <table><tr><td width=32> <img src="https://www.lexaloffle.com/bbs/gfxc/101688_13.png" width=32 height=32> </td> <td valign=bottom> <a style="cursor:pointer;font-size:8pt" onclick=' var el = document.getElementById("gfxcode_101688_13"); if (el.style.display == "none") el.style.display = ""; else el.style.display = "none"; microAjax("https://www.lexaloffle.com/bbs/gfxc/101688_13.txt", function (retdata){ var el = document.getElementById("gfxcode_101688_13"); el.innerHTML = retdata; el.focus(); el.select(); } ); '> [8x8]</a> </td></tr> <tr><td colspan=2> <textarea rows=3 class=lexinput id="gfxcode_101688_13" style="width:640px;background-color:#fed;display:none;overflow:hidden; font-size:6pt;"></textarea> </td> </tr> </table> The poachers have kidnapped several panda cubs too. Pico can't leave them to their fate on his quest.</p> <p><strong>Shrines</strong><br /> <table><tr><td width=64> <img src="https://www.lexaloffle.com/bbs/gfxc/101688_8.png" width=64 height=64> </td> <td valign=bottom> <a style="cursor:pointer;font-size:8pt" onclick=' var el = document.getElementById("gfxcode_101688_8"); if (el.style.display == "none") el.style.display = ""; else el.style.display = "none"; microAjax("https://www.lexaloffle.com/bbs/gfxc/101688_8.txt", function (retdata){ var el = document.getElementById("gfxcode_101688_8"); el.innerHTML = retdata; el.focus(); el.select(); } ); '> [16x16]</a> </td></tr> <tr><td colspan=2> <textarea rows=3 class=lexinput id="gfxcode_101688_8" style="width:640px;background-color:#fed;display:none;overflow:hidden; font-size:6pt;"></textarea> </td> </tr> </table> During his quest to find Amanda, Pico Panda will come across shrines. If he's less than Optimistic or his hunger bar is completely depleted, Pico can rest at the shrine to heal his broken heart, replenish a portion of his hunger bar, and regrow all eaten bamboo and blackberries throughout the world. </p> <h3>Enemies</h3> <p>The insects of the forest aren't exactly Pico Panda's enemies, but sometimes they'll be in his way. And they can definitely hurt him if he gets too close. If necessary, Pico can roll into an enemy and squash them flat. Watch out for whirlwinds, though. Nothing is going to squash them!</p> <p><strong>Beetles</strong><br /> <table><tr><td width=32> <img src="https://www.lexaloffle.com/bbs/gfxc/101688_14.png" width=32 height=32> </td> <td valign=bottom> <a style="cursor:pointer;font-size:8pt" onclick=' var el = document.getElementById("gfxcode_101688_14"); if (el.style.display == "none") el.style.display = ""; else el.style.display = "none"; microAjax("https://www.lexaloffle.com/bbs/gfxc/101688_14.txt", function (retdata){ var el = document.getElementById("gfxcode_101688_14"); el.innerHTML = retdata; el.focus(); el.select(); } ); '> [8x8]</a> </td></tr> <tr><td colspan=2> <textarea rows=3 class=lexinput id="gfxcode_101688_14" style="width:640px;background-color:#fed;display:none;overflow:hidden; font-size:6pt;"></textarea> </td> </tr> </table> Beetles love the taste of bamboo, and they don't feel like sharing with Pico</p> <p><strong>Hornets</strong><br /> <table><tr><td width=32> <img src="https://www.lexaloffle.com/bbs/gfxc/101688_15.png" width=32 height=32> </td> <td valign=bottom> <a style="cursor:pointer;font-size:8pt" onclick=' var el = document.getElementById("gfxcode_101688_15"); if (el.style.display == "none") el.style.display = ""; else el.style.display = "none"; microAjax("https://www.lexaloffle.com/bbs/gfxc/101688_15.txt", function (retdata){ var el = document.getElementById("gfxcode_101688_15"); el.innerHTML = retdata; el.focus(); el.select(); } ); '> [8x8]</a> </td></tr> <tr><td colspan=2> <textarea rows=3 class=lexinput id="gfxcode_101688_15" style="width:640px;background-color:#fed;display:none;overflow:hidden; font-size:6pt;"></textarea> </td> </tr> </table> Hornets have a poisonous sting. Thankfully it doesn't hurt too much.</p> <p><strong>Whirlwinds</strong><br /> <table><tr><td width=32> <img src="https://www.lexaloffle.com/bbs/gfxc/101688_16.png" width=32 height=32> </td> <td valign=bottom> <a style="cursor:pointer;font-size:8pt" onclick=' var el = document.getElementById("gfxcode_101688_16"); if (el.style.display == "none") el.style.display = ""; else el.style.display = "none"; microAjax("https://www.lexaloffle.com/bbs/gfxc/101688_16.txt", function (retdata){ var el = document.getElementById("gfxcode_101688_16"); el.innerHTML = retdata; el.focus(); el.select(); } ); '> [8x8]</a> </td></tr> <tr><td colspan=2> <textarea rows=3 class=lexinput id="gfxcode_101688_16" style="width:640px;background-color:#fed;display:none;overflow:hidden; font-size:6pt;"></textarea> </td> </tr> </table> Pico should just avoid whirlwinds. They could definitely set him back.</p> <h2>Hints</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;"> </p> <ul> <li>Enemies don't move when you roll. Use this to set them up and knock them down!--Wait button added as well</li> <li>Secret tunnels might lead to shortcuts or hidden areas</li> <li>Search out secrets or you'll never save all the cubs</li> <li>Listen carefully when you Wait</li> <li>Did that sign just say something strange?<br /> </div></div></div></li> </ul> https://www.lexaloffle.com/bbs/?tid=144622 https://www.lexaloffle.com/bbs/?tid=144622 Sun, 06 Oct 2024 18:21:32 UTC Enemy movement help <p>I'm working on my 2nd official project, watching tutorials and self-teaching (not the best idea, I know.) I'm trying to do a very simple adventure style game for my wife to play, and I'd like any enemies that I place on the map to only move when the player is onscreen with them. I'm obviously not thinking this through thoroughly. Any help would be appreciated. I apologize for the code snippets I included, I'm still learning the formatting for the message board</p> <p> <table><tr><td> <a href="/bbs/?pid=154278#p"> <img src="/bbs/thumbs/pico8_jirjawra-0.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=154278#p"> jirjawra</a><br><br> by <a href="/bbs/?uid=101688"> Tw1zTeD616</a> <br><br><br> <a href="/bbs/?pid=154278#p"> [Click to Play]</a> </td></tr></table> </p> <p>function draw_map()</p> <p>--map screen x,y in tiles<br /> --follows player<br /> mapx=flr(p.x_tile/16)<em>16<br /> mapy=flr(p.y_tile/16)</em>16</p> <p>--camera and hud x,y<br /> cx=mapx<em>8<br /> cy=mapy</em>8</p> <p>--bound camera within game area<br /> if (cx&lt;=0) cx=0<br /> if (cy&lt;=0) cy=0<br /> if (cx&gt;=1024) cx=1024<br /> if (cy&gt;=512) cy=512<br /> map()<br /> camera(cx,cy)</p> <p> draw_hud()<br /> end</p> <p>function move_enemies()</p> <p> for e in all(enemies) do<br /> --priorty one <br /> --restrict offscreen enemy<br /> --movement...debug needed <br /> if mapx!=flr(e.x_tile/16)<em>16 or mapy!=flr(e.y_tile/16)</em>16 then<br /> return<br /> else<br /> --x,y for movement <br /> e.e_newx=e.x_tile<br /> e.e_newy=e.y_tile</p> <p> interact(e.e_newx,e.e_newy)</p> <p> if e.etype==&quot;beetle&quot; then<br /> --random move variable<br /> local r=flr(rnd(4)+1)<br /> --checks for bamboo and<br /> --&quot;eats&quot; it<br /> if check_tile(bamboo,e.x_tile-1,e.y_tile) then<br /> move_left(e)<br /> swap_tile(e.e_newx,e.e_newy)<br /> elseif check_tile(bamboo,e.x_tile+1,e.y_tile) then<br /> move_right(e)<br /> swap_tile(e.e_newx,e.e_newy)<br /> elseif check_tile(bamboo,e.x_tile,e.y_tile-1) then<br /> move_up(e)<br /> swap_tile(e.e_newx,e.e_newy)<br /> elseif check_tile(bamboo,e.x_tile,e.y_tile+1) then<br /> move_down(e)<br /> swap_tile(e.e_newx,e.e_newy)<br /> else<br /> --if no bamboo then moves in<br /> --a random direction<br /> if r==1 then<br /> move_left(e)<br /> elseif r==2 then<br /> move_right(e)<br /> elseif r==3 then<br /> move_up(e)<br /> elseif r==4 then<br /> move_down(e)<br /> end <br /> end <br /> end</p> <p>--bind enemies on map and set<br /> --offset for wall collision<br /> if can_move(e.e_newx,e.e_newy) then<br /> e.x_tile=mid(mapx,e.e_newx,mapx+15)<br /> e.y_tile=mid(mapy,e.e_newy,mapy+15)<br /> else<br /> e.off_x=e.off_x/4<br /> e.off_y=e.off_y/4<br /> sfx(0)<br /> end<br /> end <br /> end <br /> end</p> https://www.lexaloffle.com/bbs/?tid=144253 https://www.lexaloffle.com/bbs/?tid=144253 Sun, 15 Sep 2024 17:06:48 UTC Defender of Coryx VII <p>I found Pico-8 a few months ago (I've been living under a rock), and I've been having a blast learning it's particular brand of Lua. After nights and weekends of watching <a href="https://www.lexaloffle.com/bbs/?uid=16423"> @Krystman</a>'s Beginner Shmup Tutorial, this is the result. The code is clunky and not optimized at all, but I feel it's a &quot;minimum viable product&quot;. Let me know what you think. Any advice is greatly appreciated.</p> <h2>Changelog:</h2> <pre><code> -Updated Sidewinder enemy behavior -Fixed Fly enemy spawning locations so they no longer overlap -Added text indicators for random enemy spawns (investigating less intrusive replacement) -Minor bug fixes </code></pre> <h2>Defender of Coryx VII</h2> <p>The Va'nals Empire is sweeping through the galaxy, conquering system after system with their fleet of vat-grown bio-mechanical spacecraft. The peaceful people of Coryx VII have never known conflict or war, and are woefully unprepared to face the Va'nals' threat. In a last ditch effort, the greatest minds of Coryx VII gathered together and created the prototype starship X2-SLP &quot;Slipstream&quot;, to be piloted by a brave volunteer. Drawing its power from the dreaded bio-mech ships themselves, the Slipstream may be the people of Coryx VII's only hope. Take the controls of the Slipstream, and defend your people!</p> <p> <table><tr><td> <a href="/bbs/?pid=153631#p"> <img src="/bbs/thumbs/pico8_coryxvii-3.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=153631#p"> coryxvii</a><br><br> by <a href="/bbs/?uid=101688"> Tw1zTeD616</a> <br><br><br> <a href="/bbs/?pid=153631#p"> [Click to Play]</a> </td></tr></table> </p> https://www.lexaloffle.com/bbs/?tid=144001 https://www.lexaloffle.com/bbs/?tid=144001 Mon, 02 Sep 2024 00:02:26 UTC Lazy Devs Shmup Tutorial <p>I've been following the basic shmup tutorial from <a href="https://www.lexaloffle.com/bbs/?uid=16423"> @Krystman</a> and Lazy Devs (with some adjustments) to try and learn some more of the basics in Pico 8 and Lua and game development in general after pretty much failing miserably at my first game attempt (still working on it tho.) Before finalizing enemy behavior and the spawning (my difficulty is still wildly inconsistent), I wanted to work on the boss explosion, but I've run into a bug I can't seem to figure out. I can't get the timer to delete the boss after the cool explosions to actually count down. I've set the boss HP low and the wave to the final one for testing if anyone can help me out understanding what I've done wrong here. I'd also appreciate any advice anyone has regarding creating a proper scaling difficulty.</p> <p> <table><tr><td> <a href="/bbs/?pid=153072#p"> <img src="/bbs/thumbs/pico8_coryxvii-1.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=153072#p"> coryxvii</a><br><br> by <a href="/bbs/?uid=101688"> Tw1zTeD616</a> <br><br><br> <a href="/bbs/?pid=153072#p"> [Click to Play]</a> </td></tr></table> </p> <p>I've uploaded the current version for playtesting. I'd appreciate any feedback on how to improve difficulty scaling while still somewhat maintaining the RNG feel.</p> https://www.lexaloffle.com/bbs/?tid=143802 https://www.lexaloffle.com/bbs/?tid=143802 Thu, 22 Aug 2024 04:42:33 UTC Help with player movement after updating the map <p> <table><tr><td> <a href="/bbs/?pid=151824#p"> <img src="/bbs/thumbs/pico8_tadizihoma-0.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=151824#p"> balloon_game</a><br><br> by <a href="/bbs/?uid=101688"> Tw1zTeD616</a> <br><br><br> <a href="/bbs/?pid=151824#p"> [Click to Play]</a> </td></tr></table> I'm having trouble with my player movement after my map updates. My map seems psuedo-randomize after the 1st screen like I want (I can tinker and fix this later). The trouble I'm having is that my player won't continue moving upwards after the map redraws and resets your position. Essentially every screen seems to treat the lower half as if it's the first screen ie running the collision detection on sprites that don't seem to be there. I'm stumped. Any help would be much appreciated.</p> https://www.lexaloffle.com/bbs/?tid=143329 https://www.lexaloffle.com/bbs/?tid=143329 Sat, 27 Jul 2024 00:55:38 UTC Collision detection is working on only three sides <p>Like the title says, I have rudimentary collision detection on the top and sides of my sprite but not on the bottom.<br /> I'm very new to game dev, but I have some experience in python. I can't see if I have a typo, or I've made a mistake in following the tutorial I watched. </p> <p>--player--<br /> function create_player()<br /> player={<br /> state=&quot;normal&quot;,<br /> sprite=1,<br /> health=4, <br /> x=64,<br /> y=82,<br /> h=8,<br /> w=8,<br /> gravity=0.30,<br /> friction=0.15,<br /> inertia=0,<br /> thrust=0.80<br /> } <br /> end</p> <p>function collide(o)</p> <p> local x1=o.x/8<br /> local y1=o.y/8<br /> local x2=(o.x+7)/8<br /> local y2=(o.y+7)/8</p> <p> local a=fget(mget(x1,y1),0)<br /> local b=fget(mget(x1,y2),0)<br /> local c=fget(mget(x2,y2),0)<br /> local d=fget(mget(x2,y1),0)</p> <p> if a or b or c or d then<br /> return true<br /> else<br /> return false<br /> end<br /> end</p> <p>function move_player(o)<br /> o.y+=o.gravity --applies player gravity</p> <p> local lx=o.x --last x pos<br /> local ly=o.y --last y pos</p> <p> if (btn(❎)) o.y-=o.thrust --player move<br /> if (btn(⬅️)) o.x-=0.5<br /> if (btn(➡️)) o.x+=0.5 </p> <p>--if the player collides, moves back </p> <p> if collide(o) then<br /> o.x=lx<br /> o.y=ly<br /> end<br /> end</p> <p>function ani_player(o) <br /> if btn(⬅️) then --player animation<br /> o.sprite=2<br /> elseif btn(➡️) then<br /> o.sprite=3<br /> else<br /> o.sprite=1<br /> end<br /> end </p> <p>function draw_sprite(o)<br /> spr(o.sprite,o.x,o.y)<br /> end</p> https://www.lexaloffle.com/bbs/?tid=143293 https://www.lexaloffle.com/bbs/?tid=143293 Wed, 24 Jul 2024 04:54:02 UTC Pico 8 Noob question re: level design <p>Sorry if this is a completely dumb question. I'm new to Pico 8 and game dev in general. I'm stuck in my first project attempting to randomize map layouts. My game is a simple vertical scrolling game where the player moves from side to side to avoid obstacles. I'd like to begin on one screen, and then end on a final screen with the ones in between being a random selection from the 12 or so other screens I've drawn. I know the easiest way to do this is probably with nested tables, but I'm having trouble understanding how I could accomplish this. Any help would be awesome.</p> https://www.lexaloffle.com/bbs/?tid=143255 https://www.lexaloffle.com/bbs/?tid=143255 Mon, 22 Jul 2024 00:06:31 UTC