Escape the dungeon platformer. V1.6 || #games #tutorials

Instructions: Use the arrow keys or mobile controls to move. Ride the platforms, dodge spikes, jump on platforms over lava!\nComment how many times you died or how fast you completed it. If you complete it without dying then I will check out your projects and maybe follow you. :3\nClick flag multiple times.\n\n

@Stage\n\nwhen flag clicked\nset [do not play sound v] to [0]\nforever\n    if <(Do not play sound) < [1]> then\n        play sound [marshmellothelegend2 v] until done\n    end\nend\n\n@Player \n\nwhen flag clicked\nbroadcast (Start v)\nbroadcast (Main menu v)\n\ndefine Move in steps (steps)\nchange [falling v] by (1)\nrepeat (steps)\n    set [last value v] to (x position)\n    change x by ((speed x) / (steps))\n    Check touching solid\n    if <(touching) > [0]> then\n        Collide X- Slope or wall?\n    end\n    set [last value v] to (y position)\n    change y by ((speed y) / (steps))\n    Check touching solid\n    if <(touching) > [0]> then\n        Collide Y- Ceiling or floor\n    end\nend\n\ndefine Check touching solid\nif <<touching (level v)?> or <touching (platform v)?>> then\n    set [touching v] to [1]\nelse\n    set [touching v] to [0]\nend\n\nwhen I receive [tick-player v]\nMoved -by moving platform\nswitch backdrop to <touching (level v)?>\nControls-up and down\nControls-left and right\nMove in steps (([abs v] of (speed x) ) + ([abs v] of (speed y) ))\nSet costume\n\ndefine Controls-up and down\nif <<<key (up arrow v) pressed?> or <key (w v) pressed?>> or <<mouse down?> and <(mouse y) > (y position)>>> then\n    if <<(wall slide) > [0]> and <(jumping) = [0]>> then\n        start sound [Jump v]\n        set [jumping v] to [1]\n        set [falling v] to [3]\n        set [wall slide v] to [0]\n        turn right (180) degrees\n        set [speed x v] to (((direction) / (90)) * (7))\n        set [long jump v] to [12]\n    end\n    if <<(falling) < [3]> and <(jumping) = [0]>> then\n        start sound [Jump v]\n        set [jumping v] to [1]\n        set [falling v] to [3]\n    end\n    if <<(jumping) > [0]> and <(jumping) < (JUMP DURATION)>> then\n        change [jumping v] by (1)\n        set [speed y v] to (Jump force)\n    end\nelse\n    set [jumping v] to [0]\nend\nchange [speed y v] by (GRAVITY)\nif <(wall slide) > [0]> then\n    Check wall slide\n    if <(speed y) < [0]> then\n        set [speed y v] to ((speed y) * (0.6))\n    end\nend\n\ndefine Controls-left and right\nif <(long jump) > [0]> then\n    change [long jump v] by (-1)\n    stop [this script v]\nend\nset [key x v] to (<<<key (right arrow v) pressed?> or <key (d v) pressed?>> or <<mouse down?> and <(mouse x) > (x position)>>> - <<<key (left arrow v) pressed?> or <key (a v) pressed?>> or <<mouse down?> and <(mouse x) < (x position)>>>)\nif <(KEY X) = [0]> then\n    if <<(falling) > [2]> and <(wall slide) < [1]>> then\n        set [speed x v] to ((speed x) * (0.9))\n        stop [this script v]\n    end\n    if <([abs v] of (speed x) ) < [1]> then\n        set [frame v] to [0]\n        set [speed x v] to [0]\n    else\n        set [frame v] to [0.5]\n    end\nelse\n    change [speed x v] by ((KEY X) * (ACCELERATION))\n    point in direction ((KEY X) * (90))\n    change [frame v] by (1)\nend\nset [speed x v] to ((speed x) * (RESISTANCE))\n\ndefine Reset and begin level\nshow\nset [invulnerable v] to [0]\nset [speed x v] to [0]\nset [speed y v] to [0]\nset [falling v] to [99]\nset [wall slide v] to [0]\nset [long jump v] to [0]\nset [key x v] to [0]\nBegin scene# (SPAWN SCENE) Go to x,y (SPAWN X) (SPAWN Y)\n\nwhen I receive [game loop v]\nset [ghost v] effect to (0)\nforever\n    broadcast (Tick-First v)\n    broadcast (Tick-platform v)\n    broadcast (Tick-player v)\n    broadcast (Tick-last v)\nend\n\nwhen I receive [tick-last v]\nif <(x position) > [235]> then\n    Begin scene# ((SCENE #) + (1)) Go to x,y [-235] []\nend\nif <(x position) < [-235]> then\n    Begin scene# ((SCENE #) - (1)) Go to x,y [235] []\nend\nif <(y position) > [180]> then\n    Begin scene# ((SCENE #) + (100)) Go to x,y [] [-160]\nend\nif <(y position) < [-180]> then\n    Begin scene# ((SCENE #) - (100)) Go to x,y [] [180]\nend\nif <touching (danger v)?> then\n    broadcast (Lose life v)\nend\n\ndefine Begin scene# (scene#) Go to x,y (x) (y)\nset [scene # v] to (scene#)\nif <(x) > []> then\n    set x to (x)\nend\nif <(y) > []> then\n    set y to (y)\nend\nbroadcast (About to change scene v)\nbroadcast (Change scene v)\nstop [other scripts in sprite v]\nwait (0) seconds\nswitch costume to (hitbox v2 v)\nset rotation style [don't rotate v]\nif <(x) > []> then\n    Fix collision in direction [90]\nelse\n    Fix collision in direction [0]\nend\nSet costume\nbroadcast (Game loop v)\n\ndefine Fix collision in direction (dir)\nset [temp v] to (direction)\nset [distance v] to [1]\npoint in direction (dir)\nrepeat (128)\n    Check touching solid\n    if <(touching) < [1]> then\n        point in direction (temp)\n        stop [this script v]\n    end\n    move (distance) steps\n    turn right (180) degrees\n    change [distance v] by (1)\nend\n\nwhen I receive [tick-first v]\nswitch costume to (hitbox v2 v)\nset rotation style [don't rotate v]\nset [platform dx v] to []\nset [platform dy v] to []\n\ndefine Set costume\nset rotation style [left-right v]\nif <(wall slide) > [0]> then\n    switch costume to (hangon01 v)\n    stop [this script v]\nend\nif <(falling) > [1]> then\n    if <(speed y) > [0]> then\n        switch costume to (jump01 v)\n    else\n        switch costume to (run_j2 v)\n    end\n    stop [this script v]\nend\nif <(frame) > [0]> then\n    switch costume to ((1) + ([floor v] of ((frame) mod (16)) ))\nelse\n    switch costume to (hit angle 0 v)\n    repeat (5)\n        Check touching solid\n        if <(touching) < [1]> then\n            switch costume to ((costume [number v]) + (5))\n            stop [this script v]\n        end\n        next costume\n    end\n    switch costume to (stand v)\nend\n\ndefine Collide X- Slope or wall?\nCheck wall slide\nchange y by (1)\nCheck touching solid\nif <(touching) > [0]> then\n    change y by (1)\n    Check touching solid\n    if <(touching) > [0]> then\n        change y by (-2)\n        set x to (last value)\n        set [speed x v] to [0]\n        stop [this script v]\n    end\n    set [speed x v] to ((speed x) * (0.8))\nend\nset [speed x v] to ((speed x) * (0.95))\n\ndefine Collide Y- Ceiling or floor\nset y to (last value)\nif <(speed y) > [0]> then\n    set [speed y v] to [0]\n    stop [this script v]\nend\nif <(falling) > [0]> then\n    set [falling v] to [0]\n    Slip\nend\nset [speed y v] to ((speed y) * (0.8))\nSlip\n\ndefine Slip\nchange y by (-2)\nchange x by (1)\nCheck touching solid\nif <(touching) < [1]> then\n    set [falling v] to [9]\n    change [speed x v] by (1)\nend\nchange x by (-2)\nCheck touching solid\nif <(touching) < [1]> then\n    set [falling v] to [9]\n    change [speed x v] by (-1)\nend\nchange y by (2)\nchange x by (1)\n\ndefine Check wall slide\nif <(falling) < [2]> then\n    set [wall slide v] to [0]\n    stop [this script v]\nend\nswitch costume to (hitbox wallslide v)\nset rotation style [left-right v]\nCheck touching solid\nset [wall slide v] to (touching)\nswitch costume to (hitbox v2 v)\nset rotation style [don't rotate v]\n\nwhen I receive [lose life v]\nset [invulnerable v] to [1]\nstop [other scripts in sprite v]\nstart sound [Oops v]\nrepeat (10)\n    change [ghost v] effect by (10)\nend\nhide\nwait (0.5) seconds\nchange [lives v] by (-1)\nif <(LIVES) > [0]> then\n    Reset and begin level\nelse\n    broadcast (Game over v)\nend\n\ndefine Moved -by moving platform\nchange x by (PLATFORM DX)\nchange y by (PLATFORM DY)\nCheck touching solid\nif <(touching) > [0]> then\n    Find Closest Space to (x position) (y position) Max [16]\n    if <(touching) > [0]> then\n        broadcast (Lose life v)\n    end\nend\n\ndefine Find Closest Space to (x) (y) Max (max)\nset [temp v] to (direction)\nset [distance v] to [1]\npoint in direction (0)\nrepeat (max)\n    repeat (16)\n        go to x: (x) y: (y)\n        move (distance) steps\n        Check touching solid\n        if <(touching) < [1]> then\n            point in direction (temp)\n            stop [this script v]\n        end\n        turn right (22.5) degrees\n    end\n    change [distance v] by (1)\nend\ngo to x: (x) y: (y)\npoint in direction (temp)\n\nwhen I receive [warp v]\nReset and begin level\n\nwhen I receive [start game v]\nhide variable [fish v]\nset [jump duration v] to [6]\nset [gravity v] to [-1.5]\nset [jump force v] to [12]\nset [acceleration v] to [1.5]\nset [resistance v] to [0.8]\nbroadcast (Reset game v) and wait\nbroadcast (Setup v) and wait\nset [lives v] to [3]\nset [spawn scene v] to [101]\nset [spawn x v] to [-200]\nset [spawn y v] to [0]\nReset and begin level\n\nwhen I receive [player-bounce v]\nset [speed y v] to [10]\n\nwhen flag clicked\nhide variable [☁ who saw this? v]\nchange [☁ who saw this? v] by (1)\n\n@Danger\n\nwhen I receive [change scene v]\ngo to [back v] layer\nswitch costume to (blank v)\nswitch costume to (join [Scene] (SCENE #))\nif <(SCENE #) < [100]> then\n    forever\n        change y by (((3) * ([sin v] of ((timer) * (100)) )) / (3))\n    end\nelse\n    go to x: (0) y: (0)\nend\n\nwhen I receive [start v]\ngo to x: (0) y: (0)\ngo to [back v] layer\n\n@Platform\n\nwhen I receive [change scene v]\nhide\nif <(SCENE #) = [101]> then\n    Door at [32] [82] Key [Key 1]\nend\nif <(SCENE #) = [102]> then\n    Door at [17] [-25] Key [Key 2]\nend\nif <(SCENE #) = [201]> then\n    show\n    Animate \nend\nif <(SCENE #) = [202]> then\n    show\n    Animate 2\nend\n\ndefine Tick (new x) (new y)\nif <(new y) > (last y)> then\n    change y by (1)\nelse\n    set y to ((last y) + (1))\nend\nif <touching (player  v)?> then\n    set [platform dx v] to ((new x) - (last x))\n    set [platform dy v] to ((new y) - (last y))\nend\ngo to x: (new x) y: (new y)\n\nwhen I receive [tick-platform v]\nTick (x position) (y position)\nset [last x v] to (x position)\nset [last y v] to (y position)\n\ndefine Door at (x) (y) Key (key name)\ngo to [back v] layer\nshow\nswitch costume to (key name)\ngo to x: (x) y: (y)\nforever\n    wait until <touching (player  v)?>\n    if <[collected v] contains (key name)?> then\n        start sound [Buzz Whir v]\n        repeat (24)\n            change y by (4)\n        end\n        wait (1) seconds\n        start sound [Buzz Whir v]\n        repeat (24)\n            change y by (-4)\n        end\n        start sound [Crunch v]\n    else\n        start sound [Low Squeak v]\n    end\n    wait until <not <touching (player  v)?>>\nend\n\ndefine Animate \nswitch costume to (costume1 v)\npoint in direction (90)\ngo to x: (95) y: (-180)\nforever\n    show\n    wait (2) seconds\n    glide (1) secs to x: (95) y: (-97)\n    wait (2) seconds\n    glide (1) secs to x: (-133) y: (-97)\n    wait (2) seconds\n    glide (1) secs to x: (-136) y: (77)\n    wait (2) seconds\n    glide (2) secs to x: (115) y: (77)\n    wait (2) seconds\n    glide (1) secs to x: (115) y: (17)\n    wait (0) seconds\n    glide (1) secs to x: (150) y: (17)\n    wait (2) seconds\n    go to x: (95) y: (-180)\nend\n\ndefine Animate 2\nswitch costume to (costume1 v)\npoint in direction (90)\ngo to x: (-207) y: (20)\nforever\n    go to x: (-200) y: (20)\n    wait (1) seconds\n    glide (1) secs to x: (-90) y: (20)\n    wait (2) seconds\n    glide (1) secs to x: (-90) y: (-133)\n    wait (2) seconds\n    glide (1) secs to x: (50) y: (-133)\n    wait (2) seconds\n    glide (1) secs to x: (50) y: (94)\n    wait (2) seconds\n    glide (1) secs to x: (108) y: (94)\n    wait (2) seconds\nend\n\n@Level\n\nwhen I receive [change scene v]\nswitch costume to (join [Scene] (SCENE #))\n\ndefine Stamp shadow\nset [brightness v] effect to (-100)\nset [ghost v] effect to (85)\nchange y by (-5)\nchange x by (-5)\nstamp\nchange y by (5)\nchange x by (5)\nclear graphic effects\n\ndefine Stamp outline\nset rotation style [don't rotate v]\nset [brightness v] effect to (-100)\nrepeat (8)\n    move (3) steps\n    stamp\n    move (-3) steps\n    turn right (45) degrees\nend\nclear graphic effects\n\nwhen I receive [change scene v]\nforever\n    erase all\n    Stamp outline\n    Stamp shadow\nend\n\nwhen I receive [start v]\ngo to x: (0) y: (0)\ngo to [back v] layer\n\n@Collectibles\n\nwhen I receive [change scene v]\nif <(SCENE #) = (My scene)> then\n    show\nelse\n    hide\nend\n\nwhen I start as a clone\nrepeat until <touching (player  v)?>\n    change y by ((0.5) * ([sin v] of (Frame) ))\n    change [frame v] by (5)\nend\nset [my scene v] to []\nif <(costume [name v]) = [Fish]> then\n    start sound [Chomp v]\n    change [fish v] by (1)\nelse\n    if <(costume [name v]) = [Big fish]> then\n        repeat (3)\n            play sound [Chomp v] until done\n        end\n        change [fish v] by (10)\n        broadcast (You win!!! v)\n    else\n        if <(costume [name v]) = [Key 2]> then\n            broadcast (Warp v)\n            start sound [Wand v]\n            add (costume [name v]) to [collected v]\n        else\n            if <(costume [name v]) = [Green Flag]> then\n                start sound [YEET v]\n                set [spawn scene v] to (SCENE #)\n                set [spawn x v] to ([x position v] of [player  v])\n                set [spawn y v] to ([y position v] of [player  v])\n            else\n                start sound [Wand v]\n                add (costume [name v]) to [collected v]\n            end\n        end\n    end\nend\nhide\n\nwhen I receive [setup v]\ndelete all of [collected v]\nset [fish v] to [0]\nhide\nPlace [Fish] Scene [101] Xy [-185] [70]\nPlace [Fish] Scene [1] Xy [-160] [-100]\nPlace [Fish] Scene [2] Xy [-173] [58]\nPlace [Key 1] Scene [2] Xy [173] [58]\nPlace [Fish] Scene [201] Xy [28] [-40]\nPlace [Key 2] Scene [202] Xy [180] [-27]\nPlace [Big fish] Scene [103] Xy [106] [-20]\nPlace [Green Flag] Scene [201] Xy [231] [56]\n\ndefine Place (costume name) Scene (scene) Xy (x) (y)\nset [my scene v] to (scene)\nswitch costume to (costume name)\ngo to x: (x) y: (y)\ncreate clone of (_myself_ v)\nset [my scene v] to []\n\nwhen I receive [reset game v]\ndelete this clone\n\n@You win!!!\n\nwhen I receive [start v]\nhide\nwait until <(SCENE #) = [103]>\nstop all sounds\nshow\ngo to x: (0) y: (0)\npoint in direction (90)\nforever\n    play sound [Nyan v] until done\nend\n\n@Thumbnail \n\nwhen I receive [start v]\nhide\n\n@Lives\n\nwhen I receive [start v]\ngo to x: (167) y: (160)\nforever\n    switch costume to (LIVES)\nend\n\n@Splash screen\n\nwhen I receive [game over v]\nset [do not play sound v] to [1]\nstop all sounds\nstart sound [Lose v]\nswitch costume to (game over dudes v)\ngo to x: (0) y: (0)\ngo to [front v] layer\nshow\nbroadcast (Main menu v)\nset [do not play sound v] to [0]\n\nwhen I receive [start v]\nswitch costume to (main menu v)\ngo to x: (0) y: (0)\ngo to [front v] layer\nshow\n\nwhen I receive [start game v]\nshow variable [fish v]\nhide\n\n@Main menu\n\nwhen I receive [start v]\nhide\n\nwhen I receive [main menu v]\nwait (0.1) seconds\ngo to [front v] layer\nshow\ngo to x: (0) y: (-78)\nset size to (10) %\nforever\n    if <touching (mouse-pointer v)?> then\n        change size by ((0.2) * ((110) - (size)))\n    else\n        change size by ((0.2) * ((100) - (size)))\n    end\nend\n\nwhen this sprite clicked\nhide\nbroadcast (Start game v)\n\n@Score\n\nwhen I receive [start v]\ngo to x: (-204) y: (147)\nforever\n    switch costume to (join [Glow-] (Fish))\nend\n\n@Enemy \n\nwhen flag clicked\nset size to (60) %\nset rotation style [left-right v]\nhide\n\nwhen I receive [change scene v]\nif <(SCENE #) = [101]> then\n    if <([x position v] of [player  v]) < [0]> then\n        Spawn [Red] At [123] [-115] Dir [-90]\n    else\n        Spawn [Red] At [100] [-115] Dir [90]\n    end\nend\nif <(SCENE #) = [1]> then\n    Spawn [Red] At [147] [-95] Dir [-90]\nend\nif <(SCENE #) = [2]> then\n    Spawn [Red] At [-74] [59] Dir [90]\nend\nif <(SCENE #) = [201]> then\n    Spawn [Red] At [39] [-23] Dir [90]\nend\nif <(SCENE #) = [102]> then\n    Spawn [Red] At [149] [-46] Dir [90]\nend\n\nwhen I start as a clone\nshow\nset [speed y v] to [0]\nset [frame v] to [0]\nforever\n    switch costume to (red1 v)\n    set rotation style [don't rotate v]\n    Move left or right\n    Move down\n    change [frame v] by (0.33)\n    switch costume to ((1) + ([floor v] of ((frame) mod (4)) ))\n    set rotation style [left-right v]\n    if <<(INVULNERABLE) = [0]> and <touching (player  v)?>> then\n        Touching player\n    end\nend\n\nwhen I receive [about to change scene v]\ndelete this clone\n\ndefine Move down\nchange [speed y v] by (-1)\nchange y by (speed y)\nrepeat until <not <touching (level v)?>>\n    change y by (1)\n    set [speed y v] to [0]\nend\n\ndefine Move left or right\nmove (2) steps\nrepeat (4)\n    if <not <<<touching (level v)?> or <touching (_edge_ v)?>> or <<touching (enemy fence v)?> or <touching (platform v)?>>>> then\n        stop [this script v]\n    end\n    change y by (1)\nend\nchange y by (-4)\nmove (-2) steps\nturn right (180) degrees\n\ndefine Touching player\nif <([speed y v] of [player  v]) < [-3]> then\n    broadcast (Player-bounce v)\n    start sound [Squish Pop v]\n    switch costume to (red squish v)\n    wait (0.3) seconds\n    repeat (10)\n        change [ghost v] effect by (10)\n    end\n    delete this clone\nend\nbroadcast (Lose life v)\n\ndefine Spawn (type) At (x) (y) Dir (dir)\ngo to x: (x) y: (y)\npoint in direction (dir)\ncreate clone of (_myself_ v)\n\n@Enemy fence\n\nwhen I receive [change scene v]\ngo to [back v] layer\nswitch costume to (blank v)\nswitch costume to (join [Scene] (SCENE #))\n\nwhen I receive [start v]\ngo to x: (0) y: (0)\ngo to [back v] layer\nset [ghost v] effect to (100)\n\n