diff options
| -rw-r--r-- | script_v1.cpp | 29 | 
1 files changed, 18 insertions, 11 deletions
| diff --git a/script_v1.cpp b/script_v1.cpp index 2dfa4a8c94..559876628a 100644 --- a/script_v1.cpp +++ b/script_v1.cpp @@ -816,6 +816,7 @@ void Scumm::o5_actorSetClass() {  			_classData[act] = 0;  			continue;  		} +  		if(_features & GF_SMALL_HEADER) {  			oldClassData=(byte*)&_classData[act];  			if (newClass&0x80) @@ -1340,9 +1341,11 @@ void Scumm::o5_ifClassOfIs() {  	byte *oldClass;  	act = getVarOrDirectWord(0x80); +	  	while ( (_opcode = fetchScriptByte()) != 0xFF) {  		cls = getVarOrDirectWord(0x80);  		oldClass = (byte*)&_classData[act]; +  		if(_features & GF_SMALL_HEADER)  			b = oldClass[((cls-1)&0x7f)/8] & bit_table[((cls-1)&0x07)];  		else @@ -1497,10 +1500,14 @@ void Scumm::o5_loadRoomWithEgo() {  void Scumm::o5_matrixOps() {  	int a,b; -	if(_features & GF_OLD256) { /* FIXME: missing function call*/ -		warning("o5_matrixOps - unimplemented on GF_OLD256"); -		a=getVarOrDirectByte(0x80); -		b=fetchScriptByte(); + +	if(_features & GF_OLD256) { +		a = getVarOrDirectByte(0x80); +		b = fetchScriptByte(); +		if (b == 0x40) // Lock Box +			setBoxFlags(a, 0x80); +		else +			setBoxFlags(a, 0);  		return;  	} @@ -2342,10 +2349,8 @@ void Scumm::o5_walkActorToActor() {  	int b,x,y;  	Actor *a, *a2;  	int nr; - -	warning("walk actor to actor"); - -	a = derefActorSafe(getVarOrDirectByte(0x80), "o5_walkActorToActor"); +	int nr2 = getVarOrDirectByte(0x80); +	a = derefActorSafe(nr2, "o5_walkActorToActor");  	if (a->room != _currentRoom) {  		getVarOrDirectByte(0x40);  		fetchScriptByte(); @@ -2358,7 +2363,7 @@ void Scumm::o5_walkActorToActor() {  		fetchScriptByte();  		return;  	} - +	// warning("walk actor %d to actor %d", nr, nr2);  	a2 = derefActorSafe(nr, "o5_walkActorToActor(2)");  	if (a2->room != _currentRoom) {  		fetchScriptByte(); @@ -2514,11 +2519,13 @@ void Scumm::o5_oldRoomEffect() {  void Scumm::o5_pickupObjectOld() {  	int obj = getVarOrDirectWord(0x80); - +	  	if(getObjectIndex(obj) == -1)  		return; -	 + +	// warning("adding %d from %d to inventoryOld", obj, _currentRoom);  	addObjectToInventory(obj,_currentRoom); +	// warning("added to inventoryOld");  	removeObjectFromRoom(obj);  	putOwner(obj, _vars[VAR_EGO]);  	putClass(obj, 32, 1); | 
