I so wanted to do this LD, but I had lots of real-life stuff on this weekend. I still tried, and got about what I expected for the limited time I could spend. Seeing some of the other entries, though, makes we doubt if participating was a good idea.
When I read the theme, I was pretty excited. It’s a very flexible theme IMO that allows about any kind of game if done right. I don’t have Super Mario Galaxy, but I always liked the videos and the idea to have a spherical planet to run around. Also, I was wanting to do an remake of the AtariST game “Startrash”, which was really something totally different back then. The spherical wrapping of the map-array was a great challenge to me, so I tired.
First I thought about mapping an rectangular grid across the sphere but I think it would not have worked out properly. Next thought was to make all the world of a 3D object and use 3D collisions for the movements. But usually that approach takes a lot of time for tweaking the right parameters. Also, I really wanted the game to be “blocky”. So I remembered some subdivision techniques I used many years ago to build a sphere from uniformed triangles. The idea is to use an 4-sided tetrahedron and then insert new nodes at each center of a triangle. So this 2-3 times and you have a very smooth sphere.
But how to connect the triangles into an height-array so the ball can move? That was pretty tricky for me and I decided to add a 3-index array to each triangle that has the neighbour indices stored. That way I could move like: current = sphere.triangles[current].neighbour
I also made an separate array for the height of each triangle and later one for the colour.
The path-creation algorithm was pretty easy. Just start at one point, then move to random neighbours until you hit an triangle that’s of a different height. Reverse to any random triangle in that path then, and continue for the remaining steps. Sort of like a tree grows branches. Then iterate the path and randomly lift the steps. In the final version I do a very long path for height=1 to separate water and land before I grow the hills.
The next problem I encountered was the 3D view and rotation matrix for each cell.
This took a lot of my little time, because it turned out a lot trickier that I first thought. The main idea was to store the center-of-sphere to center-of-triangle vector for each triangle. Then build a rotation matrix from this and the direction something is moving to. do a cross product for the “right-side” vector then. Before rotating, move the object up the y axis to reach the top of the triangle (scale up vector by sphere.radius + height[itriangle]*sphere.height_per_step.
The movement of the enemies was pretty easy, because they cannot change to a different height platform. I just got the 3D position for the new triangle to move to and linearly interpolated between the old and the new position.
LD is always great fun. This time I had very little time and so I didn’t benefit and contribute to the social aspects of LD. That’s a shame. Next time I try to get the weekend off and chat a bit more and take time to see what others do. Also, this time were so many entries, that the reading of all the texts would take a full week to complete. I will try to read all this in the time until the next LD.
What when right:
-The idea is pretty good if done right. I made a non-violent game with a wrapping world to walk around.
-graphics. I’m not much of an artist, but I think with my minimalistic skills and time the visuals got to a state that might invite to have a play.
-path creation: It’s not as good as manually crafted levels, but for the short time I had it does a good job.
-time management: Knowing I had little, I concentrated on the bare playability basics without the use of any placeholders. I always had the partial targets to reach in view and was pretty much able to reach them. I am a full time developer in my real time job, so I could quite foresee how much I can do. Tip for not-so-experienced devs: Have small targets and plan double the time you think you might need.
-Language: Pinping a bit here, since GLBasic is my baby, but I think it’s really a great tool to produce quick results of some value.
-AC3D as a modeler. This tool is very fast at modeling easy shapes. Only the texturing is always a bit complicated. I should see if I find something better here.
What went wrong:
-There’s not much to explore. Manually crafted levels and some extra skills to the ball would be required.
-The game might be a tad boring. More different enemies and extras would have helped. Also a story and several planets to move between.
-no sounds due to lack of time. I have a song in my mind that I wanted to “SongSmith” and sfx would do good, too.
-controls: It works as expected. But… somehow the view rotates way too much. Maybe I should have implemented an slider for the rotation independently from the movement direction. Would have saved me lots of math as well.
-Using MSPaint was a bad idea. The Win7 interface is totally wrong. Usually I use CorelDraw, but I had no time.