tron@2186: /* $Id$ */ tron@2186: belugas@6348: /** @file newgrf.h */ belugas@6348: dominik@455: #ifndef NEWGRF_H dominik@455: #define NEWGRF_H dominik@455: pasky@463: #include "station.h" maedhros@6332: #include "town.h" peter1138@5228: #include "newgrf_config.h" rubidium@5587: #include "helpers.hpp" peter1138@6143: #include "cargotype.h" belugas@6759: #include "industry.h" pasky@463: rubidium@6248: enum GrfLoadingStage { peter1138@5228: GLS_FILESCAN, peter1138@5329: GLS_SAFETYSCAN, peter1138@5225: GLS_LABELSCAN, peter1138@5225: GLS_INIT, peter1138@6359: GLS_RESERVE, peter1138@5225: GLS_ACTIVATION, peter1138@5225: GLS_END, rubidium@6248: }; peter1138@5225: rubidium@5587: DECLARE_POSTFIX_INCREMENT(GrfLoadingStage); rubidium@5587: maedhros@6541: enum GrfMiscBit { maedhros@6541: GMB_DESERT_TREES_FIELDS = 0, // Unsupported. maedhros@6541: GMB_DESERT_PAVED_ROADS = 1, maedhros@6541: GMB_FIELD_BOUNDING_BOX = 2, // Unsupported. maedhros@6541: GMB_TRAIN_WIDTH_32_PIXELS = 3, maedhros@6541: GMB_AMBIENT_SOUND_CALLBACK = 4, // Unsupported. maedhros@6541: GMB_CATENARY_ON_3RD_TRACK = 5, // Unsupported. maedhros@6541: }; rubidium@5587: rubidium@6248: struct GRFLabel { Darkvater@3561: byte label; Darkvater@3561: uint32 nfo_line; Darkvater@3561: uint32 pos; Darkvater@3561: struct GRFLabel *next; rubidium@6248: }; Darkvater@3561: rubidium@6248: struct GRFFile { dominik@455: char *filename; dominik@455: uint32 grfid; dominik@455: uint16 sprite_offset; peter1138@3640: byte grf_version; rubidium@6248: GRFFile *next; dominik@455: dominik@455: /* A sprite group contains all sprites of a given vehicle (or multiple dominik@455: * vehicles) when carrying given cargo. It consists of several sprite dominik@455: * sets. Group ids are refered as "cargo id"s by TTDPatch dominik@455: * documentation, contributing to the global confusion. dominik@455: * dominik@455: * A sprite set contains all sprites of a given vehicle carrying given dominik@455: * cargo at a given *stage* - that is usually its load stage. Ie. you dominik@455: * can have a spriteset for an empty wagon, wagon full of coal, dominik@455: * half-filled wagon etc. Each spriteset contains eight sprites (one dominik@455: * per direction) or four sprites if the vehicle is symmetric. */ dominik@455: peter1138@3707: SpriteID spriteset_start; dominik@455: int spriteset_numsets; dominik@455: int spriteset_numents; dominik@455: int spriteset_feature; dominik@455: dominik@455: int spritegroups_count; peter1138@3865: struct SpriteGroup **spritegroups; dominik@455: peter1138@4656: uint sound_offset; peter1138@4656: peter1138@3768: StationSpec **stations; maedhros@6332: HouseSpec **housespec; belugas@6759: IndustrySpec **industryspec; belugas@6759: IndustryTileSpec **indtspec; tron@2345: tron@2345: uint32 param[0x80]; belugas@6348: uint param_end; ///< one more than the highest set parameter Darkvater@3561: Darkvater@3561: GRFLabel *label; ///< Pointer to the first label. This is a linked list, not an array. peter1138@6143: peter1138@6143: uint8 cargo_max; peter1138@6143: CargoLabel *cargo_list; peter1138@6147: uint8 cargo_map[NUM_CARGO]; rubidium@6248: }; dominik@455: tron@1477: extern GRFFile *_first_grffile; dominik@455: peter1138@5210: extern SpriteID _coast_base; belugas@6769: belugas@6914: struct GRFLoadedFeatures { belugas@6914: bool has_2CC; ///< Set if any vehicle is loaded which uses 2cc (two company colours). belugas@6914: bool has_newhouses; ///< Set if there are any newhouses loaded. belugas@6914: bool has_newindustries; ///< Set if there are any newindustries loaded. belugas@7796: bool has_newwater; ///< Set it there are any newwater grf loaded belugas@6769: }; belugas@6769: belugas@6769: /* Indicates which are the newgrf features currently loaded ingame */ belugas@6914: extern GRFLoadedFeatures _loaded_newgrf_features; pasky@463: peter1138@5228: void LoadNewGRFFile(GRFConfig *config, uint file_index, GrfLoadingStage stage); tron@2342: void LoadNewGRF(uint load_index, uint file_index); belugas@6348: void ReloadNewGRFData(); // in openttd.cpp dominik@455: Darkvater@5380: void CDECL grfmsg(int severity, const char *str, ...); Darkvater@5380: maedhros@6541: bool HasGrfMiscBit(GrfMiscBit bit); maedhros@6541: dominik@455: #endif /* NEWGRF_H */