Silent Profile picture
Game developer, modder, reverse engineer, legacy code specialist. I port games for a living and patch them as a hobby. Also known as CookiePLMonster.

Oct 8, 2022, 44 tweets

Turns out this release is indeed fully DRM free, and its executable also works with an English version! Well, almost, and to get what's the catch you need to watch with sound on.

I hope it's patchable, as DRM free exes > no-CD exes all the way

I may have jumped the gun a little, it seems more broken than it seemed at first.

CALL THE TELEPHONE NUMBER FOR YOUR GERMANY

The version of a Polish DRM-free CMR3 executable matches the international 1.1, but it's compiled a few months later

Trying to automate the process of finding changes by using diaphora, an IDA plugin - and seems like it's a bit eager to mismatch functions for what's needed here. These two are the same function, with the only difference highlighted, and yet diaphora thinks they don't match. Odd.

Restarted with "Use Slow Heuristics" - that's better!

30 minutes later: Found a bug in diaphora already 😂
github.com/joxeankoret/di…

Now we're talking, with diffs like this I should be able to "internationalize" this DRM free executable in a reasonable timeframe 😎

This isn't funny anymore github.com/joxeankoret/di…

Much like the NTSC PS2 version, PC CMR3 has native widescreen partially left over. If I remember correctly, the PAL PS2 version *did* adjust HUD for widescreen, but here only FOV and the co-driver calls seem to change.

Looks like the Polish executable is crash happy like this because of the fact they un-hardcoded certain string and instead made them localized. Since the international localizations lack those files, the game reads garbage and crashes.

That's disappointing... The reason re-releases fit on 2 CDs instead of 3 of the original release is because #CDProjekt REMOVED Nicky Grist from it! As seen on the screen below, the original Polish release renamed "Language" to "Co-driver's voice" - the re-release cuts it entirely

This explains why the Polish executable told me to "call my Germany" - CD Projekt changed the Secrets menu to refer to e-mail and a website instead of phone numbers! This explains them removing the scrolling text reminding about billing charges.

Both these phone numbers and the website are down, so maybe for an international executable I could refer to my cheat generator instead 😂

The rabbit hole goes even deeper, with the omission of Nicky Grist not being the only change - turns out that after the original CMR3 PL featured a rally driver Janusz Kulig as a co-driver, he has been replaced in a re-release.

We can only guess the reasons, but it seems quite likely the change was made due to Kulig's fatal driving accident not long after the original game's release, in February 2004. Re-releases came after that, and so they likely couldn't (or didn't want to) feature him anymore.

Shout out to #Sandboxie for making it possible for me to do this research without going crazy - CMR3 won't allow me to install itself multiple times, so I have sandboxes in which I "uninstall" the international release and install Polish ones, and they're unaware of each other.

Nice flickering sun you got there, CMR3. dgVoodoo/dxvk don't help so it's quite clearly a game bug. Should be debuggable via PIX since it's a DX9 game.

Looks like the flicker is caused by the usage of MSAA (which the game calls FSAA). Disable it and the sun is fine.

Codemasters has missed a lette

All translation lines added in the Polish versions - yeah, for some reason they also added 10 empty ones

NO CMR3, STOP, DON'T DIVIDE THE CLOCK FREQUENCY, THAT'S NOT HOW YOU SHOULD OBTAIN TIME IN MILLISECONDS! AAAAAAAAA

Polish CMR3 localization went through a surprising amount of effort. For this release, they went several steps ahead of the standard FIGS languages and e.g. localized menu cubes by adding new assets.

Polish menu vs English menu vs Polish menu with English assets (missing cubes):

Unfortunately, Polish fonts delete a few characters from the EFIGS font, so I can't just use them as a drop-in replacement. I'll either have to look for format definitions of the .pcf file that specifies the layout, or write a tool for it myself. Yay 😔

Change of plans - turns out a rare DVD release of CMR3 for Germany is EVEN NEWER than a Polish re-release, it's v1.1, has EFIGS languages and most importantly, is DRM free! Much of my "internationalization" work is now useless, but it can be reused...

...to merge Polish into the EFIGS release, turning it into a full EFIGSP release.

Now to figure out how to safely and legally redistribute these executables! Most likely will do it via an xdelta patch from 1.1 EFIGS/1.1 Polish -> DRM free versions. This way cracks can't be used.

This actually is good news for the usefulness of a theoretical "SP Manager" - where the application itself could offer the user an option to install by applying the xdelta patch for them. The manager could also tell users about official patches they need.

I can't verify this in the original Polish release (thank you Safedisc), but when I re-enable the Language menu (renamed to Co-driver's Voice) in the re-release, exit animations seem broken - most likely due to an improper removal of the "Text language" option. twitter.com/i/web/status/1…

This project has now officially cost me money, and now I own two copies of Colin McRae Rally 3

Phew - put some effort in documenting data structures and everything becomes readable. I can already tell modifying the onscreen keyboard to exclude (or include) Polish diacritics should be relatively easy!

Good going, still need to find why the Languages menu broke though.

Sure enough, once it's documented fixing broken menu animations in the Polish version was easy - this menu is kind of hacked not to show the first entry (Text language), but would've been a good enough hack if it wasn't for the fact they re-apply it every time the menu closes.

This seems to be the reason behind CMR3's sun flickering with MSAA enabled - 9 years ago someone had the same issue in their project and nobody answered 😹stackoverflow.com/questions/1524…

Goodbye sun flickering when multisampling was enabled, you won't be missed

Wow, at the moment widescreen is a bit of a mess. By default, the game only lists 4:3 resolutions but once unlocked, widescreen resolutions automatically adjust FOV, albeit VERT-. Enable an unused widescreen flag on top and you get VERT- on top of HOR+ lol
Different combinations:

To give credit where it's due - seems like that was already found by
AuToMaNiAk005 years ago, just presumably by forcing 640x480 to be a desktop resolution instead of "unlocking" selectable 1080p. At least this proves that the hack was not at fault.

Whoops

Using CMR3 to improve Microsoft D3D9 documentation 🥳 @Codemasters using cutting edge tech for those games (DX9 in 2003!) is for sure a factor
github.com/MicrosoftDocs/…

And to be clear - I have not checked how, but Colin McRae Rally 04 *does* fix that issue. With 8x MSAA, sun still looks fine.

I'd be curious to see if they dealt with the occlusion query result correctly, or maybe just clamped it.

Update: They didn't fix it properly! Instead, they only clamp the value to 0 - 1 range, remove that clamp and rainbow sun is back.

SP for CMR3 fixes it "properly" by clamping the value *and* dividing the result by sample count.

#SilentPatchIt

Timing for all this SilentPatching and research couldn't be better, happy 20th birthday to CMR3!

Adjustable FOV fixed for widescreen! Funny enough, I'm getting flashbacks to CMR2.0, I think the code I fixed there was similar, but operating on a lower level (near rendering) than by changing data.

Funnily, gear stick is animated but you normally can't see it due to FOV 😂

Ok WTF, I confirmed that it's not my changes but seems like THIS is how splitscreen looks on PC and you need to Alt+Tab to fix it??? I have a hard time believing @Codemasters would ship PC splitscreen this broken, so maybe it broke in a patch or newer Windows? Can anyone confirm?

@Codemasters Forcing the game to use one core helps... However, I can still see a brief flicker just as the game starts fading in, like so.

Just when I was praising this port for its quality

Accidental free camera

By "freezing" camera in place I can confirm that when split screen is broken, CARS ARE NOT EVEN SPAWNED ON THE STAGE. What the heck is this bug 🤦‍♂️

Share this Scrolly Tale with your friends.

A Scrolly Tale is a new way to read Twitter threads with a more visually immersive experience.
Discover more beautiful Scrolly Tales like this.

Keep scrolling