[Scummvm-git-logs] scummvm master -> d8b76a2dfc22712a093caa460fdc333c075a1476

bluegr bluegr at gmail.com
Mon Dec 14 01:49:30 UTC 2020


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:
9c25f9ee64 STARTREK: Add support for loading actors into dynamically assigned slots
7db4b674b0 STARTREK: Fix some rounding issues with doubles
2b8ea5c7e3 STARTREK: Some work on supporting the demo and floppy versions of st25
d8b76a2dfc STARTREK: Add some bridge sequences


Commit: 9c25f9ee64e33a3996a8c346f8c7f524f02c0b82
    https://github.com/scummvm/scummvm/commit/9c25f9ee64e33a3996a8c346f8c7f524f02c0b82
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2020-12-14T03:48:51+02:00

Commit Message:
STARTREK: Add support for loading actors into dynamically assigned slots

Changed paths:
    engines/startrek/actors.cpp
    engines/startrek/awaymission.cpp
    engines/startrek/menu.cpp
    engines/startrek/startrek.cpp
    engines/startrek/startrek.h


diff --git a/engines/startrek/actors.cpp b/engines/startrek/actors.cpp
index 1ef78d1e26..06b09004cb 100644
--- a/engines/startrek/actors.cpp
+++ b/engines/startrek/actors.cpp
@@ -49,22 +49,33 @@ int StarTrekEngine::loadActorAnim(int actorIndex, const Common::String &animName
 	debugC(6, kDebugGraphics, "Load animation '%s' on actor %d", animName.c_str(), actorIndex);
 
 	if (actorIndex == -1) {
-		// TODO
-		warning("loadActorAnim: actor == -1");
-	} else {
-		Actor *actor = &_actorList[actorIndex];
+		bool foundSlot = false;
 
-		if (actor->spriteDrawn) {
-			releaseAnim(actor);
-			drawActorToScreen(actor, animName, x, y, scale, false);
-		} else {
-			drawActorToScreen(actor, animName, x, y, scale, true);
+		for (int i = 8; i < NUM_ACTORS; i++) {
+			if (_actorList[i].spriteDrawn == 0) {
+				actorIndex = i;
+				foundSlot = true;
+				break;
+			}
 		}
 
-		actor->triggerActionWhenAnimFinished = false;
-		actor->finishedAnimActionParam = 0;
+		if (!foundSlot) {
+			error("All animations are in use");
+		}
 	}
 
+	Actor *actor = &_actorList[actorIndex];
+
+	if (actor->spriteDrawn) {
+		releaseAnim(actor);
+		drawActorToScreen(actor, animName, x, y, scale, false);
+	} else {
+		drawActorToScreen(actor, animName, x, y, scale, true);
+	}
+
+	actor->triggerActionWhenAnimFinished = false;
+	actor->finishedAnimActionParam = 0;
+
 	return actorIndex;
 }
 
@@ -430,7 +441,7 @@ void StarTrekEngine::removeActorFromScreen(int actorIndex) {
 	releaseAnim(actor);
 }
 
-void StarTrekEngine::actorFunc1() {
+void StarTrekEngine::removeDrawnActorsFromScreen() {
 	for (int i = 0; i < NUM_ACTORS; i++) {
 		if (_actorList[i].spriteDrawn == 1) {
 			removeActorFromScreen(i);
diff --git a/engines/startrek/awaymission.cpp b/engines/startrek/awaymission.cpp
index 98606b4786..c555c40088 100644
--- a/engines/startrek/awaymission.cpp
+++ b/engines/startrek/awaymission.cpp
@@ -100,7 +100,7 @@ void StarTrekEngine::loadRoom(const Common::String &missionName, int roomIndex)
 
 	_awayMission.activeAction = ACTION_WALK;
 
-	actorFunc1();
+	removeDrawnActorsFromScreen();
 	initActors();
 
 	Fixed8 num = _room->getMaxScale() - _room->getMinScale();
@@ -498,7 +498,7 @@ void StarTrekEngine::awayMissionGetLookOrTalk(int16 clickedObject) {
 void StarTrekEngine::unloadRoom() {
 	_gfx->fadeoutScreen();
 	// sub_2394b(); // TODO
-	actorFunc1();
+	removeDrawnActorsFromScreen();
 	delete _room;
 	_room = nullptr;
 	delete _mapFile;
diff --git a/engines/startrek/menu.cpp b/engines/startrek/menu.cpp
index 585992626b..2d81b53304 100644
--- a/engines/startrek/menu.cpp
+++ b/engines/startrek/menu.cpp
@@ -1057,7 +1057,7 @@ void StarTrekEngine::showRepublicMap(int16 arg0, int16 turbolift) {
 	bool spriteLoaded = false;
 	int16 clickedArea = 0;
 
-	actorFunc1();
+	removeDrawnActorsFromScreen();
 	_gfx->pushSprites();
 
 	if (!_awayMission.veng.showedRepublicMapFirstTime) {
diff --git a/engines/startrek/startrek.cpp b/engines/startrek/startrek.cpp
index 9c5c978fd9..6c23f7a8ea 100644
--- a/engines/startrek/startrek.cpp
+++ b/engines/startrek/startrek.cpp
@@ -269,7 +269,7 @@ void StarTrekEngine::runTransportSequence(const Common::String &name) {
 
 	_sound->stopAllVocSounds();
 	_gfx->fadeoutScreen();
-	actorFunc1();
+	removeDrawnActorsFromScreen();
 	initActors();
 
 	_gfx->setBackgroundImage("transprt");
@@ -330,7 +330,7 @@ void StarTrekEngine::runTransportSequence(const Common::String &name) {
 
 	_gfx->drawAllSprites();
 	_gfx->fadeoutScreen();
-	actorFunc1();
+	removeDrawnActorsFromScreen();
 	initActors();
 }
 
diff --git a/engines/startrek/startrek.h b/engines/startrek/startrek.h
index 5d84a926b9..2ef24a3d02 100644
--- a/engines/startrek/startrek.h
+++ b/engines/startrek/startrek.h
@@ -366,7 +366,7 @@ public:
 	void renderBan(byte *screenPixels, byte *bgPixels, int banFileIndex);
 	void renderBanAboveSprites();
 	void removeActorFromScreen(int actorIndex);
-	void actorFunc1();
+	void removeDrawnActorsFromScreen();
 	void drawActorToScreen(Actor *actor, const Common::String &animName, int16 x, int16 y, Fixed8 scale, bool addSprite);
 	void releaseAnim(Actor *actor);
 	void initStandAnim(int actorIndex);


Commit: 7db4b674b0c2859bf366aa9bdb9165da3163513f
    https://github.com/scummvm/scummvm/commit/7db4b674b0c2859bf366aa9bdb9165da3163513f
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2020-12-14T03:48:52+02:00

Commit Message:
STARTREK: Fix some rounding issues with doubles

Changed paths:
    engines/startrek/space.cpp


diff --git a/engines/startrek/space.cpp b/engines/startrek/space.cpp
index 4f64e47cb5..85d0f25d8b 100644
--- a/engines/startrek/space.cpp
+++ b/engines/startrek/space.cpp
@@ -279,24 +279,24 @@ void StarTrekEngine::drawR3Shape(R3 *r3) {
 		r3->field98 = dbl48;
 
 		// dbl30, (bitmap->xoffset + 2), r3->field58,
-		double tmp = r3->field58 - (double)(r3->bitmap->xoffset + 2) * dbl30;
+		double tmp = r3->field58 - ((double)r3->bitmap->xoffset + 2) * dbl30;
 		// dbl20, (bitmap->yoffset + 2), tmp
-		double dbl10 = tmp - (double)(r3->bitmap->yoffset + 2) * dbl20;
+		double dbl10 = tmp - ((double)r3->bitmap->yoffset + 2) * dbl20;
 
 		// dbl28, (bitmap->xoffset + 2), r3->field5a
-		tmp = r3->field5a - (double)(r3->bitmap->xoffset + 2) * dbl28;
+		tmp = r3->field5a - ((double)r3->bitmap->xoffset + 2) * dbl28;
 		// dbl18, (bitmap->yoffset + 2), tmp
-		double dbl8 = tmp - (double)(r3->bitmap->yoffset + 2) * dbl18;
+		double dbl8 = tmp - ((double)r3->bitmap->yoffset + 2) * dbl18;
 
 		// dbl60, r3->field58, bitmap->xoffset + 2
-		tmp = (r3->bitmap->xoffset + 2) - dbl60 * r3->field58;
+		tmp = ((double)r3->bitmap->xoffset + 2) - dbl60 * r3->field58;
 		double dbl40 = tmp - dbl50 * r3->field5a;
 
-		tmp = (r3->bitmap->yoffset + 2) - dbl58 * r3->field58;
+		tmp = ((double)r3->bitmap->yoffset + 2) - dbl58 * r3->field58;
 		double dbl38 = tmp - dbl48 * r3->field5a;
 
-		double dbl3e4 = r3->bitmap->width + 2;
-		double dbl3ec = r3->bitmap->height + 2;
+		double dbl3e4 = (double)r3->bitmap->width + 2;
+		double dbl3ec = (double)r3->bitmap->height + 2;
 
 		double thing[8];
 		tmp = 1.0 * dbl30;


Commit: 2b8ea5c7e3d34c01c1d266b8a4403edba46ca2aa
    https://github.com/scummvm/scummvm/commit/2b8ea5c7e3d34c01c1d266b8a4403edba46ca2aa
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2020-12-14T03:48:52+02:00

Commit Message:
STARTREK: Some work on supporting the demo and floppy versions of st25

Changed paths:
    engines/startrek/intro.cpp
    engines/startrek/room.cpp


diff --git a/engines/startrek/intro.cpp b/engines/startrek/intro.cpp
index 26a3550e55..f08fd84921 100644
--- a/engines/startrek/intro.cpp
+++ b/engines/startrek/intro.cpp
@@ -33,8 +33,7 @@ void StarTrekEngine::playIntro() {
 	initStarfieldPosition();
 	initStarfield(10, 20, 309, 169, 128);
 
-	Bitmap *fakeStarfieldBitmap = new StubBitmap(0, 0);
-	initStarfieldSprite(&_starfieldSprite, fakeStarfieldBitmap, _starfieldRect);
+	initStarfieldSprite(&_starfieldSprite, new StubBitmap(0, 0), _starfieldRect);
 
 	//delR3(&_enterpriseR3); // TODO: uncomment
 
@@ -278,7 +277,8 @@ void StarTrekEngine::playIntro() {
 			break;
 
 		case 366:
-			delR3(&planetR3);
+			if (getFeatures() & GF_CDROM)
+				delR3(&planetR3);
 			break;
 
 		case 378:
@@ -313,9 +313,13 @@ void StarTrekEngine::playIntro() {
 }
 
 void StarTrekEngine::showCreditsScreen(R3 *creditsBuffer, int index, bool deletePrevious) {
+	if (!(getFeatures() & GF_CDROM) && index > 0)
+		return;
+
 	if (deletePrevious) {
 		delR3(creditsBuffer);
 	}
+
 	creditsBuffer->bitmap = new Bitmap(_resource->loadFile(Common::String::format("credit%02d.shp", index)));
 	creditsBuffer->field1e = 3;
 	creditsBuffer->field22 = 1;
diff --git a/engines/startrek/room.cpp b/engines/startrek/room.cpp
index 1055beedde..96beca9bc5 100644
--- a/engines/startrek/room.cpp
+++ b/engines/startrek/room.cpp
@@ -115,7 +115,8 @@ Room::Room(StarTrekEngine *vm, const Common::String &name) : _vm(vm), _awayMissi
 	}
 
 	bool isDemo = _vm->getFeatures() & GF_DEMO;
-	if (!isDemo) {
+	bool isFloppy = !(_vm->getFeatures() & GF_CDROM);
+	if (!isDemo && !isFloppy) {
 		loadRoomMessages();
 		loadOtherRoomMessages();
 	}


Commit: d8b76a2dfc22712a093caa460fdc333c075a1476
    https://github.com/scummvm/scummvm/commit/d8b76a2dfc22712a093caa460fdc333c075a1476
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2020-12-14T03:48:52+02:00

Commit Message:
STARTREK: Add some bridge sequences

Changed paths:
    engines/startrek/bridge.cpp
    engines/startrek/startrek.h


diff --git a/engines/startrek/bridge.cpp b/engines/startrek/bridge.cpp
index 4950440d37..38e56a544b 100644
--- a/engines/startrek/bridge.cpp
+++ b/engines/startrek/bridge.cpp
@@ -71,6 +71,41 @@ enum BridgeMenuEvent {
 	kBridgeSuluTargetAnalysis = 119
 };
 
+enum BridgeSequence {
+	kSeqStartMissionDemon = 0,
+	kSeqEndMockBattle,
+	kSeqShowDebriefDemon,
+	kSeqTalkWithPolluxPriest,
+	kSeqEndMissionDemon,
+	kSeqStartMissionTug,
+	kSeqUnk6,
+	kSeqUnk7,
+	kSeqUnk8,
+	kSeqUnk9,
+	kStartMissionLove,
+	kSeqUnk11,
+	kSeqUnk12,
+	kSeqUnk13,
+	kSeqUnk14,
+	kSeqUnk15,
+	kStartMissionMudd,
+	kSeqUnk17,
+	kSeqUnk18,
+	kStartMissionFeather,
+	kSeqUnk20,
+	kSeqUnk21,
+	kStartMissionTrial,
+	kSeqUnk23,
+	kSeqUnk24,
+	kSeqUnk25,
+	kSeqUnk26,
+	kSeqUnk27,
+	kStartMissionVeng,
+	kSeqUnk29,
+	kStartMissionSins,
+	kSeqUnk31,
+};
+
 void StarTrekEngine::initBridge(bool b) {
 	_gfx->loadPalette("bridge");
 	_sound->loadMusicFile("bridge");
@@ -82,9 +117,8 @@ void StarTrekEngine::initBridge(bool b) {
 }
 
 void StarTrekEngine::loadBridge() {
-	initStarfield(72, 30, 247, 102, 0);
-	// TODO
-	//initStarfieldSprite();
+	// TODO: Check why the +1 is needed here
+	initStarfield(72 + 1, 30 + 1, 247 + 1, 102 + 1, 0);
 
 	_gfx->setBackgroundImage("bridge");
 	_gfx->loadPri("bridge");
@@ -92,11 +126,8 @@ void StarTrekEngine::loadBridge() {
 	_system->updateScreen();
 
 	loadBridgeActors();
-	_missionName = _missionToLoad;
-	_resource->setTxtFileName(_missionName);
-	_sound->loadMusicFile("bridge");
-	_sound->playMidiMusicTracks(0, -1);
-	//loadBanFile("T0BAN");
+
+
 	//sub_1312C();	// TODO
 
 	// TODO
@@ -105,6 +136,12 @@ void StarTrekEngine::loadBridge() {
 	//initStarfieldSprite();
 	//initStarfieldSprite();
 	//initStarfieldSprite();
+
+	// Play bridge sequences for Demon World, for now
+	// TODO
+	playBridgeSequence(kSeqStartMissionDemon);
+	playBridgeSequence(kSeqEndMockBattle);
+	playBridgeSequence(kSeqShowDebriefDemon);
 }
 
 void StarTrekEngine::loadBridgeActors() {
@@ -114,6 +151,101 @@ void StarTrekEngine::loadBridgeActors() {
 	}
 }
 
+// TODO: 2 params, change Enterprise state
+void StarTrekEngine::setBridgeMouseCursor() {
+	_gfx->setMouseBitmap("pushbtn"/*_mouseControllingShip ? "entcur" : "cursor"*/);
+}
+
+void StarTrekEngine::playBridgeSequence(int sequenceId) {
+	const char *captainsLogHeader = "Captain's Log";
+	const char *uhuraHeader = "Lieutenant Uhura";
+	const char *spockHeader = "Mr. Spock";
+	const char *suluHeader = "Mr. Sulu";
+	const char *lowerShieldsText = "#BRID\\B_336#Lowering shields and disarming weapons.";
+
+	switch (sequenceId) {
+	case kSeqStartMissionDemon:
+		_missionName = _missionToLoad = "DEMON";
+		_resource->setTxtFileName(_missionName);
+		_sound->loadMusicFile("bridgew");
+		// TODO: showMissionStartEnterpriseFlyby "DEM0\\FLYBY", "demon"
+		showTextbox(captainsLogHeader, _resource->getLoadedText(0), 160, 130, 176, 0);
+		showTextbox(uhuraHeader, _resource->getLoadedText(1), 298, 150, 161, 0);
+		showTextbox(spockHeader, _resource->getLoadedText(2), 294, 106, 44, 0);
+		// TODO: sub_2FF19("enterpri") // random number generation
+		// TODO: changeBridgeMode 1
+		_sound->playMidiMusicTracks(2, -1);
+		_sound->playSoundEffectIndex(40);
+		break;
+	case kSeqEndMockBattle:
+		if (true) {	// TODO: Check for Enterprise damage
+			// Mock battle won
+			_sound->playMidiMusicTracks(3, -1);
+			showTextbox(spockHeader, _resource->getLoadedText(4), 294, 106, 44, 0);
+			showTextbox(uhuraHeader, _resource->getLoadedText(5), 298, 150, 161, 0);
+			// TODO: sub_2f4c3()
+			// TODO: sub_321f9()
+			showTextbox(suluHeader, lowerShieldsText, 122, 116, 176, 0);
+			// TODO: Check variable
+		} else {
+			// Mock battle lost
+			// TODO
+		}
+		break;
+	case kSeqShowDebriefDemon:
+		setBridgeMouseCursor();	// 0, 0
+		// TODO: Delete 3D object
+		showBridgeScreenTalkerWithMessage(12, "Admiral", "woman");
+		// TODO: _targetPlanet = 18;
+		break;
+	case kSeqTalkWithPolluxPriest:
+		/*
+		// TODO: Check target planet
+		showTextbox(spockHeader, _resource->getLoadedText(15), 294, 106, 44, 0);
+		// TODO: Check if under attack
+		showTextbox(uhuraHeader, _resource->getLoadedText(16), 298, 150, 161, 0);
+		*/
+		_sound->playSoundEffectIndex(34);
+		showTextbox(uhuraHeader, _resource->getLoadedText(17), 298, 150, 161, 0);
+		showBridgeScreenTalkerWithMessage(18, "Priest", "prst");
+		/*
+		showTextbox(uhuraHeader, _resource->getLoadedText(19), 298, 150, 161, 0);
+		// TODO: Check if under attack
+		// TODO: Check target planet
+		showTextbox(spockHeader, _resource->getLoadedText(20), 294, 106, 44, 0);
+		// TODO: Check if in orbit
+		showTextbox(spockHeader, _resource->getLoadedText(21), 294, 106, 44, 0);
+		showTextbox(spockHeader, _resource->getLoadedText(22), 294, 106, 44, 0);
+		// TODO: Check against 32, 64, 96, 1, 6
+		*/
+		break;
+	case kSeqEndMissionDemon:
+		// TODO
+		break;
+	case kSeqStartMissionTug:
+		// TODO
+		break;
+	// TODO: The rest
+	default:
+		break;
+	}
+}
+
+void StarTrekEngine::showBridgeScreenTalkerWithMessage(int textId, Common::String talkerHeader, Common::String talkerId) {
+	if (talkerId == "romula" || talkerId == "pira" || talkerId == "klg1" || talkerId == "klg2" || talkerId == "maddoc")
+		_sound->playMidiMusicTracks(15, -1);
+	else if (talkerId == "mudd")
+		_sound->playMidiMusicTracks(17, -1);
+
+	initStarfieldSprite(&_starfieldSprite, new Bitmap(_resource->loadBitmapFile(talkerId)), _starfieldRect);
+	_starfieldSprite.drawMode = 0;
+	// TODO: Check why we need the coord adjustments below
+	int actorId = loadActorAnim(-1, talkerId, 72 - 2, 30 + 1, 1.0);
+	showTextbox(talkerHeader, _resource->getLoadedText(textId), 160, 190, 44, 0);
+	removeActorFromScreen(actorId);
+	initStarfieldSprite(&_starfieldSprite, new StubBitmap(0, 0), _starfieldRect);
+}
+
 void StarTrekEngine::bridgeLeftClick() {
 	Sprite *sprite = _gfx->getSpriteAt(_gfx->getMousePos());
 	int clickedActor = -1;
@@ -373,7 +505,8 @@ void StarTrekEngine::handleBridgeMenu(int menuEvent) {
 		break;
 	case kBridgeUhuraCommunications: // Uhura, communications
 		// TODO: text
-		showTextbox(uhuraHeader, _resource->getLoadedText(16), 298, 150, 161, 0);
+		//showTextbox(uhuraHeader, _resource->getLoadedText(16), 298, 150, 161, 0);
+		playBridgeSequence(kSeqTalkWithPolluxPriest);
 		break;
 	case kBridgeSuluOrbit: // Sulu, orbit
 		if (_enterpriseState.underAttack) {
@@ -406,7 +539,7 @@ void StarTrekEngine::handleBridgeMenu(int menuEvent) {
 	case kBridgeChekovWeapons: // Chekov, weapons
 		_enterpriseState.weapons = !_enterpriseState.weapons;
 		showTextbox(chekovHeader, _enterpriseState.weapons ? armWeaponsText : disarmWeaponsText, 196, 116, 176, 0);
-		// TODO: weapons
+		setBridgeMouseCursor();
 		break;
 	case kBridgeChekovRepairShields:
 	case kBridgeChekovRepairPhasers:
diff --git a/engines/startrek/startrek.h b/engines/startrek/startrek.h
index 2ef24a3d02..3747a536e2 100644
--- a/engines/startrek/startrek.h
+++ b/engines/startrek/startrek.h
@@ -257,6 +257,9 @@ public:
 	void loadBridgeActors();
 	void cleanupBridge();
 	void runBridge();
+	void setBridgeMouseCursor();
+	void playBridgeSequence(int sequenceId);
+	void showBridgeScreenTalkerWithMessage(int textId, Common::String talkerHeader, Common::String talkerId);
 	void handleBridgeEvents();
 	void handleBridgeComputer();
 




More information about the Scummvm-git-logs mailing list