@@ 48,7 48,7 @@ function yarnball_landing(m,target){((m)
function frame_get(m,n){"( m /n/ -- (s d)|f|state) Get next frame from current animation.";return m.anim[m.state][(n||m.frame)];};
function frame_set(m,f){"( m f -- m) Set m.frame to f. Reset ticks.";((m)["frame"]=f);((m)["tick"]=0);return m;};
function state_set(m,s){"( m s -- m) Set new state for mob.";((m)["state"]=s);return (frame_set(m,0));};
-function animate(){"( --) Handle animation loops.";((player)["tick"]=(player.tick+1));(((frame) => {return ((() => {return ((((second(frame))<player.tick)===false)?undefined:((() => {return (((fn) => {return (((next) => {return ((() => {return (((array_p(next))===false)?(((string_p(next))===false)?((() => {return (frame_set(player,next));})()):((() => {((player)["state"]=frame);return (frame_set(player,0));})())):((() => {return (frame_set(player,fn));})()));})());})((frame_get(player,fn))));})((player.frame+1)));})()));})());})((frame_get(player))));((("JUMP"===player.state)===false)?((("FALL"===player.state)===false)?((("DROP"===player.state)===false)?undefined:((() => {((player)["x"]=[((first(player.x))-(second(player.x))),(second(player.x))]);return (((zero_p((first(player.x))))===false)?undefined:((() => {return (player_landing(player,Game.level.start));})()));})())):((() => {((player)["x"]=[((first(player.x))+(second(player.x))),(2+(second(player.x)))]);return (((320<(first(player.x)))===false)?undefined:((() => {return (mob_dropping(player,Game.level.start));})()));})())):((() => {((player)["x"]=(player.x+0.1));return (((1.0<=player.x)===false)?undefined:((() => {return (((zero_p(Game.level.layout[player.target]))===false)?(player_landing(player,player.target)):(player_falling(player,player.target)));})()));})()));((yarnball)["tick"]=(yarnball.tick+1));return (((("HIDE"===yarnball.state)&&(!(player.i===Game.level.start))&&(0.75>((Math.random)())))===false)?((("DROP"===yarnball.state)===false)?((("JUMP"===yarnball.state)===false)?undefined:((() => {((yarnball)["x"]=(yarnball.x+0.05));return (((1.0<=yarnball.x)===false)?undefined:((() => {return (((zero_p(Game.level.layout[yarnball.target]))===false)?(yarnball_landing(yarnball,yarnball.target)):(state_set(yarnball,"HIDE")));})()));})())):((() => {((yarnball)["x"]=[((first(yarnball.x))-(second(yarnball.x))),(second(yarnball.x))]);return (((zero_p((first(yarnball.x))))===false)?undefined:((() => {return (yarnball_landing(yarnball,Game.level.start));})()));})())):((() => {return (mob_dropping(yarnball,Game.level.start));})()));};
+function animate(){"( --) Handle animation loops.";((player)["tick"]=(player.tick+1));(((frame) => {return ((() => {return ((((second(frame))<player.tick)===false)?undefined:((() => {return (((fn) => {return (((next) => {return ((() => {return (((array_p(next))===false)?(((string_p(next))===false)?((() => {return (frame_set(player,next));})()):((() => {((player)["state"]=frame);return (frame_set(player,0));})())):((() => {return (frame_set(player,fn));})()));})());})((frame_get(player,fn))));})((player.frame+1)));})()));})());})((frame_get(player))));((("JUMP"===player.state)===false)?((("FALL"===player.state)===false)?((("DROP"===player.state)===false)?undefined:((() => {((player)["x"]=[((first(player.x))-(second(player.x))),(second(player.x))]);return (((zero_p((first(player.x))))===false)?undefined:((() => {return (player_landing(player,Game.level.start));})()));})())):((() => {((player)["x"]=[((first(player.x))+(second(player.x))),(2+(second(player.x)))]);return (((320<(first(player.x)))===false)?undefined:((() => {return (mob_dropping(player,Game.level.start));})()));})())):((() => {((player)["x"]=(player.x+0.1));return (((1.0<=player.x)===false)?undefined:((() => {return (((zero_p(Game.level.layout[player.target]))===false)?(player_landing(player,player.target)):(player_falling(player,player.target)));})()));})()));((yarnball)["tick"]=(yarnball.tick+1));return (((("HIDE"===yarnball.state)&&(!(player.i===Game.level.start))&&(0.97<((Math.random)())))===false)?((("DROP"===yarnball.state)===false)?((("JUMP"===yarnball.state)===false)?undefined:((() => {((yarnball)["x"]=(yarnball.x+0.05));return (((1.0<=yarnball.x)===false)?undefined:((() => {return (((zero_p(Game.level.layout[yarnball.target]))===false)?(yarnball_landing(yarnball,yarnball.target)):(state_set(yarnball,"HIDE")));})()));})())):((() => {((yarnball)["x"]=[((first(yarnball.x))-(second(yarnball.x))),(second(yarnball.x))]);return (((zero_p((first(yarnball.x))))===false)?undefined:((() => {return (yarnball_landing(yarnball,Game.level.start));})()));})())):((() => {return (mob_dropping(yarnball,Game.level.start));})()));};
var d2face={sw:0,se:1,ne:3,nw:2};
function dir2loc(start,d){"( start d -> location) Figure out new location from start and direction.";return (((run) => {return ((("sw"===d)===false)?((("se"===d)===false)?((("ne"===d)===false)?((("nw"===d)===false)?undefined:((() => {return (start-run-(-1));})())):((() => {return (start-run-1);})())):((() => {return (start+run+1);})())):((() => {return (start+run+-1);})()));})(Game.level.run));};
function jumping(mob,d){"( mob d --) Set mob up for jump.";((mob)["state"]="JUMP");((mob)["x"]=0.0);((mob)["target"]=(dir2loc(mob.i,d)));((mob)["face"]=d2face[d]);return (frame_set(mob,0));};
@@ 472,7 472,7 @@
(cond [(and (= 'HIDE yarnball.state)
(not (= player.i Game.level.start))
- (< 0.9 (Math.random)))
+ (< 0.97 (Math.random)))
(mob-dropping yarnball Game.level.start)]
[(= 'DROP yarnball.state)
(:= yarnball.x (list (- (first yarnball.x) (second yarnball.x))