Thursday 30 September 2010

HMD virtual symbology

HMD = Helmet Mounted Display

Remember when Virtual Reality was going to be the next big thing? Seems odd having to re-create something virtual in a game that is virtual, the modern Apache has evolved a bit since the late 1990s. Being able to display in the pilots 3D monocle (yes that's a joke) a lot of data to the crew about targets hidden behind objects, terrain contours. These 'virtual' items are matched 1:1 with the crews head movement unlike a lot of the symbology that is static.

The first one we're going to look at is the "head-tracker". This is a broken diamond that represent the nose of your aircraft. As you look left you should see the diamond maintain a relative position to the nose of the helicopter. For give my "Novalogic" terrain map.



I had a bugger of a time getting the function to match up to the outside world until I worked out I was missing the aspect ratio of the window (the HUD has a scale factor too in case it's too big or small for your resolution). We're ready to add the waypoint indicators and LOAL/LOBL missile constraint boxes. The flight path indicator is another one, that represents the position of the aircraft in (I think) one second? Have to check my notes on that.

You might see some alerts on the UFD that shouldn't be there, as always it's not final and I know about them.

The cockpit seems slightly offset from the absolute outside world position, now the crew does seem to sit off axis but I'm checking this out. The camera positions are absolute and bang on the X axis zero line of the aircraft and not directly centred on the crew seats. It looks a bit odd otherwise. Looking into that anyway.

*update*


I've corrected the head tracker so it now sits 4.5 degrees below the nose (4.5 is the angle our Apache sits on its current undercart). On flat and level ground, if you line up your head so your LOS reticule (the cross) is in the middle of the head tracker (the broken diamond) you should be looking level with the horizon and along the nose of the aircraft. And you can see this in the above screenshot. Compare that to yesterdays screenshots (above) where the head tracker is at zero degrees elevation and above the horizon.

Mobile Innovators of Tomorrow

It's a sentence I pulled out of context from the recent Unity newsletter. It relates to a Mobile Generation Education Project, a project with a $250k giveaway to help students become the mobile innovators of tomorrow.

Now, when I was a student, we didn't have mobile phones, or the world wide web. And if we did, we'd have moved onto something else by now. Teachers point out that 60% of the jobs their students end up doing haven't been invented yet. I helped develop Risk Assessment software used by Walmart among others, five years later it's old technology. Everything moves so fast in this information age and it's accelerating.

I wonder how much of this social web technology that is perceived to have permanence will be around in ten years or even five. I'm starting to see an effect that could be best described as Dawinism applied to digital data, a process of selection that results in the useful data being retained (at least higher up the search tree) and copied. And this process snowballing with an ever increasing amount of new data.

With amazing concepts of collective information gathering such as Seadragon and Photosynth on the horizon, any guesses as to what the future holds in information mining are just that. If you don't know what Photosynth is then check the link and prepare to have your mind blown by possibilities of this and other forms of data.

It doesn't take academics to come up with these kinds of ways of looking at data, it takes a creative (and ever so clever) mind. Picasso said everyone is born an artist until it's taught out of them.

Right, that killed 10 minutes. I wonder if anyone will be referencing this blog entry when I'm gone from this world. I expect the URLs will have long since died :)

Sunday 26 September 2010

ENG rebuilt

Been pretty ill this last week, progress has been sporadic. I took time out to rebuild the engine code so it's now the same for all Apaches, AI and player alike.

Pilot feedback from screen-shots and videos also allowed me to rebuild the whole engine start-up and ENG display page. Automatically switches to in-flight mode. Things blink, change colour, are boxed appropriately. Couple of bits left to do, the biggest headache was dealing with all the fiddly scale changes and adding new code to simulate power transfer which needs some attention. Here's the page with some values thrown in to show some extremes. The whole thing is worthy of a tutorial video sometime.

ENG page showing near max ranges

Still have some parts to add to the engine simulation, oil, temp. Rotor speed and torque needs values from the new flight model to work properly but essentially it's just polling values from the helicopters state. Oh another thing I didn't put back in, the actual transient timers, these are counters that show how long you're flying outside of normal parameters which can shorten component life or lead to failure.

The new alert system which I also had to overhaul is ready to drop the betty samples in en-mass.

Will tidy this up tomorrow, look at where we are with the new flight model and see about the Leadwerks 2.40 engine upgrade. The PHY situation is not bad as I thought since we're not using LE for vehicle physics.

Insert usual disclaimer about debug bits and bobs on any images.

*update*

The new MPD functions seem to scale reasonably well across resolutions (the point of switching to vectors for everything).

MPDs at 320x320 low res

MPDs at 1024x1024, smoother edges,
everything in place

Friday 24 September 2010

CH-47D - work commenced

For the record, practical work on the detailed CH-47D interior started yesterday.

The CH-47D is a great machine better suited to the environment in which it will operate in Combat-Helo. The Chinook (prn: shin-uk) is a surprisingly nimble and small helicopter, not the large lumbering giant as is often perceived. What you may find surprising (I did anyway) was that it's about the same size as the Apache. See the comparison image below.

Apache / Chinook size comparison
In Afghanistan, the CH-47 usurped the role of the UH-60, having a larger lift capacity, no energy hungry tail boom, armed protection from it's ramp and door gunners as well as a range of countermeasure devices. It's range, power and speed has saved the lives of many Afghan civilians and troops in the region. Additionally, transport helicopters reduce the reliance on vulnerable road convoys and are important in maintaining remote security outposts.

The AI CH47 will be included in Combat-Helo. If we hit our sales target we hope to release a flyable CH-47D with detailed cockpit and systems as an addon (or stand-alone version - to be decided), as Combat-Helo Operation Pegasus. This will add the CH47 as an option to fly on medevac, armed escorts, insertions, extractions, transport, search and rescue missions as well as a new variant of the counter insurgency campaign.

We feel that this is the better choice, it lets us explore the portalised aircraft technology we started with the Apache which will enable a level of interaction between crew that hasn't been seen in any other PC simulation title to date.

Monday 20 September 2010

BBC's BoB Weekend

Hey it's a blog, I'm blogging. All this talk about fluids.has brought on a nasty head cold. Up at 6am searching for the Lemsip (a horrid lemon flavoured drink with decongestant) and watching "Dogfights" on DVD.

The History Channel series "Dogfights" prompted the next three to four hours of viewing since I realised just how bad it really was from the simpleton "Top Trumps" presentations to the seemingly good idea at the time computer graphics. To be fair I did learn something new every episode but given the subject and use of 'state of the art' CGI to tell the tale of classic air-wars why did it come over as really dull? Maybe current affairs news programs are to blame, their overuse of 3D graphics to portray everything from the invasion of Iraq to Tiger Woods getting kicked out of his house for a case of the "not-wife" has dulled the senses to the point where I really don't care about news any-more. It no longer gets read, watched or listened to. My mornings are happier and stress free since I'm no longer aware of what the children are up to in Westminster. The media seem to be outraged for me, it's one less thing to worry about.

The downside of forgoing traditional media is a sense of isolation. Feeling I might have been missing out on the recent Battle of Britain events I decide to check out what the BBC have been up to for the 70th anniversary.

*pause to drink my  Lemsip - yuck*

Back again.

Horray. The BBC declared war on boredom as the Battle of Britain Weekend has given us a season of themed documentaries, dramas and ...er...entertainments.  The first and one I recommend to everyone to catch is a fascinating film based on the book "First Light" by RAF pilot Geoffrey Wellum, at just 18, he was among the youngest pilots who saw combat and subsequently wrote his memoirs which I must read after watching this erm, docu-dramatainment film. It charts the slide into "VoidComp" (no compassion, the first of two Blade Runner references in this blog post), loosing your humanity and identity through combat on a daily basis.

http://www.bbc.co.uk/tv/comingup/first-light/

Geoffrey Wellum was also in the BBC's "The Battle of Britain" documentarytainment 1hr 30min special in which Colin and Ewan McGregor try to ... I'm not sure what. Trace the steps of those pilots? Train up for a once in a lifetime joyride at the controls of a Spitfire? Establish the significance of the events of August/September 1940? I'm not clear what it was about but features lovely photography of Duxford and classic aircraft. Colin is like what Ewan would be if he grows up (and I mean that in a good way). The look on Colin McGregor's face after his flight at the controls of the Spit was priceless. And a great 3 point landing with no bouncing down the airfield.

http://www.bbc.co.uk/programmes/b00txy2q

Not much more to add, except a plee to all documentary makers.

If you're going to raid photo archives for genuine images, is it really necessary to add that off-putting 3D panning effect to EVERY SINGLE BLOODY ONE? You're not making Blade Runner, clearly they weren't using Holographic technology in WWII, photographs only move if you're attending school at Hogwarts, so please lay off the effects that draw attention to your software and not the subject. There's no replicant hiding behind Winston Churchill, Hugh Dowding or Sir Douglas Bader.

I should know, I was just seven years old and in short trousers when I met Douglas Bader, I vaguely knew who he was from my fathers stories. My father was not a pilot, but he was in the RAF doing what he did best, build things, repair planes, make do, valuable skills for the war in North Africa. While posted somewhere in England when Duggie needed some change for the pub phone, my father was there to loan him that sixpence. Which was never returned I should add. Not that this reflected badly on his character, Duggie was often legless in or even out of the pub (as he would be the first to joke). Both have since passed away. But bless the BBC for letting us remember those who have passed on in such a way that celebrates the present.

Through the experiences of those before might we learn something about ourselves, if we care to listen. Watching "Dogfights" you'd be forgiven for thinking that all you needed to win was be a great pilot. It's a blinkered armchair general point of view that lacks any basis in reality. In "First Light", Mr Wellum reflects that it didn't matter if you were a good pilot or a great pilot, you just had to be lucky.

Never a truer word was said.

Sunday 19 September 2010

Hydraulics - lifeblood of any modern aircraft

Time for another dull dev blog. This time, the exciting world of Hydraulics which I didn't know much about except what I can gather from various books I have laying around.

Hydraulics are a game component as it effects how long you can maintain control in event of  damage to your controls or hydraulic lines and it also powers gun turret control. Controls are not direct in modern aircraft, due to the amount of force required to move a large surface area on an aircraft weighing tons, human muscle has been replaced by a system of wires, pipes, pumps and actuators.

Pressure within this system is vital as it translates a pilots control movement into control surface movement, on a helicopter the cyclic (joystick) operates hydraulic servos that move a large ring under the main rotor called the "swashplate". Wikipedia (swashplate)

I digress.

To simulate damage to this system, we need a basic simulation that isn't too complex as it needs to work for all AI helicopters in our main update loop. If the hydraulic pressure drops then control response has to become "mushy", you should feel this if you're flying a damaged bird. Additionally this should give the AI flying as it's virtual control inputs lag potentially inducing poor looking oscillation. More experience AI crew having faster input response times should be able to handle emergency situations better.

From time of loosing pressure, we're going to give you around 20 minutes to land, your mileage will definitely vary. The ACCumulator stores around 3000psi and is a buffer that maintains the pressure of the primary (PRI) and utility (UTIL) system pressure. These two systems, PRI and UTIL are pressurised from the APU and used to start the engines.

This is reflected in the ENG page during startup. Start the APU, watch the pressures (there's a bleed metric for damage to the system and a fluid level as a percentage). As soon as the primary system reaches around 3000psi (there's a bit of fluctuation added for authenticity) you're good for engine start.

I think this is where the LOCK position of the rotor brake gets it's pressure from.

Almost everything in the Apache is automatic here, operation of this system is handled for you with some exceptions. We have a big Emergency Hydraulics button in the cockpit, pictured below. This allows fluid from the accumulator circuit to flow into the utility circuit. After that, you're on your own.



The things we have to do just to get three numbers up. Oh, and don't get me started on oil pressure ;-)

Thursday 16 September 2010

TADS/PNVS Stow


I wasn't sure about the STOW angles so I set the PNVS to 165 inboard (0=along the nose) and TADS 180' inboard. Activated via the NVS mode switch in the cockpit (or CTRL S). The CPG station doesn't seem to have the noeswheel/NVS panel unless we missed it. You'll just have to play as the pilot if you want to flip the switch by hand.

Switch has 3 position, off (stows the sensors for transitional flight), normal for tracking head movement and fixed for boresight (straight ahead).


The NVS Mode switch is located forward of the engine power levers, left side panel.

Combat-Helo to offer a special 2D mode

That's right. No 3D glasses will be required. Full support for the very latest 2D high-resolution monitors will be included, no additional headache inducing hardware will be required.

(yes I am loosing my mind)

Tuesday 14 September 2010

Give me a sign

Problem with gun camera

I like the idea of having a GunCam view. However it means increasing the texture detail on cannon as it really wasn't meant for up close viewing.


Heh, I have you in my sights.


Trying alternative offsets for the cam to get a good viewpoint. You can see the spotlight on but we don't yet have it deploying from the hull.

Monday 13 September 2010

RotorCam - the stupidest idea in the history of helo simulation

Yup, perhaps the most nauseating camera view is back. One that a still screen-shot and an fps hungry FRAPs recording IMPROVES. RotorCam is like having your brain ripped out by your eye-stalks and soaked in vinegar. A virtual camera is strapped to the underside of blade number 1 and everything else is a blur. Only use I can think of is a debug aid when we get to blade flapping etc.



I'd like to thank Macklebee for helping me sort out the LUA object passing to get this working.
RotorCam for all your video game torture needs.

Sunday 12 September 2010

AD updated his dev diary on SimHQ

AD's SimHQ Dev Diary - Road works

Interesting post on improving the look of the new roads which are meshes exported from 3DMAX using a number of different post processing techniques to level them to our height-map. He touches upon adjusting the height-map to sink roads into the terrain, thus ageing them.


Note that the heightmap images in this post are flipped vertically. If you plan to use them as a map at a later date and get confused then this is why.

Saturday 11 September 2010

Dave experiments with damage visuals

Just got back home and Dave left a nasty sight in my MSN window. No, not another scene of drunken debauchery, actually I have to complain, there's been a distinct lack of that.

We got to discussing visual representation of damage. Different ways we can do this. I write it here so I can remember what we discussed. We looked at some complex set-up of assets for iL2, the results of which are impressive but it hardly makes for an easy pipeline, especially if we want to quickly add more aircraft in future.

After some thinking we boiled it down to two simple options.

  •  The first is application of a damage texture on parts (child objects) of the helo model that match the aircraft's damaged state. And Dave left me the following image, a simple test to check it out...

  • Another technique is decals. Now I've looked at LE decals before and I don't think they will work everywhere on our map due to floating point and surface fighting in the outer regions. These are patches that positioned to be almost co-planer with the surface of a model (like the decals you stick on a model). If they work, they have the advantage in that they should work for everything.

A more complex alternative is a new method of decals using what's called "glyph bombing". What we'd do is have a single texture upon which, in a grid patter is lots of damage and battlescar images. We pass this glyph texture into the mesh frag shader along with a damage map of the aircraft. The shader will splat areas from damage map with psudo-random glyphs of damage. This might look OK to pretty bad depending on textures. I'm quite keen to try this as I want to add such a system to give players some custom paint jobs reflecting game achievements/rank (such as earned 'shart teeth' and other hokey things).



A shader that can be used for multi-texturing decals is already present in LE version 2.40 for adding plaster-work to brick walls. Now 2.40 has some new commands for adjusting LOD ranges, we're almost goo to go to move the project to the new version of the engine.

For now, keeping it simple works and I think the damage texture looks alright.

Thursday 9 September 2010

Units, Events and Triggers

I'm putting together specifications on the mission side of the game. To me, the bit that you 'play' is every bit as important as the simulation side, and while it's taken a back seat for now, things are getting to the point where it's time to get on and make it all work. Going through some of my older material on this, it needs to play like Longbow 2, have the crew management elements from Gunship 2000 and strategy elements from tactical board games on guerilla warfare and a bit of a story element that wouldn't be out of place in a Chris Roberts game.

So where do we start? Units, missions, events and triggers.

Units perform missions, missions contain waypoints, events and triggers. So lets start at the top and work our way down.

Missioneering

Not many will remember the last iteration of my mission planning tool and generator, Missioneer Delta pictured below, circa 2000, seems like almost 10 years ago :/


The plan is to put in something similar onto the command tent terminal you can operate to change waypoints and assign untasked airCREW to helos to carry out listed missions. In some ways this is not unlike Enemy Engaged. Missions are not necessarily assigned to aircraft (they can be), but we'll assign them to the player, AI pilot or crew. Like the arming system, it will be possible for a player to take the role of a commander and assign missions to aircraft that pilots execute. 

You can walk around and choose an aircraft that's not already assigned (see it's info plate when on foot for status). In future we hope to have a selection of helicopters/vehicles (CH-47) but we're focused on the Apache.

When the player boards the aircraft, this is like loading a data cartridge with your mission detailed into the aircraft's avionics. The TSD will be updated with waypoints, times and mission page populated accordingly. First man in sets the mission.

The mission ID# key is set in the vehicle entity. This is reset on one of two conditions, the player has exited the aircraft for 5 minutes or the master zeroise guarded switch in the cockpit is operated. In the case of the latter, a new mission profile can not be loaded until all crewmembers have exited the aircraft.

Mission ID# is just a key reference to the hosts list of active missions which can be viewed on the command tent terminal (connected to the projector).

But we're getting ahead of ourselves. Missions and units need a detailed specification which is the point of this blog entry and my current task.

Running under the surface of the simulation will be the all important campaign engine which iterates through units. We'll take the term UNIT to mean a collection of vehicles, a "group entity". Lets look at an old user editable unit form, take from Missioneer. Nothing really remarkable about it, just happens to be handy.



So we can see some of the basic parameters of a unit. There's a list of entities than make up the unit, a 'formation' which is a list of relative positions that each member of the group will attempt to follow (we'll have some behavioural exceptions to this). An orientation, direction to face when at rest. A name, something fancy and military. Skill level, agression and some factional information.

There are also some timers, our game runs in a real-time 24 hour clock cycle (with time advancement). So unit timers might be relative to an absolute time (world time) or mission time (from dust-off). Timers have an enabled/active status too in case they need to be activated by triggers.

For example, if we want a group of insurgents for player assigned patrol mission to spawn when a player has taken off, the mission engine will assign a MT (mission time) of "00:00:00mt Active", but we might want them 5 minutes into the mission, or not spawn at all except by some trigger, such as a player entering the engagement area.

Or we can set the unit destruction time (just means the de-spawn time). For example, a rescue against the clock, get to them before they are discovered by encroaching insurgent forces. Once depawned, that would trigger a unit removal message  which another event trigger can listen for, signalling a mission fail.

So timers are simple unit level events that require no special handling by an event system. But for our game to handle recognition of a "win" or a "fail" situation we'll need to add a basic "cause and effect", a "cause" being destruction of unit "x" with the "effect" being "mission complete".


Mission Events
  • SpawnUnit (unitID)
  • DestroyUnit (unitID)
  • SetUnitWaypoint (unitID, waypointID)
  • SetUnitFlag (unitID, active|weapons_free|godlike|formation|state, param)
  • SetUnitFaction
  • SetMissionResult
  • SetWorldFaction( factionID, delta)
  • SpawnObject (objectID, parameters)
  • CreateWaypoint (unitID, waypointID, location, speed, altitude)
  • Play Audioscript (script or audio filename)

Mission Triggers (in any active combination)
  • MissionRating (percent, win|loose|draw)
  • MissionTime (+ - secs, MT|LT)
  • UnitDistanceFrom (unitID, targetUnitID, distance_meters)
  • UnitDamage (unitID, damage_percent)
  • UnitWaypoint (unitID,at|before|after, waypointID)
  • UnitStatus (not_in_combat|combat|flee|panic|landing|takeoff)
  • UnitInZone (unitID, zoneID)
  • FactionDelta (factionID1, factionID2, + -value)
  • DiceRoll (percent)

These are enough for the campaign and mission system to generate pretty much most situations.

Now the tricky part is to build the logic to generate seemingly intelligent behavior and entertain missions using this small command set. And here is where we can have a lot of fun.

We could extend the complexity of the logic further by adding a LUA Get/Set interface for the event system. Then user made missions can apply some complex logic. Even creating whole missions from a LUA script. This is not something we want to do at this time. But for the future, it could be done.


Tuesday 7 September 2010

Tonight I have mostly been coding...rotor RPM

Actually the rotor brake system. I'm not really clear what would happen if the rotor brake is off when you move the power levers from the Idle to Fly position. Procedures say DONT, return the switch back to on until the engines are at flight speed (approx 100%). Once the engines are happily settled at flight speed flip the brake off and the rotors begin to turn. Watch the rotor RPM gauge on the MFD until it's in the yellow close to 100% then you're good to go.

Conversely, I'm not too clear what damage might occur when then rotors are at 100% and the rotor brake switch is is turned on. A lot of heat and grinding metal noise? A nasty letter from the Boeing company? Currently I just have it decay the RPM to zero under a constant until I get a better answer.



I added more realism options to the config.xml for control over individual items like startup, targetting, flight model.

OOOH, I just remembered why I was really happy today. AD fixed the road physics problem by using displacement mapping in 3DS MAX. So no hacky hacks may be required for road driving afterall. Well done sir. I knew I was feeling buoyant for a reason. If you want to know what the hacky hack means, the road surface was aligned to the terrain with a vertex shader which moves each point on the model level with the ground (relatively) but physics engines don't know what vertex shaders do to geometry, as far as they are concerned the model is unchanged. So there's a disconnect between what the physics engine updates and what the 3D card renders on screen. Using displacement mapping with our heightmap as source, the road meshes are baked at the right elevations to fit, the physics model and visual model are now united and traffic may now use the roads without any problems.

So, way to go AD. Another cracking solution.

Monday 6 September 2010

I just thought this was funny, I'm for sale.

Inline ads eh?

Sunday 5 September 2010

New video finally ... free flight


Finally a video showing the free flight mode we really wanted to show at Summer Sim 2010. Thanks AD for doing an amazing job of making it all look good.


Sorry about the lack of blade-cam, LUA object reference problems made it awkward to do. Maybe next time.

Crashed helo fish-tank decoration

Never felt the need to keep fish until now. It's a crashed helicopter for use in your pond or aquarium. Thanks Phil (and Rob for sending it on).


This wonder compares to the bizarre "Titantic with inflatable iceberge" bath toy I once found in an English Heritage gift shop.

Saturday 4 September 2010

Camp....insert name here

AD has been working on a new FOB which will be the "other" main camp you'll be deployed at during the course of the campaign.


It's a triangle arrangement used by some forward operational bases. Here the CH47s are ready to be deployed.




And finally..


Don't have a name for the camp yet.

Friday 3 September 2010

Saitek X65 - A Tale of Two Joysticks

I've been using this for testing and making profiles for Combat-Helo since the weekend. This is a really odd stick. It's perhaps the best built joystick out of the box I've ever had the privilege of using. And quite a looker too. The textured metal feel, the metal triggers and even a couple of the HATs. Oddly this level of build isn't consistent with several hats made from what feels like a poor quality plastic. But it wasn't broken or badly assembled, and nothing has broken yet.

If you didn't know, the X65 is a force sensing stick. It doesn't move and is really sensitive to tiny amounts of hand pressure along the x/y and rotation axis. The amount of pressure you apply is translated into a direction. It makes fine control a joy since there are no springs or rubber boots to interfere with your intent. Apart from the plastic hats I don't have anything to say about the stick. Just really nice to hold, use, and with no moving parts it should be reliable. Guiding the Apache in Combat-Helo around for landing can be tricky made easier by the X65.

Then there's the throttle. *sigh*

Again beautifully made except for the dual throttle tension adjuster, a tiny hex screw on the underside made from the softest metal on the planet designed to dissolve on contact with anything heavier than neutrinos. The dual-throttle operation set to the weakest tension setting requires quite a lot of force. More force than is comfortable or practical for a helicopter collective that might require a good percentage of travel quickly. The perfect combo would be a separate collective controller and then just use the dual throttle for the engine levers. Also it has a rather unpleasant sounding 'gloop' noise when operated, like there's a lot of grease inside being moved around. The noises are almost pornographicly sticky.



So we have a super sensitive joystick perfect for fine control. And a near impossible-to-move dual throttle controller that needs to be nailed down (which is why it comes with a heavy steel plate).

All in one neat package. A tale of two joysticks.

Missing lighting knob

Dave, the kids must have been playing "pilot" again, they've gone and pulled off the knob for the standby instrument lighting, make it like the other two rotaries. I'll fix the camera clipping on the seat :)

Weekend video

I know I said this week but will likely be over the weekend, there were some LUA issues I needed to get my head around. As for LUA, I think I'm going to pull out some of the model features I've been putting into the model LUA scripts as it's starting to get in the way when I need to control them in game logic. Reading values and objects back seems to be a dark art, these things may have been fixed, or not bugs at all, but caught between moving engine versions and not much documentation I'm left with having to "land at an alternate airport" just to keep things moving.

Also I want to fix up the cockpit ambient lighting before recording a sight-seeing tour around our version of Herat city. Here's a tasty screen-shot of the Citadel to keep you going.

Wednesday 1 September 2010

Combat-Helo is 1 y/o today

Was exactly a year ago today we started work on Combat-Helo. I really don't know where the time has gone. Happy buffday team, and well done. To commemorate the occasion I dug out one of the earliest screen-shots I could find to compare with one from this afternoon.

And thank you to everyone who's offered kind words of support and encouragement. It all helps.

Sept 2010 - "Herat"



Oct 2009 - "Camp Zero"