Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
76 commits
Select commit Hold shift + click to select a range
2104d5b
changed settings menu so theme changing requires a restart.
Thefirey33 Apr 4, 2026
620d70a
fix, have to change to application directory for launching to work.
Thefirey33 Apr 4, 2026
154b415
slight changes, finish up
Thefirey33 Apr 4, 2026
75f4bcb
actual finish up because the IDE recommended something that broke som…
Thefirey33 Apr 4, 2026
1ca16e5
add restarting theme and fix warnings on windows
Thefirey33 Apr 4, 2026
bef1a54
Fix problem with theme restarting dialog when switching languages causes
sudoker0 Apr 5, 2026
a9f4968
Actors with Interactables
CDevv Apr 6, 2026
e442c2a
Make directories for all resource types when creating a new project.
CDevv Apr 7, 2026
84ae63d
Basic Project Settings window
CDevv Apr 9, 2026
12b5999
Remove tree-sitter dependencies + remove codeEditor code
CDevv Apr 9, 2026
0e950ff
Small touchup on the project settings dialog
sudoker0 Apr 10, 2026
c2fcbec
Code reformatting
sudoker0 Apr 10, 2026
7b8e02b
Aggresive code reformatting
sudoker0 Apr 10, 2026
c95f63f
Basic Interactable file type
CDevv Apr 10, 2026
022292b
Merge branch 'misc-improvements' of https://github.com/rpgppengine/rp…
CDevv Apr 10, 2026
52a5237
Proper Interactable resource type.
CDevv Apr 11, 2026
b938e28
Bind translations
sudoker0 Apr 11, 2026
55531e3
Bulgarian translation of new keys
CDevv Apr 11, 2026
1cdbde5
turkish translation
Thefirey33 Apr 11, 2026
3327b1a
Basic Program settings.
CDevv Apr 12, 2026
59f3acd
Allow users to preview what their Props will actually look like in Pr…
Thefirey33 Apr 12, 2026
4fdac76
Merge branch 'misc-improvements' of https://github.com/rpgppengine/rp…
Thefirey33 Apr 12, 2026
d2e7571
Update the Turkish Translation.
Thefirey33 Apr 12, 2026
843ca28
Bind translations and improve Vietnamese translations
sudoker0 Apr 13, 2026
6cbe4d8
UI tweaks to translationn checker
sudoker0 Apr 13, 2026
c7e4e4b
Project Settings being applied + Game category of Project settings.
CDevv Apr 13, 2026
1f58b47
Merge branch 'misc-improvements' of https://github.com/rpgppengine/rp…
CDevv Apr 13, 2026
ae88f20
Reflect new changes in documentation + new keys in translation
CDevv Apr 13, 2026
06178e3
Added options for setting window state and fps
sudoker0 Apr 13, 2026
3a36d3a
Add ability to set project version
sudoker0 Apr 15, 2026
7bd7ea5
Add field to ui
sudoker0 Apr 15, 2026
2318485
Add turkish translation
Thefirey33 Apr 15, 2026
9fa3c9a
Bulgarian translation of new keys
CDevv Apr 15, 2026
ae06f1a
Merge branch 'misc-improvements' of https://github.com/rpgppengine/rp…
CDevv Apr 15, 2026
c3bcd41
Make directory option in New Project dialog + provide default resources
CDevv Apr 16, 2026
95131a1
Fix y-sort issue with Actors, Introduce debug draw option, add addit…
CDevv Apr 17, 2026
e411af2
Code reformat
sudoker0 Apr 17, 2026
9bd2fae
Update translation for Vietnamese
sudoker0 Apr 17, 2026
0299924
Rebind translations and update `bindCustomTranslation` to
sudoker0 Apr 17, 2026
4eb47ab
update turkish translation
Thefirey33 Apr 17, 2026
e3bdf5c
Use pugixml to process dialogue formatting + introduce color tags, fo…
CDevv Apr 18, 2026
973665f
Delay tag + basic dialogue options
CDevv Apr 18, 2026
d8123bd
Make propView properly adjust with the propFileView's size.
Thefirey33 Apr 18, 2026
47175fa
[1/2] Implement the base functions for text formatting, will finish t…
Thefirey33 Apr 18, 2026
02c54ad
Add ability to change color formatting.
Thefirey33 Apr 19, 2026
84c9321
Fix up of the color selector.
Thefirey33 Apr 19, 2026
e12cd66
Slight code adjustment.
Thefirey33 Apr 19, 2026
cf24ec3
Create Turkish Translation.
Thefirey33 Apr 19, 2026
41eb818
Cleanup. (dialogueFileView will still be worked on, It is not done yet.)
Thefirey33 Apr 19, 2026
5f62314
Add and edit dialogue options in Editor
CDevv Apr 19, 2026
47102fe
Update translation for Vietnamese
sudoker0 Apr 19, 2026
ee401af
Update Turkish Translation.
Thefirey33 Apr 19, 2026
61c7182
Update Translation and slight tweaks.
Thefirey33 Apr 19, 2026
644bbf8
Allow text size changing, Add addXmlWithProperties that allows adding
Thefirey33 Apr 19, 2026
35e9983
Add Font Changing to Formatting.
Thefirey33 Apr 19, 2026
02a46a4
Fix interesting issue with selection.
Thefirey33 Apr 19, 2026
03ac302
Allow delay editing in dialogueFileView.
Thefirey33 Apr 19, 2026
7cbcc74
Fix and Clean Translations
Thefirey33 Apr 19, 2026
9e788ea
Code reformat and translation update
sudoker0 Apr 20, 2026
8aa727c
Changes to build workflow
sudoker0 Apr 20, 2026
9c1416c
Padding, sound and newline tags for dialogue
CDevv Apr 20, 2026
56b7e33
Merge branch 'misc-improvements' of https://github.com/rpgppengine/rp…
CDevv Apr 20, 2026
fe1ee8a
Documentation of new dialogue system additions and Project Settings a…
CDevv Apr 20, 2026
6cc79a8
Test update to xmake build file
sudoker0 Apr 20, 2026
9fde23e
replace _WIN64 with _WIN32
sudoker0 Apr 20, 2026
93ad97f
Test 3
sudoker0 Apr 20, 2026
23c1cf7
Test 4
sudoker0 Apr 20, 2026
921a9b3
Fix Windows API conflicting with Raylib API.
Thefirey33 Apr 20, 2026
a8f9f7d
Introduce ListField and EditListFieldWindow, Export Image Scales and …
CDevv Apr 20, 2026
49f6067
Merge branch 'misc-improvements' of https://github.com/rpgppengine/rp…
CDevv Apr 20, 2026
8124f44
New translations for EditListFieldWindow
CDevv Apr 20, 2026
a77a525
Update Turkish Translation.
Thefirey33 Apr 20, 2026
8ef3f3f
Update Turkish Translation.
Thefirey33 Apr 20, 2026
7d1a84b
Update translation for Vietnamese
sudoker0 Apr 20, 2026
9fdb4ef
Document new Project Settings
CDevv Apr 20, 2026
d23ffc1
Merge branch 'misc-improvements' of https://github.com/rpgppengine/rp…
CDevv Apr 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/build-doc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ name: "Build documentations"

on:
push:
branches: ["main", "docs"]
branches: ["main"]
pull_request:
branches: ["main", "docs"]
branches: ["main"]
workflow_dispatch:

env:
Expand Down
13 changes: 10 additions & 3 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,14 @@ jobs:
fetch-depth: 0
submodules: recursive

- name: Install xmake
uses: xmake-io/github-action-setup-xmake@v1
with:
xmake-version: latest

- name: Install packages
shell: bash
run: |
sudo add-apt-repository ppa:xmake-io/xmake
sudo apt-get update
sudo apt-get install -y \
libx11-dev \
Expand All @@ -38,8 +42,7 @@ jobs:
libxcursor-dev \
libxi-dev \
libgl1-mesa-dev \
mesa-common-dev \
xmake
mesa-common-dev

- name: Build
shell: bash
Expand Down Expand Up @@ -70,6 +73,10 @@ jobs:
uses: xmake-io/github-action-setup-xmake@v1
with:
xmake-version: latest
- name: Configure
run: |
xmake global --clean
xmake config --plat=windows --arch=x64 -y

- name: Build
shell: pwsh
Expand Down
1 change: 1 addition & 0 deletions docs/guide.rst
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,5 @@ Learn how to install and use RPG++ to make a simple RPG game!
guide/mainconcepts
guide/editorlayout
guide/editoroptions
guide/projectsettings
guide/typesindex
5 changes: 5 additions & 0 deletions docs/guide/editorlayout.rst
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,11 @@ Here you can see the title of the opened project, as well as a Playtest button a

* **Build** - Export the project. This will result in a .bin file and an executable file in the project's root directory.

.. image:: ../images/rpgpp-projectsettingsbutton.png
:width: 40%

* **Project Settings** - Open the Project Settings window, where you can change settings about your project.

* `(3)` - **Resources List**

Here you can see the resources of the project. The dropdown lets you choose which type of resource do you want to be listed. You can click on any file listed here. The "New Resource" button creates a new resource of the type that is currently chosen in the dropdown.
Expand Down
45 changes: 45 additions & 0 deletions docs/guide/projectsettings.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
Project Settings
================

In this window you can change or view settings that will impact the game's window or the gameplay.

.. image:: ../images/rpgpp-projectsettings.png
:width: 40%

There are two categories in Project Settings:

* **Program**:

This category changes how the program's window behaves.

* **Title** - The Window's title.

* **Program Icon** - The icon of the window.

* **Version** - Version of the game.

* **Window Width** - Width of the window.

* **Window Height** - Height of the window.

* **Is Window Resizeable** - Whether the window will be resizeable.

* **Window Mode** - windowed, exclusive, minimized, maximized, fullscreen.

* **Target FPS** - The frames per second that will be targeted.

* **Game**:

This category changes the gameplay of the game.

* **Default Room** - The room in which the player will first spawn.

* **Player Actor** - The Actor file which will be used for the Player's appearance.

* **Tile Size** - The tile size in maps.

* **Debug Draw** - Drawing objects like collision boxes and etc.

* **Export Image Scales** - What image scales to be exported.

* **Export Font Sizes** - What font sizes the fonts shall be exported in.
63 changes: 43 additions & 20 deletions docs/guide/resourcetypes/dialogue.rst
Original file line number Diff line number Diff line change
Expand Up @@ -12,25 +12,32 @@ Example of a Dialogue file (.rdiag):
.. code:: json

{
"diag": [
[
"Xenith",
"I changed the dialogue!",
"0",
""
],
[
"Xenith",
"This is the second line!",
"0",
""
],
[
"Xenith",
"Content",
"0",
""
]
"diag":[
{
"characterName":"Chara",
"hasOptions":false,
"hasPortrait":false,
"imageId":"",
"options":[],
"text":"My dialogue <red>text!</red>"
},
{
"characterName":"Character",
"hasOptions":true,
"hasPortrait":true,
"imageId":"xenith-portrait.png",
"options":[
{
"name":"Option 1",
"nextDialogue":"mydiag.rdiag"
},
{
"name":"Option 2",
"nextDialogue":"diag.rdiag"
}
],
"text":"Spooky <red>RED</red> text!"
}
]
}

Expand All @@ -55,7 +62,23 @@ The "Add a new line" button will add a new line to this Dialogue.

The "Has a portrait?" option sets whether this line will have a portrait image shown for it. If it is on, then you can select an image to be shown.

You can also edit the Character name and the text content for the dialogue line.
You can also edit the Character name and the text content for the dialogue line. Dialogue text supports XML-like tags for formatting the text or achieving other effects. All tags must have a closing tag.

* **Color tags:** - <lightgray>, <gray>, <darkgray>, <gold>, <yellow>, <orange>, <pink>, <red>, <maroon>, <green>, <lime>, <darkgreen>, <skyblue>, <blue>, <darkblue>, <purple>, <violet>, <darkpurple>, <beige>, <brown>, <darkbrown>, <magenta>, <white>, <black>

* **<delay>** - Adds a delay in the typewriter effect in the dialogue UI.

* **<textSize size="int">** - Changes the size of the text. It has one property *size* which is to be set to a number. Example usage: ``<textSize size="16">my text!</textSize>``

* **<font>** - Changes the font of the written text. Example: ``<font font="LanaPixel">My text!</font>``

* **<padding>** - Gives the written text a padding. It can be either in pixels of percentage of the dialogue box.
* Example for pixels: ``<padding px="20">Padded text in pixels</padding>``
* Example for percentage: ``<padding percent="20">Padded text in percentage</padding>``

* **<sound>** - Plays a different sound while typing out this text. Example: ``<sound id="sheep">Baa!</sound>``

* **<nl>** - Positions the text on a new line. Example: ``<nl>text</nl>``

The 'X' button deletes this line.

Expand Down
44 changes: 44 additions & 0 deletions docs/guide/resourcetypes/interactable.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
Interactable
============

=======================
What is an Interactable
=======================

An Interactable is an object that the player can interact with. It has an attached script that defines its behaviour. It can placed on its own or exist within a Prop or an Actor.

Example of an Interactable file:

.. code:: json

{
"name":"myinter",
"onTouch":false,
"props":{
"newint":0,
"x":0
},
"script":"scripts/test.lua"
}

====================================
Creating and editing an Interactable
====================================

To create an Interactable, you just need to give it a name.

.. image:: ../../images/rpgpp-createinteractable.png
:width: 40%

Then you can edit its properties.

.. image:: ../../images/rpgpp-interactableview.png
:width: 40%

* **Display Name** - Sets a friendly name that will show up only in the editor.

* **Script** - Sets a Lua script that will define the Interactable's behaviour. THe script must have an interact() function.

* **On Touch?** - Whether this Interactable will trigger when the player collides with the interactable.

On top of that, you can add or remove your own properties for the Interactable.
2 changes: 2 additions & 0 deletions docs/guide/resourcetypes/prop.rst
Original file line number Diff line number Diff line change
Expand Up @@ -52,3 +52,5 @@ You can also change the image for this Prop.
Atlas Rect refers to the portion of the Prop Image, that will be shown.
Collision Rect refers to the position and size of the collision, relative to the top left corner of the Prop.
Both properties have X and Y for position and W and H for size.

You can also see a preview of your Prop under the properties. It will show how the Prop will actually look like in-game.
3 changes: 2 additions & 1 deletion docs/guide/typesindex.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,5 @@ Resource Types
resourcetypes/room
resourcetypes/actor
resourcetypes/dialogue
resourcetypes/prop
resourcetypes/prop
resourcetypes/interactable
Binary file added docs/images/rpgpp-createinteractable.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/images/rpgpp-editeddialogueline.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/images/rpgpp-editorlayout.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/rpgpp-interactableview.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/images/rpgpp-newdialogueline.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/images/rpgpp-projectmenu.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/rpgpp-projectsettings.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/rpgpp-projectsettingsbutton.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/images/rpgpp-propview.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
58 changes: 35 additions & 23 deletions include/actor.hpp
Original file line number Diff line number Diff line change
@@ -1,37 +1,40 @@
#ifndef _RPGPP_ACTOR_H
#define _RPGPP_ACTOR_H

#include "atlasTile.hpp"
#include "gamedata.hpp"
#include "saveable.hpp"
#include "tileset.hpp"
#include <raylib.h>

#include <array>
#include <functional>
#include <memory>
#include <nlohmann/json.hpp>
#include <raylib.h>
#include <vector>

#include "atlasTile.hpp"
#include "gamedata.hpp"
#include "interactable.hpp"
#include "saveable.hpp"
#include "tileset.hpp"

using json = nlohmann::json;

#define RPGPP_MAX_DIRECTION 7
/** Direction enum, representing an animation state. */
enum Direction : short {
RPGPP_DOWN_IDLE = 0, ///< Down Idle state.
RPGPP_DOWN = 1, ///< Down state.
RPGPP_UP_IDLE = 2, ///< Up Idle state.
RPGPP_UP = 3, ///< Up state.
RPGPP_LEFT_IDLE = 4, ///< Left Idle state.
RPGPP_LEFT = 5, ///< Left state.
RPGPP_RIGHT_IDLE = 6, ///< Right Idle state.
RPGPP_RIGHT = 7 ///< Right state.
RPGPP_DOWN_IDLE = 0, ///< Down Idle state.
RPGPP_DOWN = 1, ///< Down state.
RPGPP_UP_IDLE = 2, ///< Up Idle state.
RPGPP_UP = 3, ///< Up state.
RPGPP_LEFT_IDLE = 4, ///< Left Idle state.
RPGPP_LEFT = 5, ///< Left state.
RPGPP_RIGHT_IDLE = 6, ///< Right Idle state.
RPGPP_RIGHT = 7 ///< Right state.
};

/** The Actor class represents an Actor in the game's world.
* @see [Direction](Direction.md)
*/
class Actor : public ISaveable {
private:
private:
std::string sourcePath;
/** The used TileSet for this Actor's sprites. */
std::unique_ptr<TileSet> tileSet;
Expand All @@ -55,16 +58,19 @@ class Actor : public ISaveable {
Direction currentAnimation;
Direction lastAnimation;
bool tempAnimIsPlayed = false;
/** Whether this Actor has an Interactable. */
bool ownsInteractable = false;
/** A smart pointer, owning an Interactable. */
std::unique_ptr<Interactable> interactable;

public:
public:
/** Empty constructor. */
Actor() = default;
/** Constructor that takes a path to the .ractor file. */
Actor(const std::string &fileName);
/** Constructor that takes a TileSet, the atlas position of the tile to use,
* and the path to the TileSet. */
Actor(std::unique_ptr<TileSet> tileSet, Vector2 atlasPos,
std::string tileSetSource);
Actor(std::unique_ptr<TileSet> tileSet, Vector2 atlasPos, std::string tileSetSource);
/** Constructor that takes an ActorBin binary structure */
Actor(const ActorBin &bin);
/** Dump this Actor's data to a nlohmann::json object. */
Expand Down Expand Up @@ -114,6 +120,8 @@ class Actor : public ISaveable {
/** Get the collision rectangle of this Actor if it was moved by the
* velocity vector */
Rectangle getCollisionRect(Vector2 velocity) const;
/** Get the collision Rectangle of this Actor */
Rectangle getCollisionRect() const;
/** Get collision center point. */
Vector2 getCollisionCenter() const;
/** Add a frame in the chosen animation. The frame represents an atlas tile
Expand All @@ -125,8 +133,7 @@ class Actor : public ISaveable {
* TileSet. */
void setAnimationFrame(Direction id, int frameIndex, Vector2 atlasTile);
/** Add multiple frames to the chosen animation. */
void addAnimationFrames(Direction id,
const std::vector<std::vector<int>> &frames);
void addAnimationFrames(Direction id, const std::vector<std::vector<int>> &frames);
/** Temporarily play an animation */
void playAnimation(Direction id);
/** Check whether a temporary animation is playing */
Expand All @@ -139,13 +146,18 @@ class Actor : public ISaveable {
std::array<std::vector<Vector2>, 8> getAnimationsRaw() const;
/** Get a specific animation */
std::vector<Vector2> getAnimationRaw(Direction id) const;
/** Get the collision Rectangle of this Actor */
Rectangle getCollisionRect() const;
/** Set the Actor's collision Rectangle */
void setCollisionRect(Rectangle rect);
/** Whether this Actor has an Interactable. */
bool hasInteractable();
/** Set the 'ownsInteractable' flag. */
void setHasInteractable(bool value);
/** Get a pointer to this Actor's Interactable. */
Interactable *getInteractable();
/** Add an Interactable using an interactable file. */
void setInteractableFromPath(const std::string &interPath);
};

Vector2 calcActorTilePos(Vector2 newPosition, Vector2 worldTileSize,
TileSet *tileSet);
Vector2 calcActorTilePos(Vector2 newPosition, Vector2 worldTileSize, TileSet *tileSet);

#endif
9 changes: 4 additions & 5 deletions include/actorContainer.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,22 @@
#include "actor.hpp"

class ActorContainer {
private:
private:
std::map<std::string, std::unique_ptr<Actor>> actors;

public:
public:
/** Construct the actor container. */
ActorContainer();
/** Get the map itself */
std::map<std::string, std::unique_ptr<Actor>> &getActors();
/** Get an Actor with the specified name */
Actor &getActor(const std::string &name);
/** Add a new Actor with a name from the GameBin and an in-room name*/
void addActor(Vector2 pos, const std::string &typeName,
const std::string &roomName);
void addActor(Vector2 pos, const std::string &typeName, const std::string &roomName);
/** Remove an Actor */
void removeActor(const std::string &roomName);
/** Check whether an Actor with such an in-room name exists. */
bool actorExists(const std::string &roomName);
};

#endif // !_RPGPP_ACTORCONTAINER_H
#endif // !_RPGPP_ACTORCONTAINER_H
Loading
Loading