[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