So, election and holiday season both got pretty crazy up until last week. So most of my PICO-dev has been during lunch breaks and to/from work or in little spurts on days off. That said... I probably get about 16-32 sprites, or 4-8 screens of map writing done, maybe a function per toss. That said, a fair number of these can reuse some code I use, which is a good thing; because I can concentrate most of my code into one project, iterate it to working condition, then copypaste and adapt it to other carts. All things considered, I still wish I could've been getting more accomplished by now; maybe it's just impatience talking... I see a fair number of good carts being pushed, maybe that's the thing.
These include Concert of the Damned (really, I've only reworked the maps so far), 200x (pictured above... if 20xx was the proc-gen response to MegaMan X, this is me trying to do that with MegaMan Classic or Xtreme, if it were meshed with MM9's Endless Attack mode), Gentroid (same approach but more Classic Metroid inspired), a simply-titled "PlayThing" (just an experiment for learning various things in PICO-8; where I'm currently focusing my code for the time being), "Race to Riches" (a simple speed platformer inspired by David Newton's "Treasure Tower"), and "Shirley Nutt" (a nut-collecting demake of Sonic, but where you can shoot nuts forward to control space ahead of you, and with none of the asinine plot or buddies or loop-de-loops, or even bosses).
Matter of fact, I have two experimental "Playthings." XD I started one on my PC, and a second, different-but-similar sort of one on my PocketCHIP. There's some ground they have in common but I have to kind of match up the factors and really make one do something.
That's one "plaything's" spritesheet so far and here's the other:
The first is geared with more versatility in mind where the second is clearly more action-platformer based. I'm learning to toy with compound sprites in both cases, but in the first I'm trying to layer elements together to make more expressions, where with the second I'm playing with making more distinct "characters." Either way, I do feel like it's more prudent to utilize the map space to it's max more than the sprite space; but I do feel tugged between the two approaches.
I think I've gotten most of my movement code together. I still feel like, player-object nonwithstanding, I'm forgetting something... >.>
PS: It's not the globals, either. I have those stored seperately.
function shuf(t) local r=rnd assert (t,"shuf() expects table, got nil") local iterations=#t local j for i=iterations,2,-1 do j=rnd(i) t(i),t(j)=t(j),t(i) end end function p_run() local aframes=accframes local xmove=maxrun if (btnp(0)) facing=-1 if (btnp(1)) facing=1 if (btn(0)=1 and btn(1)=1) then (btn(0),btn(1))=(0,0) else if btn(0)=1 or btn(1) aframes-=1 else if btn(0)=0 and btn(1)=0 foreach aframes<accframes aframes+=2 end for a=1,aframes xmove*=fricrate end if (xmove>maxrun) xmove=maxrun player.x+=xmove*facing end function p_jump(jh or 0, jf or 0) if (jh=0) jh=jumpheight if (jf=0) jf=jumpframes local px=jh/(jf!) for j=-jf,999 ymove=px*j if(ymove>maxdrop)ymove=maxdrop j+=1 if(j>999)j=999 end function hitwall(_x,_y) if (checkspot(p.x,p.y,0)or checkspot(p.x,p.y+7,0) return true if (checkspot(p.x+7,p.y,0)or checkspot(p.x+7,p.y+7,0) return true return false end function hitfloor(_x,_y) if (checkspot(p.x,p.y,0)or checkspot(p.x+7,p.y,0)) return true if (checkspot(p.x,p.y+7,0)or checkspot(p.x+7,p.y+7,0)) return true return false end function checkspot(_x,_y,_flag) local tilex=flr(_x/8) local tiley=flr(_y/8) local tile=mget(tilex+levelx,tiley+levely) return fget(tile,_flag) end function bounce(obj,m,xdir or -1,ydir or -1) obj.xmove=m*xdir*2 obj.ymove=m*ydir if hitwall(obj.x,obj.y)=true then xdir*=-1 obj.xmove=m*xdir*2 obj.ymove=m*ydir else if hitfloor(obj.x,obj.y)=true then ydir*=-1 obj.xmove=m*xdir obj.ymove=m*ydir*2 end function movep() local oldx=p.x local oldy=p.y (p.x,p.y)+=(xmove,ymove) if (hitwall(p.x,p.y)=true) p.x=oldx if (hitfloor(p.x,p.y)=true) p.y=oldy end function maketarget(obj,scr,x,y,xrange or 0,yrange or 0,speed or 0,loop or 0) --x/y position relative to map obj.p.x=((scr\5)*16+x) obj.p.y=((scr/5)*16+y) --set sine motions to control local movex=2*sqrt(xrange)*speed local movey=2*sqrt(yrange)*speed --reverse direction! if (movex=xrange or movex=-xrange or xrange<0) movex*=-1 if (movey=yrange or movey=-yrange or yrange<0) movey*=-1 --diagonals or curves if loop=1 then movex=xrange elseif loop=-1 then movex-=xrange end function collide(obj, other) if other.p.x+other.hitbox.x+other.hitbox.w > obj.p.x+obj.hitbox.x and other.p.y+other.hitbox.y+other.hitbox.h > obj.p.y+obj.hitbox.y and other.p.x+other.hitbox.x < obj.p.x+obj.hitbox.x+obj.hitbox.w and other.p.y+other.hitbox.y < obj.p.y+obj.hitbox.y+obj.hitbox.h then return true end end
PPS: I'm noticing I'm doing that bad, old C++/C# FOR looping, forgetting the add parameter! Oh, the joys of writing about three functions a week... :/
[Please log in to post a comment]