The command UI – the interface you use to give orders to your fleet, while also piloting your flagship – has always been tricky to get right, and has gone through a few incarnations since the first release. The combat gameplay merges a top-down shooter with some RTS elements, and both place high demands on your attention. You have to be able to control your fleet, while still participating directly in the combat - this is the goal the UI has to achieve.
The very first version of the UI used the standard RTS model – control groups, right-click to order ships around, etc. It didn’t work very well – there’s a strong incentive to keep checking on how your ships are doing, so that you can adjust if they’re doing something you don’t like. Optimal gameplay was, then, constantly interrupting the flow of combat to open up the map, check on your fleet, and tweak their orders.
The next version – the one that’s in the current release – solved that problem by limiting how many orders can be given to ships (via “command points”) and adding the concept of “assignments”. Instead of ordering ships about, you’d create tasks – capture this, defend that, rally a carrier here. The ships would then work out the details on their own. You could also give a few direct orders if you saw the ships doing something undesirable.
This worked much better – you could create an initial set of assignments at the start of the battle, and then just focus on the combat, only occasionally adjusting them. Because you couldn’t give unlimited orders, you were freed from the burden of having to constantly give orders to feel like you’re playing optimally.
The new approach had some issues, though. When it worked (the AI doing the right thing in “working out the details”), it worked well. When it didn’t, it could be frustrating trying to fix it using the limited direct orders.
The bigger problem was (and, I suppose, still is) accessibility. RTS-like controls are the go-to assumption when one sees a map with units on it – but they didn’t work. If you clicked on a ship, hoping to tell it to do something – you couldn’t! You’d be presented with a context menu that let you create assignments that target that ship – i.e., you could tell your fleet to escort the ship you just clicked. You couldn’t tell that ship to escort something else, not without creating that assignment first (and then using a direct order from the context menu to assign the selected ship to it – a somewhat clunky process).
Telling the game what you want done – i.e. creating an assignment – is reasonable, in the context of commanding a fleet. An admiral wouldn’t tell every frigate in the fleet exactly what to do – that’s the job of his subordinates. But being reasonable, as it turns out, doesn’t get you far when going against UI convention. Games don’t typically ask “what do you want done”, they ask “how do you want to do… eh, whatever it is, I don’t actually know/care.”
The new version – that’ll be in the next release – aims to combine the best aspects of the two approaches.
The assignments system remains in place, but RTS-like controls can be used to interact with it. For example, if you select some ships and right-click on an assignment, the ships will be assigned to it. If you right-click on an empty space (or an objective without an assignment), the game will automatically pick what it thinks an appropriate assignment. A single fighter or frigate right-clicked on an objective will result in a “capture”, a larger group of ships on an enemy-held objective will create an “assault”, right-clicking on a friendly ship will order an “escort”, etc.
It will undoubtedly get it wrong sometimes – this is fine, since you can always change the assignment by clicking on it and selecting a different type. Creating assignments by clicking on the target (not the actor(s) that will carry it out) is still the preferred way.
Command points also remain, but work a little differently – creating an assignment or giving a direct order opens up a “command channel” for a few seconds (of game-time, the channel will stay open indefinitely while paused), or until the command UI is closed. While the channel is open, you can give direct orders for free. Creating assignments still costs a command point, though.
In other words – spending a command point gives you something akin to a “turn”, during which you can give orders. The number of these “turns” is limited, but what you can do during one isn’t.
As usual, the devil is in the details. “Left click to select, right click somewhere to give an order” sounds great, until you consider that in the current build, right-click and drag moves the view around. Oops! So, how do we get around that?
One option is to introduce a new way of panning – the way RTS games do, by moving the mouse to the edge of the screen. I did actually add that, but I’ve always found it a bit awkward to use in RTS games (lots of moving the mouse around to pan a hard-to-control-exactly amount), and wanted to keep right-click-and-drag as well. It’s something that all of the UI supports – weapon lists, the campaign map, the trade screen, etc – you can right-click and drag to pan/scroll, everywhere. Removing that as an option from the command UI felt wrong.
The answer was to take a right-click action when the mouse button is released, instead of pressed. If the mouse moved more than some threshold between the press and the release, it’s a pan. Otherwise, it’s a right-click. Sounds good, right? But, when you’re giving orders quickly – click to select a ship, move the mouse across the screen to right-click on an objective – it would oftentimes interpret that as a pan, just because of the inertia of your hand moving when you right-clicked. The same amount of movement done over a longer period of time would be intended by the player to pan the view, though. Considering whether the interval between the button press and release was short – and increasing the movement threshold if it was – helped things along.
Left-click had its share of challenges, too. You can select ships - but can you clear the selection? You might want to, because when you have stuff selected, an accidental right-click could give unintentional orders. So, how? Clicking on an empty space seems like the most intuitive way to do it (“click on nothing to select nothing”), but that already has an action attached to it – it creates a waypoint. The answer was simpler this time – a click when the selection is empty creates a waypoint. Otherwise, it clears the selection.
Getting the little details right is what’s going to make the UI feel polished. There’s still some playtesting to do – and I’d like to improve how the ship AI actually follows orders - but for the first time, I’m happy with the way the command UI feels. It doesn’t just get the job done, but also isn’t fighting me along the way. A lot of that has to do with improvements to the assignment system, not just streamlining the controls – but the details of these could probably make for their own post, so I’ll refrain from getting into the details.
Since you’ve stuck through to the end: here is a screenshot of the new UI. Please pardon the placeholders for a couple of the icons. Yellow arrows indicate direct orders, green lines are automatic assignments. The letters on the buttons are keyboard shortcuts.
And now, if you’ll excuse me, I’ve got a fleet command tutorial to rewrite. Grumble.