[Scummvm-git-logs] scummvm master -> 585a837fe5c6941f7430a38dde6bc16bc87735fd
mgerhardy
noreply at scummvm.org
Mon Sep 7 05:22:17 UTC 2026
This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .
Summary:
a5e8fb28b8 MACS2: const
2e3b70fa6a MACS2: order by alphabetical order by last name
1804748342 MACS2: build by default and switched to ADGF_TESTING
585a837fe5 DOCS: add description of engine options for macs2
Commit: a5e8fb28b82ec515f7cbd514558362d087033dc6
https://github.com/scummvm/scummvm/commit/a5e8fb28b82ec515f7cbd514558362d087033dc6
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2026-09-07T07:21:53+02:00
Commit Message:
MACS2: const
Changed paths:
engines/macs2/macs2.cpp
engines/macs2/midiparser_macs2.cpp
engines/macs2/pathfinding.cpp
diff --git a/engines/macs2/macs2.cpp b/engines/macs2/macs2.cpp
index 233b0b63af4..00b054019a1 100644
--- a/engines/macs2/macs2.cpp
+++ b/engines/macs2/macs2.cpp
@@ -71,7 +71,7 @@ bool isMapModeActive() {
return view != nullptr && view->_currentMode == ViewMode::VM_HELP;
}
-Common::Point getSceneObjectHotspotPosition(View1 *view, GameObject *obj) {
+const Common::Point &getSceneObjectHotspotPosition(const View1 *view, const GameObject *obj) {
if (view != nullptr) {
const Character *character = view->getCharacterByIndex(obj->_index);
if (character != nullptr && !character->_markedForDeletion)
@@ -1625,7 +1625,7 @@ bool Macs2Engine::readMegaPicImage(Common::SeekableReadStream *stream, int width
rowBuf.resize(3000);
for (int y = 0; y < height; y++) {
- uint16 packedLen = stream->readUint16LE();
+ const uint16 packedLen = stream->readUint16LE();
if (packedLen == 0 || packedLen > 2999) {
return false;
}
@@ -1979,7 +1979,6 @@ void Macs2Engine::updateBackgroundAnimationDepthMap(size_t animIndex) {
return;
}
- BackgroundAnimation &anim = _backgroundAnimations[animIndex];
BackgroundAnimationBlob &blobEntry = _backgroundAnimationsBlobs[animIndex];
Common::Array<uint8> &blob = blobEntry.activeBlob();
if (blob.empty()) {
@@ -2000,6 +1999,7 @@ void Macs2Engine::updateBackgroundAnimationDepthMap(size_t animIndex) {
return;
}
+ const BackgroundAnimation &anim = _backgroundAnimations[animIndex];
const int16 baseX = (int16)anim._x + 1 + frameOffsetX;
const int16 baseY = (int16)anim._y + frameOffsetY;
const byte *pixels = &blob[frameStart + 10];
@@ -2162,22 +2162,18 @@ uint16 Macs2Engine::getHotspotAtPoint(const Common::Point &p) const {
return 0;
}
- uint8 firstLookup = _hotspotMap.getPixel(p.x, p.y);
- uint16 numHotspots = _numHotspots;
-
uint8 i = 1;
- if (i > numHotspots) {
+ if (i > _numHotspots) {
return 0;
}
-
- Common::Array<uint16> a = _hotspotColorTable;
+ const uint8 firstLookup = _hotspotMap.getPixel(p.x, p.y);
do {
- if ((uint)(i - 1) >= a.size()) {
+ if ((uint)(i - 1) >= _hotspotColorTable.size()) {
break;
}
// Binary compares only the low byte: *(char*)(scene + i*2 + 0x50D3)
- uint8 lookup = (uint8)a[i - 1];
+ const uint8 lookup = (uint8)_hotspotColorTable[i - 1];
if (lookup == firstLookup) {
if (_hotspotOverrides[i] != 0xFFFF) {
return 0x800 + _hotspotOverrides[i];
@@ -2185,7 +2181,7 @@ uint16 Macs2Engine::getHotspotAtPoint(const Common::Point &p) const {
return 0x800 + i;
}
i++;
- } while (i <= numHotspots);
+ } while (i <= _numHotspots);
return 0;
}
@@ -2246,10 +2242,10 @@ void Macs2Engine::rebuildHotspotSnapshot() const {
}
}
- View1 *view = g_events ? (View1 *)g_events->findView("View1") : nullptr;
+ const View1 *view = g_events ? (View1 *)g_events->findView("View1") : nullptr;
const uint16 sceneIndex = (uint16)Scenes::instance()._currentSceneIndex;
for (uint16 objectIndex = 1; objectIndex <= kMaxSceneObjects; ++objectIndex) {
- GameObject *obj = GameObjects::getObjectByIndex(objectIndex);
+ const GameObject *obj = GameObjects::getObjectByIndex(objectIndex);
if (obj == nullptr || obj->_dataOffset == 0) {
continue;
}
@@ -2281,11 +2277,11 @@ bool Macs2Engine::hotspotDirty() const {
return false;
}
- View1 *view = g_events ? (View1 *)g_events->findView("View1") : nullptr;
+ const View1 *view = g_events ? (View1 *)g_events->findView("View1") : nullptr;
const uint16 sceneIndex = (uint16)Scenes::instance()._currentSceneIndex;
uint snapshotIdx = 0;
for (uint16 objectIndex = 1; objectIndex <= kMaxSceneObjects; ++objectIndex) {
- GameObject *obj = GameObjects::getObjectByIndex(objectIndex);
+ const GameObject *obj = GameObjects::getObjectByIndex(objectIndex);
if (obj == nullptr || obj->_dataOffset == 0) {
continue;
}
@@ -2293,7 +2289,7 @@ bool Macs2Engine::hotspotDirty() const {
continue;
}
- const Common::Point pos = getSceneObjectHotspotPosition(view, obj);
+ const Common::Point &pos = getSceneObjectHotspotPosition(view, obj);
if (snapshotIdx >= _hotspotSnapshot.sceneObjects.size()) {
rebuildHotspotSnapshot();
return true;
@@ -2336,7 +2332,7 @@ void Macs2Engine::getHotspotPositions(Common::Array<Graphics::HotspotInfo> &hots
hotspots.emplace_back(Graphics::HotspotInfo(center, hotspotLabelToU32(name), type));
}
- View1 *view = g_events ? (View1 *)g_events->findView("View1") : nullptr;
+ const View1 *view = g_events ? (View1 *)g_events->findView("View1") : nullptr;
const uint16 currentActorIndex = (uint16)Scenes::instance()._currentActorIndex;
for (const HotspotSnapshot::SceneObjectEntry &entry : _hotspotSnapshot.sceneObjects) {
if (entry.index == currentActorIndex) {
@@ -2348,7 +2344,7 @@ void Macs2Engine::getHotspotPositions(Common::Array<Graphics::HotspotInfo> &hots
continue;
}
- Character *character = view ? view->getCharacterByIndex(entry.index) : nullptr;
+ const Character *character = view ? view->getCharacterByIndex(entry.index) : nullptr;
const bool isCharacter = character != nullptr && !character->_markedForDeletion;
Graphics::HotspotType hotspotType = Graphics::kHotspotObject;
if (isCharacter && GameObjects::isNpcIndex(entry.index)) {
@@ -2471,17 +2467,17 @@ void Macs2Engine::loadTranslation() {
return;
}
- uint16 version = f->readUint16LE();
+ const uint16 version = f->readUint16LE();
if (version != 1) {
warning("Unsupported macs2_translation.dat version %u", version);
delete f;
return;
}
- uint16 numScenes = f->readUint16LE();
- uint16 numObjects = f->readUint16LE();
- uint16 numHotspotLabels = f->readUint16LE();
- uint16 numUiLabels = f->readUint16LE();
+ const uint16 numScenes = f->readUint16LE();
+ const uint16 numObjects = f->readUint16LE();
+ const uint16 numHotspotLabels = f->readUint16LE();
+ const uint16 numUiLabels = f->readUint16LE();
// Read index tables
struct IndexEntry {
@@ -2527,7 +2523,7 @@ void Macs2Engine::loadTranslation() {
f->seek(objectIndex[i].dataOffset);
TranslationEntry entry;
for (uint16 j = 0; j < objectIndex[i].numStrings; j++) {
- uint16 len = f->readUint16LE();
+ const uint16 len = f->readUint16LE();
Common::String s;
for (uint16 k = 0; k < len; k++) {
s += (char)f->readByte();
@@ -2540,12 +2536,12 @@ void Macs2Engine::loadTranslation() {
auto readLabelMap = [f](uint16 count, Common::HashMap<Common::String, Common::String> &out) {
for (uint16 i = 0; i < count; i++) {
- uint16 keyLen = f->readUint16LE();
+ const uint16 keyLen = f->readUint16LE();
Common::String key;
for (uint16 k = 0; k < keyLen; k++) {
key += (char)f->readByte();
}
- uint16 valLen = f->readUint16LE();
+ const uint16 valLen = f->readUint16LE();
Common::String val;
for (uint16 k = 0; k < valLen; k++) {
val += (char)f->readByte();
@@ -2607,8 +2603,8 @@ Common::StringArray Macs2Engine::decodeStrings(Common::MemoryReadStream *stream,
}
} else {
for (int i = 0; i < numStrings; i++) {
+ const uint16 length = stream->readUint16LE();
Common::String currentLine;
- uint16 length = stream->readUint16LE();
for (int index = 1; index < length + 1; index++) {
const byte currentByte = stream->readByte();
const byte x = (byte)(index * index * 0x0c);
@@ -2622,7 +2618,7 @@ Common::StringArray Macs2Engine::decodeStrings(Common::MemoryReadStream *stream,
// Apply translation if available
if (getFeatures() & GF_TRANSLATED) {
- int baseIndex = computeStringIndex(stream, offset);
+ const int baseIndex = computeStringIndex(stream, offset);
const TranslationEntry *entry = nullptr;
if (objectId != 0 && _objectTranslations.contains(objectId)) {
entry = &_objectTranslations[objectId];
@@ -2631,7 +2627,7 @@ Common::StringArray Macs2Engine::decodeStrings(Common::MemoryReadStream *stream,
}
if (entry) {
for (int i = 0; i < numStrings; i++) {
- int idx = baseIndex + i;
+ const int idx = baseIndex + i;
if (idx >= 0 && idx < (int)entry->strings.size() && !entry->strings[idx].empty()) {
result[i] = entry->strings[idx];
}
@@ -2661,7 +2657,7 @@ bool Macs2Engine::loadAnimationFromSceneData(uint16 objectIndex, uint16 slotInde
}
address = _sceneResourceOffsets[arrayIndex - 1];
} else {
- GameObject *execObj = GameObjects::getObjectByIndex(executingScriptObjectId);
+ const GameObject *execObj = GameObjects::getObjectByIndex(executingScriptObjectId);
if (execObj == nullptr || arrayIndex == 0 || arrayIndex > maxObjectResources()) {
_scriptExecutor->setScriptError(1);
return false;
@@ -2674,7 +2670,7 @@ bool Macs2Engine::loadAnimationFromSceneData(uint16 objectIndex, uint16 slotInde
}
_fileStream->seek(address);
- uint32 size = _fileStream->readUint32LE();
+ const uint32 size = _fileStream->readUint32LE();
_fileStream->seek(address + 0x10);
Common::Array<uint8> data;
data.resize(size);
@@ -2810,8 +2806,8 @@ bool Macs2Engine::loadObjectData(GameObject *obj) {
}
for (int j = 0; j < (int)animSlotCount; j++) {
_fileStream->readUint16LE(); // animID (editor metadata, unused at runtime)
- uint16 blobSourceKey = _fileStream->readUint16LE();
- uint32 dataSize = _fileStream->readUint32LE();
+ const uint16 blobSourceKey = _fileStream->readUint16LE();
+ const uint32 dataSize = _fileStream->readUint32LE();
if (_fileStream->eos() && dataSize != 0) {
rollbackPartialLoad();
@@ -2846,14 +2842,14 @@ bool Macs2Engine::loadObjectData(GameObject *obj) {
obj->_blobSourceKeys.push_back(blobSourceKey);
}
- uint16 blobSpeed = _fileStream->readUint16LE();
+ const uint16 blobSpeed = _fileStream->readUint16LE();
if (j < (int)obj->_blobWalkSpeeds.size()) {
obj->_blobWalkSpeeds[j] = blobSpeed;
} else {
obj->_blobWalkSpeeds.push_back(blobSpeed);
}
- uint16 blobMirrorFlag = _fileStream->readByte();
+ const uint16 blobMirrorFlag = _fileStream->readByte();
_fileStream->readByte(); // discarded byte
if (j < (int)obj->_blobMirrorFlags.size()) {
obj->_blobMirrorFlags[j] = blobMirrorFlag != 0;
diff --git a/engines/macs2/midiparser_macs2.cpp b/engines/macs2/midiparser_macs2.cpp
index 3cbefbac0e8..0143797ba80 100644
--- a/engines/macs2/midiparser_macs2.cpp
+++ b/engines/macs2/midiparser_macs2.cpp
@@ -38,7 +38,7 @@ bool MidiParser_Macs2::loadMusic(const byte *data, uint32 size) {
// Offset 0x06: instrument data offset (relative to file start)
// Offset 0x08: song data offset (relative to file start)
// Offset 0x0C: timer frequency
- uint16 dataOffset = READ_LE_UINT16(data + 0x08);
+ const uint16 dataOffset = READ_LE_UINT16(data + 0x08);
_timerFrequency = READ_LE_UINT16(data + 0x0C);
if (dataOffset >= size)
diff --git a/engines/macs2/pathfinding.cpp b/engines/macs2/pathfinding.cpp
index 7a7b4c27b18..467b0599dd5 100644
--- a/engines/macs2/pathfinding.cpp
+++ b/engines/macs2/pathfinding.cpp
@@ -42,7 +42,7 @@ uint16 Pathfinding::walkabilityAt(int16 y, int16 x) const {
if (x < 0 || x >= _map.w || y < 0 || y >= _map.h) {
return 0;
}
- uint16 value = _map.getPixel(x, y);
+ const uint16 value = _map.getPixel(x, y);
if (value >= 0xC8 && value <= 0xEF) {
uint16 overrideResult;
if (getWalkOverride(value, overrideResult)) {
@@ -99,7 +99,7 @@ uint16 Pathfinding::areaOverrideAt(uint16 index) const {
void Pathfinding::removeWalkOverride(uint16 index) {
for (uint i = 0; i < _walkOverrides.size(); i++) {
- PathfindingAreaOverride ¤t = _walkOverrides[i];
+ const PathfindingAreaOverride ¤t = _walkOverrides[i];
if (current._index == index) {
_walkOverrides.remove_at(i);
return;
@@ -112,8 +112,8 @@ void Pathfinding::snapToWalkable(int16 *pTargetY, int16 *pTargetX, int16 charY,
return;
}
- int16 savedX = *pTargetX;
- int16 savedY = *pTargetY;
+ const int16 savedX = *pTargetX;
+ const int16 savedY = *pTargetY;
const int16 maxY = (int16)(_map.h - 1);
const int16 maxX = (int16)(_map.w - 1);
@@ -133,7 +133,7 @@ void Pathfinding::snapToWalkable(int16 *pTargetY, int16 *pTargetX, int16 charY,
// Phase 2: Continue scanning to bottom for best depth match
int16 scanY = *pTargetY;
while (scanY <= maxY) {
- uint16 w = walkabilityAt(scanY, *pTargetX);
+ const uint16 w = walkabilityAt(scanY, *pTargetX);
if (scanY - (int16)w == savedY) {
*pTargetY = scanY;
}
@@ -155,12 +155,12 @@ void Pathfinding::snapToWalkable(int16 *pTargetY, int16 *pTargetX, int16 charY,
}
// Phase 4: If still non-walkable, scan X toward character
- uint16 w = walkabilityAt(*pTargetY, *pTargetX);
+ const uint16 w = walkabilityAt(*pTargetY, *pTargetX);
if (isWalkabilityBlocking(w)) {
*pTargetY = savedY;
if (charX < *pTargetX) {
while (true) {
- uint16 w2 = walkabilityAt(*pTargetY, *pTargetX);
+ const uint16 w2 = walkabilityAt(*pTargetY, *pTargetX);
if (isWalkabilityWalkable(w2)) {
break;
}
@@ -171,7 +171,7 @@ void Pathfinding::snapToWalkable(int16 *pTargetY, int16 *pTargetX, int16 charY,
}
} else {
while (true) {
- uint16 w2 = walkabilityAt(*pTargetY, *pTargetX);
+ const uint16 w2 = walkabilityAt(*pTargetY, *pTargetX);
if (isWalkabilityWalkable(w2)) {
break;
}
@@ -182,7 +182,7 @@ void Pathfinding::snapToWalkable(int16 *pTargetY, int16 *pTargetX, int16 charY,
}
}
// Phase 5: If all failed, fall back to character position
- uint16 w2 = walkabilityAt(*pTargetY, *pTargetX);
+ const uint16 w2 = walkabilityAt(*pTargetY, *pTargetX);
if (isWalkabilityBlocking(w2)) {
*pTargetX = charX;
*pTargetY = charY;
@@ -249,8 +249,8 @@ bool Pathfinding::isLineWalkable(int16 y1, int16 x1, int16 y2, int16 x2) const {
uint16 error = 0;
int16 curX = x2;
int16 curY = y2;
- uint16 absDx = (uint16)ABS((int)(x2 - x1));
- uint16 absDy = (uint16)ABS((int)(y2 - y1));
+ const uint16 absDx = (uint16)ABS((int)(x2 - x1));
+ const uint16 absDy = (uint16)ABS((int)(y2 - y1));
bool result = true;
do {
@@ -291,9 +291,9 @@ bool Pathfinding::isLineWalkable(int16 y1, int16 x1, int16 y2, int16 x2) const {
}
int Pathfinding::euclideanDistance(const Common::Point &a, const Common::Point &b) const {
- int32 dx = ABS((int)(b.x - a.x));
- int32 dy = ABS((int)(b.y - a.y));
- int32 distSq = dx * dx + dy * dy;
+ const int32 dx = ABS((int)(b.x - a.x));
+ const int32 dy = ABS((int)(b.y - a.y));
+ const int32 distSq = dx * dx + dy * dy;
int i = 0;
while (i < 0x500 && (int32)i * i < distSq) {
i++;
@@ -307,9 +307,9 @@ int Pathfinding::walkableDistance(int nodeA, int nodeB) const {
if (!isLineWalkable(a.y, a.x, b.y, b.x)) {
return 0x500;
}
- int32 dx = ABS((int)(b.x - a.x));
- int32 dy = ABS((int)(b.y - a.y));
- int32 distSq = dx * dx + dy * dy;
+ const int32 dx = ABS((int)(b.x - a.x));
+ const int32 dy = ABS((int)(b.y - a.y));
+ const int32 distSq = dx * dx + dy * dy;
int result = 0x280;
int step = 0x280;
do {
@@ -334,9 +334,9 @@ int Pathfinding::computeMinCostToReachable(int nodeIndex, int prevNode, const bo
if (!isLineWalkable(nodePos.y, nodePos.x, finalDest.y, finalDest.x)) {
result = 0x500;
} else {
- int32 dx = ABS((int)(finalDest.x - nodePos.x));
- int32 dy = ABS((int)(finalDest.y - nodePos.y));
- int32 distSq = dx * dx + dy * dy;
+ const int32 dx = ABS((int)(finalDest.x - nodePos.x));
+ const int32 dy = ABS((int)(finalDest.y - nodePos.y));
+ const int32 distSq = dx * dx + dy * dy;
int dist = 640;
int step = 320;
do {
Commit: 2e3b70fa6aa5de29498a2d332a72e2078de5bdcf
https://github.com/scummvm/scummvm/commit/2e3b70fa6aa5de29498a2d332a72e2078de5bdcf
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2026-09-07T07:21:53+02:00
Commit Message:
MACS2: order by alphabetical order by last name
as given in the HOWTO-Engine Release wiki article
Changed paths:
engines/macs2/credits.pl
diff --git a/engines/macs2/credits.pl b/engines/macs2/credits.pl
index 6de37a12977..5c243571a53 100644
--- a/engines/macs2/credits.pl
+++ b/engines/macs2/credits.pl
@@ -1,4 +1,4 @@
begin_section("Macs2");
- add_person("Florian Mehm", "", "");
add_person("Martin Gerhardy", "mgerhardy", "");
+ add_person("Florian Mehm", "", "");
end_section();
Commit: 1804748342d44486cbc316ad955a9d5f0af29d6d
https://github.com/scummvm/scummvm/commit/1804748342d44486cbc316ad955a9d5f0af29d6d
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2026-09-07T07:21:53+02:00
Commit Message:
MACS2: build by default and switched to ADGF_TESTING
Changed paths:
engines/macs2/configure.engine
engines/macs2/detection_tables.h
diff --git a/engines/macs2/configure.engine b/engines/macs2/configure.engine
index 2d53f5b348f..bc21c15546c 100644
--- a/engines/macs2/configure.engine
+++ b/engines/macs2/configure.engine
@@ -1,3 +1,3 @@
# This file is included from the main "configure" script
# add_engine [name] [desc] [build-by-default] [subengines] [base games] [deps]
-add_engine macs2 "Macs2" no "" "" "imgui midi"
+add_engine macs2 "Macs2" yes "" "" "imgui midi"
diff --git a/engines/macs2/detection_tables.h b/engines/macs2/detection_tables.h
index d6dd9f062d9..4c4ddedf3c1 100644
--- a/engines/macs2/detection_tables.h
+++ b/engines/macs2/detection_tables.h
@@ -35,7 +35,7 @@ const ADGameDescription gameDescriptions[] = {
AD_ENTRY1s("RESOURCE.MCS", "b8646d5cc2e45442a414220b1a65ba73", 8621636),
Common::DE_DEU,
Common::kPlatformDOS,
- ADGF_UNSTABLE,
+ ADGF_TESTING,
GUIO3(GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_TTS, GAMEOPTION_ENHANCEMENTS)},
// GMACS II Interpreter V1.00 - Written & Copyright (C) 1993 by Arndt Hasch - Copyright by LINEL
@@ -44,7 +44,7 @@ const ADGameDescription gameDescriptions[] = {
AD_ENTRY1s("RESOURCE.MCS", "779c5f7d11ac61b7b941ec0f1778d837", 2376278),
Common::DE_DEU,
Common::kPlatformDOS,
- ADGF_DEMO | ADGF_UNSTABLE,
+ ADGF_DEMO | ADGF_TESTING,
GUIO3(GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_TTS, GAMEOPTION_ENHANCEMENTS)},
// English fan translation (original + macs2_translation.dat)
@@ -54,7 +54,7 @@ const ADGameDescription gameDescriptions[] = {
"macs2_translation.dat", nullptr, AD_NO_SIZE),
Common::EN_ANY,
Common::kPlatformDOS,
- GF_TRANSLATED | ADGF_UNSTABLE,
+ GF_TRANSLATED | ADGF_TESTING,
GUIO3(GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_TTS, GAMEOPTION_ENHANCEMENTS)},
// Amiga demo - DataA (MXMF) + Mdir (MXDR). GMACS II / LINEL.
Commit: 585a837fe5c6941f7430a38dde6bc16bc87735fd
https://github.com/scummvm/scummvm/commit/585a837fe5c6941f7430a38dde6bc16bc87735fd
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2026-09-07T07:21:53+02:00
Commit Message:
DOCS: add description of engine options for macs2
Changed paths:
doc/docportal/settings/game.rst
diff --git a/doc/docportal/settings/game.rst b/doc/docportal/settings/game.rst
index a04b0a59874..f3c004ca71a 100644
--- a/doc/docportal/settings/game.rst
+++ b/doc/docportal/settings/game.rst
@@ -50,7 +50,7 @@ The Game tab also shows settings unique to the game engine for the selected game
To find out which engine powers your game, have a look at the ScummVM Supported Games `wiki page
<https://wiki.scummvm.org/index.php?title=Category:Supported_Games>`_ or :ref:`group <group>` games by Engine in the Launcher.
-Engines: ADL_ | AGI_ | AGOS_ | Bladerunner_ | Buried_ | CGE_ | CGE2_ | Chewy_ | Cine_ | Drascula_ | Dreamweb_ | Freescape_ | Griffon_ | GrimE_ | HDB_ | Hopkins_ | Hypno_ | Kyra_ | Lure_ | MADE_ | MADS_ | mTropolis_ | Myst3_ | Nancy_ | Neverhood_ | SCI_ | SCUMM_ | Sherlock_ | Sky_ | Stark_ | Supernova_ | Sword2_ | Sword25_ | Toltecs_ | Trecision_ | Ultima_ | V-Cruise_ | Wintermute_ | Xeen_ | ZVision_
+Engines: ADL_ | AGI_ | AGOS_ | Bladerunner_ | Buried_ | CGE_ | CGE2_ | Chewy_ | Cine_ | Drascula_ | Dreamweb_ | Freescape_ | Griffon_ | GrimE_ | HDB_ | Hopkins_ | Hypno_ | Kyra_ | Lure_ | Macs2_ | MADE_ | MADS_ | mTropolis_ | Myst3_ | Nancy_ | Neverhood_ | SCI_ | SCUMM_ | Sherlock_ | Sky_ | Stark_ | Supernova_ | Sword2_ | Sword25_ | Toltecs_ | Trecision_ | Ultima_ | V-Cruise_ | Wintermute_ | Xeen_ | ZVision_
@@ -849,6 +849,42 @@ TTS Narrator
,,,,,,,,,,
+.. _Macs2:
+
+Macs2
+******
+
+Use original save/load screens
+ Uses the original save/load screens instead of the ScummVM screens.
+ When enabled, the in-game Save/Load button and a right-click during a script wait open the original DOS menu.
+ The ScummVM options menu (F5) is always available.
+
+ *original_menus*
+
+Enable Text to Speech
+ Uses TTS to read the dialogue (if TTS is available).
+ Chooses a male or female voice from the speaking character, and skips TTS when a recorded voice file is already playing.
+
+ *tts_enabled*
+
+.. _macs2_av:
+
+Audio-visual improvements
+ Plays optional generated dialogue speech from ``SPEECH/*.wav`` files when they are present.
+ Missing files are ignored. If no voice plays, TTS can still read the line when Text to Speech is enabled.
+
+ *enhancements*
+
+.. _macs2_uiux:
+
+Modern UI/UX adjustments
+ Adds modern interface conveniences: a persistent verb/inventory bar, hover labels on the original menus, a highlight on dialogue choices, and a shared walk cursor for gameplay verbs (the sentence line shows the active verb).
+ Games that already have a native bottom HUD keep that HUD.
+
+ *enhancements*
+
+,,,,,,,,,,
+
.. _MADE:
MADE
More information about the Scummvm-git-logs
mailing list