• entries
18
20
• views
8919

## Title page

I finally added GUI elements and limited flow control to the event scripting language which means I can now have a title screen for the game.

Not long now and I will have a fully working first level. :)

I felt the need to add more effects so I updated the particles for the alien explosions - the death particles are defined in the alien's script file and in this case there are two particle emitters created on a death.

I also added a 'spark' effect which I have hard-coded into an Alien death to see what it looks like.

Oh, and I added a star-field to the environmental system.

Video

Pretty soon I have to stop adding special effects and actually start creating levels for this game.

At least I have a name now... OVERLOAD (okay, a work in progress but I am really have difficulting coming up with a name for this game).

I have been giving some thought to the problem of detecting you are about to hit something when the ship is at the left or right extremes - I am heading towards a hud based overlay that shows a reticule over the thing directly in front of you that shows just how close it is. Its that or remove the funky camera system - and I like the camera system as it is!

P.S.

Just in case anyone is interested - this is what the script looks like that defines an 'alien'

# The first actorName FirstActorXSI Alien1.xsiScale 1.0MaxTurnRate 300.0Navigation PATHSEEKERPointTo ANIMATEDSpinVariables 2.0 0.0Glow 0.0 1.0 1.0Shadow 3.0 2.5 3.0CollisionSphere 0.0 0.0 2.0Type ENEMYPathEndEvent SWITCH_TO_MIDDLE_PATHPathEndEvent1 SWITCH_TO_END_PATHPathEndEvent2 DIESpeed 15.0AddDeathParticle BulletExplodeAddDeathParticle Frax1 Bullet AlienBullet# End of the first actor

## Wooa... lef..., no... right.... no... LEFT LEFT LE

I added some more 'environmental' stuff today in the form of plynth1. Each level has a set of classified environmentals the form of which can be altered through the event script.

In my first test I had quite a short release delay which meant that the level became quite crowded. Now, this is clearly too much for an early level but might be nice for a later level. It however did show the need for some kind of visual feedback system to alert the player they are about to bump into one of these environmentals.. maybe flashing them red or something. Otherwise when you are looking at the players ship to the left or right its quite difficult to match up whats heading directly towards it. My current thinking on this is to simply raycast directly ahead in an acute cone and mark off the closest to the player

As usual - here's a video of it in action:

Video

Note, the player doesn't collide with anything yet - good job as I would have been dead rather quickly!

## Finished texturing

Yay... finished. I have probably over-cooked it, but then again, its the only 'detailed' model in the game so why not? :)

Here are the final images of this texturing adventure. The texture map is high-res in this version just for ease of editing - the final in-game texture will be a lot smaller (and probably lose the detail I spent so long putting in):

## Untitled

This is harder than I thought it would be. I have found an all new respect for the many artists I have worked with throughout my career!

It's very tempting just to cave in and go for a simpler 'tron' style.

## Untitled

Modelling done - now comes texturing. Not finished - but this is how it looks so far:

## Time for some artwork

Today I decided to bite the bullet and create some artwork for the game. So I started on the players ship.

Now, I am not an artist so this will be an interesting process as I learn to model in 3D while also learning XSI.

Here's what I have so far (I am working on one side of the model at a time and in the end will mirror the model to create the whole):

## Positive reinforcement in action

I couldn't just sit still after adding the dynamic text system so I had to put it to use. The first usage is to display the score you get when offing an enemy. The type of morph used is configurable and I aim to add colour effects later to help distinguish one piece of text from another.

I may have to start issuing epilepsy warnings with these videos soon - getting a bit wild on screen now - and there's more to come!.

Video

The fade to black thing half way through is a simple 'tranistion' animation that is going to be used to mark one level from another or progression through the front-end screens.

## Mighty morphing positive reinforcement

While working on our PSP game our publisher kept insisting on us putting in 'positive reinforcement' messages to let the player know that they are doing well. At first I wanted to put my fingers down my throat and gag for a while - but after a while it kind of grew on me and its kind of nice to be told that you are doing well or that you suck.

So, I decided that I would include such a system in this game to give the player messages and to report the scores gained for offing some enemies.

Mighty morphing positive reinforcement in action

After watching Jonny Mnemonic I have decided to model the lightning on the type seen during his journeys throught the net. Not done that yet - but its in the plans.

## First pass at some environmental effects

One of the environmental effects I want to add to the game is 'lightning columns'which the player has to dodge. Here is an example movie of the first pass of these effects going in.

Note that this is very first pass, as in only just got it up and running - for example z-order is not being preserved and the look and feel is bound to change.

video

## I always forget sound

Its fatal..

I always forget sound.

Now, I already have one of these

but to be honest I can't play a keyboard to save my life - but I can come up with little sequences.. so I needed a decent sequencer, so I got

Now, why get a second keyboard? Well, mainly because I code on a laptop downstairs and the Karma is a bit too big to put up in the living room but the MicroKontrol is small enough to be on my lap and it works so well with Reason.

On the coding side I have been adding environmental stuff - starting with a column of lightning that has to be dodged. At first I am implementing it with normal lines but I think I am going to have to go to thick line rendering to get the kind of effect I want.

I also fixed the bullet collision so that the enemy actors can now be killed. Here's an updated video
[/Edit]

## to encrypt or not encrypt

One question I have been toying with is what to do with the data files to my game.

My ultimate aim is to make some money of this game if possible because my day job is due to come to an end at around about June next year when the game the company is working on is released on XBox 360, and my biggest ambition in life is to become an 'indie' developer like my another ex-Lionhead co-worker Cliff (www.cliffski.blogspot.com - go and buy a copy of Kudos or Democracy!).

Now, as I mention below the engine is totally data driven which means by altering the main event script they could effectively turn the game I release into a totally different game. However, I also like the idea that people could mod the game and release their own levels - creating a sort of mini-community (I can dream can't I?)

There is also the issue of online scoring - if anyone alters the scripts they can make the game easier to achieve a higher score. One possible solution to this is to somehow checksum the released script and if the script the game ran with does not match the released script then the score doesn't go to the online boards... but then that screws up any (*ahem*) patches that are needed.

Just in case anybody is interested here is the script I am using to develop the game (its not a long game at the moment - been concentrating on finishing the core tech):

# --------------------------------------------------------------------# Global stuff# --------------------------------------------------------------------# Turn on fogEnableFog# --------------------------------------------------------------------# Debug zone# --------------------------------------------------------------------#Goto LevelTwo# --------------------------------------------------------------------# Level One## --------------------------------------------------------------------# Mark the chapterChapter LevelOne# set the transition typeSetTransitionType FOGPresetForTransitionIn# Clear out the previous level dataClearActors# Install actorsInstallActor FirstInstallActor PlayerBulletBasicInstallPlayer PlayerInstallActor AlienBullet# Set the overlaysBitmapOverlay 0.0 0.0 1024.0 32.0 Game\Textures\ScoreBanner.tga# Set our background#SetScrollingBackground Game\Textures\Wires1024.png 0.0 -0.36 0.0 0.0 3.0 3.0SetScrollingBackground Game\Textures\BlueLava1024.png 0.0 -0.06 0.0 0.0 0.6 0.5# Place the playerPlacePlayer 0.0 0.0 0.0TransitionInWaitForTransitionCompleteResetClock# Set the emitters to spawnSpawnEmitter 0.0 1.0 10 Path_1 Path_2 Path_1 FirstActor# Attach some firing patterns to the last emitterFire 0 ONE_SHOT 1.0 0.0Fire 1 ONE_SHOT 0.8 3.0Fire 5 ONE_SHOT 1.5 3.0WaitForAllActorsDead 1.0TransitionOutWaitForTransitionCompleteResetClockTransitionInWaitForTransitionCompleteResetClockSpawnEmitter 0.0 1.0 10 Path_2 NULL NULL FirstActor# Attach some firing patterns to the last emitterFire 0 CONTINUOUS 0.3 0.0Fire 1 CONTINUOUS 0.3 0.0Fire 2 CONTINUOUS 0.3 0.0Fire 3 CONTINUOUS 0.3 0.0Fire 4 CONTINUOUS 0.3 0.0Fire 5 CONTINUOUS 0.3 0.0Fire 6 CONTINUOUS 0.3 0.0Fire 7 CONTINUOUS 0.3 0.0Fire 8 CONTINUOUS 0.3 0.0Fire 9 CONTINUOUS 0.3 0.0# Dont proceed untill everything before us is deadWaitForAllActorsDead 1.0TransitionOutWaitForTransitionCompleteResetClock# --------------------------------------------------------------------# The end chapter## --------------------------------------------------------------------Chapter End# End of list

## Need a name!

The core game code is complete. All I need to do now is add the nice bits - environmental effects and other such candy before getting down to adding all the content.

So, I thought to myself 'I know what, for a change I will work on the title screen'*

And then it hit me - I don't have a name for the game.

Take a look at the very incomplete game footage and come up with a name for it and get yourselves into the credits :)

* - The engine is data driven so in reality it doesn't know the difference between a title page, options page or even in-game... its all a script to it...

## A small video of my home project

After sorting out the fixed frame update issues I finally made my little movie. Usual disclaimers (i.e. programmer art and by no means finished code) apply:

members.gamedev.net/yetanothergamemaker/t.avi

## Defeating lag

My day job involves writing the multiplayer code for a XBox 360 shoot-em-up game over Live.

My biggest hassle revolves around having to deal with Lag.

Now, normally we can tailor the multiplayer side of a game around the fact that it will be played on a network with some bad lag. This might involve lowering the number of actors or applying some special rules to help get around some of the technical issues we encounter - all aimed to giving the player a smooth ride.

However, by a sheer accident a single sentence was left in the design doc that committed us to implementing full co-operative single player levels over live - and to make matters worse our publisher announced this at a trade show and on television.

So, rather than go find the nearest oven and stick my head on gas mark 7 I rose to the challenge. Now all I have to do is come up with a method of coping with hundreds of actors on the screen at the same time with 2 players running around shooting them.

How do we keep all those actors in sync? Well, for the most part we can rely on events happening on both sides to produce the same results on both sides as long as no random values are used - or if they are used it is the same random value. Another method I will be using is deferred actions.

A deffered action in our case is the server saying to the client 'in 3 seconds I am going to launch a new beastie - you do the same'. If the server/client handshake has sucessfully negotiated what the lag time is then both sides should launch the beastie at the same time.

All I have to cope with now is actors tracking the players and players shooting actors.

It's all fun at the end of the day...

Thanks for the welcome people!

http://www.gaffer.org/fix-your-timestep

my version is not identical (I don't lerp states for instance) and to be honest - this is the first round of this going in - I will see how it handles before going further.

Here's the code I used:

void CTitle::FrameUpdate(float fTimeDelta){	// Add the delta to the record	CSystemInfo::AddFrameDelta(fTimeDelta);	// Clamp the delta if necessary	if(fTimeDelta > 0.25f)	{		fTimeDelta = 0.0f;	}	m_fAccumulator += fTimeDelta;	while(m_fAccumulator >= FRAME_DELTA)	{		m_fAccumulator -= FRAME_DELTA;		if(CSystemInfo::ShouldWeBeDisplayingAScrollingBackground())		{			CScrollingFullScreenQuad::Update(FRAME_DELTA);		}		if(CPlayer::GetStatus() == PLAYER_STATUS_ALIVE)		{			CPlayer::Update(FRAME_DELTA);		}		CEvents::Update(FRAME_DELTA);		CPathDatabase::Update(FRAME_DELTA);		CPathEmitter::UpdateEmitters(FRAME_DELTA);		CPathFollower::UpdateFollowers(FRAME_DELTA);		CActor::Update(FRAME_DELTA);		CExplosion::Update(FRAME_DELTA);		CEmitters::Update(FRAME_DELTA);		CParticles::Update(FRAME_DELTA);	}}

## Fixed rate update

Damn!

After some nagging from an colleague I used to work with at Lionhead I decided to use Fraps to make a small movie of my little game in action.

You know what I found?

The framerate drop introduced by Fraps when recording the movie totally blew the numerical integrators used in my AI update functions - things seeking paths were having a little difficulty staying on path because the steering functions just lost numerical stability.

Where I work currently the game engine uses a 100hz update for all AI and physics. I used to be against this but now I have seen my own numerical instability and what that looks like - I am all in favour of it now.

So, now I am on a quest for a decent method of achieving a 100hz update...