I wasn't the one who did the research on the y positions; thethethethe found them and explained how they work. I only found the altitudes.
Anyway, the 3 tables contain signed bytes for the distances (0x00-0x7F are positive, 0x80-0xFF are negative). The tables for the player and enemy y values consist of 4-byte entries. The byte you should be looking at is the second one (we haven't figured out what the rest do yet). The altitude table consists of 1-byte entries.
If it helps, here's the Ruby code I used to load the positions:
f.pos=EnemyYTable+@species*4+1
@enemyY=f.getc
@enemyY=@enemyY-0x100 if @enemyY>=0x80
f.pos=PlayerYTable+@species*4+1
@playerY=f.getc
@playerY=@playerY-0x100 if @playerY>=0x80
f.pos=EnemyAltitudeTable+@species
@altitude=f.getc
@altitude=@altitude-0x100 if @altitude>=0x80
I'm not sure whether it's possible to use signed integers in Ruby, so if you can use them in the language you're using, you can avoid the subtractions to make them negative :)