aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorThanasis Antoniou2019-07-29 13:56:47 +0300
committerThanasis Antoniou2019-07-29 13:57:56 +0300
commitc8a23cc401ecef6deac468766aba185bf8633db7 (patch)
tree162b16146345b5d650be0e8c272122f0b3097991 /engines
parent70126b9685912bbce290511210ab6bcccd40bcd3 (diff)
downloadscummvm-rg350-c8a23cc401ecef6deac468766aba185bf8633db7.tar.gz
scummvm-rg350-c8a23cc401ecef6deac468766aba185bf8633db7.tar.bz2
scummvm-rg350-c8a23cc401ecef6deac468766aba185bf8633db7.zip
BLADERUNNER: Fix unsorted args for getRandomNumberRng
Fix for bug #11034
Diffstat (limited to 'engines')
-rw-r--r--engines/bladerunner/actor.cpp19
-rw-r--r--engines/bladerunner/ambient_sounds.cpp34
-rw-r--r--engines/bladerunner/ui/kia_section_pogo.cpp4
3 files changed, 48 insertions, 9 deletions
diff --git a/engines/bladerunner/actor.cpp b/engines/bladerunner/actor.cpp
index e52cebf2b7..4f91218a50 100644
--- a/engines/bladerunner/actor.cpp
+++ b/engines/bladerunner/actor.cpp
@@ -976,7 +976,7 @@ void Actor::modifyFriendlinessToOther(int otherActorId, signed int change) {
}
void Actor::setFriendlinessToOther(int otherActorId, int friendliness) {
- _friendlinessToOther[otherActorId] = friendliness;
+ _friendlinessToOther[otherActorId] = CLIP(friendliness, 0, 100);
}
bool Actor::checkFriendlinessAndHonesty(int otherActorId) {
@@ -995,19 +995,19 @@ bool Actor::checkFriendlinessAndHonesty(int otherActorId) {
}
void Actor::setHonesty(int honesty) {
- _honesty = honesty;
+ _honesty = CLIP(honesty, 0, 100);
}
void Actor::setIntelligence(int intelligence) {
- _intelligence = intelligence;
+ _intelligence = CLIP(intelligence, 0, 100);
}
void Actor::setStability(int stability) {
- _stability = stability;
+ _stability = CLIP(stability, 0, 100);
}
void Actor::setCombatAggressiveness(int combatAggressiveness) {
- _combatAggressiveness = combatAggressiveness;
+ _combatAggressiveness = CLIP(combatAggressiveness, 0, 100);
}
void Actor::setInvisible(bool isInvisible) {
@@ -1064,15 +1064,18 @@ void Actor::setTarget(bool target) {
}
void Actor::setCurrentHP(int hp) {
- _currentHP = hp;
+ _currentHP = CLIP(hp, 0, 100);
if (hp > 0) {
retire(false, 0, 0, -1);
}
}
void Actor::setHealth(int hp, int maxHp) {
- _currentHP = hp;
- _maxHP = maxHp;
+ if (hp > maxHp) {
+ hp = maxHp;
+ }
+ _currentHP = CLIP(hp, 0, 100);
+ _maxHP = CLIP(maxHp, 0, 100);
if (hp > 0) {
retire(false, 0, 0, -1);
}
diff --git a/engines/bladerunner/ambient_sounds.cpp b/engines/bladerunner/ambient_sounds.cpp
index 8fe7a1c16a..4825a70278 100644
--- a/engines/bladerunner/ambient_sounds.cpp
+++ b/engines/bladerunner/ambient_sounds.cpp
@@ -65,6 +65,14 @@ static inline void sort(int &a, int &b) {
}
}
+static inline void sort(uint &a, uint &b) {
+ if (a > b) {
+ uint t = a;
+ a = b;
+ b = t;
+ }
+}
+
void AmbientSounds::addSound(
int sfxId,
uint32 timeMin, uint32 timeMax,
@@ -73,6 +81,10 @@ void AmbientSounds::addSound(
int panEndMin, int panEndMax,
int priority, int unk) {
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+ sort(timeMin, timeMax);
+#endif // BLADERUNNER_ORIGINAL_BUGS
sort(volumeMin, volumeMax);
sort(panStartMin, panStartMax);
sort(panEndMin, panEndMax);
@@ -102,6 +114,10 @@ void AmbientSounds::removeAllNonLoopingSounds(bool stopPlaying) {
}
void AmbientSounds::addSpeech(int actorId, int sentenceId, uint32 timeMin, uint32 timeMax, int volumeMin, int volumeMax, int panStartMin, int panStartMax, int panEndMin, int panEndMax, int priority, int unk) {
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+ sort(timeMin, timeMax);
+#endif // BLADERUNNER_ORIGINAL_BUGS
sort(volumeMin, volumeMax);
sort(panStartMin, panStartMax);
sort(panEndMin, panEndMax);
@@ -315,6 +331,14 @@ void AmbientSounds::addSoundByName(
uint32 now = _vm->_time->current();
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+ sort(timeMin, timeMax);
+ sort(volumeMin, volumeMax);
+ sort(panStartMin, panStartMax);
+ sort(panEndMin, panEndMax);
+#endif // BLADERUNNER_ORIGINAL_BUGS
+
track.isActive = true;
track.name = name;
track.hash = MIXArchive::getHash(name);
@@ -416,6 +440,10 @@ void AmbientSounds::load(SaveFileReadStream &f) {
track.timeMax = (uint32)f.readInt();
f.skip(4); // track.nextPlayTime is not used after load
track.nextPlayTimeStart = now;
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+ sort(track.timeMin, track.timeMax);
+#endif // BLADERUNNER_ORIGINAL_BUGS
track.nextPlayTimeDiff = _vm->_rnd.getRandomNumberRng(track.timeMin, track.timeMax);
track.volumeMin = f.readInt();
track.volumeMax = f.readInt();
@@ -424,6 +452,12 @@ void AmbientSounds::load(SaveFileReadStream &f) {
track.panStartMax = f.readInt();
track.panEndMin = f.readInt();
track.panEndMax = f.readInt();
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+ sort(track.volumeMin, track.volumeMax);
+ sort(track.panStartMin, track.panStartMax);
+ sort(track.panEndMin, track.panEndMax);
+#endif // BLADERUNNER_ORIGINAL_BUGS
track.priority = f.readInt();
f.skip(4); // field_45
}
diff --git a/engines/bladerunner/ui/kia_section_pogo.cpp b/engines/bladerunner/ui/kia_section_pogo.cpp
index cd0bb27efb..967ed37cbb 100644
--- a/engines/bladerunner/ui/kia_section_pogo.cpp
+++ b/engines/bladerunner/ui/kia_section_pogo.cpp
@@ -263,6 +263,7 @@ void KIASectionPogo::draw(Graphics::Surface &surface) {
_vm->_mainFont->drawString(&surface, title, 313 - _vm->_mainFont->getStringWidth(title) / 2, 143, surface.w, surface.format.RGBToColor(240, 232, 192));
int y = 158;
+ int lineTextWidth;
for (int i = 0; i < kLineCount; ++i) {
if (updateTimeout) {
if (_lineTimeouts[i] > 0) {
@@ -270,7 +271,8 @@ void KIASectionPogo::draw(Graphics::Surface &surface) {
} else {
_lineTexts[i] = _strings[_stringIndex];
_lineTimeouts[i] = 63;
- _lineOffsets[i] = _vm->_rnd.getRandomNumberRng(0, 306 - _vm->_mainFont->getStringWidth(_lineTexts[i])) + 155;
+ lineTextWidth = _vm->_mainFont->getStringWidth(_lineTexts[i]);
+ _lineOffsets[i] = _vm->_rnd.getRandomNumberRng(0, (306 - lineTextWidth) > 0 ? (306 - lineTextWidth) : 0) + 155;
_stringIndex = (_stringIndex + 1) % kStringCount;
}