Fill out your e-mail address and click submit to join the positech games newsletter!

Gratuitous Level Editor

Filed under: gratuitous tank battles cliffski 7:12 pm August 29, 2011

The GSB ship editor sucked, and the custom scenario interface wasn’t a Picasso either, mainly because in both cases, I insanely bodged them at the last minute, actually using mere text files to make the assets during the games production.

Now I am less insane, I’m using a built-in level editor for GTB from the near-start, which means there is plenty of time to polish it, and indeed it will be a major component of the game. I’m hoping to encourage almost everyone who plays GTB to make their own maps, and share them, LittleBigPlanet style, rather than fencing it off as something only the hardcore modders do.

That’s the current (placeholder UI art) level editor. It has a ton of features in it. Today I was working on code that lets you take an existing level from the game, and save it out as a new custom map, whilst editing loads of parameters for that battle, hopefully in a quite straightforward manner.

Actual level editing, such as setting paths, territory for unit placement, and all the scenery, is already done, although it needs a real usability makeover before it’s considered shippable.

In other news, I got a new ipad build of GSB today. Definitely making progress, but getting a huge complex PC sim like GSB onto the ipad is no quick and easy port. It still needs some work. As does everything.
I have a day off tomorrow, hence my manic working today :D

Planning out Gratuitous Tank Battles Development

Filed under: game design,gratuitous tank battles cliffski 1:11 pm August 28, 2011

This is one of those brain-dump blog posts where I just use the blog as a public todo list…

Major Things I need to do for GTB (still remaining)

  • Support for creating new custom maps from scratch and saving them to your local disk as new singleplayer maps. (includes final work on the map editor, and support for browsing custom maps, rather than the campaign maps)
  • Support for uploading new maps as scenarios for other players to download. (system for describing a map, verifying it is valid, ensuring no content is modded, listing it in the online database, and for clients to refresh that database quickly and smoothly).
  • Code for online profiles and stats checking, player friends lists, messaging and leaderboard stuff. (Possibly including regimental banners and descriptions, and integration of that into loading screens).
  • Code to support auto-updating for direct-bought copies, with registry-enabled paths so we don’t need to tell installers wheer the game is any more.
  • Tutorial, and method to reset it in the options screen.
  • Manual
  • Re-checking the unlocking system and choosing unlocks.
  • Support for modding. Allowing new unit variations, new hulls, new ground and prop textures, new sounds.
  • Integration with steam achievements (assuming steam approves the game) and maybe other steam features.
  • Integration of final art assets for battles, and construction of the singleplayer campaign maps, enemy units.
  • Integration of final, improved menu GUI to remove all that GSB placeholder stuff from the unit design screen
  • Optimisation
  • Bug testing
  • Play Testing and Balancing

The list doesn’t see quite so terrifying when I list it like that. Maybe things aren’t as huge as they seem. I should probably start thinking about releasing some screenshots at some point.

Stripping back the game to a simple start

Filed under: game design,gratuitous tank battles cliffski 9:08 pm August 26, 2011

I’ve been having a few days of angst (ok a few weeks) regarding game design and ‘fun’ in Gratuitous Tank Battles. I guess I was panicking at the intangibility of ‘fun’ and thinking I might be constructing a huge and very elaborate ‘system’ and ‘simulation’ rather than a game. Essentially, it became clear to me that the game was a bit too much like company of heroes and not enough like chess.

Now COH is a great game, but I think it suffers a bit from unit-balance hell. This is something GSB really struggles with, especially for new players. Chess, on the other hand, is awesome in this regard.

Chess only has a handful of unit types, and their capabilities are simply explained. Chess is all about the complex interactions between simple units. This is a good game. COH and GSB are about the super-complex interactions between complex units, and a huge number of them. This is a deep, but also hard to learn, and possibly frustrating game.

I’m pretty sure I’ve sorted it all now :D . Essentially, GTB needed the starting game stripping back to very few unit types. Maybe 9 units to attack with, 9 to defend. That already makes it a fairly complex tower-defense style game. The joy of GTB is that there are so many more layers for the player to explore beyond that basic game. For example:

  1. After the player has got the hang of the basic UI and mechanics, we can flip things and make them the attacker instead of the defender. yay!
  2. After that, the player can unlock extra units on top of the starting nine. Yay!
  3. After that, the player can start to customise his units, choose different modules for them, and also edit their colors to look distinctive. Mega yay!
  4. After that, the player can try different game modes (Rush, or possibly waves rather than continous attack). And also try online challenges (eventually).
  5. After that, the player can fiddle with the built-in level editor and design their own maps either to upload and share, or to play against the AI. Woohoo!

So, if I can get that basic 9 types vs 9 types defence game working just great, then I am pretty convinced everything else will fall into place quite nicely. It just needs a ton of work, but that doesnt bother me at all. I’m just keen to get the initial mechanics of the early game to be perfect, and I made decent progress on that today :D .

 

Slipped back into graphics tartery…

Filed under: gratuitous tank battles,programming cliffski 6:21 pm August 24, 2011

Ok, so for a few days I was working on graphics stuff for GTB, rather than gameplay. A lot of this came about because I wanted some GUI in there for issuing movement orders to units, and that is mostly done now. It also looks pretty nice too. The idea is not that you will generally be issuing movement orders, because like most tower defence games, your troops attack on rails, but sometimes there is branching, and you might want to ensure a certain unit goes left, or right, so you can give them an override-path manually. My current thinking is that in the GSB style challenge battles, this just isn’t an option, so it retains it’s hands-off style for that game mode.

A bit of profiling through a lot of doubt over my claimed 400% increase, and it looks like it’s a lot lower than that :( I blame Visual studio often not realising it needs to overwrite an exe when you change configuration. pesky Visual Studio…

However, my profiling binge did point out something scary (and slowdown-inducing) which was that in some average night-time battles, I was calling SetRenderTarget about 45-50 times a frame. Ouch! This was mostly stuff like searchlights and laser beams, that render to the screen, then also get rendered to a light map for later composition and niceness. They were handling this individually, rather than being batched as they are now, meaning less that 18 SetRenderTargets per frame, and several more of those will get optimised away soon. Many of them are essential, for selection UI, lightmaps, shockwave distortion and fog of war.

The ups-hot of this is that I can play fullscreen, release-build 1920 x 1200 res with all graphics options on, at night-time, with toggling night vision on and off, explosions, lasers, searchlights, unit selection UI and range GUI, path selection-GUI and the windowed UI for minimaps and unit selection…. All at a consistent unwavering 60 FPS, with fraps and windows media player running in the background.

OH YES.

Like GSB, this will be a game that really sells itself through videos of gameplay.
Also today I might peak at 9.5kwh of power from my little garden power-station. When that pesky tree gets trimmed, it should climb even higher. Oh yeah.

400% speedup in a pesky transform thing

Filed under: programming cliffski 6:39 pm August 22, 2011

This code was slow*:

    D3DTLVERTEX* pvert = LocalMem;
    for(int c = 0; c < CopiedIn; c++)
    {
        pvert[c].dvSX -= TransformX;
        pvert[c].dvSY -= TransformY;
        pvert[c].dvSX *= TransformZoom;
        pvert[c].dvSY *= TransformZoom;
    }

This code runs in one quarter of the time:

    D3DTLVERTEX* pvert = LocalMem;
    for(int c = 0; c < CopiedIn; c++)
    {
        pvert->dvSX -= TransformX;
        pvert->dvSY -= TransformY;
        pvert->dvSX *= TransformZoom;
        pvert->dvSY *= TransformZoom;
        pvert++;
    }

Pointers FTW!

I’m doing this sort of stuff now, which isn’t as fast as actually using hardware T&L, but is better than my older, hacky software transforms which happened on individual sprites, rather than at the VB level. Yeah I know… everyone uses world matrices and hardware T&L, I won’t bore you with the reasons I’m not, but there ya go. It works! (GSB uses a per-object world -> screen software transform for each object).

EDIT: These measurements may be a glitch. I’ve run and re-run, and re-run the profiler on both versions and now cannot get as big a discrepancy (although there is still a speed difference). Getting accurate measurements on a multi-core PC that has a live internet connection and various background services running is hell. Now I know why people like console dev :D

*relatively speaking.

Considering multiple attack path mechanics…

Filed under: game design,gratuitous tank battles cliffski 6:30 pm August 21, 2011

Soo… one of the things about doing a reverse tower-defence mode in my game, is that suddenly you care more about the route your troops take. In tower defence, the fact that enemies may seem to mindlessly go off on a tangent doesn’t matter. If they act dumb then yay! if they act clever then yikes! but it’s never frustrating.

As attacker, things change. if a left turn goes to certain death, you expect your units to take the right turn. But is it that simple? Maybe left is lethal to infantry, but right lethal to tanks. Maybe you want to send the infantry to their deaths as a decoy etc. Consider the following map:

In terms of general design and gameplay, I love this. it makes for huge flexibility, unpredictability, and variety. As a player, I can find it frustrating when attacking because the troops may take a route I don’t want them to take. I’ve been mulling over various GUI ideas for issuing orders. None are perfect, and in any case, I’m keen to have GSB-style hands-off play for challenges, which means too many mid-battle controls are going to be a pain.

I can’t yet decide whether it really is frustrating as a player if the routes are chosen by each unit, or if that’s just me as designer panicking. The instinct is to add all sorts of options or UI controls, but I don’t want this game to be complex to play. Hmmmm…..

On a lighter note.

Programming RTS Unit selection outlines

Filed under: gratuitous tank battles,programming cliffski 1:28 pm August 19, 2011

Programming RTS Unit selection outlines is a pain. I had an amazing GUI mocked up by an artist, and most of it is now in Gratuitous Tank Battles, but today’s todo list included unit selection outlines. He had mocked up this:

And now I want to batter him with a baseball bat.

(I always tell artists to do the best stuff they can possibly imagine, and let me worry about how I’ll make it work. Reach for the stars etc…)

You might think it’s easy. Just draw the image bigger first, with a flat shaded effect (I use render states, but YMMV), and then draw the unit on top. WRONG!

Firstly, that means your UI doesn’t shine through smoke or other effects layered on top, which isn’t as cool. Secondly. it means the units shadows are cast onto its own selection UI (yuck) thirdly, it just plain doesn’t work.  It works with squares or circles or other basic shapes, but take a complex image, scale it up, then draw the smaller image inside it. See what I mean?

What I really need is some way of doing what photoshop calls the ‘stroke’ effect, where the outline of an image is expanded. Not expanded directly from the image center, but expanded in all directions.

One solution mentioned online is to draw the flat-shaded bit (enlarged selection) 4 times, moving it up down left and right by 1 pixel each time. That’s great if you want a 1 pixel outline, but 1 pixel sucks, and beyond that, you will get corner issues, plus… 4x rendering potentially every unit in your army every frame is not nice.

Another solution would be to have extra versions of each sprite, already-scaled up in photoshop, and render them for the enlarged versions instead. This has issues where the image already touches the sprite corners, and in any case, that means that the selection outline is a fixed percentage of the unit size, rather than a uniform 4 or 8 pixels, which would look tons sweeter.

So… how did I fix it?

I haven’t yet… It’s driving me bonkers :( I am considering an offscreen render target that blurs a matted sprite, but that wouldn’t be crisp, which I think would look better. I wonder how they did those outlines in age of empires 2?

Note, almost all discussions online about this refer to 3d meshes. I use 2d sprites with alpha channels. Totally different :(

 

edit: this is what I have so far, quite like it, may compromise on it…

Drama doesn’t always mean guns

Filed under: game design cliffski 10:49 pm August 18, 2011

I’ve just re-watched the film ‘glengarry glenross’. For the unitiated, it’s a ‘feel-bad’ movie that is primarily a lot of legendery actors playing distressed real-estate scam artists shouting abuse at each other. I thought it was good. Anyway…

It got me thinking about a recent discussion following the news about a new star trek shootemup style game, where people (rightfully imho) despaired that even with a star trek game, it’s another game where you shoot stuff.
Now shooting stuff is fun, and it makes for great games. I’m making a game about shooting and blowing stuff up right now (but I’m also involved in a non-shooty game too…), but there is definitely more to life.

People say that drama requires conflict, and that’s fine, but glengarry glenross reminds me that conflict doesn’t have to be rocket launcher vs tank. It can be al pacino vs kevin spacey in an office. I know it’s MUCH harder to code believable, interactable NPC personalities in a familiar situation like an office, than it is to code convincing guys shooting at you, but hey, it’s 2011 shouldn’t we be trying this?

There is a big market out there (I suggest…) for games that involve conflict and drama, that do not involve guns. I’m sure a lot of these ideas suck, but one might work… why can’t we have a game where you are:

A hostage negotiator
A marriage counsellor
A businessman that performs hostile takeovers
A trade union leader
A schoolteacher
The leader of a political pressure group
An investigative journalist
A paparazzi photographer

Forget the graphics, forget the physics and the tech. Make a game based around characters and situations that are dramatic but familiar. I’m sure millions tried farmville because they see farms as something familiar, unlike orcs, or lightsabers. If you could do it right, I think you could make a game out of any of those concepts. It’s tough as hell making a game on a topic that isn’t normally used in games, there is nobody to copy. Sometimes, that turns out to be a great idea.

Cross platform angst and my hatred of middleware.

Filed under: business,programming cliffski 11:33 am August 14, 2011

I do not have cross platform capability. if you play my games on linux, it’s through WINE, and if you play them on Mac, they were ported by a third party company. In the long run, this is likely to be a business weakness of mine. The ipad is great, and I can see it’s a huge market. Inexplicably, people seem to want to play games on phones, and with Microsoft making it more and more difficult to let people just download an exe from the internet, and the dominance of portals online approaching 100%, a move towards html5 or php / flash games seems like a sensible move in the long term.

Of course, people say that the down-loadable PC market is huge and not to worry, but I’m thinking 10,15 years ahead. if I’m still in PC gaming in 15 years, I need to think on those sorts of timescales. (I’ve been reading lots of warren buffet, it’s affecting me :D )

I recently checked out unity, because a top-secret-side-project-i-wont-discuss-yet is being developed in unity, and I’ve never even seen it. I was immediately put off. I can see how for many developers, unity is AWESOME. It certainly provides a ton of tools, functionality and easy-to-use stuff. It seems a lot of the fiddly, hard work has been done for you.

The problem is, I just HATE middleware. I don’t like the way other people code (as a rule, ancient-james excepted), I hate it when documentation says “you can ignore this coding concern, we handle it under the scenes” and I fear black-box code which promises to be ‘optimised’ but doesn’t tell you how, or with what assumptions.

I hate the fear that a bug will crop up after I ship, and not only can I not find it, I can’t fix it even if I could. That sucks big time. It’s rare, but not unknown. Plus I fear that ALL middleware has been built with certain limitations, and certain assumptions. Make no mistake, Unity is designed for 3D real time games. It might be ok to make a 2D turn based game in it, but you will be fighting against the tide, not with it, and carrying a lot of 3D engine bloat with you.

I celebrate the existence of unity for making many devs lives easier, but so far (I may be converted), it really isn’t for me. I like to code from the ground up, with complete control of everything. I’m a guy who uses char* and fopen(). By 2025 I might have moved entirely to std::string and CreateFile, but don’t hold your breath. Also, there is an element of ‘if it ain’t broke…’. I’ve made quite a few games with my own engine, so maybe I should build upon that, not throw it away in favor of someone else’s code?

A decision for after GTB ships, methinks.

 

Design focus, supply drops

Filed under: game design,gratuitous tank battles cliffski 3:15 pm August 12, 2011

The last few days have seen nothing but multiple xperiments with reconfiguring the gameplay for Gratuitous Tank Battles until I hit the magic balance of excitement, fun and spectacle. This game design business is tricky stuff!

Tower defense is an accepted, well-known formula, but tower ‘attack’ is not, and at the very least, I want to ship a game that is fun to play as both attacker and defender in tower-defense style. So with that in mind, I played the game a lot and concluded that it had lots of design issues. The main one was traffic jams. I was trying to design a simple ‘starter’ map that had a single weaving path between towers, and you would place your units and away they would march. The problem was, that when you spot a certain difficult tower ahead, it’s all very well placing a unit that you think counters it, but that unit is then stuck behind 15 other units before it gets there.

Initially I’d been scared of multiple paths for all maps, because of the complexity for the player, frantically scrolling around. Then I realised that if the paths were vaguely parallel, this problem went away. if I shrunk down the map a bit, I could fit the whole screen in with one look (when zoomed out), and could get more of a grip on it, even with multiple paths.

There have been a whole host of other changes as a result. Lots of balance changes, plus the introduction of ‘supply drops’ which automatically drop on the path in the quietest areas of the map, thus encouraging the attacker to spread his attack over multiple routes. That seems to work, as it’s a nice trade-off between ‘those supplies look tempting’ and ‘I ‘m kinda fully committed to attacking this route instead’. Parallel groups of paths also encourage complementary units, so repair wagons can trundle along beside assault mechs, etc, and a sluggish or damaged tank doesn’t bring the whole army to a halt (just half of it :D ) I have full support for units stepping sideways around such blockages, I just need to try it and see how it goes.

I have some crappy placeholder art still in the game, and tons to do, but the last few days, where I’ve totally ignored graphics and only fiddled with mechanics and balance, seems to be paying off nicely. It feels more like a game now, and less like a tech demo. I also ditched fog of war, although it may well return in certain modes.

Next Page »