[room] id = 1 spaces = [] # a room must have at least one space [space] id = 2 size = [2, 4] passages = [] # a space may contain passages to other spaces modules = [] # a space may have modules [passage] id = 3 exit = "Door Module A" # the exit of this passage entry = "Door Module B" # the entry of this passage type = "portal" # elevator, moving platform, etc. [module] name = "Module A" position = [0, 1] rotation = 90 types = [] # a module must have at least one type difficulty = 3 time-estimation = 342 # estimated amount of seconds to complete this puzzle requirements = [] # a module may have requirements [[types]] description = "door" [[types]] description = "puzzle/dexterity" [[types]] description = "puzzle/precision" [[types]] description = "puzzle/combination" [[types]] description = "puzzle/iteration" [[requirements]] name = "area" size = [1, 1] [[requirements]] name = "space size" size = [4, 2] [[requirements]] name = "space around" # space that is not directly occupied by the module but must be available size = [2, 2] [[requirements]] name = "existence" # in the same room as another module module = "Module B" where = "current" # current: in this space, anywhere: in this space or any previously visited space [[requirements]] name = "facing" # must be facing another module module = "Module B" type = "exact" # exact: exactly opposite of, raycast: must be visible from [[requirements]] name = "object" # an object is required to be posessed provided = false # whether this module provides this object itself [[relations]] # a collection relation with an arbitrary number of modules name = "paintings" modules = [] [[relations]] # a group relation with named modules name = "Puzzle A" crank = "Crank Module A" balloon = "Balloon Module B" hint = "Hidden Module C" [object] name = "Object A" properties = [] # an object may have properties [[properties]] name = "interactable" # this object can be interacted with [[properties]] name = "connected object" # connected to another object in some way object = "Object B" [[properties]] name = "constrained" # the movement of this object is constrained in some way (e.g. a button that only moves a few centimeters in a single direction) type = "position" # rotation, aim [[properties]] name = "bound to room" # this object is bound to a room and will disappear when leaving it room = 1 [[properties]] name = "tracked" # this object's position is tracked (mutually exclusive with "bound to room" since the physical tracked object cannot disappear)