[Scummvm-git-logs] scummvm master -> 47eb539c3d1381211523d4e1a296c3073e2c3700

neuromancer noreply at scummvm.org
Sat Jan 6 14:58:26 UTC 2024


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

Summary:
7f21ad3cb5 FREESCAPE: set some sane default controls for ios
5eff8d6f4d FREESCAPE: refactor and improve triggering of collision conditions
47eb539c3d FREESCAPE: removed glDisable(GL_LIGHTING) from the shader rendered


Commit: 7f21ad3cb5022358574ffe3077530b6e5240d51a
    https://github.com/scummvm/scummvm/commit/7f21ad3cb5022358574ffe3077530b6e5240d51a
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2024-01-06T15:55:10+01:00

Commit Message:
FREESCAPE: set some sane default controls for ios

Changed paths:
    engines/freescape/freescape.cpp


diff --git a/engines/freescape/freescape.cpp b/engines/freescape/freescape.cpp
index 7c3de9833b2..d1250011089 100644
--- a/engines/freescape/freescape.cpp
+++ b/engines/freescape/freescape.cpp
@@ -165,6 +165,15 @@ FreescapeEngine::FreescapeEngine(OSystem *syst, const ADGameDescription *gd)
 	_gameStateBits = 0;
 	_eventManager = new EventManagerWrapper(g_system->getEventManager());
 
+	// Workaround to make the game playable on iOS: remove when there
+	// is a better way to hint the best controls
+	#if TARGET_OS_IOS
+	const Common::String &gameDomain = ConfMan.getActiveDomainName();
+	ConfMan.setBool("gamepad_controller", true, gameDomain);
+	ConfMan.setBool("gamepad_controller_minimal_layout", true, gameDomain);
+	ConfMan.set("gamepad_controller_directional_input", "dpad", gameDomain);
+	#endif
+
 	g_freescape = this;
 }
 


Commit: 5eff8d6f4dd93ed5e1384731f3ab5173588d62fa
    https://github.com/scummvm/scummvm/commit/5eff8d6f4dd93ed5e1384731f3ab5173588d62fa
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2024-01-06T15:55:10+01:00

Commit Message:
FREESCAPE: refactor and improve triggering of collision conditions

Changed paths:
    engines/freescape/area.cpp
    engines/freescape/area.h
    engines/freescape/movement.cpp


diff --git a/engines/freescape/area.cpp b/engines/freescape/area.cpp
index 332da51721b..2871c2d2cb9 100644
--- a/engines/freescape/area.cpp
+++ b/engines/freescape/area.cpp
@@ -248,7 +248,7 @@ void Area::drawGroup(Freescape::Renderer *gfx, Group* group, bool runAnimation)
 		group->draw(gfx);
 }
 
-Object *Area::shootRay(const Math::Ray &ray) {
+Object *Area::checkCollisionRay(const Math::Ray &ray, int raySize) {
 	float distance = 1.0;
 	float size = 16.0 * 8192.0; // TODO: check if this is the max size
 	Math::AABB boundingBox(ray.getOrigin(), ray.getOrigin());
@@ -257,7 +257,7 @@ Object *Area::shootRay(const Math::Ray &ray) {
 		if (!obj->isDestroyed() && !obj->isInvisible()) {
 			GeometricObject *gobj = (GeometricObject *)obj;
 			Math::Vector3d collidedNormal;
-			float collidedDistance = sweepAABB(boundingBox, gobj->_boundingBox, 8192 * ray.getDirection(), collidedNormal);
+			float collidedDistance = sweepAABB(boundingBox, gobj->_boundingBox, raySize * ray.getDirection(), collidedNormal);
 			debugC(1, kFreescapeDebugMove, "shot obj id: %d with distance %f", obj->getObjectID(), collidedDistance);
 			if (collidedDistance >= 1.0)
 				continue;
diff --git a/engines/freescape/area.h b/engines/freescape/area.h
index 227b8432c65..3cb1bcce151 100644
--- a/engines/freescape/area.h
+++ b/engines/freescape/area.h
@@ -56,7 +56,7 @@ public:
 	void drawGroup(Renderer *gfx, Group *group, bool runAnimation);
 	void show();
 
-	Object *shootRay(const Math::Ray &ray);
+	Object *checkCollisionRay(const Math::Ray &ray, int raySize);
 	bool checkInSight(const Math::Ray &ray, float maxDistance);
 	ObjectArray checkCollisions(const Math::AABB &boundingBox);
 	Math::Vector3d resolveCollisions(Math::Vector3d const &lastPosition, Math::Vector3d const &newPosition, int playerHeight);
diff --git a/engines/freescape/movement.cpp b/engines/freescape/movement.cpp
index c875bce94b3..576f6d39ed1 100644
--- a/engines/freescape/movement.cpp
+++ b/engines/freescape/movement.cpp
@@ -169,7 +169,7 @@ void FreescapeEngine::activate() {
 
 	Math::Vector3d direction = directionToVector(_pitch - yoffset, _yaw - xoffset);
 	Math::Ray ray(_position, direction);
-	Object *interacted = _currentArea->shootRay(ray);
+	Object *interacted = _currentArea->checkCollisionRay(ray, 8192);
 	if (interacted) {
 		GeometricObject *gobj = (GeometricObject *)interacted;
 		debugC(1, kFreescapeDebugMove, "Interact with object %d with flags %x", gobj->getObjectID(), gobj->getObjectFlags());
@@ -196,7 +196,7 @@ void FreescapeEngine::shoot() {
 
 	Math::Vector3d direction = directionToVector(_pitch - yoffset, _yaw - xoffset);
 	Math::Ray ray(_position, direction);
-	Object *shot = _currentArea->shootRay(ray);
+	Object *shot = _currentArea->checkCollisionRay(ray, 8192);
 	if (shot) {
 		GeometricObject *gobj = (GeometricObject *)shot;
 		debugC(1, kFreescapeDebugMove, "Shot object %d with flags %x", gobj->getObjectID(), gobj->getObjectFlags());
@@ -399,43 +399,31 @@ void FreescapeEngine::resolveCollisions(Math::Vector3d const position) {
 
 bool FreescapeEngine::runCollisionConditions(Math::Vector3d const lastPosition, Math::Vector3d const newPosition) {
 	bool executed = false;
-	// We need to make sure the bounding box touches the floor so we will expand it and run the collision checking
-	uint tolerance = isCastle() ? 1 : 3;
-
-	int yDifference = _flyMode ? tolerance : -_playerHeight - tolerance;
-	Math::Vector3d v(newPosition.x() - 1, newPosition.y() + yDifference, newPosition.z() - 1);
-	Math::AABB boundingBox(lastPosition, lastPosition);
-	boundingBox.expand(v);
-
-	ObjectArray objs = _currentArea->checkCollisions(boundingBox);
-
-	// sort so the condition from those objects that are larger are executed last
-	struct {
-		bool operator()(Object *object1, Object *object2) {
-			return object1->getSize().length() < object2->getSize().length();
-		};
-	} compareObjectsSizes;
-
-	Common::sort(objs.begin(), objs.end(), compareObjectsSizes);
 	uint16 areaID = _currentArea->getAreaID();
+	GeometricObject *gobj = nullptr;
+	Object *collided = nullptr;
+
+	Math::Ray ray(newPosition, -_upVector);
+	collided = _currentArea->checkCollisionRay(ray, _playerHeight + 3);
+	if (collided) {
+		gobj = (GeometricObject *)collided;
+		debugC(1, kFreescapeDebugMove, "Collided down 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);
+	}
 
-	bool largeObjectWasBlocking = false;
-	for (auto &obj : objs) {
-		GeometricObject *gobj = (GeometricObject *)obj;
-		debugC(1, kFreescapeDebugMove, "Collided with object id %d of size %f %f %f", gobj->getObjectID(), gobj->getSize().x(), gobj->getSize().y(), gobj->getSize().z());
-		// The following check stops the player from going through big solid objects such as walls
-		// FIXME: find a better workaround of this
-		if (gobj->getSize().length() > 3000) {
-			if (largeObjectWasBlocking && !(isDriller() && _currentArea->getAreaID() == 14))
-				continue;
-			largeObjectWasBlocking = true;
-		}
+	if (areaID != _currentArea->getAreaID())
+		return collided;
 
+	Math::Vector3d direction = newPosition - lastPosition;
+	direction.normalize();
+	ray = Math::Ray(newPosition, direction);
+	collided = _currentArea->checkCollisionRay(ray, 45);
+	if (collided) {
+		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);
-
-		if (areaID != _currentArea->getAreaID())
-			break;
 	}
+
 	return executed;
 }
 


Commit: 47eb539c3d1381211523d4e1a296c3073e2c3700
    https://github.com/scummvm/scummvm/commit/47eb539c3d1381211523d4e1a296c3073e2c3700
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2024-01-06T15:58:24+01:00

Commit Message:
FREESCAPE: removed glDisable(GL_LIGHTING) from the shader rendered

Changed paths:
    engines/freescape/gfx_opengl_shaders.cpp


diff --git a/engines/freescape/gfx_opengl_shaders.cpp b/engines/freescape/gfx_opengl_shaders.cpp
index 468d3ec4bbd..ec55d52ace2 100644
--- a/engines/freescape/gfx_opengl_shaders.cpp
+++ b/engines/freescape/gfx_opengl_shaders.cpp
@@ -96,7 +96,6 @@ void OpenGLShaderRenderer::init() {
 	_bitmapShader->enableVertexAttribute("position", _bitmapVBO, 2, GL_FLOAT, GL_TRUE, 2 * sizeof(float), 0);
 	_bitmapShader->enableVertexAttribute("texcoord", _bitmapVBO, 2, GL_FLOAT, GL_TRUE, 2 * sizeof(float), 0);
 
-	glDisable(GL_LIGHTING);
 	glDisable(GL_TEXTURE_2D);
 	glEnable(GL_DEPTH_TEST);
 	glEnable(GL_SCISSOR_TEST);




More information about the Scummvm-git-logs mailing list