From c10ea611e8058958a606ff4478871e7909d882d9 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Wed, 28 Dec 2011 15:55:47 +0100 Subject: DREAMWEB: Rename getEitherAdCPP to getEitherAd, use obj type enums --- engines/dreamweb/dreamweb.h | 2 +- engines/dreamweb/object.cpp | 34 +++++++++++++++++----------------- engines/dreamweb/stubs.cpp | 6 +++--- 3 files changed, 21 insertions(+), 21 deletions(-) (limited to 'engines/dreamweb') diff --git a/engines/dreamweb/dreamweb.h b/engines/dreamweb/dreamweb.h index b7713352ff..2031e759cc 100644 --- a/engines/dreamweb/dreamweb.h +++ b/engines/dreamweb/dreamweb.h @@ -797,7 +797,7 @@ public: void findOrMake(uint8 index, uint8 value, uint8 type); DynObject *getFreeAd(uint8 index); DynObject *getExAd(uint8 index); - DynObject *getEitherAdCPP(); + DynObject *getEitherAd(); void *getAnyAdDir(uint8 index, uint8 flag); void showWatch(); void showTime(); diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index a9cbadcc2c..8e6436c100 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -105,9 +105,9 @@ void DreamWebEngine::obPicture() { } void DreamWebEngine::obIcons() { - uint8 value1, value2; - getAnyAd(&value1, &value2); - if (value1 != 0xff) { + uint8 slotSize, slotCount; + getAnyAd(&slotSize, &slotCount); + if (slotSize != 0xff) { // can open it showFrame(_icons2, 210, 1, 4, 0); } @@ -270,9 +270,9 @@ void DreamWebEngine::getBackFromOb() { byte DreamWebEngine::getOpenedSlotCount() { byte obj = _openedOb; switch (_openedType) { - case 4: + case kExObjectType: return getExAd(obj)->slotCount; - case 2: + case kFreeObjectType: return getFreeAd(obj)->slotCount; default: return getSetAd(obj)->slotCount; @@ -282,9 +282,9 @@ byte DreamWebEngine::getOpenedSlotCount() { byte DreamWebEngine::getOpenedSlotSize() { byte obj = _openedOb; switch (_openedType) { - case 4: + case kExObjectType: return getExAd(obj)->slotSize; - case 2: + case kFreeObjectType: return getFreeAd(obj)->slotSize; default: return getSetAd(obj)->slotSize; @@ -669,7 +669,7 @@ void DreamWebEngine::dropObject() { if (_mouseButton == _oldButton || !(_mouseButton & 1)) return; - if (isItWorn(getEitherAdCPP())) { + if (isItWorn(getEitherAd())) { wornError(); return; } @@ -711,7 +711,7 @@ void DreamWebEngine::dropObject() { bool DreamWebEngine::checkObjectSize() { byte containerSize = getOpenedSlotSize(); - DynObject *object = getEitherAdCPP(); + DynObject *object = getEitherAd(); // If there is no size defined for the object in the editor, set its size // to 6. This could be a bad idea, according to the original source. byte objectSize = (object->objectSize != 255) ? object->objectSize : 6; @@ -798,7 +798,7 @@ void DreamWebEngine::swapWithInv() { ObjectRef objectId = findInvPos(); _itemFrame = objectId._index; _objectType = objectId._type; - DynObject *object = getEitherAdCPP(); + DynObject *object = getEitherAd(); object->mapad[0] = 20; object->mapad[1] = 255; byte prevType2 = _objectType; @@ -806,7 +806,7 @@ void DreamWebEngine::swapWithInv() { _objectType = prevType; _itemFrame = prevFrame; delPointer(); - object = getEitherAdCPP(); + object = getEitherAd(); object->mapad[0] = 4; object->mapad[1] = 255; object->mapad[2] = _lastInvPos; @@ -852,7 +852,7 @@ void DreamWebEngine::useOpened() { if (_mouseButton == _oldButton || !(_mouseButton & 1)) return; - if (isItWorn(getEitherAdCPP())) { + if (isItWorn(getEitherAd())) { wornError(); return; } @@ -869,7 +869,7 @@ void DreamWebEngine::useOpened() { return; _pickUp = 0; - DynObject *object = getEitherAdCPP(); + DynObject *object = getEitherAd(); object->mapad[0] = _openedType; object->mapad[1] = _openedOb; object->mapad[2] = _lastInvPos; @@ -922,7 +922,7 @@ void DreamWebEngine::outOfOpen() { _objectType = kExObjectType; } - DynObject *object = getEitherAdCPP(); + DynObject *object = getEitherAd(); object->mapad[0] = 20; object->mapad[1] = 255; @@ -949,7 +949,7 @@ void DreamWebEngine::swapWithOpen() { if (_mouseButton == _oldButton || !(_mouseButton & 1)) return; - if (isItWorn(getEitherAdCPP())) { + if (isItWorn(getEitherAd())) { wornError(); return; } @@ -977,7 +977,7 @@ void DreamWebEngine::swapWithOpen() { _objectType = kExObjectType; } - DynObject *object = getEitherAdCPP(); + DynObject *object = getEitherAd(); object->mapad[0] = 20; object->mapad[1] = 255; @@ -985,7 +985,7 @@ void DreamWebEngine::swapWithOpen() { byte prevFrame2 = _itemFrame; _objectType = prevType; _itemFrame = prevFrame; - object = getEitherAdCPP(); + object = getEitherAd(); object->mapad[0] = _openedType; object->mapad[1] = _openedOb; object->mapad[2] = _lastInvPos; diff --git a/engines/dreamweb/stubs.cpp b/engines/dreamweb/stubs.cpp index f009bd5963..fb451893a3 100644 --- a/engines/dreamweb/stubs.cpp +++ b/engines/dreamweb/stubs.cpp @@ -1280,7 +1280,7 @@ DynObject *DreamWebEngine::getExAd(uint8 index) { return &_exData[index]; } -DynObject *DreamWebEngine::getEitherAdCPP() { +DynObject *DreamWebEngine::getEitherAd() { if (_objectType == kExObjectType) return getExAd(_itemFrame); else @@ -1311,9 +1311,9 @@ void *DreamWebEngine::getAnyAd(uint8 *slotSize, uint8 *slotCount) { } void *DreamWebEngine::getAnyAdDir(uint8 index, uint8 flag) { - if (flag == 4) + if (flag == kExObjectType) return getExAd(index); - else if (flag == 2) + else if (flag == kFreeObjectType) return getFreeAd(index); else return getSetAd(index); -- cgit v1.2.3 From ca7da4cffc7edacd90df408c441a6eca10cc0e55 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Wed, 28 Dec 2011 16:21:30 +0100 Subject: DREAMWEB: Rename a member of SetObject & DynObject to objId SetObject::name and DynObject::id are stored at the exact same offset, and have the exact same meaning (see also objectMatches()). Now they also have the same name, objId. --- engines/dreamweb/monitor.cpp | 2 +- engines/dreamweb/object.cpp | 6 +++--- engines/dreamweb/structs.h | 4 ++-- engines/dreamweb/stubs.cpp | 4 ++-- engines/dreamweb/use.cpp | 6 +++--- 5 files changed, 11 insertions(+), 11 deletions(-) (limited to 'engines/dreamweb') diff --git a/engines/dreamweb/monitor.cpp b/engines/dreamweb/monitor.cpp index 2464326e7d..256478d09b 100644 --- a/engines/dreamweb/monitor.cpp +++ b/engines/dreamweb/monitor.cpp @@ -400,7 +400,7 @@ void DreamWebEngine::loadCart() { uint16 objectIndex = findSetObject("INTF"); uint16 cartridgeIndex = checkInside(objectIndex, 1); if (cartridgeIndex != kNumexobjects) - cartridgeId = getExAd(cartridgeIndex)->id[3] + 1; + cartridgeId = getExAd(cartridgeIndex)->objId[3] + 1; if (cartridgeId == 0) loadTextFile(_textFile3, "DREAMWEB.T20"); // monitor file 20 diff --git a/engines/dreamweb/object.cpp b/engines/dreamweb/object.cpp index 8e6436c100..8d4f9bf84a 100644 --- a/engines/dreamweb/object.cpp +++ b/engines/dreamweb/object.cpp @@ -57,7 +57,7 @@ void DreamWebEngine::fillRyan() { } bool DreamWebEngine::isItWorn(const DynObject *object) { - return (object->id[0] == 'W'-'A') && (object->id[1] == 'E'-'A'); + return (object->objId[0] == 'W'-'A') && (object->objId[1] == 'E'-'A'); } void DreamWebEngine::wornError() { @@ -74,8 +74,8 @@ void DreamWebEngine::wornError() { } void DreamWebEngine::makeWorn(DynObject *object) { - object->id[0] = 'W'-'A'; - object->id[1] = 'E'-'A'; + object->objId[0] = 'W'-'A'; + object->objId[1] = 'E'-'A'; } void DreamWebEngine::obToInv(uint8 index, uint8 flag, uint16 x, uint16 y) { diff --git a/engines/dreamweb/structs.h b/engines/dreamweb/structs.h index b34715addf..18b8b280ab 100644 --- a/engines/dreamweb/structs.h +++ b/engines/dreamweb/structs.h @@ -71,7 +71,7 @@ struct SetObject { uint8 b9; uint8 b10; uint8 b11; - uint8 name[4]; + uint8 objId[4]; uint8 b16; uint8 index; uint8 frames[13]; // Table mapping animFrame to sprite frame number @@ -116,7 +116,7 @@ struct DynObject { uint8 objectSize; // the size of an object uint8 turnedOn; uint8 initialLocation; - uint8 id[4]; + uint8 objId[4]; }; struct ObjPos { diff --git a/engines/dreamweb/stubs.cpp b/engines/dreamweb/stubs.cpp index fb451893a3..bd9de7a23c 100644 --- a/engines/dreamweb/stubs.cpp +++ b/engines/dreamweb/stubs.cpp @@ -3696,7 +3696,7 @@ void DreamWebEngine::purgeAnItem() { const DynObject *extraObjects = _exData; for (size_t i = 0; i < kNumexobjects; ++i) { - if (extraObjects[i].mapad[0] && extraObjects[i].id[0] == 255 && + if (extraObjects[i].mapad[0] && extraObjects[i].objId[0] == 255 && extraObjects[i].initialLocation != _realLocation) { deleteExObject(i); return; @@ -3704,7 +3704,7 @@ void DreamWebEngine::purgeAnItem() { } for (size_t i = 0; i < kNumexobjects; ++i) { - if (extraObjects[i].mapad[0] && extraObjects[i].id[0] == 255) { + if (extraObjects[i].mapad[0] && extraObjects[i].objId[0] == 255) { deleteExObject(i); return; } diff --git a/engines/dreamweb/use.cpp b/engines/dreamweb/use.cpp index 6ab8422075..4259d03657 100644 --- a/engines/dreamweb/use.cpp +++ b/engines/dreamweb/use.cpp @@ -1396,7 +1396,7 @@ void DreamWebEngine::usePipe() { showPuzText(36, 300); putBackObStuff(); DynObject *exObject = getExAd(_withObject); - exObject->id[3] = 'F'-'A'; // CUPE (empty cup) -> CUPF (full cup) + exObject->objId[3] = 'F'-'A'; // CUPE (empty cup) -> CUPF (full cup) return; } else if (compare(_withObject, _withType, "CUPF")) { // Already full @@ -1419,7 +1419,7 @@ void DreamWebEngine::useOpenBox() { _vars._progressPoints++; showPuzText(37, 300); DynObject *exObject = getExAd(_withObject); - exObject->id[3] = 'E'-'A'; // CUPF (full cup) -> CUPE (empty cup) + exObject->objId[3] = 'E'-'A'; // CUPF (full cup) -> CUPE (empty cup) _vars._watchingTime = 140; _vars._reelToWatch = 105; _vars._endWatchReel = 181; @@ -1449,7 +1449,7 @@ void DreamWebEngine::runTap() { if (compare(_withObject, _withType, "CUPE")) { // Fill cup from tap DynObject *exObject = getExAd(_withObject); - exObject->id[3] = 'F'-'A'; // CUPE (empty cup) -> CUPF (full cup) + exObject->objId[3] = 'F'-'A'; // CUPE (empty cup) -> CUPF (full cup) playChannel1(8); showPuzText(57, 300); putBackObStuff(); -- cgit v1.2.3 From 8f2b8e821fb9b5c03fdeb08977003f486ede092d Mon Sep 17 00:00:00 2001 From: Max Horn Date: Wed, 28 Dec 2011 16:23:16 +0100 Subject: DREAMWEB: Cleanup --- engines/dreamweb/backdrop.cpp | 4 +--- engines/dreamweb/sprite.cpp | 23 ++++++++++++++++------- engines/dreamweb/stubs.cpp | 18 +++++++++--------- 3 files changed, 26 insertions(+), 19 deletions(-) (limited to 'engines/dreamweb') diff --git a/engines/dreamweb/backdrop.cpp b/engines/dreamweb/backdrop.cpp index 887da70539..1db2663624 100644 --- a/engines/dreamweb/backdrop.cpp +++ b/engines/dreamweb/backdrop.cpp @@ -126,12 +126,10 @@ void DreamWebEngine::makeBackOb(SetObject *objData, uint16 x, uint16 y) { } void DreamWebEngine::showAllObs() { - const unsigned int count = 128; - _setList.clear(); const GraphicsFile &frameBase = _setFrames; - for (size_t i = 0; i < count; ++i) { + for (size_t i = 0; i < 128; ++i) { SetObject *setEntry = &_setDat[i]; uint16 x, y; if (getMapAd(setEntry->mapad, &x, &y) == 0) diff --git a/engines/dreamweb/sprite.cpp b/engines/dreamweb/sprite.cpp index e662fa6ec3..3ee73d23a3 100644 --- a/engines/dreamweb/sprite.cpp +++ b/engines/dreamweb/sprite.cpp @@ -227,20 +227,29 @@ void DreamWebEngine::backObject(Sprite *sprite) { } sprite->delay = objData->delay; - if (objData->type == 6) + switch (objData->type) { + case 6: wideDoor(sprite, objData); - else if (objData->type == 5) + break; + case 5: randomSprite(sprite, objData); - else if (objData->type == 4) + break; + case 4: lockedDoorway(sprite, objData); - else if (objData->type == 3) + break; + case 3: liftSprite(sprite, objData); - else if (objData->type == 2) + break; + case 2: doorway(sprite, objData); - else if (objData->type == 1) + break; + case 1: constant(sprite, objData); - else + break; + default: steady(sprite, objData); + break; + } } void DreamWebEngine::constant(Sprite *sprite, SetObject *objData) { diff --git a/engines/dreamweb/stubs.cpp b/engines/dreamweb/stubs.cpp index bd9de7a23c..de42f54271 100644 --- a/engines/dreamweb/stubs.cpp +++ b/engines/dreamweb/stubs.cpp @@ -1036,13 +1036,6 @@ void DreamWebEngine::lockMon() { } } -void DreamWebEngine::clearAndLoad(uint8 *buf, uint8 c, - unsigned int size, unsigned int maxSize) { - assert(size <= maxSize); - memset(buf, c, maxSize); - readFromFile(buf, size); -} - void DreamWebEngine::startLoading(const Room &room) { _vars._combatCount = 0; _roomsSample = room.roomsSample; @@ -2117,10 +2110,17 @@ void DreamWebEngine::getRidOfAll() { _freeDesc.clear(); } +void DreamWebEngine::clearAndLoad(uint8 *buf, uint8 c, + unsigned int size, unsigned int maxSize) { + assert(size <= maxSize); + memset(buf, c, maxSize); + readFromFile(buf, size); +} + // if skipDat, skip clearing and loading Setdat and Freedat void DreamWebEngine::loadRoomData(const Room &room, bool skipDat) { - const uint16 kSetdatlen = 64*128; - const uint16 kFreedatlen = 16*80; + const uint16 kSetdatlen = 64*128; // == sizeof(_setDat) + const uint16 kFreedatlen = 16*80; // == sizeof(_freeDat) openFile(room.name); -- cgit v1.2.3 From 13e252ebd09ca6d8ac557f0934c28650a797ffd9 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Wed, 28 Dec 2011 16:32:34 +0100 Subject: DREAMWEB: Add 'packed' attribute to structs that need it ... and probably also to some that don't need it; since it seems better to err on the wrong side here for now, I did not check every struct as to whether it really needs this. On the long run, it would be better if the code did not rely on any kind of packing anyway. --- engines/dreamweb/structs.h | 59 +++++++++++++++++++++++++++++++++------------- 1 file changed, 42 insertions(+), 17 deletions(-) (limited to 'engines/dreamweb') diff --git a/engines/dreamweb/structs.h b/engines/dreamweb/structs.h index 18b8b280ab..fad2e1b5ae 100644 --- a/engines/dreamweb/structs.h +++ b/engines/dreamweb/structs.h @@ -58,6 +58,10 @@ struct RectWithCallback { } }; + + +#include "common/pack-start.h" // START STRUCT PACKING + struct SetObject { uint8 b0; uint8 b1; @@ -105,7 +109,7 @@ struct SetObject { uint8 b57; uint8 mapad[5]; uint8 b63; -}; +} PACKED_STRUCT; struct DynObject { uint8 currentLocation; @@ -117,7 +121,7 @@ struct DynObject { uint8 turnedOn; uint8 initialLocation; uint8 objId[4]; -}; +} PACKED_STRUCT; struct ObjPos { uint8 xMin; @@ -128,7 +132,7 @@ struct ObjPos { bool contains(uint8 x, uint8 y) const { return (x >= xMin) && (x < xMax) && (y >= yMin) && (y < yMax); } -}; +} PACKED_STRUCT; struct Frame { uint8 width; @@ -138,7 +142,7 @@ struct Frame { void setPtr(uint16 v) { WRITE_LE_UINT16(&_ptr, v); } uint8 x; uint8 y; -}; +} PACKED_STRUCT; struct Reel { uint8 frame_lo; @@ -148,7 +152,11 @@ struct Reel { uint8 x; uint8 y; uint8 b4; -}; +} PACKED_STRUCT; + +#include "common/pack-end.h" // END STRUCT PACKING + + struct ReelRoutine { uint8 reallocation; @@ -167,9 +175,12 @@ struct People { uint16 _reelPointer; ReelRoutine *_routinePointer; uint8 b4; - }; + + +#include "common/pack-start.h" // START STRUCT PACKING + struct Room { char name[13]; uint8 roomsSample; @@ -191,7 +202,8 @@ struct Room { uint8 b29; uint8 b30; uint8 realLocation; -}; +} PACKED_STRUCT; + extern const Room g_roomData[]; struct Rain { @@ -200,14 +212,14 @@ struct Rain { uint8 size; uint16 w3; uint8 b5; -}; +} PACKED_STRUCT; struct Change { uint8 index; uint8 location; uint8 value; uint8 type; -}; +} PACKED_STRUCT; struct PathNode { uint8 x; @@ -218,17 +230,17 @@ struct PathNode { uint8 y2; uint8 on; uint8 dir; -}; +} PACKED_STRUCT; struct PathSegment { uint8 b0; uint8 b1; -}; +} PACKED_STRUCT; struct RoomPaths { PathNode nodes[12]; PathSegment segments[24]; -}; +} PACKED_STRUCT; struct FileHeader { char _desc[50]; @@ -243,7 +255,7 @@ struct FileHeader { assert(i < 20); WRITE_LE_UINT16(&_len[i], length); } -}; +} PACKED_STRUCT; struct Atmosphere { uint8 _location; @@ -251,7 +263,11 @@ struct Atmosphere { uint8 _mapY; uint8 _sound; uint8 _repeat; -}; +} PACKED_STRUCT; + +#include "common/pack-end.h" // END STRUCT PACKING + + enum ObjectTypes { kSetObjectType1 = 1, @@ -272,16 +288,26 @@ struct ObjectRef { } }; + + +#include "common/pack-start.h" // START STRUCT PACKING + struct BackdropMapFlag { uint8 _flag; uint8 _flagEx; -}; +} PACKED_STRUCT; struct MapFlag { uint8 _flag; uint8 _flagEx; uint8 _type; -}; +} PACKED_STRUCT; + +#include "common/pack-end.h" // END STRUCT PACKING + + + + struct TextFile { TextFile(unsigned int size = 66) : _size(size), _text(0) { _offsetsLE = new uint16[_size]; } @@ -393,7 +419,6 @@ struct GameVars { uint8 _shakeCounter; }; - } // End of namespace DreamWeb #endif -- cgit v1.2.3