Exemple #1
0
/*
 * CalcHalfRampXlat:  Make pXlat a palette translation where the the byMask
 *   part of the index is changed from byFromRamp to byToRamp.  Other colors
 *   not matching byFromRamp are unaffected.
 *   The index is halved to translate to a half ramp; byToRampOffset is added
 *   to the result to move the half-ramp inside its enclosing ramp.
 */
void CalcHalfRampXlat(HPALETTE hPalette, xlat* pXlat, BYTE byMask, BYTE byFromRamp, BYTE byToRamp, BYTE byToRampOffset, BOOL bIdentity)
{
   int i;

   if (bIdentity)
      *pXlat = *FindStandardXlat(XLAT_IDENTITY);
   
   for (i = 0; i < NUM_COLORS; i++)
   {
      if ((i & byMask) == byFromRamp)
	 pXlat->entry[i] = (((i & ~byMask) / 2) | byToRamp) + byToRampOffset;
   }
}
Exemple #2
0
/*
 * CalcRampMoveXlat:  Make pXlat a translation that moves the given ramp
 *   (whose byMask matches byFromRamp) to the given indexes.
 */
void CalcRampMoveXlat(HPALETTE hPalette, xlat* pXlat, BYTE byMask, BYTE byFromRamp, BYTE *indexes, BOOL bIdentity)
{
   int i;
   int count;
   
   if (bIdentity)
      *pXlat = *FindStandardXlat(XLAT_IDENTITY);
   
   count = 0;
   for (i = 0; i < NUM_COLORS; i++)
   {
      if ((i & byMask) == byFromRamp)
      {
	 pXlat->entry[i] = indexes[count];
	 count++;
      }
   }
}
Exemple #3
0
/*
 * CalcRampOffsetXlat:  Make pXlat a palette translation where the the byMask
 *   part of the index is changed to another ramp at a given ramp offset.
 *   Known ramps are defined in the static global ramps[].
 *   Unlike other ramp routines in here, this assumes the ramps are sixteen
 *   colors aligned to sixteens, such as 0x30-0x3F, or 0xA0-0xAF.
 */
void CalcRampOffsetXlat(HPALETTE hPalette, xlat* pXlat, int iOffset)
{
	int i, j, r;
	*pXlat = *FindStandardXlat(XLAT_IDENTITY);

	// Number of defined ramps.
	j = sizeof(ramps)/sizeof(ramps[0]);

	// If offset is negative, add enough multiples of J to make it positive.
	if (iOffset < 0)
		iOffset += (1-iOffset/j)*j;

	// For each ramp, for each element in the ramp,
	// change the high nibble to the offset ramp's high nibble.
	//
	for (r = 0; r < j; r++)
	{
		for (i = ramps[r]; i < (ramps[r]+0x10); i++)
		{
			pXlat->entry[i] = ((i & 0x0F) | ramps[(r+iOffset+j)%j]);
		}
	}
}
Exemple #4
0
void DrawPostOverlayEffects(room_type* room, Draw3DParams* params)
{
   static DWORD timeLastFrame = 0;
   DWORD timeCurrent, timeDelta;
   int amount;

   timeCurrent = timeGetTime();
   timeDelta = timeCurrent - timeLastFrame;
   timeLastFrame = timeCurrent;

   // May be drawn over room or map.

   // Blurred Vision.
   if (effects.blur)
   {
      // Blur by 1-EFFECT_BLUR_AMPLITUDE pixels
      amount = (effects.blur / EFFECT_BLUR_RATE) % (2 * EFFECT_BLUR_AMPLITUDE);
      if (amount > EFFECT_BLUR_AMPLITUDE)
	 amount = 2 * EFFECT_BLUR_AMPLITUDE - amount;
      amount++;

      BlurDib(gBits, MAXX, MAXY, amount);
      RedrawAll();
      if (!config.animate)
	 effects.blur = 0;
   }

   // Wavering Vision.
   if (effects.waver)
   {
      static int offset = 0;
      offset++;
      WaverDib(gBits, MAXX, MAXY, offset);
      RedrawAll();
      if (!config.animate)
	 effects.waver = 0;
   }

   // Flash of XLAT.  Could be color, blindness, whatever.
   if (effects.flashxlat != XLAT_IDENTITY)
   {
      XlatDib(gBits, MAXX, MAXY, FindStandardXlat(effects.flashxlat));
      effects.duration -= (int)timeDelta;
      if (effects.duration <= 0)
      {
	 effects.flashxlat = XLAT_IDENTITY;
	 effects.duration = 0;
      }
   }

   if (effects.xlatOverride > 0)
   {
      XlatDib(gBits, MAXX, MAXY, FindStandardXlat(effects.xlatOverride));
      RedrawAll();
      return;
   }

   // Whiteout
   if (effects.whiteout > 500)
      XlatDib(gBits, MAXX, MAXY, FindStandardXlat(XLAT_BLEND100WHITE));
   else if (effects.whiteout > 250)
      XlatDib(gBits, MAXX, MAXY, FindStandardXlat(XLAT_BLEND90WHITE));
   else if (effects.whiteout > 0)
      XlatDib(gBits, MAXX, MAXY, FindStandardXlat(XLAT_BLEND80WHITE));
   if (!config.animate && effects.whiteout)
   {
      // Whiteout always shows up, but if not animating, it doesn't fade out, it blinks.
      effects.whiteout = 0;
      RedrawAll();
   }
   
   // Pain (always drawn last).
   if (!config.pain)
      return;
   if (effects.pain > 2000)
      XlatDib(gBits, MAXX, MAXY, FindStandardXlat(XLAT_BLEND80RED));
   else if (effects.pain > 1000)
      XlatDib(gBits, MAXX, MAXY, FindStandardXlat(XLAT_BLEND70RED));
   else if (effects.pain > 500)
      XlatDib(gBits, MAXX, MAXY, FindStandardXlat(XLAT_BLEND60RED));
   else if (effects.pain > 400)
      XlatDib(gBits, MAXX, MAXY, FindStandardXlat(XLAT_BLEND50RED));
   else if (effects.pain > 300)
      XlatDib(gBits, MAXX, MAXY, FindStandardXlat(XLAT_BLEND40RED));
   else if (effects.pain > 200)
      XlatDib(gBits, MAXX, MAXY, FindStandardXlat(XLAT_BLEND30RED));
   else if (effects.pain > 100)
      XlatDib(gBits, MAXX, MAXY, FindStandardXlat(XLAT_BLEND20RED));
   else if (effects.pain)
      XlatDib(gBits, MAXX, MAXY, FindStandardXlat(XLAT_BLEND10RED));
   
   if (!config.animate && effects.pain)
   {
      // Pain always shows up, but if not animating, it doesn't fade out, it blinks.
      effects.pain = 0;
      RedrawAll();
   }
}
Exemple #5
0
void InitStandardXlats(HPALETTE hPalette)
{
	int i, j, nRamps;
	xlat* pIdentity = FindStandardXlat(XLAT_IDENTITY);

	xlat* pXlat = pIdentity;
	for (i = 0; i < NUM_COLORS; i++)
		pXlat->entry[i] = i;

	CalcBlendXlat(hPalette, FindStandardXlat(XLAT_BLEND10RED),   RGB(255, 0, 0), 90, 10);
	CalcBlendXlat(hPalette, FindStandardXlat(XLAT_BLEND20RED),   RGB(255, 0, 0), 80, 20);
	CalcBlendXlat(hPalette, FindStandardXlat(XLAT_BLEND30RED),   RGB(255, 0, 0), 70, 30);
	CalcBlendXlat(hPalette, FindStandardXlat(XLAT_BLEND40RED),   RGB(255, 0, 0), 60, 40);
	CalcBlendXlat(hPalette, FindStandardXlat(XLAT_BLEND50RED),   RGB(255, 0, 0), 50, 50);
	CalcBlendXlat(hPalette, FindStandardXlat(XLAT_BLEND60RED),   RGB(255, 0, 0), 40, 60);
	CalcBlendXlat(hPalette, FindStandardXlat(XLAT_BLEND70RED),   RGB(255, 0, 0), 30, 70);
	CalcBlendXlat(hPalette, FindStandardXlat(XLAT_BLEND80RED),   RGB(255, 0, 0), 20, 80);
	CalcBlendXlat(hPalette, FindStandardXlat(XLAT_BLEND90RED),   RGB(255, 0, 0), 10, 90);
	//CalcBlendXlat(hPalette, FindStandardXlat(XLAT_BLEND100RED),  RGB(255, 0, 0), 0, 100);
	pXlat = FindStandardXlat(XLAT_BLEND100RED);
	for (i = 0; i < NUM_COLORS; i++)
		pXlat->entry[i] = 0x10;

	CalcBlendXlat(hPalette, FindStandardXlat(XLAT_BLEND10WHITE),   RGB(255, 255, 255), 90, 10);
	CalcBlendXlat(hPalette, FindStandardXlat(XLAT_BLEND20WHITE),   RGB(255, 255, 255), 80, 20);
	CalcBlendXlat(hPalette, FindStandardXlat(XLAT_BLEND30WHITE),   RGB(255, 255, 255), 70, 30);
	CalcBlendXlat(hPalette, FindStandardXlat(XLAT_BLEND40WHITE),   RGB(255, 255, 255), 60, 40);
	CalcBlendXlat(hPalette, FindStandardXlat(XLAT_BLEND50WHITE),   RGB(255, 255, 255), 50, 50);
	CalcBlendXlat(hPalette, FindStandardXlat(XLAT_BLEND60WHITE),   RGB(255, 255, 255), 40, 60);
	CalcBlendXlat(hPalette, FindStandardXlat(XLAT_BLEND70WHITE),   RGB(255, 255, 255), 30, 70);
	CalcBlendXlat(hPalette, FindStandardXlat(XLAT_BLEND80WHITE),   RGB(255, 255, 255), 20, 80);
	CalcBlendXlat(hPalette, FindStandardXlat(XLAT_BLEND90WHITE),   RGB(255, 255, 255), 10, 90);
	//CalcBlendXlat(hPalette, FindStandardXlat(XLAT_BLEND100WHITE),   RGB(255, 255, 255), 0, 100);
	pXlat = FindStandardXlat(XLAT_BLEND100WHITE);
	for (i = 0; i < NUM_COLORS; i++)
		pXlat->entry[i] = 255;

	CalcBlendXlat(hPalette, FindStandardXlat(XLAT_BLEND25YELLOW),  RGB(255, 255, 0), 75, 25);

	CalcBlendXlat(hPalette, FindStandardXlat(XLAT_BLEND25RED),   RGB(255, 0, 0), 75, 25);
	CalcBlendXlat(hPalette, FindStandardXlat(XLAT_BLEND25GREEN), RGB(0, 255, 0), 75, 25);
	CalcBlendXlat(hPalette, FindStandardXlat(XLAT_BLEND25BLUE),  RGB(0, 0, 255), 75, 25);
	CalcBlendXlat(hPalette, FindStandardXlat(XLAT_BLEND50RED),   RGB(255, 0, 0), 50, 50);
	CalcBlendXlat(hPalette, FindStandardXlat(XLAT_BLEND50GREEN), RGB(0, 255, 0), 50, 50);
	CalcBlendXlat(hPalette, FindStandardXlat(XLAT_BLEND50BLUE),  RGB(0, 0, 255), 50, 50);
	CalcBlendXlat(hPalette, FindStandardXlat(XLAT_BLEND75RED),   RGB(255, 0, 0), 25, 75);
	CalcBlendXlat(hPalette, FindStandardXlat(XLAT_BLEND75GREEN), RGB(0, 255, 0), 25, 75);
	CalcBlendXlat(hPalette, FindStandardXlat(XLAT_BLEND75BLUE),  RGB(0, 0, 255), 25, 75);

	CalcFilterXlat(hPalette, FindStandardXlat(XLAT_FILTERRED),   RGB(255, 0, 0));
	CalcFilterXlat(hPalette, FindStandardXlat(XLAT_FILTERGREEN), RGB(0, 255, 0));
	CalcFilterXlat(hPalette, FindStandardXlat(XLAT_FILTERBLUE),  RGB(0, 0, 255));

	CalcFilterXlat(hPalette, FindStandardXlat(XLAT_FILTERWHITE90), RGB(240, 240, 240));
	CalcFilterXlat(hPalette, FindStandardXlat(XLAT_FILTERWHITE80), RGB(220, 220, 220));
	CalcFilterXlat(hPalette, FindStandardXlat(XLAT_FILTERWHITE70), RGB(200, 200, 200));

	CalcFilterXlat(hPalette, FindStandardXlat(XLAT_FILTERBRIGHT1), RGB(253, 253, 253));
	CalcFilterXlat(hPalette, FindStandardXlat(XLAT_FILTERBRIGHT2), RGB(250, 250, 250));
	CalcFilterXlat(hPalette, FindStandardXlat(XLAT_FILTERBRIGHT3), RGB(245, 245, 245));

	CalcRampXlat(hPalette, FindStandardXlat(XLAT_GRAYTORED), 0xF0, 0xD0, 0x10, TRUE);
	CalcRampXlat(hPalette, FindStandardXlat(XLAT_GRAYTOORANGE), 0xF0, 0xD0, 0x50, TRUE);
	CalcRampXlat(hPalette, FindStandardXlat(XLAT_GRAYTODGREEN), 0xF0, 0xD0, 0x60, TRUE);
	CalcRampXlat(hPalette, FindStandardXlat(XLAT_GRAYTOBGREEN), 0xF0, 0xD0, 0x70, TRUE);
	CalcRampXlat(hPalette, FindStandardXlat(XLAT_GRAYTOSKY), 0xF0, 0xD0, 0x80, TRUE);
	CalcRampXlat(hPalette, FindStandardXlat(XLAT_GRAYTODBLUE), 0xF0, 0xD0, 0x90, TRUE);
	CalcRampXlat(hPalette, FindStandardXlat(XLAT_GRAYTOPURPLE), 0xF0, 0xD0, 0xA0, TRUE);
	CalcRampXlat(hPalette, FindStandardXlat(XLAT_GRAYTOGOLD), 0xF0, 0xD0, 0xC0, TRUE);
	CalcRampXlat(hPalette, FindStandardXlat(XLAT_GRAYTOBBLUE), 0xF0, 0xD0, 0xE0, TRUE);

	CalcHalfRampXlat(hPalette, FindStandardXlat(XLAT_GRAYTOLRED), 0xF0, 0xD0, 0x10, 0, TRUE);
	CalcHalfRampXlat(hPalette, FindStandardXlat(XLAT_GRAYTOLORANGE), 0xF0, 0xD0, 0x50, 0, TRUE);
	CalcHalfRampXlat(hPalette, FindStandardXlat(XLAT_GRAYTOLGREEN), 0xF0, 0xD0, 0x60, 0, TRUE);
	CalcHalfRampXlat(hPalette, FindStandardXlat(XLAT_GRAYTOLBGREEN), 0xF0, 0xD0, 0x70, 0, TRUE);
	CalcHalfRampXlat(hPalette, FindStandardXlat(XLAT_GRAYTOLSKY), 0xF0, 0xD0, 0x80, 0, TRUE);
	CalcHalfRampXlat(hPalette, FindStandardXlat(XLAT_GRAYTOLBBLUE), 0xF0, 0xD0, 0x90, 0, TRUE);
	CalcHalfRampXlat(hPalette, FindStandardXlat(XLAT_GRAYTOLPURPLE), 0xF0, 0xD0, 0xA0, 0, TRUE);
	CalcHalfRampXlat(hPalette, FindStandardXlat(XLAT_GRAYTOLGOLD), 0xF0, 0xD0, 0xC0, 0, TRUE);
	CalcHalfRampXlat(hPalette, FindStandardXlat(XLAT_GRAYTOLBLUE), 0xF0, 0xD0, 0xE0, 0, TRUE);

	CalcHalfRampXlat(hPalette, FindStandardXlat(XLAT_GRAYTOKRED), 0xF0, 0xD0, 0x10, 8, TRUE);
	CalcHalfRampXlat(hPalette, FindStandardXlat(XLAT_GRAYTOKORANGE), 0xF0, 0xD0, 0x50, 8, TRUE);
	CalcHalfRampXlat(hPalette, FindStandardXlat(XLAT_GRAYTOKGREEN), 0xF0, 0xD0, 0x60, 8, TRUE);
	CalcHalfRampXlat(hPalette, FindStandardXlat(XLAT_GRAYTOKBGREEN), 0xF0, 0xD0, 0x70, 8, TRUE);
	CalcHalfRampXlat(hPalette, FindStandardXlat(XLAT_GRAYTOKSKY), 0xF0, 0xD0, 0x80, 8, TRUE);
	CalcHalfRampXlat(hPalette, FindStandardXlat(XLAT_GRAYTOKBBLUE), 0xF0, 0xD0, 0x90, 8, TRUE);
	CalcHalfRampXlat(hPalette, FindStandardXlat(XLAT_GRAYTOKPURPLE), 0xF0, 0xD0, 0xA0, 8, TRUE);
	CalcHalfRampXlat(hPalette, FindStandardXlat(XLAT_GRAYTOKGOLD), 0xF0, 0xD0, 0xC0, 8, TRUE);
	CalcHalfRampXlat(hPalette, FindStandardXlat(XLAT_GRAYTOKBLUE), 0xF0, 0xD0, 0xE0, 8, TRUE);
	CalcHalfRampXlat(hPalette, FindStandardXlat(XLAT_GRAYTOKGRAY), 0xF0, 0xD0, 0xD0, 8, TRUE);

	// Black has lowered light level
	pXlat = FindStandardXlat(XLAT_GRAYTOBLACK);
	for (i = 0; i < NUM_COLORS; i++)
	   pXlat->entry[i] = i;
	CalcLightXlat(hPalette, pXlat, 0xF0, 0xD0, LIGHT_LEVELS / 6);

	CalcRampMoveXlat(hPalette, FindStandardXlat(XLAT_GRAYTOOLDHAIR1), 0xF0, 0xD0, oldhair1_indexes, TRUE);
	CalcRampMoveXlat(hPalette, FindStandardXlat(XLAT_GRAYTOOLDHAIR2), 0xF0, 0xD0, oldhair2_indexes, TRUE);
	CalcRampMoveXlat(hPalette, FindStandardXlat(XLAT_GRAYTOOLDHAIR3), 0xF0, 0xD0, oldhair3_indexes, TRUE);
	CalcRampMoveXlat(hPalette, FindStandardXlat(XLAT_GRAYTOPLATBLOND), 0xF0, 0xD0, platblond_indexes, TRUE);

    // Mostly obsolete.
	CalcRampXlat(hPalette, FindStandardXlat(XLAT_GRAYTOSKIN1), 0xF0, 0xD0, 0x20, TRUE);
	CalcRampXlat(hPalette, FindStandardXlat(XLAT_GRAYTOSKIN2), 0xF0, 0xD0, 0x30, TRUE);
	CalcHalfRampXlat(hPalette, FindStandardXlat(XLAT_GRAYTOSKIN3), 0xF0, 0xD0, 0x30, 5, TRUE);
	CalcRampXlat(hPalette, FindStandardXlat(XLAT_GRAYTOSKIN4), 0xF0, 0xD0, 0x40, TRUE);
	CalcHalfRampXlat(hPalette, FindStandardXlat(XLAT_GRAYTOSKIN5), 0xF0, 0xD0, 0x40, 8, TRUE);

    // Skin to healthy shades.
	CalcRampMoveXlat(hPalette, FindStandardXlat(XLAT_DBLUETOSKIN1), 0xF0, 0x90, skin1_indexes, TRUE);
	CalcRampMoveXlat(hPalette, FindStandardXlat(XLAT_DBLUETOSKIN2), 0xF0, 0x90, skin2_indexes, TRUE);
	CalcRampXlat(hPalette, FindStandardXlat(XLAT_DBLUETOSKIN3), 0xF0, 0x90, 0x30, TRUE);
	CalcRampXlat(hPalette, FindStandardXlat(XLAT_DBLUETOSKIN4), 0xF0, 0x90, 0x40, TRUE);

    // Skin to sickly effects.
	CalcRampXlat(hPalette, FindStandardXlat(XLAT_DBLUETOGRAY), 0xF0, 0x90, 0xD0, TRUE);
	CalcRampXlat(hPalette, FindStandardXlat(XLAT_DBLUETOLBLUE), 0xF0, 0x90, 0x80, TRUE);
	CalcRampMoveXlat(hPalette, FindStandardXlat(XLAT_DBLUETOSICKGREEN), 0xF0, 0x90, green_skin_indexes, TRUE);
	CalcRampMoveXlat(hPalette, FindStandardXlat(XLAT_DBLUETOSICKYELLOW), 0xF0, 0x90, yellow_skin_indexes, TRUE);

    // Custom forked color:  grey->red while blue->grey.
	CalcRampXlat(hPalette, FindStandardXlat(XLAT_DBLUETOASHEN), 0xF0, 0x90, 0xD0, TRUE);
	CalcRampXlat(hPalette, FindStandardXlat(XLAT_DBLUETOASHEN), 0xF0, 0xD0, 0x10, FALSE);

    // Custom forked color:  red->dgreen while blue->skin1.5,2,3.
	CalcHalfRampXlat(hPalette, FindStandardXlat(XLAT_REDTODGREEN1), 0xF0, 0x10, 0x70, 8, TRUE);
	CalcRampXlat(hPalette,     FindStandardXlat(XLAT_REDTODGREEN1), 0xF0, 0x90, 0x20, FALSE);
	CalcHalfRampXlat(hPalette, FindStandardXlat(XLAT_REDTODGREEN2), 0xF0, 0x10, 0x70, 8, TRUE);
	CalcRampXlat(hPalette,     FindStandardXlat(XLAT_REDTODGREEN2), 0xF0, 0x90, 0x30, FALSE);
	CalcHalfRampXlat(hPalette, FindStandardXlat(XLAT_REDTODGREEN3), 0xF0, 0x10, 0x70, 8, TRUE);
	CalcRampXlat(hPalette,     FindStandardXlat(XLAT_REDTODGREEN3), 0xF0, 0x90, 0x40, FALSE);

    // Custom forked color:  red->black while blue->skin1.5,3,4.
	CalcHalfRampXlat(hPalette, FindStandardXlat(XLAT_REDTOBLACK1), 0xF0, 0x10, 0xD0, 8, TRUE);
	CalcRampXlat(hPalette,     FindStandardXlat(XLAT_REDTOBLACK1), 0xF0, 0x90, 0x20, FALSE);
	CalcHalfRampXlat(hPalette, FindStandardXlat(XLAT_REDTOBLACK2), 0xF0, 0x10, 0xD0, 8, TRUE);
	CalcRampXlat(hPalette,     FindStandardXlat(XLAT_REDTOBLACK2), 0xF0, 0x90, 0x30, FALSE);
	CalcHalfRampXlat(hPalette, FindStandardXlat(XLAT_REDTOBLACK3), 0xF0, 0x10, 0xD0, 8, TRUE);
	CalcRampXlat(hPalette,     FindStandardXlat(XLAT_REDTOBLACK3), 0xF0, 0x90, 0x40, FALSE);

	CalcRampXlat(hPalette, FindStandardXlat(XLAT_PURPLETOLBLUE), 0xF0, 0xA0, 0x80, TRUE);
	CalcRampXlat(hPalette, FindStandardXlat(XLAT_PURPLETOBRED), 0xF0, 0xA0, 0x10, TRUE);
	CalcRampXlat(hPalette, FindStandardXlat(XLAT_PURPLETOGREEN), 0xF0, 0xA0, 0x70, TRUE);
	CalcRampXlat(hPalette, FindStandardXlat(XLAT_PURPLETOYELLOW), 0xF0, 0xA0, 0x50, TRUE);

//  Too slow. Done by makepal.exe which writes pal.c now.
//	CalcBlendBiXlat(hPalette, FindStandardBiXlat(BIXLAT_BLEND50), 50, 50);

	// Each of these scrolls the ramps up or down.
	CalcRampOffsetXlat(hPalette, FindStandardXlat(XLAT_RAMPUP1), +1);
	CalcRampOffsetXlat(hPalette, FindStandardXlat(XLAT_RAMPUP2), +2);
	CalcRampOffsetXlat(hPalette, FindStandardXlat(XLAT_RAMPDOWN2), -2);
	CalcRampOffsetXlat(hPalette, FindStandardXlat(XLAT_RAMPDOWN1), -1);

	// Do the guild shield colors.
	nRamps = (sizeof(ramps)/sizeof(ramps[0]));
	for (i = 0; i < nRamps; i++)
	{
		for (j = 0; j < nRamps; j++)
		{
			pXlat = FindStandardXlat(XLAT_GUILDCOLOR_BASE + i*nRamps + j);
			*pXlat = *pIdentity;

			// swap red to ramp i
			CalcRampXlat(hPalette, pXlat, 0xF0, 0x10/*red*/, ramps[i], FALSE);

			// swap blue to ramp j
			CalcRampXlat(hPalette, pXlat, 0xF0, 0x90/*blu*/, ramps[j], FALSE);
		}
	}
}