We have finally got the new site up and running, and we have moved everything over to it! You can track all of NimbleBit's activities on http://NimbleBit.com
Our new RSS feed can also be accessed at http://feeds2.feedburner.com/Nimblebit
New Blog!
New Forums!
New Chat!
New GAMES!
So head on over!
This blog will no longer be updated. You will be re-directed in 5.. 4.. 3.. 2.. 1...
NibleBit New Site! Update your bookmarks and RSS feeds!
Posted by David Marsh at 4:10 PM 1 comments
NimbleBit prepping for a big move . . .
... to a brand new NimbleBit world headquarters on the web! Brian has been smashing the heads together of technical kinks in Zero Gear, destroying bugs like a human RoboCop whose prime directive is to destroy all bugs. I have been prepping our new nimble nest to make room for all the extra content we are going to have as a result of a very special addition to the NimbleBit crew. More games! More games! More games!
here is a sneak peek:
Posted by David Marsh at 5:10 PM 1 comments
Global Game Jam Postmortem
- A complete play session must always last 5 minutes or less.
- Have ONE of the following adjectives to incorporate in your game: thin, evolved, or rotating.
- Very little team conflict, everyone was on the same page.
- Game design and scope, we didn't attempt to compete with Halo 4.
- Iteration, we used XNA and SVN which allowed us to quickly iterate game ideas.
- Communication, everyone was in the same room and was able to work together when they needed as well as, for the most part, leave somebody alone when they were working on a vital aspect of the game.
- Fun, we weren't struggling to make the game so we were able to have fun and enjoy the experience.
- Level format + pipeline: some more thought up front in our level pipeline would have saved a lot of time later on.
- XNA: it was great overall and I do not regret using it, but I did end up spending a large amount of time doing a few things that should not have taken so long (I speak only for myself on XNA).
- Sound code: the actual audio was great but we had some issues later in the project related to stopping and starting a music track. It wasn't the end of the world, but it was annoying.
- More time, the event was only 48 hours but because of the previously mentioned sports event, we had more like 36 hours, that meant we had less time to sleep.
- More art help, we had only 1 dedicated artist and he definitely had too much to do, one more dedicated artist would have been nice.
Posted by Brian Cronin at 8:17 PM 6 comments
SuperProfiler Speed Improvement and Bug Fix
Just a quick update. Here is the change list:
- Changed from using std::string to using const char * to improve overall speed
- Changed SuperRoot::PopProfile() and SuperStack::Pop() to accept a name parameter, this helps SuperProfiler to find any mismatches in pushes and pops
- Added SuperException which is thrown if an unmatched pop is detected (really useful actually)
- Added SUPER_PROFILE_PUSH and SUPER_PROFILE_POP macros which are useful if you want to access SuperProfile from a scripting langauge that doesn't support RAII (cough, Lua, cough), Still use SUPER_PROFILE whenever you can however
- Fixed a bug when there was no SUPER_PROFILE in a root parent function call (such as a main function). I would suggest not profiling a main type function, anything that only returns at exit
Posted by Brian Cronin at 10:21 AM 0 comments
Labels: code
SuperProfiler Update and Screenshots
I just updated SuperProfiler with support for comma separated value and XML output as noted here. There were a few other small changes as well.
This is an example of what you can do with the CSV output if you load it into a spreadsheet program:
And here is an example of what you can do with the XML output if you load it into an awesome program like the free XML Marker:
You can imagine how useful this can be I am sure.
Some things I plan to add in the near(ish) future are:
1. Real time data (view the performance of your code while running it!)
2. Per frame recording
3. SPIKE detection (just a way to mark a recorded frame specially if it took more processing time than the average)
Posted by Brian Cronin at 12:51 PM 0 comments
Labels: code
SuperProfiler to the rescue!
SuperProfiler is a library I wrote to help us track down performance issues in Zero Gear. It is open source so anyone can use it (and hopefully help make it better!).
You simply place a piece of code at the start of any function you want to profile and SuperProfiler takes care of the rest.
An example...
void SomeFunction2(int var1)
{
SUPER_PROFILE("void SomeFunction2(int var1)");
var1++;
}
void SomeFunction1(void)
{
SUPER_PROFILE("void SomeFunction1(void)");
int lala = 2;
SomeFunction2(1);
}
void main(void)
{
SomeFunction1();
SuperProfiler::TextOutput textOutput("SuperProfilerResults.txt");
SuperProfiler::Root::OutputResults(textOutput));
}
and in SuperProfilerResults.txt is...
Function List | Total Run Time=0 | Total Profiled Function Calls=2
-----------------------------------------
void SomeFunction1(void) | Total Time=0.00 | 50.00% of time | Total Calls=1 | 50.00% of calls
void SomeFunction2(int var1) | Total Time=0.00 | 50.00% of time | Total Calls=1 | 50.00% of calls
Call Tree
-----------------------------------------
ROOT
void SomeFunction1(void) | Avg Time=0.0000 | Times called=1
void SomeFunction2(int var1) | Avg Time=0.0000 | Times called=1
Simple and easy. Check out the Google code site for all the juicy details.
Let me know if you find it useful!
Posted by Brian Cronin at 10:29 PM 8 comments
Labels: code
Progress on Space Jump
Did a little more work on the obstacle-type course in between other things. Here is a little stitched together panorama of it (click for big)
Posted by David Marsh at 12:34 PM 0 comments
Labels: media
Global Game Jam result: Coopetiton
This weekend I (Brian) participated in the Global Game Jam in San Francisco.
Posted by Brian Cronin at 9:20 PM 1 comments
Space Jump WIP video
This is a 4x speed run through of a map I am working on to test out a "gauntlet" type game mode where the goal is to be the first to get to the finish against the clock. We are planning on having checkpoints throughout the map so that if you fall off you can respawn. Brian is also anxious to add physical obstacles along the blank straight lengths that will move around which you will have to dodge.
In other news, I have found a new place to work on Zero Gear - a real actual office space shared with my brother, exciting!
Posted by David Marsh at 4:28 PM 5 comments
Zero Gear now on ModDB.com
now you can keep track of Zero Gear's progress if you are part of the growing ModDB community.
You can check out Zero Gear's ModDB game profile here.
Posted by David Marsh at 6:17 PM 0 comments
Zero Gear on the webs
I have been on a little mini PR blitz lately, trying to increase awareness of our game. So far it has netted these little Zero Gear outposts on the tubes:
Zero Gear page on Gametrailers.com
A news story on N4G
A shoutout from Steve Streeting
A floundering Digg submission (DIGG IT!)
A post on independently-speaking.com
A link on The Awesomer
Posted by David Marsh at 4:04 PM 0 comments
I <3 fake players
Maybe there is a better term. A fake player is just like a real player as far as the server and other players can tell. It has no AI. It is just for testing. It exists only on the server. A lot of games have this feature (not claiming to have invented it or anything!).
I want to express my love for fake players. I just recently (yesterday) got this feature working in Zero Gear.
Here are some of the advantages to adding fake players to your multiplayer game:
- Makes testing bandwidth and other networking issues much easier. Even some gameplay code might only have a bug when there are X number of players on the server.
- Obviously a MMO would benefit from having fake players to test server load and whatever else those crazy MMO devs need to test.
- Profiling. Your game might work great with 6 people playing. What happens when there is a full server with 16? Physics might slow down, clients may not be able to render all those models, maybe too much data is being sent over the net. It is better to find these sort of issues before getting 16 real people together to test.
- Possible to translate the fake players into bots later. No promise of this for ZG! Since the fake player acts just like a real player, all it needs to do is send input to the server and the fake player is moving around.
The implementation was pretty easy after some code restructuring. I simply moved the client networking code (networking only, no graphics, input, sound, etc) into the server. Each fake player executes the same client networking code a real client executes and just like magic (Illusion, Michael), it works! This is because the server only really interacts with the real players through the network.
Overall I wish I would have gotten this feature in ZG a lot sooner! If you are developing a networked game, do it now!!!
Posted by Brian Cronin at 10:46 AM 11 comments
Labels: code
New Character: Cacti
From the barren and windswept mesas of the desert comes our newest character Cacti. Say hello, but I wouldn't touch!
Posted by David Marsh at 3:09 PM 2 comments
Labels: media