[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