It's not bad practice at all. But there's one thing you need to consider! The room creation code doesn't get called before everything else. If there are objects manually placed within the room, their Create Event will come before the room creation code. If one of this objects would in some way rely on some initialization-code within the room creation code, for example a global variable, the variable might not be defined yet. Oh the trouble. This is how I do it:
I don't place any objects manually onto the map. At the end of the room creation code, I create my unique meta object and the reference to it in form of the constant(macro) 'META' like this:
Code:
META = instance_create(0,0,obj_meta);
Every initialization that should happen before everything else just comes before this.
The constant 'META' equals a global variable like 'global.__meta_obj'. This object then creates and manages all the other "meta objects", for example obj_ui, which manages everything related to the user interface. If you create it within the Create Event of 'META', like this...
Code:
UI = instance_create(0,0,obj_ui);
...you get a nice reference like 'META.UI', which you can access from everywhere since META correlates to the global var. Objects like this create and manage all other objetcs from there on in a tree-like-hierarchy.
SD