[Scummvm-git-logs] scummvm master -> 1606ca27cd306f8bac1f15564c09f78c6b445fae
neuromancer
noreply at scummvm.org
Tue Nov 4 13:55:02 UTC 2025
This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .
Summary:
85b8377979 FREESCAPE: avoid initialization/casting issue for group objects
1606ca27cd FREESCAPE: avoid undefined behavior
Commit: 85b8377979677950d5980d1c1ee3f0886b6fa825
https://github.com/scummvm/scummvm/commit/85b8377979677950d5980d1c1ee3f0886b6fa825
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2025-11-04T14:38:20+01:00
Commit Message:
FREESCAPE: avoid initialization/casting issue for group objects
Changed paths:
engines/freescape/area.cpp
engines/freescape/objects/group.cpp
engines/freescape/objects/object.h
diff --git a/engines/freescape/area.cpp b/engines/freescape/area.cpp
index f24ca8d5492..83f98946b63 100644
--- a/engines/freescape/area.cpp
+++ b/engines/freescape/area.cpp
@@ -452,7 +452,7 @@ Math::Vector3d Area::separateFromWall(const Math::Vector3d &_position) {
Math::Vector3d position = _position;
float sep = 8 / _scale;
for (auto &obj : _drawableObjects) {
- if (!obj->isDestroyed() && !obj->isInvisible()) {
+ if (!obj->isDestroyed() && !obj->isInvisible() && obj->isGeometric()) {
GeometricObject *gobj = (GeometricObject *)obj;
Math::Vector3d distance = gobj->_boundingBox.distance(position);
if (distance.length() > 0.0001)
diff --git a/engines/freescape/objects/group.cpp b/engines/freescape/objects/group.cpp
index 9a1509a2a39..47cfb9db1a2 100644
--- a/engines/freescape/objects/group.cpp
+++ b/engines/freescape/objects/group.cpp
@@ -30,6 +30,7 @@ const Common::Array<uint16> objectIds_,
const Math::Vector3d offset1_,
const Math::Vector3d offset2_,
const Common::Array<AnimationOpcode *> operations_) {
+ _type = kGroupType;
_objectID = objectID_;
_flags = flags_;
_scale = 0;
diff --git a/engines/freescape/objects/object.h b/engines/freescape/objects/object.h
index bdf82e53128..6bcc6abced1 100644
--- a/engines/freescape/objects/object.h
+++ b/engines/freescape/objects/object.h
@@ -58,6 +58,9 @@ public:
virtual ObjectType getType() { return _type; }
uint16 getObjectID() { return _objectID; }
uint16 getObjectFlags() { return _flags; }
+ bool isGeometric() {
+ return _type != kEntranceType && _type != kGroupType && _type != kSensorType;
+ }
void setObjectFlags(uint32 flags_) { _flags = flags_; }
Math::Vector3d getOrigin() { return _origin; }
virtual void setOrigin(Math::Vector3d origin_) { _origin = origin_; };
Commit: 1606ca27cd306f8bac1f15564c09f78c6b445fae
https://github.com/scummvm/scummvm/commit/1606ca27cd306f8bac1f15564c09f78c6b445fae
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2025-11-04T14:54:46+01:00
Commit Message:
FREESCAPE: avoid undefined behavior
Changed paths:
engines/freescape/area.cpp
engines/freescape/objects/sensor.cpp
engines/freescape/sound.cpp
diff --git a/engines/freescape/area.cpp b/engines/freescape/area.cpp
index 83f98946b63..d3e675a288f 100644
--- a/engines/freescape/area.cpp
+++ b/engines/freescape/area.cpp
@@ -402,7 +402,7 @@ Object *Area::checkCollisionRay(const Math::Ray &ray, int raySize) {
if (((GeometricObject *)obj)->isLineButNotStraight())
continue;
- if (!obj->isDestroyed() && !obj->isInvisible()) {
+ if (!obj->isDestroyed() && !obj->isInvisible() && obj->isGeometric()) {
GeometricObject *gobj = (GeometricObject *)obj;
Math::Vector3d collidedNormal;
float collidedDistance = sweepAABB(boundingBox, gobj->_boundingBox, raySize * ray.getDirection(), collidedNormal);
@@ -426,7 +426,7 @@ Object *Area::checkCollisionRay(const Math::Ray &ray, int raySize) {
ObjectArray Area::checkCollisions(const Math::AABB &boundingBox) {
ObjectArray collided;
for (auto &obj : _drawableObjects) {
- if (!obj->isDestroyed() && !obj->isInvisible()) {
+ if (!obj->isDestroyed() && !obj->isInvisible() && obj->isGeometric()) {
GeometricObject *gobj = (GeometricObject *)obj;
if (gobj->collides(boundingBox)) {
collided.push_back(gobj);
@@ -508,7 +508,7 @@ Math::Vector3d Area::resolveCollisions(const Math::Vector3d &lastPosition_, cons
Math::Vector3d direction = position - lastPosition;
for (auto &obj : _drawableObjects) {
- if (!obj->isDestroyed() && !obj->isInvisible()) {
+ if (!obj->isDestroyed() && !obj->isInvisible() && obj->isGeometric()) {
GeometricObject *gobj = (GeometricObject *)obj;
Math::Vector3d collidedNormal;
float collidedDistance = sweepAABB(boundingBox, gobj->_boundingBox, direction, collidedNormal);
diff --git a/engines/freescape/objects/sensor.cpp b/engines/freescape/objects/sensor.cpp
index ec23f365537..165018717d0 100644
--- a/engines/freescape/objects/sensor.cpp
+++ b/engines/freescape/objects/sensor.cpp
@@ -34,6 +34,7 @@ Sensor::Sensor(
uint8 flags_,
FCLInstructionVector condition_,
Common::String conditionSource_) {
+ _type = kSensorType;
_objectID = objectID_;
_origin = origin_;
_rotation = rotation_;
diff --git a/engines/freescape/sound.cpp b/engines/freescape/sound.cpp
index 875e7fdb7ff..f7f9bf24083 100644
--- a/engines/freescape/sound.cpp
+++ b/engines/freescape/sound.cpp
@@ -485,9 +485,11 @@ uint16 FreescapeEngine::playSoundDOSSpeaker(uint16 frequencyStart, soundSpeakerF
int waveDuration = waveDurationMultipler * (frequencyDuration + 1);
while (true) {
- float hzFreq = 1193180.0 / freq;
- debugC(1, kFreescapeDebugMedia, "raw %d, hz: %f, duration: %d", freq, hzFreq, waveDuration);
- _speaker->playQueue(Audio::PCSpeaker::kWaveFormSquare, hzFreq, waveDuration);
+ if (freq > 0) {
+ float hzFreq = 1193180.0 / freq;
+ debugC(1, kFreescapeDebugMedia, "raw %d, hz: %f, duration: %d", freq, hzFreq, waveDuration);
+ _speaker->playQueue(Audio::PCSpeaker::kWaveFormSquare, hzFreq, waveDuration);
+ }
if (frequencyStepsNumber > 0) {
// Ascending initial portions of cycle
freq += frequencyStep;
More information about the Scummvm-git-logs
mailing list