Cogmind is coming to Steam this month! This was inevitable, of course, if a little later than planned as I waited to at least partially get over the serious injury which has been keeping me from making progress for months now. Anyway, here we are, with contracts signed, a store page already in the open, and a Steam build more or less done and waiting for October 16th.
It’s certainly been an interesting process filled with new challenges, plus internal preparations for Steam doesn’t seem to be the kind of thing people write much about, so I’ve decided to share my experience here.
Signing Up
Valve has “Steam Direct” now, whereby any developer can simply pay to release their game via Steam, but having already gone through Greenlight earlier this year… I didn’t have to worry about that. I thought they’d merged us into the new program and would require that I also wait 30 days from sign-up before launching, as per the Direct rules (there are other new rules as well), but that doesn’t seem to be the case. I could just click the Greenlight submit button and as soon as everything’s ready and approved it’s good to go.
But before even starting this phase or touching that button, I had to worry about taxes--being outside the US made this a lot more complicated on all sides (both there and here).
This bit is more personal so I won’t go into details, but I spent a lot of time talking to the government about how to handle all this, as well as searching around on the web for other solutions. Yeah an accountant could’ve made things easier, but I don’t know any I feel I could really trust with this, not to mention accountants cost money and I’m out of that :P
Anyway, I must admit it was actually kinda fun to be reading and analyzing a bunch of tax laws. For a little while I felt like I should’ve been an accountant, haha. Basically, I’ll be taxed and fee’d to death, only getting to keep a small portion of Steam revenue, but whatever, I suppose it’s better than not having it at all.
So with that decided I clicked on the button.
Forms
Inside you can’t do anything until you sign the NDA and a developer contract that details what you must, and cannot, do. No surprises there.
Then you still can’t go much further because of course they want to first confirm your banking info and identify for tax purposes. That takes at least a day or two, though my situation being a little… different, it took them an extra few days for all that go through.
Around this time I’d already decided I was going to release Beta 2.2 before the Steam release anyway, just to kinda get back into the swing of things and also to provide something new for players who’d been waiting all summer without any significant updates.
So I worked on that while I waited. No rush. Even after being granted full access I waited a couple days before evening logging in because I wanted to get 2.2 stuff out of the way and start the next big task with a clean slate.
Store Page
Once properly signed up there are essentially two parts to publishing on Steam, the store page and the downloadable game itself. These are independent parts of the review and approval process, each with their own checklists outlined in the Steamworks UI. While there are a ton of buttons and menus everywhere, overall they’ve done a pretty good job of letting you know what needs to be done and how to get it done. This includes basic context help for most things, as well as access to helpful documentation.
It’s a good idea to start with the store page, because it can be approved and published before there’s even a build ready, allowing visitors to wishlist the game in order to be notified on release (and beyond, if they don’t buy immediately). So the longer that page is up the better.
Description
The store page is made up of more or less two components, the description and accompanying visual media.
For the description I started with more or less the same content that’s been on my website and other locations featuring Cogmind.
The second section is a summary of more specific highlights of the game, assuming visitors bother to read that far down. (That said, I strategically positioned an animated gif that initially appears only half visible on the page, which will somewhat tempt visitors to expand the description area to its full height.)
And below that, the last full section that takes up nearly a third of Cogmind’s description space, I dedicated to explaining why people may not like the game. Managing expectations is important :)
Of course I also use it as an opportunity to say some good things, as there are often two sides to everything, but the main point was to let people know about parts of the game which may end up being a turnoff--things that over the past years I’ve identified as areas certain types of players really won’t enjoy, and therefore it’s probably not a game they should buy.
Early Access games must also answer a number of EA-specific questions, again to set proper expectations using a consistent format defined by Valve for use across the platform. Answering these was quite easy for Cogmind, considering that it’s already fun and pretty much complete--the rest is just more icing.
(Note: The above content can of course be read more conveniently direct on the site now, but I wanted to save them here as images for posterity since they could change.)
Game Media
But of course almost no one likes to read these days… What they really want are screenshots and videos!
Fortunately I already have my own site with a lot of this stuff, so I just copied it all over. However the trailer is… still the same one from 2015 :P. I decided to leave it unchanged (“alpha” references and all), because
- doing so sure saved a lot of prep time--properly updating it would take up to a week, and would only improve it by a small amount, so it didn’t really seem worth it
- I’m honestly in no condition to go full blast for weeks leading up to a launch, so anywhere time can be saved is great
- I feel it’s a pretty good trailer as is, and still even mostly representative of the game; the only real visual differences would be the change in default font and how FOV is updated. Sure there have been a ton more interesting developments over the past couple years, but it’s not like I’m going to put spoiler content in my trailer anyway! (an updated trailer would feature more or less the same footage it does now)
I did make a few new screenshots, one created as a side effect of the “capsule images” I’ll talk about later, and a couple others because I saw some on the website that could stand to be better or replaced. (After making these for the steam page I retroactively changed them in all other places, too, e.g. official website, press kit…)
Most screenshots were simply copied over, though.
Capsule Images
Technically it’s not just the store page but “store presence,” as there are a few other images involved that don’t necessarily appear on the page itself but are tied to the game as found elsewhere on Steam’s website.
On Steam you’ll see that every game has a number of what are called “capsule images,” various representative images that at least bear the game’s title logo. You have to supply four of these for various locations on the website, and Steam uses them to automatically create smaller versions of each as necessary--this is important to remember while designing them, as throughout the process you have to ensure that a downsized version will also look good enough!
It was pretty easy to come up with the style for the “header capsule image,” meant first for the top of the store page itself.
Then there’s a “small capsule image,” used in all kinds of lists. For this one I just shrank the header image, but the true logo uses double CP437 lines, which look terrible when shrunk down really small, so for this version I decided to completely fill the lines. This helps it stand out pretty well at most sizes (at the tiniest possible 120×45 it doesn’t look so great, but that’s just because ASCII and not because of those lines in particular).
By far the biggest production was the “main capsule image,” which appears on Steam’s front page whenever your game happens to be there. I spent an entire day iterating on this one before coming to a decision. In this Imgur album you can see the full array of 15 iterations I was posting and discussing on Twitter as I went through this process, but I’ll cover some of the highlights here.
Technically Valve recommends including some gameplay-reflecting aspects into your main capsule, so I started with that, creating a screenshot to go behind the title:
Then I wanted to see if I could embed some of the ASCII aspects into the background, and also perhaps make the title pop a little more in the process (by darkening some or everything behind it):
I went through several other darker alternatives you can see in the album, including a pure ASCII background (note that this isn’t the actual ASCII in game, though--it’s the result of a signal interpreter animation, because in static form it looks a lot cooler than the standard ASCII, which is meant for readability over flair):
In my research I noticed other games not really doing the “reflect gameplay” thing in their main capsule image, instead going for whatever stylized art would be most interesting. That makes sense, since the player will see plenty of content on the store page itself, while this image is purely to get viewers to click there in the first place. Preferably it should attract the kind of person who might enjoy the game. Since the previous attempts were all a little too busy and had one or more non-ideal aspects about them, this new line of thinking got me exploring more stylized concepts. Well… this is Cogmind. When in doubt go green:
After that I continued trying to add more features, for example a faint green bar behind the title, but once again it seemed too easy to go too far with it, and maybe simpler is best. So the final image is what you see above.
It sure was a long route to reach the inevitable simple green Cogmind style :P
Despite making a “final” decision, though, I’m still tempted to swap it out and see if a more colorful version has a better impact, but there are too many variables at play to draw any conclusions if I did that anyway (A/B testing would be more effective here, if it were possible :/). I think several of the other options look good and would appeal to some people (well, that much is confirmed because preferences were all over the place when I asked around), but it’s hard to say any are outright better than staying simple, in terms of getting people to be curious enough to click on the image to learn more.
At least the screenshot I initially put together as a background was worth adding to the main collection, and this process also reminded me that Cogmind’s downloadable wallpapers are over two years old and there are some cool new styles I should put together for new ones in the near term!
The final required capsule image is kinda funny. It’s a “large capsule,” and I couldn’t find any uses such as those described in the help text. Here I should note that before making each of these capsule images I’d naturally first search around to research how they’re used on Steam to make the best choices possible. (And during the creation process I even superimposed my own concepts over Steam website screenshots to get a clearer idea of how they’ll look in action.) Well it turns out that this particular image is no longer used anywhere on Steam, but they require you to submit one “just in case they want to use it one day.” At least it was easy to do--just a smaller version of the main capsule would work here:
Miscellaneous
Of course you also need an icon, but every game will already have its own in the first place. That and logo images to go in the “community hub” area, but those are essentially the same or similar to the capsule images from above.
The store page needs a price set before it can be approved, although interestingly this is purely for internal confirmation because said price is hidden until launch. I imagine because more people will wishlist something if it doesn’t even have a cost associated with it yet, and wishlisting is an opportunity for Steam to remind them about it later (repeatedly…). This approach also at least delays inevitable comments about price from dominating or derailing discussions prior to release.
Cogmind’s price will be the same on Steam, albeit with a 1-week 10% launch discount (another option to set). Steam recommends this approach, it’s what most devs do, and Cogmind has already been out for a while at its current price, so I went with the recommendation. There are also international pricing options by currency, but there are a ton of them Steam has a convenient button whereby you can simply use their recommended prices in all markets based on the USD price. I like the idea of regional pricing since not everyone has the same purchasing power, although in the end Cogmind is an English-only game so it’s primarily purchased in only a handful of countries anyway.
The very last thing I did was set a release date! This was rather sudden, since I hadn’t thought about it closely before and wasn’t really sure how the next few weeks would play out, being unfamiliar with some tasks still remaining in the process (I had no idea how to do a Steam build, for example).
Technically you can change it, but I wanted to announce it everywhere and changing the date on people seems like bad form. So I pulled up a list of all major game releases for the month of October to see what I should try to avoid. It’s funny because scanning down the list almost all games for the month were scheduled for just a handful of days, and looking at those days they were all Tuesdays. I’ve always tried to release things on Tuesdays myself, as it’s a pretty good day, but apparently everyone knows that :P
I chose October 17th, but by Steam time (and a majority of Cogmind players) that happens to be the 16th, so while it’s Tuesday for me here I’m actually releasing on Monday evening in the US (as I usually do).
Approval
With the entire checklist showing green I hit the button to mark for review, which they say takes 2~3 days. Two days later I got the email:
The only comment was that they recommend 16:9 screenshot and most of mine are 4:3. I already knew about this from the docs but chose to keep them as they were, if only because it would take a while to do new screenshots. But it’s true most people will be playing Cogmind in 16:9. I’ll consider switching the format for the full release, though I don’t consider it a huge deal.
In the time between submitting and receiving approval, I had already written up all the announcements in advance so that those could go out ASAP when the time came. (I always do this before any kind of big news, because writing them all takes a while!)
Not long after the page went live, there was already some activity on the new Steam discussion boards for Cogmind :D
The Build
Next up was to actually upload the game to Steam and get it installable and working.
I’d planned to have started this at the beginning of the week, but was behind schedule and it ended up being the end of the week before I got to it. The good thing is that this step is super easy (and by skipping the trailer update I saved a week, putting me right back on schedule!).
So technically you don’t even need to use the Steam API--after a few simple settings on the back end (again, good documentation), you can just take your game and upload it to Steam, which players can then download and install. Even in this capacity the Steam client is already pretty useful because of its auto-update feature, which compares new versions with what the player already has installed on a bytewise basis, then downloads as little as 1~2 MB of data within larger individual files that have changed. Pretty nifty, and although size doesn’t matter so much with Cogmind’s extremely lightweight download by today’s standards, it’s quite nice for players to have automated updates to begin with.
While for developers it’s not as simple as a direct upload (there are a pair of small scripts to edit and a command to run), the process is still quick and easy. There’s even a GUI version but I didn’t try that one because it doesn’t get much simpler than the command line tool they have. I followed a 10-minute step-by-step walkthrough video and *bam*, just like that Cogmind is on Steam and I could download and install it!
After that I quickly tried a couple more builds, changing random things in the files to see how that would affect things on the user end. Everything worked as expected. (I wouldn’t want to break player data!)
Keys and Testing
Shortly after uploading the first build I also ordered my first batches of keys, which were approved really quickly (like 10 minutes? probably automatically). Not the full amount I need, just some for testing, and to hand out to press soon enough.
Keys essentially come in two varieties, regular keys that can’t be activated until after release, and “beta testing” keys for immediate access regardless of release state--with these the user can essentially install and play as if a game were already released.
I handed out a few keys to Cogmind’s usual pre-release testing crowd, and one of the first observations was that the Steam Overlay doesn’t work. (Note: I’ve never really used Steam so I’m not too familiar with how it’s normally used--this is where outside help comes in real handy!)
I figured this would have something to do with Cogmind being a purely software rasterized app, and sure enough, right there in the Steamworks docs it says the Overlay is only compatible with games using Direct X, OpenGL, etc. So of course my first instinct is to see if I can get Cogmind running with OpenGL. Technically I did at one point code support for it in the engine, but at the time ran into roadblocks that were beyond me and gave up since I didn’t really need it anyway. Well, flipping that switch didn’t work out so well :P
Not only does it still not look right, the FPS on my dev laptop dropped from 200 to 20, haha. Me of several years ago apparently tried to get the engine to do little operations on a bunch of textures to mimic the software approach. Bad idea.
My latest idea was to just copy the composite software layer into OpenGL and that’s it, and I’m sure someone else with real skills could manage this in no time… According to porting guru Ethan Lee, that’s precisely what I could do. But I really don’t want to mess with OpenGL, and I’m also stuck in a decade past and use SDL 1.2, whereas something like this is reportedly easier in SDL2.
But without the Overlay, it wouldn’t be as easy for players to create and share screenshots, which are an important part of community building. Fortunately it’s possible to manually upload screenshot without the Overlay, and Cogmind does already have its own screenshot feature to begin with…
But enabling this feature requires integrating the Steam API.
Steam API
Valve has its own “Steamworks API” that developers can integrate into their own games to access additional features. This part I was a bit more worried about, just because I tend to have problems when it comes to fiddling with libraries and whatnot.
But sheesh, the API really couldn’t be any easier to integrate and use. Plus the docs are of course top notch, too, so the answers to most questions are right there. I just followed the short step-by-step guide and had access to all the regular Steam functionality.
Well, I did have one hitch, something most other devs probably won’t run across but I’ll mention anyway. I don’t use an English OS, and it turns out someone saved a portion of the Steamworks C++ headers in a type of Unicode incompatible with my system’s code page. It wasn’t too hard to fix, though--just import them into Notepad++ and re-encode to another compatible Unicode format. (Note: I was originally going to ignore it since it only produces a compiler warning, but it’s the highest level warning so I looked into it and discovered it has the potential to mess with Visual Studio breakpoint behavior in the debugger, thus it should probably be addressed :P)
With the API I could have Cogmind’s screenshot key (PrtScn) not only take the local screenshot as usual, but also automatically upload it to the player’s screenshot library. While at it I also added F12 as a key to take screenshots in Cogmind, to match the corresponding Steam Overlay default. It was overall very easy to do.
While digging around in the API docs I also noticed that apparently Steam screenshots can be “tagged” with the location they are taken, so I figured I may as well add that feature while I’m at it.
And while doing that, I realized that Cogmind’s native screenshot file names could stand to be more useful, so I updated them at the same time :). Now instead of just screenshot001, screenshot002… etc., their file names include both a time stamp and location:
I must say that after days of doing research, filling out forms, messing with screenshots and marketing material, and basically doing anything except looking at my IDE, it felt really good to get to do a bit of coding again! I didn’t think I was going to have an opportunity to do that for weeks more, after all the upcoming launch stuff is behind us…
Miscellaneous
There are a few other tasks related to providing a downloadable game.
Like Microsoft redistributables, which Steam makes really easy by literally providing boxes you can check for what you need (in my case MSVC 2010 x86).
It’s not required but there’s a spot to upload the game manual as a PDF so players can access it from their Steam UI. The manual is already both in game, provided as a text file, and found online linked from a number of places, but hey why not add one more :)
With the Steam API enabled I also looked at the full feature list for possibilities down the line. Achievements I was already planning to include (and they’ll be built into the game without Steam as well). Cloud saves should be pretty easy to implement, too, as long as people request it which I imagine they will. But neither of these will be in there for the first release. It’s “Early Access” anyway, and part of the reason for that was to give more time to work on Steam-related features with a new Steam-based community.
Approval
With the build basically tested and ready, I marked it for review. They say approval takes 3~5 days, and I’m only on day 2 right now. The requirements are pretty simple, though--they just want to check that it actually runs, and that it matches the description and claims on the store page. I claim Cogmind has seven different animated endings… whoever tests this had better be really good at roguelikes ;)
Update: This came by email on day 4 :D
After this point one had better be careful around the Steamworks UI, because there’s a new big button that allows you to release your game at any time!
Marketing
Just now I’m beginning the final release prep phase, spending much of the remaining time on the community and marketing side of things--talking to people, preparing website changes, writing more announcements, seeking out and contacting the right streamers/LPers, handling key stuff, etc. Basically everything except adding cool new stuff to the game, but I’ll get to that :P
There’s certainly a lot more to this phase, but I guess I can’t give an account here of details that haven’t transpired yet, so instead I’ll just use this space to remind you to wishlist Cogmind if you’re interested and haven’t already bought it, and help spread the word if you can! Thanks :D
14 Comments
Congrats! I did not know about the screenshot location thing, interesting…
One thing I would like to add — the Steam SDK is a Visual C++ library which uses OOP way too much for my taste, and it will not work correctly if you try to link it to an executable compiled with a different C++ compiler (because of different ABI). I had to make a C wrapper over this library (compiled in VC++), so that I can easily create both Linux and Windows versions with gcc on Linux :)
Hey Zeno Rogue, thanks! Finally joining the crowd of Steam roguelikes with you guys :)
Ha, my own source is very much incompatible with gcc, too, which is why I gave up trying a direct Linux port ages ago. I’m mired deep in the MSVC :P
Crazy that you went as far as wrapping the API, though :). That’s a pretty annoying restriction I’m glad I haven’t had to deal with.
I’ve actually maybe encountered an inexplicable tiny incompatibility between integrating Steam’s DLLs and my game, but it’s too early to be sure so I didn’t mention it in this post. One beta tester in particular is having a rare random issue with the Escape key (and occasionally others like function keys) sometimes becoming permanently unusable after some Alt-Tabbing, and this is not something that anyone’s ever seen in the game outside Steam (in years of testing by thousands…). That worries me because I have no idea if I’d be able to even solve such an issue. Not sure if anyone else has discovered anything like this so far.
(In any case, I’m certainly in the minority of modern games by still using SDL 1.2 and software mode.)
Oh, and you’re already the second dev today who has said they were unaware of the screenshot tagging :P. I just happened to only need to implement one feature from the API for launch, and while skimming the docs for how to do it saw that and thought it was interesting. (I admit I also just really wanted to code some more!)
Well, making a wrapper was not as hard as it sounds — most of the basic functions work without any problems, the problematic ones were ones using callbacks (I think I have been using only two or three of such functions) and some one other function which did not work for a reason unknown to me. So, far from making a wrapper over the whole API :)
Heh, to me, a designer-not-really-coder, “making a wrapper” sounds like wizardry xD
Very cool, and thanks for writing it up. Interesting to know the processes behind the scenes.
Congrats for getting it up there, too! I haven’t started steam in a while, I’ll have to see what happens, if it knows I’m interested! :)
Heh, I believe anyone who followed the Greenlight campaign earlier this year may have been converted to a wishlist, or at least gets some kind of notification. I’m not too familiar with Steam myself xD
I’ve never really been interested in Steam as a consumer (I prefer DRM-free and supporting developers directly), but at least it gives Cogmind the ability to receive automated updates, which is quite useful given how many significant updates there are!
Speaking of that, is getting the game on Gog.com on your radar? Plenty of time once you’ve reached release, of course, and assuming the Greenlight process didn’t tie you down.
I just today drafted the blog announcement for Steam release in a few days, and it mentions “payment options” including the status with GOG. We can talk about that then :)
Cool and congratulations!
I am actually wondering about your issues with the tax part. I am also not from the US and my country has no tax agreement with the US.
After struggling with this for a bit I ended up forming an LLC in the US to handle the steam sales :(
Ooh, “no tax agreement with the US” is the big problem, yeah. Me too.
I thought [very] long and hard about forming an LLC in the US to deal with this, but in the end it seemed like it would probably even cost me even more in terms of time, money, and headaches, so I decided to just eat the extra cost. It means much less money for me in the end, but there’s no good solution here for indies.
I mean yeah, if you could hire a decent accountant they could do stuff like set up a company in a third country and use every trick in the book to retain an extra 10-20% of the revenue, but I couldn’t justify the cost of doing that without knowing that I can even make much money with a niche game on Steam to begin with!
Quite a dilemma, so I eventually decided to just take the simplest approach possible to retain my sanity xD
Hopefully your US LLC works out for you, though! (In my case it seemed like going through a foreign LLC wouldn’t do much good because in the end I still need to bring any profits back over here, and in doing that it’ll still be taxed at least the same amount.)
Ohh the struggle haha.
The LLC cost me around 1000 usd to setup + a trip I had to do anyway to the us to set up the bank account.
Good thing is, once its set up at least where I live I an charge the LLC for my work and deduce some taxes that way.
Anyway, I have the feeling you will do very well :D
Let me know how it goes. You can always do an LLC later too!
Yeah it wasn’t convenient for me to take a trip right now, and I was thinking that if I do well enough I could consider setting up a foreign LLC down the line. I guess it’d be nice to have everything sorted from the start, but honestly for now I’d much prefer to just work on game development than deal with all this other stuff!
I’ve imagined kicking myself for it later, when I get charged a zillion dollars in taxes and am left with barely enough to get by, but for me part of the “preparations” before signing on to Steam was to just get over that and not care about it anymore.
In any case, if you do an LLC later on, let me know if I can help ;)
This has been gnawing at me for a while and I really should just put it out here in case you check back here again, but when I was looking into it an LLC didn’t seem to really solve the problems caused by not having a tax treaty, because for your LLC to pay you as a foreigner, it’ll have to file a 1042-S with the IRS, and that means it’ll withhold 30% of your income and you’ll have to also file personal income taxes in the US (on top of your business taxes). Or did you find some way around this? (Or maybe I’m reading it wrong…?)