Marvin Kosh
Marvin Kosh March 7, 12:51 UTC

Everything seems to be doing okay at the moment. -MK

When Mods Break: Incident Not Initialised

Incident Not Initialised. It’s a fairly informative error message. It tells me that I’ve broken one of my mods again.

To explain in more detail, I had a lucky break today when I released a broken update for a mod on Steam and here on the site. I might not have noticed the problem until some irate user complained about getting errors. As it turned out, I had a feeling that I’d done something wrong, so¬†I loaded up RimWorld and did a bit of basic testing, finding an error right away.

This isn’t the first time I’ve managed to break a mod that was working fine by adding a new wrinkle and then not doing all the necessary testing. In future, I’ll have to stop and¬†think about whether I’ve really covered all the possible cases.

Because I didn’t. I loaded up an existing save, didn’t see anything immediately wrong, and then I went ahead and updated the mod on Workshop. What I should have done was start a new game and fired the Solar Flare incident at least once. ūüėõ

However, I did come up with a fairly neat solution to the problem.

Basically, my modded incident worker in the original DLL did not inherit the necessary features to work properly, because I goofed and set it to inherit directly from IncidentWorker, instead of IncidentWorker_MakeMapCondition.

What a dumb mistake that was. Maybe I meant to type that in full or copy and paste, but obviously that didn’t happen and now I’m writing this cautionary tale.

I don’t have a code repository and I wasn’t at home so I had to copy my mod from the Workshop directory, decompile my DLL, and make a new project to patch it. The decompile wasn’t clean because I didn’t think to download Zhentar’s awesome fork of ILSpy from his GitHub. So I had to fix a few little things here and there.

Maybe now I will consider the benefits of using a repository.

Anyway, the neat part is that instead of overwriting the entire DLL, I just needed to¬†add a second¬†one and point to that one instead from the incident XML file. The broken class is still there in the original DLL, but it isn’t referenced.

Good enough for a quick fix.

Obviously, this isn’t an impressive feat in the eyes of a professional coder. But that’s not the audience I’m writing for. There’s plenty of modders out there, experimenting with¬†all sorts of¬†interesting stuff that they might not know the ins and outs of.

If one of them is you, the point I’m trying to make is that your projects don’t need to be single monolithic screeds of code. They can be modular. And it might make it easier to fix things when they go wrong.

Obviously for the purposes of efficiency you might want some things to be bundled up in the same library, but it doesn’t always have to be so.

Thanks for reading. ūüôā

Usefulness of Steam review ratings

Have you ever looked at the summary rating for a game on Steam and wondered, ‘Is this biased?’ Or maybe, ‘Is this even a useful indicator?’

Steam review ratings lie on a continuum from Positive to Negative with Mixed in the middle. Quite often, a rating of Mixed is a death knell for sales because not only does it indicate that about half the reviews are negative, there’s actually a colour shift to orange.

However, reviews are themselves subject to a helpfulness review by regular Steam users. They can be rated helpful or not helpful (or funny).

In this way, reviews have a summary judgement of usefulness before you even read the review.

However you should be aware that this system can be hijacked by Steam users who simply disagree with the review.

Negative reviews, for whatever reason, get carpet-bombed with downvotes within a few days of being posted, while positive reviews are barely acted on in any way.

While this mass downvoting may not affect the impact a review has on the game’s rating, it does affect the reviewer who has taken a stand, highlighted the reasons why someone shouldn’t buy a game right now, and consequently are lynched by a silent mob. Some simply remove their review rather than watch it get dragged down to 10%.

In addition, reviews which are in the ‘Positive’ section may make you wonder ‘well, why is this reviewer still saying to buy this game despite the reservations they have about it?’

The conclusion I draw here is that Steam ratings may not always be an accurate indicator. There are factors which should make you cautious of a positive rating, but st the same time you shouldn’t outright dismiss a game just because the rating is Mixed, nor should you take it for granted that an controversial review is actually unhelpful.¬†There’s always someone with an axe to grind, and an open system of review can be subverted by them.

Game Review – Galactic Civilizations III


GC3 runs well, with not much waiting between turns. I was able to play to the end of a game on an immense-sized galaxy without encountering any performance issues, even on my fairly antiquated dual-core rig.

If you plan on streaming this game to Twitch though you will need a significantly more powerful computer – at least quad-core – otherwise framerate and turn processing will suffer. This is not a criticism, but rather a suggestion to be realistic with your expectations.

I did not encounter any stability issues with the release versions of GC3.


It ticks a lot of boxes in the 4X genre. It’s rewarding to explore, expand, exploit and exterminate. With the recent starbase update, turns are even more streamlined as constructors of your choosing are built automatically and sent to where they’re needed. You can further tweak this to suit your needs.

I feel that there are a lot of supported play styles, although the AI will not look on you favourably if you claim to be a major galactic empire and yet have no fleet worth mentioning.

I found myself trying different races and even different custom races and they all seem quite fun.

Artificial Intelligence

I found that the AI players were a bit dumb on the Normal setting. They don’t seem to adapt very well to the state of play and the galaxy settings.

Specifically, if there’s an unmet player trying to win a Technology victory, there should be an effort to find out where that player is. ¬†I made contact with the Drengin only when a survey ship went through a wormhole ¬†and ended up in their space.

Playing with tight clusters on a large map size means that the AI has a much tougher job of getting to the other side of the galaxy.

However, the AI does react adequately well when you mass a fleet with exclusively one weapon type. This means that there is now an incentive to diversify the weapons and defences on your ships.

I did not find that the AI made adequate use of ship roles, for example capital ships which are outfitted with a full load of weapons and are protected by escorts. During play it seemed that they almost always designed escort ships.

Some old exploits from GC2 still work in GC3. For example, you can lure an enemy ship to an ambush using an unarmed scout ship. It’s not clear whether this scout-chasing is all the time, or only when you make it easy for the hostile ship to keep up.

Diplomacy is a bit of a mixed bag. On the one hand, there are modifiers which can be easily understood and considered when you are dealing with AI civs diplomatically.

For example, if you set up a trade route with a civ which has¬†a particular ideology, civs with an opposing ideology to that civ will think poorly of you as a result – ‘You are trading with an infidel.’

On the other hand, a civ which has just met you can have all sorts of negative modifiers. This is particularly prevalent among major civs, and some of these modifiers could do with a sanity check. For example, ‘You are ripe for conquest’ indicates that they believe you don’t have a sufficiently large military to protect all of your empire. However, if you are well outside their travelling range, it scarcely matters how pathetic your military is because¬†going to war with you would not be practical without further research and/or range extension via starbase building.


Graphically, I find this game to be very well-presented. There’s a massive leap in texture quality from GC2 to GC3 throughout the game. I did feel that in ship combat the laser weapon effects could be improved upon, and engine trails need a bit of attention in those situations where a ship is turning but not moving forward, because you get odd-looking sideways engine trails.

The default ship parts and complete designs are gorgeous. There’s a considerable selection of ‘jewellery’ parts to build your ships with.

Planet textures are very nice and there is a variety of them, from burnt-red worlds with active cores, to lush green paradise worlds.

Nebulae, gas clouds and other cosmic bodies are welcome additions which are again, quite nicely textured and animated.


There are some quality soundtracks to listen to while you’re exploring and colonising the galaxy. My only criticism here is that because this is a strategy game and it can take a while to finish a game, it does get to the point where you just turn the music off for a while.

The sound effects are spot-on, not too subtle and not too obnoxious. Well, except maybe the shipyard anchor/unanchor sound!


The resources for modding are not where I think they should be. For example, the modding readme file has a glaring error¬†– it says that if you create a folder called Game in a given mod folder and put XML files in there which add to or override definitions in the game’s XML, that will work. But actually, a path of data/Game is needed instead.

The Steam Workshop for GC3 only features custom races and ship templates. Actual XML mods must be distributed and installed outside of Workshop. While I realise that Workshop integration of mods is far from simple, these days it is quite easy to overlook the efforts of modders if there is no Workshop visibility.

I was able to make some simple mods of my own work, so apart from the above reservations, the implementation of modding is okay.


This game, to me, is a serious contender for multiple playthroughs. The victory conditions are perhaps not equally good in this respect, however. I don’t really look forward to pursuing another research victory in a future game, for example, but there are other ways to win and other races to try so that does allow for a significant amount of replay value.

Some people are a bit critical of the DLC for various reasons, and I did not play with any DLC installed, but they do offer additional replayability so in that light they are worth considering.

Other features

Something that I feel is missing from GC3, and which I made quite clear I would like to see in the game, is the ability to customise the savegame/userdata folder. This could be done using a command-line argument.

Ship designs are generated automatically with the discovery of new ship component technology, whether you want them or not. This is nice for people who don’t want to design ships, but not so good for the rest of us.

Ship components can be placed automatically onto well-suited hardpoints with a double-click, and there are gizmos to further customise the size and placement of ship components, which allows a degree of freedom in ship design which I have yet to see paralleled in another game with spaceship design.

Included among the many ship components are carrier bays, which allow you to recreate the days of the original Battlestar Galactica series if you so wish!

Planetary improvements have an interesting adjacency system and bonus tiles play well with them. Basically, you can get extra production if you place an improvement on the right hex, or next to a similar improvement.

Furthermore, when using terraforming projects, you are allowed to choose which tile to make usable. The better the tech level of the terraforming, the bigger choice of tiles you can improve.

When making ideological choices in the game, you can gain a number of ideological traits. Normally you will need to make an ideological choice each time you colonise a new world. I’m not enthused about all of these traits, and sometimes I wish that there were alternative traits at a given level, but overall it seems to be a good mechanic.

It is possible now to see at a glance how well your fleet will do in battle against another fleet, planet defence, starbase or shipyard.


This game has a lot to offer someone looking for a 4X strategy experience. I found that I had a long phase of experimentation and learning how to play well. Having learned the ropes, and with the game now on version 1.7, I have sunk some serious time into playing this game.

I have found it to be fairly challenging and worthwhile, and I have watched some glorious ship battles go down, but at the same time these were usually battles in which I was confident that my fleet would emerge victorious.

This is technically a downside of the battle result prediction system – you won’t really be surprised by the outcome if you clearly have the upper hand, but if you are at a disadvantage you’re more likely to avoid the battle so there is a bias in player experience unless the AI has vastly superior fleets which can outmanoeuvre player fleets.

That’s not necessarily a bad thing. Battle result predictions were in Civ 4 and, going back a little further in time, Alpha Centauri could project a likely defeat if you were about to make a reckless attack at one-third strength. And it’s not like you can’t just look at the numbers and come up with your own educated guess about the battle’s outcome.

As any regular 4X player knows, wars are technically won by economies. As an extreme example, if you have inferior technology but you can smother your opponents with an overwhelming mass of tiny disposable starfighters, then you win. Research, manufacturing and wealth generation will shape the fate of your galactic empire, assuming you know how to run it.

While I have presented some shortcomings of the game which I feel could be addressed, I’m happy with the state of the game at the moment. I hope that Stardock’s continued support of this game marks the beginning of an enduring effort to eliminate the extraterrestrial threat.

Sorry, couldn’t resist.