[Scummvm-git-logs] scummvm master -> bf69b25e33189581848412e77624865aa55ba234

wjp wjp at usecode.org
Tue Nov 14 19:19:10 CET 2017


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
bf69b25e33 DRASCULA: Revert range 4dbed774..1f1d8607


Commit: bf69b25e33189581848412e77624865aa55ba234
    https://github.com/scummvm/scummvm/commit/bf69b25e33189581848412e77624865aa55ba234
Author: Willem Jan Palenstijn (wjp at usecode.org)
Date: 2017-11-14T19:14:00+01:00

Commit Message:
DRASCULA: Revert range 4dbed774..1f1d8607

This reverts
1f1d8607 DRASCULA: Merge the floor coordinates into _walkRect
1e1b6f7c DRASCULA: Rename gotoObject() to walkToPoint() and simplify it
2bf05c2a DRASCULA: Clean up room variables, and simplify some related checks

Reverting due to unanswered questions about why the changes in behaviour
in 2bf05c2a746065f373ac136c994714dae376cdbc are correct.

Changed paths:
    engines/drascula/animation.cpp
    engines/drascula/drascula.cpp
    engines/drascula/drascula.h
    engines/drascula/interface.cpp
    engines/drascula/objects.cpp
    engines/drascula/rooms.cpp


diff --git a/engines/drascula/animation.cpp b/engines/drascula/animation.cpp
index c89e5ff..741c145 100644
--- a/engines/drascula/animation.cpp
+++ b/engines/drascula/animation.cpp
@@ -362,7 +362,7 @@ void DrasculaEngine::animation_2_1() {
 
 	int l;
 
-	walkToPoint(Common::Point(231, 91));
+	gotoObject(231, 91);
 	_characterVisible = false;
 
 	term_int = 0;
@@ -439,7 +439,7 @@ void DrasculaEngine::animation_2_1() {
 		if (animate("lev.bin", 15))
 			break;
 
-		walkToPoint(Common::Point(100 + curWidth / 2, 99 + curHeight));
+		gotoObject(100 + curWidth / 2, 99 + curHeight);
 		if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
 			break;
 		trackProtagonist = 1;
@@ -484,7 +484,7 @@ void DrasculaEngine::animation_2_1() {
 		pause(118);
 		if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
 			break;
-		walkToPoint(Common::Point(132, 97 + curHeight));
+		gotoObject(132, 97 + curHeight);
 		pause(60);
 		if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
 			break;
@@ -492,7 +492,7 @@ void DrasculaEngine::animation_2_1() {
 		if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
 			break;
 		talk_bj(12);
-		walkToPoint(Common::Point(157, 98 + curHeight));
+		gotoObject(157, 98 + curHeight);
 		if (animate("bes.bin", 16))
 			break;
 		playMusic(11);
@@ -880,8 +880,8 @@ void DrasculaEngine::animation_23_2() {
 	trackVonBraun = 1;
 	talk_vonBraun(16, kVonBraunNormal);
 	trackVonBraun = 2;
-	walkToPoint(Common::Point(157, 147));
-	walkToPoint(Common::Point(131, 149));
+	gotoObject(157, 147);
+	gotoObject(131, 149);
 	trackProtagonist = 0;
 	animation_14_2();
 	if (flags[25] == 0)
@@ -1024,7 +1024,7 @@ void DrasculaEngine::animation_31_2() {
 	talk_vonBraun(44, kVonBraunNormal);
 	placeVonBraun(-50);
 	pause(15);
-	walkToPoint(Common::Point(159, 140));
+	gotoObject(159, 140);
 	loadPic(99, backSurface);
 
 	playTalkSequence(31);	// sequence 31, chapter 2
@@ -1041,8 +1041,8 @@ void DrasculaEngine::animation_31_2() {
 void DrasculaEngine::animation_35_2() {
 	debug(4, "animation_35_2()");
 
-	walkToPoint(Common::Point(96, 165));
-	walkToPoint(Common::Point(79, 165));
+	gotoObject(96, 165);
+	gotoObject(79, 165);
 
 	updateRoom();
 	updateScreen();
@@ -1130,7 +1130,7 @@ void DrasculaEngine::animation_2_3() {
 	loadPic(97, extraSurface);
 	loadPic(99, backSurface);
 
-	walkToPoint(Common::Point(332, 127));
+	gotoObject(332, 127);
 }
 
 void DrasculaEngine::animation_6_3() {
@@ -1221,7 +1221,7 @@ void DrasculaEngine::animation_1_5() {
 		talk_bj(19);
 		talk(229);
 		pause(5);
-		walkToPoint(Common::Point(114, 170));
+		gotoObject(114, 170);
 		trackProtagonist = 3;
 		talk(431);
 		talk_bj(20);
@@ -1265,7 +1265,7 @@ void DrasculaEngine::animation_5_5(){
 	selectVerb(kVerbNone);
 	removeObject(8);
 
-	walkToPoint(Common::Point(curX - 19, curY + curHeight));
+	gotoObject(curX - 19, curY + curHeight);
 	trackProtagonist = 1;
 	updateRoom();
 	updateScreen();
@@ -1429,8 +1429,8 @@ void DrasculaEngine::animation_12_5() {
 
 	loadPic(99, backSurface);
 
-	walkToPoint(Common::Point(40, 169));
-	walkToPoint(Common::Point(-14, 175));
+	gotoObject(40, 169);
+	gotoObject(-14, 175);
 
 	doBreak = 1;
 	previousMusic = roomMusic;
@@ -1487,7 +1487,7 @@ void DrasculaEngine::animation_14_5() {
 	pause(17);
 	trackProtagonist = 3;
 	talk(246);
-	walkToPoint(Common::Point(89, 160));
+	gotoObject(89, 160);
 	flags[10] = 1;
 	playSound(7);
 	updateRoom();
@@ -1659,7 +1659,7 @@ void DrasculaEngine::animation_9_6() {
 	updateScreen();
 	fadeFromBlack(0);
 	pause(96);
-	walkToPoint(Common::Point(116, 178));
+	gotoObject(116, 178);
 	trackProtagonist = 2;
 	updateRoom();
 	updateScreen();
@@ -1844,7 +1844,7 @@ void DrasculaEngine::animation_24_2() {
 	debug(4, "animation_24_2()");
 
 	if (curX < 178)
-		walkToPoint(Common::Point(208, 136));
+		gotoObject(208, 136);
 	trackProtagonist = 3;
 	updateRoom();
 	pause(3);
@@ -2139,8 +2139,8 @@ void DrasculaEngine::animation_5_4(){
 
 	trackProtagonist = 3;
 	loadPic("anh_dr.alg", backSurface);
-	walkToPoint(Common::Point(99, 160));
-	walkToPoint(Common::Point(38, 177));
+	gotoObject(99, 160);
+	gotoObject(38, 177);
 	_characterVisible = false;
 	updateRoom();
 	updateScreen();
diff --git a/engines/drascula/drascula.cpp b/engines/drascula/drascula.cpp
index 3f840b0..1f3f0c6 100644
--- a/engines/drascula/drascula.cpp
+++ b/engines/drascula/drascula.cpp
@@ -94,6 +94,10 @@ DrasculaEngine::DrasculaEngine(OSystem *syst, const DrasculaGameDescription *gam
 	_talkSequencesSize = 0;
 	_numLangs = 0;
 	feetHeight = 0;
+	floorX1 = 0;
+	floorY1 = 0;
+	floorX2 = 0;
+	floorY2 = 0;
 	lowerLimit = 0;
 	upperLimit = 0;
 	trackFinal = 0;
@@ -440,7 +444,7 @@ bool DrasculaEngine::runCurrentChapter() {
 			enterRoom(62);
 			curX = -20;
 			curY = 56;
-			walkToPoint(Common::Point(65, 145));
+			gotoObject(65, 145);
 		}
 
 		// REMINDER: This is a good place to debug animations
@@ -546,14 +550,14 @@ bool DrasculaEngine::runCurrentChapter() {
 			// made the character start walking off screen, as his actual position was
 			// different than the displayed one
 			if (_roomNumber == 3 && (curX == 279) && (curY + curHeight == 101)) {
-				walkToPoint(Common::Point(178, 121));
-				walkToPoint(Common::Point(169, 135));
+				gotoObject(178, 121);
+				gotoObject(169, 135);
 			} else if (_roomNumber == 14 && (curX == 214) && (curY + curHeight == 121)) {
 				_walkToObject = true;
-				walkToPoint(Common::Point(190, 130));
+				gotoObject(190, 130);
 			} else if (_roomNumber == 14 && (curX == 246) && (curY + curHeight == 112)) {
 				_walkToObject = true;
-				walkToPoint(Common::Point(190, 130));
+				gotoObject(190, 130);
 			}
 		}
 
@@ -740,7 +744,8 @@ bool DrasculaEngine::verify1() {
 		removeObject();
 	else {
 		for (l = 0; l < numRoomObjs; l++) {
-			if (_objectRect[l].contains(Common::Point(_mouseX, _mouseY)) && doBreak == 0) {
+			if (_mouseX >= _objectX1[l] && _mouseY >= _objectY1[l]
+					&& _mouseX <= _objectX2[l] && _mouseY <= _objectY2[l] && doBreak == 0) {
 				if (exitRoom(l))
 					return true;
 				if (doBreak == 1)
@@ -753,9 +758,10 @@ bool DrasculaEngine::verify1() {
 			doBreak = 1;
 
 		for (l = 0; l < numRoomObjs; l++) {
-			if (_objectRect[l].contains(Common::Point(_mouseX, _mouseY)) && doBreak == 0) {
-				roomX = _roomObject[l].x;
-				roomY = _roomObject[l].y;
+			if (_mouseX > _objectX1[l] && _mouseY > _objectY1[l]
+					&& _mouseX < _objectX2[l] && _mouseY < _objectY2[l] && doBreak == 0) {
+				roomX = roomObjX[l];
+				roomY = roomObjY[l];
 				trackFinal = trackObj[l];
 				doBreak = 1;
 				_walkToObject = true;
@@ -764,8 +770,8 @@ bool DrasculaEngine::verify1() {
 		}
 
 		if (doBreak == 0) {
-			roomX = CLIP<int16>(_mouseX, _walkRect.left, _walkRect.right);
-			roomY = CLIP<int16>(_mouseY, _walkRect.top + feetHeight, _walkRect.bottom);
+			roomX = CLIP(_mouseX, floorX1, floorX2);
+			roomY = CLIP(_mouseY, floorY1 + feetHeight, floorY2);
 			startWalking();
 		}
 		doBreak = 0;
@@ -786,10 +792,11 @@ bool DrasculaEngine::verify2() {
 				return true;
 		} else {
 			for (l = 0; l < numRoomObjs; l++) {
-				if (_objectRect[l].contains(Common::Point(_mouseX, _mouseY)) && visible[l] == 1) {
+				if (_mouseX > _objectX1[l] && _mouseY > _objectY1[l]
+						&& _mouseX < _objectX2[l] && _mouseY < _objectY2[l] && visible[l] == 1) {
 					trackFinal = trackObj[l];
 					_walkToObject = true;
-					walkToPoint(_roomObject[l]);
+					gotoObject(roomObjX[l], roomObjY[l]);
 					if (checkAction(objectNum[l]))
 						return true;
 					if (currentChapter == 4)
diff --git a/engines/drascula/drascula.h b/engines/drascula/drascula.h
index a7eadcd..fbc29ed 100644
--- a/engines/drascula/drascula.h
+++ b/engines/drascula/drascula.h
@@ -420,13 +420,11 @@ public:
 	char iconName[44][13];
 
 	int objectNum[40], visible[40], isDoor[40];
-	int trackObj[40];
-	Common::Point _roomObject[40];
+	int roomObjX[40], roomObjY[40], trackObj[40];
 	int inventoryObjects[43];
-	int _doorDestRoom[40];
-	Common::Point _doorDestPoint[40];
-	int trackCharacter_alkeva[40], _roomExitId[40];
-	Common::Rect _objectRect[40];
+	char _targetSurface[40][20];
+	int _destX[40], _destY[40], trackCharacter_alkeva[40], roomExits[40];
+	int _objectX1[40], _objectY1[40], _objectX2[40], _objectY2[40];
 	int takeObject, pickedObject;
 	bool _subtitlesDisabled;
 	bool _menuBar, _menuScreen, _hasName;
@@ -443,7 +441,7 @@ public:
 	int doBreak;
 	int stepX, stepY;
 	int curHeight, curWidth, feetHeight;
-	Common::Rect _walkRect;
+	int floorX1, floorY1, floorX2, floorY2;
 	int lowerLimit, upperLimit;
 	int trackFinal;
 	bool _walkToObject;
@@ -487,7 +485,7 @@ public:
 
 	void enterRoom(int);
 	void clearRoom();
-	void walkToPoint(Common::Point pos);
+	void gotoObject(int, int);
 	void moveCursor();
 	void checkObjects();
 	void selectVerbFromBar();
diff --git a/engines/drascula/interface.cpp b/engines/drascula/interface.cpp
index a0656e1..07f192c 100644
--- a/engines/drascula/interface.cpp
+++ b/engines/drascula/interface.cpp
@@ -165,7 +165,9 @@ void DrasculaEngine::showMap() {
 	_hasName = false;
 
 	for (int l = 0; l < numRoomObjs; l++) {
-		if (_objectRect[l].contains(Common::Point(_mouseX, _mouseY)) && visible[l] == 1) {
+		if (_mouseX > _objectX1[l] && _mouseY > _objectY1[l]
+				&& _mouseX < _objectX2[l] && _mouseY < _objectY2[l]
+				&& visible[l] == 1) {
 			strcpy(textName, objName[l]);
 			_hasName = true;
 		}
diff --git a/engines/drascula/objects.cpp b/engines/drascula/objects.cpp
index 65c042a..cff26c9 100644
--- a/engines/drascula/objects.cpp
+++ b/engines/drascula/objects.cpp
@@ -57,7 +57,7 @@ void DrasculaEngine::chooseObject(int object) {
 	pickedObject = object;
 }
 
-void DrasculaEngine::walkToPoint(Common::Point pos) {
+void DrasculaEngine::gotoObject(int pointX, int pointY) {
 	bool cursorVisible = isCursorVisible();
 	hideCursor();
 
@@ -70,8 +70,8 @@ void DrasculaEngine::walkToPoint(Common::Point pos) {
 			return;
 		}
 	}
-	roomX = pos.x;
-	roomY = pos.y;
+	roomX = pointX;
+	roomY = pointY;
 	startWalking();
 
 	while (!shouldQuit()) {
@@ -102,7 +102,9 @@ void DrasculaEngine::checkObjects() {
 	_hasName = false;
 
 	for (l = 0; l < numRoomObjs; l++) {
-		if (_objectRect[l].contains(Common::Point(_mouseX, _mouseY)) && visible[l] == 1 && isDoor[l] == 0) {
+		if (_mouseX > _objectX1[l] && _mouseY > _objectY1[l]
+				&& _mouseX < _objectX2[l] && _mouseY < _objectY2[l]
+				&& visible[l] == 1 && isDoor[l] == 0) {
 			strcpy(textName, objName[l]);
 			_hasName = true;
 		}
diff --git a/engines/drascula/rooms.cpp b/engines/drascula/rooms.cpp
index f99f00c..75d2928 100644
--- a/engines/drascula/rooms.cpp
+++ b/engines/drascula/rooms.cpp
@@ -690,7 +690,7 @@ bool DrasculaEngine::room_26(int fl) {
 	else if (pickedObject == 16 && fl == 50 && flags[18] == 1 && flags[12] == 1)
 		animation_5_4();
 	else if (pickedObject == kVerbPick && fl == 143 && flags[18] == 1) {
-		walkToPoint(Common::Point(260, 180));
+		gotoObject(260, 180);
 		pickObject(10);
 		visible[1] = 0;
 		flags[12] = 1;
@@ -699,14 +699,14 @@ bool DrasculaEngine::room_26(int fl) {
 		talk_igor(27, kIgorDoor);
 		flags[30] = 1;
 		talk_igor(28, kIgorDoor);
-		walkToPoint(Common::Point(153, 180));
+		gotoObject(153, 180);
 	} else if (pickedObject == kVerbPick && fl == 143 && flags[18] == 0) {
-		walkToPoint(Common::Point(260, 180));
+		gotoObject(260, 180);
 		copyBackground(80, 78, 199, 94, 38, 27, drawSurface3, screenSurface);
 		updateScreen(199, 94, 199, 94, 38, 27, screenSurface);
 		pause(3);
 		talk_igor(25, kIgorWig);
-		walkToPoint(Common::Point(153, 180));
+		gotoObject(153, 180);
 	} else if (pickedObject == kVerbTalk && fl == 51)
 		animation_1_4();
 	else
@@ -927,7 +927,7 @@ bool DrasculaEngine::room_55(int fl) {
 		playSound(11);
 		animate("det.bin", 17);
 		finishSound();
-		walkToPoint(Common::Point(curX - 3, curY + curHeight + 6));
+		gotoObject(curX - 3, curY + curHeight + 6);
 	} else
 		hasAnswer = 0;
 
@@ -972,7 +972,7 @@ bool DrasculaEngine::room_59(int fl) {
 			delay(40);
 			finishSound();
 			delay(10);
-			walkToPoint(Common::Point(174, 168));
+			gotoObject(174, 168);
 			trackProtagonist = 2;
 			updateRoom();
 			updateScreen();
@@ -1705,38 +1705,32 @@ void DrasculaEngine::enterRoom(int roomIndex) {
 
 	p.parseInt(numRoomObjs);
 
-	int x1, y1, x2, y2;
-
 	for (l = 0; l < numRoomObjs; l++) {
 		p.parseInt(objectNum[l]);
 		p.parseString(objName[l]);
-		p.parseInt(x1);
-		p.parseInt(y1);
-		p.parseInt(x2);
-		p.parseInt(y2);
-		_objectRect[l] = Common::Rect(x1, y1, x2, y2);
-		p.parseInt(x1);
-		p.parseInt(y1);
-		_roomObject[l] = Common::Point(x1, y1);
+		p.parseInt(_objectX1[l]);
+		p.parseInt(_objectY1[l]);
+		p.parseInt(_objectX2[l]);
+		p.parseInt(_objectY2[l]);
+		p.parseInt(roomObjX[l]);
+		p.parseInt(roomObjY[l]);
 		p.parseInt(trackObj[l]);
 		p.parseInt(visible[l]);
 		p.parseInt(isDoor[l]);
 		if (isDoor[l] != 0) {
-			p.parseInt(_doorDestRoom[l]);
-			p.parseInt(x1);
-			p.parseInt(y1);
-			_doorDestPoint[l] = Common::Point(x1, y1);
+			p.parseString(_targetSurface[l]);
+			p.parseInt(_destX[l]);
+			p.parseInt(_destY[l]);
 			p.parseInt(trackCharacter_alkeva[l]);
-			p.parseInt(_roomExitId[l]);
+			p.parseInt(roomExits[l]);
 			updateDoor(l);
 		}
 	}
 
-	p.parseInt(x1);
-	p.parseInt(y1);
-	p.parseInt(x2);
-	p.parseInt(y2);
-	_walkRect = Common::Rect(x1, y1, x2, y2);
+	p.parseInt(floorX1);
+	p.parseInt(floorY1);
+	p.parseInt(floorX2);
+	p.parseInt(floorY2);
 
 	if (currentChapter != 2) {
 		p.parseInt(upperLimit);
@@ -1773,8 +1767,8 @@ void DrasculaEngine::enterRoom(int roomIndex) {
 
 	if (currentChapter == 2) {
 		if (curX == -1) {
-			curX = _doorDestPoint[objIsExit].x;
-			curY = _doorDestPoint[objIsExit].y - curHeight;
+			curX = _destX[objIsExit];
+			curY = _destY[objIsExit] - curHeight;
 		}
 		_characterMoved = false;
 	}
@@ -1798,27 +1792,27 @@ void DrasculaEngine::enterRoom(int roomIndex) {
 		color_abc(kColorLightGreen);
 
 	if (currentChapter != 2) {
-		for (l = 0; l <= _walkRect.top; l++)
+		for (l = 0; l <= floorY1; l++)
 			factor_red[l] = upperLimit;
-		for (l = _walkRect.top; l <= 201; l++)
+		for (l = floorY1; l <= 201; l++)
 			factor_red[l] = lowerLimit;
 
-		chiquez = (float)(lowerLimit - upperLimit) / (float)(_walkRect.bottom - _walkRect.top);
-		for (l = _walkRect.top; l <= _walkRect.bottom; l++) {
+		chiquez = (float)(lowerLimit - upperLimit) / (float)(floorY2 - floorY1);
+		for (l = floorY1; l <= floorY2; l++) {
 			factor_red[l] = (int)(upperLimit + pequegnez);
 			pequegnez = pequegnez + chiquez;
 		}
 	}
 
 	if (_roomNumber == 24) {
-		for (l = _walkRect.top - 1; l > 74; l--) {
+		for (l = floorY1 - 1; l > 74; l--) {
 			factor_red[l] = (int)(upperLimit - pequegnez);
 			pequegnez = pequegnez + chiquez;
 		}
 	}
 
 	if (currentChapter == 5 && _roomNumber == 54) {
-		for (l = _walkRect.top - 1; l > 84; l--) {
+		for (l = floorY1 - 1; l > 84; l--) {
 			factor_red[l] = (int)(upperLimit - pequegnez);
 			pequegnez = pequegnez + chiquez;
 		}
@@ -1826,8 +1820,8 @@ void DrasculaEngine::enterRoom(int roomIndex) {
 
 	if (currentChapter != 2) {
 		if (curX == -1) {
-			curX = _doorDestPoint[objIsExit].x;
-			curY = _doorDestPoint[objIsExit].y;
+			curX = _destX[objIsExit];
+			curY = _destY[objIsExit];
 			curHeight = (CHARACTER_HEIGHT * factor_red[curY]) / 100;
 			curWidth = (CHARACTER_WIDTH * factor_red[curY]) / 100;
 			curY = curY - curHeight;
@@ -1921,7 +1915,7 @@ bool DrasculaEngine::exitRoom(int doorNumber) {
 		((currentChapter != 3 && currentChapter != 5) || visible[doorNumber] == 1)) {
 
 		hideCursor();
-		walkToPoint(_roomObject[doorNumber]);
+		gotoObject(roomObjX[doorNumber], roomObjY[doorNumber]);
 		if (currentChapter != 2) {
 			trackProtagonist = trackObj[doorNumber];
 			updateRoom();
@@ -1929,7 +1923,7 @@ bool DrasculaEngine::exitRoom(int doorNumber) {
 		}
 		_characterMoved = false;
 		trackProtagonist = trackCharacter_alkeva[doorNumber];
-		objExit = _roomExitId[doorNumber];
+		objExit = roomExits[doorNumber];
 		doBreak = 1;
 		previousMusic = roomMusic;
 
@@ -1941,8 +1935,8 @@ bool DrasculaEngine::exitRoom(int doorNumber) {
 			if (objectNum[doorNumber] == 136)
 				animation_2_2();
 			if (objectNum[doorNumber] == 124) {
-				walkToPoint(Common::Point(163, 106));
-				walkToPoint(Common::Point(287, 101));
+				gotoObject(163, 106);
+				gotoObject(287, 101);
 				trackProtagonist = 0;
 			}
 			if (objectNum[doorNumber] == 173) {
@@ -1959,14 +1953,16 @@ bool DrasculaEngine::exitRoom(int doorNumber) {
 				addObject(kItemEarplugs);
 			}
 		} else if (currentChapter == 4 && objectNum[doorNumber] == 108) {
-			walkToPoint(Common::Point(171, 78));
+			gotoObject(171, 78);
 		}
 
 		if (currentChapter == 5)
 			_characterVisible = true;
 
 		clearRoom();
-		roomNum = _doorDestRoom[doorNumber];
+		if (!sscanf(_targetSurface[doorNumber], "%d", &roomNum)) {
+			error("Malformed roomNum in targetSurface (%s)", _targetSurface[doorNumber]);
+		}
 		curX = -1;
 		enterRoom(roomNum);
 





More information about the Scummvm-git-logs mailing list