Gaming Your Way

May contain nuts.

Quick and simple Stage3D test

Sorry about our long absence from the blog, a combination of trying to finish off Outpost and the blog editing software not working well with current gen browsers, and no time to fix it, have killed our writing muse.

Last night I finally had a play with Molehill, and boy was it good. I'm so impressed by it. It's a bit of a ball ache finding good documentation about it, but for something simple like the demo I knocked up it wasn't too bad, and come the day when we make a game in it we'll either use Unity or ND2D, life's far too short to be trying to roll our own engine.

Anyway, here's some sugar.

It's the effect from the DN8 title screen, done with 512 cubes ( As opposed to 255 sprites in the original ). Mileage seems to vary, as to be expected. I get a pretty solid 60fps on my Macbook pro, which hasn't got the greatest GPU in the world in it, whereas it's been reported to run as low as 18fps. There are going to be a lot of 0/5 review scores with Molehill games, because you've got to blame the lame ass dev for the player having dog shit card drivers.

And with that this post comes to an end. If you remember a while back I was saying we had a couple of projects due to go live, well unbelievably we're still waiting ( For them to go live, and payment, which is always a pleasure. Both are done, have been for weeks ). We're also looking at mid November for getting Outpost up for sale, so I think we'll be sniffing around some beta testers soon.



Note to myself:

It's a bad idea to try todo a little bit of video editing for the web in Premiere Pro!
It's a bad idea to try todo a little bit of video editing for the web in Premiere Pro!
It's a bad idea to try todo a little bit of video editing for the web in Premiere Pro!
It's a bad idea to try todo a little bit of video editing for the web in Premiere Pro!
It's a bad idea to try todo a little bit of video editing for the web in Premiere Pro!

No, seriously:

It's a bad idea to try todo a little bit of video editing for the web in Premiere Pro!

Anway here's the promised teaser video ...

My todo list told me this is overdue.

You're probably tired of this already, but there are some Nuts & Bolts news just around the corner. In a private beta play Deeperbeige (.com) gave it a complete bash and pointed at a few wrinkles that I'm just about to iron out.

Biggest addition will be a nice little victory animation that is tormenting my CPUs at this very momment, so you get something relaxing to see after you've solved all levels (I've been told to keep pen & paper ready for the later ones - or wait for the first set of video guides that will be released with the game).

Then there are 2 bugs that I haven't spotted so far (one of them allowed to cheat ...) but should be easy enough to fix.

More right after this comercial break...

(While I try to get my head around a teaser video to post here)


Friends and foes

For anyone who's interrested: it's shit weather outside. And cold. And grey. And it rains.

So Nuts and Bolts getting near gold status every minute I thought I might explain how lazy I was this time with the level editor. So lazy in fact, that there is no such thing. As Nuts and Bolts is a puzzle game and is using a fairly simple map structure I thought I could get away with doing the maps in the Flash IDE.

The basic idea was to place Movieclips on a grid and read out the names and positions at runtime.

Here's a screenshot of the first level:

The squares and circles are in the background so that I know where to align my Movieclips, you can see the textboxes which provide addtional informations for the parsing routine (name is not used in the game anymore, but I was to lazy to remove it and the last box contains the help screens that should be displayed).

Each of the level elements got a name I use to build the map, so the yellow circles with the white "p" are normal platforms (name:"pl"), the green "e" is the exit and so on. Luckily we can use the same name more than once in as3 so I could just copy and paste elements once I had decided what name they should use...

Here's another screenshot of a later level:

All we have to do now is to get a copy of the Movieclip (the level MCs are exported for runtime use) with this:

private function getLevelMC (iLevel:int):MovieClip {
	var myClass:Class = getDefinitionByName("mcLevel_" + iLevel.toString()) as Class;
	var mcReturn:MovieClip = new myClass() as MovieClip;
	return mcReturn;

And the run the parser of that MC (just a part of the code, though):

// find platforms 
for (i = 0; i < mcMapTemplate.numChildren; i++) {          
	mcLevel = mcMapTemplate.getChildAt(i) as MovieClip;          
	bVisible = false;     
	x = Math.floor(mcLevel.x / 60);     
	y = Math.floor(mcLevel.y / 60);          
	switch ( {         
		case "pl": // normal platform             
			this._aMap[x][y].p = PLATFORM_NUTS;             
			bVisible = true;             
		case "start":         
		case "start_0":         
		case "start_1":        
		case "start_2":         
		case "start_3":             
			this._aMap[x][y].p = PLATFORM_START; // we'll set the dir later when adding beam's data             
			this._aMap[x][y].d = 0; 
			this._pCurrent = new Point(x, y);
			this._pNuts = new Point(x, y);                          
			if (StrUtil.contains(, "_")) {                 
				this._aMap[x][y].d = StrUtil.cInt(StrUtil.part(, "_", 1));             
			bVisible = true;             
		// [Skipped a lot of code ...]     

Then the Movieclip can be removed again and I can plot the level from the resulting map data array ...

For this game this was hazzle free way of doing (and changing) the 30 levels.

And with that, I'm getting back to the game, I have some sounds to add before it becomes gold ...


[In desperate need for a catchy title]

So what am I going to write about today?

I guess my last post is so long ago you must believe I left GYW and let Squize do all the posting. Well, no. I just had nothing to write about, nothing even mildly related to games anyway.

And while Squize wrote all this posts (and awesome games), I wrote … an online picture database. This 'small' project took way, and I really mean WAY longer than I thought. My first guess was 'ok, maybe three month, max four' - lesson learned there. In the end it took a year and changed from a very basic database driven website to schow (and sell) some 40 years worth of black and white press fotos to an ajax driven catalog monster. There is a quite complex backend to handle the images' keywords and background informations, import and upload methods, a product and discount editor and a whole lot more, that makes up a good third of the all-in-all 54,000 lines of code - ok this includes some 9k lines of javascript and a lot of css.

By the way, if you happen to speak German, go have a look at it (otherwise you've just have to click on "Fotosuche":

And if you like a hairy leg on a woman, have a look at these "swimsuit models", (And while you're at it consider buying a few prints :) )

Now that I got this out of the system, I can as well add something about why it took so damn long (about 10 month):

1. style and code revisions. As I mentioned earlier this one got bigger than the first idea, this wasn't such a big problem as it was an inhouse project.
2. oh and it was an inhouse project. So adding things, tweaking design and layout caused some rewrites and with no fixed schedule … do I have to say  more?
3. Ajax. Ajax eats time, and imho javascript sucks (even when using  jquery). Until I started to use Aptana Studio each fucking line was a chore (and honestly still is).
4. customers :-), just when I really was deep into the c# code of the backend there was scheduled client work ahead.

Although looking back now I'm quite proud of it.

And now - finally - games.

Right after (and when I really couldn't face serverside anymore) I started working on two games. One's nearly finished: a flash puzzler based on two cute (and cute normally isn't a word I like to use in this context) robots called Nuts and Bolts. The other one is an Unity based gamed re-using an old game idea of mine where you collect items and solve small switch based puzzles to reach the level's exit. It's got quite an unusual control scheme which I hope will bring some mobile/gyro feel to the mouse using gamer (and later be ported to Android without much trouble).

Right, enough text for me, here's a big lot of screenies:




I'll let these stay uncommented.

And now ... levels for Nuts & Botls


GPS? Not down here, but we've got magic!

Screenie post I fear ...

Current Hellstrom built in Chrome with the debug pathfinder being a little show-off.

What's new? Just a lot of code atm. There's a second pathfinder in it now (after I discovered that the one I wrote for flash a good while (ok, years) ago didn't quite work as expected.

I really like the old one as it only needed a boolean map to work, though with the dynamic dungeons in hellstrom that proved to be a bit tricky anyway as I had to render my cell structure used for the maps into the boolean map:

+---+    #####
! ! # #
! D >> #
! ! # #
+---+ #####

While the cell stores just if there is a wall, say for north, the boolean map needed to have a wall made of "false". (see : here (scroll down a bit) for some more detailed explanation about the structure I use).

Anyway the new pathfinder (codename: Magellan :) ) uses linked nodes instead of a boolean map, this is not only incredibly usefull (as it can adapt any "scale"), it also works in 3d / multiple levels and can use "one way nodes". The code isn't as clean as I wanted it to be, but it's working and abstract enough to be easy to use...

_Magellan = myDungeonCreator.createMagellanMap(_Dungeon, new Magellan(), false, false); 
// dungeon, pathfinder ref, use locked doors, move diagonal

it uses 3d Points as internal ref system so to find a path you's simply:

string Result = _Magellan.FindPath(_Dungeon.Rooms[iStart].offset, _Dungeon.Rooms[iEnd].offset);

With Result being some handy string to be parsed, like "noLink", "pathFound". The found path is internally stored as array of index ponters to the nodes, so we need to "parse" it to be used:

PointInt3D[] path = _Magellan.path3D;

enough code now.
If I feel luck I'm going to post it, though first I need to get alive through the much dreaded holidays (way too much food and family - and way to much drinking in order to forget the two) ...


We're not dead ...

... just so snowed under client work that there's hardly room to breathe (or to sleep while we're at it).

So just to show that this place isn't a deserted place on the web here's a tiny text only post.

Oh. And "The Hellstrom Project" is on twitter now (and whenever there is a hint of free time I'm working at it) if you like you can follow it here:

And now, more amends ...