aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/hdb/ai-cinematic.cpp293
1 files changed, 141 insertions, 152 deletions
diff --git a/engines/hdb/ai-cinematic.cpp b/engines/hdb/ai-cinematic.cpp
index 80226bee44..36e740543f 100644
--- a/engines/hdb/ai-cinematic.cpp
+++ b/engines/hdb/ai-cinematic.cpp
@@ -69,17 +69,8 @@ static const char *cineTypeStr[] = {
};
void AI::processCines() {
-
- AIEntity *e;
- Picture *p;
- const char *title;
- bool complete, bailOut;
-
- if (!_cineActive) {
+ if (!_cineActive)
return;
- }
-
- bailOut = complete = false;
// Make sure Dialogs are timing out
g_hdb->_window->checkDialogClose(0, 0);
@@ -96,45 +87,52 @@ void AI::processCines() {
if (g_hdb->getPause())
return;
+ bool bailOut = false;
+ bool complete = false;
+
for (uint i = 0; i < _cine.size(); i++) {
debug(3, "processCines: [%d] %s now: %d start: %d delay: %d", i, cineTypeStr[_cine[i]->cmdType],
g_system->getMillis(), _cine[i]->start, _cine[i]->delay);
switch (_cine[i]->cmdType) {
case C_STOPCINE:
- char func[64];
- memset(func, 0, 64);
+ {
+ char func[64];
+ memset(func, 0, 64);
- if (_cine[i]->title)
- strcpy(func, _cine[i]->title);
+ if (_cine[i]->title)
+ strcpy(func, _cine[i]->title);
- cineCleanup();
- if (func[0])
- g_hdb->_lua->callFunction(func, 0);
+ cineCleanup();
+ if (func[0])
+ g_hdb->_lua->callFunction(func, 0);
+ }
break;
- case C_STARTMAP:
- title = _cine[i]->title;
- cineFreeGfx(); // free all gfx alloc'ed during cine
- _cineActive = false;
- _playerLock = false;
- _cameraLock = false;
- g_hdb->_window->setInfobarDark(0);
- g_hdb->_gfx->setPointerState(1);
- _cine.resize(0);
- _numCineFreeList = 0;
- _numCineBlitList = 0;
- // if cine is aborted and an abort function was specified, call it
- if (_cineAborted && _cineAbortFunc)
- g_hdb->_lua->callFunction(_cineAbortFunc, 0);
- g_hdb->changeMap(title);
- return;
+ case C_STARTMAP:
+ {
+ const char *title = _cine[i]->title;
+ // free all gfx alloc'ed during cine
+ cineFreeGfx();
+ _cineActive = false;
+ _playerLock = false;
+ _cameraLock = false;
+ g_hdb->_window->setInfobarDark(0);
+ g_hdb->_gfx->setPointerState(1);
+ _cine.resize(0);
+ _numCineFreeList = 0;
+ _numCineBlitList = 0;
+ // if cine is aborted and an abort function was specified, call it
+ if (_cineAborted && _cineAbortFunc)
+ g_hdb->_lua->callFunction(_cineAbortFunc, 0);
+ g_hdb->changeMap(title);
+ return;
+ }
break;
case C_LOCKPLAYER:
_playerLock = true;
complete = true;
- if (_player) {
+ if (_player)
stopEntity(_player);
- }
clearWaypoints();
break;
case C_UNLOCKPLAYER:
@@ -149,11 +147,13 @@ void AI::processCines() {
complete = true;
break;
case C_RESETCAMERA:
- int px, py;
- _cameraLock = false;
- g_hdb->_ai->getPlayerXY(&px, &py);
- g_hdb->_map->centerMapXY(px + 16, py + 16);
- complete = true;
+ {
+ _cameraLock = false;
+ int px, py;
+ g_hdb->_ai->getPlayerXY(&px, &py);
+ g_hdb->_map->centerMapXY(px + 16, py + 16);
+ complete = true;
+ }
break;
case C_MOVECAMERA:
_cameraLock = true;
@@ -178,20 +178,17 @@ void AI::processCines() {
if (!(_cine[i]->start)) {
_cine[i]->start = 1;
_cine[i]->delay = g_system->getMillis() + _cine[i]->delay * 1000;
- } else {
- if (_cine[i]->delay < g_system->getMillis()) {
- complete = true;
- } else {
- bailOut = true;
- }
- }
+ } else if (_cine[i]->delay < g_system->getMillis())
+ complete = true;
+ else
+ bailOut = true;
break;
case C_WAITUNTILDONE:
- if (!i) {
+ if (!i)
complete = true;
- } else {
+ else
bailOut = true;
- }
+
break;
case C_SETENTITY:
_cine[i]->e = locateEntity(_cine[i]->string);
@@ -202,33 +199,31 @@ void AI::processCines() {
_cine[i]->e->y = (int)_cine[i]->y;
_cine[i]->e->level = (int)_cine[i]->x2;
debug(2, "Found '%s' in setEntity", _cine[i]->string);
- } else {
+ } else
warning("Can't locate '%s' in setEntity", _cine[i]->string);
- }
+
complete = true;
break;
case C_MOVEENTITY:
if (!_cine[i]->start) {
- e = locateEntity(_cine[i]->title);
+ AIEntity *e = locateEntity(_cine[i]->title);
if (e) {
_cine[i]->e = e;
_cine[i]->e->moveSpeed = _cine[i]->speed;
_cine[i]->e->level = (int)_cine[i]->x2;
setEntityGoal(_cine[i]->e, (int)_cine[i]->x, (int)_cine[i]->y);
_cine[i]->start = 1;
- } else {
+ } else
warning("Can't locate '%s' in moveEntity", _cine[i]->title);
- }
} else {
debug(3, "C_MOVEENTITY: %d, %s tileX: %d, goalX: %d tileY %d, goalY: %d", i, AIType2Str(_cine[i]->e->type), _cine[i]->e->tileX, _cine[i]->e->goalX, _cine[i]->e->tileY, _cine[i]->e->goalY);
- if (!_cine[i]->e->goalX) {
+ if (!_cine[i]->e->goalX)
complete = true;
- }
}
break;
case C_ANIMENTITY:
if (!_cine[i]->start) {
- e = locateEntity(_cine[i]->title);
+ AIEntity *e = locateEntity(_cine[i]->title);
if (e) {
_cine[i]->e = e;
e->state = (AIState)_cine[i]->speed;
@@ -243,7 +238,7 @@ void AI::processCines() {
complete = true;
}
} else {
- e = _cine[i]->e;
+ AIEntity *e = _cine[i]->e;
if (!e->animFrame && e->animDelay == e->animCycle) {
e->state = STATE_STANDDOWN;
e->animFrame = 0;
@@ -253,94 +248,94 @@ void AI::processCines() {
}
break;
case C_SETANIMFRAME:
- e = locateEntity(_cine[i]->title);
- if (e) {
- e->state = (AIState)_cine[i]->start;
- e->animFrame = _cine[i]->end;
- e->animDelay = e->animCycle;
- animEntFrames(e);
- e->state = STATE_NONE;
- complete = true;
+ {
+ AIEntity *e = locateEntity(_cine[i]->title);
+ if (e) {
+ e->state = (AIState)_cine[i]->start;
+ e->animFrame = _cine[i]->end;
+ e->animDelay = e->animCycle;
+ animEntFrames(e);
+ e->state = STATE_NONE;
+ complete = true;
+ }
}
break;
case C_ENTITYFACE:
- {
- e = locateEntity(_cine[i]->title);
-
- if (e) {
- int d = (int)_cine[i]->x;
- e->dir = (AIDir)d;
- switch (e->dir) {
- case DIR_UP:
- e->state = STATE_STANDUP;
- break;
- case DIR_DOWN:
- e->state = STATE_STANDDOWN;
- break;
- case DIR_LEFT:
- e->state = STATE_STANDLEFT;
- break;
- case DIR_RIGHT:
- e->state = STATE_STANDRIGHT;
- break;
- default:
- warning("AI-CINEMATIC: processCines: DIR_NONE");
- }
- } else {
- warning("Can't find %s to ENTITYFACE", _cine[i]->title);
+ {
+ AIEntity *e = locateEntity(_cine[i]->title);
+
+ if (e) {
+ int d = (int)_cine[i]->x;
+ e->dir = (AIDir)d;
+ switch (e->dir) {
+ case DIR_UP:
+ e->state = STATE_STANDUP;
+ break;
+ case DIR_DOWN:
+ e->state = STATE_STANDDOWN;
+ break;
+ case DIR_LEFT:
+ e->state = STATE_STANDLEFT;
+ break;
+ case DIR_RIGHT:
+ e->state = STATE_STANDRIGHT;
+ break;
+ default:
+ warning("AI-CINEMATIC: processCines: DIR_NONE");
+ }
+ } else
+ warning("Can't find %s to ENTITYFACE", _cine[i]->title);
+
+ complete = true;
}
- complete = true;
break;
- }
case C_DIALOG:
if (_cine[i]->start) {
g_hdb->_window->openDialog(_cine[i]->title, -1, _cine[i]->string, 0, NULL);
g_hdb->_window->setDialogDelay(_cine[i]->delay);
_cine[i]->start = 0;
- } else {
- if (g_hdb->_window->getDialogDelay() < g_hdb->getTimeSlice())
- complete = true;
- }
+ } else if (g_hdb->_window->getDialogDelay() < g_hdb->getTimeSlice())
+ complete = true;
break;
case C_TEXTOUT:
if (!_cine[i]->start) {
g_hdb->_window->textOut(_cine[i]->title, _cine[i]->x, _cine[i]->y, _cine[i]->end);
_cine[i]->start = 1;
- } else {
- if (!g_hdb->_window->textOutActive())
- complete = true;
- }
+ } else if (!g_hdb->_window->textOutActive())
+ complete = true;
break;
case C_CENTERTEXTOUT:
if (!_cine[i]->start) {
g_hdb->_window->centerTextOut(_cine[i]->title, _cine[i]->y, _cine[i]->end);
_cine[i]->start = 1;
- } else {
- if (!g_hdb->_window->textOutActive())
- complete = true;
- }
+ } else if (!g_hdb->_window->textOutActive())
+ complete = true;
break;
case C_DRAWPIC:
-
- if ((p = cineFindInBlitList(_cine[i]->id)) == NULL) {
- p = g_hdb->_gfx->loadPic(_cine[i]->string);
- cineAddToFreeList(p);
- cineAddToBlitList(_cine[i]->id, p, (int)_cine[i]->x, (int)_cine[i]->y, false);
+ {
+ Picture *p = cineFindInBlitList(_cine[i]->id);
+ if (p == NULL) {
+ p = g_hdb->_gfx->loadPic(_cine[i]->string);
+ cineAddToFreeList(p);
+ cineAddToBlitList(_cine[i]->id, p, (int)_cine[i]->x, (int)_cine[i]->y, false);
+ }
+ _cine[i]->pic = p;
+ _cine[i]->pic->draw((int)_cine[i]->x, (int)_cine[i]->y);
+ complete = true;
}
- _cine[i]->pic = p;
- _cine[i]->pic->draw((int)_cine[i]->x, (int)_cine[i]->y);
- complete = true;
break;
case C_DRAWMASKEDPIC:
-
- if ((p = cineFindInBlitList(_cine[i]->id)) == NULL) {
- p = g_hdb->_gfx->loadPic(_cine[i]->string);
- cineAddToFreeList(p);
- cineAddToBlitList(_cine[i]->id, p, (int)_cine[i]->x, (int)_cine[i]->y, true);
+ {
+ Picture *p = cineFindInBlitList(_cine[i]->id);
+ if (p == NULL) {
+ p = g_hdb->_gfx->loadPic(_cine[i]->string);
+ cineAddToFreeList(p);
+ cineAddToBlitList(_cine[i]->id, p, (int)_cine[i]->x, (int)_cine[i]->y, true);
+ }
+ _cine[i]->pic = p;
+ _cine[i]->pic->drawMasked((int)_cine[i]->x, (int)_cine[i]->y);
+ complete = true;
}
- _cine[i]->pic = p;
- _cine[i]->pic->drawMasked((int)_cine[i]->x, (int)_cine[i]->y);
- complete = true;
break;
case C_MOVEPIC:
@@ -385,9 +380,8 @@ void AI::processCines() {
case C_USEENTITY:
for (Common::Array<AIEntity *>::iterator it = _ents->begin(); it != _ents->end(); ++it) {
- if ((*it)->entityName && Common::matchString((*it)->entityName, _cine[i]->string, true)) {
+ if ((*it)->entityName && Common::matchString((*it)->entityName, _cine[i]->string, true))
g_hdb->useEntity((*it));
- }
}
for (int k = 0; k < kMaxActions; k++) {
if (_actions[k].entityName && Common::matchString(_actions[k].entityName, _cine[i]->string, true)) {
@@ -413,34 +407,32 @@ void AI::processCines() {
if (!_cine[i]->start) {
g_hdb->_gfx->setFade(true, (bool)_cine[i]->end, _cine[i]->speed);
_cine[i]->start = 1;
- } else if (!g_hdb->_gfx->isFadeActive()) {
+ } else if (!g_hdb->_gfx->isFadeActive())
complete = true;
- }
break;
case C_FADEOUT:
if (!_cine[i]->start) {
g_hdb->_gfx->setFade(false, (bool)_cine[i]->end, _cine[i]->speed);
_cine[i]->start = 1;
- } else if (!g_hdb->_gfx->isFadeActive()) {
+ } else if (!g_hdb->_gfx->isFadeActive())
complete = true;
- }
break;
case C_SPAWNENTITY:
- {
- int x2, y2;
- x2 = (int)_cine[i]->x2;
- y2 = (int)_cine[i]->y2;
- spawn((AIType)x2, (AIDir)y2, (int)_cine[i]->x, (int)_cine[i]->y, _cine[i]->title, _cine[i]->string,
- _cine[i]->id, (AIDir)_cine[i]->start, (int)_cine[i]->end, (int)_cine[i]->delay, (int)_cine[i]->speed, 1);
- complete = true;
+ {
+ int x2 = (int)_cine[i]->x2;
+ int y2 = (int)_cine[i]->y2;
+ spawn((AIType)x2, (AIDir)y2, (int)_cine[i]->x, (int)_cine[i]->y, _cine[i]->title, _cine[i]->string,
+ _cine[i]->id, (AIDir)_cine[i]->start, (int)_cine[i]->end, (int)_cine[i]->delay, (int)_cine[i]->speed, 1);
+ complete = true;
+ }
break;
- }
- break;
case C_REMOVEENTITY:
- e = locateEntity(_cine[i]->string);
- if (e)
- removeEntity(e);
- complete = true;
+ {
+ AIEntity *e = locateEntity(_cine[i]->string);
+ if (e)
+ removeEntity(e);
+ complete = true;
+ }
break;
case C_CLEAR_FG:
g_hdb->_map->setMapFGTileIndex((int)_cine[i]->x, (int)_cine[i]->y, -1);
@@ -466,16 +458,13 @@ void AI::processCines() {
break;
}
- if (bailOut) {
+ if (bailOut)
return;
- }
- if (complete) {
- if (_cine.size()) {
- _cine.remove_at(i);
- i--;
- complete = false;
- }
+ if (complete && _cine.size()) {
+ _cine.remove_at(i);
+ i--;
+ complete = false;
}
}
}
@@ -553,9 +542,9 @@ void AI::cineAddToFreeList(Picture *pic) {
}
void AI::cineFreeGfx() {
- for (int i = 0; i < _numCineFreeList; i++) {
+ for (int i = 0; i < _numCineFreeList; i++)
delete _cineFreeList[i];
- }
+
_numCineFreeList = 0;
}
@@ -843,7 +832,7 @@ void AI::cinePlayVoice(int index, int actor) {
void AI::cineFadeIn(bool isBlack, int steps) {
CineCommand *cmd = new CineCommand;
cmd->speed = steps;
- cmd->end = (int) isBlack;
+ cmd->end = (int)isBlack;
cmd->start = 0;
cmd->cmdType = C_FADEIN;
_cine.push_back(cmd);
@@ -852,7 +841,7 @@ void AI::cineFadeIn(bool isBlack, int steps) {
void AI::cineFadeOut(bool isBlack, int steps) {
CineCommand *cmd = new CineCommand;
cmd->speed = steps;
- cmd->end = (int) isBlack;
+ cmd->end = (int)isBlack;
cmd->start = 0;
cmd->cmdType = C_FADEOUT;
_cine.push_back(cmd);