diff --git a/generated/help.cache b/generated/help.cache index 0684166f..5f025265 100644 --- a/generated/help.cache +++ b/generated/help.cache @@ -9,9 +9,9 @@ "cptje": "meta version \"v2.2,js,ctx,refs,localcloud,unicodemodel,allasync,upperplex\";\nmeta name \"blank minecraft pi\";\nmeta color \"#ffffffff\";\nmeta rootId \"UqtPMmqsRpLtBLICK3xNRKmo\";\nmeta iconArtId \"eopyzwpm\";\nmeta allowExport \"yes\";\nmeta hasIds \"yes\";\nmeta platform \"current\";\nmeta parentIds \"\";\n#ALKdKR1Vv5Af8ary\naction main() {\n #sP3br35YdRFiPoQN $steve := @\\u267b→minecraft_pi→player_;\n #x8bszXo68hv0QbQi $x, $y, $z := $steve→position;\n #m6yuFeDYdeeeljiq $steve→set_position($x, $y + 50, $z);\n}\n#aRCXIAMUsrFd3tkf meta import minecraft_pi {\n pub \"ogxna\"\n usage {\n #BVGhpbmca\n table Block_Options {\n type = \"Object\";\n exported = true;\n persistent = false;\n fields {\n // Gets the block state\n #xNQF2IfWS5kUTCuC state : Number\n // Picks a wool color if applicable.\n // {hints:white,orange,magenta,light blue,yellow,lime,pink,grey,light grey,cyan,purple,blue,brown,green,red,black}\n #xUNtn4WzFNh0J275 wool_color : String\n }\n }\n #xIIDIryL3GdLzzFH\n table Connect_Options {\n type = \"Object\";\n exported = true;\n persistent = false;\n fields {\n // Minecraft Server internet host\n #IhKVKMjdA949jNr3 host : String\n // Minecraft PI port (default 4711)\n #PQgsvjixlAlu49Bw port : Number\n // Address of the web socket proxy\n #nlMXsJlluWZB1fNN proxy : String\n }\n }\n #umgRs0Idq3y9jRyc\n table Block_Event {\n type = \"Object\";\n exported = true;\n persistent = false;\n fields {\n #SCV1txxxrjigP8XC kind : String\n #UIy6UFvY6WJWDDoA x : Number\n #wWASeEjKJDoiqrL2 y : Number\n #MkoIqcTcP3QiIoot z : Number\n #kYCW4sVB0Q5jQy0Q face : Number\n #EayHvTpmMjNF3Sfh entity : ♻ minecraft_pi → Entity\n }\n }\n type Entity\n action `async` connect(options\\u003f: ♻ minecraft_pi → Connect_Options)\n action `async` set_block(x: Number, y: Number, z: Number, name: String, options\\u003f: ♻ minecraft_pi → Block_Options)\n action `async` set_blocks(x: Number, y: Number, z: Number, x2: Number, y2: Number, z2: Number, name: String, options\\u003f: ♻ minecraft_pi → Block_Options)\n action `async` block(x: Number, y: Number, z: Number) returns(name: String, state: Number)\n action `async` height(x: Number, z: Number) returns(y: Number)\n action `async` chat(msg: String)\n action `async` position(entity: ♻ minecraft_pi → Entity) returns(x: Number, y: Number, z: Number)\n action `async` set_position(entity: ♻ minecraft_pi → Entity, x: Number, y: Number, z: Number)\n action `async` events_clear()\n action `async` event_block_hits() returns(hits: Collection[ ♻ minecraft_pi → Block_Event])\n action `sync` is_connected() returns(r: Boolean)\n action `async` player_() returns(steve: ♻ minecraft_pi → Entity)\n action `async` players() returns(players: Collection[ ♻ minecraft_pi → Entity])\n action `async` direction(entity: ♻ minecraft_pi → Entity) returns(d: Number)\n action `async` rotation(entity: ♻ minecraft_pi → Entity) returns(d: Number)\n action `async` pitch(entity: ♻ minecraft_pi → Entity) returns(d: Number)\n action `async` player_by_name(name: String) returns(steve: ♻ minecraft_pi → Entity)\n }\n #hP2Xa8sKUY0vfcUl resolve shell = ♻ shell with {\n }\n}\n#x0kfnNJUbyhoMANO meta import shell {\n pub \"ohymc\"\n usage {\n #BdGhpbmca\n table Exec_Output {\n type = \"Object\";\n exported = true;\n persistent = false;\n fields {\n #YaaLgMz45N5ZuAeU success : Boolean\n #qrwQiGIhHhUhb8AF error : String\n #ijyQCE4KPQL2ziZD code : Number\n #wf4AkGfhLyWkyKhQ stdout : String\n #ZyLfqXXM99R1znCa stderr : String\n }\n }\n type Command_Result\n type Shell_Socket\n action `async` write_file(path: String, content: String) returns(res: ♻ shell → Command_Result)\n action `sync` mkpath(folder: String, name: String) returns(path: String)\n action `async` mkdir(path: String) returns(res: ♻ shell → Command_Result)\n action `async` exec(cmd: String, cwd: String) returns(res: ♻ shell → Exec_Output)\n action `sync` logger() returns(logger: App_Logger)\n action `async` exec_file(cmd: String, args: Collection[String], cwd: String) returns(res: ♻ shell → Exec_Output)\n action `async` python_env() returns(res: ♻ shell → Command_Result)\n action `async` tcp_connect(host: String, port: Number) returns(sock: ♻ shell → Shell_Socket)\n action `async` receive(sock: ♻ shell → Shell_Socket) returns(netdata: String)\n action `async` send(sock: ♻ shell → Shell_Socket, netdata: String)\n action `async` close(sock: ♻ shell → Shell_Socket)\n }\n}\n", "cqnha": "meta version \"v2.2,js,ctx,refs,localcloud,unicodemodel,allasync\";\nmeta name \"blank arduino\";\nmeta icon \"ArrowStandardCircle\";\nmeta color \"#ff00cc99\";\nmeta rootId \"xkbt9ErH776FGA72sWuqxeOz\";\nmeta iconArtId \"kzajxznr\";\nmeta allowExport \"yes\";\nmeta hasIds \"yes\";\nmeta platform \"current\";\nmeta parentIds \"\";\n// An Arduino sketch. #arduino #arduinoSketch\n#KUJMn0ag6zrqQys9\naction setup() {\n #qWODTg5ZnR95PTeF @\\u267b→arduino→pin_mode(13, @\\u267b→arduino→OUTPUT);\n meta private;\n}\n#UzRPACG9RBTCLU2MkuwLAhpD\naction loop() {\n #x5bamvNg9UVXaFY7 @\\u267b→arduino→digital_write(13, @\\u267b→arduino→HIGH);\n #UybvnpQJqqrqtrnH @\\u267b→arduino→delay(200);\n #xqXPRRCVUKc8rCTO @\\u267b→arduino→digital_write(13, @\\u267b→arduino→LOW);\n #um2lxP36WxO2OgOk @\\u267b→arduino→delay(200);\n meta private;\n}\n#iHY2wlj4qcvFdTHc meta import arduino {\n pub \"cqfda\"\n usage {\n action `sync` digital_read(pin: Number) returns(bit: Number)\n action `sync` digital_write(pin: Number, value: Number)\n action `sync` analog_read(pin: Number) returns(bit: Number)\n action `sync` analog_write(pin: Number, value: Number)\n action `async` pin_mode(pin: Number, mode: Number)\n action `sync` HIGH() returns(v: Number)\n action `sync` LOW() returns(v: Number)\n action `sync` OUTPUT() returns(v: Number)\n action `sync` INPUT() returns(v: Number)\n action `async` delay(millis: Number)\n action `sync` sketch(source: String)\n action `sync` static_buffer(bytes: String) returns(buf: Buffer)\n action `sync` INPUT\\_PULLUP() returns(v: Number)\n action `sync` LED\\_BUILTIN() returns(r: Number)\n action `sync` mac(address: String)\n action `sync` analog_reference(type: Number)\n action `sync` DEFAULT() returns(r: Number)\n action `sync` EXTERNAL() returns(r: Number)\n action `sync` tone(pin: Number, frequency: Number, duration: Number)\n action `sync` no_tone(pin: Number)\n action `sync` millis() returns(millis: Number)\n action `sync` micros() returns(micros: Number)\n action `sync` pulse_in(pin: Number, value: Number, timeout: Number) returns(micros: Number)\n action `sync` board(name: String)\n action `sync` print_value(name: String, value: Number)\n action `sync` print(text: String)\n action `sync` println(text: String)\n action `sync` map(value: Number, from_low: Number, from_high: Number, to_low: Number, to_high: Number) returns(r: Number)\n action `sync` constrain(value: Number, a: Number, b: Number) returns(r: Number)\n action `async` delay_microseconds(micros: Number)\n }\n}\n#xJTsvVkdQIFOcF0fRDHFLPLk\naction variables() {\n #xaFPmIVW8ylv5b9P // Initializes your global variables here.\n meta private;\n}\n", "cwgn": "meta version \"v2.2,js,ctx,refs,localcloud,unicodemodel,allasync\";\nmeta name \"layout\";\nmeta icon \"NineColumn\";\nmeta color \"#ff9955bb\";\nmeta rootId \"J2g52kon8pb1Qs9cRhmPGKZu\";\nmeta isLibrary \"yes\";\nmeta allowExport \"yes\";\nmeta platform \"current\";\n// A library to help with laying out boxes.\n#main\naction example() {\n // This library provides various helpers to simplify the layout of boxes.\n // * layout vertically or horizontally based on the page orientation\n do box {\n code→use_flexible_layout;\n // ...\n }\n // * stretch and center a box\n do box {\n code→stretch_and_center;\n // ...\n }\n meta private;\n meta test;\n}\n#fADj2RlGhi2LmT1rCUpyRpxM\naction stretch_and_center() {\n // Stretches horizontally and vertically the current box and aligns the content with the center.\n box→set_horizontal_stretch(1);\n box→set_horizontal_align(\"center\");\n box→set_vertical_stretch(1);\n box→set_vertical_align(\"center\");\n meta sync;\n}\n#QpiD4W44RMmIzOZmyI6706Ps\naction use_flexible_layout() {\n // Uses **horizontal layout** if the page is landscape; **vertical layout** if the page is portrait.\n if box→page_width > box→page_height then {\n box→use_horizontal_layout;\n }\n else {\n box→use_vertical_layout;\n }\n meta private;\n meta sync;\n}\n#gridofsquares\naction grid_of_squares(cell_content: Number_Action, count: Number, grid_width: Number, grid_height: Number) {\n // Draw a grid of at least (count) squares, of the specified total width and height.\n $numboxes := $count;\n $Area := $grid_width * $grid_height;\n $bsize := math→sqrt($Area / $numboxes);\n $cols := math→floor($grid_width / $bsize);\n $rows := math→ceiling($numboxes / $cols);\n while $rows * $bsize > $grid_height do {\n $alt1 := $grid_width / ($cols + 1) - .001;\n $alt2 := $grid_height / $rows - 0.001;\n $bsize := math→max($alt1, $alt2);\n $cols := math→floor($grid_width / $bsize);\n $rows := math→ceiling($numboxes / $cols);\n }\n $mgn := .03 * $bsize;\n if $mgn * box→pixels_per_em < 2 then {\n $mgn := 2 / box→pixels_per_em;\n }\n $bsize := $bsize - $mgn;\n do box {\n code→draw_grid($rows, $cols, $mgn, $bsize, $cell_content, 0);\n }\n}\n#drawgrid\naction draw_grid(rows: Number, cols: Number, margin: Number, bsize: Number, cell_content: Number_Action, offset: Number) {\n box→set_height($rows * $bsize + ($rows - 1) * $margin);\n box→use_vertical_layout;\n box→set_vertical_align(\"justify\");\n for 0 ≤ i < $rows do {\n do box {\n box→set_width($cols * $bsize + ($cols - 1) * $margin);\n box→use_horizontal_layout;\n box→set_horizontal_align(\"justify\");\n for 0 ≤ j < $cols do {\n do box {\n do box {\n box→set_width($bsize);\n box→set_height($bsize);\n $cell_content→run($offset + $i * $cols + $j);\n }\n }\n }\n }\n }\n meta private;\n}\n#horizontallyscrollin\naction horizontal_hub_of_squares(cell_content: Number_Action, count: Number, cell_size: Number, group_width: Number, total_height: Number) {\n // Draw a horizontally scrolling grid of at least (count) squares of the specified size, with the specified total height.\n $numboxes := $count;\n $mgn := .03 * $cell_size;\n if $mgn * box→pixels_per_em < 2 then {\n $mgn := 2 / box→pixels_per_em;\n }\n $bsize := $cell_size + $mgn;\n $cols := math→floor($group_width / $bsize);\n $rows := math→floor($total_height / $bsize);\n if $cols ≤ 0 then {\n $cols := $rows;\n }\n $groups := math→ceiling($numboxes / ($rows * $cols));\n box→use_horizontal_layout;\n for 0 ≤ i < $groups do {\n do box {\n if $i ≠ 0 then {\n box→set_margins(0, 0, 0, .2 * $bsize);\n }\n code→draw_grid($rows, $cols, $mgn, $cell_size, $cell_content, $i * ($rows * $cols));\n }\n }\n box→set_scrolling(true, false);\n}\n#verticallyscrollings\naction vertical_hub_of_squares(cell_content: Number_Action, count: Number, cell_size: Number, total_width: Number, group_height: Number) {\n // Draw a vertically scrolling grid of at least (count) squares of the specified size, with the specified total width.\n $numboxes := $count;\n $mgn := .03 * $cell_size;\n if $mgn * box→pixels_per_em < 2 then {\n $mgn := 2 / box→pixels_per_em;\n }\n $bsize := $cell_size + $mgn;\n $cols := math→floor($total_width / $bsize);\n $rows := math→floor($group_height / $bsize);\n if $rows ≤ 0 then {\n $rows := $cols;\n }\n $groups := math→ceiling($numboxes / ($rows * $cols));\n box→use_vertical_layout;\n for 0 ≤ i < $groups do {\n do box {\n if $i ≠ 0 then {\n box→set_margins(.2 * $bsize, 0, 0, 0);\n }\n code→draw_grid($rows, $cols, $mgn, $cell_size, $cell_content, $i * ($rows * $cols));\n }\n }\n box→set_scrolling(false, true);\n}\n", -"dbjyb": "meta version \"v2.2,js,ctx,refs,localcloud,unicodemodel,allasync\";\nmeta name \"touchdevelop local\";\nmeta icon \"GlobeEUA\";\nmeta color \"#ff007fff\";\nmeta rootId \"O6Rs2BjFB4g0ArT2oat8Gpfc\";\nmeta hasIds \"yes\";\nmeta platform \"current\";\nmeta parentIds \"\";\n// Explains how to export a script to the App Store. #docs\n#main\naction main() {\n #YKeb2CW4sOdvQyW9 // {parentTopic:contents}\n #OdP2Jka5zS5NMgJG // ## Beta feature!\n #xSh4e5kqwQHcBmkx // It is possible to run TouchDevelop from a local web server on your machine. This allow TouchDevelop to work completely offline or access services required for [app generation](/exporttocordova).\n #x35eEyKbLVKI0YGH // ## installation steps\n #juuuaj9Ro2J2Clco // * install [node.js] (http://nodejs.org/)\n #c72W0S2LKE5DVZEb // * create an empty folder for your projects\n #xFRR2AdHdpXNY6Tp // * open a command prompt in your fresh folder and install the **touchdevelop** npm package.\n #hxp4ucOoAsva9ecH // > ``npm install -g http://aka.ms/touchdevelop.tgz``\n #FDTBrovQEeBZm4YP // * launch TouchDevelop locally (make sure you're in your fresh folder)\n #VdVeyI6zCWRyKLoA // > ``touchdevelop``\n #jB3SWBY83Ya2hQve // This will start the TouchDevelop editor in your default browser.\n #GG0Wwd79o4DWGali // ### using non-default browser\n #c9GeLb0N1ocQTHV0 // If you want to use a different browser run ``touchdevelop --cli`` and then point your browser to the URL printed out, it will look **something like** this:\n #Zt9aw3IdHQhkjOAj // > ``Editor URL: http://localhost:4242/editor/beta#td_deployment_key=``\n #A85X0jwZQ7nxKmA7 // It is very important to copy&paste the deployment key at the end precisely.\n #oZCkpuvERU4pSBgP // ### caching of resources\n #HZg9zZ33hRQewElr // All [art resources](/art) or scripts that are loaded while using TouchDevelop local are automatically cached on disk, which allows for a better experience.\n #dOWKEqjA2EopKrAa // If you are planning to package TouchDevelop, make sure that you use at least once each required script or tutorial so that they get cached.\n #xJW2i0dpR9ECZHbH // ### packaging\n #xk9FWWSoKznWnmdy // If you plan to package and share your local touchdevelop, you need to perform the following step.\n #OWX4ZYDjngkiBEtL // * go to the **hub**,\n #gHhslghRyoF9m2FR // * tap on `[Settings]`\n #xpnUIIdzjeb32vYB // * tap on `[save offline caches]`\n #HBWc0AdjvaE1PBPq // Copy or zip the folder containing the TouchDevelop files.\n}\n#lRC7ZP4I3ytfLfcRhscBaKF6\nvar monster : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/ymggwtmn\";\n transient = true;\n}\n#xZA3MGCJ6sAJtfqSibDFTyzZ\nvar @1_Click_on_Title : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/syhbuwmb\";\n transient = true;\n}\n#x4oXuBrRP7peqBxOraPy0Ppu\nvar @2_Publish_Script : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/uegejzev\";\n transient = true;\n}\n#Pb7ZRhh1Le4Kwz16DOm6h95t\nvar @3_Click_Export_iOS : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/snnlubem\";\n transient = true;\n}\n#JiJThBxgjuQyZZagv84V67Cc\nvar @4_Export_to_App_Store : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/jhmzbank\";\n transient = true;\n}\n#u2byTeHW2wX14mnA374fzvSh\nvar @5_App_is_Ready : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/pnqogdug\";\n transient = true;\n}\n#XhCWNpaqagoeYlvuBl6OZOHa\nvar @6_Search_for_Xcode : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/ukwoekck\";\n transient = true;\n}\n#ZeXqju7M5bfqlm0Gx6CYvtRK\nvar @7_Open_Xcode : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/akluqtvy\";\n transient = true;\n}\n#xzO7Z4FWRmvE3GvB3nUQGdja\nvar @8_Open_Project_Folder : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/duqdaaut\";\n transient = true;\n}\n#JOEveTZ34fcQQBSty0Y64Edz\nvar @9_Run_on_Simulator : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/vxmsyaas\";\n transient = true;\n}\n#xiLx3rI7m5QO2Xo18r4e8IkZ\nvar @10_New_App : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/mpgptjat\";\n transient = true;\n}\n#xvxHs2DcS5TxtO3WUNGJU8SX\nvar @11_App_Info_1 : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/ogcsqjwj\";\n transient = true;\n}\n#ZrjNZAJFXA9xGxb5V6oiQ2fr\nvar @12_App_Info_2 : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/sqvolvpy\";\n transient = true;\n}\n#Y3AswkOZPm0qiy2UVZvlZkez\nvar @13_App_Info_3 : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/aisvqsqf\";\n transient = true;\n}\n#bBNxhIal86lYKIvamSdSIjaY\nvar @14_App_Info_4 : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/afpjiooj\";\n transient = true;\n}\n#NzF4EhVGG7woPhmPnliAixIE\nvar @15_Upload_Images : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/fxzfihkw\";\n transient = true;\n}\n#ncULKNvBE2KztzZPCeZpAkDY\nvar @16_Create_Certificate : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/uzxlvvev\";\n transient = true;\n}\n#HvyrGPpdCBgkgany57HRlfeD\nvar @17_iOS_Device : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/luyofzkt\";\n transient = true;\n}\n#jlzt0AP4sDglw23BWlpFGzmL\nvar @18_Product_Archive : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/mnuosfrx\";\n transient = true;\n}\n#ed23hfCPWk4e4wTEwn4QGZzq\nvar Provisioning_Profile : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/jdzxutxx\";\n transient = true;\n}\n#eXePACFUcwQUUlcmdK8BzBgP\nvar P_Validate : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/waeqjhwx\";\n transient = true;\n}\n#lPh2YgYpDFec75cVhrBPJBW7\nvar Distribute : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/evpvthnw\";\n transient = true;\n}\n#n7TK0c4AGeFXhyBY7vYRqXAx\nvar @3_Click_Export_iOS_2 : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/przbvosv\";\n transient = true;\n}\n", "djjlc": "meta version \"v2.2,js,ctx,refs,localcloud,unicodemodel,allasync\";\nmeta name \"blank game template\";\nmeta icon \"Controller\";\nmeta color \"#ff9955bb\";\nmeta rootId \"x0hukfGG4i3MRik2f8KmalqI\";\nmeta allowExport \"yes\";\nmeta hasIds \"yes\";\nmeta platform \"current\";\nmeta parentIds \"\";\n#Apxoi0VesSBXIz9PLx65FHFL\naction main() {\n #xSdbHt6IzwL2zF22 $board := @\\u267b→game→start;\n #tO3dDceW3bsm8w4D @\\u267b→game→bounce_on_sides;\n #d3NEpyQ23dEnVv0F $monster := @\\u267b→game→create_sprite(art→monster);\n #DXV4iMnEfxNiTp9x $monster→acceleration_y := 400;\n #casrRb7vrPB4Den3 @\\u267b→gamepad→on_button_pressed($@action);\n #UCgGiaTYNYB3k9mm where @action() {\n #nIR8WfYhh9EC5Qo1 $monster→speed_y := - 200;\n }\n}\n#QgTAJQKZ2nORRZRz meta import game {\n pub \"sduub\"\n usage {\n action `sync` set_score(value: Number)\n action `async` set_life(value: Number)\n action `sync` start_timer()\n action `sync` start_countdown_timer(seconds: Number)\n action `sync` life() returns(r: Number)\n action `sync` score() returns(r: Number)\n action `sync` current_time() returns(seconds: Number)\n action `sync` add_score(value: Number)\n action `async` add_life(value: Number)\n action `sync` clear_timer()\n action `async` remove_life(value: Number)\n action `async` end()\n action `async` start() returns(board: Board)\n action `sync` reset()\n action `async` start_with_fixed_size(width: Number, height: Number) returns(board: Board)\n action `async` start_with_background_picture(pic: Picture) returns(board: Board)\n action `sync` board() returns(board: Board)\n action `sync` on_end(@action: Action)\n action `async` splash_text(message: String, seconds: Number, foreground: Color, background: Color, done: Action)\n action `async` start_landscape() returns(board: Board)\n action `async` start_portrait() returns(board: Board)\n action `sync` set_hud_colors(life: Color, timer: Color, score: Color)\n action `sync` hud_sprites() returns(sprites: Sprite_Set)\n action `async` life_visible() returns(b: Boolean)\n action `async` set_life_visible(visible: Boolean)\n action `sync` sprites() returns(sprites: Sprite_Set)\n action `async` set_background_scene(direction: String, pic: Picture)\n action `sync` bounce_on_sides()\n action `sync` create_sprite(pic: Picture) returns(sprite: Sprite)\n }\n}\n#hMbw1hQ3jl9MfUNI meta import gamepad {\n pub \"krxlb\"\n usage {\n type Settings\n type Gamepad_Event_Binding\n action `sync` current() returns(p: Vector3)\n action `sync` set_keys(settings: ♻ gamepad → Settings, left: String, up: String, right: String, down: String, button: String)\n action `sync` set_use_accelerometer(settings: ♻ gamepad → Settings, enabled: Boolean)\n action `sync` use_accelerometer(settings: ♻ gamepad → Settings) returns(b: Boolean)\n action `sync` control_sprite(sprite: Sprite, max_speed_x: Number, max_speed_y: Number)\n action `sync` control_background_scene(max_speed_x: Number, max_speed_y: Number)\n action `sync` settings() returns(sets: ♻ gamepad → Settings)\n action `sync` set_accelerometer_factor(settings: ♻ gamepad → Settings, factor: Number)\n action `sync` set_keyboard_factor(settings: ♻ gamepad → Settings, factor: Number)\n action `sync` set_touch_factor(settings: ♻ gamepad → Settings, factor: Number)\n action `sync` accelerometer_factor(settings: ♻ gamepad → Settings) returns(factor: Number)\n action `sync` keyboard_factor(settings: ♻ gamepad → Settings) returns(factor: Number)\n action `sync` touch_factor(settings: ♻ gamepad → Settings) returns(factor: Number)\n action `sync` gamepad_factor(settings: ♻ gamepad → Settings) returns(factor: Number)\n action `sync` set_gamepad_factor(settings: ♻ gamepad → Settings, factor: Number)\n action `async` on_button_pressed(@action: Action) returns(binding: ♻ gamepad → Gamepad_Event_Binding)\n action `sync` delete(binding: ♻ gamepad → Gamepad_Event_Binding)\n }\n #zDeKtzLCNCj9mWEr resolve game = ♻ game with {\n }\n}\n#xSTcRyh4flfGg1AZ meta import game_animations {\n pub \"nehv\"\n usage {\n action `async` splatter(sprite: Sprite, splatter: Picture)\n action `sync` add_score(sprite: Sprite, score: Number)\n }\n #QG0x2FmWdJxIAUPl resolve game = ♻ game with {\n }\n}\n#ZY2qZ7leUTySclE6\nvar monster : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/mezojwug\";\n transient = true;\n}\n", "enyra": "meta version \"v2.2,js,ctx,refs,localcloud,unicodemodel,allasync\";\nmeta name \"blank scratch\";\nmeta icon \"Flag\";\nmeta color \"#ffffa500\";\nmeta rootId \"DW2rPXfOGG0eQFu92NcRb5TE\";\nmeta platform \"current\";\n// #scratch\n#mNUzNyy2wxUPIVGaxSd7qyIc\naction main() {\n skip;\n}\n#scratch meta import scratch {\n pub \"cagwa\"\n usage {\n type scratch_sprite\n action `sync` new_sprite(pic: Picture) returns(sprite: ♻ scratch → scratch_sprite)\n action `async` move(sprite: ♻ scratch → scratch_sprite, steps: Number)\n action `async` say_for(sprite: ♻ scratch → scratch_sprite, text: String, seconds: Number)\n action `sync` play_sound(sound: Sound)\n action `async` play_sound_until_done(sound: Sound)\n action `async` turn_left(sprite: ♻ scratch → scratch_sprite, degrees: Number)\n action `async` turn_right(sprite: ♻ scratch → scratch_sprite, degrees: Number)\n action `sync` x_position(sprite: ♻ scratch → scratch_sprite) returns(x: Number)\n action `sync` y_position(sprite: ♻ scratch → scratch_sprite) returns(y: Number)\n action `sync` grid()\n action `async` change_x_by(sprite: ♻ scratch → scratch_sprite, amount: Number)\n action `async` change_y_by(sprite: ♻ scratch → scratch_sprite, amount: Number)\n action `sync` set_y_to(sprite: ♻ scratch → scratch_sprite, y: Number)\n action `sync` set_x_to(sprite: ♻ scratch → scratch_sprite, x: Number)\n action `sync` direction(sprite: ♻ scratch → scratch_sprite) returns(d: Number)\n action `async` point_in_direction(sprite: ♻ scratch → scratch_sprite, degrees: Number)\n action `async` glide_to(sprite: ♻ scratch → scratch_sprite, duration: Number, x: Number, y: Number)\n action `async` go_to_x_y(sprite: ♻ scratch → scratch_sprite, x: Number, y: Number)\n action `async` show(sprite: ♻ scratch → scratch_sprite)\n action `async` hide(sprite: ♻ scratch → scratch_sprite)\n action `async` change_size_by(sprite: ♻ scratch → scratch_sprite, amount: Number)\n action `sync` size(sprite: ♻ scratch → scratch_sprite) returns(size: Number)\n action `async` wait(seconds: Number)\n action `sync` mouse_down\\u003f() returns(b: Boolean)\n action `sync` mouse_y() returns(x: Number)\n action `sync` mouse_x() returns(x: Number)\n action `sync` pick_random(start: Number, end: Number) returns(r: Number)\n action `sync` user_name() returns(name: String)\n action `sync` user_picture() returns(pic: Picture)\n action `sync` ask_and_wait(text: String) returns(answer: String)\n action `sync` go_to_front(sprite: ♻ scratch → scratch_sprite)\n action `sync` go_back(sprite: ♻ scratch → scratch_sprite, layers: Number)\n action `sync` if_on_edge\\u002c_bounce(sprite: ♻ scratch → scratch_sprite)\n action `sync` switch_backdrop_to(backdrop: Picture)\n action `sync` current_time() returns(now: DateTime)\n action `sync` when_clicked(sprite: ♻ scratch → scratch_sprite, clicked: Action)\n action `sync` distance_to(sprite: ♻ scratch → scratch_sprite, other: ♻ scratch → scratch_sprite) returns(d: Number)\n action `sync` point_towards(sprite: ♻ scratch → scratch_sprite, other: ♻ scratch → scratch_sprite)\n action `sync` mouse\\u002dpointer() returns(m: ♻ scratch → scratch_sprite)\n action `sync` timer() returns(t: Number)\n action `sync` reset_timer()\n action `sync` when_backdrop_clicked(clicked: Position_Action)\n action `async` go_to(sprite: ♻ scratch → scratch_sprite, other: ♻ scratch → scratch_sprite)\n action `async` next_costume(sprite: ♻ scratch → scratch_sprite)\n action `async` add_costume(sprite: ♻ scratch → scratch_sprite, pic: Picture)\n action `async` say(sprite: ♻ scratch → scratch_sprite, text: String)\n action `sync` when_flag_clicked(clicked: Action)\n action `sync` create_clone(sprite: ♻ scratch → scratch_sprite) returns(clone: ♻ scratch → scratch_sprite)\n action `sync` touching(sprite: ♻ scratch → scratch_sprite, other: ♻ scratch → scratch_sprite) returns(b: Boolean)\n action `sync` x_speed(sprite: ♻ scratch → scratch_sprite) returns(vx: Number)\n action `sync` y_speed(sprite: ♻ scratch → scratch_sprite) returns(y: Number)\n action `sync` change_speed_x_by(sprite: ♻ scratch → scratch_sprite, amount: Number)\n action `sync` change_speed_y_by(sprite: ♻ scratch → scratch_sprite, amount: Number)\n action `sync` x_acceleration(sprite: ♻ scratch → scratch_sprite) returns(ax: Number)\n action `sync` y_acceleration(sprite: ♻ scratch → scratch_sprite) returns(ay: Number)\n action `sync` change_x_acceleration_by(sprite: ♻ scratch → scratch_sprite, amount: Number)\n action `sync` change_y_acceleration_by(sprite: ♻ scratch → scratch_sprite, amount: Number)\n action `sync` set_x_speed_to(sprite: ♻ scratch → scratch_sprite, speed: Number)\n action `sync` set_y_speed_to(sprite: ♻ scratch → scratch_sprite, speed: Number)\n action `sync` set_x_acceleration_to(sprite: ♻ scratch → scratch_sprite, acceleration: Number)\n action `sync` set_y_acceleration_to(sprite: ♻ scratch → scratch_sprite, acceleration: Number)\n action `sync` forever(@action: Action)\n action `sync` friction(sprite: ♻ scratch → scratch_sprite) returns(f: Number)\n action `sync` set_friction_to(sprite: ♻ scratch → scratch_sprite, friction: Number)\n action `sync` when_swipped(sprite: ♻ scratch → scratch_sprite, swiped: Vector_Action)\n action `sync` when_backdrop_swiped(swiped: Vector_Action)\n action `sync` device_x_acceleration() returns(dev_ax: Number)\n action `sync` device_y_acceleration() returns(dev_ay: Number)\n action `sync` bounce_on_edges()\n action `async` set_size_to(sprite: ♻ scratch → scratch_sprite, percent: Number)\n action `async` clear()\n action `sync` pen_down(sprite: ♻ scratch → scratch_sprite)\n action `sync` pen_up(sprite: ♻ scratch → scratch_sprite)\n action `sync` set_pen_color_to(sprite: ♻ scratch → scratch_sprite, c: Color)\n action `sync` set_pen_color_to_wheel(sprite: ♻ scratch → scratch_sprite, c: Number)\n action `sync` change_pen_color_by(sprite: ♻ scratch → scratch_sprite, amount: Number)\n action `sync` set_pen_size_to(sprite: ♻ scratch → scratch_sprite, size: Number)\n action `sync` change_pen_size_by(sprite: ♻ scratch → scratch_sprite, amount: Number)\n action `sync` stamp(sprite: ♻ scratch → scratch_sprite)\n action `sync` join(left: String, right: String) returns(s: String)\n action `sync` letter_of(index: Number, s: String) returns(c: String)\n action `sync` length(s: String) returns(r: Number)\n action `sync` stop_all()\n action `async` new_rectangle_sprite(color: Color, width: Number, height: Number) returns(sprite: ♻ scratch → scratch_sprite)\n action `sync` key_pressed\\u003f(key: String) returns(b: Boolean)\n action `sync` when_key_pressed(key: String, @action: Action)\n }\n}\n", +"etti": "meta version \"v2.2,js,ctx,refs,localcloud,unicodemodel,allasync,upperplex\";\nmeta name \"blank minecraft steve\";\nmeta color \"#ffffffff\";\nmeta rootId \"nHs55hVQebfHsdRXLqdn6Z3u\";\nmeta iconArtId \"zpybrwpw\";\nmeta allowExport \"yes\";\nmeta hasIds \"yes\";\nmeta platform \"accelerometer,location,musicandsounds,network,orientation,shell\";\nmeta parentIds \"\";\n// A Minecraft Steve app #minecraft #steve #turtle\n#ew46jSsSq5jX27bx\naction main() {\n #C5Nw6Q63PHrMOwzg @\\u267b→steve→change_block(\"tnt\");\n #PP9GM4o5xyjrF9bc @\\u267b→steve→move_forward(5);\n}\n#xjJWPhuXXYNcd717 meta import steve {\n pub \"kjinc\"\n usage {\n\n action `async` move_forward(blocks: Number)\n action `async` turn_left(angle: Number)\n action `async` turn_right(angle: Number)\n action `async` move_back(blocks: Number)\n action `async` change_block(name: String)\n action `async` fly_down(blocks: Number)\n action `async` fly_up(blocks: Number)\n action `async` position() returns(x: Number, z: Number)\n action `async` fly_mode()\n action `async` build_cube(sides: Number)\n action `async` build_tower(sides: Number, height: Number)\n action `async` wipe_out()\n action `async` mine(blocks: Number)\n action `async` ground_height() returns(y: Number)\n action `async` walk_mode()\n action `async` dig_mode()\n action `async` block() returns(kind: String)\n action `async` chat(msg: String)\n action `async` add_checkpoint(id: String)\n action `async` go_to_checkpoint(id: String)\n action `async` build_walls()\n }\n #xmPPKkVEJW5oafB1 resolve turtle = ♻ turtle with {\n }\n #n20JN4HoRDpuPqS7 resolve minecraft_pi = ♻ minecraft_pi with {\n }\n #gkFPFcj0NktKP08U resolve shell = ♻ shell with {\n }\n}\n#avbYmXsE1IUcMn6R meta import turtle {\n pub \"auwmg\"\n usage {\n type Maze\n\n action `async` pen_down()\n action `async` pen_up()\n action `async` move_to(x: Number, y: Number)\n action `async` forward(steps: Number)\n action `async` left_turn(angle: Number)\n action `async` set_pen_color(c: Color)\n action `async` xcor() returns(x: Number)\n action `async` ycor() returns(y: Number)\n action `async` heading() returns(a: Number)\n action `async` world_width() returns(w: Number)\n action `async` world_height() returns(h: Number)\n action `async` set_heading(angle: Number)\n action `async` set_pen_size(thickness: Number)\n action `async` right_turn(angle: Number)\n action `async` circle(radius: Number)\n action `async` world_board() returns(board: Board)\n action `async` turn_to(dx: Number, dy: Number)\n action `async` world_picture() returns(pic: Picture)\n action `async` set_speed(steps_per_second: Number)\n action `async` go_home()\n action `async` back(steps: Number)\n action `async` pen_size() returns(size: Number)\n action `async` clean()\n action `async` clear_screen()\n action `async` speed() returns(v: Number)\n action `async` set_xy(xcor: Number, ycor: Number)\n action `async` set_x(xcor: Number)\n action `async` set_y(ycor: Number)\n action `async` pen_color() returns(c: Color)\n action `async` color_under() returns(c: Color)\n action `async` save_picture()\n action `async` xy() returns(x: Number, y: Number)\n action `async` touch_xy() returns(tx: Number, ty: Number)\n action `async` grid()\n action `async` fast()\n action `async` stamp()\n action `async` set_turtle_picture(pic: Picture)\n action `async` set_turtle_opacity(opacity: Number)\n action `async` trail()\n action `async` add_obstacle(maze: ♻ turtle → Maze, x: Number, y: Number, width: Number, height: Number, c: Color)\n action `async` set_goal(maze: ♻ turtle → Maze, x: Number, y: Number, radius: Number, c: Color)\n action `async` maze() returns(maze: ♻ turtle → Maze)\n action `async` lock(maze: ♻ turtle → Maze)\n action `async` history() returns(commands: String)\n action `async` clear_history()\n action `sync` on_command(command: Text_Action)\n action `async` add_way_point(maze: ♻ turtle → Maze)\n action `async` on_collision(maze: ♻ turtle → Maze, collision: Action)\n action `async` interactive()\n action `async` on_move(@action: Action)\n action `async` set_raster(value: Boolean)\n }\n}\n#N0dQjhcc8OySnSbe meta import minecraft_pi {\n pub \"mznoa\"\n usage {\n #BVGhpbmca\n table Block_Options {\n type = \"Object\";\n exported = true;\n persistent = false;\n fields {\n // Gets the block state\n #xNQF2IfWS5kUTCuC state : Number\n // Picks a wool color if applicable.\n // {hints:white,orange,magenta,light blue,yellow,lime,pink,grey,light grey,cyan,purple,blue,brown,green,red,black}\n #xUNtn4WzFNh0J275 wool_color : String\n }\n }\n #xIIDIryL3GdLzzFH\n table Connect_Options {\n type = \"Object\";\n exported = true;\n persistent = false;\n fields {\n // Minecraft Server internet host\n #IhKVKMjdA949jNr3 host : String\n // Minecraft PI port (default 4711)\n #PQgsvjixlAlu49Bw port : Number\n // Address of the web socket proxy\n #nlMXsJlluWZB1fNN proxy : String\n }\n }\n type Entity\n #umgRs0Idq3y9jRyc\n table Block_Event {\n type = \"Object\";\n exported = true;\n persistent = false;\n fields {\n #SCV1txxxrjigP8XC kind : String\n #UIy6UFvY6WJWDDoA x : Number\n #wWASeEjKJDoiqrL2 y : Number\n #MkoIqcTcP3QiIoot z : Number\n #kYCW4sVB0Q5jQy0Q face : Number\n #EayHvTpmMjNF3Sfh entity : ♻ minecraft_pi → Entity\n }\n }\n\n action `async` connect(options\\u003f: ♻ minecraft_pi → Connect_Options)\n action `async` set_block(x: Number, y: Number, z: Number, name: String, options\\u003f: ♻ minecraft_pi → Block_Options)\n action `async` set_many_blocks(x: Number, y: Number, z: Number, x2: Number, y2: Number, z2: Number, name: String, options\\u003f: ♻ minecraft_pi → Block_Options)\n action `async` block(x: Number, y: Number, z: Number) returns(name: String, state: Number)\n action `async` height(x: Number, z: Number) returns(y: Number)\n action `async` chat(msg: String)\n action `async` position(entity: ♻ minecraft_pi → Entity) returns(x: Number, y: Number, z: Number)\n action `async` set_position(entity: ♻ minecraft_pi → Entity, x: Number, y: Number, z: Number)\n action `async` events_clear()\n action `async` event_block_hits() returns(hits: Collection[ ♻ minecraft_pi → Block_Event])\n action `sync` is_connected() returns(r: Boolean)\n action `async` player_() returns(steve: ♻ minecraft_pi → Entity)\n action `async` players() returns(players: Collection[ ♻ minecraft_pi → Entity])\n action `async` direction(entity: ♻ minecraft_pi → Entity) returns(d: Number)\n action `async` rotation(entity: ♻ minecraft_pi → Entity) returns(d: Number)\n action `async` pitch(entity: ♻ minecraft_pi → Entity) returns(d: Number)\n action `async` player_by_name(name: String) returns(steve: ♻ minecraft_pi → Entity)\n }\n #gNAc4g4iSTkZHWeT resolve shell = ♻ shell with {\n }\n}\n#qCJBh3ACKHsrS9Hz meta import shell {\n pub \"ohymc\"\n usage {\n #BdGhpbmca\n table Exec_Output {\n type = \"Object\";\n exported = true;\n persistent = false;\n fields {\n #YaaLgMz45N5ZuAeU success : Boolean\n #qrwQiGIhHhUhb8AF error : String\n #ijyQCE4KPQL2ziZD code : Number\n #wf4AkGfhLyWkyKhQ stdout : String\n #ZyLfqXXM99R1znCa stderr : String\n }\n }\n type Command_Result\n type Shell_Socket\n\n action `async` write_file(path: String, content: String) returns(res: ♻ shell → Command_Result)\n action `sync` mkpath(folder: String, name: String) returns(path: String)\n action `async` mkdir(path: String) returns(res: ♻ shell → Command_Result)\n action `async` exec(cmd: String, cwd: String) returns(res: ♻ shell → Exec_Output)\n action `sync` logger() returns(logger: App_Logger)\n action `async` exec_file(cmd: String, args: Collection[String], cwd: String) returns(res: ♻ shell → Exec_Output)\n action `async` python_env() returns(res: ♻ shell → Command_Result)\n action `async` tcp_connect(host: String, port: Number) returns(sock: ♻ shell → Shell_Socket)\n action `async` receive(sock: ♻ shell → Shell_Socket) returns(netdata: String)\n action `async` send(sock: ♻ shell → Shell_Socket, netdata: String)\n action `async` close(sock: ♻ shell → Shell_Socket)\n }\n}\n", "exvp": "meta version \"v2.2,js,ctx,refs,localcloud,unicodemodel,allasync\";\nmeta name \"blank office mix\";\nmeta icon \"AddressBook\";\nmeta rootId \"w0BIoDnMjckDm4IxHPWUL5LO\";\nmeta allowExport \"yes\";\nmeta platform \"current\";\n#theme meta import theme {\n pub \"gnvi\"\n usage {\n action `async` title_1()\n action `async` title_2()\n action `async` title_3()\n action `async` subtle()\n action `async` normal()\n action `sync` example()\n action `async` accent()\n action `async` set_right_aligned(value: Boolean)\n action `async` huge()\n }\n}\n#main\naction slideshow_view(\\u2756: * slideshow_view_page_data) {\n if box→is_init then {\n code→load_settings;\n }\n if true then {\n // We show the question taken as input in the Edit Mode. The answer is passed to the Input Activity created in Edit Mode (and referred by index `0`).\n do box {\n data→settings→question→post_to_wall;\n }\n @\\u267b→forms→input_text_area(\"\", $\\u2756→text→\\u25c8ref);\n @\\u267b→forms→button(\"submit\", $on_tapped);\n where on_tapped() {\n $slideshow := @\\u267b→office_mix→current_viewer;\n $slideshow→complete_input_activity(0, $\\u2756→text, 1, true);\n $slideshow→next_slide;\n }\n }\n meta private;\n meta page;\n meta sync;\n}\n#BbWFpbiBwYWdlIGRhdGEa\ntable slideshow_view_page_data {\n type = \"Object\";\n persistent = false;\n fields {\n #mxIky6R9ZTE4uS48eYA6Q8jB text : String\n }\n}\n#YZGaVg1jhqq9sfncCGsIoHbh meta import forms {\n pub \"rwffb\"\n usage {\n action `sync` `type` display_code()\n action `sync` `type` validator(s: String) returns(error: String)\n action `sync` button(text: String, on_tapped: Action)\n action `sync` checkbox(text: String, checked: Ref[Boolean])\n action `sync` show_example()\n action `sync` input_string_collection(label: String, strings: String_Collection)\n action `sync` input_text_line(label: String, text: Ref[String])\n action `sync` input_text_area(label: String, text: Ref[String])\n action `sync` input_password(label: String, password: Ref[String])\n action `sync` input_number(label: String, text: Ref[String], changehandler: Number_Action)\n action `sync` labeled_content(label: String, content: display_code)\n action `sync` indented_content(content: display_code)\n action `sync` input_choice(label: String, choices: String_Collection, index: Ref[Number])\n action `sync` input_text_line_w\\u002f_validator(label: String, text: Ref[String], errorcheck: validator, changehandler: Text_Action)\n }\n}\n#LHF2iIBnkOQcwhcoQKFiR4A2 meta import widgets {\n pub \"abgjb\"\n usage {\n action `sync` message(user: User, dt: DateTime, text: String)\n action `sync` picture(url: String)\n }\n}\n#iDxzKDq4042OKy7IX4V4D91F meta import layout {\n pub \"cwgn\"\n usage {\n action `sync` stretch_and_center()\n action `async` grid_of_squares(cell_content: Number_Action, count: Number, grid_width: Number, grid_height: Number)\n action `async` horizontal_hub_of_squares(cell_content: Number_Action, count: Number, cell_size: Number, group_width: Number, total_height: Number)\n action `async` vertical_hub_of_squares(cell_content: Number_Action, count: Number, cell_size: Number, total_width: Number, group_height: Number)\n }\n}\n#BdGhpbmca\ntable Settings {\n type = \"Object\";\n persistent = false;\n fields {\n #qkFSUVeLWy15xGwkOSkxcgi8 question : String\n }\n}\n#xlTdxT5HNK4dNq8WHyG47gDw\naction main() {\n // See `Office Mix` library for more documentation.\n @\\u267b→office_mix→connect;\n if @\\u267b→office_mix→is_edit_mode then {\n // `Edit Mode` is activated when the user opens your app while making the slides.\n code→settings_view;\n }\n else { if @\\u267b→office_mix→is_view_mode then {\n // `View Mode` is fired when the slide containing your app is activated on a slideshow or in Mix lesson player.\n code→slideshow_view;\n }\n else { } } \n}\n#megDAnWFZthpuq80jwFuWisO\nvar settings : * Settings {\n // Add fields that need to be stored for the configuration of the app.\n transient = true;\n}\n#UW3iOsSblj12g3meTHz4P9yV\naction settings_view(\\u2756: * settings_view_page_data) {\n if box→is_init then {\n code→load_settings;\n wall→set_subtitle(\"settings\");\n }\n if true then {\n // This app stores a question from the user.\n @\\u267b→forms→input_text_area(\"Question\", data→settings→question→\\u25c8ref);\n @\\u267b→forms→button(\"save\", $on_tapped);\n where on_tapped() {\n code→save_settings;\n }\n }\n meta private;\n meta page;\n meta sync;\n}\n#BICBuYW1lICAa\ntable settings_view_page_data {\n type = \"Object\";\n persistent = false;\n}\n#Ofpos6ZVH8Uq4wNIrVcx6Oj5\naction save_settings() {\n $editor := @\\u267b→office_mix→current_editor;\n // The index of an activity is a unique number to reference it. The expected answer is optional and is used by Office Mix analytics.\n // Custom data is any data that you need while the app starts in View Mode. In this particular script, it is the `question` set by the user.\n $editor→set_input_activity(0, \"\", 1, data→settings→to_json);\n meta private;\n}\n#TyCJn9KTtksCY1nxdUpgB18L\naction load_settings() {\n $js := @\\u267b→office_mix→current_configuration(0);\n data→settings := records→Settings→create;\n if not $js→is_invalid then {\n data→settings→from_json($js);\n }\n else {\n code→default_settings;\n }\n meta private;\n}\n#XOVEmidye5OpPaWMlmI6njTk\naction default_settings() {\n // This is the sample question to be used if no configuration is provided in `Edit Mode`\n data→settings→question := \"Edit me to set the question\";\n meta private;\n meta sync;\n}\n#h2r1rbrbC280iZiz2Hvcq740 meta import office_mix {\n pub \"smola\"\n usage {\n type viewer\n type editor\n type choice\n action `async` slide_state(viewer: ♻ office_mix → viewer) returns(js: Json_Object)\n action `async` set_slide_state(viewer: ♻ office_mix → viewer, state: Json_Object)\n action `async` next_slide(viewer: ♻ office_mix → viewer)\n action `async` complete_simple_activity(viewer: ♻ office_mix → viewer, index: Number)\n action `async` current_viewer() returns(viewer: ♻ office_mix → viewer)\n action `async` connect()\n action `async` current_editor() returns(editor: ♻ office_mix → editor)\n action `sync` is_edit_mode() returns(b: Boolean)\n action `sync` is_connected() returns(connected: Boolean)\n action `sync` is_view_mode() returns(b: Boolean)\n action `async` current_configuration(index: Number) returns(js: Json_Object)\n action `async` set_simple_activity(editor: ♻ office_mix → editor, index: Number, custom_data: Json_Object)\n action `async` set_input_activity(editor: ♻ office_mix → editor, index: Number, answer: String, max_score: Number, custom_data: Json_Object)\n action `async` complete_input_activity(viewer: ♻ office_mix → viewer, index: Number, answer: String, score: Number, is_complete: Boolean)\n action `async` set_choice_activity(editor: ♻ office_mix → editor, index: Number, choices: Collection[ ♻ office_mix → choice], max_score: Number, custom_data: Json_Object)\n action `sync` create_choices(editor: ♻ office_mix → editor) returns(choices: Collection[ ♻ office_mix → choice])\n action `sync` add_choice(choices: Collection[ ♻ office_mix → choice], name: String, is_answer: Boolean)\n action `async` complete_choice_activity(viewer: ♻ office_mix → viewer, index: Number, answer: String_Collection, score: Number, is_complete: Boolean)\n action `async` start_attempt(viewer: ♻ office_mix → viewer, index: Number, type: String)\n action `async` add_hints(editor: ♻ office_mix → editor, index: Number, hints: String_Collection)\n action `async` get_hint(viewer: ♻ office_mix → viewer, index: Number, hint_index: Number) returns(hint: String)\n action `sync` is_run_locally() returns(b: Boolean)\n action `async` on_skip_slide(viewer: ♻ office_mix → viewer, @action: Action)\n }\n}\n", "fjsc": "meta version \"v2.2,js,ctx,refs,localcloud,unicodemodel,allasync\";\nmeta name \"faq\";\nmeta rootId \"NvlICz4I1I4g3L6rdvkN1Sb4\";\nmeta hasIds \"yes\";\nmeta platform \"current\";\nmeta parentIds \"\";\n// Frequently asked questions. #docs #faq\n#main\naction main() {\n #pfDKPZiTONFucbOz // {parentTopic:contents}\n #rKH7VYjeSZ5qTv4I // ### who created TouchDevelop\n #kWnrfxiKMJ4aYPsI // TouchDevelop is developed by the Research in Software Engineering group (RiSE) at Microsoft Research. [Learn more about our research...](http://research.microsoft.com/touchdevelop)\n #egrX5Ed4mYOl7Bth // ### why was TouchDevelop created\n #gEGMxxU9wvoQlver // We want to explore how the future of software development might look like when the most commonly accessible computing devices are mobile devices. We have found that TouchDevelop is a great way to learn or teach programming.\n #pmZW7gwSpCwvSeBk // ### what browsers and devices does TouchDevelop run on?\n #Gqsjd4PJ7qF7a0UK // The TouchDevelop Web App runs on [virtually all recent platforms](https://www.touchdevelop.com/platforms), including iPad, iPhone, Android (phones and tablets), Macs, PC. For the Windows Phone, you can download the [TouchDevelop app from the Windows Phone Store](http://windowsphone.com/s?appId=fe08ccec-a360-e011-81d2-78e7d1fa76f8).\n #bigUk0bn4RM2dCYR // ### does TouchDevelop replace other professional IDEs?\n #ohexDxybnieKiV0T // TouchDevelop has been designed for mobile devices with touchscreens. While it can also be used with keyboard and mouse, you still want to use professional development tools when you have the resources.\n #YWFFlzEAXfYkdY88 // ### how do I create Windows/Windows Phone/Android/iOS apps?\n #xdUdmLFEFOLeF1cA // Follow the instructions in [export to app](/exporttoapp).\n #xmTE4RGGcQR3sKzQ // ### what about the TouchDevelop Windows Phone app\n #PtmBA5LLot5CBSoc // The TouchDevelop Windows Phone app was the first to launch in April 2011. The TouchDevelop Web App Preview was launched in October 2012. Certain sensors and data providers that can be used in the TouchDevelop Windows Phone app and generated Windows 8 apps are not accessible on the web due to browser restrictions.\n #ojIFVLpIRq4h9Vxv // ### does TouchDevelop work offline?\n #Q5zmZEpbcPASdM4H // Yes! After you run the web app once, it will be cached on your device. [learn more...] (/offlinesupport)\n #NPgmp4E1zKDUWzci // ### how can I change the language of TouchDevelop?\n #jmGZ4cLweV6NmbgY // Go to your [account settings](/accountsettings) and change your preferred language. TouchDevelop is not yet localized in all languages so your mileage will vary.\n #RuC7HRkZBa31lEwn // ### does TouchDevelop work in my language?\n #f1cC43ALRBBO76r5 // TouchDevelop is partially localized. Help us localize TouchDevelop by playing the [localization game](http://touchdeveloptranslator.azurewebsites.net/)!\n #CaQzOPGewL8pVAUE // TouchDevelop will also automatically translate the help into your language using Microsoft Translator.\n #uVYmmkB4gCGsybvf // ### how was the TouchDevelop Web App created?\n #rWI2639IS1nEOZXu // The TouchDevelop Web App is written in Type Script. [Watch this video from the //build/ conference](http://channel9.msdn.com/Events/Build/2012/3-018) to learn more.\n #zMkQvwvtUNp76J2L // ### how do I report bugs or contact the TouchDevelop team?\n #ul12npnsSIJDd4AI // Tap on the `feedback` link on the lower right of this page.\n}\n", "gexxa": "meta version \"v2.2,js,ctx,refs,localcloud,unicodemodel,allasync,upperplex\";\nmeta name \"blank azure web api\";\nmeta icon \"Stacks\";\nmeta color \"#ffffffff\";\nmeta rootId \"x4mibwzdISu8zLeLgg7b3IKt\";\nmeta iconArtId \"wyfreugv\";\nmeta isLibrary \"yes\";\nmeta allowExport \"yes\";\nmeta isCloud \"yes\";\nmeta hasIds \"yes\";\nmeta platform \"network,npm,shell\";\nmeta parentIds \"\";\n// An Azure web api using Restify. #node #azure #restify #rest #api\n#xSBmyyFcqCDRZi1l meta import azure_storage {\n pub \"fwer\"\n usage {\n type @table\n type table_query\n action `async` init()\n action `async` create_private_table_if_not_exists(name: String) returns(@table: ♻ azure_storage → @table)\n action `async` insert_entity(@table: ♻ azure_storage → @table, entity: Json_Object, when_present: String)\n action `async` update_entity(@table: ♻ azure_storage → @table, entity: Json_Object, mode: String)\n action `async` try_update_entity(@table: ♻ azure_storage → @table, entity: Json_Object, mode: String) returns(ok: Boolean)\n action `async` delete_entity(@table: ♻ azure_storage → @table, entity: Json_Object)\n action `sync` create_entity(PartitionKey: String, RowKey: String) returns(entity: Json_Builder)\n action `async` delete_table(@table: ♻ azure_storage → @table)\n action `sync` create_query(@table: ♻ azure_storage → @table) returns(query: ♻ azure_storage → table_query)\n action `sync` @top(query: ♻ azure_storage → table_query, count: Number) returns(res_query: ♻ azure_storage → table_query)\n action `sync` @where(query: ♻ azure_storage → table_query, expression: String, argument: String) returns(res_query: ♻ azure_storage → table_query)\n action `sync` partition_key_is(query: ♻ azure_storage → table_query, PartitionKey: String) returns(res_query: ♻ azure_storage → table_query)\n action `sync` @and(query: ♻ azure_storage → table_query, expression: String, argument: String) returns(res_query: ♻ azure_storage → table_query)\n action `sync` @or(query: ♻ azure_storage → table_query, expression: String, argument: String) returns(res_query: ♻ azure_storage → table_query)\n action `async` get_entity(@table: ♻ azure_storage → @table, PartitionKey: String, RowKey: String) returns(result: Json_Object)\n action `sync` page_size(query: ♻ azure_storage → table_query, count: Number) returns(res_query: ♻ azure_storage → table_query)\n action `async` execute(query: ♻ azure_storage → table_query) returns(entities: Json_Object)\n action `sync` create_log_id() returns(id: String)\n action `sync` create_random_id(size: Number) returns(id: String)\n }\n}\n#czWG9NcXY9uFZHMz\naction \\_init() {\n #bMLhngb94mCl87BE // This action runs when the web server starts up. To deploy this service, go to the script settings, then tap `[Azure]` under `[export to app]`.\n #rg6M5H46J1bK4x8c data→logger := app→create_logger(\"myweb\");\n #x2Y2gFv2oHeZKjaB code→init_restify;\n #fmCQZR9L4MGzZxju code→init_azure_services;\n #z1Taq8ixDqqUfh2n data→logger→info(\"started...\");\n}\n#FrNAgtgAKnFVC43t\naction GET_\\u002fping() returns(#aM0QoLDaWxwAlfSy millis: Number) {\n #xzy3cNZXu2Lbz9f2 // Returns the number of milliseconds since epoch.\n #IYDlx4xcyWX5wD4m $millis := time→now→milliseconds_since_epoch;\n}\n#xEtQAQTr2kEKR4Qd meta import azure_search {\n pub \"acqbc\"\n usage {\n type Index_Definition\n type Index\n type Batch_Update\n type Field_Definition\n type Scoring_Profile\n action `async` create_or_update(schema: ♻ azure_search → Index_Definition) returns(index: ♻ azure_search → Index)\n action `sync` create_batch_update(index: ♻ azure_search → Index) returns(update: ♻ azure_search → Batch_Update)\n action `sync` upload(update: ♻ azure_search → Batch_Update, key: String) returns(doc: Json_Builder)\n action `sync` merge(update: ♻ azure_search → Batch_Update, key: String) returns(doc: Json_Builder)\n action `sync` delete(update: ♻ azure_search → Batch_Update, key: String)\n action `async` send(update: ♻ azure_search → Batch_Update) returns(status_code: Number)\n action `async` init(service_name: String, api_key: String, api_version: String)\n action `async` delete_index(index: ♻ azure_search → Index) returns(deleted: Boolean)\n action `async` statistics(index: ♻ azure_search → Index) returns(document_count: Number, storage_size: Number)\n action `sync` action_count(update: ♻ azure_search → Batch_Update) returns(count: Number)\n action `sync` create_index_definition(index_name: String, key_name: String) returns(schema: ♻ azure_search → Index_Definition)\n action `sync` add_field(schema: ♻ azure_search → Index_Definition, name: String, type: String) returns(field: ♻ azure_search → Field_Definition)\n action `sync` set_searchable(field: ♻ azure_search → Field_Definition, value: Boolean)\n action `sync` set_filterable(field: ♻ azure_search → Field_Definition, value: Boolean)\n action `sync` set_sortable(field: ♻ azure_search → Field_Definition, value: Boolean)\n action `sync` set_facetable(field: ♻ azure_search → Field_Definition, value: Boolean)\n action `sync` set_suggestions(field: ♻ azure_search → Field_Definition, value: Boolean)\n action `sync` set_retrievable(field: ♻ azure_search → Field_Definition, value: Boolean)\n action `sync` index_builder(schema: ♻ azure_search → Index_Definition) returns(jsb: Json_Builder)\n action `sync` add_CORS_origin(schema: ♻ azure_search → Index_Definition, origin: String)\n action `sync` update_builder(update: ♻ azure_search → Batch_Update) returns(jsb: Json_Builder)\n action `async` index_definition(index_name: String) returns(schema: Json_Object)\n action `async` indexe_definitions() returns(schema: Json_Object)\n action `sync` add_scoring_profile(index: ♻ azure_search → Index_Definition, name: String) returns(profile: ♻ azure_search → Scoring_Profile)\n action `sync` set_weight(profile: ♻ azure_search → Scoring_Profile, field: ♻ azure_search → Field_Definition, weight: Number)\n action `sync` add_magnitude(profile: ♻ azure_search → Scoring_Profile, field: ♻ azure_search → Field_Definition, boost: Number, interpolation: String, boosting_range_start: Number, boosting_range_end: Number, constant_boost_beyond_range: Boolean)\n action `sync` set_function_aggregation(profile: ♻ azure_search → Scoring_Profile, type: String)\n action `sync` key_field(schema: ♻ azure_search → Index_Definition) returns(key: ♻ azure_search → Field_Definition)\n action `sync` reset(update: ♻ azure_search → Batch_Update)\n action `sync` get(schema: ♻ azure_search → Index_Definition) returns(index: ♻ azure_search → Index)\n }\n}\n#HYf09saPhMlbW1HL meta import azure_service_bus {\n pub \"dxbea\"\n usage {\n #BVGhpbmca\n table Shared_Access_Signature_Options {\n type = \"Object\";\n exported = true;\n persistent = false;\n fields {\n // Authorization rule name; if empty the ``RootManageSharedAccessKey`` is used\n #LZ3fT92mZud9ADXV key_name : String\n // The ``Primary Key`` associated to the Authorization rule. Leave empty for ``RootManageSharedAccessKey``.\n #Z5xeMrnQRfDYLF4h key : String\n // Expiration in seconds from the current time.\n #l9O44Lv51CRijsGx expires_in : Number\n }\n }\n type Topic\n type Queue\n type Queue_Message\n type Subscription\n action `async` init()\n action `async` create_topic_if_not_exists(name: String) returns(topic: ♻ azure_service_bus → Topic)\n action `async` create_queue_if_not_exists(name: String) returns(queue: ♻ azure_service_bus → Queue)\n action `async` send_message(queue: ♻ azure_service_bus → Queue, message: String)\n action `async` delete_queue(queue: ♻ azure_service_bus → Queue)\n action `async` receive_message(queue: ♻ azure_service_bus → Queue) returns(message: String)\n action `async` peek_message(queue: ♻ azure_service_bus → Queue) returns(message: ♻ azure_service_bus → Queue_Message)\n action `async` delete_message(message: ♻ azure_service_bus → Queue_Message)\n action `sync` content(message: ♻ azure_service_bus → Queue_Message) returns(content: String)\n action `async` delete_topic(topic: ♻ azure_service_bus → Topic)\n action `async` send_topic_message(topic: ♻ azure_service_bus → Topic, message: String)\n action `async` create_subscription(topic: ♻ azure_service_bus → Topic, name: String) returns(subscription: ♻ azure_service_bus → Subscription)\n action `async` delete_subscription(subscription: ♻ azure_service_bus → Subscription)\n action `async` receive_subscription_message(subscription: ♻ azure_service_bus → Subscription) returns(message: String)\n action `sync` create_sas_token(entity_path: String, options\\u003f: ♻ azure_service_bus → Shared_Access_Signature_Options) returns(token: String)\n }\n}\n#GtzZ3bQlwmMy9v5o meta import azure_blob_storage {\n pub \"gajza\"\n usage {\n #eQ9ksqF8mc5ykZ0k\n table Create_Options {\n type = \"Object\";\n exported = true;\n persistent = false;\n fields {\n #v2t1qjT74Nc5nEeS etag : String\n #zNv4AFwkrDTt7NE6 force_new : Boolean\n #JEQEgLG1XiOpoNTc just_try : Boolean\n #S4e80DX2Kc4HnE96 contentType : String\n #lqupeQTDrct300uA contentEncoding : String\n #xLEc1tc4MYZOowJi cacheControl : String\n #x7sLNi86uuIjZYsp contentDisposition : String\n }\n }\n type Blob_Service\n type Container\n type Blob_Info\n action `async` init()\n action `sync` create_random_id(size: Number) returns(id: String)\n action `sync` create_blob_service() returns(blob_service: ♻ azure_blob_storage → Blob_Service)\n action `async` create_container_if_not_exists(blob_service: ♻ azure_blob_storage → Blob_Service, container_name: String, permission: String) returns(container: ♻ azure_blob_storage → Container)\n action `async` create_block_blob_from_local_file(container: ♻ azure_blob_storage → Container, blob_name: String, file_path: String) returns(result: ♻ azure_blob_storage → Blob_Info)\n action `async` create_block_blob_from_text(container: ♻ azure_blob_storage → Container, blob_name: String, text: String, options\\u003f: ♻ azure_blob_storage → Create_Options) returns(result: ♻ azure_blob_storage → Blob_Info)\n action `async` get_blob_to_file(container: ♻ azure_blob_storage → Container, blob_name: String, file_path: String) returns(result: ♻ azure_blob_storage → Blob_Info)\n action `async` get_blob_to_text(container: ♻ azure_blob_storage → Container, blob_name: String) returns(info: ♻ azure_blob_storage → Blob_Info)\n action `async` delete_blob(container: ♻ azure_blob_storage → Container, blob_name: String)\n action `async` get_blob_to_buffer(container: ♻ azure_blob_storage → Container, blob_name: String) returns(result: ♻ azure_blob_storage → Blob_Info, buf: Buffer)\n action `async` create_block_blob_from_buffer(container: ♻ azure_blob_storage → Container, blob_name: String, buffer: Buffer, options\\u003f: ♻ azure_blob_storage → Create_Options) returns(result: ♻ azure_blob_storage → Blob_Info)\n action `async` set_service_properties(blob_service: ♻ azure_blob_storage → Blob_Service, properties: Json_Object) returns(result: Json_Object, response: Json_Object)\n action `async` set_cors_properties(blob_service: ♻ azure_blob_storage → Blob_Service, allowed_origins: String, allowed_methods: String, allowed_headers: String, exposed_headers: String, max_age_in_seconds: Number) returns(success: Boolean)\n action `async` service_properties(blob_service: ♻ azure_blob_storage → Blob_Service) returns(result: Json_Object, response: Json_Object)\n action `async` etag(inf: ♻ azure_blob_storage → Blob_Info) returns(etag: String)\n action `async` last_modified(inf: ♻ azure_blob_storage → Blob_Info) returns(lastmod: DateTime)\n action `async` content_md5(inf: ♻ azure_blob_storage → Blob_Info) returns(md5: Buffer)\n action `async` list_blobs(container: ♻ azure_blob_storage → Container, prefix: String) returns(blobs: Collection[ ♻ azure_blob_storage → Blob_Info])\n action `async` name(inf: ♻ azure_blob_storage → Blob_Info) returns(blob_name: String)\n action `sync` get_blob_url(container: ♻ azure_blob_storage → Container, blob_name: String, expires: Number) returns(blob_url: String)\n action `sync` generate_random_id(blob_service: ♻ azure_blob_storage → Blob_Service) returns(id: String)\n action `async` get_blob_properties(container: ♻ azure_blob_storage → Container, blob_name: String) returns(info: ♻ azure_blob_storage → Blob_Info)\n action `async` succeded(inf: ♻ azure_blob_storage → Blob_Info) returns(ok: Boolean)\n action `async` text(inf: ♻ azure_blob_storage → Blob_Info) returns(text: String)\n action `async` error(inf: ♻ azure_blob_storage → Blob_Info) returns(message: String)\n action `async` url(container: ♻ azure_blob_storage → Container) returns(url: String)\n action `async` create_block_blob_from_url(container: ♻ azure_blob_storage → Container, blob_name: String, url: String, options\\u003f: ♻ azure_blob_storage → Create_Options) returns(result: ♻ azure_blob_storage → Blob_Info)\n }\n}\n#a4wL0Lb7xeWxhV4L meta import parallel {\n pub \"fncvb\"\n usage {\n type queue\n action `async` @for(count: Number, @action: Number_Action)\n action `async` for_batched(count: Number, batch_count: Number, item_action: Number_Action, batch_action: Action)\n action `sync` schedule(q: ♻ parallel → queue, task: Action)\n action `sync` create_queue(max_running: Number) returns(queue: ♻ parallel → queue)\n action `async` wait_for_empty(q: ♻ parallel → queue)\n action `async` for_json(js: Json_Object, @action: Json_Action)\n }\n}\n#UOxQdfs1e4yyXvbz meta import redis {\n pub \"szuza\"\n usage {\n type Client\n action `async` create_client(host: String, port: Number, password: String) returns(client: ♻ redis → Client)\n action `async` set(client: ♻ redis → Client, key: String, value: String)\n action `async` get(client: ♻ redis → Client, key: String) returns(value: String)\n action `async` send_command(client: ♻ redis → Client, command: String, args: Json_Object) returns(result: Json_Object)\n action `async` sadd(client: ♻ redis → Client, key: String, value: String) returns(added: Number)\n action `async` scard(client: ♻ redis → Client, key: String) returns(count: Number)\n action `async` smembers(client: ♻ redis → Client, key: String) returns(members: Json_Object)\n action `async` multi(client: ♻ redis → Client) returns(multi: ♻ redis → Client)\n action `async` exec(client: ♻ redis → Client) returns(js: Json_Object)\n }\n}\n#CW3Wao3uu3Z2Fhe6\nvar logger : App_Logger {\n transient = true;\n}\n#nqXVz0rfKvDDnRD4\naction init_azure_services() {\n #OBj6PIXBqnKUsTPb // Initializes Azure Storage, Azure Blob Storage and Azure Service Bus\n #SefRc2WV2N6j47d4 @\\u267b→azure_storage→init;\n #xEz0G2dzTJTWxcUJ @\\u267b→azure_blob_storage→init;\n #zudlvXHTv0hhPwyW data→blob_service := @\\u267b→azure_blob_storage→create_blob_service;\n #MvPpKEWTfR2lF47o @\\u267b→azure_service_bus→init;\n #x471VF7xAMk2DGHB @\\u267b→azure_event_hubs→init;\n #pNmq2bCUAPLYWZdS where sas_token := @\\u267b→azure_service_bus→create_sas_token(\"\");\n meta private;\n}\n#iiySPFknzOIjtFIO\nvar blob_service : ♻ azure_blob_storage → Blob_Service {\n transient = true;\n}\n#rmfzWWMIFG8Ule9I\naction init_restify() {\n #GL26xBm2sW9gi51S $server := @\\u267b→restify→server;\n #q44IvFRo4glW35y4 // plugins\n #eq0FvCwwbob1i3UD $server→use(@\\u267b→restify→authorization_parser);\n #Ee6qD4jb4Xr4TCYg $server→pre(@\\u267b→restify→sanitize_path);\n #xiHn2sJ7jyfBOFLf $throttle := @\\u267b→restify→throttle;\n #ZU1qf4WMSwf2ZZs8 where rate := 40;\n #S04R2349FF42Rb2O where burst := 100;\n #qa878gtstkVP7tTO where ip := true;\n #kld3kZpnFcZ4TVhB $server→use($throttle);\n #sptEZCs70xCB68CA $server→use(@\\u267b→restify→CORS);\n #mFFPDO74C64OWH8s $server→use(@\\u267b→restify→body_parser);\n #xSqpOmBEP6L2VCFi $server→use(@\\u267b→restify→gzip_response);\n #xR4QGtRsV3hGoSJQ $server→use(@\\u267b→restify→query_parser);\n #x9bNZzJ9tZk0l1Z4 $server→use(@\\u267b→restify→conditional_request);\n #buXcIfKig0apgL4x @\\u267b→restify_touchdevelop→autobind($server);\n #jm46Bd6JTW4s4zEU // custom routes\n #B2Ui2S2BrMhefyH4 $server→get(\"/echo\", $@then);\n #c58sWTLqXwkWaboA where @then(req: ♻ restify → Request, res: ♻ restify → Response) {\n #yXsNFxumA3UsfrbL $res→send($req→body);\n }\n #SRHLtK3JrVlEa4dI // error logging\n #UAx1DGb27XEqkYO5 $server→use(@\\u267b→restify_touchdevelop→errors_to_log(data→logger));\n meta private;\n meta sync;\n}\n#KxDl0eU3LpNWTK07 meta import restify {\n pub \"egzra\"\n usage {\n action `async` `type` Request_Handler(req: ♻ restify → Request, res: ♻ restify → Response)\n #xLPhdjOebDT8w77X\n table Throttle_Options {\n type = \"Object\";\n exported = true;\n persistent = false;\n fields {\n #xo6LfV0hyAQtz675 rate : Number\n #yZ2QZAfeW3W74JA1 burst : Number\n #JUlNvDq7Hm9cTUAG ip : Boolean\n #w2h4dcf4I5K5h7kn xff : Boolean\n #RO3Sx6iTt4WsVBm6 username : Boolean\n #VbsYnDvr3t4Xr4VA maxKeys : Number\n #w25h9R5LKJnWiBNu tokensTable : ♻ restify → Tokens_Table\n }\n }\n #xdeuBx505IsZ6eEI\n table Serve_Static_Options {\n type = \"Object\";\n exported = true;\n persistent = false;\n fields {\n #NfWLVJBBbHvtMqkl default : String\n #KvIMj1sEoAwQCf22 maxAge : Number\n }\n }\n #mqEMUbizkEp6naSD\n table CORS_Options {\n type = \"Object\";\n exported = true;\n persistent = false;\n fields {\n #xMYYV6C3eS7PWsfQ origins : String\n #z5HdpFdSi792e1OX credentials : Boolean\n #Fw1D0A9ZfeMCf5c3 headers : String\n }\n }\n #w2zTzWkfMf01yOko\n table Body_Parser_Options {\n type = \"Object\";\n exported = true;\n persistent = false;\n fields {\n #mhaHCLobgUgMrv72 maxBodySize : Number\n #xr4fKleNd4wHHP1l mapParams : Boolean\n #st0ir2vLTxbLTQWB mapFiles : Boolean\n #z5ah2mZWb8c5FmTM overrideParams : Boolean\n }\n }\n #xv4yZciZi2wFoqpM\n table Send_Options {\n type = \"Object\";\n exported = true;\n persistent = false;\n fields {\n #svWYln7UIackFIpB status : Number\n }\n }\n type Request\n type Response\n type Tokens_Table\n type Server\n type Middleware\n type Error\n action `sync` use(server: ♻ restify → Server, mid: ♻ restify → Middleware)\n action `sync` get(server: ♻ restify → Server, path: String, @then: ♻ restify → Request_Handler)\n action `sync` post(server: ♻ restify → Server, path: String, @then: ♻ restify → Request_Handler)\n action `sync` server() returns(server: ♻ restify → Server)\n action `sync` send(res: ♻ restify → Response, content: String, options\\u003f: ♻ restify → Send_Options)\n action `sync` status(res: ♻ restify → Response, status: Number)\n action `sync` is(req: ♻ restify → Request, type: String) returns(r: Boolean)\n action `sync` accepts(req: ♻ restify → Request, types: String) returns(type: String)\n action `sync` put(server: ♻ restify → Server, path: String, @then: ♻ restify → Request_Handler)\n action `sync` del(server: ♻ restify → Server, path: String, @then: ♻ restify → Request_Handler)\n action `sync` head(server: ♻ restify → Server, path: String, @then: ♻ restify → Request_Handler)\n action `sync` pre(server: ♻ restify → Server, mid: ♻ restify → Middleware)\n action `sync` CORS(options\\u003f: ♻ restify → CORS_Options) returns(mid: ♻ restify → Middleware)\n action `sync` conditional_request() returns(mid: ♻ restify → Middleware)\n action `sync` route(server: ♻ restify → Server, method: String, path: String, @then: ♻ restify → Request_Handler)\n action `sync` json(res: ♻ restify → Response, content: Json_Object, options\\u003f: ♻ restify → Send_Options)\n action `sync` next(res: ♻ restify → Response)\n action `sync` next_error(res: ♻ restify → Response, error: ♻ restify → Error)\n action `sync` address(server: ♻ restify → Server) returns(address: String)\n action `sync` gzip_response() returns(mid: ♻ restify → Middleware)\n action `sync` header(req: ♻ restify → Request, name: String) returns(value: String)\n action `sync` is_secure(req: ♻ restify → Request) returns(r: Boolean)\n action `sync` is_chunked(req: ♻ restify → Request) returns(r: Boolean)\n action `sync` is_keep_alive(req: ♻ restify → Request) returns(r: Boolean)\n action `sync` set_header(res: ♻ restify → Response, name: String, value: String)\n action `sync` body_parser(options\\u003f: ♻ restify → Body_Parser_Options) returns(mid: ♻ restify → Middleware)\n action `sync` throttle(options\\u003f: ♻ restify → Throttle_Options) returns(middleware: ♻ restify → Middleware)\n action `sync` date_parser(clock_skew: Number) returns(middleware: ♻ restify → Middleware)\n action `sync` serve_static(directory: String, options\\u003f: ♻ restify → Serve_Static_Options) returns(middleware: ♻ restify → Middleware)\n action `sync` query_parser() returns(middleware: ♻ restify → Middleware)\n action `sync` authorization_parser() returns(middleware: ♻ restify → Middleware)\n action `sync` jsonp() returns(middleware: ♻ restify → Middleware)\n action `sync` body_as_json(req: ♻ restify → Request) returns(body: Json_Object)\n action `sync` id(req: ♻ restify → Request) returns(id: String)\n action `sync` param(req: ♻ restify → Request, name: String) returns(value: String)\n action `sync` opts(server: ♻ restify → Server, path: String, @then: ♻ restify → Request_Handler)\n action `sync` patch(server: ♻ restify → Server, path: String, @then: ♻ restify → Request_Handler)\n action `sync` to_string(ser: ♻ restify → Server) returns(s: String)\n action `sync` sanitize_path() returns(middleware: ♻ restify → Middleware)\n action `sync` body(req: ♻ restify → Request) returns(body: String)\n action `sync` send_error(res: ♻ restify → Response, status: Number, message: String)\n action `sync` all(server: ♻ restify → Server, @then: ♻ restify → Request_Handler)\n action `sync` method(req: ♻ restify → Request) returns(method: String)\n action `sync` url(req: ♻ restify → Request) returns(url: String)\n action `sync` query(req: ♻ restify → Request) returns(query: Json_Object)\n action `sync` redirect(res: ♻ restify → Response, status_code: Number, url: String)\n action `sync` send_status(res: ♻ restify → Response, status_code: Number)\n action `sync` charset(res: ♻ restify → Response, encoding: String)\n action `sync` route_regex(server: ♻ restify → Server, method: String, path_regex: String, @then: ♻ restify → Request_Handler)\n action `async` read_body_as_buffer(req: ♻ restify → Request) returns(body: Buffer)\n action `sync` headers(req: ♻ restify → Request) returns(headers: Json_Object)\n action `sync` server_url(req: ♻ restify → Request) returns(url: String)\n action `sync` html(res: ♻ restify → Response, content: String, options\\u003f: ♻ restify → Send_Options)\n }\n}\n#MLbRHC7j0u4Bo4GQ meta import restify_touchdevelop {\n pub \"dvuhb\"\n usage {\n action `sync` autobind(server: ♻ restify → Server)\n action `sync` errors_to_log(logger: App_Logger) returns(middleware: ♻ restify → Middleware)\n }\n #OzaDw2jYXC1r4oMK resolve restify = ♻ restify with {\n }\n}\n#TdBk0bwqAZoQ4wgf meta import redis_restify {\n pub \"nwilc\"\n usage {\n action `async` token_table(client: ♻ redis → Client) returns(r: ♻ restify → Tokens_Table)\n }\n #xC27OGAP0OidvO0t resolve restify = ♻ restify with {\n }\n #xzLkfsgbifNIKyCp resolve redis = ♻ redis with {\n }\n}\n#om5lHFOhC2ECNCd8 meta import azure_event_hubs {\n pub \"mlxna\"\n usage {\n #qy4yPchAE7AUedlB\n table Options {\n type = \"Object\";\n exported = true;\n persistent = false;\n fields {\n // Name of the event hub\n #BULIHveLGv3xhPGc hub_namespace : String\n // Shared Access Signature token; otherwise the server setting ``AZURE_SERVICEBUS_SAS_TOKEN`` is used.\n #xr7jIhKzmCpq0i5N sas_token : String\n }\n }\n #EyRHf2UILCkoocED\n table Event_Hub {\n type = \"Object\";\n exported = true;\n persistent = false;\n fields {\n #t4VjI1BVPLvcUl22 name : String\n }\n }\n action `sync` init(options\\u003f: ♻ azure_event_hubs → Options)\n action `async` send_message(hub: ♻ azure_event_hubs → Event_Hub, device_id: String, msg: String) returns(status: Number)\n action `async` create_event_hub_if_not_exists(name_: String) returns(hub: ♻ azure_event_hubs → Event_Hub)\n action `async` send_message_as_json(hub: ♻ azure_event_hubs → Event_Hub, device_id: String, msg: Json_Object) returns(status: Number)\n }\n}\n", @@ -27,13 +27,13 @@ "lsrh": "meta version \"v2.2,js,ctx,refs,localcloud,unicodemodel,allasync\";\nmeta name \"blank esplora\";\nmeta icon \"Controller\";\nmeta color \"#ff008000\";\nmeta rootId \"pC5UwMf4G7SPUhesWRaUHyQ6\";\nmeta allowExport \"yes\";\nmeta platform \"current\";\n// An script that gets exported to the Arduino #Esplora board.\n#main\naction setup() {\n skip;\n meta private;\n}\n#rK9jginmrEINvgw7qIb2i66k meta import esplora {\n pub \"xblmc\"\n usage {\n action `sync` millis() returns(ms: Number)\n action `sync` micros() returns(us: Number)\n action `async` delay(ms: Number)\n action `sync` acceleration() returns(p: Vector3)\n action `sync` temperature() returns(p: Number)\n action `sync` light_sensor() returns(light: Number)\n action `sync` slider() returns(pos: Number)\n action `sync` microphone() returns(sound: Number)\n action `sync` is_joystick_button_pressed() returns(b: Boolean)\n action `sync` is_button_pressed(switch_index: Number) returns(b: Boolean)\n action `sync` joystick_x() returns(x: Number)\n action `sync` joystick_y() returns(y: Number)\n action `sync` color() returns(c: Color)\n action `sync` set_color(c: Color)\n action `sync` tone(frequency: Number, ms: Number)\n action `sync` no_tone()\n }\n}\n#r75MjRvGqDKnLhJ9inuyjofK\naction main() {\n // This code emulates the Arduino Esplora runtime. Do not edit.\n code→setup;\n time→on_every_frame($perform);\n where perform() {\n code→loop;\n @\\u267b→esplora→delay(10);\n }\n}\n#OMQT5yM1JrJcj3UdHlpxgTaJ\naction loop() {\n skip;\n meta private;\n}\n", "lyjec": "meta version \"v2.2,js,ctx,refs,localcloud,unicodemodel,allasync\";\nmeta name \"contents\";\nmeta rootId \"xD9L5v3m9GPYhDNjn5CSnE5o\";\nmeta hasIds \"yes\";\nmeta platform \"current\";\nmeta parentIds \"\";\n// Documentation. #docs #content\n#OVgF8idv6dH4kLiKyBNuGLSY\naction main() {\n #xfl4uVD2RY4FWYpg // {priority:1}\n #xyAN4z6sCQKOwHWc // Welcome to TouchDevelop, a friendly **mobile app creation environment**. With TouchDevelop you can create apps on your mobile phone, tablet, and PC, and share the apps you create in the cloud.\n #g3DL66Cb9S0ZegTR // ## contents\n #QOmTj1hDA4y6mKlZ // * [Getting Started](/gettingstarted) Learn more about TouchDevelop, and create your first app!\n #nth3IKoU9pTSwIb1 // * [Language Reference](/language) Dig into the details of coding with TouchDevelop.\n #xNCKcYSczgDz7V9A // * [API Reference](/api) Explore the TouchDevelop API, and learn more about the services, types, and action types.\n #xequzJYQ145qm2Zw // * [Tutorials](/tutorials) Expand your knowledge with lots of great tutorials, from games to connected data sharing apps.\n #iN4Ls0QhUddrt9Dg // * [Social Coding](/socialcoding) Understand how to publish, share, merge your scripts with the TouchDevelop environment.\n #c72LZaRxP2NDOTnK // * [Advanced Topics](/advancedtopics) Move beyond the basics and learn about testing, debugging, performance profiling and more.\n #YHnFwRwN2EXUj90o // * [Teach](/teach) Find out more about creating custom tutorials, and using TouchDevelop in the classroom.\n #ADc1YaDiZ2O74NSJ // * [Games](/games) Discover techniques for creating lots of different types of games.\n #mZEveK8nVUnOOwxh // * [FAQ](/faq) Get answers to your questions with the TouchDevelop FAQ.\n #JHO1xs6a3UF852aE // * [What's New](/whatsnew) Read our release notes for news on the latest features and fixes.\n #ynfwmb0zxcfVhs4p // * [Blog](/blog) subscribe and follow the TouchDevelop community blog\n #x4IdZphhhSfUG283 // ## legal information\n #uvgx7BQH12ER67f9 // By using TouchDevelop you agree to the [Cloud Services Agreement](https://www.touchdevelop.com/legal) with Microsoft Research. Please read our [Privacy Statement](https://www.touchdevelop.com/privacy).\n}\n", "mdrw": "meta version \"v3.0,js,ctx,refs,localcloud,unicodemodel,allasync,replay,partial\";\nmeta name \"blank pixel art\";\nmeta icon \"NineColumn\";\nmeta color \"#ff9955bb\";\nmeta rootId \"VBXALpufM78Zg6nXlU4VkoKX\";\nmeta allowExport \"yes\";\nmeta hasIds \"yes\";\nmeta platform \"current\";\nmeta parentIds \"\";\n// A pixel art script. #pixelart\n#RgqvETdZVOPoT1G4\naction main() {\n #QECmOCB8D9No5rO6 @\\u267b→pixel_art→set_pen_color(colors→random);\n #xO2UVI7FHoavaFrj @\\u267b→pixel_art→paint(8, 8);\n}\n#TTrakYktVjHUznf2 meta import pixel_art {\n pub \"tsrn\"\n usage {\n action `sync` create(terrain: String)\n action `async` test()\n action `sync` set_pen_color(c: Color)\n action `sync` pen_color() returns(c: Color)\n action `async` paint(x: Number, y: Number)\n action `sync` pixel(x: Number, y: Number) returns(c: Color)\n action `sync` sides() returns(cols: Number)\n action `async` test_fail()\n action `async` test_success()\n }\n}\n", +"mfvka": "meta version \"v2.2,js,ctx,refs,localcloud,unicodemodel,allasync,upperplex\";\nmeta name \"touchdevelop local\";\nmeta icon \"GlobeEUA\";\nmeta color \"#ff007fff\";\nmeta rootId \"O6Rs2BjFB4g0ArT2oat8Gpfc\";\nmeta hasIds \"yes\";\nmeta platform \"current\";\nmeta parentIds \"\";\n// Explains how to export a script to the App Store. #docs\n#main\naction main() {\n #YKeb2CW4sOdvQyW9 // {parentTopic:contents}\n #xSh4e5kqwQHcBmkx // It is possible to run TouchDevelop from a local web server on your machine. This allow TouchDevelop to work completely offline, access services required for [app generation](/exporttocordova) or code with [Minecraft](/minecraftpisetup).\n #x35eEyKbLVKI0YGH // ## installation steps\n #juuuaj9Ro2J2Clco // * install [node.js] (http://nodejs.org/)\n #c72W0S2LKE5DVZEb // * create an empty folder for your projects\n #xFRR2AdHdpXNY6Tp // * open a command prompt in your fresh folder and install the **touchdevelop** npm package.\n #hxp4ucOoAsva9ecH // > ``npm install -g http://aka.ms/touchdevelop.tgz``\n #FDTBrovQEeBZm4YP // * launch TouchDevelop locally (make sure you're in your fresh folder)\n #VdVeyI6zCWRyKLoA // > ``touchdevelop``\n #jB3SWBY83Ya2hQve // This will start the TouchDevelop editor in your default browser.\n #GG0Wwd79o4DWGali // ### using non-default browser\n #c9GeLb0N1ocQTHV0 // If you want to use a different browser run ``touchdevelop --cli`` and then point your browser to the URL printed out, it will look **something like** this:\n #Zt9aw3IdHQhkjOAj // > ``Editor URL: http://localhost:4242/editor/beta#td_deployment_key=``\n #A85X0jwZQ7nxKmA7 // It is very important to copy&paste the deployment key at the end precisely.\n #oZCkpuvERU4pSBgP // ### caching of resources\n #HZg9zZ33hRQewElr // All [art resources](/art) or scripts that are loaded while using TouchDevelop local are automatically cached on disk, which allows for a better experience.\n #dOWKEqjA2EopKrAa // If you are planning to package TouchDevelop, make sure that you use at least once each required script or tutorial so that they get cached.\n #xJW2i0dpR9ECZHbH // ### packaging\n #xk9FWWSoKznWnmdy // If you plan to package and share your local touchdevelop, you need to perform the following step.\n #OWX4ZYDjngkiBEtL // * go to the **hub**,\n #gHhslghRyoF9m2FR // * tap on `[Settings]`\n #xpnUIIdzjeb32vYB // * tap on `[save offline caches]`\n #HBWc0AdjvaE1PBPq // Copy or zip the folder containing the TouchDevelop files.\n}\n#lRC7ZP4I3ytfLfcRhscBaKF6\nvar monster : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/ymggwtmn\";\n transient = true;\n}\n#xZA3MGCJ6sAJtfqSibDFTyzZ\nvar @1_Click_on_Title : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/syhbuwmb\";\n transient = true;\n}\n#x4oXuBrRP7peqBxOraPy0Ppu\nvar @2_Publish_Script : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/uegejzev\";\n transient = true;\n}\n#Pb7ZRhh1Le4Kwz16DOm6h95t\nvar @3_Click_Export_iOS : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/snnlubem\";\n transient = true;\n}\n#JiJThBxgjuQyZZagv84V67Cc\nvar @4_Export_to_App_Store : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/jhmzbank\";\n transient = true;\n}\n#u2byTeHW2wX14mnA374fzvSh\nvar @5_App_is_Ready : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/pnqogdug\";\n transient = true;\n}\n#XhCWNpaqagoeYlvuBl6OZOHa\nvar @6_Search_for_Xcode : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/ukwoekck\";\n transient = true;\n}\n#ZeXqju7M5bfqlm0Gx6CYvtRK\nvar @7_Open_Xcode : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/akluqtvy\";\n transient = true;\n}\n#xzO7Z4FWRmvE3GvB3nUQGdja\nvar @8_Open_Project_Folder : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/duqdaaut\";\n transient = true;\n}\n#JOEveTZ34fcQQBSty0Y64Edz\nvar @9_Run_on_Simulator : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/vxmsyaas\";\n transient = true;\n}\n#xiLx3rI7m5QO2Xo18r4e8IkZ\nvar @10_New_App : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/mpgptjat\";\n transient = true;\n}\n#xvxHs2DcS5TxtO3WUNGJU8SX\nvar @11_App_Info_1 : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/ogcsqjwj\";\n transient = true;\n}\n#ZrjNZAJFXA9xGxb5V6oiQ2fr\nvar @12_App_Info_2 : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/sqvolvpy\";\n transient = true;\n}\n#Y3AswkOZPm0qiy2UVZvlZkez\nvar @13_App_Info_3 : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/aisvqsqf\";\n transient = true;\n}\n#bBNxhIal86lYKIvamSdSIjaY\nvar @14_App_Info_4 : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/afpjiooj\";\n transient = true;\n}\n#NzF4EhVGG7woPhmPnliAixIE\nvar @15_Upload_Images : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/fxzfihkw\";\n transient = true;\n}\n#ncULKNvBE2KztzZPCeZpAkDY\nvar @16_Create_Certificate : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/uzxlvvev\";\n transient = true;\n}\n#HvyrGPpdCBgkgany57HRlfeD\nvar @17_iOS_Device : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/luyofzkt\";\n transient = true;\n}\n#jlzt0AP4sDglw23BWlpFGzmL\nvar @18_Product_Archive : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/mnuosfrx\";\n transient = true;\n}\n#ed23hfCPWk4e4wTEwn4QGZzq\nvar Provisioning_Profile : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/jdzxutxx\";\n transient = true;\n}\n#eXePACFUcwQUUlcmdK8BzBgP\nvar P_Validate : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/waeqjhwx\";\n transient = true;\n}\n#lPh2YgYpDFec75cVhrBPJBW7\nvar Distribute : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/evpvthnw\";\n transient = true;\n}\n#n7TK0c4AGeFXhyBY7vYRqXAx\nvar @3_Click_Export_iOS_2 : Picture {\n is\\_resource = true;\n url = \"https://az31353.vo.msecnd.net/pub/przbvosv\";\n transient = true;\n}\n", "nehv": "meta version \"v2.2,js,ctx,refs,localcloud,unicodemodel,allasync\";\nmeta name \"game animations\";\nmeta icon \"Controller\";\nmeta color \"#ff9955bb\";\nmeta rootId \"x5GWly5akgFmjLrYRRLK4cEP\";\nmeta isLibrary \"yes\";\nmeta hasIds \"yes\";\nmeta platform \"current\";\nmeta parentIds \"\";\n// A suite of nifty game animations.\n#example\naction example() {\n #oQvXum6wlCxvA14x // This library provides a bunch of cool animation to be used with the `libs->game` library.\n #OrK2keevME4R7Ikt // {hide}\n #IBkRy8dLlysml6xn $pic := media→create_picture(480, 800);\n #LUD4QUQWDq3cZvhL $board := @\\u267b→game→start;\n #PcO7yRSD4Y6NqNK1 @\\u267b→game→bounce_on_sides;\n #uuxlVRt3Fj7zUX3d $sprite := $board→create_rectangle(100, 100);\n #WeOMvS436zFINcmB $sprite→set_color(colors→blue);\n #cd8qQ2IGGEG8LSik $sprite→set_acceleration_y(400);\n #ozsU7Yocpctcf8Kz $sprite→set_opacity(0.8);\n #OTQ8K19QPPnhEckE // {/hide}\n #EBms12UX1I3YptSc // ### splatter\n #o4uCUnbQ4qtH4xOe // Display a splatter under the sprite that goes away after a couple secs.\n #pQPunYKP94mwyJYM code→splatter($sprite, $pic);\n #ItG0lTW3p7NiLMvc // ### add score to a sprite\n #WTbMbwwzr2UNA7NT // Add a score that pops a little ``+score`` on the top right corner of the sprite.\n #Ejn7ZLQa7j8Earpj code→add_score($sprite, 100);\n meta private;\n meta test;\n}\n#MHC9cku1GTEdncGR meta import game {\n pub \"sduub\"\n usage {\n action `sync` set_score(value: Number)\n action `async` set_life(value: Number)\n action `sync` start_timer()\n action `sync` start_countdown_timer(seconds: Number)\n action `sync` life() returns(r: Number)\n action `sync` score() returns(r: Number)\n action `sync` current_time() returns(seconds: Number)\n action `sync` add_score(value: Number)\n action `async` add_life(value: Number)\n action `sync` clear_timer()\n action `async` remove_life(value: Number)\n action `async` end()\n action `async` start() returns(board: Board)\n action `sync` reset()\n action `async` start_with_fixed_size(width: Number, height: Number) returns(board: Board)\n action `async` start_with_background_picture(pic: Picture) returns(board: Board)\n action `sync` board() returns(board: Board)\n action `sync` on_end(@action: Action)\n action `async` splash_text(message: String, seconds: Number, foreground: Color, background: Color, done: Action)\n action `async` start_landscape() returns(board: Board)\n action `async` start_portrait() returns(board: Board)\n action `sync` set_hud_colors(life: Color, timer: Color, score: Color)\n action `sync` hud_sprites() returns(sprites: Sprite_Set)\n action `async` life_visible() returns(b: Boolean)\n action `async` set_life_visible(visible: Boolean)\n action `sync` sprites() returns(sprites: Sprite_Set)\n action `async` set_background_scene(direction: String, pic: Picture)\n action `sync` bounce_on_sides()\n action `sync` create_sprite(pic: Picture) returns(sprite: Sprite)\n }\n}\n#IgJeOaT4qD6XCDWM\naction splatter(#xSZvm6EeJuCvT4s4 sprite: Sprite, #MCvt1zYjYJcK4L44 splatter: Picture) {\n #X4OAdwxnO5wHxDZa // Splats the ``splatter`` picture under the ``sprite`` and fades it away.\n #X64Ps5YYS1av5MpI $sp := @\\u267b→game→board→create_picture($splatter);\n #ODXoYXN95HMQR2Cl $sp→set_pos($sprite→x, $sprite→y);\n #u9qh43UUwoK0FZl0 $sp→set_width($sprite→width);\n #x2LYMGKCfJ1oW8qz $sp→set_speed($sprite→speed_x / 5, $sprite→speed_y / 5);\n #uAJdLNuxiNbu2T4D $sp→friction := 0.05;\n #xkBOKjaSeL4oRcyl $sp→z_index := $sprite→z_index - 1;\n #F7VCHbHecTaVIjT4 $anim := $sp→create_animation;\n #IUYXcNBxhS2fVVRG $anim→puff_out(0.6, \"cubic\", 1.2);\n #bx6onFKBhqu1SI15 $anim→delete;\n}\n#v4ugzdtO8BJPkkj4\naction add_score(#wysUeGszNWAN7trp sprite: Sprite, #tEL2GDgDi86bI72e score: Number) {\n #VeUaeIa25nApnqQT // Shows a little score animation\n #NxnWqSc1zhnO54N9 $bonus := @\\u267b→game→board→create_text(100, 20, 15, $score→to_string);\n #DdGj3W3NCt2n0PVo if $score > 0 then {\n #jIysyn2MjoPyhGQY $bonus→set_text(\"+\" ∥ $bonus→text);\n #dyvGOVwl5E8c2rkE $bonus→set_color(colors→orange);\n }\n else {\n #FMAzDAxm7WBKyVi5 $bonus→set_color(colors→red);\n }\n #VyMLdyfovccmoVPZ $bonus→fit_text;\n #s9mf7tHP4hg6zQrA $bonus→set_pos($sprite→right, $sprite→@top + $bonus→height * 0.6);\n #lU46vyX425TKrBrI $bonus→set_color(colors→green);\n #wGW2fYDAlMw9MmgM @\\u267b→game→add_score($score);\n #trQhQdUjt6fA4cos $anim := $bonus→create_animation;\n #zz6SU1LbMkxhFiv2 $anim→fork→fade_out(1.5, \"linear\");\n #aQP47O58Ny55MN92 $anim→move_to(1.5, \"linear\", \"inout\", $bonus→x, $bonus→y - $sprite→height / 2);\n #IWdqhz1GYoeIezqg $anim→delete;\n meta sync;\n}\n#xkUbqdD2nTGw2md2\naction demo() {\n #nKfBY2pfuGzl6Lqa $pic := media→create_picture(480, 800);\n #umREhXlH6l4zWsW1 $pic→clear(colors→green);\n #c4OOPp4yjrTumwFn $board := @\\u267b→game→start;\n #xC9EjUCuAFD2OizM @\\u267b→game→bounce_on_sides;\n #HTWzkiDs2iFrpskf $sprite := $board→create_rectangle(100, 100);\n #bzn6oVDiFRefDYp2 $sprite→set_color(colors→blue);\n #xYGC7i8OXtlJa6Do $sprite→set_acceleration_y(400);\n #JLsA8cmWdwlhqyVQ $sprite→set_opacity(0.8);\n #r5ErvAs4SbRUQw7y $sprite→on_tap($tapped);\n #ReFgA1ac1h6CUcqH where tapped(x: Number, y: Number) {\n #V34hkhzTxtRXuf22 code→splatter($sprite, $pic);\n #xdmQ7YIokLC3Enu3 code→add_score($sprite, 100);\n }\n meta private;\n meta test;\n}\n", "oqsm": "meta version \"v2.2,js,ctx,refs,localcloud,unicodemodel,allasync\";\nmeta name \"tutorials\";\nmeta rootId \"xcFXL1vqQbVPFKk2Yc1gTRIF\";\nmeta hasIds \"yes\";\nmeta platform \"current\";\nmeta parentIds \"\";\n// A list of TouchDevelop tutorials. #docs #tutorials\n#main\naction main() {\n #LQQH7W4x4vOr6kcT // {parentTopic:contents}\n #LpknIXykLhvB5YLw // {priority:2}\n #x6WZ72Kym5u8aNuV // {docflags:nochrome}\n #JkpnXEMEJkFS4mnx // # featured\n #xPrDSkOmttZegncR // * {follow:Coding Jetpack Jumper!}\n #xAR2eREH5fGtTotx // * {follow:jumping bird tutorial}\n #yO4n3Tb0o3Or3L55 // * {follow:first steps with turtle}\n #fSp20aGSenwd4bH2 // * {follow:pixel art tutorial}\n #aM13Ksd59pPcP33j // # games\n #iUSpluk0DLK4NtiA // * {follow:monster slicer tutorial}\n #A8cfd633Th1P7kbJ // * {follow:bear quest tutorial}\n #VsZDHY1LOsv3l825 // * {follow:falling rocks tutorial}\n #x93wx6dPRfGXaxdE // * {follow:don't tap the tile tutorial}\n #XP2FMZ7hb7pCZzlE // * {follow:word hunt tutorial}\n #qOTdAJch2sHVC4Av // * {follow:love me not tutorial}\n #kFSt9am2yYoTHMsd // * {follow:sound board tutorial}\n #uWIA0tQivNtloAdi // * {topictile:game tutorials}\n #H7AzZmdb0qZkhNmB // # beginners\n #x5vHrVNhyrmyHfSS // * {follow:turtle ramp up tutorial}\n #avV0BXVrlq8tFqbJ // * {follow:pixels tutorial}\n #ltteGneoeMCOKyfD // * {follow:scratch cat tutorial}\n #IjY2cuHq10NmYN8Z // * {topictile:beginner tutorials}\n #lUIEFAjnBaFp0NYM // # social apps\n #zomIAaVZ03v4R1xB // * {follow:one pic social tutorial}\n #JZPcmj4bsQ6MphyN // * {follow:map of things tutorial}\n #CiNPuZfJcC2VnMKB // * {follow:square poll tutorial}\n #Bg5Sg2zvnzUsxWDD // * {topictile:social app tutorials}\n #mW19SQB7JzUYUDyp // # algorithms\n #wzF2w9H8stNcR8oB // * {follow:quadratic equation solver}\n #HqrHWbJyly22r9vo // * {follow:factorial tutorial}\n #QI6trn3hYBszuzKO // * {topictile:algorithm tutorials}\n #lhDXdp92VSAbLGDI // # code hunt\n #TQJbXgBtfLKPm4eZ // * {follow:code hunt sector 0}\n #UFYGFD7GvVf941uN // * {follow:code hunt sector 1}\n #uyUyccw3k3epD2WP // * {follow:code hunt sector 2}\n #pKVV2nqY2iWOrdrQ // * {topictile:code hunt tutorials}\n #xQcC1JyQ0SbywpYf // # arduino\n #ht2FBDTcOKDiMxuT // * {follow:arduino blink tutorial}\n #xVTW9pO53483xii4 // * {follow:arduino sos tutorial}\n #LB6wN2U8tYxM2xMd // * {topictile:arduino tutorials}\n #KqQQoH1lfiX7GGs9 // # hardware\n #xiePhqB81TDsXU4v // * {follow:makey makey beatbox tutorial}\n #xLaWWHNk2TcRzkXa // * {follow:esplora level tutorial}\n #xF73sSThDYR09wui // * {topictile:hardware tutorials}\n #x7K4ek6efU0P1hOd // **Want to write your own tutorials?** Learn how to [create interactive tutorials](/creatinginteractivetutorials).\n}\n", "owroa": "meta version \"v2.2,js,ctx,refs,localcloud,unicodemodel,allasync\";\nmeta name \"forms\";\nmeta icon \"AlignLeft\";\nmeta color \"#ff9955bb\";\nmeta rootId \"mMuT4ZcDiX4oeiP6z7DBQnLh\";\nmeta isLibrary \"yes\";\nmeta allowExport \"yes\";\nmeta platform \"current\";\n// Basic user interface elements (buttons, text input boxes, check boxes, drop-down menus) used for simple forms.\n#button\naction button(text: String, on_tapped: Action) {\n // Displays a button\n do box {\n box→set_margins(0.5, 0.5, 0.5, 0.5);\n box→set_padding(0.5, 1, 0.5, 1);\n box→set_border(colors→foreground, 0.1);\n box→set_font_size(1.2);\n box→on_tapped($handler);\n where handler() {\n $on_tapped→run;\n }\n do box {\n box→set_horizontal_align(\"center\");\n box→set_vertical_align(\"center\");\n $text→to_lower_case→post_to_wall;\n }\n }\n meta sync;\n}\n#checkbox\naction checkbox(text: String, checked: Ref[Boolean]) {\n // Displays a checkbox\n do box {\n box→use_horizontal_layout;\n box→set_horizontal_align(\"left\");\n box→set_horizontal_stretch(1);\n box→set_margins(0, 0.5, 0.5, 0.5);\n do box {\n box→use_overlay_layout;\n do box {\n box→set_margins(0, 0, 0, 0.2);\n box→set_font_size(2);\n if $checked→\\u25c8get then {\n box→set_foreground(colors→accent);\n }\n else {\n box→set_foreground(colors→transparent);\n }\n \"✓\" →post_to_wall;\n }\n do box {\n box→set_width(1.5);\n box→set_height(1.5);\n box→set_border(colors→foreground, 0.1);\n \"\" →post_to_wall;\n box→on_tapped($handler);\n where handler() {\n $checked→\\u25c8set( not $checked→\\u25c8get);\n }\n }\n }\n do box {\n box→set_margins(0, 0, 0, 0.3);\n $text→post_to_wall;\n }\n }\n meta sync;\n}\n#exampleboolean\nvar example_boolean : Boolean {\n // A variable used in the example page.\n transient = true;\n}\n#examplename\nvar example_name : String {\n // A variable used in the example page.\n transient = true;\n}\n#indentation\naction indentation() returns(x: Number) {\n // returns the default width of the left column\n if code→narrow_screen then {\n $x := 0;\n }\n else {\n $x := 10 + (box→page_width - 40) * .2;\n }\n meta private;\n meta sync;\n}\n#examplecomments\nvar example_comments : String {\n // A variable used in the example page.\n transient = true;\n}\n#exampleemails\nvar example_emails : String_Collection {\n // A variable used in the example page.\n transient = true;\n}\n#examplepassword\nvar example_password : String {\n // A variable used in the example page.\n transient = true;\n}\n#showexample\naction show_example() {\n if box→is_init then {\n if data→example_emails→is_invalid then {\n data→example_emails := collections→create_string_collection;\n }\n data→dropdownchoices := \"Car,Bus,Train,Airplane\" →split(\",\");\n data→example_number_string := data→example_number→to_string;\n }\n if true then {\n // input a string that stays on a single line\n code→input_text_line(\"Name\", data→example_name→\\u25c8ref);\n // input a string that can span multiple lines\n code→input_text_area(\"Comments\", data→example_comments→\\u25c8ref);\n // input a collection of strings (user can add/remove/edit entries)\n code→input_string_collection(\"email addresses\", data→example_emails);\n // input a number\n code→input_number(\"Number\", data→example_number_string→\\u25c8ref, $changehandler);\n where changehandler(x: Number) {\n data→example_number := $x;\n }\n // input a password (characters are hidden)\n code→input_password(\"Password\", data→example_password→\\u25c8ref);\n // input from a dropdown menu\n code→input_choice(\"Transportation\", data→dropdownchoices, data→example_choice→\\u25c8ref);\n // use the \"indented content\" call to achieve consistent indentation\n code→indented_content($content2);\n where content2() {\n // input a boolean, as a checkbox\n code→checkbox(\"send feedback\", data→example_boolean→\\u25c8ref);\n where on_value_change2(boolean: Boolean) {\n data→example_boolean := $boolean;\n }\n }\n // use the \"indented content\" call to achieve consistent indentation\n code→indented_content($content3);\n where content3() {\n // make a button\n code→button(\"Submit\", $tapped);\n where tapped() {\n wall→prompt(\"Submit Button Tapped\");\n }\n }\n }\n meta private;\n meta page;\n meta sync;\n}\n#inputstringcollectio\naction input_string_collection(label: String, strings: String_Collection) {\n code→labeled_content($label, $content);\n where content() {\n do box {\n box→set_margins(0, 0, 0.2, 0);\n if $strings→count > 0 then {\n for 0 ≤ i < $strings→count do {\n do box {\n box→use_horizontal_layout;\n do box {\n box→set_border(colors→black, 0.1);\n box→set_margins(0.2, 0, 0.2, 0);\n box→set_horizontal_stretch(1);\n box→edit(\"textline\", $strings→at($i), $changehandler);\n where changehandler(text: String) {\n $strings→set_at($i, $text);\n }\n }\n do box {\n code→small_button(.5, \"(remove)\", $@action);\n where @action() {\n $strings→remove_at($i);\n }\n }\n }\n }\n }\n do box {\n code→small_button(0, \"(add)\", $@action);\n where @action() {\n $strings→add(\"\");\n }\n }\n }\n }\n meta sync;\n}\n#inputtextline\naction input_text_line(label: String, text: Ref[String]) {\n code→labeled_content($label, $content);\n where content() {\n do box {\n box→set_border(colors→foreground, .1);\n box→edit(\"textline\", $text→\\u25c8get, $changehandler);\n where changehandler(t: String) {\n $text→\\u25c8set($t);\n }\n box→set_margins(0.2, 0.5, 0.2, 0);\n box→set_horizontal_stretch(1);\n }\n }\n meta sync;\n}\n#smallbutton\naction small_button(side_margins: Number, s: String, @action: Action) {\n do box {\n if $side_margins ≠ 0 then {\n box→set_vertical_align(\"top\");\n }\n box→set_horizontal_align(\"center\");\n box→set_margins(0.2, $side_margins, 0, $side_margins);\n box→set_padding(0.2, 0, 0.2, 0);\n box→on_tapped($@action);\n $s→post_to_wall;\n }\n meta private;\n meta sync;\n}\n#inputtextarea\naction input_text_area(label: String, text: Ref[String]) {\n code→labeled_content($label, $content);\n where content() {\n do box {\n box→set_border(colors→foreground, .1);\n box→edit(\"textarea\", $text→\\u25c8get, $changehandler);\n where changehandler(t: String) {\n $text→\\u25c8set($t);\n }\n box→set_margins(0.2, 0.5, 0.2, 0);\n box→set_height_range(3, math→\\u221e\\u208a);\n box→set_horizontal_stretch(1);\n }\n }\n meta sync;\n}\n#inputpassword\naction input_password(label: String, password: Ref[String]) {\n code→labeled_content($label, $content);\n where content() {\n do box {\n box→set_border(colors→foreground, .1);\n box→edit(\"password\", $password→\\u25c8get, $changehandler);\n where changehandler(text: String) {\n $password→\\u25c8set($text);\n }\n box→set_margins(0.2, 0.5, 0.2, 0);\n box→set_horizontal_stretch(1);\n }\n }\n meta sync;\n}\n#inputnumber\naction input_number(label: String, text: Ref[String], changehandler: Number_Action) {\n code→input_text_line_w\\u002f_validator($label, $text, $errorcheck, $changed);\n where errorcheck(s: String) returns (error: String) {\n $x := $s→to_number;\n if $x→is_invalid then {\n $error := \"please enter a valid number.\";\n }\n else {\n $error := \"\";\n }\n }\n where changed(t: String) {\n $changehandler→run($t→to_number);\n }\n meta sync;\n}\n#example\naction example() {\n // This library allows to create form elements such as buttons, text boxes, checkboxes, or drop-down menus.\n // * input a string in a text box (single line)\n code→input_text_line(\"Name\", data→example_name→\\u25c8ref);\n // * input a string in a text box (multiple lines)\n code→input_text_area(\"Comments\", data→example_comments→\\u25c8ref);\n // * input a collection of strings (user can add/remove/edit entries)\n code→input_string_collection(\"email addresses\", data→example_emails);\n // * input a password in a text box (characters are hidden)\n code→input_password(\"Password\", data→example_password→\\u25c8ref);\n // * input a boolean, as a checkbox\n code→checkbox(\"send feedback\", data→example_boolean→\\u25c8ref);\n // * make a button\n code→button(\"Submit\", $tapped);\n where tapped() {\n wall→prompt(\"Submit Button Tapped\");\n }\n // * choose from a dropdown menu\n code→input_choice(\"Transportation\", data→dropdownchoices, data→example_choice→\\u25c8ref);\n meta private;\n meta sync;\n}\n#narrowscreen\naction narrow_screen() returns(b: Boolean) {\n $b := box→page_width < 35;\n meta private;\n meta sync;\n}\n#labeledcontent\naction labeled_content(label: String, content: display_code) {\n // For displaying labeled content, with the same indentation as other form elements. If the label is the empty string, the item is displayed without indentation.\n if not $label→is_invalid and not $label→equals(\"\") then {\n do box {\n box→set_horizontal_stretch(1);\n box→set_horizontal_align(\"left\");\n if code→narrow_screen then {\n box→use_vertical_layout;\n box→set_margins(0.35, 0, 0, 0);\n }\n else {\n box→use_horizontal_layout;\n }\n $indent := code→indentation;\n do box {\n $label→post_to_wall;\n $pw := box→page_width;\n box→set_horizontal_stretch($indent / ($pw - .7));\n box→set_horizontal_align(\"right\");\n box→set_margins(0.2, 0, 0.2, 0.5);\n }\n do box {\n if box→page_width < 40 then {\n box→set_width_range(10, box→page_width - $indent);\n box→set_horizontal_stretch(1);\n }\n else {\n box→set_horizontal_stretch(0);\n box→set_width_range(20, box→page_width - $indent);\n }\n do box {\n box→set_padding(0, 0.5, 0, 0.5);\n $content→run;\n }\n }\n }\n }\n else {\n code→normal_content($content);\n }\n meta sync;\n}\n#indentedcontent\naction indented_content(content: display_code) {\n // Display content with the same indentation as other form elements.\n if code→narrow_screen then {\n code→normal_content($content);\n }\n else {\n code→labeled_content(\" \", $content);\n }\n meta sync;\n}\n#normalcontent\naction normal_content(content: display_code) {\n do box {\n if box→page_width < 40 then {\n box→set_width_range(10, box→page_width);\n box→set_horizontal_stretch(1);\n }\n else {\n box→set_horizontal_stretch(0);\n box→set_width_range(20, box→page_width);\n }\n do box {\n box→set_padding(0, 0.5, 0, 0.5);\n $content→run;\n }\n }\n meta private;\n meta sync;\n}\n#w4wvvOyYMGH8M1GFkNzq9U37\naction `type` display_code() {\n skip;\n meta sync;\n}\n#JFIbi283vQ4hKSeSDgSFD1mR\naction input_choice(label: String, choices: String_Collection, index: Ref[Number]) {\n // Input a choice from a dropdown menu.\n code→labeled_content($label, $content);\n where content() {\n $current := \"\";\n if not $index→\\u25c8get→is_invalid and $index→\\u25c8get ≥ 0 and $index→\\u25c8get < $choices→count then {\n $current := $choices→at($index→\\u25c8get);\n }\n if $current→is_invalid or $current→equals(\"\") then {\n $current := \" \";\n }\n do box {\n box→set_margins(0.2, 0.5, 0.2, 0.5);\n box→set_padding(0.3, 1, 0.3, 1);\n box→set_border(colors→foreground, 0.1);\n box→on_tapped($handler);\n where handler() {\n $x := wall→pick_string($label, \"\", $choices);\n if $x ≥ 0 then {\n $index→\\u25c8set($x);\n }\n }\n do box {\n box→set_horizontal_align(\"center\");\n $current→post_to_wall;\n }\n }\n }\n meta sync;\n}\n#Mb4wOugItC8WuhV4FzURCsdU\nvar dropdownchoices : String_Collection {\n transient = true;\n}\n#CwT0X1vsa9H4HZJxEErdw2z6\nvar example_choice : Number {\n transient = true;\n}\n#oWu4bWFVWgG65r4Hrh69VnB3\naction input_text_line_w\\u002f_validator(label: String, text: Ref[String], errorcheck: validator, changehandler: Text_Action) {\n code→labeled_content($label, $content);\n where content() {\n do box {\n $error := $errorcheck→run($text→\\u25c8get);\n do box {\n box→set_border(colors→foreground, .1);\n box→edit(\"textline\", $text→\\u25c8get, $changed);\n where changed(t: String) {\n $text→\\u25c8set($t);\n if $errorcheck→run($t)→is_empty then {\n $changehandler→run($t);\n }\n }\n box→set_margins(0.2, 0.5, 0.2, 0);\n box→set_horizontal_stretch(1);\n }\n if not $error→is_empty then {\n box→set_foreground(colors→red);\n (\"⇧ \" ∥ $error)→post_to_wall;\n }\n }\n }\n meta sync;\n}\n#XPzkmnAHw2YfZd8ERHYp0i1a\naction `type` validator(s: String) returns(error: String) {\n skip;\n meta sync;\n}\n#h9fnSKl9lC2Y2ipmhRWNzOhy\nvar example_number : Number {\n transient = true;\n}\n#obyaxW4FDptTluW9lt69d7Zg\nvar example_number_string : String {\n transient = true;\n}\n", "parp": "meta version \"v2.2,js,ctx,refs,localcloud,unicodemodel,allasync\";\nmeta name \"blank turtle\";\nmeta icon \"Snowflake\";\nmeta color \"#ff007fff\";\nmeta rootId \"JfhbuKHwe3K29WLENfXE17iC\";\nmeta allowExport \"yes\";\nmeta hasIds \"yes\";\nmeta platform \"current\";\nmeta parentIds \"\";\n// #turtle\n#k3GG7tZEQiPXLEm5bnyfOkDF\naction main() {\n #iTGtxXhIwXwHLfFT @\\u267b→turtle→forward(100);\n}\n#xEv66n448mkvLMp4 meta import turtle {\n pub \"smzqa\"\n usage {\n type Maze\n action `async` pen_down()\n action `async` pen_up()\n action `async` move_to(x: Number, y: Number)\n action `async` forward(steps: Number)\n action `async` left_turn(angle: Number)\n action `async` set_pen_color(c: Color)\n action `async` xcor() returns(x: Number)\n action `async` ycor() returns(y: Number)\n action `async` heading() returns(a: Number)\n action `async` world_width() returns(w: Number)\n action `async` world_height() returns(h: Number)\n action `async` set_heading(angle: Number)\n action `async` set_pen_size(thickness: Number)\n action `async` right_turn(angle: Number)\n action `async` circle(radius: Number)\n action `async` world_board() returns(board: Board)\n action `async` turn_to(dx: Number, dy: Number)\n action `async` world_picture() returns(pic: Picture)\n action `async` set_speed(steps_per_second: Number)\n action `async` go_home()\n action `async` back(steps: Number)\n action `async` pen_size() returns(size: Number)\n action `async` clean()\n action `async` clear_screen()\n action `async` speed() returns(v: Number)\n action `async` set_xy(xcor: Number, ycor: Number)\n action `async` set_x(xcor: Number)\n action `async` set_y(ycor: Number)\n action `async` pen_color() returns(c: Color)\n action `async` color_under() returns(c: Color)\n action `async` save_picture()\n action `async` xy() returns(x: Number, y: Number)\n action `async` touch_xy() returns(tx: Number, ty: Number)\n action `async` grid()\n action `async` fast()\n action `async` stamp()\n action `async` set_turtle_picture(pic: Picture)\n action `async` set_turtle_opacity(opacity: Number)\n action `async` trail()\n action `async` add_obstacle(maze: ♻ turtle → Maze, x: Number, y: Number, width: Number, height: Number, c: Color)\n action `async` set_goal(maze: ♻ turtle → Maze, x: Number, y: Number, radius: Number, c: Color)\n action `async` maze() returns(maze: ♻ turtle → Maze)\n action `async` lock(maze: ♻ turtle → Maze)\n action `async` history() returns(commands: String)\n action `async` clear_history()\n action `sync` on_command(command: Text_Action)\n action `async` add_way_point(maze: ♻ turtle → Maze)\n action `async` on_collision(maze: ♻ turtle → Maze, collision: Action)\n }\n}\n", "qetpa": "meta version \"v2.2,js,ctx,refs,localcloud,unicodemodel,allasync\";\nmeta name \"blank app\";\nmeta icon \"AddressBook\";\nmeta rootId \"xPVLZKRfDmGiasdkBt2RaNR4\";\nmeta allowExport \"yes\";\nmeta platform \"current\";\n#theme meta import theme {\n pub \"gnvi\"\n usage {\n action `async` title_1()\n action `async` title_2()\n action `async` title_3()\n action `async` subtle()\n action `async` normal()\n action `sync` example()\n action `async` accent()\n action `async` set_right_aligned(value: Boolean)\n action `async` huge()\n }\n}\n#main\naction main(\\u2756: * main_page_data) {\n if box→is_init then {\n skip;\n }\n if true then {\n skip;\n }\n meta page;\n meta sync;\n}\n#BbWFpbiBwYWdlIGRhdGEa\ntable main_page_data {\n type = \"Object\";\n persistent = false;\n}\n#YZGaVg1jhqq9sfncCGsIoHbh meta import forms {\n pub \"owroa\"\n usage {\n action `sync` `type` display_code()\n action `sync` `type` validator(s: String) returns(error: String)\n action `sync` button(text: String, on_tapped: Action)\n action `sync` checkbox(text: String, checked: Ref[Boolean])\n action `sync` input_string_collection(label: String, strings: String_Collection)\n action `sync` input_text_line(label: String, text: Ref[String])\n action `sync` input_text_area(label: String, text: Ref[String])\n action `sync` input_password(label: String, password: Ref[String])\n action `sync` input_number(label: String, text: Ref[String], changehandler: Number_Action)\n action `sync` labeled_content(label: String, content: ♻ forms → display_code)\n action `sync` indented_content(content: ♻ forms → display_code)\n action `sync` input_choice(label: String, choices: String_Collection, index: Ref[Number])\n action `sync` input_text_line_w\\u002f_validator(label: String, text: Ref[String], errorcheck: ♻ forms → validator, changehandler: Text_Action)\n }\n}\n#LHF2iIBnkOQcwhcoQKFiR4A2 meta import widgets {\n pub \"abgjb\"\n usage {\n action `sync` message(user: User, dt: DateTime, text: String)\n action `sync` picture(url: String)\n }\n}\n#iDxzKDq4042OKy7IX4V4D91F meta import layout {\n pub \"cwgn\"\n usage {\n action `sync` stretch_and_center()\n action `async` grid_of_squares(cell_content: Number_Action, count: Number, grid_width: Number, grid_height: Number)\n action `async` horizontal_hub_of_squares(cell_content: Number_Action, count: Number, cell_size: Number, group_width: Number, total_height: Number)\n action `async` vertical_hub_of_squares(cell_content: Number_Action, count: Number, cell_size: Number, total_width: Number, group_height: Number)\n }\n}\n", "qexxc": "meta version \"v2.2,js,ctx,refs,localcloud,unicodemodel,allasync,upperplex\";\nmeta name \"blank web api\";\nmeta icon \"Stacks\";\nmeta color \"#ffffffff\";\nmeta rootId \"x4mibwzdISu8zLeLgg7b3IKt\";\nmeta iconArtId \"wyfreugv\";\nmeta isLibrary \"yes\";\nmeta allowExport \"yes\";\nmeta isCloud \"yes\";\nmeta hasIds \"yes\";\nmeta platform \"network,npm,shell\";\nmeta parentIds \"\";\n// An blank web api using Node.JS and Restify. #node #azure #restify\n#czWG9NcXY9uFZHMz\naction \\_init() {\n #rg6M5H46J1bK4x8c data→logger := app→create_logger(\"myweb\");\n #x2Y2gFv2oHeZKjaB code→init_restify;\n #z1Taq8ixDqqUfh2n data→logger→info(\"started...\");\n}\n#FrNAgtgAKnFVC43t\naction GET_\\u002fping() returns(#aM0QoLDaWxwAlfSy millis: Number) {\n #xzy3cNZXu2Lbz9f2 // Returns the number of milliseconds since epoch.\n #IYDlx4xcyWX5wD4m $millis := time→now→milliseconds_since_epoch;\n}\n#a4wL0Lb7xeWxhV4L meta import parallel {\n pub \"fncvb\"\n usage {\n type queue\n action `async` @for(count: Number, @action: Number_Action)\n action `async` for_batched(count: Number, batch_count: Number, item_action: Number_Action, batch_action: Action)\n action `sync` schedule(q: ♻ parallel → queue, task: Action)\n action `sync` create_queue(max_running: Number) returns(queue: ♻ parallel → queue)\n action `async` wait_for_empty(q: ♻ parallel → queue)\n action `async` for_json(js: Json_Object, @action: Json_Action)\n }\n}\n#CW3Wao3uu3Z2Fhe6\nvar logger : App_Logger {\n transient = true;\n}\n#rmfzWWMIFG8Ule9I\naction init_restify() {\n #GL26xBm2sW9gi51S $server := @\\u267b→restify→server;\n #eq0FvCwwbob1i3UD $server→use(@\\u267b→restify→authorization_parser);\n #Ee6qD4jb4Xr4TCYg $server→pre(@\\u267b→restify→sanitize_path);\n #xiHn2sJ7jyfBOFLf $throttle := @\\u267b→restify→throttle;\n #ZU1qf4WMSwf2ZZs8 where rate := 40;\n #S04R2349FF42Rb2O where burst := 100;\n #qa878gtstkVP7tTO where ip := true;\n #kld3kZpnFcZ4TVhB $server→use($throttle);\n #sptEZCs70xCB68CA $server→use(@\\u267b→restify→CORS);\n #mFFPDO74C64OWH8s $server→use(@\\u267b→restify→body_parser);\n #xSqpOmBEP6L2VCFi $server→use(@\\u267b→restify→gzip_response);\n #xR4QGtRsV3hGoSJQ $server→use(@\\u267b→restify→query_parser);\n #x9bNZzJ9tZk0l1Z4 $server→use(@\\u267b→restify→conditional_request);\n #buXcIfKig0apgL4x @\\u267b→restify_touchdevelop→autobind($server);\n #kj30VDMt3gkmKiZM code→init_routes();\n #UAx1DGb27XEqkYO5 $server→use(@\\u267b→restify_touchdevelop→errors_to_log(data→logger));\n meta private;\n meta sync;\n}\n#Png4V3OlrtBkrIAa meta import restify {\n pub \"egzra\"\n usage {\n action `async` `type` Request_Handler(req: ♻ restify → Request, res: ♻ restify → Response)\n #xLPhdjOebDT8w77X\n table Throttle_Options {\n type = \"Object\";\n exported = true;\n persistent = false;\n fields {\n #xo6LfV0hyAQtz675 rate : Number\n #yZ2QZAfeW3W74JA1 burst : Number\n #JUlNvDq7Hm9cTUAG ip : Boolean\n #w2h4dcf4I5K5h7kn xff : Boolean\n #RO3Sx6iTt4WsVBm6 username : Boolean\n #VbsYnDvr3t4Xr4VA maxKeys : Number\n #w25h9R5LKJnWiBNu tokensTable : ♻ restify → Tokens_Table\n }\n }\n #xdeuBx505IsZ6eEI\n table Serve_Static_Options {\n type = \"Object\";\n exported = true;\n persistent = false;\n fields {\n #NfWLVJBBbHvtMqkl default : String\n #KvIMj1sEoAwQCf22 maxAge : Number\n }\n }\n #mqEMUbizkEp6naSD\n table CORS_Options {\n type = \"Object\";\n exported = true;\n persistent = false;\n fields {\n #xMYYV6C3eS7PWsfQ origins : String\n #z5HdpFdSi792e1OX credentials : Boolean\n #Fw1D0A9ZfeMCf5c3 headers : String\n }\n }\n #w2zTzWkfMf01yOko\n table Body_Parser_Options {\n type = \"Object\";\n exported = true;\n persistent = false;\n fields {\n #mhaHCLobgUgMrv72 maxBodySize : Number\n #xr4fKleNd4wHHP1l mapParams : Boolean\n #st0ir2vLTxbLTQWB mapFiles : Boolean\n #z5ah2mZWb8c5FmTM overrideParams : Boolean\n }\n }\n #xv4yZciZi2wFoqpM\n table Send_Options {\n type = \"Object\";\n exported = true;\n persistent = false;\n fields {\n #svWYln7UIackFIpB status : Number\n }\n }\n type Request\n type Response\n type Tokens_Table\n type Server\n type Middleware\n type Error\n action `sync` use(server: ♻ restify → Server, mid: ♻ restify → Middleware)\n action `sync` get(server: ♻ restify → Server, path: String, @then: ♻ restify → Request_Handler)\n action `sync` post(server: ♻ restify → Server, path: String, @then: ♻ restify → Request_Handler)\n action `sync` server() returns(server: ♻ restify → Server)\n action `sync` send(res: ♻ restify → Response, content: String, options\\u003f: ♻ restify → Send_Options)\n action `sync` status(res: ♻ restify → Response, status: Number)\n action `sync` is(req: ♻ restify → Request, type: String) returns(r: Boolean)\n action `sync` accepts(req: ♻ restify → Request, types: String) returns(type: String)\n action `sync` put(server: ♻ restify → Server, path: String, @then: ♻ restify → Request_Handler)\n action `sync` del(server: ♻ restify → Server, path: String, @then: ♻ restify → Request_Handler)\n action `sync` head(server: ♻ restify → Server, path: String, @then: ♻ restify → Request_Handler)\n action `sync` pre(server: ♻ restify → Server, mid: ♻ restify → Middleware)\n action `sync` CORS(options\\u003f: ♻ restify → CORS_Options) returns(mid: ♻ restify → Middleware)\n action `sync` conditional_request() returns(mid: ♻ restify → Middleware)\n action `sync` route(server: ♻ restify → Server, method: String, path: String, @then: ♻ restify → Request_Handler)\n action `sync` json(res: ♻ restify → Response, content: Json_Object, options\\u003f: ♻ restify → Send_Options)\n action `sync` next(res: ♻ restify → Response)\n action `sync` next_error(res: ♻ restify → Response, error: ♻ restify → Error)\n action `sync` address(server: ♻ restify → Server) returns(address: String)\n action `sync` gzip_response() returns(mid: ♻ restify → Middleware)\n action `sync` header(req: ♻ restify → Request, name: String) returns(value: String)\n action `sync` is_secure(req: ♻ restify → Request) returns(r: Boolean)\n action `sync` is_chunked(req: ♻ restify → Request) returns(r: Boolean)\n action `sync` is_keep_alive(req: ♻ restify → Request) returns(r: Boolean)\n action `sync` set_header(res: ♻ restify → Response, name: String, value: String)\n action `sync` body_parser(options\\u003f: ♻ restify → Body_Parser_Options) returns(mid: ♻ restify → Middleware)\n action `sync` throttle(options\\u003f: ♻ restify → Throttle_Options) returns(middleware: ♻ restify → Middleware)\n action `sync` date_parser(clock_skew: Number) returns(middleware: ♻ restify → Middleware)\n action `sync` serve_static(directory: String, options\\u003f: ♻ restify → Serve_Static_Options) returns(middleware: ♻ restify → Middleware)\n action `sync` query_parser() returns(middleware: ♻ restify → Middleware)\n action `sync` authorization_parser() returns(middleware: ♻ restify → Middleware)\n action `sync` jsonp() returns(middleware: ♻ restify → Middleware)\n action `sync` body_as_json(req: ♻ restify → Request) returns(body: Json_Object)\n action `sync` id(req: ♻ restify → Request) returns(id: String)\n action `sync` param(req: ♻ restify → Request, name: String) returns(value: String)\n action `sync` opts(server: ♻ restify → Server, path: String, @then: ♻ restify → Request_Handler)\n action `sync` patch(server: ♻ restify → Server, path: String, @then: ♻ restify → Request_Handler)\n action `sync` to_string(ser: ♻ restify → Server) returns(s: String)\n action `sync` sanitize_path() returns(middleware: ♻ restify → Middleware)\n action `sync` body(req: ♻ restify → Request) returns(body: String)\n action `sync` send_error(res: ♻ restify → Response, status: Number, message: String)\n action `sync` all(server: ♻ restify → Server, @then: ♻ restify → Request_Handler)\n action `sync` method(req: ♻ restify → Request) returns(method: String)\n action `sync` url(req: ♻ restify → Request) returns(url: String)\n action `sync` query(req: ♻ restify → Request) returns(query: Json_Object)\n action `sync` redirect(res: ♻ restify → Response, status_code: Number, url: String)\n action `sync` send_status(res: ♻ restify → Response, status_code: Number)\n action `sync` charset(res: ♻ restify → Response, encoding: String)\n action `sync` route_regex(server: ♻ restify → Server, method: String, path_regex: String, @then: ♻ restify → Request_Handler)\n action `async` read_body_as_buffer(req: ♻ restify → Request) returns(body: Buffer)\n action `sync` headers(req: ♻ restify → Request) returns(headers: Json_Object)\n action `sync` server_url(req: ♻ restify → Request) returns(url: String)\n action `sync` html(res: ♻ restify → Response, content: String, options\\u003f: ♻ restify → Send_Options)\n }\n}\n#MLbRHC7j0u4Bo4GQ meta import restify_touchdevelop {\n pub \"dvuhb\"\n usage {\n action `sync` autobind(server: ♻ restify → Server)\n action `sync` errors_to_log(logger: App_Logger) returns(middleware: ♻ restify → Middleware)\n }\n #OzaDw2jYXC1r4oMK resolve restify = ♻ restify with {\n }\n}\n#xcZnKOBpfz0lu8jD\naction init_routes() {\n #MxIs21VA5KpTC0F8 $server := @\\u267b→restify→server;\n #B2Ui2S2BrMhefyH4 $server→get(\"/echo\", $@then);\n #c58sWTLqXwkWaboA where @then(req: ♻ restify → Request, res: ♻ restify → Response) {\n #yXsNFxumA3UsfrbL $res→send($req→body);\n }\n meta private;\n meta sync;\n}\n", -"qzky": "meta version \"v2.2,js,ctx,refs,localcloud,unicodemodel,allasync,upperplex\";\nmeta name \"blank minecraft steve\";\nmeta color \"#ffffffff\";\nmeta rootId \"nHs55hVQebfHsdRXLqdn6Z3u\";\nmeta iconArtId \"zpybrwpw\";\nmeta allowExport \"yes\";\nmeta hasIds \"yes\";\nmeta platform \"accelerometer,location,musicandsounds,network,orientation,shell\";\nmeta parentIds \"\";\n// A Minecraft Steve app #minecraft #steve #turtle\n#ew46jSsSq5jX27bx\naction main() {\n #C5Nw6Q63PHrMOwzg @\\u267b→steve→change_block(\"tnt\");\n #PP9GM4o5xyjrF9bc @\\u267b→steve→move_forward(5);\n}\n#xjJWPhuXXYNcd717 meta import steve {\n pub \"skyy\"\n usage {\n\n action `async` move_forward(blocks: Number)\n action `async` turn_left(angle: Number)\n action `async` turn_right(angle: Number)\n action `async` move_back(blocks: Number)\n action `async` change_block(name: String)\n action `async` fly_down(blocks: Number)\n action `async` fly_up(blocks: Number)\n action `async` position() returns(x: Number, z: Number)\n action `async` fly_mode()\n action `async` build_cube(sides: Number)\n action `async` build_tower(sides: Number, height: Number)\n action `async` wipe_out()\n action `async` mine(blocks: Number)\n action `async` ground_height() returns(y: Number)\n action `async` walk_mode()\n action `async` dig_mode()\n action `async` block() returns(kind: String)\n action `async` chat(msg: String)\n action `async` add_checkpoint(id: String)\n action `async` go_to_checkpoint(id: String)\n action `async` build_walls()\n }\n #xmPPKkVEJW5oafB1 resolve turtle = ♻ turtle with {\n }\n #n20JN4HoRDpuPqS7 resolve minecraft_pi = ♻ minecraft_pi with {\n }\n #gkFPFcj0NktKP08U resolve shell = ♻ shell with {\n }\n}\n#avbYmXsE1IUcMn6R meta import turtle {\n pub \"auwmg\"\n usage {\n type Maze\n\n action `async` pen_down()\n action `async` pen_up()\n action `async` move_to(x: Number, y: Number)\n action `async` forward(steps: Number)\n action `async` left_turn(angle: Number)\n action `async` set_pen_color(c: Color)\n action `async` xcor() returns(x: Number)\n action `async` ycor() returns(y: Number)\n action `async` heading() returns(a: Number)\n action `async` world_width() returns(w: Number)\n action `async` world_height() returns(h: Number)\n action `async` set_heading(angle: Number)\n action `async` set_pen_size(thickness: Number)\n action `async` right_turn(angle: Number)\n action `async` circle(radius: Number)\n action `async` world_board() returns(board: Board)\n action `async` turn_to(dx: Number, dy: Number)\n action `async` world_picture() returns(pic: Picture)\n action `async` set_speed(steps_per_second: Number)\n action `async` go_home()\n action `async` back(steps: Number)\n action `async` pen_size() returns(size: Number)\n action `async` clean()\n action `async` clear_screen()\n action `async` speed() returns(v: Number)\n action `async` set_xy(xcor: Number, ycor: Number)\n action `async` set_x(xcor: Number)\n action `async` set_y(ycor: Number)\n action `async` pen_color() returns(c: Color)\n action `async` color_under() returns(c: Color)\n action `async` save_picture()\n action `async` xy() returns(x: Number, y: Number)\n action `async` touch_xy() returns(tx: Number, ty: Number)\n action `async` grid()\n action `async` fast()\n action `async` stamp()\n action `async` set_turtle_picture(pic: Picture)\n action `async` set_turtle_opacity(opacity: Number)\n action `async` trail()\n action `async` add_obstacle(maze: ♻ turtle → Maze, x: Number, y: Number, width: Number, height: Number, c: Color)\n action `async` set_goal(maze: ♻ turtle → Maze, x: Number, y: Number, radius: Number, c: Color)\n action `async` maze() returns(maze: ♻ turtle → Maze)\n action `async` lock(maze: ♻ turtle → Maze)\n action `async` history() returns(commands: String)\n action `async` clear_history()\n action `sync` on_command(command: Text_Action)\n action `async` add_way_point(maze: ♻ turtle → Maze)\n action `async` on_collision(maze: ♻ turtle → Maze, collision: Action)\n action `async` interactive()\n action `async` on_move(@action: Action)\n action `async` set_raster(value: Boolean)\n }\n}\n#N0dQjhcc8OySnSbe meta import minecraft_pi {\n pub \"ogxna\"\n usage {\n #BVGhpbmca\n table Block_Options {\n type = \"Object\";\n exported = true;\n persistent = false;\n fields {\n // Gets the block state\n #xNQF2IfWS5kUTCuC state : Number\n // Picks a wool color if applicable.\n // {hints:white,orange,magenta,light blue,yellow,lime,pink,grey,light grey,cyan,purple,blue,brown,green,red,black}\n #xUNtn4WzFNh0J275 wool_color : String\n }\n }\n #xIIDIryL3GdLzzFH\n table Connect_Options {\n type = \"Object\";\n exported = true;\n persistent = false;\n fields {\n // Minecraft Server internet host\n #IhKVKMjdA949jNr3 host : String\n // Minecraft PI port (default 4711)\n #PQgsvjixlAlu49Bw port : Number\n // Address of the web socket proxy\n #nlMXsJlluWZB1fNN proxy : String\n }\n }\n type Entity\n #umgRs0Idq3y9jRyc\n table Block_Event {\n type = \"Object\";\n exported = true;\n persistent = false;\n fields {\n #SCV1txxxrjigP8XC kind : String\n #UIy6UFvY6WJWDDoA x : Number\n #wWASeEjKJDoiqrL2 y : Number\n #MkoIqcTcP3QiIoot z : Number\n #kYCW4sVB0Q5jQy0Q face : Number\n #EayHvTpmMjNF3Sfh entity : ♻ minecraft_pi → Entity\n }\n }\n\n action `async` connect(options\\u003f: ♻ minecraft_pi → Connect_Options)\n action `async` set_block(x: Number, y: Number, z: Number, name: String, options\\u003f: ♻ minecraft_pi → Block_Options)\n action `async` set_blocks(x: Number, y: Number, z: Number, x2: Number, y2: Number, z2: Number, name: String, options\\u003f: ♻ minecraft_pi → Block_Options)\n action `async` block(x: Number, y: Number, z: Number) returns(name: String, state: Number)\n action `async` height(x: Number, z: Number) returns(y: Number)\n action `async` chat(msg: String)\n action `async` position(entity: ♻ minecraft_pi → Entity) returns(x: Number, y: Number, z: Number)\n action `async` set_position(entity: ♻ minecraft_pi → Entity, x: Number, y: Number, z: Number)\n action `async` events_clear()\n action `async` event_block_hits() returns(hits: Collection[ ♻ minecraft_pi → Block_Event])\n action `sync` is_connected() returns(r: Boolean)\n action `async` player_() returns(steve: ♻ minecraft_pi → Entity)\n action `async` players() returns(players: Collection[ ♻ minecraft_pi → Entity])\n action `async` direction(entity: ♻ minecraft_pi → Entity) returns(d: Number)\n action `async` rotation(entity: ♻ minecraft_pi → Entity) returns(d: Number)\n action `async` pitch(entity: ♻ minecraft_pi → Entity) returns(d: Number)\n action `async` player_by_name(name: String) returns(steve: ♻ minecraft_pi → Entity)\n }\n #gNAc4g4iSTkZHWeT resolve shell = ♻ shell with {\n }\n}\n#qCJBh3ACKHsrS9Hz meta import shell {\n pub \"ohymc\"\n usage {\n #BdGhpbmca\n table Exec_Output {\n type = \"Object\";\n exported = true;\n persistent = false;\n fields {\n #YaaLgMz45N5ZuAeU success : Boolean\n #qrwQiGIhHhUhb8AF error : String\n #ijyQCE4KPQL2ziZD code : Number\n #wf4AkGfhLyWkyKhQ stdout : String\n #ZyLfqXXM99R1znCa stderr : String\n }\n }\n type Command_Result\n type Shell_Socket\n\n action `async` write_file(path: String, content: String) returns(res: ♻ shell → Command_Result)\n action `sync` mkpath(folder: String, name: String) returns(path: String)\n action `async` mkdir(path: String) returns(res: ♻ shell → Command_Result)\n action `async` exec(cmd: String, cwd: String) returns(res: ♻ shell → Exec_Output)\n action `sync` logger() returns(logger: App_Logger)\n action `async` exec_file(cmd: String, args: Collection[String], cwd: String) returns(res: ♻ shell → Exec_Output)\n action `async` python_env() returns(res: ♻ shell → Command_Result)\n action `async` tcp_connect(host: String, port: Number) returns(sock: ♻ shell → Shell_Socket)\n action `async` receive(sock: ♻ shell → Shell_Socket) returns(netdata: String)\n action `async` send(sock: ♻ shell → Shell_Socket, netdata: String)\n action `async` close(sock: ♻ shell → Shell_Socket)\n }\n}\n", "sduub": "meta version \"v2.2,js,ctx,refs,localcloud,unicodemodel,allasync\";\nmeta name \"game\";\nmeta icon \"controller\";\nmeta color \"#ff9955bb\";\nmeta rootId \"F18otGXDXq4l5kwcjDwwlg1w\";\nmeta isLibrary \"yes\";\nmeta allowExport \"yes\";\nmeta hasIds \"yes\";\nmeta platform \"current\";\nmeta parentIds \"\";\n// A library to create games with physics, life, score and leaderboard. #games\n#Ayu95FKZqA9xPdjQXSANLGvP\naction initialize(#Ef1fU1WP2dp5fv5i width: Number, #CIEvqcj84KymuPB3 height: Number) {\n #bNSXfBcyc1TlFXuk // Call this first with your game board\n #Clk2zqeLTyzvKFNp $ratio := wall→width / wall→height;\n #lHC24tGRfxpXZxgk if $width < 0 `and` $height < 0 then {\n #xZ5BAygKRsMnteqb if $ratio < 1 then {\n #Ye23loceGoB42QXd $width := 800 * $ratio;\n #XOxgQshg475aS5Hk $height := 800;\n }\n else {\n #JqNvfilYjyb1v6dO $width := 800;\n #sEmxz8ZVPjbzQaT5 $height := 800 / $ratio;\n }\n }\n #jhe41v4xeIFpAnXk if $width < $height then {\n #Qe4DsmxnWXWundDd if $width < 0 then {\n #mo0yRpxiwtI2oz42 if $ratio < 1 then {\n #sLJ2pYjNI9NO4jGv $ratio := 1 / $ratio;\n }\n #lohlOvEl2FCCHlN8 $width := $height * $ratio;\n }\n #xZv5qx7QK0pfbIwx data→\\_board := media→create_portrait_board($width, $height);\n }\n else {\n #mbaxWZ8Upqc4dY2m if $height < 0 then {\n #urxU2iGbiBiGNGbM if $ratio < 1 then {\n #xzVsM6nAQXKxe7pq $ratio := 1 / $ratio;\n }\n #Y2iBY1rS8V2IYESl $height := $width / $ratio;\n }\n #IisORl3LBXmnPKgW data→\\_board := media→create_landscape_board($width, $height);\n }\n #cpH4M20Y66Y5LRJs data→\\_score := 0;\n #ekMv5bgzPxBK4CW4 data→\\_life := 3;\n #jbZnUix7Lx1Q7ZDV data→\\_start_time := invalid→datetime;\n #w1UaCIU8Ev4ebPlb data→\\_life_txt := invalid→sprite;\n #JOr3eMPViQ4dHWhw data→\\_score_txt := invalid→sprite;\n #my4nhbFyphwdVePb data→\\_timer_txt := invalid→sprite;\n #jLtQyZzuywVmboyz data→\\_countdown_duration := - 1;\n #ZZUqmmdXH7QdhMrH data→\\_hearts := \"---;❤;❤❤;❤❤❤\" →split(\";\");\n #xKSYee6TFDQOfML9 data→\\_score_txt := code→create_text();\n #Yyg0CzGMYWO9TQ47 data→\\_score_txt→set_pos(data→\\_board→width - 132, 20);\n #CtaIZxAjWA3KSV2x data→\\_score_txt→set_color(colors→orange);\n #kTjf5SscJwSXMOxR data→\\_life_txt := code→create_text;\n #lD26N7zVYcw4OA2B data→\\_life_txt→set_color(colors→red);\n #ShXHDkMQszri4hgi data→\\_life_txt→set_pos(84, 20);\n #DF79Mzy4RLJvr5lu data→\\_timer_txt := code→create_text;\n #flUJeGo9oH4ZKL7k data→\\_timer_txt→set_pos(data→\\_board→width / 2, 20);\n #nvzUAhKiUrDNx9ua if data→\\_board→width < data→\\_board→height then {\n #tprbh6Qbs4RtbWGE data→\\_score_txt→set_y(data→\\_board→height / 10.5);\n #vo1skKgdHy2wqGAI $y := data→\\_score_txt→y;\n #xIiwhrp5beNVxp0W data→\\_timer_txt→y := data→\\_score_txt→y;\n #xRtkSt16gx2kVUQE data→\\_life_txt→set_y($y);\n #xVMKJwJbqH32RaBs data→\\_score_txt→x := data→\\_board→width - 64;\n #sftDMBB4Rc62DLVK data→\\_life_txt→x := 64;\n }\n #lVFXy8tvC2YO5VaY code→set_score(0);\n #u1GLYt6g45euiwLd code→set_life(3);\n meta private;\n}\n#xW5SJ4MKJ44wSSDVuZgZG3iS\nvar \\_board : Board {\n transient = true;\n}\n#oKY8zayGQ3QsufrQiKXXS9sh\naction set_score(#xNzj5Tyy4ubd9CTJ value: Number) {\n #PK9RS22fUTIwMlpW // Sets the current score\n #jia5eGpMgyK70yu7 data→\\_score_txt→text := math→ceiling(data→\\_score)→to_string;\n #xQiqEsIGlVBWEId8 data→\\_score := $value;\n #xolTOrWos40PlDsI if data→\\_score < 0 then {\n #x6X2fk4vDwHtW7kW data→\\_score_txt→hide;\n }\n else {\n #jdbScDz352fC51ZD data→\\_score_txt→show;\n #xK4S7FrNcjoVbrXT $anim := data→\\_score_txt→create_animation;\n #xvRwFDBdhXE6rfYC $anim→text(1, \"cubic\", \"inout\", math→ceiling(data→\\_score)→to_string);\n }\n meta sync;\n}\n#l4svuo4DZFDcDqJbGklzHLTi\naction set_life(#Od5XHbEXJ6mWwB8S value: Number) {\n #jJNGIzmWCGL9Ye5S // Sets the current life points. Set as negative or zero to end the game.\n #HrH1awtB4sa44j1P data→\\_life := math→max(0, $value);\n #KKSJ0NQA0LL2KCCt if data→\\_life ≤ 0 then {\n #UPv3xvSjaIsOHLKO code→evolve;\n #O8ZDpX4rPiqIH7PJ code→end;\n }\n}\n#xR8UEUDLaI6qbCw4GQtfFiwQ\naction start_timer() {\n #PY2vofNQd2BKaT5s // Starts a stopwatch timer\n #lh5CUs6TzxANutck data→\\_start_time := time→now;\n #SOklrsSACxtSyTFU data→\\_countdown_duration := - 1;\n meta sync;\n}\n#uCawjS8UtYJd1W4TZkrVvAE7\naction start_countdown_timer(#sXGZbgouHWzZbxDx seconds: Number) {\n #Y1MYOM224FH40w2J // Starts a countdown timer starting at second.\n #UNJ3mVD9lmnoyJtS // {hints:seconds:30,15}\n #xrYxMpoChJ3q8C4C data→\\_start_time := time→now;\n #xpOkBULYOyu5K6ol data→\\_countdown_duration := $seconds;\n meta sync;\n}\n#YXmGOuliQ2RYyUc3NtRv9DNE\naction life() returns(#ngP5T2tPSB4Euoev r: Number) {\n #xF0BpscALdWMIeMq // Returns the current life points. Negative if not set.\n #X5WbD4tx2QCjM0xZ $r := data→\\_life;\n meta sync;\n}\n#xubkD4SENn7AllzejMhYSTOV\nvar \\_life : Number {\n transient = true;\n}\n#lp3pSLpGr7O3RGbDzuSQiJ5m\nvar \\_score : Number {\n transient = true;\n}\n#xleVEbMbZTbU7BJfeUMUPpMk\naction score() returns(#x2cmZgt88Gtfc90g r: Number) {\n #ZXZChxtbZJ7VM49L // Gets the current score; negative if not set.\n #eM5HsVUk3W4Wjmar $r := data→\\_score;\n meta sync;\n}\n#TzLNjDeJYpMRpdgNFuqgE2PY\nvar \\_start_time : DateTime {\n transient = true;\n}\n#gswamj84uYSwqLED2VvLdKi6\naction evolve() {\n #V02U4MCe9H2MP9DW if `not` data→\\_board→is_invalid then {\n #xtVboJorI0AoA2Ll data→\\_board→evolve;\n #ZyuqlVaK8jZ4RcTi if data→\\_life ≥ 0 then {\n #Zzh3zjzuxyYn2f3X code→evolve_life;\n }\n #fr31zBhiCvv05kR8 if `not` data→\\_start_time→is_invalid then {\n #Im49UQ654OeS2n44 code→evolve_timer;\n }\n }\n meta private;\n}\n#pHEIAaLyqWXgpyUd6dIeYp2X\nvar \\_life_txt : Sprite {\n transient = true;\n}\n#UMupj4ChNfQ8E2uvW694p1tX\naction create_text() returns(#HsWcsHa430EovY0o r: Sprite) {\n #r2pD3YM0AhwqdeoJ $r := data→\\_board→create_text(100, 20, 28, \"\");\n #DfUPvQHARvqZmkPa $r→set_z_index(1000);\n #xvp7IxArcVElQk4H $r→set_friction(1);\n #Sh16Yvgqws3F2ttd $r→set_color(colors→foreground);\n meta private;\n meta sync;\n}\n#XjXM7AL67NDGlzsZgg9s44uq\naction evolve_life() {\n #x69dm0I2qdoTbeEa $l := math→ceiling(data→\\_life);\n #MkDJrwcWdlaEAj5i $s := \"❤ \" ∥ $l→to_string;\n #NnjfQ48F1IZTeEU4 if $l < data→\\_hearts→count then {\n #xUcDUL43eSf74Few $s := data→\\_hearts→at($l);\n }\n #Bv24Vr22toZdfAsj data→\\_life_txt→set_text($s);\n meta private;\n meta sync;\n}\n#PojbQsm32lz5k054APQR8Jb1\naction evolve_timer() {\n #tSYdAJQ9rmGX28Ph $elapsed := code→current_time;\n #zaYbaDOnN52N0y3T data→\\_timer_txt→set_text(math→round_with_precision($elapsed, 1)→to_string);\n #x5HB6TM2gE95ePes if data→\\_countdown_duration > 0 `and` $elapsed = 0 then {\n #M7CIY2SvsjyqZLbG code→end;\n }\n meta private;\n}\n#AejJAmPMk38UG2URZk5hXYh6\nvar \\_score_txt : Sprite {\n transient = true;\n}\n#x2fjfvNmVawvnAWKndzdfxls\nvar \\_timer_txt : Sprite {\n transient = true;\n}\n#x4cIV8c7P0QJsADCfcHm2ApY\nvar \\_countdown_duration : Number {\n transient = true;\n}\n#xK9ECxOm926KPUxdhlTtnYMl\naction example() {\n #akMbxF0YpXNsigw2 // This library lets you build a game with a physics engine, life, score and leaderboard.\n #EsTTE4EYqiiR5mR9 // Let's start by creating a board which we will use for the demo.\n #u3XIthRzNcrktgqo $board := code→start;\n #CB9rVzyFARPTw2L6 // You can use the board as usual.\n #a0rtwTn2G2kZoHic // * you can force landscape or portrait by using `code->start landscape` or `code->start portrait`.\n #HiLltZT9c8Ny7H2E // ### create sprites\n #EP9EIWqKvuc1cX6e // Use ``create sprite`` to create a new moving sprite of width 100.\n #xyZg3wDu5wWFWdW2 // {hide}\n #oPJA0VM7q3Dq7ZEE $pic := media→create_picture(480, 800);\n #iW2dZelc5Tuo2vJY // {/hide}\n #Ng4pLvKyecQ91WR4 $sprite := code→create_sprite($pic);\n #x2HgaAq5uHrc3P8X // ### scores\n #x3VS2BYISO2aappr // Simply call `set score` to display a score on the top right corner of the board. You can use `score` to get back the current value of the score.\n #pMoWowx4j3FkFkkQ code→set_score(3600);\n #Nb4rWtolHuG8aQWe // You can also update the current score by using `add score`.\n #nY0cqPKJNNGoYg2f code→add_score(100);\n #x42VU0bH4Y18mgZ3 // ### life indicator\n #LdsjDYMx4YCgdsld // Use the `set life` action to display a life indicator on the top left corner of the board. You can use `life` to get back the current value of the life.\n #EiPgaOurEAlcymkM code→set_life(1);\n #g9R26zu52v8nG4Lv // You can also update the current life by using `add life` or `remove life`.\n #iuvGvo404RGhd1ty code→add_life(1);\n #x2gRSkPtHp9KAAJY code→remove_life(1);\n #e9hK3ZG8eO2Uue8K // You can hide the life indicator as well.\n #s7Ov2CH1qy9FYASs code→set_life_visible(false);\n #bgcEN9gqslrdaO1M // ### timers and countdowns\n #xt4bAYcodWe3qqgS // You can also display a timer by calling `start timer`. You can use `current time` to get the seconds elapsed since the start of the timer.\n #OSsbR8gZWen9tVtk code→start_timer;\n #dFee6Un3iogCKg9q code→start_countdown_timer(10);\n #ukkrid8JC6KKttr4 // ### game over\n #PWb2EFMyS7uuvzFr // Use the `end` to finish the game\n #d4L7G4RdnmxEcHRl code→end;\n #rCcoUqTjtzJB1J3X // ### splashing text\n #YbAUazcKVtV6qku3 // A quick and easy way to display text to the user.\n #ecGxOhCF2WkgYkcB code→splash_text(\"Bonus round!!\", 1, colors→random, colors→random, $done);\n #bNYLbQktHZxfvVWO where done() {\n #ZTSBMLGC09ze9KUe skip;\n }\n #DRe04VIIWS4rwYnQ // ### parralax background\n #Gi8A6YOMZ7dX42ho // Use ``set background scene`` to create moving backgrounds\n #S2ZNHTg3eKNYn9DK code→set_background_scene(\"horizontal\", $pic);\n meta private;\n meta test;\n}\n#q4EB482ElguyYpuPEwTgQQ4e\naction current_time() returns(#Fh83zvcS14ZK6jNA seconds: Number) {\n #BFdsvunZH1UbuS9L // Current time in timer\n #C4ggpXXT0fM11xJ2 $seconds := time→now→subtract(data→\\_start_time);\n #hAkzFccDnEQ4eexF if data→\\_countdown_duration > 0 then {\n #xlavYFgnlGubTeEu $seconds := math→max(0, data→\\_countdown_duration - $seconds);\n }\n meta sync;\n}\n#emzufgdY6lsG2RaaCYaxwN8m\nvar \\_hearts : String_Collection {\n transient = true;\n}\n#xINhkUFpWzhMPF0ROZX4TSm4\naction add_score(#tAQjhhYZ8ziBD6ez value: Number) {\n #L8MM1n5h3tJq4MAH // Adds value to the current score. Value can be negative.\n #ZwhiUoPbRzDmYy7b // {hints:value:1,10,100}\n #VurwTOF3FLa4ejcU if $value > 0 then {\n #dvQS5eDbxUvHojRk code→set_score(data→\\_score + $value);\n #sfOOtfKb4Xf1BwcX if $value > 1 then {\n #l3wCIj7Pgnwwaxa6 $sprite := code→create_text;\n #SpicJAYTeJmiPCCz $sprite→set_text(math→ceiling($value)→to_string);\n #jsbm2wkw4a611R5L $sprite→set_pos(data→\\_score_txt→x, data→\\_score_txt→y);\n #xoIUTQpKKecgzCBQ $sprite→set_color(data→\\_score_txt→color);\n #A2Yn5zDjzdNo1bNy $anim := $sprite→create_animation;\n #QTO5DnOJkIqirrb8 $anim→puff_out(0.5, \"cubic\", 1.5);\n #A4CmMqj3KJAY3UGU $anim→delete;\n }\n }\n meta sync;\n}\n#l0buJlsN2iCiTbJPwUwTGWmO\naction add_life(#i5ReduzYFUpLFhbF value: Number) {\n #xFocNGxUz72Py6Dg // Adds the value to the current life. Value can be negative.\n #JBypj2Ez1thEbbpC // {hints:value:1}\n #t429gQZTs2Mi64fg code→set_life(data→\\_life + $value);\n}\n#ods2ZuwV9xHaiO5pElQlNyaE\naction clear_timer() {\n #xIt9uxPUZm1DfVjP // Hides the timer.\n #Ra8ZWiOP7bWzSa21 data→\\_start_time := invalid→datetime;\n #UvLafUxbxNZwvjGp data→\\_countdown_duration := - 1;\n meta sync;\n}\n#qoY1RsaFEb0jJJuZq8SkbAp3\naction remove_life(#R2JXjstC7H6C2I7d value: Number) {\n #UDbb3xUmllgAFfrm // Removes the value from the current life. Value can be negative.\n #BOunFP4tltU9M437 // {hints:value:1}\n #YQ51m4VCvuQWTj3G code→set_life(data→\\_life - $value);\n}\n#a14qLDjp7EtajVvdEd1rS18X\naction end() {\n #Ty1H9yFvz689uQKb // Displays a game over animation and finishes the game.\n #GEyVdP7gHEhMYuLh if `not` data→\\_board→is_invalid then {\n #PNm4kHsAAvLeTCPN if `not` data→\\_end_event→is_invalid then {\n #OmNZGM9KWiapFko7 data→\\_end_event→run;\n #xKYF8z0LLaVOQks4 code→reset;\n }\n else {\n #oCdsISU82CsuPzFb if data→\\_score > 0 then {\n #ckNPHuv2TzqnX5lX bazaar→post_leaderboard_score(data→\\_score);\n }\n #WX2o7oS0pkjUgsJI code→game_over;\n #ixtnMJPUsyivodZ2 app→restart(\"\");\n }\n }\n}\n#rUM4WD97vl3DCMmQPvBzb6jc\naction start() returns(#AbFPR1tINAAIzPii board: Board) {\n #cuJu2Z9VQgHn4Yzb // Creates a new empty game board and shows it on the screen.\n #itfyVKsFJ72c4STK $board := code→start_with_fixed_size( - 1, - 1);\n}\n#joFUGC04wxnpsBuC02e32Cvy\naction game_over() {\n #bR2JRRWa79KdtZFj $message := \"game over\";\n #M2lvKKOoUSyjBCSv $text := data→\\_board→create_text(200, 40, 40, $message);\n #JMxAY8MaxP9BJkYm $text→set_opacity(0);\n #G0kMTi3FwR2Te2TL for 0 ≤ i < 720 / 5 do {\n #x8gGwdunz5TOunUX $text→set_opacity($text→opacity + 0.05);\n #UZreYUZJfIfRGKib $text→set_color(colors→random);\n #ceUd1V8yfqAFQqBu $text→set_angle($text→angle + 5);\n #x92Ig40jCZ7U1SyU data→\\_board→update_on_wall;\n #tZWU4KGKKBKVwDn8 time→sleep(0.02);\n }\n #TU2xkLuKEQOh3DbW time→sleep(2);\n #cMsaragG8BtT1kXr $text→delete;\n #uRIMBM6HQm2N2Nxd data→\\_board→update_on_wall;\n meta private;\n}\n#Kv3t1TJgZdpYJpx9reGXtTW2\naction reset() {\n #ypVAHbhYCLxfGrbY // Resets the game engine\n #xLdUoT2qnoqxmytB code→clear_board;\n #JuuhG6ReNJxwspTc data→\\_end_event := invalid→@action;\n meta sync;\n}\n#XQPjg13t37zIEtpt44U6ff92\naction start_with_fixed_size(#x5Z0dR2qabb82pDA width: Number, #vP71QeZJBImfaq42 height: Number) returns(#QOzAYblVxQIXVsKF board: Board) {\n #GIkGM27wDa43LVsh // Initializes the game engine with the given size and returns the game board.\n #xnuJIIH3pQuwhAsw code→clear_board;\n #xUWsaURY4G0KHWcS code→initialize($width, $height);\n #CctsikpPaxGUdxUU data→\\_board→add_on_every_frame($perform);\n #NGgspE16GddTzQpD where perform() {\n #iAVXIMARzmZHG9C4 code→evolve;\n #xp5Ar4dvRYXdJEWH if `not` data→\\_board→is_invalid then {\n #KatnpCQDlegi4a82 data→\\_board→update_on_wall;\n }\n }\n #nggfDbuDWSW8HkO7 data→\\_board→post_to_wall;\n #qe89fHKQxAlM428p $board := data→\\_board;\n #rmmerjSOecJSwDqC app→log(\"game: end initialize\");\n}\n#A69js6TDtOSLAIAQQr6S33zC\naction start_with_background_picture(#IqRuFOf9jijyzGQ6 pic: Picture) returns(#qgW4pkhngSp9yx4t board: Board) {\n #DYuQdVsO2gdze4RK // Starts a game engine with the picture as background\n #KhZxjKvfIr4UkTpf $board := code→start_with_fixed_size($pic→width, $pic→height);\n #x6Z3xF23v2lYG3F2 $board→set_background_picture($pic);\n}\n#y5RrO2ILX7gVIvFQMpo6XjGo\naction board() returns(#y28JfFz47DWDtngG board: Board) {\n #bnTv8HRMWLtLAU9q // Gets the current game board for the game. Invalid if game not started.\n #nXVJcphXOyIll9oE $board := data→\\_board;\n meta sync;\n}\n#Eu2dngMaA73jYqD6d0u8iCju\nvar \\_end_event : Action {\n transient = true;\n}\n#xTv6Ulq3EWIRTV6f6oXlbDh9\naction on_end(#xPcQEigjfypzEgie @action: Action) {\n #hs2S4pK5luKS7Yx7 // Attach code to run when the game ends. Overrides the default behavior.\n #AYzAMJdPbb22r3I4 data→\\_end_event := $@action;\n meta sync;\n}\n#Xd5cD2v2HyMBTyiuwycN9lHa\naction test_on_end() {\n #y2RQOSjYPHCmTn7j code→on_end($@action);\n #XjIoI4kD9LlHrUVX where @action() {\n #fg4t4cENnu22YDnm wall→prompt(\"on end called\");\n }\n #xWqn6Z7usZe5uNhV code→start;\n #xVxjo0kGpkT8Gdob code→end;\n meta private;\n meta test;\n}\n#xOu0vfXrzi94ugA9AcysN2bf\naction test() {\n #mdU4UX4XMXiUvcqM $board := code→start;\n #hyMg45fVM9c4Ek5p $board→set_gravity(0, 200);\n #YeRPrdEXM3lGGTde $board→create_boundary(0);\n #QpoVJddHOtkHw28b $sprite := $board→create_rectangle(20, 20);\n #px6QNcegyYne2apd $sprite→set_color(colors→random);\n #xOLydxzUemgYcA0F code→add_score(100);\n meta private;\n meta test;\n}\n#xpQAnETcU9aowS6g7p1qZZbf\naction clear_board() {\n #otzjU0KwlOeyFv7W if `not` data→\\_board→is_invalid then {\n #xb2iFSOWUmUxd3BO data→\\_board→clear_every_frame_timers;\n }\n #znTtVcKS99o5PuwK data→\\_board := invalid→board;\n meta private;\n meta sync;\n}\n#a7BJpaIAFIQXxK4dh0p7dx24\naction splash_text(#zkkfu4GlLCP2VpR4 message: String, #UhC6GSzz7YIGr7om seconds: Number, #cob5g2NL5WPFJERB foreground: Color, #oE7eANpx6Js6Yy74 background: Color, #CkRu2opZg12ei2aI done: Action) {\n #M0y7c0URhyJonPa7 // Shows a full screen splash message and goes away. Does not block the game loop.\n #GCpZHAzwGv9a96uR // {hints:message:Get Ready!}\n #P4tH0Ut3u2WfkwCG if $seconds < 0.5 then {\n #xCvwguc2te1lLKE4 $seconds := 0.5;\n }\n #gQ2Dt0rq2efvvH49 $back := data→\\_board→create_rectangle(data→\\_board→width, data→\\_board→height);\n #v2gaLx1i4woeKuTv $back→set_color($background);\n #b7dLaPuBaGV7q9Ji $back→set_z_index(1000);\n #YQehWIY2hzAQ2BRj $text := data→\\_board→create_text(data→\\_board→width, 2, 60, $message);\n #z8IJzlBH3NbG5yCh $text→fit_text;\n #uY628hbLD2rnNEiK while $text→width > data→\\_board→width * 0.8 do {\n #rayekD9V5rz4rOzc $text→set_font_size($text→font_size * 0.8);\n #o4KBW2LCw0e1f7WV $text→fit_text;\n }\n #Da9p2BcmQVywBdiG $text→set_color($foreground);\n #ynExTRQQwAvh8hrH $text→set_z_index(1000);\n #mZ1swRJ8KSspXDPA $text_anim := $text→create_animation;\n #sgvsL0eJTKOVKend $text_anim→sleep($seconds);\n #x4Um8LUQYZu74SCo $text_anim→puff_out(0.9, \"cubic\", 1.5);\n #xkjPwiZ0JHuWWu8w $text_anim→delete;\n #QFgsQgBaf4E9eHpD $anim2 := $back→create_animation;\n #lz8Wv4BjDYWWy4PF $anim2→sleep($seconds + 0.7);\n #A6qQu0ahu46t3ECd $anim2→fade_out(0.2, \"cubic\");\n #xkTvtdr2OOieq3m4 $anim2→delete;\n #xby5BLlMaNeEXolS $anim2→on_stop($handler);\n #imcBHmey6h97z8ZZ where handler() {\n #Pn3eKA236i2cd8jR $done→run;\n }\n #IgDWv2ICGGG1fy5T `async` $anim2→wait;\n}\n#dztvp9VA3SKJ2iQhwHi5hOJt\naction test_show_splash() {\n #CdHT5UbOtPNVdpc7 $board := code→start_landscape;\n #FR5BPIwE2h4GLwu0 $board→set_background(colors→random);\n #nJjfk952pY1q4N14 code→splash_text(\"hello wooooooooooooooooooooooorld!\", 1, colors→white, colors→random, $done);\n #pzDNwpKV7UErnreC where done() {\n #SMMW4HxliR2ivls2 code→set_hud_colors(colors→random, colors→random, colors→random);\n #xp9OOz6xZ9cpRJQj code→start_countdown_timer(10);\n #xLR35Dz2Z0dhsZ8s $board→add_on_every_frame($perform);\n #xP1kW44KZzPyGIci where perform() {\n #x0Gtlxg8b5SJMONk code→add_score(1);\n #xT2K3e9qh4XJXL2H code→add_life(1);\n }\n }\n meta private;\n meta test;\n}\n#eIngK72C8H06n0lzszL8yaCm\naction start_landscape() returns(#vGhNIEVWNjf2DMe1 board: Board) {\n #DiW6QoP2oFAWHrdh // Starts a new landscape game\n #or2RSf2CvyV9CGi5 $board := code→start_with_fixed_size(800, - 1);\n}\n#sYve2cIuyW1MMqF3aRO2OZyU\naction start_portrait() returns(#dNtnzA61nztVz7ly board: Board) {\n #RUqcBdXLfT3WLwtI // Starts a portrait game\n #sKZshpWP91TKnlmc $board := code→start_with_fixed_size( - 1, 800);\n}\n#OMEJVlEdU2VpPg82GXpsMZTs\naction set_hud_colors(#ym5U3Gn6Cgc734j4 life: Color, #Ze4lgB3HYaEPaQms timer: Color, #x8GuNE6MswGyW8e8 score: Color) {\n #IQSX7p2v7ihFyRgW // Sets the text color of the life, timer and score text in the head-up display (hud).\n #xdJOASojRtIrV28p data→\\_life_txt→set_color($life);\n #YSRB5T5tGLdTpN6M data→\\_timer_txt→set_color($timer);\n #NRXdOMJdrV4Ktx6J data→\\_score_txt→set_color($score);\n #N8WL5zaLyqFuS7r6 data→\\_board→update_on_wall;\n meta sync;\n}\n#OSUi7mcMXLLJLfNRTez0CgSV\naction hud_sprites() returns(#xS4wU3OeXU6RjZLi sprites: Sprite_Set) {\n #xP1yJJaa18LnCHT0 // Gets the sprites used by the game board to display the head-up display.\n #ICC48H9UA4IZRlyg $sprites := data→\\_board→create_sprite_set;\n #xxzXIsbzTviF5El6 $sprites→add(data→\\_timer_txt);\n #Vx4vvyPFYOWBU33f $sprites→add(data→\\_score_txt);\n #ae9F20KA4qLwlsQG $sprites→add(data→\\_life_txt);\n meta sync;\n}\n#xoAgK46gsSE32UIau4PsRlbw\naction test_score() {\n #INflARm2bc0ire1B $board := code→start;\n #nQ3jWN002Btc09h0 $board→set_debug_mode(true);\n #v7lsr4cRsspdWafA $board→on_tap($tapped);\n #hfu0GsIcIHTumLfm where tapped(x: Number, y: Number) {\n #PI1IuG3owK4henhk code→add_score(100);\n #xWY0qUyGfdmcoj3E if code→score > 1000 then {\n #xmr1ny8p58MtPfHb code→end;\n }\n }\n meta private;\n meta test;\n}\n#qScd7vJgHvp5y6wWRmglDahb\nvar x : Boolean {\n transient = true;\n}\n#QakFM2TVyNr4ziDe1asYvARy\naction life_visible() returns(#AUsSkrVIQdg5hKUl b: Boolean) {\n #xoeItkItCNLhf6tS // Gets a value indicating if the life is visible in the hud.\n #rX1u2cGvGpIlH5cv $b := data→\\_life_txt→is_visible;\n}\n#gf2b0Sz627NLlyAFFj4MeOic\naction set_life_visible(#JTLRihoxN8cxPQ43 visible: Boolean) {\n #sD4OBtrspT0Uh0k8 // Controls the visibility of the life counter.\n #kBruCITydNqICsgy if $visible then {\n #LY35FhMwu25cQBYw data→\\_life_txt→show;\n }\n else {\n #xAsc32ZmZ4mDOFhj data→\\_life_txt→hide;\n }\n}\n#sbBwOOYCaN7mUaF0ZlZyxAYU\naction sprites() returns(#xX6pkmdt8a5KVNiS sprites: Sprite_Set) {\n #xc0QtpSbTXh1GwCV // Gets the sprites of the board, excluding hub sprites.\n #Scb2mfgsd1z4R2G8 $excluded := code→hud_sprites;\n #ws52NEnvj9qCKGjx $sprites := data→\\_board→create_sprite_set;\n #CWr1flThpV1vp2cs foreach sprite in data→\\_board\n #jcgSowlf2GnOKbqi where `not` $excluded→contains($sprite)\n do {\n #SqHBUc15dLrI44tQ $sprites→add($sprite);\n }\n meta sync;\n}\n#x8hRsIT9CAZerwKF\naction set_background_scene(#xxFyAjWYlZqmsd2c direction: String, #xWDQ4yQUS8QWIm2G pic: Picture) {\n #b4qYeJJV5fXmlqL2 // Sets the background picture and the speed of the background.\n #fDC7OSyUxOtiQToM // {hints:direction:horizontal,vertical}\n #cXnTiVb5rm0qSDSX $b := $direction→trim(\" \\t\")→to_lower_case→equals(\"horizontal\");\n #FjQX2QH2ZqBHBOpO $scene := data→\\_board→background_scene;\n #xbEzCcsY22RoPtXj $scene→clear;\n #S7bkh6r4pVcHgV8c $pic := $pic→clone;\n #VxjO3KnRByvOLvVK if $b then {\n #U2a67VkZZO12op2U $pic→resize( - 1, data→\\_board→height);\n }\n else {\n #p7Io8ZWoL2G6yL92 $pic→resize(data→\\_board→width, - 1);\n }\n #ozFKGP79IQraapHB $layer := $scene→create_layer(0, $pic);\n #eGk2b4ExeTM73Kg5 if `not` data→background_scene_move→is_invalid then {\n #TrbtdU7nPhE4r4tN data→background_scene_move→delete;\n }\n #lAeYACw4EOAzqkI9 if $b then {\n #LZGihYJA823COO24 data→background_scene_move := data→\\_board→add_on_every_frame($perform);\n #dDXqnuq6ZX0XYuiq where perform() {\n #OpD6ZCcvZ2IeZrER $scene→view_x := $scene→view_x + 1;\n }\n }\n else {\n #wzNI5zIvycykPz4e data→background_scene_move := data→\\_board→add_on_every_frame($perform);\n #CcNlh4HGCmc6EI44 where perform() {\n #xRSy4Rcl9aKAtAcs $scene→view_y := $scene→view_y + 1;\n }\n }\n}\n#oJd6t0JYUca8Bpha\nvar background_scene_move : Event_Binding {\n transient = true;\n}\n#x7LNZH9OJJV4MHMQ\naction bounce_on_sides() {\n #zDu3lJNCaInFBCJs // Makes all the sprite bounce on thee border of the screen\n #xa1tv4gUnH7S5toZ data→\\_board→create_boundary(0);\n meta sync;\n}\n#xi31jXN7f2tym77g\naction create_sprite(#U0MZEHjiclDl3NQR pic: Picture) returns(#nXzTwbGcDPXL4IbM sprite: Sprite) {\n #DHXP2H45qOOljGtB // Creates a new sprite of width 100 with the given picture.\n #PvmYHlhdUQ7SCbU9 $sprite := data→\\_board→create_picture($pic);\n #foFswt2QK0q4XHqB $sprite→set_width(100);\n meta sync;\n}\n", "spbd": "meta version \"v2.2,js,ctx,refs,localcloud,unicodemodel,allasync\";\nmeta name \"blank template\";\nmeta rootId \"s18cNgqmk4qdPwKNK0ppoMp2\";\nmeta allowExport \"yes\";\nmeta platform \"current\";\n#main\naction main() {\n skip;\n}\n", "tiwt": "meta version \"v2.2,js,ctx,refs,localcloud,unicodemodel,allasync\";\nmeta name \"blank script plugin\";\nmeta icon \"Brush\";\nmeta color \"#ffe3256b\";\nmeta rootId \"B1BBU2S1UsnHiEXWlTqkabme\";\nmeta allowExport \"yes\";\nmeta hasIds \"yes\";\nmeta platform \"current,editoronly\";\nmeta parentIds \"\";\n// A TouchDevelop plugin. #scriptPlugin #buttonPlugin\n#gYzBYlK5jAx3Qfv9\naction do_stuff(#fK8mH7TfckAPC9Ui editor: Editor) {\n #dFvzotTJtIW2DkOD code→init_log;\n #x1Y6B2xJRSkIezBw // TODO: this action gets called by the editor!\n}\n#YCEitfuBjl2PqD4f meta import ast {\n pub \"njle\"\n usage {\n action `async` `type` update_node(type: String, node: Json_Builder)\n action `async` update_nodes(ast: Json_Builder, update: ♻ ast → update_node)\n action `async` update_script(id: String, update: ♻ ast → update_node)\n action `async` test_plugin(plugin: Text_Action)\n action `sync` find_decl(@script: Json_Builder, name: String) returns(decl: Json_Builder)\n }\n}\n#xUKJA4AiahTHnwv2\nvar logger : App_Logger {\n transient = true;\n}\n#PNnxmlnhF0t47I8b\naction init_log() {\n #QliVR9SuYlA9GDox if data→logger→is_invalid then {\n #tE4d3cGdvoaUcNRY data→logger := app→create_logger(\"plugin\");\n }\n meta private;\n meta sync;\n}\n", @@ -91,7 +91,7 @@ {"name":"Welcome to the community blog!","id":"azyzc","rootid":"szcl","userid":"ajlk","description":"Welcome to the TouchDevelop community blog! #docs #blog","iconbackground":"#9955BB","icon":"SoundLow","iconArtId":"zlyvwtcm","splashArtId":null,"time":1422659306,"priority":10000,"parentTopic":"blog"}, {"name":"YouthSpark CodeIT!","id":"widw","rootid":"arzja","userid":"jeiv","description":"YouthSpark CodeIT! activities. #docs","iconbackground":"#008080","icon":"ShoppingBag","iconArtId":null,"splashArtId":null,"time":1404230161,"priority":10000}, {"name":"accelero colors tutorial","id":"dwyva","rootid":"dwyva","userid":"jeiv","description":"A fun tutorial that maps the acceleration sensor data to a background color. #docs #tutorials #stepbystep","iconbackground":"#00008B","icon":"AlignCenter","iconArtId":null,"splashArtId":null,"time":1383558568,"priority":10000,"platforms":["accelerometer"]}, -{"name":"accelero-turtle","id":"ojmka","rootid":"yrcna","userid":"jeiv","description":"Using the accelerometer to move the turtle. #docs #turtle #accelerometer #stepbystep #tutorials","iconbackground":"#007FFF","icon":"Snowflake","iconArtId":null,"splashArtId":null,"time":1418020991,"priority":10000,"platforms":["accelerometer"]}, +{"name":"accelero-turtle","id":"kwjp","rootid":"yrcna","userid":"jeiv","description":"Using the accelerometer to move the turtle. #docs #turtle #accelerometer #stepbystep #tutorials","iconbackground":"#007FFF","icon":"Snowflake","iconArtId":null,"splashArtId":null,"time":1426700546,"priority":10000,"platforms":["accelerometer"]}, {"name":"accelerometer","id":"hsmma","rootid":"yrcna","userid":"jeiv","description":"What is the accelerometer? #docs #accelerometer","iconbackground":"#007FFF","icon":"Snowflake","iconArtId":null,"splashArtId":null,"time":1384241198,"priority":10000,"platforms":["accelerometer"]}, {"name":"account settings","id":"mgyv","rootid":"tisz","userid":"jeiv","description":"Your account settings. #docs","iconbackground":"#E25822","icon":"Setting","iconArtId":null,"splashArtId":null,"time":1420746319,"priority":10000,"parentTopic":"socialcoding"}, {"name":"action parameters","id":"fmnma","rootid":"qlyt","userid":"jeiv","description":"Parameters are used to pass information in and out of an action. #docs #actionParameters #language","iconbackground":"#008080","icon":"Funnel","iconArtId":null,"splashArtId":null,"time":1412946700,"priority":10000,"parentTopic":"code"}, @@ -201,7 +201,8 @@ {"name":"falling rocks tutorial","id":"rfcea","rootid":"cxwjqvmo","userid":"jeiv","description":"A step-by-step tutorial on creating a game where you have to tilt your device to avoid falling rocks! #docs #tutorials #stepByStep #HourOfCode #tutorial","iconbackground":"#008000","icon":"Controller","iconArtId":null,"splashArtId":null,"time":1416508849,"priority":10000,"platforms":["accelerometer","musicandsounds"],"screenshot":"https://az31353.vo.msecnd.net/pub/czyykuaj"}, {"name":"faq","id":"fjsc","rootid":"gswd","userid":"jeiv","description":"Frequently asked questions. #docs #faq","iconbackground":"#B7410E","icon":"ArrowHead","iconArtId":null,"splashArtId":null,"time":1420746259,"priority":10000,"parentTopic":"contents"}, {"name":"first steps with drawing","id":"tkhvb","rootid":"alscwpqx","userid":"jeiv","description":"Use simple shapes to build amazing drawings! #docs #drawing #tutorials","iconbackground":"#A52A2A","icon":"Wand","iconArtId":null,"splashArtId":null,"time":1415066532,"priority":10000,"screenshot":"https://az31353.vo.msecnd.net/pub/rxvuaajw","parentTopic":"beginnertutorials"}, -{"name":"first steps with turtle","id":"yewwa","rootid":"fezjznjm","userid":"jeiv","description":"Draw incredible drawings with the turtle! #docs #tutorials #stepbystep #HourOfCode #tutorial","iconbackground":"#007FFF","icon":"Snowflake","iconArtId":null,"splashArtId":null,"time":1424283677,"priority":10000,"screenshot":"https://az31353.vo.msecnd.net/pub/nqolyatf"}, +{"name":"first steps with steve","id":"aklke","rootid":"fezjznjm","userid":"jeiv","description":"Buid incredible structures in Minecraft with Steve! #docs #tutorials #stepbystep #tutorial #Minecraft #steve","iconbackground":"#FFFFFF","icon":"Snowflake","iconArtId":"zpybrwpw","splashArtId":null,"time":1426558130,"priority":10000,"platforms":["editoronly"]}, +{"name":"first steps with turtle","id":"mfmqc","rootid":"fezjznjm","userid":"jeiv","description":"Draw incredible drawings with the turtle! #docs #tutorials #stepbystep #HourOfCode #tutorial","iconbackground":"#007FFF","icon":"Snowflake","iconArtId":null,"splashArtId":null,"time":1426534070,"priority":10000,"screenshot":"https://az31353.vo.msecnd.net/pub/nqolyatf"}, {"name":"flickr search tutorial","id":"ytqh","rootid":"bhdxlolr","userid":"jeiv","description":"A tutorial on how to read RSS to build a flickr search app. #docs #tutorials #stepByStep","iconbackground":"#007FFF","icon":"Save","iconArtId":null,"splashArtId":null,"time":1400089812,"priority":10000}, {"name":"for","id":"xlkga","rootid":"xmpf","userid":"jeiv","description":"Repeat code a number of times. #docs #for #language","iconbackground":"#E25822","icon":"Revert","iconArtId":null,"splashArtId":null,"time":1412665885,"priority":10000,"parentTopic":"language"}, {"name":"for each","id":"ruis","rootid":"zxfb","userid":"jeiv","description":"Run code for each element in a collection. #docs #forEach #language","iconbackground":"#85BB65","icon":"AlignLeft","iconArtId":null,"splashArtId":null,"time":1412665927,"priority":10000,"parentTopic":"language"}, @@ -213,7 +214,7 @@ {"name":"gameloop","id":"jgpl","rootid":"ryega","userid":"jeiv","description":"An event that triggers many times a second. #docs #events","iconbackground":"#FF7518","icon":"Bolt","iconArtId":null,"splashArtId":null,"time":1412947137,"priority":10000,"parentTopic":"games"}, {"name":"games","id":"yuipc","rootid":"mbqg","userid":"jeiv","description":"Resources on creating games. #docs #games","iconbackground":"#008080","icon":"Notebook","iconArtId":null,"splashArtId":null,"time":1412687862,"priority":10000,"parentTopic":"contents"}, {"name":"getting started","id":"cljk","rootid":"idsna","userid":"jeiv","description":"A few tips on getting started with TouchDevelop. #docs #gettingStarted","iconbackground":"#007FFF","icon":"CoffeeCup","iconArtId":null,"splashArtId":null,"time":1415145612,"priority":15,"parentTopic":"contents"}, -{"name":"getting started with arduino","id":"jobxd","rootid":"utpcc","userid":"jeiv","description":"A guide to developing Arduino with TouchDevelop. #docs #arduino","iconbackground":"#00CC99","icon":"ArrowCircleRounded","iconArtId":null,"splashArtId":null,"time":1421988251,"priority":10000}, +{"name":"getting started with arduino","id":"ihfmg","rootid":"utpcc","userid":"jeiv","description":"A guide to developing Arduino with TouchDevelop. #docs #arduino","iconbackground":"#00CC99","icon":"ArrowCircleRounded","iconArtId":null,"splashArtId":null,"time":1426370132,"priority":10000}, {"name":"great game","id":"xdrz","rootid":"xdrz","userid":"jeiv","description":"","iconbackground":"#9955BB","icon":"Controller","iconArtId":null,"splashArtId":null,"time":1405034770,"priority":10000,"platforms":["musicandsounds"]}, {"name":"group scripts","id":"mbwva","rootid":"knqeb","userid":"jeiv","description":"A project is a script that can be edited by multiple users. #docs","iconbackground":"#66FF00","icon":"Mute","iconArtId":null,"splashArtId":null,"time":1422318217,"priority":10000,"parentTopic":"groups"}, {"name":"groups","id":"ijmka","rootid":"yupu","userid":"jeiv","description":"A group is a collection of users. #docs","iconbackground":"#FFDF00","icon":"Stacks","iconArtId":null,"splashArtId":null,"time":1424240928,"priority":10000,"parentTopic":"teach"}, @@ -245,11 +246,14 @@ {"name":"map of things tutorial","id":"zltx","rootid":"pljua","userid":"jeiv","description":"A tutorial to build a collaborative app that allows users to collect information about things in the world. #docs #tutorials #stepByStep.","iconbackground":"#FFA500","icon":"Map","iconArtId":null,"splashArtId":null,"time":1415066980,"priority":10000,"platforms":["location","maps","clouddata"],"screenshot":"https://az31353.vo.msecnd.net/pub/heknakcs"}, {"name":"markdown","id":"ubeic","rootid":"pbph","userid":"jeiv","description":"Syntax to create formatted text. #docs #markdown","iconbackground":"#800080","icon":"Shield","iconArtId":null,"splashArtId":null,"time":1426103896,"priority":10000,"parentTopic":"comment"}, {"name":"microphone","id":"hjjw","rootid":"hjjw","userid":"jeiv","description":"Access to the #microphone #docs","iconbackground":"#E3256B","icon":"AlignCenter","iconArtId":null,"splashArtId":null,"time":1395425064,"priority":10000,"platforms":["microphone","musicandsounds"]}, -{"name":"minecraft pi getting started","id":"iyvza","rootid":"wuuvkimy","userid":"jeiv","description":"Some first steps with Minecraft Pi. #docs #tutorials #stepByStep #minecraft","iconbackground":"#800080","icon":"Erase","iconArtId":"kqezsjdm","splashArtId":null,"time":1426050263,"priority":10000}, -{"name":"minecraft pi megajump tutorial","id":"ovfhc","rootid":"wuuvkimy","userid":"jeiv","description":"A Minecraft Pi tutorial to make the player jump really high. #docs #tutorials #stepByStep #minecraft","iconbackground":"#00CC99","icon":"Erase","iconArtId":"kqezsjdm","splashArtId":null,"time":1426050209,"priority":10000}, -{"name":"minecraft pi pitfall tutorial","id":"srxpa","rootid":"wuuvkimy","userid":"jeiv","description":"A Minecraft Pi tutorial to make the player jump really high. #docs #tutorials #stepByStep #minecraft","iconbackground":"#DAA520","icon":"Erase","iconArtId":"kqezsjdm","splashArtId":null,"time":1426050897,"priority":10000}, +{"name":"minecraft pi builder tutorial","id":"izsfa","rootid":"wuuvkimy","userid":"jeiv","description":"A Minecraft Pi tutorial to make the player jump really high. #docs #tutorials #stepByStep #tutorial #minecraft","iconbackground":"#008080","icon":"Erase","iconArtId":"kqezsjdm","splashArtId":null,"time":1426700529,"priority":10000,"platforms":["editoronly"]}, +{"name":"minecraft pi lava fountain tutorial","id":"sqebe","rootid":"wuuvkimy","userid":"jeiv","description":"A Minecraft Pi tutorial to make the player jump really high. #docs #tutorials #stepByStep #minecraft","iconbackground":"#008000","icon":"Erase","iconArtId":"kqezsjdm","splashArtId":null,"time":1426533958,"priority":10000,"platforms":["editoronly"]}, +{"name":"minecraft pi megajump tutorial","id":"kdqsa","rootid":"wuuvkimy","userid":"jeiv","description":"A Minecraft Pi tutorial to make the player jump really high. #docs #tutorials #stepByStep #minecraft","iconbackground":"#00CC99","icon":"Erase","iconArtId":"kqezsjdm","splashArtId":null,"time":1426523468,"priority":10000}, +{"name":"minecraft pi pitfall tutorial","id":"ozhyc","rootid":"wuuvkimy","userid":"jeiv","description":"A Minecraft Pi tutorial to make the player jump really high. #docs #tutorials #stepByStep #minecraft","iconbackground":"#DAA520","icon":"Erase","iconArtId":"kqezsjdm","splashArtId":null,"time":1426523493,"priority":10000}, {"name":"minecraft pi setup","id":"iiwqg","rootid":"ypgksxfl","userid":"jeiv","description":"Explains how to setup TouchDevelop and Minecraft Pi. #docs #minecraft","iconbackground":"#E25822","icon":"Funnel","iconArtId":"kqezsjdm","splashArtId":null,"time":1426096976,"priority":10000}, -{"name":"minecraft pi tutorials","id":"ysxp","rootid":"ggrw","userid":"jeiv","description":"A set of tutorials for Minecraft. #docs #minecraft","iconbackground":"#A1CAF1","icon":"GPS","iconArtId":"kqezsjdm","splashArtId":null,"time":1426050942,"priority":10000,"parentTopic":"tutorials"}, +{"name":"minecraft pi super digger tutorial","id":"oacfa","rootid":"wuuvkimy","userid":"jeiv","description":"A Minecraft PI tutorial to leave a trail of blocks. #docs #tutorials #stepByStep #tutorial #minecraft","iconbackground":"#E25822","icon":"Erase","iconArtId":"kqezsjdm","splashArtId":null,"time":1426700561,"priority":10000,"platforms":["editoronly"]}, +{"name":"minecraft pi trail tutorial","id":"agce","rootid":"wuuvkimy","userid":"jeiv","description":"A Minecraft PI tutorial to leave a trail of blocks. #docs #tutorials #stepByStep #tutorial #minecraft","iconbackground":"#DAA520","icon":"Erase","iconArtId":"kqezsjdm","splashArtId":null,"time":1426700550,"priority":10000,"platforms":["editoronly"]}, +{"name":"minecraft pi tutorials","id":"wvrk","rootid":"ggrw","userid":"jeiv","description":"A set of tutorials for Minecraft. #docs #minecraft","iconbackground":"#A1CAF1","icon":"GPS","iconArtId":"kqezsjdm","splashArtId":null,"time":1426700533,"priority":10000,"parentTopic":"tutorials"}, {"name":"monster slicer tutorial","id":"rebp","rootid":"cxwjqvmo","userid":"jeiv","description":"A step-by-step tutorial on creating a game with bouncing monsters #docs #tutorials #stepByStep #HourOfCode #tutorial","iconbackground":"#008000","icon":"Controller","iconArtId":null,"splashArtId":null,"time":1416508877,"priority":10000,"platforms":["musicandsounds"],"screenshot":"https://az31353.vo.msecnd.net/pub/dwhkdiwe","parentTopic":"gametutorials"}, {"name":"move to library","id":"uvthb","rootid":"igxk","userid":"jeiv","description":"Explains the move to library refactoring that allows you to easily identify and move a set of script elements to a library.\r\n#docs #refactorings","iconbackground":"#FDEE00","icon":"DocumentsAlt","iconArtId":null,"splashArtId":null,"time":1412701848,"priority":10000,"parentTopic":"refactorings"}, {"name":"name matcher","id":"dszyb","rootid":"rizvatwt","userid":"jeiv","description":"This is a tutorial to build a love compatibility tester in TouchDevelop. #docs","iconbackground":"#E3256B","icon":"CheckAlt","iconArtId":null,"splashArtId":null,"time":1415067352,"priority":10000,"parentTopic":"gametutorials"}, @@ -288,6 +292,7 @@ {"name":"quadratic equation activity","id":"gbqpa","rootid":"gnty","userid":"jeiv","description":"This is an activity for students learning quadratic equation #docs #math #stem.","iconbackground":"#FDEE00","icon":"PlusBox","iconArtId":null,"splashArtId":null,"time":1367468952,"priority":10000}, {"name":"quadratic equation solver","id":"qzvj","rootid":"tyltxixd","userid":"jeiv","description":"Learn how to solve classic math problems using TouchDevelop #docs #math #tutorials #stepbystep","iconbackground":"#007FFF","icon":"Graph","iconArtId":null,"splashArtId":null,"time":1384378223,"priority":10000}, {"name":"random number guesser tutorial","id":"algna","rootid":"gvwxajqc","userid":"jeiv","description":"A migration guide from block editors such as Scratch. #docs #blocks #Scratch #Snap #AppInvetor #Snap #blockly #BYOB #tutorials #stepbystep","iconbackground":"#9955BB","icon":"SmilieHappyAlt","iconArtId":null,"splashArtId":null,"time":1386311399,"priority":10000,"platforms":["musicandsounds"],"screenshot":"https://az31353.vo.msecnd.net/pub/kromirev"}, +{"name":"raspberry pi setup","id":"kieya","rootid":"gjwna","userid":"jeiv","description":"Instructions to setup TouchDevelop on Raspberry Pi 1 or 2. #docs","iconbackground":"#A1CAF1","icon":"GPS","iconArtId":"ykkgklzh","splashArtId":null,"time":1426700525,"priority":10000}, {"name":"records","id":"bosw","rootid":"rvqe","userid":"jeiv","description":"Tables, indexes, objects and decorators. #docs #records #language","iconbackground":"#9955BB","icon":"Files","iconArtId":null,"splashArtId":null,"time":1412665788,"priority":10000,"parentTopic":"language"}, {"name":"recursion","id":"zqdka","rootid":"zqdka","userid":"jeiv","description":"Explain the principle of recursive action calls. #docs","iconbackground":"#EEDC82","icon":"Cycle","iconArtId":null,"splashArtId":null,"time":1374787923,"priority":10000}, {"name":"refactorings","id":"diwwa","rootid":"magu","userid":"jeiv","description":"Use TouchDevelop code editor to its fullest with #refactorings #docs","iconbackground":"#008080","icon":"Male","iconArtId":null,"splashArtId":null,"time":1412666493,"priority":10000,"parentTopic":"advancedtopics"}, @@ -325,21 +330,21 @@ {"name":"tiles","id":"skzn","rootid":"ygaya","userid":"jeiv","description":"Learn how to control the active tiles of your scripts. #docs #tiles","iconbackground":"#EEDC82","icon":"WritePage","iconArtId":null,"splashArtId":null,"time":1377844202,"priority":10000,"platforms":["tiles"]}, {"name":"tinter tutorial","id":"lrgbb","rootid":"xeeua","userid":"jeiv","description":"A tutorial to build an app that tints pictures #docs #apps #tutorials #stepbystep","iconbackground":"#B7410E","icon":"Wand","iconArtId":null,"splashArtId":null,"time":1415076872,"priority":10000}, {"name":"touchdevelop lingo","id":"osjjb","rootid":"ayxftkzb","userid":"jeiv","description":"A script to translate the TouchDevelop UI.","iconbackground":"#FFA500","icon":"FourColumn","iconArtId":null,"splashArtId":null,"time":1405111182,"priority":10000,"platforms":["translation"]}, -{"name":"touchdevelop local","id":"dbjyb","rootid":"hdgs","userid":"jeiv","description":"Explains how to export a script to the App Store. #docs","iconbackground":"#007FFF","icon":"GlobeEUA","iconArtId":null,"splashArtId":null,"time":1421106164,"priority":10000,"parentTopic":"contents"}, +{"name":"touchdevelop local","id":"mfvka","rootid":"hdgs","userid":"jeiv","description":"Explains how to export a script to the App Store. #docs","iconbackground":"#007FFF","icon":"GlobeEUA","iconArtId":null,"splashArtId":null,"time":1426118730,"priority":10000,"parentTopic":"contents"}, {"name":"translating docs","id":"nfze","rootid":"nfze","userid":"jeiv","description":"How to help translating docs. #docs","iconbackground":"#F5DEB3","icon":"Watch","iconArtId":null,"splashArtId":null,"time":1386099740,"priority":10000}, -{"name":"turtle fractals tutorial","id":"awwwa","rootid":"lfqv","userid":"jeiv","description":"Learn how to draw incredible drawings with recursion and the turtle! #docs #tutorials #turtle #stepbystep","iconbackground":"#FF7518","icon":"SMSAlt","iconArtId":null,"splashArtId":null,"time":1414649981,"priority":10000,"screenshot":"https://az31353.vo.msecnd.net/pub/piztqcln"}, +{"name":"turtle fractals tutorial","id":"oxpy","rootid":"lfqv","userid":"jeiv","description":"Learn how to draw incredible drawings with recursion and the turtle! #docs #tutorials #turtle #stepbystep","iconbackground":"#FF7518","icon":"SMSAlt","iconArtId":null,"splashArtId":null,"time":1426700555,"priority":10000,"screenshot":"https://az31353.vo.msecnd.net/pub/piztqcln"}, {"name":"turtle keyboard","id":"dkqba","rootid":"dkqba","userid":"jeiv","description":"#turtle","iconbackground":"#007FFF","icon":"Snowflake","iconArtId":null,"splashArtId":null,"time":1418280649,"priority":10000}, -{"name":"turtle keyboard tutorial","id":"znrnc","rootid":"wxcxb","userid":"jeiv","description":"A tutorial to learn how to use the keyboard to control the turtle. #turtle #docs #tutorials #stepByStep","iconbackground":"#007FFF","icon":"Snowflake","iconArtId":null,"splashArtId":null,"time":1418363158,"priority":10000}, +{"name":"turtle keyboard tutorial","id":"usqu","rootid":"wxcxb","userid":"jeiv","description":"A tutorial to learn how to use the keyboard to control the turtle. #turtle #docs #tutorials #stepByStep","iconbackground":"#007FFF","icon":"Snowflake","iconArtId":null,"splashArtId":null,"time":1426700564,"priority":10000}, {"name":"turtle notes","id":"ixbc","rootid":"qjvtnqox","userid":"jeiv","description":"The notes associated to the 'love me not' tutorial. #docs","iconbackground":"#008000","icon":"AlignCenter","iconArtId":null,"splashArtId":null,"time":1415066868,"priority":10000}, {"name":"turtle ramp up examples","id":"juqg","rootid":"acaiqrll","userid":"jeiv","description":"#turtle","iconbackground":"#007FFF","icon":"Snowflake","iconArtId":null,"splashArtId":null,"time":1412920367,"priority":10000}, -{"name":"turtle ramp up tutorial","id":"cojh","rootid":"bduiuwwq","userid":"jeiv","description":"A quick ramp up tutorail to learn TouchDevelop #turtle #docs #stepByStep","iconbackground":"#007FFF","icon":"Snowflake","iconArtId":null,"splashArtId":null,"time":1417736293,"priority":10000,"screenshot":"https://az31353.vo.msecnd.net/pub/yscsjswl"}, -{"name":"turtle shapes 2 tutorial","id":"coyua","rootid":"vgekb","userid":"jeiv","description":"An interactive tutorial to learn geometric shapes. #docs #tutorials #stepByStep #tutorial","iconbackground":"#00CC99","icon":"Erase","iconArtId":null,"splashArtId":null,"time":1424753700,"priority":10000,"screenshot":"https://az31353.vo.msecnd.net/pub/gvzmkxvo"}, -{"name":"turtle shapes tutorial","id":"sblh","rootid":"vgekb","userid":"jeiv","description":"An interactive tutorial to learn geometric shapes. #docs #tutorials #stepByStep #tutorial","iconbackground":"#FF7518","icon":"Erase","iconArtId":null,"splashArtId":null,"time":1424753487,"priority":10000,"screenshot":"https://az31353.vo.msecnd.net/pub/gvzmkxvo"}, -{"name":"turtle snowflake tutorial","id":"azgqa","rootid":"lfqv","userid":"jeiv","description":"Learn how to draw Koch snowflake fractals with the turtle. #docs #tutorials #turtle #stepbystep","iconbackground":"#007FFF","icon":"Snowflake","iconArtId":null,"splashArtId":null,"time":1415054966,"priority":10000,"screenshot":"https://az31353.vo.msecnd.net/pub/ikidmsox"}, -{"name":"turtle tree tutorial","id":"estvg","rootid":"qkiw","userid":"jeiv","description":"A turtle that draws a tree. #docs #tutorials #stepbystep","iconbackground":"#007FFF","icon":"snowflake","iconArtId":null,"splashArtId":null,"time":1424719262,"priority":10000,"screenshot":"https://az31353.vo.msecnd.net/pub/otbheubo"}, -{"name":"turtle triangle spiral tutorial","id":"ycje","rootid":"qkiw","userid":"jeiv","description":"A tutorial to learn to draw spirals with turtle. #docs #tutorials #stepbystep","iconbackground":"#007FFF","icon":"snowflake","iconArtId":null,"splashArtId":null,"time":1415054919,"priority":10000,"screenshot":"https://az31353.vo.msecnd.net/pub/tngqslcx"}, +{"name":"turtle ramp up tutorial","id":"uorec","rootid":"bduiuwwq","userid":"jeiv","description":"A quick ramp up tutorail to learn TouchDevelop #turtle #docs #stepByStep","iconbackground":"#007FFF","icon":"Snowflake","iconArtId":null,"splashArtId":null,"time":1426700537,"priority":10000,"screenshot":"https://az31353.vo.msecnd.net/pub/yscsjswl"}, +{"name":"turtle shapes 2 tutorial","id":"mllcc","rootid":"vgekb","userid":"jeiv","description":"An interactive tutorial to learn geometric shapes. #docs #tutorials #stepByStep #tutorial","iconbackground":"#00CC99","icon":"Erase","iconArtId":null,"splashArtId":null,"time":1426700588,"priority":10000,"screenshot":"https://az31353.vo.msecnd.net/pub/gvzmkxvo"}, +{"name":"turtle shapes tutorial","id":"ijvg","rootid":"vgekb","userid":"jeiv","description":"An interactive tutorial to learn geometric shapes. #docs #tutorials #stepByStep #tutorial","iconbackground":"#FF7518","icon":"Erase","iconArtId":null,"splashArtId":null,"time":1426619822,"priority":10000,"screenshot":"https://az31353.vo.msecnd.net/pub/gvzmkxvo"}, +{"name":"turtle snowflake tutorial","id":"issna","rootid":"lfqv","userid":"jeiv","description":"Learn how to draw Koch snowflake fractals with the turtle. #docs #tutorials #turtle #stepbystep","iconbackground":"#007FFF","icon":"Snowflake","iconArtId":null,"splashArtId":null,"time":1426700593,"priority":10000,"screenshot":"https://az31353.vo.msecnd.net/pub/ikidmsox"}, +{"name":"turtle tree tutorial","id":"schr","rootid":"qkiw","userid":"jeiv","description":"A turtle that draws a tree. #docs #tutorials #stepbystep","iconbackground":"#007FFF","icon":"snowflake","iconArtId":null,"splashArtId":null,"time":1426700570,"priority":10000,"screenshot":"https://az31353.vo.msecnd.net/pub/otbheubo"}, +{"name":"turtle triangle spiral tutorial","id":"waoqa","rootid":"qkiw","userid":"jeiv","description":"A tutorial to learn to draw spirals with turtle. #docs #tutorials #stepbystep","iconbackground":"#007FFF","icon":"snowflake","iconArtId":null,"splashArtId":null,"time":1426700580,"priority":10000,"screenshot":"https://az31353.vo.msecnd.net/pub/tngqslcx"}, {"name":"turtle tutorials","id":"nzfda","rootid":"ofmd","userid":"jeiv","description":"A set of interactive tutorials for users new to programming. #docs #tutorials","iconbackground":"#FF00FF","icon":"PieChart","iconArtId":null,"splashArtId":null,"time":1418281876,"priority":10000,"parentTopic":"tutorials"}, -{"name":"turtle-a-sketch tutorial","id":"cjfmb","rootid":"pntza","userid":"jeiv","description":"A tutorial to make the turtle follow the touch point #turtle #docs #tutorials #stepByStep","iconbackground":"#007FFF","icon":"Snowflake","iconArtId":null,"splashArtId":null,"time":1418281928,"priority":10000}, +{"name":"turtle-a-sketch tutorial","id":"crywc","rootid":"pntza","userid":"jeiv","description":"A tutorial to make the turtle follow the touch point #turtle #docs #tutorials #stepByStep","iconbackground":"#007FFF","icon":"Snowflake","iconArtId":null,"splashArtId":null,"time":1426700557,"priority":10000}, {"name":"tutorial playground","id":"objv","rootid":"objv","userid":"jeiv","description":"","iconbackground":"#FDEE00","icon":"Pen","iconArtId":null,"splashArtId":null,"time":1383503483,"priority":10000}, {"name":"tutorial template","id":"ryzld","rootid":"lazr","userid":"jeiv","description":"A tutorial. #docs #tutorials #stepbystep","iconbackground":"#9955BB","icon":"SignalAlt","iconArtId":null,"splashArtId":null,"time":1395865565,"priority":10000}, {"name":"tutorials","id":"oqsm","rootid":"awiza","userid":"jeiv","description":"A list of TouchDevelop tutorials. #docs #tutorials","iconbackground":"#E25822","icon":"Video","iconArtId":null,"splashArtId":null,"time":1417788406,"priority":2,"parentTopic":"contents"}, @@ -363,7 +368,7 @@ {"title":"blank scratch","id":"blankscratch","icon":"Controller","name":"ADJ app","description":"An empty app using the scratch library.","section":"beginners","scriptid":"enyra","editorMode":1}, {"title":"blank pixel art","id":"blankpixelart","icon":"NineColumn","name":"ADJ art","description":"A pixel art app.","section":"beginners","scriptid":"mdrw","editorMode":1}, {"title":"blank minecraft pi","id":"blankminecraftpi","icon":"NineColumn","name":"ADJ craft","description":"A Minecraft Pi app.","section":"Minecraft","scriptid":"cptje","editorMode":1}, -{"title":"blank minecraft steve","id":"blankminecraftsteve","icon":"NineColumn","name":"ADJ steve","description":"A Minecraft Steve app.","section":"Minecraft","scriptid":"qzky","editorMode":1}, +{"title":"blank minecraft steve","id":"blankminecraftsteve","icon":"NineColumn","name":"ADJ steve","description":"A Minecraft Steve app.","section":"Minecraft","scriptid":"etti","editorMode":1}, {"title":"blank cordova library","id":"blankcordovalibrary","icon":"ApproveButton","name":"cordova ADJ plugin","description":"An wrapper around an Apache Cordova plugin.","section":"apps","scriptid":"gtfla","editorMode":3}, {"title":"blank web api","id":"blankwebapi","icon":"Stacks","name":"ADJ api","description":"A web API using node.js and restify.","section":"web sites","scriptid":"qexxc","editorMode":3}, {"title":"blank azure web api","id":"blankazurewebapi","icon":"Stacks","name":"azure ADJ api","description":"A web API using azure services, node.js and restify.","section":"web sites","scriptid":"gexxa","editorMode":3},