[Scummvm-cvs-logs] SF.net SVN: scummvm: [27225] scummvm/trunk/engines/saga
h00ligan at users.sourceforge.net
h00ligan at users.sourceforge.net
Sat Jun 9 01:33:36 CEST 2007
Revision: 27225
http://scummvm.svn.sourceforge.net/scummvm/?rev=27225&view=rev
Author: h00ligan
Date: 2007-06-08 16:33:35 -0700 (Fri, 08 Jun 2007)
Log Message:
-----------
fix IHNM pathfinding engine. now TED(Chapter 5) interacts with the books properly
Modified Paths:
--------------
scummvm/trunk/engines/saga/actor.cpp
scummvm/trunk/engines/saga/objectmap.cpp
scummvm/trunk/engines/saga/script.cpp
Modified: scummvm/trunk/engines/saga/actor.cpp
===================================================================
--- scummvm/trunk/engines/saga/actor.cpp 2007-06-08 23:05:24 UTC (rev 27224)
+++ scummvm/trunk/engines/saga/actor.cpp 2007-06-08 23:33:35 UTC (rev 27225)
@@ -93,9 +93,9 @@
return ((i1) > (i2) ? 1 : ((i1) < (i2) ? -1 : 0));
}
-inline int16 quickDistance(const Point &point1, const Point &point2) {
+inline int16 quickDistance(const Point &point1, const Point &point2, int16 compressX) {
Point delta;
- delta.x = ABS(point1.x - point2.x) / 2;
+ delta.x = ABS(point1.x - point2.x) / compressX;
delta.y = ABS(point1.y - point2.y);
return ((delta.x < delta.y) ? (delta.y + delta.x / 2) : (delta.x + delta.y / 2));
}
@@ -2009,9 +2009,12 @@
actor = getActor(actorId);
actor->_actorFlags &= ~kActorBackwards;
- if (actor->_location.distance(actor->_finalTarget) > 8 && (actor->_flags & kProtagonist) && recurse && !(actor->_actorFlags & kActorNoCollide)) {
- actor->_actorFlags |= kActorNoCollide;
- return actorWalkTo(actorId, actor->_finalTarget);
+ if (_vm->getGameType() == GType_ITE) {
+
+ if (actor->_location.distance(actor->_finalTarget) > 8 && (actor->_flags & kProtagonist) && recurse && !(actor->_actorFlags & kActorNoCollide)) {
+ actor->_actorFlags |= kActorNoCollide;
+ return actorWalkTo(actorId, actor->_finalTarget);
+ }
}
actor->_currentAction = kActionWait;
@@ -2725,10 +2728,11 @@
const PathDirectionData *samplePathDirection;
Point nextPoint;
int directionCount;
+ int16 compressX = (_vm->getGameType() == GType_ITE) ? 2 : 1;
_pathDirectionListCount = 0;
pointCounter = 0;
- bestRating = quickDistance(fromPoint, toPoint);
+ bestRating = quickDistance(fromPoint, toPoint, compressX);
bestPath = fromPoint;
for (startDirection = 0; startDirection < 4; startDirection++) {
@@ -2776,7 +2780,7 @@
bestPoint = toPoint;
return pointCounter;
}
- currentRating = quickDistance(nextPoint, toPoint);
+ currentRating = quickDistance(nextPoint, toPoint, compressX);
if (currentRating < bestRating) {
bestRating = currentRating;
bestPath = nextPoint;
Modified: scummvm/trunk/engines/saga/objectmap.cpp
===================================================================
--- scummvm/trunk/engines/saga/objectmap.cpp 2007-06-08 23:05:24 UTC (rev 27224)
+++ scummvm/trunk/engines/saga/objectmap.cpp 2007-06-08 23:33:35 UTC (rev 27225)
@@ -146,6 +146,8 @@
Location location;
HitZone::ClickArea *clickArea;
Point *points;
+ Point specialPoint1;
+ Point specialPoint2;
for (i = 0; i < _clickAreasCount; i++) {
clickArea = &_clickAreas[i];
pointsCount = clickArea->pointsCount;
@@ -175,6 +177,14 @@
}
}
+ if (getSpecialPoint(specialPoint1)) {
+ specialPoint2 = specialPoint1;
+ specialPoint1.x--;
+ specialPoint1.y--;
+ specialPoint2.x++;
+ specialPoint2.y++;
+ ds->drawFrame(specialPoint1, specialPoint2, color);
+ }
}
Modified: scummvm/trunk/engines/saga/script.cpp
===================================================================
--- scummvm/trunk/engines/saga/script.cpp 2007-06-08 23:05:24 UTC (rev 27224)
+++ scummvm/trunk/engines/saga/script.cpp 2007-06-08 23:33:35 UTC (rev 27225)
@@ -639,10 +639,19 @@
}
if (hitZone != NULL) {
- if (hitZone->getFlags() & kHitZoneNoWalk) {
- _vm->_actor->actorFaceTowardsPoint(ID_PROTAG, pickLocation);
- doVerb();
- return;
+ if (_vm->getGameType() == GType_ITE) {
+ if (hitZone->getFlags() & kHitZoneNoWalk) {
+ _vm->_actor->actorFaceTowardsPoint(ID_PROTAG, pickLocation);
+ doVerb();
+ return;
+ }
+ } else {
+ if (_vm->getGameType() == GType_IHNM) {
+ if ((hitZone->getFlags() & kHitZoneNoWalk) && (_pendingVerb == getVerbType(kVerbWalkTo))) {
+ doVerb();
+ return;
+ }
+ }
}
if (hitZone->getFlags() & kHitZoneProject) {
@@ -663,26 +672,54 @@
}
}
- if ((_pendingVerb == getVerbType(kVerbWalkTo)) ||
- (_pendingVerb == getVerbType(kVerbPickUp)) ||
- (_pendingVerb == getVerbType(kVerbOpen)) ||
- (_pendingVerb == getVerbType(kVerbClose)) ||
- (_pendingVerb == getVerbType(kVerbUse))) {
- _vm->_actor->actorWalkTo(ID_PROTAG, pickLocation);
- } else {
- if (_pendingVerb == getVerbType(kVerbLookAt)) {
- if (objectTypeId(_pendingObject[0]) != kGameObjectActor ) {
+ if (_vm->getGameType() == GType_ITE) {
+ if ((_pendingVerb == getVerbType(kVerbWalkTo)) ||
+ (_pendingVerb == getVerbType(kVerbPickUp)) ||
+ (_pendingVerb == getVerbType(kVerbOpen)) ||
+ (_pendingVerb == getVerbType(kVerbClose)) ||
+ (_pendingVerb == getVerbType(kVerbUse))) {
_vm->_actor->actorWalkTo(ID_PROTAG, pickLocation);
+ } else {
+ if (_pendingVerb == getVerbType(kVerbLookAt)) {
+ if (objectTypeId(_pendingObject[0]) != kGameObjectActor ) {
+ _vm->_actor->actorWalkTo(ID_PROTAG, pickLocation);
+ } else {
+ doVerb();
+ }
} else {
- doVerb();
+ if ((_pendingVerb == getVerbType(kVerbTalkTo)) ||
+ (_pendingVerb == getVerbType(kVerbGive))) {
+ doVerb();
+ }
}
+ }
+ }
+
+ if (_vm->getGameType() == GType_IHNM) {
+
+ if ((_pendingVerb == getVerbType(kVerbWalkTo)) ||
+ (_pendingVerb == getVerbType(kVerbPickUp)) ||
+ (_pendingVerb == getVerbType(kVerbOpen)) ||
+ (_pendingVerb == getVerbType(kVerbClose)) ||
+ (_pendingVerb == getVerbType(kVerbUse))) {
+ _vm->_actor->actorWalkTo(ID_PROTAG, pickLocation);
} else {
- if ((_pendingVerb == getVerbType(kVerbTalkTo)) ||
- (_pendingVerb == getVerbType(kVerbGive))) {
+ if (_pendingVerb == getVerbType(kVerbLookAt)) {
+ if (objectTypeId(_pendingObject[0]) != kGameObjectActor ) {
+ _vm->_actor->actorWalkTo(ID_PROTAG, pickLocation);
+ } else {
+ _vm->_actor->actorFaceTowardsObject(ID_PROTAG, _pendingObject[0]);
doVerb();
+ }
+ } else {
+ if ((_pendingVerb == getVerbType(kVerbTalkTo)) ||
+ (_pendingVerb == getVerbType(kVerbGive))) {
+ doVerb();
+ }
}
}
}
+
}
void Script::whichObject(const Point& mousePoint) {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list