kubi/README.md

120 lines
3.2 KiB
Markdown
Raw Normal View History

2023-01-19 20:28:08 -06:00
<h1 align="center">Kubi</h1>
2023-05-16 06:42:55 -05:00
<p align="center">
2023-05-17 05:58:05 -05:00
Voxel engine written in Rust
2023-05-16 06:42:55 -05:00
</p>
<div align="center">
<img src=".readme/game.gif" width="512">
</div>
2023-05-17 22:09:19 -05:00
2023-05-16 06:42:55 -05:00
<h2>features</h2>
2023-05-17 22:09:19 -05:00
2023-05-16 06:42:55 -05:00
<p>
<ul>
<li>multithreaded procedural world generation</li>
<li>procedural structures</li>
<li>multithreaded mesh generation</li>
<li>cubic chunks (32x32x32)</li>
<li>low-level OpenGL renderer, targetting OpenGL ES 3.0</li>
<li>frustum culling</li>
2023-06-04 11:51:37 -05:00
<li>multiplayer support <sup><code>[1]</code></sup></li>
2023-05-16 06:42:55 -05:00
<li>block placement system</li>
2023-06-10 02:20:01 -05:00
<li>basic gui<sup><code>[5]</code></sup></li>
2023-06-04 11:51:37 -05:00
<li>cross platform: windows, linux, osx <sup><code>[2]</code></sup>, android <sup><code>[3]</code></sup></li>
<li>universal input system: supports keyboard, mouse, gamepad and touch input <sup><code>[4]</code></sup></li>
2023-05-16 06:42:55 -05:00
</ul>
2023-06-04 11:51:37 -05:00
<h6>
<code>[1]</code> - multiplayer is work-in-progress<br>
<code>[2]</code> - not tested on macos<br>
<code>[3]</code> - android support is experimental<br>
2023-06-10 02:20:01 -05:00
<code>[4]</code> - mouse/gamepad input is not supported on android<br>
<code>[5]</code> - currently only used on the loading screen
2023-06-04 11:51:37 -05:00
</h6>
2023-05-16 06:42:55 -05:00
</p>
2023-05-17 22:09:19 -05:00
<h2>download</h2>
<a href="https://github.com/griffi-gh/kubi/releases/tag/nightly">Latest nightly release</a>
<h2>build for windows/linux</h2>
2023-05-16 06:42:55 -05:00
**build/run**
2023-05-16 06:42:55 -05:00
2023-05-20 23:53:47 -05:00
```bash
cargo build --bin kubi
cargo run --bin kubi
2023-05-16 06:42:55 -05:00
```
**build in release mode, with nightly optimizations**
2023-05-16 06:42:55 -05:00
2023-05-20 23:53:47 -05:00
```bash
2023-06-04 08:19:33 -05:00
cargo +nightly build --bin kubi --features nightly --release
2023-05-20 23:53:47 -05:00
```
<h2>build for android</h2>
2023-05-20 23:53:47 -05:00
please note that android support is highly experimental!\
gamepad, mouse input is currently borked, and proper touch controls are not available.\
2023-05-21 05:41:09 -05:00
srgb and blending are broken too, which leads to many rendering issues
2023-11-20 17:01:52 -06:00
prerequisites: Android SDK, NDK, command line tools, platform-tools, latest JDK\
(make sure that your `PATH`, `ANDROID_HOME` and `ANDROID_NDK_ROOT` variables are configured properly)
2023-05-20 23:53:47 -05:00
**Setup:**
2023-11-20 16:56:42 -06:00
latest unpublished (git) version of cargo-apk is required
```bash
2023-11-20 16:56:42 -06:00
cargo install --git https://github.com/rust-mobile/cargo-apk cargo-apk
rustup target add aarch64-linux-android
```
**Build:**
`--no-default-features` is required for keyboard input!\
2023-11-20 16:56:42 -06:00
(`prefer-raw-events` feature *must* be disabled on android)\
Mouse input is not implemented, touch only!
```bash
2023-11-20 16:56:42 -06:00
cargo apk build -p kubi --lib --no-default-features
```
2023-11-20 17:01:52 -06:00
**Run on device (using adb):**
2023-05-20 23:53:47 -05:00
```bash
2023-11-20 17:01:52 -06:00
cargo apk run -p kubi --lib --no-default-features
2023-05-16 06:42:55 -05:00
```
2023-06-04 11:40:54 -05:00
<h2>touch controls</h2>
<img src=".readme/touch_controls.png" alt="touch control scheme" width="300">
- Left side: **Movement**
- Rigth side: **Camera controls**
- Bottom right corner:
- **B** (e.g. place blocks)
- **A** (e.g. break, attack)
2023-05-16 06:42:55 -05:00
<h2>mutiplayer</h2>
to join a multiplayer server, just pass the ip address as an argument
```sh
cargo run -p kubi -- 127.0.0.1:1234
```
<h2>server configuration</h2>
2023-06-04 11:42:33 -05:00
```toml
2023-05-16 06:42:55 -05:00
[server]
address = "0.0.0.0:12345" # ip address to bind to
max_clients = 32 # max amount of connected clients
timeout_ms = 10000 # client timeout in ms
[world]
seed = 0xfeb_face_dead_cafe # worldgen seed to use
[query]
name = "Kubi Server" # server name
```
2023-02-12 15:18:11 -06:00
<h6 align="right"><i>~ uwu</i></h6>