author | peter1138 |
Fri, 28 Apr 2006 21:32:59 +0000 | |
changeset 3688 | fa1326dee4e3 |
parent 3686 | 16627c28741d |
child 3693 | c154dbd20439 |
permissions | -rw-r--r-- |
2186 | 1 |
/* $Id$ */ |
2 |
||
0 | 3 |
#include "stdafx.h" |
1891
862800791170
(svn r2397) - CodeChange: rename all "ttd" files to "openttd" files.
Darkvater
parents:
1883
diff
changeset
|
4 |
#include "openttd.h" |
3686
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
5 |
#include "variables.h" |
1299
39c06aba09aa
(svn r1803) Move debugging stuff into files of it's own
tron
parents:
1197
diff
changeset
|
6 |
#include "debug.h" |
2163
b17b313113a0
(svn r2673) Include functions.h directly, not globally via openttd.h
tron
parents:
2159
diff
changeset
|
7 |
#include "functions.h" |
0 | 8 |
#include "engine.h" |
3686
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
9 |
#include "train.h" |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
10 |
#include "player.h" |
2982
eb7f50dcb249
(svn r3557) - NewGRF: move callback enums to a new file as more than just engines will use them
peter1138
parents:
2971
diff
changeset
|
11 |
#include "newgrf_callbacks.h" |
2962
f0a49b646c48
(svn r3524) - Split newgrf features from engine.[ch] into newgrf_engine.[ch], and add the new files to project files.
peter1138
parents:
2951
diff
changeset
|
12 |
#include "newgrf_engine.h" |
3686
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
13 |
#include "newgrf_station.h" |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
14 |
#include "newgrf_spritegroup.h" |
0 | 15 |
|
16 |
// TODO: We don't support cargo-specific wagon overrides. Pretty exotic... ;-) --pasky |
|
17 |
||
1477 | 18 |
typedef struct WagonOverride { |
0 | 19 |
byte *train_id; |
20 |
int trains; |
|
2488
1e98c71e5f6a
(svn r3014) -NewGRF, Codechange: Make all sprite group references be pointers instead of copying the data around.
peter1138
parents:
2477
diff
changeset
|
21 |
SpriteGroup *group; |
1477 | 22 |
} WagonOverride; |
0 | 23 |
|
1477 | 24 |
typedef struct WagonOverrides { |
0 | 25 |
int overrides_count; |
1477 | 26 |
WagonOverride *overrides; |
27 |
} WagonOverrides; |
|
0 | 28 |
|
1477 | 29 |
static WagonOverrides _engine_wagon_overrides[TOTAL_NUM_ENGINES]; |
30 |
||
2477
225b2916fe2a
(svn r3003) Change int, uint, uin16 and byte to EngineID where appropriate, plus some related changes (mostly casts)
tron
parents:
2469
diff
changeset
|
31 |
void SetWagonOverrideSprites(EngineID engine, SpriteGroup *group, byte *train_id, |
1477 | 32 |
int trains) |
0 | 33 |
{ |
1477 | 34 |
WagonOverrides *wos; |
35 |
WagonOverride *wo; |
|
0 | 36 |
|
37 |
wos = &_engine_wagon_overrides[engine]; |
|
38 |
wos->overrides_count++; |
|
39 |
wos->overrides = realloc(wos->overrides, |
|
1477 | 40 |
wos->overrides_count * sizeof(*wos->overrides)); |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
114
diff
changeset
|
41 |
|
0 | 42 |
wo = &wos->overrides[wos->overrides_count - 1]; |
408
48da21eb9ff2
(svn r605) -newgrf: Framework for supporting variational spritegroups . Deterministic only at the moment, but random ones support shouldn't be that difficult now It doesn't do anything, but makes these actions actually possible (pasky).
darkvater
parents:
405
diff
changeset
|
43 |
/* FIXME: If we are replacing an override, release original SpriteGroup |
48da21eb9ff2
(svn r605) -newgrf: Framework for supporting variational spritegroups . Deterministic only at the moment, but random ones support shouldn't be that difficult now It doesn't do anything, but makes these actions actually possible (pasky).
darkvater
parents:
405
diff
changeset
|
44 |
* to prevent leaks. But first we need to refcount the SpriteGroup. |
48da21eb9ff2
(svn r605) -newgrf: Framework for supporting variational spritegroups . Deterministic only at the moment, but random ones support shouldn't be that difficult now It doesn't do anything, but makes these actions actually possible (pasky).
darkvater
parents:
405
diff
changeset
|
45 |
* --pasky */ |
2488
1e98c71e5f6a
(svn r3014) -NewGRF, Codechange: Make all sprite group references be pointers instead of copying the data around.
peter1138
parents:
2477
diff
changeset
|
46 |
wo->group = group; |
0 | 47 |
wo->trains = trains; |
48 |
wo->train_id = malloc(trains); |
|
49 |
memcpy(wo->train_id, train_id, trains); |
|
50 |
} |
|
51 |
||
2477
225b2916fe2a
(svn r3003) Change int, uint, uin16 and byte to EngineID where appropriate, plus some related changes (mostly casts)
tron
parents:
2469
diff
changeset
|
52 |
static const SpriteGroup *GetWagonOverrideSpriteSet(EngineID engine, byte overriding_engine) |
0 | 53 |
{ |
2242
512eae2cf006
(svn r2762) Simplify a loop, remove an unused variable and add many consts
tron
parents:
2204
diff
changeset
|
54 |
const WagonOverrides *wos = &_engine_wagon_overrides[engine]; |
0 | 55 |
int i; |
56 |
||
408
48da21eb9ff2
(svn r605) -newgrf: Framework for supporting variational spritegroups . Deterministic only at the moment, but random ones support shouldn't be that difficult now It doesn't do anything, but makes these actions actually possible (pasky).
darkvater
parents:
405
diff
changeset
|
57 |
// XXX: This could turn out to be a timesink on profiles. We could |
48da21eb9ff2
(svn r605) -newgrf: Framework for supporting variational spritegroups . Deterministic only at the moment, but random ones support shouldn't be that difficult now It doesn't do anything, but makes these actions actually possible (pasky).
darkvater
parents:
405
diff
changeset
|
58 |
// always just dedicate 65535 bytes for an [engine][train] trampoline |
48da21eb9ff2
(svn r605) -newgrf: Framework for supporting variational spritegroups . Deterministic only at the moment, but random ones support shouldn't be that difficult now It doesn't do anything, but makes these actions actually possible (pasky).
darkvater
parents:
405
diff
changeset
|
59 |
// for O(1). Or O(logMlogN) and searching binary tree or smt. like |
48da21eb9ff2
(svn r605) -newgrf: Framework for supporting variational spritegroups . Deterministic only at the moment, but random ones support shouldn't be that difficult now It doesn't do anything, but makes these actions actually possible (pasky).
darkvater
parents:
405
diff
changeset
|
60 |
// that. --pasky |
0 | 61 |
|
62 |
for (i = 0; i < wos->overrides_count; i++) { |
|
2242
512eae2cf006
(svn r2762) Simplify a loop, remove an unused variable and add many consts
tron
parents:
2204
diff
changeset
|
63 |
const WagonOverride *wo = &wos->overrides[i]; |
0 | 64 |
int j; |
65 |
||
66 |
for (j = 0; j < wo->trains; j++) { |
|
67 |
if (wo->train_id[j] == overriding_engine) |
|
2488
1e98c71e5f6a
(svn r3014) -NewGRF, Codechange: Make all sprite group references be pointers instead of copying the data around.
peter1138
parents:
2477
diff
changeset
|
68 |
return wo->group; |
0 | 69 |
} |
70 |
} |
|
71 |
return NULL; |
|
72 |
} |
|
73 |
||
2491
15a117630a4f
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
74 |
/** |
15a117630a4f
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
75 |
* Unload all wagon override sprite groups. |
15a117630a4f
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
76 |
*/ |
15a117630a4f
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
77 |
void UnloadWagonOverrides(void) |
15a117630a4f
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
78 |
{ |
15a117630a4f
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
79 |
WagonOverrides *wos; |
15a117630a4f
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
80 |
WagonOverride *wo; |
15a117630a4f
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
81 |
EngineID engine; |
15a117630a4f
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
82 |
int i; |
15a117630a4f
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
83 |
|
15a117630a4f
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
84 |
for (engine = 0; engine < TOTAL_NUM_ENGINES; engine++) { |
15a117630a4f
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
85 |
wos = &_engine_wagon_overrides[engine]; |
15a117630a4f
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
86 |
for (i = 0; i < wos->overrides_count; i++) { |
15a117630a4f
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
87 |
wo = &wos->overrides[i]; |
3595
a0acdb23e662
(svn r4486) - NewGRF: Create and use a memory pool to manage sprite groups. This
peter1138
parents:
3390
diff
changeset
|
88 |
wo->group = NULL; |
2491
15a117630a4f
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
89 |
free(wo->train_id); |
15a117630a4f
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
90 |
} |
15a117630a4f
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
91 |
free(wos->overrides); |
15a117630a4f
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
92 |
wos->overrides_count = 0; |
15a117630a4f
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
93 |
wos->overrides = NULL; |
15a117630a4f
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
94 |
} |
15a117630a4f
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
95 |
} |
0 | 96 |
|
97 |
// 0 - 28 are cargos, 29 is default, 30 is the advert (purchase list) |
|
98 |
// (It isn't and shouldn't be like this in the GRF files since new cargo types |
|
99 |
// may appear in future - however it's more convenient to store it like this in |
|
100 |
// memory. --pasky) |
|
2488
1e98c71e5f6a
(svn r3014) -NewGRF, Codechange: Make all sprite group references be pointers instead of copying the data around.
peter1138
parents:
2477
diff
changeset
|
101 |
static SpriteGroup *engine_custom_sprites[TOTAL_NUM_ENGINES][NUM_GLOBAL_CID]; |
3648
d234c46bb37a
(svn r4559) - NewGRF: keep a record of which grf an engine is defined in. Will be used in the future.
peter1138
parents:
3630
diff
changeset
|
102 |
static uint32 _engine_grf[TOTAL_NUM_ENGINES]; |
0 | 103 |
|
2477
225b2916fe2a
(svn r3003) Change int, uint, uin16 and byte to EngineID where appropriate, plus some related changes (mostly casts)
tron
parents:
2469
diff
changeset
|
104 |
void SetCustomEngineSprites(EngineID engine, byte cargo, SpriteGroup *group) |
0 | 105 |
{ |
3614 | 106 |
assert(engine < TOTAL_NUM_ENGINES); |
2491
15a117630a4f
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
107 |
if (engine_custom_sprites[engine][cargo] != NULL) { |
3595
a0acdb23e662
(svn r4486) - NewGRF: Create and use a memory pool to manage sprite groups. This
peter1138
parents:
3390
diff
changeset
|
108 |
DEBUG(grf, 6)("SetCustomEngineSprites: engine `%d' cargo `%d' already has group -- replacing.", engine, cargo); |
2491
15a117630a4f
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
109 |
} |
2488
1e98c71e5f6a
(svn r3014) -NewGRF, Codechange: Make all sprite group references be pointers instead of copying the data around.
peter1138
parents:
2477
diff
changeset
|
110 |
engine_custom_sprites[engine][cargo] = group; |
0 | 111 |
} |
112 |
||
2491
15a117630a4f
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
113 |
/** |
15a117630a4f
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
114 |
* Unload all engine sprite groups. |
15a117630a4f
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
115 |
*/ |
15a117630a4f
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
116 |
void UnloadCustomEngineSprites(void) |
15a117630a4f
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
117 |
{ |
15a117630a4f
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
118 |
EngineID engine; |
15a117630a4f
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
119 |
CargoID cargo; |
15a117630a4f
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
120 |
|
15a117630a4f
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
121 |
for (engine = 0; engine < TOTAL_NUM_ENGINES; engine++) { |
15a117630a4f
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
122 |
for (cargo = 0; cargo < NUM_GLOBAL_CID; cargo++) { |
3595
a0acdb23e662
(svn r4486) - NewGRF: Create and use a memory pool to manage sprite groups. This
peter1138
parents:
3390
diff
changeset
|
123 |
engine_custom_sprites[engine][cargo] = NULL; |
2491
15a117630a4f
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
124 |
} |
3648
d234c46bb37a
(svn r4559) - NewGRF: keep a record of which grf an engine is defined in. Will be used in the future.
peter1138
parents:
3630
diff
changeset
|
125 |
_engine_grf[engine] = 0; |
2491
15a117630a4f
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
126 |
} |
15a117630a4f
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
127 |
} |
15a117630a4f
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
128 |
|
3648
d234c46bb37a
(svn r4559) - NewGRF: keep a record of which grf an engine is defined in. Will be used in the future.
peter1138
parents:
3630
diff
changeset
|
129 |
void SetEngineGRF(EngineID engine, uint32 grfid) |
d234c46bb37a
(svn r4559) - NewGRF: keep a record of which grf an engine is defined in. Will be used in the future.
peter1138
parents:
3630
diff
changeset
|
130 |
{ |
d234c46bb37a
(svn r4559) - NewGRF: keep a record of which grf an engine is defined in. Will be used in the future.
peter1138
parents:
3630
diff
changeset
|
131 |
assert(engine < TOTAL_NUM_ENGINES); |
d234c46bb37a
(svn r4559) - NewGRF: keep a record of which grf an engine is defined in. Will be used in the future.
peter1138
parents:
3630
diff
changeset
|
132 |
_engine_grf[engine] = grfid; |
d234c46bb37a
(svn r4559) - NewGRF: keep a record of which grf an engine is defined in. Will be used in the future.
peter1138
parents:
3630
diff
changeset
|
133 |
} |
d234c46bb37a
(svn r4559) - NewGRF: keep a record of which grf an engine is defined in. Will be used in the future.
peter1138
parents:
3630
diff
changeset
|
134 |
|
d234c46bb37a
(svn r4559) - NewGRF: keep a record of which grf an engine is defined in. Will be used in the future.
peter1138
parents:
3630
diff
changeset
|
135 |
uint32 GetEngineGRFID(EngineID engine) |
d234c46bb37a
(svn r4559) - NewGRF: keep a record of which grf an engine is defined in. Will be used in the future.
peter1138
parents:
3630
diff
changeset
|
136 |
{ |
d234c46bb37a
(svn r4559) - NewGRF: keep a record of which grf an engine is defined in. Will be used in the future.
peter1138
parents:
3630
diff
changeset
|
137 |
assert(engine < TOTAL_NUM_ENGINES); |
d234c46bb37a
(svn r4559) - NewGRF: keep a record of which grf an engine is defined in. Will be used in the future.
peter1138
parents:
3630
diff
changeset
|
138 |
return _engine_grf[engine]; |
d234c46bb37a
(svn r4559) - NewGRF: keep a record of which grf an engine is defined in. Will be used in the future.
peter1138
parents:
3630
diff
changeset
|
139 |
} |
d234c46bb37a
(svn r4559) - NewGRF: keep a record of which grf an engine is defined in. Will be used in the future.
peter1138
parents:
3630
diff
changeset
|
140 |
|
d234c46bb37a
(svn r4559) - NewGRF: keep a record of which grf an engine is defined in. Will be used in the future.
peter1138
parents:
3630
diff
changeset
|
141 |
|
2708
48714bad9499
(svn r3252) - NewGRF: Map new train subtypes to old types for rail vehicles.
peter1138
parents:
2639
diff
changeset
|
142 |
static int MapOldSubType(const Vehicle *v) |
48714bad9499
(svn r3252) - NewGRF: Map new train subtypes to old types for rail vehicles.
peter1138
parents:
2639
diff
changeset
|
143 |
{ |
48714bad9499
(svn r3252) - NewGRF: Map new train subtypes to old types for rail vehicles.
peter1138
parents:
2639
diff
changeset
|
144 |
if (v->type != VEH_Train) return v->subtype; |
48714bad9499
(svn r3252) - NewGRF: Map new train subtypes to old types for rail vehicles.
peter1138
parents:
2639
diff
changeset
|
145 |
if (IsTrainEngine(v)) return 0; |
48714bad9499
(svn r3252) - NewGRF: Map new train subtypes to old types for rail vehicles.
peter1138
parents:
2639
diff
changeset
|
146 |
if (IsFreeWagon(v)) return 4; |
48714bad9499
(svn r3252) - NewGRF: Map new train subtypes to old types for rail vehicles.
peter1138
parents:
2639
diff
changeset
|
147 |
return 2; |
48714bad9499
(svn r3252) - NewGRF: Map new train subtypes to old types for rail vehicles.
peter1138
parents:
2639
diff
changeset
|
148 |
} |
48714bad9499
(svn r3252) - NewGRF: Map new train subtypes to old types for rail vehicles.
peter1138
parents:
2639
diff
changeset
|
149 |
|
3686
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
150 |
|
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
151 |
/* Vehicle Resolver Functions */ |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
152 |
static inline const Vehicle *GRV(const ResolverObject *object) |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
153 |
{ |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
154 |
return object->scope == VSG_SCOPE_SELF ? object->vehicle.self : object->vehicle.parent; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
155 |
} |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
156 |
|
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
157 |
|
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
158 |
static uint32 VehicleGetRandomBits(const ResolverObject *object) |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
159 |
{ |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
160 |
return GRV(object) == NULL ? 0 : GRV(object)->random_bits; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
161 |
} |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
162 |
|
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
163 |
|
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
164 |
static uint32 VehicleGetTriggers(const ResolverObject *object) |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
165 |
{ |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
166 |
return GRV(object) == NULL ? 0 : GRV(object)->waiting_triggers; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
167 |
} |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
168 |
|
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
169 |
|
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
170 |
static void VehicleSetTriggers(const ResolverObject *object, int triggers) |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
171 |
{ |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
172 |
/* Evil cast to get around const-ness. This used to be achieved by an |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
173 |
* innocent looking function pointer cast... Currently I cannot see a |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
174 |
* way of avoiding this without removing consts deep within gui code. |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
175 |
*/ |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
176 |
Vehicle *v = (Vehicle*)GRV(object); |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
177 |
|
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
178 |
/* This function must only be called when processing triggers -- any |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
179 |
* other time is an error. */ |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
180 |
assert(object->trigger != 0); |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
181 |
|
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
182 |
if (v != NULL) v->waiting_triggers = triggers; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
183 |
} |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
184 |
|
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
185 |
|
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
186 |
static uint32 VehicleGetVariable(const ResolverObject *object, byte variable, byte parameter) |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
187 |
{ |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
188 |
const Vehicle *v = GRV(object); |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
189 |
|
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
190 |
if (v == NULL) { |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
191 |
/* Vehicle does not exist, so we're in a purchase list */ |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
192 |
switch (variable) { |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
193 |
case 0x43: return _current_player; /* Owner information */ |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
194 |
case 0x46: return 0; /* Motion counter */ |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
195 |
case 0xC4: return _cur_year; /* Build year */ |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
196 |
case 0xDA: return INVALID_VEHICLE; /* Next vehicle */ |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
197 |
default: return -1; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
198 |
} |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
199 |
} |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
200 |
|
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
201 |
/* Calculated vehicle parameters */ |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
202 |
switch (variable) { |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
203 |
case 0x40: /* Get length of consist */ |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
204 |
case 0x41: /* Get length of same consecutive wagons */ |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
205 |
if (v->type != VEH_Train) return 1; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
206 |
|
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
207 |
{ |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
208 |
const Vehicle* u; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
209 |
byte chain_before = 0; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
210 |
byte chain_after = 0; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
211 |
|
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
212 |
for (u = GetFirstVehicleInChain(v); u != v; u = u->next) { |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
213 |
chain_before++; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
214 |
if (variable == 0x41 && u->engine_type != v->engine_type) chain_before = 0; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
215 |
} |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
216 |
|
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
217 |
while (u->next != NULL && (variable == 0x40 || u->next->engine_type == v->engine_type)) { |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
218 |
chain_after++; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
219 |
u = u->next; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
220 |
} |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
221 |
|
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
222 |
return chain_before | chain_after << 8 | (chain_before + chain_after) << 16; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
223 |
} |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
224 |
|
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
225 |
case 0x43: /* Player information */ |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
226 |
return v->owner; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
227 |
|
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
228 |
case 0x46: /* Motion counter */ |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
229 |
return 0; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
230 |
} |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
231 |
|
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
232 |
/* General vehicle properties */ |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
233 |
switch (variable - 0x80) { |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
234 |
case 0x00: return v->type; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
235 |
case 0x01: return MapOldSubType(v); |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
236 |
case 0x04: return v->index; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
237 |
case 0x05: return v->index & 0xFF; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
238 |
case 0x0A: return PackOrder(&v->current_order); |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
239 |
case 0x0B: return PackOrder(&v->current_order) & 0xFF; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
240 |
case 0x0C: return v->num_orders; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
241 |
case 0x0D: return v->cur_order_index; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
242 |
case 0x10: return v->load_unload_time_rem; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
243 |
case 0x11: return v->load_unload_time_rem & 0xFF; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
244 |
case 0x12: return v->date_of_last_service; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
245 |
case 0x13: return v->date_of_last_service & 0xFF; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
246 |
case 0x14: return v->service_interval; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
247 |
case 0x15: return v->service_interval & 0xFF; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
248 |
case 0x16: return v->last_station_visited; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
249 |
case 0x17: return v->tick_counter; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
250 |
case 0x18: return v->max_speed; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
251 |
case 0x19: return v->max_speed & 0xFF; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
252 |
case 0x1A: return v->x_pos; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
253 |
case 0x1B: return v->x_pos & 0xFF; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
254 |
case 0x1C: return v->y_pos; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
255 |
case 0x1D: return v->y_pos & 0xFF; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
256 |
case 0x1E: return v->z_pos; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
257 |
case 0x1F: return v->direction; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
258 |
case 0x28: return v->cur_image; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
259 |
case 0x29: return v->cur_image & 0xFF; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
260 |
case 0x32: return v->vehstatus; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
261 |
case 0x33: return v->vehstatus; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
262 |
case 0x34: return v->cur_speed; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
263 |
case 0x35: return v->cur_speed & 0xFF; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
264 |
case 0x36: return v->subspeed; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
265 |
case 0x37: return v->acceleration; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
266 |
case 0x39: return v->cargo_type; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
267 |
case 0x3A: return v->cargo_cap; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
268 |
case 0x3B: return v->cargo_cap & 0xFF; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
269 |
case 0x3C: return v->cargo_count; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
270 |
case 0x3D: return v->cargo_count & 0xFF; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
271 |
case 0x3E: return v->cargo_source; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
272 |
case 0x3F: return v->cargo_days; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
273 |
case 0x40: return v->age; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
274 |
case 0x41: return v->age & 0xFF; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
275 |
case 0x42: return v->max_age; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
276 |
case 0x43: return v->max_age & 0xFF; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
277 |
case 0x44: return v->build_year; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
278 |
case 0x45: return v->unitnumber; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
279 |
case 0x46: return v->engine_type; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
280 |
case 0x47: return v->engine_type & 0xFF; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
281 |
case 0x48: return v->spritenum; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
282 |
case 0x49: return v->day_counter; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
283 |
case 0x4A: return v->breakdowns_since_last_service; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
284 |
case 0x4B: return v->breakdown_ctr; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
285 |
case 0x4C: return v->breakdown_delay; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
286 |
case 0x4D: return v->breakdown_chance; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
287 |
case 0x4E: return v->reliability; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
288 |
case 0x4F: return v->reliability & 0xFF; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
289 |
case 0x50: return v->reliability_spd_dec; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
290 |
case 0x51: return v->reliability_spd_dec & 0xFF; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
291 |
case 0x52: return v->profit_this_year; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
292 |
case 0x53: return v->profit_this_year & 0xFFFFFF; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
293 |
case 0x54: return v->profit_this_year & 0xFFFF; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
294 |
case 0x55: return v->profit_this_year & 0xFF; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
295 |
case 0x56: return v->profit_last_year; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
296 |
case 0x57: return v->profit_last_year & 0xFF; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
297 |
case 0x58: return v->profit_last_year; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
298 |
case 0x59: return v->profit_last_year & 0xFF; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
299 |
case 0x5A: return v->next == NULL ? INVALID_VEHICLE : v->next->index; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
300 |
case 0x5C: return v->value; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
301 |
case 0x5D: return v->value & 0xFFFFFF; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
302 |
case 0x5E: return v->value & 0xFFFF; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
303 |
case 0x5F: return v->value & 0xFF; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
304 |
case 0x60: return v->string_id; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
305 |
case 0x61: return v->string_id & 0xFF; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
306 |
case 0x72: return 0; // XXX Refit cycle |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
307 |
case 0x7A: return v->random_bits; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
308 |
case 0x7B: return v->waiting_triggers; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
309 |
} |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
310 |
|
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
311 |
/* Vehicle specific properties */ |
3014
1a60d4541d3c
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
312 |
switch (v->type) { |
1a60d4541d3c
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
313 |
case VEH_Train: |
3686
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
314 |
switch (variable - 0x80) { |
3014
1a60d4541d3c
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
315 |
case 0x62: return v->u.rail.track; |
1a60d4541d3c
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
316 |
case 0x66: return v->u.rail.railtype; |
1a60d4541d3c
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
317 |
case 0x73: return v->u.rail.cached_veh_length; |
1a60d4541d3c
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
318 |
case 0x74: return v->u.rail.cached_power; |
1a60d4541d3c
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
319 |
case 0x75: return v->u.rail.cached_power & 0xFFFFFF; |
1a60d4541d3c
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
320 |
case 0x76: return v->u.rail.cached_power & 0xFFFF; |
1a60d4541d3c
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
321 |
case 0x77: return v->u.rail.cached_power & 0xFF; |
1a60d4541d3c
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
322 |
case 0x7C: return v->first->index; |
1a60d4541d3c
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
323 |
case 0x7D: return v->first->index & 0xFF; |
1a60d4541d3c
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
324 |
} |
1a60d4541d3c
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
325 |
break; |
1a60d4541d3c
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
326 |
|
1a60d4541d3c
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
327 |
case VEH_Road: |
3686
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
328 |
switch (variable - 0x80) { |
3014
1a60d4541d3c
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
329 |
case 0x62: return v->u.road.state; |
1a60d4541d3c
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
330 |
case 0x64: return v->u.road.blocked_ctr; |
1a60d4541d3c
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
331 |
case 0x65: return v->u.road.blocked_ctr & 0xFF; |
1a60d4541d3c
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
332 |
case 0x66: return v->u.road.overtaking; |
1a60d4541d3c
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
333 |
case 0x67: return v->u.road.overtaking_ctr; |
1a60d4541d3c
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
334 |
case 0x68: return v->u.road.crashed_ctr; |
1a60d4541d3c
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
335 |
case 0x69: return v->u.road.crashed_ctr & 0xFF; |
1a60d4541d3c
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
336 |
} |
1a60d4541d3c
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
337 |
break; |
1a60d4541d3c
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
338 |
|
1a60d4541d3c
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
339 |
case VEH_Aircraft: |
3686
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
340 |
switch (variable - 0x80) { |
3014
1a60d4541d3c
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
341 |
// case 0x62: XXX Need to convert from ottd to ttdp state |
1a60d4541d3c
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
342 |
case 0x63: return v->u.air.targetairport; |
1a60d4541d3c
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
343 |
// case 0x66: XXX |
1a60d4541d3c
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
344 |
} |
1a60d4541d3c
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
345 |
break; |
1a60d4541d3c
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
346 |
} |
1a60d4541d3c
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
347 |
|
3686
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
348 |
DEBUG(grf, 1)("Unhandled vehicle property 0x%X, type 0x%X", variable, v->type); |
3014
1a60d4541d3c
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
349 |
|
1a60d4541d3c
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
350 |
return -1; |
1a60d4541d3c
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
351 |
} |
1a60d4541d3c
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
352 |
|
426
381172276dc6
(svn r625) Almost complete support for deterministic variational vehicle spritegroups. (pasky)
tron
parents:
414
diff
changeset
|
353 |
|
3686
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
354 |
static uint32 VehicleResolveReal(const ResolverObject *object, uint num_loaded, uint num_loading, bool *in_motion) |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
355 |
{ |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
356 |
const Vehicle *v = object->vehicle.self; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
357 |
uint totalsets; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
358 |
uint set; |
426
381172276dc6
(svn r625) Almost complete support for deterministic variational vehicle spritegroups. (pasky)
tron
parents:
414
diff
changeset
|
359 |
|
3686
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
360 |
if (v == NULL) { |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
361 |
*in_motion = false; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
362 |
return 0; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
363 |
} |
445
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
364 |
|
3686
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
365 |
if (v->type == VEH_Train) { |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
366 |
*in_motion = GetFirstVehicleInChain(v)->current_order.type != OT_LOADING; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
367 |
} else { |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
368 |
*in_motion = v->current_order.type != OT_LOADING; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
369 |
} |
445
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
370 |
|
3686
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
371 |
totalsets = in_motion ? num_loaded : num_loading; |
445
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
372 |
|
3686
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
373 |
if (v->cargo_count == v->cargo_cap || totalsets == 1) { |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
374 |
set = totalsets - 1; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
375 |
} else if (v->cargo_count == 0 || totalsets == 2) { |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
376 |
set = 0; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
377 |
} else { |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
378 |
set = v->cargo_count * (totalsets - 2) / max(1, v->cargo_cap) + 1; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
379 |
} |
426
381172276dc6
(svn r625) Almost complete support for deterministic variational vehicle spritegroups. (pasky)
tron
parents:
414
diff
changeset
|
380 |
|
3686
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
381 |
return set; |
426
381172276dc6
(svn r625) Almost complete support for deterministic variational vehicle spritegroups. (pasky)
tron
parents:
414
diff
changeset
|
382 |
} |
381172276dc6
(svn r625) Almost complete support for deterministic variational vehicle spritegroups. (pasky)
tron
parents:
414
diff
changeset
|
383 |
|
3686
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
384 |
|
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
385 |
static inline void NewVehicleResolver(ResolverObject *res, const Vehicle *v) |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
386 |
{ |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
387 |
res->GetRandomBits = &VehicleGetRandomBits; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
388 |
res->GetTriggers = &VehicleGetTriggers; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
389 |
res->SetTriggers = &VehicleSetTriggers; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
390 |
res->GetVariable = &VehicleGetVariable; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
391 |
res->ResolveReal = &VehicleResolveReal; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
392 |
|
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
393 |
res->vehicle.self = v; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
394 |
res->vehicle.parent = (v != NULL && v->type == VEH_Train) ? GetFirstVehicleInChain(v) : NULL; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
395 |
|
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
396 |
res->callback = 0; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
397 |
res->callback_param1 = 0; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
398 |
res->callback_param2 = 0; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
399 |
res->last_value = 0; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
400 |
res->trigger = 0; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
401 |
res->reseed = 0; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
402 |
} |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
403 |
|
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
404 |
|
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
405 |
SpriteID GetCustomEngineSprite(EngineID engine, const Vehicle *v, Direction direction) |
0 | 406 |
{ |
2242
512eae2cf006
(svn r2762) Simplify a loop, remove an unused variable and add many consts
tron
parents:
2204
diff
changeset
|
407 |
const SpriteGroup *group; |
3686
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
408 |
ResolverObject object; |
3344
fc86351d4641
(svn r4128) - CodeChange: Add proper semantics for CargoID for such variables instead of using the general byte-type.
Darkvater
parents:
3300
diff
changeset
|
409 |
CargoID cargo = GC_PURCHASE; |
0 | 410 |
|
3686
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
411 |
NewVehicleResolver(&object, v); |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
412 |
|
414
4629d4bf7f14
(svn r611) -newgrf: Change GetCustomEngineSprite() calling convention (invisible to users of GetCustomVehicle*() wrappers). Needed for deterministic spritegroups support (pasky).
darkvater
parents:
410
diff
changeset
|
413 |
if (v != NULL) { |
4629d4bf7f14
(svn r611) -newgrf: Change GetCustomEngineSprite() calling convention (invisible to users of GetCustomVehicle*() wrappers). Needed for deterministic spritegroups support (pasky).
darkvater
parents:
410
diff
changeset
|
414 |
cargo = _global_cargo_id[_opt.landscape][v->cargo_type]; |
1802
da61740cc1e7
(svn r2306) - CodeChange: Check the last commands; refits. This needed an extensive rewrite and global/local-cargo ID juggling and bitmasking. However with this done it looks better as well and is compatible with newgrf handling. Big thanks to HackyKid for doing most of the work. This also closes patch "[ 1199277 ] Command checks"
Darkvater
parents:
1786
diff
changeset
|
415 |
assert(cargo != GC_INVALID); |
414
4629d4bf7f14
(svn r611) -newgrf: Change GetCustomEngineSprite() calling convention (invisible to users of GetCustomVehicle*() wrappers). Needed for deterministic spritegroups support (pasky).
darkvater
parents:
410
diff
changeset
|
416 |
} |
4629d4bf7f14
(svn r611) -newgrf: Change GetCustomEngineSprite() calling convention (invisible to users of GetCustomVehicle*() wrappers). Needed for deterministic spritegroups support (pasky).
darkvater
parents:
410
diff
changeset
|
417 |
|
2488
1e98c71e5f6a
(svn r3014) -NewGRF, Codechange: Make all sprite group references be pointers instead of copying the data around.
peter1138
parents:
2477
diff
changeset
|
418 |
group = engine_custom_sprites[engine][cargo]; |
414
4629d4bf7f14
(svn r611) -newgrf: Change GetCustomEngineSprite() calling convention (invisible to users of GetCustomVehicle*() wrappers). Needed for deterministic spritegroups support (pasky).
darkvater
parents:
410
diff
changeset
|
419 |
|
1560
d040e4763f45
(svn r2064) - Codechange: GetVehicleSpriteGroup() cleanup - drop overriding_engine, which was around probably only for historical reasons. (Paralellily developed by HackyKid.)
pasky
parents:
1559
diff
changeset
|
420 |
if (v != NULL && v->type == VEH_Train) { |
2242
512eae2cf006
(svn r2762) Simplify a loop, remove an unused variable and add many consts
tron
parents:
2204
diff
changeset
|
421 |
const SpriteGroup *overset = GetWagonOverrideSpriteSet(engine, v->u.rail.first_engine); |
0 | 422 |
|
1477 | 423 |
if (overset != NULL) group = overset; |
0 | 424 |
} |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
114
diff
changeset
|
425 |
|
3686
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
426 |
group = Resolve(group, &object); |
445
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
427 |
|
3686
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
428 |
if ((group == NULL || group->type != SGT_RESULT) && cargo != GC_DEFAULT) { |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
429 |
// This group is empty but perhaps there'll be a default one. |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
430 |
group = Resolve(engine_custom_sprites[engine][GC_DEFAULT], &object); |
445
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
431 |
} |
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
432 |
|
3686
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
433 |
if (group == NULL || group->type != SGT_RESULT) return 0; |
3668
42325f12e7d8
(svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents:
3648
diff
changeset
|
434 |
|
42325f12e7d8
(svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents:
3648
diff
changeset
|
435 |
return group->g.result.sprite + (direction % group->g.result.num_sprites); |
0 | 436 |
} |
437 |
||
3686
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
438 |
|
1883
ad68cd0a0a25
(svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents:
1881
diff
changeset
|
439 |
/** |
1908
2fa391fed79a
(svn r2414) - Feature: [newgrf] Implement powered wagons, and the callback that goes with it.
hackykid
parents:
1904
diff
changeset
|
440 |
* Check if a wagon is currently using a wagon override |
2fa391fed79a
(svn r2414) - Feature: [newgrf] Implement powered wagons, and the callback that goes with it.
hackykid
parents:
1904
diff
changeset
|
441 |
* @param v The wagon to check |
2fa391fed79a
(svn r2414) - Feature: [newgrf] Implement powered wagons, and the callback that goes with it.
hackykid
parents:
1904
diff
changeset
|
442 |
* @return true if it is using an override, false otherwise |
2fa391fed79a
(svn r2414) - Feature: [newgrf] Implement powered wagons, and the callback that goes with it.
hackykid
parents:
1904
diff
changeset
|
443 |
*/ |
2548
49c8a096033f
(svn r3077) static, const, bracing, indentation, 0 -> '\0'/NULL, typos in comments, excess empty lines, minor other changes
tron
parents:
2530
diff
changeset
|
444 |
bool UsesWagonOverride(const Vehicle* v) |
49c8a096033f
(svn r3077) static, const, bracing, indentation, 0 -> '\0'/NULL, typos in comments, excess empty lines, minor other changes
tron
parents:
2530
diff
changeset
|
445 |
{ |
1908
2fa391fed79a
(svn r2414) - Feature: [newgrf] Implement powered wagons, and the callback that goes with it.
hackykid
parents:
1904
diff
changeset
|
446 |
assert(v->type == VEH_Train); |
2242
512eae2cf006
(svn r2762) Simplify a loop, remove an unused variable and add many consts
tron
parents:
2204
diff
changeset
|
447 |
return GetWagonOverrideSpriteSet(v->engine_type, v->u.rail.first_engine) != NULL; |
1908
2fa391fed79a
(svn r2414) - Feature: [newgrf] Implement powered wagons, and the callback that goes with it.
hackykid
parents:
1904
diff
changeset
|
448 |
} |
2fa391fed79a
(svn r2414) - Feature: [newgrf] Implement powered wagons, and the callback that goes with it.
hackykid
parents:
1904
diff
changeset
|
449 |
|
2fa391fed79a
(svn r2414) - Feature: [newgrf] Implement powered wagons, and the callback that goes with it.
hackykid
parents:
1904
diff
changeset
|
450 |
/** |
3390
ae4b0872dc78
(svn r4198) - NewGRF: Rename GetCallBackResult() to GetVehicleCallback(), as other types will exist later, and use separate parameters instead of bitshifting.
peter1138
parents:
3348
diff
changeset
|
451 |
* Evaluate a newgrf callback for vehicles |
ae4b0872dc78
(svn r4198) - NewGRF: Rename GetCallBackResult() to GetVehicleCallback(), as other types will exist later, and use separate parameters instead of bitshifting.
peter1138
parents:
3348
diff
changeset
|
452 |
* @param callback The callback to evalute |
ae4b0872dc78
(svn r4198) - NewGRF: Rename GetCallBackResult() to GetVehicleCallback(), as other types will exist later, and use separate parameters instead of bitshifting.
peter1138
parents:
3348
diff
changeset
|
453 |
* @param param1 First parameter of the callback |
ae4b0872dc78
(svn r4198) - NewGRF: Rename GetCallBackResult() to GetVehicleCallback(), as other types will exist later, and use separate parameters instead of bitshifting.
peter1138
parents:
3348
diff
changeset
|
454 |
* @param param2 Second parameter of the callback |
ae4b0872dc78
(svn r4198) - NewGRF: Rename GetCallBackResult() to GetVehicleCallback(), as other types will exist later, and use separate parameters instead of bitshifting.
peter1138
parents:
3348
diff
changeset
|
455 |
* @param engine Engine type of the vehicle to evaluate the callback for |
ae4b0872dc78
(svn r4198) - NewGRF: Rename GetCallBackResult() to GetVehicleCallback(), as other types will exist later, and use separate parameters instead of bitshifting.
peter1138
parents:
3348
diff
changeset
|
456 |
* @param vehicle The vehicle to evaluate the callback for, or NULL if it doesnt exist yet |
1883
ad68cd0a0a25
(svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents:
1881
diff
changeset
|
457 |
* @return The value the callback returned, or CALLBACK_FAILED if it failed |
ad68cd0a0a25
(svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents:
1881
diff
changeset
|
458 |
*/ |
3390
ae4b0872dc78
(svn r4198) - NewGRF: Rename GetCallBackResult() to GetVehicleCallback(), as other types will exist later, and use separate parameters instead of bitshifting.
peter1138
parents:
3348
diff
changeset
|
459 |
uint16 GetVehicleCallback(byte callback, uint32 param1, uint32 param2, EngineID engine, const Vehicle *v) |
1883
ad68cd0a0a25
(svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents:
1881
diff
changeset
|
460 |
{ |
2242
512eae2cf006
(svn r2762) Simplify a loop, remove an unused variable and add many consts
tron
parents:
2204
diff
changeset
|
461 |
const SpriteGroup *group; |
3686
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
462 |
ResolverObject object; |
3607
45157f043dec
(svn r4500) - NewGRF: When running a callback with no vehicle, use the purchase list 'cargo' type first, and then fallback to the default if needed.
peter1138
parents:
3604
diff
changeset
|
463 |
CargoID cargo; |
3686
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
464 |
|
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
465 |
NewVehicleResolver(&object, v); |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
466 |
|
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
467 |
object.callback = callback; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
468 |
object.callback_param1 = param1; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
469 |
object.callback_param2 = param2; |
1883
ad68cd0a0a25
(svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents:
1881
diff
changeset
|
470 |
|
3607
45157f043dec
(svn r4500) - NewGRF: When running a callback with no vehicle, use the purchase list 'cargo' type first, and then fallback to the default if needed.
peter1138
parents:
3604
diff
changeset
|
471 |
cargo = (v == NULL) ? GC_PURCHASE : _global_cargo_id[_opt.landscape][v->cargo_type]; |
1883
ad68cd0a0a25
(svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents:
1881
diff
changeset
|
472 |
|
2488
1e98c71e5f6a
(svn r3014) -NewGRF, Codechange: Make all sprite group references be pointers instead of copying the data around.
peter1138
parents:
2477
diff
changeset
|
473 |
group = engine_custom_sprites[engine][cargo]; |
1904
6459332eded4
(svn r2410) - Fix: [newgrf] When resolving callbacks, dont ignore wagon overrides.
hackykid
parents:
1891
diff
changeset
|
474 |
|
6459332eded4
(svn r2410) - Fix: [newgrf] When resolving callbacks, dont ignore wagon overrides.
hackykid
parents:
1891
diff
changeset
|
475 |
if (v != NULL && v->type == VEH_Train) { |
2242
512eae2cf006
(svn r2762) Simplify a loop, remove an unused variable and add many consts
tron
parents:
2204
diff
changeset
|
476 |
const SpriteGroup *overset = GetWagonOverrideSpriteSet(engine, v->u.rail.first_engine); |
1904
6459332eded4
(svn r2410) - Fix: [newgrf] When resolving callbacks, dont ignore wagon overrides.
hackykid
parents:
1891
diff
changeset
|
477 |
|
6459332eded4
(svn r2410) - Fix: [newgrf] When resolving callbacks, dont ignore wagon overrides.
hackykid
parents:
1891
diff
changeset
|
478 |
if (overset != NULL) group = overset; |
6459332eded4
(svn r2410) - Fix: [newgrf] When resolving callbacks, dont ignore wagon overrides.
hackykid
parents:
1891
diff
changeset
|
479 |
} |
6459332eded4
(svn r2410) - Fix: [newgrf] When resolving callbacks, dont ignore wagon overrides.
hackykid
parents:
1891
diff
changeset
|
480 |
|
3686
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
481 |
group = Resolve(group, &object); |
1883
ad68cd0a0a25
(svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents:
1881
diff
changeset
|
482 |
|
3607
45157f043dec
(svn r4500) - NewGRF: When running a callback with no vehicle, use the purchase list 'cargo' type first, and then fallback to the default if needed.
peter1138
parents:
3604
diff
changeset
|
483 |
if ((group == NULL || group->type != SGT_CALLBACK) && cargo != GC_DEFAULT) { |
1883
ad68cd0a0a25
(svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents:
1881
diff
changeset
|
484 |
// This group is empty but perhaps there'll be a default one. |
3686
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
485 |
group = Resolve(engine_custom_sprites[engine][GC_DEFAULT], &object); |
1883
ad68cd0a0a25
(svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents:
1881
diff
changeset
|
486 |
} |
ad68cd0a0a25
(svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents:
1881
diff
changeset
|
487 |
|
2488
1e98c71e5f6a
(svn r3014) -NewGRF, Codechange: Make all sprite group references be pointers instead of copying the data around.
peter1138
parents:
2477
diff
changeset
|
488 |
if (group == NULL || group->type != SGT_CALLBACK) |
1883
ad68cd0a0a25
(svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents:
1881
diff
changeset
|
489 |
return CALLBACK_FAILED; |
ad68cd0a0a25
(svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents:
1881
diff
changeset
|
490 |
|
ad68cd0a0a25
(svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents:
1881
diff
changeset
|
491 |
return group->g.callback.result; |
ad68cd0a0a25
(svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents:
1881
diff
changeset
|
492 |
} |
ad68cd0a0a25
(svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents:
1881
diff
changeset
|
493 |
|
ad68cd0a0a25
(svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents:
1881
diff
changeset
|
494 |
|
3680 | 495 |
static void DoTriggerVehicle(Vehicle *v, VehicleTrigger trigger, byte base_random_bits, bool first) |
445
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
496 |
{ |
2242
512eae2cf006
(svn r2762) Simplify a loop, remove an unused variable and add many consts
tron
parents:
2204
diff
changeset
|
497 |
const SpriteGroup *group; |
3686
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
498 |
ResolverObject object; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
499 |
CargoID cargo; |
445
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
500 |
byte new_random_bits; |
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
501 |
|
3686
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
502 |
/* We can't trigger a non-existent vehicle... */ |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
503 |
assert(v != NULL); |
1883
ad68cd0a0a25
(svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents:
1881
diff
changeset
|
504 |
|
3686
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
505 |
NewVehicleResolver(&object, v); |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
506 |
|
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
507 |
object.trigger = trigger; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
508 |
|
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
509 |
cargo = _global_cargo_id[_opt.landscape][v->cargo_type]; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
510 |
group = engine_custom_sprites[v->engine_type][cargo]; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
511 |
|
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
512 |
if (v->type == VEH_Train) { |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
513 |
const SpriteGroup *overset = GetWagonOverrideSpriteSet(v->engine_type, v->u.rail.first_engine); |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
514 |
if (overset != NULL) group = overset; |
445
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
515 |
} |
1883
ad68cd0a0a25
(svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents:
1881
diff
changeset
|
516 |
|
3686
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
517 |
group = Resolve(group, &object); |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
518 |
if (group == NULL && v->cargo_type != GC_DEFAULT) { |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
519 |
// This group is empty but perhaps there'll be a default one. |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
520 |
group = Resolve(engine_custom_sprites[v->engine_type][GC_DEFAULT], &object); |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
521 |
} |
2488
1e98c71e5f6a
(svn r3014) -NewGRF, Codechange: Make all sprite group references be pointers instead of copying the data around.
peter1138
parents:
2477
diff
changeset
|
522 |
|
3686
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
523 |
/* Really return? */ |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
524 |
if (group == NULL) return; |
1883
ad68cd0a0a25
(svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents:
1881
diff
changeset
|
525 |
|
542 | 526 |
new_random_bits = Random(); |
3686
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
527 |
v->random_bits &= ~object.reseed; |
16627c28741d
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
528 |
v->random_bits |= (first ? new_random_bits : base_random_bits) & object.reseed; |
445
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
529 |
|
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
530 |
switch (trigger) { |
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
531 |
case VEHICLE_TRIGGER_NEW_CARGO: |
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
532 |
/* All vehicles in chain get ANY_NEW_CARGO trigger now. |
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
533 |
* So we call it for the first one and they will recurse. */ |
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
534 |
/* Indexing part of vehicle random bits needs to be |
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
535 |
* same for all triggered vehicles in the chain (to get |
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
536 |
* all the random-cargo wagons carry the same cargo, |
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
537 |
* i.e.), so we give them all the NEW_CARGO triggered |
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
538 |
* vehicle's portion of random bits. */ |
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
539 |
assert(first); |
3680 | 540 |
DoTriggerVehicle(GetFirstVehicleInChain(v), VEHICLE_TRIGGER_ANY_NEW_CARGO, new_random_bits, false); |
445
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
541 |
break; |
3680 | 542 |
|
445
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
543 |
case VEHICLE_TRIGGER_DEPOT: |
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
544 |
/* We now trigger the next vehicle in chain recursively. |
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
545 |
* The random bits portions may be different for each |
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
546 |
* vehicle in chain. */ |
3680 | 547 |
if (v->next != NULL) DoTriggerVehicle(v->next, trigger, 0, true); |
445
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
548 |
break; |
3680 | 549 |
|
445
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
550 |
case VEHICLE_TRIGGER_EMPTY: |
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
551 |
/* We now trigger the next vehicle in chain |
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
552 |
* recursively. The random bits portions must be same |
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
553 |
* for each vehicle in chain, so we give them all |
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
554 |
* first chained vehicle's portion of random bits. */ |
3680 | 555 |
if (v->next != NULL) DoTriggerVehicle(v->next, trigger, first ? new_random_bits : base_random_bits, false); |
445
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
556 |
break; |
3680 | 557 |
|
445
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
558 |
case VEHICLE_TRIGGER_ANY_NEW_CARGO: |
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
559 |
/* Now pass the trigger recursively to the next vehicle |
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
560 |
* in chain. */ |
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
561 |
assert(!first); |
3680 | 562 |
if (v->next != NULL) DoTriggerVehicle(v->next, VEHICLE_TRIGGER_ANY_NEW_CARGO, base_random_bits, false); |
445
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
563 |
break; |
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
564 |
} |
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
565 |
} |
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
566 |
|
3680 | 567 |
void TriggerVehicle(Vehicle *v, VehicleTrigger trigger) |
445
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
568 |
{ |
2589
3640c75148f2
(svn r3126) Autoreplace: Only the first vehicle in a chain should be marked as entering a depot, so call moved out of DoVehicleTrigger loop.
peter1138
parents:
2574
diff
changeset
|
569 |
if (trigger == VEHICLE_TRIGGER_DEPOT) { |
3640c75148f2
(svn r3126) Autoreplace: Only the first vehicle in a chain should be marked as entering a depot, so call moved out of DoVehicleTrigger loop.
peter1138
parents:
2574
diff
changeset
|
570 |
// store that the vehicle entered a depot this tick |
3680 | 571 |
VehicleEnteredDepotThisTick(v); |
2589
3640c75148f2
(svn r3126) Autoreplace: Only the first vehicle in a chain should be marked as entering a depot, so call moved out of DoVehicleTrigger loop.
peter1138
parents:
2574
diff
changeset
|
572 |
} |
3640c75148f2
(svn r3126) Autoreplace: Only the first vehicle in a chain should be marked as entering a depot, so call moved out of DoVehicleTrigger loop.
peter1138
parents:
2574
diff
changeset
|
573 |
|
3680 | 574 |
DoTriggerVehicle(v, trigger, 0, true); |
445
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
575 |
} |
beafc0fb8f12
(svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents:
433
diff
changeset
|
576 |
|
3604
1e7d9f584f93
(svn r4496) - NewGRF: switch custom engine names from storing a char* to using the new StringID based text system. Vehicle name
peter1138
parents:
3595
diff
changeset
|
577 |
StringID _engine_custom_names[TOTAL_NUM_ENGINES]; |
0 | 578 |
|
3604
1e7d9f584f93
(svn r4496) - NewGRF: switch custom engine names from storing a char* to using the new StringID based text system. Vehicle name
peter1138
parents:
3595
diff
changeset
|
579 |
void SetCustomEngineName(EngineID engine, StringID name) |
0 | 580 |
{ |
3614 | 581 |
assert(engine < lengthof(_engine_custom_names)); |
3604
1e7d9f584f93
(svn r4496) - NewGRF: switch custom engine names from storing a char* to using the new StringID based text system. Vehicle name
peter1138
parents:
3595
diff
changeset
|
582 |
_engine_custom_names[engine] = name; |
0 | 583 |
} |
584 |
||
2769
eab49a86038e
(svn r3316) - NewGRF: Unload engine names before loading grf files. This fixes names in climates where the engines don't get loaded. Renamed function to reflect its purpose.
peter1138
parents:
2763
diff
changeset
|
585 |
void UnloadCustomEngineNames(void) |
1474
a26a21fa10ef
(svn r1978) - Fix: Plug some memleaks; thanks Valgrind
Darkvater
parents:
1329
diff
changeset
|
586 |
{ |
3604
1e7d9f584f93
(svn r4496) - NewGRF: switch custom engine names from storing a char* to using the new StringID based text system. Vehicle name
peter1138
parents:
3595
diff
changeset
|
587 |
EngineID i; |
1e7d9f584f93
(svn r4496) - NewGRF: switch custom engine names from storing a char* to using the new StringID based text system. Vehicle name
peter1138
parents:
3595
diff
changeset
|
588 |
for (i = 0; i < TOTAL_NUM_ENGINES; i++) { |
1e7d9f584f93
(svn r4496) - NewGRF: switch custom engine names from storing a char* to using the new StringID based text system. Vehicle name
peter1138
parents:
3595
diff
changeset
|
589 |
_engine_custom_names[i] = 0; |
1474
a26a21fa10ef
(svn r1978) - Fix: Plug some memleaks; thanks Valgrind
Darkvater
parents:
1329
diff
changeset
|
590 |
} |
a26a21fa10ef
(svn r1978) - Fix: Plug some memleaks; thanks Valgrind
Darkvater
parents:
1329
diff
changeset
|
591 |
} |
a26a21fa10ef
(svn r1978) - Fix: Plug some memleaks; thanks Valgrind
Darkvater
parents:
1329
diff
changeset
|
592 |
|
2477
225b2916fe2a
(svn r3003) Change int, uint, uin16 and byte to EngineID where appropriate, plus some related changes (mostly casts)
tron
parents:
2469
diff
changeset
|
593 |
StringID GetCustomEngineName(EngineID engine) |
0 | 594 |
{ |
3604
1e7d9f584f93
(svn r4496) - NewGRF: switch custom engine names from storing a char* to using the new StringID based text system. Vehicle name
peter1138
parents:
3595
diff
changeset
|
595 |
return _engine_custom_names[engine] == 0 ? _engine_name_strings[engine] : _engine_custom_names[engine]; |
0 | 596 |
} |
597 |
||
2971
cae3a81e8674
(svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents:
2962
diff
changeset
|
598 |
// Functions for changing the order of vehicle purchase lists |
cae3a81e8674
(svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents:
2962
diff
changeset
|
599 |
// This is currently only implemented for rail vehicles. |
cae3a81e8674
(svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents:
2962
diff
changeset
|
600 |
static EngineID engine_list_order[NUM_TRAIN_ENGINES]; |
cae3a81e8674
(svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents:
2962
diff
changeset
|
601 |
|
cae3a81e8674
(svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents:
2962
diff
changeset
|
602 |
void ResetEngineListOrder(void) |
cae3a81e8674
(svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents:
2962
diff
changeset
|
603 |
{ |
cae3a81e8674
(svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents:
2962
diff
changeset
|
604 |
EngineID i; |
cae3a81e8674
(svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents:
2962
diff
changeset
|
605 |
|
cae3a81e8674
(svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents:
2962
diff
changeset
|
606 |
for (i = 0; i < NUM_TRAIN_ENGINES; i++) |
cae3a81e8674
(svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents:
2962
diff
changeset
|
607 |
engine_list_order[i] = i; |
cae3a81e8674
(svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents:
2962
diff
changeset
|
608 |
} |
cae3a81e8674
(svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents:
2962
diff
changeset
|
609 |
|
cae3a81e8674
(svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents:
2962
diff
changeset
|
610 |
EngineID GetRailVehAtPosition(EngineID pos) |
cae3a81e8674
(svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents:
2962
diff
changeset
|
611 |
{ |
cae3a81e8674
(svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents:
2962
diff
changeset
|
612 |
return engine_list_order[pos]; |
cae3a81e8674
(svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents:
2962
diff
changeset
|
613 |
} |
cae3a81e8674
(svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents:
2962
diff
changeset
|
614 |
|
cae3a81e8674
(svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents:
2962
diff
changeset
|
615 |
void AlterRailVehListOrder(EngineID engine, EngineID target) |
cae3a81e8674
(svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents:
2962
diff
changeset
|
616 |
{ |
cae3a81e8674
(svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents:
2962
diff
changeset
|
617 |
EngineID i; |
cae3a81e8674
(svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents:
2962
diff
changeset
|
618 |
bool moving = false; |
cae3a81e8674
(svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents:
2962
diff
changeset
|
619 |
|
cae3a81e8674
(svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents:
2962
diff
changeset
|
620 |
if (engine == target) return; |
cae3a81e8674
(svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents:
2962
diff
changeset
|
621 |
|
cae3a81e8674
(svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents:
2962
diff
changeset
|
622 |
// First, remove our ID from the list. |
cae3a81e8674
(svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents:
2962
diff
changeset
|
623 |
for (i = 0; i < NUM_TRAIN_ENGINES - 1; i++) { |
cae3a81e8674
(svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents:
2962
diff
changeset
|
624 |
if (engine_list_order[i] == engine) |
cae3a81e8674
(svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents:
2962
diff
changeset
|
625 |
moving = true; |
cae3a81e8674
(svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents:
2962
diff
changeset
|
626 |
if (moving) |
cae3a81e8674
(svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents:
2962
diff
changeset
|
627 |
engine_list_order[i] = engine_list_order[i + 1]; |
cae3a81e8674
(svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents:
2962
diff
changeset
|
628 |
} |
cae3a81e8674
(svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents:
2962
diff
changeset
|
629 |
|
cae3a81e8674
(svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents:
2962
diff
changeset
|
630 |
// Now, insert it again, before the target engine. |
cae3a81e8674
(svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents:
2962
diff
changeset
|
631 |
for (i = NUM_TRAIN_ENGINES - 1; i > 0; i--) { |
cae3a81e8674
(svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents:
2962
diff
changeset
|
632 |
engine_list_order[i] = engine_list_order[i - 1]; |
cae3a81e8674
(svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents:
2962
diff
changeset
|
633 |
if (engine_list_order[i] == target) { |
cae3a81e8674
(svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents:
2962
diff
changeset
|
634 |
engine_list_order[i - 1] = engine; |
cae3a81e8674
(svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents:
2962
diff
changeset
|
635 |
break; |
cae3a81e8674
(svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents:
2962
diff
changeset
|
636 |
} |
cae3a81e8674
(svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents:
2962
diff
changeset
|
637 |
} |
cae3a81e8674
(svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents:
2962
diff
changeset
|
638 |
} |