Ticket #9233: v0_mm_ObjectFix_WalkFix.patch

File v0_mm_ObjectFix_WalkFix.patch, 3.5 KB (added by SF/segra, 10 years ago)
  • actor.cpp

     
    10431043        // yDist must be divided by 4, as we are using 8x2 pixels
    10441044        // blocks for actor coordinates).
    10451045        int xDist = ABS(x - destX);
    1046         int yDist = ABS(y - destY) / 4;
     1046        int yDist;
    10471047        int dist;
    10481048
     1049        // MM C64: This fixes the trunk bug (#3070065), as well
     1050        // as the fruit bowl, however im not sure if its
     1051        // the proper solution or not.
     1052        if( g_scumm->_game.version == 0 )
     1053                yDist = ABS(y - destY);
     1054        else
     1055                yDist = ABS(y - destY) / 4;
     1056
    10491057        if (xDist < yDist)
    10501058                dist = (xDist >> 1) + yDist;
    10511059        else
     
    10731081                        abr.x = foundX;
    10741082                        abr.y = foundY;
    10751083                        abr.box = box;
     1084
    10761085                        break;
    10771086                }
    10781087                if (dist < bestDist) {
  • object.cpp

     
    315315                return -1;
    316316
    317317        for (i = (_numLocalObjects-1); i > 0; i--) {
     318                if (_game.version == 0 )
     319                        if( _objs[i].flags != _v0ObjectFlag )
     320                                continue;
     321
    318322                if (_objs[i].obj_nr == object)
    319323                        return i;
    320324        }
     
    512516                        if (_game.version <= 2 && _objs[i].state & kObjectStateUntouchable)
    513517                                continue;
    514518                }
    515 
     519               
    516520                b = i;
    517521                do {
    518522                        a = _objs[b].parentstate;
     
    526530#endif
    527531                                if (_objs[i].x_pos <= x && _objs[i].width + _objs[i].x_pos > x &&
    528532                                    _objs[i].y_pos <= y && _objs[i].height + _objs[i].y_pos > y) {
     533                                        // MMC64: Set the object search flag
     534                                        if (_game.version == 0)
     535                                                _v0ObjectFlag = _objs[i].flags;
    529536                                        if (_game.version == 0 && _v0ObjectIndex)
    530537                                                return i;
    531538                                        else
  • script_v0.cpp

     
    987987void ScummEngine_v0::resetSentence(bool walking) {
    988988        _activeVerb = 13;
    989989
    990         if (!walking) {
     990        // If the actor is walking, or the screen is a keypad (no sentence verbs/objects are drawn)
     991        // Then reset all active objects (stops the radio crash, bug #3077966)
     992        if (!walking || !(_userState & 32)) {
     993                _v0ObjectFlag = 0;
    991994                _activeInventory = 0;
    992995                _activeObject = 0;
    993996                _activeObject2 = 0;
  • script_v2.cpp

     
    11741174        int obj;
    11751175        Actor *a;
    11761176
     1177        _v0ObjectFlag = 0;
     1178
    11771179        a = derefActor(getVarOrDirectByte(PARAM_1), "o2_walkActorToObject");
    11781180        obj = getVarOrDirectWord(PARAM_2);
    11791181        if (whereIsObject(obj) != WIO_NOT_FOUND) {
     
    11821184                AdjustBoxResult r = a->adjustXYToBeInBox(x, y);
    11831185                x = r.x;
    11841186                y = r.y;
     1187
    11851188                a->startWalkActor(x, y, dir);
    11861189        }
    11871190}
  • scumm.cpp

     
    145145        // Init all vars
    146146        _v0ObjectIndex = false;
    147147        _v0ObjectInInventory = false;
     148        _v0ObjectFlag = 0;
    148149        _imuse = NULL;
    149150        _imuseDigital = NULL;
    150151        _musicEngine = NULL;
  • scumm.h

     
    591591
    592592        bool _v0ObjectIndex;                    // V0 Use object index, instead of object number
    593593        bool _v0ObjectInInventory;              // V0 Use object number from inventory
     594        byte _v0ObjectFlag;
    594595
    595596        /* Global resource tables */
    596597        int _numVariables, _numBitVariables, _numLocalObjects;