diff --git a/README.md b/README.md index 5730991..96bfe8b 100644 --- a/README.md +++ b/README.md @@ -17,8 +17,19 @@ Explore maps, fight bots, and record and replay demos. Gameplay remains incomple expect missing behavior, bugs and desyncs. The asset readers also cover MW3 and Black Ops. -Build from source. APIs, configuration, caches and the wire protocol change between -commits; multiplayer peers must run the same commit. +APIs, configuration, caches and the wire protocol change between commits; +multiplayer peers must run the same build. + +## Windows: prebuilt release + +1. Download `iw4l-windows.zip` from [Releases](../../releases) and extract it into an + empty writable folder. The archive password is `contextrot`. +2. Next to `iw4l.exe`, add a Windows shortcut to your MW2 installation folder. +3. Launch `iw4l.exe`. + +For online play, put the `.iw4l-server` file you received from a server operator next +to `iw4l.exe`. With it the game finds that master and updates itself on launch. Details: +[Windows guide](docs/WINDOWS.md). ## Build and run @@ -26,7 +37,7 @@ Install Rust through rustup and GNU Make. [Build dependencies](docs/BUILD.md) co Linux's C/C++ toolchain and system libraries, and macOS's Xcode command line tools. [Windows instructions](docs/WINDOWS.md) cover building and arranging a portable folder. -You need your own installed MW2 Multiplayer data, including `common_mp.ff`. IW4L +You need your own installed MW2 Multiplayer data. IW4L distributes no game assets and reads installations without patching or replacing their files. Caches, demos and logs go under `iw4l-artifacts/`; Linux settings use a separate configuration directory described in the [run guide](docs/RUN.md). diff --git a/docs/MASTER.md b/docs/MASTER.md index 4564801..6627164 100644 --- a/docs/MASTER.md +++ b/docs/MASTER.md @@ -79,7 +79,7 @@ make map mp_boneyard IW4L_MASTER_HOST_NAME='Friday match' IW4L_MASTER_MAX_PLAYER ``` Other players open `make menu` and select the room. Master networking needs -MW2 multiplayer data (`common_mp.ff`); it is disabled during demo replay. +MW2 multiplayer data; it is disabled during demo replay. When a setting appears in more than one place: diff --git a/docs/WINDOWS.md b/docs/WINDOWS.md index bb163ca..910f0eb 100644 --- a/docs/WINDOWS.md +++ b/docs/WINDOWS.md @@ -1,6 +1,9 @@ # Portable Windows folder -`make launcher windows` creates `dist/windows/iw4l-windows-{dev,prod}.zip`. +Players download `iw4l-windows.zip` from the GitHub release; it holds the executable +and licences. A server operator hands out the `.iw4l-server` descriptor separately. +`make release prod|dev` also writes `iw4l-windows-{dev,prod}.zip` with the descriptor +included, and `make launcher windows` writes the same pair under `dist/windows/`. The archive password is `contextrot`. Extract into a dedicated writable folder: ```text @@ -15,8 +18,8 @@ IW4L/ ``` Add ordinary Windows shortcuts to installed title folders or executables. -MW2 multiplayer data (`zone/**/common_mp.ff`) is required for the menu; -BO1 and MW3 are optional. The runtime reads those installations. +MW2 multiplayer data is required for the menu; BO1 and MW3 are optional. +The runtime reads those installations. Launch `iw4l.exe`. Before starting the game or contacting QUIC, it checks its community's HTTPS manifest. An unchanged executable starts normally. An update diff --git a/xtask/src/release.rs b/xtask/src/release.rs index 00a5ea3..b10f028 100644 --- a/xtask/src/release.rs +++ b/xtask/src/release.rs @@ -399,7 +399,10 @@ pub fn prepare(root: &Path, env: &Env, channel: Channel, profile: &str) -> Res

Res<()> { &community(channel, &host, &ca_cert)?, )?; let archive = out.join(format!("iw4l-windows-{channel}.zip")); - player_archive(&stage, &archive)?; + player_archive(&stage, &archive, true)?; println!("[windows] {channel} archive: {}", archive.display()); } Ok(()) } -fn player_archive(stage: &Path, archive: &Path) -> Res<()> { - let mut names = vec!["iw4l.exe", "community.iw4l-server"]; +fn player_archive(stage: &Path, archive: &Path, descriptor: bool) -> Res<()> { + let mut names = vec!["iw4l.exe"]; + if descriptor { + names.push("community.iw4l-server"); + } names.extend(LEGAL_FILES.iter().map(|(_, to)| *to)); let files = names .into_iter()