[Scummvm-git-logs] scummvm master -> a0e816370b21b61ab9083b3b2018e79ab327b64a

neuromancer noreply at scummvm.org
Wed Nov 30 11:36:00 UTC 2022


This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
ae0620cbf4 FREESCAPE: make sure thumbnail image is always created from the screen
4c969c7c47 FREESCAPE: basic implementation of code that restart the game in driller
3f2fd5d703 FREESCAPE: reset player height when restart game in driller
a0e816370b FREESCAPE: relocated the code that process demo inputs


Commit: ae0620cbf412ef4625d6ac22c5a5a5981b33f806
    https://github.com/scummvm/scummvm/commit/ae0620cbf412ef4625d6ac22c5a5a5981b33f806
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-11-30T12:36:49+01:00

Commit Message:
FREESCAPE: make sure thumbnail image is always created from the screen

Changed paths:
    engines/freescape/gfx.cpp
    engines/freescape/gfx.h
    engines/freescape/gfx_opengl.cpp
    engines/freescape/gfx_opengl.h
    engines/freescape/gfx_tinygl.cpp
    engines/freescape/gfx_tinygl.h
    engines/freescape/metaengine.cpp


diff --git a/engines/freescape/gfx.cpp b/engines/freescape/gfx.cpp
index 10bbed2385c..1db3b8fb7f6 100644
--- a/engines/freescape/gfx.cpp
+++ b/engines/freescape/gfx.cpp
@@ -100,6 +100,17 @@ bool Renderer::getRGBAt(uint8 index, uint8 &r, uint8 &g, uint8 &b) {
 	return true;
 }
 
+void Renderer::flipVertical(Graphics::Surface *s) {
+	for (int y = 0; y < s->h / 2; ++y) {
+		// Flip the lines
+		byte *line1P = (byte *)s->getBasePtr(0, y);
+		byte *line2P = (byte *)s->getBasePtr(0, s->h - y - 1);
+
+		for (int x = 0; x < s->pitch; ++x)
+			SWAP(line1P[x], line2P[x]);
+	}
+}
+
 void Renderer::convertImageFormatIfNecessary(Graphics::Surface *surface) {
 	if (!surface)
 		return;
diff --git a/engines/freescape/gfx.h b/engines/freescape/gfx.h
index 1b5cd7b2dde..2ddddce6b42 100644
--- a/engines/freescape/gfx.h
+++ b/engines/freescape/gfx.h
@@ -113,7 +113,7 @@ public:
 	virtual void updateProjectionMatrix(float fov, float nearClipPlane, float farClipPlane) = 0;
 
 	Math::Matrix4 getMvpMatrix() const { return _mvpMatrix; }
-
+	virtual Graphics::Surface *getScreenshot() = 0;
 	void flipVertical(Graphics::Surface *s);
 
 	int _screenW;
diff --git a/engines/freescape/gfx_opengl.cpp b/engines/freescape/gfx_opengl.cpp
index bbb90caada2..488b1dab103 100644
--- a/engines/freescape/gfx_opengl.cpp
+++ b/engines/freescape/gfx_opengl.cpp
@@ -298,4 +298,18 @@ void OpenGLRenderer::drawFloor(uint8 color) {
 
 void OpenGLRenderer::flipBuffer() {}
 
+Graphics::Surface *OpenGLRenderer::getScreenshot() {
+	Common::Rect screen = viewport();
+
+	Graphics::Surface *s = new Graphics::Surface();
+	s->create(screen.width(), screen.height(), OpenGLTexture::getRGBAPixelFormat());
+
+	glReadPixels(screen.left, screen.top, screen.width(), screen.height(), GL_RGBA, GL_UNSIGNED_BYTE, s->getPixels());
+
+	flipVertical(s);
+
+	return s;
+}
+
+
 } // End of namespace Freescape
diff --git a/engines/freescape/gfx_opengl.h b/engines/freescape/gfx_opengl.h
index 4cefff98832..aa3669a8f38 100644
--- a/engines/freescape/gfx_opengl.h
+++ b/engines/freescape/gfx_opengl.h
@@ -79,6 +79,8 @@ public:
 
 	virtual void flipBuffer() override;
 	virtual void drawFloor(uint8 color) override;
+
+	virtual Graphics::Surface *getScreenshot() override;
 };
 
 } // End of namespace Freescape
diff --git a/engines/freescape/gfx_tinygl.cpp b/engines/freescape/gfx_tinygl.cpp
index 421a8391b10..0af00934fa3 100644
--- a/engines/freescape/gfx_tinygl.cpp
+++ b/engines/freescape/gfx_tinygl.cpp
@@ -255,4 +255,15 @@ void TinyGLRenderer::flipBuffer() {
 	}
 }
 
+Graphics::Surface *TinyGLRenderer::getScreenshot() {
+	Graphics::Surface glBuffer;
+	TinyGL::getSurfaceRef(glBuffer);
+
+	Graphics::Surface *s = new Graphics::Surface();
+	s->create(_screenW, _screenH, TinyGLTexture::getRGBAPixelFormat());
+	s->copyFrom(glBuffer);
+
+	return s;
+}
+
 } // End of namespace Freescape
diff --git a/engines/freescape/gfx_tinygl.h b/engines/freescape/gfx_tinygl.h
index f358ae29cd2..e5a6f3d480e 100644
--- a/engines/freescape/gfx_tinygl.h
+++ b/engines/freescape/gfx_tinygl.h
@@ -65,6 +65,7 @@ public:
 
 	virtual void flipBuffer() override;
 	virtual void drawFloor(uint8 color) override;
+	virtual Graphics::Surface *getScreenshot() override;
 };
 
 } // End of namespace Freescape
diff --git a/engines/freescape/metaengine.cpp b/engines/freescape/metaengine.cpp
index ecb7796d666..a21b3eeb93d 100644
--- a/engines/freescape/metaengine.cpp
+++ b/engines/freescape/metaengine.cpp
@@ -20,10 +20,14 @@
  */
 
 #include "common/translation.h"
+#include "graphics/thumbnail.h"
+#include "graphics/scaler.h"
+
 
 #include "freescape/freescape.h"
 #include "freescape/detection.h"
 
+
 static const ADExtraGuiOptionsMap optionsList[] = {
 	{
 		GAMEOPTION_PRERECORDED_SOUNDS,
@@ -84,6 +88,7 @@ public:
 	}
 
 	Common::Error createInstance(OSystem *syst, Engine **engine, const ADGameDescription *gd) const override;
+	void getSavegameThumbnail(Graphics::Surface &thumb) override;
 };
 
 Common::Error FreescapeMetaEngine::createInstance(OSystem *syst, Engine **engine, const ADGameDescription *gd) const {
@@ -101,6 +106,21 @@ Common::Error FreescapeMetaEngine::createInstance(OSystem *syst, Engine **engine
 	return Common::kNoError;
 }
 
+void FreescapeMetaEngine::getSavegameThumbnail(Graphics::Surface &thumb) {
+	Freescape::FreescapeEngine *engine = (Freescape::FreescapeEngine *)g_engine;
+	Graphics::Surface *savedScreen = engine->_gfx->getScreenshot();
+	assert(savedScreen);
+	Graphics::Surface *scaledSavedScreen = scale(*savedScreen, kThumbnailWidth, kThumbnailHeight2);
+	assert(scaledSavedScreen);
+	thumb.copyFrom(*scaledSavedScreen);
+
+	scaledSavedScreen->free();
+	delete scaledSavedScreen;
+
+	savedScreen->free();
+	delete savedScreen;
+}
+
 namespace Freescape {
 
 bool FreescapeEngine::isDemo() const {


Commit: 4c969c7c47586436acf700825634af1086b6dd88
    https://github.com/scummvm/scummvm/commit/4c969c7c47586436acf700825634af1086b6dd88
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-11-30T12:36:49+01:00

Commit Message:
FREESCAPE: basic implementation of code that restart the game in driller

Changed paths:
    engines/freescape/area.cpp
    engines/freescape/area.h
    engines/freescape/freescape.cpp
    engines/freescape/freescape.h
    engines/freescape/games/driller.cpp
    engines/freescape/loaders/8bitBinaryLoader.cpp
    engines/freescape/objects/geometricobject.cpp
    engines/freescape/objects/object.h


diff --git a/engines/freescape/area.cpp b/engines/freescape/area.cpp
index e3e5ef57e41..0de9a796f0a 100644
--- a/engines/freescape/area.cpp
+++ b/engines/freescape/area.cpp
@@ -175,6 +175,36 @@ void Area::unremapColor(int index) {
 	_colorRemaps.clear(index);
 }
 
+void Area::resetArea() {
+	debugC(1, kFreescapeDebugMove, "Resetting area name: %s", _name.c_str());
+	_colorRemaps.clear();
+	if (_objectsByID) {
+		for (auto &it : *_objectsByID) {
+			Object *obj = it._value;
+			if (obj->isDestroyed())
+				obj->restore();
+
+			if (obj->isInitiallyInvisible())
+				obj->makeInvisible();
+			else
+				obj->makeVisible();
+		}
+	}
+	if (_entrancesByID) {
+		for (auto &it : *_entrancesByID) {
+			Object *obj = it._value;
+			if (obj->isDestroyed())
+				obj->restore();
+
+			if (obj->isInitiallyInvisible())
+				obj->makeInvisible();
+			else
+				obj->makeVisible();
+		}
+	}
+}
+
+
 void Area::draw(Freescape::Renderer *gfx) {
 	gfx->clear(_skyColor);
 	assert(_drawableObjects.size() > 0);
diff --git a/engines/freescape/area.h b/engines/freescape/area.h
index 78537689c39..1c71490efa2 100644
--- a/engines/freescape/area.h
+++ b/engines/freescape/area.h
@@ -59,6 +59,7 @@ public:
 	void addObject(Object *obj);
 	void addStructure(Area *global);
 	void removeObject(int16 id);
+	void resetArea();
 
 	Common::Array<Common::String> _conditionSources;
 	Common::Array<FCLInstructionVector> _conditions;
diff --git a/engines/freescape/freescape.cpp b/engines/freescape/freescape.cpp
index 1d1003cefa9..c1f7f797c3b 100644
--- a/engines/freescape/freescape.cpp
+++ b/engines/freescape/freescape.cpp
@@ -124,6 +124,7 @@ FreescapeEngine::FreescapeEngine(OSystem *syst, const ADGameDescription *gd)
 	_gfx = nullptr;
 
 	_timerStarted = false;
+	_initialCountdown = 0;
 	_countdown = 0;
 	_ticks = 0;
 	_frameLimiter = nullptr;
@@ -587,7 +588,13 @@ Common::Error FreescapeEngine::run() {
 	_gfx->flipBuffer();
 	g_system->updateScreen();
 
-	while (!shouldQuit() && !endGame) {
+	while (!shouldQuit()) {
+		if (endGame) {
+			initGameState();
+			gotoArea(_startArea, _startEntrance);
+			endGame = false;
+		}
+
 		bool frameRedrawed = checkSensors();
 
 		if (!frameRedrawed)
@@ -848,6 +855,7 @@ static void countdownCallback(void *refCon) {
 
 bool FreescapeEngine::startCountdown(uint32 delay) {
 	_countdown = delay;
+	_ticks = 0;
 	_timerStarted = true;
 	uint32 oneTick = 1000000 / 50;
 	return g_system->getTimerManager()->installTimerProc(&countdownCallback, oneTick, (void *)this, "countdown");
diff --git a/engines/freescape/freescape.h b/engines/freescape/freescape.h
index 6144c0af106..7c01db85a57 100644
--- a/engines/freescape/freescape.h
+++ b/engines/freescape/freescape.h
@@ -318,6 +318,7 @@ public:
 	bool startCountdown(uint32 delay);
 	void removeTimers();
 	bool _timerStarted;
+	int _initialCountdown;
 	int _countdown;
 	int _ticks;
 
diff --git a/engines/freescape/games/driller.cpp b/engines/freescape/games/driller.cpp
index 058df2f30a1..d534de1c41e 100644
--- a/engines/freescape/games/driller.cpp
+++ b/engines/freescape/games/driller.cpp
@@ -782,11 +782,19 @@ void DrillerEngine::removeDrill(Area *area) {
 }
 
 void DrillerEngine::initGameState() {
+	_flyMode = false;
+	_lastMousePos = Common::Point(0, 0);
+	_yaw = 0;
+	_pitch = 0;
+
 	for (int i = 0; i < k8bitMaxVariable; i++) // TODO: check maximum variable
 		_gameStateVars[i] = 0;
 
 	for (auto &it : _areaMap) {
+		it._value->resetArea();
 		_gameStateBits[it._key] = 0;
+		if (_drilledAreas[it._key] != kDrillerNoRig)
+			removeDrill(it._value);
 		_drilledAreas[it._key] = kDrillerNoRig;
 	}
 
@@ -799,8 +807,8 @@ void DrillerEngine::initGameState() {
 	_gameStateVars[k8bitVariableEnergyDrillerJet] = _initialJetEnergy;
 	_gameStateVars[k8bitVariableShieldDrillerJet] = _initialJetShield;
 
-	if (_countdown > 0)
-		startCountdown(_countdown);
+	removeTimers();
+	startCountdown(_initialCountdown);
 }
 
 bool DrillerEngine::checkIfGameEnded() {
diff --git a/engines/freescape/loaders/8bitBinaryLoader.cpp b/engines/freescape/loaders/8bitBinaryLoader.cpp
index ab5b1f0ef4c..89d44ca586c 100644
--- a/engines/freescape/loaders/8bitBinaryLoader.cpp
+++ b/engines/freescape/loaders/8bitBinaryLoader.cpp
@@ -513,24 +513,24 @@ void FreescapeEngine::load8bitBinary(Common::SeekableReadStream *file, int offse
 		Common::String n;
 		n += char(readField(file, 8));
 		n += char(readField(file, 8));
-		_countdown = _countdown + 3600 * atoi(n.c_str());
+		_initialCountdown =_initialCountdown + 3600 * atoi(n.c_str());
 		n.clear();
 		n += char(readField(file, 8));
 		assert(n == ":");
 		n.clear();
 		n += char(readField(file, 8));
 		n += char(readField(file, 8));
-		_countdown = _countdown + 60 * atoi(n.c_str());
+		_initialCountdown = _initialCountdown + 60 * atoi(n.c_str());
 		n.clear();
 		n += char(readField(file, 8));
 		assert(n == ":");
 		n.clear();
 		n += char(readField(file, 8));
 		n += char(readField(file, 8));
-		_countdown = _countdown + atoi(n.c_str());
+		_initialCountdown = _initialCountdown + atoi(n.c_str());
 
 		if (_useExtendedTimer)
-			_countdown = 359999; // 99:59:59
+			_initialCountdown = 359999; // 99:59:59
 	}
 
 	if (isAmiga() || isAtariST())
diff --git a/engines/freescape/objects/geometricobject.cpp b/engines/freescape/objects/geometricobject.cpp
index fc0168b590d..b39c35b1f33 100644
--- a/engines/freescape/objects/geometricobject.cpp
+++ b/engines/freescape/objects/geometricobject.cpp
@@ -124,7 +124,12 @@ GeometricObject::GeometricObject(
 	_flags = flags_;
 
 	if (isDestroyed()) // If the object is destroyed, restore it
-		_flags = _flags & ~0x20;
+		restore();
+
+	if (isInitiallyInvisible())
+		makeInvisible();
+	else
+		makeVisible();
 
 	_objectID = objectID_;
 	_origin = origin_;
diff --git a/engines/freescape/objects/object.h b/engines/freescape/objects/object.h
index 54b5ce54f38..a21b844b28a 100644
--- a/engines/freescape/objects/object.h
+++ b/engines/freescape/objects/object.h
@@ -67,12 +67,14 @@ public:
 	virtual bool isPlanar() { return false; }
 	virtual void scale(int factor) = 0;
 
-	bool isInvisible() { return _flags & 0x80; }
-	void makeInvisible() { _flags = _flags | 0x80; }
-	void makeVisible() { _flags = _flags & ~0x80; }
+	bool isInvisible() { return _flags & 0x40; }
+	void makeInvisible() { _flags = _flags | 0x40; }
+	void makeVisible() { _flags = _flags & ~0x40; }
+	bool isInitiallyInvisible() { return _flags & 0x80; }
 	bool isDestroyed() { return _flags & 0x20; }
 	void destroy() { _flags = _flags | 0x20; }
-	void toggleVisibility() { _flags = _flags ^ 0x80; }
+	void restore() { _flags = _flags & ~0x20; }
+	void toggleVisibility() { _flags = _flags ^ 0x40; }
 
 	virtual ~Object() {}
 	virtual Object *duplicate() = 0;


Commit: 3f2fd5d7036832f705f65c3f599839acf636d451
    https://github.com/scummvm/scummvm/commit/3f2fd5d7036832f705f65c3f599839acf636d451
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-11-30T12:36:49+01:00

Commit Message:
FREESCAPE: reset player height when restart game in driller

Changed paths:
    engines/freescape/games/driller.cpp


diff --git a/engines/freescape/games/driller.cpp b/engines/freescape/games/driller.cpp
index d534de1c41e..d61d3716739 100644
--- a/engines/freescape/games/driller.cpp
+++ b/engines/freescape/games/driller.cpp
@@ -807,6 +807,8 @@ void DrillerEngine::initGameState() {
 	_gameStateVars[k8bitVariableEnergyDrillerJet] = _initialJetEnergy;
 	_gameStateVars[k8bitVariableShieldDrillerJet] = _initialJetShield;
 
+	_playerHeightNumber = 1;
+	_playerHeight = _playerHeights[_playerHeightNumber];
 	removeTimers();
 	startCountdown(_initialCountdown);
 }


Commit: a0e816370b21b61ab9083b3b2018e79ab327b64a
    https://github.com/scummvm/scummvm/commit/a0e816370b21b61ab9083b3b2018e79ab327b64a
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-11-30T12:36:49+01:00

Commit Message:
FREESCAPE: relocated the code that process demo inputs

Changed paths:
  A engines/freescape/demo.cpp
  R engines/freescape/keyboard.cpp
    engines/freescape/freescape.cpp
    engines/freescape/freescape.h
    engines/freescape/module.mk


diff --git a/engines/freescape/keyboard.cpp b/engines/freescape/demo.cpp
similarity index 54%
rename from engines/freescape/keyboard.cpp
rename to engines/freescape/demo.cpp
index 4ef5652cc3f..fc6cb1845eb 100644
--- a/engines/freescape/keyboard.cpp
+++ b/engines/freescape/demo.cpp
@@ -23,6 +23,80 @@
 
 namespace Freescape {
 
+void FreescapeEngine::generateDemoInput() {
+	Common::Event event;
+	if (isDOS()) {
+
+		if (_currentDemoInputRepetition == 0) {
+			_currentDemoInputRepetition = 1;
+			_currentDemoInputCode = _demoData[_demoIndex++];
+			if (_currentDemoInputCode & 0x80) {
+				_currentDemoInputRepetition = (_currentDemoInputCode & 0x7F) /*+ 1*/;
+				//if (_currentDemoInputRepetition == 1)
+				//	_currentDemoInputRepetition = 255;
+				_currentDemoInputCode = _demoData[_demoIndex++];
+			}
+		}
+
+		if (_currentDemoInputCode >= 0x16 && _currentDemoInputCode <= 0x1a) {
+			event = decodeDOSMouseEvent(_currentDemoInputCode, _currentDemoInputRepetition);
+			_demoEvents.push_back(event);
+			g_system->delayMillis(10);
+			_currentDemoInputRepetition = 0;
+		} else if (_currentDemoInputCode == 0x7f) {
+			// NOP
+			_currentDemoInputRepetition--;
+		} else {
+			event = Common::Event();
+			event.type = Common::EVENT_KEYDOWN;
+			event.kbd.keycode = (Common::KeyCode)decodeDOSKey(_currentDemoInputCode);
+			event.customType = 0xde00;
+			_demoEvents.push_back(event);
+			debugC(1, kFreescapeDebugMove, "Pushing key: %x with repetition %d", event.kbd.keycode, _currentDemoInputRepetition);
+			g_system->delayMillis(100);
+			_currentDemoInputRepetition--;
+		}
+
+		return;
+	}
+
+	int mouseX = _demoData[_demoIndex++] << 1;
+	int mouseY = _demoData[_demoIndex++];
+	debugC(1, kFreescapeDebugMove, "Mouse moved to: %d, %d", mouseX, mouseY);
+
+	event.type = Common::EVENT_MOUSEMOVE;
+	event.mouse = Common::Point(mouseX, mouseY);
+	event.customType = 0xde00;
+
+	byte nextKeyCode = _demoData[_demoIndex++];
+
+	if (nextKeyCode == 0x30) {
+		Common::Event spaceEvent;
+		spaceEvent.type = Common::EVENT_KEYDOWN;
+		spaceEvent.kbd.keycode = Common::KEYCODE_SPACE;
+		spaceEvent.customType = 0xde00;
+
+		_demoEvents.push_back(spaceEvent);
+		_demoEvents.push_back(event); // Mouse pointer is moved
+		event.type = Common::EVENT_LBUTTONDOWN; // Keep same event fields
+		_demoEvents.push_back(event); // Mouse is clicked
+		_demoEvents.push_back(spaceEvent);
+		nextKeyCode = _demoData[_demoIndex++];
+	}
+
+	while (nextKeyCode != 0) {
+		event = Common::Event();
+		event.type = Common::EVENT_KEYDOWN;
+		event.kbd.keycode = (Common::KeyCode)decodeAmigaAtariKey(nextKeyCode);
+		debugC(1, kFreescapeDebugMove, "Pushing key: %x", event.kbd.keycode);
+		event.customType = 0xde00;
+		_demoEvents.push_back(event);
+		nextKeyCode = _demoData[_demoIndex++];
+	}
+	assert(!nextKeyCode);
+	g_system->delayMillis(100);
+}
+
 Common::Event FreescapeEngine::decodeDOSMouseEvent(int index, int repetition) {
 	Common::Event event;
 	event.type = Common::EVENT_MOUSEMOVE;
diff --git a/engines/freescape/freescape.cpp b/engines/freescape/freescape.cpp
index c1f7f797c3b..55af4ebc7a5 100644
--- a/engines/freescape/freescape.cpp
+++ b/engines/freescape/freescape.cpp
@@ -314,80 +314,6 @@ void FreescapeEngine::drawFrame() {
 
 void FreescapeEngine::pressedKey(const int keycode) {}
 
-void FreescapeEngine::generateInput() {
-	Common::Event event;
-	if (isDOS()) {
-
-		if (_currentDemoInputRepetition == 0) {
-			_currentDemoInputRepetition = 1;
-			_currentDemoInputCode = _demoData[_demoIndex++];
-			if (_currentDemoInputCode & 0x80) {
-				_currentDemoInputRepetition = (_currentDemoInputCode & 0x7F) /*+ 1*/;
-				//if (_currentDemoInputRepetition == 1)
-				//	_currentDemoInputRepetition = 255;
-				_currentDemoInputCode = _demoData[_demoIndex++];
-			}
-		}
-
-		if (_currentDemoInputCode >= 0x16 && _currentDemoInputCode <= 0x1a) {
-			event = decodeDOSMouseEvent(_currentDemoInputCode, _currentDemoInputRepetition);
-			_demoEvents.push_back(event);
-			g_system->delayMillis(10);
-			_currentDemoInputRepetition = 0;
-		} else if (_currentDemoInputCode == 0x7f) {
-			// NOP
-			_currentDemoInputRepetition--;
-		} else {
-			event = Common::Event();
-			event.type = Common::EVENT_KEYDOWN;
-			event.kbd.keycode = (Common::KeyCode)decodeDOSKey(_currentDemoInputCode);
-			event.customType = 0xde00;
-			_demoEvents.push_back(event);
-			debugC(1, kFreescapeDebugMove, "Pushing key: %x with repetition %d", event.kbd.keycode, _currentDemoInputRepetition);
-			g_system->delayMillis(100);
-			_currentDemoInputRepetition--;
-		}
-
-		return;
-	}
-
-	int mouseX = _demoData[_demoIndex++] << 1;
-	int mouseY = _demoData[_demoIndex++];
-	debugC(1, kFreescapeDebugMove, "Mouse moved to: %d, %d", mouseX, mouseY);
-
-	event.type = Common::EVENT_MOUSEMOVE;
-	event.mouse = Common::Point(mouseX, mouseY);
-	event.customType = 0xde00;
-
-	byte nextKeyCode = _demoData[_demoIndex++];
-
-	if (nextKeyCode == 0x30) {
-		Common::Event spaceEvent;
-		spaceEvent.type = Common::EVENT_KEYDOWN;
-		spaceEvent.kbd.keycode = Common::KEYCODE_SPACE;
-		spaceEvent.customType = 0xde00;
-
-		_demoEvents.push_back(spaceEvent);
-		_demoEvents.push_back(event); // Mouse pointer is moved
-		event.type = Common::EVENT_LBUTTONDOWN; // Keep same event fields
-		_demoEvents.push_back(event); // Mouse is clicked
-		_demoEvents.push_back(spaceEvent);
-		nextKeyCode = _demoData[_demoIndex++];
-	}
-
-	while (nextKeyCode != 0) {
-		event = Common::Event();
-		event.type = Common::EVENT_KEYDOWN;
-		event.kbd.keycode = (Common::KeyCode)decodeAmigaAtariKey(nextKeyCode);
-		debugC(1, kFreescapeDebugMove, "Pushing key: %x", event.kbd.keycode);
-		event.customType = 0xde00;
-		_demoEvents.push_back(event);
-		nextKeyCode = _demoData[_demoIndex++];
-	}
-	assert(!nextKeyCode);
-	g_system->delayMillis(100);
-}
-
 void FreescapeEngine::processInput() {
 	float currentFrame = g_system->getMillis();
 	float deltaTime = 20.0;
@@ -601,7 +527,7 @@ Common::Error FreescapeEngine::run() {
 			drawFrame();
 
 		if (_demoMode)
-			generateInput();
+			generateDemoInput();
 
 		processInput();
 		_gfx->flipBuffer();
diff --git a/engines/freescape/freescape.h b/engines/freescape/freescape.h
index 7c01db85a57..83850d439bd 100644
--- a/engines/freescape/freescape.h
+++ b/engines/freescape/freescape.h
@@ -170,7 +170,7 @@ public:
 	bool _shootMode;
 	bool _noClipMode;
 	void processInput();
-	void generateInput();
+	void generateDemoInput();
 	virtual void pressedKey(const int keycode);
 	void move(CameraMovement direction, uint8 scale, float deltaTime);
 	void changePlayerHeight(int index);
diff --git a/engines/freescape/module.mk b/engines/freescape/module.mk
index e9ef9e42f02..7329c11c833 100644
--- a/engines/freescape/module.mk
+++ b/engines/freescape/module.mk
@@ -2,6 +2,7 @@ MODULE := engines/freescape
 
 MODULE_OBJS := \
 	area.o \
+	demo.o \
 	freescape.o \
 	games/castle.o \
 	games/dark.o \
@@ -9,7 +10,6 @@ MODULE_OBJS := \
 	games/eclipse.o \
 	games/palettes.o \
 	gfx.o \
-	keyboard.o \
 	loaders/8bitBinaryLoader.o \
 	language/8bitDetokeniser.o \
 	language/instruction.o \




More information about the Scummvm-git-logs mailing list