This project is slowly starting to come together, so I figured I'd make a post for it. I've had an idea for a JRPG for a long time, and I finally decided to start this year! To showcase the last few months of programming work, I've put together a little demo video out of placeholders:
I also wrote a blog post about this demo, though I don't discuss much aside from some of the smoke & mirrors involved currently
Over time, I'm probably going to share screenshots / videos / demos directly in the thread, and use the blog for deeper dives into the design and writing process.
...I'll also see about cleaning up this post later, once there's more to the thread. But for now that's it, I'm just excited at the progress I've made.
Untitled RPG Project
- Hugues Ross
- Party member
- Posts: 112
- Joined: Fri Oct 22, 2021 9:18 pm
- Location: Quebec
- Contact:
- Gunroar:Cannon()
- Party member
- Posts: 1142
- Joined: Thu Dec 10, 2020 1:57 am
Re: Untitled RPG Project
Noice. I'll be checking for the narrative of the game.
Last edited by Gunroar:Cannon() on Thu Mar 31, 2022 12:42 pm, edited 1 time in total.
-
- Party member
- Posts: 356
- Joined: Wed Jul 03, 2013 4:06 am
Re: Untitled RPG Project
Excellent work! I know how hard it can be to make that style of RPG...I mean, technically speaking you're not just making one game, you're making three or four. The battles are a different game, item management are, exploration is, etc. Very cool.
- Gunroar:Cannon()
- Party member
- Posts: 1142
- Joined: Thu Dec 10, 2020 1:57 am
Re: Untitled RPG Project
Hah, this is so true. I tried making an rpg a short while ago. The battle scene was completely different from the adventuring scene that they might as well be different.pauljessup wrote: ↑Thu Mar 31, 2022 12:41 pmI mean, technically speaking you're not just making one game, you're making three or four. The battles are a different game, item management are, exploration is, etc.
Re: Untitled RPG Project
Wow! You've got a surprising amount of mechanics going on for an early demo! Nice work!
Any code samples/ideas by me should be considered Public Domain (no attribution needed) license unless otherwise stated.
-
- Prole
- Posts: 1
- Joined: Mon Apr 04, 2022 2:51 am
- Contact:
Re: Untitled RPG Project
Thank you for your sharing, It is exactly what I was looking for
- Hugues Ross
- Party member
- Posts: 112
- Joined: Fri Oct 22, 2021 9:18 pm
- Location: Quebec
- Contact:
Re: Untitled RPG Project
It has been about a month, so I figured it's about time for a small update. This past month has been pretty slow, mostly focused on filling in gaps in the worldbuilding and mechanics (ie. gear, status effects, encounter maps, etc). With that said, one new thing I can show off is the initial work on map skills.
What are map skills?
Map skills are tools you use to interact with the world. Each character that joins the party brings their own unique skill, opening new paths for exploration and puzzle-solving as the story progresses. While I've only just started on these, I have a very early video showing 3 map skills in an initial functioning state:
The three skills currently implemented are:
Since this update's a little short, I figure I should give some indication of my long-term plans for the game. Currently, my target is a small vertical slice public demo. My hope for the demo is to ship a single dungeon from the game at close to final quality, in order to get a grip on the pipeline and validate the game's mechanics. My hope is to release this by the end of the year, though we'll see how it goes as things progress. Beyond that, I've currently broken the game up into 6 chapters and I'm hoping to release&update the game chapter-by-chapter. But of course, that's a ways off. This is a marathon, not a sprint.
What are map skills?
Map skills are tools you use to interact with the world. Each character that joins the party brings their own unique skill, opening new paths for exploration and puzzle-solving as the story progresses. While I've only just started on these, I have a very early video showing 3 map skills in an initial functioning state:
The three skills currently implemented are:
- Elemental, a context-sensitive interaction for casting elemental magic on certain parts of the environment.
- Chain, allowing the player to grab movable objects and shift them as they move. This not only allows objects to be pulled, but also enables limited movement of objects across gaps.
- Throw, for picking up, placing, and throwing lightweight objects.
Since this update's a little short, I figure I should give some indication of my long-term plans for the game. Currently, my target is a small vertical slice public demo. My hope for the demo is to ship a single dungeon from the game at close to final quality, in order to get a grip on the pipeline and validate the game's mechanics. My hope is to release this by the end of the year, though we'll see how it goes as things progress. Beyond that, I've currently broken the game up into 6 chapters and I'm hoping to release&update the game chapter-by-chapter. But of course, that's a ways off. This is a marathon, not a sprint.
- Hugues Ross
- Party member
- Posts: 112
- Joined: Fri Oct 22, 2021 9:18 pm
- Location: Quebec
- Contact:
Re: Untitled RPG Project
May's just about over, so it's time for another update. Like April, this was another month of laying foundations. But unlike April, I have a little bit more to show this time.
Game Flow
One slightly boring but very important addition is all of the scaffolding needed for the main menu. This includes letting the game track and adjust its state, which means that getting a 'game over' can actually take the user back to the menu to try again (or load a save, once I have those)... before then, losing would simply close the game!
Sprites and better Movement
A more interesting addition is sprite animations. I added a basic animation system that makes it very simple to animate existing elements in the game. It's not applied everywhere yet (there's no combat animations yet, for instance), but walking around is a lot nicer now that you can actually see characters walk. Even with placeholder sprites, it definitely adds something:
Another detail you may or may not have noticed, movement is a lot smoother than it was in my first demo. I reworked movement and collision a bit to allow some degree of sliding off solid surfaces instead of just stopping, and makes the controls feel a lot better!
Cutscene Scripting
One last important addition to the code is a system for cutscenes! This is definitely needed for an RPG like this, and the new system is pretty nice. By giving it a relatively simple script like this:
...we get a cutscene:
That's all for this month! Things are really starting to come together on the tech side, I don't think it'll be too much longer before I can start on real game content instead of test data and placeholders.
Game Flow
One slightly boring but very important addition is all of the scaffolding needed for the main menu. This includes letting the game track and adjust its state, which means that getting a 'game over' can actually take the user back to the menu to try again (or load a save, once I have those)... before then, losing would simply close the game!
Sprites and better Movement
A more interesting addition is sprite animations. I added a basic animation system that makes it very simple to animate existing elements in the game. It's not applied everywhere yet (there's no combat animations yet, for instance), but walking around is a lot nicer now that you can actually see characters walk. Even with placeholder sprites, it definitely adds something:
Another detail you may or may not have noticed, movement is a lot smoother than it was in my first demo. I reworked movement and collision a bit to allow some degree of sliding off solid surfaces instead of just stopping, and makes the controls feel a lot better!
Cutscene Scripting
One last important addition to the code is a system for cutscenes! This is definitely needed for an RPG like this, and the new system is pretty nice. By giving it a relatively simple script like this:
Code: Select all
context:show_dialogue("course/entry.lua")
local player = context:get_player()
context:fade_out(0.2):await(false)
context:move_to(player, 1, 0, true)
context:change_map("course.lua", 10, 29)
local npc = context:get_actor("dude")
context:fade_in(0.2):await(false)
context:move_to(player, 0, -1, true)
context:show_dialogue("course/welcome_sign.lua")
context:move_to(npc, 1, 0, true)
context:wait(0.20)
context:turn_towards(npc, 180)
That's all for this month! Things are really starting to come together on the tech side, I don't think it'll be too much longer before I can start on real game content instead of test data and placeholders.
- Hugues Ross
- Party member
- Posts: 112
- Joined: Fri Oct 22, 2021 9:18 pm
- Location: Quebec
- Contact:
Re: Untitled RPG Project
It's been about a month, so I think it's time for another update! Unfortunately I didn't get as much done as I wanted this month, because I developed carpal tunnel syndrome early on and went on hiatus for few weeks in order to recover. I'm starting to feel better so development has resumed at a very slow pace, but obviously I didn't finish everything I was planning on. For now I'm just taking my time, better to work slowly for a while than to jump back in and have to stop entirely.
However, before all that happened I did get some things done. let's take a look!
A Big AI Revamp
In the original demo video at this start of this thread, the enemies don't have AI so much as a list of moves that they randomly select from. That may be enough for a very simple encounters, but for boss fights and more complex enemies there needs to be something more complex. So, I added 3 new features to accommodate that:
Behavior Trees
The first thing I added was a simple behavior tree system. It supports a small set of useful patterns, like conditional branches and performing actions in sequence over the course of multiple turns. I don't want to load this post with too many details, so instead here are a few examples showcasing the kind of flexibility I have:
Attack pattern: Alternate between attacking and using a random special attack
Attack pattern: Perform special attacks in order, randomly interspersing the pattern with regular attacks
Attack pattern: Randomly select a regular or special attack. When health gets low, change to a different special attack
This is a good start, but what if we want monsters to use attacks in response to what the player's doing?
Reactions
Reactions are special behavior trees that sit separate from the monster's main AI. These allow the monster to immediately respond when a hit with an attack or when the monster dies. It's not uncommon to have counters and revenge moves in turn-based games, so I felt it would be useful to make the system available to any actor in a fight. In theory this can also work for party members, though right now it's only being used for monsters.
Unlike regular moves, reactions are called immediately after the attack resolves and any attack that comes from them takes priority over anything that was already queued. They also only trigger if the original attack that caused them wasn't a reaction... mostly to avoid the possibility of two actors reacting to each other forever.
Anyway, these are nice but you don't usually want them all the time... Usually you want counters to come with characters changing their stance or form to indicate that attacking is a bad idea. This could be accomplished using status effects, but I elected not to do that because it could be a mess to manage. I also could've used the old-school RPG trick of replacing a character with a different one and copying over certain stats, but historically that trick has caused a lot of bugs in various games. So insteaaaad...
States
...I added states. States are very simple, they're basically a set of overrides for character properties like their appearance, stats, AI, etc. When a state change is triggered, the actor refreshes its properties and takes any values in the state over those in the base stat-block. That way, the monster stays the same and only replaces the values that need to change. It also means that if I add new features to monsters, states can automatically take advantage of them.
With all that in place, I'm able to produce some fairly complex interactions and strategies for the AI. Nothing on the level of what you'd need to mimic a human opponent, but enough to present interesting and unique challenges to the player. And that's exactly what I want!
The New FX System
One more thing that I started prior to my health issues was an FX system for the game. I want to accomplish more than what simple pre-rendered effects can give me, so I set up a more concrete system with various forms of animation, tweens, and particle effects. In the long term I also want the ability to assign customs shaders to parts of effects and fullscreen post-processing as well, but I'm not there yet!
Right now I'm only using the initial version of the system for attacks attack animations in combat, but eventually I'll be using it on the map in cutscenes and pretty much anywhere I need it. I also want to add a way to integrate existing values and objects in a scene into FX to allow for things like a projectile that moves from one object to another, or a particle effect that accompanies a certain sprite animation. I also really need to make some kind of editor for these, as the animation data can get _really_ complex and verbose. But again, health issues... we'll get there eventually.
Putting it Together
To demonstrate of what I discussed above, here's a little video:
This is the same mimic fight from the first post, but with AI adjustments and combat effects. It plays out a little bit like a typical 1st boss of a Final Fantasy game--it sometimes closes its box, and counters with a powerful attack if disturbed. You can also see a status effect in this video, poison. I don't remember if I mentioned adding support for those in the past, but they exist.
However, before all that happened I did get some things done. let's take a look!
A Big AI Revamp
In the original demo video at this start of this thread, the enemies don't have AI so much as a list of moves that they randomly select from. That may be enough for a very simple encounters, but for boss fights and more complex enemies there needs to be something more complex. So, I added 3 new features to accommodate that:
Behavior Trees
The first thing I added was a simple behavior tree system. It supports a small set of useful patterns, like conditional branches and performing actions in sequence over the course of multiple turns. I don't want to load this post with too many details, so instead here are a few examples showcasing the kind of flexibility I have:
Attack pattern: Alternate between attacking and using a random special attack
Code: Select all
ai.sequence {
"fight.lua",
ai.shuffle {
"special_attack_1.lua",
"special_attack_2.lua",
},
}
Code: Select all
ai.shuffle {
"fight.lua",
ai.sequence {
"special_attack_1.lua",
"special_attack_2.lua",
},
}
Code: Select all
ai.shuffle {
"fight.lua",
ai.condition (low_hp,
"special_attack_1.lua",
"special_attack_2.lua",
),
}
Reactions
Reactions are special behavior trees that sit separate from the monster's main AI. These allow the monster to immediately respond when a hit with an attack or when the monster dies. It's not uncommon to have counters and revenge moves in turn-based games, so I felt it would be useful to make the system available to any actor in a fight. In theory this can also work for party members, though right now it's only being used for monsters.
Unlike regular moves, reactions are called immediately after the attack resolves and any attack that comes from them takes priority over anything that was already queued. They also only trigger if the original attack that caused them wasn't a reaction... mostly to avoid the possibility of two actors reacting to each other forever.
Anyway, these are nice but you don't usually want them all the time... Usually you want counters to come with characters changing their stance or form to indicate that attacking is a bad idea. This could be accomplished using status effects, but I elected not to do that because it could be a mess to manage. I also could've used the old-school RPG trick of replacing a character with a different one and copying over certain stats, but historically that trick has caused a lot of bugs in various games. So insteaaaad...
States
...I added states. States are very simple, they're basically a set of overrides for character properties like their appearance, stats, AI, etc. When a state change is triggered, the actor refreshes its properties and takes any values in the state over those in the base stat-block. That way, the monster stays the same and only replaces the values that need to change. It also means that if I add new features to monsters, states can automatically take advantage of them.
With all that in place, I'm able to produce some fairly complex interactions and strategies for the AI. Nothing on the level of what you'd need to mimic a human opponent, but enough to present interesting and unique challenges to the player. And that's exactly what I want!
The New FX System
One more thing that I started prior to my health issues was an FX system for the game. I want to accomplish more than what simple pre-rendered effects can give me, so I set up a more concrete system with various forms of animation, tweens, and particle effects. In the long term I also want the ability to assign customs shaders to parts of effects and fullscreen post-processing as well, but I'm not there yet!
Right now I'm only using the initial version of the system for attacks attack animations in combat, but eventually I'll be using it on the map in cutscenes and pretty much anywhere I need it. I also want to add a way to integrate existing values and objects in a scene into FX to allow for things like a projectile that moves from one object to another, or a particle effect that accompanies a certain sprite animation. I also really need to make some kind of editor for these, as the animation data can get _really_ complex and verbose. But again, health issues... we'll get there eventually.
Putting it Together
To demonstrate of what I discussed above, here's a little video:
This is the same mimic fight from the first post, but with AI adjustments and combat effects. It plays out a little bit like a typical 1st boss of a Final Fantasy game--it sometimes closes its box, and counters with a powerful attack if disturbed. You can also see a status effect in this video, poison. I don't remember if I mentioned adding support for those in the past, but they exist.
Who is online
Users browsing this forum: randomnovice and 3 guests