@Nullable
    public Position useMedikit(@NotNull Warrior ally) {
        if (!has(MEDIKIT)) return null;
        int ap = actionPoints - situation.game.getMedikitUseCost();
        if (ap < 0) return null;
        int[] newAllyHp;
        if (ally.point.equals(me)) newAllyHp = healEffect(ally.index, situation.game.getMedikitHealSelfBonusHitpoints());
        else if (ally.point.isNeighbor(me)) newAllyHp = healEffect(ally.index, situation.game.getMedikitBonusHitpoints());
        else return null;
        if (Arrays.equals(allyHp, newAllyHp)) return null;
        Bonus bonus = bonusAt(me);
        int newBonuses = bonus != null ? bonuses : without(MEDIKIT);
        int[] newCollected = bonus != null ? IntArrays.add(collected, (int) bonus.getId()) : collected;
        return new Position(situation, me, stance, ap, newBonuses, enemyHp, newAllyHp, newCollected, seen);
    }