init all VAR_* variables to 0xFF; replaced access to _vars in the form _vars[VAR_*] by VARS(VAR_*) which performs a validity checK; renamed _vars to _scummVars to make sure I updated all places; fixed two places where V6 and newer games would access V5 vars (but there are still some left, it seems); checked VAR access for now only generates a warning

svn-id: r7393
This commit is contained in:
Max Horn 2003-05-08 15:48:50 +00:00
parent 6ab104cc3c
commit 98881c3a6a
21 changed files with 486 additions and 350 deletions

View file

@ -204,7 +204,7 @@ void Scumm::getGraphicsPerformance() {
}
if (!(_features & GF_SMALL_HEADER)) // Variable is reserved for game scripts in earlier games
_vars[VAR_PERFORMANCE_1] = 0;
VAR(VAR_PERFORMANCE_1) = 0;
for (i = 10; i != 0; i--) {
setDirtyRange(0, 0, _realHeight); //ender
@ -212,7 +212,7 @@ void Scumm::getGraphicsPerformance() {
}
if (!(_features & GF_SMALL_HEADER)) // Variable is reserved for game scripts in earlier games
_vars[VAR_PERFORMANCE_2] = 0;
VAR(VAR_PERFORMANCE_2) = 0;
if (_features & GF_AFTER_V7)
initScreens(0, 0, _realWidth, _realHeight);
@ -497,7 +497,7 @@ void Gdi::resetBackground(int top, int bottom, int strip) {
numLinesToProcess = bottom - top;
if (numLinesToProcess) {
if ((_vm->_features & GF_AFTER_V6) || (_vm->_vars[_vm->VAR_CURRENT_LIGHTS] & LIGHTMODE_screen)) {
if ((_vm->_features & GF_AFTER_V6) || (_vm->VAR(_vm->VAR_CURRENT_LIGHTS) & LIGHTMODE_screen)) {
if (_vm->hasCharsetMask(strip << 3, top, (strip + 1) << 3, bottom))
draw8ColWithMasking(backbuff_ptr, bgbak_ptr, numLinesToProcess, _mask_ptr);
else
@ -602,7 +602,7 @@ void Scumm::drawFlashlight() {
x = _virtual_mouse_x;
y = _virtual_mouse_y;
} else {
Actor *a = a = derefActorSafe(_vars[VAR_EGO], "drawFlashlight");
Actor *a = a = derefActorSafe(VAR(VAR_EGO), "drawFlashlight");
x = a->x;
y = a->y;
}
@ -774,7 +774,7 @@ void Scumm::restoreBG(int left, int top, int right, int bottom, byte backColor)
width = right - left;
// Check whether lights are turned on or not
lightsOn = (_features & GF_AFTER_V6) || (vs->number != 0) || (_vars[VAR_CURRENT_LIGHTS] & LIGHTMODE_screen);
lightsOn = (_features & GF_AFTER_V6) || (vs->number != 0) || (VAR(VAR_CURRENT_LIGHTS) & LIGHTMODE_screen);
if (vs->alloctwobuffers && _currentRoom != 0 && lightsOn ) {
blit(backbuff, bgbak, width, height);
@ -853,7 +853,7 @@ void Gdi::drawBitmap(byte *ptr, VirtScreen *vs, int x, int y, const int h,
bool useOrDecompress = false;
// Check whether lights are turned on or not
lightsOn = (_vm->_features & GF_AFTER_V6) || (vs->number != 0) || (_vm->_vars[_vm->VAR_CURRENT_LIGHTS] & LIGHTMODE_screen);
lightsOn = (_vm->_features & GF_AFTER_V6) || (vs->number != 0) || (_vm->VAR(_vm->VAR_CURRENT_LIGHTS) & LIGHTMODE_screen);
CHECK_HEAP;
if (_vm->_features & GF_SMALL_HEADER)
@ -1958,16 +1958,16 @@ void Scumm::setCameraAt(int pos_x, int pos_y) {
clampCameraPos(&camera._cur);
camera._dest = camera._cur;
_vars[VAR_CAMERA_DEST_X] = camera._dest.x;
_vars[VAR_CAMERA_DEST_Y] = camera._dest.y;
VAR(VAR_CAMERA_DEST_X) = camera._dest.x;
VAR(VAR_CAMERA_DEST_Y) = camera._dest.y;
assert(camera._cur.x >= (_realWidth / 2) && camera._cur.y >= (_realHeight / 2));
if ((camera._cur.x != old.x || camera._cur.y != old.y)
&& _vars[VAR_SCROLL_SCRIPT]) {
_vars[VAR_CAMERA_POS_X] = camera._cur.x;
_vars[VAR_CAMERA_POS_Y] = camera._cur.y;
runScript(_vars[VAR_SCROLL_SCRIPT], 0, 0, 0);
&& VAR(VAR_SCROLL_SCRIPT)) {
VAR(VAR_CAMERA_POS_X) = camera._cur.x;
VAR(VAR_CAMERA_POS_Y) = camera._cur.y;
runScript(VAR(VAR_SCROLL_SCRIPT), 0, 0, 0);
}
} else {
@ -1976,15 +1976,15 @@ void Scumm::setCameraAt(int pos_x, int pos_y) {
}
camera._dest.x = pos_x;
if (camera._cur.x < _vars[VAR_CAMERA_MIN_X])
camera._cur.x = _vars[VAR_CAMERA_MIN_X];
if (camera._cur.x < VAR(VAR_CAMERA_MIN_X))
camera._cur.x = VAR(VAR_CAMERA_MIN_X);
if (camera._cur.x > _vars[VAR_CAMERA_MAX_X])
camera._cur.x = _vars[VAR_CAMERA_MAX_X];
if (camera._cur.x > VAR(VAR_CAMERA_MAX_X))
camera._cur.x = VAR(VAR_CAMERA_MAX_X);
if (_vars[VAR_SCROLL_SCRIPT]) {
_vars[VAR_CAMERA_POS_X] = camera._cur.x;
runScript(_vars[VAR_SCROLL_SCRIPT], 0, 0, 0);
if (VAR(VAR_SCROLL_SCRIPT)) {
VAR(VAR_CAMERA_POS_X) = camera._cur.x;
runScript(VAR(VAR_SCROLL_SCRIPT), 0, 0, 0);
}
if (camera._cur.x != camera._last.x && _charset->_hasMask)
@ -1998,7 +1998,7 @@ void Scumm::setCameraFollows(Actor *a) {
int ax, ay;
camera._follows = a->number;
_vars[VAR_CAMERA_FOLLOWED_ACTOR] = a->number;
VAR(VAR_CAMERA_FOLLOWED_ACTOR) = a->number;
if (!a->isInCurrentRoom()) {
startScene(a->getRoom(), 0, 0);
@ -2007,7 +2007,7 @@ void Scumm::setCameraFollows(Actor *a) {
ax = abs(a->x - camera._cur.x);
ay = abs(a->y - camera._cur.y);
if (ax > _vars[VAR_CAMERA_THRESHOLD_X] || ay > _vars[VAR_CAMERA_THRESHOLD_Y] || ax > (_realWidth / 2) || ay > (_realHeight / 2)) {
if (ax > VAR(VAR_CAMERA_THRESHOLD_X) || ay > VAR(VAR_CAMERA_THRESHOLD_Y) || ax > (_realWidth / 2) || ay > (_realHeight / 2)) {
setCameraAt(a->x, a->y);
}
@ -2041,17 +2041,17 @@ void Scumm::setCameraFollows(Actor *a) {
}
void Scumm::clampCameraPos(ScummPoint *pt) {
if (pt->x < _vars[VAR_CAMERA_MIN_X])
pt->x = _vars[VAR_CAMERA_MIN_X];
if (pt->x < VAR(VAR_CAMERA_MIN_X))
pt->x = VAR(VAR_CAMERA_MIN_X);
if (pt->x > _vars[VAR_CAMERA_MAX_X])
pt->x = _vars[VAR_CAMERA_MAX_X];
if (pt->x > VAR(VAR_CAMERA_MAX_X))
pt->x = VAR(VAR_CAMERA_MAX_X);
if (pt->y < _vars[VAR_CAMERA_MIN_Y])
pt->y = _vars[VAR_CAMERA_MIN_Y];
if (pt->y < VAR(VAR_CAMERA_MIN_Y))
pt->y = VAR(VAR_CAMERA_MIN_Y);
if (pt->y > _vars[VAR_CAMERA_MAX_Y])
pt->y = _vars[VAR_CAMERA_MAX_Y];
if (pt->y > VAR(VAR_CAMERA_MAX_Y))
pt->y = VAR(VAR_CAMERA_MAX_Y);
}
void Scumm::moveCamera() {
@ -2061,12 +2061,12 @@ void Scumm::moveCamera() {
if (camera._follows) {
a = derefActorSafe(camera._follows, "moveCamera");
if (abs(camera._cur.x - a->x) > _vars[VAR_CAMERA_THRESHOLD_X] ||
abs(camera._cur.y - a->y) > _vars[VAR_CAMERA_THRESHOLD_Y]) {
if (abs(camera._cur.x - a->x) > VAR(VAR_CAMERA_THRESHOLD_X) ||
abs(camera._cur.y - a->y) > VAR(VAR_CAMERA_THRESHOLD_Y)) {
camera._movingToActor = true;
if (_vars[VAR_CAMERA_THRESHOLD_X] == 0)
if (VAR(VAR_CAMERA_THRESHOLD_X) == 0)
camera._cur.x = a->x;
if (_vars[VAR_CAMERA_THRESHOLD_Y] == 0)
if (VAR(VAR_CAMERA_THRESHOLD_Y) == 0)
camera._cur.y = a->y;
clampCameraPos(&camera._cur);
}
@ -2075,8 +2075,8 @@ void Scumm::moveCamera() {
}
if (camera._movingToActor) {
_vars[VAR_CAMERA_DEST_X] = camera._dest.x = a->x;
_vars[VAR_CAMERA_DEST_Y] = camera._dest.y = a->y;
VAR(VAR_CAMERA_DEST_X) = camera._dest.x = a->x;
VAR(VAR_CAMERA_DEST_Y) = camera._dest.y = a->y;
}
assert(camera._cur.x >= (_realWidth / 2) && camera._cur.y >= (_realHeight / 2));
@ -2084,25 +2084,25 @@ void Scumm::moveCamera() {
clampCameraPos(&camera._dest);
if (camera._cur.x < camera._dest.x) {
camera._cur.x += _vars[VAR_CAMERA_SPEED_X];
camera._cur.x += VAR(VAR_CAMERA_SPEED_X);
if (camera._cur.x > camera._dest.x)
camera._cur.x = camera._dest.x;
}
if (camera._cur.x > camera._dest.x) {
camera._cur.x -= _vars[VAR_CAMERA_SPEED_X];
camera._cur.x -= VAR(VAR_CAMERA_SPEED_X);
if (camera._cur.x < camera._dest.x)
camera._cur.x = camera._dest.x;
}
if (camera._cur.y < camera._dest.y) {
camera._cur.y += _vars[VAR_CAMERA_SPEED_Y];
camera._cur.y += VAR(VAR_CAMERA_SPEED_Y);
if (camera._cur.y > camera._dest.y)
camera._cur.y = camera._dest.y;
}
if (camera._cur.y > camera._dest.y) {
camera._cur.y -= _vars[VAR_CAMERA_SPEED_Y];
camera._cur.y -= VAR(VAR_CAMERA_SPEED_Y);
if (camera._cur.y < camera._dest.y)
camera._cur.y = camera._dest.y;
}
@ -2111,31 +2111,31 @@ void Scumm::moveCamera() {
camera._movingToActor = false;
camera._accel.x = camera._accel.y = 0;
_vars[VAR_CAMERA_SPEED_X] = _vars[VAR_CAMERA_SPEED_Y] = 0;
VAR(VAR_CAMERA_SPEED_X) = VAR(VAR_CAMERA_SPEED_Y) = 0;
} else {
camera._accel.x += _vars[VAR_CAMERA_ACCEL_X];
camera._accel.y += _vars[VAR_CAMERA_ACCEL_Y];
camera._accel.x += VAR(VAR_CAMERA_ACCEL_X);
camera._accel.y += VAR(VAR_CAMERA_ACCEL_Y);
_vars[VAR_CAMERA_SPEED_X] += camera._accel.x / 100;
_vars[VAR_CAMERA_SPEED_Y] += camera._accel.y / 100;
VAR(VAR_CAMERA_SPEED_X) += camera._accel.x / 100;
VAR(VAR_CAMERA_SPEED_Y) += camera._accel.y / 100;
if (_vars[VAR_CAMERA_SPEED_X] < 8)
_vars[VAR_CAMERA_SPEED_X] = 8;
if (VAR(VAR_CAMERA_SPEED_X) < 8)
VAR(VAR_CAMERA_SPEED_X) = 8;
if (_vars[VAR_CAMERA_SPEED_Y] < 8)
_vars[VAR_CAMERA_SPEED_Y] = 8;
if (VAR(VAR_CAMERA_SPEED_Y) < 8)
VAR(VAR_CAMERA_SPEED_Y) = 8;
}
cameraMoved();
if (camera._cur.x != old.x || camera._cur.y != old.y) {
_vars[VAR_CAMERA_POS_X] = camera._cur.x;
_vars[VAR_CAMERA_POS_Y] = camera._cur.y;
VAR(VAR_CAMERA_POS_X) = camera._cur.x;
VAR(VAR_CAMERA_POS_Y) = camera._cur.y;
if (_vars[VAR_SCROLL_SCRIPT])
runScript(_vars[VAR_SCROLL_SCRIPT], 0, 0, 0);
if (VAR(VAR_SCROLL_SCRIPT))
runScript(VAR(VAR_SCROLL_SCRIPT), 0, 0, 0);
}
} else {
int pos = camera._cur.x;
@ -2144,18 +2144,18 @@ void Scumm::moveCamera() {
camera._cur.x &= 0xFFF8;
if (camera._cur.x < _vars[VAR_CAMERA_MIN_X]) {
if (_vars[VAR_CAMERA_FAST_X])
camera._cur.x = _vars[VAR_CAMERA_MIN_X];
if (camera._cur.x < VAR(VAR_CAMERA_MIN_X)) {
if (VAR(VAR_CAMERA_FAST_X))
camera._cur.x = VAR(VAR_CAMERA_MIN_X);
else
camera._cur.x += 8;
cameraMoved();
return;
}
if (camera._cur.x > _vars[VAR_CAMERA_MAX_X]) {
if (_vars[VAR_CAMERA_FAST_X])
camera._cur.x = _vars[VAR_CAMERA_MAX_X];
if (camera._cur.x > VAR(VAR_CAMERA_MAX_X)) {
if (VAR(VAR_CAMERA_FAST_X))
camera._cur.x = VAR(VAR_CAMERA_MAX_X);
else
camera._cur.x -= 8;
cameraMoved();
@ -2169,7 +2169,7 @@ void Scumm::moveCamera() {
t = (actorx >> 3) - _screenStartStrip;
if (t < camera._leftTrigger || t > camera._rightTrigger) {
if (_vars[VAR_CAMERA_FAST_X]) {
if (VAR(VAR_CAMERA_FAST_X)) {
if (t > 35)
camera._dest.x = actorx + 80;
if (t < 5)
@ -2184,13 +2184,13 @@ void Scumm::moveCamera() {
camera._dest.x = a->x;
}
if (camera._dest.x < _vars[VAR_CAMERA_MIN_X])
camera._dest.x = _vars[VAR_CAMERA_MIN_X];
if (camera._dest.x < VAR(VAR_CAMERA_MIN_X))
camera._dest.x = VAR(VAR_CAMERA_MIN_X);
if (camera._dest.x > _vars[VAR_CAMERA_MAX_X])
camera._dest.x = _vars[VAR_CAMERA_MAX_X];
if (camera._dest.x > VAR(VAR_CAMERA_MAX_X))
camera._dest.x = VAR(VAR_CAMERA_MAX_X);
if (_vars[VAR_CAMERA_FAST_X]) {
if (VAR(VAR_CAMERA_FAST_X)) {
camera._cur.x = camera._dest.x;
} else {
if (camera._cur.x < camera._dest.x)
@ -2206,9 +2206,9 @@ void Scumm::moveCamera() {
cameraMoved();
if (pos != camera._cur.x && _vars[VAR_SCROLL_SCRIPT]) {
_vars[VAR_CAMERA_POS_X] = camera._cur.x;
runScript(_vars[VAR_SCROLL_SCRIPT], 0, 0, 0);
if (pos != camera._cur.x && VAR(VAR_SCROLL_SCRIPT)) {
VAR(VAR_CAMERA_POS_X) = camera._cur.x;
runScript(VAR(VAR_SCROLL_SCRIPT), 0, 0, 0);
}
}
}
@ -2249,9 +2249,9 @@ void Scumm::cameraMoved() {
void Scumm::panCameraTo(int x, int y) {
if (_features & GF_AFTER_V7) {
_vars[VAR_CAMERA_FOLLOWED_ACTOR] = camera._follows = 0;
_vars[VAR_CAMERA_DEST_X] = camera._dest.x = x;
_vars[VAR_CAMERA_DEST_Y] = camera._dest.y = y;
VAR(VAR_CAMERA_FOLLOWED_ACTOR) = camera._follows = 0;
VAR(VAR_CAMERA_DEST_X) = camera._dest.x = x;
VAR(VAR_CAMERA_DEST_Y) = camera._dest.y = y;
} else {
camera._dest.x = x;
@ -2759,9 +2759,9 @@ void Scumm::cyclePalette() {
byte *start, *end;
byte tmp[3];
valueToAdd = _vars[VAR_TIMER];
if (valueToAdd < _vars[VAR_TIMER_NEXT])
valueToAdd = _vars[VAR_TIMER_NEXT];
valueToAdd = VAR(VAR_TIMER);
if (valueToAdd < VAR(VAR_TIMER_NEXT))
valueToAdd = VAR(VAR_TIMER_NEXT);
if (!_colorCycle) // FIXME
return;