aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/hdb/ai-funcs.cpp38
-rw-r--r--engines/hdb/ai.h3
2 files changed, 40 insertions, 1 deletions
diff --git a/engines/hdb/ai-funcs.cpp b/engines/hdb/ai-funcs.cpp
index 8df88cf11c..6ccc982761 100644
--- a/engines/hdb/ai-funcs.cpp
+++ b/engines/hdb/ai-funcs.cpp
@@ -499,6 +499,44 @@ void AI::removeEntity(AIEntity *e) {
_ents->erase(&e);
}
+void AI::setEntityGoal(AIEntity *e, int x, int y) {
+ int xv, yv;
+
+ e->xVel = e->yVel = 0;
+
+ xv = x - e->tileX;
+ if (xv < 0) {
+ e->xVel = -e->moveSpeed;
+ e->state = STATE_MOVELEFT;
+ e->dir = DIR_LEFT;
+ } else if (xv > 0) {
+ e->xVel = e->moveSpeed;
+ e->state = STATE_MOVERIGHT;
+ e->dir = DIR_RIGHT;
+ }
+
+ yv = y - e->tileY;
+ if (yv < 0) {
+ e->yVel = -e->moveSpeed;
+ e->state = STATE_MOVELEFT;
+ e->dir = DIR_LEFT;
+ } else if (yv > 0) {
+ e->yVel = e->moveSpeed;
+ e->state = STATE_MOVERIGHT;
+ e->dir = DIR_RIGHT;
+ }
+
+ if (e->type == AI_GUY && _playerRunning) {
+ e->xVel = e->xVel << 1;
+ e->yVel = e->yVel << 1;
+ }
+
+ e->goalX = x;
+ e->goalY = y;
+ e->animFrame = 0;
+ e->drawXOff = e->drawYOff = 0;
+}
+
// Initializes each entity after map is loaded
void AI::initAllEnts() {
for (Common::Array<AIEntity *>::iterator it = _ents->begin(); it != _ents->end(); it++) {
diff --git a/engines/hdb/ai.h b/engines/hdb/ai.h
index 378318f3a8..d6af20d3d6 100644
--- a/engines/hdb/ai.h
+++ b/engines/hdb/ai.h
@@ -359,7 +359,7 @@ struct AIEntity {
uint16 drawXOff, drawYOff; // might need a drawing offset
uint16 onScreen; // FLAG: is this entity onscreen?
uint16 moveSpeed; // movement speed of this entity
- uint16 xVel, yVel; // movement values
+ int16 xVel, yVel; // movement values
uint16 tileX, tileY;
uint16 goalX, goalY; // where we're trying to go - TILE COORDS
uint16 touchpX, touchpY, touchpTile, touchpWait; // ACTION index a touchplate is using, which you're on
@@ -460,6 +460,7 @@ public:
void stopEntity(AIEntity *e);
AIEntity *locateEntity(const char *luaName);
void removeEntity(AIEntity *e);
+ void setEntityGoal(AIEntity *e, int x, int y);
void initAllEnts();
bool getTableEnt(AIType type);
bool walkThroughEnt(AIType type);