Flint Grip Hat S sprite How Did You Lean Into Making A Fully Fledged RPG?

Somone who wants to make an RPG not now but in the future

sprite forkes

Howdy forum,

I’m a “beginner”, I started programming about 2020 but only now have I started taking it seriously, and I was wondering how did you lean into making your first big RPG?

I’ve read the Brainstorm Central post and that was enlightening and made me work on a Pong project, I actually completed it! But, now I don’t know how to continue, should I jump into a smaller RPG and try my hand at it, honestly I tried this approach and bounced off hard after I had to figure out party follower system, or should I still work on small arcadey projects?

I’ve never talked on a forum before so sorry if this is too long, but I hope I can get some guidance on a good path to follow.

Side Note: If any you guys have a party follower system that works well in Godot I’m all ears cause everything I’ve found is really bad or hard to follow.

Mystic Knight of the Octo Vinctum

  • Cadencefest
  • Very Hot Winterfest Gold
  • Very Hot Winterfest Staff
  • April Fools 2024

Hello! An RPG was not something I made earlier on. I worked on other random, little projects in GameMaker for about 2 years until I played Final Fantasy VI and decided, “Hey, I wanna make one of these!”

It might be a good thing to make a few tiny things in Godot before you start off. Ultimately, I think the best thing would be to be familiar with as many programming concepts as possible, make sure you know for loops, arrays, switch statements, and storing/calling functions as variables. Also, you want to become as comfortable with how to do things in Godot as you can. With these two things, you can basically build anything you want.

(What I call Objects from GameMaker are generally called Nodes in Godot, keep in mind. My examples use GameMaker because I’m not as familiar with Godot yet.)

For an RPG, you’re going to need the following things:

- Some global objects (as in, always loaded in game) to hold character data. I usually create a seperate object for each party member with all their stats as variables, and I have one big object “obj_ram” that holds references to these instances.


//obj_ram’s initialization code

ness = instance_create(x, y, obj_Ness); //Create an instance of the ness player data object
paula = instance_create(x, y, obj_Paula); //Diddo

show_message(ness.name); //Print Ness’s name to a window

party0 = ness; //Create an array to store references to these party member instances.
//This way, you can refer specifically to whoever’s in each slot as opposed to having to reference each character directly.
//Also, you can have for loops easily iterate through every character in the party when you want to do things like damage the whole party at once.

party1 = paula; //Same thing
party2 = -1; //I like to use -1 to indicate that a party member slot is empty.
//If you do this, remember to check if a slot is empty before accessing it!
party3 = -1;

//Example

show_message(“Ness and friends shared a pizza!”);

for (var i = 0; i < 4; i++)
{
tmp_char = party[i]; //Get the character in slot i.
if (tmp_char != -1) //Is there a character in this slot?
{
tmp_char.hp += 10; //There is? Cool! Increases HP by 10.
if (tmp_char.hp > tmp_char.max_hp) //Check to see if HP goes over max, if it does, cap it off.
{tmp_char.hp = tmp_char.max_hp;}
}
}

- A “player” object for the overworld, moves when you press keys, and checks for collisions with other objects and tilemaps. One use of this is, you can get random encounters by first passing obj_ram a number of steps to the next encounter (like, steps_to = 10;), then have code execute every time obj_player takes a step so that steps_to decreases by 1, and if steps_to == 0, start a battle.

- Tilesets and tilemaps to draw your game maps. Typically, you’ll draw a tileset image containing every tile you want to use in your game worlds (Like, a grass tile, an ocean tile, a mountain tile, a forest tile, …). Then, you’ll load it in Godot as a Tileset. You should be able to place a Godot TileMap Node in your scene, give the TileMap your TIleset, then you can draw tiles into the scene for your player to walk on.

- Menus! From my little Godot experience, I found it best to create a menu as its own seperate scene, which needs three other objects.

  • The box/window, as a Sprite2D
    * The box’s text, a Label that draws text using a font.
    * A cursor, a little Sprite2D that moves up and down the menu when you press keys, closes the menu (destroys all the instances, or maybe just removes the menu scene) when you press a button.

- Finally, you need to set up a loop for the game’s battles! You’ll probably want all of your battle-specific objects to be in their own Scene. That way, you can just have obj_ram create an instance of the Battle Scene, and everything needed for battle will then automatically be available. Then, you’ll want some object that controls the order of events, which is a loop of the following:

  • Open the commands menu, so the player can pick “Fight”, “Guard”, “Flee”, or whatever. Have the battle control object in an inner loop that iterates through the array of party members, opening the menu each time and using the value picked by the cursor to assign a move to the current party member.
    * Assign party members and enemies to a turn_order array that determines the order that characters get to take their actions in battle. You can be lazy and go in index order, or you can sort the array based on characters’ Speeds, so faster characters go before slower character.
    * Iterate through the turn_order, having code to execute each character’s move’s code, and play animations on screen if necessary. This is a bit complex to get into, and depends on how you’ve implemented characters and moves.
    * Finally, add checks to see if all party members are dead, or if all enemies are dead, and break out of the battle loop if either of these conditions are met.

I hope you can find something useful out of this. I’ve spent the past couple of years building basically nothing but RPG stuff, so I can provide more details on how to implement some of this if you want.

“Where are you going, soldier?! Get back to the battle!”
– Some Battlefront II Clone
Check out my own JRPG: Octo Vinctum

sprite forkes

Thank you for responding. I guess my biggest question is what to do next, right now I’m working on a puzzle platformer and that’s been fun and I’ll probably do that for a while but I don’t view it as what I ultimately want to do. What’re some good resources you used to get familiar with coding concepts?

Mystic Knight of the Octo Vinctum

  • Cadencefest
  • Very Hot Winterfest Gold
  • Very Hot Winterfest Staff
  • April Fools 2024

What to do next…? You could dive into the RPG, but if you do that, be prepared to face a very long, slow development pace, as you’ll likely have to learn something new every time you want to add something. If you don’t want to do that yet, I might suggest trying to make something very small, fun, and simple. If you want, you could even start by building RPG elements one at a time, like say “I’m going to make a textbox that I can open and close with code” or, “I’ll make a character that walks around on the screen.”

I learned programming by taking classes, as well as a ton of practice in game-making and small projects on my own. But, there should be an abundance of resources online for you to learn from instead. At a bare minimum for Godot, you should at least be familiar with its language basics: ( https://docs.godotengine.org/en/stable/tutorials/scripting/gdscript/gdscript_basics.html )

“Where are you going, soldier?! Get back to the battle!”
– Some Battlefront II Clone
Check out my own JRPG: Octo Vinctum

sprite forkes

I kind of want to wait honestly. I tried brute forcing it and working on my dream game first and I liked it but you can just tell it’s not the way it should be done and but I don’t how to say I’m ready. I have a very black and white mind so I guess for me it’s like either I work on it or I never do. I should relax and just go with flow more but it’s difficult.

Thank you though for taking the time to answer my questions. It’s cool to see that someone responded.