1.1 update:
- Code optimisation
- Muted alert sound for low fuel/ammo
- Reinstated original title screen (much better!)
- Added btn(5) X as alternative acceleration button for those using joypads/sticks.
My third little game - an arcade racer / shooter a bit like RoadBlasters, which was a favourite of mine as a kid.
Up = Accelerate
Down = Brake
Left/Right = Turn left / right
Z = Shoot
X = Alternative accelerate
Hope you enjoy it. Don't bother asking for improvements, I'm at the token limit :D On to the next thing!

Hey everyone, this is a game based on a concept from ProJared's play-through of Game Dev Tycoon on Youtube.
You can watch when he comes up with the concept here (until about 3:00): https://youtu.be/MfYSxA8psDw?t=98
After watching the series I thought it would be fun to take one of the concepts and run with it as my first attempt at using Pico-8. This is the result. Let me know what you think!
In Great Bee, you play a bee that have to forage all the flowers in every level. The frog and the sun are your enemies. Colliding with them kills you. The sun is moving slowly, but the frog is accelerating over time. The sun can also be helpful because when it touches a flower, it will turn it into a strawberry. When you eat a strawberry, you become a super bee for a few seconds and you can slap the frog to reset its speed.
If you are interested in following my work, here are a few links:

Hi there,
I'm looking to make a procedurally generated level using chunks of the map (16x16 cells per chunk).
I've basically added a random number from 1-3 (the amount of chunks i currently have made) into a table, which I'm then calling later with a for loop and the map function.
Something's not going right, the chunks are completely out of whack :(
There's some initial code in the _init at the top for the table, but the problem (I think), lies in the _draw code at the bottom (clearly labelled as problematic).
Any clues?
Cheers
Tim

This is a short snippet showing how the water reflection effect is implemented in Pilot8.
Here is the code:
local g_rnd=nil
local g_clk=0
function _init()
init_rnd()
end
function init_rnd()
g_rnd={}
for i=1,64 do
add(g_rnd,flr(rnd(32)))
end
end
function _update()
g_clk+=1
end
function render_water(water_y)
local addr_w=0x6000+64*water_y
local addr_r=addr_w
local rip_c=0x11
memset(addr_w,rip_c,64)
for y=water_y+1,127 do
addr_w+=64
addr_r-=(y%2)*64
local offset=1+(flr(g_clk/4)+y)%#g_rnd
local prand=g_rnd[offset]
if 0~=band(prand,30) then
memcpy(addr_w,addr_r+prand%2*64,64)
else
memset(addr_w,rip_c,64)
end
end
end
function _draw()
cls(0)
map(0,0)
print("pilot8 water effect",
band(g_clk,127),88,7)
render_water(96)
end
|
[cart]89504e470d0a1a0a0000000d49484452000000a0000000cd08060000003fa57ba9000008b6494441547801ed9da18f63d7f986dff7fb9c6a54b420207f4060aa6eaa85050101050b1604a4ea48b52a4b1d10585855010105810316b892ab8eaa828080828205fb076cabd14f3f1850501050b020aa02ecf3b5a36bcf7a673d335e8f3df68c9fc7b27ccff53de79efb9ee77e877a3038d28ce168349e1da732269ab4f33ff78894348994da449214e1687253bba771389535f1442a4b1161354955d55c0a4748925a5b4f00837ebf777eeb9980c3d1683ce81f6e6bc13d71966a2287435592a4b2cbadbcee007650f8f3e757d8965c52fd6fad741f9f7f383a3997d083c191867ffcd3f8d7bffcb92752cd0760c96aa5fb2ec06b5c78fe6ad5ee7d059c2f8652c8ddcb2fa9d4ba62b02909addec1d62a1fec37c3d189bad206b0ad0d8708000157e4e9f05b561001b724dfa3a1f472a8a7479fb28a0878cbf27dfe5cfa745afddeff404f1f7ccc4a22e0ed71f4f947eabdfc9924e9f79f3fd7d1cb67ace4be0af8f4cb2f5efb5e76eee2f9abfa2f738fc1178ff4c1b377f5cfefeea67c8f3ffee8ad7ee7fbcdbe8bdaf3e72e6b5f35dea2ff16b5afea776b02ce6438facd6f5faf5073edd9f1fcb58bce5d5bf5e6facdf8e9df8ef6b26afcf5d9f3378e67bf8f3ffe487f7df6fc8df6b2e3cdcbf6b6e3ac426f1d835c56b9d621f67c5585d7abe74dfbcecbb5ea8b70d30ab8160197a960371def62d5bc8f225dd7beaa62ad523dd729d256b6e0652ae245619e7ef9c5c273d789bca81f55efd5f9d9ef4ca6f9ebafdb3e2f5ebbea38ab60f50ec683fe21fb1adc3ac3d1c9662a20c056b7600004040404404040400004849da47793cec3d109098206fdc3ed08a8330bc7dfb3027b5dc20ed882e1ee82808080808000080808088080808000080808088080808000080808088080808000080808088080808000080808088080808000080808088080808000080808088080808000080808080808808080800008080808808080800008080808808080800008080808808080800008080808808080800008b802b61496d2b24cfb76db4120b0d5d75fbd83f1a07fb852e7e1e8441a7f7f2f62900a1b5649a377a09bf87327b6e0cd97a9bb25dfa6f3b8cd34d622e07d0a843c6e378fb5088820e4b16a1e3bb90523c8fee4b1928008421eebca63250111843cd695c74e6cc108b2bf79f4960d649393be8b82cce63c7ef9edf5213f786f6ff2785b96aa805490abf3e83d78affb1e1fa9f7dde357edb7146f1f2bea56b6e0fbb6c58c47dd57fd7f69fcec85c623e92f4f1eb1e5ae2ae03e07b26a1e5f7dfd48e3672ff4d5d79d789f3c79b1b484fbbcc32c14902df7edf2f8eaeb47fae4c98b73f16612b2e5eec816bcaf15752625795c23208120c8b6f20802b9b920976dbbbd3e2fcc75f43615c82627bd732fcc936ff5c9937921bbdff1cb3dcde32dfc0802b95905e93d78efda2f3bcce57e6c4440b618f25896b5088820e4b16a1e6b111041c863d53c76720b4690fdc963250111843cd695c74a02220879ac2b8f9dd88211647ff3584a4004218f4de5b1948008421e9bca632b5bf07c2019a1503a6336959495e7f372488e9432a5b41cddb49ddd7f4a2b6c59963324599192d256a61c29db7274ff4996150a4dcf652aa4e93539bd2e9473fd6c2b24458422f2d51384951992ed5476f795a7b14ec749c9caf376584aa514969cca70f768198e6eca8a0c6576f3c9b432d38eae3d9db99cd96570fe998e6b4de71411ea9e61b6d03ebf772a332567d8d3316c5929bbbb36b3cb49b2d3d3df94439ede779afd34d1e9bd1d0e4744373f75eb65cd724b67c4f474976b3a7ef0bb473ff9b12aaca8922214b64aa588941daab24225cd261b2195f48fd3ff9334e95e81b0243ba27b7447751977b1779fecce35c9e970498ab05ccdad244728a3a94256758f5e15524d9c8aacd664a5a5a608ab9a9cca6cd594ee7e9d11adb954e5b4b35593221c552a9733239b9a22239b4a5115cd2e9dad6955b62ad9e1a68933a6d74851b6ec72959d922bc2678b5e65abca529522d45d1c92eaec8f6c91ca2a2bca59e1ca50c54476e84cc956a590d55ab9bafcd45ad85552d94dead268527559750b7dfed2941da1b2edeade8a2ed8ea5ecce8a28cb45a0b2bca727394545639c28a5255379a55b266f72a87a3ba48a2d43a3f9bb354a1a8b2e29df8f0c31f552994592a47c8a598282ba568112da62523549d7b518a167f3ffd7f39def9e1f857fd5f746f71295a543b5bfa6a2a95e43371ab55b54eb270596557abfac3e8cfa5fa8f55670a855c13c929abb94dcae9688a929a5d9d30153151c9d6c49254567353d8d1aad94ab9d4ca8aaa8932349994958aacaa497393a6168753aa8926776c43bc67f40e34e81faed475383a91d53b18df64008dbf67111070657f8204619b2020202020200002020202202020200002020202202020200002020202ac951e11ec06e391a4c7ef778bf2ee375440d88e7c9234fef7ab63040440404040800dd023821d5884be341e7d233d7ebf6bbffb0d02c2ed4b28ed8f786cc1808000080808080808808080800008080808808080800008080808808080800008080808808080800008087797decd47382045d88e8083fe2109025b30202000020202022020202000020202022020ec2ebd9b743e3d3d2541d0c3870fa980c0160c8080808000080808088080808000080808088080808000080808088080808080800008080808808080800008080808b0597aeb1ae8b3cf3e3b3f3e3e3e7ea33d7fcd65edabc6bbea9e8beeb7aef6fcbdafba1fec40059c5f88d9f1bc6cc7c7c76fb4971d6f917cf3e32dbafeaaf92cfbff4cb4cbee877c3b24e07c5558a5efecbbea7817afbf4ef2655e824d3d2f6ca802aebaa0b3be5755b4b7a9c08bb6ca45d7df4472aadf8e09b868a166bfb3c5be58e1aeab50d7c9b3ae2a7471be9755d445551b56c7ea1d8c07fdc3953a9f9e9e9220e8e1c3872bf51b8e4e36570101b6ba05032c436f1ba51760383ad1a0dfef5101616bf2b105c356e54340d8aa7c08085b950f0161abf221206c553e498a41bfdf1b8e4e480a6e5dbef30a8884b00df924e9fc824ec2d198e8f60b4baae9915d0aa52735e94edd8065e43be3bf793c60969abdfde800000010744558744c6f6465504e47003230313130323231e359b6c10000000049454e44ae426082
Hi,
Coroutines are an essential part of my game engines.
However, I don't get how I can do both:
- raise an error when something bad happens
- silently handle proper coroutine termination
coresume returns a pair (is running,exception).
Thing is exception is set even during normal termination!!
note: costatus doesn't help as it immediately flips to "dead" when the coroutine crashes.
Something like that doesn't work, e.g. I get an assert even after genuine termination:
local co
function _init()
co=cocreate(function()
for i=1,10 do
yield()
end
-- syntax error test
-- i=k/10
end)
end
function _update()
if co then
local r,e=coresume(co)
print(costatus(co))
if not r then
if(e) assert(r,e)
-- never reached
co=nil
end
end
end
|
Hey this is the platformer engine that i created
i will be happy if i can help
more happy if you can help
Only thing wrong about the code is i got verticalspeed and horizantalspeed variables mixed up
so 'vsp' vertical speed is left and right 'hsp' horizantal speed is up and down
download the code here from
githubIt's been a while since I've made a game so I'm running into questions I probably had answers previously...my apologies if this is a rerun.
I typically use a table for each type of object - enemies, bullets, powerups, etc. - and then loop over each table checking to see if the collide or whatever. Something like...
for bk,b in pairs(bullets) do
for ek,e in pairs(enemies) do
if collide(e,b) then ...do something... end
end
end
|
And then there could be several of these depending on which objects interact with each other.
But I've also seen where you use one table for all objects and then check object types to see if they should interact.
for bk,b in pairs(bigtable) do
for ek,e in pairs(bigtable) do
if e.type==1 and b.type==2 then
...do something...
end
if e.type==3 and b.type==4 then
...do something...
end
end
end
|





9 comments


