/RPG-Paper-Maker

RPG Paper Maker is a game making engine, free for non commercial use, allowing you to create a 3D universe with many 2D sprites and even 3D objects using a simple interface for all available platforms: Windows, Linux, and MacOS.

Primary LanguageC++OtherNOASSERTION

RPG Paper Maker

Build Build Join to the community at https://discordapp.com/invite/QncEnCE

Overview

RPG Paper Maker is a game making engine, free for non commercial use, allowing you to create a 3D universe with many 2D sprites and even 3D objects using a simple interface for all available platforms: Windows, Linux, and MacOS.

📂 Project organization

The organization contains some independent repositories. If you want to fork several repositories, you should put them all in the same parent root. Example:

--- RPM                    <- A parent folder containing all your repos
    |--- RPG-Paper-Maker   <- The engine repo that will use infos from your local Game-Scripts repo
    |--- Game-Scripts      <- The repo editing game scripts
    |--- ... (other repos)
  • RPG-Paper-Maker is the game editor software (RPG Paper Maker). It is entirely written in C++ and is managing all the json files linked to a project such as maps, statistics...
  • Game-Scripts is all the stuff needed for building a game (mainly Javascript scripts). We are using the executable and scripts in order to create a fresh new project in the software. This program is using QML and Javascript. It is also interpreting all the json files that are generated by the RPG Paper Maker engine.
  • Game-documentation contains all the stuff for generating javascript game documentation for users.
  • Basic-Ressources contains all the basic ressources that the users can use for there projects (pictures, musics...).
  • Updater is the updater that installs and check for RPG Paper Maker updates.
  • Dependencies contains all the dynamic libraries needed for games and the engine for working in standalone. It also contains all the binaries executable.

How to build the project

  • Install Qt on your OS with the Open Source installation. During the installation, you should select Qt version 5.x (/!\ Linux users should use Qt5.8 for having musics working). We recommend you to use the QtCreator IDE too. You should also install gcc compiler if it is not already done.
  • Clone and go to this repo
  • Update the modules with the command:

Linux:

./update-mods

Windows:

./update-mods.bat

NOTE: You should run this script when you want to update the recent dev changes for Basic Ressources and Game Scripts. This will first search your local changes, and then module github repo if you didn't clone it.

  • Open QtCreator
  • Open the RPG-Paper-Maker.pro file.
  • Run qmake (right click on project root).
  • Select the project to run (EditorApp or Test) in the bottom-left configuration pop-up
  • Build and run the project

If you are having any error that means that you are missing a package. Check the error and try to find out what's missing. Please report any kind of error at Wanok.rpm@gmail.com to help other contributors.

🎓 Project structure

Folder Tree

--- RPG-Paper-Maker
    |--- RPG-Paper-Maker.pro            <- The .pro for opening the project with Qt Creator
    |--- update-mods / update-mods.bat  <- Script for copying dev changes done in other git repos
    |--- versions.json / trees.json     <- Json used by the updater for checking files to update
    |--- .appveyor.yml / .travis.yml    <- Automated build tests
    |--- Editor
    |--- Editor.pro                     <- The sub-project to build the editor library
    |--- ressources.qrc                 <- Linking all the ressources (shaders, images...) used in the editor
    |--- Content                        <- Content is a folder that will contain all the stuff that needs to be copied in the build folder
        |--- basic                      <- The basic Content folder to copy when creating a new project
    |--- Controls                       <- Controllers used for complex dialog boxes or widgets / panels. Should contain all the actions to do on the dialog model
        |--- MapEditor                  <- The map editor controller separated in several files
    |--- CustomWidgets                  <- All the common custom widgets that can be re-used often are here. These components inherit from QWidget classes.
    |--- Dialogs                        <- All the dialog boxes
        |--- Commands                   <- All the dialog boxes used for object event commands
        |--- SpecialElements            <- All the dialog boxes used for special elements (autotiles, walls, 3D objects)
        |--- Systems                    <- All the dialog boxes used for system elements (SuperListItem classes)
    |--- Enums                          <- All the enumerations
    |--- MapEditor                      <- All the map editor models (sprite, floor, etc.)
        |--- Map                        <- The map model (separated in several files)
    |--- MathUtils                      <- Copy of math utils from an old Qt version for 3D drawings
    |--- Models                         <- All the models used for the database
        |--- GameDatas                  <- All the gamedata files models
        |--- System                     <- All the models used for system elements (SuperListItem classes)
    |--- Ressources                     <- All the images (icons) used for the editor
    |--- Shaders                        <- All the shaders programs
    |--- Singletons                     <- Contains RPM singleton
    |--- Themes                         <- All the themes of the editor
    |--- EditorApp
    |--- EditorApp.pro                  <- The sub-project to build the editor executable
    |--- main.cpp                       <- The main function instructions
    |--- Test
    |--- Test.pro                       <- The sub-project to build the test executable

RPM Singleton

RPM singleton is used for storing constants such as fix paths, integer values, etc. It also stores pointers to the current opened project and engine settings in order to have an access to it at any time in the program. Common functions are also available. For example, a function to write a Serializable class in a .json file is available.

✨ UI design

We are using the Qt creator designer for generating XML files for all the widgets. These files have a .ui extension.

SuperListItem

The SuperListItem class is used for being displayed with PanelSuperList or WidgetSuperTree, and stored easily in .json files. It has at least an ID and a name. For example, a monster in a game is a SuperListItem (SystemMonster class).

A list of SuperListItem will be stored in a QStandardItemModel model class. Here is a common way to add a SuperListItem to a model list:

    QStandardItem * item = new QStandardItem();
    SuperListItem* super = new SuperListItem(i, "My item"); // COuld be SystemItem class for example
    item->setData(QVariant::fromValue(reinterpret_cast<quintptr>(super)));
    item->setFlags(item->flags() ^ (Qt::ItemIsDropEnabled));
    item->setText(super->toString());
    model->invisibleRootItem()->appendRow(item);

👷 Contributing

Thank you for considering contributing to the RPM! Just see our Contributing Guide.

😇 Code of Conduct

In order to ensure that the RPM community is welcoming to all, please review and abide by the Code of Conduct.

📣 Feature requests

Check out the feathub for voting for your favorite next coming soon feature or even proposing your own one!

Feature Requests