I can see a couple spots where some characters could be saved, though maybe not enough to add back in anything.
You've got 4 lines for movement, each costing 13 character, plus the base cost of using substitution on the function, for 57 total. Compare that to using btn with bitmasking: "v=btn()x+=(v&2)/2-(v&1)y+=(v&8)/8-(v&4)/4" is only 41 characters. This assumes you aren't preventing the player from going offscreen of course, but I don't think your game needs that.
Your conditions seem inefficient as well in a couple places. I'm not confident, but I think "t()%2" can only have 0 or 1 as a result, so rather than "==0" you could use "<1". Also there's a "b==1" and I'm not sure where b could be given a value that isn't either 1 or nil. If those are the only values, "==1" is redundant.
Other than that, I think there's a few places you could save a character or two by re-ordering the statements that don't depend on each other. "g,h=n,n b=1" could eliminate the space by putting "b=1" in front. Similarly, "j,k=-4,n u=1" could be "u=1j=-4k=n" to save 2 characters.