From 273e37f7263ab30b445a8123af52fe81ddb762d0 Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Sun, 14 Aug 2011 18:47:51 +0100 Subject: AGI: Renamed some #defines to our code conventions and moved them to enums --- engines/agi/checks.cpp | 30 ++++----- engines/agi/cycle.cpp | 6 +- engines/agi/keyboard.cpp | 4 +- engines/agi/motion.cpp | 28 +++++---- engines/agi/op_cmd.cpp | 160 +++++++++++++++++++++++------------------------ engines/agi/op_test.cpp | 2 +- engines/agi/saveload.cpp | 4 +- engines/agi/sprite.cpp | 10 +-- engines/agi/view.cpp | 48 +++++++------- engines/agi/view.h | 66 ++++++++++--------- 10 files changed, 182 insertions(+), 176 deletions(-) (limited to 'engines/agi') diff --git a/engines/agi/checks.cpp b/engines/agi/checks.cpp index 20276657ff..c3b31f6ba9 100644 --- a/engines/agi/checks.cpp +++ b/engines/agi/checks.cpp @@ -31,7 +31,7 @@ int AgiEngine::checkPosition(VtEntry *v) { v->xPos + v->xSize > _WIDTH || v->yPos - v->ySize + 1 < 0 || v->yPos >= _HEIGHT || - ((~v->flags & IGNORE_HORIZON) && v->yPos <= _game.horizon)) { + ((~v->flags & fIgnoreHorizon) && v->yPos <= _game.horizon)) { debugC(4, kDebugLevelSprites, "check position failed: x=%d, y=%d, h=%d, w=%d", v->xPos, v->yPos, v->xSize, v->ySize); return 0; @@ -52,14 +52,14 @@ int AgiEngine::checkPosition(VtEntry *v) { int AgiEngine::checkCollision(VtEntry *v) { VtEntry *u; - if (v->flags & IGNORE_OBJECTS) + if (v->flags & fIgnoreObjects) return 0; for (u = _game.viewTable; u < &_game.viewTable[MAX_VIEWTABLE]; u++) { - if ((u->flags & (ANIMATED | DRAWN)) != (ANIMATED | DRAWN)) + if ((u->flags & (fAnimated | fDrawn)) != (fAnimated | fDrawn)) continue; - if (u->flags & IGNORE_OBJECTS) + if (u->flags & fIgnoreObjects) continue; // Same object, check next @@ -92,7 +92,7 @@ int AgiEngine::checkPriority(VtEntry *v) { int i, trigger, water, pass, pri; uint8 *p0; - if (~v->flags & FIXED_PRIORITY) { + if (~v->flags & fFixedPriority) { // Priority bands v->priority = _game.priTable[v->yPos]; } @@ -129,7 +129,7 @@ int AgiEngine::checkPriority(VtEntry *v) { water = 0; if (pri == 1) { // conditional blue - if (v->flags & IGNORE_BLOCKS) + if (v->flags & fIgnoreBlocks) continue; debugC(4, kDebugLevelSprites, "Blocks observed!"); @@ -145,9 +145,9 @@ int AgiEngine::checkPriority(VtEntry *v) { } if (pass) { - if (!water && v->flags & ON_WATER) + if (!water && v->flags & fOnWater) pass = 0; - if (water && v->flags & ON_LAND) + if (water && v->flags & fOnLand) pass = 0; } @@ -180,7 +180,7 @@ void AgiEngine::updatePosition() { _game.vars[vBorderTouchObj] = 0; for (v = _game.viewTable; v < &_game.viewTable[MAX_VIEWTABLE]; v++) { - if ((v->flags & (ANIMATED | UPDATE | DRAWN)) != (ANIMATED | UPDATE | DRAWN)) { + if ((v->flags & (fAnimated | fUpdate | fDrawn)) != (fAnimated | fUpdate | fDrawn)) { continue; } @@ -195,7 +195,7 @@ void AgiEngine::updatePosition() { y = oldY = v->yPos; // If object has moved, update its position - if (~v->flags & UPDATE_POS) { + if (~v->flags & fUpdatePos) { int dx[9] = { 0, 0, 1, 1, 1, 0, -1, -1, -1 }; int dy[9] = { 0, -1, -1, 0, 1, 1, 1, 0, -1 }; x += v->stepSize * dx[v->direction]; @@ -212,7 +212,7 @@ void AgiEngine::updatePosition() { } else if (x <= 0 && getVersion() == 0x3086) { // KQ4 x = 0; // See Sarien bug #590462 border = 4; - } else if (v->entry == 0 && x == 0 && v->flags & ADJ_EGO_XY) { + } else if (v->entry == 0 && x == 0 && v->flags & fAdjEgoXY) { // Extra test to walk west clicking the mouse x = 0; border = 4; @@ -228,7 +228,7 @@ void AgiEngine::updatePosition() { } else if (y > _HEIGHT - 1) { y = _HEIGHT - 1; border = 3; - } else if ((~v->flags & IGNORE_HORIZON) && y <= _game.horizon) { + } else if ((~v->flags & fIgnoreHorizon) && y <= _game.horizon) { debugC(4, kDebugLevelSprites, "y = %d, horizon = %d", y, _game.horizon); y = _game.horizon + 1; border = 1; @@ -251,12 +251,12 @@ void AgiEngine::updatePosition() { _game.vars[vBorderCode] = v->entry; _game.vars[vBorderTouchObj] = border; } - if (v->motion == MOTION_MOVE_OBJ) { + if (v->motion == kMotionMoveObj) { inDestination(v); } } - v->flags &= ~UPDATE_POS; + v->flags &= ~fUpdatePos; } } @@ -276,7 +276,7 @@ void AgiEngine::fixPosition(int n) { debugC(4, kDebugLevelSprites, "adjusting view table entry #%d (%d,%d)", n, v->xPos, v->yPos); // test horizon - if ((~v->flags & IGNORE_HORIZON) && v->yPos <= _game.horizon) + if ((~v->flags & fIgnoreHorizon) && v->yPos <= _game.horizon) v->yPos = _game.horizon + 1; dir = 0; diff --git a/engines/agi/cycle.cpp b/engines/agi/cycle.cpp index d86fb36709..e6f122f9f6 100644 --- a/engines/agi/cycle.cpp +++ b/engines/agi/cycle.cpp @@ -47,8 +47,8 @@ void AgiEngine::newRoom(int n) { i = 0; for (v = _game.viewTable; v < &_game.viewTable[MAX_VIEWTABLE]; v++) { v->entry = i++; - v->flags &= ~(ANIMATED | DRAWN); - v->flags |= UPDATE; + v->flags &= ~(fAnimated | fDrawn); + v->flags |= fUpdate; v->stepTime = 1; v->stepTimeCount = 1; v->cycleTime = 1; @@ -220,7 +220,7 @@ int AgiEngine::mainCycle() { } // Click-to-walk mouse interface - if (_game.playerControl && v->flags & ADJ_EGO_XY) { + if (_game.playerControl && v->flags & fAdjEgoXY) { int toX = v->parm1; int toY = v->parm2; diff --git a/engines/agi/keyboard.cpp b/engines/agi/keyboard.cpp index f5810a6e8c..d899a6e202 100644 --- a/engines/agi/keyboard.cpp +++ b/engines/agi/keyboard.cpp @@ -180,7 +180,7 @@ int AgiEngine::handleController(int key) { if (!(getFeatures() & GF_AGIMOUSE)) { // Handle mouse button events if (key == BUTTON_LEFT) { - v->flags |= ADJ_EGO_XY; + v->flags |= fAdjEgoXY; v->parm1 = WIN_TO_PIC_X(_mouse.x); v->parm2 = WIN_TO_PIC_Y(_mouse.y); return true; @@ -188,7 +188,7 @@ int AgiEngine::handleController(int key) { } if (d || key == KEY_STATIONARY) { - v->flags &= ~ADJ_EGO_XY; + v->flags &= ~fAdjEgoXY; v->direction = v->direction == d ? 0 : d; return true; } diff --git a/engines/agi/motion.cpp b/engines/agi/motion.cpp index 261a7f3e61..e4de232267 100644 --- a/engines/agi/motion.cpp +++ b/engines/agi/motion.cpp @@ -52,9 +52,9 @@ void AgiEngine::changePos(VtEntry *v) { y += v->stepSize * dy[v->direction]; if (checkBlock(x, y) == b) { - v->flags &= ~MOTION; + v->flags &= ~fMotion; } else { - v->flags |= MOTION; + v->flags |= fMotion; v->direction = 0; if (isEgoView(v)) _game.vars[vEgoDir] = 0; @@ -63,7 +63,7 @@ void AgiEngine::changePos(VtEntry *v) { void AgiEngine::motionWander(VtEntry *v) { if (v->parm1--) { - if (~v->flags & DIDNT_MOVE) + if (~v->flags & fDidntMove) return; } @@ -94,14 +94,14 @@ void AgiEngine::motionFollowEgo(VtEntry *v) { // Already at ego coordinates if (dir == 0) { v->direction = 0; - v->motion = MOTION_NORMAL; + v->motion = kMotionNormal; setflag(v->parm2, true); return; } if (v->parm3 == 0xff) { v->parm3 = 0; - } else if (v->flags & DIDNT_MOVE) { + } else if (v->flags & fDidntMove) { int d; while ((v->direction = _rnd->getRandomNumber(8)) == 0) { @@ -152,18 +152,20 @@ void AgiEngine::motionMoveObj(VtEntry *v) { void AgiEngine::checkMotion(VtEntry *v) { switch (v->motion) { - case MOTION_WANDER: + case kMotionNormal: + break; + case kMotionWander: motionWander(v); break; - case MOTION_FOLLOW_EGO: + case kMotionFollowEgo: motionFollowEgo(v); break; - case MOTION_MOVE_OBJ: + case kMotionMoveObj: motionMoveObj(v); break; } - if ((_game.block.active && (~v->flags & IGNORE_BLOCKS)) && v->direction) + if ((_game.block.active && (~v->flags & fIgnoreBlocks)) && v->direction) changePos(v); } @@ -178,7 +180,7 @@ void AgiEngine::checkAllMotions() { VtEntry *v; for (v = _game.viewTable; v < &_game.viewTable[MAX_VIEWTABLE]; v++) { - if ((v->flags & (ANIMATED | UPDATE | DRAWN)) == (ANIMATED | UPDATE | DRAWN) + if ((v->flags & (fAnimated | fUpdate | fDrawn)) == (fAnimated | fUpdate | fDrawn) && v->stepTimeCount == 1) { checkMotion(v); } @@ -192,11 +194,11 @@ void AgiEngine::checkAllMotions() { * @param v Pointer to view table entry */ void AgiEngine::inDestination(VtEntry *v) { - if (v->motion == MOTION_MOVE_OBJ) { + if (v->motion == kMotionMoveObj) { v->stepSize = v->parm3; setflag(v->parm4, true); } - v->motion = MOTION_NORMAL; + v->motion = kMotionNormal; if (isEgoView(v)) _game.playerControl = true; } @@ -204,7 +206,7 @@ void AgiEngine::inDestination(VtEntry *v) { /** * Wrapper for static function motion_moveobj(). * This function is used by cmd_move_object() in the first motion cycle - * after setting the motion mode to MOTION_MOVE_OBJ. + * after setting the motion mode to kMotionMoveObj. * @param v Pointer to view table entry */ void AgiEngine::moveObj(VtEntry *v) { diff --git a/engines/agi/op_cmd.cpp b/engines/agi/op_cmd.cpp index 7148ef6407..80b150d2d6 100644 --- a/engines/agi/op_cmd.cpp +++ b/engines/agi/op_cmd.cpp @@ -209,39 +209,39 @@ void cmdDiscardView(AgiGame *state, uint8 *p) { } void cmdObjectOnAnything(AgiGame *state, uint8 *p) { - vt.flags &= ~(ON_WATER | ON_LAND); + vt.flags &= ~(fOnWater | fOnLand); } void cmdObjectOnLand(AgiGame *state, uint8 *p) { - vt.flags |= ON_LAND; + vt.flags |= fOnLand; } void cmdObjectOnWater(AgiGame *state, uint8 *p) { - vt.flags |= ON_WATER; + vt.flags |= fOnWater; } void cmdObserveHorizon(AgiGame *state, uint8 *p) { - vt.flags &= ~IGNORE_HORIZON; + vt.flags &= ~fIgnoreHorizon; } void cmdIgnoreHorizon(AgiGame *state, uint8 *p) { - vt.flags |= IGNORE_HORIZON; + vt.flags |= fIgnoreHorizon; } void cmdObserveObjs(AgiGame *state, uint8 *p) { - vt.flags &= ~IGNORE_OBJECTS; + vt.flags &= ~fIgnoreObjects; } void cmdIgnoreObjs(AgiGame *state, uint8 *p) { - vt.flags |= IGNORE_OBJECTS; + vt.flags |= fIgnoreObjects; } void cmdObserveBlocks(AgiGame *state, uint8 *p) { - vt.flags &= ~IGNORE_BLOCKS; + vt.flags &= ~fIgnoreBlocks; } void cmdIgnoreBlocks(AgiGame *state, uint8 *p) { - vt.flags |= IGNORE_BLOCKS; + vt.flags |= fIgnoreBlocks; } void cmdSetHorizon(AgiGame *state, uint8 *p) { @@ -253,7 +253,7 @@ void cmdGetPriority(AgiGame *state, uint8 *p) { } void cmdSetPriority(AgiGame *state, uint8 *p) { - vt.flags |= FIXED_PRIORITY; + vt.flags |= fFixedPriority; vt.priority = p1; // WORKAROUND: this fixes bug #1712585 in KQ4 (dwarf sprite priority) @@ -270,18 +270,18 @@ void cmdSetPriority(AgiGame *state, uint8 *p) { // Therefore, this workaround only affects that specific part of this scene // Ego is set to object 19 by script 54 if (getGameID() == GID_KQ4 && vt.currentView == 152) { - state->viewTable[19].flags |= FIXED_PRIORITY; + state->viewTable[19].flags |= fFixedPriority; state->viewTable[19].priority = 7; } } void cmdSetPriorityF(AgiGame *state, uint8 *p) { - vt.flags |= FIXED_PRIORITY; + vt.flags |= fFixedPriority; vt.priority = _v[p1]; } void cmdReleasePriority(AgiGame *state, uint8 *p) { - vt.flags &= ~FIXED_PRIORITY; + vt.flags &= ~fFixedPriority; } void cmdSetUpperLeft(AgiGame *state, uint8 *p) { // do nothing (AGI 2.917) @@ -316,13 +316,13 @@ void cmdSetCel(AgiGame *state, uint8 *p) { state->_vm->setCel(&vt, p1); if (getVersion() >= 0x2000) { - vt.flags &= ~DONTUPDATE; + vt.flags &= ~fDontupdate; } } void cmdSetCelF(AgiGame *state, uint8 *p) { state->_vm->setCel(&vt, _v[p1]); - vt.flags &= ~DONTUPDATE; + vt.flags &= ~fDontupdate; } void cmdSetView(AgiGame *state, uint8 *p) { @@ -346,11 +346,11 @@ void cmdNumberOfLoops(AgiGame *state, uint8 *p) { } void cmdFixLoop(AgiGame *state, uint8 *p) { - vt.flags |= FIX_LOOP; + vt.flags |= fFixLoop; } void cmdReleaseLoop(AgiGame *state, uint8 *p) { - vt.flags &= ~FIX_LOOP; + vt.flags &= ~fFixLoop; } void cmdStepSize(AgiGame *state, uint8 *p) { @@ -366,21 +366,21 @@ void cmdCycleTime(AgiGame *state, uint8 *p) { } void cmdStopCycling(AgiGame *state, uint8 *p) { - vt.flags &= ~CYCLING; + vt.flags &= ~fCycling; } void cmdStartCycling(AgiGame *state, uint8 *p) { - vt.flags |= CYCLING; + vt.flags |= fCycling; } void cmdNormalCycle(AgiGame *state, uint8 *p) { - vt.cycle = CYCLE_NORMAL; - vt.flags |= CYCLING; + vt.cycle = kCycleNormal; + vt.flags |= fCycling; } void cmdReverseCycle(AgiGame *state, uint8 *p) { - vt.cycle = CYCLE_REVERSE; - vt.flags |= CYCLING; + vt.cycle = kCycleReverse; + vt.flags |= fCycling; } void cmdSetDir(AgiGame *state, uint8 *p) { @@ -540,16 +540,16 @@ void cmdObjStatusF(AgiGame *state, uint8 *p) { // Generate cycle description line switch (vt_v.cycle) { - case CYCLE_NORMAL: + case kCycleNormal: cycleDesc = "normal cycle"; break; - case CYCLE_END_OF_LOOP: + case kCycleEndOfLoop: cycleDesc = "end of loop"; break; - case CYCLE_REV_LOOP: + case kCycleRevLoop: cycleDesc = "reverse loop"; break; - case CYCLE_REVERSE: + case kCycleReverse: cycleDesc = "reverse cycle"; break; default: @@ -559,16 +559,16 @@ void cmdObjStatusF(AgiGame *state, uint8 *p) { // Generate motion description line switch (vt_v.motion) { - case MOTION_NORMAL: + case kMotionNormal: motionDesc = "normal motion"; break; - case MOTION_WANDER: + case kMotionWander: motionDesc = "wandering"; break; - case MOTION_FOLLOW_EGO: + case kMotionFollowEgo: motionDesc = "following ego"; break; - case MOTION_MOVE_OBJ: + case kMotionMoveObj: // Amiga's Gold Rush! most probably uses "move to (x, y)" // here with real values for x and y. The same output // is used when moving the ego around using the mouse. @@ -655,7 +655,7 @@ void cmdHideMouse(AgiGame *state, uint8 *p) { // to walk somewhere else than to the right using the mouse. // FIXME: Write a proper implementation using disassembly and // apply it to other games as well if applicable. - state->viewTable[0].flags &= ~ADJ_EGO_XY; + state->viewTable[0].flags &= ~fAdjEgoXY; g_system->showMouse(false); } @@ -705,7 +705,7 @@ void cmdAdjEgoMoveToXY(AgiGame *state, uint8 *p) { // by something else because this command doesn't do any flag manipulations // in the Amiga version - checked it with disassembly). if (x != state->adjMouseX || y != state->adjMouseY) - state->viewTable[EGO_VIEW_TABLE].flags &= ~ADJ_EGO_XY; + state->viewTable[EGO_VIEW_TABLE].flags &= ~fAdjEgoXY; state->adjMouseX = x; state->adjMouseY = y; @@ -715,7 +715,7 @@ void cmdAdjEgoMoveToXY(AgiGame *state, uint8 *p) { // TODO: Check where (if anywhere) the 0 arguments version is used case 0: default: - state->viewTable[0].flags |= ADJ_EGO_XY; + state->viewTable[0].flags |= fAdjEgoXY; break; } } @@ -838,22 +838,22 @@ void cmdShowPriScreen(AgiGame *state, uint8 *p) { void cmdAnimateObj(AgiGame *state, uint8 *p) { if (getVersion() < 0x2000) { - if (vt.flags & DIDNT_MOVE) + if (vt.flags & fDidntMove) return; } else { - if (vt.flags & ANIMATED) + if (vt.flags & fAnimated) return; } debugC(4, kDebugLevelScripts, "animate vt entry #%d", p0); - vt.flags = ANIMATED | UPDATE | CYCLING; + vt.flags = fAnimated | fUpdate | fCycling; if (getVersion() < 0x2000) { - vt.flags |= DIDNT_MOVE; + vt.flags |= fDidntMove; } - vt.motion = MOTION_NORMAL; - vt.cycle = CYCLE_NORMAL; + vt.motion = kMotionNormal; + vt.cycle = kCycleNormal; vt.direction = 0; } @@ -861,11 +861,11 @@ void cmdUnanimateAll(AgiGame *state, uint8 *p) { int i; for (i = 0; i < MAX_VIEWTABLE; i++) - state->viewTable[i].flags &= ~(ANIMATED | DRAWN); + state->viewTable[i].flags &= ~(fAnimated | fDrawn); } void cmdDraw(AgiGame *state, uint8 *p) { - if (vt.flags & DRAWN) + if (vt.flags & fDrawn) return; if (vt.ySize <= 0 || vt.xSize <= 0) @@ -873,7 +873,7 @@ void cmdDraw(AgiGame *state, uint8 *p) { debugC(4, kDebugLevelScripts, "draw entry %d", vt.entry); - vt.flags |= UPDATE; + vt.flags |= fUpdate; if (getVersion() >= 0x3000) { state->_vm->setLoop(&vt, vt.currentLoop); state->_vm->setCel(&vt, vt.currentCel); @@ -884,7 +884,7 @@ void cmdDraw(AgiGame *state, uint8 *p) { vt.yPos2 = vt.yPos; vt.celData2 = vt.celData; state->_vm->_sprites->eraseUpdSprites(); - vt.flags |= DRAWN; + vt.flags |= fDrawn; // WORKAROUND: This fixes a bug with AGI Fanmade _game Space Trek. // The original workaround checked if AGI version was <= 2.440, which could @@ -898,10 +898,10 @@ void cmdDraw(AgiGame *state, uint8 *p) { // games are affected. If yes, then it'd be best to set this for Space // Trek only if (getFeatures() & GF_FANMADE) // See Sarien bug #546562 - vt.flags |= ANIMATED; + vt.flags |= fAnimated; state->_vm->_sprites->blitUpdSprites(); - vt.flags &= ~DONTUPDATE; + vt.flags &= ~fDontupdate; state->_vm->_sprites->commitBlock(vt.xPos, vt.yPos - vt.ySize + 1, vt.xPos + vt.xSize - 1, vt.yPos, true); @@ -909,16 +909,16 @@ void cmdDraw(AgiGame *state, uint8 *p) { } void cmdErase(AgiGame *state, uint8 *p) { - if (~vt.flags & DRAWN) + if (~vt.flags & fDrawn) return; state->_vm->_sprites->eraseUpdSprites(); - if (vt.flags & UPDATE) { - vt.flags &= ~DRAWN; + if (vt.flags & fUpdate) { + vt.flags &= ~fDrawn; } else { state->_vm->_sprites->eraseNonupdSprites(); - vt.flags &= ~DRAWN; + vt.flags &= ~fDrawn; state->_vm->_sprites->blitNonupdSprites(); } state->_vm->_sprites->blitUpdSprites(); @@ -984,7 +984,7 @@ void cmdReposition(AgiGame *state, uint8 *p) { int dx = (int8) _v[p1], dy = (int8) _v[p2]; debugC(4, kDebugLevelScripts, "dx=%d, dy=%d", dx, dy); - vt.flags |= UPDATE_POS; + vt.flags |= fUpdatePos; if (dx < 0 && vt.xPos < -dx) vt.xPos = 0; @@ -1002,7 +1002,7 @@ void cmdReposition(AgiGame *state, uint8 *p) { void cmdRepositionV1(AgiGame *state, uint8 *p) { vt.xPos2 = vt.xPos; vt.yPos2 = vt.yPos; - vt.flags |= UPDATE_POS; + vt.flags |= fUpdatePos; vt.xPos = (vt.xPos + p1) & 0xff; vt.yPos = (vt.yPos + p2) & 0xff; @@ -1011,14 +1011,14 @@ void cmdRepositionV1(AgiGame *state, uint8 *p) { void cmdRepositionTo(AgiGame *state, uint8 *p) { vt.xPos = p1; vt.yPos = p2; - vt.flags |= UPDATE_POS; + vt.flags |= fUpdatePos; state->_vm->fixPosition(p0); } void cmdRepositionToF(AgiGame *state, uint8 *p) { vt.xPos = _v[p1]; vt.yPos = _v[p2]; - vt.flags |= UPDATE_POS; + vt.flags |= fUpdatePos; state->_vm->fixPosition(p0); } @@ -1038,34 +1038,34 @@ void cmdForceUpdate(AgiGame *state, uint8 *p) { void cmdReverseLoop(AgiGame *state, uint8 *p) { debugC(4, kDebugLevelScripts, "o%d, f%d", p0, p1); - vt.cycle = CYCLE_REV_LOOP; - vt.flags |= (DONTUPDATE | UPDATE | CYCLING); + vt.cycle = kCycleRevLoop; + vt.flags |= (fDontupdate | fUpdate | fCycling); vt.parm1 = p1; setflag(p1, false); } void cmdReverseLoopV1(AgiGame *state, uint8 *p) { debugC(4, kDebugLevelScripts, "o%d, f%d", p0, p1); - vt.cycle = CYCLE_REV_LOOP; + vt.cycle = kCycleRevLoop; state->_vm->setCel(&vt, 0); - vt.flags |= (DONTUPDATE | UPDATE | CYCLING); + vt.flags |= (fDontupdate | fUpdate | fCycling); vt.parm1 = p1; vt.parm3 = 0; } void cmdEndOfLoop(AgiGame *state, uint8 *p) { debugC(4, kDebugLevelScripts, "o%d, f%d", p0, p1); - vt.cycle = CYCLE_END_OF_LOOP; - vt.flags |= (DONTUPDATE | UPDATE | CYCLING); + vt.cycle = kCycleEndOfLoop; + vt.flags |= (fDontupdate | fUpdate | fCycling); vt.parm1 = p1; setflag(p1, false); } void cmdEndOfLoopV1(AgiGame *state, uint8 *p) { debugC(4, kDebugLevelScripts, "o%d, f%d", p0, p1); - vt.cycle = CYCLE_END_OF_LOOP; + vt.cycle = kCycleEndOfLoop; state->_vm->setCel(&vt, 0); - vt.flags |= (DONTUPDATE | UPDATE | CYCLING); + vt.flags |= (fDontupdate | fUpdate | fCycling); vt.parm1 = p1; vt.parm3 = 0; } @@ -1084,12 +1084,12 @@ void cmdUnblock(AgiGame *state, uint8 *p) { } void cmdNormalMotion(AgiGame *state, uint8 *p) { - vt.motion = MOTION_NORMAL; + vt.motion = kMotionNormal; } void cmdStopMotion(AgiGame *state, uint8 *p) { vt.direction = 0; - vt.motion = MOTION_NORMAL; + vt.motion = kMotionNormal; if (p0 == 0) { // ego only _v[vEgoDir] = 0; state->playerControl = false; @@ -1097,11 +1097,11 @@ void cmdStopMotion(AgiGame *state, uint8 *p) { } void cmdStopMotionV1(AgiGame *state, uint8 *p) { - vt.flags &= ~ANIMATED; + vt.flags &= ~fAnimated; } void cmdStartMotion(AgiGame *state, uint8 *p) { - vt.motion = MOTION_NORMAL; + vt.motion = kMotionNormal; if (p0 == 0) { // ego only _v[vEgoDir] = 0; state->playerControl = true; @@ -1109,12 +1109,12 @@ void cmdStartMotion(AgiGame *state, uint8 *p) { } void cmdStartMotionV1(AgiGame *state, uint8 *p) { - vt.flags |= ANIMATED; + vt.flags |= fAnimated; } void cmdPlayerControl(AgiGame *state, uint8 *p) { state->playerControl = true; - state->viewTable[0].motion = MOTION_NORMAL; + state->viewTable[0].motion = kMotionNormal; } void cmdProgramControl(AgiGame *state, uint8 *p) { @@ -1122,24 +1122,24 @@ void cmdProgramControl(AgiGame *state, uint8 *p) { } void cmdFollowEgo(AgiGame *state, uint8 *p) { - vt.motion = MOTION_FOLLOW_EGO; + vt.motion = kMotionFollowEgo; vt.parm1 = p1 > vt.stepSize ? p1 : vt.stepSize; vt.parm2 = p2; vt.parm3 = 0xff; if (getVersion() < 0x2000) { _v[p2] = 0; - vt.flags |= UPDATE | ANIMATED; + vt.flags |= fUpdate | fAnimated; } else { setflag(p2, false); - vt.flags |= UPDATE; + vt.flags |= fUpdate; } } void cmdMoveObj(AgiGame *state, uint8 *p) { // _D (_D_WARN "o=%d, x=%d, y=%d, s=%d, f=%d", p0, p1, p2, p3, p4); - vt.motion = MOTION_MOVE_OBJ; + vt.motion = kMotionMoveObj; vt.parm1 = p1; vt.parm2 = p2; vt.parm3 = vt.stepSize; @@ -1150,10 +1150,10 @@ void cmdMoveObj(AgiGame *state, uint8 *p) { if (getVersion() < 0x2000) { _v[p4] = 0; - vt.flags |= UPDATE | ANIMATED; + vt.flags |= fUpdate | fAnimated; } else { setflag(p4, false); - vt.flags |= UPDATE; + vt.flags |= fUpdate; } if (p0 == 0) @@ -1165,7 +1165,7 @@ void cmdMoveObj(AgiGame *state, uint8 *p) { } void cmdMoveObjF(AgiGame *state, uint8 *p) { - vt.motion = MOTION_MOVE_OBJ; + vt.motion = kMotionMoveObj; vt.parm1 = _v[p1]; vt.parm2 = _v[p2]; vt.parm3 = vt.stepSize; @@ -1175,7 +1175,7 @@ void cmdMoveObjF(AgiGame *state, uint8 *p) { vt.stepSize = _v[p3]; setflag(p4, false); - vt.flags |= UPDATE; + vt.flags |= fUpdate; if (p0 == 0) state->playerControl = false; @@ -1189,11 +1189,11 @@ void cmdWander(AgiGame *state, uint8 *p) { if (p0 == 0) state->playerControl = false; - vt.motion = MOTION_WANDER; + vt.motion = kMotionWander; if (getVersion() < 0x2000) { - vt.flags |= UPDATE | ANIMATED; + vt.flags |= fUpdate | fAnimated; } else { - vt.flags |= UPDATE; + vt.flags |= fUpdate; } } @@ -1357,7 +1357,7 @@ void cmdDistance(AgiGame *state, uint8 *p) { VtEntry *v0 = &state->viewTable[p0]; VtEntry *v1 = &state->viewTable[p1]; - if (v0->flags & DRAWN && v1->flags & DRAWN) { + if (v0->flags & fDrawn && v1->flags & fDrawn) { x1 = v0->xPos + v0->xSize / 2; y1 = v0->yPos; x2 = v1->xPos + v1->xSize / 2; diff --git a/engines/agi/op_test.cpp b/engines/agi/op_test.cpp index bc711652f9..a44c68e0fc 100644 --- a/engines/agi/op_test.cpp +++ b/engines/agi/op_test.cpp @@ -188,7 +188,7 @@ void condUnknown13(AgiGame *state, uint8 *p) { // This command is used at least in the Amiga version of Gold Rush! v2.05 1989-03-09 // (AGI 2.316) in logics 1, 3, 5, 6, 137 and 192 (Logic.192 revealed this command's nature). // TODO: Check this command's implementation using disassembly just to be sure. - int ec = state->viewTable[0].flags & ADJ_EGO_XY; + int ec = state->viewTable[0].flags & fAdjEgoXY; debugC(7, kDebugLevelScripts, "op_test: in.motion.using.mouse = %s (Amiga-specific testcase 19)", ec ? "true" : "false"); state->testResult = ec; } diff --git a/engines/agi/saveload.cpp b/engines/agi/saveload.cpp index f0d976bbbb..28dd0a53dd 100644 --- a/engines/agi/saveload.cpp +++ b/engines/agi/saveload.cpp @@ -474,8 +474,8 @@ int AgiEngine::loadGame(const char *fileName, bool checkId) { v->cycleTimeCount = in->readByte(); v->direction = in->readByte(); - v->motion = in->readByte(); - v->cycle = in->readByte(); + v->motion = (MotionType)in->readByte(); + v->cycle = (CycleType)in->readByte(); v->priority = in->readByte(); v->flags = in->readUint16BE(); diff --git a/engines/agi/sprite.cpp b/engines/agi/sprite.cpp index ea0b07f4da..cb081065de 100644 --- a/engines/agi/sprite.cpp +++ b/engines/agi/sprite.cpp @@ -257,7 +257,7 @@ bool SpritesMgr::testUpdating(VtEntry *v, AgiEngine *agi) { if (~agi->_game.dirView[v->currentView].flags & RES_LOADED) return false; - return (v->flags & (ANIMATED | UPDATE | DRAWN)) == (ANIMATED | UPDATE | DRAWN); + return (v->flags & (fAnimated | fUpdate | fDrawn)) == (fAnimated | fUpdate | fDrawn); } /** @@ -268,7 +268,7 @@ bool SpritesMgr::testNotUpdating(VtEntry *v, AgiEngine *vm) { if (~vm->_game.dirView[v->currentView].flags & RES_LOADED) return false; - return (v->flags & (ANIMATED | UPDATE | DRAWN)) == (ANIMATED | DRAWN); + return (v->flags & (fAnimated | fUpdate | fDrawn)) == (fAnimated | fDrawn); } /** @@ -332,7 +332,7 @@ void SpritesMgr::buildList(SpriteList &l, bool (*test)(VtEntry *, AgiEngine *)) for (v = _vm->_game.viewTable; v < &_vm->_game.viewTable[MAX_VIEWTABLE]; v++) { if ((*test)(v, _vm)) { entry[i] = v; - yVal[i] = v->flags & FIXED_PRIORITY ? prioToY(v->priority) : v->yPos; + yVal[i] = v->flags & fFixedPriority ? prioToY(v->priority) : v->yPos; i++; } } @@ -407,13 +407,13 @@ void SpritesMgr::commitSprites(SpriteList &l, bool immediate) { continue; if (s->v->xPos == s->v->xPos2 && s->v->yPos == s->v->yPos2) { - s->v->flags |= DIDNT_MOVE; + s->v->flags |= fDidntMove; continue; } s->v->xPos2 = s->v->xPos; s->v->yPos2 = s->v->yPos; - s->v->flags &= ~DIDNT_MOVE; + s->v->flags &= ~fDidntMove; } } diff --git a/engines/agi/view.cpp b/engines/agi/view.cpp index 956d398fb4..3f3686561e 100644 --- a/engines/agi/view.cpp +++ b/engines/agi/view.cpp @@ -47,7 +47,7 @@ void AgiEngine::lSetCel(VtEntry *v, int n) { // in the KQ4 introduction // It seems there's either a bug with KQ4's logic script 120 (the intro script) // or flag 64 is not set correctly, which causes the erroneous behavior from the actors - if (getGameID() == GID_KQ4 && !(v->flags & UPDATE) && (v->currentView == 172)) + if (getGameID() == GID_KQ4 && !(v->flags & fUpdate) && (v->currentView == 172)) return; currentVc = ¤tVl->cel[n]; @@ -78,8 +78,8 @@ void AgiEngine::lSetLoop(VtEntry *v, int n) { void AgiEngine::updateView(VtEntry *v) { int cel, lastCel; - if (v->flags & DONTUPDATE) { - v->flags &= ~DONTUPDATE; + if (v->flags & fDontupdate) { + v->flags &= ~fDontupdate; return; } @@ -87,32 +87,32 @@ void AgiEngine::updateView(VtEntry *v) { lastCel = v->numCels - 1; switch (v->cycle) { - case CYCLE_NORMAL: + case kCycleNormal: if (++cel > lastCel) cel = 0; break; - case CYCLE_END_OF_LOOP: + case kCycleEndOfLoop: if (cel < lastCel) { debugC(5, kDebugLevelResources, "cel %d (last = %d)", cel + 1, lastCel); if (++cel != lastCel) break; } setflag(v->parm1, true); - v->flags &= ~CYCLING; + v->flags &= ~fCycling; v->direction = 0; - v->cycle = CYCLE_NORMAL; + v->cycle = kCycleNormal; break; - case CYCLE_REV_LOOP: + case kCycleRevLoop: if (cel) { if (--cel) break; } setflag(v->parm1, true); - v->flags &= ~CYCLING; + v->flags &= ~fCycling; v->direction = 0; - v->cycle = CYCLE_NORMAL; + v->cycle = kCycleNormal; break; - case CYCLE_REVERSE: + case kCycleReverse: if (cel == 0) { cel = lastCel; } else { @@ -259,20 +259,20 @@ void AgiEngine::setCel(VtEntry *v, int n) { */ void AgiEngine::clipViewCoordinates(VtEntry *v) { if (v->xPos + v->xSize > _WIDTH) { - v->flags |= UPDATE_POS; + v->flags |= fUpdatePos; v->xPos = _WIDTH - v->xSize; } if (v->yPos - v->ySize + 1 < 0) { - v->flags |= UPDATE_POS; + v->flags |= fUpdatePos; v->yPos = v->ySize - 1; } - if (v->yPos <= _game.horizon && (~v->flags & IGNORE_HORIZON)) { - v->flags |= UPDATE_POS; + if (v->yPos <= _game.horizon && (~v->flags & fIgnoreHorizon)) { + v->flags |= fUpdatePos; v->yPos = _game.horizon + 1; } if (getVersion() < 0x2000) { - v->flags |= DONTUPDATE; + v->flags |= fDontupdate; } } @@ -313,10 +313,10 @@ void AgiEngine::setView(VtEntry *v, int n) { * @param v pointer to view table entry */ void AgiEngine::startUpdate(VtEntry *v) { - if (~v->flags & UPDATE) { + if (~v->flags & fUpdate) { _sprites->eraseBoth(); - v->flags |= UPDATE; + v->flags |= fUpdate; _sprites->blitBoth(); _sprites->commitBoth(); } @@ -327,10 +327,10 @@ void AgiEngine::startUpdate(VtEntry *v) { * @param v pointer to view table entry */ void AgiEngine::stopUpdate(VtEntry *v) { - if (v->flags & UPDATE) { + if (v->flags & fUpdate) { _sprites->eraseBoth(); - v->flags &= ~UPDATE; + v->flags &= ~fUpdate; _sprites->blitBoth(); _sprites->commitBoth(); } @@ -357,14 +357,14 @@ void AgiEngine::updateViewtable() { i = 0; for (v = _game.viewTable; v < &_game.viewTable[MAX_VIEWTABLE]; v++) { - if ((v->flags & (ANIMATED | UPDATE | DRAWN)) != (ANIMATED | UPDATE | DRAWN)) { + if ((v->flags & (fAnimated | fUpdate | fDrawn)) != (fAnimated | fUpdate | fDrawn)) { continue; } i++; loop = 4; - if (~v->flags & FIX_LOOP) { + if (~v->flags & fFixLoop) { switch (v->numLoops) { case 2: case 3: @@ -389,7 +389,7 @@ void AgiEngine::updateViewtable() { } } - if (~v->flags & CYCLING) + if (~v->flags & fCycling) continue; if (v->cycleTimeCount == 0) @@ -406,7 +406,7 @@ void AgiEngine::updateViewtable() { updatePosition(); _sprites->blitUpdSprites(); _sprites->commitUpdSprites(); - _game.viewTable[0].flags &= ~(ON_WATER | ON_LAND); + _game.viewTable[0].flags &= ~(fOnWater | fOnLand); } } diff --git a/engines/agi/view.h b/engines/agi/view.h index 0ef443f8e5..5cf59d7df5 100644 --- a/engines/agi/view.h +++ b/engines/agi/view.h @@ -50,6 +50,39 @@ struct AgiView { uint8 *rdata; }; +enum MotionType { + kMotionNormal = 0, + kMotionWander = 1, + kMotionFollowEgo = 2, + kMotionMoveObj = 3 +}; + +enum CycleType { + kCycleNormal = 0, + kCycleEndOfLoop = 1, + kCycleRevLoop = 2, + kCycleReverse = 3 + }; + +enum ViewFlags { + fDrawn = (1 << 0), + fIgnoreBlocks = (1 << 1), + fFixedPriority = (1 << 2), + fIgnoreHorizon = (1 << 3), + fUpdate = (1 << 4), + fCycling = (1 << 5), + fAnimated = (1 << 6), + fMotion = (1 << 7), + fOnWater = (1 << 8), + fIgnoreObjects = (1 << 9), + fUpdatePos = (1 << 10), + fOnLand = (1 << 11), + fDontupdate = (1 << 12), + fFixLoop = (1 << 13), + fDidntMove = (1 << 14), + fAdjEgoXY = (1 << 15) +}; + /** * AGI view table entry */ @@ -78,39 +111,10 @@ struct VtEntry { uint8 cycleTime; uint8 cycleTimeCount; uint8 direction; - -#define MOTION_NORMAL 0 -#define MOTION_WANDER 1 -#define MOTION_FOLLOW_EGO 2 -#define MOTION_MOVE_OBJ 3 - uint8 motion; - -#define CYCLE_NORMAL 0 -#define CYCLE_END_OF_LOOP 1 -#define CYCLE_REV_LOOP 2 -#define CYCLE_REVERSE 3 - uint8 cycle; - + MotionType motion; + CycleType cycle; uint8 priority; - -#define DRAWN 0x0001 -#define IGNORE_BLOCKS 0x0002 -#define FIXED_PRIORITY 0x0004 -#define IGNORE_HORIZON 0x0008 -#define UPDATE 0x0010 -#define CYCLING 0x0020 -#define ANIMATED 0x0040 -#define MOTION 0x0080 -#define ON_WATER 0x0100 -#define IGNORE_OBJECTS 0x0200 -#define UPDATE_POS 0x0400 -#define ON_LAND 0x0800 -#define DONTUPDATE 0x1000 -#define FIX_LOOP 0x2000 -#define DIDNT_MOVE 0x4000 -#define ADJ_EGO_XY 0x8000 uint16 flags; - uint8 parm1; uint8 parm2; uint8 parm3; -- cgit v1.2.3