Moon Platformer

Instructions: 1000 VIEWS THANK YOU\n\n[ INSTRUCTIONS ]\nArrow keys or WASD to move.\nSpikes and lava hurt you.\nI'm going to try to respond to most of the comments.\n\n[ CHANGELOG ]\nv1.3 - Changed variables into text, accidentally deleted the background so I made a new one\nv1.2 - Changed the World Record variable so I can't keep breaking it to show dominance\nv1.1 - Added Score and World Record, craters in map, and easter egg above last level\nv1.0 - Original release wasn't that important

@Stage\n\nwhen flag clicked\nhide variable [timer v]\nset [timer v] to [0]\nforever\n    set [timer v] to (round (timer))\n    if <(SCENE #) = [109]> then\n        if <(TIMER) < (☁ World Record)> then\n            set [☁ world record v] to (TIMER)\n        end\n        stop [this script v]\n    end\nend\n\n@blank\n\nwhen flag clicked\nset [ghost v] effect to (0)\ngo to [front v] layer\nshow\nwait (1) seconds\nrepeat (40)\n    change [ghost v] effect by (2.5)\nend\nforever\n    play sound [Milky Ways \[Redux\] v] until done\nend\n\n@Player\n\nwhen I receive [lose life v]\nstop [other scripts in sprite v]\nrepeat (10)\n    change [ghost v] effect by (10)\nend\nwait (1.5) seconds\nReset and Begin Level\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\nwhen flag clicked\nset [acceleration v] to [1.5]\nset [resistance v] to [0.8]\nset [gravity v] to [-1.05]\nset [jump force v] to [12]\nset [jump duration v] to [6]\nset [checkpoint v] to [1]\nReset and Begin Level\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\nControls - Up and Down\nControls - Left and Right\nif <touching (checkpoint v)?> then\n    set [checkpoint v] to (SCENE #)\nend\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?>> then\n    if <<(wall slide) > [0]> and <(jumping) = [0]>> then\n        set [jumping v] to [1]\n        set [falling v] to [3]\n        set [speed y v] to (JUMP FORCE)\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        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 Can 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 (d v) pressed?> or <key (right arrow v) pressed?>> - <<key (a v) pressed?> or <key (left arrow v) pressed?>>)\nif <(KEY X) = [0]> then\n    if <<(falling) > [2]> and <(wall slide) < [0]>> then\n        set [speed x v] to ((speed x) * (0.98))\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        change [frame v] by (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\nset [speed x v] to [0]\nset [speed y v] to [0]\nset [falling v] to [99]\nset [long jump v] to [0]\nset [wall slide v] to [0]\nset [jumping v] to [0]\npoint in direction (90)\nBegin scene # (CHECKPOINT) go to x, y: [-123] [30]\n\nwhen I receive [game loop v]\nset [ghost v] effect to (0)\nforever\n    broadcast (Tick - First v)\n    broadcast (Tick - Platforms 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]\n    Fix Collision in Direction [90]\nend\nif <(y position) < [-180]> then\n    Begin scene # ((SCENE #) - (100)) go to x, y: [] [180]\nend\nif <<touching (dangerlava v)?> or <touching (dangerspikes 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 (Change Scene v)\nstop [other scripts in sprite v]\nwait (0) seconds\nswitch costume to (hitbox v)\nset rotation style [don't rotate v]\nif <(x) > []> then\n    Fix Collision in Direction [0]\nelse\n    Fix Collision in Direction [90]\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 (1024)\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 [0]\nset [platform dy v] to [0]\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 Can 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))\nSlip\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))\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)\n    stop [this script v]\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)\n    stop [this script v]\nend\nchange y by (2)\nchange x by (1)\n\ndefine Check Can 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\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 [8]\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\n@Level\n\nwhen flag clicked\nshow\ngo to x: (0) y: (0)\n\nwhen I receive [change scene v]\nswitch costume to (join [Scene] (SCENE #))\n\nset [timer v] to (round (timer))\n\n@DangerSpikes\n\nwhen flag clicked\nshow\ngo to x: (0) y: (0)\ngo to [back v] layer\n\nwhen I receive [change scene v]\nswitch costume to (blank v)\nswitch costume to (join [Scene] (SCENE #))\n\n@DangerLava\n\nwhen flag clicked\nshow\ngo to x: (0) y: (0)\ngo to [back v] layer\n\nwhen I receive [change scene v]\nswitch costume to (blank v)\nswitch costume to (join [Scene] (SCENE #))\nforever\n    set y to ((3) * ([sin v] of ((timer) * (180)) ))\nend\n\n@Platform\n\nwhen I receive [change scene v]\nswitch costume to (blank v)\nswitch costume to (join [Scene] (SCENE #))\nif <(SCENE #) = [2]> then\n    Animate Scene 2\nend\nif <(SCENE #) = [7]> then\n    Animate Scene 7\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 - platforms v]\nTick (x position) (y position)\nset [last x v] to (x position)\nset [last y v] to (y position)\n\ndefine Animate Scene 2\ngo to x: (51) y: (-113)\nforever\n    glide (1.5) secs to x: (88) y: (27)\n    wait (1) seconds\n    glide (1.5) secs to x: (51) y: (-113)\n    wait (1) seconds\nend\n\ngo to [back v] layer\n\ndefine Animate Scene 7\ngo to x: (-13) y: (91)\nforever\n    glide (2.5) secs to x: (-13) y: (-130)\n    wait (1) seconds\n    glide (2.5) secs to x: (-13) y: (91)\n    wait (1) seconds\nend\n\n@Text\n\nwhen I receive [change scene v]\nswitch costume to (blank v)\nswitch costume to (join [Scene] (SCENE #))\n\n@Checkpoint\n\nwhen I receive [change scene v]\nswitch costume to (blank v)\nswitch costume to (join [Scene] (SCENE #))\n\n@ScoreFirst\n\nwhen I receive [change scene v]\nhide\nif <(SCENE #) = [109]> then\n    show\n    switch costume to (blank v)\n    switch costume to (letter (1) of (TIMER))\nend\n\nwhen flag clicked\nhide\n\n@ScoreSecond\n\nwhen I receive [change scene v]\nhide\nif <(SCENE #) = [109]> then\n    show\n    switch costume to (blank v)\n    switch costume to (letter (2) of (TIMER))\nend\n\nwhen flag clicked\nhide\n\n@ScoreThird\n\nwhen I receive [change scene v]\nhide\nif <(SCENE #) = [109]> then\n    show\n    switch costume to (blank v)\n    switch costume to (letter (3) of (TIMER))\nend\n\nwhen flag clicked\nhide\n\n@ScoreFourth\n\nwhen I receive [change scene v]\nhide\nif <(SCENE #) = [109]> then\n    show\n    switch costume to (blank v)\n    switch costume to (letter (3) of (TIMER))\nend\n\nwhen flag clicked\nhide\n\n@WorldRecord1\n\nwhen I receive [change scene v]\nhide\nif <(SCENE #) = [109]> then\n    show\n    switch costume to (blank v)\n    switch costume to (letter (1) of (☁ World Record))\nend\n\nwhen flag clicked\nhide\n\n@WorldRecord2\n\nwhen I receive [change scene v]\nhide\nif <(SCENE #) = [109]> then\n    show\n    switch costume to (blank v)\n    switch costume to (letter (2) of (☁ World Record))\nend\n\nwhen flag clicked\nhide\n\n@SpinningBG\n\nwhen flag clicked\nforever\n    turn right (0.1) degrees\n    go to [back v] layer\nend\n\n