fonline

Work in progress

View the Project on GitHub cvet/fonline

FOnline Engine

Engine currently in completely unusable state due to heavy refactoring.
Estimated finishing date is middle of this year.

License GitHub Codacy Commit

Table of Content

Features

Important note: Not all from descripted above features are already implemented, for additional information look at ‘Work in progress’ section below.

Media

Simplest way is:

And two videos to who don’t like to google:
FOnline History Last Frontier

Usage

Repository contains source code of engine, third-party sources and build tools for composing all this stuff into final platform-specific bundles.
You may work on your game using shell scripts manually but project hosts own extension for Visual Studio Code for simplify these things.
Shell scripts targeted for work under Windows 10 within WSL2 (with Ubuntu-18.04, other distros not tested but should work).
Almost all will be work under native Linuxes but some of scripts (like build.sh win32) must be run only from WSL2 shell because runs Windows binaries.
So main point of all of this that you build your game fully from source, there is no prebuilt binaries, full control over the process.

Workflow

As described above all what you need to build and package your game in one place for different platforms is WSL2.
You may do it in separate environments (like build Windows binaries in your IDE, build macOS/iOS binraies on macOS and rest on native Linux distro) but better do it in one place.

Process of creating your game in two words looks like this:

There are couple of shell scripts that help us to do it:

Scripts can accept additional arguments (build.sh for example accept platform for build for) and this information additionaly described in BuildTools/README.md.

Public API

Todo: write about versioning SemVer https://semver.org and what public API included to itself
Todo: add link to PUBLIC_API.md

Setup

Clone with git this repository.
Run ./fonline-setup in the repository root in your PowerShell.
This script interactively check your system for all requirements and helps to generate new project.
Todo: Provide additional info for non Windows 10 users

Windows Subsystem for Linux

Main point of WSL2 for us that we can run Windows programs from Linux.
That feature allows unify almost all our build scripts into one environment.
Currently WSL2 available only on Windows Insider distros but in time when engine became from Unusable to Usable state it will be available for all.

Visual Studio Code

Engine hosts own Visual Studio Code extension for simplify work with engine stuff.
In editor go to the Extensions tab and then find and install ‘FOnline’ extension (it’s already available in marketplace).
Extension activates automatically when editor finds any file that contains fonline in name of any file at workspace root.
More about extension usage you can find in Tutorial document.

Package dependencies

Following Linux packages will help us build our game for target platforms.
These packages will automatically installed during workspace preparing (i.e. prepare-workspace.sh).

Also our build scripts download and install following packages:

And fonline-setup.ps1 might install following Windows packages for you (some optional):

Statically linked packages

These packages included to this repository, will compile and link statically to our binaries.
They are located in ThirdParty directory.

Footprint

Despite on many third-party libraries that consumed by the whole engine one of the main goal is small final footprint of client/singleplayer output.
Aim to shift most of things of loading specific image/model/sound/ect file formats at pre publishing steps and later use intermediate binary representation for loading resources in runtime as fast as possible and without additional library dependencies.
This process in terms of fonline engine called Bakering.
Also as you can see all third-party dependencies linked statically to final executable (except one - proprietary libfbxsdk.dll/so for Baker but the last one is not target for small footprint) and this frees up end user from installing additional runtime to play in your game.
Todo: write about memory footprint
Todo: write about network footprint

Tutorial

Todo: link to TUTORIAL.md

Work in progress

Bugs, performance cases and feature requests you can discuss at Issues page.

Roadmap

Roadmap for Visual Studio Code extension

Code refactoring plans

Todo list (generated from source code)

Repository structure

Frequently Asked Questions

Todo: link to FAQ.md

Help and support