A mixed-up platformer - April Fools special #games #platformer

Instructions: Hello, this is a platformer! Use arrow keys, WASD, or your finger (mobile) to move. But the usual elements in a platformer don't behave the way they usually do here...

@Stage\n\n@Player\n\ndefine Reset\nset [score v] to [0]\nset [x v] to [0]\nset [y v] to [250]\nset [x vel v] to [0]\nset [y vel v] to [0]\nset [scroll x v] to (x)\nset [scroll y v] to (y)\nset [max speed v] to [4]\nset [jump accel v] to [10]\nset [trampoline jump accel v] to [25]\nset [sky time v] to [0]\nset [max free fall vel v] to [-15]\nset [jump accel v] to [15]\nset [gravity v] to [-1]\nshow\nclear graphic effects\nset size to (100) %\nswitch costume to (right v)\n\nwhen I receive [start v]\nReset\nforever\n    Tick\nend\n\ndefine Tick\nswitch costume to (player v)\ncreate clone of (_myself_ v)\nNormal controls\nchange y by (-2)\nif <touching color (#8c8c8c)?> then\n    start sound [Drum v]\n    set [y vel v] to (trampoline jump accel)\nend\nif <touching color (#ffc474)?> then\n    set [frict multiplier v] to [0.9]\n    set [max speed v] to [8]\nelse\n    set [frict multiplier v] to [0.65]\n    set [max speed v] to [4]\nend\nif <touching color (#7e6bea)?> then\n    start sound [Beat Box1 v]\n    set [x v] to [0]\n    set [y v] to [0]\nend\nif <touching color (#deaaa0)?> then\n    set [jump accel v] to [10]\n    set [frict multiplier v] to [0.5]\n    set [max free fall vel v] to [-3]\nelse\n    set [jump accel v] to [15]\n    set [max free fall vel v] to [-15]\nend\nchange y by (2)\nchange [x v] by (x vel)\nchange [y v] by (y vel)\nset [scroll x v] to (round (x))\nif <(Scroll x) < [0]> then\n    set [scroll x v] to [0]\nend\nif <(Scroll y) > [-150]> then\n    set [scroll y v] to (round ((y) / (4)))\nend\nbroadcast (Tick v)\nPosition sprite\nchange [sky time v] by (1)\nchange y by (-1)\nif <touching (ground v)?> then\n    set [sky time v] to [0]\nend\nchange y by (1)\n\ndefine Position sprite\ngo to x: ((x) - (Scroll x)) y: ((y) - (Scroll y))\n\ndefine Normal controls\nif <(y vel) > (max free fall vel)> then\n    change [y vel v] by (gravity)\nend\nMove x | speed (max speed) friction (frict multiplier)\nJump height (jump accel)\nslope [8]\n\ndefine Move x | speed (speed) friction (friction)\nchange [x vel v] by ((<<<<key (right arrow v) pressed?> or <key (d v) pressed?>> or <<mouse down?> and <(mouse x) > (x position)>>> and <(Don't move) = [false]>> - <<<<key (a v) pressed?> or <key (left arrow v) pressed?>> or <<mouse down?> and <(mouse x) < (x position)>>> and <(Don't move) = [false]>>) * (speed))\nset [x vel v] to ((x vel) * (friction))\nchange x by (x vel)\n\ndefine Jump height (height)\nif <<<<<key (w v) pressed?> or <key (up arrow v) pressed?>> or <<mouse down?> and <(mouse y) > (x position)>>> and <(Don't move) = [false]>> and <(sky time) < [2]>> then\n    set [y vel v] to (height)\nend\n\ndefine slope (slope)\nset [slope v] to [0]\nrepeat until <<(slope) = (slope)> or <not <touching (ground v)?>>>\n    change y by (1)\n    change [slope v] by (1)\nend\nif <touching (ground v)?> then\n    change y by ((slope) * (-1))\n    repeat until <not <touching (ground v)?>>\n        change x by ((x vel) * (-1))\n    end\n    if <<<<key (up arrow v) pressed?> or <key (w v) pressed?>> or <<mouse down?> and <(mouse y) > (x position)>>> and <(Don't move) = [false]>> then\n        set [y vel v] to (jump accel)\n        if <(x vel) < [0]> then\n            set [x vel v] to [16]\n        else\n            set [x vel v] to [-16]\n        end\n    else\n        set [x vel v] to [0]\n    end\nend\nchange y by (y vel)\nif <touching (ground v)?> then\n    repeat until <not <touching (ground v)?>>\n        change y by ((y vel) * (-1))\n    end\n    set [y vel v] to [0]\nend\n\nwhen I receive [green flag v]\nset [don't move v] to [false]\nhide\nbroadcast (Start v)\n\nset [x v] to [3452]\nset [y v] to [50]\n\nwhen I start as a clone\nswitch costume to (no circle v)\ngo to [back v] layer\ngo [forward v] (1) layers\nrepeat (20)\n    change [ghost v] effect by (5)\n    change [color v] effect by (5)\n    change size by (-5)\nend\ndelete this clone\n\n@Ground\n\nwhen I receive [start v]\nbroadcast (Say loading v)\nswitch costume to (1 v)\nrepeat (15)\n    Make clone | distance x [480] y [0]\nend\nbroadcast (Clear say v)\n\ndefine Make clone | distance x (x) y (y)\ncreate clone of (_myself_ v)\nchange [x v] by (x)\nchange [y v] by (y)\nnext costume\n\ndefine Position sprite\ngo to x: ((x) - (Scroll x)) y: ((y) - (Scroll y))\nif <<((x) - (Scroll x)) = (x position)> and <((y) - (Scroll y)) = (y position)>> then\n    show\nelse\n    hide\nend\n\nwhen I receive [tick v]\nPosition sprite\n\nwhen flag clicked\nbroadcast (green flag v)\n\nwhen I receive [green flag v]\nset [x v] to [0]\nset [y v] to [0]\nhide\n\n@other scrolling\n\nwhen I receive [start v]\nswitch costume to (1 v)\nrepeat (8)\n    Make clone | distance x [480] y [0]\nend\n\ndefine Make clone | distance x (x) y (y)\ncreate clone of (_myself_ v)\nchange [x v] by (x)\nchange [y v] by (y)\nnext costume\n\ndefine Position sprite\ngo to x: ((x) - (Scroll x)) y: ((y) - (Scroll y))\nif <<((x) - (Scroll x)) = (x position)> and <((y) - (Scroll y)) = (y position)>> then\n    show\nelse\n    hide\nend\n\nwhen I receive [tick v]\nPosition sprite\n\nwhen I receive [green flag v]\nset [x v] to [0]\nset [y v] to [0]\nhide\n\n@collectables\n\nwhen I receive [start v]\nset [score v] to [1]\nswitch costume to (empty v)\nMake collectable | x: [-100] y: [-60]\nMake collectable | x: [220] y: [120]\nMake collectable | x: [220] y: [160]\nMake collectable | x: [220] y: [200]\nMake collectable | x: [525] y: [75]\nMake collectable | x: [700] y: [-110]\nMake collectable | x: [900] y: [50]\nMake collectable | x: [900] y: [100]\nMake collectable | x: [900] y: [150]\nMake collectable | x: [900] y: [200]\nMake collectable | x: [1100] y: [300]\nMake collectable | x: [1800] y: [185]\nMake collectable | x: [1860] y: [185]\nMake collectable | x: [1920] y: [185]\nMake collectable | x: [1960] y: [185]\nMake collectable | x: [2910] y: [60]\nMake collectable | x: [3065] y: [60]\nMake collectable | x: [2500] y: [225]\nMake collectable | x: [2750] y: [175]\nMake collectable | x: [2850] y: [125]\nMake collectable | x: [3475] y: [100]\nMake collectable | x: [3680] y: [150]\nMake collectable | x: [3680] y: [200]\nMake collectable | x: [3800] y: [-10]\nMake collectable | x: [3880] y: [220]\n\ndefine Make collectable | x: (x) y: (y)\nswitch costume to (collectable v)\ncreate clone of (_myself_ v)\nset [this collectable collected v] to [false]\nset [x v] to (x)\nset [y v] to (y)\n\ndefine Position sprite\ngo to x: ((x) - (Scroll x)) y: ((y) - (Scroll y))\nif <<((x) - (Scroll x)) = (x position)> and <((y) - (Scroll y)) = (y position)>> then\n    show\nelse\n    hide\nend\nif <touching (player v)?> then\n    start sound [Collect v]\n    change [score v] by (1)\n    set [this collectable collected v] to [true]\n    hide\nend\n\nwhen I receive [tick v]\nif <(This collectable collected) = [false]> then\n    Position sprite\nend\n\nwhen I receive [green flag v]\nset [x v] to [0]\nset [y v] to [0]\nhide\n\n@Background\n\nwhen I receive [green flag v]\nset [x v] to [0]\nset [y v] to [0]\nhide\n\ndefine Make clone | distance x (x) y (y)\ncreate clone of (_myself_ v)\nchange [x v] by (x)\nchange [y v] by (y)\n\nwhen I receive [start v]\nbroadcast (Say loading v)\nrepeat (24)\n    Make clone | distance x [480] y [0]\nend\nbroadcast (Clear say v)\n\ndefine Position sprite\ngo to x: ((x) - ((Scroll x) / (5))) y: ((y) - ((Scroll y) / (20)))\nif <<((x) - ((Scroll x) / (5))) = (x position)> and <((y) - ((Scroll y) / (20))) = (y position)>> then\n    show\nelse\n    hide\nend\n\nwhen I receive [tick v]\nPosition sprite\n\n@Thumbnail\n\nwhen [timer v] > (0.1)\nshow\n\nwhen flag clicked\nhide\nbroadcast (unmute v)\nforever\n    play sound [Reflections v] until done\nend\n\nwhen I receive [unmute v]\nset volume to (100) %\n\nwhen I receive [mute v]\nset volume to (0) %\n\nwhen flag clicked\nforever\n    reset timer\nend\n\n@Text\n\nwhen flag clicked\nshow\ngo to x: (-240) y: (140)\nset [muted v] to [false]\n\nwhen I receive [clear say v]\nsay [] for (0.01) seconds\n\nwhen [r v] key pressed\nbroadcast (Reset v)\n\nwhen I receive [made it up v]\nsay [You made it up the tower!]\n\nwhen [m v] key pressed\nif <(muted) = [true]> then\n    set [muted v] to [false]\n    broadcast (unmute v)\nelse\n    set [muted v] to [true]\n    broadcast (mute v)\nend\n\nwhen I receive [say loading v]\nsay [Loading world...]\n\n@Mute button\n\nwhen this sprite clicked\nset [don't move v] to [1]\nif <(muted) = [true]> then\n    broadcast (unmute v)\nelse\n    broadcast (mute v)\nend\nset [don't move v] to [0]\n\nwhen flag clicked\nset [muted v] to [false]\nforever\n    if <touching (mouse-pointer v)?> then\n        switch costume to (join (costume [name v]) [-hover])\n    else\n        if <(muted) = [true]> then\n            switch costume to (muted v)\n        else\n            switch costume to (unmuted v)\n        end\n    end\nend\n\nwhen I receive [unmute v]\nset [muted v] to [false]\nswitch costume to (unmuted v)\n\nwhen I receive [mute v]\nset [muted v] to [true]\nswitch costume to (muted v)\n\n@Reset button\n\nwhen this sprite clicked\nbroadcast (Reset v)\n\nwhen flag clicked\nforever\n    if <not <<mouse down?> and <touching (mouse-pointer v)?>>> then\n        switch costume to (normal v)\n    end\nend\n\nwhen I receive [reset v]\nset [don't move v] to [true]\nswitch costume to (hold v)\nwait (2) seconds\nif <<mouse down?> and <touching (mouse-pointer v)?>> then\n    broadcast (green flag v)\nend\nset [don't move v] to [false]\n\n@Score\n\nwhen flag clicked\nforever\n    switch costume to (score)\nend\n\n