#include #include #define FADESPEED 4 extern UWORD SpritePal[]; UWORD fad[8*4]; // temp bkg palette for fade time UWORD sfad[8*4]; // temp sprite palette for fade time UBYTE tempe, tempf, tempg; UWORD red, green, blue; // fadeout temp colors WORD redi,greeni,bluei; // fadein temp colors UWORD *CurPal; void fadeout() { for (tempe = 0; tempe < 32; tempe++) { fad[tempe] = CurPal[tempe]; // put curent bkg palette to temp bkg fade palette } for (tempe = 0; tempe < 32; tempe++) { sfad[tempe] = SpritePal[tempe];// put curent sprite palette to temp sprite fade palette } for (tempg = 0; tempg < 32; tempg += FADESPEED) // do 32/FADESPEED times coz it's a bigest posible value of color { for (tempf = 0; tempf < 4; tempf++) // do 4 times per palette { for (tempe = 0; tempe < 8; tempe++) // do 8 times coz there is 8 paletes { /* fadeout bkg */ red = (fad[tempe*4+tempf] & 0x1FU); if(red >= FADESPEED) red-=FADESPEED; else red = 0; green = ((fad[tempe*4+tempf] & 0x3E0U)/32); if(green >= FADESPEED) green-=FADESPEED; else green = 0; blue = (((fad[tempe*4+tempf] & 0x7C00U)/32)/32); if(blue >= FADESPEED) blue-=FADESPEED; else blue = 0; fad[tempe*4+tempf] = (blue*32*32)|(green*32)|red; set_bkg_palette_entry( tempe, tempf, fad[tempe*4+tempf]); /* fadeout sprites */ red = (sfad[tempe*4+tempf] & 0x1FU); if(red >= FADESPEED) red-=FADESPEED; else red = 0; green = ((sfad[tempe*4+tempf] & 0x3E0U)/32); if(green >= FADESPEED) green-=FADESPEED; else green = 0; blue = (((sfad[tempe*4+tempf] & 0x7C00U)/32)/32); if(blue >= FADESPEED) blue-=FADESPEED; else blue = 0; sfad[tempe*4+tempf] = (blue*32*32)|(green*32)|red; set_sprite_palette_entry( tempe, tempf, sfad[tempe*4+tempf]); } } } } void fadein() { for (tempg = 0; tempg < 32; tempg+=FADESPEED) { for (tempf = 0; tempf < 4; tempf++) { for (tempe = 0; tempe < 8; tempe++) { /* fadein bkg */ redi = (((CurPal[tempe*4+tempf] & 0x1FU) - 31) + tempg); if (redi >= 0) { red = redi; } else red = 0; if (red >= (31 - FADESPEED)) { red = 31; } greeni = ((((CurPal[tempe*4+tempf] & 0x3E0U)/32) - 31) + tempg); if (greeni >= 0) { green = greeni; } else green = 0; if (green >= (31 - FADESPEED)) { green = 31; } bluei = (((((CurPal[tempe*4+tempf] & 0x7C00U)/32)/32) - 31) + tempg); if (bluei >= 0) { blue = bluei; } else blue = 0; if (blue >= (31 - FADESPEED)) { blue = 31; } set_bkg_palette_entry( tempe, tempf, (blue*32*32)|(green*32)|red); /* fadein sprites */ redi = (SpritePal[tempe*4+tempf] & 0x1FU) - 31 + tempg; if (redi >= 0) red = redi; else red = 0; if (red > 31 - FADESPEED) red = 31; greeni = ((SpritePal[tempe*4+tempf] & 0x3E0U)/32) - 31 + tempg; if (greeni >= 0) green = greeni; else green = 0; if (green > 31 - FADESPEED) green = 31; bluei = (((SpritePal[tempe*4+tempf] & 0x7C00U)/32)/32) - 31 + tempg; if (bluei >= 0) blue = bluei; else blue = 0; if (blue > 31 - FADESPEED) blue = 31; set_sprite_palette_entry( tempe, tempf, (blue*32*32)|(green*32)|red); } } } }