svn-id: r17740
This commit is contained in:
Gregory Montoir 2005-04-21 19:27:17 +00:00
parent 97749a934e
commit 8d76879849
4 changed files with 24 additions and 52 deletions

View file

@ -1002,9 +1002,8 @@ protected:
uint8 *getHEPaletteIndex(int palSlot); uint8 *getHEPaletteIndex(int palSlot);
int getHEPaletteColor(int palSlot, int color); int getHEPaletteColor(int palSlot, int color);
int getPaletteUnk1(int palSlot, int arg_4, int arg_8, int start, int end); int getHEPaletteSimilarColor(int palSlot, int red, int green, int start, int end);
int getPaletteUnk2(int palSlot, int unk1, int unk2); int getHEPaletteColorComponent(int palSlot, int color, int component);
void setHEPaletteColor(int palSlot, uint8 color, uint8 r, uint8 g, uint8 b); void setHEPaletteColor(int palSlot, uint8 color, uint8 r, uint8 g, uint8 b);
void setHEPaletteFromPtr(int palSlot, const uint8 *palData); void setHEPaletteFromPtr(int palSlot, const uint8 *palData);
void setHEPaletteFromCostume(int palSlot, int resId); void setHEPaletteFromCostume(int palSlot, int resId);

View file

@ -78,64 +78,37 @@ uint8 *ScummEngine_v90he::getHEPaletteIndex(int palSlot) {
} }
} }
int ScummEngine_v90he::getPaletteUnk1(int palSlot, int arg_4, int arg_8, int start, int end) { int ScummEngine_v90he::getHEPaletteSimilarColor(int palSlot, int red, int green, int start, int end) {
assert(palSlot >= 1 && palSlot <= _numPalettes); assert(palSlot >= 1 && palSlot <= _numPalettes);
assert(start >= 1 && start <= 255); assert(start >= 1 && start <= 255);
assert(end >= 1 && end <= 255); assert(end >= 1 && end <= 255);
int eax, edi, edp, edx, esi; uint8 *pal = _hePalettes + palSlot * 1024 + start * 3;
int sum, bestitem, bestsum;
uint8 *palPtr;
palPtr = _hePalettes + palSlot * 1024 + start * 3; int bestsum = 0xFFFFFFFF;
int bestitem = start;
bestsum = 0xFFFFFFFF;
bestitem = start;
edp = arg_8;
for (int i = start; i <= end; i++) { for (int i = start; i <= end; i++) {
esi = arg_4; int dr = red - pal[0];
int dg = green - pal[1];
edi = *palPtr++; int sum = dr * dr + dg * dg * 2;
edx = *palPtr;
esi -= edi;
eax = edx;
edi = edp;
eax = -eax;
eax <<= 31;
eax -= edx;
edi -= edx;
eax += edp;
edx = esi;
eax *= edi;
edx *= esi;
sum = edx + eax * 2;
palPtr += 2;
if (sum < bestsum) {
if (sum == 0) { if (sum == 0) {
return i; return i;
} }
if (sum < bestsum) {
bestsum = sum; bestsum = sum;
bestitem = i; bestitem = i;
} }
pal += 3;
} }
return bestitem; return bestitem;
} }
int ScummEngine_v90he::getPaletteUnk2(int palSlot, int unk1, int unk2) { int ScummEngine_v90he::getHEPaletteColorComponent(int palSlot, int color, int component) {
assert(palSlot >= 1 && palSlot <= _numPalettes); assert(palSlot >= 1 && palSlot <= _numPalettes);
assert(unk1 >= 1 && unk1 <= 255); assert(color >= 1 && color <= 255);
return _hePalettes[palSlot * 1024 + unk1 * 3 + unk2 / 3]; return _hePalettes[palSlot * 1024 + color * 3 + component % 3];
} }
int ScummEngine_v90he::getHEPaletteColor(int palSlot, int color) { int ScummEngine_v90he::getHEPaletteColor(int palSlot, int color) {

View file

@ -2397,7 +2397,7 @@ void ScummEngine_v100he::o100_getPaletteData() {
case 13: case 13:
c = pop(); c = pop();
b = pop(); b = pop();
push(getPaletteUnk2(1, b, c)); push(getHEPaletteColorComponent(1, b, c));
break; break;
case 20: case 20:
color = pop(); color = pop();
@ -2411,7 +2411,7 @@ void ScummEngine_v100he::o100_getPaletteData() {
pop(); pop();
c = pop(); c = pop();
b = pop(); b = pop();
push(getPaletteUnk1(palSlot, b, c, d, e)); push(getHEPaletteSimilarColor(palSlot, b, c, d, e));
break; break;
case 53: case 53:
pop(); pop();
@ -2421,13 +2421,13 @@ void ScummEngine_v100he::o100_getPaletteData() {
b = pop(); b = pop();
b = MAX(0, b); b = MAX(0, b);
b = MIN(b, 255); b = MIN(b, 255);
push(getPaletteUnk1(1, b, c, 10, 245)); push(getHEPaletteSimilarColor(1, b, c, 10, 245));
break; break;
case 73: case 73:
c = pop(); c = pop();
b = pop(); b = pop();
palSlot = pop(); palSlot = pop();
push(getPaletteUnk2(palSlot, b, c)); push(getHEPaletteColorComponent(palSlot, b, c));
break; break;
default: default:
error("o100_getPaletteData: Unknown case %d", subOp); error("o100_getPaletteData: Unknown case %d", subOp);

View file

@ -2270,13 +2270,13 @@ void ScummEngine_v90he::o90_getPaletteData() {
pop(); pop();
c = pop(); c = pop();
b = pop(); b = pop();
push(getPaletteUnk1(palSlot, b, c, d, e)); push(getHEPaletteSimilarColor(palSlot, b, c, d, e));
break; break;
case 7: case 7:
c = pop(); c = pop();
b = pop(); b = pop();
palSlot = pop(); palSlot = pop();
push(getPaletteUnk2(palSlot, b, c)); push(getHEPaletteColorComponent(palSlot, b, c));
break; break;
case 21: case 21:
color = pop(); color = pop();
@ -2286,7 +2286,7 @@ void ScummEngine_v90he::o90_getPaletteData() {
case 87: case 87:
c = pop(); c = pop();
b = pop(); b = pop();
push(getPaletteUnk2(1, b, c)); push(getHEPaletteColorComponent(1, b, c));
break; break;
case 172: case 172:
pop(); pop();
@ -2296,7 +2296,7 @@ void ScummEngine_v90he::o90_getPaletteData() {
b = pop(); b = pop();
b = MAX(0, b); b = MAX(0, b);
b = MIN(b, 255); b = MIN(b, 255);
push(getPaletteUnk1(1, b, c, 10, 245)); push(getHEPaletteSimilarColor(1, b, c, 10, 245));
break; break;
default: default:
error("o90_getPaletteData: Unknown case %d", subOp); error("o90_getPaletteData: Unknown case %d", subOp);