Giter Club home page Giter Club logo

Worldforge

Join us on Gitter! Appveyor build status Build with CMake

cyphesis ember

The WorldForge project lets you create virtual world system. We provide servers, clients, tools, protocol and media. You provide the world. Everything we do is Free Software.

This is the main monorepo which contains all the components needed for you to either host or access a Worldforge virtual world.

Some of the features we provide.

  • Fully scriptable through Python
  • Live reload of both rules and world entities; edit your world without having to shut down or reload
  • Complete 3d physics simulation
  • Complex AI system, using Behavioral Trees and Python scripts
  • Out-of-process AI, allowing for distributed AI clients
  • Persistence through either SQLite or PostgreSQL
  • Powerful built in rules for visibility and containment of entities
  • Emergent gameplay through multiple simple systems interacting
  • Quick and powerful procedural terrain generation

Components

These components make up the Worldforge system. Each of them in turn contains a README file which explains more about how they work.

  • The Cyphesis server is used for hosting a virtual world.
  • The Ember client is the main graphical client.
  • Eris is a client support library.
  • Squall provides features for syncing assets between servers and clients.
  • WFMath contains various math related functions.
  • Mercator provides features for generating procedural terrain.
  • Atlas handles all communication between different components.
  • Varconf provides configuration support.

Installation

The simplest way to install all required dependencies is by using Conan. This setup requires CMake 3.23+

Make sure you have installed a c++ compiler (g++ or clang), Conan, CMake, Subversion and ImageMagick (if you're building the server).

conan remote add worldforge https://artifactory.ogenvik.org/artifactory/api/conan/conan
conan install . --build missing -c tools.system.package_manager:mode=install -c tools.system.package_manager:sudo=True
cmake --preset conan-release -DCMAKE_INSTALL_PREFIX=./build/install/release
cmake --build --preset conan-release -j --target all
cmake --build --preset conan-release -j --target install
cmake --build --preset conan-release -j --target mediarepo-checkout 
cmake --build --preset conan-release -j --target media-process-install 

The last two invocations are only needed if you also want to host your own server.

NOTE: The invocation of the target "media-process-install" is optional. It will go through the raw Subversion assets and convert .png to .dds as well as scaling down textures. If you omit this step Cyphesis will instead use the raw Subversion media. Which you might want if you're developing locally. This step also requires ImageMagick to be installed.

If you only want to build the server or the client you can supply these options to the "conan install..." command: "-o Worldforge/:with_client=False" or "-o Worldforge/:with_server=False".

CMake < 3.23

If your CMake tool is an earlier version, < 3.23, you can't use the "presets" system with Conan. Instead you have to issue these commands:

conan remote add worldforge https://artifactory.ogenvik.org/artifactory/api/conan/conan
conan install . --build missing -c tools.system.package_manager:mode=install -c tools.system.package_manager:sudo=True
mkdir -p build/Release && cd build/Release
cmake ../.. -DCMAKE_TOOLCHAIN_FILE=build/Release/generators/conan_toolchain.cmake -DCMAKE_POLICY_DEFAULT_CMP0091=NEW -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=../install/release
cmake --build . -j --target all
cmake --build . -j --target install
cmake --build . -j --target mediarepo-checkout 
cmake --build . -j --target media-process-install 

Tests

The test suite can be built and run using the check target. For example:

cmake --build --preset conan-release --target check

API documentation

If Doxygen is available API documentation can be generated using the dox target. For example:

cmake --build --preset conan-release --target dox

Building libraries

By default, all components will be built and only the server and client will be installed. However, you can force installation of libs also either by setting the CMake variable "NO_LIBS_INSTALL" to "FALSE", or by invoking CMake in the directory of the lib you want to build.

Developing locally

We use Conan for our dependency handling. If you're developing locally you can issue this command to setup both a " debug" and "release" environment.

conan install -s build_type=Debug . --build missing -c tools.system.package_manager:mode=install -c tools.system.package_manager:sudo=True --update  && conan install . --build missing -c tools.system.package_manager:mode=install -c tools.system.package_manager:sudo=True --update

You might also want to look into the .gdbinit file to see how you can set it up to ungrab the mouse when debugging.

Running a server

To get a server running you need to build the project and then start the "cyphesis" artifact.

Running a client

To get a client running you need to build the project and then start the "ember" artifact.

Worlds data

This repository does not contain any of the demonstration worlds that we provide, since they often change a lot. They can instead be found at Worldforge Worlds. If you build through Conan these will be automatically installed and used. However, if you're setting up your own world you probably want to clone the Worlds repository and use that instead. You can either configure Cyphesis to load from a different location by setting WORLDFORGE_WORLDS_PATH at CMake time, or by altering the content of "cyphesis.vconf.in" ("autoimport" setting).

Media

When building and running Cyphesis you need access to the media, which is stored in Subversion. The Subversion server is at https://svn.worldforge.org:886/svn/media/trunk. The CMake command "mediarepo-checkout" will do a "sparse" checkout which will only fetch a subset of media, omitting source media. If you intend to do development and need the full media you can issue the CMake command "mediarepo-checkout-full" instead which will checkout all media.

Media is stored in "app/cyphesis/mediarepo".

Conan packages

We use Conan for our third party dependencies. In most cases we use the packages provided by Conan Center, but in some cases we need to provide our own packages. These can all be found in the tools/conan-packages directory.

License

All code is licensed under GPL v3+, unless otherwise stated.

How to help

If you're interested in helping out with development you should check out these resources:

Worldforge's Projects

atlas-cpp icon atlas-cpp

Remote protocol for the Worldforge MMORPG system.

cyphesis icon cyphesis

The main server for the Worldforge MMORPG system.

ember icon ember

The main client for the Worldforge MMORPG system.

eris icon eris

Client support library for the Worldforge MMORPG system.

libwfut icon libwfut

Assets sync and update tool for the Worldforge MMORPG system.

mercator icon mercator

Terrain generation library for the Worldforge MMORPG system.

ois icon ois

Object-Oriented Input System

varconf icon varconf

Settings management library for the Worldforge MMORPG system.

wfmath icon wfmath

Math library for the Worldforge MMORPG system.

wombat icon wombat

WorldForge Open Media Browser / Artist Tool

worldforge icon worldforge

Contains servers, clients and tools for creating virtual worlds.

worlds icon worlds

Example worlds for the Worldforge MMORPG system.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.