diff options
| author | Colin Snover | 2016-12-02 22:30:01 -0600 |
|---|---|---|
| committer | Colin Snover | 2017-03-27 19:42:31 -0500 |
| commit | 6600fb77eabcfcea540dd4220c8b5b20dd70d759 (patch) | |
| tree | b9eee01965939549049a516dfb56ec085261b1d0 /engines/sci | |
| parent | 31daa956d62b39429cb6638ed3fb549ac488833a (diff) | |
| download | scummvm-rg350-6600fb77eabcfcea540dd4220c8b5b20dd70d759.tar.gz scummvm-rg350-6600fb77eabcfcea540dd4220c8b5b20dd70d759.tar.bz2 scummvm-rg350-6600fb77eabcfcea540dd4220c8b5b20dd70d759.zip | |
SCI: Use containers in GfxView and remove some SCI32 code
Diffstat (limited to 'engines/sci')
| -rw-r--r-- | engines/sci/graphics/view.cpp | 55 | ||||
| -rw-r--r-- | engines/sci/graphics/view.h | 4 |
2 files changed, 24 insertions, 35 deletions
diff --git a/engines/sci/graphics/view.cpp b/engines/sci/graphics/view.cpp index 2dc7775345..ca029a7775 100644 --- a/engines/sci/graphics/view.cpp +++ b/engines/sci/graphics/view.cpp @@ -110,13 +110,13 @@ void GfxView::initData(GuiResourceId resourceId) { uint32 palOffset = 0; uint16 headerSize = 0; uint16 loopSize = 0, celSize = 0; - int loopNo, celNo, EGAmapNr; + uint loopNo, celNo, EGAmapNr; byte seekEntry; bool isEGA = false; bool isCompressed = true; ViewType curViewType = _resMan->getViewType(); - _loopCount = 0; + _loop.resize(0); _embeddedPal = false; _EGAmapping.clear(); _sci2ScaleRes = SCI_VIEW_NATIVERES_NONE; @@ -146,7 +146,7 @@ void GfxView::initData(GuiResourceId resourceId) { case kViewVga: // View-format SCI1 // LoopCount:WORD MirrorMask:WORD Version:WORD PaletteOffset:WORD LoopOffset0:WORD LoopOffset1:WORD... - _loopCount = _resource->getUint8At(0); + _loop.resize(_resource->getUint8At(0)); // bit 0x8000 of _resourceData[1] means palette is set if (_resource->getUint8At(1) & 0x40) isCompressed = false; @@ -183,18 +183,16 @@ void GfxView::initData(GuiResourceId resourceId) { } } - _loop.resize(_loopCount); - for (loopNo = 0; loopNo < _loopCount; loopNo++) { + for (loopNo = 0; loopNo < _loop.size(); loopNo++) { loopData = _resource->subspan(_resource->getUint16LEAt(8 + loopNo * 2)); // CelCount:WORD Unknown:WORD CelOffset0:WORD CelOffset1:WORD... celCount = loopData.getUint16LEAt(0); - _loop[loopNo].celCount = celCount; + _loop[loopNo].cel.resize(celCount); _loop[loopNo].mirrorFlag = mirrorBits & 1 ? true : false; mirrorBits >>= 1; // read cel info - _loop[loopNo].cel.resize(celCount); for (celNo = 0; celNo < celCount; celNo++) { celOffset = loopData.getUint16LEAt(4 + celNo * 2); celData = _resource->subspan(celOffset); @@ -244,21 +242,14 @@ void GfxView::initData(GuiResourceId resourceId) { } break; - case kViewVga11: // View-format SCI1.1+ + case kViewVga11: { // View-format SCI1.1+ // HeaderSize:WORD LoopCount:BYTE Flags:BYTE Version:WORD Unknown:WORD PaletteOffset:WORD headerSize = _resource->getUint16SEAt(0) + 2; // headerSize is not part of the header, so it's added assert(headerSize >= 16); - _loopCount = _resource->getUint8At(2); - assert(_loopCount); + const uint8 loopCount = _resource->getUint8At(2); + assert(loopCount); palOffset = _resource->getUint32SEAt(8); - // For SCI32, this is a scale flag - if (getSciVersion() >= SCI_VERSION_2) { - _sci2ScaleRes = (Sci32ViewNativeResolution)_resource->getUint8At(5); - if (_screen->getUpscaledHires() == GFX_SCREEN_UPSCALED_DISABLED) - _sci2ScaleRes = SCI_VIEW_NATIVERES_NONE; - } - // flags is actually a bit-mask // it seems it was only used for some early sci1.1 games (or even just laura bow 2) // later interpreters dont support it at all anymore @@ -289,13 +280,13 @@ void GfxView::initData(GuiResourceId resourceId) { _embeddedPal = true; } - _loop.resize(_loopCount); - for (loopNo = 0; loopNo < _loopCount; loopNo++) { + _loop.resize(loopCount); + for (loopNo = 0; loopNo < loopCount; loopNo++) { loopData = _resource->subspan(headerSize + (loopNo * loopSize)); seekEntry = loopData[0]; if (seekEntry != 255) { - if (seekEntry >= _loopCount) + if (seekEntry >= loopCount) error("Bad loop-pointer in sci 1.1 view"); _loop[loopNo].mirrorFlag = true; loopData = _resource->subspan(headerSize + (seekEntry * loopSize)); @@ -304,12 +295,11 @@ void GfxView::initData(GuiResourceId resourceId) { } celCount = loopData[2]; - _loop[loopNo].celCount = celCount; + _loop[loopNo].cel.resize(celCount); const uint32 celDataOffset = loopData.getUint32SEAt(12); // read cel info - _loop[loopNo].cel.resize(celCount); for (celNo = 0; celNo < celCount; celNo++) { celData = _resource->subspan(celDataOffset + celNo * celSize, celSize); @@ -338,6 +328,7 @@ void GfxView::initData(GuiResourceId resourceId) { } } break; + } default: error("ViewType was not detected, can't continue"); @@ -351,7 +342,7 @@ void GfxView::initData(GuiResourceId resourceId) { // View 995, Loop 13, Cel 0 = "TEXT" // View 995, Loop 13, Cel 1 = "SPEECH" // View 995, Loop 13, Cel 2 = "DUAL" (<- our injected view) - if ((g_sci->isCD()) && (resourceId == 995)) { + if (g_sci->isCD() && resourceId == 995) { // security checks if (_loop.size() >= 14 && _loop[13].cel.size() == 2 && @@ -373,7 +364,7 @@ void GfxView::initData(GuiResourceId resourceId) { // View 947, Loop 9, Cel 1 = "TEXT" (pressed) // View 947, Loop 12, Cel 0 = "DUAL" (not pressed) (<- our injected view) // View 947, Loop 12, Cel 1 = "DUAL" (pressed) (<- our injected view) - if ((g_sci->isCD()) && (resourceId == 947)) { + if (g_sci->isCD() && resourceId == 947) { // security checks if (_loop.size() == 12 && _loop[8].cel.size() == 2 && @@ -400,24 +391,24 @@ GuiResourceId GfxView::getResourceId() const { } int16 GfxView::getWidth(int16 loopNo, int16 celNo) const { - return _loopCount ? getCelInfo(loopNo, celNo)->width : 0; + return _loop.size() ? getCelInfo(loopNo, celNo)->width : 0; } int16 GfxView::getHeight(int16 loopNo, int16 celNo) const { - return _loopCount ? getCelInfo(loopNo, celNo)->height : 0; + return _loop.size() ? getCelInfo(loopNo, celNo)->height : 0; } const CelInfo *GfxView::getCelInfo(int16 loopNo, int16 celNo) const { - assert(_loopCount); - loopNo = CLIP<int16>(loopNo, 0, _loopCount - 1); - celNo = CLIP<int16>(celNo, 0, _loop[loopNo].celCount - 1); + assert(_loop.size()); + loopNo = CLIP<int16>(loopNo, 0, _loop.size() - 1); + celNo = CLIP<int16>(celNo, 0, _loop[loopNo].cel.size() - 1); return &_loop[loopNo].cel[celNo]; } uint16 GfxView::getCelCount(int16 loopNo) const { - assert(_loopCount); - loopNo = CLIP<int16>(loopNo, 0, _loopCount - 1); - return _loop[loopNo].celCount; + assert(_loop.size()); + loopNo = CLIP<int16>(loopNo, 0, _loop.size() - 1); + return _loop[loopNo].cel.size(); } Palette *GfxView::getPalette() { diff --git a/engines/sci/graphics/view.h b/engines/sci/graphics/view.h index 808e203682..d4ec1670bd 100644 --- a/engines/sci/graphics/view.h +++ b/engines/sci/graphics/view.h @@ -48,7 +48,6 @@ struct CelInfo { struct LoopInfo { bool mirrorFlag; - uint16 celCount; Common::Array<CelInfo> cel; }; @@ -80,7 +79,7 @@ public: const SciSpan<const byte> &getBitmap(int16 loopNo, int16 celNo); void draw(const Common::Rect &rect, const Common::Rect &clipRect, const Common::Rect &clipRectTranslated, int16 loopNo, int16 celNo, byte priority, uint16 EGAmappingNr, bool upscaledHires); void drawScaled(const Common::Rect &rect, const Common::Rect &clipRect, const Common::Rect &clipRectTranslated, int16 loopNo, int16 celNo, byte priority, int16 scaleX, int16 scaleY); - uint16 getLoopCount() const { return _loopCount; } + uint16 getLoopCount() const { return _loop.size(); } uint16 getCelCount(int16 loopNo) const; Palette *getPalette(); @@ -103,7 +102,6 @@ private: GuiResourceId _resourceId; Resource *_resource; - uint16 _loopCount; Common::Array<LoopInfo> _loop; bool _embeddedPal; Palette _viewPalette; |
