diff -ru freeciv.stock/server/unitfunc.c freeciv/server/unitfunc.c --- freeciv.stock/server/unitfunc.c Wed Feb 17 17:52:48 1999 +++ freeciv/server/unitfunc.c Wed Feb 17 17:58:51 1999 @@ -837,28 +837,28 @@ struct city *pcity; int was_lower; - if(punit->moved) - punit->moved=0; - else { - was_lower=(punit->hp < get_unit_type(punit->type)->hp); + was_lower=(punit->hp < get_unit_type(punit->type)->hp); + + punit->hp+=hp_gain_coord(punit); - punit->hp+=hp_gain_coord(punit); - - pcity=city_list_find_id(&pplayer->cities, game.global_wonders[B_UNITED]); + pcity=city_list_find_id(&pplayer->cities, game.global_wonders[B_UNITED]); - if(pcity && !wonder_obsolete(B_UNITED)) - punit->hp+=2; + if(pcity && !wonder_obsolete(B_UNITED)) + punit->hp+=2; - if(!pcity && (is_heli_unit(punit))) - punit->hp-=get_unit_type(punit->type)->hp/10; - if(punit->hp>=get_unit_type(punit->type)->hp) { - punit->hp=get_unit_type(punit->type)->hp; - if(was_lower&&punit->activity==ACTIVITY_SENTRY) - set_unit_activity(punit,ACTIVITY_IDLE); - } - if(punit->hp<0) - punit->hp=0; + if(!pcity && (is_heli_unit(punit))) + punit->hp-=get_unit_type(punit->type)->hp/10; + + if(punit->hp>=get_unit_type(punit->type)->hp) { + punit->hp=get_unit_type(punit->type)->hp; + if(was_lower&&punit->activity==ACTIVITY_SENTRY) + set_unit_activity(punit,ACTIVITY_IDLE); } + + if(punit->hp<0) + punit->hp=0; + + punit->moved=0; } diff -ru freeciv.stock/server/unittools.c freeciv/server/unittools.c --- freeciv.stock/server/unittools.c Wed Feb 17 17:52:49 1999 +++ freeciv/server/unittools.c Wed Feb 17 17:58:50 1999 @@ -278,6 +278,9 @@ if(punit->activity==ACTIVITY_FORTIFY) hp++; + + if(punit->moved) + hp=hp>0?hp:0; return hp; }