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