New to GM studio: What should I do next?🤔

Hey! I'm relatively new to Game Maker Studio and I wanna talk about my "game" I'm making. In reality it's just a test so I can get my bearings. I was wonder what direction I should take it in. I wanna make a super simple JRPG to start and then continue making small projects from there. I've already started with a little walking simulator and some basic collision but that's all. Now I'm wondering what would be a good next step. Im a visual learner so if you know of any good tutorials for newbies like myself id be very grateful. I've seen Game Maker Rob's and some of Heartbeast's videos and they tend. I just need some tips basically so I can go down the right path. Basically what should I do next?

This is the video I used first to create the grid movement

P.S I added this collision code and I was wondering if someone could explain it😅it works I kinda just wanna know what it means in actual english:

GML:
if ( keyboard_check(vk_right) && !moving ) {
    if place_meeting(x+32,y,obj_Wall){}else
    {
        moving = true;
        target_x += 32;
        image_speed = 0.3;
    }
}
 

jo-thijs

Member
Hey! I'm relatively new to Game Maker Studio and I wanna talk about my "game" I'm making. In reality it's just a test so I can get my bearings. I was wonder what direction I should take it in. I wanna make a super simple JRPG to start and then continue making small projects from there. I've already started with a little walking simulator and some basic collision but that's all. Now I'm wondering what would be a good next step. Im a visual learner so if you know of any good tutorials for newbies like myself id be very grateful. I've seen Game Maker Rob's and some of Heartbeast's videos and they tend. I just need some tips basically so I can go down the right path. Basically what should I do next?

This is the video I used first to create the grid movement
Maybe try the following:
1) Add interactable objects, such as pushable box. Make it so you cannot push a box into a wall or another box and make it so you cannot push multiple boxes at the same time.
2) Add more interactable objects such as keys, locks, switches and doors with several colors.
Focus on making something that works first, then focus on optimizing your system such that adding a new color doesn't require much effort.
3) Create an inventory, either as part of the HUD or as a menu that you open by pressing a button.
Make it show which collectables (such as keys) you've collected so far.
4) Add NPCs to talk with.
Make something simple first, that shows text when you face the NPC and press the action button, freezes the player while the text is shown and waits until the action button is pressed again.
Then make it so the NPC has multiple dialogues in succession, so you first see the first text, then after pressing the action key, you see the second text and then after pressing it again, the player unfreezes.
Then make a basic dialogue box to show the text in and make it gradually fancier over time, as you start getting more comfortable with GML.
Finally, make it so you can create new NPCs and new dialogues without much effort.
5) Split the world up in several rooms and make it so the player can teleport between them in a consistent way.
For example, add two houses or caves and design the interior of the houses/caves in different rooms.
When entering one house/cave and leaving them afterwards, the player must return to the initial room at the position of the house exit.
Also include a house with multiple entrences/exits.
6) Create a basic battle system. This can be in a different room that is initially totally separate and inaccessible from the other overworld part of the game.
Afterwards, make a hostile NPC in the overworld that starts the battle when touched
and make it so that if the player wins the battle, they return to the overworld at the same position they touched the hostile NPC, but the hostile NPC got destroyed.
7) Create a simple title screen for your game with an option to start a new game, continue a previous game (initially disabled), change options (initially disabled) or see credits.
8) Create a simple save/load system for your game where there are some beds throughout the overworld where you can save progress (save your collectables, save your location and save which hostile NPCs got destroyed) and load a game from the title screen.
Start with 1 save slot and later extend the system to support multiple save slots.

Now, if you can manage to do all of the above, that would already be an incredible lot for someone who's new to GameMaker.
Whenever you get stuck on trying to implement a feature, go ask for help here on the forums.

Don't forget to consult the manual either!
For GM:S 1.4 (the GameMaker version used in the tutorial you followed), definitely have a read through this,
so you know about variable scopes, sstrings, arrays, loops, the with-construction, some basic operations and keywords, scripts, the distinction between instances and objects, ...
And also have a read through this, to have a basic understanding of GameMaker parent system to reduce code duplication.

P.S I added this collision code and I was wondering if someone could explain it😅it works I kinda just wanna know what it means in actual english:

GML:
if ( keyboard_check(vk_right) && !moving ) {
if place_meeting(x+32,y,obj_Wall){}else
{
moving = true;
target_x += 32;
image_speed = 0.3;
}
}
The first line:
GML:
if ( keyboard_check(vk_right) && !moving ) {
reads as "If the right arrow key on the keyboard is held down and we're not moving, then perform the code below".
The &&-operator is a logical AND. It checks whether what's left of it is true and what's right from it is true.
The !-operator is a logical NOT. It checks whether what's right from it is false.
The vk_right is a GameMaker built-in constant that represents the right arrow key on the keyboard.
The keyboard_check function is a function that checks if the key you pass to it is currently being held down.
And "moving" is a variable that you defined.

The second line:
Code:
    if place_meeting(x+32,y,obj_Wall){}else
reads as "If there is no wall tile directly to the right of this instance, then perform the code below".
The function place_meeting(X, Y, OBJ) checks if the current instance would overlap in space with an instance of OBJ if the current instance were to be placed at position (X, Y).
In a grid based system where cells have a width of 32 pixels, the place (x + 32, y) means 1 tile to the right of the current position.
The "{}else" construction is a convoluted way of simulating a logical NOT.
It says, if there is a wall 1 tile to the right of this instance, execute whatever code is inbetween "{}", which is no code.
Otherwise, execute the code below.

The fourth line:
GML:
        moving = true;
reads as "Mark this instance as moving".

The fith line:
GML:
        target_x += 32;
reads as "Increase the target X position by 32 pixels".

The sixth line:
Code:
        image_speed = 0.3;
reads as "Make the sprite animation run at 3 images per 10 frames".

In resume: If the player holds down the right arrow key and they can move to the right, make them move 1 tile to the right with an animation speed of 0.3 images per frame.

I hope this helps and if you have any questions, feel free to ask them!
 

FrostyCat

Member
The next thing you should learn to do is to read the code yourself, without others explaining it to you. That is more useful in the long run than more tutorials on implementing genre-specific elements. If you can't even manage something only 7 lines long on your own, something is seriously wrong with your foundations.

Start by familiarizing yourself with the procedures of tracing. Then read the first 14 articles of the Manual's GML Overview section, which tell you the basic grammar and constructs of GML. Then you can use the Manual's index tab to look up the meanings of built-in functions and variables whenever you find them in other resources.
 
Maybe try the following:
1) Add interactable objects, such as pushable box. Make it so you cannot push a box into a wall or another box and make it so you cannot push multiple boxes at the same time.
2) Add more interactable objects such as keys, locks, switches and doors with several colors.
Focus on making something that works first, then focus on optimizing your system such that adding a new color doesn't require much effort.
3) Create an inventory, either as part of the HUD or as a menu that you open by pressing a button.
Make it show which collectables (such as keys) you've collected so far.
4) Add NPCs to talk with.
Make something simple first, that shows text when you face the NPC and press the action button, freezes the player while the text is shown and waits until the action button is pressed again.
Then make it so the NPC has multiple dialogues in succession, so you first see the first text, then after pressing the action key, you see the second text and then after pressing it again, the player unfreezes.
Then make a basic dialogue box to show the text in and make it gradually fancier over time, as you start getting more comfortable with GML.
Finally, make it so you can create new NPCs and new dialogues without much effort.
5) Split the world up in several rooms and make it so the player can teleport between them in a consistent way.
For example, add two houses or caves and design the interior of the houses/caves in different rooms.
When entering one house/cave and leaving them afterwards, the player must return to the initial room at the position of the house exit.
Also include a house with multiple entrences/exits.
6) Create a basic battle system. This can be in a different room that is initially totally separate and inaccessible from the other overworld part of the game.
Afterwards, make a hostile NPC in the overworld that starts the battle when touched
and make it so that if the player wins the battle, they return to the overworld at the same position they touched the hostile NPC, but the hostile NPC got destroyed.
7) Create a simple title screen for your game with an option to start a new game, continue a previous game (initially disabled), change options (initially disabled) or see credits.
8) Create a simple save/load system for your game where there are some beds throughout the overworld where you can save progress (save your collectables, save your location and save which hostile NPCs got destroyed) and load a game from the title screen.
Start with 1 save slot and later extend the system to support multiple save slots.

Now, if you can manage to do all of the above, that would already be an incredible lot for someone who's new to GameMaker.
Whenever you get stuck on trying to implement a feature, go ask for help here on the forums.

Don't forget to consult the manual either!
For GM:S 1.4 (the GameMaker version used in the tutorial you followed), definitely have a read through this,
so you know about variable scopes, sstrings, arrays, loops, the with-construction, some basic operations and keywords, scripts, the distinction between instances and objects, ...
And also have a read through this, to have a basic understanding of GameMaker parent system to reduce code duplication.


The first line:
GML:
if ( keyboard_check(vk_right) && !moving ) {
reads as "If the right arrow key on the keyboard is held down and we're not moving, then perform the code below".
The &&-operator is a logical AND. It checks whether what's left of it is true and what's right from it is true.
The !-operator is a logical NOT. It checks whether what's right from it is false.
The vk_right is a GameMaker built-in constant that represents the right arrow key on the keyboard.
The keyboard_check function is a function that checks if the key you pass to it is currently being held down.
And "moving" is a variable that you defined.

The second line:
Code:
    if place_meeting(x+32,y,obj_Wall){}else
reads as "If there is no wall tile directly to the right of this instance, then perform the code below".
The function place_meeting(X, Y, OBJ) checks if the current instance would overlap in space with an instance of OBJ if the current instance were to be placed at position (X, Y).
In a grid based system where cells have a width of 32 pixels, the place (x + 32, y) means 1 tile to the right of the current position.
The "{}else" construction is a convoluted way of simulating a logical NOT.
It says, if there is a wall 1 tile to the right of this instance, execute whatever code is inbetween "{}", which is no code.
Otherwise, execute the code below.

The fourth line:
GML:
        moving = true;
reads as "Mark this instance as moving".

The fith line:
GML:
        target_x += 32;
reads as "Increase the target X position by 32 pixels".

The sixth line:
Code:
        image_speed = 0.3;
reads as "Make the sprite animation run at 3 images per 10 frames".

In resume: If the player holds down the right arrow key and they can move to the right, make them move 1 tile to the right with an animation speed of 0.3 images per frame.

I hope this helps and if you have any questions, feel free to ask them!
Wow! Thank you so much! Imma have to work my ass off to be any good but that's something I plan on doing. Appreciate the push in the right direction.
 
The next thing you should learn to do is to read the code yourself, without others explaining it to you. That is more useful in the long run than more tutorials on implementing genre-specific elements. If you can't even manage something only 7 lines long on your own, something is seriously wrong with your foundations.

Start by familiarizing yourself with the procedures of tracing. Then read the first 14 articles of the Manual's GML Overview section, which tell you the basic grammar and constructs of GML. Then you can use the Manual's index tab to look up the meanings of built-in functions and variables whenever you find them in other resources.
Thank you aswell! Looking at the manuals seems like a no brainier 😅 one my lil mind did not think of quite frankly haha. I'll make sure to do that 👍
 
Top