diff options
| author | Robert Göffringmann | 2003-07-01 01:29:29 +0000 | 
|---|---|---|
| committer | Robert Göffringmann | 2003-07-01 01:29:29 +0000 | 
| commit | 2c9a784be8fa44fdf250cf2abb541ea54436e91f (patch) | |
| tree | 6eae5d4a72cf6a529ff48bb04655fcb403759219 /sky/grid.cpp | |
| parent | ec64f23f22f7a0b74ffd180be99946afd5c10076 (diff) | |
| download | scummvm-rg350-2c9a784be8fa44fdf250cf2abb541ea54436e91f.tar.gz scummvm-rg350-2c9a784be8fa44fdf250cf2abb541ea54436e91f.tar.bz2 scummvm-rg350-2c9a784be8fa44fdf250cf2abb541ea54436e91f.zip | |
finished loading and saving, fixed grid bugs (some debugging code not yet removed), implemented fnLincTextModule
svn-id: r8682
Diffstat (limited to 'sky/grid.cpp')
| -rw-r--r-- | sky/grid.cpp | 28 | 
1 files changed, 15 insertions, 13 deletions
| diff --git a/sky/grid.cpp b/sky/grid.cpp index db08bfa9fc..4f4e4886b0 100644 --- a/sky/grid.cpp +++ b/sky/grid.cpp @@ -161,23 +161,25 @@ bool SkyGrid::getGridValues(uint32 x, uint32 y, uint32 width, Compact *cpt, uint  	if (y < TOP_LEFT_Y) return false; // off screen  	y -= TOP_LEFT_Y;  	y >>= 3; // convert to blocks -	if (y >= GRID_Y) return false; // off screen +	if (y >= GAME_SCREEN_HEIGHT >> 3) return false; // off screen  	bitPos = y * 40;  	width++;  	x >>= 3; // convert to blocks -	int32 x_signed = (x - (TOP_LEFT_X >> 3)); -	if (x_signed < 0) { // at least partially off screen -		if (x_signed + width <= 0) return false; // completely off screen -		else width += x_signed; // adjust width to visible part and continue -			                    // x_signed is negative, so it's += -	} -    if ((GAME_SCREEN_WIDTH >> 3) <= x_signed) return false; // off screen -	if ((GAME_SCREEN_WIDTH >> 3) < x_signed + width) { // at least partially of screen -		if ((uint32)((GAME_SCREEN_WIDTH >> 3) - x_signed) >= width) return false; // off screen -		else width -= (GAME_SCREEN_WIDTH >> 3) - x_signed; // adjust width -	} -    bitPos += x_signed; +	if (x < (TOP_LEFT_X >> 3)) { // at least partially off screen +		if (x + width < (TOP_LEFT_X >> 3)) return false; // completely off screen +		else { +			width -= (TOP_LEFT_X >> 3) - x; +			x = 0; +		} +	} else +		x -= TOP_LEFT_X >> 3; + +    if ((GAME_SCREEN_WIDTH >> 3) <= x) return false; // off screen +	if ((GAME_SCREEN_WIDTH >> 3) < x + width) // partially off screen +		width = (GAME_SCREEN_WIDTH >> 3) - x; + +    bitPos += x;  	int32 screenGridOfs = _gridConvertTable[cpt->screen] * GRID_SIZE;  	bitPos += (screenGridOfs << 3); // convert to bits  	uint32 tmpBits = 0x1F - (bitPos&0x1F); | 
