src/player_face.h
author rubidium
Sat, 10 Mar 2007 21:44:22 +0000
changeset 6612 b511ba22a541
parent 6516 ee6d057b9850
child 6303 84c215fc8eb8
permissions -rw-r--r--
(svn r9105) -Fix [FS#629]: disable the ability to make flooding water with the canal build tool. In the scenario editor you can still make both canals and flooding water at height level 0.
6516
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
     1
/* $Id$ */
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
     2
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
     3
/** @file player_face.h Functionality related to the player's face */
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
     4
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
     5
#ifndef PLAYER_FACE_H
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
     6
#define PLAYER_FACE_H
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
     7
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
     8
/** The gender/race combinations that we have faces for */
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
     9
enum GenderEthnicity {
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    10
	GENDER_FEMALE    = 0, ///< This bit set means a female, otherwise male
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    11
	ETHNICITY_BLACK  = 1, ///< This bit set means black, otherwise white
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    12
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    13
	GE_WM = 0,                                         ///< A male of Caucasian origin (white)
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    14
	GE_WF = 1 << GENDER_FEMALE,                        ///< A female of Caucasian origin (white)
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    15
	GE_BM = 1 << ETHNICITY_BLACK,                      ///< A male of African origin (black)
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    16
	GE_BF = 1 << ETHNICITY_BLACK | 1 << GENDER_FEMALE, ///< A female of African origin (black)
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    17
	GE_END,
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    18
};
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    19
DECLARE_ENUM_AS_BIT_SET(GenderEthnicity); ///< See GenderRace as a bitset
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    20
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    21
/** Bitgroups of the PlayerFace variable */
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    22
enum PlayerFaceVariable {
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    23
	PFV_GENDER,
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    24
	PFV_ETHNICITY,
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    25
	PFV_GEN_ETHN,
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    26
	PFV_HAS_MOUSTACHE,
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    27
	PFV_HAS_TIE_EARRING,
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    28
	PFV_HAS_GLASSES,
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    29
	PFV_EYE_COLOUR,
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    30
	PFV_CHEEKS,
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    31
	PFV_CHIN,
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    32
	PFV_EYEBROWS,
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    33
	PFV_MOUSTACHE,
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    34
	PFV_LIPS,
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    35
	PFV_NOSE,
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    36
	PFV_HAIR,
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    37
	PFV_JACKET,
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    38
	PFV_COLLAR,
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    39
	PFV_TIE_EARRING,
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    40
	PFV_GLASSES,
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    41
	PFV_END
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    42
};
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    43
DECLARE_POSTFIX_INCREMENT(PlayerFaceVariable);
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    44
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    45
/** Information about the valid values of PlayerFace bitgroups as well as the sprites to draw */
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    46
struct PlayerFaceBitsInfo {
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    47
	byte     offset;               ///< Offset in bits into the PlayerFace
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    48
	byte     length;               ///< Number of bits used in the PlayerFace
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    49
	byte     valid_values[GE_END]; ///< The number of valid values per gender/ethnicity
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    50
	SpriteID first_sprite[GE_END]; ///< The first sprite per gender/ethnicity
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    51
};
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    52
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    53
/** Lookup table for indices into the PlayerFace, valid ranges and sprites */
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    54
static const PlayerFaceBitsInfo _pf_info[] = {
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    55
	/* Index                   off len   WM  WF  BM  BF         WM     WF     BM     BF */
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    56
	/* PFV_GENDER          */ {  0, 1, {  2,  2,  2,  2 }, {     0,     0,     0,     0 } }, ///< 0 = male, 1 = female
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    57
	/* PFV_ETHNICITY       */ {  1, 2, {  2,  2,  2,  2 }, {     0,     0,     0,     0 } }, ///< 0 = (Western-)Caucasian, 1 = African(-American)/Black
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    58
	/* PFV_GEN_ETHN        */ {  0, 3, {  4,  4,  4,  4 }, {     0,     0,     0,     0 } }, ///< Shortcut to get/set gender _and_ ethnicity
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    59
	/* PFV_HAS_MOUSTACHE   */ {  3, 1, {  2,  0,  2,  0 }, {     0,     0,     0,     0 } }, ///< Females do not have a moustache
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    60
	/* PFV_HAS_TIE_EARRING */ {  3, 1, {  0,  2,  0,  2 }, {     0,     0,     0,     0 } }, ///< Draw the earring for females or not. For males the tie is always drawn.
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    61
	/* PFV_HAS_GLASSES     */ {  4, 1, {  2,  2,  2,  2 }, {     0,     0,     0,     0 } }, ///< Whether to draw glasses or not
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    62
	/* PFV_EYE_COLOUR      */ {  5, 2, {  3,  3,  3,  3 }, {     0,     0,     0,     0 } }, ///< Palette modification
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    63
	/* PFV_CHEEKS          */ {  0, 0, {  1,  1,  1,  1 }, { 0x325, 0x326, 0x390, 0x3B0 } }, ///< Cheeks are only indexed by their gender/ethnicity
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    64
	/* PFV_CHIN            */ {  7, 2, {  4,  1,  2,  2 }, { 0x327, 0x327, 0x391, 0x3B1 } },
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    65
	/* PFV_EYEBROWS        */ {  9, 4, { 12, 16, 11, 16 }, { 0x32B, 0x337, 0x39A, 0x3B8 } },
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    66
	/* PFV_MOUSTACHE       */ { 13, 2, {  3,  0,  3,  0 }, { 0x367,     0, 0x397,     0 } }, ///< Depends on PFV_HAS_MOUSTACHE
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    67
	/* PFV_LIPS            */ { 13, 4, { 13, 10,  9,  9 }, { 0x35B, 0x351, 0x3A5, 0x3C8 } }, ///< Depends on !PFV_HAS_MOUSTACHE
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    68
	/* PFV_NOSE            */ { 17, 3, {  8,  4,  4,  5 }, { 0x349, 0x34C, 0x393, 0x3B3 } }, ///< Depends on !PFV_HAS_MOUSTACHE
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    69
	/* PFV_HAIR            */ { 20, 4, {  9,  5,  5,  4 }, { 0x382, 0x38B, 0x3D4, 0x3D9 } },
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    70
	/* PFV_JACKET          */ { 24, 2, {  3,  3,  3,  3 }, { 0x36B, 0x378, 0x36B, 0x378 } },
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    71
	/* PFV_COLLAR          */ { 26, 2, {  4,  4,  4,  4 }, { 0x36E, 0x37B, 0x36E, 0x37B } },
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    72
	/* PFV_TIE_EARRING     */ { 28, 3, {  6,  3,  6,  3 }, { 0x372, 0x37F, 0x372, 0x3D1 } }, ///< Depends on PFV_HAS_TIE_EARRING
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    73
	/* PFV_GLASSES         */ { 31, 1, {  2,  2,  2,  2 }, { 0x347, 0x347, 0x3AE, 0x3AE } }  ///< Depends on PFV_HAS_GLASSES
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    74
};
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    75
assert_compile(lengthof(_pf_info) == PFV_END);
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    76
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    77
/**
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    78
 * Gets the player's face bits for the given player face variable
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    79
 * @param pf  the face to extract the bits from
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    80
 * @param pfv the face variable to get the data of
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    81
 * @param ge  the gender and ethnicity of the face
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    82
 * @pre _pf_info[pfv].valid_values[ge] != 0
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    83
 * @return the requested bits
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    84
 */
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    85
static inline uint GetPlayerFaceBits(PlayerFace pf, PlayerFaceVariable pfv, GenderEthnicity ge)
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    86
{
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    87
	assert(_pf_info[pfv].valid_values[ge] != 0);
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    88
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    89
	return GB(pf, _pf_info[pfv].offset, _pf_info[pfv].length);
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    90
}
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    91
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    92
/**
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    93
 * Sets the player's face bits for the given player face variable
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    94
 * @param pf  the face to write the bits to
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    95
 * @param pfv the face variable to write the data of
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    96
 * @param ge  the gender and ethnicity of the face
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    97
 * @param val the new value
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    98
 * @pre val < _pf_info[pfv].valid_values[ge]
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
    99
 */
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   100
static inline void SetPlayerFaceBits(PlayerFace &pf, PlayerFaceVariable pfv, GenderEthnicity ge, uint val)
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   101
{
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   102
	assert(val < _pf_info[pfv].valid_values[ge]);
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   103
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   104
	SB(pf, _pf_info[pfv].offset, _pf_info[pfv].length, val);
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   105
}
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   106
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   107
/**
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   108
 * Checks whether the player bits have a valid range
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   109
 * @param pf  the face to extract the bits from
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   110
 * @param pfv the face variable to get the data of
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   111
 * @param ge  the gender and ethnicity of the face
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   112
 * @return true if and only if the bits are valid
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   113
 */
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   114
static inline bool ArePlayerFaceBitsValid(PlayerFace pf, PlayerFaceVariable pfv, GenderEthnicity ge)
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   115
{
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   116
	return GB(pf, _pf_info[pfv].offset, _pf_info[pfv].length) < _pf_info[pfv].valid_values[ge];
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   117
}
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   118
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   119
/**
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   120
 * Scales a player face bits variable to the correct scope
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   121
 * @param pfv the face variable to write the data of
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   122
 * @param ge  the gender and ethnicity of the face
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   123
 * @param val the to value to scale
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   124
 * @pre val < (1U << _pf_info[pfv].length), i.e. val has a value of 0..2^(bits used for this variable)-1
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   125
 * @return the scaled value
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   126
 */
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   127
static inline uint ScalePlayerFaceValue(PlayerFaceVariable pfv, GenderEthnicity ge, uint val)
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   128
{
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   129
	assert(val < (1U << _pf_info[pfv].length));
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   130
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   131
	return (val * _pf_info[pfv].valid_values[ge]) >> _pf_info[pfv].length;
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   132
}
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   133
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   134
/**
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   135
 * Gets the sprite to draw for the given player face variable
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   136
 * @param pf  the face to extract the data from
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   137
 * @param pfv the face variable to get the sprite of
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   138
 * @param ge  the gender and ethnicity of the face
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   139
 * @pre _pf_info[pfv].valid_values[ge] != 0
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   140
 * @return sprite to draw
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   141
 */
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   142
static inline SpriteID GetPlayerFaceSprite(PlayerFace pf, PlayerFaceVariable pfv, GenderEthnicity ge)
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   143
{
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   144
	assert(_pf_info[pfv].valid_values[ge] != 0);
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   145
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   146
	return _pf_info[pfv].first_sprite[ge] + GB(pf, _pf_info[pfv].offset, _pf_info[pfv].length);
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   147
}
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   148
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   149
void DrawPlayerFace(PlayerFace face, int color, int x, int y);
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   150
PlayerFace ConvertFromOldPlayerFace(uint32 face);
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   151
bool IsValidPlayerFace(PlayerFace pf);
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   152
ee6d057b9850 (svn r8969) -Codechange: rework of the player face bits.
rubidium
parents:
diff changeset
   153
#endif /* PLAYER_FACE_H */