I read on a forum somewhere that the screenshot I show of Containment looks like either a ‘Snake’ or ‘Light cycle’ game and while it might be fun to write one of those it aint one of those
Basically the player’s viewpoint in Containment is one of a ‘radar’ style blueprint of an installation so the lines you can see below are the walls of a room that shimmer in the same way that the holograms do in films like Star Wars (where the idea was sparked from). There are two flavours of Containment being toyed with at the moment. The first was originally intended for single player and would have been the version written for WiiWare and the second is a Multiplayer RPG type affair.
When I started the ‘WiiWare is a lie’ blog post I had no idea it would go as far as it would. Instead of just me venting my frustration after going through a lengthy application process with Nintendo it seems to have taken a life of its own including getting interview requests from people wanting to take it further. While I would like to see Nintendo remain true to their original projected vision of what WiiWare was supposed to be I am by no means on a mission to cause them trouble or trouble for the company I work for by association. If anything this has been an exercise in being careful what you say because you really have no idea how far stories like this can travel.
The saddening thing about the WiiWare rejection is what it really means to be an indie developer. It appears that unless you have an ‘office’ location they won’t consider you. This means you have to have funding, how else are you going to be able to afford to rent or own an office? This is totally contrary to the speech given at the WiiWare summit and contrary to all the previous hype about developing for WiiWare. When I first heard about WiiWare it seemed like the ideal platform for the indie developer, it was certainly being touted that way even to the point where Nintendo claimed they were going to make it easier for developers to get hold of dev kits. The Wii summit only reinforced that view.
I like many indie developers before me started out in the games industry. I have served for over 10 years in various companies ranging from Kuju Entertainment to EA with my proudest achievement being the networking code for Mutant Storm Empire for PomPom. I learned a hell of a lot during that time and thought it was time to break free and give being an indie a go. I got a little side tracked from this and found out the hard way that unless you have a lot of funding you need to work for other people while working away on your own business - which is what I did.
I am not the only one in this situation. I know of at least one other indie developer who has far more experience than myself who is also expecting a rejection because of the office issue.
The most ironic thing is that in a home office you are pretty much going to find somebody there all the time whereas at an office it’s going to be vacant for most of the night and prime target for break-ins. In fact, at one developer I worked for we were encouraged to take the computers home at night because they kept being broken into.
I have since been told that the rejection letter I got was a blanket letter they send to all rejections.
A couple of months ago I was invited to the WiiWare summit in London. It was a great event and as a small developer I was greatly inspired from the talk given by Takao Yamane who is head of Nintendo Europe. I can’t give too many details because of NDA but the gist of the talk was how great WiiWare was and how it was great for the small developer and that we can make games that don’t require big businesses and it was a fantastic opportunity. I fell for that and ironically some months before had put in a registration request form with Nintendo. Today I got the response:
“Thank you for your interest for Authorized Developer status for Wii. We
have completed our evaluation of your application and are unable to offer
your company Authorized Developer status at the present time.
In evaluating developers, Nintendo looks for relevant game development
experience. In addition, Nintendo looks for secure business facilities,
sufficient equipment and staffing, financial stability and other
attributes that would distinguish the developer.
Nintendo provides Authorized Developers with highly confidential
information and many of Nintendo’s Licensees rely on recommendations and
referrals by Nintendo to Authorized Developers. For these reasons,
Nintendo exercises a very high level of discretion in approving only a
select number of applicants.
In accordance with our policies, we are not able to re-evaluate requests
for developer status for at least six months. Again, we appreciate your
interest, and welcome any questions or concerns you might have regarding
this decision.
Best regards,
Software Development Support Group & Licensing Department
Nintendo of America & Nintendo of Europe”
So, not as good an opportunity as Takao Yamane claimed then - good to know.
Best bit is - when I made the application I was already working as a contractor on a Wii title and before that I had worked on GameCube titles - apparently that doesn’t count as relevant experience. Perhaps they only want people who have never worked on Nintendo hardware.
It’s already been Dugg - you can do so here:
here
Containment comes in three parts. The first part is the C++ DirectX application. This serves as the main user interface for the player. The second part is the MySQL database that contains the world and status of Containment and the final part is the PHP scripts that allow the user interface application to manipulate the Containment database. All three components make up Containment and all three are a fun programming challenge all of their own - okay, technically you are not programming a database but you get what I mean.
The C++ application had to be multi-threaded. The reasoning behind this was that http requests and responses are not real-time, it can takes seconds to process one transaction. I couldn’t have a 3D display pause while the app went off and updated the database so I put the actual database communication code into another thread. When something is needed from the database or the database needs to be updated a transaction is sent to the comms thread which processes it and gets the result. The comms thread itself blocks while waiting for the results but it means the main thread of the application can proceed. The user still has to wait for the results but at least the simulation continues smoothly while those results are coming in. Each communication is a transaction and each transaction is a C++ class derived from a base Transaction class. They all share a common interface composed of three functions called:
Begin
Update
FInish
Update is the actual function that performs the http communication with the server while Begin and Finish are used to provide house keeping tasks. An example of this is player registration. Currently to join the game the player has to register with the Containment Computer and this is done like:
Register user password
While this transaction is being processed we don’t want the player to be able to type the same line in again so in the Begin function the keyboard console is turned off and in the Finish function it is turned on again. So as you can see those functions can be used to provide a measure of serial flow in the game execution. The alternative would have been to deal with duplicate transactions going through at the same time.
Incoming transactions are placed into an ‘in’ list while processed transactions are placed on an ‘out’ list with critical sections being employed to stop concurrency issues raising their ugly little heads. The critical section is entered, the item removed from the list and the critical section is left and the transaction is then processed. This means that very little time is spent in the critical section which hopefully means very little stalls in the main thread or the communications thread.
I spent most of this evening trying to figure out why a particular PHP script was reporting obscure errors. I kid you not - I spent at least 2 hours modifying, uploading and modifying again, inserting echo statements etc.. all in aid of tracking down a strange parsing bug. I found out what it was in the end and I could have kicked myself when I found out what it was. I had:
#include “test.inc”
when it should have been:
#include “test.inc”;
Can you spot the difference? Cunning eh?
It’s amazing. Rather than tell me there was a problem with this line it reported strange errors to do with variable declarations and turned out to be a bitch to find. Of course, what this really boils down to is that I really depend on the compiler to catch stupid syntax errors for me and when I don’t have a compiler such as in this situation I get stupid errors.
You live and learn.
Containment contains a lot of text parsing with a very limited Natural Language Understanding system which it turn leads to a problem - localisation. Because the parser is looking for english it obeys the rules of english which means it is very unlikely that the game can ever be localised to any other language since the parser would have to be coded to match that language. It’s for this very reason that I struggled long and hard over the parser concept since including it is essential for the core of the game but it does mean that only english speaking people can play the game. I had thought about using a made-up symbolic based language instead but decided that it would present too much of a learning curve to begin with and would probably put many people off.
I have been working for a while on a game concept called ‘Containment’ but got side-tracked into writing small flash games that while were fun didn’t really lead anywhere useful. I may still continue to do them in the future but for now I need to concentrate on Containment otherwise it will never get finished. At the same time I finally found a blog style that I like (it’s the one that Cliffski found for his blog) and over time I will modify it to suit my purposes since it’s a little too white for me at the moment - but I love the clean style it presents.
To get things started here is an image of the test app for Containment that I created over a year ago and sparked off the game as it is now:
