Ticket #2064: samnmax_1220168.diff

File samnmax_1220168.diff, 1.7 KB (added by cyxx, 19 years ago)
  • scumm/actor.cpp

    RCS file: /cvsroot/scummvm/scummvm/scumm/actor.cpp,v
    retrieving revision 1.369
    diff -u -r1.369 actor.cpp
     
    959959        // wouldn't yield a useful gain anyway.
    960960        // In particular, changing this loop caused a number of bugs in the past,
    961961        // including bugs #758167, #775097, and #1093867.
    962         for (int j = 0; j < numactors; ++j) {
    963                 for (int i = 0; i < numactors; ++i) {
    964                         int sc_actor1 = _sortedActors[j]->_pos.y - _sortedActors[j]->_layer * 2000;
    965                         int sc_actor2 = _sortedActors[i]->_pos.y - _sortedActors[i]->_layer * 2000;
    966                         if (sc_actor1 < sc_actor2) {
    967                                 SWAP(_sortedActors[i], _sortedActors[j]);
     962        if (_gameId == GID_SAMNMAX) {
     963                for (int j = 0; j < numactors; ++j) {
     964                        for (int i = 0; i < numactors; ++i) {
     965                                int actor1_y = _sortedActors[j]->_pos.y;
     966                                int actor2_y = _sortedActors[i]->_pos.y;
     967                                if (actor1_y < actor2_y) {
     968                                        SWAP(_sortedActors[i], _sortedActors[j]);
     969                                } else if (actor1_y == actor2_y) {
     970                                        if ((j > i && _sortedActors[j] < _sortedActors[i]) || (j < i && _sortedActors[j] > _sortedActors[i])) {
     971                                                SWAP(_sortedActors[i], _sortedActors[j]);
     972                                        }
     973                                }
     974                        }
     975                }
     976        } else {
     977                for (int j = 0; j < numactors; ++j) {
     978                        for (int i = 0; i < numactors; ++i) {
     979                                int sc_actor1 = _sortedActors[j]->_pos.y - _sortedActors[j]->_layer * 2000;
     980                                int sc_actor2 = _sortedActors[i]->_pos.y - _sortedActors[i]->_layer * 2000;
     981                                if (sc_actor1 < sc_actor2) {
     982                                        SWAP(_sortedActors[i], _sortedActors[j]);
     983                                }
    968984                        }
    969985                }
    970986        }