Game Development

Just Adobe Being Adobe

This week I dealt with an issue that made me want to write about the times software has proven me wrong in some way, either to make me realize it was better than I thought, or (perhaps more often) the other way around. Sometimes, this broken trust isn’t the fault of the developer. Big corporations buying things usually spells dystopian doom for a good product, and I’ve come to expect that. When companies like Microsoft or Adobe get involved, maybe it’s just time to leave. And on the other side of the table, sometimes it’s worth giving smaller players you never considered before a chance. They may truly impress you. (And then, of course, you just hope they don’t become yet another company absorbed by one of the tech giants)

In this post, I’m going to write about the issue in question, but in future posts I’d like to write about some other (hopefully more positive) stories.


A few years back, I found a piece of software called Substance Painter, which I eagerly included into my 3D workflow, because it truly is an excellent texture painting program. I also picked up the companion program Substance Designer at the time, and I purchased both of them via Steam. I appreciated the fact that you could sign up on their website, link your steam account, and download a standalone copy of their software, with a perpetual license for that version. As nice as it can be to install software via Steam, sometimes it’s nice to be able to minimize distractions, and there’s also the notorious issue that steam will only allow you to have any game or software open on one computer at a time (even free software, strangely). As such, this standalone version was pretty important to me.

And as great of software as Substance made, I’m here to explain how Adobe instantly erased all of the good will that the developers of Substance built over the years.

If you know anything about Adobe, you probably wonder why I even made the mistake of trusting any of their software to remain reasonably priced. And the answer to that is that I, unfortunately, gave them the benefit of the doubt. I’ve since learned my lesson.

2021 Edition Lies

This year, Adobe released the 2021 edition of Substance, and I actually pre-ordered it because I had owned both the 2019 and 2020 editions previously, and I really liked it. I figured 2021 would bring only good things for Substance. A bit wary of Adobe, I double checked the community posts to confirm that the 2021 edition would still offer a standalone version. Everybody said it would.

January 28th rolled around and as before, I tried to sync my Steam account to update my standalone perpetual licenses to include 2021. Only this time their site threw errors and wouldn’t let me update the license. No big deal, release days often have bugs like this. I’d check back later on to update my license.

A few days into March I decided to check back, and the site was still giving the same unhelpful error, telling me I had no products to sync. This time I emailed Substance, and here’s the conversation:

Hi, I purchased the 2021 editions of both Substance Painter and Designer on Steam at the end of last year, and they’ve been working great through steam, however I haven’t been able to get the standalone licenses working. Looking in my account (under same email as I’m sending from) when I attempt to sync the licenses from Steam, I get a message saying “Could not find any product to sync”, and the end-of-maintenance date does not update on the licenses I have. My profile is set to public, and I do have both of those in my library. Is there anything you guys can do from your end to help me get this working? Thanks for the help, and let me know if you need any additional information.

Also FYI, I’m emailing directly instead of using the contact form on the site because it looks like I can’t submit the form after filling it out. It scrolls part way up the page as if it was indicating a form validation error, but there’s no error messages visible, and all of the fields are filled out, so I’m not really sure what that issue is about either. I’m using the latest stable version of Firefox if that helps. Thanks again!


Hi Alex, Thanks for reaching out but unfortunately since the end of February you are no longer able to sync your Steam license to your Substance profile. The page will remain up for a few weeks while our web team disables the backend feature. I apologize for the confusion.

Jeffrey – Customer Success Manager

First of all, it seems like their web team is woefully understaffed. Not only has their contact form been broken for months, but they couldn’t even coordinate the removal of the button to sync your steam account? And the explanation is a little odd. Why can’t a frontend button be removed before a backend feature? And given the error, it would appear the backend feature has been disabled for at least a couple of months now. If I was willing to dig in deeper I might call shenanigans and say that the presence of that button has been a deliberate attempt to deceive existing users into thinking their licenses would continue being supported. But I digress.

At this point I was a bit concerned. But since I purchased the software in December, I figured, like every other software company I’d ever dealt with before, they’d be willing to honor the license at the time of purchase. So that’s what I asked for.

Okay, no worries. Is there not another way to get a standalone license for this product without purchasing a second license on the website? I purchased this via steam under the expectation that I would be able to do that as I have in the past. If that isn’t the case, I would have purchased the stand alone license instead of the steam one. Also to note, I did purchase this in December and attempted to sync in January, so if this is a recent change, I feel I ought to still be eligible for the license as it was at the time I purchased it. Thanks again for the help!


Hi Alex, The only way to obtain a perpetual license is via Steam. I apologize but since the end of February we can no longer manually sync them internally either as that system has not been disabled.

Jeffrey – Customer Success Manager

Getting some repetitive answers by now, and it’s also become abundantly obvious that they have no intention of helping me at all. Since their website has literally been broken for months though, I figure, perhaps they just need to catch up before bringing the functionality back in the future.

Is there any chance of seeing perpetual licenses (standalone, not via steam) return in the future, or does this mean Substance is moving to subscription-only going forward?


Alex, Substance will be subscription based moving forward.

Jeffrey – Customer Success Manager

Ah, good old Adobe. I should have known what to expect. I gave them the benefit of the doubt, and I regret that so much. So what I’ve got so far is: (1) Adobe will not honor the license I had at the time of purchase, and instead they are revoking access to software that I paid for, and (2) the software cannot be purchased ever again, as it will only be available on a rental basis. Again, this is expected behavior from Adobe. This is how all of their software works. What I didn’t expect from Adobe, however, was the blatant willingness to spit in their customers faces shortly after releasing a new version. I expected to have my 2021 license honored, and the 2022 edition would introduce a new licensing scheme. But in the end Adobe had more contempt for their customers than I had ever expected.

And so at this point I gave up. I figured I’d let the guy know how I felt, and try to move on.

Fair enough. I’m not really surprised, I just never expected this to happen in such a way as to leave us high and dry immediately after preordering an upgrade. It’s super disappointing. What can I do to get a refund for my purchase?


Alexander, In this case since the purchase was made on Steam you will need to contact them immediately to advise if a refund is eligible for the product. Cheers,

Jeffrey – Customer Success Manager

Of course. By all means don’t go out of your way to help me. Just tell me to deal with another company. Well despite the fact that I literally have a combined total of 4 minutes of time on both of these apps in steam, when I pleaded by case and requested a refund, they of course rejected it, because it’s been more than two weeks since I purchased it. I’m 100% certain that they could grant my refund themselves, as I’ve seen other developers do. But unlike most indie developers, Adobe represents all of the worst parts of the software industry, and you can damn well count on them to do nothing to help you out when it comes down to it.

And that will, without a doubt, be the last time I make the mistake of trusting Adobe.

Moving On

Oh well, if I can’t get a refund, at least I’ve got some decent texture painting software to use in the future, right?

Well of course, the problem with that comes down to standardization. In making assets for games, I like the files generated by my workflow to be files that I can continue to rely on in the future, and continue to iterate with. But seeing as I know I will never own another edition of Substance in the future, it makes little sense to make anything with it now, knowing that I will just be using other tools down the line.

And for those wanting some recommendations to replace Substance in your own workflows (and probably for the same reason), there’s some amazing software out there.

For one, Blender has decent texture painting built in. If you want to upgrade the texture painting functionality to be on par with Substance (and all without having to leave your modeling software!) you can purchase BPainter for a fraction of the cost of Substance. And you’ll be supporting a developer who actually stands behind their product. And, if you prefer a standalone tool, you can buy ArmorPaint, once again for a fraction of the cost, and you’ll be supporting open source software.


For me personally, the Blender/BPainter combo will be my main workflow going forward. You should do whatever works for you, all I ask is that you please, please stop supporting companies like Adobe. Substance is a good piece of software, but I wouldn’t recommend any individual developers rely on it anymore. It now exists more in the space of rental-only corporate-targeted software that exists as an industry standard solely because larger studios have bottomless pockets and prefer to throw money at problems than find creative solutions. And that type of software is precisely what Adobe does best.

Game Development Game Jams Software Development

Ludum Dare 41 Postmortem

Ludum Dare 41 came to an end just a little more than a week ago. I believe I’ve finally recovered from the mayhem and come through the better in the end.

Project Status

Unfortunately, my Ludum Dare 41 project, a “turn-based AI battle-royale game” called “Turn-by-Turn Deathmatch” was not finished when the 72-hour deadline hit. This was, unfortunately, my expectation for this one. I may continue working on the game in the future, but I am particularly averse to the theme and not satisfied with the idea that I was able to come up with.

The Theme

My struggle for this Ludum Dare originated at the outset of the theme announcement. The theme for 41 was “combine two incompatible genres.” I know a lot of people had differing opinions on this, but it is mine that it is the worst theme yet. For those of us that are relatively new to the game-design scene, the theme is asking us to throw out any convention of design that we may have relied upon to make a game that is not a complete flop. For those more experienced, I will grant that it does provide a unique challenge, and for that reason I was almost somewhat conflicted. That said, it is my opinion that Ludum Dare should be welcoming to new developers, as Ludum Dare is often some of the first exposures to the indie game dev scene that they will get. It should be a good impression. I believe this theme, by significantly raising the difficulty of creating a workable concept, likely created a bad first experience for them.

I created a very large, very time-costly spreadsheet of an incomplete list of game genres in an adjacency-martrix-like spreadsheet, which ranked the combination of any two genres as “good,” “neutral,” or “bad” based on how well it fit the theme, which is to say that a “good” combination was two genres that one would not expect to see combined. Even with this chart, I found myself struggling to come up with a theme, because as it turned out, many of the “good” combinations sounded like awful games, or they required some complexity that I knew would take longer than the deadline. For example, I really wanted to do a “first-person platformer,” which would be a 3D game where you basically see something like Super Mario from Mario’s eyes. It’s been done before, and I recall positive reception. Unfortunately, my 3D-focused game engine did not have a completed rendering engine, and with 3D being somewhat new territory for me, I scrapped that idea. Eventually I came up with combining “turn-based” and “shooter” and then eventually I realized that “shooter” could be replaced with “battle-royale” if the enemies are roughly equally equipped and trying to kill each other as well. I thought it was a neat concept, but I also knew that I had minimal experience with AI, and no experience with turn-based games. I was also looking at just over 24 hours left on the deadline when I had the theme nailed down, so I knew it would be a big challenge.

The Technical Struggle

I wanted to go into this jam using my custom 2D game engine, ArcticWolf. I saw this as an opportunity to, as I did last time, use the game jam as a sort of excuse and motivation to further my progress on the mundane core subsystems of my game engines. I had intended to work out a simple painterly blitting rendering engine, because I thought it would be the most straightforward design where the least issues could crop up. What I did not realize, however, was that rendering things in the correct order being mandatory in a painterly renderer, would actually prove to be a nightmare of a challenge.

In C++ there is no STL container that allows indexed access and automatically organizes them based on a comparison. There is a container called std::priority_queue, but that will only provide access to the front element in the queue. This could work if we rebuilt the entire rendering queue every frame, but I knew that would be a huge detriment to the performance of the game, since elements would not be frequently (probably never) changing their z-indices, and therefore what I really wanted was a std::priority_vector.

Well, I hate to break this to you all, but no such thing as std::priority_vector exists. So I made one. In the ArcticWolf code, there is a class called aw::PriorityVector, which does everything that I needed. It took a lot of work, but it is one of the pieces of my creation during this game jam that I am the most proud of. It’s very simple, and all it does is store elements into the vector in the correct order based on a comparison type, the same that you might pass to std::sort. If the attributes defining the comparable values of the contained objects change, there’s a method that allows reordering the entire container, which is expensive, but useful if z-indices change. Another couple of useful helper classes were created to be used with this: aw::PointerGreater and aw::PointerLess. They are equivalent to std::greater and std::less, but they dereference each element being compared. This was necessary because the aw::Renderable class was polymorphic and referenced via pointer only, which meant the usual comparisons would have actually compared their addresses, not their values.

The main technical struggle, however, was in the complexity of my ambitious rendering engine. I decided it to render a scene which contains polymorphic layer objects, each of which can contain a polymorphic aw::Renderer and a bunch of objects that contain aw::Renderables, getting passed as pointers back to the aw::Renderer when the layer is rendered. With this system, I could have a base that is a tile map, representing the game world (which I also intended to allow multiple layers with different parallax values to make it a 2.5D engine if I wanted), and then a sprite layer on top of that into which the player and other entities would be placed, and then a UI layer on top of that which uses a rendering pattern similar to HTML5 DOM.

I spent a lot of time on this rendering code, and I am glad to say that I made quite a bit of progress in the process, but it also means that I didn’t have enough time as the idea that I had would have required. I was able to get the preloading and menu completed, but not much beyond that. I actually ended up trying to temporarily bail on the new rendering engine and write raw rendering code within the last 12 hours of the jam as a last-ditch effort to get a workable game by the deadline, but by that point I had not slept in a long while and I didn’t have the focus to keep myself awake.

At some point, I decided that this jam and its very undesirable theme was not worth the suffering. I remember waking up with my face down on my laptop, completely disoriented, with the morning sun shining brightly on me, and at that point I decided to close the project on the ldjam website and go to sleep. I woke up at about 11PM that evening. So much for my sleep schedule.

Future Plans

I was quite disappointed in the theme for this Ludum Dare, and I can’t help but wonder if the reason we’ve started getting worse and worse themes over the last few years might be directly correlating to the improvements being made to the ldjam website and making voting easier. They received well in excess of three thousand votes for the theme, but based on past trends, I think we can expect approximately a third of those people to submit games. Thus, it seems likely that many of the people voting on the theme have little to no intention of making a game for it, and therefore they have no interest in making sure the theme is workable, reasonable, and doesn’t cut out new developers.

My suggestion of improvement would be to allow theme voting only for users with submitted, completed, and rated jam or compo submissions to vote. In my opinion this would drastically improve the themes. That said, I don’t think that is likely to happen. Given that, next Ludum Dare, I may or may not participate depending on the theme. If the trend of worsening themes continues, I will not be participating in Ludum Dare 42. Nonetheless, I do intend to do a game jam in August. That is not a question, what is a question is whether or not I will be following the chosen theme or the standard deadline. I’ve been toying with the idea of running my own week-long jam with a theme chosen by either myself or by taking one of the losing themes from a previous Ludum Dare. Obviously I’d lose out on some of the community features of Ludum Dare, but it would still provide more or less the same training effect, and I think in the course of a full week, I’d be able to create a more-than-trivial game design.