Ningow [Lexaloffle Blog Feed]https://www.lexaloffle.com/bbs/?uid=52526 I Wanna Be The Guy: The Demake <p> <table><tr><td> <a href="/bbs/?pid=96243#p"> <img src="/bbs/thumbs/pico8_nin_iwbtg-0.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=96243#p"> I Wanna Be The Guy Demake</a><br><br> by <a href="/bbs/?uid=52526"> Ningow</a> <br><br><br> <a href="/bbs/?pid=96243#p"> [Click to Play]</a> </td></tr></table> </p> <h3>I WANNA BE THE GUY</h3> <p><strong>the movie: the demake</strong></p> <p>this is still in pretty early in development(it only has up to tyson)<br /> but it's already fun enough to play and speedrun and stuff</p> <p>i plan on doing the whole game in the future along with a base-cart for people to make their own levels<br /> but i'm full of stuff to do rn so it might take a while</p> <p>anyway:<br /> expect updates</p> <h3>Empty Base-Cart</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 /> <table><tr><td> <a href="/bbs/?pid=96243#p"> <img src="/bbs/thumbs/pico8_nin_iwbtbase-0.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=96243#p"> nin_iwbtbase</a><br><br> by <a href="/bbs/?uid=52526"> Ningow</a> <br><br><br> <a href="/bbs/?pid=96243#p"> [Click to Play]</a> </td></tr></table> </p> <p>This is an empty base-cart for you to make your own levels<br /> it's still pretty rough, but for now it'll do<br /> </div></div></div></p> <h3>Plans moving forward</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> <ul> <li>Multi-Cart<br /> the bosses of IWBTG are GIGANTIC in sprites AND code. the next step going foward is to separate the bosses and heavy rooms(tetris) into their own carts that way we will be able to afford more accurate bosses without losing too much(only that cart loading time)</li> <li>Better Menu<br /> the game's menu is pretty basic rn, i plan on separating it into it's own cart and do some cartdata wizardry so that we have different saves and continues(i don't think this will be hard, just time-consuming)</li> <li>Level Loader<br /> as of now, the levels are taking a good ammount of map data, but IWBTG is a HUGE game and it won't fit whole into a single cart, the plan is to divide the map into sections and load these into the map memory as they're needed, but the method to do so is still being looked at as idk if i will have enough chars(or tokens lol) to do it the usual way once the whole game's code is in there, and i don't want to just multi-cart it.</li> <li>Friendlier code<br /> my code is a mess. i'll divide and reshape the code so that it's easier to understand and make your own levels while the base-cart isn't here</li> <li>Mike Tyson's Theme<br /> it's missing ;^;<br /> </div></div></div></li> </ul> https://www.lexaloffle.com/bbs/?tid=44315 https://www.lexaloffle.com/bbs/?tid=44315 Thu, 19 Aug 2021 22:36:19 UTC Tweet-a-sketch <p> <table><tr><td> <a href="/bbs/?pid=89936#p"> <img src="/bbs/thumbs/pico8_nintweetasketch-0.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=89936#p"> Tweet-a-sketch</a><br><br> by <a href="/bbs/?uid=52526"> Ningow</a> <br><br><br> <a href="/bbs/?pid=89936#p"> [Click to Play]</a> </td></tr></table> </p> <p>Simple Etch-a-sketch tweetcart in 233 chars</p> <p>Z and X -&gt; Up and down<br /> Left and Right -&gt; as self<br /> shaking is on the menu</p> <p>the cart:</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>s,j,x,y,r,b= 1,64,64,64,rect,btn menuitem(5,&quot;&and;&quot;,function()s=1end)::_::if s&gt;0then memset(24576,103,8191)s=0end x+=(b(1)and 1)or(b(0)and-1or 0)y+=(b(5)and 1)or(b(4)and-1or 0)pset(x,y,0)for i=60,j do r(j+i,j-i,j-i,j+i,8)end flip()goto _</pre></div></td> <td background=/gfx/code_bg1.png width=16><div style="width:16px;display:block"></div></td> </tr></table></div></div> https://www.lexaloffle.com/bbs/?tid=42286 https://www.lexaloffle.com/bbs/?tid=42286 Sat, 03 Apr 2021 21:53:14 UTC Firefly Sync Tweetcart <p> <table><tr><td> <a href="/bbs/?pid=89887#p"> <img src="/bbs/thumbs/pico8_frlytweetningow-4.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=89887#p"> Firefly Sync Tweetcart</a><br><br> by <a href="/bbs/?uid=52526"> Ningow</a> <br><br><br> <a href="/bbs/?pid=89887#p"> [Click to Play]</a> </td></tr></table> </p> <p>Random fireflies that procedurally syncs up in 270 Chr, not bad for a first tweetcart i guess?<br /> Ctrl+r to start again</p> <p>the code:</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>s,r,c=sin,rnd,pset p={} for i=0,200 do p[i] = {} for j=1,3 do p[i][j] = r(128)-64 end end::_:: cls()for i=0,200 do for j=1,2 do po=p[i] p[i][j]=(po[j]+r(2)-1)%128 end po[3]+=(po[3]&gt;p[flr(r(50))+1][3])and -0.1 or 0.1 c(po[1],po[2],1+s((po[3]/64)*t())%11) end flip()goto _ </pre></div></td> <td background=/gfx/code_bg1.png width=16><div style="width:16px;display:block"></div></td> </tr></table></div></div> https://www.lexaloffle.com/bbs/?tid=42272 https://www.lexaloffle.com/bbs/?tid=42272 Sat, 03 Apr 2021 00:21:50 UTC Best way to load/store a lot of data? <p>so, i'm planning on doing kind of a demake of rhythm heaven(with new minigames cuz, nintendo y'know?) but i don't think a single pico cart would be able to hold all music/sprites (i've only been able to hold 8 songs w/ pic-o-beat)<br /> i've been looking around and i saw some options but i have no idea on what would work better for me, this is what i found so far:</p> <p>compression: there's a lot of code about this here on the bbs that i find fascinating, but have zero idea on how it works to make it do the songs intead of the spritesheet</p> <p>load a cart per stage: have a main menu cart and load each stage in different carts, the loading isn't great but if it's the best way to do it its allright</p> <p>load only the music and spritesheet: i remember seeing this somewhere but i can't find it anymore, i imagine the loading would be quicker, and i could easily reuse mechanics between minigames but i have no idea on how to do it</p> <p>a ton of peeking and poking: have a main cart with all the song and sprite data that &quot;set up&quot; the data on a series of &quot;cartdatas&quot; that can be memcpy-ed at runtime. this would allow community submissions with, i imagine, little to no difficulty but would be really awkward for the user</p> <p>probably some really simple stuff idk about: if you know, please tell me</p> https://www.lexaloffle.com/bbs/?tid=42178 https://www.lexaloffle.com/bbs/?tid=42178 Fri, 26 Mar 2021 01:54:15 UTC PIC-o-BEAT v1.2 <p> <table><tr><td> <a href="/bbs/?pid=89423#p"> <img src="/bbs/thumbs/pico8_nin_pico_beat-2.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=89423#p"> PIC-o-BEAT</a><br><br> by <a href="/bbs/?uid=52526"> Ningow</a> <br><br><br> <a href="/bbs/?pid=89423#p"> [Click to Play]</a> </td></tr></table> </p> <h1>PIC-o-BEAT</h1> <p>PIC-o-BEAT is a rhythm game that <em>really</em> paints a picture</p> <h3>How to play?</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> <h2>1-Pick a beat</h2> <p>Choose a song from the 8 options with different style and speed to set your difficulty</p> <h2>2-Pick a pic</h2> <p>Choose a picture from the 48 available, they come in 3 sets: 8x8,harder 8x8 and 16x16</p> <h2>3-Paint!</h2> <p>Hit the notes as they get to the pointers, you can set your controls on the main menu:</p> <p><em>Control scheme 0:</em></p> <ul> <li>Directional - Yellow</li> <li>Z and X - Blue</li> </ul> <p><em>Control scheme 0:</em></p> <ul> <li>Z,Down,Right - Yellow</li> <li>X,Up,Left - Blue</li> </ul> <h2>4- Medals</h2> <p>If you get 100% you get a medal depending on your difficulty<br /> <table><tr><td width=0> <img src="https://www.lexaloffle.com/bbs/gfxc/52526_12.png" width=0 height=0> </td> <td valign=bottom> <a style="cursor:pointer;font-size:8pt" onclick=' var el = document.getElementById("gfxcode_52526_12"); if (el.style.display == "none") el.style.display = ""; else el.style.display = "none"; microAjax("https://www.lexaloffle.com/bbs/gfxc/52526_12.txt", function (retdata){ var el = document.getElementById("gfxcode_52526_12"); el.innerHTML = retdata; el.focus(); el.select(); } ); '> [0x0]</a> </td></tr> <tr><td colspan=2> <textarea rows=3 class=lexinput id="gfxcode_52526_12" style="width:640px;background-color:#fed;display:none;overflow:hidden; font-size:6pt;"></textarea> </td> </tr> </table> </p> <p></div></div></div></p> <h3>How it works?</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 /> <em>--bad code ahead--</em><br /> this is how the images are stored<br /> <table><tr><td width=0> <img src="https://www.lexaloffle.com/bbs/gfxc/52526_13.png" width=0 height=0> </td> <td valign=bottom> <a style="cursor:pointer;font-size:8pt" onclick=' var el = document.getElementById("gfxcode_52526_13"); if (el.style.display == "none") el.style.display = ""; else el.style.display = "none"; microAjax("https://www.lexaloffle.com/bbs/gfxc/52526_13.txt", function (retdata){ var el = document.getElementById("gfxcode_52526_13"); el.innerHTML = retdata; el.focus(); el.select(); } ); '> [0x0]</a> </td></tr> <tr><td colspan=2> <textarea rows=3 class=lexinput id="gfxcode_52526_13" style="width:640px;background-color:#fed;display:none;overflow:hidden; font-size:6pt;"></textarea> </td> </tr> </table> <br /> first the score then the texture right under<br /> the program first scans the top image to a buffer from a pointer to some pixels ahead</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> for i=0,17 do local posx, posy = ((point+i-2)%imgs)+imgp.x,imgp.y+flr((point+i-2)/imgs) if i==17 then if sget(posx, posy) == 10 then --is yellow scrbuf[i] = 1 elseif sget(posx, posy) == 12 then --is blue scrbuf[i] = 2 else scrbuf[i] = 0 end else scrbuf[i] = scrbuf[i+1] 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>we also update the pointer every 2 beats of the first sfx channel using stat(), this way the speed of the pointer follows the speed of the song (this method could be used to follow odd time signatures/rhytms by using %3 for example)</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> c2 = c1 c1 = stat(20) if c1 != c2 then if c1%2 == 0 then point+=1 readspr() else return false 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>if we press a key we check the buffer at the right spot to check if you got the note right<br /> if so, we paint a dedicated piece of the spritesheet with the right texture and set the buffer with a &quot;empty&quot; note<br /> if you press a wrong note, we also paint it with the texture but with offset colors, and put a &quot;wrong&quot; note on the buffer<br /> if you press on empty you paint the texture and set a &quot;not empty&quot; note</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> if inpa then if scrbuf[2] == 2 then sset(imgx,imgy,sget(posx,posy+imgs)) scrbuf[2] = 10 elseif scrbuf[2] == 1 or scrbuf[2] == -1 then sset(imgx,imgy,(((sget(posx,posy+imgs)+1)%15)+1)) scrbuf[2] = -1 elseif scrbuf[2] == 0 then sset(imgx,imgy,sget(posx,posy+imgs)) scrbuf[2] = -3 end elseif(...)</pre></div></td> <td background=/gfx/code_bg1.png width=16><div style="width:16px;display:block"></div></td> </tr></table></div></div> <p>Once the song ends we just check the score textures and keep count of the errors<br /> if black, is the end texture black?<br /> if B or Y, is the end texture and img texture the same color?</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>for i=0,imgs*imgs do local imgx, imgy = ((i)%imgs)+112,flr((i)/imgs) local posx, posy = ((i)%imgs)+imgp.x,imgp.y+flr((i)/imgs) if sget(posx, posy) == 0 then if sget(imgx,imgy) != 0 then errors +=1 end else if oneb == false then if sget(imgx,imgy) != sget(posx,posy+imgs) then errors +=1 end else if sget(imgx,imgy) != sget(posx,posy) then errors +=1 end end 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>and to do the medals you just peek and poke at the designated hex</p> <p>and that's basically the whole mechanic, to create &quot;expasion packs&quot; it's just a matter of drawing over the textures, or creating new music but i've drawn too much already lol<br /> </div></div></div></p> <h3>changelog</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 /> <em>V1.2:</em> bugfixes and optimizations</p> <ul> <li>removed &quot;ghost notes&quot; when replaying a pic</li> <li>removed bug where perfect would stop registering if you &quot;End Run&quot; then exit</li> <li>overall code optimization of 222 tokens</li> </ul> <p><em>V1.3</em> even more optimizations</p> <ul> <li>fixed bug where it wouldn't save more than one medal per session</li> <li>more code optimization of 213 tokens</li> </ul> <p></div></div></div></p> https://www.lexaloffle.com/bbs/?tid=42138 https://www.lexaloffle.com/bbs/?tid=42138 Wed, 24 Mar 2021 04:05:51 UTC Quartet for PICO-8 <p> <table><tr><td> <a href="/bbs/?pid=89058#p"> <img src="/bbs/thumbs/pico8_quartetnin-4.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=89058#p"> Quartet 1.02</a><br><br> by <a href="/bbs/?uid=52526"> Ningow</a> <br><br><br> <a href="/bbs/?pid=89058#p"> [Click to Play]</a> </td></tr></table> </p> <h1>Quartet for pico-8</h1> <p>A port (demake?) of the gba port of the flash game QUARTET<br /> -A fast paced puzzle game where you assemble faces to score</p> <h3>How to play?</h3> <p>Arrow keys - move the center piece to a window<br /> X/C - menu select</p> <p><strong>&bull;</strong> Assemble faces with 4 pieces<br /> <strong>&bull;</strong> Full faces are worth more<br /> <strong>&bull;</strong> If a piece try to move to a occupied space you lose a life<br /> <strong>&bull;</strong> If the timer runs out you also lose a life<br /> <strong>&bull;</strong> Try and clear the board for an extra life (5 Max)</p> https://www.lexaloffle.com/bbs/?tid=42033 https://www.lexaloffle.com/bbs/?tid=42033 Tue, 16 Mar 2021 18:22:44 UTC