I don't mean this to be offensive, but you don't really seem to understand how scripting works. Just because you can put some code in and it seems to do what you want, doesn't mean you should rely on it working that way. Although your code might be working for this case, it's got a lot of overhead and is very error-prone, and potentially difficult to debug in the event an error did come up.
[code] object[0].Move(movx, 480, 1, eNoBlock, eAnywhere);
Wait(5);[/code]
Seeing as this is the room script, there's no need to use the object array unless you're looping through the objects. It would make your code clearer if you used the object's script name instead of referencing it this way, even though they are both the same object. Also, you're calling Object.Move as a non-blocking call, but the immediately just forcing it to block by calling Wait. That doesn't really make any sense. Why not just make it a blocking movement?
[code] oObject.Move(movx, 480, 1, eBlock, eAnywhere);[/code]
[code] movx--;
if (movx == -2) { /* ... */ }
// ...
if (movx == -210) { /* ... */ }[/code]
So, I'm just assuming here that movx is initialized to 0 considering that it's obviously not a room-level object and must therefore be global. Of course that brings into question whether or not you even need movx to be global. Is it used by any other rooms? It seems like it serves a very specialized purpose for this room, so I don't know why it would be needed for other rooms. If it only has any meaning in this room, don't declare it as a global variable, declare it as a variable within the room script, at the top of the script, outside of any functions.
From there, you're decrementing the variable to -210. Although it doesn't really make any difference whatsoever, it is more conventional to increment temporary variables in situations like these. However, you are also using that variable to position an object, so that's fine here.
But wait, are you really moving an object to have it's X position at -210? Unless this is a rather wide object and it's moving off-screen, then I don't understand what you're trying to accomplish here. So while there is a conceivable case under which this would actually be a viable way of accomplishing what you want, it seems more likely that this isn't the case. You should be careful about doing this, because under most normal circumstances this is not what you should be doing.
Also, this is the point at which you're adding an item to a queue and then clearing it out before a single other item is added. Doesn't that occur to you as defeating the purpose of a queue??
Oh, and I should also point out that you're checking the value of movx 21 times every time that your room's rep exec function actually runs (which since you're blocking it 5/40 times per second, amounts to 168 times per second). That should be the worst-case scenario. That's the reason you use else if. Best-case scenario here it should only have to check the value of movx once, but you are running the worst-case scenario every game loop. That's ridiculous.
[code] movx--;
if (movx == -2) { /* ... */ }
// ...
else if (movx == -209) { /* ... */ }
else if (movx == -210) { /* ... */ }[/code]
[code] if (movx == -210) {
FadeOut(1);
odate.Visible = true;
Wait(20);
FadeIn(1);
Wait(80);
FadeOut(1);
cEren.ChangeRoom(2, 160, 430);
}
}[/code]
So once movx is finally set to -210 (26.25 seconds after the room's rep exec function starts), you fade out as slowly as possible, turn an object on, wait an additional half a second, fade back in as slowly as possible, wait two seconds, and then fade out as slowly as possible, before sending the character to the next room.
There's not really anything necessarily wrong with the way this is scripted, but as a player I would actually find it infuriating to have to sit through this. I would recommend making it a skippable cutscene (at the very least the fade in/out bit).
Beyond that I could also comment on your indentation which is inconsistent and makes your code harder to read, and harder to debug. The purpose of indentation is so you know what commands are nested within what functions, what conditions, what loops, and so forth. If your indentation is inconsistent, then you can't, at-a-glance, tell as readily any of this information. Inconsistency in indentation is the same as not using any indentation at all. It defeats the purpose entirely.
Furthermore, I tried to edit my post earlier, but apparently it didn't save my edit. The proper way of using the module would be to do something like:
[code]function room_AfterFadeIn()
{
player.SayQueued("text1");
player.SayQueued("text2");
player.SayQueued("text3");
}[/code]
That would say each of the commands in the specified order, one after the other. And it works fine. You said that it was hanging on the first line, but that means you were doing something else wrong. The module works as intended. Though it doesn't seem necessary due to your actual implementation.