diff options
| -rw-r--r-- | engines/gob/detection.cpp | 16 | ||||
| -rw-r--r-- | engines/gob/draw_v2.cpp | 55 | ||||
| -rw-r--r-- | engines/gob/game_v2.cpp | 5 | ||||
| -rw-r--r-- | engines/gob/init_v2.cpp | 9 | ||||
| -rw-r--r-- | engines/gob/inter_v2.cpp | 20 | ||||
| -rw-r--r-- | engines/gob/mult_v2.cpp | 5 | 
6 files changed, 56 insertions, 54 deletions
| diff --git a/engines/gob/detection.cpp b/engines/gob/detection.cpp index 9b48407a10..89f563a415 100644 --- a/engines/gob/detection.cpp +++ b/engines/gob/detection.cpp @@ -356,6 +356,22 @@ static const GOBGameDescription gameDescriptions[] = {  		GF_GOB2,  		"intro"  	}, +	{ // Supplied by fac76 in bug report #1673397 +		{ +			"gob2", +			"", +			{ +				{"intro.stk", 0, "b45b984ee8017efd6ea965b9becd4d66", 828443}, +				{"musmac1.mid", 0, "7f96f491448c7a001b32df89cf8d2af2", 1658}, +				{NULL, 0, NULL, 0} +			}, +			UNK_LANG, +			kPlatformMacintosh, +			Common::ADGF_NO_FLAGS +		}, +		GF_GOB2, +		"intro" +	},  	{  		{  			"gob2", diff --git a/engines/gob/draw_v2.cpp b/engines/gob/draw_v2.cpp index 49069c2861..4a764fd257 100644 --- a/engines/gob/draw_v2.cpp +++ b/engines/gob/draw_v2.cpp @@ -41,9 +41,9 @@ Draw_v2::Draw_v2(GobEngine *vm) : Draw_v1(vm) {  void Draw_v2::printText(void) {  	int i; -	char *dataPtr; -	char *ptr; -	char *ptr2; +	byte *dataPtr; +	byte *ptr; +	byte *ptr2;  	char mask[80];  	char str[80];  	char buf[50]; @@ -86,39 +86,32 @@ void Draw_v2::printText(void) {  	}  	size = _vm->_game->_totTextData->items[index].size; -	dataPtr = _vm->_game->_totTextData->dataPtr + _vm->_game->_totTextData->items[index].offset; +	dataPtr = ((byte *) _vm->_game->_totTextData->dataPtr) + +		_vm->_game->_totTextData->items[index].offset;  	ptr = dataPtr;  	if ((_renderFlags & 0x400) && (ptr[1] & 0x80))  		return; +	destX = READ_LE_UINT16(ptr) & 0x7FFF; +	destY = READ_LE_UINT16(ptr + 2); +	spriteRight = READ_LE_UINT16(ptr + 4); +	spriteBottom = READ_LE_UINT16(ptr + 6); +	ptr += 8; +  	if (_renderFlags & RENDERFLAG_CAPTUREPUSH) { -		_destSpriteX = READ_LE_UINT16(ptr) & 0x7FFF; -		_destSpriteY = READ_LE_UINT16(ptr + 2); -		_spriteRight = READ_LE_UINT16(ptr + 4) - _destSpriteX + 1; -		_spriteBottom = READ_LE_UINT16(ptr + 6) - _destSpriteY + 1; -		_vm->_game->capturePush(_destSpriteX, _destSpriteY, -						 _spriteRight, _spriteBottom); +		_vm->_game->capturePush(destX, destY, +				spriteRight - destX + 1, spriteBottom - destY + 1);  		(*_vm->_scenery->_pCaptureCounter)++;  	} -	 -	_destSpriteX = READ_LE_UINT16(ptr) & 0x7FFF; -	destX = _destSpriteX; - -	_destSpriteY = READ_LE_UINT16(ptr + 2); -	destY = _destSpriteY; - -	_spriteRight = READ_LE_UINT16(ptr + 4); -	spriteRight = _spriteRight; - -	_spriteBottom = READ_LE_UINT16(ptr + 6); -	spriteBottom = _spriteBottom; +	_destSpriteX = destX; +	_destSpriteY = destY; +	_spriteRight = spriteRight; +	_spriteBottom = spriteBottom;  	_destSurface = 21; -	ptr += 8; - -	_backColor = (byte) *ptr++; +	_backColor = *ptr++;  	_transparency = 1;  	spriteOperation(DRAW_CLEARRECT); @@ -151,7 +144,7 @@ void Draw_v2::printText(void) {  	// Adding the boundary check *shouldn't* pose any problems, since access behind  	// that point should be forbidden anyway. -	for (i = 0, ptr2 = ptr; ((ptr2 - dataPtr) < size) && (*ptr2 != 1); ptr2++, i++) { +	for (i = 0, ptr2 = ptr; ((ptr2 - dataPtr) < size) && (*ptr2 != 1); i++) {  		if ((_vm->_game->_totFileData[0x29] < 0x32) && (*ptr2 > 3) && (*ptr2 < 32))  			*ptr2 = 32; @@ -171,7 +164,7 @@ void Draw_v2::printText(void) {  		case 6:  			ptr2++; -			switch (*ptr & 0xC0) { +			switch (*ptr2 & 0xC0) {  			case 0x40:  				ptr2 += 9;  				break; @@ -188,7 +181,7 @@ void Draw_v2::printText(void) {  			break;  		case 10: -			ptr2 += (((byte) ptr2[1]) * 2) + 2; +			ptr2 += (ptr2[1] * 2) + 2;  			break;  		default: @@ -214,7 +207,7 @@ void Draw_v2::printText(void) {  	_transparency = 1;  	while (true) { -		if ((*ptr >= 1) && ((*ptr <= 7) || (*ptr == 10)) && (strPos != 0)) { +		if ((((*ptr >= 1) && (*ptr <= 7)) || (*ptr == 10)) && (strPos != 0)) {  			str[MAX(strPos, strPos2)] = 0;  			strPosBak = strPos;  			width = strlen(str) * _fonts[fontIndex]->itemWidth; @@ -299,7 +292,7 @@ void Draw_v2::printText(void) {  		case 4:  			ptr++; -			frontColor = (byte) *ptr++; +			frontColor = *ptr++;  			break;  		case 6: @@ -341,7 +334,7 @@ void Draw_v2::printText(void) {  		case 10:  			// loc_12C93  			str[0] = (char)255; -			WRITE_LE_UINT16((uint16*)(str+1), ptr - _vm->_game->_totTextData->dataPtr); +			WRITE_LE_UINT16((uint16*)(str+1), ((char *) ptr) - _vm->_game->_totTextData->dataPtr);  			str[3] = 0;  			ptr++;  			i = *ptr++; diff --git a/engines/gob/game_v2.cpp b/engines/gob/game_v2.cpp index 11d3743320..0f6a62da32 100644 --- a/engines/gob/game_v2.cpp +++ b/engines/gob/game_v2.cpp @@ -74,11 +74,6 @@ void Game_v2::playTot(int16 skipPlay) {  		while (!_vm->_quitRequested) {  			if (_vm->_global->_inter_variables != 0)  				_vm->_draw->animateCursor(4); -			if (_vm->_platform == Common::kPlatformMacintosh) { -				if (_vm->_adlib) -					_vm->_adlib->stopPlay(); -			} else -				_vm->_cdrom->stopPlaying();  			if (skipPlay != -1) {  				_vm->_inter->initControlVars(1); diff --git a/engines/gob/init_v2.cpp b/engines/gob/init_v2.cpp index e8ab0283da..1c5c8790fd 100644 --- a/engines/gob/init_v2.cpp +++ b/engines/gob/init_v2.cpp @@ -53,8 +53,13 @@ void Init_v2::soundVideo(int32 smallHeap, int16 flag) {  	_vm->_global->_sprAllocated = 0;  	_vm->_gtimer->enableTimer(); -	if ((_vm->_global->_videoMode == 0x13) || (_vm->_global->_videoMode == 0x14)) -		_vm->_global->_colorCount = 256; +	if ((_vm->_platform == Common::kPlatformPC) || (_vm->_platform == Common::kPlatformMacintosh)) { +		if ((_vm->_global->_videoMode == 0x13) || (_vm->_global->_videoMode == 0x14)) +			_vm->_global->_colorCount = 256; +		else +			_vm->_global->_colorCount = 16; +	} else +		_vm->_global->_colorCount = 16;  	_vm->_global->_pPaletteDesc = &_vm->_global->_paletteStruct;  	_vm->_global->_pPaletteDesc->vgaPal = _vm->_draw->_vgaPalette; diff --git a/engines/gob/inter_v2.cpp b/engines/gob/inter_v2.cpp index 987fe597ca..2bcf2deeec 100644 --- a/engines/gob/inter_v2.cpp +++ b/engines/gob/inter_v2.cpp @@ -1545,7 +1545,6 @@ bool Inter_v2::o2_playSound(char &cmdCount, int16 &counter, int16 &retFlag) {  	repCount = _vm->_parse->parseValExpr();  	frequency = _vm->_parse->parseValExpr(); -	warning("playSound(%d, %d, %d)", index, repCount, frequency);  	_soundEndTimeKey = 0;  	if (_vm->_game->_soundSamples[index] == 0)  		return false; @@ -1715,56 +1714,55 @@ bool Inter_v2::o2_palLoad(char &cmdCount, int16 &counter, int16 &retFlag) {  	switch (cmd & 0x7f) {  	case 48: -		if ((_vm->_global->_videoMode < 0x32) || (_vm->_global->_videoMode > 0x63)) { +		if ((_vm->_global->_fakeVideoMode < 0x32) || (_vm->_global->_fakeVideoMode > 0x63)) {  			_vm->_global->_inter_execPtr += 48;  			return false;  		}  		break;  	case 49: -		if ((_vm->_global->_videoMode != 5) && (_vm->_global->_videoMode != 7)) { +		if ((_vm->_global->_fakeVideoMode != 5) && (_vm->_global->_fakeVideoMode != 7)) {  			_vm->_global->_inter_execPtr += 18;  			return false;  		}  		break;  	case 50: -		if ((_vm->_global->_videoMode != 0x0D) || (_vm->_global->_colorCount == 256)) { +		if (_vm->_global->_colorCount == 256) {  			_vm->_global->_inter_execPtr += 16;  			return false;  		}  		break;  	case 51: -		if (_vm->_global->_videoMode < 0x64) { +		if (_vm->_global->_fakeVideoMode < 0x64) {  			_vm->_global->_inter_execPtr += 2;  			return false;  		}  		break;  	case 52: -		if ((_vm->_platform == Common::kPlatformPC) && -				((_vm->_global->_videoMode != 0x0D) || (_vm->_global->_colorCount == 256))) { +		if (_vm->_global->_colorCount == 256) {  			_vm->_global->_inter_execPtr += 48;  			return false;  		}  		break;  	case 53: -		if (_vm->_global->_videoMode < 0x13) { +		if (_vm->_global->_colorCount != 256) {  			_vm->_global->_inter_execPtr += 2;  			return false;  		}  		break;  	case 54: -		if (_vm->_global->_videoMode < 0x13) { +		if (_vm->_global->_fakeVideoMode < 0x13) {  			return false;  		}  		break;  	case 61: -		if (_vm->_global->_videoMode < 0x13) { +		if (_vm->_global->_fakeVideoMode < 0x13) {  			*_vm->_global->_inter_execPtr += 4;  			return false;  		} @@ -1832,8 +1830,6 @@ bool Inter_v2::o2_palLoad(char &cmdCount, int16 &counter, int16 &retFlag) {  			_vm->_draw->_vgaPalette[i].green = _vm->_global->_inter_execPtr[1];  			_vm->_draw->_vgaPalette[i].blue = _vm->_global->_inter_execPtr[2];  		} -		if ((_vm->_platform == Common::kPlatformPC) && _vm->_global->_videoMode >= 0x13) -			return false;  		break;  	case 53: diff --git a/engines/gob/mult_v2.cpp b/engines/gob/mult_v2.cpp index 4a0e4fcfd6..7c1a2ec392 100644 --- a/engines/gob/mult_v2.cpp +++ b/engines/gob/mult_v2.cpp @@ -410,7 +410,6 @@ void Mult_v2::playMult(int16 startFrame, int16 endFrame, char checkEscape,  		_palFadingBlue = 0;  		_oldPalette = _vm->_global->_pPaletteDesc->vgaPal; -//		memcpy((char *)_palAnimPalette, (char *)_vm->_global->_pPaletteDesc->vgaPal, 768);  		if (_vm->_anim->_animSurf == 0) {  			_vm->_util->setFrameRate(_multData->frameRate); @@ -694,9 +693,6 @@ char Mult_v2::prepPalAnim(char stop) {  		stop = 0;  		_doPalSubst = 0;  		_vm->_global->_pPaletteDesc->vgaPal = _oldPalette; - -		memcpy((char *)_palAnimPalette, (char *)_vm->_global->_pPaletteDesc->vgaPal, 768); -  		_vm->_video->setFullPalette(_vm->_global->_pPaletteDesc);  	} else {  		stop = 0; @@ -708,6 +704,7 @@ char Mult_v2::prepPalAnim(char stop) {  		_multData->palAnimIndices[2] = 0;  		_multData->palAnimIndices[3] = 0; +		memcpy((char *)_palAnimPalette, (char *)_vm->_global->_pPaletteDesc->vgaPal, 768);  		_vm->_global->_pPaletteDesc->vgaPal = _palAnimPalette;  	}  	return stop; | 
