Monday, May 8, 2017

Cosmoteer 0.11.4 - A Universe of Particles!

Last week, I released version 0.11.4 of Cosmoteer. Despite only being a minor bump in version number, this release has lots of new stuff! The changelog lists all of the many improvements and bug fixes in this version, but the ones I want to talk about here are the greatly improved visual and particle effects.

In order to realize my vision for how I wanted the visual effects to look, I knew that I would first need to completely rewrite Cosmoteer's particle code, because the existing particle code was both slow and too inflexible. By using some very low-level C# code (utilizing some great new C# 7 features), I was able to create a new particle system that is not only more flexible than the previous version, but it is also much, much faster. The new particle system can handle about 100 times the number of particles as the old system while maintaining the same framerate.

The new particle system has allowed me to create much more interesting and exciting visual effects for weapons, thrusters, and explosions.

The first visual effect I upgraded was for the thrusters:

This is a pretty big improvement from the previous thrusters, which for performance reasons had far fewer particles. (The quality of these GIFs aren't great -- you should load up the latest version of Cosmoteer to check out all the new effects for yourself!)

Then, I upgraded the visual effects for when the various weapons fire:

It's hard to see in the above GIFs, but the appearance of the laser and bullet projectiles has also received a significant upgrade.

Lastly, I upgraded all the various weapon impact and part explosion effects:

(You may notice in that last GIF that, when the reactor is destroyed, the explosion also destroys much of the surrounding ship parts. This "collateral damage" is a new gameplay mechanic intended to make you think more carefully about where you place reactors, ammo factories, and cannons, all of which cause collateral damage when destroyed.)

If you're worried that your computer can't handle all the new particle effects, then fear not, I have a trick up my sleeve! Most of the particles you see above are actually "pre-rendered" as simple sprite frame animations. The sprite animation serves as the "core" of the effect, providing most of the visual punch. On top of the core sprite animation, extra particles (such as debris pieces and smoke clouds) are created to give it more visual interest and variety. But these extra particle are entirely optional and can be turned off by disabling the "Fancy Particles" option in the game settings. With this option turned off, Cosmoteer actually renders fewer particles than in previous versions while still looking significantly better.

Thursday, April 6, 2017

Cosmoteer 0.11.0 -- Fog of War & U.I. Improvements

Last week I released version 0.11.0 of Cosmoteer. It, and version 0.10.7 before it, add some significant new features and improvements to the game's user interface.

The most important new feature in 0.11.0 is the "Fog of War":

If you play RTS games, you are likely already familiar with the basic concept. Your ships can only "see" so far away, and anything farther than your ships' sight range is hidden in the "fog of war". In the above screenshot, the darkened areas of the background indicate areas that are too far from your ships to see.

Currently, the locations enemy ships that are outside of your own ships' sight will still be indicated with pulsing red dots, which you can see in the lower-right corner. These tell you where you need to go to find something to fight, but offer no additional details such as the size or armaments of the enemy.

The Fog of War changes gameplay, because now there's some risk involved in choosing to fight an enemy. It may turn out that the enemy is too powerful for you to defeat, and you'll need to run away. Occasionally needing to run away also has the added effect of making fast and maneuverable ships more important.

Version 0.10.7 also added a "Minimap":

The minimap is a long-requested feature that provides a simple overview of the locations of friendly and enemy ships. Unlike most RTS games which are played on a fixed-size battlefield, the playing area in Cosmoteer has no walls or borders and is infinite for all practical purposes. Therefore, the minimap automatically adjusts to show an area containing all of the ships in the game. The grid in the background always maintains the same spatial distance between lines, and so you can use the grid to estimate distances between ships.

Version 0.10.7 also added what I call the "Miniview":

The miniview is basically a "picture-in-picture" view of a single ship, allowing you to view one ship in the main view and another ship in the miniview at the same time. My hope is that it solves one of the biggest usability problems that Cosmoteer has had up to now, which is that during combat you can't watch both your ship and the enemy ship at the same time without zooming out and losing a lot of the important simulation details.

The miniview also isn't just for show, either -- you can also hover the mouse cursor over ship parts to see their health and right-click on them to target, all without having to move the main camera.

The miniview is customizable, but by default, it is automatically displayed during combat and will show either your ship or the enemy ship -- whichever one you're not looking at in the main view. When displayed, the miniview replaces the minimap, which is generally less useful during combat anyway. Both the miniview and the minimap can be resized as desired to take up more or less space on your screen.

Monday, April 3, 2017

Cosmoteer Gameplay Trailer

Today I made a little gameplay trailer for Cosmoteer! Pretty much my first time putting together a trailer, so the editing and footage is a little rough.

Sunday, February 26, 2017

Cosmoteer 0.10.5 -- User Interface Refresh

Cosmoteer 0.10.5 is out! While there aren't any major new gameplay features per se, the changelist is still among the longest to date!

The biggest and most obvious change is that the user interface has received a complete visual overhaul -- gone are the boring gray boxes, replaced with a spacey blue-and-green theme complete with sound effects and animations.

Aside from the visual changes, there are also some small-but-important changes to the actual functionality of the user interface.

First, the player can no longer (by default, although this can be reverted in the settings) simply click on or drag a box around specific parts to select them -- the player must now hold the Ctrl key while clicking. This is because my playtesting showed that many new players would accidentally click on parts of their ship and then be unable to give their ship orders, which was confusing and frustrating for them. By requiring the Ctrl key be held, it's now almost impossible to accidentally select parts without meaning to.

Second, because you can't upgrade your ship until you repair it, the game now only shows either the repair button or the build button, never both at the same time. (When your ship needs repairs, the repair button is shown in the place of the build button.) In some playtests, players got confused about why they couldn't press the build button, and so this change should hopefully make that more obvious.

Lastly, turning on "blueprints mode" is no longer a strange toggle that appears next to the build button after pressing it -- it is now a simple checkbox item in the '...' menu, and the game now remembers your preference.

Saturday, January 28, 2017

Cosmoteer 0.10.0 -- Bounty Hunter 2.0 and FTL Drives

Yesterday, I released Cosmoteer 0.10.0.

This is a big release, and it features a ton of little improvements along with two big, related features: a revamped "2.0" Bounty Hunter game mode, and F.T.L. Drives for ships.

Bounty Hunter 2.0

For about the past year, the standard mode of play, "Bounty Hunter", has been pretty simplistic. You, the player, start with a single ship and destroy enemy ships in the immediate vicinity to earn money which can then be used to upgrade your own ship or purchase additional ships. As you destroy enemy ships, additional enemies spawn nearby, and as your own ship or fleet increases in power, the larger, more powerful enemies swill spawn as well.

This simple kill-reward-upgrade-repeat loop has been fine for testing and iterating on the core ship construction and combat gameplay mechanics, but it honestly wasn't very engaging for the player. Killing an endless stream of ships over-and-over again in the same location with little choice gets repetitive really fast.

Bounty Hunter 2.0, while not solving all of the issues of Bounty Hunter 1.0, seeks to create a much stronger foundation upon which further improvements can be built. Instead of playing in a single location with an unlimited supply of respawning enemies, the game is now played across a large galactic map:

Each location in the galaxy map (the green icons) has only a handful of enemies, and they don't respawn as you destroy them. Instead, once the player destroys all of the enemies in a location, they must move on to another location. Each location has a small colored "shield" icon that indicates the strength of enemies present there:

In Bounty Hunter 1.0, the game itself determined the difficulty of enemies that the player would face, which meant that for many players the enemies were either too easy or too difficult. This new system gives the player a degree of choice in what strengths of enemies they will face, and lets the player pace their own difficulty curve.

More importantly, this new galaxy map now provides a strong foundation on which more gameplay can be added. In the future, as the player explores the galaxy, they will encounter space stations to trade with, pirate bases, asteroids to mine, vessels in distress, and more. These features will be added to the game over time as they are developed.

The galaxy map itself is procedurally generated, usually with 4-6 solar systems full of planets and moons. Each location is "attached" to a nearby planet or moon, which then appears in the background during gameplay to give visual variety and a better sense of location. The planets, moons, and stars themselves are procedurally generated using Perlin Noise. Blue, red, and yellow nebulas also abound in the galaxies, which determine the color of the background during gameplay.

F.T.L. Drives

In order to move from location to location within the galaxy, the player must construct at least one F.T.L. (Faster Than Light) Drive on their ship. Once constructed, the FTL drive allows the player to perform jumps to other locations.

Jumping, however, is not free. F.T.L. Drives use a new kind of "fuel" resource. Like credits, fuel is earned from destroying enemy ships, and then it is spent to perform an F.T.L. jump. The amount of fuel spent is determined by the distance of the jump, the size of the ship(s) making the jump, and the efficiency of the ship's F.T.L. Drives.

Efficiency is a new concept in Cosmoteer that determines how much fuel is used when an F.T.L. jump is performed, and its gameplay purpose is to make the number and placement of F.T.L. Drives on a ship a strategically important decision. When adding an F.T.L. drive to a ship, the game displays a green/yellow/red overlay indicating which areas of the ship are close to an F.T.L. drive (green) compared to which areas are far from one (red).

The farther (more red) areas greatly increase the amount of fuel need to perform an F.T.L. jump. And so to minimize the amount of fuel used, the player will want to place multiple F.T.L. drives around their ship in a variety of locations, making as much of the ship green as possible.

If the player ever runs out of F.T.L. fuel, they can purchase additional fuel for credits, but doing so is extremely expensive, and so it is almost always preferable to improve the efficiency of one's ship.

Because the amount of F.T.L. fuel earned from destroying enemies depends on the size of the enemy ship, as your own ship(s) grow in size, it becomes much less cost-effective to battle enemies that are smaller and weaker than yourself. (If you spend fuel to jump a very large ship to a location with small enemies, it is unlikely that you will earn enough fuel to recoup the fuel that you spent getting there.) My intent when balancing fuel costs vs rewards is that a ship with 75+% efficiency that fights ships its own size will generally break even on fuel.

Saturday, August 20, 2016

Cosmoteer 0.9.7 - Customizable Controls & More!

Yesterday I released Cosmoteer 0.9.7. There's not much super exciting in this release, but it still has a couple notable improvements worth talking about. (Don't worry, I'm hard at work on some big gameplay improvements, but I'm not ready to talk about those yet because I'm still figuring out what exactly those will be!)

Customizable Controls

I love PC games, and one of the reasons that I love PC games is because, at their best, they're very customizable. But it really bothers me when a PC game (frequently ports of console games) lack what IMHO are pretty standard PC gaming features; things like borderless window mode, support for computers with multiple monitors, support for high-resolution displays, triple-buffering, and good alt-tab handling, all of which Cosmoteer does well. But there's one standard PC gaming feature that Cosmoteer hasn't had (which I've been a bit ashamed about, as an avid PC gamer), and that is customize keyboard controls.

Until now!

Cosmoteer now lets you customize pretty much every control in the game. Want to change the hotkey for opening build mode to Shift-B? You can do that! Want to set Q as a shortcut to select the Crew's Quarters in build mode? You can do that! Want to make shift-tilde-apostrophe act as a left mouse click? Well, you're insane, but you can do that! There are currently 134 different actions that can be assigned to keyboard keys or mouse buttons, and each action can have two different key/mouse button combinations set to it.

Customizable controls are great for those of us who really like to personalize our gaming experiences, but they're also really important for making the game accessible to people who have physical disabilities; customizable controls allow them to tailor the game's controls to their own abilities so that they can still play and enjoy the game, even if the default setup doesn't work for them.

Oh, and also, by popular demand, WASD is now supported by default (in addition to the arrow keys) as a way of panning the game view. (And some existing shortcut keys got moved as a result.)

New Main Menu Design & Layout

The Main Menu has received a bit of an overhaul:

Now, the most-commonly-used options (New Game, Load Game, and Exit) are at the top of the screen, while lesser-used options are at the bottom. The primary purpose of this change is to create more room for options to be added as the game expands. I've already used this newfound room to add a "Community" button, which takes you directly to the online forum. Eventually I may add more options, such as multiplayer and mod settings.

Multi-Language Technology

Until this release, most of the text displayed by the game was written directly into the game's source code. This worked fine while the game was in the prototype stage, but it made it impossible to translate ("localize") the game into other languages. So I spent a couple days building a system to allow all of the game's text to be loaded from an external file, which can then be translated into other languages. While currently the only included language is English, it's now possible to translate the "en.txt" file into other languages and simply drop them into the "Data/Strings" directory. The game will automatically detect the additional languages and allow the player to switch between them in the Settings menu.

Here's an example of what the "en.txt" file looks like:

Thursday, July 21, 2016

Cosmoteer 0.9.6 - Part Micromanagement

I just released Cosmoteer 0.9.6, which adds the ability to micromanage individual parts, letting you give them individual targets, turn them off or back on, or tell them to hold fire.

To control the individual parts on your ship, first select your ship if it isn't already selected. Then, click on a specific part or drag a box around the parts you want to select:

The user interface in the bottom-left will change to give you some options pertaining to the parts you have selected. Most parts that consume power or ammo can be turned off, causing their crew to go perform any other jobs that need doing. And weapons can be told to "hold fire", which will prevent them from shooting unless you've given them a specific target, which you can do by right-clicking on a part of an enemy ship.

Additionally, this release also adds "control groups" like those found in most conventional RTS games. To put the selected ships into a control group, press Ctrl-F1 through Ctrl-F8, and then press F1 through F8 to select the ships in that control group. To put the selected parts into a control group, press Ctrl-0 through Ctrl-9, and then press 0 through 9 to select the parts (of the currently-selected ships) in that control group.

This release also adds some other minor but still nice improvements, such as being able to see health bars for your own parts without going into repair mode, and being able to focus the camera on specific parts (alt-click to focus on the ship, and then alt-click again to focus on a specific part).