Ok, I've read some previous suggestions on this topic and figured I'd toss this up. A relatively simple way to add LOS into the game. It also paves the way for a more complex system later (a full heightmap would be nice).
Pure code wise this would require a 1 byte addition to character, terrain, and building information and a LOS function called by the sight and ranged combat functions.
Gameplay wise adding three new game buildings (murderhole wall sections for wood and brick walls, and a lookout tower) and a new interaction on trees.
So down to business.
Walls (except murderhole wall sections), houses, cliffs, and the larger trees (pine, willow, oak, maybe more) block LOS.
Highground is provided by cliff edges, climbing trees, and the new lookout tower building.
A character can only be seen/shot by another if there is unblocked LOS between them or if one of them is considered on highground.
Murderhole wall sections- Made identical to normal wall sections, these just have a set of slits in them allowing sight through them.
Lookout tower- Large investment in wood, probably a bit of metal too. Has interactions for manning the tower, taking cover, and accessing tower storage. Tower storage only holds ranged weapons, ammo, and quivers. Manning the tower provides a defensive bonus and highground. Taking cover provides a massive defense boost, but the character cannot attack from it.
Climbing trees- Starter skill or atleast a low cost one. Character occupies the tree square, gains highground, and is immune to attacks from most animals (bears can blimb trees). Provides a small defense bonus. Exiting the tree puts them back down in the square they started at. Could add a small chance of finding birds eggs, a cheap curiosity and possible substitute for chicken eggs in cooking.
Just figured I'd toss this out.