diff options
-rw-r--r-- | engines/mads/animation.cpp | 5 | ||||
-rw-r--r-- | engines/mads/assets.h | 1 | ||||
-rw-r--r-- | engines/mads/messages.cpp | 8 | ||||
-rw-r--r-- | engines/mads/msurface.cpp | 13 | ||||
-rw-r--r-- | engines/mads/nebular/nebular_scenes8.cpp | 6 | ||||
-rw-r--r-- | engines/mads/resources.cpp | 3 | ||||
-rw-r--r-- | engines/mads/scene.cpp | 4 | ||||
-rw-r--r-- | engines/mads/scene_data.cpp | 3 | ||||
-rw-r--r-- | engines/mads/scene_data.h | 5 | ||||
-rw-r--r-- | engines/mads/sequence.cpp | 21 | ||||
-rw-r--r-- | engines/mads/sprites.cpp | 57 | ||||
-rw-r--r-- | engines/mads/sprites.h | 4 |
12 files changed, 63 insertions, 67 deletions
diff --git a/engines/mads/animation.cpp b/engines/mads/animation.cpp index ec043a3079..b5ebb2c278 100644 --- a/engines/mads/animation.cpp +++ b/engines/mads/animation.cpp @@ -347,7 +347,7 @@ void Animation::loadFrame(int frameNumber) { } if (drawFrame(spriteSet, pt, frameNumber)) - error("proc1 failure"); + error("drawFrame failure"); } bool Animation::drawFrame(SpriteAsset &spriteSet, const Common::Point &pt, int frameNumber) { @@ -373,8 +373,7 @@ void Animation::loadInterface(InterfaceSurface &interfaceSurface, MSurface &dept if (palAnimData) palAnimData->clear(); - } - else { + } else { // Original has useless code here } } diff --git a/engines/mads/assets.h b/engines/mads/assets.h index 31d46881ff..b4856605eb 100644 --- a/engines/mads/assets.h +++ b/engines/mads/assets.h @@ -78,6 +78,7 @@ private: public: SpriteSetCharInfo *_charInfo; int _usageIndex; + Common::Point _pos; public: /** * Constructor diff --git a/engines/mads/messages.cpp b/engines/mads/messages.cpp index 8bdbe72512..dcac541cf8 100644 --- a/engines/mads/messages.cpp +++ b/engines/mads/messages.cpp @@ -340,10 +340,10 @@ int TextDisplayList::add(int xp, int yp, uint fontColor, int charSpacing, void TextDisplayList::setDirtyAreas() { Scene &scene = _vm->_game->_scene; - for (uint idx = 0, dirtyIdx = DIRTY_AREAS_TEXT_DISPLAY_IDX; dirtyIdx < size(); ++idx, ++dirtyIdx) { - if (((*this)[idx]._expire >= 0) || !(*this)[idx]._active) + for (uint idx = 0, dirtyIdx = SPRITE_SLOTS_MAX_SIZE; dirtyIdx < size(); ++idx, ++dirtyIdx) { + if (((*this)[idx]._expire >= 0) || !(*this)[idx]._active) { scene._dirtyAreas[dirtyIdx]._active = false; - else { + } else { scene._dirtyAreas[dirtyIdx]._textActive = true; scene._dirtyAreas[dirtyIdx].setTextDisplay(&(*this)[idx]); } @@ -353,7 +353,7 @@ void TextDisplayList::setDirtyAreas() { void TextDisplayList::setDirtyAreas2() { Scene &scene = _vm->_game->_scene; - for (uint idx = 0, dirtyIdx = DIRTY_AREAS_TEXT_DISPLAY_IDX; idx < size(); ++idx, ++dirtyIdx) { + for (uint idx = 0, dirtyIdx = SPRITE_SLOTS_MAX_SIZE; idx < size(); ++idx, ++dirtyIdx) { if ((*this)[idx]._active && ((*this)[idx]._expire >= 0)) { scene._dirtyAreas[dirtyIdx].setTextDisplay(&(*this)[idx]); scene._dirtyAreas[dirtyIdx]._textActive = ((*this)[idx]._expire <= 0) ? 0 : 1; diff --git a/engines/mads/msurface.cpp b/engines/mads/msurface.cpp index f21836eb09..2adb3e5b81 100644 --- a/engines/mads/msurface.cpp +++ b/engines/mads/msurface.cpp @@ -230,10 +230,10 @@ void MSurface::copyFrom(MSurface *src, const Common::Rect &srcBounds, byte *destPtr = (byte *)pixels + (destY * getWidth()) + destX; for (int rowCtr = 0; rowCtr < copyRect.height(); ++rowCtr) { - if (transparentColor == -1) + if (transparentColor == -1) { // No transparency, so copy line over Common::copy(srcPtr, srcPtr + copyRect.width(), destPtr); - else { + } else { // Copy each byte one at a time checking for the transparency color for (int xCtr = 0; xCtr < copyRect.width(); ++xCtr) if (srcPtr[xCtr] != transparentColor) destPtr[xCtr] = srcPtr[xCtr]; @@ -311,8 +311,7 @@ void MSurface::copyFrom(MSurface *src, const Common::Point &destPos, int depth, distCtr += scale; if (distCtr < 100) { lineDist[distIndex] = false; - } - else { + } else { lineDist[distIndex] = true; distCtr -= 100; @@ -425,8 +424,7 @@ void MSurface::scrollX(int xAmount) { Common::copy(srcP + xSize, srcP + this->w, srcP); // Move buffered area to the end of the line Common::copy(&buffer[0], &buffer[xSize], srcP + this->w - xSize); - } - else { + } else { // Copy area to be overwritten Common::copy_backward(srcP + this->w - xSize, srcP + this->w, &buffer[80]); // Shift the remainder of the line over the given area @@ -459,8 +457,7 @@ void MSurface::scrollY(int yAmount) { pixelsP + (pitch * this->h)); // Transfer the buffered lines top the top of the screen Common::copy(tempData, tempData + blockSize, pixelsP); - } - else { + } else { // Buffer the lines to be overwritten Common::copy(pixelsP, pixelsP + (pitch * ySize), tempData); // Vertically shift all the lines diff --git a/engines/mads/nebular/nebular_scenes8.cpp b/engines/mads/nebular/nebular_scenes8.cpp index ac3f029cc9..2d123660bd 100644 --- a/engines/mads/nebular/nebular_scenes8.cpp +++ b/engines/mads/nebular/nebular_scenes8.cpp @@ -106,8 +106,7 @@ void Scene804::enter() { _globals._spriteIndexes[19] = _scene->_sequences.startCycle( _globals._spriteIndexes[4], 0, 1); _scene->_sequences.addTimer(60, 100); - } - else { + } else { _globals._spriteIndexes[20] = _scene->_sequences.startCycle( _globals._spriteIndexes[5], false, 1); _globals._spriteIndexes[21] = _scene->_sequences.startReverseCycle( @@ -115,8 +114,7 @@ void Scene804::enter() { _scene->_sequences.addTimer(160, 70); _game._player._stepEnabled = false; } - } - else { + } else { if (_globals[167] == 0) { _globals._spriteIndexes[22] = _scene->_sequences.startCycle( _globals._spriteIndexes[7], false, 1); diff --git a/engines/mads/resources.cpp b/engines/mads/resources.cpp index f85d5ce340..140a34749a 100644 --- a/engines/mads/resources.cpp +++ b/engines/mads/resources.cpp @@ -308,8 +308,7 @@ Common::String Resources::formatName(int prefix, char asciiCh, int id, EXTTYPE e Common::String result; if (prefix <= 0) { result = "*"; - } - else { + } else { result = Common::String::format("%s%.3d", (prefix < 100) ? "*SC" : "*RM", prefix); } diff --git a/engines/mads/scene.cpp b/engines/mads/scene.cpp index 15577971e0..ebc35f0f27 100644 --- a/engines/mads/scene.cpp +++ b/engines/mads/scene.cpp @@ -170,7 +170,9 @@ void Scene::loadScene(int sceneId, const Common::String &prefix, bool palFlag) { _interfaceY = MADS_SCENE_HEIGHT; _spritesCount = _sprites.size(); - warning("TODO: sub_1EA80 / showMouse"); + _interface.setup(_screenObjects._v832EC); + + warning("TODO: showMouse"); warning("TODO: inventory_anim_allocate"); } diff --git a/engines/mads/scene_data.cpp b/engines/mads/scene_data.cpp index 18a3b6ceda..d2071e3ba5 100644 --- a/engines/mads/scene_data.cpp +++ b/engines/mads/scene_data.cpp @@ -199,8 +199,7 @@ void DirtyArea::setSpriteSlot(const SpriteSlot *spriteSlot) { if (spriteSlot->_scale == -1) { width = frame->w; height = frame->h; - } - else { + } else { width = frame->w * spriteSlot->_scale / 100; height = frame->h * spriteSlot->_scale / 100; diff --git a/engines/mads/scene_data.h b/engines/mads/scene_data.h index 67393fc75d..b8b2056c12 100644 --- a/engines/mads/scene_data.h +++ b/engines/mads/scene_data.h @@ -46,8 +46,9 @@ class SpriteSlot; #define DEPTH_BANDS_SIZE 15 #define MAX_ROUTE_NODES 22 -#define DIRTY_AREAS_SIZE 90 -#define DIRTY_AREAS_TEXT_DISPLAY_IDX 50 +#define SPRITE_SLOTS_MAX_SIZE 50 +#define TEXT_DISPLAY_MAX_SIZE 40 +#define DIRTY_AREAS_SIZE (SPRITE_SLOTS_MAX_SIZE + TEXT_DISPLAY_MAX_SIZE) enum ScrCategory { CAT_NONE = 0, CAT_ACTION = 1, CAT_INV_LIST = 2, CAT_INV_VOCAB = 3, diff --git a/engines/mads/sequence.cpp b/engines/mads/sequence.cpp index f703ce3b3a..dfb3d6fbcd 100644 --- a/engines/mads/sequence.cpp +++ b/engines/mads/sequence.cpp @@ -184,7 +184,7 @@ void SequenceList::setSpriteSlot(int seqIndex, SpriteSlot &spriteSlot) { if (!timerEntry._nonFixed) { spriteSlot._position = timerEntry._msgPos; } else { - spriteSlot._position = spriteSet.getFrame(timerEntry._frameIndex - 1)->_pos; + spriteSlot._position = spriteSet._pos; } } @@ -243,15 +243,13 @@ bool SequenceList::loadSprites(int seqIndex) { if (seqEntry._animType == ANIMTYPE_CYCLED) { // back to the starting frame (cyclic) seqEntry._frameIndex = seqEntry._frameStart; - } - else { + } else { // Switch into reverse mode seqEntry._frameIndex = seqEntry._numSprites - 1; seqEntry._frameInc = -1; } } - } - else { + } else { // Currently in reverse mode and moved past starting frame result = true; @@ -260,8 +258,7 @@ bool SequenceList::loadSprites(int seqIndex) { // Switch back to forward direction again seqEntry._frameIndex = seqEntry._frameStart + 1; seqEntry._frameInc = 1; - } - else { + } else { // Otherwise reset back to last sprite for further reverse animating seqEntry._frameIndex = seqEntry._numSprites; } @@ -271,8 +268,7 @@ bool SequenceList::loadSprites(int seqIndex) { if (--seqEntry._triggerCountdown == 0) seqEntry._doneFlag = true; } - } - else { + } else { // Out of sprite display slots, so mark entry as done seqEntry._doneFlag = true; } @@ -402,8 +398,9 @@ void SequenceList::setMsgPosition(int seqIndex, const Common::Point &pt) { int SequenceList::addSpriteCycle(int srcSpriteIdx, bool flipped, int numTicks, int triggerCountdown, int timeoutTicks, int extraTicks) { Scene &scene = _vm->_game->_scene; MSprite *spriteFrame = scene._sprites[srcSpriteIdx]->getFrame(0); - int depth = scene._depthSurface.getDepth(Common::Point(spriteFrame->_pos.x + - (spriteFrame->w / 2), spriteFrame->_pos.y + (spriteFrame->h / 2))); + int depth = scene._depthSurface.getDepth(Common::Point( + spriteFrame->_offset.x + (spriteFrame->w / 2), + spriteFrame->_offset.y + (spriteFrame->h / 2))); return add(srcSpriteIdx, flipped, 1, triggerCountdown, timeoutTicks, extraTicks, numTicks, 0, 0, true, 100, depth - 1, 1, ANIMTYPE_CYCLED, 0, 0); @@ -422,7 +419,7 @@ int SequenceList::startReverseCycle(int srcSpriteIndex, bool flipped, int numTic SpriteAsset *sprites = _vm->_game->_scene._sprites[srcSpriteIndex]; MSprite *frame = sprites->getFrame(0); int depth = _vm->_game->_scene._depthSurface.getDepth(Common::Point( - frame->_pos.x + frame->w / 2, frame->_pos.y + frame->h / 2)); + frame->_offset.x + frame->w / 2, frame->_offset.y + frame->h / 2)); return add(srcSpriteIndex, flipped, 1, triggerCountdown, timeoutTicks, extraTicks, numTicks, 0, 0, true, 100, depth - 1, 1, ANIMTYPE_REVERSIBLE, 0, 0); diff --git a/engines/mads/sprites.cpp b/engines/mads/sprites.cpp index 398c1c91b7..228071af23 100644 --- a/engines/mads/sprites.cpp +++ b/engines/mads/sprites.cpp @@ -235,31 +235,33 @@ void SpriteSlots::drawBackground() { Scene &scene = _vm->_game->_scene; // Initial draw loop for any active sprites in the background - for (uint i = 0; i < scene._spriteSlots.size(); ++i) { - if (scene._spriteSlots[i]._spriteType >= ST_NONE) { - scene._dirtyAreas[i]._active = false; - } - else { - scene._dirtyAreas[i]._active = true; - scene._dirtyAreas[i].setSpriteSlot(&scene._spriteSlots[i]); + for (uint i = 0; i < size(); ++i) { + SpriteSlot &spriteSlot = (*this)[i]; + DirtyArea &dirtyArea = scene._dirtyAreas[i]; + + if (spriteSlot._spriteType >= ST_NONE) { + dirtyArea._active = false; + } else { + dirtyArea._active = true; + dirtyArea.setSpriteSlot(&spriteSlot); - SpriteAsset *asset = scene._sprites[scene._spriteSlots[i]._spritesIndex]; - MSprite *frame = asset->getFrame(scene._spriteSlots[i]._frameNumber); + SpriteAsset *asset = scene._sprites[spriteSlot._spritesIndex]; + MSprite *frame = asset->getFrame(spriteSlot._frameNumber); - if (scene._spriteSlots[i]._spriteType == ST_BACKGROUND) { - Common::Point pt = scene._spriteSlots[i]._position; - if (scene._spriteSlots[i]._scale != -1) { + if (spriteSlot._spriteType == ST_BACKGROUND) { + Common::Point pt = spriteSlot._position; + if (spriteSlot._scale != -1) { // Adjust the drawing position pt.x -= frame->w / 2; pt.y -= frame->h / 2; } - if (scene._spriteSlots[i]._depth <= 1) { - asset->draw(&scene._backgroundSurface, scene._spriteSlots[i]._frameNumber, pt); + if (spriteSlot._depth <= 1) { + asset->draw(&scene._backgroundSurface, spriteSlot._frameNumber, pt); } else if (scene._depthStyle == 0) { - asset->depthDraw(&scene._backgroundSurface, &scene._depthSurface, scene._spriteSlots[i]._frameNumber, - pt, scene._spriteSlots[i]._depth); + asset->depthDraw(&scene._backgroundSurface, &scene._depthSurface, spriteSlot._frameNumber, + pt, spriteSlot._depth); } else { error("Unsupported depth style"); } @@ -267,18 +269,20 @@ void SpriteSlots::drawBackground() { } } - // Mark any remaning dirty areas as inactive - for (uint i = scene._spriteSlots.size(); i < 50; ++i) + // Mark any remaning sprite slot dirty areas as inactive + for (uint i = size(); i < SPRITE_SLOTS_MAX_SIZE; ++i) scene._dirtyAreas[i]._active = false; // Flag any active text display - for (uint i = 50; i < scene._textDisplay.size(); ++i) { - TextDisplay &textDisplay = scene._textDisplay[i - 50]; - if (scene._textDisplay[i]._expire >= 0 || !textDisplay._active) { - scene._dirtyAreas[i]._active = false; + for (uint i = 0; i < scene._textDisplay.size(); ++i) { + TextDisplay &textDisplay = scene._textDisplay[i]; + DirtyArea &dirtyArea = scene._dirtyAreas[i + SPRITE_SLOTS_MAX_SIZE]; + + if (textDisplay._expire >= 0 || !textDisplay._active) { + dirtyArea._active = false; } else { - scene._dirtyAreas[i]._active = true; - scene._dirtyAreas[i].setTextDisplay(&textDisplay); + dirtyArea._active = true; + dirtyArea.setTextDisplay(&textDisplay); } } } @@ -289,8 +293,9 @@ void SpriteSlots::drawForeground(MSurface *s) { // Get a list of sprite object depths for active objects for (uint i = 0; i < size(); ++i) { - if ((*this)[i]._spriteType >= ST_NONE) { - DepthEntry rec(16 - (*this)[i]._depth, i); + SpriteSlot &spriteSlot = (*this)[i]; + if (spriteSlot._spriteType >= ST_NONE) { + DepthEntry rec(16 - spriteSlot._depth, i); depthList.push_back(rec); } } diff --git a/engines/mads/sprites.h b/engines/mads/sprites.h index 848aa1a488..603518a923 100644 --- a/engines/mads/sprites.h +++ b/engines/mads/sprites.h @@ -52,8 +52,7 @@ typedef struct { uint8 depth; // depth code for source (0 if no depth processing) } DrawRequestX; -typedef struct -{ +typedef struct { uint32 Pack; uint32 Stream; long hot_x; @@ -111,7 +110,6 @@ public: int widthVal, int heightVal, bool decodeRle = true, uint8 encodingVal = 0); virtual ~MSprite(); - Common::Point _pos; Common::Point _offset; uint8 _encoding; |