12 #ifndef COMPANY_MANAGER_FACE_H
13 #define COMPANY_MANAGER_FACE_H
34 enum CompanyManagerFaceVariable {
61 byte valid_values[GE_END];
68 { 0, 1, { 2, 2, 2, 2 }, { 0, 0, 0, 0 } },
69 { 1, 2, { 2, 2, 2, 2 }, { 0, 0, 0, 0 } },
70 { 0, 3, { 4, 4, 4, 4 }, { 0, 0, 0, 0 } },
71 { 3, 1, { 2, 0, 2, 0 }, { 0, 0, 0, 0 } },
72 { 3, 1, { 0, 2, 0, 2 }, { 0, 0, 0, 0 } },
73 { 4, 1, { 2, 2, 2, 2 }, { 0, 0, 0, 0 } },
74 { 5, 2, { 3, 3, 1, 1 }, { 0, 0, 0, 0 } },
75 { 0, 0, { 1, 1, 1, 1 }, { 0x325, 0x326, 0x390, 0x3B0 } },
76 { 7, 2, { 4, 1, 2, 2 }, { 0x327, 0x327, 0x391, 0x3B1 } },
77 { 9, 4, { 12, 16, 11, 16 }, { 0x32B, 0x337, 0x39A, 0x3B8 } },
78 { 13, 2, { 3, 0, 3, 0 }, { 0x367, 0, 0x397, 0 } },
79 { 13, 4, { 12, 10, 9, 9 }, { 0x35B, 0x351, 0x3A5, 0x3C8 } },
80 { 17, 3, { 8, 4, 4, 5 }, { 0x349, 0x34C, 0x393, 0x3B3 } },
81 { 20, 4, { 9, 5, 5, 4 }, { 0x382, 0x38B, 0x3D4, 0x3D9 } },
82 { 24, 2, { 3, 3, 3, 3 }, { 0x36B, 0x378, 0x36B, 0x378 } },
83 { 26, 2, { 4, 4, 4, 4 }, { 0x36E, 0x37B, 0x36E, 0x37B } },
84 { 28, 3, { 6, 3, 6, 3 }, { 0x372, 0x37F, 0x372, 0x3D1 } },
85 { 31, 1, { 2, 2, 2, 2 }, { 0x347, 0x347, 0x3AE, 0x3AE } }
88 assert_compile(
lengthof(_cmf_info) == CMFV_END);
100 assert(_cmf_info[cmfv].valid_values[ge] != 0);
102 return GB(cmf, _cmf_info[cmfv].offset, _cmf_info[cmfv].length);
115 assert(val < _cmf_info[cmfv].valid_values[ge]);
117 SB(cmf, _cmf_info[cmfv].offset, _cmf_info[cmfv].length, val);
137 if (val >= _cmf_info[cmfv].valid_values[ge]) {
139 }
else if (val < 0) {
155 return GB(cmf, _cmf_info[cmfv].offset, _cmf_info[cmfv].length) < _cmf_info[cmfv].
valid_values[ge];
168 assert(val < (1U << _cmf_info[cmfv].length));
170 return (val * _cmf_info[cmfv].valid_values[ge]) >> _cmf_info[cmfv].
length;
187 for (CompanyManagerFaceVariable cmfv = CMFV_EYE_COLOUR; cmfv < CMFV_END; cmfv++) {
190 if (cmfv != CMFV_MOUSTACHE || is_moust_male) {
212 cmf = interactive ? InteractiveRandom() : Random();
238 assert(_cmf_info[cmfv].valid_values[ge] != 0);
240 return _cmf_info[cmfv].
first_sprite[ge] +
GB(cmf, _cmf_info[cmfv].offset, _cmf_info[cmfv].length);