--- url: "documentation/mechanik-trasa" title: "Format especification – Route files (Trasa.dat)" draft: true --- ## General specifications Mechanik routes are plain text files containing a list of commands. Each command is placed in a new line and comprises a name followed by several values separated by either a space or a tab. These commands can be of three types: * 3D objects * 2D objects (scaled objects) * Control objects ### 3D considerations Unlike most modern 3D software, the unit of measurement in Mechanik is the pixel. Conversion to meters is achieved by dividing any size by 200; that is, 200 pixels in Mechanik equal 1 meter in real life. X/Y/Z coordinates work mostly the same as any other 3D software, except that the Y axis is inverted (objects above the ground have a negative Y coordinate). In addition to this, the position of the objects in the world (except the Z axis, which corresponds to the train's direction) is not absolute, but relative to the driver's point of view. By default, the driver's eyes are 2 meters above the track (which means that the ground or track is in Y -2.0), and 0.75 meters to the right, but there is at least one route (Prague Metro) known to use slightly different values (there is no X axis offset). Vertices must always be declared in clockwise order. ## List of commands This is a list of all the available commands in Mechanik. 3D and 2D objects are visible in the world, and control objects are invisible. ### 3D objects #### #t (3D textured object) ```#t km ile x1 y1 z1 x2 y2 z2 x3 y3 z3 x4 y4 z4 x5 y5 z5 x6 y6 z6 x7 y7 z7 nr_0 m_v m_u dlugosz nr_t jakosc nr_konca``` The #t command defines a 3D object with a texture. It takes the following arguments: km: The distance from the beginning of the route. ile: The number of vertices (3, 4 or 5). x1, y1, z1: The 3D coordinates for the first vertex. x2, y2, z2: The 3D coordinates for the second vertex. x3, y3, z3: The 3D coordinates for the third vertex. x4, y4, z4: The 3D coordinates for the fourth vertex. x5, y5, z5: The 3D coordinates for the fifth vertex. x6, y6, z6: The 3D coordinates for the sixth vertex (currently not used, should be 0, 0, 0). x7, y7, z7: The 3D coordinates for the seventh vertex (currently not used, should be 0, 0, 0). nr_0: m_v: m_u: dlugosz: The scale of the texture. nr_t: The texture index. jakosc: nr_konca: #### #t_prz (3D transparent textured object) ```#t_prz km ile x1 y1 z1 x2 y2 z2 x3 y3 z3 x4 y4 z4 x5 y5 z5 x6 y6 z6 x7 y7 z7 nr_0 m_v m_u dlugosz nr_t jakosc nr_konca``` The #t_prz command defines a 3D object with a transparent texture. It is identical to the #t command, but pure black is used as the alpha colour. It takes the following arguments: km: The distance from the beginning of the route. ile: The number of vertices (3, 4 or 5). x1, y1, z1: The 3D coordinates for the first vertex. x2, y2, z2: The 3D coordinates for the second vertex. x3, y3, z3: The 3D coordinates for the third vertex. x4, y4, z4: The 3D coordinates for the fourth vertex. x5, y5, z5: The 3D coordinates for the fifth vertex. x6, y6, z6: The 3D coordinates for the sixth vertex (currently not used, should be 0, 0, 0). x7, y7, z7: The 3D coordinates for the seventh vertex (currently not used, should be 0, 0, 0). nr_0: m_v: m_u: dlugosz: The scale of the texture. nr_t: The texture index. jakosc: nr_konca: #### #t_p (3D horizontal textured object) ```#t_p km ile x1 y1 z1 x2 y2 z2 x3 y3 z3 x4 y4 z4 x5 y5 z5 x6 y6 z6 x7 y7 z7 nr_0 m_v m_u dlugosz nr_t nr_konca``` The #t_prz command defines a 3D object with a texture. Objects must be horizontal in the Z axis. It takes the following arguments: km: The distance from the beginning of the route. ile: The number of vertices (3, 4 or 5). x1, y1, z1: The 3D coordinates for the first vertex. x2, y2, z2: The 3D coordinates for the second vertex. x3, y3, z3: The 3D coordinates for the third vertex. x4, y4, z4: The 3D coordinates for the fourth vertex. x5, y5, z5: The 3D coordinates for the fifth vertex. x6, y6, z6: The 3D coordinates for the sixth vertex (currently not used, should be 0, 0, 0). x7, y7, z7: The 3D coordinates for the seventh vertex (currently not used, should be 0, 0, 0). nr_0: m_v: m_u: dlugosz: The scale of the texture. nr_t: The texture index. nr_konca: ### 2D objects ### Control objects #### 'z_d (Sound marker) ```'z_d km x z nr_d k petla hz_v glosnosc``` The 'z_d command starts or stops playing a sound. It takes the following arguments: km: The distance from the beginning of the route. x: The X coordinate of the sound. z: The Z coordinate of the sound. nr_d: The sound index. k: petla: Whether the sound plays in a loop (1) or not (0). hz_v: Whether the sound is affected by the train's speed (1) or not (0). glosnosc: The volume at which the sound is played (0-128) #### 'z_p (Speed marker) ```'z_p km x z pr``` The 'z_p command sets a speed limit. It takes the following arguments: km: The distance from the beginning of the route. x: The X coordinate of the limit. z: The Z coordinate of the limit. pr: The speed limit. #### 'z_s (Whistle marker) ```'z_s km x z status``` The 'z_s command sets a whistle marker. Two must be placed to define a section, one at the beginning and another at the end. It takes the following arguments: km: The distance from the beginning of the route. x: The X coordinate of the marker. z: The Z coordinate of the marker. status: Whether the section during which the whistle must be played starts (1) or ends (0). #### 'z_z (Stop marker) ```'z_z km x z status``` The 'z_z command sets a stop marker. Two must be placed to define a section, one at the beginning and another at the end. It takes the following arguments: km: The distance from the beginning of the route. x: The X coordinate of the marker. z: The Z coordinate of the marker. status: Whether the section in which the train must stop starts (1) or ends (0). #### 'z_shp (Indusi/PZB marker) ```'z_shp km x z status``` The 'z_shp command places an Indusi/PZB beacon in the track. It takes the following arguments: km: The distance from the beginning of the route. x: The X coordinate of the marker. z: The Z coordinate of the marker. status: Must be always 1. #### 'z_jb (Current break marker) ```'z_jb km x z status``` The 'z_jb command sets a current break marker. Two must be placed to define a currentless section, one at the beginning and another at the end. It takes the following arguments: km: The distance from the beginning of the route. x: The X coordinate of the marker. z: The Z coordinate of the marker. status: Whether the currentless section starts (1) or ends (0).