Monday, August 21, 2017

Call of Duty on Modern Linux

I have been able to get COD and COD:UO installed from the CDs and running under Crossover, but they run once or twice and then won't work, so I am abandoning any attempt to install these in Crossover. They do work well when installed in Crossover's Steam bottle, so I'll go with that. I believe that the copy protection is part of the installation problem and installing from a DVD edition would resolve those issues as it did for other games where I have both versions. I'm sure there exists some way to copy the CDs to a single DVD, but the copy protection gets in the way of that.

Call of Duty, a first person shooter released in 2003, spawned an entire franchise of COD games that persist to this day. Installing using Codeweaver's Crossover should be easy, but it's not. COD: United Offensive is an expansion pack for COD and the COD game must be installed before COD:UO can be installed.

Crossover expects you to install the game through Steam. I own the original discs and shouldn't have to pay for it again.
There were several problems with my approach. The first was in the way Mageia mounts CDs and the way that Crossover presents them to the game.

By default, Mageia will mount the CD under /run/media//COD_1. But Crossover sees that not as /dev/sr0, but as a hard drive directory. Then it is impossible to "eject" the CD, because is no longer associated with /dev/sr0.

So I thought to fix this, I should edit a DOS drive letter symlink in the COD bottle to point to /dev/sr0. Then I manually mounted the CD as:
$ sudo mount /dev/sr0 /mnt

Now I believe I have control of the drive and both Crossover and the COD installer recognize it as /dev/sr0, a device that can be unmounted in the way the installer expects. But again, problems. It can't be unmounted as it is held by a wineserver. Killing the wineserver to eject the drive kills the install. Forcing the drive to eject leaves the wineserver unable to connect to a newly mounted CD2.

I even tried putting CD2 in a second drive and mounting it over CD1 at /mnt, but I can't fool the installer or the wineserver with this with this. I'm guessing that if this problem could be solved, it would be possible to do a regular install of the game.

What is on CD2 are the large /pak files that live under /Main, so I killed the COD install (selected NO for rolling back the installation) and copied the CD2 files into the COD bottle. That didn't work because the installer puts language translations in the CDO directory and I don't see where they are just copied over, they must be extracted from somefile.

Sadly, the best way is to install under Windows and copy it to the COD bottle crated in the aborted install.
But a new problem - CD1 needs to be in the drive for the copy protection to run the game.  I did not want to tru and get Crossover to find the CD. It had already given me hours of aggravation about that. So . . . a no-cd crack was installed and the game should launch, but . . .

While the start menu links aren't automatically created for use, they should be able be created through the "Run command" utility. But . . . not for us.

And another problem. When I could get the game to start, it crashed with a buffer overrun error that some detective work discovered that it had to do with modern nVidia drivers and the length of an environmental string. The fix? Just prefix the entire command in quotes with:
__GL_ExtensionStringVersion=17700

But, of course, it's not that easy. There were still a few problems remaining. It seems that running a line of Linux code is not possible in the "Run command" dialog.  This is solved by launching the game using a script named ~/bin/codsp.

#!/bin/sh
cd /home/hoyt/.cxoffice/Call_of_Duty/drive_c/Program\ Files/Call\ of\ Duty\ Game\ of\ the\ Year\ Edition/
__GL_ExtensionStringVersion=17700 \
/opt/cxoffice/bin/wine --bottle "Call_of_Duty" /home/hoyt/.cxoffice/Call_of_Duty/drive_c/Program\ Files/Call\ of\ Duty\ Game\ of\ the\ Year\ Edition/CoDSP.exe
The command is all on one line.

What the script does is to cd to the games installed directory or the game won't know where it finds it s files. Too bad there's no --basedir option. Then we execute the full paths of everything just to avoid any problems there using the special command line incantations to tell Crossover where it should be looking.

Even with all that work, the game engine might not find a default.cfg, so you can download one from here and just rename it.

And there you have it.

Saved Games
If you have previously played through COD, it makes sense to download a package of saved games so that you can have fun with the game.


NEW ISSUE
I attempted to install COD: United Offensive and it would not proceed because COD was not found. I'm guessing it looks in the Registry for the data and my Bottle does not have that data. So I need to go back to my Windows install and copy that or create one from that example. If you do create one, you CD key is the letters and numbers you entered to install the game, just without the dashes. And the new installed version number is 1.3. COD: United Offensive will update it to 1.4 if you install that expansion game.

It may be possible to install the game after converting the CDs to a DVD as describes at File Forum.

RESOURCES

Call of Duty View -- updates

Saved Games

Steam Community Forum

PC Gaming Wiki
Excellent source of technical information.

Call of Duty View

No comments: