ЗигЗаг и взлет: принцип работы

Привет, не могу понять принцип движения по оси Y? По X: к переменной просто прибавляется текущее время, тем самым идет плавное увеличение на 1.
А вот по Y. выполняя первую функцию def mod15(n), идет простое возвращение текущего времени до момента while n >= 15:, далее сброс n -= 15.
Т.е. первая секунда < 15, мы её возвращаем, и она попадает сюда y = 10 + 3 * mod15(time), т.е.
y = 10 + 3 * 1 , по идее координата должна быть 13, затем на 2 секунде 16 и тд. Но герой идет строго прибавляя по 1 к оси Y
Объясните пожалуйста, где я ошибся в понимании.
П.с. Код то работает, но непонятно как (:

# Сбеги из Долины смерти!
# Двигайся зигзагом с помощью функций получения остатка от деления.

# Эта функция возвращает значение от 0 до 15:
def mod15(n):
    while n >= 15:
        n -= 15
    return n

# Эта функция должна возвращать значение от 0 до 9:
def mod9(n):
    # Используй цикл while, чтобы изменять параметры функции перед тем как вернуть их.
    while n >= 9:
        n -= 9
    return n

# Не изменяй код ниже:
while True:
    time = hero.time
    if time < 30:
        y = 10 + 3 * mod15(time)
    else:
        y = 20 + 3 * mod9(time)
    x = 10 + time
    hero.moveXY(x, y)

you’re code worked for me, you need faster boots to beat the level. dont use okar or boots of jumping for this lvl

Epic, he states that his code works…he just wants to understand the theory behind the coding.