added processWizImage mode 8 ; this breaks footdemo, feel free to disable

svn-id: r16945
This commit is contained in:
Gregory Montoir 2005-02-27 02:55:13 +00:00
parent 4cb4f662c8
commit 5eec97c24c
5 changed files with 74 additions and 7 deletions

1
TODO
View File

@ -262,7 +262,6 @@ SCUMM
- Add support for SBNG sound resources for songs (Used in ff2-demo/freddi2/pajama)
- Add support for wizImage compression types 2/3 (For freddicove)
- Add support for processWizImage mode 6 (For lost/smaller)
- Add support for processWizImage mode 8 (For freddicove/bb2demo/footdemo)
- Add support for processWizImage mode 9 (For freddicove/bb2demo/footdemo)
- Add support for additional drawWizImage flags (cyx)
- Add shadows support for akos codecs in HE90+ games, uses XMAP resources.

View File

@ -878,6 +878,7 @@ protected:
void drawWizComplexPolygon(int resnum, int state, int po_x, int po_y, int arg14, int angle, int zoom, const Common::Rect *r);
void displayWizComplexImage(const WizParameters *params);
void createWizEmptyImage(const WizParameters *params);
void processWizImage(const WizParameters *params);
int getWizImageStates(int resnum);
int isWizPixelNonTransparent(int restype, int resnum, int state, int x, int y, int flags);

View File

@ -480,11 +480,11 @@ void ScummEngine_v90he::o90_wizImageOps() {
switch (subOp) {
case -14: // HE99+
_wizParams.processFlags |= 0x2000;
_wizParams.processFlags |= kWPFUseDefImgWidth;
pop();
break;
case -13: // HE99+
_wizParams.processFlags |= 0x4000;
_wizParams.processFlags |= kWPFUseDefImgHeight;
pop();
break;
case 0:

View File

@ -1247,6 +1247,69 @@ void ScummEngine_v90he::displayWizComplexImage(const WizParameters *params) {
}
}
void ScummEngine_v90he::createWizEmptyImage(const WizParameters *params) {
int img_w = 640;
if (params->processFlags & kWPFUseDefImgWidth) {
img_w = params->resDefImgW;
}
int img_h = 480;
if (params->processFlags & kWPFUseDefImgHeight) {
img_h = params->resDefImgH;
}
int img_x = 0;
int img_y = 0;
if (params->processFlags & 1) {
img_x = params->img.x1;
img_y = params->img.y1;
}
const uint16 flags = 0xB;
int res_size = 0x1C;
if (flags & 1) {
res_size += 0x308;
}
if (flags & 2) {
res_size += 0x10;
}
if (flags & 8) {
res_size += 0x10C;
}
res_size += 8 + img_w * img_h;
uint8 *res_data = createResource(rtImage, params->img.resNum, res_size);
if (!res_data) {
VAR(119) = -1;
} else {
VAR(119) = 0;
WRITE_BE_UINT32(res_data, 'AWIZ'); res_data += 4;
WRITE_BE_UINT32(res_data, res_size); res_data += 4;
WRITE_BE_UINT32(res_data, 'WIZH'); res_data += 4;
WRITE_BE_UINT32(res_data, 0x14); res_data += 4;
WRITE_BE_UINT32(res_data, 0); res_data += 4;
WRITE_BE_UINT32(res_data, img_w); res_data += 4;
WRITE_BE_UINT32(res_data, img_h); res_data += 4;
if (flags & 1) {
WRITE_BE_UINT32(res_data, 'RGBS'); res_data += 4;
WRITE_BE_UINT32(res_data, 0x308); res_data += 4;
memcpy(res_data, _currentPalette, 0x300); res_data += 0x300;
}
if (flags & 2) {
WRITE_BE_UINT32(res_data, 'SPOT'); res_data += 4;
WRITE_BE_UINT32(res_data, 0x10); res_data += 4;
WRITE_BE_UINT32(res_data, img_x); res_data += 4;
WRITE_BE_UINT32(res_data, img_y); res_data += 4;
}
if (flags & 8) {
WRITE_BE_UINT32(res_data, 'RMAP'); res_data += 4;
WRITE_BE_UINT32(res_data, 0x10C); res_data += 4;
WRITE_BE_UINT32(res_data, 0); res_data += 4;
for (int i = 0; i < 0x100; ++i) {
*res_data++ = i;
}
}
WRITE_BE_UINT32(res_data, 'WIZD'); res_data += 4;
WRITE_BE_UINT32(res_data, img_w * img_h); res_data += 4;
}
}
void ScummEngine_v90he::processWizImage(const WizParameters *params) {
debug(1, "processWizImage: processMode %d", params->processMode);
switch (params->processMode) {
@ -1304,10 +1367,12 @@ void ScummEngine_v90he::processWizImage(const WizParameters *params) {
}
}
break;
case 8:
createWizEmptyImage(params);
break;
case 6:
// HE 99+
case 7:
case 8:
case 9:
case 10:
case 11:

View File

@ -64,8 +64,8 @@ struct WizParameters {
int unk_15C;
int unk_160;
int unk_164;
int unk_16C;
int unk_170;
int resDefImgW;
int resDefImgH;
int unk_174;
int unk_178;
uint8 remapColor[256];
@ -91,7 +91,9 @@ enum WizProcessFlags {
kWPFNewFlags = 0x20,
kWPFClipBox = 0x200,
kWPFNewState = 0x400,
kWPFUseFile = 0x800
kWPFUseFile = 0x800,
kWPFUseDefImgWidth = 0x2000,
kWPFUseDefImgHeight = 0x4000
};
struct Wiz {