65 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* $Id$ */
 | |
| 
 | |
| #ifndef SPRITE_H
 | |
| #define SPRITE_H
 | |
| 
 | |
| 
 | |
| /* The following describes bunch of sprites to be drawn together in a single 3D
 | |
|  * bounding box. Used especially for various multi-sprite buildings (like
 | |
|  * depots or stations): */
 | |
| 
 | |
| typedef struct DrawTileSeqStruct {
 | |
| 	int8 delta_x; // 0x80 is sequence terminator
 | |
| 	int8 delta_y;
 | |
| 	int8 delta_z;
 | |
| 	byte width,height;
 | |
| 	byte unk; // 'depth', just z-size; TODO: rename
 | |
| 	uint32 image;
 | |
| } DrawTileSeqStruct;
 | |
| 
 | |
| typedef struct DrawTileSprites {
 | |
| 	SpriteID ground_sprite;
 | |
| 	const DrawTileSeqStruct* seq;
 | |
| } DrawTileSprites;
 | |
| 
 | |
| /**
 | |
|  * This structure is the same for both Industries and Houses.
 | |
|  * Buildings here reference a general type of construction
 | |
|  */
 | |
| typedef struct DrawBuildingsTileStruct {
 | |
| 	SpriteID ground;
 | |
| 	SpriteID building;
 | |
| 	byte subtile_x:4;
 | |
| 	byte subtile_y:4;
 | |
| 	byte width:4;
 | |
| 	byte height:4;
 | |
| 	byte dz;
 | |
| 	byte draw_proc;  /* this allows to specify a special drawing procedure.*/
 | |
| } DrawBuildingsTileStruct;
 | |
| 
 | |
| // Iterate through all DrawTileSeqStructs in DrawTileSprites.
 | |
| #define foreach_draw_tile_seq(idx, list) for (idx = list; ((byte) idx->delta_x) != 0x80; idx++)
 | |
| 
 | |
| 
 | |
| // XXX Temporary include while juggling about
 | |
| #include "newgrf_spritegroup.h"
 | |
| 
 | |
| 
 | |
| /* This takes value (probably of the variable specified in the group) and
 | |
|  * chooses corresponding SpriteGroup accordingly to the given
 | |
|  * DeterministicSpriteGroup. */
 | |
| SpriteGroup *EvalDeterministicSpriteGroup(const DeterministicSpriteGroup *dsg, int value);
 | |
| /* Get value of a common deterministic SpriteGroup variable. */
 | |
| int GetDeterministicSpriteValue(byte var);
 | |
| 
 | |
| /* This takes randomized bitmask (probably associated with
 | |
|  * vehicle/station/whatever) and chooses corresponding SpriteGroup
 | |
|  * accordingly to the given RandomizedSpriteGroup. */
 | |
| SpriteGroup *EvalRandomizedSpriteGroup(const RandomizedSpriteGroup *rsg, byte random_bits);
 | |
| /* Triggers given RandomizedSpriteGroup with given bitmask and returns and-mask
 | |
|  * of random bits to be reseeded, or zero if there were no triggers matched
 | |
|  * (then they are |ed to @waiting_triggers instead). */
 | |
| byte RandomizedSpriteGroupTriggeredBits(const RandomizedSpriteGroup *rsg, byte triggers, byte *waiting_triggers);
 | |
| 
 | |
| #endif /* SPRITE_H */
 |