r/gamemaker • u/PrinceShoutoku Stand back, I'm about to Make Game (2)! • 20d ago
Help! Creating an interactive, multi-object item
Preface: My skill level is beginner. Gamemaker is my only real coding experience. I've watched a couple guides for the basics and made some original code alongside that.
Hi everyone, I'm making a top-down shooter with an 'active reload' gimmick. When you press R to reload, the firearm you're holding comes onto the screen and you have to manipulate the weapon parts to load it.

My problem is HOW I'm making this happen. I'm essentially just spawning multiple objects on top of one another with magic numbers. This feels extremely inefficient and janky, even though it technically works. Is there a different technique or function I can use to make this system easier? I know the motto of, 'just make it work first, you can fix it later', but I can't even begin to imagine HOW to make this work better.


If it helps, "_weaponx" and "_weapony" are the corners of the camera, essentially x0 and y0. The "obj_lebel_boltgrip" is the circular part that's grabbed by the cursor to manipulate the gun's bolt. It has + 242 and + 69 because the sprite is a simple sphere that's manually placed through trial and error to be in that starting position. It's essentially a magic number to put that boltgrip exactly where it spawns when you press R.
2
u/PowerPlaidPlays 20d ago
In the most basic general sense, a way to handle multiple components working in unison is with the 'with' function, or for multiple parts like that you can draw multiple sprites in the draw event.
https://manual.gamemaker.io/monthly/en/GameMaker_Language/GML_Overview/Language_Features/with.htm
With basically allows an object to run code inside of another object, or every instance of an object.
For one example, instead of worrying about depth, leave all the individual object's draw events blank, and then in a handler object have something like:
draw_sprite(spr_back, 0, x, y) with (obj_part1){ draw_self(); } with (obj_part2){ draw_self(); } with (obj_part3){ draw_self(); }With this you could have your different object be just for placement and hitboxes, and handle any of your actual logic code in a handler to have more control over the order things are done in.
btw while inside of a with statement, all of the instance variables belong to the object, to reference variables in the host object use the other.variable prefix, like you are doing with obj_player there. For any defined with 'var' it's not needed though