falling rocks | gml
| Type | Desc | |
|---|---|---|
| mod | function | gives the remainder when dividing, e.g. 20 mod 5 = 0 (because 5 goes evenly into 20). 6 mod 4 = 2 (because 4 goes into 6 once, with a remainder of 2). |
| instance_create_depth(x, y, depth, object) | function | spawns an object at an x and y position at a given depth. The greater the depth, the more 'underneath' things it will appear. Think of depth as a 'z axis' while you are learning. This function can also return the instance id of the object being spawned. |
| draw_set_color(colour) | function | sets colour for drawing. use the GM constant colours (e.g. c_lime, c_red, etc. |
| draw_text(x, y, string) | function | draws text at a location. use in a Draw event. |
| Sprite | Images |
|---|---|
| sprPerson | ![]() |
| sprRock | ![]() |
You can drag and drop the sprRock.gif into GMS2 and it will translate the animation frames accordingly:
| Object | Sprite | Properties |
|---|---|---|
| objRock | sprRock | Visible |
| objSpawner | no sprite | |
| objPerson | sprPerson | Visible |
No need to add any instances of objRock to the room, we will spawn these with the objSpawner object.
objSpawner Create
step_count = 0; second_count = 0; rocks_to_spawn = 1; spawned_yet = false; seconds_between_each_wave = 5;
objSpawner Step
randomize();
step_count = step_count + 1;
if (step_count mod room_speed == 0){
second_count = second_count + 1;
step_count = 0;
}
if (not (spawned_yet)) and (second_count mod seconds_between_each_wave == 0) {
for (rocks = 0; rocks < rocks_to_spawn; rocks += 1){
rock_created = instance_create_depth(random(room_width), 0, 0, objRock);
with (rock_created) {
gravity = random_range(0.1,0.3);
gravity_direction = 270;
image_speed = 0;
}
}
spawned_yet = true;
rocks_to_spawn = rocks_to_spawn + 2;
}
if (second_count mod seconds_between_each_wave != 0){
spawned_yet = false;
}
objSpawner Draw GUI
draw_set_color(c_black); draw_text(5,5,"Variables"); draw_text(5,6,"_________"); draw_text(5, 25, "Step count:" + string(step_count)); draw_text(5, 50, "Second count:" + string(second_count)); draw_text(5, 75, "Rcoks to spawn next:" + string(rocks_to_spawn));
objPerson Step
switch (keyboard_key) {
case vk_left: hspeed = -5; break;
case vk_right: hspeed = +5; break;
case vk_nokey: hspeed = 0; break;
}
objRock Step
if place_meeting(x,y,objPerson){
image_speed = 1;
}
if (image_index == sprite_get_number(sprRock) - 1){
instance_destroy();
}
- add scoring
- add time limit
- improve controls and game in general - ideas?


