TL;DR
Erik Sombroek (@ErikSom) đã cross-compile Warsmash — engine reimplementation clean-room của Warcraft III do Retera viết bằng Java + LibGDX — sang JavaScript thông qua TeaVM. Kết quả demo: main menu Warcraft III tuổi thơ boot thẳng trong tab browser, map files được nạp qua OPFS (Origin Private File System). Vẫn còn quirks, nhưng đây là bước nhảy lớn: một RTS engine tầm Warcraft III chạy trong browser, không cần cài đặt gì.
Điểm mới
Warsmash trước giờ là một dự án desktop Java — bạn build Gradle, tự trỏ tới thư mục Warcraft III hợp pháp của mình, rồi chạy JAR. Erik cắm pipeline TeaVM (AOT compiler Java bytecode → JS/WebAssembly) vào, dùng backend gdx-teavm của xpenatan để lo phần LibGDX ↔ WebGL, và chuyển layer lưu file sang OPFS — filesystem ảo gắn với origin của trang web, cho phép ghi/đọc blob lớn mà không cần fetch lại từ server.
Nói ngắn gọn: vẫn là chính codebase Java đó, vẫn là chính engine Warsmash đó, nhưng output là một web app zero-install.
Tại sao đáng chú ý
- Không phải port, không phải viết lại — là cross-compile nguyên codebase Java sang JS. Giữ nguyên game logic, render pipeline, asset system.
- Zero install cho người chơi: mở tab, kéo thả map, chơi. Không cài Java, không build Gradle, không Warcraft III client.
- Blueprint tái sử dụng được: nhiều dự án LibGDX nghiêm túc từng bị kẹt giữa GWT cũ kỹ và native-only; TeaVM + OPFS là con đường thứ ba đáng tin.
Thông số kỹ thuật
- Warsmash: engine clean-room của Warcraft III, ~95% Java (Java 17, syntax Java 8), AGPL-3.0, 600+ commits trên main. Built trên LibGDX + port của Ghostwolf's
mdx-m3-viewer+ HiveWE terrain + BLP/MPQ/SLK/INI parsers + GLSL shaders tự viết. - TeaVM: ahead-of-time compiler, đầu vào Java bytecode, đầu ra JavaScript hoặc WebAssembly. Không cần plugin browser. Thường cho output nhỏ hơn và build nhanh hơn GWT.
- gdx-teavm: backend cộng đồng bởi xpenatan, wire TeaVM vào LibGDX, render qua WebGL/Canvas, dùng Emscripten cho các mảnh JNI không thể pure-Java.
- OPFS: Origin Private File System — filesystem ảo scope theo origin, expose qua File System Access API. Cho phép ghi binary lớn (map files, asset MPQ) một lần, đọc sync nhiều lần, không đụng disk thật của user.
- Render: Warsmash gốc trộn GLSL shaders từ WebGL cũ tới OpenGL 4.5; bản browser rút về WebGL/WebGL2 qua LibGDX GL abstraction.
- Assets: Warsmash không ship file Blizzard — user phải có bản Warcraft III hợp pháp. Browser port kế thừa rule đó; OPFS là kênh nạp map/asset.
So sánh
| Tiêu chí | Warsmash desktop | Warsmash browser (TeaVM) | GWT LibGDX export |
|---|---|---|---|
| Install | Cần Java + build Gradle | Mở tab, drag map | Mở tab |
| Compile Java → Web | — | TeaVM (AOT, JS+WASM) | GWT (thường chậm, cũ) |
| Output size/speed | — | Nhỏ, chạy nhanh hơn GWT | To, chạy chậm hơn |
| Asset storage | Disk | OPFS | Fetch mỗi lần |
| macOS | Kẹt OpenGL mixed versions | Đỡ hơn (WebGL path) | OK |
Use cases
- Modder Warcraft III: test custom map trên bất kỳ máy nào có browser — không Java, không Warsmash build, không cần Windows.
- Retro / preservation: boot main menu Warcraft III tuổi thơ trên Chromebook, máy công ty, thậm chí điện thoại.
- Education / demo: chứng minh pattern "ship game Java nghiêm túc lên web bằng TeaVM" — một RTS engine đã chạy được, thì các game LibGDX nhỏ hơn thoải mái đi theo.
- Cộng đồng multiplayer tương lai: khi mạng được wire qua WebRTC/WebSockets, đây là nền cho các trận Warcraft III p2p không cần client.
Giới hạn & chi phí
- Còn quirks — Erik nói thẳng "still some quirks left." Đây là tech preview qua video clip, chưa phải release.
- User phải tự nạp asset Warcraft III hợp pháp vào OPFS. Không có Blizzard IP trong build.
- Không có URL demo chính thức công bố trong post gốc — mới chỉ có clip quay màn hình.
- Chi phí: miễn phí, open source. Warsmash AGPL-3.0, TeaVM Apache 2.0, OPFS là web standard.
Tiếp theo là gì
Roadmap hợp lý: dọn các quirks render/input còn lại, mở rộng gameplay qua main menu vào trận thật, streamline bước nạp MPQ/map vào OPFS (drag-drop folder), và — nếu đi xa — multiplayer over-the-wire. Xa hơn nữa: đây là proof-of-concept cho một pattern rộng hơn. Cả một thế hệ game Java LibGDX từng bị kẹt giữa GWT già cỗi và native-only giờ có con đường thứ ba rõ ràng: TeaVM + OPFS = zero-install web app giữ nguyên codebase.
Nguồn: Erik Sombroek trên X, Retera/WarsmashModEngine, TeaVM, gdx-teavm, JVM Weekly vol. 121.