aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTorbjörn Andersson2006-04-10 08:34:16 +0000
committerTorbjörn Andersson2006-04-10 08:34:16 +0000
commit7ab84e4d99a11eb9a32efc895f55597660c48d4b (patch)
treea43bd266ae6e9a8fbd1ac2b2d9b81330a1825612
parent1d9cd5ad7de22349cbdd31b78aa60a0824f1bf5b (diff)
downloadscummvm-rg350-7ab84e4d99a11eb9a32efc895f55597660c48d4b.tar.gz
scummvm-rg350-7ab84e4d99a11eb9a32efc895f55597660c48d4b.tar.bz2
scummvm-rg350-7ab84e4d99a11eb9a32efc895f55597660c48d4b.zip
Merged o_pathfind() into o1_getPathPosn().
svn-id: r21757
-rw-r--r--engines/simon/items.cpp56
-rw-r--r--engines/simon/simon.cpp49
-rw-r--r--engines/simon/simon.h1
3 files changed, 51 insertions, 55 deletions
diff --git a/engines/simon/items.cpp b/engines/simon/items.cpp
index 843a39552e..7a14bd52ac 100644
--- a/engines/simon/items.cpp
+++ b/engines/simon/items.cpp
@@ -1475,11 +1475,57 @@ void SimonEngine::o1_screenTextPObj() {
void SimonEngine::o1_getPathPosn() {
// 178: path find
- uint a = getVarOrWord();
- uint b = getVarOrWord();
- uint c = getVarOrByte();
- uint d = getVarOrByte();
- o_pathfind(a, b, c, d);
+ uint x = getVarOrWord();
+ uint y = getVarOrWord();
+ uint var_1 = getVarOrByte();
+ uint var_2 = getVarOrByte();
+
+ const uint16 *p;
+ uint i, j;
+ uint prev_i;
+ uint x_diff, y_diff;
+ uint best_i = 0, best_j = 0, best_dist = 0xFFFFFFFF;
+
+ if (getGameType() == GType_FF) {
+ x += _scrollX;
+ y += _scrollY;
+ }
+
+ if (getGameType() == GType_SIMON2) {
+ x += _scrollX * 8;
+ }
+
+ int end = (getGameType() == GType_FF) ? 9999 : 999;
+ prev_i = 21 - _variableArray[12];
+ for (i = 20; i != 0; --i) {
+ p = (const uint16 *)_pathFindArray[20 - i];
+ if (!p)
+ continue;
+ for (j = 0; readUint16Wrapper(&p[0]) != end; j++, p += 2) {
+ x_diff = abs((int)(readUint16Wrapper(&p[0]) - x));
+ y_diff = abs((int)(readUint16Wrapper(&p[1]) - 12 - y));
+
+ if (x_diff < y_diff) {
+ x_diff /= 4;
+ y_diff *= 4;
+ }
+ x_diff += y_diff /= 4;
+
+ if (x_diff < best_dist || x_diff == best_dist && prev_i == i) {
+ best_dist = x_diff;
+ best_i = 21 - i;
+ best_j = j;
+ }
+ }
+ }
+
+ if (getGameType() == GType_FF && getBitFlag(83)) {
+ _variableArray[var_1] = best_i;
+ _variableArray[var_2] = best_j;
+ } else {
+ _variableArray[var_1] = best_i;
+ _variableArray[var_2] = best_j;
+ }
}
void SimonEngine::o1_scnTxtLongText() {
diff --git a/engines/simon/simon.cpp b/engines/simon/simon.cpp
index e26adc499b..6518ac9dd4 100644
--- a/engines/simon/simon.cpp
+++ b/engines/simon/simon.cpp
@@ -2941,55 +2941,6 @@ uint SimonEngine::itemPtrToID(Item *id) {
return 0;
}
-void SimonEngine::o_pathfind(int x, int y, uint var_1, uint var_2) {
- const uint16 *p;
- uint i, j;
- uint prev_i;
- uint x_diff, y_diff;
- uint best_i = 0, best_j = 0, best_dist = 0xFFFFFFFF;
-
- if (getGameType() == GType_FF) {
- x += _scrollX;
- y += _scrollY;
- }
-
- if (getGameType() == GType_SIMON2) {
- x += _scrollX * 8;
- }
-
- int end = (getGameType() == GType_FF) ? 9999 : 999;
- prev_i = 21 - _variableArray[12];
- for (i = 20; i != 0; --i) {
- p = (const uint16 *)_pathFindArray[20 - i];
- if (!p)
- continue;
- for (j = 0; readUint16Wrapper(&p[0]) != end; j++, p += 2) {
- x_diff = abs((int)(readUint16Wrapper(&p[0]) - x));
- y_diff = abs((int)(readUint16Wrapper(&p[1]) - 12 - y));
-
- if (x_diff < y_diff) {
- x_diff /= 4;
- y_diff *= 4;
- }
- x_diff += y_diff /= 4;
-
- if (x_diff < best_dist || x_diff == best_dist && prev_i == i) {
- best_dist = x_diff;
- best_i = 21 - i;
- best_j = j;
- }
- }
- }
-
- if (getGameType() == GType_FF && getBitFlag(83)) {
- _variableArray[var_1] = best_i;
- _variableArray[var_2] = best_j;
- } else {
- _variableArray[var_1] = best_i;
- _variableArray[var_2] = best_j;
- }
-}
-
void SimonEngine::delete_hitarea_by_index(uint index) {
CHECK_BOUNDS(index, _hitAreas);
_hitAreas[index].flags = 0;
diff --git a/engines/simon/simon.h b/engines/simon/simon.h
index 64b91378f9..8996dd1876 100644
--- a/engines/simon/simon.h
+++ b/engines/simon/simon.h
@@ -579,7 +579,6 @@ protected:
uint getOffsetOfChild2Param(SubObject *child, uint prop);
void o_setTextColor(uint color);
- void o_pathfind(int x, int y, uint var_1, uint var_2);
void o_mouseOn();
void o_mouseOff();
void o_unfreezeBottom();