[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