Category Archives: Diary

Research GUI for the Tweak

Next up for GUI tweaking is the research screen, which currently looks like this…

There’s 2 major changes to make that people have requested:

  1. to be able to view more complete info and stats of already researched items
  2. some way to tell what research item leads to what, rather than effectively having to guess

The following images are first thoughts, and quick mockups – I know they don’t make a lot of sense as to what’s being hovered on,  refineries don’t lead on to robotics etc. 🙂 … Continue reading

Revenge of the HUD part 2

Thanks for all the feedback on the HUD changes – it seemed opinion was split between versions 1 and 2, but with the majority in favour of version 1, so I’ve gone ahead and sorted all the graphics and XML for that.

It may be possible to add some option to choose between the two at a later date, and I’ve arranged the various buildings so that they could potentially open up from category icons in little panels of 1×3 or 2×3 building icons… but as its taken 2 and a half days of fiddling to sort the HUD out so far I don’t think I’ll have time to do that before the next release which we have planned for Sunday.

This is how it was looking before…

… and here’s how it looks now….

Changes made…

Continue reading

Revenge of the HUD Redesign

We’re going to be making a few changes to the buildings/powerups panel. Here’s the current HUD….

First of all, and by popular demand, we’re going to add a sell button. Unfortunately there’s not enough room to squeeze it into that bottom panel, as that’s about as wide as it will go on a vertical display – the max width when vertical is shown by the dotted lines.

We could make the icons smaller to squeeze it in, but some people have also commented on the icons being too small to tell apart easily as it is, so that’s something else that would be good to address as well – magnification on hover being one suggestion.

There also needs to be a way to be able to hide the buildings/powerups panel, as it prevents building along that bottom edge.

So, 2 different designs after the jump…

Continue reading

The Trouble With Balance

I’ve been having balance issues lately. It’s not due to the giant bottle of gin I have just bought, either. Rather, it’s all about the problem of balance with the cost of stuff, crystals, and the value of the gidrahs when you destroy them.

First of all, I have a feeling that there are too many crystals on most worlds, which let you harvest an awful lot of cash that way. Secondly, I have another feeling that silos may be just too damned useful. The difference between having silos around all your refineries and not having silos is pretty drastic. So I think they’ll be first up against the wall when the nerfing revolution comes. Which will be around the time of Saturn. Silos will become somewhat less effective – I think I’ll reduce their efficiency increase to just 10% (down from 25%) per silo. And there will be a smallish reduction in crystals. In fact there will also be a reduction in crystals if it appears you’ve got a whole lot of cash in the bank, too, as you’re clearly doing rather well.

Also, the amount of money that can be harvested by shooting gidrahs is pretty massive. This sort of lends itself to a gameplay balance issue whereby the player doesn’t have a whole lot of incentive to bother collecting crystals, especially if you get the aliens cornered in a tight spot and can keep them at bay using minimal firepower and expense. Or alternatively the collection of crystals can be trivial if they’re behind the choke point on the map, meaning you’ll come away from a level with $30k in the bank.

The difficulty range was supposed to work best in the range of $0-$15k or so, but clearly it seems I’ve got to extend it to cater for up to $30k. And so I shall 🙂

Work on Saturn continues, with suicide exploding gidrahs working nicely, and the code for flying aliens in, but they don’t yet drop bombs. And we can’t seem to get a good graphic for it yet, so to distract himself, Chaz is doing the scenery instead, which revolves around toxic waste and pumping machinery. I tried a nice simplex noise fog shader for some cool weather effects but discovered it was too slow, so that’s on the back burner again and unlikely to see the light of day.

And finally, I got around to fixing the three older games, Droid Assault, Titan Attacks, and Ultratron, after leaving them broken for over a year (the wouldn’t work on ATI cards, and also wouldn’t install on Windows Vista or Windows 7 properly). I’ll upload nice fixed versions this weekend with any luck.

Rest in peace, Teazle

Teazle the dog

Teazle in the snow

It is with great sadness that I have to report the death of Teazle, the most lovely dog in the world, who was with us for 12 years. Teazle was the other puppy behind the name of Puppygames (Smudge was the other, but she passed away many years ago now). We’re all very very upset and won’t be doing any work for a few days. We miss you, Teazle x

The Tech Tree

Some kind soul on the ever-lovely RockPaperShotgun made a lovely tech-tree graphic. I’ve not checked it for accuracy thoroughly but I thought it’d be worth sharing with you all.

You will be horrified and dismayed to discover that the really cool exotic weapons, the laser, rocket, and disruptor, will now cost a staggering $15,000 to research in the Saturn release. They are the pinnacle of offensive technology! They’re supposed to be really hard to get. At least, early in the game.

Lasers and rockets have also been nerfed very slightly in the forthcoming release. Lasers will do a teeny bit less damage, and rockets only explode when they hit their actual target location (as opposed to anything in their path). Also, rockets will cause splash damage to any nearby buildings! This means you will have to be very careful to place them such that gidrahs won’t slip behind them and amongst your valuable buildings, causing it to start raining rockets down on your own base! The sword has two edges, etc, etc.

All three exotic weapons now cost a huge $5000 to buy as well, reflecting the fact that with two of them you can pretty much defeat any level with relative ease. You still can, of course; you just need to be rich enough to afford to 🙂

Droids and turrets had a “big” AI overhaul; they now select new targets every 2 seconds, which means if something more suitable to shoot comes along, they’ll switch to it. Droids fire a bit more rapidly now, and move a smidgen more quickly as well.

And lastly autoloaders are somewhat cheaper at just $750. You know you want them! Sit back and watch the battle take care of itself 🙂

In other news, Chaz has been hard at work on Saturn, and he’s got Saturn wraiths done, and is currently finishing off suicide bombers. These little critters start off slowly, then accelerate towards their target, whereupon instead of biting, they explode causing splash damage to all buildings nearby! Better shoot them from a great distance. Fortunately being explody they are quite easy to pop.

Mars delayed a tiny bit!

Well, it’s midnight here in the UK and 1am in the dark cupboard in which Chaz lurks, and we’ve still got stuff to do on the game! And I’ve got work tomorrow morning as per usual, and I’m too tired to do a release now and bugger it all up!

So… hey what’s that, over there?

<flees>

Yes, it looks like this deadline has sailed past us and we’re not ready to release the Mars levels just yet. It does look like a weekend release is on the cards though, as what’s left is not a huge amount of work. Our humble apologies for being late! But, you know, better that it’s good, rather than a bug-ridden heap of poo, I think.

Here’s what we’ve got so far, new-feature wise:

  • Add keyboard tooltips to “shop” popup
  • Allow player to navigate back from the story screen to the level selection screen
  • Anatomical research now yields a +1 bonus to armour piercing for blaster rounds
  • Back button on research
  • Back button on story screen
  • Bezerk now instantly reloads all turrets
  • Building things on top of aliens now damages the building (and may blow it up completely before it’s even built)
  • Collectors cheaper
  • Conditional stories that appear depending on what you have or have not researched
  • Difficulty adjusted at start of level based on number of attempts
  • Difficulty attenuation now is itself attenuated as gidrahs are destroyed
  • Difficulty now calculated based on current cash and value of buildings in play
  • Disruptor now has range increased very slightly by scanners
  • Earth boss guest appearance on Mars 5
  • Erase attempts numbers past last ended level
  • Increase boss speed and hitpoints
  • Increase memory: 160mb max heap
  • Lasers and rockets now have greater initial range and greater range increase per scanner
  • Lasers no longer sweep: they were far too powerful!
  • Levels now randomised completely every game
  • Make levels where aliens come from all sides slightly easier
  • Max level only set if a level is completed
  • Mid-spawners
  • Mines, rockets, smartbombs and disruptors now ignore armour
  • Multiple stories per level
  • Nerf turret fire rate ever so slightly
  • Nerfed droids fire rate
  • Optimise laser beam to use quadtree for collision detection
  • Optimise turret target acquisition to use quadtree and delay retries
  • Show keyboard tooltips a bit longer
  • Silos cheaper
  • Spiders
  • Ticks
  • Turrets to target aliens they’re better at killing preferentially
  • Wraiths fade in slowly as they approach their target

Here’s the bugs fixed so far:

  • Fixed: all known exceptions except GL drivers and saved game problem
  • Fixed: Destroyed buildings not updating nearby buildings (silos + factories?)
  • Fixed: Laser offset
  • Fixed: Money displayed on Moon level select is actually Earth money – should be Moon money!
  • Fixed: Turrets show wrong range in ghost mode
  • Fixed: a laser sometimes keeps on missing target (was actually just not hurting it)
  • Fixed: can build weaker barricades on top of stronger barricades – oops!
  • Fixed: gidrahs speed up when the level ends
  • Fixed: ingame menu resets mouse pointer
  • Fixed: map generates forever
  • Fixed: Fullscreen/large/med/small window selection is buggy
  • Fixed: turrets can now see aliens past obstacles which can be shot over (such as craters)
  • Fixed: decoys still not working

Unfortunately, we’ve still got all this to do:

  • Tweak stories for Earth (gidrah stats, extra story entries)
  • Stories for Mars
  • Mars colours
  • Mars roads
  • Mars boss death animation

and these really important bugs to fix:

  • Blast mines set off straight away when painting them
  • Ticklets can spawn on top of buildings, and subsequently get stuck
  • Occasional strange lag/slowdown
  • Level generated without any crystals
  • Strange problems with pathfinder killing aliens
  • Pathfinder seems to be allowed to overrun its maximum think time

Revenge of the Titans beta released!

t’s finally here… playable beta demo to download, and now available to pre-order at 50% final price!…

www.puppygames.net/revenge-of-the-titans

Our server is currently taking a massive hammering though, so apologies for the painfully slow download speeds – we’re looking into solutions

Update: server fell over! we have Windows version download mirror sorted now, but have had to restart the server, apologies again, we weren’t expecting quite such a massive demand 🙂

The ToDo List

Just when you thought game development was all exciting and interesting and full of screenshots, kebabs, and nubile wenches feeding us creamy grapes and wafting our sweaty feet with palm fronds*, I thought I’d share the To Do list with you, as of today, and the Done list, as of the last 6 months or so:

Bugs

  • Crystals not being removed from map when exhausted
  • Double music playing on start of world
  • Fix story innaccuracies on Earth levels
  • Gidrah spawn point arrows in wrong place
  • Story screen sequence glitches
  • Restore is broken
  • Wire up powerup shortcuts in shop
  • Moon gidrahs need idle animations
  • Moon alt floor has some glitches
  • Turrets go from having 2 dits of ammo to RELOAD
  • change messageBox messages (eg. register failed)
  • change register email so it works like net.puppygames.applet.screens.EnterNameDialog…
  • need to set color to black, text to all caps, and email_x and email_y to be offsets like name_x,name_y

To-Do

  • Medals screen
  • Show medals earned on complete level dialog
  • Video
  • Put in a load of tips
  • Tip sequences
  • Building factories
  • Harvesting
  • Reloading
  • Placing turrets out of the way
  • Armoured gidrahs
  • Base under attack
  • Scripted tips that appear at set times in a level
  • Define level events and put in mechanisms to generate them
  • Adjust story in Earth and Moon for new tips system (and accuracy)
  • Hiscores screen
  • Remove screen flash from disruptor. Or tone it down.
  • Really Exit Game dialog when close button is clicked
  • Shift-click on a building to switch to Build Mode using that building (if still available)
  • Show approaching gidrah locations offscreen using edge radar
  • Increase barricade / mine limit with silos?
  • Add ammo counter to capacitors?
  • Different sfx for factory shutdown klaxon, base attack, base critical
  • Better sound when many gidrahs attack at once
  • Latest level should be highlighted in a different colour?
  • Minimap?
  • More feedback when activating powerups
  • Bezerk effect
  • Freeze effect

Done / Fixed

  • Leftover alien attacking squares – maybe related to knockback or angry gids
  • Deflected bullets at wrong angle
  • Earth levels at constant difficulty; moon increases difficulty very slowly
  • Armoured gidrahs to deflect bullets
  • Collector available at wrong time on moon
  • Moon too hard! Auto-difficulty tuning awry?
  • Center dialog text like ‘GAME SAVED’, ‘MISSION ACCOMPLISHED’, ‘GAME OVER’
  • Dialog text fade out bug?
  • One or two odd glitches in GLStyledText
  • Shop bleeps over invisible shop items
  • Adjusted price of silos, collectors, autoloaders, etc.
  • New factory mining sound effect
  • Factory mining sound effect overpowers all other sounds
  • SetLayers now works properly
  • Maximum 100 gidrahs on a level, and timer stops when maximum is reached
  • Crystals don’t wear out so fast
  • Story Screen characters to allow multiple speech bubbles
  • Backgrounds (bg) and separate anchors for backgrounds on settings
  • Anchors for settings
  • Shorten levels
  • Shrink levels
  • Slow down gidrahs on Moon
  • Smartbombs only affect a gidrah once
  • Autocollector now autocollects
  • Factories once more fixed price
  • <setlayers> animation feature
  • Frozen gidrahs don’t change appearance to frozen when attacking
  • Ensure some crystals are present on the level
  • Better VBO rendering path
  • More background loops for worlds pinched from Alien Flux and Ultratron
  • Award end of level bonus based on remaining base hitpoints and world number
  • Capacitor and laser can’t shoot through powerups
  • Zoom To Building doesnt seem to work quite right in widescreen
  • Factories to randomly select 1 nearby crystal to mine
  • Remove extra bases on Moon onwards
  • Fixed all buildings suddenly paintable by accident
  • Black out inaccessible areas of map
  • Crystal shrinking
  • Factory <-> crystal effect
  • Crystals to be impassable
  • tooltips appear in the wrong place
  • Fix shop background missing on first open (again)
  • Display number of attempts & ranking in level select screen
  • Dissapearing obstacles/crystals on first level played (attenuation bug?)
  • Offset and textOffset bug on areas
  • VBO stability problems
  • Allow clicking on saucer in build mode
  • Award players money when using smartbombs against gidrahs
  • Crystals to slowly be consumed by factories
  • Can’t build factory unless next to Crystal
  • Crystals generation
  • Show turret/capacitor range when ghosted
  • Widescreen support
  • Layout tags for areas
  • Maprenderer
  • Change GUI backgrounds
  • Adjust XML for GUIs
  • Change options screen
  • Change slots to use areas
  • Save and quit broken ( press it and nothing happens… press return to game and then it quits out with game saved message )
  • Centre=”x” or centre=”y” or centre=”both” for screens
  • Re-enable VBO code with checks and option
  • Fixed mouse disappearing into black areas of fullscreen
  • Fixed level completed / game over messages
  • Make so ‘factory collect’ message dissapears when ‘shutdown imminent’ appears – otherwise theyre on top of each other
  • Faded progress bar on story screen
  • Delete broken on profile screen
  • Force base position to be at least several sqaures away from edge of map
  • Stop text breaking when style changes
  • Better difficulty tuning
  • Reset mouse cursor on story screens
  • Fancy Pants text rendering for GLTextArea
  • Auto-bolding
  • Wait until boss & other effects removed before completing the level
  • Story screens
  • Fixed hotkey bounce on screen open
  • Fixed background insets
  • Restart level needs to reset game state to what it was when the level was started
  • Record number of attempts a level has been failed at and adjust the difficulty accordingly
  • Game screen pauses when covered by shop or other modal dialog
  • Make game easier for crapper players
  • In-game menu
  • Quit
  • Save and Quit
  • Restart Level option needed
  • Fixed not asking player for a name on first startup
  • Fixed fullscreen toggle being broken
  • Moved custom capacitor zap code into nice new TickableObject style
  • Fixed shop closing if RMB held down while opening
  • Much faster shop opening / closing
  • Fixed tick/update glitch that caused labels to appear momentarily in the wrong place
  • Investigate using plain VAs
  • Can now scroll the screen with WASD or cursor keys
  • Capacitors overpowered and too cheap – so now they recharge slower and cost twice as much
  • Mines overpowered and too cheap – so now they cost more
  • Investigate poor performance in build mode
  • Fix initial proximity effect bug when closing shop or building something
  • Zoom to last base when it is destroyed
  • Fix emitter bug – gun flashes having screen offset somehow applied wrongly
  • Fix emitter bug – see emitter-ruins-problem-2.png and emitter-yOffset-problem.png
  • Fix buggered looking Game Over dialog
  • Fix blurry edges of buttons
  • Accurate danger circles around barricades and turrets (checked in debug)
  • When clicking on game map, grab mouse
  • Tweak HUD & shop to show number of barricades / mines left
  • Fix shop descriptions so they’re accurate and fit in the area provided
  • Show disabled things in shop better
  • Limit barricade production & disable in shop when all used up
  • Limit mine production & disable in shop when all used up
  • Autoloaders to cost more each time they are built
  • Warehouses to cost mode each time they are built
  • Move game screen immediate mode rendering into effects
  • Fixed single frame delay when switching animations in frame command – hurrah! – loads of glitches solved
  • Fix shop background not appearing when shop first opened
  • Fix flicker on icons in shop / HUD
  • Stop RMB closing shop before it’s open
  • Fixed music not streaming because fade=1
  • Ramp up gidrah speed when factories are shut down
  • Game Over screen
  • Wait a bit longer after last base destroyed
  • Fixed slot effects highlighting when Delete dialog is up
  • Fix background insets
  • Fix game not ending when base destroyed
  • Fix proximity effects
  • Fixed gidrahs not clearing “attacking” squares and eventually just sitting around doing nothing
  • Disable factories and related buildings in shop after shutdown
  • Fix performance of Backgrounds
  • Bosses to ignore danger
  • Prevent gidrah crowding on mass attacks
  • When selecting quicklaunched buildings, don’t cycle the quicklaunch order
  • Gidrahs to attack barricades a bit more quickly
  • Stop alien animatino when thinking or stunned
  • Fix totally broken texture appearance
  • Tune difficulty exponentially rather than linearly
  • Fixed emitters
  • Further difficulty tuning
  • Turrets don’t shoot at dead gidrahs
  • Gidrahs now try and plot a route around your turrets!
  • Continue button on Game Over dialog not yet wired up
  • Fade very last segments of capacitor beam
  • Investigate why gidrahs don’t flash white when hurt
  • Make game easier
  • Only 2 sorts of gidrah on earth, and no armour
  • Gidrahs have less hitpoints
  • Slower gidrahs
  • More ammo from batteries
  • More range from scanners
  • More cooling from towers
  • More production from reactors
  • Fix factory count-up
  • Fix ammo-count down
  • Use colormap for timer bar
  • When base under attack click to zoom to it
  • Wire up B & click to do zoom to base
  • Wire up T & click to do zoom to turret
  • Wire up F & click to do zoom to factory
  • Don’t centre mouse when screens change
  • Longer period before aliens start coming to build base defences
  • Spawn bosses immediately
  • Fix cursors when screens change
  • Ability to specify formations in world definition
  • Pop up tips on HUD
  • Capacitor beam weapon effect
  • Performance fixes so far:
  • Speed up Labels
  • Triple buffer VBOs in sprite engine & other places
  • Only invalidate paths inside changed bounds
  • Speed up sprite engine
  • Speed up capacitor renderering effects
  • Speed up build checking
  • Turn off build effect
  • Faster pathfinding
  • Faster gidrah movement code
  • Double buffered VBOs in sprite engine
  • Removed call to glGetError() on SwapBuffers
  • Upgraded to LWJGL2.2.1 for VBO performance fix
  • Speed up saucer effects
  • Speed up building attack effects
  • Speed up text rendering effects
  • Speed up background rendering effects
  • Speed up build effects
  • Speed up proximity effects

* unless you’re my girlfriend reading this, in which case there are absolutely none of those involved in game development.

    A brief history of TA2 part 2 – Monster Mash post-mortem

    We had intended to write a game that would be a fun shooter, something that would appeal to ‘shmup’ fans and a more ‘casual’ audience – and we wanted to create a shooter that would feel natural to play with a mouse, and no keys. Titan Attacks could be played with the mouse but it had been tacked on at the end of development as an alternative to keyboard control, and the various mouse-only control schemes we tried with Alien Flux and Super Elvis aka Super Dudester either never seemed completely natural to us, or the ones we liked everyone else hated.

    We also wanted to avoid scrolling, and not make a standard vertical or side-scrolling shmup, thinking that might put off a fair amount of people.

    The problem generally was being able to handle both movement and aiming at the same time – to be able to move in one direction whilst firing in another. We sidestepped this by removing the movement element completely.

    After a month of playing around with various ideas we had a pretty fun little game involving building up your defences with turrets, mines and barricades to protect your city blocks from an onslaught of funky gidrahs. Here, again, are the only surviving screenshots…

    However, the game had several rather big problems…

    1. We had a simple lighting system, with spotlights showing the tracking of automated turrets and under the player cursor. For this to look any good the levels had to be pretty dark, and grey. This left us stuck as to how to change background gfx sufficiently to show level progression, not helped by…

    2. The fixed screen made things feel very claustrophobic, quickly filling up with buildings, the aliens appearing almost on top of them, and there was no room for any pretty background graphics.

    3. We hadn’t really thought through any kind of level/world progression at all. The game was fun, but… it didn’t really go anywhere.

    …and then Cas’ wife suddenly left him. And ‘crashed’ his brand new pickup truck into a tree. And demanded all of his money. Development abruptly stopped.

    …and then a game of the same name was released (a generic tower defence game), after we’d mentioned Monster Mash on this here blog, many moons ago. An unfortunate coincidence.

    Not that that should have made any difference, but when we did resume development we decided to start something fresh (on what would end up being Droid Assault) rather than tackling the above problems of our now nameless game.

    To be continued…

    …with less words and more pictures 🙂 In the meantime, notice anything different here?…

    Revenge of the Titans – latest screenshots

    We’re not really going for accuracy in geographical locations – but should do something about that cactus.

    Added and updated a whole load of things recently – it’s looking pretty slick. The HUD now has working ‘quicklaunch’ icons and tooltips on the bottom bar for buildings and powerups, and an alerts panel top right the other right (doh!), that also lets you quickly scroll to the building in question.

    Also added new Earth level colours, new explosion particle effects, capacitor effects, powerup collect and activation effects, new extra glowey bullets, monster death effects, mini droid units, and a whole load of new weapons and buildings, and a big bad boss for level 10… all of which I’ll try and squeeze into a new vid soon.

    More screenshots… Continue reading

    Bug spottin’ Dropbox scribblin’

    Sometimes an IM chat just doesn’t cut the biscuit when it comes to describing weird bugs – in this case the bizarre interaction between explosion particles and a floor setting which is meant to make little bits of shrapnel bounce about when they hit it. Instead it acts like a big gluey magnet. But only sometimes. And smoke, which should float upwards generally, has decided to head east instead. Creating a set of test emitters, a few screen grabs and a quick scribble helps narrow down the problem…

    Dropbox is what we’re now using to zap these test images back and forth between us, and it comes highly recommended if your doing any kind of remote development thing.

    With any luck Cas will get that little pesky fella sorted soon, and then I’ll post some video of things exploding in a gratuitous manner.

    The Story So Far

    It’s been a little while since I ventured a post onto the blog, as I’ve been extra busy doing contract work. One of these days we’re going to have a game that sells enough that I don’t have to do contract work, but that day hasn’t happened yet. We have high hopes for Revenge of the Titans, though! Who knows, maybe we’ll even manage a retail deal, or Steam?

    So, here’s what we’ve been up to since the last blog post…

    Game progress

    We’ve been hard at work putting in lots of little touches into the game that polish it up in many tiny little ways. I can’t really overstate the importance of little bits of polish. People do actually notice this stuff, and every time someone thinks, “Ah! That’s cool”, we have increased the chances that people will buy the game. So, we’ve now got little shortcuts on the main HUD for the last 3 building types created, accessible with a click or a hotkey (1-3). It’s just got a slightly more natural flow than opening the shop each time. Similarly we’ve got shortcuts for all the non-exotic powerups on the HUD next to the powerup tab, too; so that’s the freeze, shield, smartbomb, repair, and bezerk powerups all accessible with hotkeys or a single click as well.

    We’ve got a “BASE UNDER ATTACK!” warning and “BASE SHIELDS CRITICAL!” warning, under a flashing base icon on the HUD; you can tap B or click it to instantly zoom back to your base(s) and cycle through them. Of course, on Earth, there’s only the one base.

    Similarly we’ve got a “RELOAD TURRET!” warning, and associated hotkey T and button that will flash, and allow you to instantly zoom to the next empty turret.

    And lastly we’ve got a “FACTORY FULL!” warning, and corresponding hotkey F and button, which does the same for factories that are full and awaiting collection.

    There’s now a bit more of a delay at the start of a level (which gets longer the bigger the level is), which gives you a few more seconds to survey the terrain and where the gidrahs are coming from, before you start constructing your base. The levels are now slightly longer, to allow for this extra time, plus a bit more time with factories producing money.

    Factories now shut down a short while after the gidrahs stop coming. There was a very simple exploit before that allowed you to carefully funnel your gidrahs so that they could get stuck behind a wall and trundle out one at a time, to be shot. This made the levels last so long that you could amass a huge pile of factories producing unfeasibly huge amounts of money. Now the factories only produce for a while so you need to get them built quickly and harvest them as efficiently as possible.

    I’ve been doing a lot of game balance twiddling. The Earth levels, which comprise the first half of what we intend to be the game demo, are meant to be a “tutorial” of sorts. They introduce each of the main buildings one level at a time, and I’ve just embarked on an in-game tip system that will constantly bombard the player with hints as to where they’re going wrong during play.

    Unfortunately I was beginning to realise I’d been playing the Earth levels for, ooh, about a year now, and I was getting rather good at them, milking them for as much cash as possible, using the minimum buildings in the optimum configuration, and generally being the saviour of Earth quite consistently. Even more unfortunately, I kept adjusting the game difficulty to compensate for my own brilliance, forgetting somehow that “EASY SELLS!” in the process (the exact opposite of what Microsoft seems to think), and also forgetting especially that “HARD TUTORIAL DEFINITELY DOESN’T SELL!” even more. I was getting to the point where I was getting my ass whupped by level 8 and enjoying the challenge; of course, that shouldn’t have been happening at all. The first 10 levels are meant to be super-easy introductions to the concepts of the game! Even the next 10 levels, on the Moon, are meant to be very easy, because we want people to complete them and buy the next 30 levels of game with all the piles of extra stuff in them.

    The wake-up call was getting my 11-year old nephew to have a go at the game (without the constant barrage of automated tips, I had to hover over his shoulder and tell him what to do – bad sign). He got kicked in fairly quickly by level 8, and the only comment he made about the game was, “It’s hard.

    Right now then, I’m making all sort of strange and alien decisions to make things almost trivially easy for Earth. Reducing hit points, slowing gidrahs down, cheapening buildings, making them more effective, etc. I will test it out on my ever-suffering girlfriend later tonight and see if she manages to easily pwn the boss on level 10. (I actually gave the boss armour so it could only be destroyed by heavy blasters! Am I some kind of idiot?)

    Performance Tuning

    This game, despite its apparently diminutive stature (still running in our odd native 320×320 resolution), is rather pushing the performance boundaries of even the most hardcore computers. About a month ago I was getting maybe 20fps on my 1.6GHz dualcore AMD64 laptop with integrated NVidia chipset – ouch! It’s supposed to run at 60fps.

    We’re actually pretty much hammering the 2D capabilities of the system somewhat. About a month ago, we were drawing approximately 1,300 – 1,500 sprites per frame, in approximately 70-130 draw calls. That sounds like it should be pretty trivial for a system to cope with – 1,500 sprites is after all only 6,000 vertices.

    It turns out we’ve come across that age-old Java problem: getting data into buffers for OpenGL to draw is probably being hampered by lots of unnecessary bounds checks. I’ve cut down the problem now by agressively culling entities sprites which are suitably far offscreen to be definitely not visible; now we’re down to about 800-1,000 sprites per frame, and getting double the frame rate. The actual writing of sprites to the data buffers takes approximately 7.5% of a frame here on my uber-l33t i7 rig (1.2ms). Actually drawing them takes 35% of a frame (5.8ms) on my super Nvidia card. That leaves 9.5ms or so to do game logic – on the fastest most powerful computer I could afford 12 months ago. All the UI interaction, collision detection, gidrah pathfinding AI, animation, movement, targeting, etc, all has to be done inside that 9.5ms. On my uber-rig, it gets the lot done in 3ms. Realistically I’m targeting computers two generations behind this one, which will be approximately one quarter as powerful overall.

    I wish they’d supply a switch to disable bounds checking so I could, if nothing else, at least prove to myself that’s slowing things down. I’d leave it disabled of course 🙂 I will explore performance tuning in a further blog post later this month.

    What’s Left To Do

    I’ve got to get the tips system working nicely so that it provides a constant “over-the-shoulder” commentary on what you’re doing for the first 10 levels or so. I also intend to use it to put in a few scripted speeches from the characters in the game.

    I’m also working on a silent MJPEG video codec. I’ve found a nice pure Java JPEG decoder in IBM’s SWT source code, which I’ve hoiked and plonked into SPGL. This will be the basis of some fairly inefficient full-motion video rendering. I’d really, really like an H264 or even DivX codec but inexplicably no-one has produced a pure Java version of either, at least, not without massive library dependencies.

    Chaz has got to do all the graphics for the Moon, Mars, Saturn, and Titan – that’s all the aliens, rocks, floor, scenery, and the story screens – a tall order. I suspect that this means the game will now not be ready until Easter, which is a bummer because we’re broke, as usual.

    The story screens are probably going to take the most time. I suppose now I know this I can consider getting some semi-professional voiceovers done for them. Any volunteers? (The hint in that request is “volunteer” – we have no money :P)

    Music

    I know you’re all dying to know what I’ve been listening to lately. Behold, the Cardiacs.

    Life

    Seren turned 1 on New Years Eve. Had a great party. House was overrun by small children. Then I contracted gastroenteritis (probably norovirus). On the bright side I lost half a stone in 48 hours, which neatly compensates for the giant feasts of Christmas. According to the doctor I am now no longer overweight. Hurrah for disease!

    One long rambling post this. This is what happens when you don’t post regularly.

    Can you tell what is it yet?

    Been working on a bit of video recently that will hopefully end up in the game titles if Cas can work out getting Ogg Theora decoding onto an OpenGL texture in background threads. I have no idea what that means. If not it’ll just end up in some pretty promo vid kind of thang on Youtube.

    Well it makes a nice break from working on GUIs anyway, on which we will be posting shortly. Here are a few rough snaps for now… and in the words of the great Rolf – can you tell what it is yet?

    A brief history of TA2 – Monster Mash coming soon!

    Revenge of the Titans is a game with a long, convoluted and simply amazing history. It is perhaps the most incredible story never told in the entire history of computer games. In years to come a small group of distinguished historians and academics will undoubtedly discuss its development with Melvyn Bragg on BBC Radio 4’s ‘In our Time‘.

    Okay, that was a lie – got a bit carried away there. But it has taken a long time.

    Our tale begins nearly four years ago. Basking in the financial glow of the success of Titan Attacks we devise a plan for a new game, a game that will have all of the great bits of Titan Attacks, like shooting things and buying upgradey stuff in some kind of a shop, but that will be playable completely with a mouse. We hope freeing players from the shackles of using ‘keys’ will make a more accessible game, and spread the joy of making pixelly things explode in a glowy manner to a more ‘casual’ audience.

    Work begins in earnest in the spring of 2006, with Cas beavering away in his secret underground base, deep below the Quantocks, and myself working poolside upon my Bangkok penthouse. With multi-coloured spotlights attached to computer controlled turrets tracking a variety of daft pixel monsters, the game begins to develop an odd 70’s disco feel to it. Not a bad thing at all. The below screenshots really don’t do it justice, honest…

    And we decide to call the game Monster Mash. A banner is produced declaring confidently ‘COMING SOON!’…

    But then, disaster strikes!

    To be continued…

    Steaming Puppy pumps cool hot turrets!

    Here’s an example of the colouring system we’re using in Titan Attacks 2 – Revenge of the Titans. In this case as applied to a cooling tower, a player building that cools down your overheating turrets. It’s a common problem. Building a load of these little fellas nearby though can increase their fire rate.

    Here we have the cooling tower as it looks with colours applied in two schemes – night and desert. On the left we have the Colour Diddler which lets us fidddle away with the level palettes as the game is running. Neat eh?

    So how this all work then?

    The cooling tower is a collection of static sprites, animated sprites and emitters. The sprites, mostly white, can be coloured by the level palettes, and then this colour is affected by an attenuation colour and % the further from the center of the level they are – black in the case of the nighttime level, and a subtle red tint for the desert level colour scheme. Here’s the various sprites…

    First of all we have the base. This defines the bounds of the building making it easier to tell where the player can build things and distinguishes player buildings from other stuff going on. All buildings and monsters and trees and things are drawn from the front, but the map is actually viewed from above which is perhaps a bit of an odd way to do things, but it’s a lot easier to draw poo like that. The next sprite, the shadow, also helps in making the flat front-on sprite look like it’s sitting on the ground and not just floating about in space.

    That little black rectangle sits behind the main sprite animation. Inbetween these is an emitter that pumps out steam. This way the steam looks more like it’s coming out of the cooling tower rather than just from behind it. It’s hardly noticeable really. Maybe got a bit carried away there.

    The main sprite, unlike the others, has two colours applied to it – a top and a bottom colour – applied as a gradient to the sprite. The top colour is specific to buildings, and the bottom is a general ‘floor fog’ colour which is applied to almost everything – buildings and monsters and trees etc. This helps in the illusion of the flat building existing in the world space wotsit. It also means if buildings overlap vertically there will be a bit of colour difference between them, making it easier to tell them apart.

    Next up is the overlay sprite – this is about 50% transparent and is not affected by the level’s attenuation, meaning it’ll seem like it’s a bit glowy or reflective. Then finally on top of all that is the little glowing light animation that is synched up with the pumpy animation of the tower and the steam emitter. This sprite is neither coloured nor affected by the attenuation colour, so it’s always going to be a bright orangey red light thang.

    …and if you’re really interested or just having trouble sleeping here’s how the cooling tower appearance is defined in xml…

    <sprite layer="4" sublayer="1" colored="floor" attenuated="true" image="spriteimage.generic.2x2.base.01"/>
    <sprite layer="4" sublayer="2" colored="shadow" attenuated="true" image="spriteimage.generic.cooling.ground.01"/>
    <sprite layer="5" sublayer="1" colored="buildings" attenuated="true" animation="generic.cooling.back.animation"/>
    <emitter offset="25,0" emitter="steam.burst.emitter"/>
    <sprite layer="5" sublayer="3" bottomColored="floor-fog" topColored="buildings" attenuated="true" animation="generic.cooling.animation"/>
    <sprite layer="5" sublayer="4" colored="buildings-alt" attenuated="false" animation="generic.cooling.top.animation"/>
    <sprite layer="5" sublayer="5" animation="generic.cooling.glow.animation"/>

    Phew. Any questions? Anyone still awake?