Modular Machines

From WorldForgeWiki
Jump to: navigation, search

Moving over and updating old notes from the Mason mechanical system.

--zzorn 11:28, 15 March 2006 (CET)

NOTE: The exact nature of Information Objects is still open, they need some more thought and analysis of how they fit into different machine nodes.


  • Allow players to easily create innovative systems for different in game purposes, from simple machine nodes
  • The system should be modular, so that it is easy to add new machine node types.
  • Generic enough to work with games of different genres (from fantasy to contemporary to scifi)
  • Efficient implementation - machines should not consume too much system resources on the server.


Somewhat similar to the techology level convept in GURPS, identifies the type of technology used to build a machine node. Different technologies have different constants for things like maximum energy flow, energy transfer loss, machine node size, and textures and models used for machine nodes.

Some examples of possible technologies:

Wooden, metal reinforced wheels, pegs, axles and belts. This is a basic type of technology, it requires only knowledge of shaping wood (and optionally metal). It can handle mediocre energies and has relatively high resistance. Processor nodes are about 1 x 1 x 1 meters in size.
For the kind of advanced stone traps and mechanisms that can be found in ancient temples, staying unused and in perfect repair for millennia until some unfortunate adventurer steps on the wrong stone and gets his skull impaled on pointy spikes in the ceiling. Can handle relatively large energies, but has very high resistances. Processor and other nodes are large (around 3 x 3 x 3 meters).
Heavy metal
Big, heavy iron gears, spinning discs and large noisy machines. Think 'Industrial Revolution', although this technology level can also be used in other settings. Manufacturing of these nodes requires knowledge of casting iron. They can handle quite large energies, but they are not good for transmitting smaller energies, as it takes some force to get the heavy wheels rolling. The size of the processor nodes is about 2 x 2 x 2 meters.
Light metal
Small metal gears and delicate mechanisms, like clockworks. This technology requires knowledge of whitesmithing. The nodes can can handle small energies, and have low resistance. However, they are not good at high energies. Processor nodes are small, about 0.25 x 0.25 x 0.25 meters in size.
From the invention of electrics and onward. Handles high energies, but is not good at delicate manipulations. Processor nodes are about 0.5 meters along each side.
This includes integrated circuits, up to and exceeding current technology. The nodes are good at handling small energies with minimal resistance and at high speeds. However, they can not handle large energies well. The processor nodes are very small, about 0.125 meters per side.
Fancy things done with genetic engineering.
Even though the actual components are very small, the nodes that encapsulate them are big enough to be possible to manipulate conveniently by humans.
Mysterious devices that manipulate and transfer magical energy.


A machine system consists of a number of nodes of various types. Nodes are represented in the game world with a 3D model, usually just a box with the machinery mounted inside.

Nodes can be connected to each other with connections. There are three types of connections, energy connections, matter connections and information connections. Energy connections transfer energy. Matter connections transport matter, both individual items and homogenous substances, such as liquids, gases, pastes, powders and other granular substances (e.g. grains). Information connections transfer information in the form of information objects (text, blueprints, item type descriptions, pictures, composite documents, etc).

A node has a number of input and output ports of each of the above types (energy, matter and information). The ports can be connected to ports on other nodes with connections. An output port on one node has to be connected to an input port on another node. Ports can also be unconnected.

Ports are descriptively named by the machine nodes. Nodes can be named by the machine/blueprint designer.

Node Categories

Nodes types can be divided up in different categories depending on their functionality. However, the categories are not absolute, and some node types can contain functionality that is listed under multiple categories.

Energy Source
Produces energy from a natural energy source or some fuel.
Reacts to certain input by sending signals or information objetcs.
Moves the platform the machine is built on in the world. There can be various implementations, e.g. wheels, legs, propellers, rockets?, levitation spells.
Catapults an object or substance out from the machine, possibly targeting a specifiec entity, or just aiming in some direction. Usable e.g. for a ballista, cannon, flamethrower, fountain. The mass and output speed and direction of matter thrown out could apply a counter force on the machine and the platform it is attached to, allowing rocket propulsion and recoil.
Door controller
May open, close, lock or unlock a door or container. Can also sense when a door is opened/closed. Might also sense who is trying to pass through a door, and allow / deny access to the person, either based on some access control lists (with organization memberships, tags, and identities and rules associated with them), or by querying a computer or other node.
Node Container
A node container is a special type of node that can contain one or more other nodes. Selected input and output ports of the contained nodes can be exposed to the outside world, as ports on the node container. The ports on the node container can be named, in the same way as ports on a normal node, so it is easy to construct machines using predefined node containers containing machinery designed to do some specific task.
A node container has a volume limit on how much volume the nodes it contains can have together. This is some constant times its own volume, this constant can also be larger than one, for example 2 could be a normal value. This is because much of the support and enclosing structure of the contained nodes can be shared. In addition, it can only contain nodes that have a smaller volume than its own volume, otherwise it would be possible to store an unlimited number of nodes in one node container by using nested node containers.
Transport nodes are used to move or provide a passage for items and substances( such as liquids, gasses, and fine grained items).
A manipulator node does some atomic or composite operation on items and substances that it recieves from matter input ports. When the items are processed, they are pushed out through one or more matter output ports. For example, one type of manipulator node could heat all items that pass through it. Another could use the latest item type description that it got from its information input channel, and form any clay or paste like material it gets from a matter input channel to the shape of the item, if the item can be shaped from that material in that way, and output the completed items through an matter output channel.
Manipulator nodes can only handle items that are smaller than themselves. The manipulator nodes come in many sizes for each technology level, from tiny 0.125x0.125x0.125m nodes, to 0.5m, 1m, 2m and 4m nodes. The 2m nodes can handle human sized items, and the 4m nodes can be used for most big creatures and building blocks.
Connected matter transfer ports have to be at zero distance from each other, so the manipulator node has to be placed next to any other manipulator or transport nodes that it has matter connections to. However, it does not matter what part of the manipulator node that touches the other node, as long as two surfaces are in contact.
Simply stores items, substances, energy, (or information items?). Substances may be stored under a pressure (larger or smaller than atmospheric pressure).
Sorts incoming items or information objects(?) or substance(?) into different output ports based on some specified filter criteria for each port (can use properties such as item weight, type, estimated value, tags on items, address information on packages, and so on).
Filter criteria could also be specified for different containers, allowing a sorter (a machine node or character) to place a set of input items in the correct containers based on the filter criteria associated with the containers. That way, different containers in the inventory of a character, or in the house of a character may have filters associated with them, and when a player needs to store loot he can just automatically sort through the incoming loot with one command, and get it placed in the specified target containers, into the first container with a matching filter. Thus it would be easy to keep things organized in the inventory, one can have pouches for herbs, quivers for arrows, chests for treasure, sacks for food, and bags for gear. Or drawers with crafting raw materials, and shelves with crafted products in a workshop.
Control Panel
A control panel that allows an user to steer and command some machine. May provide UI components with varous inputs and outputs of the machine, and may provide a movement mapping that captures user movement inputs and convers them to signals to any movement nodes in the machine, allowing the user to steer a vehicle (this control should also be simulated on client side if possible, so that nice client side prediction of vehicle movement can also be achieved).
May also contain an interface for retrieving or depositing items or money, allowing vending machines to be built.
May have access control for who can use the control panel (e.g. must be a member of a certain guild, much be a certain character, must be a character of a certain user, must have some role/tag/award given by a specific organization).
A Control Panel is used by walking up to it and pressing the 'enter vehicle' key. Pressing the 'exit vehicle' key will stop/cancel the session.
A Control Panel may have a default action that is executed when the 'manipulate environment' key is presed while close to / facing the control panel. For example, a door access control could open/close the door when activated with the 'manipulate environment' key, while providing a more detailed UI for specifying e.g. who is allowed through when engaged with the 'enter vehicle' key. Or a pellet disposing machine could produce a food pellet when used with the 'manipulate environment' key (the food pellet would be placed in the incoming container of the user who used the Control Panel). A Control Panel could also be able to accept items dragged and dropped on it (e.g. a vending machine might automatically buy items dropped in it, returning money to the user).
Stores and manipulates information objects. Executes programs. Connects to networks. Provides agent platforms. Manages access and account information (in-game). Provides information and services to client computers and terminals.
Players might be allowed to create scripts in some sandboxed programming language, but that would probably be tricky to implement without performance or other risks from poor user programs. Another alternative might be to identify some common tasks and provide ready made parametrizable program blocks for handling them. That approach has its own problems though. Or a nice visual language could be used, where users can connect computing nodes together like machine nodes, reusing a lot of the implementation. Might lack some flexibility perhaps..


Types of content

Different kinds of content can be moved between and manipulated by Machine Nodes.






Creating Machines

Debug Logs

It would be ideal to be able to test the machine while it is being designed... Some kind of simulation? Or just connect the nodes together, and see what happens.

Debugging should be possible, for example seing logs of what each machine node has done for the last minute / last 50 actions, precisely timestamped. It should also be possible to collect the logs from each node in a machine to a common log. The logs should have finite size, and rollover, so that they don't grow while running the game.