[Scummvm-git-logs] scummvm master -> 5118fa466ff4a6037d8b404325ae0b39e5ffd298

yuv422 noreply at scummvm.org
Sat Oct 12 12:25:40 UTC 2024


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:
3bf0db4283 DARKSEED: Move and rename player flip sprite state var.
9611f50320 DARKSEED: Add doll cutscene.
84c243376f DARKSEED: Add book & nightmare2 scenes.
5118fa466f DARKSEED: Started work on nightmare 3 cutscene


Commit: 3bf0db4283a001a2f13bed37e1d611ff9618ee4a
    https://github.com/scummvm/scummvm/commit/3bf0db4283a001a2f13bed37e1d611ff9618ee4a
Author: Eric Fry (yuv422 at reversedgames.com)
Date: 2024-10-12T23:25:36+11:00

Commit Message:
DARKSEED: Move and rename player flip sprite state var.

Changed paths:
    engines/darkseed/animation.cpp
    engines/darkseed/darkseed.cpp
    engines/darkseed/darkseed.h
    engines/darkseed/player.cpp
    engines/darkseed/player.h


diff --git a/engines/darkseed/animation.cpp b/engines/darkseed/animation.cpp
index 609db394d85..e8bc745312c 100644
--- a/engines/darkseed/animation.cpp
+++ b/engines/darkseed/animation.cpp
@@ -41,7 +41,7 @@ void Animation::setupOtherNspAnimation(int nspAnimIdx, int animId) {
 	_isPlayingAnimation_maybe = true;
 	_otherNspAnimationType_maybe = animId;
 
-	g_engine->_player_sprite_related_2c85_82f3 = 0;
+	g_engine->_player->_flipSprite = false;
 	_objRestarted = false;
 
 	if (_otherNspAnimationType_maybe < 2) {
diff --git a/engines/darkseed/darkseed.cpp b/engines/darkseed/darkseed.cpp
index 41433e8e676..1fb37c83ded 100644
--- a/engines/darkseed/darkseed.cpp
+++ b/engines/darkseed/darkseed.cpp
@@ -1194,7 +1194,7 @@ void DarkseedEngine::updateDisplay() { // AKA ServiceRoom
 						&playerSprite,
 						240 - _player->_position.y,
 						_scaledSpriteWidth,
-						_scaledSpriteHeight, _player_sprite_related_2c85_82f3);
+						_scaledSpriteHeight, _player->_flipSprite);
 				}
 			} else {
 				if (_animation->_otherNspAnimationType_maybe == 37) {
@@ -1206,7 +1206,7 @@ void DarkseedEngine::updateDisplay() { // AKA ServiceRoom
 						&playerSprite,
 						240 - _player->_position.y,
 						_scaledSpriteWidth,
-						_scaledSpriteHeight, _player_sprite_related_2c85_82f3);
+						_scaledSpriteHeight, _player->_flipSprite);
 				}
 				if (_animation->_otherNspAnimationType_maybe == 39 || _animation->_otherNspAnimationType_maybe == 59 ||
 					_animation->_otherNspAnimationType_maybe == 60 || _animation->_otherNspAnimationType_maybe == 61) {
@@ -1218,7 +1218,7 @@ void DarkseedEngine::updateDisplay() { // AKA ServiceRoom
 						&playerSprite,
 						240 - _player->_position.y,
 						_scaledSpriteWidth,
-						_scaledSpriteHeight, _player_sprite_related_2c85_82f3);
+						_scaledSpriteHeight, _player->_flipSprite);
 					if (_animation->_otherNspAnimationType_maybe == 60 || _animation->_otherNspAnimationType_maybe == 61) {
 						_sprite_y_scaling_threshold_maybe = 240;
 //						DrawObjectsMenu(); TODO do we need this logic?
@@ -1259,7 +1259,7 @@ void DarkseedEngine::updateDisplay() { // AKA ServiceRoom
 				} else if (!_animation->_scaleSequence) {
 					if (_animation->_otherNspAnimationType_maybe == 17) { // open trunk
 						const Sprite &animSprite = _player->_animations.getSpriteAt(_player->_frameIdx);
-						_sprites.addSpriteToDrawList(_player->_position.x - animSprite._width / 2, _player->_position.y - animSprite._height, &animSprite, 240 - _player->_position.y, animSprite._width, animSprite._height, _player_sprite_related_2c85_82f3);
+						_sprites.addSpriteToDrawList(_player->_position.x - animSprite._width / 2, _player->_position.y - animSprite._height, &animSprite, 240 - _player->_position.y, animSprite._width, animSprite._height, _player->_flipSprite);
 					} else if (_animation->_otherNspAnimationType_maybe == 5 || _animation->_otherNspAnimationType_maybe == 1) {
 						int x = 0xa6;
 						int y = 0x69;
@@ -1276,25 +1276,25 @@ void DarkseedEngine::updateDisplay() { // AKA ServiceRoom
 
 						/* bed wake sequence is played here. */
 						const Sprite &animSprite = _player->_animations.getSpriteAt(_player->_frameIdx);
-						_sprites.addSpriteToDrawList(x, y, &animSprite, 240 - _player->_position.y, animSprite._width, animSprite._height, _player_sprite_related_2c85_82f3);
+						_sprites.addSpriteToDrawList(x, y, &animSprite, 240 - _player->_position.y, animSprite._width, animSprite._height, _player->_flipSprite);
 					} else if (_animation->_otherNspAnimationType_maybe == 43 || _animation->_otherNspAnimationType_maybe == 44) {
 						const Sprite &animSprite = _player->_animations.getSpriteAt(_player->_frameIdx);
-						_sprites.addSpriteToDrawList(303, 105, &animSprite, 240 - _player->_position.y, animSprite._width, animSprite._height, _player_sprite_related_2c85_82f3);
+						_sprites.addSpriteToDrawList(303, 105, &animSprite, 240 - _player->_position.y, animSprite._width, animSprite._height, _player->_flipSprite);
 					} else if (_animation->_otherNspAnimationType_maybe == 62) { // sargent approaches jail cell.
 						const Sprite &animSprite = _player->_animations.getSpriteAt(_player->_frameIdx);
-						_sprites.addSpriteToDrawList(_player->_position.x - animSprite._width / 2, _player->_position.y - animSprite._height, &animSprite, 240 - _player->_position.y, animSprite._width, animSprite._height, _player_sprite_related_2c85_82f3);
+						_sprites.addSpriteToDrawList(_player->_position.x - animSprite._width / 2, _player->_position.y - animSprite._height, &animSprite, 240 - _player->_position.y, animSprite._width, animSprite._height, _player->_flipSprite);
 					} else if (_animation->_otherNspAnimationType_maybe == 45 || _animation->_otherNspAnimationType_maybe == 46) { // pull lever
 						const Sprite &animSprite = _player->_animations.getSpriteAt(_player->_frameIdx);
-						_sprites.addSpriteToDrawList(446, 124, &animSprite, 240 - _player->_position.y, animSprite._width, animSprite._height, _player_sprite_related_2c85_82f3);
+						_sprites.addSpriteToDrawList(446, 124, &animSprite, 240 - _player->_position.y, animSprite._width, animSprite._height, _player->_flipSprite);
 					} else if (_animation->_otherNspAnimationType_maybe == 36) {
 						const Sprite &animSprite = _player->_animations.getSpriteAt(_player->_frameIdx);
-						_sprites.addSpriteToDrawList(339, 78, &animSprite, 240 - _player->_position.y, animSprite._width, animSprite._height, _player_sprite_related_2c85_82f3);
+						_sprites.addSpriteToDrawList(339, 78, &animSprite, 240 - _player->_position.y, animSprite._width, animSprite._height, _player->_flipSprite);
 					} else if (_animation->_otherNspAnimationType_maybe == 59) {
 						const Sprite &animSprite = _player->_animations.getSpriteAt(_player->_frameIdx);
-						_sprites.addSpriteToDrawList(433, 91, &animSprite, 240 - _player->_position.y, animSprite._width, animSprite._height, _player_sprite_related_2c85_82f3);
+						_sprites.addSpriteToDrawList(433, 91, &animSprite, 240 - _player->_position.y, animSprite._width, animSprite._height, _player->_flipSprite);
 					} else if (_animation->_otherNspAnimationType_maybe == 37) {
 						const Sprite &animSprite = _player->_animations.getSpriteAt(_player->_frameIdx);
-						_sprites.addSpriteToDrawList(428, 78, &animSprite, 240 - _player->_position.y, animSprite._width, animSprite._height, _player_sprite_related_2c85_82f3);
+						_sprites.addSpriteToDrawList(428, 78, &animSprite, 240 - _player->_position.y, animSprite._width, animSprite._height, _player->_flipSprite);
 					} else if (_animation->_otherNspAnimationType_maybe == 10 || _animation->_otherNspAnimationType_maybe == 11) {
 						const Sprite &animSprite = _player->_animations.getSpriteAt(_player->_frameIdx);
 						_sprites.addSpriteToDrawList(118, 62, &animSprite, 240 - _player->_position.y, animSprite._width, animSprite._height, false);
@@ -1303,41 +1303,41 @@ void DarkseedEngine::updateDisplay() { // AKA ServiceRoom
 						_sprites.addSpriteToDrawList(407, 73, &animSprite, 240 - _player->_position.y, animSprite._width, animSprite._height, false);
 					} else if (_animation->_otherNspAnimationType_maybe == 20) {
 						const Sprite &animSprite = _player->_animations.getSpriteAt(_player->_frameIdx);
-						_sprites.addSpriteToDrawList((_player->_position.x - animSprite._width / 2) - 4, _player->_position.y - animSprite._height, &animSprite, 240 - _player->_position.y, animSprite._width, animSprite._height, _player_sprite_related_2c85_82f3);
+						_sprites.addSpriteToDrawList((_player->_position.x - animSprite._width / 2) - 4, _player->_position.y - animSprite._height, &animSprite, 240 - _player->_position.y, animSprite._width, animSprite._height, _player->_flipSprite);
 					} else if (_animation->_otherNspAnimationType_maybe < 30 || _animation->_otherNspAnimationType_maybe > 34) {
 						if (_animation->_otherNspAnimationType_maybe == 40) {
 							const Sprite &animSprite = _player->_animations.getSpriteAt(_player->_frameIdx);
-							_sprites.addSpriteToDrawList(373, 99, &animSprite, 240 - _player->_position.y, animSprite._width, animSprite._height, _player_sprite_related_2c85_82f3);
+							_sprites.addSpriteToDrawList(373, 99, &animSprite, 240 - _player->_position.y, animSprite._width, animSprite._height, _player->_flipSprite);
 							const Sprite &legsSprite = _player->_animations.getSpriteAt(12);
-							_sprites.addSpriteToDrawList(373, 99 + animSprite._height, &legsSprite, 240 - _player->_position.y, legsSprite._width, legsSprite._height, _player_sprite_related_2c85_82f3);
+							_sprites.addSpriteToDrawList(373, 99 + animSprite._height, &legsSprite, 240 - _player->_position.y, legsSprite._width, legsSprite._height, _player->_flipSprite);
 						} else if (_animation->_otherNspAnimationType_maybe < 48 || _animation->_otherNspAnimationType_maybe > 52) {
 							if (_animation->_otherNspAnimationType_maybe == 35) {
 								const Sprite &animSprite = _player->_animations.getSpriteAt(_player->_frameIdx);
-								_sprites.addSpriteToDrawList(_player->_position.x - 10, _player->_position.y - animSprite._height, &animSprite, 240 - _player->_position.y, animSprite._width, animSprite._height, _player_sprite_related_2c85_82f3);
+								_sprites.addSpriteToDrawList(_player->_position.x - 10, _player->_position.y - animSprite._height, &animSprite, 240 - _player->_position.y, animSprite._width, animSprite._height, _player->_flipSprite);
 							} else if (_animation->_otherNspAnimationType_maybe >= 53 && _animation->_otherNspAnimationType_maybe <= 56) {
 								const Sprite &animSprite = _player->_animations.getSpriteAt(_player->_frameIdx);
-								_sprites.addSpriteToDrawList(_player->_position.x, _player->_position.y, &animSprite, 240 - _player->_position.y, animSprite._width, animSprite._height, _player_sprite_related_2c85_82f3);
+								_sprites.addSpriteToDrawList(_player->_position.x, _player->_position.y, &animSprite, 240 - _player->_position.y, animSprite._width, animSprite._height, _player->_flipSprite);
 							} else if (_animation->_otherNspAnimationType_maybe == 57 || _animation->_otherNspAnimationType_maybe == 58) {
 								const Sprite &animSprite = _player->_animations.getSpriteAt(_player->_frameIdx);
 								Common::Point spritePos = {344, 57};
 								if (_room->_roomNumber == 41) {
 									spritePos = {295, 46};
 								}
-								_sprites.addSpriteToDrawList(spritePos.x, spritePos.y, &animSprite, 240 - _player->_position.y, animSprite._width, animSprite._height, _player_sprite_related_2c85_82f3);
+								_sprites.addSpriteToDrawList(spritePos.x, spritePos.y, &animSprite, 240 - _player->_position.y, animSprite._width, animSprite._height, _player->_flipSprite);
 							} else {
 								const Sprite &animSprite = _player->_animations.getSpriteAt(_player->_frameIdx);
-								_sprites.addSpriteToDrawList(_player->_position.x, _player->_position.y, &animSprite, 240 - _player->_position.y, animSprite._width, animSprite._height, _player_sprite_related_2c85_82f3);
+								_sprites.addSpriteToDrawList(_player->_position.x, _player->_position.y, &animSprite, 240 - _player->_position.y, animSprite._width, animSprite._height, _player->_flipSprite);
 							}
 						} else {
 							const Sprite &animSprite = _player->_animations.getSpriteAt(_player->_frameIdx);
-							_sprites.addSpriteToDrawList(_player->_position.x - animSprite._width / 2, _player->_position.y - animSprite._height, &animSprite, 240 - _player->_position.y, animSprite._width, animSprite._height, _player_sprite_related_2c85_82f3);
+							_sprites.addSpriteToDrawList(_player->_position.x - animSprite._width / 2, _player->_position.y - animSprite._height, &animSprite, 240 - _player->_position.y, animSprite._width, animSprite._height, _player->_flipSprite);
 						}
 					} else {
 						// drinking water in bathroom
 						const Sprite &animSprite = _player->_animations.getSpriteAt(_player->_frameIdx);
-						_sprites.addSpriteToDrawList(448, 97, &animSprite, 240 - _player->_position.y, animSprite._width, animSprite._height, _player_sprite_related_2c85_82f3);
+						_sprites.addSpriteToDrawList(448, 97, &animSprite, 240 - _player->_position.y, animSprite._width, animSprite._height, _player->_flipSprite);
 						const Sprite &legsSprite = _player->_animations.getSpriteAt(0);
-						_sprites.addSpriteToDrawList(451, 160, &legsSprite, 240 - _player->_position.y, legsSprite._width, legsSprite._height, _player_sprite_related_2c85_82f3);
+						_sprites.addSpriteToDrawList(451, 160, &legsSprite, 240 - _player->_position.y, legsSprite._width, legsSprite._height, _player->_flipSprite);
 
 					}
 				} else if (_animation->_otherNspAnimationType_maybe == 6) {
@@ -1349,7 +1349,7 @@ void DarkseedEngine::updateDisplay() { // AKA ServiceRoom
 						0xff,
 						_scaledSpriteWidth,
 						_scaledSpriteHeight,
-						_player_sprite_related_2c85_82f3);
+						_player->_flipSprite);
 				} else if (_animation->_otherNspAnimationType_maybe == 22) { // dig grave
 					_sprites.addSpriteToDrawList(
 						_player->_position.x - ((_scaledWalkSpeed_maybe * 30) / 1000),
@@ -1358,7 +1358,7 @@ void DarkseedEngine::updateDisplay() { // AKA ServiceRoom
 						240 - _player->_position.y,
 						_scaledSpriteWidth,
 						_scaledSpriteHeight,
-						_player_sprite_related_2c85_82f3);
+						_player->_flipSprite);
 				} else if (_animation->_otherNspAnimationType_maybe == 4 || _animation->_otherNspAnimationType_maybe == 21) { // dig grave
 					_sprites.addSpriteToDrawList(
 						_player->_position.x - ((_scaledWalkSpeed_maybe * 95) / 1000),
@@ -1367,7 +1367,7 @@ void DarkseedEngine::updateDisplay() { // AKA ServiceRoom
 						240 - _player->_position.y,
 						_scaledSpriteWidth,
 						_scaledSpriteHeight,
-						_player_sprite_related_2c85_82f3);
+						_player->_flipSprite);
 				} else if (_animation->_otherNspAnimationType_maybe == 39) {
 					int16 spriteX = 110;
 					int16 spriteY = _player->_position.y;
@@ -1387,7 +1387,7 @@ void DarkseedEngine::updateDisplay() { // AKA ServiceRoom
 						240 - _player->_position.y,
 						_scaledSpriteWidth,
 						_scaledSpriteHeight,
-						_player_sprite_related_2c85_82f3);
+						_player->_flipSprite);
 				} else if (_animation->_otherNspAnimationType_maybe == 47) {
 					const Sprite &sprite = _room->_locationSprites.getSpriteAt(_player->_frameIdx);
 					_room->calculateScaledSpriteDimensions(
@@ -1401,7 +1401,7 @@ void DarkseedEngine::updateDisplay() { // AKA ServiceRoom
 						240 - _player->_position.y,
 						_scaledSpriteWidth,
 						_scaledSpriteHeight,
-						_player_sprite_related_2c85_82f3);
+						_player->_flipSprite);
 				} else {
 					_sprites.addSpriteToDrawList(
 						_player->_position.x - _scaledSpriteWidth / 2,
@@ -1410,26 +1410,26 @@ void DarkseedEngine::updateDisplay() { // AKA ServiceRoom
 						240 - _player->_position.y,
 						_scaledSpriteWidth,
 						_scaledSpriteHeight,
-						_player_sprite_related_2c85_82f3);
+						_player->_flipSprite);
 				}
 				if (_animation->_isPlayingAnimation_maybe && _animation->_otherNspAnimationType_maybe == 14 && _animation->_animIndexTbl[0] > 1) {
 					if (_objectVar.getObjectRunningCode(140) == 0 || _room->_roomNumber != 6) {
 						if (_room->_roomNumber == 6 && _player->_isAutoWalkingToBed) {
 							const Sprite &animSprite = _player->_animations.getSpriteAt(8);
-							_sprites.addSpriteToDrawList(132, 70, &animSprite, 255, animSprite._width, animSprite._height, _player_sprite_related_2c85_82f3);
+							_sprites.addSpriteToDrawList(132, 70, &animSprite, 255, animSprite._width, animSprite._height, _player->_flipSprite);
 						} else if (_room->_roomNumber == 6) {
 							const Sprite &animSprite = _player->_animations.getSpriteAt(2);
-							_sprites.addSpriteToDrawList(132, 70, &animSprite, 255, animSprite._width, animSprite._height, _player_sprite_related_2c85_82f3);
+							_sprites.addSpriteToDrawList(132, 70, &animSprite, 255, animSprite._width, animSprite._height, _player->_flipSprite);
 						} else if (_room->_roomNumber == 11) {
 							const Sprite &animSprite = _player->_animations.getSpriteAt(6);
-							_sprites.addSpriteToDrawList(369, 119, &animSprite, 255, animSprite._width, animSprite._height, _player_sprite_related_2c85_82f3);
+							_sprites.addSpriteToDrawList(369, 119, &animSprite, 255, animSprite._width, animSprite._height, _player->_flipSprite);
 						} else if (_room->_roomNumber == 12) {
 							const Sprite &animSprite = _player->_animations.getSpriteAt(6);
-							_sprites.addSpriteToDrawList(252, 121, &animSprite, 255, animSprite._width, animSprite._height, _player_sprite_related_2c85_82f3);
+							_sprites.addSpriteToDrawList(252, 121, &animSprite, 255, animSprite._width, animSprite._height, _player->_flipSprite);
 						}
 					} else {
 						const Sprite &animSprite = _player->_animations.getSpriteAt(3);
-						_sprites.addSpriteToDrawList(132, 70, &animSprite, 255, animSprite._width, animSprite._height, _player_sprite_related_2c85_82f3);
+						_sprites.addSpriteToDrawList(132, 70, &animSprite, 255, animSprite._width, animSprite._height, _player->_flipSprite);
 					}
 				}
 			}
diff --git a/engines/darkseed/darkseed.h b/engines/darkseed/darkseed.h
index dc630b0f01e..6f6046ad411 100644
--- a/engines/darkseed/darkseed.h
+++ b/engines/darkseed/darkseed.h
@@ -125,7 +125,6 @@ public:
 	uint16 _scaledSpriteWidth = 0;
 	uint16 _scaledSpriteHeight = 0;
 
-	bool _player_sprite_related_2c85_82f3 = false;
 	int _frameBottom = 0;
 
 	// Unknown variables
diff --git a/engines/darkseed/player.cpp b/engines/darkseed/player.cpp
index 03ea31dcc9a..5d2621fe02d 100644
--- a/engines/darkseed/player.cpp
+++ b/engines/darkseed/player.cpp
@@ -44,13 +44,13 @@ bool Player::loadAnimations(const Common::Path &filename) {
 }
 
 uint8 playerSpriteIndexDirectionTbl[] = { 24,  26,  28,  26 };
-bool BYTE_ARRAY_2c85_41eb[] = { false, false, false, true };
+static constexpr bool DIRECTION_FLIP_SPRITE_TBL[] = { false, false, false, true };
 uint16 walkFrameOffsetTbl[] = { 0,   8,  16,   8 };
 
 void Player::updateSprite() {
 	if (!_playerIsChangingDirection) {
 		if ((_direction == 3) || (_direction == 1)) {
-			g_engine->_player_sprite_related_2c85_82f3 = BYTE_ARRAY_2c85_41eb[_direction];
+			_flipSprite = DIRECTION_FLIP_SPRITE_TBL[_direction];
 		}
 		if (_position.x == _walkTarget.x && _position.y == _walkTarget.y && !_heroMoving) {
 			_frameIdx = playerSpriteIndexDirectionTbl[_direction];
@@ -59,21 +59,21 @@ void Player::updateSprite() {
 		}
 		if (_direction == 2) {
 			if (_position.x < _walkTarget.x) {
-				g_engine->_player_sprite_related_2c85_82f3 = true;
+				_flipSprite = true;
 			} else if (_walkTarget.x < _position.x) {
-				g_engine->_player_sprite_related_2c85_82f3 = false;
+				_flipSprite = false;
 			}
 		}
 		if (_direction == 0) {
 			if (_walkTarget.x < _position.x) {
-				g_engine->_player_sprite_related_2c85_82f3 = true;
+				_flipSprite = true;
 			} else if (_position.x < _walkTarget.x) {
-				g_engine->_player_sprite_related_2c85_82f3 = false;
+				_flipSprite = false;
 			}
 		}
 	} else {
-		g_engine->_player_sprite_related_2c85_82f3 = 4 < _playerSpriteWalkIndex_maybe;
-		if (g_engine->_player_sprite_related_2c85_82f3) {
+		_flipSprite = (4 < _playerSpriteWalkIndex_maybe);
+		if (_flipSprite) {
 			_frameIdx = 0x20 - _playerSpriteWalkIndex_maybe;
 		} else {
 			_frameIdx = _playerSpriteWalkIndex_maybe + 0x18;
diff --git a/engines/darkseed/player.h b/engines/darkseed/player.h
index b81ee889872..20e2c6a275c 100644
--- a/engines/darkseed/player.h
+++ b/engines/darkseed/player.h
@@ -56,6 +56,7 @@ public:
 	int16 _sequenceRotation = -1;
 	bool _walkToSequence = false;
 	Common::Point _walkToSequencePoint;
+	bool _flipSprite = false;
 
 public:
 	Player();


Commit: 9611f50320bdeca20d5b18c7561f8b99b7179599
    https://github.com/scummvm/scummvm/commit/9611f50320bdeca20d5b18c7561f8b99b7179599
Author: Eric Fry (yuv422 at reversedgames.com)
Date: 2024-10-12T23:25:36+11:00

Commit Message:
DARKSEED: Add doll cutscene.

Changed paths:
  A engines/darkseed/morph.cpp
  A engines/darkseed/morph.h
    engines/darkseed/cutscene.cpp
    engines/darkseed/cutscene.h
    engines/darkseed/module.mk


diff --git a/engines/darkseed/cutscene.cpp b/engines/darkseed/cutscene.cpp
index b9312e1b793..18df09d633a 100644
--- a/engines/darkseed/cutscene.cpp
+++ b/engines/darkseed/cutscene.cpp
@@ -46,7 +46,7 @@ void Cutscene::update() {
 		_movieStep = 9999;
 		break;
 	case 'D' :
-		_movieStep = 9999;
+		babyDollScene();
 		break;
 	case 'E' :
 		shipLaunchScene();
@@ -87,6 +87,9 @@ void Cutscene::update() {
 			play('I');
 		} else if (_cutsceneId == 'G') {
 			g_engine->_cursor.showCursor(true);
+		} else if (_cutsceneId == 'D') {
+			g_engine->_cursor.showCursor(true);
+			g_engine->_room->restorePalette();
 		}
 	}
 }
@@ -677,6 +680,93 @@ bool Cutscene::alienBornScene() {
 	return true;
 }
 
+bool Cutscene::babyDollScene() {
+	switch (_movieStep) {
+	case 1: {
+		delete _morph;
+		_morph = new Morph({73, 46, 472, 240});
+		_palette.load("art/norm.pal");
+		Img left00Img;
+		left00Img.load("art/bdoll0.img");
+		left00Img.draw();
+		Img left01Img;
+		left01Img.load("art/bdoll1.img");
+		left01Img.draw();
+		_morph->loadSrcFromScreen();
+
+		Img born1Img;
+		born1Img.load("art/embryo.img");
+		born1Img.draw(1);
+		_morph->loadDestFromScreen();
+
+		g_engine->_screen->clear();
+		left00Img.draw();
+		left01Img.draw();
+		g_engine->_screen->clearPalette();
+		break;
+	}
+	case 2:
+		break;
+	case 3:
+		// TODO play doll music here.
+		g_engine->fadeIn(_palette);
+		break;
+	case 4:
+		if (g_engine->fadeStep()) {
+			return true;
+		}
+		break;
+	case 5:
+		_morph->start(MorphDirection::Forward);
+		registTime();
+		break;
+	case 6:
+		if (waitTime(50)) {
+			return true;
+		}
+		break;
+	case 7: {
+		if (_morph->morphStep()) {
+			return true;
+		}
+		registTime();
+		break;
+	}
+	case 8:
+		if (waitTime(40)) {
+			return true;
+		}
+		_morph->start(MorphDirection::Backward);
+		break;
+	case 9:
+		if (_morph->morphStep()) {
+			return true;
+		}
+		registTime();
+		break;
+	case 10:
+		if (waitTime(30)) {
+			return true;
+		}
+		break;
+	case 11:
+		g_engine->fadeOut();
+		break;
+	case 12:
+		if (g_engine->fadeStep()) {
+			return true;
+		}
+		delete _morph;
+		_morph = nullptr;
+		break;
+	default:
+		_movieStep = 9999;
+		return false;
+	}
+	_movieStep++;
+	return true;
+}
+
 bool Cutscene::stepAnim(int drawMode) {
 	if (_animDelayCount == 0) {
 		Img animFrame;
diff --git a/engines/darkseed/cutscene.h b/engines/darkseed/cutscene.h
index 99f8694592c..05b523162b9 100644
--- a/engines/darkseed/cutscene.h
+++ b/engines/darkseed/cutscene.h
@@ -22,9 +22,12 @@
 #ifndef DARKSEED_CUTSCENE_H
 #define DARKSEED_CUTSCENE_H
 
+#include "common/rect.h"
 #include "common/str.h"
+#include "graphics/managed_surface.h"
 #include "darkseed/pal.h"
 #include "darkseed/titlefont.h"
+#include "darkseed/morph.h"
 
 namespace Darkseed {
 
@@ -40,6 +43,7 @@ private:
 	int _animDelayCount;
 	int _animDirection;
 	uint32 _startTime = 0;
+	Morph *_morph = nullptr;
 
 public:
 	virtual ~Cutscene();
@@ -54,6 +58,7 @@ private:
 	bool embryoInsertedScene();
 	bool shipLaunchScene();
 	bool alienBornScene();
+	bool babyDollScene();
 
 	void runAnim(int direction = 1);
 	bool stepAnim(int drawMode = 1);
diff --git a/engines/darkseed/module.mk b/engines/darkseed/module.mk
index 4a36874ef67..c6fa3787ed1 100644
--- a/engines/darkseed/module.mk
+++ b/engines/darkseed/module.mk
@@ -12,6 +12,7 @@ MODULE_OBJS = \
 	img.o \
 	inventory.o \
 	metaengine.o \
+	morph.o \
 	nsp.o \
 	objects.o \
 	pal.o \
diff --git a/engines/darkseed/morph.cpp b/engines/darkseed/morph.cpp
new file mode 100644
index 00000000000..c08618d2302
--- /dev/null
+++ b/engines/darkseed/morph.cpp
@@ -0,0 +1,68 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "darkseed/morph.h"
+#include "darkseed/darkseed.h"
+
+namespace Darkseed {
+
+Morph::Morph(const Common::Rect &area) : _area(area) {}
+void Morph::loadSrcFromScreen() {
+	_src.copyFrom(*(Graphics::ManagedSurface *)g_engine->_screen);
+}
+
+void Morph::loadDestFromScreen() {
+	_dest.copyFrom(*(Graphics::ManagedSurface *)g_engine->_screen);
+}
+
+void Morph::start(MorphDirection direction) {
+	_stepCount = 0;
+	_direction = direction;
+}
+
+bool Morph::morphStep() {
+	if (_stepCount > 16) {
+		return false;
+	}
+	draw(_direction == MorphDirection::Forward ? _stepCount : 16 - _stepCount);
+	_stepCount += 2;
+	return _stepCount < 17;
+}
+
+void Morph::draw(int16 drawIdx) {
+	uint8 *screen = (uint8 *)g_engine->_screen->getBasePtr(_area.left, _area.top);
+	uint8 *src = (uint8 *)_src.getBasePtr(_area.left, _area.top);
+	uint8 *dest = (uint8 *)_dest.getBasePtr(_area.left, _area.top);
+
+	for (int y = 0; y < _area.height(); y++) {
+		for (int x = 0; x < _area.width(); x++) {
+			if (src[x] != dest[x]) {
+				screen[x] = (src[x] * (16 - drawIdx) + dest[x] * drawIdx) >> 4;
+			}
+		}
+		screen += g_engine->_screen->pitch;
+		src += _src.pitch;
+		dest += _dest.pitch;
+	}
+	g_engine->_screen->addDirtyRect(_area);
+}
+
+} // End of namespace Darkseed
diff --git a/engines/darkseed/morph.h b/engines/darkseed/morph.h
new file mode 100644
index 00000000000..2db15ca2b82
--- /dev/null
+++ b/engines/darkseed/morph.h
@@ -0,0 +1,56 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+#ifndef DARKSEED_MORPH_H
+#define DARKSEED_MORPH_H
+
+#include "common/rect.h"
+#include "graphics/managed_surface.h"
+
+namespace Darkseed {
+
+enum class MorphDirection : uint8 {
+	Forward,
+	Backward
+};
+
+class Morph {
+private:
+	Common::Rect _area;
+	Graphics::ManagedSurface _src;
+	Graphics::ManagedSurface _dest;
+	MorphDirection _direction = MorphDirection::Forward;
+	int16 _stepCount = 0;
+public:
+	explicit Morph(const Common::Rect &area);
+
+	void loadSrcFromScreen();
+	void loadDestFromScreen();
+
+	void start(MorphDirection direction);
+
+	bool morphStep();
+private:
+	void draw(int16 drawIdx);
+};
+
+} // End of namespace Darkseed
+
+#endif // DARKSEED_MORPH_H


Commit: 84c243376fa0cb0d3a30c82104460fcd98c19e45
    https://github.com/scummvm/scummvm/commit/84c243376fa0cb0d3a30c82104460fcd98c19e45
Author: Eric Fry (yuv422 at reversedgames.com)
Date: 2024-10-12T23:25:36+11:00

Commit Message:
DARKSEED: Add book & nightmare2 scenes.

Changed paths:
    engines/darkseed/cutscene.cpp
    engines/darkseed/cutscene.h
    engines/darkseed/morph.cpp


diff --git a/engines/darkseed/cutscene.cpp b/engines/darkseed/cutscene.cpp
index 18df09d633a..365fe700d64 100644
--- a/engines/darkseed/cutscene.cpp
+++ b/engines/darkseed/cutscene.cpp
@@ -40,7 +40,7 @@ void Cutscene::play(char cutsceneId) {
 void Cutscene::update() {
 	switch (_cutsceneId) {
 	case 'B' :
-		_movieStep = 9999;
+		nightmare2Scene();
 		break;
 	case 'C' :
 		_movieStep = 9999;
@@ -52,7 +52,7 @@ void Cutscene::update() {
 		shipLaunchScene();
 		break;
 	case 'G' :
-		_movieStep = 9999;
+		bookScene();
 		break;
 	case 'H' :
 		_movieStep = 9999;
@@ -85,10 +85,8 @@ void Cutscene::update() {
 			g_engine->newGame();
 		} else if (_cutsceneId == 'Y') {
 			play('I');
-		} else if (_cutsceneId == 'G') {
-			g_engine->_cursor.showCursor(true);
-		} else if (_cutsceneId == 'D') {
-			g_engine->_cursor.showCursor(true);
+		} else if (_cutsceneId == 'B' || _cutsceneId == 'D' || _cutsceneId == 'G') {
+			g_engine->_cursor.showCursor(true); // TODO fade in here
 			g_engine->_room->restorePalette();
 		}
 	}
@@ -767,6 +765,220 @@ bool Cutscene::babyDollScene() {
 	return true;
 }
 
+bool Cutscene::bookScene() {
+	switch (_movieStep) {
+	case 1:
+		g_engine->fadeOut();
+		break;
+	case 2:
+		if (g_engine->fadeStep()) {
+			return true;
+		}
+		break;
+	case 3: {
+		delete _morph;
+		_morph = new Morph({136, 41, 423, 239});
+		_palette.load("art/norm.pal");
+		Img left00Img;
+		left00Img.load("art/bdoll0.img");
+		left00Img.draw();
+		Img left01Img;
+		left01Img.load("art/bdoll1.img");
+		left01Img.draw();
+		Img book1Img;
+		book1Img.load("art/book1.img");
+		book1Img.draw(1);
+		_morph->loadSrcFromScreen();
+
+		Img book2Img;
+		book2Img.load("art/book2.img");
+		book2Img.draw(1);
+		_morph->loadDestFromScreen();
+
+		g_engine->_screen->clear();
+		left00Img.draw();
+		left01Img.draw();
+		book1Img.draw(1);
+		g_engine->_screen->clearPalette();
+		break;
+	}
+	case 4:
+		break;
+	case 5:
+		g_engine->fadeIn(_palette);
+		break;
+	case 6:
+		if (g_engine->fadeStep()) {
+			return true;
+		}
+		break;
+	case 7:
+		// TODO play book music
+		registTime();
+		break;
+	case 8:
+		if (waitTime(70)) {
+			return true;
+		}
+		_morph->start(MorphDirection::Forward);
+		break;
+	case 9:
+		if (_morph->morphStep()) {
+			return true;
+		}
+		registTime();
+		break;
+	case 10:
+		if (waitTime(70)) {
+			return true;
+		}
+		break;
+	case 11:
+		registTime();
+		_morph->start(MorphDirection::Backward);
+		break;
+	case 12:
+		if (_morph->morphStep()) {
+			return true;
+		}
+		registTime();
+		break;
+	case 13:
+		if (waitTime(40)) {
+			return true;
+		}
+		break;
+	case 14:
+		delete _morph;
+		g_engine->fadeOut();
+		break;
+	case 15:
+		if (g_engine->fadeStep()) {
+			return true;
+		}
+		break;
+	case 16:
+		// TODO stop audio
+		break;
+	default:
+		_movieStep = 9999;
+		return false;
+	}
+	_movieStep++;
+	return true;
+}
+
+bool Cutscene::nightmare2Scene() {
+	switch (_movieStep) {
+	case 1: {
+		delete _morph;
+		_morph = new Morph({264, 85, 515, 267});
+		_palette.load("art/ship.pal");
+		Img left00Img;
+		left00Img.load("art/nmf0.img");
+		left00Img.draw();
+		Img left01Img;
+		left01Img.load("art/nmf1.img");
+		left01Img.draw();
+		_morph->loadSrcFromScreen();
+
+		Img book2Img;
+		book2Img.load("art/dmik.img");
+		book2Img.draw(1);
+		_morph->loadDestFromScreen();
+
+		g_engine->_screen->clear();
+		left00Img.draw();
+		left01Img.draw();
+		g_engine->_screen->clearPalette();
+		break;
+	}
+	case 2:
+		break;
+	case 3:
+		// TODO play night2 music
+		break;
+	case 4:
+		g_engine->fadeIn(_palette);
+		break;
+	case 5:
+		if (g_engine->fadeStep()) {
+			return true;
+		}
+		break;
+	case 6:
+		registTime();
+		break;
+	case 7:
+		if (waitTime(20)) {
+			return true;
+		}
+		_morph->start(MorphDirection::Forward);
+		break;
+	case 8:
+		if (_morph->morphStep()) {
+			return true;
+		}
+		registTime();
+		break;
+	case 9:
+		if (waitTime(10)) {
+			return true;
+		}
+		_morph->start(MorphDirection::Backward);
+		break;
+	case 10:
+		if (_morph->morphStep()) {
+			return true;
+		}
+		registTime();
+		break;
+	case 11:
+		if (waitTime(40)) {
+			return true;
+		}
+		_morph->start(MorphDirection::Forward);
+		break;
+	case 12:
+		if (_morph->morphStep()) {
+			return true;
+		}
+		registTime();
+		break;
+	case 13:
+		if (waitTime(10)) {
+			return true;
+		}
+		_morph->start(MorphDirection::Backward);
+		break;
+	case 14:
+		if (_morph->morphStep()) {
+			return true;
+		}
+		registTime();
+		break;
+	case 15:
+		if (waitTime(40)) {
+			return true;
+		}
+		break;
+	case 16:
+		delete _morph;
+		g_engine->fadeOut();
+		break;
+	case 17:
+		if (g_engine->fadeStep()) {
+			return true;
+		}
+		break;
+	default:
+		_movieStep = 9999;
+		return false;
+	}
+	_movieStep++;
+	return true;
+}
+
 bool Cutscene::stepAnim(int drawMode) {
 	if (_animDelayCount == 0) {
 		Img animFrame;
diff --git a/engines/darkseed/cutscene.h b/engines/darkseed/cutscene.h
index 05b523162b9..287bd36609b 100644
--- a/engines/darkseed/cutscene.h
+++ b/engines/darkseed/cutscene.h
@@ -59,6 +59,8 @@ private:
 	bool shipLaunchScene();
 	bool alienBornScene();
 	bool babyDollScene();
+	bool bookScene();
+	bool nightmare2Scene();
 
 	void runAnim(int direction = 1);
 	bool stepAnim(int drawMode = 1);
diff --git a/engines/darkseed/morph.cpp b/engines/darkseed/morph.cpp
index c08618d2302..d0ca8d9194d 100644
--- a/engines/darkseed/morph.cpp
+++ b/engines/darkseed/morph.cpp
@@ -43,7 +43,7 @@ bool Morph::morphStep() {
 		return false;
 	}
 	draw(_direction == MorphDirection::Forward ? _stepCount : 16 - _stepCount);
-	_stepCount += 2;
+	_stepCount += 1;
 	return _stepCount < 17;
 }
 


Commit: 5118fa466ff4a6037d8b404325ae0b39e5ffd298
    https://github.com/scummvm/scummvm/commit/5118fa466ff4a6037d8b404325ae0b39e5ffd298
Author: Eric Fry (yuv422 at reversedgames.com)
Date: 2024-10-12T23:25:36+11:00

Commit Message:
DARKSEED: Started work on nightmare 3 cutscene

Changed paths:
    engines/darkseed/anm.cpp
    engines/darkseed/anm.h
    engines/darkseed/cutscene.cpp
    engines/darkseed/cutscene.h


diff --git a/engines/darkseed/anm.cpp b/engines/darkseed/anm.cpp
index f1ba8109f93..42d8579d252 100644
--- a/engines/darkseed/anm.cpp
+++ b/engines/darkseed/anm.cpp
@@ -23,7 +23,7 @@
 #include "darkseed/anm.h"
 
 namespace Darkseed {
-bool Anm::load(const Common::Path &filename) {
+bool Anm::load(const Common::Path &filename, int deltaOffset) {
 	if (_file.isOpen()) {
 		_file.close();
 	}
@@ -31,14 +31,14 @@ bool Anm::load(const Common::Path &filename) {
 		return false;
 	}
 	_numRecords = _file.readUint16LE();
-	_assetOffset = _file.readUint16LE();
-
+	_assetFileId = _file.readUint16LE();
+	_deltaOffset = deltaOffset;
 	return true;
 }
 
 bool Anm::getImg(uint16 index, Img &img, bool includesPosition) {
 	_file.seek(4 + index * 2);
-	int offset = _file.readUint16LE();
+	int offset = _file.readUint16LE() + _deltaOffset;
 	_file.seek((offset * 16) + (4 + _numRecords * 2));
 	if (includesPosition) {
 		img.load(_file);
diff --git a/engines/darkseed/anm.h b/engines/darkseed/anm.h
index 4edc71c2267..5ec86531e6f 100644
--- a/engines/darkseed/anm.h
+++ b/engines/darkseed/anm.h
@@ -30,10 +30,11 @@ class Anm {
 private:
 	Common::File _file;
 	uint16 _numRecords = 0;
-	uint16 _assetOffset = 0;
+	uint16 _assetFileId = 0;
+	int _deltaOffset = 0;
 
 public:
-	bool load(const Common::Path &filename);
+	bool load(const Common::Path &filename, int deltaOffset = 0);
 	bool getImg(uint16 index, Img &img, bool includesPosition = true);
 	int numImages();
 };
diff --git a/engines/darkseed/cutscene.cpp b/engines/darkseed/cutscene.cpp
index 365fe700d64..31782dde20e 100644
--- a/engines/darkseed/cutscene.cpp
+++ b/engines/darkseed/cutscene.cpp
@@ -43,7 +43,7 @@ void Cutscene::update() {
 		nightmare2Scene();
 		break;
 	case 'C' :
-		_movieStep = 9999;
+		nightmare3Scene();
 		break;
 	case 'D' :
 		babyDollScene();
@@ -85,9 +85,10 @@ void Cutscene::update() {
 			g_engine->newGame();
 		} else if (_cutsceneId == 'Y') {
 			play('I');
-		} else if (_cutsceneId == 'B' || _cutsceneId == 'D' || _cutsceneId == 'G') {
+		} else if (_cutsceneId == 'B' || _cutsceneId == 'C' || _cutsceneId == 'D' || _cutsceneId == 'G') {
 			g_engine->_cursor.showCursor(true); // TODO fade in here
 			g_engine->_room->restorePalette();
+			g_engine->_frame.draw();
 		}
 	}
 }
@@ -681,7 +682,7 @@ bool Cutscene::alienBornScene() {
 bool Cutscene::babyDollScene() {
 	switch (_movieStep) {
 	case 1: {
-		delete _morph;
+		freeMorph();
 		_morph = new Morph({73, 46, 472, 240});
 		_palette.load("art/norm.pal");
 		Img left00Img;
@@ -754,8 +755,7 @@ bool Cutscene::babyDollScene() {
 		if (g_engine->fadeStep()) {
 			return true;
 		}
-		delete _morph;
-		_morph = nullptr;
+		freeMorph();
 		break;
 	default:
 		_movieStep = 9999;
@@ -776,7 +776,7 @@ bool Cutscene::bookScene() {
 		}
 		break;
 	case 3: {
-		delete _morph;
+		freeMorph();
 		_morph = new Morph({136, 41, 423, 239});
 		_palette.load("art/norm.pal");
 		Img left00Img;
@@ -849,7 +849,7 @@ bool Cutscene::bookScene() {
 		}
 		break;
 	case 14:
-		delete _morph;
+		freeMorph();
 		g_engine->fadeOut();
 		break;
 	case 15:
@@ -871,7 +871,7 @@ bool Cutscene::bookScene() {
 bool Cutscene::nightmare2Scene() {
 	switch (_movieStep) {
 	case 1: {
-		delete _morph;
+		freeMorph();
 		_morph = new Morph({264, 85, 515, 267});
 		_palette.load("art/ship.pal");
 		Img left00Img;
@@ -963,7 +963,7 @@ bool Cutscene::nightmare2Scene() {
 		}
 		break;
 	case 16:
-		delete _morph;
+		freeMorph();
 		g_engine->fadeOut();
 		break;
 	case 17:
@@ -979,6 +979,74 @@ bool Cutscene::nightmare2Scene() {
 	return true;
 }
 
+bool Cutscene::nightmare3Scene() { // TODO fix animation of values + face here.
+	switch (_movieStep) {
+	case 1: {
+		_palette.load("art/ship.pal");
+		Img left00Img;
+		left00Img.load("art/nmf0.img");
+		left00Img.draw();
+		Img left01Img;
+		left01Img.load("art/nmf1.img");
+		left01Img.draw();
+
+		Img book2Img;
+		book2Img.load("art/nm3a.img");
+		book2Img.draw(1);
+
+		g_engine->_screen->clearPalette();
+		break;
+	}
+	case 2: {
+		_animation.load("art/valves.anm", -9340);
+		// TODO play night3 music here.
+		g_engine->fadeIn(_palette);
+		break;
+	}
+	case 3:
+		if (g_engine->fadeStep()) {
+			return true;
+		}
+		break;
+	case 4:
+		_animIdx = 0;
+		_animCount = 12;
+		// TODO speed = 2
+		runAnim();
+		break;
+	case 5:
+		if (stepAnim(1)) {
+			return true;
+		}
+		registTime();
+		break;
+	case 6:
+	case 7:
+	case 8:
+	case 9:
+		registTime();
+		break;
+	case 10:
+		if (waitTime(10)) {
+			return true;
+		}
+		break;
+	case 11:
+		g_engine->fadeOut();
+		break;
+	case 12:
+		if (g_engine->fadeStep()) {
+			return true;
+		}
+		break;
+	default:
+		_movieStep = 9999;
+		return false;
+	}
+	_movieStep++;
+	return true;
+}
+
 bool Cutscene::stepAnim(int drawMode) {
 	if (_animDelayCount == 0) {
 		Img animFrame;
@@ -1024,4 +1092,9 @@ void Cutscene::runAnim(int direction) {
 	_animDirection = direction;
 }
 
+void Cutscene::freeMorph() {
+	delete _morph;
+	_morph = nullptr;
+}
+
 } // End of namespace Darkseed
diff --git a/engines/darkseed/cutscene.h b/engines/darkseed/cutscene.h
index 287bd36609b..469a16b019b 100644
--- a/engines/darkseed/cutscene.h
+++ b/engines/darkseed/cutscene.h
@@ -61,6 +61,7 @@ private:
 	bool babyDollScene();
 	bool bookScene();
 	bool nightmare2Scene();
+	bool nightmare3Scene();
 
 	void runAnim(int direction = 1);
 	bool stepAnim(int drawMode = 1);
@@ -69,6 +70,8 @@ private:
 
 	void registTime();
 	bool waitTime(int16 duration);
+
+	void freeMorph();
 };
 
 }; // End of namespace Darkseed




More information about the Scummvm-git-logs mailing list