An update on where I am with Phase 1. October was crunch-time at my day-job, 2 am late nights were regular at one point. Catching up on the work-item list, as of this weekend I have completed:
Event Manager
Triggers
AI Behaviour (steering core)
AI Waypoint paths
Individual Steering behaviours are in progress, these are the bits of code that describe individual states such as fight or flight, wandering and obstacle avoidance. These constitute the bulk of the core-game features that were outstanding. Currently these are being assembled into a test harness for unit testing. The goal here is to have everything needed to build a set of simple scenarios for the cockpit experience.
Other news
We looked at how much work is required in DCS World add-ons. Extensive LUA work is required but we don't have the resources (man-power) to commit. If the opportunity arises we'll do it but the current priority is seeing through our current project.
Thanks for the comments, feedback and general chit chat on the blog. I promised fewer blog updates and more code time.
I can't believe it, no blog update for a whole month! Time flies.
The book is almost done at my end apart from reviewing the second drafts and peer review. If you're not aware its called "GROME 3.1 Terrain Modelling for Ogre3D, UDK and Unity". Despite the title it's more of a short guide on using GROME with notes on how to export terrains to Unity and other game engines. Squashing it down to 150 pages is challenging. Ideally 200 pages would cover all functions and allow for more in-depth exporting processes, but it's a fixed number of pages. Time moves on, one project is winding down and now we're into September, as promised it's time to take a look at the Combat-Helo project and give everyone who's still following this blog some news on what's going to happen....probably.
Because I'm working full time for a medical software company, combat-helo will only see after-hours work when I resume development. As a result the road-map has to be adjusted accordingly, there simply isn't the man-hours required to complete the existing one, to this end I've broken it down into more reasonable phased releases. This was always the intention however I've reduced the scope of the releases.
One of the ideas David and I toyed with is a spin-off helicopter game for the action market featuring Maximum-Overkill'esq game-play but retaining some of the avionic toys we have in our Apache implementation. The advantage of doing this was getting some credibility, to say we've released something (even if it is not much more than a fancy demo with 'splosions). Some people just want to see some of the stuff we've been doing first hand. Frankly it's not the game I want to make but it's one we could build on. Once that is in the wild we would continue development on the full-spec game in stages. The action-game would have been targeted for Steam and Origin stores with some brain dead title and trailer. However someone already beat us to the brain dead trailer part.
Valve's Greenlight project has deflated my enthusiasm for this plan, regardless I'm committed to seeing it through. But then I'm less than thrilled with how long Combat-Helo has taken; going from a full-time project to part-time, to no-time, now hedging back to part-time. My will focus will be on getting it ready as a cockpit demo with basic game-play and releasing it as a re-branded game. Once this has escaped I will work on finishing the rest of the features. To make it formal here's an announcement.
Work on Combat-Helo resumes on Sept 29th.
The road-map for game releases is looking like this...
Phase 1 - Cockpit demo and shooter
Phase 2 - Multi-player update and fixes
Phase 3 - Editor
Phase 4 - Gunnery Trainer
Phase 5 - Overseas campaigns
Phase 6 - Addon aircraft (CH-47)
It will remain a donation project until we procure a new host 3D engine that can handle the terrain size needed for historical campaigns. The software architecture of our Apache will continue to remain as engine agnostic as possible.
As I'm on holiday until Thursday with some old friends visiting from Denmark we decided to do a kind of "invention exchange". We're geeking out and building a "Bullseye" table. Let me explain, Bullseye is some proprietary research software used in some museums and exhibition stands, it's image tracking software that runs on the GPU and can INDIVIDUALLY track hundreds of little paper targets on the surface of the table in real-time.
It's written in Java and outputs the data via a couple of common multi-touch formats so it can be used by game engines such as Unity3D.
The hard part is calibrating the cheap and nasty camera equipment since we're using cheap stuff we can find around the house but as this is a prototype quality isn't an issue.
Today we're converting an old MAME cocktail arcade cabinet to use as the table. We'll fit a relatively inexpensive projector (around 200 UKP) under the table to project the game onto the underside of the table.
The little paper Bullseye targets are glued under objects (LEGO works fine but you can use model tanks/Battletech/Star Wars figures etc). The web cam under the table sees the shadow of the target and the Bullseye software sends the filtered camera image to the shader on the GPU. This scans the image for the geometry of the targets and writes the information to a small texture. Each target has an ID, position and rotation value. Fingers and other shadows will be tracked as objects with NO ID or rotation. The rotation is worked out from the shapes on the outer circle. The inner circle contains a binary representation of the target ID.
Tracking over 64 objects at 10 fps using a $10 camera is reasonably OK so long as the calibration is fine. As you increase the camera resolution and frame speed you can track more objects. One of the tables built already by the Bullseye developers is fast enough to run a virtual air-hockey game using some very expensive cameras.
For our prototype we're going to try and put together a simple Apache helicopter arming table and send that data into Combat-Helo. Failing that a simple snake or sound game. As time is running out we need to get a move on. More updates as we go.
Information on TUIO protocols and multi-touch displays can be found here http://www.tuio.org/
Had planned and written a blog update to go out this weekend however some of the details I anticipated would be in it are still to be confirmed.
So here instead is a 30 second video of waves in Leadwerks engine I recorded earlier while working on water in various 3D engines. Normal service will be resumed as soon as possible.
(Actually I leave this scene running while playing Art of Noise in the background)
Last month I didn't have a clue exactly what was going to happen with regard to the project and work etc. As it happens I'm grateful things worked out as well as they did. My book is well under way and on schedule, new job starting shortly and thank goodness; not one but TWO replacement couches. If you didn't know I've been sitting in a hole padded with cushions for two years, a glamorous life but on the plus side visitors didn't want to stay long. However come the end of July I have some guests from Denmark coming over to show me how to build an AR table. Using a piece of target tracking software called "Bullseye" and Unity3D here's some footage of a music table in action courtesy of LEGO.
As it's going open source soon and I have a TON of painted Battletech figures and helicopters sitting in a box I'm hoping we can jam a prototype AR tabletop mech game in a week for not much expense. I haven't told him yet but it's too late for them to cancel the holiday. Sorry Lena :)
He's also quite keen to get some stick time on Combat-Helo so it's a good opportunity to get it fixed up for another public outing. Dave and I have been working on a rescue plan which I'm happy with. Currently I still only have a few hours during the week to work on the project, this will increase around mid-July.
Gunfighter6 just stepped and delivered a script full of stand-in speech files. So big thank you for that. What I did for the script was generate a cut-down version for the gunnery range and have just 3 parts, the range officer and two crewmen. The trick is to turn unfiltered speech into multiple parts by mixing radio noise, if that doesn't work then I'll have to batch process noise into the audio fragments using Audacity. It's now capable of running scripts.
The Leadwerks Community Project is picking up pace but some of the guys working on it have pulled out all the stops to put in some awesome work and I'm learning a thing or two from every update. Here's the third video blog of what's going on behind the scenes. Roll the tape Johhny....
I just watched Indie Game - The Movie (www.indiegamethemovie.com/), a highly emotional experience and my heart goes out to all developers out there who feel the same level of frustration and conviction. In the darker moments when the pressure is on and you can only see the problems, that's when you want to give up. Some of those guys were working for 5 years, without support. As a movie it's beautifully shot and scored. If you want some insight into what it's like being the little guy trying to code your 'big idea' this is spot on...except for most it doesn't have the good bit at the end.
I'm thankful for Dave's patience and continued support from folks. Next update will be in about two weeks, until then have fun.
I don't like this new "blogger" interface at all. Nonetheless. This is a post I kept putting off but it's not all bad news so I'm comfortable making it now.
As some of you are already aware my funds for this venture expired at the end of March when it ceased to be a full time enterprise. All time on the project is whatever I can scrape together (and justify) between other work. Currently I'm under contract to finish a book on terrain modeling for programmers and artists using GROME 3.1 for Unity, UDK, iPhone and Ogre3D. I have to say it's been a blast working on this. A wise man one put in his forum sig "Best way to learn is to teach others."
In it I'll be covering diverse topics such as world scales, FPS engines, terrain tiling and LOD, procedural generation of topography, textures, importing DEMs and exporting terrain so it will run on Unity iPhone and more.
Asynchronous terrain tile loading was something I was researching for the next iteration of the Combat-Helo engine which is why I ended up being asked to write the book. Hopefully I'll be in a better position to put it into practice (beyond the examples in the book) later in the year. Expect publication around end of August/September, if only for my terrible puns. Too bad nobody seems to be hiring to do this stuff.
Watch out for: Grome 3.1 Terrain Modeling with Ogre3D, UDK and Unity3D
ISBN# 978-2-849529-18-2
Coming to a bookstore this Fall.
But what about Combat-freeking-Helo?
Only getting a few hours a week to tinker is not enough. The problem is interest from debts incurred during development can no longer be supported out of my own pocket. Costs of hardware and licenses not to mention time (Dave didn't get paid at all, I owe him a massive beer tab and a luxury foot-massage - at least) need to be addressed. In addition legal costs of releasing can't be met, and they are necessary today, more so than ever.
It is a frustrating situation. Kickstarter has been mentioned by some readers. They are popular atm, seems every man and his dog is funding re-makes on it. Unless I can find a business development manager to set-up a US based entity it's not going to be an option for us. I don't have the time or experience of US business law to set one up. One UK developer (Carmageddon) recently had to do just that, I envy them.
From the start I clearly said I wouldn't work on the project unless it was funded, when that funding didn't appear I went ahead out of my own pocket but knew time was limited. If we could literally kickstart this thing and give it what it needs (business development, professional audio, animation library, second programmer, Dave's beer tab) to the tune of about $20,000 we're good. That's the sit-rep. When I get current commitments out of the way I can devote a little more time to fix pressing issues.
As for the work that is being done:
I redeveloped the audio script for the Firing Range. It would be nice if we can at least get the minimum amount of voice work done to bring life to the cockpit.
LUA scripting of mobiles is partly complete. Need to create nav-grid data, still outstanding.
Flight model still down, forces are not getting updated and attempts to debug have not met with success. Will be something simple but like finding needle in a haystack, time intensive. Came up with strategy to deal with this thanks in part to the Leadwerks Community Project guys.
Mossie - "Victory Stings the Loser"
Paolo has been busy with his own family commitments and found time to finish off the game's mascot, looking excellent in my opinion. I hope to have some made up into squad patches for a limited edition release (if only because I want one on my jacket so I might as well get a bunch made up).
He's been brainstorming game-play record keeping ideas, some of which will make it into the game as they are way better than mine and as it turned out, easier to implement from an art point of view.
Moving on to other things. It's my personal blog so I might as well indulge myself and write about what else I've been doing.
Dungeon Crawlers
I started a small series on "Procedural Content Generation". A tutorial on building an old-school dynamic Dungeon crawler in LUA. When creating the combat-helo vehicle scripts I realised I was missing some subtitles of LUA, this has been a good opportunity to explore it. Here's links to the first 3 parts. The final two parts will be posted after I get my current book chapter off to the publisher.
Back on the subject of terrain, some great news this month as Proland 4.0 went opensource under a dual commercial GPL3 license. If you're not familiar with Proland it's the work headed up by French researchers Eric Bruneton and Fabrice Neyret. While they were at the time reluctant to license for militaristic applications we were quite interested in using it for a Search and Rescue application (the project later became tied to Unity and using GROME as a world data import tool).
Here's the text of the announcement:
INRIA is pleased to announce that Proland has been released in Open Source:
Proland is a C++/OpenGL library for the real-time realistic rendering of very large and detailed 3D natural scenes on GPU. It is capable of rendering entire planets from ground to space. Proland is released under a dual GPLv3/commercial license. You can try it by downloading the precompiled Windows demo at http://proland.inria...r/download.html.
ZOMBIES
The Leadwerks community recently got together to start building a Zombie FPS. I'm not doing much of anything except this time I'm doing it in C++ and using TinyXML to do all the game loading and saving. Just watching some of the guys put down animation code here, subway level designs, weapon code. Quite inspiring. Everyone seems to have something to bring to the party, even if it's just my two tins of Dutch lager.
I think the "Worst Case Scenario" game idea is a good one. Giant ants, a 53.5ft tall woman, amorphous blobs, zombies, walking plants and secret nuclear tests all thrown into one bad day in Smalltown USA is a Steam classic waiting to happen. Did I leave out the alien robot and killer rabbits? How foolish. I look forward to playing the LCP (Leadwerks Community Project) game which is already taking shape.
Parting Shot
As usual, if there's any major announcement it will be made here. My twitter feed tends to have a high signal to noise ratio.
While waiting on fixes for the flight-model and control inputs, putting some game into the game we talked about ranges and how performance measuring was going to work. In addition we wanted to add a little variety which required working mob AI.
So nothing fancy but I managed to rustle up a simple finite state machine FSM to get some tanks and cars running around. Our design uses a group formation system (a group is a number of individual units that share common logic, e.g a tank platoon) and if you've ever used Missioneer you'll be familiar with the concept.
Currently tanks are driving around a small test tool I'm using to test the module, switching formations, revving engines, exhaust smoke. Performance is king so updates are interlaced, no vehicle physics are required so animation suffices.
Each group member has a goal pivot, when the formation changes the individual vehicles seek their pilot according to their driving behaviour. All the pivots are parented to a master pivot controlled by the group. This way you just need to update the group position (e.g movement orders to x/y) and the rest takes care of itself.
We can look into expanding the states later when we want them to do more complicated things, and do that on a per unit basis. Tank gunners will want to turret to target when attacking, manpads will simply turn to face. Same state but slightly different logic per unit. And this can be done in LUA level by setting the models "fsm_mode" key. That makes less work for me and gives Dave the artist some nice toys to play with. At the end of the day I at least have a tile based tank engine to play with. I'll throw up a video.
For the gunnery range we don't need anything demanding; some AI road following traffic, people in groups and the odd vehicle following a set of waypoints. Nothing spectacular or difficult there. That hardest part is turning the 3D geometry of the road network into a navigation grid. Then your mob groups need to know if they are supposed to be following the road or their own formation (switching as they move from one to the other).
Roads
The one problem I have in getting AI traffic running around is putting together a nav-grid I can work with. Our roads are large models (2 or 3 assorted) that are built in 3D Max using a height deformation modifier (the same height-map used to build terrain layers). And it mostly fits. I think we need to flatten it out so only the surface triangles can be read and turned into usable data.
Speaking of art, "Mossie" has been given some love.
Meanwhile in Comknat-Helo...colouring update for Mossie...
In other news
Caught this video a few days ago but made it to the BBC today courtesy of Military.com
A demonstration of the dangers of thin mountain air in Afghanistan. Someone should check oxygen levels and how it can effect judgement at those altitudes. Performing a "return-to-target" turn in low density air.
Struggling to find some progress to demo, the past week has been picking up threads and licking Combat-Helo back into shape with a HTR flight model update and repairs from my aggressive (frantic?) debugging sessions from a while back (mostly sorted now). Almost done with the HTR update, some small things came out while doing it which I might as well share.
During a recent visit into the attic to dig out research material I came upon some of the more interesting clippings from World Air Power and assorted journals. Including one glossy sales leaflet from Boeing which I've scanned in and posted below (showing rear page). Bypassing the somewhat aggressive tone, if you examine the "Baseline Performance Specification" table it does illustrate the effect of temperature on performance. It's worth noting that published data like this varied greatly especially after upgrades to engines and rotor system. This leaflet from an air-show is a little old.
One of the cool aspects Helicopter Total Realism (HTR) for FSX is it enables pilots to tweak and test how their helicopter flies in a simple manner. For example
The dynamics of each helicopter are edited easily enough with HTR by changing values in the .CFG file that lives in each helicopters "dynamics" directory. As this file is likely to updated at our end and therefore updated during any pushed game update it was prudent to add a check for a "aircraft_user.cfg" file so any edits should be saved into this file which should remain untouched. Good news if you want to plug in WHA-64 specs.
It should be possible to hot-swap between the two in game via the chat/command console to make comparisons.
A quick shout out to "Pixel Perfect" who has been working on his own flavour of lip-sync in Leadwerks (Facial animation test) which I think would be a really nice touch for our crewmen and seems pretty simple enough once you have the datafile containing all the phonemes and timing data. It does require some extra bones in the heads (Leadwerks does bone animation not vertex). That hard part I think is sorting out the model conversion but the concept seems to work. And it has to be slightly better than flapping heads. Although I'll have to run the details past Dave since it's his dept. see if we can't shoehorn that into the roadmap somewhere.
And now, from Fort Rucker a sweet introduction film (and rare in that it's been encoded in HD)
United States Army Presents: Sikorsky H-19 Helicopter Flight Training (30mins)
Parting Shot
Thanks for the feedback on last weeks video, the mini-tutorial on using the KBU Keyboard Unit (I keep wanting to type Unity which is another 3D engine I use from time to time). I've since found FOUR functions for it, the altitude bugs low and high, manual range input and .... barometric pressure. Which is right next to the bug settings. See the default pressure of 29.92 which represent inches of mercury inHg at sea level. You shouldn't need to set this at all as boarding the aircraft sets the value to the ambient pressure outside (we use the standard atmospheric model in Combat-Helo).
Also in the video I set the high bug to 3,000 feet. I realised a couple of days later that this setting is for the RADAR altimeter....and at what altitude does the radar alt disappear? (AH64 trivia question there for you Janes junkies) Answer, about half that. So 3,000 didn't make a lot of sense however if you want to enter silly values you can. I decided to leave it unless I find data that says otherwise.
Just a short post since I'm busy being pulled in a dozen different directions; I got roped into helping someone create a short health and safety film, drafting a project proposal, raising finances and even managed to fix a long standing bug in Combat-Helo. Now the sensors, line of sight and all that guff is now WORKING again, Hooray. A quick background on that, an engine update needed to fix some occlusion issues slightly changed the Model hierarchy in a subtle way that changed how actual filenames of models were retrieved, long story short, they no longer matched the ones in the vehicle database as they had "lod1" suffixed to everything . But hey it was a quick fix once traced, I digress as usual.
Talented Paolo, creator of many a fine mascot has been working on some fictional nose-art and patches for the squad mascot in Combat-Helo. We knew we wanted it to feature a mosquito, the mosquito is the nickname allegedly given to the AH-64D by Taliban forces. Incidentally it was also the aircraft my father was attached to during World War II so I felt it had a double meaning.
The character will be visible on squad patches and eventually be available as nose-art.
"Mossie" copyright 2012 Paolo Pomes
Below is an earlier draft of "Mossie" to help decide on nose style, the nose later became the Apache's signature Bushmaster cannon.
Please post your thoughts and comments on "mossie", suggestions for what he can hold in his left hand are invited.
*edit*
Finished adding additional features of the KBU, namely auto pop-up and closure of the unit when you click on an MPD function that requires entry; setting hi and lo bug. And manual range entry. Now comes complete with blinky cursor and key highlight when you move the mouse over the keys. All command entries are pushed back into the TAvionics message handler, there's an optional message history buffer (currently inactive).
I know it's a little late for Valentines Day. Excessive flapping, bumping and separation is discussed in this priceless US Army video from 1980. If only they had "RotorCam (tm)". The Apache has a fixed rotor, mast bumping isn't an issue but it's all part of helicopter theory.
I've been forced to continue hunting for other employment to deal with a mounting debt crisis. As a result work was put on hold the past two weeks (hence the lack of updates). I apologise for letting my post slide, the project really is taking a toll. I've been ordered to get back to Combat-Helo ASAP (taxes and all that business stuff needed to be done too), I'll be updating as well as I can. There's an engine update to finish rolling into the project (I started on that earlier in the week, this fixes a problem with terrain and I hope the EntityUserData and hierarchy problem).
A Twitter follower suggested I post some Gun Cam footage, I had a look at that and found vegetation range/LOD issues in the MTADS camera need dynamic adjusting (not sure what the most efficient method will be yet).
I'll just round this entry off by stating that raising funds in the UK for technical entertainment projects is very difficult if not near impossible. Bank staff/accountants take one look at video of Apache cockpits and give you funny looks like you're some kind of gun nut (that actually happened).
In the meantime, enjoy the technical detail of the above video.
Another Example
Here's a great example of ground resonance, link provided by reader Christian.
Yes the things you thought were going to take a few days which turned into a week and a bit (you could almost say 'two weeks'). Josh at Leadwerks gave me a leg-up on how to put an MMO style launcher together and I've almost done wrapping up all the security for the necessary database, key code generation, CVS style updates and all the stuff we need to match individual content to clients. We'll make available downloadable content (DLC) such as new maps and the occasional helicopter (the planned CH-47D), not to mention the odd mission pack.
No, this key won't work, it's a fake
So there was a lot to do to make a simple one shot MMO style launcher. The back-end server stuff had to be built from scratch. The launch .EXE calls home, applies on-demand updates and preps game settings for launch. For simple security sakes I layered server-side scripts for handling the updates, admin and audit. Auditing is handled by triggers, SQL injection is futile since only one procedure is exposed to clients.
Any DBA will tell you Auditing is an important part of any security. If you build any kind of database exposed to the internet and you don't build your own layer on top of any default transaction logging then you're kind of asking for trouble. The database engine used here is not known for keeping detailed logs so it was necessary to build one anyway. Things you might want to think about if you ever need to create systems like these are making log indexes suitable for frequency analysis (this one method Twitter uses to spot spamming), fake open doors and keys and silent alarms. My favourite trick in the past was a fake database that gives the intruder a high and makes them believe they have walked away with the crown jewels while evidence is collected. That sort of none-sense is not required here, I kept this one functional with a tiny footprint.
The Pilot ID we'll be sending out is the key to your content; install once, play as you like. If you share copies around on your network you can launch 'offline' no worries, no need to be connected to the internet until you want to update. It's nice if you want to buy multiple copies for your network and support the effort put into this project but I'm poor too so I know how it is.
Little bit of script consolidation and testing to do before we let this loose in the real world.
It was over a year ago we were notified that some of the models we had purchased from Dexsoft might possibly have been stolen. After a period of investigation the probability was quite high this was the case and Dexsoft contacted customers to offer new packs. However months later I was unable to get a reply about these replacements and only in November when doing a review of outstanding assets and licensing we had to either press again or do a re-build.
Dave elected to take it upon himself to do a rebuild and not wanting to have to reposition every building adopted the same dimensions with the exception of adding much needed 'basements' (a basement is just an extrusion of the exterior wall so that it will sink under terrain so no gaps are left if the centre of the model is positioned on uneven ground.
Originally the models were made for use in first-person games and LOD0 had details such as railings and girders. Dave completely built (from scratch) versions complete with new textures and made them more efficient at the cost of some detail. An original building had 5213 polygons, after a rebuild only 728 polys (which is iPhone territory).
Original stolen model on left, rebuilt from scratch on right
Scratch build on left, original on right
Any small indie developer takes a leap of faith when purchasing models from 3rd parties, you don't know where they came from or their history. In this instance we got bitten as did the 3rd party which handled the situation well (but it would have been nice to have the replacements anyway). No harm was done, anyone using or releasing games with 3rd party content be aware.
Thanks Dave for once again being on the ball.
Update
Started work on the updater again.This is based in part on the Leadwerks SDK downloader which is pretty much everything I needed given a little twist and a slice of lemon. Hopefully some of you will be seeing this in the near future. At some point we'll add user names and a regcode system prior to any content downloads (these will not be required to play).
As much as you might want to click on it, you can't yet :(
With any luck the 'one click' update system will let us add rolling improvements at the cost of occasionally annoying you with a download when an update is available. I just want to be able to push one button, get the latest changes to any content I own and go.