aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--TODO1
-rw-r--r--saga/actor.cpp20
2 files changed, 10 insertions, 11 deletions
diff --git a/TODO b/TODO
index e6b459e3eb..d222722c6d 100644
--- a/TODO
+++ b/TODO
@@ -297,7 +297,6 @@ SAGA
be provided by ScummVM if they aren't already.
* OO'ify (blah_mod.h contains public stuff, blah.h private stuff) [almost
done]
- * rand() -> rnd.getRandomNumber()
- bugs/misfeatures -
* Make actor animation Event-driven. See FIXME in actor.cpp. Maybe it
diff --git a/saga/actor.cpp b/saga/actor.cpp
index b5fc33ff28..33b005ffa8 100644
--- a/saga/actor.cpp
+++ b/saga/actor.cpp
@@ -569,7 +569,7 @@ void Actor::updateActorsScene(int actorsEntrance) {
}
}
if (actor->sceneNumber == _vm->_scene->currentSceneNumber()) {
- actor->actionCycle = (rand() & 7) * 4;
+ actor->actionCycle = (_vm->_rnd.getRandomNumber(7) & 0x7) * 4; // 1/8th chance
}
}
@@ -725,7 +725,7 @@ void Actor::handleSpeech(int msec) {
actor = getActor(_activeSpeech.actorIds[0]);
if (!(_activeSpeech.speechFlags & kSpeakNoAnimate)) {
actor->currentAction = kActionSpeak;
- actor->actionCycle = rand() % 64;
+ actor->actionCycle = _vm->_rnd.getRandomNumber(63);
}
}
_activeSpeech.playing = true;
@@ -831,7 +831,7 @@ void Actor::handleActions(int msec, bool setup) {
frameRange = getActorFrameRange(actor->id, kFrameStand);
if (frameRange->frameCount) {
- actor->frameNumber = frameRange->frameIndex + (uint16)rand() % frameRange->frameCount;
+ actor->frameNumber = frameRange->frameIndex + (uint16)_vm->_rnd.getRandomNumber(frameRange->frameCount - 1);
} else {
actor->frameNumber = frameRange->frameIndex;
}
@@ -1010,7 +1010,7 @@ void Actor::handleActions(int msec, bool setup) {
break;
frameRange = getActorFrameRange(actor->id, kFrameSpeak);
- state = (uint16)rand() % (frameRange->frameCount + 1);
+ state = (uint16)_vm->_rnd.getRandomNumber(frameRange->frameCount);
if (state == 0) {
frameRange = getActorFrameRange(actor->id, kFrameStand);
@@ -1067,7 +1067,7 @@ void Actor::handleActions(int msec, bool setup) {
}
if (frameRange->frameCount && (actor->actorFlags & kActorRandom)) {
- state = rand() % frameRange->frameCount;
+ state = _vm->_rnd.getRandomNumber(frameRange->frameCount - 1);
}
if (actor->actorFlags & kActorBackwards) {
@@ -1347,8 +1347,8 @@ bool Actor::followProtagonist(ActorData *actor) {
newU = clamp( -prefU, delta.u(), prefU ) + protagonistLocation.u();
newV = clamp( -prefV, delta.v(), prefV ) + protagonistLocation.v();
- newLocation.u() = newU + (rand() % prefU) - prefU / 2;
- newLocation.v() = newV + (rand() % prefV) - prefV / 2;
+ newLocation.u() = newU + _vm->_rnd.getRandomNumber(prefU - 1) - prefU / 2;
+ newLocation.v() = newV + _vm->_rnd.getRandomNumber(prefV - 1) - prefV / 2;
newLocation.z = 0;
return actorWalkTo(actor->id, newLocation);
@@ -1384,7 +1384,7 @@ bool Actor::followProtagonist(ActorData *actor) {
}
}
- if ((rand() & 0x7) == 0)
+ if ((_vm->_rnd.getRandomNumber(7) & 0x7) == 0) // 1/8th chance
actor->actorFlags &= ~kActorNoFollow;
if (actor->actorFlags & kActorNoFollow) {
@@ -1412,8 +1412,8 @@ bool Actor::followProtagonist(ActorData *actor) {
newLocation.z = 0;
if (protagonistBGMaskType != 3) {
- newLocation.x += (rand() % prefer1.x) - prefer1.x / 2;
- newLocation.y += (rand() % prefer1.y) - prefer1.y / 2;
+ newLocation.x += _vm->_rnd.getRandomNumber(prefer1.x - 1) - prefer1.x / 2;
+ newLocation.y += _vm->_rnd.getRandomNumber(prefer1.y - 1) - prefer1.y / 2;
}
newLocation.x = clamp(-31*4, newLocation.x, (_vm->getDisplayWidth() + 31) * 4); //fixme