TheDevNate [Lexaloffle Blog Feed]https://www.lexaloffle.com/bbs/?uid=85322 GL2D (ALPHA) <h1>GL2D (ALPHA)</h1> <p>This library is for simple 2D game making, it has sprites + sprite variables, global variables, Position and scale objects (named PSIZ) and a collision system.</p> <p>Features:</p> <ul> <li>Sprites</li> <li>Sprite Animations</li> <li>Sprite Variables</li> <li>Global Variables</li> <li>Easy Printing</li> <li>Collision (automatic)</li> <li>Particle</li> </ul> <p>WIP Features:</p> <ul> <li>None</li> </ul> <p>Tutorial:</p> <ol> <li>Add GL2D.lua file to you project folder</li> <li>Paste the GL2D code in that previously created Lua file</li> <li>Add &quot;#include GL2D.lua&quot; to your main project script</li> </ol> <p>Example Game:<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;"> <table><tr><td> <a href="/bbs/?pid=138786#p"> <img src="/bbs/thumbs/pico8_supershotv4-9.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=138786#p"> Supershot 4.0.12c</a><br><br> by <a href="/bbs/?uid=85322"> TheDevNate</a> <br><br><br> <a href="/bbs/?pid=138786#p"> [Click to Play]</a> </td></tr></table> </div></div></div></p> <p>Library (CODE)<br /> <div><div><input type="button" value=" Show " onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = ' Hide '; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = ' Show '; }"></div><div><div style="display: none;"></p> <div> <div class=scrollable_with_touch style="width:100%; max-width:800px; overflow:auto; margin-bottom:12px"> <table style="width:100%" cellspacing=0 cellpadding=0> <tr><td background=/gfx/code_bg1.png width=16><div style="width:16px;display:block"></div></td> <td background=/gfx/code_bg0.png> <div style="font-family : courier; color: #000000; display:absolute; padding-left:10px; padding-top:4px; padding-bottom:4px; "> <pre>-- DOCS - General -- game.register(gameid) - nil -- game.update() - nil -- game.render() - nil -- DOCS - Variables -- variables.get(variableName) - nil -- variables.set(variableName, value) - nil -- variables.increment(variableName, by) - nil -- variables.decrement(variableName, by) - nil -- DOCS - Sprite Variables -- sprite.getvariable(spriteName, variableName) - nil -- sprite.setvariable(spriteName, variableName, value) - nil -- sprite.incrementvariable(spriteName, variableName, by) - nil -- sprite.decrementvariable(spriteName, variableName, by) - nil -- DOCS - PSIZ(s) -- psiz.create(x, y, width, height) - PSIZ -- DOCS - Sprites -- sprite.create(spriteName, picoSpriteId, PSIZ, collide) - string -- sprite.updatepsiz(spriteName, PSIZ) - nil -- sprite.changepsiz(spriteName, PSIZ) - nil -- sprite.get(spriteName) - Sprite -- sprite.render(spriteName) - nil -- sprite.renderall() - nil -- sprite.updateall() - nil -- sprite.registereventhandler(spriteName, function(type, me, hitobject)) - nil -- DOCS - Animations -- NOTE: this only supports frames made with a sprite number -- animation.create(animationId, arrayOfFrames) - string -- sprite.playanimation(spriteName, animationId) - nil -- DOCS - Printing -- game.printw(string) - number -- game.printc(string, x, y) - nil -- DOCS - Collision (automatically done by game.updateallsprites()) -- game.collidecheck(object1, object2) - bool -- DOCS - Frames -- frame.create(spriteId, framesShown) - frame -- frame.createwithpsiz(spsiz, framesShown) - frame -- DOCS - Particle -- particle.create(arrayOfFrames, PSIZ, framesPerParticleFrame) - particle -- particle.renderall() - nil -- particle.updateall() - nil -- Code game = { id = &quot;unknown&quot;, sprites = {}, variables = {}, } enum = { eventtype = { collision = 0 } } function game.register(id) game.id = id end function game.update() sprite.updateall() particle.updateall() end function game.render() particle.renderall() sprite.renderall() end -- variable get/set/increment/decrement variables = {} function variables.get(tableid) return variables[tableid] end function variables.set(tableid, value) variables[tableid] = value end function variables.increment(tableid, value) variables[tableid] += value end function variables.decrement(tableid, value) variables[tableid] -= value end -- spritevariable get/set/increment/decrement sprite = {} function sprite.getvariable(tableid, variableid) return game.sprites[tableid].variables[variableid] end function sprite.setvariable(tableid, variableid, value) game.sprites[tableid].variables[variableid] = value end function sprite.incrementvariable(tableid, variableid, value) game.sprites[tableid].variables[variableid] += value end function sprite.decrementvariable(tableid, variableid, value) game.sprites[tableid].variables[variableid] -= value end -- psiz psiz = {} function psiz.create(x,y,w,h) local psiz = { x = (x or 0), y = (y or 0), w = (w or 8), h = (h or 8) } return psiz end -- sprites animations = {} function sprite.create(tableid, spriteid, psiz, collide) local sprite = { id = tableid, sid = spriteid, x = psiz.x, y = psiz.y, w = psiz.w, h = psiz.h, collide = (collide or false), eventhandlers = {}, variables = {}, animsid = spriteid, f = {}, cf = 1, upd = 0, tpf = 5, playinganim = false, update = function() local spr = game.sprites[tableid] if (spr ~= nil) then if (spr.playinganim) then local tpf = spr.f[spr.cf].t if (spr.upd &lt; tpf) then spr.upd += 1 else spr.cf += 1 spr.upd = 0 end if (spr.cf &gt; #spr.f) then spr.playinganim = false spr.animsid = spr.sid else spr.animsid = spr.f[spr.cf].sid end end end game.sprites[tableid] = spr end, destroy = function() game.sprites[tableid] = nil end } game.sprites[tableid] = sprite return tableid end function sprite.updatepsiz(tableid, psiz) local sprite = game.sprites[tableid] sprite.x = psiz.x sprite.y = psiz.y sprite.w = psiz.w sprite.h = psiz.h game.sprites[tableid] = sprite return tableid end function sprite.changepsiz(tableid, psiz) local sprite = game.sprites[tableid] sprite.x += psiz.x sprite.y += psiz.y sprite.w += psiz.w sprite.h += psiz.h game.sprites[tableid] = sprite return tableid end function sprite.get(tableid) return game.sprites[tableid] end function sprite.render(tableid) local sprite = game.sprites[tableid] if (not sprite.playinganim) then spr(sprite.sid,sprite.x,sprite.y) else spr(sprite.animsid,sprite.x,sprite.y) end end function sprite.renderall() for k,v in pairs(game.sprites) do if (v == nil) then goto skip2 end sprite.render(k) ::skip2:: end end function sprite.updateall() for k,v in pairs(game.sprites) do if (v == nil) then goto skip end v.update() if (v.collide == true) then for k2,v2 in pairs(game.sprites) do if (k ~= k2 and v2.collide) then if (game.collidecheck(v,v2)) then for v3 in all(v.eventhandlers) do v3(enum.eventtype.collision, v, v2) end goto skip end end end end ::skip:: end end function sprite.registereventhandler(tableid,handler) add(game.sprites[tableid].eventhandlers,handler) return tableid end -- animation + sprite extension animation = {} function animation.create(animationid, frames) local anim = { f = frames } animations[animationid] = anim return animationid end function sprite.playanimation(tableid, animationid) local anim = animations[animationid] local spr = game.sprites[tableid] spr.f = anim.f spr.cf = 1 spr.upd = 0 spr.playinganim = true end -- printing function game.printw(s) if #s == 0 then return 0 end w = 0 for i = 1, #s do if sub(s,i,i) &gt;= &quot;\x80&quot; then w += 7 else w += 3 end end return w + #s - 1 end function game.printc(s, x, y) print(s, x - game.printw(s)/2, y) end -- collision function game.collidecheck(obj1,obj2) local hit = false if max(obj1.x,obj1.x+obj1.w) &gt;= min(obj2.x, obj2.x+obj2.w) and min(obj1.x,obj1.x+obj1.w) &lt;= max(obj2.x, obj2.x+obj2.w) then if max(obj1.y,obj1.y+obj1.h) &gt;= min(obj2.y, obj2.y+obj2.h) and min(obj1.y,obj1.y+obj1.h) &lt;= max(obj2.y, obj2.y+obj2.h) then hit=true end end return hit end -- frame frame = {} function frame.createwithpsiz(spsiz, tpf) local frm = { psiz = spsiz, sid = nil, t = tpf } return frm end function frame.create(spriteid, tpf) local frm = { psiz = nil, sid = spriteid, t = tpf } return frm end -- particles particles = {} particle = {} function particle.create(frames, psiz) local id = #particles+1 local prticle = { x = psiz.x, y = psiz.y, f = frames, cf = 1, upd = 0, update = function() if particles[id] then prtcle = particles[id] frm = prtcle.f[prtcle.cf] up = prtcle.upd prtcle.upd += 1 if (prtcle.upd &gt; frm.t) then prtcle.cf += 1 prtcle.upd = 0 end if (prtcle.cf &gt; #frames) then prtcle.destroy() else particles[id] = prtcle end end end, render = function() if particles[id] then prtcle = particles[id] frm = prtcle.f[prtcle.cf] if (frm ~= nil and frm.sid ~= nil) then spr(frm.sid,prtcle.x,prtcle.y) elseif (frm ~= nil) then sspr(frm.psiz.x,frm.psiz.y,frm.psiz.w,frm.psiz.h,prtcle.x,prtcle.y) end end end, destroy = function() deli(particles,id) end } particles[id] = prticle return id end function particle.renderall() for k,v in pairs(particles) do v.render() end end function particle.updateall() for k,v in pairs(particles) do v.update() 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> https://www.lexaloffle.com/bbs/?tid=55371 https://www.lexaloffle.com/bbs/?tid=55371 Mon, 18 Dec 2023 17:58:25 UTC Supershot! <p> <table><tr><td> <a href="/bbs/?pid=138786#p"> <img src="/bbs/thumbs/pico8_supershotv4-9.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=138786#p"> Supershot 4.0.12c</a><br><br> by <a href="/bbs/?uid=85322"> TheDevNate</a> <br><br><br> <a href="/bbs/?pid=138786#p"> [Click to Play]</a> </td></tr></table> </p> <h1>Supershot!</h1> <p>Supershot, a space game! In this game, you try to survive the deadly space without falling too far away from the camera.</p> <p>Controls:</p> <ul> <li>Move Left/Right: ⬅️/➡️</li> <li>Shoot: ❎</li> <li>Look from back: 🅾️ (only in v3)</li> </ul> <p>Notes:<br /> This is a beta build of the game.<br /> Please don't play this game if you have motion sickness, I don't know if this can get people motion sick but this is just a warning.</p> <p>Supershot v2/v3: <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;"> <table><tr><td> <a href="/bbs/?pid=138786#p"> <img src="/bbs/thumbs/pico8_supershot-4.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=138786#p"> Supershot 3.0.13</a><br><br> by <a href="/bbs/?uid=85322"> TheDevNate</a> <br><br><br> <a href="/bbs/?pid=138786#p"> [Click to Play]</a> </td></tr></table> </div></div></div></p> <p>Supershot v1: <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;"> <table><tr><td> <a href="/bbs/?pid=138786#p"> <img src="/bbs/thumbs/pico8_supershotv1-0.png" style="height:256px"></a> </td><td width=10></td><td valign=top> <a href="/bbs/?pid=138786#p"> Supershot 1.0.0</a><br><br> by <a href="/bbs/?uid=85322"> TheDevNate</a> <br><br><br> <a href="/bbs/?pid=138786#p"> [Click to Play]</a> </td></tr></table> </div></div></div></p> <p>Change Log:<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;"><br /> 4.0.12c:</p> <ul> <li>Fixed a few more bugs.</li> </ul> <p>4.0.12b:</p> <ul> <li>Fixed a few bugs</li> </ul> <p>4.0.12:</p> <ul> <li>Added Sprite Animations (part of GL2D)</li> </ul> <p>4.0.11:</p> <ul> <li>Added Particles (part of GL2D)</li> </ul> <p>4.0.1:</p> <ul> <li>Cleaned up game library (GL2D)</li> <li>Fixed a few bugs</li> </ul> <p>4.0.0:</p> <ul> <li>Completely rewritten</li> <li>New game library (GL2D)</li> </ul> <p>3.0.13:</p> <ul> <li>Fixed a few bugs</li> </ul> <p>3.0.12:</p> <ul> <li>Added look at back (just for fun)</li> <li>Fixed a few bugs</li> </ul> <p>3.0.11:</p> <ul> <li>Unsuppressed pause menu</li> <li>Changed menu controls</li> </ul> <p>2.0.0:</p> <ul> <li>Rewrote game because of messy code<br /> </div></div></div></li> </ul> https://www.lexaloffle.com/bbs/?tid=55353 https://www.lexaloffle.com/bbs/?tid=55353 Sat, 16 Dec 2023 23:15:55 UTC