This is a slightly changed of the original made by me Sam (I made an account for my self).
The Original was made in a camp called Digital Monkey with help by Greg and Matt.
If you would like to use this weapon in your game, I highly recommend making your own music for the gun due to how much space the song in the gun takes, and there is a limit for uploading to voxatron.
Feel free to remix but please credit me.
Original Post Here

At long last, the game is finally done!
Before you play: Dank Tomb is a pay-what-you-want title, which means that if you prefer to play it for free, it's perfectly okay to do so. But I'd really appreciate it a lot if you choose to pay for it through itch.io, or support my future work on Patreon! Supporters get bonus stuff as a thank-you from me: an expedition journal with additional story for Dank Tomb and access to unminified PICO-8 source code for the game ($5+).
Enjoy the game, and let me know what you think! A lot of blood, sweat, tears and elbow grease went into making this game, so I hope you'll have as much fun playing it as I had making it!










PICO-8 uses the discrete GPU on mac laptops; this uses a lot of power on battery.
@zep, could PICO-8 use the integrated graphics instead of the discrete GPU?
I really hope this change is compatible with PICO-8, I would really like to use it on battery and still have decent battery life. PICO-8 seems lightweight otherwise.
THANK YOU!
Resources I found on this topic:
This is a link to how GLFW sets up an OpenGL context on the integrated GPU on macOS
https://github.com/glfw/glfw/blob/master/src/nsgl_context.m#L173
In SDL2, I added those two attributes used in the GLFW source to the NSOpenGLPixelFormat init call found in
"src/video/cocoa/SDL_cocoaopengl.m"
This caused all of the example apps in the Xcode "SDLTest" project in the SDL2 source code to use the integrated graphics, the attributes being: "NSOpenGLPFAAllowOfflineRenderers" and "kCGLPFASupportsAutomaticGraphicsSwitching"
Here is the partial change from the SDL source tree (missing adding attribute "kCGLPFASupportsAutomaticGraphicsSwitching"):
https://hg.libsdl.org/SDL/rev/fb4e35d0d523
(edited to a single post for easy reading, thanks @PixelBytes)





This is the demo "2 and 1/2 Men" by Alcatraz, released on 22.07.2017 at Nordlicht 2017 Demoscene party. It was voted 3rd place in the wild demo competition.
Credits:
Code - Virgill
Gfx - CONS
Music - Slimey
This is not a game, but a demonstration of visual effects, accompanied by graphics and music.










Hi,
Some keys usually used for entering notes behave strangely in the pattern editor. I'm using a french AZERTY keyboard (https://en.wikipedia.org/wiki/AZERTY), with pico-8 0.1.10c on Windows 7 64 bits.
- The upper 6/- key, used for upper G# note, also decreases current pattern. That means if you don't pay attention to what's happening on the screen, you wind up spreading G#s on multiple patterns.
- The ?/, key, right to N, used for lower B note, also decreases tempo
Unless you vow to never use those notes, it really makes composing a painful process.

This is a remake of an intro I wrote for the ZX Spectrum, but I added some music given how nice the music editor is for PICO-8.
This is my first attempt at demo effects and/or music on the PICO-8, so any feedback would be appreciated. Thanks!
PICO-8 rules!
Not to be confused with Paul Nicholas' wonderful The Ballz are Lava!
Hit the boxes with your balls to break them, don't let the boxes touch the floor!
Another demake of another mobile game, I guess that's what I do now. Try the original Ballz on iOS and Android - it's pretty fun!










*Edit July 28
I've been happy with this little cave-generator that i made. I might want to use some of it for Ludum Dare this weekend, so I am releasing the current code under the creative commons license.
You can try playing it now! it takes a few seconds to generate a level. There is no "win" state currently, but i envision a game where you have to avoid obstacles, collect stuff, and climb to the top of the cave.
I am using the algorithm i describe below, with a few improvements. If the cave that gets generated is "empty," which would make it impossible to climb, the algorithm will stick some bridges and ladders to climb into the structure. This process is dynamic, so if the cave is dense fewer will generate. Likewise, if you have a very dense cave, there is a safety-check that will make sure the cave can be completed by punching holes through blockages.
If you are interested in using some of this code and have questions, please let me know. The level-generation is almost entirely separate from the character code, so you can choose one or the other. If you are interested, I recommend looking at the callback functions (_init, _update60, and _draw) to understand the basic flow first. There is a lot of code here, about 3500 tokens, but most of it is lumped in the level generation and can be kept as is.
I imagine this being useful for quickly banging out a metroidvania or something along those lines. I hope you enjoy!
-PBG
Howdy,
I recently started making a little game about a critter who falls into a cave and has to climb out. I wanted to create a big world, but I didn't want to actually design it, so i wrote a little script to generate a large cave-like structure.
The algorithm is pretty slow - it is based on a paper i read in grad school (but cannot remember) for modeling the nucleation and growth of particles in solution. I start with an empty space (64x128 array of zeros) and first create walls by making all of the border values 1. Then, I 'seed' the space by randomly selecting a fraction of the array locations and setting them to 1. I then run a kinetic-monte-carlo simulation. Every step, every single '1' in the array a small chance that it will attempt to move 1 space in a random direction. In chemistry, this represents the random movements small particles or even molecules will make in solution, brownian motion.
If a '1' element in the array is next to another '1', a stickiness factor is applied, making it harder for the element to move away - this encourages the growth of clusters. it is possible to modify this stickiness factor to create more spherical shapes, long shapes, etc. I could also seed the space with regular shapes like boxes or lines and use this algorithm to make them appear more organic.
Anyways, in the demo above, you can watch the simulation run - as it runs, you can see clusters forming. It usually takes me about 4000 frames before the level looks nice (i need to speed up the code!). There's actually a game here too - press z to hop into the caves and explore!
I cooked this up pretty quickly, and I really like how it looks. I will definitely flesh this out into a full game, but I thought this was a fun little demo so I decided to share.
Thanks!
PBG




Hi,
I was hoping someone might be able to help me with a 'newbie' question please.
I want to be able to move a mouse pointer around, and then when the mouse is clicked, record the x and y position and place a sprite in that position. The next time the mouse button is pressed, a second sprite is displayed at the new mouse position, and then finally, a third upon another mouse button click. Further mouse button clicks will then re-position the first sprite and so on......
This should leave 3 sprites on the screen, and record their positions.
The current code does this, and displays the x/y position of each sprite. The problem I have is that a single "mouse click" event is hard to make and the code loops round very quickly making discrete sprite positioning difficult.
Can anyone please suggest a way to remedy this?
Any help would be much appreciated.
Kind regards,
Paul :-)



function _init()
p={n=16,x=64,y=64,hb={x1=1,y1=1,x2=7,y2=7}}
tree = flr(rnd(9)+1)
treepos = {}
for i=1,tree do
add(treepos,flr(rnd(220)))
end
end
function _update()
if btn(0,0) then
p.x-=1
p.n=17
end
if btn(1,0) then
p.x+=1
p.n=16
end
if btn(2,0) then
p.y-=1
end
if btn(3,0) then
p.y+=1
end
end
function _draw()
cls()
for i=1,16 do
for j=1,16 do
local x,y = 8i,8j
spr(1,x-8,y-8)
end
end
rndtree()
spr(p.n,p.x,p.y)
camera=p.x,p.y
//error-----------------
//for i=1,tree do
//if treepos[i]!=0 then
//rect(treepos[i]-2,treepos[i+1]-2,treepos[i]+10,treepos[i+1]+10,8)
//end
//if p.x==treepos[i] and p.y==treepos[i+1] then
//print(i,treepos[i],treepos[i+1],8)
//end
//end
//error-----------------
print(treepos,0,y)
end
function rndtree()
for i=1,tree do
spr(2,treepos[i],treepos[i+1])

