newgrf_engine.c
author peter1138
Wed, 03 May 2006 20:51:42 +0000
changeset 3739 c96a784d5c53
parent 3734 5b331306e6fe
child 3785 7d4c0a7850b2
permissions -rw-r--r--
(svn r4721) - NewGRF: use loading sprites rather than loaded when there is no vehicle (fixes issue with purchase list)
2186
db48cf29b983 (svn r2701) Insert Id tags into all source files
tron
parents: 2163
diff changeset
     1
/* $Id$ */
db48cf29b983 (svn r2701) Insert Id tags into all source files
tron
parents: 2163
diff changeset
     2
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     3
#include "stdafx.h"
1891
862800791170 (svn r2397) - CodeChange: rename all "ttd" files to "openttd" files.
Darkvater
parents: 1883
diff changeset
     4
#include "openttd.h"
3686
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
     5
#include "variables.h"
1299
39c06aba09aa (svn r1803) Move debugging stuff into files of it's own
tron
parents: 1197
diff changeset
     6
#include "debug.h"
2163
b17b313113a0 (svn r2673) Include functions.h directly, not globally via openttd.h
tron
parents: 2159
diff changeset
     7
#include "functions.h"
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     8
#include "engine.h"
3686
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
     9
#include "train.h"
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
    10
#include "player.h"
3702
219fc5d61455 (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"
219fc5d61455 (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"
2982
eb7f50dcb249 (svn r3557) - NewGRF: move callback enums to a new file as more than just engines will use them
peter1138
parents: 2971
diff changeset
    13
#include "newgrf_callbacks.h"
2962
f0a49b646c48 (svn r3524) - Split newgrf features from engine.[ch] into newgrf_engine.[ch], and add the new files to project files.
peter1138
parents: 2951
diff changeset
    14
#include "newgrf_engine.h"
3686
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
    15
#include "newgrf_station.h"
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
    16
#include "newgrf_spritegroup.h"
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    17
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    18
// TODO: We don't support cargo-specific wagon overrides. Pretty exotic... ;-) --pasky
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    19
1477
9389baf2bf3c (svn r1981) Typedef some structs and enums
tron
parents: 1475
diff changeset
    20
typedef struct WagonOverride {
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    21
	byte *train_id;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    22
	int trains;
3693
c154dbd20439 (svn r4629) - NewGRF: constify more code that deals with sprite groups, now that ref counting is gone.
peter1138
parents: 3686
diff changeset
    23
	const SpriteGroup *group;
1477
9389baf2bf3c (svn r1981) Typedef some structs and enums
tron
parents: 1475
diff changeset
    24
} WagonOverride;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    25
1477
9389baf2bf3c (svn r1981) Typedef some structs and enums
tron
parents: 1475
diff changeset
    26
typedef struct WagonOverrides {
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    27
	int overrides_count;
1477
9389baf2bf3c (svn r1981) Typedef some structs and enums
tron
parents: 1475
diff changeset
    28
	WagonOverride *overrides;
9389baf2bf3c (svn r1981) Typedef some structs and enums
tron
parents: 1475
diff changeset
    29
} WagonOverrides;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    30
1477
9389baf2bf3c (svn r1981) Typedef some structs and enums
tron
parents: 1475
diff changeset
    31
static WagonOverrides _engine_wagon_overrides[TOTAL_NUM_ENGINES];
9389baf2bf3c (svn r1981) Typedef some structs and enums
tron
parents: 1475
diff changeset
    32
3693
c154dbd20439 (svn r4629) - NewGRF: constify more code that deals with sprite groups, now that ref counting is gone.
peter1138
parents: 3686
diff changeset
    33
void SetWagonOverrideSprites(EngineID engine, const SpriteGroup *group, byte *train_id, int trains)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    34
{
1477
9389baf2bf3c (svn r1981) Typedef some structs and enums
tron
parents: 1475
diff changeset
    35
	WagonOverrides *wos;
9389baf2bf3c (svn r1981) Typedef some structs and enums
tron
parents: 1475
diff changeset
    36
	WagonOverride *wo;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    37
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    38
	wos = &_engine_wagon_overrides[engine];
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    39
	wos->overrides_count++;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    40
	wos->overrides = realloc(wos->overrides,
1477
9389baf2bf3c (svn r1981) Typedef some structs and enums
tron
parents: 1475
diff changeset
    41
		wos->overrides_count * sizeof(*wos->overrides));
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 114
diff changeset
    42
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    43
	wo = &wos->overrides[wos->overrides_count - 1];
408
48da21eb9ff2 (svn r605) -newgrf: Framework for supporting variational spritegroups . Deterministic only at the moment, but random ones support shouldn't be that difficult now It doesn't do anything, but makes these actions actually possible (pasky).
darkvater
parents: 405
diff changeset
    44
	/* FIXME: If we are replacing an override, release original SpriteGroup
48da21eb9ff2 (svn r605) -newgrf: Framework for supporting variational spritegroups . Deterministic only at the moment, but random ones support shouldn't be that difficult now It doesn't do anything, but makes these actions actually possible (pasky).
darkvater
parents: 405
diff changeset
    45
	 * to prevent leaks. But first we need to refcount the SpriteGroup.
48da21eb9ff2 (svn r605) -newgrf: Framework for supporting variational spritegroups . Deterministic only at the moment, but random ones support shouldn't be that difficult now It doesn't do anything, but makes these actions actually possible (pasky).
darkvater
parents: 405
diff changeset
    46
	 * --pasky */
2488
1e98c71e5f6a (svn r3014) -NewGRF, Codechange: Make all sprite group references be pointers instead of copying the data around.
peter1138
parents: 2477
diff changeset
    47
	wo->group = group;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    48
	wo->trains = trains;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    49
	wo->train_id = malloc(trains);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    50
	memcpy(wo->train_id, train_id, trains);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    51
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    52
2477
225b2916fe2a (svn r3003) Change int, uint, uin16 and byte to EngineID where appropriate, plus some related changes (mostly casts)
tron
parents: 2469
diff changeset
    53
static const SpriteGroup *GetWagonOverrideSpriteSet(EngineID engine, byte overriding_engine)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    54
{
2242
512eae2cf006 (svn r2762) Simplify a loop, remove an unused variable and add many consts
tron
parents: 2204
diff changeset
    55
	const WagonOverrides *wos = &_engine_wagon_overrides[engine];
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    56
	int i;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    57
408
48da21eb9ff2 (svn r605) -newgrf: Framework for supporting variational spritegroups . Deterministic only at the moment, but random ones support shouldn't be that difficult now It doesn't do anything, but makes these actions actually possible (pasky).
darkvater
parents: 405
diff changeset
    58
	// XXX: This could turn out to be a timesink on profiles. We could
48da21eb9ff2 (svn r605) -newgrf: Framework for supporting variational spritegroups . Deterministic only at the moment, but random ones support shouldn't be that difficult now It doesn't do anything, but makes these actions actually possible (pasky).
darkvater
parents: 405
diff changeset
    59
	// always just dedicate 65535 bytes for an [engine][train] trampoline
48da21eb9ff2 (svn r605) -newgrf: Framework for supporting variational spritegroups . Deterministic only at the moment, but random ones support shouldn't be that difficult now It doesn't do anything, but makes these actions actually possible (pasky).
darkvater
parents: 405
diff changeset
    60
	// for O(1). Or O(logMlogN) and searching binary tree or smt. like
48da21eb9ff2 (svn r605) -newgrf: Framework for supporting variational spritegroups . Deterministic only at the moment, but random ones support shouldn't be that difficult now It doesn't do anything, but makes these actions actually possible (pasky).
darkvater
parents: 405
diff changeset
    61
	// that. --pasky
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    62
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    63
	for (i = 0; i < wos->overrides_count; i++) {
2242
512eae2cf006 (svn r2762) Simplify a loop, remove an unused variable and add many consts
tron
parents: 2204
diff changeset
    64
		const WagonOverride *wo = &wos->overrides[i];
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    65
		int j;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    66
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    67
		for (j = 0; j < wo->trains; j++) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    68
			if (wo->train_id[j] == overriding_engine)
2488
1e98c71e5f6a (svn r3014) -NewGRF, Codechange: Make all sprite group references be pointers instead of copying the data around.
peter1138
parents: 2477
diff changeset
    69
				return wo->group;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    70
		}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    71
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    72
	return NULL;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    73
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    74
2491
15a117630a4f (svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents: 2490
diff changeset
    75
/**
15a117630a4f (svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents: 2490
diff changeset
    76
 * Unload all wagon override sprite groups.
15a117630a4f (svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents: 2490
diff changeset
    77
 */
15a117630a4f (svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents: 2490
diff changeset
    78
void UnloadWagonOverrides(void)
15a117630a4f (svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents: 2490
diff changeset
    79
{
15a117630a4f (svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents: 2490
diff changeset
    80
	WagonOverrides *wos;
15a117630a4f (svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents: 2490
diff changeset
    81
	WagonOverride *wo;
15a117630a4f (svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents: 2490
diff changeset
    82
	EngineID engine;
15a117630a4f (svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents: 2490
diff changeset
    83
	int i;
15a117630a4f (svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents: 2490
diff changeset
    84
15a117630a4f (svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents: 2490
diff changeset
    85
	for (engine = 0; engine < TOTAL_NUM_ENGINES; engine++) {
15a117630a4f (svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents: 2490
diff changeset
    86
		wos = &_engine_wagon_overrides[engine];
15a117630a4f (svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents: 2490
diff changeset
    87
		for (i = 0; i < wos->overrides_count; i++) {
15a117630a4f (svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents: 2490
diff changeset
    88
			wo = &wos->overrides[i];
3595
a0acdb23e662 (svn r4486) - NewGRF: Create and use a memory pool to manage sprite groups. This
peter1138
parents: 3390
diff changeset
    89
			wo->group = NULL;
2491
15a117630a4f (svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents: 2490
diff changeset
    90
			free(wo->train_id);
15a117630a4f (svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents: 2490
diff changeset
    91
		}
15a117630a4f (svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents: 2490
diff changeset
    92
		free(wos->overrides);
15a117630a4f (svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents: 2490
diff changeset
    93
		wos->overrides_count = 0;
15a117630a4f (svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents: 2490
diff changeset
    94
		wos->overrides = NULL;
15a117630a4f (svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents: 2490
diff changeset
    95
	}
15a117630a4f (svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents: 2490
diff changeset
    96
}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    97
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    98
// 0 - 28 are cargos, 29 is default, 30 is the advert (purchase list)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    99
// (It isn't and shouldn't be like this in the GRF files since new cargo types
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   100
// may appear in future - however it's more convenient to store it like this in
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   101
// memory. --pasky)
3693
c154dbd20439 (svn r4629) - NewGRF: constify more code that deals with sprite groups, now that ref counting is gone.
peter1138
parents: 3686
diff changeset
   102
static const SpriteGroup *engine_custom_sprites[TOTAL_NUM_ENGINES][NUM_GLOBAL_CID];
3648
d234c46bb37a (svn r4559) - NewGRF: keep a record of which grf an engine is defined in. Will be used in the future.
peter1138
parents: 3630
diff changeset
   103
static uint32 _engine_grf[TOTAL_NUM_ENGINES];
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   104
3693
c154dbd20439 (svn r4629) - NewGRF: constify more code that deals with sprite groups, now that ref counting is gone.
peter1138
parents: 3686
diff changeset
   105
void SetCustomEngineSprites(EngineID engine, byte cargo, const SpriteGroup *group)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   106
{
3614
c697c69b6363 (svn r4510) - NewGRF bounds checking:
peter1138
parents: 3607
diff changeset
   107
	assert(engine < TOTAL_NUM_ENGINES);
2491
15a117630a4f (svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents: 2490
diff changeset
   108
	if (engine_custom_sprites[engine][cargo] != NULL) {
3595
a0acdb23e662 (svn r4486) - NewGRF: Create and use a memory pool to manage sprite groups. This
peter1138
parents: 3390
diff changeset
   109
		DEBUG(grf, 6)("SetCustomEngineSprites: engine `%d' cargo `%d' already has group -- replacing.", engine, cargo);
2491
15a117630a4f (svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents: 2490
diff changeset
   110
	}
2488
1e98c71e5f6a (svn r3014) -NewGRF, Codechange: Make all sprite group references be pointers instead of copying the data around.
peter1138
parents: 2477
diff changeset
   111
	engine_custom_sprites[engine][cargo] = group;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   112
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   113
2491
15a117630a4f (svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents: 2490
diff changeset
   114
/**
15a117630a4f (svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents: 2490
diff changeset
   115
 * Unload all engine sprite groups.
15a117630a4f (svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents: 2490
diff changeset
   116
 */
15a117630a4f (svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents: 2490
diff changeset
   117
void UnloadCustomEngineSprites(void)
15a117630a4f (svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents: 2490
diff changeset
   118
{
15a117630a4f (svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents: 2490
diff changeset
   119
	EngineID engine;
15a117630a4f (svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents: 2490
diff changeset
   120
	CargoID cargo;
15a117630a4f (svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents: 2490
diff changeset
   121
15a117630a4f (svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents: 2490
diff changeset
   122
	for (engine = 0; engine < TOTAL_NUM_ENGINES; engine++) {
15a117630a4f (svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents: 2490
diff changeset
   123
		for (cargo = 0; cargo < NUM_GLOBAL_CID; cargo++) {
3595
a0acdb23e662 (svn r4486) - NewGRF: Create and use a memory pool to manage sprite groups. This
peter1138
parents: 3390
diff changeset
   124
			engine_custom_sprites[engine][cargo] = NULL;
2491
15a117630a4f (svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents: 2490
diff changeset
   125
		}
3648
d234c46bb37a (svn r4559) - NewGRF: keep a record of which grf an engine is defined in. Will be used in the future.
peter1138
parents: 3630
diff changeset
   126
		_engine_grf[engine] = 0;
2491
15a117630a4f (svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents: 2490
diff changeset
   127
	}
15a117630a4f (svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents: 2490
diff changeset
   128
}
15a117630a4f (svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents: 2490
diff changeset
   129
3695
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   130
static const SpriteGroup *heli_rotor_custom_sprites[NUM_AIRCRAFT_ENGINES];
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   131
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   132
/** Load a rotor override sprite group for an aircraft */
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   133
void SetRotorOverrideSprites(EngineID engine, const SpriteGroup *group)
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   134
{
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   135
	assert(engine >= AIRCRAFT_ENGINES_INDEX);
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   136
	assert(engine < AIRCRAFT_ENGINES_INDEX + NUM_AIRCRAFT_ENGINES);
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   137
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   138
	if (heli_rotor_custom_sprites[engine - AIRCRAFT_ENGINES_INDEX] != NULL) {
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   139
		DEBUG(grf, 6)("SetRotorOverrideSprites: engine `%d' already has group -- replacing.", engine);
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   140
	}
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   141
	heli_rotor_custom_sprites[engine - AIRCRAFT_ENGINES_INDEX] = group;
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   142
}
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   143
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   144
/** Unload all rotor override sprite groups */
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   145
void UnloadRotorOverrideSprites(void)
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   146
{
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   147
	EngineID engine;
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   148
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   149
	/* Starting at AIRCRAFT_ENGINES_INDEX may seem pointless, but it means
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   150
	 * the context of EngineID is correct */
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   151
	for (engine = AIRCRAFT_ENGINES_INDEX; engine < AIRCRAFT_ENGINES_INDEX + NUM_AIRCRAFT_ENGINES; engine++) {
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   152
		heli_rotor_custom_sprites[engine - AIRCRAFT_ENGINES_INDEX] = NULL;
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   153
	}
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   154
}
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   155
3648
d234c46bb37a (svn r4559) - NewGRF: keep a record of which grf an engine is defined in. Will be used in the future.
peter1138
parents: 3630
diff changeset
   156
void SetEngineGRF(EngineID engine, uint32 grfid)
d234c46bb37a (svn r4559) - NewGRF: keep a record of which grf an engine is defined in. Will be used in the future.
peter1138
parents: 3630
diff changeset
   157
{
d234c46bb37a (svn r4559) - NewGRF: keep a record of which grf an engine is defined in. Will be used in the future.
peter1138
parents: 3630
diff changeset
   158
	assert(engine < TOTAL_NUM_ENGINES);
d234c46bb37a (svn r4559) - NewGRF: keep a record of which grf an engine is defined in. Will be used in the future.
peter1138
parents: 3630
diff changeset
   159
	_engine_grf[engine] = grfid;
d234c46bb37a (svn r4559) - NewGRF: keep a record of which grf an engine is defined in. Will be used in the future.
peter1138
parents: 3630
diff changeset
   160
}
d234c46bb37a (svn r4559) - NewGRF: keep a record of which grf an engine is defined in. Will be used in the future.
peter1138
parents: 3630
diff changeset
   161
d234c46bb37a (svn r4559) - NewGRF: keep a record of which grf an engine is defined in. Will be used in the future.
peter1138
parents: 3630
diff changeset
   162
uint32 GetEngineGRFID(EngineID engine)
d234c46bb37a (svn r4559) - NewGRF: keep a record of which grf an engine is defined in. Will be used in the future.
peter1138
parents: 3630
diff changeset
   163
{
d234c46bb37a (svn r4559) - NewGRF: keep a record of which grf an engine is defined in. Will be used in the future.
peter1138
parents: 3630
diff changeset
   164
	assert(engine < TOTAL_NUM_ENGINES);
d234c46bb37a (svn r4559) - NewGRF: keep a record of which grf an engine is defined in. Will be used in the future.
peter1138
parents: 3630
diff changeset
   165
	return _engine_grf[engine];
d234c46bb37a (svn r4559) - NewGRF: keep a record of which grf an engine is defined in. Will be used in the future.
peter1138
parents: 3630
diff changeset
   166
}
d234c46bb37a (svn r4559) - NewGRF: keep a record of which grf an engine is defined in. Will be used in the future.
peter1138
parents: 3630
diff changeset
   167
d234c46bb37a (svn r4559) - NewGRF: keep a record of which grf an engine is defined in. Will be used in the future.
peter1138
parents: 3630
diff changeset
   168
2708
48714bad9499 (svn r3252) - NewGRF: Map new train subtypes to old types for rail vehicles.
peter1138
parents: 2639
diff changeset
   169
static int MapOldSubType(const Vehicle *v)
48714bad9499 (svn r3252) - NewGRF: Map new train subtypes to old types for rail vehicles.
peter1138
parents: 2639
diff changeset
   170
{
48714bad9499 (svn r3252) - NewGRF: Map new train subtypes to old types for rail vehicles.
peter1138
parents: 2639
diff changeset
   171
	if (v->type != VEH_Train) return v->subtype;
48714bad9499 (svn r3252) - NewGRF: Map new train subtypes to old types for rail vehicles.
peter1138
parents: 2639
diff changeset
   172
	if (IsTrainEngine(v)) return 0;
48714bad9499 (svn r3252) - NewGRF: Map new train subtypes to old types for rail vehicles.
peter1138
parents: 2639
diff changeset
   173
	if (IsFreeWagon(v)) return 4;
48714bad9499 (svn r3252) - NewGRF: Map new train subtypes to old types for rail vehicles.
peter1138
parents: 2639
diff changeset
   174
	return 2;
48714bad9499 (svn r3252) - NewGRF: Map new train subtypes to old types for rail vehicles.
peter1138
parents: 2639
diff changeset
   175
}
48714bad9499 (svn r3252) - NewGRF: Map new train subtypes to old types for rail vehicles.
peter1138
parents: 2639
diff changeset
   176
3686
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   177
3702
219fc5d61455 (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
   178
/* TTDP style aircraft movement states for GRF Action 2 Var 0xE2 */
219fc5d61455 (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
   179
enum {
219fc5d61455 (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
   180
	AMS_TTDP_HANGER,
219fc5d61455 (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
   181
	AMS_TTDP_TO_HANGER,
219fc5d61455 (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
   182
	AMS_TTDP_TO_PAD1,
219fc5d61455 (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
   183
	AMS_TTDP_TO_PAD2,
219fc5d61455 (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
   184
	AMS_TTDP_TO_PAD3,
219fc5d61455 (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
   185
	AMS_TTDP_TO_ENTRY_2_AND_3,
219fc5d61455 (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
   186
	AMS_TTDP_TO_ENTRY_2_AND_3_AND_H,
219fc5d61455 (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
   187
	AMS_TTDP_TO_JUNCTION,
219fc5d61455 (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
   188
	AMS_TTDP_LEAVE_RUNWAY,
219fc5d61455 (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
   189
	AMS_TTDP_TO_INWAY,
219fc5d61455 (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
   190
	AMS_TTDP_TO_RUNWAY,
219fc5d61455 (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
   191
	AMS_TTDP_TO_OUTWAY,
219fc5d61455 (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
   192
	AMS_TTDP_WAITING,
219fc5d61455 (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
   193
	AMS_TTDP_TAKEOFF,
219fc5d61455 (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
   194
	AMS_TTDP_TO_TAKEOFF,
219fc5d61455 (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
   195
	AMS_TTDP_CLIMBING,
219fc5d61455 (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
   196
	AMS_TTDP_FLIGHT_APPROACH,
219fc5d61455 (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
   197
	AMS_TTDP_UNUSED_0x11,
219fc5d61455 (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
   198
	AMS_TTDP_FLIGHT_TO_TOWER,
219fc5d61455 (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
   199
	AMS_TTDP_UNUSED_0x13,
219fc5d61455 (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
   200
	AMS_TTDP_FLIGHT_FINAL,
219fc5d61455 (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
   201
	AMS_TTDP_FLIGHT_DESCENT,
219fc5d61455 (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
   202
	AMS_TTDP_BRAKING,
219fc5d61455 (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
   203
	AMS_TTDP_HELI_TAKEOFF_AIRPOPT,
219fc5d61455 (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
   204
	AMS_TTDP_HELI_TO_TAKEOFF_AIRPOPT,
219fc5d61455 (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
   205
	AMS_TTDP_HELI_LAND_AIRPOPT,
219fc5d61455 (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
   206
	AMS_TTDP_HELI_TAKEOFF_HELIPORT,
219fc5d61455 (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
   207
	AMS_TTDP_HELI_TO_TAKEOFF_HELIPORT,
219fc5d61455 (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
   208
	AMS_TTDP_HELI_LAND_HELIPORT,
219fc5d61455 (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
   209
};
219fc5d61455 (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
   210
219fc5d61455 (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
   211
219fc5d61455 (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
   212
/**
219fc5d61455 (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
   213
 * Map OTTD aircraft movement states to TTDPatch style movement states
219fc5d61455 (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
   214
 * (VarAction 2 Variable 0xE2)
219fc5d61455 (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
   215
 */
219fc5d61455 (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
   216
static byte MapAircraftMovementState(const Vehicle *v)
219fc5d61455 (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
   217
{
219fc5d61455 (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
   218
	const Station *st = GetStation(v->u.air.targetairport);
219fc5d61455 (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
   219
	byte amdflag = GetAirportMovingData(st->airport_type, v->u.air.pos)->flag;
219fc5d61455 (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
   220
219fc5d61455 (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
   221
	switch (v->u.air.state) {
219fc5d61455 (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
   222
		case HANGAR:
219fc5d61455 (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
   223
			/* The international airport is a special case as helicopters can land in
219fc5d61455 (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
   224
			 * front of the hanger. Helicopters also change their air.state to
219fc5d61455 (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
   225
			 * AMED_HELI_LOWER some time before actually descending. */
219fc5d61455 (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
   226
219fc5d61455 (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
   227
			/* This condition only occurs for helicopters, during descent,
219fc5d61455 (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
   228
			 * to a landing by the hanger of an international airport. */
219fc5d61455 (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
   229
			if (amdflag & AMED_HELI_LOWER) return AMS_TTDP_HELI_LAND_AIRPOPT;
219fc5d61455 (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
   230
219fc5d61455 (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
   231
			/* This condition only occurs for helicopters, before starting descent,
219fc5d61455 (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
   232
			 * to a landing by the hanger of an international airport. */
219fc5d61455 (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
   233
			if (amdflag & AMED_SLOWTURN) return AMS_TTDP_FLIGHT_TO_TOWER;
219fc5d61455 (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
   234
219fc5d61455 (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
   235
			// The final two conditions apply to helicopters or aircraft.
219fc5d61455 (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
   236
			/* Has reached hanger? */
219fc5d61455 (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
   237
			if (amdflag & AMED_EXACTPOS) return AMS_TTDP_HANGER;
219fc5d61455 (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
   238
219fc5d61455 (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
   239
			// Still moving towards hanger.
219fc5d61455 (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
   240
			return AMS_TTDP_TO_HANGER;
219fc5d61455 (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
   241
219fc5d61455 (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
   242
		case TERM1:
219fc5d61455 (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
   243
			if (amdflag & AMED_EXACTPOS) return AMS_TTDP_TO_PAD1;
219fc5d61455 (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
   244
			return AMS_TTDP_TO_JUNCTION;
219fc5d61455 (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
219fc5d61455 (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
		case TERM2:
219fc5d61455 (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
   247
			if (amdflag & AMED_EXACTPOS) return AMS_TTDP_TO_PAD2;
219fc5d61455 (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
   248
			return AMS_TTDP_TO_ENTRY_2_AND_3_AND_H;
219fc5d61455 (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
219fc5d61455 (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
		case TERM3:
219fc5d61455 (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
		case TERM4:
219fc5d61455 (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
		case TERM5:
219fc5d61455 (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
		case TERM6:
219fc5d61455 (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
			/* TTDPatch only has 3 terminals, so treat these states the same */
219fc5d61455 (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
			if (amdflag & AMED_EXACTPOS) return AMS_TTDP_TO_PAD3;
219fc5d61455 (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
			return AMS_TTDP_TO_ENTRY_2_AND_3_AND_H;
219fc5d61455 (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
219fc5d61455 (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
		case HELIPAD1:
219fc5d61455 (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
		case HELIPAD2: // Will only occur for helicopters.
219fc5d61455 (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
			if (amdflag & AMED_HELI_LOWER) return AMS_TTDP_HELI_LAND_AIRPOPT; // Descending.
219fc5d61455 (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
			if (amdflag & AMED_SLOWTURN)   return AMS_TTDP_FLIGHT_TO_TOWER;   // Still hasn't started descent.
219fc5d61455 (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
			return AMS_TTDP_TO_JUNCTION; // On the ground.
219fc5d61455 (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
219fc5d61455 (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
		case TAKEOFF: // Moving to takeoff position.
219fc5d61455 (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
			return AMS_TTDP_TO_OUTWAY;
219fc5d61455 (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
219fc5d61455 (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
		case STARTTAKEOFF: // Accelerating down runway.
219fc5d61455 (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
			return AMS_TTDP_TAKEOFF;
219fc5d61455 (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
219fc5d61455 (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
   270
		case ENDTAKEOFF: // Ascent
219fc5d61455 (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
   271
			return AMS_TTDP_CLIMBING;
219fc5d61455 (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
   272
219fc5d61455 (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
		case HELITAKEOFF: // Helicopter is moving to take off position.
219fc5d61455 (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
			switch (st->airport_type) {
219fc5d61455 (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
				case AT_SMALL:
219fc5d61455 (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
				case AT_LARGE:
219fc5d61455 (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
				case AT_METROPOLITAN:
219fc5d61455 (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
				case AT_INTERNATIONAL:
219fc5d61455 (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
					if (amdflag & AMED_HELI_RAISE) return AMS_TTDP_HELI_TAKEOFF_AIRPOPT;
219fc5d61455 (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
					return AMS_TTDP_TO_JUNCTION;
219fc5d61455 (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
219fc5d61455 (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
				case AT_HELIPORT:
219fc5d61455 (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
				case AT_OILRIG:
219fc5d61455 (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
					return AMS_TTDP_HELI_TAKEOFF_HELIPORT;
219fc5d61455 (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
219fc5d61455 (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
				default:
219fc5d61455 (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
					return AMS_TTDP_HELI_TAKEOFF_AIRPOPT;
219fc5d61455 (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
			}
219fc5d61455 (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
219fc5d61455 (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
		case FLYING:
219fc5d61455 (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
			return AMS_TTDP_FLIGHT_TO_TOWER;
219fc5d61455 (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
219fc5d61455 (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
		case LANDING: // Descent
219fc5d61455 (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
			return AMS_TTDP_FLIGHT_DESCENT;
219fc5d61455 (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
219fc5d61455 (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
   296
		case ENDLANDING: // On the runway braking
219fc5d61455 (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
			if (amdflag & AMED_BRAKE) return AMS_TTDP_BRAKING;
219fc5d61455 (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
			// Landed - moving off runway
219fc5d61455 (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
			return AMS_TTDP_TO_INWAY;
219fc5d61455 (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
219fc5d61455 (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
		case HELILANDING:
219fc5d61455 (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
		case HELIENDLANDING: // Helicoptor is decending.
219fc5d61455 (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
			if (amdflag & AMED_HELI_LOWER) {
219fc5d61455 (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
   304
				switch (st->airport_type) {
219fc5d61455 (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
					case AT_HELIPORT:
219fc5d61455 (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
					case AT_OILRIG:
219fc5d61455 (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
   307
						return AMS_TTDP_HELI_LAND_HELIPORT;
219fc5d61455 (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
219fc5d61455 (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
					default:
219fc5d61455 (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
						return AMS_TTDP_HELI_LAND_AIRPOPT;
219fc5d61455 (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
				}
219fc5d61455 (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
			}
219fc5d61455 (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
			return AMS_TTDP_FLIGHT_TO_TOWER;
219fc5d61455 (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
219fc5d61455 (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
		default:
219fc5d61455 (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
			return AMS_TTDP_HANGER;
219fc5d61455 (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
	}
219fc5d61455 (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
}
219fc5d61455 (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
219fc5d61455 (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
219fc5d61455 (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
   321
/* TTDP style aircraft movement action for GRF Action 2 Var 0xE6 */
219fc5d61455 (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
   322
enum {
219fc5d61455 (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
	AMA_TTDP_IN_HANGER,
219fc5d61455 (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
	AMA_TTDP_ON_PAD1,
219fc5d61455 (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
	AMA_TTDP_ON_PAD2,
219fc5d61455 (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
	AMA_TTDP_ON_PAD3,
219fc5d61455 (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
	AMA_TTDP_HANGER_TO_PAD1,
219fc5d61455 (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
   328
	AMA_TTDP_HANGER_TO_PAD2,
219fc5d61455 (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
   329
	AMA_TTDP_HANGER_TO_PAD3,
219fc5d61455 (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
   330
	AMA_TTDP_LANDING_TO_PAD1,
219fc5d61455 (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
   331
	AMA_TTDP_LANDING_TO_PAD2,
219fc5d61455 (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
	AMA_TTDP_LANDING_TO_PAD3,
219fc5d61455 (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
	AMA_TTDP_PAD1_TO_HANGER,
219fc5d61455 (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
	AMA_TTDP_PAD2_TO_HANGER,
219fc5d61455 (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
	AMA_TTDP_PAD3_TO_HANGER,
219fc5d61455 (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
	AMA_TTDP_PAD1_TO_TAKEOFF,
219fc5d61455 (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
	AMA_TTDP_PAD2_TO_TAKEOFF,
219fc5d61455 (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
	AMA_TTDP_PAD3_TO_TAKEOFF,
219fc5d61455 (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
	AMA_TTDP_HANGER_TO_TAKOFF,
219fc5d61455 (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
	AMA_TTDP_LANDING_TO_HANGER,
219fc5d61455 (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
	AMA_TTDP_IN_FLIGHT,
219fc5d61455 (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
};
219fc5d61455 (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
219fc5d61455 (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
219fc5d61455 (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
/**
219fc5d61455 (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
 * Map OTTD aircraft movement states to TTDPatch style movement actions
219fc5d61455 (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
 * (VarAction 2 Variable 0xE6)
219fc5d61455 (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
 * This is not fully supported yet but it's enough for Planeset.
219fc5d61455 (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
 */
219fc5d61455 (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
   350
static byte MapAircraftMovementAction(const Vehicle *v)
219fc5d61455 (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
   351
{
219fc5d61455 (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
   352
	switch (v->u.air.state) {
219fc5d61455 (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
   353
		case HANGAR:
219fc5d61455 (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
   354
			return (v->cur_speed > 0) ? AMA_TTDP_LANDING_TO_HANGER : AMA_TTDP_IN_HANGER;
219fc5d61455 (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
   355
219fc5d61455 (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
   356
		case TERM1:
219fc5d61455 (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
		case HELIPAD1:
219fc5d61455 (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
			return (v->current_order.type == OT_LOADING) ? AMA_TTDP_ON_PAD1 : AMA_TTDP_LANDING_TO_PAD1;
219fc5d61455 (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
219fc5d61455 (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 TERM2:
219fc5d61455 (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
		case HELIPAD2:
219fc5d61455 (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
			return (v->current_order.type == OT_LOADING) ? AMA_TTDP_ON_PAD2 : AMA_TTDP_LANDING_TO_PAD2;
219fc5d61455 (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
219fc5d61455 (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
   364
		case TERM3:
219fc5d61455 (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
		case TERM4:
219fc5d61455 (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
		case TERM5:
219fc5d61455 (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 TERM6:
219fc5d61455 (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 (v->current_order.type == OT_LOADING) ? AMA_TTDP_ON_PAD3 : AMA_TTDP_LANDING_TO_PAD3;
219fc5d61455 (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
219fc5d61455 (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 TAKEOFF:      // Moving to takeoff position
219fc5d61455 (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
		case STARTTAKEOFF: // Accelerating down runway
219fc5d61455 (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
		case ENDTAKEOFF:   // Ascent
219fc5d61455 (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 HELITAKEOFF:
219fc5d61455 (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
			// TODO Need to find which terminal (or hanger) we've come from. How?
219fc5d61455 (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
			return AMA_TTDP_PAD1_TO_TAKEOFF;
219fc5d61455 (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
219fc5d61455 (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
		case FLYING:
219fc5d61455 (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
			return AMA_TTDP_IN_FLIGHT;
219fc5d61455 (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
219fc5d61455 (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
		case LANDING:    // Descent
219fc5d61455 (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
		case ENDLANDING: // On the runway braking
219fc5d61455 (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 HELILANDING:
219fc5d61455 (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 HELIENDLANDING:
219fc5d61455 (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
			// TODO Need to check terminal we're landing to. Is it known yet?
219fc5d61455 (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
			return (v->current_order.type == OT_GOTO_DEPOT) ?
219fc5d61455 (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
				AMA_TTDP_LANDING_TO_HANGER : AMA_TTDP_LANDING_TO_PAD1;
219fc5d61455 (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
   387
219fc5d61455 (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
   388
		default:
219fc5d61455 (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
   389
			return AMA_TTDP_IN_HANGER;
219fc5d61455 (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
	}
219fc5d61455 (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
}
219fc5d61455 (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
219fc5d61455 (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
3703
3c815d04affb (svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents: 3702
diff changeset
   394
/* TTDP airport types. Used to map our types to TTDPatch's */
3c815d04affb (svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents: 3702
diff changeset
   395
enum {
3c815d04affb (svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents: 3702
diff changeset
   396
	ATP_TTDP_SMALL,
3c815d04affb (svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents: 3702
diff changeset
   397
	ATP_TTDP_LARGE,
3c815d04affb (svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents: 3702
diff changeset
   398
	ATP_TTDP_HELIPORT,
3c815d04affb (svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents: 3702
diff changeset
   399
	ATP_TTDP_OILRIG,
3c815d04affb (svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents: 3702
diff changeset
   400
};
3c815d04affb (svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents: 3702
diff changeset
   401
3c815d04affb (svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents: 3702
diff changeset
   402
3686
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   403
/* Vehicle Resolver Functions */
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   404
static inline const Vehicle *GRV(const ResolverObject *object)
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   405
{
3720
8a82d64ea485 (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
   406
	return object->scope == VSG_SCOPE_SELF ? object->u.vehicle.self : object->u.vehicle.parent;
3686
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   407
}
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   408
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   409
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   410
static uint32 VehicleGetRandomBits(const ResolverObject *object)
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   411
{
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   412
	return GRV(object) == NULL ? 0 : GRV(object)->random_bits;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   413
}
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   414
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   415
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   416
static uint32 VehicleGetTriggers(const ResolverObject *object)
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   417
{
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   418
	return GRV(object) == NULL ? 0 : GRV(object)->waiting_triggers;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   419
}
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   420
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   421
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   422
static void VehicleSetTriggers(const ResolverObject *object, int triggers)
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   423
{
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   424
	/* Evil cast to get around const-ness. This used to be achieved by an
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   425
	 * innocent looking function pointer cast... Currently I cannot see a
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   426
	 * way of avoiding this without removing consts deep within gui code.
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   427
	 */
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   428
	Vehicle *v = (Vehicle*)GRV(object);
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   429
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   430
	/* This function must only be called when processing triggers -- any
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   431
	 * other time is an error. */
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   432
	assert(object->trigger != 0);
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   433
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   434
	if (v != NULL) v->waiting_triggers = triggers;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   435
}
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   436
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   437
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   438
static uint32 VehicleGetVariable(const ResolverObject *object, byte variable, byte parameter)
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   439
{
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   440
	const Vehicle *v = GRV(object);
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   441
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   442
	if (v == NULL) {
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   443
		/* Vehicle does not exist, so we're in a purchase list */
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   444
		switch (variable) {
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   445
			case 0x43: return _current_player; /* Owner information */
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   446
			case 0x46: return 0;               /* Motion counter */
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   447
			case 0xC4: return _cur_year;       /* Build year */
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   448
			case 0xDA: return INVALID_VEHICLE; /* Next vehicle */
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   449
			default:   return -1;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   450
		}
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   451
	}
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   452
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   453
	/* Calculated vehicle parameters */
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   454
	switch (variable) {
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   455
		case 0x40: /* Get length of consist */
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   456
		case 0x41: /* Get length of same consecutive wagons */
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   457
			if (v->type != VEH_Train) return 1;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   458
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   459
			{
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   460
				const Vehicle* u;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   461
				byte chain_before = 0;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   462
				byte chain_after  = 0;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   463
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   464
				for (u = GetFirstVehicleInChain(v); u != v; u = u->next) {
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   465
					chain_before++;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   466
					if (variable == 0x41 && u->engine_type != v->engine_type) chain_before = 0;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   467
				}
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   468
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   469
				while (u->next != NULL && (variable == 0x40 || u->next->engine_type == v->engine_type)) {
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   470
					chain_after++;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   471
					u = u->next;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   472
				}
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   473
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   474
				return chain_before | chain_after << 8 | (chain_before + chain_after) << 16;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   475
			}
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   476
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   477
		case 0x43: /* Player information */
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   478
			return v->owner;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   479
3703
3c815d04affb (svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents: 3702
diff changeset
   480
		case 0x44: /* Aircraft information */
3c815d04affb (svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents: 3702
diff changeset
   481
			if (v->type != VEH_Aircraft) return -1;
3c815d04affb (svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents: 3702
diff changeset
   482
3c815d04affb (svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents: 3702
diff changeset
   483
			{
3c815d04affb (svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents: 3702
diff changeset
   484
				const Vehicle *w = v->next;
3c815d04affb (svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents: 3702
diff changeset
   485
				uint16 altitude = v->z_pos - w->z_pos; /* Aircraft height - shadow height */
3c815d04affb (svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents: 3702
diff changeset
   486
				byte airporttype;
3c815d04affb (svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents: 3702
diff changeset
   487
3c815d04affb (svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents: 3702
diff changeset
   488
				switch (GetStation(v->u.air.targetairport)->airport_type) {
3c815d04affb (svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents: 3702
diff changeset
   489
					case AT_SMALL: airporttype = ATP_TTDP_SMALL; break;
3c815d04affb (svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents: 3702
diff changeset
   490
					case AT_METROPOLITAN:
3c815d04affb (svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents: 3702
diff changeset
   491
					case AT_INTERNATIONAL:
3c815d04affb (svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents: 3702
diff changeset
   492
					case AT_LARGE: airporttype = ATP_TTDP_LARGE; break;
3c815d04affb (svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents: 3702
diff changeset
   493
					case AT_HELIPORT: airporttype = ATP_TTDP_HELIPORT; break;
3c815d04affb (svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents: 3702
diff changeset
   494
					case AT_OILRIG: airporttype = ATP_TTDP_OILRIG; break;
3c815d04affb (svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents: 3702
diff changeset
   495
					default: airporttype = ATP_TTDP_LARGE; break;
3c815d04affb (svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents: 3702
diff changeset
   496
				}
3c815d04affb (svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents: 3702
diff changeset
   497
3c815d04affb (svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents: 3702
diff changeset
   498
				return (altitude << 8) | airporttype;
3c815d04affb (svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents: 3702
diff changeset
   499
			}
3c815d04affb (svn r4644) - NewGRF: support for variable 0x44, aircraft information. (mart3p)
peter1138
parents: 3702
diff changeset
   500
3686
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   501
		case 0x46: /* Motion counter */
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   502
			return 0;
3723
efb172c37d8c (svn r4696) - NewGRF: add support for vehicle variable 0x60, count vehicle type occurance.
peter1138
parents: 3720
diff changeset
   503
efb172c37d8c (svn r4696) - NewGRF: add support for vehicle variable 0x60, count vehicle type occurance.
peter1138
parents: 3720
diff changeset
   504
		/* Variables which use the parameter */
efb172c37d8c (svn r4696) - NewGRF: add support for vehicle variable 0x60, count vehicle type occurance.
peter1138
parents: 3720
diff changeset
   505
		case 0x60: /* Count consist's engine ID occurance */
efb172c37d8c (svn r4696) - NewGRF: add support for vehicle variable 0x60, count vehicle type occurance.
peter1138
parents: 3720
diff changeset
   506
			if (v->type != VEH_Train) return v->engine_type == parameter;
efb172c37d8c (svn r4696) - NewGRF: add support for vehicle variable 0x60, count vehicle type occurance.
peter1138
parents: 3720
diff changeset
   507
efb172c37d8c (svn r4696) - NewGRF: add support for vehicle variable 0x60, count vehicle type occurance.
peter1138
parents: 3720
diff changeset
   508
			{
efb172c37d8c (svn r4696) - NewGRF: add support for vehicle variable 0x60, count vehicle type occurance.
peter1138
parents: 3720
diff changeset
   509
				uint count = 0;
efb172c37d8c (svn r4696) - NewGRF: add support for vehicle variable 0x60, count vehicle type occurance.
peter1138
parents: 3720
diff changeset
   510
				for (; v != NULL; v = v->next) {
efb172c37d8c (svn r4696) - NewGRF: add support for vehicle variable 0x60, count vehicle type occurance.
peter1138
parents: 3720
diff changeset
   511
					if (v->engine_type == parameter) count++;
efb172c37d8c (svn r4696) - NewGRF: add support for vehicle variable 0x60, count vehicle type occurance.
peter1138
parents: 3720
diff changeset
   512
				}
efb172c37d8c (svn r4696) - NewGRF: add support for vehicle variable 0x60, count vehicle type occurance.
peter1138
parents: 3720
diff changeset
   513
				return count;
efb172c37d8c (svn r4696) - NewGRF: add support for vehicle variable 0x60, count vehicle type occurance.
peter1138
parents: 3720
diff changeset
   514
			}
3686
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   515
	}
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver 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
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver 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
	/* General vehicle properties */
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   518
	switch (variable - 0x80) {
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   519
		case 0x00: return v->type;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   520
		case 0x01: return MapOldSubType(v);
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   521
		case 0x04: return v->index;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   522
		case 0x05: return v->index & 0xFF;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   523
		case 0x0A: return PackOrder(&v->current_order);
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   524
		case 0x0B: return PackOrder(&v->current_order) & 0xFF;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   525
		case 0x0C: return v->num_orders;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   526
		case 0x0D: return v->cur_order_index;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   527
		case 0x10: return v->load_unload_time_rem;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   528
		case 0x11: return v->load_unload_time_rem & 0xFF;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   529
		case 0x12: return v->date_of_last_service;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   530
		case 0x13: return v->date_of_last_service & 0xFF;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   531
		case 0x14: return v->service_interval;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   532
		case 0x15: return v->service_interval & 0xFF;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   533
		case 0x16: return v->last_station_visited;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   534
		case 0x17: return v->tick_counter;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   535
		case 0x18: return v->max_speed;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   536
		case 0x19: return v->max_speed & 0xFF;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   537
		case 0x1A: return v->x_pos;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   538
		case 0x1B: return v->x_pos & 0xFF;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   539
		case 0x1C: return v->y_pos;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   540
		case 0x1D: return v->y_pos & 0xFF;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   541
		case 0x1E: return v->z_pos;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   542
		case 0x1F: return v->direction;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   543
		case 0x28: return v->cur_image;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   544
		case 0x29: return v->cur_image & 0xFF;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   545
		case 0x32: return v->vehstatus;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   546
		case 0x33: return v->vehstatus;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   547
		case 0x34: return v->cur_speed;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   548
		case 0x35: return v->cur_speed & 0xFF;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   549
		case 0x36: return v->subspeed;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   550
		case 0x37: return v->acceleration;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   551
		case 0x39: return v->cargo_type;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   552
		case 0x3A: return v->cargo_cap;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   553
		case 0x3B: return v->cargo_cap & 0xFF;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   554
		case 0x3C: return v->cargo_count;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   555
		case 0x3D: return v->cargo_count & 0xFF;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   556
		case 0x3E: return v->cargo_source;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   557
		case 0x3F: return v->cargo_days;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   558
		case 0x40: return v->age;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   559
		case 0x41: return v->age & 0xFF;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   560
		case 0x42: return v->max_age;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   561
		case 0x43: return v->max_age & 0xFF;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   562
		case 0x44: return v->build_year;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   563
		case 0x45: return v->unitnumber;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   564
		case 0x46: return v->engine_type;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   565
		case 0x47: return v->engine_type & 0xFF;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   566
		case 0x48: return v->spritenum;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   567
		case 0x49: return v->day_counter;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   568
		case 0x4A: return v->breakdowns_since_last_service;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   569
		case 0x4B: return v->breakdown_ctr;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   570
		case 0x4C: return v->breakdown_delay;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   571
		case 0x4D: return v->breakdown_chance;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   572
		case 0x4E: return v->reliability;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   573
		case 0x4F: return v->reliability & 0xFF;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   574
		case 0x50: return v->reliability_spd_dec;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   575
		case 0x51: return v->reliability_spd_dec & 0xFF;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   576
		case 0x52: return v->profit_this_year;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   577
		case 0x53: return v->profit_this_year & 0xFFFFFF;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   578
		case 0x54: return v->profit_this_year & 0xFFFF;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   579
		case 0x55: return v->profit_this_year & 0xFF;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   580
		case 0x56: return v->profit_last_year;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   581
		case 0x57: return v->profit_last_year & 0xFF;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   582
		case 0x58: return v->profit_last_year;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   583
		case 0x59: return v->profit_last_year & 0xFF;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   584
		case 0x5A: return v->next == NULL ? INVALID_VEHICLE : v->next->index;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   585
		case 0x5C: return v->value;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   586
		case 0x5D: return v->value & 0xFFFFFF;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   587
		case 0x5E: return v->value & 0xFFFF;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   588
		case 0x5F: return v->value & 0xFF;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   589
		case 0x60: return v->string_id;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   590
		case 0x61: return v->string_id & 0xFF;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   591
		case 0x72: return 0; // XXX Refit cycle
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   592
		case 0x7A: return v->random_bits;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   593
		case 0x7B: return v->waiting_triggers;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   594
	}
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   595
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   596
	/* Vehicle specific properties */
3014
1a60d4541d3c (svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents: 2982
diff changeset
   597
	switch (v->type) {
1a60d4541d3c (svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents: 2982
diff changeset
   598
		case VEH_Train:
3686
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   599
			switch (variable - 0x80) {
3014
1a60d4541d3c (svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents: 2982
diff changeset
   600
				case 0x62: return v->u.rail.track;
1a60d4541d3c (svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents: 2982
diff changeset
   601
				case 0x66: return v->u.rail.railtype;
1a60d4541d3c (svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents: 2982
diff changeset
   602
				case 0x73: return v->u.rail.cached_veh_length;
1a60d4541d3c (svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents: 2982
diff changeset
   603
				case 0x74: return v->u.rail.cached_power;
1a60d4541d3c (svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents: 2982
diff changeset
   604
				case 0x75: return v->u.rail.cached_power & 0xFFFFFF;
1a60d4541d3c (svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents: 2982
diff changeset
   605
				case 0x76: return v->u.rail.cached_power & 0xFFFF;
1a60d4541d3c (svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents: 2982
diff changeset
   606
				case 0x77: return v->u.rail.cached_power & 0xFF;
1a60d4541d3c (svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents: 2982
diff changeset
   607
				case 0x7C: return v->first->index;
1a60d4541d3c (svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents: 2982
diff changeset
   608
				case 0x7D: return v->first->index & 0xFF;
1a60d4541d3c (svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents: 2982
diff changeset
   609
			}
1a60d4541d3c (svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents: 2982
diff changeset
   610
			break;
1a60d4541d3c (svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents: 2982
diff changeset
   611
1a60d4541d3c (svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents: 2982
diff changeset
   612
		case VEH_Road:
3686
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   613
			switch (variable - 0x80) {
3014
1a60d4541d3c (svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents: 2982
diff changeset
   614
				case 0x62: return v->u.road.state;
1a60d4541d3c (svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents: 2982
diff changeset
   615
				case 0x64: return v->u.road.blocked_ctr;
1a60d4541d3c (svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents: 2982
diff changeset
   616
				case 0x65: return v->u.road.blocked_ctr & 0xFF;
1a60d4541d3c (svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents: 2982
diff changeset
   617
				case 0x66: return v->u.road.overtaking;
1a60d4541d3c (svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents: 2982
diff changeset
   618
				case 0x67: return v->u.road.overtaking_ctr;
1a60d4541d3c (svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents: 2982
diff changeset
   619
				case 0x68: return v->u.road.crashed_ctr;
1a60d4541d3c (svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents: 2982
diff changeset
   620
				case 0x69: return v->u.road.crashed_ctr & 0xFF;
1a60d4541d3c (svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents: 2982
diff changeset
   621
			}
1a60d4541d3c (svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents: 2982
diff changeset
   622
			break;
1a60d4541d3c (svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents: 2982
diff changeset
   623
1a60d4541d3c (svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents: 2982
diff changeset
   624
		case VEH_Aircraft:
3686
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   625
			switch (variable - 0x80) {
3702
219fc5d61455 (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
   626
				case 0x62: return MapAircraftMovementState(v);  // Current movement state
219fc5d61455 (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
   627
				case 0x63: return v->u.air.targetairport;       // Airport to which the action refers
219fc5d61455 (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
   628
				case 0x66: return MapAircraftMovementAction(v); // Current movement action
3014
1a60d4541d3c (svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents: 2982
diff changeset
   629
			}
1a60d4541d3c (svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents: 2982
diff changeset
   630
			break;
1a60d4541d3c (svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents: 2982
diff changeset
   631
	}
1a60d4541d3c (svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents: 2982
diff changeset
   632
3686
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   633
	DEBUG(grf, 1)("Unhandled vehicle property 0x%X, type 0x%X", variable, v->type);
3014
1a60d4541d3c (svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents: 2982
diff changeset
   634
1a60d4541d3c (svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents: 2982
diff changeset
   635
	return -1;
1a60d4541d3c (svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents: 2982
diff changeset
   636
}
1a60d4541d3c (svn r3594) - NewGRF: Add support for some vehicle specific properties and a give a debug message for unknown variables.
peter1138
parents: 2982
diff changeset
   637
426
381172276dc6 (svn r625) Almost complete support for deterministic variational vehicle spritegroups. (pasky)
tron
parents: 414
diff changeset
   638
3734
5b331306e6fe (svn r4714) - NewGRF: simplify evaluation of 'real' sprite groups.
peter1138
parents: 3731
diff changeset
   639
static const SpriteGroup *VehicleResolveReal(const ResolverObject *object, const SpriteGroup *group)
3686
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   640
{
3720
8a82d64ea485 (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
   641
	const Vehicle *v = object->u.vehicle.self;
3686
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   642
	uint totalsets;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   643
	uint set;
3734
5b331306e6fe (svn r4714) - NewGRF: simplify evaluation of 'real' sprite groups.
peter1138
parents: 3731
diff changeset
   644
	bool in_motion;
426
381172276dc6 (svn r625) Almost complete support for deterministic variational vehicle spritegroups. (pasky)
tron
parents: 414
diff changeset
   645
3739
c96a784d5c53 (svn r4721) - NewGRF: use loading sprites rather than loaded when there is no vehicle (fixes issue with purchase list)
peter1138
parents: 3734
diff changeset
   646
	if (v == NULL) return group->g.real.loading[0];
3734
5b331306e6fe (svn r4714) - NewGRF: simplify evaluation of 'real' sprite groups.
peter1138
parents: 3731
diff changeset
   647
5b331306e6fe (svn r4714) - NewGRF: simplify evaluation of 'real' sprite groups.
peter1138
parents: 3731
diff changeset
   648
	if (v->type == VEH_Train) {
5b331306e6fe (svn r4714) - NewGRF: simplify evaluation of 'real' sprite groups.
peter1138
parents: 3731
diff changeset
   649
		in_motion = GetFirstVehicleInChain(v)->current_order.type != OT_LOADING;
5b331306e6fe (svn r4714) - NewGRF: simplify evaluation of 'real' sprite groups.
peter1138
parents: 3731
diff changeset
   650
	} else {
5b331306e6fe (svn r4714) - NewGRF: simplify evaluation of 'real' sprite groups.
peter1138
parents: 3731
diff changeset
   651
		in_motion = v->current_order.type != OT_LOADING;
3686
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   652
	}
445
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   653
3734
5b331306e6fe (svn r4714) - NewGRF: simplify evaluation of 'real' sprite groups.
peter1138
parents: 3731
diff changeset
   654
	totalsets = in_motion ? group->g.real.num_loaded : group->g.real.num_loading;
445
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   655
3686
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   656
	if (v->cargo_count == v->cargo_cap || totalsets == 1) {
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   657
		set = totalsets - 1;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   658
	} else if (v->cargo_count == 0 || totalsets == 2) {
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   659
		set = 0;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   660
	} else {
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   661
		set = v->cargo_count * (totalsets - 2) / max(1, v->cargo_cap) + 1;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   662
	}
426
381172276dc6 (svn r625) Almost complete support for deterministic variational vehicle spritegroups. (pasky)
tron
parents: 414
diff changeset
   663
3734
5b331306e6fe (svn r4714) - NewGRF: simplify evaluation of 'real' sprite groups.
peter1138
parents: 3731
diff changeset
   664
	return in_motion ? group->g.real.loaded[set] : group->g.real.loading[set];
426
381172276dc6 (svn r625) Almost complete support for deterministic variational vehicle spritegroups. (pasky)
tron
parents: 414
diff changeset
   665
}
381172276dc6 (svn r625) Almost complete support for deterministic variational vehicle spritegroups. (pasky)
tron
parents: 414
diff changeset
   666
3686
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   667
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   668
static inline void NewVehicleResolver(ResolverObject *res, const Vehicle *v)
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   669
{
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   670
	res->GetRandomBits = &VehicleGetRandomBits;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   671
	res->GetTriggers   = &VehicleGetTriggers;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   672
	res->SetTriggers   = &VehicleSetTriggers;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   673
	res->GetVariable   = &VehicleGetVariable;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   674
	res->ResolveReal   = &VehicleResolveReal;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   675
3720
8a82d64ea485 (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
   676
	res->u.vehicle.self   = v;
8a82d64ea485 (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
   677
	res->u.vehicle.parent = (v != NULL && v->type == VEH_Train) ? GetFirstVehicleInChain(v) : v;
3686
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   678
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   679
	res->callback        = 0;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   680
	res->callback_param1 = 0;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   681
	res->callback_param2 = 0;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   682
	res->last_value      = 0;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   683
	res->trigger         = 0;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   684
	res->reseed          = 0;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   685
}
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver 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
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver 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
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver 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
SpriteID GetCustomEngineSprite(EngineID engine, const Vehicle *v, Direction direction)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   689
{
2242
512eae2cf006 (svn r2762) Simplify a loop, remove an unused variable and add many consts
tron
parents: 2204
diff changeset
   690
	const SpriteGroup *group;
3686
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   691
	ResolverObject object;
3344
fc86351d4641 (svn r4128) - CodeChange: Add proper semantics for CargoID for such variables instead of using the general byte-type.
Darkvater
parents: 3300
diff changeset
   692
	CargoID cargo = GC_PURCHASE;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   693
3686
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   694
	NewVehicleResolver(&object, v);
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   695
414
4629d4bf7f14 (svn r611) -newgrf: Change GetCustomEngineSprite() calling convention (invisible to users of GetCustomVehicle*() wrappers). Needed for deterministic spritegroups support (pasky).
darkvater
parents: 410
diff changeset
   696
	if (v != NULL) {
4629d4bf7f14 (svn r611) -newgrf: Change GetCustomEngineSprite() calling convention (invisible to users of GetCustomVehicle*() wrappers). Needed for deterministic spritegroups support (pasky).
darkvater
parents: 410
diff changeset
   697
		cargo = _global_cargo_id[_opt.landscape][v->cargo_type];
1802
da61740cc1e7 (svn r2306) - CodeChange: Check the last commands; refits. This needed an extensive rewrite and global/local-cargo ID juggling and bitmasking. However with this done it looks better as well and is compatible with newgrf handling. Big thanks to HackyKid for doing most of the work. This also closes patch "[ 1199277 ] Command checks"
Darkvater
parents: 1786
diff changeset
   698
		assert(cargo != GC_INVALID);
414
4629d4bf7f14 (svn r611) -newgrf: Change GetCustomEngineSprite() calling convention (invisible to users of GetCustomVehicle*() wrappers). Needed for deterministic spritegroups support (pasky).
darkvater
parents: 410
diff changeset
   699
	}
4629d4bf7f14 (svn r611) -newgrf: Change GetCustomEngineSprite() calling convention (invisible to users of GetCustomVehicle*() wrappers). Needed for deterministic spritegroups support (pasky).
darkvater
parents: 410
diff changeset
   700
2488
1e98c71e5f6a (svn r3014) -NewGRF, Codechange: Make all sprite group references be pointers instead of copying the data around.
peter1138
parents: 2477
diff changeset
   701
	group = engine_custom_sprites[engine][cargo];
414
4629d4bf7f14 (svn r611) -newgrf: Change GetCustomEngineSprite() calling convention (invisible to users of GetCustomVehicle*() wrappers). Needed for deterministic spritegroups support (pasky).
darkvater
parents: 410
diff changeset
   702
1560
d040e4763f45 (svn r2064) - Codechange: GetVehicleSpriteGroup() cleanup - drop overriding_engine, which was around probably only for historical reasons. (Paralellily developed by HackyKid.)
pasky
parents: 1559
diff changeset
   703
	if (v != NULL && v->type == VEH_Train) {
2242
512eae2cf006 (svn r2762) Simplify a loop, remove an unused variable and add many consts
tron
parents: 2204
diff changeset
   704
		const SpriteGroup *overset = GetWagonOverrideSpriteSet(engine, v->u.rail.first_engine);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   705
1477
9389baf2bf3c (svn r1981) Typedef some structs and enums
tron
parents: 1475
diff changeset
   706
		if (overset != NULL) group = overset;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   707
	}
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 114
diff changeset
   708
3686
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   709
	group = Resolve(group, &object);
445
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   710
3686
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   711
	if ((group == NULL || group->type != SGT_RESULT) && cargo != GC_DEFAULT) {
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   712
		// This group is empty but perhaps there'll be a default one.
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   713
		group = Resolve(engine_custom_sprites[engine][GC_DEFAULT], &object);
445
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   714
	}
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   715
3686
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   716
	if (group == NULL || group->type != SGT_RESULT) return 0;
3668
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3648
diff changeset
   717
42325f12e7d8 (svn r4583) - NewGRF: Revamp sprite group loading to support advanced varadjusts and variable size. These are not yet processed, however.
peter1138
parents: 3648
diff changeset
   718
	return group->g.result.sprite + (direction % group->g.result.num_sprites);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   719
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   720
3686
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   721
3695
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   722
SpriteID GetRotorOverrideSprite(EngineID engine, const Vehicle *v)
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   723
{
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   724
	const SpriteGroup *group;
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   725
	ResolverObject object;
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   726
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   727
	assert(engine >= AIRCRAFT_ENGINES_INDEX);
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   728
	assert(engine < AIRCRAFT_ENGINES_INDEX + NUM_AIRCRAFT_ENGINES);
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   729
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   730
	/* Only valid for helicopters */
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   731
	assert((AircraftVehInfo(engine)->subtype & 1) == 0);
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   732
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   733
	NewVehicleResolver(&object, v);
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   734
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   735
	group = heli_rotor_custom_sprites[engine - AIRCRAFT_ENGINES_INDEX];
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   736
	group = Resolve(group, &object);
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   737
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   738
	if (group == NULL || group->type != SGT_RESULT) return 0;
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   739
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   740
	if (v == NULL) return group->g.result.sprite;
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   741
3706
6ec8b4f5a641 (svn r4649) - NewGRF: limit helicopter rotor animation frames to the number of sprites in the set.
peter1138
parents: 3703
diff changeset
   742
	return group->g.result.sprite + (v->next->next->u.air.state % group->g.result.num_sprites);
3695
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   743
}
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   744
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
   745
1883
ad68cd0a0a25 (svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents: 1881
diff changeset
   746
/**
1908
2fa391fed79a (svn r2414) - Feature: [newgrf] Implement powered wagons, and the callback that goes with it.
hackykid
parents: 1904
diff changeset
   747
 * Check if a wagon is currently using a wagon override
2fa391fed79a (svn r2414) - Feature: [newgrf] Implement powered wagons, and the callback that goes with it.
hackykid
parents: 1904
diff changeset
   748
 * @param v The wagon to check
2fa391fed79a (svn r2414) - Feature: [newgrf] Implement powered wagons, and the callback that goes with it.
hackykid
parents: 1904
diff changeset
   749
 * @return true if it is using an override, false otherwise
2fa391fed79a (svn r2414) - Feature: [newgrf] Implement powered wagons, and the callback that goes with it.
hackykid
parents: 1904
diff changeset
   750
 */
2548
49c8a096033f (svn r3077) static, const, bracing, indentation, 0 -> '\0'/NULL, typos in comments, excess empty lines, minor other changes
tron
parents: 2530
diff changeset
   751
bool UsesWagonOverride(const Vehicle* v)
49c8a096033f (svn r3077) static, const, bracing, indentation, 0 -> '\0'/NULL, typos in comments, excess empty lines, minor other changes
tron
parents: 2530
diff changeset
   752
{
1908
2fa391fed79a (svn r2414) - Feature: [newgrf] Implement powered wagons, and the callback that goes with it.
hackykid
parents: 1904
diff changeset
   753
	assert(v->type == VEH_Train);
2242
512eae2cf006 (svn r2762) Simplify a loop, remove an unused variable and add many consts
tron
parents: 2204
diff changeset
   754
	return GetWagonOverrideSpriteSet(v->engine_type, v->u.rail.first_engine) != NULL;
1908
2fa391fed79a (svn r2414) - Feature: [newgrf] Implement powered wagons, and the callback that goes with it.
hackykid
parents: 1904
diff changeset
   755
}
2fa391fed79a (svn r2414) - Feature: [newgrf] Implement powered wagons, and the callback that goes with it.
hackykid
parents: 1904
diff changeset
   756
2fa391fed79a (svn r2414) - Feature: [newgrf] Implement powered wagons, and the callback that goes with it.
hackykid
parents: 1904
diff changeset
   757
/**
3390
ae4b0872dc78 (svn r4198) - NewGRF: Rename GetCallBackResult() to GetVehicleCallback(), as other types will exist later, and use separate parameters instead of bitshifting.
peter1138
parents: 3348
diff changeset
   758
 * Evaluate a newgrf callback for vehicles
ae4b0872dc78 (svn r4198) - NewGRF: Rename GetCallBackResult() to GetVehicleCallback(), as other types will exist later, and use separate parameters instead of bitshifting.
peter1138
parents: 3348
diff changeset
   759
 * @param callback The callback to evalute
ae4b0872dc78 (svn r4198) - NewGRF: Rename GetCallBackResult() to GetVehicleCallback(), as other types will exist later, and use separate parameters instead of bitshifting.
peter1138
parents: 3348
diff changeset
   760
 * @param param1   First parameter of the callback
ae4b0872dc78 (svn r4198) - NewGRF: Rename GetCallBackResult() to GetVehicleCallback(), as other types will exist later, and use separate parameters instead of bitshifting.
peter1138
parents: 3348
diff changeset
   761
 * @param param2   Second parameter of the callback
ae4b0872dc78 (svn r4198) - NewGRF: Rename GetCallBackResult() to GetVehicleCallback(), as other types will exist later, and use separate parameters instead of bitshifting.
peter1138
parents: 3348
diff changeset
   762
 * @param engine   Engine type of the vehicle to evaluate the callback for
ae4b0872dc78 (svn r4198) - NewGRF: Rename GetCallBackResult() to GetVehicleCallback(), as other types will exist later, and use separate parameters instead of bitshifting.
peter1138
parents: 3348
diff changeset
   763
 * @param vehicle  The vehicle to evaluate the callback for, or NULL if it doesnt exist yet
1883
ad68cd0a0a25 (svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents: 1881
diff changeset
   764
 * @return The value the callback returned, or CALLBACK_FAILED if it failed
ad68cd0a0a25 (svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents: 1881
diff changeset
   765
 */
3724
1b2d907fbd33 (svn r4697) - NewGRF: callback IDs can now be 16 bit values.
peter1138
parents: 3723
diff changeset
   766
uint16 GetVehicleCallback(uint16 callback, uint32 param1, uint32 param2, EngineID engine, const Vehicle *v)
1883
ad68cd0a0a25 (svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents: 1881
diff changeset
   767
{
2242
512eae2cf006 (svn r2762) Simplify a loop, remove an unused variable and add many consts
tron
parents: 2204
diff changeset
   768
	const SpriteGroup *group;
3686
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   769
	ResolverObject object;
3607
45157f043dec (svn r4500) - NewGRF: When running a callback with no vehicle, use the purchase list 'cargo' type first, and then fallback to the default if needed.
peter1138
parents: 3604
diff changeset
   770
	CargoID cargo;
3686
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   771
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   772
	NewVehicleResolver(&object, v);
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   773
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   774
	object.callback        = callback;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   775
	object.callback_param1 = param1;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   776
	object.callback_param2 = param2;
1883
ad68cd0a0a25 (svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents: 1881
diff changeset
   777
3607
45157f043dec (svn r4500) - NewGRF: When running a callback with no vehicle, use the purchase list 'cargo' type first, and then fallback to the default if needed.
peter1138
parents: 3604
diff changeset
   778
	cargo = (v == NULL) ? GC_PURCHASE : _global_cargo_id[_opt.landscape][v->cargo_type];
1883
ad68cd0a0a25 (svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents: 1881
diff changeset
   779
2488
1e98c71e5f6a (svn r3014) -NewGRF, Codechange: Make all sprite group references be pointers instead of copying the data around.
peter1138
parents: 2477
diff changeset
   780
	group = engine_custom_sprites[engine][cargo];
1904
6459332eded4 (svn r2410) - Fix: [newgrf] When resolving callbacks, dont ignore wagon overrides.
hackykid
parents: 1891
diff changeset
   781
6459332eded4 (svn r2410) - Fix: [newgrf] When resolving callbacks, dont ignore wagon overrides.
hackykid
parents: 1891
diff changeset
   782
	if (v != NULL && v->type == VEH_Train) {
2242
512eae2cf006 (svn r2762) Simplify a loop, remove an unused variable and add many consts
tron
parents: 2204
diff changeset
   783
		const SpriteGroup *overset = GetWagonOverrideSpriteSet(engine, v->u.rail.first_engine);
1904
6459332eded4 (svn r2410) - Fix: [newgrf] When resolving callbacks, dont ignore wagon overrides.
hackykid
parents: 1891
diff changeset
   784
6459332eded4 (svn r2410) - Fix: [newgrf] When resolving callbacks, dont ignore wagon overrides.
hackykid
parents: 1891
diff changeset
   785
		if (overset != NULL) group = overset;
6459332eded4 (svn r2410) - Fix: [newgrf] When resolving callbacks, dont ignore wagon overrides.
hackykid
parents: 1891
diff changeset
   786
	}
6459332eded4 (svn r2410) - Fix: [newgrf] When resolving callbacks, dont ignore wagon overrides.
hackykid
parents: 1891
diff changeset
   787
3686
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   788
	group = Resolve(group, &object);
1883
ad68cd0a0a25 (svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents: 1881
diff changeset
   789
3607
45157f043dec (svn r4500) - NewGRF: When running a callback with no vehicle, use the purchase list 'cargo' type first, and then fallback to the default if needed.
peter1138
parents: 3604
diff changeset
   790
	if ((group == NULL || group->type != SGT_CALLBACK) && cargo != GC_DEFAULT) {
1883
ad68cd0a0a25 (svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents: 1881
diff changeset
   791
		// This group is empty but perhaps there'll be a default one.
3686
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   792
		group = Resolve(engine_custom_sprites[engine][GC_DEFAULT], &object);
1883
ad68cd0a0a25 (svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents: 1881
diff changeset
   793
	}
ad68cd0a0a25 (svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents: 1881
diff changeset
   794
2488
1e98c71e5f6a (svn r3014) -NewGRF, Codechange: Make all sprite group references be pointers instead of copying the data around.
peter1138
parents: 2477
diff changeset
   795
	if (group == NULL || group->type != SGT_CALLBACK)
1883
ad68cd0a0a25 (svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents: 1881
diff changeset
   796
		return CALLBACK_FAILED;
ad68cd0a0a25 (svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents: 1881
diff changeset
   797
ad68cd0a0a25 (svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents: 1881
diff changeset
   798
	return group->g.callback.result;
ad68cd0a0a25 (svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents: 1881
diff changeset
   799
}
ad68cd0a0a25 (svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents: 1881
diff changeset
   800
3726
f44617056b8f (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
   801
/**
f44617056b8f (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
   802
 * Evaluate a newgrf callback for vehicles with a different vehicle for parent scope.
f44617056b8f (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
   803
 * @param callback The callback to evalute
f44617056b8f (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
   804
 * @param param1   First parameter of the callback
f44617056b8f (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
   805
 * @param param2   Second parameter of the callback
f44617056b8f (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
   806
 * @param engine   Engine type of the vehicle to evaluate the callback for
f44617056b8f (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
   807
 * @param v        The vehicle to evaluate the callback for, or NULL if it doesnt exist yet
f44617056b8f (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
   808
 * @param parent   The vehicle to use for parent scope
f44617056b8f (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
   809
 * @return The value the callback returned, or CALLBACK_FAILED if it failed
f44617056b8f (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
   810
 */
f44617056b8f (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
   811
uint16 GetVehicleCallbackParent(uint16 callback, uint32 param1, uint32 param2, EngineID engine, const Vehicle *v, const Vehicle *parent)
f44617056b8f (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
   812
{
f44617056b8f (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
   813
	const SpriteGroup *group;
f44617056b8f (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
   814
	ResolverObject object;
f44617056b8f (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
   815
	CargoID cargo;
f44617056b8f (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
   816
f44617056b8f (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
   817
	NewVehicleResolver(&object, v);
f44617056b8f (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
   818
f44617056b8f (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
   819
	object.callback        = callback;
f44617056b8f (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
   820
	object.callback_param1 = param1;
f44617056b8f (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
   821
	object.callback_param2 = param2;
f44617056b8f (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
   822
f44617056b8f (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
   823
	object.u.vehicle.parent = parent;
f44617056b8f (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
   824
f44617056b8f (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
   825
	cargo = (v == NULL) ? GC_PURCHASE : _global_cargo_id[_opt.landscape][v->cargo_type];
f44617056b8f (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
   826
f44617056b8f (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
   827
	group = engine_custom_sprites[engine][cargo];
f44617056b8f (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
   828
f44617056b8f (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
   829
	if (v != NULL && v->type == VEH_Train) {
f44617056b8f (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
   830
		const SpriteGroup *overset = GetWagonOverrideSpriteSet(engine, v->u.rail.first_engine);
f44617056b8f (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
   831
f44617056b8f (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
   832
		if (overset != NULL) group = overset;
f44617056b8f (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
   833
	}
f44617056b8f (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
   834
f44617056b8f (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
   835
	group = Resolve(group, &object);
f44617056b8f (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
   836
f44617056b8f (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
   837
	if ((group == NULL || group->type != SGT_CALLBACK) && cargo != GC_DEFAULT) {
f44617056b8f (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
   838
		// This group is empty but perhaps there'll be a default one.
f44617056b8f (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
   839
		group = Resolve(engine_custom_sprites[engine][GC_DEFAULT], &object);
f44617056b8f (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
   840
	}
f44617056b8f (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
   841
f44617056b8f (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
   842
	if (group == NULL || group->type != SGT_CALLBACK)
f44617056b8f (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
   843
		return CALLBACK_FAILED;
f44617056b8f (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
   844
f44617056b8f (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
   845
	return group->g.callback.result;
f44617056b8f (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
   846
}
1883
ad68cd0a0a25 (svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents: 1881
diff changeset
   847
3680
e743ad86a24a (svn r4600) - NewGRF: minor code style tidy up
peter1138
parents: 3668
diff changeset
   848
static void DoTriggerVehicle(Vehicle *v, VehicleTrigger trigger, byte base_random_bits, bool first)
445
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   849
{
2242
512eae2cf006 (svn r2762) Simplify a loop, remove an unused variable and add many consts
tron
parents: 2204
diff changeset
   850
	const SpriteGroup *group;
3686
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   851
	ResolverObject object;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   852
	CargoID cargo;
445
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   853
	byte new_random_bits;
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   854
3686
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   855
	/* We can't trigger a non-existent vehicle... */
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   856
	assert(v != NULL);
1883
ad68cd0a0a25 (svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents: 1881
diff changeset
   857
3686
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   858
	NewVehicleResolver(&object, v);
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   859
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver 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
	object.trigger = trigger;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   861
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   862
	cargo = _global_cargo_id[_opt.landscape][v->cargo_type];
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   863
	group = engine_custom_sprites[v->engine_type][cargo];
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   864
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   865
	if (v->type == VEH_Train) {
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   866
		const SpriteGroup *overset = GetWagonOverrideSpriteSet(v->engine_type, v->u.rail.first_engine);
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   867
		if (overset != NULL) group = overset;
445
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   868
	}
1883
ad68cd0a0a25 (svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents: 1881
diff changeset
   869
3686
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   870
	group = Resolve(group, &object);
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   871
	if (group == NULL && v->cargo_type != GC_DEFAULT) {
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   872
		// This group is empty but perhaps there'll be a default one.
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   873
		group = Resolve(engine_custom_sprites[v->engine_type][GC_DEFAULT], &object);
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   874
	}
2488
1e98c71e5f6a (svn r3014) -NewGRF, Codechange: Make all sprite group references be pointers instead of copying the data around.
peter1138
parents: 2477
diff changeset
   875
3686
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   876
	/* Really return? */
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   877
	if (group == NULL) return;
1883
ad68cd0a0a25 (svn r2389) - Feature: [newgrf] Implement the mechanism for handling newgrf callbacks.
hackykid
parents: 1881
diff changeset
   878
542
de27e74b11bd (svn r939) -Fix: Fixed compiler errors
truelight
parents: 507
diff changeset
   879
	new_random_bits = Random();
3686
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   880
	v->random_bits &= ~object.reseed;
16627c28741d (svn r4611) - NewGRF: introduce new vehicle sprite group resolver code. This also fixes some known bugs (e.g. the 'Standard Five' in UKRS is now the correct colour)
peter1138
parents: 3684
diff changeset
   881
	v->random_bits |= (first ? new_random_bits : base_random_bits) & object.reseed;
445
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   882
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   883
	switch (trigger) {
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   884
		case VEHICLE_TRIGGER_NEW_CARGO:
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   885
			/* All vehicles in chain get ANY_NEW_CARGO trigger now.
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   886
			 * So we call it for the first one and they will recurse. */
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   887
			/* Indexing part of vehicle random bits needs to be
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   888
			 * same for all triggered vehicles in the chain (to get
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   889
			 * all the random-cargo wagons carry the same cargo,
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   890
			 * i.e.), so we give them all the NEW_CARGO triggered
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   891
			 * vehicle's portion of random bits. */
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   892
			assert(first);
3680
e743ad86a24a (svn r4600) - NewGRF: minor code style tidy up
peter1138
parents: 3668
diff changeset
   893
			DoTriggerVehicle(GetFirstVehicleInChain(v), VEHICLE_TRIGGER_ANY_NEW_CARGO, new_random_bits, false);
445
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   894
			break;
3680
e743ad86a24a (svn r4600) - NewGRF: minor code style tidy up
peter1138
parents: 3668
diff changeset
   895
445
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   896
		case VEHICLE_TRIGGER_DEPOT:
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   897
			/* We now trigger the next vehicle in chain recursively.
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   898
			 * The random bits portions may be different for each
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   899
			 * vehicle in chain. */
3680
e743ad86a24a (svn r4600) - NewGRF: minor code style tidy up
peter1138
parents: 3668
diff changeset
   900
			if (v->next != NULL) DoTriggerVehicle(v->next, trigger, 0, true);
445
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   901
			break;
3680
e743ad86a24a (svn r4600) - NewGRF: minor code style tidy up
peter1138
parents: 3668
diff changeset
   902
445
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   903
		case VEHICLE_TRIGGER_EMPTY:
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   904
			/* We now trigger the next vehicle in chain
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   905
			 * recursively.  The random bits portions must be same
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   906
			 * for each vehicle in chain, so we give them all
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   907
			 * first chained vehicle's portion of random bits. */
3680
e743ad86a24a (svn r4600) - NewGRF: minor code style tidy up
peter1138
parents: 3668
diff changeset
   908
			if (v->next != NULL) DoTriggerVehicle(v->next, trigger, first ? new_random_bits : base_random_bits, false);
445
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   909
			break;
3680
e743ad86a24a (svn r4600) - NewGRF: minor code style tidy up
peter1138
parents: 3668
diff changeset
   910
445
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   911
		case VEHICLE_TRIGGER_ANY_NEW_CARGO:
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   912
			/* Now pass the trigger recursively to the next vehicle
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   913
			 * in chain. */
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   914
			assert(!first);
3680
e743ad86a24a (svn r4600) - NewGRF: minor code style tidy up
peter1138
parents: 3668
diff changeset
   915
			if (v->next != NULL) DoTriggerVehicle(v->next, VEHICLE_TRIGGER_ANY_NEW_CARGO, base_random_bits, false);
445
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   916
			break;
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   917
	}
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   918
}
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   919
3680
e743ad86a24a (svn r4600) - NewGRF: minor code style tidy up
peter1138
parents: 3668
diff changeset
   920
void TriggerVehicle(Vehicle *v, VehicleTrigger trigger)
445
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   921
{
2589
3640c75148f2 (svn r3126) Autoreplace: Only the first vehicle in a chain should be marked as entering a depot, so call moved out of DoVehicleTrigger loop.
peter1138
parents: 2574
diff changeset
   922
	if (trigger == VEHICLE_TRIGGER_DEPOT) {
3640c75148f2 (svn r3126) Autoreplace: Only the first vehicle in a chain should be marked as entering a depot, so call moved out of DoVehicleTrigger loop.
peter1138
parents: 2574
diff changeset
   923
		// store that the vehicle entered a depot this tick
3680
e743ad86a24a (svn r4600) - NewGRF: minor code style tidy up
peter1138
parents: 3668
diff changeset
   924
		VehicleEnteredDepotThisTick(v);
2589
3640c75148f2 (svn r3126) Autoreplace: Only the first vehicle in a chain should be marked as entering a depot, so call moved out of DoVehicleTrigger loop.
peter1138
parents: 2574
diff changeset
   925
	}
3640c75148f2 (svn r3126) Autoreplace: Only the first vehicle in a chain should be marked as entering a depot, so call moved out of DoVehicleTrigger loop.
peter1138
parents: 2574
diff changeset
   926
3680
e743ad86a24a (svn r4600) - NewGRF: minor code style tidy up
peter1138
parents: 3668
diff changeset
   927
	DoTriggerVehicle(v, trigger, 0, true);
445
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   928
}
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 433
diff changeset
   929
3604
1e7d9f584f93 (svn r4496) - NewGRF: switch custom engine names from storing a char* to using the new StringID based text system. Vehicle name
peter1138
parents: 3595
diff changeset
   930
StringID _engine_custom_names[TOTAL_NUM_ENGINES];
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   931
3604
1e7d9f584f93 (svn r4496) - NewGRF: switch custom engine names from storing a char* to using the new StringID based text system. Vehicle name
peter1138
parents: 3595
diff changeset
   932
void SetCustomEngineName(EngineID engine, StringID name)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   933
{
3614
c697c69b6363 (svn r4510) - NewGRF bounds checking:
peter1138
parents: 3607
diff changeset
   934
	assert(engine < lengthof(_engine_custom_names));
3604
1e7d9f584f93 (svn r4496) - NewGRF: switch custom engine names from storing a char* to using the new StringID based text system. Vehicle name
peter1138
parents: 3595
diff changeset
   935
	_engine_custom_names[engine] = name;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   936
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   937
2769
eab49a86038e (svn r3316) - NewGRF: Unload engine names before loading grf files. This fixes names in climates where the engines don't get loaded. Renamed function to reflect its purpose.
peter1138
parents: 2763
diff changeset
   938
void UnloadCustomEngineNames(void)
1474
a26a21fa10ef (svn r1978) - Fix: Plug some memleaks; thanks Valgrind
Darkvater
parents: 1329
diff changeset
   939
{
3604
1e7d9f584f93 (svn r4496) - NewGRF: switch custom engine names from storing a char* to using the new StringID based text system. Vehicle name
peter1138
parents: 3595
diff changeset
   940
	EngineID i;
1e7d9f584f93 (svn r4496) - NewGRF: switch custom engine names from storing a char* to using the new StringID based text system. Vehicle name
peter1138
parents: 3595
diff changeset
   941
	for (i = 0; i < TOTAL_NUM_ENGINES; i++) {
1e7d9f584f93 (svn r4496) - NewGRF: switch custom engine names from storing a char* to using the new StringID based text system. Vehicle name
peter1138
parents: 3595
diff changeset
   942
		_engine_custom_names[i] = 0;
1474
a26a21fa10ef (svn r1978) - Fix: Plug some memleaks; thanks Valgrind
Darkvater
parents: 1329
diff changeset
   943
	}
a26a21fa10ef (svn r1978) - Fix: Plug some memleaks; thanks Valgrind
Darkvater
parents: 1329
diff changeset
   944
}
a26a21fa10ef (svn r1978) - Fix: Plug some memleaks; thanks Valgrind
Darkvater
parents: 1329
diff changeset
   945
2477
225b2916fe2a (svn r3003) Change int, uint, uin16 and byte to EngineID where appropriate, plus some related changes (mostly casts)
tron
parents: 2469
diff changeset
   946
StringID GetCustomEngineName(EngineID engine)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   947
{
3604
1e7d9f584f93 (svn r4496) - NewGRF: switch custom engine names from storing a char* to using the new StringID based text system. Vehicle name
peter1138
parents: 3595
diff changeset
   948
	return _engine_custom_names[engine] == 0 ? _engine_name_strings[engine] : _engine_custom_names[engine];
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   949
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   950
2971
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   951
// Functions for changing the order of vehicle purchase lists
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   952
// This is currently only implemented for rail vehicles.
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   953
static EngineID engine_list_order[NUM_TRAIN_ENGINES];
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   954
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   955
void ResetEngineListOrder(void)
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   956
{
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   957
	EngineID i;
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   958
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   959
	for (i = 0; i < NUM_TRAIN_ENGINES; i++)
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   960
		engine_list_order[i] = i;
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   961
}
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   962
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   963
EngineID GetRailVehAtPosition(EngineID pos)
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   964
{
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   965
	return engine_list_order[pos];
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   966
}
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   967
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   968
void AlterRailVehListOrder(EngineID engine, EngineID target)
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   969
{
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   970
	EngineID i;
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   971
	bool moving = false;
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   972
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   973
	if (engine == target) return;
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   974
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   975
	// First, remove our ID from the list.
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   976
	for (i = 0; i < NUM_TRAIN_ENGINES - 1; i++) {
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   977
		if (engine_list_order[i] == engine)
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   978
			moving = true;
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   979
		if (moving)
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   980
			engine_list_order[i] = engine_list_order[i + 1];
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   981
	}
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   982
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   983
	// Now, insert it again, before the target engine.
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   984
	for (i = NUM_TRAIN_ENGINES - 1; i > 0; i--) {
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   985
		engine_list_order[i] = engine_list_order[i - 1];
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   986
		if (engine_list_order[i] == target) {
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   987
			engine_list_order[i - 1] = engine;
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   988
			break;
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   989
		}
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   990
	}
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
   991
}