☁ Cloud Multiplayer 3D Platformer
@Stage\n\nwhen flag clicked\nforever\n    play sound [The face of innocence v] until done\nend\n\n@3D\n\ndefine Sort Lists\nset [passes v] to [0]\nset [switches v] to [0]\nrepeat until <<(Passes) > [0]> and <(Switches) = [0]>>\n    set [list_item v] to [0]\n    change [passes v] by (1)\n    set [switches v] to [0]\n    repeat ((length of [block distances v]) - (1))\n        change [list_item v] by (1)\n        if <(item ((List_Item) + (1)) of [block distances v]) > (item (List_Item) of [block distances v])> then\n            set [value v] to (item ((List_Item) + (1)) of [block distances v])\n            replace item ((List_Item) + (1)) of [block distances v] with (item (List_Item) of [block distances v])\n            replace item (List_Item) of [block distances v] with (value)\n            set [value v] to (item ((List_Item) + (1)) of [cube y pos v])\n            replace item ((List_Item) + (1)) of [cube y pos v] with (item (List_Item) of [cube y pos v])\n            replace item (List_Item) of [cube y pos v] with (value)\n            set [value v] to (item ((List_Item) + (1)) of [cube x pos v])\n            replace item ((List_Item) + (1)) of [cube x pos v] with (item (List_Item) of [cube x pos v])\n            replace item (List_Item) of [cube x pos v] with (value)\n            set [value v] to (item ((List_Item) + (1)) of [cube z pos v])\n            replace item ((List_Item) + (1)) of [cube z pos v] with (item (List_Item) of [cube z pos v])\n            replace item (List_Item) of [cube z pos v] with (value)\n            set [value v] to (item ((List_Item) + (1)) of [platform type v])\n            replace item ((List_Item) + (1)) of [platform type v] with (item (List_Item) of [platform type v])\n            replace item (List_Item) of [platform type v] with (value)\n            change [switches v] by (1)\n        end\n    end\nend\n\ndefine Distance\ndelete all of [block distances v]\nset [iii v] to [0]\nrepeat (length of [cube x pos v])\n    change [iii v] by (1)\n    add (round ([sqrt v] of ((((cam z) - (item (iii) of [cube z pos v])) * ((cam z) - (item (iii) of [cube z pos v]))) + ((((cam y) - (item (iii) of [cube y pos v])) * ((cam y) - (item (iii) of [cube y pos v]))) + (((cam x) - (item (iii) of [cube x pos v])) * ((cam x) - (item (iii) of [cube x pos v]))))) )) to [block distances v]\nend\n\ndefine Set Point 1: (x1) (y1) (z1)\nset [x1 v] to (x1)\nset [y1 v] to (y1)\nset [z1 v] to (z1)\n\ndefine Set Point 2: (x2) (y2) (z2)\nset [x2 v] to (x2)\nset [y2 v] to (y2)\nset [z2 v] to (z2)\n\ndefine Draw Line (x1) (y1) (z1) to (x2) (y2) (z2)\nSet Point 1: ((x1) - (cam x)) ((y1) - (cam y)) ((z1) - (cam z))\nSet Point 2: ((x2) - (cam x)) ((y2) - (cam y)) ((z2) - (cam z))\nSet Point 1: (((z1) * (sin Y)) + ((x1) * (cos Y))) (y1) (((z1) * (cos Y)) - ((x1) * (sin Y)))\nSet Point 2: (((z2) * (sin Y)) + ((x2) * (cos Y))) (y2) (((z2) * (cos Y)) - ((x2) * (sin Y)))\nSet Point 1: (x1) (((y1) * (cos X)) - ((z1) * (sin X))) (((y1) * (sin X)) + ((z1) * (cos X)))\nSet Point 2: (x2) (((y2) * (cos X)) - ((z2) * (sin X))) (((y2) * (sin X)) + ((z2) * (cos X)))\nif <not <<(z1) < (near plane)> and <(z2) < (near plane)>>> then\n    Z Clipping\n    Set Screen Point 1: ((view factor) * ((x1) / (z1))) ((view factor) * ((y1) / (z1)))\n    Set Screen Point 2: ((view factor) * ((x2) / (z2))) ((view factor) * ((y2) / (z2)))\n    go to x: (x1) y: (y1)\n    pen down\n    go to x: (x2) y: (y2)\n    pen up\nend\n\ndefine Set Screen Point 1: (x1) (y1)\nset [x1 v] to (x1)\nset [y1 v] to (y1)\n\ndefine Set Screen Point 2: (x2) (y2)\nset [x2 v] to (x2)\nset [y2 v] to (y2)\n\ndefine Put Cube at (x) (y) (z) (platform type)\nCalculate Trig Values\nSelect color (platform type)\nset pen (brightness v) to ((((view dis) - (100)) - (item (ii) of [block distances v])) / (4))\nDraw Square (x) (y) ((50) + (z))\nDraw Line ((50) + (x)) ((50) + (y)) ((50) + (z)) to ((50) + (x)) ((50) + (y)) ((-50) + (z))\nDraw Line ((50) + (x)) ((-50) + (y)) ((50) + (z)) to ((50) + (x)) ((-50) + (y)) ((-50) + (z))\nDraw Line ((-50) + (x)) ((-50) + (y)) ((50) + (z)) to ((-50) + (x)) ((-50) + (y)) ((-50) + (z))\nDraw Line ((-50) + (x)) ((50) + (y)) ((50) + (z)) to ((-50) + (x)) ((50) + (y)) ((-50) + (z))\nDraw Square (x) (y) ((-50) + (z))\n\ndefine Calculate Trig Values\nset [sin x v] to ([sin v] of (rot Y) )\nset [cos x v] to ([cos v] of (rot Y) )\nset [sin y v] to ([sin v] of (rot X) )\nset [cos y v] to ([cos v] of (rot X) )\n\ndefine Z Clipping\nif <<(z1) < (near plane)> or <(z2) < (near plane)>> then\n    set [percent v] to (((near plane) - (z1)) / ((z2) - (z1)))\n    if <(z1) < (near plane)> then\n        Set Point 1: ((x1) + (((x2) - (x1)) * (percent))) ((y1) + (((y2) - (y1)) * (percent))) (near plane)\n    else\n        if <(z2) < (near plane)> then\n            Set Point 2: ((x1) + (((x2) - (x1)) * (percent))) ((y1) + (((y2) - (y1)) * (percent))) (near plane)\n        end\n    end\nend\n\ndefine Turn and Move\nif <key (up arrow v) pressed?> then\n    change [rot y v] by (4)\nend\nif <key (left arrow v) pressed?> then\n    change [rot x v] by (4)\nend\nif <key (right arrow v) pressed?> then\n    change [rot x v] by (-4)\nend\nif <key (down arrow v) pressed?> then\n    change [rot y v] by (-4)\nend\nif <key (w v) pressed?> then\n    change [zvel v] by ((2) * (cos Y))\n    change [xvel v] by ((-2) * (sin Y))\nend\nif <key (s v) pressed?> then\n    change [zvel v] by ((-2) * (cos Y))\n    change [xvel v] by ((2) * (sin Y))\nend\nif <key (a v) pressed?> then\n    change [zvel v] by ((-2) * (sin Y))\n    change [xvel v] by ((-2) * (cos Y))\nend\nif <key (d v) pressed?> then\n    change [zvel v] by ((2) * (sin Y))\n    change [xvel v] by ((2) * (cos Y))\nend\nif <(rot Y) < [-90]> then\n    set [rot y v] to [-90]\nend\nif <[90] < (rot Y)> then\n    set [rot y v] to [90]\nend\nPhysics\n\ndefine Collisions!\nset [touching platform? v] to [no]\nset [touching end v] to [no]\nset [touching water? v] to [no]\nset [i v] to [0]\nrepeat (length of [cube x pos v])\n    change [i v] by (1)\n    if <<<not <(cam y) < ((item (i) of [cube y pos v]) - (90))>> and <not <(cam y) > ((item (i) of [cube y pos v]) + (130))>>> and <<<not <(cam z) < ((item (i) of [cube z pos v]) - (60))>> and <not <(cam z) > ((item (i) of [cube z pos v]) + (60))>>> and <<not <(cam x) < ((item (i) of [cube x pos v]) - (60))>> and <not <(cam x) > ((item (i) of [cube x pos v]) + (60))>>>>> then\n        if <(item (i) of [platform type v]) = [Platform]> then\n            set [touching platform? v] to [yes]\n        else\n            if <(item (i) of [platform type v]) = [Lava]> then\n                Reset\n            else\n                if <(item (i) of [platform type v]) = [Water]> then\n                    set [touching water? v] to [yes]\n                else\n                    if <(item (i) of [platform type v]) = [Trampoline]> then\n                        start sound [Boing v]\n                        set [y vel v] to [33]\n                    else\n                        if <(item (i) of [platform type v]) = [End]> then\n                            set [touching end v] to [yes]\n                        else\n                        end\n                    end\n                end\n            end\n        end\n        stop [this script v]\n    end\nend\n\ndefine Physics\nchange [falling? v] by (1)\nchange [y vel v] by (-1)\nchange [cam y v] by (Y vel)\nCollisions!\nif <<(Touching water?) = [yes]> and <(Y vel) < [-2]>> then\n    set [y vel v] to [-2]\nend\nif <(Touching platform?) = [yes]> then\n    Y collision (Y vel)\nend\nchange [cam z v] by (Zvel)\nCollisions!\nif <(Touching platform?) = [yes]> then\n    Z Collision (Zvel)\nend\nchange [cam x v] by (Xvel)\nCollisions!\nif <(Touching platform?) = [yes]> then\n    X Collisions (Xvel)\nend\nset [zvel v] to ((Zvel) * (0.7))\nset [xvel v] to ((Xvel) * (0.7))\nif <<key (space v) pressed?> and <<(Falling?) < [5]> or <(Touching water?) = [yes]>>> then\n    if <(Touching water?) = [yes]> then\n        set [y vel v] to [5]\n    else\n        set [y vel v] to [14]\n    end\nend\nif <(cam y) < [-500]> then\n    Reset\nend\nRender\n\ndefine Y collision (y)\nrepeat until <not <(Touching platform?) = [yes]>>\n    if <(y) > [0]> then\n        change [cam y v] by (-1)\n    else\n        change [cam y v] by (1)\n        set [falling? v] to [0]\n    end\n    set [y vel v] to [0]\n    Collisions!\nend\n\ndefine Z Collision (z)\nrepeat until <not <(Touching platform?) = [yes]>>\n    if <(z) > [0]> then\n        change [cam z v] by (-1)\n    else\n        change [cam z v] by (1)\n    end\n    set [zvel v] to [0]\n    Collisions!\nend\n\ndefine X Collisions (x)\nrepeat until <not <(Touching platform?) = [yes]>>\n    if <(x) > [0]> then\n        change [cam x v] by (-1)\n    else\n        change [cam x v] by (1)\n    end\n    set [xvel v] to [0]\n    Collisions!\nend\n\ndefine Reset\nset [view factor v] to [150]\nset [cam speed v] to [6]\nset [cam x v] to [0]\nset [cam y v] to [150]\nset [cam z v] to [0]\nset [near plane v] to [1]\nset [y vel v] to [0]\n\nwhen flag clicked\nset [can skip? v] to [no]\nswitch costume to (costume2 v)\nset size to (9999999999999999999) %\nswitch costume to (costume1 v)\nreset timer\nerase all\nset [level v] to [1]\nLevel\nReset\nforever\n    erase all\n    Turn and Move\n    if <(Touching end) = [yes]> then\n        change [level v] by (1)\n        Level\n        Reset\n    end\nend\n\ndefine Level\ndelete all of [cube y pos v]\ndelete all of [cube x pos v]\ndelete all of [cube z pos v]\ndelete all of [platform type v]\nif <(Level) = [1]> then\n    Add platforms from [0] [0] [0] to [1] [0] [1] [platform]\n    Level design [3] [0] [3] [platform]\n    Add platforms from [4] [1] [5] to [5] [1] [6] [platform]\n    Add platforms from [6] [1] [5] to [8] [1] [6] [platform]\n    Level design [6] [1] [6] [lava]\n    Level design [6] [1] [5] [lava]\n    Level design [9] [1] [6] [lava]\n    Level design [9] [1] [5] [lava]\n    Add platforms from [10] [1] [5] to [11] [1] [6] [platform]\n    Level design [11] [2] [6] [trampoline]\n    Level design [11] [2] [5] [trampoline]\n    Add platforms from [14] [5] [5] to [15] [5] [6] [platform]\n    Level design [17] [6] [6] [end]\n    Level design [17] [6] [5] [end]\nelse\n    if <(Level) = [2]> then\n        Add platforms from [0] [0] [0] to [1] [0] [1] [platform]\n        Level design [2] [0] [2] [platform]\n        Add platforms from [3] [0] [4] to [4] [0] [5] [platform]\n        Add platforms from [6] [1] [4] to [7] [1] [5] [platform]\n        Add platforms from [10] [1] [4] to [11] [1] [5] [trampoline]\n        Add platforms from [12] [6] [4] to [13] [6] [5] [platform]\n        Add platforms from [15] [6] [7] to [16] [6] [8] [platform]\n        Level design [16] [7] [8] [end]\n    else\n        if <(Level) = [3]> then\n            Add platforms from [0] [0] [0] to [1] [0] [1] [platform]\n            Add platforms from [3] [-2] [3] to [5] [-2] [5] [platform]\n            Add platforms from [3] [-1] [3] to [5] [0] [5] [water]\n            Add platforms from [4] [-1] [7] to [5] [-1] [8] [platform]\n            Level design [5] [0] [8] [end]\n        else\n            if <(Level) = [4]> then\n                Level design [0] [0] [0] [Platform]\n                Add platforms from [0] [-1] [2] to [0] [-1] [5] [lava]\n                Add platforms from [0] [2] [2] to [0] [2] [5] [lava]\n                Add platforms from [0] [0] [2] to [0] [1] [5] [water]\n                Level design [0] [-1] [7] [Platform]\n                Add platforms from [-5] [-2] [7] to [-2] [-2] [7] [lava]\n                Add platforms from [-5] [1] [7] to [-2] [1] [7] [lava]\n                Add platforms from [-5] [-1] [7] to [-2] [0] [7] [water]\n                Level design [-7] [-2] [7] [Platform]\n                Add platforms from [-7] [-3] [9] to [-7] [-3] [12] [lava]\n                Add platforms from [-7] [0] [9] to [-7] [0] [12] [lava]\n                Add platforms from [-7] [-2] [9] to [-7] [-1] [12] [water]\n                Level design [-7] [-3] [14] [end]\n            else\n                if <(Level) = [5]> then\n                    Add platforms from [0] [0] [0] to [0] [0] [2] [platform]\n                    Add platforms from [0] [7] [3] to [0] [7] [10] [lava]\n                    Level design [0] [0] [3] [trampoline]\n                    Level design [0] [0] [4] [platform]\n                    Level design [0] [0] [5] [platform]\n                    Level design [0] [0] [6] [trampoline]\n                    Level design [0] [0] [7] [platform]\n                    Level design [0] [0] [8] [platform]\n                    Level design [0] [0] [9] [trampoline]\n                    Level design [0] [0] [10] [end]\n                else\n                    set [can skip? v] to [yes]\n                    set [level v] to [1]\n                    Level\n                end\n            end\n        end\n    end\nend\n\ndefine Render\nDistance\nSort Lists\nset pen size to (8)\nset [ii v] to [0]\nrepeat (length of [cube x pos v])\n    change [ii v] by (1)\n    if <(item (ii) of [block distances v]) < (view dis)> then\n        Put Cube at (item (ii) of [cube x pos v]) (item (ii) of [cube y pos v]) (item (ii) of [cube z pos v]) (item (ii) of [platform type v])\n    end\nend\nset pen color to (#ffffff)\nset pen size to (5)\ngo to x: (-10) y: (0)\npen down\ngo to x: (10) y: (0)\npen up\ngo to x: (0) y: (-10)\npen down\ngo to x: (0) y: (10)\npen up\n\nwhen flag clicked\nforever\n    if <mouse down?> then\n        set [old mouse x v] to (mouse x)\n        set [old mouse y v] to (mouse y)\n        wait (0.000001) seconds\n        if <not <<<(mouse y) < [-80]> and <(mouse x) < [-140]>> and <(mouse y) < [-80]>>> then\n            change [rot y v] by (((mouse y) - (Old Mouse Y)) / (0.7))\n            change [rot x v] by (((Old Mouse X) - (mouse x)) / (0.7))\n        end\n    end\nend\n\ndefine Select color (current platform type)\nif <(current platform type) = [Platform]> then\n    set pen color to (#32f7f7)\nelse\n    if <(current platform type) = [Lava]> then\n        set pen color to (#ff3333)\n    else\n        if <(current platform type) = [Trampoline]> then\n            set pen color to (#fff830)\n        else\n            if <(current platform type) = [Water]> then\n                set pen color to (#005dff)\n            else\n                if <(current platform type) = [end]> then\n                    set pen color to (#33ff30)\n                else\n                    set pen color to (#ff00d0)\n                end\n            end\n        end\n    end\nend\n\ndefine Level design (x) (y) (z) (type)\nadd ((x) * (100)) to [cube x pos v]\nadd ((y) * (100)) to [cube y pos v]\nadd ((z) * (100)) to [cube z pos v]\nadd (type) to [platform type v]\n\ndefine Draw Square (x) (y) (z)\nDraw Line ((50) + (x)) ((50) + (y)) (z) to ((50) + (x)) ((-50) + (y)) (z)\nDraw Line ((50) + (x)) ((-50) + (y)) (z) to ((-50) + (x)) ((-50) + (y)) (z)\nDraw Line ((-50) + (x)) ((-50) + (y)) (z) to ((-50) + (x)) ((50) + (y)) (z)\nDraw Line ((-50) + (x)) ((50) + (y)) (z) to ((50) + (x)) ((50) + (y)) (z)\n\ndefine Add platforms from (x1) (y1) (z1) to (x2) (y2) (z2) (type)\nset [i v] to (x1)\nrepeat (([abs v] of ((x1) - (x2)) ) + (1))\n    set [ii v] to (y1)\n    repeat (([abs v] of ((y1) - (y2)) ) + (1))\n        set [iii v] to (z1)\n        repeat (([abs v] of ((z1) - (z2)) ) + (1))\n            Level design (i) (ii) (iii) (type)\n            change [iii v] by (1)\n        end\n        change [ii v] by (1)\n    end\n    change [i v] by (1)\nend\n\nchange [level v] by (1)\nLevel\n\nwhen [1 v] key pressed\nif <(can skip?) = [yes]> then\n    set [level v] to [1]\n    Reset\n    Level\nend\n\nwhen [2 v] key pressed\nif <(can skip?) = [yes]> then\n    set [level v] to [2]\n    Reset\n    Level\nend\n\nwhen [3 v] key pressed\nif <(can skip?) = [yes]> then\n    set [level v] to [3]\n    Reset\n    Level\nend\n\nwhen [4 v] key pressed\nif <(can skip?) = [yes]> then\n    set [level v] to [4]\n    Reset\n    Level\nend\n\nwhen [5 v] key pressed\nif <(can skip?) = [yes]> then\n    set [level v] to [5]\n    Reset\n    Level\nend\n\n@Water\n\nwhen flag clicked\nset [old touching water v] to [no]\nset [ghost v] effect to (60)\nforever\n    if <(Touching water?) = [yes]> then\n        show\n    else\n        hide\n    end\n    if <not <(Touching water?) = (Old touching water)>> then\n        set [old touching water v] to (Touching water?)\n        start sound [Splash v]\n    end\nend\n\n@Cloud\n\nwhen flag clicked\nswitch costume to (costume1 v)\nshow\nerase all\ndelete all of [cloud check v]\nadd (☁ p1 data) to [cloud check v]\nadd (☁ p2 data) to [cloud check v]\nadd (☁ p3 data) to [cloud check v]\nadd (☁ p4 data) to [cloud check v]\nwait (1) seconds\nset [player slot v] to [5]\nset [empty? v] to [yes]\nif <(item (4) of [cloud check v]) = (☁ p4 data)> then\n    set [player slot v] to [4]\nelse\n    set [empty? v] to [no]\nend\nif <(item (3) of [cloud check v]) = (☁ p3 data)> then\n    set [player slot v] to [3]\nelse\n    set [empty? v] to [no]\nend\nif <(item (2) of [cloud check v]) = (☁ p2 data)> then\n    set [player slot v] to [2]\nelse\n    set [empty? v] to [no]\nend\nif <(item (1) of [cloud check v]) = (☁ p1 data)> then\n    set [player slot v] to [1]\nelse\n    set [empty? v] to [no]\nend\nswitch costume to (costume4 v)\nif <(player slot) = [5]> then\n    switch costume to (costume2 v)\nend\nif <(empty?) = [yes]> then\n    switch costume to (costume3 v)\nend\nbroadcast (hide v)\nbroadcast (send data v)\nset [clone id v] to [0]\nrepeat (4)\n    change [clone id v] by (1)\n    if <not <(clone ID) = (player slot)>> then\n        create clone of (_myself_ v)\n    end\nend\nchange [clone id v] by (1)\n\nwhen I receive [hide v]\nwait (2) seconds\nhide\n\nwhen I receive [send data v]\nforever\n    wait (0.1) seconds\n    set [data v] to (join ((round (cam x)) + (5000)) (join ((round (cam y)) + (5000)) (join ((round (cam z)) + (5000)) (join (Level) (pick random (0) to (99))))))\n    if <(player slot) = [1]> then\n        set [☁ p1 data v] to (data)\n    else\n        if <(player slot) = [2]> then\n            set [☁ p2 data v] to (data)\n        else\n            if <(player slot) = [3]> then\n                set [☁ p3 data v] to (data)\n            else\n                if <(player slot) = [4]> then\n                    set [☁ p4 data v] to (data)\n                end\n            end\n        end\n    end\nend\n\nwhen I start as a clone\nhide\nset [cloud fail attempts v] to [100]\nif <(clone ID) = [1]> then\n    set [clone data v] to (☁ p1 data)\nelse\n    if <(clone ID) = [2]> then\n        set [clone data v] to (☁ p2 data)\n    else\n        if <(clone ID) = [3]> then\n            set [clone data v] to (☁ p3 data)\n        else\n            if <(clone ID) = [4]> then\n                set [clone data v] to (☁ p4 data)\n            end\n        end\n    end\nend\nforever\n    set [pre data v] to (clone data)\n    if <(clone ID) = [1]> then\n        set [clone data v] to (☁ p1 data)\n    else\n        if <(clone ID) = [2]> then\n            set [clone data v] to (☁ p2 data)\n        else\n            if <(clone ID) = [3]> then\n                set [clone data v] to (☁ p3 data)\n            else\n                if <(clone ID) = [4]> then\n                    set [clone data v] to (☁ p4 data)\n                end\n            end\n        end\n    end\n    if <(clone data) = (pre data)> then\n        change [cloud fail attempts v] by (1)\n    else\n        set [cloud fail attempts v] to [0]\n    end\n    if <<(Level) = (letter (13) of (clone data))> and <(cloud fail attempts) < [100]>> then\n        if <not <[platform type v] contains (join [p] (clone ID))?>> then\n            add (join [p] (clone ID)) to [platform type v]\n            add ((join (join (letter (1) of (clone data)) (letter (2) of (clone data))) (join (letter (3) of (clone data)) (letter (4) of (clone data)))) - (5000)) to [cube x pos v]\n            add ((join (join (letter (5) of (clone data)) (letter (6) of (clone data))) (join (letter (7) of (clone data)) (letter (8) of (clone data)))) - (5000)) to [cube y pos v]\n            add ((join (join (letter (9) of (clone data)) (letter (10) of (clone data))) (join (letter (11) of (clone data)) (letter (12) of (clone data)))) - (5000)) to [cube z pos v]\n        end\n        replace item (item # of (join [p] (clone ID)) in [platform type v]) of [cube x pos v] with ((join (join (letter (1) of (clone data)) (letter (2) of (clone data))) (join (letter (3) of (clone data)) (letter (4) of (clone data)))) - (5000))\n        replace item (item # of (join [p] (clone ID)) in [platform type v]) of [cube y pos v] with ((join (join (letter (5) of (clone data)) (letter (6) of (clone data))) (join (letter (7) of (clone data)) (letter (8) of (clone data)))) - (5000))\n        replace item (item # of (join [p] (clone ID)) in [platform type v]) of [cube z pos v] with ((join (join (letter (9) of (clone data)) (letter (10) of (clone data))) (join (letter (11) of (clone data)) (letter (12) of (clone data)))) - (5000))\n    else\n        delete (item # of (join [p] (clone ID)) in [platform type v]) of [cube x pos v]\n        delete (item # of (join [p] (clone ID)) in [platform type v]) of [cube y pos v]\n        delete (item # of (join [p] (clone ID)) in [platform type v]) of [cube z pos v]\n        delete (item # of (join [p] (clone ID)) in [platform type v]) of [platform type v]\n    end\nend\n\nchange [☁ p1 data v] by (1)\n\nwhen [p v] key pressed\ndelete all of [levels with players v]\nwait (0.1) seconds\nif <(clone ID) < [5]> then\n    if <(cloud fail attempts) < [100]> then\n        add (letter (13) of (clone data)) to [levels with players v]\n    end\nelse\n    hide list [levels with players v]\n    wait until <not <key (p v) pressed?>>\n    show list [levels with players v]\nend\n\n@thumbnail\n\nwhen flag clicked\nhide\n\n
CHECK OUT @k0stya's EBIK 3D PLATFORMER!!! https://scratch.mit.edu/projects/410656313/\n\nUse the arrows to look around, wasd to move and space to jump. Press p to see what levels other players are on and 1-5 to skip to a level (if you've beaten the game). Please tell me about any bugs you find.