I appreciate your thought on this. I think your advice is good.

Enabled show Redraw Regions -- definitely a neat trick. However, it doesn't really give me a clear idea of precisely *when* the redraw is happening. My movie is currently running at 30fps and all the stuff that's supposed to be redrawing is indeed being redrawn. The problem is that the critical frame frequently gets dropped in which my shooter is firing...a bullet just erupts from a guy with his thumbs in his holster belt. I might set up a timer to keep my shooters in this stance which will likely improve things. I'm not sure what to do about the jumpiness.

I'm not certain, but I think that when I dispatch a TimerEvent from my main timeline and its listener calls updateAfterEvent, then that will force the whole movie to redraw immediately. Check out this function which receives a request from the server when a remote player has fired. I have altered it so that it dispatches a TimerEvent whenever a player movement order is received that actually moves the player:
PHP Code:
// this routine allows the server to move players within this client
gameService.client.movePlayer = function(playerNumber:intnewX:intnewY:intnewFrame:String):void {
    var 
player:MovieClip players[playerNumber];
    if (!
player) {
        
trace('PLAYER ' playerNumber ' does not exist!');
        return;
    }
    var 
updateAfter:Boolean false;
    
    if (
player.!= newX) {
        
player.newX;
        
updateAfter true;
    }
    if (
player.!= newY) {
        
player.newY;
        
updateAfter true;
    }

    if ((
newFrame != null) && (newFrame != player.priorFrame)) {
        
updateAfter true;
        
player.priorFrame newFrame;
        if (
newFrame == 'standing') {
            
player.gotoAndStop(newFrame);
        } else {
            
player.gotoAndPlay(newFrame);
        }
    }
    
    if (
updateAfter) {
        var 
tevt:TimerEvent = new TimerEvent(TimerEvent.TIMERfalsefalse);
        
dispatchEvent(tevt);
    }
// gameService.client.movePlayer() 
I then have a super simple event listener waiting for a timer event which does in fact get fired, apparently without complaint:
PHP Code:
function updateFunc(tevt:TimerEvent) {
    
tevt.updateAfterEvent();
}
addEventListener(TimerEvent.TIMERupdateFunc); 
I see this function firing repeatedly and I assume it works as there is no complaint from the compiler or during code execution. I believe that it may in fact force a movie redraw when calling updateAfterEvent. The problem is that it might fire redraws in such rapid succession that one never sees the distinct frames...just the last one in a cluster of commands.

I believe this jumpiness is rleated to the network commands arriving in clusters. I think the ability to influence this behavior of socket commands arriving in clusters would require some deeper-level programming that would influence the behavior of a socket's DATA event which is beyond the scope of Actionscript coding. I could be wrong.

I'll maybe try your approach where I use a timer instead of enterFrame and this may help with the clustering of network messages. Of course, at 30 fps, enterFrame should fire roughly every 33 milliseconds which is pretty close.

RE: FlashMOG...forgot about those try/catch blocks. Also "throw new Exception". There are about 12 try/catch blocks in the latest version (not yet published) and they are all in FlashMOGPolicyServer.php (a new file) and FlashMOGServer.php. IT wouldn't be too hard to root those out.

the real problem is the "throw new exception" stuff. There are a lot more of those. They could probably just be replaced with a die('error blah blaah'). You shouldn't be getting exceptions in your code so if you are, then dying is an appropriate response.