diff options
author | Travis Howell | 2007-04-15 00:12:09 +0000 |
---|---|---|
committer | Travis Howell | 2007-04-15 00:12:09 +0000 |
commit | fe6b6323fa5f89e240b7face2d00a8abeccce7f4 (patch) | |
tree | 288be761572044e38c666a330a9588805e64ffdf | |
parent | 2aeb84f12a8c5f585399be8a4b4087f45ce27e13 (diff) | |
download | scummvm-rg350-fe6b6323fa5f89e240b7face2d00a8abeccce7f4.tar.gz scummvm-rg350-fe6b6323fa5f89e240b7face2d00a8abeccce7f4.tar.bz2 scummvm-rg350-fe6b6323fa5f89e240b7face2d00a8abeccce7f4.zip |
Cleanup.
svn-id: r26478
-rw-r--r-- | engines/agos/agos.h | 12 | ||||
-rw-r--r-- | engines/agos/draw.cpp | 76 | ||||
-rw-r--r-- | engines/agos/gfx.cpp | 20 | ||||
-rw-r--r-- | engines/agos/script_e1.cpp | 2 | ||||
-rw-r--r-- | engines/agos/vga.cpp | 100 | ||||
-rw-r--r-- | engines/agos/vga.h | 2 |
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 *)(¶ms[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 *)(¶ms[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 *)(¶ms[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); |