ZZT had a programming language called "ZZT OOP" and you could write scripts that would be performed by objects in the game. The objects could move around, change shape, and send messages to each other. It was difficult to get them to cooperate—they'd move at different times and fall out of sync—such that you had to add synchronization code to keep them working together. Thinking back on it now, this odd little environment actually taught me some lessons about distributed systems.