Every time you change zoom you also have to update the text and sprite scissors. Seems like a pain, but it's not as bad as you might think.
Here's the code from Wordspionage that handles updating of the scissor area.
function UpdateScissors()
topSprite# = ScreenToWorldY(gBarH# + 4.0 * gPxH# )
bottomSprite# = ScreenToWorldY(gTileTrayY# - 8.0 * gPxH#)
topText# = gBarH# + 4.0 * gPxH#
bottomText# = gTileTrayY# - 8.0 * gPxH#
for i = 1 to 225
thisSprite = board[i].spriteID
thisText = board[i].textID
if GetSpriteExists(thisSprite) = 1
SetSpriteScissor(thisSprite , -200.0 , topSprite# , 200.0 , bottomSprite# )
endif
if GetTextExists(thisText) = 1
SetTextScissor(thisText , -200.0 , topText# , 200.0 , bottomText# )
endif
next i
//scissor all playerhand tiles that are ON the board
for i = 1 to 9
if playerHand[i].tileOnBoard = 1
if GetSpriteExists(playerHand[i].tileID) = 1
SetSpriteScissor(playerHand[i].tileID , -200.0 , topSprite# , 200.0 , bottomSprite# )
FixSpriteToScreen(playerHand[i].tileID , 0)
endif
if GetTextExists(playerHand[i].pointTextID) = 1
SetTextScissor(playerHand[i].pointTextID , -200.0 , topText# , 200.0 , bottomText# )
FixTextToScreen(playerHand[i].pointTextID ,0)
endif
if GetTextExists(playerHand[i].tileTextID) = 1
SetTextScissor(playerHand[i].tileTextID , -200.0 , topText# , 200.0 , bottomText# )
FixTextToScreen(playerHand[i].tileTextID ,0)
endif
endif
next i
//scissor all played tiles on the board
for i = 1 to playedTile[0].count
if GetSpriteExists(playedTile[i].tileID) = 1
SetSpriteScissor(playedTile[i].tileID , -200.0 , topSprite# , 200.0 , bottomSprite# )
endif
if GetTextExists(playedTile[i].pointTextID) = 1
SetTextScissor(playedTile[i].pointTextID , -200.0 , topText# , 200.0 , bottomText# )
endif
if GetTextExists(playedTile[i].tileTextID) = 1
SetTextScissor(playedTile[i].tileTextID , -200.0 , topText# , 200.0 , bottomText# )
endif
next i
if GetTextExists(showPointUI[1]) = 1
SetTextScissor(showPointUI[1] , -200.0 , topText# , 200.0 , bottomText# )
endif
if GetSpriteExists(showPointUI[2]) = 1
SetSpriteScissor(showPointUI[2] , -200.0 , topSprite# , 200.0 , bottomSprite# )
endif
if GetSpriteExists(showPointUI[3]) = 1
SetSpriteScissor(showPointUI[3] , -200.0 , topSprite# , 200.0 , bottomSprite# )
endif
endfunction
Hope this helps. Zooming and scissoring can be quite confusing.