Ticket #8471: gobega_crash.patch

File gobega_crash.patch, 1.5 KB (added by wjp, 19 years ago)

gobega_crash.patch

  • gob/goblin.cpp

    RCS file: /cvsroot/scummvm/scummvm/gob/goblin.cpp,v
    retrieving revision 1.19
    diff -u -r1.19 goblin.cpp
     
    23872387        int16 layer;
    23882388        int16 state;
    23892389        int32 *retVarPtr;
     2390        bool objDescSet = false;
    23902391
    23912392        retVarPtr = (int32 *)VAR_ADDRESS(59);
    23922393
     
    23952396        if (cmd > 0 && cmd < 17) {
    23962397                extraData = inter_load16();
    23972398                objDesc = gob_objects[extraData];
     2399                objDescSet = true;
    23982400                extraData = inter_load16();
    23992401        }
    24002402
    24012403        if (cmd > 90 && cmd < 107) {
    24022404                extraData = inter_load16();
    24032405                objDesc = gob_goblins[extraData];
     2406                objDescSet = true;
    24042407                extraData = inter_load16();
    24052408                cmd -= 90;
    24062409        }
     
    24082411        if (cmd > 110 && cmd < 128) {
    24092412                extraData = inter_load16();
    24102413                objDesc = gob_goblins[extraData];
     2414                objDescSet = true;
    24112415                cmd -= 90;
    24122416        } else if (cmd > 20 && cmd < 38) {
    24132417                extraData = inter_load16();
    24142418                objDesc = gob_objects[extraData];
     2419                objDescSet = true;
    24152420        }
    24162421
    2417         if (cmd < 40 && objDesc == 0)
     2422/*
     2423        NB: The original gobliiins engine did not initialize the objDesc
     2424        variable, so we manually check if objDesc is properly set before
     2425        checking if it is zero. If it was not set, we do not return. This
     2426        fixes a crash in the EGA version if the life bar is depleted, because
     2427        gob_interFunc is called multiple times with cmd == 39.
     2428        Bug #1324814
     2429*/
     2430
     2431
     2432        if (cmd < 40 && objDescSet && objDesc == 0)
    24182433                return;
    24192434
    24202435        debug(5, "cmd = %d", cmd);