The Legend of Heroes: Trails of Cold Steel II PC Guest Blog from Peter “Durante” Thoman

 

It has now been a bit more than half a year since Trails of Cold Steel was launched on PC. That was the first game for which I contributed the majority of the porting effort, and it made me believe that I could also take on a complete end-to-end porting project for its sequel. That sequel – Trails of Cold Steel II – was released yesterday, and in this blog post I’ll talk a bit about all the features it implements beyond what was seen in the previous releases.

I decided early on that ToCS2 should at the very least have all the PC-only features that were in ToCS1, including those which were ready for the release and also those implemented in later patches. What I only gradually realized is just how many of those had accumulated. I won’t go into detail here – you can check out my ToCS1 blog posts (#1 #2 #3) for some of that – but here is a list of features which had to be ported to (or, in some cases, reimplemented for) ToCS2:

  • Moving to and fixing everything up for the DirectX11 renderer, with working state batching, in order to get good CPU performance
  • Arbitrary resolution and framerate support (successfully tested up to 6k and 144 FPS)
  • High-end image quality settings, including up to 8x MSAA, transparency supersampling, and anisotropic filtering
  • Shadow resolution, casters and distance improvements
  • Higher quality post-processing effects, and HBAO+ integration
  • Field of View adjustments
  • “Smart”, configurable turbo mode
  • Autosaves with configurable intervals
  • Mouse/keyboard controls with full rebinding support, and associated options such as disabling camera auto-centering
  • Button prompts corresponding to the selected input mapping

That’s a lot of stuff to implement and test, and while some features ported over easily, migrating others took a bit more effort. But that’s enough of the past, let’s get to the new stuff!

I’ve split the new features up into two categories: graphical and general quality of life features.

Further Graphical Improvements

Character Shading Artifacts

There is a rendering artifact that appears from time to time in Trails of Cold Steel, both on PC and in the console release, and which also still occurs in ToCS2 on console. It is related to the fact that these games use cascaded shadow mapping with a single shadow map per light for all shadows, including those cast by characters as well as the environment. This is normal for photorealistic games, and not an issue there because parts of a model that do not receive light are rendered as shadowed.

It is not quite so simple in a game which mixes a cel-shaded character style with a normally shaded environment. Here, you usually do not want light to behave in a completely realistic fashion. Games that use rendering like this have various solutions to this problem. In Trails of Cold Steel, Falcom implemented a workaround using an offset for character shadows. While this works just fine in the majority of cases, it can lead to issues in a few situations. One example is the erroneous self-shadowing visible on the left here:

I had an idea on how to resolve this issue completely even back when I was working on ToCS1, but a straightforward implementation had a large performance penalty. For ToCS2, I found a method which only causes a moderate performance hit and fixes this issue completely.

Percentage-closer Soft Shadows

Sticking with the topic of shadow rendering, this is a feature that I was playing around with but never really expected to actually include in the final version. For ToCS1, I implemented a rather simple soft shadow filter that applies the same level of softness in all situations. This filter is again an option in ToCS2 – with minor improvements actually – but I’ve also included a “PCSS” option for shadow filtering. Basically, shadow boundaries are actually hard close to the shadow caster, and get progressively softer at larger distances.

This is a really expensive effect to render, and as a result it’s still not standard even in some high-end games. However, implementing it actually isn’t too difficult with the existing shadowing setup in these games, and after some tweaking I achieved nice results:

In this image you see that the shadow cast by Fie is very sharp right next to her feet, then gets softer towards her head. The lamppost shows the same behaviour. On the right is actually the shadow of a tree which is quite a bit further away, and consequently very soft.

Note that this is a seriously expensive feature in terms of GPU resources, especially since it also only works really well with high-res shadow maps. Only use it if you have GPU cycles to burn.

Replacing Shadow Imposters

A final small shadow-related feature actually involved modifying some of the game assets. In order to save performance, Falcom used stand-ins for shadow casters on some objects such as the more complicated trees. For example, for the tree in the following picture, the shadow is actually rendered based on just a single invisible plane with a low-res texture rather than the actual tree geometry.

(Note that shadow filtering is off for this comparison to make the difference more obvious)

This is a valuable optimization for something like a PS Vita, where your resources are very limited, but looks rather unsightly when combined with otherwise high-resolution rendering. For ToCS2 PC, affected assets were individually edited to solve this issue.

Better 21:9 Support

ToCS1 PC had some preliminary ultrawide support, and of course this was re-implemented for its sequel as well. However, with even large publisher releases now sometimes supporting very basic 21:9, I decided that I had to step up my game. Not only do you get full 21:9 in normal gameplay and battles, but also during cutscenes and in some UI screens (such as maps).

What is interesting about this feature is that it’s very easy to get a wrong idea of which parts of the work actually eat up most development time. I.e. it might be possible to get basically all 3D rendering to work correctly in a few hours, but then something like just going from the stretched S-craft image overlay below to the correct version can take as long or longer on its own.

(Note that the brightness differences are due to slightly different screenshot timings)

Ultrawide support is still not perfect for all UI elements, but it’s getting there and it is completely usable

Quality of Life Features

In addition to graphics, the QoL features added to ToCS1 PC proved very popular. The most important ones were what I called “Smart Turbo” – a turbo mode with different speedup factors inside and out of battles which automatically slows down for button prompts – and background autosaving. Both of those of course make a return, and a few additional features are also available. The newcomers are not quite as significant, but they should still offer a tangible improvement for some.

Fast Resume

For me, in most RPGs, once I’ve started playing them, when I continue I just want to get back to the point I where left off as quickly as possible. The worst offender in this respect are unskippable logos and intros, followed by long loading times. I took care of both of these in ToCS1, and of course the same is true in ToCS2. But I had an idea to do even better, and you can see the result in this video (expertly narrated by the power of large font text files).

There might sometimes be a second or so of wonky rendering if you resume into a cutscene, but I think that’s an acceptable trade-off.

Of course, you can also completely ignore this feature and go the traditional way, through the main menu. And while the video shows it for Steam, it is also available on non-Steam platforms!

Gamepad Button Rebinding

ToCS1 featured full mouse/keyboard rebinding, and ToCS2 extends that to gamepad buttons as well.

You could already remap buttons using external tools, but this integrated method is simpler and has the advantage that all in-game button prompts will correctly show your remapping.

Conclusion

Getting close to the release date is always exciting. We had a lot of both internal and external QA, so I’m pretty confident in the overall quality, but it’s basically a given that something will go wrong for someone on some configuration. This release includes better error reporting than ToCS1 did, so I hope this will help with patching any problems that show up even more rapidly.

There are two more things I’d like to mention. Firstly, that again, just like with ToCS1, all releases are completely DRM-free. If this is as important to you as it is to me then please support that stance. And secondly, I really want to credit the work Alex Hirsch did for this port – I won’t say that I couldn’t have done it without him, but it would have taken significantly more time and been less fun 😉