Now Reading
Remastering Colin McRae Rally 3 with SilentPatch

Remastering Colin McRae Rally 3 with SilentPatch

2023-01-15 10:50:39

TL;DR – this text is longer than some other weblog submit I’ve printed to this point, so be prepared for a protracted learn. If you happen to aren’t at the moment
taken with a deep dive by the sport’s historical past, internals and fixes, scroll right down to the Changelog and download
part for a obtain hyperlink.

October 2022 was the 20th anniversary of Colin McRae Rally 3.
Somewhat over two months later, I’m completely satisfied to disclose the most important SilentPatch since GTA San Andreas.
On this launch, developed along with Bekoha, we ship greater than only a set of fixes – with full
widescreen help, quite a few compatibility fixes, new technical options, High quality of Life enhancements, and a scratch-made excessive definition
UI optimized for 4K shows, we convey an expertise corresponding to an unofficial remaster of this basic 2002 rally recreation.

Initially, this undertaking didn’t begin as a SilentPatch. As an alternative, I solely supposed to doc the completely different releases of the sport,
however given the anniversary timing and the eye Colin McRae Rally 3 acquired round that point, it was arduous to cross on a chance
to provide it a brand new life, particularly as soon as Bekoha expressed curiosity in retouching the sport’s fonts and UI.

Because of this, this weblog submit particulars all the journey – from scavenging for various variations of the sport,
documenting them, by the method of fixing the sport, and at last merging regional releases collectively.
Be at liberty to take a break between chapters, because it’s going to be so much – it’s the longest submit printed on my weblog to this point.

This submit might get technical at instances, however don’t get discouraged; I intend it to be clear and informative for everybody – gamers, recreation builders, and reverse engineers.

However first, a couple of phrases concerning the recreation for the uninitiated. Colin McRae Rally 3 is a racing recreation from Codemasters, launched initially
for the PS2 and Xbox on October 25, 2002, later ported to PC by Six by 9 Ltd.
and launched there on June 13, 2003. It was acquired nicely and was succeeded by two extra sequels in 2003 and 2004
earlier than the franchise moved on to a Colin McRae DiRT collection.

Not like Colin McRae Rally 2.0, the place the sport shined on PC, CMR3 was an enhanced console port. Nonetheless, I’ve fond recollections from enjoying
this recreation as a child (though they’ve blurred along with recollections from CMR04 and CMR2005). Curiously, again within the day,
this was considered a sub-par port,
and a few folks didn’t benefit from the lengthy look ahead to the PC port, particularly since by then CMR04 was only a few months away from launch.
I discover this remark probably the most amusing…

Sadly it’s an indication of the instances and it’s unhappy to see Codemaster’s, as soon as massive supporter’s of the PC, changing into member’s of the lazy developer’s membership.

…because it feels like one thing that would have been mentioned on-line in July 2022, not July 2003 – I assume some issues by no means change ????

It’s generally identified that DRM on retail discs sucked. The three main DRM options all got here with a various degree of breakage,
and as of late, two of them are deliberately disabled by Home windows; moreover, a kind of DRM options is so contrived
it will possibly make a Home windows 10/11 machine unbootable (shout out to TOCA Race Driver 2 & 3). Very like I did
for the TOCA Race Driver games, I needed to know if the trilogy
of later Colin McRae Rally video games have been all launched DRM-free someplace:

  • Colin McRae Rally 04 is straightforward – very like TOCA Race Driver and TOCA Race Driver 2, it was re-released in Italy by FX Interactive,
    choosing “bodily” DRM (ring on the disc’s floor to make copying unreliable and time consuming) as a substitute of a software program resolution.
  • Colin McRae Rally 2005 was launched DRM-free on, so regardless that the sport has since been delisted, getting a maintain of the DRM-free executable is just not arduous.
  • This left solely Colin McRae Rally 3 in an unknown state, as at the moment all CMR3 discs submitted to Redump had SecuROM DRM – except for the Polish release.

I initially disregarded that trace, since I believed this itemizing is incomplete or incorrect. In spite of everything, I personal a Polish CMR3 launch from again within the day – it makes use of SafeDisc,
making it inconceivable to launch with out workarounds or a no-CD executable, and it comes on three discs, whereas this itemizing solely had two.

Nonetheless, seems that this wasn’t an error, as a later re-release of the sport did certainly come on 2 CDs:

With the assistance of Krusantusz, I received entry to this executable for evaluation. Whereas it certainly is DRM-free, its usability with property of the “worldwide” model is
restricted – with the vary of points starting from a hardcoded French co-driver (changed with Polish within the precise launch)…

…varied UI points…

…by crashes on varied screens, e.g. Telemetry and Controls. Whereas salvageable, which means that the Polish launch has acquired a non-trivial quantity of code adjustments.

Shortly after that, I additionally purchased my very own second hand copy of the eXtra Klasyka launch, so now I’m a proud proprietor of two CMR3 PL copies:

As a result of why not?

If the rabbit gap of various variations ended right here, this may have been a narrative of how I created a global DRM-free executable by “internationalizing” the Polish one
and eradicating CD Projekt’s modifications to it (extra on that later). There is another model, although – CMR3 was additionally re-released in Germany on a single DVD. As SecuROM labored with DVDs
simply nice, we anticipated this launch to have DRM equivalent to the unique – nevertheless, Memorix101 proved us wrong.
Along with RibShark we tracked down a replica on the market and submitted its metadata to Redump – at which level it grew to become clear
that this re-release is so late, its disc was mastered after the release of Colin McRae Rally 2005!

At this level, I’ve already been “internationalizing” the Polish executable, so this work was technically rendered ineffective (for now). Regardless, because of the German model,
we received The Excellent CMR3 Model we needed – a straightforward to put in, DRM-free, future proof launch that ensures the sport stays accessible indefinitely.
My preliminary aim was accomplished.

Be aware: Though the DVD model was solely offered in Germany, its content material is equivalent to the worldwide launch,
so I don’t contemplate it a regional launch per se.

Polish (3 CD) launch

As talked about earlier, the Polish launch is greater than an easy textual content and speech translation. Apart from making Polish the one
language within the recreation, CD Projekt (or Codemasters) launched a number of adjustments to the worldwide model, localizing the sport additional:

  • Localized onscreen keyboard and keyboard typing – the worldwide model shows a fundamental keyboard no matter a particular in-game language:

These screenshots are from a patched recreation, however you get the concept.

  • Menu cubes acquired new graphics to match Polish wording:
  • The Secrets and techniques display was modified to discuss with CD Projekt’s assets reasonably than the Codemasters’ ones – that is what resulted in a beforehand proven “Name your Germany”
    problem if a PL executable is used with English localization:
  • By the best way, have you ever observed how Polish fonts are spaced additional aside than worldwide ones? Odd change, however I assume they’d a motive to take action.
  • Polish introduces 40 new localization strings for texts that have been beforehand hardcoded to English. That is what brought on an unpatched PL executable to crash with English localization.
  • As different languages have been eliminated, the Language display is renamed to “Co-driver’s voice” and provides you a selection between Nicky Grist, the unique English co-driver,
    and Janusz Kulig, the voice of a well-liked Polish rally driver.

Polish (2 CD) re-release

Round a yr after the unique launch, Colin McRae Rally 3 was re-released in Poland underneath an eXtra Klasyka label (as you might have observed above).
Apart from being utterly DRM-free, it additionally ships on 2 discs as a substitute of three. Whereas I initially thought that is solely as a result of higher compression,
this isn’t the case – the adjustments on this launch are:

  • The removing of Nicky Grist as a selectable co-driver
  • The change of the Polish co-driver’s voice from Janusz Kulig to Janusz Wituch

I couldn’t discover any in-game comparisons on-line other than the Polish dubbing wiki,
so right here is one:

The removing of Nicky Grist explains why the sport was now shipped on 2 CDs – whereas localized co-drivers solely use one-shot samples that
are performed at particular triggers throughout the stage, Nicky Grist’s tempo notes are full audio recordings, created for every stage individually.
This makes Grist’s notes sound far more pure than the opposite co-drivers, at the price of a lot greater file measurement – whereas every localized
co-driver is often between 1.5 MB and a couple of MB in measurement, Grist’s tempo notes are 435 MB!

What about Janusz Kulig, although? We’ll after all by no means know for certain if this transformation was dictated by licensing,
however another believable motive could also be somewhat clearer for these acquainted with the Polish rallying scene.
For these unfamiliar, it’s finest to point out it on a timeline of what I assume has occurred:

  1. June 26, 2003 – The unique PL Colin McRae Rally 3 that includes Janusz Kulig will get launched.
  2. February 13, 2004 – Janusz Kulig, a Polish rally driver, dies in a street accident after his automotive collides with a prepare on a degree crossing.
  3. After April 2004 – Colin McRae Rally 3 will get re-released in eXtra Klasyka, that includes Janusz Wituch – a prolific voice actor, additionally starring
    in TOCA Race Driver and TOCA Race Driver 2.

Whereas there isn’t any particular proof to help that declare, it appears fairly seemingly that CD Projekt rapidly opted for a brand new co-driver after Kulig’s loss of life.
Their option to characteristic Janusz Wituch might or might not have been associated to the very fact he was presumably recording traces for TOCA Race Driver 2 round that point – as
it was launched in Poland on June 24, 2004.

Czech launch

A Czech launch, printed by CD Projekt, additionally exists – albeit the small print on it are sparse:

Albeit very like the Polish launch it was launched by CD Projekt in eXtra Klasika, I don’t know if it ever was launched outdoors of it (it seemingly was, although).
From the technical facet, this Czech launch is far much less attention-grabbing than the Polish one – compiled on August 31, 2004,
it’s not a particular model however reasonably a translated worldwide launch changing Spanish with Czech. Not one of the adjustments from CD Projekt are current on this launch,
though it’s clear that it should have been translated from Polish, not from English – because the Czech translation file accommodates (now unused) strings launched within the Polish launch!

That mentioned, there is one thing attention-grabbing about this launch, and I solely observed it throughout the last assessments of SilentPatch – though the contents of the Czech
executable look like equivalent to the worldwide executable, it has at the very least one distinctive UI bug, not current anyplace else! I do not know how this occurred,
however the outcomes screens for time trials are utterly damaged on this launch.

I’m disenchanted, as this display was not even modified for the localized launch – it’s a totally unwarranted regression.

On this part, I need to spotlight probably the most attention-grabbing and weird enhancements current within the patch. That is not a full changelog – for that,
discuss with Changelog and download.

Fixes & enhancements

Console variations of CMR3 included a Widescreen possibility in Graphics Choices, switching the side ratio from 4:3 to 16:9. Whereas this selection is gone from the PC variations,
it’s nonetheless purposeful – it’s simply that this selection is underwhelming to start with (additionally within the console variations), because it solely corrects the 3D side ratio,
and the one UI ingredient it corrects is the co-driver arrow. That mentioned, it’s not the worst, because it opts to repair the side ratio by growing the horizontal FOV,
reasonably than by shrinking it vertically:

Curiously, the PC demo did listing 16:9 resolutions, not like the complete model of the sport – however not like the console variations, it’s Vert-;
the co-driver arrow additionally seems to be damaged. For my part, it’s potential that due to points like this it was determined that the complete
model ought to restrict the obtainable choices:

SilentPatch doesn’t depend on the inventory widescreen help in any respect – as a substitute, very like in
SilentPatch for Colin McRae Rally 2.0, I scale the sport to arbitrary side ratios.
The complete UI and menus are positioned dynamically, making certain that all the pieces appears constant no matter decision. This required an obscene quantity of labor,
as actually all of the UI and menus had their layouts designed with a continuing 4:3 side ratio – due to this fact, SilentPatch takes management of practically all of the UI and menus
to maintain components aligned persistently whatever the side ratio:


For extra screenshots showcasing widescreen help, test the next chapter.

The PC model of Colin McRae Rally 3 had a wierd bug the place the sun would flash in random colors
(WARNING: quickly flashing colours) if the FSAA (anti-aliasing) possibility was enabled. This occurs no matter whether or not anti-aliasing is enabled in-game, or pressured externally;
dgVoodoo would additionally not assist resolve it, proving that it’s not a Direct3D 9 bug.

I tracked down this problem to the sport’s occlusion queries that will return values a lot greater than what the sport had anticipated when multisampling is enabled
(as a result of queries returning the variety of samples, not pixels).
I discover it arduous guilty the builders for this, as even the official Microsoft docs received it fallacious! Since then,
I’ve submitted a pull request to correct the docs, and my proof in type of a repair for CMR3
was sufficient for the change to be accepted ???? This hyperlink additionally features a extra technical writeup on this problem, in case you need to be taught extra about it.

Apparently, this bug has been “mounted” formally within the sequels, however I used to be capable of confirm that it’s not mounted “correctly” – as a substitute of accounting for
the worth of multisampling, the sport now clamps the results of the occlusion question to (0.0 - 1.0). On one hand, this prevents the solar from being miscolored;
then again, solar occlusion is now fallacious with multisampling enabled, which implies the solar visibility will increase faster the upper the multisampling worth is.

This isn’t the one problem associated to the solar rendering – other than damaged colours, the solar occlusion would trigger a constant and noticeable hitch each time
the solar would both seem on display or go off display:

This bug, mounted solely in Colin McRae Rally 2005, is attributable to the sport ready for the solar occlusion question to return its outcomes as quickly because it’s completed.
I don’t want to supply pseudocode, because the code circulate appears practically equivalent to
this Query State sample code from MSDN.
The vital memo that the sport ignores goes as follows (emphasis mine):

Be aware that purposes ought to pay particular consideration to the massive price related to flushing the command buffer as a result of this causes the working system
to change into kernel mode, thus incurring a sizeable efficiency penalty. Functions must also concentrate on losing CPU cycles by ready for queries to finish.

Queries are an optimization for use throughout rendering to extend efficiency. Due to this fact, it’s not helpful to spend time ready for a question to complete.
If a question is issued and if the outcomes will not be but prepared by the point the appliance checks for them, the try at optimizing did
not succeed and rendering ought to proceed as regular.

On this case, the sport waits for the question to complete twice per body, due to this fact forcibly syncing the CPU with the GPU two instances per body for no motive.
With this in thoughts, it’s unusual that this hitch isn’t extra constant than that – the sync is finished each body, and so technically it must be blocking every time.
That is precisely what occurs when dgVoodoo is used to make the sport use Direct3D 11, however I couldn’t get it to ever occur in Direct3D 9 – maybe as a result of a runtime
or a driver degree optimization/hack:

These timings are even worse than by default, however in a manner, in addition they make “extra sense”.

The repair is trivial in concept, however somewhat tougher to implement – as a substitute of at all times ready for the newest end result, the sport ought to hold the outdated solar
occlusion information (and never begin one other question) for so long as the brand new end result is just not prepared. Which means that the worth of the solar occlusion (and due to this fact, its brightness)
lags behind the digital camera by 2-3 frames. Nonetheless, in follow this isn’t noticeable throughout gameplay, and resolves any hitches utterly:

The stutter wrestle isn’t any extra.

One thing I solely observed simply now when penning this submit: I don’t know if the massive distinction in CPU9 and CPU11 utilization is expounded to this repair.
Nonetheless, it seemingly is – the outdated code primarily included a CPU spin lock ready for the GPU, and the quote from the docs I included above particularly
factors out “losing CPU cycles by ready for queries to finish”.

Thought we’re accomplished with points attributable to anti-aliasing? So did I, however because it seems – I used to be fallacious.

Automobile shadows in CMR3 are easy however efficient. They’re primarily rendered in two phases:

  1. Render the automotive from the solar’s perspective, with depth testing and writing disabled, and with no shade – at all times drawing full white.
  2. Take the 256×256 automotive shadow render goal, downsample it to a smaller 128×128 goal, after which upscale it once more to realize a blur impact. Repeat this step n instances (8 within the inventory CMR3).

Though the impact isn’t advanced, it seemingly breaks with anti-aliasing enabled – upon beginning the sport with FSAA, shadows have been there however they have been too sharp;
even worse, altering the show mode with FSAA enabled would make the shadow vanish completely for that recreation session:

From left to proper – Shadows with out FSAA (wanting right), shadows with FSAA (too sharp), shadows after altering graphics choices (not there in any respect).

Seems the difficulty lies within the “softening” cross. In concept, each shadow passes must be carried out with depth take a look at and depth write disabled;
which means that all attracts ought to undergo no matter depth, and depth shouldn’t be up to date by these attracts.
Though the sport units up the depth states for shadow rendering accurately, an error within the 2D drawing capabilities made downsampling carry out with a depth take a look at enabled.
Moreover, in circumstances the place a render goal has no depth buffer related to it, the sport’s graphics engine makes use of a fallback as a substitute and binds the backbuffer’s depth buffer!
Due to this fact, downsample attracts used this as depth:

You don’t should know what a depth buffer is to appreciate that this appears nothing like a automotive shadow.

In concept, this could solely make attracts fail if the highest left a part of the display was obscured (making the depth take a look at fail),
however with FSAA it will get worse because it resulted in matching a non-multisampled shadow buffer with a multisampled depth buffer. I don’t know precisely if D3D9
is required to deal with this mismatch accurately, however seeing how this will break shadows in a number of methods – I think the outcomes listed below are undefined.

These acquainted with GTA San Andreas may need a déjà vu, as this game had an identical bug
affecting mirrors.

SilentPatch fixes this problem and goes a step additional – admittedly, these “sharp shadows” look form of good, however on the identical time, I didn’t need to disable
the softening cross completely. Fortunately, Colin McRae Rally 2005 reduces the variety of soften passes from 8 to 2, making shadows somewhat sharper.
I “backported” this transformation to Colin McRae Rally 3, making shadows somewhat extra outlined:

Stock (Soft)
SilentPatch (Sharper)

If you happen to desire to maintain the inventory, blurrier shadows, this transformation may be disabled from the SilentPatchCMR3.ini file – by including these traces on the very backside of the file:


Just a few levels in CMR3 run subsequent to lakes or throughout rivers. On the highest particulars, these include a pleasant cubemap-based reflection and a delicate animation,
producing an look of a reflective, transferring water floor. Nonetheless, on PC these reflections don’t at all times look the identical:

From left to proper – regular water, water after altering graphics choices, water after Alt+Tab.

Relying in your actions, reflections might seem darker and even be utterly black. I investigated this problem intimately, and it’s brought on not by one,
however three separate bugs! Whereas one in all them is a nitpick and should not even have an effect on visuals, the opposite two are value overlaying.

Presumably for efficiency causes, the reflection cubemap is rendered solely as soon as, and it accommodates the sky and the horizon. This creates a difficulty throughout a tool misplaced occasion,
i.e. when minimizing a fullscreen recreation window – traditionally, a tool misplaced occasion invalidates all render targets, so that they should be recreated after restoring
the sport window. CMR3 is conscious of that and gracefully recreates most render targets – however not the reflection cubemap! This leads to the reflection being pitch black,
making the water look horrendous. Making the sport re-render the reflection after a tool misplaced resolves the difficulty.

The opposite problem can also be associated to the system misplaced occasion, but it surely occurs when the system resets (both as a result of Alt+Tab or a show mode change) outdoors of the race.
Since reflections are rendered initially of the race, they need to be unaffected by a reset in menus and render simply nice. Nonetheless, they’re rendered barely miscolored:

Left – reflections rendered accurately, proper – miscolored reflections after a tool reset.

Due to the one-shot nature of these reflections (and, after all, making them re-render each body “fixes” this bug), it was extraordinarily arduous to catch on a graphics seize.
Nonetheless, as soon as accomplished, PIX supplied a touch – one of many lighting render states is completely different between the “good” reflection render and a “unhealthy” one:

Left – right reflections, proper – miscolored reflections.

This primarily signifies that the scene is rendered to the cubemap with incorrect, probably unpredictable, lighting – however why? The sport code accurately units the emissive
supply earlier than rendering the cubemap, and but it’s nonetheless fallacious.

The reply is barely difficult, and it boils right down to cache coherency. CMR3’s rendering engine has a layer of abstraction over Direct3D 9 designed to cache
the state the sport needs to place the rendering pipeline at, and ensures that any state adjustments name attain D3D9 solely when crucial. Nonetheless, typically the sport cache
must be evicted or up to date, because the D3D9 runtime discards its state. One such occasion is… the system reset (emphasis mine):

Calling IDirect3DDevice9::Reset causes all texture reminiscence surfaces to be misplaced, managed textures to be flushed from video reminiscence, and all state data to be misplaced.

The builders behind a PC port of CMR3 have been conscious of this, so the sport submits all cached render states to D3D9 once more after a tool reset,
due to this fact ensuring that the runtime state matches what the sport expects. Besides… a couple of system states have been missed! These are:

D3DSAMP_BORDERCOLOR - for all 8 samplers

Whereas I don’t know if the opposite two are ever used (regardless of being cached), D3DRS_EMISSIVEMATERIALSOURCE is the precise render state that’s incorrect when
the reflections are darkish. The very fact they weren’t up to date after a tool reset signifies that the sport thought the D3D9 runtime is in a distinct state
than it really is, and thus it’s not setting the render state if it thought it’s “pointless” – therefore the state cache dropping coherency.

Fixing the Reset perform to accurately reconcile these 3 lacking states fixes the difficulty, so now water appears the identical always:

This may not be Far Cry, however the water nonetheless appears good.

If you happen to’ve performed CMR3 on PlayStation 2 or watched any footage of it, you might have observed that the sport regarded somewhat extra vibrant there,
most prominently in relation to automotive reflections. Albeit current on PC and Xbox, they at all times appeared somewhat boring. To confirm, I ran the identical automotive and stage on PC
and within the PCSX2 emulator, and pulled the reflection information earlier than and after it’s been mapped on a sphere:

PlayStation 2; 512×512 reflection, 128×128 sphere

PC (inventory); 256×256 reflection & sphere

They’ve clearly been rendered in a different way, however probably the most noticeable distinction is within the sky – PS2’s reflection has a traditional sky,
whereas on PC it’s at all times a gray field, aside from evening levels.

PS2 reflections are rendered in a extremely easy manner:

  1. Take all the rendered body as much as the purpose of drawing reflections (that’s why the automotive shadow is current on the reflection).
  2. Mission that body buffer on a sphere drawn to a separate render goal.
  3. Render the lens flare, if relevant.

PC opts for a extra concerned resolution:

  1. Clear a separate render goal to gray, except it’s an evening stage. Oddly sufficient, as a substitute of utilizing a digital camera clear, that is accomplished by drawing a rectangle spanning all the render goal – no thought why.
  2. If it’s an evening stage, render the sky.
  3. Render many of the scene once more with a really low draw distance.
  4. Mission that on a sphere drawn to yet one more render goal.
  5. Render the lens flare, if relevant.

At first, it would appear to be the PC reflections are accomplished higher, however I consider this transformation was made purely for technical, not visible, causes.
Not like on PS2, on PC taking a body “rendered as much as a particular level” is just not trivial, particularly with older rendering APIs like Direct3D 9.
Most video games from the period render on to a again buffer, and utilizing that floor as an enter useful resource for one more draw (to undertaking it on a sphere)
is just about inconceivable with out copying it, which is usually a pricey and/or reminiscence intensive operation.

That’s to not say that doing it the PS2 manner is inconceivable, after all – CMR3 may have rendered to a separate render goal that’s concurrently
a render goal and a texture. That does the trick, however comes with a couple of disadvantages:

  • A shade goal + depth goal the scale of a display is required, which may take a variety of valuable VRAM.
  • It isn’t potential to create a useful resource that’s concurrently multisampled, may be rendered to, and sure as an enter useful resource. To maintain multisampling,
    yet one more intermediate render goal can be required.

Neither of these two is a matter for contemporary video games (I carried out this precise factor in one other recreation only a few months in the past) – however the state of affairs in 2003,
while you solely had 32-64 MB VRAM to make use of, was seemingly very completely different.

What concerning the sky on PC, nevertheless? As soon as once more it’s arduous to say, however it’s probably a efficiency optimization, permitting reflections to attract much less.
Curiously, split-screen makes use of a full sky in reflections – which I discovered peculiar till I remembered that the Xbox model makes use of equivalent reflections
and that split-screen on consoles runs at 30 FPS. If this really was a efficiency optimization, then it might not have been wanted when the goal body charge is decrease.

For SilentPatch, I went forward and enabled sky rendering for reflections always:

PC (with SilentPatch); 256×256 reflection & sphere

Not solely does this transformation make the automotive reflections extra vibrant, but it surely additionally “fixes” the TV shows in cutscenes – as they reuse the reflection map,
they now show the sky accurately!

If for some motive you like the inventory reflections, this transformation may be disabled from the SilentPatchCMR3.ini file – by including these traces on the very backside of the file:

(In)famously, Direct3D has no possibility of altering the road thickness of attracts; due to this fact, line attracts are at all times 1px thick. CMR3 makes use of traces extensively (pun
unintended) – they’re used each in 2D (in menus and graphs), and in 3D (for antennas). This wasn’t a difficulty on consoles, in addition to on PC when performed
at 640×480 – however the bigger the chosen decision is, the extra noticeable it turns into that these traces develop into comparatively skinny and arduous to learn.
SilentPatch resolves this problem by implementing line thickness:

The default CMR3 menus look notoriously inconsistent. SilentPatch fixes many inconsistently formatted texts (e.g. CONTROLS: on one display, CONTROLS : on one other)
and imperfect menu components – with “line bins” being exceptionally imperfect:

The inventory bins seem like they’ve a ribbon within the backside proper IMO.

Identical to the earlier video games within the franchise, Colin McRae Rally 3 comes with a split-screen characteristic. The difficulty is, on most fashionable PCs by default it appears like this:

See Also

That’s not what I meant after I mentioned that I just like the Horizon video games.

This problem, mounted in Colin McRae Rally 04, can be labored round by setting the sport affinity to only a single core. Nonetheless, since that’s not a threading problem,
this seemingly solely buys the consumer a while, and sooner or later, this methodology would possibly cease working too.

How was it mounted in CMR04? It’s one of many solely fixes I’ve admittedly not understood totally, but it surely appears to be associated to the physics replace tick ending up at a
0 ms delta worth (which implies 0 ms have handed between updates). CMR04 appears to right this by changing comparatively inaccurate timeGetTime capabilities with a extra correct
QueryPerformanceCounter; nevertheless, this wasn’t sufficient to repair CMR3, so I additionally moreover offset the primary physics replace tick by one second.
Which means that the sport thinks the very first physics tick took one second, however in follow, this adjustments nothing, as that one tick is carried out simply after the vehicles
are spawned – and this occurs earlier than the display begins to fade from white.

CMR3 comes with help for a number of shows and permits the consumer to specify what show to render the sport to, however except all of your shows are equivalent,
your typical multi-monitor expertise was more likely to seem like this:

Sure, I want to run the sport at (NULL).

The addition of a Refresh Charge possibility in SilentPatch solely made this problem worse, so regardless of utilizing a single-display system myself, I had to have a look.
Seems the difficulty is straightforward – though the sport accurately refreshes the listing of accessible resolutions as quickly as you turn the chosen show adapter,
it… doesn’t replace the variety of obtainable resolutions. This, relying on whether or not the newly chosen adapter has extra or fewer show modes,
may end in both being unable to pick out the upper resolutions or instantly crash (as proven above). SilentPatch fixes the difficulty by
updating the show mode counts and makes certain that the chosen decision can’t ever go over the variety of listed show modes.

The final problem I needed to focus on by no means confirmed up within the authentic recreation, but it surely’s considerably fascinating, and will function a cautionary story for different builders.

Initially, after implementing the windowed mode, I’d observe a difficulty the place the sport window flashes black each few seconds.
This solely occurred in regular windowed mode, and never borderless, regardless that the 2 are technically practically equivalent.
I initially thought it was a difficulty attributable to NVidia Shadowplay, as the difficulty appears to have been attributable to one thing sending this collection
of messages to the sport window:

S WM_SIZE fwSizeType:SIZE_RESTORED nWidth:1280 nHeight:720
S WM_GETICON fType: True
R WM_GETICON hicon:00000000
S WM_GETICON fType: True
R WM_GETICON hicon:00000000
S WM_GETICON fType:False
R WM_GETICON hicon:00000000
S WM_SIZE fwSizeType:SIZE_RESTORED nWidth:1280 nHeight:720

The important thing to understanding is the very fact these will not be place adjustments, however fashion adjustments – and typically I’d additionally see the window border
briefly change the fashion to the one utilized by home windows which are hung. Certainly, the difficulty was primarily revealed by this characteristic of Home windows:

Historically, Home windows thinks the window is hung when its window messages will not be pumped usually sufficient, sometimes 5 seconds.
Nonetheless, at no level, the sport was really unresponsive, and so the chain of occasions that I assume has occurred there’s:

  1. The sport processes gameplay logic and renders.
  2. The sport waits for a message to reach (with out pumping).
  3. If any messages are current, course of them.
  4. Repeat from level 1.

The difficulty lies in level 2. – the sport by some means have to be ready for brand spanking new messages with out pumping them.
Due to this fact, Home windows thinks the app is hung and sends a number of messages to point that reality through a window fashion change.
This in flip causes the sport to identify that new messages are current, and course of them; nevertheless,
processing messages is an indicator of a window that’s working usually, in order that backtracks the “app is hung” state!
The cycle repeats each few seconds, inflicting periodic flashes.

The correct repair can be to at all times pump messages, with out ready for them – however since I needed to maintain the repair non-invasive
and on the identical time complete, I opted to “poke” the sport window with an empty timer message each 2 seconds to maintain
it at all times energetic. Not the cleanest, however makes it inconceivable to miss any locations within the code to patch, which arguably is
the very best precedence when retrofitting fixes like this.

That mentioned, please don’t implement this repair in your app – repair it correctly as a substitute ????

New choices

Beginning with a small one – the sport is now totally transportable and saves settings to a SilentPatchCMR3.ini file positioned within the recreation listing,
as a substitute of saving to the system registry. If you happen to wished to place CMR3 on a flash drive and carry it with you, now you possibly can.

Graphics Choices have been expanded with a number of new choices. My patches shipped with new choices for a very long time,
each SilentPatch for Colin McRae Rally 2.0 and
SilentPatch for TOCA 2 Touring Cars beforehand included
choices like FOV management and extra. Nonetheless, this time these choices are current within the recreation choices.

The brand new choices are:

  • Tachometer (Analog/Digital) – very like in CMR2.0, the tachometer is now customizable. The digital tachometer was beforehand unique
    to 2 participant split-screen.
  • Cut up-screen (Horizontal/Vertical) – another choice impressed by CMR2.0. Beforehand, the sport at all times used a horizontal split-screen
    when enjoying in 4:3, and a vertical one when enjoying in 16:9; which means that the vertical split-screen remained unused on PC.
    For the reason that recreation now adjusts itself to arbitrary side ratios, separating this into a brand new possibility made probably the most sense.
  • Subject of View management – the default subject of view for all in-game cameras is 75 levels, and now I added an choice to set
    your most popular FOV within the vary of 30 – 150 levels. Exterior and inner cameras get their separate choices – one thing not accomplished even
    in DiRT Rally 2.0.

Digital tachometer

Vertical split-screen

30 levels FOV

120 levels FOV

Superior Graphics Choices have acquired a set of latest choices impressed by later CMR video games and fashionable video games basically.

This isn’t DiRT Rally 2.0, however a great outdated CMR3.

These are:

  • Show mode (Fullscreen, Windowed, Borderless) – utilizing the inventory recreation’s windowed mode that remained unfinished within the code,
    presumably a scrapped thought and/or a debug characteristic.
  • Refresh Charge
  • Vertical Sync – the sport’s UI has some issues with high frame rates,
    however the automotive physics appear to work nicely even at a whole bunch of frames per second!
  • Anisotropic Filtering – unlike the option in CMR2005, this one truly works ????
AF x16

It’s the small print that matter.

The brand new choices default to English in case you’re utilizing a global or a Czech model, and Polish in case you’re utilizing a Polish model.
Nonetheless, the Language Pack comes with translations for all new strings added to the sport. Please test
Chapter 5: Merging regional releases together for more information.

A set of fixes and ideal widescreen help make for a pleasant patch, but it surely’s not sufficient to name this a remaster. Nonetheless, this modified as soon as Bekoha supplied
to work on retouching the UI and fonts in prime quality. The unique property have been clearly made with a 640×480 decision in thoughts; so when enjoying at excessive resolutions
the sport itself regarded beautiful, however the UI was missing.

Seems like one thing is lacking right here.

Bekoha’s HD UI addresses this by changing most interface property with devoted prime quality recreations:

Extra comparability screenshots (additionally showcasing SP’s widescreen help) may be discovered on Bekoha’s web site:
CMR3 HD UI Screenshots

After all, if changing textures was as simple as simply placing them within the recreation, I wouldn’t be writing about it right here, and another person would’ve
seemingly launched HQ fonts/UI years in the past. As an alternative, to get HD textures to look the best way we needed them to, we needed to remedy not one, however three separate points.

Scaling points

Theoretically, changing textures in CMR3 is straightforward. Font information are free DDS information, whereas the UI textures are DDS information packaged in BigFile archives which were
nicely understood for practically 20 years. Nonetheless, a naïve texture substitute produces outcomes which are hardly optimum:

In case you neglect who’s the sponsor.

Albeit uncommon for PC video games, this habits is completely explainable. The unique UI design was pixel good, with no scaling concerned – which
signifies that all UI textures displayed 1:1 to what they’re in information. For apparent causes, this doesn’t translate nicely to PC the place the output decision
is configurable, however there the attracts solely get linearly scaled, with the setup unchanged. Which means that internally, the sport nonetheless points UI attracts
utilizing the feel dimensions as a draw measurement, producing oversize UI components (screenshots #1 and #3), or specifying UV coordinates
in pixels immediately, producing lower off components (screenshot #2).

The answer right here is straightforward – because the UI has already been “finalized” with particular texture dimensions in thoughts, scaling may be carried out trivially
by mendacity to the sport concerning the texture sizes, and at all times pretending the feel dimensions are the identical as the unique!

static const std::map<std::string_view, TexData, std::much less<>> textureDimensions = {
	{ "Arrow1Player", { 32, 16 } }, { "ArrowMultiPlayer", { 32, 16 } }, { "ArrowSmall", { 16, 16 } },
	{ "Base", { 128, 128, true } }, { "certina", { 64, 8 } }, { "Color", { 128, 128, true } },
	{ "Ck_base", { 128, 64 } }, { "Ck_00", { 32, 32 } }, { "Ck_01", { 32, 32 } },
	{ "Ck_02", { 32, 32 } }, { "Ck_03", { 32, 32 } }, { "Ck_04", { 32, 32 } },
	{ "Ck_05", { 32, 32 } }, { "colin3_2", { 256, 64 } }, { "ct_3", { 64, 64, true } },
	{ "dialcntr", { 32, 32 } }, { "infobox", { 128, 128 } }, { "MiniStageBanner", { 128, 32 } },
	{ "osd_glow", { 32, 32 } }, { "rescert", { 128, 32 } }, { "swiss", { 128, 8 } },
	{ "AUS", { 32, 16 } }, { "FIN", { 32, 16 } }, { "GRE", { 32, 16 } },
	{ "JAP", { 32, 16 } }, { "SPA", { 32, 16 } }, { "SWE", { 32, 16 } },
	{ "UK", { 32, 16 } }, { "USA", { 32, 16 } },
auto it =;
if (it != textureDimensions.finish())
	end result->m_width = it->second.width;
	end result->m_height = it->;

As a result of the UV information despatched to the rendering API is normalized, this lie permits the sport to maintain the inner
setup unchanged, whereas the precise rendering stays unaffected and makes full use of the excessive constancy useful resource.

Font filtering

Opposite to a well-liked perception, upscaling is just not at all times the perfect resolution for a top quality interface.
Detailed textures profit from it the perfect, however for pixel artwork there often is a greater resolution – nearest neighbor scaling:

Supply: Evaluation of Different Image Interpolation Algorithms

For any textures thought-about pixel artwork, scaling them through nearest neighbor filtering (versus linear filtering) retains the impact of sharp pixels
with out the necessity to ship property that successfully duplicate pixels a number of instances:

These are the identical font property, simply filtered in a different way.

SilentPatch opts to at all times use nearest filtering on a set of textures and fonts predefined by us, so they appear sharper than within the inventory recreation even with out the HD UI put in.

Half pixel points

Direct3D 9 comes with a reasonably annoying texturing phenomenon dubbed “half pixel offset”, the place textures show barely fallacious except the draw is offset by half a pixel.
It has lastly been corrected on the API degree in Direct3D 10 and newer and it has by no means been a difficulty in OpenGL, so it’s a generally missed problem – and CMR3 isn’t any completely different.
The difficulty is documented very nicely, you possibly can examine it extra right here:

Whereas CMR3 is topic to this problem, with linear filtered textures I couldn’t spot it at any decision.
Nonetheless, all of it adjustments as soon as nearest filtering is used – textures seem blurry on the sides regardless that it must be inconceivable when nearest filtering is used
(high picture). Making use of that particular repair to all UI components ensures they at all times keep as sharp as potential (backside picture). Take note of the blurred edges, particularly on
1, L, and R:

This near greatness… Click on to open this picture at 300% scaling, as, sarcastically, browsers use linear scaling when zooming in.

With all fixes and excessive definition UI in place, it was time for the icing on the cake – producing a single final bundle of releases combining the regional editions,
not not like what an actual remaster may doubtlessly do. For this, I solely contemplate identified official releases, so fan translations will not be thought-about.

The Language Pack consists of all 7 official translations (counting English), and eight co-drivers, together with the 2 Polish co-drivers presented above.
The Polish re-release additionally receives help for Nicky Grist’s tempo notes very like the unique Polish launch, though because of the excessive file measurement, Grist’s audio information
are a separate obtain. All regional adjustments made for the Polish launch, resembling localized dice textures and the OSD keyboard, are additionally current;
not solely that, however the Czech localization additionally receives its personal OSD keyboard, whereas the official launch didn’t:

For the reason that regional releases ship their very own atlases of fonts, and the Polish launch goes so far as updating the codepoints from Home windows-1252 (Western Europe)
to Home windows-1250 (Central Europe), the preliminary plan was to merge all of them and replace the sport to make use of UTF-8. Nonetheless, we dominated in opposition to it for a number of causes:

  • The PCF format is just not difficult to reverse engineer, however making a device that may accurately repack it from a human readable format is one other matter.
  • Modifications like this may be terribly dangerous and will doubtlessly break compatibility with the present saves and observe information.
  • Even when they didn’t break compatibility with “outdated” information when SilentPatch is put in, it will be extremely seemingly that “new” information would break the inventory recreation.

Due to this fact, SilentPatch provides help for “regional” fonts for every language. Each Language Pack and HD UI ship Polish fonts in fonts/fonts_P, and Czech fonts in fonts/fonts_C.
These alternate units of fonts are used no matter whether or not the Language Pack is put in or not,
so the HD UI can solely ship a single set of information that works for so long as SP is put in.

Apart from together with regional languages and co-drivers, the Language Pack additionally improves the present translations.
Due to this fact, it is sensible to put in the Language Pack even in case you don’t plan to make use of Polish or Czech localizations:

  • Codemasters launched a “Return to Centre” possibility within the official 1.1 patch and hardcoded that string.
    Language Pack extracts it to the localization information, so all languages now acquired a translated string.
  • The Telemetry display hardcodes a “NA” textual content within the worldwide launch; this was later moved to the localization file for the Polish launch.
    Language Pack unifies this, and now all languages acquired a translated string.
  • The Polish launch moved extra key names (resembling “Left”, “Proper”, “Up”, and “Down” arrow keys) to the localization file.
    Language Pack unifies this, and now all languages acquired a translated string.
  • Because of LoStraniero91, the Italian translation has been utterly revised and makes use of extra correct and becoming translations.

You made all of it the best way, congratulations ???? (or possibly you simply skipped to right here from a TL;DR, that’s nice too)

The total mod’s changelog is as follows; fixes marked with may be configured/toggled through the INI file.
The opposite new choices have been added to in-game menus as a substitute.

Important fixes:

  • The sport now lists all obtainable show resolutions, lifting the restrict of 128 resolutions and the 4:3 side ratio constraint.
  • The sport will now attempt to decide the closest matching decision as a substitute of crashing on startup if launched with an invalid decision specified within the config.
  • The sport now defaults to desktop decision on the primary boot.
  • A number of points associated to the solar rendering have been mounted – solar flickering with anti-aliasing enabled has been mounted, and a constant hitch when the solar was about to seem on display was resolved.
  • Mounted a number of distinct points inflicting water reflections to seem both too darkish or utterly black.
  • Mounted automotive shadows showing overly sharp, or not showing in any respect when anti-aliasing is enabled.
  • Mounted a crash when switching between show adapters with completely different numbers of resolutions, and made the resolutions listing routinely refresh when switching adapters, eliminating a potential crash.
  • The sport now handles arbitrary side ratios accurately – with all 3D components and all the UI mounted for widescreen and positioning dynamically.
  • Mounted a potential out of bounds learn when the provided translation file didn’t include all of the strings the sport wants (for instance, when utilizing the PL executable with EN information).
  • Improved the general precision of in-game timers.
  • Mounted a difficulty the place split-screen wouldn’t work accurately on fashionable PCs with quick sufficient CPUs except the sport was pressured to make use of a single CPU core.

Miscellaneous fixes:

  • Surroundings maps on vehicles now at all times replicate the sky, like on the PS2; making reflections look extra pure and correcting a difficulty the place the large TV screens displayed a gray sky.
  • Line rendering now respects the show decision, making line thickness proportional to decision and enhancing their visibility.
  • Half pixel points have been corrected throughout the UI, enhancing the general readability of the interface, and fixing quite a few points the place fullscreen backgrounds would go away a single pixel-wide line (or a seam within the center) with multisampling enabled.
  • Improved the visible consistency of quite a few race UI components.
  • Improved the visible consistency of the digital tachometer through the use of a scissor characteristic for rendering, enhancing its accuracy and resolving a potential flicker.
  • Help for texture replacements and new fonts has been improved – the sport can now deal with greater decision property with out glitching.
  • UI components and fonts with sharp pixels now use nearest neighbor filtering as a substitute of linear filtering for improved readability.
  • Improved the presentation of line bins used e.g. within the onscreen keyboard and Automobile Setup, fixing gaps, overlapping traces, and misplaced fill.
  • Legend traces on the Telemetry display now fade out along with the remainder of the menu.
  • Mounted quite a few spacing inconsistencies in menu texts.
  • Mounted a damaged split-screen Time Trial outcomes display (Czech executable solely).
  • Mounted “Participant X has retired” texts going off the display at resolutions above 640×480.
  • Mounted a difficulty the place the decision change countdown went into negatives when fading out.
  • Mounted a difficulty on wider side ratios the place repeated menu entries wouldn’t fade accurately.
  • Mounted a difficulty solely exhibiting within the Polish launch the place leaving the ‘Co-driver’s voice’ display would flicker the menu animations.
  • Alt+F4 now works.
  • Eliminated a debug characteristic the place invalid codepoints flickered randomly.
  • The error message displayed when the sport fails to load particular recreation information now doesn’t freeze the sport and may be closed with Alt+F4.


  • The sport is now totally transportable, because the settings have been redirected from the registry to the INI file.
  • Automobile shadows are actually barely sharper, matching the best way they’re rendered in Colin McRae Rally 2005.
  • Menu navigation on the gamepad has been remapped from the analog persist with the directional pad like it’s within the console releases.
  • New Graphics choices added: Subject of View (separate for exterior and inner cameras), Digital Tachometer, Vertical Cut up-screen.
  • New Superior Graphics choices added: Windowed/borderless mode (totally resizable), Vertical Sync, Refresh Charge, Anisotropic Filtering.
  • Modified the Bonus Codes URL to level in the direction of a cheat generator hosted by myself because the authentic URLs will not be energetic anymore.

Language Pack:

  • Added help for all official textual content translations used collectively – English, French, German, Spanish, Italian, Polish, and Czech.
  • Added help for all official co-drivers collectively – English, French, German, Spanish, Polish (Janusz Kulig), Polish (Janusz Wituch), and Czech.
  • Re-added help for Nicky Grist’s tempo notes within the Polish re-release.
  • Revised some capitalization inconsistencies in all languages.
  • Revised Italian translation.
  • Included translation traces for all new menu choices added by SilentPatch.

HD UI – by Bekoha:

  • Made with 4K decision in thoughts.
  • Font atlases remade utilizing authentic fonts.
  • Help for EFIGS, Polish and Czech languages.
  • Banners redrawn for each stage.
  • Majority of in-game UI components changed.

I’ve created a short showcase of the patch in video kind, you possibly can watch it right here:

Not like most of my different mods, putting in this one is a bit more concerned. Because of the presence of DRM-free executables,
I solely formally help these, and as a substitute, I present a prepared resolution to improve the newest official DRM’d executables to the DRM-free variations.
If you happen to don’t do that earlier than putting in SilentPatch, you may be greeted with a warning message on startup.
The mod’s obtain web page consists of detailed setup directions to stroll you thru this course of step-by-step.

The modification may be downloaded from Mods & Patches. Click on right here to go to the sport’s web page immediately:
Download SilentPatch for Colin McRae Rally 3 (and addons)
Please observe the set up directions rigorously and extract the parts into your recreation listing so as.
Unsure the right way to proceed? Examine the Setup Instructions.

  • Bekoha for everything of the HD UI work and basic help
  • Krusantusz for assist with the Polish eXtra Klasyka launch
  • Memorix101 and RibShark for assist with the German DVD launch
  • LoStraniero91 for enhancing all the Italian translation
  • AuToMaNiAk005 for his previous efforts in fixing CMR3 for widescreen resolutions
  • Pierre Terdiman for a Textured Lines In D3D code snippet
  • Numerous folks contributing new translation traces in German, French, Spanish, Italian, and Czech
  • abbydiode and Cpone for added testing
  • A number of ex-CMR3 builders who’re conscious of this undertaking and have been capable of share their suggestions ????

For these , the complete supply code of the mod has been printed on GitHub, so it may be freely used as some extent of reference:
See source on GitHub

Source Link

What's Your Reaction?
In Love
Not Sure
View Comments (0)

Leave a Reply

Your email address will not be published.

2022 Blinking Robots.
WordPress by Doejo

Scroll To Top