Two other extremely narrow languages belong to the games Starcraft and Half-Life.

Starcraft boasts a level editor with a fairly sophisticated trigger system. When you make a map in Starcraft, you can create triggers, each of which consist of one or more conditions and one or more actions. Another aspect of this are locations, which are essentially boxes on the terrain which have a name assigned to them. Also included are switches, which are basically boolean variables. With some clever triggerwork, you can create AND, OR, and NOT gates, which would allow you to create almost any type of program you'd like. The main purpose of this "language" is to make Starcraft levels, though it may be possible to make something more complex with a little work.

Half-Life also boasts a trigger system. Half-Life is loosely based on the Quake engine (not, as a sidenote, the Quake 2 engine). There are three types of objects the mapper deals with: brushes, the 3D bricks that make up the physical boundries of the level; point entities, which include weapons, monsters, and many of the things that make the third type tick; and brush entities, also called models, which are essentially brushes that do things.

Half-Life's trigger system works like this: suppose you have a door and a button. They would both be models, one a func_door, the other a func_button. Entities, of both types, have whole slew of attributes, the two most important of which are "target" and "targetname." The targetname of an entity is its name, the target is its target. When an entity is triggered (say, when you push the button) it triggers its target by identifying it through the target's targetname. Clear? If not, go find a good Quake-engine mapping site. I recommend the Valve-ERC.

The practical upshot of all this is that, like the Starcraft system, you can, with a little work, make AND, OR, and NOT gates. Actually, the OR gate is somewhat built in (if any object triggers another object, it gets triggered), and the multisource entity is an AND gate for the trigger, while the multimanager is an AND gate for the target. If that wasn't clear, then I don't blame you. If you do ever start mapping for a Quake-engine-based game, then this should become clear.

It's not that these are without their drawbacks. The Starcraft engine doesn't have the concept of a variable, and the Half-Life/Quake engine can only do variables to a small degree. There are certainly ways to jury-rig a solution, but it would probably be extremely time-consuming. I'm also doubtless missing many other games, but these are the two I'm familiar with.

It would be interesting to see someone create, say, a calculator in Starcraft, though it may well be impossible.