MineWars is a competitive multiplayer real-time strategy game with PvP combat based on Minesweeper and Civilization-like macro gameplay.
The game has been in design and development on-and-off for a few years, and has gone through several design iterations, prototypes, and rewrites during that time. Those old versions are not publicly available.
The current version of the game is currently in-development, in an effort to finally make a public alpha release. :)
The current state is WIP and this version of the game is not playable yet. Stay tuned for updates.
The full game is proprietary and source code is not publicly available. The client app (made using the Bevy game engine) is partly-open-source, for the benefit of the Bevy game dev community. The open-source parts are in this repo.
To build and run the game client (macOS, non-WSL2 Linux, Windows native):
cargo run
If you are on Windows, there is a script you can use instead, to cross-compile
and run a Windows-native EXE from within WSL2 (uses the -gnu
Rust Toolchain):
./setup-cross-wsl2.sh # first time only
./cross-wsl2.sh
This gives you a game client capable of playing the classic Minesweeper game modes offline, playback of MineWars replay files, map editor, etc. You cannot play the real MineWars game mode.
To prepare release builds with maximum optimizations and everything:
./build-release.sh {win,mac,lin}
(specify your OS and be sure to actually run it on the specified OS)
The final files will be in ./release/
.
Networked multiplayer is not part of the FOSS repo. Sorry.
The game client stores some configs/settings in your OSs standard location for user configuration files:
- Windows:
C:\Users\you\AppData\Roaming\IyesGames\MineWars
- Mac:
/Users/you/Library/Preferences/com.iyesgames.MineWars/
- Linux:
/home/you/.config/minewars/
If you want to change settings that are not (yet) changeable from in-game UIs, you know where to look. :)
(And also if you want to delete them, so they don't litter your filesystem, if you never want to play/develop MineWars again.)
The game does not create any other files on your system.
The main body of documentation is a mdbook
, sources in doc/
.
It contains detailed game design documents and specifications.
To render and read the book:
mdbook --open
Some parts (but far from all) of the source code contain Rustdoc comments. To generate API docs, run:
cargo doc --features dev --open
All code in this repo is dual-licensed as MIT/Apache-2.
The game also has proprietary parts. Those are in a separate private repo. Any official builds of the game (as distributed via official channels) are proprietary.
You can compile an open-source build of the game using just this repo, without the proprietary parts. It will have limited functionality (notably, you will not be able to play the actual MineWars game mode). See here for more info.
cargo run --features dev
(the dev
feature enables extra functionality not present in release builds)
The minewars-proprietary-shim repo is what makes this possible, by providing open-source stubs that will be used instead of the real proprietary code.
Official builds of the game are also made from this repo, but with the real proprietary code instead of the stubs. This repo here is not just a code dump, this is where the actual development happens. If you make contributions to the open-source code here, your contributions will be included (and you will be credited for them) in official builds of the game.
The game is implemented in the Rust programming language. The client is made with the Bevy game engine, but also uses tokio in the background for networking. The servers do not use Bevy, and are pure tokio.
This repo contains many Rust crates:
- Top-level (
minewars
): the main game client binary (Desktop Platforms) mobile/
: the main game client binary (Mobile Platforms)bin/
: other binaries and toolsmw_certgen
: CLI tool for generating encryption certificatesmw_datatool
: CLI tool for working with the MineWars data format
lib/app
: library crates that form the Bevy-based client app:mw_engine
: building blocks and bespoke techmw_app_core
: common framework for all of the following cratesmw_app
: implementation of the functionality of the game client (sans UI and graphics)mw_app_gfx2d
: 2D graphicsmw_app_gfx3d
: 3D graphicsmw_ui_common
: UI building blocksmw_ui_desktop
: the desktop UImw_ui_mobile
: the mobile UImw_platform_windows
: Windows-specific codemw_platform_macos
: MacOS-specific codemw_platform_linux
: Linux-specific codemw_platform_android
: Android-specific codemw_platform_ios
: iOS-specific codemw_app_game_minesweeper
: App integration formw_game_minesweeper
lib/common
: library crates used by both client and server:mw_common
: common code for everythingmw_game_minesweeper
: minimal open-source Minesweeper game modemw_dataformat
: co/dec for the format used for gameplay data (in both replay/scenario files and over-the-wire gameplay protocol)
All of the actual code for the client app lives in library crates.
The top-level crate (minewars_foss
) just creates a single executable
binary by combining them all.
The mobile
crate is very similar; it creates the mobile apps for
iOS/Android by including all of the above + extra mobile-specific stuff.
This repo contains some basic assets needed to run MineWars.
assets/font/Sansation-*.ttf
: SIL Open Font Licenseassets/font/Ubuntu-*.ttf
: Ubuntu Font Licenseassets/splash/bevy.png
: Bevy logo used with permission from Bevy Projectassets/splash/iyes*.png
: IyesGames Logo; contact for permission to use outside of MineWarsassets/gfx2d/*
: CC-BY-SA 4.0assets/gfx3d/*
: CC-BY-SA 4.0assets/locale/*
: CC-BY-SA 4.0assets/ui/*
: CC-BY-SA 4.0assets/audio/*
: CC-BY-SA 4.0
The assets-src
folder contains the source files (Blender, Inkscape,
etc.) used to generate the various assets that are not sourced
externally. There are also some scripts to process them if needed.
The official builds of the game contain extra/different assets, that
are proprietary. If you have an official copy of the game, feel free to
use those assets for private use with open-source builds of the game. They
should be compatible. Just copy them into the assets
folder.