The project also requires the presence of some of my engine modules, Pandemonium contains all of them. See [here](https://github.com/Relintai/pandemonium_engine/tree/master/modules).
You can get binaries under the releases tab [here](https://github.com/Relintai/broken_seals_2ds/releases).\
You can also try a live version running in the browser [here](https://relintai.github.io/broken_seals_2ds/).
Unfortunately the web editor needs custom http headers to work and I can't set that up from github.io, so right now I don't have a hosted version of that.
## Status
Currently I'm mostly working on the 3d project and the engine, eventually I'll likely get back to this to try to add
some actual content.
## Features
### Characters
- Main and secondary stats all work, they are also customizable in the project settings. They also have built in maint stat -> secondary stat conversion support.
- Character resources all work and scriptable. (Like health, mana, speed, energy etc) Also you can dynamically add it and remove it from a character.
- Tab targeting support.
- Spells, and auras are fully scriptable, and networked.
- Actionbar, actionbar profiles support.
- Spell learning support.
- Talent support, with multiple talent trees.
- Loot.
- Equipment support including weapons, clothes, and also other attachments. Although starter gear support is not yet finished.
- Support for changing clothes via texture merging.
- Support for changing parts of models via clothes. Also support for alternative bodyparts.
- Character models are using merged meshes and textures, with generated LOD. (This is also multi threaded, with fallback when no threads are available.) This system is using MeshDataResources.
- Generic attach point support for the character skeletons. (Spell cast particle effects, spell effects, also the same system can be used for weapons.)
- Interaction support.
- Vendors, Trainers, Crafting.
- Fully scriptable ai support.
- Control over characters can be easily changed by the server, and the character bodies are scripted to act accordingly automatically. For example mind control effects can be implemented with this system.
Missing:
- Character customization support (like selecting hairtyles). It's mostly there, but some crucial features are still missing.
- Temporary character model change support. Think of polymorph effects, toys etc. Needs the character customization support first.
### Dungeons
- Randomly generated dungeons.
- Multiple layers.
- Simple Fog of War implementation using Bresenham's line algorithm (should eventually switch to something like Mingos' Restrictive Precise Angle Shadowcasting (MRPAS)).
- Collision.
### UI
- Menu and game ui.
- Actionbars with keybind support. Also the icons that you drag to the actionbar actually gets merged into the ui's texture to reduce drawcalls.
- Character, talent, spellbook, crafting, inventory, loot, vendor, trainer windows are all implemented.
- Easily scriptable options dialog.
- The menu has full support for keyboard / controller navigation. (The game itself misses it at the moment though.)
- Touchscreen controls. It will also make the buttons bigger if it detects a touchscreen.
Currently the [Pandemonium Engine](https://github.com/Relintai/pandemonium_engine) is used as the engine for this project,
which is a heavily customized verison of the [Godot game engine](https://godotengine.org/). It's based on the 3.x branch.
It contains my engine modules, and also it got significanlty slimmed down compared to vanilla Godot.
For a more in-depth changelog see it's changelog file [here](https://github.com/Relintai/pandemonium_engine/blob/master/CHANGELOG.md).
### Game
The [/game](https://github.com/Relintai/broken_seals_2ds/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 (hopefully) mostly self explanatory.
#### Game Modules
I designed the game's code to be highly modular, so I created a [loader module](https://github.com/Relintai/broken_seals_2ds/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_2ds/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_2ds/blob/master/game/player/Body.gd) script requests the ui nodes from the [DataManager](https://github.com/Relintai/broken_seals_2ds/blob/master/game/scripts/game_modules/DataManager.gd) singleton (like ` var ui = DataManager.request_instance(DataManager.PLAYER_UI_INSTANCE) `). And then the data manager will instance it's ` player_ui ` scene, and call all module's ` on_request_instance ` methods, while also passing the newly instanced scene to them.
These module scripts are also responsible for collecting all spells and then setting them into the ESS singleton, so they are actually castable.
This is the [module](https://github.com/Relintai/broken_seals_2ds/blob/master/game/modules/entity_classes/naturalist/game_module.tres) for the naturalist, and it's [ResourceDB](https://github.com/Relintai/broken_seals_2ds/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.
Append `v` to pass the `vsproj=yes` parameter to the build script. This will generate Visual Studio project files.\
Append `c` to pass the `compiledb=yes` parameter to the build script. This is a new feature in 3.x to have this disabled by default to lessen compile times.