I'm planning out my 7hfps game now so I know exactly what I have to work on when I decide to start developing.
The game is called Wonkadelic Wonderland and you begin the game in a grey land where the goal is to shoot everything with your rainbow gun making everything look candy coated.
It's a pretty simple game but I am starting with little more than a rendering engine and need to use this to get 3D collision detection down, I figure bullet/player collision is pretty key and something I should have before 7dfps.
I think the way I'm going to go about collision is keep the game grid based (doubly linked lists ftw). I still wish to have ramps/other non-cube shapes and I think the way I will go about this is by each tile containing a heightmap then I can get the height of the ground at any point by adding the tiles y value and the pixels red value. This method will also allow me to make the ground feel smoother than it looks (stairs come to mind). Another nice thing that comes out of this method is by giving each tile its own heightmap instead of making one for the whole world I can very easily create multi-layered areas.
I'm not sure if this will be to much of a stretch but I think I can use pixels green/blue value to tweak the players x/z velocity when on ground which would let me create slopes you slide down and moving platform objects that edit the maps of the tiles they reside in.
I feel as if this approach isn't as efficient as proper 3D poly collision but I don't think I could code that math in the time I wish to spend on engine work (and probably not as efficiently as it should be coded) I also think that this approach will impact the design interestingly with the blue/green channels (perhaps I can think of something else cool to do with alpha too!) and the restrictions it will impose (no shooting through little windows)
I want to give a big ups to this tutorial on N colision by metanet.
I had to change things up a bunch to make it work for me in 3D/my comfort zone but it was a great read and there were a few choice ideas I'm going to be implementing. Most notably keeping collision functions in a 2d array ( CollisionManager. functions[gridObj.type][dynamicObj.type](gridObj,dynamicObj);) That is elegant as fuck imo and I have fallen in love with this idea.