Repo ↗ · Source README ↗ · Markdown & license bundle
Image reference (original game): Call of Duty: Black Ops II · original-game artwork, provided by IGDB. Image rights remain with their respective owners. This illustrates the referenced original game, not the actual visuals of this rewrite or mod.
Source maintainer: DaffyDabz · Revision: 2f8f4d86d0ef · Catalogued: 2026-10-12
Source license: Apache-2.0 · LICENSE · Article: Source README (format adapted)
The source README follows, with formatting adapted for this site and images replaced by source links. Feature, completion and testing claims belong to its authors and have not been independently playtested here. The Traditional Chinese translation was prepared with AI assistance.
BO2 Multiplayer Rebuild
A fan rebuild that plays Call of Duty: Black Ops II multiplayer from your own PC copy of the game, in an engine
written in Rust. It is a fork of IW4L, an open-source Call of Duty runtime built
on Bevy and wgpu. The same code that runs Black Ops II’s Nuketown
Zombies in this fork runs Black Ops II’s own multiplayer scripts, menus and bots, so a match follows the game’s real
rules without ever starting the original executable.
No game files are included. This repository holds no Black Ops II (or any other Call of Duty) files: no maps,
models, textures, sounds, scripts or executables. You need your own legally owned copy of Black Ops II for PC with
Multiplayer installed. The engine reads that install read-only at run time and never patches, copies or
redistributes it. Unofficial fan project, not affiliated with or endorsed by Activision, Treyarch or Infinity Ward.
Contents
- Map completion
- Features
- Screenshots
- Requirements
- Build and run
- Configuration
- How it works
- Status
- Recent changes
- Coming soon
- Credits and license
Map completion
How far along each multiplayer map is, mechanically (loads, spawns, each mode, bots, scorestreaks, killcam, match
end) and visually (fixed spots shot in the original game and here from the same place, side by side). Every number
comes from docs/maps.json, where each passing item names the test run or screenshot that proves
it; docs/make_bars.py draws this table. A visual spot only counts once it has a same-spot
comparison shot from the original, so visuals read 0% until those shots are taken.
Mechanics Visuals
Aftermath ████░░░░░░ 38% not compared yet
Cargo ██░░░░░░░░ 25% not compared yet
Carrier ██░░░░░░░░ 25% not compared yet
Drone ██░░░░░░░░ 25% not compared yet
Express ██░░░░░░░░ 25% not compared yet
Hijacked ██░░░░░░░░ 25% not compared yet
Meltdown ██░░░░░░░░ 25% not compared yet
Overflow ██░░░░░░░░ 25% not compared yet
Plaza ██░░░░░░░░ 25% not compared yet
Raid ██░░░░░░░░ 25% not compared yet
Slums ██░░░░░░░░ 25% not compared yet
Standoff ██░░░░░░░░ 25% not compared yet
Turbine ██░░░░░░░░ 25% not compared yet
Yemen ██░░░░░░░░ 25% not compared yet
Nuketown 2025 ███████░░░ 72% not compared yet
Downhill ██░░░░░░░░ 25% not compared yet
Mirage ██░░░░░░░░ 25% not compared yet
Hydro ██░░░░░░░░ 25% not compared yet
Grind ██░░░░░░░░ 25% not compared yet
Encore ██░░░░░░░░ 25% not compared yet
Magma ██░░░░░░░░ 25% not compared yet
Vertigo ██░░░░░░░░ 25% not compared yet
Studio ██░░░░░░░░ 25% not compared yet
Uplink ██░░░░░░░░ 25% not compared yet
Detour ██░░░░░░░░ 25% not compared yet
Cove ██░░░░░░░░ 25% not compared yet
Rush ██░░░░░░░░ 25% not compared yet
Dig ██░░░░░░░░ 25% not compared yet
Frost ██░░░░░░░░ 25% not compared yet
Pod ██░░░░░░░░ 25% not compared yet
Takeoff ██░░░░░░░░ 25% not compared yet
All maps ███░░░░░░░ 27% not compared yet
Mechanics: each map’s systems and modes work by Black Ops II’s rules. Visuals: set spots compared side by side with Black Ops II. Scored in docs/maps.json (pass or match 1, part or close half, not yet 0), last updated 2026-10-08; drawn by docs/make_bars.py.
Features
- Black Ops II’s own front end.
frontend t6mpopens the multiplayer main menu built from the game’s UI
scripts: custom games lobby, Setup Game, Setup Bots, Create-a-Class, Scorestreaks, then Start Match. Classes are
saved next to the binary. - Every multiplayer map. All maps on your disc and in the DLC packs you own load and can be played, each with
its own factions, lighting, colour grading, sky, water and foliage. - The game’s own match rules. Black Ops II’s compiled multiplayer scripts run the match: spawns, scoring,
score and time limits, rounds, the end of the match. The one script no PC file carries (_globallogic, the match
flow) is written for the engine from what the other scripts call, and compiled by the engine’s own script compiler
(crates/sim/src/t6/scripts/mp_globallogic.gsc). - Bots. The game’s bot scripts choose goals, classes and targets; the engine walks them over the map’s path
nodes, aims, jumps, climbs ladders and fires. Bots play Team Deathmatch, Free-for-All, Domination, Kill
Confirmed, Hardpoint, Capture the Flag, Demolition and Headquarters. - In the match. The class menu at spawn, the HUD with the turning minimap, compass, clock, score bars, kill feed
and scoreboard, the pause menu, menu sounds, the killcam, dropped guns and Scavenger bags, and the end-of-match
screen back to the main menu. - Scorestreaks. Score earns streaks through the game’s own momentum code; bots call in Orbital VSAT,
Counter-UAV, EMP, Death Machine, War Machine, Swarm, Escort Drone and K9 Unit.
Screenshots
Drawn by this engine; the art is Black Ops II’s own, read from the player’s install at run time.
Aiming down the sights (fixed 2026-10-10): the gun used to blur whenever you aimed; now the sights and the gun
stay sharp, as in the original.
| README image:Aiming before the fix: the gun blurred | README image:Aiming now: the gun stays sharp |
| Before: the MP7 blurred while aiming | Now: sharp, as in the original |
Every map (31), from a spawn point with the HUD hidden, taken 2026-10-11 (build r129). Nuketown 2025
is the map played from the menus so far; each of the others is checked loading, spawning and playing Team
Deathmatch with bots when started directly, and picking it from the menus is still to come.
| README image:Aftermath | README image:Cargo | README image:Carrier |
| Aftermath | Cargo | Carrier |
| README image:Cove | README image:Detour | README image:Dig |
| Cove | Detour | Dig |
| README image:Downhill | README image:Drone | README image:Encore |
| Downhill | Drone | Encore |
| README image:Express | README image:Frost | README image:Grind |
| Express | Frost | Grind |
| README image:Hijacked | README image:Hydro | README image:Magma |
| Hijacked | Hydro | Magma |
| README image:Meltdown | README image:Mirage | README image:Nuketown 2025 |
| Meltdown | Mirage | Nuketown 2025 |
| README image:Overflow | README image:Plaza | README image:Pod |
| Overflow | Plaza | Pod |
| README image:Raid | README image:Rush | README image:Slums |
| Raid | Rush | Slums |
| README image:Standoff | README image:Studio | README image:Takeoff |
| Standoff | Studio | Takeoff |
| README image:Turbine | README image:Uplink | README image:Vertigo |
| Turbine | Uplink | Vertigo |
| README image:Yemen | ||
| Yemen |
Requirements
- Your own Call of Duty: Black Ops II for PC (Steam) with Multiplayer installed.
- Windows x64 (built and played on Windows 11 only so far).
- Rust (stable, via rustup; the code uses the 2024 edition) and Visual Studio 2022 Build Tools
with the C++ workload (MSVC). - A GPU with DirectX 12 or Vulkan.
- Tens of GB of free disk space for the Rust build output.
Build and run
There are no release downloads: you build it from this source tree. These steps have been done on the author’s PC
only, not yet on a fresh one by someone else.
-
Install Rust and the Visual Studio 2022 Build Tools (C++ workload).
-
Clone or download this repository.
-
Optional: set
CARGO_TARGET_DIRto a folder on a drive with plenty of room (the default istarget\inside the
repository). -
Build the game:
cargo build -p launcher --profile playThe binary is
<target-dir>\play\iw4l.exe. -
Make a play folder anywhere, copy
iw4l.exeinto it, and create a.envfile next to it that points at the
folder holding your Black Ops II install (quoted, forward slashes), for example:IW4L_GAMES="C:/Program Files (x86)/Steam/steamapps/common/Call of Duty Black Ops II" -
From the play folder, start the multiplayer front end:
.\iw4l.exe frontend t6mpPick a mode, map and bots in the custom games lobby and press Start Match. A Windows shortcut with that target
and “Start in” set to the play folder works the same way. Keys follow Black Ops II’s PC defaults; Esc opens the
pause menu.
Settings, saved classes, caches and logs go to iw4l-artifacts\ next to iw4l.exe.
Other tools: cargo build -p bo2zm_tools --profile play builds the zone readers described in
docs/BO2ZM.md. Tests: cargo test -p gsc_t6 (and cargo test -p <crate> for the others).
More documentation is indexed in docs/INDEX.md.
Configuration
.envnext to the binary:IW4L_GAMES(required).iw4l-artifacts\settings.cfg: saved settings;iw4l-artifacts\bo2mp_stats.txt: saved classes.- Test switches for scripted test matches (
BO2MP_SCRIPTS,BO2MP_BOTS,BO2MP_GAMETYPE,BO2MP_AUTOCLASS, …)
are listed indocs/BO2ZM.md.
How it works
On top of IW4L’s engine, this fork adds the crates that read Black Ops II (fastfile_t6, asset_t6, gsc_t6,
hks_t6, bo2zm_tools) and the multiplayer modules in sim:
| Part | What it does |
|---|---|
fastfile_t6, asset_t6 |
read Black Ops II’s zone files from your install |
gsc_t6::compile |
a compiler for Black Ops II script source, for the scripts the engine must provide (_globallogic) |
sim t6::mp, natives_mp |
the multiplayer runtime: game types, team scores, the match clock, spawn choice, objectives |
sim t6::bots |
the engine half of the game’s bot scripts: test clients, goals, paths, view, buttons, threats |
sim t6::loadout, t6::items |
classes from the game’s stats table; guns and Scavenger bags on the ground |
hks_t6::mp, bo2_profile |
the game’s multiplayer menus, classes and stats |
Status
Work in progress, first playable build. Matches against Black Ops II’s own bots play on every multiplayer map, started
from the game’s own menus. Many menus and HUD pieces are close to the original but not one-for-one, and some
scorestreaks and effects are still missing. It has been run on one Windows 11 PC (RTX 4070 Ti class GPU, 1920x1080)
only. Like upstream IW4L, much of this code was written by an LLM (Claude), directed and play-tested by the author.
Recent changes
- 2026-10-11 (r129): bullets pass through players and thin surfaces the way the original works it out, using its own
penetration table (how deep a bullet gets into each surface type), with the damage dropping after each target it
goes through; a sniper shot can now kill the player behind the one it hits (a collateral), checked for the DSR 50,
Ballista, SVU-AS and XPR-50 against the original’s numbers; Create a Class: the weapon category list under the
guns no longer draws names on top of each other or repeats a row, and every category screen lists the others in
the original’s order. - 2026-10-11 (r128): the final killcam plays for everyone at the end of a match, including a player who is still
alive (the original seats every player on it); End Game in the pause menu leaves the match, and from Combat
Training it goes back to the Public Match menu, as the original does when the public lobby breaks up; the scripts
that run for each life now end when a player dies, so they no longer pile up over a match (one part of the
late-match slowdown); with vsync on, frames are queued the way the original leaves them (the graphics default of 3). - 2026-10-10 (r127): riot-shield hits use the shield’s own model from the original instead of a guessed angle, so
shots that reach the body or legs before the shield now count, and a shield on the back still stops them; the kill
replay draws players between the right two snapshots, the way the original does, so they move smoothly instead of
jumping around. - 2026-10-10: scorestreaks are earned again with Hardline (the perks’ own numbers were never set, so a Hardline
kill counted for nothing; every perk now has the original’s values), the announcer speaks (match start, lead
taken and lost, one minute left, time’s up, win or loss) along with the match-end countdown, enemy names are red
and teammates’ green in the original’s own colours, the class menu inside a match shows the same classes as the
lobby, and a body no longer pops back up after the kill replay. Bots, hit markers, the dive, the riot shield, the
death camera, the kill replay and body spin are still on the list below. - 2026-10-10: aiming down the sights no longer blurs the whole gun (every gun, with or without an optic): the blur
now works out each gun pixel’s distance with the same near plane the gun is drawn with, so only the far end of the
gun softens, by each weapon’s own values (checked side by side against the original with the M27 + reflex sight
and the MTAR’s iron sights). - 2026-10-10: a game no longer quits with “lost the graphics card” when the PC is busy for over a second: the
graphics library counted a slow hand-over of a finished frame as a lost card, so it now waits again instead (a
fixed copy of the library is inthird_party/wgpu-hal). - 2026-10-10: the render thread takes about 30% less time a frame (12.8 to 9.2 ms in a Nuketown match on the fast
setting): props that share a model are drawn together (about 1,500 props in about 540 draws), posed bodies’ index
lists are sent again only when they change, bullet marks lit alike share one draw, and the body-posing pass goes
out with the rest of the frame. - 2026-10-10: bodies are posed on the graphics card instead of the processor, so each game window needs about half
the processor time. 8 game windows now run at once on one PC at 27 to 29 frames a second each
(bo2_quality=fast), each with about 2.1 GB of RAM and 0.9 GB of graphics memory. - 2026-10-10: bots move and aim by the original’s own rules (how fast they turn and settle their aim, where they
look while walking, when they sprint, how fast semi-automatic guns fire, when they knife) and step around
teammates the way the original’s bots do; they judge what they can see and reach from the map’s own baked node
tables. The game thread no longer stalls: the HUD and menus only redraw values that change, settings save only
when a menu changes them, and settled bodies stop being re-posed. Objective markers show in the objective modes. - 2026-10-10: bodies, dropped guns and props out of view are no longer drawn, so each game window spends about a
sixth less time preparing a frame; each window needs much less memory (Nuketown at full quality: 3.1 to 2.2 GB of
RAM, 1.6 to 1.4 GB on the graphics card), a window without focus draws 30 times a second, and bullet marks look
up their light once instead of every frame. - 2026-10-10: a scorestreak from a care package waits in the inventory slot and comes out the original way: hold
the switch-weapon key (controller Y) for a quarter second; a tap still swaps guns, now on release as in the
original. The console’sgive killstreakhands it over through Black Ops II’s own scripts. Sun shadows sit
around the player the way the original places them, reach further ahead of where you look and no longer crawl
as you turn. - 2026-10-10: Nuketown’s mannequins break the way the original breaks them, the match sets up spawns the way
Black Ops II does, names show over teammates’ heads, being shot no longer hangs a blood cloud at your own
camera (only the red screen edges), and the sun casts live shadows sized for each map. - 2026-10-10: movement closer to Black Ops II: a hit jolts your view by how hard it hit and the damage arrow
points back at the shooter, Lightweight’s speed and the original sprint recovery, a dive that stops sliding
ends at once, a controller dive needs the stance button held, going prone takes the original 600 ms, the
game’s scripts can switch sprint, stances, knifing and aiming off and on, and a second PC predicts its moves
with the match’s own movement rules. - 2026-10-10: a no-graphics test mode (
IW4L_HEADLESS=1): a test match with no window, graphics card or sound
device. A Nuketown match with bots takes about a third of the CPU, under half the memory and a seventh of the
disk reads of a drawn one, so many test matches run at once on one PC. - 2026-10-09: movement from the original game’s own numbers: a dive needs a short sprint first, waits about
1.5 s after the last one, pops higher and can be steered a little; falls hurt from the original heights and the
fall-damage perk stops it; a shellshock slows your walk by the shock’s own amount. The Lodestar’s view snaps to
its zoom when you aim, and your gun stays quiet while a scorestreak’s view is up. - 2026-10-09: the Lodestar puts your view on the drone with the game’s own Lodestar screen (thermal at the
start, mouse wheel up switches thermal and normal, left mouse fires missiles onto your laser, hold F to leave),
the Killed By card shows and stays up while you are dead, bodies fall as ragdolls (the killcam replays them), the
world blurs behind your sights and while you are dead, names over heads use the game’s font, and Nuketown’s cars
break when shot. - 2026-10-09: movement and guns closer to Black Ops II: sprint and dive in any direction, aim and fire through a
dive, a quicker get-up, the game’s own gun animations for diving, crawling, sprinting on an empty magazine and
climbing, the fast-climb perk, and the HAMR, AN-94 and B23R fire their first shots faster. - 2026-10-09: a launcher on a player’s back hangs slung the way Black Ops II carries it, SMG and pistol kills count
as the right kind of bullet (a rocket’s direct hit is no longer cut by Flak Jacket), and the HUD reads the game’s
own weapon names. - 2026-10-08: movement, footsteps and head bob follow Black Ops II’s own rules (set BO2_FEEL=mw2 for the old
feel); sprinting bobs the gun the way each gun does, the dive has its own rhythm, and hard landings slow you and
take health. Prestige at level 55 (Barracks > Prestige Mode). Flashbangs and concussions last and sway your gun as
much as the game’s own files say. The Hellstorm, VTOL Warship (with its thermal view), Dragonfire and AGR show
their own screens; helicopters and drones play their engine sounds; dual-wielded guns both kick. - 2026-10-08: other players go prone, dive and climb ladders at Black Ops II’s own animation speeds, the
VICTORY / DEFEAT banner at match end sits where the original puts it, and the README shows per-map completion
bars. - 2026-10-08: Frostbite’s open sea no longer shows a dark wedge beside the rooftops, and cliffs, rocks and
mountains on 13+ maps (Hydro, Cove, Drone, Castaway…) draw Black Ops II’s own tiled rock detail instead of one
flat colour.
Coming soon
- Bots that stop getting stuck on corners and props: the original’s own stuck rescue and its look-ahead check on
the route. - Bots that never stand facing a wall, and always shoot at an enemy walking in front of them.
- Bots on Nuketown’s upper floor: its ledge links carry no jump or drop mark, so bots walk them; match how the
original moves its bots over them. - A hit marker and the original’s hit sound every time you hit someone, its own headshot marker and sound, and no
marker when someone else hits you. - Getting up from a dive at the original’s speed, and diving over low objects the original way.
- Bodies that fall without spinning, the way the original’s ragdolls throw them.
- Every scorestreak working as in the original (Lightning Strike can’t be called in yet, and the UAV barely shows
enemies). Fixes from a check of every scorestreak against the original’s scripts are written; each ships once it
is proven side by side, Lightning Strike’s target pick and the UAV’s sweep first. - Every map started from the menus: Nuketown 2025 is played from them; the others are checked started directly.
- Every attachment checked against the original’s own numbers and behaviour.
- FMJ: bullets go through walls and players twice as well, as the original’s perk does (bullets already pass
through at the base rate). - Riot shield: a test that it stops shots from the front exactly as in the original (shots from behind and around
it are checked). - A riot shield carried on the back shows the wrong texture (a sheet of letters) instead of the original’s.
- Movement speed: walking, sprint, crouch, prone and Lightweight already match the original’s numbers; still to
check the water slowdown and each attachment’s aiming speed. - A death camera that stays on your body until you respawn or the kill replay starts.
- No slowdown late in a match: the script part is fixed; the drawing time that still grows over a match is not
found yet. - The announcer clear over gunfire: the original turns the other sounds down while it speaks.
- The music, sound effects and voice volume sliders (only the master volume works now).
- End Game counts the quit in your stats the way the original does.
- The reflex sight’s red dot as bright as the original’s.
- Demolition without script errors at a kill.
- Players never start a match inside a wall.
- The next map after Nuketown.
- The Hellstorm’s steer prompt key.
- The care package’s drop and pick-up checked side by side against the original game.
- No-graphics test matches skip more drawing-only work, so even more fit at once.
- Playing together over LAN, and one build with Black Ops II’s main menu for both Multiplayer and Zombies.
Credits and license
- IW4L by vladtrc and its contributors: the engine this fork is built on,
Apache License 2.0. - For Black Ops II, OpenAssetTools and
gsc-tool (both GPL-3.0) were read for format facts only; none of their code
is copied. Other projects read during development are listed inNOTICE. - wgpu: a copy of its
wgpu-hal29.0.4 with one fix is in
third_party/wgpu-hal(MIT or Apache-2.0, its license files are kept there). - Black Ops II multiplayer rebuild and the Black Ops II zone, script and menu work by DaffyDabz.
- Call of Duty, Black Ops and their assets, trademarks and intellectual property belong to their owners
(Activision). No game files are included.
Licensed under the Apache License 2.0, like upstream; NOTICE holds the copyright notices and
the licenses of the two bundled fonts. The license covers this source code only.
License and provenance
The README and its translation retain Apache-2.0 terms. Changes comprise translation, links and formatting. Editable Markdown, the original README, LICENSE and NOTICE files are included in the linked bundle. This grants no rights to the original games, their assets or trademarks.
LICENSE
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
NOTICE
IW4L
Copyright 2026 vladtrc
IW4L was originally developed by vladtrc.
https://github.com/vladtrc/iw4L
IW4L is licensed under the Apache License, Version 2.0; see LICENSE.
--------------------------------------------------------------------------------
Third-party material bundled with this repository
--------------------------------------------------------------------------------
Both fonts below are compiled into the IW4L binary with `include_bytes!`, so
they are redistributed with every build. Any archive that ships an IW4L binary
ships these two licence texts with it.
Oxanium (crates/ui/assets/Oxanium-Regular.ttf)
Copyright 2019 The Oxanium Project Authors
https://github.com/sevmeyer/oxanium
SIL Open Font License 1.1 — full text in crates/ui/assets/OFL-Oxanium.txt
GNU FreeFont (crates/console/assets/FreeMono.otf)
Copyright (C) 2002-2012 Free Software Foundation, Inc.
https://www.gnu.org/software/freefont/
GNU General Public License v3 or later, with the GNU font exception — full
text in crates/console/assets/COPYING-FreeFont.txt. The exception is what
makes embedding the font in an Apache-2.0 binary possible: a document or
program that merely uses the font is not thereby covered by the GPL. The
font itself is unmodified and remains under the GPL.
--------------------------------------------------------------------------------
Third-party source code
--------------------------------------------------------------------------------
No third-party source code is vendored in this repository, and the build links
no third-party project named below. IW4L's own dependencies are the crates
declared in Cargo.toml, under their own licences.
--------------------------------------------------------------------------------
References consulted during development
--------------------------------------------------------------------------------
These projects were read while working out how the original games behave. They
are named here because the reading happened, not because anything of theirs is
distributed: none of them is vendored, linked, bundled or otherwise shipped.
OpenAssetTools — https://github.com/Laupetin/OpenAssetTools
Open-source modding tools for older Call of Duty games. Its asset-structure
headers document the on-disk layouts IW4L reads. Licensed under GPLv3.
oat (iw4x-x64 fork of OpenAssetTools) — https://github.com/iw4x-x64/oat
The x64 fork, at revision 3a7442dee5ce040cfdb8da23fdb9fb525b5f743e, is the
tree whose IW4MS headers were read for the 64-bit FastFile layouts.
Licensed under GPLv3, like its upstream. No file in this repository is
compiled against, generated from or distributed with those headers.
IW4x — https://github.com/iw4x/iw4x-client
A custom client for Call of Duty: Modern Warfare 2 (2009), with dedicated
servers, security fixes and modding support. Read as a cross-reference for
asset and protocol behaviour. Licensed under GPLv3.
KisakCOD — https://github.com/SwagSoftware/KisakCOD
A Call of Duty 4 open-source reimplementation. Read as a cross-reference for
engine structure. IW4L targets IW4, so this is a neighbouring generation of
the same engine family, not the same codebase.
Ghidra — https://github.com/NationalSecurityAgency/ghidra
The software reverse engineering framework the original game binaries were
read with. A development tool: none of it, and none of its output, is
committed here or distributed with IW4L. Licensed under Apache 2.0.
--------------------------------------------------------------------------------
bo2zm fork
--------------------------------------------------------------------------------
This tree is bo2zm, a local fork of IW4L taken at upstream commit
11514ea37d1e80d75bf2c1ba332bbd68fac5db4e (2026-09-30) and extended to read
Call of Duty: Black Ops II (T6) PC files. Where the fork changes an upstream
file the change is marked "bo2zm"; the crates fastfile_t6 and bo2zm_tools and
the file crates/assets/src/lane/t6.rs are new. The fork stays under the Apache
License, Version 2.0.
OpenAssetTools (above) was also read for the Black Ops II zone layout: the
TAff0100 envelope and auth header, the XChunk streams, the public Salsa20 key
and its IV chain, the XFile blocks and the T6 asset list. It was read for
facts only; none of its code is copied here. Salsa20 is written from
D. J. Bernstein's specification and SHA-1 from FIPS 180-4.
The T6 zone walk (crates/fastfile_t6/src/walk_gen.rs) is generated by
crates/fastfile_t6/gen/t6gen.py, a development tool that reads layout and
load-rule facts from an OpenAssetTools checkout on the developer's machine
(the T6 structure declarations and the T6 zone-load rules) and writes Rust of
its own form. The checkout is not part of this repository, nothing from it is
vendored or linked, and the computed layouts were verified against the 32-bit
MSVC compiler.
--------------------------------------------------------------------------------
Game content
--------------------------------------------------------------------------------
No Call of Duty game data is contained in this repository or in any IW4L
release archive. IW4L reads game data from a copy of the game the user already
owns and has installed. Call of Duty, Modern Warfare, Black Ops, related
trademarks and all original game assets belong to their respective owners.
IW4L is not affiliated with, endorsed by or supported by them.

Comments
…