> struct player_s2_spacket *pa2 = (struct player_s2_spacket *) sbuf; > > x = SCALE * ntohs(pa2->x); > y = SCALE * ntohs(pa2->y); > > If you also change the clients to treat the data in the SP2 struct as > signed instead of unsigned, then you get: > > data sent in SP2 packet = 0xf63d = -2499 > client interpertation of SP2 data = -99960 > > Close, but still different. > Yup I also changed client from ntohs to (short) ntohs. -99960 is good enough imo, would be better if it was -100000 but I don't see how to do that. Probably a rounding thing. There are several places in the client (COW, netrekxp at least) where it looks for negative player position as determining factor whether to redraw screen or not. Most noticeable for observers locked onto a player who dies - with short packets on, the observer gets constant redraws due to xpos > 0, with long packets, client stops redrawing due to xpos = -100000. Yes it also requires a client change to receive the signed position correctly, and yes the client could be changed to check both x upper bound as well as lower bound - but getting completely wrong position is still something that should be fixed, imho. For older clients without the corresponding client change, they will still get the way wrong positive xpos as you said. But for newer clients this gives a chance to actually get negative pos values. Bill