• ### Blog Entries

• entries
33
51
• views
12623

Fleet combat of the far future.

## Bleh.

Okay so development hasn't been going so well. I have two reasons:

1. I don't have all the code I already put together and hate re-implementing things that I already spent a lot of time on.
2. I really hate working on a laptop with a tiny screen and dreadful processor.

Well in a month I'll be back on my desktop so that'll be quite nice :D Quite tempted to get a second PC as I really find two PCs, two screens productive at work, more so than one PC with two screens.

Also very tempted at the moment to invest some time in to learning 3DSMax again (last time I touched it really was 2.5) and/or Photoshop. I can pick up a tablet out here that'll be pretty cheap... mmm might do that today.

Just watched two anime series recently, Monster and GunGrave, both of which were pretty cool. Slightly disapointing in the end though. Would anyone recommend any newly released series?

## Batch image convert

Can anyone recommend a good batch image convert program?

I want to resize my pictures to 800x600 or 600x800 and also produce thumbnail versions. I also want it to give them sensible names.

Anyway enjoy this one for now:

Click for larger version.

Edit: If you want a bigger picture then just ask as I have them all at 5MP.

## A random thought

EDIT: "In space no one can hear you scream"

The cool thing about making a space game is that you don't need sound effects.

Of course I think I'll break that rule when I get round to programming some audio. In fact I intend on breaking many laws of Physics that stand in my way. But not gravity, oh gravity, sweet gravity, you shall be one of my best friends.

## Tokyo Game Show

So I think I'll be putting up some photos from TGS tomorrow but in the meantime here's a sneak peak!

Click for larger image.

## Got started

A day of procrastination

Well I spent a lot of today doing things other than coding. Watching anime, cleaning up, going shopping (for food), reading books. I did do bits and pieces in between though such as sorting out my visual studio install, setting up the platform SDK and SDL etc.

A start

I finally got started about an hour ago and I can see myself really getting back in to this. I started working on the data objects and files and decided to go with a very simple CSV file. I wrote the parser and can load up an object quite easily now. I also added a 2D section debug print-out that confirms it is working. Not too impressive I know... I mean I did this all before, but I am actually interested in doing it which is the real good thing.

Next I'll draw some cubes on my screen so I have something to fly around with my camera. Unfortunately I have none of my previous code with me so I'll have to find/write a mini maths lib again and do lots of the boring set-up stuff. Oh well!

My ghetto set-up

This is my current set-up. Speakers were about GBP10, keyboard was about GBP4 but it was worth it over the 50p ones because it's nice and clean, mouse I already had (I hate laptop glide pads), hidden around the back is a 500Gb external hard-disk that was about GBP60 in total. I've virtually turned it in to a desktop.

Oh and notice my C++ book collection (or the ones I could fit in my suitcase). Perfect laptop stand, I was previously using the box on the right which is now home to the standard library documentation :)

## Project Name

Project Name

I haven't thought of a name for this project yet or really given away many details. I guess this will come in the future. Well I've thought of a name and I really like it too:

From Dictionary.com

1. extraordinary in size, amount, extent, degree, force, etc.: a prodigious research grant.
2. wonderful or marvelous: a prodigious feat.
3. abnormal; monstrous.
4. Obsolete. ominous.

Referring to the ships not my programming.. well maybe the last bolded one ;)

I need a better tag line though although my head is stuck on other fiction at the moment so I need to think of something original instead.

## Project Plan

Project Phases

Today I took some time out to draw up a brief project plan. You may have noticed this up the top of the page. The idea is to provide some very simple milestones to get me back in to this full speed and save me planning out every last detail without actually doing any work.

This is very similar to way I do things at work. I tend to figure out each of the features I need to implement and then once I have something working code I re-write/copy it in to a complete skeleton that rigs everything together. Next step is testing and making sure all my error checking is thorough.

Phase A

Phase A is really nothing new, I've implemented all these features before (and in fact most of phase B too) however this phase is just a really easy milestone to hit. I'm *not* going to worry about the quality of the code at this stage and whether it will be good enough for phase X... this time I'll spend time designing the classes fully when they A) become bigger or B) become bound to something else that is growing.

Other Details

I haven't thought of a name for this project yet or really given away many details. I guess this will come in the future.

Side Notes

Remembering how to use a Japanese layout (work computer 1), US layout (work computer 2) and UK layout (work/home computer) is pretty tough especially when they all share something in common with each other and all have something different. Fortunately back space is the same place on all of them :)

Bonus Edit

I took a picture of a sketch I did, cleaned up the edges (almost), then did a colourise on it. I would have painted in sections and applied better effects but unfortunately I couldn't quite do it in the image package I downloaded. Anyway hope you like it... shame I coudln't pull out the detail more. Oh and another sketch of a different ship...

## One year

The Return

So it has been one year exactly since I last wrote to this journal. I think I've been neglecting it a little bit. I had planned to put together some kick ass visuals, plans and general content for today but I never got round to it. Instead I've been writing out my plans and drawing sketches with pen and pencil.

I was tempted to write about what has been hapening in my life but it's really not that interesting (at least to the average journal reader I guess). I'll write about what's to come as that should be more exciting.

New Project

Okay how many times have you heard this one. So far though I've been working on lots of mini projects and I've finally decided I'm ready to start on the big one that I've had in my head for 5 years. The fact that I've only seen one thing vaguely similar is reassuring and I really hope people will be interested in it. Got to get some materials ready though before I announce it here.

I'll also try and create a good format for my journal with pics/design/discussion/code all taken in to account.

Other Stuff

* I'm in Japan now.
* I'm going to try Open Solaris out.
* Lots of other stuff here but too tired to think after work.

Journals

Am I the only one thinking that the journals haven't evolved (feature wise} in quite some time. They serve their purpose well but they could do so much more. I'm thinking of what marketting people call Web 2.0 but everyone else knows is a cludge of technologies. I mean cludge in the nicest possible way. There's some things that don't belong on a facebook profile but could on a gamedev journal/profile.

Here's some ideas just to get you thinking.

+ Personal Image Gallery
+ Developer Networks/Teams
+ Surveys / Voting

It's not really needed but you never know...

## Custom Controls

I managed to put together my first useful custom control!

It doesn't look like much but quite a few hours of work went in to that. If you knew what you were doing I think you could create that in less than 15 minutes and hopefully one day even I'll be able to do that.

This is actually a control I'm going to use in a config editor utility I'm making for work. It allows you to collapse or expand blocks of configuration so that you can read through the file more quickly and get to the bit you want to edit. Hopefully I'll also find a use for it related to games :)

## .NET System::Windows::Forms

I've decided to pick up some window forms skills. I had a little play with it when I first downloaded vs2005 express and was quite relieved to see how different to MFC it was. I'd always avoided MFC like the plague and did a little Win32 programming, just enough to get by, but I've always wanted to know a little bit more.

I picked up this book:Programming Microsoft Windows Forms

and I've had a quick read through and it's quite good! It's not as meaty as some other books but it's also not just a reference which is exactly what I wanted (I've got MSDN for that and so have you!)

I'm planning on building a little application for work to start with that should cover all the components I need and then hopefully I'll be able to build tools a lot more quickly.

## Title screen

Well here's my title screen mock-up! Just like the previous mock-up I'm going to cut this up and make all the elements that are needed for it.

Edit: Changed to .jpg for filesize love!

Quite simple one this, just a back-drop on the screen and then four player join 'objects' that flash when a player can join and change to another image when you actually do join. Not sure if I'll make it a button like X/Y etc to join and start once you've got all the players but that's easy to change later.

## Anyone else like Drum and Bass?

So I'm tempted to put a drum and bass soundtrack to the game that has made a nice leap in progress over the weekend. I've got a lot of the elements in place but it's just a matter of weaving it all together in a maintainable way.

So who here likes dnb and what kind of stuff (old, new, popular)?

## Thank you Compuserve

I remember when my e-mail used to be 106034.1716@compuserve.com, well thank-you for the animated .gif technology!

The code behind this is a lot more robust than this lets on but more on that later...

## Start the Fight

Behold a might sword fight... I wish I could show you a video of them fighting instead!

Green Halo effect entirely unintentional...

## Woo Me!

Updates have been slow but that's because I was approaching race day!

Yesterday, I competed in a charity race with most of the major companies in the City, the JPMorgan Chase Corporate Challenge.

I finished the 5.5km race in 33 minutes which averages out at 10kmp/h so I'm pretty please. I think I could have ran faster but seeing as this was my first race ever I'm over the moon :) back to some development I think.

## Tricky Hackery

General Update
Phew. Just saved myself from hitting the bottom of the journal list. Progress has been slow due to last minute running training and a spate of nights out with friends (yes the two do contradict each other in their goals)

I have wrote approximately 50% of the State Manager / States infrastructure however I've had a great idea and I'll need more time to investigate how to do it.

Procedurally Event-Driven

So I push a state on my stack, great. Now I come to pop it but where should execution continue? Well the obvious way is that it drops in to the state that pushed the last state on to the top and continues processing from the beginning. Wouldn't it be nice however if I could make it look a bit more procedural?

//Other State update code above//Create a new state and push itOtherGameState A = new OtherGameState(params);m_StateMngr.push(A);//Code execution continues here when the state is popped

Which means I don't have to have States store State Status information. This could be bad though because what happens if a message is propagated down the stack and it hits this bit of code again, we could end up with an interesting order of execution.

There's two ways I could achieve that but the most obvious one is using recurssion and an event loop specific to the state.

m_StateMngr.push(A) would effectively call a function in the StateMngr called RunEventLoop() which works off the top state on the stack. Popping the state would drop it off and then it'd naturally drop down in to the state below's event loop. Mmm I like this idea...

## Another unexciting update

Unfortunately I'm in work at 7.30am to make sure the changes I made on the servers last night don't break everything. It's in one of the most important processes so even 10 minutes of downtime would cost tens of thousands of pounds. It all works though unsurpisingly (I did only change one line of code)

I thought I'd take this oppurtunity to update my journal but yet again I don't really have anything to add. I've been doing a lot of thinking about how the game should be structured in terms of data and no great solution springs to mind. Let me take you through my current thinking

Game States
If you've hung about in the GameDev.Net forums for any length of time you've probably heard someone suggest using Game States and a State Manager. I agree with the general sentiment and think it's a great idea however I'm trying to work out some of the finer details.

First let's paint a picture. Here's some example states and how they should work.

(2). Gameplay

Now the Game starts in State 1, that's fine. When you switch to state (2) by popping it on the Game State stack then it should take all responsibility and nothing should be passed down the stack to state (1). When the player hits the In-Game Menu key however we want to draw that on top of the Gameplay and still have the Gameplay state update. I'm toying with something like this, please ignore the silly long names as I've just made them up now for the example.

class InGameMenu : public GameState{    void Render();    void Update();    ...}void InGameMenu::Render(){    PropagateRender();    MenuRender();}void InGameMenu::Update(){    PropagateUpdate();    MenuUpdate();}

Now the Propagate functions will be part of the State Manager and will pass the Update/Render message down the State Stack so effectively doing a PropagateUpdate(); in the InGameMenu State will call the Update() in the Gameplay State. Therefore I can have a menu up with the game still going on in the background.

My questions are:

How should the States know about their Manager? Do I store a pointer in to the manager in every state, like a Registered With Pointer? Do I globalise the State Manager (ick)...

Each State will have it's render specific code but should it use a generic renderer task which you pass in to the state Render function?

I think I know what I'll do but if anyone has any suggestions I'd appreciate them greatly.

The Bigger Picture

So I have States... now my tasks love states. Main Loop.

GameState * pState = StateManager->CurrentState();pState->Update(pLocalClock);pState->Render(pLocalRenderer);pState->ProcessEvents(pEventInfo);

Now if I change State then my state just has to push the new one on the state.

//Init the State and then Push itPushState(pNewState);...//State finishedPopState(this);

But what if I want a state to persist? Perhaps I should be using named states with a persitent variable? So many questions :-)

Also the Main Update Loop is also a state! My main program just needs to initialise the StateManager and pop on the Main State. Then I can have the local data contain all the tasks like updating, rendering, time keeping, logging etc.

## Busy

So I've been ultra-busy with work the last few days and haven't had much time free at home either :/ I did manage to get about 20 minutes in last night to draw the basic screen elements and start writing some of the base code. Next Update will be more meaty though!

Didn't get half the stuff I wanted to get done finished this weekend because I decided to hang out with friends instead and go to the park to play lots of football. I also watched the football... Italy, what were you thinking!!!

I did manage to get a small thing out of the way which was satisfying, rendering my player status boxes properly. I had to download the GIMP-2.0 to add the Alpha information though as my other graphics tool didn't seem to add the Alpha Channel properly.

I heartily recommend this little tool: glSandbox v0.94 - Codehead 2005 - www.codehead.co.uk
I advise you avoid this website as it seems to be trying to sell free software: http://www.wingimp.org

## Fundamentals

Just a quick update to say that I'm finally going to write the base for my game rather than hacking in everything as I go. Fortunately I haven't done too much yet in terms of code so I haven't forced any design decisions on myself.

So let's see:

Resource Management: Create Resource Manager, Handles and re-factor the Texture Manager to use the new format.
State Management: State Pattern.
Object Creation: Factories.
Creating distinct Tasks: Input Processing, Rendering, Game Logic.
Logging and Profiling(framework for future projects).

It's basically going to be patterns galore.

## Ivory Towers

If you've seen the news today then you probably know about the ridiculous spending on the NHS IT programme. The estimated cost runs to GBP20bn and it hasn't even been delivered yet! Doctors also have criticised the system for not doing what it needs to.

I have to wonder how they've managed to spend so much money on this system, it's unbelievable but I can see how the budget has spiralled out of control. It's actually reminiscent of the out-sourcing era when big companies would ship their development to countries such as India. Most of them have now realised that the costs get out of control as they have to make constant revisions of the software because it follows the spec too tightly.

Developers get out of your Ivory Towers, you need to be Business Aligned. No that's not fancy business speak, it simply means you have to work with the people who make the business. In the NHS that would be the Doctors, Nurses, Clerks and so on.

I'm fortunate to work very close to the Business and a lot of feedback goes both ways. This means that very little time is wasted developing useless solutions. Yes I have thousands of lines of code that I'd love to review and re-engineer in to a super solution but I don't because we have something that does the job. It's not such a mess that you can't extend it sensibly but it's not perfect. Evolution has shown us that there's no such thing as perfection, if you grew to live perfectly at 20 degrees celsius then your species wouldn't last 10,000 years due to global warming/cooling.

Sorry bit of a rant!

## It's an Omen

Before I kick off with an update on the game check out this:

666 baby! I've actually had paranoid people at work tell me I'm not allowed to use that number for test data!

Time Used
Yeah it should really be Time Used... so far it's 2 hours 50 minutes. Another 30 minutes and again graphics sucked up my time but I think you'll agree that this was time well spent.

Progress Summary
I decided to throw together a quick composition of what the screen will look like during play. I think this goes a long way to identifying what the game will be like and it's really motivated me.

You can see the health bar and power up bar for 4 players here! I'm going to work on composing each of the elements in openGL next. I also dropped on some fake score text. The Level will sit in the middle as seen in the previous screenshots but with a better camera angle. I may well leave a black border as then I can add some cool effects like the whole room shaking about or rubble flying off level. We will see. The Status bars at the bottom look a bit wrong because I didn't flip the health and power up bars graphically.

Next Goal
I still have the base architecture to do but I'm avoiding that for just this moment. I may well get these status bars in game so it starts looking more like a game (without the text) or the other route is the underlying architecture then the entity code so you can start moving stuff about. Lots of options open to me now so I can do what I feel like at any given moment.

Input Poll

Would you be happy with the following control schemes:
2. Keyboard and Mouse.
3. Other 2 Analog stick controller.

## Whoops

The Issue
I'm quite fortunate in that the consultant testing my deployments (pre-release) works in the same office as me, in fact probably only 10-15 metres away. He's working through my latest update at the moment but earlier he found a problem.

We sat in front of my PC and recreated the issue and we both thought this has to be static data. I logged on to the Database (using our custom tool) and yes, that was the case so I quickly set-up the data as it should be. Re-test: fail... uh-oh... so I start digging in to the logs but everything seems fine but it's still not working right. So I whip out the code and start testing the function that seems to be getting the wrong value.

After 30 minutes of frustration I suddenly realise that the data I entered hasn't made it to the server... what's going on... oh no I've been really stupid. I'd updated the Dev database instead of the Testing database!

Fortunately we both had a good laugh about that, it meant that there wasn't a rather major issue in the code update.

## Something to See

Time Left
2 hours 20 in to the build... only another 30 minutes today but I managed to use them quite productively.

Progress Summary

I started by loading in my level format with a .raw file generated in my graphics program. Unfortunately it went a bit beserk as you can see in the first screenshot however I was certain it was right so I handcrafted a level file and it loaded properly. I tried to reload the original file in to my graphics program but that wouldn't have it either... something went wrong with that file indeed!

Next I added the draw code for walls and floor and renderer them in wireframe. It took me a while to get it just right as I kept mixing up the walls and floors... a very silly mistake. There's a lot more faces that needed there for sure and may well remove the faces that are hidden and combine others but for now it's just meant to be quick and dirty.

The first attempt at texturing was a failure but a very obvious one, I'd forgotten to specify the texture co-ordinates! So with a quick fix up everything was displaying as it should do. I was quite happy with my plugin texture manager as I just had to create the object then load the two textures and bob was my uncle. Interestingly it also loads a null texture so if you try and fetch a texture by name and it doesn't exist you get a handy yellow and black stripe pattern instead showing you the mistake visually.

Then I pasted my sprite on to the image just to see what'll look like. I also drew a black pixel border around one of them as suggested by Ravuya and it does make it look better by far! Thanks for the hint! It's certainly looking all a bit grey... investing time in graphics right now though is a no-no as I've seen how much time they can sap up.

Next Goal
My next goal is to sleep as I'm up early tomorrow but for the game it'll be getting the base architecture in place. It was a pure hack to create all the objects in place so I need to figure out what owns what and how something navigates through the object tree as such.