[Scummvm-git-logs] scummvm master -> 7e6434ff93de2690b90a4aca8b8b5e2721c534d8
yuv422
noreply at scummvm.org
Sun Mar 9 01:20:48 UTC 2025
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:
5e8c646d09 DARKSEED: Add support for playable demo
7e6434ff93 DARKSEED: Add object fixes for room 45 in dos demo version.
Commit: 5e8c646d090031be2d6d2517ec0eaa3fabb47226
https://github.com/scummvm/scummvm/commit/5e8c646d090031be2d6d2517ec0eaa3fabb47226
Author: Eric Fry (yuv422 at reversedgames.com)
Date: 2025-03-09T12:18:07+11:00
Commit Message:
DARKSEED: Add support for playable demo
Changed paths:
engines/darkseed/console.cpp
engines/darkseed/cutscene.cpp
engines/darkseed/darkseed.cpp
engines/darkseed/darkseed.h
engines/darkseed/detection_tables.h
engines/darkseed/inventory.cpp
engines/darkseed/nsp.cpp
engines/darkseed/tostext.cpp
engines/darkseed/tostext.h
diff --git a/engines/darkseed/console.cpp b/engines/darkseed/console.cpp
index da2f76decfd..91687eb343c 100644
--- a/engines/darkseed/console.cpp
+++ b/engines/darkseed/console.cpp
@@ -58,6 +58,9 @@ Console::~Console() {
}
void Console::printTosText(int tosIndex, bool shouldAddToCurrentLine) {
+ if (g_engine->isDosDemo()) {
+ debug("TosIndex: %d", tosIndex);
+ }
const Common::U32String &text = _tosText->getText(tosIndex);
if (!_isCJKLanguage) {
diff --git a/engines/darkseed/cutscene.cpp b/engines/darkseed/cutscene.cpp
index 759ecf272f5..986055974a1 100644
--- a/engines/darkseed/cutscene.cpp
+++ b/engines/darkseed/cutscene.cpp
@@ -68,7 +68,9 @@ void Cutscene::update() {
break;
case 'H' :
case 'Z' :
- _movieStep = 9999;
+ if (!g_engine->fadeStep()) {
+ _movieStep = 9999;
+ }
break;
default:
break;
@@ -81,7 +83,11 @@ void Cutscene::update() {
g_engine->_previousRoomNumber = 38;
g_engine->changeToRoom(7);
} else if (_cutsceneId == 'Z') {
- g_engine->restartGame();
+ if (g_engine->isDosDemo()) {
+ g_engine->quitGame();
+ } else {
+ g_engine->restartGame();
+ }
} else if (_cutsceneId == 'I') {
play('J');
} else if (_cutsceneId == 'J') {
diff --git a/engines/darkseed/darkseed.cpp b/engines/darkseed/darkseed.cpp
index 0ddab8ec244..02301364e83 100644
--- a/engines/darkseed/darkseed.cpp
+++ b/engines/darkseed/darkseed.cpp
@@ -102,11 +102,13 @@ Common::Error DarkseedEngine::run() {
_player->_direction = 1;
_player->_frameIdx = 0;
- _room = new Room(0);
+ _room = new Room(isDosDemo() ? 4 : 0);
// If a savegame was selected from the launcher, load it
int saveSlot = ConfMan.getInt("save_slot");
- if (saveSlot != -1) {
+ if (isDosDemo()) {
+ newGame();
+ } else if (saveSlot != -1) {
(void)loadGameState(saveSlot);
} else {
_cutscene.play('I');
@@ -237,10 +239,12 @@ void DarkseedEngine::gameLoop() {
if (_currentTimeInSeconds * 2 != _fttime) {
_fttime = _currentTimeInSeconds * 2;
}
- if (!_room->isGiger()) {
- _fttime += 4;
- } else {
- _fttime += 9;
+ if (!isDosDemo()) {
+ if (!_room->isGiger()) {
+ _fttime += 4;
+ } else {
+ _fttime += 9;
+ }
}
_currentTimeInSeconds = _fttime / 2;
if ((_currentTimeInSeconds == 46800 || _currentTimeInSeconds == 46801) && _currentDay == 2 && _room->_roomNumber != 34) {
@@ -373,6 +377,9 @@ void DarkseedEngine::updateEvents() {
break;
case Common::EVENT_KEYDOWN:
_lastKeyPressed = event.kbd.keycode;
+ if (isDosDemo() && _lastKeyPressed == Common::KEYCODE_q) {
+ quitGame();
+ }
break;
case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
if (event.customType == kDarkseedActionSelect) {
@@ -380,7 +387,9 @@ void DarkseedEngine::updateEvents() {
} else if (event.customType == kDarkseedActionChangeCommand) {
_isRightMouseClicked = true;
} else if (event.customType == kDarkseedActionTimeAdvance) {
- _timeAdvanceEventSelected = true;
+ if (!isDosDemo()) {
+ _timeAdvanceEventSelected = true;
+ }
} else if (event.customType == kDarkseedActionQuit) {
quitGame();
}
@@ -1084,6 +1093,15 @@ void DarkseedEngine::loadRoom(int roomNumber) {
}
void DarkseedEngine::changeToRoom(int newRoomNumber, bool placeDirectly) { // AKA LoadNewRoom
+ if (isDosDemo()) {
+ if (newRoomNumber == 0) {
+ newRoomNumber = 43;
+ _previousRoomNumber = 44;
+ } else if (newRoomNumber == 44) {
+ newRoomNumber = 4;
+ _previousRoomNumber = 0;
+ }
+ }
MusicId newMusicId = Room::getMusicIdForRoom(newRoomNumber);
if (g_engine->_sound->isPlayingMusic() && Room::getMusicIdForRoom(_room->_roomNumber) != newMusicId) {
g_engine->_sound->startFadeOut();
@@ -1915,7 +1933,7 @@ void DarkseedEngine::lookCode(int objNum) {
if (objNum == 103) {
printTime();
}
- if (_cursor.getY() > 39 && objNum != 77) {
+ if (_cursor.getY() > 39 && objNum != 77 && !isDosDemo()) {
int eyeTosIdx = _objectVar.getEyeDescriptionTosIdx(objNum);
if (eyeTosIdx < 979 && eyeTosIdx != 0) {
_console->printTosText(eyeTosIdx);
@@ -2589,22 +2607,35 @@ void DarkseedEngine::waitxticks(int ticks) {
void DarkseedEngine::doCircles() {
debug("DarkseedEngine::doCircles");
- _player->loadAnimations("bedsleep.nsp");
- _player->_position.x = 0x87;
- _player->_position.y = 0x5b;
- _player->_frameIdx = 0;
- _player->_direction = 1;
- _animation->setupOtherNspAnimation(0, 1);
+ if (isDosDemo()) {
+ _player->_position.x = 320;
+ _player->_position.y = 220;
+ _player->_walkTarget = _player->_position;
+ _player->_frameIdx = 28;
+ _player->_direction = 2;
+ _frame.draw();
+ _room->draw();
+ _console->draw(true);
+ updateDisplay();
+ _sprites.drawSprites();
+ } else {
+ _player->loadAnimations("bedsleep.nsp");
+ _player->_position.x = 0x87;
+ _player->_position.y = 0x5b;
+ _player->_frameIdx = 0;
+ _player->_direction = 1;
+ _animation->setupOtherNspAnimation(0, 1);
- _frame.draw();
- _room->draw();
- _console->draw(true);
+ _frame.draw();
+ _room->draw();
+ _console->draw(true);
- // setup & draw Mike in bed.
- _sprites.clearSpriteDrawList();
- const Sprite &animSprite = _player->_animations.getSpriteAt(_player->_frameIdx);
- _sprites.addSpriteToDrawList(0x75, 0x71, &animSprite, 240 - _player->_position.y, animSprite._width, animSprite._height, _player->_flipSprite);
- _sprites.drawSprites();
+ // setup & draw Mike in bed.
+ _sprites.clearSpriteDrawList();
+ const Sprite &animSprite = _player->_animations.getSpriteAt(_player->_frameIdx);
+ _sprites.addSpriteToDrawList(0x75, 0x71, &animSprite, 240 - _player->_position.y, animSprite._width, animSprite._height, _player->_flipSprite);
+ _sprites.drawSprites();
+ }
// Capture screen.
@@ -2674,9 +2705,9 @@ void DarkseedEngine::newGame() {
_inventory.reset();
_sound->resetSpeech();
_objectVar.reset();
- _room->_roomNumber = 0;
+ _room->_roomNumber = isDosDemo() ? 4 : 0;
_currentDay = 1;
- changeToRoom(0);
+ changeToRoom(_room->_roomNumber);
doCircles();
@@ -2688,7 +2719,9 @@ void DarkseedEngine::newGame() {
waitForSpeech();
_systemTimerCounter = 4;
_cursor.showCursor(true);
- _canSaveGame = true;
+ if (!isDosDemo()) {
+ _canSaveGame = true;
+ }
}
void DarkseedEngine::waitForSpeech() {
diff --git a/engines/darkseed/darkseed.h b/engines/darkseed/darkseed.h
index 991391de11f..8b11c20e677 100644
--- a/engines/darkseed/darkseed.h
+++ b/engines/darkseed/darkseed.h
@@ -202,6 +202,10 @@ public:
return isDosVersion() && !isCdVersion();
}
+ bool isDosDemo() const {
+ return isDosVersion() && getFeatures() & ADGF_DEMO;
+ }
+
bool hasFeature(EngineFeature f) const override {
return
(f == kSupportsLoadingDuringRuntime) ||
@@ -210,7 +214,7 @@ public:
};
bool canLoadGameStateCurrently(Common::U32String *msg) override {
- return !_animation->_isPlayingAnimation_maybe && !_player->_isAutoWalkingToBed && !_player->_heroWaiting && !_cutscene.isPlaying();
+ return !isDosDemo() && !_animation->_isPlayingAnimation_maybe && !_player->_isAutoWalkingToBed && !_player->_heroWaiting && !_cutscene.isPlaying();
}
bool canSaveGameStateCurrently(Common::U32String *msg) override {
diff --git a/engines/darkseed/detection_tables.h b/engines/darkseed/detection_tables.h
index b95b8afa4c0..f6f3d08b17e 100644
--- a/engines/darkseed/detection_tables.h
+++ b/engines/darkseed/detection_tables.h
@@ -126,7 +126,15 @@ const ADGameDescription gameDescriptions[] = {
ADGF_UNSTABLE | ADGF_CD,
GUIO1(GUIO_NONE)
},
-
+{
+ "darkseed",
+ "DEMO",
+ AD_ENTRY1s("TOS.EXE", "43014b73a2cc549bd13d65b18a6aefe4", 161184),
+ Common::EN_ANY,
+ Common::kPlatformDOS,
+ ADGF_TESTING | ADGF_DEMO,
+ GUIO1(GUIO_NONE)
+ },
AD_TABLE_END_MARKER
};
diff --git a/engines/darkseed/inventory.cpp b/engines/darkseed/inventory.cpp
index 29c1b60937b..c1f7e5d5986 100644
--- a/engines/darkseed/inventory.cpp
+++ b/engines/darkseed/inventory.cpp
@@ -116,7 +116,7 @@ void Inventory::draw() {
for (int i = 0; i < _numIcons; i++) {
int icon = _iconList[i];
if (icon != 42 && icon != 43) {
- icon += 42;
+ icon += g_engine->isDosDemo() ? 36 : 42;
}
if (g_engine->_actionMode == _iconList[i] && g_engine->_actionMode > 4) {
@@ -142,7 +142,11 @@ void Inventory::handleClick() {
} else if (icon == 43) {
rightArrowClicked();
} else if (icon == 4) {
- g_engine->_menu->loadMenu();
+ if (g_engine->isDosDemo()) {
+ g_engine->_console->addTextLine(Common::U32String("You can't load or save games in demo mode, press 'q' to exit."));
+ } else {
+ g_engine->_menu->loadMenu();
+ }
} else if (icon == 21) {
g_engine->_console->printTosText(935);
g_engine->_objectVar[21] = 1;
diff --git a/engines/darkseed/nsp.cpp b/engines/darkseed/nsp.cpp
index e15f9f71a66..03003eb1de5 100644
--- a/engines/darkseed/nsp.cpp
+++ b/engines/darkseed/nsp.cpp
@@ -175,7 +175,9 @@ bool Nsp::load(const Common::Path &filename) {
Common::String filePathStr = filePath.toString();
debug("Loaded %s", filePathStr.c_str());
Common::Path obtFilename = Common::Path(filePathStr.substr(0, filePathStr.size() - 4) + ".obt");
- ret = loadObt(obtFilename);
+ if (!loadObt(obtFilename)) {
+ debug("failed to load %s", obtFilename.toString().c_str());
+ }
}
return ret;
}
diff --git a/engines/darkseed/tostext.cpp b/engines/darkseed/tostext.cpp
index 7a3bda42f74..78b9d7d7199 100644
--- a/engines/darkseed/tostext.cpp
+++ b/engines/darkseed/tostext.cpp
@@ -26,6 +26,10 @@
namespace Darkseed {
bool TosText::load() {
+ if (g_engine->isDosDemo()) {
+ loadDemoTosEntries();
+ return true;
+ }
Common::File tostextFile;
if (!tostextFile.open("tostext.bin")) {
return false;
@@ -39,6 +43,18 @@ bool TosText::load() {
return true;
}
+void TosText::loadDemoTosEntries() {
+ _numEntries = 973;
+ _textArray.resize(_numEntries);
+ _textArray[10] = "My head is killing me.";
+ _textArray[11] = "My head feels like it is going to explode.";
+ _textArray[12] = "It seems like I've had this headache since I moved here.";
+ _textArray[13] = "I need an asprin or something.";
+
+ _textArray[798] = "You can't touch the horizon!";
+ _textArray[972] = "Holding ";
+}
+
const Common::U32String &TosText::getText(uint16 textIndex) {
assert(textIndex < _numEntries);
return _textArray[textIndex];
diff --git a/engines/darkseed/tostext.h b/engines/darkseed/tostext.h
index d1bd60d017d..a87f9e5c288 100644
--- a/engines/darkseed/tostext.h
+++ b/engines/darkseed/tostext.h
@@ -40,6 +40,7 @@ public:
private:
Common::U32String loadString(Common::File &file, uint16 index) const;
+ void loadDemoTosEntries();
};
} // namespace Darkseed
Commit: 7e6434ff93de2690b90a4aca8b8b5e2721c534d8
https://github.com/scummvm/scummvm/commit/7e6434ff93de2690b90a4aca8b8b5e2721c534d8
Author: Eric Fry (yuv422 at reversedgames.com)
Date: 2025-03-09T12:18:07+11:00
Commit Message:
DARKSEED: Add object fixes for room 45 in dos demo version.
Changed paths:
engines/darkseed/darkseed.cpp
engines/darkseed/room.cpp
engines/darkseed/room.h
engines/darkseed/tostext.cpp
diff --git a/engines/darkseed/darkseed.cpp b/engines/darkseed/darkseed.cpp
index 02301364e83..371ddbb4c2f 100644
--- a/engines/darkseed/darkseed.cpp
+++ b/engines/darkseed/darkseed.cpp
@@ -1933,7 +1933,7 @@ void DarkseedEngine::lookCode(int objNum) {
if (objNum == 103) {
printTime();
}
- if (_cursor.getY() > 39 && objNum != 77 && !isDosDemo()) {
+ if (_cursor.getY() > 39 && objNum != 77 && (!isDosDemo() || objNum == 120)) {
int eyeTosIdx = _objectVar.getEyeDescriptionTosIdx(objNum);
if (eyeTosIdx < 979 && eyeTosIdx != 0) {
_console->printTosText(eyeTosIdx);
diff --git a/engines/darkseed/room.cpp b/engines/darkseed/room.cpp
index ef1900fe495..b0988e2e951 100644
--- a/engines/darkseed/room.cpp
+++ b/engines/darkseed/room.cpp
@@ -233,6 +233,9 @@ bool Room::load() {
return false;
}
+ if (g_engine->isDosDemo()) {
+ dosDemoFixupRoomObjects();
+ }
for (auto &roomObj : _roomObj) {
if (roomObj.objNum < 42 && g_engine->_objectVar.getMoveObjectRoom(roomObj.objNum) != 255) {
removeObjectFromRoom(roomObj.objNum);
@@ -281,6 +284,16 @@ bool Room::load() {
return true;
}
+void Room::dosDemoFixupRoomObjects() {
+ if (_roomNumber == 45) {
+ // The dos demo is missing the object entries for the life leech victims and the force field
+ _roomObj[8] = {0, 120, 245, 100, 25, 25, 0, 0};
+ _roomObj[9] = {0, 120, 342, 100, 36, 27, 0, 0};
+ _roomObj[10] = {0, 119, 298, 160, 63, 31, 0, 0};
+ }
+}
+
+
Common::String Room::stripSpaces(const Common::String &source) {
Common::String out;
const char *src = source.c_str();
diff --git a/engines/darkseed/room.h b/engines/darkseed/room.h
index 064ca42738e..85dc3275e40 100644
--- a/engines/darkseed/room.h
+++ b/engines/darkseed/room.h
@@ -117,6 +117,7 @@ private:
static Common::String stripSpaces(const Common::String &source);
void drawTrunk();
void advanceLocAnimFrame(int roomObjIdx);
+ void dosDemoFixupRoomObjects();
};
} // namespace Darkseed
diff --git a/engines/darkseed/tostext.cpp b/engines/darkseed/tostext.cpp
index 78b9d7d7199..98ea6a13e8a 100644
--- a/engines/darkseed/tostext.cpp
+++ b/engines/darkseed/tostext.cpp
@@ -52,6 +52,9 @@ void TosText::loadDemoTosEntries() {
_textArray[13] = "I need an asprin or something.";
_textArray[798] = "You can't touch the horizon!";
+
+ _textArray[802] = "You see the unfortunate victims of the life leech.";
+
_textArray[972] = "Holding ";
}
More information about the Scummvm-git-logs
mailing list