diff options
| author | Paul Gilbert | 2006-09-03 08:39:06 +0000 | 
|---|---|---|
| committer | Paul Gilbert | 2006-09-03 08:39:06 +0000 | 
| commit | 92f2e9691edf0b7466841b8f7c99f2e50eb7feda (patch) | |
| tree | f313d6d1f78fd12375622a2efd050597776a89da | |
| parent | 816cc1a62c3e0a48d50c77a92538b4ada4783fe1 (diff) | |
| download | scummvm-rg350-92f2e9691edf0b7466841b8f7c99f2e50eb7feda.tar.gz scummvm-rg350-92f2e9691edf0b7466841b8f7c99f2e50eb7feda.tar.bz2 scummvm-rg350-92f2e9691edf0b7466841b8f7c99f2e50eb7feda.zip  | |
Fixed handling of player occupied areas during room changes
svn-id: r23826
| -rw-r--r-- | engines/lure/game.cpp | 1 | ||||
| -rw-r--r-- | engines/lure/hotspots.cpp | 11 | ||||
| -rw-r--r-- | engines/lure/hotspots.h | 2 | 
3 files changed, 10 insertions, 4 deletions
diff --git a/engines/lure/game.cpp b/engines/lure/game.cpp index 8e3d70e968..56930f5e4c 100644 --- a/engines/lure/game.cpp +++ b/engines/lure/game.cpp @@ -259,6 +259,7 @@ void Game::playerChangeRoom() {  	player->setRoomNumber(roomNum);  	//player->setPosition((newPos.x & 0xfff8) || 5, newPos.y & 0xfff8);  	player->setPosition(newPos.x, newPos.y); +	player->setOccupied(true);  	room.setRoomNumber(roomNum, false);  } diff --git a/engines/lure/hotspots.cpp b/engines/lure/hotspots.cpp index 63c8b5b953..5fa8f46ac8 100644 --- a/engines/lure/hotspots.cpp +++ b/engines/lure/hotspots.cpp @@ -2146,9 +2146,10 @@ void HotspotTickHandlers::standardCharacterAnimHandler(Hotspot &h) {  				// Walking done  				h.currentActions().top().setAction(DISPATCH_ACTION); -			if (h.destHotspotId() != 0)  +			if (h.destHotspotId() != 0) {  				// Walking to an exit, check for any required room change  				Support::checkRoomChange(h); +			}  		}  		h.setOccupied(true); @@ -2448,7 +2449,9 @@ void HotspotTickHandlers::playerAnimHandler(Hotspot &h) {  			}  			// Check for whether need to change room -			Support::checkRoomChange(h); +			if (Support::checkRoomChange(h)) +				// Player changinge room - break now to avoid resetting occupied status +				break;  		}  		h.setOccupied(true);  		break; @@ -3461,7 +3464,7 @@ bool Support::checkForIntersectingCharacter(Hotspot &h) {  // Check whether a character needs to change the room they're in -void Support::checkRoomChange(Hotspot &h) { +bool Support::checkRoomChange(Hotspot &h) {  	int16 x = h.x() + (h.widthCopy() >> 1);  	int16 y = h.y() + h.heightCopy() - (h.yCorrection() >> 1); @@ -3476,6 +3479,8 @@ void Support::checkRoomChange(Hotspot &h) {  				exitRec->x, exitRec->y, exitRec->direction);  		}  	} + +	return (exitRec != NULL);  }  void Support::characterChangeRoom(Hotspot &h, uint16 roomNumber,  diff --git a/engines/lure/hotspots.h b/engines/lure/hotspots.h index ae35e3f148..e58567e778 100644 --- a/engines/lure/hotspots.h +++ b/engines/lure/hotspots.h @@ -40,7 +40,7 @@ private:  public:  	static int findIntersectingCharacters(Hotspot &h, uint16 *charList);   	static bool checkForIntersectingCharacter(Hotspot &h); -	static void checkRoomChange(Hotspot &h); +	static bool checkRoomChange(Hotspot &h);  	static void characterChangeRoom(Hotspot &h, uint16 roomNumber,   								  int16 newX, int16 newY, Direction dir);  	static bool charactersIntersecting(HotspotData *hotspot1, HotspotData *hotspot2);  | 
