Tuesday, April 21, 2009
Hi folks,

most regular readers will have noticed that we've jumped onto the Unity wagon after it finally came out for the windows world and so I think it's time to write down a few of my thoughts ...

What it is:
an easy to use development platform for 3d games (although easy, well, I'll cover that later)

What it is not:
Simply put: easy.
And it is not flash.

So?
The best part of it is, that you can do a decent 3d based game with it quite quickly, that is if you know how to code unity (I might have twittered once or twice that the docs are not one of the strong points) and (what's more important if you or someone in your team) can do low poly 3d.

So?
I really can't stress enough that it is NOT flash, not at all, when you get started with Unity all is nice and straight forward, but once you hit the point where you really would like to do a quick tween for the main menu, or use a fancy drop shadow on your font ... you'll probably start cursing and wish you could use a timeline and some keyframes.

One of the really big letdowns for me was to discover that a quick, easy and nice UI is not going to happen fast in Unity. You can get away with it if you don't need dynamic text to appear, but I need to do a lot of stuff with that, because nearly all of our games are prepared to be played in at least two languages.

How does all that relate to the title?
When I first got in touch with flash (6 I think) AS was really nothing more than a scripting language, coding for the best part was ... shit and most of us messed with onEnterFrames per movielclip. Then AS2 hit the light of the day and with AS3 it came very close to real coding ...
But when I entered the Unity world it seems like the old distributed scripts came back to haunt me. You've got the choice of using a set of different languages: javascript like, c#, boo and some others.

JS on the one hand is easy to use, ridiculously lose typed and commonly used. I really don't like lose typed coding, so for me it was c# ...
Anyway something that commes very close the the old MC based onEnterFrame is Update ... so a script that would move the object 1 "unit" (since we have no pixel) to the left would be:

function Update () {
    transform.position.x++;
}

(or something very close to that, I said I use c#, oh and I'm sure I saw some other methods to do the same)

Save that as a ".js" text file, add that to a cube on stage and viola (there you have the back to script part covered).

I hope you won't be doing that for a complex game, but ... thinking back ... I knew people who did that with flash  ** shudder **.

As I already mentioned, I hate lose typed coding and as I used c# for some years now for coding anyway it was a logical choice (that and the fact that I could continue using Visual Studio).

Oh and did I stress that there is NO timeline?

Everything you want to have animated either needs to be coded (ie for dynamic text) or already be animated in a 3d app ...

Oops, I think I need to get back to work ...

nGFX

ps: just to have something to look at a screenie of the menu (the start of a camera move) of my "test" game to see how I get along with Unity, if everything works well, I might be able to invite for a private beta test on Friday (give me a shout if you want to) ...

pots_menu_de_00.jpg
(the text for the menu was a big lesson in cheating, it uses GUI.Button, btw)

Tuesday, April 21, 2009 7:38:04 AM (W. Europe Daylight Time, UTC+02:00)  #    Disclaimer  |  Comments [6]  |  Trackback
 Friday, April 17, 2009
I recently did a reskin for a new CGI movie which we're not actually allowed to take credit for due to the nature of the contract ( It's a project which filtered down a couple of agencies before landing in my inbox ) so I can't link to it without giving it away, or even mention that it involved both Aliens and Monsters ( If you follow us on twitter you'll see I've been a bit less subtle there ).

I noticed yesterday that it's been posted to gameJacket, so thinking the worse I fired off an email to which I got a good prompt reply from Simon. Long story short, it turns out Rubber Republic have been contracted by Dreamworks to distribute the game and they're using gameJacket to do so.

Perhaps it's just me, and I'm being naive ( I've been shocked in the past, and still am now and again, about the size of the budget for paid placements. I live in a nice little garden where viral games sit on their own nice custom webpage and people just swap emails about them based on their actual merit as a means of entertainment until they get a nice lot of traffic and everyone's happy. I fear the busy road outside that is all about paying to put a game in the #1 spot on high traffic portals ) but it just doesn't sit too well with me.

An adver-game supported by adverts just feels overly cheap. I've had this before with Brain Voyage, and I really fought against that at the time ( Obviously I lost ).
If you're using a game to sell a product, then surely the game itself should be enough without further ( And random ) advertising before it, that just dilutes the message and to me cheapens the end title.

I think it's because advertising is such a common way to pay for the development of a game that when you see it in any game you naturally assume the same. So when you see a game by Eidos or Dreamworks promoting their IP it gives the same impression, that the games development costs need to be recouped by advertising other products. That's not a great impression to give out.
We don't have ads on here or the site for that very same reason. It's not that we're rolling in cash, it's just that the returns vs the perceived loss of quality to the site massively outweigh each other. We've even been asked to do sponsored articles, but unless it's enough money so we can ignore the feeling of being dirty, then what is the point ?

We pride ourselves on producing the very best work we can, dependant on the budget / timescales / project scope, and I think for the most part we hit that self imposed target. We want our work to be presented in the best light possible, so why don't companies like Dreamworks and Eidos, who at the end of the day are IP driven, feel the same ?

Ok here's what I'd like to do, follow me with this. I'm going to set up a fictional game called "Mackerel Queef" and buy advertising space on mochi and gJ

queef.jpg

I think that's subtle enough. Now I'm not really going to do this, it was partly just an excuse for more dirty words on here, but it is kinda related to the point I'm trying to make.
If I was Dreamworks and I was advertising a family movie, I wouldn't want "Mackerel Queef" ( I've used it again 'cause I want this site to be the number one on google for "as3 fps counter and queefs" ) being promoted in the same breath never mind being seen as earning money from it.

Ok the ad networks are more responsible than that ( And I'm really not critising them, they've made Flash a viable development platform for a lot of people which is only a good thing ) but it shows the lack of control you have over such things.

I guess it all boils down to the figures. If you've commissioned $x worth of game I assume there's someone working out the cost per set of eyes viewing it ( A figure I found for cpm on prime time tv in 2002 is $17.78. Imagine getting that rate from mochi ) so to be able to turn around to your boss and say "$x worth of game was viewed by x million people which works out at $0.0x per person" then I guess your boss doesn't give a shit if it was at the expense of people watching an ad for "Mackerel Queef" first.

Maybe paid placements are a better way of making the whole seeding process feel less cheap. At least then your game is treated more like the art it is rather than as a product like a tin of beans.

Maybe the ad networks who have a great seeding process in place could offer it as an ad free service ? It'll be cheaper than paid placements for the clients, they get to drop a "Distributed by..." in there and it'll make the end game look a lot more on brand and less turned around for the minimum cost possible.

Maybe, but it's not going to happen is it. So developers like us, like you, will be working 'til 2am to meet the deadline and to just force that last bit of love into a project to really make it shine, only to see it a week later on some no-name portal with the size tags in the html wrong ( And a "Play it full-screen" option there, even though it will look and play shit like that ) and an ad at the start.

Squize.
Friday, April 17, 2009 2:43:28 PM (W. Europe Daylight Time, UTC+02:00)  #    Disclaimer  |  Comments [5]  |  Trackback
 Wednesday, April 15, 2009
Thought I should post something up explaining our quietness here recently ( And to thank our friends at other blogs for keeping on linking to our puerile words ).

nGFX's has had bits and bobs to do outside the GYW world, plus he's currently hard at work on a cheeky Unity game which when I last saw it was looking pretty damn nice ( And not an obvious Unity game at all ).
We had a chat today and we're looking to try and be a bit more pro-active with other Flash devs looking towards Unity, it's something I spoke to John ( Mate, update your blog! ) and Chris ( I didn't know pinball was on there, sweet ) about when we got drunk the other week, the whole "We're on the same side, let's share Unity stuff more".

As for me, my personal life has just turned to shit the last month. If I was on Facebook I've have to change my status to single. To be honest that's knocked the shit out of me and I've had to re-evaluate everything ( 8 weeks ago I was still blindly thinking how I could get enough money for the wedding in August, now I'm wondering if I'm even going to stay living in London.
Sometimes life is great, a joy where you can actually take for granted there is a God and you can almost feel Him straightening out the path before you, that your soul really can soar and although today was great, tomorrow is going to be even better again. Other times life is just a cunt ).

Anyway before this turns into an angst riddled wail of a blog ( I can think of very few worse themes for a blog. We all have emotional turmoil, it doesn't mean it's a valid thing to share in a public medium. I'm just trying to justify my apathy rather than screaming [ At the moon ] for help ) on the work front I've just today started a new project with thebasement which I'm really pleased to be doing, and it's a chance for me to work with ickydime which is more than cool.

I'm sure as my "whats the fucking point ?" attitude slowly gets replaced by anger I'll find my old venom and we can return to normal posting here ( For example, the GameProducer blog really bugs the hell out of me, but I can't slag it too much 'cause it'll be sods law that the next post on FlashGameBlogs after this one will be one from there, but seriously man, to be a game producer you have to actually produce a game. The clues are in the actual words. It's like me starting a blog about being an author, when I've not actually written anything. There's a world of difference between wanting something and actually doing it, otherwise we'd all have had sex with twins ).

Hmmm, I'm starting to feel more like myself.

Squize.

Wednesday, April 15, 2009 2:25:47 PM (W. Europe Daylight Time, UTC+02:00)  #    Disclaimer  |  Comments [11]  |  Trackback
 Wednesday, April 08, 2009
This is going to be a rant post - yeah!

If your following us on twitter, you might have noticed my tasks for yesterday:

"Quick update on the CMS then coding on the first unity game"

Well, I didn't get to the unity game part, thanks to some weird flash (bug) that wasted 5 fucking hours of my time and still is inresolved. Here's a quick rundown:

For our new german site I wrote a simple flash based menu/header which reads in an XMl and takes two params. The xml reading was all done, but I needed to pass the params from the asp.net page to the header. I decided to use loaderInfo.params for the sake of a quick and dirty solution and then it all went down the drain ...

Testing params in THE IDE doesn't work, so I published a HTML page withit (I did mention that so far the menu worked very well?).
But opening the file locally in FF 3.0.8 did do nothing ... no menu generated from xml, it just showed the background shape.

OK, lets try in IE (6, 7, and 8) and it worked just fine, params passed, menu displayed.
Chrome worked, too, same with Opera...

FUCK! Why doesn't it work in FF?

Next thing I tried was to upload the whole lot and tried it from the server - and look it worked in FF, too. ONE FUCKIN TIME! After the file was chached it quit working just like it did offline. (All other browsers still worked just fine).

FUCK!

K, let's add some outputs to the loading process - and viola the problem was quite easy to nail down ...

Here's a stripped down version of the code: (I used a document class and a single frame with a few vector shapes on it and some textfields with an embeded font only)

Code:

/**
* ...
* @author nGFX
* @version 1.0
*/


package {
    
    // skipped imports

    public class Preloader extends Sprite {
        
        public function Preloader() {
            
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.showDefaultContextMenu = false;
            stage.quality = StageQuality.HIGH;
            
            trace("init preloader");

            this.loaderInfo.addEventListener(Event.INIT, this.initDisplay);
            this.loaderInfo.addEventListener(Event.COMPLETE, this.initApplication);
            this.loaderInfo.addEventListener(ProgressEvent.PROGRESS, this.showProgress);            
            
        }
        
        private function initDisplay(e:Event):void {

            trace("init display");
            
        }
        
        private function showProgress (eProgress:ProgressEvent):void {
            
            var fPercent:Number = Math.round((eProgress.bytesLoaded / eProgress.bytesTotal ) * 100 );
            
            trace("Loading: " + fPercent.toString());
            
        }

        private function initApplication (e:Event):void {
            
            trace("init application");
            
            this.loaderInfo.removeEventListener(Event.INIT, this.initDisplay);
            this.loaderInfo.removeEventListener(Event.COMPLETE, this.initApplication);
            this.loaderInfo.removeEventListener(ProgressEvent.PROGRESS, showProgress);
            
            trace("loading language")
            Locale.loadLanguageXML("de", onLanguageFileLoaded);
            
        }
        
        private function onLanguageFileLoaded (bLoaded:Boolean):void {
            
            trace("language done")
                    
            this.initMenu();
                        
        }
        
        private function initMenu ():void {
            
            // some code here

        }
        
    }
    
}



As you can see there's no magic added to that code.

Running the swf through a a html page using FF showed the following:
- init preloader
- init display

... and nothing more ....
Wednesday, April 08, 2009 7:34:47 AM (W. Europe Daylight Time, UTC+02:00)  #    Disclaimer  |  Comments [6]  |  Trackback
 Saturday, April 04, 2009
Hey my beauties. Sorry I've been ignoring you all, I've just been pretty ill the past week or so ( I was going to say I've been sick, but I used that joke up last post ). It's me not you, honestly.

Just a short post to go with a small experiment. I've done the plasma effect to death in Flash but it's a nice little effect to play with when trying out a new language so I thought I'd see how straight forward it would be to port to Unity.

The answer is... fairly. If nothing else I've discovered that for...in is nasty slow in Unity ( All these new coding caveats to learn, joy ).

Anyway I still feel like crap, so I'm going to cut this short. The effect is hiding behind this link and it's really nothing special, I just wanted to show something after being away for a week or so. If anyone would like the source just ask in the comments.

Squize.

PS. I'm so sorry to everyone I owe an email too, I will catch up, and let's be honest you should know how crap I am by now.

Saturday, April 04, 2009 6:26:32 PM (W. Europe Daylight Time, UTC+02:00)  #    Disclaimer  |  Comments [4]  |  Trackback
 Wednesday, March 25, 2009
Anyone who hangs around Flash boards for any length of time will see a pattern ( Usually around school holidays ) of script kiddies turning up, asking a million lazy questions, telling you that in spite of a lack of knowledge right now they're going to see their project through 'cause it's the best idea ever ( It's like Mario, but with guns. And tits. And rpg elements. And zombies ), that if you can just help them with the character select screen the rest of the game will be all but done, and how much can you earn via mochi again ?

I just like to push back on my rocking chair, spit out some of ma there chewing tobacky onto ma porch and grin like a hog that found the shit.

Tweening a zelda sprite isn't going to produce the best game ever ( From the best idea ever ).

So look at me now, I'm playing with Unity3D and I don't know what the hell I'm doing. I'm guessing it's not far away from the Unity equivalent of tweening a zelda sprite and yet I'm really confident about turning out a complete game fairly ( Relatively ) soon-ish.
Unity has it's quirks, and the javascript code is no as3 ( All those posts bitching about as3 being a pain in the ass, well it is, until you get a couple of games out of the way, then it becomes as natural as yawning in meetings ) but... already, 6 days into the trial, I have no desire to go back to making games in Flash again.
To me it's like going back to as1 and publishing for F7 only, it's such a step backward that it holds no appeal at all.

Now hopefully I'm not too much of an idiot to release I can just up and leave Flash. Unity may not be the pot at the end of the rainbow, for all the very lovely demos there still aren't a lot of complete games, which does ring some alarm bells, and perhaps it is a world of difference between having a nice mesh with some physics running on it all at 60 fps in your browser and making that full game ( The gulf between tweening zelda and making a game could be huge ) but... fuck me it's so good.

I've never been a Flash evangelist. I think a recent post I made on FK.games was the first time I've ever really bitched about what Adobe are doing ( And that was in the light of the windows release of Unity in comparison with the upgrade cost to CS4 ).
Basically I couldn't care less. I do like using Flash, but it's just a means to an end, it's a way for me to make games that can generate an income, a tool to do a job.
I'm not passionate about it.
I am passionate about making cool games though, albeit doing that within business constraints ( It is my job, so I can't just go off and do some GBA homebrew just for the hell of it ), and Unity seems to be far and away the best solution to that.
( I'm so glad I've not spent money upgrading to cs4, which is quite an indictment really seeing how I'm professional Flash game developer )

As a quick update to X++, nGFX was sick last week ( Well he was in bed with his nan, and that's pretty fucking sick ! Thank you ) so he's behind on things which means we're a little bit behind on where we want to be, although it'll be in selling limbo for a while even when it's done so I think the next update may just be a "Look it's live, tell us how much you love it" post.

Squize.

Wednesday, March 25, 2009 8:25:00 AM (W. Europe Standard Time, UTC+01:00)  #    Disclaimer  |  Comments [16]  |  Trackback
 Monday, March 23, 2009
Hi all.

Back on coding CE again (at least for a few hours today) after spending a good deal of time coding and designing the backend for MYW, writing a tiny versatile CMS and doing some 3d for X.

So today I'm  going to ask myself why the hell I have done a few things in CE the way I did them (I bet you are a lot wiser now).

Let's raise the question if it is worth to add the extra amount of work needed to draw a hard line between the game's "engine" and the game's UI - for your average flash game.

You may have noticed that neither Squize nor me tend to make out lives overly easy when it comes to games, for some odd reason we both tend to try to give out very best for each and every game (even if it is a pain in the back) - well call that stupid.

Give me a good reason to split game and game (play) UI ...
The best reason I can come up with is: reusability, and it is also the least used one.

In most cases I can come up with there seems to be no reason to really split things, because the game is a one-of-a-kind thing. Even for games that share a good deal of similarites (like Wintertales and LogiMotion), a whole lot of things need to be rewritten in order to reuse the engine.

That leaves the reusability inside a single game. !?

WTH?

Inside a single game? Yep!

A good deal of our games either uses an ingame editor (although not usable by the player)  or uses an external editor to generate the level data. Mostly, but not always they share the same visuals. For instance the editor for Logimotion uses smaller tiles than the game itself (so have room for the tools and don't have to scroll the map). That is a good reason to split things between the UI and the "engine".
Another good reason is when you have a stupid designer and you just code - you know those guys tend to be smart and change the size of the assets as often as you should change your underwear.

So why question that and not do it all the time?

Well, it takes a good deal more planing to really split things up. in an ideal world, the "game" knows nothing about the UI, but it still has to control it (ie. update the score, display infos). In my case this is done using callbacks.
A good example might be a game we did (but still isn't playable online): CC

cc_game_00.jpg
(CC game, using 40x40 tiles)

cc_editor_00.jpg
(CC editor, using 32x32 tiles)

As you're meant to be able to play the game inside the editor (without leaving it), the engine had to cope with different tile sizes and environments.

So whenever the game needs to comunicate with its surroundings I provide a callback method, if I would have made it "the right" way, I should have used an interface for that, but ... hell you can overdo it too.

To make it easier and not having an endless number of callback methds I used only a few and gave them params (which are stored in the game's class as constants: like:

public static const UPDATEUI_INFO:uint = 0;
public static const UPDATEUI_BTNPLAY:uint = 1;
public static const UPDATEUI_ITEM:uint = 2;
public static const UPDATEUI_WIN:uint = 3;

Whenever you finish a level, the game would just call the callback provided for UI updates and pass the parameter needed.

And is it really worth the extra work?
Not always.

I like to spend that extra piece of work for games that require and editor or might have parts in it that seem to be a good start for reusing it in a second game. Sometimes you notice halfway through the project that you need to change something to make the game work again (ie. different tile size, or different UI), sometimes (like I did for CE) you notice that the game will be a one of and you cause yourself a good deal of fuzz for "nice code" only.

Well, lets get back coding CE.

nGFX


Monday, March 23, 2009 11:18:59 AM (W. Europe Standard Time, UTC+01:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Sunday, March 15, 2009
I have that written on the front of my pants.

The penultimate preview of X is online now and panting for you to play it.

New in this are the options screens, which between you and me I'm really not happy about. I backed myself into a corner with using tweens and bitmaps for the majority of the text / buttons, which take ages to actually get into the game.
Once they were in I realised I'd messed up by not giving appropriate feedback on each selection. I should have re-done them, but it would have taken ages and been really boring, so instead I just dropped in a really cheap way to show the feedback.

If there's going to be a part of the game that really bugs me, it's going to be the options. But the rational part of my brain ( As opposed to the part that makes me want to delete the whole game and start again 'cause those options aren't as good as they should be ) is saying that people will only ever got to the options once or twice ever, that the pay off for the look & feel of the game text is greater than losing out on a bit of feedback, and, well, fuck it.

The main thing in terms of feedback about the options is the alternative control method ( Well two actually, but in a lame lazy way ), which to be honest I really struggle to get to grips with. I coded it a couple of days ago and obviously tested it, and after a while it wasn't too bad ( I'm kinda used to EveryDay Shooter on the psp so it's not a million miles away from that ), but since than I've not used it, and having a quick go today showed that I'd fallen out of the habit of playing X that way, and that I really didn't want to get back into it.
Not really giving it the hard sell am I ? Well it's a case of it's there if you want it, although to me the default method is always going to be better.

Squize.

Sunday, March 15, 2009 6:14:09 PM (W. Europe Standard Time, UTC+01:00)  #    Disclaimer  |  Comments [10]  |  Trackback