Last updated 3/01/09
Between August and October of 2008, I created a prototype implementation of a networked, collaborative MegaZeux game editor. The editor code was converted from a typical input event loop into a network message loop, with clients reacting to network input via an RPC-like system. The host acts as the deciding relay for all clients - no local editor operations are executed until a message is received from the host, and the use of TCP ensures that a client's latency is the deciding factor in the face of conflicting operations.
However, while TCP provides guarantees that all messages will be received, the existing system imposed too much overhead on editing, and latencies were approaching frustrating highs. While the prototype is no longer under active development, I have determined that a sort of client-side prediction is necessary to ensure that users do not have to adjust their editing habits when working collaboratively.
ajs, the current MegaZeux development lead, has indicated that he is quite willing to merge the changes after some cleanup has occured, and certain design decisions have been properly thought out.
As of January 2009, the debugging abilities of MegaZeux are limited to single-line message display, or modal text box, neither of which have logging support. During July of 2008, I implemented a prototype integrated debugging interface which operated on MegaZeux's proprietary Robotic programming language.
As MegaZeux's programming model is object-oriented and concurrent, certain design decisions had to be made. Users are able to view a single robot's currently-executing code, and either single-step or run continuously, while viewing the normal gameplay in a reduced window. Other robots run their code at the full-speed rate, and the user may easily switch subjects at any point.
Pressing CTR+F6 at any time in gameplay brings up the debugging view, which divides the visible game window vertically. The user can then opt to single-step, or run continuously. Pressing F7 will bring up the subject selection dialog, and CTR+F6 will toggle the debugging view.
The prototype has been halted pending a large rewrite of the way that programs are stored internally in MegaZeux. This should alleviate various problems that were making implementing breakpoints a difficult task.