Monday, May 21, 2007
Ever noticed that computer people do have a thing for Lego?

While waiting for feedback for "High Jinx" and "Hold the Baby" I decided to play with Legos ... or at least with virtual Lego bricks (saves the cleaning up afterwards *and* of course you have all the parts you need)

Virtual Lego?

Yep. Right now I know of two methods to do so:
The Lego way using Lego's own virtual Lego builder. Great thing if you want to build your virtual model with real Lego bricks afterwards, because you can buy the parts you've used online. Only drawback atm is that not all parts are available, so you have to use the "default" ones ...

The "LDraw" way.
LDraw™ is an open standard for LEGO CAD programs that allow the user to create virtual LEGO models and scenes.
Just head over to the download section and get started. I prefer MLCad, which is a great editor (it takes a few minutes to get used to it, but you get things done without looking at the manual)

So I grabbed some of my old model building instructions and just recreated one of my very first Lego model I bought from my own money (and man, did I mow a lot of grass for it):

Here it is: Galaxy Explorer (497-1)
Galaxy Explorer (497-1)1.jpg
just the space ship...

Galaxy Explorer (497-1)9.jpg
... and the whole thing.

May be some fun to render it with Max :)

Happy building, nGFX

ps:
Mehr zum Thema bei Amazon.de

More books on Lego on Amazon.com

Monday, May 21, 2007 4:29:16 PM (W. Europe Daylight Time, UTC+02:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Thursday, May 17, 2007
"Free bar", "Lesbian twins" and "Signed off".

All perfect phrases, but only one of them is making me smile right now.

Yesterday Souper Bowl was signed off. Sweet.

Really pleased with it actually, it's only a small little game ( But then they all are in this project ), but it plays pretty well and looks great thanks to marmotte jumping in at the 11th hour to reskin it.

At present we're looking ok-ish to hit the deadline. I'm in that fluctuating mood, where every hour it swaps between "Yes, we're actually going to make it", and "Cocking hell, we've got no chance, my to do list looks like War and peace".
The controller is looking good to go, I've got one major thing left to do for the beta delivery tomorrow, then I've got the w/end and Monday to add things like send to a friend and set up the translation handling code correctly.

Also tonight I'm going to dive in and help with the skinning up of "Holding the baby", Olli's painting game, whilst he attempts to get "High Jinx" into a fit state to wow the crowds.

Lot's and lots to do, but feeling almost do-able.

Squize.


Thursday, May 17, 2007 8:38:11 PM (W. Europe Daylight Time, UTC+02:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Tuesday, May 15, 2007

It was a puzzle why things were always dragged kicking and screaming. No one ever seemed to want to, for example, lead them gently by the hand.

-- (Terry Pratchett, The Truth [deutsch] [English, US])
Same with some games.
I'm usually pretty solid when it comes to the code layout for a game, depending on the requirements I normally use the "best" way. Normaly. This time the thing got a bit ugly, the basic idea was quite simple, the requirements quite low all in all a short game.

The engine was done in two days, about 400 lines of code and because it all was so easy, I just dropped into an extended MovieClip class. No need for a big layout with a set of classes that divide UI, logic and so on. Normaly.

So now there is a quite cluttered class, lots of ugly code and no real time to make it readable again. Shish!

Anyway, mending the last pieces of it together now (and trying to clean up the 950 lines of code).

nGFX

Tuesday, May 15, 2007 10:14:00 AM (W. Europe Daylight Time, UTC+02:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Friday, May 11, 2007
A brief update from me is long overdue.

So where are we with a week to the deadline ? Feeling like we need two weeks before the deadline.

Souper Bowl is coming along well. It's basically Tapper, but in a soup kitchen. I managed to knock the majority of the game engine out in a day which I was really pleased about, and since then it's been a case of skinning it up, fixing bugs and tweaking the gameplay.
There's one minor gameplay addition to add, and aside from the sounds / remaining visuals / love it's done. Hopefully tonight will see the end of it aside from an hour here and there, and it'll be great to get the first one down and out of the way.

Olli's game is coming along well. The core engine has been complete for a while now ( Even to the stage where he can post code :) ), but we've had issues with the gameplay. It's a pretty original concept, and for a while we thought it was nailed but just lacking visually and sonically and once those were in place it'd all come good. After a lot of chats with the client and standing back from it a bit, we've realised it wasn't there at all.
So Olli's throw a load of new ideas at it which are working really well. It's much closer to the vision I had in my head of how it would play now ( If only that vision had been clearer at the start ).

The w/end is going to be spent sourcing soundfx ( Which I do actually enjoy ) and working on the controller movie which holds everything together. At present it loads and triggers the games, handles the game over etc. but it needs a lot of work throwing at it. Just today we came up with the idea of tooltips within the games just to help people along, and the controller will have to handle these too ( As all the text is translatable, it's better to just have one movie deal with it all and saves each game having to load in their own specific xml file with the text in ).

Lot's and lot's to do. Hopefully Monday's post will be a nice gloaty one where everything is done. Not going to happen, but let me hold on to the dream for a little while.

Squize.

Friday, May 11, 2007 12:34:41 PM (W. Europe Daylight Time, UTC+02:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Monday, May 07, 2007
As promised way to long ago (here), I finally manged to get the brush example done.
Not the best way, not the best code, but an example nonetheless.

(just press the left mousebutton and move the mouse ...)

And the zipped fla (F8): drawexample.zip (6,11 KB)

And for those hwo don't want to d/load the fla ... just the code. You just need this two images set for export in the first frame:
(Brush, with alpha)
(color / pattern)

import flash.display.BitmapData;
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.geom.ColorTransform;

var bmpColor:BitmapData = BitmapData.loadBitmap("color_00.png");                // the color to paint with
var bmpWall:BitmapData = new BitmapData(480, 200, false, 0xc0c0c0);                // a bmp to paint in

var bMouseDown:Boolean = false;
var iPaint:Number = 0;    // "color on brush"

this.onEnterFrame = function ():Void {
    
    var bmpAlpha:BitmapData = BitmapData.loadBitmap("brush_shape_and_alpha.png");     // the "brush"
    
    var iPosX:Number = this._xmouse - (bmpAlpha.width * 0.5);
    var iPosY:Number = this._ymouse - (bmpAlpha.height * 0.5);

    if (bMouseDown) {
        
        // modify alpha ...
        bmpAlpha.colorTransform(bmpAlpha.rectangle, new ColorTransform(1, 1, 1, 1, 0, 0, 0, iPaint));
            
        bmpWall.copyPixels(bmpColor, bmpAlpha.rectangle, new Point(iPosX, iPosY), bmpAlpha, new Point(0,0), true);
        this.attachBitmap(bmpWall, 0); // show ... (not the best way, imho ...)
        
        // Disolve paint ...
        iPaint -= 5;
        if (iPaint <= -250) {
            iPaint = 0; // just resti t
        }
    }
}

this.onMouseDown = function ():Void {
    bMouseDown = true;
}

this.onMouseUp = function ():Void {
    bMouseDown = false;
}




nGFX
Monday, May 07, 2007 10:26:39 AM (W. Europe Daylight Time, UTC+02:00)  #    Disclaimer  |  Comments [2]  |  Trackback
 Sunday, April 29, 2007
This is completely game unrelated post, but I just thought this is worth sharing ...

I finally got the new NIN cd year zero. Glued to the back of the CD was the following, which I found quite amusing:


USBM WARNING:
Consuming or spreading this material may be
deemed subversive by the United States Bureau
Of Morality. If you or someone you know has
engaged in subversive acts or thoughts, call:

1-866-445-6580

BE A PATRIOT - BE AN INFORMER!


I don't think that there's much to add to this ... because it just might become reality sooner or later ...

nGFX
Sunday, April 29, 2007 1:06:26 PM (W. Europe Daylight Time, UTC+02:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Friday, April 27, 2007
Ha! The title says it all, yet again a text only post ...

While working on the current game (the same project Squize is working on, see his last post), I needed way to be able to paint an area in a real life fashion (that is, the paint on the brush runs out just a few centimeters before the end of the wall).

I must admit, that I didn't have much play with f8's BitmapData before, I just don't needed it. Until now.

I just hate it to get into something "new" in the middle of a project, but unlike some of Flash's other new things BitmapData is fairly easy to get into. Except the part where you start to mess with matrixes. I had some great examples which showed a lot of the stuff I thought I need, but I just wasn't in the mood to dig into using matrixes for creating the desired effect.

But there is hope ...
Using 3 BitmapData objects, 2 PNGs and copyPixels with alpha ...

Part of the code:

var bmpAlpha:BitmapData = BitmapData.loadBitmap("brush_shape_and_alpha.png");
var bmpBrush:BitmapData = BitmapData.loadBitmap("paintpattern.png");
        
// mod alpha
// iPaintAlpha is a value from 0 (paint it) to -255 (paint nothing)
bmpAlpha.colorTransform(bmpAlpha.rectangle, new ColorTransform(1, 1, 1, 1, 0, 0, 0, this._iPaintAlpha));
        
this._bmpPaintArea.copyPixels(bmpBrush, bmpAlpha.rectangle,
    new
Point(this._xmouse, this._ymouse), bmpAlpha, new Point(0,0), true);
      
this._iPaintAlpha--;
      


Et viola ...

Instead of using some matrix stuff, I just "alpha" the alpha chanel mask with a ColorTransform and use this to copy the "paintpattern" into the painting area ...

I'll upload an example file once I've reached my current milestone ...

nGFX

Friday, April 27, 2007 12:25:28 PM (W. Europe Daylight Time, UTC+02:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Tuesday, April 24, 2007
The controller is well under development now, and over the weekend I hit the first real snag(s).

In the good old days when as1 was king, you'd create an movieclip and load your external swf into that, and then just call a function directly. Nice and easy.
In the slightly meaner days of as2 it's a bit trickier. Let's load the swf in, now where the hell is the main class that I need to get to ? Arse.

Now I'm sure there is an easy way to do it, a way I've totally missed, but this is the solution I've come up ( And it's as long winded as you like ).

I've made a CrossSWFInterface class, which the controller brings in and creates a new instance of. Now by being cunning I know that packages/ classes are placed in the _global name space when they're created. So, each loaded class just passes it's entry point singleton to the CrossSWFInterface class via _global, eg
        _global.Interface.CrossSWFInterface.setLoadedAPIClass(gameControllerObj);
And because the controller swf is the first one loaded, I know these methods are going to exist in _global by the time the loaded swf sends it's goodness to them.

Then by using static properites in the CSWFI class, the controller class can get all the info it needs from the loaded swf, and visa versa.

Now I'm sure there's got to be a easier, cleaner way, but it escapes me and we're badly up against the clock on this project, so it works and I'll happily admit I'm a dumb arse when someone explains how to do it correctly, but until then I'm happy with this approach.

I did mention snags at the start didn't I ? In my vain attempt to be a grown up Flash coder I use mtasc ( Which is so sexy ). The one issue with it I found this weekend was that you can only ever have one entry point to a swf ( ie, mtasc expects a class called "main" to be there, it's what it calls to run the code in the swf ). You can't change it to anything else, that's set in stone.
This is all cool normally, but I want to create seperate packages within my project file for the games themselves, but I can't have a different main class for each of them ( eg, main_game1 won't work. mtasc just wants main and nothing else will do ).

Cosmic.

But this bad boy came to my rescue, hamtasc. Basically it's a "hacked" version of mtasc which allows you to define the entry point. Never has something so out and out geeky made me so happy.

I'm hoping tomorrow to have the controller in a useable state so I can start focusing on the game I've got to do ( "Souper Bowl". Tell me that's not genius ), so it'll load in and hand over control to the game etc.
I'm getting so close to doing something fun...

Squize.

Monday, April 23, 2007 10:01:17 PM (W. Europe Daylight Time, UTC+02:00)  #    Disclaimer  |  Comments [0]  |  Trackback