Shidacea 2D Game Engine
What you see is the game engine Shidacea, decoupled from my game Inuhh Shinvasion 2. It can be used for rapid development and full applications.
This repository is an engine, a template for game projects and also a launcher for custom projects. Depending on your level of knowledge and desire to mess around with my code, you can do several things:
-
Download projects from other people and launch them using an executable of Shidacea
-
Write your own project using mruby scripts and test them directly
-
Compile your project into an executable using Shidacea
-
Change the core mruby scripts of Shidacea and add new ones
-
Wrap your own methods in C++ using the MrbWrap modules
-
Dive into mruby or one of the submodules and modify them
-
Disassemble the whole thing, write some assembly code and segfault yourself into oblivion (not recommended)
Overall, this engine was designed to appeal to many people instead of just a single group. However, a certain degree of knowledge about Ruby is needed.
Idea and history
This project was inspired by the RPG Maker series from Enterbrain and complications with previous games written in Ruby. It aims to combine the beauty of Ruby for scripting with the speed of C++ for critical procedures while maintaining platform independency.
The original purpose of this engine was to serve as a backbone to Inuhh Shinvasion 2, but it quickly became its own thing. Even if the original idea was to create a Jump'n'run game, it can technically be used for any 2D project.
The final version will include the following components:
-
Shidacea - The main engine
-
Launshi - A launcher for custom projects
-
Hyashi - A level editor
Requirements
The following programs need to be installed:
-
Compiler with C++17 support
-
CMake
-
Ruby
-
Bison
For Windows you need to make sure that the paths leading to ruby.exe and bison.exe are in the PATH variable. CMake can be obtained using Visual Studio, which is the recommended option. Also make sure to avoid path names with spaces in them, as mruby might fail to compile otherwise.
Alternatively, you can use pre-compiled Windows binaries for each Shidacea release version.
Documentation
The documentation for the default build of this project can be found unter shidacea.github.io/Shidacea.
If you want to generate your documentation locally, you need to install
Ruby, the YARD gem and then run the following scripts: ruby
utility/document_engine.rb yard -o docs lib engine_docs
This will
generate the YARD documentation in the docs
folder.
Usage
There are two main ways to use Shidacea.
First, you can compile Shidacea without any scripts to a launcher. If you want to execute a project from someone else, just download its script files and put them into the custom folder.
The second option is to compile your script files together with the
Shidacea engine. This allows for more optimized code at the expense of
portability. To use this, use -DSHIDACEA_COMPILE_FRONTEND=ON
as option for CMake, which will compile the frontend project as bytecode
directly into the executable.
It is also possible to use -DSHIDACEA_COMPILE_SDCLIB=ON
to
compile the Shidacea library into the executable. This is done by default
in the release versions and recommended unless you want to change the
library functions.
Furthermore, the engine core with the SFML bindings can be disabled with
-DSHIDACEA_EXCLUDE_SFML=OFF
. This is only necessary if you
want to use your own framework for Shidacea.
Load scripts at runtime
Advantages: * Platform independent projects * Precompiled executables can be used for common platforms * After installing Shidacea, you don't need to touch it anymore
Disadvantages: * Everyone can see and modify your code without effort * Evaluating the script files takes longer than using bytecode * You cannot change the Shidacea core engine directly
Precompiled scripts
Advantages: * Faster evaluation of script files * Obfuscated scripts * You have full control over the engine and can change core aspects
Disadvantages: * Your projects need to be recompiled every time you change a script * You need to have at least basic knowledge about C++ compiling and CMake * Your project needs to be recompiled for each platform
Properties
-
Support for many different platforms (including Windows and Linux)
-
Scripting support using mruby
-
Fast SFML based game engine with mruby bindings
-
High flexibility allowing for custom builds
-
Modding support
Features
-
Simple state machine for scenes
-
Basic game classes and physics
-
Resource management system
-
Simple event handling with pseudo-parallel routines
-
Intuitive and simple system for entity properties
-
Simple entity scripting
-
Fast collision detection routines
-
Wrapped ImGui methods for debugging
Roadmap
Note that any version below 1.0.0 is a development version and will likely contain breaking changes.
The elements in this roadmap are only for orientation and are likely to change in the future.
Version 0.3.0 - Dynamics update (Autumn 2020)
-
[ ] Animations
-
[ ] More transformations (like rotation methods for triangles)
-
[ ] Sound looping
-
[ ] Ellipse shape support
-
[ ] Point drawing
-
[ ] Particle system
-
[ ] Basic GUI methods
Version 0.3.1 (Late 2020)
-
[ ] Easy CMake configuration system
-
[ ] Keyword filters for Launshi
-
[ ] Better mod support
Version 0.4.0 - Hyashi update (Early 2021)
-
[ ] A special game and level editor written using this engine (will be called Hyashi)
-
[ ] Full map support
-
[ ] Plugin support
-
[ ] Script objects
-
[ ] Event objects
-
[ ] Game templates
-
[ ] Compatibility with Shidacea and Shipectral
Version 0.5.0 - Feature update (Summer 2021)
-
[ ] Actually useful network support
-
[ ] Missing SFML features
-
[ ] Missing imgui features
Version 1.0.0 - Full release
-
[ ] Full release
-
[ ] More example projects
-
[ ] Full documentation
-
[ ] Website
Possible features in future versions
-
[ ] Resource packages
-
[ ] Shader support
-
[ ] Direct vertex array wrappers
-
[ ] Support for arbitrary shape transformations for collisions
History
Version 0.2.0
-
Entirely new engine structure
-
Z-Ordering
-
Unicode support
-
Arbitrary project structures for compilation
-
Collision routines for points, lines, circles, AABBs and triangles
-
Marshalling support for basic objects
-
Basic text input fields
-
Filters for Launshi
-
Debug routines
-
Better resource management
-
Shape drawing
-
Launshi info window with description and (one) screenshot
-
Collision test example
-
Shooter example project
Version 0.2.1
-
Automated release builds
-
Documentation page
-
Documentation of wrapped methods
-
Multiple project files in a single folder
Caveats
Submodules
If you download this repository, make sure to download the submodules as
well, since a simple download won't include them. The best way to use
Shidacea is to fork it and use Git for maintaining it and updating the
submodules (e.g. using git clone --recursive
).
List of current submodules: * mruby * SFML * ImGui * ImGui-SFML * MrbWrap * Launshi * Collishi
Loading other mruby script files
The ruby instruction require
is currently NOT available
(adding it as a gem would be possible, but not trivially applicable to the
concept of pre-compiled bytecode). This problem is circumvented by
specification of a JSON file in which the scripts are listed in execution
order. For example, the SDCLib and the frontend (e.g. Launshi) require the
use of a script order, as well as Launshi projects. It is possible to name
single files and complete directories (ending with a '/'). Note
that the order of scripts loaded in a directory needs to be regarded as
random, so avoid dependencies between files in a directory if loaded in a
batch.
Linux troubleshooting
This project should (read: SHOULD) run on Linux systems. However, several libraries are required to do so (see documentation for SFML). Some problems are discussed below.
Dependencies are missing when generating or compiling
Make sure that g++, Ruby, Bison and CMake are installed properly. Also visit the SFML documentation to check for requirements.
If the filesystem library is missing, g++ needs to be updated to version 8 or higher. If the problem persists after installing the missing libraries and programs, you may want to reboot and try again.
Executables trigger a segmentation fault on WSL
Shidacea may not work correctly on WSL despite a successful compilation. If a segmentation fault occurs on WSL, change the XServer application to another one. The segmentation fault issue is known to occur on XMing, for example. The Windows store application X410 works fine, but is not free. Reverting SFML to an earlier version can also work.
Shidacea yields other error messages on WSL
Try the solution above first. If that does not help, the command
export LIBGL_ALWAYS_INDIRECT=
might help, too. Also make sure
to properly connect your WSL with the correct XServer and a PulseAudio
server. If Shidacea runs otherwise flawlessly, some errors are completely
normal.
Other problems
Please report your problem as an issue if your problem is none of the above or none of the solutions worked. Shidacea aims to be compatible to as many platforms as possible, so please help reaching this goal.