[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