title Miss Direction author Malcolm Tyrrell homepage https://sites.google.com/site/malcolmsprojects/miss-direction noaction again_interval 0.125 ( License: (C)2014 Malcolm Tyrrell You can use and distribute this code under the terms of the AGPLv3: http://www.gnu.org/licenses/agpl-3.0.html ) ======== OBJECTS ======== Background BLACK Wall Blue InnerCornerBR Blue DarkBlue ..... ..... ....1 ....0 ..100 InnerCornerTR Blue DarkBlue ..100 ....0 ....1 ..... ..... InnerCornerTL Blue DarkBlue 001.. 0.... 1.... ..... ..... InnerCornerBL Blue DarkBlue ..... ..... 1.... 0.... 001.. OuterCornerTR Blue DarkBlue 0001. 00001 00000 00000 00000 OuterCornerTL Blue DarkBlue .1000 10000 00000 00000 00000 OuterCornerBL Blue DarkBlue 00000 00000 00000 10000 .1000 OuterCornerBR Blue DarkBlue 00000 00000 00000 00001 0001. NorthTip Blue DarkBlue .101. 10001 00000 00000 00000 SouthTip Blue DarkBlue 00000 00000 00000 10001 .101. EastTip Blue DarkBlue 0001. 00001 00000 00001 0001. WestTip Blue DarkBlue .1000 10000 00000 10000 .1000 TrapDoor Blue DarkBlue 10001 01010 00100 01010 10001 Flip Blue DarkBlue 00100 01010 10001 01010 00100 (The white of the player's eyes are provided by the gravity tiles, below. See the broken crate logic for why.) PlayerDown Green Pink ...1. .0001 0.0.0 00000 .000. PlayerUp Green Pink .000. 00000 0.0.0 1000. .1... PlayerRight Green Pink .100. 10.00 .0000 .0.00 ..00. PlayerLeft Green Pink .00.. 00.0. 0000. 00.01 .001. (With the current rule set, there aren't enough objects to give the crate four directional tiles. It would be possible to rewrite the rules so gravity is merged into bodies. However, I think the game works well as is.) Crate Orange Yellow Brown 00000 01110 01210 01110 00000 (The gravity tiles determine which way gravity acts on a body, and also provide the whites of the player's eyes. They can be moved to the top layer for debugging.) GravityUp White ..... ..0.. .000. ..... ..... GravityDown White ..... ..... .000. ..0.. ..... GravityRight White ..... ..0.. ..00. ..0.. ..... GravityLeft White ..... ..0.. .00.. ..0.. ..... (Movement tiles, used for automatic moves. These have to be invisible as they are added to the level when a body rounds a corner.) MoveUp Blue ..... ..... ..... ..... ..... MoveLeft Blue ..... ..... ..... ..... ..... MoveDown Blue ..... ..... ..... ..... ..... MoveRight Blue ..... ..... ..... ..... ..... Exit Red DarkRed Yellow 01010 01010 01020 01010 01010 (As far as I know, I need a tile to detect the edge of the level.) OuterWall Black ..... ..... ..... ..... ..... (For the most part, the game mechanics cooperate. However, there are a few annoying feature interactions. For example when a crate is blocked when rounding a corner. I deal with this by ending the level: Indicated by a broken crate and a dead player. Note that I can free up this tile if I use gravity tiles to provide part of the crates image. Unfortunately, it requires many additional instructions.) BrokenCrate Orange Yellow Brown Red Pink Black 55555 34343 01230 01130 00434 ======= LEGEND ======= (By giving some of the immobile objects a gravity tile, I can partly exploit collision detection to ensure gravity tiles move consistently with their bodies.) . = Background # = Wall and GravityDown 0 = InnerCornerTL 1 = InnerCornerTR 2 = InnerCornerBL 3 = InnerCornerBR 4 = OuterCornerTL and GravityDown 5 = OuterCornerTR and GravityDown 6 = OuterCornerBL and GravityDown 7 = OuterCornerBR and GravityDown N = NorthTip and GravityDown S = SouthTip and GravityDown E = EastTip and GravityDown W = WestTip and GravityDown D = PlayerDown and GravityDown U = PlayerUp and GravityUp L = PlayerLeft and GravityLeft R = PlayerRight and GravityRight * = Crate and GravityDown ^ = Crate and GravityUp < = Crate and GravityLeft > = Crate and GravityRight T = TrapDoor F = Flip X = Exit _ = OuterWall (I try to make rules as specific as possible, to avoid generating too many instructions. This is why there are so many categories.) Player = PlayerDown or PlayerUp or PlayerLeft or PlayerRight InnerCorner = InnerCornerBR or InnerCornerTR or InnerCornerBL or InnerCornerTL OuterCorner = OuterCornerTL or OuterCornerTR or OuterCornerBL or OuterCornerBR Tip = NorthTip or SouthTip or EastTip or WestTip Gravity = GravityDown or GravityRight or GravityUp or GravityLeft GravityDL = GravityDown or GravityLeft GravityDR = GravityDown or GravityRight GravityUL = GravityUp or GravityLeft GravityUR = GravityUp or GravityRight GravityVert = GravityUp or GravityDown GravityHoriz = GravityLeft or GravityRight Body = Player or Crate Movement = MoveUp or MoveDown or MoveLeft or MoveRight Support = Body or Wall or OuterCorner or Tip or TrapDoor or Flip Special = Flip or Trapdoor SupportUp = Support or InnerCornerBL or InnerCornerBR SupportDown = Support or InnerCornerTR or InnerCornerTL SupportLeft = Support or InnerCornerTR or InnerCornerBR SupportRight = Support or InnerCornerTL or InnerCornerBL ======= SOUNDS ======= (Unfortunately, the sounds are very minimal. There are too many rules already, and triggering sounds exactly when I'd like would require even more.) (Crate MOVE 98943507) BrokenCrate CREATE 36512104 (Outer Wall) sfx0 53728701 (Push crate) sfx1 20584307 EndLevel 307503 ================ COLLISIONLAYERS ================ Background Movement InnerCorner, TrapDoor, Exit, Flip Gravity Wall, OuterCorner, Tip, Body, BrokenCrate OuterWall ====== RULES ====== (Although I'm very happy with the end result, PuzzleScript may not have been the right choice for this game. The interactions between objects in Miss Direction is probably easier to express with code than with rules.) (Automatic movements) [ Body MoveUp ] -> [ Up Body ] again [ Body MoveLeft ] -> [ Left Body ] again [ Body MoveRight ] -> [ Right Body ] again [ Body MoveDown ] -> [ Down Body ] again (Player with no gravity is dead.) [ Player No Gravity ] -> [ stationary Player ] (A broken crate ends the level) [ BrokenCrate ] [ Player Gravity ] -> [ BrokenCrate ] [ stationary Player ] (Player can't push towards gravity) Down [ > PlayerDown GravityDown | Crate ] -> [ PlayerDown GravityDown | Crate ] Right [ > PlayerRight GravityRight | Crate ] -> [ PlayerRight GravityRight | Crate ] Left [ > PlayerLeft GravityLeft | Crate ] -> [ PlayerLeft GravityLeft | Crate ] Up [ > PlayerUp GravityUp | Crate ] -> [ PlayerUP GravityUp | Crate ] (Player pushes crates) [ > Player | Crate ] -> [ > Player | > Crate ] sfx1 (Notes: * Rules are linear, but the interactions in Miss Direction are aften not. We deal with this by sending movement tiles towards their intended position using "up" (etc) in the rules. * PuzzleScript properties don't seem to easily let me handle each corner type with a few general rule. I think I could do it with a large table of properties, but that wouldn't be much of an improvement. ) (INNER CORNERS) (Top Left Inner Corner) Left [ > Body GravityUL | InnerCornerTL ] -> [ > Body GravityLeft | InnerCornerTL MoveDown ] again Up [ > Body GravityUL | InnerCornerTL ] -> [ > Body GravityUp | InnerCornerTL MoveRight ] again Right Down [ > Body | InnerCornerTL ] -> [ Body | InnerCornerTL ] (Top Right Inner Corner) Up [ > Body GravityUR | InnerCornerTR ] -> [ > Body GravityUp | InnerCornerTR MoveLeft ] again Right [ > Body GravityUR | InnerCornerTR ] -> [ > Body GravityRight | InnerCornerTR MoveDown ] again Left Down [ > Body | InnerCornerTR ] -> [ Body | InnerCornerTR ] (Bottom Left Inner Corner) Down [ > Body GravityDL | InnerCornerBL ] -> [ > Body GravityDown | InnerCornerBL MoveRight ] again Left [ > Body GravityDL | InnerCornerBL ] -> [ > Body GravityLeft | InnerCornerBL MoveUp ] again Right Up [ > Body | InnerCornerBL ] -> [ Body | InnerCornerBL ] (Bottom Right Inner Corner) Right [ > Body GravityDR | InnerCornerBR ] -> [ > Body GravityRight | InnerCornerBR MoveUp ] again Down [ > Body GravityDR | InnerCornerBR ] -> [ > Body GravityDown | InnerCornerBR MoveLeft ] again Up Left [ > Body | InnerCornerBR ] -> [ Body | InnerCornerBR ] (OUTER CORNERS) (Top Left Outer Corner) Down [ Left Body GravityDown | OuterCornerTL ] -> [ Left Body GravityRight Left MoveDown | OuterCornerTL ] again Right [ Up Body GravityRight | OuterCornerTL ] -> [ Up Body GravityDown Up MoveRight | OuterCornerTL ] again (Top Right Outer Corner) Down [ Right Body GravityDown | OuterCornerTR ] -> [ Right Body GravityLeft Right MoveDown | OuterCornerTR ] again Left [ Up Body GravityLeft | OuterCornerTR ] -> [ Up Body GravityDown Up MoveLeft | OuterCornerTR ] again (Bottom Left Outer Corner) Up [ Left Body GravityUp | OuterCornerBL ] -> [ Left Body GravityRight Left MoveUp | OuterCornerBL ] again Right [ Down Body GravityRight | OuterCornerBL ] -> [ Down Body GravityUp Down MoveRight | OuterCornerBL ] again (Bottom Right Outer Corner) Up [ Right Body GravityUp | OuterCornerBR ] -> [ Right Body GravityLeft Right MoveUp | OuterCornerBR ] again Left [ Down Body GravityLeft | OuterCornerBR ] -> [ Down Body GravityUp Down MoveLeft | OuterCornerBR ] again (TIPS) (The "No Movement" stops a later rule from conflicting with an ealier rule in this section) (North tip) Right [ Up Body GravityRight No Movement | NorthTip | ] -> [ Up Body GravityLeft Up MoveRight | NorthTip Up MoveRight | Up MoveDown ] again Left [ Up Body GravityLeft No Movement | NorthTip | ] -> [ Up Body GravityRight Up MoveLeft | NorthTip Up MoveLeft | Up MoveDown ] again (South tip) Right [ Down Body GravityRight No Movement | SouthTip | ] -> [ Down Body GravityLeft Down MoveRight | SouthTip Down MoveRight | Down MoveUp ] again Left [ Down Body GravityLeft No Movement | SouthTip | ] -> [ Down Body GravityRight Down MoveLeft | SouthTip Down MoveLeft | Down MoveUp ] again (East tip) Down [ Right Body GravityDown No Movement | EastTip | ] -> [ Right Body GravityUp Right MoveDown | EastTip Right MoveDown | Right MoveLeft ] again Up [ Right Body GravityUp No Movement | EastTip | ] -> [ Right Body GravityDown Right MoveUp | EastTip Right MoveUp | Right MoveLeft ] again (West tip) Down [ Left Body GravityDown No Movement | WestTip | ] -> [ Left Body GravityUp Left MoveDown | WestTip Left MoveDown | Left MoveRight ] again Up [ Left Body GravityUp No Movement | WestTip | ] -> [ Left Body GravityDown Left MoveUp | WestTip Left MoveUp | Left MoveRight ] again (TRAPDOORS AND FLIPS) (This is a negative rule which prevents bodies going through these elements sideways. It seems more intuitive to prevent it than to allow it.) Horizontal [ > Body GravityVert | Special ] -> [ Body GravityVert | Special ] Vertical [ > Body GravityHoriz | Special ] -> [ Body GravityHoriz | Special ] (FLIP) Up [ > Body GravityUp | Flip | No Crate ] -> [ > Body GravityDown | Flip MoveUp | ] again Down [ > Body GravityDown | Flip | No Crate ] -> [ > Body GravityUp | Flip MoveDown | ] again Left [ > Body GravityLeft | Flip | No Crate ] -> [ > Body GravityRight | Flip MoveLeft | ] again Right [ > Body GravityRight | Flip | No Crate ] -> [ > Body GravityLeft | Flip MoveRight | ] again (Force gravity to follow player) [ > Body Gravity ] -> [ > Body > Gravity ] (Gravity) Late Up [ Body GravityUp No Movement | No SupportUp ] -> [ Body GravityUp MoveUp | ] again Late Down [ Body GravityDown No Movement | No SupportDown ] -> [ Body GravityDown MoveDown | ] again Late Left [ Body GravityLeft No Movement | No SupportLeft ] -> [ Body GravityLeft MoveLeft | ] again Late Right [ Body GravityRight No Movement | No SupportRight ] -> [ Body GravityRight MoveRight | ] again (Use gravity to select correct tile) Late [ Player GravityDown ] -> [ PlayerDown GravityDown ] Late [ Player GravityUp ] -> [ PlayerUp GravityUp ] Late [ Player GravityLeft ] -> [ PlayerLeft GravityLeft ] Late [ Player GravityRight ] -> [ PlayerRight GravityRight ] (Falling off the edge is fatal) Late [ Body Gravity OuterWall ] -> [ OuterWall] sfx0 (If crates are obstructed during an automatic move, they break and that ends the level. This is not a game-mechanic per se, but is necessary to prevent glitchy behaviour. Known glitches remain, but I think they rarely arise in the current set of levels.) Late Down [ Crate MoveDown | Crate ] -> [ BrokenCrate | BrokenCrate ] Late Up [ Crate MoveUp | Crate ] -> [ BrokenCrate | BrokenCrate ] Late Left [ Crate MoveLeft | Crate ] -> [ BrokenCrate | BrokenCrate ] Late Right [ Crate MoveRight | Crate ] -> [ BrokenCrate | BrokenCrate ] Late Down [ Player MoveDown | Crate | Crate ] -> [ Player | BrokenCrate | BrokenCrate ] Late Up [ Player MoveUp | Crate | Crate ] -> [ Player | BrokenCrate | BrokenCrate ] Late Left [ Player MoveLeft | Crate | Crate ] -> [ Player | BrokenCrate | BrokenCrate ] Late Right [ Player MoveRight | Crate | Crate ] -> [ Player | BrokenCrate | BrokenCrate ] ============== WINCONDITIONS ============== (All of the current levels have a single exit, but multiple exits would be legitimate) Some Player on Exit ======= LEVELS ======= message For Avery. ( 1. Set the scene and introduce tips. ) ..................... ................X.... .............######E. ....D..#######....... .W######............. ..................... ..................... ( 2. Introduce falling safely, falling off the edge, trapdoors. ) _____________ ............. ......X...... ....W###E.... ............. ............. ....D........ ...###T###... ............. ............. ............. .W###E....... ............. ............. ............. .......####E. ............. ............. _____________ ( 3. Introduce corners. The level design is meant to visually disguise the corners. ) ___________________ ................... ................... .....W####T##E..... ................... ................... .........X......... ......4####T#...... ......#.....#...... ......#.....#...... ......##E.W##...... .....3#.....#...... .W#####.....###T#E. ......#.....#.U.... ......#T#####...... ................... ................... ................... ..W#####T#######E.. ................... ................... ___________________ ( 4. This level is designed to draw the player in the wrong direction, but for the right reasons. Namely to give the player lots of opportunity to understand the inner corner logic. The level also introduces semi-circles. There are two ways to handle a body falling onto an inner corner. a. you can shift it one tile sideways. b. You can turn it and let it continue falling sideways. Both probably lead to viable games. I suspect b. would lead to lots of flying around and make levels difficult to design. Thus, I went for a. ) _........#####........_ _........#0.1#........_ _....#####...#####...._ _....#...........#...._ _...##...........#...._ _...#0...........#...._ _...#2...........#...._ _...##...........####._ _....#.............1#._ _.###7..............#._ _.#0................#._ _.#................3#._ _.#X.............####._ _.#..............#...._ _....#...........#...._ _....#D..........#...._ _....####.....####...._ _.......#.....#......._ _.......#.....#......._ _.......#2...3#......._ _.......#######......._ _....................._ ( 5. Mazes. A single maze is interesting enough, I think. They might get boring very quickly. ) __________________________ _........................_ _........................_ _..##########E..W#####5.._ _..#0.................#.._ _..#..........D.......#.._ _..#.....4#T#####.....#.._ _..#..N..#......#..#..#.._ _..#..#.........T..#..#.._ _..#..#..#...#..#..#..#.._ _........T..X#........T.._ _..N..#..#...#..N..#..#.._ _..#..#.........#..#..#.._ _..#..S..#.....3#..#..#.._ _..#.....6####T##.....#.._ _..#..................#.._ _..#2.................#.._ _..6##########..W######.._ _........................_ _........................_ __________________________ ( 6. Crates, dorsal fin pattern, jump to exit. This level was designed to have 1 unit of crate challenge, and also reassure the player that jumping might have a purpose after all. A one-tile drop would give the same effect as the dorsal fin, but the dorsal fine looks nicer. ) _________________ _..............._ _.......D......._ _.......*......._ _..N...4#5...N.._ _..#...#X#...#.._ _..#2.......3#.._ _..###.###.###.._ _..6#########7.._ _......1#......._ _.......6......._ _..............._ _..............._ _________________ ( 7. Crate pushing when player has different gravity to the crate. The platform topology is not just about making it complicated to get places. Objects with different gravities can interact. ) _______________ _............._ _.....D.X....._ _...4##.#.5..._ _...6##.##7..._ _....^........_ _............._ _.....###....._ _............._ _..4###.###5.._ _..#0.....1#.._ _..#2.....3#.._ _..6####.##7.._ _............._ _............._ _...WT###TE..._ _............._ _............._ _______________ ( 8. Jumping can push a crate. The player has used jump only once so far, so hopefully it's not completely trivial to solve this. The solution is also kind of painful, which I find amusing. ) ___________________ ................... ................... ..4####TE.W#####5.. ..#0...........1#.. ..#......D......#.. ..#...#######...#.. ..#.............#.. ..#.*.....*...*.#.. ..#.###.#######.#.. ..#.............#.. ..#2.....X.....3#.. ..####...#.*.####.. ..6#############7.. ................... ................... ___________________ ( 9. Replacement level 9. Crates with surpising gravity. ) ##################### #####.###.###.###.### #0.^...*...^.......1# #..#...#...#...#....# #L.#...#...#...#...X# #..#...#...#...#....# #2.*...*...^.......3# #####.###.###.###.### ##################### ( 10. Crates with a gravity different to bodies act as platforms. ) __________________ _................_ _................_ _....4###5......._ _....#01##......._ _....#..##......._ _..4.#<.##..N.#.._ _..#.#.3##..#.#.._ _.X#.#L.....#.#.._ _..#.#..##..#.#.._ _..6.#<.##..6.7.._ _....#..##......._ _....#23###......_ _.....####7......_ _................_ _................_ __________________ ( 11. Crates have square corners This has a red herring, but hopefully the player can discount it quite quickly. Moving a crate along the bottom from the left to the right also hints at the actual solution. ) ___________________________ _........................._ _........................._ _..4###.............###5.._ _..####...#.....N...####.._ _..####...#..#..#..X####.._ _..####..##..#..#...####.._ _..#0.1...#..#..#...0.1#.._ _..#......#..#.>#......#.._ _..#......#..#..#......#.._ _..#.........#..#2D....#.._ _..#......#.....######.#.._ _..#......#............#.._ _..#2....3#2..........3#.._ _..#####################.._ _........................._ _........................._ ___________________________ ( 12. Introduce flips. This level has almost no challenge, so some players will rush through it. Hopefully some players get a mild surprise: The levels is intended to suggest that the new tile is a teleport. ) ________________________________________ _.......40....................15......._ _......3#2....................3#2......_ _.....4###23..15..15..15..15..1##5....._ _....W######...#...#...#...#...###E...._ _.....####01..37..37..37..37..3###....._ _.....#1#0....................1#0#....._ _.....#.62....................37.#....._ _....3#2........................3#2...._ _....4#5........................4#5...._ _......................................_ _......................................_ _..###F##5....................###F##5.._ _..................................1#.._ _..N.....4...................>5.....6.._ _..#2.*.3#....................#........_ _..6#####7....................S.####7.._ _.....U..........................X....._ _......................................_ ________________________________________ ( 13. Stack as platform. ) ___________________ _................._ _................._ _..4###########5.._ _..##0.......1##.._ _..##....X....##.._ _..##.4#####5.##.._ _..##.#0...1#.##.._ _..##.62.*.37.##.._ _..#.....*.....#.._ _..7.....*.....S.._ _........*........_ _........*........_ _..5....6#7....N.._ _..#.....U.....#.._ _..#2.........3#.._ _..######.######.._ _..6#####F#####7.._ _................._ _................._ ___________________ ( 14. Trap/Flip interactions and reflectors It's probably not obvious that inner corners do support you. I'm not sure whether I should have exploited that feature. Fortunately, it should be obvious once the wrong solution is attemped. ) _________________ _4555.......4445_ _6#01.......01#7_ _60...........17_ _62.....X.....37_ _.......#......._ _......3#2......_ _...*..*........_ _...#F##T##F#5.._ _............#.._ _...#T##F##T#7.._ _.....^..^..U..._ _..............._ _44...........55_ _40...........15_ _4237.......6235_ _6777.......6667_ _________________ ( 15. Building a stack against a wall. This level hints that you need four blocks at the bottom. ) ________________ _.............._ _.............._ _.....######5.._ _..........1#.._ _...........#.._ _.......X...#.._ _.....4###..#.._ _.....####..#.._ _......*..*3#.._ _....####T##7.._ _....##........_ _....##.*......_ _....##.#####.._ _....6#...^1#.._ _...........F.._ _........*.3#.._ _..W###T####7.._ _.........U...._ _.............._ ________________ ( 16. Crates as gates. There's a subspace of puzzles based on these component. I was surprised at how many different element types I was able to find. ) 4#####X#########5 #0.1#..1##01#0.## #...F...F...F..1# #2.3#.*3#2*3#..3# ##F###F###F###F## #0^1#0U.#0.1#0.1# #...F...F..>F<..# #2..#.*3#..3#...# ##F###F###F###F## #0.1#..1#0^.#0.1# #2.>F.*.F..>F..3# ##.3#2*.#2.3#..## ##F###F###F###F## #..1#.^1#0^1#..## #...F...F...F..1# #...#..3#23##2.3# 6###############7 ( 17. Oscillating crate, broken corners. I had to have a level with an oscillating crate. The basic puzzle didn't seem challenging enough, so I added a red herring. Sorry. ) ____________N____________ _..........4X5.........._ _......................._ _........4#####5........_ _..6#5..4########..4#7.._ _...6#..6..###..7..#7.._ _....6.............7...._ _...........D..........._ _..........##E.........._ _......................._ _......................._ _...4#F##0...4#####5...._ _...#0^1#....####01##..._ _...#2.............1#..._ _...6#23####....#2.3#..._ _....######7...3##F#7..._ _......................._ _...........*..........._ _..........W##.........._ _......................._ _......................._ _________________________ ( 18. Nudge from a constructed stack. Composing existing puzzle elements is a good way to make new levels. I've limited the amount I do it in t his level set, as it tends to make the levels a bit arbitrary. ) _________________ _..............._ _...........*..._ _.....*...###5.._ _...4##F#...1#.._ _...#0.......F.._ _...#.......3#.._ _...#2....###7.._ _...6###........_ _..............._ _..............._ _..####..###5..._ _..#0......1#..._ _..#<.......T..._ _..#2......3#..._ _..6#F#.#F##7..._ _.....U....^...._ _..............._ _..............._ _.W####.####E..._ _...X.#.#......._ _.....#.#......._ _.....#.#......._ _.....###......._ ( 19. Axis-bias. This level has a strong left-right bias, but actually requires some up-down thinking. ) ____________________________ _.........................._ _.........................._ _..#5........##...#5...WE.._ _..##...4#...##...##......._ _..T....T.....T........##.._ _..#7...##...##...4#...##.._ _.......T.........6#...##.._ _..45...##...##........##<._ _.>##...T....##...4#...##.._ _..##...6#...##....T...67.._ _..##........##...##......._ _.......#5...##L...T...##.._ _.X##...T....##...##...##.._ _..##...##.........T......._ _...T...##...##...6#...##.._ _..##...##...##........##.._ _..##.......>##...##...67.._ _..67...45...##...##......._ _.......##........##...##.._ _..45...##...##...##...##.._ _..6#...#7...##........67.._ _.........................._ _.........................._ ____________________________ ( 20. Introduce one more mechanic, pushing through flips, right at the end of the game. Pushing through trapdoors also works, but I wanted to finish on a new mechanic, so I couldn't have both. ) ........45........... .......4##5.......... .......6##7.......... ................45... ..45...........4##5.. .4##5....4#5...6##7.. .6##7....^^^......... .........^^^......... .........^X^......... ##########.########## ##########.########## ##########.#0.....1## #01#0....#.#2....#.## #...............3#.## #...W#5..6#F##5.#7.## #.............#...3## #.............F...1## #235.4##T##E.##2...## ####.........1###5.## ####..........##0..1# ####2...*.....##2.D.# ##################### message Thanks for helping Annie solve all those levels. message That bi-triangular head-mounted gravity distorter was really giving her a headache. message The End. message Thanks to: Nicole, Stephen, Nick, Ben (x2), Glenn, Jacob, Amy and Colin. (Old level 9. Looks nice but doesn't belong. ______________________ _#5.#####.########.4#_ _67.6..1#.#0.10.1#.67_ _....3..#.#<.....#..._ _#####.3#.#2....3#.4#_ _#0^17.6#.#7....6#21#_ _#..................#_ _#2....#####.4#.42.3#_ _#0....60..7.1#.#####_ _#............#......_ _#2.35.#5.45..#.#####_ _#####.#0.67.6#.60..#_ _......#............#_ _#####.#..4..35....3#_ _#0.17.#7.#####....1#_ _#.................R#_ _#21#5....4#.#5.42.3#_ _#7.#X....1#.#0.#####_ _...#......#.#..0...._ _45.#..32.3#.#2.35.45_ _#7.########.#####.6#_ ______________________ )