Skip to content

Latest commit

 

History

History
115 lines (69 loc) · 4.97 KB

README.md

File metadata and controls

115 lines (69 loc) · 4.97 KB

Welcome to Veloren

Build Status

Veloren

What is Veloren?

Veloren is a multiplayer voxel game inspired by Cube World. It aims to emulate the feel of Cube World while deviating in its features.

Licensing and contribution

Veloren is an open-source community project licensed under the General Public License version 3. We gratefully welcome community contributions, both technical and editorial.

Why so many crates?

Veloren is designed in a modular manner. The various crates (libraries, for those not acquainted with Rust) of the project try to make no assumptions about what they will be used by and how.

'Core' crates

client

The client crate. Used by client 'frontends' to manage all the low-level details of running a Veloren client like handling the server connection, entity physics predictions, terrain updates, etc.

server

The server crate. Like the client crate, it's used by server frontends to manage the low-level details of running a Veloren server like handling client connections, entity physics, terrain generation, world simulation, etc.

world

This crate provides code that relates to large-scale world generation and simulation. It contains code that manages weather systems, the virtual economy, quest generation, civilisation simulation, etc. Currently, it is only used by the server crate, but we're keeping it separate since we anticipate that it may be used by third-party tools.

region

This crate provides code that relates to local world simulation (i.e: that which occurs close to a player). It contains code that manages entity physics, chunk updates, NPC AI, etc. It is used by both the client and server crates.

network

This crate provides code to manage networking on both the client and server ends. It includes things like connection management, packet serialization/deserialization, etc. It is used by both the client and server crates.

'Frontend' crates

headless

This crate is a simple 'headless' (i.e: chat only) client frontend that connects to a server and allows the player to send and receive chat messages without having a physical character in the world. It uses the client crate.

voxygen

The voxygen crate contains the official 3D frontend for Veloren. It allows players to connect to servers, play as a character within those servers, and will eventually also support single player worlds via the network abstraction within the network crate (note: this isn't implemented yet). It uses the client crate. It uses the server crate.

server-cli

This crate is a simple command-line interface (CLI) server frontend. It allows the hosting of a server in a headless environment such as a dedicated server.

server-gui (not yet implemented)

This crate is a graphical user interface (GUI) server frontend. It allows the hosting of a server front an ordinary desktop PC with minimal effort and is designed for use by ordinary players wanting to host a server. It uses the server crate.

Compilation

  1. Install Rust

    Arch Linux

    $ sudo pacman -S rustup
    $ rustup default nightly # Configure rust nightly compiler

    Windows

    Install Rust from here

    > rustup default nightly
    

    Follow instructions from here to install SFML/CSFML libraries.

  2. Install SFML

    Arch Linux

    $ sudo pacman -U https://archive.archlinux.org/packages/s/sfml/sfml-2.4.2-5-x86_64.pkg.tar.xz #needed for now, because sfml is normaly 2.5 and csfml only 2.4
    $ sudo pacman -S csfml

    Windows

    Follow instructions from here to install SFML/CSFML libraries.

  3. Compile and run a frontend

    Currently, the only officially supported frontend is voxygen.

    $ cd voxygen && cargo run

Task list

There are a variety of things that need doing at the moment. You can help move the project forwards by contributing!

  • Get things ready for the 0.1.0 release
    • Make server understand that players have a position in the world
    • Make server generate chunks when players approach them
    • Make server send nearby chunks over the network to client (only when requested)
    • Add volume rendering to voxygen
  • Fix the major slowdown in server whereby the entire thing locks up when a world simulation update is occuring
    • Make worldsim internally concurrent and externally concurrent (i.e: other things can still call functions on it while a world simulation update is occuring)
  • Investigate how best to build a menu GUI for voxygen
    • Investigate font renderering vs texture rendering
    • Investigate 2D texture rendering