# Call of Duty 4

## Call of Duty 4 Server Files

Many tutorials state that the game disk is required to install a CoD4 server. This is because the server is built into the client. This made it difficult to distribute and create a CoD4 server.

After investigating this issue, it was found that it is possible to run a server with most of the client files removed. This greatly reduces the file size and prevents the client from being used. Because of this LinuxGSM provides a download to only the files required to run the server. Preventing the use of the client, removing the opportunity to use the server to pirate the game.

## CoD4x

`cod4server` uses CoD4x project for its server, rather than the original, as it fixes various bugs and adds a few features over the vanilla server.

<https://cod4x.ovh>

### Updating CoD4x

CoD4x has its own update functionality. It will automatically check for updates and does not require LinuxGSM to check for updates.

### CoD4x Master Server

CoD4x game servers (since version 17.6) require a server token to be listed on the CoD4x master server.

To generate a token visit [here](https://cod4master.cod4x.ovh/index.php?token_generator=true).

Once a token is generated add it to the `sv_authtoken` cvar in `server.cfg` or command-line parameters.

#### server.cfg

```
set sv_authtoken "mytokenhere"`
```

#### command-line parameters

```
+set sv_authtoken "mytokenhere"
```

The server then needs to be restarted to allow the game server to be listed.

[CoD4x master server list](https://cod4master.cod4x.ovh/)

## Mod Support

Mods for Call of Duty 4 have to be manually added to the game server.

### Adding Mods

To run a mod the servers `fs_game` variable must be set correctly. Mods reside in the `mods` folder inside `fs_homepath`. Example directory tree:

```
mods/                                  
     ├── pml220                         
     │   ├── mod.ff                         
     │   ├── pml220.iwd                     
     │   ├── z_c_r.iwd
```

To start the server with a mod set the `fs_game` variable accordingly.

```
parms="+set sv_punkbuster 0 +set fs_basepath ${serverfiles} +set dedicated 1 +set net_ip ${ip} +set net_port ${port} +set sv_maxclients ${maxplayers} +exec ${servercfg} +map ${defaultmap} +set fs_game "mods/pml220""
```

## Custom Maps

Modded CoD4 servers have the ability to run with user-created maps. To run a server with a custom map, it has to first be placed in the `usermaps` directory (if missing simply create it yourself).

```
    ├── usermaps
    │   ├── mp_nuketown
    │   │   ├── mp_nuketown.ff
    │   │   ├── mp_nuketown.iwd
    │   │   ├── mp_nuketown_load.ff
```

Typically, maps are prefixed by mp\_ following the maps name.

## Running custom maps on unmodded servers

Running custom maps on unmodded servers is not supported, but there is a neat workaround to still load custom maps. First, create a mods folder and some empty folder inside it.

```
    ├── mods
    │   ├── myemptymod
```

Now set `fs_game` to `mods/myemptymod` and you will be able to run custom maps.

## Fast Download

[Fast download](https://docs.linuxgsm.com/commands/fastdl) is possible with CoD4 to allow custom maps and mods to be hosted on a webserver.

```
set sv_allowDownload "1" // allow clients to download gamefiles
set sv_wwwDownload "1" // enable download redirection
set sv_wwwBaseURL "http://domain.tld/cod4fastdl/" // defines url to download from
set sv_wwwDlDisconnected "0" // disconnect clients while downloading
```

here `sv_wwwBaseURL` has to point to a URL served by your web server.

An example directory tree for a served folder may look as below:

```
    cod4fastdl/
    ├── mods
    │   ├── pml220
    │   │   ├── mod.ff
    │   │   ├── pml220.iwd
    │   │   ├── z_c_r.iwd
    ├── usermaps
    │   ├── mp_nuketown
    │   │   ├── mp_nuketown.ff
    │   │   ├── mp_nuketown.iwd
    │   │   ├── mp_nuketown_load.ff
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.linuxgsm.com/game-servers/call-of-duty-4.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
