Screenshot does look good - even with the unaligned textures I'm not sure I understand the motivation for having a separate scaling per texture. Isn't the scaling factor(s) that you need determined by the world coordinates that you're using when you write the map file rather than the textures themselves? I'm not an expert on this but from what I've seen you essentially need to determine the matrix required to transform surface coordinates of the tile to texture coordinates. This would be something like: [rs0 rs1 tx] [rs2 rs3 ty] [ 0 0 1] rs0..3 control scaling and rotation, tx and ty control translation. As the "Z" coordinate isn't useful the last row is always 0,0,1 and not saved in the map file. Even for flat floors you'll eventually need to tackle rs0..3 to ensure textures are rotated correctly although in Underworld at least the rotation is always the same for all tiles from what I remember. The tricky bit is obviously computing this matrix as in a general case I'd guess you'd need to compute the inverse of the world -> surface matrix and then use that to set up the appropriate scaling, rotation and offset. However, in this case I'd guess that you may get away with altering the values of tx and ty by an amount based on the direction of the slope and it's height. As far as specific links, this seems the most useful I spotted in a quick google but obviously it doesn't hold your hand through the matrix maths: http://www.doom3world.org/phpbb2/viewtopic.php?f=1&t=16228