It's hard to say, but I'll not be able to release something on time.
I've been too ambitious, and I faced a problem that took too much time (and is still not solved).
However, even if I'll not be able to participate to this game jam, I'll go on on this project and try to finish it. And I'll release it when it'll be over.
(I don't have an internet connection when I can code, and I can't code when I have an internet connection, which makes solving problems difficult).
What I wanted to do: a "star fox"-like game. It would have contain enough "destroy this, destroy that" stuff to allow me to participate under the "destruction" theme.
What I wanted to have : a real game engine, which would have allowed people to make a greater game, with more assets, more enemies, more sprites ... more stuff. So, I needed performances. Going the "1 pass per object per material" wasn't an option.
What I have:
I can render the whole scene in one render pass. 3D objects are loaded from "obj" file, but share one mesh, one shader ... from the point on view of the graphic card, they ARE one object. I do one glDrawArrays to render them.
I can rotate and move each object individually, I of course I DON'T send all the datas every frame, I only send what changes. Basically, I store on each vertex an integer, which is a row in a texture which contains transformation datas for the object.
Behind, I need to have one compact mesh, no matter what object I add to (or remove from) my scene. When you only add elements, it's easy to have one compact mesh. But when you also remove elements, you need to fill the hole (by moving triangles definitions) and still keep trace of which triangle belong to which object.
But an obj will also use textures. I made an editor (in java) which allows me to edit a "database" (images, fonts and stuff) and then export them to c code. It does create an atlas + the code to autoload it to gpu + constants to know where each sub-image is in the atlas. So there is no need for libpng (but still need for zlib). The object is loaded, images are resolved against this atlas and in that way I can put correct datas on vertices.
But an obj use tex coords with ranges going outside of [0, 1] (to have auto tiles). So, I upload materials (of the mtl file) on the gpu, to correctly loop on sub-images.
I have a lua script integration. The idea was this one: star fox is basically a rail shooter (with an aircraft). So I need a way to script event. I use the term script as in a movie. "then do this, then after that many time to that" etc. This is what the script can do : create object, and issue orders to them. Each order will take a time to complete, and then the next order will be processed etc. An order can be "go there", or "change model", or "go in front of this other element", which will be used to pull enemies in front of the camera (even if the camera is moving, the enemy will perform its dance as if the camera would be standing still).
All of the, I have it. Except this last part in bold. It involves quaternions or matrixes.
What I DO NOT have
I still need a physic engine. However, I know exactly how to do it. I wanted to do it right after this script thing, but now it's too late.
I will go the easy road. The script (lua) will be able to define a physic shape to the element. The shape will be an stl file (which is not hard to parse but even poorer than an obj). I'll store the radius of the shape, and the maximum axis-aligned bounding-box (AABB). After that, the naive approach should be enough : first test if there is a sphere-sphere collision (easy) then test if there is an AABB collision (easy) then depending on the nature of the object, perform the correct test. It can be either ray-3dshape (if I am testing a laser vs a ship) or aabb-3Dshape or sphere-3Dshape, which is enough for player vs environment and player vs enemies.
I don't need anything more than collision detection (no collision response, torque or whatever)
I also need to solve this quaternion/matrix problem. I am really bad at this kind of stuff.
And, because we are talking of a starfox game, I also want and "explosion" order. The idea is as follow :
1/ take a random triangle of the model (easy, I have its definition).
2/ take a random point of the triangle (easy, it's interpolation between 3 points)
3/ add a sprite there.
Repeat this randomly over time, and you have explosions.
Well, anyway. I do wish good luck to all remaining competitors.