src/players.cpp
changeset 5919 2b58160d667d
parent 5838 9c3129cb019b
child 5943 9acc30eb83cd
equal deleted inserted replaced
5918:602e158900a2 5919:2b58160d667d
    78 		flag |= 1;
    78 		flag |= 1;
    79 	if ((((((face >> 7) ^ face) >> 7) ^ face) & 0x8080000) == 0x8000000)
    79 	if ((((((face >> 7) ^ face) >> 7) ^ face) & 0x8080000) == 0x8000000)
    80 		flag |= 2;
    80 		flag |= 2;
    81 
    81 
    82 	/* draw the gradient */
    82 	/* draw the gradient */
    83 	DrawSprite(GENERAL_SPRITE_COLOR(color) + SPRITE_PALETTE(SPR_GRADIENT), x, y);
    83 	DrawSprite(SPR_GRADIENT, GENERAL_SPRITE_COLOR(color), x, y);
    84 
    84 
    85 	/* draw the cheeks */
    85 	/* draw the cheeks */
    86 	DrawSprite(cheeks_table[flag&3], x, y);
    86 	DrawSprite(cheeks_table[flag&3], PAL_NONE, x, y);
    87 
    87 
    88 	/* draw the chin */
    88 	/* draw the chin */
    89 	/* FIXME: real code uses -2 in zoomlevel 1 */
    89 	/* FIXME: real code uses -2 in zoomlevel 1 */
    90 	{
    90 	{
    91 		uint val = GB(face, 4, 2);
    91 		uint val = GB(face, 4, 2);
    92 		if (!(flag & 2)) {
    92 		if (!(flag & 2)) {
    93 			DrawSprite(0x327 + (flag&1?0:val), x, y);
    93 			DrawSprite(0x327 + (flag&1?0:val), PAL_NONE, x, y);
    94 		} else {
    94 		} else {
    95 			DrawSprite((flag&1?0x3B1:0x391) + (val>>1), x, y);
    95 			DrawSprite((flag&1?0x3B1:0x391) + (val>>1), PAL_NONE, x, y);
    96 		}
    96 		}
    97 	}
    97 	}
    98 	/* draw the eyes */
    98 	/* draw the eyes */
    99 	{
    99 	{
   100 		uint val1 = GB(face,  6, 4);
   100 		uint val1 = GB(face,  6, 4);
   101 		uint val2 = GB(face, 20, 3);
   101 		uint val2 = GB(face, 20, 3);
   102 		uint32 high = 0x314 << PALETTE_SPRITE_START;
   102 		SpriteID pal;
   103 
   103 
   104 		if (val2 >= 6) {
   104 		if (val2 < 6) {
   105 			high = 0x30F << PALETTE_SPRITE_START;
   105 			pal = PALETTE_TO_BROWN;
   106 			if (val2 != 6)
   106 		} else if (val2 == 6) {
   107 				high = 0x30D << PALETTE_SPRITE_START;
   107 			pal = PALETTE_TO_BLUE;
       
   108 		} else {
       
   109 			pal = PALETTE_TO_GREEN;
   108 		}
   110 		}
   109 
   111 
   110 		if (!(flag & 2)) {
   112 		if (!(flag & 2)) {
   111 			if (!(flag & 1)) {
   113 			if (!(flag & 1)) {
   112 				DrawSprite(high+((val1 * 12 >> 4) + SPRITE_PALETTE(0x32B)), x, y);
   114 				DrawSprite(0x32B + (val1 * 12 >> 4), pal, x, y);
   113 			} else {
   115 			} else {
   114 				DrawSprite(high+(val1 + SPRITE_PALETTE(0x337)), x, y);
   116 				DrawSprite(0x337 + val1, pal, x, y);
   115 			}
   117 			}
   116 		} else {
   118 		} else {
   117 			if (!(flag & 1)) {
   119 			if (!(flag & 1)) {
   118 				DrawSprite(high+((val1 * 11 >> 4) + SPRITE_PALETTE(0x39A)), x, y);
   120 				DrawSprite(0x39A + (val1 * 11 >> 4), pal, x, y);
   119 			} else {
   121 			} else {
   120 				DrawSprite(high+(val1 + SPRITE_PALETTE(0x3B8)), x, y);
   122 				DrawSprite(0x3B8 + val1, pal, x, y);
   121 			}
   123 			}
   122 		}
   124 		}
   123 	}
   125 	}
   124 
   126 
   125 	/* draw the mouth */
   127 	/* draw the mouth */
   129 
   131 
   130 		if (!(flag&1)) {
   132 		if (!(flag&1)) {
   131 			val2 = ((val&0xF) * 15 >> 4);
   133 			val2 = ((val&0xF) * 15 >> 4);
   132 
   134 
   133 			if (val2 < 3) {
   135 			if (val2 < 3) {
   134 				DrawSprite((flag&2 ? 0x397 : 0x367) + val2, x, y);
   136 				DrawSprite((flag&2 ? 0x397 : 0x367) + val2, PAL_NONE, x, y);
   135 				/* skip the rest */
   137 				/* skip the rest */
   136 				goto skip_mouth;
   138 				goto skip_mouth;
   137 			}
   139 			}
   138 
   140 
   139 			val2 -= 3;
   141 			val2 -= 3;
   140 			if (flag & 2) {
   142 			if (flag & 2) {
   141 				if (val2 > 8) val2 = 0;
   143 				if (val2 > 8) val2 = 0;
   142 				val2 += 0x3A5 - 0x35B;
   144 				val2 += 0x3A5 - 0x35B;
   143 			}
   145 			}
   144 			DrawSprite(val2 + 0x35B, x, y);
   146 			DrawSprite(val2 + 0x35B, PAL_NONE, x, y);
   145 		} else if (!(flag&2)) {
   147 		} else if (!(flag&2)) {
   146 			DrawSprite(((val&0xF) * 10 >> 4) + 0x351, x, y);
   148 			DrawSprite(((val&0xF) * 10 >> 4) + 0x351, PAL_NONE, x, y);
   147 		} else {
   149 		} else {
   148 			DrawSprite(((val&0xF) * 9 >> 4) + 0x3C8, x, y);
   150 			DrawSprite(((val&0xF) * 9 >> 4) + 0x3C8, PAL_NONE, x, y);
   149 		}
   151 		}
   150 
   152 
   151 		val >>= 3;
   153 		val >>= 3;
   152 
   154 
   153 		if (!(flag&2)) {
   155 		if (!(flag&2)) {
   154 			if (!(flag&1)) {
   156 			if (!(flag&1)) {
   155 				DrawSprite(0x349 + val, x, y);
   157 				DrawSprite(0x349 + val, PAL_NONE, x, y);
   156 			} else {
   158 			} else {
   157 				DrawSprite( mouth_table[(val*3>>3)], x, y);
   159 				DrawSprite( mouth_table[(val*3>>3)], PAL_NONE, x, y);
   158 			}
   160 			}
   159 		} else {
   161 		} else {
   160 			if (!(flag&1)) {
   162 			if (!(flag&1)) {
   161 				DrawSprite(0x393 + (val&3), x, y);
   163 				DrawSprite(0x393 + (val&3), PAL_NONE, x, y);
   162 			} else {
   164 			} else {
   163 				DrawSprite(0x3B3 + (val*5>>3), x, y);
   165 				DrawSprite(0x3B3 + (val*5>>3), PAL_NONE, x, y);
   164 			}
   166 			}
   165 		}
   167 		}
   166 
   168 
   167 		skip_mouth:;
   169 		skip_mouth:;
   168 	}
   170 	}
   171 	/* draw the hair */
   173 	/* draw the hair */
   172 	{
   174 	{
   173 		uint val = GB(face, 16, 4);
   175 		uint val = GB(face, 16, 4);
   174 		if (flag & 2) {
   176 		if (flag & 2) {
   175 			if (flag & 1) {
   177 			if (flag & 1) {
   176 				DrawSprite(0x3D9 + (val * 5 >> 4), x, y);
   178 				DrawSprite(0x3D9 + (val * 5 >> 4), PAL_NONE, x, y);
   177 			} else {
   179 			} else {
   178 				DrawSprite(0x3D4 + (val * 5 >> 4), x, y);
   180 				DrawSprite(0x3D4 + (val * 5 >> 4), PAL_NONE, x, y);
   179 			}
   181 			}
   180 		} else {
   182 		} else {
   181 			if (flag & 1) {
   183 			if (flag & 1) {
   182 				DrawSprite(0x38B + (val * 5 >> 4), x, y);
   184 				DrawSprite(0x38B + (val * 5 >> 4), PAL_NONE, x, y);
   183 			} else {
   185 			} else {
   184 				DrawSprite(0x382 + (val * 9 >> 4), x, y);
   186 				DrawSprite(0x382 + (val * 9 >> 4), PAL_NONE, x, y);
   185 			}
   187 			}
   186 		}
   188 		}
   187 	}
   189 	}
   188 
   190 
   189 	/* draw the tie */
   191 	/* draw the tie */
   190 	{
   192 	{
   191 		uint val = GB(face, 20, 8);
   193 		uint val = GB(face, 20, 8);
   192 
   194 
   193 		if (!(flag&1)) {
   195 		if (!(flag&1)) {
   194 			DrawSprite(0x36B + (GB(val, 0, 2) * 3 >> 2), x, y);
   196 			DrawSprite(0x36B + (GB(val, 0, 2) * 3 >> 2), PAL_NONE, x, y);
   195 			DrawSprite(0x36E + (GB(val, 2, 2) * 4 >> 2), x, y);
   197 			DrawSprite(0x36E + (GB(val, 2, 2) * 4 >> 2), PAL_NONE, x, y);
   196 			DrawSprite(0x372 + (GB(val, 4, 4) * 6 >> 4), x, y);
   198 			DrawSprite(0x372 + (GB(val, 4, 4) * 6 >> 4), PAL_NONE, x, y);
   197 		} else {
   199 		} else {
   198 			DrawSprite(0x378 + (GB(val, 0, 2) * 3 >> 2), x, y);
   200 			DrawSprite(0x378 + (GB(val, 0, 2) * 3 >> 2), PAL_NONE, x, y);
   199 			DrawSprite(0x37B + (GB(val, 2, 2) * 4 >> 2), x, y);
   201 			DrawSprite(0x37B + (GB(val, 2, 2) * 4 >> 2), PAL_NONE, x, y);
   200 
   202 
   201 			val >>= 4;
   203 			val >>= 4;
   202 			if (val < 3) DrawSprite((flag & 2 ? 0x3D1 : 0x37F) + val, x, y);
   204 			if (val < 3) DrawSprite((flag & 2 ? 0x3D1 : 0x37F) + val, PAL_NONE, x, y);
   203 		}
   205 		}
   204 	}
   206 	}
   205 
   207 
   206 	/* draw the glasses */
   208 	/* draw the glasses */
   207 	{
   209 	{
   208 		uint val = GB(face, 28, 3);
   210 		uint val = GB(face, 28, 3);
   209 
   211 
   210 		if (flag & 2) {
   212 		if (flag & 2) {
   211 			if (val <= 1) DrawSprite(0x3AE + val, x, y);
   213 			if (val <= 1) DrawSprite(0x3AE + val, PAL_NONE, x, y);
   212 		} else {
   214 		} else {
   213 			if (val <= 1) DrawSprite(0x347 + val, x, y);
   215 			if (val <= 1) DrawSprite(0x347 + val, PAL_NONE, x, y);
   214 		}
   216 		}
   215 	}
   217 	}
   216 }
   218 }
   217 
   219 
   218 void InvalidatePlayerWindows(const Player *p)
   220 void InvalidatePlayerWindows(const Player *p)