Got multi tile advance working. I hope.
2 files changed, 5 insertions(+), 3 deletions(-)

M build/index.html
M qc.rkt
M build/index.html +2 -2
@@ 43,7 43,7 @@ function level_pawsing(level){"( level -
 function level_winning(level){"( level --) Level has been completed.";((level)["state"]="WINS");((yarnball)["state"]="HIDE");(all_stop());return (play("win"));};
 function level_done_p(level){"( level -- f) Is level completed (all cubes turned correct colour)?";return (0===((level.tops.filter)(((x) => {return (!((x<0)||(level.done===x)));})))["length"]);};
 function mob_dropping(m,target){"( m target -- m) Set up to drop from height.";((m)["i"]=target);((m)["target"]=-1);((m)["x"]=[150,10]);return (state_set(m,"DROP"));};
-function player_landing(p,target){"( p target --) Land player p on target.";((p)["i"]=target);((p)["target"]=-1);(state_set(p,"IDLE"));(((tops) => {return (tops[p.i]=1);})(Game.level.tops));(play("ponk"));return (((level_done_p(Game.level))===false)?undefined:((() => {return (level_winning(Game.level));})()));};
+function player_landing(p,target){"( p target --) Land player p on target.";((p)["i"]=target);((p)["target"]=-1);(state_set(p,"IDLE"));(((tops) => {return (((v) => {return (((v<Game.level.done)===false)?undefined:((() => {return (tops[p.i]=(v+1));})()));})(tops[p.i]));})(Game.level.tops));(play("ponk"));return (((level_done_p(Game.level))===false)?undefined:((() => {return (level_winning(Game.level));})()));};
 function player_falling(p,start){"( p start --) Set up player to start falling.";((p)["falls"]=(p.falls+1));((p)["i"]=start);((p)["target"]=-1);((p)["x"]=[0,1]);(state_set(p,"FALL"));return (play("aarg"));};
 function yarnball_landing(m,target){((m)["i"]=target);((m)["target"]=(target+Game.level.run+(choose([-1,1]))));((m)["x"]=0);(state_set(m,"JUMP"));return (play("pop"));};
 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)];};

          
@@ 55,7 55,7 @@ function dir2loc(start,d){"( start d -> 
 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));};
 function game_loop(timestamp){(((cx) => {return (((fps_limit) => {return (((delta) => {return (((seconds_passed) => {return (((fps) => {return ((() => {return (((delta>=fps_limit)===false)?undefined:((() => {((Game)["log"]["keytick"]=(Game.log.keytick+1));((Game)["log"]["fps"]=fps);((Game)["timestamp_old"]=timestamp);((Game)["level"]["tick"]=(Game.level.tick+1));(draw(APP.screen,cx));return (animate());})()));})());})(((Math.round)((1.0/seconds_passed)))));})((delta/1000)));})((timestamp-Game["timestamp_old"])));})((1000/APP.fps)));})(Game.cx));return ((window["requestAnimationFrame"])(game_loop));};
 ((window["addEventListener"])("keyup",((e) => {((Game)["log"]["keytick"]=0);return (((idle) => {return ((("PLAY"===Game.level.state)===false)?(((("WINS"===Game.level.state)||("WAIT"===Game.level.state))===false)?((("LOSE"===Game.level.state)===false)?undefined:((() => {return (((("Enter"===e.key)||(" "===e.key))===false)?undefined:((() => {return (level_set(Game.nlevel));})()));})())):((() => {return (((("Enter"===e.key)||(" "===e.key))===false)?undefined:((() => {return (level_set((Game.nlevel+1)));})()));})())):((() => {return (((idle&&("z"===e.key))===false)?(((idle&&("x"===e.key))===false)?(((idle&&("a"===e.key))===false)?(((idle&&("s"===e.key))===false)?undefined:((() => {return (jumping(player,"nw"));})())):((() => {return (jumping(player,"ne"));})())):((() => {return (jumping(player,"se"));})())):((() => {return (jumping(player,"sw"));})()));})()));})((("IDLE"===player.state)||("IDL2"===player.state)||("SLEP"===player.state))));})));
-function init(){(level_set(0));(((canvas) => {return ((() => {return ((Game)["cx"]=((canvas["getContext"])("2d")));})());})(((document["getElementById"])("the-canvas"))));return ((window["requestAnimationFrame"])(game_loop));};
+function init(){(level_set(3));(((canvas) => {return ((() => {return ((Game)["cx"]=((canvas["getContext"])("2d")));})());})(((document["getElementById"])("the-canvas"))));return ((window["requestAnimationFrame"])(game_loop));};
 (init());
 </script>
 </body>

          
M qc.rkt +3 -1
@@ 421,7 421,9 @@ 
      (state-set p 'IDLE)
 
      (let ([tops Game.level.tops]) ; Have to do this for syntax reasons...
-       (:= tops p.i 1))
+       (let ([v (ref tops p.i)])
+       (when (< v Game.level.done)
+         (:= tops p.i (+ v 1)))))
      (play 'ponk)
      (when (level-done? Game.level)
        (level-winning Game.level)))