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

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 t6mp opens 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.

  1. Install Rust and the Visual Studio 2022 Build Tools (C++ workload).

  2. Clone or download this repository.

  3. Optional: set CARGO_TARGET_DIR to a folder on a drive with plenty of room (the default is target\ inside the
    repository).

  4. Build the game:

    cargo build -p launcher --profile play
    

    The binary is <target-dir>\play\iw4l.exe.

  5. Make a play folder anywhere, copy iw4l.exe into it, and create a .env file 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"
    
  6. From the play folder, start the multiplayer front end:

    .\iw4l.exe frontend t6mp
    

    Pick 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

  • .env next 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 in docs/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 in third_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’s give killstreak hands 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 in NOTICE.
  • wgpu: a copy of its wgpu-hal 29.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.