Not a whole lot, but 2-3 new maps have been added.
Download the demo here.
Allright the last couple of posts have been very technical so now its time for some more fun stuff. I have been working on Blobula off and on the past couple of days as a I work on my last two projects for the month (networking and engine 1). Right now, I'm getting ready to implement the challenge mode that will actually have a timer and high score table. I'm working on some maps to use in the challenge mode. A friend of mine made one which uses the "zip line" effect in a really neat way. I'll put together the map pack later tonight and send it out.
Posted by Naveen Nattam at 6:23 PM
The Dispatch table is a template class. The map contains a objects that are derived from a base action class. The derived class overrides a pure virtual method called Execute on the base action class. Each derived class is actually templated to hold a function pointer. Execute is always called on the base class and the arguments are always passed as the base type pointers. So as long as Rect and Circle derive from Shape, you can properly call RectToCircle(Rect *, Circle *) through the table by passing (Shape *, Shape *).
This is a pure technical note for myself!
Posted by Naveen Nattam at 3:01 AM
I decided a few days ago that my "collision library" was poorly written and very limiting. I went on an ardous campaign to rewrite the library so that it performs EXACTLY the same but will allow for easier expansions in the future. My collision system uses a set of bounding volumes (circles, rects, oriented rects) and a huge set of intersection methods that handle them. The system being used was directly from my SGP project where I wrote the collision system into the Animation Engine. This was slowly working against me since the interface for the Bounding Volumes was extremely dirty and used my misinformed version of "double dispatch." The interface was so bad because I was trying to find a way to have the proper intersect method get called between two Bounding Volumes when you don't know what type they are (if a & b are just of base type BV). To solve this, I created an interface where each BV type knew about the other BV types. This worked but created a messy dependency problem and also made it a huge pain in the ass to add a new collision shape (basically keeping me from adding one). This problem also occured with my game objects. Certain objects stored their data differently and would need to perform different kind of collisions. This time to solve this problem, I wanted to avoid the shitty interface issue so I created a "Dispatch Table" that stores a map of function pointers. Each object has to have a unique ID and a unique bit flag that when OR'd with another objects bit flag creates a unique value. Using this data, you can register several functions with the table and make a quick call which will resolved which intersection method to call. This system worked so well that I wanted to do that "look at my shiny new hammer" on my collision library. While this is normally a bad idea, I knew my collision library needed it. So know, even though more tests are needed, I have moved the library out of the Animation engine and removed all the dependices between the Bounding Volumes. Hurray...now no one will notice
Posted by Naveen Nattam at 2:11 PM
Hey hey hey everyone,
Download the new demo.
This one adds two modes you can switch through in the game.
Challenge Mode (hit F1) will make you find the "exit shapes" to get the next stage.
Freedom Mode (hit F2) will let you cycle through maps with the bracket keys.
The map editor has also changed. When you create static shapes, you can also specify what type you want them to be. Setting it to geometry will just make them like normal. Setting it to trigger will make it an exit shape. Force Emitter is also in there but is currently unsupported.
All old maps are invalid with this version of Blobula. Sorry!
Posted by Naveen Nattam at 3:16 PM
Here is the newer version of Blobula Freedom.
I just added a slightly more proper jumping feature. When you hold space bar down, the blob will start applying a force down that builds up (to a max) the longer you hold it down. When you let go, that force is applied in reverse upwards [Credit to Mike Belotti for that idea!]. You can use this to try and jump. I'd appreciate any and all feedback!
Oh and I wanted to share some info on editing the game:
I tried as much as possible to make the game data driven. All this data is currently stored in easy-to-edit text files that are located in the Resources folder. Here are they key files:
Resources\Blobula_Freedom.ini will allow you to edit basic game settings like gravity and max jump speed along with blob's color.
Resources\GameData\BlobSettings.CFG will allow you to edit physics settings for the blob including the strength of the various springs that keep the blob together. This is fun to mess with and see what will happen. Just remember that collision is done with the outside points of the blob only! Also make sure to keep the radius under 200 or else there shall be problems!
Oh as an extra note, try to keep any shapes you make in the editor to 4x4 tiles (when set at 64, tile size - the default). There is a small bug with the spatial partitioning system that doesn't like objects being much bigger than that.
Posted by Naveen Nattam at 3:28 PM
Download the Demo!
Well this is a brand new version of Blobula..the game about a blob.
So this is called Blobula Freedom because the real Blobula game will actually have a rules, goals, etc. This is just a mess around version.
I added more maps that you can cycle through by pressing  keys. I also included the map editor (no instructions though) if you want to try to edit / create a new level. If you create a new level, make sure you go into the resources/maps/ and update the Blobula_MapList.ini. I will get some better documentation up soon.
Note about the map editor: I did some testing and found that unless you have a new version of the .NET framework installed, you won't be able to run the editor. I'm trying to find a work around for this but my lack of knowledge on building a release-mode c# application is working against me.
Any and all feedback is 110% encouraged! you can post here or hit me up at email@example.com.
Posted by Naveen Nattam at 5:15 PM
Physics has been a harsh mistress for me. I always seem to repeat the pattern of progressing very fast then hitting a roadblock so hard that my nose comes out my...well you get it. I spent the last several days fighting my mass-spring system for my blob. I tried several things and was becoming increasingly frustrated. I finally stumbled upon a post at GameDev and took found one fellow programmer as frustrated as myself. He got a lot of good advice which included stepping back and breaking the problem down into small demos. I needed to do this so I took some deep breaths and wrote several small pieces. Starting with just two point masses using verlet integration, I started messing with apply forces. I eventually came upon something that never fully dawned on me before: Forces are constant! This is incredibly obvious to anyone who has dabbled in basics of physics, but I didn't quite realize how important that concept is. The way I was implementing, sources of forces can lumping up every iteration. So my springs were adding their force every frame to my points. Each spring generates ONE force that is changed every frame (not added!). Egads! So much to re understand! So many doors opened!
Now for the second part of my post. I recently acquired the score to Matrix Revolutions and I have to say its way better then the movie. Thats a shame.
Posted by Naveen Nattam at 12:12 AM