100% pen 3D platformer!
@Stage\n\n@Levels\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 (((1000) - (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 [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]) = [Trampoline]> then\n                    set [y vel v] to [40]\n                else\n                    set [touching end v] to [yes]\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 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]>> then\n    set [y vel v] to [14]\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\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    Level design [1] [0] [-1] [Platform]\n    Level design [0] [0] [0] [Platform]\n    Level design [0] [0] [1] [Platform]\n    Level design [0] [0] [2] [Trampoline]\n    Level design [0] [0] [3] [Platform]\n    Level design [0] [0] [4] [Lava]\n    Level design [0] [0] [5] [platformer]\n    Level design [0] [0] [6] [End]\nelse\n    if <(Level) = [2]> then\n        Level design [0] [0] [0] [Platform]\n        Level design [0] [0] [1] [Trampoline]\n        Level design [0] [5] [2] [Platform]\n        Level design [-10] [5] [3] [Platform]\n        Level design [0] [5] [4] [Platform]\n        Level design [0] [5] [5] [Lava]\n        Level design [0] [5] [5] [Platform]\n        Level design [0] [5] [6] [End]\n    else\n        if <(Level) = [3]> then\n            Level design [0] [0] [0] [Platform]\n            Level design [0] [0] [1] [Lava]\n            Level design [0] [0] [2] [Trampoline]\n            Level design [0] [0] [3] [Lava]\n            Level design [0] [0] [4] [platform]\n            Level design [0] [0] [5] [Lava]\n            Level design [0] [0] [6] [End]\n        else\n            if <(Level) = [4]> then\n                Level design [0] [0] [0] [Trampoline]\n                Level design [0] [5] [1] [Platform]\n                Level design [0] [5] [2] [Lava]\n                Level design [0] [5] [3] [Trampoline]\n                Level design [0] [5] [4] [Lava]\n                Level design [0] [5] [5] [platfom]\n                Level design [0] [5] [6] [Lava]\n                Level design [0] [5] [7] [platform]\n                Level design [0] [5] [8] [End]\n            else\n                if <(Level) = [5]> then\n                    Level design [0] [0] [0] [Platform]\n                    Level design [0] [2] [1] [Trampoline]\n                    Level design [0] [7] [3] [platform]\n                    Level design [0] [11] [5] [platformer]\n                    Level design [0] [13] [6] [Lava]\n                    Level design [0] [15] [7] [End]\n                else\n                    if <(Level) = [6]> then\n                        Level design [0] [0] [0] [Trampoline]\n                        Level design [0] [2] [0] [Trampoline]\n                        Level design [0] [7] [0] [platformer]\n                        Level design [0] [11] [0] [Trampoline]\n                        Level design [0] [13] [1] [Lava]\n                        Level design [0] [13] [2] [Platform]\n                        Level design [0] [13] [3] [Lava]\n                        Level design [0] [13] [4] [End]\n                    else\n                        if <(Level) = [7]> then\n                            Level design [0] [0] [0] [Platform]\n                            Level design [0] [0] [1] [Platformer]\n                            Level design [0] [0] [2] [Platform]\n                            Level design [0] [0] [3] [Lava]\n                            Level design [0] [0] [4] [Platform]\n                            Level design [0] [0] [5] [Lava]\n                            Level design [0] [0] [6] [Platform]\n                            Level design [0] [0] [3] [Lava]\n                            Level design [0] [0] [4] [Platform]\n                            Level design [0] [0] [5] [Platform]\n                            Level design [0] [0] [6] [Platform]\n                            Level design [0] [0] [7] [End]\n                        else\n                            if <(Level) = [8]> then\n                                Level design [0] [0] [0] [Trampoline]\n                                Level design [0] [2] [1] [Platform]\n                                Level design [0] [2] [2] [Lava]\n                                Level design [0] [2] [3] [Lava]\n                                Level design [0] [2] [4] [Platform]\n                                Level design [0] [2] [5] [End]\n                            else\n                                if <(Level) = [9]> then\n                                    Level design [0] [0] [2] [Platform]\n                                    Level design [0] [0] [4] [Platform]\n                                    Level design [0] [0] [6] [Platform]\n                                    Level design [0] [0] [8] [Platform]\n                                    Level design [0] [0] [10] [End]\n                                else\n                                    if <(Level) = [10]> then\n                                        Level design [0] [14] [14] [Platform]\n                                        Level design [0] [15] [15] [Lava]\n                                        Level design [0] [16] [16] [Trampoline]\n                                        Level design [0] [17] [17] [Platform]\n                                        Level design [0] [18] [18] [Platform]\n                                        Level design [0] [19] [19] [Platform]\n                                        Level design [0] [20] [20] [Platform]\n                                        Level design [0] [21] [21] [Platform]\n                                        Level design [0] [22] [22] [Platform]\n                                        Level design [0] [23] [23] [Platform]\n                                        Level design [] [] [] [lava]\n                                    else\n                                        if <(Level) = [11]> then\n                                            Level design [1] [1] [0] [Platform]\n                                            Level design [1] [0] [0] [Platform]\n                                            Level design [0] [1] [1] [Platform]\n                                            Level design [0] [2] [2] [Platform]\n                                            Level design [0] [3] [3] [Platform]\n                                            Level design [0] [4] [4] [Platform]\n                                            Level design [0] [5] [5] [Lava]\n                                            Level design [0] [6] [6] [Platform]\n                                            Level design [0] [7] [7] [Platform]\n                                            Level design [0] [8] [8] [Platform]\n                                            Level design [7] [9] [9] [Lava]\n                                            Level design [0] [10] [10] [Platform]\n                                            Level design [0] [11] [11] [Platform]\n                                            Level design [0] [12] [12] [Platform]\n                                            Level design [0] [13] [13] [Platform]\n                                        else\n                                            broadcast (Win v)\n                                            set [end? v] to [true]\n                                        end\n                                    end\n                                end\n                            end\n                        end\n                    end\n                end\n            end\n        end\n    end\nend\n\nLevel design [0] [14] [14] [End]\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]) < [1100]> 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\nset [end? v] to [false]\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 (#33f7db)\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            set pen color to (#33ff30)\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\nwhen I receive [intri v]\n\nset [level v] to [11]\n\nwhen flag clicked\n\nwhen flag clicked\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\nif  then\nend\n\n
Can we get this to 20,000 views?    This is maybe one of my best projects! \nDays of coding! Finally it's finished!\nUse WASD to move about mouse to turn the screen.\n\n11 levels. Can you compete them all?