Skip to content

FreeYourSoul/FyS

Repository files navigation

Build Status Documentation Status Doxygen HitCount Codacy Badge Last commit

GitHub license Scc Count Badge Scc Count Badge

FyS Online

FreeYourSoul project called Soul's Tale, a scalable MMORPG game

Global documentation (gameplay, story oriented) are in a sphinx documentation available here.
Developper documentation is available here as doxygen documentation.

The todo list is available here

Dispatchers

A dispatcher is simply a proxy/reverse proxy server made to be used with zmq sockets, it has multiple "mode", in which it broadcast message to all it's connected services, or it load balance the requests. It is used in order to be able to scale without having the client understanding the topology put in place to install Free Tails server.

Arena Service

FreeYourSoul Online is using an original battle system inspired by Final Fantasy turn per turn systems. It is called Side Condition Timed Battle (SCTB) and it is explained into further details here.

The arena service is the server piece that will handle those fights (NPC handled through chaiscript), and report the experience/item gains.

World Service

Service handling the movement in the world of the character controlled by the players and of the NPC (handled through LUA). Each world service handle a piece of the universe (the universe of Free Tails being the complete map), a world service only handle a certain part of it (configuration defined). A transition from server to server is done discreetly when a boundary from one server to another is done in order to not hinder the user experience. See FyS article about the idea behind this.

Player Service

Stateless Service handling the player inventory (equipment, usage, money). Also used internally as a request service in order to retrieve information about the players (arena retrieving the team of the character).

Quest Service

Stateless Service used in order to request validation of quest or quests advancement of players. (maybe to be combined with Player Service ?)

Trade Service

Stateless Service handling trades of item between players. Each trade is represented as a state machine.

Gateway Service (Chat)

Service handling connection of players to FreeTails and dispatch them over the good world service, this service is also linked the chat service (channels, messages..). The player keep being connected on the Gateway server in order to be able to communicate with any player connected on the FreeTails server.

Installation

Two ways exist to build FyS server services (being separated in multiple binaries):

git clone https://github.com/FreeYourSoul/FyS.git
mkdir FyS/build && cd FyS/build
cmake ..
make

Building can be long as the arena is using chaiscript which is header only scripting language (that unfortunately takes a long time to be compiled).

  • If you don't want to install all those dependencies on your machine (understandable) especially in production environment (to avoid version conflict in case of upgrade). It has been decided to use NIX as a dependency manager. Which makes it very easy to execute a complex application (with complex dependencies) without having to install those directly on your system.

To use nix with FyS Online, you need to clone the repository and going to the root of the clone, where the default.nix file lies. You can then nix build each FyS component one per one by doing the following command <package_name> replaceable by: arena_service, world_service, dispatcher, inventory_service, trade_service

git clone https://github.com/FreeYourSoul/FyS.git && cd FyS
nix-build -A <package_name>

Everything can be nix built with the following command:

git clone https://github.com/FreeYourSoul/FyS.git && cd FyS
nix-build

Nix will compile each dependency not present in its official nix channel. For more information about how Nix works : see their documentation. It's an amazing tool that deserve attention.

External Dependency

  • FiL General purpose library (algorithm, utilities, database...)

    • Using RocksDB as base db (easy to locally test)
    • Another DB would be used in the future following the same interface used for RocksDB for scalability (Cassandra/FoundationDB)
  • ZeroMQ And cppzmq
    Network library & C++ binding library

  • spdlog
    Logging framework, usage of fmt library for logging

  • FSeam
    Mocking framework

  • Catch2
    Testing framework

  • ChaiScript
    For scripting of monsters in the Arena (fighting mode)

  • LUA For the scripting of NPC in the world map (when moving)

  • Nix
    Dependency manager for fast installation / setup.
    See installation paragraph to understand how to use it, this dependency is not required if you want to install fully those dependency on your machine.

Releases

No releases published

Languages