diff options
| -rw-r--r-- | simon/simon.cpp | 18 | ||||
| -rw-r--r-- | simon/vga.cpp | 79 | 
2 files changed, 53 insertions, 44 deletions
| diff --git a/simon/simon.cpp b/simon/simon.cpp index 433810bd12..5f2b02e45c 100644 --- a/simon/simon.cpp +++ b/simon/simon.cpp @@ -1979,8 +1979,8 @@ void SimonEngine::setup_hit_areas(FillOrCopyStruct *fcs, uint fcs_index) {  		ha->unk3 = 1;  		// Simon1 specific -		o_kill_sprite_simon1(0x80); -		loadSprite(0, 1, 0x80, 0, 0, 0xE); +		o_kill_sprite_simon1(128); +		loadSprite(0, 1, 128, 0, 0, 14);  	} else {  		ha->x = 227;  		ha->y = 162; @@ -2021,9 +2021,9 @@ void SimonEngine::f10_key() {  	_lockWord |= 0x8000;  	if (_game & GF_SIMON2) -		color = 0xec; +		color = 236;  	else -		color = 0xe1; +		color = 225;  	uint limit = (_game & GF_SIMON2) ? 200 : 134; @@ -2057,7 +2057,7 @@ void SimonEngine::f10_key() {  				x_ = (ha->width / 2) - 4 + ha->x - (_scrollX * 8); -				if (x_ >= 0x137) +				if (x_ >= 311)  					continue;  				dst = dx_lock_attached(); @@ -2877,7 +2877,7 @@ void SimonEngine::timer_vga_sprites_helper() {  	_scrollX += _scrollFlag; -	vc_write_var(0xfB, _scrollX); +	vc_write_var(251, _scrollX);  	_scrollFlag = 0;  } @@ -3105,7 +3105,7 @@ void SimonEngine::o_pathfind(int x, int y, uint var_1, uint var_2) {  		p = (const uint16 *)_pathFindArray[20 - i];  		if (!p)  			continue; -		for (j = 0; readUint16Wrapper(&p[0]) != end; j++, p += 2) {	// 0xE703 = byteswapped 999 +		for (j = 0; readUint16Wrapper(&p[0]) != end; j++, p += 2) {  			x_diff = abs((int)(readUint16Wrapper(&p[0]) - x));  			y_diff = abs((int)(readUint16Wrapper(&p[1]) - 12 - y)); @@ -3166,7 +3166,7 @@ void SimonEngine::removeIconArray(uint fcs_index) {  // ok  void SimonEngine::fcs_unk_5(FillOrCopyStruct *fcs, uint fcs_index) { -	o_kill_sprite_simon1(0x80); +	o_kill_sprite_simon1(128);  }  void SimonEngine::delete_hitarea_by_index(uint index) { @@ -3201,7 +3201,7 @@ void SimonEngine::copy_img_from_3_to_2(FillOrCopyStruct *fcs) {  		dx_copy_rgn_from_3_to_2(fcs->y + fcs->height * 8 + ((fcs == _windowArray[2]) ? 1 : 0), (fcs->x + fcs->width) * 8, fcs->y, fcs->x * 8);  	} else {  		if (_vgaVar6 && _windowArray[2] == fcs) { -			fcs = _windowArray[0x18 / 4]; +			fcs = _windowArray[6];  			_vgaVar6 = 0;  		} diff --git a/simon/vga.cpp b/simon/vga.cpp index dd3e969356..71fb917d3c 100644 --- a/simon/vga.cpp +++ b/simon/vga.cpp @@ -655,6 +655,7 @@ void SimonEngine::decodeStripA(byte *dst, const byte *src, int height) {  void SimonEngine::vc10_draw() {  	byte *p2;  	uint width, height; +	uint maxWidth, maxHeight;  	byte flags;  	const uint16 *vlut;  	VC10_state state; @@ -665,7 +666,11 @@ void SimonEngine::vc10_draw() {  	if (state.image == 0)  		return; -	state.palette = (_vcPtr[1] << 4); +	if (_game == GAME_FEEBLEFILES) { +		state.palette = (_vcPtr[0] * 16); +	} else { +		state.palette = (_vcPtr[1] * 16); +	}  	_vcPtr += 2;  	state.x = (int16)vc_read_next_word(); @@ -674,7 +679,7 @@ void SimonEngine::vc10_draw() {  	}  	state.y = (int16)vc_read_next_word(); -	if (!(_game & GF_SIMON2)) { +	if (_game & GF_SIMON1) {  		state.flags = vc_read_next_word();  	} else {  		state.flags = vc_read_next_byte(); @@ -693,7 +698,7 @@ void SimonEngine::vc10_draw() {  		flags = p2[5];  	} else {  		state.depack_src = _curVgaFile2 + READ_BE_UINT32(p2); -		width = READ_BE_UINT16(p2 + 6) >> 4; +		width = READ_BE_UINT16(p2 + 6) / 16;  		height = p2[5];  		flags = p2[4];  	} @@ -717,8 +722,8 @@ void SimonEngine::vc10_draw() {  		}  	} -	uint maxWidth = (_game == GAME_FEEBLEFILES) ? 641 : 21; -	if (_game & GF_SIMON2 && width >= maxWidth) { +	maxWidth = (_game == GAME_FEEBLEFILES) ? 640 : 20; +	if (_game & GF_SIMON2 && width > maxWidth) {  		const byte *src;  		byte *dst;  		uint w; @@ -747,15 +752,17 @@ void SimonEngine::vc10_draw() {  		return;  	} -	if (state.flags & 0x10) { -		state.depack_src = vc10_uncompressFlip(state.depack_src, width, height); -	} else if (state.flags & 1) { -		state.depack_src = vc10_flip(state.depack_src, width, height); +	if (_game != GAME_FEEBLEFILES) { +		if (state.flags & 0x10) { +			state.depack_src = vc10_uncompressFlip(state.depack_src, width, height); +		} else if (state.flags & 1) { +			state.depack_src = vc10_flip(state.depack_src, width, height); +		}  	}  	vlut = &_video_windows[_windowNum * 4]; -	state.draw_width = width << 1;	/* cl */ +	state.draw_width = width * 2;	/* cl */  	state.draw_height = height;	/* ch */  	state.x_skip = 0;							/* colums to skip = bh */ @@ -771,7 +778,8 @@ void SimonEngine::vc10_draw() {  	}  	state.x = cur; -	cur += state.draw_width - (vlut[2] << 1); +	maxWidth = (_game == GAME_FEEBLEFILES) ? 640 : (vlut[2] * 2); +	cur += state.draw_width - maxWidth;  	if (cur > 0) {  		do {  			if (!--state.draw_width) @@ -789,7 +797,8 @@ void SimonEngine::vc10_draw() {  	}  	state.y = cur; -	cur += state.draw_height - vlut[3]; +	maxHeight = (_game == GAME_FEEBLEFILES) ? 480 : vlut[3]; +	cur += state.draw_height - maxHeight;  	if (cur > 0) {  		do {  			if (!--state.draw_height) @@ -799,7 +808,7 @@ void SimonEngine::vc10_draw() {  	assert(state.draw_width != 0 && state.draw_height != 0); -	state.draw_width <<= 2; +	state.draw_width *= 4;  	state.surf2_addr = dx_lock_2();  	state.surf2_pitch = _dxSurfacePitch; @@ -828,7 +837,7 @@ void SimonEngine::vc10_draw() {  		byte h;  		uint w; -		state.x_skip <<= 2; +		state.x_skip *= 4;  		state.dl = width;  		state.dh = height; @@ -877,7 +886,7 @@ void SimonEngine::vc10_draw() {  		uint h, i;  		if (!(state.flags & 8)) { -			src = state.depack_src + (width * state.y_skip << 4) + (state.x_skip << 3); +			src = state.depack_src + (width * state.y_skip * 16) + (state.x_skip * 8);  			dst = state.surf_addr;  			state.draw_width *= 2; @@ -912,7 +921,7 @@ void SimonEngine::vc10_draw() {  			if (state.flags & 2) {  				/* no transparency */  				do { -					uint count = state.draw_width >> 2; +					uint count = state.draw_width / 4;  					dst = dst_org;  					do { @@ -938,7 +947,7 @@ void SimonEngine::vc10_draw() {  			} else {  				/* transparency */  				do { -					uint count = state.draw_width >> 2; +					uint count = state.draw_width / 4;  					dst = dst_org;  					do { @@ -991,7 +1000,7 @@ void SimonEngine::vc10_draw() {  			uint w, h;  			byte *src, *dst, *dst_org; -			state.x_skip <<= 2;				/* reached */ +			state.x_skip *= 4;				/* reached */  			state.dl = width;  			state.dh = height; @@ -1006,7 +1015,7 @@ void SimonEngine::vc10_draw() {  					h = 0;  					do { -						dst[0] = (*src >> 4) | state.palette; +						dst[0] = (*src / 16) | state.palette;  						dst[1] = (*src & 15) | state.palette;  						dst += _screenWidth;  						src++; @@ -1027,7 +1036,7 @@ void SimonEngine::vc10_draw() {  					h = 0;  					do { -						color = (*src >> 4); +						color = (*src / 16);  						if (color)  							dst[0] = color | state.palette;  						color = (*src & 15); @@ -1047,11 +1056,11 @@ void SimonEngine::vc10_draw() {  			src = state.depack_src + (width * state.y_skip) * 8;  			dst = state.surf_addr; -			state.x_skip <<= 2; +			state.x_skip *= 4;  			if (state.flags & 2) {  				do {  					for (count = 0; count != state.draw_width; count++) { -						dst[count * 2] = (src[count + state.x_skip] >> 4) | state.palette; +						dst[count * 2] = (src[count + state.x_skip] / 16) | state.palette;  						dst[count * 2 + 1] = (src[count + state.x_skip] & 15) | state.palette;  					}  					dst += _screenWidth; @@ -1061,7 +1070,7 @@ void SimonEngine::vc10_draw() {  				do {  					for (count = 0; count != state.draw_width; count++) {  						byte color; -						color = (src[count + state.x_skip] >> 4); +						color = (src[count + state.x_skip] / 16);  						if (color)  							dst[count * 2] = color | state.palette;  						color = (src[count + state.x_skip] & 15); @@ -1206,7 +1215,7 @@ void SimonEngine::vc21_endRepeat() {  void SimonEngine::vc22_setSpritePalette() {  	uint a = vc_read_next_word();  	uint b = vc_read_next_word(); -	uint num = a == 0 ? 0x20 : 0x10; +	uint num = a == 0 ? 32 : 16;  	uint palSize = 96;  	byte *palptr, *src; @@ -1215,13 +1224,13 @@ void SimonEngine::vc22_setSpritePalette() {  		palSize = 768;  	} -	palptr = &_palette[(a << 6)]; +	palptr = &_palette[(a * 64)];  	src = _curVgaFile1 + 6 + b * palSize;  	do { -		palptr[0] = src[0] << 2; -		palptr[1] = src[1] << 2; -		palptr[2] = src[2] << 2; +		palptr[0] = src[0] * 4; +		palptr[1] = src[1] * 4; +		palptr[2] = src[2] * 4;  		palptr[3] = 0;  		palptr += 4; @@ -1312,7 +1321,7 @@ void SimonEngine::vc27_resetSprite() {  	vsp = _vgaSprites;  	while (vsp->id) { -		if ((_game & GF_SIMON1) && vsp->id == 0x80) { +		if ((_game & GF_SIMON1) && vsp->id == 128) {  			memcpy(&bak, vsp, sizeof(VgaSprite));  		}  		vsp->id = 0; @@ -1330,7 +1339,7 @@ void SimonEngine::vc27_resetSprite() {  	vte = _vgaTimerList;  	while (vte->delay) { -		if ((_game & GF_SIMON1) && vsp->id == 0x80) { +		if ((_game & GF_SIMON1) && vsp->id == 128) {  			vte++;  		} else {  			vte2 = vte; @@ -1341,7 +1350,7 @@ void SimonEngine::vc27_resetSprite() {  		}  	} -	vc_write_var(0xFE, 0); +	vc_write_var(254, 0);  	_lockWord &= ~8;  } @@ -1434,7 +1443,7 @@ void SimonEngine::vc40() {  	uint var = vc_read_next_word();  	int16 value = vc_read_var(var) + vc_read_next_word(); -	if ((_game & GF_SIMON2) && var == 0xF && !(_bitArray[5] & 1)) { +	if ((_game & GF_SIMON2) && var == 15 && !(_bitArray[5] & 1)) {  		int16 tmp;  		if (_scrollCount != 0) { @@ -1463,7 +1472,7 @@ void SimonEngine::vc41() {  	uint var = vc_read_next_word();  	int16 value = vc_read_var(var) - vc_read_next_word(); -	if ((_game & GF_SIMON2) && var == 0xF && !(_bitArray[5] & 1)) { +	if ((_game & GF_SIMON2) && var == 15 && !(_bitArray[5] & 1)) {  		int16 tmp;  		if (_scrollCount != 0) { @@ -1550,8 +1559,8 @@ void SimonEngine::vc48_setPathFinder() {  		p += step;  		y1 = readUint16Wrapper(p) - y2; -		vp[0] = y1 >> 1; -		vp[1] = y1 - (y1 >> 1); +		vp[0] = y1 / 2; +		vp[1] = y1 - (y1 / 2);  		vp += 2;  	} while (--c); | 
