OpenTTD Source  20241108-master-g80f628063a
roadveh_movement.h
Go to the documentation of this file.
1 /*
2  * This file is part of OpenTTD.
3  * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
4  * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
5  * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
6  */
7 
10 static const RoadDriveEntry _roadveh_drive_data_0[] = {
11  {15, 5},
12  {14, 5},
13  {13, 5},
14  {12, 5},
15  {11, 5},
16  {10, 5},
17  { 9, 5},
18  { 8, 5},
19  { 7, 5},
20  { 6, 5},
21  { 5, 5},
22  { 4, 5},
23  { 3, 5},
24  { 2, 5},
25  { 1, 5},
26  { 0, 5},
28 };
29 static const RoadDriveEntry _roadveh_drive_data_1[] = {
30  {5, 0},
31  {5, 1},
32  {5, 2},
33  {5, 3},
34  {5, 4},
35  {5, 5},
36  {5, 6},
37  {5, 7},
38  {5, 8},
39  {5, 9},
40  {5, 10},
41  {5, 11},
42  {5, 12},
43  {5, 13},
44  {5, 14},
45  {5, 15},
47 };
48 static const RoadDriveEntry _roadveh_drive_data_2[] = {
49  {5, 0},
50  {5, 1},
51  {5, 2},
52  {4, 3},
53  {3, 4},
54  {2, 5},
55  {1, 5},
56  {0, 5},
58 };
59 static const RoadDriveEntry _roadveh_drive_data_3[] = {
60  {15, 5},
61  {14, 5},
62  {13, 5},
63  {12, 5},
64  {11, 5},
65  {10, 5},
66  { 9, 6},
67  { 8, 7},
68  { 7, 8},
69  { 6, 9},
70  { 5, 10},
71  { 5, 11},
72  { 5, 12},
73  { 5, 13},
74  { 5, 14},
75  { 5, 15},
77 };
78 static const RoadDriveEntry _roadveh_drive_data_4[] = {
79  { 5, 0},
80  { 5, 1},
81  { 5, 2},
82  { 5, 3},
83  { 5, 4},
84  { 5, 5},
85  { 6, 6},
86  { 7, 7},
87  { 8, 8},
88  { 9, 9},
89  {10, 9},
90  {11, 9},
91  {12, 9},
92  {13, 9},
93  {14, 9},
94  {15, 9},
96 };
97 static const RoadDriveEntry _roadveh_drive_data_5[] = {
98  {0, 9},
99  {1, 9},
100  {2, 9},
101  {3, 10},
102  {4, 11},
103  {5, 12},
104  {5, 13},
105  {5, 14},
106  {5, 15},
108 };
109 static const RoadDriveEntry _roadveh_drive_data_6[] = {
110  {0, 6},
111  {0, 7},
112  {0, 8},
113  {0, 9},
114  {RDE_TURNED | DIAGDIR_SW, 0}
115 };
116 static const RoadDriveEntry _roadveh_drive_data_7[] = {
117  {6, 15},
118  {7, 15},
119  {8, 15},
120  {9, 15},
121  {RDE_TURNED | DIAGDIR_NW, 0}
122 };
123 static const RoadDriveEntry _roadveh_drive_data_8[] = {
124  { 0, 9},
125  { 1, 9},
126  { 2, 9},
127  { 3, 9},
128  { 4, 9},
129  { 5, 9},
130  { 6, 9},
131  { 7, 9},
132  { 8, 9},
133  { 9, 9},
134  {10, 9},
135  {11, 9},
136  {12, 9},
137  {13, 9},
138  {14, 9},
139  {15, 9},
141 };
142 static const RoadDriveEntry _roadveh_drive_data_9[] = {
143  {9, 15},
144  {9, 14},
145  {9, 13},
146  {9, 12},
147  {9, 11},
148  {9, 10},
149  {9, 9},
150  {9, 8},
151  {9, 7},
152  {9, 6},
153  {9, 5},
154  {9, 4},
155  {9, 3},
156  {9, 2},
157  {9, 1},
158  {9, 0},
160 };
161 static const RoadDriveEntry _roadveh_drive_data_10[] = {
162  {0, 9},
163  {1, 9},
164  {2, 9},
165  {3, 9},
166  {4, 9},
167  {5, 9},
168  {6, 8},
169  {7, 7},
170  {8, 6},
171  {9, 5},
172  {9, 4},
173  {9, 3},
174  {9, 2},
175  {9, 1},
176  {9, 0},
178 };
179 static const RoadDriveEntry _roadveh_drive_data_11[] = {
180  { 9, 15},
181  { 9, 14},
182  { 9, 13},
183  {10, 12},
184  {11, 11},
185  {12, 10},
186  {13, 9},
187  {14, 9},
188  {15, 9},
190 };
191 static const RoadDriveEntry _roadveh_drive_data_12[] = {
192  {15, 5},
193  {14, 5},
194  {13, 5},
195  {12, 4},
196  {11, 3},
197  {10, 2},
198  { 9, 1},
199  { 9, 0},
201 };
202 static const RoadDriveEntry _roadveh_drive_data_13[] = {
203  {9, 15},
204  {9, 14},
205  {9, 13},
206  {9, 12},
207  {9, 11},
208  {9, 10},
209  {8, 9},
210  {7, 8},
211  {6, 7},
212  {5, 6},
213  {4, 5},
214  {3, 5},
215  {2, 5},
216  {1, 5},
217  {0, 5},
219 };
220 static const RoadDriveEntry _roadveh_drive_data_14[] = {
221  {15, 8},
222  {15, 7},
223  {15, 6},
224  {15, 5},
225  {RDE_TURNED | DIAGDIR_NE, 0}
226 };
227 static const RoadDriveEntry _roadveh_drive_data_15[] = {
228  {8, 0},
229  {7, 0},
230  {6, 0},
231  {5, 0},
232  {RDE_TURNED | DIAGDIR_SE, 0}
233 };
234 static const RoadDriveEntry _roadveh_drive_data_16[] = {
235  {15, 9},
236  {14, 9},
237  {13, 9},
238  {12, 9},
239  {11, 9},
240  {10, 9},
241  { 9, 9},
242  { 8, 9},
243  { 7, 9},
244  { 6, 9},
245  { 5, 9},
246  { 4, 9},
247  { 3, 9},
248  { 2, 9},
249  { 1, 9},
250  { 0, 9},
252 };
253 static const RoadDriveEntry _roadveh_drive_data_17[] = {
254  {9, 0},
255  {9, 1},
256  {9, 2},
257  {9, 3},
258  {9, 4},
259  {9, 5},
260  {9, 6},
261  {9, 7},
262  {9, 8},
263  {9, 9},
264  {9, 10},
265  {9, 11},
266  {9, 12},
267  {9, 13},
268  {9, 14},
269  {9, 15},
271 };
272 static const RoadDriveEntry _roadveh_drive_data_18[] = {
273  {9, 0},
274  {9, 1},
275  {9, 2},
276  {9, 3},
277  {9, 4},
278  {9, 5},
279  {8, 6},
280  {7, 7},
281  {6, 8},
282  {5, 9},
283  {4, 9},
284  {3, 9},
285  {2, 9},
286  {1, 9},
287  {0, 9},
289 };
290 static const RoadDriveEntry _roadveh_drive_data_19[] = {
291  {15, 9},
292  {14, 9},
293  {13, 9},
294  {12, 10},
295  {11, 11},
296  {10, 12},
297  { 9, 13},
298  { 9, 14},
299  { 9, 15},
301 };
302 static const RoadDriveEntry _roadveh_drive_data_20[] = {
303  { 9, 0},
304  { 9, 1},
305  {10, 2},
306  {11, 3},
307  {12, 4},
308  {13, 5},
309  {14, 5},
310  {15, 5},
312 };
313 static const RoadDriveEntry _roadveh_drive_data_21[] = {
314  {0, 5},
315  {1, 5},
316  {2, 5},
317  {3, 5},
318  {4, 5},
319  {5, 6},
320  {6, 7},
321  {7, 8},
322  {8, 9},
323  {9, 10},
324  {9, 11},
325  {9, 12},
326  {9, 13},
327  {9, 14},
328  {9, 15},
330 };
331 static const RoadDriveEntry _roadveh_drive_data_22[] = {
332  {0, 8},
333  {0, 7},
334  {0, 6},
335  {0, 5},
336  {RDE_TURNED | DIAGDIR_SW, 0}
337 };
338 static const RoadDriveEntry _roadveh_drive_data_23[] = {
339  {8, 15},
340  {7, 15},
341  {6, 15},
342  {5, 15},
343  {RDE_TURNED | DIAGDIR_NW, 0}
344 };
345 static const RoadDriveEntry _roadveh_drive_data_24[] = {
346  { 0, 5},
347  { 1, 5},
348  { 2, 5},
349  { 3, 5},
350  { 4, 5},
351  { 5, 5},
352  { 6, 5},
353  { 7, 5},
354  { 8, 5},
355  { 9, 5},
356  {10, 5},
357  {11, 5},
358  {12, 5},
359  {13, 5},
360  {14, 5},
361  {15, 5},
363 };
364 static const RoadDriveEntry _roadveh_drive_data_25[] = {
365  {5, 15},
366  {5, 14},
367  {5, 13},
368  {5, 12},
369  {5, 11},
370  {5, 10},
371  {5, 9},
372  {5, 8},
373  {5, 7},
374  {5, 6},
375  {5, 5},
376  {5, 4},
377  {5, 3},
378  {5, 2},
379  {5, 1},
380  {5, 0},
382 };
383 static const RoadDriveEntry _roadveh_drive_data_26[] = {
384  {0, 5},
385  {1, 5},
386  {2, 5},
387  {3, 4},
388  {4, 3},
389  {5, 2},
390  {5, 1},
391  {5, 0},
393 };
394 static const RoadDriveEntry _roadveh_drive_data_27[] = {
395  { 5, 15},
396  { 5, 14},
397  { 5, 13},
398  { 5, 12},
399  { 5, 11},
400  { 5, 10},
401  { 6, 9},
402  { 7, 8},
403  { 8, 7},
404  { 9, 6},
405  {10, 5},
406  {11, 5},
407  {12, 5},
408  {13, 5},
409  {14, 5},
410  {15, 5},
412 };
413 static const RoadDriveEntry _roadveh_drive_data_28[] = {
414  {15, 9},
415  {14, 9},
416  {13, 9},
417  {12, 9},
418  {11, 9},
419  {10, 9},
420  { 9, 9},
421  { 8, 8},
422  { 7, 7},
423  { 6, 6},
424  { 5, 5},
425  { 5, 4},
426  { 5, 3},
427  { 5, 2},
428  { 5, 1},
429  { 5, 0},
431 };
432 static const RoadDriveEntry _roadveh_drive_data_29[] = {
433  {5, 15},
434  {5, 14},
435  {5, 13},
436  {5, 12},
437  {4, 11},
438  {3, 10},
439  {2, 9},
440  {1, 9},
441  {0, 9},
443 };
444 static const RoadDriveEntry _roadveh_drive_data_30[] = {
445  {15, 6},
446  {15, 7},
447  {15, 8},
448  {15, 9},
449  {RDE_TURNED | DIAGDIR_NE, 0}
450 };
451 static const RoadDriveEntry _roadveh_drive_data_31[] = {
452  {6, 0},
453  {7, 0},
454  {8, 0},
455  {9, 0},
456  {RDE_TURNED | DIAGDIR_SE, 0}
457 };
458 static const RoadDriveEntry _rv_station_left_sw_far[] = {
459  {15, 5},
460  {14, 5},
461  {13, 6},
462  {13, 7},
463  {13, 8},
464  {13, 9},
465  {13, 10},
466  {13, 11},
467  {12, 12},
468  {11, 12},
469  {10, 12},
470  { 9, 12},
471  { 8, 12},
472  { 7, 12},
473  { 6, 12},
474  { 5, 11},
475  { 5, 10},
476  { 5, 9},
477  { 5, 8},
478  { 5, 7},
479  { 5, 6},
480  { 5, 7},
481  { 5, 8},
482  { 5, 9},
483  { 5, 10},
484  { 5, 11},
485  { 6, 12},
486  { 7, 12},
487  { 8, 12},
488  { 9, 12},
489  {10, 12},
490  {11, 12},
491  {12, 12},
492  {13, 11},
493  {13, 10},
494  {14, 9},
495  {15, 9},
497 };
498 static const RoadDriveEntry _rv_station_left_nw_far[] = {
499  { 5, 0},
500  { 5, 1},
501  { 6, 2},
502  { 7, 2},
503  { 8, 2},
504  { 9, 2},
505  {10, 2},
506  {11, 2},
507  {12, 3},
508  {12, 4},
509  {12, 5},
510  {12, 6},
511  {12, 7},
512  {12, 8},
513  {12, 9},
514  {11, 10},
515  {10, 10},
516  { 9, 10},
517  { 8, 10},
518  { 7, 10},
519  { 6, 10},
520  { 7, 10},
521  { 8, 10},
522  { 9, 10},
523  {10, 10},
524  {11, 10},
525  {12, 9},
526  {12, 8},
527  {12, 7},
528  {12, 6},
529  {12, 5},
530  {12, 4},
531  {12, 3},
532  {11, 2},
533  {10, 2},
534  { 9, 1},
535  { 9, 0},
537 };
538 static const RoadDriveEntry _rv_station_left_sw_near[] = {
539  {15, 5},
540  {14, 5},
541  {13, 6},
542  {13, 7},
543  {13, 8},
544  {13, 9},
545  {13, 10},
546  {13, 11},
547  {12, 12},
548  {11, 12},
549  {10, 12},
550  { 9, 11},
551  { 9, 10},
552  { 9, 9},
553  { 9, 8},
554  { 9, 7},
555  { 9, 6},
556  { 9, 7},
557  { 9, 8},
558  { 9, 9},
559  { 9, 10},
560  { 9, 11},
561  {10, 12},
562  {11, 12},
563  {12, 12},
564  {13, 11},
565  {13, 10},
566  {14, 9},
567  {15, 9},
569 };
570 static const RoadDriveEntry _rv_station_left_nw_near[] = {
571  { 5, 0},
572  { 5, 1},
573  { 6, 2},
574  { 7, 2},
575  { 8, 2},
576  { 9, 2},
577  {10, 2},
578  {11, 2},
579  {12, 3},
580  {12, 4},
581  {12, 5},
582  {11, 6},
583  {10, 6},
584  { 9, 6},
585  { 8, 6},
586  { 7, 6},
587  { 6, 6},
588  { 7, 6},
589  { 8, 6},
590  { 9, 6},
591  {10, 6},
592  {11, 6},
593  {12, 5},
594  {12, 4},
595  {12, 3},
596  {11, 2},
597  {10, 2},
598  { 9, 1},
599  { 9, 0},
601 };
602 static const RoadDriveEntry _rv_station_left_ne_far[] = {
603  { 0, 9},
604  { 1, 9},
605  { 2, 8},
606  { 2, 7},
607  { 2, 6},
608  { 2, 5},
609  { 2, 4},
610  { 3, 3},
611  { 4, 3},
612  { 5, 3},
613  { 6, 3},
614  { 7, 3},
615  { 8, 3},
616  { 9, 3},
617  {10, 4},
618  {10, 5},
619  {10, 6},
620  {10, 7},
621  {10, 8},
622  {10, 9},
623  {10, 8},
624  {10, 7},
625  {10, 6},
626  {10, 5},
627  {10, 4},
628  { 9, 3},
629  { 8, 3},
630  { 7, 3},
631  { 6, 3},
632  { 5, 3},
633  { 4, 3},
634  { 3, 3},
635  { 2, 4},
636  { 1, 5},
637  { 0, 5},
639 };
640 static const RoadDriveEntry _rv_station_left_se_far[] = {
641  {9, 15},
642  {9, 14},
643  {8, 13},
644  {7, 13},
645  {6, 13},
646  {5, 13},
647  {4, 13},
648  {3, 12},
649  {3, 11},
650  {3, 10},
651  {3, 9},
652  {3, 8},
653  {3, 7},
654  {3, 6},
655  {4, 5},
656  {5, 5},
657  {6, 5},
658  {7, 5},
659  {8, 5},
660  {9, 5},
661  {8, 5},
662  {7, 5},
663  {6, 5},
664  {5, 5},
665  {4, 5},
666  {3, 6},
667  {3, 7},
668  {3, 8},
669  {3, 9},
670  {3, 10},
671  {3, 11},
672  {3, 12},
673  {4, 13},
674  {5, 14},
675  {5, 15},
677 };
678 static const RoadDriveEntry _rv_station_left_ne_near[] = {
679  {0, 9},
680  {1, 9},
681  {2, 8},
682  {2, 7},
683  {2, 6},
684  {2, 5},
685  {2, 4},
686  {3, 3},
687  {4, 3},
688  {5, 3},
689  {6, 4},
690  {6, 5},
691  {6, 6},
692  {6, 7},
693  {6, 8},
694  {6, 9},
695  {6, 8},
696  {6, 7},
697  {6, 6},
698  {6, 5},
699  {6, 4},
700  {5, 3},
701  {4, 3},
702  {3, 3},
703  {2, 4},
704  {1, 5},
705  {0, 5},
707 };
708 static const RoadDriveEntry _rv_station_left_se_near[] = {
709  {9, 15},
710  {9, 14},
711  {8, 13},
712  {7, 13},
713  {6, 13},
714  {5, 13},
715  {4, 13},
716  {3, 12},
717  {3, 11},
718  {3, 10},
719  {4, 9},
720  {5, 9},
721  {6, 9},
722  {7, 9},
723  {8, 9},
724  {9, 9},
725  {8, 9},
726  {7, 9},
727  {6, 9},
728  {5, 9},
729  {4, 9},
730  {3, 10},
731  {3, 11},
732  {3, 12},
733  {4, 13},
734  {5, 14},
735  {5, 15},
737 };
738 static const RoadDriveEntry _rv_station_right_sw_far[] = {
739  {15, 9},
740  {14, 9},
741  {13, 10},
742  {13, 11},
743  {12, 12},
744  {11, 12},
745  {10, 12},
746  { 9, 12},
747  { 8, 12},
748  { 7, 12},
749  { 6, 12},
750  { 5, 11},
751  { 5, 10},
752  { 5, 9},
753  { 5, 8},
754  { 5, 7},
755  { 5, 6},
756  { 5, 7},
757  { 5, 8},
758  { 5, 9},
759  { 5, 10},
760  { 5, 11},
761  { 6, 12},
762  { 7, 12},
763  { 8, 12},
764  { 9, 12},
765  {10, 12},
766  {11, 12},
767  {12, 12},
768  {13, 11},
769  {13, 10},
770  {13, 9},
771  {13, 8},
772  {13, 7},
773  {13, 6},
774  {14, 5},
775  {15, 5},
777 };
778 static const RoadDriveEntry _rv_station_right_nw_far[] = {
779  { 9, 0},
780  { 9, 1},
781  {10, 2},
782  {11, 2},
783  {12, 3},
784  {12, 4},
785  {12, 5},
786  {12, 6},
787  {12, 7},
788  {12, 8},
789  {12, 9},
790  {11, 10},
791  {10, 10},
792  { 9, 10},
793  { 8, 10},
794  { 7, 10},
795  { 6, 10},
796  { 7, 10},
797  { 8, 10},
798  { 9, 10},
799  {10, 10},
800  {11, 10},
801  {12, 9},
802  {12, 8},
803  {12, 7},
804  {12, 6},
805  {12, 5},
806  {12, 4},
807  {12, 3},
808  {11, 2},
809  {10, 2},
810  { 9, 2},
811  { 8, 2},
812  { 7, 2},
813  { 6, 2},
814  { 5, 1},
815  { 5, 0},
817 };
818 static const RoadDriveEntry _rv_station_right_sw_near[] = {
819  {15, 9},
820  {14, 9},
821  {13, 10},
822  {13, 11},
823  {12, 12},
824  {11, 12},
825  {10, 12},
826  { 9, 11},
827  { 9, 10},
828  { 9, 9},
829  { 9, 8},
830  { 9, 7},
831  { 9, 6},
832  { 9, 7},
833  { 9, 8},
834  { 9, 9},
835  { 9, 10},
836  { 9, 11},
837  {10, 12},
838  {11, 12},
839  {12, 12},
840  {13, 11},
841  {13, 10},
842  {13, 9},
843  {13, 8},
844  {13, 7},
845  {13, 6},
846  {14, 5},
847  {15, 5},
849 };
850 static const RoadDriveEntry _rv_station_right_nw_near[] = {
851  { 9, 0},
852  { 9, 1},
853  {10, 2},
854  {11, 2},
855  {12, 3},
856  {12, 4},
857  {12, 5},
858  {11, 6},
859  {10, 6},
860  { 9, 6},
861  { 8, 6},
862  { 7, 6},
863  { 6, 6},
864  { 7, 6},
865  { 8, 6},
866  { 9, 6},
867  {10, 6},
868  {11, 6},
869  {12, 5},
870  {12, 4},
871  {12, 3},
872  {11, 2},
873  {10, 2},
874  { 9, 2},
875  { 8, 2},
876  { 7, 2},
877  { 6, 2},
878  { 5, 1},
879  { 5, 0},
881 };
882 static const RoadDriveEntry _rv_station_right_ne_far[] = {
883  { 0, 5},
884  { 1, 5},
885  { 2, 4},
886  { 3, 3},
887  { 4, 3},
888  { 5, 3},
889  { 6, 3},
890  { 7, 3},
891  { 8, 3},
892  { 9, 3},
893  {10, 4},
894  {10, 5},
895  {10, 6},
896  {10, 7},
897  {10, 8},
898  {10, 9},
899  {10, 8},
900  {10, 7},
901  {10, 6},
902  {10, 5},
903  {10, 4},
904  { 9, 3},
905  { 8, 3},
906  { 7, 3},
907  { 6, 3},
908  { 5, 3},
909  { 4, 3},
910  { 3, 3},
911  { 2, 4},
912  { 2, 5},
913  { 2, 6},
914  { 2, 7},
915  { 2, 8},
916  { 1, 9},
917  { 0, 9},
919 };
920 static const RoadDriveEntry _rv_station_right_se_far[] = {
921  {5, 15},
922  {5, 14},
923  {4, 13},
924  {3, 12},
925  {3, 11},
926  {3, 10},
927  {3, 9},
928  {3, 8},
929  {3, 7},
930  {3, 6},
931  {4, 5},
932  {5, 5},
933  {6, 5},
934  {7, 5},
935  {8, 5},
936  {9, 5},
937  {8, 5},
938  {7, 5},
939  {6, 5},
940  {5, 5},
941  {4, 5},
942  {3, 6},
943  {3, 7},
944  {3, 8},
945  {3, 9},
946  {3, 10},
947  {3, 11},
948  {3, 12},
949  {4, 13},
950  {5, 13},
951  {6, 13},
952  {7, 13},
953  {8, 13},
954  {9, 14},
955  {9, 15},
957 };
958 static const RoadDriveEntry _rv_station_right_ne_near[] = {
959  {0, 5},
960  {1, 5},
961  {2, 4},
962  {3, 3},
963  {4, 3},
964  {5, 3},
965  {6, 4},
966  {6, 5},
967  {6, 6},
968  {6, 7},
969  {6, 8},
970  {6, 9},
971  {6, 8},
972  {6, 7},
973  {6, 6},
974  {6, 5},
975  {6, 4},
976  {5, 3},
977  {4, 3},
978  {3, 3},
979  {2, 4},
980  {2, 5},
981  {2, 6},
982  {2, 7},
983  {2, 8},
984  {1, 9},
985  {0, 9},
987 };
988 static const RoadDriveEntry _rv_station_right_se_near[] = {
989  {5, 15},
990  {5, 14},
991  {4, 13},
992  {3, 12},
993  {3, 11},
994  {3, 10},
995  {4, 9},
996  {5, 9},
997  {6, 9},
998  {7, 9},
999  {8, 9},
1000  {9, 9},
1001  {8, 9},
1002  {7, 9},
1003  {6, 9},
1004  {5, 9},
1005  {4, 9},
1006  {3, 10},
1007  {3, 11},
1008  {3, 12},
1009  {4, 13},
1010  {5, 13},
1011  {6, 13},
1012  {7, 13},
1013  {8, 13},
1014  {9, 14},
1015  {9, 15},
1016  {RDE_NEXT_TILE | DIAGDIR_SE, 0}
1017 };
1018 
1019 static const RoadDriveEntry * const _road_road_drive_data[] = {
1020  _roadveh_drive_data_0,
1021  _roadveh_drive_data_1,
1022  _roadveh_drive_data_2,
1023  _roadveh_drive_data_3,
1024  _roadveh_drive_data_4,
1025  _roadveh_drive_data_5,
1026  _roadveh_drive_data_6,
1027  _roadveh_drive_data_7,
1028  _roadveh_drive_data_8,
1029  _roadveh_drive_data_9,
1030  _roadveh_drive_data_10,
1031  _roadveh_drive_data_11,
1032  _roadveh_drive_data_12,
1033  _roadveh_drive_data_13,
1034  _roadveh_drive_data_14,
1035  _roadveh_drive_data_15,
1036  _roadveh_drive_data_16,
1037  _roadveh_drive_data_17,
1038  _roadveh_drive_data_18,
1039  _roadveh_drive_data_19,
1040  _roadveh_drive_data_20,
1041  _roadveh_drive_data_21,
1042  _roadveh_drive_data_22,
1043  _roadveh_drive_data_23,
1044  _roadveh_drive_data_24,
1045  _roadveh_drive_data_25,
1046  _roadveh_drive_data_26,
1047  _roadveh_drive_data_27,
1048  _roadveh_drive_data_28,
1049  _roadveh_drive_data_29,
1050  _roadveh_drive_data_30,
1051  _roadveh_drive_data_31,
1052  _rv_station_left_sw_far,
1053  _rv_station_left_nw_far,
1054  _rv_station_left_sw_near,
1055  _rv_station_left_nw_near,
1056  _rv_station_left_sw_far,
1057  _rv_station_left_nw_far,
1058  _rv_station_left_sw_near,
1059  _rv_station_left_nw_near,
1060  _rv_station_left_ne_far,
1061  _rv_station_left_se_far,
1062  _rv_station_left_ne_near,
1063  _rv_station_left_se_near,
1064  _rv_station_left_ne_far,
1065  _rv_station_left_se_far,
1066  _rv_station_left_ne_near,
1067  _rv_station_left_se_near,
1068  _rv_station_right_sw_far,
1069  _rv_station_right_nw_far,
1070  _rv_station_right_sw_near,
1071  _rv_station_right_nw_near,
1072  _rv_station_right_sw_far,
1073  _rv_station_right_nw_far,
1074  _rv_station_right_sw_near,
1075  _rv_station_right_nw_near,
1076  _rv_station_right_ne_far,
1077  _rv_station_right_se_far,
1078  _rv_station_right_ne_near,
1079  _rv_station_right_se_near,
1080  _rv_station_right_ne_far,
1081  _rv_station_right_se_far,
1082  _rv_station_right_ne_near,
1083  _rv_station_right_se_near,
1084 };
1085 
1087 extern const uint8_t _road_stop_stop_frame[] = {
1088  /* Duplicated left and right because of "entered stop" bit */
1089  20, 20, 16, 16, 20, 20, 16, 16,
1090  19, 19, 15, 15, 19, 19, 15, 15,
1091  16, 16, 12, 12, 16, 16, 12, 12,
1092  15, 15, 11, 11, 15, 15, 11, 11
1093 };
1094 
1095 static const RoadDriveEntry _roadveh_tram_turn_ne_0[] = {
1096  {15, 5},
1097  {14, 5},
1098  {13, 5},
1099  {12, 5},
1100  {11, 5},
1101  {10, 5},
1102  { 9, 5},
1103  { 8, 5},
1104  { 7, 5},
1105  { 6, 5},
1106  { 5, 5},
1107  { 4, 5},
1108  { 3, 5},
1109  { 2, 5},
1110  { 1, 5},
1111  { 0, 5},
1112  { 0, 6},
1113  { 0, 7},
1114  { 0, 8},
1115  { 0, 9},
1116  {RDE_TURNED | DIAGDIR_SW, 0},
1117  { 1, 9},
1118  { 2, 9},
1119  { 3, 9},
1120  { 4, 9},
1121  { 5, 9},
1122  { 6, 9},
1123  { 7, 9},
1124  { 8, 9},
1125  { 9, 9},
1126  {10, 9},
1127  {11, 9},
1128  {12, 9},
1129  {13, 9},
1130  {14, 9},
1131  {15, 9},
1132  {RDE_NEXT_TILE | DIAGDIR_SW, 0}
1133 };
1134 
1135 static const RoadDriveEntry _roadveh_tram_turn_ne_1[] = {
1136  {15, 9},
1137  {14, 9},
1138  {13, 9},
1139  {12, 9},
1140  {11, 9},
1141  {10, 9},
1142  { 9, 9},
1143  { 8, 9},
1144  { 7, 9},
1145  { 6, 9},
1146  { 5, 9},
1147  { 4, 9},
1148  { 3, 9},
1149  { 2, 9},
1150  { 1, 9},
1151  { 0, 9},
1152  { 0, 8},
1153  { 0, 7},
1154  { 0, 6},
1155  { 0, 5},
1156  {RDE_TURNED | DIAGDIR_SW, 0},
1157  { 1, 5},
1158  { 2, 5},
1159  { 3, 5},
1160  { 4, 5},
1161  { 5, 5},
1162  { 6, 5},
1163  { 7, 5},
1164  { 8, 5},
1165  { 9, 5},
1166  {10, 5},
1167  {11, 5},
1168  {12, 5},
1169  {13, 5},
1170  {14, 5},
1171  {15, 5},
1172  {RDE_NEXT_TILE | DIAGDIR_SW, 0}
1173 };
1174 
1175 static const RoadDriveEntry _roadveh_tram_turn_se_0[] = {
1176  {5, 0},
1177  {5, 1},
1178  {5, 2},
1179  {5, 3},
1180  {5, 4},
1181  {5, 5},
1182  {5, 6},
1183  {5, 7},
1184  {5, 8},
1185  {5, 9},
1186  {5, 10},
1187  {5, 11},
1188  {5, 12},
1189  {5, 13},
1190  {5, 14},
1191  {5, 15},
1192  {6, 15},
1193  {7, 15},
1194  {8, 15},
1195  {9, 15},
1196  {RDE_TURNED | DIAGDIR_NW, 0},
1197  {9, 14},
1198  {9, 13},
1199  {9, 12},
1200  {9, 11},
1201  {9, 10},
1202  {9, 9},
1203  {9, 8},
1204  {9, 7},
1205  {9, 6},
1206  {9, 5},
1207  {9, 4},
1208  {9, 3},
1209  {9, 2},
1210  {9, 1},
1211  {9, 0},
1212  {RDE_NEXT_TILE | DIAGDIR_NW, 0}
1213 };
1214 
1215 static const RoadDriveEntry _roadveh_tram_turn_se_1[] = {
1216  {9, 0},
1217  {9, 1},
1218  {9, 2},
1219  {9, 3},
1220  {9, 4},
1221  {9, 5},
1222  {9, 6},
1223  {9, 7},
1224  {9, 8},
1225  {9, 9},
1226  {9, 10},
1227  {9, 11},
1228  {9, 12},
1229  {9, 13},
1230  {9, 14},
1231  {9, 15},
1232  {8, 15},
1233  {7, 15},
1234  {6, 15},
1235  {5, 15},
1236  {RDE_TURNED | DIAGDIR_NW, 0},
1237  {5, 14},
1238  {5, 13},
1239  {5, 12},
1240  {5, 11},
1241  {5, 10},
1242  {5, 9},
1243  {5, 8},
1244  {5, 7},
1245  {5, 6},
1246  {5, 5},
1247  {5, 4},
1248  {5, 3},
1249  {5, 2},
1250  {5, 1},
1251  {5, 0},
1252  {RDE_NEXT_TILE | DIAGDIR_NW, 0}
1253 };
1254 
1255 static const RoadDriveEntry _roadveh_tram_turn_sw_0[] = {
1256  { 0, 9},
1257  { 1, 9},
1258  { 2, 9},
1259  { 3, 9},
1260  { 4, 9},
1261  { 5, 9},
1262  { 6, 9},
1263  { 7, 9},
1264  { 8, 9},
1265  { 9, 9},
1266  {10, 9},
1267  {11, 9},
1268  {12, 9},
1269  {13, 9},
1270  {14, 9},
1271  {15, 9},
1272  {15, 8},
1273  {15, 7},
1274  {15, 6},
1275  {15, 5},
1276  {RDE_TURNED | DIAGDIR_NE, 0},
1277  {14, 5},
1278  {13, 5},
1279  {12, 5},
1280  {11, 5},
1281  {10, 5},
1282  { 9, 5},
1283  { 8, 5},
1284  { 7, 5},
1285  { 6, 5},
1286  { 5, 5},
1287  { 4, 5},
1288  { 3, 5},
1289  { 2, 5},
1290  { 1, 5},
1291  { 0, 5},
1292  {RDE_NEXT_TILE | DIAGDIR_NE, 0}
1293 };
1294 static const RoadDriveEntry _roadveh_tram_turn_sw_1[] = {
1295  { 0, 5},
1296  { 1, 5},
1297  { 2, 5},
1298  { 3, 5},
1299  { 4, 5},
1300  { 5, 5},
1301  { 6, 5},
1302  { 7, 5},
1303  { 8, 5},
1304  { 9, 5},
1305  {10, 5},
1306  {11, 5},
1307  {12, 5},
1308  {13, 5},
1309  {14, 5},
1310  {15, 5},
1311  {15, 6},
1312  {15, 7},
1313  {15, 8},
1314  {15, 9},
1315  {RDE_TURNED | DIAGDIR_NE, 0},
1316  {14, 9},
1317  {13, 9},
1318  {12, 9},
1319  {11, 9},
1320  {10, 9},
1321  { 9, 9},
1322  { 8, 9},
1323  { 7, 9},
1324  { 6, 9},
1325  { 5, 9},
1326  { 4, 9},
1327  { 3, 9},
1328  { 2, 9},
1329  { 1, 9},
1330  { 0, 9},
1331  {RDE_NEXT_TILE | DIAGDIR_NE, 0}
1332 };
1333 
1334 static const RoadDriveEntry _roadveh_tram_turn_nw_0[] = {
1335  {9, 15},
1336  {9, 14},
1337  {9, 13},
1338  {9, 12},
1339  {9, 11},
1340  {9, 10},
1341  {9, 9},
1342  {9, 8},
1343  {9, 7},
1344  {9, 6},
1345  {9, 5},
1346  {9, 4},
1347  {9, 3},
1348  {9, 2},
1349  {9, 1},
1350  {9, 0},
1351  {8, 0},
1352  {7, 0},
1353  {6, 0},
1354  {5, 0},
1355  {RDE_TURNED | DIAGDIR_SE, 0},
1356  {5, 1},
1357  {5, 2},
1358  {5, 3},
1359  {5, 4},
1360  {5, 5},
1361  {5, 6},
1362  {5, 7},
1363  {5, 8},
1364  {5, 9},
1365  {5, 10},
1366  {5, 11},
1367  {5, 12},
1368  {5, 13},
1369  {5, 14},
1370  {5, 15},
1371  {RDE_NEXT_TILE | DIAGDIR_SE, 0}
1372 };
1373 static const RoadDriveEntry _roadveh_tram_turn_nw_1[] = {
1374  {5, 15},
1375  {5, 14},
1376  {5, 13},
1377  {5, 12},
1378  {5, 11},
1379  {5, 10},
1380  {5, 9},
1381  {5, 8},
1382  {5, 7},
1383  {5, 6},
1384  {5, 5},
1385  {5, 4},
1386  {5, 3},
1387  {5, 2},
1388  {5, 1},
1389  {5, 0},
1390  {6, 0},
1391  {7, 0},
1392  {8, 0},
1393  {9, 0},
1394  {RDE_TURNED | DIAGDIR_SE, 0},
1395  {9, 1},
1396  {9, 2},
1397  {9, 3},
1398  {9, 4},
1399  {9, 5},
1400  {9, 6},
1401  {9, 7},
1402  {9, 8},
1403  {9, 9},
1404  {9, 10},
1405  {9, 11},
1406  {9, 12},
1407  {9, 13},
1408  {9, 14},
1409  {9, 15},
1410  {RDE_NEXT_TILE | DIAGDIR_SE, 0}
1411 };
1412 
1413 static const RoadDriveEntry * const _road_tram_drive_data[] = {
1414  _roadveh_drive_data_0,
1415  _roadveh_drive_data_1,
1416  _roadveh_drive_data_2,
1417  _roadveh_drive_data_3,
1418  _roadveh_drive_data_4,
1419  _roadveh_drive_data_5,
1420  _roadveh_tram_turn_ne_0,
1421  _roadveh_tram_turn_se_0,
1422  _roadveh_drive_data_8,
1423  _roadveh_drive_data_9,
1424  _roadveh_drive_data_10,
1425  _roadveh_drive_data_11,
1426  _roadveh_drive_data_12,
1427  _roadveh_drive_data_13,
1428  _roadveh_tram_turn_sw_0,
1429  _roadveh_tram_turn_nw_0,
1430  _roadveh_drive_data_16,
1431  _roadveh_drive_data_17,
1432  _roadveh_drive_data_18,
1433  _roadveh_drive_data_19,
1434  _roadveh_drive_data_20,
1435  _roadveh_drive_data_21,
1436  _roadveh_tram_turn_ne_1,
1437  _roadveh_tram_turn_se_1,
1438  _roadveh_drive_data_24,
1439  _roadveh_drive_data_25,
1440  _roadveh_drive_data_26,
1441  _roadveh_drive_data_27,
1442  _roadveh_drive_data_28,
1443  _roadveh_drive_data_29,
1444  _roadveh_tram_turn_sw_1,
1445  _roadveh_tram_turn_nw_1,
1446  nullptr,
1447  nullptr,
1448  nullptr,
1449  nullptr,
1450  nullptr,
1451  nullptr,
1452  nullptr,
1453  nullptr,
1454  nullptr,
1455  nullptr,
1456  nullptr,
1457  nullptr,
1458  nullptr,
1459  nullptr,
1460  nullptr,
1461  nullptr,
1462  nullptr,
1463  nullptr,
1464  nullptr,
1465  nullptr,
1466  nullptr,
1467  nullptr,
1468  nullptr,
1469  nullptr,
1470  nullptr,
1471  nullptr,
1472  nullptr,
1473  nullptr,
1474  nullptr,
1475  nullptr,
1476  nullptr,
1477  nullptr,
1478  nullptr,
1479 };
1480 
1481 static const RoadDriveEntry * const * const _road_drive_data[2] = {
1482  _road_road_drive_data,
1483  _road_tram_drive_data,
1484 };
@ DIAGDIR_NE
Northeast, upper right on your monitor.
@ DIAGDIR_NW
Northwest.
@ DIAGDIR_SE
Southeast.
@ DIAGDIR_SW
Southwest.
static const uint RDE_TURNED
We just finished turning.
Definition: roadveh.h:62
static const uint RDE_NEXT_TILE
State information about the Road Vehicle controller.
Definition: roadveh.h:61
const uint8_t _road_stop_stop_frame[]
Table of road stop stop frames, when to stop at a road stop.