src/newgrf_engine.h
author skidd13
Sun, 02 Dec 2007 21:43:16 +0000
changeset 8004 1c54bc6f4bdf
parent 7856 1a2d4c6922db
child 8100 6bc08f98ec16
permissions -rw-r--r--
(svn r11563) -Codechange: Align the preprocessor code in stdafx.h with tabs
2186
db48cf29b983 (svn r2701) Insert Id tags into all source files
tron
parents: 2129
diff changeset
     1
/* $Id$ */
db48cf29b983 (svn r2701) Insert Id tags into all source files
tron
parents: 2129
diff changeset
     2
6348
6dd01da7a02b (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6248
diff changeset
     3
/** @file newgrf_engine.h */
6dd01da7a02b (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6248
diff changeset
     4
2962
f0a49b646c48 (svn r3524) - Split newgrf features from engine.[ch] into newgrf_engine.[ch], and add the new files to project files.
peter1138
parents: 2848
diff changeset
     5
#ifndef NEWGRF_ENGINE_H
f0a49b646c48 (svn r3524) - Split newgrf features from engine.[ch] into newgrf_engine.[ch], and add the new files to project files.
peter1138
parents: 2848
diff changeset
     6
#define NEWGRF_ENGINE_H
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     7
4656
9c1d8c4d3e60 (svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents: 4344
diff changeset
     8
#include "newgrf.h"
3157
3f35e2d9c8e3 (svn r3783) Replace further ints and magic numbers by Direction, DiagDirection and friends
tron
parents: 2982
diff changeset
     9
#include "direction.h"
3866
b13553406a0a (svn r4902) Newgrf : Introduction of the newgrf_cargo files.
belugas
parents: 3845
diff changeset
    10
#include "newgrf_cargo.h"
3157
3f35e2d9c8e3 (svn r3783) Replace further ints and magic numbers by Direction, DiagDirection and friends
tron
parents: 2982
diff changeset
    11
3785
7d4c0a7850b2 (svn r4781) - NewGRF: give _traininfo_vehicle_pitch a proper declaration
peter1138
parents: 3726
diff changeset
    12
extern int _traininfo_vehicle_pitch;
3845
af6eb0103fed (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: 3785
diff changeset
    13
extern int _traininfo_vehicle_width;
3785
7d4c0a7850b2 (svn r4781) - NewGRF: give _traininfo_vehicle_pitch a proper declaration
peter1138
parents: 3726
diff changeset
    14
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    15
4869
3a75d9b3b5ea (svn r6795) - NewGRF: Add support for cargo-specific wagon overrides.
peter1138
parents: 4812
diff changeset
    16
void SetWagonOverrideSprites(EngineID engine, CargoID cargo, const struct SpriteGroup *group, byte *train_id, int trains);
6603
076b05312635 (svn r9818) -Codechange: Cache wagon override sprite set whenever consist is changed, instead of 'recalculating' it every time it is used or just tested.
peter1138
parents: 6517
diff changeset
    17
const SpriteGroup *GetWagonOverrideSpriteSet(EngineID engine, CargoID cargo, byte overriding_engine);
3693
c154dbd20439 (svn r4629) - NewGRF: constify more code that deals with sprite groups, now that ref counting is gone.
peter1138
parents: 3684
diff changeset
    18
void SetCustomEngineSprites(EngineID engine, byte cargo, const struct SpriteGroup *group);
3695
e1d5608f4d32 (svn r4632) - NewGRF: support loading of helicopter rotor sprites (mart3p)
peter1138
parents: 3693
diff changeset
    19
void SetRotorOverrideSprites(EngineID engine, const struct SpriteGroup *group);
3684
4bb59d048c6e (svn r4609) - NewGRF: give GetCustomEngineSprite the correct return type
peter1138
parents: 3648
diff changeset
    20
SpriteID GetCustomEngineSprite(EngineID engine, const Vehicle* v, Direction direction);
4056
7899dc230a12 (svn r5336) - NewGRF: draw custom helicopter rotor sprites in vehicle info window, ensuring the correct direction is used (inspiration from mart3p)
peter1138
parents: 3924
diff changeset
    21
SpriteID GetRotorOverrideSprite(EngineID engine, const Vehicle* v, bool info_view);
7899dc230a12 (svn r5336) - NewGRF: draw custom helicopter rotor sprites in vehicle info window, ensuring the correct direction is used (inspiration from mart3p)
peter1138
parents: 3924
diff changeset
    22
#define GetCustomRotorSprite(v, i) GetRotorOverrideSprite(v->engine_type, v, i)
7899dc230a12 (svn r5336) - NewGRF: draw custom helicopter rotor sprites in vehicle info window, ensuring the correct direction is used (inspiration from mart3p)
peter1138
parents: 3924
diff changeset
    23
#define GetCustomRotorIcon(et) GetRotorOverrideSprite(et, NULL, true)
3648
d234c46bb37a (svn r4559) - NewGRF: keep a record of which grf an engine is defined in. Will be used in the future.
peter1138
parents: 3604
diff changeset
    24
3924
d06b513d65c3 (svn r5059) - NewGRF: store a GRFFile pointer reference for each pointer, instead of just the GRF ID.
peter1138
parents: 3866
diff changeset
    25
/* Forward declaration of GRFFile, to avoid unnecessary inclusion of newgrf.h
d06b513d65c3 (svn r5059) - NewGRF: store a GRFFile pointer reference for each pointer, instead of just the GRF ID.
peter1138
parents: 3866
diff changeset
    26
 * elsewhere... */
d06b513d65c3 (svn r5059) - NewGRF: store a GRFFile pointer reference for each pointer, instead of just the GRF ID.
peter1138
parents: 3866
diff changeset
    27
struct GRFFile;
d06b513d65c3 (svn r5059) - NewGRF: store a GRFFile pointer reference for each pointer, instead of just the GRF ID.
peter1138
parents: 3866
diff changeset
    28
d06b513d65c3 (svn r5059) - NewGRF: store a GRFFile pointer reference for each pointer, instead of just the GRF ID.
peter1138
parents: 3866
diff changeset
    29
void SetEngineGRF(EngineID engine, const struct GRFFile *file);
d06b513d65c3 (svn r5059) - NewGRF: store a GRFFile pointer reference for each pointer, instead of just the GRF ID.
peter1138
parents: 3866
diff changeset
    30
const struct GRFFile *GetEngineGRF(EngineID engine);
3648
d234c46bb37a (svn r4559) - NewGRF: keep a record of which grf an engine is defined in. Will be used in the future.
peter1138
parents: 3604
diff changeset
    31
uint32 GetEngineGRFID(EngineID engine);
d234c46bb37a (svn r4559) - NewGRF: keep a record of which grf an engine is defined in. Will be used in the future.
peter1138
parents: 3604
diff changeset
    32
7327
d810677fb909 (svn r10690) -Codechange: use the enum that describes all callback IDs in favor of "just" using an untyped integer.
rubidium
parents: 6603
diff changeset
    33
uint16 GetVehicleCallback(CallbackID callback, uint32 param1, uint32 param2, EngineID engine, const Vehicle *v);
d810677fb909 (svn r10690) -Codechange: use the enum that describes all callback IDs in favor of "just" using an untyped integer.
rubidium
parents: 6603
diff changeset
    34
uint16 GetVehicleCallbackParent(CallbackID callback, uint32 param1, uint32 param2, EngineID engine, const Vehicle *v, const Vehicle *parent);
1908
2fa391fed79a (svn r2414) - Feature: [newgrf] Implement powered wagons, and the callback that goes with it.
hackykid
parents: 1895
diff changeset
    35
bool UsesWagonOverride(const Vehicle *v);
414
4629d4bf7f14 (svn r611) -newgrf: Change GetCustomEngineSprite() calling convention (invisible to users of GetCustomVehicle*() wrappers). Needed for deterministic spritegroups support (pasky).
darkvater
parents: 405
diff changeset
    36
#define GetCustomVehicleSprite(v, direction) GetCustomEngineSprite(v->engine_type, v, direction)
4629d4bf7f14 (svn r611) -newgrf: Change GetCustomEngineSprite() calling convention (invisible to users of GetCustomVehicle*() wrappers). Needed for deterministic spritegroups support (pasky).
darkvater
parents: 405
diff changeset
    37
#define GetCustomVehicleIcon(et, direction) GetCustomEngineSprite(et, NULL, direction)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    38
6490
fe4443fba5e3 (svn r9671) -Codechange: Implement NewGRF callback 36, which allows changing of various properties which were previously static. Vehicle max speed and train power/te/running costs are adjustable.
peter1138
parents: 6348
diff changeset
    39
/* Handler to Evaluate callback 36. If the callback fails (i.e. most of the
fe4443fba5e3 (svn r9671) -Codechange: Implement NewGRF callback 36, which allows changing of various properties which were previously static. Vehicle max speed and train power/te/running costs are adjustable.
peter1138
parents: 6348
diff changeset
    40
 * time) orig_value is returned */
fe4443fba5e3 (svn r9671) -Codechange: Implement NewGRF callback 36, which allows changing of various properties which were previously static. Vehicle max speed and train power/te/running costs are adjustable.
peter1138
parents: 6348
diff changeset
    41
uint GetVehicleProperty(const Vehicle *v, uint8 property, uint orig_value);
6517
295b16f8fa7d (svn r9703) -Codechange: support callback 36 in vehicle purchase lists
peter1138
parents: 6490
diff changeset
    42
uint GetEngineProperty(EngineID engine, uint8 property, uint orig_value);
6490
fe4443fba5e3 (svn r9671) -Codechange: Implement NewGRF callback 36, which allows changing of various properties which were previously static. Vehicle max speed and train power/te/running costs are adjustable.
peter1138
parents: 6348
diff changeset
    43
6248
e4a2ed7e5613 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6247
diff changeset
    44
enum VehicleTrigger {
7856
1a2d4c6922db (svn r11406) -Fix: wrong triggers would be activated on callback 32 for vehicles.
rubidium
parents: 7803
diff changeset
    45
	VEHICLE_TRIGGER_NEW_CARGO     = 0x01,
6348
6dd01da7a02b (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6248
diff changeset
    46
	/* Externally triggered only for the first vehicle in chain */
7856
1a2d4c6922db (svn r11406) -Fix: wrong triggers would be activated on callback 32 for vehicles.
rubidium
parents: 7803
diff changeset
    47
	VEHICLE_TRIGGER_DEPOT         = 0x02,
6348
6dd01da7a02b (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6248
diff changeset
    48
	/* Externally triggered only for the first vehicle in chain, only if whole chain is empty */
7856
1a2d4c6922db (svn r11406) -Fix: wrong triggers would be activated on callback 32 for vehicles.
rubidium
parents: 7803
diff changeset
    49
	VEHICLE_TRIGGER_EMPTY         = 0x04,
6348
6dd01da7a02b (svn r9385) -Cleanup: doxygen changes. Today, we are exploring the letter N.
belugas
parents: 6248
diff changeset
    50
	/* Not triggered externally (called for the whole chain if we got NEW_CARGO) */
7856
1a2d4c6922db (svn r11406) -Fix: wrong triggers would be activated on callback 32 for vehicles.
rubidium
parents: 7803
diff changeset
    51
	VEHICLE_TRIGGER_ANY_NEW_CARGO = 0x08,
7803
55307751965b (svn r11353) -Codechange: add support for newgrf callback 32
glx
parents: 7327
diff changeset
    52
	/* Externally triggered for each vehicle in chain */
7856
1a2d4c6922db (svn r11406) -Fix: wrong triggers would be activated on callback 32 for vehicles.
rubidium
parents: 7803
diff changeset
    53
	VEHICLE_TRIGGER_CALLBACK_32   = 0x10,
6248
e4a2ed7e5613 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6247
diff changeset
    54
};
1477
9389baf2bf3c (svn r1981) Typedef some structs and enums
tron
parents: 1475
diff changeset
    55
void TriggerVehicle(Vehicle *veh, VehicleTrigger trigger);
445
beafc0fb8f12 (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky)
tron
parents: 414
diff changeset
    56
3604
1e7d9f584f93 (svn r4496) - NewGRF: switch custom engine names from storing a char* to using the new StringID based text system. Vehicle name
peter1138
parents: 3390
diff changeset
    57
void SetCustomEngineName(EngineID engine, StringID name);
2477
225b2916fe2a (svn r3003) Change int, uint, uin16 and byte to EngineID where appropriate, plus some related changes (mostly casts)
tron
parents: 2464
diff changeset
    58
StringID GetCustomEngineName(EngineID engine);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    59
6247
7d81e3a5d803 (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 5547
diff changeset
    60
void UnloadWagonOverrides();
7d81e3a5d803 (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 5547
diff changeset
    61
void UnloadRotorOverrideSprites();
7d81e3a5d803 (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 5547
diff changeset
    62
void UnloadCustomEngineSprites();
7d81e3a5d803 (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 5547
diff changeset
    63
void UnloadCustomEngineNames();
2491
15a117630a4f (svn r3017) -NewGRF: Implement sprite group unreferencing and unloading.
peter1138
parents: 2477
diff changeset
    64
6247
7d81e3a5d803 (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 5547
diff changeset
    65
void ResetEngineListOrder();
2971
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
    66
EngineID GetRailVehAtPosition(EngineID pos);
4812
d71b2e7d11e0 (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: 4656
diff changeset
    67
uint16 ListPositionOfEngine(EngineID engine);
2971
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
    68
void AlterRailVehListOrder(EngineID engine, EngineID target);
cae3a81e8674 (svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
peter1138
parents: 2962
diff changeset
    69
2962
f0a49b646c48 (svn r3524) - Split newgrf features from engine.[ch] into newgrf_engine.[ch], and add the new files to project files.
peter1138
parents: 2848
diff changeset
    70
#endif /* NEWGRF_ENGINE_H */