aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Kohaut2018-01-28 20:59:12 +0100
committerPeter Kohaut2018-01-29 18:32:09 +0100
commit0c930b06ed7030686c7774f18126b3d37a678d60 (patch)
tree04322a848f17c3d8fc4ced7e89e6ce6dbf73dcb3
parentfa28602abffd47988dd7d797e4c48d9e3faf47ae (diff)
downloadscummvm-rg350-0c930b06ed7030686c7774f18126b3d37a678d60.tar.gz
scummvm-rg350-0c930b06ed7030686c7774f18126b3d37a678d60.tar.bz2
scummvm-rg350-0c930b06ed7030686c7774f18126b3d37a678d60.zip
BLADERUNNER: Added KIA interfaces
Crimes interface done Suspects interface done Added some game constants Fixed font rendering for other languages Fixed anoying clang warning
-rw-r--r--engines/bladerunner/actor_clues.cpp4
-rw-r--r--engines/bladerunner/bladerunner.cpp4
-rw-r--r--engines/bladerunner/bladerunner.h2
-rw-r--r--engines/bladerunner/font.cpp8
-rw-r--r--engines/bladerunner/font.h2
-rw-r--r--engines/bladerunner/game_constants.h15
-rw-r--r--engines/bladerunner/module.mk1
-rw-r--r--engines/bladerunner/script/init.cpp754
-rw-r--r--engines/bladerunner/script/scene/rc01.cpp8
-rw-r--r--engines/bladerunner/suspects_database.cpp42
-rw-r--r--engines/bladerunner/suspects_database.h54
-rw-r--r--engines/bladerunner/ui/kia.cpp14
-rw-r--r--engines/bladerunner/ui/kia_section_base.cpp2
-rw-r--r--engines/bladerunner/ui/kia_section_base.h2
-rw-r--r--engines/bladerunner/ui/kia_section_clues.cpp24
-rw-r--r--engines/bladerunner/ui/kia_section_clues.h3
-rw-r--r--engines/bladerunner/ui/kia_section_crimes.cpp449
-rw-r--r--engines/bladerunner/ui/kia_section_crimes.h88
-rw-r--r--engines/bladerunner/ui/kia_section_suspects.cpp555
-rw-r--r--engines/bladerunner/ui/kia_section_suspects.h93
-rw-r--r--engines/bladerunner/ui/spinner.cpp85
-rw-r--r--engines/bladerunner/ui/spinner.h8
-rw-r--r--engines/bladerunner/vqa_decoder.h1
-rw-r--r--engines/bladerunner/vqa_player.h2
24 files changed, 1701 insertions, 519 deletions
diff --git a/engines/bladerunner/actor_clues.cpp b/engines/bladerunner/actor_clues.cpp
index 4e4c5d04bf..39fbc77d4e 100644
--- a/engines/bladerunner/actor_clues.cpp
+++ b/engines/bladerunner/actor_clues.cpp
@@ -80,7 +80,11 @@ bool ActorClues::isAcquired(int clueId) const {
if (clueIndex == -1) {
return false;
}
+#if BLADERUNNER_DEBUG_GAME
+ return true;
+#else
return _clues[clueIndex].flags & 0x01;
+#endif
}
int ActorClues::getFromActorId(int clueId) const {
diff --git a/engines/bladerunner/bladerunner.cpp b/engines/bladerunner/bladerunner.cpp
index db2d3e8057..27b770463b 100644
--- a/engines/bladerunner/bladerunner.cpp
+++ b/engines/bladerunner/bladerunner.cpp
@@ -143,7 +143,11 @@ Common::Error BladeRunnerEngine::run() {
return Common::Error(Common::kUnknownError, "Failed to initialize resources");
}
+#if BLADERUNNER_DEBUG_GAME
+ {
+#else
if (warnUserAboutUnsupportedGame()) {
+#endif
init2();
/* TODO: Check for save games and enter KIA */
diff --git a/engines/bladerunner/bladerunner.h b/engines/bladerunner/bladerunner.h
index 01636e8949..06d5f7b194 100644
--- a/engines/bladerunner/bladerunner.h
+++ b/engines/bladerunner/bladerunner.h
@@ -33,8 +33,10 @@
#include "graphics/surface.h"
+// remove these when game is playable
#define BLADERUNNER_DEBUG_RENDERING 0
#define BLADERUNNER_DEBUG_CONSOLE 0
+#define BLADERUNNER_DEBUG_GAME 0
namespace Common {
struct Event;
diff --git a/engines/bladerunner/font.cpp b/engines/bladerunner/font.cpp
index 3af8fc2f7f..5ae1c8eedc 100644
--- a/engines/bladerunner/font.cpp
+++ b/engines/bladerunner/font.cpp
@@ -104,7 +104,7 @@ void Font::draw(const Common::String &text, Graphics::Surface &surface, int x, i
x = CLIP(x, 0, _screenWidth - getTextWidth(text) + 1);
y = CLIP(y, 0, _screenHeight - _maxHeight);
- const char *character = text.c_str();
+ const uint8 *character = (const uint8 *)text.c_str();
while (*character != 0) {
drawCharacter(*character, surface, x, y);
x += _spacing1 + _characters[*character + 1].width;
@@ -121,7 +121,7 @@ void Font::drawColor(const Common::String &text, Graphics::Surface &surface, int
}
int Font::getTextWidth(const Common::String &text) const {
- const char *character = text.c_str();
+ const uint8 *character = (const uint8 *)text.c_str();
if (!_data) {
return 0;
@@ -168,8 +168,8 @@ void Font::replaceColor(uint16 oldColor, uint16 newColor) {
}
}
-void Font::drawCharacter(const char character, Graphics::Surface &surface, int x, int y) const {
- uint8 characterIndex = (uint8)character + 1;
+void Font::drawCharacter(const uint8 character, Graphics::Surface &surface, int x, int y) const {
+ uint8 characterIndex = character + 1;
if (x < 0 || x >= _screenWidth || y < 0 || y >= _screenHeight || !_data || characterIndex >= _characterCount) {
return;
}
diff --git a/engines/bladerunner/font.h b/engines/bladerunner/font.h
index e51a3deb2d..9302520153 100644
--- a/engines/bladerunner/font.h
+++ b/engines/bladerunner/font.h
@@ -77,7 +77,7 @@ private:
void reset();
void replaceColor(uint16 oldColor, uint16 newColor);
- void drawCharacter(const char character, Graphics::Surface &surface, int x, int y) const;
+ void drawCharacter(const uint8 character, Graphics::Surface &surface, int x, int y) const;
};
} // End of namespace BladeRunner
diff --git a/engines/bladerunner/game_constants.h b/engines/bladerunner/game_constants.h
index 043a07ff91..9915bc9e1d 100644
--- a/engines/bladerunner/game_constants.h
+++ b/engines/bladerunner/game_constants.h
@@ -394,12 +394,25 @@ enum Clues {
};
enum ClueTypes {
- kClueTypePhotograph = 0,
+ kClueTypeIntangible = -1,
+ kClueTypePhotograph = 0,
kClueTypeVideoClip = 1,
kClueTypeAudioRecording = 2,
kClueTypeObject = 3
};
+enum Suspects {
+ kSuspectSadik = 0,
+ kSuspectClovis = 1,
+ kSuspectZuben = 2,
+ kSuspectLucy = 3,
+ kSuspectDekora = 4,
+ kSuspectGordo = 5,
+ kSuspectIzo = 6,
+ kSuspectMcCoy = 7,
+ kSuspectGuzza = 8
+};
+
enum Crimes {
kCrimeAnimalMurder = 0,
kCrimeEisendullerMurder = 1,
diff --git a/engines/bladerunner/module.mk b/engines/bladerunner/module.mk
index 6aadb972db..e74c836108 100644
--- a/engines/bladerunner/module.mk
+++ b/engines/bladerunner/module.mk
@@ -183,6 +183,7 @@ MODULE_OBJS = \
ui/kia_section_crimes.o \
ui/kia_section_help.o \
ui/kia_section_settings.o \
+ ui/kia_section_suspects.o \
ui/kia_shapes.o \
ui/spinner.o \
ui/ui_check_box.o \
diff --git a/engines/bladerunner/script/init.cpp b/engines/bladerunner/script/init.cpp
index ed1140582d..76ade879ad 100644
--- a/engines/bladerunner/script/init.cpp
+++ b/engines/bladerunner/script/init.cpp
@@ -72,8 +72,9 @@ void ScriptInit::Init_Globals() {
}
void ScriptInit::Init_Game_Flags() {
- for (int i = 0; i != 730; ++i)
+ for (int i = 0; i != 730; ++i) {
Game_Flag_Reset(i);
+ }
if (Random_Query(1, 2) == 1) {
Game_Flag_Set(44);
@@ -2186,176 +2187,184 @@ void ScriptInit::Init_World_Waypoints() {
}
void ScriptInit::Init_SDB() {
- SDB_Set_Actor(0, kActorSadik);
- SDB_Set_Sex(0, 1);
- SDB_Add_MO_Clue(0, kClueCrystalsCase);
- SDB_Add_MO_Clue(0, kClueDetonatorWire);
- SDB_Add_MO_Clue(0, kClueSadiksGun);
- SDB_Add_MO_Clue(0, kCluePlasticExplosive);
- SDB_Add_Whereabouts_Clue(0, kClueTyrellSecurity);
- SDB_Add_Whereabouts_Clue(0, kClueKingstonKitchenBox1);
- SDB_Add_Whereabouts_Clue(0, kClueDragonflyEarring);
- SDB_Add_Whereabouts_Clue(0, kClueChewInterview);
- SDB_Add_Whereabouts_Clue(0, kClueHomelessManInterview1);
- SDB_Add_Replicant_Clue(0, kClueDetonatorWire);
- SDB_Add_Replicant_Clue(0, kClueCrystalsCase);
- SDB_Add_Replicant_Clue(0, kClueMorajiInterview);
- SDB_Add_Replicant_Clue(0, kClueAttemptedFileAccess);
- SDB_Add_Replicant_Clue(0, kClueExpertBomber);
- SDB_Add_Replicant_Clue(0, kClueRachaelInterview);
- SDB_Add_Replicant_Clue(0, kClueCrystalsCase);
- SDB_Add_Non_Replicant_Clue(0, kClueStaggeredbyPunches);
- SDB_Add_Non_Replicant_Clue(0, kClueIzosWarning);
- SDB_Add_Non_Replicant_Clue(0, kClueAmateurBomber);
- SDB_Add_Other_Clue(0, kClueGrigorianInterviewB1);
- SDB_Add_Other_Clue(0, kClueGrigorianInterviewB2);
- SDB_Add_Other_Clue(0, kClueAct2Ended);
- SDB_Add_Other_Clue(0, kClueBombingSuspect);
- SDB_Add_Other_Clue(0, kClueSadikAtMoonbus);
- SDB_Add_Identity_Clue(0, kClueAct2Ended);
- SDB_Add_Photo_Clue(0, kClueBombingSuspect, 31);
- SDB_Add_Photo_Clue(0, kClueSadikAtMoonbus, 38);
- SDB_Set_Actor(1, kActorClovis);
- SDB_Set_Sex(1, 1);
- SDB_Add_MO_Clue(1, kClueShellCasings);
- SDB_Add_MO_Clue(1, kClueLabShellCasings);
- SDB_Add_Whereabouts_Clue(1, kClueDispatchHitAndRun);
- SDB_Add_Whereabouts_Clue(1, kClueRuncitersViewB);
- SDB_Add_Whereabouts_Clue(1, kClueChewInterview);
- SDB_Add_Replicant_Clue(1, kClueOfficersStatement);
- SDB_Add_Replicant_Clue(1, kClueDoorForced2);
- SDB_Add_Replicant_Clue(1, kClueMorajiInterview);
- SDB_Add_Replicant_Clue(1, kClueZubenTalksAboutLucy1);
- SDB_Add_Replicant_Clue(1, kClueZubenTalksAboutLucy2);
- SDB_Add_Replicant_Clue(1, kClueDektoraInterview4);
- SDB_Add_Other_Clue(1, kClueAnimalMurderSuspect);
- SDB_Add_Other_Clue(1, kClueGracefulFootprints);
- SDB_Add_Other_Clue(1, kClueIzosWarning);
- SDB_Add_Other_Clue(1, kClueAct2Ended);
- SDB_Add_Other_Clue(1, kClueClovisAtMoonbus);
- SDB_Add_Other_Clue(1, kClueAnimalMurderSuspect);
- SDB_Add_Other_Clue(1, kClueIzosFriend);
- SDB_Add_Other_Clue(1, kClueMilitaryBoots);
- SDB_Add_Identity_Clue(1, kClueIzosWarning);
- SDB_Add_Identity_Clue(1, kClueAct2Ended);
- SDB_Add_Identity_Clue(1, kClueDektoraInterview4);
- SDB_Add_Photo_Clue(1, kClueClovisAtMoonbus, 37);
- SDB_Add_Photo_Clue(1, kClueAnimalMurderSuspect, 7);
- SDB_Add_Photo_Clue(1, kClueIzosFriend, 25);
- SDB_Add_Photo_Clue(1, kClueMilitaryBoots, 8);
- SDB_Set_Actor(2, kActorZuben);
- SDB_Set_Sex(2, 1);
- SDB_Add_MO_Clue(2, kClueOfficersStatement);
- SDB_Add_MO_Clue(2, kClueLabCorpses);
- SDB_Add_Whereabouts_Clue(2, kClueDispatchHitAndRun);
- SDB_Add_Whereabouts_Clue(2, kClueRuncitersViewB);
- SDB_Add_Replicant_Clue(2, kClueOfficersStatement);
- SDB_Add_Replicant_Clue(2, kClueDoorForced2);
- SDB_Add_Replicant_Clue(2, kClueHowieLeeInterview);
- SDB_Add_Replicant_Clue(2, kClueZubenRunsAway);
- SDB_Add_Replicant_Clue(2, kClueZuben);
- SDB_Add_Replicant_Clue(2, kClueZubenTalksAboutLucy1);
- SDB_Add_Replicant_Clue(2, kClueZubenTalksAboutLucy2);
- SDB_Add_Non_Replicant_Clue(2, kClueLimpingFootprints);
- SDB_Add_Non_Replicant_Clue(2, kClueBigManLimping);
- SDB_Add_Non_Replicant_Clue(2, kClueZubensMotive);
- SDB_Add_Other_Clue(2, kClueCrowdInterviewA);
- SDB_Add_Other_Clue(2, kClueZubenInterview);
- SDB_Add_Other_Clue(2, kClueLucyInterview);
- SDB_Add_Identity_Clue(2, kClueHowieLeeInterview);
- SDB_Add_Identity_Clue(2, kClueZubenRunsAway);
- SDB_Add_Identity_Clue(2, kClueZubenInterview);
- SDB_Add_Identity_Clue(2, kClueLucyInterview);
- SDB_Add_Photo_Clue(2, kClueZuben, 33);
- SDB_Set_Actor(3, kActorLucy);
- SDB_Set_Sex(3, 0);
- SDB_Add_Whereabouts_Clue(3, kClueChopstickWrapper);
- SDB_Add_Whereabouts_Clue(3, kClueSushiMenu);
- SDB_Add_Whereabouts_Clue(3, kClueReferenceLetter);
- SDB_Add_Whereabouts_Clue(3, kClueRuncitersViewA);
- SDB_Add_Whereabouts_Clue(3, kClueHysteriaToken);
- SDB_Add_Whereabouts_Clue(3, kClueZubenInterview);
- SDB_Add_Replicant_Clue(3, kClueRunciterInterviewA);
- SDB_Add_Replicant_Clue(3, kClueRunciterInterviewB1);
- SDB_Add_Replicant_Clue(3, kClueVKLucyReplicant);
- SDB_Add_Replicant_Clue(3, kClueZubenTalksAboutLucy1);
- SDB_Add_Replicant_Clue(3, kClueDektoraInterview4);
- SDB_Add_Replicant_Clue(3, kClueRuncitersConfession1);
- SDB_Add_Non_Replicant_Clue(3, kClueToyDog);
- SDB_Add_Non_Replicant_Clue(3, kClueRagDoll);
- SDB_Add_Non_Replicant_Clue(3, kClueCandy);
- SDB_Add_Non_Replicant_Clue(3, kClueVKLucyHuman);
- SDB_Add_Non_Replicant_Clue(3, kClueZubenTalksAboutLucy2);
- SDB_Add_Other_Clue(3, kClueLucy);
- SDB_Add_Other_Clue(3, kClueCrowdInterviewA);
- SDB_Add_Identity_Clue(3, kClueRunciterInterviewA);
- SDB_Add_Identity_Clue(3, kClueDektoraInterview4);
- SDB_Add_Photo_Clue(3, kClueLucy, 5);
- SDB_Set_Actor(4, kActorDektora);
- SDB_Add_MO_Clue(4, kClueScorpions);
- SDB_Add_Replicant_Clue(4, kClueVKDektoraReplicant);
- SDB_Add_Replicant_Clue(4, kClueEarlyQInterview);
- SDB_Add_Replicant_Clue(4, kClueDragonflyBelt);
- SDB_Add_Replicant_Clue(4, kClueDektoraInterview4);
- SDB_Add_Non_Replicant_Clue(4, kClueVKDektoraHuman);
- SDB_Add_Non_Replicant_Clue(4, kClueDektoraInterview2);
- SDB_Add_Non_Replicant_Clue(4, kClueDektoraInterview3);
- SDB_Add_Non_Replicant_Clue(4, kClueDektorasCard);
- SDB_Add_Non_Replicant_Clue(4, kClueDektoraInterview1);
- SDB_Add_Other_Clue(4, kClueDragonflyBelt);
- SDB_Add_Other_Clue(4, kClueWomanInAnimoidRow);
- SDB_Add_Other_Clue(4, kClueChinaBar);
- SDB_Add_Other_Clue(4, kClueCarRegistration1);
- SDB_Add_Identity_Clue(4, kClueDektoraInterview2);
- SDB_Add_Identity_Clue(4, kClueDektoraInterview3);
- SDB_Add_Identity_Clue(4, kClueEarlyQInterview);
- SDB_Add_Photo_Clue(4, kClueWomanInAnimoidRow, 21);
- SDB_Add_Photo_Clue(4, kClueChinaBar, 19);
- SDB_Set_Actor(5, kActorGordo);
- SDB_Set_Sex(5, 1);
- SDB_Add_Whereabouts_Clue(5, kClueStolenCheese);
- SDB_Add_Identity_Clue(5, kClueGordoInterview1);
- SDB_Add_Identity_Clue(5, kClueGordoInterview2);
- SDB_Set_Actor(6, kActorIzo);
- SDB_Set_Sex(6, 1);
- SDB_Add_Whereabouts_Clue(6, kClueBobInterview1);
- SDB_Add_Whereabouts_Clue(6, kClueBobInterview2);
- SDB_Add_Whereabouts_Clue(6, kClueGrigorianInterviewB2);
- SDB_Add_Whereabouts_Clue(6, kClueHomelessManInterview1);
- SDB_Add_Replicant_Clue(6, kClueGogglesReplicantIssue);
- SDB_Add_Other_Clue(6, kClueGrigorianInterviewB1);
- SDB_Add_Other_Clue(6, kClueWeaponsCache);
- SDB_Add_Other_Clue(6, kClueFolder);
- SDB_Add_Other_Clue(6, kClueIzosStashRaided);
- SDB_Add_Other_Clue(6, kClueIzo);
- SDB_Add_Other_Clue(6, kCluePhotoOfMcCoy1);
- SDB_Add_Other_Clue(6, kCluePhotoOfMcCoy2);
- SDB_Add_Other_Clue(6, kClueRadiationGoggles);
- SDB_Add_Other_Clue(6, kClueIzoInterview);
- SDB_Add_Identity_Clue(6, kClueGrigorianInterviewB2);
- SDB_Add_Identity_Clue(6, kClueBobInterview1);
- SDB_Add_Identity_Clue(6, kClueBobInterview2);
- SDB_Add_Identity_Clue(6, kCluePhotoOfMcCoy1);
- SDB_Add_Identity_Clue(6, kCluePhotoOfMcCoy2);
- SDB_Add_Identity_Clue(6, kClueRadiationGoggles);
- SDB_Add_Identity_Clue(6, kClueIzoInterview);
- SDB_Add_Photo_Clue(6, kClueIzo, 26);
- SDB_Set_Actor(7, kActorMcCoy);
- SDB_Add_Replicant_Clue(7, kClueMcCoyAtMoonbus);
- SDB_Add_Other_Clue(7, kCluePhotoOfMcCoy1);
- SDB_Add_Other_Clue(7, kCluePhotoOfMcCoy2);
- SDB_Add_Identity_Clue(7, kClueMcCoyAtMoonbus);
- SDB_Add_Photo_Clue(7, kClueMcCoyAtMoonbus, 36);
- SDB_Add_Photo_Clue(7, kCluePhotoOfMcCoy1, 17);
- SDB_Add_Photo_Clue(7, kCluePhotoOfMcCoy2, 18);
- SDB_Set_Actor(8, kActorGuzza);
- SDB_Add_Other_Clue(8, kClueGuzza);
- SDB_Add_Other_Clue(8, kClueFolder);
- SDB_Add_Other_Clue(8, kClueGuzzaFramedMcCoy);
- SDB_Add_Identity_Clue(8, kClueGuzza);
- SDB_Add_Identity_Clue(8, kClueGuzzaFramedMcCoy);
- SDB_Add_Identity_Clue(8, kClueFolder);
- SDB_Add_Photo_Clue(8, kClueGuzza, 27);
+ SDB_Set_Actor(kSuspectSadik, kActorSadik);
+ SDB_Set_Sex(kSuspectSadik, 1);
+ SDB_Add_MO_Clue(kSuspectSadik, kClueCrystalsCase);
+ SDB_Add_MO_Clue(kSuspectSadik, kClueDetonatorWire);
+ SDB_Add_MO_Clue(kSuspectSadik, kClueSadiksGun);
+ SDB_Add_MO_Clue(kSuspectSadik, kCluePlasticExplosive);
+ SDB_Add_Whereabouts_Clue(kSuspectSadik, kClueTyrellSecurity);
+ SDB_Add_Whereabouts_Clue(kSuspectSadik, kClueKingstonKitchenBox1);
+ SDB_Add_Whereabouts_Clue(kSuspectSadik, kClueDragonflyEarring);
+ SDB_Add_Whereabouts_Clue(kSuspectSadik, kClueChewInterview);
+ SDB_Add_Whereabouts_Clue(kSuspectSadik, kClueHomelessManInterview1);
+ SDB_Add_Replicant_Clue(kSuspectSadik, kClueDetonatorWire);
+ SDB_Add_Replicant_Clue(kSuspectSadik, kClueCrystalsCase);
+ SDB_Add_Replicant_Clue(kSuspectSadik, kClueMorajiInterview);
+ SDB_Add_Replicant_Clue(kSuspectSadik, kClueAttemptedFileAccess);
+ SDB_Add_Replicant_Clue(kSuspectSadik, kClueExpertBomber);
+ SDB_Add_Replicant_Clue(kSuspectSadik, kClueRachaelInterview);
+ SDB_Add_Replicant_Clue(kSuspectSadik, kClueCrystalsCase);
+ SDB_Add_Non_Replicant_Clue(kSuspectSadik, kClueStaggeredbyPunches);
+ SDB_Add_Non_Replicant_Clue(kSuspectSadik, kClueIzosWarning);
+ SDB_Add_Non_Replicant_Clue(kSuspectSadik, kClueAmateurBomber);
+ SDB_Add_Other_Clue(kSuspectSadik, kClueGrigorianInterviewB1);
+ SDB_Add_Other_Clue(kSuspectSadik, kClueGrigorianInterviewB2);
+ SDB_Add_Other_Clue(kSuspectSadik, kClueAct2Ended);
+ SDB_Add_Other_Clue(kSuspectSadik, kClueBombingSuspect);
+ SDB_Add_Other_Clue(kSuspectSadik, kClueSadikAtMoonbus);
+ SDB_Add_Identity_Clue(kSuspectSadik, kClueAct2Ended);
+ SDB_Add_Photo_Clue(kSuspectSadik, kClueBombingSuspect, 31);
+ SDB_Add_Photo_Clue(kSuspectSadik, kClueSadikAtMoonbus, 38);
+
+ SDB_Set_Actor(kSuspectClovis, kActorClovis);
+ SDB_Set_Sex(kSuspectClovis, 1);
+ SDB_Add_MO_Clue(kSuspectClovis, kClueShellCasings);
+ SDB_Add_MO_Clue(kSuspectClovis, kClueLabShellCasings);
+ SDB_Add_Whereabouts_Clue(kSuspectClovis, kClueDispatchHitAndRun);
+ SDB_Add_Whereabouts_Clue(kSuspectClovis, kClueRuncitersViewB);
+ SDB_Add_Whereabouts_Clue(kSuspectClovis, kClueChewInterview);
+ SDB_Add_Replicant_Clue(kSuspectClovis, kClueOfficersStatement);
+ SDB_Add_Replicant_Clue(kSuspectClovis, kClueDoorForced2);
+ SDB_Add_Replicant_Clue(kSuspectClovis, kClueMorajiInterview);
+ SDB_Add_Replicant_Clue(kSuspectClovis, kClueZubenTalksAboutLucy1);
+ SDB_Add_Replicant_Clue(kSuspectClovis, kClueZubenTalksAboutLucy2);
+ SDB_Add_Replicant_Clue(kSuspectClovis, kClueDektoraInterview4);
+ SDB_Add_Other_Clue(kSuspectClovis, kClueAnimalMurderSuspect);
+ SDB_Add_Other_Clue(kSuspectClovis, kClueGracefulFootprints);
+ SDB_Add_Other_Clue(kSuspectClovis, kClueIzosWarning);
+ SDB_Add_Other_Clue(kSuspectClovis, kClueAct2Ended);
+ SDB_Add_Other_Clue(kSuspectClovis, kClueClovisAtMoonbus);
+ SDB_Add_Other_Clue(kSuspectClovis, kClueAnimalMurderSuspect);
+ SDB_Add_Other_Clue(kSuspectClovis, kClueIzosFriend);
+ SDB_Add_Other_Clue(kSuspectClovis, kClueMilitaryBoots);
+ SDB_Add_Identity_Clue(kSuspectClovis, kClueIzosWarning);
+ SDB_Add_Identity_Clue(kSuspectClovis, kClueAct2Ended);
+ SDB_Add_Identity_Clue(kSuspectClovis, kClueDektoraInterview4);
+ SDB_Add_Photo_Clue(kSuspectClovis, kClueClovisAtMoonbus, 37);
+ SDB_Add_Photo_Clue(kSuspectClovis, kClueAnimalMurderSuspect, 7);
+ SDB_Add_Photo_Clue(kSuspectClovis, kClueIzosFriend, 25);
+ SDB_Add_Photo_Clue(kSuspectClovis, kClueMilitaryBoots, 8);
+
+ SDB_Set_Actor(kSuspectZuben, kActorZuben);
+ SDB_Set_Sex(kSuspectZuben, 1);
+ SDB_Add_MO_Clue(kSuspectZuben, kClueOfficersStatement);
+ SDB_Add_MO_Clue(kSuspectZuben, kClueLabCorpses);
+ SDB_Add_Whereabouts_Clue(kSuspectZuben, kClueDispatchHitAndRun);
+ SDB_Add_Whereabouts_Clue(kSuspectZuben, kClueRuncitersViewB);
+ SDB_Add_Replicant_Clue(kSuspectZuben, kClueOfficersStatement);
+ SDB_Add_Replicant_Clue(kSuspectZuben, kClueDoorForced2);
+ SDB_Add_Replicant_Clue(kSuspectZuben, kClueHowieLeeInterview);
+ SDB_Add_Replicant_Clue(kSuspectZuben, kClueZubenRunsAway);
+ SDB_Add_Replicant_Clue(kSuspectZuben, kClueZuben);
+ SDB_Add_Replicant_Clue(kSuspectZuben, kClueZubenTalksAboutLucy1);
+ SDB_Add_Replicant_Clue(kSuspectZuben, kClueZubenTalksAboutLucy2);
+ SDB_Add_Non_Replicant_Clue(kSuspectZuben, kClueLimpingFootprints);
+ SDB_Add_Non_Replicant_Clue(kSuspectZuben, kClueBigManLimping);
+ SDB_Add_Non_Replicant_Clue(kSuspectZuben, kClueZubensMotive);
+ SDB_Add_Other_Clue(kSuspectZuben, kClueCrowdInterviewA);
+ SDB_Add_Other_Clue(kSuspectZuben, kClueZubenInterview);
+ SDB_Add_Other_Clue(kSuspectZuben, kClueLucyInterview);
+ SDB_Add_Identity_Clue(kSuspectZuben, kClueHowieLeeInterview);
+ SDB_Add_Identity_Clue(kSuspectZuben, kClueZubenRunsAway);
+ SDB_Add_Identity_Clue(kSuspectZuben, kClueZubenInterview);
+ SDB_Add_Identity_Clue(kSuspectZuben, kClueLucyInterview);
+ SDB_Add_Photo_Clue(kSuspectZuben, kClueZuben, 33);
+
+ SDB_Set_Actor(kSuspectLucy, kActorLucy);
+ SDB_Set_Sex(kSuspectLucy, 0);
+ SDB_Add_Whereabouts_Clue(kSuspectLucy, kClueChopstickWrapper);
+ SDB_Add_Whereabouts_Clue(kSuspectLucy, kClueSushiMenu);
+ SDB_Add_Whereabouts_Clue(kSuspectLucy, kClueReferenceLetter);
+ SDB_Add_Whereabouts_Clue(kSuspectLucy, kClueRuncitersViewA);
+ SDB_Add_Whereabouts_Clue(kSuspectLucy, kClueHysteriaToken);
+ SDB_Add_Whereabouts_Clue(kSuspectLucy, kClueZubenInterview);
+ SDB_Add_Replicant_Clue(kSuspectLucy, kClueRunciterInterviewA);
+ SDB_Add_Replicant_Clue(kSuspectLucy, kClueRunciterInterviewB1);
+ SDB_Add_Replicant_Clue(kSuspectLucy, kClueVKLucyReplicant);
+ SDB_Add_Replicant_Clue(kSuspectLucy, kClueZubenTalksAboutLucy1);
+ SDB_Add_Replicant_Clue(kSuspectLucy, kClueDektoraInterview4);
+ SDB_Add_Replicant_Clue(kSuspectLucy, kClueRuncitersConfession1);
+ SDB_Add_Non_Replicant_Clue(kSuspectLucy, kClueToyDog);
+ SDB_Add_Non_Replicant_Clue(kSuspectLucy, kClueRagDoll);
+ SDB_Add_Non_Replicant_Clue(kSuspectLucy, kClueCandy);
+ SDB_Add_Non_Replicant_Clue(kSuspectLucy, kClueVKLucyHuman);
+ SDB_Add_Non_Replicant_Clue(kSuspectLucy, kClueZubenTalksAboutLucy2);
+ SDB_Add_Other_Clue(kSuspectLucy, kClueLucy);
+ SDB_Add_Other_Clue(kSuspectLucy, kClueCrowdInterviewA);
+ SDB_Add_Identity_Clue(kSuspectLucy, kClueRunciterInterviewA);
+ SDB_Add_Identity_Clue(kSuspectLucy, kClueDektoraInterview4);
+ SDB_Add_Photo_Clue(kSuspectLucy, kClueLucy, 5);
+
+ SDB_Set_Actor(kSuspectDekora, kActorDektora);
+ SDB_Add_MO_Clue(kSuspectDekora, kClueScorpions);
+ SDB_Add_Replicant_Clue(kSuspectDekora, kClueVKDektoraReplicant);
+ SDB_Add_Replicant_Clue(kSuspectDekora, kClueEarlyQInterview);
+ SDB_Add_Replicant_Clue(kSuspectDekora, kClueDragonflyBelt);
+ SDB_Add_Replicant_Clue(kSuspectDekora, kClueDektoraInterview4);
+ SDB_Add_Non_Replicant_Clue(kSuspectDekora, kClueVKDektoraHuman);
+ SDB_Add_Non_Replicant_Clue(kSuspectDekora, kClueDektoraInterview2);
+ SDB_Add_Non_Replicant_Clue(kSuspectDekora, kClueDektoraInterview3);
+ SDB_Add_Non_Replicant_Clue(kSuspectDekora, kClueDektorasCard);
+ SDB_Add_Non_Replicant_Clue(kSuspectDekora, kClueDektoraInterview1);
+ SDB_Add_Other_Clue(kSuspectDekora, kClueDragonflyBelt);
+ SDB_Add_Other_Clue(kSuspectDekora, kClueWomanInAnimoidRow);
+ SDB_Add_Other_Clue(kSuspectDekora, kClueChinaBar);
+ SDB_Add_Other_Clue(kSuspectDekora, kClueCarRegistration1);
+ SDB_Add_Identity_Clue(kSuspectDekora, kClueDektoraInterview2);
+ SDB_Add_Identity_Clue(kSuspectDekora, kClueDektoraInterview3);
+ SDB_Add_Identity_Clue(kSuspectDekora, kClueEarlyQInterview);
+ SDB_Add_Photo_Clue(kSuspectDekora, kClueWomanInAnimoidRow, 21);
+ SDB_Add_Photo_Clue(kSuspectDekora, kClueChinaBar, 19);
+
+ SDB_Set_Actor(kSuspectGordo, kActorGordo);
+ SDB_Set_Sex(kSuspectGordo, 1);
+ SDB_Add_Whereabouts_Clue(kSuspectGordo, kClueStolenCheese);
+ SDB_Add_Identity_Clue(kSuspectGordo, kClueGordoInterview1);
+ SDB_Add_Identity_Clue(kSuspectGordo, kClueGordoInterview2);
+
+ SDB_Set_Actor(kSuspectIzo, kActorIzo);
+ SDB_Set_Sex(kSuspectIzo, 1);
+ SDB_Add_Whereabouts_Clue(kSuspectIzo, kClueBobInterview1);
+ SDB_Add_Whereabouts_Clue(kSuspectIzo, kClueBobInterview2);
+ SDB_Add_Whereabouts_Clue(kSuspectIzo, kClueGrigorianInterviewB2);
+ SDB_Add_Whereabouts_Clue(kSuspectIzo, kClueHomelessManInterview1);
+ SDB_Add_Replicant_Clue(kSuspectIzo, kClueGogglesReplicantIssue);
+ SDB_Add_Other_Clue(kSuspectIzo, kClueGrigorianInterviewB1);
+ SDB_Add_Other_Clue(kSuspectIzo, kClueWeaponsCache);
+ SDB_Add_Other_Clue(kSuspectIzo, kClueFolder);
+ SDB_Add_Other_Clue(kSuspectIzo, kClueIzosStashRaided);
+ SDB_Add_Other_Clue(kSuspectIzo, kClueIzo);
+ SDB_Add_Other_Clue(kSuspectIzo, kCluePhotoOfMcCoy1);
+ SDB_Add_Other_Clue(kSuspectIzo, kCluePhotoOfMcCoy2);
+ SDB_Add_Other_Clue(kSuspectIzo, kClueRadiationGoggles);
+ SDB_Add_Other_Clue(kSuspectIzo, kClueIzoInterview);
+ SDB_Add_Identity_Clue(kSuspectIzo, kClueGrigorianInterviewB2);
+ SDB_Add_Identity_Clue(kSuspectIzo, kClueBobInterview1);
+ SDB_Add_Identity_Clue(kSuspectIzo, kClueBobInterview2);
+ SDB_Add_Identity_Clue(kSuspectIzo, kCluePhotoOfMcCoy1);
+ SDB_Add_Identity_Clue(kSuspectIzo, kCluePhotoOfMcCoy2);
+ SDB_Add_Identity_Clue(kSuspectIzo, kClueRadiationGoggles);
+ SDB_Add_Identity_Clue(kSuspectIzo, kClueIzoInterview);
+ SDB_Add_Photo_Clue(kSuspectIzo, kClueIzo, 26);
+
+ SDB_Set_Actor(kSuspectMcCoy, kActorMcCoy);
+ SDB_Add_Replicant_Clue(kSuspectMcCoy, kClueMcCoyAtMoonbus);
+ SDB_Add_Other_Clue(kSuspectMcCoy, kCluePhotoOfMcCoy1);
+ SDB_Add_Other_Clue(kSuspectMcCoy, kCluePhotoOfMcCoy2);
+ SDB_Add_Identity_Clue(kSuspectMcCoy, kClueMcCoyAtMoonbus);
+ SDB_Add_Photo_Clue(kSuspectMcCoy, kClueMcCoyAtMoonbus, 36);
+ SDB_Add_Photo_Clue(kSuspectMcCoy, kCluePhotoOfMcCoy1, 17);
+ SDB_Add_Photo_Clue(kSuspectMcCoy, kCluePhotoOfMcCoy2, 18);
+
+ SDB_Set_Actor(kSuspectGuzza, kActorGuzza);
+ SDB_Add_Other_Clue(kSuspectGuzza, kClueGuzza);
+ SDB_Add_Other_Clue(kSuspectGuzza, kClueFolder);
+ SDB_Add_Other_Clue(kSuspectGuzza, kClueGuzzaFramedMcCoy);
+ SDB_Add_Identity_Clue(kSuspectGuzza, kClueGuzza);
+ SDB_Add_Identity_Clue(kSuspectGuzza, kClueGuzzaFramedMcCoy);
+ SDB_Add_Identity_Clue(kSuspectGuzza, kClueFolder);
+ SDB_Add_Photo_Clue(kSuspectGuzza, kClueGuzza, 27);
}
void ScriptInit::Init_CDB() {
@@ -2396,6 +2405,7 @@ void ScriptInit::Init_CDB() {
CDB_Set_Crime(kClueLucy, kCrimeAnimalMurder);
CDB_Set_Crime(kClueDragonflyAnklet, kCrimeAnimalMurder);
CDB_Set_Crime(kClueZuben, kCrimeAnimalMurder);
+
CDB_Set_Crime(kCluePhoneCallGuzza, kCrimeEisendullerMurder);
CDB_Set_Crime(kClueDragonflyEarring, kCrimeEisendullerMurder);
CDB_Set_Crime(kClueTyrellSecurity, kCrimeEisendullerMurder);
@@ -2414,6 +2424,7 @@ void ScriptInit::Init_CDB() {
CDB_Set_Crime(kClueKingstonKitchenBox2, kCrimeEisendullerMurder);
CDB_Set_Crime(kCluePlasticExplosive, kCrimeEisendullerMurder);
CDB_Set_Crime(kClueTyrellSecurityPhoto, kCrimeEisendullerMurder);
+
CDB_Set_Crime(kClueGaffsInformation, kCrimeMoonbusHijacking);
CDB_Set_Crime(kClueMoonbus1, kCrimeMoonbusHijacking);
CDB_Set_Crime(kClueMcCoyAtMoonbus, kCrimeMoonbusHijacking);
@@ -2422,13 +2433,16 @@ void ScriptInit::Init_CDB() {
CDB_Set_Crime(kClueVKLucyReplicant, kCrimeMoonbusHijacking);
CDB_Set_Crime(kClueCrystalsCase, kCrimeMoonbusHijacking);
CDB_Set_Crime(kCluePhoneCallCrystal, kCrimeMoonbusHijacking);
+
CDB_Set_Crime(kClueCrimeSceneNotes, kCrimeFactoryBombing);
CDB_Set_Crime(kClueGrigorianInterviewA, kCrimeFactoryBombing);
CDB_Set_Crime(kClueGrigorianInterviewB1, kCrimeFactoryBombing);
CDB_Set_Crime(kClueGrigorianInterviewB2, kCrimeFactoryBombing);
+
CDB_Set_Crime(kClueMorajiInterview, kCrimeMorajiMurder);
CDB_Set_Crime(kClueExpertBomber, kCrimeMorajiMurder);
CDB_Set_Crime(kClueAmateurBomber, kCrimeMorajiMurder);
+
CDB_Set_Crime(kClueWeaponsCache, kCrimeArmsDealing);
CDB_Set_Crime(kClueFolder, kCrimeArmsDealing);
CDB_Set_Crime(kClueIzosStashRaided, kCrimeArmsDealing);
@@ -2439,206 +2453,208 @@ void ScriptInit::Init_CDB() {
CDB_Set_Crime(kCluePoliceIssueWeapons, kCrimeArmsDealing);
CDB_Set_Crime(kClueFolder, kCrimeArmsDealing);
CDB_Set_Crime(kClueGuzzaFramedMcCoy, kCrimeArmsDealing);
+
CDB_Set_Crime(kClueStaggeredbyPunches, kCrimeBradburyAssault);
CDB_Set_Crime(kClueAct2Ended, kCrimeBradburyAssault);
- int i = 0;
- do {
- CDB_Set_Clue_Asset_Type(i++, -1);
- } while (i < 288);
- CDB_Set_Clue_Asset_Type(kClueOfficersStatement, 2);
- CDB_Set_Clue_Asset_Type(kClueDoorForced2, 2);
- CDB_Set_Clue_Asset_Type(kClueLimpingFootprints, 2);
- CDB_Set_Clue_Asset_Type(kClueGracefulFootprints, 2);
- CDB_Set_Clue_Asset_Type(kClueShellCasings, 3);
- CDB_Set_Clue_Asset_Type(kClueCandy, 3);
- CDB_Set_Clue_Asset_Type(kClueToyDog, 3);
- CDB_Set_Clue_Asset_Type(kClueChopstickWrapper, 3);
- CDB_Set_Clue_Asset_Type(kClueSushiMenu, 0);
- CDB_Set_Clue_Asset_Type(kClueLabCorpses, 2);
- CDB_Set_Clue_Asset_Type(kClueLabShellCasings, 2);
- CDB_Set_Clue_Asset_Type(kClueRuncitersVideo, 1);
- CDB_Set_Clue_Asset_Type(kClueLucy, 0);
- CDB_Set_Clue_Asset_Type(kClueDragonflyAnklet, 0);
- CDB_Set_Clue_Asset_Type(kClueReferenceLetter, 3);
- CDB_Set_Clue_Asset_Type(kClueCrowdInterviewA, 2);
- CDB_Set_Clue_Asset_Type(kClueCrowdInterviewB, 2);
- CDB_Set_Clue_Asset_Type(kClueZubenInterview, 2);
- CDB_Set_Clue_Asset_Type(kClueZuben, 0);
- CDB_Set_Clue_Asset_Type(kClueBigManLimping, 2);
- CDB_Set_Clue_Asset_Type(kClueRunciterInterviewA, 2);
- CDB_Set_Clue_Asset_Type(kClueRunciterInterviewB1, 2);
- CDB_Set_Clue_Asset_Type(kClueRunciterInterviewB2, 2);
- CDB_Set_Clue_Asset_Type(kClueHowieLeeInterview, 2);
- CDB_Set_Clue_Asset_Type(kCluePaintTransfer, 2);
- CDB_Set_Clue_Asset_Type(kClueChromeDebris, 3);
- CDB_Set_Clue_Asset_Type(kClueRuncitersViewA, 0);
- CDB_Set_Clue_Asset_Type(kClueRuncitersViewB, 0);
- CDB_Set_Clue_Asset_Type(kClueCarColorAndMake, 0);
- CDB_Set_Clue_Asset_Type(kCluePartialLicenseNumber, 0);
- CDB_Set_Clue_Asset_Type(kClueBriefcase, 3);
- CDB_Set_Clue_Asset_Type(kClueGaffsInformation, 2);
- CDB_Set_Clue_Asset_Type(kClueCrystalVisitedRunciters, -1);
- CDB_Set_Clue_Asset_Type(kClueCrystalVisitedChinatown, -1);
- CDB_Set_Clue_Asset_Type(kClueWantedPoster, 0);
- CDB_Set_Clue_Asset_Type(kClueLicensePlate, 3);
- CDB_Set_Clue_Asset_Type(kClueLabPaintTransfer, 2);
- CDB_Set_Clue_Asset_Type(kClueDispatchHitAndRun, 2);
- CDB_Set_Clue_Asset_Type(kClueInceptShotRoy, 0);
- CDB_Set_Clue_Asset_Type(kCluePhoneCallGuzza, 2);
- CDB_Set_Clue_Asset_Type(kClueDragonflyEarring, 3);
- CDB_Set_Clue_Asset_Type(kClueTyrellSecurity, 1);
- CDB_Set_Clue_Asset_Type(kClueTyrellGuardInterview, 2);
- CDB_Set_Clue_Asset_Type(kClueBombingSuspect, 0);
- CDB_Set_Clue_Asset_Type(kClueSadiksGun, 0);
- CDB_Set_Clue_Asset_Type(kClueDetonatorWire, 3);
- CDB_Set_Clue_Asset_Type(kClueVictimInformation, 2);
- CDB_Set_Clue_Asset_Type(kClueAttemptedFileAccess, 2);
- CDB_Set_Clue_Asset_Type(kClueCrystalsCase, 2);
- CDB_Set_Clue_Asset_Type(kClueKingstonKitchenBox1, 3);
- CDB_Set_Clue_Asset_Type(kClueTyrellSalesPamphlet1, 3);
- CDB_Set_Clue_Asset_Type(kClueTyrellSalesPamphlet2, 3);
- CDB_Set_Clue_Asset_Type(kCluePeruvianLadyInterview, 2);
- CDB_Set_Clue_Asset_Type(kClueHasanInterview, 2);
- CDB_Set_Clue_Asset_Type(kClueBobInterview1, 2);
- CDB_Set_Clue_Asset_Type(kClueBobInterview2, 2);
- CDB_Set_Clue_Asset_Type(kClueIzoInterview, 2);
- CDB_Set_Clue_Asset_Type(kClueIzosWarning, 2);
- CDB_Set_Clue_Asset_Type(kClueRadiationGoggles, 3);
- CDB_Set_Clue_Asset_Type(kClueGogglesReplicantIssue, 2);
- CDB_Set_Clue_Asset_Type(kClueFishLadyInterview, 2);
- CDB_Set_Clue_Asset_Type(kClueDogCollar1, 3);
- CDB_Set_Clue_Asset_Type(kClueWeaponsCache, 2);
- CDB_Set_Clue_Asset_Type(kClueChewInterview, 2);
- CDB_Set_Clue_Asset_Type(kClueMorajiInterview, 2);
- CDB_Set_Clue_Asset_Type(kClueGordoInterview1, 2);
- CDB_Set_Clue_Asset_Type(kClueGordoInterview2, 2);
- CDB_Set_Clue_Asset_Type(kClueAnsweringMachineMessage, 2);
- CDB_Set_Clue_Asset_Type(kClueChessTable, 2);
- CDB_Set_Clue_Asset_Type(kClueStaggeredbyPunches, 2);
- CDB_Set_Clue_Asset_Type(kClueMaggieBracelet, 3);
- CDB_Set_Clue_Asset_Type(kClueEnvelope, 3);
- CDB_Set_Clue_Asset_Type(kClueIzosFriend, 0);
- CDB_Set_Clue_Asset_Type(kClueChinaBarSecurityPhoto, 0);
- CDB_Set_Clue_Asset_Type(kCluePurchasedScorpions, 2);
- CDB_Set_Clue_Asset_Type(kClueWeaponsOrderForm, 3);
- CDB_Set_Clue_Asset_Type(kClueShippingForm, 3);
- CDB_Set_Clue_Asset_Type(kClueHysteriaToken, 3);
- CDB_Set_Clue_Asset_Type(kClueRagDoll, 3);
- CDB_Set_Clue_Asset_Type(kClueMoonbus1, 0);
- CDB_Set_Clue_Asset_Type(kClueCheese, 3);
- CDB_Set_Clue_Asset_Type(kClueDektorasDressingRoom, 0);
- CDB_Set_Clue_Asset_Type(kClueEarlyQsClub, 1);
- CDB_Set_Clue_Asset_Type(kClueStrangeScale1, 3);
- CDB_Set_Clue_Asset_Type(kClueDektoraInterview1, 2);
- CDB_Set_Clue_Asset_Type(kClueDektoraInterview2, 2);
- CDB_Set_Clue_Asset_Type(kClueDektoraInterview3, 2);
- CDB_Set_Clue_Asset_Type(kClueDektorasCard, 3);
- CDB_Set_Clue_Asset_Type(kClueGrigoriansNote, 3);
- CDB_Set_Clue_Asset_Type(kClueCollectionReceipt, 3);
- CDB_Set_Clue_Asset_Type(kClueSpecialIngredient, 2);
- CDB_Set_Clue_Asset_Type(kClueStolenCheese, 2);
- CDB_Set_Clue_Asset_Type(kClueGordoInterview3, 2);
- CDB_Set_Clue_Asset_Type(kClueGordoConfession, 2);
- CDB_Set_Clue_Asset_Type(kClueGordosLighter1, 3);
- CDB_Set_Clue_Asset_Type(kClueGordosLighter2, 3);
- CDB_Set_Clue_Asset_Type(kClueDektoraInterview4, 2);
- CDB_Set_Clue_Asset_Type(kClueHollowayInterview, 2);
- CDB_Set_Clue_Asset_Type(kClueBakersBadge, 3);
- CDB_Set_Clue_Asset_Type(kClueHoldensBadge, 3);
- CDB_Set_Clue_Asset_Type(kClueCarIdentified, 2);
- CDB_Set_Clue_Asset_Type(kClueCarRegistration1, 2);
- CDB_Set_Clue_Asset_Type(kClueCarRegistration2, 2);
- CDB_Set_Clue_Asset_Type(kClueCarRegistration3, 2);
- CDB_Set_Clue_Asset_Type(kClueCrazylegsInterview1, 2);
- CDB_Set_Clue_Asset_Type(kClueCrazylegsInterview2, 2);
- CDB_Set_Clue_Asset_Type(kClueLichenDogWrapper, 3);
- CDB_Set_Clue_Asset_Type(kClueRequisitionForm, 3);
- CDB_Set_Clue_Asset_Type(kClueScaryChair, 2);
- CDB_Set_Clue_Asset_Type(kClueIzosStashRaided, 2);
- CDB_Set_Clue_Asset_Type(kClueHomelessManInterview1, 2);
- CDB_Set_Clue_Asset_Type(kClueHomelessManInterview2, 2);
- CDB_Set_Clue_Asset_Type(kClueHomelessManKid, 2);
- CDB_Set_Clue_Asset_Type(kClueGuzzaFramedMcCoy, 2);
- CDB_Set_Clue_Asset_Type(kClueOriginalShippingForm, 3);
- CDB_Set_Clue_Asset_Type(kClueOriginalRequisitionForm, 3);
- CDB_Set_Clue_Asset_Type(kClueCandyWrapper, 3);
- CDB_Set_Clue_Asset_Type(kClueFlaskOfAbsinthe, 3);
- CDB_Set_Clue_Asset_Type(kClueDektoraConfession, 2);
- CDB_Set_Clue_Asset_Type(kClueRunciterConfession1, 2);
- CDB_Set_Clue_Asset_Type(kClueRunciterConfession2, 2);
- CDB_Set_Clue_Asset_Type(kClueLutherLanceInterview, 2);
- CDB_Set_Clue_Asset_Type(kClueMoonbus2, 0);
- CDB_Set_Clue_Asset_Type(kClueMoonbusCloseup, 0);
- CDB_Set_Clue_Asset_Type(kCluePhoneCallDektora1, 2);
- CDB_Set_Clue_Asset_Type(kCluePhoneCallDektora2, 2);
- CDB_Set_Clue_Asset_Type(kCluePhoneCallLucy1, 2);
- CDB_Set_Clue_Asset_Type(kCluePhoneCallLucy2, 2);
- CDB_Set_Clue_Asset_Type(kCluePhoneCallClovis, 2);
- CDB_Set_Clue_Asset_Type(kCluePhoneCallCrystal, 2);
- CDB_Set_Clue_Asset_Type(kCluePowerSource, 3);
- CDB_Set_Clue_Asset_Type(kClueBomb, 3);
- CDB_Set_Clue_Asset_Type(kClueCrimeSceneNotes, 2);
- CDB_Set_Clue_Asset_Type(kClueGrigorianInterviewA, 2);
- CDB_Set_Clue_Asset_Type(kClueGrigorianInterviewB1, 2);
- CDB_Set_Clue_Asset_Type(kClueGrigorianInterviewB2, 2);
- CDB_Set_Clue_Asset_Type(kClueDNATyrell, 3);
- CDB_Set_Clue_Asset_Type(kClueDNASebastian, 3);
- CDB_Set_Clue_Asset_Type(kClueDNAChew, 3);
- CDB_Set_Clue_Asset_Type(kClueDNAMoraji, 3);
- CDB_Set_Clue_Asset_Type(kClueDNALutherLance, 3);
- CDB_Set_Clue_Asset_Type(kClueDNAMarcus, 3);
- CDB_Set_Clue_Asset_Type(kClueAnimalMurderSuspect, 0);
- CDB_Set_Clue_Asset_Type(kClueMilitaryBoots, 0);
- CDB_Set_Clue_Asset_Type(kClueOuterDressingRoom, 0);
- CDB_Set_Clue_Asset_Type(kCluePhotoOfMcCoy1, 0);
- CDB_Set_Clue_Asset_Type(kCluePhotoOfMcCoy2, 0);
- CDB_Set_Clue_Asset_Type(kClueEarlyQAndLucy, 0);
- CDB_Set_Clue_Asset_Type(kClueClovisflowers, 0);
- CDB_Set_Clue_Asset_Type(kClueLucyWithDektora, 0);
- CDB_Set_Clue_Asset_Type(kClueWomanInAnimoidRow, 0);
- CDB_Set_Clue_Asset_Type(kClueScorpions, 0);
- CDB_Set_Clue_Asset_Type(kClueStrangeScale2, 0);
- CDB_Set_Clue_Asset_Type(kClueChinaBarSecurityCamera, 0);
- CDB_Set_Clue_Asset_Type(kClueIzo, 0);
- CDB_Set_Clue_Asset_Type(kClueGuzza, 0);
- CDB_Set_Clue_Asset_Type(kClueChinaBarSecurityDisc, 1);
- CDB_Set_Clue_Asset_Type(kClueScorpionbox, 0);
- CDB_Set_Clue_Asset_Type(kClueTyrellSecurityPhoto, 0);
- CDB_Set_Clue_Asset_Type(kClueChinaBar, 0);
- CDB_Set_Clue_Asset_Type(kCluePlasticExplosive, 0);
- CDB_Set_Clue_Asset_Type(kClueDogCollar2, 0);
- CDB_Set_Clue_Asset_Type(kClueKingstonKitchenBox2, 0);
- CDB_Set_Clue_Asset_Type(kClueCrystalsCigarette, 3);
- CDB_Set_Clue_Asset_Type(kClueSpinnerKeys, 3);
- CDB_Set_Clue_Asset_Type(kClueExpertBomber, 2);
- CDB_Set_Clue_Asset_Type(kClueAmateurBomber, 2);
- CDB_Set_Clue_Asset_Type(kClueVKLucyReplicant, 2);
- CDB_Set_Clue_Asset_Type(kClueVKLucyHuman, 2);
- CDB_Set_Clue_Asset_Type(kClueVKDektoraReplicant, 2);
- CDB_Set_Clue_Asset_Type(kClueVKDektoraHuman, 2);
- CDB_Set_Clue_Asset_Type(kClueVKBobGorskyReplicant, 2);
- CDB_Set_Clue_Asset_Type(kClueVKBobGorskyHuman, 2);
- CDB_Set_Clue_Asset_Type(kClueVKGrigorianReplicant, 2);
- CDB_Set_Clue_Asset_Type(kClueVKGrigorianHuman, 2);
- CDB_Set_Clue_Asset_Type(kClueVKRunciterReplicant, 2);
- CDB_Set_Clue_Asset_Type(kClueVKRunciterHuman, 2);
- CDB_Set_Clue_Asset_Type(kClueLucyInterview, 2);
- CDB_Set_Clue_Asset_Type(kClueMoonbusReflection, 0);
- CDB_Set_Clue_Asset_Type(kClueMcCoyAtMoonbus, 0);
- CDB_Set_Clue_Asset_Type(kClueClovisAtMoonbus, 0);
- CDB_Set_Clue_Asset_Type(kClueSadikAtMoonbus, 0);
- CDB_Set_Clue_Asset_Type(kClueZubenTalksAboutLucy1, 2);
- CDB_Set_Clue_Asset_Type(kClueZubenTalksAboutLucy2, 2);
- CDB_Set_Clue_Asset_Type(kClueZubensMotive, 2);
- CDB_Set_Clue_Asset_Type(kClueRachaelInterview, 2);
- CDB_Set_Clue_Asset_Type(kClueTyrellInterview, 2);
- CDB_Set_Clue_Asset_Type(kClueRuncitersConfession1, 2);
- CDB_Set_Clue_Asset_Type(kClueEarlyInterviewA, 2);
- CDB_Set_Clue_Asset_Type(kClueEarlyInterviewB1, 2);
- CDB_Set_Clue_Asset_Type(kClueEarlyInterviewB2, 2);
- CDB_Set_Clue_Asset_Type(kClueCrazylegsInterview3, 2);
- CDB_Set_Clue_Asset_Type(kClueCrazylegGgrovels, 2);
- CDB_Set_Clue_Asset_Type(kClueFolder, 3);
+
+ for(int i = 0; i != 288; ++i) {
+ CDB_Set_Clue_Asset_Type(i, kClueTypeIntangible);
+ }
+
+ CDB_Set_Clue_Asset_Type(kClueOfficersStatement, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueDoorForced2, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueLimpingFootprints, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueGracefulFootprints, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueShellCasings, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueCandy, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueToyDog, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueChopstickWrapper, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueSushiMenu, kClueTypePhotograph);
+ CDB_Set_Clue_Asset_Type(kClueLabCorpses, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueLabShellCasings, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueRuncitersVideo, kClueTypeVideoClip);
+ CDB_Set_Clue_Asset_Type(kClueLucy, kClueTypePhotograph);
+ CDB_Set_Clue_Asset_Type(kClueDragonflyAnklet, kClueTypePhotograph);
+ CDB_Set_Clue_Asset_Type(kClueReferenceLetter, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueCrowdInterviewA, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueCrowdInterviewB, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueZubenInterview, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueZuben, kClueTypePhotograph);
+ CDB_Set_Clue_Asset_Type(kClueBigManLimping, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueRunciterInterviewA, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueRunciterInterviewB1, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueRunciterInterviewB2, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueHowieLeeInterview, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kCluePaintTransfer, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueChromeDebris, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueRuncitersViewA, kClueTypePhotograph);
+ CDB_Set_Clue_Asset_Type(kClueRuncitersViewB, kClueTypePhotograph);
+ CDB_Set_Clue_Asset_Type(kClueCarColorAndMake, kClueTypePhotograph);
+ CDB_Set_Clue_Asset_Type(kCluePartialLicenseNumber, kClueTypePhotograph);
+ CDB_Set_Clue_Asset_Type(kClueBriefcase, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueGaffsInformation, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueCrystalVisitedRunciters, kClueTypeIntangible);
+ CDB_Set_Clue_Asset_Type(kClueCrystalVisitedChinatown, kClueTypeIntangible);
+ CDB_Set_Clue_Asset_Type(kClueWantedPoster, kClueTypePhotograph);
+ CDB_Set_Clue_Asset_Type(kClueLicensePlate, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueLabPaintTransfer, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueDispatchHitAndRun, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueInceptShotRoy, kClueTypePhotograph);
+ CDB_Set_Clue_Asset_Type(kCluePhoneCallGuzza, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueDragonflyEarring, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueTyrellSecurity, kClueTypeVideoClip);
+ CDB_Set_Clue_Asset_Type(kClueTyrellGuardInterview, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueBombingSuspect, kClueTypePhotograph);
+ CDB_Set_Clue_Asset_Type(kClueSadiksGun, kClueTypePhotograph);
+ CDB_Set_Clue_Asset_Type(kClueDetonatorWire, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueVictimInformation, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueAttemptedFileAccess, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueCrystalsCase, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueKingstonKitchenBox1, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueTyrellSalesPamphlet1, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueTyrellSalesPamphlet2, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kCluePeruvianLadyInterview, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueHasanInterview, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueBobInterview1, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueBobInterview2, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueIzoInterview, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueIzosWarning, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueRadiationGoggles, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueGogglesReplicantIssue, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueFishLadyInterview, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueDogCollar1, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueWeaponsCache, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueChewInterview, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueMorajiInterview, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueGordoInterview1, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueGordoInterview2, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueAnsweringMachineMessage, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueChessTable, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueStaggeredbyPunches, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueMaggieBracelet, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueEnvelope, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueIzosFriend, kClueTypePhotograph);
+ CDB_Set_Clue_Asset_Type(kClueChinaBarSecurityPhoto, kClueTypePhotograph);
+ CDB_Set_Clue_Asset_Type(kCluePurchasedScorpions, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueWeaponsOrderForm, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueShippingForm, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueHysteriaToken, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueRagDoll, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueMoonbus1, kClueTypePhotograph);
+ CDB_Set_Clue_Asset_Type(kClueCheese, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueDektorasDressingRoom, kClueTypePhotograph);
+ CDB_Set_Clue_Asset_Type(kClueEarlyQsClub, kClueTypeVideoClip);
+ CDB_Set_Clue_Asset_Type(kClueStrangeScale1, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueDektoraInterview1, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueDektoraInterview2, kClueTypeAudioRecording);
+ 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(kClueCollectionReceipt, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueSpecialIngredient, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueStolenCheese, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueGordoInterview3, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueGordoConfession, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueGordosLighter1, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueGordosLighter2, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueDektoraInterview4, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueHollowayInterview, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueBakersBadge, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueHoldensBadge, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueCarIdentified, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueCarRegistration1, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueCarRegistration2, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueCarRegistration3, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueCrazylegsInterview1, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueCrazylegsInterview2, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueLichenDogWrapper, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueRequisitionForm, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueScaryChair, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueIzosStashRaided, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueHomelessManInterview1, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueHomelessManInterview2, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueHomelessManKid, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueGuzzaFramedMcCoy, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueOriginalShippingForm, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueOriginalRequisitionForm, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueCandyWrapper, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueFlaskOfAbsinthe, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueDektoraConfession, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueRunciterConfession1, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueRunciterConfession2, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueLutherLanceInterview, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueMoonbus2, kClueTypePhotograph);
+ CDB_Set_Clue_Asset_Type(kClueMoonbusCloseup, kClueTypePhotograph);
+ CDB_Set_Clue_Asset_Type(kCluePhoneCallDektora1, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kCluePhoneCallDektora2, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kCluePhoneCallLucy1, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kCluePhoneCallLucy2, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kCluePhoneCallClovis, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kCluePhoneCallCrystal, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kCluePowerSource, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueBomb, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueCrimeSceneNotes, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueGrigorianInterviewA, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueGrigorianInterviewB1, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueGrigorianInterviewB2, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueDNATyrell, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueDNASebastian, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueDNAChew, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueDNAMoraji, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueDNALutherLance, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueDNAMarcus, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueAnimalMurderSuspect, kClueTypePhotograph);
+ CDB_Set_Clue_Asset_Type(kClueMilitaryBoots, kClueTypePhotograph);
+ CDB_Set_Clue_Asset_Type(kClueOuterDressingRoom, kClueTypePhotograph);
+ CDB_Set_Clue_Asset_Type(kCluePhotoOfMcCoy1, kClueTypePhotograph);
+ CDB_Set_Clue_Asset_Type(kCluePhotoOfMcCoy2, kClueTypePhotograph);
+ CDB_Set_Clue_Asset_Type(kClueEarlyQAndLucy, kClueTypePhotograph);
+ CDB_Set_Clue_Asset_Type(kClueClovisflowers, kClueTypePhotograph);
+ CDB_Set_Clue_Asset_Type(kClueLucyWithDektora, kClueTypePhotograph);
+ CDB_Set_Clue_Asset_Type(kClueWomanInAnimoidRow, kClueTypePhotograph);
+ CDB_Set_Clue_Asset_Type(kClueScorpions, kClueTypePhotograph);
+ CDB_Set_Clue_Asset_Type(kClueStrangeScale2, kClueTypePhotograph);
+ CDB_Set_Clue_Asset_Type(kClueChinaBarSecurityCamera, kClueTypePhotograph);
+ CDB_Set_Clue_Asset_Type(kClueIzo, kClueTypePhotograph);
+ CDB_Set_Clue_Asset_Type(kClueGuzza, kClueTypePhotograph);
+ CDB_Set_Clue_Asset_Type(kClueChinaBarSecurityDisc, kClueTypeVideoClip);
+ CDB_Set_Clue_Asset_Type(kClueScorpionbox, kClueTypePhotograph);
+ CDB_Set_Clue_Asset_Type(kClueTyrellSecurityPhoto, kClueTypePhotograph);
+ CDB_Set_Clue_Asset_Type(kClueChinaBar, kClueTypePhotograph);
+ CDB_Set_Clue_Asset_Type(kCluePlasticExplosive, kClueTypePhotograph);
+ CDB_Set_Clue_Asset_Type(kClueDogCollar2, kClueTypePhotograph);
+ CDB_Set_Clue_Asset_Type(kClueKingstonKitchenBox2, kClueTypePhotograph);
+ CDB_Set_Clue_Asset_Type(kClueCrystalsCigarette, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueSpinnerKeys, kClueTypeObject);
+ CDB_Set_Clue_Asset_Type(kClueExpertBomber, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueAmateurBomber, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueVKLucyReplicant, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueVKLucyHuman, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueVKDektoraReplicant, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueVKDektoraHuman, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueVKBobGorskyReplicant, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueVKBobGorskyHuman, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueVKGrigorianReplicant, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueVKGrigorianHuman, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueVKRunciterReplicant, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueVKRunciterHuman, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueLucyInterview, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueMoonbusReflection, kClueTypePhotograph);
+ CDB_Set_Clue_Asset_Type(kClueMcCoyAtMoonbus, kClueTypePhotograph);
+ CDB_Set_Clue_Asset_Type(kClueClovisAtMoonbus, kClueTypePhotograph);
+ CDB_Set_Clue_Asset_Type(kClueSadikAtMoonbus, kClueTypePhotograph);
+ CDB_Set_Clue_Asset_Type(kClueZubenTalksAboutLucy1, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueZubenTalksAboutLucy2, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueZubensMotive, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueRachaelInterview, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueTyrellInterview, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueRuncitersConfession1, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueEarlyInterviewA, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueEarlyInterviewB1, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueEarlyInterviewB2, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueCrazylegsInterview3, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueCrazylegGgrovels, kClueTypeAudioRecording);
+ CDB_Set_Clue_Asset_Type(kClueFolder, kClueTypeObject);
}
void ScriptInit::Init_Spinner() {
diff --git a/engines/bladerunner/script/scene/rc01.cpp b/engines/bladerunner/script/scene/rc01.cpp
index 79bf1045ce..dd793ad440 100644
--- a/engines/bladerunner/script/scene/rc01.cpp
+++ b/engines/bladerunner/script/scene/rc01.cpp
@@ -25,13 +25,13 @@
namespace BladeRunner {
void SceneScriptRC01::InitializeScene() {
-#if _DEBUG
+#if BLADERUNNER_DEBUG_GAME
//TODO: not part of game, remove
- // Game_Flag_Set(kFlagIntroPlayed); // force skip intro
- // Game_Flag_Set(kFlagRC02toRC01); // no landing
+ Game_Flag_Set(kFlagIntroPlayed); // force skip intro
+ Game_Flag_Set(kFlagRC02toRC01); // no landing
// Game_Flag_Set(kFlagRC01PoliceDone);
// Game_Flag_Set(249);
- // Game_Flag_Set(kFlagKIAPrivacyAddon);
+ Game_Flag_Set(kFlagKIAPrivacyAddon);
#endif
if (!Game_Flag_Query(kFlagIntroPlayed)) {
diff --git a/engines/bladerunner/suspects_database.cpp b/engines/bladerunner/suspects_database.cpp
index c0e8469852..d7e9c1f999 100644
--- a/engines/bladerunner/suspects_database.cpp
+++ b/engines/bladerunner/suspects_database.cpp
@@ -96,19 +96,23 @@ bool SuspectDatabaseEntry::addPhotoClue(int shapeId, int clueId) {
if (_photoClueCount >= kPhotoClueCount) {
return false;
}
- _photoClues[_photoClueCount][0] = clueId;
- _photoClues[_photoClueCount][1] = shapeId;
- _photoClues[_photoClueCount][2] = -1;
+ _photoClues[_photoClueCount].clueId = clueId;
+ _photoClues[_photoClueCount].shapeId = shapeId;
+ _photoClues[_photoClueCount].notUsed = -1;
_photoClueCount++;
return true;
}
-const char *SuspectDatabaseEntry::getName() {
+const char *SuspectDatabaseEntry::getName() const {
return _vm->_textActorNames->getText(_actorId);
}
-bool SuspectDatabaseEntry::hasMOClue(int clueId) {
+int SuspectDatabaseEntry::getSex() const {
+ return _sex;
+}
+
+bool SuspectDatabaseEntry::hasMOClue(int clueId) const {
for (int i = 0; i < _moClueCount; i++) {
if (_moClues[i] == clueId) {
return true;
@@ -117,7 +121,7 @@ bool SuspectDatabaseEntry::hasMOClue(int clueId) {
return false;
}
-bool SuspectDatabaseEntry::hasWhereaboutsClue(int clueId) {
+bool SuspectDatabaseEntry::hasWhereaboutsClue(int clueId) const {
for (int i = 0; i < _whereaboutsClueCount; i++) {
if (_whereaboutsClues[i] == clueId) {
return true;
@@ -126,7 +130,7 @@ bool SuspectDatabaseEntry::hasWhereaboutsClue(int clueId) {
return false;
}
-bool SuspectDatabaseEntry::hasReplicantClue(int clueId) {
+bool SuspectDatabaseEntry::hasReplicantClue(int clueId) const {
for (int i = 0; i < _replicantClueCount; i++) {
if (_replicantClues[i] == clueId) {
return true;
@@ -135,7 +139,7 @@ bool SuspectDatabaseEntry::hasReplicantClue(int clueId) {
return false;
}
-bool SuspectDatabaseEntry::hasNonReplicantClue(int clueId) {
+bool SuspectDatabaseEntry::hasNonReplicantClue(int clueId) const {
for (int i = 0; i < _nonReplicantClueCount; i++) {
if (_nonReplicantClues[i] == clueId) {
return true;
@@ -144,7 +148,7 @@ bool SuspectDatabaseEntry::hasNonReplicantClue(int clueId) {
return false;
}
-bool SuspectDatabaseEntry::hasOtherClue(int clueId) {
+bool SuspectDatabaseEntry::hasOtherClue(int clueId) const {
for (int i = 0; i < _otherClueCount; i++) {
if (_otherClues[i] == clueId) {
return true;
@@ -153,7 +157,7 @@ bool SuspectDatabaseEntry::hasOtherClue(int clueId) {
return false;
}
-bool SuspectDatabaseEntry::hasIdentityClue(int clueId) {
+bool SuspectDatabaseEntry::hasIdentityClue(int clueId) const {
for (int i = 0; i < _identityClueCount; i++) {
if (_identityClues[i] == clueId) {
return true;
@@ -162,7 +166,7 @@ bool SuspectDatabaseEntry::hasIdentityClue(int clueId) {
return false;
}
-bool SuspectDatabaseEntry::hasClue(int clueId) {
+bool SuspectDatabaseEntry::hasClue(int clueId) const {
return hasMOClue(clueId)
|| hasWhereaboutsClue(clueId)
|| hasReplicantClue(clueId)
@@ -170,16 +174,20 @@ bool SuspectDatabaseEntry::hasClue(int clueId) {
|| hasOtherClue(clueId);
}
-int SuspectDatabaseEntry::getPhotoClue1(int photoId) {
- return _photoClues[photoId][0];
+int SuspectDatabaseEntry::getPhotoCount() const {
+ return _photoClueCount;
+}
+
+int SuspectDatabaseEntry::getPhotoClueId(int photoId) const {
+ return _photoClues[photoId].clueId;
}
-int SuspectDatabaseEntry::getPhotoClue2(int photoId) {
- return _photoClues[photoId][1];
+int SuspectDatabaseEntry::getPhotoShapeId(int photoId) const {
+ return _photoClues[photoId].shapeId;
}
-int SuspectDatabaseEntry::getPhotoClue3(int photoId) {
- return _photoClues[photoId][2];
+int SuspectDatabaseEntry::getPhotoNotUsed(int photoId) const {
+ return _photoClues[photoId].notUsed;
}
void SuspectDatabaseEntry::reset() {
diff --git a/engines/bladerunner/suspects_database.h b/engines/bladerunner/suspects_database.h
index 71db4dba68..c4ed08998e 100644
--- a/engines/bladerunner/suspects_database.h
+++ b/engines/bladerunner/suspects_database.h
@@ -30,7 +30,6 @@ class BladeRunnerEngine;
class TextResource;
class SuspectDatabaseEntry {
-private:
static const int kMOClueCount = 10;
static const int kWhereaboutsClueCount = 10;
static const int kReplicantClueCount = 20;
@@ -39,18 +38,24 @@ private:
static const int kIdentityClueCount = 10;
static const int kPhotoClueCount = 6;
+ struct Photo {
+ int clueId;
+ int shapeId;
+ int notUsed;
+ };
+
BladeRunnerEngine *_vm;
int _actorId;
int _sex;
- int _moClues[kMOClueCount];
- int _whereaboutsClues[kWhereaboutsClueCount];
- int _replicantClues[kReplicantClueCount];
- int _nonReplicantClues[kNonReplicantClueCount];
- int _otherClues[kOtherClueCount];
- int _identityClues[kIdentityClueCount];
- int _photoClues[kPhotoClueCount][3];
+ int _moClues[kMOClueCount];
+ int _whereaboutsClues[kWhereaboutsClueCount];
+ int _replicantClues[kReplicantClueCount];
+ int _nonReplicantClues[kNonReplicantClueCount];
+ int _otherClues[kOtherClueCount];
+ int _identityClues[kIdentityClueCount];
+ Photo _photoClues[kPhotoClueCount];
int _moClueCount;
int _whereaboutsClueCount;
@@ -66,25 +71,30 @@ public:
void setActor(int actorId);
void setSex(int sex);
+
bool addMOClue(int clueId);
bool addWhereaboutsClue(int clueId);
bool addReplicantClue(int clueId);
bool addNonReplicantClue(int clueId);
bool addOtherClue(int clueId);
bool addIdentityClue(int clueId);
- bool addPhotoClue(int shapeId, int clueIndex);
-
- const char *getName();
- bool hasMOClue(int clueId);
- bool hasWhereaboutsClue(int clueId);
- bool hasReplicantClue(int clueId);
- bool hasNonReplicantClue(int clueId);
- bool hasOtherClue(int clueId);
- bool hasIdentityClue(int clueId);
- bool hasClue(int clueId);
- int getPhotoClue1(int photoId);
- int getPhotoClue2(int photoId);
- int getPhotoClue3(int photoId);
+ bool addPhotoClue(int shapeId, int clueId);
+
+ const char *getName() const;
+ int getSex() const;
+
+ bool hasMOClue(int clueId) const;
+ bool hasWhereaboutsClue(int clueId) const;
+ bool hasReplicantClue(int clueId) const;
+ bool hasNonReplicantClue(int clueId) const;
+ bool hasOtherClue(int clueId) const;
+ bool hasIdentityClue(int clueId) const;
+ bool hasClue(int clueId) const;
+
+ int getPhotoCount() const;
+ int getPhotoClueId(int photoId) const;
+ int getPhotoShapeId(int photoId) const;
+ int getPhotoNotUsed(int photoId) const;
private:
void reset();
@@ -93,7 +103,7 @@ private:
class SuspectsDatabase {
BladeRunnerEngine *_vm;
- Common::Array<SuspectDatabaseEntry*> _suspects;
+ Common::Array<SuspectDatabaseEntry *> _suspects;
public:
SuspectsDatabase(BladeRunnerEngine *_vm, int size);
diff --git a/engines/bladerunner/ui/kia.cpp b/engines/bladerunner/ui/kia.cpp
index 09c5918872..7e08a148fb 100644
--- a/engines/bladerunner/ui/kia.cpp
+++ b/engines/bladerunner/ui/kia.cpp
@@ -107,8 +107,8 @@ KIA::KIA(BladeRunnerEngine *vm) {
_buttons = new UIImagePicker(_vm, 22);
- _crimesSection = new KIASectionCrimes(_vm); // PlayerActor->_clues
- _suspectsSection = new KIASectionSuspects(_vm); // PlayerActor->_clues
+ _crimesSection = new KIASectionCrimes(_vm, _vm->_playerActor->_clues);
+ _suspectsSection = new KIASectionSuspects(_vm, _vm->_playerActor->_clues);
_cluesSection = new KIASectionClues(_vm, _vm->_playerActor->_clues);
_settingsSection = new KIASectionSettings(_vm);
_helpSection = new KIASectionHelp(_vm);
@@ -318,15 +318,15 @@ void KIA::handleMouseUp(int mouseX, int mouseY, bool mainButton) {
if (_currentSection) {
_currentSection->handleMouseUp(mainButton);
}
- if (_currentSection && _currentSection->_field0) {
+ if (_currentSection && _currentSection->_scheduledSwitch) {
if (_currentSectionId == kKIASectionCrimes) {
open(kKIASectionSuspects);
- // kiaSuspects::sub_45290C(_suspectsMenu, _crimesMenu->selectedSuspectId);
+ _suspectsSection->selectSuspect(_crimesSection->_suspectSelected);
_log->next();
_log->clearFuture();
} else if (_currentSectionId == kKIASectionSuspects) {
open(kKIASectionCrimes);
- // kiaCrimes::updateCrime(_crimesMenu, *&_suspectsMenu->data[8052]);
+ _crimesSection->selectCrime(_suspectsSection->_crimeSelected);
_log->next();
_log->clearFuture();
} else {
@@ -361,7 +361,7 @@ void KIA::handleKeyUp(const Common::KeyState &kbd) {
_currentSection->handleKeyUp(kbd);
}
}
- if (_currentSection && _currentSection->_field0) {
+ if (_currentSection && _currentSection->_scheduledSwitch) {
open(kKIASectionNone);
}
}
@@ -418,7 +418,7 @@ void KIA::handleKeyDown(const Common::KeyState &kbd) {
}
break;
}
- if (_currentSection && _currentSection->_field0) {
+ if (_currentSection && _currentSection->_scheduledSwitch) {
open(kKIASectionNone);
}
}
diff --git a/engines/bladerunner/ui/kia_section_base.cpp b/engines/bladerunner/ui/kia_section_base.cpp
index 96571e5a48..95f025e336 100644
--- a/engines/bladerunner/ui/kia_section_base.cpp
+++ b/engines/bladerunner/ui/kia_section_base.cpp
@@ -26,7 +26,7 @@ namespace BladeRunner {
KIASectionBase::KIASectionBase(BladeRunnerEngine *vm) {
_vm = vm;
- _field0 = false;
+ _scheduledSwitch = false;
}
KIASectionBase::~KIASectionBase() {
diff --git a/engines/bladerunner/ui/kia_section_base.h b/engines/bladerunner/ui/kia_section_base.h
index 176e30d4b7..ea69d89768 100644
--- a/engines/bladerunner/ui/kia_section_base.h
+++ b/engines/bladerunner/ui/kia_section_base.h
@@ -41,7 +41,7 @@ protected:
BladeRunnerEngine *_vm;
public:
- bool _field0;
+ bool _scheduledSwitch;
KIASectionBase(BladeRunnerEngine *vm);
virtual ~KIASectionBase();
diff --git a/engines/bladerunner/ui/kia_section_clues.cpp b/engines/bladerunner/ui/kia_section_clues.cpp
index 9c8da60ff9..25ff27ba8d 100644
--- a/engines/bladerunner/ui/kia_section_clues.cpp
+++ b/engines/bladerunner/ui/kia_section_clues.cpp
@@ -46,7 +46,7 @@ namespace BladeRunner {
KIASectionClues::KIASectionClues(BladeRunnerEngine *vm, ActorClues *clues) : KIASectionBase(vm) {
_uiContainer = new UIContainer(_vm);
- _isVisible = false;
+ _isOpen = false;
_debugIntangible = false;
_debugNop = 0;
@@ -81,13 +81,13 @@ KIASectionClues::~KIASectionClues() {
}
void KIASectionClues::open() {
- _isVisible = true;
+ _isOpen = true;
_buttons->resetImages();
_buttons->defineImage(0, Common::Rect(142, 380, 191, 395), _vm->_kia->_shapes->get(79), _vm->_kia->_shapes->get(80), _vm->_kia->_shapes->get(81), _vm->_textKIA->getText(30));
_buttons->defineImage(1, Common::Rect(193, 380, 242, 395), _vm->_kia->_shapes->get(76), _vm->_kia->_shapes->get(77), _vm->_kia->_shapes->get(78), _vm->_textKIA->getText(31));
-
_buttons->activate(nullptr, nullptr, nullptr, mouseUpCallback, this);
+
_cluesScrollBox->show();
_filterScrollBox->show();
@@ -96,8 +96,8 @@ void KIASectionClues::open() {
}
void KIASectionClues::close() {
- if (_isVisible) {
- _isVisible = false;
+ if (_isOpen) {
+ _isOpen = false;
_buttons->deactivate();
_cluesScrollBox->hide();
@@ -385,22 +385,22 @@ void KIASectionClues::populateClues() {
_cluesScrollBox->sortLines();
}
-int KIASectionClues::getClueFilterTypeTextId(int i) {
- if (i) {
- return i - 1;
+int KIASectionClues::getClueFilterTypeTextId(int filterId) {
+ if (filterId) {
+ return filterId - 1;
}
return -1;
}
int KIASectionClues::getClueFilterCrimeId(int filterId) {
- if (filterId == _assetTypeFilterCount) {
- return -1;
+ if (filterId != _assetTypeFilterCount) {
+ return filterId - (_assetTypeFilterCount + 1);
}
- return filterId - (_assetTypeFilterCount + 1);
+ return -1;
}
int KIASectionClues::getLineIdForAssetType(int assetType) {
- if (assetType == -1) {
+ if (assetType == kClueTypeIntangible) {
return 0;
}
return assetType + 1;
diff --git a/engines/bladerunner/ui/kia_section_clues.h b/engines/bladerunner/ui/kia_section_clues.h
index 74f7b55f65..3f6a13d135 100644
--- a/engines/bladerunner/ui/kia_section_clues.h
+++ b/engines/bladerunner/ui/kia_section_clues.h
@@ -36,6 +36,7 @@ class UIImagePicker;
class UIScrollBox;
class KIASectionClues : public KIASectionBase {
+ //TODO: use gameInfo->getClueCount(), not in original game
static const int kClueCount = 288;
struct Line {
@@ -49,7 +50,7 @@ class KIASectionClues : public KIASectionBase {
UIScrollBox *_cluesScrollBox;
UIScrollBox *_filterScrollBox;
- bool _isVisible;
+ bool _isOpen;
bool _debugIntangible;
int _debugNop;
ActorClues *_clues;
diff --git a/engines/bladerunner/ui/kia_section_crimes.cpp b/engines/bladerunner/ui/kia_section_crimes.cpp
index 4cfaaedbad..b0b3d7c234 100644
--- a/engines/bladerunner/ui/kia_section_crimes.cpp
+++ b/engines/bladerunner/ui/kia_section_crimes.cpp
@@ -22,16 +22,459 @@
#include "bladerunner/ui/kia_section_crimes.h"
+#include "bladerunner/actor_clues.h"
+#include "bladerunner/audio_player.h"
#include "bladerunner/bladerunner.h"
+#include "bladerunner/crimes_database.h"
+#include "bladerunner/font.h"
+#include "bladerunner/game_constants.h"
+#include "bladerunner/game_flags.h"
+#include "bladerunner/game_info.h"
+#include "bladerunner/shape.h"
+#include "bladerunner/script/kia.h"
+#include "bladerunner/suspects_database.h"
+#include "bladerunner/text_resource.h"
+#include "bladerunner/ui/kia.h"
+#include "bladerunner/ui/kia_log.h"
+#include "bladerunner/ui/kia_section_suspects.h"
+#include "bladerunner/ui/kia_shapes.h"
+#include "bladerunner/ui/ui_container.h"
+#include "bladerunner/ui/ui_image_picker.h"
+#include "bladerunner/ui/ui_scroll_box.h"
+
+
+#include "graphics/surface.h"
namespace BladeRunner {
-KIASectionCrimes::KIASectionCrimes(BladeRunnerEngine *vm)
- : KIASectionBase(vm)
- , _shape(vm) {
+KIASectionCrimes::KIASectionCrimes(BladeRunnerEngine *vm, ActorClues *clues) : KIASectionBase(vm) {
+ _uiContainer = new UIContainer(_vm);
+ _isOpen = false;
+ _clues = clues;
+
+ _mouseX = 0;
+ _mouseY = 0;
+
+ _buttons = new UIImagePicker(_vm, 5);
+
+ _cluesScrollBox = new UIScrollBox(_vm, scrollBoxCallback, this, 50, 1, false, Common::Rect(312, 172, 500, 376), Common::Rect(506, 160, 506, 394));
+ _uiContainer->add(_cluesScrollBox);
+
+ _acquiredClueCount = 0;
+
+ _crimeSelected = -1;
+ _crimesFoundCount = 0;
+ _crimesFound.resize(_vm->_gameInfo->getCrimeCount());
+
+ _suspectSelected = -1;
+ _suspectPhotoShapeId = -1;
+ _suspectPhotoShape = nullptr;
+ _suspectsFoundCount = 0;
+ _suspectsFound.resize(_vm->_gameInfo->getSuspectCount());
+ _suspectsWithIdentity.resize(_vm->_gameInfo->getSuspectCount());
}
KIASectionCrimes::~KIASectionCrimes() {
+ delete _suspectPhotoShape;
+
+ _uiContainer->clear();
+
+ delete _cluesScrollBox;
+ delete _buttons;
+ delete _uiContainer;
+}
+
+void KIASectionCrimes::open() {
+ _scheduledSwitch = false;
+
+ _buttons->resetImages();
+ _buttons->defineImage(0, Common::Rect(136, 326, 185, 342), nullptr, _vm->_kia->_shapes->get(32), _vm->_kia->_shapes->get(36), _vm->_textKIA->getText(32));
+ _buttons->defineImage(1, Common::Rect(218, 326, 269, 342), nullptr, _vm->_kia->_shapes->get(33), _vm->_kia->_shapes->get(37), _vm->_textKIA->getText(33));
+ _buttons->defineImage(2, Common::Rect(354, 128, 404, 144), nullptr, _vm->_kia->_shapes->get(30), _vm->_kia->_shapes->get(34), _vm->_textKIA->getText(34));
+ _buttons->defineImage(3, Common::Rect(425, 128, 474, 144), nullptr, _vm->_kia->_shapes->get(31), _vm->_kia->_shapes->get(35), _vm->_textKIA->getText(35));
+ _buttons->defineImage(4, Common::Rect(142, 150, 260, 297), nullptr, nullptr, nullptr, _vm->_textKIA->getText(36));
+ _buttons->activate(nullptr, nullptr, nullptr, mouseUpCallback, this);
+
+ _cluesScrollBox->show();
+
+ populateAcquiredClues();
+ populateCrimes();
+ populateSuspects();
+ populateVisibleClues();
+ updateSuspectPhoto();
+
+ _isOpen = true;
+}
+
+void KIASectionCrimes::close() {
+ if (!_isOpen) {
+ return;
+ }
+ _isOpen = false;
+ _buttons->deactivate();
+ _cluesScrollBox->hide();
+ if (_suspectPhotoShapeId != -1) {
+ delete _suspectPhotoShape;
+ _suspectPhotoShape = nullptr;
+ _suspectPhotoShapeId = -1;
+ }
+}
+
+void KIASectionCrimes::draw(Graphics::Surface &surface) {
+ const char *text = nullptr;
+ if (_suspectPhotoShapeId != -1) {
+ _suspectPhotoShape->draw(surface, 201 - _suspectPhotoShape->getWidth() / 2, 223 - _suspectPhotoShape->getHeight() / 2);
+ }
+ if (_suspectPhotoShapeId == 14 || _suspectPhotoShapeId == 13) {
+ text = _vm->_textKIA->getText(49);
+ _vm->_mainFont->drawColor(text, surface, 201 - _vm->_mainFont->getTextWidth(text) / 2, 218, 0x7FFF);
+ }
+
+ surface.fillRect(Common::Rect(120, 134, 250, 145), 0);
+ surface.hLine(120, 133, 250, 0x18A5);
+ surface.hLine(120, 146, 250, 0x2D4C);
+ surface.vLine(119, 134, 145, 0x18A5);
+ surface.vLine(251, 134, 145, 0x2D4C);
+ surface.hLine(251, 146, 251, 0x2509);
+
+ if (_crimeSelected == -1) {
+ text = _vm->_textKIA->getText(49);
+ } else {
+ text = _vm->_textCrimes->getText(_crimeSelected);
+ }
+
+ _vm->_mainFont->drawColor(text, surface, 185 - _vm->_mainFont->getTextWidth(text) / 2, 136, 0x46BF);
+
+ surface.fillRect(Common::Rect(136, 304, 266, 315), 0);
+ surface.hLine(136, 303, 266, 0x18A5);
+ surface.hLine(136, 316, 266, 0x2D4C);
+ surface.vLine(135, 304, 315, 0x18A5);
+ surface.vLine(267, 304, 315, 0x2D4C);
+ surface.hLine(267, 316, 267, 0x2509);
+
+ char generatedText[64];
+ if (_suspectSelected == -1) {
+ text = _vm->_textKIA->getText(22);
+ } else {
+ const char *suspectName = _vm->_suspectsDatabase->get(_suspectSelected)->getName();
+ if (_suspectsWithIdentity[_suspectSelected]) {
+ text = suspectName;
+ } else if (_vm->_suspectsDatabase->get(_suspectSelected)->getSex()) {
+ sprintf(generatedText, "%s %s", _vm->_textKIA->getText(20), KIASectionSuspects::scrambleSuspectsName(suspectName));
+ text = generatedText;
+ } else {
+ sprintf(generatedText, "%s %s", _vm->_textKIA->getText(21), KIASectionSuspects::scrambleSuspectsName(suspectName));
+ text = generatedText;
+ }
+ }
+ _vm->_mainFont->drawColor(text, surface, 201 - _vm->_mainFont->getTextWidth(text) / 2, 306, 0x46BF);
+
+ _uiContainer->draw(surface);
+ _buttons->draw(surface);
+ _buttons->drawTooltip(surface, _mouseX, _mouseY);
+}
+
+void KIASectionCrimes::handleMouseMove(int mouseX, int mouseY) {
+ _mouseX = mouseX;
+ _mouseY = mouseY;
+ _buttons->handleMouseAction(mouseX, mouseY, false, false, false);
+ _uiContainer->handleMouseMove(mouseX, mouseY);
+}
+
+void KIASectionCrimes::handleMouseDown(bool mainButton) {
+ if (mainButton) {
+ _buttons->handleMouseAction(_mouseX, _mouseY, true, false, false);
+ }
+ _uiContainer->handleMouseDown(!mainButton);
+}
+
+void KIASectionCrimes::handleMouseUp(bool mainButton) {
+ if (mainButton) {
+ _buttons->handleMouseAction(_mouseX, _mouseY, false, true, false);
+ }
+ _uiContainer->handleMouseUp(!mainButton);
+}
+
+void KIASectionCrimes::saveToLog() {
+ int data[] = { _crimeSelected, _suspectSelected };
+ _vm->_kia->_log->add(2, sizeof(data), &data);
+}
+
+void KIASectionCrimes::loadFromLog() {
+ const int *data = (const int*)_vm->_kia->_log->getCurrentData();
+ _crimeSelected = data[0];
+ _suspectSelected = data[1];
+ populateSuspects();
+ populateVisibleClues();
+}
+
+void KIASectionCrimes::selectCrime(int crimeId) {
+ _crimeSelected = crimeId;
+ populateSuspects();
+ populateVisibleClues();
+ updateSuspectPhoto();
+}
+
+void KIASectionCrimes::scrollBoxCallback(void *callbackData, void *source, int lineData, int mouseButton) {
+ KIASectionCrimes *self = (KIASectionCrimes *)callbackData;
+
+ if (source == self->_cluesScrollBox && lineData >= 0) {
+ if (mouseButton) {
+ if (self->_vm->_gameFlags->query(kFlagKIAPrivacyAddon)) {
+ self->_vm->_audioPlayer->playAud(self->_vm->_gameInfo->getSfxTrack(511), 70, 0, 0, 50, 0);
+
+ if (self->_clues->isPrivate(lineData)) {
+ self->_clues->setPrivate(lineData, false);
+ self->_cluesScrollBox->resetFlags(lineData, 0x08);
+ } else {
+ self->_clues->setPrivate(lineData, true);
+ self->_cluesScrollBox->setFlags(lineData, 0x08);
+ }
+ }
+ } else {
+ self->_clues->setViewed(lineData, true);
+ self->_cluesScrollBox->resetHighlight(lineData);
+ self->_vm->_kia->_script->playClueAssetScript(0, lineData);
+ }
+ }
+}
+
+void KIASectionCrimes::mouseUpCallback(int buttonId, void *callbackData) {
+ ((KIASectionCrimes *)callbackData)->onButtonPressed(buttonId);
+}
+
+void KIASectionCrimes::onButtonPressed(int buttonId) {
+ switch (buttonId) {
+ case 0:
+ prevSuspect();
+ break;
+ case 1:
+ nextSuspect();
+ break;
+ case 2:
+ prevCrime();
+ break;
+ case 3:
+ nextCrime();
+ break;
+ case 4:
+ if (_suspectSelected != -1) {
+ _scheduledSwitch = true;
+ }
+ break;
+ }
+}
+
+void KIASectionCrimes::populateAcquiredClues() {
+ _acquiredClueCount = 0;
+ for (int i = 0; i < kClueCount; ++i) {
+ if (_clues->isAcquired(i)) {
+ _acquiredClues[_acquiredClueCount].clueId = i;
+ _acquiredClues[_acquiredClueCount].actorId = _clues->getFromActorId(i);
+ ++_acquiredClueCount;
+ }
+ }
+ // sort clues by name, is it necessary
+}
+
+void KIASectionCrimes::populateCrimes() {
+ int firstCrime = -1;
+ int crimeCount = _vm->_gameInfo->getCrimeCount();
+ for (int i = 0; i < crimeCount; ++i) {
+ _crimesFound[i] = false;
+ }
+
+ _crimesFoundCount = 0;
+
+ if (!_acquiredClueCount) {
+ return;
+ }
+
+ for (int i = 0; i < crimeCount; ++i) {
+ for (int j = 0; j < _acquiredClueCount; ++j) {
+ if (_vm->_crimesDatabase->getCrime(_acquiredClues[j].clueId) == i) {
+ if (firstCrime == -1) {
+ firstCrime = i;
+ }
+ _crimesFound[i] = true;
+ ++_crimesFoundCount;
+ }
+ }
+ }
+
+ if (_crimesFoundCount > 0 && _crimeSelected == -1) {
+ _crimeSelected = firstCrime;
+ }
+}
+
+void KIASectionCrimes::populateSuspects() {
+ int firstSuspect = -1;
+ int suspectCount = _vm->_gameInfo->getSuspectCount();
+
+ for (int i = 0; i < suspectCount; ++i) {
+ _suspectsFound[i] = false;
+ _suspectsWithIdentity[i] = false;
+ }
+
+ _suspectsFoundCount = 0;
+
+ if (!_acquiredClueCount || _crimeSelected == -1) {
+ return;
+ }
+
+ for (int i = 0; i < suspectCount; ++i) {
+ for (int j = 0; j < _acquiredClueCount; ++j) {
+ if (_vm->_crimesDatabase->getCrime(_acquiredClues[j].clueId) == _crimeSelected
+ && _vm->_suspectsDatabase->get(i)->hasClue(_acquiredClues[j].clueId)
+ ) {
+ if (firstSuspect == -1) {
+ firstSuspect = i;
+ }
+ _suspectsFound[i] = true;
+ ++_suspectsFoundCount;
+ }
+ }
+
+ if (_suspectsFound[i]) {
+ for (int j = 0; j < _acquiredClueCount; ++j) {
+ if (_vm->_suspectsDatabase->get(i)->hasIdentityClue(_acquiredClues[j].clueId)) {
+ _suspectsWithIdentity[i] = true;
+ }
+ }
+ }
+ }
+
+ if (_suspectsFoundCount) {
+ if (_suspectSelected == -1 || !_suspectsFound[_suspectSelected]) {
+ _suspectSelected = firstSuspect;
+ }
+ } else {
+ _suspectSelected = -1;
+ }
+}
+
+void KIASectionCrimes::populateVisibleClues() {
+ _cluesScrollBox->clearLines();
+ if (_crimeSelected != -1) {
+ for (uint i = 0; i < _vm->_gameInfo->getClueCount(); ++i) {
+ if (_vm->_crimesDatabase->getAssetType(i) != -1
+ && _vm->_crimesDatabase->getCrime(i) == _crimeSelected
+ && _clues->isAcquired(i)
+ ) {
+ int flags = 0x30;
+ if (_clues->isPrivate(i)) {
+ flags = 0x08;
+ } else if (_clues->isViewed(i)) {
+ flags = 0x10;
+ }
+ _cluesScrollBox->addLine(_vm->_crimesDatabase->getClueText(i), i, flags);
+ }
+ }
+ _cluesScrollBox->sortLines();
+ }
+}
+
+void KIASectionCrimes::updateSuspectPhoto() {
+ if (_suspectPhotoShapeId != -1) {
+ delete _suspectPhotoShape;
+ _suspectPhotoShape = nullptr;
+ }
+
+ if (_suspectSelected == -1) {
+ _suspectPhotoShapeId = -1;
+ return;
+ }
+
+ SuspectDatabaseEntry *suspect = _vm->_suspectsDatabase->get(_suspectSelected);
+
+ _suspectPhotoShapeId = -1;
+ int photoCluesCount = suspect->getPhotoCount();
+ if (photoCluesCount > 0) {
+ for (int i = 0 ; i < photoCluesCount; i++) {
+ //TODO: weird stuff going on here... it's using index instead id, also some field is used but its always -1
+ if (_clues->isAcquired(suspect->getPhotoClueId(i))) {
+ _suspectPhotoShapeId = suspect->getPhotoShapeId(i);
+ break;
+ }
+ }
+ }
+
+ if (_suspectPhotoShapeId == -1) {
+ if (suspect->getSex()) {
+ _suspectPhotoShapeId = 14;
+ } else {
+ _suspectPhotoShapeId = 13;
+ }
+ }
+
+ if (_suspectPhotoShapeId != -1) {
+ _suspectPhotoShape = new Shape(_vm);
+ _suspectPhotoShape->readFromContainer("photos.shp", _suspectPhotoShapeId);
+ }
+}
+
+void KIASectionCrimes::nextCrime() {
+ if (_crimesFoundCount >= 2) {
+ while (true) {
+ ++_crimeSelected;
+ if (_crimeSelected >= (int)_vm->_gameInfo->getCrimeCount()){
+ _crimeSelected = 0;
+ }
+
+ if (_crimesFound[_crimeSelected]) {
+ selectCrime(_crimeSelected);
+ break;
+ }
+ }
+ }
+}
+
+void KIASectionCrimes::prevCrime() {
+ if (_crimesFoundCount >= 2) {
+ while (true) {
+ --_crimeSelected;
+ if (_crimeSelected < 0) {
+ _crimeSelected = _vm->_gameInfo->getCrimeCount() - 1;
+ }
+
+ if (_crimesFound[_crimeSelected]) {
+ selectCrime(_crimeSelected);
+ break;
+ }
+ }
+ }
+}
+
+void KIASectionCrimes::nextSuspect() {
+ if (_suspectsFoundCount >= 2) {
+ while (true) {
+ ++_suspectSelected;
+ if (_suspectSelected >= (int)_vm->_gameInfo->getSuspectCount()){
+ _suspectSelected = 0;
+ }
+
+ if (_suspectsFound[_suspectSelected]) {
+ updateSuspectPhoto();
+ break;
+ }
+ }
+ }
+}
+
+void KIASectionCrimes::prevSuspect() {
+ if (_suspectsFoundCount >= 2) {
+ while (true) {
+ --_suspectSelected;
+ if (_suspectSelected < 0){
+ _suspectSelected = _vm->_gameInfo->getSuspectCount() - 1;
+ }
+
+ if (_suspectsFound[_suspectSelected]) {
+ updateSuspectPhoto();
+ break;
+ }
+ }
+ }
}
} // End of namespace BladeRunner
diff --git a/engines/bladerunner/ui/kia_section_crimes.h b/engines/bladerunner/ui/kia_section_crimes.h
index befe5e528c..1ca60eb02b 100644
--- a/engines/bladerunner/ui/kia_section_crimes.h
+++ b/engines/bladerunner/ui/kia_section_crimes.h
@@ -26,6 +26,8 @@
#include "bladerunner/shape.h"
#include "bladerunner/ui/kia_section_base.h"
+#include "common/array.h"
+
namespace BladeRunner {
class ActorClues;
@@ -35,46 +37,78 @@ class UIImagePicker;
class UIScrollBox;
class KIASectionCrimes : public KIASectionBase {
- struct Clue
- {
+ // _vm->_gameInfo->getClueCount()
+ static const int kClueCount = 288;
+
+ struct AcquiredClue {
int clueId;
int actorId;
};
-protected:
+ bool _isOpen;
- UIContainer *_uiContainer;
- // void (__cdecl **scrollboxCallback)(int, UIScrollBoxStruc *, int, int);
- int _isOpen;
- int *_list;
- UIImagePicker *_uiImagePicker;
+ UIContainer *_uiContainer;
+ UIImagePicker *_buttons;
+ UIScrollBox *_cluesScrollBox;
- UIScrollBox *_cluesScrollbox;
ActorClues *_clues;
- int _clueInfoCount;
- Clue _clueInfo[1000];
- int _selectedCrimeId;
- int _crimesFoundCount;
- int *_crimeIsKnown;
- int _selectedSuspectId;
- int _suspectsFoundCount;
- int *_suspectIsKnown;
- int *_suspectHasIdentity;
- int _mouseX;
- int _mouseY;
- int _suspectPhotoShapeId;
- int _field_15;
- Shape _shape;
+
+ int _acquiredClueCount;
+ AcquiredClue _acquiredClues[kClueCount];
+
+ int _crimeSelected;
+
+ int _crimesFoundCount;
+ Common::Array<bool> _crimesFound;
+
+ int _suspectsFoundCount;
+ Common::Array<bool> _suspectsFound;
+ Common::Array<bool> _suspectsWithIdentity;
+
+ int _mouseX;
+ int _mouseY;
+
+ int _suspectPhotoShapeId;
+ Shape *_suspectPhotoShape;
public:
- KIASectionCrimes(BladeRunnerEngine *vm);
+ int _suspectSelected;
+
+public:
+ KIASectionCrimes(BladeRunnerEngine *vm, ActorClues *clues);
~KIASectionCrimes();
- void saveToLog() {}
- void loadFromLog() {}
+ void open();
+ void close();
+
+ void draw(Graphics::Surface &surface);
+
+ void handleMouseMove(int mouseX, int mouseY);
+ void handleMouseDown(bool mainButton);
+ void handleMouseUp(bool mainButton);
+
+ void saveToLog();
+ void loadFromLog();
+
+ void selectCrime(int crimeId);
+
+private:
+ static void scrollBoxCallback(void *callbackData, void *source, int lineData, int mouseButton);
+ static void mouseUpCallback(int buttonId, void *callbackData);
+
+ void onButtonPressed(int buttonId);
+
+ void populateAcquiredClues();
+ void populateCrimes();
+ void populateSuspects();
+ void populateVisibleClues();
+ void updateSuspectPhoto();
-protected:
+ void nextCrime();
+ void prevCrime();
+ void nextSuspect();
+ void prevSuspect();
};
} // End of namespace BladeRunner
diff --git a/engines/bladerunner/ui/kia_section_suspects.cpp b/engines/bladerunner/ui/kia_section_suspects.cpp
new file mode 100644
index 0000000000..ce13243f76
--- /dev/null
+++ b/engines/bladerunner/ui/kia_section_suspects.cpp
@@ -0,0 +1,555 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "bladerunner/ui/kia_section_suspects.h"
+
+#include "bladerunner/actor_clues.h"
+#include "bladerunner/audio_player.h"
+#include "bladerunner/bladerunner.h"
+#include "bladerunner/crimes_database.h"
+#include "bladerunner/font.h"
+#include "bladerunner/game_constants.h"
+#include "bladerunner/game_flags.h"
+#include "bladerunner/game_info.h"
+#include "bladerunner/shape.h"
+#include "bladerunner/script/kia.h"
+#include "bladerunner/suspects_database.h"
+#include "bladerunner/text_resource.h"
+#include "bladerunner/ui/kia.h"
+#include "bladerunner/ui/kia_log.h"
+#include "bladerunner/ui/kia_shapes.h"
+#include "bladerunner/ui/ui_check_box.h"
+#include "bladerunner/ui/ui_container.h"
+#include "bladerunner/ui/ui_image_picker.h"
+#include "bladerunner/ui/ui_scroll_box.h"
+
+
+#include "graphics/surface.h"
+
+namespace BladeRunner {
+
+KIASectionSuspects::KIASectionSuspects(BladeRunnerEngine *vm, ActorClues *clues) : KIASectionBase(vm) {
+ _uiContainer = new UIContainer(_vm);
+ _isOpen = false;
+ _clues = clues;
+
+ _mouseX = 0;
+ _mouseY = 0;
+
+ _whereaboutsFilter = true;
+ _MOFilter = true;
+ _replicantFilter = true;
+ _nonReplicantFilter = true;
+ _othersFilter = true;
+
+ _buttons = new UIImagePicker(_vm, 4);
+
+ _whereaboutsCheckBox = new UICheckBox(_vm, checkBoxCallback, this, Common::Rect(142, 318, 275, 328), 1, _whereaboutsFilter);
+ _MOCheckBox = new UICheckBox(_vm, checkBoxCallback, this, Common::Rect(142, 328, 275, 338), 1, _MOFilter);
+ _replicantCheckBox = new UICheckBox(_vm, checkBoxCallback, this, Common::Rect(142, 338, 275, 348), 1, _replicantFilter);
+ _nonReplicantCheckBox = new UICheckBox(_vm, checkBoxCallback, this, Common::Rect(142, 348, 275, 358), 1, _nonReplicantFilter);
+ _othersCheckBox = new UICheckBox(_vm, checkBoxCallback, this, Common::Rect(142, 358, 275, 368), 1, _othersFilter);
+ _cluesScrollBox = new UIScrollBox(_vm, scrollBoxCallback, this,_vm->_gameInfo->getClueCount(), 1, false, Common::Rect(312, 172, 500, 376), Common::Rect(506, 160, 506, 394));
+ _crimesScrollBox = new UIScrollBox(_vm, scrollBoxCallback, this, 50, 1, false, Common::Rect(154, 258, 291, 298), Common::Rect(120, 249, 120, 297));
+ _uiContainer->add(_whereaboutsCheckBox);
+ _uiContainer->add(_MOCheckBox);
+ _uiContainer->add(_replicantCheckBox);
+ _uiContainer->add(_nonReplicantCheckBox);
+ _uiContainer->add(_othersCheckBox);
+ _uiContainer->add(_cluesScrollBox);
+ _uiContainer->add(_crimesScrollBox);
+
+ _acquiredClueCount = 0;
+
+ _suspectSelected = -1;
+ _suspectPhotoShapeId = -1;
+ _suspectPhotoShape = nullptr;
+ _suspectsFoundCount = 0;
+ _suspectsFound.resize(_vm->_gameInfo->getSuspectCount());
+ _suspectsWithIdentity.resize(_vm->_gameInfo->getSuspectCount());
+
+ _crimeSelected = -1;
+}
+
+KIASectionSuspects::~KIASectionSuspects() {
+ delete _suspectPhotoShape;
+
+ _uiContainer->clear();
+
+ delete _crimesScrollBox;
+ delete _cluesScrollBox;
+ delete _othersCheckBox;
+ delete _nonReplicantCheckBox;
+ delete _replicantCheckBox;
+ delete _MOCheckBox;
+ delete _whereaboutsCheckBox;
+ delete _buttons;
+ delete _uiContainer;
+}
+
+void KIASectionSuspects::open() {
+ _scheduledSwitch = false;
+
+ _buttons->resetImages();
+ _buttons->defineImage(0, Common::Rect(142, 380, 191, 395), _vm->_kia->_shapes->get(79), _vm->_kia->_shapes->get(80), _vm->_kia->_shapes->get(81), _vm->_textKIA->getText(30));
+ _buttons->defineImage(1, Common::Rect(193, 380, 242, 395), _vm->_kia->_shapes->get(76), _vm->_kia->_shapes->get(77), _vm->_kia->_shapes->get(77), _vm->_textKIA->getText(31));
+ _buttons->defineImage(2, Common::Rect(354, 128, 404, 144), nullptr, _vm->_kia->_shapes->get(30), _vm->_kia->_shapes->get(34), _vm->_textKIA->getText(32));
+ _buttons->defineImage(3, Common::Rect(424, 128, 474, 144), nullptr, _vm->_kia->_shapes->get(31), _vm->_kia->_shapes->get(35), _vm->_textKIA->getText(33));
+ _buttons->activate(nullptr, nullptr, nullptr, mouseUpCallback, this);
+
+ _cluesScrollBox->show();
+ _crimesScrollBox->show();
+ _whereaboutsCheckBox->enable();
+ _MOCheckBox->enable();
+ _replicantCheckBox->enable();
+ _nonReplicantCheckBox->enable();
+ _othersCheckBox->enable();
+ _cluesScrollBox->show();
+ _crimesScrollBox->show();
+
+ populateAcquiredClues();
+ populateSuspects();
+ populateCrimes();
+ populateVisibleClues();
+ updateSuspectPhoto();
+
+ _isOpen = true;
+}
+
+void KIASectionSuspects::close() {
+ if (!_isOpen) {
+ return;
+ }
+ _isOpen = false;
+ _buttons->deactivate();
+ _cluesScrollBox->hide();
+ if (_suspectPhotoShapeId != -1) {
+ delete _suspectPhotoShape;
+ _suspectPhotoShape = nullptr;
+ _suspectPhotoShapeId = -1;
+ }
+}
+
+void KIASectionSuspects::draw(Graphics::Surface &surface) {
+ const char *text = nullptr;
+ if (_suspectPhotoShapeId != -1) {
+ _suspectPhotoShape->draw(surface, 142, 150);
+ }
+ if (_suspectPhotoShapeId == 14 || _suspectPhotoShapeId == 13) {
+ text = _vm->_textKIA->getText(49);
+ _vm->_mainFont->drawColor(text, surface, 190 - _vm->_mainFont->getTextWidth(text) / 2, 201, 0x7FFF);
+ }
+
+ _whereaboutsCheckBox->setChecked(_whereaboutsFilter);
+ _MOCheckBox->setChecked(_MOFilter);
+ _replicantCheckBox->setChecked(_replicantFilter);
+ _nonReplicantCheckBox->setChecked(_nonReplicantFilter);
+ _othersCheckBox->setChecked(_othersFilter);
+
+ _uiContainer->draw(surface);
+
+
+ _vm->_mainFont->drawColor(_vm->_textKIA->getText(0), surface, 300, 162, 0x77DF);
+ _vm->_mainFont->drawColor(_vm->_textKIA->getText(46), surface, 142, 248, 0x77DF);
+ _vm->_mainFont->drawColor(_vm->_textKIA->getText(47), surface, 142, 308, 0x77DF);
+ _vm->_mainFont->drawColor(_vm->_textKIA->getText(14), surface, 154, 319, 0x25B3);
+ _vm->_mainFont->drawColor(_vm->_textKIA->getText(15), surface, 154, 329, 0x31F7);
+ _vm->_mainFont->drawColor(_vm->_textKIA->getText(16), surface, 154, 339, 0x3A5B);
+ _vm->_mainFont->drawColor(_vm->_textKIA->getText(17), surface, 154, 349, 0x31F7);
+ _vm->_mainFont->drawColor(_vm->_textKIA->getText(48), surface, 154, 359, 0x25B3);
+
+
+ surface.fillRect(Common::Rect(120, 134, 250, 145), 0);
+ surface.hLine(120, 133, 250, 0x18A5);
+ surface.hLine(120, 146, 250, 0x2D4C);
+ surface.vLine(119, 134, 145, 0x18A5);
+ surface.vLine(251, 134, 145, 0x2D4C);
+ surface.hLine(251, 146, 251, 0x2509);
+
+ char generatedText[64];
+ if (_suspectSelected == -1) {
+ text = _vm->_textKIA->getText(22);
+ } else {
+ const char *suspectName = _vm->_suspectsDatabase->get(_suspectSelected)->getName();
+ if (_suspectsWithIdentity[_suspectSelected]) {
+ text = suspectName;
+ } else if (_vm->_suspectsDatabase->get(_suspectSelected)->getSex()) {
+ sprintf(generatedText, "%s %s", _vm->_textKIA->getText(20), scrambleSuspectsName(suspectName));
+ text = generatedText;
+ } else {
+ sprintf(generatedText, "%s %s", _vm->_textKIA->getText(21), scrambleSuspectsName(suspectName));
+ text = generatedText;
+ }
+ }
+
+ _vm->_mainFont->drawColor(text, surface, 185 - _vm->_mainFont->getTextWidth(text) / 2, 136, 0x46BF);
+
+ _buttons->draw(surface);
+ _buttons->drawTooltip(surface, _mouseX, _mouseY);
+}
+
+void KIASectionSuspects::handleMouseMove(int mouseX, int mouseY) {
+ _mouseX = mouseX;
+ _mouseY = mouseY;
+ _buttons->handleMouseAction(mouseX, mouseY, false, false, false);
+ _uiContainer->handleMouseMove(mouseX, mouseY);
+}
+
+void KIASectionSuspects::handleMouseDown(bool mainButton) {
+ if (mainButton) {
+ _buttons->handleMouseAction(_mouseX, _mouseY, true, false, false);
+ }
+ _uiContainer->handleMouseDown(!mainButton);
+}
+
+void KIASectionSuspects::handleMouseUp(bool mainButton) {
+ if (mainButton) {
+ _buttons->handleMouseAction(_mouseX, _mouseY, false, true, false);
+ }
+ _uiContainer->handleMouseUp(!mainButton);
+}
+
+void KIASectionSuspects::saveToLog() {
+ int data[] = {
+ _crimeSelected,
+ _suspectSelected,
+ _whereaboutsFilter,
+ _MOFilter,
+ _replicantFilter,
+ _nonReplicantFilter,
+ _othersFilter
+ };
+ _vm->_kia->_log->add(1, sizeof(data), &data);
+}
+
+void KIASectionSuspects::loadFromLog() {
+ const int *data = (const int*)_vm->_kia->_log->getCurrentData();
+ _crimeSelected = data[0];
+ _suspectSelected = data[1];
+ _whereaboutsFilter = data[2];
+ _MOFilter = data[3];
+ _replicantFilter = data[4];
+ _nonReplicantFilter = data[5];
+ _othersFilter = data[6];
+ populateCrimes();
+ populateVisibleClues();
+}
+
+void KIASectionSuspects::selectSuspect(int suspectId) {
+ _suspectSelected = suspectId;
+ populateCrimes();
+ populateVisibleClues();
+ updateSuspectPhoto();
+}
+
+const char *KIASectionSuspects::scrambleSuspectsName(const char *name) {
+ static char buffer[32];
+
+ char *bufferPtr = buffer;
+ const char *namePtr = name;
+
+ for (int i = 0 ; i < 6; ++i) {
+ if (Common::isAlpha(*namePtr)) {
+ char upper = toupper(*namePtr);
+ if ( upper < 'J' ){
+ *bufferPtr++ = upper - 16;
+ } else {
+ *bufferPtr++ = upper - 9;
+ }
+ } else {
+ *bufferPtr++ = '0';
+ }
+ if (*namePtr) {
+ ++namePtr;
+ }
+ if (i == 1) {
+ *bufferPtr++ = '-';
+ }
+ }
+ *bufferPtr = 0;
+ return buffer;
+}
+
+void KIASectionSuspects::scrollBoxCallback(void *callbackData, void *source, int lineData, int mouseButton) {
+ KIASectionSuspects *self = (KIASectionSuspects *)callbackData;
+
+ if (source == self->_cluesScrollBox && lineData >= 0) {
+ if (mouseButton) {
+ if (self->_vm->_gameFlags->query(kFlagKIAPrivacyAddon)) {
+ self->_vm->_audioPlayer->playAud(self->_vm->_gameInfo->getSfxTrack(511), 70, 0, 0, 50, 0);
+
+ if (self->_clues->isPrivate(lineData)) {
+ self->_clues->setPrivate(lineData, false);
+ self->_cluesScrollBox->resetFlags(lineData, 0x08);
+ } else {
+ self->_clues->setPrivate(lineData, true);
+ self->_cluesScrollBox->setFlags(lineData, 0x08);
+ }
+ }
+ } else {
+ self->_clues->setViewed(lineData, true);
+ self->_cluesScrollBox->resetHighlight(lineData);
+ self->_vm->_kia->_script->playClueAssetScript(0, lineData);
+ }
+ } else if (source == self->_crimesScrollBox && lineData >= 0 && !mouseButton) {
+ self->_crimeSelected = lineData - 5;
+ self->_scheduledSwitch = true;
+ }
+}
+
+void KIASectionSuspects::checkBoxCallback(void *callbackData, void *source) {
+ KIASectionSuspects *self = (KIASectionSuspects *)callbackData;
+ UICheckBox *checkBox = (UICheckBox *)source;
+
+ if (checkBox == self->_whereaboutsCheckBox) {
+ self->_whereaboutsFilter = checkBox->_isChecked;
+ } else if (checkBox == self->_MOCheckBox) {
+ self->_MOFilter = checkBox->_isChecked;
+ } else if (checkBox == self->_replicantCheckBox) {
+ self->_replicantFilter = checkBox->_isChecked;
+ } else if (checkBox == self->_nonReplicantCheckBox) {
+ self->_nonReplicantFilter = checkBox->_isChecked;
+ } else if (checkBox == self->_othersCheckBox) {
+ self->_othersFilter = checkBox->_isChecked;
+ }
+ self->populateVisibleClues();
+}
+
+void KIASectionSuspects::mouseUpCallback(int buttonId, void *callbackData) {
+ ((KIASectionSuspects *)callbackData)->onButtonPressed(buttonId);
+}
+
+void KIASectionSuspects::onButtonPressed(int buttonId) {
+ switch (buttonId) {
+ case 0:
+ enableAllFilters();
+ break;
+ case 1:
+ disableAllFilters();
+ break;
+ case 2:
+ prevSuspect();
+ break;
+ case 3:
+ nextSuspect();
+ break;
+ }
+}
+
+void KIASectionSuspects::populateAcquiredClues() {
+ _acquiredClueCount = 0;
+ for (int i = 0; i < kClueCount; ++i) {
+ if (_clues->isAcquired(i)) {
+ _acquiredClues[_acquiredClueCount].clueId = i;
+ _acquiredClues[_acquiredClueCount].actorId = _clues->getFromActorId(i);
+ ++_acquiredClueCount;
+ }
+ }
+ // sort clues by name, is it necessary
+}
+
+void KIASectionSuspects::populateSuspects() {
+ int firstSuspect = -1;
+ int suspectCount = _vm->_gameInfo->getSuspectCount();
+
+ for (int i = 0; i < suspectCount; ++i) {
+ _suspectsFound[i] = false;
+ _suspectsWithIdentity[i] = false;
+ }
+
+ _suspectsFoundCount = 0;
+
+ if (!_acquiredClueCount) {
+ return;
+ }
+
+ for (int i = 0; i < suspectCount; ++i) {
+ for (int j = 0; j < _acquiredClueCount; ++j) {
+ if (_vm->_crimesDatabase->getCrime(_acquiredClues[j].clueId) != -1
+ && _vm->_suspectsDatabase->get(i)->hasClue(_acquiredClues[j].clueId)
+ ) {
+ if (firstSuspect == -1) {
+ firstSuspect = i;
+ }
+ _suspectsFound[i] = true;
+ ++_suspectsFoundCount;
+ }
+ }
+
+ if (_suspectsFound[i]) {
+ for (int j = 0; j < _acquiredClueCount; ++j) {
+ if (_vm->_suspectsDatabase->get(i)->hasIdentityClue(_acquiredClues[j].clueId)) {
+ _suspectsWithIdentity[i] = true;
+ }
+ }
+ }
+ }
+
+ if (_suspectsFoundCount && _suspectSelected == -1) {
+ _suspectSelected = firstSuspect;
+ }
+}
+
+void KIASectionSuspects::populateCrimes() {
+ _crimesScrollBox->clearLines();
+ if (_suspectsFoundCount > 0 && _suspectSelected != -1) {
+ for (int i = 0; i < (int)_vm->_gameInfo->getCrimeCount(); ++i) {
+ for (int j = 0; j < _acquiredClueCount; ++j) {
+ if (_vm->_crimesDatabase->getCrime(_acquiredClues[j].clueId) == i
+ && _vm->_suspectsDatabase->get(_suspectSelected)->hasClue(_acquiredClues[j].clueId)) {
+ _crimesScrollBox->addLine(_vm->_textCrimes->getText(i), i + 5, 0);
+ break;
+ }
+ }
+ }
+ _crimesScrollBox->sortLines();
+ }
+}
+
+void KIASectionSuspects::populateVisibleClues() {
+ _cluesScrollBox->clearLines();
+ if (_suspectsFoundCount > 0 && _suspectSelected != -1) {
+ for (int i = 0; i < _acquiredClueCount; ++i) {
+ int clueId = _acquiredClues[i].clueId;
+
+ if (_vm->_crimesDatabase->getAssetType(i) != -1) {
+ SuspectDatabaseEntry *suspect = _vm->_suspectsDatabase->get(_suspectSelected);
+
+ bool showClue = false;
+
+ if (_whereaboutsFilter && suspect->hasWhereaboutsClue(clueId)) {
+ showClue = true;
+ } else if (_MOFilter && suspect->hasMOClue(clueId)) {
+ showClue = true;
+ } else if (_replicantFilter && suspect->hasReplicantClue(clueId)) {
+ showClue = true;
+ } else if (_nonReplicantFilter && suspect->hasNonReplicantClue(clueId)) {
+ showClue = true;
+ } else if (_othersFilter && suspect->hasOtherClue(clueId)) {
+ showClue = true;
+ }
+
+ if (showClue) {
+ int flags = 0x30;
+ if (_clues->isPrivate(clueId)) {
+ flags = 0x08;
+ } else if (_clues->isViewed(clueId)) {
+ flags = 0x10;
+ }
+ _cluesScrollBox->addLine(_vm->_crimesDatabase->getClueText(clueId), clueId, flags);
+ }
+ }
+ }
+ _cluesScrollBox->sortLines();
+ }
+}
+
+void KIASectionSuspects::updateSuspectPhoto() {
+ if (_suspectPhotoShapeId != -1) {
+ delete _suspectPhotoShape;
+ _suspectPhotoShape = nullptr;
+ }
+
+ if (_suspectSelected == -1) {
+ _suspectPhotoShapeId = -1;
+ return;
+ }
+
+ SuspectDatabaseEntry *suspect = _vm->_suspectsDatabase->get(_suspectSelected);
+
+ _suspectPhotoShapeId = -1;
+ int photoCluesCount = suspect->getPhotoCount();
+ if (photoCluesCount > 0) {
+ for (int i = 0 ; i < photoCluesCount; i++) {
+ //TODO: weird stuff going on here... it's using index instead id, also some field is used but its always -1
+ if (_clues->isAcquired(suspect->getPhotoClueId(i))) {
+ _suspectPhotoShapeId = suspect->getPhotoShapeId(i);
+ break;
+ }
+ }
+ }
+
+ if (_suspectPhotoShapeId == -1) {
+ if (suspect->getSex()) {
+ _suspectPhotoShapeId = 14;
+ } else {
+ _suspectPhotoShapeId = 13;
+ }
+ }
+
+ if (_suspectPhotoShapeId != -1) {
+ _suspectPhotoShape = new Shape(_vm);
+ _suspectPhotoShape->readFromContainer("photos.shp", _suspectPhotoShapeId);
+ }
+}
+
+void KIASectionSuspects::nextSuspect() {
+ if (_suspectsFoundCount >= 2) {
+ while (true) {
+ ++_suspectSelected;
+ if (_suspectSelected >= (int)_vm->_gameInfo->getSuspectCount()){
+ _suspectSelected = 0;
+ }
+
+ if (_suspectsFound[_suspectSelected]) {
+ selectSuspect(_suspectSelected);
+ break;
+ }
+ }
+ }
+}
+
+void KIASectionSuspects::prevSuspect() {
+ if (_suspectsFoundCount >= 2) {
+ while (true) {
+ --_suspectSelected;
+ if (_suspectSelected < 0){
+ _suspectSelected = _vm->_gameInfo->getSuspectCount() - 1;
+ }
+
+ if (_suspectsFound[_suspectSelected]) {
+ selectSuspect(_suspectSelected);
+ break;
+ }
+ }
+ }
+}
+
+void KIASectionSuspects::enableAllFilters() {
+ _whereaboutsFilter = true;
+ _MOFilter = true;
+ _replicantFilter = true;
+ _nonReplicantFilter = true;
+ _othersFilter = true;
+ populateVisibleClues();
+}
+
+void KIASectionSuspects::disableAllFilters() {
+ _whereaboutsFilter = false;
+ _MOFilter = false;
+ _replicantFilter = false;
+ _nonReplicantFilter = false;
+ _othersFilter = false;
+ populateVisibleClues();
+}
+
+} // End of namespace BladeRunner
diff --git a/engines/bladerunner/ui/kia_section_suspects.h b/engines/bladerunner/ui/kia_section_suspects.h
index 94cf1bfc06..0cc957f609 100644
--- a/engines/bladerunner/ui/kia_section_suspects.h
+++ b/engines/bladerunner/ui/kia_section_suspects.h
@@ -25,15 +25,102 @@
#include "bladerunner/ui/kia_section_base.h"
+#include "common/array.h"
+
namespace BladeRunner {
+class ActorClues;
+class BladeRunnerEngine;
+class Shape;
+class UICheckBox;
+class UIContainer;
+class UIImagePicker;
+class UIScrollBox;
+
class KIASectionSuspects : public KIASectionBase {
+ // _vm->_gameInfo->getClueCount()
+ static const int kClueCount = 288;
+
+ struct AcquiredClue {
+ int clueId;
+ int actorId;
+ };
+
+ bool _isOpen;
+
+ UIContainer *_uiContainer;
+ UIImagePicker *_buttons;
+ UIScrollBox *_cluesScrollBox;
+ UIScrollBox *_crimesScrollBox;
+ UICheckBox *_whereaboutsCheckBox;
+ UICheckBox *_MOCheckBox;
+ UICheckBox *_replicantCheckBox;
+ UICheckBox *_nonReplicantCheckBox;
+ UICheckBox *_othersCheckBox;
+
+ bool _whereaboutsFilter;
+ bool _MOFilter;
+ bool _replicantFilter;
+ bool _nonReplicantFilter;
+ bool _othersFilter;
+
+ ActorClues *_clues;
+
+ int _acquiredClueCount;
+ AcquiredClue _acquiredClues[kClueCount];
+
+ int _suspectSelected;
+ int _suspectsFoundCount;
+ Common::Array<bool> _suspectsFound;
+ Common::Array<bool> _suspectsWithIdentity;
+
+ int _mouseX;
+ int _mouseY;
+
+ int _suspectPhotoShapeId;
+ Shape *_suspectPhotoShape;
public:
- KIASectionSuspects(BladeRunnerEngine *vm): KIASectionBase(vm) {}
+ int _crimeSelected;
+
+public:
+ KIASectionSuspects(BladeRunnerEngine *vm, ActorClues *clues);
+ ~KIASectionSuspects();
+
+ void open();
+ void close();
+
+ void draw(Graphics::Surface &surface);
+
+ void handleMouseMove(int mouseX, int mouseY);
+ void handleMouseDown(bool mainButton);
+ void handleMouseUp(bool mainButton);
+
+ void saveToLog();
+ void loadFromLog();
+
+ void selectSuspect(int suspectId);
+
+ static const char *scrambleSuspectsName(const char *name);
+
+private:
+ static void scrollBoxCallback(void *callbackData, void *source, int lineData, int mouseButton);
+ static void checkBoxCallback(void *callbackData, void *source);
+ static void mouseUpCallback(int buttonId, void *callbackData);
+
+ void onButtonPressed(int buttonId);
+
+ void populateAcquiredClues();
+ void populateSuspects();
+ void populateCrimes();
+ void populateVisibleClues();
+ void updateSuspectPhoto();
+
+ void nextSuspect();
+ void prevSuspect();
- void saveToLog() {}
- void loadFromLog() {}
+ void enableAllFilters();
+ void disableAllFilters();
};
} // End of namespace BladeRunner
diff --git a/engines/bladerunner/ui/spinner.cpp b/engines/bladerunner/ui/spinner.cpp
index 9018de15e6..cc913e3a9c 100644
--- a/engines/bladerunner/ui/spinner.cpp
+++ b/engines/bladerunner/ui/spinner.cpp
@@ -61,41 +61,6 @@ bool Spinner::querySelectableDestinationFlag(int destination) const {
return _isDestinationSelectable[destination];
}
-const Spinner::Destination Spinner::kSpinnerDestinationsNear[] = {
- { 0, Common::Rect(210, 263, 263, 332) },
- { 1, Common::Rect(307, 330, 361, 381) },
- { 2, Common::Rect(338, 137, 362, 169) },
- { 3, Common::Rect(248, 135, 289, 168) },
- { 4, Common::Rect(352, 222, 379, 238) },
- { -1, Common::Rect(-1,-1,-1,-1) }
-};
-
-const Spinner::Destination Spinner::kSpinnerDestinationsMedium[] = {
- { 0, Common::Rect(252, 242, 279, 283) },
- { 1, Common::Rect(301, 273, 328, 304) },
- { 2, Common::Rect(319, 182, 336, 200) },
- { 3, Common::Rect(269, 181, 293, 200) },
- { 4, Common::Rect(325, 227, 345, 240) },
- { 5, Common::Rect(259, 74, 380, 119) },
- { 6, Common::Rect(203, 124, 224, 136) },
- { 7, Common::Rect(200, 147, 222, 170) },
- { -1, Common::Rect(-1,-1,-1,-1) }
-};
-
-const Spinner::Destination Spinner::kSpinnerDestinationsFar[] = {
- { 0, Common::Rect(220, 227, 246, 262) },
- { 1, Common::Rect(260, 252, 286, 279) },
- { 2, Common::Rect(286, 178, 302, 196) },
- { 3, Common::Rect(244, 178, 263, 195) },
- { 4, Common::Rect(288, 216, 306, 228) },
- { 5, Common::Rect(249, 77, 353, 124) },
- { 6, Common::Rect(190, 127, 208, 138) },
- { 7, Common::Rect(185, 149, 206, 170) },
- { 8, Common::Rect(398, 249, 419, 268) },
- { 9, Common::Rect(390, 218, 419, 236) },
- { -1, Common::Rect(-1, -1, -1, -1) }
-};
-
int Spinner::chooseDestination(int loopId, bool immediately) {
_selectedDestination = 0;
if (!_vm->openArchive("MODE.MIX")) {
@@ -137,17 +102,17 @@ int Spinner::chooseDestination(int loopId, bool immediately) {
mapmask = 1;
if (mapmask & 4) {
- _destinations = kSpinnerDestinationsFar;
+ _destinations = getDestinationsFar();
firstShapeId = 26;
shapeCount = 20;
spinnerLoopId = 4;
} else if (mapmask & 2) {
- _destinations = kSpinnerDestinationsMedium;
+ _destinations = getDestinationsMedium();
firstShapeId = 10;
shapeCount = 16;
spinnerLoopId = 2;
} else if (mapmask & 1) {
- _destinations = kSpinnerDestinationsNear;
+ _destinations = getDestinationsNear();
firstShapeId = 0;
shapeCount = 10;
spinnerLoopId = 0;
@@ -300,4 +265,48 @@ void Spinner::resume() {
_vqaPlayer->setLoop(1, -1, kLoopSetModeJustStart, nullptr, nullptr);
}
+const Spinner::Destination *Spinner::getDestinationsFar() {
+ static const Destination destinations[] = {
+ { 0, Common::Rect(220, 227, 246, 262) },
+ { 1, Common::Rect(260, 252, 286, 279) },
+ { 2, Common::Rect(286, 178, 302, 196) },
+ { 3, Common::Rect(244, 178, 263, 195) },
+ { 4, Common::Rect(288, 216, 306, 228) },
+ { 5, Common::Rect(249, 77, 353, 124) },
+ { 6, Common::Rect(190, 127, 208, 138) },
+ { 7, Common::Rect(185, 149, 206, 170) },
+ { 8, Common::Rect(398, 249, 419, 268) },
+ { 9, Common::Rect(390, 218, 419, 236) },
+ { -1, Common::Rect(-1, -1, -1, -1) }
+ };
+ return destinations;
+}
+
+const Spinner::Destination *Spinner::getDestinationsMedium() {
+ static const Destination destinations[] = {
+ { 0, Common::Rect(252, 242, 279, 283) },
+ { 1, Common::Rect(301, 273, 328, 304) },
+ { 2, Common::Rect(319, 182, 336, 200) },
+ { 3, Common::Rect(269, 181, 293, 200) },
+ { 4, Common::Rect(325, 227, 345, 240) },
+ { 5, Common::Rect(259, 74, 380, 119) },
+ { 6, Common::Rect(203, 124, 224, 136) },
+ { 7, Common::Rect(200, 147, 222, 170) },
+ { -1, Common::Rect(-1,-1,-1,-1) }
+ };
+ return destinations;
+}
+
+const Spinner::Destination *Spinner::getDestinationsNear() {
+ static const Destination destinations[] = {
+ { 0, Common::Rect(210, 263, 263, 332) },
+ { 1, Common::Rect(307, 330, 361, 381) },
+ { 2, Common::Rect(338, 137, 362, 169) },
+ { 3, Common::Rect(248, 135, 289, 168) },
+ { 4, Common::Rect(352, 222, 379, 238) },
+ { -1, Common::Rect(-1,-1,-1,-1) }
+ };
+ return destinations;
+}
+
} // End of namespace BladeRunner
diff --git a/engines/bladerunner/ui/spinner.h b/engines/bladerunner/ui/spinner.h
index ec0f8dbe33..b1785a57eb 100644
--- a/engines/bladerunner/ui/spinner.h
+++ b/engines/bladerunner/ui/spinner.h
@@ -33,7 +33,6 @@ class Shape;
class VQAPlayer;
class UIImagePicker;
-
class Spinner {
static const int kSpinnerDestinations = 10;
@@ -42,10 +41,6 @@ class Spinner {
Common::Rect rect;
};
- static const Destination kSpinnerDestinationsNear[];
- static const Destination kSpinnerDestinationsMedium[];
- static const Destination kSpinnerDestinationsFar[];
-
BladeRunnerEngine *_vm;
bool _isDestinationSelectable[kSpinnerDestinations];
bool _isOpen;
@@ -77,6 +72,9 @@ public:
private:
static void mouseUpCallback(int, void *);
+ static const Destination *getDestinationsFar();
+ static const Destination *getDestinationsMedium();
+ static const Destination *getDestinationsNear();
};
} // End of namespace BladeRunner
diff --git a/engines/bladerunner/vqa_decoder.h b/engines/bladerunner/vqa_decoder.h
index 34a8ee3efc..5ba50a8c8a 100644
--- a/engines/bladerunner/vqa_decoder.h
+++ b/engines/bladerunner/vqa_decoder.h
@@ -218,7 +218,6 @@ private:
uint8 *_codebook;
uint8 *_cbfz;
- bool _zbufChunkComplete;
uint32 _zbufChunkSize;
uint8 *_zbufChunk;
diff --git a/engines/bladerunner/vqa_player.h b/engines/bladerunner/vqa_player.h
index d1a212ae32..297f717450 100644
--- a/engines/bladerunner/vqa_player.h
+++ b/engines/bladerunner/vqa_player.h
@@ -49,7 +49,6 @@ class VQAPlayer {
BladeRunnerEngine *_vm;
Common::SeekableReadStream *_s;
VQADecoder _decoder;
- const uint16 *_zBuffer;
Audio::QueuingAudioStream *_audioStream;
int _frame;
@@ -79,7 +78,6 @@ public:
: _vm(vm),
_s(nullptr),
_decoder(surface),
- _zBuffer(nullptr),
_audioStream(nullptr),
_frameNext(-1),
_frameBegin(-1),