1. Destination indicator of the prototype in OMSI
In principle, all destination display systems can be displayed using scripts in OMSI. The difficulties lie in the effort of implementation and performance. The following article only deals with the script-side display, not with the creation in the 3D program or the integration in the *.cfg file.
1.1. Inscription labels
- Destination display:
Probably the simplest way to display a destination indicator. The destination is written on a blackboard. The file name of the current destination tga can be evaluated from the *.hof file.
- Operation/Suggestion for implementation:
Removing the sign can be realized quite easily. A click on the sign and via a Visible-Variable the sign is hidden. More complex is the insertion of the correct sign. Theoretically it can be solved via the Alt menu, but this variant is rather unattractive. In reality, at the beginning of the shift, exactly those signs that would be needed during the service were stowed away in the bus and carried along. As an alternative to the implementation, a look into a driver's folder, in which one selects the next route or destination, would be a good idea. A click on the destination sign holder could then place the sign/display it again via the Visible variable.
1.2. Rollerbands
- Destination display:
With this destination display type, all destination signs of the current yard are on a conveyor belt. Depending on the direction of travel, this conveyor belt is turned into the appropriate position so that the current destination is visible from the outside.
- Operation/Suggestion for implementation:
In reality, roller conveyors are (or were) either cranked by hand or adjusted via servomotors. In the case of adjustment via servomotors, the control can be either tactile, step-by-step or target-based. In the case of tactile and step-by-step control, the control unit has two buttons per motor, one for each direction of rotation. The motor rotates in the selected direction as long as the button is pressed. With a tactile control, the roller conveyor stops in the current (intermediate) position after being released, whereas with a step-by-step control it continues to rotate until the next stop position. In the case of target-based conveyor control, the target can be entered either via IBIS or a separate control panel. As soon as the destination has been entered and confirmed, the conveyor belt turns automatically to the selected position. As in the SDs, the file names of the rollband gas can be read out of the *.hof file.
IMPORTANT: When creating rollband textures a black pixel must be present in one of the 4 corners of the textures, otherwise display errors will occur during rollband animation.
1.3. Annax
- Destination display:
The ANNAX matrix already included in OMSI1 by M&R offers a rasterized destination display for two lines of 16 characters each as well as a line display for 3 characters. Each character is switched one after the other, first the upper line from left to right, then the lower line from left to right.
- Operation/conversion suggestion:
Since the ANNAX matrix is rigidly gridded, the change animation can be simplified to the extent that a whole character is always updated. Operation is via IBIS or a separate matrix control unit. Once the new information has been entered, the display automatically displays it.
1.4. FlipDots
- Destination display:
The name-giving FlipDots are small plates, which are black on one side and in a contrasting colour (for example white or neon green) on the other side. To display the typeface, the matrix consists of a corresponding number of these tiles. To rotate the plates, each one is equipped with a small electric motor. In order to save cabling effort, the elements are switched by a matrix circuit in columns or rows.
- Operation/implementation suggestion: Due to the step-by-step update of the destination display and possible random misdisplays, the content must be generated dynamically by the script based on the information in the yard file. Basically there are two types of FlipDot destination displays:
- Updating from top to bottom: Here different methods can be considered. Since the number of lines is manageable, you can think of more variants than when updating from left to right.
- Modification of the "BUSE matrix script", so that the update is not done by point but by line.
- Modification of the "Busfanat full matrix", so that not columns but rows are updated.
- The matrix script from the O405N from the commercial Hamburg addon, whose functionality is not publicly known.
- Update from left to right: For OMSI 1, only the "Busfanat full matrix" is known here so far. Starting with OMSI 2, the Kruger matrix, which was provided by M&R in EN92 and GN92, is available as an alternative.
Operation is via IBIS or a separate matrix control unit. Once the new information has been entered, the display automatically displays it.
1.5. LED/LCD-Display
- Destination display:
With LED matrices, the name-giving LEDs are controlled by a matrix circuit. Here, the LEDs are multiplexed (usually line by line) for an apparent continuous light. This has the advantage of much less cabling and lower power consumption, because not all "switched on" diodes have to be supplied with power at the same time. In addition, the target change seems to be instantaneous. LCD displays work according to a different operating principle. One of the biggest obvious differences is that it is not the pixels themselves that light up, but rather they have to be illuminated from behind, and in order to display the matrix image, the pixels absorb part of the backlighting or do not let it shine through. Operation is via IBIS or a separate matrix control unit. Once the new information has been entered, the display automatically displays it.
- Operation/implementation suggestion: Since all points are updated simultaneously, there are several options:
- The "Busfanat full matrix" in LED mode (adjustable in the const file)
- (from OMSI2) Modification of the Kruger Matrix script from M&R, so that everything is updated at once instead of column by column.
- Modification of the "BUSE-Matrix-Script", so that everything is updated at once and not point by point.
- You use the "Rollband-tga" as changing texture, as it was implemented by Thiago in the Volvo 9900.
With the last two variants a better performance is bought by a more complex creation of the yard information. Whether this pays off, everyone has to decide for himself.
Operation is via IBIS or a separate matrix control unit. Once the new information has been entered, the display automatically displays it.
2. Description of known scripts
The following is a description of the known scripts.
2.1. Annax
2.1.1. Summary
The ANNAX queries three variables from the IBIS/matrix ECU/whatever Line number, course number (line suffix) and target index. In the M&R standard configuration, the variables are called IBIS_linePrice, IBIS_line_suffix and IBIS_TerminusIndex. The line number is converted into a string in the script, possibly manipulated by the price number and can then be displayed. It is similar with the target, with the retrieved target index the relevant strings are loaded from the yard file. These are briefly pre-processed for the text texture and can also be displayed. Since with ANNAX each character is displayed in its own grid and each grid box (considered on its own) is updated at once without transition animation, the transition animation is relatively simple. Depending on the progress, the currently displayed string is overwritten by the new string piece by piece.
2.1.2. Function sequence
- Triggering the change cycle'.
The display change is triggered by a change of the target index in the target matrix and by a change of the line number or the course in the line matrix.
- Evaluation line number and course number
The line number is stored in the variable IBIS_LineCourse. The name is confusing because the variable only contains the line number. The course number is stored in variable IBIS_line_suffix. First the line number is converted into a string using $IntToStr. If the course number influences the line, the line string received is modified accordingly
- Obtaining the information from the Court file
With this matrix up to three strings are read from the farm file: Front display top, front display bottom and side display. Since the system macro (M.V.GetTerminusString) can only search for a string for the index in the yard file and not for the target number entered in IBIS, this index must be searched for accordingly in the IBIS_TerminusIndex variable transferred from IBIS using the system macro (M.V.GetTerminusIndex). After the required strings have been loaded from the yard file with the now known index, the strings read out are only converted into the appropriate format and can be written to the matrix.
- Change animation
Due to the fixed letter grid, you can use a change progress variable here to simply use the first x characters of the newly determined target display, "cut away" the same number of characters from the already described display, join the two intermediate strings and then save them into the texture string, which is then displayed with the text text texture.
2.1.3. assets and drawbacks
+ performance-friendly due to low calculation effort | -fixed number of characters per line (otherwise centering would be wrong) |
+ supports M&R standard farm file | |
Line and destination display independent of each other |
2.2. BUSE-Matrix-Script
2.2.1. Summary
The BUSE matrix script is the first known way to display a full matrix in OMSI. Technically it is a modified ANNAX script, as known from the SD and D buses of OMSI1. As a difference to it, the yard file does not store the line contents, but the "pre-rendered" points of the matrix. When changing the destination, this point is updated point by point and the new line appears from top to bottom. The line matrix is hardly different from the M&R ANNAX script. The first publisher of this script is the user "Kosak", who published this variant with his bus "Renault Karosa Citybus".
2.2.2. Function sequence
- Triggering the change cycle'.
The display change is triggered by a change of the target index in the target matrix and by a change of the line number or the course in the line matrix.
- Evaluation line number and course number
The line number is stored in the variable IBIS_LineCourse. The name is confusing because the variable only contains the line number. The course number is stored in variable IBIS_line_suffix. First the line number is converted into a string using $IntToStr. If the course number influences the line, the line string received is modified accordingly
- Obtaining the information from the Court file
With this matrix only one string, the pre-rendered front display, is read from the yard file. Since the system macro (M.V.GetTerminusString) can only be used to search for a string for the index in the yard file and not for the target number entered in IBIS, this index must be searched accordingly for the IBIS_TerminusIndex variable transferred from IBIS using the system macro (M.V.GetTerminusIndex). After the required string has been loaded from the yard file with the now known index, the string read out can be written to the matrix.
- Change animation
Since the string to be displayed is a pre-rendered dot pattern, you can simply use a change progress variable here to use the first x characters of the newly determined target display, "cut away" the same number of characters from the already described display, join the two intermediate strings together and then save them into the texture string which is then displayed with the text texture.
2.2.3. assets and drawbacks
+ first script of this kind | - special hoif-file required |
+ performance-friendly due to low calculation effort | - Line number is saved with the target text points in the yard file -> AI vehicles may display incorrect line numbers when they are describing the destination |
- Every ad with this script has the same resolution (could be changed, but
then the yard file chaos would be perfect) |
2.3. Busfanat Full matrix
2.3.1. Summary
The "Busfanat full matrix" is the first known way to display a full matrix in OMSI that can work with the M&R standard farm files. The first version of this matrix was released with the bus "Mercedes-Benz O405N2" from TramDüsseldorf. In the version released on 02.06.2013 the script supports three display types: line number, destination sign without line number and destination sign with line number.
2.3.2. Function sequence
- Triggering the change cycle'.
The display change is triggered by a change of the target index, the line to be displayed or the course number. Before switching, the script waits until the switch destination timer has expired and the last display is completely is described.
- Evaluation line number and course number
The line number is stored in the variable IBIS_LineCourse. The name is confusing because the variable only contains the line number. The course number is stored in variable IBIS_line_suffix. Depending on the course number, the line number is converted directly into a string using $IntToStr or additionally supplemented with letters/special characters or even replaced by these.
- Obtaining the information from the farm file
With this matrix two strings are read from the farm file: Front display top and front display bottom. Since the system macro (M.V.GetTerminusString) can only search for a string for the index in the yard file and not for the target number entered in IBIS, this index must be searched for the IBIS_TerminusIndex variable transferred from IBIS using the system macro (M.V.GetTerminusIndex). After the required strings have been loaded from the farm file with the index that is now known, the strings read out are first checked for control characters. After the control characters have been processed, the remaining strings are "rendered" into a dot pattern using the font file script, which can then be displayed on the matrix surfaces. To enable the FlipDot animation, this dot pattern is stored in 19 strings, each containing one dot line of the matrix.
- Alternate animation
The rendered dot patterns of both the currently described and the display to be described are each available in 19 line strings. By means of a change progress variable, the corresponding first x characters of each line string to be described are merged with the line strings already described, which have been shortened by the same number of characters at the beginning of the string. Then the finished line strings, which already contain the change animation, are connected by "@" characters, which become line breaks on the text texture, and stored in the strings that are used to create the text textures.
2.3.3. assets and drawbacks
+ supports M&R standard farm file (in OMSI1 a farm file formatted for the Busfanat full matrix can be made fully ANNAX compatible) | - not optimized for OMSI2 |
+ only known possibility in OMSI1 to display a FlipDot matrix that updates from left to right | - Font must be changed text-based |
+ due to command characters in yard file extremely flexible applicable | - Number of characters target text limited to 25 characters per line (due to the absence of the $CutSpaces command in OMSI1) |
+ adaptable to a wide range of requirements through numerous options in Const-File, including variable display widths | - requires up to 5 text textures depending on the version |
+ Special displays possible - performance-unfriendly due to considerable calculation effort |
2.4. Krüger-Vollmatrix
2.4.1. Summary
The Kruger Matrix script from M&R available from OMSI2.
2.4.2. Function sequence
- riggering the change cycle'.
The display change is triggered by a change of the target index, the line number or the course.
- Evaluation line number and course number
The line number is stored in the variable IBIS_LineCourse. The name is confusing because the variable only contains the line number. The course number is stored in variable IBIS_line_suffix. First the line number is converted into a string using $IntToStr. If the course number influences the line, the line string received is modified accordingly
- Obtaining the information from the Court file
With this matrix two strings are read from the farm file: Front display top and front display bottom. Since the system macro (M.V.GetTerminusString) can only search for a string for the index in the yard file and not for the target number entered in IBIS, this index must be searched for the IBIS_TerminusIndex variable transferred from IBIS using the system macro (M.V.GetTerminusIndex). After the required strings have been loaded from the yard file with the now known index, the matrix texture can be edited. First the most suitable font is selected based on the width of the strings to be displayed (i.e. the width of the text on the texture, not the number of characters). Then the texts are written on a temporary texture.
- Alternate animation
The temporary intermediate texture is read pixel by pixel and painted from left to right onto the script texture to be displayed
2.4.3. assets and drawbacks
+ developed together with OMSI2 | - not compatible with OMSI1 |
+ relatively performance-friendly due to new OMSI2 script functions | - Each ad with this script has the same resolution
(could be changed, but then
Special ad textures not uniform) |
+ supports M&R standard hof-file | |
+ Special displays possible |
2.5. Mobitec-Matrix-Script
2.5.1. Summary
This variant was first published in the "Volvo 9900" by Toastmeister as "Mobitec-Matrix-Script" and developed by Thiago.
2.5.2. Function sequence
Im Prinzip ist dieses Script ein Rollbandscript ohne Rollanimation. Am Steuergerät wird direkt der Ziel-Index in der Hofdatei, nicht wie beim IBIS eine Zielnummer, ausgewählt und das entsprechende Bild über einen Texturtausch auf die Anzeige gebracht.
2.5.3. assets and drawbacks
performance-friendly, since only finished images are loaded onto a surface | - small modification of the farm files required,
if the control unit from the Volvo 9900 is used. |
2.6. Rollerbands
With OMSI, you first have to differentiate between roll tapes with a fixed and roll tapes with a script-controlled sequence of the rolled up images. An example of a fixed sequence is the line roll bands of the M&R standard buses. On the script side, only the index of the image part to be displayed is specified here. An example of a script-controlled sequence are the destination roller conveyors of the M&R standard buses. The file path of the images to be displayed is determined from the yard file. To achieve the roll effect, two successive target images must be loaded simultaneously onto two different faces, which are, however, located at exactly the same position in the 3D file. Afterwards the roll effect is created by moving the texture via an animation variable.
2.6.1. Summary
- Display of the line number:
On the script side, only one variable runs up and down here, which specifies the index of the texture to be displayed.
- Display of the destination:
For the two texture shifts, one variable runs here for each. In addition to the texture shifting, a texture exchange is done to avoid that the same target scrolls through the area all the time.
2.6.2. assets und drawbacks
Display of line number:
+ only one 3D surface per belt required | - Order of the displayed images in cfg predefined. |
Display of the destination:
+ Order of the displayed images can be controlled by script | - two 3D surfaces per strip required |