mmm, let's back up.
Si je comprends bien, tu as un monde discret tel que tu peux decouper ton monde sur une grille reguliere et chaque segment de cette grille est un mur ou n'est pas un mur.
La fonction findHp trouve le mur horizontal le plus proche. Pour le trouver, tu as un rayon qui se deplace de (xa,ya) a chaque iteration de ton algorithme, ce qui te donne un point (hp.x, hp.y). Quand ton rayons vient de changer de "case" de ton jeu et que c'est une case qui a un mur horizontal, la condition "while(map[hp.y/64][hp.x/64] == 0)" devient fausse et tu sort de ta boucle.
Si j'ai bien compris le probleme, ce qui t'arrive est que tu passe de la case (8,8) a la case (9,9) sans passer par (8,9) ou par (9,8). Je rajouterais une condition qui detecte les traverse de case diagonale puis qui deciderais par laquelle le rayon passe ( passe t'il par (8,9) ou par (9,8)) et effectuerays le test sur cette case la egalement.