aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTravis Howell2007-04-15 00:12:09 +0000
committerTravis Howell2007-04-15 00:12:09 +0000
commitfe6b6323fa5f89e240b7face2d00a8abeccce7f4 (patch)
tree288be761572044e38c666a330a9588805e64ffdf
parent2aeb84f12a8c5f585399be8a4b4087f45ce27e13 (diff)
downloadscummvm-rg350-fe6b6323fa5f89e240b7face2d00a8abeccce7f4.tar.gz
scummvm-rg350-fe6b6323fa5f89e240b7face2d00a8abeccce7f4.tar.bz2
scummvm-rg350-fe6b6323fa5f89e240b7face2d00a8abeccce7f4.zip
Cleanup.
svn-id: r26478
-rw-r--r--engines/agos/agos.h12
-rw-r--r--engines/agos/draw.cpp76
-rw-r--r--engines/agos/gfx.cpp20
-rw-r--r--engines/agos/script_e1.cpp2
-rw-r--r--engines/agos/vga.cpp100
-rw-r--r--engines/agos/vga.h2
6 files changed, 96 insertions, 116 deletions
diff --git a/engines/agos/agos.h b/engines/agos/agos.h
index 6479ac2ae9..8016add841 100644
--- a/engines/agos/agos.h
+++ b/engines/agos/agos.h
@@ -1271,12 +1271,14 @@ public:
void opp_restartClock();
protected:
- bool drawImages_clip(VC10_state *state);
+ bool drawImage_clip(VC10_state *state);
- void drawImages(VC10_state *state);
- void drawImages_Amiga(VC10_state *state);
- void drawImages_Simon(VC10_state *state);
- void drawImages_Feeble(VC10_state *state);
+ void drawImage_init(VC10_state *state);
+
+ void drawImage(VC10_state *state);
+ void drawImage_Amiga(VC10_state *state);
+ void drawImage_Simon(VC10_state *state);
+ void drawImage_Feeble(VC10_state *state);
void scaleClip(int16 h, int16 w, int16 y, int16 x, int16 scrollY);
void horizontalScroll(VC10_state *state);
diff --git a/engines/agos/draw.cpp b/engines/agos/draw.cpp
index 4b548d64ba..578ea74dcc 100644
--- a/engines/agos/draw.cpp
+++ b/engines/agos/draw.cpp
@@ -27,6 +27,7 @@
#include "agos/agos.h"
#include "agos/intern.h"
+#include "agos/vga.h"
namespace AGOS {
@@ -53,8 +54,7 @@ byte *AGOSEngine::getScaleBuf() {
void AGOSEngine::animateSprites() {
VgaSprite *vsp;
VgaPointersEntry *vpe;
- const byte *vc_ptr_org = _vcPtr;
- uint16 params[5]; // parameters to vc10
+ VC10_state state;
if (_paletteFlag == 2)
_paletteFlag = 1;
@@ -84,25 +84,13 @@ void AGOSEngine::animateSprites() {
_vgaCurSpriteId = vsp->id;
_vgaCurSpritePriority = vsp->priority;
- params[0] = readUint16Wrapper(&vsp->image);
- if (getGameType() == GType_ELVIRA1 || getGameType() == GType_ELVIRA2 || getGameType() == GType_WW) {
- params[1] = readUint16Wrapper(&vsp->x);
- params[2] = readUint16Wrapper(&vsp->y);
- params[3] = READ_BE_UINT16(&vsp->flags);
- } else {
- params[1] = readUint16Wrapper(&vsp->palette);
- params[2] = readUint16Wrapper(&vsp->x);
- params[3] = readUint16Wrapper(&vsp->y);
-
- if (getGameType() == GType_SIMON1) {
- params[4] = READ_BE_UINT16(&vsp->flags);
- } else {
- *(byte *)(&params[4]) = (byte)vsp->flags;
- }
- }
+ state.image = vsp->image;
+ state.palette = (vsp->palette & 15) * 16;
+ state.x = vsp->x;
+ state.y = vsp->y;
+ state.flags = vsp->flags;
- _vcPtr = (const byte *)params;
- vc10_draw();
+ drawImage_init(&state);
vsp++;
}
@@ -111,14 +99,12 @@ void AGOSEngine::animateSprites() {
memset(_backBuf, 0, _screenWidth * _screenHeight);
_updateScreen = true;
- _vcPtr = vc_ptr_org;
}
void AGOSEngine::animateSpritesDebug() {
VgaSprite *vsp;
VgaPointersEntry *vpe;
- const byte *vc_ptr_org = _vcPtr;
- uint16 params[5]; // parameters to vc10_draw
+ VC10_state state;
if (_paletteFlag == 2)
_paletteFlag = 1;
@@ -137,38 +123,25 @@ void AGOSEngine::animateSpritesDebug() {
if (vsp->image)
printf("id:%5d image:%3d base-color:%3d x:%3d y:%3d flags:%x\n",
vsp->id, vsp->image, vsp->palette, vsp->x, vsp->y, vsp->flags);
- params[0] = readUint16Wrapper(&vsp->image);
- if (getGameType() == GType_ELVIRA1 || getGameType() == GType_ELVIRA2 || getGameType() == GType_WW) {
- params[1] = readUint16Wrapper(&vsp->x);
- params[2] = readUint16Wrapper(&vsp->y);
- params[3] = READ_BE_UINT16(&vsp->flags);
- } else {
- params[1] = readUint16Wrapper(&vsp->palette);
- params[2] = readUint16Wrapper(&vsp->x);
- params[3] = readUint16Wrapper(&vsp->y);
-
- if (getGameType() == GType_SIMON1) {
- params[4] = READ_BE_UINT16(&vsp->flags);
- } else {
- *(byte *)(&params[4]) = (byte)vsp->flags;
- }
- }
- _vcPtr = (const byte *)params;
- vc10_draw();
+ state.image = vsp->image;
+ state.palette = (vsp->palette & 15) * 16;
+ state.x = vsp->x;
+ state.y = vsp->y;
+ state.flags = vsp->flags;
+
+ drawImage_init(&state);
vsp++;
}
_updateScreen = true;
- _vcPtr = vc_ptr_org;
}
void AGOSEngine::animateSpritesByY() {
VgaSprite *vsp;
VgaPointersEntry *vpe;
- const byte *vc_ptr_org = _vcPtr;
- uint16 params[5]; // parameters to vc10
+ VC10_state state;
int16 spriteTable[180][2];
byte *src;
@@ -216,6 +189,7 @@ void AGOSEngine::animateSpritesByY() {
}
vsp = &_vgaSprites[slot];
+
vsp->windowNum &= 0x7FFF;
vpe = &_vgaBufferPointers[vsp->zoneNum];
@@ -226,18 +200,16 @@ void AGOSEngine::animateSpritesByY() {
_vgaCurSpriteId = vsp->id;
_vgaCurSpritePriority = vsp->priority;
- params[0] = readUint16Wrapper(&vsp->image);
- params[1] = readUint16Wrapper(&vsp->palette);
- params[2] = readUint16Wrapper(&vsp->x);
- params[3] = readUint16Wrapper(&vsp->y);
- *(byte *)(&params[4]) = (byte)vsp->flags;
+ state.image = vsp->image;
+ state.palette = 0;
+ state.x = vsp->x;
+ state.y = vsp->y;
+ state.flags = vsp->flags;
- _vcPtr = (const byte *)params;
- vc10_draw();
+ drawImage_init(&state);
}
_updateScreen = true;
- _vcPtr = vc_ptr_org;
}
void AGOSEngine::displayBoxStars() {
diff --git a/engines/agos/gfx.cpp b/engines/agos/gfx.cpp
index 211005385e..887b42acf0 100644
--- a/engines/agos/gfx.cpp
+++ b/engines/agos/gfx.cpp
@@ -166,7 +166,7 @@ void AGOSEngine::decodeRow(byte *dst, const byte *src, int width) {
}
}
-bool AGOSEngine::drawImages_clip(VC10_state *state) {
+bool AGOSEngine::drawImage_clip(VC10_state *state) {
const uint16 *vlut;
uint maxWidth, maxHeight;
int cur;
@@ -224,7 +224,7 @@ bool AGOSEngine::drawImages_clip(VC10_state *state) {
return 1;
}
-void AGOSEngine::drawImages_Feeble(VC10_state *state) {
+void AGOSEngine::drawImage_Feeble(VC10_state *state) {
if (state->flags & kDFCompressed) {
if (state->flags & kDFScaled) {
state->surf_addr = getScaleBuf();
@@ -293,7 +293,7 @@ void AGOSEngine::drawImages_Feeble(VC10_state *state) {
scaleClip(_scaleHeight, _scaleWidth, _scaleY, _scaleX, _scaleY + _scrollY);
}
} else {
- if (drawImages_clip(state) == 0)
+ if (drawImage_clip(state) == 0)
return;
state->surf_addr += state->x + state->y * state->surf_pitch;
@@ -359,7 +359,7 @@ void AGOSEngine::drawImages_Feeble(VC10_state *state) {
}
}
} else {
- if (drawImages_clip(state) == 0)
+ if (drawImage_clip(state) == 0)
return;
state->surf_addr += state->x + state->y * state->surf_pitch;
@@ -387,10 +387,10 @@ void AGOSEngine::drawImages_Feeble(VC10_state *state) {
}
}
-void AGOSEngine::drawImages_Simon(VC10_state *state) {
+void AGOSEngine::drawImage_Simon(VC10_state *state) {
const uint16 *vlut = &_videoWindows[_windowNum * 4];
- if (drawImages_clip(state) == 0)
+ if (drawImage_clip(state) == 0)
return;
uint xoffs, yoffs;
@@ -583,12 +583,12 @@ void AGOSEngine::drawImages_Simon(VC10_state *state) {
}
}
-void AGOSEngine::drawImages_Amiga(VC10_state *state) {
+void AGOSEngine::drawImage_Amiga(VC10_state *state) {
uint8 *dst;
const byte *src;
const uint16 *vlut = &_videoWindows[_windowNum * 4];
- if (drawImages_clip(state) == 0)
+ if (drawImage_clip(state) == 0)
return;
uint xoffs = ((vlut[0] - _videoWindows[16]) * 2 + state->x) * 8;
@@ -638,10 +638,10 @@ void AGOSEngine::drawImages_Amiga(VC10_state *state) {
}
}
-void AGOSEngine::drawImages(VC10_state *state) {
+void AGOSEngine::drawImage(VC10_state *state) {
const uint16 *vlut = &_videoWindows[_windowNum * 4];
- if (drawImages_clip(state) == 0)
+ if (drawImage_clip(state) == 0)
return;
uint xoffs, yoffs;
diff --git a/engines/agos/script_e1.cpp b/engines/agos/script_e1.cpp
index 3cbc168c80..90eed10ae2 100644
--- a/engines/agos/script_e1.cpp
+++ b/engines/agos/script_e1.cpp
@@ -990,7 +990,7 @@ void AGOSEngine::printScroll() {
state.surf_addr = getBackBuf();
state.surf_pitch = _dxSurfacePitch;
- drawImages(&state);
+ drawImage(&state);
}
} // End of namespace AGOS
diff --git a/engines/agos/vga.cpp b/engines/agos/vga.cpp
index 8948aaaba0..a16b91606a 100644
--- a/engines/agos/vga.cpp
+++ b/engines/agos/vga.cpp
@@ -578,30 +578,20 @@ byte *AGOSEngine::vc10_flip(const byte *src, uint w, uint h) {
}
void AGOSEngine::vc10_draw() {
- byte *p2;
- uint width, height;
- byte flags;
VC10_state state;
state.image = (int16)vcReadNextWord();
- if (state.image == 0)
- return;
+ state.palette = 0;
if (getGameType() == GType_FF || getGameType() == GType_PP) {
- state.palette = (_vcPtr[0] * 16);
_vcPtr += 2;
} else if (getGameType() == GType_SIMON1 || getGameType() == GType_SIMON2) {
state.palette = (_vcPtr[1] * 16);
_vcPtr += 2;
- } else {
- state.palette = 0;
}
state.x = (int16)vcReadNextWord();
- state.x -= _scrollX;
-
state.y = (int16)vcReadNextWord();
- state.y -= _scrollY;
if (getGameType() == GType_SIMON2 || getGameType() == GType_FF || getGameType() == GType_PP) {
state.flags = vcReadNextByte();
@@ -609,11 +599,25 @@ void AGOSEngine::vc10_draw() {
state.flags = vcReadNextWord();
}
- if (state.image < 0)
- state.image = vcReadVar(-state.image);
+ drawImage_init(&state);
+}
+
+void AGOSEngine::drawImage_init(VC10_state *state) {
+ if (state->image == 0)
+ return;
+
+ byte *p2;
+ uint width, height;
+ byte flags;
+
+ state->x -= _scrollX;
+ state->y -= _scrollY;
+
+ if (state->image < 0)
+ state->image = vcReadVar(-state->image);
- p2 = _curVgaFile2 + state.image * 8;
- state.depack_src = _curVgaFile2 + readUint32Wrapper(p2);
+ p2 = _curVgaFile2 + state->image * 8;
+ state->depack_src = _curVgaFile2 + readUint32Wrapper(p2);
if (getGameType() == GType_FF || getGameType() == GType_PP) {
width = READ_LE_UINT16(p2 + 6);
height = READ_LE_UINT16(p2 + 4) & 0x7FFF;
@@ -628,74 +632,74 @@ void AGOSEngine::vc10_draw() {
return;
if (_dumpImages)
- dumpSingleBitmap(_vgaCurZoneNum, state.image, state.depack_src, width, height,
- state.palette);
- state.width = state.draw_width = width; /* cl */
- state.height = state.draw_height = height; /* ch */
+ dumpSingleBitmap(_vgaCurZoneNum, state->image, state->depack_src, width, height,
+ state->palette);
+ state->width = state->draw_width = width; /* cl */
+ state->height = state->draw_height = height; /* ch */
- state.depack_cont = -0x80;
+ state->depack_cont = -0x80;
- state.x_skip = 0; /* colums to skip = bh */
- state.y_skip = 0; /* rows to skip = bl */
+ state->x_skip = 0; /* colums to skip = bh */
+ state->y_skip = 0; /* rows to skip = bl */
if (getFeatures() & GF_PLANAR) {
- state.depack_src = convertImage(&state, ((flags & 0x80) != 0));
+ state->depack_src = convertImage(state, ((flags & 0x80) != 0));
// converted planar clip is already uncompressed
- if (state.flags & kDFCompressedFlip) {
- state.flags &= ~kDFCompressedFlip;
- state.flags |= kDFFlip;
+ if (state->flags & kDFCompressedFlip) {
+ state->flags &= ~kDFCompressedFlip;
+ state->flags |= kDFFlip;
}
- if (state.flags & kDFCompressed) {
- state.flags &= ~kDFCompressed;
+ if (state->flags & kDFCompressed) {
+ state->flags &= ~kDFCompressed;
}
} else if (getGameType() == GType_FF || getGameType() == GType_PP) {
if (flags & 0x80) {
- state.flags |= kDFCompressed;
+ state->flags |= kDFCompressed;
}
} else {
- if (flags & 0x80 && !(state.flags & kDFCompressedFlip)) {
- if (state.flags & kDFFlip) {
- state.flags &= ~kDFFlip;
- state.flags |= kDFCompressedFlip;
+ if (flags & 0x80 && !(state->flags & kDFCompressedFlip)) {
+ if (state->flags & kDFFlip) {
+ state->flags &= ~kDFFlip;
+ state->flags |= kDFCompressedFlip;
} else {
- state.flags |= kDFCompressed;
+ state->flags |= kDFCompressed;
}
}
}
uint maxWidth = (getGameType() == GType_FF || getGameType() == GType_PP) ? 640 : 20;
if ((getGameType() == GType_SIMON2 || getGameType() == GType_FF) && width > maxWidth) {
- horizontalScroll(&state);
+ horizontalScroll(state);
return;
}
if (getGameType() == GType_FF && height > 480) {
- verticalScroll(&state);
+ verticalScroll(state);
return;
}
if (getGameType() != GType_FF && getGameType() != GType_PP) {
- if (state.flags & kDFCompressedFlip) {
- state.depack_src = vc10_uncompressFlip(state.depack_src, width, height);
- } else if (state.flags & kDFFlip) {
- state.depack_src = vc10_flip(state.depack_src, width, height);
+ if (state->flags & kDFCompressedFlip) {
+ state->depack_src = vc10_uncompressFlip(state->depack_src, width, height);
+ } else if (state->flags & kDFFlip) {
+ state->depack_src = vc10_flip(state->depack_src, width, height);
}
}
- state.surf2_addr = getFrontBuf();
- state.surf2_pitch = _dxSurfacePitch;
+ state->surf2_addr = getFrontBuf();
+ state->surf2_pitch = _dxSurfacePitch;
- state.surf_addr = getBackBuf();
- state.surf_pitch = _dxSurfacePitch;
+ state->surf_addr = getBackBuf();
+ state->surf_pitch = _dxSurfacePitch;
if (getGameType() == GType_FF || getGameType() == GType_PP) {
- drawImages_Feeble(&state);
+ drawImage_Feeble(state);
} else if (getFeatures() & GF_32COLOR) {
- drawImages_Amiga(&state);
+ drawImage_Amiga(state);
} else if (getGameType() == GType_SIMON1 || getGameType() == GType_SIMON2) {
- drawImages_Simon(&state);
+ drawImage_Simon(state);
} else {
- drawImages(&state);
+ drawImage(state);
}
}
diff --git a/engines/agos/vga.h b/engines/agos/vga.h
index fb577e0601..ab20de4543 100644
--- a/engines/agos/vga.h
+++ b/engines/agos/vga.h
@@ -134,6 +134,8 @@ struct VC10_state {
int8 depack_cont;
byte depack_dest[480];
+
+ VC10_state() { memset(this, 0, sizeof(*this)); }
};
byte *vc10_depackColumn(VC10_state *vs);