diff options
author | Torbjörn Andersson | 2006-04-10 08:34:16 +0000 |
---|---|---|
committer | Torbjörn Andersson | 2006-04-10 08:34:16 +0000 |
commit | 7ab84e4d99a11eb9a32efc895f55597660c48d4b (patch) | |
tree | a43bd266ae6e9a8fbd1ac2b2d9b81330a1825612 | |
parent | 1d9cd5ad7de22349cbdd31b78aa60a0824f1bf5b (diff) | |
download | scummvm-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.cpp | 56 | ||||
-rw-r--r-- | engines/simon/simon.cpp | 49 | ||||
-rw-r--r-- | engines/simon/simon.h | 1 |
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(); |