Ticket #4302: ihnm-palette.diff
File ihnm-palette.diff, 1.7 KB (added by , 15 years ago) |
---|
-
engines/saga/gfx.cpp
406 406 int new_entry; 407 407 byte *ppal; 408 408 PalEntry *palE; 409 double fpercent;410 409 411 410 from = CLIP<int16>(from, 0, 256); 412 411 to = CLIP<int16>(to, 0, 256); … … 420 419 percent += 1 / x; 421 420 } 422 421 423 // Exponential fade424 422 percent = percent > 1.0 ? 1.0 : percent; 425 fpercent = percent * percent;426 427 423 if (from > to) 428 fpercent = 1.0 - fpercent;424 percent = 1.0 - percent; 429 425 426 byte fadePal[PAL_ENTRIES * 4]; 427 430 428 // Use the correct percentage change per frame for each palette entry 431 for (i = 0, ppal = _currentPal; i < PAL_ENTRIES; i++, ppal += 4) { 432 if (i < start || i >= start + numColors) 433 palE = &_globalPalette[i]; 434 else 435 palE = &srcPal[i]; 429 for (i = start, ppal = fadePal + start * 4; i < start + numColors; i++, ppal += 4) { 430 palE = &srcPal[i]; 436 431 437 new_entry = (int)(palE->red * fpercent);432 new_entry = (int)(palE->red * percent); 438 433 439 434 if (new_entry < 0) { 440 435 ppal[0] = 0; … … 442 437 ppal[0] = (byte) new_entry; 443 438 } 444 439 445 new_entry = (int)(palE->green * fpercent);440 new_entry = (int)(palE->green * percent); 446 441 447 442 if (new_entry < 0) { 448 443 ppal[1] = 0; … … 450 445 ppal[1] = (byte) new_entry; 451 446 } 452 447 453 new_entry = (int)(palE->blue * fpercent);448 new_entry = (int)(palE->blue * percent); 454 449 455 450 if (new_entry < 0) { 456 451 ppal[2] = 0; … … 461 456 } 462 457 463 458 // Color 0 should always be black in IHNM 464 memset(& _currentPal[0 * 4], 0, 4);459 memset(&fadePal[0 * 4], 0, 4); 465 460 466 _system->setPalette( _currentPal, 0, PAL_ENTRIES);461 _system->setPalette(&fadePal[start * 4], start, numColors); 467 462 } 468 463 469 464 #endif