[Scummvm-git-logs] scummvm master -> 2cede05c300f72ee5b43936a9e73c523df3762df
neuromancer
noreply at scummvm.org
Tue Nov 15 07:41:46 UTC 2022
This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
c98f464901 FREESCAPE: get and check sensors every certain number of ticks
2cede05c30 FREESCAPE: save and load countdown timer
Commit: c98f4649017fe1610629b1e99f08c13a35e90e21
https://github.com/scummvm/scummvm/commit/c98f4649017fe1610629b1e99f08c13a35e90e21
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-11-15T08:42:45+01:00
Commit Message:
FREESCAPE: get and check sensors every certain number of ticks
Changed paths:
engines/freescape/area.cpp
engines/freescape/area.h
engines/freescape/freescape.cpp
engines/freescape/freescape.h
engines/freescape/movement.cpp
diff --git a/engines/freescape/area.cpp b/engines/freescape/area.cpp
index 6642e68b129..934a4ce59b1 100644
--- a/engines/freescape/area.cpp
+++ b/engines/freescape/area.cpp
@@ -109,6 +109,16 @@ Area::~Area() {
delete _objectsByID;
}
+ObjectArray Area::getSensors() {
+ ObjectArray sensors;
+ debugC(1, kFreescapeDebugMove, "Area name: %s", _name.c_str());
+ for (auto &it : *_objectsByID) {
+ if (it._value->getType() == kSensorType)
+ sensors.push_back(it._value);
+ }
+ return sensors;
+}
+
void Area::show() {
debugC(1, kFreescapeDebugMove, "Area name: %s", _name.c_str());
for (auto &it : *_objectsByID)
diff --git a/engines/freescape/area.h b/engines/freescape/area.h
index d4af67b095d..cdb605edb53 100644
--- a/engines/freescape/area.h
+++ b/engines/freescape/area.h
@@ -43,6 +43,7 @@ public:
Common::String _name;
Object *objectWithID(uint16 objectID);
Object *entranceWithID(uint16 objectID);
+ ObjectArray getSensors();
uint16 getAreaID();
uint16 getAreaFlags();
uint8 getScale();
diff --git a/engines/freescape/freescape.cpp b/engines/freescape/freescape.cpp
index 04bf0c70285..03bd0ee7d49 100644
--- a/engines/freescape/freescape.cpp
+++ b/engines/freescape/freescape.cpp
@@ -30,6 +30,7 @@
#include "freescape/freescape.h"
#include "freescape/language/8bitDetokeniser.h"
#include "freescape/neo.h"
+#include "freescape/objects/sensor.h"
namespace Freescape {
@@ -117,6 +118,7 @@ FreescapeEngine::FreescapeEngine(OSystem *syst, const ADGameDescription *gd)
_timerStarted = false;
_countdown = 0;
+ _ticks = 0;
_frameLimiter = nullptr;
}
@@ -207,6 +209,16 @@ void FreescapeEngine::centerCrossair() {
_crossairPosition.y = _viewArea.top + _viewArea.height() / 2;
}
+void FreescapeEngine::checkSensors() {
+ for (auto &it : _sensors) {
+ Sensor *sensor = (Sensor *)it;
+ if ((sensor->getOrigin() - _position).length() <= sensor->_firingRange) {
+ if (_ticks % sensor->_firingInterval == 0)
+ warning("shoot!");
+ }
+ }
+}
+
void FreescapeEngine::drawFrame() {
_gfx->updateProjectionMatrix(70.0, _nearClipPlane, _farClipPlane);
_gfx->positionCamera(_position, _position + _cameraFront);
@@ -479,6 +491,7 @@ Common::Error FreescapeEngine::run() {
g_system->updateScreen();
while (!shouldQuit() && !endGame) {
+ checkSensors();
drawFrame();
if (_demoMode)
generateInput();
@@ -708,14 +721,16 @@ Graphics::Surface *FreescapeEngine::loadAndConvertNeoImage(Common::SeekableReadS
static void countdownCallback(void *refCon) {
FreescapeEngine* self = (FreescapeEngine *)refCon;
- self->_countdown--;
+ self->_ticks++;
+ if (self->_ticks % 50 == 0)
+ self->_countdown--;
}
bool FreescapeEngine::startCountdown(uint32 delay) {
_countdown = delay;
_timerStarted = true;
- uint32 oneSecond = 1000000;
- return g_system->getTimerManager()->installTimerProc(&countdownCallback, oneSecond, (void *)this, "countdown");
+ uint32 oneTick = 1000000 / 50;
+ return g_system->getTimerManager()->installTimerProc(&countdownCallback, oneTick, (void *)this, "countdown");
}
void FreescapeEngine::removeTimers() {
diff --git a/engines/freescape/freescape.h b/engines/freescape/freescape.h
index 6d2451694bd..84335e61267 100644
--- a/engines/freescape/freescape.h
+++ b/engines/freescape/freescape.h
@@ -289,6 +289,9 @@ public:
StateVars _gameStateVars;
StateBits _gameStateBits;
virtual bool checkIfGameEnded();
+ ObjectArray _sensors;
+ void checkSensors();
+
bool hasFeature(EngineFeature f) const override;
bool canLoadGameStateCurrently() override { return true; }
@@ -304,6 +307,7 @@ public:
void removeTimers();
bool _timerStarted;
int _countdown;
+ int _ticks;
};
enum DrillerReleaseFlags {
diff --git a/engines/freescape/movement.cpp b/engines/freescape/movement.cpp
index 6338c4770f3..934560ec909 100644
--- a/engines/freescape/movement.cpp
+++ b/engines/freescape/movement.cpp
@@ -57,6 +57,8 @@ void FreescapeEngine::traverseEntrance(uint16 entranceID) {
_playerHeight = 2;
debugC(1, kFreescapeDebugMove, "player height: %d", _playerHeight);
_position.setValue(1, _position.y() + _playerHeight);
+
+ _sensors = _currentArea->getSensors();
}
void FreescapeEngine::shoot() {
Commit: 2cede05c300f72ee5b43936a9e73c523df3762df
https://github.com/scummvm/scummvm/commit/2cede05c300f72ee5b43936a9e73c523df3762df
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-11-15T08:42:45+01:00
Commit Message:
FREESCAPE: save and load countdown timer
Changed paths:
engines/freescape/freescape.cpp
diff --git a/engines/freescape/freescape.cpp b/engines/freescape/freescape.cpp
index 03bd0ee7d49..9aadfe82b0d 100644
--- a/engines/freescape/freescape.cpp
+++ b/engines/freescape/freescape.cpp
@@ -628,6 +628,8 @@ Common::Error FreescapeEngine::loadGameStream(Common::SeekableReadStream *stream
_flyMode = stream->readByte();
_playerHeightNumber = stream->readUint32LE();
+ _countdown = stream->readUint32LE();
+ _ticks = 0;
if (!_currentArea || _currentArea->getAreaID() != areaID)
gotoArea(areaID, -1); // Do not change position nor rotation
return loadGameStreamExtended(stream);
@@ -666,6 +668,7 @@ Common::Error FreescapeEngine::saveGameStream(Common::WriteStream *stream, bool
stream->writeByte(_flyMode);
stream->writeUint32LE(_playerHeightNumber);
+ stream->writeUint32LE(_countdown);
return saveGameStreamExtended(stream, isAutosave);
}
More information about the Scummvm-git-logs
mailing list