Game Design, Programming and running a one-man games business…

Positech Games needs artists (as contractors)

Right, I need to get my act together and get some artwork commissioned. I need some good 2D artists, maybe 1, maybe two. Maybe the person I need is YOU or someone you know. I need some artists to work on Gratuitous Space Battles 2. If you haven’t heard of it before, it’s a space strategy game with really gratuitous explosions and effects, and lots and lots of exploding spaceships and lasers. Here is the website for the original game, and here is the placeholder for the new one.

I already have my spaceship and GUI artist chosen, but what I also need are some planets and nebulas.  Are you a decent planet/nebula artist? I’m talking about the kind of thing seen in games like Eve Online, or actually any really high quality decent space game. I want very high quality stuff, not 20 minutes fiddling with difference clouds in photoshop. I like billowing nebulas, really colorful stuff, stuff like those awesome hubble pictures…

hub

I need them as 4096 square jpgs. yeah that’s BIG, and yes jpg’s are lossy,. but I can deal with it. I probably need the original source as bitmaps or PSD files anyway… And I need about 10-12 of them, depending on cost. They all need to be totallyt original compositions, not something anyone has seen before. They need to have no stars in them (parallax starfields are added by the game). They also need to show some pretty cool variety. I may add bloom effects on top of them. I don’t care *how* they are made, they might be painted from scratch with a tablet, they might be composed algorithmically from fractal art programs, they might incldue some amazing blending of real life cloud sources, and will probably be some combination of all of the above. They just need to be fucking cool.

And also…

I need planets. I’ll probably paste these onto the nebulas in-game, using cunning parallax scrolling which is a new technique that has just been invented. I want some very cool planets, like city-planet of coruscant from Return of the Jedi (below), or some really amazing gas giant, or a planet with lots of wacky rings. Go nuts! These can be smaller, maybe I need some 1024 ones, and some 512 ones. And again, they have to be original, and awesome.

corus

I’m not looking for an employee, that involves tax and lawyers. I’m looking for a freelance contract artist. We never need to meet, of course you can work on these from home, to a deadline I’ll set, but I’m fairly flexible. I can pay you by wire transfer, and normally pay in dollars, but that’s negotiable too (especially if you are British). I pay reliably and on time, ask anyone. The only other restrictions are:

1) You must be at least18 years old (otherwise it gets tricky from a legal; POV).

2) You must not be working under a contract that could enforce ownership of your work. ie: if you are currently working for a games company, you need a cast-iron contract that states you can work for me in your spare time and that they don’t have any claim to your work. You *will* have to sign a contract to this effect.

Do you know the people I want? ARE you the person/people I want? Pls email me at cliff AT positech.co.uk. Pls feel free to send links to portfolios of similar work. I don’t want someone who has never drawn a planet or nebula before. i need to be able to see just how AWESOME you are.

And if you work in games, please tweet/share this to anyone who you think may be interested! Cheers!

Redesigning formation orders in GSB2

Formation orders in GSB sucked a bit. You had to select a ship, then a target and basically the order was ‘stay at this position relative to that ship’. This sucks in two different ways. Firstly, it means if the ‘target’ ship gets destroyed, the formation is instantly abandoned (yikes). Secondly, it is laborious to set up 32 ships into a formation.

The new system for GSB2 is simpler. You group select a bunch of ships and then add a formation order in one go. They then attempt to stay relative to each other, regardless who gets destroyed. Internally, the ships ‘elect’ a command ship, that has ‘free-will’ and the other ships will try to stay in relative position to that ship. That ship getting destroyed or tractored results in a new election. So far so good, and certainly better when it comes to ship destruction and setting-up GUI. However, it leads me to question a few things. Take this formation (coder art!)

form1

Just a simple line of 6 ships where randomly I’ve made the blue one the commander. If the commander heads to the right, then all is well. However, if he heads at an angle what do the ships do? Should they stay relative to the ship in absolute world terms, or in relative to the lead ships-angle terms? in other words, do we wheel?

form2

Obviously the two different behaviors are vastly different. It also brings up the topic of what to do if the command ship decides to retreat when damaged, does the formation follow? what if it’s just 1 damaged frigate… I’#m guessing they leave the formation at this point. In my mind, the reason behind formations is to keep ships trogether in the sense that they should be able to cover each other in terms of support, and shooting down incoming missiles etc. With that in mind, I reckon it would make sense to always elect the biggest ship as the commander, where viable.  Theoretically you could have a super-slow ship with the entire fleet locked into formation with it, effectively preventing anyone from moving.

What do you think? do I ignore angles and stick to world space, or pivot? and will the system of commander elections work ok? For reference, this is how fighter squadrons already work in GSB 1.

 

Reading back from GPU memory in directx9

Yeah you read that right, I’m reading back from the card. yes, I feel kinda dirty. What am I talking about? (skip this is you are gfx coders…)

***generally speaking games create ‘textures’ in memory on the graphics card, so the data is actually stored there. We write data *to* the card, and then we forget about it. We tell the card to draw chunks of that data to the screen, and it does so. What you never do, is read back *from* that same data. In other words, you draw stuff to the screen, but have no way of actually looking *at* the screen from back where you generally are in CPU / RAM land. The reason for this is everyone understands this to be slow, and there are very few reasons to do it***

I have some technique, the details of which I won’t bore you with, which requires me to draw the scene in a certain way, then blur that scene, and then check the color value of specific pixels. I cannot find any way to do this without reading back from the video card. I should say this is for Gratuitous Space Battles 2.

Theoretically, I could maintain an system-memory only version of the scene, render to it there, blur it, and read from it without ever touching the card GPU or card RAM. This would mean no sneaky using that video card bus to do any data transfer. The problem is, I suspect this would be slower. The GPU is good at blurring, and rendering, and in fact, all of the data I draw to the scene is in gfx loaded in the cards RAM. Make no bones about it, I have to compose this scene on the card, in card RAM. And if I want to access specific pixel colors, I need to get that data back.

So what I’m doing now is a call to GetRenderTargetData to grab the data and stick it into a system memory texture I created earlier specifically for this purpose. BTW did I mention I have to do this every frame? Once there I call LockRect() on the whole texture, and then quickly zip through my list of points, then UnLock() as soon as I can. So what happens?

Well if I look at the contention analysis in Visual Studio, it shows me that this calls a lot of thread blocking. It’s pretty much all of the thread blocking. This is clearly sub-optimal. But if I look at the actual game running in 1920×1200 res in FRAPS, the whole thing runs at a consistent 59-60 FPS. My video card is an Nvidia Geforce GTX 670. In other words, it really isn’t a problem. Am I over-reacting to what was once a taboo, and now is not? Are people calling LockRect() on textures just for giggles these days? Is my engine sufficiently meek that it leaves plenty of spare room in each frame to put up with this clunky technique?

I’ve also considered that I may be screwing up by doing this close to the end of a frame (sadly this is a requirement of my engine, unless I let a certain effect *lag* a frame). If it happened mid-frame I suspect the thread-blocking that prevents the end frame Present() wouldn’t be so bad. Sadly I can’t move it.

I’ve also wondered if a series of smaller LockRects() that don’t fill the screen might be quicker, but I doubt it, I think it’s the mere lockiness, not the area of memory that matters. I can easily allow the effect to be toggled under options BTW, so if it is a frame-rate killer for some people, they can just turn it off.

The Gratuitous Space Battles 2 Particle Editor (so far)

I recently got far enough in GSB2 to start fiddling with the particle effects for various things, and various low-level engine changes mean all of the particle configs for the original game are kind of screwed up and don’t really work right with this engine, so they all need re-doing, which is fine, as CPU/GPU horsepower has risen enormously since then, and it would be good to up the detail count on them anyway.

This reminds me that I never really had a decent particle editor when I started making Gratuitous Space Battles. it was all pretty poor. I had a MUCH better one for Gratuitous Tank Battles, (Which actually used two entirely separate rendering systems for different particle effects…) but ideally I wanted something I could have integrated into the game as an easy to use tool, maybe not for public consumption, but who knows?

Anyway it took me a day to knock this up: (click to enlarge)

editor

Which isn’t too bad given I use my own GUI code, and it gives me a very easy way to stay within one project and one app, and have the source code for the editor readily available, and using the same functions as the actual game, so if I update the particle engine, it’s updated everywhere. I now need to go and create some cool particle effects with it, but obviously that’s the fun part!

My approach to particle effects is pretty simple. I have discrete LODs for some of the more expensive effects, where if you zoom in, a more detailed effect with a lot more particles will appear. That certainly isn’t as smooth as it could be, and of course ideally it would all be procedural and algorithmic, but that sounds like a bit of a nightmare. Expect a smorgasbord of screenshots and videos eventually when I get the hang of using it properly :D

 

GSB 2 Shields

I’ve been working away on GSB2 while I wait for some people to do work for the Democracy 3 Extremism expansion. There isn’t really enough polished stuff to show to people yet, but I have got quite a bit of extra fluff sorted out. One thing I’ve got vastly improved is shields. In GSB 1, shields were basically assumed to be a sphere around a ship, and things impacted on the outer shell like this:

gsb1

For GSB2 I wanted shields that reflected the shape oif the ship, and eventually concluded that a combination of a grid (or in this case below, hex pattern) a blast texture and the alpha map of the target ship would let me convey the idea that a blast was absorbed at the last few millimeters by a tight ship-hugging energy field:

gsb2

It looks much better animated, as usual. it really works very nicely in very dark-battles, and I think it leaves plenty of opportunity for me to customise ships shields using different energy field colors and patterns.

I’m currently working on a combination of better parallax effects for debris and smoke, and also the GUI for choosing missions, which will look totally different. GUI stuff takes ages, and the whole GUI will get a re-design from scratch. I’m just working on the basic systems right now. With the battle effects, the module mechanics re-write, the online challenge system to revamp, steam achievements and so on, there is a ton of work to do, without considering new sfx and music… Still it’s definitely making progress and I’m still aiming for late 2014.