diff options
| -rw-r--r-- | scumm/costume.cpp | 25 | 
1 files changed, 17 insertions, 8 deletions
| diff --git a/scumm/costume.cpp b/scumm/costume.cpp index 07d0cf2e20..445e89a82c 100644 --- a/scumm/costume.cpp +++ b/scumm/costume.cpp @@ -539,7 +539,12 @@ void LoadedCostume::loadCostume(int id) {  	}  	ptr += 8 + _numColors;  	_frameOffsets = ptr + 2; -	_dataOffsets = ptr + ((_vm->_version == 1) ? 18 : 34);	// FIXME - V1 case might be wrong +	if (_vm->_version == 1) { +		_dataOffsets = ptr + 18; +		_baseptr += 4; +	} else { +		_dataOffsets = ptr + 34; +	}  	_animCmds = _baseptr + READ_LE_UINT16(ptr);  } @@ -555,15 +560,25 @@ byte CostumeRenderer::drawLimb(const CostumeData &cost, int limb) {  	// Determine the position the limb is at  	i = cost.curpos[limb] & 0x7FFF; +//printf("costume %d, limb %d:\n", _loaded._id, limb); +  	// Get the frame pointer for that limb  	frameptr = _loaded._baseptr + READ_LE_UINT16(_loaded._frameOffsets + limb * 2); -	 + +//printf("frameptr:\n"); +//hexdump(frameptr-0x10, 0x20); +  	// Determine the offset to the costume data for the limb at position i  	code = _loaded._animCmds[i] & 0x7F;  	// Code 0x7B indicates a limb for which there is nothing to draw  	if (code != 0x7B) { +//printf("code %d:\n", code); +//hexdump(frameptr + code * 2 - 0x10, 0x20);  		_srcptr = _loaded._baseptr + READ_LE_UINT16(frameptr + code * 2); +//printf("_srcptr:\n"); +//hexdump(_srcptr, 0x20); +  		if (!(_vm->_features & GF_OLD256) || code < 0x79) {  			const CostumeInfo *costumeInfo;  			int xmoveCur, ymoveCur; @@ -619,24 +634,18 @@ void Scumm::cost_decodeData(Actor *a, int frame, uint usemask) {  		return;  	} -//printf("Offset table:\n"); -//hexdump(lc._dataOffsets + anim * 2 - 0x10, 0x20);  	r = lc._baseptr + READ_LE_UINT16(lc._dataOffsets + anim * 2); -//printf("actor %d, costum %d, frame %d, anim %d:\n", a->number, lc._id, frame, anim); -//hexdump(r, 0x20);  	if (r == lc._baseptr) {  		return;  	}  	if (_version == 1) { -		r += 4;  		mask = *r++ << 8;  	} else {  		mask = READ_LE_UINT16(r);  		r += 2;  	} -//printf("mask = 0x%x, usemask = 0x%x\n", mask, usemask);  	i = 0;  	do {  		if (mask & 0x8000) { | 
