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

neuromancer noreply at scummvm.org
Fri Oct 11 13:31:58 UTC 2024


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:
7b09ad622c FREESCAPE: added missing instruction
1be5b6f030 FREESCAPE: reset groups after the game state is restored
8e44ee53a3 FREESCAPE: tweaks in runCollisionConditions
4892a80ede FREESCAPE: use correct variable number for castle shield
d8e7fa3a63 FREESCAPE: added missing entrance in castle for dos


Commit: 7b09ad622c6c89cb75af7d5ccc676e73821ec91a
    https://github.com/scummvm/scummvm/commit/7b09ad622c6c89cb75af7d5ccc676e73821ec91a
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2024-10-11T15:33:20+02:00

Commit Message:
FREESCAPE: added missing instruction

Changed paths:
    engines/freescape/freescape.h
    engines/freescape/language/8bitDetokeniser.cpp
    engines/freescape/language/instruction.cpp
    engines/freescape/language/instruction.h
    engines/freescape/language/token.h


diff --git a/engines/freescape/freescape.h b/engines/freescape/freescape.h
index 9b4692a19f5..1621dfc7430 100644
--- a/engines/freescape/freescape.h
+++ b/engines/freescape/freescape.h
@@ -394,6 +394,7 @@ public:
 	// Instructions
 	bool checkConditional(FCLInstruction &instruction, bool shot, bool collided, bool timer, bool activated);
 	bool checkIfGreaterOrEqual(FCLInstruction &instruction);
+	bool checkIfLessOrEqual(FCLInstruction &instruction);
 	void executeExecute(FCLInstruction &instruction);
 	void executeIncrementVariable(FCLInstruction &instruction);
 	void executeDecrementVariable(FCLInstruction &instruction);
diff --git a/engines/freescape/language/8bitDetokeniser.cpp b/engines/freescape/language/8bitDetokeniser.cpp
index 3112b7f5939..78fe3f858f3 100644
--- a/engines/freescape/language/8bitDetokeniser.cpp
+++ b/engines/freescape/language/8bitDetokeniser.cpp
@@ -434,7 +434,7 @@ Common::String detokenise8bitCondition(Common::Array<uint16> &tokenisedCondition
 
 		case 47:
 			detokenisedStream += "IFLTE (v";
-			currentInstruction = FCLInstruction(Token::IFGTEQ);
+			currentInstruction = FCLInstruction(Token::IFLTEQ);
 			break;
 
 		case 48:
diff --git a/engines/freescape/language/instruction.cpp b/engines/freescape/language/instruction.cpp
index 32f98462d13..1899d503a78 100644
--- a/engines/freescape/language/instruction.cpp
+++ b/engines/freescape/language/instruction.cpp
@@ -213,6 +213,13 @@ bool FreescapeEngine::executeCode(FCLInstructionVector &code, bool shot, bool co
 				skipDepth = conditionalDepth - 1;
 			break;
 
+		case Token::IFLTEQ:
+			skip = !checkIfLessOrEqual(instruction);
+			if (skip)
+				skipDepth = conditionalDepth - 1;
+			break;
+
+
 		case Token::ELSE:
 			skip = !skip;
 			if (skip)
@@ -467,6 +474,13 @@ bool FreescapeEngine::checkIfGreaterOrEqual(FCLInstruction &instruction) {
 	return (_gameStateVars[variable] >= value);
 }
 
+bool FreescapeEngine::checkIfLessOrEqual(FCLInstruction &instruction) {
+	uint16 variable = instruction._source;
+	uint16 value = instruction._destination;
+	debugC(1, kFreescapeDebugCode, "Check if variable %d is less than equal to %d!", variable, value);
+	return (_gameStateVars[variable] <= value);
+}
+
 
 bool FreescapeEngine::executeEndIfNotEqual(FCLInstruction &instruction) {
 	uint16 variable = instruction._source;
diff --git a/engines/freescape/language/instruction.h b/engines/freescape/language/instruction.h
index eb8ee9bd231..c7f6835cba4 100644
--- a/engines/freescape/language/instruction.h
+++ b/engines/freescape/language/instruction.h
@@ -46,7 +46,7 @@ public:
 	bool isConditional() const {
 		Token::Type type = getType();
 		return 	type == Token::Type::BITNOTEQ || type == Token::Type::VARNOTEQ || \
-				type == Token::Type::IFGTEQ || type == Token::Type::IFGLEQ || \
+				type == Token::Type::IFGTEQ || type == Token::Type::IFLTEQ || \
 				type == Token::Type::VAREQ || _type == Token::Type::INVISQ;
 	}
 
diff --git a/engines/freescape/language/token.h b/engines/freescape/language/token.h
index 4a1f63f6c87..942802dd346 100644
--- a/engines/freescape/language/token.h
+++ b/engines/freescape/language/token.h
@@ -79,7 +79,7 @@ public:
 		UPDATEI,
 		VAREQ,
 		IFGTEQ,
-		IFGLEQ,
+		IFLTEQ,
 		VISQ,
 		VIS,
 		WAIT,


Commit: 1be5b6f0304309b55d26fd421df63cd6d3019235
    https://github.com/scummvm/scummvm/commit/1be5b6f0304309b55d26fd421df63cd6d3019235
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2024-10-11T15:33:20+02:00

Commit Message:
FREESCAPE: reset groups after the game state is restored

Changed paths:
    engines/freescape/area.cpp
    engines/freescape/area.h
    engines/freescape/games/castle/castle.cpp
    engines/freescape/movement.cpp
    engines/freescape/objects/group.cpp


diff --git a/engines/freescape/area.cpp b/engines/freescape/area.cpp
index 49c0e8a9fd5..eb82798d292 100644
--- a/engines/freescape/area.cpp
+++ b/engines/freescape/area.cpp
@@ -192,8 +192,20 @@ void Area::unremapColor(int index) {
 	_colorRemaps.clear(index);
 }
 
+void Area::resetAreaGroups() {
+	debugC(1, kFreescapeDebugMove, "Resetting groups from area: %s", _name.c_str());
+	if (_objectsByID) {
+		for (auto &it : *_objectsByID) {
+			Object *obj = it._value;
+
+			if (obj->getType() == ObjectType::kGroupType)
+				((Group *)obj)->reset();
+		}
+	}
+}
+
 void Area::resetArea() {
-	debugC(1, kFreescapeDebugMove, "Resetting area name: %s", _name.c_str());
+	debugC(1, kFreescapeDebugMove, "Resetting objects from area: %s", _name.c_str());
 	_colorRemaps.clear();
 	if (_objectsByID) {
 		for (auto &it : *_objectsByID) {
diff --git a/engines/freescape/area.h b/engines/freescape/area.h
index 0c128aa6805..b1148f76db8 100644
--- a/engines/freescape/area.h
+++ b/engines/freescape/area.h
@@ -67,6 +67,7 @@ public:
 	void addStructure(Area *global);
 	void removeObject(int16 id);
 	void resetArea();
+	void resetAreaGroups();
 	bool isOutside();
 	bool hasActiveGroups();
 
diff --git a/engines/freescape/games/castle/castle.cpp b/engines/freescape/games/castle/castle.cpp
index 1c722eb32f0..2fb449d48cc 100644
--- a/engines/freescape/games/castle/castle.cpp
+++ b/engines/freescape/games/castle/castle.cpp
@@ -1224,6 +1224,10 @@ Common::Error CastleEngine::loadGameStreamExtended(Common::SeekableReadStream *s
 
 	if (_useRockTravel) // Enable cheat
 		setGameBit(k8bitGameBitTravelRock);
+
+	for (auto &it : _areaMap) {
+		it._value->resetAreaGroups();
+	}
 	return Common::kNoError;
 }
 
diff --git a/engines/freescape/movement.cpp b/engines/freescape/movement.cpp
index 506e5ca327c..b6f60198953 100644
--- a/engines/freescape/movement.cpp
+++ b/engines/freescape/movement.cpp
@@ -447,7 +447,9 @@ bool FreescapeEngine::runCollisionConditions(Math::Vector3d const lastPosition,
 	Math::Vector3d direction = newPosition - lastPosition;
 	direction.normalize();
 	int rayLenght = 45;
-	if (_currentArea->getScale() >= 5)
+	if (_currentArea->getScale() == 16)
+		rayLenght = 200;
+	else if (_currentArea->getScale() >= 5)
 		rayLenght = MAX(5, 45 / (2 * _currentArea->getScale()));
 
 	for (int i = 0; i <= 2; i++) {
diff --git a/engines/freescape/objects/group.cpp b/engines/freescape/objects/group.cpp
index 3533ce0771e..b94670ed65c 100644
--- a/engines/freescape/objects/group.cpp
+++ b/engines/freescape/objects/group.cpp
@@ -158,7 +158,7 @@ void Group::run() {
 }
 
 void Group::reset() {
-	/*uint32 groupSize = _objects.size();
+	uint32 groupSize = _objects.size();
 	for (uint32 i = 0; i < groupSize ; i++) {
 		GeometricObject *gobj = (GeometricObject *)_objects[i];
 		if (GeometricObject::isPolygon(_objects[i]->getType())) {
@@ -166,7 +166,7 @@ void Group::reset() {
 			gobj->restoreOrdinates();
 			//gobj->makeInvisible();
 		}
-	}*/
+	}
 }
 
 void Group::draw(Renderer *gfx, float offset) {


Commit: 8e44ee53a39cf7f7c6427f29eadc6daa8bd1ee06
    https://github.com/scummvm/scummvm/commit/8e44ee53a39cf7f7c6427f29eadc6daa8bd1ee06
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2024-10-11T15:33:20+02:00

Commit Message:
FREESCAPE: tweaks in runCollisionConditions

Changed paths:
    engines/freescape/movement.cpp


diff --git a/engines/freescape/movement.cpp b/engines/freescape/movement.cpp
index b6f60198953..cee3c57e2c7 100644
--- a/engines/freescape/movement.cpp
+++ b/engines/freescape/movement.cpp
@@ -448,11 +448,11 @@ bool FreescapeEngine::runCollisionConditions(Math::Vector3d const lastPosition,
 	direction.normalize();
 	int rayLenght = 45;
 	if (_currentArea->getScale() == 16)
-		rayLenght = 200;
+		rayLenght = 20;
 	else if (_currentArea->getScale() >= 5)
 		rayLenght = MAX(5, 45 / (2 * _currentArea->getScale()));
 
-	for (int i = 0; i <= 2; i++) {
+	for (int i = 0; i <= 4; i++) {
 		Math::Vector3d rayPosition = lastPosition;
 		rayPosition.y() = rayPosition.y() - _playerHeight * (i / 4.0);
 		ray = Math::Ray(rayPosition, direction);
@@ -461,7 +461,7 @@ bool FreescapeEngine::runCollisionConditions(Math::Vector3d const lastPosition,
 			gobj = (GeometricObject *)collided;
 			debugC(1, kFreescapeDebugMove, "Collided with object id %d of size %f %f %f", gobj->getObjectID(), gobj->getSize().x(), gobj->getSize().y(), gobj->getSize().z());
 			executed |= executeObjectConditions(gobj, false, true, false);
-			break;
+			//break;
 		}
 	}
 


Commit: 4892a80edeedc2b54db36c17495f551aca839b2f
    https://github.com/scummvm/scummvm/commit/4892a80edeedc2b54db36c17495f551aca839b2f
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2024-10-11T15:33:20+02:00

Commit Message:
FREESCAPE: use correct variable number for castle shield

Changed paths:
    engines/freescape/freescape.cpp
    engines/freescape/language/8bitDetokeniser.cpp
    engines/freescape/language/8bitDetokeniser.h
    engines/freescape/language/instruction.cpp


diff --git a/engines/freescape/freescape.cpp b/engines/freescape/freescape.cpp
index 397ddd2089a..bd209dcdb3f 100644
--- a/engines/freescape/freescape.cpp
+++ b/engines/freescape/freescape.cpp
@@ -212,6 +212,9 @@ FreescapeEngine::FreescapeEngine(OSystem *syst, const ADGameDescription *gd)
 	ConfMan.setInt("gamepad_controller_directional_input", 1 /* kDirectionalInputDpad */, gameDomain);
 #endif
 
+	if (isCastle())
+		k8bitVariableShield = 29;
+
 	g_freescape = this;
 }
 
diff --git a/engines/freescape/language/8bitDetokeniser.cpp b/engines/freescape/language/8bitDetokeniser.cpp
index 78fe3f858f3..19f512d48c7 100644
--- a/engines/freescape/language/8bitDetokeniser.cpp
+++ b/engines/freescape/language/8bitDetokeniser.cpp
@@ -29,7 +29,7 @@
 
 namespace Freescape {
 
-uint8 k8bitMaxVariable = 64;
+uint8 k8bitVariableShield = 63;
 
 Common::String detokenise8bitCondition(Common::Array<uint16> &tokenisedCondition, FCLInstructionVector &instructions, bool isAmigaAtari) {
 	Common::String detokenisedStream;
diff --git a/engines/freescape/language/8bitDetokeniser.h b/engines/freescape/language/8bitDetokeniser.h
index 0b758760635..f69e6527ac9 100644
--- a/engines/freescape/language/8bitDetokeniser.h
+++ b/engines/freescape/language/8bitDetokeniser.h
@@ -28,13 +28,13 @@ namespace Freescape {
 
 enum {
 	k8bitGameBitTravelRock = 30,
-	k8bitVariableShield = 63,
 	k8bitVariableEnergy = 62,
 	k8bitVariableScore = 61,
 	k8bitVariableShieldDrillerTank = 60,
 	k8bitVariableEnergyDrillerTank = 59,
 	k8bitVariableShieldDrillerJet = 58,
-	k8bitVariableEnergyDrillerJet = 57
+	k8bitVariableEnergyDrillerJet = 57,
+	k8bitMaxVariable = 64
 };
 
 enum {
@@ -44,7 +44,7 @@ enum {
 	kConditionalActivated = 1 << 3,
 };
 
-extern uint8 k8bitMaxVariable;
+extern uint8 k8bitVariableShield;
 
 Common::String detokenise8bitCondition(Common::Array<uint16> &tokenisedCondition, FCLInstructionVector &instructions, bool enableActivated);
 
diff --git a/engines/freescape/language/instruction.cpp b/engines/freescape/language/instruction.cpp
index 1899d503a78..3eb37de8076 100644
--- a/engines/freescape/language/instruction.cpp
+++ b/engines/freescape/language/instruction.cpp
@@ -493,18 +493,15 @@ void FreescapeEngine::executeIncrementVariable(FCLInstruction &instruction) {
 	int32 variable = instruction._source;
 	int32 increment = instruction._destination;
 	_gameStateVars[variable] = _gameStateVars[variable] + increment;
-	switch (variable) {
-	case k8bitVariableScore:
+	if (variable == k8bitVariableScore) {
 		debugC(1, kFreescapeDebugCode, "Score incremented by %d up to %d", increment, _gameStateVars[variable]);
-		break;
-	case k8bitVariableEnergy:
+	} else if (variable == k8bitVariableEnergy) {
 		if (_gameStateVars[variable] > _maxEnergy)
 			_gameStateVars[variable] = _maxEnergy;
 		else if (_gameStateVars[variable] < 0)
 			_gameStateVars[variable] = 0;
 		debugC(1, kFreescapeDebugCode, "Energy incremented by %d up to %d", increment, _gameStateVars[variable]);
-		break;
-	case k8bitVariableShield:
+	} else if (variable == k8bitVariableShield) {
 		if (_gameStateVars[variable] > _maxShield)
 			_gameStateVars[variable] = _maxShield;
 		else if (_gameStateVars[variable] < 0)
@@ -514,10 +511,8 @@ void FreescapeEngine::executeIncrementVariable(FCLInstruction &instruction) {
 			flashScreen(_renderMode == Common::kRenderCGA ? 1 :_currentArea->_underFireBackgroundColor);
 
 		debugC(1, kFreescapeDebugCode, "Shield incremented by %d up to %d", increment, _gameStateVars[variable]);
-		break;
-	default:
+	} else {
 		debugC(1, kFreescapeDebugCode, "Variable %d by %d incremented up to %d!", variable, increment, _gameStateVars[variable]);
-		break;
 	}
 }
 


Commit: d8e7fa3a6351495efdfce1d55f32300c6de2f549
    https://github.com/scummvm/scummvm/commit/d8e7fa3a6351495efdfce1d55f32300c6de2f549
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2024-10-11T15:33:20+02:00

Commit Message:
FREESCAPE: added missing entrance in castle for dos

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


diff --git a/engines/freescape/games/castle/castle.cpp b/engines/freescape/games/castle/castle.cpp
index 2fb449d48cc..fed27371786 100644
--- a/engines/freescape/games/castle/castle.cpp
+++ b/engines/freescape/games/castle/castle.cpp
@@ -677,6 +677,7 @@ void CastleEngine::loadAssets() {
 			it._value->addStructure(_areaMap[255]);
 			it._value->addObjectFromArea(229, _areaMap[255]);
 			it._value->addObjectFromArea(242, _areaMap[255]);
+			it._value->addObjectFromArea(139, _areaMap[255]);
 		}
 
 		_areaMap[1]->addFloor();




More information about the Scummvm-git-logs mailing list