This repository is going to be quite out of date for a while. I've made a separate repository with all the online multiplayer code stripped out while I foucs on getting a prototype up and running. I've also split all the engine code into its own repository, that can now be found HERE
The rest of this readme is currently a bit out of date.
A 3d, 3/4 view, action rogue-lite game I'm making in a dedicated C++ engine I'm writing. The game is being designed for up to 4 players with a server-client architecture.
There is a bit of separation between game and engine code and I plan on splitting it fully at some point but not for some time.
Haven't decided on a license for this project yet but will probably license the game source separately to the engine. Currently not for public release/use but I'm happy to share access with people I personally know. The engine source will probably end up releasing under the MIT license.
A bit sad at the moment, currently the 'game' consists of a chatbox and a character displayed on screen, that is it.
- Get character movement working again and committed.
- A basic NPC enemy which chases the closest player.
- 'Zone' generation and moving between zones which will act as the 'dioramas'/'areas' that you play the game through.
- Visual Studio 2019 with /std:c++latest (for C++20 features)
- Free texture packer for generating texture atlases
- CastleDB for managing static game data
- RenderDoc has been a great tool while writing my graphics abstraction and debugging graphics problems in general.
- Pivotal Tracker for task and issue planning/management.
Library | Licence | Comments |
---|---|---|
SDL2 | zlib | Creating graphical windows and accessing keyboard/mouse input. |
GLEW | [see here] | OpenGL |
spdlog v1.x | MIT | Logging |
glm | Happy Bunny / MIT | Math types |
yojimbo | BSD-3-Clause License | Client-server networking |
Dear ImGui | MIT | In-game tools and placeholder game UI |
stbimage | Public Domain / MIT | Image processing utilities |
entt | MIT | Entity component system (ECS) |
sigslot | MIT | Subscribable signals/events |
Nlohmann Json | MIT | JSON parser |
pugixml | MIT | XML parser |
magic_enum | MIT | A great utility library providing static reflection for enums |
frozen | Apache-2.0 License | Header-only library for 0 initialization cost containers |
yaml-cpp | MIT | Yaml file parsing |
Bitsery | MIT | Header only binary serialization library |
- "Scroll-o-Sprites" and some other CC-BY-3.0 works by Sebastiaan van Hijfte as placeholders
This section still needs fleshing out and nothing is set in stone yet. I'm more than happy to answer any questions.
I've recently been refactoring the engine into a "Core" class which facilitates the "Game" classes, the resource manager and various engine "plugins". I have different types of plugins (system, input, graphics, etc) which is designed to abstract away and encapsulate specific systems like rendering. There can only be one of each type active at a given time and are designed to be swappable based on the current platform the game application is running on.
Client/ClientMain.cpp
and DedicatedServerMain.cpp
act as entry points, initialise the core, plugins and ClientGame
ServerGame
respectfully.
From here it should be fairly straight forward to follow any particular class to see how everything works but as a quick run-down:
- Core manages the main loop, storing plugins and the resource manager.
- Plugins are written to meet an API (see headers in
Common/Core/API/*
) - Resource manager handles loading 'assets' from disk and caching them as 'resources'.
- The game class uses plugins and resources for doing the actual game.
- Clone the repro and setup the git modules (recursive clone and building the relevant libraries for 64bit)
- Build the project to
bin/Client
and copySDL2.dll
here - Build the texture atlases using Free Texture Packer (.ftpp file is
Assets/2DArt
) -- Should output tobin/Client/Art/*
- Run
DedicatedServer.exe
andClient.exe
frombin/Client/
- (hopefully) Results!