```python
from math import ceil

def tiles_across(length: int, tile: int) -> int:
    """
    Return how many tiles of a given size cover a length, rounding up so that a part tile still counts as one.
    
    :param length: Length to cover in tiles
    :param tile: Size of one tile
    :return: Number of tiles needed to cover the length
    """
    return ceil(length / tile)

def tiles_needed(width: int, height: int, tile: int, spare: int) -> int:
    """
    Return the tiles for a wall of a width and a height, adding a whole-percent allowance for breakages and rounding up again.
    
    :param width: Width of the wall
    :param height: Height of the wall
    :param tile: Size of one tile
    :param spare: Percentage of spare tiles to add for breakages
    :return: Total number of tiles needed
    """
    total_tiles = width * height
    spare_tiles = total_tiles * (spare / 100)
    total_tiles += ceil(spare_tiles)
    return tiles_across(total_tiles, tile)
```