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); |