diff options
| -rw-r--r-- | debug.cpp | 2 | ||||
| -rw-r--r-- | object.cpp | 55 | ||||
| -rw-r--r-- | saveload.cpp | 4 | ||||
| -rw-r--r-- | script.cpp | 59 | ||||
| -rw-r--r-- | script_v1.cpp | 4 | ||||
| -rw-r--r-- | script_v2.cpp | 4 | ||||
| -rw-r--r-- | scumm.h | 20 | ||||
| -rw-r--r-- | scummvm.cpp | 19 | ||||
| -rw-r--r-- | sound.cpp | 6 | ||||
| -rw-r--r-- | verbs.cpp | 2 | 
10 files changed, 98 insertions, 77 deletions
| @@ -187,7 +187,7 @@ void ScummDebugger::printScripts() {  		ss = &_s->vm.slot[i];  		if (ss->number) {  			printf("|%2d|%3d|%3d|%3d|%3d|%3d|%2d|%3d|%3d|\n", -				i, ss->number, ss->status, ss->type, ss->unk1, ss->unk2, ss->freezeCount, ss->cutsceneOverride, ss->unk5); +				i, ss->number, ss->status, ss->where, ss->unk1, ss->unk2, ss->freezeCount, ss->cutsceneOverride, ss->unk5);  		}  	}  	printf("+---------------------------------+\n"); diff --git a/object.cpp b/object.cpp index 50eace4e25..a661a2095f 100644 --- a/object.cpp +++ b/object.cpp @@ -45,13 +45,13 @@ void Scumm::putClass(int obj, int cls, bool set) {  int Scumm::getOwner(int obj) {  	checkRange(_numGlobalObjects-1, 0, obj, "Object %d out of range in getOwner"); -	return _objectFlagTable[obj]&0xF; +	return _objectFlagTable[obj]&OF_OWNER_MASK;  }  void Scumm::putOwner(int act, int owner) {  	checkRange(_numGlobalObjects-1, 0, act, "Object %d out of range in putOwner");  	checkRange(15, 0, owner, "Owner %d out of range in putOwner"); -	_objectFlagTable[act] = (_objectFlagTable[act]&0xF0) | owner; +	_objectFlagTable[act] = (_objectFlagTable[act]&~OF_OWNER_MASK) | owner;  }  int Scumm::getState(int act) { @@ -62,13 +62,14 @@ int Scumm::getState(int act) {  void Scumm::putState(int act, int state) {  	checkRange(_numGlobalObjects-1, 0, act, "Object %d out of range in putState");  	checkRange(15, 0, state, "State %d out of range in putState"); -	_objectFlagTable[act] = (_objectFlagTable[act]&0x0F) | (state<<4); +	_objectFlagTable[act] = (_objectFlagTable[act]&~OF_STATE_MASK) | +		(state<<OF_STATE_SHL);  }  int Scumm::getObjectIndex(int object) {  	int i; -	if ((_objectFlagTable[object]&0xF)!=0xF) { +	if ((_objectFlagTable[object]&OF_OWNER_MASK)!=OF_OWNER_ROOM) {  		for (i=0; i<_maxInventoryItems; i++)  			if (_inventory[i] == object)  				return i; @@ -86,22 +87,22 @@ int Scumm::whereIsObject(int object) {  	int i;  	if (object >= _numGlobalObjects) -		return -1; +		return WIO_NOT_FOUND; -	if ((_objectFlagTable[object]&0xF)!=0xF) { +	if ((_objectFlagTable[object]&OF_OWNER_MASK)!=OF_OWNER_ROOM) {  		for (i=0; i<_maxInventoryItems; i++)  			if (_inventory[i] == object) -				return 0; -		return -1; +				return WIO_INVENTORY; +		return WIO_NOT_FOUND;  	}  	for (i=_numObjectsInRoom; i>0; i--)  		if (_objs[i].obj_nr == object) {  			if (_objs[i].fl_object_index) -				return 4; -			return 1; +				return WIO_FLOBJECT; +			return WIO_ROOM;  		} -	return -1; +	return WIO_NOT_FOUND;  }  int Scumm::getObjectOrActorXY(int object) { @@ -109,10 +110,10 @@ int Scumm::getObjectOrActorXY(int object) {  		return getActorXYPos(derefActorSafe(object, "getObjectOrActorXY"));  	}  	switch(whereIsObject(object)) { -	case -1: +	case WIO_NOT_FOUND:  		return -1; -	case 0: -		return getActorXYPos(derefActorSafe(_objectFlagTable[object]&0xF,"getObjectOrActorXY(2)")); +	case WIO_INVENTORY: +		return getActorXYPos(derefActorSafe(_objectFlagTable[object]&OF_OWNER_MASK,"getObjectOrActorXY(2)"));  	}  	getObjectXYPos(object);  	return 0; @@ -208,7 +209,7 @@ int Scumm::findObject(int x, int y) {  						return _objs[i].obj_nr;  				break;  			} -		} while ( (_objs[b].ownerstate&0xF0) == a); +		} while ( (_objs[b].ownerstate&OF_STATE_MASK) == a);  	}  	return 0;  } @@ -223,7 +224,7 @@ void Scumm::drawRoomObjects(int arg) {  	do {  		od = &_objs[num]; -		if (!od->obj_nr || !(od->ownerstate&0xF0)) +		if (!od->obj_nr || !(od->ownerstate&OF_STATE_MASK))  			continue;  		do { @@ -233,7 +234,7 @@ void Scumm::drawRoomObjects(int arg) {  				break;  			}  			od = &_objs[od->parent]; -		} while ((od->ownerstate & 0xF0)==a); +		} while ((od->ownerstate & OF_STATE_MASK)==a);  	} while (--num);  } @@ -387,7 +388,7 @@ void Scumm::loadRoomObjects() {  			if (cdhd->v6.flags == 0x80) {  				od->parentstate = 1<<4;  			} else { -				od->parentstate = (cdhd->v6.flags&0xF)<<4; +				od->parentstate = (cdhd->v6.flags&0xF)<<OF_STATE_SHL;  			}  			od->parent = cdhd->v6.parent;  			od->actordir = cdhd->v6.actordir; @@ -399,7 +400,7 @@ void Scumm::loadRoomObjects() {  			if (cdhd->v5.flags == 0x80) {  				od->parentstate = 1<<4;  			} else { -				od->parentstate = (cdhd->v5.flags&0xF)<<4; +				od->parentstate = (cdhd->v5.flags&0xF)<<OF_STATE_SHL;  			}  			od->parent = cdhd->v5.parent;  			od->walk_x = READ_LE_UINT16(&cdhd->v5.walk_x); @@ -437,7 +438,7 @@ void Scumm::clearOwnerOf(int obj) {  	stopObjectScript(obj); -	if (getOwner(obj)==0xF) { +	if (getOwner(obj)==OF_OWNER_ROOM) {  		i = 0;  		do {  			if (_objs[i].obj_nr==obj) { @@ -453,7 +454,7 @@ void Scumm::clearOwnerOf(int obj) {  	for (i=1; i<_maxInventoryItems; i++) {  		if (_inventory[i] == obj) {  			j = whereIsObject(obj); -			if (j==0) { +			if (j==WIO_INVENTORY) {  				nukeResource(rtInventory, i);  				_inventory[i] = 0;  			} @@ -518,7 +519,7 @@ byte *Scumm::getObjOrActorName(int obj) {  uint32 Scumm::getOBCDOffs(int object) {  	int i; -	if ((_objectFlagTable[object]&0xF)!=0xF) +	if ((_objectFlagTable[object]&OF_OWNER_MASK)!=OF_OWNER_ROOM)  		return 0;  	for (i=_numObjectsInRoom; i>0; i--) {  		if (_objs[i].obj_nr == object) { @@ -533,7 +534,7 @@ uint32 Scumm::getOBCDOffs(int object) {  byte *Scumm::getObjectAddress(int obj) {  	int i; -	if ((_objectFlagTable[obj]&0xF)!=0xF) { +	if ((_objectFlagTable[obj]&OF_OWNER_MASK)!=OF_OWNER_ROOM) {  		for(i=0; i<_maxInventoryItems; i++) {  			if (_inventory[i] == obj)  				return getResourceAddress(rtInventory, i); @@ -563,7 +564,7 @@ void Scumm::addObjectToInventory(uint obj, uint room) {  	CHECK_HEAP -	if (whereIsObject(obj)==4) { +	if (whereIsObject(obj)==WIO_FLOBJECT) {  		i = getObjectIndex(obj);  		ptr = getResourceAddress(rtFlObject, _objs[i].fl_object_index) + 64;  		size = READ_BE_UINT32_UNALIGNED(ptr+4); @@ -619,7 +620,7 @@ void Scumm::setOwnerOf(int obj, int owner) {  	if (owner==0) {  		clearOwnerOf(obj);  		ss = &vm.slot[_currentScript]; -		if (ss->type==0 && _inventory[ss->number]==obj) { +		if (ss->where==WIO_INVENTORY && _inventory[ss->number]==obj) {  			putOwner(obj, 0);  			runHook(0);  			stopObjectCode(); @@ -634,7 +635,7 @@ int Scumm::getObjX(int obj) {  	if (obj <= _vars[VAR_NUM_ACTOR]) {  		return derefActorSafe(obj,"getObjX")->x;  	} else { -		if (whereIsObject(obj)==-1) +		if (whereIsObject(obj)==WIO_NOT_FOUND)  			return -1;  		getObjectOrActorXY(obj);  		return _xPos; @@ -645,7 +646,7 @@ int Scumm::getObjY(int obj) {  	if (obj <= _vars[VAR_NUM_ACTOR]) {  		return derefActorSafe(obj,"getObjY")->y;  	} else { -		if (whereIsObject(obj)==-1) +		if (whereIsObject(obj)==WIO_NOT_FOUND)  			return -1;  		getObjectOrActorXY(obj);  		return _yPos; diff --git a/saveload.cpp b/saveload.cpp index 446ec65f10..49c4cdd1e9 100644 --- a/saveload.cpp +++ b/saveload.cpp @@ -386,7 +386,7 @@ void Scumm::saveOrLoad(Serializer *s) {  		MKLINE(ScriptSlot,number,sleUint16),  		MKLINE(ScriptSlot,newfield,sleUint16),  		MKLINE(ScriptSlot,status,sleByte), -		MKLINE(ScriptSlot,type,sleByte), +		MKLINE(ScriptSlot,where,sleByte),  		MKLINE(ScriptSlot,unk1,sleByte),  		MKLINE(ScriptSlot,unk2,sleByte),  		MKLINE(ScriptSlot,freezeCount,sleByte), @@ -398,7 +398,7 @@ void Scumm::saveOrLoad(Serializer *s) {  	const SaveLoadEntry nestedScriptEntries[] = {  		MKLINE(NestedScript,number,sleUint16), -		MKLINE(NestedScript,type,sleByte), +		MKLINE(NestedScript,where,sleByte),  		MKLINE(NestedScript,slot,sleByte),  		MKEND()  	}; diff --git a/script.cpp b/script.cpp index bb639c1a6b..eec8d2b4d8 100644 --- a/script.cpp +++ b/script.cpp @@ -45,13 +45,13 @@ void Scumm::runScript(int script, int a, int b, int16 *lvarptr) {  	if (script < _numGlobalScripts) {  		scriptPtr = getResourceAddress(rtScript, script);  		scriptOffs = 8; -		scriptType = 2; +		scriptType = WIO_GLOBAL;  	} else {  		scriptOffs = _localScriptList[script - _numGlobalScripts];  		if (scriptOffs == 0)  			error("Local script %d is not in room %d", script, _roomResource);  		scriptOffs += 9; -		scriptType = 3; +		scriptType = WIO_LOCAL;  	}  	slot = getScriptSlot(); @@ -60,7 +60,7 @@ void Scumm::runScript(int script, int a, int b, int16 *lvarptr) {  	s->number = script;  	s->offs = scriptOffs;  	s->status = 2; -	s->type = scriptType; +	s->where = scriptType;  	s->unk1 = a;  	s->unk2 = b;  	s->freezeCount = 0; @@ -81,7 +81,8 @@ void Scumm::stopScriptNr(int script) {  	ss = &vm.slot[1];  	for (i=1; i<NUM_SCRIPT_SLOT; i++,ss++) { -		if (script!=ss->number || ss->type!=2 && ss->type!=3 || ss->status==0) +		if (script!=ss->number ||  +				ss->where!=WIO_GLOBAL && ss->where!=WIO_LOCAL || ss->status==0)  			continue;  		if (ss->cutsceneOverride) @@ -99,10 +100,10 @@ void Scumm::stopScriptNr(int script) {  	num = _numNestedScripts;  	do { -		if (nest->number == script && (nest->type==2 || nest->type==3)) { +		if (nest->number == script && (nest->where==WIO_GLOBAL || nest->where==WIO_LOCAL)) {  			nest->number = 0xFF;  			nest->slot = 0xFF; -			nest->type = 0xFF; +			nest->where = 0xFF;  		}  	} while(nest++,--num);  } @@ -118,7 +119,8 @@ void Scumm::stopObjectScript(int script) {  	ss = &vm.slot[1];  	for (i=1; i<NUM_SCRIPT_SLOT; i++,ss++) { -		if (script==ss->number && (ss->type==1 || ss->type==0 || ss->type==4) && ss->status!=0) { +		if (script==ss->number && (ss->where==WIO_ROOM ||  +			ss->where==WIO_INVENTORY || ss->where==WIO_FLOBJECT) && ss->status!=0) {  			if (ss->cutsceneOverride)  				error("Object %d stopped with active cutscene/override", script);  			ss->number = 0; @@ -135,10 +137,12 @@ void Scumm::stopObjectScript(int script) {  	num = _numNestedScripts;  	do { -		if (nest->number == script && (nest->type==1 || nest->type==4 || nest->type==0)) { +		if (nest->number == script &&  +			 (nest->where==WIO_ROOM || nest->where==WIO_FLOBJECT ||  +			 nest->where==WIO_INVENTORY)) {  			nest->number = 0xFF;  			nest->slot = 0xFF; -			nest->type = 0xFF; +			nest->where = 0xFF;  		}  	} while(nest++,--num);  } @@ -165,11 +169,11 @@ void Scumm::runScriptNested(int script) {  	if (_currentScript==0xFF) {  		nest->number = 0xFF; -		nest->type = 0xFF; +		nest->where = 0xFF;  	} else {  		slot = &vm.slot[_currentScript];  		nest->number = slot->number; -		nest->type = slot->type; +		nest->where = slot->where;  		nest->slot = _currentScript;  	} @@ -188,7 +192,7 @@ void Scumm::runScriptNested(int script) {  	if (nest->number != 0xFF) {  		slot = &vm.slot[nest->slot]; -		if (slot->number == nest->number && slot->type==nest->type && +		if (slot->number == nest->number && slot->where==nest->where &&  			slot->status != 0 && slot->freezeCount==0) {  			_currentScript = nest->slot;  			getScriptBaseAddress(); @@ -214,25 +218,25 @@ void Scumm::getScriptBaseAddress() {  		return;  	ss = &vm.slot[_currentScript]; -	switch(ss->type) { -	case 0: /* inventory script **/ +	switch(ss->where) { +	case WIO_INVENTORY: /* inventory script **/  		index = getObjectIndex(ss->number);  		_scriptOrgPointer = getResourceAddress(rtInventory, index);  		_lastCodePtr = &_baseInventoryItems[index];  		break;  	case 3: -	case 1: /* room script */ +	case WIO_ROOM: /* room script */  		_scriptOrgPointer = getResourceAddress(rtRoom, _roomResource);  		_lastCodePtr = &_baseRooms[_roomResource];  		break; -	case 2: /* global script */ +	case WIO_GLOBAL: /* global script */  		_scriptOrgPointer = getResourceAddress(rtScript, ss->number);  		_lastCodePtr = &_baseScripts[ss->number];  		break; -	case 4: /* flobject script */ +	case WIO_FLOBJECT: /* flobject script */  		index = getObjectIndex(ss->number);  		_scriptOrgPointer = getResourceAddress(rtFlObject,_objs[index].fl_object_index);  		_lastCodePtr = &_baseFLObject[ss->number]; @@ -419,7 +423,7 @@ void Scumm::stopObjectCode() {  	ss = &vm.slot[_currentScript]; -	if (ss->type!=2 && ss->type!=3) { +	if (ss->where!=WIO_GLOBAL && ss->where!=WIO_LOCAL) {  		if (ss->cutsceneOverride)  			error("Object %d ending with active cutscene/override", ss->number); @@ -515,7 +519,7 @@ void Scumm::runExitScript() {  		int slot = getScriptSlot();  		vm.slot[slot].status = 2;  		vm.slot[slot].number = 10001; -		vm.slot[slot].type = 1; +		vm.slot[slot].where = WIO_ROOM;  		vm.slot[slot].offs = _EXCD_offs + 8;  		vm.slot[slot].unk1 = 0;  		vm.slot[slot].unk2 = 0; @@ -533,7 +537,7 @@ void Scumm::runEntryScript() {  		int slot = getScriptSlot();  		vm.slot[slot].status = 2;  		vm.slot[slot].number = 10002; -		vm.slot[slot].type = 1; +		vm.slot[slot].where = WIO_ROOM;  		vm.slot[slot].offs = _ENCD_offs + 8;  		vm.slot[slot].unk1 = 0;  		vm.slot[slot].unk2 = 0; @@ -551,11 +555,11 @@ void Scumm::killScriptsAndResources() {  	ss = &vm.slot[1];  	for (i=1; i<NUM_SCRIPT_SLOT; i++,ss++) { -		if (ss->type==1 || ss->type==4) { +		if (ss->where==WIO_ROOM || ss->where==WIO_FLOBJECT) {  			if(ss->cutsceneOverride)  				error("Object %d stopped with active cutscene/override in exit", ss->number);  			ss->status = 0; -		} else if (ss->type==3) { +		} else if (ss->where==WIO_LOCAL) {  			if(ss->cutsceneOverride)  				error("Script %d stopped with active cutscene/override in exit", ss->number);  			ss->status = 0; @@ -573,7 +577,7 @@ void Scumm::killScriptsAndResources() {  	if (_newNames) {  		for (i=0; i<50; i++) {  			int j = _newNames[i]; -			if (j && (getOwner(j)&0xF) == 0) { +			if (j && (getOwner(j)&OF_OWNER_MASK) == 0) {  				_newNames[i] = 0;  				nukeResource(rtObjectName, i);  			} @@ -645,7 +649,7 @@ void Scumm::runVerbCode(int object, int entry, int a, int b, int16 *vars) {  	where = whereIsObject(object); -	if (where == -1) { +	if (where == WIO_NOT_FOUND) {  		error("Code for object %d not in room %d", object, _roomResource);  	} @@ -659,7 +663,7 @@ void Scumm::runVerbCode(int object, int entry, int a, int b, int16 *vars) {  	vm.slot[slot].number = object;  	vm.slot[slot].offs = obcd + offs;  	vm.slot[slot].status = 2; -	vm.slot[slot].type = where; +	vm.slot[slot].where = where;  	vm.slot[slot].unk1 = a;  	vm.slot[slot].unk2 = b;  	vm.slot[slot].freezeCount = 0; @@ -685,7 +689,7 @@ int Scumm::getVerbEntrypoint(int obj, int entry) {  	byte *objptr, *verbptr;  	int verboffs; -	if (whereIsObject(obj)==-1) +	if (whereIsObject(obj)==WIO_NOT_FOUND)  		return 0;  	objptr = getObjectAddress(obj); @@ -822,7 +826,8 @@ int Scumm::getScriptRunning(int script) {  	int i;  	ScriptSlot *ss = vm.slot;  	for (i=0; i<NUM_SCRIPT_SLOT; i++,ss++) -		if (ss->number==script && (ss->type==2 || ss->type==3) && ss->status) +		if (ss->number==script && (ss->where==WIO_GLOBAL ||  +			  ss->where==WIO_LOCAL) && ss->status)  			return 1;  	return 0;  } diff --git a/script_v1.cpp b/script_v1.cpp index 3852d6e698..910f10942a 100644 --- a/script_v1.cpp +++ b/script_v1.cpp @@ -1201,7 +1201,7 @@ void Scumm::o5_putActorAtObject() {  	a = derefActorSafe(getVarOrDirectByte(0x80), "o5_putActorAtObject");  	obj = getVarOrDirectWord(0x40); -	if (whereIsObject(obj)!=-1) +	if (whereIsObject(obj)!=WIO_NOT_FOUND)  		getObjectXYPos(obj);  	else {  		_xPos = 240; @@ -1884,7 +1884,7 @@ void Scumm::o5_walkActorToObject() {  	a = derefActorSafe(getVarOrDirectByte(0x80), "o5_walkActorToObject");  	obj = getVarOrDirectWord(0x40); -	if (whereIsObject(obj)!=-1) { +	if (whereIsObject(obj)!=WIO_NOT_FOUND) {  		getObjectXYPos(obj);  		startWalkActor(a, _xPos, _yPos, _dir);  	} diff --git a/script_v2.cpp b/script_v2.cpp index c4957b49bb..0f7403a9c9 100644 --- a/script_v2.cpp +++ b/script_v2.cpp @@ -852,7 +852,7 @@ void Scumm::o6_walkActorToObj() {  	a = derefActorSafe(pop(), "o6_walkActorToObj");  	if (obj >= 17) { -		if (whereIsObject(obj)==-1) +		if (whereIsObject(obj)==WIO_NOT_FOUND)  			return;  		getObjectXYPos(obj);  		startWalkActor(a, _xPos, _yPos, _dir); @@ -909,7 +909,7 @@ void Scumm::o6_putActorAtObject() {  	obj = pop();  	a = derefActorSafe(pop(), "o6_putActorAtObject"); -	if (whereIsObject(obj)!=-1) { +	if (whereIsObject(obj)!=WIO_NOT_FOUND) {  		getObjectXYPos(obj);  		x = _xPos;  		y = _yPos; @@ -203,7 +203,7 @@ struct ScriptSlot {  	uint16 number;  	uint16 newfield;  	byte status; -	byte type; +	byte where;  	byte unk1,unk2,freezeCount,didexec;  	byte cutsceneOverride;  	byte unk5; @@ -211,7 +211,7 @@ struct ScriptSlot {  struct NestedScript {  	uint16 number; -	uint8 type; +	uint8 where;  	uint8 slot;  }; @@ -320,9 +320,14 @@ enum ResTypes {  	rtBox = 15,  	rtObjectName = 16,  	rtLast = 16, -  	rtNumTypes = 17, +}; +enum { +	OF_OWNER_MASK = 0x0F, +	OF_STATE_MASK = 0xF0, +	OF_OWNER_ROOM = 0x0F, +	OF_STATE_SHL = 4  };  #define _maxRooms res.num[rtRoom] @@ -603,6 +608,15 @@ enum GameId {  struct ScummDebugger;  struct Serializer; +enum WhereIsObject { +	WIO_NOT_FOUND = -1, +	WIO_INVENTORY = 0, +	WIO_ROOM = 1, +	WIO_GLOBAL = 2, +	WIO_LOCAL = 3, +	WIO_FLOBJECT = 4, +}; +  struct Scumm {  	const char *_gameText;  	byte _gameId; diff --git a/scummvm.cpp b/scummvm.cpp index 2c983c27d1..cbccfcafc4 100644 --- a/scummvm.cpp +++ b/scummvm.cpp @@ -169,7 +169,7 @@ void Scumm::initScummVars() {  	_vars[VAR_FIXEDDISK] = checkFixedDisk();  	_vars[VAR_SOUNDCARD] = _soundCardType;  	_vars[VAR_VIDEOMODE] = 0x13; -	_vars[VAR_HEAPSPACE] = 600; +	_vars[VAR_HEAPSPACE] = 630;  	_vars[VAR_MOUSEPRESENT] = _mousePresent;  	_vars[VAR_SOUNDPARAM] = _soundParam;  	_vars[VAR_SOUNDPARAM2] = _soundParam2; @@ -417,8 +417,8 @@ static const VersionSettings version_settings[] = {  	{"monkey2", "Monkey Island 2: LeChuck's revenge", GID_MONKEY2, 5, 2, 2},  	{"atlantis", "Indiana Jones 4 and the Fate of Atlantis", GID_INDY4, 5, 5, 0},  	{"playfate", "Indiana Jones 4 and the Fate of Atlantis (Demo)", GID_INDY4, 5, 5, 0}, -	{"tentacle", "Day Of The Tenctacle", GID_TENTACLE, 6, 4, 2}, -	{"dottdemo", "Day Of The Tenctacle (Demo)", GID_TENTACLE, 6, 3, 2}, +	{"tentacle", "Day Of The Tentacle", GID_TENTACLE, 6, 4, 2}, +	{"dottdemo", "Day Of The Tentacle (Demo)", GID_TENTACLE, 6, 3, 2},  	{"samnmax", "Sam & Max", GID_SAMNMAX, 6, 4, 2},  	{"snmdemo", "Sam & Max (Demo)", GID_SAMNMAX, 6, 3, 0},  	{NULL,NULL} @@ -457,7 +457,7 @@ char *Scumm::getGameName() {  }  void Scumm::startScene(int room, Actor *a, int objectNr) { -	int i; +	int i,where;  	Actor *at;  	CHECK_HEAP @@ -470,11 +470,12 @@ void Scumm::startScene(int room, Actor *a, int objectNr) {  	_newEffect = _switchRoomEffect;  	if (_currentScript!=0xFF) { -		if (vm.slot[_currentScript].type==1 || vm.slot[_currentScript].type==4) { +		if (vm.slot[_currentScript].where==WIO_ROOM ||  +			vm.slot[_currentScript].where==WIO_FLOBJECT) {  			if(vm.slot[_currentScript].cutsceneOverride!=0)  				error("Object %d stopped with active cutscene/override in exit", vm.slot[_currentScript].number);  			_currentScript = 0xFF; -		} else if (vm.slot[_currentScript].type==3) { +		} else if (vm.slot[_currentScript].where==WIO_LOCAL) {  			if (vm.slot[_currentScript].cutsceneOverride!=0)  				error("Script %d stopped with active cutscene/override in exit", vm.slot[_currentScript].number);	  			_currentScript = 0xFF; @@ -543,9 +544,9 @@ void Scumm::startScene(int room, Actor *a, int objectNr) {  	memset(actorDrawBits, 0, sizeof(actorDrawBits));  	if (a) { -		if (whereIsObject(objectNr)!=1 && -			whereIsObject(objectNr)!=4) -				error("startScene: Object %d is not in room %d", objectNr, _currentRoom); +		where = whereIsObject(objectNr); +		if (where != WIO_ROOM && where!=WIO_FLOBJECT) +			error("startScene: Object %d is not in room %d", objectNr, _currentRoom);  		getObjectXYPos(objectNr);  		putActor(a, _xPos, _yPos, _currentRoom);  		startAnimActor(a, 0x3E, _dir^1); @@ -38,7 +38,7 @@ struct SoundEngine {  void Scumm::addSoundToQueue(int sound) {  	_vars[VAR_LAST_SOUND] = sound; -	ensureResourceLoaded(4, sound); +	ensureResourceLoaded(rtSound, sound);  	addSoundToQueue2(sound);  } @@ -201,7 +201,7 @@ int Scumm::isSoundRunning(int sound) {  	if (isSoundInQueue(sound))  		return 1; -	if (!isResourceLoaded(4, sound)) +	if (!isResourceLoaded(rtSound, sound))  		return 0; @@ -290,7 +290,7 @@ static const uint32 sound_tags[] = {  void Scumm::setupSound() {  	SoundEngine *se = (SoundEngine*)_soundDriver;  	if (se) { -		se->_base_sounds = res.address[4]; +		se->_base_sounds = res.address[rtSound];  	}  	_soundTagTable = (byte*)sound_tags;  	_numSoundTags = 1; @@ -250,7 +250,7 @@ void Scumm::setVerbObject(uint room, uint object, uint verb) {  	ImageHeader *imhd;  	RoomHeader *roomhdr; -	if (whereIsObject(object) == 4) +	if (whereIsObject(object) == WIO_FLOBJECT)  		error("Can't grab verb image from flobject");  	ensureResourceLoaded(rtRoom,room); | 
