tron@2186: /* $Id$ */ tron@2186: belugas@6916: /** @file sprite.h */ belugas@6916: darkvater@406: #ifndef SPRITE_H darkvater@406: #define SPRITE_H darkvater@406: rubidium@8619: #include "gfx_type.h" rubidium@8619: rubidium@8609: #define GENERAL_SPRITE_COLOR(color) ((color) + PALETTE_RECOLOR_START) rubidium@8609: #define PLAYER_SPRITE_COLOR(owner) (GENERAL_SPRITE_COLOR(_player_colors[owner])) rubidium@8609: rubidium@8609: /** rubidium@8609: * Whether a sprite comes from the original graphics files or a new grf file rubidium@8609: * (either supplied by OpenTTD or supplied by the user). rubidium@8609: * rubidium@8609: * @param sprite The sprite to check rubidium@8609: * @return True if it is a new sprite, or false if it is original. rubidium@8609: */ rubidium@8609: #define IS_CUSTOM_SPRITE(sprite) ((sprite) >= SPR_SIGNALS_BASE) darkvater@406: darkvater@406: /* The following describes bunch of sprites to be drawn together in a single 3D darkvater@406: * bounding box. Used especially for various multi-sprite buildings (like darkvater@406: * depots or stations): */ darkvater@406: rubidium@6574: struct DrawTileSeqStruct { darkvater@408: int8 delta_x; // 0x80 is sequence terminator darkvater@406: int8 delta_y; darkvater@406: int8 delta_z; tron@4230: byte size_x; tron@4230: byte size_y; tron@4230: byte size_z; frosch@9066: PalSpriteID image; rubidium@6574: }; darkvater@406: rubidium@6574: struct DrawTileSprites { frosch@9067: PalSpriteID ground; rubidium@7814: const DrawTileSeqStruct *seq; rubidium@6574: }; darkvater@406: belugas@3654: /** belugas@3654: * This structure is the same for both Industries and Houses. belugas@3654: * Buildings here reference a general type of construction belugas@3654: */ rubidium@6574: struct DrawBuildingsTileStruct { peter1138@5919: PalSpriteID ground; peter1138@5919: PalSpriteID building; rubidium@8102: byte subtile_x; rubidium@8102: byte subtile_y; rubidium@8102: byte width; rubidium@8102: byte height; belugas@3654: byte dz; belugas@3654: byte draw_proc; /* this allows to specify a special drawing procedure.*/ rubidium@6574: }; belugas@3654: belugas@6916: /** Iterate through all DrawTileSeqStructs in DrawTileSprites. */ darkvater@406: #define foreach_draw_tile_seq(idx, list) for (idx = list; ((byte) idx->delta_x) != 0x80; idx++) darkvater@406: darkvater@406: Darkvater@2436: #endif /* SPRITE_H */