aboutsummaryrefslogtreecommitdiff
path: root/advtrains_interlocking/README.md
blob: 636ad6773983a4a145035ef1dcdd84c6b8f9bb1b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# Interlocking for Advtrains

The `advtrains_interlocking` mod provides various interlocking and signaling features for Advtrains.

## Signal types
There are two types of signals in Advtrains:

* Type 1 (speed signals): These signals only give speed information.
* Type 2 (route signals): These signals mainly provide route information, but sometimes also provide speed information.

## Signal aspect tables

Signal aspects are represented using tables with the following (optional) fields:

* `main`: The main signal aspect. It provides information on the permitted speed after passing the signal.
* `dst`: The distant signal aspect. It provides information on the permitted speed after passing the next signal.
* `shunt`: Whether the train may proceed in shunt mode and, if the main aspect is danger, proceed in shunt mode.
* `proceed_as_main`: Whether the train should exit shunt mode when proceeding.
* `type2group`: The type 2 group of the signal.
* `type2name`: The type 2 signal aspect name.

The `main` and `dst` fields may be:

* An positive number indicating the permitted speed,
* The number 0, indicating that the train should expect to stop at the current signal (or, for the `dst` field, the next signal),
* The number -1, indicating that the train can proceed (or, for the `dst` field, expect to proceed) at maximum speed, or
* The constant `false` or `nil`, indicating no change to the speed restriction.

### Node definitions

Signals should belong the following node groups:

* `advtrains_signal`: `1` for static signals, `2` for signals with variable aspects.
* `save_in_at_nodedb`: This should be set to `1` to make sure that Advtrains always has access to the signal.
* `not_blocking_trains`: Setting this to `1` prevents trains from colliding with the signal. Setting this is not necessary, but recommended.

The node definition should contain an `advtrains` field.

The `advtrains` field of the node definition should contain a `supported_aspects` table for signals with variable aspects.

For type 1 signals, the `supported_aspects` table should contain the following fields:

* `main`: A list of values supported for the main aspect.
* `dst`: A list of values supported for the distant aspect.
* `shunt`: The value for the `shunt` field of the signal aspect or `nil` if the value is variable.
* `proceed_as_main`: The value for the `proceed_as_main` field of the signal aspect.

For type 2 signals, the `supported_aspects` table should contain the following fields:

* `type`: The numeric constant `2`.
* `group`: The type 2 signal group.
* `dst_shift`: The phase shift for distant/repeater signals. This field should not be set for main signals.

The `advtrains` field of the node definition should contain a `get_aspect` function. This function is given the position of the signal and the node at the position. It should return the signal aspect table or, in the case of type 2 signals, the name of the signal aspect.

For signals with variable aspects, a corresponding `set_aspect` function should also be defined. This function is given the position of the signal, the node at the position, and the new aspect (or, in the case of type 2 signals, the name of the new signal aspect). For type 1 signals, the new aspect is not guranteed to be supported by the signal itself.

Signals should also have the following callbacks set:

* `on_rightclick` should be set to `advtrains.interlocking.signal_rc_handler`
* `can_dig` should be set to `advtrains.interlocking.signal_can_dig`
* `after_dig_node` should be set to `advtrains.interlocking.signal_after_dig`

Alternatively, custom callbacks should call the respective functions.

## Type 2 signal groups

Type 2 signals belong to signal gruops, which are registered using `advtrains.interlocking.aspects.register_type2`.

Signal group definitions include the following fields:

* `name`: The internal name of the signal group. It is recommended to use the mod name as a prefix to avoid name collisions.
* `label`: The description of the signal group.
* `main`: A list of signal aspects, from the least restrictive (i.e. proceed) to the most restrictive (i.e. danger).

Each aspect in the signal group definition table should contain the following fields:

* `name`: The internal name of the signal aspect.
* `label`: The description of the signal aspect.
* `main`, `shunt`, `proceed_as_main`: The fields corresponding to the ones in signal aspect tables.

Type 2 signal aspects are then referred to with the aspect names within the group.

## Notes

It is allowed to provide other methods of setting the signal aspect. However:

* These changes are ignored by the routesetting system.
* Please call `advtrains.interlocking.signal_readjust_aspect` after the signal aspect has changed.

## Examples
An example of type 1 signals can be found in `advtrains_signals_ks`, which provides a subset of German signals.

An example of type 2 signals can be found in `advtrains_signals_japan`, which provides a subset of Japanese signals.

The mods mentioned above are also used for demonstation purposes and can also be used for testing.