[Scummvm-git-logs] scummvm master -> 9d827c9915229ccb1210dbd93401e53207ec047d

neuromancer noreply at scummvm.org
Wed Dec 7 08:34:27 UTC 2022


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

Summary:
e40403b152 FREESCAPE: improved entrance detection when traversing areas
0af9bf8885 FREESCAPE: avoid player to escape the area flying up
2110fe69ba FREESCAPE: disable no clip mode when a game is restarted or reloaded
23e109ed10 FREESCAPE: make sure color is black as background in DOS/EGA release of driller
9d827c9915 FREESCAPE: save/load color remappings in areas, if any


Commit: e40403b15275195132857b69fee0d3ebd998aa9c
    https://github.com/scummvm/scummvm/commit/e40403b15275195132857b69fee0d3ebd998aa9c
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-12-07T09:35:31+01:00

Commit Message:
FREESCAPE: improved entrance detection when traversing areas

Changed paths:
    engines/freescape/freescape.h
    engines/freescape/games/driller.cpp
    engines/freescape/language/instruction.cpp
    engines/freescape/movement.cpp


diff --git a/engines/freescape/freescape.h b/engines/freescape/freescape.h
index 41e103c88d3..59d19661801 100644
--- a/engines/freescape/freescape.h
+++ b/engines/freescape/freescape.h
@@ -224,6 +224,7 @@ public:
 	Common::Array<FCLInstructionVector> _conditions;
 
 	bool checkCollisions(bool executeCode);
+	Math::Vector3d _objExecutingCodeSize;
 	void executeObjectConditions(GeometricObject *obj, bool shot, bool collided);
 	void executeLocalGlobalConditions(bool shot, bool collided);
 	void executeCode(FCLInstructionVector &code, bool shot, bool collided);
diff --git a/engines/freescape/games/driller.cpp b/engines/freescape/games/driller.cpp
index a34bf31b192..290a6ce4d4d 100644
--- a/engines/freescape/games/driller.cpp
+++ b/engines/freescape/games/driller.cpp
@@ -79,23 +79,21 @@ void DrillerEngine::gotoArea(uint16 areaID, int entranceID) {
 	if (entranceID > 0 || areaID == 127) {
 		traverseEntrance(entranceID);
 	} else if (entranceID == 0) {
-		Math::Vector3d diff = _lastPosition - _position;
-		// debug("dif: %f %f %f", diff.x(), diff.y(), diff.z());
-		//  diff should be used to determinate which entrance to use
 		int newPos = -1;
-		if (ABS(diff.x()) < ABS(diff.z())) {
-			if (diff.z() > 0)
+		if (_position.z() < 200 || _position.z() >= 3800) {
+			if (_position.z() < 200)
 				newPos = 4000;
 			else
 				newPos = 100;
 			_position.setValue(2, newPos);
-		} else {
-			if (diff.x() > 0)
+		} else if(_position.x() < 200 || _position.x() >= 3800)  {
+			if (_position.x() < 200)
 				newPos = 4000;
 			else
 				newPos = 100;
 			_position.setValue(0, newPos);
-		}
+		} else
+			error("Invalid movement across areas");
 		assert(newPos != -1);
 	}
 	_lastPosition = _position;
diff --git a/engines/freescape/language/instruction.cpp b/engines/freescape/language/instruction.cpp
index cf9c0ab02f4..9093a928676 100644
--- a/engines/freescape/language/instruction.cpp
+++ b/engines/freescape/language/instruction.cpp
@@ -69,6 +69,7 @@ Token::Type FCLInstruction::getType() {
 void FreescapeEngine::executeObjectConditions(GeometricObject *obj, bool shot, bool collided) {
 	assert(obj != nullptr);
 	if (!obj->_conditionSource.empty()) {
+		_objExecutingCodeSize = obj->getSize();
 		debugC(1, kFreescapeDebugCode, "Executing with collision flag: %s", obj->_conditionSource.c_str());
 		executeCode(obj->_condition, shot, collided);
 	}
diff --git a/engines/freescape/movement.cpp b/engines/freescape/movement.cpp
index f44892eb2c3..75d6db2ace0 100644
--- a/engines/freescape/movement.cpp
+++ b/engines/freescape/movement.cpp
@@ -34,11 +34,10 @@ void FreescapeEngine::traverseEntrance(uint16 entranceID) {
 	int scale = _currentArea->getScale();
 	assert(scale > 0);
 
-	Math::Vector3d diff = _lastPosition - _position;
 	Math::Vector3d rotation = entrance->getRotation();
 	_position = entrance->getOrigin();
 	_pitch = rotation.x();
-	if (ABS(diff.x()) > ABS(diff.z()))
+	if (ABS(_objExecutingCodeSize.x()) <= ABS(_objExecutingCodeSize.z()))
 		_yaw = rotation.y() - 90;
 	else
 		_yaw = rotation.y() + 90;


Commit: 0af9bf8885146a5d657fb81712c48b72e6621d72
    https://github.com/scummvm/scummvm/commit/0af9bf8885146a5d657fb81712c48b72e6621d72
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-12-07T09:35:31+01:00

Commit Message:
FREESCAPE: avoid player to escape the area flying up

Changed paths:
    engines/freescape/movement.cpp


diff --git a/engines/freescape/movement.cpp b/engines/freescape/movement.cpp
index 75d6db2ace0..4348ca4b618 100644
--- a/engines/freescape/movement.cpp
+++ b/engines/freescape/movement.cpp
@@ -128,7 +128,7 @@ void FreescapeEngine::rise() {
 		changePlayerHeight(_playerHeightNumber);
 	}
 
-	bool collided = checkCollisions(true);
+	bool collided = checkCollisions(true) || _position.y() >= 2016;
 	if (collided) {
 		if (_currentArea->getAreaID() == previousAreaID) {
 			if (_flyMode)
@@ -203,6 +203,8 @@ void FreescapeEngine::move(CameraMovement direction, uint8 scale, float deltaTim
 		else if (_position.getValue(i) > 8128)
 			_position.setValue(i, 8128);
 	}
+	if (_position.y() >= 2016)
+		_position.y() = _lastPosition.z();
 
 	bool collided = checkCollisions(false);
 


Commit: 2110fe69bae0397fe255b8ca032dd561dd4e0071
    https://github.com/scummvm/scummvm/commit/2110fe69bae0397fe255b8ca032dd561dd4e0071
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-12-07T09:35:31+01:00

Commit Message:
FREESCAPE: disable no clip mode when a game is restarted or reloaded

Changed paths:
    engines/freescape/freescape.cpp
    engines/freescape/games/driller.cpp


diff --git a/engines/freescape/freescape.cpp b/engines/freescape/freescape.cpp
index be9deecd827..aa8bd131913 100644
--- a/engines/freescape/freescape.cpp
+++ b/engines/freescape/freescape.cpp
@@ -686,6 +686,7 @@ Common::Error FreescapeEngine::loadGameStream(Common::SeekableReadStream *stream
 	}
 
 	_flyMode = stream->readByte();
+	_noClipMode = false;
 	_playerHeightNumber = stream->readUint32LE();
 	_countdown = stream->readUint32LE();
 	_ticks = 0;
diff --git a/engines/freescape/games/driller.cpp b/engines/freescape/games/driller.cpp
index 290a6ce4d4d..7fd0ba39335 100644
--- a/engines/freescape/games/driller.cpp
+++ b/engines/freescape/games/driller.cpp
@@ -841,6 +841,7 @@ void DrillerEngine::removeDrill(Area *area) {
 
 void DrillerEngine::initGameState() {
 	_flyMode = false;
+	_noClipMode = false;
 	_lastMousePos = Common::Point(0, 0);
 	_yaw = 0;
 	_pitch = 0;


Commit: 23e109ed1040c4a2ee8f3aa67b6b0c1ae17a8976
    https://github.com/scummvm/scummvm/commit/23e109ed1040c4a2ee8f3aa67b6b0c1ae17a8976
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-12-07T09:35:31+01:00

Commit Message:
FREESCAPE: make sure color is black as background in DOS/EGA release of driller

Changed paths:
    engines/freescape/games/driller.cpp


diff --git a/engines/freescape/games/driller.cpp b/engines/freescape/games/driller.cpp
index 7fd0ba39335..521e6cdf381 100644
--- a/engines/freescape/games/driller.cpp
+++ b/engines/freescape/games/driller.cpp
@@ -116,11 +116,11 @@ void DrillerEngine::gotoArea(uint16 areaID, int entranceID) {
 	_gfx->_keyColor = 0;
 	_gfx->setColorRemaps(&_currentArea->_colorRemaps);
 
-	if (isAmiga() || isAtariST()) {
+	if (isAmiga() || isAtariST())
 		swapPalette(areaID);
-		_currentArea->_skyColor = 0;
-		_currentArea->_usualBackgroundColor = 0;
-	}
+
+	_currentArea->_skyColor = 0;
+	_currentArea->_usualBackgroundColor = 0;
 
 	if (areaID != _startArea || entranceID != _startEntrance) {
 		g_system->warpMouse(_crossairPosition.x, _crossairPosition.y);


Commit: 9d827c9915229ccb1210dbd93401e53207ec047d
    https://github.com/scummvm/scummvm/commit/9d827c9915229ccb1210dbd93401e53207ec047d
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-12-07T09:35:31+01:00

Commit Message:
FREESCAPE: save/load color remappings in areas, if any

Changed paths:
    engines/freescape/area.cpp


diff --git a/engines/freescape/area.cpp b/engines/freescape/area.cpp
index 0de9a796f0a..882a934b889 100644
--- a/engines/freescape/area.cpp
+++ b/engines/freescape/area.cpp
@@ -152,6 +152,15 @@ void Area::loadObjects(Common::SeekableReadStream *stream, Area *global) {
 		obj->setObjectFlags(flags);
 		obj->setOrigin(Math::Vector3d(x, y, z));
 	}
+
+	_colorRemaps.clear();
+	int colorRemapsSize = stream->readUint32LE();
+
+	for (int i = 0; i < colorRemapsSize; i++) {
+		int src = stream->readUint32LE();
+		int dst = stream->readUint32LE();
+		remapColor(src, dst);
+	}
 }
 
 void Area::saveObjects(Common::WriteStream *stream) {
@@ -165,6 +174,12 @@ void Area::saveObjects(Common::WriteStream *stream) {
 		stream->writeFloatLE(obj->getOrigin().y());
 		stream->writeFloatLE(obj->getOrigin().z());
 	}
+
+	stream->writeUint32LE(_colorRemaps.size());
+	for (auto &it : _colorRemaps) {
+		stream->writeUint32LE(it._key);
+		stream->writeUint32LE(it._value);
+	}
 }
 
 void Area::remapColor(int index, int color) {




More information about the Scummvm-git-logs mailing list