[Scummvm-cvs-logs] CVS: scummvm/sword1 logic.cpp,1.5,1.6 menu.cpp,1.2,1.3 menu.h,1.1,1.2 mouse.cpp,1.3,1.4 mouse.h,1.1,1.2 objectman.cpp,1.1,1.2 resman.cpp,1.2,1.3 resman.h,1.1,1.2 screen.cpp,1.6,1.7 screen.h,1.2,1.3 staticres.cpp,1.1,1.2 sword1.cpp,1.4,1.5 sworddefs.h,1.2,1.3 text.cpp,1.1,1.2

Robert G?ffringmann lavosspawn at users.sourceforge.net
Tue Dec 16 17:49:01 CET 2003


Update of /cvsroot/scummvm/scummvm/sword1
In directory sc8-pr-cvs1:/tmp/cvs-serv25287/sword1

Modified Files:
	logic.cpp menu.cpp menu.h mouse.cpp mouse.h objectman.cpp 
	resman.cpp resman.h screen.cpp screen.h staticres.cpp 
	sword1.cpp sworddefs.h text.cpp 
Log Message:
fixed resMan bug about closing of sections and started adding menu support

Index: logic.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword1/logic.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- logic.cpp	17 Dec 2003 01:18:03 -0000	1.5
+++ logic.cpp	17 Dec 2003 01:47:47 -0000	1.6
@@ -868,16 +868,13 @@
 }
 
 int SwordLogic::fnSetSpritePalette(BsObject *cpt, int32 id, int32 spritePal, int32 d, int32 e, int32 f, int32 z, int32 x) {
-	_screen->fnSetPalette(184, 72, (uint8*)_resMan->openFetchRes(spritePal));
+	_screen->fnSetPalette(184, 72, id, false);
 	_resMan->resClose(spritePal);
 	return SCRIPT_CONT;
 }
 
 int SwordLogic::fnSetWholePalette(BsObject *cpt, int32 id, int32 spritePal, int32 d, int32 e, int32 f, int32 z, int32 x) {
-	uint8 *pal = (uint8*)_resMan->openFetchRes(spritePal);
-	pal[0] = pal[1] = pal[2] = 0;
-	_screen->fnSetPalette(0, 256, pal);
-	_resMan->resClose(spritePal);
+	_screen->fnSetPalette(0, 256, id, false);
 	return SCRIPT_CONT;
 }
 

Index: menu.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword1/menu.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- menu.cpp	16 Dec 2003 09:43:08 -0000	1.2
+++ menu.cpp	17 Dec 2003 01:47:47 -0000	1.3
@@ -39,7 +39,10 @@
 }
 
 bool SwordMenuIcon::wasClicked(uint16 mouseX, uint16 mouseY) {
-	return false;
+	if ((mouseY > 440) && (mouseX >= _menuPos * 40) && (mouseX < (_menuPos + 1) * 40))
+		return true;
+	else
+		return false;
 }
 
 void SwordMenuIcon::setSelect(bool pSel) {
@@ -55,8 +58,13 @@
 SwordMenu::SwordMenu(SwordScreen *pScreen, SwordMouse *pMouse) {
 	_screen = pScreen;
 	_mouse = pMouse;
-	for (uint8 cnt = 0; cnt < 16; cnt++)
+	_subjectBarShown = false;
+	_objectBarShown = false;
+	for (uint8 cnt = 0; cnt < TOTAL_subjects; cnt++)
 		_subjects[cnt] = NULL;
+	for (uint8 cnt = 0; cnt < TOTAL_pockets; cnt++)
+		_objects[cnt] = NULL;
+	_inMenu = 0;
 }
 
 uint8 SwordMenu::checkMenuClick(uint8 menuType) {
@@ -68,11 +76,11 @@
 	if (menuType == MENU_BOT) {
 		for (uint8 cnt = 0; cnt < SwordLogic::_scriptVars[IN_SUBJECT]; cnt++)
 			if (_subjects[cnt]->wasClicked(x, y))
-				if (mouseEvent == BS1L_BUTTON_DOWN) {
+				if (mouseEvent & BS1L_BUTTON_DOWN) {
 					SwordLogic::_scriptVars[OBJECT_HELD] = _subjectBar[cnt];
 					buildSubjects();
 					return 0;
-				} else if (mouseEvent == BS1L_BUTTON_UP) {
+				} else if (mouseEvent & BS1L_BUTTON_UP) {
 					if (SwordLogic::_scriptVars[OBJECT_HELD] == _subjectBar[cnt])
 						return cnt + 1;
 					else {
@@ -88,8 +96,7 @@
 }
 
 void SwordMenu::buildSubjects(void) {
-	// uint8 subDest = 0;
-	clearMenu(MENU_BOT);
+	_screen->clearMenu(MENU_BOT);
 	for (uint8 cnt = 0; cnt < 16; cnt++)
 		if (_subjects[cnt]) {
 			delete _subjects[cnt];
@@ -99,44 +106,89 @@
 		uint32 res = _subjectList[(_subjectBar[cnt] & 65535) - BASE_SUBJECT].subjectRes;
 		uint32 frame = _subjectList[(_subjectBar[cnt] & 65535) - BASE_SUBJECT].frameNo;
 		_subjects[cnt] = new SwordMenuIcon(MENU_BOT, cnt, res, frame, _screen);
-		_subjects[cnt]->setSelect(SwordLogic::_scriptVars[OBJECT_HELD] == (_subjectBar[cnt]&0xFFFF));
+		_subjects[cnt]->setSelect(SwordLogic::_scriptVars[OBJECT_HELD] == _subjectBar[cnt]);
 		_subjects[cnt]->draw();
 	}
-	//_system->update_screen();
 }
 
 void SwordMenu::refresh(uint8 menuType) {
 	//warning("stub: SwordMenu::refresh())");
 }
 
-void SwordMenu::clearMenu(uint8 menuType) {
-	warning("stub: SwordMenu::clearMenu()");
+void SwordMenu::buildMenu(void) {
+	uint32 *pockets = SwordLogic::_scriptVars + POCKET_1;
+	_inMenu = 0;
+	for (uint32 pocketNo = 0; pocketNo < TOTAL_pockets; pocketNo++)
+		if (pockets[pocketNo]) {
+			_menuList[_inMenu] = pocketNo;
+			_inMenu++;
+		}
+	for (uint32 menuSlot = 0; menuSlot < _inMenu; menuSlot++) {
+		_objects[menuSlot] = new SwordMenuIcon(MENU_TOP, menuSlot, _objectDefs[_menuList[menuSlot]].bigIconRes, _objectDefs[_menuList[menuSlot]].bigIconFrame, _screen);
+		uint32 objHeld = SwordLogic::_scriptVars[OBJECT_HELD];
+
+		// check highlighting
+		if (SwordLogic::_scriptVars[MENU_LOOKING] || _subjectBarShown) { // either we're in the chooser or we're doing a 'LOOK AT'
+			if ((!objHeld) || (objHeld == _menuList[menuSlot]))
+				_objects[menuSlot]->setSelect(true);
+		} else if (_secondItem) { // clicked luggage onto 2nd icon - we need to colour-highlight the 2 relevant icons & grey out the rest
+			if ((_menuList[menuSlot] == objHeld) || (_menuList[menuSlot] == _secondItem))
+				_objects[menuSlot]->setSelect(true);
+		} else { // this object is selected - ie. GREYED OUT
+			if (objHeld != _menuList[menuSlot])
+				_objects[menuSlot]->setSelect(true);
+		}
+	}
+}
+
+void SwordMenu::showMenu(uint8 menuType) {
+	if (menuType == MENU_TOP) {
+		for (uint8 cnt = 0; cnt < _inMenu; cnt++)
+			_objects[cnt]->draw();
+	}
 }
 
 void SwordMenu::fnStartMenu(void) {
-	warning("stub: SwordMenu::fnStartMenu()");
+	SwordLogic::_scriptVars[OBJECT_HELD] = 0;  // icon no longer selected
+	SwordLogic::_scriptVars[MENU_LOOKING] = 0; // second icon no longer selected (after using one on another)
+	_secondItem = 0;                           // no longer 'looking at' an icon
+	buildMenu();
+	if (_inMenu > 0) {	// if there's something in the object menu
+		_objectBarShown = true;
+		showMenu(MENU_TOP);
+	} else {
+		_objectBarShown = false;
+		_inMenu = 0;
+	}
 }
 
 void SwordMenu::fnEndMenu(void) {
-	warning("stub: SwordMenu::clearMenu()");
+	for (uint32 cnt = 0; cnt < _inMenu; cnt++)
+		delete _objects[cnt];
+	_screen->clearMenu(MENU_TOP);
+	_objectBarShown = false;
+	_mouse->setMenuStatus(0);
 }
 
 void SwordMenu::fnChooser(BsObject *compact) {
 	SwordLogic::_scriptVars[OBJECT_HELD] = 0;
 	buildSubjects();
 	compact->o_logic = LOGIC_choose;
+	_mouse->setMenuStatus(1); // so the mouse cursor will be shown.
+	_subjectBarShown = true;
 }
 
 void SwordMenu::fnEndChooser(void) {
 	SwordLogic::_scriptVars[OBJECT_HELD] = 0;
-	clearMenu(MENU_BOT);
-	clearMenu(MENU_TOP);
-	//_system->update_screen();
+	_screen->clearMenu(MENU_BOT);
+	_screen->clearMenu(MENU_TOP);
 	for (uint8 cnt = 0; cnt < 16; cnt++)
 		if (_subjects[cnt]) {
 			delete _subjects[cnt];
 			_subjects[cnt] = NULL;
 		}
+	_mouse->setMenuStatus(0);
+	_subjectBarShown = false;
 }
 
 int SwordMenu::logicChooser(BsObject *compact) {
@@ -153,6 +205,5 @@
 }
 
 void SwordMenu::cfnReleaseMenu(void) {
-	clearMenu(MENU_TOP);
-	//_system->update_screen();
+	_screen->clearMenu(MENU_TOP);
 }

Index: menu.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword1/menu.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- menu.h	16 Dec 2003 02:09:24 -0000	1.1
+++ menu.h	17 Dec 2003 01:47:47 -0000	1.2
@@ -37,6 +37,14 @@
 	uint32 frameNo;
 };
 
+struct MenuObject {
+	int32 textDesc;
+	uint32 bigIconRes;
+	uint32 bigIconFrame;
+	uint32 luggageIconRes;
+	uint32 useScript;
+};
+
 class SwordMenuIcon {
 public:
 	SwordMenuIcon(uint8 menuType, uint8 menuPos, uint32 resId, uint32 frame, SwordScreen *screen);
@@ -66,15 +74,24 @@
 
 private:
 	void buildSubjects(void);
-	void clearMenu(uint8 menuType);
+	void buildMenu(void);
+	void showMenu(uint8 menuType);
+	bool _subjectBarShown; // originally "subject_status"
+	bool _objectBarShown; // originally "menu_status"
 	uint8 checkMenuClick(uint8 menuType);
+	//- lower menu, speech subjects:
 	SwordMenuIcon *_subjects[16];
 	uint32 _subjectBar[16];
+	//- top menu, items
+	SwordMenuIcon *_objects[TOTAL_pockets];
+	uint32 _menuList[TOTAL_pockets];
+	uint32 _inMenu;
+	uint32 _secondItem;
 
 	SwordScreen *_screen;
 	SwordMouse *_mouse;
 	static const Subject _subjectList[TOTAL_subjects];
-
+	static const MenuObject _objectDefs[TOTAL_pockets + 1];
 };
 
 #endif //BSMENU_H

Index: mouse.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword1/mouse.cpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- mouse.cpp	16 Dec 2003 14:59:29 -0000	1.3
+++ mouse.cpp	17 Dec 2003 01:47:47 -0000	1.4
@@ -35,18 +35,12 @@
 	_objMan = pObjMan;
 	_system = system;
 	_numObjs = 0;
-	_mouseStatus = 0; // mouse off and unlocked
+	_menuStatus = _mouseStatus = 0; // mouse off and unlocked
 	_getOff = 0;
+	_specialPtrId = 0;
 
-	for (uint8 cnt = 0; cnt < 17; cnt++) {
-        _pointers[cnt] = (MousePtr*)_resMan->openFetchRes(MSE_POINTER + cnt);
-#ifdef SCUMM_BIG_ENDIAN
-		uint16 *data = (uint16*)_pointers[cnt];
-		for (uint8 endCnt = 0; endCnt < 5; endCnt++)
-			data[endCnt] = READ_LE_UINT16(data + endCnt);
-#endif
-		fixTransparency(_pointers[cnt]->data + 0x30, _pointers[cnt]->sizeX * _pointers[cnt]->sizeY * _pointers[cnt]->numFrames);
-	}
+	for (uint8 cnt = 0; cnt < 17; cnt++)
+		_pointers[cnt] = (MousePtr*)_resMan->mouseResOpen(MSE_POINTER + cnt);
 	/*_resMan->resOpen(MSE_POINTER);		// normal mouse (1 frame anim)
 	_resMan->resOpen(MSE_OPERATE);
 	_resMan->resOpen(MSE_PICKUP);
@@ -71,6 +65,10 @@
 	_logic = pLogic;
 }
 
+void SwordMouse::setMenuStatus(uint8 status) {
+	_menuStatus = status;
+}
+
 void SwordMouse::addToList(int id, BsObject *compact) {
 	_objList[_numObjs].id = id;
 	_objList[_numObjs].compact = compact;
@@ -82,13 +80,22 @@
 }
 
 void SwordMouse::engine(uint16 x, uint16 y, uint16 eventFlags) {
-	//warning("Stub: SwordMouse::engine");
 	_state = 0; // all mouse events are flushed after one cycle.
 	if (_lastState) { // delay all events by one cycle to notice L_button + R_button clicks correctly.
 		_state = _lastState | eventFlags;
 		_lastState = 0;
 	} else if (eventFlags)
 		_lastState = eventFlags;
+
+	// if we received both, mouse down and mouse up event in this cycle, resort them so that
+	// we'll receive the up event in the next one.
+	if ((_state & MOUSE_DOWN_MASK) && (_state & MOUSE_UP_MASK)) {
+		_lastState = _state & MOUSE_UP_MASK;
+		_state &= MOUSE_DOWN_MASK;
+	}
+
+	_mouseX = x;
+	_mouseY = y;
 	if (!(_mouseStatus & 1)) {  // no human?
 		// if the mouse is turned off, I want the menu automatically removed,
 		// except while in conversation, while examining a menu object or while combining two menu objects!
@@ -122,14 +129,11 @@
 		}
 		if (touchedId != (int)SwordLogic::_scriptVars[SPECIAL_ITEM]) { //the mouse collision situation has changed in one way or another
 			SwordLogic::_scriptVars[SPECIAL_ITEM] = touchedId;
-			debug(9, "New special item: %X\n", touchedId);
 			if (_getOff) { // there was something else selected before, run its get-off script
 				_logic->runMouseScript(NULL, _getOff);
 				_getOff = 0;
 			}
 			if (touchedId) { // there's something new selected, now.
-				// BsObject *compact = _objMan->fetchObject(SwordLogic::_scriptVars[SPECIAL_ITEM]);
-
 				if	(_objList[clicked].compact->o_mouse_on)	//run its get on
 					_logic->runMouseScript(_objList[clicked].compact, _objList[clicked].compact->o_mouse_on);
 
@@ -138,9 +142,9 @@
 		}
 	} else
 		SwordLogic::_scriptVars[SPECIAL_ITEM] = 0;
-	if (_state & (BS1L_BUTTON_DOWN | BS1R_BUTTON_DOWN)) {
-		// todo: handle menus
-		SwordLogic::_scriptVars[MOUSE_BUTTON] = _state;
+	if (_state & MOUSE_DOWN_MASK) {
+		// todo: handle top menu?
+		SwordLogic::_scriptVars[MOUSE_BUTTON] = _state & MOUSE_DOWN_MASK;
 		if (SwordLogic::_scriptVars[SPECIAL_ITEM]) {
 			BsObject *compact = _objMan->fetchObject(SwordLogic::_scriptVars[SPECIAL_ITEM]);
 			_logic->runMouseScript(compact, compact->o_mouse_click);
@@ -158,27 +162,44 @@
 }
 
 void SwordMouse::setPointer(uint32 resId, uint32 rate) {
-	_currentPtrId = resId - MSE_POINTER;
+	if (_specialPtrId) {
+		_resMan->resClose(_specialPtrId);
+		_specialPtrId = 0;
+	}
 	_rate = rate;
 	_rateCnt = 1;
 	_frame = 0;
+
 	if (resId == 0) {
+		_rateCnt = 0;
 		_system->set_mouse_cursor(NULL, 0, 0, 0, 0);
 		_system->show_mouse(false);
 	} else {
+		if (resId <= MSE_ARROW9)
+			_currentPtrId = resId - MSE_POINTER;
+		else {
+			_currentPtrId = 0;
+			_specialPtrId = resId;
+			_specialPtr = (MousePtr*)_resMan->mouseResOpen(resId);
+		}
         animate();
 		_system->show_mouse(true);
 	}
 }
 
 void SwordMouse::animate(void) {
-	if (_rateCnt && (_mouseStatus == 1)) {
+	MousePtr *currentPtr;
+	if (_rateCnt && ((_mouseStatus == 1) || _menuStatus)) {
+		if (_specialPtrId)
+			currentPtr = _specialPtr;
+		else
+			currentPtr = _pointers[_currentPtrId];
 		_rateCnt--;
 		if (!_rateCnt) {
 			_rateCnt = _rate;
-			_frame = (_frame + 1) % _pointers[_currentPtrId]->numFrames;
-			uint16 size = _pointers[_currentPtrId]->sizeX * _pointers[_currentPtrId]->sizeY;
-			_system->set_mouse_cursor(_pointers[_currentPtrId]->data + 0x30 + _frame * size, _pointers[_currentPtrId]->sizeX, _pointers[_currentPtrId]->sizeY, _pointers[_currentPtrId]->hotSpotX, _pointers[_currentPtrId]->hotSpotY);
+			_frame = (_frame + 1) % currentPtr->numFrames;
+			uint16 size = currentPtr->sizeX * currentPtr->sizeY;
+			_system->set_mouse_cursor(currentPtr->data + 0x30 + _frame * size, currentPtr->sizeX, currentPtr->sizeY, currentPtr->hotSpotX, currentPtr->hotSpotY);
 		}
 	}
 }
@@ -222,10 +243,4 @@
 void SwordMouse::giveCoords(uint16 *x, uint16 *y) {
 	*x = _mouseX;
 	*y = _mouseY;
-}
-
-void SwordMouse::fixTransparency(uint8 *data, uint32 size) {
-	for (uint32 cnt = 0; cnt < size; cnt++)
-		if (data[cnt] == 0)
-			data[cnt] = 255;
 }

Index: mouse.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword1/mouse.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- mouse.h	16 Dec 2003 02:09:24 -0000	1.1
+++ mouse.h	17 Dec 2003 01:47:47 -0000	1.2
@@ -33,6 +33,8 @@
 #define BS1R_BUTTON_DOWN		8
 #define BS1R_BUTTON_UP			16
 #define MOUSE_BOTH_BUTTONS		(BS1L_BUTTON_DOWN | BS1R_BUTTON_DOWN)
+#define MOUSE_DOWN_MASK			(BS1L_BUTTON_DOWN | BS1R_BUTTON_DOWN)
+#define MOUSE_UP_MASK			(BS1L_BUTTON_UP | BS1R_BUTTON_UP)
 
 struct MouseObj {
 	int id;
@@ -79,8 +81,8 @@
 	void fnNormalMouse(void);
 	void fnLockMouse(void);
 	void fnUnlockMouse(void);
+	void setMenuStatus(uint8 status);
 private:
-	void fixTransparency(uint8 *data, uint32 size);
 	MousePtr *_pointers[17];
 	uint32 _currentPtrId, _rate, _rateCnt, _frame;
 	OSystem *_system;
@@ -94,6 +96,9 @@
 	uint16 _numObjs;
 	uint16 _lastState, _state;
 	uint32 _getOff;
+	uint8 _menuStatus;
+	uint32 _specialPtrId; // for special mouse cursors which aren't in the _pointers[] array.
+	MousePtr *_specialPtr;
 };
 
 #endif //BSMOUSE_H

Index: objectman.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword1/objectman.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- objectman.cpp	16 Dec 2003 02:09:25 -0000	1.1
+++ objectman.cpp	17 Dec 2003 01:47:47 -0000	1.2
@@ -65,7 +65,7 @@
 		error("mega %d is leaving empty section %d", id, section);
 	_liveList[section]--;
 	if ((_liveList[section] == 0) && (id != PLAYER)) {
-		_resMan->resClose(_liveList[section]);
+		_resMan->resClose(_objectList[section]);
 		_cptData[section] = NULL;
 	}
 	/* if the player is leaving the section then we have to close the resources after

Index: resman.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword1/resman.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- resman.cpp	16 Dec 2003 09:43:08 -0000	1.2
+++ resman.cpp	17 Dec 2003 01:47:47 -0000	1.3
@@ -173,14 +173,11 @@
 	if (memHandle->cond == MEM_FREED) { // memory has been freed
 		uint32 size = resLength(id);
 		_memMan->alloc(memHandle, size);
-		// uint8 *dest = (uint8*)memHandle->data;
 		File *clusFile = openClusterFile(id);
 		clusFile->seek( resOffset(id) );
 		clusFile->read( memHandle->data, size);
 		if (clusFile->ioFailed())
 			error("Can't read %d bytes from cluster %d\n", size, id);
-		// original loop was a lot more complicated, more error handling and
-		// some calls to the music system, don't think we'll need that.
 		clusFile->close();
 		delete clusFile;
 	} else
@@ -211,7 +208,7 @@
 }
 
 File *ResMan::openClusterFile(uint32 id) {
-	File *clusFile = new File();;
+	File *clusFile = new File();
 	char fullPath[MAX_PATH_LEN];
 	char fileName[15];
 	makePathToCluster(fullPath);
@@ -246,6 +243,27 @@
 void ResMan::makePathToCluster(char *str) {
 	*str = '\0';
 	// todo: add search stuff, cd1, cd2, etc.
+}
+
+void *ResMan::mouseResOpen(uint32 id) {
+	BsMemHandle *memHandle = resHandle(id);
+	if (memHandle->cond == MEM_FREED) {
+		resOpen(id);
+#ifdef SCUMM_BIG_ENDIAN
+		uint16 *head = (uint16*)memHandle->data;
+		for (uint8 endCnt = 0; endCnt < 5; endCnt++)
+			head[endCnt] = READ_LE_UINT16(head + endCnt);
+#endif
+		// fix transparency:
+		uint8 *rawData = (uint8*)memHandle->data;
+		uint32 size = READ_LE_UINT16(rawData) * READ_LE_UINT16(rawData + 2) * READ_LE_UINT16(rawData + 4);
+		rawData += 0x3A;
+		for (uint32 cnt = 0; cnt < size; cnt++)
+			if (rawData[cnt] == 0)
+				rawData[cnt] = 255;
+		return memHandle->data;
+	} else 
+		return openFetchRes(id);
 }
 
 void ResMan::openCptResourceBigEndian(uint32 id) {

Index: resman.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword1/resman.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- resman.h	16 Dec 2003 02:09:25 -0000	1.1
+++ resman.h	17 Dec 2003 01:47:47 -0000	1.2
@@ -51,12 +51,12 @@
 	ResMan(const char *resFile, MemMan *pMemoMan);
 	~ResMan(void);
 	void resClose(uint32 id);
-	//void resOpen(uint32 id);
 	void resOpen(uint32 id);
 	void *fetchRes(uint32 id);
 	void dumpRes(uint32 id);
 	void *openFetchRes(uint32 id);
 	void *cptResOpen(uint32 id);
+	void *mouseResOpen(uint32 id);
 	Header *lockScript(uint32 scrID);
 	void unlockScript(uint32 scrID);
 	FrameHeader *fetchFrame(void *resourceData, uint32 frameNo);

Index: screen.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword1/screen.cpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- screen.cpp	16 Dec 2003 19:31:12 -0000	1.6
+++ screen.cpp	17 Dec 2003 01:47:47 -0000	1.7
@@ -29,7 +29,7 @@
 #include "scummsys.h"
 #include "common/util.h"
 #include "system.h"
-#include "router.h"
+#include "menu.h"
 
 #define SCROLL_FRACTION 16
 #define MAX_SCROLL_DISTANCE 8
@@ -112,14 +112,21 @@
 	_fadingDirection = FADE_UP;
 }
 
-void SwordScreen::fnSetPalette(uint8 start, uint16 length, uint8 *data) {
-	memcpy(_targetPalette + start * 3, data, length * 3);
-	_system->set_palette(data, start, length);
-}
-
-void SwordScreen::fnSetFadeTargetPalette(uint8 start, uint16 length, uint8 *data) {
-	memcpy(_targetPalette + start * 3, data, length * 3);
-	debug(1, "fnSetFadeTargetPalette called");
+void SwordScreen::fnSetPalette(uint8 start, uint16 length, uint32 id, bool fadeUp) {
+	uint8 *palData = (uint8*)_resMan->openFetchRes(id);
+	if (start == 0) // force color 0 to black
+		palData[0] = palData[1] = palData[2] = 0;
+	for (uint32 cnt = 0; cnt < length; cnt++) {
+		_targetPalette[(start + cnt) * 4 + 0] = palData[cnt * 3 + 0] << 2;
+		_targetPalette[(start + cnt) * 4 + 1] = palData[cnt * 3 + 1] << 2;
+		_targetPalette[(start + cnt) * 4 + 2] = palData[cnt * 3 + 2] << 2;
+	}
+	_resMan->resClose(id);
+	if (fadeUp) {
+		_fadingStep = 1;
+		_fadingDirection = 1;
+	} else
+		_system->set_palette(_targetPalette, start, length);
 }
 
 bool SwordScreen::stillFading(void) {
@@ -255,7 +262,7 @@
 	_screenGrid = (uint8*)malloc(_gridSizeX * _gridSizeY);
 	memset(_screenGrid, 0x80, _gridSizeX * _gridSizeY); // force refresh
 	for (uint8 cnt = 0; cnt < _roomDefTable[_currentScreen].totalLayers; cnt++) {
-		// open and lock all resources, will be closed in closeScreen()
+		// open and lock all resources, will be closed in quitScreen()
 		_layerBlocks[cnt] = (uint8*)_resMan->openFetchRes(_roomDefTable[_currentScreen].layers[cnt]);
 		if (cnt > 0)
 			_layerBlocks[cnt] += sizeof(Header);
@@ -271,23 +278,8 @@
 	if (_roomDefTable[_currentScreen].parallax[1])
 		_parallax[1] = (uint8*)_resMan->openFetchRes(_roomDefTable[_currentScreen].parallax[1]);
 
-	// TEMPORARY!
-	uint8 *bgPal = (uint8*)_resMan->openFetchRes(_roomDefTable[_currentScreen].palettes[0]);
-	// uint8 *sprPal = (uint8*)_resMan->openFetchRes(_roomDefTable[_currentScreen].palettes[1]);
-	for (uint16 cnt = 0; cnt < 256; cnt++) {
-		_targetPalette[cnt * 4 + 0] = bgPal[cnt * 3 + 0] << 2;
-		_targetPalette[cnt * 4 + 1] = bgPal[cnt * 3 + 1] << 2;
-		_targetPalette[cnt * 4 + 2] = bgPal[cnt * 3 + 2] << 2;
-	}
-	/*for (uint16 cnt = 0; cnt < 72; cnt++) {
-		_targetPalette[(cnt + 184) * 4 + 0] = bgPal[cnt * 3 + 0];
-		_targetPalette[(cnt + 184) * 4 + 1] = bgPal[cnt * 3 + 1];
-		_targetPalette[(cnt + 184) * 4 + 2] = bgPal[cnt * 3 + 2];
-	}*/
-	_targetPalette[0] = _targetPalette[1] = _targetPalette[2] = 0;
-	_system->set_palette(_targetPalette, 0, 256);	
-	_resMan->resClose(_roomDefTable[_currentScreen].palettes[0]);
-	//_resMan->resClose(_roomDefTable[_currentScreen].palettes[1]);
+	fnSetPalette(0, 184, _roomDefTable[_currentScreen].palettes[0], true);
+	fnSetPalette(184, 72, _roomDefTable[_currentScreen].palettes[1], true);
 }
 
 void SwordScreen::quitScreen(void) {
@@ -731,12 +723,28 @@
 	}
 }
 
+void SwordScreen::fnFlash(uint8 color) {
+	warning("stub: SwordScreen::fnFlash(%d)", color);
+}
+
+// ------------------- SwordMenu screen interface ---------------------------
+
 void SwordScreen::showFrame(uint16 x, uint16 y, uint32 resId, uint32 frameNo) {
-	warning("stub: SwordScreen::showFrame(%d, %d, %d, %d)", x, y, resId, frameNo);
+	FrameHeader *frameHead = _resMan->fetchFrame(_resMan->openFetchRes(resId), frameNo);
+	uint8 *frameData = ((uint8*)frameHead) + sizeof(FrameHeader);
+	_system->copy_rect(frameData, FROM_LE_16(frameHead->width), x, y, FROM_LE_16(frameHead->width), FROM_LE_16(frameHead->height));
+	_resMan->resClose(resId);
 }
 
-void SwordScreen::fnFlash(uint8 color) {
-	warning("stub: SwordScreen::fnFlash(%d)", color);
+void SwordScreen::clearMenu(uint8 menuType) {
+	// isn't there a better way to do this?
+	uint8 *tmp = (uint8*)malloc(640 * 40);
+	memset(tmp, 0, 640 * 40);
+	if (menuType == MENU_BOT)
+		_system->copy_rect(tmp, 640, 0, 440, 640, 40);
+	else
+		_system->copy_rect(tmp, 640, 0, 0, 640, 40);
+	free(tmp);
 }
 
 // ------------------- router debugging code --------------------------------

Index: screen.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword1/screen.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- screen.h	16 Dec 2003 18:23:15 -0000	1.2
+++ screen.h	17 Dec 2003 01:47:47 -0000	1.3
@@ -59,7 +59,6 @@
 class ObjectMan;
 class SwordText; // Text objects use sprites that are created internally at run-time
 				 // the buffer belongs to SwordText, so we need a reference here.
-class SwordRouter;
 class OSystem;
 
 class SwordScreen {
@@ -77,16 +76,16 @@
 	void addToGraphicList(uint8 listId, uint32 objId);
 
 	void recreate();
-	void spritesAndParallax(void); //=> background_parallax, backsprites, sortsprites
-								   //   foreground_parallax, foresprites
+	void spritesAndParallax(void);
+
 	void fadeDownPalette(void);
 	void fadeUpPalette(void);
-	void fnSetPalette(uint8 start, uint16 length, uint8 *data);
-	void fnSetFadeTargetPalette(uint8 start, uint16 length, uint8 *data);
+	void fnSetPalette(uint8 start, uint16 length, uint32 id, bool fadeUp);
 	bool stillFading(void);
 
 	void updateScreen(void);
 	void showFrame(uint16 x, uint16 y, uint32 resId, uint32 frameNo);
+	void clearMenu(uint8 menuType);
 
 	void fnSetParallax(uint32 screen, uint32 resId);
 	void fnFlash(uint8 color);

Index: staticres.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword1/staticres.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- staticres.cpp	16 Dec 2003 02:09:25 -0000	1.1
+++ staticres.cpp	17 Dec 2003 01:47:47 -0000	1.2
@@ -28,6 +28,376 @@
 #include "music.h"
 #include "sound.h"
 
+const MenuObject SwordMenu::_objectDefs[TOTAL_pockets + 1] = {
+	{	// 0 can't use
+		0,
+	},
+	{	// 1 NEWSPAPER
+		menu_newspaper,							// text_desc
+		ICON_NEWSPAPER,							// big_icon_res
+		0,													// big_icon_frame
+		LUGG_NEWSPAPER,							// luggage_icon_res
+		SCR_icon_combine_script,		// use_script
+	},
+	{	// 2 HAZEL_WAND
+		menu_hazel_wand,						// text_desc
+		ICON_HAZEL_WAND,						// big_icon_res
+		0,													// big_icon_frame
+		LUGG_HAZEL_WAND,						// luggage_icon_res
+		SCR_icon_combine_script,		// use_script
+	},
+	{	// 3 BEER_TOWEL
+		0,													// text_desc - SEE MENU.SCR
+		ICON_BEER_TOWEL,						// big_icon_res
+		0,													// big_icon_frame
+		LUGG_BEER_TOWEL,						// luggage_icon_res
+		SCR_icon_combine_script,		// use_script
+	},
+	{	// 4 HOTEL_KEY
+		menu_hotel_key,							// text_desc
+		ICON_HOTEL_KEY,							// big_icon_res
+		0,													// big_icon_frame
+		LUGG_HOTEL_KEY,							// luggage_icon_res
+		SCR_icon_combine_script,		// use_script
+	},
+	{	// 5 BALL
+		menu_ball,									// text_desc
+		ICON_BALL,									// big_icon_res
+		0,													// big_icon_frame
+		LUGG_BALL,									// luggage_icon_res
+		SCR_icon_combine_script,		// use_script
+	},
+	{	// 6 STATUETTE
+		menu_statuette,							// text_desc
+		ICON_STATUETTE,							// big_icon_res
+		0,													// big_icon_frame
+		LUGG_STATUETTE,							// luggage_icon_res
+		SCR_icon_combine_script,		// use_script
+	},
+	{	// 7 RED_NOSE
+		0,													// text_desc - SEE MENU.SCR
+		ICON_RED_NOSE,							// big_icon_res
+		0,													// big_icon_frame
+		LUGG_RED_NOSE,							// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 8 POLISHED_CHALICE
+		menu_polished_chalice,			// text_desc
+		ICON_POLISHED_CHALICE,			// big_icon_res
+		0,													// big_icon_frame
+		LUGG_POLISHED_CHALICE,			// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 9 DOLLAR_BILL
+		menu_dollar_bill,						// text_desc
+		ICON_DOLLAR_BILL,						// big_icon_res
+		0,													// big_icon_frame
+		LUGG_DOLLAR_BILL,						// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 10 PHOTO
+		menu_photograph,						// text_desc
+		ICON_PHOTOGRAPH,						// big_icon_res
+		0,													// big_icon_frame
+		LUGG_PHOTOGRAPH,						// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 11 FLASHLIGHT
+		menu_flashlight,						// text_desc
+		ICON_FLASHLIGHT,						// big_icon_res
+		0,													// big_icon_frame
+		LUGG_FLASHLIGHT,						// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 12 FUSE_WIRE
+		menu_fuse_wire,							// text_desc
+		ICON_FUSE_WIRE,							// big_icon_res
+		0,													// big_icon_frame
+		LUGG_FUSE_WIRE,							// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 13 GEM
+		menu_gem,										// text_desc
+		ICON_GEM,										// big_icon_res
+		0,													// big_icon_frame
+		LUGG_GEM,										// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 14 STATUETTE_PAINT
+		menu_statuette_paint,				// text_desc
+		ICON_STATUETTE_PAINT,				// big_icon_res
+		0,													// big_icon_frame
+		LUGG_STATUETTE_PAINT,				// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 15 STICK
+		menu_stick,									// text_desc
+		ICON_STICK,									// big_icon_res
+		0,													// big_icon_frame
+		LUGG_STICK,									// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 16 EXCAV_KEY
+		menu_excav_key,							// text_desc
+		ICON_EXCAV_KEY,							// big_icon_res
+		0,													// big_icon_frame
+		LUGG_EXCAV_KEY,							// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 17 LAB_PASS
+		menu_lab_pass,							// text_desc
+		ICON_LAB_PASS,							// big_icon_res
+		0,													// big_icon_frame
+		LUGG_LAB_PASS,							// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 18 LIFTING_KEYS
+		menu_lifting_keys,					// text_desc
+		ICON_LIFTING_KEYS,					// big_icon_res
+		0,													// big_icon_frame
+		LUGG_LIFTING_KEYS,					// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 19 MANUSCRIPT
+		menu_manuscript,						// text_desc
+		ICON_MANUSCRIPT,						// big_icon_res
+		0,													// big_icon_frame
+		LUGG_MANUSCRIPT,						// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 20 MATCH_BOOK
+		menu_match_book,						// text_desc
+		ICON_MATCHBOOK,							// big_icon_res
+		0,													// big_icon_frame
+		LUGG_MATCHBOOK,							// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 21 SUIT_MATERIAL
+		menu_suit_material,					// text_desc
+		ICON_SUIT_MATERIAL,					// big_icon_res
+		0,													// big_icon_frame
+		LUGG_SUIT_MATERIAL,					// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 22 STICK_TOWEL
+		menu_stick_towel,						// text_desc
+		ICON_STICK_TOWEL,						// big_icon_res
+		0,													// big_icon_frame
+		LUGG_STICK_TOWEL,						// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 23 PLASTER
+		menu_plaster,								// text_desc
+		ICON_PLASTER,								// big_icon_res
+		0,													// big_icon_frame
+		LUGG_PLASTER,								// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 24 PRESSURE_GAUGE
+		menu_pressure_gauge,				// text_desc
+		ICON_PRESSURE_GAUGE,				// big_icon_res
+		0,													// big_icon_frame
+		LUGG_PRESSURE_GAUGE,				// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 25 RAILWAY_TICKET
+		menu_railway_ticket,				// text_desc
+		ICON_RAILWAY_TICKET,				// big_icon_res
+		0,													// big_icon_frame
+		LUGG_RAILWAY_TICKET,				// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 26 BUZZER
+		menu_buzzer,								// text_desc
+		ICON_BUZZER,								// big_icon_res
+		0,													// big_icon_frame
+		LUGG_BUZZER,								// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 27 ROSSO_CARD
+		menu_rosso_card,						// text_desc
+		ICON_ROSSO_CARD,						// big_icon_res
+		0,													// big_icon_frame
+		LUGG_ROSSO_CARD,						// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 28 TOILET_KEY
+		menu_toilet_key,						// text_desc
+		ICON_TOILET_KEY,						// big_icon_res
+		0,													// big_icon_frame
+		LUGG_TOILET_KEY,						// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 29 SOAP
+		menu_soap,									// text_desc
+		ICON_SOAP,									// big_icon_res
+		0,													// big_icon_frame
+		LUGG_SOAP,									// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 30 STONE_KEY
+		menu_stone_key,							// text_desc
+		ICON_STONE_KEY,							// big_icon_res
+		0,													// big_icon_frame
+		LUGG_STONE_KEY,							// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 31 CHALICE
+		menu_chalice,								// text_desc
+		ICON_CHALICE,								// big_icon_res
+		0,													// big_icon_frame
+		LUGG_CHALICE,								// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 32 TISSUE
+		menu_tissue,								// text_desc
+		ICON_TISSUE,								// big_icon_res
+		0,													// big_icon_frame
+		LUGG_TISSUE,								// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 33 TOILET_BRUSH
+		menu_toilet_brush,					// text_desc
+		ICON_TOILET_BRUSH,					// big_icon_res
+		0,													// big_icon_frame
+		LUGG_TOILET_BRUSH,					// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 34 TOILET_CHAIN
+		menu_toilet_chain,					// text_desc
+		ICON_TOILET_CHAIN,					// big_icon_res
+		0,													// big_icon_frame
+		LUGG_TOILET_CHAIN,					// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 35 TOWEL
+		menu_towel,									// text_desc
+		ICON_TOWEL,									// big_icon_res
+		0,													// big_icon_frame
+		LUGG_TOWEL,									// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 36 TRIPOD
+		menu_tripod,								// text_desc
+		ICON_TRIPOD,								// big_icon_res
+		0,													// big_icon_frame
+		LUGG_TRIPOD,								// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 37 LENS
+		menu_lens,									// text_desc
+		ICON_LENS,									// big_icon_res
+		0,													// big_icon_frame
+		LUGG_LENS,									// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 38 MIRROR
+		menu_mirror,								// text_desc
+		ICON_MIRROR,								// big_icon_res
+		0,													// big_icon_frame
+		LUGG_MIRROR,								// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 39 TOWEL_CUT
+		menu_towel_cut,							// text_desc
+		ICON_TOWEL_CUT,							// big_icon_res
+		0,													// big_icon_frame
+		LUGG_TOWEL_CUT,							// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 40 BIBLE
+		menu_bible,									// text_desc
+		ICON_BIBLE,									// big_icon_res
+		0,													// big_icon_frame
+		LUGG_BIBLE,									// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 41 TISSUE_CHARRED
+		menu_tissue_charred,				// text_desc
+		ICON_TISSUE_CHARRED,				// big_icon_res
+		0,													// big_icon_frame
+		LUGG_TISSUE_CHARRED,				// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 42 FALSE_KEY
+		menu_false_key,							// text_desc
+		ICON_FALSE_KEY,							// big_icon_res
+		0,													// big_icon_frame
+		LUGG_FALSE_KEY,							// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 43 PAINTED_KEY - looks identical to excav key, so uses that icon & luggage
+		menu_painted_key,						// text_desc
+		ICON_EXCAV_KEY,							// big_icon_res
+		0,													// big_icon_frame
+		LUGG_EXCAV_KEY,							// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 44 KEYRING
+		0,													// text_desc - SEE MENU.SCR
+		ICON_KEYRING,								// big_icon_res
+		0,													// big_icon_frame
+		LUGG_KEYRING,								// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 45 SOAP_IMP
+		menu_soap_imp,							// text_desc
+		ICON_SOAP_IMP,							// big_icon_res
+		0,													// big_icon_frame
+		LUGG_SOAP_IMP,							// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 46 SOAP_PLAS
+		menu_soap_plas,							// text_desc
+		ICON_SOAP_PLAS,							// big_icon_res
+		0,													// big_icon_frame
+		LUGG_SOAP_PLAS,							// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 47 COG_1 - the larger cog with spindle attached
+		menu_cog_1,									// text_desc
+		ICON_COG_1,									// big_icon_res
+		0,													// big_icon_frame
+		LUGG_COG_1,									// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 48 COG_2 - the smaller cog, found in the rubble
+		menu_cog_2,									// text_desc
+		ICON_COG_2,									// big_icon_res
+		0,													// big_icon_frame
+		LUGG_COG_2,									// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 49 HANDLE
+		menu_handle,								// text_desc
+		ICON_HANDLE,								// big_icon_res
+		0,													// big_icon_frame
+		LUGG_HANDLE,								// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 50 COIN
+		menu_coin,									// text_desc
+		ICON_COIN,									// big_icon_res
+		0,													// big_icon_frame
+		LUGG_COIN,									// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 51 BIRO
+		menu_biro,									// text_desc
+		ICON_BIRO,									// big_icon_res
+		0,													// big_icon_frame
+		LUGG_BIRO,									// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	},
+	{	// 52 PIPE
+		menu_pipe,									// text_desc
+		ICON_PIPE,									// big_icon_res
+		0,													// big_icon_frame
+		LUGG_PIPE,									// luggage_icon_res
+		SCR_icon_combine_script,			// use_script
+	}
+};
+
 const Subject SwordMenu::_subjectList[TOTAL_subjects] = {
 	{	// 256
 		0,								// subject_res

Index: sword1.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword1/sword1.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- sword1.cpp	17 Dec 2003 01:17:12 -0000	1.4
+++ sword1.cpp	17 Dec 2003 01:47:47 -0000	1.5
@@ -224,6 +224,7 @@
 		if (SwordLogic::_scriptVars[SCREEN] != 53)	// don't fade down after syria pan
 			_screen->fadeDownPalette();
 		while (_screen->stillFading()) {
+			_music->stream();
 			_screen->updateScreen();
 			delay(1000/12);
 			// todo: fade sfx?
@@ -267,6 +268,16 @@
 				break;
 			case OSystem::EVENT_RBUTTONDOWN:
 				_mouseState |= BS1R_BUTTON_DOWN;
+#ifdef _WIN32_WCE
+				_mouseX = event.mouse.x;
+				_mouseY = event.mouse.y;
+#endif
+				break;
+			case OSystem::EVENT_LBUTTONUP:
+				_mouseState |= BS1L_BUTTON_UP;
+				break;
+			case OSystem::EVENT_RBUTTONUP:
+				_mouseState |= BS1R_BUTTON_UP;
 				break;
 			case OSystem::EVENT_QUIT:
 				_system->quit();

Index: sworddefs.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword1/sworddefs.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- sworddefs.h	16 Dec 2003 02:24:30 -0000	1.2
+++ sworddefs.h	17 Dec 2003 01:47:47 -0000	1.3
@@ -48,6 +48,7 @@
 #define LOGIC_new_script 15
 #define LOGIC_pause_for_event 16
 
+#define TOTAL_pockets 52
 #define TOTAL_subjects (375-256+1)
 #define BASE_SUBJECT 256
 
@@ -59,16 +60,6 @@
 #define	MAX_text_obs	2			//text compacts
 #define	TEXT_sect		149			//text compacts exist in section 149, probably after all the megas
 
-/*struct Header {
-	// I took this one from QEADER.H, but it looks like it's something different than _header.
-	// => commented out.
-	int16	version;
-	char	type[4];
-	int32	comp_length;
-	char	compression[4];
-	int32	decomp_length;
-};*/
-
 #if !defined(__GNUC__)
 	#pragma START_PACK_STRUCTS
 #endif
@@ -149,6 +140,65 @@
 #define ALBERT 9568256
 #define DUANE 8781824
 
+#define menu_bible 69
+#define menu_newspaper 1
+#define menu_hazel_wand 2
+#define menu_beer_towel 68
+#define menu_beer_towel_wet 4
+#define menu_beer_towel_damp 5
+#define menu_beer_towel_dried 6
+#define menu_hotel_key 7
+#define menu_ball 8
+#define menu_statuette 9
+#define menu_red_nose_first 10
+#define menu_red_nose_second 11
+#define menu_polished_chalice 12
+#define menu_dollar_bill 13
+#define menu_photograph 14
+#define menu_keyring_first 15
+#define menu_keyring_second 70
+#define menu_keyring_third 17
+#define menu_fuse_wire 18
+#define menu_gem 19
+#define menu_statuette_paint 20
+#define menu_stick 21
+#define menu_excav_key 71
+#define menu_false_key 72
+#define menu_painted_key 73
+#define menu_lab_pass 25
+#define menu_lifting_keys 26
+#define menu_manuscript 27
+#define menu_match_book 28
+#define menu_suit_material 29
+#define menu_stick_towel 30
+#define menu_plaster 31
+#define menu_pressure_gauge 32
+#define menu_railway_ticket 33
+#define menu_buzzer 74
+#define menu_rosso_card 75
+#define menu_toilet_key 36
+#define menu_soap 76
+#define menu_soap_imp 77
+#define menu_soap_plas 78
+#define menu_stone_key 79
+#define menu_chalice 41
+#define menu_tissue 42
+#define menu_toilet_brush 80
+#define menu_toilet_chain 44
+#define menu_towel 45
+#define menu_tripod 46
+#define menu_lens 81
+#define menu_towel_cut 48
+#define menu_mirror 82
+#define menu_tissue_charred 50
+#define menu_cog_1 51
+#define menu_cog_2 52
+#define menu_handle 83
+#define menu_coin 84
+#define menu_biro 55
+#define menu_pipe 56
+#define menu_flashlight 57
+
 #define IT_MCODE                1               // Call an mcode routine
 #define IT_PUSHNUMBER           2               // push a number on the stack
 #define IT_PUSHVARIABLE         3               // push a variable on the stack
@@ -1386,6 +1436,6 @@
 #define GUARD_ROOF_63 4128781
 #define LEFT_TREE_POINTER_71 4653058
 #define RIGHT_TREE_POINTER_71 4653059
-
+#define SCR_icon_combine_script (0*0x10000 + 25)
 
 #endif //SWORDDEFS_H

Index: text.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sword1/text.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- text.cpp	16 Dec 2003 02:09:25 -0000	1.1
+++ text.cpp	17 Dec 2003 01:47:47 -0000	1.2
@@ -49,7 +49,6 @@
 }
 
 uint32 SwordText::lowTextManager(uint8 *ascii, int32 width, uint8 pen) {
-	// get rid of that textId thing!
 	_textCount++;
 	if (_textCount > MAX_TEXT_OBS)
 		error("SwordText::lowTextManager: MAX_TEXT_OBS exceeded!");





More information about the Scummvm-git-logs mailing list