# Watch out, cannons are ready to fire!
# Move slow along a special pattern to confuse them.
# This function returns a value from 0 to 30 (0 <= n < 30)
def mod30(n):
if n >= 30:
return n - 30
else:
return n
# This function should return a value from 0 to 40 (0 <= n < 40)
def mod40(n):
# Use an if-statement to return the correct value.
if n >= 40:
return n
# You don't need to change the following code:
while True:
time = hero.time
x = mod30(time) + 25
y = mod40(time) + 10
hero.moveXY(x, y)

# Dodge the cannons and collect 8 gems.
# Watch out, cannons are ready to fire!
# Move slow along a special pattern to confuse them.
# This function returns a value from 0 to 30 (0 <= n < 30)
def mod30(n):
if n >= 30:
return n - 30
else:
return n
# This function should return a value from 0 to 40 (0 <= n < 40)
def mod40(n):
# Use an if-statement to return the correct value.
if n >= 40:
return n - 40
# You don't need to change the following code:
while True:
time = hero.time
x = mod30(time) + 25
y = mod40(time) + 10
hero.moveXY(x, y)

coughcough.
This level is not as hard as you may think it is. Look at the top function, then literally copy it onto the bottom one, but use 40 instead of 30. They should do the same thing.
Danny

Just because maybe @qwerty had not quite correctly read your post, so I was bringing it up again for him to see (because you’re right in what you said, I just repeated it).

The reason y was NaN (which means nothing) was because you didn’t return a value in your function. Now you’ve checked if n > 40 and < 40 so it will always return a value.
Danny