The resolution is below, quoted for proper credit .
its simple really, I'll start from tile--> screen and then see how it goes from screen to tile. Of course you should replace the numbers 64 and 32 by constants for easy change.
tile --> screen
for every tile you go in the X direction you go 64 pixels right and 32 pixels down,
for every tile you go in the Y direction you go 64 pixels left and 32 pixels down,
on screen right=positive x, left=negative x, up=negative y, down = positive y
so we get:
pixel_x = X_LOCATION_OF_TOP_MIDDLE_TILE + 64*tile_x - 64*tile_y
pixel_y = Y_LOCATION_OF_TOP_MIDDLE_TILE + 32*tile_x + 32*tile_y
now to do the screen --> tile
for ease of writing, pixel_x = px, tile_x = tx, X_LOCA... = X0
equation1: px = X0 + 64*(tx-ty)
equation2: py = Y0 + 32*(tx+ty)
we want to find equations for tx and ty when given px and py, so we do some algebra:
eq1+2*eq2 = px+2py = X0+2Y0 + 128*tx
---> tx = (px+2*py -X0-2Y0)/128
eq1-2eq2 = px-2py = X0-2*Y0 -128ty
---> ty = (px-2py - X0+2*Y0) /(-128)
I hope that was clear, and maybe you learned some math from it
the matrices are just compressed way to do the algebra.
[Edited by - Iftah on December 5, 2008 6:08:28 AM]
In order to get it to work, I had to change the 128's to 64's. It's been forever so I don't remember much of that code, but it should be pretty straight forward.
Hope it helps.