[Scummvm-git-logs] scummvm master -> e2f35837381bdd4d0d85c87de5eab876d35e42bc
antoniou79
a.antoniou79 at gmail.com
Sun Jun 27 12:00:41 UTC 2021
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
e2f3583738 BLADERUNNER: RESTORED CONTENT: Crazylegs letter to Dektora
Commit: e2f35837381bdd4d0d85c87de5eab876d35e42bc
https://github.com/scummvm/scummvm/commit/e2f35837381bdd4d0d85c87de5eab876d35e42bc
Author: antoniou79 (a.antoniou79 at gmail.com)
Date: 2021-06-27T15:00:32+03:00
Commit Message:
BLADERUNNER: RESTORED CONTENT: Crazylegs letter to Dektora
CrazysInvolvement clue, connected to the ADVERTISEMENT (cut) dialogue option
Changed paths:
engines/bladerunner/game_constants.h
engines/bladerunner/music.h
engines/bladerunner/script/init_script.cpp
engines/bladerunner/script/kia_script.cpp
engines/bladerunner/script/scene/hf05.cpp
engines/bladerunner/script/scene/nr05.cpp
engines/bladerunner/script/scene/nr07.cpp
engines/bladerunner/ui/kia.cpp
diff --git a/engines/bladerunner/game_constants.h b/engines/bladerunner/game_constants.h
index 71386a9173..c23e981486 100644
--- a/engines/bladerunner/game_constants.h
+++ b/engines/bladerunner/game_constants.h
@@ -339,7 +339,7 @@ enum Clues {
kClueCarWasStolen = 233, // UNUSED
kClueGrigoriansResponse1 = 234, // UNUSED
kClueGrigoriansResponse2 = 235, // UNUSED
- kClueCrazysInvolvement = 236, // (Intangible) - UNOBTAINED - Not checked in KIA - Has weight for Crazylegs
+ kClueCrazysInvolvement = 236, // Restored content - Object -- Original - (Intangible) - UNOBTAINED - Not checked in KIA - Has weight for Crazylegs
kClueGrigoriansResources = 237, // (Intangible) - UNOBTAINED - Not checked in KIA - Checked for Crazylegs dialogue
kClueMcCoyPulledAGun = 238, // UNUSED - TODO: Was this for Crazylegs being offended?
kClueMcCoyIsStupid = 239, // (Intangible) - Obtained by Leary - Not checked in KIA - Checked in Steele, Clovis, Leary AI - added to many actors DBs
@@ -2701,7 +2701,7 @@ enum GameModelAnimations {
kModelAnimationFolderInKIA = 946,
kModelAnimationGoldfish = 947,
kModelAnimationFolder = 948,
-// kModelAnimationLetter = 949, // UNUSED - Could this be used for Crazylegs Advertisement?
+ kModelAnimationLetter = 949, // Restored Content - Used for Crazylegs Note in his Advertisement pamphlet
kModelAnimationGarterSnake = 950,
kModelAnimationLichenDogWrapper = 951,
kModelAnimationLicensePlate = 952,
@@ -3601,7 +3601,7 @@ enum SFXSounds {
kSfxTARGUP4 = 32,
kSfxTARGUP5 = 33,
kSfxTARGUP6 = 34,
- kSfxTARGUP7 = 35, // unused
+ kSfxTARGUP7 = 35, // unused - similar to TARGUP6, bit more sustained
kSfxTRGSPIN1 = 36, // unused
kSfxTRGSPIN2 = 37, // unused
kSfxTRGSPIN3 = 38, // unused
@@ -3882,9 +3882,9 @@ enum SFXSounds {
kSfxMONKEY1 = 313,
kSfxMONKEY2 = 314, // unused
kSfxRUNAWAY1 = 315,
- kSfxTRPDOOR1 = 316,
- kSfxTRPDORO = 317, // unused
- kSfxTRPDORC = 318, // unused
+ kSfxTRPDOOR1 = 316, // open and shut
+ kSfxTRPDORO = 317, // unused - open
+ kSfxTRPDORC = 318, // unused - shut
kSfxAUDLAFF1 = 319,
kSfxAUDLAFF2 = 320,
kSfxAUDLAFF3 = 321,
@@ -4101,24 +4101,24 @@ enum SFXSounds {
kSfxGUNM3A = 532,
kSfxGUNM3B = 533,
kSfxGUNM3C = 534,
- kSfxGUNH1AR = 535, // unused
- kSfxGUNH1BR = 536, // unused
- kSfxGUNH1CR = 537, // unused
- kSfxGUNH2AR = 538, // unused
- kSfxGUNH2BR = 539, // unused
- kSfxGUNH2CR = 540, // unused
- kSfxGUNH3AR = 541, // unused
- kSfxGUNH3BR = 542, // unused
- kSfxGUNH3CR = 543, // unused
- kSfxGUNM1AR = 544, // unused
- kSfxGUNM1BR = 545, // unused
- kSfxGUNM1CR = 546, // unused
- kSfxGUNM2AR = 547, // unused
- kSfxGUNM2BR = 548, // unused
- kSfxGUNM2CR = 549, // unused
- kSfxGUNM3AR = 550, // unused
- kSfxGUNM3BR = 551, // unused
- kSfxGUNM3CR = 552, // unused
+ kSfxGUNH1AR = 535, // unused - adds reverb to 517
+ kSfxGUNH1BR = 536, // unused - adds reverb to 518
+ kSfxGUNH1CR = 537, // unused - adds reverb to 519
+ kSfxGUNH2AR = 538, // unused - adds reverb to 520
+ kSfxGUNH2BR = 539, // unused - adds reverb to 521
+ kSfxGUNH2CR = 540, // unused - adds reverb to 522
+ kSfxGUNH3AR = 541, // unused - adds reverb to 523
+ kSfxGUNH3BR = 542, // unused - adds reverb to 524
+ kSfxGUNH3CR = 543, // unused - adds reverb to 525
+ kSfxGUNM1AR = 544, // unused - adds reverb to 526
+ kSfxGUNM1BR = 545, // unused - adds reverb to 527
+ kSfxGUNM1CR = 546, // unused - adds reverb to 528
+ kSfxGUNM2AR = 547, // unused - adds reverb to 529
+ kSfxGUNM2BR = 548, // unused - adds reverb to 530
+ kSfxGUNM2CR = 549, // unused - adds reverb to 531
+ kSfxGUNM3AR = 550, // unused - adds reverb to 532
+ kSfxGUNM3BR = 551, // unused - adds reverb to 533
+ kSfxGUNM3CR = 552, // unused - adds reverb to 534
kSfxGARBAGE = 553,
kSfxBELLTONE = 554, // unused
kSfxMALEHURT = 555,
diff --git a/engines/bladerunner/music.h b/engines/bladerunner/music.h
index c8b9754bf4..5b1dfd011e 100644
--- a/engines/bladerunner/music.h
+++ b/engines/bladerunner/music.h
@@ -37,7 +37,7 @@ class Music {
struct Track {
Common::String name;
int volume; // A value between 0 and 100 - It is the set volume for the track regardless of fadeIn and fadeOut transitions
- int pan; // A value between -100 and 100 (right?) (0 is center) - It is the set pan/balance for the track regardless of any ongoing adjustments
+ int pan; // A value between -100 (left) and 100 (right) (0 is center) - It is the set pan/balance for the track regardless of any ongoing adjustments
int32 timeFadeInSeconds; // how long will it take for the track to reach target volume (in seconds)
int32 timePlaySeconds; // how long the track will play before starting fading out (in seconds) - uses timeFadeOutSeconds for fadeout
// -1: Special value for playing the whole track
diff --git a/engines/bladerunner/script/init_script.cpp b/engines/bladerunner/script/init_script.cpp
index 2ed1397d5e..83f6178f52 100644
--- a/engines/bladerunner/script/init_script.cpp
+++ b/engines/bladerunner/script/init_script.cpp
@@ -2623,6 +2623,7 @@ void InitScript::Init_CDB() {
CDB_Set_Clue_Asset_Type(kClueDektoraInterview3, kClueTypeAudioRecording);
CDB_Set_Clue_Asset_Type(kClueDektorasCard, kClueTypeObject);
CDB_Set_Clue_Asset_Type(kClueGrigoriansNote, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueCrazysInvolvement, kClueTypeObject); // Restored Content
CDB_Set_Clue_Asset_Type(kClueCollectionReceipt, kClueTypeObject);
CDB_Set_Clue_Asset_Type(kClueSpecialIngredient, kClueTypeAudioRecording);
CDB_Set_Clue_Asset_Type(kClueStolenCheese, kClueTypeAudioRecording);
diff --git a/engines/bladerunner/script/kia_script.cpp b/engines/bladerunner/script/kia_script.cpp
index 27648f76d0..1a342aa25e 100644
--- a/engines/bladerunner/script/kia_script.cpp
+++ b/engines/bladerunner/script/kia_script.cpp
@@ -484,6 +484,10 @@ void KIAScript::SCRIPT_KIA_DLL_Play_Clue_Asset_Script(int notUsed, int clueId) {
case kClueDektorasCard:
KIA_Play_Slice_Model(kModelAnimationDektorasCard);
break;
+ case kClueCrazysInvolvement:
+ // RESTORED CONTENT
+ KIA_Play_Slice_Model(kModelAnimationLetter);
+ break;
case kClueGrigoriansNote:
KIA_Play_Slice_Model(kModelAnimationGrigoriansNote);
break;
diff --git a/engines/bladerunner/script/scene/hf05.cpp b/engines/bladerunner/script/scene/hf05.cpp
index ad4c5171c4..46d3174a36 100644
--- a/engines/bladerunner/script/scene/hf05.cpp
+++ b/engines/bladerunner/script/scene/hf05.cpp
@@ -393,11 +393,23 @@ void SceneScriptHF05::talkWithCrazyLegs2() {
void SceneScriptHF05::dialogueWithCrazylegs1() {
Dialogue_Menu_Clear_List();
+#if BLADERUNNER_ORIGINAL_BUGS
if (Actor_Clue_Query(kActorMcCoy, kClueGrigoriansNote) // cut feature? there is no way how to obtain this clue
&& Global_Variable_Query(kVariableChapter) == 3
) {
DM_Add_To_List_Never_Repeat_Once_Selected(1180, 3, 6, 7); // ADVERTISEMENT
}
+#else
+ if (Actor_Clue_Query(kActorMcCoy, kClueCrazysInvolvement)
+ && Global_Variable_Query(kVariableChapter) == 3
+ ) {
+ // This dialogue point does not talk about Grigorian's Note
+ // but rather a Note that CrazyLegs wrote on one of his flyers
+ // kClueCrazysInvolvement is only acquired in _cutContent (Restored Content) mode
+ // so no need to add that extra check in the if clause.
+ DM_Add_To_List_Never_Repeat_Once_Selected(1180, 3, 6, 7); // ADVERTISEMENT
+ }
+#endif // BLADERUNNER_ORIGINAL_BUGS
if (Actor_Clue_Query(kActorMcCoy, kClueCrazylegsInterview1)) {
// kClueCrazylegsInterview1 is acquired (after bug fix)
// only when Dektora has bought the car (kClueCarRegistration1)
@@ -456,8 +468,16 @@ void SceneScriptHF05::dialogueWithCrazylegs1() {
switch (answer) {
case 1180: // ADVERTISEMENT
Actor_Says(kActorMcCoy, 1890, 23);
+ if (_vm->_cutContent) {
+ // McCoy shows the sales pamphlet (from Dektora's Vanity drawer) to CrazyLegs
+ Item_Pickup_Spin_Effect_From_Actor(kModelAnimationTyrellSalesPamphlet, kActorMcCoy, 0, 0);
+ }
Actor_Says(kActorCrazylegs, 510, kAnimationModeTalk);
Actor_Says(kActorMcCoy, 1920, 23);
+ if (_vm->_cutContent) {
+ // McCoy shows the note he found inside the sales pamphlet (from Dektora's Vanity drawer) to CrazyLegs
+ Item_Pickup_Spin_Effect_From_Actor(kModelAnimationLetter, kActorMcCoy, 0, 0);
+ }
Actor_Says(kActorMcCoy, 1925, kAnimationModeTalk);
Actor_Says(kActorCrazylegs, 530, 12);
Actor_Says(kActorMcCoy, 1930, 18);
diff --git a/engines/bladerunner/script/scene/nr05.cpp b/engines/bladerunner/script/scene/nr05.cpp
index e9ffa251cd..ceac79068d 100644
--- a/engines/bladerunner/script/scene/nr05.cpp
+++ b/engines/bladerunner/script/scene/nr05.cpp
@@ -363,6 +363,7 @@ void SceneScriptNR05::talkToEarlyQ() {
Actor_Modify_Friendliness_To_Other(kActorEarlyQ, kActorMcCoy, -1);
if (Actor_Clue_Query(kActorMcCoy, kClueGrigoriansNote)) { // cut content? this clue is unobtanium
// TODO why is Grigorian's Note needed here, for EarlyQ to reveal who Hecuba is?
+ // TODO could CrazysInvolvement also do here?
// maybe another clue should be required in its place or some additional ones?
Actor_Says(kActorEarlyQ, 580, 12);
Actor_Says(kActorMcCoy, 3560, 13);
diff --git a/engines/bladerunner/script/scene/nr07.cpp b/engines/bladerunner/script/scene/nr07.cpp
index fac0bced1c..ec335b4fd4 100644
--- a/engines/bladerunner/script/scene/nr07.cpp
+++ b/engines/bladerunner/script/scene/nr07.cpp
@@ -35,6 +35,17 @@ void SceneScriptNR07::InitializeScene() {
void SceneScriptNR07::SceneLoaded() {
Obstacle_Object("VANITY", true);
Clickable_Object("VASE");
+
+ if (_vm->_cutContent
+ && Global_Variable_Query(kVariableChapter) < 4) {
+ // The car is only bought by Reps from CrazyLegs
+ // if Dektora is a Replicant (so she will have the note from CrazyLegs)
+ // or if Dektora is human and Gordo is also human (in which case, there'll be no note in the drawer)
+ // We add the region in any case - on Restored Content mode
+ // to indicate there might be something of interest there,
+ // albeit not all playthroughs will have the note in there.
+ Scene_2D_Region_Add(0, 501, 381, 522, 466);
+ }
}
bool SceneScriptNR07::MouseClick(int x, int y) {
@@ -148,6 +159,45 @@ bool SceneScriptNR07::ClickedOnExit(int exitId) {
}
bool SceneScriptNR07::ClickedOn2DRegion(int region) {
+ if (_vm->_cutContent
+ && region == 0) {
+ if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, -134.5f, -73.35f, 43.98f, 4, true, false, false)) {
+ Player_Loses_Control();
+ Actor_Face_Object(kActorMcCoy, "VANITY", true);
+ if (Actor_Query_Is_In_Current_Set(kActorDektora)) {
+ Actor_Modify_Friendliness_To_Other(kActorDektora, kActorMcCoy, -2);
+ Actor_Says(kActorDektora, 560, 31); // Please don't touch that. It's private.
+ Actor_Says(kActorMcCoy, 8525, 19); // Hmph.
+ } else {
+ if (Game_Flag_Query(kFlagDektoraIsReplicant)) {
+ if (Actor_Clue_Query(kActorMcCoy, kClueCrazysInvolvement)) {
+ Actor_Says(kActorMcCoy, 8580, 12); // Nothing else there
+ } else {
+ Sound_Play(kSfxDRAWER1, 90, 85, 85, 50);
+ Delay(700);
+ Actor_Clue_Acquire(kActorMcCoy, kClueCrazysInvolvement, false, -1);
+ // McCoy picks up a sales brochure (it's CrazyLeg's -- but the model is the same as the Tyrell's Pamphlet)
+ Item_Pickup_Spin_Effect(kModelAnimationTyrellSalesPamphlet, 508, 401);
+ // McCoy finds something inside the brochure - CrazyLeg's note to the Replicants
+ // Logic is similar to HC03 (finding photos inside Izo's camera)
+ Actor_Voice_Over(3690, kActorVoiceOver); // Hmm
+ Delay(1200);
+ Item_Pickup_Spin_Effect(kModelAnimationLetter, 508, 401);
+ Actor_Says(kActorMcCoy, 6975, 12); // Interesting
+ // We don't remove the region after picking the clue
+ // McCoy will just point out that there's nothing more there to find.
+ // (Saves us from using up a flag and having to write extra code)
+ }
+ } else {
+ Sound_Play(kSfxDRAWER1, 90, 85, 85, 50);
+ Delay(700);
+ Actor_Voice_Over(3700, kActorVoiceOver); // Nothing
+ }
+ }
+ Player_Gains_Control();
+ }
+ return true;
+ }
return false;
}
diff --git a/engines/bladerunner/ui/kia.cpp b/engines/bladerunner/ui/kia.cpp
index fe2d3a61d0..b957d33325 100644
--- a/engines/bladerunner/ui/kia.cpp
+++ b/engines/bladerunner/ui/kia.cpp
@@ -1431,6 +1431,8 @@ void KIA::playObjectDescription() {
case kModelAnimationDektorasCard:
playActorDialogue(kActorMcCoy, 8835);
break;
+ case kModelAnimationLetter:
+ // fall through
case kModelAnimationGrigoriansNote:
playActorDialogue(kActorMcCoy, 8840);
break;
More information about the Scummvm-git-logs
mailing list