aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra/lol.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/kyra/lol.cpp')
-rw-r--r--engines/kyra/lol.cpp45
1 files changed, 20 insertions, 25 deletions
diff --git a/engines/kyra/lol.cpp b/engines/kyra/lol.cpp
index 8f00708e43..33ba2bff7e 100644
--- a/engines/kyra/lol.cpp
+++ b/engines/kyra/lol.cpp
@@ -1080,7 +1080,7 @@ bool LoLEngine::addCharacter(int id) {
loadCharFaceShapes(numChars, id);
- _characters[numChars].nextAnimUpdateCountdown = (int16) generateRandomNumber(1, 12) + 6;
+ _characters[numChars].nextAnimUpdateCountdown = (int16) rollDice(1, 12) + 6;
for (i = 0; i < 11; i++) {
if (_characters[numChars].items[i]) {
@@ -1174,7 +1174,7 @@ void LoLEngine::updatePortraitSpeechAnim() {
}
}
- int f = generateRandomNumber(1, 6) - 1;
+ int f = rollDice(1, 6) - 1;
if (f == _characters[_updateCharNum].curFaceFrame)
f++;
if (f > 5)
@@ -1402,24 +1402,24 @@ void LoLEngine::increaseExperience(int charNum, int skill, uint32 points) {
switch (skill) {
case 0:
_txt->printMessage(0x8003, getLangString(0x4023), _characters[charNum].name);
- inc = generateRandomNumber(4, 6);
+ inc = rollDice(4, 6);
_characters[charNum].hitPointsCur += inc;
_characters[charNum].hitPointsMax += inc;
break;
case 1:
_txt->printMessage(0x8003, getLangString(0x4025), _characters[charNum].name);
- inc = generateRandomNumber(2, 6);
+ inc = rollDice(2, 6);
_characters[charNum].hitPointsCur += inc;
_characters[charNum].hitPointsMax += inc;
break;
case 2:
_txt->printMessage(0x8003, getLangString(0x4024), _characters[charNum].name);
- inc = (_characters[charNum].defaultModifiers[6] * (generateRandomNumber(1, 8) + 17)) >> 8;
+ inc = (_characters[charNum].defaultModifiers[6] * (rollDice(1, 8) + 17)) >> 8;
_characters[charNum].magicPointsCur += inc;
_characters[charNum].magicPointsMax += inc;
- inc = generateRandomNumber(1, 6);
+ inc = rollDice(1, 6);
_characters[charNum].hitPointsCur += inc;
_characters[charNum].hitPointsMax += inc;
break;
@@ -1872,25 +1872,20 @@ void LoLEngine::delay(uint32 millis, bool doUpdate, bool) {
}
}
-int LoLEngine::generateRandomNumber(int min, int max) {
- // The output produced by this random number generator
- // differs a lot from _rnd.getRandomNumberRng(). Using
- // _rnd.getRandomNumberRng() instead of this function
- // here will break the fighting system!
-
- if (min <= 0 || max <= 0)
+int LoLEngine::rollDice(int times, int pips) {
+ if (times <= 0 || pips <= 0)
return 0;
int res = 0;
int d = 0;
do {
- int val = (((int)_rnd.getRandomNumber(0x7fff) * max) / 0x8000) + 1;
- if (val > max)
- val -= max;
+ int val = (((int)_rnd.getRandomNumber(0x7fff) * pips) / 0x8000) + 1;
+ if (val > pips)
+ val -= pips;
res += val;
d++;
- } while (d < min);
+ } while (d < times);
return res;
}
@@ -2281,7 +2276,7 @@ int LoLEngine::processMagicIce(int charNum, int spellLevel) {
} else {
uint16 o = _levelBlockProperties[calcNewBlockPosition(_currentBlock, _currentDirection)].assignedObjects;
while (o & 0x8000) {
- int might = generateRandomNumber(iceDamageMin[spellLevel], iceDamageMax[spellLevel]) + iceDamageAdd[spellLevel];
+ int might = rollDice(iceDamageMin[spellLevel], iceDamageMax[spellLevel]) + iceDamageAdd[spellLevel];
int dmg = calcInflictableDamagePerItem(charNum, 0, might, 3, 2);
MonsterInPlay *m = &_monsters[o & 0x7fff];
@@ -3213,7 +3208,7 @@ int LoLEngine::battleHitSkillTest(int16 attacker, int16 target, int skill) {
evadeChanceModifier = _characters[target].defaultModifiers[3];
}
- int r = generateRandomNumber(1, 100);
+ int r = rollDice(1, 100);
if (r >= sk)
return 2;
@@ -3251,9 +3246,9 @@ int LoLEngine::inflictDamage(uint16 target, int damage, uint16 attacker, int ski
m->hitPoints -= damage;
m->damageReceived = 0x8000 | damage;
m->flags |= 0x10;
- m->hitOffsX = generateRandomNumber(1, 24);
+ m->hitOffsX = rollDice(1, 24);
m->hitOffsX -= 12;
- m->hitOffsY = generateRandomNumber(1, 24);
+ m->hitOffsY = rollDice(1, 24);
m->hitOffsY -= 12;
m->hitPoints = CLIP<int16>(m->hitPoints, 0, m->properties->hitPoints);
@@ -3457,7 +3452,7 @@ void LoLEngine::checkForPartyDeath() {
}
void LoLEngine::applyMonsterAttackSkill(MonsterInPlay *monster, int16 target, int16 damage) {
- if (generateRandomNumber(1, 100) > monster->properties->attackSkillChance)
+ if (rollDice(1, 100) > monster->properties->attackSkillChance)
return;
int t = 0;
@@ -3527,7 +3522,7 @@ void LoLEngine::applyMonsterAttackSkill(MonsterInPlay *monster, int16 target, in
}
void LoLEngine::applyMonsterDefenseSkill(MonsterInPlay *monster, int16 attacker, int flags, int skill, int damage) {
- if (generateRandomNumber(1, 100) > monster->properties->defenseSkillChance)
+ if (rollDice(1, 100) > monster->properties->defenseSkillChance)
return;
int itm = 0;
@@ -3614,7 +3609,7 @@ int LoLEngine::paralyzePoisonCharacter(int charNum, int typeFlag, int immunityFl
if (!(_characters[charNum].flags & 1) || (_characters[charNum].flags & immunityFlags))
return 0;
- if ((int)generateRandomNumber(1, 100) > hitChance)
+ if ((int)rollDice(1, 100) > hitChance)
return 0;
int r = 0;
@@ -3732,7 +3727,7 @@ void LoLEngine::launchMagicViper() {
_screen->copyPage(12, 0);
_screen->copyPage(12, 2);
- int t = generateRandomNumber(1, 4);
+ int t = rollDice(1, 4);
for (int i = 0; i < 4; i++) {
if (!(_characters[i].flags & 1)) {