Skip to content
This repository has been archived by the owner on Nov 12, 2023. It is now read-only.

[EU] Understanding the engine library layout

Madman10K edited this page Aug 10, 2023 · 5 revisions

Before release Alpha 0.9.3.0 the engine and game used to be compiled into a single executable. This was neat at the time, but with native scripting mod support being added in that very release, we had to switch to a shared library layout.

Chart

Now there are 3 binaries that are produced, your game's code and the engine(stored under Source/ and Engine/ respectively) now get bundled into the UntitledVulkanGameEngine dynamic/shared library. This library links to the 2 wrapper executables, the first one uses the name from the uvproj.yaml file and the other uses the same name but appends Modded to the end.

The Modded executable is hardcoded to load the ModLib mediator library that all the mods link to, the other one isn't

Wrapper

Since the new wrapper executables now exists, you can write code for them under the WrapperSource directory where the files Wrapper.cpp and Wrapper.hpp are defined. The 2 functions there are called inside the executables, in them, you call any functionality that you want to be executed before the whole engine launches, here are some examples:

  1. Verifying the integrity of the libraries
  2. Connecting to the game's servers
  3. Checking for an update of the game

And, because 2 executables are compiled, on compilation the UVK_COMPILING_WITH_MODS macro is defined for the Modded executable, this way you can check for what target you're developing certain features.

A note about the Wrapper functions

A very important thing to note here is that the wrapper functions shouldn't access any engine code(especially the wbegin function) since the engine hasn't started at that moment(will lead to a crash or weird behaviour)

Clone this wiki locally