anchor.diff:        procedure IncDoorway;
         procedure DecDoorway;
         function ValidTileToGo(aLocX, aLocY:word; aUnit:TKMUnit):boolean; //using X,Y looks more clear
  +      procedure WalkOut(aUnit:TKMUnit);
       public
         constructor Create(aAction: TUnitActionType; aDirection:TGoInDirection; aHouse:TKMHouse);
         constructor Load(LoadStream:TKMemoryStream); override;
  
positive.code:     if (fTerrain.Land[fStreet.Y,fStreet.X].IsUnit = nil) then
      begin
        fWaitingForPush := false;
        KMUnit.Direction := KMGetDirection(KMPointRound(fDoor) ,fStreet);
        KMUnit.UpdateNextPosition(fStreet);
        fTerrain.UnitAdd(KMUnit.NextPosition, KMUnit); //Unit was not occupying tile while inside
        if (KMUnit.GetHome<>nil)and(KMUnit.GetHome.GetHouseType=ht_Barracks) //Unit home is barracks
        and(KMUnit.GetHome = fHouse) then //And is the house we are walking from
          TKMHouseBarracks(KMUnit.GetHome).RecruitsList.Remove(KMUnit);
      end
      else exit; //Wait until my push request is dealt with before we move out
    end;
  
    Assert((fHouse = nil) or KMSamePoint(KMPointRound(fDoor),fHouse.GetEntrance)); //Must always go in/out the entrance of the house
  
negative.code:     if Result then
        U.SetActionWalkPushed( fTerrain.GetOutOfTheWay(U.GetPosition,KMPoint(0,0),CanWalk) );
    end;
  end;
  
  
  procedure TUnitActionGoInOut.WalkOut(aUnit:TKMUnit);
  begin
    aUnit.Direction := KMGetDirection(KMPointRound(fDoor) ,fStreet);
    aUnit.UpdateNextPosition(fStreet);
    fTerrain.UnitAdd(aUnit.NextPosition, aUnit); //Unit was not occupying tile while inside
    if (aUnit.GetHome <> nil)
    and (aUnit.GetHome.GetHouseType = ht_Barracks) //Unit home is barracks
    and (aUnit.GetHome = fHouse) then //And is the house we are walking from
      TKMHouseBarracks(aUnit.GetHome).RecruitsList.Remove(aUnit);
  end;
  
  
  