diff options
| author | Vladimir Menshakov | 2011-06-13 22:42:12 +0400 | 
|---|---|---|
| committer | Alyssa Milburn | 2011-06-15 17:34:55 +0200 | 
| commit | 78b1a6061147b4f47d5ac61d1b50a83784e58ea7 (patch) | |
| tree | 23aabad7725b140bb92dc3875e0b10c53ecba565 | |
| parent | 8c9d00966fa061f44db6ceb3b14bed931157f46c (diff) | |
| download | scummvm-rg350-78b1a6061147b4f47d5ac61d1b50a83784e58ea7.tar.gz scummvm-rg350-78b1a6061147b4f47d5ac61d1b50a83784e58ea7.tar.bz2 scummvm-rg350-78b1a6061147b4f47d5ac61d1b50a83784e58ea7.zip | |
DREAMWEB: patch sprite table after deallocating segment with sprites.
| -rw-r--r-- | engines/dreamweb/dreamweb.cpp | 20 | 
1 files changed, 18 insertions, 2 deletions
| diff --git a/engines/dreamweb/dreamweb.cpp b/engines/dreamweb/dreamweb.cpp index 01bedbf077..eea3b725db 100644 --- a/engines/dreamweb/dreamweb.cpp +++ b/engines/dreamweb/dreamweb.cpp @@ -681,9 +681,25 @@ void allocatemem(Context &context) {  }  void deallocatemem(Context &context) { -	debug(1, "deallocating segment %04x", (uint16)context.es); -	context.deallocateSegment(context.es); +	uint16 id = (uint16)context.es; +	debug(1, "deallocating segment %04x", id); +	context.deallocateSegment(id); + +	//fixing invalid entries in the sprite table  	context.es = context.data; +	uint tsize = 16 * 32; +	uint16 bseg = context.data.word(kBuffers); +	if (!bseg) +		return; +	SegmentRef buffers(&context); +	buffers = bseg; +	uint8 *ptr = buffers.ptr(kSpritetable, tsize); +	for(uint i = 0; i < tsize; i += 32) { +		uint16 seg = READ_LE_UINT16(ptr + i + 6); +		//debug(1, "sprite segment = %04x", seg); +		if (seg == id) +			memset(ptr + i, 0xff, 32); +	}  }  void removeemm(Context &context) { | 
