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