author | peter1138 |
Thu, 29 Jun 2006 07:19:24 +0000 | |
changeset 4094 | a83fac319c4e |
parent 4059 | f1442dfe1c8a |
child 4261 | 2ec8f5a9747b |
permissions | -rw-r--r-- |
2186 | 1 |
/* $Id$ */ |
2 |
||
0 | 3 |
#include "stdafx.h" |
1891
92a3b0aa0946
(svn r2397) - CodeChange: rename all "ttd" files to "openttd" files.
Darkvater
parents:
1883
diff
changeset
|
4 |
#include "openttd.h" |
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver 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
0a6510cc889b
(svn r1803) Move debugging stuff into files of it's own
tron
parents:
1197
diff
changeset
|
6 |
#include "debug.h" |
2163
637ec3c361f5
(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
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver 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" |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver 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" |
3702
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
11 |
#include "station.h" |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
12 |
#include "airport.h" |
3924
de86db4fbd1e
(svn r5059) - NewGRF: store a GRFFile pointer reference for each pointer, instead of just the GRF ID.
peter1138
parents:
3920
diff
changeset
|
13 |
#include "newgrf.h" |
2982
286f69caaf05
(svn r3557) - NewGRF: move callback enums to a new file as more than just engines will use them
peter1138
parents:
2971
diff
changeset
|
14 |
#include "newgrf_callbacks.h" |
2962
dbd168a4703a
(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
|
15 |
#include "newgrf_engine.h" |
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
16 |
#include "newgrf_station.h" |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
17 |
#include "newgrf_spritegroup.h" |
3866
113de2b20059
(svn r4902) Newgrf : Introduction of the newgrf_cargo files.
belugas
parents:
3862
diff
changeset
|
18 |
#include "newgrf_cargo.h" |
0 | 19 |
|
3843
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
20 |
|
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
21 |
|
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
22 |
/* Default cargo classes */ |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
23 |
static const uint16 _cargo_classes[NUM_GLOBAL_CID] = { |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
24 |
CC_PASSENGERS, |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
25 |
CC_BULK, |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
26 |
CC_MAIL, |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
27 |
CC_LIQUID, |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
28 |
CC_PIECE_GOODS, |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
29 |
CC_EXPRESS, |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
30 |
CC_BULK, |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
31 |
CC_PIECE_GOODS, |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
32 |
CC_BULK, |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
33 |
CC_PIECE_GOODS, |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
34 |
CC_ARMOURED, |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
35 |
CC_PIECE_GOODS, |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
36 |
CC_REFRIGERATED | CC_EXPRESS, |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
37 |
CC_REFRIGERATED | CC_EXPRESS, |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
38 |
CC_BULK, |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
39 |
CC_LIQUID, |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
40 |
CC_LIQUID, |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
41 |
CC_BULK, |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
42 |
CC_PIECE_GOODS, |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
43 |
CC_PIECE_GOODS, |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
44 |
CC_EXPRESS, |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
45 |
CC_BULK, |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
46 |
CC_LIQUID, |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
47 |
CC_BULK, |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
48 |
CC_PIECE_GOODS, |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
49 |
CC_LIQUID, |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
50 |
CC_PIECE_GOODS, |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
51 |
CC_PIECE_GOODS, |
3866
113de2b20059
(svn r4902) Newgrf : Introduction of the newgrf_cargo files.
belugas
parents:
3862
diff
changeset
|
52 |
CC_NOAVAILABLE, |
113de2b20059
(svn r4902) Newgrf : Introduction of the newgrf_cargo files.
belugas
parents:
3862
diff
changeset
|
53 |
CC_NOAVAILABLE, |
113de2b20059
(svn r4902) Newgrf : Introduction of the newgrf_cargo files.
belugas
parents:
3862
diff
changeset
|
54 |
CC_NOAVAILABLE, |
3843
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
55 |
}; |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
56 |
|
3785
1becd6b333fe
(svn r4781) - NewGRF: give _traininfo_vehicle_pitch a proper declaration
peter1138
parents:
3739
diff
changeset
|
57 |
int _traininfo_vehicle_pitch = 0; |
3845
c3cd4b825c2f
(svn r4869) - NewGRF: support setting train list vehicle width to 32 instead of 29 pixels, for sets which use 32 pixel long engines/wagons.
peter1138
parents:
3843
diff
changeset
|
58 |
int _traininfo_vehicle_width = 29; |
3785
1becd6b333fe
(svn r4781) - NewGRF: give _traininfo_vehicle_pitch a proper declaration
peter1138
parents:
3739
diff
changeset
|
59 |
|
0 | 60 |
// TODO: We don't support cargo-specific wagon overrides. Pretty exotic... ;-) --pasky |
61 |
||
1477 | 62 |
typedef struct WagonOverride { |
0 | 63 |
byte *train_id; |
64 |
int trains; |
|
3693
af2ee9b328e6
(svn r4629) - NewGRF: constify more code that deals with sprite groups, now that ref counting is gone.
peter1138
parents:
3686
diff
changeset
|
65 |
const SpriteGroup *group; |
1477 | 66 |
} WagonOverride; |
0 | 67 |
|
1477 | 68 |
typedef struct WagonOverrides { |
0 | 69 |
int overrides_count; |
1477 | 70 |
WagonOverride *overrides; |
71 |
} WagonOverrides; |
|
0 | 72 |
|
1477 | 73 |
static WagonOverrides _engine_wagon_overrides[TOTAL_NUM_ENGINES]; |
74 |
||
3693
af2ee9b328e6
(svn r4629) - NewGRF: constify more code that deals with sprite groups, now that ref counting is gone.
peter1138
parents:
3686
diff
changeset
|
75 |
void SetWagonOverrideSprites(EngineID engine, const SpriteGroup *group, byte *train_id, int trains) |
0 | 76 |
{ |
1477 | 77 |
WagonOverrides *wos; |
78 |
WagonOverride *wo; |
|
0 | 79 |
|
80 |
wos = &_engine_wagon_overrides[engine]; |
|
81 |
wos->overrides_count++; |
|
82 |
wos->overrides = realloc(wos->overrides, |
|
1477 | 83 |
wos->overrides_count * sizeof(*wos->overrides)); |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
114
diff
changeset
|
84 |
|
0 | 85 |
wo = &wos->overrides[wos->overrides_count - 1]; |
408
63a8c0505aab
(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
|
86 |
/* FIXME: If we are replacing an override, release original SpriteGroup |
63a8c0505aab
(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
|
87 |
* to prevent leaks. But first we need to refcount the SpriteGroup. |
63a8c0505aab
(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
|
88 |
* --pasky */ |
2488
cbe3d6b60c27
(svn r3014) -NewGRF, Codechange: Make all sprite group references be pointers instead of copying the data around.
peter1138
parents:
2477
diff
changeset
|
89 |
wo->group = group; |
0 | 90 |
wo->trains = trains; |
91 |
wo->train_id = malloc(trains); |
|
92 |
memcpy(wo->train_id, train_id, trains); |
|
93 |
} |
|
94 |
||
2477
d454d5152386
(svn r3003) Change int, uint, uin16 and byte to EngineID where appropriate, plus some related changes (mostly casts)
tron
parents:
2469
diff
changeset
|
95 |
static const SpriteGroup *GetWagonOverrideSpriteSet(EngineID engine, byte overriding_engine) |
0 | 96 |
{ |
2242
27fa4807cd61
(svn r2762) Simplify a loop, remove an unused variable and add many consts
tron
parents:
2204
diff
changeset
|
97 |
const WagonOverrides *wos = &_engine_wagon_overrides[engine]; |
0 | 98 |
int i; |
99 |
||
408
63a8c0505aab
(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
|
100 |
// XXX: This could turn out to be a timesink on profiles. We could |
63a8c0505aab
(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
|
101 |
// always just dedicate 65535 bytes for an [engine][train] trampoline |
63a8c0505aab
(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
|
102 |
// for O(1). Or O(logMlogN) and searching binary tree or smt. like |
63a8c0505aab
(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
|
103 |
// that. --pasky |
0 | 104 |
|
105 |
for (i = 0; i < wos->overrides_count; i++) { |
|
2242
27fa4807cd61
(svn r2762) Simplify a loop, remove an unused variable and add many consts
tron
parents:
2204
diff
changeset
|
106 |
const WagonOverride *wo = &wos->overrides[i]; |
0 | 107 |
int j; |
108 |
||
109 |
for (j = 0; j < wo->trains; j++) { |
|
110 |
if (wo->train_id[j] == overriding_engine) |
|
2488
cbe3d6b60c27
(svn r3014) -NewGRF, Codechange: Make all sprite group references be pointers instead of copying the data around.
peter1138
parents:
2477
diff
changeset
|
111 |
return wo->group; |
0 | 112 |
} |
113 |
} |
|
114 |
return NULL; |
|
115 |
} |
|
116 |
||
2491
dfe9542f783e
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
117 |
/** |
dfe9542f783e
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
118 |
* Unload all wagon override sprite groups. |
dfe9542f783e
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
119 |
*/ |
dfe9542f783e
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
120 |
void UnloadWagonOverrides(void) |
dfe9542f783e
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
121 |
{ |
dfe9542f783e
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
122 |
WagonOverrides *wos; |
dfe9542f783e
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
123 |
WagonOverride *wo; |
dfe9542f783e
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
124 |
EngineID engine; |
dfe9542f783e
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
125 |
int i; |
dfe9542f783e
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
126 |
|
dfe9542f783e
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
127 |
for (engine = 0; engine < TOTAL_NUM_ENGINES; engine++) { |
dfe9542f783e
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
128 |
wos = &_engine_wagon_overrides[engine]; |
dfe9542f783e
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
129 |
for (i = 0; i < wos->overrides_count; i++) { |
dfe9542f783e
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
130 |
wo = &wos->overrides[i]; |
3595
20621831cd46
(svn r4486) - NewGRF: Create and use a memory pool to manage sprite groups. This
peter1138
parents:
3390
diff
changeset
|
131 |
wo->group = NULL; |
2491
dfe9542f783e
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
132 |
free(wo->train_id); |
dfe9542f783e
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
133 |
} |
dfe9542f783e
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
134 |
free(wos->overrides); |
dfe9542f783e
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
135 |
wos->overrides_count = 0; |
dfe9542f783e
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
136 |
wos->overrides = NULL; |
dfe9542f783e
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
137 |
} |
dfe9542f783e
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
138 |
} |
0 | 139 |
|
140 |
// 0 - 28 are cargos, 29 is default, 30 is the advert (purchase list) |
|
141 |
// (It isn't and shouldn't be like this in the GRF files since new cargo types |
|
142 |
// may appear in future - however it's more convenient to store it like this in |
|
143 |
// memory. --pasky) |
|
3693
af2ee9b328e6
(svn r4629) - NewGRF: constify more code that deals with sprite groups, now that ref counting is gone.
peter1138
parents:
3686
diff
changeset
|
144 |
static const SpriteGroup *engine_custom_sprites[TOTAL_NUM_ENGINES][NUM_GLOBAL_CID]; |
3924
de86db4fbd1e
(svn r5059) - NewGRF: store a GRFFile pointer reference for each pointer, instead of just the GRF ID.
peter1138
parents:
3920
diff
changeset
|
145 |
static const GRFFile *_engine_grf[TOTAL_NUM_ENGINES]; |
0 | 146 |
|
3693
af2ee9b328e6
(svn r4629) - NewGRF: constify more code that deals with sprite groups, now that ref counting is gone.
peter1138
parents:
3686
diff
changeset
|
147 |
void SetCustomEngineSprites(EngineID engine, byte cargo, const SpriteGroup *group) |
0 | 148 |
{ |
3614 | 149 |
assert(engine < TOTAL_NUM_ENGINES); |
2491
dfe9542f783e
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
150 |
if (engine_custom_sprites[engine][cargo] != NULL) { |
3595
20621831cd46
(svn r4486) - NewGRF: Create and use a memory pool to manage sprite groups. This
peter1138
parents:
3390
diff
changeset
|
151 |
DEBUG(grf, 6)("SetCustomEngineSprites: engine `%d' cargo `%d' already has group -- replacing.", engine, cargo); |
2491
dfe9542f783e
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
152 |
} |
2488
cbe3d6b60c27
(svn r3014) -NewGRF, Codechange: Make all sprite group references be pointers instead of copying the data around.
peter1138
parents:
2477
diff
changeset
|
153 |
engine_custom_sprites[engine][cargo] = group; |
0 | 154 |
} |
155 |
||
2491
dfe9542f783e
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
156 |
/** |
dfe9542f783e
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
157 |
* Unload all engine sprite groups. |
dfe9542f783e
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
158 |
*/ |
dfe9542f783e
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
159 |
void UnloadCustomEngineSprites(void) |
dfe9542f783e
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
160 |
{ |
dfe9542f783e
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
161 |
EngineID engine; |
dfe9542f783e
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
162 |
CargoID cargo; |
dfe9542f783e
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
163 |
|
dfe9542f783e
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
164 |
for (engine = 0; engine < TOTAL_NUM_ENGINES; engine++) { |
dfe9542f783e
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
165 |
for (cargo = 0; cargo < NUM_GLOBAL_CID; cargo++) { |
3595
20621831cd46
(svn r4486) - NewGRF: Create and use a memory pool to manage sprite groups. This
peter1138
parents:
3390
diff
changeset
|
166 |
engine_custom_sprites[engine][cargo] = NULL; |
2491
dfe9542f783e
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
167 |
} |
3648
1574c89384cb
(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
|
168 |
_engine_grf[engine] = 0; |
2491
dfe9542f783e
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
169 |
} |
dfe9542f783e
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
170 |
} |
dfe9542f783e
(svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents:
2490
diff
changeset
|
171 |
|
3695
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
172 |
static const SpriteGroup *heli_rotor_custom_sprites[NUM_AIRCRAFT_ENGINES]; |
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
173 |
|
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
174 |
/** Load a rotor override sprite group for an aircraft */ |
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
175 |
void SetRotorOverrideSprites(EngineID engine, const SpriteGroup *group) |
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
176 |
{ |
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
177 |
assert(engine >= AIRCRAFT_ENGINES_INDEX); |
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
178 |
assert(engine < AIRCRAFT_ENGINES_INDEX + NUM_AIRCRAFT_ENGINES); |
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
179 |
|
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
180 |
if (heli_rotor_custom_sprites[engine - AIRCRAFT_ENGINES_INDEX] != NULL) { |
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
181 |
DEBUG(grf, 6)("SetRotorOverrideSprites: engine `%d' already has group -- replacing.", engine); |
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
182 |
} |
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
183 |
heli_rotor_custom_sprites[engine - AIRCRAFT_ENGINES_INDEX] = group; |
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
184 |
} |
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
185 |
|
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
186 |
/** Unload all rotor override sprite groups */ |
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
187 |
void UnloadRotorOverrideSprites(void) |
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
188 |
{ |
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
189 |
EngineID engine; |
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
190 |
|
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
191 |
/* Starting at AIRCRAFT_ENGINES_INDEX may seem pointless, but it means |
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
192 |
* the context of EngineID is correct */ |
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
193 |
for (engine = AIRCRAFT_ENGINES_INDEX; engine < AIRCRAFT_ENGINES_INDEX + NUM_AIRCRAFT_ENGINES; engine++) { |
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
194 |
heli_rotor_custom_sprites[engine - AIRCRAFT_ENGINES_INDEX] = NULL; |
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
195 |
} |
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
196 |
} |
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
197 |
|
3924
de86db4fbd1e
(svn r5059) - NewGRF: store a GRFFile pointer reference for each pointer, instead of just the GRF ID.
peter1138
parents:
3920
diff
changeset
|
198 |
|
de86db4fbd1e
(svn r5059) - NewGRF: store a GRFFile pointer reference for each pointer, instead of just the GRF ID.
peter1138
parents:
3920
diff
changeset
|
199 |
/** |
de86db4fbd1e
(svn r5059) - NewGRF: store a GRFFile pointer reference for each pointer, instead of just the GRF ID.
peter1138
parents:
3920
diff
changeset
|
200 |
* Tie a GRFFile entry to an engine, to allow us to retrieve GRF parameters |
de86db4fbd1e
(svn r5059) - NewGRF: store a GRFFile pointer reference for each pointer, instead of just the GRF ID.
peter1138
parents:
3920
diff
changeset
|
201 |
* etc during a game. |
de86db4fbd1e
(svn r5059) - NewGRF: store a GRFFile pointer reference for each pointer, instead of just the GRF ID.
peter1138
parents:
3920
diff
changeset
|
202 |
* @param engine Engine ID to tie the GRFFile to. |
de86db4fbd1e
(svn r5059) - NewGRF: store a GRFFile pointer reference for each pointer, instead of just the GRF ID.
peter1138
parents:
3920
diff
changeset
|
203 |
* @param file Pointer of GRFFile to tie. |
de86db4fbd1e
(svn r5059) - NewGRF: store a GRFFile pointer reference for each pointer, instead of just the GRF ID.
peter1138
parents:
3920
diff
changeset
|
204 |
*/ |
de86db4fbd1e
(svn r5059) - NewGRF: store a GRFFile pointer reference for each pointer, instead of just the GRF ID.
peter1138
parents:
3920
diff
changeset
|
205 |
void SetEngineGRF(EngineID engine, const GRFFile *file) |
3648
1574c89384cb
(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
|
206 |
{ |
1574c89384cb
(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
|
207 |
assert(engine < TOTAL_NUM_ENGINES); |
3924
de86db4fbd1e
(svn r5059) - NewGRF: store a GRFFile pointer reference for each pointer, instead of just the GRF ID.
peter1138
parents:
3920
diff
changeset
|
208 |
_engine_grf[engine] = file; |
3648
1574c89384cb
(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
|
209 |
} |
1574c89384cb
(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
|
210 |
|
3924
de86db4fbd1e
(svn r5059) - NewGRF: store a GRFFile pointer reference for each pointer, instead of just the GRF ID.
peter1138
parents:
3920
diff
changeset
|
211 |
|
de86db4fbd1e
(svn r5059) - NewGRF: store a GRFFile pointer reference for each pointer, instead of just the GRF ID.
peter1138
parents:
3920
diff
changeset
|
212 |
/** |
de86db4fbd1e
(svn r5059) - NewGRF: store a GRFFile pointer reference for each pointer, instead of just the GRF ID.
peter1138
parents:
3920
diff
changeset
|
213 |
* Retrieve the GRFFile tied to an engine |
de86db4fbd1e
(svn r5059) - NewGRF: store a GRFFile pointer reference for each pointer, instead of just the GRF ID.
peter1138
parents:
3920
diff
changeset
|
214 |
* @param engine Engine ID to retrieve. |
de86db4fbd1e
(svn r5059) - NewGRF: store a GRFFile pointer reference for each pointer, instead of just the GRF ID.
peter1138
parents:
3920
diff
changeset
|
215 |
* @return Pointer to GRFFile. |
de86db4fbd1e
(svn r5059) - NewGRF: store a GRFFile pointer reference for each pointer, instead of just the GRF ID.
peter1138
parents:
3920
diff
changeset
|
216 |
*/ |
de86db4fbd1e
(svn r5059) - NewGRF: store a GRFFile pointer reference for each pointer, instead of just the GRF ID.
peter1138
parents:
3920
diff
changeset
|
217 |
const GRFFile *GetEngineGRF(EngineID engine) |
de86db4fbd1e
(svn r5059) - NewGRF: store a GRFFile pointer reference for each pointer, instead of just the GRF ID.
peter1138
parents:
3920
diff
changeset
|
218 |
{ |
de86db4fbd1e
(svn r5059) - NewGRF: store a GRFFile pointer reference for each pointer, instead of just the GRF ID.
peter1138
parents:
3920
diff
changeset
|
219 |
assert(engine < TOTAL_NUM_ENGINES); |
de86db4fbd1e
(svn r5059) - NewGRF: store a GRFFile pointer reference for each pointer, instead of just the GRF ID.
peter1138
parents:
3920
diff
changeset
|
220 |
return _engine_grf[engine]; |
de86db4fbd1e
(svn r5059) - NewGRF: store a GRFFile pointer reference for each pointer, instead of just the GRF ID.
peter1138
parents:
3920
diff
changeset
|
221 |
} |
de86db4fbd1e
(svn r5059) - NewGRF: store a GRFFile pointer reference for each pointer, instead of just the GRF ID.
peter1138
parents:
3920
diff
changeset
|
222 |
|
de86db4fbd1e
(svn r5059) - NewGRF: store a GRFFile pointer reference for each pointer, instead of just the GRF ID.
peter1138
parents:
3920
diff
changeset
|
223 |
|
de86db4fbd1e
(svn r5059) - NewGRF: store a GRFFile pointer reference for each pointer, instead of just the GRF ID.
peter1138
parents:
3920
diff
changeset
|
224 |
/** |
de86db4fbd1e
(svn r5059) - NewGRF: store a GRFFile pointer reference for each pointer, instead of just the GRF ID.
peter1138
parents:
3920
diff
changeset
|
225 |
* Retrieve the GRF ID of the GRFFile tied to an engine |
de86db4fbd1e
(svn r5059) - NewGRF: store a GRFFile pointer reference for each pointer, instead of just the GRF ID.
peter1138
parents:
3920
diff
changeset
|
226 |
* @param engine Engine ID to retrieve. |
de86db4fbd1e
(svn r5059) - NewGRF: store a GRFFile pointer reference for each pointer, instead of just the GRF ID.
peter1138
parents:
3920
diff
changeset
|
227 |
* @return 32 bit GRFID value. |
de86db4fbd1e
(svn r5059) - NewGRF: store a GRFFile pointer reference for each pointer, instead of just the GRF ID.
peter1138
parents:
3920
diff
changeset
|
228 |
*/ |
3648
1574c89384cb
(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
|
229 |
uint32 GetEngineGRFID(EngineID engine) |
1574c89384cb
(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
|
230 |
{ |
1574c89384cb
(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
|
231 |
assert(engine < TOTAL_NUM_ENGINES); |
3924
de86db4fbd1e
(svn r5059) - NewGRF: store a GRFFile pointer reference for each pointer, instead of just the GRF ID.
peter1138
parents:
3920
diff
changeset
|
232 |
return _engine_grf[engine]->grfid; |
3648
1574c89384cb
(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
|
233 |
} |
1574c89384cb
(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
|
234 |
|
1574c89384cb
(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
|
235 |
|
2708
9d1a8d5dc3ea
(svn r3252) - NewGRF: Map new train subtypes to old types for rail vehicles.
peter1138
parents:
2639
diff
changeset
|
236 |
static int MapOldSubType(const Vehicle *v) |
9d1a8d5dc3ea
(svn r3252) - NewGRF: Map new train subtypes to old types for rail vehicles.
peter1138
parents:
2639
diff
changeset
|
237 |
{ |
9d1a8d5dc3ea
(svn r3252) - NewGRF: Map new train subtypes to old types for rail vehicles.
peter1138
parents:
2639
diff
changeset
|
238 |
if (v->type != VEH_Train) return v->subtype; |
9d1a8d5dc3ea
(svn r3252) - NewGRF: Map new train subtypes to old types for rail vehicles.
peter1138
parents:
2639
diff
changeset
|
239 |
if (IsTrainEngine(v)) return 0; |
9d1a8d5dc3ea
(svn r3252) - NewGRF: Map new train subtypes to old types for rail vehicles.
peter1138
parents:
2639
diff
changeset
|
240 |
if (IsFreeWagon(v)) return 4; |
9d1a8d5dc3ea
(svn r3252) - NewGRF: Map new train subtypes to old types for rail vehicles.
peter1138
parents:
2639
diff
changeset
|
241 |
return 2; |
9d1a8d5dc3ea
(svn r3252) - NewGRF: Map new train subtypes to old types for rail vehicles.
peter1138
parents:
2639
diff
changeset
|
242 |
} |
9d1a8d5dc3ea
(svn r3252) - NewGRF: Map new train subtypes to old types for rail vehicles.
peter1138
parents:
2639
diff
changeset
|
243 |
|
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver 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 |
|
3702
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
245 |
/* TTDP style aircraft movement states for GRF Action 2 Var 0xE2 */ |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
246 |
enum { |
4055
2507869fbafe
(svn r5335) - Newgrf: correct spelling of hangar
peter1138
parents:
4050
diff
changeset
|
247 |
AMS_TTDP_HANGAR, |
2507869fbafe
(svn r5335) - Newgrf: correct spelling of hangar
peter1138
parents:
4050
diff
changeset
|
248 |
AMS_TTDP_TO_HANGAR, |
3702
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
249 |
AMS_TTDP_TO_PAD1, |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
250 |
AMS_TTDP_TO_PAD2, |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
251 |
AMS_TTDP_TO_PAD3, |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
252 |
AMS_TTDP_TO_ENTRY_2_AND_3, |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
253 |
AMS_TTDP_TO_ENTRY_2_AND_3_AND_H, |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
254 |
AMS_TTDP_TO_JUNCTION, |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
255 |
AMS_TTDP_LEAVE_RUNWAY, |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
256 |
AMS_TTDP_TO_INWAY, |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
257 |
AMS_TTDP_TO_RUNWAY, |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
258 |
AMS_TTDP_TO_OUTWAY, |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
259 |
AMS_TTDP_WAITING, |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
260 |
AMS_TTDP_TAKEOFF, |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
261 |
AMS_TTDP_TO_TAKEOFF, |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
262 |
AMS_TTDP_CLIMBING, |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
263 |
AMS_TTDP_FLIGHT_APPROACH, |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
264 |
AMS_TTDP_UNUSED_0x11, |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
265 |
AMS_TTDP_FLIGHT_TO_TOWER, |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
266 |
AMS_TTDP_UNUSED_0x13, |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
267 |
AMS_TTDP_FLIGHT_FINAL, |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
268 |
AMS_TTDP_FLIGHT_DESCENT, |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
269 |
AMS_TTDP_BRAKING, |
3920
771542d40c45
(svn r5047) - NewGRF: fix typo of AIRPORT in enum
peter1138
parents:
3893
diff
changeset
|
270 |
AMS_TTDP_HELI_TAKEOFF_AIRPORT, |
771542d40c45
(svn r5047) - NewGRF: fix typo of AIRPORT in enum
peter1138
parents:
3893
diff
changeset
|
271 |
AMS_TTDP_HELI_TO_TAKEOFF_AIRPORT, |
771542d40c45
(svn r5047) - NewGRF: fix typo of AIRPORT in enum
peter1138
parents:
3893
diff
changeset
|
272 |
AMS_TTDP_HELI_LAND_AIRPORT, |
3702
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
273 |
AMS_TTDP_HELI_TAKEOFF_HELIPORT, |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
274 |
AMS_TTDP_HELI_TO_TAKEOFF_HELIPORT, |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
275 |
AMS_TTDP_HELI_LAND_HELIPORT, |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
276 |
}; |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
277 |
|
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
278 |
|
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
279 |
/** |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
280 |
* Map OTTD aircraft movement states to TTDPatch style movement states |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
281 |
* (VarAction 2 Variable 0xE2) |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
282 |
*/ |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
283 |
static byte MapAircraftMovementState(const Vehicle *v) |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
284 |
{ |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
285 |
const Station *st = GetStation(v->u.air.targetairport); |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
286 |
byte amdflag = GetAirportMovingData(st->airport_type, v->u.air.pos)->flag; |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
287 |
|
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
288 |
switch (v->u.air.state) { |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
289 |
case HANGAR: |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
290 |
/* The international airport is a special case as helicopters can land in |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
291 |
* front of the hanger. Helicopters also change their air.state to |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
292 |
* AMED_HELI_LOWER some time before actually descending. */ |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
293 |
|
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
294 |
/* This condition only occurs for helicopters, during descent, |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
295 |
* to a landing by the hanger of an international airport. */ |
3920
771542d40c45
(svn r5047) - NewGRF: fix typo of AIRPORT in enum
peter1138
parents:
3893
diff
changeset
|
296 |
if (amdflag & AMED_HELI_LOWER) return AMS_TTDP_HELI_LAND_AIRPORT; |
3702
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
297 |
|
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
298 |
/* This condition only occurs for helicopters, before starting descent, |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
299 |
* to a landing by the hanger of an international airport. */ |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
300 |
if (amdflag & AMED_SLOWTURN) return AMS_TTDP_FLIGHT_TO_TOWER; |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
301 |
|
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
302 |
// The final two conditions apply to helicopters or aircraft. |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
303 |
/* Has reached hanger? */ |
4055
2507869fbafe
(svn r5335) - Newgrf: correct spelling of hangar
peter1138
parents:
4050
diff
changeset
|
304 |
if (amdflag & AMED_EXACTPOS) return AMS_TTDP_HANGAR; |
3702
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
305 |
|
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
306 |
// Still moving towards hanger. |
4055
2507869fbafe
(svn r5335) - Newgrf: correct spelling of hangar
peter1138
parents:
4050
diff
changeset
|
307 |
return AMS_TTDP_TO_HANGAR; |
3702
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
308 |
|
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
309 |
case TERM1: |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
310 |
if (amdflag & AMED_EXACTPOS) return AMS_TTDP_TO_PAD1; |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
311 |
return AMS_TTDP_TO_JUNCTION; |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
312 |
|
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
313 |
case TERM2: |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
314 |
if (amdflag & AMED_EXACTPOS) return AMS_TTDP_TO_PAD2; |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
315 |
return AMS_TTDP_TO_ENTRY_2_AND_3_AND_H; |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
316 |
|
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
317 |
case TERM3: |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
318 |
case TERM4: |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
319 |
case TERM5: |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
320 |
case TERM6: |
4059
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4058
diff
changeset
|
321 |
case TERM7: |
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4058
diff
changeset
|
322 |
case TERM8: |
3702
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
323 |
/* TTDPatch only has 3 terminals, so treat these states the same */ |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
324 |
if (amdflag & AMED_EXACTPOS) return AMS_TTDP_TO_PAD3; |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
325 |
return AMS_TTDP_TO_ENTRY_2_AND_3_AND_H; |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
326 |
|
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
327 |
case HELIPAD1: |
4059
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4058
diff
changeset
|
328 |
case HELIPAD2: |
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4058
diff
changeset
|
329 |
case HELIPAD3: |
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4058
diff
changeset
|
330 |
case HELIPAD4: // Will only occur for helicopters. |
3920
771542d40c45
(svn r5047) - NewGRF: fix typo of AIRPORT in enum
peter1138
parents:
3893
diff
changeset
|
331 |
if (amdflag & AMED_HELI_LOWER) return AMS_TTDP_HELI_LAND_AIRPORT; // Descending. |
3702
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
332 |
if (amdflag & AMED_SLOWTURN) return AMS_TTDP_FLIGHT_TO_TOWER; // Still hasn't started descent. |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
333 |
return AMS_TTDP_TO_JUNCTION; // On the ground. |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
334 |
|
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
335 |
case TAKEOFF: // Moving to takeoff position. |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
336 |
return AMS_TTDP_TO_OUTWAY; |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
337 |
|
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
338 |
case STARTTAKEOFF: // Accelerating down runway. |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
339 |
return AMS_TTDP_TAKEOFF; |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
340 |
|
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
341 |
case ENDTAKEOFF: // Ascent |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
342 |
return AMS_TTDP_CLIMBING; |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
343 |
|
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
344 |
case HELITAKEOFF: // Helicopter is moving to take off position. |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
345 |
switch (st->airport_type) { |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
346 |
case AT_SMALL: |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
347 |
case AT_LARGE: |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
348 |
case AT_METROPOLITAN: |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
349 |
case AT_INTERNATIONAL: |
4059
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4058
diff
changeset
|
350 |
case AT_COMMUTER: |
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4058
diff
changeset
|
351 |
case AT_INTERCON: |
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4058
diff
changeset
|
352 |
/* Note, Helidepot and Helistation are treated as airports as |
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4058
diff
changeset
|
353 |
* helicopters are taking off from ground level. */ |
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4058
diff
changeset
|
354 |
case AT_HELIDEPOT: |
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4058
diff
changeset
|
355 |
case AT_HELISTATION: |
3920
771542d40c45
(svn r5047) - NewGRF: fix typo of AIRPORT in enum
peter1138
parents:
3893
diff
changeset
|
356 |
if (amdflag & AMED_HELI_RAISE) return AMS_TTDP_HELI_TAKEOFF_AIRPORT; |
3702
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
357 |
return AMS_TTDP_TO_JUNCTION; |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
358 |
|
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
359 |
case AT_HELIPORT: |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
360 |
case AT_OILRIG: |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
361 |
return AMS_TTDP_HELI_TAKEOFF_HELIPORT; |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
362 |
|
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
363 |
default: |
3920
771542d40c45
(svn r5047) - NewGRF: fix typo of AIRPORT in enum
peter1138
parents:
3893
diff
changeset
|
364 |
return AMS_TTDP_HELI_TAKEOFF_AIRPORT; |
3702
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
365 |
} |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
366 |
|
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
367 |
case FLYING: |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
368 |
return AMS_TTDP_FLIGHT_TO_TOWER; |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
369 |
|
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
370 |
case LANDING: // Descent |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
371 |
return AMS_TTDP_FLIGHT_DESCENT; |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
372 |
|
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
373 |
case ENDLANDING: // On the runway braking |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
374 |
if (amdflag & AMED_BRAKE) return AMS_TTDP_BRAKING; |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
375 |
// Landed - moving off runway |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
376 |
return AMS_TTDP_TO_INWAY; |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
377 |
|
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
378 |
case HELILANDING: |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
379 |
case HELIENDLANDING: // Helicoptor is decending. |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
380 |
if (amdflag & AMED_HELI_LOWER) { |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
381 |
switch (st->airport_type) { |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
382 |
case AT_HELIPORT: |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
383 |
case AT_OILRIG: |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
384 |
return AMS_TTDP_HELI_LAND_HELIPORT; |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
385 |
|
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
386 |
default: |
4059
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4058
diff
changeset
|
387 |
/* Note, Helidepot and Helistation are treated as airports as |
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4058
diff
changeset
|
388 |
* helicopters are landing at ground level. */ |
3920
771542d40c45
(svn r5047) - NewGRF: fix typo of AIRPORT in enum
peter1138
parents:
3893
diff
changeset
|
389 |
return AMS_TTDP_HELI_LAND_AIRPORT; |
3702
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
390 |
} |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
391 |
} |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
392 |
return AMS_TTDP_FLIGHT_TO_TOWER; |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
393 |
|
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
394 |
default: |
4055
2507869fbafe
(svn r5335) - Newgrf: correct spelling of hangar
peter1138
parents:
4050
diff
changeset
|
395 |
return AMS_TTDP_HANGAR; |
3702
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
396 |
} |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
397 |
} |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
398 |
|
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
399 |
|
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
400 |
/* TTDP style aircraft movement action for GRF Action 2 Var 0xE6 */ |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
401 |
enum { |
4055
2507869fbafe
(svn r5335) - Newgrf: correct spelling of hangar
peter1138
parents:
4050
diff
changeset
|
402 |
AMA_TTDP_IN_HANGAR, |
3702
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
403 |
AMA_TTDP_ON_PAD1, |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
404 |
AMA_TTDP_ON_PAD2, |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
405 |
AMA_TTDP_ON_PAD3, |
4055
2507869fbafe
(svn r5335) - Newgrf: correct spelling of hangar
peter1138
parents:
4050
diff
changeset
|
406 |
AMA_TTDP_HANGAR_TO_PAD1, |
2507869fbafe
(svn r5335) - Newgrf: correct spelling of hangar
peter1138
parents:
4050
diff
changeset
|
407 |
AMA_TTDP_HANGAR_TO_PAD2, |
2507869fbafe
(svn r5335) - Newgrf: correct spelling of hangar
peter1138
parents:
4050
diff
changeset
|
408 |
AMA_TTDP_HANGAR_TO_PAD3, |
3702
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
409 |
AMA_TTDP_LANDING_TO_PAD1, |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
410 |
AMA_TTDP_LANDING_TO_PAD2, |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
411 |
AMA_TTDP_LANDING_TO_PAD3, |
4055
2507869fbafe
(svn r5335) - Newgrf: correct spelling of hangar
peter1138
parents:
4050
diff
changeset
|
412 |
AMA_TTDP_PAD1_TO_HANGAR, |
2507869fbafe
(svn r5335) - Newgrf: correct spelling of hangar
peter1138
parents:
4050
diff
changeset
|
413 |
AMA_TTDP_PAD2_TO_HANGAR, |
2507869fbafe
(svn r5335) - Newgrf: correct spelling of hangar
peter1138
parents:
4050
diff
changeset
|
414 |
AMA_TTDP_PAD3_TO_HANGAR, |
3702
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
415 |
AMA_TTDP_PAD1_TO_TAKEOFF, |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
416 |
AMA_TTDP_PAD2_TO_TAKEOFF, |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
417 |
AMA_TTDP_PAD3_TO_TAKEOFF, |
4055
2507869fbafe
(svn r5335) - Newgrf: correct spelling of hangar
peter1138
parents:
4050
diff
changeset
|
418 |
AMA_TTDP_HANGAR_TO_TAKOFF, |
2507869fbafe
(svn r5335) - Newgrf: correct spelling of hangar
peter1138
parents:
4050
diff
changeset
|
419 |
AMA_TTDP_LANDING_TO_HANGAR, |
3702
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
420 |
AMA_TTDP_IN_FLIGHT, |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
421 |
}; |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
422 |
|
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
423 |
|
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
424 |
/** |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
425 |
* Map OTTD aircraft movement states to TTDPatch style movement actions |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
426 |
* (VarAction 2 Variable 0xE6) |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
427 |
* This is not fully supported yet but it's enough for Planeset. |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
428 |
*/ |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
429 |
static byte MapAircraftMovementAction(const Vehicle *v) |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
430 |
{ |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
431 |
switch (v->u.air.state) { |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
432 |
case HANGAR: |
4055
2507869fbafe
(svn r5335) - Newgrf: correct spelling of hangar
peter1138
parents:
4050
diff
changeset
|
433 |
return (v->cur_speed > 0) ? AMA_TTDP_LANDING_TO_HANGAR : AMA_TTDP_IN_HANGAR; |
3702
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
434 |
|
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
435 |
case TERM1: |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
436 |
case HELIPAD1: |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
437 |
return (v->current_order.type == OT_LOADING) ? AMA_TTDP_ON_PAD1 : AMA_TTDP_LANDING_TO_PAD1; |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
438 |
|
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
439 |
case TERM2: |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
440 |
case HELIPAD2: |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
441 |
return (v->current_order.type == OT_LOADING) ? AMA_TTDP_ON_PAD2 : AMA_TTDP_LANDING_TO_PAD2; |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
442 |
|
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
443 |
case TERM3: |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
444 |
case TERM4: |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
445 |
case TERM5: |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
446 |
case TERM6: |
4059
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4058
diff
changeset
|
447 |
case TERM7: |
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4058
diff
changeset
|
448 |
case TERM8: |
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4058
diff
changeset
|
449 |
case HELIPAD3: |
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4058
diff
changeset
|
450 |
case HELIPAD4: |
3702
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
451 |
return (v->current_order.type == OT_LOADING) ? AMA_TTDP_ON_PAD3 : AMA_TTDP_LANDING_TO_PAD3; |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
452 |
|
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
453 |
case TAKEOFF: // Moving to takeoff position |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
454 |
case STARTTAKEOFF: // Accelerating down runway |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
455 |
case ENDTAKEOFF: // Ascent |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
456 |
case HELITAKEOFF: |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
457 |
// TODO Need to find which terminal (or hanger) we've come from. How? |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
458 |
return AMA_TTDP_PAD1_TO_TAKEOFF; |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
459 |
|
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
460 |
case FLYING: |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
461 |
return AMA_TTDP_IN_FLIGHT; |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
462 |
|
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
463 |
case LANDING: // Descent |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
464 |
case ENDLANDING: // On the runway braking |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
465 |
case HELILANDING: |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
466 |
case HELIENDLANDING: |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
467 |
// TODO Need to check terminal we're landing to. Is it known yet? |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
468 |
return (v->current_order.type == OT_GOTO_DEPOT) ? |
4055
2507869fbafe
(svn r5335) - Newgrf: correct spelling of hangar
peter1138
parents:
4050
diff
changeset
|
469 |
AMA_TTDP_LANDING_TO_HANGAR : AMA_TTDP_LANDING_TO_PAD1; |
3702
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
470 |
|
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
471 |
default: |
4055
2507869fbafe
(svn r5335) - Newgrf: correct spelling of hangar
peter1138
parents:
4050
diff
changeset
|
472 |
return AMA_TTDP_IN_HANGAR; |
3702
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
473 |
} |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
474 |
} |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
475 |
|
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
476 |
|
3703
7a63c0e05948
(svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents:
3702
diff
changeset
|
477 |
/* TTDP airport types. Used to map our types to TTDPatch's */ |
7a63c0e05948
(svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents:
3702
diff
changeset
|
478 |
enum { |
7a63c0e05948
(svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents:
3702
diff
changeset
|
479 |
ATP_TTDP_SMALL, |
7a63c0e05948
(svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents:
3702
diff
changeset
|
480 |
ATP_TTDP_LARGE, |
7a63c0e05948
(svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents:
3702
diff
changeset
|
481 |
ATP_TTDP_HELIPORT, |
7a63c0e05948
(svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents:
3702
diff
changeset
|
482 |
ATP_TTDP_OILRIG, |
7a63c0e05948
(svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents:
3702
diff
changeset
|
483 |
}; |
7a63c0e05948
(svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents:
3702
diff
changeset
|
484 |
|
7a63c0e05948
(svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents:
3702
diff
changeset
|
485 |
|
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
486 |
/* Vehicle Resolver Functions */ |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
487 |
static inline const Vehicle *GRV(const ResolverObject *object) |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
488 |
{ |
3720
755978f398d9
(svn r4691) - Codechange: don't use unnamed unions as GCC 2.95.ancient won't compile it. Needed for our MorphOS user ;)
peter1138
parents:
3706
diff
changeset
|
489 |
return object->scope == VSG_SCOPE_SELF ? object->u.vehicle.self : object->u.vehicle.parent; |
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
490 |
} |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
491 |
|
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
492 |
|
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
493 |
static uint32 VehicleGetRandomBits(const ResolverObject *object) |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
494 |
{ |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
495 |
return GRV(object) == NULL ? 0 : GRV(object)->random_bits; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
496 |
} |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
497 |
|
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver 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 |
|
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver 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 |
static uint32 VehicleGetTriggers(const ResolverObject *object) |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
500 |
{ |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
501 |
return GRV(object) == NULL ? 0 : GRV(object)->waiting_triggers; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver 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 |
} |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver 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 |
|
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
504 |
|
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver 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 |
static void VehicleSetTriggers(const ResolverObject *object, int triggers) |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver 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 |
{ |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver 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 |
/* Evil cast to get around const-ness. This used to be achieved by an |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver 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 |
* innocent looking function pointer cast... Currently I cannot see a |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver 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 |
* way of avoiding this without removing consts deep within gui code. |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver 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 |
*/ |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver 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 |
Vehicle *v = (Vehicle*)GRV(object); |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver 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 |
|
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver 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 |
/* This function must only be called when processing triggers -- any |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver 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 |
* other time is an error. */ |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
515 |
assert(object->trigger != 0); |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
516 |
|
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver 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 |
if (v != NULL) v->waiting_triggers = triggers; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver 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 |
} |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver 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 |
|
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver 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 |
|
4058
019da48e79d3
(svn r5338) - NewGRF: add support for vehicle variable 48, vehicle type info (more mart3p)
peter1138
parents:
4057
diff
changeset
|
521 |
static uint32 GetVehicleTypeInfo(EngineID engine_type) |
019da48e79d3
(svn r5338) - NewGRF: add support for vehicle variable 48, vehicle type info (more mart3p)
peter1138
parents:
4057
diff
changeset
|
522 |
{ |
019da48e79d3
(svn r5338) - NewGRF: add support for vehicle variable 48, vehicle type info (more mart3p)
peter1138
parents:
4057
diff
changeset
|
523 |
/* Bit 0 Vehicle type is available on the market |
019da48e79d3
(svn r5338) - NewGRF: add support for vehicle variable 48, vehicle type info (more mart3p)
peter1138
parents:
4057
diff
changeset
|
524 |
* Bit 1 Vehicle type is in the testing phase |
019da48e79d3
(svn r5338) - NewGRF: add support for vehicle variable 48, vehicle type info (more mart3p)
peter1138
parents:
4057
diff
changeset
|
525 |
* Bit 2 Exclusive testing offer for a human player active */ |
019da48e79d3
(svn r5338) - NewGRF: add support for vehicle variable 48, vehicle type info (more mart3p)
peter1138
parents:
4057
diff
changeset
|
526 |
const Engine *e = GetEngine(engine_type); |
019da48e79d3
(svn r5338) - NewGRF: add support for vehicle variable 48, vehicle type info (more mart3p)
peter1138
parents:
4057
diff
changeset
|
527 |
uint32 var = 0; |
019da48e79d3
(svn r5338) - NewGRF: add support for vehicle variable 48, vehicle type info (more mart3p)
peter1138
parents:
4057
diff
changeset
|
528 |
|
019da48e79d3
(svn r5338) - NewGRF: add support for vehicle variable 48, vehicle type info (more mart3p)
peter1138
parents:
4057
diff
changeset
|
529 |
if (e->player_avail == 0xFF) SETBIT(var, 0); |
019da48e79d3
(svn r5338) - NewGRF: add support for vehicle variable 48, vehicle type info (more mart3p)
peter1138
parents:
4057
diff
changeset
|
530 |
if (e->age < e->duration_phase_1) SETBIT(var, 1); |
019da48e79d3
(svn r5338) - NewGRF: add support for vehicle variable 48, vehicle type info (more mart3p)
peter1138
parents:
4057
diff
changeset
|
531 |
if (e->player_avail > 0 && e->player_avail != 0xFF) SETBIT(var, 2); |
019da48e79d3
(svn r5338) - NewGRF: add support for vehicle variable 48, vehicle type info (more mart3p)
peter1138
parents:
4057
diff
changeset
|
532 |
return var; |
019da48e79d3
(svn r5338) - NewGRF: add support for vehicle variable 48, vehicle type info (more mart3p)
peter1138
parents:
4057
diff
changeset
|
533 |
} |
019da48e79d3
(svn r5338) - NewGRF: add support for vehicle variable 48, vehicle type info (more mart3p)
peter1138
parents:
4057
diff
changeset
|
534 |
|
019da48e79d3
(svn r5338) - NewGRF: add support for vehicle variable 48, vehicle type info (more mart3p)
peter1138
parents:
4057
diff
changeset
|
535 |
|
4057
36ceb8e7cbd2
(svn r5337) - NewGRF: pass the engine type to the engine resolver, to allow support for variable 7F for unbuilt vehicles (mart3p)
peter1138
parents:
4056
diff
changeset
|
536 |
static uint32 GetGRFParameter(EngineID engine_type, byte parameter) |
36ceb8e7cbd2
(svn r5337) - NewGRF: pass the engine type to the engine resolver, to allow support for variable 7F for unbuilt vehicles (mart3p)
peter1138
parents:
4056
diff
changeset
|
537 |
{ |
36ceb8e7cbd2
(svn r5337) - NewGRF: pass the engine type to the engine resolver, to allow support for variable 7F for unbuilt vehicles (mart3p)
peter1138
parents:
4056
diff
changeset
|
538 |
const GRFFile *file = GetEngineGRF(engine_type); |
36ceb8e7cbd2
(svn r5337) - NewGRF: pass the engine type to the engine resolver, to allow support for variable 7F for unbuilt vehicles (mart3p)
peter1138
parents:
4056
diff
changeset
|
539 |
|
36ceb8e7cbd2
(svn r5337) - NewGRF: pass the engine type to the engine resolver, to allow support for variable 7F for unbuilt vehicles (mart3p)
peter1138
parents:
4056
diff
changeset
|
540 |
if (parameter >= file->param_end) return 0; |
36ceb8e7cbd2
(svn r5337) - NewGRF: pass the engine type to the engine resolver, to allow support for variable 7F for unbuilt vehicles (mart3p)
peter1138
parents:
4056
diff
changeset
|
541 |
return file->param[parameter]; |
36ceb8e7cbd2
(svn r5337) - NewGRF: pass the engine type to the engine resolver, to allow support for variable 7F for unbuilt vehicles (mart3p)
peter1138
parents:
4056
diff
changeset
|
542 |
} |
36ceb8e7cbd2
(svn r5337) - NewGRF: pass the engine type to the engine resolver, to allow support for variable 7F for unbuilt vehicles (mart3p)
peter1138
parents:
4056
diff
changeset
|
543 |
|
36ceb8e7cbd2
(svn r5337) - NewGRF: pass the engine type to the engine resolver, to allow support for variable 7F for unbuilt vehicles (mart3p)
peter1138
parents:
4056
diff
changeset
|
544 |
|
3893
46169364701b
(svn r4960) - NewGRF: explicitly handle unsupported variables, instead of returning -1.
peter1138
parents:
3870
diff
changeset
|
545 |
static uint32 VehicleGetVariable(const ResolverObject *object, byte variable, byte parameter, bool *available) |
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
546 |
{ |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
547 |
const Vehicle *v = GRV(object); |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
548 |
|
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
549 |
if (v == NULL) { |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
550 |
/* Vehicle does not exist, so we're in a purchase list */ |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
551 |
switch (variable) { |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
552 |
case 0x43: return _current_player; /* Owner information */ |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
553 |
case 0x46: return 0; /* Motion counter */ |
4058
019da48e79d3
(svn r5338) - NewGRF: add support for vehicle variable 48, vehicle type info (more mart3p)
peter1138
parents:
4057
diff
changeset
|
554 |
case 0x48: return GetVehicleTypeInfo(object->u.vehicle.self_type); /* Vehicle Type Info */ |
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
555 |
case 0xC4: return _cur_year; /* Build year */ |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
556 |
case 0xDA: return INVALID_VEHICLE; /* Next vehicle */ |
4057
36ceb8e7cbd2
(svn r5337) - NewGRF: pass the engine type to the engine resolver, to allow support for variable 7F for unbuilt vehicles (mart3p)
peter1138
parents:
4056
diff
changeset
|
557 |
case 0x7F: return GetGRFParameter(object->u.vehicle.self_type, parameter); /* Read GRF parameter */ |
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
558 |
} |
3893
46169364701b
(svn r4960) - NewGRF: explicitly handle unsupported variables, instead of returning -1.
peter1138
parents:
3870
diff
changeset
|
559 |
|
46169364701b
(svn r4960) - NewGRF: explicitly handle unsupported variables, instead of returning -1.
peter1138
parents:
3870
diff
changeset
|
560 |
*available = false; |
46169364701b
(svn r4960) - NewGRF: explicitly handle unsupported variables, instead of returning -1.
peter1138
parents:
3870
diff
changeset
|
561 |
return -1; |
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
562 |
} |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
563 |
|
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
564 |
/* Calculated vehicle parameters */ |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
565 |
switch (variable) { |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
566 |
case 0x40: /* Get length of consist */ |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
567 |
case 0x41: /* Get length of same consecutive wagons */ |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
568 |
if (v->type != VEH_Train) return 1; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
569 |
|
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
570 |
{ |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
571 |
const Vehicle* u; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
572 |
byte chain_before = 0; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
573 |
byte chain_after = 0; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
574 |
|
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
575 |
for (u = GetFirstVehicleInChain(v); u != v; u = u->next) { |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
576 |
chain_before++; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
577 |
if (variable == 0x41 && u->engine_type != v->engine_type) chain_before = 0; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
578 |
} |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
579 |
|
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
580 |
while (u->next != NULL && (variable == 0x40 || u->next->engine_type == v->engine_type)) { |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
581 |
chain_after++; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
582 |
u = u->next; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
583 |
} |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
584 |
|
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
585 |
return chain_before | chain_after << 8 | (chain_before + chain_after) << 16; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
586 |
} |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
587 |
|
3843
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
588 |
case 0x42: { /* Consist cargo information */ |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
589 |
/* XXX Missing support for common refit cycle and property 25 */ |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
590 |
const Vehicle *u; |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
591 |
byte cargo_classes = 0; |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
592 |
uint common_cargo_best = 0; |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
593 |
uint common_cargos[NUM_GLOBAL_CID]; |
3862
898c8212afa1
(svn r4896) - NewGRF: add support for vehicle property 0x25 (user defined data) used by variable 0x42.
peter1138
parents:
3848
diff
changeset
|
594 |
byte user_def_data = 0; |
3843
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
595 |
CargoID cargo; |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
596 |
CargoID common_cargo_type = GC_PASSENGERS; |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
597 |
|
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
598 |
/* Reset our arrays */ |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
599 |
memset(common_cargos, 0, sizeof(common_cargos)); |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
600 |
|
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
601 |
for (u = v; u != NULL; u = u->next) { |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
602 |
/* Skip empty engines */ |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
603 |
if (u->cargo_cap == 0) continue; |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
604 |
/* Map from climate to global cargo ID */ |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
605 |
cargo = _global_cargo_id[_opt.landscape][u->cargo_type]; |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
606 |
cargo_classes |= _cargo_classes[cargo]; |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
607 |
common_cargos[cargo]++; |
3862
898c8212afa1
(svn r4896) - NewGRF: add support for vehicle property 0x25 (user defined data) used by variable 0x42.
peter1138
parents:
3848
diff
changeset
|
608 |
user_def_data |= RailVehInfo(u->engine_type)->user_def_data; |
3843
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
609 |
} |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
610 |
|
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
611 |
/* Pick the most common cargo type */ |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
612 |
for (cargo = 0; cargo < NUM_GLOBAL_CID; cargo++) { |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
613 |
if (common_cargos[cargo] > common_cargo_best) { |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
614 |
common_cargo_best = common_cargos[cargo]; |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
615 |
common_cargo_type = cargo; |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
616 |
} |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
617 |
} |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
618 |
|
3862
898c8212afa1
(svn r4896) - NewGRF: add support for vehicle property 0x25 (user defined data) used by variable 0x42.
peter1138
parents:
3848
diff
changeset
|
619 |
return cargo_classes | (common_cargo_type << 8) | (user_def_data << 24); |
3843
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
620 |
} |
931e6e89dfb2
(svn r4867) - NewGRF: implement partial support for engine variable 0x42
peter1138
parents:
3785
diff
changeset
|
621 |
|
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
622 |
case 0x43: /* Player information */ |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
623 |
return v->owner; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
624 |
|
3703
7a63c0e05948
(svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents:
3702
diff
changeset
|
625 |
case 0x44: /* Aircraft information */ |
7a63c0e05948
(svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents:
3702
diff
changeset
|
626 |
if (v->type != VEH_Aircraft) return -1; |
7a63c0e05948
(svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents:
3702
diff
changeset
|
627 |
|
7a63c0e05948
(svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents:
3702
diff
changeset
|
628 |
{ |
7a63c0e05948
(svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents:
3702
diff
changeset
|
629 |
const Vehicle *w = v->next; |
7a63c0e05948
(svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents:
3702
diff
changeset
|
630 |
uint16 altitude = v->z_pos - w->z_pos; /* Aircraft height - shadow height */ |
7a63c0e05948
(svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents:
3702
diff
changeset
|
631 |
byte airporttype; |
7a63c0e05948
(svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents:
3702
diff
changeset
|
632 |
|
7a63c0e05948
(svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents:
3702
diff
changeset
|
633 |
switch (GetStation(v->u.air.targetairport)->airport_type) { |
4059
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4058
diff
changeset
|
634 |
/* Note, Helidepot and Helistation are treated as small airports |
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4058
diff
changeset
|
635 |
* as they are at ground level. */ |
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4058
diff
changeset
|
636 |
case AT_HELIDEPOT: |
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4058
diff
changeset
|
637 |
case AT_HELISTATION: |
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4058
diff
changeset
|
638 |
case AT_COMMUTER: |
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4058
diff
changeset
|
639 |
case AT_SMALL: airporttype = ATP_TTDP_SMALL; break; |
3703
7a63c0e05948
(svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents:
3702
diff
changeset
|
640 |
case AT_METROPOLITAN: |
7a63c0e05948
(svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents:
3702
diff
changeset
|
641 |
case AT_INTERNATIONAL: |
4059
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4058
diff
changeset
|
642 |
case AT_INTERCON: |
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4058
diff
changeset
|
643 |
case AT_LARGE: airporttype = ATP_TTDP_LARGE; break; |
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4058
diff
changeset
|
644 |
case AT_HELIPORT: airporttype = ATP_TTDP_HELIPORT; break; |
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4058
diff
changeset
|
645 |
case AT_OILRIG: airporttype = ATP_TTDP_OILRIG; break; |
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4058
diff
changeset
|
646 |
default: airporttype = ATP_TTDP_LARGE; break; |
3703
7a63c0e05948
(svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents:
3702
diff
changeset
|
647 |
} |
7a63c0e05948
(svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents:
3702
diff
changeset
|
648 |
|
7a63c0e05948
(svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents:
3702
diff
changeset
|
649 |
return (altitude << 8) | airporttype; |
7a63c0e05948
(svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents:
3702
diff
changeset
|
650 |
} |
7a63c0e05948
(svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents:
3702
diff
changeset
|
651 |
|
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
652 |
case 0x46: /* Motion counter */ |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
653 |
return 0; |
3723
e999035b1172
(svn r4696) - NewGRF: add support for vehicle variable 0x60, count vehicle type occurance.
peter1138
parents:
3720
diff
changeset
|
654 |
|
3848
8cc088ddcfce
(svn r4872) - NewGRF: add support for vehicle variable 0x47 (mart3p)
peter1138
parents:
3845
diff
changeset
|
655 |
case 0x47: { /* Vehicle cargo info */ |
8cc088ddcfce
(svn r4872) - NewGRF: add support for vehicle variable 0x47 (mart3p)
peter1138
parents:
3845
diff
changeset
|
656 |
/* Format: ccccwwtt |
8cc088ddcfce
(svn r4872) - NewGRF: add support for vehicle variable 0x47 (mart3p)
peter1138
parents:
3845
diff
changeset
|
657 |
* tt - the cargo type transported by the vehicle, |
8cc088ddcfce
(svn r4872) - NewGRF: add support for vehicle variable 0x47 (mart3p)
peter1138
parents:
3845
diff
changeset
|
658 |
* translated if a translation table has been installed. |
8cc088ddcfce
(svn r4872) - NewGRF: add support for vehicle variable 0x47 (mart3p)
peter1138
parents:
3845
diff
changeset
|
659 |
* ww - cargo unit weight in 1/16 tons, same as cargo prop. 0F. |
8cc088ddcfce
(svn r4872) - NewGRF: add support for vehicle variable 0x47 (mart3p)
peter1138
parents:
3845
diff
changeset
|
660 |
* cccc - the cargo class value of the cargo transported by the vehicle. |
8cc088ddcfce
(svn r4872) - NewGRF: add support for vehicle variable 0x47 (mart3p)
peter1138
parents:
3845
diff
changeset
|
661 |
*/ |
8cc088ddcfce
(svn r4872) - NewGRF: add support for vehicle variable 0x47 (mart3p)
peter1138
parents:
3845
diff
changeset
|
662 |
CargoID cid = _global_cargo_id[_opt.landscape][v->cargo_type]; |
8cc088ddcfce
(svn r4872) - NewGRF: add support for vehicle variable 0x47 (mart3p)
peter1138
parents:
3845
diff
changeset
|
663 |
|
8cc088ddcfce
(svn r4872) - NewGRF: add support for vehicle variable 0x47 (mart3p)
peter1138
parents:
3845
diff
changeset
|
664 |
return (_cargo_classes[cid] << 16) | (_cargoc.weights[v->cargo_type] << 8) | cid; |
8cc088ddcfce
(svn r4872) - NewGRF: add support for vehicle variable 0x47 (mart3p)
peter1138
parents:
3845
diff
changeset
|
665 |
} |
8cc088ddcfce
(svn r4872) - NewGRF: add support for vehicle variable 0x47 (mart3p)
peter1138
parents:
3845
diff
changeset
|
666 |
|
4058
019da48e79d3
(svn r5338) - NewGRF: add support for vehicle variable 48, vehicle type info (more mart3p)
peter1138
parents:
4057
diff
changeset
|
667 |
case 0x48: return GetVehicleTypeInfo(v->engine_type); /* Vehicle Type Info */ |
019da48e79d3
(svn r5338) - NewGRF: add support for vehicle variable 48, vehicle type info (more mart3p)
peter1138
parents:
4057
diff
changeset
|
668 |
|
3723
e999035b1172
(svn r4696) - NewGRF: add support for vehicle variable 0x60, count vehicle type occurance.
peter1138
parents:
3720
diff
changeset
|
669 |
/* Variables which use the parameter */ |
e999035b1172
(svn r4696) - NewGRF: add support for vehicle variable 0x60, count vehicle type occurance.
peter1138
parents:
3720
diff
changeset
|
670 |
case 0x60: /* Count consist's engine ID occurance */ |
e999035b1172
(svn r4696) - NewGRF: add support for vehicle variable 0x60, count vehicle type occurance.
peter1138
parents:
3720
diff
changeset
|
671 |
if (v->type != VEH_Train) return v->engine_type == parameter; |
e999035b1172
(svn r4696) - NewGRF: add support for vehicle variable 0x60, count vehicle type occurance.
peter1138
parents:
3720
diff
changeset
|
672 |
|
e999035b1172
(svn r4696) - NewGRF: add support for vehicle variable 0x60, count vehicle type occurance.
peter1138
parents:
3720
diff
changeset
|
673 |
{ |
e999035b1172
(svn r4696) - NewGRF: add support for vehicle variable 0x60, count vehicle type occurance.
peter1138
parents:
3720
diff
changeset
|
674 |
uint count = 0; |
e999035b1172
(svn r4696) - NewGRF: add support for vehicle variable 0x60, count vehicle type occurance.
peter1138
parents:
3720
diff
changeset
|
675 |
for (; v != NULL; v = v->next) { |
e999035b1172
(svn r4696) - NewGRF: add support for vehicle variable 0x60, count vehicle type occurance.
peter1138
parents:
3720
diff
changeset
|
676 |
if (v->engine_type == parameter) count++; |
e999035b1172
(svn r4696) - NewGRF: add support for vehicle variable 0x60, count vehicle type occurance.
peter1138
parents:
3720
diff
changeset
|
677 |
} |
e999035b1172
(svn r4696) - NewGRF: add support for vehicle variable 0x60, count vehicle type occurance.
peter1138
parents:
3720
diff
changeset
|
678 |
return count; |
e999035b1172
(svn r4696) - NewGRF: add support for vehicle variable 0x60, count vehicle type occurance.
peter1138
parents:
3720
diff
changeset
|
679 |
} |
3925
0b0c1fc5535e
(svn r5060) - NewGRF: add support for variable 7F (retrieve GRF parameter) for vehicles
peter1138
parents:
3924
diff
changeset
|
680 |
|
4057
36ceb8e7cbd2
(svn r5337) - NewGRF: pass the engine type to the engine resolver, to allow support for variable 7F for unbuilt vehicles (mart3p)
peter1138
parents:
4056
diff
changeset
|
681 |
case 0x7F: return GetGRFParameter(v->engine_type, parameter); /* Read GRF parameter */ |
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
682 |
} |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
683 |
|
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
684 |
/* General vehicle properties */ |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
685 |
switch (variable - 0x80) { |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
686 |
case 0x00: return v->type; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
687 |
case 0x01: return MapOldSubType(v); |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
688 |
case 0x04: return v->index; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
689 |
case 0x05: return v->index & 0xFF; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
690 |
case 0x0A: return PackOrder(&v->current_order); |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
691 |
case 0x0B: return PackOrder(&v->current_order) & 0xFF; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
692 |
case 0x0C: return v->num_orders; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
693 |
case 0x0D: return v->cur_order_index; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
694 |
case 0x10: return v->load_unload_time_rem; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
695 |
case 0x11: return v->load_unload_time_rem & 0xFF; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
696 |
case 0x12: return v->date_of_last_service; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
697 |
case 0x13: return v->date_of_last_service & 0xFF; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
698 |
case 0x14: return v->service_interval; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
699 |
case 0x15: return v->service_interval & 0xFF; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
700 |
case 0x16: return v->last_station_visited; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
701 |
case 0x17: return v->tick_counter; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
702 |
case 0x18: return v->max_speed; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
703 |
case 0x19: return v->max_speed & 0xFF; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
704 |
case 0x1A: return v->x_pos; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
705 |
case 0x1B: return v->x_pos & 0xFF; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
706 |
case 0x1C: return v->y_pos; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
707 |
case 0x1D: return v->y_pos & 0xFF; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
708 |
case 0x1E: return v->z_pos; |
4056
30ceffc75059
(svn r5336) - NewGRF: draw custom helicopter rotor sprites in vehicle info window, ensuring the correct direction is used (inspiration from mart3p)
peter1138
parents:
4055
diff
changeset
|
709 |
case 0x1F: return object->info_view ? DIR_W : v->direction; |
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
710 |
case 0x28: return v->cur_image; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
711 |
case 0x29: return v->cur_image & 0xFF; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
712 |
case 0x32: return v->vehstatus; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
713 |
case 0x33: return v->vehstatus; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
714 |
case 0x34: return v->cur_speed; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
715 |
case 0x35: return v->cur_speed & 0xFF; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
716 |
case 0x36: return v->subspeed; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
717 |
case 0x37: return v->acceleration; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
718 |
case 0x39: return v->cargo_type; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
719 |
case 0x3A: return v->cargo_cap; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
720 |
case 0x3B: return v->cargo_cap & 0xFF; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
721 |
case 0x3C: return v->cargo_count; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
722 |
case 0x3D: return v->cargo_count & 0xFF; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
723 |
case 0x3E: return v->cargo_source; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
724 |
case 0x3F: return v->cargo_days; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
725 |
case 0x40: return v->age; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
726 |
case 0x41: return v->age & 0xFF; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
727 |
case 0x42: return v->max_age; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
728 |
case 0x43: return v->max_age & 0xFF; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
729 |
case 0x44: return v->build_year; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
730 |
case 0x45: return v->unitnumber; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
731 |
case 0x46: return v->engine_type; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
732 |
case 0x47: return v->engine_type & 0xFF; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
733 |
case 0x48: return v->spritenum; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
734 |
case 0x49: return v->day_counter; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
735 |
case 0x4A: return v->breakdowns_since_last_service; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
736 |
case 0x4B: return v->breakdown_ctr; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
737 |
case 0x4C: return v->breakdown_delay; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
738 |
case 0x4D: return v->breakdown_chance; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
739 |
case 0x4E: return v->reliability; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
740 |
case 0x4F: return v->reliability & 0xFF; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
741 |
case 0x50: return v->reliability_spd_dec; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
742 |
case 0x51: return v->reliability_spd_dec & 0xFF; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
743 |
case 0x52: return v->profit_this_year; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
744 |
case 0x53: return v->profit_this_year & 0xFFFFFF; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
745 |
case 0x54: return v->profit_this_year & 0xFFFF; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
746 |
case 0x55: return v->profit_this_year & 0xFF; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
747 |
case 0x56: return v->profit_last_year; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
748 |
case 0x57: return v->profit_last_year & 0xFF; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
749 |
case 0x58: return v->profit_last_year; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
750 |
case 0x59: return v->profit_last_year & 0xFF; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
751 |
case 0x5A: return v->next == NULL ? INVALID_VEHICLE : v->next->index; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
752 |
case 0x5C: return v->value; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
753 |
case 0x5D: return v->value & 0xFFFFFF; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
754 |
case 0x5E: return v->value & 0xFFFF; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
755 |
case 0x5F: return v->value & 0xFF; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
756 |
case 0x60: return v->string_id; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
757 |
case 0x61: return v->string_id & 0xFF; |
3870
766d7bd6c299
(svn r4910) - NewGRF: add and initialize cargo subtype for vehicle visual variations
peter1138
parents:
3866
diff
changeset
|
758 |
case 0x72: return v->cargo_subtype; |
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
759 |
case 0x7A: return v->random_bits; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
760 |
case 0x7B: return v->waiting_triggers; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
761 |
} |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
762 |
|
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
763 |
/* Vehicle specific properties */ |
3014
fbbc1ea2a1c9
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
764 |
switch (v->type) { |
fbbc1ea2a1c9
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
765 |
case VEH_Train: |
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
766 |
switch (variable - 0x80) { |
3014
fbbc1ea2a1c9
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
767 |
case 0x62: return v->u.rail.track; |
fbbc1ea2a1c9
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
768 |
case 0x66: return v->u.rail.railtype; |
fbbc1ea2a1c9
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
769 |
case 0x73: return v->u.rail.cached_veh_length; |
fbbc1ea2a1c9
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
770 |
case 0x74: return v->u.rail.cached_power; |
fbbc1ea2a1c9
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
771 |
case 0x75: return v->u.rail.cached_power & 0xFFFFFF; |
fbbc1ea2a1c9
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
772 |
case 0x76: return v->u.rail.cached_power & 0xFFFF; |
fbbc1ea2a1c9
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
773 |
case 0x77: return v->u.rail.cached_power & 0xFF; |
fbbc1ea2a1c9
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
774 |
case 0x7C: return v->first->index; |
fbbc1ea2a1c9
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
775 |
case 0x7D: return v->first->index & 0xFF; |
4050
b03689c406ff
(svn r5320) - NewGRF: make sets using TTDPatch's train reversing hack/feature happier (and consistent) by returning 0 for the flag it uses.
peter1138
parents:
4023
diff
changeset
|
776 |
case 0x7F: return 0; // Used for vehicle reversing hack in TTDP |
3014
fbbc1ea2a1c9
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
777 |
} |
fbbc1ea2a1c9
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
778 |
break; |
fbbc1ea2a1c9
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
779 |
|
fbbc1ea2a1c9
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
780 |
case VEH_Road: |
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
781 |
switch (variable - 0x80) { |
3014
fbbc1ea2a1c9
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
782 |
case 0x62: return v->u.road.state; |
fbbc1ea2a1c9
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
783 |
case 0x64: return v->u.road.blocked_ctr; |
fbbc1ea2a1c9
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
784 |
case 0x65: return v->u.road.blocked_ctr & 0xFF; |
fbbc1ea2a1c9
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
785 |
case 0x66: return v->u.road.overtaking; |
fbbc1ea2a1c9
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
786 |
case 0x67: return v->u.road.overtaking_ctr; |
fbbc1ea2a1c9
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
787 |
case 0x68: return v->u.road.crashed_ctr; |
fbbc1ea2a1c9
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
788 |
case 0x69: return v->u.road.crashed_ctr & 0xFF; |
fbbc1ea2a1c9
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
789 |
} |
fbbc1ea2a1c9
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
790 |
break; |
fbbc1ea2a1c9
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
791 |
|
fbbc1ea2a1c9
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
792 |
case VEH_Aircraft: |
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
793 |
switch (variable - 0x80) { |
3702
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
794 |
case 0x62: return MapAircraftMovementState(v); // Current movement state |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
795 |
case 0x63: return v->u.air.targetairport; // Airport to which the action refers |
b4ba84e5beef
(svn r4643) - NewGRF: Add support for ttdp aircraft states. This involves mapping from our own state. (heavily based on mart3p's code)
peter1138
parents:
3696
diff
changeset
|
796 |
case 0x66: return MapAircraftMovementAction(v); // Current movement action |
3014
fbbc1ea2a1c9
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
797 |
} |
fbbc1ea2a1c9
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
798 |
break; |
fbbc1ea2a1c9
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
799 |
} |
fbbc1ea2a1c9
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
800 |
|
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
801 |
DEBUG(grf, 1)("Unhandled vehicle property 0x%X, type 0x%X", variable, v->type); |
3014
fbbc1ea2a1c9
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
802 |
|
3893
46169364701b
(svn r4960) - NewGRF: explicitly handle unsupported variables, instead of returning -1.
peter1138
parents:
3870
diff
changeset
|
803 |
*available = false; |
3014
fbbc1ea2a1c9
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
804 |
return -1; |
fbbc1ea2a1c9
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
805 |
} |
fbbc1ea2a1c9
(svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents:
2982
diff
changeset
|
806 |
|
426
bd6f3c2cad9f
(svn r625) Almost complete support for deterministic variational vehicle spritegroups. (pasky)
tron
parents:
414
diff
changeset
|
807 |
|
3734
f929883c5ae0
(svn r4714) - NewGRF: simplify evaluation of 'real' sprite groups.
peter1138
parents:
3731
diff
changeset
|
808 |
static const SpriteGroup *VehicleResolveReal(const ResolverObject *object, const SpriteGroup *group) |
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
809 |
{ |
3720
755978f398d9
(svn r4691) - Codechange: don't use unnamed unions as GCC 2.95.ancient won't compile it. Needed for our MorphOS user ;)
peter1138
parents:
3706
diff
changeset
|
810 |
const Vehicle *v = object->u.vehicle.self; |
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
811 |
uint totalsets; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
812 |
uint set; |
3734
f929883c5ae0
(svn r4714) - NewGRF: simplify evaluation of 'real' sprite groups.
peter1138
parents:
3731
diff
changeset
|
813 |
bool in_motion; |
426
bd6f3c2cad9f
(svn r625) Almost complete support for deterministic variational vehicle spritegroups. (pasky)
tron
parents:
414
diff
changeset
|
814 |
|
3739
f9c405bf3e9d
(svn r4721) - NewGRF: use loading sprites rather than loaded when there is no vehicle (fixes issue with purchase list)
peter1138
parents:
3734
diff
changeset
|
815 |
if (v == NULL) return group->g.real.loading[0]; |
3734
f929883c5ae0
(svn r4714) - NewGRF: simplify evaluation of 'real' sprite groups.
peter1138
parents:
3731
diff
changeset
|
816 |
|
f929883c5ae0
(svn r4714) - NewGRF: simplify evaluation of 'real' sprite groups.
peter1138
parents:
3731
diff
changeset
|
817 |
if (v->type == VEH_Train) { |
f929883c5ae0
(svn r4714) - NewGRF: simplify evaluation of 'real' sprite groups.
peter1138
parents:
3731
diff
changeset
|
818 |
in_motion = GetFirstVehicleInChain(v)->current_order.type != OT_LOADING; |
f929883c5ae0
(svn r4714) - NewGRF: simplify evaluation of 'real' sprite groups.
peter1138
parents:
3731
diff
changeset
|
819 |
} else { |
f929883c5ae0
(svn r4714) - NewGRF: simplify evaluation of 'real' sprite groups.
peter1138
parents:
3731
diff
changeset
|
820 |
in_motion = v->current_order.type != OT_LOADING; |
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
821 |
} |
445
0e3fa3da3899
(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
|
822 |
|
3734
f929883c5ae0
(svn r4714) - NewGRF: simplify evaluation of 'real' sprite groups.
peter1138
parents:
3731
diff
changeset
|
823 |
totalsets = in_motion ? group->g.real.num_loaded : group->g.real.num_loading; |
445
0e3fa3da3899
(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
|
824 |
|
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
825 |
if (v->cargo_count == v->cargo_cap || totalsets == 1) { |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
826 |
set = totalsets - 1; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
827 |
} else if (v->cargo_count == 0 || totalsets == 2) { |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
828 |
set = 0; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
829 |
} else { |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
830 |
set = v->cargo_count * (totalsets - 2) / max(1, v->cargo_cap) + 1; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
831 |
} |
426
bd6f3c2cad9f
(svn r625) Almost complete support for deterministic variational vehicle spritegroups. (pasky)
tron
parents:
414
diff
changeset
|
832 |
|
3734
f929883c5ae0
(svn r4714) - NewGRF: simplify evaluation of 'real' sprite groups.
peter1138
parents:
3731
diff
changeset
|
833 |
return in_motion ? group->g.real.loaded[set] : group->g.real.loading[set]; |
426
bd6f3c2cad9f
(svn r625) Almost complete support for deterministic variational vehicle spritegroups. (pasky)
tron
parents:
414
diff
changeset
|
834 |
} |
bd6f3c2cad9f
(svn r625) Almost complete support for deterministic variational vehicle spritegroups. (pasky)
tron
parents:
414
diff
changeset
|
835 |
|
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
836 |
|
4057
36ceb8e7cbd2
(svn r5337) - NewGRF: pass the engine type to the engine resolver, to allow support for variable 7F for unbuilt vehicles (mart3p)
peter1138
parents:
4056
diff
changeset
|
837 |
static inline void NewVehicleResolver(ResolverObject *res, EngineID engine_type, const Vehicle *v) |
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
838 |
{ |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
839 |
res->GetRandomBits = &VehicleGetRandomBits; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
840 |
res->GetTriggers = &VehicleGetTriggers; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
841 |
res->SetTriggers = &VehicleSetTriggers; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
842 |
res->GetVariable = &VehicleGetVariable; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
843 |
res->ResolveReal = &VehicleResolveReal; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
844 |
|
3720
755978f398d9
(svn r4691) - Codechange: don't use unnamed unions as GCC 2.95.ancient won't compile it. Needed for our MorphOS user ;)
peter1138
parents:
3706
diff
changeset
|
845 |
res->u.vehicle.self = v; |
755978f398d9
(svn r4691) - Codechange: don't use unnamed unions as GCC 2.95.ancient won't compile it. Needed for our MorphOS user ;)
peter1138
parents:
3706
diff
changeset
|
846 |
res->u.vehicle.parent = (v != NULL && v->type == VEH_Train) ? GetFirstVehicleInChain(v) : v; |
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
847 |
|
4057
36ceb8e7cbd2
(svn r5337) - NewGRF: pass the engine type to the engine resolver, to allow support for variable 7F for unbuilt vehicles (mart3p)
peter1138
parents:
4056
diff
changeset
|
848 |
res->u.vehicle.self_type = engine_type; |
36ceb8e7cbd2
(svn r5337) - NewGRF: pass the engine type to the engine resolver, to allow support for variable 7F for unbuilt vehicles (mart3p)
peter1138
parents:
4056
diff
changeset
|
849 |
|
4056
30ceffc75059
(svn r5336) - NewGRF: draw custom helicopter rotor sprites in vehicle info window, ensuring the correct direction is used (inspiration from mart3p)
peter1138
parents:
4055
diff
changeset
|
850 |
res->info_view = false; |
30ceffc75059
(svn r5336) - NewGRF: draw custom helicopter rotor sprites in vehicle info window, ensuring the correct direction is used (inspiration from mart3p)
peter1138
parents:
4055
diff
changeset
|
851 |
|
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
852 |
res->callback = 0; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
853 |
res->callback_param1 = 0; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
854 |
res->callback_param2 = 0; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
855 |
res->last_value = 0; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
856 |
res->trigger = 0; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
857 |
res->reseed = 0; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
858 |
} |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
859 |
|
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
860 |
|
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
861 |
SpriteID GetCustomEngineSprite(EngineID engine, const Vehicle *v, Direction direction) |
0 | 862 |
{ |
2242
27fa4807cd61
(svn r2762) Simplify a loop, remove an unused variable and add many consts
tron
parents:
2204
diff
changeset
|
863 |
const SpriteGroup *group; |
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
864 |
ResolverObject object; |
3344
d86c852715fa
(svn r4128) - CodeChange: Add proper semantics for CargoID for such variables instead of using the general byte-type.
Darkvater
parents:
3300
diff
changeset
|
865 |
CargoID cargo = GC_PURCHASE; |
0 | 866 |
|
4057
36ceb8e7cbd2
(svn r5337) - NewGRF: pass the engine type to the engine resolver, to allow support for variable 7F for unbuilt vehicles (mart3p)
peter1138
parents:
4056
diff
changeset
|
867 |
NewVehicleResolver(&object, engine, v); |
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
868 |
|
414
e18cc252e2ea
(svn r611) -newgrf: Change GetCustomEngineSprite() calling convention (invisible to users of GetCustomVehicle*() wrappers). Needed for deterministic spritegroups support (pasky).
darkvater
parents:
410
diff
changeset
|
869 |
if (v != NULL) { |
e18cc252e2ea
(svn r611) -newgrf: Change GetCustomEngineSprite() calling convention (invisible to users of GetCustomVehicle*() wrappers). Needed for deterministic spritegroups support (pasky).
darkvater
parents:
410
diff
changeset
|
870 |
cargo = _global_cargo_id[_opt.landscape][v->cargo_type]; |
1802
448f187042d3
(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
|
871 |
assert(cargo != GC_INVALID); |
414
e18cc252e2ea
(svn r611) -newgrf: Change GetCustomEngineSprite() calling convention (invisible to users of GetCustomVehicle*() wrappers). Needed for deterministic spritegroups support (pasky).
darkvater
parents:
410
diff
changeset
|
872 |
} |
e18cc252e2ea
(svn r611) -newgrf: Change GetCustomEngineSprite() calling convention (invisible to users of GetCustomVehicle*() wrappers). Needed for deterministic spritegroups support (pasky).
darkvater
parents:
410
diff
changeset
|
873 |
|
2488
cbe3d6b60c27
(svn r3014) -NewGRF, Codechange: Make all sprite group references be pointers instead of copying the data around.
peter1138
parents:
2477
diff
changeset
|
874 |
group = engine_custom_sprites[engine][cargo]; |
414
e18cc252e2ea
(svn r611) -newgrf: Change GetCustomEngineSprite() calling convention (invisible to users of GetCustomVehicle*() wrappers). Needed for deterministic spritegroups support (pasky).
darkvater
parents:
410
diff
changeset
|
875 |
|
1560
50acca78ff8d
(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
|
876 |
if (v != NULL && v->type == VEH_Train) { |
2242
27fa4807cd61
(svn r2762) Simplify a loop, remove an unused variable and add many consts
tron
parents:
2204
diff
changeset
|
877 |
const SpriteGroup *overset = GetWagonOverrideSpriteSet(engine, v->u.rail.first_engine); |
0 | 878 |
|
1477 | 879 |
if (overset != NULL) group = overset; |
0 | 880 |
} |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
114
diff
changeset
|
881 |
|
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
882 |
group = Resolve(group, &object); |
445
0e3fa3da3899
(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
|
883 |
|
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
884 |
if ((group == NULL || group->type != SGT_RESULT) && cargo != GC_DEFAULT) { |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
885 |
// This group is empty but perhaps there'll be a default one. |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
886 |
group = Resolve(engine_custom_sprites[engine][GC_DEFAULT], &object); |
445
0e3fa3da3899
(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
|
887 |
} |
0e3fa3da3899
(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
|
888 |
|
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
889 |
if (group == NULL || group->type != SGT_RESULT) return 0; |
3668
d7ed0a867b49
(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
|
890 |
|
d7ed0a867b49
(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
|
891 |
return group->g.result.sprite + (direction % group->g.result.num_sprites); |
0 | 892 |
} |
893 |
||
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
894 |
|
4056
30ceffc75059
(svn r5336) - NewGRF: draw custom helicopter rotor sprites in vehicle info window, ensuring the correct direction is used (inspiration from mart3p)
peter1138
parents:
4055
diff
changeset
|
895 |
SpriteID GetRotorOverrideSprite(EngineID engine, const Vehicle *v, bool info_view) |
3695
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
896 |
{ |
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
897 |
const SpriteGroup *group; |
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
898 |
ResolverObject object; |
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
899 |
|
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
900 |
assert(engine >= AIRCRAFT_ENGINES_INDEX); |
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
901 |
assert(engine < AIRCRAFT_ENGINES_INDEX + NUM_AIRCRAFT_ENGINES); |
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
902 |
|
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
903 |
/* Only valid for helicopters */ |
4023
b65af90447d2
(svn r5262) Add symbolic names for the aircraft subtypes. not perfect, but better than raw numbers
tron
parents:
3925
diff
changeset
|
904 |
assert(!(AircraftVehInfo(engine)->subtype & AIR_CTOL)); |
3695
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
905 |
|
4057
36ceb8e7cbd2
(svn r5337) - NewGRF: pass the engine type to the engine resolver, to allow support for variable 7F for unbuilt vehicles (mart3p)
peter1138
parents:
4056
diff
changeset
|
906 |
NewVehicleResolver(&object, engine, v); |
3695
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
907 |
|
4056
30ceffc75059
(svn r5336) - NewGRF: draw custom helicopter rotor sprites in vehicle info window, ensuring the correct direction is used (inspiration from mart3p)
peter1138
parents:
4055
diff
changeset
|
908 |
object.info_view = info_view; |
30ceffc75059
(svn r5336) - NewGRF: draw custom helicopter rotor sprites in vehicle info window, ensuring the correct direction is used (inspiration from mart3p)
peter1138
parents:
4055
diff
changeset
|
909 |
|
3695
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
910 |
group = heli_rotor_custom_sprites[engine - AIRCRAFT_ENGINES_INDEX]; |
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
911 |
group = Resolve(group, &object); |
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
912 |
|
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
913 |
if (group == NULL || group->type != SGT_RESULT) return 0; |
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
914 |
|
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
915 |
if (v == NULL) return group->g.result.sprite; |
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
916 |
|
4056
30ceffc75059
(svn r5336) - NewGRF: draw custom helicopter rotor sprites in vehicle info window, ensuring the correct direction is used (inspiration from mart3p)
peter1138
parents:
4055
diff
changeset
|
917 |
return group->g.result.sprite + (info_view ? 0 : (v->next->next->u.air.state % group->g.result.num_sprites)); |
3695
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
918 |
} |
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
919 |
|
aae28fa7190e
(svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents:
3693
diff
changeset
|
920 |
|
1883
3b02000cfbe0
(svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents:
1881
diff
changeset
|
921 |
/** |
1908
bc48a30aba72
(svn r2414) - Feature: [newgrf] Implement powered wagons, and the callback that goes with it.
hackykid
parents:
1904
diff
changeset
|
922 |
* Check if a wagon is currently using a wagon override |
bc48a30aba72
(svn r2414) - Feature: [newgrf] Implement powered wagons, and the callback that goes with it.
hackykid
parents:
1904
diff
changeset
|
923 |
* @param v The wagon to check |
bc48a30aba72
(svn r2414) - Feature: [newgrf] Implement powered wagons, and the callback that goes with it.
hackykid
parents:
1904
diff
changeset
|
924 |
* @return true if it is using an override, false otherwise |
bc48a30aba72
(svn r2414) - Feature: [newgrf] Implement powered wagons, and the callback that goes with it.
hackykid
parents:
1904
diff
changeset
|
925 |
*/ |
2548
97ada3bd2702
(svn r3077) static, const, bracing, indentation, 0 -> '\0'/NULL, typos in comments, excess empty lines, minor other changes
tron
parents:
2530
diff
changeset
|
926 |
bool UsesWagonOverride(const Vehicle* v) |
97ada3bd2702
(svn r3077) static, const, bracing, indentation, 0 -> '\0'/NULL, typos in comments, excess empty lines, minor other changes
tron
parents:
2530
diff
changeset
|
927 |
{ |
1908
bc48a30aba72
(svn r2414) - Feature: [newgrf] Implement powered wagons, and the callback that goes with it.
hackykid
parents:
1904
diff
changeset
|
928 |
assert(v->type == VEH_Train); |
2242
27fa4807cd61
(svn r2762) Simplify a loop, remove an unused variable and add many consts
tron
parents:
2204
diff
changeset
|
929 |
return GetWagonOverrideSpriteSet(v->engine_type, v->u.rail.first_engine) != NULL; |
1908
bc48a30aba72
(svn r2414) - Feature: [newgrf] Implement powered wagons, and the callback that goes with it.
hackykid
parents:
1904
diff
changeset
|
930 |
} |
bc48a30aba72
(svn r2414) - Feature: [newgrf] Implement powered wagons, and the callback that goes with it.
hackykid
parents:
1904
diff
changeset
|
931 |
|
bc48a30aba72
(svn r2414) - Feature: [newgrf] Implement powered wagons, and the callback that goes with it.
hackykid
parents:
1904
diff
changeset
|
932 |
/** |
3390
f910bc27153e
(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
|
933 |
* Evaluate a newgrf callback for vehicles |
f910bc27153e
(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
|
934 |
* @param callback The callback to evalute |
f910bc27153e
(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
|
935 |
* @param param1 First parameter of the callback |
f910bc27153e
(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
|
936 |
* @param param2 Second parameter of the callback |
f910bc27153e
(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
|
937 |
* @param engine Engine type of the vehicle to evaluate the callback for |
f910bc27153e
(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
|
938 |
* @param vehicle The vehicle to evaluate the callback for, or NULL if it doesnt exist yet |
1883
3b02000cfbe0
(svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents:
1881
diff
changeset
|
939 |
* @return The value the callback returned, or CALLBACK_FAILED if it failed |
3b02000cfbe0
(svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents:
1881
diff
changeset
|
940 |
*/ |
3724
20f5c1aa911d
(svn r4697) - NewGRF: callback IDs can now be 16 bit values.
peter1138
parents:
3723
diff
changeset
|
941 |
uint16 GetVehicleCallback(uint16 callback, uint32 param1, uint32 param2, EngineID engine, const Vehicle *v) |
1883
3b02000cfbe0
(svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents:
1881
diff
changeset
|
942 |
{ |
2242
27fa4807cd61
(svn r2762) Simplify a loop, remove an unused variable and add many consts
tron
parents:
2204
diff
changeset
|
943 |
const SpriteGroup *group; |
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
944 |
ResolverObject object; |
3607
1ea65325ce91
(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
|
945 |
CargoID cargo; |
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
946 |
|
4057
36ceb8e7cbd2
(svn r5337) - NewGRF: pass the engine type to the engine resolver, to allow support for variable 7F for unbuilt vehicles (mart3p)
peter1138
parents:
4056
diff
changeset
|
947 |
NewVehicleResolver(&object, engine, v); |
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
948 |
|
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
949 |
object.callback = callback; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
950 |
object.callback_param1 = param1; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
951 |
object.callback_param2 = param2; |
1883
3b02000cfbe0
(svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents:
1881
diff
changeset
|
952 |
|
3607
1ea65325ce91
(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
|
953 |
cargo = (v == NULL) ? GC_PURCHASE : _global_cargo_id[_opt.landscape][v->cargo_type]; |
1883
3b02000cfbe0
(svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents:
1881
diff
changeset
|
954 |
|
2488
cbe3d6b60c27
(svn r3014) -NewGRF, Codechange: Make all sprite group references be pointers instead of copying the data around.
peter1138
parents:
2477
diff
changeset
|
955 |
group = engine_custom_sprites[engine][cargo]; |
1904
cf8a8adc33c9
(svn r2410) - Fix: [newgrf] When resolving callbacks, dont ignore wagon overrides.
hackykid
parents:
1891
diff
changeset
|
956 |
|
cf8a8adc33c9
(svn r2410) - Fix: [newgrf] When resolving callbacks, dont ignore wagon overrides.
hackykid
parents:
1891
diff
changeset
|
957 |
if (v != NULL && v->type == VEH_Train) { |
2242
27fa4807cd61
(svn r2762) Simplify a loop, remove an unused variable and add many consts
tron
parents:
2204
diff
changeset
|
958 |
const SpriteGroup *overset = GetWagonOverrideSpriteSet(engine, v->u.rail.first_engine); |
1904
cf8a8adc33c9
(svn r2410) - Fix: [newgrf] When resolving callbacks, dont ignore wagon overrides.
hackykid
parents:
1891
diff
changeset
|
959 |
|
cf8a8adc33c9
(svn r2410) - Fix: [newgrf] When resolving callbacks, dont ignore wagon overrides.
hackykid
parents:
1891
diff
changeset
|
960 |
if (overset != NULL) group = overset; |
cf8a8adc33c9
(svn r2410) - Fix: [newgrf] When resolving callbacks, dont ignore wagon overrides.
hackykid
parents:
1891
diff
changeset
|
961 |
} |
cf8a8adc33c9
(svn r2410) - Fix: [newgrf] When resolving callbacks, dont ignore wagon overrides.
hackykid
parents:
1891
diff
changeset
|
962 |
|
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
963 |
group = Resolve(group, &object); |
1883
3b02000cfbe0
(svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents:
1881
diff
changeset
|
964 |
|
3607
1ea65325ce91
(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
|
965 |
if ((group == NULL || group->type != SGT_CALLBACK) && cargo != GC_DEFAULT) { |
1883
3b02000cfbe0
(svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents:
1881
diff
changeset
|
966 |
// This group is empty but perhaps there'll be a default one. |
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
967 |
group = Resolve(engine_custom_sprites[engine][GC_DEFAULT], &object); |
1883
3b02000cfbe0
(svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents:
1881
diff
changeset
|
968 |
} |
3b02000cfbe0
(svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents:
1881
diff
changeset
|
969 |
|
2488
cbe3d6b60c27
(svn r3014) -NewGRF, Codechange: Make all sprite group references be pointers instead of copying the data around.
peter1138
parents:
2477
diff
changeset
|
970 |
if (group == NULL || group->type != SGT_CALLBACK) |
1883
3b02000cfbe0
(svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents:
1881
diff
changeset
|
971 |
return CALLBACK_FAILED; |
3b02000cfbe0
(svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents:
1881
diff
changeset
|
972 |
|
3b02000cfbe0
(svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents:
1881
diff
changeset
|
973 |
return group->g.callback.result; |
3b02000cfbe0
(svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents:
1881
diff
changeset
|
974 |
} |
3b02000cfbe0
(svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents:
1881
diff
changeset
|
975 |
|
3726
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
976 |
/** |
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
977 |
* Evaluate a newgrf callback for vehicles with a different vehicle for parent scope. |
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
978 |
* @param callback The callback to evalute |
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
979 |
* @param param1 First parameter of the callback |
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
980 |
* @param param2 Second parameter of the callback |
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
981 |
* @param engine Engine type of the vehicle to evaluate the callback for |
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
982 |
* @param v The vehicle to evaluate the callback for, or NULL if it doesnt exist yet |
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
983 |
* @param parent The vehicle to use for parent scope |
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
984 |
* @return The value the callback returned, or CALLBACK_FAILED if it failed |
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
985 |
*/ |
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
986 |
uint16 GetVehicleCallbackParent(uint16 callback, uint32 param1, uint32 param2, EngineID engine, const Vehicle *v, const Vehicle *parent) |
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
987 |
{ |
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
988 |
const SpriteGroup *group; |
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
989 |
ResolverObject object; |
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
990 |
CargoID cargo; |
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
991 |
|
4057
36ceb8e7cbd2
(svn r5337) - NewGRF: pass the engine type to the engine resolver, to allow support for variable 7F for unbuilt vehicles (mart3p)
peter1138
parents:
4056
diff
changeset
|
992 |
NewVehicleResolver(&object, engine, v); |
3726
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
993 |
|
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
994 |
object.callback = callback; |
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
995 |
object.callback_param1 = param1; |
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
996 |
object.callback_param2 = param2; |
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
997 |
|
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
998 |
object.u.vehicle.parent = parent; |
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
999 |
|
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
1000 |
cargo = (v == NULL) ? GC_PURCHASE : _global_cargo_id[_opt.landscape][v->cargo_type]; |
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
1001 |
|
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
1002 |
group = engine_custom_sprites[engine][cargo]; |
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
1003 |
|
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
1004 |
if (v != NULL && v->type == VEH_Train) { |
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
1005 |
const SpriteGroup *overset = GetWagonOverrideSpriteSet(engine, v->u.rail.first_engine); |
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
1006 |
|
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
1007 |
if (overset != NULL) group = overset; |
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
1008 |
} |
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
1009 |
|
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
1010 |
group = Resolve(group, &object); |
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
1011 |
|
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
1012 |
if ((group == NULL || group->type != SGT_CALLBACK) && cargo != GC_DEFAULT) { |
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
1013 |
// This group is empty but perhaps there'll be a default one. |
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
1014 |
group = Resolve(engine_custom_sprites[engine][GC_DEFAULT], &object); |
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
1015 |
} |
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
1016 |
|
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
1017 |
if (group == NULL || group->type != SGT_CALLBACK) |
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
1018 |
return CALLBACK_FAILED; |
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
1019 |
|
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
1020 |
return group->g.callback.result; |
a446208c7296
(svn r4702) - NewGRF: add support for 'special' vehicle callbacks that use a different vehicle for parent scope than the first vehicle in the consist.
peter1138
parents:
3724
diff
changeset
|
1021 |
} |
1883
3b02000cfbe0
(svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents:
1881
diff
changeset
|
1022 |
|
3680 | 1023 |
static void DoTriggerVehicle(Vehicle *v, VehicleTrigger trigger, byte base_random_bits, bool first) |
445
0e3fa3da3899
(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
|
1024 |
{ |
2242
27fa4807cd61
(svn r2762) Simplify a loop, remove an unused variable and add many consts
tron
parents:
2204
diff
changeset
|
1025 |
const SpriteGroup *group; |
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
1026 |
ResolverObject object; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
1027 |
CargoID cargo; |
445
0e3fa3da3899
(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
|
1028 |
byte new_random_bits; |
0e3fa3da3899
(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
|
1029 |
|
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
1030 |
/* We can't trigger a non-existent vehicle... */ |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
1031 |
assert(v != NULL); |
1883
3b02000cfbe0
(svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents:
1881
diff
changeset
|
1032 |
|
4057
36ceb8e7cbd2
(svn r5337) - NewGRF: pass the engine type to the engine resolver, to allow support for variable 7F for unbuilt vehicles (mart3p)
peter1138
parents:
4056
diff
changeset
|
1033 |
NewVehicleResolver(&object, v->engine_type, v); |
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
1034 |
|
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
1035 |
object.trigger = trigger; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
1036 |
|
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
1037 |
cargo = _global_cargo_id[_opt.landscape][v->cargo_type]; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
1038 |
group = engine_custom_sprites[v->engine_type][cargo]; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
1039 |
|
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
1040 |
if (v->type == VEH_Train) { |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
1041 |
const SpriteGroup *overset = GetWagonOverrideSpriteSet(v->engine_type, v->u.rail.first_engine); |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
1042 |
if (overset != NULL) group = overset; |
445
0e3fa3da3899
(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
|
1043 |
} |
1883
3b02000cfbe0
(svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents:
1881
diff
changeset
|
1044 |
|
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
1045 |
group = Resolve(group, &object); |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
1046 |
if (group == NULL && v->cargo_type != GC_DEFAULT) { |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
1047 |
// This group is empty but perhaps there'll be a default one. |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
1048 |
group = Resolve(engine_custom_sprites[v->engine_type][GC_DEFAULT], &object); |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
1049 |
} |
2488
cbe3d6b60c27
(svn r3014) -NewGRF, Codechange: Make all sprite group references be pointers instead of copying the data around.
peter1138
parents:
2477
diff
changeset
|
1050 |
|
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
1051 |
/* Really return? */ |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
1052 |
if (group == NULL) return; |
1883
3b02000cfbe0
(svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents:
1881
diff
changeset
|
1053 |
|
542 | 1054 |
new_random_bits = Random(); |
3686
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
1055 |
v->random_bits &= ~object.reseed; |
55efe6da4dfb
(svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents:
3684
diff
changeset
|
1056 |
v->random_bits |= (first ? new_random_bits : base_random_bits) & object.reseed; |
445
0e3fa3da3899
(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
|
1057 |
|
0e3fa3da3899
(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
|
1058 |
switch (trigger) { |
0e3fa3da3899
(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
|
1059 |
case VEHICLE_TRIGGER_NEW_CARGO: |
0e3fa3da3899
(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
|
1060 |
/* All vehicles in chain get ANY_NEW_CARGO trigger now. |
0e3fa3da3899
(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
|
1061 |
* So we call it for the first one and they will recurse. */ |
0e3fa3da3899
(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
|
1062 |
/* Indexing part of vehicle random bits needs to be |
0e3fa3da3899
(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
|
1063 |
* same for all triggered vehicles in the chain (to get |
0e3fa3da3899
(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
|
1064 |
* all the random-cargo wagons carry the same cargo, |
0e3fa3da3899
(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
|
1065 |
* i.e.), so we give them all the NEW_CARGO triggered |
0e3fa3da3899
(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
|
1066 |
* vehicle's portion of random bits. */ |
0e3fa3da3899
(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
|
1067 |
assert(first); |
3680 | 1068 |
DoTriggerVehicle(GetFirstVehicleInChain(v), VEHICLE_TRIGGER_ANY_NEW_CARGO, new_random_bits, false); |
445
0e3fa3da3899
(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
|
1069 |
break; |
3680 | 1070 |
|
445
0e3fa3da3899
(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
|
1071 |
case VEHICLE_TRIGGER_DEPOT: |
0e3fa3da3899
(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
|
1072 |
/* We now trigger the next vehicle in chain recursively. |
0e3fa3da3899
(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
|
1073 |
* The random bits portions may be different for each |
0e3fa3da3899
(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
|
1074 |
* vehicle in chain. */ |
3680 | 1075 |
if (v->next != NULL) DoTriggerVehicle(v->next, trigger, 0, true); |
445
0e3fa3da3899
(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
|
1076 |
break; |
3680 | 1077 |
|
445
0e3fa3da3899
(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
|
1078 |
case VEHICLE_TRIGGER_EMPTY: |
0e3fa3da3899
(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
|
1079 |
/* We now trigger the next vehicle in chain |
0e3fa3da3899
(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
|
1080 |
* recursively. The random bits portions must be same |
0e3fa3da3899
(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
|
1081 |
* for each vehicle in chain, so we give them all |
0e3fa3da3899
(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
|
1082 |
* first chained vehicle's portion of random bits. */ |
3680 | 1083 |
if (v->next != NULL) DoTriggerVehicle(v->next, trigger, first ? new_random_bits : base_random_bits, false); |
445
0e3fa3da3899
(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
|
1084 |
break; |
3680 | 1085 |
|
445
0e3fa3da3899
(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
|
1086 |
case VEHICLE_TRIGGER_ANY_NEW_CARGO: |
0e3fa3da3899
(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
|
1087 |
/* Now pass the trigger recursively to the next vehicle |
0e3fa3da3899
(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
|
1088 |
* in chain. */ |
0e3fa3da3899
(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
|
1089 |
assert(!first); |
3680 | 1090 |
if (v->next != NULL) DoTriggerVehicle(v->next, VEHICLE_TRIGGER_ANY_NEW_CARGO, base_random_bits, false); |
445
0e3fa3da3899
(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
|
1091 |
break; |
0e3fa3da3899
(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
|
1092 |
} |
0e3fa3da3899
(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
|
1093 |
} |
0e3fa3da3899
(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
|
1094 |
|
3680 | 1095 |
void TriggerVehicle(Vehicle *v, VehicleTrigger trigger) |
445
0e3fa3da3899
(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
|
1096 |
{ |
2589
28c7b9b212af
(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
|
1097 |
if (trigger == VEHICLE_TRIGGER_DEPOT) { |
28c7b9b212af
(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
|
1098 |
// store that the vehicle entered a depot this tick |
3680 | 1099 |
VehicleEnteredDepotThisTick(v); |
2589
28c7b9b212af
(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
|
1100 |
} |
28c7b9b212af
(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
|
1101 |
|
3680 | 1102 |
DoTriggerVehicle(v, trigger, 0, true); |
445
0e3fa3da3899
(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
|
1103 |
} |
0e3fa3da3899
(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
|
1104 |
|
3604
d28877422030
(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
|
1105 |
StringID _engine_custom_names[TOTAL_NUM_ENGINES]; |
0 | 1106 |
|
3604
d28877422030
(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
|
1107 |
void SetCustomEngineName(EngineID engine, StringID name) |
0 | 1108 |
{ |
3614 | 1109 |
assert(engine < lengthof(_engine_custom_names)); |
3604
d28877422030
(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
|
1110 |
_engine_custom_names[engine] = name; |
0 | 1111 |
} |
1112 |
||
2769
acea0abd2195
(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
|
1113 |
void UnloadCustomEngineNames(void) |
1474
d83520edcda6
(svn r1978) - Fix: Plug some memleaks; thanks Valgrind
Darkvater
parents:
1329
diff
changeset
|
1114 |
{ |
3604
d28877422030
(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
|
1115 |
EngineID i; |
d28877422030
(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
|
1116 |
for (i = 0; i < TOTAL_NUM_ENGINES; i++) { |
d28877422030
(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
|
1117 |
_engine_custom_names[i] = 0; |
1474
d83520edcda6
(svn r1978) - Fix: Plug some memleaks; thanks Valgrind
Darkvater
parents:
1329
diff
changeset
|
1118 |
} |
d83520edcda6
(svn r1978) - Fix: Plug some memleaks; thanks Valgrind
Darkvater
parents:
1329
diff
changeset
|
1119 |
} |
d83520edcda6
(svn r1978) - Fix: Plug some memleaks; thanks Valgrind
Darkvater
parents:
1329
diff
changeset
|
1120 |
|
2477
d454d5152386
(svn r3003) Change int, uint, uin16 and byte to EngineID where appropriate, plus some related changes (mostly casts)
tron
parents:
2469
diff
changeset
|
1121 |
StringID GetCustomEngineName(EngineID engine) |
0 | 1122 |
{ |
3604
d28877422030
(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
|
1123 |
return _engine_custom_names[engine] == 0 ? _engine_name_strings[engine] : _engine_custom_names[engine]; |
0 | 1124 |
} |
1125 |
||
2971
9b62397dbd56
(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
|
1126 |
// Functions for changing the order of vehicle purchase lists |
9b62397dbd56
(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
|
1127 |
// This is currently only implemented for rail vehicles. |
9b62397dbd56
(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
|
1128 |
static EngineID engine_list_order[NUM_TRAIN_ENGINES]; |
9b62397dbd56
(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
|
1129 |
|
9b62397dbd56
(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
|
1130 |
void ResetEngineListOrder(void) |
9b62397dbd56
(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
|
1131 |
{ |
9b62397dbd56
(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
|
1132 |
EngineID i; |
9b62397dbd56
(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
|
1133 |
|
9b62397dbd56
(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
|
1134 |
for (i = 0; i < NUM_TRAIN_ENGINES; i++) |
9b62397dbd56
(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
|
1135 |
engine_list_order[i] = i; |
9b62397dbd56
(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
|
1136 |
} |
9b62397dbd56
(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
|
1137 |
|
9b62397dbd56
(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
|
1138 |
EngineID GetRailVehAtPosition(EngineID pos) |
9b62397dbd56
(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
|
1139 |
{ |
9b62397dbd56
(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
|
1140 |
return engine_list_order[pos]; |
9b62397dbd56
(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
|
1141 |
} |
9b62397dbd56
(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
|
1142 |
|
9b62397dbd56
(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
|
1143 |
void AlterRailVehListOrder(EngineID engine, EngineID target) |
9b62397dbd56
(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
|
1144 |
{ |
9b62397dbd56
(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
|
1145 |
EngineID i; |
9b62397dbd56
(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
|
1146 |
bool moving = false; |
9b62397dbd56
(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
|
1147 |
|
9b62397dbd56
(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
|
1148 |
if (engine == target) return; |
9b62397dbd56
(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
|
1149 |
|
9b62397dbd56
(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
|
1150 |
// First, remove our ID from the list. |
9b62397dbd56
(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
|
1151 |
for (i = 0; i < NUM_TRAIN_ENGINES - 1; i++) { |
9b62397dbd56
(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
|
1152 |
if (engine_list_order[i] == engine) |
9b62397dbd56
(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
|
1153 |
moving = true; |
9b62397dbd56
(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
|
1154 |
if (moving) |
9b62397dbd56
(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
|
1155 |
engine_list_order[i] = engine_list_order[i + 1]; |
9b62397dbd56
(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
|
1156 |
} |
9b62397dbd56
(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
|
1157 |
|
9b62397dbd56
(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
|
1158 |
// Now, insert it again, before the target engine. |
9b62397dbd56
(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
|
1159 |
for (i = NUM_TRAIN_ENGINES - 1; i > 0; i--) { |
9b62397dbd56
(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
|
1160 |
engine_list_order[i] = engine_list_order[i - 1]; |
9b62397dbd56
(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
|
1161 |
if (engine_list_order[i] == target) { |
9b62397dbd56
(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
|
1162 |
engine_list_order[i - 1] = engine; |
9b62397dbd56
(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
|
1163 |
break; |
9b62397dbd56
(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
|
1164 |
} |
9b62397dbd56
(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
|
1165 |
} |
9b62397dbd56
(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
|
1166 |
} |