| author | miham | 
| Mon, 03 Jul 2006 08:40:17 +0000 | |
| changeset 4109 | 82b2a2ebc8a5 | 
| parent 3893 | 46169364701b | 
| child 4182 | 20d711816338 | 
| permissions | -rw-r--r-- | 
| 
2625
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
1  | 
/* $Id$ */  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
2  | 
|
| 
2963
 
6645da0a5b4a
(svn r3525) - Rename station_newgrf.[ch] to newgrf_station.[ch], and update project files.
 
peter1138 
parents: 
2625 
diff
changeset
 | 
3  | 
/** @file newgrf_station.c Functions for dealing with station classes and custom stations. */  | 
| 
2625
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
4  | 
|
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
5  | 
#include "stdafx.h"  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
6  | 
#include "openttd.h"  | 
| 
3743
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
7  | 
#include "variables.h"  | 
| 
3764
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
8  | 
#include "functions.h"  | 
| 
2625
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
9  | 
#include "debug.h"  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
10  | 
#include "sprite.h"  | 
| 
3764
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
11  | 
#include "table/sprites.h"  | 
| 
3594
 
31fd59e606c8
(svn r4484) - Newstations: Use StringIDs instead of char*s to reference our custom names.
 
peter1138 
parents: 
3587 
diff
changeset
 | 
12  | 
#include "table/strings.h"  | 
| 
2967
 
4208a82bf0d9
(svn r3530) - NewGRF: Move station resolver to newgrf_station
 
peter1138 
parents: 
2963 
diff
changeset
 | 
13  | 
#include "station.h"  | 
| 3587 | 14  | 
#include "station_map.h"  | 
| 
3752
 
a7cdd7c0c928
(svn r4740) - Newstations: add function to evaluate station callbacks
 
peter1138 
parents: 
3751 
diff
changeset
 | 
15  | 
#include "newgrf_callbacks.h"  | 
| 
2963
 
6645da0a5b4a
(svn r3525) - Rename station_newgrf.[ch] to newgrf_station.[ch], and update project files.
 
peter1138 
parents: 
2625 
diff
changeset
 | 
16  | 
#include "newgrf_station.h"  | 
| 
3743
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
17  | 
#include "newgrf_spritegroup.h"  | 
| 
2625
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
18  | 
|
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
19  | 
static StationClass station_classes[STAT_CLASS_MAX];  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
20  | 
|
| 
3786
 
73784d02aa69
(svn r4782) - Newstations: fix issue with saving/loading games with newstations on big endian architectures.
 
peter1138 
parents: 
3780 
diff
changeset
 | 
21  | 
enum {
 | 
| 
 
73784d02aa69
(svn r4782) - Newstations: fix issue with saving/loading games with newstations on big endian architectures.
 
peter1138 
parents: 
3780 
diff
changeset
 | 
22  | 
MAX_SPECLIST = 255,  | 
| 
 
73784d02aa69
(svn r4782) - Newstations: fix issue with saving/loading games with newstations on big endian architectures.
 
peter1138 
parents: 
3780 
diff
changeset
 | 
23  | 
};  | 
| 
 
73784d02aa69
(svn r4782) - Newstations: fix issue with saving/loading games with newstations on big endian architectures.
 
peter1138 
parents: 
3780 
diff
changeset
 | 
24  | 
|
| 
2625
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
25  | 
/**  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
26  | 
* Reset station classes to their default state.  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
27  | 
* This includes initialising the Default and Waypoint classes with an empty  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
28  | 
* entry, for standard stations and waypoints.  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
29  | 
*/  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
30  | 
void ResetStationClasses(void)  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
31  | 
{
 | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
32  | 
StationClassID i;  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
33  | 
	for (i = 0; i < STAT_CLASS_MAX; i++) {
 | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
34  | 
station_classes[i].id = 0;  | 
| 
3594
 
31fd59e606c8
(svn r4484) - Newstations: Use StringIDs instead of char*s to reference our custom names.
 
peter1138 
parents: 
3587 
diff
changeset
 | 
35  | 
station_classes[i].name = STR_EMPTY;  | 
| 
2625
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
36  | 
station_classes[i].stations = 0;  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
37  | 
|
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
38  | 
free(station_classes[i].spec);  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
39  | 
station_classes[i].spec = NULL;  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
40  | 
}  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
41  | 
|
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
42  | 
// Set up initial data  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
43  | 
station_classes[0].id = 'DFLT';  | 
| 
3594
 
31fd59e606c8
(svn r4484) - Newstations: Use StringIDs instead of char*s to reference our custom names.
 
peter1138 
parents: 
3587 
diff
changeset
 | 
44  | 
station_classes[0].name = STR_STAT_CLASS_DFLT;  | 
| 
2625
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
45  | 
station_classes[0].stations = 1;  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
46  | 
station_classes[0].spec = malloc(sizeof(*station_classes[0].spec));  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
47  | 
station_classes[0].spec[0] = NULL;  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
48  | 
|
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
49  | 
station_classes[1].id = 'WAYP';  | 
| 
3594
 
31fd59e606c8
(svn r4484) - Newstations: Use StringIDs instead of char*s to reference our custom names.
 
peter1138 
parents: 
3587 
diff
changeset
 | 
50  | 
station_classes[1].name = STR_STAT_CLASS_WAYP;  | 
| 
2625
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
51  | 
station_classes[1].stations = 1;  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
52  | 
station_classes[1].spec = malloc(sizeof(*station_classes[1].spec));  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
53  | 
station_classes[1].spec[0] = NULL;  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
54  | 
}  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
55  | 
|
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
56  | 
/**  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
57  | 
* Allocate a station class for the given class id.  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
58  | 
* @param classid A 32 bit value identifying the class.  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
59  | 
* @return Index into station_classes of allocated class.  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
60  | 
*/  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
61  | 
StationClassID AllocateStationClass(uint32 class)  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
62  | 
{
 | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
63  | 
StationClassID i;  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
64  | 
|
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
65  | 
	for (i = 0; i < STAT_CLASS_MAX; i++) {
 | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
66  | 
		if (station_classes[i].id == class) {
 | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
67  | 
// ClassID is already allocated, so reuse it.  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
68  | 
return i;  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
69  | 
		} else if (station_classes[i].id == 0) {
 | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
70  | 
// This class is empty, so allocate it to the ClassID.  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
71  | 
station_classes[i].id = class;  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
72  | 
return i;  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
73  | 
}  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
74  | 
}  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
75  | 
|
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
76  | 
	DEBUG(grf, 2)("StationClassAllocate: Already allocated %d classes, using default.", STAT_CLASS_MAX);
 | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
77  | 
return STAT_CLASS_DFLT;  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
78  | 
}  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
79  | 
|
| 
3642
 
a247e07fafdf
(svn r4551) - NewGRF: add string handling for newstations.
 
peter1138 
parents: 
3594 
diff
changeset
 | 
80  | 
/** Set the name of a custom station class */  | 
| 
 
a247e07fafdf
(svn r4551) - NewGRF: add string handling for newstations.
 
peter1138 
parents: 
3594 
diff
changeset
 | 
81  | 
void SetStationClassName(StationClassID sclass, StringID name)  | 
| 
 
a247e07fafdf
(svn r4551) - NewGRF: add string handling for newstations.
 
peter1138 
parents: 
3594 
diff
changeset
 | 
82  | 
{
 | 
| 
 
a247e07fafdf
(svn r4551) - NewGRF: add string handling for newstations.
 
peter1138 
parents: 
3594 
diff
changeset
 | 
83  | 
assert(sclass < STAT_CLASS_MAX);  | 
| 
 
a247e07fafdf
(svn r4551) - NewGRF: add string handling for newstations.
 
peter1138 
parents: 
3594 
diff
changeset
 | 
84  | 
station_classes[sclass].name = name;  | 
| 
 
a247e07fafdf
(svn r4551) - NewGRF: add string handling for newstations.
 
peter1138 
parents: 
3594 
diff
changeset
 | 
85  | 
}  | 
| 
 
a247e07fafdf
(svn r4551) - NewGRF: add string handling for newstations.
 
peter1138 
parents: 
3594 
diff
changeset
 | 
86  | 
|
| 
 
a247e07fafdf
(svn r4551) - NewGRF: add string handling for newstations.
 
peter1138 
parents: 
3594 
diff
changeset
 | 
87  | 
/** Retrieve the name of a custom station class */  | 
| 
 
a247e07fafdf
(svn r4551) - NewGRF: add string handling for newstations.
 
peter1138 
parents: 
3594 
diff
changeset
 | 
88  | 
StringID GetStationClassName(StationClassID sclass)  | 
| 
 
a247e07fafdf
(svn r4551) - NewGRF: add string handling for newstations.
 
peter1138 
parents: 
3594 
diff
changeset
 | 
89  | 
{
 | 
| 
 
a247e07fafdf
(svn r4551) - NewGRF: add string handling for newstations.
 
peter1138 
parents: 
3594 
diff
changeset
 | 
90  | 
assert(sclass < STAT_CLASS_MAX);  | 
| 
 
a247e07fafdf
(svn r4551) - NewGRF: add string handling for newstations.
 
peter1138 
parents: 
3594 
diff
changeset
 | 
91  | 
return station_classes[sclass].name;  | 
| 
 
a247e07fafdf
(svn r4551) - NewGRF: add string handling for newstations.
 
peter1138 
parents: 
3594 
diff
changeset
 | 
92  | 
}  | 
| 
 
a247e07fafdf
(svn r4551) - NewGRF: add string handling for newstations.
 
peter1138 
parents: 
3594 
diff
changeset
 | 
93  | 
|
| 
 
a247e07fafdf
(svn r4551) - NewGRF: add string handling for newstations.
 
peter1138 
parents: 
3594 
diff
changeset
 | 
94  | 
/** Build a list of station class name StringIDs to use in a dropdown list  | 
| 
 
a247e07fafdf
(svn r4551) - NewGRF: add string handling for newstations.
 
peter1138 
parents: 
3594 
diff
changeset
 | 
95  | 
* @return Pointer to a (static) array of StringIDs  | 
| 
 
a247e07fafdf
(svn r4551) - NewGRF: add string handling for newstations.
 
peter1138 
parents: 
3594 
diff
changeset
 | 
96  | 
*/  | 
| 
 
a247e07fafdf
(svn r4551) - NewGRF: add string handling for newstations.
 
peter1138 
parents: 
3594 
diff
changeset
 | 
97  | 
StringID *BuildStationClassDropdown(void)  | 
| 
 
a247e07fafdf
(svn r4551) - NewGRF: add string handling for newstations.
 
peter1138 
parents: 
3594 
diff
changeset
 | 
98  | 
{
 | 
| 
 
a247e07fafdf
(svn r4551) - NewGRF: add string handling for newstations.
 
peter1138 
parents: 
3594 
diff
changeset
 | 
99  | 
/* Allow room for all station classes, plus a terminator entry */  | 
| 
 
a247e07fafdf
(svn r4551) - NewGRF: add string handling for newstations.
 
peter1138 
parents: 
3594 
diff
changeset
 | 
100  | 
static StringID names[STAT_CLASS_MAX + 1];  | 
| 
 
a247e07fafdf
(svn r4551) - NewGRF: add string handling for newstations.
 
peter1138 
parents: 
3594 
diff
changeset
 | 
101  | 
uint i;  | 
| 
 
a247e07fafdf
(svn r4551) - NewGRF: add string handling for newstations.
 
peter1138 
parents: 
3594 
diff
changeset
 | 
102  | 
|
| 
 
a247e07fafdf
(svn r4551) - NewGRF: add string handling for newstations.
 
peter1138 
parents: 
3594 
diff
changeset
 | 
103  | 
/* Add each name */  | 
| 
 
a247e07fafdf
(svn r4551) - NewGRF: add string handling for newstations.
 
peter1138 
parents: 
3594 
diff
changeset
 | 
104  | 
	for (i = 0; i < STAT_CLASS_MAX && station_classes[i].id != 0; i++) {
 | 
| 
 
a247e07fafdf
(svn r4551) - NewGRF: add string handling for newstations.
 
peter1138 
parents: 
3594 
diff
changeset
 | 
105  | 
names[i] = station_classes[i].name;  | 
| 
 
a247e07fafdf
(svn r4551) - NewGRF: add string handling for newstations.
 
peter1138 
parents: 
3594 
diff
changeset
 | 
106  | 
}  | 
| 
 
a247e07fafdf
(svn r4551) - NewGRF: add string handling for newstations.
 
peter1138 
parents: 
3594 
diff
changeset
 | 
107  | 
/* Terminate the list */  | 
| 
 
a247e07fafdf
(svn r4551) - NewGRF: add string handling for newstations.
 
peter1138 
parents: 
3594 
diff
changeset
 | 
108  | 
names[i] = INVALID_STRING_ID;  | 
| 
 
a247e07fafdf
(svn r4551) - NewGRF: add string handling for newstations.
 
peter1138 
parents: 
3594 
diff
changeset
 | 
109  | 
|
| 
 
a247e07fafdf
(svn r4551) - NewGRF: add string handling for newstations.
 
peter1138 
parents: 
3594 
diff
changeset
 | 
110  | 
return names;  | 
| 
 
a247e07fafdf
(svn r4551) - NewGRF: add string handling for newstations.
 
peter1138 
parents: 
3594 
diff
changeset
 | 
111  | 
}  | 
| 
 
a247e07fafdf
(svn r4551) - NewGRF: add string handling for newstations.
 
peter1138 
parents: 
3594 
diff
changeset
 | 
112  | 
|
| 
2625
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
113  | 
/**  | 
| 3587 | 114  | 
* Get the number of station classes in use.  | 
115  | 
* @return Number of station classes.  | 
|
116  | 
*/  | 
|
117  | 
uint GetNumStationClasses(void)  | 
|
118  | 
{
 | 
|
119  | 
uint i;  | 
|
120  | 
for (i = 0; i < STAT_CLASS_MAX && station_classes[i].id != 0; i++);  | 
|
121  | 
return i;  | 
|
122  | 
}  | 
|
123  | 
||
124  | 
/**  | 
|
| 
2625
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
125  | 
* Return the number of stations for the given station class.  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
126  | 
* @param sclass Index of the station class.  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
127  | 
* @return Number of stations in the class.  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
128  | 
*/  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
129  | 
uint GetNumCustomStations(StationClassID sclass)  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
130  | 
{
 | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
131  | 
assert(sclass < STAT_CLASS_MAX);  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
132  | 
return station_classes[sclass].stations;  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
133  | 
}  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
134  | 
|
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
135  | 
/**  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
136  | 
* Tie a station spec to its station class.  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
137  | 
* @param spec The station spec.  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
138  | 
*/  | 
| 
3676
 
48444d881fbe
(svn r4593) CodeChange : Renamed spec (when using StationSpec) to statspec.
 
belugas 
parents: 
3668 
diff
changeset
 | 
139  | 
void SetCustomStationSpec(StationSpec *statspec)  | 
| 
2625
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
140  | 
{
 | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
141  | 
StationClass *station_class;  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
142  | 
int i;  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
143  | 
|
| 
3780
 
9555a46e6ca9
(svn r4772) - Newstations: when allocating a custom station (via action 0x03) check if the station has already been allocated. (Fixes duplicate waypoints in newstatsw in non-temperate climate)
 
peter1138 
parents: 
3775 
diff
changeset
 | 
144  | 
/* If the station has already been allocated, don't reallocate it. */  | 
| 
 
9555a46e6ca9
(svn r4772) - Newstations: when allocating a custom station (via action 0x03) check if the station has already been allocated. (Fixes duplicate waypoints in newstatsw in non-temperate climate)
 
peter1138 
parents: 
3775 
diff
changeset
 | 
145  | 
if (statspec->allocated) return;  | 
| 
 
9555a46e6ca9
(svn r4772) - Newstations: when allocating a custom station (via action 0x03) check if the station has already been allocated. (Fixes duplicate waypoints in newstatsw in non-temperate climate)
 
peter1138 
parents: 
3775 
diff
changeset
 | 
146  | 
|
| 
3676
 
48444d881fbe
(svn r4593) CodeChange : Renamed spec (when using StationSpec) to statspec.
 
belugas 
parents: 
3668 
diff
changeset
 | 
147  | 
assert(statspec->sclass < STAT_CLASS_MAX);  | 
| 
 
48444d881fbe
(svn r4593) CodeChange : Renamed spec (when using StationSpec) to statspec.
 
belugas 
parents: 
3668 
diff
changeset
 | 
148  | 
station_class = &station_classes[statspec->sclass];  | 
| 
2625
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
149  | 
|
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
150  | 
i = station_class->stations++;  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
151  | 
station_class->spec = realloc(station_class->spec, station_class->stations * sizeof(*station_class->spec));  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
152  | 
|
| 
3676
 
48444d881fbe
(svn r4593) CodeChange : Renamed spec (when using StationSpec) to statspec.
 
belugas 
parents: 
3668 
diff
changeset
 | 
153  | 
station_class->spec[i] = statspec;  | 
| 
3780
 
9555a46e6ca9
(svn r4772) - Newstations: when allocating a custom station (via action 0x03) check if the station has already been allocated. (Fixes duplicate waypoints in newstatsw in non-temperate climate)
 
peter1138 
parents: 
3775 
diff
changeset
 | 
154  | 
statspec->allocated = true;  | 
| 
2625
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
155  | 
}  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
156  | 
|
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
157  | 
/**  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
158  | 
* Retrieve a station spec from a class.  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
159  | 
* @param sclass Index of the station class.  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
160  | 
* @param station The station index with the class.  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
161  | 
* @return The station spec.  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
162  | 
*/  | 
| 
3676
 
48444d881fbe
(svn r4593) CodeChange : Renamed spec (when using StationSpec) to statspec.
 
belugas 
parents: 
3668 
diff
changeset
 | 
163  | 
const StationSpec *GetCustomStationSpec(StationClassID sclass, uint station)  | 
| 
2625
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
164  | 
{
 | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
165  | 
assert(sclass < STAT_CLASS_MAX);  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
166  | 
if (station < station_classes[sclass].stations)  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
167  | 
return station_classes[sclass].spec[station];  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
168  | 
|
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
169  | 
// If the custom station isn't defined any more, then the GRF file  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
170  | 
// probably was not loaded.  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
171  | 
return NULL;  | 
| 
 
66b3d632dcd2
(svn r3167) - NewGRF: Start moving custom station code to separate files.
 
peter1138 
parents:  
diff
changeset
 | 
172  | 
}  | 
| 
2967
 
4208a82bf0d9
(svn r3530) - NewGRF: Move station resolver to newgrf_station
 
peter1138 
parents: 
2963 
diff
changeset
 | 
173  | 
|
| 
 
4208a82bf0d9
(svn r3530) - NewGRF: Move station resolver to newgrf_station
 
peter1138 
parents: 
2963 
diff
changeset
 | 
174  | 
|
| 
3765
 
e057e2b740d4
(svn r4757) - Newstations: add saveload support for custom station speclists
 
peter1138 
parents: 
3764 
diff
changeset
 | 
175  | 
const StationSpec *GetCustomStationSpecByGrf(uint32 grfid, byte localidx)  | 
| 
 
e057e2b740d4
(svn r4757) - Newstations: add saveload support for custom station speclists
 
peter1138 
parents: 
3764 
diff
changeset
 | 
176  | 
{
 | 
| 
 
e057e2b740d4
(svn r4757) - Newstations: add saveload support for custom station speclists
 
peter1138 
parents: 
3764 
diff
changeset
 | 
177  | 
StationClassID i;  | 
| 
 
e057e2b740d4
(svn r4757) - Newstations: add saveload support for custom station speclists
 
peter1138 
parents: 
3764 
diff
changeset
 | 
178  | 
uint j;  | 
| 
 
e057e2b740d4
(svn r4757) - Newstations: add saveload support for custom station speclists
 
peter1138 
parents: 
3764 
diff
changeset
 | 
179  | 
|
| 
 
e057e2b740d4
(svn r4757) - Newstations: add saveload support for custom station speclists
 
peter1138 
parents: 
3764 
diff
changeset
 | 
180  | 
	for (i = STAT_CLASS_DFLT; i < STAT_CLASS_MAX; i++) {
 | 
| 
 
e057e2b740d4
(svn r4757) - Newstations: add saveload support for custom station speclists
 
peter1138 
parents: 
3764 
diff
changeset
 | 
181  | 
		for (j = 0; j < station_classes[i].stations; j++) {
 | 
| 
 
e057e2b740d4
(svn r4757) - Newstations: add saveload support for custom station speclists
 
peter1138 
parents: 
3764 
diff
changeset
 | 
182  | 
const StationSpec *statspec = station_classes[i].spec[j];  | 
| 
 
e057e2b740d4
(svn r4757) - Newstations: add saveload support for custom station speclists
 
peter1138 
parents: 
3764 
diff
changeset
 | 
183  | 
if (statspec == NULL) continue;  | 
| 
 
e057e2b740d4
(svn r4757) - Newstations: add saveload support for custom station speclists
 
peter1138 
parents: 
3764 
diff
changeset
 | 
184  | 
if (statspec->grfid == grfid && statspec->localidx == localidx) return statspec;  | 
| 
 
e057e2b740d4
(svn r4757) - Newstations: add saveload support for custom station speclists
 
peter1138 
parents: 
3764 
diff
changeset
 | 
185  | 
}  | 
| 
 
e057e2b740d4
(svn r4757) - Newstations: add saveload support for custom station speclists
 
peter1138 
parents: 
3764 
diff
changeset
 | 
186  | 
}  | 
| 
 
e057e2b740d4
(svn r4757) - Newstations: add saveload support for custom station speclists
 
peter1138 
parents: 
3764 
diff
changeset
 | 
187  | 
|
| 
 
e057e2b740d4
(svn r4757) - Newstations: add saveload support for custom station speclists
 
peter1138 
parents: 
3764 
diff
changeset
 | 
188  | 
return NULL;  | 
| 
 
e057e2b740d4
(svn r4757) - Newstations: add saveload support for custom station speclists
 
peter1138 
parents: 
3764 
diff
changeset
 | 
189  | 
}  | 
| 
 
e057e2b740d4
(svn r4757) - Newstations: add saveload support for custom station speclists
 
peter1138 
parents: 
3764 
diff
changeset
 | 
190  | 
|
| 
 
e057e2b740d4
(svn r4757) - Newstations: add saveload support for custom station speclists
 
peter1138 
parents: 
3764 
diff
changeset
 | 
191  | 
|
| 
3756
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
192  | 
/* Evaluate a tile's position within a station, and return the result a bitstuffed format.  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
193  | 
* if not centred: .TNLcCpP, if centred: .TNL..CP  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
194  | 
* T = Tile layout number (GetStationGfx), N = Number of platforms, L = Length of platforms  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
195  | 
* C = Current platform number from start, c = from end  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
196  | 
* P = Position along platform from start, p = from end  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
197  | 
* if centred, C/P start from the centre and c/p are not available.  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
198  | 
*/  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
199  | 
uint32 GetPlatformInfo(Axis axis, byte tile, int platforms, int length, int x, int y, bool centred)  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
200  | 
{
 | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
201  | 
uint32 retval = 0;  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
202  | 
|
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
203  | 
	if (axis == AXIS_X) {
 | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
204  | 
intswap(platforms, length);  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
205  | 
intswap(x, y);  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
206  | 
}  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
207  | 
|
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
208  | 
/* Limit our sizes to 4 bits */  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
209  | 
platforms = min(15, platforms);  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
210  | 
length = min(15, length);  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
211  | 
x = min(15, x);  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
212  | 
y = min(15, y);  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
213  | 
	if (centred) {
 | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
214  | 
x -= platforms / 2;  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
215  | 
y -= length / 2;  | 
| 
3790
 
66700f2c57a9
(svn r4786) - Newstations: in GetPlatformInfo() ensure negative values are only four bits
 
peter1138 
parents: 
3789 
diff
changeset
 | 
216  | 
SB(retval, 0, 4, y & 0xF);  | 
| 
 
66700f2c57a9
(svn r4786) - Newstations: in GetPlatformInfo() ensure negative values are only four bits
 
peter1138 
parents: 
3789 
diff
changeset
 | 
217  | 
SB(retval, 4, 4, x & 0xF);  | 
| 
3756
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
218  | 
	} else {
 | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
219  | 
SB(retval, 0, 4, y);  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
220  | 
SB(retval, 4, 4, length - y - 1);  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
221  | 
SB(retval, 8, 4, x);  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
222  | 
SB(retval, 12, 4, platforms - x - 1);  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
223  | 
}  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
224  | 
SB(retval, 16, 4, length);  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
225  | 
SB(retval, 20, 4, platforms);  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
226  | 
SB(retval, 24, 4, tile);  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
227  | 
|
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
228  | 
return retval;  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
229  | 
}  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
230  | 
|
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
231  | 
|
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
232  | 
/* Find the end of a railway station, from the tile, in the direction of delta.  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
233  | 
* If check_type is set, we stop if the custom station type changes.  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
234  | 
* If check_axis is set, we stop if the station direction changes.  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
235  | 
*/  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
236  | 
static TileIndex FindRailStationEnd(TileIndex tile, TileIndexDiff delta, bool check_type, bool check_axis)  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
237  | 
{
 | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
238  | 
bool waypoint;  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
239  | 
byte orig_type = 0;  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
240  | 
Axis orig_axis = AXIS_X;  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
241  | 
|
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
242  | 
waypoint = IsTileType(tile, MP_RAILWAY);  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
243  | 
|
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
244  | 
	if (waypoint) {
 | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
245  | 
if (check_axis) orig_axis = GetWaypointAxis(tile);  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
246  | 
	} else {
 | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
247  | 
if (check_type) orig_type = GetCustomStationSpecIndex(tile);  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
248  | 
if (check_axis) orig_axis = GetRailStationAxis(tile);  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
249  | 
}  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
250  | 
|
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
251  | 
	while (true) {
 | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
252  | 
TileIndex new_tile = TILE_ADD(tile, delta);  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
253  | 
|
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
254  | 
		if (waypoint) {
 | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
255  | 
if (!IsTileType(new_tile, MP_RAILWAY)) break;  | 
| 
3792
 
2eb8388731bf
(svn r4788) - Codechange: RAILTYPE_{NORMAL,ELECTRIC,...} and RAIL_TYPE_{NORMAL,SIGNAL,...} have nearly the same name, rename RAIL_TYPE_* to RAIL_TILE_* of extra clarity
 
rubidium 
parents: 
3790 
diff
changeset
 | 
256  | 
if (GetRailTileType(new_tile) != RAIL_TILE_DEPOT_WAYPOINT) break;  | 
| 
3756
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
257  | 
if (GetRailTileSubtype(new_tile) != RAIL_SUBTYPE_WAYPOINT) break;  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
258  | 
if (check_axis && GetWaypointAxis(new_tile) != orig_axis) break;  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
259  | 
		} else {
 | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
260  | 
if (!IsRailwayStationTile(new_tile)) break;  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
261  | 
if (check_type && GetCustomStationSpecIndex(new_tile) != orig_type) break;  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
262  | 
if (check_axis && GetRailStationAxis(new_tile) != orig_axis) break;  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
263  | 
}  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
264  | 
|
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
265  | 
tile = new_tile;  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
266  | 
}  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
267  | 
return tile;  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
268  | 
}  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
269  | 
|
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
270  | 
|
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
271  | 
static uint32 GetPlatformInfoHelper(TileIndex tile, bool check_type, bool check_axis, bool centred)  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
272  | 
{
 | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
273  | 
int tx = TileX(tile);  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
274  | 
int ty = TileY(tile);  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
275  | 
int sx = TileX(FindRailStationEnd(tile, TileDiffXY(-1, 0), check_type, check_axis));  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
276  | 
int sy = TileY(FindRailStationEnd(tile, TileDiffXY( 0, -1), check_type, check_axis));  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
277  | 
int ex = TileX(FindRailStationEnd(tile, TileDiffXY( 1, 0), check_type, check_axis)) + 1;  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
278  | 
int ey = TileY(FindRailStationEnd(tile, TileDiffXY( 0, 1), check_type, check_axis)) + 1;  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
279  | 
Axis axis = IsTileType(tile, MP_RAILWAY) ? GetWaypointAxis(tile) : GetRailStationAxis(tile);  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
280  | 
|
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
281  | 
tx -= sx; ex -= sx;  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
282  | 
ty -= sy; ey -= sy;  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
283  | 
|
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
284  | 
return GetPlatformInfo(axis, IsTileType(tile, MP_RAILWAY) ? 2 : GetStationGfx(tile), ex, ey, tx, ty, centred);  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
285  | 
}  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
286  | 
|
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
287  | 
|
| 
3743
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
288  | 
/* Station Resolver Functions */  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
289  | 
static uint32 StationGetRandomBits(const ResolverObject *object)  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
290  | 
{
 | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
291  | 
const Station *st = object->u.station.st;  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
292  | 
const TileIndex tile = object->u.station.tile;  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
293  | 
return (st == NULL ? 0 : st->random_bits) | (tile == INVALID_TILE ? 0 : GetStationTileRandomBits(tile) << 16);  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
294  | 
}  | 
| 
2967
 
4208a82bf0d9
(svn r3530) - NewGRF: Move station resolver to newgrf_station
 
peter1138 
parents: 
2963 
diff
changeset
 | 
295  | 
|
| 
3743
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
296  | 
|
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
297  | 
static uint32 StationGetTriggers(const ResolverObject *object)  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
298  | 
{
 | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
299  | 
const Station *st = object->u.station.st;  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
300  | 
return st == NULL ? 0 : st->waiting_triggers;  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
301  | 
}  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
302  | 
|
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
303  | 
|
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
304  | 
static void StationSetTriggers(const ResolverObject *object, int triggers)  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
305  | 
{
 | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
306  | 
Station *st = (Station*)object->u.station.st;  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
307  | 
assert(st != NULL);  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
308  | 
st->waiting_triggers = triggers;  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
309  | 
}  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
310  | 
|
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
311  | 
|
| 
3893
 
46169364701b
(svn r4960) - NewGRF: explicitly handle unsupported variables, instead of returning -1.
 
peter1138 
parents: 
3834 
diff
changeset
 | 
312  | 
static uint32 StationGetVariable(const ResolverObject *object, byte variable, byte parameter, bool *available)  | 
| 
3743
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
313  | 
{
 | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
314  | 
const Station *st = object->u.station.st;  | 
| 
3756
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
315  | 
TileIndex tile = object->u.station.tile;  | 
| 
3743
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
316  | 
|
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
317  | 
	if (st == NULL) {
 | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
318  | 
/* Station does not exist, so we're in a purchase list */  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
319  | 
		switch (variable) {
 | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
320  | 
case 0x40:  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
321  | 
case 0x41:  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
322  | 
case 0x46:  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
323  | 
case 0x47:  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
324  | 
case 0x49: return 0x2110000; /* Platforms, tracks & position */  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
325  | 
case 0x42: return 0; /* Rail type (XXX Get current type from GUI?) */  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
326  | 
case 0x43: return _current_player; /* Station owner */  | 
| 
3748
 
120f9786a654
(svn r4736) - Newstations: use the correct value for PBS status (No PBS)
 
peter1138 
parents: 
3746 
diff
changeset
 | 
327  | 
case 0x44: return 2; /* PBS status */  | 
| 
3743
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
328  | 
case 0xFA: return _date; /* Build date */  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
329  | 
}  | 
| 
3893
 
46169364701b
(svn r4960) - NewGRF: explicitly handle unsupported variables, instead of returning -1.
 
peter1138 
parents: 
3834 
diff
changeset
 | 
330  | 
|
| 
 
46169364701b
(svn r4960) - NewGRF: explicitly handle unsupported variables, instead of returning -1.
 
peter1138 
parents: 
3834 
diff
changeset
 | 
331  | 
*available = false;  | 
| 
 
46169364701b
(svn r4960) - NewGRF: explicitly handle unsupported variables, instead of returning -1.
 
peter1138 
parents: 
3834 
diff
changeset
 | 
332  | 
return -1;  | 
| 
3743
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
333  | 
}  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
334  | 
|
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
335  | 
	switch (variable) {
 | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
336  | 
/* Calculated station variables */  | 
| 
3756
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
337  | 
case 0x40: return GetPlatformInfoHelper(tile, false, false, false);  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
338  | 
case 0x41: return GetPlatformInfoHelper(tile, true, false, false);  | 
| 
3758
 
1ec9e4e26a9f
(svn r4749) - Newstations: add snowline support to variable 42.
 
peter1138 
parents: 
3756 
diff
changeset
 | 
339  | 
case 0x42: /* Terrain and rail type */  | 
| 
 
1ec9e4e26a9f
(svn r4749) - Newstations: add snowline support to variable 42.
 
peter1138 
parents: 
3756 
diff
changeset
 | 
340  | 
return ((_opt.landscape == LT_HILLY && GetTileZ(tile) > _opt.snow_line) ? 4 : 0) |  | 
| 
 
1ec9e4e26a9f
(svn r4749) - Newstations: add snowline support to variable 42.
 
peter1138 
parents: 
3756 
diff
changeset
 | 
341  | 
(GetRailType(tile) << 8);  | 
| 
3743
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
342  | 
case 0x43: return st->owner; /* Station owner */  | 
| 
3748
 
120f9786a654
(svn r4736) - Newstations: use the correct value for PBS status (No PBS)
 
peter1138 
parents: 
3746 
diff
changeset
 | 
343  | 
case 0x44: return 2; /* PBS status */  | 
| 
3756
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
344  | 
case 0x46: return GetPlatformInfoHelper(tile, false, false, true);  | 
| 
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
345  | 
case 0x47: return GetPlatformInfoHelper(tile, true, false, true);  | 
| 
3743
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
346  | 
		case 0x48: { /* Accepted cargo types */
 | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
347  | 
CargoID cargo_type;  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
348  | 
uint32 value = 0;  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
349  | 
|
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
350  | 
			for (cargo_type = 0; cargo_type < NUM_CARGO; cargo_type++) {
 | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
351  | 
if (HASBIT(st->goods[cargo_type].waiting_acceptance, 15)) SETBIT(value, cargo_type);  | 
| 
2967
 
4208a82bf0d9
(svn r3530) - NewGRF: Move station resolver to newgrf_station
 
peter1138 
parents: 
2963 
diff
changeset
 | 
352  | 
}  | 
| 
3743
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
353  | 
return value;  | 
| 
2967
 
4208a82bf0d9
(svn r3530) - NewGRF: Move station resolver to newgrf_station
 
peter1138 
parents: 
2963 
diff
changeset
 | 
354  | 
}  | 
| 
3756
 
b3835d8eca4d
(svn r4747) - Newstations: implement support for variables 40, 41, 46, 47 and 49.
 
peter1138 
parents: 
3755 
diff
changeset
 | 
355  | 
case 0x49: return GetPlatformInfoHelper(tile, false, true, false);  | 
| 
2967
 
4208a82bf0d9
(svn r3530) - NewGRF: Move station resolver to newgrf_station
 
peter1138 
parents: 
2963 
diff
changeset
 | 
356  | 
|
| 
3743
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
357  | 
/* Variables which use the parameter */  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
358  | 
case 0x60: return GB(st->goods[parameter].waiting_acceptance, 0, 12);  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
359  | 
case 0x61: return st->goods[parameter].days_since_pickup;  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
360  | 
case 0x62: return st->goods[parameter].rating;  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
361  | 
case 0x63: return st->goods[parameter].enroute_time;  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
362  | 
case 0x64: return st->goods[parameter].last_speed | (st->goods[parameter].last_age << 8);  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
363  | 
|
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
364  | 
/* General station properties */  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
365  | 
case 0x82: return 50;  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
366  | 
case 0x84: return st->string_id;  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
367  | 
case 0x86: return 0;  | 
| 
3746
 
bde65debf648
(svn r4734) - Newstations: add more variables and fix a division by zero.
 
peter1138 
parents: 
3743 
diff
changeset
 | 
368  | 
case 0x8A: return st->had_vehicle_of_type;  | 
| 
3743
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
369  | 
case 0xF0: return st->facilities;  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
370  | 
case 0xF1: return st->airport_type;  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
371  | 
case 0xF2: return st->truck_stops->status;  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
372  | 
case 0xF3: return st->bus_stops->status;  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
373  | 
case 0xF6: return st->airport_flags;  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
374  | 
case 0xF7: return st->airport_flags & 0xFF;  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
375  | 
case 0xFA: return st->build_date;  | 
| 
2967
 
4208a82bf0d9
(svn r3530) - NewGRF: Move station resolver to newgrf_station
 
peter1138 
parents: 
2963 
diff
changeset
 | 
376  | 
}  | 
| 
3743
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
377  | 
|
| 
3746
 
bde65debf648
(svn r4734) - Newstations: add more variables and fix a division by zero.
 
peter1138 
parents: 
3743 
diff
changeset
 | 
378  | 
/* Handle cargo variables (deprecated) */  | 
| 
 
bde65debf648
(svn r4734) - Newstations: add more variables and fix a division by zero.
 
peter1138 
parents: 
3743 
diff
changeset
 | 
379  | 
	if (variable >= 0x8C && variable <= 0xEC) {
 | 
| 
 
bde65debf648
(svn r4734) - Newstations: add more variables and fix a division by zero.
 
peter1138 
parents: 
3743 
diff
changeset
 | 
380  | 
const GoodsEntry *g = &st->goods[GB(variable - 0x8C, 3, 4)];  | 
| 
 
bde65debf648
(svn r4734) - Newstations: add more variables and fix a division by zero.
 
peter1138 
parents: 
3743 
diff
changeset
 | 
381  | 
		switch (GB(variable - 0x8C, 0, 3)) {
 | 
| 
 
bde65debf648
(svn r4734) - Newstations: add more variables and fix a division by zero.
 
peter1138 
parents: 
3743 
diff
changeset
 | 
382  | 
case 0: return g->waiting_acceptance;  | 
| 
 
bde65debf648
(svn r4734) - Newstations: add more variables and fix a division by zero.
 
peter1138 
parents: 
3743 
diff
changeset
 | 
383  | 
case 1: return g->waiting_acceptance & 0xFF;  | 
| 
 
bde65debf648
(svn r4734) - Newstations: add more variables and fix a division by zero.
 
peter1138 
parents: 
3743 
diff
changeset
 | 
384  | 
case 2: return g->days_since_pickup;  | 
| 
 
bde65debf648
(svn r4734) - Newstations: add more variables and fix a division by zero.
 
peter1138 
parents: 
3743 
diff
changeset
 | 
385  | 
case 3: return g->rating;  | 
| 
 
bde65debf648
(svn r4734) - Newstations: add more variables and fix a division by zero.
 
peter1138 
parents: 
3743 
diff
changeset
 | 
386  | 
case 4: return g->enroute_from;  | 
| 
 
bde65debf648
(svn r4734) - Newstations: add more variables and fix a division by zero.
 
peter1138 
parents: 
3743 
diff
changeset
 | 
387  | 
case 5: return g->enroute_time;  | 
| 
 
bde65debf648
(svn r4734) - Newstations: add more variables and fix a division by zero.
 
peter1138 
parents: 
3743 
diff
changeset
 | 
388  | 
case 6: return g->last_speed;  | 
| 
 
bde65debf648
(svn r4734) - Newstations: add more variables and fix a division by zero.
 
peter1138 
parents: 
3743 
diff
changeset
 | 
389  | 
case 7: return g->last_age;  | 
| 
 
bde65debf648
(svn r4734) - Newstations: add more variables and fix a division by zero.
 
peter1138 
parents: 
3743 
diff
changeset
 | 
390  | 
}  | 
| 
 
bde65debf648
(svn r4734) - Newstations: add more variables and fix a division by zero.
 
peter1138 
parents: 
3743 
diff
changeset
 | 
391  | 
}  | 
| 
 
bde65debf648
(svn r4734) - Newstations: add more variables and fix a division by zero.
 
peter1138 
parents: 
3743 
diff
changeset
 | 
392  | 
|
| 
3743
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
393  | 
	DEBUG(grf, 1)("Unhandled station property 0x%X", variable);
 | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
394  | 
|
| 
3893
 
46169364701b
(svn r4960) - NewGRF: explicitly handle unsupported variables, instead of returning -1.
 
peter1138 
parents: 
3834 
diff
changeset
 | 
395  | 
*available = false;  | 
| 
3743
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
396  | 
return -1;  | 
| 
2967
 
4208a82bf0d9
(svn r3530) - NewGRF: Move station resolver to newgrf_station
 
peter1138 
parents: 
2963 
diff
changeset
 | 
397  | 
}  | 
| 
 
4208a82bf0d9
(svn r3530) - NewGRF: Move station resolver to newgrf_station
 
peter1138 
parents: 
2963 
diff
changeset
 | 
398  | 
|
| 
 
4208a82bf0d9
(svn r3530) - NewGRF: Move station resolver to newgrf_station
 
peter1138 
parents: 
2963 
diff
changeset
 | 
399  | 
|
| 
3743
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
400  | 
static const SpriteGroup *StationResolveReal(const ResolverObject *object, const SpriteGroup *group)  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
401  | 
{
 | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
402  | 
const Station *st = object->u.station.st;  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
403  | 
const StationSpec *statspec = object->u.station.statspec;  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
404  | 
uint set;  | 
| 
2967
 
4208a82bf0d9
(svn r3530) - NewGRF: Move station resolver to newgrf_station
 
peter1138 
parents: 
2963 
diff
changeset
 | 
405  | 
|
| 
3743
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
406  | 
uint cargo = 0;  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
407  | 
CargoID cargo_type = CT_INVALID; /* XXX Pick the correct cargo type */  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
408  | 
|
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
409  | 
	if (st == NULL || statspec->sclass == STAT_CLASS_WAYP) {
 | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
410  | 
return group->g.real.loading[0];  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
411  | 
}  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
412  | 
|
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
413  | 
	if (cargo_type == CT_INVALID) {
 | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
414  | 
		for (cargo_type = 0; cargo_type < NUM_CARGO; cargo_type++) {
 | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
415  | 
cargo += GB(st->goods[cargo_type].waiting_acceptance, 0, 12);  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
416  | 
}  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
417  | 
	} else {
 | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
418  | 
cargo = GB(st->goods[cargo_type].waiting_acceptance, 0, 12);  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
419  | 
}  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
420  | 
|
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
421  | 
if (HASBIT(statspec->flags, 1)) cargo /= (st->trainst_w + st->trainst_h);  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
422  | 
cargo = min(0xfff, cargo);  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
423  | 
|
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
424  | 
	if (cargo > statspec->cargo_threshold) {
 | 
| 
3749
 
96b36cc10188
(svn r4737) - Newstations: 'real' groups picked the wrong set of loading or loaded sprites
 
peter1138 
parents: 
3748 
diff
changeset
 | 
425  | 
		if (group->g.real.num_loading > 0) {
 | 
| 
3787
 
a71d1c53e679
(svn r4783) - Newstations: fix graphical bug that affected some stations when a station has a high amount of cargo waiting.
 
peter1138 
parents: 
3786 
diff
changeset
 | 
426  | 
set = ((cargo - statspec->cargo_threshold) * group->g.real.num_loading) / (4096 - statspec->cargo_threshold);  | 
| 
3749
 
96b36cc10188
(svn r4737) - Newstations: 'real' groups picked the wrong set of loading or loaded sprites
 
peter1138 
parents: 
3748 
diff
changeset
 | 
427  | 
return group->g.real.loading[set];  | 
| 
3743
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
428  | 
}  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
429  | 
	} else {
 | 
| 
3749
 
96b36cc10188
(svn r4737) - Newstations: 'real' groups picked the wrong set of loading or loaded sprites
 
peter1138 
parents: 
3748 
diff
changeset
 | 
430  | 
		if (group->g.real.num_loaded > 0) {
 | 
| 
 
96b36cc10188
(svn r4737) - Newstations: 'real' groups picked the wrong set of loading or loaded sprites
 
peter1138 
parents: 
3748 
diff
changeset
 | 
431  | 
set = (cargo * group->g.real.num_loaded) / (statspec->cargo_threshold + 1);  | 
| 
 
96b36cc10188
(svn r4737) - Newstations: 'real' groups picked the wrong set of loading or loaded sprites
 
peter1138 
parents: 
3748 
diff
changeset
 | 
432  | 
return group->g.real.loaded[set];  | 
| 
3743
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
433  | 
}  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
434  | 
}  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
435  | 
|
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
436  | 
return group->g.real.loading[0];  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
437  | 
}  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
438  | 
|
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
439  | 
|
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
440  | 
static void NewStationResolver(ResolverObject *res, const StationSpec *statspec, const Station *st, TileIndex tile)  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
441  | 
{
 | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
442  | 
res->GetRandomBits = StationGetRandomBits;  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
443  | 
res->GetTriggers = StationGetTriggers;  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
444  | 
res->SetTriggers = StationSetTriggers;  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
445  | 
res->GetVariable = StationGetVariable;  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
446  | 
res->ResolveReal = StationResolveReal;  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
447  | 
|
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
448  | 
res->u.station.st = st;  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
449  | 
res->u.station.statspec = statspec;  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
450  | 
res->u.station.tile = tile;  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
451  | 
|
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
452  | 
res->callback = 0;  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
453  | 
res->callback_param1 = 0;  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
454  | 
res->callback_param2 = 0;  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
455  | 
res->last_value = 0;  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
456  | 
res->trigger = 0;  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
457  | 
res->reseed = 0;  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
458  | 
}  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
459  | 
|
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
460  | 
|
| 
3751
 
785501c18d0d
(svn r4739) - Newstations: remove cargo type parameter of GetCustomStationRelocation() as we can determine it internally
 
peter1138 
parents: 
3750 
diff
changeset
 | 
461  | 
SpriteID GetCustomStationRelocation(const StationSpec *statspec, const Station *st, TileIndex tile)  | 
| 
3743
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
462  | 
{
 | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
463  | 
const SpriteGroup *group;  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
464  | 
ResolverObject object;  | 
| 
3751
 
785501c18d0d
(svn r4739) - Newstations: remove cargo type parameter of GetCustomStationRelocation() as we can determine it internally
 
peter1138 
parents: 
3750 
diff
changeset
 | 
465  | 
CargoID ctype = (st == NULL) ? GC_PURCHASE : GC_DEFAULT_NA;  | 
| 
3743
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
466  | 
|
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
467  | 
NewStationResolver(&object, statspec, st, tile);  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
468  | 
|
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
469  | 
group = Resolve(statspec->spritegroup[ctype], &object);  | 
| 
3750
 
a8600490f8fc
(svn r4738) - Newstations: attach all sprite group cargo types, not just the default and purchase pseudo types, to a station spec.
 
peter1138 
parents: 
3749 
diff
changeset
 | 
470  | 
	if ((group == NULL || group->type != SGT_RESULT) && ctype != GC_DEFAULT_NA) {
 | 
| 
 
a8600490f8fc
(svn r4738) - Newstations: attach all sprite group cargo types, not just the default and purchase pseudo types, to a station spec.
 
peter1138 
parents: 
3749 
diff
changeset
 | 
471  | 
group = Resolve(statspec->spritegroup[GC_DEFAULT_NA], &object);  | 
| 
 
a8600490f8fc
(svn r4738) - Newstations: attach all sprite group cargo types, not just the default and purchase pseudo types, to a station spec.
 
peter1138 
parents: 
3749 
diff
changeset
 | 
472  | 
}  | 
| 
3743
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
473  | 
	if ((group == NULL || group->type != SGT_RESULT) && ctype != GC_DEFAULT) {
 | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
474  | 
group = Resolve(statspec->spritegroup[GC_DEFAULT], &object);  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
475  | 
}  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
476  | 
|
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
477  | 
if (group == NULL || group->type != SGT_RESULT) return 0;  | 
| 
 
c6efbe2e3a28
(svn r4729) - Newstations: replace old station resolver with new resolver code (as has happened for vehicles)
 
peter1138 
parents: 
3741 
diff
changeset
 | 
478  | 
|
| 
3775
 
f3f1ba3111fa
(svn r4767) - Newstations: fix loading / use of custom ground sprites
 
peter1138 
parents: 
3766 
diff
changeset
 | 
479  | 
return group->g.result.sprite - 0x42D;  | 
| 
 
f3f1ba3111fa
(svn r4767) - Newstations: fix loading / use of custom ground sprites
 
peter1138 
parents: 
3766 
diff
changeset
 | 
480  | 
}  | 
| 
 
f3f1ba3111fa
(svn r4767) - Newstations: fix loading / use of custom ground sprites
 
peter1138 
parents: 
3766 
diff
changeset
 | 
481  | 
|
| 
 
f3f1ba3111fa
(svn r4767) - Newstations: fix loading / use of custom ground sprites
 
peter1138 
parents: 
3766 
diff
changeset
 | 
482  | 
|
| 
 
f3f1ba3111fa
(svn r4767) - Newstations: fix loading / use of custom ground sprites
 
peter1138 
parents: 
3766 
diff
changeset
 | 
483  | 
SpriteID GetCustomStationGroundRelocation(const StationSpec *statspec, const Station *st, TileIndex tile)  | 
| 
 
f3f1ba3111fa
(svn r4767) - Newstations: fix loading / use of custom ground sprites
 
peter1138 
parents: 
3766 
diff
changeset
 | 
484  | 
{
 | 
| 
 
f3f1ba3111fa
(svn r4767) - Newstations: fix loading / use of custom ground sprites
 
peter1138 
parents: 
3766 
diff
changeset
 | 
485  | 
const SpriteGroup *group;  | 
| 
 
f3f1ba3111fa
(svn r4767) - Newstations: fix loading / use of custom ground sprites
 
peter1138 
parents: 
3766 
diff
changeset
 | 
486  | 
ResolverObject object;  | 
| 
 
f3f1ba3111fa
(svn r4767) - Newstations: fix loading / use of custom ground sprites
 
peter1138 
parents: 
3766 
diff
changeset
 | 
487  | 
CargoID ctype = (st == NULL) ? GC_PURCHASE : GC_DEFAULT_NA;  | 
| 
 
f3f1ba3111fa
(svn r4767) - Newstations: fix loading / use of custom ground sprites
 
peter1138 
parents: 
3766 
diff
changeset
 | 
488  | 
|
| 
 
f3f1ba3111fa
(svn r4767) - Newstations: fix loading / use of custom ground sprites
 
peter1138 
parents: 
3766 
diff
changeset
 | 
489  | 
NewStationResolver(&object, statspec, st, tile);  | 
| 
 
f3f1ba3111fa
(svn r4767) - Newstations: fix loading / use of custom ground sprites
 
peter1138 
parents: 
3766 
diff
changeset
 | 
490  | 
object.callback_param1 = 1; /* Indicate we are resolving the ground sprite */  | 
| 
 
f3f1ba3111fa
(svn r4767) - Newstations: fix loading / use of custom ground sprites
 
peter1138 
parents: 
3766 
diff
changeset
 | 
491  | 
|
| 
 
f3f1ba3111fa
(svn r4767) - Newstations: fix loading / use of custom ground sprites
 
peter1138 
parents: 
3766 
diff
changeset
 | 
492  | 
group = Resolve(statspec->spritegroup[ctype], &object);  | 
| 
 
f3f1ba3111fa
(svn r4767) - Newstations: fix loading / use of custom ground sprites
 
peter1138 
parents: 
3766 
diff
changeset
 | 
493  | 
	if ((group == NULL || group->type != SGT_RESULT) && ctype != GC_DEFAULT_NA) {
 | 
| 
 
f3f1ba3111fa
(svn r4767) - Newstations: fix loading / use of custom ground sprites
 
peter1138 
parents: 
3766 
diff
changeset
 | 
494  | 
group = Resolve(statspec->spritegroup[GC_DEFAULT_NA], &object);  | 
| 
 
f3f1ba3111fa
(svn r4767) - Newstations: fix loading / use of custom ground sprites
 
peter1138 
parents: 
3766 
diff
changeset
 | 
495  | 
}  | 
| 
 
f3f1ba3111fa
(svn r4767) - Newstations: fix loading / use of custom ground sprites
 
peter1138 
parents: 
3766 
diff
changeset
 | 
496  | 
	if ((group == NULL || group->type != SGT_RESULT) && ctype != GC_DEFAULT) {
 | 
| 
 
f3f1ba3111fa
(svn r4767) - Newstations: fix loading / use of custom ground sprites
 
peter1138 
parents: 
3766 
diff
changeset
 | 
497  | 
group = Resolve(statspec->spritegroup[GC_DEFAULT], &object);  | 
| 
 
f3f1ba3111fa
(svn r4767) - Newstations: fix loading / use of custom ground sprites
 
peter1138 
parents: 
3766 
diff
changeset
 | 
498  | 
}  | 
| 
 
f3f1ba3111fa
(svn r4767) - Newstations: fix loading / use of custom ground sprites
 
peter1138 
parents: 
3766 
diff
changeset
 | 
499  | 
	if ((group == NULL || group->type != SGT_RESULT)) {
 | 
| 
 
f3f1ba3111fa
(svn r4767) - Newstations: fix loading / use of custom ground sprites
 
peter1138 
parents: 
3766 
diff
changeset
 | 
500  | 
group = Resolve(statspec->groundgroup, &object);  | 
| 
 
f3f1ba3111fa
(svn r4767) - Newstations: fix loading / use of custom ground sprites
 
peter1138 
parents: 
3766 
diff
changeset
 | 
501  | 
}  | 
| 
 
f3f1ba3111fa
(svn r4767) - Newstations: fix loading / use of custom ground sprites
 
peter1138 
parents: 
3766 
diff
changeset
 | 
502  | 
|
| 
 
f3f1ba3111fa
(svn r4767) - Newstations: fix loading / use of custom ground sprites
 
peter1138 
parents: 
3766 
diff
changeset
 | 
503  | 
if (group == NULL || group->type != SGT_RESULT) return 0;  | 
| 
 
f3f1ba3111fa
(svn r4767) - Newstations: fix loading / use of custom ground sprites
 
peter1138 
parents: 
3766 
diff
changeset
 | 
504  | 
|
| 
 
f3f1ba3111fa
(svn r4767) - Newstations: fix loading / use of custom ground sprites
 
peter1138 
parents: 
3766 
diff
changeset
 | 
505  | 
return group->g.result.sprite - 0x42D;  | 
| 
2967
 
4208a82bf0d9
(svn r3530) - NewGRF: Move station resolver to newgrf_station
 
peter1138 
parents: 
2963 
diff
changeset
 | 
506  | 
}  | 
| 3587 | 507  | 
|
508  | 
||
| 
3752
 
a7cdd7c0c928
(svn r4740) - Newstations: add function to evaluate station callbacks
 
peter1138 
parents: 
3751 
diff
changeset
 | 
509  | 
uint16 GetStationCallback(uint16 callback, uint32 param1, uint32 param2, const StationSpec *statspec, const Station *st, TileIndex tile)  | 
| 
 
a7cdd7c0c928
(svn r4740) - Newstations: add function to evaluate station callbacks
 
peter1138 
parents: 
3751 
diff
changeset
 | 
510  | 
{
 | 
| 
 
a7cdd7c0c928
(svn r4740) - Newstations: add function to evaluate station callbacks
 
peter1138 
parents: 
3751 
diff
changeset
 | 
511  | 
const SpriteGroup *group;  | 
| 
 
a7cdd7c0c928
(svn r4740) - Newstations: add function to evaluate station callbacks
 
peter1138 
parents: 
3751 
diff
changeset
 | 
512  | 
ResolverObject object;  | 
| 
 
a7cdd7c0c928
(svn r4740) - Newstations: add function to evaluate station callbacks
 
peter1138 
parents: 
3751 
diff
changeset
 | 
513  | 
CargoID ctype = (st == NULL) ? GC_PURCHASE : GC_DEFAULT_NA;  | 
| 
 
a7cdd7c0c928
(svn r4740) - Newstations: add function to evaluate station callbacks
 
peter1138 
parents: 
3751 
diff
changeset
 | 
514  | 
|
| 
 
a7cdd7c0c928
(svn r4740) - Newstations: add function to evaluate station callbacks
 
peter1138 
parents: 
3751 
diff
changeset
 | 
515  | 
NewStationResolver(&object, statspec, st, tile);  | 
| 
 
a7cdd7c0c928
(svn r4740) - Newstations: add function to evaluate station callbacks
 
peter1138 
parents: 
3751 
diff
changeset
 | 
516  | 
|
| 
 
a7cdd7c0c928
(svn r4740) - Newstations: add function to evaluate station callbacks
 
peter1138 
parents: 
3751 
diff
changeset
 | 
517  | 
object.callback = callback;  | 
| 
 
a7cdd7c0c928
(svn r4740) - Newstations: add function to evaluate station callbacks
 
peter1138 
parents: 
3751 
diff
changeset
 | 
518  | 
object.callback_param1 = param1;  | 
| 
 
a7cdd7c0c928
(svn r4740) - Newstations: add function to evaluate station callbacks
 
peter1138 
parents: 
3751 
diff
changeset
 | 
519  | 
object.callback_param2 = param2;  | 
| 
 
a7cdd7c0c928
(svn r4740) - Newstations: add function to evaluate station callbacks
 
peter1138 
parents: 
3751 
diff
changeset
 | 
520  | 
|
| 
 
a7cdd7c0c928
(svn r4740) - Newstations: add function to evaluate station callbacks
 
peter1138 
parents: 
3751 
diff
changeset
 | 
521  | 
group = Resolve(statspec->spritegroup[ctype], &object);  | 
| 
 
a7cdd7c0c928
(svn r4740) - Newstations: add function to evaluate station callbacks
 
peter1138 
parents: 
3751 
diff
changeset
 | 
522  | 
	if ((group == NULL || group->type != SGT_CALLBACK) && ctype != GC_DEFAULT_NA) {
 | 
| 
 
a7cdd7c0c928
(svn r4740) - Newstations: add function to evaluate station callbacks
 
peter1138 
parents: 
3751 
diff
changeset
 | 
523  | 
group = Resolve(statspec->spritegroup[GC_DEFAULT_NA], &object);  | 
| 
 
a7cdd7c0c928
(svn r4740) - Newstations: add function to evaluate station callbacks
 
peter1138 
parents: 
3751 
diff
changeset
 | 
524  | 
}  | 
| 
 
a7cdd7c0c928
(svn r4740) - Newstations: add function to evaluate station callbacks
 
peter1138 
parents: 
3751 
diff
changeset
 | 
525  | 
	if ((group == NULL || group->type != SGT_CALLBACK) && ctype != GC_DEFAULT) {
 | 
| 
 
a7cdd7c0c928
(svn r4740) - Newstations: add function to evaluate station callbacks
 
peter1138 
parents: 
3751 
diff
changeset
 | 
526  | 
group = Resolve(statspec->spritegroup[GC_DEFAULT], &object);  | 
| 
 
a7cdd7c0c928
(svn r4740) - Newstations: add function to evaluate station callbacks
 
peter1138 
parents: 
3751 
diff
changeset
 | 
527  | 
}  | 
| 
 
a7cdd7c0c928
(svn r4740) - Newstations: add function to evaluate station callbacks
 
peter1138 
parents: 
3751 
diff
changeset
 | 
528  | 
|
| 
 
a7cdd7c0c928
(svn r4740) - Newstations: add function to evaluate station callbacks
 
peter1138 
parents: 
3751 
diff
changeset
 | 
529  | 
if (group == NULL || group->type != SGT_CALLBACK) return CALLBACK_FAILED;  | 
| 
 
a7cdd7c0c928
(svn r4740) - Newstations: add function to evaluate station callbacks
 
peter1138 
parents: 
3751 
diff
changeset
 | 
530  | 
|
| 
 
a7cdd7c0c928
(svn r4740) - Newstations: add function to evaluate station callbacks
 
peter1138 
parents: 
3751 
diff
changeset
 | 
531  | 
return group->g.callback.result;  | 
| 
 
a7cdd7c0c928
(svn r4740) - Newstations: add function to evaluate station callbacks
 
peter1138 
parents: 
3751 
diff
changeset
 | 
532  | 
}  | 
| 
 
a7cdd7c0c928
(svn r4740) - Newstations: add function to evaluate station callbacks
 
peter1138 
parents: 
3751 
diff
changeset
 | 
533  | 
|
| 
 
a7cdd7c0c928
(svn r4740) - Newstations: add function to evaluate station callbacks
 
peter1138 
parents: 
3751 
diff
changeset
 | 
534  | 
|
| 3587 | 535  | 
/**  | 
536  | 
* Allocate a StationSpec to a Station. This is called once per build operation.  | 
|
537  | 
* @param spec StationSpec to allocate.  | 
|
538  | 
* @param st Station to allocate it to.  | 
|
539  | 
* @param exec Whether to actually allocate the spec.  | 
|
540  | 
* @return Index within the Station's spec list, or -1 if the allocation failed.  | 
|
541  | 
*/  | 
|
| 
3676
 
48444d881fbe
(svn r4593) CodeChange : Renamed spec (when using StationSpec) to statspec.
 
belugas 
parents: 
3668 
diff
changeset
 | 
542  | 
int AllocateSpecToStation(const StationSpec *statspec, Station *st, bool exec)  | 
| 3587 | 543  | 
{
 | 
544  | 
uint i;  | 
|
545  | 
||
| 
3676
 
48444d881fbe
(svn r4593) CodeChange : Renamed spec (when using StationSpec) to statspec.
 
belugas 
parents: 
3668 
diff
changeset
 | 
546  | 
if (statspec == NULL) return 0;  | 
| 3587 | 547  | 
|
548  | 
/* Check if this spec has already been allocated */  | 
|
| 
3786
 
73784d02aa69
(svn r4782) - Newstations: fix issue with saving/loading games with newstations on big endian architectures.
 
peter1138 
parents: 
3780 
diff
changeset
 | 
549  | 
	for (i = 1; i < st->num_specs && i < MAX_SPECLIST; i++) {
 | 
| 
3676
 
48444d881fbe
(svn r4593) CodeChange : Renamed spec (when using StationSpec) to statspec.
 
belugas 
parents: 
3668 
diff
changeset
 | 
550  | 
if (st->speclist[i].spec == statspec) return i;  | 
| 3587 | 551  | 
}  | 
552  | 
||
| 
3786
 
73784d02aa69
(svn r4782) - Newstations: fix issue with saving/loading games with newstations on big endian architectures.
 
peter1138 
parents: 
3780 
diff
changeset
 | 
553  | 
	for (i = 1; i < st->num_specs && i < MAX_SPECLIST; i++) {
 | 
| 3587 | 554  | 
if (st->speclist[i].spec == NULL && st->speclist[i].grfid == 0) break;  | 
555  | 
}  | 
|
556  | 
||
| 
3786
 
73784d02aa69
(svn r4782) - Newstations: fix issue with saving/loading games with newstations on big endian architectures.
 
peter1138 
parents: 
3780 
diff
changeset
 | 
557  | 
if (i == MAX_SPECLIST) return -1;  | 
| 3587 | 558  | 
|
| 
3730
 
1aca9dabaeea
(svn r4707) - NewGRF: minor code duffage; return early and less indentation.
 
peter1138 
parents: 
3676 
diff
changeset
 | 
559  | 
	if (exec) {
 | 
| 
 
1aca9dabaeea
(svn r4707) - NewGRF: minor code duffage; return early and less indentation.
 
peter1138 
parents: 
3676 
diff
changeset
 | 
560  | 
		if (i >= st->num_specs) {
 | 
| 
 
1aca9dabaeea
(svn r4707) - NewGRF: minor code duffage; return early and less indentation.
 
peter1138 
parents: 
3676 
diff
changeset
 | 
561  | 
st->num_specs = i + 1;  | 
| 
 
1aca9dabaeea
(svn r4707) - NewGRF: minor code duffage; return early and less indentation.
 
peter1138 
parents: 
3676 
diff
changeset
 | 
562  | 
st->speclist = realloc(st->speclist, st->num_specs * sizeof(*st->speclist));  | 
| 
 
1aca9dabaeea
(svn r4707) - NewGRF: minor code duffage; return early and less indentation.
 
peter1138 
parents: 
3676 
diff
changeset
 | 
563  | 
|
| 
 
1aca9dabaeea
(svn r4707) - NewGRF: minor code duffage; return early and less indentation.
 
peter1138 
parents: 
3676 
diff
changeset
 | 
564  | 
			if (st->num_specs == 2) {
 | 
| 
 
1aca9dabaeea
(svn r4707) - NewGRF: minor code duffage; return early and less indentation.
 
peter1138 
parents: 
3676 
diff
changeset
 | 
565  | 
/* Initial allocation */  | 
| 
 
1aca9dabaeea
(svn r4707) - NewGRF: minor code duffage; return early and less indentation.
 
peter1138 
parents: 
3676 
diff
changeset
 | 
566  | 
st->speclist[0].spec = NULL;  | 
| 
 
1aca9dabaeea
(svn r4707) - NewGRF: minor code duffage; return early and less indentation.
 
peter1138 
parents: 
3676 
diff
changeset
 | 
567  | 
st->speclist[0].grfid = 0;  | 
| 
 
1aca9dabaeea
(svn r4707) - NewGRF: minor code duffage; return early and less indentation.
 
peter1138 
parents: 
3676 
diff
changeset
 | 
568  | 
st->speclist[0].localidx = 0;  | 
| 3587 | 569  | 
}  | 
| 
3730
 
1aca9dabaeea
(svn r4707) - NewGRF: minor code duffage; return early and less indentation.
 
peter1138 
parents: 
3676 
diff
changeset
 | 
570  | 
}  | 
| 3587 | 571  | 
|
| 
3730
 
1aca9dabaeea
(svn r4707) - NewGRF: minor code duffage; return early and less indentation.
 
peter1138 
parents: 
3676 
diff
changeset
 | 
572  | 
st->speclist[i].spec = statspec;  | 
| 
 
1aca9dabaeea
(svn r4707) - NewGRF: minor code duffage; return early and less indentation.
 
peter1138 
parents: 
3676 
diff
changeset
 | 
573  | 
st->speclist[i].grfid = statspec->grfid;  | 
| 
 
1aca9dabaeea
(svn r4707) - NewGRF: minor code duffage; return early and less indentation.
 
peter1138 
parents: 
3676 
diff
changeset
 | 
574  | 
st->speclist[i].localidx = statspec->localidx;  | 
| 3587 | 575  | 
}  | 
576  | 
||
| 
3730
 
1aca9dabaeea
(svn r4707) - NewGRF: minor code duffage; return early and less indentation.
 
peter1138 
parents: 
3676 
diff
changeset
 | 
577  | 
return i;  | 
| 3587 | 578  | 
}  | 
579  | 
||
580  | 
||
581  | 
/** Deallocate a StationSpec from a Station. Called when removing a single station tile.  | 
|
582  | 
* @param st Station to work with.  | 
|
583  | 
* @param specindex Index of the custom station within the Station's spec list.  | 
|
584  | 
* @return Indicates whether the StationSpec was deallocated.  | 
|
585  | 
*/  | 
|
586  | 
bool DeallocateSpecFromStation(Station *st, byte specindex)  | 
|
587  | 
{
 | 
|
588  | 
bool freeable = true;  | 
|
589  | 
||
590  | 
/* specindex of 0 (default) is never freeable */  | 
|
591  | 
if (specindex == 0) return false;  | 
|
592  | 
||
593  | 
/* Check all tiles over the station to check if the specindex is still in use */  | 
|
594  | 
	BEGIN_TILE_LOOP(tile, st->trainst_w, st->trainst_h, st->train_tile) {
 | 
|
595  | 
		if (IsTileType(tile, MP_STATION) && GetStationIndex(tile) == st->index && IsRailwayStation(tile) && GetCustomStationSpecIndex(tile) == specindex) {
 | 
|
596  | 
freeable = false;  | 
|
597  | 
break;  | 
|
598  | 
}  | 
|
599  | 
} END_TILE_LOOP(tile, st->trainst_w, st->trainst_h, st->train_tile)  | 
|
600  | 
||
601  | 
	if (freeable) {
 | 
|
602  | 
/* This specindex is no longer in use, so deallocate it */  | 
|
603  | 
st->speclist[specindex].spec = NULL;  | 
|
604  | 
st->speclist[specindex].grfid = 0;  | 
|
605  | 
st->speclist[specindex].localidx = 0;  | 
|
606  | 
||
607  | 
/* If this was the highest spec index, reallocate */  | 
|
608  | 
		if (specindex == st->num_specs - 1) {
 | 
|
609  | 
for (; st->speclist[st->num_specs - 1].grfid == 0 && st->num_specs > 1; st->num_specs--);  | 
|
610  | 
||
611  | 
			if (st->num_specs > 1) {
 | 
|
612  | 
st->speclist = realloc(st->speclist, st->num_specs * sizeof(*st->speclist));  | 
|
613  | 
			} else {
 | 
|
614  | 
free(st->speclist);  | 
|
615  | 
st->num_specs = 0;  | 
|
616  | 
st->speclist = NULL;  | 
|
617  | 
}  | 
|
618  | 
}  | 
|
619  | 
}  | 
|
620  | 
||
621  | 
return freeable;  | 
|
622  | 
}  | 
|
| 
3764
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
623  | 
|
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
624  | 
/** Draw representation of a station tile for GUI purposes.  | 
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
625  | 
* @param x, y Position of image.  | 
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
626  | 
* @param dir Direction.  | 
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
627  | 
* @param railtype Rail type.  | 
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
628  | 
* @param sclass, station Type of station.  | 
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
629  | 
* @return True if the tile was drawn (allows for fallback to default graphic)  | 
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
630  | 
*/  | 
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
631  | 
bool DrawStationTile(int x, int y, RailType railtype, Axis axis, StationClassID sclass, uint station)  | 
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
632  | 
{
 | 
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
633  | 
const StationSpec *statspec;  | 
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
634  | 
const DrawTileSprites *sprites;  | 
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
635  | 
const DrawTileSeqStruct *seq;  | 
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
636  | 
const RailtypeInfo *rti = GetRailTypeInfo(railtype);  | 
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
637  | 
SpriteID relocation;  | 
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
638  | 
PalSpriteID image;  | 
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
639  | 
PalSpriteID colourmod = SPRITE_PALETTE(PLAYER_SPRITE_COLOR(_local_player));  | 
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
640  | 
uint tile = 2;  | 
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
641  | 
|
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
642  | 
statspec = GetCustomStationSpec(sclass, station);  | 
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
643  | 
if (statspec == NULL) return false;  | 
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
644  | 
|
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
645  | 
relocation = GetCustomStationRelocation(statspec, NULL, INVALID_TILE);  | 
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
646  | 
|
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
647  | 
	if (HASBIT(statspec->callbackmask, CBM_CUSTOM_LAYOUT)) {
 | 
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
648  | 
uint16 callback = GetStationCallback(CBID_STATION_SPRITE_LAYOUT, 0x2110000, 0, statspec, NULL, INVALID_TILE);  | 
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
649  | 
if (callback != CALLBACK_FAILED) tile = callback;  | 
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
650  | 
}  | 
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
651  | 
|
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
652  | 
	if (statspec->renderdata == NULL) {
 | 
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
653  | 
sprites = GetStationTileLayout(tile + axis);  | 
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
654  | 
	} else {
 | 
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
655  | 
sprites = &statspec->renderdata[(tile < statspec->tiles) ? tile + axis : axis];  | 
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
656  | 
}  | 
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
657  | 
|
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
658  | 
image = sprites->ground_sprite;  | 
| 
3775
 
f3f1ba3111fa
(svn r4767) - Newstations: fix loading / use of custom ground sprites
 
peter1138 
parents: 
3766 
diff
changeset
 | 
659  | 
	if (HASBIT(image, 31)) {
 | 
| 
 
f3f1ba3111fa
(svn r4767) - Newstations: fix loading / use of custom ground sprites
 
peter1138 
parents: 
3766 
diff
changeset
 | 
660  | 
CLRBIT(image, 31);  | 
| 
 
f3f1ba3111fa
(svn r4767) - Newstations: fix loading / use of custom ground sprites
 
peter1138 
parents: 
3766 
diff
changeset
 | 
661  | 
image += GetCustomStationGroundRelocation(statspec, NULL, INVALID_TILE);  | 
| 
 
f3f1ba3111fa
(svn r4767) - Newstations: fix loading / use of custom ground sprites
 
peter1138 
parents: 
3766 
diff
changeset
 | 
662  | 
image += rti->custom_ground_offset;  | 
| 
 
f3f1ba3111fa
(svn r4767) - Newstations: fix loading / use of custom ground sprites
 
peter1138 
parents: 
3766 
diff
changeset
 | 
663  | 
	} else {
 | 
| 
 
f3f1ba3111fa
(svn r4767) - Newstations: fix loading / use of custom ground sprites
 
peter1138 
parents: 
3766 
diff
changeset
 | 
664  | 
image += rti->total_offset;  | 
| 
 
f3f1ba3111fa
(svn r4767) - Newstations: fix loading / use of custom ground sprites
 
peter1138 
parents: 
3766 
diff
changeset
 | 
665  | 
}  | 
| 
3764
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
666  | 
|
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
667  | 
if (image & PALETTE_MODIFIER_COLOR) image &= SPRITE_MASK;  | 
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
668  | 
DrawSprite(image, x, y);  | 
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
669  | 
|
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
670  | 
	foreach_draw_tile_seq(seq, sprites->seq) {
 | 
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
671  | 
Point pt;  | 
| 
3775
 
f3f1ba3111fa
(svn r4767) - Newstations: fix loading / use of custom ground sprites
 
peter1138 
parents: 
3766 
diff
changeset
 | 
672  | 
image = seq->image;  | 
| 
 
f3f1ba3111fa
(svn r4767) - Newstations: fix loading / use of custom ground sprites
 
peter1138 
parents: 
3766 
diff
changeset
 | 
673  | 
		if (HASBIT(image, 30)) {
 | 
| 
 
f3f1ba3111fa
(svn r4767) - Newstations: fix loading / use of custom ground sprites
 
peter1138 
parents: 
3766 
diff
changeset
 | 
674  | 
CLRBIT(image, 30);  | 
| 
 
f3f1ba3111fa
(svn r4767) - Newstations: fix loading / use of custom ground sprites
 
peter1138 
parents: 
3766 
diff
changeset
 | 
675  | 
image += rti->total_offset;  | 
| 
 
f3f1ba3111fa
(svn r4767) - Newstations: fix loading / use of custom ground sprites
 
peter1138 
parents: 
3766 
diff
changeset
 | 
676  | 
		} else {
 | 
| 
 
f3f1ba3111fa
(svn r4767) - Newstations: fix loading / use of custom ground sprites
 
peter1138 
parents: 
3766 
diff
changeset
 | 
677  | 
image += relocation;  | 
| 
 
f3f1ba3111fa
(svn r4767) - Newstations: fix loading / use of custom ground sprites
 
peter1138 
parents: 
3766 
diff
changeset
 | 
678  | 
}  | 
| 
3764
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
679  | 
|
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
680  | 
		if ((byte)seq->delta_z != 0x80) {
 | 
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
681  | 
pt = RemapCoords(seq->delta_x, seq->delta_y, seq->delta_z);  | 
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
682  | 
DrawSprite((image & SPRITE_MASK) | colourmod, x + pt.x, y + pt.y);  | 
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
683  | 
}  | 
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
684  | 
}  | 
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
685  | 
|
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
686  | 
return true;  | 
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
687  | 
}  | 
| 
 
ebcaf412fb3a
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
 
peter1138 
parents: 
3758 
diff
changeset
 | 
688  | 
|
| 
3766
 
f0077e6b6f99
(svn r4758) - Newstations: add support for 'blocked' station tiles, which no train can pass.
 
peter1138 
parents: 
3765 
diff
changeset
 | 
689  | 
/* Check if a rail station tile is traversable.  | 
| 
 
f0077e6b6f99
(svn r4758) - Newstations: add support for 'blocked' station tiles, which no train can pass.
 
peter1138 
parents: 
3765 
diff
changeset
 | 
690  | 
* XXX This could be cached (during build) in the map array to save on all the dereferencing */  | 
| 
 
f0077e6b6f99
(svn r4758) - Newstations: add support for 'blocked' station tiles, which no train can pass.
 
peter1138 
parents: 
3765 
diff
changeset
 | 
691  | 
bool IsStationTileBlocked(TileIndex tile)  | 
| 
 
f0077e6b6f99
(svn r4758) - Newstations: add support for 'blocked' station tiles, which no train can pass.
 
peter1138 
parents: 
3765 
diff
changeset
 | 
692  | 
{
 | 
| 
 
f0077e6b6f99
(svn r4758) - Newstations: add support for 'blocked' station tiles, which no train can pass.
 
peter1138 
parents: 
3765 
diff
changeset
 | 
693  | 
const Station *st;  | 
| 
 
f0077e6b6f99
(svn r4758) - Newstations: add support for 'blocked' station tiles, which no train can pass.
 
peter1138 
parents: 
3765 
diff
changeset
 | 
694  | 
const StationSpec *statspec;  | 
| 
 
f0077e6b6f99
(svn r4758) - Newstations: add support for 'blocked' station tiles, which no train can pass.
 
peter1138 
parents: 
3765 
diff
changeset
 | 
695  | 
uint specindex;  | 
| 
 
f0077e6b6f99
(svn r4758) - Newstations: add support for 'blocked' station tiles, which no train can pass.
 
peter1138 
parents: 
3765 
diff
changeset
 | 
696  | 
|
| 
 
f0077e6b6f99
(svn r4758) - Newstations: add support for 'blocked' station tiles, which no train can pass.
 
peter1138 
parents: 
3765 
diff
changeset
 | 
697  | 
if (!IsCustomStationSpecIndex(tile)) return false;  | 
| 
 
f0077e6b6f99
(svn r4758) - Newstations: add support for 'blocked' station tiles, which no train can pass.
 
peter1138 
parents: 
3765 
diff
changeset
 | 
698  | 
|
| 
 
f0077e6b6f99
(svn r4758) - Newstations: add support for 'blocked' station tiles, which no train can pass.
 
peter1138 
parents: 
3765 
diff
changeset
 | 
699  | 
st = GetStationByTile(tile);  | 
| 
 
f0077e6b6f99
(svn r4758) - Newstations: add support for 'blocked' station tiles, which no train can pass.
 
peter1138 
parents: 
3765 
diff
changeset
 | 
700  | 
specindex = GetCustomStationSpecIndex(tile);  | 
| 
 
f0077e6b6f99
(svn r4758) - Newstations: add support for 'blocked' station tiles, which no train can pass.
 
peter1138 
parents: 
3765 
diff
changeset
 | 
701  | 
if (specindex >= st->num_specs) return false;  | 
| 
 
f0077e6b6f99
(svn r4758) - Newstations: add support for 'blocked' station tiles, which no train can pass.
 
peter1138 
parents: 
3765 
diff
changeset
 | 
702  | 
|
| 
 
f0077e6b6f99
(svn r4758) - Newstations: add support for 'blocked' station tiles, which no train can pass.
 
peter1138 
parents: 
3765 
diff
changeset
 | 
703  | 
statspec = st->speclist[specindex].spec;  | 
| 
 
f0077e6b6f99
(svn r4758) - Newstations: add support for 'blocked' station tiles, which no train can pass.
 
peter1138 
parents: 
3765 
diff
changeset
 | 
704  | 
if (statspec == NULL) return false;  | 
| 
 
f0077e6b6f99
(svn r4758) - Newstations: add support for 'blocked' station tiles, which no train can pass.
 
peter1138 
parents: 
3765 
diff
changeset
 | 
705  | 
|
| 
 
f0077e6b6f99
(svn r4758) - Newstations: add support for 'blocked' station tiles, which no train can pass.
 
peter1138 
parents: 
3765 
diff
changeset
 | 
706  | 
return HASBIT(statspec->blocked, GetStationGfx(tile));  | 
| 
 
f0077e6b6f99
(svn r4758) - Newstations: add support for 'blocked' station tiles, which no train can pass.
 
peter1138 
parents: 
3765 
diff
changeset
 | 
707  | 
}  | 
| 
3789
 
bf75e48227de
(svn r4785) - Newstations: don't draw catenary on non-track tiles
 
glx 
parents: 
3787 
diff
changeset
 | 
708  | 
|
| 
 
bf75e48227de
(svn r4785) - Newstations: don't draw catenary on non-track tiles
 
glx 
parents: 
3787 
diff
changeset
 | 
709  | 
/* Check if a rail station tile is electrifiable.  | 
| 
 
bf75e48227de
(svn r4785) - Newstations: don't draw catenary on non-track tiles
 
glx 
parents: 
3787 
diff
changeset
 | 
710  | 
* XXX This could be cached (during build) in the map array to save on all the dereferencing */  | 
| 
 
bf75e48227de
(svn r4785) - Newstations: don't draw catenary on non-track tiles
 
glx 
parents: 
3787 
diff
changeset
 | 
711  | 
bool IsStationTileElectrifiable(TileIndex tile)  | 
| 
 
bf75e48227de
(svn r4785) - Newstations: don't draw catenary on non-track tiles
 
glx 
parents: 
3787 
diff
changeset
 | 
712  | 
{
 | 
| 
 
bf75e48227de
(svn r4785) - Newstations: don't draw catenary on non-track tiles
 
glx 
parents: 
3787 
diff
changeset
 | 
713  | 
const Station *st;  | 
| 
 
bf75e48227de
(svn r4785) - Newstations: don't draw catenary on non-track tiles
 
glx 
parents: 
3787 
diff
changeset
 | 
714  | 
const StationSpec *statspec;  | 
| 
 
bf75e48227de
(svn r4785) - Newstations: don't draw catenary on non-track tiles
 
glx 
parents: 
3787 
diff
changeset
 | 
715  | 
uint specindex;  | 
| 
 
bf75e48227de
(svn r4785) - Newstations: don't draw catenary on non-track tiles
 
glx 
parents: 
3787 
diff
changeset
 | 
716  | 
|
| 
 
bf75e48227de
(svn r4785) - Newstations: don't draw catenary on non-track tiles
 
glx 
parents: 
3787 
diff
changeset
 | 
717  | 
if (!IsCustomStationSpecIndex(tile)) return true;  | 
| 
 
bf75e48227de
(svn r4785) - Newstations: don't draw catenary on non-track tiles
 
glx 
parents: 
3787 
diff
changeset
 | 
718  | 
|
| 
 
bf75e48227de
(svn r4785) - Newstations: don't draw catenary on non-track tiles
 
glx 
parents: 
3787 
diff
changeset
 | 
719  | 
st = GetStationByTile(tile);  | 
| 
 
bf75e48227de
(svn r4785) - Newstations: don't draw catenary on non-track tiles
 
glx 
parents: 
3787 
diff
changeset
 | 
720  | 
specindex = GetCustomStationSpecIndex(tile);  | 
| 
 
bf75e48227de
(svn r4785) - Newstations: don't draw catenary on non-track tiles
 
glx 
parents: 
3787 
diff
changeset
 | 
721  | 
if (specindex >= st->num_specs) return false;  | 
| 
 
bf75e48227de
(svn r4785) - Newstations: don't draw catenary on non-track tiles
 
glx 
parents: 
3787 
diff
changeset
 | 
722  | 
|
| 
 
bf75e48227de
(svn r4785) - Newstations: don't draw catenary on non-track tiles
 
glx 
parents: 
3787 
diff
changeset
 | 
723  | 
statspec = st->speclist[specindex].spec;  | 
| 
 
bf75e48227de
(svn r4785) - Newstations: don't draw catenary on non-track tiles
 
glx 
parents: 
3787 
diff
changeset
 | 
724  | 
if (statspec == NULL) return false;  | 
| 
 
bf75e48227de
(svn r4785) - Newstations: don't draw catenary on non-track tiles
 
glx 
parents: 
3787 
diff
changeset
 | 
725  | 
|
| 
3834
 
5209dc0bd96a
(svn r4856) - Newstations: catenary was not drawn on some station tiles
 
glx 
parents: 
3792 
diff
changeset
 | 
726  | 
return HASBIT(statspec->pylons, GetStationGfx(tile)) || !HASBIT(statspec->wires, GetStationGfx(tile));  | 
| 
3789
 
bf75e48227de
(svn r4785) - Newstations: don't draw catenary on non-track tiles
 
glx 
parents: 
3787 
diff
changeset
 | 
727  | 
}  |