aboutsummaryrefslogtreecommitdiff
path: root/scumm
diff options
context:
space:
mode:
authorGregory Montoir2005-02-27 02:55:13 +0000
committerGregory Montoir2005-02-27 02:55:13 +0000
commit5eec97c24c310e4cce74caffcf7d4ebf8b300d34 (patch)
treebcb8d28f1324bdb676a2b0b4dfc8fc92455c8a22 /scumm
parent4cb4f662c87144c858d6129b3a593129d777b031 (diff)
downloadscummvm-rg350-5eec97c24c310e4cce74caffcf7d4ebf8b300d34.tar.gz
scummvm-rg350-5eec97c24c310e4cce74caffcf7d4ebf8b300d34.tar.bz2
scummvm-rg350-5eec97c24c310e4cce74caffcf7d4ebf8b300d34.zip
added processWizImage mode 8 ; this breaks footdemo, feel free to disable
svn-id: r16945
Diffstat (limited to 'scumm')
-rw-r--r--scumm/intern.h1
-rw-r--r--scumm/script_v90he.cpp4
-rw-r--r--scumm/wiz_he.cpp67
-rw-r--r--scumm/wiz_he.h8
4 files changed, 74 insertions, 6 deletions
diff --git a/scumm/intern.h b/scumm/intern.h
index 79475ca3ce..12ec701ce2 100644
--- a/scumm/intern.h
+++ b/scumm/intern.h
@@ -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);
diff --git a/scumm/script_v90he.cpp b/scumm/script_v90he.cpp
index 358f772f45..2266aa8432 100644
--- a/scumm/script_v90he.cpp
+++ b/scumm/script_v90he.cpp
@@ -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:
diff --git a/scumm/wiz_he.cpp b/scumm/wiz_he.cpp
index 6aa71527eb..b5e722c709 100644
--- a/scumm/wiz_he.cpp
+++ b/scumm/wiz_he.cpp
@@ -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:
diff --git a/scumm/wiz_he.h b/scumm/wiz_he.h
index 33181200f7..dd18ae903a 100644
--- a/scumm/wiz_he.h
+++ b/scumm/wiz_he.h
@@ -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 {