The way I do it:
I use data structures to hold events. I hold a ds_list of strings. I make a script to look for a string, which is the event in question, and return true and remove the string if it is there.
Then, to take advantage of the system, I make triggers(GM8+ only) to handle the events, a la:
{
return check_event(eventList, "Move Right");
}
It's a very clean interface. The best part is since I use lots of inheritance in Game Maker, I can easily build off of parent objects with triggers, and easily build on already existing triggers for events.
Now, if you need your event to give data packages it's a little more complex, but not much. You simply create a ds_grid that holds a string, and then how ever many variables you want. It takes more code to interface with the grid than a list, but it's not hard at all.
[EDIT]
I see you're talking about something like an external scripting language to interface with your game. My idea is more of a back-end to what you want to do. A front end shouldn't be too hard from there.(it depends how you want to do it, I suppose)
by the way, I love the look of your game.
![Kiss](https://forums.tigsource.com/Smileys/derek/kiss.gif)