From 3a310a60bd5e9b4ed3041723a6b7ec1092a984fe Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 24 Mar 2024 13:48:53 +0000 Subject: [PATCH] deploy: 8e4787f709091b818135a72f851167521184b93c --- 404.html | 2 +- ...36c6e.627047f2.js => 0be36c6e.44e4e04a.js} | 2 +- assets/js/3164f9fb.281a5b03.js | 1 - assets/js/3164f9fb.dfc70995.js | 1 + assets/js/61036be0.b6b2cd3b.js | 1 + assets/js/61036be0.c52ea3e6.js | 1 - ...aa6a8.43876ded.js => 693aa6a8.34bf2d89.js} | 2 +- ...67976.326724d7.js => bde67976.c440d31c.js} | 2 +- assets/js/c9cd16d1.ccdfc422.js | 1 - assets/js/c9cd16d1.ce61f061.js | 1 + ...n.aade9a94.js => runtime~main.7731f4e9.js} | 2 +- blog/archive/index.html | 2 +- blog/first-blog-post/index.html | 2 +- blog/index.html | 2 +- blog/tags/first/index.html | 2 +- blog/tags/index.html | 2 +- docs/APIs/Fmath/index.html | 2 +- docs/APIs/PewPew/index.html | 2 +- docs/APIs/standard-libraries/index.html | 2 +- docs/APIs/types/index.html | 2 +- .../manifest-files/index.html | 2 +- docs/File Information/mesh-files/index.html | 2 +- docs/File Information/sound-files/index.html | 4 +- docs/Guides/Lua/advanced/index.html | 5 +- docs/Guides/Lua/beginner/index.html | 66 ++++++++----------- docs/Guides/Lua/intermediate/index.html | 37 +++++------ docs/Guides/Other/fps-animation/index.html | 22 +++---- docs/intro/index.html | 2 +- docs/other/level-design-principles/index.html | 2 +- docs/other/level-restrictions/index.html | 8 +-- docs/other/trivia/index.html | 2 +- index.html | 2 +- search-index.json | 2 +- search/index.html | 2 +- 34 files changed, 87 insertions(+), 105 deletions(-) rename assets/js/{0be36c6e.627047f2.js => 0be36c6e.44e4e04a.js} (94%) delete mode 100644 assets/js/3164f9fb.281a5b03.js create mode 100644 assets/js/3164f9fb.dfc70995.js create mode 100644 assets/js/61036be0.b6b2cd3b.js delete mode 100644 assets/js/61036be0.c52ea3e6.js rename assets/js/{693aa6a8.43876ded.js => 693aa6a8.34bf2d89.js} (85%) rename assets/js/{bde67976.326724d7.js => bde67976.c440d31c.js} (55%) delete mode 100644 assets/js/c9cd16d1.ccdfc422.js create mode 100644 assets/js/c9cd16d1.ce61f061.js rename assets/js/{runtime~main.aade9a94.js => runtime~main.7731f4e9.js} (64%) diff --git a/404.html b/404.html index dd65720..d3bef09 100644 --- a/404.html +++ b/404.html @@ -5,7 +5,7 @@ Page Not Found | PPL Docs - + diff --git a/assets/js/0be36c6e.627047f2.js b/assets/js/0be36c6e.44e4e04a.js similarity index 94% rename from assets/js/0be36c6e.627047f2.js rename to assets/js/0be36c6e.44e4e04a.js index d818519..12fb577 100644 --- a/assets/js/0be36c6e.627047f2.js +++ b/assets/js/0be36c6e.44e4e04a.js @@ -1 +1 @@ -"use strict";(self.webpackChunkppl_docs=self.webpackChunkppl_docs||[]).push([[5559],{6304:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>u,frontMatter:()=>h,metadata:()=>r,toc:()=>c});var i=t(4848),s=t(8453),a=t(3554),o=t.n(a);const h={sidebar_position:1},l="60 FPS Animation",r={id:"Guides/Other/fps-animation",title:"60 FPS Animation",description:"Tutorial created by WinterNox.",source:"@site/docs/Guides/Other/60-fps-animation.mdx",sourceDirName:"Guides/Other",slug:"/Guides/Other/fps-animation",permalink:"/ppl-docs/docs/Guides/Other/fps-animation",draft:!1,unlisted:!1,editUrl:"https://github.com/pewpewlive/ppl-docs/edit/master/docs/Guides/Other/60-fps-animation.mdx",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Advanced",permalink:"/ppl-docs/docs/Guides/Lua/advanced"},next:{title:"Design principles",permalink:"/ppl-docs/docs/other/level-design-principles"}},d={},c=[{value:"YouTube tutorial",id:"youtube-tutorial",level:3},{value:"Mesh animations",id:"mesh-animations",level:3},{value:"Limitations",id:"limitations",level:3},{value:"Setting up",id:"setting-up",level:3},{value:"Getting started",id:"getting-started",level:3},{value:"Making the mesh",id:"making-the-mesh",level:4},{value:"Creating the entity and assigning it the mesh",id:"creating-the-entity-and-assigning-it-the-mesh",level:4},{value:"Animating the mesh",id:"animating-the-mesh",level:3},{value:"Making the animation 60 FPS",id:"making-the-animation-60-fps",level:3}];function m(e){const n={a:"a",code:"code",em:"em",h1:"h1",h3:"h3",h4:"h4",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"60-fps-animation",children:"60 FPS Animation"}),"\n",(0,i.jsxs)(n.p,{children:["Tutorial created by ",(0,i.jsx)(n.a,{href:"https://github.com/WinterNox",children:"WinterNox"}),"."]}),"\n",(0,i.jsx)(n.h3,{id:"youtube-tutorial",children:"YouTube tutorial"}),"\n",(0,i.jsx)("iframe",{src:"//www.youtube.com/embed/145kDy9nr3E",frameborder:"0",allowfullscreen:!0,width:"100%",height:"480px"}),"\n",(0,i.jsx)(n.h3,{id:"mesh-animations",children:"Mesh animations"}),"\n",(0,i.jsx)(n.p,{children:"Mesh animations in PewPew Live are achieved by iterating through multiple meshes that are slightly different from each other. The meshes are usually stored in a single file and are made procedurally."}),"\n",(0,i.jsx)(n.h3,{id:"limitations",children:"Limitations"}),"\n",(0,i.jsx)(n.p,{children:"If you have some experience with level creation, you should know that PewPew Live runs at 30 ticks per second and that the graphics are interpolated. However, the interpolation only applies to transformations (position, rotation and scale). But, what about mesh animations? Since you can only change something about the entity per tick, mesh animations would be limited to 30 frames per second. Thankfully, the PPL Lua API has just the right function that can be used to achieve 60 FPS mesh animations. This function is:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"pewpew.customizable_entity_set_flipping_meshes(entity_id, file_path, index1, index2)\n"})}),"\n",(0,i.jsx)(n.p,{children:"When used, the entity will switch between the two specified meshes in a single game tick. But, how does that help us achieve 60 FPS animations? Let's see."}),"\n",(0,i.jsx)(n.h3,{id:"setting-up",children:"Setting up"}),"\n",(0,i.jsxs)(n.p,{children:["Before we can start making an animation and assigning it to an entity, we need to have a base level that we can work with.\nStart by creating a new folder in ",(0,i.jsx)(n.code,{children:"./content/levels/"}),". In the newly created folder, make sure you have these files:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"level.lua"})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"graphics.lua"})," (The name of your mesh file can be different, but remember it!)"]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"manifest.json"})}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["If you need a basic ",(0,i.jsx)(n.code,{children:"manifest.json"}),", here is a template you can use."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'{\n "name": "60 FPS",\n "descriptions": ["Amazing"],\n "entry_point": "level.lua",\n "has_score_leaderboard": false\n}\n'})}),"\n",(0,i.jsx)(n.h3,{id:"getting-started",children:"Getting started"}),"\n",(0,i.jsxs)(n.p,{children:["Now that we have a level base, we can start making our mesh and entity. If at any point you face a problem, try following the steps again, or check the ",(0,i.jsxs)(n.a,{href:"https://github.com/pewpewlive/ppl-utils/tree/master/content/levels/sample_animation",children:["final ",(0,i.jsx)(n.code,{children:".lua"})," files"]}),"."]}),"\n",(0,i.jsx)(n.h4,{id:"making-the-mesh",children:"Making the mesh"}),"\n",(0,i.jsxs)(n.p,{children:["Open ",(0,i.jsx)(n.code,{children:"graphics.lua"})," (or your mesh file) and start by writing the following:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"meshes = {}\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Since our meshes are going to be procedurally generated, we won't be making every vertex by hand, instead, we will make Lua do that for us! Essentially when making a procedural mesh, we make a table with our vertexes and segments, that we later add to the ",(0,i.jsx)(n.code,{children:"meshes"})," table. The vertex and segment tables are going to hold the generated points and segment indexes."]}),"\n",(0,i.jsx)(n.p,{children:"Add this to your mesh file:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"-- Tables for our mesh vertexes, segments\nlocal computed_vertexes, computed_segments = {}, {}\n"})}),"\n",(0,i.jsx)(n.p,{children:"Now we need a way to populate the tables with our mesh points and segments."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.em,{children:"Note: In this example, we will be making a hexagon!"})}),"\n",(0,i.jsxs)(n.p,{children:["Start by defining the ",(0,i.jsx)(n.code,{children:"radius"})," and ",(0,i.jsx)(n.code,{children:"small_radius"})," variables. They will be used when generating the hexagon sides. Also, create a variable ",(0,i.jsx)(n.code,{children:"i"}),", which will be used for the segments. Now, create a for loop that will go from ",(0,i.jsx)(n.code,{children:"0"})," to ",(0,i.jsx)(n.code,{children:"math.pi * 2"})," and increment by ",(0,i.jsx)(n.code,{children:"math.pi * 2 / 6"})," (since we want it to be a hexagon). Get the corresponding sine and cosine of the angle (y and x positions). Multiply one pair by the default radius and one by the smaller radius, and add them to the vertexes table. To add the needed segment indexes, we need to connect the vertexes together. Connect the inner hexagon vertex to the outer one, connect the inner hexagon vertex with its own next vertex, and connect the outer hexagon vertex the same way. Increment the segment counter by 2."]}),"\n",(0,i.jsx)(n.p,{children:"The resulting code should look something like this:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"local radius = 96 -- Outer hexagon\nlocal small_radius = 48 -- Inner hexagon\n\nlocal i = 0\nfor angle = 0, math.pi * 2, math.pi * 2 / 6 do -- We want to go from angle 0 to 2\u03c0, skipping by 2\u03c0 / 6, making a hexagon\n local y, x = math.sincos(angle) -- y and x positions on the unit circle\n\n table.insert(computed_vertexes, {x * radius, y * radius}) -- Vertex for the outer hexagon\n table.insert(computed_vertexes, {x * small_radius, y * small_radius}) -- Vertex for the inner hexagon\n\n table.insert(computed_segments, {i, i + 1}) -- Line joining the corresponding vertices of the inner and outer hexagons\n table.insert(computed_segments, {i, i + 2}) -- Line joining the vertex of the outer hexagon to its next one\n table.insert(computed_segments, {i + 1, i + 3}) -- Line joining the vertex of the inner hexagon to its next one\n\n i = i + 2\nend\n"})}),"\n",(0,i.jsx)(n.p,{children:"Because of the way we added the segments, at the end of the for loop we get extra segments that are unnecessary. After the for loop, we can remove them by doing this:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"table.remove(computed_segments, #computed_segments) -- Removal of the last segment as there is no vertex at index i + 3 during the last iteration\ntable.remove(computed_segments, #computed_segments) -- No vertex at index i + 2 during the last iteration\ntable.remove(computed_segments, #computed_segments) -- A line is already present joining the vertices\n"})}),"\n",(0,i.jsx)(n.p,{children:"At the end, we add the mesh made up of the generated vertexes and segments."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"table.insert(meshes, {\n vertexes = computed_vertexes,\n segments = computed_segments\n})\n"})}),"\n",(0,i.jsx)(n.h4,{id:"creating-the-entity-and-assigning-it-the-mesh",children:"Creating the entity and assigning it the mesh"}),"\n",(0,i.jsxs)(n.p,{children:["Now, go to ",(0,i.jsx)(n.code,{children:"level.lua"}),", and start by creating an entity at position ",(0,i.jsx)(n.code,{children:"(0fx, 0fx)"}),". Next, set the entity's mesh to the one we just created."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'local id = pewpew.new_customizable_entity(0fx, 0fx)\npewpew.customizable_entity_set_mesh(id, "/dynamic/graphics.lua", 0) -- Change the filename if needed\n'})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.em,{children:"Note: Setting level size and creating a player is optional."})}),"\n",(0,i.jsxs)(n.p,{children:["Run ",(0,i.jsx)(n.code,{children:"ppl-utils.exe"})," and open your level at ",(0,i.jsx)(n.a,{href:"http://localhost:9000/pewpew.html",children:"http://localhost:9000/pewpew.html"})]}),"\n",(0,i.jsxs)(n.p,{children:["You should see the following:\n",(0,i.jsx)(n.img,{src:"https://github.com/pewpewlive/ppl-utils/assets/42890752/10aa6ab4-46cb-4798-b8f8-a72435d42b32",alt:"Initial mesh"})]}),"\n",(0,i.jsx)(n.p,{children:"If you don't, you might have made a mistake somewhere! Check the steps to make the mesh again and check for mistakes."}),"\n",(0,i.jsx)(n.h3,{id:"animating-the-mesh",children:"Animating the mesh"}),"\n",(0,i.jsx)(n.p,{children:"Let's get into animating our mesh! For this tutorial, we will have the outer hexagon rotating clockwise and the inner hexagon counterclockwise."}),"\n",(0,i.jsx)(n.p,{children:'To do this, we need multiple "meshes" that we will set our entity to.'}),"\n",(0,i.jsx)(n.p,{children:"In your mesh file, change for loop to the following:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"for angle_offset = 0, math.pi * 2, math.pi * 2 / 60 do -- Our animation will have 60 frames. We want the hexagons to make a full rotation each 60 frames (2 seconds). This does not mean the animation is 60FPS yet!\n -- Tables for our mesh vertexes, segments\n local computed_vertexes, computed_segments = {}, {}\n\n local radius = 96 -- Outer hexagon\n local small_radius = 48 -- Inner hexagon\n\n local i = 0\n for angle = 0, math.pi * 2, math.pi * 2 / 6 do -- We want to go from angle 0 to 2\u03c0, skipping by 2\u03c0 / 6, making a hexagon\n local y, x = math.sincos(angle) -- y and x positions on the unit circle\n\n table.insert(computed_vertexes, {x * radius, y * radius}) -- Vertex for the outer hexagon\n table.insert(computed_vertexes, {x * small_radius, y * small_radius}) -- Vertex for the inner hexagon\n\n table.insert(computed_segments, {i, i + 1}) -- Line joining the corresponding vertices of the inner and outer hexagons\n table.insert(computed_segments, {i, i + 2}) -- Line joining the vertex of the outer hexagon to its next one\n table.insert(computed_segments, {i + 1, i + 3}) -- Line joining the vertex of the inner hexagon to its next one\n\n i = i + 2\n end\n\n table.remove(computed_segments, #computed_segments) -- Removal of the last segment as there is no vertex at index i + 3 during the last iteration\n table.remove(computed_segments, #computed_segments) -- No vertex at index i + 2 during the last iteration\n table.remove(computed_segments, #computed_segments) -- A line is already present joining the vertices\n\n table.insert(meshes, {\n vertexes = computed_vertexes,\n segments = computed_segments\n })\nend\n"})}),"\n",(0,i.jsx)(n.p,{children:"As you can see, the real mesh generation code is pretty much the same, just that we repeat it several times instead, making it have frames!"}),"\n",(0,i.jsx)(n.p,{children:"Now, most importantly, we need to change the way we get the points of our hexagon. Since we want the outer hexagon to turn clockwise and the inner one counterclockwise, we need to change the angles depending on which frame we are on. Since each frame is going to have a specific angle offset, we can add that to our initial angles, meaning we have to change this line:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"local y, x = math.sincos(angle)\n"})}),"\n",(0,i.jsx)(n.p,{children:"into"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"local y, x = math.sincos(angle - angle_offset)\n"})}),"\n",(0,i.jsx)(n.p,{children:"And add a new line below it like so:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"local y2, x2 = math.sincos(angle + angle_offset)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["We will use ",(0,i.jsx)(n.code,{children:"x2"})," and ",(0,i.jsx)(n.code,{children:"y2"})," for the inner hexagon. To do this, replace the ",(0,i.jsx)(n.code,{children:"x * small_radius"})," and ",(0,i.jsx)(n.code,{children:"y * small_radius"})," coordinates for the inner hexagon with ",(0,i.jsx)(n.code,{children:"x2 * small_radius"})," and ",(0,i.jsx)(n.code,{children:"y2 * small_radius"})," respectively."]}),"\n",(0,i.jsxs)(n.p,{children:["We now have 60 frames of meshes that we can use to animate our entity. To do this, we need to use an index which will increase every tick, and use that to set the entity's mesh. This can be done like so:\nIn ",(0,i.jsx)(n.code,{children:"level.lua"}),", replace the second line with this code:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'local mesh_index = 0\npewpew.entity_set_update_callback(id, function()\n -- We have 60 frames out of 61 total frames. The last frame is equal to the first one and is unused.\n -- The index of the 60th frame is 59. (Although we are using lua, mesh and sound indexes start from 0 in PewPew Lib API.)\n -- Loop when we have exceeded past the last frame.\n if mesh_index > 59 then\n mesh_index = 0\n end\n\n pewpew.customizable_entity_set_mesh(id, "/dynamic/graphics.lua", mesh_index)\n mesh_index = mesh_index + 1\nend)\n'})}),"\n",(0,i.jsx)(n.p,{children:"The code is pretty self-explanatory. We increment the index every tick and use that index to set the mesh. Since the meshes we have generated have small changes in them, doing this creates an animation."}),"\n",(0,i.jsx)(n.p,{children:"The result should look something like this:"}),"\n",(0,i.jsx)(o(),{controls:!0,playing:!0,loop:!0,url:"https://github.com/pewpewlive/ppl-utils/assets/42890752/5a2c1a1c-d079-4497-ab83-deca095ca01a"}),"\n",(0,i.jsx)(n.p,{children:"As you can see, it is an animation. Though, this animation is running at only 30 frames per second. This is an issue. An animation running at 30 FPS will not look good with the rest of the level as the level might have other content that moves. And as you already know, position transformation is interpolated by PewPew Live. This means that, even though the level runs at 30 ticks per second, the game will interpolate the graphics and display them at 60 FPS or 90 FPS for example. (The game interpolates the graphics as per the refresh rate of the device, which will usually be higher than 30Hz.) To ensure that the difference between the rest of the level and our mesh animation is minimal, we have to make our mesh animation run on at least 60 FPS."}),"\n",(0,i.jsx)(n.h3,{id:"making-the-animation-60-fps",children:"Making the animation 60 FPS"}),"\n",(0,i.jsx)(n.p,{children:"Open your mesh file and replace the line"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"for angle_offset = 0, math.pi * 2, math.pi * 2 / 60 do -- 60\n -- Code that generates the meshes\nend\n"})}),"\n",(0,i.jsx)(n.p,{children:"with"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"for angle_offset = 0, math.pi * 2, math.pi * 2 / 120 do -- 120\n -- Code that generates the meshes\nend\n"})}),"\n",(0,i.jsx)(n.p,{children:"The new code will create 121 frames or meshes for us, out of which 120 will be used. (This is because the last and first frames are the same.)"}),"\n",(0,i.jsx)(n.p,{children:"If you save the files and run your level, you might notice that the animation is getting reset halfway through. This is because at the 60th frame, we have gone only 50% through the animation."}),"\n",(0,i.jsxs)(n.p,{children:["Since we now have 120 frames, we need to change the code in ",(0,i.jsx)(n.code,{children:"level.lua"})," to account for this change. Open ",(0,i.jsx)(n.code,{children:"level.lua"})," and change the line"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"if mesh_index > 59 then\n mesh_index = 0\nend\n"})}),"\n",(0,i.jsx)(n.p,{children:"to"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"if mesh_index > 119 then\n mesh_index = 0\nend\n"})}),"\n",(0,i.jsxs)(n.p,{children:["The new code now shows the complete animation when running the level. However, it is visibly slower. Why is this the case? Remember, in the previous case, the variable ",(0,i.jsx)(n.code,{children:"angle_offset"})," was increasing by ",(0,i.jsx)(n.code,{children:"2\u03c0/60"})," every frame. Now, it is increasing by ",(0,i.jsx)(n.code,{children:"2\u03c0/120"})," every frame. You might be wondering why we did this. This is because to achieve a 60 FPS animation that runs with the same speed, we need to have double the amount of frames that we had previously. We now just need to speed the animation back to its original speed."]}),"\n",(0,i.jsxs)(n.p,{children:["Open ",(0,i.jsx)(n.code,{children:"level.lua"})," and change"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"mesh_index = mesh_index + 1\n"})}),"\n",(0,i.jsx)(n.p,{children:"to"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"mesh_index = mesh_index + 2\n"})}),"\n",(0,i.jsx)(n.p,{children:"This should make the animation return to its original speed, as we are skipping every other frame. However, if you save the files and run your level, you will notice no change between the current animation and the one we had at the start. You would in fact be right, there is no difference between the two. Our animation still runs at 30 FPS. This is where flipping meshes comes into play."}),"\n",(0,i.jsxs)(n.p,{children:["Open ",(0,i.jsx)(n.code,{children:"level.lua"})," and replace"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'pewpew.customizable_entity_set_mesh(id, "/dynamic/graphics.lua", mesh_index)\n'})}),"\n",(0,i.jsx)(n.p,{children:"with"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'pewpew.customizable_entity_set_flipping_meshes(id, "/dynamic/graphics.lua", mesh_index, mesh_index + 1)\n'})}),"\n",(0,i.jsxs)(n.p,{children:["What does this exactly do? When we set flipping meshes of an entity, that entity goes over the two specified meshes in a single game tick. This means that, in the first game tick, it will have the mesh at ",(0,i.jsx)(n.code,{children:"index 0"})," for half a tick and will have the mesh at ",(0,i.jsx)(n.code,{children:"index 1"})," for the rest half of a tick. In the next tick, we are resetting the flipping meshes. The variable ",(0,i.jsx)(n.code,{children:"mesh_index"})," now has a value of ",(0,i.jsx)(n.code,{children:"2"}),". The entity now has the mesh at ",(0,i.jsx)(n.code,{children:"index 2"})," for half a tick and has the mesh at ",(0,i.jsx)(n.code,{children:"index 3"})," for half a tick. Notice that we have gone over 4 meshes in just 2 game ticks (2 meshes per game tick)! The way in which we have used this creates an animation that runs at 60 FPS. Now, if you ",(0,i.jsx)(n.strong,{children:"save the files and run your level"}),", you'll notice that it is a lot smoother than our initial animation. It is exactly twice as smooth. It might look something like this:"]}),"\n",(0,i.jsx)(o(),{controls:!0,playing:!0,loop:!0,url:"https://github.com/pewpewlive/ppl-utils/assets/42890752/342de310-cc7b-4b4b-8c35-5cf34d078ad0"}),"\n",(0,i.jsx)(n.p,{children:"Congratulations! You have successfully made an animation that runs at 60 frames per second. I hope that you were able to understand this fairly well. Now, experiment with your code and make creative animations."})]})}function u(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(m,{...e})}):m(e)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkppl_docs=self.webpackChunkppl_docs||[]).push([[5559],{6304:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>u,frontMatter:()=>h,metadata:()=>r,toc:()=>c});var i=t(4848),s=t(8453),a=t(3554),o=t.n(a);const h={sidebar_position:1},l="60 FPS Animation",r={id:"Guides/Other/fps-animation",title:"60 FPS Animation",description:"Tutorial created by WinterNox.",source:"@site/docs/Guides/Other/60-fps-animation.mdx",sourceDirName:"Guides/Other",slug:"/Guides/Other/fps-animation",permalink:"/ppl-docs/docs/Guides/Other/fps-animation",draft:!1,unlisted:!1,editUrl:"https://github.com/pewpewlive/ppl-docs/edit/master/docs/Guides/Other/60-fps-animation.mdx",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Advanced",permalink:"/ppl-docs/docs/Guides/Lua/advanced"},next:{title:"Design principles",permalink:"/ppl-docs/docs/other/level-design-principles"}},d={},c=[{value:"YouTube tutorial",id:"youtube-tutorial",level:2},{value:"Mesh animations",id:"mesh-animations",level:2},{value:"Limitations",id:"limitations",level:2},{value:"Setting up",id:"setting-up",level:2},{value:"Getting started",id:"getting-started",level:2},{value:"Making the mesh",id:"making-the-mesh",level:3},{value:"Creating the entity and assigning it the mesh",id:"creating-the-entity-and-assigning-it-the-mesh",level:3},{value:"Animating the mesh",id:"animating-the-mesh",level:2},{value:"Making the animation 60 FPS",id:"making-the-animation-60-fps",level:2}];function m(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"60-fps-animation",children:"60 FPS Animation"}),"\n",(0,i.jsxs)(n.p,{children:["Tutorial created by ",(0,i.jsx)(n.a,{href:"https://github.com/WinterNox",children:"WinterNox"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"youtube-tutorial",children:"YouTube tutorial"}),"\n",(0,i.jsx)("iframe",{src:"//www.youtube.com/embed/145kDy9nr3E",frameborder:"0",allowfullscreen:!0,width:"100%",height:"480px"}),"\n",(0,i.jsx)(n.h2,{id:"mesh-animations",children:"Mesh animations"}),"\n",(0,i.jsx)(n.p,{children:"Mesh animations in PewPew Live are achieved by iterating through multiple meshes that are slightly different from each other. The meshes are usually stored in a single file and are made procedurally."}),"\n",(0,i.jsx)(n.h2,{id:"limitations",children:"Limitations"}),"\n",(0,i.jsx)(n.p,{children:"If you have some experience with level creation, you should know that PewPew Live runs at 30 ticks per second and that the graphics are interpolated. However, the interpolation only applies to transformations (position, rotation and scale). But, what about mesh animations? Since you can only change something about the entity per tick, mesh animations would be limited to 30 frames per second. Thankfully, the PPL Lua API has just the right function that can be used to achieve 60 FPS mesh animations. This function is:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"pewpew.customizable_entity_set_flipping_meshes(entity_id, file_path, index1, index2)\n"})}),"\n",(0,i.jsx)(n.p,{children:"When used, the entity will switch between the two specified meshes in a single game tick. But, how does that help us achieve 60 FPS animations? Let's see."}),"\n",(0,i.jsx)(n.h2,{id:"setting-up",children:"Setting up"}),"\n",(0,i.jsxs)(n.p,{children:["Before we can start making an animation and assigning it to an entity, we need to have a base level that we can work with.\nStart by creating a new folder in ",(0,i.jsx)(n.code,{children:"./content/levels/"}),". In the newly created folder, make sure you have these files:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"level.lua"})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"graphics.lua"})," (The name of your mesh file can be different, but remember it!)"]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"manifest.json"})}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["If you need a basic ",(0,i.jsx)(n.code,{children:"manifest.json"}),", here is a template you can use."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'{\n "name": "60 FPS",\n "descriptions": ["Amazing"],\n "entry_point": "level.lua",\n "has_score_leaderboard": false\n}\n'})}),"\n",(0,i.jsx)(n.h2,{id:"getting-started",children:"Getting started"}),"\n",(0,i.jsxs)(n.p,{children:["Now that we have a level base, we can start making our mesh and entity. If at any point you face a problem, try following the steps again, or check the ",(0,i.jsxs)(n.a,{href:"https://github.com/pewpewlive/ppl-utils/tree/master/content/levels/sample_animation",children:["final ",(0,i.jsx)(n.code,{children:".lua"})," files"]}),"."]}),"\n",(0,i.jsx)(n.h3,{id:"making-the-mesh",children:"Making the mesh"}),"\n",(0,i.jsxs)(n.p,{children:["Open ",(0,i.jsx)(n.code,{children:"graphics.lua"})," (or your mesh file) and start by writing the following:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"meshes = {}\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Since our meshes are going to be procedurally generated, we won't be making every vertex by hand, instead, we will make Lua do that for us! Essentially when making a procedural mesh, we make a table with our vertexes and segments, that we later add to the ",(0,i.jsx)(n.code,{children:"meshes"})," table. The vertex and segment tables are going to hold the generated points and segment indexes."]}),"\n",(0,i.jsx)(n.p,{children:"Add this to your mesh file:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"-- Tables for our mesh vertexes, segments\nlocal computed_vertexes, computed_segments = {}, {}\n"})}),"\n",(0,i.jsx)(n.p,{children:"Now we need a way to populate the tables with our mesh points and segments."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.em,{children:"Note: In this example, we will be making a hexagon!"})}),"\n",(0,i.jsxs)(n.p,{children:["Start by defining the ",(0,i.jsx)(n.code,{children:"radius"})," and ",(0,i.jsx)(n.code,{children:"small_radius"})," variables. They will be used when generating the hexagon sides. Also, create a variable ",(0,i.jsx)(n.code,{children:"i"}),", which will be used for the segments. Now, create a for loop that will go from ",(0,i.jsx)(n.code,{children:"0"})," to ",(0,i.jsx)(n.code,{children:"math.pi * 2"})," and increment by ",(0,i.jsx)(n.code,{children:"math.pi * 2 / 6"})," (since we want it to be a hexagon). Get the corresponding sine and cosine of the angle (y and x positions). Multiply one pair by the default radius and one by the smaller radius, and add them to the vertexes table. To add the needed segment indexes, we need to connect the vertexes together. Connect the inner hexagon vertex to the outer one, connect the inner hexagon vertex with its own next vertex, and connect the outer hexagon vertex the same way. Increment the segment counter by 2."]}),"\n",(0,i.jsx)(n.p,{children:"The resulting code should look something like this:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"local radius = 96 -- Outer hexagon\nlocal small_radius = 48 -- Inner hexagon\n\nlocal i = 0\nfor angle = 0, math.pi * 2, math.pi * 2 / 6 do -- We want to go from angle 0 to 2\u03c0, skipping by 2\u03c0 / 6, making a hexagon\n local y, x = math.sincos(angle) -- y and x positions on the unit circle\n\n table.insert(computed_vertexes, {x * radius, y * radius}) -- Vertex for the outer hexagon\n table.insert(computed_vertexes, {x * small_radius, y * small_radius}) -- Vertex for the inner hexagon\n\n table.insert(computed_segments, {i, i + 1}) -- Line joining the corresponding vertices of the inner and outer hexagons\n table.insert(computed_segments, {i, i + 2}) -- Line joining the vertex of the outer hexagon to its next one\n table.insert(computed_segments, {i + 1, i + 3}) -- Line joining the vertex of the inner hexagon to its next one\n\n i = i + 2\nend\n"})}),"\n",(0,i.jsx)(n.p,{children:"Because of the way we added the segments, at the end of the for loop we get extra segments that are unnecessary. After the for loop, we can remove them by doing this:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"table.remove(computed_segments, #computed_segments) -- Removal of the last segment as there is no vertex at index i + 3 during the last iteration\ntable.remove(computed_segments, #computed_segments) -- No vertex at index i + 2 during the last iteration\ntable.remove(computed_segments, #computed_segments) -- A line is already present joining the vertices\n"})}),"\n",(0,i.jsx)(n.p,{children:"At the end, we add the mesh made up of the generated vertexes and segments."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"table.insert(meshes, {\n vertexes = computed_vertexes,\n segments = computed_segments\n})\n"})}),"\n",(0,i.jsx)(n.h3,{id:"creating-the-entity-and-assigning-it-the-mesh",children:"Creating the entity and assigning it the mesh"}),"\n",(0,i.jsxs)(n.p,{children:["Now, go to ",(0,i.jsx)(n.code,{children:"level.lua"}),", and start by creating an entity at position ",(0,i.jsx)(n.code,{children:"(0fx, 0fx)"}),". Next, set the entity's mesh to the one we just created."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'local id = pewpew.new_customizable_entity(0fx, 0fx)\npewpew.customizable_entity_set_mesh(id, "/dynamic/graphics.lua", 0) -- Change the filename if needed\n'})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.em,{children:"Note: Setting level size and creating a player is optional."})}),"\n",(0,i.jsxs)(n.p,{children:["Run ",(0,i.jsx)(n.code,{children:"ppl-utils.exe"})," and open your level at ",(0,i.jsx)(n.a,{href:"http://localhost:9000/pewpew.html",children:"http://localhost:9000/pewpew.html"})]}),"\n",(0,i.jsxs)(n.p,{children:["You should see the following:\n",(0,i.jsx)(n.img,{src:"https://github.com/pewpewlive/ppl-utils/assets/42890752/10aa6ab4-46cb-4798-b8f8-a72435d42b32",alt:"Initial mesh"})]}),"\n",(0,i.jsx)(n.p,{children:"If you don't, you might have made a mistake somewhere! Check the steps to make the mesh again and check for mistakes."}),"\n",(0,i.jsx)(n.h2,{id:"animating-the-mesh",children:"Animating the mesh"}),"\n",(0,i.jsx)(n.p,{children:"Let's get into animating our mesh! For this tutorial, we will have the outer hexagon rotating clockwise and the inner hexagon counterclockwise."}),"\n",(0,i.jsx)(n.p,{children:'To do this, we need multiple "meshes" that we will set our entity to.'}),"\n",(0,i.jsx)(n.p,{children:"In your mesh file, change for loop to the following:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"for angle_offset = 0, math.pi * 2, math.pi * 2 / 60 do -- Our animation will have 60 frames. We want the hexagons to make a full rotation each 60 frames (2 seconds). This does not mean the animation is 60FPS yet!\n -- Tables for our mesh vertexes, segments\n local computed_vertexes, computed_segments = {}, {}\n\n local radius = 96 -- Outer hexagon\n local small_radius = 48 -- Inner hexagon\n\n local i = 0\n for angle = 0, math.pi * 2, math.pi * 2 / 6 do -- We want to go from angle 0 to 2\u03c0, skipping by 2\u03c0 / 6, making a hexagon\n local y, x = math.sincos(angle) -- y and x positions on the unit circle\n\n table.insert(computed_vertexes, {x * radius, y * radius}) -- Vertex for the outer hexagon\n table.insert(computed_vertexes, {x * small_radius, y * small_radius}) -- Vertex for the inner hexagon\n\n table.insert(computed_segments, {i, i + 1}) -- Line joining the corresponding vertices of the inner and outer hexagons\n table.insert(computed_segments, {i, i + 2}) -- Line joining the vertex of the outer hexagon to its next one\n table.insert(computed_segments, {i + 1, i + 3}) -- Line joining the vertex of the inner hexagon to its next one\n\n i = i + 2\n end\n\n table.remove(computed_segments, #computed_segments) -- Removal of the last segment as there is no vertex at index i + 3 during the last iteration\n table.remove(computed_segments, #computed_segments) -- No vertex at index i + 2 during the last iteration\n table.remove(computed_segments, #computed_segments) -- A line is already present joining the vertices\n\n table.insert(meshes, {\n vertexes = computed_vertexes,\n segments = computed_segments\n })\nend\n"})}),"\n",(0,i.jsx)(n.p,{children:"As you can see, the real mesh generation code is pretty much the same, just that we repeat it several times instead, making it have frames!"}),"\n",(0,i.jsx)(n.p,{children:"Now, most importantly, we need to change the way we get the points of our hexagon. Since we want the outer hexagon to turn clockwise and the inner one counterclockwise, we need to change the angles depending on which frame we are on. Since each frame is going to have a specific angle offset, we can add that to our initial angles, meaning we have to change this line:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"local y, x = math.sincos(angle)\n"})}),"\n",(0,i.jsx)(n.p,{children:"into"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"local y, x = math.sincos(angle - angle_offset)\n"})}),"\n",(0,i.jsx)(n.p,{children:"And add a new line below it like so:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"local y2, x2 = math.sincos(angle + angle_offset)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["We will use ",(0,i.jsx)(n.code,{children:"x2"})," and ",(0,i.jsx)(n.code,{children:"y2"})," for the inner hexagon. To do this, replace the ",(0,i.jsx)(n.code,{children:"x * small_radius"})," and ",(0,i.jsx)(n.code,{children:"y * small_radius"})," coordinates for the inner hexagon with ",(0,i.jsx)(n.code,{children:"x2 * small_radius"})," and ",(0,i.jsx)(n.code,{children:"y2 * small_radius"})," respectively."]}),"\n",(0,i.jsxs)(n.p,{children:["We now have 60 frames of meshes that we can use to animate our entity. To do this, we need to use an index which will increase every tick, and use that to set the entity's mesh. This can be done like so:\nIn ",(0,i.jsx)(n.code,{children:"level.lua"}),", replace the second line with this code:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'local mesh_index = 0\npewpew.entity_set_update_callback(id, function()\n -- We have 60 frames out of 61 total frames. The last frame is equal to the first one and is unused.\n -- The index of the 60th frame is 59. (Although we are using lua, mesh and sound indexes start from 0 in PewPew Lib API.)\n -- Loop when we have exceeded past the last frame.\n if mesh_index > 59 then\n mesh_index = 0\n end\n\n pewpew.customizable_entity_set_mesh(id, "/dynamic/graphics.lua", mesh_index)\n mesh_index = mesh_index + 1\nend)\n'})}),"\n",(0,i.jsx)(n.p,{children:"The code is pretty self-explanatory. We increment the index every tick and use that index to set the mesh. Since the meshes we have generated have small changes in them, doing this creates an animation."}),"\n",(0,i.jsx)(n.p,{children:"The result should look something like this:"}),"\n",(0,i.jsx)(o(),{controls:!0,playing:!0,loop:!0,url:"https://github.com/pewpewlive/ppl-utils/assets/42890752/5a2c1a1c-d079-4497-ab83-deca095ca01a"}),"\n",(0,i.jsx)(n.p,{children:"As you can see, it is an animation. Though, this animation is running at only 30 frames per second. This is an issue. An animation running at 30 FPS will not look good with the rest of the level as the level might have other content that moves. And as you already know, position transformation is interpolated by PewPew Live. This means that, even though the level runs at 30 ticks per second, the game will interpolate the graphics and display them at 60 FPS or 90 FPS for example. (The game interpolates the graphics as per the refresh rate of the device, which will usually be higher than 30Hz.) To ensure that the difference between the rest of the level and our mesh animation is minimal, we have to make our mesh animation run on at least 60 FPS."}),"\n",(0,i.jsx)(n.h2,{id:"making-the-animation-60-fps",children:"Making the animation 60 FPS"}),"\n",(0,i.jsx)(n.p,{children:"Open your mesh file and replace the line"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"for angle_offset = 0, math.pi * 2, math.pi * 2 / 60 do -- 60\n -- Code that generates the meshes\nend\n"})}),"\n",(0,i.jsx)(n.p,{children:"with"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"for angle_offset = 0, math.pi * 2, math.pi * 2 / 120 do -- 120\n -- Code that generates the meshes\nend\n"})}),"\n",(0,i.jsx)(n.p,{children:"The new code will create 121 frames or meshes for us, out of which 120 will be used. (This is because the last and first frames are the same.)"}),"\n",(0,i.jsx)(n.p,{children:"If you save the files and run your level, you might notice that the animation is getting reset halfway through. This is because at the 60th frame, we have gone only 50% through the animation."}),"\n",(0,i.jsxs)(n.p,{children:["Since we now have 120 frames, we need to change the code in ",(0,i.jsx)(n.code,{children:"level.lua"})," to account for this change. Open ",(0,i.jsx)(n.code,{children:"level.lua"})," and change the line"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"if mesh_index > 59 then\n mesh_index = 0\nend\n"})}),"\n",(0,i.jsx)(n.p,{children:"to"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"if mesh_index > 119 then\n mesh_index = 0\nend\n"})}),"\n",(0,i.jsxs)(n.p,{children:["The new code now shows the complete animation when running the level. However, it is visibly slower. Why is this the case? Remember, in the previous case, the variable ",(0,i.jsx)(n.code,{children:"angle_offset"})," was increasing by ",(0,i.jsx)(n.code,{children:"2\u03c0/60"})," every frame. Now, it is increasing by ",(0,i.jsx)(n.code,{children:"2\u03c0/120"})," every frame. You might be wondering why we did this. This is because to achieve a 60 FPS animation that runs with the same speed, we need to have double the amount of frames that we had previously. We now just need to speed the animation back to its original speed."]}),"\n",(0,i.jsxs)(n.p,{children:["Open ",(0,i.jsx)(n.code,{children:"level.lua"})," and change"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"mesh_index = mesh_index + 1\n"})}),"\n",(0,i.jsx)(n.p,{children:"to"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"mesh_index = mesh_index + 2\n"})}),"\n",(0,i.jsx)(n.p,{children:"This should make the animation return to its original speed, as we are skipping every other frame. However, if you save the files and run your level, you will notice no change between the current animation and the one we had at the start. You would in fact be right, there is no difference between the two. Our animation still runs at 30 FPS. This is where flipping meshes comes into play."}),"\n",(0,i.jsxs)(n.p,{children:["Open ",(0,i.jsx)(n.code,{children:"level.lua"})," and replace"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'pewpew.customizable_entity_set_mesh(id, "/dynamic/graphics.lua", mesh_index)\n'})}),"\n",(0,i.jsx)(n.p,{children:"with"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'pewpew.customizable_entity_set_flipping_meshes(id, "/dynamic/graphics.lua", mesh_index, mesh_index + 1)\n'})}),"\n",(0,i.jsxs)(n.p,{children:["What does this exactly do? When we set flipping meshes of an entity, that entity goes over the two specified meshes in a single game tick. This means that, in the first game tick, it will have the mesh at ",(0,i.jsx)(n.code,{children:"index 0"})," for half a tick and will have the mesh at ",(0,i.jsx)(n.code,{children:"index 1"})," for the rest half of a tick. In the next tick, we are resetting the flipping meshes. The variable ",(0,i.jsx)(n.code,{children:"mesh_index"})," now has a value of ",(0,i.jsx)(n.code,{children:"2"}),". The entity now has the mesh at ",(0,i.jsx)(n.code,{children:"index 2"})," for half a tick and has the mesh at ",(0,i.jsx)(n.code,{children:"index 3"})," for half a tick. Notice that we have gone over 4 meshes in just 2 game ticks (2 meshes per game tick)! The way in which we have used this creates an animation that runs at 60 FPS. Now, if you ",(0,i.jsx)(n.strong,{children:"save the files and run your level"}),", you'll notice that it is a lot smoother than our initial animation. It is exactly twice as smooth. It might look something like this:"]}),"\n",(0,i.jsx)(o(),{controls:!0,playing:!0,loop:!0,url:"https://github.com/pewpewlive/ppl-utils/assets/42890752/342de310-cc7b-4b4b-8c35-5cf34d078ad0"}),"\n",(0,i.jsx)(n.p,{children:"Congratulations! You have successfully made an animation that runs at 60 frames per second. I hope that you were able to understand this fairly well. Now, experiment with your code and make creative animations."})]})}function u(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(m,{...e})}):m(e)}}}]); \ No newline at end of file diff --git a/assets/js/3164f9fb.281a5b03.js b/assets/js/3164f9fb.281a5b03.js deleted file mode 100644 index c4d904e..0000000 --- a/assets/js/3164f9fb.281a5b03.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkppl_docs=self.webpackChunkppl_docs||[]).push([[198],{8730:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>r,default:()=>c,frontMatter:()=>s,metadata:()=>l,toc:()=>h});var i=n(4848),o=n(8453);const s={sidebar_position:2},r="Intermediate",l={id:"Guides/Lua/intermediate",title:"Intermediate",description:"If you are here, you made it through the learning process of the Lua language! Keep in mind, this section assumes that you know basic Lua. If you need to freshen up, look back onto the Beginner tutorials!",source:"@site/docs/Guides/Lua/intermediate.md",sourceDirName:"Guides/Lua",slug:"/Guides/Lua/intermediate",permalink:"/ppl-docs/docs/Guides/Lua/intermediate",draft:!1,unlisted:!1,editUrl:"https://github.com/pewpewlive/ppl-docs/edit/master/docs/Guides/Lua/intermediate.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Beginner Lua Tutorial",permalink:"/ppl-docs/docs/Guides/Lua/beginner"},next:{title:"Advanced",permalink:"/ppl-docs/docs/Guides/Lua/advanced"}},a={},h=[{value:"GETTING STARTED",id:"getting-started",level:3},{value:"PEWPEW LIVE API - FUNCTIONS",id:"pewpew-live-api---functions",level:3},{value:"PEWPEW LIVE API - FMATH",id:"pewpew-live-api---fmath",level:3},{value:"PEWPEW LIVE API - ENUMS",id:"pewpew-live-api---enums",level:3},{value:"WHERE DOES THE LEVEL GO?",id:"where-does-the-level-go",level:3},{value:"OPEN YOUR LEVEL",id:"open-your-level",level:3},{value:"THE START OF A LEVEL",id:"the-start-of-a-level",level:3}];function d(e){const t={a:"a",code:"code",em:"em",h1:"h1",h3:"h3",hr:"hr",img:"img",p:"p",pre:"pre",strong:"strong",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"intermediate",children:"Intermediate"}),"\n",(0,i.jsx)(t.p,{children:"If you are here, you made it through the learning process of the Lua language! Keep in mind, this section assumes that you know basic Lua. If you need to freshen up, look back onto the Beginner tutorials!"}),"\n",(0,i.jsxs)(t.p,{children:["Here, we will learn ",(0,i.jsx)(t.strong,{children:"how to make a PewPew Live Custom Level"})]}),"\n",(0,i.jsx)(t.h3,{id:"getting-started",children:"GETTING STARTED"}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.p,{children:"So in order to begin making a level, you will need to visit a couple of links."}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"https://github.com/jyaif/ppl-utils",children:"https://github.com/jyaif/ppl-utils"})," <--- This link right here will take you to the files you need to make your level! Scroll down to ",(0,i.jsx)(t.strong,{children:"Getting Started"})," and follow the directions!"]}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"https://pewpewlive.github.io/ppl-utils/",children:"https://pewpewlive.github.io/ppl-utils/"})," <--- This link right here is the PewPew Live API. That means, many important functions and items that are needed to make your level are found on this site!"]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"Also, make sure you have a text editor to make your code in! If you need help with this, go to the discord and ask about it in #technical-discuss!"})}),"\n",(0,i.jsx)(t.h3,{id:"pewpew-live-api---functions",children:"PEWPEW LIVE API - FUNCTIONS"}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.p,{children:"Before we begin in our first steps to making a level, it is crucial to understand the PewPew Live API."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"Let's take a look..."})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{src:"https://i.imgur.com/cudNZOp.png",alt:"PewPew Live API Functions"})}),"\n",(0,i.jsxs)(t.p,{children:["These are some of the functions that you will be using in PewPew Live! I suggest giving it a lookover, and try to see what it all means! Whenever you use a function in PewPew's library (API), you MUST put ",(0,i.jsx)(t.code,{children:"pewpew."})," infront of it!"]}),"\n",(0,i.jsxs)(t.p,{children:["So you see, ",(0,i.jsx)(t.code,{children:"print(String str)"})," would be typed in your code as ",(0,i.jsx)(t.code,{children:"pewpew.print(String str)"}),". The black boxes with green text (things like ",(0,i.jsx)(t.code,{children:"String"}),", ",(0,i.jsx)(t.code,{children:"Int"}),", etc) tell you what kind of data the function uses, and what type of function it is! Don't worry too much about the type of function, focus mainly on the data that the functions take in, like ",(0,i.jsx)(t.code,{children:"Int"})," and ",(0,i.jsx)(t.code,{children:"String"}),"."]}),"\n",(0,i.jsx)(t.h3,{id:"pewpew-live-api---fmath",children:"PEWPEW LIVE API - FMATH"}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"Another main part of the API is the Fmath library!"})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{src:"https://i.imgur.com/S3KoZf8.png",alt:"PewPew Live API Fmath"})}),"\n",(0,i.jsxs)(t.p,{children:["These are more functions in PewPew Live, but slightly different. To use these functions, you MUST put ",(0,i.jsx)(t.code,{children:"fmath."})," infront of it!"]}),"\n",(0,i.jsxs)(t.p,{children:["So ",(0,i.jsx)(t.code,{children:"sqrt(FixedPoint x)"})," would be typed in your code as ",(0,i.jsx)(t.code,{children:"fmath.sqrt(FixedPoint x)"}),". Now, what exactly is ",(0,i.jsx)(t.code,{children:"FixedPoint"}),"?"]}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.code,{children:"FixedPoint"})," refers to a specific kind of ",(0,i.jsx)(t.strong,{children:"number"})," in PewPew levels. We just call them fixed point numbers. They are strange, but don't worry, you'll get the hang of them! You really only use fixed point numbers when dealing with location and size. But don't worry, fixed point numbers and normal numbers are the same!"]}),"\n",(0,i.jsxs)(t.p,{children:["...For the most part. See, you write a normal number as ",(0,i.jsx)(t.code,{children:"n"}),", and fixed point numbers are written as ",(0,i.jsx)(t.code,{children:"nfx"}),". Fixed point numbers are put in the code by putting ",(0,i.jsx)(t.code,{children:"fx"})," after your number! So you have numbers like ",(0,i.jsx)(t.code,{children:"1, 2, 3"}),". But in fixed point numbers, they would be ",(0,i.jsx)(t.code,{children:"1fx, 2fx, 3fx"}),". And so on!"]}),"\n",(0,i.jsxs)(t.p,{children:["Another main difference I should note is their decimals! It's a little strange, and I won't go into too much detail, but ",(0,i.jsx)(t.code,{children:"2.6fx"})," does not exist. The number ",(0,i.jsx)(t.code,{children:"2.5"})," is written as ",(0,i.jsx)(t.code,{children:"2.2048fx"}),". It's strange, I know! And there is a specific and good reason for this! But for now, don't worry too much about decimals. If you need to use a number that isn't a full number, stick with fractions! Like instead of writing ",(0,i.jsx)(t.code,{children:"2.2048fx"}),", write ",(0,i.jsx)(t.code,{children:"5fx/2fx"}),"! See? Much better! ",(0,i.jsx)(t.strong,{children:"Just remember that these fixed point numbers are mostly used for location and size!"})," In later examples we will see exactly how they are used!"]}),"\n",(0,i.jsx)(t.h3,{id:"pewpew-live-api---enums",children:"PEWPEW LIVE API - ENUMS"}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"The last main part that I need to cover is the Enums section of the API"})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{src:"https://i.imgur.com/6iA5ayl.png",alt:"PewPew Live API Enums"})}),"\n",(0,i.jsxs)(t.p,{children:["So what is an ",(0,i.jsx)(t.code,{children:"Enum"}),"? ",(0,i.jsx)(t.code,{children:"Enum"})," stands for ",(0,i.jsx)(t.em,{children:"Enumerator"}),", and is just a fancy way of talking about a list of items and properties. So here is the list of enemies and the properties of enemies, AKA the ",(0,i.jsx)(t.code,{children:"Enums"}),", that a person can access and use. Again, you need to put ",(0,i.jsx)(t.code,{children:"pewpew."})," infront of these when you use them. A quick example of a reference to a specific enemy would be ",(0,i.jsx)(t.code,{children:"pewpew.MothershipType.THREE_CORNERS"}),". This piece of code references the pink triangles (motherships) that you see in Eskiv."]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"We will go into detail on how to use Enums in specific ways, but for now, that is the general briefing on how to read the PewPew Live API!"})}),"\n",(0,i.jsx)(t.h3,{id:"where-does-the-level-go",children:"WHERE DOES THE LEVEL GO?"}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"So we are finally about to make our level. Where do we keep it? Well at the very top, you went to the main github page and downloaded the files, you need that!"})}),"\n",(0,i.jsxs)(t.p,{children:["You will need to extract the file, and then you will enter it. You will see two files, a folder and an ",(0,i.jsx)(t.code,{children:".exe"})," file. That ",(0,i.jsx)(t.code,{children:".exe"})," is very important to running your level, keep it in mind!"]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{src:"https://i.imgur.com/CrvXuXT.png",alt:""})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsxs)(t.strong,{children:["You will then see a bunch of files, and a folder. You do NOT need to worry about these files at all! Just the folder! The ",(0,i.jsx)(t.code,{children:"levels"})," folder is where all custom levels are stored! So that is the folder you enter into next!"]})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{src:"https://i.imgur.com/JVRk9P6.png",alt:""})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"As you can see below, there are some levels already here! The developer, JF, put these levels here as examples for level creators to look at while they work! This is where you will create your level."})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{src:"https://i.imgur.com/mgmeZ0g.png",alt:""})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"So all you need to do is make a new folder. I'm going to call my folder TUTORIAL_LEVEL, although you can call your folder whatever you like."})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{src:"https://i.imgur.com/OoUkG9m.png",alt:""})}),"\n",(0,i.jsx)(t.p,{children:"And there you go! You now have the location of your custom level, and all the levels are nice and organized! Time for the fun stuff!"}),"\n",(0,i.jsx)(t.h3,{id:"open-your-level",children:"OPEN YOUR LEVEL"}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"Here we can go into the environment that we need to code! Just to let you know, I use a text editor called Visual Studio Code. You may use something different, and again, if you need help with this text editor stuff, reach out in the discord!"})}),"\n",(0,i.jsx)(t.p,{children:"You can either open up just your level file in your text editor, or you can open the folder that contains all the levels. This is helpful for looking at other levels while you code! So head back to this screen below:"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{src:"https://i.imgur.com/JVRk9P6.png",alt:""})}),"\n",(0,i.jsx)(t.p,{children:"And open the levels folder with your text editor! If you need help with this, feel free to reach out for help! If you're ready, then proceed down below!"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{src:"https://i.imgur.com/BfYNE64.png",alt:""})}),"\n",(0,i.jsxs)(t.p,{children:["As pointed out by the very helpful green arrow, my level is on the left. The folder was initially empty. You need create a new script that will be your main level script. It HAS to be called ",(0,i.jsx)(t.code,{children:"level.lua"}),". This is how PewPew Live enters into your level and runs it. It might change in the future, but it is good practice to keep consistency. And with the script made, you have an empty canvas. What's next?"]}),"\n",(0,i.jsx)(t.h3,{id:"the-start-of-a-level",children:"THE START OF A LEVEL"}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"This next portion will go over how to make your map, and how to spawn the player. Yes! You have to put in the code that spawns the player yourself! But don't worry, it's not too terrible."})}),"\n",(0,i.jsxs)(t.p,{children:["Look back into the PewPew API, there is a function that sets the map size. I'll state it here, it is ",(0,i.jsx)(t.code,{children:"set_level_size(FixedPoint width, FixedPoint height)"}),". This is the code that will make your map! It is very simple, and here is a sample code."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-lua",children:"local level_height = 300fx\nlocal level_length = 400fx\npewpew.set_level_size(level_length, level_height)\n"})}),"\n",(0,i.jsxs)(t.p,{children:["And that's all there is to it! You have made a map! Remember, when using a PewPew function, you MUST put ",(0,i.jsx)(t.code,{children:"pewpew."})," in front, or it won't work! And we are dealing with location/size, so fixed point numbers must be used! And you don't need to set the sizes as variables, I just consider it good practice. It's also easier to reference the map sizes if they are variables. You could have written ",(0,i.jsx)(t.code,{children:"pewpew.set_level_size(300fx, 400fx)"}),", but it's up to you."]}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.strong,{children:"Hold it!"})," Before you try out your level, you need to spawn the player! This requires another handy function from the API. This one is ",(0,i.jsx)(t.code,{children:"new_player_ship(FixedPoint x, FixedPoint y, int player_index)"}),". A player's spawn point is a matter of ",(0,i.jsx)(t.em,{children:"location"}),", so fixed points are required! ",(0,i.jsx)(t.strong,{children:"Also, notice how the index is not a fixed point number, but a normal number!"})," The index is not size or location, so using normal numbers is fine!"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-lua",children:"pewpew.new_player_ship(100fx, 100fx, 0)\n"})}),"\n",(0,i.jsxs)(t.p,{children:["And there you have it! The player has spawned, and you have a map made. I should back track, what is ",(0,i.jsx)(t.code,{children:"player_index"}),"? And what does the ",(0,i.jsx)(t.code,{children:"0"}),' have to do with it? Well each player, whether it is single-player or multi-player, are assigned an "index" to keep track of which player is which. Player 1 has an index of ',(0,i.jsx)(t.code,{children:"0"}),", player 2 has an index ",(0,i.jsx)(t.code,{children:"1"}),", and so on. ",(0,i.jsx)(t.strong,{children:"BUT"})," at the current moment, custom levels only support one player, so whenever you use ",(0,i.jsx)(t.code,{children:"new_player_ship(FixedPoint x, FixedPoint y, int player_index)"}),", just use 0 for the ",(0,i.jsx)(t.code,{children:"player_index"}),"."]}),"\n",(0,i.jsx)(t.p,{children:"The code above worked just fine, but another way, which is good practice, to write the above code is"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-lua",children:"local x_spawn = 100fx\nlocal y_spawn = 100fx\nlocal p1_index = 0\nlocal player1_ship = pewpew.new_player_ship(x_spawn, y_spawn, p1_index)\n"})}),"\n",(0,i.jsx)(t.p,{children:"This piece of code sets the ship as a variable that you can reference later on! I highly recommend using this second piece of code rather than the first one!"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"And there you have it! Down below is the final product."})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{src:"https://i.imgur.com/VHV6s29.png",alt:""})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsxs)(t.strong,{children:["Now there's one more step before we can test out our level! We need something called a ",(0,i.jsx)(t.code,{children:"manifest"})]})}),"\n",(0,i.jsxs)(t.p,{children:["The ",(0,i.jsx)(t.code,{children:"manifest"})," is your level description, name, and entry! I will explain entry in a bit, but for now, here's how to make a manifest. This one is actually written in a language other than Lua. I won't explain it too much, I will just show you the code and you can make a ",(0,i.jsx)(t.code,{children:"manifest"}),". But first, make a new file in your level folder and call it ",(0,i.jsx)(t.code,{children:"manifest.json"}),". ",(0,i.jsxs)(t.strong,{children:["NOT ",(0,i.jsx)(t.code,{children:"manifest.lua"}),". Like I said, it's a different language!"]})]}),"\n",(0,i.jsx)(t.p,{children:"In the manifest you need to put this piece of code:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-json",children:'{\n "name": "LEVEL_NAME",\n "descriptions": ["LEVEL DESCRIPTION"],\n "entry_point": "level.lua"\n}\n'})}),"\n",(0,i.jsxs)(t.p,{children:["You can look at it and kind of get a sense of what's going on, but I will brief you on it. You put your level name where ",(0,i.jsx)(t.code,{children:'"LEVEL_NAME"'})," is ",(0,i.jsx)(t.strong,{children:"INSIDE"})," the quotation ",(0,i.jsx)(t.code,{children:'""'})," marks! You can do the same with the level description, inside the quotation marks and brackets ",(0,i.jsx)(t.code,{children:'[""]'}),"! See the ",(0,i.jsx)(t.code,{children:'"entry_point"'}),"? That's why we named the main script ",(0,i.jsx)(t.code,{children:"level.lua"}),". The game enters through that script and runs your level. And that is ",(0,i.jsx)(t.em,{children:"all"})," you need to know about this new file. Down below is the manifest for my tutorial level."]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{src:"https://i.imgur.com/eMCp8e5.png",alt:""})}),"\n",(0,i.jsx)(t.p,{children:"You are done! You can run your level!"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsxs)(t.strong,{children:["Ready to take it out for a spin? Good! Remember that ",(0,i.jsx)(t.code,{children:".exe"})," I mentioned some time back? Yeah, we need that. Head back to the screen below."]})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{src:"https://i.imgur.com/CrvXuXT.png",alt:""})}),"\n",(0,i.jsx)(t.p,{children:"You need to run the ppl-utils file. It will open a window, and your computer will warn you about this file. Go ahead and run the file anyway, and you will be able to try out your level! You should get something like below:"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{src:"https://i.imgur.com/0GVpONe.png",alt:""})}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.strong,{children:"Your levels are being run! Now you need to go to the website that the screen above is telling you!"})," The website to run your levels is ",(0,i.jsx)(t.a,{href:"http://localhost:9000/pewpew.html",children:"http://localhost:9000/pewpew.html"})]}),"\n",(0,i.jsx)(t.p,{children:"You should get a screen like this:"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{src:"https://i.imgur.com/Diaobu9.png",alt:""})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"As you can see, the manifest dictated what name my level would show as."})}),"\n",(0,i.jsx)(t.p,{children:'My tutorial world is at the top of the page, called "Tutorial Level". As it should, as that is what I put in the manifest above. You will need to find your level in the list of levels. And there you go! Just go into your level and give it a whirl!'})]})}function c(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>r,x:()=>l});var i=n(6540);const o={},s=i.createContext(o);function r(e){const t=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),i.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3164f9fb.dfc70995.js b/assets/js/3164f9fb.dfc70995.js new file mode 100644 index 0000000..9cb92c6 --- /dev/null +++ b/assets/js/3164f9fb.dfc70995.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkppl_docs=self.webpackChunkppl_docs||[]).push([[198],{8730:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>r,default:()=>c,frontMatter:()=>s,metadata:()=>l,toc:()=>d});var i=n(4848),o=n(8453);const s={sidebar_position:2},r="Intermediate",l={id:"Guides/Lua/intermediate",title:"Intermediate",description:"If you are here, you made it through the learning process of the Lua language! Keep in mind, this section assumes that you know basic Lua. If you need to freshen up, look back onto the Beginner tutorials!",source:"@site/docs/Guides/Lua/intermediate.md",sourceDirName:"Guides/Lua",slug:"/Guides/Lua/intermediate",permalink:"/ppl-docs/docs/Guides/Lua/intermediate",draft:!1,unlisted:!1,editUrl:"https://github.com/pewpewlive/ppl-docs/edit/master/docs/Guides/Lua/intermediate.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Beginner Lua Tutorial",permalink:"/ppl-docs/docs/Guides/Lua/beginner"},next:{title:"Advanced",permalink:"/ppl-docs/docs/Guides/Lua/advanced"}},a={},d=[{value:"Getting started",id:"getting-started",level:2},{value:"PewPew Live API - functions",id:"pewpew-live-api---functions",level:2},{value:"PewPew Live API - fmath",id:"pewpew-live-api---fmath",level:2},{value:"PewPew Live API - enums",id:"pewpew-live-api---enums",level:2},{value:"Where does this level go?",id:"where-does-this-level-go",level:2},{value:"Open your level",id:"open-your-level",level:2},{value:"The start of a level",id:"the-start-of-a-level",level:2}];function h(e){const t={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",img:"img",p:"p",pre:"pre",strong:"strong",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"intermediate",children:"Intermediate"}),"\n",(0,i.jsx)(t.p,{children:"If you are here, you made it through the learning process of the Lua language! Keep in mind, this section assumes that you know basic Lua. If you need to freshen up, look back onto the Beginner tutorials!"}),"\n",(0,i.jsxs)(t.p,{children:["Here, we will learn ",(0,i.jsx)(t.strong,{children:"how to make a PewPew Live Custom Level"})]}),"\n",(0,i.jsx)(t.h2,{id:"getting-started",children:"Getting started"}),"\n",(0,i.jsx)(t.p,{children:"So in order to begin making a level, you will need to visit a couple of links."}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"https://github.com/jyaif/ppl-utils",children:"https://github.com/jyaif/ppl-utils"})," <--- This link right here will take you to the files you need to make your level! Scroll down to ",(0,i.jsx)(t.strong,{children:"Getting Started"})," and follow the directions!"]}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"https://pewpewlive.github.io/ppl-utils/",children:"https://pewpewlive.github.io/ppl-utils/"})," <--- This link right here is the PewPew Live API. That means, many important functions and items that are needed to make your level are found on this site!"]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"Also, make sure you have a text editor to make your code in! If you need help with this, go to the discord and ask about it in #technical-discuss!"})}),"\n",(0,i.jsx)(t.h2,{id:"pewpew-live-api---functions",children:"PewPew Live API - functions"}),"\n",(0,i.jsx)(t.p,{children:"Before we begin in our first steps to making a level, it is crucial to understand the PewPew Live API."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"Let's take a look..."})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{src:"https://i.imgur.com/cudNZOp.png",alt:"PewPew Live API Functions"})}),"\n",(0,i.jsxs)(t.p,{children:["These are some of the functions that you will be using in PewPew Live! I suggest giving it a lookover, and try to see what it all means! Whenever you use a function in PewPew's library (API), you MUST put ",(0,i.jsx)(t.code,{children:"pewpew."})," infront of it!"]}),"\n",(0,i.jsxs)(t.p,{children:["So you see, ",(0,i.jsx)(t.code,{children:"print(String str)"})," would be typed in your code as ",(0,i.jsx)(t.code,{children:"pewpew.print(String str)"}),". The black boxes with green text (things like ",(0,i.jsx)(t.code,{children:"String"}),", ",(0,i.jsx)(t.code,{children:"Int"}),", etc) tell you what kind of data the function uses, and what type of function it is! Don't worry too much about the type of function, focus mainly on the data that the functions take in, like ",(0,i.jsx)(t.code,{children:"Int"})," and ",(0,i.jsx)(t.code,{children:"String"}),"."]}),"\n",(0,i.jsx)(t.h2,{id:"pewpew-live-api---fmath",children:"PewPew Live API - fmath"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"Another main part of the API is the Fmath library!"})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{src:"https://i.imgur.com/S3KoZf8.png",alt:"PewPew Live API Fmath"})}),"\n",(0,i.jsxs)(t.p,{children:["These are more functions in PewPew Live, but slightly different. To use these functions, you MUST put ",(0,i.jsx)(t.code,{children:"fmath."})," infront of it!"]}),"\n",(0,i.jsxs)(t.p,{children:["So ",(0,i.jsx)(t.code,{children:"sqrt(FixedPoint x)"})," would be typed in your code as ",(0,i.jsx)(t.code,{children:"fmath.sqrt(FixedPoint x)"}),". Now, what exactly is ",(0,i.jsx)(t.code,{children:"FixedPoint"}),"?"]}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.code,{children:"FixedPoint"})," refers to a specific kind of ",(0,i.jsx)(t.strong,{children:"number"})," in PewPew levels. We just call them fixed point numbers. They are strange, but don't worry, you'll get the hang of them! You really only use fixed point numbers when dealing with location and size. But don't worry, fixed point numbers and normal numbers are the same!"]}),"\n",(0,i.jsxs)(t.p,{children:["...For the most part. See, you write a normal number as ",(0,i.jsx)(t.code,{children:"n"}),", and fixed point numbers are written as ",(0,i.jsx)(t.code,{children:"nfx"}),". Fixed point numbers are put in the code by putting ",(0,i.jsx)(t.code,{children:"fx"})," after your number! So you have numbers like ",(0,i.jsx)(t.code,{children:"1, 2, 3"}),". But in fixed point numbers, they would be ",(0,i.jsx)(t.code,{children:"1fx, 2fx, 3fx"}),". And so on!"]}),"\n",(0,i.jsxs)(t.p,{children:["Another main difference I should note is their decimals! It's a little strange, and I won't go into too much detail, but ",(0,i.jsx)(t.code,{children:"2.6fx"})," does not exist. The number ",(0,i.jsx)(t.code,{children:"2.5"})," is written as ",(0,i.jsx)(t.code,{children:"2.2048fx"}),". It's strange, I know! And there is a specific and good reason for this! But for now, don't worry too much about decimals. If you need to use a number that isn't a full number, stick with fractions! Like instead of writing ",(0,i.jsx)(t.code,{children:"2.2048fx"}),", write ",(0,i.jsx)(t.code,{children:"5fx/2fx"}),"! See? Much better! ",(0,i.jsx)(t.strong,{children:"Just remember that these fixed point numbers are mostly used for location and size!"})," In later examples we will see exactly how they are used!"]}),"\n",(0,i.jsx)(t.h2,{id:"pewpew-live-api---enums",children:"PewPew Live API - enums"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"The last main part that I need to cover is the Enums section of the API"})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{src:"https://i.imgur.com/6iA5ayl.png",alt:"PewPew Live API Enums"})}),"\n",(0,i.jsxs)(t.p,{children:["So what is an ",(0,i.jsx)(t.code,{children:"Enum"}),"? ",(0,i.jsx)(t.code,{children:"Enum"})," stands for ",(0,i.jsx)(t.em,{children:"Enumerator"}),", and is just a fancy way of talking about a list of items and properties. So here is the list of enemies and the properties of enemies, AKA the ",(0,i.jsx)(t.code,{children:"Enums"}),", that a person can access and use. Again, you need to put ",(0,i.jsx)(t.code,{children:"pewpew."})," infront of these when you use them. A quick example of a reference to a specific enemy would be ",(0,i.jsx)(t.code,{children:"pewpew.MothershipType.THREE_CORNERS"}),". This piece of code references the pink triangles (motherships) that you see in Eskiv."]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"We will go into detail on how to use Enums in specific ways, but for now, that is the general briefing on how to read the PewPew Live API!"})}),"\n",(0,i.jsx)(t.h2,{id:"where-does-this-level-go",children:"Where does this level go?"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"So we are finally about to make our level. Where do we keep it? Well at the very top, you went to the main github page and downloaded the files, you need that!"})}),"\n",(0,i.jsxs)(t.p,{children:["You will need to extract the file, and then you will enter it. You will see two files, a folder and an ",(0,i.jsx)(t.code,{children:".exe"})," file. That ",(0,i.jsx)(t.code,{children:".exe"})," is very important to running your level, keep it in mind!"]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{src:"https://i.imgur.com/CrvXuXT.png",alt:"Windows explorer window in ppl-utils directory"})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsxs)(t.strong,{children:["You will then see a bunch of files, and a folder. You do NOT need to worry about these files at all! Just the folder! The ",(0,i.jsx)(t.code,{children:"levels"})," folder is where all custom levels are stored! So that is the folder you enter into next!"]})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{src:"https://i.imgur.com/JVRk9P6.png",alt:"Windows explorer window in ppl-utils/content directory"})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"As you can see below, there are some levels already here! The developer, JF, put these levels here as examples for level creators to look at while they work! This is where you will create your level."})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{src:"https://i.imgur.com/mgmeZ0g.png",alt:"Windows explorer window in ppl-utils/content/levels directory"})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"So all you need to do is make a new folder. I'm going to call my folder TUTORIAL_LEVEL, although you can call your folder whatever you like."})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{src:"https://i.imgur.com/OoUkG9m.png",alt:"Windows explorer window in ppl-utils/content/levels directory and creating TUTORIAL_LEVEL directory"})}),"\n",(0,i.jsx)(t.p,{children:"And there you go! You now have the location of your custom level, and all the levels are nice and organized! Time for the fun stuff!"}),"\n",(0,i.jsx)(t.h2,{id:"open-your-level",children:"Open your level"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"Here we can go into the environment that we need to code! Just to let you know, I use a text editor called Visual Studio Code. You may use something different, and again, if you need help with this text editor stuff, reach out in the discord!"})}),"\n",(0,i.jsx)(t.p,{children:"You can either open up just your level file in your text editor, or you can open the folder that contains all the levels. This is helpful for looking at other levels while you code! So head back to this screen below:"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{src:"https://i.imgur.com/JVRk9P6.png",alt:"Windows explorer window in ppl-utils/content directory"})}),"\n",(0,i.jsx)(t.p,{children:"And open the levels folder with your text editor! If you need help with this, feel free to reach out for help! If you're ready, then proceed down below!"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{src:"https://i.imgur.com/BfYNE64.png",alt:"Visual Studio Code window open in ppl-utils/content/levels directory"})}),"\n",(0,i.jsxs)(t.p,{children:["As pointed out by the very helpful green arrow, my level is on the left. The folder was initially empty. You need create a new script that will be your main level script. It HAS to be called ",(0,i.jsx)(t.code,{children:"level.lua"}),". This is how PewPew Live enters into your level and runs it. It might change in the future, but it is good practice to keep consistency. And with the script made, you have an empty canvas. What's next?"]}),"\n",(0,i.jsx)(t.h2,{id:"the-start-of-a-level",children:"The start of a level"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"This next portion will go over how to make your map, and how to spawn the player. Yes! You have to put in the code that spawns the player yourself! But don't worry, it's not too terrible."})}),"\n",(0,i.jsxs)(t.p,{children:["Look back into the PewPew API, there is a function that sets the map size. I'll state it here, it is ",(0,i.jsx)(t.code,{children:"set_level_size(FixedPoint width, FixedPoint height)"}),". This is the code that will make your map! It is very simple, and here is a sample code."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-lua",children:"local level_height = 300fx\nlocal level_length = 400fx\npewpew.set_level_size(level_length, level_height)\n"})}),"\n",(0,i.jsxs)(t.p,{children:["And that's all there is to it! You have made a map! Remember, when using a PewPew function, you MUST put ",(0,i.jsx)(t.code,{children:"pewpew."})," in front, or it won't work! And we are dealing with location/size, so fixed point numbers must be used! And you don't need to set the sizes as variables, I just consider it good practice. It's also easier to reference the map sizes if they are variables. You could have written ",(0,i.jsx)(t.code,{children:"pewpew.set_level_size(300fx, 400fx)"}),", but it's up to you."]}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.strong,{children:"Hold it!"})," Before you try out your level, you need to spawn the player! This requires another handy function from the API. This one is ",(0,i.jsx)(t.code,{children:"new_player_ship(FixedPoint x, FixedPoint y, int player_index)"}),". A player's spawn point is a matter of ",(0,i.jsx)(t.em,{children:"location"}),", so fixed points are required! ",(0,i.jsx)(t.strong,{children:"Also, notice how the index is not a fixed point number, but a normal number!"})," The index is not size or location, so using normal numbers is fine!"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-lua",children:"pewpew.new_player_ship(100fx, 100fx, 0)\n"})}),"\n",(0,i.jsxs)(t.p,{children:["And there you have it! The player has spawned, and you have a map made. I should back track, what is ",(0,i.jsx)(t.code,{children:"player_index"}),"? And what does the ",(0,i.jsx)(t.code,{children:"0"}),' have to do with it? Well each player, whether it is single-player or multi-player, are assigned an "index" to keep track of which player is which. Player 1 has an index of ',(0,i.jsx)(t.code,{children:"0"}),", player 2 has an index ",(0,i.jsx)(t.code,{children:"1"}),", and so on. ",(0,i.jsx)(t.strong,{children:"BUT"})," at the current moment, custom levels only support one player, so whenever you use ",(0,i.jsx)(t.code,{children:"new_player_ship(FixedPoint x, FixedPoint y, int player_index)"}),", just use 0 for the ",(0,i.jsx)(t.code,{children:"player_index"}),"."]}),"\n",(0,i.jsx)(t.p,{children:"The code above worked just fine, but another way, which is good practice, to write the above code is"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-lua",children:"local x_spawn = 100fx\nlocal y_spawn = 100fx\nlocal p1_index = 0\nlocal player1_ship = pewpew.new_player_ship(x_spawn, y_spawn, p1_index)\n"})}),"\n",(0,i.jsx)(t.p,{children:"This piece of code sets the ship as a variable that you can reference later on! I highly recommend using this second piece of code rather than the first one!"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"And there you have it! Down below is the final product."})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{src:"https://i.imgur.com/VHV6s29.png",alt:""})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsxs)(t.strong,{children:["Now there's one more step before we can test out our level! We need something called a ",(0,i.jsx)(t.code,{children:"manifest"})]})}),"\n",(0,i.jsxs)(t.p,{children:["The ",(0,i.jsx)(t.code,{children:"manifest"})," is your level description, name, and entry! I will explain entry in a bit, but for now, here's how to make a manifest. This one is actually written in a language other than Lua. I won't explain it too much, I will just show you the code and you can make a ",(0,i.jsx)(t.code,{children:"manifest"}),". But first, make a new file in your level folder and call it ",(0,i.jsx)(t.code,{children:"manifest.json"}),". ",(0,i.jsxs)(t.strong,{children:["NOT ",(0,i.jsx)(t.code,{children:"manifest.lua"}),". Like I said, it's a different language!"]})]}),"\n",(0,i.jsx)(t.p,{children:"In the manifest you need to put this piece of code:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-json",children:'{\n "name": "LEVEL_NAME",\n "descriptions": ["LEVEL DESCRIPTION"],\n "entry_point": "level.lua"\n}\n'})}),"\n",(0,i.jsxs)(t.p,{children:["You can look at it and kind of get a sense of what's going on, but I will brief you on it. You put your level name where ",(0,i.jsx)(t.code,{children:'"LEVEL_NAME"'})," is ",(0,i.jsx)(t.strong,{children:"INSIDE"})," the quotation ",(0,i.jsx)(t.code,{children:'""'})," marks! You can do the same with the level description, inside the quotation marks and brackets ",(0,i.jsx)(t.code,{children:'[""]'}),"! See the ",(0,i.jsx)(t.code,{children:'"entry_point"'}),"? That's why we named the main script ",(0,i.jsx)(t.code,{children:"level.lua"}),". The game enters through that script and runs your level. And that is ",(0,i.jsx)(t.em,{children:"all"})," you need to know about this new file. Down below is the manifest for my tutorial level."]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{src:"https://i.imgur.com/eMCp8e5.png",alt:""})}),"\n",(0,i.jsx)(t.p,{children:"You are done! You can run your level!"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsxs)(t.strong,{children:["Ready to take it out for a spin? Good! Remember that ",(0,i.jsx)(t.code,{children:".exe"})," I mentioned some time back? Yeah, we need that. Head back to the screen below."]})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{src:"https://i.imgur.com/CrvXuXT.png",alt:""})}),"\n",(0,i.jsx)(t.p,{children:"You need to run the ppl-utils file. It will open a window, and your computer will warn you about this file. Go ahead and run the file anyway, and you will be able to try out your level! You should get something like below:"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{src:"https://i.imgur.com/0GVpONe.png",alt:""})}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.strong,{children:"Your levels are being run! Now you need to go to the website that the screen above is telling you!"})," The website to run your levels is ",(0,i.jsx)(t.a,{href:"http://localhost:9000/pewpew.html",children:"http://localhost:9000/pewpew.html"})]}),"\n",(0,i.jsx)(t.p,{children:"You should get a screen like this:"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{src:"https://i.imgur.com/Diaobu9.png",alt:""})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.strong,{children:"As you can see, the manifest dictated what name my level would show as."})}),"\n",(0,i.jsx)(t.p,{children:'My tutorial world is at the top of the page, called "Tutorial Level". As it should, as that is what I put in the manifest above. You will need to find your level in the list of levels. And there you go! Just go into your level and give it a whirl!'})]})}function c(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>r,x:()=>l});var i=n(6540);const o={},s=i.createContext(o);function r(e){const t=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),i.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/61036be0.b6b2cd3b.js b/assets/js/61036be0.b6b2cd3b.js new file mode 100644 index 0000000..1907352 --- /dev/null +++ b/assets/js/61036be0.b6b2cd3b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkppl_docs=self.webpackChunkppl_docs||[]).push([[2256],{1869:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>t,contentTitle:()=>o,default:()=>p,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var i=s(4848),l=s(8453);const r={sidebar_position:1},o="Beginner Lua Tutorial",a={id:"Guides/Lua/beginner",title:"Beginner Lua Tutorial",description:"https://repl.it/languages/lua can be used to try Lua in the browser.",source:"@site/docs/Guides/Lua/beginner.md",sourceDirName:"Guides/Lua",slug:"/Guides/Lua/beginner",permalink:"/ppl-docs/docs/Guides/Lua/beginner",draft:!1,unlisted:!1,editUrl:"https://github.com/pewpewlive/ppl-docs/edit/master/docs/Guides/Lua/beginner.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Sound files",permalink:"/ppl-docs/docs/File Information/sound-files"},next:{title:"Intermediate",permalink:"/ppl-docs/docs/Guides/Lua/intermediate"}},t={},d=[{value:"Printing example",id:"printing-example",level:2},{value:"Variables example",id:"variables-example",level:2},{value:"If statement example",id:"if-statement-example",level:2},{value:"For loop example",id:"for-loop-example",level:2},{value:"Nested for loop example",id:"nested-for-loop-example",level:2},{value:"While loop example",id:"while-loop-example",level:2},{value:"Break loops example",id:"break-loops-example",level:2},{value:"Functions example",id:"functions-example",level:2},{value:"Tables example",id:"tables-example",level:2},{value:"for i, v in pairs() loop example",id:"for-i-v-in-pairs-loop-example",level:2}];function c(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",...(0,l.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"beginner-lua-tutorial",children:"Beginner Lua Tutorial"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"https://repl.it/languages/lua",children:"https://repl.it/languages/lua"})," can be used to try Lua in the browser."]}),"\n",(0,i.jsx)(n.p,{children:"These examples are more for review, rather than learning! If you see something here that you don't understand, continue to watch Lua tutorials on youtube!"}),"\n",(0,i.jsx)(n.h2,{id:"printing-example",children:"Printing example"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'print("Hello world!")\n'})}),"\n",(0,i.jsxs)(n.p,{children:["Output: ",(0,i.jsx)(n.code,{children:"Hello World!"})]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"print(2 + 3)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Output: ",(0,i.jsx)(n.code,{children:"5"})]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'print("2 + 3")\n'})}),"\n",(0,i.jsxs)(n.p,{children:["Output: ",(0,i.jsx)(n.code,{children:"2 + 3"})]}),"\n",(0,i.jsxs)(n.p,{children:["Anything in quotation marks ",(0,i.jsx)(n.code,{children:'" "'})," or ",(0,i.jsx)(n.code,{children:"' '"})," is a string. Printing a string will output exactly what you type! Anything not inside of quotation marks are registered as numbers, variables, or mathematics!"]}),"\n",(0,i.jsx)(n.h2,{id:"variables-example",children:"Variables example"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"my_variable = 5\nprint(my_variable)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Output: ",(0,i.jsx)(n.code,{children:"5"})]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"x = 2\ny = 10\nprint(x + y)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Output: ",(0,i.jsx)(n.code,{children:"12"})]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'x = 2\ny = 10\nprint("x + y")\n'})}),"\n",(0,i.jsxs)(n.p,{children:["Output: ",(0,i.jsx)(n.code,{children:"x + y"})]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'some_text = "this is cool"\nprint(some_text)\n'})}),"\n",(0,i.jsxs)(n.p,{children:["Output: ",(0,i.jsx)(n.code,{children:"this is cool"})]}),"\n",(0,i.jsx)(n.p,{children:"Variables can be assigned practically any value! You can store them as numbers, strings, and more!"}),"\n",(0,i.jsx)(n.h2,{id:"if-statement-example",children:"If statement example"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'x = 6\nif x > 5 then\n print("Greater than 5!")\nend\n'})}),"\n",(0,i.jsxs)(n.p,{children:["Output:\n",(0,i.jsx)(n.code,{children:"Greater than 5!"})]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'a = true\nb = false\n\nif a then\n print("True")\nend\n\nif a and b then\n print("True")\nelse\n print("False")\nend\n\nif a or b then\n print("True")\nelse\n print("False")\nend\n\nif b then\n print("True")\nend\n'})}),"\n",(0,i.jsx)(n.p,{children:"Output:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"True\nFalse\nTrue\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'x = 5\ny = 5\nif x == y then\n print("True")\nend\n'})}),"\n",(0,i.jsxs)(n.p,{children:["Output:\n",(0,i.jsx)(n.code,{children:"True"})]}),"\n",(0,i.jsx)(n.p,{children:'Variables can also be assigned boolean values, which are true and false! With "and" statements, both or all arguments need to be true to equal true in total! With "or" statements, only one needs to be true to equal true in total! Both or all need to be false to be false in total!'}),"\n",(0,i.jsx)(n.h2,{id:"for-loop-example",children:"For loop example"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'for i = 1, 5 do\n print("Hello!")\nend\n'})}),"\n",(0,i.jsxs)(n.p,{children:["The following output is repeated 5 times:\n",(0,i.jsx)(n.code,{children:"Hello!"})]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"for i = 1, 10 do\n print(i)\nend\n"})}),"\n",(0,i.jsx)(n.p,{children:"Output:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"for i = 1, 10, 2 do\n print(i)\nend\n"})}),"\n",(0,i.jsx)(n.p,{children:"Output:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"1\n3\n5\n7\n9\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"for i = 0, -10, -1 do\n print(i)\nend\n"})}),"\n",(0,i.jsx)(n.p,{children:"Output:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"0\n-1\n-2\n-3\n-4\n-5\n-6\n-7\n-8\n-9\n-10\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'local loopcount = 25\nfor i = 1, loopcount do\n print("Loop!")\nend\n'})}),"\n",(0,i.jsxs)(n.p,{children:["The following output is repeated 25 times:\n",(0,i.jsx)(n.code,{children:"Loop!"})]}),"\n",(0,i.jsx)(n.p,{children:'For loops are useful for running the same code multiple times! The first line of the for loop has the syntax for i = Index, End Value, Increments. You set i as your starting value, separate with a comma, set your end value, and you can optionally set your increment as your third value. Don\'t forget the "do"!'}),"\n",(0,i.jsx)(n.h2,{id:"nested-for-loop-example",children:"Nested for loop example"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'for i = 1, 5 do\n print("This is the outer loop!")\n for j = 1, 3 do\n print("This is the inner loop!")\n end\nend\n'})}),"\n",(0,i.jsx)(n.p,{children:"The following output is repeated 5 times:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"This is the outer loop!\nThis is the inner loop!\nThis is the inner loop!\nThis is the inner loop!\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'local swim_laps = 10\nlocal paddles = 5\nfor i = 1, swim_laps do\n print("Lap: "..i)\n for j = 1, paddles do\n print("Paddle: "..j)\n end\nend\n'})}),"\n",(0,i.jsx)(n.p,{children:"Output:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"Lap: 1\nPaddle: 1\nPaddle: 2\n"})}),"\n",(0,i.jsx)(n.p,{children:"...etc."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'for i = 1, 5 do\n for i = 1, 2 do\n print("This is fine!")\n end\nend\n'})}),"\n",(0,i.jsxs)(n.p,{children:["The following output is repeated 10 times: ",(0,i.jsx)(n.code,{children:"This is fine!"})]}),"\n",(0,i.jsx)(n.p,{children:"You are allowed to put for loops inside of other for loops! In if you put a for loop that repeats 3 times inside of a for loop that repeats 5 times, that inner loop runs 15 times total! With for loops, you can use any variable as your index! And with nested for loops, it is good practice to use different variables, like using i and j instead of using i twice."}),"\n",(0,i.jsx)(n.h2,{id:"while-loop-example",children:"While loop example"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"local x = 3\nwhile x > 0 do\n print(x)\n x = x - 1\nend\n"})}),"\n",(0,i.jsx)(n.p,{children:"Output:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"3\n2\n1\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"local x = 3\nlocal y = 4\nwhile x > 0 and y > 0 do\n print(x,y)\n x = x - 1\n y = y - 1\nend\n"})}),"\n",(0,i.jsx)(n.p,{children:"Output:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"3 4\n2 3\n1 2\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'while true do\n print("Hello!")\nend\n'})}),"\n",(0,i.jsxs)(n.p,{children:["The following output is repeated indefinitely: ",(0,i.jsx)(n.code,{children:"Hello!"})]}),"\n",(0,i.jsx)(n.p,{children:"A while loop is very similar to a for loop, except you can think of it as an if statement and for loop combined! The while loop runs while the conditions are true. So for a while true do loop, the loop runs forever! Be careful when making a while true do loop!"}),"\n",(0,i.jsx)(n.h2,{id:"break-loops-example",children:"Break loops example"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'while true do\n print("loop!")\n break\nend\n'})}),"\n",(0,i.jsxs)(n.p,{children:["The above loop will only run once. Output: ",(0,i.jsx)(n.code,{children:"loop!"})]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'x = 0\nwhile true do\n print("loop!")\n x = x + 1\n if x >=2 then\n break\n end\nend\n'})}),"\n",(0,i.jsx)(n.p,{children:"The above loop will run 2 times. Output:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"loop!\nloop!\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"for i = 1, 10 do\n print(i)\n if i >= 3 then\n break\n end\nend\n"})}),"\n",(0,i.jsx)(n.p,{children:"Output:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"1\n2\n3\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Using ",(0,i.jsx)(n.code,{children:"break"})," is very useful! The purpose for ",(0,i.jsx)(n.code,{children:"break"})," is to stop a loop from running! So using ",(0,i.jsx)(n.code,{children:"break"})," in a for or while loop will ultimately terminate it!"]}),"\n",(0,i.jsx)(n.h2,{id:"functions-example",children:"Functions example"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"local function myFunction()\n local x = 4\n local y = 2\n print(x + y)\nend\n\nmyFunction()\n"})}),"\n",(0,i.jsx)(n.p,{children:"Output:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"6\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"local function AddNum(num1, num2)\n print(num1 + num2)\nend\n\nAddNum(99,121)\nAddNum(44,33)\n"})}),"\n",(0,i.jsx)(n.p,{children:"Output:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"220\n77\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"local function Cubed(number)\n newNumber = number*number*number\n return newNumber\nend\n\nlocal x = Cubed(2)\nlocal y = Cubed(3)\n\nprint(x,y)\n\nlocal a = Cubed(10)\nprint(a)\n"})}),"\n",(0,i.jsx)(n.p,{children:"Output:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"8 27\n1000\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Functions are good for reducing the amount of code you have to write. If you have a piece of code you are going to use over and over with slightly different values, then make that piece of code a function! You can give functions ",(0,i.jsx)(n.strong,{children:"parameters"})," which is the num1 and num2 in myFunction(num1, num2). When you use the function later in your code, don't forget to fill in the parentheses! You can also use ",(0,i.jsx)(n.code,{children:"return"})," to essentially turn a function into a value."]}),"\n",(0,i.jsx)(n.h2,{id:"tables-example",children:"Tables example"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"local myTable = {1,5,3}\n\nprint(myTable[1])\nprint(myTable[2])\nprint(myTable[3])\n"})}),"\n",(0,i.jsx)(n.p,{children:"Output:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"1\n5\n3\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'local names = {\n "Bob",\n "Moses",\n "Joe"\n}\nfor i = 1, #names do\n print(names[i])\nend\n\nnames[4] = "Dawn"\nprint(names[4])\ntable.insert(names,"Rambo")\nprint(names[5])\n'})}),"\n",(0,i.jsx)(n.p,{children:"Output:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"Bob\nMoses\nJoe\nDawn\nRambo\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'local person = {\n health = 100,\n speed = 20,\n isAwesome = true,\n name = "John"\n}\nprint("This person\'s health is "..person.health)\nprint("This person\'s health is "..person["health"])\nprint("This person\'s speed is "..person.speed)\nprint("This person is awesome. "..person.isAwesome)\nprint("This person\'s name is "..person.name)\nprint("This person\'s name is "..person["name"])\n\nperson.home = "USA"\nperson["money"] = 250\n\nprint("This person\'s home is "..person.home)\nprint("This person has "..person["money"].." dollars!")\n\n'})}),"\n",(0,i.jsx)(n.p,{children:"Output:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"This person's health is 100\nThis person's health is 100\nThis person's speed is 20\nThis person is awesome. true\nThis person's name is John\nThis person's name is John\nThis person's home is USA\nThis person has 250 dollars!\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Tables are very good for storing lots of information. You can even put things inside of tables after the table is made! Done with table.insert(TableName, data) or you add things with table[n] = data. And remember, the table doesn't have to be defined on the same line! The brackets "," can be on separate lines to make it easier to read!"]}),"\n",(0,i.jsxs)(n.h2,{id:"for-i-v-in-pairs-loop-example",children:[(0,i.jsx)(n.code,{children:"for i, v in pairs()"})," loop example"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"local numbers = {3, 4, 99, 202, -3}\n\nfor i, v in pairs(numbers) do\n print(i, v)\nend\n"})}),"\n",(0,i.jsx)(n.p,{children:"Output:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"1 3\n2 4\n3 99\n4 202\n5 -3\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'local names = {"Jack", "Mike", "Melinda", "Stacy"}\n\nfor index, person in pairs(names) do\n print("Person "..index.." is "..person)\nend\n'})}),"\n",(0,i.jsx)(n.p,{children:"Output:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"Person 1 is Jack\nPerson 2 is Mike\nPerson 3 is Melinda\nPerson 4 is Stacy\n"})}),"\n",(0,i.jsx)(n.p,{children:'For i, v in pairs loops are a useful kind of for loop! They basically go through a list and use the data stored in the table. The variable i is the index or position of the table where the data is stored. The variable v is the value of the data. Inside of pairs() is the table you want to use: pairs(TableName). The variables don\'t have to be named "i" and "v", they can be named whatever you want!'})]})}function p(e={}){const{wrapper:n}={...(0,l.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>o,x:()=>a});var i=s(6540);const l={},r=i.createContext(l);function o(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:o(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/61036be0.c52ea3e6.js b/assets/js/61036be0.c52ea3e6.js deleted file mode 100644 index 80d02e2..0000000 --- a/assets/js/61036be0.c52ea3e6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkppl_docs=self.webpackChunkppl_docs||[]).push([[2256],{1869:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>t,contentTitle:()=>o,default:()=>h,frontMatter:()=>l,metadata:()=>a,toc:()=>d});var i=s(4848),r=s(8453);const l={sidebar_position:1},o="Beginner Lua Tutorial",a={id:"Guides/Lua/beginner",title:"Beginner Lua Tutorial",description:"https://repl.it/languages/lua can be used to try Lua in the browser.",source:"@site/docs/Guides/Lua/beginner.md",sourceDirName:"Guides/Lua",slug:"/Guides/Lua/beginner",permalink:"/ppl-docs/docs/Guides/Lua/beginner",draft:!1,unlisted:!1,editUrl:"https://github.com/pewpewlive/ppl-docs/edit/master/docs/Guides/Lua/beginner.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Sound files",permalink:"/ppl-docs/docs/File Information/sound-files"},next:{title:"Intermediate",permalink:"/ppl-docs/docs/Guides/Lua/intermediate"}},t={},d=[{value:"PRINTING EXAMPLE",id:"printing-example",level:3},{value:"VARIABLES EXAMPLE",id:"variables-example",level:3},{value:"IF STATEMENT EXAMPLE",id:"if-statement-example",level:3},{value:"FOR LOOP EXAMPLE",id:"for-loop-example",level:3},{value:"NESTED FOR LOOP EXAMPLE",id:"nested-for-loop-example",level:3},{value:"WHILE LOOP EXAMPLE",id:"while-loop-example",level:3},{value:"BREAK LOOPS EXAMPLE",id:"break-loops-example",level:3},{value:"FUNCTIONS EXAMPLE",id:"functions-example",level:3},{value:"TABLES EXAMPLE",id:"tables-example",level:3},{value:"FOR I, V IN PAIRS LOOP EXAMPLE",id:"for-i-v-in-pairs-loop-example",level:3}];function c(e){const n={a:"a",code:"code",h1:"h1",h3:"h3",p:"p",pre:"pre",strong:"strong",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"beginner-lua-tutorial",children:"Beginner Lua Tutorial"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"https://repl.it/languages/lua",children:"https://repl.it/languages/lua"})," can be used to try Lua in the browser."]}),"\n",(0,i.jsx)(n.p,{children:"These examples are more for review, rather than learning! If you see something here that you don't understand, continue to watch Lua tutorials on youtube!"}),"\n",(0,i.jsx)(n.h3,{id:"printing-example",children:"PRINTING EXAMPLE"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'print("Hello world!")\n'})}),"\n",(0,i.jsxs)(n.p,{children:["Output:\n",(0,i.jsx)(n.code,{children:"Hello World!"})]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"print(2+3)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Output:\n",(0,i.jsx)(n.code,{children:"5"})]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'print("2+3")\n'})}),"\n",(0,i.jsxs)(n.p,{children:["Output:\n",(0,i.jsx)(n.code,{children:"2+3"})]}),"\n",(0,i.jsxs)(n.p,{children:["Anything in quotation marks ",(0,i.jsx)(n.code,{children:'" "'})," or ",(0,i.jsx)(n.code,{children:"' '"})," is a string. Printing a string will output exactly what you type! Anything not inside of quotation marks are registered as numbers, variables, or mathematics!"]}),"\n",(0,i.jsx)(n.h3,{id:"variables-example",children:"VARIABLES EXAMPLE"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"my_variable = 5\nprint(my_variable)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Output:\n",(0,i.jsx)(n.code,{children:"5"})]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"x = 2\ny = 10\nprint(x+y)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Output:\n",(0,i.jsx)(n.code,{children:"12"})]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'x = 2\ny = 10\nprint("x+y")\n'})}),"\n",(0,i.jsxs)(n.p,{children:["Output:\n",(0,i.jsx)(n.code,{children:"x+y"})]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'some_text = "this is cool"\nprint(some_text)\n'})}),"\n",(0,i.jsxs)(n.p,{children:["Output:\n",(0,i.jsx)(n.code,{children:"this is cool"})]}),"\n",(0,i.jsx)(n.p,{children:"Variables can be assigned practically any value! You can store them as numbers, strings, and more!"}),"\n",(0,i.jsx)(n.h3,{id:"if-statement-example",children:"IF STATEMENT EXAMPLE"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'x = 6\nif x > 5 then\n print("Greater than 5!")\nend\n'})}),"\n",(0,i.jsxs)(n.p,{children:["Output:\n",(0,i.jsx)(n.code,{children:"Greater than 5!"})]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'a = true\nb = false\n\nif a then\n print("True")\nend\n\nif a and b then\n print("True")\nelse\n print("False")\nend\n\nif a or b then\n print("True")\nelse\n print("False")\nend\n\nif b then\n print("True")\nend\n'})}),"\n",(0,i.jsx)(n.p,{children:"Output:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"True\nFalse\nTrue\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'x = 5\ny = 5\nif x == y then\n print("True")\nend\n'})}),"\n",(0,i.jsxs)(n.p,{children:["Output:\n",(0,i.jsx)(n.code,{children:"True"})]}),"\n",(0,i.jsx)(n.p,{children:'Variables can also be assigned boolean values, which are true and false! With "and" statements, both or all arguments need to be true to equal true in total! With "or" statements, only one needs to be true to equal true in total! Both or all need to be false to be false in total!'}),"\n",(0,i.jsx)(n.h3,{id:"for-loop-example",children:"FOR LOOP EXAMPLE"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'for i = 1, 5 do\n print("Hello!")\nend\n'})}),"\n",(0,i.jsxs)(n.p,{children:["The following output is repeated 5 times:\n",(0,i.jsx)(n.code,{children:"Hello!"})]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"for i = 1, 10 do\n print(i)\nend\n"})}),"\n",(0,i.jsx)(n.p,{children:"Output:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"for i = 1, 10, 2 do\n print(i)\nend\n"})}),"\n",(0,i.jsx)(n.p,{children:"Output:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"1\n3\n5\n7\n9\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"for i = 0, -10, -1 do\n print(i)\nend\n"})}),"\n",(0,i.jsx)(n.p,{children:"Output:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"0\n-1\n-2\n-3\n-4\n-5\n-6\n-7\n-8\n-9\n-10\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'local loopcount = 25\nfor i = 1, loopcount do\n print("Loop!")\nend\n'})}),"\n",(0,i.jsxs)(n.p,{children:["The following output is repeated 25 times:\n",(0,i.jsx)(n.code,{children:"Loop!"})]}),"\n",(0,i.jsx)(n.p,{children:'For loops are useful for running the same code multiple times! The first line of the for loop has the syntax for i = Index, End Value, Increments. You set i as your starting value, separate with a comma, set your end value, and you can optionally set your increment as your third value. Don\'t forget the "do"!'}),"\n",(0,i.jsx)(n.h3,{id:"nested-for-loop-example",children:"NESTED FOR LOOP EXAMPLE"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'for i = 1, 5 do\n print("This is the outer loop!")\n for j = 1, 3 do\n print("This is the inner loop!")\n end\nend\n'})}),"\n",(0,i.jsx)(n.p,{children:"The following output is repeated 5 times:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"This is the outer loop!\nThis is the inner loop!\nThis is the inner loop!\nThis is the inner loop!\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'local swim_laps = 10\nlocal paddles = 5\nfor i = 1, swim_laps do\n print("Lap : "..i)\n for j = 1, paddles do\n print("Paddle : "..j)\n end\nend\n'})}),"\n",(0,i.jsx)(n.p,{children:"Output:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"Lap : 1\nPaddle : 1\nPaddle : 2\n"})}),"\n",(0,i.jsx)(n.p,{children:"...etc."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'for i = 1, 5 do\n for i = 1, 2 do\n print("This is fine!")\n end\nend\n'})}),"\n",(0,i.jsxs)(n.p,{children:["The following output is repeated 10 times:\n",(0,i.jsx)(n.code,{children:"This is fine!"})]}),"\n",(0,i.jsx)(n.p,{children:"You are allowed to put for loops inside of other for loops! In if you put a for loop that repeats 3 times inside of a for loop that repeats 5 times, that inner loop runs 15 times total! With for loops, you can use any variable as your index! And with nested for loops, it is good practice to use different variables, like using i and j instead of using i twice."}),"\n",(0,i.jsx)(n.h3,{id:"while-loop-example",children:"WHILE LOOP EXAMPLE"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"local x = 3\nwhile x > 0 do\n print(x)\n x = x - 1\nend\n"})}),"\n",(0,i.jsx)(n.p,{children:"Output:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"3\n2\n1\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"local x = 3\nlocal y = 4\nwhile x > 0 and y > 0 do\n print(x,y)\n x = x - 1\n y = y - 1\nend\n"})}),"\n",(0,i.jsx)(n.p,{children:"Output:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"3 4\n2 3\n1 2\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'while true do\n print("Hello!")\nend\n'})}),"\n",(0,i.jsxs)(n.p,{children:["The following output is repeated indefinitely:\n",(0,i.jsx)(n.code,{children:"Hello!"})]}),"\n",(0,i.jsx)(n.p,{children:"A while loop is very similar to a for loop, except you can think of it as an if statement and for loop combined! The while loop runs while the conditions are true. So for a while true do loop, the loop runs forever! Be careful when making a while true do loop!"}),"\n",(0,i.jsx)(n.h3,{id:"break-loops-example",children:"BREAK LOOPS EXAMPLE"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'while true do\n print("loop!")\n break\nend\n'})}),"\n",(0,i.jsxs)(n.p,{children:["The above loop will only run once. Output:\n",(0,i.jsx)(n.code,{children:"loop!"})]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'x = 0\nwhile true do\n print("loop!")\n x = x + 1\n if x >=2 then\n break\n end\nend\n'})}),"\n",(0,i.jsx)(n.p,{children:"The above loop will run 2 times. Output:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"loop!\nloop!\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"for i = 1, 10 do\n print(i)\n if i >= 3 then\n break\n end\nend\n"})}),"\n",(0,i.jsx)(n.p,{children:"Output:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"1\n2\n3\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Using ",(0,i.jsx)(n.code,{children:"break"})," is very useful! The purpose for ",(0,i.jsx)(n.code,{children:"break"})," is to stop a loop from running! So using ",(0,i.jsx)(n.code,{children:"break"})," in a for or while loop will ultimately terminate it!"]}),"\n",(0,i.jsx)(n.h3,{id:"functions-example",children:"FUNCTIONS EXAMPLE"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"local function myFunction()\n local x = 4\n local y = 2\n print(x + y)\nend\n\nmyFunction()\n"})}),"\n",(0,i.jsx)(n.p,{children:"Output:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"6\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"local function AddNum(num1, num2)\n print(num1 + num2)\nend\n\nAddNum(99,121)\nAddNum(44,33)\n"})}),"\n",(0,i.jsx)(n.p,{children:"Output:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"220\n77\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"local function Cubed(number)\n newNumber = number*number*number\n return newNumber\nend\n\nlocal x = Cubed(2)\nlocal y = Cubed(3)\n\nprint(x,y)\n\nlocal a = Cubed(10)\nprint(a)\n"})}),"\n",(0,i.jsx)(n.p,{children:"Output:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"8 27\n1000\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Functions are good for reducing the amount of code you have to write. If you have a piece of code you are going to use over and over with slightly different values, then make that piece of code a function! You can give functions ",(0,i.jsx)(n.strong,{children:"parameters"})," which is the num1 and num2 in myFunction(num1, num2). When you use the function later in your code, don't forget to fill in the parentheses! You can also use ",(0,i.jsx)(n.code,{children:"return"})," to essentially turn a function into a value."]}),"\n",(0,i.jsx)(n.h3,{id:"tables-example",children:"TABLES EXAMPLE"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"local myTable = {1,5,3}\n\nprint(myTable[1])\nprint(myTable[2])\nprint(myTable[3])\n"})}),"\n",(0,i.jsx)(n.p,{children:"Output:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"1\n5\n3\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'local names = {\n "Bob",\n "Moses",\n "Joe"\n}\nfor i = 1, #names do\n print(names[i])\nend\n\nnames[4] = "Dawn"\nprint(names[4])\ntable.insert(names,"Rambo")\nprint(names[5])\n'})}),"\n",(0,i.jsx)(n.p,{children:"Output:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"Bob\nMoses\nJoe\nDawn\nRambo\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'local person = {\n health = 100,\n speed = 20,\n isAwesome = true,\n name = "John"\n}\nprint("This person\'s health is "..person.health)\nprint("This person\'s health is "..person["health"])\nprint("This person\'s speed is "..person.speed)\nprint("This person is awesome. "..person.isAwesome)\nprint("This person\'s name is "..person.name)\nprint("This person\'s name is "..person["name"])\n\nperson.home = "USA"\nperson["money"] = 250\n\nprint("This person\'s home is "..person.home)\nprint("This person has "..person["money"].." dollars!")\n\n'})}),"\n",(0,i.jsx)(n.p,{children:"Output:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"This person's health is 100\nThis person's health is 100\nThis person's speed is 20\nThis person is awesome. true\nThis person's name is John\nThis person's name is John\nThis person's home is USA\nThis person has 250 dollars!\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Tables are very good for storing lots of information. You can even put things inside of tables after the table is made! Done with table.insert(TableName, data) or you add things with table[n] = data. And remember, the table doesn't have to be defined on the same line! The brackets "," can be on separate lines to make it easier to read!"]}),"\n",(0,i.jsx)(n.h3,{id:"for-i-v-in-pairs-loop-example",children:"FOR I, V IN PAIRS LOOP EXAMPLE"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:"local numbers = {3, 4, 99, 202, -3}\n\nfor i, v in pairs(numbers) do\n print(i, v)\nend\n"})}),"\n",(0,i.jsx)(n.p,{children:"Output:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"1 3\n2 4\n3 99\n4 202\n5 -3\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-lua",children:'local names = {"Jack", "Mike", "Melinda", "Stacy"}\n\nfor index, person in pairs(names) do\n print("Person "..index.." is "..person)\nend\n'})}),"\n",(0,i.jsx)(n.p,{children:"Output:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"Person 1 is Jack\nPerson 2 is Mike\nPerson 3 is Melinda\nPerson 4 is Stacy\n"})}),"\n",(0,i.jsx)(n.p,{children:'For i, v in pairs loops are a useful kind of for loop! They basically go through a list and use the data stored in the table. The variable i is the index or position of the table where the data is stored. The variable v is the value of the data. Inside of pairs() is the table you want to use: pairs(TableName). The variables don\'t have to be named "i" and "v", they can be named whatever you want!'})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>o,x:()=>a});var i=s(6540);const r={},l=i.createContext(r);function o(e){const n=i.useContext(l);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),i.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/693aa6a8.43876ded.js b/assets/js/693aa6a8.34bf2d89.js similarity index 85% rename from assets/js/693aa6a8.43876ded.js rename to assets/js/693aa6a8.34bf2d89.js index c908400..1dd523b 100644 --- a/assets/js/693aa6a8.43876ded.js +++ b/assets/js/693aa6a8.34bf2d89.js @@ -1 +1 @@ -"use strict";(self.webpackChunkppl_docs=self.webpackChunkppl_docs||[]).push([[3194],{3305:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>s,default:()=>d,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var i=n(4848),o=n(8453);const r={sidebar_position:2},s="Level restrictions",l={id:"other/level-restrictions",title:"Level restrictions",description:"Entity count",source:"@site/docs/other/level-restrictions.md",sourceDirName:"other",slug:"/other/level-restrictions",permalink:"/ppl-docs/docs/other/level-restrictions",draft:!1,unlisted:!1,editUrl:"https://github.com/pewpewlive/ppl-docs/edit/master/docs/other/level-restrictions.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Design principles",permalink:"/ppl-docs/docs/other/level-design-principles"},next:{title:"Trivia",permalink:"/ppl-docs/docs/other/trivia"}},a={},c=[{value:"Entity count",id:"entity-count",level:3},{value:"Duration",id:"duration",level:3},{value:"Memory usage",id:"memory-usage",level:3}];function h(e){const t={a:"a",code:"code",h1:"h1",h3:"h3",li:"li",p:"p",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"level-restrictions",children:"Level restrictions"}),"\n",(0,i.jsx)(t.h3,{id:"entity-count",children:"Entity count"}),"\n",(0,i.jsx)(t.p,{children:"At most 1300 entities can exist at any given moment. This includes the player's bullet. If there are already 1300 entities, no more entities will be created. This means that the player won't be able to shoot."}),"\n",(0,i.jsx)(t.h3,{id:"duration",children:"Duration"}),"\n",(0,i.jsxs)(t.p,{children:["A game lasts at most 1 hour. If the level has not called ",(0,i.jsx)(t.a,{href:"https://github.com/jyaif/ppl-utils/wiki/API_pewpew_lib#void-stop_game",children:(0,i.jsx)(t.code,{children:"stop_game"})})," by then, it will be called automatically.\nThe reason for this limitation is that replays then become too large."]}),"\n",(0,i.jsx)(t.h3,{id:"memory-usage",children:"Memory usage"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"The Lua interpreter can't use more than 500KB of memory when running a level. Unless you have a memory leak in your level, this shouldn't be a problem."}),"\n",(0,i.jsx)(t.li,{children:"The Lua interpreter can't use more than 3MB of memory when loading a mesh. You will need to split a mesh into multiple files if you are hitting this limit."}),"\n",(0,i.jsx)(t.li,{children:"The Lua interpreter can't use more than 3MB of memory when loading sounds. Unless you are doing something really crazy, this will never be a problem."}),"\n"]})]})}function d(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>s,x:()=>l});var i=n(6540);const o={},r=i.createContext(o);function s(e){const t=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkppl_docs=self.webpackChunkppl_docs||[]).push([[3194],{3305:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>s,default:()=>d,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var i=n(4848),o=n(8453);const r={sidebar_position:2},s="Level restrictions",l={id:"other/level-restrictions",title:"Level restrictions",description:"Entity count",source:"@site/docs/other/level-restrictions.md",sourceDirName:"other",slug:"/other/level-restrictions",permalink:"/ppl-docs/docs/other/level-restrictions",draft:!1,unlisted:!1,editUrl:"https://github.com/pewpewlive/ppl-docs/edit/master/docs/other/level-restrictions.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Design principles",permalink:"/ppl-docs/docs/other/level-design-principles"},next:{title:"Trivia",permalink:"/ppl-docs/docs/other/trivia"}},a={},c=[{value:"Entity count",id:"entity-count",level:2},{value:"Duration",id:"duration",level:2},{value:"Memory usage",id:"memory-usage",level:2}];function h(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"level-restrictions",children:"Level restrictions"}),"\n",(0,i.jsx)(t.h2,{id:"entity-count",children:"Entity count"}),"\n",(0,i.jsx)(t.p,{children:"At most 1300 entities can exist at any given moment. This includes the player's bullet. If there are already 1300 entities, no more entities will be created. This means that the player won't be able to shoot."}),"\n",(0,i.jsx)(t.h2,{id:"duration",children:"Duration"}),"\n",(0,i.jsxs)(t.p,{children:["A game lasts at most 1 hour. If the level has not called ",(0,i.jsx)(t.a,{href:"https://github.com/jyaif/ppl-utils/wiki/API_pewpew_lib#void-stop_game",children:(0,i.jsx)(t.code,{children:"stop_game"})})," by then, it will be called automatically.\nThe reason for this limitation is that replays then become too large."]}),"\n",(0,i.jsx)(t.h2,{id:"memory-usage",children:"Memory usage"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"The Lua interpreter can't use more than 500KB of memory when running a level. Unless you have a memory leak in your level, this shouldn't be a problem."}),"\n",(0,i.jsx)(t.li,{children:"The Lua interpreter can't use more than 3MB of memory when loading a mesh. You will need to split a mesh into multiple files if you are hitting this limit."}),"\n",(0,i.jsx)(t.li,{children:"The Lua interpreter can't use more than 3MB of memory when loading sounds. Unless you are doing something really crazy, this will never be a problem."}),"\n"]})]})}function d(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>s,x:()=>l});var i=n(6540);const o={},r=i.createContext(o);function s(e){const t=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/bde67976.326724d7.js b/assets/js/bde67976.c440d31c.js similarity index 55% rename from assets/js/bde67976.326724d7.js rename to assets/js/bde67976.c440d31c.js index 5293456..331551a 100644 --- a/assets/js/bde67976.326724d7.js +++ b/assets/js/bde67976.c440d31c.js @@ -1 +1 @@ -"use strict";(self.webpackChunkppl_docs=self.webpackChunkppl_docs||[]).push([[3619],{9950:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>r,metadata:()=>l,toc:()=>a});var s=i(4848),t=i(8453);const r={sidebar_position:3},o="Sound files",l={id:"File Information/sound-files",title:"Sound files",description:"Example of a file that defines a single sound:",source:"@site/docs/File Information/sound-files.md",sourceDirName:"File Information",slug:"/File Information/sound-files",permalink:"/ppl-docs/docs/File Information/sound-files",draft:!1,unlisted:!1,editUrl:"https://github.com/pewpewlive/ppl-docs/edit/master/docs/File Information/sound-files.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Mesh files",permalink:"/ppl-docs/docs/File Information/mesh-files"},next:{title:"Beginner Lua Tutorial",permalink:"/ppl-docs/docs/Guides/Lua/beginner"}},c={},a=[];function u(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",li:"li",p:"p",pre:"pre",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"sound-files",children:"Sound files"}),"\n",(0,s.jsx)(n.p,{children:"Example of a file that defines a single sound:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-lua",children:'sounds = {\n {\n frequency = 500,\n sustain = 0.3,\n waveform = "triangle",\n }\n}\n'})}),"\n",(0,s.jsx)(n.p,{children:"The following fields can be used to describe a sound:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"attack (in seconds)"}),"\n",(0,s.jsx)(n.li,{children:"decay (in seconds)"}),"\n",(0,s.jsx)(n.li,{children:"sustain (in seconds)"}),"\n",(0,s.jsx)(n.li,{children:"sustainPunch (in seconds)"}),"\n",(0,s.jsx)(n.li,{children:"amplification"}),"\n",(0,s.jsx)(n.li,{children:"tremoloDepth"}),"\n",(0,s.jsx)(n.li,{children:"tremoloFrequency (in hertz)"}),"\n",(0,s.jsx)(n.li,{children:"frequency (in hertz)"}),"\n",(0,s.jsx)(n.li,{children:"frequencyDeltaSweep"}),"\n",(0,s.jsx)(n.li,{children:"frequencyJump1Onset"}),"\n",(0,s.jsx)(n.li,{children:"frequencyJump2Onset"}),"\n",(0,s.jsx)(n.li,{children:"frequencyJump1Amount"}),"\n",(0,s.jsx)(n.li,{children:"frequencyJump2Amount"}),"\n",(0,s.jsx)(n.li,{children:"frequencySweep"}),"\n",(0,s.jsx)(n.li,{children:"vibratoFrequency (in hertz)"}),"\n",(0,s.jsx)(n.li,{children:"vibratoDepth (in hertz)"}),"\n",(0,s.jsx)(n.li,{children:"flangerOffset"}),"\n",(0,s.jsx)(n.li,{children:"flangerOffsetSweep"}),"\n",(0,s.jsx)(n.li,{children:"repeatFrequency"}),"\n",(0,s.jsx)(n.li,{children:'waveform ("sine", "triangle", "sawtooth", "square", "tangent", "whistle", "breaker", "whitenoise", "pinknoise", "brownnoise")'}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{type:"tip",children:(0,s.jsxs)(n.p,{children:["Use ",(0,s.jsx)(n.a,{href:"https://pewpew.live/jfxr/index.html",children:"jfxr"})," for sound creation. A script then transforms the resulting jfxr link (for example ",(0,s.jsx)(n.a,{href:"https://pewpew.live/jfxr/index.html#%7B%22_version%22%3A1%2C%22_name%22%3A%22Pickup%2Fcoin%206%22%2C%22_locked%22%3A%5B%5D%2C%22sampleRate%22%3A44100%2C%22attack%22%3A0%2C%22sustain%22%3A0.1%2C%22sustainPunch%22%3A60%2C%22decay%22%3A0.14%2C%22tremoloDepth%22%3A0%2C%22tremoloFrequency%22%3A10%2C%22frequency%22%3A700%2C%22frequencySweep%22%3A0%2C%22frequencyDeltaSweep%22%3A0%2C%22repeatFrequency%22%3A0%2C%22frequencyJump1Onset%22%3A25%2C%22frequencyJump1Amount%22%3A75%2C%22frequencyJump2Onset%22%3A66%2C%22frequencyJump2Amount%22%3A0%2C%22harmonics%22%3A0%2C%22harmonicsFalloff%22%3A0.5%2C%22waveform%22%3A%22square%22%2C%22interpolateNoise%22%3Atrue%2C%22vibratoDepth%22%3A0%2C%22vibratoFrequency%22%3A10%2C%22squareDuty%22%3A90%2C%22squareDutySweep%22%3A0%2C%22flangerOffset%22%3A6%2C%22flangerOffsetSweep%22%3A0%2C%22bitCrush%22%3A16%2C%22bitCrushSweep%22%3A0%2C%22lowPassCutoff%22%3A22050%2C%22lowPassCutoffSweep%22%3A0%2C%22highPassCutoff%22%3A0%2C%22highPassCutoffSweep%22%3A0%2C%22compression%22%3A1%2C%22normalization%22%3Atrue%2C%22amplification%22%3A100%7D",children:"this link"}),") into a table consumable by PewPew Live. See this ",(0,s.jsx)(n.a,{href:"https://github.com/jyaif/ppl-utils/blob/cd0607d3448915319ce9abc1f6019287566f6bdd/content/levels/useful_helpers/helpers/boxes/cannon_pickup_sound.lua#L3",children:"example"}),"."]})})]})}function d(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},8453:(e,n,i)=>{i.d(n,{R:()=>o,x:()=>l});var s=i(6540);const t={},r=s.createContext(t);function o(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkppl_docs=self.webpackChunkppl_docs||[]).push([[3619],{9950:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>r,metadata:()=>l,toc:()=>a});var s=i(4848),t=i(8453);const r={sidebar_position:3},o="Sound files",l={id:"File Information/sound-files",title:"Sound files",description:"Example of a file that defines a single sound:",source:"@site/docs/File Information/sound-files.md",sourceDirName:"File Information",slug:"/File Information/sound-files",permalink:"/ppl-docs/docs/File Information/sound-files",draft:!1,unlisted:!1,editUrl:"https://github.com/pewpewlive/ppl-docs/edit/master/docs/File Information/sound-files.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Mesh files",permalink:"/ppl-docs/docs/File Information/mesh-files"},next:{title:"Beginner Lua Tutorial",permalink:"/ppl-docs/docs/Guides/Lua/beginner"}},c={},a=[];function u(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",li:"li",p:"p",pre:"pre",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"sound-files",children:"Sound files"}),"\n",(0,s.jsx)(n.p,{children:"Example of a file that defines a single sound:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-lua",children:'sounds = {\n {\n frequency = 500,\n sustain = 0.3,\n waveform = "triangle",\n }\n}\n'})}),"\n",(0,s.jsx)(n.p,{children:"The following fields can be used to describe a sound:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"attack (in seconds)"}),"\n",(0,s.jsx)(n.li,{children:"decay (in seconds)"}),"\n",(0,s.jsx)(n.li,{children:"sustain (in seconds)"}),"\n",(0,s.jsx)(n.li,{children:"sustainPunch (in seconds)"}),"\n",(0,s.jsx)(n.li,{children:"amplification"}),"\n",(0,s.jsx)(n.li,{children:"tremoloDepth"}),"\n",(0,s.jsx)(n.li,{children:"tremoloFrequency (in hertz)"}),"\n",(0,s.jsx)(n.li,{children:"frequency (in hertz)"}),"\n",(0,s.jsx)(n.li,{children:"frequencyDeltaSweep"}),"\n",(0,s.jsx)(n.li,{children:"frequencyJump1Onset"}),"\n",(0,s.jsx)(n.li,{children:"frequencyJump2Onset"}),"\n",(0,s.jsx)(n.li,{children:"frequencyJump1Amount"}),"\n",(0,s.jsx)(n.li,{children:"frequencyJump2Amount"}),"\n",(0,s.jsx)(n.li,{children:"frequencySweep"}),"\n",(0,s.jsx)(n.li,{children:"vibratoFrequency (in hertz)"}),"\n",(0,s.jsx)(n.li,{children:"vibratoDepth (in hertz)"}),"\n",(0,s.jsx)(n.li,{children:"flangerOffset"}),"\n",(0,s.jsx)(n.li,{children:"flangerOffsetSweep"}),"\n",(0,s.jsx)(n.li,{children:"repeatFrequency"}),"\n",(0,s.jsx)(n.li,{children:'waveform ("sine", "triangle", "sawtooth", "square", "tangent", "whistle", "breaker", "whitenoise", "pinknoise", "brownnoise")'}),"\n"]}),"\n",(0,s.jsxs)(n.admonition,{type:"tip",children:[(0,s.jsxs)(n.p,{children:["Use ",(0,s.jsx)(n.a,{href:"https://pewpew.live/jfxr/index.html",children:"jfxr"})," for sound creation. A script then transforms the resulting jfxr link (for example ",(0,s.jsx)(n.a,{href:"https://pewpew.live/jfxr/index.html#%7B%22_version%22%3A1%2C%22_name%22%3A%22Pickup%2Fcoin%206%22%2C%22_locked%22%3A%5B%5D%2C%22sampleRate%22%3A44100%2C%22attack%22%3A0%2C%22sustain%22%3A0.1%2C%22sustainPunch%22%3A60%2C%22decay%22%3A0.14%2C%22tremoloDepth%22%3A0%2C%22tremoloFrequency%22%3A10%2C%22frequency%22%3A700%2C%22frequencySweep%22%3A0%2C%22frequencyDeltaSweep%22%3A0%2C%22repeatFrequency%22%3A0%2C%22frequencyJump1Onset%22%3A25%2C%22frequencyJump1Amount%22%3A75%2C%22frequencyJump2Onset%22%3A66%2C%22frequencyJump2Amount%22%3A0%2C%22harmonics%22%3A0%2C%22harmonicsFalloff%22%3A0.5%2C%22waveform%22%3A%22square%22%2C%22interpolateNoise%22%3Atrue%2C%22vibratoDepth%22%3A0%2C%22vibratoFrequency%22%3A10%2C%22squareDuty%22%3A90%2C%22squareDutySweep%22%3A0%2C%22flangerOffset%22%3A6%2C%22flangerOffsetSweep%22%3A0%2C%22bitCrush%22%3A16%2C%22bitCrushSweep%22%3A0%2C%22lowPassCutoff%22%3A22050%2C%22lowPassCutoffSweep%22%3A0%2C%22highPassCutoff%22%3A0%2C%22highPassCutoffSweep%22%3A0%2C%22compression%22%3A1%2C%22normalization%22%3Atrue%2C%22amplification%22%3A100%7D",children:"this link"}),") into a table consumable by PewPew Live."]}),(0,s.jsxs)(n.p,{children:["See this ",(0,s.jsx)(n.a,{href:"https://github.com/jyaif/ppl-utils/blob/cd0607d3448915319ce9abc1f6019287566f6bdd/content/levels/useful_helpers/helpers/boxes/cannon_pickup_sound.lua#L3",children:"example"}),"."]})]})]})}function d(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},8453:(e,n,i)=>{i.d(n,{R:()=>o,x:()=>l});var s=i(6540);const t={},r=s.createContext(t);function o(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c9cd16d1.ccdfc422.js b/assets/js/c9cd16d1.ccdfc422.js deleted file mode 100644 index 872ba76..0000000 --- a/assets/js/c9cd16d1.ccdfc422.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkppl_docs=self.webpackChunkppl_docs||[]).push([[1414],{637:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>r,toc:()=>c});var o=n(4848),s=n(8453);const a={sidebar_position:3},i="Advanced",r={id:"Guides/Lua/advanced",title:"Advanced",description:"In this tutorial, we will learn how to make more advanced levels, including meshes, custom enemies, and other cool gameplay features!",source:"@site/docs/Guides/Lua/advanced.md",sourceDirName:"Guides/Lua",slug:"/Guides/Lua/advanced",permalink:"/ppl-docs/docs/Guides/Lua/advanced",draft:!1,unlisted:!1,editUrl:"https://github.com/pewpewlive/ppl-docs/edit/master/docs/Guides/Lua/advanced.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Intermediate",permalink:"/ppl-docs/docs/Guides/Lua/intermediate"},next:{title:"60 FPS Animation",permalink:"/ppl-docs/docs/Guides/Other/fps-animation"}},d={},c=[{value:"Note",id:"note",level:3}];function l(e){const t={h1:"h1",h3:"h3",hr:"hr",p:"p",...(0,s.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.h1,{id:"advanced",children:"Advanced"}),"\n",(0,o.jsx)(t.p,{children:"In this tutorial, we will learn how to make more advanced levels, including meshes, custom enemies, and other cool gameplay features!"}),"\n",(0,o.jsx)(t.p,{children:"So, let's get straight into it."}),"\n",(0,o.jsx)(t.hr,{}),"\n",(0,o.jsx)(t.h3,{id:"note",children:"Note"}),"\n",(0,o.jsx)(t.p,{children:"Before we start, it is necessary to know at least some basic Lua and how to make a simple PewPew Live level. If you need a refresher, take a look at the Beginner and Intermediate tutorials."}),"\n",(0,o.jsx)(t.p,{children:"Once you're done, you can come back to this tutorial."}),"\n",(0,o.jsx)(t.hr,{}),"\n",(0,o.jsx)(t.p,{children:"Tutorial in the making."})]})}function u(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>i,x:()=>r});var o=n(6540);const s={},a=o.createContext(s);function i(e){const t=o.useContext(a);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),o.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c9cd16d1.ce61f061.js b/assets/js/c9cd16d1.ce61f061.js new file mode 100644 index 0000000..1cb39d3 --- /dev/null +++ b/assets/js/c9cd16d1.ce61f061.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkppl_docs=self.webpackChunkppl_docs||[]).push([[1414],{637:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>i,default:()=>u,frontMatter:()=>s,metadata:()=>r,toc:()=>c});var o=n(4848),a=n(8453);const s={sidebar_position:3},i="Advanced",r={id:"Guides/Lua/advanced",title:"Advanced",description:"In this tutorial, we will learn how to make more advanced levels, including meshes, custom enemies, and other cool gameplay features!",source:"@site/docs/Guides/Lua/advanced.md",sourceDirName:"Guides/Lua",slug:"/Guides/Lua/advanced",permalink:"/ppl-docs/docs/Guides/Lua/advanced",draft:!1,unlisted:!1,editUrl:"https://github.com/pewpewlive/ppl-docs/edit/master/docs/Guides/Lua/advanced.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Intermediate",permalink:"/ppl-docs/docs/Guides/Lua/intermediate"},next:{title:"60 FPS Animation",permalink:"/ppl-docs/docs/Guides/Other/fps-animation"}},d={},c=[{value:"Note",id:"note",level:2}];function l(e){const t={h1:"h1",h2:"h2",hr:"hr",p:"p",...(0,a.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.h1,{id:"advanced",children:"Advanced"}),"\n",(0,o.jsx)(t.p,{children:"In this tutorial, we will learn how to make more advanced levels, including meshes, custom enemies, and other cool gameplay features!"}),"\n",(0,o.jsx)(t.p,{children:"So, let's get straight into it."}),"\n",(0,o.jsx)(t.h2,{id:"note",children:"Note"}),"\n",(0,o.jsx)(t.p,{children:"Before we start, it is necessary to know at least some basic Lua and how to make a simple PewPew Live level. If you need a refresher, take a look at the Beginner and Intermediate tutorials."}),"\n",(0,o.jsx)(t.p,{children:"Once you're done, you can come back to this tutorial."}),"\n",(0,o.jsx)(t.hr,{}),"\n",(0,o.jsx)(t.p,{children:"Tutorial in the making."})]})}function u(e={}){const{wrapper:t}={...(0,a.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>i,x:()=>r});var o=n(6540);const a={},s=o.createContext(a);function i(e){const t=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),o.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.aade9a94.js b/assets/js/runtime~main.7731f4e9.js similarity index 64% rename from assets/js/runtime~main.aade9a94.js rename to assets/js/runtime~main.7731f4e9.js index 11f308d..7bd614d 100644 --- a/assets/js/runtime~main.aade9a94.js +++ b/assets/js/runtime~main.7731f4e9.js @@ -1 +1 @@ -(()=>{"use strict";var e,a,r,t,c,f={},o={};function d(e){var a=o[e];if(void 0!==a)return a.exports;var r=o[e]={exports:{}};return f[e].call(r.exports,r,r.exports,d),r.exports}d.m=f,e=[],d.O=(a,r,t,c)=>{if(!r){var f=1/0;for(n=0;n=c)&&Object.keys(d.O).every((e=>d.O[e](r[b])))?r.splice(b--,1):(o=!1,c0&&e[n-1][2]>c;n--)e[n]=e[n-1];e[n]=[r,t,c]},d.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return d.d(a,{a:a}),a},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,d.t=function(e,t){if(1&t&&(e=this(e)),8&t)return e;if("object"==typeof e&&e){if(4&t&&e.__esModule)return e;if(16&t&&"function"==typeof e.then)return e}var c=Object.create(null);d.r(c);var f={};a=a||[null,r({}),r([]),r(r)];for(var o=2&t&&e;"object"==typeof o&&!~a.indexOf(o);o=r(o))Object.getOwnPropertyNames(o).forEach((a=>f[a]=()=>e[a]));return f.default=()=>e,d.d(c,f),c},d.d=(e,a)=>{for(var r in a)d.o(a,r)&&!d.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:a[r]})},d.f={},d.e=e=>Promise.all(Object.keys(d.f).reduce(((a,r)=>(d.f[r](e,a),a)),[])),d.u=e=>"assets/js/"+({198:"3164f9fb",199:"d86380de",298:"91cb3e84",1341:"cd2705ba",1414:"c9cd16d1",2042:"reactPlayerTwitch",2129:"ba59bd01",2138:"1a4e3797",2256:"61036be0",2501:"59bfc863",2711:"9e4087bc",2723:"reactPlayerMux",3151:"3679e0b2",3194:"693aa6a8",3249:"ccc49370",3392:"reactPlayerVidyard",3619:"bde67976",3736:"7d528a0b",3976:"0e384e19",4123:"f0258939",4387:"d321bdfd",4583:"1df93b7f",4813:"6875c492",5088:"12193896",5559:"0be36c6e",5634:"fe8ddc1f",6173:"reactPlayerVimeo",6328:"reactPlayerDailyMotion",6353:"reactPlayerPreview",6463:"reactPlayerKaltura",6887:"reactPlayerFacebook",7098:"a7bd4aaa",7376:"4315fc58",7413:"d8d6d394",7458:"reactPlayerFilePlayer",7472:"814f3328",7570:"reactPlayerMixcloud",7627:"reactPlayerStreamable",7643:"a6aa9e1f",7810:"0f881721",8209:"01a85c17",8401:"17896441",8446:"reactPlayerYouTube",8538:"c5039d34",8573:"7370b24e",8581:"935f2afb",9048:"a94703ab",9340:"reactPlayerWistia",9363:"b204be58",9612:"46e25335",9630:"c9e852ed",9647:"5e95c892",9979:"reactPlayerSoundCloud"}[e]||e)+"."+{198:"281a5b03",199:"5369d551",298:"5acf482c",489:"af907ff3",1341:"af492360",1414:"ccdfc422",2042:"34d8c5b0",2129:"86a404f3",2138:"2fd8b44d",2237:"d7bfb77a",2256:"c52ea3e6",2501:"7fd24e02",2711:"f3f4efee",2723:"45c10ec4",3151:"65ca3eef",3194:"43876ded",3249:"d1c96bf9",3392:"fad96167",3619:"326724d7",3736:"3ed94e94",3976:"0e880dff",4123:"a6e32da8",4132:"e5adff7a",4387:"707b2e80",4583:"ad7b1433",4813:"a35254a3",5088:"5b738686",5559:"627047f2",5634:"dcd7f102",5741:"4d685839",6173:"4ae08951",6328:"0f93db46",6353:"7829e5e9",6463:"029ffa45",6887:"e102f767",7098:"bf984ef7",7376:"04756219",7413:"b5a6885d",7458:"7fdd9c76",7472:"dcabf658",7570:"b42fb309",7627:"68bae31f",7643:"794b0999",7810:"d2a951bb",8209:"0534dfa8",8222:"6e16fdfc",8401:"c7a85cf3",8446:"5ac35890",8538:"1f98e805",8544:"057d375f",8573:"76edd96c",8581:"5006d101",9048:"7c21903a",9340:"b50810d1",9363:"5f262826",9612:"77249d93",9630:"433dbfc2",9647:"f634b5e6",9979:"032fd063"}[e]+".js",d.miniCssF=e=>{},d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),d.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),t={},c="ppl-docs:",d.l=(e,a,r,f)=>{if(t[e])t[e].push(a);else{var o,b;if(void 0!==r)for(var l=document.getElementsByTagName("script"),n=0;n{o.onerror=o.onload=null,clearTimeout(s);var c=t[e];if(delete t[e],o.parentNode&&o.parentNode.removeChild(o),c&&c.forEach((e=>e(r))),a)return a(r)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=u.bind(null,o.onerror),o.onload=u.bind(null,o.onload),b&&document.head.appendChild(o)}},d.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.p="/ppl-docs/",d.gca=function(e){return e={12193896:"5088",17896441:"8401","3164f9fb":"198",d86380de:"199","91cb3e84":"298",cd2705ba:"1341",c9cd16d1:"1414",reactPlayerTwitch:"2042",ba59bd01:"2129","1a4e3797":"2138","61036be0":"2256","59bfc863":"2501","9e4087bc":"2711",reactPlayerMux:"2723","3679e0b2":"3151","693aa6a8":"3194",ccc49370:"3249",reactPlayerVidyard:"3392",bde67976:"3619","7d528a0b":"3736","0e384e19":"3976",f0258939:"4123",d321bdfd:"4387","1df93b7f":"4583","6875c492":"4813","0be36c6e":"5559",fe8ddc1f:"5634",reactPlayerVimeo:"6173",reactPlayerDailyMotion:"6328",reactPlayerPreview:"6353",reactPlayerKaltura:"6463",reactPlayerFacebook:"6887",a7bd4aaa:"7098","4315fc58":"7376",d8d6d394:"7413",reactPlayerFilePlayer:"7458","814f3328":"7472",reactPlayerMixcloud:"7570",reactPlayerStreamable:"7627",a6aa9e1f:"7643","0f881721":"7810","01a85c17":"8209",reactPlayerYouTube:"8446",c5039d34:"8538","7370b24e":"8573","935f2afb":"8581",a94703ab:"9048",reactPlayerWistia:"9340",b204be58:"9363","46e25335":"9612",c9e852ed:"9630","5e95c892":"9647",reactPlayerSoundCloud:"9979"}[e]||e,d.p+d.u(e)},(()=>{var e={5354:0,1869:0};d.f.j=(a,r)=>{var t=d.o(e,a)?e[a]:void 0;if(0!==t)if(t)r.push(t[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var c=new Promise(((r,c)=>t=e[a]=[r,c]));r.push(t[2]=c);var f=d.p+d.u(a),o=new Error;d.l(f,(r=>{if(d.o(e,a)&&(0!==(t=e[a])&&(e[a]=void 0),t)){var c=r&&("load"===r.type?"missing":r.type),f=r&&r.target&&r.target.src;o.message="Loading chunk "+a+" failed.\n("+c+": "+f+")",o.name="ChunkLoadError",o.type=c,o.request=f,t[1](o)}}),"chunk-"+a,a)}},d.O.j=a=>0===e[a];var a=(a,r)=>{var t,c,f=r[0],o=r[1],b=r[2],l=0;if(f.some((a=>0!==e[a]))){for(t in o)d.o(o,t)&&(d.m[t]=o[t]);if(b)var n=b(d)}for(a&&a(r);l{"use strict";var e,a,r,t,c,o={},f={};function d(e){var a=f[e];if(void 0!==a)return a.exports;var r=f[e]={exports:{}};return o[e].call(r.exports,r,r.exports,d),r.exports}d.m=o,e=[],d.O=(a,r,t,c)=>{if(!r){var o=1/0;for(n=0;n=c)&&Object.keys(d.O).every((e=>d.O[e](r[b])))?r.splice(b--,1):(f=!1,c0&&e[n-1][2]>c;n--)e[n]=e[n-1];e[n]=[r,t,c]},d.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return d.d(a,{a:a}),a},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,d.t=function(e,t){if(1&t&&(e=this(e)),8&t)return e;if("object"==typeof e&&e){if(4&t&&e.__esModule)return e;if(16&t&&"function"==typeof e.then)return e}var c=Object.create(null);d.r(c);var o={};a=a||[null,r({}),r([]),r(r)];for(var f=2&t&&e;"object"==typeof f&&!~a.indexOf(f);f=r(f))Object.getOwnPropertyNames(f).forEach((a=>o[a]=()=>e[a]));return o.default=()=>e,d.d(c,o),c},d.d=(e,a)=>{for(var r in a)d.o(a,r)&&!d.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:a[r]})},d.f={},d.e=e=>Promise.all(Object.keys(d.f).reduce(((a,r)=>(d.f[r](e,a),a)),[])),d.u=e=>"assets/js/"+({198:"3164f9fb",199:"d86380de",298:"91cb3e84",1341:"cd2705ba",1414:"c9cd16d1",2042:"reactPlayerTwitch",2129:"ba59bd01",2138:"1a4e3797",2256:"61036be0",2501:"59bfc863",2711:"9e4087bc",2723:"reactPlayerMux",3151:"3679e0b2",3194:"693aa6a8",3249:"ccc49370",3392:"reactPlayerVidyard",3619:"bde67976",3736:"7d528a0b",3976:"0e384e19",4123:"f0258939",4387:"d321bdfd",4583:"1df93b7f",4813:"6875c492",5088:"12193896",5559:"0be36c6e",5634:"fe8ddc1f",6173:"reactPlayerVimeo",6328:"reactPlayerDailyMotion",6353:"reactPlayerPreview",6463:"reactPlayerKaltura",6887:"reactPlayerFacebook",7098:"a7bd4aaa",7376:"4315fc58",7413:"d8d6d394",7458:"reactPlayerFilePlayer",7472:"814f3328",7570:"reactPlayerMixcloud",7627:"reactPlayerStreamable",7643:"a6aa9e1f",7810:"0f881721",8209:"01a85c17",8401:"17896441",8446:"reactPlayerYouTube",8538:"c5039d34",8573:"7370b24e",8581:"935f2afb",9048:"a94703ab",9340:"reactPlayerWistia",9363:"b204be58",9612:"46e25335",9630:"c9e852ed",9647:"5e95c892",9979:"reactPlayerSoundCloud"}[e]||e)+"."+{198:"dfc70995",199:"5369d551",298:"5acf482c",489:"af907ff3",1341:"af492360",1414:"ce61f061",2042:"34d8c5b0",2129:"86a404f3",2138:"2fd8b44d",2237:"d7bfb77a",2256:"b6b2cd3b",2501:"7fd24e02",2711:"f3f4efee",2723:"45c10ec4",3151:"65ca3eef",3194:"34bf2d89",3249:"d1c96bf9",3392:"fad96167",3619:"c440d31c",3736:"3ed94e94",3976:"0e880dff",4123:"a6e32da8",4132:"e5adff7a",4387:"707b2e80",4583:"ad7b1433",4813:"a35254a3",5088:"5b738686",5559:"44e4e04a",5634:"dcd7f102",5741:"4d685839",6173:"4ae08951",6328:"0f93db46",6353:"7829e5e9",6463:"029ffa45",6887:"e102f767",7098:"bf984ef7",7376:"04756219",7413:"b5a6885d",7458:"7fdd9c76",7472:"dcabf658",7570:"b42fb309",7627:"68bae31f",7643:"794b0999",7810:"d2a951bb",8209:"0534dfa8",8222:"6e16fdfc",8401:"c7a85cf3",8446:"5ac35890",8538:"1f98e805",8544:"057d375f",8573:"76edd96c",8581:"5006d101",9048:"7c21903a",9340:"b50810d1",9363:"5f262826",9612:"77249d93",9630:"433dbfc2",9647:"f634b5e6",9979:"032fd063"}[e]+".js",d.miniCssF=e=>{},d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),d.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),t={},c="ppl-docs:",d.l=(e,a,r,o)=>{if(t[e])t[e].push(a);else{var f,b;if(void 0!==r)for(var l=document.getElementsByTagName("script"),n=0;n{f.onerror=f.onload=null,clearTimeout(s);var c=t[e];if(delete t[e],f.parentNode&&f.parentNode.removeChild(f),c&&c.forEach((e=>e(r))),a)return a(r)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:f}),12e4);f.onerror=u.bind(null,f.onerror),f.onload=u.bind(null,f.onload),b&&document.head.appendChild(f)}},d.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.p="/ppl-docs/",d.gca=function(e){return e={12193896:"5088",17896441:"8401","3164f9fb":"198",d86380de:"199","91cb3e84":"298",cd2705ba:"1341",c9cd16d1:"1414",reactPlayerTwitch:"2042",ba59bd01:"2129","1a4e3797":"2138","61036be0":"2256","59bfc863":"2501","9e4087bc":"2711",reactPlayerMux:"2723","3679e0b2":"3151","693aa6a8":"3194",ccc49370:"3249",reactPlayerVidyard:"3392",bde67976:"3619","7d528a0b":"3736","0e384e19":"3976",f0258939:"4123",d321bdfd:"4387","1df93b7f":"4583","6875c492":"4813","0be36c6e":"5559",fe8ddc1f:"5634",reactPlayerVimeo:"6173",reactPlayerDailyMotion:"6328",reactPlayerPreview:"6353",reactPlayerKaltura:"6463",reactPlayerFacebook:"6887",a7bd4aaa:"7098","4315fc58":"7376",d8d6d394:"7413",reactPlayerFilePlayer:"7458","814f3328":"7472",reactPlayerMixcloud:"7570",reactPlayerStreamable:"7627",a6aa9e1f:"7643","0f881721":"7810","01a85c17":"8209",reactPlayerYouTube:"8446",c5039d34:"8538","7370b24e":"8573","935f2afb":"8581",a94703ab:"9048",reactPlayerWistia:"9340",b204be58:"9363","46e25335":"9612",c9e852ed:"9630","5e95c892":"9647",reactPlayerSoundCloud:"9979"}[e]||e,d.p+d.u(e)},(()=>{var e={5354:0,1869:0};d.f.j=(a,r)=>{var t=d.o(e,a)?e[a]:void 0;if(0!==t)if(t)r.push(t[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var c=new Promise(((r,c)=>t=e[a]=[r,c]));r.push(t[2]=c);var o=d.p+d.u(a),f=new Error;d.l(o,(r=>{if(d.o(e,a)&&(0!==(t=e[a])&&(e[a]=void 0),t)){var c=r&&("load"===r.type?"missing":r.type),o=r&&r.target&&r.target.src;f.message="Loading chunk "+a+" failed.\n("+c+": "+o+")",f.name="ChunkLoadError",f.type=c,f.request=o,t[1](f)}}),"chunk-"+a,a)}},d.O.j=a=>0===e[a];var a=(a,r)=>{var t,c,o=r[0],f=r[1],b=r[2],l=0;if(o.some((a=>0!==e[a]))){for(t in f)d.o(f,t)&&(d.m[t]=f[t]);if(b)var n=b(d)}for(a&&a(r);l Archive | PPL Docs - + diff --git a/blog/first-blog-post/index.html b/blog/first-blog-post/index.html index b41f19e..97874b9 100644 --- a/blog/first-blog-post/index.html +++ b/blog/first-blog-post/index.html @@ -5,7 +5,7 @@ First Blog Post | PPL Docs - + diff --git a/blog/index.html b/blog/index.html index 6895e1d..1fc6189 100644 --- a/blog/index.html +++ b/blog/index.html @@ -5,7 +5,7 @@ Blog | PPL Docs - + diff --git a/blog/tags/first/index.html b/blog/tags/first/index.html index c5dad8c..e8683e5 100644 --- a/blog/tags/first/index.html +++ b/blog/tags/first/index.html @@ -5,7 +5,7 @@ One post tagged with "first" | PPL Docs - + diff --git a/blog/tags/index.html b/blog/tags/index.html index 00c0b38..7cbbc74 100644 --- a/blog/tags/index.html +++ b/blog/tags/index.html @@ -5,7 +5,7 @@ Tags | PPL Docs - + diff --git a/docs/APIs/Fmath/index.html b/docs/APIs/Fmath/index.html index 5d4a3c8..b1d117d 100644 --- a/docs/APIs/Fmath/index.html +++ b/docs/APIs/Fmath/index.html @@ -5,7 +5,7 @@ Fmath | PPL Docs - + diff --git a/docs/APIs/PewPew/index.html b/docs/APIs/PewPew/index.html index 04b486b..0347ed8 100644 --- a/docs/APIs/PewPew/index.html +++ b/docs/APIs/PewPew/index.html @@ -5,7 +5,7 @@ PewPew | PPL Docs - + diff --git a/docs/APIs/standard-libraries/index.html b/docs/APIs/standard-libraries/index.html index 1bd4955..b25fcfc 100644 --- a/docs/APIs/standard-libraries/index.html +++ b/docs/APIs/standard-libraries/index.html @@ -5,7 +5,7 @@ Standard libraries | PPL Docs - + diff --git a/docs/APIs/types/index.html b/docs/APIs/types/index.html index 7c78603..0b90f75 100644 --- a/docs/APIs/types/index.html +++ b/docs/APIs/types/index.html @@ -5,7 +5,7 @@ Types | PPL Docs - + diff --git a/docs/File Information/manifest-files/index.html b/docs/File Information/manifest-files/index.html index 829956f..a8a3d32 100644 --- a/docs/File Information/manifest-files/index.html +++ b/docs/File Information/manifest-files/index.html @@ -5,7 +5,7 @@ Manifest files | PPL Docs - + diff --git a/docs/File Information/mesh-files/index.html b/docs/File Information/mesh-files/index.html index fe18f8d..505adbe 100644 --- a/docs/File Information/mesh-files/index.html +++ b/docs/File Information/mesh-files/index.html @@ -5,7 +5,7 @@ Mesh files | PPL Docs - + diff --git a/docs/File Information/sound-files/index.html b/docs/File Information/sound-files/index.html index 753b66c..840e3b7 100644 --- a/docs/File Information/sound-files/index.html +++ b/docs/File Information/sound-files/index.html @@ -5,7 +5,7 @@ Sound files | PPL Docs - + @@ -35,6 +35,6 @@
  • repeatFrequency
  • waveform ("sine", "triangle", "sawtooth", "square", "tangent", "whistle", "breaker", "whitenoise", "pinknoise", "brownnoise")
  • -
    tip

    Use jfxr for sound creation. A script then transforms the resulting jfxr link (for example this link) into a table consumable by PewPew Live. See this example.

    +
    tip

    Use jfxr for sound creation. A script then transforms the resulting jfxr link (for example this link) into a table consumable by PewPew Live.

    See this example.

    \ No newline at end of file diff --git a/docs/Guides/Lua/advanced/index.html b/docs/Guides/Lua/advanced/index.html index e4a7fe0..f114c9b 100644 --- a/docs/Guides/Lua/advanced/index.html +++ b/docs/Guides/Lua/advanced/index.html @@ -5,15 +5,14 @@ Advanced | PPL Docs - +

    Advanced

    In this tutorial, we will learn how to make more advanced levels, including meshes, custom enemies, and other cool gameplay features!

    So, let's get straight into it.

    -
    -

    Note​

    +

    Note​

    Before we start, it is necessary to know at least some basic Lua and how to make a simple PewPew Live level. If you need a refresher, take a look at the Beginner and Intermediate tutorials.

    Once you're done, you can come back to this tutorial.


    diff --git a/docs/Guides/Lua/beginner/index.html b/docs/Guides/Lua/beginner/index.html index 139de57..24f40e9 100644 --- a/docs/Guides/Lua/beginner/index.html +++ b/docs/Guides/Lua/beginner/index.html @@ -5,39 +5,32 @@ Beginner Lua Tutorial | PPL Docs - +

    Beginner Lua Tutorial

    https://repl.it/languages/lua can be used to try Lua in the browser.

    These examples are more for review, rather than learning! If you see something here that you don't understand, continue to watch Lua tutorials on youtube!

    -

    PRINTING EXAMPLE​

    +

    Printing example​

    print("Hello world!")
    -

    Output: -Hello World!

    -
    print(2+3)
    -

    Output: -5

    -
    print("2+3")
    -

    Output: -2+3

    +

    Output: Hello World!

    +
    print(2 + 3)
    +

    Output: 5

    +
    print("2 + 3")
    +

    Output: 2 + 3

    Anything in quotation marks " " or ' ' is a string. Printing a string will output exactly what you type! Anything not inside of quotation marks are registered as numbers, variables, or mathematics!

    -

    VARIABLES EXAMPLE​

    +

    Variables example​

    my_variable = 5
    print(my_variable)
    -

    Output: -5

    -
    x = 2
    y = 10
    print(x+y)
    -

    Output: -12

    -
    x = 2
    y = 10
    print("x+y")
    -

    Output: -x+y

    +

    Output: 5

    +
    x = 2
    y = 10
    print(x + y)
    +

    Output: 12

    +
    x = 2
    y = 10
    print("x + y")
    +

    Output: x + y

    some_text = "this is cool"
    print(some_text)
    -

    Output: -this is cool

    +

    Output: this is cool

    Variables can be assigned practically any value! You can store them as numbers, strings, and more!

    -

    IF STATEMENT EXAMPLE​

    +

    If statement example​

    x = 6
    if x > 5 then
    print("Greater than 5!")
    end

    Output: Greater than 5!

    @@ -48,7 +41,7 @@

    IF STAT

    Output: True

    Variables can also be assigned boolean values, which are true and false! With "and" statements, both or all arguments need to be true to equal true in total! With "or" statements, only one needs to be true to equal true in total! Both or all need to be false to be false in total!

    -

    FOR LOOP EXAMPLE​

    +

    For loop example​

    for i = 1, 5 do
    print("Hello!")
    end

    The following output is repeated 5 times: Hello!

    @@ -65,19 +58,18 @@

    FOR LOOP EX

    The following output is repeated 25 times: Loop!

    For loops are useful for running the same code multiple times! The first line of the for loop has the syntax for i = Index, End Value, Increments. You set i as your starting value, separate with a comma, set your end value, and you can optionally set your increment as your third value. Don't forget the "do"!

    -

    NESTED FOR LOOP EXAMPLE​

    +

    Nested for loop example​

    for i = 1, 5 do
    print("This is the outer loop!")
    for j = 1, 3 do
    print("This is the inner loop!")
    end
    end

    The following output is repeated 5 times:

    This is the outer loop!
    This is the inner loop!
    This is the inner loop!
    This is the inner loop!
    -
    local swim_laps = 10
    local paddles = 5
    for i = 1, swim_laps do
    print("Lap : "..i)
    for j = 1, paddles do
    print("Paddle : "..j)
    end
    end
    +
    local swim_laps = 10
    local paddles = 5
    for i = 1, swim_laps do
    print("Lap: "..i)
    for j = 1, paddles do
    print("Paddle: "..j)
    end
    end

    Output:

    -
    Lap : 1
    Paddle : 1
    Paddle : 2
    +
    Lap: 1
    Paddle: 1
    Paddle: 2

    ...etc.

    for i = 1, 5 do
    for i = 1, 2 do
    print("This is fine!")
    end
    end
    -

    The following output is repeated 10 times: -This is fine!

    +

    The following output is repeated 10 times: This is fine!

    You are allowed to put for loops inside of other for loops! In if you put a for loop that repeats 3 times inside of a for loop that repeats 5 times, that inner loop runs 15 times total! With for loops, you can use any variable as your index! And with nested for loops, it is good practice to use different variables, like using i and j instead of using i twice.

    -

    WHILE LOOP EXAMPLE​

    +

    While loop example​

    local x = 3
    while x > 0 do
    print(x)
    x = x - 1
    end

    Output:

    3
    2
    1
    @@ -85,13 +77,11 @@

    WHILE LOO

    Output:

    3 4
    2 3
    1 2
    while true do
    print("Hello!")
    end
    -

    The following output is repeated indefinitely: -Hello!

    +

    The following output is repeated indefinitely: Hello!

    A while loop is very similar to a for loop, except you can think of it as an if statement and for loop combined! The while loop runs while the conditions are true. So for a while true do loop, the loop runs forever! Be careful when making a while true do loop!

    -

    BREAK LOOPS EXAMPLE​

    +

    Break loops example​

    while true do
    print("loop!")
    break
    end
    -

    The above loop will only run once. Output: -loop!

    +

    The above loop will only run once. Output: loop!

    x = 0
    while true do
    print("loop!")
    x = x + 1
    if x >=2 then
    break
    end
    end

    The above loop will run 2 times. Output:

    loop!
    loop!
    @@ -99,7 +89,7 @@

    BREAK LO

    Output:

    1
    2
    3

    Using break is very useful! The purpose for break is to stop a loop from running! So using break in a for or while loop will ultimately terminate it!

    -

    FUNCTIONS EXAMPLE​

    +

    Functions example​

    local function myFunction()
    local x = 4
    local y = 2
    print(x + y)
    end

    myFunction()

    Output:

    6
    @@ -110,7 +100,7 @@

    FUNCTIONS

    Output:

    8 27
    1000

    Functions are good for reducing the amount of code you have to write. If you have a piece of code you are going to use over and over with slightly different values, then make that piece of code a function! You can give functions parameters which is the num1 and num2 in myFunction(num1, num2). When you use the function later in your code, don't forget to fill in the parentheses! You can also use return to essentially turn a function into a value.

    -

    TABLES EXAMPLE​

    +

    Tables example​

    local myTable = {1,5,3}

    print(myTable[1])
    print(myTable[2])
    print(myTable[3])

    Output:

    1
    5
    3
    @@ -121,13 +111,13 @@

    TABLES EXAMPL

    Output:

    This person's health is 100
    This person's health is 100
    This person's speed is 20
    This person is awesome. true
    This person's name is John
    This person's name is John
    This person's home is USA
    This person has 250 dollars!

    Tables are very good for storing lots of information. You can even put things inside of tables after the table is made! Done with table.insert(TableName, data) or you add things with table[n] = data. And remember, the table doesn't have to be defined on the same line! The brackets can be on separate lines to make it easier to read!

    -

    FOR I, V IN PAIRS LOOP EXAMPLE​

    +

    for i, v in pairs() loop example​

    local numbers = {3, 4, 99, 202, -3}

    for i, v in pairs(numbers) do
    print(i, v)
    end

    Output:

    1 3
    2 4
    3 99
    4 202
    5 -3
    local names = {"Jack", "Mike", "Melinda", "Stacy"}

    for index, person in pairs(names) do
    print("Person "..index.." is "..person)
    end

    Output:

    Person 1 is Jack
    Person 2 is Mike
    Person 3 is Melinda
    Person 4 is Stacy
    -

    For i, v in pairs loops are a useful kind of for loop! They basically go through a list and use the data stored in the table. The variable i is the index or position of the table where the data is stored. The variable v is the value of the data. Inside of pairs() is the table you want to use: pairs(TableName). The variables don't have to be named "i" and "v", they can be named whatever you want!

    +

    For i, v in pairs loops are a useful kind of for loop! They basically go through a list and use the data stored in the table. The variable i is the index or position of the table where the data is stored. The variable v is the value of the data. Inside of pairs() is the table you want to use: pairs(TableName). The variables don't have to be named "i" and "v", they can be named whatever you want!

    \ No newline at end of file diff --git a/docs/Guides/Lua/intermediate/index.html b/docs/Guides/Lua/intermediate/index.html index f4260a3..4277804 100644 --- a/docs/Guides/Lua/intermediate/index.html +++ b/docs/Guides/Lua/intermediate/index.html @@ -5,28 +5,25 @@ Intermediate | PPL Docs - +

    Intermediate

    If you are here, you made it through the learning process of the Lua language! Keep in mind, this section assumes that you know basic Lua. If you need to freshen up, look back onto the Beginner tutorials!

    Here, we will learn how to make a PewPew Live Custom Level

    -

    GETTING STARTED​

    -
    +

    Getting started​

    So in order to begin making a level, you will need to visit a couple of links.

    https://github.com/jyaif/ppl-utils <--- This link right here will take you to the files you need to make your level! Scroll down to Getting Started and follow the directions!

    https://pewpewlive.github.io/ppl-utils/ <--- This link right here is the PewPew Live API. That means, many important functions and items that are needed to make your level are found on this site!

    Also, make sure you have a text editor to make your code in! If you need help with this, go to the discord and ask about it in #technical-discuss!

    -

    PEWPEW LIVE API - FUNCTIONS​

    -
    +

    PewPew Live API - functions​

    Before we begin in our first steps to making a level, it is crucial to understand the PewPew Live API.

    Let's take a look...

    PewPew Live API Functions

    These are some of the functions that you will be using in PewPew Live! I suggest giving it a lookover, and try to see what it all means! Whenever you use a function in PewPew's library (API), you MUST put pewpew. infront of it!

    So you see, print(String str) would be typed in your code as pewpew.print(String str). The black boxes with green text (things like String, Int, etc) tell you what kind of data the function uses, and what type of function it is! Don't worry too much about the type of function, focus mainly on the data that the functions take in, like Int and String.

    -

    PEWPEW LIVE API - FMATH​

    -
    +

    PewPew Live API - fmath​

    Another main part of the API is the Fmath library!

    PewPew Live API Fmath

    These are more functions in PewPew Live, but slightly different. To use these functions, you MUST put fmath. infront of it!

    @@ -34,34 +31,30 @@

    PEWP

    FixedPoint refers to a specific kind of number in PewPew levels. We just call them fixed point numbers. They are strange, but don't worry, you'll get the hang of them! You really only use fixed point numbers when dealing with location and size. But don't worry, fixed point numbers and normal numbers are the same!

    ...For the most part. See, you write a normal number as n, and fixed point numbers are written as nfx. Fixed point numbers are put in the code by putting fx after your number! So you have numbers like 1, 2, 3. But in fixed point numbers, they would be 1fx, 2fx, 3fx. And so on!

    Another main difference I should note is their decimals! It's a little strange, and I won't go into too much detail, but 2.6fx does not exist. The number 2.5 is written as 2.2048fx. It's strange, I know! And there is a specific and good reason for this! But for now, don't worry too much about decimals. If you need to use a number that isn't a full number, stick with fractions! Like instead of writing 2.2048fx, write 5fx/2fx! See? Much better! Just remember that these fixed point numbers are mostly used for location and size! In later examples we will see exactly how they are used!

    -

    PEWPEW LIVE API - ENUMS​

    -
    +

    PewPew Live API - enums​

    The last main part that I need to cover is the Enums section of the API

    PewPew Live API Enums

    So what is an Enum? Enum stands for Enumerator, and is just a fancy way of talking about a list of items and properties. So here is the list of enemies and the properties of enemies, AKA the Enums, that a person can access and use. Again, you need to put pewpew. infront of these when you use them. A quick example of a reference to a specific enemy would be pewpew.MothershipType.THREE_CORNERS. This piece of code references the pink triangles (motherships) that you see in Eskiv.

    We will go into detail on how to use Enums in specific ways, but for now, that is the general briefing on how to read the PewPew Live API!

    -

    WHERE DOES THE LEVEL GO?​

    -
    +

    Where does this level go?​

    So we are finally about to make our level. Where do we keep it? Well at the very top, you went to the main github page and downloaded the files, you need that!

    You will need to extract the file, and then you will enter it. You will see two files, a folder and an .exe file. That .exe is very important to running your level, keep it in mind!

    -

    +

    Windows explorer window in ppl-utils directory

    You will then see a bunch of files, and a folder. You do NOT need to worry about these files at all! Just the folder! The levels folder is where all custom levels are stored! So that is the folder you enter into next!

    -

    +

    Windows explorer window in ppl-utils/content directory

    As you can see below, there are some levels already here! The developer, JF, put these levels here as examples for level creators to look at while they work! This is where you will create your level.

    -

    +

    Windows explorer window in ppl-utils/content/levels directory

    So all you need to do is make a new folder. I'm going to call my folder TUTORIAL_LEVEL, although you can call your folder whatever you like.

    -

    +

    Windows explorer window in ppl-utils/content/levels directory and creating TUTORIAL_LEVEL directory

    And there you go! You now have the location of your custom level, and all the levels are nice and organized! Time for the fun stuff!

    -

    OPEN YOUR LEVEL​

    -
    +

    Open your level​

    Here we can go into the environment that we need to code! Just to let you know, I use a text editor called Visual Studio Code. You may use something different, and again, if you need help with this text editor stuff, reach out in the discord!

    You can either open up just your level file in your text editor, or you can open the folder that contains all the levels. This is helpful for looking at other levels while you code! So head back to this screen below:

    -

    +

    Windows explorer window in ppl-utils/content directory

    And open the levels folder with your text editor! If you need help with this, feel free to reach out for help! If you're ready, then proceed down below!

    -

    +

    Visual Studio Code window open in ppl-utils/content/levels directory

    As pointed out by the very helpful green arrow, my level is on the left. The folder was initially empty. You need create a new script that will be your main level script. It HAS to be called level.lua. This is how PewPew Live enters into your level and runs it. It might change in the future, but it is good practice to keep consistency. And with the script made, you have an empty canvas. What's next?

    -

    THE START OF A LEVEL​

    -
    +

    The start of a level​

    This next portion will go over how to make your map, and how to spawn the player. Yes! You have to put in the code that spawns the player yourself! But don't worry, it's not too terrible.

    Look back into the PewPew API, there is a function that sets the map size. I'll state it here, it is set_level_size(FixedPoint width, FixedPoint height). This is the code that will make your map! It is very simple, and here is a sample code.

    local level_height = 300fx
    local level_length = 400fx
    pewpew.set_level_size(level_length, level_height)
    @@ -89,6 +82,6 @@

    THE STA

    You should get a screen like this:

    As you can see, the manifest dictated what name my level would show as.

    -

    My tutorial world is at the top of the page, called "Tutorial Level". As it should, as that is what I put in the manifest above. You will need to find your level in the list of levels. And there you go! Just go into your level and give it a whirl!

    +

    My tutorial world is at the top of the page, called "Tutorial Level". As it should, as that is what I put in the manifest above. You will need to find your level in the list of levels. And there you go! Just go into your level and give it a whirl!

    \ No newline at end of file diff --git a/docs/Guides/Other/fps-animation/index.html b/docs/Guides/Other/fps-animation/index.html index 3fda7db..0589426 100644 --- a/docs/Guides/Other/fps-animation/index.html +++ b/docs/Guides/Other/fps-animation/index.html @@ -5,21 +5,21 @@ 60 FPS Animation | PPL Docs - +

    60 FPS Animation

    Tutorial created by WinterNox.

    -

    YouTube tutorial​

    +

    YouTube tutorial​

    -

    Mesh animations​

    +

    Mesh animations​

    Mesh animations in PewPew Live are achieved by iterating through multiple meshes that are slightly different from each other. The meshes are usually stored in a single file and are made procedurally.

    -

    Limitations​

    +

    Limitations​

    If you have some experience with level creation, you should know that PewPew Live runs at 30 ticks per second and that the graphics are interpolated. However, the interpolation only applies to transformations (position, rotation and scale). But, what about mesh animations? Since you can only change something about the entity per tick, mesh animations would be limited to 30 frames per second. Thankfully, the PPL Lua API has just the right function that can be used to achieve 60 FPS mesh animations. This function is:

    pewpew.customizable_entity_set_flipping_meshes(entity_id, file_path, index1, index2)

    When used, the entity will switch between the two specified meshes in a single game tick. But, how does that help us achieve 60 FPS animations? Let's see.

    -

    Setting up​

    +

    Setting up​

    Before we can start making an animation and assigning it to an entity, we need to have a base level that we can work with. Start by creating a new folder in ./content/levels/. In the newly created folder, make sure you have these files:

      @@ -29,9 +29,9 @@

      Setting up

      If you need a basic manifest.json, here is a template you can use.

      {
      "name": "60 FPS",
      "descriptions": ["Amazing"],
      "entry_point": "level.lua",
      "has_score_leaderboard": false
      }
      -

      Getting started​

      +

      Getting started​

      Now that we have a level base, we can start making our mesh and entity. If at any point you face a problem, try following the steps again, or check the final .lua files.

      -

      Making the mesh​

      +

      Making the mesh​

      Open graphics.lua (or your mesh file) and start by writing the following:

      meshes = {}

      Since our meshes are going to be procedurally generated, we won't be making every vertex by hand, instead, we will make Lua do that for us! Essentially when making a procedural mesh, we make a table with our vertexes and segments, that we later add to the meshes table. The vertex and segment tables are going to hold the generated points and segment indexes.

      @@ -46,7 +46,7 @@

      Making the m
      table.remove(computed_segments, #computed_segments)  -- Removal of the last segment as there is no vertex at index i + 3 during the last iteration
      table.remove(computed_segments, #computed_segments) -- No vertex at index i + 2 during the last iteration
      table.remove(computed_segments, #computed_segments) -- A line is already present joining the vertices

      At the end, we add the mesh made up of the generated vertexes and segments.

      table.insert(meshes, {
      vertexes = computed_vertexes,
      segments = computed_segments
      })
      -

      Creating the entity and assigning it the mesh​

      +

      Creating the entity and assigning it the mesh​

      Now, go to level.lua, and start by creating an entity at position (0fx, 0fx). Next, set the entity's mesh to the one we just created.

      local id = pewpew.new_customizable_entity(0fx, 0fx)
      pewpew.customizable_entity_set_mesh(id, "/dynamic/graphics.lua", 0) -- Change the filename if needed

      Note: Setting level size and creating a player is optional.

      @@ -54,7 +54,7 @@

      If you don't, you might have made a mistake somewhere! Check the steps to make the mesh again and check for mistakes.

      -

      Animating the mesh​

      +

      Animating the mesh​

      Let's get into animating our mesh! For this tutorial, we will have the outer hexagon rotating clockwise and the inner hexagon counterclockwise.

      To do this, we need multiple "meshes" that we will set our entity to.

      In your mesh file, change for loop to the following:

      @@ -74,7 +74,7 @@

      Animating

      The result should look something like this:

      As you can see, it is an animation. Though, this animation is running at only 30 frames per second. This is an issue. An animation running at 30 FPS will not look good with the rest of the level as the level might have other content that moves. And as you already know, position transformation is interpolated by PewPew Live. This means that, even though the level runs at 30 ticks per second, the game will interpolate the graphics and display them at 60 FPS or 90 FPS for example. (The game interpolates the graphics as per the refresh rate of the device, which will usually be higher than 30Hz.) To ensure that the difference between the rest of the level and our mesh animation is minimal, we have to make our mesh animation run on at least 60 FPS.

      -

      Making the animation 60 FPS​

      +

      Making the animation 60 FPS​

      Open your mesh file and replace the line

      for angle_offset = 0, math.pi * 2, math.pi * 2 / 60 do  -- 60
      -- Code that generates the meshes
      end

      with

      @@ -97,6 +97,6 @@

      pewpew.customizable_entity_set_flipping_meshes(id, "/dynamic/graphics.lua", mesh_index, mesh_index + 1)

      What does this exactly do? When we set flipping meshes of an entity, that entity goes over the two specified meshes in a single game tick. This means that, in the first game tick, it will have the mesh at index 0 for half a tick and will have the mesh at index 1 for the rest half of a tick. In the next tick, we are resetting the flipping meshes. The variable mesh_index now has a value of 2. The entity now has the mesh at index 2 for half a tick and has the mesh at index 3 for half a tick. Notice that we have gone over 4 meshes in just 2 game ticks (2 meshes per game tick)! The way in which we have used this creates an animation that runs at 60 FPS. Now, if you save the files and run your level, you'll notice that it is a lot smoother than our initial animation. It is exactly twice as smooth. It might look something like this:

      -

      Congratulations! You have successfully made an animation that runs at 60 frames per second. I hope that you were able to understand this fairly well. Now, experiment with your code and make creative animations.

    +

    Congratulations! You have successfully made an animation that runs at 60 frames per second. I hope that you were able to understand this fairly well. Now, experiment with your code and make creative animations.

    \ No newline at end of file diff --git a/docs/intro/index.html b/docs/intro/index.html index 8e00095..0f33ea9 100644 --- a/docs/intro/index.html +++ b/docs/intro/index.html @@ -5,7 +5,7 @@ Introduction | PPL Docs - + diff --git a/docs/other/level-design-principles/index.html b/docs/other/level-design-principles/index.html index 2de1a62..055c8fd 100644 --- a/docs/other/level-design-principles/index.html +++ b/docs/other/level-design-principles/index.html @@ -5,7 +5,7 @@ Design principles | PPL Docs - + diff --git a/docs/other/level-restrictions/index.html b/docs/other/level-restrictions/index.html index 6ac2b28..33dc30a 100644 --- a/docs/other/level-restrictions/index.html +++ b/docs/other/level-restrictions/index.html @@ -5,17 +5,17 @@ Level restrictions | PPL Docs - +

    Level restrictions

    -

    Entity count​

    +

    Entity count​

    At most 1300 entities can exist at any given moment. This includes the player's bullet. If there are already 1300 entities, no more entities will be created. This means that the player won't be able to shoot.

    -

    Duration​

    +

    Duration​

    A game lasts at most 1 hour. If the level has not called stop_game by then, it will be called automatically. The reason for this limitation is that replays then become too large.

    -

    Memory usage​

    +

    Memory usage​

    • The Lua interpreter can't use more than 500KB of memory when running a level. Unless you have a memory leak in your level, this shouldn't be a problem.
    • The Lua interpreter can't use more than 3MB of memory when loading a mesh. You will need to split a mesh into multiple files if you are hitting this limit.
    • diff --git a/docs/other/trivia/index.html b/docs/other/trivia/index.html index 4737f45..8b8a61c 100644 --- a/docs/other/trivia/index.html +++ b/docs/other/trivia/index.html @@ -5,7 +5,7 @@ Trivia | PPL Docs - + diff --git a/index.html b/index.html index 8900a0c..1b0f1e4 100644 --- a/index.html +++ b/index.html @@ -5,7 +5,7 @@ PPL Docs - + diff --git a/search-index.json b/search-index.json index 569f73e..3159ab7 100644 --- a/search-index.json +++ b/search-index.json @@ -1 +1 @@ -[{"documents":[{"i":1,"t":"","u":"/ppl-docs/blog/archive","b":["Blog"]},{"i":2,"t":"First Blog Post","u":"/ppl-docs/blog/first-blog-post","b":["Blog"]},{"i":4,"t":"fmath library","u":"/ppl-docs/docs/APIs/Fmath","b":["Docs","APIs"]},{"i":29,"t":"Types","u":"/ppl-docs/docs/APIs/types","b":["Docs","APIs"]},{"i":40,"t":"Standard libraries","u":"/ppl-docs/docs/APIs/standard-libraries","b":["Docs","APIs"]},{"i":48,"t":"Manifest files","u":"/ppl-docs/docs/File Information/manifest-files","b":["Docs","File Information"]},{"i":52,"t":"Mesh files","u":"/ppl-docs/docs/File Information/mesh-files","b":["Docs","File Information"]},{"i":62,"t":"Advanced","u":"/ppl-docs/docs/Guides/Lua/advanced","b":["Docs","Guides","Lua"]},{"i":66,"t":"Sound files","u":"/ppl-docs/docs/File Information/sound-files","b":["Docs","File Information"]},{"i":68,"t":"Beginner Lua Tutorial","u":"/ppl-docs/docs/Guides/Lua/beginner","b":["Docs","Guides","Lua"]},{"i":90,"t":"Intermediate","u":"/ppl-docs/docs/Guides/Lua/intermediate","b":["Docs","Guides","Lua"]},{"i":106,"t":"60 FPS Animation","u":"/ppl-docs/docs/Guides/Other/fps-animation","b":["Docs","Guides","Other"]},{"i":121,"t":"Introduction","u":"/ppl-docs/docs/intro","b":["Docs"]},{"i":131,"t":"Design principles","u":"/ppl-docs/docs/other/level-design-principles","b":["Docs","other"]},{"i":141,"t":"Level restrictions","u":"/ppl-docs/docs/other/level-restrictions","b":["Docs","other"]},{"i":148,"t":"Trivia","u":"/ppl-docs/docs/other/trivia","b":["Docs","other"]},{"i":156,"t":"pewpew library","u":"/ppl-docs/docs/APIs/PewPew","b":["Docs","APIs"]}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/1",[]],["t/2",[0,1.932,1,1.932,2,1.932]],["t/4",[3,2.356,4,1.553]],["t/29",[5,3.02]],["t/40",[4,1.553,6,2.356]],["t/48",[7,2.356,8,1.553]],["t/52",[8,1.553,9,2.356]],["t/62",[10,3.02]],["t/66",[8,1.553,11,2.356]],["t/68",[12,1.932,13,1.932,14,1.932]],["t/90",[15,3.02]],["t/106",[16,1.932,17,1.932,18,1.932]],["t/121",[19,3.02]],["t/131",[20,2.356,21,2.356]],["t/141",[22,2.356,23,2.356]],["t/148",[24,3.02]],["t/156",[4,1.553,25,2.356]]],"invertedIndex":[["60",{"_index":16,"t":{"106":{"position":[[0,2]]}}}],["advanc",{"_index":10,"t":{"62":{"position":[[0,8]]}}}],["anim",{"_index":18,"t":{"106":{"position":[[7,9]]}}}],["beginn",{"_index":12,"t":{"68":{"position":[[0,8]]}}}],["blog",{"_index":1,"t":{"2":{"position":[[6,4]]}}}],["design",{"_index":20,"t":{"131":{"position":[[0,6]]}}}],["file",{"_index":8,"t":{"48":{"position":[[9,5]]},"52":{"position":[[5,5]]},"66":{"position":[[6,5]]}}}],["first",{"_index":0,"t":{"2":{"position":[[0,5]]}}}],["fmath",{"_index":3,"t":{"4":{"position":[[0,5]]}}}],["fp",{"_index":17,"t":{"106":{"position":[[3,3]]}}}],["intermedi",{"_index":15,"t":{"90":{"position":[[0,12]]}}}],["introduct",{"_index":19,"t":{"121":{"position":[[0,12]]}}}],["level",{"_index":22,"t":{"141":{"position":[[0,5]]}}}],["librari",{"_index":4,"t":{"4":{"position":[[6,7]]},"40":{"position":[[9,9]]},"156":{"position":[[7,7]]}}}],["lua",{"_index":13,"t":{"68":{"position":[[9,3]]}}}],["manifest",{"_index":7,"t":{"48":{"position":[[0,8]]}}}],["mesh",{"_index":9,"t":{"52":{"position":[[0,4]]}}}],["pewpew",{"_index":25,"t":{"156":{"position":[[0,6]]}}}],["post",{"_index":2,"t":{"2":{"position":[[11,4]]}}}],["principl",{"_index":21,"t":{"131":{"position":[[7,10]]}}}],["restrict",{"_index":23,"t":{"141":{"position":[[6,12]]}}}],["sound",{"_index":11,"t":{"66":{"position":[[0,5]]}}}],["standard",{"_index":6,"t":{"40":{"position":[[0,8]]}}}],["trivia",{"_index":24,"t":{"148":{"position":[[0,6]]}}}],["tutori",{"_index":14,"t":{"68":{"position":[[13,8]]}}}],["type",{"_index":5,"t":{"29":{"position":[[0,5]]}}}]],"pipeline":["stemmer"]}},{"documents":[{"i":6,"t":"Functions","u":"/ppl-docs/docs/APIs/Fmath","h":"#functions","p":4},{"i":7,"t":"max_fixedpoint()","u":"/ppl-docs/docs/APIs/Fmath","h":"#max_fixedpoint","p":4},{"i":9,"t":"random_fixedpoint()","u":"/ppl-docs/docs/APIs/Fmath","h":"#random_fixedpoint","p":4},{"i":11,"t":"random_int()","u":"/ppl-docs/docs/APIs/Fmath","h":"#random_int","p":4},{"i":13,"t":"sqrt()","u":"/ppl-docs/docs/APIs/Fmath","h":"#sqrt","p":4},{"i":15,"t":"from_fraction()","u":"/ppl-docs/docs/APIs/Fmath","h":"#from_fraction","p":4},{"i":17,"t":"to_int()","u":"/ppl-docs/docs/APIs/Fmath","h":"#to_int","p":4},{"i":19,"t":"abs_fixedpoint()","u":"/ppl-docs/docs/APIs/Fmath","h":"#abs_fixedpoint","p":4},{"i":21,"t":"to_fixedpoint()","u":"/ppl-docs/docs/APIs/Fmath","h":"#to_fixedpoint","p":4},{"i":23,"t":"sincos()","u":"/ppl-docs/docs/APIs/Fmath","h":"#sincos","p":4},{"i":25,"t":"atan2()","u":"/ppl-docs/docs/APIs/Fmath","h":"#atan2","p":4},{"i":27,"t":"tau()","u":"/ppl-docs/docs/APIs/Fmath","h":"#tau","p":4},{"i":30,"t":"int","u":"/ppl-docs/docs/APIs/types","h":"#int","p":29},{"i":32,"t":"FixedPoint","u":"/ppl-docs/docs/APIs/types","h":"#fixedpoint","p":29},{"i":34,"t":"EntityId","u":"/ppl-docs/docs/APIs/types","h":"#entityid","p":29},{"i":36,"t":"String","u":"/ppl-docs/docs/APIs/types","h":"#string","p":29},{"i":38,"t":"float","u":"/ppl-docs/docs/APIs/types","h":"#float","p":29},{"i":42,"t":"String library","u":"/ppl-docs/docs/APIs/standard-libraries","h":"#string-library","p":40},{"i":44,"t":"Table library","u":"/ppl-docs/docs/APIs/standard-libraries","h":"#table-library","p":40},{"i":46,"t":"Math library","u":"/ppl-docs/docs/APIs/standard-libraries","h":"#math-library","p":40},{"i":50,"t":"Manifest fields","u":"/ppl-docs/docs/File Information/manifest-files","h":"#manifest-fields","p":48},{"i":54,"t":"Vertexes","u":"/ppl-docs/docs/File Information/mesh-files","h":"#vertexes","p":52},{"i":56,"t":"Segments chains","u":"/ppl-docs/docs/File Information/mesh-files","h":"#segments-chains","p":52},{"i":58,"t":"Colors","u":"/ppl-docs/docs/File Information/mesh-files","h":"#colors","p":52},{"i":60,"t":"Procedural rendering","u":"/ppl-docs/docs/File Information/mesh-files","h":"#procedural-rendering","p":52},{"i":64,"t":"Note","u":"/ppl-docs/docs/Guides/Lua/advanced","h":"#note","p":62},{"i":70,"t":"PRINTING EXAMPLE","u":"/ppl-docs/docs/Guides/Lua/beginner","h":"#printing-example","p":68},{"i":72,"t":"VARIABLES EXAMPLE","u":"/ppl-docs/docs/Guides/Lua/beginner","h":"#variables-example","p":68},{"i":74,"t":"IF STATEMENT EXAMPLE","u":"/ppl-docs/docs/Guides/Lua/beginner","h":"#if-statement-example","p":68},{"i":76,"t":"FOR LOOP EXAMPLE","u":"/ppl-docs/docs/Guides/Lua/beginner","h":"#for-loop-example","p":68},{"i":78,"t":"NESTED FOR LOOP EXAMPLE","u":"/ppl-docs/docs/Guides/Lua/beginner","h":"#nested-for-loop-example","p":68},{"i":80,"t":"WHILE LOOP EXAMPLE","u":"/ppl-docs/docs/Guides/Lua/beginner","h":"#while-loop-example","p":68},{"i":82,"t":"BREAK LOOPS EXAMPLE","u":"/ppl-docs/docs/Guides/Lua/beginner","h":"#break-loops-example","p":68},{"i":84,"t":"FUNCTIONS EXAMPLE","u":"/ppl-docs/docs/Guides/Lua/beginner","h":"#functions-example","p":68},{"i":86,"t":"TABLES EXAMPLE","u":"/ppl-docs/docs/Guides/Lua/beginner","h":"#tables-example","p":68},{"i":88,"t":"FOR I, V IN PAIRS LOOP EXAMPLE","u":"/ppl-docs/docs/Guides/Lua/beginner","h":"#for-i-v-in-pairs-loop-example","p":68},{"i":92,"t":"GETTING STARTED","u":"/ppl-docs/docs/Guides/Lua/intermediate","h":"#getting-started","p":90},{"i":94,"t":"PEWPEW LIVE API - FUNCTIONS","u":"/ppl-docs/docs/Guides/Lua/intermediate","h":"#pewpew-live-api---functions","p":90},{"i":96,"t":"PEWPEW LIVE API - FMATH","u":"/ppl-docs/docs/Guides/Lua/intermediate","h":"#pewpew-live-api---fmath","p":90},{"i":98,"t":"PEWPEW LIVE API - ENUMS","u":"/ppl-docs/docs/Guides/Lua/intermediate","h":"#pewpew-live-api---enums","p":90},{"i":100,"t":"WHERE DOES THE LEVEL GO?","u":"/ppl-docs/docs/Guides/Lua/intermediate","h":"#where-does-the-level-go","p":90},{"i":102,"t":"OPEN YOUR LEVEL","u":"/ppl-docs/docs/Guides/Lua/intermediate","h":"#open-your-level","p":90},{"i":104,"t":"THE START OF A LEVEL","u":"/ppl-docs/docs/Guides/Lua/intermediate","h":"#the-start-of-a-level","p":90},{"i":108,"t":"YouTube tutorial","u":"/ppl-docs/docs/Guides/Other/fps-animation","h":"#youtube-tutorial","p":106},{"i":109,"t":"Mesh animations","u":"/ppl-docs/docs/Guides/Other/fps-animation","h":"#mesh-animations","p":106},{"i":111,"t":"Limitations","u":"/ppl-docs/docs/Guides/Other/fps-animation","h":"#limitations","p":106},{"i":113,"t":"Setting up","u":"/ppl-docs/docs/Guides/Other/fps-animation","h":"#setting-up","p":106},{"i":115,"t":"Getting started","u":"/ppl-docs/docs/Guides/Other/fps-animation","h":"#getting-started","p":106},{"i":117,"t":"Animating the mesh","u":"/ppl-docs/docs/Guides/Other/fps-animation","h":"#animating-the-mesh","p":106},{"i":119,"t":"Making the animation 60 FPS","u":"/ppl-docs/docs/Guides/Other/fps-animation","h":"#making-the-animation-60-fps","p":106},{"i":123,"t":"Level structure","u":"/ppl-docs/docs/intro","h":"#level-structure","p":121},{"i":125,"t":"Uploading your level","u":"/ppl-docs/docs/intro","h":"#uploading-your-level","p":121},{"i":127,"t":"Recommended Lua Style guide","u":"/ppl-docs/docs/intro","h":"#recommended-lua-style-guide","p":121},{"i":129,"t":"Helpful tools and utilities","u":"/ppl-docs/docs/intro","h":"#helpful-tools-and-utilities","p":121},{"i":132,"t":"General guidelines","u":"/ppl-docs/docs/other/level-design-principles","h":"#general-guidelines","p":131},{"i":134,"t":"Gameplay advice","u":"/ppl-docs/docs/other/level-design-principles","h":"#gameplay-advice","p":131},{"i":135,"t":"Users will try to camp in the corners","u":"/ppl-docs/docs/other/level-design-principles","h":"#users-will-try-to-camp-in-the-corners","p":131},{"i":137,"t":"Fair randomness","u":"/ppl-docs/docs/other/level-design-principles","h":"#fair-randomness","p":131},{"i":139,"t":"Be mindful of farming","u":"/ppl-docs/docs/other/level-design-principles","h":"#be-mindful-of-farming","p":131},{"i":142,"t":"Entity count","u":"/ppl-docs/docs/other/level-restrictions","h":"#entity-count","p":141},{"i":144,"t":"Duration","u":"/ppl-docs/docs/other/level-restrictions","h":"#duration","p":141},{"i":146,"t":"Memory usage","u":"/ppl-docs/docs/other/level-restrictions","h":"#memory-usage","p":141},{"i":150,"t":"The Lua interpreter","u":"/ppl-docs/docs/other/trivia","h":"#the-lua-interpreter","p":148},{"i":152,"t":"Version number","u":"/ppl-docs/docs/other/trivia","h":"#version-number","p":148},{"i":154,"t":"Ports","u":"/ppl-docs/docs/other/trivia","h":"#ports","p":148},{"i":158,"t":"Enums","u":"/ppl-docs/docs/APIs/PewPew","h":"#enums","p":156},{"i":159,"t":"EntityType","u":"/ppl-docs/docs/APIs/PewPew","h":"#entitytype","p":156},{"i":161,"t":"MothershipType","u":"/ppl-docs/docs/APIs/PewPew","h":"#mothershiptype","p":156},{"i":163,"t":"CannonType","u":"/ppl-docs/docs/APIs/PewPew","h":"#cannontype","p":156},{"i":165,"t":"CannonFrequency","u":"/ppl-docs/docs/APIs/PewPew","h":"#cannonfrequency","p":156},{"i":167,"t":"BombType","u":"/ppl-docs/docs/APIs/PewPew","h":"#bombtype","p":156},{"i":169,"t":"BonusType","u":"/ppl-docs/docs/APIs/PewPew","h":"#bonustype","p":156},{"i":171,"t":"WeaponType","u":"/ppl-docs/docs/APIs/PewPew","h":"#weapontype","p":156},{"i":173,"t":"AsteroidSize","u":"/ppl-docs/docs/APIs/PewPew","h":"#asteroidsize","p":156},{"i":175,"t":"Functions","u":"/ppl-docs/docs/APIs/PewPew","h":"#functions","p":156},{"i":176,"t":"print()","u":"/ppl-docs/docs/APIs/PewPew","h":"#print","p":156},{"i":178,"t":"print_debug_info()","u":"/ppl-docs/docs/APIs/PewPew","h":"#print_debug_info","p":156},{"i":180,"t":"set_level_size()","u":"/ppl-docs/docs/APIs/PewPew","h":"#set_level_size","p":156},{"i":182,"t":"add_wall()","u":"/ppl-docs/docs/APIs/PewPew","h":"#add_wall","p":156},{"i":184,"t":"remove_wall()","u":"/ppl-docs/docs/APIs/PewPew","h":"#remove_wall","p":156},{"i":186,"t":"add_update_callback()","u":"/ppl-docs/docs/APIs/PewPew","h":"#add_update_callback","p":156},{"i":188,"t":"get_number_of_players()","u":"/ppl-docs/docs/APIs/PewPew","h":"#get_number_of_players","p":156},{"i":190,"t":"increase_score_of_player()","u":"/ppl-docs/docs/APIs/PewPew","h":"#increase_score_of_player","p":156},{"i":192,"t":"increase_score_streak_of_player()","u":"/ppl-docs/docs/APIs/PewPew","h":"#increase_score_streak_of_player","p":156},{"i":194,"t":"get_score_streak_level()","u":"/ppl-docs/docs/APIs/PewPew","h":"#get_score_streak_level","p":156},{"i":196,"t":"stop_game()","u":"/ppl-docs/docs/APIs/PewPew","h":"#stop_game","p":156},{"i":198,"t":"get_player_inputs()","u":"/ppl-docs/docs/APIs/PewPew","h":"#get_player_inputs","p":156},{"i":200,"t":"get_score_of_player()","u":"/ppl-docs/docs/APIs/PewPew","h":"#get_score_of_player","p":156},{"i":202,"t":"configure_player()","u":"/ppl-docs/docs/APIs/PewPew","h":"#configure_player","p":156},{"i":204,"t":"configure_player_hud()","u":"/ppl-docs/docs/APIs/PewPew","h":"#configure_player_hud","p":156},{"i":206,"t":"get_player_configuration()","u":"/ppl-docs/docs/APIs/PewPew","h":"#get_player_configuration","p":156},{"i":208,"t":"configure_player_ship_weapon()","u":"/ppl-docs/docs/APIs/PewPew","h":"#configure_player_ship_weapon","p":156},{"i":210,"t":"add_damage_to_player_ship()","u":"/ppl-docs/docs/APIs/PewPew","h":"#add_damage_to_player_ship","p":156},{"i":212,"t":"add_arrow_to_player_ship()","u":"/ppl-docs/docs/APIs/PewPew","h":"#add_arrow_to_player_ship","p":156},{"i":214,"t":"remove_arrow_from_player_ship()","u":"/ppl-docs/docs/APIs/PewPew","h":"#remove_arrow_from_player_ship","p":156},{"i":216,"t":"make_player_ship_transparent()","u":"/ppl-docs/docs/APIs/PewPew","h":"#make_player_ship_transparent","p":156},{"i":218,"t":"set_player_ship_speed()","u":"/ppl-docs/docs/APIs/PewPew","h":"#set_player_ship_speed","p":156},{"i":220,"t":"get_all_entities()","u":"/ppl-docs/docs/APIs/PewPew","h":"#get_all_entities","p":156},{"i":222,"t":"get_entities_colliding_with_disk()","u":"/ppl-docs/docs/APIs/PewPew","h":"#get_entities_colliding_with_disk","p":156},{"i":224,"t":"get_entity_count()","u":"/ppl-docs/docs/APIs/PewPew","h":"#get_entity_count","p":156},{"i":226,"t":"get_entity_type()","u":"/ppl-docs/docs/APIs/PewPew","h":"#get_entity_type","p":156},{"i":228,"t":"play_ambient_sound()","u":"/ppl-docs/docs/APIs/PewPew","h":"#play_ambient_sound","p":156},{"i":230,"t":"play_sound()","u":"/ppl-docs/docs/APIs/PewPew","h":"#play_sound","p":156},{"i":232,"t":"create_explosion()","u":"/ppl-docs/docs/APIs/PewPew","h":"#create_explosion","p":156},{"i":234,"t":"new_asteroid()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_asteroid","p":156},{"i":236,"t":"new_asteroid_with_size()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_asteroid_with_size","p":156},{"i":238,"t":"new_baf()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_baf","p":156},{"i":240,"t":"new_baf_red()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_baf_red","p":156},{"i":242,"t":"new_baf_blue()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_baf_blue","p":156},{"i":244,"t":"new_bomb()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_bomb","p":156},{"i":246,"t":"new_bonus()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_bonus","p":156},{"i":248,"t":"new_crowder()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_crowder","p":156},{"i":250,"t":"new_floating_message()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_floating_message","p":156},{"i":252,"t":"new_customizable_entity()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_customizable_entity","p":156},{"i":254,"t":"new_inertiac()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_inertiac","p":156},{"i":256,"t":"new_mothership()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_mothership","p":156},{"i":258,"t":"new_pointonium()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_pointonium","p":156},{"i":260,"t":"new_player_ship()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_player_ship","p":156},{"i":262,"t":"new_player_bullet()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_player_bullet","p":156},{"i":264,"t":"new_rolling_cube()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_rolling_cube","p":156},{"i":266,"t":"new_rolling_sphere()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_rolling_sphere","p":156},{"i":268,"t":"new_wary()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_wary","p":156},{"i":270,"t":"new_ufo()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_ufo","p":156},{"i":272,"t":"rolling_cube_set_enable_collisions_with_walls()","u":"/ppl-docs/docs/APIs/PewPew","h":"#rolling_cube_set_enable_collisions_with_walls","p":156},{"i":274,"t":"ufo_set_enable_collisions_with_walls()","u":"/ppl-docs/docs/APIs/PewPew","h":"#ufo_set_enable_collisions_with_walls","p":156},{"i":276,"t":"entity_get_position()","u":"/ppl-docs/docs/APIs/PewPew","h":"#entity_get_position","p":156},{"i":278,"t":"entity_get_is_alive()","u":"/ppl-docs/docs/APIs/PewPew","h":"#entity_get_is_alive","p":156},{"i":280,"t":"entity_get_is_started_to_be_destroyed()","u":"/ppl-docs/docs/APIs/PewPew","h":"#entity_get_is_started_to_be_destroyed","p":156},{"i":282,"t":"entity_set_position()","u":"/ppl-docs/docs/APIs/PewPew","h":"#entity_set_position","p":156},{"i":284,"t":"entity_set_radius()","u":"/ppl-docs/docs/APIs/PewPew","h":"#entity_set_radius","p":156},{"i":286,"t":"entity_set_update_callback()","u":"/ppl-docs/docs/APIs/PewPew","h":"#entity_set_update_callback","p":156},{"i":288,"t":"entity_destroy()","u":"/ppl-docs/docs/APIs/PewPew","h":"#entity_destroy","p":156},{"i":290,"t":"entity_react_to_weapon()","u":"/ppl-docs/docs/APIs/PewPew","h":"#entity_react_to_weapon","p":156},{"i":292,"t":"customizable_entity_set_position_interpolation()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_set_position_interpolation","p":156},{"i":294,"t":"customizable_entity_set_mesh()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_set_mesh","p":156},{"i":296,"t":"customizable_entity_set_flipping_meshes()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_set_flipping_meshes","p":156},{"i":298,"t":"customizable_entity_set_mesh_color()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_set_mesh_color","p":156},{"i":300,"t":"customizable_entity_set_string()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_set_string","p":156},{"i":302,"t":"customizable_entity_set_mesh_xyz()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_set_mesh_xyz","p":156},{"i":304,"t":"customizable_entity_set_mesh_z()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_set_mesh_z","p":156},{"i":306,"t":"customizable_entity_set_mesh_scale()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_set_mesh_scale","p":156},{"i":308,"t":"customizable_entity_set_mesh_xyz_scale()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_set_mesh_xyz_scale","p":156},{"i":310,"t":"customizable_entity_set_mesh_angle()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_set_mesh_angle","p":156},{"i":312,"t":"customizable_entity_skip_mesh_attributes_interpolation()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_skip_mesh_attributes_interpolation","p":156},{"i":314,"t":"customizable_entity_configure_music_response()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_configure_music_response","p":156},{"i":316,"t":"customizable_entity_add_rotation_to_mesh()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_add_rotation_to_mesh","p":156},{"i":318,"t":"customizable_entity_set_visibility_radius()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_set_visibility_radius","p":156},{"i":320,"t":"customizable_entity_configure_wall_collision()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_configure_wall_collision","p":156},{"i":322,"t":"customizable_entity_set_player_collision_callback()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_set_player_collision_callback","p":156},{"i":324,"t":"customizable_entity_set_weapon_collision_callback()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_set_weapon_collision_callback","p":156},{"i":326,"t":"customizable_entity_start_spawning()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_start_spawning","p":156},{"i":328,"t":"customizable_entity_start_exploding()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_start_exploding","p":156}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/6",[0,3.982]],["t/7",[1,5.222]],["t/9",[2,5.222]],["t/11",[3,5.222]],["t/13",[4,5.222]],["t/15",[5,5.222]],["t/17",[6,5.222]],["t/19",[7,5.222]],["t/21",[8,5.222]],["t/23",[9,5.222]],["t/25",[10,5.222]],["t/27",[11,5.222]],["t/30",[12,5.222]],["t/32",[13,5.222]],["t/34",[14,5.222]],["t/36",[15,4.646]],["t/38",[16,5.222]],["t/42",[15,3.486,17,3.201]],["t/44",[17,3.201,18,3.486]],["t/46",[17,3.201,19,3.918]],["t/50",[20,3.918,21,3.918]],["t/54",[22,5.222]],["t/56",[23,3.918,24,3.918]],["t/58",[25,5.222]],["t/60",[26,3.918,27,3.918]],["t/64",[28,5.222]],["t/70",[29,3.486,30,2.27]],["t/72",[30,2.27,31,3.918]],["t/74",[30,2.27,32,3.918]],["t/76",[30,2.27,33,2.818]],["t/78",[30,1.816,33,2.255,34,3.136]],["t/80",[30,2.27,33,2.818]],["t/82",[30,1.816,33,2.255,35,3.136]],["t/84",[0,2.988,30,2.27]],["t/86",[18,3.486,30,2.27]],["t/88",[30,1.514,33,1.879,36,2.613,37,2.613]],["t/92",[38,3.486,39,3.201]],["t/94",[0,1.993,40,2.135,41,2.135,42,2.135]],["t/96",[40,2.135,41,2.135,42,2.135,43,2.613]],["t/98",[40,2.135,41,2.135,42,2.135,44,2.325]],["t/100",[45,2.818,46,3.918]],["t/102",[45,2.818,47,3.918]],["t/104",[39,3.201,45,2.818]],["t/108",[48,3.918,49,3.918]],["t/109",[50,3.486,51,3.201]],["t/111",[52,5.222]],["t/113",[53,3.918,54,3.918]],["t/115",[38,3.486,39,3.201]],["t/117",[50,3.486,51,3.201]],["t/119",[51,2.135,55,2.613,56,2.613,57,2.613]],["t/123",[45,2.818,58,3.918]],["t/125",[45,2.818,59,3.918]],["t/127",[60,2.613,61,2.325,62,2.613,63,2.613]],["t/129",[64,3.136,65,3.136,66,3.136]],["t/132",[67,3.918,68,3.918]],["t/134",[69,3.918,70,3.918]],["t/135",[71,2.613,72,2.613,73,2.613,74,2.613]],["t/137",[75,3.918,76,3.918]],["t/139",[77,3.918,78,3.918]],["t/142",[79,3.918,80,3.918]],["t/144",[81,5.222]],["t/146",[82,3.918,83,3.918]],["t/150",[61,3.486,84,3.918]],["t/152",[85,3.918,86,3.918]],["t/154",[87,5.222]],["t/158",[44,4.646]],["t/159",[88,5.222]],["t/161",[89,5.222]],["t/163",[90,5.222]],["t/165",[91,5.222]],["t/167",[92,5.222]],["t/169",[93,5.222]],["t/171",[94,5.222]],["t/173",[95,5.222]],["t/175",[0,3.982]],["t/176",[29,4.646]],["t/178",[96,5.222]],["t/180",[97,5.222]],["t/182",[98,5.222]],["t/184",[99,5.222]],["t/186",[100,5.222]],["t/188",[101,5.222]],["t/190",[102,5.222]],["t/192",[103,5.222]],["t/194",[104,5.222]],["t/196",[105,5.222]],["t/198",[106,5.222]],["t/200",[107,5.222]],["t/202",[108,5.222]],["t/204",[109,5.222]],["t/206",[110,5.222]],["t/208",[111,5.222]],["t/210",[112,5.222]],["t/212",[113,5.222]],["t/214",[114,5.222]],["t/216",[115,5.222]],["t/218",[116,5.222]],["t/220",[117,5.222]],["t/222",[118,5.222]],["t/224",[119,5.222]],["t/226",[120,5.222]],["t/228",[121,5.222]],["t/230",[122,5.222]],["t/232",[123,5.222]],["t/234",[124,5.222]],["t/236",[125,5.222]],["t/238",[126,5.222]],["t/240",[127,5.222]],["t/242",[128,5.222]],["t/244",[129,5.222]],["t/246",[130,5.222]],["t/248",[131,5.222]],["t/250",[132,5.222]],["t/252",[133,5.222]],["t/254",[134,5.222]],["t/256",[135,5.222]],["t/258",[136,5.222]],["t/260",[137,5.222]],["t/262",[138,5.222]],["t/264",[139,5.222]],["t/266",[140,5.222]],["t/268",[141,5.222]],["t/270",[142,5.222]],["t/272",[143,5.222]],["t/274",[144,5.222]],["t/276",[145,5.222]],["t/278",[146,5.222]],["t/280",[147,5.222]],["t/282",[148,5.222]],["t/284",[149,5.222]],["t/286",[150,5.222]],["t/288",[151,5.222]],["t/290",[152,5.222]],["t/292",[153,5.222]],["t/294",[154,5.222]],["t/296",[155,5.222]],["t/298",[156,5.222]],["t/300",[157,5.222]],["t/302",[158,5.222]],["t/304",[159,5.222]],["t/306",[160,5.222]],["t/308",[161,5.222]],["t/310",[162,5.222]],["t/312",[163,5.222]],["t/314",[164,5.222]],["t/316",[165,5.222]],["t/318",[166,5.222]],["t/320",[167,5.222]],["t/322",[168,5.222]],["t/324",[169,5.222]],["t/326",[170,5.222]],["t/328",[171,5.222]]],"invertedIndex":[["60",{"_index":56,"t":{"119":{"position":[[21,2]]}}}],["abs_fixedpoint",{"_index":7,"t":{"19":{"position":[[0,16]]}}}],["add_arrow_to_player_ship",{"_index":113,"t":{"212":{"position":[[0,26]]}}}],["add_damage_to_player_ship",{"_index":112,"t":{"210":{"position":[[0,27]]}}}],["add_update_callback",{"_index":100,"t":{"186":{"position":[[0,21]]}}}],["add_wal",{"_index":98,"t":{"182":{"position":[[0,10]]}}}],["advic",{"_index":70,"t":{"134":{"position":[[9,6]]}}}],["anim",{"_index":51,"t":{"109":{"position":[[5,10]]},"117":{"position":[[0,9]]},"119":{"position":[[11,9]]}}}],["api",{"_index":42,"t":{"94":{"position":[[12,3]]},"96":{"position":[[12,3]]},"98":{"position":[[12,3]]}}}],["asteroids",{"_index":95,"t":{"173":{"position":[[0,12]]}}}],["atan2",{"_index":10,"t":{"25":{"position":[[0,7]]}}}],["bombtyp",{"_index":92,"t":{"167":{"position":[[0,8]]}}}],["bonustyp",{"_index":93,"t":{"169":{"position":[[0,9]]}}}],["break",{"_index":35,"t":{"82":{"position":[[0,5]]}}}],["camp",{"_index":73,"t":{"135":{"position":[[18,4]]}}}],["cannonfrequ",{"_index":91,"t":{"165":{"position":[[0,15]]}}}],["cannontyp",{"_index":90,"t":{"163":{"position":[[0,10]]}}}],["chain",{"_index":24,"t":{"56":{"position":[[9,6]]}}}],["color",{"_index":25,"t":{"58":{"position":[[0,6]]}}}],["configure_play",{"_index":108,"t":{"202":{"position":[[0,18]]}}}],["configure_player_hud",{"_index":109,"t":{"204":{"position":[[0,22]]}}}],["configure_player_ship_weapon",{"_index":111,"t":{"208":{"position":[[0,30]]}}}],["corner",{"_index":74,"t":{"135":{"position":[[30,7]]}}}],["count",{"_index":80,"t":{"142":{"position":[[7,5]]}}}],["create_explos",{"_index":123,"t":{"232":{"position":[[0,18]]}}}],["customizable_entity_add_rotation_to_mesh",{"_index":165,"t":{"316":{"position":[[0,42]]}}}],["customizable_entity_configure_music_respons",{"_index":164,"t":{"314":{"position":[[0,46]]}}}],["customizable_entity_configure_wall_collis",{"_index":167,"t":{"320":{"position":[[0,46]]}}}],["customizable_entity_set_flipping_mesh",{"_index":155,"t":{"296":{"position":[[0,41]]}}}],["customizable_entity_set_mesh",{"_index":154,"t":{"294":{"position":[[0,30]]}}}],["customizable_entity_set_mesh_angl",{"_index":162,"t":{"310":{"position":[[0,36]]}}}],["customizable_entity_set_mesh_color",{"_index":156,"t":{"298":{"position":[[0,36]]}}}],["customizable_entity_set_mesh_scal",{"_index":160,"t":{"306":{"position":[[0,36]]}}}],["customizable_entity_set_mesh_xyz",{"_index":158,"t":{"302":{"position":[[0,34]]}}}],["customizable_entity_set_mesh_xyz_scal",{"_index":161,"t":{"308":{"position":[[0,40]]}}}],["customizable_entity_set_mesh_z",{"_index":159,"t":{"304":{"position":[[0,32]]}}}],["customizable_entity_set_player_collision_callback",{"_index":168,"t":{"322":{"position":[[0,51]]}}}],["customizable_entity_set_position_interpol",{"_index":153,"t":{"292":{"position":[[0,48]]}}}],["customizable_entity_set_str",{"_index":157,"t":{"300":{"position":[[0,32]]}}}],["customizable_entity_set_visibility_radiu",{"_index":166,"t":{"318":{"position":[[0,43]]}}}],["customizable_entity_set_weapon_collision_callback",{"_index":169,"t":{"324":{"position":[[0,51]]}}}],["customizable_entity_skip_mesh_attributes_interpol",{"_index":163,"t":{"312":{"position":[[0,56]]}}}],["customizable_entity_start_explod",{"_index":171,"t":{"328":{"position":[[0,37]]}}}],["customizable_entity_start_spawn",{"_index":170,"t":{"326":{"position":[[0,36]]}}}],["durat",{"_index":81,"t":{"144":{"position":[[0,8]]}}}],["entiti",{"_index":79,"t":{"142":{"position":[[0,6]]}}}],["entity_destroy",{"_index":151,"t":{"288":{"position":[[0,16]]}}}],["entity_get_is_al",{"_index":146,"t":{"278":{"position":[[0,21]]}}}],["entity_get_is_started_to_be_destroy",{"_index":147,"t":{"280":{"position":[[0,39]]}}}],["entity_get_posit",{"_index":145,"t":{"276":{"position":[[0,21]]}}}],["entity_react_to_weapon",{"_index":152,"t":{"290":{"position":[[0,24]]}}}],["entity_set_posit",{"_index":148,"t":{"282":{"position":[[0,21]]}}}],["entity_set_radiu",{"_index":149,"t":{"284":{"position":[[0,19]]}}}],["entity_set_update_callback",{"_index":150,"t":{"286":{"position":[[0,28]]}}}],["entityid",{"_index":14,"t":{"34":{"position":[[0,8]]}}}],["entitytyp",{"_index":88,"t":{"159":{"position":[[0,10]]}}}],["enum",{"_index":44,"t":{"98":{"position":[[18,5]]},"158":{"position":[[0,5]]}}}],["exampl",{"_index":30,"t":{"70":{"position":[[9,7]]},"72":{"position":[[10,7]]},"74":{"position":[[13,7]]},"76":{"position":[[9,7]]},"78":{"position":[[16,7]]},"80":{"position":[[11,7]]},"82":{"position":[[12,7]]},"84":{"position":[[10,7]]},"86":{"position":[[7,7]]},"88":{"position":[[23,7]]}}}],["fair",{"_index":75,"t":{"137":{"position":[[0,4]]}}}],["farm",{"_index":78,"t":{"139":{"position":[[14,7]]}}}],["field",{"_index":21,"t":{"50":{"position":[[9,6]]}}}],["fixedpoint",{"_index":13,"t":{"32":{"position":[[0,10]]}}}],["float",{"_index":16,"t":{"38":{"position":[[0,5]]}}}],["fmath",{"_index":43,"t":{"96":{"position":[[18,5]]}}}],["fp",{"_index":57,"t":{"119":{"position":[[24,3]]}}}],["from_fract",{"_index":5,"t":{"15":{"position":[[0,15]]}}}],["function",{"_index":0,"t":{"6":{"position":[[0,9]]},"84":{"position":[[0,9]]},"94":{"position":[[18,9]]},"175":{"position":[[0,9]]}}}],["gameplay",{"_index":69,"t":{"134":{"position":[[0,8]]}}}],["gener",{"_index":67,"t":{"132":{"position":[[0,7]]}}}],["get",{"_index":38,"t":{"92":{"position":[[0,7]]},"115":{"position":[[0,7]]}}}],["get_all_ent",{"_index":117,"t":{"220":{"position":[[0,18]]}}}],["get_entities_colliding_with_disk",{"_index":118,"t":{"222":{"position":[[0,34]]}}}],["get_entity_count",{"_index":119,"t":{"224":{"position":[[0,18]]}}}],["get_entity_typ",{"_index":120,"t":{"226":{"position":[[0,17]]}}}],["get_number_of_play",{"_index":101,"t":{"188":{"position":[[0,23]]}}}],["get_player_configur",{"_index":110,"t":{"206":{"position":[[0,26]]}}}],["get_player_input",{"_index":106,"t":{"198":{"position":[[0,19]]}}}],["get_score_of_play",{"_index":107,"t":{"200":{"position":[[0,21]]}}}],["get_score_streak_level",{"_index":104,"t":{"194":{"position":[[0,24]]}}}],["go",{"_index":46,"t":{"100":{"position":[[21,3]]}}}],["guid",{"_index":63,"t":{"127":{"position":[[22,5]]}}}],["guidelin",{"_index":68,"t":{"132":{"position":[[8,10]]}}}],["help",{"_index":64,"t":{"129":{"position":[[0,7]]}}}],["increase_score_of_play",{"_index":102,"t":{"190":{"position":[[0,26]]}}}],["increase_score_streak_of_play",{"_index":103,"t":{"192":{"position":[[0,33]]}}}],["int",{"_index":12,"t":{"30":{"position":[[0,3]]}}}],["interpret",{"_index":84,"t":{"150":{"position":[[8,11]]}}}],["level",{"_index":45,"t":{"100":{"position":[[15,5]]},"102":{"position":[[10,5]]},"104":{"position":[[15,5]]},"123":{"position":[[0,5]]},"125":{"position":[[15,5]]}}}],["librari",{"_index":17,"t":{"42":{"position":[[7,7]]},"44":{"position":[[6,7]]},"46":{"position":[[5,7]]}}}],["limit",{"_index":52,"t":{"111":{"position":[[0,11]]}}}],["live",{"_index":41,"t":{"94":{"position":[[7,4]]},"96":{"position":[[7,4]]},"98":{"position":[[7,4]]}}}],["loop",{"_index":33,"t":{"76":{"position":[[4,4]]},"78":{"position":[[11,4]]},"80":{"position":[[6,4]]},"82":{"position":[[6,5]]},"88":{"position":[[18,4]]}}}],["lua",{"_index":61,"t":{"127":{"position":[[12,3]]},"150":{"position":[[4,3]]}}}],["make",{"_index":55,"t":{"119":{"position":[[0,6]]}}}],["make_player_ship_transpar",{"_index":115,"t":{"216":{"position":[[0,30]]}}}],["manifest",{"_index":20,"t":{"50":{"position":[[0,8]]}}}],["math",{"_index":19,"t":{"46":{"position":[[0,4]]}}}],["max_fixedpoint",{"_index":1,"t":{"7":{"position":[[0,16]]}}}],["memori",{"_index":82,"t":{"146":{"position":[[0,6]]}}}],["mesh",{"_index":50,"t":{"109":{"position":[[0,4]]},"117":{"position":[[14,4]]}}}],["mind",{"_index":77,"t":{"139":{"position":[[3,7]]}}}],["mothershiptyp",{"_index":89,"t":{"161":{"position":[[0,14]]}}}],["nest",{"_index":34,"t":{"78":{"position":[[0,6]]}}}],["new_asteroid",{"_index":124,"t":{"234":{"position":[[0,14]]}}}],["new_asteroid_with_s",{"_index":125,"t":{"236":{"position":[[0,24]]}}}],["new_baf",{"_index":126,"t":{"238":{"position":[[0,9]]}}}],["new_baf_blu",{"_index":128,"t":{"242":{"position":[[0,14]]}}}],["new_baf_r",{"_index":127,"t":{"240":{"position":[[0,13]]}}}],["new_bomb",{"_index":129,"t":{"244":{"position":[[0,10]]}}}],["new_bonu",{"_index":130,"t":{"246":{"position":[[0,11]]}}}],["new_crowd",{"_index":131,"t":{"248":{"position":[[0,13]]}}}],["new_customizable_ent",{"_index":133,"t":{"252":{"position":[[0,25]]}}}],["new_floating_messag",{"_index":132,"t":{"250":{"position":[[0,22]]}}}],["new_inertiac",{"_index":134,"t":{"254":{"position":[[0,14]]}}}],["new_mothership",{"_index":135,"t":{"256":{"position":[[0,16]]}}}],["new_player_bullet",{"_index":138,"t":{"262":{"position":[[0,19]]}}}],["new_player_ship",{"_index":137,"t":{"260":{"position":[[0,17]]}}}],["new_pointonium",{"_index":136,"t":{"258":{"position":[[0,16]]}}}],["new_rolling_cub",{"_index":139,"t":{"264":{"position":[[0,18]]}}}],["new_rolling_spher",{"_index":140,"t":{"266":{"position":[[0,20]]}}}],["new_ufo",{"_index":142,"t":{"270":{"position":[[0,9]]}}}],["new_wari",{"_index":141,"t":{"268":{"position":[[0,10]]}}}],["note",{"_index":28,"t":{"64":{"position":[[0,4]]}}}],["number",{"_index":86,"t":{"152":{"position":[[8,6]]}}}],["open",{"_index":47,"t":{"102":{"position":[[0,4]]}}}],["pair",{"_index":37,"t":{"88":{"position":[[12,5]]}}}],["pewpew",{"_index":40,"t":{"94":{"position":[[0,6]]},"96":{"position":[[0,6]]},"98":{"position":[[0,6]]}}}],["play_ambient_sound",{"_index":121,"t":{"228":{"position":[[0,20]]}}}],["play_sound",{"_index":122,"t":{"230":{"position":[[0,12]]}}}],["port",{"_index":87,"t":{"154":{"position":[[0,5]]}}}],["print",{"_index":29,"t":{"70":{"position":[[0,8]]},"176":{"position":[[0,7]]}}}],["print_debug_info",{"_index":96,"t":{"178":{"position":[[0,18]]}}}],["procedur",{"_index":26,"t":{"60":{"position":[[0,10]]}}}],["random",{"_index":76,"t":{"137":{"position":[[5,10]]}}}],["random_fixedpoint",{"_index":2,"t":{"9":{"position":[[0,19]]}}}],["random_int",{"_index":3,"t":{"11":{"position":[[0,12]]}}}],["recommend",{"_index":60,"t":{"127":{"position":[[0,11]]}}}],["remove_arrow_from_player_ship",{"_index":114,"t":{"214":{"position":[[0,31]]}}}],["remove_wal",{"_index":99,"t":{"184":{"position":[[0,13]]}}}],["render",{"_index":27,"t":{"60":{"position":[[11,9]]}}}],["rolling_cube_set_enable_collisions_with_wal",{"_index":143,"t":{"272":{"position":[[0,47]]}}}],["segment",{"_index":23,"t":{"56":{"position":[[0,8]]}}}],["set",{"_index":53,"t":{"113":{"position":[[0,7]]}}}],["set_level_s",{"_index":97,"t":{"180":{"position":[[0,16]]}}}],["set_player_ship_spe",{"_index":116,"t":{"218":{"position":[[0,23]]}}}],["sinco",{"_index":9,"t":{"23":{"position":[[0,8]]}}}],["sqrt",{"_index":4,"t":{"13":{"position":[[0,6]]}}}],["start",{"_index":39,"t":{"92":{"position":[[8,7]]},"104":{"position":[[4,5]]},"115":{"position":[[8,7]]}}}],["statement",{"_index":32,"t":{"74":{"position":[[3,9]]}}}],["stop_gam",{"_index":105,"t":{"196":{"position":[[0,11]]}}}],["string",{"_index":15,"t":{"36":{"position":[[0,6]]},"42":{"position":[[0,6]]}}}],["structur",{"_index":58,"t":{"123":{"position":[[6,9]]}}}],["style",{"_index":62,"t":{"127":{"position":[[16,5]]}}}],["tabl",{"_index":18,"t":{"44":{"position":[[0,5]]},"86":{"position":[[0,6]]}}}],["tau",{"_index":11,"t":{"27":{"position":[[0,5]]}}}],["to_fixedpoint",{"_index":8,"t":{"21":{"position":[[0,15]]}}}],["to_int",{"_index":6,"t":{"17":{"position":[[0,8]]}}}],["tool",{"_index":65,"t":{"129":{"position":[[8,5]]}}}],["tri",{"_index":72,"t":{"135":{"position":[[11,3]]}}}],["tutori",{"_index":49,"t":{"108":{"position":[[8,8]]}}}],["ufo_set_enable_collisions_with_wal",{"_index":144,"t":{"274":{"position":[[0,38]]}}}],["up",{"_index":54,"t":{"113":{"position":[[8,2]]}}}],["upload",{"_index":59,"t":{"125":{"position":[[0,9]]}}}],["usag",{"_index":83,"t":{"146":{"position":[[7,5]]}}}],["user",{"_index":71,"t":{"135":{"position":[[0,5]]}}}],["util",{"_index":66,"t":{"129":{"position":[[18,9]]}}}],["v",{"_index":36,"t":{"88":{"position":[[7,1]]}}}],["variabl",{"_index":31,"t":{"72":{"position":[[0,9]]}}}],["version",{"_index":85,"t":{"152":{"position":[[0,7]]}}}],["vertex",{"_index":22,"t":{"54":{"position":[[0,8]]}}}],["weapontyp",{"_index":94,"t":{"171":{"position":[[0,10]]}}}],["youtub",{"_index":48,"t":{"108":{"position":[[0,7]]}}}]],"pipeline":["stemmer"]}},{"documents":[{"i":3,"t":"Welcome to the first blog article! We are so excited to move the entirety of PPL level development documentation here. This platform allows us to make more interactive (via React components), good looking documentation and having powerful search! I hope you'll like the new home for PewPew docs. Enjoy!","s":"First Blog Post","u":"/ppl-docs/blog/first-blog-post","h":"","p":2},{"i":5,"t":"fmath contains a set of mathematical functions that work with FixedPoint numbers and integers. fmath replaces Lua's math library in game scripts (you can use Lua's math library outside of game scripts).","s":"fmath library","u":"/ppl-docs/docs/APIs/Fmath","h":"","p":4},{"i":8,"t":"fmath.max_fixedpoint(): FixedPoint Returns the maximum value a fixedpoint integer can take.","s":"max_fixedpoint()","u":"/ppl-docs/docs/APIs/Fmath","h":"#max_fixedpoint","p":4},{"i":10,"t":"fmath.random_fixedpoint( min: FixedPoint, max: FixedPoint ): FixedPoint Returns a random fixedpoint value in the range [min, max]. max must be greater or equal to min.","s":"random_fixedpoint()","u":"/ppl-docs/docs/APIs/Fmath","h":"#random_fixedpoint","p":4},{"i":12,"t":"fmath.random_int( min: int, max: int ): int Returns an integer in the range [min, max]. max must be greater or equal to min.","s":"random_int()","u":"/ppl-docs/docs/APIs/Fmath","h":"#random_int","p":4},{"i":14,"t":"fmath.sqrt(x: FixedPoint): FixedPoint Returns the square root of x. x must be greater or equal to 0.","s":"sqrt()","u":"/ppl-docs/docs/APIs/Fmath","h":"#sqrt","p":4},{"i":16,"t":"fmath.from_fraction( numerator: int, denominator: int ): FixedPoint Returns the fixedpoint value representing the fraction numerator/denominator. denominator must not be equal to zero.","s":"from_fraction()","u":"/ppl-docs/docs/APIs/Fmath","h":"#from_fraction","p":4},{"i":18,"t":"fmath.to_int(value: FixedPoint): int Returns the integral part of the value.","s":"to_int()","u":"/ppl-docs/docs/APIs/Fmath","h":"#to_int","p":4},{"i":20,"t":"fmath.abs_fixedpoint(value: FixedPoint): FixedPoint Returns the absolute value.","s":"abs_fixedpoint()","u":"/ppl-docs/docs/APIs/Fmath","h":"#abs_fixedpoint","p":4},{"i":22,"t":"fmath.to_fixedpoint(value: int): FixedPoint Returns a fixedpoint value with the integral part of value, and no fractional part.","s":"to_fixedpoint()","u":"/ppl-docs/docs/APIs/Fmath","h":"#to_fixedpoint","p":4},{"i":24,"t":"fmath.sincos(angle: FixedPoint): FixedPoint, FixedPoint Returns the sinus and cosinus of angle. angle is in radian.","s":"sincos()","u":"/ppl-docs/docs/APIs/Fmath","h":"#sincos","p":4},{"i":26,"t":"fmath.atan2( y: FixedPoint, x: FixedPoint ): FixedPoint Returns the principal value of the arc tangent of y/x. Returns a value in the range [0, 2Ï€[.","s":"atan2()","u":"/ppl-docs/docs/APIs/Fmath","h":"#atan2","p":4},{"i":28,"t":"fmath.tau(): FixedPoint Returns Ï„ (aka 2Ï€).","s":"tau()","u":"/ppl-docs/docs/APIs/Fmath","h":"#tau","p":4},{"i":31,"t":"Stores integers. Used for many things, including durations and colors. Durations represents a number of game ticks. There are 30 game ticks per seconds. For example, a duration of 45 ticks represents 1.5 seconds. Colors are stored in 32 bits in the RGBA order. For example, 0xff000080 encodes pure red (0xff0000) with an alpha value of 0x80.","s":"int","u":"/ppl-docs/docs/APIs/types","h":"#int","p":29},{"i":33,"t":"Stores fixed point numbers. Used for storing and computing all the game related values that require more precision than what integer numbers can provide. That includes coordinates, angles, velocities, etc... This built-in type is specific to PewPew, and does not exist in other Lua interpreters, which is why it is documented more thoroughly than the other types. A FixedPoint constant is defined using a number followed by the fx postfix: local a = 100fx You can perform regular arithmetic operations on it (+, -, /, *, <, ==, >, and, or, xor), but you can't mix FixedPoint values with non-FixedPoint values: local a = 100fx local b = a / 3fx -- Ok local c = a / 3 -- Not ok! 3 is not a FixedPoint Internally, FixedPoint numbers are implemented using dux_fixed, which uses 64 bits integers. 52 bits are used to encode the integral part, leaving 12 bits for the fractional part. You can initialize the fractional part by placing a '.' followed by an integer in the range [0, 4095]: local a = 1fx -- Stores the value 1 local b = 1.0fx -- Stores the value 1 local c = 1.2048fx -- Stores the value 1.5 local d = 1.4095fx -- Stores the value 1.9997558... local e = -1.4095fx -- Stores the value -1.9997558... local f = 1.4096fx -- Not ok! The decimal part must be less than 4096 Here's an interactive converter that can help understanding the format:","s":"FixedPoint","u":"/ppl-docs/docs/APIs/types","h":"#fixedpoint","p":29},{"i":35,"t":"An integer that identifies an entity. EntityIds are guaranteed to be unique: they are not reused for the duration of a game.","s":"EntityId","u":"/ppl-docs/docs/APIs/types","h":"#entityid","p":29},{"i":37,"t":"Stores a sequence of characters. Typically used to hold text and file paths. The API only accepts strings less than 1000 bytes long.","s":"String","u":"/ppl-docs/docs/APIs/types","h":"#string","p":29},{"i":39,"t":"Stores floating point numbers. Because they make determinism hard to guarantee, floats must only be used in Lua scripts that define meshes or sounds. Although it is still technically possible to use floats in game scripts, they will eventually be forbidden.","s":"float","u":"/ppl-docs/docs/APIs/types","h":"#float","p":29},{"i":41,"t":"Only a subset of the standard Lua libraries are available in PewPew Live: The string library, the table library, and (for meshes and sound effects only) the math library. info Level files do not have access to the math library. Use fmath instead.","s":"Standard libraries","u":"/ppl-docs/docs/APIs/standard-libraries","h":"","p":40},{"i":43,"t":"The library exposes the following functions: byte char dump find format gmatch gsub len lower match rep reverse sub upper pack packsize unpack The official Lua website has the documentation for the string library.","s":"String library","u":"/ppl-docs/docs/APIs/standard-libraries","h":"#string-library","p":40},{"i":45,"t":"The library exposes the following functions: concat insert pack unpack remove move sort The official Lua website has the documentation for the table library.","s":"Table library","u":"/ppl-docs/docs/APIs/standard-libraries","h":"#table-library","p":40},{"i":47,"t":"The Lua math library is only available for meshes and sound effects. It is not available when creating levels because the functions it offer are often for dealing with floating point numbers. The library exposes the following functions: abs acos asin atan ceil cos deg exp tointeger floor fmod ult log max min modf rad random sin sincos sqrt tan type and the constants: pi huge maxinteger mininteger The only absent API is randomseed (the RNG is already seeded with a good seed). If you need a predictable random sequence, use your own RNG implemented in Lua. The official Lua website has the documentation for the math library.","s":"Math library","u":"/ppl-docs/docs/APIs/standard-libraries","h":"#math-library","p":40},{"i":49,"t":"Manifests are written in JSON. Example of a manifest file: manifest.json { \"name\": \"The name of the level\", \"descriptions\": [\"A short description for your level.\"], \"information\": \"Information regarding your level. Up to 350 characters long. Can include #ff0000ffcolor!\", \"entry_point\": \"level.lua\", \"has_score_leaderboard\": true, \"rank_thresholds_1p\": { \"bronze\": 1000, \"silver\": 2000, \"gold\": 3000 } }","s":"Manifest files","u":"/ppl-docs/docs/File Information/manifest-files","h":"","p":48},{"i":51,"t":"name is the name of the level. Keep it short (30 char max). descriptions is an array of strings. You can put multiple descriptions, but for now only the first string is displayed anywhere. information is an optional string that can be 350 characters long that should contain information relevant to the level. entry_point contains the path to the main entry point of the level. warning entry_point must be level.lua. has_score_leaderboard is a boolean that specifies whether the level should have a score leaderboard. rank_thresholds_1p contains the requirements for the players to unlock bronze, silver, and gold stars. You must not include this field if has_score_leaderboard is false. If all the thresholds are 0, then the level will not give out stars.","s":"Manifest fields","u":"/ppl-docs/docs/File Information/manifest-files","h":"#manifest-fields","p":48},{"i":53,"t":"In PewPew Live, a mesh is a collection of lines in 3D. To create a mesh, you need to list the coordinates of the points making up the model, and how the points are linked. Lua scripts describing meshes needs to create a table called meshes. That table must contain one or more meshes. Example of a file that defines two meshes: meshes = { { -- A 500x500 square vertexes = {{0,0,0}, {500,0,0}, {500,500,0}, {0,500,0}}, colors = {0xffffffff, 0xffff00ff, 0xff00ffff, 0xff0000ff}, segments = {{0,1,2,3,0}} }, { -- A right-angled triangle vertexes = {{0,0,0}, {500,0,0}, {0,500,0}}, colors = {0xffff00ff, 0xff00ffff, 0xff0000ff}, segments = {{0,1,2,0}} } }","s":"Mesh files","u":"/ppl-docs/docs/File Information/mesh-files","h":"","p":52},{"i":55,"t":"The vertexes field contains the list of vertexes. Vertexes are represented by three numbers. Those numbers can be floating point numbers.","s":"Vertexes","u":"/ppl-docs/docs/File Information/mesh-files","h":"#vertexes","p":52},{"i":57,"t":"The segment field describes which vertexes should be joined by a segment. It contain a list of segment chains. Each segment chain is a table that holds a lists of 0-based indexes to vertexes that should be connected by a segment. Important: There is a difference between segments = {{0,1}, {1,2}} and segments = {{0,1,2}}. In the first case, 2 separate segments will be generated. In the second case, two segments linked with a miter join will be generated.","s":"Segments chains","u":"/ppl-docs/docs/File Information/mesh-files","h":"#segments-chains","p":52},{"i":59,"t":"The optional colors field contains the colors of each vertexes. If the colors field is present, it must contain as many colors as there are vertexes. Colors are 32 bit RGBA values. 0xff0000ff -- opaque red 0xff000080 -- slightly transparent red 0xff000000 -- fully transparent red Note that all meshes are rendered with additive blending.","s":"Colors","u":"/ppl-docs/docs/File Information/mesh-files","h":"#colors","p":52},{"i":61,"t":"Astute readers may have realized that because meshes is described in a Lua script, it can be generated at runtime. See for instance this example.","s":"Procedural rendering","u":"/ppl-docs/docs/File Information/mesh-files","h":"#procedural-rendering","p":52},{"i":63,"t":"In this tutorial, we will learn how to make more advanced levels, including meshes, custom enemies, and other cool gameplay features! So, let's get straight into it.","s":"Advanced","u":"/ppl-docs/docs/Guides/Lua/advanced","h":"","p":62},{"i":65,"t":"Before we start, it is necessary to know at least some basic Lua and how to make a simple PewPew Live level. If you need a refresher, take a look at the Beginner and Intermediate tutorials. Once you're done, you can come back to this tutorial. Tutorial in the making.","s":"Note","u":"/ppl-docs/docs/Guides/Lua/advanced","h":"#note","p":62},{"i":67,"t":"Example of a file that defines a single sound: sounds = { { frequency = 500, sustain = 0.3, waveform = \"triangle\", } } The following fields can be used to describe a sound: attack (in seconds) decay (in seconds) sustain (in seconds) sustainPunch (in seconds) amplification tremoloDepth tremoloFrequency (in hertz) frequency (in hertz) frequencyDeltaSweep frequencyJump1Onset frequencyJump2Onset frequencyJump1Amount frequencyJump2Amount frequencySweep vibratoFrequency (in hertz) vibratoDepth (in hertz) flangerOffset flangerOffsetSweep repeatFrequency waveform (\"sine\", \"triangle\", \"sawtooth\", \"square\", \"tangent\", \"whistle\", \"breaker\", \"whitenoise\", \"pinknoise\", \"brownnoise\") tip Use jfxr for sound creation. A script then transforms the resulting jfxr link (for example this link) into a table consumable by PewPew Live. See this example.","s":"Sound files","u":"/ppl-docs/docs/File Information/sound-files","h":"","p":66},{"i":69,"t":"https://repl.it/languages/lua can be used to try Lua in the browser. These examples are more for review, rather than learning! If you see something here that you don't understand, continue to watch Lua tutorials on youtube!","s":"Beginner Lua Tutorial","u":"/ppl-docs/docs/Guides/Lua/beginner","h":"","p":68},{"i":71,"t":"print(\"Hello world!\") Output: Hello World! print(2+3) Output: 5 print(\"2+3\") Output: 2+3 Anything in quotation marks \" \" or ' ' is a string. Printing a string will output exactly what you type! Anything not inside of quotation marks are registered as numbers, variables, or mathematics!","s":"PRINTING EXAMPLE","u":"/ppl-docs/docs/Guides/Lua/beginner","h":"#printing-example","p":68},{"i":73,"t":"my_variable = 5 print(my_variable) Output: 5 x = 2 y = 10 print(x+y) Output: 12 x = 2 y = 10 print(\"x+y\") Output: x+y some_text = \"this is cool\" print(some_text) Output: this is cool Variables can be assigned practically any value! You can store them as numbers, strings, and more!","s":"VARIABLES EXAMPLE","u":"/ppl-docs/docs/Guides/Lua/beginner","h":"#variables-example","p":68},{"i":75,"t":"x = 6 if x > 5 then print(\"Greater than 5!\") end Output: Greater than 5! a = true b = false if a then print(\"True\") end if a and b then print(\"True\") else print(\"False\") end if a or b then print(\"True\") else print(\"False\") end if b then print(\"True\") end Output: True False True x = 5 y = 5 if x == y then print(\"True\") end Output: True Variables can also be assigned boolean values, which are true and false! With \"and\" statements, both or all arguments need to be true to equal true in total! With \"or\" statements, only one needs to be true to equal true in total! Both or all need to be false to be false in total!","s":"IF STATEMENT EXAMPLE","u":"/ppl-docs/docs/Guides/Lua/beginner","h":"#if-statement-example","p":68},{"i":77,"t":"for i = 1, 5 do print(\"Hello!\") end The following output is repeated 5 times: Hello! for i = 1, 10 do print(i) end Output: 1 2 3 4 5 6 7 8 9 10 for i = 1, 10, 2 do print(i) end Output: 1 3 5 7 9 for i = 0, -10, -1 do print(i) end Output: 0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 local loopcount = 25 for i = 1, loopcount do print(\"Loop!\") end The following output is repeated 25 times: Loop! For loops are useful for running the same code multiple times! The first line of the for loop has the syntax for i = Index, End Value, Increments. You set i as your starting value, separate with a comma, set your end value, and you can optionally set your increment as your third value. Don't forget the \"do\"!","s":"FOR LOOP EXAMPLE","u":"/ppl-docs/docs/Guides/Lua/beginner","h":"#for-loop-example","p":68},{"i":79,"t":"for i = 1, 5 do print(\"This is the outer loop!\") for j = 1, 3 do print(\"This is the inner loop!\") end end The following output is repeated 5 times: This is the outer loop! This is the inner loop! This is the inner loop! This is the inner loop! local swim_laps = 10 local paddles = 5 for i = 1, swim_laps do print(\"Lap : \"..i) for j = 1, paddles do print(\"Paddle : \"..j) end end Output: Lap : 1 Paddle : 1 Paddle : 2 ...etc. for i = 1, 5 do for i = 1, 2 do print(\"This is fine!\") end end The following output is repeated 10 times: This is fine! You are allowed to put for loops inside of other for loops! In if you put a for loop that repeats 3 times inside of a for loop that repeats 5 times, that inner loop runs 15 times total! With for loops, you can use any variable as your index! And with nested for loops, it is good practice to use different variables, like using i and j instead of using i twice.","s":"NESTED FOR LOOP EXAMPLE","u":"/ppl-docs/docs/Guides/Lua/beginner","h":"#nested-for-loop-example","p":68},{"i":81,"t":"local x = 3 while x > 0 do print(x) x = x - 1 end Output: 3 2 1 local x = 3 local y = 4 while x > 0 and y > 0 do print(x,y) x = x - 1 y = y - 1 end Output: 3 4 2 3 1 2 while true do print(\"Hello!\") end The following output is repeated indefinitely: Hello! A while loop is very similar to a for loop, except you can think of it as an if statement and for loop combined! The while loop runs while the conditions are true. So for a while true do loop, the loop runs forever! Be careful when making a while true do loop!","s":"WHILE LOOP EXAMPLE","u":"/ppl-docs/docs/Guides/Lua/beginner","h":"#while-loop-example","p":68},{"i":83,"t":"while true do print(\"loop!\") break end The above loop will only run once. Output: loop! x = 0 while true do print(\"loop!\") x = x + 1 if x >=2 then break end end The above loop will run 2 times. Output: loop! loop! for i = 1, 10 do print(i) if i >= 3 then break end end Output: 1 2 3 Using break is very useful! The purpose for break is to stop a loop from running! So using break in a for or while loop will ultimately terminate it!","s":"BREAK LOOPS EXAMPLE","u":"/ppl-docs/docs/Guides/Lua/beginner","h":"#break-loops-example","p":68},{"i":85,"t":"local function myFunction() local x = 4 local y = 2 print(x + y) end myFunction() Output: 6 local function AddNum(num1, num2) print(num1 + num2) end AddNum(99,121) AddNum(44,33) Output: 220 77 local function Cubed(number) newNumber = number*number*number return newNumber end local x = Cubed(2) local y = Cubed(3) print(x,y) local a = Cubed(10) print(a) Output: 8 27 1000 Functions are good for reducing the amount of code you have to write. If you have a piece of code you are going to use over and over with slightly different values, then make that piece of code a function! You can give functions parameters which is the num1 and num2 in myFunction(num1, num2). When you use the function later in your code, don't forget to fill in the parentheses! You can also use return to essentially turn a function into a value.","s":"FUNCTIONS EXAMPLE","u":"/ppl-docs/docs/Guides/Lua/beginner","h":"#functions-example","p":68},{"i":87,"t":"local myTable = {1,5,3} print(myTable[1]) print(myTable[2]) print(myTable[3]) Output: 1 5 3 local names = { \"Bob\", \"Moses\", \"Joe\" } for i = 1, #names do print(names[i]) end names[4] = \"Dawn\" print(names[4]) table.insert(names,\"Rambo\") print(names[5]) Output: Bob Moses Joe Dawn Rambo local person = { health = 100, speed = 20, isAwesome = true, name = \"John\" } print(\"This person's health is \"..person.health) print(\"This person's health is \"..person[\"health\"]) print(\"This person's speed is \"..person.speed) print(\"This person is awesome. \"..person.isAwesome) print(\"This person's name is \"..person.name) print(\"This person's name is \"..person[\"name\"]) person.home = \"USA\" person[\"money\"] = 250 print(\"This person's home is \"..person.home) print(\"This person has \"..person[\"money\"]..\" dollars!\") Output: This person's health is 100 This person's health is 100 This person's speed is 20 This person is awesome. true This person's name is John This person's name is John This person's home is USA This person has 250 dollars! Tables are very good for storing lots of information. You can even put things inside of tables after the table is made! Done with table.insert(TableName, data) or you add things with table[n] = data. And remember, the table doesn't have to be defined on the same line! The brackets can be on separate lines to make it easier to read!","s":"TABLES EXAMPLE","u":"/ppl-docs/docs/Guides/Lua/beginner","h":"#tables-example","p":68},{"i":89,"t":"local numbers = {3, 4, 99, 202, -3} for i, v in pairs(numbers) do print(i, v) end Output: 1 3 2 4 3 99 4 202 5 -3 local names = {\"Jack\", \"Mike\", \"Melinda\", \"Stacy\"} for index, person in pairs(names) do print(\"Person \"..index..\" is \"..person) end Output: Person 1 is Jack Person 2 is Mike Person 3 is Melinda Person 4 is Stacy For i, v in pairs loops are a useful kind of for loop! They basically go through a list and use the data stored in the table. The variable i is the index or position of the table where the data is stored. The variable v is the value of the data. Inside of pairs() is the table you want to use: pairs(TableName). The variables don't have to be named \"i\" and \"v\", they can be named whatever you want!","s":"FOR I, V IN PAIRS LOOP EXAMPLE","u":"/ppl-docs/docs/Guides/Lua/beginner","h":"#for-i-v-in-pairs-loop-example","p":68},{"i":91,"t":"If you are here, you made it through the learning process of the Lua language! Keep in mind, this section assumes that you know basic Lua. If you need to freshen up, look back onto the Beginner tutorials! Here, we will learn how to make a PewPew Live Custom Level","s":"Intermediate","u":"/ppl-docs/docs/Guides/Lua/intermediate","h":"","p":90},{"i":93,"t":"So in order to begin making a level, you will need to visit a couple of links. https://github.com/jyaif/ppl-utils <--- This link right here will take you to the files you need to make your level! Scroll down to Getting Started and follow the directions! https://pewpewlive.github.io/ppl-utils/ <--- This link right here is the PewPew Live API. That means, many important functions and items that are needed to make your level are found on this site! Also, make sure you have a text editor to make your code in! If you need help with this, go to the discord and ask about it in #technical-discuss!","s":"GETTING STARTED","u":"/ppl-docs/docs/Guides/Lua/intermediate","h":"#getting-started","p":90},{"i":95,"t":"Before we begin in our first steps to making a level, it is crucial to understand the PewPew Live API. Let's take a look... These are some of the functions that you will be using in PewPew Live! I suggest giving it a lookover, and try to see what it all means! Whenever you use a function in PewPew's library (API), you MUST put pewpew. infront of it! So you see, print(String str) would be typed in your code as pewpew.print(String str). The black boxes with green text (things like String, Int, etc) tell you what kind of data the function uses, and what type of function it is! Don't worry too much about the type of function, focus mainly on the data that the functions take in, like Int and String.","s":"PEWPEW LIVE API - FUNCTIONS","u":"/ppl-docs/docs/Guides/Lua/intermediate","h":"#pewpew-live-api---functions","p":90},{"i":97,"t":"Another main part of the API is the Fmath library! These are more functions in PewPew Live, but slightly different. To use these functions, you MUST put fmath. infront of it! So sqrt(FixedPoint x) would be typed in your code as fmath.sqrt(FixedPoint x). Now, what exactly is FixedPoint? FixedPoint refers to a specific kind of number in PewPew levels. We just call them fixed point numbers. They are strange, but don't worry, you'll get the hang of them! You really only use fixed point numbers when dealing with location and size. But don't worry, fixed point numbers and normal numbers are the same! ...For the most part. See, you write a normal number as n, and fixed point numbers are written as nfx. Fixed point numbers are put in the code by putting fx after your number! So you have numbers like 1, 2, 3. But in fixed point numbers, they would be 1fx, 2fx, 3fx. And so on! Another main difference I should note is their decimals! It's a little strange, and I won't go into too much detail, but 2.6fx does not exist. The number 2.5 is written as 2.2048fx. It's strange, I know! And there is a specific and good reason for this! But for now, don't worry too much about decimals. If you need to use a number that isn't a full number, stick with fractions! Like instead of writing 2.2048fx, write 5fx/2fx! See? Much better! Just remember that these fixed point numbers are mostly used for location and size! In later examples we will see exactly how they are used!","s":"PEWPEW LIVE API - FMATH","u":"/ppl-docs/docs/Guides/Lua/intermediate","h":"#pewpew-live-api---fmath","p":90},{"i":99,"t":"The last main part that I need to cover is the Enums section of the API So what is an Enum? Enum stands for Enumerator, and is just a fancy way of talking about a list of items and properties. So here is the list of enemies and the properties of enemies, AKA the Enums, that a person can access and use. Again, you need to put pewpew. infront of these when you use them. A quick example of a reference to a specific enemy would be pewpew.MothershipType.THREE_CORNERS. This piece of code references the pink triangles (motherships) that you see in Eskiv. We will go into detail on how to use Enums in specific ways, but for now, that is the general briefing on how to read the PewPew Live API!","s":"PEWPEW LIVE API - ENUMS","u":"/ppl-docs/docs/Guides/Lua/intermediate","h":"#pewpew-live-api---enums","p":90},{"i":101,"t":"So we are finally about to make our level. Where do we keep it? Well at the very top, you went to the main github page and downloaded the files, you need that! You will need to extract the file, and then you will enter it. You will see two files, a folder and an .exe file. That .exe is very important to running your level, keep it in mind! You will then see a bunch of files, and a folder. You do NOT need to worry about these files at all! Just the folder! The levels folder is where all custom levels are stored! So that is the folder you enter into next! As you can see below, there are some levels already here! The developer, JF, put these levels here as examples for level creators to look at while they work! This is where you will create your level. So all you need to do is make a new folder. I'm going to call my folder TUTORIAL_LEVEL, although you can call your folder whatever you like. And there you go! You now have the location of your custom level, and all the levels are nice and organized! Time for the fun stuff!","s":"WHERE DOES THE LEVEL GO?","u":"/ppl-docs/docs/Guides/Lua/intermediate","h":"#where-does-the-level-go","p":90},{"i":103,"t":"Here we can go into the environment that we need to code! Just to let you know, I use a text editor called Visual Studio Code. You may use something different, and again, if you need help with this text editor stuff, reach out in the discord! You can either open up just your level file in your text editor, or you can open the folder that contains all the levels. This is helpful for looking at other levels while you code! So head back to this screen below: And open the levels folder with your text editor! If you need help with this, feel free to reach out for help! If you're ready, then proceed down below! As pointed out by the very helpful green arrow, my level is on the left. The folder was initially empty. You need create a new script that will be your main level script. It HAS to be called level.lua. This is how PewPew Live enters into your level and runs it. It might change in the future, but it is good practice to keep consistency. And with the script made, you have an empty canvas. What's next?","s":"OPEN YOUR LEVEL","u":"/ppl-docs/docs/Guides/Lua/intermediate","h":"#open-your-level","p":90},{"i":105,"t":"This next portion will go over how to make your map, and how to spawn the player. Yes! You have to put in the code that spawns the player yourself! But don't worry, it's not too terrible. Look back into the PewPew API, there is a function that sets the map size. I'll state it here, it is set_level_size(FixedPoint width, FixedPoint height). This is the code that will make your map! It is very simple, and here is a sample code. local level_height = 300fx local level_length = 400fx pewpew.set_level_size(level_length, level_height) And that's all there is to it! You have made a map! Remember, when using a PewPew function, you MUST put pewpew. in front, or it won't work! And we are dealing with location/size, so fixed point numbers must be used! And you don't need to set the sizes as variables, I just consider it good practice. It's also easier to reference the map sizes if they are variables. You could have written pewpew.set_level_size(300fx, 400fx), but it's up to you. Hold it! Before you try out your level, you need to spawn the player! This requires another handy function from the API. This one is new_player_ship(FixedPoint x, FixedPoint y, int player_index). A player's spawn point is a matter of location, so fixed points are required! Also, notice how the index is not a fixed point number, but a normal number! The index is not size or location, so using normal numbers is fine! pewpew.new_player_ship(100fx, 100fx, 0) And there you have it! The player has spawned, and you have a map made. I should back track, what is player_index? And what does the 0 have to do with it? Well each player, whether it is single-player or multi-player, are assigned an \"index\" to keep track of which player is which. Player 1 has an index of 0, player 2 has an index 1, and so on. BUT at the current moment, custom levels only support one player, so whenever you use new_player_ship(FixedPoint x, FixedPoint y, int player_index), just use 0 for the player_index. The code above worked just fine, but another way, which is good practice, to write the above code is local x_spawn = 100fx local y_spawn = 100fx local p1_index = 0 local player1_ship = pewpew.new_player_ship(x_spawn, y_spawn, p1_index) This piece of code sets the ship as a variable that you can reference later on! I highly recommend using this second piece of code rather than the first one! And there you have it! Down below is the final product. Now there's one more step before we can test out our level! We need something called a manifest The manifest is your level description, name, and entry! I will explain entry in a bit, but for now, here's how to make a manifest. This one is actually written in a language other than Lua. I won't explain it too much, I will just show you the code and you can make a manifest. But first, make a new file in your level folder and call it manifest.json. NOT manifest.lua. Like I said, it's a different language! In the manifest you need to put this piece of code: { \"name\": \"LEVEL_NAME\", \"descriptions\": [\"LEVEL DESCRIPTION\"], \"entry_point\": \"level.lua\" } You can look at it and kind of get a sense of what's going on, but I will brief you on it. You put your level name where \"LEVEL_NAME\" is INSIDE the quotation \"\" marks! You can do the same with the level description, inside the quotation marks and brackets [\"\"]! See the \"entry_point\"? That's why we named the main script level.lua. The game enters through that script and runs your level. And that is all you need to know about this new file. Down below is the manifest for my tutorial level. You are done! You can run your level! Ready to take it out for a spin? Good! Remember that .exe I mentioned some time back? Yeah, we need that. Head back to the screen below. You need to run the ppl-utils file. It will open a window, and your computer will warn you about this file. Go ahead and run the file anyway, and you will be able to try out your level! You should get something like below: Your levels are being run! Now you need to go to the website that the screen above is telling you! The website to run your levels is http://localhost:9000/pewpew.html You should get a screen like this: As you can see, the manifest dictated what name my level would show as. My tutorial world is at the top of the page, called \"Tutorial Level\". As it should, as that is what I put in the manifest above. You will need to find your level in the list of levels. And there you go! Just go into your level and give it a whirl!","s":"THE START OF A LEVEL","u":"/ppl-docs/docs/Guides/Lua/intermediate","h":"#the-start-of-a-level","p":90},{"i":107,"t":"Tutorial created by WinterNox.","s":"60 FPS Animation","u":"/ppl-docs/docs/Guides/Other/fps-animation","h":"","p":106},{"i":110,"t":"Mesh animations in PewPew Live are achieved by iterating through multiple meshes that are slightly different from each other. The meshes are usually stored in a single file and are made procedurally.","s":"Mesh animations","u":"/ppl-docs/docs/Guides/Other/fps-animation","h":"#mesh-animations","p":106},{"i":112,"t":"If you have some experience with level creation, you should know that PewPew Live runs at 30 ticks per second and that the graphics are interpolated. However, the interpolation only applies to transformations (position, rotation and scale). But, what about mesh animations? Since you can only change something about the entity per tick, mesh animations would be limited to 30 frames per second. Thankfully, the PPL Lua API has just the right function that can be used to achieve 60 FPS mesh animations. This function is: pewpew.customizable_entity_set_flipping_meshes(entity_id, file_path, index1, index2) When used, the entity will switch between the two specified meshes in a single game tick. But, how does that help us achieve 60 FPS animations? Let's see.","s":"Limitations","u":"/ppl-docs/docs/Guides/Other/fps-animation","h":"#limitations","p":106},{"i":114,"t":"Before we can start making an animation and assigning it to an entity, we need to have a base level that we can work with. Start by creating a new folder in ./content/levels/. In the newly created folder, make sure you have these files: level.lua graphics.lua (The name of your mesh file can be different, but remember it!) manifest.json If you need a basic manifest.json, here is a template you can use. { \"name\": \"60 FPS\", \"descriptions\": [\"Amazing\"], \"entry_point\": \"level.lua\", \"has_score_leaderboard\": false }","s":"Setting up","u":"/ppl-docs/docs/Guides/Other/fps-animation","h":"#setting-up","p":106},{"i":116,"t":"Now that we have a level base, we can start making our mesh and entity. If at any point you face a problem, try following the steps again, or check the final .lua files. Making the mesh​ Open graphics.lua (or your mesh file) and start by writing the following: meshes = {} Since our meshes are going to be procedurally generated, we won't be making every vertex by hand, instead, we will make Lua do that for us! Essentially when making a procedural mesh, we make a table with our vertexes and segments, that we later add to the meshes table. The vertex and segment tables are going to hold the generated points and segment indexes. Add this to your mesh file: -- Tables for our mesh vertexes, segments local computed_vertexes, computed_segments = {}, {} Now we need a way to populate the tables with our mesh points and segments. Note: In this example, we will be making a hexagon! Start by defining the radius and small_radius variables. They will be used when generating the hexagon sides. Also, create a variable i, which will be used for the segments. Now, create a for loop that will go from 0 to math.pi * 2 and increment by math.pi * 2 / 6 (since we want it to be a hexagon). Get the corresponding sine and cosine of the angle (y and x positions). Multiply one pair by the default radius and one by the smaller radius, and add them to the vertexes table. To add the needed segment indexes, we need to connect the vertexes together. Connect the inner hexagon vertex to the outer one, connect the inner hexagon vertex with its own next vertex, and connect the outer hexagon vertex the same way. Increment the segment counter by 2. The resulting code should look something like this: local radius = 96 -- Outer hexagon local small_radius = 48 -- Inner hexagon local i = 0 for angle = 0, math.pi * 2, math.pi * 2 / 6 do -- We want to go from angle 0 to 2Ï€, skipping by 2Ï€ / 6, making a hexagon local y, x = math.sincos(angle) -- y and x positions on the unit circle table.insert(computed_vertexes, {x * radius, y * radius}) -- Vertex for the outer hexagon table.insert(computed_vertexes, {x * small_radius, y * small_radius}) -- Vertex for the inner hexagon table.insert(computed_segments, {i, i + 1}) -- Line joining the corresponding vertices of the inner and outer hexagons table.insert(computed_segments, {i, i + 2}) -- Line joining the vertex of the outer hexagon to its next one table.insert(computed_segments, {i + 1, i + 3}) -- Line joining the vertex of the inner hexagon to its next one i = i + 2 end Because of the way we added the segments, at the end of the for loop we get extra segments that are unnecessary. After the for loop, we can remove them by doing this: table.remove(computed_segments, #computed_segments) -- Removal of the last segment as there is no vertex at index i + 3 during the last iteration table.remove(computed_segments, #computed_segments) -- No vertex at index i + 2 during the last iteration table.remove(computed_segments, #computed_segments) -- A line is already present joining the vertices At the end, we add the mesh made up of the generated vertexes and segments. table.insert(meshes, { vertexes = computed_vertexes, segments = computed_segments }) Creating the entity and assigning it the mesh​ Now, go to level.lua, and start by creating an entity at position (0fx, 0fx). Next, set the entity's mesh to the one we just created. local id = pewpew.new_customizable_entity(0fx, 0fx) pewpew.customizable_entity_set_mesh(id, \"/dynamic/graphics.lua\", 0) -- Change the filename if needed Note: Setting level size and creating a player is optional. Run ppl-utils.exe and open your level at http://localhost:9000/pewpew.html You should see the following: If you don't, you might have made a mistake somewhere! Check the steps to make the mesh again and check for mistakes.","s":"Getting started","u":"/ppl-docs/docs/Guides/Other/fps-animation","h":"#getting-started","p":106},{"i":118,"t":"Let's get into animating our mesh! For this tutorial, we will have the outer hexagon rotating clockwise and the inner hexagon counterclockwise. To do this, we need multiple \"meshes\" that we will set our entity to. In your mesh file, change for loop to the following: for angle_offset = 0, math.pi * 2, math.pi * 2 / 60 do -- Our animation will have 60 frames. We want the hexagons to make a full rotation each 60 frames (2 seconds). This does not mean the animation is 60FPS yet! -- Tables for our mesh vertexes, segments local computed_vertexes, computed_segments = {}, {} local radius = 96 -- Outer hexagon local small_radius = 48 -- Inner hexagon local i = 0 for angle = 0, math.pi * 2, math.pi * 2 / 6 do -- We want to go from angle 0 to 2Ï€, skipping by 2Ï€ / 6, making a hexagon local y, x = math.sincos(angle) -- y and x positions on the unit circle table.insert(computed_vertexes, {x * radius, y * radius}) -- Vertex for the outer hexagon table.insert(computed_vertexes, {x * small_radius, y * small_radius}) -- Vertex for the inner hexagon table.insert(computed_segments, {i, i + 1}) -- Line joining the corresponding vertices of the inner and outer hexagons table.insert(computed_segments, {i, i + 2}) -- Line joining the vertex of the outer hexagon to its next one table.insert(computed_segments, {i + 1, i + 3}) -- Line joining the vertex of the inner hexagon to its next one i = i + 2 end table.remove(computed_segments, #computed_segments) -- Removal of the last segment as there is no vertex at index i + 3 during the last iteration table.remove(computed_segments, #computed_segments) -- No vertex at index i + 2 during the last iteration table.remove(computed_segments, #computed_segments) -- A line is already present joining the vertices table.insert(meshes, { vertexes = computed_vertexes, segments = computed_segments }) end As you can see, the real mesh generation code is pretty much the same, just that we repeat it several times instead, making it have frames! Now, most importantly, we need to change the way we get the points of our hexagon. Since we want the outer hexagon to turn clockwise and the inner one counterclockwise, we need to change the angles depending on which frame we are on. Since each frame is going to have a specific angle offset, we can add that to our initial angles, meaning we have to change this line: local y, x = math.sincos(angle) into local y, x = math.sincos(angle - angle_offset) And add a new line below it like so: local y2, x2 = math.sincos(angle + angle_offset) We will use x2 and y2 for the inner hexagon. To do this, replace the x * small_radius and y * small_radius coordinates for the inner hexagon with x2 * small_radius and y2 * small_radius respectively. We now have 60 frames of meshes that we can use to animate our entity. To do this, we need to use an index which will increase every tick, and use that to set the entity's mesh. This can be done like so: In level.lua, replace the second line with this code: local mesh_index = 0 pewpew.entity_set_update_callback(id, function() -- We have 60 frames out of 61 total frames. The last frame is equal to the first one and is unused. -- The index of the 60th frame is 59. (Although we are using lua, mesh and sound indexes start from 0 in PewPew Lib API.) -- Loop when we have exceeded past the last frame. if mesh_index > 59 then mesh_index = 0 end pewpew.customizable_entity_set_mesh(id, \"/dynamic/graphics.lua\", mesh_index) mesh_index = mesh_index + 1 end) The code is pretty self-explanatory. We increment the index every tick and use that index to set the mesh. Since the meshes we have generated have small changes in them, doing this creates an animation. The result should look something like this: As you can see, it is an animation. Though, this animation is running at only 30 frames per second. This is an issue. An animation running at 30 FPS will not look good with the rest of the level as the level might have other content that moves. And as you already know, position transformation is interpolated by PewPew Live. This means that, even though the level runs at 30 ticks per second, the game will interpolate the graphics and display them at 60 FPS or 90 FPS for example. (The game interpolates the graphics as per the refresh rate of the device, which will usually be higher than 30Hz.) To ensure that the difference between the rest of the level and our mesh animation is minimal, we have to make our mesh animation run on at least 60 FPS.","s":"Animating the mesh","u":"/ppl-docs/docs/Guides/Other/fps-animation","h":"#animating-the-mesh","p":106},{"i":120,"t":"Open your mesh file and replace the line for angle_offset = 0, math.pi * 2, math.pi * 2 / 60 do -- 60 -- Code that generates the meshes end with for angle_offset = 0, math.pi * 2, math.pi * 2 / 120 do -- 120 -- Code that generates the meshes end The new code will create 121 frames or meshes for us, out of which 120 will be used. (This is because the last and first frames are the same.) If you save the files and run your level, you might notice that the animation is getting reset halfway through. This is because at the 60th frame, we have gone only 50% through the animation. Since we now have 120 frames, we need to change the code in level.lua to account for this change. Open level.lua and change the line if mesh_index > 59 then mesh_index = 0 end to if mesh_index > 119 then mesh_index = 0 end The new code now shows the complete animation when running the level. However, it is visibly slower. Why is this the case? Remember, in the previous case, the variable angle_offset was increasing by 2Ï€/60 every frame. Now, it is increasing by 2Ï€/120 every frame. You might be wondering why we did this. This is because to achieve a 60 FPS animation that runs with the same speed, we need to have double the amount of frames that we had previously. We now just need to speed the animation back to its original speed. Open level.lua and change mesh_index = mesh_index + 1 to mesh_index = mesh_index + 2 This should make the animation return to its original speed, as we are skipping every other frame. However, if you save the files and run your level, you will notice no change between the current animation and the one we had at the start. You would in fact be right, there is no difference between the two. Our animation still runs at 30 FPS. This is where flipping meshes comes into play. Open level.lua and replace pewpew.customizable_entity_set_mesh(id, \"/dynamic/graphics.lua\", mesh_index) with pewpew.customizable_entity_set_flipping_meshes(id, \"/dynamic/graphics.lua\", mesh_index, mesh_index + 1) What does this exactly do? When we set flipping meshes of an entity, that entity goes over the two specified meshes in a single game tick. This means that, in the first game tick, it will have the mesh at index 0 for half a tick and will have the mesh at index 1 for the rest half of a tick. In the next tick, we are resetting the flipping meshes. The variable mesh_index now has a value of 2. The entity now has the mesh at index 2 for half a tick and has the mesh at index 3 for half a tick. Notice that we have gone over 4 meshes in just 2 game ticks (2 meshes per game tick)! The way in which we have used this creates an animation that runs at 60 FPS. Now, if you save the files and run your level, you'll notice that it is a lot smoother than our initial animation. It is exactly twice as smooth. It might look something like this: Congratulations! You have successfully made an animation that runs at 60 frames per second. I hope that you were able to understand this fairly well. Now, experiment with your code and make creative animations.","s":"Making the animation 60 FPS","u":"/ppl-docs/docs/Guides/Other/fps-animation","h":"#making-the-animation-60-fps","p":106},{"i":122,"t":"This community-maintained wiki holds the resources useful for creating custom levels for PewPew Live. Levels are created by writing Lua code. If you are new to programming or new to Lua, a good first step is to start with the Beginner guide. If you are already familiar with programming, a good approach is to first look at the examples (for example, the simple_level) to get a feeling of how a level is made, and then come back to the wiki to get more precise information about the various aspect of level creation. If you have questions, the game's creator and many level creators are available on Discord.","s":"Introduction","u":"/ppl-docs/docs/intro","h":"","p":121},{"i":124,"t":"A level is a directory that contains a manifest and Lua files. The Lua files fall in three categories: Files that describe graphics. Files that describe sounds. Files that describe the behavior of the level. They make use of the pewpew and fmath libraries, which require an understanding of the types used.","s":"Level structure","u":"/ppl-docs/docs/intro","h":"#level-structure","p":121},{"i":126,"t":"You can upload your level by signing into your account on https://pewpew.live and navigating to the Manage your custom levels page.","s":"Uploading your level","u":"/ppl-docs/docs/intro","h":"#uploading-your-level","p":121},{"i":128,"t":"When writing code, it is recommended to follow LuaRocks's style guide, but using 2 space indentation to be consistent with the rest of PewPew's codebase.","s":"Recommended Lua Style guide","u":"/ppl-docs/docs/intro","h":"#recommended-lua-style-guide","p":121},{"i":130,"t":"PewPew Snippets is an essential Visual Studio Code extension that offers autocompletion and useful code snippets for creating levels. PewPewLive-MeshExporter is a Blender plugin for converting scenes into PewPew Live 3D meshes. PPLAF is an opinionated Lua framework for creating advanced levels.","s":"Helpful tools and utilities","u":"/ppl-docs/docs/intro","h":"#helpful-tools-and-utilities","p":121},{"i":133,"t":"Gameplay is king. Prefer procedurally generated graphics over manually created graphics. Prefer angular designs instead of curved designs. Prefer abstract designs over realistic designs.","s":"General guidelines","u":"/ppl-docs/docs/other/level-design-principles","h":"#general-guidelines","p":131},{"i":136,"t":"Corners reduce the exposure of the players' ships, so players will naturally tend to hide there. Either incentivize players to move by putting bonuses away from the corners, or de-incentivize players from staying there by spawning enemies there. The same thing applies (to a lesser extent) to level's borders.","s":"Users will try to camp in the corners","u":"/ppl-docs/docs/other/level-design-principles","h":"#users-will-try-to-camp-in-the-corners","p":131},{"i":138,"t":"If players have a very slim chance of getting a bonus that massively increases their score, the top of the leaderboard will be populated by people that were lucky, not by people that were skilled. This is not necessarily a bad thing, but it's something to keep in mind.","s":"Fair randomness","u":"/ppl-docs/docs/other/level-design-principles","h":"#fair-randomness","p":131},{"i":140,"t":"Ask yourself if it is possible for the player to accumulate a lot of points (or a lot of shields) simply by not triggering an event. For example, I once made a level where shields kept appearing until all enemies were killed. Some players discovered that by leaving one enemy alive, they could farm shields.","s":"Be mindful of farming","u":"/ppl-docs/docs/other/level-design-principles","h":"#be-mindful-of-farming","p":131},{"i":143,"t":"At most 1300 entities can exist at any given moment. This includes the player's bullet. If there are already 1300 entities, no more entities will be created. This means that the player won't be able to shoot.","s":"Entity count","u":"/ppl-docs/docs/other/level-restrictions","h":"#entity-count","p":141},{"i":145,"t":"A game lasts at most 1 hour. If the level has not called stop_game by then, it will be called automatically. The reason for this limitation is that replays then become too large.","s":"Duration","u":"/ppl-docs/docs/other/level-restrictions","h":"#duration","p":141},{"i":147,"t":"The Lua interpreter can't use more than 500KB of memory when running a level. Unless you have a memory leak in your level, this shouldn't be a problem. The Lua interpreter can't use more than 3MB of memory when loading a mesh. You will need to split a mesh into multiple files if you are hitting this limit. The Lua interpreter can't use more than 3MB of memory when loading sounds. Unless you are doing something really crazy, this will never be a problem.","s":"Memory usage","u":"/ppl-docs/docs/other/level-restrictions","h":"#memory-usage","p":141},{"i":149,"t":"This page contains a random bag of technical information concerning PewPew Live.","s":"Trivia","u":"/ppl-docs/docs/other/trivia","h":"","p":148},{"i":151,"t":"PewPew Live uses a fork of Lua 5.3.","s":"The Lua interpreter","u":"/ppl-docs/docs/other/trivia","h":"#the-lua-interpreter","p":148},{"i":153,"t":"PewPew Live's version numbers consist of 3 parts: MAJOR.MINOR.BUILD MAJOR and MINOR may get updated with any significant release. The BUILD number is an ever-increasing number representing a point in time of PewPew Live's development.","s":"Version number","u":"/ppl-docs/docs/other/trivia","h":"#version-number","p":148},{"i":155,"t":"PewPew Live uses several different ports. Multiplayer servers open the 51980 UDP port. If the port is unavailable, the server will try all ports up to 51989. If they are all taken, it will try to open ports random ports in the 49152-65535 range. LAN multiplayer room discovery is made by broadcasting on the ports 19869, 23902, 28013, 40124, 58240. The custom level development server exposes an http server on the TCP port 9000.","s":"Ports","u":"/ppl-docs/docs/other/trivia","h":"#ports","p":148},{"i":157,"t":"The pewpew library contains all the functions for configuring levels and managing entities.","s":"pewpew library","u":"/ppl-docs/docs/APIs/PewPew","h":"","p":156},{"i":160,"t":"ASTEROID BAF INERTIAC MOTHERSHIP MOTHERSHIP_BULLET ROLLING_CUBE ROLLING_SPHERE UFO WARY CROWDER CUSTOMIZABLE_ENTITY SHIP BOMB BAF_BLUE BAF_RED WARY_MISSILE UFO_BULLET PLAYER_BULLET BOMB_EXPLOSION PLAYER_EXPLOSION BONUS FLOATING_MESSAGE POINTONIUM BONUS_IMPLOSION","s":"EntityType","u":"/ppl-docs/docs/APIs/PewPew","h":"#entitytype","p":156},{"i":162,"t":"THREE_CORNERS FOUR_CORNERS FIVE_CORNERS SIX_CORNERS SEVEN_CORNERS","s":"MothershipType","u":"/ppl-docs/docs/APIs/PewPew","h":"#mothershiptype","p":156},{"i":164,"t":"SINGLE TIC_TOC DOUBLE TRIPLE FOUR_DIRECTIONS DOUBLE_SWIPE HEMISPHERE","s":"CannonType","u":"/ppl-docs/docs/APIs/PewPew","h":"#cannontype","p":156},{"i":166,"t":"FREQ_30 FREQ_15 FREQ_10 FREQ_7_5 FREQ_6 FREQ_5 FREQ_3 FREQ_2 FREQ_1","s":"CannonFrequency","u":"/ppl-docs/docs/APIs/PewPew","h":"#cannonfrequency","p":156},{"i":168,"t":"FREEZE REPULSIVE ATOMIZE SMALL_ATOMIZE SMALL_FREEZE","s":"BombType","u":"/ppl-docs/docs/APIs/PewPew","h":"#bombtype","p":156},{"i":170,"t":"REINSTANTIATION SHIELD SPEED WEAPON","s":"BonusType","u":"/ppl-docs/docs/APIs/PewPew","h":"#bonustype","p":156},{"i":172,"t":"BULLET FREEZE_EXPLOSION REPULSIVE_EXPLOSION ATOMIZE_EXPLOSION","s":"WeaponType","u":"/ppl-docs/docs/APIs/PewPew","h":"#weapontype","p":156},{"i":174,"t":"SMALL MEDIUM LARGE VERY_LARGE","s":"AsteroidSize","u":"/ppl-docs/docs/APIs/PewPew","h":"#asteroidsize","p":156},{"i":177,"t":"pewpew.print(str: string) Prints str in the console for debugging. Example: local some_number = 42 pewpew.print(\"the value of some_number is: \" .. some_number)","s":"print()","u":"/ppl-docs/docs/APIs/PewPew","h":"#print","p":156},{"i":179,"t":"pewpew.print_debug_info() Prints debug info: the number of entities created and the amount of memory used by the script. Example: pewpew.print_debug_info()","s":"print_debug_info()","u":"/ppl-docs/docs/APIs/PewPew","h":"#print_debug_info","p":156},{"i":181,"t":"pewpew.set_level_size( width: FixedPoint, height: FixedPoint ) Sets the level's size. Implicetely adds walls to make sure that entities can not go outside of the level's boundaries. width and height are clamped to the range ]0fx, 6000fx]. If this function is not called, the level size is (10fx, 10fx), which is uselessly small for most cases. Example: local width = 300fx local height = 200fx pewpew.set_level_size(width, height)","s":"set_level_size()","u":"/ppl-docs/docs/APIs/PewPew","h":"#set_level_size","p":156},{"i":183,"t":"pewpew.add_wall( start_x: FixedPoint, start_y: FixedPoint, end_x: FixedPoint, end_y: FixedPoint ): int Adds a wall to the level from (start_x,start_y) to (end_x,end_y), and returns its wall ID. A maximum of 200 walls can be added to a level. Example: pewpew.add_wall(100fx, 100fx, 200fx, 200fx)","s":"add_wall()","u":"/ppl-docs/docs/APIs/PewPew","h":"#add_wall","p":156},{"i":185,"t":"pewpew.remove_wall(wall_id: int) Remove the wall with the given wall_id. Example: local wall_id = pewpew.add_wall(100fx, 100fx, 200fx, 200fx) -- Later, when the wall needs to be removed: pewpew.remove_wall(wall_id)","s":"remove_wall()","u":"/ppl-docs/docs/APIs/PewPew","h":"#remove_wall","p":156},{"i":187,"t":"pewpew.add_update_callback(update_callback: function) Adds a callback that will be updated at each game tick. Example: local tick_count = 0 pewpew.add_update_callback(function() pewpew.print(\"this is tick \" .. tick_count) tick_count = tick_count + 1 end)","s":"add_update_callback()","u":"/ppl-docs/docs/APIs/PewPew","h":"#add_update_callback","p":156},{"i":189,"t":"pewpew.get_number_of_players(): int Returns the number of players in the game.","s":"get_number_of_players()","u":"/ppl-docs/docs/APIs/PewPew","h":"#get_number_of_players","p":156},{"i":191,"t":"pewpew.increase_score_of_player( player_index: int, delta: int ) Increases the score of the player at the specified player_index by an amount of delta. player_index must in the range [0, get_number_of_players() - 1]. Note that delta can be negative.","s":"increase_score_of_player()","u":"/ppl-docs/docs/APIs/PewPew","h":"#increase_score_of_player","p":156},{"i":193,"t":"pewpew.increase_score_streak_of_player( player_index: int, delta: int ) Increases the score streak counter of the player at the specified player_index by an amount of delta. This counter is used to determine at which level of score streak the player is at. In turn, the score streak level is used to determine how much pointonium is given. Typically the score streak counter should be increased when an enemy is destroyed with the same score that the enemy provide. player_index must in the range [0, get_number_of_players() - 1]. Note that delta can be negative.","s":"increase_score_streak_of_player()","u":"/ppl-docs/docs/APIs/PewPew","h":"#increase_score_streak_of_player","p":156},{"i":195,"t":"pewpew.get_score_streak_level(player_index: int): int Returns a number between 0 and 3. 0 is the lowest score streak (no pointonium is given), while 3 is the highest (3 pointoniums is usually given)","s":"get_score_streak_level()","u":"/ppl-docs/docs/APIs/PewPew","h":"#get_score_streak_level","p":156},{"i":197,"t":"pewpew.stop_game() Ends the current game.","s":"stop_game()","u":"/ppl-docs/docs/APIs/PewPew","h":"#stop_game","p":156},{"i":199,"t":"pewpew.get_player_inputs(player_index: int): FixedPoint, FixedPoint, FixedPoint, FixedPoint Returns the inputs of the player at the specified index. The return values are in order: the movement joystick's angle (between 0 and 2pi), the movement joystick's distance (between 0 and 1), the shoot joystick's angle (between 0 and 2pi), and the shoot joystick's distance (between 0 and 1). Example: local move_angle, move_distance, shoot_angle, shoot_distance = pewpew.get_player_inputs(0)","s":"get_player_inputs()","u":"/ppl-docs/docs/APIs/PewPew","h":"#get_player_inputs","p":156},{"i":201,"t":"pewpew.get_score_of_player(player_index: int): int Returns the score of the player at the specified player_index. player_index must in the range [0, get_number_of_players() - 1].","s":"get_score_of_player()","u":"/ppl-docs/docs/APIs/PewPew","h":"#get_score_of_player","p":156},{"i":203,"t":"pewpew.configure_player( player_index: int, configuration: table { has_lost: bool, shield: int, camera_x_override: FixedPoint, camera_y_override: FixedPoint, camera_distance: FixedPoint, camera_rotation_x_axis: FixedPoint, move_joystick_color: int, shoot_joystick_color: int } ) Configures the player at the specified player_index. player_index must in the range [0, get_number_of_players() - 1]. A camera_distance less than 0fx makes the camera move away from the ship. camera_rotation_x_axis is in radian and rotates along the X axis. To temporarily override the XY position of the camera, set both camera_x_override and camera_y_override; this will make the camera be interpolated from wherever it was, to that new position. Example: pewpew.configure_player(0, {shield = 3, camera_distance = 50fx, move_joystick_color = 0xffff00ff})","s":"configure_player()","u":"/ppl-docs/docs/APIs/PewPew","h":"#configure_player","p":156},{"i":205,"t":"pewpew.configure_player_hud( player_index: int, configuration: table { top_left_line: string } ) Configures the player's HUD.player_index must in the range [0, get_number_of_players() - 1]. Example: pewpew.configure_player_hud(0, {top_left_line = \"Hello World\"})","s":"configure_player_hud()","u":"/ppl-docs/docs/APIs/PewPew","h":"#configure_player_hud","p":156},{"i":207,"t":"pewpew.get_player_configuration(player_index: int): table { shield: int, has_lost: bool } Returns a map containing the configuration of the player at the specified player_index. Example: local shield = pewpew.get_player_configuration(0).shield","s":"get_player_configuration()","u":"/ppl-docs/docs/APIs/PewPew","h":"#get_player_configuration","p":156},{"i":209,"t":"pewpew.configure_player_ship_weapon( ship_id: EntityId, configuration: table { frequency: int, cannon: int, duration: int } ) Configures the weapon of the ship identified with ship_id using configuration. frequency determines the frequency of the shots. cannon determines the type of cannon. duration determines the number of game ticks during which the weapon will be available. Once the duration expires, the weapon reverts to its permanent configuration. If duration is omitted, the weapon will be permanently set to this configuration. If frequency or cannon is omitted, the ship is configured to not have any weapon. Example: local weapon_config = {frequency = pewpew.CannonFrequency.FREQ_10, cannon = pewpew.CannonType.DOUBLE} local ship_id = player_helpers.new_player_ship(100fx, 200fx, 0) pewpew.configure_player_ship_weapon(ship_id, weapon_config)","s":"configure_player_ship_weapon()","u":"/ppl-docs/docs/APIs/PewPew","h":"#configure_player_ship_weapon","p":156},{"i":211,"t":"pewpew.add_damage_to_player_ship( ship_id: EntityId, damage: int ) Reduces the amount of shield of the player that owns the ship by damage points. If the player receives damage while having 0 shields left, the player loses.","s":"add_damage_to_player_ship()","u":"/ppl-docs/docs/APIs/PewPew","h":"#add_damage_to_player_ship","p":156},{"i":213,"t":"pewpew.add_arrow_to_player_ship( ship_id: EntityId, target_id: EntityId, color: int ): int Adds an arrow to the ship identified with ship_id pointing towards the entity identified with entity_id, and returns the identifier of the arrow. color specifies the arrow's color. The arrow is automatically removed when the target entity is destroyed.","s":"add_arrow_to_player_ship()","u":"/ppl-docs/docs/APIs/PewPew","h":"#add_arrow_to_player_ship","p":156},{"i":215,"t":"pewpew.remove_arrow_from_player_ship( ship_id: EntityId, arrow_id: int ) Removes the arrow identified by arrow_id from the ship identified by ship_id.","s":"remove_arrow_from_player_ship()","u":"/ppl-docs/docs/APIs/PewPew","h":"#remove_arrow_from_player_ship","p":156},{"i":217,"t":"pewpew.make_player_ship_transparent( ship_id: EntityId, transparency_duration: int ) Makes the player ship transparent for transparency_duration game ticks.","s":"make_player_ship_transparent()","u":"/ppl-docs/docs/APIs/PewPew","h":"#make_player_ship_transparent","p":156},{"i":219,"t":"pewpew.set_player_ship_speed( ship_id: EntityId, factor: FixedPoint, offset: FixedPoint, duration: int ): FixedPoint Sets and returns the effective speed of the specified player ship as a function of the base speed of the ship. By default, a player ship moves according to its base speed, which is 10 distance units per tick (in the future, different ships may have different base speeds). Assuming the base speed of the ship is S, the new effective speed will be (factor*S)+offset. duration is the number of ticks during which the effective speed will be applied. Afterwards, the ship's speed reverts to its base speed. If duration is negative, the effective speed never reverts to the base speed.","s":"set_player_ship_speed()","u":"/ppl-docs/docs/APIs/PewPew","h":"#set_player_ship_speed","p":156},{"i":221,"t":"pewpew.get_all_entities(): List Returns the list of the entityIDs of all the entities currently in the level. This includes the various bullets and all the custom entities. Example: local entities = pewpew.get_all_entities() pewpew.print(\"There are \" .. #entities .. \" entities in the level\")","s":"get_all_entities()","u":"/ppl-docs/docs/APIs/PewPew","h":"#get_all_entities","p":156},{"i":223,"t":"pewpew.get_entities_colliding_with_disk( center_x: FixedPoint, center_y: FixedPoint, radius: FixedPoint ): List Returns the list of collidable entities (which includes all enemies) that overlap with the given disk. Example: local entities = pewpew.get_entities_colliding_with_disk(100fx, 100fx, 30fx)","s":"get_entities_colliding_with_disk()","u":"/ppl-docs/docs/APIs/PewPew","h":"#get_entities_colliding_with_disk","p":156},{"i":225,"t":"pewpew.get_entity_count(type: int): int Returns the number of entities of type type that are alive. Example: local number_of_bafs = pewpew.get_entity_count(pewpew.EntityType.BAF) local number_of_asteroids = pewpew.get_entity_count(pewpew.EntityType.ASTEROID)","s":"get_entity_count()","u":"/ppl-docs/docs/APIs/PewPew","h":"#get_entity_count","p":156},{"i":227,"t":"pewpew.get_entity_type(entity_id: EntityId): int Returns the type of the given entity. Example: local type = pewpew.get_entity_type(id) if type == pewpew.EntityType.BAF then pewpew.print(\"the entity is a BAF\") end","s":"get_entity_type()","u":"/ppl-docs/docs/APIs/PewPew","h":"#get_entity_type","p":156},{"i":229,"t":"pewpew.play_ambient_sound( sound_path: string, index: int ) Plays the sound described at sound_path at the index index. Example: pewpew.play_ambient_sound(\"/dynamic/my_custom_sound.lua\", 0)","s":"play_ambient_sound()","u":"/ppl-docs/docs/APIs/PewPew","h":"#play_ambient_sound","p":156},{"i":231,"t":"pewpew.play_sound( sound_path: string, index: int, x: FixedPoint, y: FixedPoint ) Plays the sound described at sound_path at the in-game location of x,y. Example: pewpew.play_sound(\"/dynamic/my_custom_sound.lua\", 0, 100fx, 100fx)","s":"play_sound()","u":"/ppl-docs/docs/APIs/PewPew","h":"#play_sound","p":156},{"i":233,"t":"pewpew.create_explosion( x: FixedPoint, y: FixedPoint, color: int, scale: FixedPoint, particle_count: int ) Creates an explosion of particles at the location x,y. color specifies the color of the explosion. scale describes how large the explosion will be. It should be in the range ]0, 10], with 1 being an average explosion. particle_count specifies the number of particles that make up the explosion. It must be in the range [1, 100]. Example: pewpew.create_explosion(200fx, 100fx, 0xffffffff, 1fx, 20) -- medium explosion pewpew.create_explosion(300fx, 100fx, 0xffffffff, 3fx, 50) -- large red explosion","s":"create_explosion()","u":"/ppl-docs/docs/APIs/PewPew","h":"#create_explosion","p":156},{"i":235,"t":"pewpew.new_asteroid( x: FixedPoint, y: FixedPoint ): EntityId Creates a new Asteroid at the location x,y and returns its entityId.","s":"new_asteroid()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_asteroid","p":156},{"i":237,"t":"pewpew.new_asteroid_with_size( x: FixedPoint, y: FixedPoint, size: int ): EntityId Creates a new Asteroid at the location x,y with an AsteroidSize given by size and returns its entityId.","s":"new_asteroid_with_size()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_asteroid_with_size","p":156},{"i":239,"t":"pewpew.new_baf( x: FixedPoint, y: FixedPoint, angle: FixedPoint, speed: FixedPoint, lifetime: int ): EntityId Creates a new BAF at the location x,y, and returns its entityId. angle specifies the angle at which the BAF will move. speed specifies the maximum speed it will reach. lifetime indicates the number of game ticks after which the BAF is destroyed the next time it hits a wall. Specify a negative lifetime to create a BAF that lives forever.","s":"new_baf()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_baf","p":156},{"i":241,"t":"pewpew.new_baf_red( x: FixedPoint, y: FixedPoint, angle: FixedPoint, speed: FixedPoint, lifetime: int ): EntityId Creates a new red BAF at the location x,y, and returns its entityId. A red BAF has more health points than a regular BAF. angle specifies the angle at which the BAF will move. speed specifies the maximum speed it will reach. lifetime indicates the number of game ticks after which the BAF is destroyed the next time it hits a wall. Specify a negative lifetime to create a BAF that lives forever.","s":"new_baf_red()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_baf_red","p":156},{"i":243,"t":"pewpew.new_baf_blue( x: FixedPoint, y: FixedPoint, angle: FixedPoint, speed: FixedPoint, lifetime: int ): EntityId Creates a new blue BAF at the location x,y, and returns its entityId. A blue BAF bounces on walls with a slightly randomized angle. angle specifies the angle at which the BAF will move. speed specifies the maximum speed it will reach. lifetime indicates the number of game ticks after which the BAF is destroyed the next time it hits a wall. Specify a negative lifetime to create a BAF that lives forever.","s":"new_baf_blue()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_baf_blue","p":156},{"i":245,"t":"pewpew.new_bomb( x: FixedPoint, y: FixedPoint, type: int ): EntityId Creates a new Bomb at the location x,y, and returns its entityId. Example: pewpew.new_bomb(10fx, 10fx, pewpew.BombType.SMALL_ATOMIZE)","s":"new_bomb()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_bomb","p":156},{"i":247,"t":"pewpew.new_bonus( x: FixedPoint, y: FixedPoint, type: int, config: table { box_duration: int, cannon: int, frequency: int, weapon_duration: int, number_of_shields: int, speed_factor: FixedPoint, speed_offset: FixedPoint, speed_duration: int, taken_callback: function } ): EntityId Creates a new Bonus at the location x,y of the type type, and returns its entityId. For shield bonuses, the option number_of_shields determines how many shields are given out. For weapon bonuses, the options cannon, frequency, weapon_duration have the same meaning as in pewpew.configure_player_ship_weapon. For speed bonuses, the options speed_factor, speed_offset,and speed_duration have the same meaning as in set_player_speed. taken_callback is called when the bonus is taken, and is mandatory for the reinstantiation bonus. The callback receives as arguments the entity id of the bonus, the player id, and the ship's entity id. The default box duration is 400 ticks. Example: pewpew.new_bonus(10fx, 10fx, pewpew.BonusType.WEAPON, {cannon = pewpew.CannonType.TIC_TOC, frequency = pewpew.CannonFrequency.FREQ_5, weapon_duration = 100}) pewpew.new_bonus(10fx, 10fx, pewpew.BonusType.SHIELD, {number_of_shields = 3})","s":"new_bonus()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_bonus","p":156},{"i":249,"t":"pewpew.new_crowder( x: FixedPoint, y: FixedPoint ): EntityId Creates a new Crowder at the location x,y, and returns its entityId.","s":"new_crowder()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_crowder","p":156},{"i":251,"t":"pewpew.new_floating_message( x: FixedPoint, y: FixedPoint, str: string, config: table { scale: FixedPoint, ticks_before_fade: int, is_optional: bool } ): EntityId Creates a new floating message at the location x,y, with str as the message. The scale is a number that determines how large the message will be. 1 is the default scale. ticks_before_fade determines how many ticks occur before the message starts to fade out. is_optional can be used to tell the game if the message can be hidden depending on the user's UI settings. If not specified, scale is 1, ticks_before_fade is 30 and is_optional is false. Returns the floating message's entityId. Example: pewpew.new_floating_message(10fx, 10fx, \"hello\", {scale = 2fx, ticks_before_fade = 60, is_optional = true})","s":"new_floating_message()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_floating_message","p":156},{"i":253,"t":"pewpew.new_customizable_entity( x: FixedPoint, y: FixedPoint ): EntityId Creates a new customizable entity at the location x,y, and returns its entityId.","s":"new_customizable_entity()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_customizable_entity","p":156},{"i":255,"t":"pewpew.new_inertiac( x: FixedPoint, y: FixedPoint, acceleration: FixedPoint, angle: FixedPoint ): EntityId Creates a new Inertiac at the location x,y, and returns its entityId. The inertiac will accelerate according to acceleration. It spawns with a random velocity in a direction specified by angle.","s":"new_inertiac()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_inertiac","p":156},{"i":257,"t":"pewpew.new_mothership( x: FixedPoint, y: FixedPoint, type: int, angle: FixedPoint ): EntityId Creates a new Mothership at the location x,y, and returns its entityId. Example: pewpew.new_mothership(50fx, 50fx, pewpew.MothershipType.THREE_CORNERS, fmath.tau() / 4fx)","s":"new_mothership()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_mothership","p":156},{"i":259,"t":"pewpew.new_pointonium( x: FixedPoint, y: FixedPoint, value: int ): EntityId Creates a new Pointonium at the location x,y. Value must be 64, 128, or 256.","s":"new_pointonium()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_pointonium","p":156},{"i":261,"t":"pewpew.new_player_ship( x: FixedPoint, y: FixedPoint, player_index: int ): EntityId Creates a new Player Ship at the location x,y for the player identified by player_index, and returns its entityId.","s":"new_player_ship()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_player_ship","p":156},{"i":263,"t":"pewpew.new_player_bullet( x: FixedPoint, y: FixedPoint, angle: FixedPoint, player_index: int ): EntityId Creates a new bullet at the location x,y with the angle angle belonging to the player at the index player_index. Returns the entityId of the bullet.","s":"new_player_bullet()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_player_bullet","p":156},{"i":265,"t":"pewpew.new_rolling_cube( x: FixedPoint, y: FixedPoint ): EntityId Creates a new Rolling Cube at the location x,y, and returns its entityId.","s":"new_rolling_cube()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_rolling_cube","p":156},{"i":267,"t":"pewpew.new_rolling_sphere( x: FixedPoint, y: FixedPoint, angle: FixedPoint, speed: FixedPoint ): EntityId Creates a new Rolling Sphere at the location x,y, and returns its entityId.","s":"new_rolling_sphere()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_rolling_sphere","p":156},{"i":269,"t":"pewpew.new_wary( x: FixedPoint, y: FixedPoint ): EntityId Creates a new Wary at the location x,y.","s":"new_wary()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_wary","p":156},{"i":271,"t":"pewpew.new_ufo( x: FixedPoint, y: FixedPoint, dx: FixedPoint ): EntityId Creates a new UFO at the location x,y moving horizontally at the speed of dx, and returns its entityId.","s":"new_ufo()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_ufo","p":156},{"i":273,"t":"pewpew.rolling_cube_set_enable_collisions_with_walls( entity_id: EntityId, collide_with_walls: bool ) Sets whether the rolling cube identified with id collides with walls. By default it does not. Example: local x,y = pewpew.rolling_cube_set_enable_collisions_with_walls(id, true)","s":"rolling_cube_set_enable_collisions_with_walls()","u":"/ppl-docs/docs/APIs/PewPew","h":"#rolling_cube_set_enable_collisions_with_walls","p":156},{"i":275,"t":"pewpew.ufo_set_enable_collisions_with_walls( entity_id: EntityId, collide_with_walls: bool ) Sets whether the ufo identified with id collides with walls. By default it does not. Example: local x,y = pewpew.ufo_set_enable_collisions_with_walls(id, true)","s":"ufo_set_enable_collisions_with_walls()","u":"/ppl-docs/docs/APIs/PewPew","h":"#ufo_set_enable_collisions_with_walls","p":156},{"i":277,"t":"pewpew.entity_get_position(entity_id: EntityId): FixedPoint, FixedPoint Returns the position of the entity identified by id. Example: local x,y = pewpew.entity_get_position(entity_id)","s":"entity_get_position()","u":"/ppl-docs/docs/APIs/PewPew","h":"#entity_get_position","p":156},{"i":279,"t":"pewpew.entity_get_is_alive(entity_id: EntityId): bool Returns whether the entity identified by id is alive or not.","s":"entity_get_is_alive()","u":"/ppl-docs/docs/APIs/PewPew","h":"#entity_get_is_alive","p":156},{"i":281,"t":"pewpew.entity_get_is_started_to_be_destroyed(entity_id: EntityId): bool Returns whether the entity identified by id is in the process of being destroyed. Returns false if the entity does not exist.","s":"entity_get_is_started_to_be_destroyed()","u":"/ppl-docs/docs/APIs/PewPew","h":"#entity_get_is_started_to_be_destroyed","p":156},{"i":283,"t":"pewpew.entity_set_position( entity_id: EntityId, x: FixedPoint, y: FixedPoint ) Sets the position of the entity identified by id to x,y","s":"entity_set_position()","u":"/ppl-docs/docs/APIs/PewPew","h":"#entity_set_position","p":156},{"i":285,"t":"pewpew.entity_set_radius( entity_id: EntityId, radius: FixedPoint ) Sets the radius of the entity identified by id. To give you a sense of scale, motherships have a radius of 28fx.","s":"entity_set_radius()","u":"/ppl-docs/docs/APIs/PewPew","h":"#entity_set_radius","p":156},{"i":287,"t":"pewpew.entity_set_update_callback( entity_id: EntityId, callback: function ) Sets a callback that will be called at every tick as long as the entity identified by id is alive. Remove the callback by passing a nil callback. The callbacks gets called with the entity ID. Example: local function my_update_callback(entity_id) local x,y = pewpew.entity_get_position(entity_id) pewpew.entity_set_position(entity_id, x + 2fx, y) -- move the entity to the right end pewpew.entity_set_update_callback(entity_id, my_update_callback)","s":"entity_set_update_callback()","u":"/ppl-docs/docs/APIs/PewPew","h":"#entity_set_update_callback","p":156},{"i":289,"t":"pewpew.entity_destroy(entity_id: EntityId) Makes the entity identified by id immediately disappear forever.","s":"entity_destroy()","u":"/ppl-docs/docs/APIs/PewPew","h":"#entity_destroy","p":156},{"i":291,"t":"pewpew.entity_react_to_weapon( entity_id: EntityId, weapon: table { type: int, x: FixedPoint, y: FixedPoint, player_index: int } ): bool Makes the entity identified by id react to the weapon described in weapon_description. Returns whether the entity reacted to the weapon. The returned value is typically used to decide whether the weapon should continue to exist or not. In the case of an explosion, x and y should store the origin of the explosion. In the case of a bullet, x and y should store the vector of the bullet. The player identified by player_index will be assigned points. If player_index is invalid, no player will be assigned points.","s":"entity_react_to_weapon()","u":"/ppl-docs/docs/APIs/PewPew","h":"#entity_react_to_weapon","p":156},{"i":293,"t":"pewpew.customizable_entity_set_position_interpolation( entity_id: EntityId, enable: bool ) Sets whether the position of the mesh wil be interpolated when rendering. In general, this should be set to true if the entity will be moving smoothly.","s":"customizable_entity_set_position_interpolation()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_set_position_interpolation","p":156},{"i":295,"t":"pewpew.customizable_entity_set_mesh( entity_id: EntityId, file_path: string, index: int ) Sets the mesh of the customizable entity identified by id to the mesh described in the file file_path at the index index. index starts at 0. If file_path is an empty string, the mesh is removed. Example: local id = pewpew.new_customizable_entity(0fx, 0fx) pewpew.customizable_entity_set_mesh(id, \"/dynamic/graphics.lua\", 0)","s":"customizable_entity_set_mesh()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_set_mesh","p":156},{"i":297,"t":"pewpew.customizable_entity_set_flipping_meshes( entity_id: EntityId, file_path: string, index_0: int, index_1: int ) Similar to customizable_entity_set_mesh, but sets two meshes that will be used in alternation. By specifying 2 separate meshes, 60 fps animations can be achieved. Example: local id = pewpew.new_customizable_entity(0fx, 0fx) pewpew.customizable_entity_set_flipping_meshes(id, \"/dynamic/graphics.lua\", 0, 1)","s":"customizable_entity_set_flipping_meshes()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_set_flipping_meshes","p":156},{"i":299,"t":"pewpew.customizable_entity_set_mesh_color( entity_id: EntityId, color: int ) Sets the color multiplier for the mesh of the customizable entity identified by id.","s":"customizable_entity_set_mesh_color()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_set_mesh_color","p":156},{"i":301,"t":"pewpew.customizable_entity_set_string( entity_id: EntityId, text: string ) Sets the string to be displayed as part of the mesh of the customizable entity identified by id.","s":"customizable_entity_set_string()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_set_string","p":156},{"i":303,"t":"pewpew.customizable_entity_set_mesh_xyz( entity_id: EntityId, x: FixedPoint, y: FixedPoint, z: FixedPoint ) Sets the position of the mesh to x,y,z, relative to the center ofthe customizable entity identified by id","s":"customizable_entity_set_mesh_xyz()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_set_mesh_xyz","p":156},{"i":305,"t":"pewpew.customizable_entity_set_mesh_z( entity_id: EntityId, z: FixedPoint ) Sets the height of the mesh of the customizable entity identified by id. A z greater to 0 makes the mesh be closer, while a z less than 0 makes the mesh be further away.","s":"customizable_entity_set_mesh_z()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_set_mesh_z","p":156},{"i":307,"t":"pewpew.customizable_entity_set_mesh_scale( entity_id: EntityId, scale: FixedPoint ) Sets the scale of the mesh of the customizable entity identified by id. A scale less than 1 makes the mesh appear smaller, while a scale greater than 1 makes the mesh appear larger.","s":"customizable_entity_set_mesh_scale()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_set_mesh_scale","p":156},{"i":309,"t":"pewpew.customizable_entity_set_mesh_xyz_scale( entity_id: EntityId, x_scale: FixedPoint, y_scale: FixedPoint, z_scale: FixedPoint ) Sets the scale of the mesh of the customizable entity identified by id along the x,y,z axis. A scale less than 1 makes the mesh appear smaller, while a scale greater than 1 makes the mesh appear larger.","s":"customizable_entity_set_mesh_xyz_scale()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_set_mesh_xyz_scale","p":156},{"i":311,"t":"pewpew.customizable_entity_set_mesh_angle( entity_id: EntityId, angle: FixedPoint, x_axis: FixedPoint, y_axis: FixedPoint, z_axis: FixedPoint ) Sets the rotation angle of the mesh of the customizable entity identified by id. The rotation is applied along the axis defined by x_axis,y_axis,z_axis. Example: -- Rotate the entity by 45 degrees along the z_axis pewpew.customizable_entity_set_mesh_angle(entity_id, fmath.tau() / 8fx, 0fx, 0fx, 1fx)","s":"customizable_entity_set_mesh_angle()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_set_mesh_angle","p":156},{"i":313,"t":"pewpew.customizable_entity_skip_mesh_attributes_interpolation(entity_id: EntityId) Skips the interpolation of the mesh's attributes (x, y, z, scale_x, scale_y, scale_z, rotation).","s":"customizable_entity_skip_mesh_attributes_interpolation()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_skip_mesh_attributes_interpolation","p":156},{"i":315,"t":"pewpew.customizable_entity_configure_music_response( entity_id: EntityId, config: table { color_start: int, color_end: int, scale_x_start: FixedPoint, scale_x_end: FixedPoint, scale_y_start: FixedPoint, scale_y_end: FixedPoint, scale_z_start: FixedPoint, scale_z_end: FixedPoint } ) Configures the way the entity is going to respond to the music. Example: -- Makes the entity larger pewpew.customizable_entity_configure_music_response(entity_id, {scale_x_start = 1fx, scale_x_end = 2fx})","s":"customizable_entity_configure_music_response()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_configure_music_response","p":156},{"i":317,"t":"pewpew.customizable_entity_add_rotation_to_mesh( entity_id: EntityId, angle: FixedPoint, x_axis: FixedPoint, y_axis: FixedPoint, z_axis: FixedPoint ) Adds a rotation to the mesh of the customizable entity identified by id. The rotation is applied along the axis defined by x_axis,y_axis,z_axis. Example: -- Rotate the entity by 45 degrees along the z_axis pewpew.customizable_entity_add_rotation_to_mesh(entity_id, fmath.tau() / 8fx, 0fx, 0fx, 1fx)","s":"customizable_entity_add_rotation_to_mesh()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_add_rotation_to_mesh","p":156},{"i":319,"t":"pewpew.customizable_entity_set_visibility_radius( entity_id: EntityId, radius: FixedPoint ) Sets the radius defining the visibility of the entity. This allows the game to know when an entity is actually visible, which in turns allows to massively optimize the rendering. Use the smallest value possible. If not set, the rendering radius is an unspecified large number that effectively makes the entity always be rendered, even if not visible.","s":"customizable_entity_set_visibility_radius()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_set_visibility_radius","p":156},{"i":321,"t":"pewpew.customizable_entity_configure_wall_collision( entity_id: EntityId, collide_with_walls: bool, collision_callback: function ) collide_with_walls configures whether the entity should stop when colliding with walls. If collision_callback is not nil, it is called anytime a collision is detected. The callback gets called with the entity id of the entity withthe callback, and with the normal to the wall. Example: function my_wall_collision_callback(entity_id, wall_normal_x, wall_normal_y) pewpew.print(\"A wall collision happened with entity \" .. entity_id) end local id = pewpew.new_customizable_entity(100fx, 100fx) pewpew.customizable_entity_configure_wall_collision(id, my_wall_collision_callback)","s":"customizable_entity_configure_wall_collision()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_configure_wall_collision","p":156},{"i":323,"t":"pewpew.customizable_entity_set_player_collision_callback( entity_id: EntityId, collision_callback: function ) Sets the callback for when the customizable entity identified by id collides with a player's ship. The callback gets called with the entity id of the entity with the callback, and the player_index and ship_id that were involved in the collision. Don't forget to set a radius on the customizable entity, otherwise no collisions will be detected. Example: function my_collision_callback(entity_id, player_index, ship_entity_id) pewpew.print(\"The entity: \" .. entity_id) pewpew.print(\"Collided with the ship: \" .. ship_entity_id) pewpew.print(\"That belongs to the player: \" .. player_index) end local id = pewpew.new_customizable_entity(100fx, 100fx) pewpew.customizable_entity_set_player_collision_callback(id, my_collision_callback)","s":"customizable_entity_set_player_collision_callback()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_set_player_collision_callback","p":156},{"i":325,"t":"pewpew.customizable_entity_set_weapon_collision_callback( entity_id: EntityId, weapon_collision_callback: function ) Sets the callback for when the customizable entity identified by id collides with a player's weapon. The callback gets called with the entity_id of the entity on which the callback is set, the player_index of the player that triggered the weapon, and the type of the weapon. The callback must return a boolean saying whether the entity reacts to the weapon. In the case of a bullet, this boolean determines whether the bullet should be destroyed. Example: local id = pewpew.new_customizable_entity(100fx, 100fx) pewpew.customizable_entity_set_weapon_collision_callback(id, function(entity_id, player_index, weapon_type) pewpew.print(\"Collided with weapon from player: \" .. player_index) if weapon_type == pewpew.WeaponType.BULLET then pewpew.print(\"Collided with bullet!\") end return true end)","s":"customizable_entity_set_weapon_collision_callback()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_set_weapon_collision_callback","p":156},{"i":327,"t":"pewpew.customizable_entity_start_spawning( entity_id: EntityId, spawning_duration: int ) Makes the customizable entity identified by id spawn for a duration of spawning_duration game ticks.","s":"customizable_entity_start_spawning()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_start_spawning","p":156},{"i":329,"t":"pewpew.customizable_entity_start_exploding( entity_id: EntityId, explosion_duration: int ) Makes the customizable entity identified by id explode for a duration of explosion_duration game ticks. After the explosion, the entity is destroyed. explosion_duration must be less than 255. Any scale applied to the entity is also applied to the explosion.","s":"customizable_entity_start_exploding()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_start_exploding","p":156}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/3",[0,5.159,1,3.122,2,5.159,3,5.159,4,5.159,5,2.82,6,5.159,7,3.947,8,1.765,9,3.947,10,4.962,11,3.122,12,5.159,13,4.224,14,1.8,15,2.82,16,4.595,17,5.159,18,4.224,19,5.159,20,3.012,21,2.912,22,4.595,23,5.159,24,5.159,25,4.595,26,4.224,27,1.872,28,4.595,29,2.077,30,5.159,31,5.159]],["t/5",[32,5.654,33,3.255,34,2.093,35,5.137,36,2.542,37,4.412,38,1.359,39,2.322,40,3.959,41,4.722,42,7.391,43,6.051,44,4.473,45,3.042,46,4.649,47,1.765,48,5.137]],["t/8",[38,1.964,40,4.809,49,7.006,50,1.829,51,5.059,52,3.017,53,5.059]],["t/10",[38,2.072,50,1.6,52,2.639,54,6.128,55,6.869,56,6.418,57,0.698,58,4.207,59,3.349,60,4.019,61,4.207]],["t/12",[40,4.315,50,1.641,55,6.949,56,6.493,57,0.716,59,3.436,60,4.122,61,4.315,62,6.286,63,2.254]],["t/14",[38,1.915,50,1.754,60,4.405,61,4.611,64,6.718,65,5.5,66,6.718,67,2.487,68,2.488]],["t/16",[38,1.839,50,1.641,52,2.707,57,0.716,61,4.315,63,2.073,69,6.286,70,6.286,71,7.803,72,4.809,73,4.809,74,6.286,75,6.286]],["t/18",[38,1.675,50,1.856,52,3.061,63,1.888,76,7.108,77,5.82,78,4.661]],["t/20",[38,1.998,50,1.883,52,3.106,79,7.213,80,7.213]],["t/22",[38,1.915,50,1.754,52,3.5,63,1.784,73,5.139,77,5.5,78,5.33,81,6.718]],["t/24",[38,2.071,50,1.778,82,6.811,83,6.811,84,6.811,85,4.102,86,6.067]],["t/26",[38,1.977,50,2.005,52,3.307,57,0.698,59,3.349,67,1.875,68,2.269,87,6.128,88,2.019,89,6.128,90,6.128,91,5.459,92,6.128,93,2.908]],["t/28",[38,1.699,50,1.883,57,0.822,93,3.423,94,5.518,95,6.425]],["t/31",[39,1.934,40,3.297,45,2.695,47,1.47,52,2.068,72,5.011,96,3.824,97,3.297,98,3.469,99,3.022,100,4.887,101,4.496,102,3.63,103,3.297,104,3.469,105,4.295,106,1.71,107,3.933,108,4.279,109,4.279,110,3.675,111,4.279,112,3.933,113,4.279,114,4.279,115,4.804,116,3.675,117,4.804,118,4.804,119,4.804]],["t/33",[10,1.599,15,1.992,16,1.973,29,0.892,38,1.402,39,2.167,40,3.188,45,0.912,47,1.821,52,3.043,57,0.991,59,1.211,68,0.82,73,2.789,77,1.814,78,3.53,85,1.109,96,3.95,99,1.393,108,1.973,110,3.553,114,1.973,120,1.814,121,1.051,122,1.973,123,2.215,124,1.695,125,1.973,126,1.973,127,1.814,128,1.973,129,1.814,130,2.215,131,1.877,132,1.695,133,1.599,134,0.976,135,1.973,136,2.215,137,1.973,138,1.341,139,1.992,140,1.973,141,2.215,142,2.682,143,2.128,144,2.215,145,1.973,146,2.215,147,2.215,148,2.215,149,1.973,150,2.215,151,2.215,152,3.247,153,1.814,154,4.645,155,3.645,156,1.825,157,2.215,158,1.973,159,2.215,160,1.973,161,2.215,162,1.973,163,1.973,164,1.695,165,2.215,166,2.215,167,1.52,168,1.436,169,2.215,170,2.215,171,2.215,172,3.645,173,3.645,174,2.215,175,2.215,176,2.215,177,1.973,178,1.453,179,2.215,180,1.973,181,1.973,182,1.695,183,1.599,184,1.973]],["t/35",[40,4.741,45,2.843,100,4.53,185,2.558,186,1.967,187,1.521,188,6.153,189,6.907,190,6.907]],["t/37",[47,1.923,96,3.67,178,4.122,191,5.599,192,5.147,193,5.147,194,4.539,195,4.539,196,2.983,197,5.599,198,3.805,199,6.286,200,3.146,201,5.147,202,5.599,203,4.809]],["t/39",[14,1.966,39,2.269,45,2.319,46,4.58,47,2.228,96,3.289,121,2.674,134,2.483,138,3.41,188,5.019,204,6.171,205,3.867,206,5.634,207,2.174,208,3.41,209,4.613,210,5.019,211,4.613,212,4.613,213,5.634,214,5.634]],["t/41",[8,1.928,29,2.269,32,4.31,43,5.961,44,5.344,47,1.724,134,2.483,196,2.674,200,2.82,207,2.174,208,3.41,215,5.634,216,5.634,217,4.31,218,2.426,219,2.674,220,4.31,221,5.019,222,5.019,223,3.867]],["t/43",[10,3.977,36,2.427,44,4.342,134,2.427,139,3.01,184,4.906,200,2.757,202,4.906,224,4.213,225,4.906,226,5.507,227,4.906,228,5.507,229,5.507,230,5.507,231,5.507,232,5.507,233,5.507,234,5.507,235,5.507,236,5.507,237,4.906,238,5.507,239,4.906,240,4.509,241,4.213]],["t/45",[5,3.392,10,4.482,36,2.735,44,4.686,134,2.735,139,3.392,219,2.945,224,4.748,237,5.528,239,5.528,240,5.082,241,4.748,242,6.206,243,6.206,244,3.904,245,6.206]],["t/47",[8,1.27,10,2.68,20,2.166,36,2.404,39,1.494,43,4.466,44,3.914,47,1.135,55,3.038,56,2.839,58,3.744,121,1.761,131,1.91,134,2.85,137,3.305,139,2.028,158,3.305,191,3.305,198,2.246,204,2.839,207,1.432,208,2.246,217,4.172,220,2.839,224,2.839,240,3.038,241,2.839,246,1.222,247,3.305,248,3.038,249,3.711,250,3.711,251,3.711,252,3.711,253,3.711,254,3.711,255,3.711,256,3.711,257,3.711,258,3.711,259,3.711,260,3.711,261,3.711,262,3.711,263,3.711,264,3.711,265,3.711,266,3.711,267,3.711,268,3.711,269,3.711,270,3.711,271,3.711,272,3.711,273,3.711,274,5.454,275,2.547,276,5.454,277,1.761,278,3.711]],["t/49",[8,2.563,57,0.916,99,3.052,106,1.267,192,3.972,196,2.303,201,3.972,203,3.712,279,5.399,280,3.972,281,4.852,282,3.972,283,4.526,284,5.044,285,4.322,286,4.761,287,4.852,288,3.052,289,4.322,290,4.852,291,3.712,292,3.052,293,3.972,294,2.833,295,4.322,296,4.322,297,4.322,298,4.852,299,4.322,300,4.852]],["t/51",[1,2.334,8,2.64,33,3.732,56,2.951,68,1.428,99,2.426,103,2.647,121,1.83,124,2.951,192,3.158,197,3.436,200,3.31,203,2.951,225,3.436,283,3.851,284,4.292,285,3.436,286,4.051,289,3.436,291,4.292,292,2.426,293,4.594,295,3.436,296,3.436,297,3.436,299,3.436,301,2.647,302,3.857,303,2.334,304,2.785,305,2.426,306,3.158,307,3.857,308,2.785,309,3.857,310,2.647,311,3.436,312,3.436,313,3.158,314,1.785,315,2.252,316,2.647,317,3.436,318,1.587,319,3.857,320,5.61,321,2.785,322,2.785,323,3.857,324,2.785,325,2.529]],["t/53",[14,1.229,15,1.926,29,1.419,33,1.989,46,2.216,57,1.021,65,2.885,85,1.764,101,3.603,106,0.92,121,2.491,127,2.885,134,1.553,138,2.133,196,1.672,207,3.115,218,1.517,219,2.491,246,1.729,277,2.491,288,2.216,326,3.523,327,2.418,328,3.138,329,2.216,330,3.523,331,2.696,332,2.057,333,1.926,334,2.311,335,2.418,336,3.523,337,3.603,338,5.249,339,5.249,340,3.523,341,5.249,342,3.138,343,4.676,344,5.249,345,4.676,346,4.016,347,3.523,348,2.544,349,2.885,350,3.523]],["t/55",[33,3.641,39,3.457,72,4.936,121,3.062,204,4.936,321,4.659,329,4.058,337,5.893,351,5.747,352,6.452]],["t/57",[1,2.746,33,2.56,57,0.717,68,1.68,93,2.153,105,2.975,194,3.276,219,2.153,321,3.276,329,3.961,331,3.471,332,2.649,335,3.114,337,4.322,346,6.899,353,5.156,354,6.296,355,3.114,356,3.471,357,2.405,358,4.041,359,3.715,360,2.48,361,3.114,362,4.537,363,4.537,364,4.537,365,4.547,366,3.471,367,3.961,368,4.537]],["t/59",[33,3.824,52,2.175,97,3.468,101,5.849,109,4.5,110,3.865,111,4.5,113,4.5,116,5.85,207,1.949,308,3.648,321,4.893,337,4.651,345,4.5,355,3.468,369,4.137,370,5.052,371,3.648,372,6.036,373,5.052,374,5.052,375,3.648,376,4.137,377,5.052,378,5.052]],["t/61",[46,4.168,106,1.73,134,2.921,207,2.557,332,3.869,367,4.168,379,6.627,380,6.627,381,6.627,382,6.627,383,3.74,384,6.627]],["t/63",[8,2.179,14,2.222,15,3.48,99,4.006,207,2.457,385,4.176,386,5.214,387,5.672,388,4.006,389,4.371,390,5.672,391,5.672,392,6.368,393,4.872,394,6.368]],["t/65",[8,1.906,14,2.521,21,3.144,29,2.243,53,4.022,134,2.455,218,2.398,277,2.643,385,5.261,395,4.022,396,3.252,397,5.57,398,3.504,399,4.261,400,4.961,401,4.961,402,4.561,403,5.57,404,4.261,405,4.961,406,4.261,407,4.561,408,3.823]],["t/67",[29,1.379,46,2.154,47,1.572,57,0.937,65,2.804,91,3.051,105,4.495,106,1.61,138,2.073,139,1.872,196,1.625,208,4.148,218,1.475,219,1.625,321,2.473,331,3.931,332,2,349,4.208,383,1.933,409,2.351,410,4.208,411,3.425,412,5.139,413,3.425,414,5.139,415,3.425,416,3.425,417,3.425,418,3.425,419,3.425,420,3.425,421,6.854,422,3.425,423,3.425,424,3.425,425,3.425,426,3.425,427,3.425,428,3.425,429,3.425,430,3.425,431,3.425,432,3.425,433,3.051,434,3.425,435,3.425,436,3.425,437,3.425,438,3.425,439,3.425,440,3.425,441,5.139,442,2.804,443,2.804,444,2.804,445,3.425]],["t/69",[11,3.663,15,3.308,47,1.852,106,1.58,134,3.359,183,4.371,383,3.416,385,3.969,386,4.956,446,6.052,447,4.371,448,6.052,449,6.052,450,3.663,451,3.663,452,5.391,453,6.052,454,6.052]],["t/71",[35,4.644,39,2.099,57,0.943,131,2.684,200,3.464,455,4.269,456,5.666,457,4.831,458,3.765,459,5.214,460,3.419,461,5.214,462,5.214,463,6.92,464,6.164,465,6.164,466,4.269,467,4.269,468,3.765,469,5.214,470,3.28]],["t/73",[15,2.678,39,1.973,52,2.11,57,0.991,67,2.031,88,2.187,93,3.151,96,2.861,163,4.365,200,2.453,390,5.913,457,4.711,460,4.353,470,3.082,471,4.9,472,4.9,473,4.557,474,4.9,475,4.9,476,4.9,477,4.9,478,4.9,479,3.364,480,3.749]],["t/75",[52,1.562,57,0.929,60,2.379,61,3.682,67,2.158,88,1.767,152,6.281,277,3.029,294,4.989,313,2.971,322,5.434,334,2.379,457,3.726,460,4.935,470,2.282,479,2.49,481,2.62,482,3.628,483,3.645,484,7.525,485,5.364,486,4.778,487,4.778,488,3.232,489,5.226]],["t/77",[1,1.796,34,2.049,47,0.908,52,2.74,57,0.867,68,1.706,93,2.679,139,2.518,142,1.056,156,2.826,168,3.099,304,2.143,308,2.143,327,2.037,357,1.573,366,2.27,396,1.733,451,1.796,455,2.43,457,4.022,458,2.143,460,4.518,473,4.729,481,3.326,483,3.52,490,3.524,491,3.296,492,4.623,493,3.326,494,5.645,495,4.103,496,5.645,497,4.606,498,4.606,499,2.643,500,3.702,501,1.622,502,1.733,503,1.528,504,2.968,505,3.772,506,2.968,507,2.968,508,2.43]],["t/79",[13,2.278,20,1.624,47,1.88,57,0.971,93,2.078,129,2.278,139,2.394,142,1.558,156,2.192,168,3.032,223,1.909,303,2.651,357,1.475,360,1.52,457,3.162,460,4.382,468,3.163,470,2.755,473,3.006,480,2.128,483,3.284,489,2.278,490,4.7,491,3.901,500,5.587,501,1.52,509,4.825,510,3.586,511,6.143,512,5.471,513,4.379,514,6.143,515,2.782,516,2.782,517,2.782,518,3.901,519,2.782,520,2.782,521,2.478]],["t/81",[14,1.221,57,0.964,67,2.533,68,2.313,88,2.282,93,2.965,139,1.912,142,2.222,156,3.709,168,2.92,294,4.044,455,2.864,457,3.647,458,2.526,483,2.89,486,3.116,490,2.676,493,3.77,500,5.282,501,2.854,522,3.116,523,3.116,524,3.498,525,2.294,526,3.116,527,3.498,528,3.498,529,3.498,530,3.498,531,2.526,532,3.498]],["t/83",[47,2.07,57,0.893,67,2.264,68,1.487,93,3.211,156,2.891,168,2.666,294,3.372,404,3.072,457,3.95,473,2.756,483,3.627,491,2.344,492,3.288,499,5.145,500,5.516,501,3.697,525,2.633,533,8.162,534,5.145,535,4.015,536,3.577,537,4.015,538,4.015]],["t/85",[14,1.074,20,1.798,36,3.508,47,1.768,50,1.237,52,2.041,57,0.907,67,1.45,88,1.904,93,1.462,142,2.832,201,2.522,324,2.224,360,1.683,371,2.224,451,1.864,457,3.374,481,2.224,483,2.674,493,2.224,495,2.743,503,3.341,508,2.522,522,2.743,523,2.743,539,4.74,540,3.08,541,6.49,542,3.08,543,3.08,544,3.08,545,3.08,546,3.08,547,3.08,548,4.74,549,3.08,550,3.08,551,3.08,552,3.08,553,3.08,554,3.08,555,2.522,556,2.114,557,2.114,558,3.881,559,1.683,560,3.627,561,3.08,562,3.08,563,3.08,564,2.224,565,3.08,566,3.08,567,2.522,568,2.356]],["t/87",[14,0.809,20,1.355,28,3.373,57,0.965,96,1.355,98,2.734,138,1.404,142,1.707,156,1.161,168,1.492,219,2.627,283,4.737,286,1.675,294,2.211,303,1.404,327,2.599,366,1.775,406,1.775,457,2.8,460,1.521,468,1.675,483,1.073,502,1.355,509,6.411,525,1.521,569,2.32,570,2.32,571,2.32,572,2.32,573,2.32,574,3.786,575,3.786,576,3.786,577,2.32,578,2.32,579,3.786,580,2.32,581,2.32,582,2.32,583,2.32,584,4.993,585,5.432,586,3.927,587,2.8,588,3.373,589,2.32,590,4.797,591,7.998,592,2.32,593,2.32,594,2.32,595,3.786,596,2.32,597,2.32,598,2.32,599,3.786,600,3.786,601,3.786,602,3.786,603,3.786,604,1.9,605,1.9,606,1.355,607,2.32,608,3.1,609,1.459,610,2.32,611,1.675,612,2.32,613,2.067,614,2.067,615,2.067]],["t/89",[39,1.315,47,1.833,52,1.406,57,0.565,93,2.352,96,2.894,142,1.763,156,3.79,168,1.953,219,2.843,283,4.112,329,2.054,357,3.176,399,2.498,451,1.976,457,2.894,460,2.141,468,2.358,470,3.769,483,2.293,492,2.673,493,4.831,500,3.25,559,1.784,584,6.2,608,4.906,616,4.956,617,4.956,618,7.193,619,3.265,620,4.956,621,4.956,622,4.956,623,4.956,624,3.265,625,3.265,626,4.415,627,2.498,628,2.358,629,1.976,630,4.058,631,3.265,632,2.908]],["t/91",[8,1.843,11,4.279,14,1.879,21,3.04,29,2.169,134,3.116,218,2.319,277,2.556,288,3.388,301,3.697,385,3.532,386,5.789,388,3.388,398,3.388,399,4.121,402,4.41,408,3.697,606,3.145,628,3.889,633,4.798,634,4.798,635,4.41,636,4.798,637,4.798,638,5.386,639,5.386]],["t/93",[8,2.347,11,3.559,14,2.761,29,1.658,36,1.814,53,2.973,57,0.67,97,2.826,112,3.371,139,2.25,182,3.149,195,2.973,196,1.954,198,2.492,211,3.371,218,1.772,277,3.551,331,5.248,348,4.246,359,3.371,396,2.403,503,2.119,559,2.25,640,3.667,641,4.117,642,4.117,643,4.117,644,5.238,645,4.117,646,3.371,647,2.7,648,3.667,649,4.117,650,2.826,651,3.667,652,4.117,653,4.117,654,3.371,655,3.667,656,3.371,657,3.667,658,4.117]],["t/95",[1,2.298,8,1.299,14,1.325,21,2.143,29,2.639,36,3.529,44,2.298,47,2.005,53,4.005,63,1.473,98,2.742,129,3.109,131,3.374,183,2.742,195,2.742,198,3.357,200,2.776,218,2.388,303,2.298,324,2.742,383,3.13,393,2.905,395,2.742,447,2.742,451,2.298,503,1.955,608,4.542,627,2.905,640,3.382,650,2.606,659,2.905,660,3.797,661,3.797,662,3.797,663,3.382,664,3.382,665,3.109,666,3.797,667,4.542,668,3.382,669,3.797,670,3.382,671,3.382,672,3.109,673,2.905,674,2.742,675,3.797,676,3.797]],["t/97",[8,0.809,15,1.293,20,1.381,26,1.936,29,1.548,32,2.942,36,1.695,38,0.906,39,3.386,44,1.431,47,1.885,67,1.177,73,1.809,78,2.522,93,1.122,106,0.617,120,5.697,121,3.302,131,1.217,132,2.942,133,1.708,140,2.107,153,1.936,156,1.184,167,1.623,168,0.932,177,3.426,198,1.431,218,1.018,223,1.623,248,1.936,277,1.122,280,3.149,303,2.942,305,2.419,310,2.64,333,1.293,360,2.102,371,1.708,375,1.708,383,2.743,398,1.488,451,2.942,467,3.149,502,1.381,503,1.98,557,3.336,559,1.293,564,1.708,611,1.708,627,1.809,665,1.936,673,3.718,674,3.51,677,3.426,678,2.365,679,2.365,680,1.936,681,4.86,682,2.365,683,2.107,684,1.548,685,2.777,686,3.149,687,2.365,688,2.365,689,1.809,690,3.149,691,2.365,692,1.809,693,2.107,694,2.365,695,2.365,696,3.846,697,2.107,698,2.365,699,2.107,700,2.365,701,2.365,702,2.365,703,2.365]],["t/99",[11,2.41,29,2.312,47,2.06,78,2.612,95,3.547,106,1.04,132,4.393,198,3.475,218,1.715,222,3.547,277,2.725,303,2.41,305,2.505,310,2.734,329,3.612,349,3.261,367,2.505,383,2.248,389,4.622,503,2.05,558,3.261,559,2.177,584,3.261,615,3.547,636,3.547,651,3.547,665,3.261,680,4.702,693,3.547,704,2.876,705,3.982,706,7.813,707,3.982,708,3.982,709,3.982,710,3.941,711,3.982,712,5.742,713,3.261,714,3.982,715,3.547,716,3.982,717,3.047,718,3.982,719,3.547]],["t/101",[8,2.897,9,2.498,11,3,14,1.729,21,1.843,27,1.185,37,2.498,96,1.906,106,0.852,196,3.594,209,2.673,246,1.076,275,2.241,277,3.175,301,3.402,303,1.976,305,2.054,310,2.241,333,2.709,335,2.241,359,2.673,383,3.381,388,3.118,491,1.906,501,1.784,525,3.25,559,2.709,632,2.908,635,2.673,673,2.498,684,1.315,720,2.673,721,2.673,722,2.673,723,3.265,724,3.265,725,2.498,726,3.265,727,3.265,728,4.058,729,6.202,730,4.415,731,3.265,732,1.976,733,2.498,734,3.265,735,2.908,736,3.265,737,3.265,738,3.265,739,3.265,740,3.265,741,2.908]],["t/103",[8,2.638,11,1.864,20,1.798,21,1.738,27,1.118,29,1.24,33,1.738,46,3.635,47,1.45,121,1.462,164,2.356,182,5.361,195,4.687,196,1.462,218,1.326,246,1.015,277,3.08,288,1.937,292,1.937,301,2.114,310,2.114,325,3.79,333,2.591,360,1.683,398,1.937,405,2.743,408,2.114,450,1.864,480,2.356,501,1.683,503,2.975,525,2.02,559,1.683,606,1.798,646,2.522,655,5.781,656,2.522,671,2.743,713,2.522,728,2.522,729,4.421,732,1.864,733,3.627,741,2.743,742,3.08,743,2.743,744,2.743,745,3.627,746,4.173,747,2.743,748,2.743,749,2.743,750,3.08,751,2.743,752,3.08,753,2.522,754,2.743,755,4.222,756,2.224,757,2.743,758,2.522,759,3.08,760,2.743]],["t/105",[1,1.129,7,0.785,8,2.386,11,1.129,14,1.279,15,0.561,20,1.498,21,1.053,27,0.677,29,1.033,34,0.931,36,1.131,37,1.427,38,0.604,39,1.272,45,0.422,46,1.173,47,1.257,53,0.741,57,0.616,63,0.495,67,0.571,68,1.358,88,0.615,93,0.487,105,0.673,110,0.785,120,2.101,121,1.499,122,0.914,124,1.427,134,0.452,142,1.461,143,1.498,168,0.735,180,0.914,194,0.741,196,1.74,198,1.129,227,0.914,241,1.427,248,0.84,277,2.437,279,3.957,280,1.527,282,0.84,283,2.517,284,2.416,288,0.645,291,1.427,292,1.173,301,0.704,303,2.219,305,1.614,310,0.704,311,1.662,312,0.914,315,0.599,318,2.325,324,0.741,325,2.071,329,0.645,333,1.402,334,2.404,355,0.704,357,1.944,360,0.561,383,1.053,385,1.682,388,0.645,395,1.347,398,0.645,400,0.914,406,0.785,408,2.168,409,0.704,447,1.347,450,1.129,451,1.129,456,0.84,464,1.662,465,1.662,468,1.347,470,1.614,479,0.704,480,1.427,491,0.599,501,2.245,502,0.599,503,2.644,518,1.662,525,0.673,534,2.813,557,0.704,558,2.101,559,2.245,560,0.785,564,0.741,606,1.089,611,1.347,613,0.914,614,0.914,627,0.785,628,0.741,634,1.662,644,0.914,646,1.527,659,0.785,663,0.914,672,0.84,673,0.785,674,0.741,677,1.662,680,1.527,684,0.751,685,2.281,686,1.527,690,2.586,692,1.427,710,0.704,719,0.914,720,0.84,721,0.84,722,0.84,725,0.785,728,0.84,729,0.785,730,0.914,732,0.621,733,2.416,746,0.741,747,0.914,748,2.285,751,0.914,760,0.914,761,1.026,762,3.658,763,2.805,764,1.026,765,0.914,766,1.026,767,1.026,768,1.026,769,1.026,770,0.914,771,0.84,772,1.026,773,1.865,774,0.914,775,1.026,776,1.865,777,1.026,778,1.865,779,1.026,780,1.026,781,1.026,782,1.026,783,1.026,784,1.865,785,1.726,786,0.741,787,1.026,788,0.914,789,1.026,790,1.865,791,1.026,792,0.785,793,0.914,794,1.026,795,1.026,796,1.865,797,1.865,798,1.026,799,1.026,800,0.561,801,1.026,802,0.914,803,1.026,804,1.026,805,1.026,806,1.865,807,0.914,808,1.662,809,1.026,810,1.865,811,0.914,812,1.026,813,1.026,814,1.026,815,1.026,816,1.026,817,1.026,818,0.84,819,0.914,820,1.026,821,1.026]],["t/107",[246,2.486,385,4.949,822,7.547]],["t/110",[29,2.437,96,3.534,196,2.873,207,3.219,218,2.606,304,4.371,355,4.154,360,3.308,371,4.371,409,4.154,606,3.534,628,4.371,823,4.154,824,4.63,825,4.956,826,4.956,827,4.956]],["t/112",[7,2.905,8,1.299,29,1.529,36,2.445,45,1.563,47,1.697,102,3.193,103,3.807,104,4.732,105,3.638,134,1.674,182,2.905,186,1.58,198,2.298,207,2.781,218,1.635,314,1.757,335,2.606,348,2.742,361,2.606,383,2.143,393,2.905,398,2.388,409,2.606,442,3.109,443,3.109,450,2.298,501,2.075,629,2.298,756,2.742,823,4.947,824,4.243,828,3.382,829,2.905,830,4.005,831,2.606,832,2.606,833,2.49,834,3.109,835,3.109,836,3.797,837,3.807,838,4.005,839,3.797,840,3.109,841,3.797,842,3.797,843,3.797]],["t/114",[8,1.552,11,2.746,14,2.197,27,1.646,37,3.471,47,1.388,57,0.717,186,1.292,196,2.988,207,1.75,246,2.074,277,2.988,282,5.156,283,4.322,284,3.471,291,3.471,292,3.961,293,3.715,322,3.276,356,3.471,360,2.48,395,3.276,396,3.676,399,3.471,479,3.114,611,3.276,654,3.715,729,4.817,823,3.114,837,3.114,838,3.276,844,4.537,845,4.537,846,4.041,847,4.537,848,4.537]],["t/116",[7,0.841,8,0.93,14,1.861,21,0.621,34,0.721,47,0.608,57,0.941,67,1.178,68,1.426,85,1.36,88,1.269,93,2.66,106,0.287,121,1.29,134,0.876,138,0.665,139,1.485,142,1.53,156,0.994,168,0.783,186,0.774,194,0.794,196,1.29,207,2.486,219,2.04,223,0.755,244,1.25,246,1.416,275,0.755,277,1.581,288,0.692,292,0.692,305,2.095,308,0.794,318,0.453,327,2.286,334,2.82,337,4.822,346,4.791,353,2.727,356,0.841,357,1.765,358,2.966,367,2.095,369,0.9,375,1.435,383,0.621,396,1.944,433,0.979,444,0.9,447,0.794,450,0.665,451,0.665,470,1.25,479,0.755,481,1.962,483,1.257,500,1.782,501,0.601,502,0.642,503,0.566,505,1.627,510,3.52,512,3.52,557,0.755,559,2.105,564,0.794,567,0.9,606,1.16,609,2.422,626,0.979,629,1.645,630,1.627,659,1.52,685,0.794,692,0.841,704,1.962,710,1.865,713,1.627,720,0.9,732,2.016,746,1.435,756,0.794,819,0.979,825,1.627,827,1.627,846,0.979,849,1.1,850,0.979,851,2.718,852,1.1,853,1.77,854,3.43,855,0.979,856,5.738,857,2.951,858,2.966,859,1.1,860,2.727,861,1.77,862,1.1,863,0.979,864,0.755,865,0.9,866,1.1,867,0.979,868,0.979,869,0.979,870,0.841,871,0.979,872,0.9,873,0.979,874,1.77,875,2.421,876,1.77,877,0.979,878,1.1,879,1.1,880,0.9,881,2.421,882,1.52,883,0.979,884,1.782,885,0.979,886,0.407,887,0.9,888,0.841,889,0.794,890,1.1,891,1.1,892,1.987,893,1.1]],["t/118",[1,0.572,5,0.516,8,1.014,14,1.033,20,0.551,21,0.976,27,0.343,29,0.697,34,0.869,36,0.416,41,1.417,45,0.712,47,1.188,57,0.961,61,0.648,67,1.304,68,1.579,85,1.729,88,1.404,93,2.454,102,1.166,103,1.643,104,1.729,105,1.943,106,0.247,121,0.448,127,0.773,132,0.723,134,0.416,139,0.516,142,1.744,156,0.866,164,0.723,168,0.943,186,0.493,196,0.448,198,0.572,207,2.176,208,0.572,209,0.773,218,0.407,219,0.448,223,0.648,244,0.594,246,0.311,275,1.188,277,1.406,292,0.594,304,0.682,305,1.088,306,0.773,325,0.619,327,2.926,334,1.943,337,3.157,346,1.831,353,2.425,355,1.188,357,2.26,360,0.516,361,0.648,367,1.088,369,0.773,383,0.976,385,0.619,393,0.723,396,0.551,398,0.594,401,0.841,406,0.723,443,0.773,444,0.773,450,0.572,481,1.249,483,1.371,489,0.773,490,0.723,491,0.551,500,1.135,501,1.619,502,0.551,503,1.232,505,0.773,510,3.18,512,3.766,559,0.946,568,0.723,605,0.773,609,1.088,629,1.047,630,1.96,650,1.643,674,0.682,699,0.841,704,2.494,710,0.648,732,1.047,733,0.723,756,2.494,823,3.55,825,1.417,826,0.773,829,1.324,830,1.729,832,1.188,835,4.617,837,2.926,838,2.139,853,1.541,854,3.077,856,5.522,857,1.643,858,3.797,860,2.425,861,0.841,868,0.841,869,0.841,870,0.723,871,2.639,872,0.773,873,0.841,874,1.541,875,2.132,876,1.541,880,0.773,881,2.132,882,1.324,883,0.841,885,0.841,888,0.723,889,0.682,894,1.73,895,1.73,896,2.132,897,0.944,898,0.944,899,1.73,900,0.841,901,0.944,902,0.841,903,0.841,904,2.394,905,2.394,906,0.944,907,0.648,908,3.46,909,0.944,910,0.944,911,0.944,912,0.841,913,1.541,914,0.944,915,0.944,916,0.944,917,0.944,918,0.944,919,0.773,920,1.73,921,0.944,922,1.417,923,0.944,924,0.944,925,0.944,926,0.944,927,0.944,928,0.944,929,0.944,930,0.944]],["t/120",[1,1.45,8,1.33,14,0.836,21,0.765,25,1.207,26,1.11,27,0.869,34,0.492,41,1.961,45,1.599,47,0.733,50,0.354,52,0.584,57,0.845,68,1.643,93,2.819,102,2.893,103,0.93,104,1.73,105,0.889,156,0.678,164,1.037,168,1.268,183,0.979,186,0.917,196,1.844,207,2.699,210,1.207,246,0.789,277,1.527,292,2.444,305,3.548,314,0.627,325,0.889,327,1.644,334,0.889,335,1.644,348,0.979,357,2.06,360,0.741,361,1.644,365,1.73,367,1.507,396,0.791,407,1.11,408,0.93,409,0.93,450,0.82,467,1.961,470,1.507,483,1.798,493,0.979,501,3.083,502,1.399,503,2.524,521,1.207,556,0.93,560,1.833,587,2.269,604,1.11,606,0.791,611,0.979,628,1.73,647,0.889,650,0.93,704,0.979,710,0.93,721,1.11,732,0.82,746,2.806,756,3.205,788,3.461,792,1.037,808,1.207,823,4.558,824,1.037,828,1.207,835,4.863,837,3.046,838,2.324,860,3.182,870,1.037,888,1.037,889,1.73,896,2.867,907,1.644,908,5.915,912,1.207,913,1.207,922,1.11,931,3.886,932,1.355,933,3.218,934,2.395,935,1.355,936,2.395,937,1.207,938,1.207,939,1.355,940,1.355,941,1.207,942,1.355,943,1.355,944,1.355,945,1.355,946,1.355,947,1.207,948,1.355,949,2.134,950,1.355,951,3.218,952,1.11,953,1.207,954,1.355,955,3.886,956,1.355,957,1.355,958,1.355,959,1.355,960,1.355,961,1.355]],["t/122",[1,3.559,8,2.708,15,2.25,20,3.433,21,2.323,27,2.134,29,1.658,47,1.26,97,2.826,106,1.535,125,3.667,134,2.592,194,2.973,217,3.149,218,1.772,246,1.937,275,2.826,286,2.973,388,2.589,396,2.403,402,3.371,407,3.371,408,2.826,442,3.371,503,2.119,557,2.826,606,2.403,656,3.371,659,3.149,735,5.238,749,3.667,962,4.117,963,4.117,964,5.88,965,4.117,966,5.88,967,3.667,968,4.117,969,4.117,970,4.117,971,3.667,972,4.117,973,4.117,974,4.117]],["t/124",[8,2.402,14,1.859,29,2.145,32,4.076,33,3.007,44,3.224,47,2.148,124,4.076,131,2.743,134,3.094,183,3.847,196,4.116,208,3.224,279,4.362,332,4.584,351,4.745,829,4.076,975,5.327,976,5.327,977,5.327,978,5.327]],["t/126",[8,2.805,388,4.284,725,5.211,938,6.067,979,6.811,980,6.811,981,6.811,982,6.811,983,6.067]],["t/128",[47,1.948,93,3.022,139,3.48,503,3.278,557,4.371,664,5.672,758,5.214,802,5.672,922,5.214,967,5.672,984,6.368,985,6.368,986,6.368,987,6.368,988,6.368]],["t/130",[8,2.385,29,2.806,47,1.612,134,2.323,181,4.694,207,2.033,218,2.269,246,2.296,247,4.694,328,4.694,387,4.694,503,3.588,567,4.315,743,4.694,744,4.694,989,6.969,990,5.27,991,5.27,992,5.27,993,5.27,994,5.27,995,5.27,996,5.27,997,5.27,998,5.27,999,5.27]],["t/133",[223,4.006,246,1.923,367,3.671,391,5.198,560,5.697,827,4.778,829,5.697,1000,5.836,1001,8.202,1002,5.836,1003,5.836,1004,8.64,1005,5.836,1006,5.836,1007,5.836]],["t/136",[5,2.944,98,3.889,303,3.26,318,3.449,389,3.697,502,3.145,555,4.41,763,4.121,800,2.944,831,3.697,1008,7.07,1009,5.386,1010,5.386,1011,5.386,1012,5.386,1013,7.07,1014,4.798,1015,4.41,1016,5.386,1017,5.386,1018,5.386,1019,5.386,1020,4.798,1021,5.386]],["t/138",[98,4.165,301,3.959,316,3.959,317,5.137,318,2.373,450,3.49,525,3.782,635,4.722,647,3.782,690,4.722,722,4.722,855,5.137,907,3.959,1022,5.767,1023,5.767,1024,4.722,1025,5.137,1026,7.391,1027,5.767,1028,5.767,1029,5.767,1030,5.767]],["t/140",[8,1.823,106,1.391,121,2.528,162,4.745,212,4.362,318,2.889,334,3.494,389,4.818,404,4.076,604,5.747,606,3.11,657,4.745,765,4.745,1031,5.327,1032,5.389,1033,5.327,1034,4.745,1035,5.327,1036,5.327,1037,4.362,1038,5.327,1039,5.327,1040,5.327,1041,4.076,1042,5.327]],["t/143",[15,3.349,99,3.855,133,4.425,186,2.39,246,2.019,275,4.207,318,2.522,650,4.207,692,4.688,786,4.425,793,5.459,1043,7.681,1044,3.855,1045,4.207,1046,5.459]],["t/145",[8,2.208,45,2.655,168,2.543,333,4.334,697,5.747,704,4.659,834,5.283,1047,6.452,1048,6.452,1049,5.747,1050,6.452,1051,6.452,1052,4.659]],["t/147",[8,2.141,15,3.933,47,2.202,134,3.172,135,6.41,149,6.41,196,2.133,207,2.414,208,2.721,277,2.133,304,3.246,450,2.721,501,2.457,683,4.004,834,3.68,850,5.573,880,3.68,1053,4.495,1054,6.931,1055,6.256,1056,4.495,1057,4.495,1058,6.256,1059,6.256,1060,4.495,1061,3.439,1062,4.495,1063,4.004]],["t/149",[29,2.781,33,3.898,58,4.741,211,5.656,218,2.974,286,4.988,725,5.284,1064,6.907,1065,6.907]],["t/151",[29,2.904,47,2.207,134,3.179,218,3.106,1066,7.213,1067,7.213]],["t/153",[9,4.412,29,2.976,39,3.284,72,4.412,78,3.782,121,2.737,156,2.887,491,3.367,758,4.722,907,3.959,1068,7.391,1069,5.767,1070,5.767,1071,5.767,1072,5.767,1073,5.137,1074,5.767,1075,5.767,1076,5.767]],["t/155",[8,1.497,9,3.347,29,1.761,47,1.338,58,3.003,59,2.391,218,1.883,224,3.347,288,2.752,360,2.391,388,2.752,447,4.433,606,2.554,746,4.433,900,3.896,1077,8.8,1078,6.138,1079,7.689,1080,4.374,1081,4.374,1082,4.374,1083,4.374,1084,3.896,1085,4.374,1086,4.374,1087,4.374,1088,4.374,1089,4.374,1090,4.374,1091,4.374,1092,4.374,1093,4.374,1094,4.374,1095,4.374,1096,4.374,1097,4.374,1098,4.374]],["t/157",[8,2.398,29,2.821,33,3.954,36,3.088,44,4.241,186,1.996,983,6.241,1099,4.595]],["t/160",[717,4.361,800,3.115,1024,4.667,1100,4.667,1101,4.116,1102,5.077,1103,5.7,1104,5.7,1105,5.7,1106,4.667,1107,5.077,1108,5.077,1109,5.7,1110,5.077,1111,5.7,1112,5.7,1113,5.7,1114,5.7,1115,5.7,1116,5.7,1117,5.7,1118,5.7,1119,4.361,1120,5.7]],["t/162",[1121,7.321,1122,7.321,1123,7.321,1124,7.321,1125,7.321]],["t/164",[409,4.879,947,6.332,1126,7.108,1127,7.108,1128,7.108,1129,7.108,1130,7.108]],["t/166",[1131,6.907,1132,6.907,1133,6.907,1134,6.907,1135,6.907,1136,6.907,1137,6.907,1138,6.907,1139,6.907]],["t/168",[1140,7.321,1141,7.321,1142,7.321,1143,7.321,1144,7.321]],["t/170",[587,4.339,1032,5.101,1145,6.62,1146,5.367]],["t/172",[1045,5.101,1147,7.432,1148,7.432,1149,7.432]],["t/174",[919,6.085,1052,5.367,1150,6.62,1151,7.432]],["t/177",[52,2.672,57,0.961,106,1.62,142,2.208,200,3.106,466,5.082,667,5.082,668,5.528,1152,6.206,1153,5.528,1154,8.438,1155,6.206,1156,5.082]],["t/179",[39,2.632,46,4.113,47,2,106,1.707,186,1.862,221,5.824,246,2.154,466,5.353,556,4.488,1054,5.824,1153,5.824,1157,7.995]],["t/181",[8,1.567,14,1.598,34,1.662,36,2.018,38,1.493,48,4.079,57,0.828,59,2.503,106,1.195,142,2.255,186,1.304,333,2.503,365,3.307,559,2.503,609,2.88,654,3.749,685,4.576,770,6.473,771,6.422,774,4.079,884,3.003,919,3.749,1020,5.645,1158,4.579,1159,4.579,1160,2.771,1161,4.579,1162,4.579,1163,4.579,1164,4.848,1165,4.579,1166,3.503,1167,4.579]],["t/183",[8,2.419,38,1.975,50,1.406,51,3.889,57,0.614,63,1.431,106,1.406,143,3.145,609,3.388,877,4.798,886,1.994,1160,4.777,1166,5.409,1168,5.386,1169,5.386,1170,5.386,1171,5.386,1172,5.386,1173,5.386,1174,5.386,1175,5.386,1176,4.798]],["t/185",[57,0.69,63,1.608,106,1.58,142,2.153,143,3.534,244,4.794,277,2.873,564,4.371,1044,3.807,1160,4.613,1166,5.83,1176,5.391,1177,7.621,1178,7.621]],["t/187",[36,2.483,45,2.319,57,1.006,68,2.086,102,3.547,106,1.471,142,2.005,168,2.22,355,3.867,483,2.607,609,3.544,1073,5.019,1179,5.634,1180,3.867,1181,8.527,1182,5.634,1183,5.634]],["t/189",[39,2.904,45,2.968,50,1.883,63,1.916,318,2.968,1184,7.213]],["t/191",[57,0.673,59,3.228,63,1.993,68,2.187,168,2.328,314,2.733,316,4.054,318,2.431,375,4.265,556,4.054,785,4.508,907,4.054,1185,5.906,1186,7.347,1187,4.265,1188,4.054]],["t/193",[8,2.101,47,1.878,57,0.498,59,2.391,63,1.63,68,1.62,126,3.896,168,1.724,193,3.582,205,4.213,314,2.024,316,5.558,318,2.526,375,3.159,389,4.213,502,2.554,556,3.003,568,3.347,674,3.159,785,3.876,867,6.317,907,4.213,1044,2.752,1119,3.347,1186,6.317,1187,3.159,1188,3.003,1189,4.374,1190,6.849,1191,2.752]],["t/195",[39,2.407,50,1.561,63,2.009,68,2.8,156,4.152,316,4.104,361,4.104,826,4.895,1044,4.757,1119,5.785,1190,5.325,1192,5.978,1193,5.978,1194,5.978]],["t/197",[45,3.059,483,3.439,792,5.686,1195,7.432]],["t/199",[38,1.841,50,1.644,52,1.953,57,0.517,63,1.205,68,2.893,85,3.152,106,1.184,112,3.715,142,1.614,168,2.481,314,2.099,318,1.867,357,2.405,361,5.362,1046,5.609,1196,4.537,1197,4.537,1198,6.296,1199,7.812,1200,6.296,1201,5.609,1202,4.537,1203,4.537,1204,4.537,1205,4.537,1206,4.537]],["t/201",[50,1.707,59,3.573,63,2.123,68,2.421,168,2.577,314,3.025,316,4.488,318,2.691,785,4.37,1187,4.721,1207,6.538]],["t/203",[5,1.983,14,1.872,27,1.317,34,1.317,38,1.661,57,0.898,59,1.983,63,1.873,67,1.11,68,1.343,86,3.232,106,0.947,156,1.816,168,1.43,178,2.379,219,1.722,314,1.679,318,1.493,343,3.232,487,3.232,629,3.247,785,3.488,800,1.983,830,2.62,832,2.49,884,2.379,1015,2.971,1032,3.682,1099,3.518,1187,2.62,1208,3.628,1209,3.232,1210,2.118,1211,5.364,1212,5.364,1213,6.382,1214,5.364,1215,5.364,1216,3.628,1217,6.382,1218,2.776,1219,2.776,1220,3.628,1221,3.628,1222,3.628,1223,3.628,1224,3.628,1225,3.232]],["t/205",[57,0.98,59,3.152,63,1.532,68,2.136,106,1.505,168,2.273,200,2.887,219,2.737,456,4.722,458,4.165,785,3.152,786,4.165,1099,4.847,1187,4.165,1226,5.767,1227,7.391,1228,5.767,1229,5.767]],["t/207",[33,3.333,50,1.542,57,0.94,63,1.993,106,1.542,142,2.101,219,2.803,314,2.733,318,2.431,762,5.261,785,3.228,1032,5.151,1099,3.873,1209,5.261,1210,3.448,1230,5.906,1231,5.906]],["t/209",[34,1.307,39,1.45,45,1.482,47,1.102,57,0.926,63,1.688,68,1.334,100,4.608,102,1.754,106,0.94,131,1.854,142,1.898,185,1.334,187,0.793,205,4.362,217,2.755,219,1.709,404,2.755,410,6.142,800,2.916,882,2.755,1099,5.152,1146,5.417,1166,2.755,1232,3.208,1233,4.167,1234,6.682,1235,3.601,1236,3.601,1237,3.208,1238,5.335,1239,5.335,1240,5.335,1241,3.601,1242,3.601,1243,3.601,1244,3.601]],["t/211",[22,5.137,57,0.657,63,1.532,68,2.136,121,2.737,187,1.27,318,3.357,555,4.722,556,3.959,754,5.137,800,3.152,1032,5.073,1233,3.782,1245,5.767,1246,8.156,1247,5.767,1248,5.137,1249,5.767]],["t/213",[50,1.361,57,0.594,63,1.838,101,5.332,121,2.474,185,2.876,186,1.971,187,1.524,244,3.28,314,2.412,609,3.28,753,6.36,800,2.85,1049,4.644,1191,3.28,1233,4.538,1250,5.214,1251,5.214,1252,5.214,1253,2.055,1254,5.214,1255,5.214]],["t/215",[57,0.745,63,1.737,185,2.96,187,1.44,244,4.113,753,5.353,800,3.573,1233,5.243,1256,6.538,1257,7.995]],["t/217",[14,2.281,45,2.691,57,0.745,63,1.737,102,3.185,187,1.44,318,2.691,372,5.824,800,3.573,1233,4.288,1258,6.538,1259,7.995]],["t/219",[5,2.028,27,1.347,34,1.347,36,1.635,38,1.524,39,1.494,50,0.969,57,0.423,63,0.986,100,4.241,102,2.657,104,2.68,187,0.817,220,5.454,314,1.717,318,2.245,356,6.075,360,2.981,473,2.547,587,5.173,637,3.305,757,3.305,800,4.151,831,2.547,864,2.547,872,3.038,882,2.839,903,3.305,1063,3.305,1188,2.547,1201,3.305,1233,2.433,1237,4.858,1260,3.711,1261,3.711,1262,3.305,1263,3.711,1264,3.711,1265,3.711,1266,3.305]],["t/221",[8,2.473,50,1.454,57,1.002,99,3.504,106,1.454,142,1.982,186,2.506,187,1.226,329,3.504,388,3.504,792,4.261,971,4.961,1045,3.823,1267,7.227,1268,4.961,1269,5.57]],["t/223",[38,1.901,50,1.471,57,0.83,99,3.544,106,1.471,142,2.005,143,3.289,186,2.074,329,3.544,389,3.867,857,3.867,1044,3.544,1268,5.019,1270,5.634,1271,5.634,1272,5.634,1273,3.867,1274,5.634,1275,5.634,1276,5.634,1277,5.634]],["t/225",[39,2.468,50,1.6,57,0.875,63,2.04,106,1.6,131,3.954,142,2.733,186,1.746,1041,4.688,1278,6.128,1279,6.128,1280,6.128,1281,6.128,1282,6.128]],["t/227",[50,1.58,57,0.868,63,1.608,106,1.58,131,4.294,142,2.153,186,2.171,187,1.333,483,2.801,1044,3.807,1101,4.371,1156,4.956,1283,6.052,1284,6.052,1285,6.052]],["t/229",[57,0.726,63,1.691,68,2.358,106,1.662,200,3.187,208,3.854,332,3.718,357,4.525,952,5.214,1286,6.368,1287,7.007,1288,6.368]],["t/231",[38,1.755,45,2.402,57,0.665,63,1.55,67,1.786,68,2.161,88,1.923,106,1.523,143,4.348,200,2.921,208,3.532,332,3.407,357,3.094,684,2.35,952,4.778,1287,6.633,1289,5.836,1290,2.252,1291,5.836]],["t/233",[14,1.424,38,1.609,39,1.644,57,0.465,59,3.195,63,1.552,67,1.249,68,1.512,88,1.345,101,4.687,106,1.066,116,3.123,143,3.413,153,3.342,167,2.802,168,2.303,246,1.345,288,2.568,314,2.705,332,2.383,342,5.206,473,2.802,586,3.342,588,3.636,684,1.644,818,3.342,833,3.833,937,3.636,1052,4.221,1150,3.636,1290,1.575,1292,4.082,1293,5.845,1294,6.92,1295,5.845,1296,4.082,1297,4.082,1298,4.082]],["t/235",[27,2.341,38,1.868,50,1.684,57,0.735,67,1.974,88,2.125,187,1.746,246,2.125,684,2.598,1100,5.283,1290,2.489,1299,6.452]],["t/237",[27,2.197,38,1.796,50,1.58,57,0.69,63,1.608,67,1.852,88,1.994,187,1.678,246,1.994,684,2.437,685,5.503,1044,3.807,1100,4.956,1290,2.335,1300,6.052,1301,6.052]],["t/239",[5,2.434,27,1.616,38,1.826,39,1.793,45,1.833,50,1.163,51,3.216,57,0.508,63,1.183,67,1.363,85,3.584,88,1.467,102,2.17,187,1.369,218,1.918,246,2.048,314,3.313,491,2.6,531,3.216,587,4.181,684,1.793,732,2.696,745,3.408,1061,3.408,1101,5.596,1160,2.696,1188,3.057,1191,2.802,1290,1.719,1302,4.454,1303,5.863,1304,3.647]],["t/241",[5,2.269,15,2.269,27,1.507,38,1.77,39,1.672,45,1.709,50,1.084,51,2.998,57,0.473,63,1.103,67,1.27,85,3.45,88,1.368,102,2.023,116,4.526,121,1.97,145,3.698,187,1.303,218,1.788,246,1.949,314,3.189,491,2.424,531,2.998,585,3.698,587,4.024,684,1.672,732,2.513,745,3.176,1061,3.176,1101,5.96,1160,2.513,1188,2.85,1191,2.611,1290,1.602,1303,5.643,1304,3.399,1305,4.152]],["t/243",[5,2.269,27,1.507,38,1.77,39,1.672,45,1.709,50,1.084,51,2.998,57,0.473,58,2.85,63,1.103,67,1.27,85,3.76,88,1.368,102,2.023,187,1.303,218,1.788,246,1.949,314,3.189,371,2.998,491,2.424,531,2.998,587,4.024,684,1.672,732,2.513,745,3.176,1061,3.176,1101,5.734,1160,3.58,1188,2.85,1191,2.611,1290,1.602,1303,5.643,1304,3.399,1306,4.152,1307,5.916,1308,4.152]],["t/245",[27,2.17,38,1.782,50,1.561,57,0.681,63,1.588,67,1.829,88,1.97,106,1.561,131,3.078,187,1.665,246,1.97,684,2.407,1110,5.325,1164,4.574,1290,2.307,1309,5.978,1310,5.978,1311,5.978]],["t/247",[27,1.039,36,1.262,38,1.471,50,0.747,57,0.855,63,1.994,67,0.876,88,0.943,97,1.965,100,1.878,102,1.395,106,0.747,131,2.841,156,1.433,186,1.276,187,0.986,205,1.965,219,1.359,246,0.943,308,3.985,318,1.178,325,1.878,333,1.565,410,4.518,488,2.551,502,2.615,586,2.344,587,1.672,650,3.075,670,2.551,684,1.153,864,1.965,886,2.043,1014,4.915,1024,5.11,1032,3.075,1044,1.801,1084,2.551,1145,2.551,1146,2.068,1164,3.427,1180,1.965,1232,2.551,1234,4.915,1248,2.551,1266,2.551,1290,1.105,1312,2.863,1313,2.344,1314,2.863,1315,5.518,1316,5.518,1317,4.48,1318,2.863,1319,4.48,1320,4.48,1321,2.863,1322,2.863,1323,2.863,1324,2.863,1325,4.48,1326,2.863,1327,2.863,1328,2.863,1329,2.863]],["t/249",[27,2.341,38,1.868,50,1.684,57,0.735,67,1.974,88,2.125,187,1.746,246,2.125,684,2.598,1108,5.747,1290,2.489,1330,6.452]],["t/251",[27,1.261,34,1.261,38,1.465,39,1.399,45,1.429,47,1.063,50,0.907,57,0.883,63,0.923,67,1.063,88,1.144,97,2.384,102,1.692,103,2.384,106,0.907,168,2.047,187,1.144,200,1.739,204,3.973,205,3.565,219,1.648,246,1.144,294,2.028,314,1.607,322,2.508,325,2.278,395,2.508,396,2.028,458,2.508,667,4.252,672,2.844,684,1.399,689,2.657,833,4.845,837,2.384,864,2.384,902,3.094,1052,2.508,1164,2.657,1210,2.028,1290,1.34,1313,2.844,1331,3.473,1332,6.902,1333,6.902,1334,7.388,1335,3.473,1336,3.473,1337,3.473,1338,3.473,1339,3.473,1340,3.473,1341,3.473]],["t/253",[27,2.311,38,1.853,50,1.662,57,0.726,67,1.948,88,2.098,186,1.814,187,1.732,246,2.098,684,2.564,1290,2.457,1342,6.368,1343,3.278]],["t/255",[27,1.976,38,1.983,50,1.422,57,0.621,58,3.738,67,1.666,85,3.565,88,1.794,128,4.851,187,1.568,246,1.794,314,2.52,648,4.851,684,2.193,763,4.166,1102,6.344,1262,4.851,1290,2.101,1344,5.446,1345,7.936]],["t/257",[27,2.045,38,1.901,50,1.471,57,0.83,63,1.496,67,1.724,85,2.82,88,1.856,94,4.31,106,1.471,131,2.901,187,1.603,246,1.856,684,2.269,715,5.019,717,4.31,1225,5.019,1290,2.174,1346,5.634,1347,5.634,1348,5.634]],["t/259",[27,2.224,38,1.81,52,3.307,57,0.698,63,1.628,67,1.875,88,2.019,160,5.459,187,1.349,246,2.019,684,2.468,1119,4.688,1290,2.365,1349,6.128,1350,6.128,1351,6.128]],["t/261",[27,2.17,38,1.782,50,1.561,57,0.681,63,1.588,67,1.829,88,1.97,185,2.214,187,1.665,246,1.97,318,3.112,684,2.407,785,4.133,800,3.268,1290,2.307,1352,5.978]],["t/263",[27,2.045,38,1.901,50,1.471,57,0.642,63,1.496,67,1.724,85,4.038,88,1.856,187,1.603,246,1.856,318,2.319,357,2.987,684,2.269,785,3.979,1045,4.998,1290,2.174,1353,5.634,1354,5.019]],["t/265",[27,2.311,38,1.853,50,1.662,57,0.726,67,1.948,88,2.098,187,1.732,246,2.098,684,2.564,1290,2.457,1355,6.368,1356,5.214,1357,5.672]],["t/267",[27,2.197,38,2.063,50,1.58,57,0.69,67,1.852,85,3.03,88,1.994,187,1.678,246,1.994,587,3.534,684,2.437,1290,2.335,1356,4.956,1358,6.052,1359,6.052]],["t/269",[27,2.405,38,1.899,57,0.755,67,2.028,88,2.183,187,1.459,246,2.183,684,2.668,1107,5.903,1290,2.557,1360,6.627]],["t/271",[5,3.268,27,2.17,38,1.954,50,1.561,57,0.681,67,1.829,88,1.97,187,1.665,246,1.97,587,3.491,684,2.407,1106,4.895,1290,2.307,1361,5.978,1362,7.562,1363,5.978]],["t/273",[34,2.144,57,0.855,106,1.542,142,2.101,185,2.187,187,1.301,294,3.448,315,3.448,864,4.054,886,2.187,1160,3.575,1210,3.448,1253,2.328,1273,4.054,1290,2.279,1356,4.836,1357,5.261,1364,5.906,1365,4.836,1366,5.906]],["t/275",[34,2.17,57,0.862,106,1.561,142,2.127,185,2.214,187,1.316,294,3.491,315,3.491,864,4.104,886,2.214,1106,4.895,1160,3.618,1210,3.491,1253,2.356,1273,4.104,1290,2.307,1365,4.895,1367,5.978,1368,5.978]],["t/277",[38,1.868,50,1.684,57,0.735,106,1.684,142,2.295,185,2.389,186,1.838,187,1.421,629,3.905,886,2.389,1290,2.489,1369,7.064]],["t/279",[50,1.803,185,2.558,186,1.967,187,1.521,315,4.033,886,2.558,1041,5.284,1210,4.033,1370,6.907]],["t/281",[50,2.054,133,4.598,185,2.358,186,2.241,187,1.402,315,3.718,322,4.598,633,5.672,818,5.214,886,2.358,1191,4.006,1210,3.718,1371,6.368]],["t/283",[34,2.341,38,1.868,57,0.735,67,1.974,88,2.125,185,2.389,186,1.838,187,1.421,629,3.905,886,2.389,1253,2.543,1290,2.489,1372,6.452]],["t/285",[34,2.252,38,1.462,57,0.707,185,2.298,186,1.768,187,1.367,324,4.482,717,4.748,811,5.528,833,4.07,857,5.792,886,2.298,1253,2.446,1373,6.206,1374,6.206]],["t/287",[5,2.526,34,1.678,36,2.811,57,0.832,67,1.414,88,1.523,102,2.252,106,1.207,142,2.269,185,1.712,186,2.08,187,1.018,203,3.536,244,2.908,333,3.486,348,3.338,483,2.139,647,3.031,689,3.536,886,2.362,1041,3.536,1180,5.671,1253,1.822,1290,1.784,1369,4.117,1375,4.622,1376,4.622,1377,4.117,1378,4.622,1379,4.622,1380,4.622,1381,4.622]],["t/289",[14,2.41,185,2.558,186,1.967,187,1.521,531,4.988,886,2.558,1382,6.907,1383,6.907,1384,6.907]],["t/291",[14,1.367,18,4.647,38,1.337,47,1.199,50,1.482,52,1.687,57,0.76,63,1.507,67,2.042,88,2.198,96,3.314,121,2.694,131,2.017,133,2.83,185,2.102,186,1.617,187,0.863,193,3.209,219,1.86,315,3.314,318,2.336,332,2.288,365,4.098,452,3.491,479,3.896,785,3.647,886,1.451,949,3.491,1045,3.896,1146,5.282,1210,2.288,1253,1.544,1294,4.647,1385,3.919,1386,3.919,1387,3.919,1388,3.919,1389,3.919]],["t/293",[5,3.308,34,2.766,57,0.69,186,1.724,187,1.333,207,2.335,294,3.534,315,3.534,367,3.807,376,4.956,629,3.663,830,4.371,1210,3.534,1253,2.385,1390,6.052,1391,6.052,1392,6.052,1393,6.052]],["t/295",[34,1.796,57,0.762,63,1.315,68,2.475,106,1.292,142,1.761,185,1.833,186,1.41,187,1.09,196,2.349,200,3.346,207,2.92,244,3.114,332,2.89,357,4.295,396,2.89,755,4.409,840,6.196,884,3.246,886,2.475,887,4.053,888,3.787,889,3.574,1253,1.951,1343,2.548,1394,4.95]],["t/297",[34,1.834,47,1.546,57,0.772,63,1.8,68,1.871,93,2.398,106,1.319,142,1.798,168,1.991,187,1.112,200,2.529,207,2.615,314,2.338,335,3.468,366,3.865,526,4.5,823,3.468,824,3.865,837,3.468,838,3.648,840,4.137,884,3.313,886,1.871,887,4.137,889,3.648,953,4.5,1253,1.991,1395,5.052,1396,5.052,1397,5.052,1398,5.052,1399,5.052]],["t/299",[34,2.341,57,0.735,63,1.714,101,5.443,185,2.389,186,1.838,187,1.421,207,2.489,863,5.747,886,2.389,1253,2.543,1343,3.321,1400,6.452]],["t/301",[34,2.311,57,0.726,78,4.176,185,2.358,186,1.814,187,1.402,195,4.598,200,3.937,207,2.457,306,5.214,886,2.358,1253,2.509,1343,3.278,1401,6.368]],["t/303",[34,2.144,38,1.943,57,0.673,67,1.807,88,1.946,185,2.187,186,1.682,187,1.301,207,2.279,629,3.575,886,2.187,1253,2.328,1343,3.041,1402,5.906,1403,4.836,1404,5.261,1405,5.906,1406,5.906,1407,5.906]],["t/305",[14,2.521,34,2.021,38,1.312,57,0.635,60,3.653,68,2.676,178,3.653,185,2.063,186,1.587,187,1.226,207,3.096,771,4.561,886,2.063,1015,4.561,1253,2.195,1343,2.868,1403,6.569,1408,5.57,1409,5.57,1410,5.57]],["t/307",[14,2.503,34,1.999,38,1.298,57,0.628,60,3.612,168,2.827,178,3.612,185,2.039,186,1.569,187,1.213,207,3.079,833,5.543,865,4.509,886,2.039,1037,5.874,1253,2.17,1343,2.835,1411,5.507,1412,4.509]],["t/309",[14,2.381,34,1.853,38,1.811,57,0.582,60,3.348,168,2.689,178,3.348,185,1.89,186,1.454,187,1.124,207,2.966,833,5.041,865,4.18,886,1.89,1037,5.587,1218,3.905,1219,3.905,1253,2.012,1343,2.628,1404,4.547,1412,4.18,1413,5.105,1414,5.105,1415,5.105,1416,5.105]],["t/311",[34,1.743,38,1.886,57,0.746,85,3.278,94,3.675,106,1.254,107,3.933,138,2.908,167,3.297,185,1.779,186,1.866,187,1.058,207,1.854,831,3.297,832,5.115,884,4.295,886,1.779,1218,5.011,1219,3.675,1253,1.893,1343,2.473,1417,4.804,1418,4.279,1419,4.279,1420,5.834,1421,4.279,1422,4.279,1423,4.804,1424,4.279]],["t/313",[67,2,88,2.154,187,1.44,830,4.721,832,4.488,870,5.002,1403,5.353,1425,6.538,1426,6.538,1427,6.538,1428,6.538,1429,6.538,1430,6.538]],["t/315",[14,1.66,38,2.03,57,0.951,63,1.728,106,1.242,167,3.265,186,1.853,187,1.048,219,2.258,559,2.6,689,3.64,710,3.265,1099,3.12,1253,1.875,1313,3.895,1412,3.895,1431,4.757,1432,4.757,1433,4.757,1434,6.506,1435,6.506,1436,4.757,1437,4.757,1438,4.757,1439,4.757,1440,4.757,1441,4.757,1442,4.757]],["t/317",[38,1.893,57,0.751,85,2.429,94,3.712,106,1.267,107,3.972,138,2.936,167,3.33,185,1.797,186,1.878,187,1.068,207,1.872,609,3.052,831,3.33,832,5.141,884,4.324,886,1.797,1218,5.044,1219,3.712,1253,1.912,1343,2.498,1418,4.322,1419,4.322,1420,5.873,1421,4.322,1422,4.322,1424,4.322,1443,4.852,1444,4.852]],["t/319",[13,5.399,14,1.693,34,2.393,38,1.143,39,1.953,45,1.997,47,1.485,52,2.089,57,0.553,138,2.936,186,2.133,187,1.068,212,3.972,220,3.712,376,6.133,398,3.052,568,3.712,605,3.972,807,4.322,857,5.141,941,6.672,1025,4.322,1052,3.504,1253,1.912,1445,4.852,1446,4.852,1447,4.852,1448,4.852,1449,4.852]],["t/321",[36,2.672,57,0.869,106,1.122,142,1.529,143,2.509,186,2.173,187,0.946,315,2.509,333,3.313,483,1.988,536,3.828,647,2.818,686,3.519,886,2.245,1099,2.818,1160,4.251,1180,4.161,1210,2.509,1253,2.389,1273,2.95,1365,4.964,1377,3.828,1450,4.297,1451,5.4,1452,4.297,1453,5.4,1454,3.828,1455,4.297,1456,4.297,1457,4.297,1458,4.297,1459,4.297,1460,4.297,1461,3.519,1462,4.297,1463,4.297]],["t/323",[34,2.048,36,2.487,57,0.972,106,1.015,142,1.383,143,2.27,185,1.44,186,2.204,187,0.856,318,1.6,333,2.125,451,2.353,483,1.799,508,3.183,647,2.549,785,3.63,786,2.807,800,3.084,857,2.668,886,2.46,1156,3.183,1180,4.559,1233,2.549,1253,2.224,1273,2.668,1343,2.905,1354,3.463,1451,3.463,1453,5.026,1454,3.463,1461,3.183,1464,3.888,1465,3.888,1466,3.888,1467,3.888,1468,5.643,1469,3.463,1470,3.888,1471,3.888,1472,3.888]],["t/325",[18,3.085,34,2.002,36,1.661,50,1.44,57,0.871,106,0.984,131,1.94,142,1.341,143,2.2,185,1.395,186,1.858,187,0.83,205,2.586,294,2.2,313,4.516,315,3.22,318,2.27,333,2.059,365,2.721,483,2.552,647,2.471,785,3.566,786,2.721,886,2.042,1034,3.356,1045,4.478,1146,5.519,1180,4.929,1191,2.37,1253,2.174,1273,2.586,1343,1.94,1461,3.085,1469,4.913,1473,3.768,1474,3.768,1475,3.768,1476,3.768,1477,3.768,1478,5.515,1479,3.768]],["t/327",[14,2.193,45,2.587,57,0.716,63,1.67,100,4.122,102,3.062,185,2.328,186,1.79,187,1.384,763,4.809,886,2.328,1253,2.477,1343,3.236,1480,6.286,1481,7.803]],["t/329",[14,1.921,45,2.267,57,0.628,63,1.463,100,3.612,102,2.683,178,3.612,185,2.039,186,2.273,187,1.213,831,4.924,833,3.612,886,2.039,1191,3.464,1253,2.17,1294,5.874,1343,2.835,1482,5.507,1483,7.979,1484,5.507,1485,5.507]]],"invertedIndex":[["",{"_index":57,"t":{"10":{"position":[[58,2]]},"12":{"position":[[37,2]]},"16":{"position":[[54,2]]},"26":{"position":[[42,2]]},"28":{"position":[[32,1]]},"33":{"position":[[448,1],[508,3],[513,1],[515,2],[518,2],[521,2],[524,3],[528,2],[618,1],[634,1],[638,1],[658,1],[662,1],[931,3],[990,1],[1026,1],[1064,1],[1107,1],[1159,1],[1213,1]]},"49":{"position":[[73,1],[353,1],[400,1],[402,1]]},"53":{"position":[[335,1],[337,1],[339,1],[370,1],[425,1],[486,1],[502,2],[505,1],[543,1],[585,1],[634,1],[648,1],[650,1]]},"57":{"position":[[280,1],[310,1]]},"67":{"position":[[54,1],[56,1],[58,1],[70,1],[85,1],[101,1],[115,1],[117,1]]},"71":{"position":[[117,1],[119,1],[124,1],[126,1]]},"73":{"position":[[12,1],[47,1],[53,1],[82,1],[88,1],[128,1]]},"75":{"position":[[2,1],[11,1],[75,1],[84,1],[281,1],[287,1],[296,2]]},"77":{"position":[[6,1],[91,1],[150,1],[201,1],[287,1],[298,1],[499,1]]},"79":{"position":[[6,1],[55,1],[260,1],[279,1],[289,1],[318,1],[332,1],[362,1],[390,1],[401,1],[412,1],[430,1],[446,1]]},"81":{"position":[[8,1],[20,1],[38,1],[72,1],[84,1],[96,1],[106,1],[126,1],[136,1]]},"83":{"position":[[90,1],[125,1],[129,1],[220,1],[245,2]]},"85":{"position":[[36,1],[48,1],[60,1],[137,1],[232,1],[284,1],[303,1],[333,1]]},"87":{"position":[[14,1],[104,1],[106,1],[130,1],[138,1],[182,1],[297,1],[299,1],[308,1],[321,1],[337,1],[350,1],[359,1],[666,1],[690,1],[1217,1]]},"89":{"position":[[14,1],[126,1]]},"93":{"position":[[114,1],[294,1]]},"105":{"position":[[449,1],[476,1],[2084,1],[2106,1],[2129,1],[2152,1],[2979,1],[3069,1],[3229,2],[3327,5]]},"114":{"position":[[405,1],[513,1]]},"116":{"position":[[268,1],[270,2],[746,1],[748,3],[752,2],[1111,1],[1140,1],[1144,1],[1702,1],[1743,1],[1773,1],[1787,1],[1800,1],[1813,1],[1817,1],[1876,1],[1909,1],[2005,1],[2017,1],[2095,1],[2113,1],[2200,1],[2319,1],[2424,1],[2431,1],[2503,1],[2507,1],[2798,1],[2904,1],[3133,1],[3144,1],[3174,1],[3194,2],[3387,1]]},"118":{"position":[[284,1],[297,1],[310,1],[314,1],[565,1],[567,3],[571,2],[587,1],[628,1],[658,1],[672,1],[685,1],[698,1],[702,1],[761,1],[794,1],[890,1],[902,1],[980,1],[998,1],[1085,1],[1204,1],[1309,1],[1316,1],[1388,1],[1392,1],[1516,1],[1622,1],[1775,1],[1786,1],[1816,1],[1836,2],[2363,1],[2400,1],[2486,1],[2506,1],[2593,1],[2614,1],[2671,1],[2693,1],[2997,1],[3338,1],[3359,1],[3455,1],[3468,1]]},"120":{"position":[[58,1],[71,1],[84,1],[88,1],[162,1],[175,1],[188,1],[192,1],[728,1],[749,1],[774,1],[796,1],[1357,1],[1370,1],[1388,1],[1401,1],[2003,1]]},"177":{"position":[[94,1],[142,1],[144,2]]},"181":{"position":[[61,1],[365,1],[386,1]]},"183":{"position":[[96,2]]},"185":{"position":[[96,1]]},"187":{"position":[[136,1],[205,1],[207,2],[233,1],[246,1]]},"191":{"position":[[63,1]]},"193":{"position":[[70,1]]},"199":{"position":[[455,1]]},"203":{"position":[[65,1],[275,1],[277,1],[772,1],[793,1],[821,1]]},"205":{"position":[[69,1],[93,1],[95,1],[245,1]]},"207":{"position":[[58,1],[88,1],[200,1]]},"209":{"position":[[77,1],[122,1],[124,1],[651,1],[664,1],[705,1],[747,1]]},"211":{"position":[[65,1]]},"213":{"position":[[84,2]]},"215":{"position":[[71,1]]},"217":{"position":[[83,1]]},"219":{"position":[[103,2]]},"221":{"position":[[207,1],[259,1],[261,2],[274,2],[277,1]]},"223":{"position":[[104,2],[249,1]]},"225":{"position":[[130,1],[205,1]]},"227":{"position":[[107,1],[144,2]]},"229":{"position":[[58,1]]},"231":{"position":[[80,1]]},"233":{"position":[[106,1]]},"235":{"position":[[50,2]]},"237":{"position":[[71,2]]},"239":{"position":[[98,2]]},"241":{"position":[[102,2]]},"243":{"position":[[103,2]]},"245":{"position":[[57,2]]},"247":{"position":[[73,1],[267,1],[269,2],[1024,1],[1063,1],[1112,1],[1193,1]]},"249":{"position":[[49,2]]},"251":{"position":[[86,1],[149,1],[151,2],[715,1],[740,1],[758,1]]},"253":{"position":[[61,2]]},"255":{"position":[[95,2]]},"257":{"position":[[82,2],[258,1]]},"259":{"position":[[64,2]]},"261":{"position":[[72,2]]},"263":{"position":[[93,2]]},"265":{"position":[[54,2]]},"267":{"position":[[94,2]]},"269":{"position":[[46,2]]},"271":{"position":[[61,2]]},"273":{"position":[[100,1],[215,1]]},"275":{"position":[[91,1],[197,1]]},"277":{"position":[[144,1]]},"283":{"position":[[78,1]]},"285":{"position":[[66,1]]},"287":{"position":[[75,1],[333,1],[413,1]]},"291":{"position":[[66,1],[127,1],[129,2]]},"293":{"position":[[89,1]]},"295":{"position":[[88,1],[303,1]]},"297":{"position":[[115,1],[298,1]]},"299":{"position":[[75,1]]},"301":{"position":[[73,1]]},"303":{"position":[[106,1]]},"305":{"position":[[74,1]]},"307":{"position":[[82,1]]},"309":{"position":[[130,1]]},"311":{"position":[[142,1],[423,1]]},"315":{"position":[[88,1],[279,1],[281,1],[461,1],[480,1]]},"317":{"position":[[148,1],[427,1]]},"319":{"position":[[90,1]]},"321":{"position":[[129,1],[546,1],[548,2],[575,1]]},"323":{"position":[[108,1],[562,1],[564,2],[616,1],[618,2],[679,1],[681,2],[711,1]]},"325":{"position":[[115,1],[582,1],[785,1],[787,2],[819,2]]},"327":{"position":[[87,1]]},"329":{"position":[[89,1]]}}}],["0",{"_index":68,"t":{"14":{"position":[[98,2]]},"26":{"position":[[140,3]]},"33":{"position":[[971,3]]},"51":{"position":[[714,2]]},"57":{"position":[[163,1]]},"77":{"position":[[203,2],[238,1]]},"81":{"position":[[22,1],[98,1],[108,1]]},"83":{"position":[[92,1]]},"105":{"position":[[1438,2],[1574,1],[1748,2],[1945,1],[2131,1]]},"116":{"position":[[1098,1],[1775,1],[1789,2],[1852,1],[3495,2]]},"118":{"position":[[286,2],[660,1],[674,2],[737,1],[2999,1],[3251,1],[3361,1]]},"120":{"position":[[60,2],[164,2],[751,1],[798,1],[2219,1]]},"187":{"position":[[138,1]]},"191":{"position":[[183,3]]},"193":{"position":[[497,3]]},"195":{"position":[[79,1],[88,1]]},"199":{"position":[[220,1],[274,1],[320,1],[375,1]]},"201":{"position":[[145,3]]},"203":{"position":[[363,3]]},"205":{"position":[[156,3]]},"209":{"position":[[794,2]]},"211":{"position":[[190,1]]},"229":{"position":[[187,2]]},"231":{"position":[[213,2]]},"233":{"position":[[282,3]]},"295":{"position":[[228,2],[411,2]]},"297":{"position":[[417,2]]},"305":{"position":[[164,1],[212,1]]}}}],["0,0,0",{"_index":338,"t":{"53":{"position":[[372,9],[545,9]]}}}],["0,1",{"_index":362,"t":{"57":{"position":[[282,7]]}}}],["0,1,2",{"_index":364,"t":{"57":{"position":[[312,10]]}}}],["0,1,2,0",{"_index":350,"t":{"53":{"position":[[636,11]]}}}],["0,1,2,3,0",{"_index":347,"t":{"53":{"position":[[488,13]]}}}],["0,500,0",{"_index":341,"t":{"53":{"position":[[406,11],[566,11]]}}}],["0.3",{"_index":413,"t":{"67":{"position":[[87,4]]}}}],["0fx",{"_index":884,"t":{"116":{"position":[[3310,5],[3316,5],[3425,4]]},"181":{"position":[[224,5]]},"203":{"position":[[425,3]]},"295":{"position":[[341,4]]},"297":{"position":[[336,4]]},"311":{"position":[[430,4],[435,4]]},"317":{"position":[[434,4],[439,4]]}}}],["0x80",{"_index":119,"t":{"31":{"position":[[336,5]]}}}],["0xff0000",{"_index":117,"t":{"31":{"position":[[302,10]]}}}],["0xff000000",{"_index":373,"t":{"59":{"position":[[245,10]]}}}],["0xff000080",{"_index":113,"t":{"31":{"position":[[274,10]]},"59":{"position":[[206,10]]}}}],["0xff0000ff",{"_index":345,"t":{"53":{"position":[[464,12],[612,12]]},"59":{"position":[[181,10]]}}}],["0xff00ffff",{"_index":344,"t":{"53":{"position":[[452,11],[600,11]]}}}],["0xffff00ff",{"_index":343,"t":{"53":{"position":[[440,11],[587,12]]},"203":{"position":[[823,12]]}}}],["0xffffffff",{"_index":342,"t":{"53":{"position":[[427,12]]},"233":{"position":[[484,11],[563,11]]}}}],["1",{"_index":168,"t":{"33":{"position":[[1016,1],[1054,1]]},"77":{"position":[[8,2],[93,2],[123,1],[152,2],[185,1],[212,1],[241,1],[300,2]]},"79":{"position":[[8,2],[57,2],[291,2],[334,2],[392,1],[403,1],[432,2],[448,2]]},"81":{"position":[[44,1],[62,1],[132,1],[142,1],[164,1]]},"83":{"position":[[131,1],[222,2],[277,1]]},"87":{"position":[[86,1],[140,2]]},"89":{"position":[[90,1],[261,1]]},"97":{"position":[[803,2]]},"105":{"position":[[1730,1],[1773,2]]},"116":{"position":[[2202,3],[2426,2]]},"118":{"position":[[1087,3],[1311,2],[3470,1]]},"120":{"position":[[1372,1],[2005,2],[2269,1]]},"145":{"position":[[21,1]]},"187":{"position":[[248,1]]},"191":{"position":[[213,3]]},"193":{"position":[[527,3]]},"199":{"position":[[280,3],[381,3]]},"201":{"position":[[175,3]]},"203":{"position":[[393,3]]},"205":{"position":[[186,3]]},"233":{"position":[[296,1],[427,3]]},"251":{"position":[[309,1],[556,2]]},"297":{"position":[[420,2]]},"307":{"position":[[174,1],[234,1]]},"309":{"position":[[243,1],[303,1]]}}}],["1,2",{"_index":363,"t":{"57":{"position":[[290,6]]}}}],["1,5,3",{"_index":570,"t":{"87":{"position":[[16,7]]}}}],["1.0fx",{"_index":169,"t":{"33":{"position":[[1028,5]]}}}],["1.2048fx",{"_index":170,"t":{"33":{"position":[[1066,8]]}}}],["1.4095fx",{"_index":172,"t":{"33":{"position":[[1109,8],[1162,8]]}}}],["1.4096fx",{"_index":176,"t":{"33":{"position":[[1215,8]]}}}],["1.5",{"_index":108,"t":{"31":{"position":[[200,3]]},"33":{"position":[[1095,3]]}}}],["1.9997558",{"_index":173,"t":{"33":{"position":[[1138,12],[1192,12]]}}}],["10",{"_index":473,"t":{"73":{"position":[[55,2],[90,2]]},"77":{"position":[[96,2],[141,2],[155,3],[207,3],[268,2]]},"79":{"position":[[262,2],[520,2]]},"83":{"position":[[225,2]]},"219":{"position":[[298,2]]},"233":{"position":[[286,4]]}}}],["100",{"_index":586,"t":{"87":{"position":[[310,4],[829,3],[857,3]]},"233":{"position":[[431,5]]},"247":{"position":[[1114,5]]}}}],["1000",{"_index":201,"t":{"37":{"position":[[116,4]]},"49":{"position":[[365,5]]},"85":{"position":[[367,4]]}}}],["100fx",{"_index":143,"t":{"33":{"position":[[450,5],[620,5]]},"105":{"position":[[1431,6],[2086,5],[2108,5]]},"183":{"position":[[274,6]]},"185":{"position":[[121,6]]},"223":{"position":[[298,6]]},"231":{"position":[[216,6],[223,6]]},"233":{"position":[[477,6],[556,6]]},"321":{"position":[[615,6]]},"323":{"position":[[751,6]]},"325":{"position":[[622,6]]}}}],["10fx",{"_index":1164,"t":{"181":{"position":[[289,6],[296,6]]},"245":{"position":[[166,5]]},"247":{"position":[[985,5],[1143,5]]},"251":{"position":[[693,5]]}}}],["119",{"_index":939,"t":{"120":{"position":[[776,3]]}}}],["12",{"_index":163,"t":{"33":{"position":[[846,2]]},"73":{"position":[[77,2]]}}}],["120",{"_index":931,"t":{"120":{"position":[[194,3],[204,3],[313,3],[599,3]]}}}],["121",{"_index":932,"t":{"120":{"position":[[271,3]]}}}],["128",{"_index":1350,"t":{"259":{"position":[[140,4]]}}}],["1300",{"_index":1043,"t":{"143":{"position":[[8,4],[109,4]]}}}],["15",{"_index":519,"t":{"79":{"position":[[714,2]]}}}],["19869",{"_index":1091,"t":{"155":{"position":[[314,6]]}}}],["1fx",{"_index":167,"t":{"33":{"position":[[992,3]]},"97":{"position":[[854,4]]},"233":{"position":[[496,4]]},"311":{"position":[[440,4]]},"315":{"position":[[463,4]]},"317":{"position":[[444,4]]}}}],["2",{"_index":93,"t":{"26":{"position":[[144,4]]},"28":{"position":[[39,4]]},"57":{"position":[[342,1]]},"73":{"position":[[49,1],[84,1]]},"77":{"position":[[125,1],[159,1],[244,1]]},"79":{"position":[[414,1],[451,1]]},"81":{"position":[[60,1],[160,1],[166,1]]},"83":{"position":[[138,3],[185,1],[279,1]]},"85":{"position":[[50,1]]},"89":{"position":[[94,1],[278,1]]},"97":{"position":[[806,2]]},"105":{"position":[[1758,1]]},"116":{"position":[[1113,1],[1142,1],[1634,2],[1802,2],[1815,1],[1857,3],[1873,2],[2321,3],[2509,1],[2906,1]]},"118":{"position":[[299,2],[312,1],[420,2],[687,2],[700,1],[742,3],[758,2],[1206,3],[1394,1],[1624,1]]},"120":{"position":[[73,2],[86,1],[177,2],[190,1],[1403,1],[2399,2],[2439,1],[2549,1],[2562,2]]},"128":{"position":[[81,1]]},"297":{"position":[[226,1]]}}}],["2+3",{"_index":462,"t":{"71":{"position":[[85,3]]}}}],["2.2048fx",{"_index":696,"t":{"97":{"position":[[1052,9],[1284,9]]}}}],["2.5",{"_index":695,"t":{"97":{"position":[[1034,3]]}}}],["2.6fx",{"_index":694,"t":{"97":{"position":[[1001,5]]}}}],["20",{"_index":588,"t":{"87":{"position":[[323,3],[884,2]]},"233":{"position":[[501,3]]}}}],["200",{"_index":1175,"t":{"183":{"position":[[207,3]]}}}],["2000",{"_index":298,"t":{"49":{"position":[[381,5]]}}}],["200fx",{"_index":1166,"t":{"181":{"position":[[388,5]]},"183":{"position":[[281,6],[288,6]]},"185":{"position":[[128,6],[135,6]]},"209":{"position":[[787,6]]}}}],["202",{"_index":617,"t":{"89":{"position":[[27,4],[105,3]]}}}],["220",{"_index":545,"t":{"85":{"position":[[186,3]]}}}],["23902",{"_index":1092,"t":{"155":{"position":[[321,6]]}}}],["25",{"_index":498,"t":{"77":{"position":[[289,2],[368,2]]}}}],["250",{"_index":602,"t":{"87":{"position":[[692,3],[1012,3]]}}}],["255",{"_index":1485,"t":{"329":{"position":[[278,4]]}}}],["256",{"_index":1351,"t":{"259":{"position":[[148,4]]}}}],["27",{"_index":554,"t":{"85":{"position":[[364,2]]}}}],["28013",{"_index":1093,"t":{"155":{"position":[[328,6]]}}}],["28fx",{"_index":1374,"t":{"285":{"position":[[175,5]]}}}],["2fx",{"_index":689,"t":{"97":{"position":[[859,4]]},"251":{"position":[[717,4]]},"287":{"position":[[415,4]]},"315":{"position":[[482,5]]}}}],["2pi",{"_index":1200,"t":{"199":{"position":[[226,5],[326,5]]}}}],["2Ï€/120",{"_index":945,"t":{"120":{"position":[[1047,6]]}}}],["2Ï€/60",{"_index":944,"t":{"120":{"position":[[1003,5]]}}}],["3",{"_index":156,"t":{"33":{"position":[[664,1],[677,1]]},"77":{"position":[[127,1],[187,1],[247,1]]},"79":{"position":[[60,1],[642,1]]},"81":{"position":[[10,1],[58,1],[74,1],[156,1],[162,1]]},"83":{"position":[[248,1],[281,1]]},"87":{"position":[[90,1]]},"89":{"position":[[16,3],[33,2],[92,1],[98,1],[112,1],[295,1]]},"97":{"position":[[809,2]]},"116":{"position":[[2433,3],[2800,1]]},"118":{"position":[[1318,3],[1518,1]]},"120":{"position":[[2483,1]]},"153":{"position":[[41,1]]},"195":{"position":[[85,2],[149,1],[166,2]]},"203":{"position":[[774,2]]},"247":{"position":[[1195,3]]}}}],["30",{"_index":103,"t":{"31":{"position":[[126,2]]},"51":{"position":[[45,3]]},"112":{"position":[[90,2],[373,2]]},"118":{"position":[[3802,2],[3866,2],[4097,2]]},"120":{"position":[[1740,2]]},"251":{"position":[[580,2]]}}}],["3000",{"_index":300,"t":{"49":{"position":[[395,4]]}}}],["300fx",{"_index":774,"t":{"105":{"position":[[451,5]]},"181":{"position":[[367,5]]}}}],["30fx",{"_index":1277,"t":{"223":{"position":[[305,5]]}}}],["30hz",{"_index":928,"t":{"118":{"position":[[4316,6]]}}}],["32",{"_index":109,"t":{"31":{"position":[[234,2]]},"59":{"position":[[161,2]]}}}],["350",{"_index":289,"t":{"49":{"position":[[221,3]]},"51":{"position":[[235,3]]}}}],["3d",{"_index":328,"t":{"53":{"position":[[51,3]]},"130":{"position":[[217,2]]}}}],["3fx",{"_index":153,"t":{"33":{"position":[[640,3]]},"97":{"position":[[864,4]]},"233":{"position":[[575,4]]}}}],["3mb",{"_index":1058,"t":{"147":{"position":[[192,3],[348,3]]}}}],["4",{"_index":493,"t":{"77":{"position":[[129,1],[250,1]]},"81":{"position":[[86,1],[158,1]]},"85":{"position":[[38,1]]},"89":{"position":[[20,2],[96,1],[103,1],[315,1]]},"120":{"position":[[2532,1]]}}}],["400",{"_index":1324,"t":{"247":{"position":[[942,3]]}}}],["400fx",{"_index":776,"t":{"105":{"position":[[478,5],[954,7]]}}}],["40124",{"_index":1094,"t":{"155":{"position":[[335,6]]}}}],["4095",{"_index":166,"t":{"33":{"position":[[975,6]]}}}],["4096",{"_index":179,"t":{"33":{"position":[[1270,4]]}}}],["42",{"_index":1155,"t":{"177":{"position":[[96,2]]}}}],["45",{"_index":107,"t":{"31":{"position":[[180,2]]},"311":{"position":[[330,2]]},"317":{"position":[[328,2]]}}}],["48",{"_index":869,"t":{"116":{"position":[[1745,2]]},"118":{"position":[[630,2]]}}}],["49152",{"_index":1085,"t":{"155":{"position":[[227,5]]}}}],["4fx",{"_index":1348,"t":{"257":{"position":[[260,4]]}}}],["5",{"_index":460,"t":{"71":{"position":[[62,1]]},"73":{"position":[[14,1],[43,1]]},"75":{"position":[[13,1],[40,4],[70,2],[283,1],[289,1]]},"77":{"position":[[11,1],[69,1],[131,1],[189,1],[253,1]]},"79":{"position":[[11,1],[139,1],[281,1],[435,1],[684,1]]},"87":{"position":[[88,1]]},"89":{"position":[[109,1]]}}}],["5.3",{"_index":1067,"t":{"151":{"position":[[31,4]]}}}],["50",{"_index":937,"t":{"120":{"position":[[554,3]]},"233":{"position":[[580,3]]}}}],["500",{"_index":411,"t":{"67":{"position":[[72,4]]}}}],["500,0,0",{"_index":339,"t":{"53":{"position":[[382,10],[555,10]]}}}],["500,500,0",{"_index":340,"t":{"53":{"position":[[393,12]]}}}],["500kb",{"_index":1053,"t":{"147":{"position":[[40,5]]}}}],["500x500",{"_index":336,"t":{"53":{"position":[[346,7]]}}}],["50fx",{"_index":1225,"t":{"203":{"position":[[795,5]]},"257":{"position":[[203,5]]}}}],["51980",{"_index":1080,"t":{"155":{"position":[[71,5]]}}}],["51989",{"_index":1083,"t":{"155":{"position":[[151,6]]}}}],["52",{"_index":161,"t":{"33":{"position":[[792,2]]}}}],["58240",{"_index":1095,"t":{"155":{"position":[[342,6]]}}}],["59",{"_index":913,"t":{"118":{"position":[[3185,3],[3340,2]]},"120":{"position":[[730,2]]}}}],["5fx/2fx",{"_index":701,"t":{"97":{"position":[[1300,8]]}}}],["6",{"_index":481,"t":{"75":{"position":[[4,1]]},"77":{"position":[[133,1],[256,1]]},"85":{"position":[[90,1]]},"116":{"position":[[1146,1],[1819,1],[1878,2]]},"118":{"position":[[704,1],[763,2]]}}}],["60",{"_index":837,"t":{"112":{"position":[[479,2],[731,2]]},"114":{"position":[[415,3]]},"118":{"position":[[316,2],[349,2],[410,2],[2734,2],[3061,2],[4177,2],[4469,2]]},"120":{"position":[[90,2],[99,2],[1136,2],[2657,2],[2916,2]]},"251":{"position":[[742,3]]},"297":{"position":[[245,2]]}}}],["6000fx",{"_index":1163,"t":{"181":{"position":[[230,8]]}}}],["60fp",{"_index":897,"t":{"118":{"position":[[469,5]]}}}],["60th",{"_index":912,"t":{"118":{"position":[[3171,4]]},"120":{"position":[[524,4]]}}}],["61",{"_index":910,"t":{"118":{"position":[[3078,2]]}}}],["64",{"_index":160,"t":{"33":{"position":[[774,2]]},"259":{"position":[[136,3]]}}}],["65535",{"_index":1086,"t":{"155":{"position":[[233,5]]}}}],["7",{"_index":494,"t":{"77":{"position":[[135,1],[191,1],[259,1]]}}}],["77",{"_index":546,"t":{"85":{"position":[[190,2]]}}}],["8",{"_index":495,"t":{"77":{"position":[[137,1],[262,1]]},"85":{"position":[[362,1]]}}}],["8fx",{"_index":1424,"t":{"311":{"position":[[425,4]]},"317":{"position":[[429,4]]}}}],["9",{"_index":496,"t":{"77":{"position":[[139,1],[193,1],[265,1]]}}}],["90",{"_index":924,"t":{"118":{"position":[[4187,2]]}}}],["9000",{"_index":1098,"t":{"155":{"position":[[424,5]]}}}],["96",{"_index":868,"t":{"116":{"position":[[1704,2]]},"118":{"position":[[589,2]]}}}],["99",{"_index":616,"t":{"89":{"position":[[23,3],[100,2]]}}}],["ab",{"_index":249,"t":{"47":{"position":[[237,3]]}}}],["abov",{"_index":534,"t":{"83":{"position":[[43,5],[165,5]]},"105":{"position":[[1978,5],[2056,5],[4039,5],[4358,6]]}}}],["absent",{"_index":272,"t":{"47":{"position":[[409,6]]}}}],["absolut",{"_index":80,"t":{"20":{"position":[[64,8]]}}}],["abstract",{"_index":1006,"t":{"133":{"position":[[146,8]]}}}],["acceler",{"_index":1345,"t":{"255":{"position":[[51,13],[195,10],[219,13]]}}}],["accept",{"_index":199,"t":{"37":{"position":[[90,7]]}}}],["access",{"_index":222,"t":{"41":{"position":[[200,6]]},"99":{"position":[[288,6]]}}}],["accord",{"_index":1262,"t":{"219":{"position":[[260,9]]},"255":{"position":[[206,9]]}}}],["account",{"_index":938,"t":{"120":{"position":[[654,7]]},"126":{"position":[[47,7]]}}}],["accumul",{"_index":1031,"t":{"140":{"position":[[49,10]]}}}],["achiev",{"_index":824,"t":{"110":{"position":[[35,8]]},"112":{"position":[[471,7],[723,7]]},"120":{"position":[[1126,7]]},"297":{"position":[[270,9]]}}}],["aco",{"_index":250,"t":{"47":{"position":[[241,4]]}}}],["actual",{"_index":807,"t":{"105":{"position":[[2659,8]]},"319":{"position":[[194,8]]}}}],["ad",{"_index":877,"t":{"116":{"position":[[2537,5]]},"183":{"position":[[224,5]]}}}],["add",{"_index":609,"t":{"87":{"position":[[1192,3]]},"116":{"position":[[518,3],[633,3],[1331,3],[1366,3],[3051,3]]},"118":{"position":[[2283,3],[2440,3]]},"181":{"position":[[98,4]]},"183":{"position":[[103,4]]},"187":{"position":[[54,4]]},"213":{"position":[[91,4]]},"317":{"position":[[150,4]]}}}],["addit",{"_index":377,"t":{"59":{"position":[[320,8]]}}}],["addnum(44,33",{"_index":544,"t":{"85":{"position":[[164,13]]}}}],["addnum(99,121",{"_index":543,"t":{"85":{"position":[[149,14]]}}}],["addnum(num1",{"_index":540,"t":{"85":{"position":[[107,12]]}}}],["advanc",{"_index":387,"t":{"63":{"position":[[49,8]]},"130":{"position":[[279,8]]}}}],["afterward",{"_index":1265,"t":{"219":{"position":[[565,11]]}}}],["again",{"_index":713,"t":{"99":{"position":[[304,6]]},"103":{"position":[[164,6]]},"116":{"position":[[132,6],[3784,5]]}}}],["ahead",{"_index":816,"t":{"105":{"position":[[3850,5]]}}}],["aka",{"_index":95,"t":{"28":{"position":[[34,4]]},"99":{"position":[[255,3]]}}}],["aliv",{"_index":1041,"t":{"140":{"position":[[276,6]]},"225":{"position":[[93,6]]},"279":{"position":[[101,5]]},"287":{"position":[[169,6]]}}}],["allow",{"_index":13,"t":{"3":{"position":[[133,6]]},"79":{"position":[[552,7]]},"319":{"position":[[152,6],[227,6]]}}}],["along",{"_index":1218,"t":{"203":{"position":[[519,5]]},"309":{"position":[[203,5]]},"311":{"position":[[249,5],[341,5]]},"317":{"position":[[247,5],[339,5]]}}}],["alpha",{"_index":118,"t":{"31":{"position":[[321,5]]}}}],["alreadi",{"_index":275,"t":{"47":{"position":[[446,7]]},"101":{"position":[[604,7]]},"116":{"position":[[2999,7]]},"118":{"position":[[1717,7],[3980,7]]},"122":{"position":[[253,7]]},"143":{"position":[[101,7]]}}}],["altern",{"_index":1399,"t":{"297":{"position":[[199,12]]}}}],["although",{"_index":209,"t":{"39":{"position":[[150,8]]},"101":{"position":[[848,8]]},"118":{"position":[[3189,9]]}}}],["alway",{"_index":1449,"t":{"319":{"position":[[402,6]]}}}],["amaz",{"_index":848,"t":{"114":{"position":[[441,12]]}}}],["amount",{"_index":556,"t":{"85":{"position":[[408,6]]},"120":{"position":[[1211,6]]},"179":{"position":[[84,6]]},"191":{"position":[[135,6]]},"193":{"position":[[157,6]]},"211":{"position":[[79,6]]}}}],["amplif",{"_index":418,"t":{"67":{"position":[[259,13]]}}}],["angl",{"_index":85,"t":{"24":{"position":[[89,6],[96,5]]},"33":{"position":[[181,7]]},"53":{"position":[[518,6]]},"116":{"position":[[1229,5],[1781,5],[1846,5]]},"118":{"position":[[666,5],[731,5],[2174,6],[2262,5],[2307,7]]},"199":{"position":[[205,5],[305,5]]},"239":{"position":[[46,6],[175,5],[195,5]]},"241":{"position":[[50,6],[236,5],[256,5]]},"243":{"position":[[51,6],[240,6],[247,5],[267,5]]},"255":{"position":[[77,6],[294,6]]},"257":{"position":[[64,6]]},"263":{"position":[[56,6],[155,5],[161,5]]},"267":{"position":[[57,6]]},"311":{"position":[[64,6],[162,5]]},"317":{"position":[[70,6]]}}}],["angle_offset",{"_index":896,"t":{"118":{"position":[[271,12],[2422,13],[2508,13]]},"120":{"position":[[45,12],[149,12],[972,12]]}}}],["angular",{"_index":1003,"t":{"133":{"position":[[96,7]]}}}],["anim",{"_index":823,"t":{"110":{"position":[[5,10]]},"112":{"position":[[262,11],[342,10],[491,11],[738,11]]},"114":{"position":[[30,9]]},"118":{"position":[[15,9],[329,9],[456,9],[2773,7],[3669,10],[3749,10],[3773,9],[3845,9],[4396,9],[4443,9]]},"120":{"position":[[457,9],[570,10],[840,9],[1143,9],[1282,9],[1426,9],[1601,9],[1716,9],[2634,9],[2769,10],[2893,9],[3045,11]]},"297":{"position":[[252,10]]}}}],["anoth",{"_index":677,"t":{"97":{"position":[[0,7],[880,7]]},"105":{"position":[[1066,7],[2006,7]]}}}],["anyth",{"_index":463,"t":{"71":{"position":[[89,8],[194,8]]}}}],["anytim",{"_index":1452,"t":{"321":{"position":[[266,7]]}}}],["anyway",{"_index":817,"t":{"105":{"position":[[3873,7]]}}}],["anywher",{"_index":307,"t":{"51":{"position":[[179,9]]}}}],["api",{"_index":198,"t":{"37":{"position":[[81,3]]},"47":{"position":[[416,3]]},"93":{"position":[[339,4]]},"95":{"position":[[98,4],[309,6]]},"97":{"position":[[25,3]]},"99":{"position":[[68,3],[688,4]]},"105":{"position":[[214,4],[1098,4]]},"112":{"position":[[419,3]]},"118":{"position":[[3267,5]]}}}],["appear",{"_index":1037,"t":{"140":{"position":[[185,9]]},"307":{"position":[[191,6],[251,6]]},"309":{"position":[[260,6],[320,6]]}}}],["appli",{"_index":831,"t":{"112":{"position":[[182,7]]},"136":{"position":[[261,7]]},"219":{"position":[[556,8]]},"311":{"position":[[241,7]]},"317":{"position":[[239,7]]},"329":{"position":[[293,7],[323,7]]}}}],["approach",{"_index":969,"t":{"122":{"position":[[295,8]]}}}],["arc",{"_index":90,"t":{"26":{"position":[[91,3]]}}}],["argument",{"_index":488,"t":{"75":{"position":[[445,9]]},"247":{"position":[[835,9]]}}}],["arithmet",{"_index":146,"t":{"33":{"position":[[480,10]]}}}],["array",{"_index":302,"t":{"51":{"position":[[79,5]]}}}],["arrow",{"_index":753,"t":{"103":{"position":[[654,6]]},"213":{"position":[[99,5],[230,6],[276,5]]},"215":{"position":[[85,5]]}}}],["arrow'",{"_index":1254,"t":{"213":{"position":[[257,7]]}}}],["arrow_id",{"_index":1257,"t":{"215":{"position":[[57,9],[105,8]]}}}],["articl",{"_index":3,"t":{"3":{"position":[[26,8]]}}}],["asin",{"_index":251,"t":{"47":{"position":[[246,4]]}}}],["ask",{"_index":657,"t":{"93":{"position":[[561,3]]},"140":{"position":[[0,3]]}}}],["aspect",{"_index":972,"t":{"122":{"position":[[491,6]]}}}],["assign",{"_index":479,"t":{"73":{"position":[[200,8]]},"75":{"position":[[359,8]]},"105":{"position":[[1663,8]]},"114":{"position":[[44,9]]},"116":{"position":[[3221,9]]},"291":{"position":[[570,8],[633,8]]}}}],["assum",{"_index":637,"t":{"91":{"position":[[106,7]]},"219":{"position":[[390,8]]}}}],["asteroid",{"_index":1100,"t":{"160":{"position":[[0,8]]},"235":{"position":[[76,8]]},"237":{"position":[[97,8]]}}}],["asteroids",{"_index":1301,"t":{"237":{"position":[[134,12]]}}}],["astut",{"_index":379,"t":{"61":{"position":[[0,6]]}}}],["atan",{"_index":252,"t":{"47":{"position":[[251,4]]}}}],["atom",{"_index":1142,"t":{"168":{"position":[[17,7]]}}}],["atomize_explos",{"_index":1149,"t":{"172":{"position":[[44,17]]}}}],["attack",{"_index":415,"t":{"67":{"position":[[173,6]]}}}],["attribut",{"_index":1427,"t":{"313":{"position":[[121,10]]}}}],["autocomplet",{"_index":991,"t":{"130":{"position":[[73,14]]}}}],["automat",{"_index":1049,"t":{"145":{"position":[[94,14]]},"213":{"position":[[285,13]]}}}],["avail",{"_index":217,"t":{"41":{"position":[[48,9]]},"47":{"position":[[29,9],[79,9]]},"122":{"position":[[587,9]]},"209":{"position":[[369,10]]}}}],["averag",{"_index":1296,"t":{"233":{"position":[[307,7]]}}}],["away",{"_index":1015,"t":{"136":{"position":[[151,4]]},"203":{"position":[[451,4]]},"305":{"position":[[240,5]]}}}],["awesom",{"_index":595,"t":{"87":{"position":[[531,8],[902,8]]}}}],["axi",{"_index":1219,"t":{"203":{"position":[[531,5]]},"309":{"position":[[219,5]]},"311":{"position":[[259,4]]},"317":{"position":[[257,4]]}}}],["b",{"_index":152,"t":{"33":{"position":[[632,1],[1024,1]]},"75":{"position":[[82,1],[129,1],[182,1],[230,1]]}}}],["back",{"_index":408,"t":{"65":{"position":[[221,4]]},"91":{"position":[[171,4]]},"103":{"position":[[433,4]]},"105":{"position":[[193,4],[1522,4],[3682,5],[3713,4]]},"120":{"position":[[1292,4]]},"122":{"position":[[424,4]]}}}],["bad",{"_index":1030,"t":{"138":{"position":[[223,3]]}}}],["baf",{"_index":1101,"t":{"160":{"position":[[9,3]]},"227":{"position":[[204,5]]},"239":{"position":[[124,3],[214,3],[338,3],[425,3]]},"241":{"position":[[132,3],[189,3],[231,4],[275,3],[399,3],[486,3]]},"243":{"position":[[134,3],[192,3],[286,3],[410,3],[497,3]]}}}],["baf_blu",{"_index":1111,"t":{"160":{"position":[[126,8]]}}}],["baf_r",{"_index":1112,"t":{"160":{"position":[[135,7]]}}}],["bag",{"_index":1064,"t":{"149":{"position":[[28,3]]}}}],["base",{"_index":356,"t":{"57":{"position":[[165,5]]},"114":{"position":[[89,4]]},"116":{"position":[[25,5]]},"219":{"position":[[204,4],[277,4],[376,4],[403,4],[609,4],[687,4]]}}}],["basic",{"_index":399,"t":{"65":{"position":[[55,5]]},"89":{"position":[[386,9]]},"91":{"position":[[128,5]]},"114":{"position":[[352,5]]}}}],["be",{"_index":818,"t":{"105":{"position":[[3978,5]]},"233":{"position":[[298,5]]},"281":{"position":[[137,5]]}}}],["becom",{"_index":1051,"t":{"145":{"position":[[161,6]]}}}],["befor",{"_index":395,"t":{"65":{"position":[[0,6]]},"95":{"position":[[0,6]]},"105":{"position":[[991,6],[2445,6]]},"114":{"position":[[0,6]]},"251":{"position":[[383,6]]}}}],["begin",{"_index":640,"t":{"93":{"position":[[15,5]]},"95":{"position":[[10,5]]}}}],["beginn",{"_index":402,"t":{"65":{"position":[[153,8]]},"91":{"position":[[185,8]]},"122":{"position":[[226,8]]}}}],["behavior",{"_index":978,"t":{"124":{"position":[[185,8]]}}}],["belong",{"_index":1354,"t":{"263":{"position":[[167,9]]},"323":{"position":[[656,7]]}}}],["below",{"_index":733,"t":{"101":{"position":[[575,6]]},"103":{"position":[[453,6],[606,6]]},"105":{"position":[[2391,5],[3519,5],[3732,6],[3955,6]]},"118":{"position":[[2455,5]]}}}],["better",{"_index":702,"t":{"97":{"position":[[1319,7]]}}}],["between",{"_index":361,"t":{"57":{"position":[[263,7]]},"112":{"position":[[640,7]]},"118":{"position":[[4353,7]]},"120":{"position":[[1581,7],[1695,7]]},"195":{"position":[[71,7]]},"199":{"position":[[211,8],[265,8],[311,8],[366,8]]}}}],["bit",{"_index":110,"t":{"31":{"position":[[237,4]]},"33":{"position":[[777,4],[795,4],[849,4]]},"59":{"position":[[164,3]]},"105":{"position":[[2598,4]]}}}],["black",{"_index":669,"t":{"95":{"position":[[443,5]]}}}],["blend",{"_index":378,"t":{"59":{"position":[[329,9]]}}}],["blender",{"_index":994,"t":{"130":{"position":[[163,7]]}}}],["blog",{"_index":2,"t":{"3":{"position":[[21,4]]}}}],["blue",{"_index":1307,"t":{"243":{"position":[[129,4],[187,4]]}}}],["bob",{"_index":574,"t":{"87":{"position":[[108,6],[259,3]]}}}],["bomb",{"_index":1110,"t":{"160":{"position":[[121,4]]},"245":{"position":[[83,4]]}}}],["bomb_explos",{"_index":1116,"t":{"160":{"position":[[181,14]]}}}],["bonu",{"_index":1024,"t":{"138":{"position":[[48,5]]},"160":{"position":[[213,5]]},"247":{"position":[[295,5],[746,5],[803,6],[866,6]]}}}],["bonus",{"_index":1014,"t":{"136":{"position":[[143,7]]},"247":{"position":[[376,8],[468,8],[599,8]]}}}],["bonus_implos",{"_index":1120,"t":{"160":{"position":[[247,15]]}}}],["bool",{"_index":1210,"t":{"203":{"position":[[77,5]]},"207":{"position":[[83,4]]},"251":{"position":[[144,4]]},"273":{"position":[[95,4]]},"275":{"position":[[86,4]]},"279":{"position":[[49,4]]},"281":{"position":[[67,4]]},"291":{"position":[[132,4]]},"293":{"position":[[84,4]]},"321":{"position":[[94,5]]}}}],["boolean",{"_index":313,"t":{"51":{"position":[[444,7]]},"75":{"position":[[368,7]]},"325":{"position":[[419,7],[505,7]]}}}],["border",{"_index":1021,"t":{"136":{"position":[[301,8]]}}}],["both",{"_index":487,"t":{"75":{"position":[[433,4],[567,4]]},"203":{"position":[[596,4]]}}}],["bounc",{"_index":1308,"t":{"243":{"position":[[196,7]]}}}],["boundari",{"_index":1161,"t":{"181":{"position":[[170,11]]}}}],["box",{"_index":670,"t":{"95":{"position":[[449,5]]},"247":{"position":[[926,3]]}}}],["box_dur",{"_index":1314,"t":{"247":{"position":[[75,13]]}}}],["bracket",{"_index":613,"t":{"87":{"position":[[1298,8]]},"105":{"position":[[3318,8]]}}}],["break",{"_index":533,"t":{"83":{"position":[[29,5],[147,5],[255,5],[289,5],[327,5],[374,5]]}}}],["breaker",{"_index":436,"t":{"67":{"position":[[627,10]]}}}],["brief",{"_index":719,"t":{"99":{"position":[[648,8]]},"105":{"position":[[3145,5]]}}}],["broadcast",{"_index":1090,"t":{"155":{"position":[[288,12]]}}}],["bronz",{"_index":296,"t":{"49":{"position":[[355,9]]},"51":{"position":[[589,7]]}}}],["brownnois",{"_index":439,"t":{"67":{"position":[[665,13]]}}}],["browser",{"_index":448,"t":{"69":{"position":[[60,8]]}}}],["build",{"_index":1076,"t":{"153":{"position":[[134,5]]}}}],["built",{"_index":130,"t":{"33":{"position":[[213,5]]}}}],["bullet",{"_index":1045,"t":{"143":{"position":[[80,7]]},"172":{"position":[[0,6]]},"221":{"position":[[146,7]]},"263":{"position":[[119,6],[246,7]]},"291":{"position":[[469,7],[516,7]]},"325":{"position":[[492,7],[536,6],[880,9]]}}}],["bunch",{"_index":731,"t":{"101":{"position":[[362,5]]}}}],["byte",{"_index":202,"t":{"37":{"position":[[121,5]]},"43":{"position":[[45,4]]}}}],["c",{"_index":155,"t":{"33":{"position":[[656,1],[1062,1]]}}}],["call",{"_index":333,"t":{"53":{"position":[[226,6]]},"97":{"position":[[360,4]]},"101":{"position":[[817,4],[865,4]]},"103":{"position":[[100,6],[797,6]]},"105":{"position":[[2497,6],[2846,4],[4281,6]]},"145":{"position":[[50,6],[87,6]]},"181":{"position":[[263,7]]},"247":{"position":[[730,6]]},"287":{"position":[[106,6],[242,6]]},"321":{"position":[[259,6],[317,6]]},"323":{"position":[[227,6]]},"325":{"position":[[236,6]]}}}],["callback",{"_index":1180,"t":{"187":{"position":[[61,8]]},"247":{"position":[[814,8]]},"287":{"position":[[56,9],[84,8],[187,8],[213,9],[227,9]]},"321":{"position":[[303,8],[365,9]]},"323":{"position":[[119,8],[213,8],[276,9]]},"325":{"position":[[126,8],[222,8],[289,8],[396,8]]}}}],["camera",{"_index":1217,"t":{"203":{"position":[[439,6],[584,7],[661,6]]}}}],["camera_dist",{"_index":1213,"t":{"203":{"position":[[158,16],[399,15],[777,15]]}}}],["camera_rotation_x_axi",{"_index":1214,"t":{"203":{"position":[[187,23],[471,22]]}}}],["camera_x_overrid",{"_index":1211,"t":{"203":{"position":[[96,18],[601,17]]}}}],["camera_y_overrid",{"_index":1212,"t":{"203":{"position":[[127,18],[623,18]]}}}],["can't",{"_index":149,"t":{"33":{"position":[[554,5]]},"147":{"position":[[20,5],[172,5],[328,5]]}}}],["cannon",{"_index":1234,"t":{"209":{"position":[[95,7],[254,6],[284,7],[556,6],[698,6]]},"247":{"position":[[94,7],[489,7],[1016,7]]}}}],["canva",{"_index":759,"t":{"103":{"position":[[995,7]]}}}],["care",{"_index":532,"t":{"81":{"position":[[475,7]]}}}],["case",{"_index":365,"t":{"57":{"position":[[336,5],[395,5]]},"120":{"position":[[921,5],[953,5]]},"181":{"position":[[337,6]]},"291":{"position":[[380,4],[459,4]]},"325":{"position":[[482,4]]}}}],["categori",{"_index":977,"t":{"124":{"position":[[91,11]]}}}],["ceil",{"_index":253,"t":{"47":{"position":[[256,4]]}}}],["center",{"_index":1406,"t":{"303":{"position":[[164,6]]}}}],["center_i",{"_index":1272,"t":{"223":{"position":[[63,9]]}}}],["center_x",{"_index":1271,"t":{"223":{"position":[[41,9]]}}}],["chain",{"_index":354,"t":{"57":{"position":[[103,7],[124,5]]}}}],["chanc",{"_index":1023,"t":{"138":{"position":[[28,6]]}}}],["chang",{"_index":756,"t":{"103":{"position":[[884,6]]},"112":{"position":[[293,6]]},"116":{"position":[[3501,6]]},"118":{"position":[[233,6],[2017,6],[2163,6],[2334,6],[3630,7]]},"120":{"position":[[622,6],[671,7],[698,6],[1339,6],[1574,6]]}}}],["char",{"_index":225,"t":{"43":{"position":[[50,4]]},"51":{"position":[[49,4]]}}}],["charact",{"_index":192,"t":{"37":{"position":[[21,11]]},"49":{"position":[[225,10]]},"51":{"position":[[239,10]]}}}],["check",{"_index":851,"t":{"116":{"position":[[142,5],[3751,5],[3794,5]]}}}],["circl",{"_index":873,"t":{"116":{"position":[[1963,6]]},"118":{"position":[[848,6]]}}}],["clamp",{"_index":1162,"t":{"181":{"position":[[203,7]]}}}],["clockwis",{"_index":894,"t":{"118":{"position":[[94,9],[2106,9]]}}}],["closer",{"_index":1409,"t":{"305":{"position":[[184,7]]}}}],["co",{"_index":254,"t":{"47":{"position":[[261,3]]}}}],["code",{"_index":503,"t":{"77":{"position":[[426,4]]},"85":{"position":[[418,4],[465,4],[561,4],[706,5]]},"93":{"position":[[502,4]]},"95":{"position":[[405,4]]},"97":{"position":[[220,4],[740,4]]},"99":{"position":[[482,4]]},"103":{"position":[[52,5],[121,5],[419,5]]},"105":{"position":[[110,4],[354,4],[424,5],[1973,4],[2062,4],[2219,4],[2331,4],[2760,4],[2973,5]]},"116":{"position":[[1651,4]]},"118":{"position":[[1884,4],[2974,5],[3481,4]]},"120":{"position":[[105,4],[211,4],[254,4],[633,4],[812,4],[3022,4]]},"122":{"position":[[136,5]]},"128":{"position":[[13,5]]},"130":{"position":[[46,4],[99,4]]}}}],["codebas",{"_index":988,"t":{"128":{"position":[[144,9]]}}}],["collect",{"_index":326,"t":{"53":{"position":[[28,10]]}}}],["collid",{"_index":1273,"t":{"223":{"position":[[142,10]]},"273":{"position":[[151,8]]},"275":{"position":[[133,8]]},"321":{"position":[[197,9]]},"323":{"position":[[178,8]]},"325":{"position":[[185,8]]}}}],["collide_with_wal",{"_index":1365,"t":{"273":{"position":[[75,19]]},"275":{"position":[[66,19]]},"321":{"position":[[74,19],[131,18]]}}}],["collis",{"_index":1453,"t":{"321":{"position":[[276,9],[515,9]]},"323":{"position":[[345,10],[426,10]]}}}],["collision_callback",{"_index":1451,"t":{"321":{"position":[[100,19],[222,18]]},"323":{"position":[[79,19]]}}}],["color",{"_index":101,"t":{"31":{"position":[[63,7],[213,6]]},"53":{"position":[[418,6],[578,6]]},"59":{"position":[[13,6],[39,6],[71,6],[120,6],[150,6]]},"213":{"position":[[73,6],[237,5],[265,6]]},"233":{"position":[[55,6],[163,5],[183,5]]},"299":{"position":[[64,6],[86,5]]}}}],["color_end",{"_index":1433,"t":{"315":{"position":[[108,10]]}}}],["color_start",{"_index":1432,"t":{"315":{"position":[[90,12]]}}}],["combin",{"_index":529,"t":{"81":{"position":[[359,9]]}}}],["come",{"_index":407,"t":{"65":{"position":[[216,4]]},"120":{"position":[[1778,5]]},"122":{"position":[[419,4]]}}}],["comma",{"_index":506,"t":{"77":{"position":[[581,6]]}}}],["commun",{"_index":962,"t":{"122":{"position":[[5,9]]}}}],["complet",{"_index":940,"t":{"120":{"position":[[831,8]]}}}],["compon",{"_index":19,"t":{"3":{"position":[[179,12]]}}}],["comput",{"_index":122,"t":{"33":{"position":[[49,9]]},"105":{"position":[[3807,8]]}}}],["computed_seg",{"_index":854,"t":{"116":{"position":[[728,17],[2714,19],[2860,19],[2966,19],[3176,17]]},"118":{"position":[[547,17],[1432,19],[1578,19],[1684,19],[1818,17]]}}}],["computed_vertex",{"_index":853,"t":{"116":{"position":[[709,18],[3146,18]]},"118":{"position":[[528,18],[1788,18]]}}}],["concat",{"_index":242,"t":{"45":{"position":[[45,6]]}}}],["concern",{"_index":1065,"t":{"149":{"position":[[57,10]]}}}],["condit",{"_index":530,"t":{"81":{"position":[[399,10]]}}}],["config",{"_index":1313,"t":{"247":{"position":[[59,7]]},"251":{"position":[[72,7]]},"315":{"position":[[74,7]]}}}],["configur",{"_index":1099,"t":{"157":{"position":[[50,11]]},"203":{"position":[[44,14],[279,10]]},"205":{"position":[[48,14],[97,10]]},"207":{"position":[[119,13]]},"209":{"position":[[56,14],[126,10],[190,14],[443,14],[525,14],[587,10]]},"315":{"position":[[283,10]]},"321":{"position":[[150,10]]}}}],["congratul",{"_index":958,"t":{"120":{"position":[[2846,16]]}}}],["connect",{"_index":358,"t":{"57":{"position":[[206,9]]},"116":{"position":[[1409,7],[1440,7],[1491,7],[1554,7]]}}}],["consid",{"_index":781,"t":{"105":{"position":[[808,8]]}}}],["consist",{"_index":758,"t":{"103":{"position":[[938,12]]},"128":{"position":[[107,10]]},"153":{"position":[[30,7]]}}}],["consol",{"_index":1152,"t":{"177":{"position":[[44,7]]}}}],["constant",{"_index":137,"t":{"33":{"position":[[377,8]]},"47":{"position":[[359,10]]}}}],["consum",{"_index":445,"t":{"67":{"position":[[798,10]]}}}],["contain",{"_index":33,"t":{"5":{"position":[[6,8]]},"51":{"position":[[267,7],[322,8],[537,8]]},"53":{"position":[[257,7]]},"55":{"position":[[19,8]]},"57":{"position":[[77,7]]},"59":{"position":[[26,8],[104,7]]},"103":{"position":[[340,8]]},"124":{"position":[[28,8]]},"149":{"position":[[10,8]]},"157":{"position":[[19,8]]},"207":{"position":[[104,10]]}}}],["content",{"_index":923,"t":{"118":{"position":[[3949,7]]}}}],["content/level",{"_index":844,"t":{"114":{"position":[[157,18]]}}}],["continu",{"_index":452,"t":{"69":{"position":[[180,8]]},"291":{"position":[[347,8]]}}}],["convert",{"_index":181,"t":{"33":{"position":[[1297,9]]},"130":{"position":[[182,10]]}}}],["cool",{"_index":390,"t":{"63":{"position":[[110,4]]},"73":{"position":[[139,5],[178,4]]}}}],["coordin",{"_index":127,"t":{"33":{"position":[[168,12]]},"53":{"position":[[94,11]]},"118":{"position":[[2629,11]]}}}],["corner",{"_index":1008,"t":{"136":{"position":[[0,7],[165,8]]}}}],["correspond",{"_index":861,"t":{"116":{"position":[[1192,13],[2226,13]]},"118":{"position":[[1111,13]]}}}],["cosin",{"_index":862,"t":{"116":{"position":[[1215,6]]}}}],["cosinu",{"_index":84,"t":{"24":{"position":[[78,7]]}}}],["counter",{"_index":867,"t":{"116":{"position":[[1623,7]]},"193":{"position":[[99,7],[179,7],[367,7]]}}}],["counterclockwis",{"_index":895,"t":{"118":{"position":[[126,17],[2134,17]]}}}],["coupl",{"_index":642,"t":{"93":{"position":[[62,6]]}}}],["cover",{"_index":705,"t":{"99":{"position":[[34,5]]}}}],["crazi",{"_index":1062,"t":{"147":{"position":[[421,6]]}}}],["creat",{"_index":246,"t":{"47":{"position":[[94,8]]},"53":{"position":[[58,6],[211,6]]},"101":{"position":[[741,6]]},"103":{"position":[[727,6]]},"107":{"position":[[9,7]]},"114":{"position":[[132,8],[189,7]]},"116":{"position":[[999,6],[1062,6],[3197,8],[3279,8],[3369,8],[3560,8]]},"118":{"position":[[3658,7]]},"120":{"position":[[264,6],[2623,7]]},"122":{"position":[[62,8],[113,7]]},"130":{"position":[[117,8],[270,8]]},"133":{"position":[[71,7]]},"143":{"position":[[149,8]]},"179":{"position":[[68,7]]},"233":{"position":[[108,7]]},"235":{"position":[[62,7]]},"237":{"position":[[83,7]]},"239":{"position":[[110,7],[416,6]]},"241":{"position":[[114,7],[477,6]]},"243":{"position":[[115,7],[488,6]]},"245":{"position":[[69,7]]},"247":{"position":[[281,7]]},"249":{"position":[[61,7]]},"251":{"position":[[163,7]]},"253":{"position":[[73,7]]},"255":{"position":[[107,7]]},"257":{"position":[[94,7]]},"259":{"position":[[76,7]]},"261":{"position":[[84,7]]},"263":{"position":[[105,7]]},"265":{"position":[[66,7]]},"267":{"position":[[106,7]]},"269":{"position":[[58,7]]},"271":{"position":[[73,7]]}}}],["creation",{"_index":442,"t":{"67":{"position":[[702,9]]},"112":{"position":[[39,9]]},"122":{"position":[[507,9]]}}}],["creativ",{"_index":961,"t":{"120":{"position":[[3036,8]]}}}],["creator",{"_index":735,"t":{"101":{"position":[[681,8]]},"122":{"position":[[551,7],[574,8]]}}}],["crowder",{"_index":1108,"t":{"160":{"position":[[88,7]]},"249":{"position":[[75,7]]}}}],["crucial",{"_index":660,"t":{"95":{"position":[[60,7]]}}}],["cube",{"_index":1357,"t":{"265":{"position":[[88,4]]},"273":{"position":[[127,4]]}}}],["cubed(10",{"_index":552,"t":{"85":{"position":[[335,9]]}}}],["cubed(2",{"_index":550,"t":{"85":{"position":[[286,8]]}}}],["cubed(3",{"_index":551,"t":{"85":{"position":[[305,8]]}}}],["cubed(numb",{"_index":547,"t":{"85":{"position":[[208,13]]}}}],["current",{"_index":792,"t":{"105":{"position":[[1798,7]]},"120":{"position":[[1593,7]]},"197":{"position":[[28,7]]},"221":{"position":[[96,9]]}}}],["curv",{"_index":1005,"t":{"133":{"position":[[123,6]]}}}],["custom",{"_index":388,"t":{"63":{"position":[[84,6]]},"91":{"position":[[251,6]]},"101":{"position":[[491,6],[953,6]]},"105":{"position":[[1814,6]]},"122":{"position":[[71,6]]},"126":{"position":[[112,6]]},"155":{"position":[[353,6]]},"221":{"position":[[166,6]]}}}],["customiz",{"_index":1343,"t":{"253":{"position":[[87,12]]},"295":{"position":[[111,12]]},"299":{"position":[[123,12]]},"301":{"position":[[134,12]]},"303":{"position":[[177,12]]},"305":{"position":[[111,12]]},"307":{"position":[[118,12]]},"309":{"position":[[166,12]]},"311":{"position":[[187,12]]},"317":{"position":[[185,12]]},"323":{"position":[[141,12],[392,12]]},"325":{"position":[[148,12]]},"327":{"position":[[99,12]]},"329":{"position":[[101,12]]}}}],["customizable_ent",{"_index":1109,"t":{"160":{"position":[[96,19]]}}}],["customizable_entity_set_mesh",{"_index":1398,"t":{"297":{"position":[[128,29]]}}}],["d",{"_index":171,"t":{"33":{"position":[[1105,1]]}}}],["damag",{"_index":1246,"t":{"211":{"position":[[53,7],[132,6],[170,6]]}}}],["data",{"_index":608,"t":{"87":{"position":[[1179,5],[1219,5]]},"89":{"position":[[426,4],[515,4],[566,5]]},"95":{"position":[[524,4],[650,4]]}}}],["dawn",{"_index":579,"t":{"87":{"position":[[184,6],[273,4]]}}}],["de",{"_index":1016,"t":{"136":{"position":[[177,2]]}}}],["deal",{"_index":248,"t":{"47":{"position":[[155,7]]},"97":{"position":[[500,7]]},"105":{"position":[[686,7]]}}}],["debug",{"_index":1153,"t":{"177":{"position":[[56,10]]},"179":{"position":[[33,5]]}}}],["decay",{"_index":416,"t":{"67":{"position":[[193,5]]}}}],["decid",{"_index":1387,"t":{"291":{"position":[[314,6]]}}}],["decim",{"_index":177,"t":{"33":{"position":[[1239,7]]},"97":{"position":[[927,9],[1174,9]]}}}],["default",{"_index":864,"t":{"116":{"position":[[1281,7]]},"219":{"position":[[231,8]]},"247":{"position":[[918,7]]},"251":{"position":[[318,7]]},"273":{"position":[[175,7]]},"275":{"position":[[157,7]]}}}],["defin",{"_index":138,"t":{"33":{"position":[[389,7]]},"39":{"position":[[125,6]]},"53":{"position":[[308,7]]},"67":{"position":[[23,7]]},"87":{"position":[[1268,7]]},"116":{"position":[[892,8]]},"311":{"position":[[264,7]]},"317":{"position":[[262,7]]},"319":{"position":[[108,8]]}}}],["deg",{"_index":255,"t":{"47":{"position":[[265,3]]}}}],["degre",{"_index":1422,"t":{"311":{"position":[[333,7]]},"317":{"position":[[331,7]]}}}],["delta",{"_index":1186,"t":{"191":{"position":[[52,6],[145,6],[227,5]]},"193":{"position":[[59,6],[167,6],[541,5]]}}}],["denomin",{"_index":71,"t":{"16":{"position":[[37,12],[146,11]]}}}],["depend",{"_index":902,"t":{"118":{"position":[[2181,9]]},"251":{"position":[[492,9]]}}}],["describ",{"_index":332,"t":{"53":{"position":[[184,10]]},"57":{"position":[[18,9]]},"61":{"position":[[56,9]]},"67":{"position":[[155,8]]},"124":{"position":[[114,8],[144,8],[172,8]]},"229":{"position":[[76,9]]},"231":{"position":[[98,9]]},"233":{"position":[[213,9]]},"291":{"position":[[191,9]]},"295":{"position":[[160,9]]}}}],["descript",{"_index":284,"t":{"49":{"position":[[108,15],[134,11]]},"51":{"position":[[60,12],[118,13]]},"105":{"position":[[2542,12],[3003,15],[3027,14],[3274,12]]},"114":{"position":[[425,15]]}}}],["design",{"_index":1004,"t":{"133":{"position":[[104,7],[130,8],[155,7],[178,8]]}}}],["destroy",{"_index":1191,"t":{"193":{"position":[[412,9]]},"213":{"position":[[333,10]]},"239":{"position":[[345,9]]},"241":{"position":[[406,9]]},"243":{"position":[[417,9]]},"281":{"position":[[143,10]]},"325":{"position":[[553,10]]},"329":{"position":[[230,10]]}}}],["detail",{"_index":693,"t":{"97":{"position":[[989,7]]},"99":{"position":[[570,6]]}}}],["detect",{"_index":1454,"t":{"321":{"position":[[289,9]]},"323":{"position":[[445,9]]}}}],["determin",{"_index":205,"t":{"39":{"position":[[49,11]]},"193":{"position":[[198,9],[300,9]]},"209":{"position":[[215,10],[261,10],[301,10]]},"247":{"position":[[414,10]]},"251":{"position":[[267,10],[351,10]]},"325":{"position":[[513,10]]}}}],["develop",{"_index":9,"t":{"3":{"position":[[87,11]]},"101":{"position":[[622,10]]},"153":{"position":[[222,12]]},"155":{"position":[[366,11]]}}}],["devic",{"_index":926,"t":{"118":{"position":[[4274,7]]}}}],["dictat",{"_index":820,"t":{"105":{"position":[[4193,8]]}}}],["differ",{"_index":360,"t":{"57":{"position":[[252,10]]},"79":{"position":[[840,9]]},"85":{"position":[[519,9]]},"97":{"position":[[105,10],[893,10]]},"103":{"position":[[149,10]]},"105":{"position":[[2907,9]]},"110":{"position":[[99,9]]},"114":{"position":[[295,10]]},"118":{"position":[[4342,10]]},"120":{"position":[[1684,10]]},"155":{"position":[[25,9]]},"219":{"position":[[341,9],[366,9]]}}}],["direct",{"_index":648,"t":{"93":{"position":[[242,11]]},"255":{"position":[[271,9]]}}}],["directori",{"_index":975,"t":{"124":{"position":[[13,9]]}}}],["disappear",{"_index":1384,"t":{"289":{"position":[[89,9]]}}}],["discord",{"_index":656,"t":{"93":{"position":[[549,7]]},"103":{"position":[[234,8]]},"122":{"position":[[600,8]]}}}],["discov",{"_index":1040,"t":{"140":{"position":[[239,10]]}}}],["discoveri",{"_index":1089,"t":{"155":{"position":[[267,9]]}}}],["discuss",{"_index":658,"t":{"93":{"position":[[588,8]]}}}],["disk",{"_index":1275,"t":{"223":{"position":[[219,5]]}}}],["display",{"_index":306,"t":{"51":{"position":[[169,9]]},"118":{"position":[[4161,7]]},"301":{"position":[[97,9]]}}}],["distanc",{"_index":1201,"t":{"199":{"position":[[256,8],[357,8]]},"219":{"position":[[301,8]]}}}],["do",{"_index":880,"t":{"116":{"position":[[2670,5]]},"118":{"position":[[3647,5]]},"147":{"position":[[398,5]]}}}],["doc",{"_index":30,"t":{"3":{"position":[[290,5]]}}}],["document",{"_index":10,"t":{"3":{"position":[[99,13],[205,13]]},"33":{"position":[[315,10]]},"43":{"position":[[176,13]]},"45":{"position":[[121,13]]},"47":{"position":[[593,13]]}}}],["doesn't",{"_index":612,"t":{"87":{"position":[[1249,7]]}}}],["dollar",{"_index":603,"t":{"87":{"position":[[786,10],[1016,8]]}}}],["don't",{"_index":451,"t":{"69":{"position":[[162,5]]},"77":{"position":[[671,5]]},"85":{"position":[[712,5]]},"89":{"position":[[652,5]]},"95":{"position":[[581,5]]},"97":{"position":[[413,5],[536,5],[1147,5]]},"105":{"position":[[152,5],[759,5]]},"116":{"position":[[3703,6]]},"323":{"position":[[356,5]]}}}],["done",{"_index":406,"t":{"65":{"position":[[202,5]]},"87":{"position":[[1145,4]]},"105":{"position":[[3572,5]]},"118":{"position":[[2912,4]]}}}],["doubl",{"_index":947,"t":{"120":{"position":[[1200,6]]},"164":{"position":[[15,6]]}}}],["double_swip",{"_index":1129,"t":{"164":{"position":[[45,12]]}}}],["down",{"_index":646,"t":{"93":{"position":[[203,4]]},"103":{"position":[[601,4]]},"105":{"position":[[2386,4],[3514,4]]}}}],["download",{"_index":726,"t":{"101":{"position":[[123,10]]}}}],["dump",{"_index":226,"t":{"43":{"position":[[55,4]]}}}],["durat",{"_index":100,"t":{"31":{"position":[[49,9],[71,9],[168,8]]},"35":{"position":[[105,8]]},"209":{"position":[[108,9],[292,8],[389,8],[461,8]]},"219":{"position":[[89,9],[483,8],[624,8]]},"247":{"position":[[930,8]]},"327":{"position":[[148,8]]},"329":{"position":[[152,8]]}}}],["dure",{"_index":882,"t":{"116":{"position":[[2802,6],[2908,6]]},"118":{"position":[[1520,6],[1626,6]]},"209":{"position":[[337,6]]},"219":{"position":[[515,6]]}}}],["dux_fix",{"_index":159,"t":{"33":{"position":[[752,10]]}}}],["dx",{"_index":1362,"t":{"271":{"position":[[46,3],[147,3]]}}}],["dynamic/graphics.lua",{"_index":889,"t":{"116":{"position":[[3470,24]]},"118":{"position":[[3407,24]]},"120":{"position":[[1862,24],[1955,24]]},"295":{"position":[[386,24]]},"297":{"position":[[392,24]]}}}],["e",{"_index":174,"t":{"33":{"position":[[1157,1]]}}}],["each",{"_index":355,"t":{"57":{"position":[[111,4]]},"59":{"position":[[49,4]]},"105":{"position":[[1601,4]]},"110":{"position":[[114,4]]},"118":{"position":[[405,4],[2223,4]]},"187":{"position":[[94,4]]}}}],["easier",{"_index":614,"t":{"87":{"position":[[1343,6]]},"105":{"position":[[845,6]]}}}],["editor",{"_index":655,"t":{"93":{"position":[[482,6]]},"103":{"position":[[93,6],[203,6],[300,7],[502,7]]}}}],["effect",{"_index":220,"t":{"41":{"position":[[139,7]]},"47":{"position":[[60,8]]},"219":{"position":[[138,9],[440,9],[532,9],[650,9]]},"319":{"position":[[373,11]]}}}],["empti",{"_index":755,"t":{"103":{"position":[[711,6],[989,5]]},"295":{"position":[[250,5]]}}}],["enabl",{"_index":1391,"t":{"293":{"position":[[76,7]]}}}],["encod",{"_index":114,"t":{"31":{"position":[[285,7]]},"33":{"position":[[812,6]]}}}],["end",{"_index":483,"t":{"75":{"position":[[45,3],[116,3],[170,3],[223,3],[251,3],[320,3]]},"77":{"position":[[32,3],[111,3],[173,3],[226,3],[331,3],[508,3],[597,3]]},"79":{"position":[[98,3],[102,3],[370,3],[374,3],[479,3],[483,3]]},"81":{"position":[[46,3],[144,3],[198,3]]},"83":{"position":[[35,3],[153,3],[157,3],[261,3],[265,3]]},"85":{"position":[[65,3],[145,3],[272,3]]},"87":{"position":[[169,3]]},"89":{"position":[[78,3],[242,3]]},"116":{"position":[[2511,3],[2564,3],[3043,4]]},"118":{"position":[[1396,3],[1839,3],[3363,3],[3472,4]]},"120":{"position":[[136,3],[242,3],[753,3],[800,3]]},"187":{"position":[[250,4]]},"197":{"position":[[19,4]]},"227":{"position":[[210,3]]},"287":{"position":[[455,3]]},"321":{"position":[[562,3]]},"323":{"position":[[698,3]]},"325":{"position":[[890,3],[906,4]]}}}],["end_i",{"_index":1172,"t":{"183":{"position":[[78,6]]}}}],["end_x",{"_index":1171,"t":{"183":{"position":[[59,6]]}}}],["end_x,end_i",{"_index":1174,"t":{"183":{"position":[[154,14]]}}}],["enemi",{"_index":389,"t":{"63":{"position":[[91,8]]},"99":{"position":[[216,7],[246,8],[416,5]]},"136":{"position":[[231,7]]},"140":{"position":[[205,7],[270,5]]},"193":{"position":[[403,5],[451,5]]},"223":{"position":[[182,8]]}}}],["enjoy",{"_index":31,"t":{"3":{"position":[[296,6]]}}}],["ensur",{"_index":929,"t":{"118":{"position":[[4326,6]]}}}],["enter",{"_index":728,"t":{"101":{"position":[[213,5],[543,5]]},"103":{"position":[[839,6]]},"105":{"position":[[3412,6]]}}}],["entireti",{"_index":6,"t":{"3":{"position":[[65,8]]}}}],["entiti",{"_index":186,"t":{"35":{"position":[[30,7]]},"112":{"position":[[320,6],[621,6]]},"114":{"position":[[63,7]]},"116":{"position":[[64,7],[3210,6],[3291,6]]},"118":{"position":[[203,6],[2785,7]]},"120":{"position":[[2069,7],[2082,6],[2406,6]]},"143":{"position":[[13,8],[114,9],[132,8]]},"157":{"position":[[82,9]]},"179":{"position":[[59,8]]},"181":{"position":[[127,8]]},"213":{"position":[[162,6],[323,6]]},"221":{"position":[[87,8],[173,9],[198,8],[264,9],[279,8]]},"223":{"position":[[153,8],[240,8]]},"225":{"position":[[62,8]]},"227":{"position":[[79,7],[192,6]]},"247":{"position":[[849,6],[903,6]]},"253":{"position":[[100,6]]},"277":{"position":[[100,6]]},"279":{"position":[[74,6]]},"281":{"position":[[92,6],[175,6]]},"283":{"position":[[105,6]]},"285":{"position":[[91,6]]},"287":{"position":[[142,6],[258,6],[435,6]]},"289":{"position":[[53,6]]},"291":{"position":[[147,6],[244,6]]},"293":{"position":[[211,6]]},"295":{"position":[[124,6]]},"299":{"position":[[136,6]]},"301":{"position":[[147,6]]},"303":{"position":[[190,6]]},"305":{"position":[[124,6]]},"307":{"position":[[131,6]]},"309":{"position":[[179,6]]},"311":{"position":[[200,6],[320,6]]},"315":{"position":[[306,6],[369,6]]},"317":{"position":[[198,6],[318,6]]},"319":{"position":[[139,7],[184,6],[395,6]]},"321":{"position":[[173,6],[333,6],[350,6],[539,6]]},"323":{"position":[[154,6],[243,6],[260,6],[405,7],[554,7]]},"325":{"position":[[161,6],[269,6],[446,6]]},"327":{"position":[[112,6]]},"329":{"position":[[114,6],[220,6],[308,6]]}}}],["entity'",{"_index":885,"t":{"116":{"position":[[3336,8]]},"118":{"position":[[2885,8]]}}}],["entity_id",{"_index":1253,"t":{"213":{"position":[[185,10]]},"273":{"position":[[54,10]]},"275":{"position":[[45,10]]},"283":{"position":[[28,10]]},"285":{"position":[[26,10]]},"287":{"position":[[35,10]]},"291":{"position":[[31,10]]},"293":{"position":[[55,10]]},"295":{"position":[[37,10]]},"297":{"position":[[48,10]]},"299":{"position":[[43,10]]},"301":{"position":[[39,10]]},"303":{"position":[[41,10]]},"305":{"position":[[39,10]]},"307":{"position":[[43,10]]},"309":{"position":[[47,10]]},"311":{"position":[[43,10]]},"315":{"position":[[53,10]]},"317":{"position":[[49,10]]},"319":{"position":[[50,10]]},"321":{"position":[[53,10],[551,10]]},"323":{"position":[[58,10],[567,10]]},"325":{"position":[[58,10],[252,9]]},"327":{"position":[[43,10]]},"329":{"position":[[44,10]]}}}],["entityid",{"_index":187,"t":{"35":{"position":[[38,9]]},"209":{"position":[[46,9]]},"211":{"position":[[43,9]]},"213":{"position":[[42,9],[63,9]]},"215":{"position":[[47,9]]},"217":{"position":[[46,9]]},"219":{"position":[[39,9]]},"221":{"position":[[66,9]]},"227":{"position":[[34,10]]},"235":{"position":[[53,8],[121,9]]},"237":{"position":[[74,8],[177,9]]},"239":{"position":[[101,8],[165,9]]},"241":{"position":[[105,8],[173,9]]},"243":{"position":[[106,8],[175,9]]},"245":{"position":[[60,8],[125,9]]},"247":{"position":[[272,8],[355,9]]},"249":{"position":[[52,8],[120,9]]},"251":{"position":[[154,8],[640,9]]},"253":{"position":[[64,8],[144,9]]},"255":{"position":[[98,8],[167,9]]},"257":{"position":[[85,8],[156,9]]},"259":{"position":[[67,8]]},"261":{"position":[[75,8],[189,9]]},"263":{"position":[[96,8],[230,8]]},"265":{"position":[[57,8],[130,9]]},"267":{"position":[[97,8],[172,9]]},"269":{"position":[[49,8]]},"271":{"position":[[64,8],[167,9]]},"273":{"position":[[65,9]]},"275":{"position":[[56,9]]},"277":{"position":[[38,10]]},"279":{"position":[[38,10]]},"281":{"position":[[56,10]]},"283":{"position":[[39,9]]},"285":{"position":[[37,9]]},"287":{"position":[[46,9]]},"289":{"position":[[33,9]]},"291":{"position":[[42,9]]},"293":{"position":[[66,9]]},"295":{"position":[[48,9]]},"297":{"position":[[59,9]]},"299":{"position":[[54,9]]},"301":{"position":[[50,9]]},"303":{"position":[[52,9]]},"305":{"position":[[50,9]]},"307":{"position":[[54,9]]},"309":{"position":[[58,9]]},"311":{"position":[[54,9]]},"313":{"position":[[73,9]]},"315":{"position":[[64,9]]},"317":{"position":[[60,9]]},"319":{"position":[[61,9]]},"321":{"position":[[64,9]]},"323":{"position":[[69,9]]},"325":{"position":[[69,9]]},"327":{"position":[[54,9]]},"329":{"position":[[55,9]]}}}],["entri",{"_index":311,"t":{"51":{"position":[[352,5]]},"105":{"position":[[2565,6],[2587,5]]}}}],["entry_point",{"_index":291,"t":{"49":{"position":[[272,14]]},"51":{"position":[[310,11],[386,11]]},"105":{"position":[[3042,14],[3341,14]]},"114":{"position":[[454,14]]}}}],["enum",{"_index":706,"t":{"99":{"position":[[47,5],[86,5],[92,4],[263,6],[591,5]]}}}],["enumer",{"_index":708,"t":{"99":{"position":[[108,11]]}}}],["environ",{"_index":742,"t":{"103":{"position":[[24,11]]}}}],["equal",{"_index":61,"t":{"10":{"position":[[154,5]]},"12":{"position":[[111,5]]},"14":{"position":[[89,5]]},"16":{"position":[[170,5]]},"75":{"position":[[474,5],[546,5]]},"118":{"position":[[3113,5]]}}}],["eskiv",{"_index":718,"t":{"99":{"position":[[547,6]]}}}],["essenti",{"_index":567,"t":{"85":{"position":[[780,11]]},"116":{"position":[[413,11]]},"130":{"position":[[22,9]]}}}],["etc",{"_index":129,"t":{"33":{"position":[[201,6]]},"79":{"position":[[416,7]]},"95":{"position":[[497,4]]}}}],["even",{"_index":605,"t":{"87":{"position":[[1087,4]]},"118":{"position":[[4067,4]]},"319":{"position":[[422,4]]}}}],["event",{"_index":1035,"t":{"140":{"position":[[126,6]]}}}],["eventu",{"_index":213,"t":{"39":{"position":[[233,10]]}}}],["ex",{"_index":730,"t":{"101":{"position":[[263,4],[279,4]]},"105":{"position":[[3655,4]]}}}],["exactli",{"_index":467,"t":{"71":{"position":[[171,7]]},"97":{"position":[[264,7],[1441,7]]},"120":{"position":[[2023,7],[2786,7]]}}}],["exampl",{"_index":106,"t":{"31":{"position":[[157,8],[265,8]]},"49":{"position":[[31,7]]},"53":{"position":[[285,7]]},"61":{"position":[[137,8]]},"67":{"position":[[0,7],[766,7],[834,8]]},"69":{"position":[[75,8]]},"97":{"position":[[1420,8]]},"99":{"position":[[379,7]]},"101":{"position":[[662,8]]},"116":{"position":[[845,8]]},"118":{"position":[[4198,8]]},"122":{"position":[[328,8],[342,8]]},"140":{"position":[[137,8]]},"177":{"position":[[67,8]]},"179":{"position":[[121,8]]},"181":{"position":[[344,8]]},"183":{"position":[[242,8]]},"185":{"position":[[73,8]]},"187":{"position":[[110,8]]},"199":{"position":[[385,8]]},"203":{"position":[[728,8]]},"205":{"position":[[190,8]]},"207":{"position":[[178,8]]},"209":{"position":[[622,8]]},"221":{"position":[[183,8]]},"223":{"position":[[225,8]]},"225":{"position":[[100,8]]},"227":{"position":[[87,8]]},"229":{"position":[[120,8]]},"231":{"position":[[154,8]]},"233":{"position":[[437,8]]},"245":{"position":[[135,8]]},"247":{"position":[[953,8]]},"251":{"position":[[650,8]]},"257":{"position":[[166,8]]},"273":{"position":[[196,8]]},"275":{"position":[[178,8]]},"277":{"position":[[125,8]]},"287":{"position":[[269,8]]},"295":{"position":[[285,8]]},"297":{"position":[[280,8]]},"311":{"position":[[297,8]]},"315":{"position":[[347,8]]},"317":{"position":[[295,8]]},"321":{"position":[[408,8]]},"323":{"position":[[455,8]]},"325":{"position":[[564,8]]}}}],["exceed",{"_index":915,"t":{"118":{"position":[[3294,8]]}}}],["except",{"_index":527,"t":{"81":{"position":[[300,6]]}}}],["excit",{"_index":4,"t":{"3":{"position":[[45,7]]}}}],["exist",{"_index":133,"t":{"33":{"position":[[263,5]]},"97":{"position":[[1016,6]]},"143":{"position":[[26,5]]},"281":{"position":[[191,6]]},"291":{"position":[[359,5]]}}}],["exp",{"_index":256,"t":{"47":{"position":[[269,3]]}}}],["experi",{"_index":828,"t":{"112":{"position":[[17,10]]},"120":{"position":[[3001,10]]}}}],["expir",{"_index":1236,"t":{"209":{"position":[[398,8]]}}}],["explain",{"_index":806,"t":{"105":{"position":[[2579,7],[2714,7]]}}}],["explanatori",{"_index":918,"t":{"118":{"position":[[3501,12]]}}}],["explod",{"_index":1484,"t":{"329":{"position":[[138,7]]}}}],["explos",{"_index":1294,"t":{"233":{"position":[[119,9],[196,10],[237,9],[315,10],[392,10],[515,9],[597,9]]},"291":{"position":[[391,10],[441,10]]},"329":{"position":[[205,10],[338,10]]}}}],["explosion_dur",{"_index":1483,"t":{"329":{"position":[[65,19],[164,18],[241,18]]}}}],["expos",{"_index":224,"t":{"43":{"position":[[12,7]]},"45":{"position":[[12,7]]},"47":{"position":[[204,7]]},"155":{"position":[[385,7]]}}}],["exposur",{"_index":1009,"t":{"136":{"position":[[19,8]]}}}],["extens",{"_index":990,"t":{"130":{"position":[[51,9]]}}}],["extent",{"_index":1019,"t":{"136":{"position":[[282,7]]}}}],["extra",{"_index":878,"t":{"116":{"position":[[2591,5]]}}}],["extract",{"_index":727,"t":{"101":{"position":[[177,7]]}}}],["f",{"_index":175,"t":{"33":{"position":[[1211,1]]}}}],["face",{"_index":849,"t":{"116":{"position":[[92,4]]}}}],["fact",{"_index":950,"t":{"120":{"position":[[1657,4]]}}}],["factor",{"_index":1261,"t":{"219":{"position":[[49,7]]}}}],["factor*s)+offset",{"_index":1264,"t":{"219":{"position":[[464,18]]}}}],["fade",{"_index":1336,"t":{"251":{"position":[[412,4]]}}}],["fairli",{"_index":960,"t":{"120":{"position":[[2983,6]]}}}],["fall",{"_index":976,"t":{"124":{"position":[[77,4]]}}}],["fals",{"_index":322,"t":{"51":{"position":[[681,6]]},"75":{"position":[[86,5],[268,5],[403,6],[590,5],[602,5]]},"114":{"position":[[507,5]]},"251":{"position":[[602,6]]},"281":{"position":[[162,5]]}}}],["familiar",{"_index":968,"t":{"122":{"position":[[261,8]]}}}],["fanci",{"_index":709,"t":{"99":{"position":[[134,5]]}}}],["farm",{"_index":1042,"t":{"140":{"position":[[294,4]]}}}],["featur",{"_index":392,"t":{"63":{"position":[[124,9]]}}}],["feel",{"_index":749,"t":{"103":{"position":[[538,4]]},"122":{"position":[[378,7]]}}}],["ff0000ffcolor",{"_index":290,"t":{"49":{"position":[[254,17]]}}}],["field",{"_index":321,"t":{"51":{"position":[[647,5]]},"55":{"position":[[13,5]]},"57":{"position":[[12,5]]},"59":{"position":[[20,5],[78,5]]},"67":{"position":[[133,6]]}}}],["file",{"_index":196,"t":{"37":{"position":[[65,4]]},"41":{"position":[[182,5]]},"49":{"position":[[53,5]]},"53":{"position":[[298,4]]},"67":{"position":[[13,4]]},"93":{"position":[[161,5]]},"101":{"position":[[138,6],[189,5],[240,6],[268,5],[371,6],[429,5]]},"103":{"position":[[282,4]]},"105":{"position":[[2816,4],[3508,5],[3769,5],[3841,5],[3868,4]]},"110":{"position":[[168,4]]},"114":{"position":[[230,6],[283,4]]},"116":{"position":[[163,6],[219,5],[655,5]]},"118":{"position":[[227,5]]},"120":{"position":[[15,4],[405,5],[1529,5],[2686,5]]},"124":{"position":[[56,6],[71,5],[103,5],[133,5],[161,5]]},"147":{"position":[[271,5]]},"295":{"position":[[177,4]]}}}],["file_path",{"_index":840,"t":{"112":{"position":[[579,10]]},"295":{"position":[[58,10],[182,9],[234,9]]},"297":{"position":[[69,10]]}}}],["filenam",{"_index":890,"t":{"116":{"position":[[3512,8]]}}}],["fill",{"_index":565,"t":{"85":{"position":[[728,4]]}}}],["final",{"_index":720,"t":{"101":{"position":[[10,7]]},"105":{"position":[[2404,5]]},"116":{"position":[[152,5]]}}}],["find",{"_index":227,"t":{"43":{"position":[[60,4]]},"105":{"position":[[4382,4]]}}}],["fine",{"_index":518,"t":{"79":{"position":[[471,7],[538,5]]},"105":{"position":[[1395,5],[1996,5]]}}}],["first",{"_index":1,"t":{"3":{"position":[[15,5]]},"51":{"position":[[153,5]]},"57":{"position":[[330,5]]},"77":{"position":[[451,5]]},"95":{"position":[[23,5]]},"105":{"position":[[2352,5],[2798,6]]},"118":{"position":[[3126,5]]},"120":{"position":[[361,5],[2171,5]]},"122":{"position":[[194,5],[310,5]]}}}],["five_corn",{"_index":1123,"t":{"162":{"position":[[27,12]]}}}],["fix",{"_index":120,"t":{"33":{"position":[[7,5]]},"97":{"position":[[370,5],[475,5],[549,5],[665,5],[705,5],[819,5],[1352,5]]},"105":{"position":[[717,5],[1229,5],[1292,5]]}}}],["fixedpoint",{"_index":38,"t":{"5":{"position":[[62,10]]},"8":{"position":[[24,10],[63,10]]},"10":{"position":[[30,11],[47,10],[61,10],[89,10]]},"14":{"position":[[14,12],[27,10]]},"16":{"position":[[57,10],[80,10]]},"18":{"position":[[20,12]]},"20":{"position":[[28,12],[41,10]]},"22":{"position":[[33,10],[54,10]]},"24":{"position":[[20,12],[33,11],[45,10]]},"26":{"position":[[16,11],[31,10],[45,10]]},"28":{"position":[[13,10]]},"33":{"position":[[366,10],[564,10],[591,10],[688,10],[711,10]]},"97":{"position":[[275,11],[287,10]]},"105":{"position":[[322,10],[1145,10],[1903,10]]},"181":{"position":[[30,11],[50,10]]},"183":{"position":[[26,11],[47,11],[66,11],[85,10]]},"199":{"position":[[45,11],[57,11],[69,11],[81,10]]},"203":{"position":[[115,11],[146,11],[175,11],[211,11]]},"219":{"position":[[57,11],[77,11],[106,10]]},"223":{"position":[[51,11],[73,11],[93,10]]},"231":{"position":[[54,11],[69,10]]},"233":{"position":[[28,11],[43,11],[74,11]]},"235":{"position":[[24,11],[39,10]]},"237":{"position":[[34,11],[49,11]]},"239":{"position":[[19,11],[34,11],[53,11],[72,11]]},"241":{"position":[[23,11],[38,11],[57,11],[76,11]]},"243":{"position":[[24,11],[39,11],[58,11],[77,11]]},"245":{"position":[[20,11],[35,11]]},"247":{"position":[[21,11],[36,11],[183,11],[209,11]]},"249":{"position":[[23,11],[38,10]]},"251":{"position":[[32,11],[47,11],[95,11]]},"253":{"position":[[35,11],[50,10]]},"255":{"position":[[24,11],[39,11],[65,11],[84,10]]},"257":{"position":[[26,11],[41,11],[71,10]]},"259":{"position":[[26,11],[41,11]]},"261":{"position":[[27,11],[42,11]]},"263":{"position":[[29,11],[44,11],[63,11]]},"265":{"position":[[28,11],[43,10]]},"267":{"position":[[30,11],[45,11],[64,11],[83,10]]},"269":{"position":[[20,11],[35,10]]},"271":{"position":[[19,11],[34,11],[50,10]]},"277":{"position":[[49,11],[61,10]]},"283":{"position":[[52,11],[67,10]]},"285":{"position":[[55,10]]},"291":{"position":[[82,11],[97,11]]},"303":{"position":[[65,11],[80,11],[95,10]]},"305":{"position":[[63,10]]},"307":{"position":[[71,10]]},"309":{"position":[[77,11],[98,11],[119,10]]},"311":{"position":[[71,11],[91,11],[111,11],[131,10]]},"315":{"position":[[139,11],[164,11],[191,11],[216,11],[243,11],[268,10]]},"317":{"position":[[77,11],[97,11],[117,11],[137,10]]},"319":{"position":[[79,10]]}}}],["flangeroffset",{"_index":430,"t":{"67":{"position":[[504,13]]}}}],["flangeroffsetsweep",{"_index":431,"t":{"67":{"position":[[518,18]]}}}],["flip",{"_index":951,"t":{"120":{"position":[[1762,8],[2047,8],[2339,8]]}}}],["float",{"_index":204,"t":{"39":{"position":[[7,8],[80,6],[199,6]]},"47":{"position":[[168,8]]},"55":{"position":[[114,8]]},"251":{"position":[[177,8],[621,8]]}}}],["floating_messag",{"_index":1118,"t":{"160":{"position":[[219,16]]}}}],["floor",{"_index":258,"t":{"47":{"position":[[283,5]]}}}],["fmath",{"_index":32,"t":{"5":{"position":[[0,5],[95,5]]},"41":{"position":[[232,5]]},"97":{"position":[[36,5],[153,6]]},"124":{"position":[[240,5]]}}}],["fmath.abs_fixedpoint(valu",{"_index":79,"t":{"20":{"position":[[0,27]]}}}],["fmath.atan2",{"_index":87,"t":{"26":{"position":[[0,12]]}}}],["fmath.from_fract",{"_index":69,"t":{"16":{"position":[[0,20]]}}}],["fmath.max_fixedpoint",{"_index":49,"t":{"8":{"position":[[0,23]]}}}],["fmath.random_fixedpoint",{"_index":54,"t":{"10":{"position":[[0,24]]}}}],["fmath.random_int",{"_index":62,"t":{"12":{"position":[[0,17]]}}}],["fmath.sincos(angl",{"_index":82,"t":{"24":{"position":[[0,19]]}}}],["fmath.sqrt(fixedpoint",{"_index":679,"t":{"97":{"position":[[228,21]]}}}],["fmath.sqrt(x",{"_index":64,"t":{"14":{"position":[[0,13]]}}}],["fmath.tau",{"_index":94,"t":{"28":{"position":[[0,12]]},"257":{"position":[[246,11]]},"311":{"position":[[411,11]]},"317":{"position":[[415,11]]}}}],["fmath.to_fixedpoint(valu",{"_index":81,"t":{"22":{"position":[[0,26]]}}}],["fmath.to_int(valu",{"_index":76,"t":{"18":{"position":[[0,19]]}}}],["fmod",{"_index":259,"t":{"47":{"position":[[289,4]]}}}],["focu",{"_index":675,"t":{"95":{"position":[[630,5]]}}}],["folder",{"_index":729,"t":{"101":{"position":[[249,6],[384,7],[452,7],[471,6],[532,6],[796,7],[825,6],[875,6]]},"103":{"position":[[328,6],[480,6],[690,6]]},"105":{"position":[[2835,6]]},"114":{"position":[[147,6],[197,7]]}}}],["follow",{"_index":139,"t":{"33":{"position":[[412,8],[935,8]]},"43":{"position":[[24,9]]},"45":{"position":[[24,9]]},"47":{"position":[[216,9]]},"67":{"position":[[123,9]]},"77":{"position":[[40,9],[339,9]]},"79":{"position":[[110,9],[491,9]]},"81":{"position":[[206,9]]},"93":{"position":[[231,6]]},"116":{"position":[[112,9],[250,10],[3685,10]]},"118":{"position":[[256,10]]},"128":{"position":[[40,6]]}}}],["forbidden",{"_index":214,"t":{"39":{"position":[[247,10]]}}}],["forev",{"_index":531,"t":{"81":{"position":[[463,8]]},"239":{"position":[[440,8]]},"241":{"position":[[501,8]]},"243":{"position":[[512,8]]},"289":{"position":[[99,8]]}}}],["forget",{"_index":508,"t":{"77":{"position":[[677,6]]},"85":{"position":[[718,6]]},"323":{"position":[[362,6]]}}}],["fork",{"_index":1066,"t":{"151":{"position":[[19,4]]}}}],["format",{"_index":184,"t":{"33":{"position":[[1339,7]]},"43":{"position":[[65,6]]}}}],["found",{"_index":652,"t":{"93":{"position":[[430,5]]}}}],["four_corn",{"_index":1122,"t":{"162":{"position":[[14,12]]}}}],["four_direct",{"_index":1128,"t":{"164":{"position":[[29,15]]}}}],["fp",{"_index":838,"t":{"112":{"position":[[482,3],[734,3]]},"114":{"position":[[419,5]]},"118":{"position":[[3869,3],[4180,3],[4190,3],[4472,4]]},"120":{"position":[[1139,3],[1743,4],[2660,4]]},"297":{"position":[[248,3]]}}}],["fraction",{"_index":73,"t":{"16":{"position":[[114,8]]},"22":{"position":[[111,10]]},"33":{"position":[[862,10],[902,10]]},"97":{"position":[[1249,10]]}}}],["frame",{"_index":835,"t":{"112":{"position":[[376,6]]},"118":{"position":[[352,7],[413,6],[1975,7],[2200,5],[2228,5],[2737,6],[3064,6],[3087,7],[3104,5],[3176,5],[3317,6],[3805,6]]},"120":{"position":[[275,6],[367,6],[529,6],[603,7],[1015,6],[1060,6],[1221,6],[1497,6],[2919,6]]}}}],["framework",{"_index":999,"t":{"130":{"position":[[256,9]]}}}],["free",{"_index":750,"t":{"103":{"position":[[543,4]]}}}],["freez",{"_index":1140,"t":{"168":{"position":[[0,6]]}}}],["freeze_explos",{"_index":1147,"t":{"172":{"position":[[7,16]]}}}],["freq_1",{"_index":1139,"t":{"166":{"position":[[61,6]]}}}],["freq_10",{"_index":1133,"t":{"166":{"position":[[16,7]]}}}],["freq_15",{"_index":1132,"t":{"166":{"position":[[8,7]]}}}],["freq_2",{"_index":1138,"t":{"166":{"position":[[54,6]]}}}],["freq_3",{"_index":1137,"t":{"166":{"position":[[47,6]]}}}],["freq_30",{"_index":1131,"t":{"166":{"position":[[0,7]]}}}],["freq_5",{"_index":1136,"t":{"166":{"position":[[40,6]]}}}],["freq_6",{"_index":1135,"t":{"166":{"position":[[33,6]]}}}],["freq_7_5",{"_index":1134,"t":{"166":{"position":[[24,8]]}}}],["frequenc",{"_index":410,"t":{"67":{"position":[[60,9],[314,9]]},"209":{"position":[[79,10],[205,9],[230,9],[543,9],[653,10]]},"247":{"position":[[107,10],[497,10],[1053,9]]}}}],["frequencydeltasweep",{"_index":422,"t":{"67":{"position":[[335,19]]}}}],["frequencyjump1amount",{"_index":425,"t":{"67":{"position":[[395,20]]}}}],["frequencyjump1onset",{"_index":423,"t":{"67":{"position":[[355,19]]}}}],["frequencyjump2amount",{"_index":426,"t":{"67":{"position":[[416,20]]}}}],["frequencyjump2onset",{"_index":424,"t":{"67":{"position":[[375,19]]}}}],["frequencysweep",{"_index":427,"t":{"67":{"position":[[437,14]]}}}],["freshen",{"_index":638,"t":{"91":{"position":[[154,7]]}}}],["front",{"_index":779,"t":{"105":{"position":[[650,6]]}}}],["full",{"_index":699,"t":{"97":{"position":[[1225,4]]},"118":{"position":[[391,4]]}}}],["fulli",{"_index":374,"t":{"59":{"position":[[259,5]]}}}],["fun",{"_index":740,"t":{"101":{"position":[[1023,3]]}}}],["function",{"_index":36,"t":{"5":{"position":[[37,9]]},"43":{"position":[[34,10]]},"45":{"position":[[34,10]]},"47":{"position":[[122,9],[226,10]]},"85":{"position":[[6,8],[98,8],[199,8],[372,9],[568,9],[591,9],[683,8],[799,8]]},"93":{"position":[[371,9]]},"95":{"position":[[146,9],[280,8],[533,8],[565,8],[620,9],[664,9]]},"97":{"position":[[66,9],[129,10]]},"105":{"position":[[230,8],[616,9],[1080,8]]},"112":{"position":[[442,8],[508,8]]},"118":{"position":[[3039,10]]},"157":{"position":[[36,9]]},"181":{"position":[[247,8]]},"187":{"position":[[44,9]]},"219":{"position":[[188,8]]},"247":{"position":[[258,8]]},"287":{"position":[[66,8],[284,8]]},"321":{"position":[[120,8],[417,8]]},"323":{"position":[[99,8],[464,8]]},"325":{"position":[[106,8]]}}}],["function(entity_id",{"_index":1477,"t":{"325":{"position":[[690,19]]}}}],["further",{"_index":1410,"t":{"305":{"position":[[232,7]]}}}],["futur",{"_index":757,"t":{"103":{"position":[[898,7]]},"219":{"position":[[333,7]]}}}],["fx",{"_index":140,"t":{"33":{"position":[[428,2]]},"97":{"position":[[756,2]]}}}],["game",{"_index":45,"t":{"5":{"position":[[132,4],[188,4]]},"31":{"position":[[104,4],[129,4]]},"33":{"position":[[67,4]]},"35":{"position":[[119,5]]},"39":{"position":[[209,4]]},"105":{"position":[[3407,4]]},"112":{"position":[[685,4]]},"118":{"position":[[4122,4],[4212,4]]},"120":{"position":[[2136,4],[2177,4],[2551,4],[2576,4]]},"145":{"position":[[2,4]]},"187":{"position":[[99,4]]},"189":{"position":[[73,5]]},"197":{"position":[[36,5]]},"209":{"position":[[326,4]]},"217":{"position":[[145,4]]},"231":{"position":[[132,4]]},"239":{"position":[[311,4]]},"241":{"position":[[372,4]]},"243":{"position":[[383,4]]},"251":{"position":[[458,4]]},"319":{"position":[[163,4]]},"327":{"position":[[178,4]]},"329":{"position":[[183,4]]}}}],["game'",{"_index":974,"t":{"122":{"position":[[544,6]]}}}],["gameplay",{"_index":391,"t":{"63":{"position":[[115,8]]},"133":{"position":[[0,8]]}}}],["gener",{"_index":367,"t":{"57":{"position":[[370,10],[447,10]]},"61":{"position":[[93,9]]},"99":{"position":[[640,7]]},"116":{"position":[[319,10],[595,9],[963,10],[3079,9]]},"118":{"position":[[1873,10],[3609,9]]},"120":{"position":[[115,9],[221,9]]},"133":{"position":[[38,9]]},"293":{"position":[[168,8]]}}}],["get",{"_index":647,"t":{"93":{"position":[[211,7]]},"120":{"position":[[470,7]]},"138":{"position":[[38,7]]},"287":{"position":[[237,4]]},"321":{"position":[[312,4]]},"323":{"position":[[222,4]]},"325":{"position":[[231,4]]}}}],["get_number_of_play",{"_index":1187,"t":{"191":{"position":[[187,23]]},"193":{"position":[[501,23]]},"201":{"position":[[149,23]]},"203":{"position":[[367,23]]},"205":{"position":[[160,23]]}}}],["github",{"_index":724,"t":{"101":{"position":[[107,6]]}}}],["give",{"_index":324,"t":{"51":{"position":[[741,4]]},"85":{"position":[[586,4]]},"95":{"position":[[205,6]]},"105":{"position":[[4467,4]]},"285":{"position":[[119,4]]}}}],["given",{"_index":1044,"t":{"143":{"position":[[39,5]]},"185":{"position":[[58,5]]},"193":{"position":[[333,6]]},"195":{"position":[[135,7],[192,6]]},"223":{"position":[[213,5]]},"227":{"position":[[73,5]]},"237":{"position":[[147,5]]},"247":{"position":[[446,5]]}}}],["gmatch",{"_index":228,"t":{"43":{"position":[[72,6]]}}}],["go",{"_index":559,"t":{"85":{"position":[[478,5]]},"89":{"position":[[396,2]]},"93":{"position":[[539,2]]},"97":{"position":[[972,2]]},"99":{"position":[[562,2]]},"101":{"position":[[808,5],[915,3]]},"103":{"position":[[12,2]]},"105":{"position":[[23,2],[3124,5],[3847,2],[4005,2],[4435,3],[4444,2]]},"116":{"position":[[294,5],[577,5],[1090,2],[1838,2],[3249,2]]},"118":{"position":[[723,2],[2237,5]]},"181":{"position":[[144,2]]},"315":{"position":[[316,5]]}}}],["goe",{"_index":954,"t":{"120":{"position":[[2089,4]]}}}],["gold",{"_index":299,"t":{"49":{"position":[[387,7]]},"51":{"position":[[609,4]]}}}],["gone",{"_index":936,"t":{"120":{"position":[[544,4],[2522,4]]}}}],["good",{"_index":20,"t":{"3":{"position":[[192,4]]},"47":{"position":[[468,4]]},"79":{"position":[[819,4]]},"85":{"position":[[386,4]]},"87":{"position":[[1041,4]]},"97":{"position":[[1112,4]]},"103":{"position":[[916,4]]},"105":{"position":[[820,4],[2028,4],[3635,5]]},"118":{"position":[[3887,4]]},"122":{"position":[[189,4],[290,4]]}}}],["graphic",{"_index":829,"t":{"112":{"position":[[123,8]]},"118":{"position":[[4148,8],[4234,8]]},"124":{"position":[[123,9]]},"133":{"position":[[48,8],[79,9]]}}}],["graphics.lua",{"_index":846,"t":{"114":{"position":[[247,12]]},"116":{"position":[[192,12]]}}}],["greater",{"_index":60,"t":{"10":{"position":[[143,7]]},"12":{"position":[[100,7]]},"14":{"position":[[78,7]]},"75":{"position":[[57,7]]},"305":{"position":[[153,7]]},"307":{"position":[[221,7]]},"309":{"position":[[290,7]]}}}],["green",{"_index":671,"t":{"95":{"position":[[460,5]]},"103":{"position":[[648,5]]}}}],["gsub",{"_index":229,"t":{"43":{"position":[[79,4]]}}}],["guarante",{"_index":188,"t":{"35":{"position":[[52,10]]},"39":{"position":[[69,10]]}}}],["guid",{"_index":967,"t":{"122":{"position":[[235,6]]},"128":{"position":[[64,6]]}}}],["half",{"_index":955,"t":{"120":{"position":[[2225,4],[2284,4],[2445,4],[2489,4]]}}}],["halfway",{"_index":935,"t":{"120":{"position":[[484,7]]}}}],["hand",{"_index":852,"t":{"116":{"position":[[365,5]]}}}],["handi",{"_index":783,"t":{"105":{"position":[[1074,5]]}}}],["hang",{"_index":682,"t":{"97":{"position":[[441,4]]}}}],["happen",{"_index":1460,"t":{"321":{"position":[[525,8]]}}}],["hard",{"_index":206,"t":{"39":{"position":[[61,4]]}}}],["has_lost",{"_index":1209,"t":{"203":{"position":[[67,9]]},"207":{"position":[[73,9]]}}}],["has_score_leaderboard",{"_index":293,"t":{"49":{"position":[[300,24]]},"51":{"position":[[417,21],[656,21]]},"114":{"position":[[482,24]]}}}],["have",{"_index":22,"t":{"3":{"position":[[223,6]]},"211":{"position":[[183,6]]}}}],["head",{"_index":747,"t":{"103":{"position":[[428,4]]},"105":{"position":[[3708,4]]}}}],["health",{"_index":585,"t":{"87":{"position":[[301,6],[382,6],[431,6],[819,6],[847,6]]},"241":{"position":[[202,6]]}}}],["height",{"_index":771,"t":{"105":{"position":[[333,8]]},"181":{"position":[[42,7],[192,6],[379,6],[423,7]]},"305":{"position":[[85,6]]}}}],["hello",{"_index":458,"t":{"71":{"position":[[30,5]]},"77":{"position":[[78,6]]},"81":{"position":[[249,6]]},"205":{"position":[[247,6]]},"251":{"position":[[699,8]]}}}],["help",{"_index":182,"t":{"33":{"position":[[1316,4]]},"93":{"position":[[523,4]]},"103":{"position":[[183,4],[373,7],[522,4],[565,5],[640,7]]},"112":{"position":[[715,4]]}}}],["hemispher",{"_index":1130,"t":{"164":{"position":[[58,10]]}}}],["here",{"_index":11,"t":{"3":{"position":[[113,5]]},"69":{"position":[[148,4]]},"91":{"position":[[11,5],[205,5]]},"93":{"position":[[135,4],[315,4]]},"99":{"position":[[196,4]]},"101":{"position":[[612,5],[654,4]]},"103":{"position":[[0,4]]},"105":{"position":[[277,5],[407,4]]},"114":{"position":[[373,4]]}}}],["here'",{"_index":180,"t":{"33":{"position":[[1275,6]]},"105":{"position":[[2616,6]]}}}],["hertz",{"_index":421,"t":{"67":{"position":[[307,6],[328,6],[473,6],[497,6]]}}}],["hexagon",{"_index":856,"t":{"116":{"position":[[874,8],[978,7],[1174,9],[1458,7],[1509,7],[1572,7],[1716,7],[1757,7],[1890,7],[2052,7],[2154,7],[2272,8],[2365,7],[2477,7]]},"118":{"position":[[77,7],[118,7],[372,8],[601,7],[642,7],[775,7],[937,7],[1039,7],[1157,8],[1250,7],[1362,7],[2057,8],[2090,7],[2558,8],[2655,7]]}}}],["hidden",{"_index":1337,"t":{"251":{"position":[[485,6]]}}}],["hide",{"_index":1012,"t":{"136":{"position":[[85,4]]}}}],["higher",{"_index":927,"t":{"118":{"position":[[4304,6]]}}}],["highest",{"_index":1194,"t":{"195":{"position":[[158,7]]}}}],["highli",{"_index":801,"t":{"105":{"position":[[2287,6]]}}}],["hit",{"_index":1061,"t":{"147":{"position":[[288,7]]},"239":{"position":[[372,4]]},"241":{"position":[[433,4]]},"243":{"position":[[444,4]]}}}],["hold",{"_index":194,"t":{"37":{"position":[[51,4]]},"57":{"position":[[146,5]]},"105":{"position":[[982,4]]},"116":{"position":[[586,4]]},"122":{"position":[[31,5]]}}}],["home",{"_index":28,"t":{"3":{"position":[[274,4]]},"87":{"position":[[717,4],[984,4]]}}}],["hope",{"_index":25,"t":{"3":{"position":[[249,4]]},"120":{"position":[[2940,4]]}}}],["horizont",{"_index":1363,"t":{"271":{"position":[[118,12]]}}}],["hour",{"_index":1047,"t":{"145":{"position":[[23,5]]}}}],["http",{"_index":1096,"t":{"155":{"position":[[396,4]]}}}],["http://localhost:9000/pewpew.html",{"_index":819,"t":{"105":{"position":[[4095,33]]},"116":{"position":[[3632,33]]}}}],["https://github.com/jyaif/ppl",{"_index":643,"t":{"93":{"position":[[79,28]]}}}],["https://pewpew.l",{"_index":981,"t":{"126":{"position":[[58,19]]}}}],["https://pewpewlive.github.io/ppl",{"_index":649,"t":{"93":{"position":[[254,32]]}}}],["https://repl.it/languages/lua",{"_index":446,"t":{"69":{"position":[[0,29]]}}}],["hud.player_index",{"_index":1228,"t":{"205":{"position":[[121,16]]}}}],["huge",{"_index":269,"t":{"47":{"position":[[373,4]]}}}],["i'll",{"_index":767,"t":{"105":{"position":[[263,4]]}}}],["i'm",{"_index":736,"t":{"101":{"position":[[804,3]]}}}],["id",{"_index":886,"t":{"116":{"position":[[3384,2]]},"183":{"position":[[190,3]]},"247":{"position":[[856,2],[884,3],[910,3]]},"273":{"position":[[148,2]]},"275":{"position":[[130,2]]},"277":{"position":[[121,3]]},"279":{"position":[[95,2]]},"281":{"position":[[113,2]]},"283":{"position":[[126,2]]},"285":{"position":[[112,3]]},"287":{"position":[[163,2],[265,3]]},"289":{"position":[[74,2]]},"291":{"position":[[168,2]]},"295":{"position":[[145,2],[300,2]]},"297":{"position":[[295,2]]},"299":{"position":[[157,3]]},"301":{"position":[[168,3]]},"303":{"position":[[211,2]]},"305":{"position":[[145,3]]},"307":{"position":[[152,3]]},"309":{"position":[[200,2]]},"311":{"position":[[221,3]]},"317":{"position":[[219,3]]},"321":{"position":[[340,2],[572,2]]},"323":{"position":[[175,2],[250,2],[708,2]]},"325":{"position":[[182,2],[579,2]]},"327":{"position":[[133,2]]},"329":{"position":[[135,2]]}}}],["identifi",{"_index":185,"t":{"35":{"position":[[16,10]]},"209":{"position":[[160,10]]},"213":{"position":[[117,10],[169,10],[212,10]]},"215":{"position":[[91,10],[128,10]]},"261":{"position":[[145,10]]},"273":{"position":[[132,10]]},"275":{"position":[[114,10]]},"277":{"position":[[107,10]]},"279":{"position":[[81,10]]},"281":{"position":[[99,10]]},"283":{"position":[[112,10]]},"285":{"position":[[98,10]]},"287":{"position":[[149,10]]},"289":{"position":[[60,10]]},"291":{"position":[[154,10],[535,10]]},"295":{"position":[[131,10]]},"299":{"position":[[143,10]]},"301":{"position":[[154,10]]},"303":{"position":[[197,10]]},"305":{"position":[[131,10]]},"307":{"position":[[138,10]]},"309":{"position":[[186,10]]},"311":{"position":[[207,10]]},"317":{"position":[[205,10]]},"323":{"position":[[161,10]]},"325":{"position":[[168,10]]},"327":{"position":[[119,10]]},"329":{"position":[[121,10]]}}}],["immedi",{"_index":1383,"t":{"289":{"position":[[77,11]]}}}],["implement",{"_index":158,"t":{"33":{"position":[[734,11]]},"47":{"position":[[540,11]]}}}],["implicet",{"_index":1159,"t":{"181":{"position":[[86,11]]}}}],["import",{"_index":359,"t":{"57":{"position":[[230,10]]},"93":{"position":[[361,9]]},"101":{"position":[[292,9]]}}}],["importantli",{"_index":901,"t":{"118":{"position":[[1993,12]]}}}],["incentiv",{"_index":1013,"t":{"136":{"position":[[104,11],[180,11]]}}}],["includ",{"_index":99,"t":{"31":{"position":[[39,9]]},"33":{"position":[[159,8]]},"49":{"position":[[246,7]]},"51":{"position":[[634,7]]},"63":{"position":[[66,9]]},"143":{"position":[[58,8]]},"221":{"position":[[125,8]]},"223":{"position":[[169,8]]}}}],["increas",{"_index":907,"t":{"118":{"position":[[2840,8]]},"120":{"position":[[989,10],[1033,10]]},"138":{"position":[[69,9]]},"153":{"position":[[158,10]]},"191":{"position":[[65,9]]},"193":{"position":[[72,9],[385,9]]}}}],["increment",{"_index":505,"t":{"77":{"position":[[519,11],[640,9]]},"116":{"position":[[1119,9],[1601,9]]},"118":{"position":[[3517,9]]}}}],["indefinit",{"_index":524,"t":{"81":{"position":[[235,13]]}}}],["indent",{"_index":987,"t":{"128":{"position":[[89,11]]}}}],["index",{"_index":357,"t":{"57":{"position":[[171,7]]},"77":{"position":[[501,6]]},"79":{"position":[[779,6]]},"89":{"position":[[169,6],[216,11],[474,5]]},"105":{"position":[[1277,5],[1337,5],[1675,7],[1739,5],[1767,5]]},"116":{"position":[[624,8],[1389,8],[2790,5],[2896,5]]},"118":{"position":[[1508,5],[1614,5],[2823,5],[3158,5],[3232,7],[3531,5],[3561,5]]},"120":{"position":[[2213,5],[2263,5],[2433,5],[2477,5]]},"199":{"position":[[142,6]]},"229":{"position":[[47,6],[107,5],[113,6]]},"231":{"position":[[39,6]]},"263":{"position":[[198,5]]},"295":{"position":[[77,6],[199,5],[205,6],[212,5]]}}}],["index1",{"_index":841,"t":{"112":{"position":[[590,7]]}}}],["index2",{"_index":842,"t":{"112":{"position":[[598,7]]}}}],["index_0",{"_index":1396,"t":{"297":{"position":[[88,8]]}}}],["index_1",{"_index":1397,"t":{"297":{"position":[[102,8]]}}}],["indic",{"_index":1304,"t":{"239":{"position":[[287,9]]},"241":{"position":[[348,9]]},"243":{"position":[[359,9]]}}}],["inertiac",{"_index":1102,"t":{"160":{"position":[[13,8]]},"255":{"position":[[121,8],[181,8]]}}}],["info",{"_index":221,"t":{"41":{"position":[[171,4]]},"179":{"position":[[39,5]]}}}],["inform",{"_index":286,"t":{"49":{"position":[[165,14],[180,12]]},"51":{"position":[[189,11],[275,11]]},"87":{"position":[[1066,12]]},"122":{"position":[[461,11]]},"149":{"position":[[45,11]]}}}],["infront",{"_index":665,"t":{"95":{"position":[[337,7]]},"97":{"position":[[160,7]]},"99":{"position":[[335,7]]}}}],["initi",{"_index":164,"t":{"33":{"position":[[887,10]]},"103":{"position":[[701,9]]},"118":{"position":[[2299,7]]},"120":{"position":[[2761,7]]}}}],["inner",{"_index":512,"t":{"79":{"position":[[84,5],[184,5],[208,5],[232,5],[698,5]]},"116":{"position":[[1452,5],[1503,5],[1751,5],[2148,5],[2256,5],[2471,5]]},"118":{"position":[[112,5],[636,5],[1033,5],[1141,5],[1356,5],[2124,5],[2552,5],[2649,5]]}}}],["input",{"_index":1197,"t":{"199":{"position":[[104,6]]}}}],["insert",{"_index":243,"t":{"45":{"position":[[52,6]]}}}],["insid",{"_index":468,"t":{"71":{"position":[[207,6]]},"79":{"position":[[577,6],[650,6]]},"87":{"position":[[1103,6]]},"89":{"position":[[572,6]]},"105":{"position":[[3208,6],[3287,6]]}}}],["instanc",{"_index":384,"t":{"61":{"position":[[123,8]]}}}],["instead",{"_index":223,"t":{"41":{"position":[[238,8]]},"79":{"position":[[880,7]]},"97":{"position":[[1265,7]]},"116":{"position":[[371,8]]},"118":{"position":[[1951,8]]},"133":{"position":[[112,7]]}}}],["int",{"_index":63,"t":{"12":{"position":[[23,4],[33,3],[40,3]]},"16":{"position":[[32,4],[50,3]]},"18":{"position":[[33,3]]},"22":{"position":[[27,5]]},"95":{"position":[[492,4],[688,3]]},"105":{"position":[[1159,3],[1917,3]]},"183":{"position":[[99,3]]},"185":{"position":[[28,4]]},"189":{"position":[[32,3]]},"191":{"position":[[47,4],[59,3]]},"193":{"position":[[54,4],[66,3]]},"195":{"position":[[44,5],[50,3]]},"199":{"position":[[39,5]]},"201":{"position":[[41,5],[47,3]]},"203":{"position":[[39,4],[91,4],[244,4],[271,3]]},"205":{"position":[[43,4]]},"207":{"position":[[46,5],[68,4]]},"209":{"position":[[90,4],[103,4],[118,3]]},"211":{"position":[[61,3]]},"213":{"position":[[80,3],[87,3]]},"215":{"position":[[67,3]]},"217":{"position":[[79,3]]},"219":{"position":[[99,3]]},"225":{"position":[[30,5],[36,3]]},"227":{"position":[[45,3]]},"229":{"position":[[54,3]]},"231":{"position":[[46,4]]},"233":{"position":[[62,4],[102,3]]},"237":{"position":[[67,3]]},"239":{"position":[[94,3]]},"241":{"position":[[98,3]]},"243":{"position":[[99,3]]},"245":{"position":[[53,3]]},"247":{"position":[[54,4],[89,4],[102,4],[118,4],[140,4],[164,4],[237,4]]},"251":{"position":[[126,4]]},"257":{"position":[[59,4]]},"259":{"position":[[60,3]]},"261":{"position":[[68,3]]},"263":{"position":[[89,3]]},"291":{"position":[[74,4],[123,3]]},"295":{"position":[[84,3]]},"297":{"position":[[97,4],[111,3]]},"299":{"position":[[71,3]]},"315":{"position":[[103,4],[119,4]]},"327":{"position":[[83,3]]},"329":{"position":[[85,3]]}}}],["integ",{"_index":40,"t":{"5":{"position":[[85,9]]},"8":{"position":[[74,7]]},"12":{"position":[[55,7]]},"31":{"position":[[7,9]]},"33":{"position":[[125,7],[782,9],[950,7]]},"35":{"position":[[3,7]]}}}],["integr",{"_index":77,"t":{"18":{"position":[[49,8]]},"22":{"position":[[80,8]]},"33":{"position":[[823,8]]}}}],["interact",{"_index":16,"t":{"3":{"position":[[156,11]]},"33":{"position":[[1285,11]]}}}],["intermedi",{"_index":403,"t":{"65":{"position":[[166,12]]}}}],["intern",{"_index":157,"t":{"33":{"position":[[699,11]]}}}],["interpol",{"_index":830,"t":{"112":{"position":[[136,13],[163,13]]},"118":{"position":[[4021,12],[4132,11],[4217,12]]},"203":{"position":[[671,12]]},"293":{"position":[[136,12]]},"313":{"position":[[93,13]]}}}],["interpret",{"_index":135,"t":{"33":{"position":[[282,13]]},"147":{"position":[[8,11],[160,11],[316,11]]}}}],["invalid",{"_index":1389,"t":{"291":{"position":[[606,8]]}}}],["involv",{"_index":1465,"t":{"323":{"position":[[329,8]]}}}],["is_opt",{"_index":1333,"t":{"251":{"position":[[131,12],[422,11],[587,11],[746,11]]}}}],["isawesom",{"_index":589,"t":{"87":{"position":[[327,9]]}}}],["isn't",{"_index":698,"t":{"97":{"position":[[1217,5]]}}}],["issu",{"_index":921,"t":{"118":{"position":[[3835,6]]}}}],["it'",{"_index":690,"t":{"97":{"position":[[937,4],[1062,4]]},"105":{"position":[[165,4],[835,4],[966,4],[2900,4]]},"138":{"position":[[238,4]]}}}],["item",{"_index":651,"t":{"93":{"position":[[385,5]]},"99":{"position":[[171,5]]}}}],["iter",{"_index":825,"t":{"110":{"position":[[47,9]]},"116":{"position":[[2818,9],[2924,9]]},"118":{"position":[[1536,9],[1642,9]]}}}],["j",{"_index":511,"t":{"79":{"position":[[53,1],[330,1],[364,5],[878,1]]}}}],["jack",{"_index":620,"t":{"89":{"position":[[128,8],[266,4]]}}}],["jf",{"_index":734,"t":{"101":{"position":[[633,3]]}}}],["jfxr",{"_index":441,"t":{"67":{"position":[[687,4],[751,4]]}}}],["joe",{"_index":576,"t":{"87":{"position":[[124,5],[269,3]]}}}],["john",{"_index":590,"t":{"87":{"position":[[352,6],[938,4],[965,4]]}}}],["join",{"_index":353,"t":{"57":{"position":[[53,6],[434,4]]},"116":{"position":[[2214,7],[2333,7],[2445,7],[3015,7]]},"118":{"position":[[1099,7],[1218,7],[1330,7],[1733,7]]}}}],["joystick'",{"_index":1199,"t":{"199":{"position":[[194,10],[245,10],[294,10],[346,10]]}}}],["json",{"_index":281,"t":{"49":{"position":[[25,5]]}}}],["keep",{"_index":301,"t":{"51":{"position":[[31,4]]},"91":{"position":[[79,4]]},"101":{"position":[[55,4],[325,4]]},"103":{"position":[[933,4]]},"105":{"position":[[1686,4]]},"138":{"position":[[256,4]]}}}],["kept",{"_index":1036,"t":{"140":{"position":[[180,4]]}}}],["kill",{"_index":1039,"t":{"140":{"position":[[218,7]]}}}],["kind",{"_index":627,"t":{"89":{"position":[[363,4]]},"95":{"position":[[516,4]]},"97":{"position":[[319,4]]},"105":{"position":[[3094,4]]}}}],["king",{"_index":1000,"t":{"133":{"position":[[12,5]]}}}],["know",{"_index":398,"t":{"65":{"position":[[36,4]]},"91":{"position":[[123,4]]},"97":{"position":[[1078,5]]},"103":{"position":[[74,5]]},"105":{"position":[[3488,4]]},"112":{"position":[[60,4]]},"118":{"position":[[3988,5]]},"319":{"position":[[171,4]]}}}],["lan",{"_index":1087,"t":{"155":{"position":[[246,3]]}}}],["languag",{"_index":634,"t":{"91":{"position":[[69,9]]},"105":{"position":[[2681,8],[2917,9]]}}}],["lap",{"_index":517,"t":{"79":{"position":[[386,3]]}}}],["larg",{"_index":1052,"t":{"145":{"position":[[172,6]]},"174":{"position":[[13,5]]},"233":{"position":[[227,5],[587,5]]},"251":{"position":[[282,5]]},"319":{"position":[[355,5]]}}}],["larger",{"_index":1412,"t":{"307":{"position":[[258,7]]},"309":{"position":[[327,7]]},"315":{"position":[[376,6]]}}}],["last",{"_index":704,"t":{"99":{"position":[[4,4]]},"116":{"position":[[2752,4],[2813,4],[2919,4]]},"118":{"position":[[1470,4],[1531,4],[1637,4],[3099,4],[3312,4]]},"120":{"position":[[352,4]]},"145":{"position":[[7,5]]}}}],["later",{"_index":564,"t":{"85":{"position":[[692,5]]},"97":{"position":[[1414,5]]},"105":{"position":[[2275,5]]},"116":{"position":[[512,5]]},"185":{"position":[[145,6]]}}}],["leaderboard",{"_index":317,"t":{"51":{"position":[[505,12]]},"138":{"position":[[107,11]]}}}],["leak",{"_index":1056,"t":{"147":{"position":[[103,4]]}}}],["learn",{"_index":386,"t":{"63":{"position":[[26,5]]},"69":{"position":[[117,9]]},"91":{"position":[[41,8],[219,5]]}}}],["leav",{"_index":162,"t":{"33":{"position":[[838,7]]},"140":{"position":[[258,7]]}}}],["left",{"_index":754,"t":{"103":{"position":[[680,5]]},"211":{"position":[[200,5]]}}}],["len",{"_index":230,"t":{"43":{"position":[[84,3]]}}}],["less",{"_index":178,"t":{"33":{"position":[[1260,4]]},"37":{"position":[[106,4]]},"203":{"position":[[415,4]]},"305":{"position":[[202,4]]},"307":{"position":[[164,4]]},"309":{"position":[[233,4]]},"329":{"position":[[268,4]]}}}],["lesser",{"_index":1018,"t":{"136":{"position":[[275,6]]}}}],["let'",{"_index":393,"t":{"63":{"position":[[138,5]]},"95":{"position":[[103,5]]},"112":{"position":[[750,5]]},"118":{"position":[[0,5]]}}}],["level",{"_index":8,"t":{"3":{"position":[[81,5]]},"41":{"position":[[176,5]]},"47":{"position":[[103,6]]},"49":{"position":[[100,7],[155,9],[208,6]]},"51":{"position":[[24,6],[303,6],[371,6],[479,5],[726,5]]},"63":{"position":[[58,7]]},"65":{"position":[[102,6]]},"91":{"position":[[258,5]]},"93":{"position":[[30,6],[189,6],[420,5]]},"95":{"position":[[47,6]]},"97":{"position":[[344,7]]},"101":{"position":[[36,6],[318,6],[464,6],[498,6],[597,6],[647,6],[675,5],[753,6],[960,6],[979,6]]},"103":{"position":[[276,5],[357,7],[402,6],[473,6],[664,5],[770,5],[856,5]]},"105":{"position":[[1015,6],[1821,6],[2472,6],[2536,5],[2829,5],[3019,7],[3175,5],[3268,5],[3453,6],[3557,6],[3595,6],[3918,6],[3967,6],[4085,6],[4215,5],[4298,7],[4392,5],[4413,7],[4457,5]]},"112":{"position":[[33,5]]},"114":{"position":[[94,5]]},"116":{"position":[[19,5],[3545,5],[3623,5]]},"118":{"position":[[3913,5],[3926,5],[4083,5],[4377,5]]},"120":{"position":[[424,6],[867,6],[1548,6],[2705,6]]},"122":{"position":[[78,6],[102,6],[395,5],[501,5],[568,5]]},"124":{"position":[[2,5],[201,6]]},"126":{"position":[[20,5],[119,6]]},"130":{"position":[[126,7],[288,7]]},"140":{"position":[[160,5]]},"145":{"position":[[36,5]]},"147":{"position":[[71,6],[116,6]]},"155":{"position":[[360,5]]},"157":{"position":[[62,6]]},"181":{"position":[[275,5]]},"183":{"position":[[122,5],[235,6]]},"193":{"position":[[217,5],[283,5]]},"221":{"position":[[113,6],[295,7]]}}}],["level'",{"_index":1020,"t":{"136":{"position":[[293,7]]},"181":{"position":[[72,7],[162,7]]}}}],["level.lua",{"_index":292,"t":{"49":{"position":[[287,12]]},"51":{"position":[[406,10]]},"103":{"position":[[804,10]]},"105":{"position":[[3057,11],[3392,10]]},"114":{"position":[[237,9],[469,12]]},"116":{"position":[[3255,10]]},"118":{"position":[[2929,10]]},"120":{"position":[[641,9],[684,9],[1325,9],[1800,9]]}}}],["level_height",{"_index":773,"t":{"105":{"position":[[436,12],[520,13]]}}}],["level_length",{"_index":775,"t":{"105":{"position":[[463,12]]}}}],["level_nam",{"_index":810,"t":{"105":{"position":[[2989,13],[3192,12]]}}}],["lib",{"_index":914,"t":{"118":{"position":[[3263,3]]}}}],["librari",{"_index":44,"t":{"5":{"position":[[121,7],[169,7]]},"41":{"position":[[34,9],[85,8],[104,8],[162,8],[219,8]]},"43":{"position":[[4,7],[205,8]]},"45":{"position":[[4,7],[149,8]]},"47":{"position":[[13,7],[196,7],[620,8]]},"95":{"position":[[301,7]]},"97":{"position":[[42,8]]},"124":{"position":[[246,10]]},"157":{"position":[[11,7]]}}}],["lifetim",{"_index":1303,"t":{"239":{"position":[[84,9],[278,8],[404,8]]},"241":{"position":[[88,9],[339,8],[465,8]]},"243":{"position":[[89,9],[350,8],[476,8]]}}}],["limit",{"_index":834,"t":{"112":{"position":[[362,7]]},"145":{"position":[[129,10]]},"147":{"position":[[301,6]]}}}],["line",{"_index":327,"t":{"53":{"position":[[42,5]]},"77":{"position":[[457,4]]},"87":{"position":[[1288,5],[1326,5]]},"116":{"position":[[2209,4],[2328,4],[2440,4],[2991,4]]},"118":{"position":[[1094,4],[1213,4],[1325,4],[1709,4],[2346,5],[2450,4],[2959,4]]},"120":{"position":[[36,4],[709,4]]}}}],["link",{"_index":331,"t":{"53":{"position":[[164,7]]},"57":{"position":[[414,6]]},"67":{"position":[[756,4],[779,5]]},"93":{"position":[[72,6],[124,4],[304,4]]}}}],["list",{"_index":329,"t":{"53":{"position":[[85,4]]},"55":{"position":[[32,4]]},"57":{"position":[[87,4],[154,5]]},"89":{"position":[[409,4]]},"99":{"position":[[163,4],[208,4]]},"105":{"position":[[4405,4]]},"221":{"position":[[54,4]]},"223":{"position":[[134,4]]}}}],["list, and, or, xor), but you can't mix FixedPoint values with non-FixedPoint values: local a = 100fx local b = a / 3fx -- Ok local c = a / 3 -- Not ok! 3 is not a FixedPoint Internally, FixedPoint numbers are implemented using dux_fixed, which uses 64 bits integers. 52 bits are used to encode the integral part, leaving 12 bits for the fractional part. You can initialize the fractional part by placing a '.' followed by an integer in the range [0, 4095]: local a = 1fx -- Stores the value 1 local b = 1.0fx -- Stores the value 1 local c = 1.2048fx -- Stores the value 1.5 local d = 1.4095fx -- Stores the value 1.9997558... local e = -1.4095fx -- Stores the value -1.9997558... local f = 1.4096fx -- Not ok! The decimal part must be less than 4096 Here's an interactive converter that can help understanding the format:","s":"FixedPoint","u":"/ppl-docs/docs/APIs/types","h":"#fixedpoint","p":37},{"i":43,"t":"An integer that identifies an entity. EntityIds are guaranteed to be unique: they are not reused for the duration of a game.","s":"EntityId","u":"/ppl-docs/docs/APIs/types","h":"#entityid","p":37},{"i":45,"t":"Stores a sequence of characters. Typically used to hold text and file paths. The API only accepts strings less than 1000 bytes long.","s":"String","u":"/ppl-docs/docs/APIs/types","h":"#string","p":37},{"i":47,"t":"Stores floating point numbers. Because they make determinism hard to guarantee, floats must only be used in Lua scripts that define meshes or sounds. Although it is still technically possible to use floats in game scripts, they will eventually be forbidden.","s":"float","u":"/ppl-docs/docs/APIs/types","h":"#float","p":37},{"i":49,"t":"Manifests are written in JSON. Example of a manifest file: manifest.json { \"name\": \"The name of the level\", \"descriptions\": [\"A short description for your level.\"], \"information\": \"Information regarding your level. Up to 350 characters long. Can include #ff0000ffcolor!\", \"entry_point\": \"level.lua\", \"has_score_leaderboard\": true, \"rank_thresholds_1p\": { \"bronze\": 1000, \"silver\": 2000, \"gold\": 3000 } }","s":"Manifest files","u":"/ppl-docs/docs/File Information/manifest-files","h":"","p":48},{"i":51,"t":"name is the name of the level. Keep it short (30 char max). descriptions is an array of strings. You can put multiple descriptions, but for now only the first string is displayed anywhere. information is an optional string that can be 350 characters long that should contain information relevant to the level. entry_point contains the path to the main entry point of the level. warning entry_point must be level.lua. has_score_leaderboard is a boolean that specifies whether the level should have a score leaderboard. rank_thresholds_1p contains the requirements for the players to unlock bronze, silver, and gold stars. You must not include this field if has_score_leaderboard is false. If all the thresholds are 0, then the level will not give out stars.","s":"Manifest fields","u":"/ppl-docs/docs/File Information/manifest-files","h":"#manifest-fields","p":48},{"i":53,"t":"Example of a file that defines a single sound: sounds = { { frequency = 500, sustain = 0.3, waveform = \"triangle\", } } The following fields can be used to describe a sound: attack (in seconds) decay (in seconds) sustain (in seconds) sustainPunch (in seconds) amplification tremoloDepth tremoloFrequency (in hertz) frequency (in hertz) frequencyDeltaSweep frequencyJump1Onset frequencyJump2Onset frequencyJump1Amount frequencyJump2Amount frequencySweep vibratoFrequency (in hertz) vibratoDepth (in hertz) flangerOffset flangerOffsetSweep repeatFrequency waveform (\"sine\", \"triangle\", \"sawtooth\", \"square\", \"tangent\", \"whistle\", \"breaker\", \"whitenoise\", \"pinknoise\", \"brownnoise\") tip Use jfxr for sound creation. A script then transforms the resulting jfxr link (for example this link) into a table consumable by PewPew Live. See this example.","s":"Sound files","u":"/ppl-docs/docs/File Information/sound-files","h":"","p":52},{"i":55,"t":"In this tutorial, we will learn how to make more advanced levels, including meshes, custom enemies, and other cool gameplay features! So, let's get straight into it.","s":"Advanced","u":"/ppl-docs/docs/Guides/Lua/advanced","h":"","p":54},{"i":57,"t":"Before we start, it is necessary to know at least some basic Lua and how to make a simple PewPew Live level. If you need a refresher, take a look at the Beginner and Intermediate tutorials. Once you're done, you can come back to this tutorial. Tutorial in the making.","s":"Note","u":"/ppl-docs/docs/Guides/Lua/advanced","h":"#note","p":54},{"i":59,"t":"In PewPew Live, a mesh is a collection of lines in 3D. To create a mesh, you need to list the coordinates of the points making up the model, and how the points are linked. Lua scripts describing meshes needs to create a table called meshes. That table must contain one or more meshes. Example of a file that defines two meshes: meshes = { { -- A 500x500 square vertexes = {{0,0,0}, {500,0,0}, {500,500,0}, {0,500,0}}, colors = {0xffffffff, 0xffff00ff, 0xff00ffff, 0xff0000ff}, segments = {{0,1,2,3,0}} }, { -- A right-angled triangle vertexes = {{0,0,0}, {500,0,0}, {0,500,0}}, colors = {0xffff00ff, 0xff00ffff, 0xff0000ff}, segments = {{0,1,2,0}} } }","s":"Mesh files","u":"/ppl-docs/docs/File Information/mesh-files","h":"","p":58},{"i":61,"t":"The vertexes field contains the list of vertexes. Vertexes are represented by three numbers. Those numbers can be floating point numbers.","s":"Vertexes","u":"/ppl-docs/docs/File Information/mesh-files","h":"#vertexes","p":58},{"i":63,"t":"The segment field describes which vertexes should be joined by a segment. It contain a list of segment chains. Each segment chain is a table that holds a lists of 0-based indexes to vertexes that should be connected by a segment. Important: There is a difference between segments = {{0,1}, {1,2}} and segments = {{0,1,2}}. In the first case, 2 separate segments will be generated. In the second case, two segments linked with a miter join will be generated.","s":"Segments chains","u":"/ppl-docs/docs/File Information/mesh-files","h":"#segments-chains","p":58},{"i":65,"t":"The optional colors field contains the colors of each vertexes. If the colors field is present, it must contain as many colors as there are vertexes. Colors are 32 bit RGBA values. 0xff0000ff -- opaque red 0xff000080 -- slightly transparent red 0xff000000 -- fully transparent red Note that all meshes are rendered with additive blending.","s":"Colors","u":"/ppl-docs/docs/File Information/mesh-files","h":"#colors","p":58},{"i":67,"t":"Astute readers may have realized that because meshes is described in a Lua script, it can be generated at runtime. See for instance this example.","s":"Procedural rendering","u":"/ppl-docs/docs/File Information/mesh-files","h":"#procedural-rendering","p":58},{"i":69,"t":"https://repl.it/languages/lua can be used to try Lua in the browser. These examples are more for review, rather than learning! If you see something here that you don't understand, continue to watch Lua tutorials on youtube!","s":"Beginner Lua Tutorial","u":"/ppl-docs/docs/Guides/Lua/beginner","h":"","p":68},{"i":71,"t":"print(\"Hello world!\") Output: Hello World! print(2 + 3) Output: 5 print(\"2 + 3\") Output: 2 + 3 Anything in quotation marks \" \" or ' ' is a string. Printing a string will output exactly what you type! Anything not inside of quotation marks are registered as numbers, variables, or mathematics!","s":"Printing example","u":"/ppl-docs/docs/Guides/Lua/beginner","h":"#printing-example","p":68},{"i":73,"t":"my_variable = 5 print(my_variable) Output: 5 x = 2 y = 10 print(x + y) Output: 12 x = 2 y = 10 print(\"x + y\") Output: x + y some_text = \"this is cool\" print(some_text) Output: this is cool Variables can be assigned practically any value! You can store them as numbers, strings, and more!","s":"Variables example","u":"/ppl-docs/docs/Guides/Lua/beginner","h":"#variables-example","p":68},{"i":75,"t":"x = 6 if x > 5 then print(\"Greater than 5!\") end Output: Greater than 5! a = true b = false if a then print(\"True\") end if a and b then print(\"True\") else print(\"False\") end if a or b then print(\"True\") else print(\"False\") end if b then print(\"True\") end Output: True False True x = 5 y = 5 if x == y then print(\"True\") end Output: True Variables can also be assigned boolean values, which are true and false! With \"and\" statements, both or all arguments need to be true to equal true in total! With \"or\" statements, only one needs to be true to equal true in total! Both or all need to be false to be false in total!","s":"If statement example","u":"/ppl-docs/docs/Guides/Lua/beginner","h":"#if-statement-example","p":68},{"i":77,"t":"for i = 1, 5 do print(\"Hello!\") end The following output is repeated 5 times: Hello! for i = 1, 10 do print(i) end Output: 1 2 3 4 5 6 7 8 9 10 for i = 1, 10, 2 do print(i) end Output: 1 3 5 7 9 for i = 0, -10, -1 do print(i) end Output: 0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 local loopcount = 25 for i = 1, loopcount do print(\"Loop!\") end The following output is repeated 25 times: Loop! For loops are useful for running the same code multiple times! The first line of the for loop has the syntax for i = Index, End Value, Increments. You set i as your starting value, separate with a comma, set your end value, and you can optionally set your increment as your third value. Don't forget the \"do\"!","s":"For loop example","u":"/ppl-docs/docs/Guides/Lua/beginner","h":"#for-loop-example","p":68},{"i":79,"t":"for i = 1, 5 do print(\"This is the outer loop!\") for j = 1, 3 do print(\"This is the inner loop!\") end end The following output is repeated 5 times: This is the outer loop! This is the inner loop! This is the inner loop! This is the inner loop! local swim_laps = 10 local paddles = 5 for i = 1, swim_laps do print(\"Lap: \"..i) for j = 1, paddles do print(\"Paddle: \"..j) end end Output: Lap: 1 Paddle: 1 Paddle: 2 ...etc. for i = 1, 5 do for i = 1, 2 do print(\"This is fine!\") end end The following output is repeated 10 times: This is fine! You are allowed to put for loops inside of other for loops! In if you put a for loop that repeats 3 times inside of a for loop that repeats 5 times, that inner loop runs 15 times total! With for loops, you can use any variable as your index! And with nested for loops, it is good practice to use different variables, like using i and j instead of using i twice.","s":"Nested for loop example","u":"/ppl-docs/docs/Guides/Lua/beginner","h":"#nested-for-loop-example","p":68},{"i":81,"t":"local x = 3 while x > 0 do print(x) x = x - 1 end Output: 3 2 1 local x = 3 local y = 4 while x > 0 and y > 0 do print(x,y) x = x - 1 y = y - 1 end Output: 3 4 2 3 1 2 while true do print(\"Hello!\") end The following output is repeated indefinitely: Hello! A while loop is very similar to a for loop, except you can think of it as an if statement and for loop combined! The while loop runs while the conditions are true. So for a while true do loop, the loop runs forever! Be careful when making a while true do loop!","s":"While loop example","u":"/ppl-docs/docs/Guides/Lua/beginner","h":"#while-loop-example","p":68},{"i":83,"t":"while true do print(\"loop!\") break end The above loop will only run once. Output: loop! x = 0 while true do print(\"loop!\") x = x + 1 if x >=2 then break end end The above loop will run 2 times. Output: loop! loop! for i = 1, 10 do print(i) if i >= 3 then break end end Output: 1 2 3 Using break is very useful! The purpose for break is to stop a loop from running! So using break in a for or while loop will ultimately terminate it!","s":"Break loops example","u":"/ppl-docs/docs/Guides/Lua/beginner","h":"#break-loops-example","p":68},{"i":85,"t":"local function myFunction() local x = 4 local y = 2 print(x + y) end myFunction() Output: 6 local function AddNum(num1, num2) print(num1 + num2) end AddNum(99,121) AddNum(44,33) Output: 220 77 local function Cubed(number) newNumber = number*number*number return newNumber end local x = Cubed(2) local y = Cubed(3) print(x,y) local a = Cubed(10) print(a) Output: 8 27 1000 Functions are good for reducing the amount of code you have to write. If you have a piece of code you are going to use over and over with slightly different values, then make that piece of code a function! You can give functions parameters which is the num1 and num2 in myFunction(num1, num2). When you use the function later in your code, don't forget to fill in the parentheses! You can also use return to essentially turn a function into a value.","s":"Functions example","u":"/ppl-docs/docs/Guides/Lua/beginner","h":"#functions-example","p":68},{"i":87,"t":"local myTable = {1,5,3} print(myTable[1]) print(myTable[2]) print(myTable[3]) Output: 1 5 3 local names = { \"Bob\", \"Moses\", \"Joe\" } for i = 1, #names do print(names[i]) end names[4] = \"Dawn\" print(names[4]) table.insert(names,\"Rambo\") print(names[5]) Output: Bob Moses Joe Dawn Rambo local person = { health = 100, speed = 20, isAwesome = true, name = \"John\" } print(\"This person's health is \"..person.health) print(\"This person's health is \"..person[\"health\"]) print(\"This person's speed is \"..person.speed) print(\"This person is awesome. \"..person.isAwesome) print(\"This person's name is \"..person.name) print(\"This person's name is \"..person[\"name\"]) person.home = \"USA\" person[\"money\"] = 250 print(\"This person's home is \"..person.home) print(\"This person has \"..person[\"money\"]..\" dollars!\") Output: This person's health is 100 This person's health is 100 This person's speed is 20 This person is awesome. true This person's name is John This person's name is John This person's home is USA This person has 250 dollars! Tables are very good for storing lots of information. You can even put things inside of tables after the table is made! Done with table.insert(TableName, data) or you add things with table[n] = data. And remember, the table doesn't have to be defined on the same line! The brackets can be on separate lines to make it easier to read!","s":"Tables example","u":"/ppl-docs/docs/Guides/Lua/beginner","h":"#tables-example","p":68},{"i":89,"t":"local numbers = {3, 4, 99, 202, -3} for i, v in pairs(numbers) do print(i, v) end Output: 1 3 2 4 3 99 4 202 5 -3 local names = {\"Jack\", \"Mike\", \"Melinda\", \"Stacy\"} for index, person in pairs(names) do print(\"Person \"..index..\" is \"..person) end Output: Person 1 is Jack Person 2 is Mike Person 3 is Melinda Person 4 is Stacy For i, v in pairs loops are a useful kind of for loop! They basically go through a list and use the data stored in the table. The variable i is the index or position of the table where the data is stored. The variable v is the value of the data. Inside of pairs() is the table you want to use: pairs(TableName). The variables don't have to be named \"i\" and \"v\", they can be named whatever you want!","s":"for i, v in pairs() loop example","u":"/ppl-docs/docs/Guides/Lua/beginner","h":"#for-i-v-in-pairs-loop-example","p":68},{"i":91,"t":"This community-maintained wiki holds the resources useful for creating custom levels for PewPew Live. Levels are created by writing Lua code. If you are new to programming or new to Lua, a good first step is to start with the Beginner guide. If you are already familiar with programming, a good approach is to first look at the examples (for example, the simple_level) to get a feeling of how a level is made, and then come back to the wiki to get more precise information about the various aspect of level creation. If you have questions, the game's creator and many level creators are available on Discord.","s":"Introduction","u":"/ppl-docs/docs/intro","h":"","p":90},{"i":93,"t":"A level is a directory that contains a manifest and Lua files. The Lua files fall in three categories: Files that describe graphics. Files that describe sounds. Files that describe the behavior of the level. They make use of the pewpew and fmath libraries, which require an understanding of the types used.","s":"Level structure","u":"/ppl-docs/docs/intro","h":"#level-structure","p":90},{"i":95,"t":"You can upload your level by signing into your account on https://pewpew.live and navigating to the Manage your custom levels page.","s":"Uploading your level","u":"/ppl-docs/docs/intro","h":"#uploading-your-level","p":90},{"i":97,"t":"When writing code, it is recommended to follow LuaRocks's style guide, but using 2 space indentation to be consistent with the rest of PewPew's codebase.","s":"Recommended Lua Style guide","u":"/ppl-docs/docs/intro","h":"#recommended-lua-style-guide","p":90},{"i":99,"t":"PewPew Snippets is an essential Visual Studio Code extension that offers autocompletion and useful code snippets for creating levels. PewPewLive-MeshExporter is a Blender plugin for converting scenes into PewPew Live 3D meshes. PPLAF is an opinionated Lua framework for creating advanced levels.","s":"Helpful tools and utilities","u":"/ppl-docs/docs/intro","h":"#helpful-tools-and-utilities","p":90},{"i":101,"t":"Tutorial created by WinterNox.","s":"60 FPS Animation","u":"/ppl-docs/docs/Guides/Other/fps-animation","h":"","p":100},{"i":104,"t":"Mesh animations in PewPew Live are achieved by iterating through multiple meshes that are slightly different from each other. The meshes are usually stored in a single file and are made procedurally.","s":"Mesh animations","u":"/ppl-docs/docs/Guides/Other/fps-animation","h":"#mesh-animations","p":100},{"i":106,"t":"If you have some experience with level creation, you should know that PewPew Live runs at 30 ticks per second and that the graphics are interpolated. However, the interpolation only applies to transformations (position, rotation and scale). But, what about mesh animations? Since you can only change something about the entity per tick, mesh animations would be limited to 30 frames per second. Thankfully, the PPL Lua API has just the right function that can be used to achieve 60 FPS mesh animations. This function is: pewpew.customizable_entity_set_flipping_meshes(entity_id, file_path, index1, index2) When used, the entity will switch between the two specified meshes in a single game tick. But, how does that help us achieve 60 FPS animations? Let's see.","s":"Limitations","u":"/ppl-docs/docs/Guides/Other/fps-animation","h":"#limitations","p":100},{"i":108,"t":"Before we can start making an animation and assigning it to an entity, we need to have a base level that we can work with. Start by creating a new folder in ./content/levels/. In the newly created folder, make sure you have these files: level.lua graphics.lua (The name of your mesh file can be different, but remember it!) manifest.json If you need a basic manifest.json, here is a template you can use. { \"name\": \"60 FPS\", \"descriptions\": [\"Amazing\"], \"entry_point\": \"level.lua\", \"has_score_leaderboard\": false }","s":"Setting up","u":"/ppl-docs/docs/Guides/Other/fps-animation","h":"#setting-up","p":100},{"i":110,"t":"Now that we have a level base, we can start making our mesh and entity. If at any point you face a problem, try following the steps again, or check the final .lua files.","s":"Getting started","u":"/ppl-docs/docs/Guides/Other/fps-animation","h":"#getting-started","p":100},{"i":112,"t":"Open graphics.lua (or your mesh file) and start by writing the following: meshes = {} Since our meshes are going to be procedurally generated, we won't be making every vertex by hand, instead, we will make Lua do that for us! Essentially when making a procedural mesh, we make a table with our vertexes and segments, that we later add to the meshes table. The vertex and segment tables are going to hold the generated points and segment indexes. Add this to your mesh file: -- Tables for our mesh vertexes, segments local computed_vertexes, computed_segments = {}, {} Now we need a way to populate the tables with our mesh points and segments. Note: In this example, we will be making a hexagon! Start by defining the radius and small_radius variables. They will be used when generating the hexagon sides. Also, create a variable i, which will be used for the segments. Now, create a for loop that will go from 0 to math.pi * 2 and increment by math.pi * 2 / 6 (since we want it to be a hexagon). Get the corresponding sine and cosine of the angle (y and x positions). Multiply one pair by the default radius and one by the smaller radius, and add them to the vertexes table. To add the needed segment indexes, we need to connect the vertexes together. Connect the inner hexagon vertex to the outer one, connect the inner hexagon vertex with its own next vertex, and connect the outer hexagon vertex the same way. Increment the segment counter by 2. The resulting code should look something like this: local radius = 96 -- Outer hexagon local small_radius = 48 -- Inner hexagon local i = 0 for angle = 0, math.pi * 2, math.pi * 2 / 6 do -- We want to go from angle 0 to 2Ï€, skipping by 2Ï€ / 6, making a hexagon local y, x = math.sincos(angle) -- y and x positions on the unit circle table.insert(computed_vertexes, {x * radius, y * radius}) -- Vertex for the outer hexagon table.insert(computed_vertexes, {x * small_radius, y * small_radius}) -- Vertex for the inner hexagon table.insert(computed_segments, {i, i + 1}) -- Line joining the corresponding vertices of the inner and outer hexagons table.insert(computed_segments, {i, i + 2}) -- Line joining the vertex of the outer hexagon to its next one table.insert(computed_segments, {i + 1, i + 3}) -- Line joining the vertex of the inner hexagon to its next one i = i + 2 end Because of the way we added the segments, at the end of the for loop we get extra segments that are unnecessary. After the for loop, we can remove them by doing this: table.remove(computed_segments, #computed_segments) -- Removal of the last segment as there is no vertex at index i + 3 during the last iteration table.remove(computed_segments, #computed_segments) -- No vertex at index i + 2 during the last iteration table.remove(computed_segments, #computed_segments) -- A line is already present joining the vertices At the end, we add the mesh made up of the generated vertexes and segments. table.insert(meshes, { vertexes = computed_vertexes, segments = computed_segments })","s":"Making the mesh","u":"/ppl-docs/docs/Guides/Other/fps-animation","h":"#making-the-mesh","p":100},{"i":114,"t":"Now, go to level.lua, and start by creating an entity at position (0fx, 0fx). Next, set the entity's mesh to the one we just created. local id = pewpew.new_customizable_entity(0fx, 0fx) pewpew.customizable_entity_set_mesh(id, \"/dynamic/graphics.lua\", 0) -- Change the filename if needed Note: Setting level size and creating a player is optional. Run ppl-utils.exe and open your level at http://localhost:9000/pewpew.html You should see the following: If you don't, you might have made a mistake somewhere! Check the steps to make the mesh again and check for mistakes.","s":"Creating the entity and assigning it the mesh","u":"/ppl-docs/docs/Guides/Other/fps-animation","h":"#creating-the-entity-and-assigning-it-the-mesh","p":100},{"i":116,"t":"Let's get into animating our mesh! For this tutorial, we will have the outer hexagon rotating clockwise and the inner hexagon counterclockwise. To do this, we need multiple \"meshes\" that we will set our entity to. In your mesh file, change for loop to the following: for angle_offset = 0, math.pi * 2, math.pi * 2 / 60 do -- Our animation will have 60 frames. We want the hexagons to make a full rotation each 60 frames (2 seconds). This does not mean the animation is 60FPS yet! -- Tables for our mesh vertexes, segments local computed_vertexes, computed_segments = {}, {} local radius = 96 -- Outer hexagon local small_radius = 48 -- Inner hexagon local i = 0 for angle = 0, math.pi * 2, math.pi * 2 / 6 do -- We want to go from angle 0 to 2Ï€, skipping by 2Ï€ / 6, making a hexagon local y, x = math.sincos(angle) -- y and x positions on the unit circle table.insert(computed_vertexes, {x * radius, y * radius}) -- Vertex for the outer hexagon table.insert(computed_vertexes, {x * small_radius, y * small_radius}) -- Vertex for the inner hexagon table.insert(computed_segments, {i, i + 1}) -- Line joining the corresponding vertices of the inner and outer hexagons table.insert(computed_segments, {i, i + 2}) -- Line joining the vertex of the outer hexagon to its next one table.insert(computed_segments, {i + 1, i + 3}) -- Line joining the vertex of the inner hexagon to its next one i = i + 2 end table.remove(computed_segments, #computed_segments) -- Removal of the last segment as there is no vertex at index i + 3 during the last iteration table.remove(computed_segments, #computed_segments) -- No vertex at index i + 2 during the last iteration table.remove(computed_segments, #computed_segments) -- A line is already present joining the vertices table.insert(meshes, { vertexes = computed_vertexes, segments = computed_segments }) end As you can see, the real mesh generation code is pretty much the same, just that we repeat it several times instead, making it have frames! Now, most importantly, we need to change the way we get the points of our hexagon. Since we want the outer hexagon to turn clockwise and the inner one counterclockwise, we need to change the angles depending on which frame we are on. Since each frame is going to have a specific angle offset, we can add that to our initial angles, meaning we have to change this line: local y, x = math.sincos(angle) into local y, x = math.sincos(angle - angle_offset) And add a new line below it like so: local y2, x2 = math.sincos(angle + angle_offset) We will use x2 and y2 for the inner hexagon. To do this, replace the x * small_radius and y * small_radius coordinates for the inner hexagon with x2 * small_radius and y2 * small_radius respectively. We now have 60 frames of meshes that we can use to animate our entity. To do this, we need to use an index which will increase every tick, and use that to set the entity's mesh. This can be done like so: In level.lua, replace the second line with this code: local mesh_index = 0 pewpew.entity_set_update_callback(id, function() -- We have 60 frames out of 61 total frames. The last frame is equal to the first one and is unused. -- The index of the 60th frame is 59. (Although we are using lua, mesh and sound indexes start from 0 in PewPew Lib API.) -- Loop when we have exceeded past the last frame. if mesh_index > 59 then mesh_index = 0 end pewpew.customizable_entity_set_mesh(id, \"/dynamic/graphics.lua\", mesh_index) mesh_index = mesh_index + 1 end) The code is pretty self-explanatory. We increment the index every tick and use that index to set the mesh. Since the meshes we have generated have small changes in them, doing this creates an animation. The result should look something like this: As you can see, it is an animation. Though, this animation is running at only 30 frames per second. This is an issue. An animation running at 30 FPS will not look good with the rest of the level as the level might have other content that moves. And as you already know, position transformation is interpolated by PewPew Live. This means that, even though the level runs at 30 ticks per second, the game will interpolate the graphics and display them at 60 FPS or 90 FPS for example. (The game interpolates the graphics as per the refresh rate of the device, which will usually be higher than 30Hz.) To ensure that the difference between the rest of the level and our mesh animation is minimal, we have to make our mesh animation run on at least 60 FPS.","s":"Animating the mesh","u":"/ppl-docs/docs/Guides/Other/fps-animation","h":"#animating-the-mesh","p":100},{"i":118,"t":"Open your mesh file and replace the line for angle_offset = 0, math.pi * 2, math.pi * 2 / 60 do -- 60 -- Code that generates the meshes end with for angle_offset = 0, math.pi * 2, math.pi * 2 / 120 do -- 120 -- Code that generates the meshes end The new code will create 121 frames or meshes for us, out of which 120 will be used. (This is because the last and first frames are the same.) If you save the files and run your level, you might notice that the animation is getting reset halfway through. This is because at the 60th frame, we have gone only 50% through the animation. Since we now have 120 frames, we need to change the code in level.lua to account for this change. Open level.lua and change the line if mesh_index > 59 then mesh_index = 0 end to if mesh_index > 119 then mesh_index = 0 end The new code now shows the complete animation when running the level. However, it is visibly slower. Why is this the case? Remember, in the previous case, the variable angle_offset was increasing by 2Ï€/60 every frame. Now, it is increasing by 2Ï€/120 every frame. You might be wondering why we did this. This is because to achieve a 60 FPS animation that runs with the same speed, we need to have double the amount of frames that we had previously. We now just need to speed the animation back to its original speed. Open level.lua and change mesh_index = mesh_index + 1 to mesh_index = mesh_index + 2 This should make the animation return to its original speed, as we are skipping every other frame. However, if you save the files and run your level, you will notice no change between the current animation and the one we had at the start. You would in fact be right, there is no difference between the two. Our animation still runs at 30 FPS. This is where flipping meshes comes into play. Open level.lua and replace pewpew.customizable_entity_set_mesh(id, \"/dynamic/graphics.lua\", mesh_index) with pewpew.customizable_entity_set_flipping_meshes(id, \"/dynamic/graphics.lua\", mesh_index, mesh_index + 1) What does this exactly do? When we set flipping meshes of an entity, that entity goes over the two specified meshes in a single game tick. This means that, in the first game tick, it will have the mesh at index 0 for half a tick and will have the mesh at index 1 for the rest half of a tick. In the next tick, we are resetting the flipping meshes. The variable mesh_index now has a value of 2. The entity now has the mesh at index 2 for half a tick and has the mesh at index 3 for half a tick. Notice that we have gone over 4 meshes in just 2 game ticks (2 meshes per game tick)! The way in which we have used this creates an animation that runs at 60 FPS. Now, if you save the files and run your level, you'll notice that it is a lot smoother than our initial animation. It is exactly twice as smooth. It might look something like this: Congratulations! You have successfully made an animation that runs at 60 frames per second. I hope that you were able to understand this fairly well. Now, experiment with your code and make creative animations.","s":"Making the animation 60 FPS","u":"/ppl-docs/docs/Guides/Other/fps-animation","h":"#making-the-animation-60-fps","p":100},{"i":121,"t":"Gameplay is king. Prefer procedurally generated graphics over manually created graphics. Prefer angular designs instead of curved designs. Prefer abstract designs over realistic designs.","s":"General guidelines","u":"/ppl-docs/docs/other/level-design-principles","h":"#general-guidelines","p":119},{"i":124,"t":"Corners reduce the exposure of the players' ships, so players will naturally tend to hide there. Either incentivize players to move by putting bonuses away from the corners, or de-incentivize players from staying there by spawning enemies there. The same thing applies (to a lesser extent) to level's borders.","s":"Users will try to camp in the corners","u":"/ppl-docs/docs/other/level-design-principles","h":"#users-will-try-to-camp-in-the-corners","p":119},{"i":126,"t":"If players have a very slim chance of getting a bonus that massively increases their score, the top of the leaderboard will be populated by people that were lucky, not by people that were skilled. This is not necessarily a bad thing, but it's something to keep in mind.","s":"Fair randomness","u":"/ppl-docs/docs/other/level-design-principles","h":"#fair-randomness","p":119},{"i":128,"t":"Ask yourself if it is possible for the player to accumulate a lot of points (or a lot of shields) simply by not triggering an event. For example, I once made a level where shields kept appearing until all enemies were killed. Some players discovered that by leaving one enemy alive, they could farm shields.","s":"Be mindful of farming","u":"/ppl-docs/docs/other/level-design-principles","h":"#be-mindful-of-farming","p":119},{"i":131,"t":"At most 1300 entities can exist at any given moment. This includes the player's bullet. If there are already 1300 entities, no more entities will be created. This means that the player won't be able to shoot.","s":"Entity count","u":"/ppl-docs/docs/other/level-restrictions","h":"#entity-count","p":129},{"i":133,"t":"A game lasts at most 1 hour. If the level has not called stop_game by then, it will be called automatically. The reason for this limitation is that replays then become too large.","s":"Duration","u":"/ppl-docs/docs/other/level-restrictions","h":"#duration","p":129},{"i":135,"t":"The Lua interpreter can't use more than 500KB of memory when running a level. Unless you have a memory leak in your level, this shouldn't be a problem. The Lua interpreter can't use more than 3MB of memory when loading a mesh. You will need to split a mesh into multiple files if you are hitting this limit. The Lua interpreter can't use more than 3MB of memory when loading sounds. Unless you are doing something really crazy, this will never be a problem.","s":"Memory usage","u":"/ppl-docs/docs/other/level-restrictions","h":"#memory-usage","p":129},{"i":137,"t":"This page contains a random bag of technical information concerning PewPew Live.","s":"Trivia","u":"/ppl-docs/docs/other/trivia","h":"","p":136},{"i":139,"t":"PewPew Live uses a fork of Lua 5.3.","s":"The Lua interpreter","u":"/ppl-docs/docs/other/trivia","h":"#the-lua-interpreter","p":136},{"i":141,"t":"PewPew Live's version numbers consist of 3 parts: MAJOR.MINOR.BUILD MAJOR and MINOR may get updated with any significant release. The BUILD number is an ever-increasing number representing a point in time of PewPew Live's development.","s":"Version number","u":"/ppl-docs/docs/other/trivia","h":"#version-number","p":136},{"i":143,"t":"PewPew Live uses several different ports. Multiplayer servers open the 51980 UDP port. If the port is unavailable, the server will try all ports up to 51989. If they are all taken, it will try to open ports random ports in the 49152-65535 range. LAN multiplayer room discovery is made by broadcasting on the ports 19869, 23902, 28013, 40124, 58240. The custom level development server exposes an http server on the TCP port 9000.","s":"Ports","u":"/ppl-docs/docs/other/trivia","h":"#ports","p":136},{"i":145,"t":"If you are here, you made it through the learning process of the Lua language! Keep in mind, this section assumes that you know basic Lua. If you need to freshen up, look back onto the Beginner tutorials! Here, we will learn how to make a PewPew Live Custom Level","s":"Intermediate","u":"/ppl-docs/docs/Guides/Lua/intermediate","h":"","p":144},{"i":147,"t":"So in order to begin making a level, you will need to visit a couple of links. https://github.com/jyaif/ppl-utils <--- This link right here will take you to the files you need to make your level! Scroll down to Getting Started and follow the directions! https://pewpewlive.github.io/ppl-utils/ <--- This link right here is the PewPew Live API. That means, many important functions and items that are needed to make your level are found on this site! Also, make sure you have a text editor to make your code in! If you need help with this, go to the discord and ask about it in #technical-discuss!","s":"Getting started","u":"/ppl-docs/docs/Guides/Lua/intermediate","h":"#getting-started","p":144},{"i":149,"t":"Before we begin in our first steps to making a level, it is crucial to understand the PewPew Live API. Let's take a look... These are some of the functions that you will be using in PewPew Live! I suggest giving it a lookover, and try to see what it all means! Whenever you use a function in PewPew's library (API), you MUST put pewpew. infront of it! So you see, print(String str) would be typed in your code as pewpew.print(String str). The black boxes with green text (things like String, Int, etc) tell you what kind of data the function uses, and what type of function it is! Don't worry too much about the type of function, focus mainly on the data that the functions take in, like Int and String.","s":"PewPew Live API - functions","u":"/ppl-docs/docs/Guides/Lua/intermediate","h":"#pewpew-live-api---functions","p":144},{"i":151,"t":"Another main part of the API is the Fmath library! These are more functions in PewPew Live, but slightly different. To use these functions, you MUST put fmath. infront of it! So sqrt(FixedPoint x) would be typed in your code as fmath.sqrt(FixedPoint x). Now, what exactly is FixedPoint? FixedPoint refers to a specific kind of number in PewPew levels. We just call them fixed point numbers. They are strange, but don't worry, you'll get the hang of them! You really only use fixed point numbers when dealing with location and size. But don't worry, fixed point numbers and normal numbers are the same! ...For the most part. See, you write a normal number as n, and fixed point numbers are written as nfx. Fixed point numbers are put in the code by putting fx after your number! So you have numbers like 1, 2, 3. But in fixed point numbers, they would be 1fx, 2fx, 3fx. And so on! Another main difference I should note is their decimals! It's a little strange, and I won't go into too much detail, but 2.6fx does not exist. The number 2.5 is written as 2.2048fx. It's strange, I know! And there is a specific and good reason for this! But for now, don't worry too much about decimals. If you need to use a number that isn't a full number, stick with fractions! Like instead of writing 2.2048fx, write 5fx/2fx! See? Much better! Just remember that these fixed point numbers are mostly used for location and size! In later examples we will see exactly how they are used!","s":"PewPew Live API - fmath","u":"/ppl-docs/docs/Guides/Lua/intermediate","h":"#pewpew-live-api---fmath","p":144},{"i":153,"t":"The last main part that I need to cover is the Enums section of the API So what is an Enum? Enum stands for Enumerator, and is just a fancy way of talking about a list of items and properties. So here is the list of enemies and the properties of enemies, AKA the Enums, that a person can access and use. Again, you need to put pewpew. infront of these when you use them. A quick example of a reference to a specific enemy would be pewpew.MothershipType.THREE_CORNERS. This piece of code references the pink triangles (motherships) that you see in Eskiv. We will go into detail on how to use Enums in specific ways, but for now, that is the general briefing on how to read the PewPew Live API!","s":"PewPew Live API - enums","u":"/ppl-docs/docs/Guides/Lua/intermediate","h":"#pewpew-live-api---enums","p":144},{"i":155,"t":"So we are finally about to make our level. Where do we keep it? Well at the very top, you went to the main github page and downloaded the files, you need that! You will need to extract the file, and then you will enter it. You will see two files, a folder and an .exe file. That .exe is very important to running your level, keep it in mind! You will then see a bunch of files, and a folder. You do NOT need to worry about these files at all! Just the folder! The levels folder is where all custom levels are stored! So that is the folder you enter into next! As you can see below, there are some levels already here! The developer, JF, put these levels here as examples for level creators to look at while they work! This is where you will create your level. So all you need to do is make a new folder. I'm going to call my folder TUTORIAL_LEVEL, although you can call your folder whatever you like. And there you go! You now have the location of your custom level, and all the levels are nice and organized! Time for the fun stuff!","s":"Where does this level go?","u":"/ppl-docs/docs/Guides/Lua/intermediate","h":"#where-does-this-level-go","p":144},{"i":157,"t":"Here we can go into the environment that we need to code! Just to let you know, I use a text editor called Visual Studio Code. You may use something different, and again, if you need help with this text editor stuff, reach out in the discord! You can either open up just your level file in your text editor, or you can open the folder that contains all the levels. This is helpful for looking at other levels while you code! So head back to this screen below: And open the levels folder with your text editor! If you need help with this, feel free to reach out for help! If you're ready, then proceed down below! As pointed out by the very helpful green arrow, my level is on the left. The folder was initially empty. You need create a new script that will be your main level script. It HAS to be called level.lua. This is how PewPew Live enters into your level and runs it. It might change in the future, but it is good practice to keep consistency. And with the script made, you have an empty canvas. What's next?","s":"Open your level","u":"/ppl-docs/docs/Guides/Lua/intermediate","h":"#open-your-level","p":144},{"i":159,"t":"This next portion will go over how to make your map, and how to spawn the player. Yes! You have to put in the code that spawns the player yourself! But don't worry, it's not too terrible. Look back into the PewPew API, there is a function that sets the map size. I'll state it here, it is set_level_size(FixedPoint width, FixedPoint height). This is the code that will make your map! It is very simple, and here is a sample code. local level_height = 300fx local level_length = 400fx pewpew.set_level_size(level_length, level_height) And that's all there is to it! You have made a map! Remember, when using a PewPew function, you MUST put pewpew. in front, or it won't work! And we are dealing with location/size, so fixed point numbers must be used! And you don't need to set the sizes as variables, I just consider it good practice. It's also easier to reference the map sizes if they are variables. You could have written pewpew.set_level_size(300fx, 400fx), but it's up to you. Hold it! Before you try out your level, you need to spawn the player! This requires another handy function from the API. This one is new_player_ship(FixedPoint x, FixedPoint y, int player_index). A player's spawn point is a matter of location, so fixed points are required! Also, notice how the index is not a fixed point number, but a normal number! The index is not size or location, so using normal numbers is fine! pewpew.new_player_ship(100fx, 100fx, 0) And there you have it! The player has spawned, and you have a map made. I should back track, what is player_index? And what does the 0 have to do with it? Well each player, whether it is single-player or multi-player, are assigned an \"index\" to keep track of which player is which. Player 1 has an index of 0, player 2 has an index 1, and so on. BUT at the current moment, custom levels only support one player, so whenever you use new_player_ship(FixedPoint x, FixedPoint y, int player_index), just use 0 for the player_index. The code above worked just fine, but another way, which is good practice, to write the above code is local x_spawn = 100fx local y_spawn = 100fx local p1_index = 0 local player1_ship = pewpew.new_player_ship(x_spawn, y_spawn, p1_index) This piece of code sets the ship as a variable that you can reference later on! I highly recommend using this second piece of code rather than the first one! And there you have it! Down below is the final product. Now there's one more step before we can test out our level! We need something called a manifest The manifest is your level description, name, and entry! I will explain entry in a bit, but for now, here's how to make a manifest. This one is actually written in a language other than Lua. I won't explain it too much, I will just show you the code and you can make a manifest. But first, make a new file in your level folder and call it manifest.json. NOT manifest.lua. Like I said, it's a different language! In the manifest you need to put this piece of code: { \"name\": \"LEVEL_NAME\", \"descriptions\": [\"LEVEL DESCRIPTION\"], \"entry_point\": \"level.lua\" } You can look at it and kind of get a sense of what's going on, but I will brief you on it. You put your level name where \"LEVEL_NAME\" is INSIDE the quotation \"\" marks! You can do the same with the level description, inside the quotation marks and brackets [\"\"]! See the \"entry_point\"? That's why we named the main script level.lua. The game enters through that script and runs your level. And that is all you need to know about this new file. Down below is the manifest for my tutorial level. You are done! You can run your level! Ready to take it out for a spin? Good! Remember that .exe I mentioned some time back? Yeah, we need that. Head back to the screen below. You need to run the ppl-utils file. It will open a window, and your computer will warn you about this file. Go ahead and run the file anyway, and you will be able to try out your level! You should get something like below: Your levels are being run! Now you need to go to the website that the screen above is telling you! The website to run your levels is http://localhost:9000/pewpew.html You should get a screen like this: As you can see, the manifest dictated what name my level would show as. My tutorial world is at the top of the page, called \"Tutorial Level\". As it should, as that is what I put in the manifest above. You will need to find your level in the list of levels. And there you go! Just go into your level and give it a whirl!","s":"The start of a level","u":"/ppl-docs/docs/Guides/Lua/intermediate","h":"#the-start-of-a-level","p":144},{"i":161,"t":"The pewpew library contains all the functions for configuring levels and managing entities.","s":"pewpew library","u":"/ppl-docs/docs/APIs/PewPew","h":"","p":160},{"i":164,"t":"ASTEROID BAF INERTIAC MOTHERSHIP MOTHERSHIP_BULLET ROLLING_CUBE ROLLING_SPHERE UFO WARY CROWDER CUSTOMIZABLE_ENTITY SHIP BOMB BAF_BLUE BAF_RED WARY_MISSILE UFO_BULLET PLAYER_BULLET BOMB_EXPLOSION PLAYER_EXPLOSION BONUS FLOATING_MESSAGE POINTONIUM BONUS_IMPLOSION","s":"EntityType","u":"/ppl-docs/docs/APIs/PewPew","h":"#entitytype","p":160},{"i":166,"t":"THREE_CORNERS FOUR_CORNERS FIVE_CORNERS SIX_CORNERS SEVEN_CORNERS","s":"MothershipType","u":"/ppl-docs/docs/APIs/PewPew","h":"#mothershiptype","p":160},{"i":168,"t":"SINGLE TIC_TOC DOUBLE TRIPLE FOUR_DIRECTIONS DOUBLE_SWIPE HEMISPHERE","s":"CannonType","u":"/ppl-docs/docs/APIs/PewPew","h":"#cannontype","p":160},{"i":170,"t":"FREQ_30 FREQ_15 FREQ_10 FREQ_7_5 FREQ_6 FREQ_5 FREQ_3 FREQ_2 FREQ_1","s":"CannonFrequency","u":"/ppl-docs/docs/APIs/PewPew","h":"#cannonfrequency","p":160},{"i":172,"t":"FREEZE REPULSIVE ATOMIZE SMALL_ATOMIZE SMALL_FREEZE","s":"BombType","u":"/ppl-docs/docs/APIs/PewPew","h":"#bombtype","p":160},{"i":174,"t":"REINSTANTIATION SHIELD SPEED WEAPON","s":"BonusType","u":"/ppl-docs/docs/APIs/PewPew","h":"#bonustype","p":160},{"i":176,"t":"BULLET FREEZE_EXPLOSION REPULSIVE_EXPLOSION ATOMIZE_EXPLOSION","s":"WeaponType","u":"/ppl-docs/docs/APIs/PewPew","h":"#weapontype","p":160},{"i":178,"t":"SMALL MEDIUM LARGE VERY_LARGE","s":"AsteroidSize","u":"/ppl-docs/docs/APIs/PewPew","h":"#asteroidsize","p":160},{"i":181,"t":"pewpew.print(str: string) Prints str in the console for debugging. Example: local some_number = 42 pewpew.print(\"the value of some_number is: \" .. some_number)","s":"print()","u":"/ppl-docs/docs/APIs/PewPew","h":"#print","p":160},{"i":183,"t":"pewpew.print_debug_info() Prints debug info: the number of entities created and the amount of memory used by the script. Example: pewpew.print_debug_info()","s":"print_debug_info()","u":"/ppl-docs/docs/APIs/PewPew","h":"#print_debug_info","p":160},{"i":185,"t":"pewpew.set_level_size( width: FixedPoint, height: FixedPoint ) Sets the level's size. Implicetely adds walls to make sure that entities can not go outside of the level's boundaries. width and height are clamped to the range ]0fx, 6000fx]. If this function is not called, the level size is (10fx, 10fx), which is uselessly small for most cases. Example: local width = 300fx local height = 200fx pewpew.set_level_size(width, height)","s":"set_level_size()","u":"/ppl-docs/docs/APIs/PewPew","h":"#set_level_size","p":160},{"i":187,"t":"pewpew.add_wall( start_x: FixedPoint, start_y: FixedPoint, end_x: FixedPoint, end_y: FixedPoint ): int Adds a wall to the level from (start_x,start_y) to (end_x,end_y), and returns its wall ID. A maximum of 200 walls can be added to a level. Example: pewpew.add_wall(100fx, 100fx, 200fx, 200fx)","s":"add_wall()","u":"/ppl-docs/docs/APIs/PewPew","h":"#add_wall","p":160},{"i":189,"t":"pewpew.remove_wall(wall_id: int) Remove the wall with the given wall_id. Example: local wall_id = pewpew.add_wall(100fx, 100fx, 200fx, 200fx) -- Later, when the wall needs to be removed: pewpew.remove_wall(wall_id)","s":"remove_wall()","u":"/ppl-docs/docs/APIs/PewPew","h":"#remove_wall","p":160},{"i":191,"t":"pewpew.add_update_callback(update_callback: function) Adds a callback that will be updated at each game tick. Example: local tick_count = 0 pewpew.add_update_callback(function() pewpew.print(\"this is tick \" .. tick_count) tick_count = tick_count + 1 end)","s":"add_update_callback()","u":"/ppl-docs/docs/APIs/PewPew","h":"#add_update_callback","p":160},{"i":193,"t":"pewpew.get_number_of_players(): int Returns the number of players in the game.","s":"get_number_of_players()","u":"/ppl-docs/docs/APIs/PewPew","h":"#get_number_of_players","p":160},{"i":195,"t":"pewpew.increase_score_of_player( player_index: int, delta: int ) Increases the score of the player at the specified player_index by an amount of delta. player_index must in the range [0, get_number_of_players() - 1]. Note that delta can be negative.","s":"increase_score_of_player()","u":"/ppl-docs/docs/APIs/PewPew","h":"#increase_score_of_player","p":160},{"i":197,"t":"pewpew.increase_score_streak_of_player( player_index: int, delta: int ) Increases the score streak counter of the player at the specified player_index by an amount of delta. This counter is used to determine at which level of score streak the player is at. In turn, the score streak level is used to determine how much pointonium is given. Typically the score streak counter should be increased when an enemy is destroyed with the same score that the enemy provide. player_index must in the range [0, get_number_of_players() - 1]. Note that delta can be negative.","s":"increase_score_streak_of_player()","u":"/ppl-docs/docs/APIs/PewPew","h":"#increase_score_streak_of_player","p":160},{"i":199,"t":"pewpew.get_score_streak_level(player_index: int): int Returns a number between 0 and 3. 0 is the lowest score streak (no pointonium is given), while 3 is the highest (3 pointoniums is usually given)","s":"get_score_streak_level()","u":"/ppl-docs/docs/APIs/PewPew","h":"#get_score_streak_level","p":160},{"i":201,"t":"pewpew.stop_game() Ends the current game.","s":"stop_game()","u":"/ppl-docs/docs/APIs/PewPew","h":"#stop_game","p":160},{"i":203,"t":"pewpew.get_player_inputs(player_index: int): FixedPoint, FixedPoint, FixedPoint, FixedPoint Returns the inputs of the player at the specified index. The return values are in order: the movement joystick's angle (between 0 and 2pi), the movement joystick's distance (between 0 and 1), the shoot joystick's angle (between 0 and 2pi), and the shoot joystick's distance (between 0 and 1). Example: local move_angle, move_distance, shoot_angle, shoot_distance = pewpew.get_player_inputs(0)","s":"get_player_inputs()","u":"/ppl-docs/docs/APIs/PewPew","h":"#get_player_inputs","p":160},{"i":205,"t":"pewpew.get_score_of_player(player_index: int): int Returns the score of the player at the specified player_index. player_index must in the range [0, get_number_of_players() - 1].","s":"get_score_of_player()","u":"/ppl-docs/docs/APIs/PewPew","h":"#get_score_of_player","p":160},{"i":207,"t":"pewpew.configure_player( player_index: int, configuration: table { has_lost: bool, shield: int, camera_x_override: FixedPoint, camera_y_override: FixedPoint, camera_distance: FixedPoint, camera_rotation_x_axis: FixedPoint, move_joystick_color: int, shoot_joystick_color: int } ) Configures the player at the specified player_index. player_index must in the range [0, get_number_of_players() - 1]. A camera_distance less than 0fx makes the camera move away from the ship. camera_rotation_x_axis is in radian and rotates along the X axis. To temporarily override the XY position of the camera, set both camera_x_override and camera_y_override; this will make the camera be interpolated from wherever it was, to that new position. Example: pewpew.configure_player(0, {shield = 3, camera_distance = 50fx, move_joystick_color = 0xffff00ff})","s":"configure_player()","u":"/ppl-docs/docs/APIs/PewPew","h":"#configure_player","p":160},{"i":209,"t":"pewpew.configure_player_hud( player_index: int, configuration: table { top_left_line: string } ) Configures the player's HUD.player_index must in the range [0, get_number_of_players() - 1]. Example: pewpew.configure_player_hud(0, {top_left_line = \"Hello World\"})","s":"configure_player_hud()","u":"/ppl-docs/docs/APIs/PewPew","h":"#configure_player_hud","p":160},{"i":211,"t":"pewpew.get_player_configuration(player_index: int): table { shield: int, has_lost: bool } Returns a map containing the configuration of the player at the specified player_index. Example: local shield = pewpew.get_player_configuration(0).shield","s":"get_player_configuration()","u":"/ppl-docs/docs/APIs/PewPew","h":"#get_player_configuration","p":160},{"i":213,"t":"pewpew.configure_player_ship_weapon( ship_id: EntityId, configuration: table { frequency: int, cannon: int, duration: int } ) Configures the weapon of the ship identified with ship_id using configuration. frequency determines the frequency of the shots. cannon determines the type of cannon. duration determines the number of game ticks during which the weapon will be available. Once the duration expires, the weapon reverts to its permanent configuration. If duration is omitted, the weapon will be permanently set to this configuration. If frequency or cannon is omitted, the ship is configured to not have any weapon. Example: local weapon_config = {frequency = pewpew.CannonFrequency.FREQ_10, cannon = pewpew.CannonType.DOUBLE} local ship_id = player_helpers.new_player_ship(100fx, 200fx, 0) pewpew.configure_player_ship_weapon(ship_id, weapon_config)","s":"configure_player_ship_weapon()","u":"/ppl-docs/docs/APIs/PewPew","h":"#configure_player_ship_weapon","p":160},{"i":215,"t":"pewpew.add_damage_to_player_ship( ship_id: EntityId, damage: int ) Reduces the amount of shield of the player that owns the ship by damage points. If the player receives damage while having 0 shields left, the player loses.","s":"add_damage_to_player_ship()","u":"/ppl-docs/docs/APIs/PewPew","h":"#add_damage_to_player_ship","p":160},{"i":217,"t":"pewpew.add_arrow_to_player_ship( ship_id: EntityId, target_id: EntityId, color: int ): int Adds an arrow to the ship identified with ship_id pointing towards the entity identified with entity_id, and returns the identifier of the arrow. color specifies the arrow's color. The arrow is automatically removed when the target entity is destroyed.","s":"add_arrow_to_player_ship()","u":"/ppl-docs/docs/APIs/PewPew","h":"#add_arrow_to_player_ship","p":160},{"i":219,"t":"pewpew.remove_arrow_from_player_ship( ship_id: EntityId, arrow_id: int ) Removes the arrow identified by arrow_id from the ship identified by ship_id.","s":"remove_arrow_from_player_ship()","u":"/ppl-docs/docs/APIs/PewPew","h":"#remove_arrow_from_player_ship","p":160},{"i":221,"t":"pewpew.make_player_ship_transparent( ship_id: EntityId, transparency_duration: int ) Makes the player ship transparent for transparency_duration game ticks.","s":"make_player_ship_transparent()","u":"/ppl-docs/docs/APIs/PewPew","h":"#make_player_ship_transparent","p":160},{"i":223,"t":"pewpew.set_player_ship_speed( ship_id: EntityId, factor: FixedPoint, offset: FixedPoint, duration: int ): FixedPoint Sets and returns the effective speed of the specified player ship as a function of the base speed of the ship. By default, a player ship moves according to its base speed, which is 10 distance units per tick (in the future, different ships may have different base speeds). Assuming the base speed of the ship is S, the new effective speed will be (factor*S)+offset. duration is the number of ticks during which the effective speed will be applied. Afterwards, the ship's speed reverts to its base speed. If duration is negative, the effective speed never reverts to the base speed.","s":"set_player_ship_speed()","u":"/ppl-docs/docs/APIs/PewPew","h":"#set_player_ship_speed","p":160},{"i":225,"t":"pewpew.get_all_entities(): List Returns the list of the entityIDs of all the entities currently in the level. This includes the various bullets and all the custom entities. Example: local entities = pewpew.get_all_entities() pewpew.print(\"There are \" .. #entities .. \" entities in the level\")","s":"get_all_entities()","u":"/ppl-docs/docs/APIs/PewPew","h":"#get_all_entities","p":160},{"i":227,"t":"pewpew.get_entities_colliding_with_disk( center_x: FixedPoint, center_y: FixedPoint, radius: FixedPoint ): List Returns the list of collidable entities (which includes all enemies) that overlap with the given disk. Example: local entities = pewpew.get_entities_colliding_with_disk(100fx, 100fx, 30fx)","s":"get_entities_colliding_with_disk()","u":"/ppl-docs/docs/APIs/PewPew","h":"#get_entities_colliding_with_disk","p":160},{"i":229,"t":"pewpew.get_entity_count(type: int): int Returns the number of entities of type type that are alive. Example: local number_of_bafs = pewpew.get_entity_count(pewpew.EntityType.BAF) local number_of_asteroids = pewpew.get_entity_count(pewpew.EntityType.ASTEROID)","s":"get_entity_count()","u":"/ppl-docs/docs/APIs/PewPew","h":"#get_entity_count","p":160},{"i":231,"t":"pewpew.get_entity_type(entity_id: EntityId): int Returns the type of the given entity. Example: local type = pewpew.get_entity_type(id) if type == pewpew.EntityType.BAF then pewpew.print(\"the entity is a BAF\") end","s":"get_entity_type()","u":"/ppl-docs/docs/APIs/PewPew","h":"#get_entity_type","p":160},{"i":233,"t":"pewpew.play_ambient_sound( sound_path: string, index: int ) Plays the sound described at sound_path at the index index. Example: pewpew.play_ambient_sound(\"/dynamic/my_custom_sound.lua\", 0)","s":"play_ambient_sound()","u":"/ppl-docs/docs/APIs/PewPew","h":"#play_ambient_sound","p":160},{"i":235,"t":"pewpew.play_sound( sound_path: string, index: int, x: FixedPoint, y: FixedPoint ) Plays the sound described at sound_path at the in-game location of x,y. Example: pewpew.play_sound(\"/dynamic/my_custom_sound.lua\", 0, 100fx, 100fx)","s":"play_sound()","u":"/ppl-docs/docs/APIs/PewPew","h":"#play_sound","p":160},{"i":237,"t":"pewpew.create_explosion( x: FixedPoint, y: FixedPoint, color: int, scale: FixedPoint, particle_count: int ) Creates an explosion of particles at the location x,y. color specifies the color of the explosion. scale describes how large the explosion will be. It should be in the range ]0, 10], with 1 being an average explosion. particle_count specifies the number of particles that make up the explosion. It must be in the range [1, 100]. Example: pewpew.create_explosion(200fx, 100fx, 0xffffffff, 1fx, 20) -- medium explosion pewpew.create_explosion(300fx, 100fx, 0xffffffff, 3fx, 50) -- large red explosion","s":"create_explosion()","u":"/ppl-docs/docs/APIs/PewPew","h":"#create_explosion","p":160},{"i":239,"t":"pewpew.new_asteroid( x: FixedPoint, y: FixedPoint ): EntityId Creates a new Asteroid at the location x,y and returns its entityId.","s":"new_asteroid()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_asteroid","p":160},{"i":241,"t":"pewpew.new_asteroid_with_size( x: FixedPoint, y: FixedPoint, size: int ): EntityId Creates a new Asteroid at the location x,y with an AsteroidSize given by size and returns its entityId.","s":"new_asteroid_with_size()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_asteroid_with_size","p":160},{"i":243,"t":"pewpew.new_baf( x: FixedPoint, y: FixedPoint, angle: FixedPoint, speed: FixedPoint, lifetime: int ): EntityId Creates a new BAF at the location x,y, and returns its entityId. angle specifies the angle at which the BAF will move. speed specifies the maximum speed it will reach. lifetime indicates the number of game ticks after which the BAF is destroyed the next time it hits a wall. Specify a negative lifetime to create a BAF that lives forever.","s":"new_baf()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_baf","p":160},{"i":245,"t":"pewpew.new_baf_red( x: FixedPoint, y: FixedPoint, angle: FixedPoint, speed: FixedPoint, lifetime: int ): EntityId Creates a new red BAF at the location x,y, and returns its entityId. A red BAF has more health points than a regular BAF. angle specifies the angle at which the BAF will move. speed specifies the maximum speed it will reach. lifetime indicates the number of game ticks after which the BAF is destroyed the next time it hits a wall. Specify a negative lifetime to create a BAF that lives forever.","s":"new_baf_red()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_baf_red","p":160},{"i":247,"t":"pewpew.new_baf_blue( x: FixedPoint, y: FixedPoint, angle: FixedPoint, speed: FixedPoint, lifetime: int ): EntityId Creates a new blue BAF at the location x,y, and returns its entityId. A blue BAF bounces on walls with a slightly randomized angle. angle specifies the angle at which the BAF will move. speed specifies the maximum speed it will reach. lifetime indicates the number of game ticks after which the BAF is destroyed the next time it hits a wall. Specify a negative lifetime to create a BAF that lives forever.","s":"new_baf_blue()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_baf_blue","p":160},{"i":249,"t":"pewpew.new_bomb( x: FixedPoint, y: FixedPoint, type: int ): EntityId Creates a new Bomb at the location x,y, and returns its entityId. Example: pewpew.new_bomb(10fx, 10fx, pewpew.BombType.SMALL_ATOMIZE)","s":"new_bomb()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_bomb","p":160},{"i":251,"t":"pewpew.new_bonus( x: FixedPoint, y: FixedPoint, type: int, config: table { box_duration: int, cannon: int, frequency: int, weapon_duration: int, number_of_shields: int, speed_factor: FixedPoint, speed_offset: FixedPoint, speed_duration: int, taken_callback: function } ): EntityId Creates a new Bonus at the location x,y of the type type, and returns its entityId. For shield bonuses, the option number_of_shields determines how many shields are given out. For weapon bonuses, the options cannon, frequency, weapon_duration have the same meaning as in pewpew.configure_player_ship_weapon. For speed bonuses, the options speed_factor, speed_offset,and speed_duration have the same meaning as in set_player_speed. taken_callback is called when the bonus is taken, and is mandatory for the reinstantiation bonus. The callback receives as arguments the entity id of the bonus, the player id, and the ship's entity id. The default box duration is 400 ticks. Example: pewpew.new_bonus(10fx, 10fx, pewpew.BonusType.WEAPON, {cannon = pewpew.CannonType.TIC_TOC, frequency = pewpew.CannonFrequency.FREQ_5, weapon_duration = 100}) pewpew.new_bonus(10fx, 10fx, pewpew.BonusType.SHIELD, {number_of_shields = 3})","s":"new_bonus()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_bonus","p":160},{"i":253,"t":"pewpew.new_crowder( x: FixedPoint, y: FixedPoint ): EntityId Creates a new Crowder at the location x,y, and returns its entityId.","s":"new_crowder()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_crowder","p":160},{"i":255,"t":"pewpew.new_floating_message( x: FixedPoint, y: FixedPoint, str: string, config: table { scale: FixedPoint, ticks_before_fade: int, is_optional: bool } ): EntityId Creates a new floating message at the location x,y, with str as the message. The scale is a number that determines how large the message will be. 1 is the default scale. ticks_before_fade determines how many ticks occur before the message starts to fade out. is_optional can be used to tell the game if the message can be hidden depending on the user's UI settings. If not specified, scale is 1, ticks_before_fade is 30 and is_optional is false. Returns the floating message's entityId. Example: pewpew.new_floating_message(10fx, 10fx, \"hello\", {scale = 2fx, ticks_before_fade = 60, is_optional = true})","s":"new_floating_message()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_floating_message","p":160},{"i":257,"t":"pewpew.new_customizable_entity( x: FixedPoint, y: FixedPoint ): EntityId Creates a new customizable entity at the location x,y, and returns its entityId.","s":"new_customizable_entity()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_customizable_entity","p":160},{"i":259,"t":"pewpew.new_inertiac( x: FixedPoint, y: FixedPoint, acceleration: FixedPoint, angle: FixedPoint ): EntityId Creates a new Inertiac at the location x,y, and returns its entityId. The inertiac will accelerate according to acceleration. It spawns with a random velocity in a direction specified by angle.","s":"new_inertiac()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_inertiac","p":160},{"i":261,"t":"pewpew.new_mothership( x: FixedPoint, y: FixedPoint, type: int, angle: FixedPoint ): EntityId Creates a new Mothership at the location x,y, and returns its entityId. Example: pewpew.new_mothership(50fx, 50fx, pewpew.MothershipType.THREE_CORNERS, fmath.tau() / 4fx)","s":"new_mothership()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_mothership","p":160},{"i":263,"t":"pewpew.new_pointonium( x: FixedPoint, y: FixedPoint, value: int ): EntityId Creates a new Pointonium at the location x,y. Value must be 64, 128, or 256.","s":"new_pointonium()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_pointonium","p":160},{"i":265,"t":"pewpew.new_player_ship( x: FixedPoint, y: FixedPoint, player_index: int ): EntityId Creates a new Player Ship at the location x,y for the player identified by player_index, and returns its entityId.","s":"new_player_ship()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_player_ship","p":160},{"i":267,"t":"pewpew.new_player_bullet( x: FixedPoint, y: FixedPoint, angle: FixedPoint, player_index: int ): EntityId Creates a new bullet at the location x,y with the angle angle belonging to the player at the index player_index. Returns the entityId of the bullet.","s":"new_player_bullet()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_player_bullet","p":160},{"i":269,"t":"pewpew.new_rolling_cube( x: FixedPoint, y: FixedPoint ): EntityId Creates a new Rolling Cube at the location x,y, and returns its entityId.","s":"new_rolling_cube()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_rolling_cube","p":160},{"i":271,"t":"pewpew.new_rolling_sphere( x: FixedPoint, y: FixedPoint, angle: FixedPoint, speed: FixedPoint ): EntityId Creates a new Rolling Sphere at the location x,y, and returns its entityId.","s":"new_rolling_sphere()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_rolling_sphere","p":160},{"i":273,"t":"pewpew.new_wary( x: FixedPoint, y: FixedPoint ): EntityId Creates a new Wary at the location x,y.","s":"new_wary()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_wary","p":160},{"i":275,"t":"pewpew.new_ufo( x: FixedPoint, y: FixedPoint, dx: FixedPoint ): EntityId Creates a new UFO at the location x,y moving horizontally at the speed of dx, and returns its entityId.","s":"new_ufo()","u":"/ppl-docs/docs/APIs/PewPew","h":"#new_ufo","p":160},{"i":277,"t":"pewpew.rolling_cube_set_enable_collisions_with_walls( entity_id: EntityId, collide_with_walls: bool ) Sets whether the rolling cube identified with id collides with walls. By default it does not. Example: local x,y = pewpew.rolling_cube_set_enable_collisions_with_walls(id, true)","s":"rolling_cube_set_enable_collisions_with_walls()","u":"/ppl-docs/docs/APIs/PewPew","h":"#rolling_cube_set_enable_collisions_with_walls","p":160},{"i":279,"t":"pewpew.ufo_set_enable_collisions_with_walls( entity_id: EntityId, collide_with_walls: bool ) Sets whether the ufo identified with id collides with walls. By default it does not. Example: local x,y = pewpew.ufo_set_enable_collisions_with_walls(id, true)","s":"ufo_set_enable_collisions_with_walls()","u":"/ppl-docs/docs/APIs/PewPew","h":"#ufo_set_enable_collisions_with_walls","p":160},{"i":281,"t":"pewpew.entity_get_position(entity_id: EntityId): FixedPoint, FixedPoint Returns the position of the entity identified by id. Example: local x,y = pewpew.entity_get_position(entity_id)","s":"entity_get_position()","u":"/ppl-docs/docs/APIs/PewPew","h":"#entity_get_position","p":160},{"i":283,"t":"pewpew.entity_get_is_alive(entity_id: EntityId): bool Returns whether the entity identified by id is alive or not.","s":"entity_get_is_alive()","u":"/ppl-docs/docs/APIs/PewPew","h":"#entity_get_is_alive","p":160},{"i":285,"t":"pewpew.entity_get_is_started_to_be_destroyed(entity_id: EntityId): bool Returns whether the entity identified by id is in the process of being destroyed. Returns false if the entity does not exist.","s":"entity_get_is_started_to_be_destroyed()","u":"/ppl-docs/docs/APIs/PewPew","h":"#entity_get_is_started_to_be_destroyed","p":160},{"i":287,"t":"pewpew.entity_set_position( entity_id: EntityId, x: FixedPoint, y: FixedPoint ) Sets the position of the entity identified by id to x,y","s":"entity_set_position()","u":"/ppl-docs/docs/APIs/PewPew","h":"#entity_set_position","p":160},{"i":289,"t":"pewpew.entity_set_radius( entity_id: EntityId, radius: FixedPoint ) Sets the radius of the entity identified by id. To give you a sense of scale, motherships have a radius of 28fx.","s":"entity_set_radius()","u":"/ppl-docs/docs/APIs/PewPew","h":"#entity_set_radius","p":160},{"i":291,"t":"pewpew.entity_set_update_callback( entity_id: EntityId, callback: function ) Sets a callback that will be called at every tick as long as the entity identified by id is alive. Remove the callback by passing a nil callback. The callbacks gets called with the entity ID. Example: local function my_update_callback(entity_id) local x,y = pewpew.entity_get_position(entity_id) pewpew.entity_set_position(entity_id, x + 2fx, y) -- move the entity to the right end pewpew.entity_set_update_callback(entity_id, my_update_callback)","s":"entity_set_update_callback()","u":"/ppl-docs/docs/APIs/PewPew","h":"#entity_set_update_callback","p":160},{"i":293,"t":"pewpew.entity_destroy(entity_id: EntityId) Makes the entity identified by id immediately disappear forever.","s":"entity_destroy()","u":"/ppl-docs/docs/APIs/PewPew","h":"#entity_destroy","p":160},{"i":295,"t":"pewpew.entity_react_to_weapon( entity_id: EntityId, weapon: table { type: int, x: FixedPoint, y: FixedPoint, player_index: int } ): bool Makes the entity identified by id react to the weapon described in weapon_description. Returns whether the entity reacted to the weapon. The returned value is typically used to decide whether the weapon should continue to exist or not. In the case of an explosion, x and y should store the origin of the explosion. In the case of a bullet, x and y should store the vector of the bullet. The player identified by player_index will be assigned points. If player_index is invalid, no player will be assigned points.","s":"entity_react_to_weapon()","u":"/ppl-docs/docs/APIs/PewPew","h":"#entity_react_to_weapon","p":160},{"i":297,"t":"pewpew.customizable_entity_set_position_interpolation( entity_id: EntityId, enable: bool ) Sets whether the position of the mesh wil be interpolated when rendering. In general, this should be set to true if the entity will be moving smoothly.","s":"customizable_entity_set_position_interpolation()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_set_position_interpolation","p":160},{"i":299,"t":"pewpew.customizable_entity_set_mesh( entity_id: EntityId, file_path: string, index: int ) Sets the mesh of the customizable entity identified by id to the mesh described in the file file_path at the index index. index starts at 0. If file_path is an empty string, the mesh is removed. Example: local id = pewpew.new_customizable_entity(0fx, 0fx) pewpew.customizable_entity_set_mesh(id, \"/dynamic/graphics.lua\", 0)","s":"customizable_entity_set_mesh()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_set_mesh","p":160},{"i":301,"t":"pewpew.customizable_entity_set_flipping_meshes( entity_id: EntityId, file_path: string, index_0: int, index_1: int ) Similar to customizable_entity_set_mesh, but sets two meshes that will be used in alternation. By specifying 2 separate meshes, 60 fps animations can be achieved. Example: local id = pewpew.new_customizable_entity(0fx, 0fx) pewpew.customizable_entity_set_flipping_meshes(id, \"/dynamic/graphics.lua\", 0, 1)","s":"customizable_entity_set_flipping_meshes()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_set_flipping_meshes","p":160},{"i":303,"t":"pewpew.customizable_entity_set_mesh_color( entity_id: EntityId, color: int ) Sets the color multiplier for the mesh of the customizable entity identified by id.","s":"customizable_entity_set_mesh_color()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_set_mesh_color","p":160},{"i":305,"t":"pewpew.customizable_entity_set_string( entity_id: EntityId, text: string ) Sets the string to be displayed as part of the mesh of the customizable entity identified by id.","s":"customizable_entity_set_string()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_set_string","p":160},{"i":307,"t":"pewpew.customizable_entity_set_mesh_xyz( entity_id: EntityId, x: FixedPoint, y: FixedPoint, z: FixedPoint ) Sets the position of the mesh to x,y,z, relative to the center ofthe customizable entity identified by id","s":"customizable_entity_set_mesh_xyz()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_set_mesh_xyz","p":160},{"i":309,"t":"pewpew.customizable_entity_set_mesh_z( entity_id: EntityId, z: FixedPoint ) Sets the height of the mesh of the customizable entity identified by id. A z greater to 0 makes the mesh be closer, while a z less than 0 makes the mesh be further away.","s":"customizable_entity_set_mesh_z()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_set_mesh_z","p":160},{"i":311,"t":"pewpew.customizable_entity_set_mesh_scale( entity_id: EntityId, scale: FixedPoint ) Sets the scale of the mesh of the customizable entity identified by id. A scale less than 1 makes the mesh appear smaller, while a scale greater than 1 makes the mesh appear larger.","s":"customizable_entity_set_mesh_scale()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_set_mesh_scale","p":160},{"i":313,"t":"pewpew.customizable_entity_set_mesh_xyz_scale( entity_id: EntityId, x_scale: FixedPoint, y_scale: FixedPoint, z_scale: FixedPoint ) Sets the scale of the mesh of the customizable entity identified by id along the x,y,z axis. A scale less than 1 makes the mesh appear smaller, while a scale greater than 1 makes the mesh appear larger.","s":"customizable_entity_set_mesh_xyz_scale()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_set_mesh_xyz_scale","p":160},{"i":315,"t":"pewpew.customizable_entity_set_mesh_angle( entity_id: EntityId, angle: FixedPoint, x_axis: FixedPoint, y_axis: FixedPoint, z_axis: FixedPoint ) Sets the rotation angle of the mesh of the customizable entity identified by id. The rotation is applied along the axis defined by x_axis,y_axis,z_axis. Example: -- Rotate the entity by 45 degrees along the z_axis pewpew.customizable_entity_set_mesh_angle(entity_id, fmath.tau() / 8fx, 0fx, 0fx, 1fx)","s":"customizable_entity_set_mesh_angle()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_set_mesh_angle","p":160},{"i":317,"t":"pewpew.customizable_entity_skip_mesh_attributes_interpolation(entity_id: EntityId) Skips the interpolation of the mesh's attributes (x, y, z, scale_x, scale_y, scale_z, rotation).","s":"customizable_entity_skip_mesh_attributes_interpolation()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_skip_mesh_attributes_interpolation","p":160},{"i":319,"t":"pewpew.customizable_entity_configure_music_response( entity_id: EntityId, config: table { color_start: int, color_end: int, scale_x_start: FixedPoint, scale_x_end: FixedPoint, scale_y_start: FixedPoint, scale_y_end: FixedPoint, scale_z_start: FixedPoint, scale_z_end: FixedPoint } ) Configures the way the entity is going to respond to the music. Example: -- Makes the entity larger pewpew.customizable_entity_configure_music_response(entity_id, {scale_x_start = 1fx, scale_x_end = 2fx})","s":"customizable_entity_configure_music_response()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_configure_music_response","p":160},{"i":321,"t":"pewpew.customizable_entity_add_rotation_to_mesh( entity_id: EntityId, angle: FixedPoint, x_axis: FixedPoint, y_axis: FixedPoint, z_axis: FixedPoint ) Adds a rotation to the mesh of the customizable entity identified by id. The rotation is applied along the axis defined by x_axis,y_axis,z_axis. Example: -- Rotate the entity by 45 degrees along the z_axis pewpew.customizable_entity_add_rotation_to_mesh(entity_id, fmath.tau() / 8fx, 0fx, 0fx, 1fx)","s":"customizable_entity_add_rotation_to_mesh()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_add_rotation_to_mesh","p":160},{"i":323,"t":"pewpew.customizable_entity_set_visibility_radius( entity_id: EntityId, radius: FixedPoint ) Sets the radius defining the visibility of the entity. This allows the game to know when an entity is actually visible, which in turns allows to massively optimize the rendering. Use the smallest value possible. If not set, the rendering radius is an unspecified large number that effectively makes the entity always be rendered, even if not visible.","s":"customizable_entity_set_visibility_radius()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_set_visibility_radius","p":160},{"i":325,"t":"pewpew.customizable_entity_configure_wall_collision( entity_id: EntityId, collide_with_walls: bool, collision_callback: function ) collide_with_walls configures whether the entity should stop when colliding with walls. If collision_callback is not nil, it is called anytime a collision is detected. The callback gets called with the entity id of the entity withthe callback, and with the normal to the wall. Example: function my_wall_collision_callback(entity_id, wall_normal_x, wall_normal_y) pewpew.print(\"A wall collision happened with entity \" .. entity_id) end local id = pewpew.new_customizable_entity(100fx, 100fx) pewpew.customizable_entity_configure_wall_collision(id, my_wall_collision_callback)","s":"customizable_entity_configure_wall_collision()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_configure_wall_collision","p":160},{"i":327,"t":"pewpew.customizable_entity_set_player_collision_callback( entity_id: EntityId, collision_callback: function ) Sets the callback for when the customizable entity identified by id collides with a player's ship. The callback gets called with the entity id of the entity with the callback, and the player_index and ship_id that were involved in the collision. Don't forget to set a radius on the customizable entity, otherwise no collisions will be detected. Example: function my_collision_callback(entity_id, player_index, ship_entity_id) pewpew.print(\"The entity: \" .. entity_id) pewpew.print(\"Collided with the ship: \" .. ship_entity_id) pewpew.print(\"That belongs to the player: \" .. player_index) end local id = pewpew.new_customizable_entity(100fx, 100fx) pewpew.customizable_entity_set_player_collision_callback(id, my_collision_callback)","s":"customizable_entity_set_player_collision_callback()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_set_player_collision_callback","p":160},{"i":329,"t":"pewpew.customizable_entity_set_weapon_collision_callback( entity_id: EntityId, weapon_collision_callback: function ) Sets the callback for when the customizable entity identified by id collides with a player's weapon. The callback gets called with the entity_id of the entity on which the callback is set, the player_index of the player that triggered the weapon, and the type of the weapon. The callback must return a boolean saying whether the entity reacts to the weapon. In the case of a bullet, this boolean determines whether the bullet should be destroyed. Example: local id = pewpew.new_customizable_entity(100fx, 100fx) pewpew.customizable_entity_set_weapon_collision_callback(id, function(entity_id, player_index, weapon_type) pewpew.print(\"Collided with weapon from player: \" .. player_index) if weapon_type == pewpew.WeaponType.BULLET then pewpew.print(\"Collided with bullet!\") end return true end)","s":"customizable_entity_set_weapon_collision_callback()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_set_weapon_collision_callback","p":160},{"i":331,"t":"pewpew.customizable_entity_start_spawning( entity_id: EntityId, spawning_duration: int ) Makes the customizable entity identified by id spawn for a duration of spawning_duration game ticks.","s":"customizable_entity_start_spawning()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_start_spawning","p":160},{"i":333,"t":"pewpew.customizable_entity_start_exploding( entity_id: EntityId, explosion_duration: int ) Makes the customizable entity identified by id explode for a duration of explosion_duration game ticks. After the explosion, the entity is destroyed. explosion_duration must be less than 255. Any scale applied to the entity is also applied to the explosion.","s":"customizable_entity_start_exploding()","u":"/ppl-docs/docs/APIs/PewPew","h":"#customizable_entity_start_exploding","p":160}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/2",[0,5.15,1,3.122,2,5.15,3,5.15,4,5.15,5,2.821,6,5.15,7,3.943,8,1.738,9,3.943,10,4.966,11,3.122,12,5.15,13,4.219,14,1.738,15,2.821,16,4.589,17,5.15,18,4.219,19,5.15,20,3.013,21,2.913,22,4.589,23,5.15,24,5.15,25,4.589,26,4.219,27,1.878,28,4.589,29,2.082,30,5.15,31,5.15]],["t/5",[32,5.662,33,3.259,34,2.101,35,5.135,36,2.549,37,4.412,38,1.369,39,2.329,40,3.96,41,4.721,42,7.394,43,6.058,44,4.483,45,3.055,46,4.659,47,1.774,48,5.135]],["t/8",[38,1.984,40,4.821,49,7.015,50,1.845,51,5.071,52,3.031,53,5.071]],["t/10",[38,2.093,50,1.612,52,2.648,54,6.127,55,6.883,56,6.432,57,0.699,58,4.211,59,3.356,60,4.024,61,4.211]],["t/12",[40,4.32,50,1.653,55,6.963,56,6.507,57,0.717,59,3.443,60,4.128,61,4.32,62,6.286,63,2.274]],["t/14",[38,1.934,50,1.768,60,4.415,61,4.62,64,6.723,65,5.508,66,6.723,67,2.506,68,2.451]],["t/16",[38,1.856,50,1.653,52,2.716,57,0.717,61,4.32,63,2.09,69,6.286,70,6.286,71,7.812,72,4.813,73,4.813,74,6.286,75,6.286]],["t/18",[38,1.691,50,1.872,52,3.075,63,1.904,76,7.118,77,5.831,78,4.674]],["t/20",[38,2.019,50,1.9,52,3.121,79,7.224,80,7.224]],["t/22",[38,1.934,50,1.768,52,3.517,63,1.799,73,5.147,77,5.508,78,5.346,81,6.723]],["t/24",[38,2.093,50,1.793,82,6.817,83,6.817,84,6.817,85,4.12,86,6.075]],["t/26",[38,1.996,50,2.022,52,3.322,57,0.699,59,3.356,67,1.886,68,2.234,87,6.127,88,2.029,89,6.127,90,6.127,91,5.46,92,6.127,93,2.844]],["t/28",[38,1.717,50,1.9,57,0.824,93,3.353,94,5.531,95,6.437]],["t/30",[8,1.9,29,2.275,32,4.31,43,5.967,44,5.361,47,1.733,96,5.629,97,5.629,98,2.432,99,4.31,100,2.432,101,2.825,102,2.679,103,2.094,104,3.413,105,4.31,106,5.016,107,2.613,108,5.016,109,3.868]],["t/32",[10,3.977,36,2.433,44,4.35,98,2.377,101,2.761,110,4.212,111,2.839,112,4.902,113,4.902,114,5.501,115,4.902,116,4.902,117,5.501,118,5.501,119,5.501,120,5.501,121,5.501,122,5.501,123,5.501,124,5.501,125,5.501,126,4.902,127,5.501,128,4.902,129,4.507,130,4.212]],["t/34",[5,3.399,10,4.486,36,2.744,44,4.698,98,2.681,102,2.954,110,4.752,111,3.203,126,5.53,128,5.53,129,5.084,130,4.752,131,6.206,132,6.206,133,3.91,134,6.206]],["t/36",[8,1.247,10,2.672,20,2.162,36,2.407,39,1.494,43,4.459,44,3.916,47,1.138,55,3.028,56,2.83,58,3.74,98,2.791,99,4.167,103,1.375,104,2.241,105,2.83,110,2.83,111,1.908,129,3.028,130,2.83,135,1.202,136,3.293,137,3.028,138,2.83,139,1.715,140,3.696,141,3.696,142,3.696,143,3.696,144,3.696,145,3.696,146,3.696,147,3.696,148,3.696,149,3.696,150,3.696,151,3.696,152,3.696,153,3.696,154,3.696,155,3.696,156,3.696,157,3.696,158,3.696,159,1.908,160,3.293,161,3.696,162,3.696,163,3.696,164,3.696,165,3.696,166,2.241,167,3.696,168,5.442,169,2.54,170,5.442,171,1.715,172,3.696,173,3.293,174,3.293]],["t/39",[39,1.938,40,3.294,45,2.704,47,1.475,52,2.071,72,5.011,175,3.828,176,3.294,177,3.465,178,3.02,179,4.894,180,4.498,181,3.641,182,3.294,183,3.465,184,4.298,185,1.721,186,3.927,187,4.271,188,4.271,189,3.67,190,4.271,191,3.927,192,4.271,193,4.271,194,4.793,195,3.67,196,4.793,197,4.793,198,4.793]],["t/41",[10,1.591,15,1.987,16,1.961,29,0.89,38,1.411,39,2.17,40,3.181,45,0.909,47,1.828,52,3.051,57,0.993,59,1.206,68,0.803,73,2.778,77,1.803,78,3.525,85,1.105,98,0.951,111,1.872,116,1.961,139,1.022,159,1.872,160,1.961,174,1.961,175,3.952,178,1.387,187,1.961,189,3.544,193,1.961,199,1.803,200,1.961,201,2.201,202,1.685,203,1.961,204,1.961,205,1.803,206,1.961,207,1.803,208,2.201,209,1.685,210,1.591,211,1.961,212,2.201,213,1.335,214,1.961,215,2.201,216,2.642,217,2.122,218,2.201,219,1.961,220,2.201,221,2.201,222,2.201,223,1.961,224,2.201,225,2.201,226,3.233,227,1.803,228,4.628,229,3.628,230,1.772,231,2.201,232,2.201,233,1.961,234,2.201,235,1.961,236,1.961,237,1.685,238,2.201,239,2.201,240,1.513,241,1.436,242,2.201,243,2.201,244,2.201,245,3.628,246,3.628,247,2.201,248,2.201,249,2.201,250,1.961,251,1.446,252,2.201,253,1.961,254,1.961,255,1.685,256,1.591]],["t/43",[40,4.752,45,2.856,179,4.541,257,2.572,258,1.948,259,1.537,260,6.161,261,6.915,262,6.915]],["t/45",[47,1.935,101,3.155,107,2.918,112,5.602,166,3.811,173,5.602,175,3.677,251,4.128,263,5.15,264,5.15,265,4.544,266,4.544,267,5.602,268,6.286,269,5.15,270,4.813]],["t/47",[14,1.9,39,2.275,45,2.325,46,4.588,47,2.242,98,2.432,103,2.094,104,3.413,138,6.182,139,2.613,175,3.293,213,3.413,260,5.016,271,3.868,272,5.629,273,4.612,274,5.016,275,4.612,276,4.612,277,5.629,278,5.629]],["t/49",[8,2.528,57,0.917,107,2.247,178,3.05,185,1.273,263,3.966,269,3.966,270,3.707,279,5.399,280,3.966,281,4.841,282,3.966,283,4.529,284,5.045,285,4.314,286,4.763,287,4.841,288,3.05,289,4.314,290,4.841,291,3.707,292,3.05,293,3.966,294,2.832,295,4.314,296,4.314,297,4.314,298,4.841,299,4.314,300,4.841]],["t/51",[1,2.33,8,2.604,33,3.736,56,2.942,68,1.401,101,3.315,113,3.424,139,1.784,178,2.421,182,2.641,202,2.942,263,3.148,267,3.424,270,2.942,283,3.848,284,4.287,285,3.424,286,4.048,289,3.424,291,4.287,292,2.421,293,4.587,295,3.424,296,3.424,297,3.424,299,3.424,301,2.641,302,3.843,303,2.33,304,2.778,305,2.248,306,3.148,307,3.843,308,2.778,309,3.843,310,2.641,311,3.424,312,3.424,313,3.148,314,1.784,315,2.248,316,2.641,317,3.424,318,1.587,319,3.843,320,5.599,321,2.778,322,2.778,323,3.843,324,2.778,325,2.524]],["t/53",[29,1.378,46,2.148,47,1.578,57,0.939,65,2.794,91,3.038,100,1.473,102,1.623,104,4.152,107,1.583,111,1.76,184,4.497,185,1.62,213,2.067,321,2.465,326,2.343,327,4.199,328,3.41,329,5.125,330,3.41,331,5.125,332,4.199,333,1.995,334,3.41,335,3.41,336,3.41,337,3.41,338,3.41,339,3.41,340,6.848,341,3.41,342,3.41,343,3.41,344,3.41,345,3.41,346,3.41,347,3.41,348,3.41,349,3.41,350,3.41,351,3.41,352,3.038,353,3.41,354,3.41,355,3.41,356,3.41,357,3.41,358,3.41,359,3.41,360,5.125,361,2.794,362,2.794,363,2.794,364,3.924,365,3.41,366,1.928]],["t/55",[8,2.149,14,2.149,15,3.489,103,2.369,178,4.013,367,4.183,368,5.218,369,5.675,370,4.013,371,4.377,372,5.675,373,5.675,374,6.369,375,4.877,376,6.369]],["t/57",[8,1.878,14,2.44,21,3.147,29,2.249,53,4.022,98,2.404,100,2.404,171,2.583,367,5.273,377,4.022,378,3.048,379,5.564,380,3.506,381,4.26,382,4.958,383,4.958,384,4.559,385,5.564,386,4.26,387,4.958,388,4.26,389,4.559,390,3.824]],["t/59",[14,1.184,15,1.922,29,1.418,33,1.984,46,2.211,57,1.023,65,2.875,85,1.761,98,1.516,100,1.516,102,2.492,103,3.004,107,1.628,135,1.702,139,2.43,171,2.43,180,3.598,185,0.923,205,2.875,213,2.127,288,2.211,332,2.875,333,2.052,364,2.686,391,3.509,392,2.411,393,3.126,394,2.211,395,3.509,396,1.922,397,2.211,398,2.411,399,3.509,400,3.598,401,5.236,402,5.236,403,3.509,404,5.236,405,3.126,406,4.666,407,5.236,408,4.666,409,4.009,410,3.509,411,2.536,412,3.509]],["t/61",[33,3.65,39,3.476,72,4.942,138,4.942,139,2.995,321,4.665,394,4.066,400,5.91,413,5.751,414,6.454]],["t/63",[1,2.743,33,2.559,57,0.717,68,1.65,93,2.1,102,2.154,184,2.971,265,3.271,321,3.271,333,2.647,364,3.464,394,3.963,398,3.11,400,4.323,409,6.914,415,5.153,416,6.29,417,3.11,418,3.464,419,2.404,420,4.032,421,3.707,422,2.478,423,3.11,424,4.525,425,4.525,426,4.525,427,4.547,428,3.464,429,3.963,430,4.525]],["t/65",[33,3.831,52,2.179,103,1.876,176,3.466,180,5.863,188,4.493,189,3.861,190,4.493,192,4.493,195,5.857,308,3.645,321,4.897,400,4.655,408,4.493,417,3.466,431,4.132,432,5.043,433,3.645,434,6.036,435,5.043,436,5.043,437,3.466,438,4.132,439,5.043,440,5.043]],["t/67",[46,4.177,98,2.865,103,2.466,185,1.744,333,3.879,366,3.75,429,4.177,441,6.631,442,6.631,443,6.631,444,6.631,445,6.631]],["t/69",[11,3.669,15,3.314,47,1.863,98,3.296,185,1.591,256,4.374,366,3.422,367,3.974,368,4.957,446,6.051,447,4.374,448,6.051,449,6.051,450,3.669,451,3.669,452,5.392,453,6.051,454,6.051]],["t/71",[35,4.357,39,1.977,57,1.015,93,2.27,101,3.33,159,2.524,230,3.679,455,4.006,456,5.436,457,4.723,458,3.535,459,4.89,460,3.211,461,4.89,462,6.635,463,5.912,464,5.912,465,4.006,466,4.006,467,3.535,468,4.89,469,3.081]],["t/73",[15,2.526,39,1.864,52,1.992,57,1.034,67,2.248,88,2.739,93,2.958,101,2.314,175,2.697,236,4.108,372,5.678,457,4.608,460,4.185,469,2.905,470,4.611,471,4.611,472,4.38,473,3.778,474,4.611,475,4.611,476,4.611,477,3.333,478,3.53]],["t/75",[52,1.561,57,0.93,60,2.373,61,3.678,67,2.169,88,1.773,171,2.958,226,6.279,294,5.002,313,2.96,322,5.439,397,2.276,457,3.728,460,4.941,469,2.276,477,2.612,479,2.612,480,3.613,481,3.657,482,7.524,483,5.352,484,4.769,485,4.769,486,3.22,487,5.222]],["t/77",[1,1.79,34,2.054,47,0.909,52,2.745,57,0.867,68,1.674,93,2.614,111,2.369,216,1.035,230,2.752,241,3.111,304,2.134,308,2.134,378,1.617,392,2.029,419,1.569,428,2.261,451,1.79,455,2.419,457,4.026,458,2.134,460,4.52,472,4.73,479,3.319,481,3.53,488,3.515,489,3.295,490,4.615,491,3.319,492,5.633,493,4.091,494,5.633,495,4.591,496,4.591,497,2.631,498,3.699,499,1.617,500,1.727,501,1.524,502,2.953,503,3.761,504,2.953,505,2.953,506,2.419]],["t/79",[13,2.334,20,1.666,47,1.918,57,0.886,93,2.072,109,1.958,111,2.304,207,2.334,216,1.565,230,2.181,241,3.074,303,2.706,419,1.513,422,1.56,457,3.22,460,4.444,467,3.227,469,2.812,472,3.068,478,2.181,481,3.332,487,2.334,488,4.771,489,3.958,498,5.637,499,1.56,507,4.905,508,3.657,509,6.231,510,5.544,511,4.464,512,6.231,513,2.848,514,2.848,515,2.848,516,3.978,517,2.848,518,2.848,519,2.538]],["t/81",[14,1.176,57,0.966,67,2.55,68,2.274,88,2.292,93,2.895,111,1.798,216,2.187,230,3.619,241,2.931,294,4.049,455,2.854,457,3.648,458,2.518,473,2.854,481,2.895,484,3.104,488,2.667,491,3.765,498,5.291,499,2.853,520,3.104,521,3.483,522,2.288,523,3.104,524,3.483,525,3.483,526,3.483,527,3.483,528,2.518,529,3.483]],["t/83",[47,2.081,57,0.894,67,2.277,68,1.459,93,3.137,230,2.817,241,2.675,294,3.373,386,3.064,457,3.954,472,2.75,481,3.639,489,2.341,490,3.278,497,5.138,498,5.528,499,3.703,522,2.628,530,8.167,531,5.138,532,4.001,533,3.565,534,4.001,535,4.001]],["t/85",[14,1.034,20,1.793,36,3.52,47,1.775,50,1.243,52,2.042,57,0.908,67,1.454,88,1.91,93,1.422,216,2.791,269,2.511,324,2.215,422,1.679,433,2.215,451,1.858,457,3.373,473,2.511,479,2.215,481,2.677,491,2.215,493,2.731,501,3.345,506,2.511,520,2.731,536,4.725,537,3.065,538,6.481,539,3.065,540,3.065,541,3.065,542,3.065,543,3.065,544,3.065,545,4.725,546,3.065,547,3.065,548,3.065,549,3.065,550,3.065,551,3.065,552,2.511,553,2.106,554,2.106,555,3.871,556,1.628,557,3.618,558,3.065,559,3.065,560,3.065,561,2.215,562,3.065,563,3.065,564,2.511,565,2.347]],["t/87",[14,0.778,20,1.349,28,3.359,57,0.966,102,2.628,175,1.349,177,2.725,213,1.398,216,1.676,230,1.127,241,1.491,283,4.738,286,1.667,294,2.205,303,1.398,388,1.766,392,2.59,428,1.766,457,2.796,460,1.514,467,1.667,481,1.07,500,1.349,507,6.408,522,1.514,566,2.306,567,2.306,568,2.306,569,2.306,570,2.306,571,3.769,572,3.769,573,3.769,574,2.306,575,2.306,576,3.769,577,2.306,578,2.306,579,2.306,580,2.306,581,4.987,582,5.423,583,3.916,584,2.796,585,3.359,586,2.306,587,4.78,588,7.999,589,2.306,590,2.306,591,2.306,592,3.769,593,2.306,594,2.306,595,2.306,596,3.769,597,3.769,598,3.769,599,3.769,600,3.769,601,1.889,602,1.889,603,1.304,604,2.306,605,3.088,606,1.453,607,2.306,608,1.667,609,2.306,610,2.055,611,2.055,612,2.055]],["t/89",[39,1.314,47,1.841,52,1.404,57,0.564,93,2.294,102,2.847,175,2.891,216,1.733,230,3.699,241,1.956,283,4.11,381,2.488,394,2.047,419,3.178,451,1.97,457,2.891,460,2.134,467,2.349,469,3.768,481,2.294,490,2.662,491,4.831,498,3.246,556,1.727,581,6.203,605,4.9,613,4.942,614,4.942,615,7.189,616,3.25,617,4.942,618,4.942,619,4.942,620,4.942,621,3.25,622,3.25,623,4.404,624,2.488,625,2.349,626,1.901,627,4.049,628,3.25,629,2.896]],["t/91",[1,3.559,8,2.672,15,2.247,20,3.434,21,2.32,27,2.14,29,1.659,47,1.263,98,2.537,99,3.142,100,1.773,135,1.909,169,2.82,176,2.82,185,1.544,203,3.656,265,2.966,286,2.966,361,3.362,370,2.585,378,2.247,384,3.362,389,3.362,390,2.82,501,2.118,554,2.82,603,2.32,630,4.103,631,4.103,632,5.871,633,4.103,634,5.871,635,2.966,636,3.656,637,4.103,638,4.103,639,4.103,640,3.656,641,3.656,642,4.103,643,4.103,644,4.103,645,5.231,646,3.362]],["t/93",[8,2.369,14,1.795,29,2.15,32,4.073,33,3.009,44,3.225,47,2.161,98,3.033,104,3.225,107,4.03,159,2.746,202,4.073,256,3.846,279,4.358,333,4.595,413,4.74,647,5.32,648,5.32,649,5.32,650,4.073,651,5.32]],["t/95",[8,2.77,370,4.295,652,6.817,653,6.817,654,6.075,655,6.817,656,6.817,657,6.075,658,5.22]],["t/97",[47,1.96,93,2.956,111,3.287,501,3.287,554,4.377,636,5.675,659,5.675,660,6.369,661,6.369,662,6.369,663,6.369,664,5.218,665,5.218,666,5.675,667,6.369]],["t/99",[8,2.352,29,2.817,47,1.62,98,2.274,100,2.274,103,1.957,135,2.266,136,4.689,254,4.689,369,4.689,393,4.689,501,3.597,564,4.311,668,6.969,669,4.689,670,4.689,671,5.262,672,5.262,673,5.262,674,5.262,675,5.262,676,5.262,677,5.262,678,5.262,679,5.262,680,5.262]],["t/101",[135,2.459,367,4.966,681,7.562]],["t/104",[29,2.446,100,2.614,103,3.107,107,2.808,175,3.539,304,4.374,326,4.158,417,4.158,422,3.314,433,4.374,603,3.422,625,4.374,682,4.158,683,4.633,684,4.957,685,4.957,686,4.957]],["t/106",[7,2.896,8,1.277,29,1.529,36,2.448,45,1.563,47,1.704,98,1.634,100,1.634,103,2.68,166,2.293,181,3.198,182,3.804,183,4.732,184,3.635,255,2.896,258,1.56,314,1.756,326,2.6,361,3.099,362,3.099,366,2.139,375,2.896,380,2.383,398,2.6,411,2.734,423,2.6,450,2.293,499,2.072,626,2.213,650,2.896,682,4.951,683,4.238,687,3.371,688,4.001,689,2.6,690,2.6,691,2.484,692,2.734,693,3.099,694,3.099,695,3.783,696,3.804,697,4.001,698,3.783,699,3.099,700,3.783,701,3.783,702,3.783]],["t/108",[8,1.527,11,2.743,14,2.123,27,1.65,37,3.464,47,1.393,57,0.717,103,1.683,107,2.919,135,2.045,171,2.919,258,1.275,282,5.153,283,4.323,284,3.464,291,3.464,292,3.963,293,3.707,322,3.271,377,3.271,378,3.445,381,3.464,418,3.464,422,2.478,477,3.271,608,3.271,682,3.11,696,3.11,697,3.271,703,4.816,704,4.525,705,4.525,706,3.707,707,4.032,708,4.525,709,4.525]],["t/110",[8,2.068,14,2.068,98,2.648,103,2.279,107,2.844,111,3.162,139,2.844,258,1.726,305,3.584,378,3.356,418,4.692,447,4.429,635,4.429,710,6.127,711,5.46,712,4.692,713,5.46,714,5.02]],["t/112",[14,1.627,21,0.744,47,0.719,57,0.974,67,1.341,68,1.388,85,1.579,88,1.443,93,2.843,98,0.569,102,2.295,103,2.18,107,1.083,109,0.904,111,0.679,133,1.471,135,0.759,139,1.083,169,0.904,171,1.46,185,0.346,213,0.798,216,1.527,230,1.14,241,0.924,265,0.951,288,0.829,305,1.365,352,1.173,363,1.078,378,1.279,392,2.616,397,2.745,400,5.137,409,5.175,415,3.119,419,2.023,420,3.392,429,2.398,431,1.078,437,0.904,450,0.798,469,1.471,479,2.274,481,1.46,498,2.066,500,0.77,501,0.679,503,1.912,508,3.95,510,3.95,554,0.904,556,2.023,561,0.951,564,1.078,603,0.744,606,2.745,623,1.173,626,1.365,627,1.912,684,1.912,686,1.912,707,1.173,715,0.904,716,1.008,717,1.316,718,2.08,719,3.882,720,2.162,721,1.173,722,6.175,723,3.313,724,3.392,725,1.316,726,3.119,727,2.08,728,1.316,729,1.173,730,0.904,731,1.078,732,1.316,733,1.84,734,1.173,735,1.173,736,1.173,737,1.008,738,1.173,739,1.078,740,1.173,741,2.08,742,2.803,743,2.08,744,1.173,745,1.316,746,1.316,747,1.078,748,2.803,749,2.274,750,1.787,751,1.173]],["t/114",[7,3.281,8,2.043,14,1.446,34,2.207,57,0.489,68,1.562,103,2.252,111,2.211,135,2.283,171,1.989,216,1.502,258,1.207,292,2.699,305,2.506,308,3.097,318,1.77,366,2.423,378,2.347,397,2.699,437,2.945,451,2.598,499,2.347,556,2.277,603,2.423,626,2.506,635,3.097,692,3.097,712,3.281,713,5.395,715,2.945,733,2.506,752,4.611,753,3.818,754,1.594,755,3.51,756,3.281,757,3.097,758,4.285,759,3.097,760,4.285,761,3.818,762,6.054,763,4.285]],["t/116",[1,0.568,5,0.513,8,0.994,14,0.994,20,0.548,21,0.971,27,0.342,29,0.694,34,0.867,36,0.414,41,1.407,45,0.71,47,1.19,57,0.962,61,0.644,67,1.306,68,1.548,85,1.724,88,1.406,93,2.392,98,0.405,100,0.405,102,0.446,103,2.092,104,0.568,107,0.435,109,0.644,111,0.483,133,0.59,135,0.305,139,0.435,166,0.568,169,1.18,171,1.367,181,1.162,182,1.634,183,1.719,184,1.934,185,0.246,205,0.767,209,0.717,216,1.712,230,0.839,237,0.717,241,0.941,258,0.484,273,0.767,292,0.59,304,0.677,305,1.005,306,0.767,325,0.615,362,0.767,363,0.767,366,0.971,367,0.615,375,0.717,378,0.513,380,0.59,383,0.835,388,0.717,392,2.917,397,1.855,400,3.149,409,1.821,415,2.413,417,1.18,419,2.255,422,0.513,423,0.644,429,1.082,431,0.767,450,0.568,479,1.242,481,1.367,487,0.767,488,0.717,489,0.548,498,1.128,499,1.613,500,0.548,501,1.227,503,0.767,508,3.167,510,3.754,556,0.913,565,0.717,602,0.767,606,1.082,626,1.005,627,1.949,650,1.315,665,1.407,682,3.542,684,1.407,685,0.767,688,1.719,690,1.18,692,2.484,694,4.607,696,2.917,697,2.129,718,1.53,719,3.061,720,0.644,722,5.512,723,1.634,724,3.782,726,2.413,727,0.835,733,1.005,735,0.835,736,0.835,737,0.717,738,2.624,739,0.767,740,0.835,741,1.53,742,2.119,743,1.53,747,0.767,748,2.119,749,2.484,750,1.315,751,0.835,753,0.835,756,0.717,757,0.677,764,1.718,765,1.718,766,2.119,767,0.835,768,1.634,769,0.937,770,0.937,771,1.718,772,0.677,773,0.835,774,0.937,775,0.835,776,0.835,777,0.717,778,2.378,779,2.378,780,0.937,781,0.644,782,3.444,783,0.937,784,0.937,785,0.937,786,0.835,787,1.53,788,0.937,789,0.937,790,0.937,791,0.937,792,0.937,793,0.767,794,1.718,795,0.937,796,0.937,797,0.937,798,0.937,799,0.937,800,0.937,801,0.937,802,0.937,803,0.937]],["t/118",[1,1.443,8,1.305,14,0.803,21,0.761,25,1.199,26,1.102,27,0.868,34,0.49,41,1.95,45,1.598,47,0.733,50,0.354,52,0.581,57,0.845,68,1.612,93,2.75,103,2.599,107,1.795,135,0.774,171,1.486,181,2.895,182,0.925,183,1.721,184,0.883,230,0.657,237,1.03,241,1.267,256,0.972,258,0.902,274,1.199,292,2.437,305,3.291,314,0.624,325,0.883,326,0.925,378,0.737,389,1.102,390,0.925,392,1.636,397,0.848,398,1.636,411,0.972,419,2.055,422,0.737,423,1.636,427,1.721,429,1.5,450,0.816,466,1.95,469,1.5,481,1.795,491,0.972,499,3.082,500,1.392,501,2.521,519,1.199,553,0.925,557,1.822,584,2.262,601,1.102,603,0.761,608,0.972,625,1.721,654,1.199,665,1.102,682,4.557,683,1.03,687,1.199,692,3.195,694,4.854,696,3.038,697,2.314,715,2.658,720,0.925,726,3.169,733,0.787,737,1.03,749,0.972,756,1.03,757,1.721,766,2.852,768,0.925,781,1.636,782,5.908,786,1.199,787,1.199,804,3.868,805,1.345,806,3.201,807,3.446,808,0.883,809,2.38,810,1.345,811,2.38,812,1.199,813,1.345,814,1.199,815,1.345,816,1.199,817,1.345,818,1.345,819,1.345,820,1.345,821,1.345,822,1.199,823,1.345,824,2.121,825,1.03,826,1.345,827,3.201,828,1.102,829,1.199,830,1.345,831,3.868,832,1.345,833,1.345,834,1.345,835,1.345,836,1.345,837,1.102,838,1.345]],["t/121",[109,4.008,135,1.896,373,5.197,429,3.674,557,5.705,650,5.705,686,4.778,839,5.832,840,8.211,841,5.832,842,5.832,843,8.652,844,5.832,845,5.832,846,5.832]],["t/124",[5,2.946,177,3.888,303,3.261,318,3.466,371,3.697,500,3.146,552,4.407,689,3.697,847,7.071,848,5.379,849,2.946,850,5.379,851,5.379,852,5.379,853,7.071,854,4.793,855,4.407,856,5.379,857,5.379,858,4.118,859,5.379,860,5.379,861,4.793,862,5.379]],["t/126",[177,4.166,301,3.96,316,3.96,317,5.135,318,2.381,450,3.494,522,3.785,721,5.135,781,3.96,808,3.785,863,5.763,864,5.763,865,4.721,866,5.135,867,4.721,868,7.394,869,5.763,870,5.763,871,5.763,872,5.763,873,4.721,874,4.721]],["t/128",[8,1.795,139,2.469,185,1.399,235,4.74,276,4.358,318,2.9,371,4.824,386,4.073,397,3.352,601,5.751,603,3.009,875,4.74,876,4.74,877,5.32,878,5.399,879,5.32,880,4.74,881,5.32,882,5.32,883,4.358,884,5.32,885,5.32,886,5.32,887,4.073,888,5.32]],["t/131",[15,3.356,135,1.992,169,4.211,178,3.86,210,4.429,258,2.367,318,2.531,716,4.692,768,4.211,889,7.688,890,3.86,891,5.46,892,4.429,893,4.211,894,5.46]],["t/133",[8,2.178,45,2.666,241,2.554,396,4.349,693,5.288,749,4.665,895,6.454,896,6.454,897,5.751,898,5.751,899,6.454,900,6.454,901,4.665]],["t/135",[8,2.109,15,3.941,47,2.215,98,3.109,103,2.325,104,2.718,107,2.081,171,2.081,211,6.411,223,6.411,304,3.241,450,2.718,499,2.455,693,3.673,711,5.569,747,3.673,902,4.483,903,6.935,904,6.249,905,4.483,906,4.483,907,6.249,908,6.249,909,4.483,910,3.432,911,3.994,912,4.483,913,3.994]],["t/137",[29,2.795,33,3.911,58,4.752,100,2.988,275,5.665,286,4.998,658,5.294,914,6.915,915,6.915]],["t/139",[29,2.92,47,2.224,98,3.121,100,3.121,916,7.224,917,7.224]],["t/141",[9,4.412,29,2.989,39,3.3,72,4.412,78,3.785,139,2.675,230,2.815,489,3.371,664,4.721,781,3.96,918,7.394,919,5.763,920,5.763,921,5.763,922,5.763,923,5.135,924,5.763,925,5.763,926,5.763]],["t/143",[8,1.472,9,3.34,29,1.763,47,1.343,58,2.998,59,2.389,100,1.885,110,3.34,288,2.748,370,2.748,422,2.389,447,4.432,603,2.467,715,4.213,773,3.887,927,8.811,928,6.131,929,7.69,930,4.362,931,4.362,932,4.362,933,4.362,934,3.887,935,4.362,936,4.362,937,4.362,938,4.362,939,4.362,940,4.362,941,4.362,942,4.362,943,4.362,944,4.362,945,4.362,946,4.362,947,4.362,948,4.362]],["t/145",[8,1.815,11,4.287,14,1.815,21,3.042,29,2.174,98,3.055,100,2.324,171,2.497,288,3.389,301,3.697,367,3.532,368,5.793,370,3.389,380,3.389,381,4.118,384,4.407,390,3.697,603,3.042,625,3.888,874,4.407,949,4.793,950,4.793,951,4.793,952,4.793,953,5.379,954,5.379]],["t/147",[8,2.313,11,3.559,14,2.672,29,1.659,36,1.815,53,2.966,57,0.669,100,1.773,107,1.904,111,2.118,166,2.488,171,3.473,176,2.82,191,3.362,255,3.142,266,2.966,275,3.362,364,5.249,378,2.247,411,4.244,421,3.362,501,2.118,556,2.18,646,3.362,706,3.362,768,2.82,808,2.695,875,3.656,955,3.656,956,4.103,957,4.103,958,4.103,959,5.231,960,4.103,961,3.362,962,3.656,963,4.103,964,3.656,965,4.103,966,4.103,967,3.656,968,4.103]],["t/149",[1,2.293,8,1.277,14,1.277,21,2.139,29,2.646,36,3.542,44,2.293,47,2.015,53,4.001,63,1.481,100,2.392,101,2.778,159,3.379,166,3.356,177,2.734,207,3.099,256,2.734,266,2.734,303,2.293,324,2.734,366,3.13,375,2.896,377,2.734,447,2.734,451,2.293,501,1.952,605,4.535,624,2.896,635,2.734,666,3.371,768,2.6,772,2.734,955,3.371,969,3.783,970,3.783,971,3.783,972,3.371,973,3.099,974,3.783,975,4.535,976,3.371,977,3.783,978,3.371,979,3.371,980,3.099,981,2.896,982,3.783,983,3.783]],["t/151",[8,0.793,15,1.288,20,1.375,26,1.926,29,1.548,32,2.932,36,1.693,38,0.91,39,3.401,44,1.425,47,1.893,67,1.179,73,1.8,78,2.514,93,1.091,100,1.016,109,1.616,137,1.926,139,3.226,159,1.213,166,1.425,171,1.091,185,0.618,199,5.694,209,2.932,210,1.699,214,2.095,227,1.926,230,1.148,240,1.616,241,0.93,250,3.412,280,3.137,303,2.937,305,2.24,310,2.631,366,2.74,380,1.481,396,1.288,422,2.097,433,1.699,437,1.616,451,2.937,466,3.137,500,1.375,501,1.976,554,3.329,556,1.249,561,1.699,608,1.699,624,1.8,716,1.8,759,2.768,767,2.095,772,3.502,873,3.137,898,2.095,911,2.095,973,1.926,981,3.709,984,3.412,985,2.351,986,2.351,987,1.926,988,4.844,989,2.351,990,1.548,991,3.137,992,2.351,993,2.351,994,1.8,995,2.351,996,2.095,997,2.351,998,2.351,999,3.829,1000,2.351,1001,2.351,1002,2.351,1003,2.351,1004,2.351]],["t/153",[11,2.406,29,2.317,47,2.071,78,2.606,95,3.536,100,1.715,108,3.536,166,3.475,171,2.66,185,1.044,209,4.389,303,2.406,305,2.321,310,2.727,332,3.251,366,2.244,371,4.624,394,3.611,429,2.5,501,2.048,555,3.251,556,2.109,581,3.251,612,3.536,712,3.039,720,3.939,749,2.869,951,3.536,964,3.536,973,3.251,987,4.696,996,3.536,1005,3.969,1006,7.815,1007,3.969,1008,3.969,1009,3.969,1010,3.969,1011,5.732,1012,3.969,1013,3.536,1014,3.969,1015,3.039,1016,3.969,1017,3.536]],["t/155",[8,2.859,9,2.488,11,2.996,14,1.668,21,1.838,27,1.185,37,2.488,107,3.514,135,1.057,169,2.233,171,3.102,175,1.901,185,0.855,273,2.662,301,3.397,303,1.97,305,1.901,310,2.233,366,3.382,370,3.114,396,2.707,398,2.233,421,2.662,489,1.901,499,1.78,522,3.246,556,2.626,629,2.896,645,2.896,658,2.488,703,6.21,714,2.662,733,1.901,777,2.488,837,2.662,867,2.662,874,2.662,981,2.488,990,1.314,1018,3.25,1019,3.25,1020,3.25,1021,3.25,1022,4.049,1023,4.404,1024,3.25,1025,3.25,1026,3.25,1027,3.25,1028,3.25,1029,3.25,1030,3.25,1031,2.896]],["t/157",[8,2.602,11,1.858,20,1.793,21,1.733,27,1.117,29,1.239,33,1.733,46,3.633,47,1.454,100,1.324,107,1.422,135,0.996,139,1.422,171,3.008,237,2.347,255,5.361,266,4.685,288,1.931,292,1.931,301,2.106,310,2.106,325,3.787,380,1.931,387,2.731,390,2.106,396,2.588,422,1.679,450,1.858,478,2.347,499,1.679,501,2.976,522,2.013,556,1.628,603,1.733,640,2.731,646,2.511,664,2.511,669,2.731,670,2.731,692,2.215,703,4.416,712,2.347,715,3.963,733,1.793,777,3.618,961,2.511,967,5.775,979,2.731,1022,2.511,1031,2.731,1032,3.065,1033,3.618,1034,2.731,1035,2.731,1036,3.065,1037,2.731,1038,3.065,1039,2.511,1040,2.731,1041,4.21,1042,2.731,1043,3.065,1044,2.731]],["t/159",[1,1.123,7,0.779,8,2.351,11,1.123,14,1.231,15,0.557,20,1.491,21,1.048,27,0.675,29,1.031,34,0.93,36,1.127,37,1.418,38,0.606,39,1.269,45,0.42,46,1.167,47,1.258,53,0.736,57,0.615,63,0.496,67,0.57,68,1.33,88,0.613,93,0.472,98,0.44,107,1.693,115,0.907,130,1.418,137,0.834,139,1.458,166,1.123,171,2.375,184,0.668,189,0.779,199,2.089,200,0.907,202,1.418,216,1.433,217,1.491,241,0.733,253,0.907,265,0.736,279,3.945,280,1.517,282,0.834,283,2.507,284,2.405,288,0.641,291,1.418,292,1.167,301,0.699,303,2.212,305,1.491,310,0.699,311,1.65,312,0.907,315,0.595,318,2.328,324,0.736,325,2.062,326,0.699,366,1.048,367,1.674,370,0.641,377,1.339,380,0.641,382,0.907,388,0.779,390,2.158,394,0.641,396,1.396,397,2.298,417,0.699,419,1.938,422,0.557,447,1.339,450,1.123,451,1.123,456,0.834,463,1.65,464,1.65,467,1.339,469,1.606,477,0.736,478,1.418,489,0.595,499,2.239,500,0.595,501,2.641,516,1.65,522,0.668,531,2.798,554,0.699,555,2.089,556,2.172,557,0.779,561,0.736,603,1.048,608,1.339,610,0.907,611,0.907,624,0.779,625,0.736,635,0.736,658,0.779,659,0.907,703,0.779,714,0.834,715,0.699,716,1.418,720,0.699,733,0.595,759,2.27,761,0.907,772,0.736,777,2.405,807,0.907,814,1.65,825,0.779,837,0.834,849,0.557,858,2.793,867,0.834,873,2.573,876,0.907,891,0.907,892,0.736,950,1.65,959,0.907,961,1.517,972,0.907,980,0.834,981,0.779,984,1.65,987,1.517,990,0.749,991,1.517,1017,0.907,1022,0.834,1023,0.907,1034,0.907,1035,2.272,1037,0.907,1044,0.907,1045,1.017,1046,3.643,1047,1.017,1048,1.017,1049,1.017,1050,1.017,1051,1.017,1052,0.907,1053,0.834,1054,1.017,1055,1.852,1056,0.907,1057,1.017,1058,1.852,1059,1.017,1060,1.852,1061,1.017,1062,1.017,1063,1.017,1064,1.017,1065,1.017,1066,1.852,1067,1.72,1068,1.017,1069,1.017,1070,1.852,1071,1.017,1072,1.017,1073,1.017,1074,1.852,1075,1.852,1076,1.017,1077,1.017,1078,1.017,1079,1.017,1080,1.017,1081,1.017,1082,1.852,1083,0.907,1084,1.017,1085,1.852,1086,0.907,1087,1.017,1088,1.017,1089,1.017,1090,1.017,1091,1.017,1092,1.017,1093,0.834,1094,1.017,1095,1.017]],["t/161",[8,2.367,29,2.835,33,3.967,36,3.102,44,4.253,258,1.977,657,6.25,1096,4.607]],["t/164",[849,3.12,865,4.666,1015,4.361,1097,4.666,1098,4.117,1099,5.075,1100,5.695,1101,5.695,1102,5.695,1103,4.666,1104,5.075,1105,5.075,1106,5.695,1107,5.075,1108,5.695,1109,5.695,1110,5.695,1111,5.695,1112,5.695,1113,5.695,1114,5.695,1115,5.695,1116,4.361,1117,5.695]],["t/166",[1118,7.333,1119,7.333,1120,7.333,1121,7.333,1122,7.333]],["t/168",[326,4.892,822,6.342,1123,7.118,1124,7.118,1125,7.118,1126,7.118,1127,7.118]],["t/170",[1128,6.915,1129,6.915,1130,6.915,1131,6.915,1132,6.915,1133,6.915,1134,6.915,1135,6.915,1136,6.915]],["t/172",[1137,7.333,1138,7.333,1139,7.333,1140,7.333,1141,7.333]],["t/174",[584,4.356,878,5.117,1142,6.635,1143,5.383]],["t/176",[893,5.117,1144,7.446,1145,7.446,1146,7.446]],["t/178",[793,6.1,901,5.383,1147,6.635,1148,7.446]],["t/181",[52,2.681,57,0.964,101,3.115,185,1.632,216,2.176,465,5.084,975,5.084,976,5.53,1149,6.206,1150,5.53,1151,8.45,1152,6.206,1153,5.084]],["t/183",[39,2.644,46,4.121,47,2.013,106,5.828,135,2.127,185,1.72,258,1.843,465,5.359,553,4.495,903,5.828,1150,5.828,1154,8.005]],["t/185",[8,1.541,14,1.541,34,1.665,36,2.02,38,1.504,48,4.07,57,0.829,59,2.502,185,1.201,216,2.22,258,1.287,396,2.502,427,3.302,556,2.427,606,2.878,706,3.742,752,2.999,759,4.577,793,3.742,861,5.641,1052,6.475,1053,6.428,1056,4.07,1155,4.567,1156,4.567,1157,2.769,1158,4.567,1159,4.567,1160,4.567,1161,4.848,1162,4.567,1163,3.497,1164,4.567]],["t/187",[8,2.386,38,1.994,50,1.415,51,3.888,57,0.613,63,1.439,185,1.415,217,3.146,606,3.389,744,4.793,754,2.001,1157,4.789,1163,5.414,1165,5.379,1166,5.379,1167,5.379,1168,5.379,1169,5.379,1170,5.379,1171,5.379,1172,5.379,1173,4.793]],["t/189",[57,0.69,63,1.619,133,4.805,171,2.808,185,1.591,216,2.121,217,3.539,561,4.374,890,3.812,1157,4.624,1163,5.84,1173,5.392,1174,7.627,1175,7.627]],["t/191",[36,2.489,45,2.325,57,1.008,68,2.052,181,3.558,185,1.48,216,1.974,241,2.227,417,3.868,481,2.613,606,3.546,923,5.016,1176,5.629,1177,3.868,1178,8.538,1179,5.629,1180,5.629]],["t/193",[39,2.92,45,2.984,50,1.9,63,1.933,318,2.984,1181,7.224]],["t/195",[57,0.673,59,3.234,63,2.009,68,2.152,241,2.336,314,2.74,316,4.057,318,2.439,437,4.057,553,4.057,781,4.057,1067,4.523,1182,5.903,1183,7.358,1184,4.267,1185,4.057]],["t/197",[8,2.069,47,1.887,57,0.497,59,2.389,63,1.64,68,1.59,204,3.887,241,1.726,264,3.573,271,4.213,314,2.024,316,5.568,318,2.533,371,4.213,437,2.998,500,2.551,553,2.998,565,3.34,734,6.317,772,3.153,781,4.213,890,2.748,1067,3.883,1116,3.34,1183,6.317,1184,3.153,1185,2.998,1186,4.362,1187,6.853,1188,2.748]],["t/199",[39,2.416,50,1.572,63,2.025,68,2.759,230,4.057,316,4.107,423,4.107,685,4.896,890,4.768,1116,5.794,1187,5.325,1189,5.976,1190,5.976,1191,5.976]],["t/201",[45,3.076,481,3.456,825,5.701,1192,7.446]],["t/203",[38,1.857,50,1.654,52,1.955,57,0.516,63,1.211,68,2.849,85,3.157,185,1.19,191,3.707,216,1.586,241,2.489,314,2.1,318,1.869,419,2.404,423,5.37,894,5.605,1193,4.525,1194,4.525,1195,6.29,1196,7.815,1197,6.29,1198,5.605,1199,4.525,1200,4.525,1201,4.525,1202,4.525,1203,4.525]],["t/205",[50,1.72,59,3.583,63,2.142,68,2.385,241,2.588,314,3.036,316,4.495,318,2.702,1067,4.385,1184,4.728,1204,6.541]],["t/207",[5,1.979,14,1.806,27,1.317,34,1.317,38,1.675,57,0.898,59,1.979,63,1.885,67,1.112,68,1.317,86,3.22,102,1.72,185,0.95,230,1.765,241,1.43,251,2.373,314,1.677,318,1.493,406,3.22,485,3.22,626,3.131,688,2.612,690,2.483,752,2.373,849,1.979,855,2.96,878,3.678,1067,3.491,1096,3.515,1184,2.612,1205,3.613,1206,3.22,1207,2.114,1208,5.352,1209,5.352,1210,6.374,1211,5.352,1212,5.352,1213,3.613,1214,6.374,1215,2.767,1216,2.767,1217,3.613,1218,3.613,1219,3.613,1220,3.613,1221,3.613,1222,3.22]],["t/209",[57,0.982,59,3.157,63,1.542,68,2.101,101,2.892,102,2.743,185,1.516,241,2.28,456,4.721,458,4.166,892,4.166,1067,3.157,1096,4.856,1184,4.166,1223,5.763,1224,7.394,1225,5.763,1226,5.763]],["t/211",[33,3.339,50,1.553,57,0.942,63,2.009,102,2.81,185,1.553,216,2.07,314,2.74,318,2.439,878,5.16,1046,5.26,1067,3.234,1096,3.877,1206,5.26,1207,3.453,1227,5.903,1228,5.903]],["t/213",[34,1.308,39,1.45,45,1.482,47,1.104,57,0.928,63,1.698,68,1.308,99,2.746,102,1.707,159,1.851,179,4.611,181,1.752,185,0.943,216,1.866,257,1.334,259,0.797,271,4.361,327,6.145,386,2.746,750,2.746,849,2.915,1096,5.16,1143,5.422,1163,2.746,1229,3.196,1230,4.168,1231,6.683,1232,3.587,1233,3.587,1234,3.196,1235,5.322,1236,5.322,1237,5.322,1238,3.587,1239,3.587,1240,3.587,1241,3.587]],["t/215",[22,5.135,57,0.657,63,1.542,68,2.101,139,2.675,259,1.281,318,3.373,552,4.721,553,3.96,849,3.157,878,5.082,1040,5.135,1230,3.785,1242,5.763,1243,8.165,1244,5.763,1245,5.135,1246,5.763]],["t/217",[50,1.369,57,0.594,63,1.851,133,3.28,139,2.416,180,5.341,257,2.891,258,1.95,259,1.538,314,2.416,606,3.28,849,2.851,897,4.638,1039,6.367,1188,3.28,1230,4.544,1247,5.206,1248,5.206,1249,5.206,1250,2.06,1251,5.206,1252,5.206]],["t/219",[57,0.746,63,1.75,133,4.121,257,2.978,259,1.454,849,3.583,1039,5.359,1230,5.257,1253,6.541,1254,8.005]],["t/221",[14,2.208,45,2.702,57,0.746,63,1.75,181,3.196,259,1.454,318,2.702,434,5.828,849,3.583,1230,4.296,1255,6.541,1256,8.005]],["t/223",[5,2.025,27,1.348,34,1.348,36,1.635,38,1.535,39,1.494,50,0.972,57,0.421,63,0.989,105,5.455,179,4.242,181,2.659,183,2.672,259,0.821,314,1.715,318,2.248,418,6.082,422,2.981,472,2.54,584,5.189,689,2.54,730,2.54,739,3.028,750,2.83,776,3.293,849,4.16,913,3.293,952,3.293,1042,3.293,1185,2.54,1198,3.293,1230,2.427,1234,4.849,1257,3.696,1258,3.696,1259,3.293,1260,3.696,1261,3.696,1262,3.696,1263,3.293]],["t/225",[8,2.44,50,1.463,57,1.005,178,3.506,185,1.463,216,1.951,258,2.482,259,1.237,370,3.506,394,3.506,641,4.958,825,4.26,893,3.824,1264,7.229,1265,4.958,1266,5.564]],["t/227",[38,1.919,50,1.48,57,0.831,178,3.546,185,1.48,216,1.974,217,3.293,258,2.052,371,3.868,394,3.546,723,3.868,890,3.546,1265,5.016,1267,5.629,1268,5.629,1269,5.629,1270,3.868,1271,5.629,1272,5.629,1273,5.629,1274,5.629]],["t/229",[39,2.477,50,1.612,57,0.877,63,2.057,159,3.968,185,1.612,216,2.695,258,1.726,887,4.692,1275,6.127,1276,6.127,1277,6.127,1278,6.127,1279,6.127]],["t/231",[50,1.591,57,0.87,63,1.619,159,4.311,185,1.591,216,2.121,258,2.149,259,1.345,481,2.808,890,3.812,1098,4.374,1153,4.957,1280,6.051,1281,6.051,1282,6.051]],["t/233",[57,0.726,63,1.704,68,2.322,101,3.196,104,3.862,185,1.675,333,3.726,419,4.542,828,5.218,1283,6.369,1284,7.017,1285,6.369]],["t/235",[38,1.771,45,2.409,57,0.665,63,1.56,67,1.795,68,2.126,88,1.932,101,2.927,104,3.536,185,1.534,217,4.359,333,3.412,419,3.099,828,4.778,990,2.358,1284,6.639,1286,5.832,1287,2.26,1288,5.832]],["t/237",[14,1.373,38,1.621,39,1.645,57,0.464,59,3.196,63,1.561,67,1.252,68,1.483,88,1.348,135,1.323,180,4.689,185,1.07,195,3.115,217,3.413,227,3.333,240,2.796,241,2.309,288,2.563,314,2.708,333,2.38,405,5.2,472,2.796,583,3.333,585,3.625,691,3.832,812,3.625,901,4.218,990,1.645,1093,3.333,1147,3.625,1287,1.577,1289,4.069,1290,5.835,1291,6.93,1292,5.835,1293,4.069,1294,4.069,1295,4.069]],["t/239",[27,2.353,38,1.887,50,1.697,57,0.736,67,1.987,88,2.138,135,2.098,259,1.765,990,2.609,1097,5.288,1287,2.501,1296,6.454]],["t/241",[27,2.206,38,1.812,50,1.591,57,0.69,63,1.619,67,1.863,88,2.004,135,1.967,259,1.695,759,5.513,890,3.812,990,2.446,1097,4.957,1287,2.345,1297,6.051,1298,6.051]],["t/243",[5,2.433,27,1.619,38,1.842,39,1.795,45,1.835,50,1.168,51,3.211,57,0.507,63,1.188,67,1.367,85,3.593,88,1.471,100,1.919,135,2.019,181,2.17,259,1.38,314,3.323,489,2.598,528,3.211,584,4.188,733,2.598,910,3.401,990,1.795,1033,3.401,1098,5.604,1157,2.693,1185,3.053,1188,2.798,1287,1.721,1299,4.442,1300,5.865,1301,3.639]],["t/245",[5,2.267,15,2.267,27,1.509,38,1.785,39,1.673,45,1.709,50,1.088,51,2.991,57,0.472,63,1.107,67,1.274,85,3.457,88,1.371,100,1.788,135,1.92,139,1.921,181,2.022,195,4.522,219,3.687,259,1.313,314,3.197,489,2.421,528,2.991,582,3.687,584,4.029,733,2.421,910,3.168,990,1.673,1033,3.168,1098,5.971,1157,2.509,1185,2.844,1188,2.607,1287,1.603,1300,5.643,1301,3.39,1302,4.138]],["t/247",[5,2.267,27,1.509,38,1.785,39,1.673,45,1.709,50,1.088,51,2.991,57,0.472,58,2.844,63,1.107,67,1.274,85,3.77,88,1.371,100,1.788,135,1.92,181,2.022,259,1.313,314,3.197,433,2.991,489,2.421,528,2.991,584,4.029,733,2.421,910,3.168,990,1.673,1033,3.168,1098,5.742,1157,3.581,1185,2.844,1188,2.607,1287,1.603,1300,5.643,1301,3.39,1303,4.138,1304,5.907,1305,4.138]],["t/249",[27,2.179,38,1.798,50,1.572,57,0.681,63,1.599,67,1.84,88,1.979,135,1.943,159,3.084,185,1.572,259,1.682,990,2.416,1107,5.325,1161,4.576,1287,2.316,1306,5.976,1307,5.976,1308,5.976]],["t/251",[27,1.039,36,1.26,38,1.481,50,0.749,57,0.856,63,2.008,67,0.877,88,0.943,102,1.356,135,0.926,159,2.841,176,1.958,179,1.871,181,1.392,185,0.749,230,1.392,258,1.258,259,0.992,271,1.958,308,3.979,318,1.177,325,1.871,327,4.51,396,1.56,486,2.538,500,2.611,583,2.334,584,1.666,730,1.958,754,2.048,768,3.068,854,4.905,865,5.105,878,3.068,890,1.795,934,2.538,978,2.538,990,1.151,1142,2.538,1143,2.059,1161,3.418,1177,1.958,1229,2.538,1231,4.905,1245,2.538,1263,2.538,1287,1.104,1309,2.848,1310,2.334,1311,2.848,1312,5.505,1313,5.505,1314,4.464,1315,2.848,1316,4.464,1317,4.464,1318,2.848,1319,2.848,1320,2.848,1321,2.848,1322,4.464,1323,2.848,1324,2.848,1325,2.848,1326,2.848]],["t/253",[27,2.353,38,1.887,50,1.697,57,0.736,67,1.987,88,2.138,135,2.098,259,1.765,990,2.609,1105,5.751,1287,2.501,1327,6.454]],["t/255",[27,1.261,34,1.261,38,1.476,39,1.398,45,1.429,47,1.065,50,0.91,57,0.884,63,0.925,67,1.065,88,1.146,101,1.736,102,1.646,135,1.124,138,3.966,176,2.377,181,1.69,182,2.377,185,0.91,241,2.05,259,1.151,271,3.56,294,2.023,314,1.605,322,2.5,325,2.271,377,2.5,378,1.894,458,2.5,691,4.851,696,2.377,730,2.377,775,3.082,901,2.5,975,4.244,980,2.834,990,1.398,994,2.648,1161,2.648,1207,2.023,1287,1.34,1310,2.834,1328,3.459,1329,6.897,1330,6.897,1331,7.386,1332,3.459,1333,3.459,1334,3.459,1335,3.459,1336,3.459,1337,3.459,1338,3.459]],["t/257",[27,2.322,38,1.871,50,1.675,57,0.726,67,1.96,88,2.109,135,2.071,258,1.795,259,1.75,990,2.574,1287,2.468,1339,6.369,1340,3.287]],["t/259",[27,1.983,38,2.002,50,1.431,57,0.62,58,3.738,67,1.674,85,3.575,88,1.802,135,1.768,206,4.847,259,1.583,314,2.525,858,4.165,962,4.847,990,2.199,1099,6.346,1259,4.847,1287,2.108,1341,5.439,1342,7.942]],["t/261",[27,2.052,38,1.919,50,1.48,57,0.831,63,1.506,67,1.733,85,2.825,88,1.864,94,4.31,135,1.83,159,2.905,185,1.48,259,1.619,990,2.275,1013,5.016,1015,4.31,1222,5.016,1287,2.181,1343,5.629,1344,5.629,1345,5.629]],["t/263",[27,2.234,38,1.827,52,3.322,57,0.699,63,1.639,67,1.886,88,2.029,135,1.992,233,5.46,259,1.362,990,2.477,1116,4.692,1287,2.374,1346,6.127,1347,6.127,1348,6.127]],["t/265",[27,2.179,38,1.798,50,1.572,57,0.681,63,1.599,67,1.84,88,1.979,135,1.943,257,2.223,259,1.682,318,3.126,849,3.273,990,2.416,1067,4.145,1287,2.316,1349,5.976]],["t/267",[27,2.052,38,1.919,50,1.48,57,0.642,63,1.506,67,1.733,85,4.052,88,1.864,135,1.83,259,1.619,318,2.325,419,2.991,893,5.005,990,2.275,1067,3.989,1287,2.181,1350,5.629,1351,5.016]],["t/269",[27,2.322,38,1.871,50,1.675,57,0.726,67,1.96,88,2.109,135,2.071,259,1.75,990,2.574,1287,2.468,1352,6.369,1353,5.218,1354,5.675]],["t/271",[27,2.206,38,2.084,50,1.591,57,0.69,67,1.863,85,3.037,88,2.004,135,1.967,259,1.695,584,3.539,990,2.446,1287,2.345,1353,4.957,1355,6.051,1356,6.051]],["t/273",[27,2.418,38,1.918,57,0.756,67,2.041,88,2.196,135,2.156,259,1.474,990,2.68,1104,5.908,1287,2.569,1357,6.631]],["t/275",[5,3.273,27,2.179,38,1.973,50,1.572,57,0.681,67,1.84,88,1.979,135,1.943,259,1.682,584,3.496,990,2.416,1103,4.896,1287,2.316,1358,5.976,1359,7.568,1360,5.976]],["t/277",[34,2.152,57,0.856,185,1.553,216,2.07,257,2.196,259,1.312,294,3.453,315,3.453,730,4.057,754,2.196,1157,3.579,1207,3.453,1250,2.336,1270,4.057,1287,2.287,1353,4.836,1354,5.26,1361,5.903,1362,4.836,1363,5.903]],["t/279",[34,2.179,57,0.863,185,1.572,216,2.095,257,2.223,259,1.328,294,3.496,315,3.496,730,4.107,754,2.223,1103,4.896,1157,3.623,1207,3.496,1250,2.365,1270,4.107,1287,2.316,1362,4.896,1364,5.976,1365,5.976]],["t/281",[38,1.887,50,1.697,57,0.736,185,1.697,216,2.263,257,2.401,258,1.819,259,1.434,626,3.775,754,2.401,1287,2.501,1366,7.075]],["t/283",[50,1.819,257,2.572,258,1.948,259,1.537,315,4.045,754,2.572,887,5.294,1207,4.045,1367,6.915]],["t/285",[50,2.071,210,4.604,257,2.369,258,2.219,259,1.416,315,3.726,322,4.604,754,2.369,949,5.675,1093,5.218,1188,4.013,1207,3.726,1368,6.369]],["t/287",[34,2.353,38,1.887,57,0.736,67,1.987,88,2.138,257,2.401,258,1.819,259,1.434,626,3.775,754,2.401,1250,2.554,1287,2.501,1369,6.454]],["t/289",[34,2.263,38,1.475,57,0.708,257,2.308,258,1.749,259,1.379,324,4.486,691,4.075,723,5.807,754,2.308,1015,4.752,1086,5.53,1250,2.456,1370,6.206,1371,6.206]],["t/291",[5,2.526,34,1.681,36,2.818,57,0.833,67,1.419,88,1.527,133,2.905,181,2.253,185,1.213,216,2.234,257,1.715,258,2.058,259,1.025,270,3.53,396,3.491,411,3.333,481,2.14,754,2.37,808,3.028,887,3.53,994,3.53,1177,5.683,1250,1.824,1287,1.787,1366,4.108,1372,4.611,1373,4.611,1374,4.108,1375,4.611,1376,4.611,1377,4.611,1378,4.611]],["t/293",[14,2.334,257,2.572,258,1.948,259,1.537,528,4.998,754,2.572,1379,6.915,1380,6.915,1381,6.915]],["t/295",[14,1.318,18,4.641,38,1.346,47,1.202,50,1.49,52,1.687,57,0.76,63,1.516,67,2.052,88,2.208,102,1.859,139,2.629,159,2.015,175,3.314,210,2.823,257,2.107,258,1.596,259,0.868,264,3.199,315,3.314,318,2.34,333,2.284,427,4.095,452,3.479,477,4.095,754,1.452,824,3.479,893,3.893,1067,3.652,1143,5.286,1207,2.284,1250,1.545,1291,4.641,1382,3.905,1383,3.905,1384,3.905,1385,3.905,1386,3.905]],["t/297",[5,3.314,34,2.781,57,0.69,103,2.251,258,1.705,259,1.345,294,3.539,315,3.539,429,3.812,438,4.957,626,3.539,688,4.374,1207,3.539,1250,2.394,1387,6.051,1388,6.051,1389,6.051,1390,6.051]],["t/299",[34,1.801,57,0.762,63,1.322,68,2.436,101,3.353,103,2.815,107,2.293,133,3.112,185,1.299,216,1.732,257,1.837,258,1.392,259,1.098,333,2.89,378,2.706,419,4.309,699,6.201,752,3.244,754,2.485,755,4.047,756,3.782,757,3.571,1041,4.402,1250,1.955,1340,2.55,1391,4.94]],["t/301",[34,1.839,47,1.552,57,0.772,63,1.812,68,1.839,93,2.341,101,2.531,103,2.52,185,1.326,216,1.768,241,1.995,259,1.121,314,2.341,398,3.466,428,3.861,523,4.493,682,3.466,683,3.861,696,3.466,697,3.645,699,4.132,752,3.312,754,1.876,755,4.132,757,3.645,829,4.493,1250,1.995,1392,5.043,1393,5.043,1394,5.043,1395,5.043,1396,5.043]],["t/303",[34,2.353,57,0.736,63,1.727,103,2.401,180,5.456,257,2.401,258,1.819,259,1.434,729,5.751,754,2.401,1250,2.554,1340,3.331,1397,6.454]],["t/305",[34,2.322,57,0.726,78,4.183,101,3.952,103,2.369,257,2.369,258,1.795,259,1.416,266,4.604,306,5.218,754,2.369,1250,2.52,1340,3.287,1398,6.369]],["t/307",[34,2.152,38,1.962,57,0.673,67,1.817,88,1.955,103,2.196,257,2.196,258,1.663,259,1.312,626,3.453,754,2.196,1250,2.336,1340,3.047,1399,5.903,1400,4.836,1401,5.26,1402,5.903,1403,5.903,1404,5.903]],["t/309",[14,2.44,34,2.029,38,1.322,57,0.635,60,3.654,68,2.636,103,2.987,251,3.654,257,2.07,258,1.568,259,1.237,754,2.07,855,4.559,1053,4.559,1250,2.202,1340,2.872,1400,6.578,1405,5.564,1406,5.564,1407,5.564]],["t/311",[14,2.422,34,2.006,38,1.307,57,0.627,60,3.613,103,2.97,241,2.839,251,3.613,257,2.046,258,1.55,259,1.223,691,5.558,731,4.507,754,2.046,883,5.879,1250,2.177,1340,2.839,1408,5.501,1409,4.507]],["t/313",[14,2.302,34,1.858,38,1.827,57,0.581,60,3.347,103,2.86,241,2.699,251,3.347,257,1.895,258,1.436,259,1.133,691,5.05,731,4.175,754,1.895,883,5.589,1215,3.902,1216,3.902,1250,2.016,1340,2.63,1401,4.541,1409,4.175,1410,5.096,1411,5.096,1412,5.096,1413,5.096]],["t/315",[34,1.748,38,1.903,57,0.746,85,3.285,94,3.67,103,1.783,185,1.261,186,3.927,213,2.906,240,3.294,257,1.783,258,1.844,259,1.065,689,3.294,690,5.122,752,4.298,754,1.783,1215,5.011,1216,3.67,1250,1.897,1340,2.474,1414,4.793,1415,4.271,1416,4.271,1417,5.832,1418,4.271,1419,4.271,1420,4.793,1421,4.271]],["t/317",[67,2.013,88,2.166,259,1.454,688,4.728,690,4.495,737,5.008,1400,5.359,1422,6.541,1423,6.541,1424,6.541,1425,6.541,1426,6.541,1427,6.541]],["t/319",[14,1.602,38,2.05,57,0.953,63,1.739,102,2.259,185,1.248,240,3.262,258,1.832,259,1.055,556,2.522,720,3.262,994,3.634,1096,3.117,1250,1.878,1310,3.889,1409,3.889,1428,4.746,1429,4.746,1430,4.746,1431,6.501,1432,6.501,1433,4.746,1434,4.746,1435,4.746,1436,4.746,1437,4.746,1438,4.746,1439,4.746]],["t/321",[38,1.911,57,0.751,85,2.43,94,3.707,103,1.801,185,1.273,186,3.966,213,2.935,240,3.327,257,1.801,258,1.857,259,1.076,606,3.05,689,3.327,690,5.148,752,4.327,754,1.801,1215,5.045,1216,3.707,1250,1.916,1340,2.499,1415,4.314,1416,4.314,1417,5.872,1418,4.314,1419,4.314,1421,4.314,1440,4.841,1441,4.841]],["t/323",[13,5.399,14,1.634,34,2.403,38,1.15,39,1.957,45,2,47,1.49,52,2.092,57,0.552,105,3.707,213,2.935,258,2.111,259,1.076,276,3.966,380,3.05,438,6.137,565,3.707,602,3.966,723,5.148,816,6.675,866,4.314,901,3.5,1083,4.314,1250,1.916,1442,4.841,1443,4.841,1444,4.841,1445,4.841,1446,4.841]],["t/325",[36,2.677,57,0.87,185,1.127,216,1.502,217,2.506,258,2.15,259,0.952,315,2.506,396,3.316,481,1.989,533,3.818,754,2.252,808,2.814,991,3.51,1096,2.814,1157,4.257,1177,4.161,1207,2.506,1250,2.396,1270,2.945,1362,4.96,1374,3.818,1447,4.285,1448,5.395,1449,4.285,1450,5.395,1451,3.818,1452,4.285,1453,4.285,1454,4.285,1455,4.285,1456,4.285,1457,4.285,1458,3.51,1459,4.285,1460,4.285]],["t/327",[34,2.053,36,2.491,57,0.974,185,1.019,216,1.358,217,2.266,257,1.441,258,2.181,259,0.861,318,1.6,396,2.122,451,2.348,481,1.798,506,3.173,723,2.662,754,2.468,808,2.544,849,3.085,892,2.8,1067,3.635,1153,3.173,1177,4.561,1230,2.544,1250,2.228,1270,2.662,1340,2.907,1351,3.451,1448,3.451,1450,5.018,1451,3.451,1458,3.173,1461,3.873,1462,3.873,1463,3.873,1464,3.873,1465,5.632,1466,3.451,1467,3.873,1468,3.873,1469,3.873]],["t/329",[18,3.075,34,2.007,36,1.66,50,1.448,57,0.871,159,1.937,185,0.987,216,1.316,217,2.196,257,1.396,258,1.836,259,0.834,271,2.579,294,2.196,313,4.509,315,3.219,318,2.274,396,2.056,427,2.713,481,2.555,754,2.047,808,2.465,880,3.344,892,2.713,893,4.479,1067,3.57,1143,5.524,1177,4.933,1188,2.365,1250,2.178,1270,2.579,1340,1.937,1458,3.075,1466,4.904,1470,3.753,1471,3.753,1472,3.753,1473,3.753,1474,3.753,1475,5.504,1476,3.753]],["t/331",[14,2.122,45,2.597,57,0.717,63,1.682,179,4.128,181,3.071,257,2.338,258,1.771,259,1.397,754,2.338,858,4.813,1250,2.487,1340,3.244,1477,6.286,1478,7.812]],["t/333",[14,1.857,45,2.273,57,0.627,63,1.472,179,3.613,181,2.687,251,3.613,257,2.046,258,2.25,259,1.223,689,4.931,691,3.613,754,2.046,1188,3.466,1250,2.177,1291,5.879,1340,2.839,1479,5.501,1480,7.985,1481,5.501,1482,5.501]]],"invertedIndex":[["",{"_index":57,"t":{"10":{"position":[[58,2]]},"12":{"position":[[37,2]]},"16":{"position":[[54,2]]},"26":{"position":[[42,2]]},"28":{"position":[[32,1]]},"41":{"position":[[448,1],[508,3],[513,1],[515,2],[518,2],[521,2],[524,3],[528,2],[618,1],[634,1],[638,1],[658,1],[662,1],[931,3],[990,1],[1026,1],[1064,1],[1107,1],[1159,1],[1213,1]]},"49":{"position":[[73,1],[353,1],[400,1],[402,1]]},"53":{"position":[[54,1],[56,1],[58,1],[70,1],[85,1],[101,1],[115,1],[117,1]]},"59":{"position":[[335,1],[337,1],[339,1],[370,1],[425,1],[486,1],[502,2],[505,1],[543,1],[585,1],[634,1],[648,1],[650,1]]},"63":{"position":[[280,1],[310,1]]},"71":{"position":[[51,1],[75,1],[91,1],[123,1],[125,1],[130,1],[132,1]]},"73":{"position":[[12,1],[47,1],[53,1],[66,1],[84,1],[90,1],[104,1],[120,1],[134,1]]},"75":{"position":[[2,1],[11,1],[75,1],[84,1],[281,1],[287,1],[296,2]]},"77":{"position":[[6,1],[91,1],[150,1],[201,1],[287,1],[298,1],[499,1]]},"79":{"position":[[6,1],[55,1],[260,1],[279,1],[289,1],[331,1],[425,1],[441,1]]},"81":{"position":[[8,1],[20,1],[38,1],[72,1],[84,1],[96,1],[106,1],[126,1],[136,1]]},"83":{"position":[[90,1],[125,1],[129,1],[220,1],[245,2]]},"85":{"position":[[36,1],[48,1],[60,1],[137,1],[232,1],[284,1],[303,1],[333,1]]},"87":{"position":[[14,1],[104,1],[106,1],[130,1],[138,1],[182,1],[297,1],[299,1],[308,1],[321,1],[337,1],[350,1],[359,1],[666,1],[690,1],[1217,1]]},"89":{"position":[[14,1],[126,1]]},"108":{"position":[[405,1],[513,1]]},"112":{"position":[[81,1],[83,2],[559,1],[561,3],[565,2],[924,1],[953,1],[957,1],[1515,1],[1556,1],[1586,1],[1600,1],[1613,1],[1626,1],[1630,1],[1689,1],[1722,1],[1818,1],[1830,1],[1908,1],[1926,1],[2013,1],[2132,1],[2237,1],[2244,1],[2316,1],[2320,1],[2611,1],[2717,1],[2946,1],[2957,1],[2987,1],[3007,2]]},"114":{"position":[[143,1]]},"116":{"position":[[284,1],[297,1],[310,1],[314,1],[565,1],[567,3],[571,2],[587,1],[628,1],[658,1],[672,1],[685,1],[698,1],[702,1],[761,1],[794,1],[890,1],[902,1],[980,1],[998,1],[1085,1],[1204,1],[1309,1],[1316,1],[1388,1],[1392,1],[1516,1],[1622,1],[1775,1],[1786,1],[1816,1],[1836,2],[2363,1],[2400,1],[2486,1],[2506,1],[2593,1],[2614,1],[2671,1],[2693,1],[2997,1],[3338,1],[3359,1],[3455,1],[3468,1]]},"118":{"position":[[58,1],[71,1],[84,1],[88,1],[162,1],[175,1],[188,1],[192,1],[728,1],[749,1],[774,1],[796,1],[1357,1],[1370,1],[1388,1],[1401,1],[2003,1]]},"147":{"position":[[114,1],[294,1]]},"159":{"position":[[449,1],[476,1],[2084,1],[2106,1],[2129,1],[2152,1],[2979,1],[3069,1],[3229,2],[3327,5]]},"181":{"position":[[94,1],[142,1],[144,2]]},"185":{"position":[[61,1],[365,1],[386,1]]},"187":{"position":[[96,2]]},"189":{"position":[[96,1]]},"191":{"position":[[136,1],[205,1],[207,2],[233,1],[246,1]]},"195":{"position":[[63,1]]},"197":{"position":[[70,1]]},"203":{"position":[[455,1]]},"207":{"position":[[65,1],[275,1],[277,1],[772,1],[793,1],[821,1]]},"209":{"position":[[69,1],[93,1],[95,1],[245,1]]},"211":{"position":[[58,1],[88,1],[200,1]]},"213":{"position":[[77,1],[122,1],[124,1],[651,1],[664,1],[705,1],[747,1]]},"215":{"position":[[65,1]]},"217":{"position":[[84,2]]},"219":{"position":[[71,1]]},"221":{"position":[[83,1]]},"223":{"position":[[103,2]]},"225":{"position":[[207,1],[259,1],[261,2],[274,2],[277,1]]},"227":{"position":[[104,2],[249,1]]},"229":{"position":[[130,1],[205,1]]},"231":{"position":[[107,1],[144,2]]},"233":{"position":[[58,1]]},"235":{"position":[[80,1]]},"237":{"position":[[106,1]]},"239":{"position":[[50,2]]},"241":{"position":[[71,2]]},"243":{"position":[[98,2]]},"245":{"position":[[102,2]]},"247":{"position":[[103,2]]},"249":{"position":[[57,2]]},"251":{"position":[[73,1],[267,1],[269,2],[1024,1],[1063,1],[1112,1],[1193,1]]},"253":{"position":[[49,2]]},"255":{"position":[[86,1],[149,1],[151,2],[715,1],[740,1],[758,1]]},"257":{"position":[[61,2]]},"259":{"position":[[95,2]]},"261":{"position":[[82,2],[258,1]]},"263":{"position":[[64,2]]},"265":{"position":[[72,2]]},"267":{"position":[[93,2]]},"269":{"position":[[54,2]]},"271":{"position":[[94,2]]},"273":{"position":[[46,2]]},"275":{"position":[[61,2]]},"277":{"position":[[100,1],[215,1]]},"279":{"position":[[91,1],[197,1]]},"281":{"position":[[144,1]]},"287":{"position":[[78,1]]},"289":{"position":[[66,1]]},"291":{"position":[[75,1],[333,1],[413,1]]},"295":{"position":[[66,1],[127,1],[129,2]]},"297":{"position":[[89,1]]},"299":{"position":[[88,1],[303,1]]},"301":{"position":[[115,1],[298,1]]},"303":{"position":[[75,1]]},"305":{"position":[[73,1]]},"307":{"position":[[106,1]]},"309":{"position":[[74,1]]},"311":{"position":[[82,1]]},"313":{"position":[[130,1]]},"315":{"position":[[142,1],[423,1]]},"319":{"position":[[88,1],[279,1],[281,1],[461,1],[480,1]]},"321":{"position":[[148,1],[427,1]]},"323":{"position":[[90,1]]},"325":{"position":[[129,1],[546,1],[548,2],[575,1]]},"327":{"position":[[108,1],[562,1],[564,2],[616,1],[618,2],[679,1],[681,2],[711,1]]},"329":{"position":[[115,1],[582,1],[785,1],[787,2],[819,2]]},"331":{"position":[[87,1]]},"333":{"position":[[89,1]]}}}],["0",{"_index":68,"t":{"14":{"position":[[98,2]]},"26":{"position":[[140,3]]},"41":{"position":[[971,3]]},"51":{"position":[[714,2]]},"63":{"position":[[163,1]]},"77":{"position":[[203,2],[238,1]]},"81":{"position":[[22,1],[98,1],[108,1]]},"83":{"position":[[92,1]]},"112":{"position":[[911,1],[1588,1],[1602,2],[1665,1]]},"114":{"position":[[251,2]]},"116":{"position":[[286,2],[660,1],[674,2],[737,1],[2999,1],[3251,1],[3361,1]]},"118":{"position":[[60,2],[164,2],[751,1],[798,1],[2219,1]]},"159":{"position":[[1438,2],[1574,1],[1748,2],[1945,1],[2131,1]]},"191":{"position":[[138,1]]},"195":{"position":[[183,3]]},"197":{"position":[[497,3]]},"199":{"position":[[79,1],[88,1]]},"203":{"position":[[220,1],[274,1],[320,1],[375,1]]},"205":{"position":[[145,3]]},"207":{"position":[[363,3]]},"209":{"position":[[156,3]]},"213":{"position":[[794,2]]},"215":{"position":[[190,1]]},"233":{"position":[[187,2]]},"235":{"position":[[213,2]]},"237":{"position":[[282,3]]},"299":{"position":[[228,2],[411,2]]},"301":{"position":[[417,2]]},"309":{"position":[[164,1],[212,1]]}}}],["0,0,0",{"_index":401,"t":{"59":{"position":[[372,9],[545,9]]}}}],["0,1",{"_index":424,"t":{"63":{"position":[[282,7]]}}}],["0,1,2",{"_index":426,"t":{"63":{"position":[[312,10]]}}}],["0,1,2,0",{"_index":412,"t":{"59":{"position":[[636,11]]}}}],["0,1,2,3,0",{"_index":410,"t":{"59":{"position":[[488,13]]}}}],["0,500,0",{"_index":404,"t":{"59":{"position":[[406,11],[566,11]]}}}],["0.3",{"_index":330,"t":{"53":{"position":[[87,4]]}}}],["0fx",{"_index":752,"t":{"114":{"position":[[66,5],[72,5],[181,4]]},"185":{"position":[[224,5]]},"207":{"position":[[425,3]]},"299":{"position":[[341,4]]},"301":{"position":[[336,4]]},"315":{"position":[[430,4],[435,4]]},"321":{"position":[[434,4],[439,4]]}}}],["0x80",{"_index":198,"t":{"39":{"position":[[336,5]]}}}],["0xff0000",{"_index":196,"t":{"39":{"position":[[302,10]]}}}],["0xff000000",{"_index":435,"t":{"65":{"position":[[245,10]]}}}],["0xff000080",{"_index":192,"t":{"39":{"position":[[274,10]]},"65":{"position":[[206,10]]}}}],["0xff0000ff",{"_index":408,"t":{"59":{"position":[[464,12],[612,12]]},"65":{"position":[[181,10]]}}}],["0xff00ffff",{"_index":407,"t":{"59":{"position":[[452,11],[600,11]]}}}],["0xffff00ff",{"_index":406,"t":{"59":{"position":[[440,11],[587,12]]},"207":{"position":[[823,12]]}}}],["0xffffffff",{"_index":405,"t":{"59":{"position":[[427,12]]},"237":{"position":[[484,11],[563,11]]}}}],["1",{"_index":241,"t":{"41":{"position":[[1016,1],[1054,1]]},"77":{"position":[[8,2],[93,2],[123,1],[152,2],[185,1],[212,1],[241,1],[300,2]]},"79":{"position":[[8,2],[57,2],[291,2],[333,2],[389,1],[399,1],[427,2],[443,2]]},"81":{"position":[[44,1],[62,1],[132,1],[142,1],[164,1]]},"83":{"position":[[131,1],[222,2],[277,1]]},"87":{"position":[[86,1],[140,2]]},"89":{"position":[[90,1],[261,1]]},"112":{"position":[[2015,3],[2239,2]]},"116":{"position":[[1087,3],[1311,2],[3470,1]]},"118":{"position":[[1372,1],[2005,2],[2269,1]]},"133":{"position":[[21,1]]},"151":{"position":[[803,2]]},"159":{"position":[[1730,1],[1773,2]]},"191":{"position":[[248,1]]},"195":{"position":[[213,3]]},"197":{"position":[[527,3]]},"203":{"position":[[280,3],[381,3]]},"205":{"position":[[175,3]]},"207":{"position":[[393,3]]},"209":{"position":[[186,3]]},"237":{"position":[[296,1],[427,3]]},"255":{"position":[[309,1],[556,2]]},"301":{"position":[[420,2]]},"311":{"position":[[174,1],[234,1]]},"313":{"position":[[243,1],[303,1]]}}}],["1,2",{"_index":425,"t":{"63":{"position":[[290,6]]}}}],["1,5,3",{"_index":567,"t":{"87":{"position":[[16,7]]}}}],["1.0fx",{"_index":242,"t":{"41":{"position":[[1028,5]]}}}],["1.2048fx",{"_index":243,"t":{"41":{"position":[[1066,8]]}}}],["1.4095fx",{"_index":245,"t":{"41":{"position":[[1109,8],[1162,8]]}}}],["1.4096fx",{"_index":249,"t":{"41":{"position":[[1215,8]]}}}],["1.5",{"_index":187,"t":{"39":{"position":[[200,3]]},"41":{"position":[[1095,3]]}}}],["1.9997558",{"_index":246,"t":{"41":{"position":[[1138,12],[1192,12]]}}}],["10",{"_index":472,"t":{"73":{"position":[[55,2],[92,2]]},"77":{"position":[[96,2],[141,2],[155,3],[207,3],[268,2]]},"79":{"position":[[262,2],[515,2]]},"83":{"position":[[225,2]]},"223":{"position":[[298,2]]},"237":{"position":[[286,4]]}}}],["100",{"_index":583,"t":{"87":{"position":[[310,4],[829,3],[857,3]]},"237":{"position":[[431,5]]},"251":{"position":[[1114,5]]}}}],["1000",{"_index":269,"t":{"45":{"position":[[116,4]]},"49":{"position":[[365,5]]},"85":{"position":[[367,4]]}}}],["100fx",{"_index":217,"t":{"41":{"position":[[450,5],[620,5]]},"159":{"position":[[1431,6],[2086,5],[2108,5]]},"187":{"position":[[274,6]]},"189":{"position":[[121,6]]},"227":{"position":[[298,6]]},"235":{"position":[[216,6],[223,6]]},"237":{"position":[[477,6],[556,6]]},"325":{"position":[[615,6]]},"327":{"position":[[751,6]]},"329":{"position":[[622,6]]}}}],["10fx",{"_index":1161,"t":{"185":{"position":[[289,6],[296,6]]},"249":{"position":[[166,5]]},"251":{"position":[[985,5],[1143,5]]},"255":{"position":[[693,5]]}}}],["119",{"_index":813,"t":{"118":{"position":[[776,3]]}}}],["12",{"_index":236,"t":{"41":{"position":[[846,2]]},"73":{"position":[[79,2]]}}}],["120",{"_index":804,"t":{"118":{"position":[[194,3],[204,3],[313,3],[599,3]]}}}],["121",{"_index":805,"t":{"118":{"position":[[271,3]]}}}],["128",{"_index":1347,"t":{"263":{"position":[[140,4]]}}}],["1300",{"_index":889,"t":{"131":{"position":[[8,4],[109,4]]}}}],["15",{"_index":517,"t":{"79":{"position":[[709,2]]}}}],["19869",{"_index":941,"t":{"143":{"position":[[314,6]]}}}],["1fx",{"_index":240,"t":{"41":{"position":[[992,3]]},"151":{"position":[[854,4]]},"237":{"position":[[496,4]]},"315":{"position":[[440,4]]},"319":{"position":[[463,4]]},"321":{"position":[[444,4]]}}}],["2",{"_index":93,"t":{"26":{"position":[[144,4]]},"28":{"position":[[39,4]]},"63":{"position":[[342,1]]},"71":{"position":[[89,1]]},"73":{"position":[[49,1],[86,1]]},"77":{"position":[[125,1],[159,1],[244,1]]},"79":{"position":[[409,1],[446,1]]},"81":{"position":[[60,1],[160,1],[166,1]]},"83":{"position":[[138,3],[185,1],[279,1]]},"85":{"position":[[50,1]]},"89":{"position":[[94,1],[278,1]]},"97":{"position":[[81,1]]},"112":{"position":[[926,1],[955,1],[1447,2],[1615,2],[1628,1],[1670,3],[1686,2],[2134,3],[2322,1],[2719,1]]},"116":{"position":[[299,2],[312,1],[420,2],[687,2],[700,1],[742,3],[758,2],[1206,3],[1394,1],[1624,1]]},"118":{"position":[[73,2],[86,1],[177,2],[190,1],[1403,1],[2399,2],[2439,1],[2549,1],[2562,2]]},"151":{"position":[[806,2]]},"159":{"position":[[1758,1]]},"301":{"position":[[226,1]]}}}],["2.2048fx",{"_index":999,"t":{"151":{"position":[[1052,9],[1284,9]]}}}],["2.5",{"_index":998,"t":{"151":{"position":[[1034,3]]}}}],["2.6fx",{"_index":997,"t":{"151":{"position":[[1001,5]]}}}],["20",{"_index":585,"t":{"87":{"position":[[323,3],[884,2]]},"237":{"position":[[501,3]]}}}],["200",{"_index":1172,"t":{"187":{"position":[[207,3]]}}}],["2000",{"_index":298,"t":{"49":{"position":[[381,5]]}}}],["200fx",{"_index":1163,"t":{"185":{"position":[[388,5]]},"187":{"position":[[281,6],[288,6]]},"189":{"position":[[128,6],[135,6]]},"213":{"position":[[787,6]]}}}],["202",{"_index":614,"t":{"89":{"position":[[27,4],[105,3]]}}}],["220",{"_index":542,"t":{"85":{"position":[[186,3]]}}}],["23902",{"_index":942,"t":{"143":{"position":[[321,6]]}}}],["25",{"_index":496,"t":{"77":{"position":[[289,2],[368,2]]}}}],["250",{"_index":599,"t":{"87":{"position":[[692,3],[1012,3]]}}}],["255",{"_index":1482,"t":{"333":{"position":[[278,4]]}}}],["256",{"_index":1348,"t":{"263":{"position":[[148,4]]}}}],["27",{"_index":551,"t":{"85":{"position":[[364,2]]}}}],["28013",{"_index":943,"t":{"143":{"position":[[328,6]]}}}],["28fx",{"_index":1371,"t":{"289":{"position":[[175,5]]}}}],["2fx",{"_index":994,"t":{"151":{"position":[[859,4]]},"255":{"position":[[717,4]]},"291":{"position":[[415,4]]},"319":{"position":[[482,5]]}}}],["2pi",{"_index":1197,"t":{"203":{"position":[[226,5],[326,5]]}}}],["2Ï€/120",{"_index":820,"t":{"118":{"position":[[1047,6]]}}}],["2Ï€/60",{"_index":819,"t":{"118":{"position":[[1003,5]]}}}],["3",{"_index":230,"t":{"41":{"position":[[664,1],[677,1]]},"71":{"position":[[53,2],[77,3],[93,1]]},"77":{"position":[[127,1],[187,1],[247,1]]},"79":{"position":[[60,1],[637,1]]},"81":{"position":[[10,1],[58,1],[74,1],[156,1],[162,1]]},"83":{"position":[[248,1],[281,1]]},"87":{"position":[[90,1]]},"89":{"position":[[16,3],[33,2],[92,1],[98,1],[112,1],[295,1]]},"112":{"position":[[2246,3],[2613,1]]},"116":{"position":[[1318,3],[1518,1]]},"118":{"position":[[2483,1]]},"141":{"position":[[41,1]]},"151":{"position":[[809,2]]},"199":{"position":[[85,2],[149,1],[166,2]]},"207":{"position":[[774,2]]},"251":{"position":[[1195,3]]}}}],["30",{"_index":182,"t":{"39":{"position":[[126,2]]},"51":{"position":[[45,3]]},"106":{"position":[[90,2],[373,2]]},"116":{"position":[[3802,2],[3866,2],[4097,2]]},"118":{"position":[[1740,2]]},"255":{"position":[[580,2]]}}}],["3000",{"_index":300,"t":{"49":{"position":[[395,4]]}}}],["300fx",{"_index":1056,"t":{"159":{"position":[[451,5]]},"185":{"position":[[367,5]]}}}],["30fx",{"_index":1274,"t":{"227":{"position":[[305,5]]}}}],["30hz",{"_index":801,"t":{"116":{"position":[[4316,6]]}}}],["32",{"_index":188,"t":{"39":{"position":[[234,2]]},"65":{"position":[[161,2]]}}}],["350",{"_index":289,"t":{"49":{"position":[[221,3]]},"51":{"position":[[235,3]]}}}],["3d",{"_index":393,"t":{"59":{"position":[[51,3]]},"99":{"position":[[217,2]]}}}],["3fx",{"_index":227,"t":{"41":{"position":[[640,3]]},"151":{"position":[[864,4]]},"237":{"position":[[575,4]]}}}],["3mb",{"_index":907,"t":{"135":{"position":[[192,3],[348,3]]}}}],["4",{"_index":491,"t":{"77":{"position":[[129,1],[250,1]]},"81":{"position":[[86,1],[158,1]]},"85":{"position":[[38,1]]},"89":{"position":[[20,2],[96,1],[103,1],[315,1]]},"118":{"position":[[2532,1]]}}}],["400",{"_index":1321,"t":{"251":{"position":[[942,3]]}}}],["400fx",{"_index":1058,"t":{"159":{"position":[[478,5],[954,7]]}}}],["40124",{"_index":944,"t":{"143":{"position":[[335,6]]}}}],["4095",{"_index":239,"t":{"41":{"position":[[975,6]]}}}],["4096",{"_index":252,"t":{"41":{"position":[[1270,4]]}}}],["42",{"_index":1152,"t":{"181":{"position":[[96,2]]}}}],["45",{"_index":186,"t":{"39":{"position":[[180,2]]},"315":{"position":[[330,2]]},"321":{"position":[[328,2]]}}}],["48",{"_index":736,"t":{"112":{"position":[[1558,2]]},"116":{"position":[[630,2]]}}}],["49152",{"_index":935,"t":{"143":{"position":[[227,5]]}}}],["4fx",{"_index":1345,"t":{"261":{"position":[[260,4]]}}}],["5",{"_index":460,"t":{"71":{"position":[[64,1]]},"73":{"position":[[14,1],[43,1]]},"75":{"position":[[13,1],[40,4],[70,2],[283,1],[289,1]]},"77":{"position":[[11,1],[69,1],[131,1],[189,1],[253,1]]},"79":{"position":[[11,1],[139,1],[281,1],[430,1],[679,1]]},"87":{"position":[[88,1]]},"89":{"position":[[109,1]]}}}],["5.3",{"_index":917,"t":{"139":{"position":[[31,4]]}}}],["50",{"_index":812,"t":{"118":{"position":[[554,3]]},"237":{"position":[[580,3]]}}}],["500",{"_index":328,"t":{"53":{"position":[[72,4]]}}}],["500,0,0",{"_index":402,"t":{"59":{"position":[[382,10],[555,10]]}}}],["500,500,0",{"_index":403,"t":{"59":{"position":[[393,12]]}}}],["500kb",{"_index":902,"t":{"135":{"position":[[40,5]]}}}],["500x500",{"_index":399,"t":{"59":{"position":[[346,7]]}}}],["50fx",{"_index":1222,"t":{"207":{"position":[[795,5]]},"261":{"position":[[203,5]]}}}],["51980",{"_index":930,"t":{"143":{"position":[[71,5]]}}}],["51989",{"_index":933,"t":{"143":{"position":[[151,6]]}}}],["52",{"_index":234,"t":{"41":{"position":[[792,2]]}}}],["58240",{"_index":945,"t":{"143":{"position":[[342,6]]}}}],["59",{"_index":787,"t":{"116":{"position":[[3185,3],[3340,2]]},"118":{"position":[[730,2]]}}}],["5fx/2fx",{"_index":1002,"t":{"151":{"position":[[1300,8]]}}}],["6",{"_index":479,"t":{"75":{"position":[[4,1]]},"77":{"position":[[133,1],[256,1]]},"85":{"position":[[90,1]]},"112":{"position":[[959,1],[1632,1],[1691,2]]},"116":{"position":[[704,1],[763,2]]}}}],["60",{"_index":696,"t":{"106":{"position":[[479,2],[731,2]]},"108":{"position":[[415,3]]},"116":{"position":[[316,2],[349,2],[410,2],[2734,2],[3061,2],[4177,2],[4469,2]]},"118":{"position":[[90,2],[99,2],[1136,2],[2657,2],[2916,2]]},"255":{"position":[[742,3]]},"301":{"position":[[245,2]]}}}],["6000fx",{"_index":1160,"t":{"185":{"position":[[230,8]]}}}],["60fp",{"_index":769,"t":{"116":{"position":[[469,5]]}}}],["60th",{"_index":786,"t":{"116":{"position":[[3171,4]]},"118":{"position":[[524,4]]}}}],["61",{"_index":784,"t":{"116":{"position":[[3078,2]]}}}],["64",{"_index":233,"t":{"41":{"position":[[774,2]]},"263":{"position":[[136,3]]}}}],["65535",{"_index":936,"t":{"143":{"position":[[233,5]]}}}],["7",{"_index":492,"t":{"77":{"position":[[135,1],[191,1],[259,1]]}}}],["77",{"_index":543,"t":{"85":{"position":[[190,2]]}}}],["8",{"_index":493,"t":{"77":{"position":[[137,1],[262,1]]},"85":{"position":[[362,1]]}}}],["8fx",{"_index":1421,"t":{"315":{"position":[[425,4]]},"321":{"position":[[429,4]]}}}],["9",{"_index":494,"t":{"77":{"position":[[139,1],[193,1],[265,1]]}}}],["90",{"_index":797,"t":{"116":{"position":[[4187,2]]}}}],["9000",{"_index":948,"t":{"143":{"position":[[424,5]]}}}],["96",{"_index":735,"t":{"112":{"position":[[1517,2]]},"116":{"position":[[589,2]]}}}],["99",{"_index":613,"t":{"89":{"position":[[23,3],[100,2]]}}}],["ab",{"_index":140,"t":{"36":{"position":[[237,3]]}}}],["abov",{"_index":531,"t":{"83":{"position":[[43,5],[165,5]]},"159":{"position":[[1978,5],[2056,5],[4039,5],[4358,6]]}}}],["absent",{"_index":165,"t":{"36":{"position":[[409,6]]}}}],["absolut",{"_index":80,"t":{"20":{"position":[[64,8]]}}}],["abstract",{"_index":845,"t":{"121":{"position":[[146,8]]}}}],["acceler",{"_index":1342,"t":{"259":{"position":[[51,13],[195,10],[219,13]]}}}],["accept",{"_index":268,"t":{"45":{"position":[[90,7]]}}}],["access",{"_index":108,"t":{"30":{"position":[[200,6]]},"153":{"position":[[288,6]]}}}],["accord",{"_index":1259,"t":{"223":{"position":[[260,9]]},"259":{"position":[[206,9]]}}}],["account",{"_index":654,"t":{"95":{"position":[[47,7]]},"118":{"position":[[654,7]]}}}],["accumul",{"_index":877,"t":{"128":{"position":[[49,10]]}}}],["achiev",{"_index":683,"t":{"104":{"position":[[35,8]]},"106":{"position":[[471,7],[723,7]]},"118":{"position":[[1126,7]]},"301":{"position":[[270,9]]}}}],["aco",{"_index":141,"t":{"36":{"position":[[241,4]]}}}],["actual",{"_index":1083,"t":{"159":{"position":[[2659,8]]},"323":{"position":[[194,8]]}}}],["ad",{"_index":744,"t":{"112":{"position":[[2350,5]]},"187":{"position":[[224,5]]}}}],["add",{"_index":606,"t":{"87":{"position":[[1192,3]]},"112":{"position":[[331,3],[446,3],[1144,3],[1179,3],[2864,3]]},"116":{"position":[[2283,3],[2440,3]]},"185":{"position":[[98,4]]},"187":{"position":[[103,4]]},"191":{"position":[[54,4]]},"217":{"position":[[91,4]]},"321":{"position":[[150,4]]}}}],["addit",{"_index":439,"t":{"65":{"position":[[320,8]]}}}],["addnum(44,33",{"_index":541,"t":{"85":{"position":[[164,13]]}}}],["addnum(99,121",{"_index":540,"t":{"85":{"position":[[149,14]]}}}],["addnum(num1",{"_index":537,"t":{"85":{"position":[[107,12]]}}}],["advanc",{"_index":369,"t":{"55":{"position":[[49,8]]},"99":{"position":[[279,8]]}}}],["afterward",{"_index":1262,"t":{"223":{"position":[[565,11]]}}}],["again",{"_index":712,"t":{"110":{"position":[[132,6]]},"114":{"position":[[540,5]]},"153":{"position":[[304,6]]},"157":{"position":[[164,6]]}}}],["ahead",{"_index":1091,"t":{"159":{"position":[[3850,5]]}}}],["aka",{"_index":95,"t":{"28":{"position":[[34,4]]},"153":{"position":[[255,3]]}}}],["aliv",{"_index":887,"t":{"128":{"position":[[276,6]]},"229":{"position":[[93,6]]},"283":{"position":[[101,5]]},"291":{"position":[[169,6]]}}}],["allow",{"_index":13,"t":{"2":{"position":[[133,6]]},"79":{"position":[[547,7]]},"323":{"position":[[152,6],[227,6]]}}}],["along",{"_index":1215,"t":{"207":{"position":[[519,5]]},"313":{"position":[[203,5]]},"315":{"position":[[249,5],[341,5]]},"321":{"position":[[247,5],[339,5]]}}}],["alpha",{"_index":197,"t":{"39":{"position":[[321,5]]}}}],["alreadi",{"_index":169,"t":{"36":{"position":[[446,7]]},"91":{"position":[[253,7]]},"112":{"position":[[2812,7]]},"116":{"position":[[1717,7],[3980,7]]},"131":{"position":[[101,7]]},"155":{"position":[[604,7]]}}}],["altern",{"_index":1396,"t":{"301":{"position":[[199,12]]}}}],["although",{"_index":273,"t":{"47":{"position":[[150,8]]},"116":{"position":[[3189,9]]},"155":{"position":[[848,8]]}}}],["alway",{"_index":1446,"t":{"323":{"position":[[402,6]]}}}],["amaz",{"_index":709,"t":{"108":{"position":[[441,12]]}}}],["amount",{"_index":553,"t":{"85":{"position":[[408,6]]},"118":{"position":[[1211,6]]},"183":{"position":[[84,6]]},"195":{"position":[[135,6]]},"197":{"position":[[157,6]]},"215":{"position":[[79,6]]}}}],["amplif",{"_index":337,"t":{"53":{"position":[[259,13]]}}}],["angl",{"_index":85,"t":{"24":{"position":[[89,6],[96,5]]},"41":{"position":[[181,7]]},"59":{"position":[[518,6]]},"112":{"position":[[1042,5],[1594,5],[1659,5]]},"116":{"position":[[666,5],[731,5],[2174,6],[2262,5],[2307,7]]},"203":{"position":[[205,5],[305,5]]},"243":{"position":[[46,6],[175,5],[195,5]]},"245":{"position":[[50,6],[236,5],[256,5]]},"247":{"position":[[51,6],[240,6],[247,5],[267,5]]},"259":{"position":[[77,6],[294,6]]},"261":{"position":[[64,6]]},"267":{"position":[[56,6],[155,5],[161,5]]},"271":{"position":[[57,6]]},"315":{"position":[[64,6],[162,5]]},"321":{"position":[[70,6]]}}}],["angle_offset",{"_index":766,"t":{"116":{"position":[[271,12],[2422,13],[2508,13]]},"118":{"position":[[45,12],[149,12],[972,12]]}}}],["angular",{"_index":842,"t":{"121":{"position":[[96,7]]}}}],["anim",{"_index":682,"t":{"104":{"position":[[5,10]]},"106":{"position":[[262,11],[342,10],[491,11],[738,11]]},"108":{"position":[[30,9]]},"116":{"position":[[15,9],[329,9],[456,9],[2773,7],[3669,10],[3749,10],[3773,9],[3845,9],[4396,9],[4443,9]]},"118":{"position":[[457,9],[570,10],[840,9],[1143,9],[1282,9],[1426,9],[1601,9],[1716,9],[2634,9],[2769,10],[2893,9],[3045,11]]},"301":{"position":[[252,10]]}}}],["anoth",{"_index":984,"t":{"151":{"position":[[0,7],[880,7]]},"159":{"position":[[1066,7],[2006,7]]}}}],["anyth",{"_index":462,"t":{"71":{"position":[[95,8],[200,8]]}}}],["anytim",{"_index":1449,"t":{"325":{"position":[[266,7]]}}}],["anyway",{"_index":1092,"t":{"159":{"position":[[3873,7]]}}}],["anywher",{"_index":307,"t":{"51":{"position":[[179,9]]}}}],["api",{"_index":166,"t":{"36":{"position":[[416,3]]},"45":{"position":[[81,3]]},"106":{"position":[[419,3]]},"116":{"position":[[3267,5]]},"147":{"position":[[339,4]]},"149":{"position":[[98,4],[309,6]]},"151":{"position":[[25,3]]},"153":{"position":[[68,3],[688,4]]},"159":{"position":[[214,4],[1098,4]]}}}],["appear",{"_index":883,"t":{"128":{"position":[[185,9]]},"311":{"position":[[191,6],[251,6]]},"313":{"position":[[260,6],[320,6]]}}}],["appli",{"_index":689,"t":{"106":{"position":[[182,7]]},"124":{"position":[[261,7]]},"223":{"position":[[556,8]]},"315":{"position":[[241,7]]},"321":{"position":[[239,7]]},"333":{"position":[[293,7],[323,7]]}}}],["approach",{"_index":638,"t":{"91":{"position":[[295,8]]}}}],["arc",{"_index":90,"t":{"26":{"position":[[91,3]]}}}],["argument",{"_index":486,"t":{"75":{"position":[[445,9]]},"251":{"position":[[835,9]]}}}],["arithmet",{"_index":220,"t":{"41":{"position":[[480,10]]}}}],["array",{"_index":302,"t":{"51":{"position":[[79,5]]}}}],["arrow",{"_index":1039,"t":{"157":{"position":[[654,6]]},"217":{"position":[[99,5],[230,6],[276,5]]},"219":{"position":[[85,5]]}}}],["arrow'",{"_index":1251,"t":{"217":{"position":[[257,7]]}}}],["arrow_id",{"_index":1254,"t":{"219":{"position":[[57,9],[105,8]]}}}],["articl",{"_index":3,"t":{"2":{"position":[[26,8]]}}}],["asin",{"_index":142,"t":{"36":{"position":[[246,4]]}}}],["ask",{"_index":875,"t":{"128":{"position":[[0,3]]},"147":{"position":[[561,3]]}}}],["aspect",{"_index":642,"t":{"91":{"position":[[491,6]]}}}],["assign",{"_index":477,"t":{"73":{"position":[[206,8]]},"75":{"position":[[359,8]]},"108":{"position":[[44,9]]},"159":{"position":[[1663,8]]},"295":{"position":[[570,8],[633,8]]}}}],["assum",{"_index":952,"t":{"145":{"position":[[106,7]]},"223":{"position":[[390,8]]}}}],["asteroid",{"_index":1097,"t":{"164":{"position":[[0,8]]},"239":{"position":[[76,8]]},"241":{"position":[[97,8]]}}}],["asteroids",{"_index":1298,"t":{"241":{"position":[[134,12]]}}}],["astut",{"_index":441,"t":{"67":{"position":[[0,6]]}}}],["atan",{"_index":143,"t":{"36":{"position":[[251,4]]}}}],["atom",{"_index":1139,"t":{"172":{"position":[[17,7]]}}}],["atomize_explos",{"_index":1146,"t":{"176":{"position":[[44,17]]}}}],["attack",{"_index":334,"t":{"53":{"position":[[173,6]]}}}],["attribut",{"_index":1424,"t":{"317":{"position":[[121,10]]}}}],["autocomplet",{"_index":672,"t":{"99":{"position":[[73,14]]}}}],["automat",{"_index":897,"t":{"133":{"position":[[94,14]]},"217":{"position":[[285,13]]}}}],["avail",{"_index":99,"t":{"30":{"position":[[48,9]]},"36":{"position":[[29,9],[79,9]]},"91":{"position":[[587,9]]},"213":{"position":[[369,10]]}}}],["averag",{"_index":1293,"t":{"237":{"position":[[307,7]]}}}],["away",{"_index":855,"t":{"124":{"position":[[151,4]]},"207":{"position":[[451,4]]},"309":{"position":[[240,5]]}}}],["awesom",{"_index":592,"t":{"87":{"position":[[531,8],[902,8]]}}}],["axi",{"_index":1216,"t":{"207":{"position":[[531,5]]},"313":{"position":[[219,5]]},"315":{"position":[[259,4]]},"321":{"position":[[257,4]]}}}],["b",{"_index":226,"t":{"41":{"position":[[632,1],[1024,1]]},"75":{"position":[[82,1],[129,1],[182,1],[230,1]]}}}],["back",{"_index":390,"t":{"57":{"position":[[221,4]]},"91":{"position":[[424,4]]},"118":{"position":[[1292,4]]},"145":{"position":[[171,4]]},"157":{"position":[[433,4]]},"159":{"position":[[193,4],[1522,4],[3682,5],[3713,4]]}}}],["bad",{"_index":872,"t":{"126":{"position":[[223,3]]}}}],["baf",{"_index":1098,"t":{"164":{"position":[[9,3]]},"231":{"position":[[204,5]]},"243":{"position":[[124,3],[214,3],[338,3],[425,3]]},"245":{"position":[[132,3],[189,3],[231,4],[275,3],[399,3],[486,3]]},"247":{"position":[[134,3],[192,3],[286,3],[410,3],[497,3]]}}}],["baf_blu",{"_index":1108,"t":{"164":{"position":[[126,8]]}}}],["baf_r",{"_index":1109,"t":{"164":{"position":[[135,7]]}}}],["bag",{"_index":914,"t":{"137":{"position":[[28,3]]}}}],["base",{"_index":418,"t":{"63":{"position":[[165,5]]},"108":{"position":[[89,4]]},"110":{"position":[[25,5]]},"223":{"position":[[204,4],[277,4],[376,4],[403,4],[609,4],[687,4]]}}}],["basic",{"_index":381,"t":{"57":{"position":[[55,5]]},"89":{"position":[[386,9]]},"108":{"position":[[352,5]]},"145":{"position":[[128,5]]}}}],["be",{"_index":1093,"t":{"159":{"position":[[3978,5]]},"237":{"position":[[298,5]]},"285":{"position":[[137,5]]}}}],["becom",{"_index":900,"t":{"133":{"position":[[161,6]]}}}],["befor",{"_index":377,"t":{"57":{"position":[[0,6]]},"108":{"position":[[0,6]]},"149":{"position":[[0,6]]},"159":{"position":[[991,6],[2445,6]]},"255":{"position":[[383,6]]}}}],["begin",{"_index":955,"t":{"147":{"position":[[15,5]]},"149":{"position":[[10,5]]}}}],["beginn",{"_index":384,"t":{"57":{"position":[[153,8]]},"91":{"position":[[226,8]]},"145":{"position":[[185,8]]}}}],["behavior",{"_index":651,"t":{"93":{"position":[[185,8]]}}}],["belong",{"_index":1351,"t":{"267":{"position":[[167,9]]},"327":{"position":[[656,7]]}}}],["below",{"_index":777,"t":{"116":{"position":[[2455,5]]},"155":{"position":[[575,6]]},"157":{"position":[[453,6],[606,6]]},"159":{"position":[[2391,5],[3519,5],[3732,6],[3955,6]]}}}],["better",{"_index":1003,"t":{"151":{"position":[[1319,7]]}}}],["between",{"_index":423,"t":{"63":{"position":[[263,7]]},"106":{"position":[[640,7]]},"116":{"position":[[4353,7]]},"118":{"position":[[1581,7],[1695,7]]},"199":{"position":[[71,7]]},"203":{"position":[[211,8],[265,8],[311,8],[366,8]]}}}],["bit",{"_index":189,"t":{"39":{"position":[[237,4]]},"41":{"position":[[777,4],[795,4],[849,4]]},"65":{"position":[[164,3]]},"159":{"position":[[2598,4]]}}}],["black",{"_index":977,"t":{"149":{"position":[[443,5]]}}}],["blend",{"_index":440,"t":{"65":{"position":[[329,9]]}}}],["blender",{"_index":675,"t":{"99":{"position":[[163,7]]}}}],["blog",{"_index":2,"t":{"2":{"position":[[21,4]]}}}],["blue",{"_index":1304,"t":{"247":{"position":[[129,4],[187,4]]}}}],["bob",{"_index":571,"t":{"87":{"position":[[108,6],[259,3]]}}}],["bomb",{"_index":1107,"t":{"164":{"position":[[121,4]]},"249":{"position":[[83,4]]}}}],["bomb_explos",{"_index":1113,"t":{"164":{"position":[[181,14]]}}}],["bonu",{"_index":865,"t":{"126":{"position":[[48,5]]},"164":{"position":[[213,5]]},"251":{"position":[[295,5],[746,5],[803,6],[866,6]]}}}],["bonus",{"_index":854,"t":{"124":{"position":[[143,7]]},"251":{"position":[[376,8],[468,8],[599,8]]}}}],["bonus_implos",{"_index":1117,"t":{"164":{"position":[[247,15]]}}}],["bool",{"_index":1207,"t":{"207":{"position":[[77,5]]},"211":{"position":[[83,4]]},"255":{"position":[[144,4]]},"277":{"position":[[95,4]]},"279":{"position":[[86,4]]},"283":{"position":[[49,4]]},"285":{"position":[[67,4]]},"295":{"position":[[132,4]]},"297":{"position":[[84,4]]},"325":{"position":[[94,5]]}}}],["boolean",{"_index":313,"t":{"51":{"position":[[444,7]]},"75":{"position":[[368,7]]},"329":{"position":[[419,7],[505,7]]}}}],["border",{"_index":862,"t":{"124":{"position":[[301,8]]}}}],["both",{"_index":485,"t":{"75":{"position":[[433,4],[567,4]]},"207":{"position":[[596,4]]}}}],["bounc",{"_index":1305,"t":{"247":{"position":[[196,7]]}}}],["boundari",{"_index":1158,"t":{"185":{"position":[[170,11]]}}}],["box",{"_index":978,"t":{"149":{"position":[[449,5]]},"251":{"position":[[926,3]]}}}],["box_dur",{"_index":1311,"t":{"251":{"position":[[75,13]]}}}],["bracket",{"_index":610,"t":{"87":{"position":[[1298,8]]},"159":{"position":[[3318,8]]}}}],["break",{"_index":530,"t":{"83":{"position":[[29,5],[147,5],[255,5],[289,5],[327,5],[374,5]]}}}],["breaker",{"_index":355,"t":{"53":{"position":[[627,10]]}}}],["brief",{"_index":1017,"t":{"153":{"position":[[648,8]]},"159":{"position":[[3145,5]]}}}],["broadcast",{"_index":940,"t":{"143":{"position":[[288,12]]}}}],["bronz",{"_index":296,"t":{"49":{"position":[[355,9]]},"51":{"position":[[589,7]]}}}],["brownnois",{"_index":358,"t":{"53":{"position":[[665,13]]}}}],["browser",{"_index":448,"t":{"69":{"position":[[60,8]]}}}],["build",{"_index":926,"t":{"141":{"position":[[134,5]]}}}],["built",{"_index":208,"t":{"41":{"position":[[213,5]]}}}],["bullet",{"_index":893,"t":{"131":{"position":[[80,7]]},"176":{"position":[[0,6]]},"225":{"position":[[146,7]]},"267":{"position":[[119,6],[246,7]]},"295":{"position":[[469,7],[516,7]]},"329":{"position":[[492,7],[536,6],[880,9]]}}}],["bunch",{"_index":1024,"t":{"155":{"position":[[362,5]]}}}],["byte",{"_index":112,"t":{"32":{"position":[[45,4]]},"45":{"position":[[121,5]]}}}],["c",{"_index":229,"t":{"41":{"position":[[656,1],[1062,1]]}}}],["call",{"_index":396,"t":{"59":{"position":[[226,6]]},"133":{"position":[[50,6],[87,6]]},"151":{"position":[[360,4]]},"155":{"position":[[817,4],[865,4]]},"157":{"position":[[100,6],[797,6]]},"159":{"position":[[2497,6],[2846,4],[4281,6]]},"185":{"position":[[263,7]]},"251":{"position":[[730,6]]},"291":{"position":[[106,6],[242,6]]},"325":{"position":[[259,6],[317,6]]},"327":{"position":[[227,6]]},"329":{"position":[[236,6]]}}}],["callback",{"_index":1177,"t":{"191":{"position":[[61,8]]},"251":{"position":[[814,8]]},"291":{"position":[[56,9],[84,8],[187,8],[213,9],[227,9]]},"325":{"position":[[303,8],[365,9]]},"327":{"position":[[119,8],[213,8],[276,9]]},"329":{"position":[[126,8],[222,8],[289,8],[396,8]]}}}],["camera",{"_index":1214,"t":{"207":{"position":[[439,6],[584,7],[661,6]]}}}],["camera_dist",{"_index":1210,"t":{"207":{"position":[[158,16],[399,15],[777,15]]}}}],["camera_rotation_x_axi",{"_index":1211,"t":{"207":{"position":[[187,23],[471,22]]}}}],["camera_x_overrid",{"_index":1208,"t":{"207":{"position":[[96,18],[601,17]]}}}],["camera_y_overrid",{"_index":1209,"t":{"207":{"position":[[127,18],[623,18]]}}}],["can't",{"_index":223,"t":{"41":{"position":[[554,5]]},"135":{"position":[[20,5],[172,5],[328,5]]}}}],["cannon",{"_index":1231,"t":{"213":{"position":[[95,7],[254,6],[284,7],[556,6],[698,6]]},"251":{"position":[[94,7],[489,7],[1016,7]]}}}],["canva",{"_index":1043,"t":{"157":{"position":[[995,7]]}}}],["care",{"_index":529,"t":{"81":{"position":[[475,7]]}}}],["case",{"_index":427,"t":{"63":{"position":[[336,5],[395,5]]},"118":{"position":[[921,5],[953,5]]},"185":{"position":[[337,6]]},"295":{"position":[[380,4],[459,4]]},"329":{"position":[[482,4]]}}}],["categori",{"_index":649,"t":{"93":{"position":[[91,11]]}}}],["ceil",{"_index":144,"t":{"36":{"position":[[256,4]]}}}],["center",{"_index":1403,"t":{"307":{"position":[[164,6]]}}}],["center_i",{"_index":1269,"t":{"227":{"position":[[63,9]]}}}],["center_x",{"_index":1268,"t":{"227":{"position":[[41,9]]}}}],["chain",{"_index":416,"t":{"63":{"position":[[103,7],[124,5]]}}}],["chanc",{"_index":864,"t":{"126":{"position":[[28,6]]}}}],["chang",{"_index":692,"t":{"106":{"position":[[293,6]]},"114":{"position":[[257,6]]},"116":{"position":[[233,6],[2017,6],[2163,6],[2334,6],[3630,7]]},"118":{"position":[[622,6],[671,7],[698,6],[1339,6],[1574,6]]},"157":{"position":[[884,6]]}}}],["char",{"_index":113,"t":{"32":{"position":[[50,4]]},"51":{"position":[[49,4]]}}}],["charact",{"_index":263,"t":{"45":{"position":[[21,11]]},"49":{"position":[[225,10]]},"51":{"position":[[239,10]]}}}],["check",{"_index":713,"t":{"110":{"position":[[142,5]]},"114":{"position":[[507,5],[550,5]]}}}],["circl",{"_index":740,"t":{"112":{"position":[[1776,6]]},"116":{"position":[[848,6]]}}}],["clamp",{"_index":1159,"t":{"185":{"position":[[203,7]]}}}],["clockwis",{"_index":764,"t":{"116":{"position":[[94,9],[2106,9]]}}}],["closer",{"_index":1406,"t":{"309":{"position":[[184,7]]}}}],["co",{"_index":145,"t":{"36":{"position":[[261,3]]}}}],["code",{"_index":501,"t":{"77":{"position":[[426,4]]},"85":{"position":[[418,4],[465,4],[561,4],[706,5]]},"91":{"position":[[136,5]]},"97":{"position":[[13,5]]},"99":{"position":[[46,4],[99,4]]},"112":{"position":[[1464,4]]},"116":{"position":[[1884,4],[2974,5],[3481,4]]},"118":{"position":[[105,4],[211,4],[254,4],[633,4],[812,4],[3022,4]]},"147":{"position":[[502,4]]},"149":{"position":[[405,4]]},"151":{"position":[[220,4],[740,4]]},"153":{"position":[[482,4]]},"157":{"position":[[52,5],[121,5],[419,5]]},"159":{"position":[[110,4],[354,4],[424,5],[1973,4],[2062,4],[2219,4],[2331,4],[2760,4],[2973,5]]}}}],["codebas",{"_index":667,"t":{"97":{"position":[[144,9]]}}}],["collect",{"_index":391,"t":{"59":{"position":[[28,10]]}}}],["collid",{"_index":1270,"t":{"227":{"position":[[142,10]]},"277":{"position":[[151,8]]},"279":{"position":[[133,8]]},"325":{"position":[[197,9]]},"327":{"position":[[178,8]]},"329":{"position":[[185,8]]}}}],["collide_with_wal",{"_index":1362,"t":{"277":{"position":[[75,19]]},"279":{"position":[[66,19]]},"325":{"position":[[74,19],[131,18]]}}}],["collis",{"_index":1450,"t":{"325":{"position":[[276,9],[515,9]]},"327":{"position":[[345,10],[426,10]]}}}],["collision_callback",{"_index":1448,"t":{"325":{"position":[[100,19],[222,18]]},"327":{"position":[[79,19]]}}}],["color",{"_index":180,"t":{"39":{"position":[[63,7],[213,6]]},"59":{"position":[[418,6],[578,6]]},"65":{"position":[[13,6],[39,6],[71,6],[120,6],[150,6]]},"217":{"position":[[73,6],[237,5],[265,6]]},"237":{"position":[[55,6],[163,5],[183,5]]},"303":{"position":[[64,6],[86,5]]}}}],["color_end",{"_index":1430,"t":{"319":{"position":[[108,10]]}}}],["color_start",{"_index":1429,"t":{"319":{"position":[[90,12]]}}}],["combin",{"_index":526,"t":{"81":{"position":[[359,9]]}}}],["come",{"_index":389,"t":{"57":{"position":[[216,4]]},"91":{"position":[[419,4]]},"118":{"position":[[1778,5]]}}}],["comma",{"_index":504,"t":{"77":{"position":[[581,6]]}}}],["commun",{"_index":630,"t":{"91":{"position":[[5,9]]}}}],["complet",{"_index":815,"t":{"118":{"position":[[831,8]]}}}],["compon",{"_index":19,"t":{"2":{"position":[[179,12]]}}}],["comput",{"_index":200,"t":{"41":{"position":[[49,9]]},"159":{"position":[[3807,8]]}}}],["computed_seg",{"_index":719,"t":{"112":{"position":[[541,17],[2527,19],[2673,19],[2779,19],[2989,17]]},"116":{"position":[[547,17],[1432,19],[1578,19],[1684,19],[1818,17]]}}}],["computed_vertex",{"_index":718,"t":{"112":{"position":[[522,18],[2959,18]]},"116":{"position":[[528,18],[1788,18]]}}}],["concat",{"_index":131,"t":{"34":{"position":[[45,6]]}}}],["concern",{"_index":915,"t":{"137":{"position":[[57,10]]}}}],["condit",{"_index":527,"t":{"81":{"position":[[399,10]]}}}],["config",{"_index":1310,"t":{"251":{"position":[[59,7]]},"255":{"position":[[72,7]]},"319":{"position":[[74,7]]}}}],["configur",{"_index":1096,"t":{"161":{"position":[[50,11]]},"207":{"position":[[44,14],[279,10]]},"209":{"position":[[48,14],[97,10]]},"211":{"position":[[119,13]]},"213":{"position":[[56,14],[126,10],[190,14],[443,14],[525,14],[587,10]]},"319":{"position":[[283,10]]},"325":{"position":[[150,10]]}}}],["congratul",{"_index":834,"t":{"118":{"position":[[2846,16]]}}}],["connect",{"_index":420,"t":{"63":{"position":[[206,9]]},"112":{"position":[[1222,7],[1253,7],[1304,7],[1367,7]]}}}],["consid",{"_index":1063,"t":{"159":{"position":[[808,8]]}}}],["consist",{"_index":664,"t":{"97":{"position":[[107,10]]},"141":{"position":[[30,7]]},"157":{"position":[[938,12]]}}}],["consol",{"_index":1149,"t":{"181":{"position":[[44,7]]}}}],["constant",{"_index":160,"t":{"36":{"position":[[359,10]]},"41":{"position":[[377,8]]}}}],["consum",{"_index":365,"t":{"53":{"position":[[798,10]]}}}],["contain",{"_index":33,"t":{"5":{"position":[[6,8]]},"51":{"position":[[267,7],[322,8],[537,8]]},"59":{"position":[[257,7]]},"61":{"position":[[19,8]]},"63":{"position":[[77,7]]},"65":{"position":[[26,8],[104,7]]},"93":{"position":[[28,8]]},"137":{"position":[[10,8]]},"157":{"position":[[340,8]]},"161":{"position":[[19,8]]},"211":{"position":[[104,10]]}}}],["content",{"_index":796,"t":{"116":{"position":[[3949,7]]}}}],["content/level",{"_index":704,"t":{"108":{"position":[[157,18]]}}}],["continu",{"_index":452,"t":{"69":{"position":[[180,8]]},"295":{"position":[[347,8]]}}}],["convert",{"_index":254,"t":{"41":{"position":[[1297,9]]},"99":{"position":[[182,10]]}}}],["cool",{"_index":372,"t":{"55":{"position":[[110,4]]},"73":{"position":[[145,5],[184,4]]}}}],["coordin",{"_index":205,"t":{"41":{"position":[[168,12]]},"59":{"position":[[94,11]]},"116":{"position":[[2629,11]]}}}],["corner",{"_index":847,"t":{"124":{"position":[[0,7],[165,8]]}}}],["correspond",{"_index":727,"t":{"112":{"position":[[1005,13],[2039,13]]},"116":{"position":[[1111,13]]}}}],["cosin",{"_index":728,"t":{"112":{"position":[[1028,6]]}}}],["cosinu",{"_index":84,"t":{"24":{"position":[[78,7]]}}}],["counter",{"_index":734,"t":{"112":{"position":[[1436,7]]},"197":{"position":[[99,7],[179,7],[367,7]]}}}],["counterclockwis",{"_index":765,"t":{"116":{"position":[[126,17],[2134,17]]}}}],["coupl",{"_index":957,"t":{"147":{"position":[[62,6]]}}}],["cover",{"_index":1005,"t":{"153":{"position":[[34,5]]}}}],["crazi",{"_index":912,"t":{"135":{"position":[[421,6]]}}}],["creat",{"_index":135,"t":{"36":{"position":[[94,8]]},"59":{"position":[[58,6],[211,6]]},"91":{"position":[[62,8],[113,7]]},"99":{"position":[[117,8],[270,8]]},"101":{"position":[[9,7]]},"108":{"position":[[132,8],[189,7]]},"112":{"position":[[812,6],[875,6]]},"114":{"position":[[35,8],[125,8],[316,8]]},"116":{"position":[[3658,7]]},"118":{"position":[[264,6],[2623,7]]},"121":{"position":[[71,7]]},"131":{"position":[[149,8]]},"155":{"position":[[741,6]]},"157":{"position":[[727,6]]},"183":{"position":[[68,7]]},"237":{"position":[[108,7]]},"239":{"position":[[62,7]]},"241":{"position":[[83,7]]},"243":{"position":[[110,7],[416,6]]},"245":{"position":[[114,7],[477,6]]},"247":{"position":[[115,7],[488,6]]},"249":{"position":[[69,7]]},"251":{"position":[[281,7]]},"253":{"position":[[61,7]]},"255":{"position":[[163,7]]},"257":{"position":[[73,7]]},"259":{"position":[[107,7]]},"261":{"position":[[94,7]]},"263":{"position":[[76,7]]},"265":{"position":[[84,7]]},"267":{"position":[[105,7]]},"269":{"position":[[66,7]]},"271":{"position":[[106,7]]},"273":{"position":[[58,7]]},"275":{"position":[[73,7]]}}}],["creation",{"_index":361,"t":{"53":{"position":[[702,9]]},"91":{"position":[[507,9]]},"106":{"position":[[39,9]]}}}],["creativ",{"_index":838,"t":{"118":{"position":[[3036,8]]}}}],["creator",{"_index":645,"t":{"91":{"position":[[551,7],[574,8]]},"155":{"position":[[681,8]]}}}],["crowder",{"_index":1105,"t":{"164":{"position":[[88,7]]},"253":{"position":[[75,7]]}}}],["crucial",{"_index":969,"t":{"149":{"position":[[60,7]]}}}],["cube",{"_index":1354,"t":{"269":{"position":[[88,4]]},"277":{"position":[[127,4]]}}}],["cubed(10",{"_index":549,"t":{"85":{"position":[[335,9]]}}}],["cubed(2",{"_index":547,"t":{"85":{"position":[[286,8]]}}}],["cubed(3",{"_index":548,"t":{"85":{"position":[[305,8]]}}}],["cubed(numb",{"_index":544,"t":{"85":{"position":[[208,13]]}}}],["current",{"_index":825,"t":{"118":{"position":[[1593,7]]},"159":{"position":[[1798,7]]},"201":{"position":[[28,7]]},"225":{"position":[[96,9]]}}}],["curv",{"_index":844,"t":{"121":{"position":[[123,6]]}}}],["custom",{"_index":370,"t":{"55":{"position":[[84,6]]},"91":{"position":[[71,6]]},"95":{"position":[[112,6]]},"143":{"position":[[353,6]]},"145":{"position":[[251,6]]},"155":{"position":[[491,6],[953,6]]},"159":{"position":[[1814,6]]},"225":{"position":[[166,6]]}}}],["customiz",{"_index":1340,"t":{"257":{"position":[[87,12]]},"299":{"position":[[111,12]]},"303":{"position":[[123,12]]},"305":{"position":[[134,12]]},"307":{"position":[[177,12]]},"309":{"position":[[111,12]]},"311":{"position":[[118,12]]},"313":{"position":[[166,12]]},"315":{"position":[[187,12]]},"321":{"position":[[185,12]]},"327":{"position":[[141,12],[392,12]]},"329":{"position":[[148,12]]},"331":{"position":[[99,12]]},"333":{"position":[[101,12]]}}}],["customizable_ent",{"_index":1106,"t":{"164":{"position":[[96,19]]}}}],["customizable_entity_set_mesh",{"_index":1395,"t":{"301":{"position":[[128,29]]}}}],["d",{"_index":244,"t":{"41":{"position":[[1105,1]]}}}],["damag",{"_index":1243,"t":{"215":{"position":[[53,7],[132,6],[170,6]]}}}],["data",{"_index":605,"t":{"87":{"position":[[1179,5],[1219,5]]},"89":{"position":[[426,4],[515,4],[566,5]]},"149":{"position":[[524,4],[650,4]]}}}],["dawn",{"_index":576,"t":{"87":{"position":[[184,6],[273,4]]}}}],["de",{"_index":856,"t":{"124":{"position":[[177,2]]}}}],["deal",{"_index":137,"t":{"36":{"position":[[155,7]]},"151":{"position":[[500,7]]},"159":{"position":[[686,7]]}}}],["debug",{"_index":1150,"t":{"181":{"position":[[56,10]]},"183":{"position":[[33,5]]}}}],["decay",{"_index":335,"t":{"53":{"position":[[193,5]]}}}],["decid",{"_index":1384,"t":{"295":{"position":[[314,6]]}}}],["decim",{"_index":250,"t":{"41":{"position":[[1239,7]]},"151":{"position":[[927,9],[1174,9]]}}}],["default",{"_index":730,"t":{"112":{"position":[[1094,7]]},"223":{"position":[[231,8]]},"251":{"position":[[918,7]]},"255":{"position":[[318,7]]},"277":{"position":[[175,7]]},"279":{"position":[[157,7]]}}}],["defin",{"_index":213,"t":{"41":{"position":[[389,7]]},"47":{"position":[[125,6]]},"53":{"position":[[23,7]]},"59":{"position":[[308,7]]},"87":{"position":[[1268,7]]},"112":{"position":[[705,8]]},"315":{"position":[[264,7]]},"321":{"position":[[262,7]]},"323":{"position":[[108,8]]}}}],["deg",{"_index":146,"t":{"36":{"position":[[265,3]]}}}],["degre",{"_index":1419,"t":{"315":{"position":[[333,7]]},"321":{"position":[[331,7]]}}}],["delta",{"_index":1183,"t":{"195":{"position":[[52,6],[145,6],[227,5]]},"197":{"position":[[59,6],[167,6],[541,5]]}}}],["denomin",{"_index":71,"t":{"16":{"position":[[37,12],[146,11]]}}}],["depend",{"_index":775,"t":{"116":{"position":[[2181,9]]},"255":{"position":[[492,9]]}}}],["describ",{"_index":333,"t":{"53":{"position":[[155,8]]},"59":{"position":[[184,10]]},"63":{"position":[[18,9]]},"67":{"position":[[56,9]]},"93":{"position":[[114,8],[144,8],[172,8]]},"233":{"position":[[76,9]]},"235":{"position":[[98,9]]},"237":{"position":[[213,9]]},"295":{"position":[[191,9]]},"299":{"position":[[160,9]]}}}],["descript",{"_index":284,"t":{"49":{"position":[[108,15],[134,11]]},"51":{"position":[[60,12],[118,13]]},"108":{"position":[[425,15]]},"159":{"position":[[2542,12],[3003,15],[3027,14],[3274,12]]}}}],["design",{"_index":843,"t":{"121":{"position":[[104,7],[130,8],[155,7],[178,8]]}}}],["destroy",{"_index":1188,"t":{"197":{"position":[[412,9]]},"217":{"position":[[333,10]]},"243":{"position":[[345,9]]},"245":{"position":[[406,9]]},"247":{"position":[[417,9]]},"285":{"position":[[143,10]]},"329":{"position":[[553,10]]},"333":{"position":[[230,10]]}}}],["detail",{"_index":996,"t":{"151":{"position":[[989,7]]},"153":{"position":[[570,6]]}}}],["detect",{"_index":1451,"t":{"325":{"position":[[289,9]]},"327":{"position":[[445,9]]}}}],["determin",{"_index":271,"t":{"47":{"position":[[49,11]]},"197":{"position":[[198,9],[300,9]]},"213":{"position":[[215,10],[261,10],[301,10]]},"251":{"position":[[414,10]]},"255":{"position":[[267,10],[351,10]]},"329":{"position":[[513,10]]}}}],["develop",{"_index":9,"t":{"2":{"position":[[87,11]]},"141":{"position":[[222,12]]},"143":{"position":[[366,11]]},"155":{"position":[[622,10]]}}}],["devic",{"_index":799,"t":{"116":{"position":[[4274,7]]}}}],["dictat",{"_index":1094,"t":{"159":{"position":[[4193,8]]}}}],["differ",{"_index":422,"t":{"63":{"position":[[252,10]]},"79":{"position":[[835,9]]},"85":{"position":[[519,9]]},"104":{"position":[[99,9]]},"108":{"position":[[295,10]]},"116":{"position":[[4342,10]]},"118":{"position":[[1684,10]]},"143":{"position":[[25,9]]},"151":{"position":[[105,10],[893,10]]},"157":{"position":[[149,10]]},"159":{"position":[[2907,9]]},"223":{"position":[[341,9],[366,9]]}}}],["direct",{"_index":962,"t":{"147":{"position":[[242,11]]},"259":{"position":[[271,9]]}}}],["directori",{"_index":647,"t":{"93":{"position":[[13,9]]}}}],["disappear",{"_index":1381,"t":{"293":{"position":[[89,9]]}}}],["discord",{"_index":646,"t":{"91":{"position":[[600,8]]},"147":{"position":[[549,7]]},"157":{"position":[[234,8]]}}}],["discov",{"_index":886,"t":{"128":{"position":[[239,10]]}}}],["discoveri",{"_index":939,"t":{"143":{"position":[[267,9]]}}}],["discuss",{"_index":968,"t":{"147":{"position":[[588,8]]}}}],["disk",{"_index":1272,"t":{"227":{"position":[[219,5]]}}}],["display",{"_index":306,"t":{"51":{"position":[[169,9]]},"116":{"position":[[4161,7]]},"305":{"position":[[97,9]]}}}],["distanc",{"_index":1198,"t":{"203":{"position":[[256,8],[357,8]]},"223":{"position":[[301,8]]}}}],["do",{"_index":747,"t":{"112":{"position":[[2483,5]]},"116":{"position":[[3647,5]]},"135":{"position":[[398,5]]}}}],["doc",{"_index":30,"t":{"2":{"position":[[290,5]]}}}],["document",{"_index":10,"t":{"2":{"position":[[99,13],[205,13]]},"32":{"position":[[176,13]]},"34":{"position":[[121,13]]},"36":{"position":[[593,13]]},"41":{"position":[[315,10]]}}}],["doesn't",{"_index":609,"t":{"87":{"position":[[1249,7]]}}}],["dollar",{"_index":600,"t":{"87":{"position":[[786,10],[1016,8]]}}}],["don't",{"_index":451,"t":{"69":{"position":[[162,5]]},"77":{"position":[[671,5]]},"85":{"position":[[712,5]]},"89":{"position":[[652,5]]},"114":{"position":[[459,6]]},"149":{"position":[[581,5]]},"151":{"position":[[413,5],[536,5],[1147,5]]},"159":{"position":[[152,5],[759,5]]},"327":{"position":[[356,5]]}}}],["done",{"_index":388,"t":{"57":{"position":[[202,5]]},"87":{"position":[[1145,4]]},"116":{"position":[[2912,4]]},"159":{"position":[[3572,5]]}}}],["doubl",{"_index":822,"t":{"118":{"position":[[1200,6]]},"168":{"position":[[15,6]]}}}],["double_swip",{"_index":1126,"t":{"168":{"position":[[45,12]]}}}],["down",{"_index":961,"t":{"147":{"position":[[203,4]]},"157":{"position":[[601,4]]},"159":{"position":[[2386,4],[3514,4]]}}}],["download",{"_index":1020,"t":{"155":{"position":[[123,10]]}}}],["dump",{"_index":114,"t":{"32":{"position":[[55,4]]}}}],["durat",{"_index":179,"t":{"39":{"position":[[49,9],[71,9],[168,8]]},"43":{"position":[[105,8]]},"213":{"position":[[108,9],[292,8],[389,8],[461,8]]},"223":{"position":[[89,9],[483,8],[624,8]]},"251":{"position":[[930,8]]},"331":{"position":[[148,8]]},"333":{"position":[[152,8]]}}}],["dure",{"_index":750,"t":{"112":{"position":[[2615,6],[2721,6]]},"116":{"position":[[1520,6],[1626,6]]},"213":{"position":[[337,6]]},"223":{"position":[[515,6]]}}}],["dux_fix",{"_index":232,"t":{"41":{"position":[[752,10]]}}}],["dx",{"_index":1359,"t":{"275":{"position":[[46,3],[147,3]]}}}],["dynamic/graphics.lua",{"_index":757,"t":{"114":{"position":[[226,24]]},"116":{"position":[[3407,24]]},"118":{"position":[[1862,24],[1955,24]]},"299":{"position":[[386,24]]},"301":{"position":[[392,24]]}}}],["e",{"_index":247,"t":{"41":{"position":[[1157,1]]}}}],["each",{"_index":417,"t":{"63":{"position":[[111,4]]},"65":{"position":[[49,4]]},"104":{"position":[[114,4]]},"116":{"position":[[405,4],[2223,4]]},"159":{"position":[[1601,4]]},"191":{"position":[[94,4]]}}}],["easier",{"_index":611,"t":{"87":{"position":[[1343,6]]},"159":{"position":[[845,6]]}}}],["editor",{"_index":967,"t":{"147":{"position":[[482,6]]},"157":{"position":[[93,6],[203,6],[300,7],[502,7]]}}}],["effect",{"_index":105,"t":{"30":{"position":[[139,7]]},"36":{"position":[[60,8]]},"223":{"position":[[138,9],[440,9],[532,9],[650,9]]},"323":{"position":[[373,11]]}}}],["empti",{"_index":1041,"t":{"157":{"position":[[711,6],[989,5]]},"299":{"position":[[250,5]]}}}],["enabl",{"_index":1388,"t":{"297":{"position":[[76,7]]}}}],["encod",{"_index":193,"t":{"39":{"position":[[285,7]]},"41":{"position":[[812,6]]}}}],["end",{"_index":481,"t":{"75":{"position":[[45,3],[116,3],[170,3],[223,3],[251,3],[320,3]]},"77":{"position":[[32,3],[111,3],[173,3],[226,3],[331,3],[508,3],[597,3]]},"79":{"position":[[98,3],[102,3],[368,3],[372,3],[474,3],[478,3]]},"81":{"position":[[46,3],[144,3],[198,3]]},"83":{"position":[[35,3],[153,3],[157,3],[261,3],[265,3]]},"85":{"position":[[65,3],[145,3],[272,3]]},"87":{"position":[[169,3]]},"89":{"position":[[78,3],[242,3]]},"112":{"position":[[2324,3],[2377,3],[2856,4]]},"116":{"position":[[1396,3],[1839,3],[3363,3],[3472,4]]},"118":{"position":[[136,3],[242,3],[753,3],[800,3]]},"191":{"position":[[250,4]]},"201":{"position":[[19,4]]},"231":{"position":[[210,3]]},"291":{"position":[[455,3]]},"325":{"position":[[562,3]]},"327":{"position":[[698,3]]},"329":{"position":[[890,3],[906,4]]}}}],["end_i",{"_index":1169,"t":{"187":{"position":[[78,6]]}}}],["end_x",{"_index":1168,"t":{"187":{"position":[[59,6]]}}}],["end_x,end_i",{"_index":1171,"t":{"187":{"position":[[154,14]]}}}],["enemi",{"_index":371,"t":{"55":{"position":[[91,8]]},"124":{"position":[[231,7]]},"128":{"position":[[205,7],[270,5]]},"153":{"position":[[216,7],[246,8],[416,5]]},"197":{"position":[[403,5],[451,5]]},"227":{"position":[[182,8]]}}}],["enjoy",{"_index":31,"t":{"2":{"position":[[296,6]]}}}],["ensur",{"_index":802,"t":{"116":{"position":[[4326,6]]}}}],["enter",{"_index":1022,"t":{"155":{"position":[[213,5],[543,5]]},"157":{"position":[[839,6]]},"159":{"position":[[3412,6]]}}}],["entireti",{"_index":6,"t":{"2":{"position":[[65,8]]}}}],["entiti",{"_index":258,"t":{"43":{"position":[[30,7]]},"106":{"position":[[320,6],[621,6]]},"108":{"position":[[63,7]]},"110":{"position":[[64,7]]},"114":{"position":[[47,6]]},"116":{"position":[[203,6],[2785,7]]},"118":{"position":[[2069,7],[2082,6],[2406,6]]},"131":{"position":[[13,8],[114,9],[132,8]]},"161":{"position":[[82,9]]},"183":{"position":[[59,8]]},"185":{"position":[[127,8]]},"217":{"position":[[162,6],[323,6]]},"225":{"position":[[87,8],[173,9],[198,8],[264,9],[279,8]]},"227":{"position":[[153,8],[240,8]]},"229":{"position":[[62,8]]},"231":{"position":[[79,7],[192,6]]},"251":{"position":[[849,6],[903,6]]},"257":{"position":[[100,6]]},"281":{"position":[[100,6]]},"283":{"position":[[74,6]]},"285":{"position":[[92,6],[175,6]]},"287":{"position":[[105,6]]},"289":{"position":[[91,6]]},"291":{"position":[[142,6],[258,6],[435,6]]},"293":{"position":[[53,6]]},"295":{"position":[[147,6],[244,6]]},"297":{"position":[[211,6]]},"299":{"position":[[124,6]]},"303":{"position":[[136,6]]},"305":{"position":[[147,6]]},"307":{"position":[[190,6]]},"309":{"position":[[124,6]]},"311":{"position":[[131,6]]},"313":{"position":[[179,6]]},"315":{"position":[[200,6],[320,6]]},"319":{"position":[[306,6],[369,6]]},"321":{"position":[[198,6],[318,6]]},"323":{"position":[[139,7],[184,6],[395,6]]},"325":{"position":[[173,6],[333,6],[350,6],[539,6]]},"327":{"position":[[154,6],[243,6],[260,6],[405,7],[554,7]]},"329":{"position":[[161,6],[269,6],[446,6]]},"331":{"position":[[112,6]]},"333":{"position":[[114,6],[220,6],[308,6]]}}}],["entity'",{"_index":753,"t":{"114":{"position":[[92,8]]},"116":{"position":[[2885,8]]}}}],["entity_id",{"_index":1250,"t":{"217":{"position":[[185,10]]},"277":{"position":[[54,10]]},"279":{"position":[[45,10]]},"287":{"position":[[28,10]]},"289":{"position":[[26,10]]},"291":{"position":[[35,10]]},"295":{"position":[[31,10]]},"297":{"position":[[55,10]]},"299":{"position":[[37,10]]},"301":{"position":[[48,10]]},"303":{"position":[[43,10]]},"305":{"position":[[39,10]]},"307":{"position":[[41,10]]},"309":{"position":[[39,10]]},"311":{"position":[[43,10]]},"313":{"position":[[47,10]]},"315":{"position":[[43,10]]},"319":{"position":[[53,10]]},"321":{"position":[[49,10]]},"323":{"position":[[50,10]]},"325":{"position":[[53,10],[551,10]]},"327":{"position":[[58,10],[567,10]]},"329":{"position":[[58,10],[252,9]]},"331":{"position":[[43,10]]},"333":{"position":[[44,10]]}}}],["entityid",{"_index":259,"t":{"43":{"position":[[38,9]]},"213":{"position":[[46,9]]},"215":{"position":[[43,9]]},"217":{"position":[[42,9],[63,9]]},"219":{"position":[[47,9]]},"221":{"position":[[46,9]]},"223":{"position":[[39,9]]},"225":{"position":[[66,9]]},"231":{"position":[[34,10]]},"239":{"position":[[53,8],[121,9]]},"241":{"position":[[74,8],[177,9]]},"243":{"position":[[101,8],[165,9]]},"245":{"position":[[105,8],[173,9]]},"247":{"position":[[106,8],[175,9]]},"249":{"position":[[60,8],[125,9]]},"251":{"position":[[272,8],[355,9]]},"253":{"position":[[52,8],[120,9]]},"255":{"position":[[154,8],[640,9]]},"257":{"position":[[64,8],[144,9]]},"259":{"position":[[98,8],[167,9]]},"261":{"position":[[85,8],[156,9]]},"263":{"position":[[67,8]]},"265":{"position":[[75,8],[189,9]]},"267":{"position":[[96,8],[230,8]]},"269":{"position":[[57,8],[130,9]]},"271":{"position":[[97,8],[172,9]]},"273":{"position":[[49,8]]},"275":{"position":[[64,8],[167,9]]},"277":{"position":[[65,9]]},"279":{"position":[[56,9]]},"281":{"position":[[38,10]]},"283":{"position":[[38,10]]},"285":{"position":[[56,10]]},"287":{"position":[[39,9]]},"289":{"position":[[37,9]]},"291":{"position":[[46,9]]},"293":{"position":[[33,9]]},"295":{"position":[[42,9]]},"297":{"position":[[66,9]]},"299":{"position":[[48,9]]},"301":{"position":[[59,9]]},"303":{"position":[[54,9]]},"305":{"position":[[50,9]]},"307":{"position":[[52,9]]},"309":{"position":[[50,9]]},"311":{"position":[[54,9]]},"313":{"position":[[58,9]]},"315":{"position":[[54,9]]},"317":{"position":[[73,9]]},"319":{"position":[[64,9]]},"321":{"position":[[60,9]]},"323":{"position":[[61,9]]},"325":{"position":[[64,9]]},"327":{"position":[[69,9]]},"329":{"position":[[69,9]]},"331":{"position":[[54,9]]},"333":{"position":[[55,9]]}}}],["entri",{"_index":311,"t":{"51":{"position":[[352,5]]},"159":{"position":[[2565,6],[2587,5]]}}}],["entry_point",{"_index":291,"t":{"49":{"position":[[272,14]]},"51":{"position":[[310,11],[386,11]]},"108":{"position":[[454,14]]},"159":{"position":[[3042,14],[3341,14]]}}}],["enum",{"_index":1006,"t":{"153":{"position":[[47,5],[86,5],[92,4],[263,6],[591,5]]}}}],["enumer",{"_index":1008,"t":{"153":{"position":[[108,11]]}}}],["environ",{"_index":1032,"t":{"157":{"position":[[24,11]]}}}],["equal",{"_index":61,"t":{"10":{"position":[[154,5]]},"12":{"position":[[111,5]]},"14":{"position":[[89,5]]},"16":{"position":[[170,5]]},"75":{"position":[[474,5],[546,5]]},"116":{"position":[[3113,5]]}}}],["eskiv",{"_index":1016,"t":{"153":{"position":[[547,6]]}}}],["essenti",{"_index":564,"t":{"85":{"position":[[780,11]]},"99":{"position":[[22,9]]},"112":{"position":[[226,11]]}}}],["etc",{"_index":207,"t":{"41":{"position":[[201,6]]},"79":{"position":[[411,7]]},"149":{"position":[[497,4]]}}}],["even",{"_index":602,"t":{"87":{"position":[[1087,4]]},"116":{"position":[[4067,4]]},"323":{"position":[[422,4]]}}}],["event",{"_index":881,"t":{"128":{"position":[[126,6]]}}}],["eventu",{"_index":277,"t":{"47":{"position":[[233,10]]}}}],["ex",{"_index":1023,"t":{"155":{"position":[[263,4],[279,4]]},"159":{"position":[[3655,4]]}}}],["exactli",{"_index":466,"t":{"71":{"position":[[177,7]]},"118":{"position":[[2023,7],[2786,7]]},"151":{"position":[[264,7],[1441,7]]}}}],["exampl",{"_index":185,"t":{"39":{"position":[[157,8],[265,8]]},"49":{"position":[[31,7]]},"53":{"position":[[0,7],[766,7],[834,8]]},"59":{"position":[[285,7]]},"67":{"position":[[137,8]]},"69":{"position":[[75,8]]},"91":{"position":[[328,8],[342,8]]},"112":{"position":[[658,8]]},"116":{"position":[[4198,8]]},"128":{"position":[[137,8]]},"151":{"position":[[1420,8]]},"153":{"position":[[379,7]]},"155":{"position":[[662,8]]},"181":{"position":[[67,8]]},"183":{"position":[[121,8]]},"185":{"position":[[344,8]]},"187":{"position":[[242,8]]},"189":{"position":[[73,8]]},"191":{"position":[[110,8]]},"203":{"position":[[385,8]]},"207":{"position":[[728,8]]},"209":{"position":[[190,8]]},"211":{"position":[[178,8]]},"213":{"position":[[622,8]]},"225":{"position":[[183,8]]},"227":{"position":[[225,8]]},"229":{"position":[[100,8]]},"231":{"position":[[87,8]]},"233":{"position":[[120,8]]},"235":{"position":[[154,8]]},"237":{"position":[[437,8]]},"249":{"position":[[135,8]]},"251":{"position":[[953,8]]},"255":{"position":[[650,8]]},"261":{"position":[[166,8]]},"277":{"position":[[196,8]]},"279":{"position":[[178,8]]},"281":{"position":[[125,8]]},"291":{"position":[[269,8]]},"299":{"position":[[285,8]]},"301":{"position":[[280,8]]},"315":{"position":[[297,8]]},"319":{"position":[[347,8]]},"321":{"position":[[295,8]]},"325":{"position":[[408,8]]},"327":{"position":[[455,8]]},"329":{"position":[[564,8]]}}}],["exceed",{"_index":789,"t":{"116":{"position":[[3294,8]]}}}],["except",{"_index":524,"t":{"81":{"position":[[300,6]]}}}],["excit",{"_index":4,"t":{"2":{"position":[[45,7]]}}}],["exist",{"_index":210,"t":{"41":{"position":[[263,5]]},"131":{"position":[[26,5]]},"151":{"position":[[1016,6]]},"285":{"position":[[191,6]]},"295":{"position":[[359,5]]}}}],["exp",{"_index":147,"t":{"36":{"position":[[269,3]]}}}],["experi",{"_index":687,"t":{"106":{"position":[[17,10]]},"118":{"position":[[3001,10]]}}}],["expir",{"_index":1233,"t":{"213":{"position":[[398,8]]}}}],["explain",{"_index":1082,"t":{"159":{"position":[[2579,7],[2714,7]]}}}],["explanatori",{"_index":792,"t":{"116":{"position":[[3501,12]]}}}],["explod",{"_index":1481,"t":{"333":{"position":[[138,7]]}}}],["explos",{"_index":1291,"t":{"237":{"position":[[119,9],[196,10],[237,9],[315,10],[392,10],[515,9],[597,9]]},"295":{"position":[[391,10],[441,10]]},"333":{"position":[[205,10],[338,10]]}}}],["explosion_dur",{"_index":1480,"t":{"333":{"position":[[65,19],[164,18],[241,18]]}}}],["expos",{"_index":110,"t":{"32":{"position":[[12,7]]},"34":{"position":[[12,7]]},"36":{"position":[[204,7]]},"143":{"position":[[385,7]]}}}],["exposur",{"_index":848,"t":{"124":{"position":[[19,8]]}}}],["extens",{"_index":671,"t":{"99":{"position":[[51,9]]}}}],["extent",{"_index":860,"t":{"124":{"position":[[282,7]]}}}],["extra",{"_index":745,"t":{"112":{"position":[[2404,5]]}}}],["extract",{"_index":1021,"t":{"155":{"position":[[177,7]]}}}],["f",{"_index":248,"t":{"41":{"position":[[1211,1]]}}}],["face",{"_index":710,"t":{"110":{"position":[[92,4]]}}}],["fact",{"_index":826,"t":{"118":{"position":[[1657,4]]}}}],["factor",{"_index":1258,"t":{"223":{"position":[[49,7]]}}}],["factor*s)+offset",{"_index":1261,"t":{"223":{"position":[[464,18]]}}}],["fade",{"_index":1333,"t":{"255":{"position":[[412,4]]}}}],["fairli",{"_index":836,"t":{"118":{"position":[[2983,6]]}}}],["fall",{"_index":648,"t":{"93":{"position":[[77,4]]}}}],["fals",{"_index":322,"t":{"51":{"position":[[681,6]]},"75":{"position":[[86,5],[268,5],[403,6],[590,5],[602,5]]},"108":{"position":[[507,5]]},"255":{"position":[[602,6]]},"285":{"position":[[162,5]]}}}],["familiar",{"_index":637,"t":{"91":{"position":[[261,8]]}}}],["fanci",{"_index":1009,"t":{"153":{"position":[[134,5]]}}}],["farm",{"_index":888,"t":{"128":{"position":[[294,4]]}}}],["featur",{"_index":374,"t":{"55":{"position":[[124,9]]}}}],["feel",{"_index":640,"t":{"91":{"position":[[378,7]]},"157":{"position":[[538,4]]}}}],["ff0000ffcolor",{"_index":290,"t":{"49":{"position":[[254,17]]}}}],["field",{"_index":321,"t":{"51":{"position":[[647,5]]},"53":{"position":[[133,6]]},"61":{"position":[[13,5]]},"63":{"position":[[12,5]]},"65":{"position":[[20,5],[78,5]]}}}],["file",{"_index":107,"t":{"30":{"position":[[182,5]]},"45":{"position":[[65,4]]},"49":{"position":[[53,5]]},"53":{"position":[[13,4]]},"59":{"position":[[298,4]]},"93":{"position":[[56,6],[71,5],[103,5],[133,5],[161,5]]},"104":{"position":[[168,4]]},"108":{"position":[[230,6],[283,4]]},"110":{"position":[[163,6]]},"112":{"position":[[32,5],[468,5]]},"116":{"position":[[227,5]]},"118":{"position":[[15,4],[405,5],[1529,5],[2686,5]]},"135":{"position":[[271,5]]},"147":{"position":[[161,5]]},"155":{"position":[[138,6],[189,5],[240,6],[268,5],[371,6],[429,5]]},"157":{"position":[[282,4]]},"159":{"position":[[2816,4],[3508,5],[3769,5],[3841,5],[3868,4]]},"299":{"position":[[177,4]]}}}],["file_path",{"_index":699,"t":{"106":{"position":[[579,10]]},"299":{"position":[[58,10],[182,9],[234,9]]},"301":{"position":[[69,10]]}}}],["filenam",{"_index":758,"t":{"114":{"position":[[268,8]]}}}],["fill",{"_index":562,"t":{"85":{"position":[[728,4]]}}}],["final",{"_index":714,"t":{"110":{"position":[[152,5]]},"155":{"position":[[10,7]]},"159":{"position":[[2404,5]]}}}],["find",{"_index":115,"t":{"32":{"position":[[60,4]]},"159":{"position":[[4382,4]]}}}],["fine",{"_index":516,"t":{"79":{"position":[[466,7],[533,5]]},"159":{"position":[[1395,5],[1996,5]]}}}],["first",{"_index":1,"t":{"2":{"position":[[15,5]]},"51":{"position":[[153,5]]},"63":{"position":[[330,5]]},"77":{"position":[[451,5]]},"91":{"position":[[194,5],[310,5]]},"116":{"position":[[3126,5]]},"118":{"position":[[361,5],[2171,5]]},"149":{"position":[[23,5]]},"159":{"position":[[2352,5],[2798,6]]}}}],["five_corn",{"_index":1120,"t":{"166":{"position":[[27,12]]}}}],["fix",{"_index":199,"t":{"41":{"position":[[7,5]]},"151":{"position":[[370,5],[475,5],[549,5],[665,5],[705,5],[819,5],[1352,5]]},"159":{"position":[[717,5],[1229,5],[1292,5]]}}}],["fixedpoint",{"_index":38,"t":{"5":{"position":[[62,10]]},"8":{"position":[[24,10],[63,10]]},"10":{"position":[[30,11],[47,10],[61,10],[89,10]]},"14":{"position":[[14,12],[27,10]]},"16":{"position":[[57,10],[80,10]]},"18":{"position":[[20,12]]},"20":{"position":[[28,12],[41,10]]},"22":{"position":[[33,10],[54,10]]},"24":{"position":[[20,12],[33,11],[45,10]]},"26":{"position":[[16,11],[31,10],[45,10]]},"28":{"position":[[13,10]]},"41":{"position":[[366,10],[564,10],[591,10],[688,10],[711,10]]},"151":{"position":[[275,11],[287,10]]},"159":{"position":[[322,10],[1145,10],[1903,10]]},"185":{"position":[[30,11],[50,10]]},"187":{"position":[[26,11],[47,11],[66,11],[85,10]]},"203":{"position":[[45,11],[57,11],[69,11],[81,10]]},"207":{"position":[[115,11],[146,11],[175,11],[211,11]]},"223":{"position":[[57,11],[77,11],[106,10]]},"227":{"position":[[51,11],[73,11],[93,10]]},"235":{"position":[[54,11],[69,10]]},"237":{"position":[[28,11],[43,11],[74,11]]},"239":{"position":[[24,11],[39,10]]},"241":{"position":[[34,11],[49,11]]},"243":{"position":[[19,11],[34,11],[53,11],[72,11]]},"245":{"position":[[23,11],[38,11],[57,11],[76,11]]},"247":{"position":[[24,11],[39,11],[58,11],[77,11]]},"249":{"position":[[20,11],[35,11]]},"251":{"position":[[21,11],[36,11],[183,11],[209,11]]},"253":{"position":[[23,11],[38,10]]},"255":{"position":[[32,11],[47,11],[95,11]]},"257":{"position":[[35,11],[50,10]]},"259":{"position":[[24,11],[39,11],[65,11],[84,10]]},"261":{"position":[[26,11],[41,11],[71,10]]},"263":{"position":[[26,11],[41,11]]},"265":{"position":[[27,11],[42,11]]},"267":{"position":[[29,11],[44,11],[63,11]]},"269":{"position":[[28,11],[43,10]]},"271":{"position":[[30,11],[45,11],[64,11],[83,10]]},"273":{"position":[[20,11],[35,10]]},"275":{"position":[[19,11],[34,11],[50,10]]},"281":{"position":[[49,11],[61,10]]},"287":{"position":[[52,11],[67,10]]},"289":{"position":[[55,10]]},"295":{"position":[[82,11],[97,11]]},"307":{"position":[[65,11],[80,11],[95,10]]},"309":{"position":[[63,10]]},"311":{"position":[[71,10]]},"313":{"position":[[77,11],[98,11],[119,10]]},"315":{"position":[[71,11],[91,11],[111,11],[131,10]]},"319":{"position":[[139,11],[164,11],[191,11],[216,11],[243,11],[268,10]]},"321":{"position":[[77,11],[97,11],[117,11],[137,10]]},"323":{"position":[[79,10]]}}}],["flangeroffset",{"_index":349,"t":{"53":{"position":[[504,13]]}}}],["flangeroffsetsweep",{"_index":350,"t":{"53":{"position":[[518,18]]}}}],["flip",{"_index":827,"t":{"118":{"position":[[1762,8],[2047,8],[2339,8]]}}}],["float",{"_index":138,"t":{"36":{"position":[[168,8]]},"47":{"position":[[7,8],[80,6],[199,6]]},"61":{"position":[[114,8]]},"255":{"position":[[177,8],[621,8]]}}}],["floating_messag",{"_index":1115,"t":{"164":{"position":[[219,16]]}}}],["floor",{"_index":149,"t":{"36":{"position":[[283,5]]}}}],["fmath",{"_index":32,"t":{"5":{"position":[[0,5],[95,5]]},"30":{"position":[[232,5]]},"93":{"position":[[240,5]]},"151":{"position":[[36,5],[153,6]]}}}],["fmath.abs_fixedpoint(valu",{"_index":79,"t":{"20":{"position":[[0,27]]}}}],["fmath.atan2",{"_index":87,"t":{"26":{"position":[[0,12]]}}}],["fmath.from_fract",{"_index":69,"t":{"16":{"position":[[0,20]]}}}],["fmath.max_fixedpoint",{"_index":49,"t":{"8":{"position":[[0,23]]}}}],["fmath.random_fixedpoint",{"_index":54,"t":{"10":{"position":[[0,24]]}}}],["fmath.random_int",{"_index":62,"t":{"12":{"position":[[0,17]]}}}],["fmath.sincos(angl",{"_index":82,"t":{"24":{"position":[[0,19]]}}}],["fmath.sqrt(fixedpoint",{"_index":986,"t":{"151":{"position":[[228,21]]}}}],["fmath.sqrt(x",{"_index":64,"t":{"14":{"position":[[0,13]]}}}],["fmath.tau",{"_index":94,"t":{"28":{"position":[[0,12]]},"261":{"position":[[246,11]]},"315":{"position":[[411,11]]},"321":{"position":[[415,11]]}}}],["fmath.to_fixedpoint(valu",{"_index":81,"t":{"22":{"position":[[0,26]]}}}],["fmath.to_int(valu",{"_index":76,"t":{"18":{"position":[[0,19]]}}}],["fmod",{"_index":150,"t":{"36":{"position":[[289,4]]}}}],["focu",{"_index":982,"t":{"149":{"position":[[630,5]]}}}],["folder",{"_index":703,"t":{"108":{"position":[[147,6],[197,7]]},"155":{"position":[[249,6],[384,7],[452,7],[471,6],[532,6],[796,7],[825,6],[875,6]]},"157":{"position":[[328,6],[480,6],[690,6]]},"159":{"position":[[2835,6]]}}}],["follow",{"_index":111,"t":{"32":{"position":[[24,9]]},"34":{"position":[[24,9]]},"36":{"position":[[216,9]]},"41":{"position":[[412,8],[935,8]]},"53":{"position":[[123,9]]},"77":{"position":[[40,9],[339,9]]},"79":{"position":[[110,9],[486,9]]},"81":{"position":[[206,9]]},"97":{"position":[[40,6]]},"110":{"position":[[112,9]]},"112":{"position":[[63,10]]},"114":{"position":[[441,10]]},"116":{"position":[[256,10]]},"147":{"position":[[231,6]]}}}],["forbidden",{"_index":278,"t":{"47":{"position":[[247,10]]}}}],["forev",{"_index":528,"t":{"81":{"position":[[463,8]]},"243":{"position":[[440,8]]},"245":{"position":[[501,8]]},"247":{"position":[[512,8]]},"293":{"position":[[99,8]]}}}],["forget",{"_index":506,"t":{"77":{"position":[[677,6]]},"85":{"position":[[718,6]]},"327":{"position":[[362,6]]}}}],["fork",{"_index":916,"t":{"139":{"position":[[19,4]]}}}],["format",{"_index":116,"t":{"32":{"position":[[65,6]]},"41":{"position":[[1339,7]]}}}],["found",{"_index":965,"t":{"147":{"position":[[430,5]]}}}],["four_corn",{"_index":1119,"t":{"166":{"position":[[14,12]]}}}],["four_direct",{"_index":1125,"t":{"168":{"position":[[29,15]]}}}],["fp",{"_index":697,"t":{"106":{"position":[[482,3],[734,3]]},"108":{"position":[[419,5]]},"116":{"position":[[3869,3],[4180,3],[4190,3],[4472,4]]},"118":{"position":[[1139,3],[1743,4],[2660,4]]},"301":{"position":[[248,3]]}}}],["fraction",{"_index":73,"t":{"16":{"position":[[114,8]]},"22":{"position":[[111,10]]},"41":{"position":[[862,10],[902,10]]},"151":{"position":[[1249,10]]}}}],["frame",{"_index":694,"t":{"106":{"position":[[376,6]]},"116":{"position":[[352,7],[413,6],[1975,7],[2200,5],[2228,5],[2737,6],[3064,6],[3087,7],[3104,5],[3176,5],[3317,6],[3805,6]]},"118":{"position":[[275,6],[367,6],[529,6],[603,7],[1015,6],[1060,6],[1221,6],[1497,6],[2919,6]]}}}],["framework",{"_index":680,"t":{"99":{"position":[[256,9]]}}}],["free",{"_index":1036,"t":{"157":{"position":[[543,4]]}}}],["freez",{"_index":1137,"t":{"172":{"position":[[0,6]]}}}],["freeze_explos",{"_index":1144,"t":{"176":{"position":[[7,16]]}}}],["freq_1",{"_index":1136,"t":{"170":{"position":[[61,6]]}}}],["freq_10",{"_index":1130,"t":{"170":{"position":[[16,7]]}}}],["freq_15",{"_index":1129,"t":{"170":{"position":[[8,7]]}}}],["freq_2",{"_index":1135,"t":{"170":{"position":[[54,6]]}}}],["freq_3",{"_index":1134,"t":{"170":{"position":[[47,6]]}}}],["freq_30",{"_index":1128,"t":{"170":{"position":[[0,7]]}}}],["freq_5",{"_index":1133,"t":{"170":{"position":[[40,6]]}}}],["freq_6",{"_index":1132,"t":{"170":{"position":[[33,6]]}}}],["freq_7_5",{"_index":1131,"t":{"170":{"position":[[24,8]]}}}],["frequenc",{"_index":327,"t":{"53":{"position":[[60,9],[314,9]]},"213":{"position":[[79,10],[205,9],[230,9],[543,9],[653,10]]},"251":{"position":[[107,10],[497,10],[1053,9]]}}}],["frequencydeltasweep",{"_index":341,"t":{"53":{"position":[[335,19]]}}}],["frequencyjump1amount",{"_index":344,"t":{"53":{"position":[[395,20]]}}}],["frequencyjump1onset",{"_index":342,"t":{"53":{"position":[[355,19]]}}}],["frequencyjump2amount",{"_index":345,"t":{"53":{"position":[[416,20]]}}}],["frequencyjump2onset",{"_index":343,"t":{"53":{"position":[[375,19]]}}}],["frequencysweep",{"_index":346,"t":{"53":{"position":[[437,14]]}}}],["freshen",{"_index":953,"t":{"145":{"position":[[154,7]]}}}],["front",{"_index":1061,"t":{"159":{"position":[[650,6]]}}}],["full",{"_index":767,"t":{"116":{"position":[[391,4]]},"151":{"position":[[1225,4]]}}}],["fulli",{"_index":436,"t":{"65":{"position":[[259,5]]}}}],["fun",{"_index":1030,"t":{"155":{"position":[[1023,3]]}}}],["function",{"_index":36,"t":{"5":{"position":[[37,9]]},"32":{"position":[[34,10]]},"34":{"position":[[34,10]]},"36":{"position":[[122,9],[226,10]]},"85":{"position":[[6,8],[98,8],[199,8],[372,9],[568,9],[591,9],[683,8],[799,8]]},"106":{"position":[[442,8],[508,8]]},"116":{"position":[[3039,10]]},"147":{"position":[[371,9]]},"149":{"position":[[146,9],[280,8],[533,8],[565,8],[620,9],[664,9]]},"151":{"position":[[66,9],[129,10]]},"159":{"position":[[230,8],[616,9],[1080,8]]},"161":{"position":[[36,9]]},"185":{"position":[[247,8]]},"191":{"position":[[44,9]]},"223":{"position":[[188,8]]},"251":{"position":[[258,8]]},"291":{"position":[[66,8],[284,8]]},"325":{"position":[[120,8],[417,8]]},"327":{"position":[[99,8],[464,8]]},"329":{"position":[[106,8]]}}}],["function(entity_id",{"_index":1474,"t":{"329":{"position":[[690,19]]}}}],["further",{"_index":1407,"t":{"309":{"position":[[232,7]]}}}],["futur",{"_index":1042,"t":{"157":{"position":[[898,7]]},"223":{"position":[[333,7]]}}}],["fx",{"_index":214,"t":{"41":{"position":[[428,2]]},"151":{"position":[[756,2]]}}}],["game",{"_index":45,"t":{"5":{"position":[[132,4],[188,4]]},"39":{"position":[[104,4],[129,4]]},"41":{"position":[[67,4]]},"43":{"position":[[119,5]]},"47":{"position":[[209,4]]},"106":{"position":[[685,4]]},"116":{"position":[[4122,4],[4212,4]]},"118":{"position":[[2136,4],[2177,4],[2551,4],[2576,4]]},"133":{"position":[[2,4]]},"159":{"position":[[3407,4]]},"191":{"position":[[99,4]]},"193":{"position":[[73,5]]},"201":{"position":[[36,5]]},"213":{"position":[[326,4]]},"221":{"position":[[145,4]]},"235":{"position":[[132,4]]},"243":{"position":[[311,4]]},"245":{"position":[[372,4]]},"247":{"position":[[383,4]]},"255":{"position":[[458,4]]},"323":{"position":[[163,4]]},"331":{"position":[[178,4]]},"333":{"position":[[183,4]]}}}],["game'",{"_index":644,"t":{"91":{"position":[[544,6]]}}}],["gameplay",{"_index":373,"t":{"55":{"position":[[115,8]]},"121":{"position":[[0,8]]}}}],["gener",{"_index":429,"t":{"63":{"position":[[370,10],[447,10]]},"67":{"position":[[93,9]]},"112":{"position":[[132,10],[408,9],[776,10],[2892,9]]},"116":{"position":[[1873,10],[3609,9]]},"118":{"position":[[115,9],[221,9]]},"121":{"position":[[38,9]]},"153":{"position":[[640,7]]},"297":{"position":[[168,8]]}}}],["get",{"_index":808,"t":{"118":{"position":[[470,7]]},"126":{"position":[[38,7]]},"147":{"position":[[211,7]]},"291":{"position":[[237,4]]},"325":{"position":[[312,4]]},"327":{"position":[[222,4]]},"329":{"position":[[231,4]]}}}],["get_number_of_play",{"_index":1184,"t":{"195":{"position":[[187,23]]},"197":{"position":[[501,23]]},"205":{"position":[[149,23]]},"207":{"position":[[367,23]]},"209":{"position":[[160,23]]}}}],["github",{"_index":1019,"t":{"155":{"position":[[107,6]]}}}],["give",{"_index":324,"t":{"51":{"position":[[741,4]]},"85":{"position":[[586,4]]},"149":{"position":[[205,6]]},"159":{"position":[[4467,4]]},"289":{"position":[[119,4]]}}}],["given",{"_index":890,"t":{"131":{"position":[[39,5]]},"189":{"position":[[58,5]]},"197":{"position":[[333,6]]},"199":{"position":[[135,7],[192,6]]},"227":{"position":[[213,5]]},"231":{"position":[[73,5]]},"241":{"position":[[147,5]]},"251":{"position":[[446,5]]}}}],["gmatch",{"_index":117,"t":{"32":{"position":[[72,6]]}}}],["go",{"_index":556,"t":{"85":{"position":[[478,5]]},"89":{"position":[[396,2]]},"112":{"position":[[107,5],[390,5],[903,2],[1651,2]]},"114":{"position":[[5,2]]},"116":{"position":[[723,2],[2237,5]]},"147":{"position":[[539,2]]},"151":{"position":[[972,2]]},"153":{"position":[[562,2]]},"155":{"position":[[808,5],[915,3]]},"157":{"position":[[12,2]]},"159":{"position":[[23,2],[3124,5],[3847,2],[4005,2],[4435,3],[4444,2]]},"185":{"position":[[144,2]]},"319":{"position":[[316,5]]}}}],["goe",{"_index":830,"t":{"118":{"position":[[2089,4]]}}}],["gold",{"_index":299,"t":{"49":{"position":[[387,7]]},"51":{"position":[[609,4]]}}}],["gone",{"_index":811,"t":{"118":{"position":[[544,4],[2522,4]]}}}],["good",{"_index":20,"t":{"2":{"position":[[192,4]]},"36":{"position":[[468,4]]},"79":{"position":[[814,4]]},"85":{"position":[[386,4]]},"87":{"position":[[1041,4]]},"91":{"position":[[189,4],[290,4]]},"116":{"position":[[3887,4]]},"151":{"position":[[1112,4]]},"157":{"position":[[916,4]]},"159":{"position":[[820,4],[2028,4],[3635,5]]}}}],["graphic",{"_index":650,"t":{"93":{"position":[[123,9]]},"106":{"position":[[123,8]]},"116":{"position":[[4148,8],[4234,8]]},"121":{"position":[[48,8],[79,9]]}}}],["graphics.lua",{"_index":707,"t":{"108":{"position":[[247,12]]},"112":{"position":[[5,12]]}}}],["greater",{"_index":60,"t":{"10":{"position":[[143,7]]},"12":{"position":[[100,7]]},"14":{"position":[[78,7]]},"75":{"position":[[57,7]]},"309":{"position":[[153,7]]},"311":{"position":[[221,7]]},"313":{"position":[[290,7]]}}}],["green",{"_index":979,"t":{"149":{"position":[[460,5]]},"157":{"position":[[648,5]]}}}],["gsub",{"_index":118,"t":{"32":{"position":[[79,4]]}}}],["guarante",{"_index":260,"t":{"43":{"position":[[52,10]]},"47":{"position":[[69,10]]}}}],["guid",{"_index":636,"t":{"91":{"position":[[235,6]]},"97":{"position":[[64,6]]}}}],["half",{"_index":831,"t":{"118":{"position":[[2225,4],[2284,4],[2445,4],[2489,4]]}}}],["halfway",{"_index":810,"t":{"118":{"position":[[484,7]]}}}],["hand",{"_index":717,"t":{"112":{"position":[[178,5]]}}}],["handi",{"_index":1065,"t":{"159":{"position":[[1074,5]]}}}],["hang",{"_index":989,"t":{"151":{"position":[[441,4]]}}}],["happen",{"_index":1457,"t":{"325":{"position":[[525,8]]}}}],["hard",{"_index":272,"t":{"47":{"position":[[61,4]]}}}],["has_lost",{"_index":1206,"t":{"207":{"position":[[67,9]]},"211":{"position":[[73,9]]}}}],["has_score_leaderboard",{"_index":293,"t":{"49":{"position":[[300,24]]},"51":{"position":[[417,21],[656,21]]},"108":{"position":[[482,24]]}}}],["have",{"_index":22,"t":{"2":{"position":[[223,6]]},"215":{"position":[[183,6]]}}}],["head",{"_index":1034,"t":{"157":{"position":[[428,4]]},"159":{"position":[[3708,4]]}}}],["health",{"_index":582,"t":{"87":{"position":[[301,6],[382,6],[431,6],[819,6],[847,6]]},"245":{"position":[[202,6]]}}}],["height",{"_index":1053,"t":{"159":{"position":[[333,8]]},"185":{"position":[[42,7],[192,6],[379,6],[423,7]]},"309":{"position":[[85,6]]}}}],["hello",{"_index":458,"t":{"71":{"position":[[30,5]]},"77":{"position":[[78,6]]},"81":{"position":[[249,6]]},"209":{"position":[[247,6]]},"255":{"position":[[699,8]]}}}],["help",{"_index":255,"t":{"41":{"position":[[1316,4]]},"106":{"position":[[715,4]]},"147":{"position":[[523,4]]},"157":{"position":[[183,4],[373,7],[522,4],[565,5],[640,7]]}}}],["hemispher",{"_index":1127,"t":{"168":{"position":[[58,10]]}}}],["here",{"_index":11,"t":{"2":{"position":[[113,5]]},"69":{"position":[[148,4]]},"108":{"position":[[373,4]]},"145":{"position":[[11,5],[205,5]]},"147":{"position":[[135,4],[315,4]]},"153":{"position":[[196,4]]},"155":{"position":[[612,5],[654,4]]},"157":{"position":[[0,4]]},"159":{"position":[[277,5],[407,4]]}}}],["here'",{"_index":253,"t":{"41":{"position":[[1275,6]]},"159":{"position":[[2616,6]]}}}],["hertz",{"_index":340,"t":{"53":{"position":[[307,6],[328,6],[473,6],[497,6]]}}}],["hexagon",{"_index":722,"t":{"112":{"position":[[687,8],[791,7],[987,9],[1271,7],[1322,7],[1385,7],[1529,7],[1570,7],[1703,7],[1865,7],[1967,7],[2085,8],[2178,7],[2290,7]]},"116":{"position":[[77,7],[118,7],[372,8],[601,7],[642,7],[775,7],[937,7],[1039,7],[1157,8],[1250,7],[1362,7],[2057,8],[2090,7],[2558,8],[2655,7]]}}}],["hidden",{"_index":1334,"t":{"255":{"position":[[485,6]]}}}],["hide",{"_index":852,"t":{"124":{"position":[[85,4]]}}}],["higher",{"_index":800,"t":{"116":{"position":[[4304,6]]}}}],["highest",{"_index":1191,"t":{"199":{"position":[[158,7]]}}}],["highli",{"_index":1078,"t":{"159":{"position":[[2287,6]]}}}],["hit",{"_index":910,"t":{"135":{"position":[[288,7]]},"243":{"position":[[372,4]]},"245":{"position":[[433,4]]},"247":{"position":[[444,4]]}}}],["hold",{"_index":265,"t":{"45":{"position":[[51,4]]},"63":{"position":[[146,5]]},"91":{"position":[[31,5]]},"112":{"position":[[399,4]]},"159":{"position":[[982,4]]}}}],["home",{"_index":28,"t":{"2":{"position":[[274,4]]},"87":{"position":[[717,4],[984,4]]}}}],["hope",{"_index":25,"t":{"2":{"position":[[249,4]]},"118":{"position":[[2940,4]]}}}],["horizont",{"_index":1360,"t":{"275":{"position":[[118,12]]}}}],["hour",{"_index":895,"t":{"133":{"position":[[23,5]]}}}],["http",{"_index":946,"t":{"143":{"position":[[396,4]]}}}],["http://localhost:9000/pewpew.html",{"_index":761,"t":{"114":{"position":[[388,33]]},"159":{"position":[[4095,33]]}}}],["https://github.com/jyaif/ppl",{"_index":958,"t":{"147":{"position":[[79,28]]}}}],["https://pewpew.l",{"_index":655,"t":{"95":{"position":[[58,19]]}}}],["https://pewpewlive.github.io/ppl",{"_index":963,"t":{"147":{"position":[[254,32]]}}}],["https://repl.it/languages/lua",{"_index":446,"t":{"69":{"position":[[0,29]]}}}],["hud.player_index",{"_index":1225,"t":{"209":{"position":[[121,16]]}}}],["huge",{"_index":162,"t":{"36":{"position":[[373,4]]}}}],["i'll",{"_index":1049,"t":{"159":{"position":[[263,4]]}}}],["i'm",{"_index":1026,"t":{"155":{"position":[[804,3]]}}}],["id",{"_index":754,"t":{"114":{"position":[[140,2]]},"187":{"position":[[190,3]]},"251":{"position":[[856,2],[884,3],[910,3]]},"277":{"position":[[148,2]]},"279":{"position":[[130,2]]},"281":{"position":[[121,3]]},"283":{"position":[[95,2]]},"285":{"position":[[113,2]]},"287":{"position":[[126,2]]},"289":{"position":[[112,3]]},"291":{"position":[[163,2],[265,3]]},"293":{"position":[[74,2]]},"295":{"position":[[168,2]]},"299":{"position":[[145,2],[300,2]]},"301":{"position":[[295,2]]},"303":{"position":[[157,3]]},"305":{"position":[[168,3]]},"307":{"position":[[211,2]]},"309":{"position":[[145,3]]},"311":{"position":[[152,3]]},"313":{"position":[[200,2]]},"315":{"position":[[221,3]]},"321":{"position":[[219,3]]},"325":{"position":[[340,2],[572,2]]},"327":{"position":[[175,2],[250,2],[708,2]]},"329":{"position":[[182,2],[579,2]]},"331":{"position":[[133,2]]},"333":{"position":[[135,2]]}}}],["identifi",{"_index":257,"t":{"43":{"position":[[16,10]]},"213":{"position":[[160,10]]},"217":{"position":[[117,10],[169,10],[212,10]]},"219":{"position":[[91,10],[128,10]]},"265":{"position":[[145,10]]},"277":{"position":[[132,10]]},"279":{"position":[[114,10]]},"281":{"position":[[107,10]]},"283":{"position":[[81,10]]},"285":{"position":[[99,10]]},"287":{"position":[[112,10]]},"289":{"position":[[98,10]]},"291":{"position":[[149,10]]},"293":{"position":[[60,10]]},"295":{"position":[[154,10],[535,10]]},"299":{"position":[[131,10]]},"303":{"position":[[143,10]]},"305":{"position":[[154,10]]},"307":{"position":[[197,10]]},"309":{"position":[[131,10]]},"311":{"position":[[138,10]]},"313":{"position":[[186,10]]},"315":{"position":[[207,10]]},"321":{"position":[[205,10]]},"327":{"position":[[161,10]]},"329":{"position":[[168,10]]},"331":{"position":[[119,10]]},"333":{"position":[[121,10]]}}}],["immedi",{"_index":1380,"t":{"293":{"position":[[77,11]]}}}],["implement",{"_index":174,"t":{"36":{"position":[[540,11]]},"41":{"position":[[734,11]]}}}],["implicet",{"_index":1156,"t":{"185":{"position":[[86,11]]}}}],["import",{"_index":421,"t":{"63":{"position":[[230,10]]},"147":{"position":[[361,9]]},"155":{"position":[[292,9]]}}}],["importantli",{"_index":774,"t":{"116":{"position":[[1993,12]]}}}],["incentiv",{"_index":853,"t":{"124":{"position":[[104,11],[180,11]]}}}],["includ",{"_index":178,"t":{"39":{"position":[[39,9]]},"41":{"position":[[159,8]]},"49":{"position":[[246,7]]},"51":{"position":[[634,7]]},"55":{"position":[[66,9]]},"131":{"position":[[58,8]]},"225":{"position":[[125,8]]},"227":{"position":[[169,8]]}}}],["increas",{"_index":781,"t":{"116":{"position":[[2840,8]]},"118":{"position":[[989,10],[1033,10]]},"126":{"position":[[69,9]]},"141":{"position":[[158,10]]},"195":{"position":[[65,9]]},"197":{"position":[[72,9],[385,9]]}}}],["increment",{"_index":503,"t":{"77":{"position":[[519,11],[640,9]]},"112":{"position":[[932,9],[1414,9]]},"116":{"position":[[3517,9]]}}}],["indefinit",{"_index":521,"t":{"81":{"position":[[235,13]]}}}],["indent",{"_index":663,"t":{"97":{"position":[[89,11]]}}}],["index",{"_index":419,"t":{"63":{"position":[[171,7]]},"77":{"position":[[501,6]]},"79":{"position":[[774,6]]},"89":{"position":[[169,6],[216,11],[474,5]]},"112":{"position":[[437,8],[1202,8],[2603,5],[2709,5]]},"116":{"position":[[1508,5],[1614,5],[2823,5],[3158,5],[3232,7],[3531,5],[3561,5]]},"118":{"position":[[2213,5],[2263,5],[2433,5],[2477,5]]},"159":{"position":[[1277,5],[1337,5],[1675,7],[1739,5],[1767,5]]},"203":{"position":[[142,6]]},"233":{"position":[[47,6],[107,5],[113,6]]},"235":{"position":[[39,6]]},"267":{"position":[[198,5]]},"299":{"position":[[77,6],[199,5],[205,6],[212,5]]}}}],["index1",{"_index":700,"t":{"106":{"position":[[590,7]]}}}],["index2",{"_index":701,"t":{"106":{"position":[[598,7]]}}}],["index_0",{"_index":1393,"t":{"301":{"position":[[88,8]]}}}],["index_1",{"_index":1394,"t":{"301":{"position":[[102,8]]}}}],["indic",{"_index":1301,"t":{"243":{"position":[[287,9]]},"245":{"position":[[348,9]]},"247":{"position":[[359,9]]}}}],["inertiac",{"_index":1099,"t":{"164":{"position":[[13,8]]},"259":{"position":[[121,8],[181,8]]}}}],["info",{"_index":106,"t":{"30":{"position":[[171,4]]},"183":{"position":[[39,5]]}}}],["inform",{"_index":286,"t":{"49":{"position":[[165,14],[180,12]]},"51":{"position":[[189,11],[275,11]]},"87":{"position":[[1066,12]]},"91":{"position":[[461,11]]},"137":{"position":[[45,11]]}}}],["infront",{"_index":973,"t":{"149":{"position":[[337,7]]},"151":{"position":[[160,7]]},"153":{"position":[[335,7]]}}}],["initi",{"_index":237,"t":{"41":{"position":[[887,10]]},"116":{"position":[[2299,7]]},"118":{"position":[[2761,7]]},"157":{"position":[[701,9]]}}}],["inner",{"_index":510,"t":{"79":{"position":[[84,5],[184,5],[208,5],[232,5],[693,5]]},"112":{"position":[[1265,5],[1316,5],[1564,5],[1961,5],[2069,5],[2284,5]]},"116":{"position":[[112,5],[636,5],[1033,5],[1141,5],[1356,5],[2124,5],[2552,5],[2649,5]]}}}],["input",{"_index":1194,"t":{"203":{"position":[[104,6]]}}}],["insert",{"_index":132,"t":{"34":{"position":[[52,6]]}}}],["insid",{"_index":467,"t":{"71":{"position":[[213,6]]},"79":{"position":[[572,6],[645,6]]},"87":{"position":[[1103,6]]},"89":{"position":[[572,6]]},"159":{"position":[[3208,6],[3287,6]]}}}],["instanc",{"_index":445,"t":{"67":{"position":[[123,8]]}}}],["instead",{"_index":109,"t":{"30":{"position":[[238,8]]},"79":{"position":[[875,7]]},"112":{"position":[[184,8]]},"116":{"position":[[1951,8]]},"121":{"position":[[112,7]]},"151":{"position":[[1265,7]]}}}],["int",{"_index":63,"t":{"12":{"position":[[23,4],[33,3],[40,3]]},"16":{"position":[[32,4],[50,3]]},"18":{"position":[[33,3]]},"22":{"position":[[27,5]]},"149":{"position":[[492,4],[688,3]]},"159":{"position":[[1159,3],[1917,3]]},"187":{"position":[[99,3]]},"189":{"position":[[28,4]]},"193":{"position":[[32,3]]},"195":{"position":[[47,4],[59,3]]},"197":{"position":[[54,4],[66,3]]},"199":{"position":[[44,5],[50,3]]},"203":{"position":[[39,5]]},"205":{"position":[[41,5],[47,3]]},"207":{"position":[[39,4],[91,4],[244,4],[271,3]]},"209":{"position":[[43,4]]},"211":{"position":[[46,5],[68,4]]},"213":{"position":[[90,4],[103,4],[118,3]]},"215":{"position":[[61,3]]},"217":{"position":[[80,3],[87,3]]},"219":{"position":[[67,3]]},"221":{"position":[[79,3]]},"223":{"position":[[99,3]]},"229":{"position":[[30,5],[36,3]]},"231":{"position":[[45,3]]},"233":{"position":[[54,3]]},"235":{"position":[[46,4]]},"237":{"position":[[62,4],[102,3]]},"241":{"position":[[67,3]]},"243":{"position":[[94,3]]},"245":{"position":[[98,3]]},"247":{"position":[[99,3]]},"249":{"position":[[53,3]]},"251":{"position":[[54,4],[89,4],[102,4],[118,4],[140,4],[164,4],[237,4]]},"255":{"position":[[126,4]]},"261":{"position":[[59,4]]},"263":{"position":[[60,3]]},"265":{"position":[[68,3]]},"267":{"position":[[89,3]]},"295":{"position":[[74,4],[123,3]]},"299":{"position":[[84,3]]},"301":{"position":[[97,4],[111,3]]},"303":{"position":[[71,3]]},"319":{"position":[[103,4],[119,4]]},"331":{"position":[[83,3]]},"333":{"position":[[85,3]]}}}],["integ",{"_index":40,"t":{"5":{"position":[[85,9]]},"8":{"position":[[74,7]]},"12":{"position":[[55,7]]},"39":{"position":[[7,9]]},"41":{"position":[[125,7],[782,9],[950,7]]},"43":{"position":[[3,7]]}}}],["integr",{"_index":77,"t":{"18":{"position":[[49,8]]},"22":{"position":[[80,8]]},"41":{"position":[[823,8]]}}}],["interact",{"_index":16,"t":{"2":{"position":[[156,11]]},"41":{"position":[[1285,11]]}}}],["intermedi",{"_index":385,"t":{"57":{"position":[[166,12]]}}}],["intern",{"_index":231,"t":{"41":{"position":[[699,11]]}}}],["interpol",{"_index":688,"t":{"106":{"position":[[136,13],[163,13]]},"116":{"position":[[4021,12],[4132,11],[4217,12]]},"207":{"position":[[671,12]]},"297":{"position":[[136,12]]},"317":{"position":[[93,13]]}}}],["interpret",{"_index":211,"t":{"41":{"position":[[282,13]]},"135":{"position":[[8,11],[160,11],[316,11]]}}}],["invalid",{"_index":1386,"t":{"295":{"position":[[606,8]]}}}],["involv",{"_index":1462,"t":{"327":{"position":[[329,8]]}}}],["is_opt",{"_index":1330,"t":{"255":{"position":[[131,12],[422,11],[587,11],[746,11]]}}}],["isawesom",{"_index":586,"t":{"87":{"position":[[327,9]]}}}],["isn't",{"_index":1000,"t":{"151":{"position":[[1217,5]]}}}],["issu",{"_index":795,"t":{"116":{"position":[[3835,6]]}}}],["it'",{"_index":873,"t":{"126":{"position":[[238,4]]},"151":{"position":[[937,4],[1062,4]]},"159":{"position":[[165,4],[835,4],[966,4],[2900,4]]}}}],["item",{"_index":964,"t":{"147":{"position":[[385,5]]},"153":{"position":[[171,5]]}}}],["iter",{"_index":684,"t":{"104":{"position":[[47,9]]},"112":{"position":[[2631,9],[2737,9]]},"116":{"position":[[1536,9],[1642,9]]}}}],["j",{"_index":509,"t":{"79":{"position":[[53,1],[329,1],[362,5],[873,1]]}}}],["jack",{"_index":617,"t":{"89":{"position":[[128,8],[266,4]]}}}],["jf",{"_index":1025,"t":{"155":{"position":[[633,3]]}}}],["jfxr",{"_index":360,"t":{"53":{"position":[[687,4],[751,4]]}}}],["joe",{"_index":573,"t":{"87":{"position":[[124,5],[269,3]]}}}],["john",{"_index":587,"t":{"87":{"position":[[352,6],[938,4],[965,4]]}}}],["join",{"_index":415,"t":{"63":{"position":[[53,6],[434,4]]},"112":{"position":[[2027,7],[2146,7],[2258,7],[2828,7]]},"116":{"position":[[1099,7],[1218,7],[1330,7],[1733,7]]}}}],["joystick'",{"_index":1196,"t":{"203":{"position":[[194,10],[245,10],[294,10],[346,10]]}}}],["json",{"_index":281,"t":{"49":{"position":[[25,5]]}}}],["keep",{"_index":301,"t":{"51":{"position":[[31,4]]},"126":{"position":[[256,4]]},"145":{"position":[[79,4]]},"155":{"position":[[55,4],[325,4]]},"157":{"position":[[933,4]]},"159":{"position":[[1686,4]]}}}],["kept",{"_index":882,"t":{"128":{"position":[[180,4]]}}}],["kill",{"_index":885,"t":{"128":{"position":[[218,7]]}}}],["kind",{"_index":624,"t":{"89":{"position":[[363,4]]},"149":{"position":[[516,4]]},"151":{"position":[[319,4]]},"159":{"position":[[3094,4]]}}}],["king",{"_index":839,"t":{"121":{"position":[[12,5]]}}}],["know",{"_index":380,"t":{"57":{"position":[[36,4]]},"106":{"position":[[60,4]]},"116":{"position":[[3988,5]]},"145":{"position":[[123,4]]},"151":{"position":[[1078,5]]},"157":{"position":[[74,5]]},"159":{"position":[[3488,4]]},"323":{"position":[[171,4]]}}}],["lan",{"_index":937,"t":{"143":{"position":[[246,3]]}}}],["languag",{"_index":950,"t":{"145":{"position":[[69,9]]},"159":{"position":[[2681,8],[2917,9]]}}}],["lap",{"_index":515,"t":{"79":{"position":[[384,4]]}}}],["larg",{"_index":901,"t":{"133":{"position":[[172,6]]},"178":{"position":[[13,5]]},"237":{"position":[[227,5],[587,5]]},"255":{"position":[[282,5]]},"323":{"position":[[355,5]]}}}],["larger",{"_index":1409,"t":{"311":{"position":[[258,7]]},"313":{"position":[[327,7]]},"319":{"position":[[376,6]]}}}],["last",{"_index":749,"t":{"112":{"position":[[2565,4],[2626,4],[2732,4]]},"116":{"position":[[1470,4],[1531,4],[1637,4],[3099,4],[3312,4]]},"118":{"position":[[352,4]]},"133":{"position":[[7,5]]},"153":{"position":[[4,4]]}}}],["later",{"_index":561,"t":{"85":{"position":[[692,5]]},"112":{"position":[[325,5]]},"151":{"position":[[1414,5]]},"159":{"position":[[2275,5]]},"189":{"position":[[145,6]]}}}],["leaderboard",{"_index":317,"t":{"51":{"position":[[505,12]]},"126":{"position":[[107,11]]}}}],["leak",{"_index":905,"t":{"135":{"position":[[103,4]]}}}],["learn",{"_index":368,"t":{"55":{"position":[[26,5]]},"69":{"position":[[117,9]]},"145":{"position":[[41,8],[219,5]]}}}],["leav",{"_index":235,"t":{"41":{"position":[[838,7]]},"128":{"position":[[258,7]]}}}],["left",{"_index":1040,"t":{"157":{"position":[[680,5]]},"215":{"position":[[200,5]]}}}],["len",{"_index":119,"t":{"32":{"position":[[84,3]]}}}],["less",{"_index":251,"t":{"41":{"position":[[1260,4]]},"45":{"position":[[106,4]]},"207":{"position":[[415,4]]},"309":{"position":[[202,4]]},"311":{"position":[[164,4]]},"313":{"position":[[233,4]]},"333":{"position":[[268,4]]}}}],["lesser",{"_index":859,"t":{"124":{"position":[[275,6]]}}}],["let'",{"_index":375,"t":{"55":{"position":[[138,5]]},"106":{"position":[[750,5]]},"116":{"position":[[0,5]]},"149":{"position":[[103,5]]}}}],["level",{"_index":8,"t":{"2":{"position":[[81,5]]},"30":{"position":[[176,5]]},"36":{"position":[[103,6]]},"49":{"position":[[100,7],[155,9],[208,6]]},"51":{"position":[[24,6],[303,6],[371,6],[479,5],[726,5]]},"55":{"position":[[58,7]]},"57":{"position":[[102,6]]},"91":{"position":[[78,6],[102,6],[395,5],[501,5],[568,5]]},"93":{"position":[[2,5],[201,6]]},"95":{"position":[[20,5],[119,6]]},"99":{"position":[[126,7],[288,7]]},"106":{"position":[[33,5]]},"108":{"position":[[94,5]]},"110":{"position":[[19,5]]},"114":{"position":[[301,5],[379,5]]},"116":{"position":[[3913,5],[3926,5],[4083,5],[4377,5]]},"118":{"position":[[424,6],[867,6],[1548,6],[2705,6]]},"128":{"position":[[160,5]]},"133":{"position":[[36,5]]},"135":{"position":[[71,6],[116,6]]},"143":{"position":[[360,5]]},"145":{"position":[[258,5]]},"147":{"position":[[30,6],[189,6],[420,5]]},"149":{"position":[[47,6]]},"151":{"position":[[344,7]]},"155":{"position":[[36,6],[318,6],[464,6],[498,6],[597,6],[647,6],[675,5],[753,6],[960,6],[979,6]]},"157":{"position":[[276,5],[357,7],[402,6],[473,6],[664,5],[770,5],[856,5]]},"159":{"position":[[1015,6],[1821,6],[2472,6],[2536,5],[2829,5],[3019,7],[3175,5],[3268,5],[3453,6],[3557,6],[3595,6],[3918,6],[3967,6],[4085,6],[4215,5],[4298,7],[4392,5],[4413,7],[4457,5]]},"161":{"position":[[62,6]]},"185":{"position":[[275,5]]},"187":{"position":[[122,5],[235,6]]},"197":{"position":[[217,5],[283,5]]},"225":{"position":[[113,6],[295,7]]}}}],["level'",{"_index":861,"t":{"124":{"position":[[293,7]]},"185":{"position":[[72,7],[162,7]]}}}],["level.lua",{"_index":292,"t":{"49":{"position":[[287,12]]},"51":{"position":[[406,10]]},"108":{"position":[[237,9],[469,12]]},"114":{"position":[[11,10]]},"116":{"position":[[2929,10]]},"118":{"position":[[641,9],[684,9],[1325,9],[1800,9]]},"157":{"position":[[804,10]]},"159":{"position":[[3057,11],[3392,10]]}}}],["level_height",{"_index":1055,"t":{"159":{"position":[[436,12],[520,13]]}}}],["level_length",{"_index":1057,"t":{"159":{"position":[[463,12]]}}}],["level_nam",{"_index":1085,"t":{"159":{"position":[[2989,13],[3192,12]]}}}],["lib",{"_index":788,"t":{"116":{"position":[[3263,3]]}}}],["librari",{"_index":44,"t":{"5":{"position":[[121,7],[169,7]]},"30":{"position":[[34,9],[85,8],[104,8],[162,8],[219,8]]},"32":{"position":[[4,7],[205,8]]},"34":{"position":[[4,7],[149,8]]},"36":{"position":[[13,7],[196,7],[620,8]]},"93":{"position":[[246,10]]},"149":{"position":[[301,7]]},"151":{"position":[[42,8]]},"161":{"position":[[11,7]]}}}],["lifetim",{"_index":1300,"t":{"243":{"position":[[84,9],[278,8],[404,8]]},"245":{"position":[[88,9],[339,8],[465,8]]},"247":{"position":[[89,9],[350,8],[476,8]]}}}],["limit",{"_index":693,"t":{"106":{"position":[[362,7]]},"133":{"position":[[129,10]]},"135":{"position":[[301,6]]}}}],["line",{"_index":392,"t":{"59":{"position":[[42,5]]},"77":{"position":[[457,4]]},"87":{"position":[[1288,5],[1326,5]]},"112":{"position":[[2022,4],[2141,4],[2253,4],[2804,4]]},"116":{"position":[[1094,4],[1213,4],[1325,4],[1709,4],[2346,5],[2450,4],[2959,4]]},"118":{"position":[[36,4],[709,4]]}}}],["link",{"_index":364,"t":{"53":{"position":[[756,4],[779,5]]},"59":{"position":[[164,7]]},"63":{"position":[[414,6]]},"147":{"position":[[72,6],[124,4],[304,4]]}}}],["list",{"_index":394,"t":{"59":{"position":[[85,4]]},"61":{"position":[[32,4]]},"63":{"position":[[87,4],[154,5]]},"89":{"position":[[409,4]]},"153":{"position":[[163,4],[208,4]]},"159":{"position":[[4405,4]]},"225":{"position":[[54,4]]},"227":{"position":[[134,4]]}}}],["list Search the documentation - +