A 3D third person RPG. With both multiplayer, and singleplayer capabilities.
The main gameplay-loop goal is to create an experience with enough complexity and depth, that can rival the more old-school MMO- and action rpgs, because nowadays I feel like that is something that got lost.
Most of the models are imported as MeshDataResources, these are meshes that are meant to be merged.
These come from the [MeshDataResource](https://github.com/Relintai/mesh_data_resource) module.
Currently I'm working on the mesh_data_resource_editor addon that will enable these to be edited directly inside the editor.
Actually [here's the full list](#the-required-engine-modules).
### Game
The [/game](https://github.com/Relintai/broken_seals/tree/master/game) folder contains the game's code and assets.
This is the folder you are supposed to open in the editor.
The game's folder structure should be mostly self explanatory.
#### Game Modules
Except for probably the game modules.
I designed the game's code to be highly modular, so I created a [loader module](https://github.com/Relintai/broken_seals/tree/master/game/scripts/game_modules). It will look for files named ` game_module.tres ` and call methods on them on certain events.
This system uses the [DataManager](https://github.com/Relintai/broken_seals/blob/master/game/scripts/game_modules/DataManager.gd) singleton.
For example this is how the ui initializes itself. The player's [body](https://github.com/Relintai/broken_seals/blob/master/game/player/Body.gd) script, requests the instantiated ui from the [DataManager](https://github.com/Relintai/broken_seals/blob/master/game/scripts/game_modules/DataManager.gd) singleton like ` var ui = DataManager.request_instance(DataManager.PLAYER_UI_INSTANCE) `.
And the data manager will instance it's player ui scene, and call all module's ` on_request_instance ` methods.
These module scripts are also responsible for collecting all spells and then setting them into the ESS singleton, so they are castable.
For exmaple the [module](https://github.com/Relintai/broken_seals/blob/master/game/modules/entity_classes/naturalist/game_module.tres) for the naturalist, and it's [resource db](https://github.com/Relintai/broken_seals/blob/master/game/modules/entity_classes/naturalist/resource_db.tres), which will be merged into a central resource db for ESS.
Note that the module resources are sorted by their resource paths, so spells should always get the same id, on every platform every time.
This is to optimize networkd spell casts.
Most of the game assets ended up under the modules folder [here](https://github.com/Relintai/broken_seals/tree/master/game/modules) for this reason,
however these might get moved, if I find a better arrangement.
#### Terrain generation
The terrain generation is now handled by the new [world_generator](https://github.com/Relintai/broken_seals/tree/master/game/addons/world_generator)
addon.
The idea right now is that the terrain is only going to be pseudo-random, as generating proper connected worlds are kind of super difficult,
especially if you also have to mesh them in 3d. I think this solution can be extended later to be able to do a full continent / world randomization
/ generation. However for now the idea is that we have a World resource, this contains Continents, those zontain Zones, and those contain SubZones.
The position and size is predetermined by the creator. And then when a chunk needs to be generated it gets put into this world, and setup.
World does mostly nothing on it's own for now, except for holding continents.
Right continents should handle things like oceans, and big mountains.
Zones generate proper terrain, and add props. They need to blend into continents.
SubZones can be used as spawners, prop spawners, or they can even do terrain mods.
The editor contains an addon to help with editing the world.
## Editing the game
Grab an engine with the required modules and then open the project inside the `game` folder.
After the initial import it might need an editor restart, however everything should work after that.
If you want to use master, you will likely need to build the editor for it if the c++ side had breaking changes since the last release.
First make sure, that you have everything installed to be able to compile the godot engine. See: See the [official docs for compiling Godot](https://docs.godotengine.org/en/latest/development/compiling/index.html) for more info. My setup/compile script uses the same tools, so
Now go ahead and get every single required engine module from [here](#the-required-engine-modules).
``` cd ../../ ```
Now if you look at the [HEADS file](https://github.com/Relintai/broken_seals/blob/master/HEADS).
It contains the commit hashes for that particular revision for every module and the engine.
You need to go through them and checkout the proper commits.
Now you can go ahead and compile godot normally.
#### The required engine modules
These are the required engine modules, they are listed here for completeness`s sake, the project's setup script will install these for you automatically! See the [Compiling](#compiling) section.