Great tutorial series as always Ben. Thanks for sharing. As for the stuttering, it happens because you are moving in fractions, yet trying to do this against tiles requiring integers. Shaun highlighted the problem recently in his video too. The solution is to add this code before your movement code in order to round the movement per step. Also define the variables x_speed_fraction and y_speed_fraction in create of course. //reapply the fractions x_speed_ += x_speed_fraction; y_speed_ += y_speed_fraction; //store and remove the fractions x_speed_fraction = x_speed_ - (floor(abs(x_speed_)) * sign(x_speed_)); x_speed_ -= x_speed_fraction; y_speed_fraction = y_speed_ - (floor(abs(y_speed_)) * sign(y_speed_)); y_speed_ -= y_speed_fraction;
From 10:05 the script needs to be wrapped in a function. function grid_place_meeting(_object, _grid) { var _top_right = _grid[# (_object.bbox_right-1) div CELL_WIDTH, _object.bbox_top div CELL_HEIGHT] == VOID; var _top_left = _grid[# _object.bbox_left div CELL_WIDTH, _object.bbox_top div CELL_HEIGHT] == VOID; var _bottom_right = _grid[# (_object.bbox_right-1) div CELL_WIDTH, (_object.bbox_bottom-1) div CELL_HEIGHT] == VOID; var _bottom_left = _grid[# _object.bbox_left div CELL_WIDTH, (_object.bbox_bottom-1) div CELL_HEIGHT] == VOID; return _top_right || _top_left || _bottom_right || _bottom_left; } Had me stumped for a while, but that's the life of a programmer I guess.
If you are bothered by the gap in some walls and you want to close the border, you can do this: Create a 1 x 9 sprite with the border color, set the origin to 16x 9 and at the object level in the draw event, copy this: For (var _y =1; _y < height_-1; _y++) { For (var _x =1; _x < width_-1; _x++){ If (grid_[# _x, _y] != floor) and (grid_[# _x +1, _y] == floor) and (grid_[# _x +1, _y -1] != floor) and (grid_[# _x , _y -1] != floor){ Draw_sprite_ext((sprite name), 0, _x*cell_width+16, _y*cell_height,-1,1,0,c_white,1); For (var _y =1; _y < height_-1; _y++) { For (var _x =1; _x < width_-1; _x++){ If (grid_[# _x, _y] != floor) and (grid_[# _x -1, _y] == floor) and (grid_[# _x -1, _y -1] != floor) and (grid_[# _x , _y -1] != floor){ Draw_sprite_ext((sprite name), 0, _x*cell_width+16, _y*cell_height,1,1,0,c_white,1); Pd: there could be a better way to do that but i am starting at programming
Excellent tutorial. My solloution to the issue with the border was to make a sprite 32x32 and make it a solid color and enable 9 slice(you can also just make it invisible after you place it by putting it on another instance layer) Then create a object from that sprite and I named mine "o_walls" I placed one on the top left corner and then proceeded to outline the entire edge of the map that I did not want to go past. In the player step event, I modified the code so that it could also detect the walls. Here is the code as I made it. It could also be added as another variable in the script. if x_spd > 0 { image_xscale = 1; if grid_place_meeting(self, o_level.grid_) || place_meeting(x+ x_spd,y, o_walls) { x = bbox_right&~ (CELL_WIDTH - 1) x-= bbox_right -x; x_spd = 0; } } else if x_spd < 0 { image_xscale = -1; if grid_place_meeting(self, o_level.grid_) || place_meeting(x- x_spd,y, o_walls) { x = bbox_left&~ (CELL_WIDTH - 1) x+= CELL_WIDTH+ x- bbox_left; x_spd = 0; } } y += y_spd; if y_spd > 0 { if grid_place_meeting(self, o_level.grid_) || place_meeting(x,y+ y_spd, o_walls) { y = bbox_bottom&~ (CELL_HEIGHT - 1) y-= bbox_bottom -y; y_spd = 0; } } else if y_spd < 0 { if grid_place_meeting(self, o_level.grid_) || place_meeting(x,y- y_spd, o_walls) { y = bbox_top&~ (CELL_HEIGHT - 1) y+= CELL_HEIGHT+ y- bbox_top; y_spd = 0; } }
The issue with the player bouncing off of the right and downwards walls is related to acceleration being a decimal, it works fine when the acceleration value is a whole number
Wow great tutorial. Only recommendation is to go over the algorithm visually before you program so some of us may try to do it without tutorial first. I like how you got us started but its up to us to figure the rest out. I changed some stuff to add holes in the ground and random start position instead of center. Just need to add stairs and bad guys. I'm thinking of having ability to generate levels from a text file. Lets say you have a dungeon with 10 floors. You want the 5th to have a diffrent exit condition like killing bad guys instead of finding stairs or the 10th floor being a randomly generated but open area with a boss fight. Not really sure what I wan't to do but I think water would be cool to :). Again thanks for the awsome tutorial.
So I watched this series about generating random dungeons but unfortunately to spawn enemies into the grid I needed to watch the older series which were done with gms1 and so i tried but it gives me this error message, that I need to define grid_path...I actually defined it but its not enough for gms2...can anyone help me, pls?
Hey @HeartBeast so I've been following your tutorial but for some reason the character is hitting invisible walls that are in the room itself. I'm not entirely sure what went wrong. If you had a piece of advice that would be amazing.
Great tutorial but how can i do a collision line ? I tried to make an object with a variant image_xscale, but as the sprite become bigger than a cell width it does not work well
I found something, I did the best i could, it works but it's not clean //Scale and angle image_angle = point_direction(target.x,target.y,obj_player.x,obj_player.y) image_xscale = clamp(point_distance(target.x,target.y,obj_player.x,obj_player.y),-16,16)
//If len is bigger than the distance if len+16 > point_distance(target.x,target.y,obj_player.x,obj_player.y) { // If there was a collsion if coll { //Collision set to true target.wallfront = true } else { //Collision set to false target.wallfront = false } //Reset the collsion and the len coll = false len = 0; }
//Add 16 to len and check if there is a collsion x = target.x+lengthdir_x(len,image_angle) y = target.y+lengthdir_y(len,image_angle) if grid_place_meeting(self,obj_level.grid_) { coll = true }
delayed post, but just found this great tutorial. For some reason, the clean up event with ds_grid_destroy is not working - there is still memory bleed every time I restart. I can't for the life of me figure out why - any thoughts?
damn, I'm having the same issue. I've checked over my code to make sure it matches over and over but I still get the error: ############################################################################################ ERROR in action number 1 of Create Event for object : Variable .bbox_top(23, -2147483648) cannot be resolved. at gml_GlobalScript_grid_place_meeting (line 10) - var _top_right = _grid[# (_object.bbox_right-1) div CELL_WIDTH, _object.bbox_top div CELL_HEIGHT] == VOID; ############################################################################################ gml_GlobalScript_grid_place_meeting (line 10)
Here is the correction ///@function function grid_place_meeting(_object, _grid) ///@arg object ///@arg grid function grid_place_meeting(_object, _grid){ var _top_right = _grid[# (_object.bbox_right-1) div CELL_WIDTH, _object.bbox_top div CELL_HEIGHT] == VOID; var _top_left = _grid[# _object.bbox_left div CELL_WIDTH, _object.bbox_top div CELL_HEIGHT] == VOID; var _bottom_right = _grid[# (_object.bbox_right-1) div CELL_WIDTH, (_object.bbox_bottom-1) div CELL_HEIGHT] == VOID; var _bottom_left = _grid[# _object.bbox_left div CELL_WIDTH, (_object.bbox_bottom-1) div CELL_HEIGHT] == VOID; return _top_right || _top_left || _bottom_right || _bottom_left; }
Just to be sure: ds_grid_create() creates a 2D matrix? Is it just that or is there some specific gamemaker thing related to it? 11:32 why the -1 for right but not for top? Also, how do you make it so the player doesn't spawn in an empty/VOID tile?
There's a typo in his o_level:Create function. Change the following lines: var _player_start_x = _controller_x * CELL_WIDTH + CELL_WIDTH / 2; var _player_start_y = _controller_y * CELL_HEIGHT + CELL_HEIGHT / 2;
Hey guys, I was wondering if I could get some help. I basically tried using this tutorial and did. it worked, but then I wanted the room size to be random and when I created on ubject that set the room size to a random integer using room_set_width(r_one,irandom_range(1024,2048)) and room_set_height(r_one,irandom_range(1024,2048)), but then it would create the walls and the shadows but not draw the wall tiles. I was wondering if I could get some help on this. Here is the code for the object that creates the o_level object: room_set_width(r_one,irandom_range(1024,2048)) room_set_height(r_one,irandom_range(1024,2048)) instance_create_layer(x,y,"Level",o_level)
I cannot think of a way to adjust the collision so player can walk behind the bottom wall tiles to really give it that perspective. It seems that even if you do fix the collision with those tiles you still have to find a way to adjust the depth.
In theory you could have another tile layer on top of your instances which functions as a "roof". It would be the same as the wall layer except it won't have the top wall tiles. I haven't tried to implant this in the level generator though.
Yeah, great idea. I had tried to accomplish this by drawing the tile on a different tile layer in the room and then be sure to have the player on a layer above it. It works for now lol
how could i spawn enemies randomly but not in walls...where the collision detection checks to see if there are tiles and than spawns the enemies in a free space.
Ive gone over the code multiples times and everything seems perfect. But my character moves perfectly until i collide with a wall and than he teleports to the top left, any ideas?
Check out the GMS 1.4 series. Most of the stuff like enemies and pathing can be easily converted to GMS 2: ua-cam.com/play/PL9FzW-m48fn2gQVYFxDzq4cz2A4uGWusx.html
HeartBeast Hey,can you make shadow tutorial for gm studio 1.4.x? Yeah , I know I am using such old version,but I started random generation project, and modified it so much, I can't export it to gms 2. Anyway I hope you will reply
When using the GMS 1.4 tutorial to add enemies to the game, they spawn inside the walls, which I'm assuming is because the actual tiles we're using in this version are the walls not the floor. Where would you place the randomly generated enemies code in order to make sure they spawn outside the tiles/wall?
@@于致远 I ended up putting the "Spawn Some Enemies" code inside Heartbeast's "Create Wall Tiles" code, underneath the part that says "if (grid_[# _x, _y] == Floor)" and it worked.
@@superspeed2378 Thanks for your reply. I did the same thing, which created a object "enemySpawn" and then paste "if (grid_[# _x, _y] == Floor) " in it. But the enemies can still spawn in the wall. I just cannot fix it.
Does anyone know if it's possible to alter the player movement so they move more akin to a platformer? (ie. jump to move up, gravity that keeps them against the bottom wall)... I have a feeling this shouldn't be too difficult but I just can't get my head around it (because of all the grid_place_meeting stuff, since I'm used to doing place_meeting(Solid) related code)...
ok so i adding this to the RPG begginer series of gamemaker 1 that he did and... i trying to convert this to work with the player that i already have but... the collision is not working and the only major thing that i changed is trying to set hspd and vspd to 0 but is not working so if anyone can reformulate the code to work with the rpg begginer series and send me it will be of great help PS:english is not my first language soo.... sorry for anything i spelled wrong
Great tutorial series as always Ben. Thanks for sharing.
As for the stuttering, it happens because you are moving in fractions, yet trying to do this against tiles requiring integers. Shaun highlighted the problem recently in his video too. The solution is to add this code before your movement code in order to round the movement per step. Also define the variables x_speed_fraction and y_speed_fraction in create of course.
//reapply the fractions
x_speed_ += x_speed_fraction;
y_speed_ += y_speed_fraction;
//store and remove the fractions
x_speed_fraction = x_speed_ - (floor(abs(x_speed_)) * sign(x_speed_));
x_speed_ -= x_speed_fraction;
y_speed_fraction = y_speed_ - (floor(abs(y_speed_)) * sign(y_speed_));
y_speed_ -= y_speed_fraction;
Thanks! I'll update the github page.
Could you perhaps link that video of Shaun please?
I'm not sure if it's ok with Ben to share another tutorial here, but I'm sure he can remove it if it's not.
ua-cam.com/video/Yre-XAE8DBA/v-deo.html
Thank you kindly :D
I don't know if you're still active, but diagonal movement makes the player stutter with this code. Do you think it's because of my code or this code?
From 10:05 the script needs to be wrapped in a function.
function grid_place_meeting(_object, _grid) {
var _top_right = _grid[# (_object.bbox_right-1) div CELL_WIDTH, _object.bbox_top div CELL_HEIGHT] == VOID;
var _top_left = _grid[# _object.bbox_left div CELL_WIDTH, _object.bbox_top div CELL_HEIGHT] == VOID;
var _bottom_right = _grid[# (_object.bbox_right-1) div CELL_WIDTH, (_object.bbox_bottom-1) div CELL_HEIGHT] == VOID;
var _bottom_left = _grid[# _object.bbox_left div CELL_WIDTH, (_object.bbox_bottom-1) div CELL_HEIGHT] == VOID;
return _top_right || _top_left || _bottom_right || _bottom_left;
}
Had me stumped for a while, but that's the life of a programmer I guess.
@@chewymang8597 It's because this tutorial was made before GMS2.3, which changed how scripts work.
thank you so much! my bren also melt during this part
Awesome, thanks ;)
If you are bothered by the gap in some walls and you want to close the border, you can do this:
Create a 1 x 9 sprite with the border color, set the origin to 16x 9 and at the object level in the draw event, copy this:
For (var _y =1; _y < height_-1; _y++) {
For (var _x =1; _x < width_-1; _x++){
If (grid_[# _x, _y] != floor) and (grid_[# _x +1, _y] == floor) and (grid_[# _x +1, _y -1] != floor) and (grid_[# _x , _y -1] != floor){
Draw_sprite_ext((sprite name), 0, _x*cell_width+16, _y*cell_height,-1,1,0,c_white,1);
For (var _y =1; _y < height_-1; _y++) {
For (var _x =1; _x < width_-1; _x++){
If (grid_[# _x, _y] != floor) and (grid_[# _x -1, _y] == floor) and (grid_[# _x -1, _y -1] != floor) and (grid_[# _x , _y -1] != floor){
Draw_sprite_ext((sprite name), 0, _x*cell_width+16, _y*cell_height,1,1,0,c_white,1);
Pd: there could be a better way to do that but i am starting at programming
Excellent tutorial. My solloution to the issue with the border was to make a sprite 32x32 and make it a solid color and enable 9 slice(you can also just make it invisible after you place it by putting it on another instance layer)
Then create a object from that sprite and I named mine "o_walls"
I placed one on the top left corner and then proceeded to outline the entire edge of the map that I did not want to go past.
In the player step event, I modified the code so that it could also detect the walls. Here is the code as I made it. It could also be added as another variable in the script.
if x_spd > 0 {
image_xscale = 1;
if grid_place_meeting(self, o_level.grid_) || place_meeting(x+ x_spd,y, o_walls) {
x = bbox_right&~ (CELL_WIDTH - 1)
x-= bbox_right -x;
x_spd = 0;
}
} else if x_spd < 0 {
image_xscale = -1;
if grid_place_meeting(self, o_level.grid_) || place_meeting(x- x_spd,y, o_walls) {
x = bbox_left&~ (CELL_WIDTH - 1)
x+= CELL_WIDTH+ x- bbox_left;
x_spd = 0;
}
}
y += y_spd;
if y_spd > 0 {
if grid_place_meeting(self, o_level.grid_) || place_meeting(x,y+ y_spd, o_walls) {
y = bbox_bottom&~ (CELL_HEIGHT - 1)
y-= bbox_bottom -y;
y_spd = 0;
}
} else if y_spd < 0 {
if grid_place_meeting(self, o_level.grid_) || place_meeting(x,y- y_spd, o_walls) {
y = bbox_top&~ (CELL_HEIGHT - 1)
y+= CELL_HEIGHT+ y- bbox_top;
y_spd = 0;
}
}
Do you intend to add a room of fixed room items, such as the one in the game "enter the gungeon"?
you forgot the "the" in the game title
@@fiercefox9276 helpfull coment
The issue with the player bouncing off of the right and downwards walls is related to acceleration being a decimal, it works fine when the acceleration value is a whole number
Wow great tutorial. Only recommendation is to go over the algorithm visually before you program so some of us may try to do it without tutorial first. I like how you got us started but its up to us to figure the rest out.
I changed some stuff to add holes in the ground and random start position instead of center. Just need to add stairs and bad guys. I'm thinking of having ability to generate levels from a text file. Lets say you have a dungeon with 10 floors. You want the 5th to have a diffrent exit condition like killing bad guys instead of finding stairs or the 10th floor being a randomly generated but open area with a boss fight. Not really sure what I wan't to do but I think water would be cool to :).
Again thanks for the awsome tutorial.
sounds super cool! I know I'm five years late but did you ever finish it / have a playable file?
Nicely done! Thank you!
Hi I was wondering how to add a door to this but randomly generated can you tell me if it is similar to making o_level?
So I watched this series about generating random dungeons but unfortunately to spawn enemies into the grid I needed to watch the older series which were done with gms1 and so i tried but it gives me this error message, that I need to define grid_path...I actually defined it but its not enough for gms2...can anyone help me, pls?
Hey @HeartBeast so I've been following your tutorial but for some reason the character is hitting invisible walls that are in the room itself. I'm not entirely sure what went wrong. If you had a piece of advice that would be amazing.
I'm having the same problem
Great tutorial but how can i do a collision line ? I tried to make an object with a variant image_xscale, but as the sprite become bigger than a cell width it does not work well
I found something, I did the best i could, it works but it's not clean
//Scale and angle
image_angle = point_direction(target.x,target.y,obj_player.x,obj_player.y)
image_xscale = clamp(point_distance(target.x,target.y,obj_player.x,obj_player.y),-16,16)
//If len is bigger than the distance
if len+16 > point_distance(target.x,target.y,obj_player.x,obj_player.y) {
// If there was a collsion
if coll {
//Collision set to true
target.wallfront = true
} else {
//Collision set to false
target.wallfront = false
}
//Reset the collsion and the len
coll = false
len = 0;
}
//Add 16 to len and check if there is a collsion
x = target.x+lengthdir_x(len,image_angle)
y = target.y+lengthdir_y(len,image_angle)
if grid_place_meeting(self,obj_level.grid_) {
coll = true
}
len +=16
nice tutorial bro...but can you also code that if the player eneter a certain place of the level, then the level will automatically random generate?
delayed post, but just found this great tutorial. For some reason, the clean up event with ds_grid_destroy is not working - there is still memory bleed every time I restart. I can't for the life of me figure out why - any thoughts?
The grid_place_meeting don't works anymore any help ?
damn, I'm having the same issue. I've checked over my code to make sure it matches over and over but I still get the error:
############################################################################################
ERROR in
action number 1
of Create Event
for object :
Variable .bbox_top(23, -2147483648) cannot be resolved.
at gml_GlobalScript_grid_place_meeting (line 10) - var _top_right = _grid[# (_object.bbox_right-1) div CELL_WIDTH, _object.bbox_top div CELL_HEIGHT] == VOID;
############################################################################################
gml_GlobalScript_grid_place_meeting (line 10)
@@Emily-lc2uj same
Here is the correction
///@function function grid_place_meeting(_object, _grid)
///@arg object
///@arg grid
function grid_place_meeting(_object, _grid){
var _top_right = _grid[# (_object.bbox_right-1) div CELL_WIDTH, _object.bbox_top div CELL_HEIGHT] == VOID;
var _top_left = _grid[# _object.bbox_left div CELL_WIDTH, _object.bbox_top div CELL_HEIGHT] == VOID;
var _bottom_right = _grid[# (_object.bbox_right-1) div CELL_WIDTH, (_object.bbox_bottom-1) div CELL_HEIGHT] == VOID;
var _bottom_left = _grid[# _object.bbox_left div CELL_WIDTH, (_object.bbox_bottom-1) div CELL_HEIGHT] == VOID;
return _top_right || _top_left || _bottom_right || _bottom_left;
}
@@d4fm HERO!
Just to be sure: ds_grid_create() creates a 2D matrix? Is it just that or is there some specific gamemaker thing related to it?
11:32 why the -1 for right but not for top?
Also, how do you make it so the player doesn't spawn in an empty/VOID tile?
There's a typo in his o_level:Create function. Change the following lines:
var _player_start_x = _controller_x * CELL_WIDTH + CELL_WIDTH / 2;
var _player_start_y = _controller_y * CELL_HEIGHT + CELL_HEIGHT / 2;
Hi thanks for the tutorial. What do I need to do to make it so the squares are 64 by 64 rather 32 by 32?
Thanks.
Just change the CELL_WIDTH and CELL_HEIGHT to be 64
This is so cooool!!!! Do you plan on adding a system to have things like items and monsters randomly appear in the dungeon too?
Check out P6 of the older series. It is GMS 1.4 but the general idea will be the same :)
ua-cam.com/play/PL9FzW-m48fn2gQVYFxDzq4cz2A4uGWusx.html
HeartBeast Hey, HeartBeast my player is running too fast.I don't know what I did wrong, I just wrote the code just like you
@@uheartbeast i dont know how to implement the code for your old spawning enemies with tilemap collision into game maker studio 2 2.3 ver
Hey guys,
I was wondering if I could get some help. I basically tried using this tutorial and did. it worked, but then I wanted the room size to be random and when I created on ubject that set the room size to a random integer using room_set_width(r_one,irandom_range(1024,2048)) and room_set_height(r_one,irandom_range(1024,2048)), but then it would create the walls and the shadows but not draw the wall tiles. I was wondering if I could get some help on this.
Here is the code for the object that creates the o_level object:
room_set_width(r_one,irandom_range(1024,2048))
room_set_height(r_one,irandom_range(1024,2048))
instance_create_layer(x,y,"Level",o_level)
I cannot think of a way to adjust the collision so player can walk behind the bottom wall tiles to really give it that perspective. It seems that even if you do fix the collision with those tiles you still have to find a way to adjust the depth.
In theory you could have another tile layer on top of your instances which functions as a "roof". It would be the same as the wall layer except it won't have the top wall tiles. I haven't tried to implant this in the level generator though.
Yeah, great idea. I had tried to accomplish this by drawing the tile on a different tile layer in the room and then be sure to have the player on a layer above it. It works for now lol
how could i spawn enemies randomly but not in walls...where the collision detection checks to see if there are tiles and than spawns the enemies in a free space.
Heart a question when will you see a 3 part waxing new things?
How would I randomise enemy spawns?
What language is used in GameMaker?
Will the code for wall shadows work in GMS 1.4?
Ive gone over the code multiples times and everything seems perfect. But my character moves perfectly until i collide with a wall and than he teleports to the top left, any ideas?
Actually figured this out. Cant use and in replace of & when dealing with bitwise operators.
@@Beefyjesus0 didn't really understand what you wrote
@@Tacoburito Pretty old, but what part?
i have a problem with the collision
Please can you go on with the series to add lika a random enemy spawner or attacking
Check out the GMS 1.4 series. Most of the stuff like enemies and pathing can be easily converted to GMS 2: ua-cam.com/play/PL9FzW-m48fn2gQVYFxDzq4cz2A4uGWusx.html
Thanks
HeartBeast Hey,can you make shadow tutorial for gm studio 1.4.x?
Yeah , I know I am using such old version,but I started random generation project, and modified it so much, I can't export it to gms 2.
Anyway I hope you will reply
When using the GMS 1.4 tutorial to add enemies to the game, they spawn inside the walls, which I'm assuming is because the actual tiles we're using in this version are the walls not the floor.
Where would you place the randomly generated enemies code in order to make sure they spawn outside the tiles/wall?
just encounter the same problem. Have you fixed it yet?
@@于致远 I ended up putting the "Spawn Some Enemies" code inside Heartbeast's "Create Wall Tiles" code, underneath the part that says "if (grid_[# _x, _y] == Floor)" and it worked.
@@superspeed2378 Thanks for your reply. I did the same thing, which created a object "enemySpawn" and then paste "if (grid_[# _x, _y] == Floor) " in it. But the enemies can still spawn in the wall. I just cannot fix it.
@@于致远 any update on if you fixed this error?
thank you for gamemaker video
thanks for the tutorial man, but can you do one that lets the player collide with the portal at the end of the level to add a new room please
Love your vids! Keep it up!
This is the cool!)
This is how "Soul king"
Thank )
Does anyone know if it's possible to alter the player movement so they move more akin to a platformer? (ie. jump to move up, gravity that keeps them against the bottom wall)...
I have a feeling this shouldn't be too difficult but I just can't get my head around it (because of all the grid_place_meeting stuff, since I'm used to doing place_meeting(Solid) related code)...
ok so i adding this to the RPG begginer series of gamemaker 1 that he did and...
i trying to convert this to work with the player that i already have but...
the collision is not working and the only major thing that i changed is trying to set hspd and vspd to 0 but is not working
so if anyone can reformulate the code to work with the rpg begginer series and send me it will be of great help
PS:english is not my first language soo....
sorry for anything i spelled wrong
would it work for platformers?
The link to the other video doesen't work for me
If redirects me to the my "my videos" menu on UA-cam.
Which link? I'll fix it.
The "Collisions using Bitwise Operators" one
Thanks. It should be fixed now.
It is, thanks.
These are so cool
If only I could upgrade from 1.x
ice on cup bro
honestly i prefer game maker 1.4
Fperst