diff --git a/README.md b/README.md index ab00d6e..e63de45 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,52 @@ -This project aims to re-create the functionality of "Minecraft Classic" for the sake of creating a game that could be considered finished while developing code and experience that can be used in future projects that have greater ambitions. - -We're using [Bevy] (and thus Rust) and are going to be making heavy use of Entity Component System (ECS) design. +This project, written in Rust and using [Bevy], aims to re-create the functionality of Minecraft "Classic" (2009) for the sake of creating a game that could be considered finished while developing code and experience that can be used in future projects that have greater ambitions. [Bevy]: https://bevy.org/ ## Goals -- Creative mode editing -- Basic player physics -- Simple cellular automaton interactions -- Limited world size (configurable) -- Data-driven block palette loaded at startup -- Custom block models (and textures) -- Multiplayer -- Run in browser +- ☐ Creative mode editing +- ☐ Basic player physics +- ☐ Limited world size (configurable) +- ☐ Block definitions loaded at startup +- ☐ Custom block models (and textures) +- ☐ Simple cellular automaton interactions +- ☑ Multiplayer (server-autoritative) +- ☑ Runs in browser ## Non-goals -- Non-player entities. -- "Infinite" terrain. It shouldn't be too difficult to support this, but this is to keep the scope of the project small. This can be explored when the game is in a playable state. -- More sensible liquid handling such as "waterlogging", partial liquid blocks and flow mechanics. -- Modding API. Something I'd like to see, but also out of scope. +- Non-player entities (animals, falling blocks, block entities) +- Modding API (other than loading block definitions) +- Infinite, streaming terrain (possible, but currently out of scope) +- Sensible liquid handling (waterlogging, partial liquid blocks, flow mechanics) + +## How to Launch + +Since the game is still way too early in development, there are no releases yet. + +To compile and run it yourself, other than setting up Rust (through `rustup` for example), I recommend using [Bevy CLI]. It simplifies some tasks, such as building and testing on web. But if you don't want to use it, just replace `bevy run` with `cargo run` in the following code block. + +```sh +# Run the game locally. +bevy run +bevy run -- local # same as above +bevy run --release -- local # with release optimizations + +# Host a server for the game and play on it. +# When starting up, will print the "certificate digest". +bevy run -- host [PORT] + +# Connect to an existing server. +bevy run -- connect +``` + +To test the game in the browser, you can do the following: + +```sh +# Run a local webserver to serve the game, and open it. +bevy run web --open +``` + +If you want to connect to a server, add `?connect=&digest=` to URL. Due to a limitation, hostnames like `localhost` won't work here – use an IP instead. Also note that I had no luck getting WebTransport working in Firefox, so you may want to try with a Chromium-based browser. + +[Bevy CLI]: https://github.com/TheBevyFlock/bevy_cli