diff options
| -rw-r--r-- | engines/lab/dispman.cpp | 36 | ||||
| -rw-r--r-- | engines/lab/engine.cpp | 54 | ||||
| -rw-r--r-- | engines/lab/eventman.h | 11 | ||||
| -rw-r--r-- | engines/lab/interface.cpp | 11 | ||||
| -rw-r--r-- | engines/lab/lab.h | 16 | ||||
| -rw-r--r-- | engines/lab/map.cpp | 6 | ||||
| -rw-r--r-- | engines/lab/special.cpp | 6 | 
7 files changed, 61 insertions, 79 deletions
| diff --git a/engines/lab/dispman.cpp b/engines/lab/dispman.cpp index 097521fcb0..8ff6a61675 100644 --- a/engines/lab/dispman.cpp +++ b/engines/lab/dispman.cpp @@ -335,16 +335,16 @@ void DisplayMan::setUpScreens() {  	// It's very convenient to have those shortcut, so I added them  	// for all versions. (Strangerke)  	uint16 y = _vm->_utils->vgaScaleY(173) - _vm->_utils->svgaCord(2); -	moveButtonList->push_back(e->createButton(  1, y, 0,          't', moveImages[0],  moveImages[1])); -	moveButtonList->push_back(e->createButton( 33, y, 1,          'm', moveImages[2],  moveImages[3])); -	moveButtonList->push_back(e->createButton( 65, y, 2,          'o', moveImages[4],  moveImages[5])); -	moveButtonList->push_back(e->createButton( 97, y, 3,          'c', moveImages[6],  moveImages[7])); -	moveButtonList->push_back(e->createButton(129, y, 4,          'l', moveImages[8],  moveImages[9])); -	moveButtonList->push_back(e->createButton(161, y, 5,          'i', moveImages[12], moveImages[13])); -	moveButtonList->push_back(e->createButton(193, y, 6, VKEY_LTARROW, moveImages[14], moveImages[15])); -	moveButtonList->push_back(e->createButton(225, y, 7, VKEY_UPARROW, moveImages[16], moveImages[17])); -	moveButtonList->push_back(e->createButton(257, y, 8, VKEY_RTARROW, moveImages[18], moveImages[19])); -	moveButtonList->push_back(e->createButton(289, y, 9,          'p', moveImages[10], moveImages[11])); +	moveButtonList->push_back(e->createButton(  1, y, 0, Common::KEYCODE_t,     moveImages[0],  moveImages[1])); +	moveButtonList->push_back(e->createButton( 33, y, 1, Common::KEYCODE_m,     moveImages[2],  moveImages[3])); +	moveButtonList->push_back(e->createButton( 65, y, 2, Common::KEYCODE_o,     moveImages[4],  moveImages[5])); +	moveButtonList->push_back(e->createButton( 97, y, 3, Common::KEYCODE_c,     moveImages[6],  moveImages[7])); +	moveButtonList->push_back(e->createButton(129, y, 4, Common::KEYCODE_l,     moveImages[8],  moveImages[9])); +	moveButtonList->push_back(e->createButton(161, y, 5, Common::KEYCODE_i,     moveImages[12], moveImages[13])); +	moveButtonList->push_back(e->createButton(193, y, 6, Common::KEYCODE_LEFT,  moveImages[14], moveImages[15])); +	moveButtonList->push_back(e->createButton(225, y, 7, Common::KEYCODE_UP,    moveImages[16], moveImages[17])); +	moveButtonList->push_back(e->createButton(257, y, 8, Common::KEYCODE_RIGHT, moveImages[18], moveImages[19])); +	moveButtonList->push_back(e->createButton(289, y, 9, Common::KEYCODE_p,     moveImages[10], moveImages[11]));  	// TODO: The INV file is not present in the Amiga version  	Common::File *invFile = _vm->_resource->openDataFile("P:Inv"); @@ -355,18 +355,18 @@ void DisplayMan::setUpScreens() {  		for (int imgIdx = 0; imgIdx < 6; imgIdx++)  			_vm->_invImages[imgIdx] = new Image(invFile, _vm);  	} -	invButtonList->push_back(e->createButton( 24, y, 0,          'm', invImages[0],   invImages[1])); -	invButtonList->push_back(e->createButton( 56, y, 1,          'g', invImages[2],   invImages[3])); -	invButtonList->push_back(e->createButton( 94, y, 2,          'u', invImages[4],   invImages[5])); -	invButtonList->push_back(e->createButton(126, y, 3,          'l', moveImages[8],  moveImages[9])); -	invButtonList->push_back(e->createButton(164, y, 4, VKEY_LTARROW, moveImages[14], moveImages[15])); -	invButtonList->push_back(e->createButton(196, y, 5, VKEY_RTARROW, moveImages[18], moveImages[19])); +	invButtonList->push_back(e->createButton( 24, y, 0, Common::KEYCODE_ESCAPE, invImages[0],   invImages[1])); +	invButtonList->push_back(e->createButton( 56, y, 1, Common::KEYCODE_g,      invImages[2],   invImages[3])); +	invButtonList->push_back(e->createButton( 94, y, 2, Common::KEYCODE_u,      invImages[4],   invImages[5])); +	invButtonList->push_back(e->createButton(126, y, 3, Common::KEYCODE_l,      moveImages[8],  moveImages[9])); +	invButtonList->push_back(e->createButton(164, y, 4, Common::KEYCODE_LEFT,   moveImages[14], moveImages[15])); +	invButtonList->push_back(e->createButton(196, y, 5, Common::KEYCODE_RIGHT,  moveImages[18], moveImages[19]));  	// The windows version has 2 extra buttons for breadcrumb trail  	// CHECKME: the game is really hard to play without those, maybe we could add something to enable that.  	if (_vm->getPlatform() == Common::kPlatformWindows) { -		invButtonList->push_back(e->createButton(234, y, 6, 'b', invImages[6], invImages[7])); -		invButtonList->push_back(e->createButton(266, y, 7, 'f', invImages[8], invImages[9])); +		invButtonList->push_back(e->createButton(234, y, 6, Common::KEYCODE_b, invImages[6], invImages[7])); +		invButtonList->push_back(e->createButton(266, y, 7, Common::KEYCODE_f, invImages[8], invImages[9]));  	}  	delete invFile; diff --git a/engines/lab/engine.cpp b/engines/lab/engine.cpp index 021456f7ff..499ae79346 100644 --- a/engines/lab/engine.cpp +++ b/engines/lab/engine.cpp @@ -77,19 +77,6 @@ enum Monitors {  	//kMonitorLevers = 82  }; -enum MainButtons { -	kButtonPickup, -	kButtonUse, -	kButtonOpen, -	kButtonClose, -	kButtonLook, -	kButtonInventory, -	kButtonLeft, -	kButtonForward, -	kButtonRight, -	kButtonMap -}; -  enum AltButtons {  	kButtonMainDisplay,  	kButtonSaveLoad, @@ -505,24 +492,9 @@ void LabEngine::mainGameLoop() {  			_anim->diffNextFrame();  			if (_followingCrumbs) { -				int result = followCrumbs(); - -				if (result != 0) { -					uint16 code = 0; -					switch (result) { -					case VKEY_UPARROW: -						code = kButtonForward; -						break; -					case VKEY_LTARROW: -						code = kButtonLeft; -						break; -					case VKEY_RTARROW: -						code = kButtonRight; -						break; -					default: -						break; -					} +				MainButton code = followCrumbs(); +				if (code == kButtonForward || code == kButtonLeft || code == kButtonRight) {  					gotMessage = true;  					mayShowCrumbIndicator();  					_graphics->screenUpdate(); @@ -1100,18 +1072,18 @@ void LabEngine::go() {  	_music->freeMusic();  } -int LabEngine::followCrumbs() { +MainButton LabEngine::followCrumbs() {  	// kDirectionNorth, kDirectionSouth, kDirectionEast, kDirectionWest -	int movement[4][4] = { -		{ VKEY_UPARROW, VKEY_RTARROW, VKEY_RTARROW, VKEY_LTARROW }, -		{ VKEY_RTARROW, VKEY_UPARROW, VKEY_LTARROW, VKEY_RTARROW }, -		{ VKEY_LTARROW, VKEY_RTARROW, VKEY_UPARROW, VKEY_RTARROW }, -		{ VKEY_RTARROW, VKEY_LTARROW, VKEY_RTARROW, VKEY_UPARROW } +	MainButton movement[4][4] = { +		{ kButtonForward, kButtonRight, kButtonRight, kButtonLeft }, +		{ kButtonRight, kButtonForward, kButtonLeft, kButtonRight }, +		{ kButtonLeft, kButtonRight, kButtonForward, kButtonRight }, +		{ kButtonRight, kButtonLeft, kButtonRight, kButtonForward }  	};  	if (_isCrumbWaiting) {  		if (_system->getMillis() <= _crumbTimestamp) -			return 0; +			return kButtonNone;  		_isCrumbWaiting = false;  	} @@ -1125,10 +1097,10 @@ int LabEngine::followCrumbs() {  		_breadCrumbs[0]._roomNum = 0;  		_droppingCrumbs = false;  		_followingCrumbs = false; -		return 0; +		return kButtonNone;  	} -	int exitDir; +	Direction exitDir;  	// which direction is last crumb  	if (_breadCrumbs[_numCrumbs]._direction == kDirectionEast)  		exitDir = kDirectionWest; @@ -1139,7 +1111,7 @@ int LabEngine::followCrumbs() {  	else  		exitDir = kDirectionNorth; -	int moveDir = movement[_direction][exitDir]; +	MainButton moveDir = movement[_direction][exitDir];  	if (_numCrumbs == 0) {  		_isCrumbTurning = false; @@ -1147,7 +1119,7 @@ int LabEngine::followCrumbs() {  		_droppingCrumbs = false;  		_followingCrumbs = false;  	} else { -		_isCrumbTurning = (moveDir != VKEY_UPARROW); +		_isCrumbTurning = (moveDir != kButtonForward);  		_isCrumbWaiting = true;  		int theDelay = (_followCrumbsFast ? 1000 / 4 : 1000); diff --git a/engines/lab/eventman.h b/engines/lab/eventman.h index f0e04fcb55..3a10fb98e7 100644 --- a/engines/lab/eventman.h +++ b/engines/lab/eventman.h @@ -46,11 +46,6 @@ enum MessageClasses {  	kMessageDeltaMove  }; -#define VKEY_UPARROW    273 -#define VKEY_DNARROW    274 -#define VKEY_RTARROW    275 -#define VKEY_LTARROW    276 -  struct IntuiMessage {  	uint32 _msgClass;  	uint16 _code; // KeyCode or Button Id @@ -61,7 +56,7 @@ struct IntuiMessage {  struct Button {  	uint16 _x, _y, _buttonId; -	uint16 _keyEquiv; // if not zero, a key that activates button +	Common::KeyCode _keyEquiv; // if not zero, a key that activates button  	bool _isEnabled;  	Image *_image, *_altImage;  }; @@ -95,7 +90,7 @@ private:  	 * Checks whether or not the coords fall within one of the buttons in a list  	 * of buttons.  	 */ -	Button *checkNumButtonHit(ButtonList *buttonList, uint16 key); +	Button *checkNumButtonHit(ButtonList *buttonList, Common::KeyCode key);  	/**  	 * Make a key press have the right case for a button KeyEquiv value. @@ -106,7 +101,7 @@ public:  	EventManager (LabEngine *vm);  	void attachButtonList(ButtonList *buttonList); -	Button *createButton(uint16 x, uint16 y, uint16 id, uint16 key, Image *image, Image *altImage); +	Button *createButton(uint16 x, uint16 y, uint16 id, Common::KeyCode key, Image *image, Image *altImage);  	void toggleButton(Button *button, uint16 penColor, bool enable);  	/** diff --git a/engines/lab/interface.cpp b/engines/lab/interface.cpp index 4d00d7af20..85d5897fc7 100644 --- a/engines/lab/interface.cpp +++ b/engines/lab/interface.cpp @@ -39,7 +39,7 @@  namespace Lab { -Button *EventManager::createButton(uint16 x, uint16 y, uint16 id, uint16 key, Image *image, Image *altImage) { +Button *EventManager::createButton(uint16 x, uint16 y, uint16 id, Common::KeyCode key, Image *image, Image *altImage) {  	Button *button = new Button();  	if (button) { @@ -92,7 +92,7 @@ uint16 EventManager::makeButtonKeyEquiv(uint16 key) {  	return key;  } -Button *EventManager::checkNumButtonHit(ButtonList *buttonList, uint16 key) { +Button *EventManager::checkNumButtonHit(ButtonList *buttonList, Common::KeyCode key) {  	uint16 gkey = key - '0';  	if (!buttonList) @@ -100,9 +100,10 @@ Button *EventManager::checkNumButtonHit(ButtonList *buttonList, uint16 key) {  	for (ButtonList::iterator buttonItr = buttonList->begin(); buttonItr != buttonList->end(); ++buttonItr) {  		Button *button = *buttonItr; -		if (((gkey - 1 == button->_buttonId) || ((gkey == 0) && (button->_buttonId == 9)) -		 || ((button->_keyEquiv != 0) && (makeButtonKeyEquiv(key) == button->_keyEquiv))) -			  && button->_isEnabled) { +		if (!button->_isEnabled) +			continue; + +		if ((gkey - 1 == button->_buttonId) || (gkey == 0 && button->_buttonId == 9) || (button->_keyEquiv != Common::KEYCODE_INVALID && key == button->_keyEquiv)) {  			button->_altImage->drawImage(button->_x, button->_y);  			_vm->_system->delayMillis(80);  			button->_image->drawImage(button->_x, button->_y); diff --git a/engines/lab/lab.h b/engines/lab/lab.h index 37415057ab..e3bd5e29bf 100644 --- a/engines/lab/lab.h +++ b/engines/lab/lab.h @@ -97,6 +97,20 @@ enum Direction {  	kDirectionWest  }; +enum MainButton { +	kButtonNone = -1, +	kButtonPickup, +	kButtonUse, +	kButtonOpen, +	kButtonClose, +	kButtonLook, +	kButtonInventory, +	kButtonLeft, +	kButtonForward, +	kButtonRight, +	kButtonMap +}; +  class LabEngine : public Engine {  private:  	bool _interfaceOff; @@ -346,7 +360,7 @@ private:  	/**  	 * New code to allow quick(er) return navigation in game.  	 */ -	int followCrumbs(); +	MainButton followCrumbs();  	void freeMapData();  	void freeScreens();  	bool fromCrumbs(uint32 tmpClass, uint16 code, uint16 qualifier, Common::Point tmpPos, diff --git a/engines/lab/map.cpp b/engines/lab/map.cpp index d84f8528d0..bc766f4b3b 100644 --- a/engines/lab/map.cpp +++ b/engines/lab/map.cpp @@ -75,9 +75,9 @@ void LabEngine::loadMapData() {  	_imgPath = new Image(mapImages, this);  	_imgBridge = new Image(mapImages, this); -	_mapButtonList.push_back(_event->createButton( 8,  _utils->vgaScaleY(105), 0, VKEY_LTARROW, new Image(mapImages, this), new Image(mapImages, this)));	// back -	_mapButtonList.push_back(_event->createButton( 55, _utils->vgaScaleY(105), 1, VKEY_UPARROW, new Image(mapImages, this), new Image(mapImages, this)));	// up -	_mapButtonList.push_back(_event->createButton(101, _utils->vgaScaleY(105), 2, VKEY_DNARROW, new Image(mapImages, this), new Image(mapImages, this)));	// down +	_mapButtonList.push_back(_event->createButton( 8,  _utils->vgaScaleY(105), 0, Common::KEYCODE_ESCAPE, new Image(mapImages, this), new Image(mapImages, this)));	// back +	_mapButtonList.push_back(_event->createButton( 55, _utils->vgaScaleY(105), 1, Common::KEYCODE_UP,     new Image(mapImages, this), new Image(mapImages, this)));	// up +	_mapButtonList.push_back(_event->createButton(101, _utils->vgaScaleY(105), 2, Common::KEYCODE_DOWN,   new Image(mapImages, this), new Image(mapImages, this)));	// down  	delete mapImages; diff --git a/engines/lab/special.cpp b/engines/lab/special.cpp index 81d6bead84..e15561d9fb 100644 --- a/engines/lab/special.cpp +++ b/engines/lab/special.cpp @@ -128,9 +128,9 @@ void LabEngine::loadJournalData() {  	_journalTextTitle = _resource->getText("Lab:Rooms/jt");  	Common::File *journalFile = _resource->openDataFile("P:JImage"); -	_journalButtonList.push_back(_event->createButton( 80, _utils->vgaScaleY(162) + _utils->svgaCord(1), 0, VKEY_LTARROW, new Image(journalFile, this), new Image(journalFile, this)));	// back -	_journalButtonList.push_back(_event->createButton(194, _utils->vgaScaleY(162) + _utils->svgaCord(1), 2,            0, new Image(journalFile, this), new Image(journalFile, this)));	// cancel -	_journalButtonList.push_back(_event->createButton(144, _utils->vgaScaleY(164) - _utils->svgaCord(1), 1, VKEY_RTARROW, new Image(journalFile, this), new Image(journalFile, this)));	// forward +	_journalButtonList.push_back(_event->createButton( 80, _utils->vgaScaleY(162) + _utils->svgaCord(1), 0,  Common::KEYCODE_LEFT,   new Image(journalFile, this), new Image(journalFile, this)));	// back +	_journalButtonList.push_back(_event->createButton(194, _utils->vgaScaleY(162) + _utils->svgaCord(1), 2,  Common::KEYCODE_ESCAPE, new Image(journalFile, this), new Image(journalFile, this)));	// cancel +	_journalButtonList.push_back(_event->createButton(144, _utils->vgaScaleY(164) - _utils->svgaCord(1), 1,  Common::KEYCODE_RIGHT,  new Image(journalFile, this), new Image(journalFile, this)));	// forward  	delete journalFile;  	_anim->_noPalChange = true; | 
