This is a webxdc (in-chat mini-apps) port of the 1999 first-person shooter Quake III Arena, with multiplayer support.
- Install Delta Chat (or another messenger that supports webxdc).
- Download the bundled
.xdc
file. Alternatively, download from the webxdc store. (The file is just a.zip
archive renamed to.xdc
). - Open the Delta Chat messenger.
- Create a Delta Chat account (it will not ask you for your email or phone!).
- Send the
.xdc
file to your friend. - Launch the resulting app.
- Following the in-app instructions, download the game data archive.
- Select the archive in the app's file picker.
- Wait for your friend to do the same, starting from step 6 (launch the app).
- Frag!
To be precise, this port is based on the "The Longest Yard" project
(a browser version of Quake III with multiplayer),
which is hosted here https://thelongestyard.link/
(source code).
That project is, in turn, based on https://ioquake3.org/
(https://github.com/ioquake/ioq3/)
and HumbleNet (https://github.com/jdarpinian/HumbleNet).
The project is not made in a maintainable way. Initially it was intended as just a prototype but it seems to work well enough.
So, how it was made:
-
Go to https://thelongestyard.link.
-
Click "Play Multiplayer".
-
Save the page (Ctrl + S).
-
Download remaining assets manually.
-
Launch a local HTTP server (e.g.
python3 -m http.server
) and make sure that multiplayer and single-player works. Your browser will still connect to the signaling server of the original website and perform WebRTC P2P connection. We'll get rid of this later.This corresponds to the first commit in this repository.
-
Polyfill (mock) browser WebRTC API to use webxdc.joinRealtimeChannel as the transport. See the second commit in this repository.
-
Mock the WebSocket connection to the HumbleNet signaling server. See the third commit. The messages can be hard-coded, they only depend on whether the current app instance is gonna be the server or a client.
-
Get rid of other minor dependencies on direct internet connection. See commit history.
And here is some extra stuff:
- Add "Change Map" in-game menu item.
- Download the Linux build artifact from this branch https://github.com/WofWca/flexible-hud-for-ioq3/tree/add-menu-item-start-new-arena-ztm-flexible-hud. The branch is based on this MR: clover-moe/mint-arena#7.
- Find the
vm/ui.qvm
file in the build files. - Open the original
ztm-flexible-hud.pk3
file as a.zip
file. - Replace the
vm/ui.qvm
in the originalztm-flexible-hud.pk3
with the new file.
- HumbleNet is not really needed. Because it works on top of WebRTC, and then we mock WebRTC API to make it work on top of webxdc instead.
- We should have properly forked https://github.com/jdarpinian/ioq3 and implemented a build CI, instead of just saving the bundled website assets.
Not really.
If you are already using a native version of ioquake3 or https://thelongestyard.link and are happy with it, then there is no need to migrate to this webxdc version. In fact, you should expect higher ping in the webxdc version, due to the reliability layer overhead of the transport that it uses. Unreliable + unordered transport is not yet available in Delta Chat, but it is being considered, as of 2025-05.
This project is simply a version of https://thelongestyard.link that is a little more convenient to run if you're already using Delta Chat or another messenger that supports webxdc.