I looked into this issue further, and found out some things regarding floats and decimals that I should have known about before I posted. Namely, that floats do not precisely store numbers like .1 or .2. So I don't see any way around the fact that bombing does not grant .2 kills per army bombed exactly everytime. I also looked into how the client and server interact with regards to kill updates. Kills are multiplied by 100 by the server and sent to the client. The client then divides by 100 and inputs the value into the player struct. Effectively, any decimal places beyond the second are lost. Since the kills are stored as a float with many decimal places on the server, but only to 2 decimal places on the client, this leads to a case where the server and client calculate differently regarding how many armies a ship can carry. I propose then to modify the server code to truncate kills at the second decimal place when it comes to troop capacity/beam up checking. The code change would be as follows (note there is also a similar function in robot troop capacity logic but did not think this needed to be changed as robot troop capacity stays server side). Index: ntserv/daemonII.c =================================================================== RCS file: /cvsroot/netrek/server/Vanilla/ntserv/daemonII.c,v retrieving revision 1.5 diff -r1.5 daemonII.c 2947c2947,2948 < /* XXX */ --- > /* Truncate kills to the 2nd decimal place - same procedure used > for sending kill packets to clients */ 2949c2950 < if (j->p_armies == (int)(j->p_kills * 3.0)) --- > if (j->p_armies == (int)((float)((int)(j->p_kills*100)/100.0) * 3.0)) 2952c2953 < if (j->p_armies == (int)(j->p_kills * 2.0)) --- > if (j->p_armies == (int)((float)(int)(j->p_kills*100)/100.0) * 2.0)) Index: ntserv/redraw.c =================================================================== RCS file: /cvsroot/netrek/server/Vanilla/ntserv/redraw.c,v retrieving revision 1.2 diff -r1.2 redraw.c 415c415,417 < troop_capacity = pl->p_kills * (myship->s_type == ASSAULT?3:2); --- > /* Truncate kills to the 2nd decimal place - same procedure used > for sending kill packets to clients */ > troop_capacity = (int)((float)((int)(pl->p_kills*100)/100.0) * (myship->s_type == ASSAULT?3:2));