Yeah, I've seen that before with ARM, several years ago.

The network protocol uses an unsigned char to represent a direction.

Netrek was written for 32-bit systems before i386 was a thing, and was
later ported to i386 and tested.  Testing concentrated on real
players, and rarely robots.

You're welcome to do a port to ARM and test.  I'll review code changes.

Other places of interest can be found with a "git grep atan2", where
you will find;

(a) some code which drops the result in a signed variable, then
where it is negative add 256 to bring it into the unsigned char
representation (ntserv/daemon.c, ntserv/util.c, robotd/dodge.c),

(b) some other code using the same pattern you identified
(robots/puckmove.c, xsg/input.c, xsg/redraw.c),

(c) some code using a similar pattern as (a) but where the limiting is
done before scaling (ntserv/wander2.c, tools/fun.c),

There will also be other interesting casts to investigate.  Big job.

C99 not particularly relevant, given it came out way after Netrek was
big.

-- 
James Cameron
http://quozl.netrek.org/