```python
def score_scale(mark: int, was_out_of: int, now_out_of: int) -> int:
    """Scale a mark from one total to another, rounding down."""
    if was_out_of == 0:
        return 0
    if now_out_of == 0:
        return 0
    if mark < 0:
        raise ValueError("Mark cannot be negative")
    if mark > was_out_of:
        raise ValueError("Mark cannot exceed the original total")
    if was_out_of < 0 or now_out_of < 0:
        raise ValueError("Totals cannot be negative")
    
    # Calculate the scaled score using integer division to round down
    # Formula: floor((mark / was_out_of) * now_out_of)
    # To avoid floating point issues, we compute: (mark * now_out_of) // was_out_of
    scaled_mark = (mark * now_out_of) // was_out_of
    return scaled_mark
```