[Scummvm-git-logs] scummvm master -> 79cc368fee2636f4bb68abcdf1796a32324eca88
neuromancer
noreply at scummvm.org
Sat Jul 29 15:35:17 UTC 2023
This automated email contains information about 8 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
f82d0fb2dd FREESCAPE: update the list of sensors when changing the area in dark
ab9a114366 FREESCAPE: working implementation of renderSensorShot for driller and dark
aa64648dd6 FREESCAPE: refactored max shield and max energy variables
cc566ac4f0 FREESCAPE: explored area and ECD score implemented in dark
101e1e6c68 FREESCAPE: detect alternative dark release for dos
6abfd2d91b FREESCAPE: show active ecds in dark
f2e512c8c9 FREESCAPE: added missing header file
79cc368fee FREESCAPE: handle falling while far from the floor using the jetpack in dark
Commit: f82d0fb2ddd3f07a7de46cae7e2fbdda43d1330c
https://github.com/scummvm/scummvm/commit/f82d0fb2ddd3f07a7de46cae7e2fbdda43d1330c
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2023-07-29T16:05:38+02:00
Commit Message:
FREESCAPE: update the list of sensors when changing the area in dark
Changed paths:
engines/freescape/games/dark/dark.cpp
diff --git a/engines/freescape/games/dark/dark.cpp b/engines/freescape/games/dark/dark.cpp
index afd1371194b..b1df56948a8 100644
--- a/engines/freescape/games/dark/dark.cpp
+++ b/engines/freescape/games/dark/dark.cpp
@@ -284,6 +284,7 @@ void DarkEngine::gotoArea(uint16 areaID, int entranceID) {
_position.setValue(0, newPos);
}
assert(newPos != -1);
+ _sensors = _currentArea->getSensors();
}
_lastPosition = _position;
Commit: ab9a1143660500d3321096e0224e7b1e3f15722c
https://github.com/scummvm/scummvm/commit/ab9a1143660500d3321096e0224e7b1e3f15722c
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2023-07-29T16:05:38+02:00
Commit Message:
FREESCAPE: working implementation of renderSensorShot for driller and dark
Changed paths:
engines/freescape/freescape.cpp
engines/freescape/freescape.h
engines/freescape/games/dark/dark.cpp
engines/freescape/games/driller/driller.cpp
engines/freescape/gfx_opengl.cpp
engines/freescape/gfx_opengl_shaders.cpp
diff --git a/engines/freescape/freescape.cpp b/engines/freescape/freescape.cpp
index 56d30e25e90..5227f454d0d 100644
--- a/engines/freescape/freescape.cpp
+++ b/engines/freescape/freescape.cpp
@@ -248,10 +248,7 @@ void FreescapeEngine::checkSensors() {
}
}
-void FreescapeEngine::drawSensorShoot(Sensor *sensor) {
- assert(sensor);
- _gfx->renderSensorShoot(1, sensor->getOrigin(), _position, _viewArea);
-}
+void FreescapeEngine::drawSensorShoot(Sensor *sensor) {}
void FreescapeEngine::flashScreen(int backgroundColor) {
if (backgroundColor >= 16)
diff --git a/engines/freescape/freescape.h b/engines/freescape/freescape.h
index 4bdf1713fbd..975eab3bd48 100644
--- a/engines/freescape/freescape.h
+++ b/engines/freescape/freescape.h
@@ -382,7 +382,7 @@ public:
bool _playerWasCrushed;
ObjectArray _sensors;
void checkSensors();
- void drawSensorShoot(Sensor *sensor);
+ virtual void drawSensorShoot(Sensor *sensor);
void takeDamageFromSensor();
bool hasFeature(EngineFeature f) const override;
@@ -456,6 +456,7 @@ public:
void gotoArea(uint16 areaID, int entranceID) override;
void drawInfoMenu() override;
+ void drawSensorShoot(Sensor *sensor) override;
void pressedKey(const int keycode) override;
Common::Error saveGameStreamExtended(Common::WriteStream *stream, bool isAutosave = false) override;
@@ -540,6 +541,7 @@ public:
int _lastTenSeconds;
void updateTimeVariables() override;
+ void drawSensorShoot(Sensor *sensor) override;
void drawDOSUI(Graphics::Surface *surface) override;
void drawZXUI(Graphics::Surface *surface) override;
diff --git a/engines/freescape/games/dark/dark.cpp b/engines/freescape/games/dark/dark.cpp
index b1df56948a8..f8a88365558 100644
--- a/engines/freescape/games/dark/dark.cpp
+++ b/engines/freescape/games/dark/dark.cpp
@@ -451,6 +451,24 @@ void DarkEngine::drawFullscreenMessageAndWait(Common::String message) {
delete surface;
}
+void DarkEngine::drawSensorShoot(Sensor *sensor) {
+ Math::Vector3d target;
+ target = _position;
+ target.y() = target.y() - _playerHeight;
+ target.x() = target.x() - 5;
+ _gfx->renderSensorShoot(1, sensor->getOrigin(), target, _viewArea);
+
+ target = _position;
+ target.y() = target.y() - _playerHeight;
+ _gfx->renderSensorShoot(1, sensor->getOrigin(), target, _viewArea);
+
+ target = _position;
+ target.y() = target.y() - _playerHeight;
+ target.x() = target.x() + 5;
+ _gfx->renderSensorShoot(1, sensor->getOrigin(), target, _viewArea);
+}
+
+
Common::Error DarkEngine::saveGameStreamExtended(Common::WriteStream *stream, bool isAutosave) {
return Common::kNoError;
}
diff --git a/engines/freescape/games/driller/driller.cpp b/engines/freescape/games/driller/driller.cpp
index 1fa52e627b4..7f9d13b8a90 100644
--- a/engines/freescape/games/driller/driller.cpp
+++ b/engines/freescape/games/driller/driller.cpp
@@ -846,6 +846,28 @@ bool DrillerEngine::onScreenControls(Common::Point mouse) {
return false;
}
+void DrillerEngine::drawSensorShoot(Sensor *sensor) {
+ Math::Vector3d target;
+ target = _position;
+ target.y() = target.y() - _playerHeight;
+ target.x() = target.x() - 5;
+ _gfx->renderSensorShoot(1, sensor->getOrigin(), target, _viewArea);
+
+ target = _position;
+ target.y() = target.y() - _playerHeight;
+ target.x() = target.x() + 5;
+ _gfx->renderSensorShoot(1, sensor->getOrigin(), target, _viewArea);
+
+ target = _position;
+ target.y() = target.y() + _playerHeight;
+ target.x() = target.x() - 5;
+ _gfx->renderSensorShoot(1, sensor->getOrigin(), target, _viewArea);
+
+ target = _position;
+ target.y() = target.y() + _playerHeight;
+ target.x() = target.x() + 5;
+ _gfx->renderSensorShoot(1, sensor->getOrigin(), target, _viewArea);
+}
Common::Error DrillerEngine::saveGameStreamExtended(Common::WriteStream *stream, bool isAutosave) {
for (auto &it : _areaMap) { // All but skip area 255
diff --git a/engines/freescape/gfx_opengl.cpp b/engines/freescape/gfx_opengl.cpp
index ce610007652..41609da0f57 100644
--- a/engines/freescape/gfx_opengl.cpp
+++ b/engines/freescape/gfx_opengl.cpp
@@ -177,18 +177,22 @@ void OpenGLRenderer::positionCamera(const Math::Vector3d &pos, const Math::Vecto
glTranslatef(-pos.x(), -pos.y(), -pos.z());
}
-void OpenGLRenderer::renderSensorShoot(byte color, const Math::Vector3d sensor, const Math::Vector3d player, const Common::Rect viewArea) {
+void OpenGLRenderer::renderSensorShoot(byte color, const Math::Vector3d sensor, const Math::Vector3d target, const Common::Rect viewArea) {
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ZERO);
glColor3ub(255, 255, 255);
+
glLineWidth(20);
- polygonOffset(true);
glEnableClientState(GL_VERTEX_ARRAY);
copyToVertexArray(0, sensor);
- copyToVertexArray(1, player);
+ copyToVertexArray(1, target);
glVertexPointer(3, GL_FLOAT, 0, _verts);
glDrawArrays(GL_LINES, 0, 2);
glDisableClientState(GL_VERTEX_ARRAY);
- polygonOffset(false);
glLineWidth(1);
+
+ glDisable(GL_BLEND);
+ glDepthMask(GL_TRUE);
}
void OpenGLRenderer::renderPlayerShoot(byte color, const Common::Point position, const Common::Rect viewArea) {
diff --git a/engines/freescape/gfx_opengl_shaders.cpp b/engines/freescape/gfx_opengl_shaders.cpp
index e030326958b..8f2db32c47a 100644
--- a/engines/freescape/gfx_opengl_shaders.cpp
+++ b/engines/freescape/gfx_opengl_shaders.cpp
@@ -162,19 +162,27 @@ void OpenGLShaderRenderer::positionCamera(const Math::Vector3d &pos, const Math:
_mvpMatrix = proj * model;
_mvpMatrix.transpose();
}
+void OpenGLShaderRenderer::renderSensorShoot(byte color, const Math::Vector3d sensor, const Math::Vector3d target, const Common::Rect viewArea) {
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ZERO);
+ glColor3ub(255, 255, 255);
-void OpenGLShaderRenderer::renderSensorShoot(byte color, const Math::Vector3d sensor, const Math::Vector3d player, const Common::Rect viewArea) {
- /*glColor3ub(255, 255, 255);
glLineWidth(20);
- polygonOffset(true);
glEnableClientState(GL_VERTEX_ARRAY);
copyToVertexArray(0, sensor);
- copyToVertexArray(1, player);
+ copyToVertexArray(1, target);
+
+ glBindBuffer(GL_ARRAY_BUFFER, _triangleVBO);
+ glBufferData(GL_ARRAY_BUFFER, 8 * 3 * sizeof(float), _verts, GL_DYNAMIC_DRAW);
+ glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), nullptr);
+
glVertexPointer(3, GL_FLOAT, 0, _verts);
glDrawArrays(GL_LINES, 0, 2);
glDisableClientState(GL_VERTEX_ARRAY);
- polygonOffset(false);
- glLineWidth(1);*/
+ glLineWidth(1);
+
+ glDisable(GL_BLEND);
+ glDepthMask(GL_TRUE);
}
// TODO: move inside the shader?
Commit: aa64648dd6619d6dd54ed26249d4e2797e809a54
https://github.com/scummvm/scummvm/commit/aa64648dd6619d6dd54ed26249d4e2797e809a54
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2023-07-29T16:05:38+02:00
Commit Message:
FREESCAPE: refactored max shield and max energy variables
Changed paths:
engines/freescape/freescape.cpp
engines/freescape/freescape.h
engines/freescape/games/dark/dark.cpp
engines/freescape/games/dark/dos.cpp
engines/freescape/games/dark/zx.cpp
engines/freescape/games/driller/amiga.cpp
engines/freescape/games/driller/driller.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 5227f454d0d..7c49535d9d3 100644
--- a/engines/freescape/freescape.cpp
+++ b/engines/freescape/freescape.cpp
@@ -152,6 +152,9 @@ FreescapeEngine::FreescapeEngine(OSystem *syst, const ADGameDescription *gd)
_underFireFrames = 0;
_shootingFrames = 0;
+
+ _maxShield = 63;
+ _maxEnergy = 63;
}
FreescapeEngine::~FreescapeEngine() {
@@ -280,6 +283,8 @@ void FreescapeEngine::drawFrame() {
if (isDriller() && (isDOS() || isAmiga() || isAtariST()))
underFireColor = 1;
+ else if (isDark() && (isDOS() || isAmiga() || isAtariST()))
+ underFireColor = 4;
_currentArea->remapColor(_currentArea->_usualBackgroundColor, underFireColor);
_currentArea->remapColor(_currentArea->_skyColor, underFireColor);
diff --git a/engines/freescape/freescape.h b/engines/freescape/freescape.h
index 975eab3bd48..fd48a19e170 100644
--- a/engines/freescape/freescape.h
+++ b/engines/freescape/freescape.h
@@ -237,6 +237,8 @@ public:
bool tryStepUp(Math::Vector3d currentPosition);
bool tryStepDown(Math::Vector3d currentPosition);
bool _hasFallen;
+ int _maxShield;
+ int _maxEnergy;
void rotate(float xoffset, float yoffset);
// Input state
@@ -518,7 +520,7 @@ class DarkEngine : public FreescapeEngine {
public:
DarkEngine(OSystem *syst, const ADGameDescription *gd);
- uint32 _initialFuel;
+ uint32 _initialEnergy;
uint32 _initialShield;
void initGameState() override;
diff --git a/engines/freescape/games/dark/dark.cpp b/engines/freescape/games/dark/dark.cpp
index f8a88365558..c70e27c013c 100644
--- a/engines/freescape/games/dark/dark.cpp
+++ b/engines/freescape/games/dark/dark.cpp
@@ -60,7 +60,7 @@ DarkEngine::DarkEngine(OSystem *syst, const ADGameDescription *gd) : FreescapeEn
_angleRotations.push_back(45);
_angleRotations.push_back(90);
- _initialFuel = 11;
+ _initialEnergy = 11;
_initialShield = 15;
}
@@ -161,7 +161,7 @@ void DarkEngine::initGameState() {
_gameStateBits[it._key] = 0;
}
- _gameStateVars[k8bitVariableEnergy] = _initialFuel;
+ _gameStateVars[k8bitVariableEnergy] = _initialEnergy;
_gameStateVars[k8bitVariableShield] = _initialShield;
_playerHeightNumber = 1;
diff --git a/engines/freescape/games/dark/dos.cpp b/engines/freescape/games/dark/dos.cpp
index b4b8214bc2c..99f3eb549c4 100644
--- a/engines/freescape/games/dark/dos.cpp
+++ b/engines/freescape/games/dark/dos.cpp
@@ -33,6 +33,9 @@ void DarkEngine::initDOS() {
_viewArea = Common::Rect(40, 24, 279, 124);
else
error("Invalid or unknown render mode");
+
+ _maxEnergy = 79;
+ _maxShield = 79;
}
void DarkEngine::loadAssetsDOSDemo() {
@@ -155,19 +158,19 @@ void DarkEngine::drawDOSUI(Graphics::Surface *surface) {
if (shield >= 0) {
Common::Rect shieldBar;
- shieldBar = Common::Rect(72, 139, 151 - (k8bitMaxShield - shield), 146);
+ shieldBar = Common::Rect(72, 139, 151 - (_maxShield - shield), 146);
surface->fillRect(shieldBar, front);
- shieldBar = Common::Rect(72, 140, 151 - (k8bitMaxShield - shield), 145);
+ shieldBar = Common::Rect(72, 140, 151 - (_maxShield - shield), 145);
surface->fillRect(shieldBar, blue);
}
if (energy >= 0) {
Common::Rect energyBar;
- energyBar = Common::Rect(72, 147, 151 - (k8bitMaxEnergy - energy), 154);
+ energyBar = Common::Rect(72, 147, 151 - (_maxEnergy - energy), 154);
surface->fillRect(energyBar, front);
- energyBar = Common::Rect(72, 148, 151 - (k8bitMaxEnergy - energy), 153);
+ energyBar = Common::Rect(72, 148, 151 - (_maxEnergy - energy), 153);
surface->fillRect(energyBar, blue);
}
}
diff --git a/engines/freescape/games/dark/zx.cpp b/engines/freescape/games/dark/zx.cpp
index b5c74f98457..735707b30b2 100644
--- a/engines/freescape/games/dark/zx.cpp
+++ b/engines/freescape/games/dark/zx.cpp
@@ -28,6 +28,8 @@ namespace Freescape {
void DarkEngine::initZX() {
_viewArea = Common::Rect(56, 28, 265, 132);
+ _maxEnergy = 63;
+ _maxShield = 63;
}
void DarkEngine::loadAssetsZXDemo() {
@@ -106,19 +108,19 @@ void DarkEngine::drawZXUI(Graphics::Surface *surface) {
if (shield >= 0) {
Common::Rect shieldBar;
- shieldBar = Common::Rect(80, 141, 151 - (k8bitMaxShield - shield), 147);
+ shieldBar = Common::Rect(80, 141, 143 - (_maxShield - shield), 147);
surface->fillRect(shieldBar, back);
- shieldBar = Common::Rect(80, 142, 151 - (k8bitMaxShield - shield), 146);
+ shieldBar = Common::Rect(80, 142, 143 - (_maxShield - shield), 146);
surface->fillRect(shieldBar, front);
}
if (energy >= 0) {
Common::Rect energyBar;
- energyBar = Common::Rect(72, 147, 151 - (k8bitMaxEnergy - energy), 154);
+ energyBar = Common::Rect(80, 147, 143 - (_maxEnergy - energy), 154);
surface->fillRect(energyBar, back);
- energyBar = Common::Rect(72, 148, 151 - (k8bitMaxEnergy - energy), 153);
+ energyBar = Common::Rect(80, 148, 143 - (_maxEnergy - energy), 153);
surface->fillRect(energyBar, front);
}
}
diff --git a/engines/freescape/games/driller/amiga.cpp b/engines/freescape/games/driller/amiga.cpp
index 7402459aa18..7d52c17d6fe 100644
--- a/engines/freescape/games/driller/amiga.cpp
+++ b/engines/freescape/games/driller/amiga.cpp
@@ -194,25 +194,25 @@ void DrillerEngine::drawAmigaAtariSTUI(Graphics::Surface *surface) {
if (shield >= 0) {
Common::Rect shieldBar;
- shieldBar = Common::Rect(11, 178, 76 - (k8bitMaxShield - shield), 184);
+ shieldBar = Common::Rect(11, 178, 76 - (_maxShield - shield), 184);
surface->fillRect(shieldBar, brown);
- shieldBar = Common::Rect(11, 179, 76 - (k8bitMaxShield - shield), 183);
+ shieldBar = Common::Rect(11, 179, 76 - (_maxShield - shield), 183);
surface->fillRect(shieldBar, brownish);
- shieldBar = Common::Rect(11, 180, 76 - (k8bitMaxShield - shield), 182);
+ shieldBar = Common::Rect(11, 180, 76 - (_maxShield - shield), 182);
surface->fillRect(shieldBar, yellow);
}
if (energy >= 0) {
Common::Rect energyBar;
- energyBar = Common::Rect(11, 186, 75 - (k8bitMaxEnergy - energy), 192);
+ energyBar = Common::Rect(11, 186, 75 - (_maxEnergy - energy), 192);
surface->fillRect(energyBar, brown);
- energyBar = Common::Rect(11, 187, 75 - (k8bitMaxEnergy - energy), 191);
+ energyBar = Common::Rect(11, 187, 75 - (_maxEnergy - energy), 191);
surface->fillRect(energyBar, brownish);
- energyBar = Common::Rect(11, 188, 75 - (k8bitMaxEnergy - energy), 190);
+ energyBar = Common::Rect(11, 188, 75 - (_maxEnergy - energy), 190);
surface->fillRect(energyBar, yellow);
}
}
diff --git a/engines/freescape/games/driller/driller.cpp b/engines/freescape/games/driller/driller.cpp
index 7f9d13b8a90..9efc659b5e2 100644
--- a/engines/freescape/games/driller/driller.cpp
+++ b/engines/freescape/games/driller/driller.cpp
@@ -74,6 +74,9 @@ DrillerEngine::DrillerEngine(OSystem *syst, const ADGameDescription *gd) : Frees
_initialJetEnergy = 29;
_initialJetShield = 34;
+ _maxEnergy = 63;
+ _maxShield = 63;
+
Math::Vector3d drillBaseOrigin = Math::Vector3d(0, 0, 0);
Math::Vector3d drillBaseSize = Math::Vector3d(3, 2, 3);
_drillBase = new GeometricObject(kCubeType, 0, 0, drillBaseOrigin, drillBaseSize, nullptr, nullptr, FCLInstructionVector(), "");
diff --git a/engines/freescape/language/8bitDetokeniser.cpp b/engines/freescape/language/8bitDetokeniser.cpp
index 9b14205e1a1..747ce3e9101 100644
--- a/engines/freescape/language/8bitDetokeniser.cpp
+++ b/engines/freescape/language/8bitDetokeniser.cpp
@@ -30,8 +30,6 @@
namespace Freescape {
uint8 k8bitMaxVariable = 64;
-uint8 k8bitMaxShield = 64;
-uint8 k8bitMaxEnergy = 64;
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 09df12a11e3..246deae6727 100644
--- a/engines/freescape/language/8bitDetokeniser.h
+++ b/engines/freescape/language/8bitDetokeniser.h
@@ -44,8 +44,6 @@ enum {
};
extern uint8 k8bitMaxVariable;
-extern uint8 k8bitMaxShield;
-extern uint8 k8bitMaxEnergy;
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 914340d6f09..907b1ff0540 100644
--- a/engines/freescape/language/instruction.cpp
+++ b/engines/freescape/language/instruction.cpp
@@ -417,15 +417,15 @@ void FreescapeEngine::executeIncrementVariable(FCLInstruction &instruction) {
debugC(1, kFreescapeDebugCode, "Score incremented by %d up to %d", increment, _gameStateVars[variable]);
break;
case k8bitVariableEnergy:
- if (_gameStateVars[variable] > k8bitMaxEnergy)
- _gameStateVars[variable] = k8bitMaxEnergy;
+ 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:
- if (_gameStateVars[variable] > k8bitMaxShield)
- _gameStateVars[variable] = k8bitMaxShield;
+ if (_gameStateVars[variable] > _maxShield)
+ _gameStateVars[variable] = _maxShield;
else if (_gameStateVars[variable] < 0)
_gameStateVars[variable] = 0;
Commit: cc566ac4f0b2d3fb3ef8637527609855eeafa277
https://github.com/scummvm/scummvm/commit/cc566ac4f0b2d3fb3ef8637527609855eeafa277
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2023-07-29T16:05:38+02:00
Commit Message:
FREESCAPE: explored area and ECD score implemented in dark
Changed paths:
engines/freescape/freescape.h
engines/freescape/games/dark/dark.cpp
engines/freescape/games/dark/zx.cpp
diff --git a/engines/freescape/freescape.h b/engines/freescape/freescape.h
index fd48a19e170..9ff9be4eda7 100644
--- a/engines/freescape/freescape.h
+++ b/engines/freescape/freescape.h
@@ -560,6 +560,7 @@ private:
bool checkECD(int index);
void addWalls(Area *area);
Common::SeekableReadStream *decryptFile(const Common::String filename);
+ Common::HashMap<uint16, bool> _exploredAreas;
};
class EclipseEngine : public FreescapeEngine {
diff --git a/engines/freescape/games/dark/dark.cpp b/engines/freescape/games/dark/dark.cpp
index c70e27c013c..80bfb9c1f4d 100644
--- a/engines/freescape/games/dark/dark.cpp
+++ b/engines/freescape/games/dark/dark.cpp
@@ -171,6 +171,8 @@ void DarkEngine::initGameState() {
_lastMinute = 0;
_demoIndex = 0;
_demoEvents.clear();
+ _exploredAreas.clear();
+ _exploredAreas[_startArea] = true;
}
bool DarkEngine::checkECD(int index) {
@@ -187,9 +189,10 @@ bool DarkEngine::checkECD(int index) {
bool DarkEngine::checkIfGameEnded() {
if (_gameStateVars[kVariableDarkECD] > 0) {
bool destroyed = checkECD(_gameStateVars[kVariableDarkECD] - 1);
- if (destroyed)
+ if (destroyed) {
+ _gameStateVars[k8bitVariableScore] += 52750;
insertTemporaryMessage(_messagesList[2], _countdown - 2);
- else
+ } else
insertTemporaryMessage(_messagesList[1], _countdown - 2);
_gameStateVars[kVariableDarkECD] = 0;
}
@@ -249,6 +252,11 @@ void DarkEngine::gotoArea(uint16 areaID, int entranceID) {
if (!_gameStateBits.contains(areaID))
_gameStateBits[areaID] = 0;
+ if (!_exploredAreas.contains(areaID)) {
+ _gameStateVars[k8bitVariableScore] += 17500;
+ _exploredAreas[areaID] = true;
+ }
+
if (isDemo()) {
if (!_areaMap.contains(areaID)) {
drawFullscreenMessageAndWait(_messagesList[30]);
@@ -470,10 +478,18 @@ void DarkEngine::drawSensorShoot(Sensor *sensor) {
Common::Error DarkEngine::saveGameStreamExtended(Common::WriteStream *stream, bool isAutosave) {
+ for (auto &it : _areaMap) {
+ stream->writeUint16LE(it._key);
+ stream->writeUint32LE(_exploredAreas[it._key]);
+ }
return Common::kNoError;
}
Common::Error DarkEngine::loadGameStreamExtended(Common::SeekableReadStream *stream) {
+ for (uint i = 0; i < _areaMap.size(); i++) {
+ uint16 key = stream->readUint16LE();
+ _exploredAreas[key] = stream->readUint32LE();
+ }
return Common::kNoError;
}
diff --git a/engines/freescape/games/dark/zx.cpp b/engines/freescape/games/dark/zx.cpp
index 735707b30b2..7d540bb7dc8 100644
--- a/engines/freescape/games/dark/zx.cpp
+++ b/engines/freescape/games/dark/zx.cpp
@@ -108,19 +108,19 @@ void DarkEngine::drawZXUI(Graphics::Surface *surface) {
if (shield >= 0) {
Common::Rect shieldBar;
- shieldBar = Common::Rect(80, 141, 143 - (_maxShield - shield), 147);
+ shieldBar = Common::Rect(80, 140, 143 - (_maxShield - shield), 148);
surface->fillRect(shieldBar, back);
- shieldBar = Common::Rect(80, 142, 143 - (_maxShield - shield), 146);
+ shieldBar = Common::Rect(80, 141, 143 - (_maxShield - shield), 147);
surface->fillRect(shieldBar, front);
}
if (energy >= 0) {
Common::Rect energyBar;
- energyBar = Common::Rect(80, 147, 143 - (_maxEnergy - energy), 154);
+ energyBar = Common::Rect(80, 147, 143 - (_maxEnergy - energy), 155);
surface->fillRect(energyBar, back);
- energyBar = Common::Rect(80, 148, 143 - (_maxEnergy - energy), 153);
+ energyBar = Common::Rect(80, 148, 143 - (_maxEnergy - energy), 154);
surface->fillRect(energyBar, front);
}
}
Commit: 101e1e6c685e676b67d0b3d9d42bec314b427202
https://github.com/scummvm/scummvm/commit/101e1e6c685e676b67d0b3d9d42bec314b427202
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2023-07-29T16:05:38+02:00
Commit Message:
FREESCAPE: detect alternative dark release for dos
Changed paths:
engines/freescape/detection.cpp
diff --git a/engines/freescape/detection.cpp b/engines/freescape/detection.cpp
index ad2a419ff0c..cdc3a29e403 100644
--- a/engines/freescape/detection.cpp
+++ b/engines/freescape/detection.cpp
@@ -304,6 +304,21 @@ static const ADGameDescription gameDescriptions[] = {
ADGF_UNSTABLE,
GUIO3(GUIO_NOMIDI, GUIO_RENDEREGA, GUIO_RENDERCGA)
},
+ {
+ "darkside",
+ "",
+ {
+ {"DARKSIDE.EXE", 0, "477c8249665c00e001a84f94911b5960", 21325},
+ {"DSIDEC.EXE", 0, "d4d443777411d6141e94bbf464914251", 49504},
+ {"DSIDEE.EXE", 0, "9d9ba99a8b7c1ae49f9cc328bfa862dd", 56800},
+ {"DSIDEH.EXE", 0, "7764dadc5a0baf0960e9323a8629e321", 53232},
+ AD_LISTEND
+ },
+ Common::EN_ANY,
+ Common::kPlatformDOS,
+ ADGF_UNSTABLE,
+ GUIO3(GUIO_NOMIDI, GUIO_RENDEREGA, GUIO_RENDERCGA)
+ },
{
"darkside",
"Demo",
Commit: 6abfd2d91b6cae52302740b494925dedfe880b70
https://github.com/scummvm/scummvm/commit/6abfd2d91b6cae52302740b494925dedfe880b70
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2023-07-29T16:05:38+02:00
Commit Message:
FREESCAPE: show active ecds in dark
Changed paths:
engines/freescape/games/dark/dark.cpp
engines/freescape/games/dark/dos.cpp
diff --git a/engines/freescape/games/dark/dark.cpp b/engines/freescape/games/dark/dark.cpp
index 80bfb9c1f4d..edceb25af3b 100644
--- a/engines/freescape/games/dark/dark.cpp
+++ b/engines/freescape/games/dark/dark.cpp
@@ -22,22 +22,13 @@
#include "common/file.h"
#include "freescape/freescape.h"
+#include "freescape/games/dark/dark.h"
#include "freescape/language/8bitDetokeniser.h"
#include "freescape/objects/global.h"
#include "freescape/objects/connections.h"
namespace Freescape {
-enum {
- kVariableDarkEnding = 28,
- kVariableDarkECD = 29,
-};
-
-enum {
- kDarkEndingEvathDestroyed = 1,
- kDarkEndingECDsDestroyed = 2,
-};
-
DarkEngine::DarkEngine(OSystem *syst, const ADGameDescription *gd) : FreescapeEngine(syst, gd) {
if (isDOS())
initDOS();
@@ -163,6 +154,7 @@ void DarkEngine::initGameState() {
_gameStateVars[k8bitVariableEnergy] = _initialEnergy;
_gameStateVars[k8bitVariableShield] = _initialShield;
+ _gameStateVars[kVariableActiveECDs] = 100;
_playerHeightNumber = 1;
_playerHeight = _playerHeights[_playerHeightNumber];
@@ -190,6 +182,7 @@ bool DarkEngine::checkIfGameEnded() {
if (_gameStateVars[kVariableDarkECD] > 0) {
bool destroyed = checkECD(_gameStateVars[kVariableDarkECD] - 1);
if (destroyed) {
+ _gameStateVars[kVariableActiveECDs] -= 4;
_gameStateVars[k8bitVariableScore] += 52750;
insertTemporaryMessage(_messagesList[2], _countdown - 2);
} else
diff --git a/engines/freescape/games/dark/dos.cpp b/engines/freescape/games/dark/dos.cpp
index 99f3eb549c4..8c6ca0a64ad 100644
--- a/engines/freescape/games/dark/dos.cpp
+++ b/engines/freescape/games/dark/dos.cpp
@@ -22,6 +22,7 @@
#include "common/file.h"
#include "freescape/freescape.h"
+#include "freescape/games/dark/dark.h"
#include "freescape/language/8bitDetokeniser.h"
namespace Freescape {
@@ -128,6 +129,7 @@ void DarkEngine::drawDOSUI(Graphics::Surface *surface) {
uint32 back = _gfx->_texturePixelFormat.ARGBToColor(0xFF, r, g, b);
int score = _gameStateVars[k8bitVariableScore];
+ int ecds = _gameStateVars[kVariableActiveECDs];
drawStringInSurface(Common::String::format("%04d", int(2 * _position.x())), 199, 137, front, back, surface);
drawStringInSurface(Common::String::format("%04d", int(2 * _position.z())), 199, 145, front, back, surface);
drawStringInSurface(Common::String::format("%04d", int(2 * _position.y())), 199, 153, front, back, surface);
@@ -135,6 +137,7 @@ void DarkEngine::drawDOSUI(Graphics::Surface *surface) {
drawStringInSurface(Common::String::format("%02d", int(_angleRotations[_angleRotationIndex])), 71, 168, front, back, surface);
drawStringInSurface(Common::String::format("%3d", _playerSteps[_playerStepIndex]), 71, 177, front, back, surface);
drawStringInSurface(Common::String::format("%07d", score), 95, 8, front, back, surface);
+ drawStringInSurface(Common::String::format("%3d%%", ecds), 192, 8, front, back, surface);
int seconds, minutes, hours;
getTimeFromCountdown(seconds, minutes, hours);
Commit: f2e512c8c97da9f5e30fe1430ccf757ba871f1dd
https://github.com/scummvm/scummvm/commit/f2e512c8c97da9f5e30fe1430ccf757ba871f1dd
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2023-07-29T16:05:38+02:00
Commit Message:
FREESCAPE: added missing header file
Changed paths:
A engines/freescape/games/dark/dark.h
diff --git a/engines/freescape/games/dark/dark.h b/engines/freescape/games/dark/dark.h
new file mode 100644
index 00000000000..f8a1b9bfcf4
--- /dev/null
+++ b/engines/freescape/games/dark/dark.h
@@ -0,0 +1,35 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Freescape {
+
+enum {
+ kVariableDarkEnding = 28,
+ kVariableDarkECD = 29,
+ kVariableActiveECDs = 60,
+};
+
+enum {
+ kDarkEndingEvathDestroyed = 1,
+ kDarkEndingECDsDestroyed = 2,
+};
+
+}
\ No newline at end of file
Commit: 79cc368fee2636f4bb68abcdf1796a32324eca88
https://github.com/scummvm/scummvm/commit/79cc368fee2636f4bb68abcdf1796a32324eca88
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2023-07-29T17:37:00+02:00
Commit Message:
FREESCAPE: handle falling while far from the floor using the jetpack in dark
Changed paths:
engines/freescape/games/dark/dark.cpp
diff --git a/engines/freescape/games/dark/dark.cpp b/engines/freescape/games/dark/dark.cpp
index edceb25af3b..72c5cce8bd8 100644
--- a/engines/freescape/games/dark/dark.cpp
+++ b/engines/freescape/games/dark/dark.cpp
@@ -190,7 +190,19 @@ bool DarkEngine::checkIfGameEnded() {
_gameStateVars[kVariableDarkECD] = 0;
}
- if (_playerWasCrushed) {
+ if (_hasFallen) {
+ _hasFallen = false;
+ _gameStateVars[kVariableDarkEnding] = kDarkEndingEvathDestroyed;
+ playSound(14, false);
+ insertTemporaryMessage(_messagesList[17], _countdown - 4);
+ drawBackground();
+ drawBorder();
+ drawUI();
+ _gfx->flipBuffer();
+ g_system->updateScreen();
+ g_system->delayMillis(1000);
+ gotoArea(1, 26);
+ } else if (_playerWasCrushed) {
insertTemporaryMessage(_messagesList[10], _countdown - 2);
_gameStateVars[kVariableDarkEnding] = kDarkEndingEvathDestroyed;
drawFrame();
@@ -313,7 +325,14 @@ void DarkEngine::gotoArea(uint16 areaID, int entranceID) {
void DarkEngine::pressedKey(const int keycode) {
if (keycode == Common::KEYCODE_j) {
_flyMode = !_flyMode;
- insertTemporaryMessage(_messagesList[_flyMode ? 11 : 12], _countdown - 2);
+
+ if (_flyMode)
+ insertTemporaryMessage(_messagesList[11], _countdown - 2);
+ else {
+ resolveCollisions(_position);
+ if (!_hasFallen)
+ insertTemporaryMessage(_messagesList[12], _countdown - 2);
+ }
}
}
More information about the Scummvm-git-logs
mailing list