aboutsummaryrefslogtreecommitdiff
path: root/engines/bladerunner/actor_clues.cpp
diff options
context:
space:
mode:
authorEugene Sandulenko2018-03-31 00:09:51 +0200
committerEugene Sandulenko2018-03-31 00:10:26 +0200
commit235dd6089fe2691c8d1b83a0e82491e9d9483939 (patch)
tree99f320d5d4a463be89cc5db0789dd6972cfa6f6c /engines/bladerunner/actor_clues.cpp
parent3b8b6e2419072a5995af7c4e9cec7a69213e7699 (diff)
downloadscummvm-rg350-235dd6089fe2691c8d1b83a0e82491e9d9483939.tar.gz
scummvm-rg350-235dd6089fe2691c8d1b83a0e82491e9d9483939.tar.bz2
scummvm-rg350-235dd6089fe2691c8d1b83a0e82491e9d9483939.zip
BLADERUNNER: Implemented ActorClues::getModifier().
This completes implementation of the automatic clue exchange
Diffstat (limited to 'engines/bladerunner/actor_clues.cpp')
-rw-r--r--engines/bladerunner/actor_clues.cpp28
1 files changed, 26 insertions, 2 deletions
diff --git a/engines/bladerunner/actor_clues.cpp b/engines/bladerunner/actor_clues.cpp
index 028832b6d1..b34e67b46e 100644
--- a/engines/bladerunner/actor_clues.cpp
+++ b/engines/bladerunner/actor_clues.cpp
@@ -22,6 +22,7 @@
#include "bladerunner/actor_clues.h"
#include "bladerunner/actor.h"
+#include "bladerunner/script/ai_script.h"
#include "bladerunner/bladerunner.h"
#include "bladerunner/game_info.h"
@@ -98,9 +99,32 @@ int ActorClues::getWeight(int clueId) const {
}
int ActorClues::getModifier(int actorId, int otherActorId, int clueId) {
- warning("STUB: getModifier(%d, %d, %d)", actorId, otherActorId, clueId);
+ Actor *actor = _vm->_actors[actorId];
+ int modifier1, modifier2, modifier3, modifier4;
+
+ int friendliness = actor->getFriendlinessToOther(otherActorId);
+ int clueWeight = actor->_clues->getWeight(clueId);
+
+ if (actor->_clues->isFlag2(clueId)) {
+ modifier1 = 100 - actor->getHonesty() - friendliness;
+ } else {
+ modifier1 = 0;
+ }
+ modifier2 = 0;
+ modifier3 = _vm->_aiScripts->callGetFriendlinessModifierIfGetsClue(otherActorId, actorId, clueId);
+
+ for (int i = 0; i < _vm->_gameInfo->getActorCount(); i++) {
+ if (i != actorId && i != otherActorId) {
+ modifier2 += (friendliness - 50) * _vm->_aiScripts->callGetFriendlinessModifierIfGetsClue(i, otherActorId, clueId) / 100;
+ }
+ }
+ modifier4 = _vm->_rnd.getRandomNumberRng(0, (100 - actor->getIntelligence()) / 10);
+
+ if (_vm->_rnd.getRandomNumberRng(0, 1) == 1) {
+ modifier4 = -modifier4;
+ }
- return 0;
+ return modifier1 + modifier2 + modifier3 + modifier4 + clueWeight;
}
static int cluesCompare(const void *p1, const void *p2) {