[Scummvm-git-logs] scummvm master -> 8702bb40397167f0a4eefca2d12ec1c5da158e9c

npjg noreply at scummvm.org
Sun Jan 5 19:42:29 UTC 2025


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

Summary:
b9e1685d2a MEDIASTATION: Add missed enum cast
6b2e79a993 MEDIASTATION: Make the root context a class member
b0e7c4569f MEDIASTATION: Make the asset z-index signed
8b8a0157bd MEDIASTATION: Centralize event handler execution in Asset class
c96f974ae0 MEDIASTATION: Remove unused includes and forward declarations
8702bb4039 MEDIASTATION: Remove unused context play method


Commit: b9e1685d2afad0c7c7f076ac6baa12a4ea04c736
    https://github.com/scummvm/scummvm/commit/b9e1685d2afad0c7c7f076ac6baa12a4ea04c736
Author: Nathanael Gentry (nathanael.gentrydb8 at gmail.com)
Date: 2025-01-05T14:37:48-05:00

Commit Message:
MEDIASTATION: Add missed enum cast

Changed paths:
    engines/mediastation/context.cpp


diff --git a/engines/mediastation/context.cpp b/engines/mediastation/context.cpp
index 2da76450c4e..8679a5ce868 100644
--- a/engines/mediastation/context.cpp
+++ b/engines/mediastation/context.cpp
@@ -238,7 +238,7 @@ bool Context::readHeaderSection(Subfile &subfile, Chunk &chunk) {
 			break;
 
 		default:
-			error("Context::readHeaderSection(): No class for asset type 0x%x (@0x%llx)", header->_type, static_cast<long long int>(chunk.pos()));
+			error("Context::readHeaderSection(): No class for asset type 0x%x (@0x%llx)", static_cast<uint>(header->_type), static_cast<long long int>(chunk.pos()));
 		}
 
 		if (g_engine->_assets.contains(header->_id)) {


Commit: 6b2e79a993e90aed68dad17f9a1e0adb397ffd3a
    https://github.com/scummvm/scummvm/commit/6b2e79a993e90aed68dad17f9a1e0adb397ffd3a
Author: Nathanael Gentry (nathanael.gentrydb8 at gmail.com)
Date: 2025-01-05T14:37:48-05:00

Commit Message:
MEDIASTATION: Make the root context a class member

Changed paths:
    engines/mediastation/mediastation.cpp
    engines/mediastation/mediastation.h


diff --git a/engines/mediastation/mediastation.cpp b/engines/mediastation/mediastation.cpp
index 207520f3ba5..45ab63ce5a1 100644
--- a/engines/mediastation/mediastation.cpp
+++ b/engines/mediastation/mediastation.cpp
@@ -78,6 +78,9 @@ MediaStationEngine::~MediaStationEngine() {
 		delete it->_value;
 	}
 	_variables.clear();
+
+	delete _root;
+	_root = nullptr;
 }
 
 uint32 MediaStationEngine::getFeatures() const {
@@ -113,7 +116,7 @@ Common::Error MediaStationEngine::run() {
 	//Context *root = nullptr;
 	uint32 rootContextId = _boot->getRootContextId();
 	if (rootContextId != 0) {
-		/*root =*/ loadContext(rootContextId);
+		_root = loadContext(rootContextId);
 	} else {
 		warning("MediaStation::run(): Title has no root context");
 	}
diff --git a/engines/mediastation/mediastation.h b/engines/mediastation/mediastation.h
index f446f6c0104..05363cf822e 100644
--- a/engines/mediastation/mediastation.h
+++ b/engines/mediastation/mediastation.h
@@ -97,6 +97,7 @@ private:
 	Common::RandomSource _randomSource;
 	Boot *_boot = nullptr;
 	Common::Array<Asset *> _assetsPlaying;
+	Context *_root = nullptr;
 
 	Context *loadContext(uint32 contextId);
 	void setPaletteFromHeader(AssetHeader *header);


Commit: b0e7c4569ff2bcb392650a0b87093ec136dba670
    https://github.com/scummvm/scummvm/commit/b0e7c4569ff2bcb392650a0b87093ec136dba670
Author: Nathanael Gentry (nathanael.gentrydb8 at gmail.com)
Date: 2025-01-05T14:37:48-05:00

Commit Message:
MEDIASTATION: Make the asset z-index signed

Apparently in some instances it can be negative!

Changed paths:
    engines/mediastation/asset.cpp
    engines/mediastation/asset.h
    engines/mediastation/assetheader.h


diff --git a/engines/mediastation/asset.cpp b/engines/mediastation/asset.cpp
index 6f7104e0320..e51bb3d985a 100644
--- a/engines/mediastation/asset.cpp
+++ b/engines/mediastation/asset.cpp
@@ -40,7 +40,7 @@ AssetType Asset::type() const {
 	return _header->_type;
 }
 
-uint Asset::zIndex() const {
+int Asset::zIndex() const {
 	return _header->_zIndex;
 }
 
diff --git a/engines/mediastation/asset.h b/engines/mediastation/asset.h
index 2f35db7b727..6c3825f56cd 100644
--- a/engines/mediastation/asset.h
+++ b/engines/mediastation/asset.h
@@ -58,7 +58,7 @@ public:
 	virtual void readSubfile(Subfile &subfile, Chunk &chunk);
 
 	AssetType type() const;
-	uint zIndex() const;
+	int zIndex() const;
 	AssetHeader *getHeader() const {
 		return _header;
 	}
diff --git a/engines/mediastation/assetheader.h b/engines/mediastation/assetheader.h
index b442baef9c9..dd411e100af 100644
--- a/engines/mediastation/assetheader.h
+++ b/engines/mediastation/assetheader.h
@@ -136,7 +136,7 @@ public:
 	ChunkReference _animationChunkReference = 0;
 	Common::Rect *_boundingBox = nullptr;
 	Common::Array<Common::Point *> *_mouseActiveArea = nullptr;
-	uint32 _zIndex = 0;
+	int _zIndex = 0;
 	uint32 _assetReference = 0;
 	uint32 _startup = 0;
 	bool _transparency = false;


Commit: 8b8a0157bdf2b5765abb1c0bd750adf718feb3de
    https://github.com/scummvm/scummvm/commit/8b8a0157bdf2b5765abb1c0bd750adf718feb3de
Author: Nathanael Gentry (nathanael.gentrydb8 at gmail.com)
Date: 2025-01-05T14:37:48-05:00

Commit Message:
MEDIASTATION: Centralize event handler execution in Asset class

Changed paths:
    engines/mediastation/asset.cpp
    engines/mediastation/asset.h
    engines/mediastation/assetheader.cpp
    engines/mediastation/assetheader.h
    engines/mediastation/assets/movie.cpp
    engines/mediastation/assets/path.cpp
    engines/mediastation/assets/sprite.cpp


diff --git a/engines/mediastation/asset.cpp b/engines/mediastation/asset.cpp
index e51bb3d985a..9949df5a4a2 100644
--- a/engines/mediastation/asset.cpp
+++ b/engines/mediastation/asset.cpp
@@ -19,6 +19,7 @@
  *
  */
 
+#include "mediastation/debugchannels.h"
 #include "mediastation/asset.h"
 
 namespace MediaStation {
@@ -44,4 +45,24 @@ int Asset::zIndex() const {
 	return _header->_zIndex;
 }
 
+void Asset::runEventHandlerIfExists(EventType eventType) {
+	EventHandler *eventHandler = _header->_eventHandlers.getValOrDefault(eventType);
+	if (eventHandler != nullptr) {
+		debugC(5, kDebugScript, "Executing handler for event type %d on asset %d", static_cast<uint>(eventType), _header->_id);
+		eventHandler->execute(_header->_id);
+	} else {
+		debugC(5, kDebugScript, "No event handler for event type %d on asset %d", static_cast<uint>(eventType), _header->_id);
+	}
+}
+
+void Asset::runKeyDownEventHandlerIfExists(Common::KeyState keyState) {
+	EventHandler *keyDownEvent = _header->_keyDownHandlers.getValOrDefault(keyState.ascii);
+	if (keyDownEvent != nullptr) {
+		debugC(5, kDebugScript, "Executing keydown event handler for ASCII code %d on asset %d", keyState.ascii, _header->_id);
+		keyDownEvent->execute(_header->_id);
+	} else {
+		debugC(5, kDebugScript, "No keydown event handler for ASCII code %d on asset %d", keyState.ascii, _header->_id);
+	}
+}
+
 } // End of namespace MediaStation
diff --git a/engines/mediastation/asset.h b/engines/mediastation/asset.h
index 6c3825f56cd..787e458f620 100644
--- a/engines/mediastation/asset.h
+++ b/engines/mediastation/asset.h
@@ -22,6 +22,7 @@
 #ifndef MEDIASTATION_ASSET_H
 #define MEDIASTATION_ASSET_H
 
+#include "common/keyboard.h"
 #include "common/func.h"
 
 #include "mediastation/subfile.h"
@@ -57,6 +58,9 @@ public:
 	virtual void readChunk(Chunk &chunk);
 	virtual void readSubfile(Subfile &subfile, Chunk &chunk);
 
+	void runEventHandlerIfExists(EventType eventType);
+	void runKeyDownEventHandlerIfExists(Common::KeyState keyState);
+
 	AssetType type() const;
 	int zIndex() const;
 	AssetHeader *getHeader() const {
diff --git a/engines/mediastation/assetheader.cpp b/engines/mediastation/assetheader.cpp
index e1f7036f862..c4bf5f6e81a 100644
--- a/engines/mediastation/assetheader.cpp
+++ b/engines/mediastation/assetheader.cpp
@@ -68,7 +68,14 @@ void AssetHeader::readSection(AssetHeaderSectionType sectionType, Chunk& chunk)
 		}
 
 		case kKeyDownEvent: {
-			_keyDownHandlers.push_back(eventHandler);
+			if (eventHandler->_argumentType != kAsciiCodeEventHandlerArgument) {
+				error("Keydown event handler doesn't have correct argument type");
+			}
+			if (eventHandler->_argumentValue.t != kDatumTypeFloat64_2) {
+				error("Keydown event handler doesn't have correct argument value type");
+			}
+			uint asciiCode = static_cast<uint>(eventHandler->_argumentValue.u.f);
+			_keyDownHandlers.setVal(asciiCode, eventHandler);
 			break;
 		}
 
diff --git a/engines/mediastation/assetheader.h b/engines/mediastation/assetheader.h
index dd411e100af..eda5e5b4413 100644
--- a/engines/mediastation/assetheader.h
+++ b/engines/mediastation/assetheader.h
@@ -166,7 +166,7 @@ public:
 	// EVENT HANDLER FIELDS.
 	Common::HashMap<uint, EventHandler *> _eventHandlers;
 	Common::Array<EventHandler *> _timeHandlers;
-	Common::Array<EventHandler *> _keyDownHandlers;
+	Common::HashMap<uint, EventHandler *> _keyDownHandlers;
 	Common::Array<EventHandler *> _inputHandlers;
 	Common::Array<EventHandler *> _loadCompleteHandlers;
 
diff --git a/engines/mediastation/assets/movie.cpp b/engines/mediastation/assets/movie.cpp
index ae5b007cb96..677c1a84bb9 100644
--- a/engines/mediastation/assets/movie.cpp
+++ b/engines/mediastation/assets/movie.cpp
@@ -217,14 +217,7 @@ void Movie::timePlay() {
 		g_engine->_mixer->playStream(Audio::Mixer::kPlainSoundType, &handle, audio, -1, Audio::Mixer::kMaxChannelVolume);
 	}
 
-	// RUN THE MOVIE START EVENT HANDLER.
-	EventHandler *startEvent = _header->_eventHandlers.getValOrDefault(kMovieBeginEvent);
-	if (startEvent != nullptr) {
-		debugC(5, kDebugScript, "Movie::timePlay(): Executing movie start event handler");
-		startEvent->execute(_header->_id);
-	} else {
-		debugC(5, kDebugScript, "Movie::timePlay(): No movie start event handler");
-	}
+	runEventHandlerIfExists(kMovieBeginEvent);
 }
 
 void Movie::timeStop() {
@@ -233,14 +226,7 @@ void Movie::timeStop() {
 	_startTime = 0;
 	_lastProcessedTime = 0;
 
-	// RUN THE MOVIE STOPPED EVENT HANDLER.
-	EventHandler *endEvent = _header->_eventHandlers.getValOrDefault(kMovieStoppedEvent);
-	if (endEvent != nullptr) {
-		debugC(5, kDebugScript, "Movie::play(): Executing movie stopped event handler");
-		endEvent->execute(_header->_id);
-	} else {
-		debugC(5, kDebugScript, "Movie::timePlay(): No movie stopped event handler");
-	}
+	runEventHandlerIfExists(kMovieStoppedEvent);
 }
 
 void Movie::process() {
@@ -282,14 +268,7 @@ bool Movie::drawNextFrame() {
 		_startTime = 0;
 		_lastProcessedTime = 0;
 
-		// Run the movie end event handler.
-		EventHandler *endEvent = _header->_eventHandlers.getValOrDefault(kMovieEndEvent);
-		if (endEvent != nullptr) {
-			debugC(5, kDebugScript, "Movie::drawNextFrame(): Executing movie end event handler");
-			endEvent->execute(_header->_id);
-		} else {
-			debugC(5, kDebugScript, "Movie::drawNextFrame(): No movie end event handler");
-		}
+		runEventHandlerIfExists(kMovieEndEvent);
 		return false;
 	}
 
diff --git a/engines/mediastation/assets/path.cpp b/engines/mediastation/assets/path.cpp
index d5d0ca038bc..5b8e7c8ad2d 100644
--- a/engines/mediastation/assets/path.cpp
+++ b/engines/mediastation/assets/path.cpp
@@ -69,43 +69,20 @@ void Path::timePlay() {
 	uint totalSteps = (_header->_duration * _header->_stepRate) / 1000;
 	//uint stepDurationInMilliseconds = 1000 / _header->_stepRate;
 
-	// RUN THE START EVENT HANDLER.
-	EventHandler *startEventHandler = nullptr; // TODO: Haven't seen a path start event in the wild yet, don't know its ID.
-	if (startEventHandler != nullptr) {
-		debugC(5, kDebugScript, "Path::timePlay(): Running PathStart event handler");
-		startEventHandler->execute(_header->_id);
-	} else {
-		debugC(5, kDebugScript, "Path::timePlay(): No PathStart event handler");
-	}
+	// TODO: Run the path start event. Haven't seen one the wild yet, don't know its ID.
+	debugC(5, kDebugScript, "Path::timePlay(): No PathStart event handler");
 
 	// STEP THE PATH.
-	EventHandler *pathStepHandler = _header->_eventHandlers[kStepEvent];
 	for (uint i = 0; i < totalSteps; i++) {
 		_percentComplete = (double)(i + 1) / totalSteps;
 		debugC(5, kDebugScript, "Path::timePlay(): Step %d of %d", i, totalSteps);
 		// TODO: Actually step the path. It seems they mostly just use this for
 		// palette animation in the On Step event handler, so nothing is actually drawn on the screen now.
 
-		// RUN THE ON STEP EVENT HANDLER.
-		// TODO: Is this supposed to come after or before we step the path?
-		if (pathStepHandler != nullptr) {
-			debugC(5, kDebugScript, "Path::timePlay(): Running PathStep event handler");
-			pathStepHandler->execute(_header->_id);
-		} else {
-			debugC(5, kDebugScript, "Path::timePlay(): No PathStep event handler");
-		}
-	}
-
-	// RUN THE END EVENT HANDLER.
-	EventHandler *endEventHandler = _header->_eventHandlers[kPathEndEvent];
-	if (endEventHandler != nullptr) {
-		debugC(5, kDebugScript, "Path::timePlay(): Running PathEnd event handler");
-		endEventHandler->execute(_header->_id);
-	} else {
-		debugC(5, kDebugScript, "Path::timePlay(): No PathEnd event handler");
+		runEventHandlerIfExists(kStepEvent);
 	}
 
-	// CLEAN UP.
+	runEventHandlerIfExists(kPathEndEvent);
 	_percentComplete = 0;
 }
 
diff --git a/engines/mediastation/assets/sprite.cpp b/engines/mediastation/assets/sprite.cpp
index 8bc2d517675..e0756fa8ccc 100644
--- a/engines/mediastation/assets/sprite.cpp
+++ b/engines/mediastation/assets/sprite.cpp
@@ -125,14 +125,7 @@ void Sprite::timePlay() {
 		_header->_frameRate = 10;
 	}
 
-	// RUN THE MOVIE START EVENT HANDLER.
-	EventHandler *startEvent = _header->_eventHandlers.getValOrDefault(kMovieBeginEvent);
-	if (startEvent != nullptr) {
-		debugC(5, kDebugScript, "Sprite::timePlay(): Executing start event handler");
-		startEvent->execute(_header->_id);
-	} else {
-		debugC(5, kDebugScript, "Sprite::timePlay(): No start event handler");
-	}
+	runEventHandlerIfExists(kMovieBeginEvent);
 }
 
 void Sprite::movieReset() {
@@ -207,14 +200,7 @@ void Sprite::drawNextFrame() {
 		_currentFrameIndex = 0;
 		_nextFrameTime = 0;
 
-		// RUN THE SPRITE END EVENT HANDLER.
-		EventHandler *endEvent = _header->_eventHandlers.getValOrDefault(kMovieEndEvent);
-		if (endEvent != nullptr) {
-			debugC(5, kDebugScript, "Sprite::drawNextFrame(): Executing end event handler");
-			endEvent->execute(_header->_id);
-		} else {
-			debugC(5, kDebugScript, "Sprite::drawNextFrame(): No end event handler");
-		}
+		runEventHandlerIfExists(kSpriteMovieEndEvent);
 	}
 }
 


Commit: c96f974ae02cde44e2f3bd32dc21e16fa9a9a8f1
    https://github.com/scummvm/scummvm/commit/c96f974ae02cde44e2f3bd32dc21e16fa9a9a8f1
Author: Nathanael Gentry (nathanael.gentrydb8 at gmail.com)
Date: 2025-01-05T14:37:48-05:00

Commit Message:
MEDIASTATION: Remove unused includes and forward declarations

Changed paths:
    engines/mediastation/asset.h
    engines/mediastation/datum.h
    engines/mediastation/mediascript/eventhandler.h
    engines/mediastation/subfile.h


diff --git a/engines/mediastation/asset.h b/engines/mediastation/asset.h
index 787e458f620..81615ade4d1 100644
--- a/engines/mediastation/asset.h
+++ b/engines/mediastation/asset.h
@@ -23,7 +23,6 @@
 #define MEDIASTATION_ASSET_H
 
 #include "common/keyboard.h"
-#include "common/func.h"
 
 #include "mediastation/subfile.h"
 #include "mediastation/chunk.h"
diff --git a/engines/mediastation/datum.h b/engines/mediastation/datum.h
index 8c6a601d85d..9bde4fea84f 100644
--- a/engines/mediastation/datum.h
+++ b/engines/mediastation/datum.h
@@ -29,11 +29,6 @@
 
 namespace MediaStation {
 
-class Point;
-class BoundingBox;
-class Polygon;
-class Reference;
-
 enum DatumType {
 	// This type isn't a type we see in data files; it is just a
 	// default initialization value.
diff --git a/engines/mediastation/mediascript/eventhandler.h b/engines/mediastation/mediascript/eventhandler.h
index c949e1cc009..c73c6f2313c 100644
--- a/engines/mediastation/mediascript/eventhandler.h
+++ b/engines/mediastation/mediascript/eventhandler.h
@@ -22,9 +22,6 @@
 #ifndef MEDIASTATION_MEDIASCRIPT_EVENTHANDLER_H
 #define MEDIASTATION_MEDIASCRIPT_EVENTHANDLER_H
 
-#include "common/hashmap.h"
-#include "common/func.h"
-
 #include "mediastation/datafile.h"
 #include "mediastation/datum.h"
 #include "mediastation/mediascript/codechunk.h"
diff --git a/engines/mediastation/subfile.h b/engines/mediastation/subfile.h
index 43f41c81201..194edccbf72 100644
--- a/engines/mediastation/subfile.h
+++ b/engines/mediastation/subfile.h
@@ -22,8 +22,6 @@
 #ifndef MEDIASTATION_SUBFILE_H
 #define MEDIASTATION_SUBFILE_H
 
-#include "common/file.h"
-
 #include "mediastation/chunk.h"
 
 namespace MediaStation {


Commit: 8702bb40397167f0a4eefca2d12ec1c5da158e9c
    https://github.com/scummvm/scummvm/commit/8702bb40397167f0a4eefca2d12ec1c5da158e9c
Author: Nathanael Gentry (nathanael.gentrydb8 at gmail.com)
Date: 2025-01-05T14:37:48-05:00

Commit Message:
MEDIASTATION: Remove unused context play method

Changed paths:
    engines/mediastation/context.cpp
    engines/mediastation/context.h


diff --git a/engines/mediastation/context.cpp b/engines/mediastation/context.cpp
index 8679a5ce868..cbc063e4df7 100644
--- a/engines/mediastation/context.cpp
+++ b/engines/mediastation/context.cpp
@@ -297,17 +297,4 @@ bool Context::readHeaderSection(Subfile &subfile, Chunk &chunk) {
 	return true;
 }
 
-void Context::play() {
-	// FIND AND EXECUTE THE ENTRY SCRIPT.
-	// The entry script is stored in the asset with the same ID as the context.
-	// It's the asset that has a SCREEN asset type.
-	if (_screenAsset == nullptr) {
-		error("Context::play(): No entry script exists for this context, cannot play it");
-	}
-	//EventHandler *entryHandler = nullptr; //_screenAsset->_eventHandlers.getVal(uint32(EventType::Entry));
-	// So how can we actually execute this script?
-
-	// FIND AND EXECUTE THE EXIT SCRIPT.
-}
-
 } // End of namespace MediaStation
diff --git a/engines/mediastation/context.h b/engines/mediastation/context.h
index b8c328d8286..be6f3008783 100644
--- a/engines/mediastation/context.h
+++ b/engines/mediastation/context.h
@@ -62,7 +62,6 @@ private:
 
 	void readAssetInFirstSubfile(Chunk &chunk);
 	void readAssetFromLaterSubfile(Subfile &subfile);
-	void play();
 };
 
 } // End of namespace MediaStation




More information about the Scummvm-git-logs mailing list