The competitive mod run by the COD1.6X servers
(fs_game __rPAMv115b5): kvcodPAM (by kikiii & Maggot, ezya-cod2) with the rPAM
kvcodPAMext extension (by reissue_), plus the cod1plus additions that feed FPSChallenge.
Sources are kept exactly as shipped; this repo only adds a reproducible build.
kvcodPAM_nolib_v2/ -> zzzzz_kvcodPAM_nolib_v2_REV<N>.pk3 the mod
rPAM_kvcodPAMext/ -> zzzzz_rPAM_kvcodPAMext_v<M>_REV<K>.pk3 the extension (loads after, overrides)
VERSION revision numbers baked into the pk3 names
build.py packs both trees into dist/
pk3/ the pk3s a server runs, as published to the clients (maps included)
pam.manifest the published file list (name, size, sha256, url) - generated
tools/publish.py sync pk3/ from a server folder + rewrite pam.manifest
tools/make_manifest.py the manifest writer publish.py calls
python3 build.py # -> dist/*.pk3 (deterministic)
python3 build.py --verify /path/to/__rPAMv115b5 # also diff against the pk3s a server runs- Copy the two pk3s from
dist/into the server's__rPAMv115b5/folder and delete the previous revisions (the engine loads pk3s in alphabetical order; two revisions of the same file would both load). - Put the same pk3s on the fast-download host: with
sv_pure 1every client must fetch them. - Start the server with
+set fs_game __rPAMv115b5(see the server module for the full launch line).
Bump VERSION for every content change. A client that already holds a pk3 of the same
name never re-downloads it, so a changed pk3 under an old name fails the pure check.
The COD1.6X client fetches the mod from pam.manifest in this repo instead of from the
game server, so a first join never waits on the in-game download. The pk3s themselves live
in pk3/ (every file is well under GitHub's 100 MB limit; ~190 MB in all) and are served
from raw.githubusercontent.com. To publish the set a server runs:
python3 tools/publish.py /path/to/the/server/__rPAMv115b5 # syncs pk3/, rewrites pam.manifest
git add -A pk3 pam.manifest && git commit -m "pam.manifest vN" && git pushGenerate from the server's own folder: that is what makes every client copy pass
sv_pure byte for byte. A pk3 the server dropped is deleted from pk3/ and listed as a
remove line, so clients delete it as well. Clients download only what differs from what
they already hold.
maps/mp/gametypes/cod1plus_fps/cod1plus_fps.gsc(kvcodPAM_nolib_v2): at the end of every S&D round, writes one[STATS_EVENT]line (round, scores, per-player stats, client slot) to the game log.cod1plus.sotails that log and forwards the match to FPSChallenge.maps/mp/gametypes/sd.gscin both trees: the one-line call tologStats().
Everything else is upstream; rPAM_kvcodPAMext/_rPAM_kvcodPAMext_changelog.md is the
upstream history. The stale numbered copies the upstream pk3s carried (sd.gsc28,
_pam.gsc404, weapon_british.menu25, ...) are not part of the tree: the engine never
loaded them.
kvcodPAM: kikiii & Maggot (ezya-cod2). rPAM kvcodPAMext: reissue_. Based on the PAM / vcodPAM lineage of Call of Duty competitive mods. No licence file ships with the upstream mods; this repository redistributes them unchanged apart from the additions listed above.