You were dead right, it's because they're being overwritten by the create step.
Ha! I love being right...
Thanks for letting us know too!
So I either have to use the Variable Definitions then erase them from all of my create steps?
I can't use both systems?
If I don't create these variables in the create step - which some of my code needs it'll throw errors of looking for variables before they've been set.
It seems strange that this feature runs before the create step rather than overwriting the settings in it.
The system is correct and works as planned. Really, the whole idea of object variables is to use them in a parent-child hierarchy, and pretty much omit 90% of variables from the Create Event of the objects.
For example, in my game, I have a top level "init" parent that ALL objects in my game have as their parent (even the player). This object has a couple of create event variables that I use in all objects to control things like pausing the game and collisions. These don't need to be in the object variables as I want every instance to have them and won't need to ever modify them in the room editor. Then I have a couple of child objects of that parent, that are ALSO parent objects... These parents are for "solid" objects, "moving" platforms, "enemies" and "interaction" and have specific object variables that can be edited in the room editor and that are going to be used by all of the children objects. Then I have the final child object that has MORE object variables to control very specific things like attack patterns (enemies) or buttons and doors (interaction). Some of those are actually
also parents, and add more variables!!!! By the time I get into the room editor and start placing instances, they can have anywhere from 4 - 5 to 15 - 20 variables in the object variables list. Do I use all of them? Nope! Or at least yes, but not in all the instances... each variable is for a specific thing, time or place.
Just to expand a little more, My enemy parent has about 12 variables in the object variables and ALL the code for the instance is in the Step event. And when I say ALL the code, I mean ALL the code for
every movement type and situation. Now, some of the object variables are for setting horizontal or vertical speed, some are for setting whether to walk on platforms or float, some are for setting paths... What this means is that I can simply create a new enemy object, give it a sprite, and then drop it into the room, and then set the instance variables to modify the behaviour of the enemy
in the room editor and without touching the code! This takes a bit of initial setting up, but then makes level design a LOT easier, especially if you are working in a team. You can have your programmer set everything up then have your level designer use all the variables to create levels, and neither really needs to know anything about what the other is doing.
In this context it makes sense to not use the create event except for things that won't need to be edited in the room editor. If you're NOT planning on using multiple parents or editing objects in the room editor then stick with the create event.