AGI: Renamed some #defines to our code conventions and moved them to enums
This commit is contained in:
parent
026a2c52da
commit
273e37f726
10 changed files with 182 additions and 176 deletions
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue