diff options
Diffstat (limited to 'gfx.cpp')
-rw-r--r-- | gfx.cpp | 65 |
1 files changed, 65 insertions, 0 deletions
@@ -2639,68 +2639,133 @@ void Scumm::drawBomp(BompDrawData * bd) CHECK_HEAP; } + void Scumm::createSpecialPalette(int16 a, int16 b, int16 c, int16 d, int16 e, int16 colorMin, int16 colorMax) + { + byte *palPtr; + byte *curPtr; + byte *searchPtr; + + byte colorComp1; + byte colorComp2; + byte colorComp3; + + byte searchComp1; + byte searchComp2; + byte searchComp3; + + short int bestResult; + short int currentResult; + byte currentIndex; + + int i; + int j; + + palPtr = getPalettePtr(); + + for(i=colorMin;i<colorMax;i++) + _proc_special_palette[i]=i; + + curPtr = palPtr + colorMin*3; + + for(i=colorMin;i<colorMax;i++) + { + /* colorComp1=((((*curPtr++)>>2)*c)>>8)&0x7F; + colorComp2=((((*curPtr++)>>2)*d)>>8)&0x7F; + colorComp3=((((*curPtr++)>>2)*e)>>8)&0x7F;*/ + + /* Yazoo: I can't get the right formula, so I made one that just work fine with SamnMax flashlight */ + + colorComp1=(*curPtr++)+10; + colorComp2=(*curPtr++)+10; + colorComp3=(*curPtr++)+10; + + + searchPtr = palPtr; + bestResult = 0x7FFF; + currentIndex = 0; + + for(j=0;j<256;j++) + { + searchComp1 = (*searchPtr++); + searchComp2 = (*searchPtr++); + searchComp3 = (*searchPtr++); + + currentResult = abs(searchComp1-colorComp1) + abs(searchComp2-colorComp2) + abs(searchComp3-colorComp3); + + if(currentResult<bestResult) + if(currentIndex >= a && currentIndex <= b) + { + _proc_special_palette[i]=currentIndex; + bestResult=currentResult; + } + + currentIndex++; + } + + } + }
\ No newline at end of file |