aboutsummaryrefslogtreecommitdiff
path: root/lure/res_struct.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lure/res_struct.cpp')
-rw-r--r--lure/res_struct.cpp309
1 files changed, 0 insertions, 309 deletions
diff --git a/lure/res_struct.cpp b/lure/res_struct.cpp
deleted file mode 100644
index db01a471cd..0000000000
--- a/lure/res_struct.cpp
+++ /dev/null
@@ -1,309 +0,0 @@
-/* ScummVM - Scumm Interpreter
- * Copyright (C) 2005-2006 The ScummVM project
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * $URL$
- * $Id$
- *
- */
-
-#include "lure/res.h"
-#include "lure/disk.h"
-#include "lure/scripts.h"
-#include "lure/system.h"
-
-namespace Lure {
-
-const char *actionList[] = {NULL, "Get", NULL, "Push", "Pull", "Operate", "Open",
- "Close", "Lock", "Unlock", "Use", "Give", "Talk to", "Tell", "Buy",
- "Look", "Look at", "Look through", "Ask", NULL, "Drink", "Status",
- "Go to", "Return", "Bribe", "Examine"};
-
-// Room data holding class
-
-RoomData::RoomData(RoomResource *rec) {
- roomNumber = READ_LE_UINT16(&rec->roomNumber);
- descId = READ_LE_UINT16(&rec->descId);
- sequenceOffset = READ_LE_UINT16(&rec->sequenceOffset);
- numLayers = READ_LE_UINT16(&rec->numLayers);
-
- for (int ctr = 0; ctr < 4; ++ctr)
- layers[ctr] = READ_LE_UINT16(&rec->layers[ctr]);
-}
-
-// Room exit hotspot area holding class
-
-RoomExitHotspotData::RoomExitHotspotData(RoomExitHotspotRecord *rec) {
- hotspotId = READ_LE_UINT16(&rec->hotspotId);
- xs = READ_LE_INT16(&rec->xs);
- ys = READ_LE_INT16(&rec->ys);
- xe = READ_LE_INT16(&rec->xe);
- ye = READ_LE_INT16(&rec->ye);
- cursorNum = rec->cursorNum;
- destRoomNumber = READ_LE_UINT16(&rec->destRoomNumber);
-}
-
-// Room exit class
-
-RoomExitData::RoomExitData(RoomExitResource *rec) {
- xs = rec->xs;
- ys = rec->ys;
- xe = rec->xe;
- ye = rec->ye;
- sequenceOffset = rec->sequenceOffset;
- roomNumber = rec->newRoom;
- x = rec->newRoomX;
- y = rec->newRoomY;
-
- switch (rec->direction) {
- case 0x80:
- direction = UP;
- break;
- case 0x40:
- direction = DOWN;
- break;
- case 0x20:
- direction = LEFT;
- break;
- case 0x10:
- direction = RIGHT;
- break;
- default:
- direction = NO_DIRECTION;
- break;
- }
-}
-
-bool RoomExitData::insideRect(int16 xp, int16 yp) {
- return ((xp >= xs) && (xp <= xe) && (yp >= ys) && (yp <= ye));
-}
-
-RoomExitData *RoomExitList::checkExits(int16 xp, int16 yp) {
- iterator i;
- for (i = begin(); i != end(); i++) {
- RoomExitData *rec = *i;
- if (rec->insideRect(xp, yp)) return rec;
- }
- return NULL;
-}
-
-// Room exit joins class
-
-RoomExitJoinData::RoomExitJoinData(RoomExitJoinRecord *rec) {
- hotspot1Id = READ_LE_UINT16(&rec->hotspot1Id);
- h1CurrentFrame = rec->h1CurrentFrame;
- h1DestFrame = rec->h1DestFrame;
- h1Unknown = READ_LE_UINT16(&rec->h1Unknown);
- hotspot2Id = READ_LE_UINT16(&rec->hotspot2Id);
- h2CurrentFrame = rec->h2CurrentFrame;
- h2DestFrame = rec->h2DestFrame;
- h2Unknown = READ_LE_UINT16(&rec->h2Unknown);
- blocked = rec->blocked;
- unknown = READ_LE_UINT32(&rec->unknown);
-}
-
-// Hotspot action record
-
-HotspotActionData::HotspotActionData(HotspotActionRecord *rec) {
- action = (Action) rec->action;
- sequenceOffset = READ_LE_UINT16(&rec->sequenceOffset);
-}
-
-uint16 HotspotActionList::getActionOffset(Action action) {
- iterator i;
- for (i = begin(); i != end(); ++i) {
- HotspotActionData *rec = *i;
- if (rec->action == action) return rec->sequenceOffset;
- }
-
- return 0;
-}
-
-
-// Hotspot data
-
-HotspotData::HotspotData(HotspotResource *rec) {
- hotspotId = READ_LE_UINT16(&rec->hotspotId);
- nameId = READ_LE_UINT16(&rec->nameId);
- descId = READ_LE_UINT16(&rec->descId);
- descId2 = READ_LE_UINT16(&rec->descId2);
- actions = READ_LE_UINT32(&rec->actions);
- actionsOffset = READ_LE_UINT16(&rec->actionsOffset);
- flags = (byte) (actions >> 24) & 0xf0;
- actions &= 0xfffffff;
-
- roomNumber = READ_LE_UINT16(&rec->roomNumber);
- layer = rec->layer;
- scriptLoadFlag = rec->scriptLoadFlag;
- loadOffset = READ_LE_UINT16(&rec->loadOffset);
- startX = READ_LE_INT16(&rec->startX);
- startY = READ_LE_INT16(&rec->startY);
- width = READ_LE_UINT16(&rec->width);
- height = READ_LE_UINT16(&rec->height);
- colourOffset = READ_LE_UINT16(&rec->colourOffset);
- animRecordId = READ_LE_UINT16(&rec->animRecordId);
- sequenceOffset = READ_LE_UINT16(&rec->sequenceOffset);
- tickProcOffset = READ_LE_UINT16(&rec->tickProcOffset);
- tickTimeout = READ_LE_UINT16(&rec->tickTimeout);
-}
-
-// Hotspot override data
-
-HotspotOverrideData::HotspotOverrideData(HotspotOverrideResource *rec) {
- hotspotId = READ_LE_UINT16(&rec->hotspotId);
- xs = READ_LE_INT16(&rec->xs);
- ys = READ_LE_INT16(&rec->ys);
- xe = READ_LE_INT16(&rec->xe);
- ye = READ_LE_INT16(&rec->ye);
-}
-
-// Hotspot animation movement frame
-
-MovementData::MovementData(MovementResource *rec) {
- frameNumber = READ_LE_UINT16(&rec->frameNumber);
- xChange = READ_LE_INT16(&rec->xChange);
- yChange = READ_LE_INT16(&rec->yChange);
-}
-
-// List of movement frames
-
-bool MovementDataList::getFrame(uint16 currentFrame, int16 &xChange,
- int16 &yChange, uint16 &nextFrame) {
- if (isEmpty()) return false;
- bool foundFlag = false;
- iterator i;
-
- for (i = begin(); i != end(); ++i) {
- MovementData *rec = *i;
- if (foundFlag || (i == begin())) {
- xChange = rec->xChange;
- yChange = rec->yChange;
- nextFrame = rec->frameNumber;
- if (foundFlag) return true;
- }
- if (rec->frameNumber == currentFrame) foundFlag = true;
- }
-
- return true;
-}
-
-
-// Hotspot animation data
-
-HotspotAnimData::HotspotAnimData(HotspotAnimResource *rec) {
- animRecordId = READ_LE_UINT16(&rec->animRecordId);
- animId = READ_LE_UINT16(&rec->animId);
- flags = READ_LE_UINT16(&rec->flags);
-
- upFrame = rec->upFrame;
- downFrame = rec->downFrame;
- leftFrame = rec->leftFrame;
- rightFrame = rec->rightFrame;
-}
-
-// Hotspot action lists
-
-HotspotActionList::HotspotActionList(uint16 id, byte *data) {
- recordId = id;
- uint16 numItems = READ_LE_UINT16(data);
- data += 2;
-
- HotspotActionRecord *actionRec = (HotspotActionRecord *) data;
-
- for (int actionCtr = 0; actionCtr < numItems; ++actionCtr, ++actionRec) {
- HotspotActionData *actionEntry = new HotspotActionData(actionRec);
- push_back(actionEntry);
- }
-}
-
-HotspotActionList *HotspotActionSet::getActions(uint16 recordId) {
- HotspotActionSet::iterator i;
- for (i = begin(); i != end(); ++i) {
- HotspotActionList *list = *i;
- if (list->recordId == recordId) return list;
- }
-
- return NULL;
-}
-
-// The following classes hold any sequence offsets that are being delayed
-
-SequenceDelayData::SequenceDelayData(uint16 delay, uint16 seqOffset) {
- OSystem &system = System::getReference();
-
- _timeoutCtr = system.getMillis() + delay;
- _sequenceOffset = seqOffset;
-}
-
-void SequenceDelayList::addSequence(uint16 delay, uint16 seqOffset) {
- SequenceDelayData *entry = new SequenceDelayData(delay, seqOffset);
- push_back(entry);
-}
-
-void SequenceDelayList::tick() {
- uint32 currTime = System::getReference().getMillis();
- SequenceDelayList::iterator i;
-
- for (i = begin(); i != end(); i++) {
- SequenceDelayData *entry = *i;
- if (entry->_timeoutCtr >= currTime) {
- uint16 seqOffset = entry->_sequenceOffset;
- erase(i);
- Script::execute(seqOffset);
- return;
- }
- }
-}
-
-// Field list and miscellaneous variables
-
-ValueTableData::ValueTableData() {
- _numGroats = 0;
-
- for (uint16 index = 0; index < NUM_VALUE_FIELDS; ++index)
- _fieldList[index] = 0;
-}
-
-bool ValueTableData::isKnownField(uint16 fieldIndex) {
- return (fieldIndex <= 8) || (fieldIndex == 10) || (fieldIndex == 15) ||
- (fieldIndex == 18) || (fieldIndex == 20);
-}
-
-uint16 ValueTableData::getField(uint16 fieldIndex) {
- if (fieldIndex > NUM_VALUE_FIELDS)
- error("Invalid field index specified %d", fieldIndex);
- if (!isKnownField(fieldIndex))
- warning("Unknown field index %d in GET_FIELD opcode", fieldIndex);
- return _fieldList[fieldIndex];
-}
-
-uint16 ValueTableData::getField(FieldName fieldName) {
- return getField((uint16) fieldName);
-}
-
-void ValueTableData::setField(uint16 fieldIndex, uint16 value) {
- if (fieldIndex > NUM_VALUE_FIELDS)
- error("Invalid field index specified %d", fieldIndex);
- _fieldList[fieldIndex] = value;
- if (!isKnownField(fieldIndex))
- warning("Unknown field index %d in SET_FIELD opcode", fieldIndex);
-}
-
-void ValueTableData::setField(FieldName fieldName, uint16 value) {
- setField((uint16) fieldName, value);
-}
-
-} // end of namespace Lure