├── README.md ├── app ├── Images │ ├── 1.jpg │ ├── alpha.png │ ├── grasslight-big.jpg │ ├── home0.png │ ├── home1.png │ ├── logIn0.png │ ├── logIn1.png │ ├── ph.png │ ├── sign0.png │ ├── sign1.png │ ├── strips.png │ ├── task_body.png │ ├── task_bt.png │ ├── task_bt1.png │ ├── task_end.png │ ├── task_l_a.gif │ ├── task_line.png │ ├── task_r_a.png │ ├── task_s_bg.gif │ ├── task_s_bg.png │ └── task_top.png ├── control.html ├── css │ ├── main.css │ └── main.css~ ├── ico │ ├── 1.png │ ├── 2.png │ ├── 3.png │ ├── 4.png │ ├── 5.png │ ├── 6.png │ └── 7.png ├── index.html ├── js │ ├── Detector.js │ ├── MD2CharacterComplex.js │ ├── Stats.js │ ├── Three.js │ ├── jquery.js │ ├── socket.io.js │ └── treeGeneric.js └── models │ ├── ogro │ ├── Ogro.txt │ ├── ogro-light.js │ ├── skins │ │ ├── arboshak.png │ │ ├── ctf_b.png │ │ ├── ctf_r.png │ │ ├── darkam.png │ │ ├── freedom.png │ │ ├── gib.png │ │ ├── gordogh.png │ │ ├── grok.jpg │ │ ├── igdosh.png │ │ ├── khorne.png │ │ ├── nabogro.png │ │ ├── ogrobase.png │ │ ├── sharokh.png │ │ └── weapon.jpg │ └── weapon-light.js │ └── ratamahatta │ ├── ratamahatta.js │ ├── ratamahatta.txt │ ├── readme.txt │ ├── skins │ ├── ctf_b.png │ ├── ctf_r.png │ ├── dead.png │ ├── gearwhore.png │ ├── ratamahatta.png │ ├── w_bfg.png │ ├── w_blaster.png │ ├── w_chaingun.png │ ├── w_glauncher.png │ ├── w_hyperblaster.png │ ├── w_machinegun.png │ ├── w_railgun.png │ ├── w_rlauncher.png │ ├── w_shotgun.png │ ├── w_sshotgun.png │ └── weapon.png │ ├── src │ ├── ratamahatta.md2 │ ├── w_bfg.md2 │ ├── w_blaster.md2 │ ├── w_chaingun.MD2 │ ├── w_glauncher.md2 │ ├── w_hyperblaster.md2 │ ├── w_machinegun.md2 │ ├── w_railgun.md2 │ ├── w_rlauncher.md2 │ ├── w_shotgun.md2 │ ├── w_sshotgun.md2 │ └── weapon.md2 │ ├── w_bfg.js │ ├── w_blaster.js │ ├── w_chaingun.js │ ├── w_glauncher.js │ ├── w_hyperblaster.js │ ├── w_machinegun.js │ ├── w_railgun.js │ ├── w_rlauncher.js │ ├── w_shotgun.js │ ├── w_sshotgun.js │ └── weapon.js ├── config.js ├── mime.js ├── server.js └── start.js /README.md: -------------------------------------------------------------------------------- 1 | webGL,websocket,nodeJS做的3D的多人在线游戏 2 | === 3 | 4 | 最左侧是聊天系统,进入时默认缩放在左下角,聊天系统支持广播和私聊两种方式,要先输入昵称才能进入聊天室,点击右侧昵称切换到私聊,点击右侧牛头换到广播,支持键盘操作。 5 | server文件夹里面的server.js是静态文件服务器,要注意路径问题,start.js是websocket服务器,注意端口号。常规方式启动就好了,index.html里面的websocket服务器地址修改一下 6 | 7 | 所有的键盘事件 8 | 上键,向前走 9 | w键,向前走 10 | 下键,向后走 11 | s键,向后走 12 | 左键,向左转圈 13 | a键,向左转圈 14 | 右键,向右转圈 15 | d键,向右转圈 16 | 空格键,跳跃 17 | y键,装死 18 | q键,攻击 19 | ctrl键,蹲下 20 | r键,换枪 21 | g键,蹲下攻击 22 | f键,蹲下痛苦 23 | h键,蹲下装死 24 | t键,嘲讽 25 | c键,滑动 26 | u键,痛苦 27 | v键,wave摇动 28 | x键,指点 29 | 0--9换枪 30 | `键 系统菜单 31 | 聊天时 ctrl+enter 发送聊天消息 32 | 33 | 所有的动作要按住键盘才能正常进行,松开键盘默认取消该动作。 34 | 35 | ## License 36 | 37 | 使用MIT协议发布。 38 | -------------------------------------------------------------------------------- /app/Images/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/Images/1.jpg -------------------------------------------------------------------------------- /app/Images/alpha.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/Images/alpha.png -------------------------------------------------------------------------------- /app/Images/grasslight-big.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/Images/grasslight-big.jpg -------------------------------------------------------------------------------- /app/Images/home0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/Images/home0.png -------------------------------------------------------------------------------- /app/Images/home1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/Images/home1.png -------------------------------------------------------------------------------- /app/Images/logIn0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/Images/logIn0.png -------------------------------------------------------------------------------- /app/Images/logIn1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/Images/logIn1.png -------------------------------------------------------------------------------- /app/Images/ph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/Images/ph.png -------------------------------------------------------------------------------- /app/Images/sign0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/Images/sign0.png -------------------------------------------------------------------------------- /app/Images/sign1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/Images/sign1.png -------------------------------------------------------------------------------- /app/Images/strips.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/Images/strips.png -------------------------------------------------------------------------------- /app/Images/task_body.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/Images/task_body.png -------------------------------------------------------------------------------- /app/Images/task_bt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/Images/task_bt.png -------------------------------------------------------------------------------- /app/Images/task_bt1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/Images/task_bt1.png -------------------------------------------------------------------------------- /app/Images/task_end.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/Images/task_end.png -------------------------------------------------------------------------------- /app/Images/task_l_a.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/Images/task_l_a.gif -------------------------------------------------------------------------------- /app/Images/task_line.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/Images/task_line.png -------------------------------------------------------------------------------- /app/Images/task_r_a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/Images/task_r_a.png -------------------------------------------------------------------------------- /app/Images/task_s_bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/Images/task_s_bg.gif -------------------------------------------------------------------------------- /app/Images/task_s_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/Images/task_s_bg.png -------------------------------------------------------------------------------- /app/Images/task_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/Images/task_top.png -------------------------------------------------------------------------------- /app/control.html: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | webgl 5 | 6 | 7 | 61 | 62 | 63 | 64 |
65 | three.js 66 |
67 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 703 | 704 | 705 | 706 | -------------------------------------------------------------------------------- /app/css/main.css: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | body { 3 | color: #000; 4 | font-family:Monospace; 5 | font-size:13px; 6 | text-align:center; 7 | font-weight: bold; 8 | 9 | background-color: #fff; 10 | margin: 0px; 11 | overflow: hidden; 12 | } 13 | 14 | #info { 15 | color:#000; 16 | position: relative; 17 | margin: 0 auto -2.1em; 18 | top: 0px; 19 | 20 | padding: 5px; 21 | z-index:100; 22 | } 23 | 24 | /**********系统菜单动画**************/ 25 | #menuBar, 26 | #menuBar li { 27 | margin: 0; 28 | padding: 0; 29 | list-style: none; 30 | display: inline; 31 | } 32 | #menuBar{ 33 | text-align: center; 34 | position: absolute; 35 | bottom: -60px; 36 | width: 100%; 37 | -webkit-transition-property: bottom; 38 | -webkit-transition-duration: 1s; 39 | -webkit-transition-timing-function: ease-in-out; 40 | -webkit-transition-delay: 0s; 41 | } 42 | #menuBar a:hover{ 43 | z-index: 200; 44 | } 45 | #menuBar a img { 46 | border: none; 47 | -webkit-transition: all .2s; 48 | -webkit-transform-origin: bottom; 49 | -moz-transform-origin: bottom; 50 | } 51 | #menuBar a:hover img { 52 | -webkit-transform: scale(1.5); 53 | -moz-transform: scale(1.5); 54 | } 55 | 56 | /***********聊天室的界面*****************/ 57 | body a{ text-decoration:none;} 58 | body a:hover{ text-decoration:none; cursor:pointer;} 59 | body a img{ border:none;} 60 | body ul{ margin:0; padding:0; text-align:left; text-decoration:none; list-style:none;} 61 | body ul li{text-decoration:none; list-style:none;} 62 | 63 | .page_home a{background:url(../Images/home0.png) center no-repeat; width:39px; height:39px; display:block;} 64 | .page_home a:hover{background:url(../Images/home1.png) center no-repeat; } 65 | 66 | .task_top{ background:url(../Images/task_top.png) no-repeat; height:12px; width:100%; position:absolute; top:-12px;*top:-13px; left:0px;} 67 | .task_body{ background:url(../Images/task_body.png) repeat-y;height:570px} 68 | .task_tb td{ vertical-align:top; font-family:"微软雅黑"; font-size:12px;} 69 | .task_end{background:url(../Images/task_end.png) no-repeat; height:51px;} 70 | 71 | .task_l{ padding-left:9px; width:303px;} 72 | .task_l ul{ padding-left:2px; padding-bottom:3px;} 73 | .task_l ul li{line-height:18px; color:#333; display:block;padding:5px} 74 | .task_l ul li:hover{ background:url(../Images/task_l_a.gif) center left no-repeat;background-size:99.5% 100%} 75 | .task_s{ height:58px; background:url(../Images/task_s_bg.gif) repeat-x top #f1f5fb; position:absolute;bottom:49px} 76 | .task_r{ font-family:"微软雅黑"; padding-left:3px;} 77 | .task_line{ height:2px; background:url(../Images/task_line.png) repeat-x top; margin-left:5px; margin-right:7px;} 78 | .task_top_ul{ margin-top:20px;} 79 | .task_r ul li{ height:30px; line-height:30px; text-indent:1em;} 80 | .task_r ul li span{ float:left;} 81 | .task_r ul li{ color:#FFF; height:30px; display:block;} 82 | .task_r ul li img{ border:none; width:36px; height:29px; margin-top:4px; margin-right:5px;} 83 | .task_r ul li:hover{ background:url(../Images/task_r_a.png) center left no-repeat;} 84 | 85 | .task_pic a{ width:64px; height:64px; background:url(../Images/ph.png) center no-repeat; display:block;} 86 | .task_pic img{ border:none; margin:8px;} 87 | .task_bt{ width:44px; height:25px; line-height:25px; text-align:center; position:absolute; bottom:50px;display:none} 88 | .task_bt a{ color:#FFF; width:44px; height:25px; display:block;} 89 | .task_bt_l{ right:59px;} 90 | .task_bt_l a{ background:url(../Images/sign0.png) no-repeat center;} 91 | .task_bt_l a:hover{ background:url(../Images/sign1.png) no-repeat center;} 92 | .task_bt_r{ right:16px;} 93 | .task_bt_r a{background:url(../Images/logIn0.png) no-repeat center;} 94 | .task_bt_r a:hover{background:url(../Images/logIn1.png) no-repeat center;} 95 | 96 | .task_r_a{ position:absolute; text-align:center; line-height:25px;} 97 | .task_r_a a{ width:88px; height:25px; display:block; background:url(../Images/task_bt.png) no-repeat center; color:#FFF;} 98 | .task_r_a a:hover{ background:url(../Images/task_bt1.png) center no-repeat;} 99 | .task_edit{ bottom:50px; right:15px;} 100 | 101 | .msg_title{margin-left:5px} 102 | .msg_con{font-size:14px;font-weight:normal;margin-left:5px} 103 | 104 | /********添加头像小动画*********/ 105 | .task_pic{ 106 | top:-45px; 107 | right:20px; 108 | display:block; 109 | position:absolute; 110 | opacity:0; 111 | -webkit-transition: opacity 0.2s linear 0.4s; 112 | } 113 | .task_pic:hover{ 114 | -webkit-animation-name:rock; 115 | -webkit-animation-delay: 0s; 116 | -webkit-animation-duration: 1s; 117 | -webkit-animation-timing-function: linear; 118 | -webkit-animation-direction: alternate; 119 | -webkit-animation-iteration-count: infinite; 120 | } 121 | 122 | @-webkit-keyframes rock{ 123 | from{-webkit-transform:rotate(-6deg);} 124 | to{-webkit-transform:rotate(6deg);} 125 | } 126 | /*********来消息时的提醒动画**********/ 127 | .page_home{ 128 | position:absolute; 129 | bottom:5px; 130 | left:10px; 131 | z-index:40001; 132 | } 133 | .msgPage_home{ 134 | -webkit-animation-name: hasMsg; 135 | -webkit-animation-delay: 0s; 136 | -webkit-animation-duration: 0.4s; 137 | -webkit-animation-timing-function: cubic-bezier; 138 | -webkit-animation-direction: alternate; 139 | -webkit-animation-iteration-count: infinite; 140 | } 141 | @-webkit-keyframes hasMsg{ 142 | from{-webkit-transform:scale(0.85)} 143 | to{-webkit-transform:scale(1.1)} 144 | } 145 | 146 | /*******显示和隐藏隐藏菜单动画********/ 147 | #js_chatroom{ 148 | -webkit-transition-property: width, height, opacity; 149 | -webkit-transition-duration: 0.4s, 0.3s, 0.2s; 150 | -webkit-transition-timing-function: ease-in-out, ease-in-out, linear; 151 | -webkit-transition-delay: 0.05s, 0.05s, 0.1s; 152 | z-index:20000; 153 | position:absolute; 154 | font-size:12px; 155 | } 156 | .task_box{ 157 | width:430px; 158 | height: 622px; 159 | left:3px; 160 | bottom:0px; 161 | opacity: 1; 162 | } 163 | 164 | .task_box_h{ 165 | width:0px; 166 | height:100px; 167 | left:3px; 168 | bottom:0px; 169 | opacity: 0; 170 | } 171 | 172 | /******输入框*******/ 173 | .task_input{ 174 | height:45px; 175 | width:0px; 176 | line-height:20px; 177 | color:#333; 178 | margin-top:4px; 179 | margin-left:5px; 180 | border:#999 1px solid; 181 | font-family:"微软雅黑"; 182 | -webkit-transition:width 0.3s linear 0.1s; 183 | } 184 | #js_privateChat{ 185 | bottom: 80px; 186 | -webkit-transition: bottom 0.2s linear 0s; 187 | } 188 | -------------------------------------------------------------------------------- /app/css/main.css~: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | body { 3 | color: #000; 4 | font-family:Monospace; 5 | font-size:13px; 6 | text-align:center; 7 | font-weight: bold; 8 | 9 | background-color: #fff; 10 | margin: 0px; 11 | overflow: hidden; 12 | } 13 | 14 | #info { 15 | color:#000; 16 | position: relative; 17 | margin: 0 auto -2.1em; 18 | top: 0px; 19 | 20 | padding: 5px; 21 | z-index:100; 22 | } 23 | 24 | /**********系统菜单动画**************/ 25 | #menuBar, 26 | #menuBar li { 27 | margin: 0; 28 | padding: 0; 29 | list-style: none; 30 | display: inline; 31 | } 32 | #menuBar{ 33 | text-align: center; 34 | position: absolute; 35 | bottom: -60px; 36 | width: 100%; 37 | -webkit-transition-property: bottom; 38 | -webkit-transition-duration: 1s; 39 | -webkit-transition-timing-function: ease-in-out; 40 | -webkit-transition-delay: 0s; 41 | } 42 | #menuBar a:hover{ 43 | z-index: 200; 44 | } 45 | #menuBar a img { 46 | border: none; 47 | -webkit-transition: all .2s; 48 | -webkit-transform-origin: bottom; 49 | -moz-transform-origin: bottom; 50 | } 51 | #menuBar a:hover img { 52 | -webkit-transform: scale(1.5); 53 | -moz-transform: scale(1.5); 54 | } 55 | 56 | /***********聊天室的界面*****************/ 57 | body a{ text-decoration:none;} 58 | body a:hover{ text-decoration:none; cursor:pointer;} 59 | body a img{ border:none;} 60 | body ul{ margin:0; padding:0; text-align:left; text-decoration:none; list-style:none;} 61 | body ul li{text-decoration:none; list-style:none;} 62 | 63 | .page_home a{background:url(../Images/home0.png) center no-repeat; width:39px; height:39px; display:block;} 64 | .page_home a:hover{background:url(../Images/home1.png) center no-repeat; } 65 | 66 | .task_top{ background:url(../Images/task_top.png) no-repeat; height:12px; width:100%; position:absolute; top:-12px;*top:-13px; left:0px;} 67 | .task_body{ background:url(../Images/task_body.png) repeat-y;height:570px} 68 | .task_tb td{ vertical-align:top; font-family:"微软雅黑"; font-size:12px;} 69 | .task_end{background:url(../Images/task_end.png) no-repeat; height:51px;} 70 | 71 | .task_l{ padding-left:9px; width:303px;} 72 | .task_l ul{ padding-left:2px; padding-bottom:3px;} 73 | .task_l ul li{line-height:18px; color:#333; display:block;padding:5px} 74 | .task_l ul li:hover{ background:url(../Images/task_l_a.gif) center left no-repeat;background-size:99.5% 100%} 75 | .task_s{ height:58px; background:url(../Images/task_s_bg.gif) repeat-x top #f1f5fb; position:absolute;bottom:49px} 76 | .task_r{ font-family:"微软雅黑"; padding-left:3px;} 77 | .task_line{ height:2px; background:url(../Images/task_line.png) repeat-x top; margin-left:5px; margin-right:7px;} 78 | .task_top_ul{ margin-top:20px;} 79 | .task_r ul li{ height:30px; line-height:30px; text-indent:1em;} 80 | .task_r ul li span{ float:left;} 81 | .task_r ul li{ color:#FFF; height:30px; display:block;} 82 | .task_r ul li img{ border:none; width:36px; height:29px; margin-top:4px; margin-right:5px;} 83 | .task_r ul li:hover{ background:url(../Images/task_r_a.png) center left no-repeat;} 84 | 85 | .task_pic a{ width:64px; height:64px; background:url(../Images/ph.png) center no-repeat; display:block;} 86 | .task_pic img{ border:none; margin:8px;} 87 | .task_bt{ width:44px; height:25px; line-height:25px; text-align:center; position:absolute; bottom:50px;display:none} 88 | .task_bt a{ color:#FFF; width:44px; height:25px; display:block;} 89 | .task_bt_l{ right:59px;} 90 | .task_bt_l a{ background:url(../Images/sign0.png) no-repeat center;} 91 | .task_bt_l a:hover{ background:url(../Images/sign1.png) no-repeat center;} 92 | .task_bt_r{ right:16px;} 93 | .task_bt_r a{background:url(../Images/logIn0.png) no-repeat center;} 94 | .task_bt_r a:hover{background:url(../Images/logIn1.png) no-repeat center;} 95 | 96 | .task_r_a{ position:absolute; text-align:center; line-height:25px;} 97 | .task_r_a a{ width:88px; height:25px; display:block; background:url(../Images/task_bt.png) no-repeat center; color:#FFF;} 98 | .task_r_a a:hover{ background:url(../Images/task_bt1.png) center no-repeat;} 99 | .task_edit{ bottom:50px; right:15px;} 100 | 101 | .msg_title{margin-left:5px} 102 | .msg_con{font-size:14px;font-weight:normal;margin-left:5px} 103 | 104 | /********添加头像小动画*********/ 105 | .task_pic{ 106 | top:-45px; 107 | right:20px; 108 | display:block; 109 | position:absolute; 110 | opacity:0; 111 | -webkit-transition: opacity 0.2s linear 0.4s; 112 | } 113 | .task_pic:hover{ 114 | -webkit-animation-name:rock; 115 | -webkit-animation-delay: 0s; 116 | -webkit-animation-duration: 1s; 117 | -webkit-animation-timing-function: linear; 118 | -webkit-animation-direction: alternate; 119 | -webkit-animation-iteration-count: infinite; 120 | } 121 | 122 | @-webkit-keyframes rock{ 123 | from{-webkit-transform:rotate(-6deg);} 124 | to{-webkit-transform:rotate(6deg);} 125 | } 126 | /*********来消息时的提醒动画**********/ 127 | .page_home{ 128 | position:absolute; 129 | bottom:5px; 130 | left:10px; 131 | z-index:40001; 132 | } 133 | .msgPage_home{ 134 | -webkit-animation-name: hasMsg; 135 | -webkit-animation-delay: 0s; 136 | -webkit-animation-duration: 0.4s; 137 | -webkit-animation-timing-function: cubic-bezier; 138 | -webkit-animation-direction: alternate; 139 | -webkit-animation-iteration-count: infinite; 140 | } 141 | @-webkit-keyframes hasMsg{ 142 | from{-webkit-transform:scale(0.85)} 143 | to{-webkit-transform:scale(1.1)} 144 | } 145 | 146 | /*******显示和隐藏隐藏菜单动画********/ 147 | #js_chatroom{ 148 | -webkit-transition-property: width, height, opacity; 149 | -webkit-transition-duration: 0.4s, 0.3s, 0.2s; 150 | -webkit-transition-timing-function: ease-in-out, ease-in-out, linear; 151 | -webkit-transition-delay: 0.05s, 0.05s, 0.1s; 152 | z-index:20000; 153 | position:absolute; 154 | font-size:12px; 155 | } 156 | .task_box{ 157 | width:430px; 158 | height: 622px; 159 | left:3px; 160 | bottom:0px; 161 | opacity: 1; 162 | } 163 | 164 | .task_box_h{ 165 | width:0px; 166 | height:100px; 167 | left:3px; 168 | bottom:0px; 169 | opacity: 0; 170 | } 171 | 172 | /******输入框*******/ 173 | .task_input{ 174 | height:45px; 175 | width:0px; 176 | line-height:20px; 177 | color:#333; 178 | margin-top:4px; 179 | margin-left:5px; 180 | border:#999 1px solid; 181 | font-family:"微软雅黑"; 182 | -webkit-transition:width 0.3s linear 0.1s; 183 | } 184 | #js_privateChat{ 185 | -webkit-transition: bottom 0.2s linear 0s; 186 | } 187 | -------------------------------------------------------------------------------- /app/ico/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/ico/1.png -------------------------------------------------------------------------------- /app/ico/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/ico/2.png -------------------------------------------------------------------------------- /app/ico/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/ico/3.png -------------------------------------------------------------------------------- /app/ico/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/ico/4.png -------------------------------------------------------------------------------- /app/ico/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/ico/5.png -------------------------------------------------------------------------------- /app/ico/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/ico/6.png -------------------------------------------------------------------------------- /app/ico/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/ico/7.png -------------------------------------------------------------------------------- /app/index.html: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | webgl 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 21 | 22 |
23 |
24 |
25 |
26 |
发送
27 |
清空
28 |
进入聊天室
29 |
30 | 31 | 32 | 43 | 48 | 49 |
33 |
    34 |
  • 35 |
    烟水茫茫 20:19:33
    36 |
    长天净,绛河清浅,皓月婵娟,思绵绵。夜永对景,那堪屈指,暗想从前。
    37 |
  • 38 |
39 |
40 | 41 |
42 |
44 |
    45 |
  • 烟水茫茫
  • 46 |
47 |
50 | 51 |
52 |
53 |
54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 1283 | 1284 | 1285 | 1286 | -------------------------------------------------------------------------------- /app/js/Detector.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author alteredq / http://alteredqualia.com/ 3 | * @author mr.doob / http://mrdoob.com/ 4 | */ 5 | 6 | Detector = { 7 | 8 | canvas : !! window.CanvasRenderingContext2D, 9 | webgl : ( function () { try { return !! window.WebGLRenderingContext && !! document.createElement( 'canvas' ).getContext( 'experimental-webgl' ); } catch( e ) { return false; } } )(), 10 | workers : !! window.Worker, 11 | fileapi : window.File && window.FileReader && window.FileList && window.Blob, 12 | 13 | getWebGLErrorMessage : function () { 14 | 15 | var domElement = document.createElement( 'div' ); 16 | 17 | domElement.style.fontFamily = 'monospace'; 18 | domElement.style.fontSize = '13px'; 19 | domElement.style.textAlign = 'center'; 20 | domElement.style.background = '#eee'; 21 | domElement.style.color = '#000'; 22 | domElement.style.padding = '1em'; 23 | domElement.style.width = '475px'; 24 | domElement.style.margin = '5em auto 0'; 25 | 26 | if ( ! this.webgl ) { 27 | 28 | domElement.innerHTML = window.WebGLRenderingContext ? [ 29 | 'Your graphics card does not seem to support WebGL.
', 30 | 'Find out how to get it here.' 31 | ].join( '\n' ) : [ 32 | 'Your browser does not seem to support WebGL.
', 33 | 'Find out how to get it here.' 34 | ].join( '\n' ); 35 | 36 | } 37 | 38 | return domElement; 39 | 40 | }, 41 | 42 | addGetWebGLMessage : function ( parameters ) { 43 | 44 | var parent, id, domElement; 45 | 46 | parameters = parameters || {}; 47 | 48 | parent = parameters.parent !== undefined ? parameters.parent : document.body; 49 | id = parameters.id !== undefined ? parameters.id : 'oldie'; 50 | 51 | domElement = Detector.getWebGLErrorMessage(); 52 | domElement.id = id; 53 | 54 | parent.appendChild( domElement ); 55 | 56 | } 57 | 58 | }; 59 | -------------------------------------------------------------------------------- /app/js/MD2CharacterComplex.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author alteredq / http://alteredqualia.com/ 3 | * @modify wangbin17910@gmail.com 4 | */ 5 | 6 | THREE.MD2CharacterComplex = function () { 7 | 8 | var scope = this; 9 | 10 | this.scale = 1; 11 | 12 | // animation parameters 13 | 14 | this.animationFPS = 6; 15 | this.transitionFrames = 15; 16 | 17 | // movement model parameters 18 | 19 | this.maxSpeed = 275; 20 | this.maxReverseSpeed = -275; 21 | 22 | this.frontAcceleration = 600; 23 | this.backAcceleration = 600; 24 | 25 | this.frontDecceleration = 600; 26 | 27 | this.angularSpeed = 2.5; 28 | 29 | // rig 30 | 31 | this.root = new THREE.Object3D(); 32 | 33 | this.meshBody = null; 34 | this.meshWeapon = null; 35 | 36 | this.controls = null; 37 | 38 | // skins 39 | 40 | this.skinsBody = []; 41 | this.skinsWeapon = []; 42 | 43 | this.weapons = []; 44 | 45 | this.currentSkin = undefined; 46 | 47 | // 48 | 49 | this.onLoadComplete = function () {}; 50 | 51 | // internals 52 | 53 | this.meshes = []; 54 | this.animations = {}; 55 | 56 | this.loadCounter = 0; 57 | 58 | // internal movement control variables 59 | 60 | this.speed = 0; 61 | this.bodyOrientation = 0; 62 | 63 | this.walkSpeed = this.maxSpeed; 64 | this.crouchSpeed = this.maxSpeed * 0.5; 65 | 66 | // internal animation parameters 67 | 68 | this.activeAnimation = null; 69 | this.oldAnimation = null; 70 | 71 | // API 72 | 73 | this.enableShadows = function ( enable ) { 74 | 75 | for ( var i = 0; i < this.meshes.length; i ++ ) { 76 | 77 | this.meshes[ i ].castShadow = enable; 78 | this.meshes[ i ].receiveShadow = enable; 79 | 80 | } 81 | 82 | }; 83 | 84 | this.setVisible = function ( enable ) { 85 | 86 | for ( var i = 0; i < this.meshes.length; i ++ ) { 87 | 88 | this.meshes[ i ].visible = enable; 89 | this.meshes[ i ].visible = enable; 90 | 91 | } 92 | 93 | }; 94 | 95 | 96 | this.shareParts = function ( original ) { 97 | 98 | this.animations = original.animations; 99 | this.walkSpeed = original.walkSpeed; 100 | this.crouchSpeed = original.crouchSpeed; 101 | 102 | this.skinsBody = original.skinsBody; 103 | this.skinsWeapon = original.skinsWeapon; 104 | 105 | // BODY 106 | 107 | var mesh = createPart( original.meshBody.geometry, this.skinsBody[ 0 ] ); 108 | mesh.scale.set( this.scale, this.scale, this.scale ); 109 | 110 | this.root.position.y = original.root.position.y; 111 | this.root.add( mesh ); 112 | 113 | this.meshBody = mesh; 114 | 115 | this.meshes.push( mesh ); 116 | 117 | // WEAPONS 118 | 119 | for ( var i = 0; i < original.weapons.length; i ++ ) { 120 | 121 | var mesh = createPart( original.weapons[ i ].geometry, this.skinsWeapon[ i ] ); 122 | mesh.scale.set( this.scale, this.scale, this.scale ); 123 | mesh.visible = false; 124 | 125 | mesh.name = name; 126 | 127 | this.root.add( mesh ); 128 | 129 | this.weapons[ i ] = mesh; 130 | this.meshWeapon = mesh; 131 | 132 | this.meshes.push( mesh ); 133 | 134 | } 135 | 136 | }; 137 | 138 | this.loadParts = function ( config ) { 139 | 140 | this.animations = config.animations; 141 | this.walkSpeed = config.walkSpeed; 142 | this.crouchSpeed = config.crouchSpeed; 143 | 144 | this.loadCounter = config.weapons.length * 2 + config.skins.length + 1; 145 | 146 | var weaponsTextures = [] 147 | for ( var i = 0; i < config.weapons.length; i ++ ) weaponsTextures[ i ] = config.weapons[ i ][ 1 ]; 148 | 149 | // SKINS 150 | 151 | this.skinsBody = loadTextures( config.baseUrl + "skins/", config.skins ); 152 | this.skinsWeapon = loadTextures( config.baseUrl + "skins/", weaponsTextures ); 153 | 154 | // BODY 155 | 156 | var loader = new THREE.JSONLoader(); 157 | 158 | loader.load( config.baseUrl + config.body, function( geo ) { 159 | 160 | geo.computeBoundingBox(); 161 | scope.root.position.y = - scope.scale * geo.boundingBox.min.y; 162 | 163 | var mesh = createPart( geo, scope.skinsBody[ 0 ] ); 164 | mesh.scale.set( scope.scale, scope.scale, scope.scale ); 165 | 166 | scope.root.add( mesh ); 167 | 168 | scope.meshBody = mesh; 169 | scope.meshes.push( mesh ); 170 | 171 | checkLoadingComplete(); 172 | 173 | } ); 174 | 175 | // WEAPONS 176 | 177 | var generateCallback = function ( index, name ) { 178 | 179 | return function( geo ) { 180 | 181 | var mesh = createPart( geo, scope.skinsWeapon[ index ] ); 182 | mesh.scale.set( scope.scale, scope.scale, scope.scale ); 183 | mesh.visible = false; 184 | 185 | mesh.name = name; 186 | 187 | scope.root.add( mesh ); 188 | 189 | scope.weapons[ index ] = mesh; 190 | scope.meshWeapon = mesh; 191 | scope.meshes.push( mesh ); 192 | 193 | checkLoadingComplete(); 194 | 195 | } 196 | 197 | } 198 | 199 | for ( var i = 0; i < config.weapons.length; i ++ ) { 200 | 201 | loader.load( config.baseUrl + config.weapons[ i ][ 0 ], generateCallback( i, config.weapons[ i ][ 0 ] ) ); 202 | 203 | } 204 | 205 | }; 206 | 207 | this.setPlaybackRate = function ( rate ) { 208 | 209 | if ( this.meshBody ) this.meshBody.duration = this.meshBody.baseDuration / rate; 210 | if ( this.meshWeapon ) this.meshWeapon.duration = this.meshWeapon.baseDuration / rate; 211 | 212 | }; 213 | 214 | this.setWireframe = function ( wireframeEnabled ) { 215 | 216 | if ( wireframeEnabled ) { 217 | 218 | if ( this.meshBody ) this.meshBody.material = this.meshBody.materialWireframe; 219 | if ( this.meshWeapon ) this.meshWeapon.material = this.meshWeapon.materialWireframe; 220 | 221 | } else { 222 | 223 | if ( this.meshBody ) this.meshBody.material = this.meshBody.materialTexture; 224 | if ( this.meshWeapon ) this.meshWeapon.material = this.meshWeapon.materialTexture; 225 | 226 | } 227 | 228 | }; 229 | 230 | this.setSkin = function( index ) { 231 | 232 | if ( this.meshBody && this.meshBody.material.wireframe === false ) { 233 | 234 | this.meshBody.material.map = this.skinsBody[ index ]; 235 | this.currentSkin = index; 236 | 237 | } 238 | 239 | }; 240 | 241 | this.setWeapon = function ( index ) { 242 | 243 | for ( var i = 0; i < this.weapons.length; i ++ ) this.weapons[ i ].visible = false; 244 | 245 | var activeWeapon = this.weapons[ index ]; 246 | 247 | if ( activeWeapon ) { 248 | 249 | activeWeapon.visible = true; 250 | this.meshWeapon = activeWeapon; 251 | 252 | if ( this.activeAnimation ) { 253 | 254 | activeWeapon.playAnimation( this.activeAnimation ); 255 | this.meshWeapon.setAnimationTime( this.activeAnimation, this.meshBody.getAnimationTime( this.activeAnimation ) ); 256 | 257 | } 258 | 259 | } 260 | 261 | }; 262 | 263 | this.setAnimation = function ( animationName ) { 264 | 265 | if ( animationName === this.activeAnimation || !animationName ) return; 266 | 267 | if ( this.meshBody ) { 268 | 269 | this.meshBody.setAnimationWeight( animationName, 0 ); 270 | this.meshBody.playAnimation( animationName ); 271 | 272 | this.oldAnimation = this.activeAnimation; 273 | this.activeAnimation = animationName; 274 | 275 | this.blendCounter = this.transitionFrames; 276 | 277 | } 278 | 279 | if ( this.meshWeapon ) { 280 | 281 | this.meshWeapon.setAnimationWeight( animationName, 0 ); 282 | this.meshWeapon.playAnimation( animationName ); 283 | 284 | } 285 | 286 | 287 | }; 288 | 289 | this.update = function ( delta ) { 290 | 291 | if ( this.controls ) this.updateMovementModel( delta ); 292 | 293 | if ( this.animations ) { 294 | 295 | this.updateBehaviors( delta ); 296 | this.updateAnimations( delta ); 297 | 298 | } 299 | 300 | }; 301 | 302 | this.updateAnimations = function ( delta ) { 303 | 304 | var mix = 1; 305 | 306 | if ( this.blendCounter > 0 ) { 307 | 308 | mix = ( this.transitionFrames - this.blendCounter ) / this.transitionFrames; 309 | this.blendCounter -= 1; 310 | 311 | } 312 | 313 | if ( this.meshBody ) { 314 | 315 | this.meshBody.update( delta ); 316 | 317 | this.meshBody.setAnimationWeight( this.activeAnimation, mix ); 318 | this.meshBody.setAnimationWeight( this.oldAnimation, 1 - mix ); 319 | 320 | } 321 | 322 | if ( this.meshWeapon ) { 323 | 324 | this.meshWeapon.update( delta ); 325 | 326 | this.meshWeapon.setAnimationWeight( this.activeAnimation, mix ); 327 | this.meshWeapon.setAnimationWeight( this.oldAnimation, 1 - mix ); 328 | 329 | } 330 | 331 | }; 332 | 333 | this.updateBehaviors = function ( delta ) { 334 | 335 | var controls = this.controls; 336 | var animations = this.animations; 337 | 338 | var moveAnimation, idleAnimation; 339 | 340 | // crouch vs stand 341 | 342 | if ( controls.crouch ) { 343 | 344 | moveAnimation = animations[ "crouchMove" ]; 345 | idleAnimation = animations[ "crouchIdle" ]; 346 | 347 | } else { 348 | 349 | moveAnimation = animations[ "move" ]; 350 | idleAnimation = animations[ "idle" ]; 351 | 352 | } 353 | 354 | // actions 355 | 356 | if ( controls.jump ) { 357 | 358 | moveAnimation = animations[ "jump" ]; 359 | idleAnimation = animations[ "jump" ]; 360 | 361 | } 362 | 363 | // death 364 | if ( controls.death ) { 365 | 366 | moveAnimation = animations[ "death" ]; 367 | idleAnimation = animations[ "death" ]; 368 | 369 | } 370 | 371 | // pain 372 | if ( controls.pain ) { 373 | 374 | moveAnimation = animations[ "pain" ]; 375 | idleAnimation = animations[ "pain" ]; 376 | 377 | } 378 | 379 | //salute 380 | if ( controls.salute ) { 381 | 382 | moveAnimation = animations[ "salute" ]; 383 | idleAnimation = animations[ "salute" ]; 384 | 385 | } 386 | 387 | // crouchAttach 388 | if ( controls.crouchAttach ) { 389 | 390 | moveAnimation = animations[ "crouchAttach" ]; 391 | idleAnimation = animations[ "crouchAttach" ]; 392 | 393 | } 394 | 395 | // crouchPain 396 | if ( controls.crouchPain ) { 397 | 398 | moveAnimation = animations[ "crouchPain" ]; 399 | idleAnimation = animations[ "crouchPain" ]; 400 | 401 | } 402 | 403 | // crouchDeath 404 | if ( controls.crouchDeath ) { 405 | 406 | moveAnimation = animations[ "crouchDeath" ]; 407 | idleAnimation = animations[ "crouchDeath" ]; 408 | 409 | } 410 | 411 | // taunt 412 | if ( controls.taunt ) { 413 | 414 | moveAnimation = animations[ "taunt" ]; 415 | idleAnimation = animations[ "taunt" ]; 416 | 417 | } 418 | 419 | // flip 420 | if ( controls.flip ) { 421 | 422 | moveAnimation = animations[ "flip" ]; 423 | idleAnimation = animations[ "flip" ]; 424 | 425 | } 426 | 427 | // wave 428 | if ( controls.wave ) { 429 | 430 | moveAnimation = animations[ "wave" ]; 431 | idleAnimation = animations[ "wave" ]; 432 | 433 | } 434 | 435 | // point 436 | if ( controls.point ) { 437 | 438 | moveAnimation = animations[ "point" ]; 439 | idleAnimation = animations[ "point" ]; 440 | 441 | } 442 | 443 | if ( controls.attack ) { 444 | 445 | if ( controls.crouch ) { 446 | 447 | moveAnimation = animations[ "crouchAttack" ]; 448 | idleAnimation = animations[ "crouchAttack" ]; 449 | 450 | } else { 451 | 452 | moveAnimation = animations[ "attack" ]; 453 | idleAnimation = animations[ "attack" ]; 454 | 455 | } 456 | 457 | } 458 | 459 | // set animations 460 | 461 | if ( controls.moveForward || controls.moveBackward || controls.moveLeft || controls.moveRight ) { 462 | 463 | if ( this.activeAnimation !== moveAnimation ) { 464 | 465 | this.setAnimation( moveAnimation ); 466 | 467 | } 468 | 469 | } 470 | 471 | 472 | if ( Math.abs( this.speed ) < 0.2 * this.maxSpeed && !( controls.moveLeft || controls.moveRight ) ) { 473 | 474 | if ( this.activeAnimation !== idleAnimation ) { 475 | 476 | this.setAnimation( idleAnimation ); 477 | 478 | } 479 | 480 | } 481 | 482 | // set animation direction 483 | 484 | if ( controls.moveForward ) { 485 | 486 | if ( this.meshBody ) { 487 | 488 | this.meshBody.setAnimationDirectionForward( this.activeAnimation ); 489 | this.meshBody.setAnimationDirectionForward( this.oldAnimation ); 490 | 491 | } 492 | 493 | if ( this.meshWeapon ) { 494 | 495 | this.meshWeapon.setAnimationDirectionForward( this.activeAnimation ); 496 | this.meshWeapon.setAnimationDirectionForward( this.oldAnimation ); 497 | 498 | } 499 | 500 | } 501 | 502 | if ( controls.moveBackward ) { 503 | 504 | if ( this.meshBody ) { 505 | 506 | this.meshBody.setAnimationDirectionBackward( this.activeAnimation ); 507 | this.meshBody.setAnimationDirectionBackward( this.oldAnimation ); 508 | 509 | } 510 | 511 | if ( this.meshWeapon ) { 512 | 513 | this.meshWeapon.setAnimationDirectionBackward( this.activeAnimation ); 514 | this.meshWeapon.setAnimationDirectionBackward( this.oldAnimation ); 515 | 516 | } 517 | 518 | } 519 | 520 | }; 521 | 522 | this.updateMovementModel = function ( delta ) { 523 | 524 | var controls = this.controls; 525 | 526 | // speed based on controls 527 | 528 | if ( controls.crouch ) this.maxSpeed = this.crouchSpeed; 529 | else this.maxSpeed = this.walkSpeed; 530 | 531 | this.maxReverseSpeed = -this.maxSpeed; 532 | 533 | if ( controls.moveForward ) this.speed = THREE.Math.clamp( this.speed + delta * this.frontAcceleration, this.maxReverseSpeed, this.maxSpeed ); 534 | if ( controls.moveBackward ) this.speed = THREE.Math.clamp( this.speed - delta * this.backAcceleration, this.maxReverseSpeed, this.maxSpeed ); 535 | 536 | // orientation based on controls 537 | // (don't just stand while turning) 538 | 539 | var dir = 1; 540 | 541 | if ( controls.moveLeft ) { 542 | 543 | this.bodyOrientation += delta * this.angularSpeed; 544 | this.speed = THREE.Math.clamp( this.speed + dir * delta * this.frontAcceleration, this.maxReverseSpeed, this.maxSpeed ); 545 | 546 | } 547 | 548 | if ( controls.moveRight ) { 549 | 550 | this.bodyOrientation -= delta * this.angularSpeed; 551 | this.speed = THREE.Math.clamp( this.speed + dir * delta * this.frontAcceleration, this.maxReverseSpeed, this.maxSpeed ); 552 | 553 | } 554 | 555 | // speed decay 556 | 557 | if ( ! ( controls.moveForward || controls.moveBackward ) ) { 558 | 559 | if ( this.speed > 0 ) { 560 | 561 | var k = exponentialEaseOut( this.speed / this.maxSpeed ); 562 | this.speed = THREE.Math.clamp( this.speed - k * delta * this.frontDecceleration, 0, this.maxSpeed ); 563 | 564 | } else { 565 | 566 | var k = exponentialEaseOut( this.speed / this.maxReverseSpeed ); 567 | this.speed = THREE.Math.clamp( this.speed + k * delta * this.backAcceleration, this.maxReverseSpeed, 0 ); 568 | 569 | } 570 | 571 | } 572 | 573 | // displacement 574 | 575 | var forwardDelta = this.speed * delta; 576 | 577 | this.root.position.x += Math.sin( this.bodyOrientation ) * forwardDelta; 578 | this.root.position.z += Math.cos( this.bodyOrientation ) * forwardDelta; 579 | 580 | // steering 581 | 582 | this.root.rotation.y = this.bodyOrientation; 583 | 584 | }; 585 | 586 | // internal helpers 587 | 588 | function loadTextures( baseUrl, textureUrls ) { 589 | 590 | var mapping = new THREE.UVMapping(); 591 | var textures = []; 592 | 593 | for ( var i = 0; i < textureUrls.length; i ++ ) { 594 | 595 | textures[ i ] = THREE.ImageUtils.loadTexture( baseUrl + textureUrls[ i ], mapping, checkLoadingComplete ); 596 | textures[ i ].name = textureUrls[ i ]; 597 | 598 | } 599 | 600 | return textures; 601 | 602 | }; 603 | 604 | function createPart( geometry, skinMap ) { 605 | 606 | geometry.computeMorphNormals(); 607 | 608 | var whiteMap = THREE.ImageUtils.generateDataTexture( 1, 1, new THREE.Color( 0xffffff ) ); 609 | var materialWireframe = new THREE.MeshPhongMaterial( { color: 0xffaa00, specular: 0x111111, shininess: 50, wireframe: true, shading: THREE.SmoothShading, map: whiteMap, morphTargets: true, morphNormals: true, perPixel: true, metal: true } ); 610 | 611 | var materialTexture = new THREE.MeshPhongMaterial( { color: 0xffffff, specular: 0x111111, shininess: 50, wireframe: false, shading: THREE.SmoothShading, map: skinMap, morphTargets: true, morphNormals: true, perPixel: true, metal: true } ); 612 | materialTexture.wrapAround = true; 613 | 614 | // 615 | 616 | var mesh = new THREE.MorphBlendMesh( geometry, materialTexture ); 617 | mesh.rotation.y = -Math.PI/2; 618 | 619 | // 620 | 621 | mesh.materialTexture = materialTexture; 622 | mesh.materialWireframe = materialWireframe; 623 | 624 | // 625 | 626 | mesh.autoCreateAnimations( scope.animationFPS ); 627 | 628 | return mesh; 629 | 630 | }; 631 | 632 | function checkLoadingComplete() { 633 | 634 | scope.loadCounter -= 1; 635 | if ( scope.loadCounter === 0 ) scope.onLoadComplete(); 636 | 637 | }; 638 | 639 | function exponentialEaseOut( k ) { return k === 1 ? 1 : - Math.pow( 2, - 10 * k ) + 1; } 640 | 641 | }; 642 | -------------------------------------------------------------------------------- /app/js/Stats.js: -------------------------------------------------------------------------------- 1 | // stats.js r8 - http://github.com/mrdoob/stats.js 2 | var Stats=function(){var h,a,n=0,o=0,i=Date.now(),u=i,p=i,l=0,q=1E3,r=0,e,j,f,b=[[16,16,48],[0,255,255]],m=0,s=1E3,t=0,d,k,g,c=[[16,48,16],[0,255,0]];h=document.createElement("div");h.style.cursor="pointer";h.style.width="80px";h.style.opacity="0.9";h.style.zIndex="10001";h.addEventListener("mousedown",function(a){a.preventDefault();n=(n+1)%2;n==0?(e.style.display="block",d.style.display="none"):(e.style.display="none",d.style.display="block")},!1);e=document.createElement("div");e.style.textAlign= 3 | "left";e.style.lineHeight="1.2em";e.style.backgroundColor="rgb("+Math.floor(b[0][0]/2)+","+Math.floor(b[0][1]/2)+","+Math.floor(b[0][2]/2)+")";e.style.padding="0 0 3px 3px";h.appendChild(e);j=document.createElement("div");j.style.fontFamily="Helvetica, Arial, sans-serif";j.style.fontSize="9px";j.style.color="rgb("+b[1][0]+","+b[1][1]+","+b[1][2]+")";j.style.fontWeight="bold";j.innerHTML="FPS";e.appendChild(j);f=document.createElement("div");f.style.position="relative";f.style.width="74px";f.style.height= 4 | "30px";f.style.backgroundColor="rgb("+b[1][0]+","+b[1][1]+","+b[1][2]+")";for(e.appendChild(f);f.children.length<74;)a=document.createElement("span"),a.style.width="1px",a.style.height="30px",a.style.cssFloat="left",a.style.backgroundColor="rgb("+b[0][0]+","+b[0][1]+","+b[0][2]+")",f.appendChild(a);d=document.createElement("div");d.style.textAlign="left";d.style.lineHeight="1.2em";d.style.backgroundColor="rgb("+Math.floor(c[0][0]/2)+","+Math.floor(c[0][1]/2)+","+Math.floor(c[0][2]/2)+")";d.style.padding= 5 | "0 0 3px 3px";d.style.display="none";h.appendChild(d);k=document.createElement("div");k.style.fontFamily="Helvetica, Arial, sans-serif";k.style.fontSize="9px";k.style.color="rgb("+c[1][0]+","+c[1][1]+","+c[1][2]+")";k.style.fontWeight="bold";k.innerHTML="MS";d.appendChild(k);g=document.createElement("div");g.style.position="relative";g.style.width="74px";g.style.height="30px";g.style.backgroundColor="rgb("+c[1][0]+","+c[1][1]+","+c[1][2]+")";for(d.appendChild(g);g.children.length<74;)a=document.createElement("span"), 6 | a.style.width="1px",a.style.height=Math.random()*30+"px",a.style.cssFloat="left",a.style.backgroundColor="rgb("+c[0][0]+","+c[0][1]+","+c[0][2]+")",g.appendChild(a);return{domElement:h,update:function(){i=Date.now();m=i-u;s=Math.min(s,m);t=Math.max(t,m);k.textContent=m+" MS ("+s+"-"+t+")";var a=Math.min(30,30-m/200*30);g.appendChild(g.firstChild).style.height=a+"px";u=i;o++;if(i>p+1E3)l=Math.round(o*1E3/(i-p)),q=Math.min(q,l),r=Math.max(r,l),j.textContent=l+" FPS ("+q+"-"+r+")",a=Math.min(30,30-l/ 7 | 100*30),f.appendChild(f.firstChild).style.height=a+"px",p=i,o=0}}}; 8 | 9 | -------------------------------------------------------------------------------- /app/models/ogro/Ogro.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10/11/98 4 | ================================================================ 5 | Model Name : Ogro 6 | installation directory : quake2/baseq2/players/ogro 7 | 8 | Model Author : Magarnigal 9 | email :mellor@netgazer.net.au 10 | homepage :http://magarn.3dpalette.com 11 | 12 | 13 | Skins Author : Ogro_Fix 14 | email : ogro_fix@yahoo.com 15 | homepage : http://www.fondation.com/pandemonium 16 | 17 | 18 | Additional info : Fix has included a cloth and ogrobase skin that people may use as a base for skinning ogro. The 19 | mapping can be a bit confusing, 2d skinners beware. 20 | 21 | 22 | 23 | Additional skin by : Deranged - (Sharokh) 24 | email : deranged@deathsdoor.com 25 | homepage : http://www.gibbed.com/thebin 26 | 27 | 28 | 29 | Ogrific law: 30 | 31 | An Ogro is similar to an ogre, but why the O?? In French ogre is pronounced ogrr, not oger, also 'gros' means to be fat/big...so ogre - gros makes Ogro! After all, it's cuter than just ogre :). 32 | 33 | The Ogro is smaller than a normal ogre, but just as fat and only slightly less stupid. As opposed to common belief, he is not an evil creature, only killing as is absolutely necessary. 34 | 35 | Imagine, if you will, an Ogro in the subway. As he enters the carriage, people become plastered to the walls due to Ogro's size. He's too big! Ahh well, maybe Ogro should just sit on one of these tiny seats...a strange sound can be heard (sproottch). Imagine now, the look of an astonished ogro...huh?!? Standing up, he looks at the seat. OMFO! (oh my fucking ogrod!)! Where a little old grandma had been sitting, now looks more like a pizza! But, I swear, it was a grandma! 36 | 37 | This sort of occurrence is common to an Ogro...its in their nature. when you want to talk to an ogro, stay at good distance (better if you call him from behind), as his movements are rather "uncontrolled", and you might cop a smash in the face! 38 | 39 | A special diet is required for Ogros. When they're babies (ogrillons), their mum's (ogresses) give them copious amounts of chili con carne, canned beans and the like. The result of this carefully structured diet produces an Ogro capable of immense farting achievements. 40 | 41 | The ogro is just full of bad smells. That's not to say he's not clean. An ogro will wash himself often (doesn't fear water as opposed to trolls). The problem lies in his intestinal flora (and fauna). all his orifices (ogrifices?) are used for ogrific spells. (green clouds, etc..). Nothing can be done against this kind of onslaught, except to run or stop breathing. 42 | 43 | It's a useful trait to have in the subway. people will often leave the carriage, trying to find the culprit. (Although all that is need it to look at the face of the ogro: he's 44 | happy, he farted well, and it smells really bad). 45 | 46 | 47 | Ogro's existed long before humans. In fact, one school of thought holds to the theory that humans are a degenerated version of Ogro, more intelligent, but evil. 48 | 49 | 50 | Hidden Ogro's of today include: Obelix, fat boy slim, any Sumo, Amish (braveheart movie), slamfist (small soldiers movie), bud spencer, etc... 51 | 52 | 53 | 54 | 55 | 56 | Additional Credits to : id software, Howzer, Rod, 57 | 58 | 59 | 60 | ================================================================ 61 | * Play Information * 62 | 63 | New Sounds : Yes, original sounds from Eric vonRothkirch of 'The Coven', email him 64 | at redchurch@uswest.net 65 | 66 | CTF Skins : yes 67 | VWEP Support : yes, standard Id weapons with modified, ogrific skins. 68 | 69 | 70 | * Construction * 71 | Poly Counts 72 | Tris.md2 : 670 73 | weapon.md2 : 122 74 | 75 | Vert Counts 76 | tris.md2 : 358 - anyone actually need this number? 77 | weapon.md2 : 74 78 | 79 | Skin Wastage 80 | tris.md2 : 1% 81 | weapon.md2 : 2% 82 | 83 | Skin Count : 14 84 | 85 | Base : none 86 | 87 | 88 | A background to some of the skins: 89 | 90 | Grok: the standard cyberpunk ogro 91 | 92 | freedom: this one is dedicated to braveheart. 93 | 94 | gib: this one didn't know how to use the ogrific mixer (used to make mammoth steaks), and jumped into it..the mixer did all the work. 95 | 96 | slaanesh: this one is an evil ogro, serving the god of lust. 97 | 98 | Khorne: this one is even more evil than slaanesh, serving the god of blood and violence. 99 | 100 | Nabogro: it's a dwarf (yeah, well, it was), he's a trollslayer. In french nabot means small/dwarfy, so, nabogro went logically. 101 | 102 | darkam: hoo, this one is a troll! (yes, he's green, and ogros hate green), but even if he's green it's the best friend of the original, the true ogro. 103 | 104 | Igdosh: played with a nuclear missile, thinking it was a cigar... 105 | 106 | Gorash: he's evil too, has been created by the doctor ogrenstein. but this is the prototype, the real ogrenstein is under construction for now. 107 | 108 | Arboshak: He felt in love with 3CPO and tried to cyborgize himself. but finally preferred R2D2, but too late 109 | 110 | 111 | 112 | Editors used:- 113 | 114 | Modelling/animation : Lightwave 5.5 115 | 116 | Converting/clean-up : QME, Q2modeler 117 | 118 | Skinning/mapping : NST, Paint shop Pro 119 | 120 | 121 | 122 | Build/Animation time : longer than expected. 5-10 hours per skin. 123 | 124 | 125 | * How to use this model * 126 | 127 | extract to quake2\baseq2\players\ogro run quake2, send us money, frag other players. 128 | 129 | 130 | * Copyright / Permissions * 131 | 132 | QUAKE(R) and QUAKE II(R) are registered trademarks of id Software, Inc. -------------------------------------------------------------------------------- /app/models/ogro/skins/arboshak.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/models/ogro/skins/arboshak.png -------------------------------------------------------------------------------- /app/models/ogro/skins/ctf_b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/models/ogro/skins/ctf_b.png -------------------------------------------------------------------------------- /app/models/ogro/skins/ctf_r.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/models/ogro/skins/ctf_r.png -------------------------------------------------------------------------------- /app/models/ogro/skins/darkam.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/models/ogro/skins/darkam.png -------------------------------------------------------------------------------- /app/models/ogro/skins/freedom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/models/ogro/skins/freedom.png -------------------------------------------------------------------------------- /app/models/ogro/skins/gib.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/models/ogro/skins/gib.png -------------------------------------------------------------------------------- /app/models/ogro/skins/gordogh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/models/ogro/skins/gordogh.png -------------------------------------------------------------------------------- /app/models/ogro/skins/grok.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/models/ogro/skins/grok.jpg -------------------------------------------------------------------------------- /app/models/ogro/skins/igdosh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/models/ogro/skins/igdosh.png -------------------------------------------------------------------------------- /app/models/ogro/skins/khorne.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/models/ogro/skins/khorne.png -------------------------------------------------------------------------------- /app/models/ogro/skins/nabogro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/models/ogro/skins/nabogro.png -------------------------------------------------------------------------------- /app/models/ogro/skins/ogrobase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/models/ogro/skins/ogrobase.png -------------------------------------------------------------------------------- /app/models/ogro/skins/sharokh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/models/ogro/skins/sharokh.png -------------------------------------------------------------------------------- /app/models/ogro/skins/weapon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/models/ogro/skins/weapon.jpg -------------------------------------------------------------------------------- /app/models/ogro/weapon-light.js: -------------------------------------------------------------------------------- 1 | { 2 | 3 | "metadata" : { 4 | "formatVersion" : 3, 5 | "description" : "Md 2 model converted from Weapon.md2 using MD2 to json converter." 6 | }, 7 | 8 | "scale" : 1.000000, 9 | 10 | "materials": [ { 11 | "DbgColor" : 15658734, 12 | "DbgIndex" : 0, 13 | "DbgName" : "md2_material" 14 | }], 15 | 16 | "vertices": [23.4,22.0,-11.8,20.4,18.3,-12.0,23.3,23.9,-13.6,15.3,15.1,-8.9,15.6,15.4,-12.1,23.4,23.5,-9.7,21.2,26.0,-13.5,15.7,19.1,-13.9,18.8,27.2,-10.4,18.7,26.9,-12.7,11.4,19.8,-12.6,22.6,22.5,-5.2,20.6,18.0,-8.5,19.7,18.7,-5.2,22.2,24.5,-3.8,14.9,15.8,-5.8,23.2,23.7,-7.4,20.2,26.6,-4.6,14.6,19.7,-4.5,17.9,27.3,-6.0,10.7,20.2,-6.8,12.4,20.7,-8.7,18.6,27.3,-8.2,18.5,25.7,-9.9,21.0,24.7,-9.6,12.7,20.4,-10.4,20.9,24.7,-8.2,18.4,25.7,-8.6,22.5,22.7,-8.6,22.9,26.6,-10.7,24.1,25.4,-10.9,23.9,25.7,-12.5,22.8,26.8,-12.2,21.0,25.8,-11.8,21.3,25.3,-10.5,22.4,24.3,-10.3,23.1,23.7,-11.4,22.7,24.1,-12.8,21.6,25.2,-13.0,22.1,27.2,-5.5,22.5,26.8,-7.0,23.5,25.7,-6.3,23.1,26.1,-4.9,20.3,26.1,-6.2,21.0,25.6,-7.3,22.0,24.5,-7.2,22.4,24.0,-5.8,21.7,24.7,-4.6,20.7,25.7,-4.8,16.5,18.9,-8.1,16.0,17.5,-7.7,20.8,13.1,-6.9,14.5,14.8,-7.9,17.5,9.5,-7.5,15.1,8.4,-7.7,11.1,14.1,-8.3,10.7,17.1,-8.1,13.9,21.5,-8.7,16.7,18.7,-9.9,16.3,17.3,-10.3,21.5,15.8,-8.3,21.1,13.0,-9.3,14.6,14.6,-10.0,17.7,9.4,-9.0,17.2,7.8,-8.2,15.4,8.3,-9.3,11.4,14.0,-10.4,11.1,17.0,-11.0,14.1,21.4,-10.2,7.5,10.6,-10.6,7.3,10.7,-8.5,4.8,11.8,-9.0,5.0,11.7,-10.7,6.1,10.3,-9.6], 17 | 18 | "morphTargets": [ 19 | { "name": "stand1", "vertices": [23.4,22.0,-11.8,20.4,18.3,-12.0,23.3,23.9,-13.6,15.3,15.1,-8.9,15.6,15.4,-12.1,23.4,23.5,-9.7,21.2,26.0,-13.5,15.7,19.1,-13.9,18.8,27.2,-10.4,18.7,26.9,-12.7,11.4,19.8,-12.6,22.6,22.5,-5.2,20.6,18.0,-8.5,19.7,18.7,-5.2,22.2,24.5,-3.8,14.9,15.8,-5.8,23.2,23.7,-7.4,20.2,26.6,-4.6,14.6,19.7,-4.5,17.9,27.3,-6.0,10.7,20.2,-6.8,12.4,20.7,-8.7,18.6,27.3,-8.2,18.5,25.7,-9.9,21.0,24.7,-9.6,12.7,20.4,-10.4,20.9,24.7,-8.2,18.4,25.7,-8.6,22.5,22.7,-8.6,22.9,26.6,-10.7,24.1,25.4,-10.9,23.9,25.7,-12.5,22.8,26.8,-12.2,21.0,25.8,-11.8,21.3,25.3,-10.5,22.4,24.3,-10.3,23.1,23.7,-11.4,22.7,24.1,-12.8,21.6,25.2,-13.0,22.1,27.2,-5.5,22.5,26.8,-7.0,23.5,25.7,-6.3,23.1,26.1,-4.9,20.3,26.1,-6.2,21.0,25.6,-7.3,22.0,24.5,-7.2,22.4,24.0,-5.8,21.7,24.7,-4.6,20.7,25.7,-4.8,16.5,18.9,-8.1,16.0,17.5,-7.7,20.8,13.1,-6.9,14.5,14.8,-7.9,17.5,9.5,-7.5,15.1,8.4,-7.7,11.1,14.1,-8.3,10.7,17.1,-8.1,13.9,21.5,-8.7,16.7,18.7,-9.9,16.3,17.3,-10.3,21.5,15.8,-8.3,21.1,13.0,-9.3,14.6,14.6,-10.0,17.7,9.4,-9.0,17.2,7.8,-8.2,15.4,8.3,-9.3,11.4,14.0,-10.4,11.1,17.0,-11.0,14.1,21.4,-10.2,7.5,10.6,-10.6,7.3,10.7,-8.5,4.8,11.8,-9.0,5.0,11.7,-10.7,6.1,10.3,-9.6] }, 20 | { "name": "stand2", "vertices": [21.5,23.8,-14.0,19.0,19.8,-13.6,21.1,25.6,-15.8,14.4,16.2,-10.0,14.5,16.5,-13.3,21.6,25.4,-11.9,18.8,27.4,-15.7,14.1,19.8,-15.3,16.6,28.5,-12.5,16.2,28.1,-14.8,9.8,20.3,-13.8,21.1,24.7,-7.3,19.3,19.8,-10.2,18.6,20.5,-6.9,20.6,26.7,-6.0,14.2,17.2,-7.0,21.5,25.7,-9.6,18.3,28.5,-6.8,13.6,21.0,-5.9,15.9,28.9,-8.1,9.4,21.0,-7.9,11.0,21.6,-10.0,16.4,28.9,-10.3,16.4,27.1,-11.9,19.0,26.4,-11.7,11.2,21.3,-11.7,19.0,26.5,-10.3,16.4,27.2,-10.6,20.7,24.6,-10.7,20.6,28.3,-13.0,21.9,27.4,-13.3,21.7,27.4,-14.8,20.4,28.5,-14.6,18.8,27.3,-14.0,19.3,27.0,-12.6,20.4,26.0,-12.5,21.0,25.4,-13.6,20.6,25.7,-15.0,19.4,26.7,-15.2,20.0,29.3,-7.9,20.4,28.8,-9.3,21.6,27.9,-8.8,21.2,28.3,-7.2,18.4,28.0,-8.4,19.0,27.4,-9.6,20.2,26.4,-9.4,20.7,26.1,-8.0,20.1,26.7,-6.8,18.9,27.7,-7.0,15.3,20.2,-9.6,14.9,18.8,-9.0,20.2,15.1,-8.4,13.8,16.0,-9.0,17.3,11.1,-8.5,15.1,9.7,-8.4,10.5,14.9,-9.0,9.8,17.9,-9.1,12.4,22.5,-10.2,15.4,20.0,-11.3,15.1,18.5,-11.6,20.6,17.7,-9.9,20.4,14.7,-10.8,13.7,15.7,-11.0,17.4,10.9,-10.0,17.2,9.3,-9.0,15.2,9.5,-10.0,10.6,14.7,-11.2,9.9,17.6,-11.9,12.5,22.4,-11.7,7.1,10.9,-10.9,7.0,11.1,-8.8,4.4,11.9,-9.1,4.4,11.7,-10.9,5.7,10.5,-9.8] }, 21 | { "name": "stand3", "vertices": [19.9,25.1,-15.7,17.8,20.8,-15.0,19.2,26.6,-17.5,13.6,17.1,-10.9,13.6,17.2,-14.2,20.0,26.8,-13.7,16.8,28.4,-17.3,12.8,20.5,-16.3,14.7,29.5,-14.1,14.3,28.9,-16.3,8.5,20.7,-14.5,19.9,26.2,-9.0,18.3,21.0,-11.6,17.7,22.0,-8.3,19.2,28.3,-7.8,13.5,18.2,-7.9,20.0,27.1,-11.4,16.8,29.9,-8.5,12.7,22.0,-6.9,14.3,30.0,-9.6,8.5,21.6,-8.7,9.9,22.3,-10.9,14.7,29.9,-11.9,14.7,28.0,-13.4,17.4,27.5,-13.3,10.0,21.8,-12.6,17.4,27.7,-12.0,14.7,28.2,-12.1,19.2,26.0,-12.4,18.7,29.6,-14.9,20.0,28.6,-15.2,19.7,28.6,-16.7,18.4,29.6,-16.4,16.9,28.3,-15.7,17.5,28.1,-14.3,18.7,27.3,-14.2,19.3,26.6,-15.4,18.7,26.9,-16.7,17.5,27.7,-16.9,18.4,30.7,-9.7,18.7,30.2,-11.2,20.0,29.4,-10.6,19.6,29.9,-9.1,16.8,29.2,-10.1,17.5,28.6,-11.3,18.7,27.8,-11.1,19.3,27.6,-9.8,18.7,28.2,-8.6,17.5,29.0,-8.7,14.3,21.2,-10.8,14.0,19.8,-10.1,19.6,16.5,-9.6,13.1,17.0,-9.8,17.1,12.3,-9.4,15.0,10.8,-9.1,9.9,15.6,-9.6,8.9,18.5,-9.7,11.1,23.3,-11.2,14.3,20.9,-12.5,14.0,19.4,-12.6,19.7,19.1,-11.3,19.7,16.1,-12.0,12.9,16.5,-11.9,17.1,12.1,-10.8,17.1,10.5,-9.8,15.0,10.5,-10.6,9.9,15.3,-11.7,9.0,18.1,-12.6,11.1,23.1,-12.7,6.8,11.3,-11.1,6.8,11.6,-8.9,4.1,12.1,-9.2,4.1,11.8,-11.0,5.5,10.8,-9.8] }, 22 | { "name": "stand4", "vertices": [19.3,25.7,-16.3,17.3,21.4,-15.5,18.6,27.2,-18.1,13.4,17.7,-11.2,13.2,17.8,-14.4,19.5,27.4,-14.3,16.1,28.9,-17.9,12.2,21.0,-16.5,14.2,30.1,-14.5,13.7,29.4,-16.8,8.1,21.2,-14.6,19.6,26.9,-9.6,18.0,21.7,-12.1,17.5,22.6,-8.8,19.0,29.0,-8.4,13.4,18.9,-8.2,19.6,27.8,-12.1,16.5,30.5,-9.1,12.6,22.7,-7.2,14.0,30.6,-10.1,8.3,22.2,-8.8,9.6,22.8,-11.0,14.2,30.5,-12.4,14.2,28.6,-13.8,16.9,28.1,-13.9,9.7,22.3,-12.7,17.0,28.3,-12.6,14.3,28.8,-12.5,18.8,26.6,-13.0,18.2,30.1,-15.5,19.4,29.3,-15.8,19.0,29.2,-17.4,17.8,30.1,-17.1,16.3,28.9,-16.2,17.0,28.7,-14.9,18.2,27.8,-14.8,18.8,27.2,-16.0,18.1,27.4,-17.3,16.9,28.2,-17.4,18.0,31.3,-10.3,18.3,30.9,-11.8,19.6,30.1,-11.3,19.3,30.5,-9.8,16.5,29.9,-10.6,17.0,29.3,-11.8,18.3,28.4,-11.7,19.0,28.2,-10.4,18.4,28.9,-9.2,17.2,29.7,-9.3,14.0,21.8,-11.1,13.8,20.4,-10.3,19.5,17.2,-10.1,13.0,17.5,-10.1,17.0,12.9,-9.7,15.0,11.4,-9.3,9.8,16.2,-9.7,8.8,19.0,-9.8,10.8,23.9,-11.5,13.9,21.5,-12.8,13.7,19.9,-12.9,19.4,19.8,-11.8,19.4,16.8,-12.5,12.7,17.1,-12.1,16.9,12.7,-11.2,17.0,11.1,-10.1,14.9,11.1,-10.9,9.7,15.8,-11.8,8.7,18.6,-12.6,10.8,23.6,-12.9,6.6,11.8,-10.9,6.7,12.1,-8.8,4.0,12.6,-8.9,3.9,12.3,-10.7,5.4,11.3,-9.7] }, 23 | { "name": "stand5", "vertices": [21.0,25.3,-14.9,18.5,21.3,-14.2,20.4,27.0,-16.6,14.3,17.8,-10.1,14.0,18.1,-13.3,21.3,26.9,-12.8,18.2,29.0,-16.3,13.4,21.5,-15.3,16.4,30.1,-12.9,15.8,29.7,-15.1,9.3,22.0,-13.2,21.5,26.2,-8.2,19.3,21.3,-10.9,18.9,22.1,-7.5,21.1,28.3,-6.8,14.4,18.9,-7.0,21.5,27.2,-10.6,18.8,30.1,-7.4,14.0,22.6,-5.9,16.2,30.5,-8.4,9.8,22.7,-7.4,11.0,23.3,-9.6,16.5,30.4,-10.7,16.2,28.6,-12.2,18.9,27.9,-12.3,11.0,22.9,-11.3,19.0,28.0,-11.0,16.4,28.7,-10.9,20.7,26.2,-11.6,20.3,29.8,-13.9,21.5,28.8,-14.3,21.1,28.9,-15.8,20.0,29.9,-15.4,18.3,28.8,-14.6,19.0,28.5,-13.3,20.1,27.6,-13.3,20.6,26.9,-14.5,20.0,27.2,-15.8,18.8,28.2,-15.9,20.4,30.8,-8.7,20.6,30.3,-10.2,21.8,29.4,-9.7,21.6,29.8,-8.2,18.7,29.5,-8.9,19.2,28.9,-10.2,20.3,28.0,-10.2,21.0,27.6,-8.9,20.5,28.3,-7.6,19.3,29.2,-7.7,15.3,21.8,-9.8,14.9,20.4,-9.1,20.2,16.5,-9.1,13.8,17.6,-8.9,17.3,12.6,-8.9,15.1,11.3,-8.5,10.5,16.6,-8.6,9.8,19.6,-8.5,12.4,24.2,-10.0,15.2,21.6,-11.5,14.8,20.1,-11.7,20.4,19.2,-10.7,20.1,16.2,-11.5,13.5,17.3,-11.0,17.2,12.5,-10.3,17.1,10.8,-9.4,15.0,11.1,-10.1,10.4,16.4,-10.7,9.7,19.3,-11.4,12.3,24.0,-11.5,6.9,12.6,-10.0,7.0,12.9,-7.9,4.4,13.7,-7.9,4.2,13.5,-9.7,5.6,12.2,-8.7] }, 24 | { "name": "stand6", "vertices": [24.6,23.0,-12.4,21.1,19.6,-12.1,24.3,24.8,-14.0,16.2,16.8,-8.3,16.0,17.4,-11.5,25.2,24.2,-10.2,22.6,27.2,-13.4,16.2,21.0,-13.1,21.1,28.5,-9.9,20.5,28.4,-12.2,12.4,22.3,-11.0,25.1,23.0,-5.7,21.8,19.0,-8.8,21.7,19.6,-5.4,25.1,25.0,-4.2,16.5,17.5,-5.1,25.4,24.2,-8.0,23.3,27.3,-4.5,17.0,21.1,-3.6,21.1,28.5,-5.4,12.8,22.4,-5.1,14.3,22.8,-7.3,21.3,28.5,-7.7,20.7,26.9,-9.5,23.0,25.7,-9.7,14.2,22.6,-9.1,23.2,25.7,-8.3,20.7,27.0,-8.1,24.3,23.5,-9.0,24.9,27.4,-11.0,25.8,26.1,-11.5,25.5,26.4,-13.0,24.6,27.7,-12.5,22.8,26.9,-11.8,23.3,26.3,-10.6,24.2,25.1,-10.6,24.5,24.5,-11.9,24.0,25.1,-13.2,23.1,26.3,-13.1,25.1,27.8,-5.7,25.2,27.4,-7.3,26.2,26.2,-6.9,26.0,26.6,-5.4,23.2,27.0,-6.1,23.5,26.3,-7.4,24.4,25.2,-7.5,25.0,24.6,-6.2,24.7,25.2,-4.9,23.8,26.4,-4.9,18.1,20.4,-7.6,17.4,19.0,-7.1,21.7,14.1,-7.5,15.7,16.6,-7.2,17.9,11.0,-7.6,15.4,10.2,-7.3,12.2,16.4,-6.9,12.2,19.4,-6.5,15.8,23.4,-7.6,18.0,20.4,-9.3,17.2,19.0,-9.7,22.5,16.8,-8.8,21.5,14.1,-9.9,15.3,16.6,-9.2,17.7,11.0,-9.1,17.2,9.3,-8.2,15.3,10.1,-8.9,12.0,16.4,-9.0,12.1,19.4,-9.4,15.7,23.4,-9.1,7.8,13.5,-8.6,7.9,13.5,-6.4,5.6,15.0,-6.4,5.4,14.9,-8.2,6.5,13.3,-7.4] }, 25 | { "name": "stand7", "vertices": [27.6,19.5,-10.8,23.5,17.0,-10.7,27.9,21.6,-12.2,18.1,15.1,-7.1,18.1,15.9,-10.2,28.5,20.4,-8.5,26.7,24.2,-11.5,19.1,19.5,-11.6,25.4,25.6,-7.9,24.7,25.7,-10.2,15.6,21.4,-9.4,28.0,19.0,-4.0,24.0,16.1,-7.4,23.9,16.5,-4.0,28.5,20.9,-2.4,18.5,15.5,-3.9,28.6,20.3,-6.3,27.2,23.6,-2.6,19.7,18.9,-2.1,25.3,25.2,-3.4,15.9,21.0,-3.6,17.4,21.3,-5.7,25.5,25.3,-5.7,24.6,24.1,-7.6,26.6,22.3,-7.8,17.3,21.2,-7.4,26.7,22.2,-6.5,24.7,24.0,-6.2,27.4,19.9,-7.4,28.9,23.6,-9.1,29.5,22.3,-9.6,29.2,22.8,-11.1,28.7,24.1,-10.6,26.7,23.8,-9.9,27.1,23.0,-8.7,27.7,21.7,-8.8,27.9,21.1,-10.2,27.5,21.8,-11.4,26.9,23.1,-11.3,29.1,23.6,-3.8,29.1,23.4,-5.4,29.8,22.0,-5.1,29.7,22.2,-3.5,27.1,23.4,-4.2,27.2,22.8,-5.6,27.9,21.4,-5.7,28.2,20.7,-4.5,28.0,21.2,-3.2,27.4,22.6,-3.0,20.6,18.2,-6.2,19.7,17.0,-5.7,22.8,11.2,-6.5,17.4,15.0,-6.0,18.4,9.0,-6.8,15.8,8.8,-6.5,14.0,15.5,-5.7,14.8,18.4,-5.2,19.1,21.6,-5.9,20.5,18.2,-7.9,19.6,17.2,-8.3,24.2,13.7,-7.6,22.6,11.4,-8.9,17.1,15.1,-8.0,18.3,9.1,-8.2,17.4,7.6,-7.6,15.7,8.9,-8.2,13.9,15.6,-7.8,14.6,18.6,-8.0,19.0,21.7,-7.4,9.0,13.8,-7.6,9.2,13.6,-5.5,7.2,15.5,-5.4,7.1,15.6,-7.2,7.7,13.8,-6.4] }, 26 | { "name": "stand8", "vertices": [29.6,16.8,-9.7,25.3,14.8,-9.8,30.2,18.8,-11.1,19.4,13.6,-6.3,19.7,14.5,-9.4,30.6,17.5,-7.4,29.4,21.5,-10.3,21.2,18.0,-10.7,28.2,22.9,-6.7,27.6,23.2,-9.0,17.9,20.3,-8.5,29.8,16.0,-3.0,25.5,13.8,-6.5,25.4,14.0,-3.1,30.5,17.7,-1.3,19.8,13.8,-3.1,30.7,17.2,-5.2,29.6,20.5,-1.4,21.5,16.9,-1.2,27.9,22.5,-2.2,18.1,19.6,-2.6,19.7,19.8,-4.7,28.3,22.6,-4.5,27.2,21.6,-6.4,29.0,19.6,-6.7,19.7,19.8,-6.5,29.0,19.4,-5.3,27.3,21.4,-5.0,29.4,17.0,-6.3,31.4,20.6,-7.8,31.8,19.2,-8.4,31.7,19.8,-9.9,31.3,21.2,-9.3,29.3,21.0,-8.7,29.5,20.2,-7.5,29.9,18.8,-7.7,30.1,18.2,-9.0,29.8,19.0,-10.2,29.4,20.5,-10.0,31.5,20.4,-2.5,31.6,20.2,-4.1,32.0,18.7,-3.9,31.9,18.9,-2.3,29.5,20.4,-3.1,29.6,19.8,-4.4,30.0,18.4,-4.6,30.3,17.6,-3.4,30.1,18.2,-2.0,29.7,19.6,-1.9,22.4,16.2,-5.3,21.3,15.2,-4.9,23.6,9.0,-5.8,18.8,13.5,-5.3,18.9,7.5,-6.2,16.4,7.6,-6.0,15.5,14.5,-5.0,16.6,17.2,-4.4,21.4,19.8,-4.9,22.4,16.4,-7.0,21.2,15.4,-7.5,25.3,11.4,-6.8,23.5,9.3,-8.2,18.6,13.8,-7.3,18.9,7.7,-7.7,17.8,6.2,-7.1,16.3,7.8,-7.7,15.5,14.7,-7.1,16.6,17.6,-7.2,21.3,20.0,-6.4,10.4,13.5,-7.1,10.4,13.3,-4.9,8.8,15.4,-4.8,8.7,15.6,-6.6,9.0,13.7,-5.9] }, 27 | { "name": "stand9", "vertices": [31.0,14.6,-8.7,26.5,13.0,-9.0,31.8,16.5,-10.0,20.5,12.3,-5.7,20.9,13.3,-8.8,32.0,15.2,-6.4,31.3,19.4,-9.2,22.8,16.6,-9.9,30.2,20.8,-5.6,29.7,21.2,-7.9,19.7,19.2,-7.7,31.0,13.7,-2.0,26.6,11.9,-5.7,26.5,12.1,-2.2,31.7,15.2,-0.2,20.9,12.4,-2.5,32.0,14.8,-4.1,31.2,18.2,-0.3,22.8,15.4,-0.5,29.6,20.3,-1.1,19.7,18.4,-1.9,21.3,18.4,-4.0,30.1,20.5,-3.4,29.0,19.6,-5.3,30.6,17.4,-5.6,21.3,18.4,-5.7,30.6,17.2,-4.3,29.0,19.4,-4.0,30.7,14.8,-5.3,33.2,18.2,-6.7,33.5,16.8,-7.3,33.4,17.4,-8.8,33.1,18.8,-8.2,31.1,18.9,-7.6,31.2,18.0,-6.5,31.4,16.5,-6.7,31.6,16.0,-8.0,31.5,16.9,-9.2,31.2,18.3,-9.0,33.1,17.9,-1.4,33.1,17.7,-3.0,33.5,16.2,-2.8,33.4,16.4,-1.2,31.0,18.1,-2.0,31.2,17.6,-3.3,31.4,16.1,-3.5,31.6,15.2,-2.4,31.4,15.8,-1.0,31.2,17.2,-0.8,23.7,14.6,-4.5,22.5,13.7,-4.2,24.3,7.4,-5.1,19.8,12.3,-4.6,19.5,6.3,-5.7,16.9,6.6,-5.6,16.6,13.6,-4.5,17.9,16.2,-3.7,23.0,18.3,-4.1,23.7,14.8,-6.2,22.5,14.0,-6.8,26.2,9.6,-6.0,24.3,7.7,-7.5,19.7,12.6,-6.7,19.5,6.5,-7.2,18.3,5.2,-6.7,16.9,6.9,-7.2,16.6,13.8,-6.6,18.0,16.6,-6.6,23.0,18.5,-5.6,11.6,13.1,-6.7,11.5,12.8,-4.6,10.0,15.2,-4.4,10.0,15.4,-6.2,10.2,13.4,-5.5] }, 28 | { "name": "stand10", "vertices": [31.9,13.2,-8.2,27.4,11.8,-8.6,32.8,15.1,-9.5,21.3,11.4,-5.5,21.7,12.3,-8.6,32.8,13.8,-5.8,32.4,18.0,-8.7,23.9,15.5,-9.7,31.2,19.4,-5.2,30.8,19.9,-7.4,20.8,18.3,-7.6,31.6,12.4,-1.5,27.3,10.7,-5.3,27.0,11.0,-1.8,32.4,13.9,0.3,21.5,11.5,-2.3,32.8,13.5,-3.6,31.9,16.8,0.2,23.4,14.4,-0.2,30.5,19.0,-0.7,20.5,17.5,-1.8,22.2,17.4,-3.8,31.1,19.2,-3.0,30.0,18.3,-4.9,31.5,16.0,-5.1,22.3,17.5,-5.5,31.5,15.8,-3.8,30.0,18.1,-3.6,31.5,13.5,-4.8,34.1,16.7,-6.1,34.4,15.3,-6.7,34.4,15.9,-8.2,34.1,17.4,-7.6,32.1,17.5,-7.1,32.2,16.6,-5.9,32.4,15.1,-6.1,32.6,14.6,-7.5,32.5,15.4,-8.6,32.3,16.9,-8.5,33.9,16.5,-0.8,34.0,16.3,-2.4,34.2,14.7,-2.2,34.0,14.9,-0.6,31.8,16.7,-1.5,32.0,16.2,-2.8,32.3,14.7,-3.0,32.3,13.8,-1.8,32.1,14.4,-0.4,31.9,15.9,-0.3,24.5,13.6,-4.2,23.2,12.7,-3.9,24.7,6.3,-4.7,20.5,11.4,-4.5,20.0,5.4,-5.5,17.4,5.8,-5.5,17.4,12.8,-4.4,18.8,15.3,-3.6,23.9,17.3,-3.9,24.6,13.8,-5.9,23.3,13.0,-6.5,26.8,8.4,-5.6,24.8,6.6,-7.2,20.4,11.7,-6.5,20.0,5.6,-7.0,18.7,4.3,-6.5,17.5,6.0,-7.1,17.5,13.0,-6.5,19.0,15.7,-6.5,24.0,17.5,-5.4,12.3,12.5,-6.8,12.2,12.2,-4.7,10.8,14.6,-4.6,10.9,14.9,-6.4,11.0,12.8,-5.7] }, 29 | { "name": "stand11", "vertices": [32.6,12.6,-8.4,28.0,11.1,-8.8,33.5,14.4,-9.8,21.8,10.8,-5.9,22.4,11.5,-9.0,33.4,13.4,-6.1,32.9,17.3,-9.3,24.5,14.7,-10.3,31.6,19.0,-5.9,31.3,19.3,-8.2,21.3,17.4,-8.5,32.0,12.3,-1.7,27.8,10.3,-5.5,27.5,10.8,-2.1,32.7,14.0,0.0,22.0,11.2,-2.7,33.2,13.3,-3.8,32.3,16.9,-0.4,23.8,14.2,-0.8,30.8,19.0,-1.4,20.9,17.2,-2.7,22.6,17.0,-4.6,31.4,19.0,-3.7,30.4,17.9,-5.6,32.0,15.7,-5.6,22.7,16.9,-6.4,31.9,15.6,-4.3,30.3,17.8,-4.3,32.1,13.2,-5.0,34.6,16.3,-6.6,35.0,14.9,-7.1,35.0,15.3,-8.6,34.7,16.8,-8.1,32.6,17.0,-7.7,32.6,16.2,-6.4,32.9,14.7,-6.5,33.1,14.0,-7.8,33.1,14.8,-9.0,32.8,16.3,-9.0,34.2,16.5,-1.3,34.3,16.2,-2.9,34.6,14.6,-2.5,34.4,15.0,-0.9,32.2,16.7,-2.0,32.5,16.0,-3.3,32.6,14.6,-3.3,32.7,13.8,-2.1,32.5,14.4,-0.8,32.3,15.9,-0.8,24.9,13.2,-4.7,23.7,12.2,-4.4,25.3,5.9,-4.6,21.1,10.9,-4.9,20.6,4.8,-5.5,18.1,5.2,-5.6,17.9,12.2,-5.0,19.2,14.9,-4.4,24.3,16.8,-4.7,25.1,13.2,-6.4,23.9,12.4,-7.0,27.4,7.9,-5.6,25.5,6.0,-7.1,21.0,11.0,-6.9,20.7,4.9,-7.0,19.4,3.6,-6.4,18.2,5.3,-7.2,18.1,12.3,-7.1,19.5,15.1,-7.3,24.4,16.9,-6.2,12.9,11.7,-7.5,12.8,11.6,-5.4,11.3,13.9,-5.6,11.4,14.0,-7.3,11.5,12.0,-6.5] }, 30 | { "name": "stand12", "vertices": [33.0,12.3,-9.2,28.6,10.5,-9.5,33.9,13.9,-10.9,22.4,10.3,-6.6,22.9,10.6,-9.8,33.8,13.3,-7.0,33.2,16.8,-10.7,24.9,13.7,-11.4,31.7,18.9,-7.5,31.5,18.8,-9.9,21.6,16.5,-10.1,32.4,12.8,-2.5,28.4,10.1,-6.0,27.9,11.0,-2.7,33.0,14.7,-1.0,22.4,11.1,-3.5,33.6,13.5,-4.7,32.5,17.5,-1.8,24.0,14.4,-2.0,30.9,19.4,-3.1,21.1,17.0,-4.3,22.9,16.6,-6.1,31.5,19.1,-5.3,30.6,17.8,-7.1,32.3,15.6,-6.8,23.0,16.3,-7.8,32.2,15.7,-5.5,30.5,17.8,-5.8,32.5,13.2,-5.9,34.9,16.3,-7.8,35.3,14.8,-8.1,35.3,15.0,-9.7,35.0,16.5,-9.4,32.9,16.7,-9.0,32.9,16.0,-7.7,33.3,14.6,-7.5,33.6,13.8,-8.8,33.5,14.4,-10.1,33.2,15.8,-10.2,34.4,17.1,-2.6,34.6,16.5,-4.1,34.9,15.1,-3.6,34.7,15.6,-2.0,32.4,17.1,-3.4,32.7,16.3,-4.6,33.0,14.8,-4.5,33.0,14.2,-3.1,32.8,15.0,-1.9,32.5,16.5,-2.0,25.4,12.9,-5.7,24.1,12.0,-5.3,26.1,5.7,-4.7,21.6,10.5,-5.6,21.4,4.4,-5.5,18.8,4.7,-5.6,18.4,11.6,-6.0,19.6,14.4,-5.7,24.6,16.5,-6.2,25.5,12.8,-7.4,24.4,11.8,-7.8,28.1,7.7,-5.9,26.3,5.5,-7.1,21.6,10.3,-7.7,21.5,4.3,-6.9,20.2,3.1,-6.2,18.9,4.5,-7.3,18.6,11.5,-8.1,19.9,14.2,-8.6,24.7,16.5,-7.6,13.5,10.6,-8.4,13.3,10.7,-6.3,11.7,13.0,-6.8,11.9,12.8,-8.6,12.0,11.0,-7.5] }, 31 | { "name": "stand13", "vertices": [33.5,11.6,-9.9,29.0,9.7,-10.0,34.3,13.1,-11.6,22.7,9.6,-7.2,23.4,9.7,-10.4,34.1,12.9,-7.7,33.6,16.0,-11.7,25.3,12.6,-12.3,32.0,18.3,-8.8,31.8,18.1,-11.1,21.9,15.5,-11.3,32.7,12.7,-3.2,28.8,9.6,-6.6,28.3,10.8,-3.4,33.3,14.7,-1.9,22.7,10.6,-4.2,33.9,13.3,-5.5,32.6,17.4,-2.9,24.3,14.1,-2.9,31.0,19.1,-4.4,21.3,16.4,-5.5,23.1,16.0,-7.3,31.7,18.7,-6.6,30.9,17.2,-8.2,32.6,15.1,-7.8,23.3,15.5,-8.9,32.4,15.3,-6.4,30.8,17.4,-6.9,32.8,12.8,-6.7,35.2,15.8,-8.8,35.7,14.3,-8.9,35.7,14.4,-10.5,35.3,15.9,-10.4,33.2,16.0,-10.0,33.3,15.5,-8.6,33.6,14.1,-8.4,33.9,13.1,-9.5,33.8,13.7,-10.9,33.5,15.1,-11.2,34.6,17.0,-3.7,34.8,16.4,-5.2,35.1,15.0,-4.5,34.8,15.6,-3.0,32.6,16.9,-4.5,32.9,16.0,-5.6,33.3,14.6,-5.3,33.3,14.1,-3.9,33.0,15.0,-2.8,32.6,16.4,-3.0,25.8,12.4,-6.5,24.6,11.4,-6.0,26.6,5.3,-4.9,22.1,9.9,-6.2,22.0,3.8,-5.6,19.4,3.9,-5.8,18.7,10.9,-6.7,19.8,13.7,-6.7,24.8,15.9,-7.3,25.9,12.1,-8.2,24.8,11.0,-8.6,28.5,7.2,-6.2,26.8,4.9,-7.3,22.0,9.5,-8.3,22.1,3.5,-7.1,20.9,2.3,-6.2,19.6,3.7,-7.4,18.9,10.6,-8.9,20.2,13.3,-9.5,24.9,15.7,-8.7,13.9,9.5,-9.2,13.6,9.8,-7.1,12.1,12.0,-7.8,12.3,11.7,-9.5,12.4,10.0,-8.3] }, 32 | { "name": "stand14", "vertices": [33.8,10.8,-10.2,29.3,8.9,-10.4,34.6,12.4,-11.9,23.1,8.7,-7.6,23.8,8.7,-10.7,34.4,12.1,-8.0,33.8,15.2,-12.0,25.6,11.8,-12.6,32.2,17.5,-9.1,32.0,17.3,-11.4,22.2,14.6,-11.6,33.0,11.8,-3.5,29.1,8.7,-6.9,28.6,9.9,-3.7,33.5,13.8,-2.2,23.0,9.7,-4.5,34.1,12.4,-5.8,32.8,16.6,-3.1,24.6,13.2,-3.3,31.3,18.3,-4.7,21.5,15.5,-5.8,23.4,15.0,-7.6,32.0,17.9,-6.9,31.2,16.4,-8.6,32.8,14.3,-8.0,23.6,14.6,-9.3,32.7,14.5,-6.7,31.0,16.5,-7.2,33.1,12.0,-7.0,35.5,15.0,-9.1,35.9,13.4,-9.2,36.0,13.6,-10.8,35.5,15.2,-10.7,33.5,15.2,-10.3,33.5,14.7,-8.9,33.8,13.2,-8.7,34.2,12.4,-9.8,34.1,12.9,-11.2,33.8,14.3,-11.5,34.8,16.2,-4.0,35.0,15.6,-5.4,35.4,14.2,-4.7,35.1,14.8,-3.3,32.8,16.0,-4.7,33.2,15.2,-5.9,33.6,13.7,-5.6,33.6,13.2,-4.2,33.3,14.1,-3.1,32.9,15.6,-3.3,26.1,11.4,-6.8,24.9,10.5,-6.4,26.9,4.4,-5.3,22.4,8.9,-6.7,22.4,2.8,-6.0,19.8,3.0,-6.2,19.0,9.9,-7.1,20.2,12.7,-7.1,25.1,15.0,-7.6,26.3,11.2,-8.5,25.1,10.1,-8.9,28.9,6.3,-6.6,27.2,4.0,-7.7,22.4,8.6,-8.7,22.5,2.6,-7.5,21.3,1.4,-6.7,20.0,2.7,-7.8,19.3,9.6,-9.2,20.5,12.3,-9.9,25.2,14.8,-9.0,14.2,8.5,-9.6,14.0,8.7,-7.5,12.4,10.9,-8.2,12.6,10.6,-9.9,12.7,8.9,-8.7] }, 33 | { "name": "stand15", "vertices": [34.0,9.7,-9.9,29.6,7.9,-10.3,34.9,11.4,-11.5,23.3,7.6,-7.7,24.0,7.8,-10.8,34.6,10.9,-7.7,34.2,14.3,-11.5,26.0,11.0,-12.5,32.6,16.4,-8.4,32.4,16.3,-10.7,22.6,13.8,-11.3,33.1,10.3,-3.2,29.3,7.5,-6.9,28.8,8.5,-3.6,33.7,12.3,-1.8,23.2,8.4,-4.5,34.4,11.1,-5.4,33.1,15.1,-2.6,24.8,11.8,-3.1,31.6,16.9,-4.0,21.8,14.3,-5.5,23.7,14.0,-7.3,32.3,16.6,-6.3,31.5,15.2,-8.0,33.1,13.1,-7.6,23.9,13.6,-9.0,33.0,13.2,-6.3,31.3,15.3,-6.7,33.3,10.7,-6.7,35.7,13.8,-8.5,36.2,12.3,-8.8,36.3,12.5,-10.4,35.9,14.1,-10.1,33.8,14.1,-9.8,33.8,13.5,-8.5,34.2,12.1,-8.3,34.5,11.3,-9.5,34.4,11.9,-10.8,34.2,13.3,-11.0,35.0,14.7,-3.4,35.3,14.1,-4.9,35.7,12.7,-4.2,35.4,13.2,-2.8,33.1,14.7,-4.2,33.4,13.8,-5.4,33.8,12.4,-5.2,33.8,11.8,-3.8,33.4,12.6,-2.7,33.1,14.0,-2.8,26.3,10.2,-6.7,25.1,9.3,-6.3,27.0,3.2,-5.6,22.6,7.8,-6.7,22.5,1.7,-6.5,19.9,1.8,-6.8,19.2,8.9,-7.2,20.4,11.6,-7.0,25.3,13.9,-7.2,26.5,10.1,-8.4,25.3,9.1,-8.9,29.1,5.2,-6.7,27.4,2.9,-8.0,22.6,7.6,-8.8,22.7,1.5,-7.9,21.4,0.3,-7.3,20.1,1.7,-8.4,19.5,8.7,-9.4,20.8,11.4,-9.8,25.5,13.8,-8.7,14.5,7.6,-9.9,14.2,7.8,-7.8,12.6,10.0,-8.3,12.8,9.9,-10.1,13.0,8.1,-9.0] }, 34 | { "name": "stand16", "vertices": [34.2,7.9,-8.5,29.7,6.4,-9.4,35.5,9.6,-9.8,23.3,6.4,-7.3,24.2,6.9,-10.3,34.8,8.7,-6.1,34.9,12.5,-9.5,26.6,10.0,-11.5,33.1,14.5,-6.4,33.2,14.6,-8.8,23.3,12.9,-10.3,32.9,7.9,-1.9,29.2,5.8,-6.1,28.4,6.5,-2.7,33.4,9.7,-0.2,23.0,6.9,-4.1,34.3,8.8,-3.8,33.0,12.6,-0.7,24.7,10.0,-2.2,31.8,14.6,-2.1,22.1,13.0,-4.6,24.0,12.6,-6.2,32.7,14.5,-4.2,32.0,13.3,-6.2,33.4,11.0,-5.9,24.4,12.4,-7.9,33.2,11.0,-4.6,31.7,13.3,-4.9,33.4,8.6,-5.2,36.2,11.7,-6.6,36.6,10.1,-6.9,36.8,10.5,-8.5,36.5,12.1,-8.1,34.3,12.3,-8.0,34.2,11.5,-6.7,34.4,10.0,-6.6,34.8,9.3,-7.8,35.0,10.0,-9.1,34.7,11.5,-9.2,35.1,12.1,-1.4,35.5,11.7,-2.9,35.7,10.1,-2.4,35.3,10.6,-0.9,33.2,12.3,-2.3,33.6,11.5,-3.6,33.8,10.1,-3.5,33.7,9.3,-2.3,33.3,10.1,-1.0,33.0,11.5,-1.1,26.3,8.7,-5.8,25.0,7.9,-5.6,26.5,1.5,-5.4,22.4,6.5,-6.4,21.9,0.5,-6.8,19.3,0.9,-7.2,19.3,7.9,-7.0,20.7,10.6,-6.4,25.7,12.4,-6.0,26.7,8.7,-7.5,25.5,7.9,-8.1,28.7,3.4,-6.2,26.9,1.5,-7.7,22.6,6.5,-8.5,22.2,0.5,-8.2,20.8,-0.7,-7.7,19.7,0.9,-8.8,19.7,7.9,-9.1,21.2,10.6,-9.2,26.0,12.4,-7.5,14.7,7.3,-10.1,14.3,7.4,-8.0,12.9,9.7,-8.5,13.3,9.7,-10.2,13.2,7.8,-9.3] }, 35 | { "name": "stand17", "vertices": [34.1,4.8,-6.8,29.6,4.2,-8.4,35.6,6.5,-7.8,22.9,5.0,-7.0,24.4,5.7,-9.8,34.4,5.3,-4.2,35.5,9.4,-7.0,27.2,8.5,-10.2,33.7,11.2,-3.9,34.1,11.6,-6.2,24.3,11.8,-9.0,31.9,4.2,-0.4,28.5,3.3,-5.2,27.4,3.7,-2.0,32.5,5.7,1.6,22.3,5.1,-3.8,33.7,5.1,-2.1,32.6,8.6,1.4,24.2,7.6,-1.3,31.9,11.0,0.2,22.3,11.2,-3.5,24.5,10.8,-5.0,33.0,11.0,-1.9,32.3,10.2,-4.1,33.4,7.7,-3.9,25.0,10.8,-6.7,33.0,7.6,-2.6,31.9,10.1,-2.8,32.9,5.2,-3.6,36.3,8.0,-4.1,36.5,6.5,-4.7,36.9,7.0,-6.1,36.8,8.5,-5.6,34.7,9.0,-5.6,34.3,8.2,-4.5,34.3,6.7,-4.6,34.7,6.1,-5.9,35.2,6.9,-7.0,35.2,8.4,-6.9,34.6,8.0,0.9,35.1,7.7,-0.6,35.0,6.1,-0.3,34.4,6.3,1.1,32.9,8.5,-0.2,33.3,7.9,-1.5,33.3,6.4,-1.7,33.0,5.5,-0.5,32.5,6.2,0.8,32.5,7.7,0.9,26.0,6.6,-4.9,24.6,5.9,-5.0,25.2,-0.6,-5.5,22.1,5.1,-6.2,20.7,-0.7,-7.5,18.4,0.2,-8.1,19.2,7.1,-7.0,20.9,9.4,-5.8,26.0,10.4,-4.7,26.6,6.7,-6.5,25.5,6.2,-7.4,27.8,1.1,-5.7,25.9,-0.4,-7.8,22.5,5.4,-8.2,21.1,-0.5,-8.9,19.6,-1.6,-8.8,18.8,0.4,-9.7,19.9,7.3,-9.0,21.8,9.6,-8.5,26.6,10.5,-6.1,15.0,7.6,-10.6,14.3,7.4,-8.6,13.4,10.0,-8.8,13.9,10.2,-10.5,13.5,8.2,-9.9] }, 36 | { "name": "stand18", "vertices": [33.2,1.1,-6.3,28.9,1.7,-8.4,35.1,2.7,-6.8,22.2,3.4,-7.6,24.2,4.3,-10.0,33.2,1.1,-3.7,35.3,5.3,-5.6,27.5,6.5,-9.7,33.4,6.8,-2.3,34.1,7.6,-4.4,25.0,10.0,-8.2,30.1,-0.1,-0.4,27.2,0.4,-5.6,25.8,0.4,-2.5,30.6,0.8,1.9,21.3,3.1,-4.5,32.2,0.7,-1.7,31.2,3.7,2.3,23.2,4.8,-1.4,31.1,6.3,1.5,22.2,8.9,-3.0,24.5,8.4,-4.3,32.4,6.5,-0.4,31.9,6.2,-2.7,32.6,3.6,-3.0,25.2,8.6,-5.9,31.9,3.3,-1.8,31.3,6.0,-1.5,31.6,1.2,-3.2,35.4,3.3,-2.9,35.4,1.9,-3.7,36.1,2.6,-4.9,36.2,4.0,-4.1,34.3,4.9,-4.3,33.6,3.9,-3.4,33.4,2.5,-3.8,33.9,2.0,-5.1,34.6,3.0,-6.0,34.7,4.4,-5.6,33.2,2.8,1.9,33.8,2.7,0.3,33.3,1.1,0.3,32.7,1.2,1.8,31.7,3.8,0.7,32.2,3.3,-0.6,31.9,1.9,-1.1,31.3,1.0,-0.1,30.8,1.5,1.2,31.1,2.9,1.6,25.3,4.0,-4.9,23.8,3.7,-5.2,23.3,-2.7,-6.9,21.3,3.5,-6.8,19.2,-1.6,-9.3,17.1,-0.2,-10.0,19.0,6.1,-7.5,20.8,7.8,-5.7,25.9,7.6,-3.9,26.1,4.3,-6.4,25.0,4.1,-7.5,26.2,-1.5,-6.6,24.4,-2.2,-9.0,22.1,4.1,-8.7,19.9,-1.3,-10.6,18.1,-2.0,-10.8,17.9,0.1,-11.4,20.0,6.5,-9.3,22.1,8.4,-8.2,26.6,7.9,-5.2,15.4,8.0,-11.3,14.5,7.6,-9.5,13.9,10.4,-9.3,14.8,10.7,-10.8,13.9,8.8,-10.7] }, 37 | { "name": "stand19", "vertices": [31.8,-2.0,-7.2,27.9,-0.5,-9.5,33.9,-0.8,-7.2,21.5,2.0,-8.8,23.7,3.0,-10.9,31.6,-2.6,-4.7,34.3,1.6,-5.5,27.2,4.7,-9.9,32.4,2.8,-2.2,33.5,3.8,-4.1,25.1,8.2,-7.9,28.0,-3.8,-1.9,25.8,-2.0,-7.1,24.0,-2.3,-4.1,28.4,-3.4,0.5,20.2,1.3,-5.9,30.4,-3.2,-2.9,29.4,-0.8,1.6,21.9,2.1,-2.4,29.6,1.9,1.3,21.8,6.6,-3.2,24.0,6.0,-4.5,31.2,2.2,-0.5,30.9,2.5,-2.8,31.2,-0.1,-3.5,24.9,6.3,-6.0,30.5,-0.6,-2.5,30.1,2.1,-1.8,30.0,-2.3,-4.2,34.0,-0.9,-3.2,33.9,-2.1,-4.3,34.8,-1.3,-5.4,35.0,-0.1,-4.3,33.2,1.1,-4.4,32.3,0.1,-3.8,32.0,-1.2,-4.4,32.5,-1.4,-5.8,33.4,-0.5,-6.5,33.8,0.8,-5.8,31.2,-1.9,1.1,31.9,-1.9,-0.3,31.3,-3.3,-0.7,30.6,-3.4,0.7,30.0,-0.4,0.1,30.6,-0.7,-1.3,30.2,-2.0,-2.0,29.3,-3.0,-1.3,28.8,-2.7,0.0,29.2,-1.4,0.7,24.3,1.6,-5.8,22.8,1.6,-6.3,21.7,-4.2,-9.2,20.5,2.1,-8.1,18.0,-2.1,-11.7,16.2,-0.3,-12.2,18.6,5.1,-8.4,20.4,6.2,-6.3,25.3,4.9,-4.2,25.3,2.1,-7.1,24.3,2.3,-8.4,24.6,-3.6,-8.5,23.0,-3.6,-11.1,21.5,2.8,-9.8,18.8,-1.7,-12.9,17.0,-2.1,-13.4,17.1,0.1,-13.5,19.8,5.7,-10.1,22.1,7.0,-8.5,26.2,5.3,-5.3,15.8,8.2,-12.1,14.5,7.6,-10.4,14.4,10.3,-9.7,15.4,10.8,-11.2,14.3,9.0,-11.4] }, 38 | { "name": "stand20", "vertices": [30.7,-4.3,-8.5,27.0,-2.1,-10.7,32.9,-3.3,-8.3,20.9,0.9,-10.0,23.3,2.0,-11.8,30.3,-5.2,-6.0,33.5,-1.2,-6.2,26.9,3.1,-10.4,31.4,-0.3,-2.9,32.6,0.8,-4.5,24.9,6.5,-8.1,26.4,-6.4,-3.7,24.7,-3.7,-8.7,22.8,-4.2,-5.9,26.7,-6.4,-1.2,19.4,-0.0,-7.3,28.9,-5.9,-4.5,27.9,-4.0,0.2,21.0,0.1,-3.7,28.4,-1.4,0.3,21.3,4.7,-3.9,23.5,4.0,-5.1,30.1,-1.0,-1.3,29.9,-0.4,-3.6,30.1,-2.9,-4.6,24.5,4.4,-6.5,29.2,-3.4,-3.7,29.1,-0.8,-2.6,28.7,-4.8,-5.7,32.7,-3.9,-4.3,32.6,-5.0,-5.6,33.6,-4.2,-6.4,33.9,-3.1,-5.2,32.2,-1.8,-5.3,31.2,-2.8,-4.8,30.8,-3.8,-5.7,31.4,-4.0,-7.0,32.3,-3.0,-7.5,32.8,-1.9,-6.6,29.6,-5.3,-0.3,30.4,-5.1,-1.7,29.7,-6.4,-2.3,28.9,-6.6,-1.0,28.6,-3.6,-1.2,29.2,-3.7,-2.6,28.8,-4.8,-3.4,27.8,-5.8,-2.9,27.2,-5.6,-1.6,27.6,-4.6,-0.7,23.5,-0.2,-7.0,22.0,0.0,-7.6,20.5,-5.2,-11.3,19.9,1.0,-9.4,17.2,-2.4,-13.6,15.6,-0.4,-14.0,18.3,4.2,-9.4,20.1,4.8,-7.0,24.6,2.7,-4.8,24.5,0.4,-8.2,23.7,0.8,-9.4,23.5,-4.9,-10.3,22.0,-4.4,-13.0,21.1,1.9,-10.9,18.1,-1.9,-14.7,16.4,-2.0,-15.3,16.7,0.2,-15.2,19.6,4.9,-10.9,21.9,5.7,-9.0,25.6,3.3,-5.9,15.9,8.0,-12.7,14.6,7.3,-11.1,14.7,9.9,-10.2,15.8,10.5,-11.4,14.6,8.9,-11.9] }, 39 | { "name": "stand21", "vertices": [29.5,-6.3,-9.5,26.1,-3.5,-11.6,31.8,-5.5,-9.1,20.2,-0.1,-10.8,22.9,1.0,-12.4,28.9,-7.3,-7.2,32.5,-3.7,-6.8,26.5,1.6,-10.8,30.4,-2.9,-3.5,31.7,-1.7,-5.0,24.7,4.9,-8.2,24.8,-8.4,-5.0,23.6,-5.1,-9.9,21.5,-5.8,-7.2,25.0,-8.7,-2.6,18.5,-1.1,-8.3,27.4,-8.0,-5.7,26.3,-6.6,-0.9,20.0,-1.5,-4.5,27.1,-4.0,-0.5,20.7,3.1,-4.3,22.9,2.2,-5.5,28.9,-3.6,-2.0,28.9,-2.8,-4.3,28.8,-5.2,-5.5,24.0,2.8,-6.8,27.9,-5.6,-4.7,27.9,-3.2,-3.4,27.3,-6.8,-6.8,31.4,-6.4,-5.3,31.2,-7.3,-6.6,32.4,-6.6,-7.3,32.6,-5.7,-6.0,31.1,-4.2,-6.0,30.0,-5.1,-5.7,29.5,-6.1,-6.7,30.1,-6.1,-8.0,31.3,-5.2,-8.3,31.7,-4.3,-7.3,27.9,-7.9,-1.5,28.9,-7.6,-2.8,28.1,-8.8,-3.6,27.2,-9.0,-2.3,27.2,-6.1,-2.3,27.9,-6.1,-3.6,27.4,-7.1,-4.6,26.3,-8.0,-4.2,25.6,-7.9,-2.9,26.1,-6.9,-1.9,22.6,-1.6,-7.8,21.2,-1.3,-8.4,19.5,-5.9,-12.7,19.3,0.2,-10.2,16.4,-2.6,-14.9,15.1,-0.4,-15.1,17.9,3.4,-9.9,19.7,3.6,-7.4,23.9,1.0,-5.4,23.8,-1.0,-9.0,23.0,-0.4,-10.2,22.3,-6.1,-11.6,21.1,-5.2,-14.3,20.5,1.0,-11.5,17.5,-2.2,-15.8,15.7,-2.1,-16.5,16.1,0.1,-16.2,19.4,4.0,-11.3,21.7,4.5,-9.3,25.0,1.4,-6.3,16.1,7.7,-12.9,14.6,7.0,-11.5,14.9,9.4,-10.3,16.1,10.0,-11.4,14.7,8.6,-12.2] }, 40 | { "name": "stand22", "vertices": [27.9,-8.2,-10.4,24.9,-4.9,-12.2,30.3,-7.6,-9.8,19.4,-1.0,-11.3,22.1,-0.1,-12.7,27.2,-9.4,-8.1,31.1,-6.1,-7.4,25.7,0.0,-11.0,29.0,-5.4,-4.0,30.5,-4.3,-5.4,24.2,3.3,-8.2,23.0,-10.2,-6.2,22.2,-6.4,-10.7,20.0,-7.1,-8.1,23.1,-10.7,-3.7,17.5,-2.1,-8.9,25.5,-10.0,-6.7,24.6,-8.9,-1.8,18.8,-2.9,-5.2,25.5,-6.4,-1.2,20.0,1.5,-4.5,22.1,0.6,-5.8,27.4,-6.1,-2.7,27.6,-5.1,-4.8,27.3,-7.4,-6.3,23.3,1.1,-7.0,26.3,-7.8,-5.5,26.6,-5.5,-4.0,25.7,-8.7,-7.8,29.7,-8.9,-6.1,29.5,-9.7,-7.5,30.7,-8.9,-8.2,31.0,-8.2,-6.7,29.6,-6.6,-6.6,28.4,-7.4,-6.4,27.8,-8.2,-7.5,28.5,-8.3,-8.8,29.7,-7.5,-9.0,30.3,-6.6,-8.0,26.1,-10.3,-2.5,27.0,-10.0,-3.8,26.1,-11.1,-4.7,25.1,-11.3,-3.4,25.5,-8.3,-3.1,26.1,-8.4,-4.5,25.6,-9.2,-5.5,24.4,-10.0,-5.3,23.8,-10.0,-4.0,24.3,-9.2,-2.8,21.5,-3.0,-8.4,20.2,-2.5,-9.0,18.1,-6.6,-13.7,18.4,-0.8,-10.6,15.5,-2.8,-15.6,14.3,-0.5,-15.7,17.4,2.6,-10.1,19.0,2.4,-7.6,23.0,-0.8,-5.7,22.8,-2.5,-9.4,22.1,-1.7,-10.6,20.9,-7.1,-12.5,19.8,-5.8,-15.2,19.8,0.1,-11.9,16.5,-2.3,-16.5,14.8,-2.0,-17.2,15.5,0.0,-16.6,18.9,3.2,-11.4,21.2,3.3,-9.4,24.1,-0.4,-6.6,16.0,7.3,-12.8,14.5,6.6,-11.4,15.0,8.9,-10.0,16.3,9.5,-11.1,14.8,8.3,-12.0] }, 41 | { "name": "stand23", "vertices": [25.8,-10.1,-11.4,23.2,-6.4,-13.1,28.2,-9.9,-10.8,18.2,-2.0,-11.8,21.0,-1.3,-13.1,24.9,-11.4,-9.3,29.1,-8.7,-8.3,24.6,-1.7,-11.3,27.1,-8.1,-4.9,28.7,-7.0,-6.2,23.5,1.4,-8.2,20.6,-11.9,-7.5,20.4,-7.7,-11.6,18.0,-8.3,-9.2,20.6,-12.6,-5.1,16.2,-3.0,-9.5,23.2,-12.0,-8.0,22.2,-11.1,-3.0,17.3,-4.3,-5.9,23.5,-8.9,-2.2,18.9,-0.1,-4.8,21.0,-1.2,-6.1,25.4,-8.7,-3.6,25.7,-7.5,-5.7,25.2,-9.6,-7.3,22.2,-0.7,-7.3,24.2,-10.0,-6.5,24.6,-7.9,-4.9,23.5,-10.6,-8.9,27.4,-11.4,-7.3,27.1,-12.0,-8.7,28.5,-11.4,-9.3,28.8,-10.8,-7.8,27.6,-9.1,-7.6,26.3,-9.7,-7.4,25.7,-10.4,-8.5,26.4,-10.4,-9.9,27.7,-9.7,-10.1,28.3,-9.1,-8.9,23.6,-12.7,-3.8,24.6,-12.5,-5.1,23.6,-13.2,-6.0,22.6,-13.5,-4.8,23.3,-10.6,-4.3,24.0,-10.6,-5.6,23.3,-11.3,-6.8,22.0,-12.0,-6.6,21.4,-12.0,-5.2,22.0,-11.3,-4.1,20.1,-4.4,-9.0,18.7,-3.7,-9.6,16.3,-7.0,-14.6,17.2,-1.6,-11.1,14.2,-2.8,-16.2,13.3,-0.5,-16.1,16.6,1.7,-10.3,18.2,1.2,-7.8,21.7,-2.7,-6.2,21.4,-4.0,-10.0,20.7,-3.0,-11.1,19.0,-8.0,-13.5,18.1,-6.3,-16.1,18.7,-0.8,-12.3,15.3,-2.5,-17.1,13.6,-1.9,-17.8,14.5,0.0,-17.0,18.3,2.3,-11.5,20.4,1.9,-9.5,22.8,-2.3,-7.0,15.8,6.8,-12.5,14.2,6.2,-11.3,14.9,8.3,-9.6,16.3,8.8,-10.6,14.7,7.8,-11.7] }, 42 | { "name": "stand24", "vertices": [23.4,-11.7,-12.5,21.3,-7.6,-13.8,25.8,-11.9,-11.9,16.8,-2.7,-12.2,19.7,-2.2,-13.5,22.3,-13.1,-10.5,26.8,-11.0,-9.2,23.2,-3.3,-11.7,24.8,-10.5,-5.8,26.6,-9.5,-7.0,22.4,-0.3,-8.3,17.9,-13.3,-8.8,18.3,-8.6,-12.5,15.8,-9.2,-10.1,17.9,-14.2,-6.4,14.6,-3.7,-9.9,20.5,-13.6,-9.3,19.6,-13.1,-4.3,15.6,-5.4,-6.5,21.1,-11.1,-3.2,17.7,-1.7,-5.1,19.6,-2.8,-6.4,23.0,-11.0,-4.6,23.5,-9.6,-6.5,22.8,-11.5,-8.4,20.9,-2.4,-7.5,21.7,-11.8,-7.7,22.4,-10.0,-5.8,20.9,-12.2,-10.1,24.8,-13.7,-8.5,24.4,-14.0,-9.9,25.8,-13.6,-10.5,26.2,-13.1,-8.9,25.2,-11.3,-8.5,23.9,-11.8,-8.5,23.2,-12.3,-9.7,23.9,-12.3,-11.0,25.2,-11.7,-11.1,25.9,-11.3,-9.9,20.7,-14.7,-5.2,21.8,-14.5,-6.4,20.7,-15.1,-7.4,19.7,-15.3,-6.3,20.7,-12.6,-5.4,21.4,-12.6,-6.7,20.7,-13.0,-8.0,19.3,-13.6,-7.8,18.6,-13.7,-6.5,19.3,-13.1,-5.3,18.3,-5.7,-9.7,17.1,-4.7,-10.2,14.3,-7.3,-15.5,15.8,-2.3,-11.5,12.8,-2.8,-16.7,12.2,-0.3,-16.4,15.6,1.0,-10.4,17.1,-0.0,-7.9,20.1,-4.4,-6.6,19.7,-5.2,-10.6,19.2,-4.1,-11.6,16.9,-8.6,-14.5,16.2,-6.7,-16.9,17.5,-1.7,-12.6,14.0,-2.4,-17.5,12.4,-1.6,-18.1,13.5,0.1,-17.3,17.3,1.4,-11.5,19.5,0.6,-9.5,21.3,-4.1,-7.4,15.6,6.3,-12.1,13.8,5.7,-10.9,14.8,7.6,-9.1,16.2,8.0,-10.1,14.5,7.4,-11.2] }, 43 | { "name": "stand25", "vertices": [20.8,-13.0,-13.5,19.2,-8.7,-14.5,23.2,-13.5,-12.8,15.4,-3.3,-12.5,18.3,-3.1,-13.7,19.5,-14.3,-11.6,24.2,-12.9,-10.1,21.6,-4.6,-12.0,22.2,-12.5,-6.7,24.1,-11.6,-7.7,21.1,-1.9,-8.4,15.2,-14.2,-9.9,16.1,-9.3,-13.2,13.6,-9.8,-10.9,15.0,-15.3,-7.6,13.1,-4.3,-10.3,17.6,-14.8,-10.4,16.8,-14.5,-5.4,13.7,-6.3,-7.0,18.5,-12.8,-4.2,16.2,-2.9,-5.3,18.1,-4.2,-6.7,20.4,-12.8,-5.5,21.1,-11.4,-7.3,20.2,-13.0,-9.3,19.4,-3.8,-7.8,19.0,-13.3,-8.6,20.0,-11.6,-6.6,18.3,-13.4,-11.1,21.9,-15.4,-9.6,21.5,-15.6,-11.1,23.0,-15.3,-11.6,23.4,-15.0,-10.1,22.7,-13.1,-9.5,21.2,-13.5,-9.4,20.5,-13.8,-10.7,21.2,-13.7,-12.0,22.6,-13.3,-12.1,23.4,-13.0,-10.8,17.7,-16.2,-6.4,18.8,-16.0,-7.6,17.7,-16.4,-8.7,16.6,-16.6,-7.5,17.9,-14.1,-6.5,18.7,-14.1,-7.8,17.9,-14.3,-9.1,16.5,-14.7,-9.0,15.8,-14.8,-7.7,16.5,-14.4,-6.4,16.5,-6.6,-10.2,15.4,-5.5,-10.6,12.4,-7.3,-16.1,14.4,-3.0,-11.7,11.4,-2.6,-17.0,11.1,-0.1,-16.5,14.6,0.3,-10.4,15.9,-1.0,-8.0,18.4,-5.8,-7.0,17.8,-6.3,-11.1,17.6,-5.1,-12.0,14.8,-9.0,-15.2,14.4,-6.9,-17.4,16.1,-2.3,-12.8,12.6,-2.3,-17.8,11.2,-1.3,-18.4,12.4,0.2,-17.4,16.4,0.7,-11.5,18.4,-0.5,-9.5,19.6,-5.6,-7.8,15.2,5.7,-11.7,13.4,5.3,-10.6,14.5,6.9,-8.6,16.0,7.2,-9.6,14.2,6.8,-10.7] }, 44 | { "name": "stand26", "vertices": [18.4,-14.0,-14.2,17.3,-9.4,-15.0,20.6,-14.8,-13.6,14.0,-3.9,-12.7,16.9,-3.9,-13.8,16.9,-15.3,-12.4,21.7,-14.6,-10.8,20.1,-6.0,-12.2,19.7,-14.0,-7.4,21.7,-13.4,-8.4,19.8,-3.3,-8.5,12.6,-14.8,-10.8,14.1,-9.9,-13.8,11.5,-10.2,-11.5,12.2,-16.0,-8.6,11.6,-4.7,-10.6,15.0,-15.6,-11.3,14.1,-15.6,-6.2,11.9,-7.0,-7.4,15.9,-14.1,-4.9,14.8,-4.0,-5.5,16.5,-5.3,-7.0,17.9,-14.3,-6.2,18.7,-12.9,-8.0,17.6,-14.3,-10.1,17.9,-5.1,-8.0,16.5,-14.4,-9.4,17.5,-13.0,-7.3,15.8,-14.3,-11.9,19.1,-16.7,-10.4,18.7,-16.8,-12.0,20.3,-16.6,-12.4,20.7,-16.5,-10.9,20.1,-14.6,-10.2,18.7,-14.8,-10.2,18.0,-14.9,-11.5,18.7,-14.8,-12.8,20.1,-14.7,-12.8,20.9,-14.5,-11.5,14.8,-17.3,-7.4,16.0,-17.1,-8.5,14.8,-17.4,-9.6,13.7,-17.5,-8.5,15.3,-15.2,-7.3,16.0,-15.1,-8.6,15.3,-15.3,-9.9,13.8,-15.5,-9.8,13.1,-15.6,-8.6,13.8,-15.4,-7.3,14.7,-7.4,-10.5,13.8,-6.2,-11.0,10.6,-7.3,-16.6,13.1,-3.5,-11.9,10.2,-2.4,-17.2,10.1,0.1,-16.5,13.6,-0.3,-10.4,14.7,-1.9,-8.1,16.6,-7.0,-7.4,16.1,-7.2,-11.4,16.0,-5.9,-12.2,12.8,-9.3,-15.8,12.7,-7.0,-17.8,14.9,-3.0,-12.9,11.4,-2.2,-17.9,10.1,-1.0,-18.5,11.6,0.3,-17.3,15.4,-0.1,-11.5,17.2,-1.6,-9.5,17.9,-6.8,-8.1,14.8,5.0,-11.4,12.9,4.8,-10.3,14.2,6.2,-8.3,15.7,6.3,-9.2,14.0,6.2,-10.3] }, 45 | { "name": "stand27", "vertices": [16.2,-14.9,-14.7,15.6,-10.1,-15.3,18.4,-15.9,-14.1,12.8,-4.5,-12.8,15.8,-4.7,-14.0,14.6,-16.1,-13.0,19.5,-15.9,-11.3,18.6,-7.1,-12.4,17.5,-15.3,-7.9,19.6,-14.8,-8.8,18.6,-4.6,-8.5,10.3,-15.2,-11.4,12.3,-10.4,-14.2,9.7,-10.5,-11.9,9.8,-16.4,-9.3,10.3,-5.0,-10.9,12.7,-16.2,-11.9,11.7,-16.3,-6.9,10.4,-7.5,-7.7,13.7,-15.1,-5.5,13.5,-4.9,-5.6,15.0,-6.3,-7.2,15.6,-15.4,-6.8,16.6,-14.0,-8.4,15.4,-15.2,-10.6,16.5,-6.2,-8.2,14.2,-15.3,-10.0,15.4,-14.1,-7.8,13.6,-14.9,-12.4,16.7,-17.7,-11.1,16.3,-17.8,-12.6,17.8,-17.7,-13.0,18.3,-17.7,-11.5,17.9,-15.7,-10.8,16.4,-15.8,-10.8,15.7,-15.9,-12.0,16.4,-15.8,-13.3,17.9,-15.7,-13.3,18.7,-15.7,-12.0,12.3,-18.1,-8.1,13.5,-18.0,-9.2,12.3,-18.0,-10.3,11.2,-18.1,-9.3,12.9,-16.0,-7.9,13.7,-16.0,-9.2,13.0,-16.0,-10.5,11.5,-16.0,-10.5,10.7,-16.1,-9.2,11.5,-16.1,-7.9,13.1,-8.1,-10.9,12.3,-6.8,-11.2,9.2,-7.3,-16.9,11.9,-3.9,-12.1,9.2,-2.4,-17.3,9.4,0.1,-16.5,12.6,-1.0,-10.4,13.6,-2.7,-8.1,15.0,-8.0,-7.6,14.6,-8.0,-11.7,14.6,-6.6,-12.5,11.2,-9.6,-16.2,11.3,-7.2,-18.1,13.7,-3.6,-13.0,10.5,-2.3,-18.0,9.3,-1.0,-18.5,10.8,0.1,-17.4,14.5,-0.9,-11.5,16.1,-2.6,-9.6,16.3,-7.9,-8.3,14.3,4.3,-11.2,12.5,4.2,-10.1,13.8,5.3,-8.0,15.4,5.4,-8.9,13.7,5.5,-10.0] }, 46 | { "name": "stand28", "vertices": [14.6,-15.5,-15.1,14.3,-10.7,-15.5,16.7,-16.7,-14.5,11.8,-4.9,-12.9,14.8,-5.3,-14.0,12.9,-16.7,-13.5,17.7,-16.8,-11.6,17.5,-7.9,-12.5,15.7,-16.2,-8.2,17.8,-15.8,-9.1,17.5,-5.6,-8.5,8.6,-15.6,-11.8,11.0,-10.8,-14.5,8.3,-10.8,-12.2,8.0,-16.8,-9.7,9.2,-5.4,-11.0,11.0,-16.7,-12.4,9.8,-16.9,-7.4,9.1,-8.0,-7.9,11.9,-15.9,-5.9,12.3,-5.6,-5.7,13.8,-7.2,-7.3,13.8,-16.2,-7.2,14.9,-14.8,-8.8,13.7,-15.9,-11.0,15.3,-7.1,-8.2,12.5,-15.9,-10.3,13.7,-14.8,-8.1,12.0,-15.5,-12.9,14.8,-18.5,-11.5,14.5,-18.4,-13.1,16.0,-18.4,-13.5,16.4,-18.5,-11.9,16.1,-16.6,-11.1,14.7,-16.6,-11.1,14.0,-16.5,-12.5,14.8,-16.5,-13.7,16.2,-16.5,-13.7,17.0,-16.5,-12.4,10.4,-18.6,-8.6,11.6,-18.5,-9.7,10.5,-18.5,-10.9,9.3,-18.5,-9.8,11.1,-16.7,-8.4,11.9,-16.6,-9.6,11.2,-16.6,-10.9,9.7,-16.5,-11.0,9.0,-16.6,-9.7,9.7,-16.6,-8.4,11.8,-8.7,-11.0,11.1,-7.3,-11.3,8.1,-7.5,-17.1,11.0,-4.3,-12.1,8.5,-2.6,-17.4,8.8,-0.1,-16.5,11.9,-1.5,-10.3,12.7,-3.4,-8.1,13.8,-8.8,-7.8,13.4,-8.6,-11.8,13.5,-7.2,-12.6,9.9,-9.9,-16.4,10.3,-7.5,-18.3,12.8,-4.2,-13.1,9.8,-2.5,-18.1,8.6,-1.0,-18.5,10.2,-0.1,-17.3,13.8,-1.5,-11.4,15.2,-3.4,-9.5,15.1,-8.8,-8.5,13.9,3.7,-10.9,12.0,3.7,-9.9,13.4,4.6,-7.7,15.0,4.6,-8.6,13.3,4.9,-9.8] }, 47 | { "name": "stand29", "vertices": [13.5,-15.8,-15.4,13.4,-11.0,-15.7,15.6,-17.1,-14.8,11.0,-5.2,-12.9,14.0,-5.7,-14.0,11.8,-17.0,-13.8,16.5,-17.4,-12.0,16.6,-8.5,-12.5,14.5,-16.8,-8.6,16.6,-16.4,-9.4,16.6,-6.3,-8.5,7.5,-15.8,-12.2,10.1,-11.0,-14.7,7.4,-11.0,-12.5,6.8,-17.1,-10.2,8.4,-5.7,-11.0,9.8,-17.0,-12.8,8.6,-17.4,-7.8,8.2,-8.5,-8.1,10.6,-16.4,-6.3,11.4,-6.3,-5.8,12.9,-7.7,-7.3,12.6,-16.8,-7.5,13.8,-15.3,-9.1,12.6,-16.4,-11.3,14.4,-7.6,-8.3,11.4,-16.4,-10.7,12.6,-15.3,-8.5,10.8,-15.8,-13.2,13.6,-18.9,-11.9,13.3,-18.8,-13.5,14.8,-18.8,-13.8,15.1,-19.0,-12.3,15.0,-17.1,-11.4,13.5,-17.0,-11.5,12.8,-16.9,-12.8,13.6,-16.8,-14.0,15.1,-16.9,-14.0,15.8,-17.0,-12.7,9.1,-19.0,-9.1,10.3,-18.9,-10.2,9.2,-18.8,-11.3,8.0,-18.8,-10.3,9.9,-17.1,-8.8,10.7,-17.0,-10.1,10.0,-16.9,-11.3,8.5,-16.8,-11.4,7.7,-16.9,-10.2,8.4,-17.0,-8.9,10.9,-9.0,-11.2,10.3,-7.6,-11.4,7.3,-7.5,-17.3,10.2,-4.7,-12.1,7.8,-2.6,-17.4,8.2,-0.3,-16.4,11.2,-1.9,-10.3,11.9,-4.0,-8.1,12.8,-9.3,-7.9,12.4,-9.0,-12.0,12.6,-7.6,-12.6,9.1,-10.0,-16.6,9.5,-7.5,-18.4,12.1,-4.5,-13.0,9.1,-2.7,-18.0,8.1,-1.1,-18.5,9.7,-0.3,-17.2,13.1,-1.9,-11.2,14.4,-4.0,-9.5,14.1,-9.3,-8.6,13.4,3.2,-10.6,11.5,3.2,-9.7,12.8,4.0,-7.4,14.4,4.0,-8.3,12.8,4.4,-9.5] }, 48 | { "name": "stand30", "vertices": [13.0,-15.9,-15.5,12.8,-11.0,-15.6,15.0,-17.2,-14.9,10.5,-5.3,-12.7,13.5,-5.8,-13.8,11.2,-17.1,-14.0,16.0,-17.4,-12.2,16.1,-8.6,-12.4,13.9,-17.0,-8.7,16.1,-16.6,-9.6,16.1,-6.4,-8.3,6.9,-15.9,-12.4,9.5,-11.0,-14.7,6.8,-11.1,-12.6,6.2,-17.3,-10.4,7.9,-5.9,-10.9,9.2,-17.1,-13.0,8.0,-17.5,-8.0,7.6,-8.6,-8.0,10.0,-16.6,-6.4,10.9,-6.5,-5.6,12.3,-8.0,-7.2,12.0,-17.0,-7.7,13.2,-15.6,-9.2,12.0,-16.4,-11.5,13.8,-7.9,-8.2,10.8,-16.4,-10.9,12.0,-15.6,-8.6,10.3,-15.9,-13.4,13.0,-19.1,-12.2,12.7,-18.9,-13.7,14.2,-18.9,-14.1,14.6,-19.1,-12.5,14.4,-17.3,-11.6,12.9,-17.2,-11.7,12.2,-17.0,-13.0,13.0,-16.9,-14.2,14.5,-17.0,-14.2,15.2,-17.2,-12.9,8.5,-19.2,-9.4,9.7,-19.1,-10.5,8.6,-19.0,-11.6,7.4,-19.0,-10.6,9.3,-17.3,-9.0,10.1,-17.2,-10.2,9.4,-17.0,-11.6,8.0,-16.9,-11.6,7.2,-17.0,-10.4,7.9,-17.2,-9.1,10.4,-9.1,-11.1,9.7,-7.7,-11.4,6.8,-7.5,-17.2,9.7,-4.8,-12.0,7.3,-2.6,-17.1,7.8,-0.2,-16.1,10.7,-2.0,-10.0,11.4,-4.2,-7.9,12.2,-9.6,-7.9,11.9,-9.1,-11.9,12.1,-7.7,-12.6,8.5,-9.9,-16.6,9.0,-7.5,-18.3,11.6,-4.6,-12.9,8.7,-2.5,-17.8,7.6,-1.0,-18.2,9.2,-0.2,-16.8,12.6,-2.0,-11.0,13.9,-4.2,-9.2,13.5,-9.6,-8.5,12.9,3.1,-10.2,11.0,3.0,-9.2,12.4,3.8,-7.0,14.0,3.8,-7.8,12.3,4.2,-9.0] }, 49 | { "name": "stand31", "vertices": [12.9,-15.7,-15.4,12.7,-11.0,-15.4,15.0,-17.0,-14.9,10.3,-5.3,-12.4,13.3,-5.7,-13.5,11.1,-17.0,-13.9,15.9,-17.4,-12.1,15.9,-8.5,-12.1,13.8,-17.0,-8.6,16.0,-16.6,-9.4,15.9,-6.5,-8.0,6.9,-15.9,-12.3,9.4,-11.0,-14.5,6.7,-11.2,-12.3,6.2,-17.3,-10.3,7.7,-5.9,-10.6,9.1,-17.0,-12.9,7.9,-17.6,-7.9,7.4,-8.8,-7.7,10.0,-16.8,-6.3,10.7,-6.7,-5.3,12.2,-8.0,-6.9,11.9,-17.0,-7.6,13.1,-15.6,-9.1,11.9,-16.4,-11.4,13.6,-7.9,-7.9,10.7,-16.5,-10.8,11.9,-15.7,-8.4,10.2,-15.8,-13.2,13.0,-19.1,-12.1,12.6,-18.9,-13.6,14.2,-18.9,-14.0,14.5,-19.1,-12.4,14.3,-17.1,-11.5,12.8,-17.1,-11.5,12.2,-16.9,-12.9,13.0,-16.8,-14.1,14.5,-16.9,-14.0,15.1,-17.0,-12.7,8.5,-19.2,-9.3,9.7,-19.1,-10.4,8.6,-19.0,-11.5,7.4,-19.1,-10.5,9.3,-17.3,-8.9,10.1,-17.2,-10.1,9.4,-17.0,-11.4,7.9,-16.9,-11.5,7.1,-17.0,-10.2,7.8,-17.2,-8.9,10.3,-9.1,-10.8,9.6,-7.8,-11.0,6.7,-7.4,-16.9,9.5,-4.7,-11.6,7.1,-2.4,-16.7,7.5,-0.1,-15.6,10.4,-2.1,-9.6,11.1,-4.2,-7.5,12.1,-9.6,-7.6,11.8,-9.0,-11.6,11.9,-7.7,-12.2,8.4,-9.9,-16.3,8.8,-7.3,-18.0,11.4,-4.5,-12.5,8.4,-2.4,-17.4,7.4,-0.9,-17.8,8.9,-0.0,-16.4,12.3,-2.1,-10.6,13.7,-4.2,-8.8,13.4,-9.5,-8.3,12.6,3.1,-9.7,10.7,3.0,-8.7,12.1,3.7,-6.4,13.7,3.8,-7.2,12.0,4.2,-8.4] }, 50 | { "name": "stand32", "vertices": [13.0,-15.7,-15.0,12.8,-11.0,-15.0,15.1,-17.0,-14.5,10.3,-5.3,-11.9,13.3,-5.7,-13.1,11.3,-17.0,-13.5,16.1,-17.4,-11.7,15.9,-8.5,-11.7,14.0,-17.0,-8.2,16.1,-16.6,-9.1,15.9,-6.4,-7.6,7.0,-16.0,-11.9,9.4,-11.0,-14.1,6.7,-11.2,-11.9,6.3,-17.4,-9.9,7.7,-6.0,-10.1,9.3,-17.1,-12.5,8.1,-17.8,-7.6,7.5,-8.8,-7.3,10.1,-16.8,-5.9,10.7,-6.7,-4.9,12.2,-8.1,-6.5,12.1,-17.1,-7.2,13.2,-15.6,-8.7,12.1,-16.5,-11.0,13.7,-7.9,-7.5,10.9,-16.5,-10.4,12.0,-15.6,-8.1,10.3,-15.8,-12.8,13.1,-19.0,-11.7,12.8,-18.9,-13.3,14.4,-18.9,-13.7,14.7,-19.0,-12.1,14.5,-17.1,-11.1,13.0,-17.1,-11.2,12.3,-16.9,-12.5,13.1,-16.8,-13.8,14.6,-16.8,-13.7,15.3,-17.0,-12.4,8.7,-19.3,-8.9,9.8,-19.2,-10.0,8.7,-19.0,-11.2,7.6,-19.1,-10.1,9.4,-17.4,-8.5,10.2,-17.2,-9.8,9.5,-17.1,-11.1,8.1,-17.0,-11.1,7.2,-17.2,-9.9,7.9,-17.4,-8.6,10.3,-9.2,-10.5,9.6,-7.7,-10.6,6.7,-7.5,-16.5,9.5,-4.9,-11.2,7.1,-2.5,-16.3,7.4,-0.2,-15.2,10.4,-2.1,-9.1,11.1,-4.2,-7.1,12.1,-9.7,-7.2,11.8,-9.1,-11.2,11.9,-7.6,-11.8,8.4,-9.9,-16.0,8.8,-7.4,-17.6,11.4,-4.5,-12.0,8.4,-2.5,-17.0,7.3,-0.9,-17.3,8.9,-0.1,-16.0,12.3,-2.0,-10.1,13.7,-4.1,-8.4,13.4,-9.6,-7.9,12.5,3.0,-9.2,10.6,2.9,-8.3,11.9,3.7,-5.9,13.5,3.8,-6.8,11.9,4.1,-8.0] }, 51 | { "name": "stand33", "vertices": [13.2,-16.0,-14.6,12.9,-11.3,-14.6,15.3,-17.2,-14.0,10.4,-5.6,-11.6,13.4,-6.0,-12.7,11.5,-17.3,-13.1,16.3,-17.6,-11.2,16.1,-8.7,-11.3,14.2,-17.2,-7.7,16.3,-16.7,-8.6,16.1,-6.7,-7.2,7.2,-16.3,-11.4,9.6,-11.3,-13.7,6.9,-11.4,-11.5,6.5,-17.6,-9.5,7.8,-6.2,-9.8,9.5,-17.4,-12.0,8.3,-17.9,-7.1,7.6,-9.1,-7.0,10.3,-17.0,-5.5,10.9,-6.8,-4.5,12.4,-8.2,-6.1,12.3,-17.3,-6.7,13.4,-15.9,-8.2,12.3,-16.7,-10.5,13.8,-8.1,-7.1,11.1,-16.7,-9.9,12.2,-15.9,-7.6,10.5,-16.1,-12.4,13.4,-19.3,-11.2,13.0,-19.1,-12.8,14.6,-19.1,-13.1,14.9,-19.3,-11.6,14.7,-17.3,-10.6,13.2,-17.3,-10.7,12.5,-17.2,-12.0,13.3,-17.1,-13.3,14.8,-17.1,-13.2,15.5,-17.2,-11.9,8.9,-19.5,-8.4,10.1,-19.5,-9.5,8.9,-19.3,-10.7,7.7,-19.4,-9.6,9.6,-17.6,-8.0,10.4,-17.5,-9.3,9.7,-17.3,-10.6,8.2,-17.2,-10.6,7.4,-17.4,-9.4,8.1,-17.6,-8.1,10.4,-9.4,-10.1,9.8,-8.0,-10.3,6.8,-7.8,-16.2,9.6,-5.1,-10.9,7.2,-2.9,-16.0,7.6,-0.5,-15.0,10.5,-2.3,-8.9,11.2,-4.4,-6.8,12.3,-9.8,-6.8,12.0,-9.3,-10.9,12.1,-7.9,-11.5,8.6,-10.2,-15.6,9.0,-7.7,-17.2,11.5,-4.8,-11.7,8.5,-2.8,-16.6,7.4,-1.3,-17.0,9.0,-0.5,-15.7,12.4,-2.3,-9.8,13.8,-4.4,-8.1,13.6,-9.8,-7.5,12.6,2.8,-9.0,10.7,2.7,-8.0,12.0,3.5,-5.7,13.6,3.6,-6.6,11.9,3.9,-7.8] }, 52 | { "name": "stand34", "vertices": [13.4,-16.4,-13.9,13.2,-11.6,-14.1,15.5,-17.7,-13.3,10.7,-6.0,-11.2,13.7,-6.3,-12.3,11.7,-17.7,-12.4,16.5,-17.9,-10.5,16.3,-9.0,-10.8,14.4,-17.5,-7.0,16.6,-17.0,-7.9,16.3,-6.9,-6.8,7.4,-16.6,-10.8,9.9,-11.7,-13.1,7.2,-11.8,-11.0,6.7,-17.9,-8.8,8.1,-6.5,-9.4,9.7,-17.8,-11.3,8.5,-18.1,-6.4,7.9,-9.3,-6.5,10.5,-17.2,-4.8,11.1,-7.0,-4.1,12.6,-8.5,-5.7,12.5,-17.5,-6.1,13.6,-16.1,-7.6,12.5,-16.9,-9.9,14.1,-8.4,-6.7,11.3,-17.0,-9.2,12.4,-16.1,-6.9,10.7,-16.5,-11.7,13.6,-19.6,-10.5,13.2,-19.4,-12.0,14.8,-19.4,-12.4,15.1,-19.6,-10.8,14.9,-17.7,-9.9,13.4,-17.7,-10.0,12.7,-17.5,-11.3,13.6,-17.4,-12.6,15.0,-17.5,-12.5,15.7,-17.6,-11.2,9.1,-19.8,-7.7,10.3,-19.7,-8.8,9.2,-19.6,-9.9,8.0,-19.6,-8.9,9.8,-17.9,-7.3,10.6,-17.8,-8.6,10.0,-17.6,-9.9,8.5,-17.6,-10.0,7.7,-17.7,-8.7,8.4,-17.9,-7.4,10.7,-9.8,-9.6,10.0,-8.3,-9.8,7.1,-8.2,-15.7,9.9,-5.4,-10.5,7.5,-3.3,-15.7,7.8,-0.9,-14.7,10.7,-2.7,-8.5,11.5,-4.7,-6.4,12.5,-10.0,-6.3,12.2,-9.7,-10.4,12.3,-8.3,-11.0,8.9,-10.7,-15.1,9.2,-8.2,-16.8,11.7,-5.1,-11.3,8.8,-3.2,-16.4,7.7,-1.7,-16.8,9.2,-0.9,-15.4,12.7,-2.6,-9.5,14.1,-4.6,-7.7,13.8,-10.0,-7.0,12.8,2.6,-8.8,10.9,2.5,-7.8,12.2,3.3,-5.6,13.9,3.3,-6.4,12.2,3.7,-7.6] }, 53 | { "name": "stand35", "vertices": [13.8,-16.8,-13.0,13.6,-12.0,-13.3,15.9,-18.0,-12.4,11.0,-6.2,-10.7,14.0,-6.6,-11.8,12.1,-18.0,-11.4,16.8,-18.0,-9.5,16.7,-9.2,-10.2,14.8,-17.5,-6.1,16.9,-17.0,-7.0,16.6,-6.9,-6.2,7.8,-16.8,-9.9,10.2,-12.0,-12.4,7.5,-12.1,-10.2,7.1,-18.0,-7.8,8.4,-6.7,-8.9,10.1,-18.0,-10.4,8.8,-18.2,-5.4,8.2,-9.3,-5.9,10.9,-17.1,-3.8,11.4,-7.0,-3.5,12.9,-8.5,-5.1,12.8,-17.5,-5.1,14.0,-16.1,-6.7,12.8,-17.1,-8.9,14.4,-8.4,-6.0,11.7,-17.1,-8.3,12.8,-16.2,-6.1,11.1,-16.7,-10.8,14.0,-19.8,-9.4,13.7,-19.7,-11.0,15.2,-19.7,-11.4,15.5,-19.8,-9.8,15.3,-17.9,-9.0,13.8,-17.9,-9.0,13.1,-17.8,-10.4,13.9,-17.7,-11.6,15.4,-17.7,-11.6,16.1,-17.8,-10.2,9.5,-19.9,-6.7,10.7,-19.8,-7.7,9.6,-19.8,-8.9,8.4,-19.8,-7.9,10.2,-18.0,-6.4,11.0,-17.9,-7.6,10.3,-17.8,-8.9,8.8,-17.8,-9.0,8.0,-17.9,-7.8,8.7,-17.9,-6.5,11.0,-9.8,-8.9,10.3,-8.5,-9.2,7.5,-8.6,-15.1,10.2,-5.6,-10.0,7.8,-3.7,-15.2,8.2,-1.3,-14.3,11.1,-2.8,-8.1,11.8,-4.7,-5.9,12.8,-10.0,-5.6,12.6,-9.8,-9.7,12.7,-8.5,-10.4,9.2,-11.0,-14.4,9.6,-8.6,-16.2,12.1,-5.3,-10.9,9.1,-3.7,-15.9,8.0,-2.2,-16.4,9.6,-1.3,-15.1,13.0,-2.8,-9.1,14.4,-4.7,-7.2,14.2,-10.0,-6.3,13.2,2.4,-8.6,11.2,2.4,-7.6,12.5,3.3,-5.4,14.2,3.3,-6.2,12.5,3.6,-7.4] }, 54 | { "name": "stand36", "vertices": [14.6,-16.9,-11.4,14.2,-12.1,-12.1,16.7,-17.9,-10.7,11.5,-6.2,-9.9,14.5,-6.6,-11.0,13.0,-18.0,-9.6,17.8,-17.8,-7.9,17.3,-9.0,-9.4,15.8,-17.0,-4.5,17.9,-16.5,-5.4,17.3,-6.4,-5.6,8.7,-16.8,-8.0,10.9,-12.2,-11.0,8.3,-12.1,-8.8,8.1,-17.9,-5.8,9.0,-6.6,-8.0,11.0,-17.9,-8.5,10.0,-17.8,-3.5,9.0,-8.9,-4.7,12.0,-16.5,-2.1,12.2,-6.4,-2.8,13.7,-7.9,-4.2,13.9,-17.0,-3.4,15.0,-15.7,-5.1,13.8,-17.0,-7.3,15.2,-7.8,-5.2,12.6,-16.9,-6.6,13.8,-15.7,-4.5,12.0,-16.7,-9.0,15.0,-19.5,-7.5,14.6,-19.6,-9.1,16.1,-19.6,-9.5,16.5,-19.5,-8.0,16.2,-17.5,-7.3,14.8,-17.6,-7.3,14.0,-17.6,-8.6,14.8,-17.7,-9.9,16.3,-17.6,-9.9,17.0,-17.6,-8.6,10.6,-19.5,-4.6,11.7,-19.5,-5.7,10.6,-19.6,-6.8,9.4,-19.5,-5.8,11.3,-17.5,-4.5,12.0,-17.6,-5.8,11.3,-17.6,-7.1,9.8,-17.7,-7.1,9.1,-17.6,-5.8,9.8,-17.5,-4.5,11.7,-9.8,-7.8,11.0,-8.4,-8.2,7.9,-9.1,-13.9,10.7,-5.6,-9.2,8.1,-4.3,-14.5,8.4,-1.8,-13.9,11.6,-2.6,-7.7,12.4,-4.3,-5.3,13.7,-9.6,-4.6,13.2,-9.8,-8.7,13.3,-8.4,-9.5,9.8,-11.4,-13.1,10.0,-9.1,-15.1,12.6,-5.4,-10.2,9.4,-4.3,-15.3,8.2,-2.9,-15.8,9.8,-1.8,-14.7,13.4,-2.6,-8.7,15.0,-4.3,-6.7,15.0,-9.6,-5.3,13.5,2.6,-8.7,11.6,2.6,-7.6,13.0,3.8,-5.5,14.5,3.8,-6.4,12.8,3.9,-7.6] }, 55 | { "name": "stand37", "vertices": [16.4,-16.4,-9.1,15.5,-11.9,-10.4,18.7,-17.1,-8.5,12.5,-5.9,-8.8,15.4,-6.3,-10.2,15.1,-17.3,-7.0,20.0,-16.5,-5.9,18.5,-8.1,-8.5,18.3,-15.4,-2.4,20.3,-14.9,-3.7,18.7,-5.0,-5.2,10.9,-16.3,-5.1,12.3,-12.0,-9.0,9.9,-11.8,-6.5,10.6,-17.1,-2.8,10.2,-6.3,-6.5,13.2,-17.3,-5.7,12.7,-16.5,-0.7,10.8,-8.1,-3.0,14.7,-14.9,0.3,13.9,-4.9,-1.8,15.4,-6.6,-3.1,16.5,-15.4,-1.1,17.3,-14.3,-3.1,16.0,-15.9,-5.0,16.7,-6.6,-4.3,14.9,-15.9,-4.1,16.2,-14.3,-2.4,14.0,-16.1,-6.5,17.4,-18.4,-5.0,16.9,-18.8,-6.5,18.4,-18.7,-7.1,18.9,-18.4,-5.5,18.5,-16.3,-5.2,17.0,-16.5,-5.0,16.2,-16.8,-6.2,16.8,-16.9,-7.5,18.3,-16.8,-7.7,19.1,-16.5,-6.5,13.4,-18.3,-1.6,14.4,-18.4,-2.8,13.2,-18.8,-3.8,12.1,-18.7,-2.6,13.8,-16.3,-1.9,14.5,-16.5,-3.2,13.6,-16.8,-4.4,12.2,-16.9,-4.3,11.5,-16.8,-2.9,12.4,-16.5,-1.7,13.2,-9.0,-6.3,12.3,-7.8,-6.8,8.8,-9.7,-11.9,11.7,-5.3,-8.1,8.4,-5.0,-13.2,8.5,-2.4,-12.9,12.4,-2.0,-7.1,13.6,-3.2,-4.7,15.5,-8.3,-3.3,14.6,-9.0,-7.2,14.4,-7.8,-8.2,10.9,-11.7,-10.9,10.7,-9.7,-13.4,13.4,-5.1,-9.3,9.7,-5.0,-14.1,8.3,-3.8,-14.7,9.8,-2.4,-13.9,14.2,-2.0,-8.4,16.0,-3.3,-6.3,16.6,-8.3,-4.2,13.6,3.1,-9.0,11.9,3.1,-7.8,13.4,4.7,-6.0,14.8,4.7,-7.1,13.0,4.5,-8.1] }, 56 | { "name": "stand38", "vertices": [20.1,-14.1,-6.8,18.1,-10.2,-8.7,22.6,-14.2,-6.5,14.1,-4.8,-7.6,16.8,-4.8,-9.4,19.4,-14.8,-4.5,24.1,-12.9,-4.3,20.5,-5.6,-8.0,22.6,-11.5,-0.8,24.3,-10.8,-2.4,20.3,-2.0,-5.3,15.3,-14.3,-2.1,15.3,-10.7,-6.8,13.2,-10.5,-4.0,15.6,-14.7,0.4,12.3,-5.0,-5.0,17.7,-14.9,-2.9,17.6,-13.3,1.9,13.7,-6.0,-1.4,19.4,-11.1,2.3,16.2,-2.1,-1.2,17.8,-3.7,-2.5,21.1,-11.5,0.7,21.3,-10.8,-1.6,20.2,-12.9,-2.8,18.9,-3.7,-3.9,19.2,-12.9,-1.9,20.3,-10.8,-0.6,18.2,-13.8,-4.0,22.1,-15.1,-2.6,21.5,-15.8,-4.0,22.8,-15.5,-4.8,23.5,-14.8,-3.5,22.7,-12.8,-3.4,21.3,-13.3,-2.9,20.4,-14.0,-3.9,20.9,-14.2,-5.3,22.3,-13.9,-5.7,23.2,-13.2,-4.8,18.6,-15.1,1.3,19.4,-15.2,-0.1,18.2,-16.0,-0.8,17.3,-15.8,0.5,18.6,-13.1,0.6,19.1,-13.4,-0.8,18.2,-14.1,-1.7,16.8,-14.5,-1.3,16.3,-14.2,0.1,17.2,-13.5,1.0,15.9,-7.1,-4.8,14.7,-6.2,-5.3,11.0,-9.7,-9.4,13.3,-4.1,-6.9,9.4,-5.4,-11.4,9.0,-2.9,-11.6,13.4,-0.7,-6.6,15.2,-1.2,-4.3,18.2,-5.4,-2.4,17.1,-7.0,-6.0,16.5,-6.1,-7.1,13.6,-11.0,-8.5,12.7,-9.6,-11.1,14.8,-3.9,-8.4,10.5,-5.4,-12.5,8.9,-4.7,-13.1,10.2,-2.8,-12.8,15.0,-0.6,-8.1,17.3,-1.1,-6.3,19.2,-5.3,-3.4,13.3,4.1,-9.6,11.8,4.0,-8.1,13.0,6.1,-6.9,14.3,6.2,-8.1,12.5,5.4,-8.8] }, 57 | { "name": "stand39", "vertices": [25.8,-6.0,-4.9,22.1,-4.1,-7.2,28.1,-5.2,-5.1,16.3,-0.4,-6.5,18.6,-0.0,-8.8,25.7,-6.3,-2.3,29.1,-2.8,-3.7,22.5,1.0,-8.1,27.5,-0.9,-0.4,28.7,-0.4,-2.4,21.0,5.1,-6.4,22.1,-6.6,0.8,20.0,-4.9,-4.6,18.3,-4.6,-1.5,22.7,-6.0,3.1,15.1,-0.5,-3.5,24.4,-6.5,-0.4,24.2,-3.5,3.8,17.1,0.3,-0.2,24.9,-0.9,3.2,17.7,4.6,-1.6,19.8,3.5,-2.8,26.3,-1.1,1.4,26.0,-1.1,-1.0,25.8,-3.7,-1.3,20.6,3.5,-4.3,25.1,-3.8,-0.3,25.2,-1.1,0.2,24.2,-5.7,-1.8,28.4,-4.9,-1.1,28.1,-6.2,-2.0,29.0,-5.7,-3.2,29.5,-4.4,-2.3,27.9,-3.0,-2.5,26.9,-3.7,-1.7,26.3,-4.9,-2.2,26.7,-5.5,-3.5,27.8,-4.8,-4.3,28.4,-3.5,-3.8,25.7,-5.0,3.4,26.3,-5.2,1.9,25.5,-6.5,1.8,24.9,-6.3,3.2,24.8,-3.5,2.2,25.2,-4.0,0.9,24.6,-5.2,0.4,23.6,-5.9,1.2,23.1,-5.4,2.5,23.8,-4.2,3.0,19.2,-0.9,-3.7,17.7,-0.8,-4.1,15.4,-6.5,-6.3,15.4,0.0,-5.8,12.1,-4.0,-8.9,10.6,-2.0,-9.6,14.1,3.2,-6.4,16.2,4.2,-4.5,20.8,2.2,-2.4,20.2,-0.8,-5.1,19.2,-0.6,-6.2,18.4,-6.4,-5.7,16.8,-6.3,-8.3,16.5,0.3,-7.6,12.9,-3.9,-10.1,11.0,-4.0,-10.5,11.5,-1.9,-10.9,15.3,3.4,-8.2,17.8,4.4,-6.8,21.6,2.4,-3.6,11.6,6.4,-10.3,10.4,6.2,-8.6,10.9,8.9,-8.2,11.8,9.1,-9.7,10.4,7.5,-9.7] }, 58 | { "name": "stand40", "vertices": [27.9,9.4,-6.3,23.6,8.1,-7.9,29.3,11.2,-7.4,16.9,8.0,-6.7,18.3,8.7,-9.5,28.1,10.1,-3.8,28.7,14.1,-6.9,20.8,11.8,-10.2,26.6,15.9,-4.0,27.0,16.1,-6.3,17.4,14.7,-9.3,25.7,9.0,0.1,22.6,7.3,-4.7,21.4,7.7,-1.5,26.0,10.7,1.9,16.2,8.4,-3.6,27.4,10.0,-1.7,25.7,13.7,1.5,17.5,11.3,-1.2,24.7,15.8,0.1,15.3,14.5,-3.8,17.5,14.2,-5.2,25.9,15.8,-1.9,25.3,14.8,-4.1,26.8,12.4,-3.7,18.1,14.0,-6.8,26.4,12.4,-2.4,24.9,14.7,-2.8,26.6,9.9,-3.1,29.6,13.0,-3.9,30.0,11.5,-4.3,30.4,12.0,-5.7,30.1,13.5,-5.3,27.9,13.7,-5.5,27.7,12.9,-4.3,27.8,11.5,-4.3,28.4,10.8,-5.5,28.8,11.6,-6.7,28.5,13.1,-6.7,27.8,13.2,1.1,28.4,12.8,-0.4,28.5,11.3,0.0,27.8,11.7,1.5,26.1,13.4,-0.1,26.6,12.8,-1.3,26.8,11.3,-1.3,26.5,10.5,-0.1,26.0,11.2,1.1,25.7,12.7,1.1,19.7,10.2,-4.7,18.4,9.3,-4.7,19.8,3.0,-4.6,16.0,8.1,-5.9,15.4,2.1,-6.7,13.0,2.6,-7.5,12.9,9.6,-6.9,14.1,12.2,-5.9,19.2,14.0,-4.8,20.2,10.3,-6.3,19.2,9.5,-7.2,22.1,4.9,-5.0,20.6,3.0,-6.9,16.4,8.3,-7.9,15.9,2.1,-8.1,14.5,1.0,-7.9,13.6,2.7,-9.0,13.7,9.7,-8.9,15.1,12.3,-8.6,19.7,14.0,-6.2,8.8,9.2,-10.6,8.1,9.2,-8.6,6.8,11.5,-9.1,7.4,11.6,-10.8,7.2,9.7,-10.0] }, 59 | { "name": "run001", "vertices": [21.6,22.3,-14.7,17.6,19.7,-14.9,21.6,24.7,-15.0,13.2,15.8,-11.5,12.4,18.1,-13.8,23.1,22.1,-12.5,20.8,26.5,-12.8,13.2,21.9,-13.4,20.4,26.0,-8.8,19.4,27.2,-10.6,10.4,22.1,-9.8,23.7,18.6,-9.3,19.1,17.2,-12.6,19.8,16.0,-9.5,24.7,19.5,-7.2,14.4,14.6,-8.7,23.9,20.9,-10.7,23.5,21.7,-5.7,16.1,16.8,-5.9,21.3,23.5,-5.2,12.2,19.0,-5.2,13.2,20.4,-7.2,21.1,24.7,-7.0,19.8,24.3,-9.0,21.6,23.1,-10.6,12.6,21.1,-8.6,22.0,22.5,-9.5,20.1,23.7,-8.0,22.3,20.9,-11.5,23.5,25.1,-11.5,23.9,24.3,-12.8,23.3,25.3,-13.8,23.0,26.3,-12.5,21.1,25.3,-11.6,21.8,24.2,-11.1,22.3,23.1,-11.9,22.1,23.3,-13.5,21.6,24.5,-14.0,21.0,25.6,-13.1,25.1,22.7,-7.0,24.7,23.1,-8.6,25.3,21.9,-9.1,25.7,21.3,-7.7,23.0,22.3,-7.2,22.8,22.5,-8.6,23.3,21.5,-9.5,23.9,20.2,-9.0,24.1,20.1,-7.5,23.5,21.1,-6.6,16.1,18.2,-9.8,15.3,16.8,-9.8,17.9,12.5,-14.0,13.0,15.0,-10.6,13.4,10.3,-14.3,11.0,9.7,-13.6,9.7,15.0,-9.3,10.7,17.4,-7.5,14.7,20.9,-7.6,15.5,19.0,-11.2,14.4,18.2,-11.9,19.1,15.4,-14.0,17.1,13.8,-15.9,12.0,16.2,-12.1,13.0,11.1,-15.4,12.2,9.3,-15.4,10.4,10.5,-14.9,9.0,16.2,-11.0,9.7,18.8,-9.8,14.4,21.7,-8.8,4.3,14.0,-10.6,5.0,12.7,-8.8,3.1,14.2,-7.3,2.6,15.2,-8.7,3.4,13.4,-9.1] }, 60 | { "name": "run002", "vertices": [22.8,13.0,-17.3,18.5,10.9,-17.3,23.2,15.2,-18.4,13.1,9.2,-13.4,13.1,10.5,-16.5,24.1,13.3,-15.0,22.5,17.8,-17.1,14.5,14.2,-17.3,21.8,18.6,-13.2,21.1,19.1,-15.3,11.4,16.1,-14.4,23.8,11.1,-10.9,19.3,9.4,-14.2,19.4,9.2,-10.9,24.7,12.6,-8.9,13.8,8.8,-10.4,24.3,12.8,-13.0,23.8,15.4,-8.5,15.7,11.6,-8.1,22.0,17.4,-8.8,12.1,14.4,-8.8,13.6,15.0,-10.9,22.1,18.0,-11.2,20.9,17.0,-13.0,22.5,15.2,-13.7,13.3,15.2,-12.6,22.7,14.8,-12.5,21.1,16.8,-11.7,23.0,12.8,-13.9,24.9,16.5,-15.0,25.2,15.2,-15.8,24.9,15.9,-17.3,24.5,17.2,-16.3,22.7,17.0,-15.5,23.0,15.9,-14.5,23.4,14.6,-15.0,23.4,14.2,-16.5,23.0,15.4,-17.4,22.7,16.7,-17.1,25.6,15.4,-9.9,25.4,15.6,-11.5,26.0,13.9,-11.5,26.0,13.9,-9.9,23.4,15.4,-10.2,23.4,15.2,-11.7,23.8,13.7,-12.0,24.1,12.8,-11.0,24.1,13.1,-9.6,23.8,14.4,-9.1,16.1,11.6,-12.3,15.2,10.5,-12.0,17.2,4.7,-14.0,12.7,8.8,-12.5,12.7,3.2,-14.4,10.1,3.2,-13.9,9.4,9.8,-11.7,10.5,12.4,-10.7,15.2,15.0,-11.4,15.9,12.0,-13.9,14.8,11.2,-14.5,18.9,7.2,-14.9,17.0,5.3,-16.5,12.1,9.4,-14.4,12.5,3.5,-15.8,11.4,2.1,-15.3,9.9,3.5,-15.5,9.0,10.3,-13.7,10.1,13.1,-13.4,15.0,15.6,-12.8,4.1,9.0,-13.2,4.3,8.4,-11.4,2.6,10.5,-10.7,2.5,11.1,-12.3,2.8,9.0,-12.0] }, 61 | { "name": "run003", "vertices": [21.3,19.4,-14.1,17.6,16.5,-14.3,21.6,21.1,-15.8,11.7,14.6,-11.0,12.2,14.9,-14.3,21.9,20.5,-11.9,20.3,23.9,-15.6,13.0,18.6,-16.0,18.4,25.4,-12.3,18.2,25.4,-14.7,9.1,20.5,-14.4,21.0,19.7,-7.5,17.7,16.0,-10.9,17.1,16.9,-7.5,21.1,21.8,-6.0,11.7,15.4,-7.9,21.7,20.7,-9.7,19.8,24.3,-6.6,12.6,19.0,-6.4,17.7,25.6,-7.9,8.8,20.7,-8.5,10.7,21.0,-10.6,18.3,25.6,-10.1,17.7,24.1,-11.9,20.0,22.4,-11.7,10.8,20.5,-12.2,19.8,22.4,-10.3,17.7,24.1,-10.6,20.7,20.1,-10.9,22.2,23.7,-12.8,23.0,22.4,-13.1,22.8,22.6,-14.7,22.1,24.1,-14.4,20.1,23.5,-13.9,20.4,23.1,-12.7,21.0,21.8,-12.5,21.5,21.0,-13.7,21.1,21.5,-15.0,20.5,22.8,-15.2,21.7,24.3,-7.6,22.1,23.9,-9.1,22.7,22.6,-8.5,22.4,23.1,-7.0,19.8,23.9,-8.2,20.3,23.1,-9.4,20.9,21.8,-9.4,21.1,21.1,-8.0,20.7,22.0,-6.8,20.1,23.3,-6.9,14.1,17.9,-10.3,13.2,16.7,-9.8,16.7,11.2,-9.4,11.1,14.6,-10.1,12.4,8.6,-10.0,9.9,8.2,-10.0,7.6,14.8,-10.3,8.1,17.8,-10.0,12.3,21.1,-10.6,14.1,17.9,-11.9,13.2,16.7,-12.3,18.0,13.7,-10.7,16.8,11.2,-11.9,10.9,14.6,-12.2,12.6,8.6,-11.5,11.7,7.1,-10.7,10.1,8.2,-11.6,7.6,14.8,-12.3,8.2,17.8,-12.8,12.3,21.1,-12.1,3.0,12.4,-12.5,3.0,12.6,-10.4,0.7,14.4,-10.7,0.9,14.4,-12.5,1.6,12.6,-11.5] }, 62 | { "name": "run004", "vertices": [24.6,14.1,-14.2,20.0,12.2,-14.2,25.4,15.7,-16.0,14.0,12.2,-11.2,14.4,12.2,-14.4,25.4,15.3,-12.1,24.6,18.5,-16.0,16.4,15.3,-16.3,23.2,20.8,-13.0,22.8,20.5,-15.4,13.0,18.1,-15.1,24.2,15.0,-7.5,20.0,12.0,-10.9,19.6,13.3,-7.5,24.8,17.1,-6.2,14.2,13.3,-8.1,25.2,15.7,-9.8,23.9,19.8,-7.3,15.8,16.7,-6.9,22.4,21.6,-8.6,12.5,19.0,-9.4,14.4,18.5,-11.2,23.0,21.2,-10.9,22.2,19.6,-12.5,23.8,17.5,-12.1,14.6,18.1,-12.8,23.8,17.7,-10.7,22.0,19.8,-11.2,23.9,15.3,-11.0,26.4,18.1,-13.3,26.8,16.7,-13.4,26.8,16.7,-15.0,26.4,18.3,-14.8,24.4,18.3,-14.4,24.4,17.9,-13.0,24.8,16.5,-12.8,25.0,15.5,-13.9,25.0,16.1,-15.2,24.6,17.5,-15.6,26.0,19.4,-8.1,26.2,18.7,-9.5,26.6,17.3,-8.9,26.4,17.9,-7.4,23.9,19.4,-8.8,24.2,18.3,-10.0,24.6,16.9,-9.7,24.6,16.5,-8.3,24.4,17.3,-7.1,23.9,18.7,-7.4,17.0,14.9,-10.5,15.8,14.1,-10.0,17.8,7.8,-9.0,13.2,12.4,-10.1,13.2,6.4,-9.5,10.5,6.5,-9.7,10.0,13.5,-10.5,11.2,16.3,-10.5,16.1,18.5,-11.3,17.1,14.7,-12.2,15.9,13.7,-12.5,19.8,9.8,-10.4,18.0,7.3,-11.5,13.2,12.0,-12.2,13.2,6.2,-11.0,12.0,4.9,-10.1,10.5,6.4,-11.3,10.2,13.3,-12.7,11.3,15.9,-13.3,16.1,18.1,-12.7,4.9,12.2,-12.8,4.9,12.4,-10.7,3.4,14.7,-11.3,3.4,14.5,-13.0,3.5,12.6,-11.8] }, 63 | { "name": "run005", "vertices": [29.0,8.2,-14.0,24.6,6.3,-14.2,29.7,9.9,-15.7,18.3,6.0,-11.2,18.9,6.2,-14.5,29.7,9.6,-11.8,29.0,12.7,-15.7,20.8,9.2,-16.2,27.3,15.0,-12.8,27.1,14.8,-15.1,17.3,12.0,-15.1,28.3,9.2,-7.3,24.5,6.2,-10.7,24.0,7.3,-7.5,29.0,11.2,-5.9,18.3,7.0,-8.2,29.5,9.9,-9.6,28.1,14.0,-6.8,20.0,10.5,-7.0,26.5,15.7,-8.4,16.7,12.7,-9.3,18.6,12.3,-11.2,27.1,15.3,-10.6,26.3,13.8,-12.3,28.1,11.8,-11.8,18.8,12.0,-12.9,27.9,12.0,-10.4,26.3,14.0,-10.9,28.3,9.4,-10.7,30.8,12.5,-12.8,31.2,11.1,-13.1,31.2,11.2,-14.6,30.8,12.7,-14.5,28.7,12.7,-14.0,28.7,12.1,-12.6,29.1,10.9,-12.4,29.5,9.9,-13.5,29.3,10.5,-15.0,29.0,11.8,-15.3,30.1,13.7,-7.7,30.3,13.1,-9.2,30.8,11.6,-8.6,30.3,12.1,-7.0,28.1,13.5,-8.4,28.3,12.5,-9.6,28.7,11.2,-9.3,29.0,10.7,-7.9,28.5,11.6,-6.8,28.1,12.9,-7.1,21.4,8.8,-10.4,20.1,7.9,-10.1,22.4,1.7,-9.2,17.8,6.2,-10.3,17.8,0.0,-9.8,15.3,0.2,-9.9,14.3,7.1,-10.7,15.5,9.9,-10.6,20.3,12.3,-11.2,21.4,8.6,-12.2,20.3,7.5,-12.6,24.3,3.8,-10.4,22.6,1.4,-11.5,17.8,5.8,-12.3,17.9,-0.2,-11.2,16.7,-1.5,-10.4,15.3,0.0,-11.5,14.4,6.7,-12.8,15.6,9.6,-13.5,20.3,12.1,-12.6,9.6,5.6,-13.1,9.4,5.8,-11.0,7.7,8.0,-11.7,7.7,7.7,-13.4,8.1,6.0,-12.3] }, 64 | { "name": "run006", "vertices": [26.4,16.2,-15.8,22.4,13.7,-15.6,26.6,18.2,-16.9,17.1,11.4,-11.8,16.9,12.6,-14.9,27.5,16.8,-13.4,25.6,20.7,-15.9,17.9,16.4,-15.9,24.6,21.7,-12.1,23.8,22.2,-14.3,14.6,18.0,-13.3,27.4,14.9,-9.2,23.0,12.4,-12.5,23.2,12.4,-9.0,28.0,16.6,-7.3,17.7,11.6,-8.6,27.8,16.4,-11.2,26.8,19.3,-7.1,19.1,14.7,-6.7,24.6,21.1,-7.7,15.3,17.0,-7.6,16.7,17.6,-9.7,24.8,21.3,-10.1,23.8,20.3,-11.8,25.8,18.6,-12.4,16.5,17.6,-11.5,26.0,18.2,-11.1,24.0,20.1,-10.5,26.5,16.2,-12.2,28.0,19.9,-13.7,28.5,18.6,-14.4,28.2,19.3,-15.9,27.6,20.7,-15.2,25.6,20.3,-14.4,26.2,19.3,-13.3,26.6,18.0,-13.5,26.8,17.6,-15.0,26.4,18.4,-16.0,25.8,19.7,-15.8,28.5,19.5,-8.4,28.5,19.3,-10.1,29.2,17.8,-9.9,29.2,18.0,-8.4,26.5,19.3,-8.7,26.5,18.8,-10.2,27.2,17.4,-10.5,27.5,16.6,-9.5,27.5,17.0,-8.0,26.8,18.2,-7.7,19.7,14.3,-10.8,18.9,13.3,-10.5,21.7,7.5,-11.9,16.6,11.4,-10.6,17.3,5.4,-12.1,14.6,5.2,-11.8,13.1,11.8,-10.2,13.9,14.7,-9.3,18.4,17.8,-10.2,19.6,14.7,-12.5,18.6,13.7,-13.0,23.0,9.9,-12.8,21.4,7.9,-14.3,16.1,11.6,-12.7,17.1,5.6,-13.5,16.3,4.1,-13.0,14.5,5.4,-13.4,12.8,12.2,-12.2,13.7,15.1,-12.2,18.1,18.0,-11.5,8.0,10.4,-11.8,8.3,9.9,-9.7,6.4,12.0,-9.3,6.2,12.2,-11.1,6.8,10.4,-10.6] } 65 | ], 66 | 67 | "morphColors": [], 68 | 69 | "normals": [], 70 | 71 | "colors": [], 72 | 73 | "uvs": [[0.99609375,0.1640625,0.8515625,0.1640625,0.79296875,0,0.94921875,0.9921875,0.94921875,0.8671875,0.97265625,0.9375,0.94921875,0.4609375,0.99609375,0.4609375,0.99609375,0.8671875,0.99609375,0.9921875,0.99609375,0,0.9453125,0.171875,0.9453125,0.5,0.90234375,0.5,0.90234375,0.171875,0.7265625,0.6953125,0.7109375,0.9921875,0.6953125,0.6953125,0.6640625,0.6953125,0.75390625,0.6953125,0.6640625,0.9921875,0.33984375,0.1640625,0.33984375,0.515625,0.2578125,0.3203125,0.68359375,0.1640625,0.6015625,0.3125,0.68359375,0.53125,0.75390625,0.9921875,0.6875,0,0.6875,0.265625,0.75,0.6875,0.6875,0.6875,0.6875,0.2734375,0.75,0.2734375,0.90234375,0.8671875,0.921875,0.9296875,0.90234375,0.9921875,0.8515625,0.640625,0.75390625,0.640625,0.75390625,0.265625,0.01953125,0.9453125,0.03125,0.953125,0.02734375,0.953125,0.9453125,0.9921875,0.9453125,0.8671875,0.94921875,0.171875,0.99609375,0.171875,0.85546875,0.171875,0.8984375,0.171875,0.8984375,0.4921875,0.85546875,0.4921875,0.8984375,0.6875,0.85546875,0.6875,0.87890625,0.7890625,0.8984375,0.796875,0.8515625,0.796875,0.875,0.9921875,0.4921875,0.7734375,0.43359375,0.7734375,0.43359375,0.921875,0.4921875,0.921875,0.46875,0.703125,0.53515625,0.703125,0.53515625,0.8828125,0.5078125,0.9921875,0.39453125,0.9921875,0.39453125,0.703125,0.04296875,0.9921875,0,0.9921875,0.00390625,0.84375,0.5234375,0.5859375,0.34375,0.5546875,0.34375,0.6953125,0.52734375,0.6953125,0.23046875,0.9921875,0.23828125,0.703125,0.1953125,0.8515625,0.1953125,0.9921875,0.04296875,0.703125,0.62109375,0.8515625,0.66015625,0.6953125,0.66015625,0.9921875,0.59765625,0.9921875,0.62109375,0.7265625,0.578125,0.8515625,0.5390625,0.9921875,0.5390625,0.6953125,0.578125,0.7265625,0.86328125,0.9921875,0.83203125,0.9921875,0.83203125,0.6484375,0.78515625,0.6484375,0.78515625,0.9921875,0.7578125,0.9921875,0,0.6953125,0,0.5546875,0.1796875,0.5859375,0.18359375,0.6953125,0,0.4140625,0.33984375,0.671875,0,0.2421875,0.390625,0.9921875,0.32421875,0.703125,0,0.1015625,0.390625,0.703125,0,0,0.33984375,0,0.34375,0.40625,0.68359375,0.671875,0.34375,0.2421875,0.125,0.703125,0.19140625,0.9921875,0.34375,0.1015625,0.19140625,0.703125,0.34375,0,0.68359375,0]], 74 | 75 | "faces": [8,70,55,56,0,1,2,8,70,71,73,3,4,5,8,71,56,67,4,6,7,8,67,72,71,7,8,4,8,67,66,69,2,1,0,8,69,73,72,9,5,8,8,73,69,70,5,9,3,8,56,71,70,2,10,0,8,69,72,67,0,10,2,8,69,66,55,11,12,13,8,55,70,69,13,14,11,8,25,3,21,15,16,17,8,20,21,3,18,17,16,8,10,3,25,19,16,15,8,20,3,15,18,16,20,8,20,15,18,21,22,23,8,10,7,4,24,25,26,8,10,4,3,19,27,16,8,57,56,50,28,2,29,8,51,60,50,30,31,32,8,52,51,50,33,30,32,8,54,64,53,34,35,36,8,54,53,52,37,38,39,8,55,54,52,1,37,39,8,56,55,52,2,1,39,8,50,49,57,40,41,42,8,50,56,52,29,2,39,8,68,58,59,41,42,40,8,59,60,61,32,31,30,8,59,61,62,32,30,33,8,63,64,65,43,35,44,8,62,63,65,39,38,37,8,62,65,66,39,37,1,8,62,66,67,39,1,2,8,59,67,68,29,2,28,8,62,67,59,39,2,29,8,57,68,67,45,46,7,8,67,56,57,7,6,45,8,73,71,72,5,4,8,8,55,66,65,13,12,44,8,65,54,55,44,34,13,8,54,65,64,34,44,35,8,63,53,64,43,36,35,8,53,63,62,47,48,49,8,62,52,53,49,50,47,8,52,62,61,50,49,51,8,61,51,52,51,52,50,8,51,61,60,52,51,53,8,59,50,60,54,55,56,8,50,59,58,40,42,42,8,58,49,50,41,42,40,8,40,39,42,57,58,59,8,42,41,40,59,60,57,8,43,39,40,61,58,57,8,43,40,44,61,57,62,8,45,44,40,63,62,57,8,40,41,45,57,60,63,8,46,45,41,64,63,60,8,46,41,42,64,60,59,8,46,42,47,64,59,65,8,48,47,42,66,65,59,8,42,39,48,59,58,66,8,43,48,39,61,66,58,8,32,29,30,58,57,60,8,30,31,32,60,59,58,8,33,34,29,61,62,57,8,33,29,32,61,57,58,8,29,34,35,57,62,63,8,35,30,29,63,60,57,8,30,35,36,60,63,64,8,36,37,31,64,65,59,8,36,31,30,64,59,60,8,31,37,38,59,65,66,8,38,32,31,66,58,59,8,32,38,33,58,66,61,8,5,28,0,67,68,69,8,1,0,28,70,71,72,8,28,12,1,72,73,70,8,16,14,11,74,75,76,8,16,11,28,74,76,77,8,5,0,2,67,69,78,8,26,22,16,79,80,81,8,26,16,28,79,81,82,8,22,26,27,80,79,83,8,24,28,5,84,82,85,8,24,5,8,84,85,86,8,23,24,8,87,84,86,8,28,24,26,82,84,79,8,26,24,23,79,84,87,8,23,27,26,87,83,79,8,22,27,21,88,89,90,8,25,23,8,91,92,93,8,27,23,25,89,92,91,8,25,21,27,91,90,89,8,28,11,13,94,95,96,8,13,12,28,96,97,94,8,14,15,13,98,22,96,8,14,13,11,98,96,95,8,15,3,12,22,99,97,8,15,12,13,22,97,96,8,18,15,14,23,22,98,8,14,17,18,98,100,23,8,16,22,17,74,101,102,8,17,14,16,102,75,74,8,20,18,17,21,23,100,8,17,19,20,100,103,21,8,19,17,22,104,102,101,8,20,19,22,21,103,105,8,22,21,20,105,106,21,8,2,0,1,107,71,70,8,2,1,4,107,70,26,8,4,1,12,26,70,73,8,4,12,3,26,73,108,8,2,4,7,107,26,25,8,7,6,2,25,109,107,8,6,8,5,110,111,67,8,5,2,6,67,78,110,8,6,7,10,109,25,24,8,10,9,6,24,112,109,8,8,6,9,111,110,113,8,8,9,10,114,112,24,8,10,25,8,24,115,114] 76 | 77 | } -------------------------------------------------------------------------------- /app/models/ratamahatta/ratamahatta.txt: -------------------------------------------------------------------------------- 1 | 11-02-98 2 | 3 | ================================================================ 4 | 5 | Model Name : Ratamahatta 6 | 7 | installation directory : quake2/baseq2/players/Ratamahatta 8 | 9 | Author : Brian "EvilBastard" Collins 10 | 11 | additional skins by : 12 | 13 | 'Gearwhore' by MrRogers 14 | 'Jaws' by Claudius Brunnecker 15 | 16 | Email Address : brian@zono.com 17 | 18 | Website Address : http://www.deviousassassins.com/EvilBastard/ 19 | 20 | Model description : 21 | 22 | It's been a long time in the making, but he's finaly done. This PPM is the prize of the Bodyshop Q2 tournament won by Tank Abbot. I hope he likes it ;P 23 | 24 | Model Info : 25 | Ratamahatta is a fun loving guy, who like to pull the wings off files, and similarly amusing things. After a long day of gratuitous destruction and rolling around in his own filth, Rat always enjoys a spot of tea. 26 | 27 | Additional Credits to : 28 | 29 | * Idsoftware 30 | * NST!!! Know it and love it 31 | 32 | Thanks to : 33 | 34 | Npherno and MrRogers for all the help 35 | Virus[DA] for hosting my website. 36 | Rogue13 and John McPherson for the advise and input. 37 | 38 | ================================================================ 39 | 40 | * Play Information * 41 | 42 | New Sounds : NO 43 | 44 | CTF Skins : YES 45 | 46 | VWEP Support : No 47 | 48 | 49 | * Construction * 50 | 51 | Poly Count : 666 tris.md2 / 119 weapon.md2 52 | 53 | Vert Count : 344 tris.md2 / 85 weapon.md2 54 | 55 | Skin Count : 4 DM, 2 CTF 56 | 57 | Base : Forgotten One 58 | 59 | Editor used : 60 | Modeling - lightwave 61 | Animation- lightwave + puppetmaster 62 | Skining - NST 63 | Painting - Photoshop, NST 64 | Viewing - Skin View 65 | 66 | Known Bugs : None that i know of. 67 | 68 | 69 | * Copyright / Permissions * 70 | QUAKE(R) and QUAKE II(R) are registered trademarks of id Software, Inc. 71 | Feel free to edit my model as you see fit, just be sure to mention me 72 | in the readme file. This model is not to be distributed as part of any 73 | commercial product. 74 | -------------------------------------------------------------------------------- /app/models/ratamahatta/readme.txt: -------------------------------------------------------------------------------- 1 | Ratamahatta character by Brian Collins 2 | From http://planetquake.gamespy.com/View.php?view=Quake2.Detail&id=368 -------------------------------------------------------------------------------- /app/models/ratamahatta/skins/ctf_b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/models/ratamahatta/skins/ctf_b.png -------------------------------------------------------------------------------- /app/models/ratamahatta/skins/ctf_r.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/models/ratamahatta/skins/ctf_r.png -------------------------------------------------------------------------------- /app/models/ratamahatta/skins/dead.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/models/ratamahatta/skins/dead.png -------------------------------------------------------------------------------- /app/models/ratamahatta/skins/gearwhore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/models/ratamahatta/skins/gearwhore.png -------------------------------------------------------------------------------- /app/models/ratamahatta/skins/ratamahatta.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/models/ratamahatta/skins/ratamahatta.png -------------------------------------------------------------------------------- /app/models/ratamahatta/skins/w_bfg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/models/ratamahatta/skins/w_bfg.png -------------------------------------------------------------------------------- /app/models/ratamahatta/skins/w_blaster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/models/ratamahatta/skins/w_blaster.png -------------------------------------------------------------------------------- /app/models/ratamahatta/skins/w_chaingun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/models/ratamahatta/skins/w_chaingun.png -------------------------------------------------------------------------------- /app/models/ratamahatta/skins/w_glauncher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/models/ratamahatta/skins/w_glauncher.png -------------------------------------------------------------------------------- /app/models/ratamahatta/skins/w_hyperblaster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/models/ratamahatta/skins/w_hyperblaster.png -------------------------------------------------------------------------------- /app/models/ratamahatta/skins/w_machinegun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/models/ratamahatta/skins/w_machinegun.png -------------------------------------------------------------------------------- /app/models/ratamahatta/skins/w_railgun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/models/ratamahatta/skins/w_railgun.png -------------------------------------------------------------------------------- /app/models/ratamahatta/skins/w_rlauncher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/models/ratamahatta/skins/w_rlauncher.png -------------------------------------------------------------------------------- /app/models/ratamahatta/skins/w_shotgun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/models/ratamahatta/skins/w_shotgun.png -------------------------------------------------------------------------------- /app/models/ratamahatta/skins/w_sshotgun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/models/ratamahatta/skins/w_sshotgun.png -------------------------------------------------------------------------------- /app/models/ratamahatta/skins/weapon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/models/ratamahatta/skins/weapon.png -------------------------------------------------------------------------------- /app/models/ratamahatta/src/ratamahatta.md2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/models/ratamahatta/src/ratamahatta.md2 -------------------------------------------------------------------------------- /app/models/ratamahatta/src/w_bfg.md2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/models/ratamahatta/src/w_bfg.md2 -------------------------------------------------------------------------------- /app/models/ratamahatta/src/w_blaster.md2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/models/ratamahatta/src/w_blaster.md2 -------------------------------------------------------------------------------- /app/models/ratamahatta/src/w_chaingun.MD2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/models/ratamahatta/src/w_chaingun.MD2 -------------------------------------------------------------------------------- /app/models/ratamahatta/src/w_glauncher.md2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/models/ratamahatta/src/w_glauncher.md2 -------------------------------------------------------------------------------- /app/models/ratamahatta/src/w_hyperblaster.md2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/models/ratamahatta/src/w_hyperblaster.md2 -------------------------------------------------------------------------------- /app/models/ratamahatta/src/w_machinegun.md2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/models/ratamahatta/src/w_machinegun.md2 -------------------------------------------------------------------------------- /app/models/ratamahatta/src/w_railgun.md2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/models/ratamahatta/src/w_railgun.md2 -------------------------------------------------------------------------------- /app/models/ratamahatta/src/w_rlauncher.md2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/models/ratamahatta/src/w_rlauncher.md2 -------------------------------------------------------------------------------- /app/models/ratamahatta/src/w_shotgun.md2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/models/ratamahatta/src/w_shotgun.md2 -------------------------------------------------------------------------------- /app/models/ratamahatta/src/w_sshotgun.md2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/models/ratamahatta/src/w_sshotgun.md2 -------------------------------------------------------------------------------- /app/models/ratamahatta/src/weapon.md2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/app/models/ratamahatta/src/weapon.md2 -------------------------------------------------------------------------------- /config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/config.js -------------------------------------------------------------------------------- /mime.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangbin17910/webGLwebsocket/70c3c5ef4f59f650ad84d21ba86531a15066f12f/mime.js -------------------------------------------------------------------------------- /server.js: -------------------------------------------------------------------------------- 1 | /**** 2 | * @author wangbin17910@gmail.com 3 | * 4 | ***/ 5 | //导入服务器需要的nodeJS模块 6 | var server = require("http"), 7 | url = require("url"), 8 | path = require("path"), 9 | fs = require("fs"), 10 | zlib = require("zlib"), 11 | config = require("./config"), 12 | qs = require('querystring'), 13 | mime = require("./mime").types; 14 | 15 | // 处理客户端的请求 16 | server.createServer(function (request, response) { 17 | response.setHeader("Server","Node"); 18 | //得到请求的文件路径 19 | var pathname = url.parse(request.url).pathname; 20 | //得到页面的参数 21 | var parameter = qs.parse(url.parse(request.url).query); 22 | console.log(parameter); 23 | //路由到欢迎页面 24 | if (pathname.slice(-1) === '/'){ 25 | pathname = pathname + config.Welcome.file; 26 | } 27 | //更改为真实的文件路径,并禁止访问服务器文件 28 | var realPath = path.join("app", path.normalize(pathname.replace(/\.\./g, ""))); 29 | //console.log(realPath); 30 | var pathHandle = function(realPath){ 31 | //文件的相关状态信息 32 | fs.stat(realPath, function(err, stats){ 33 | if(err){ 34 | //输出404错误 35 | response.writeHead(404, "Not Found",{'Content-Type': 'text/plain'}); 36 | response.write("请求的文件 " + pathname + " 不在服务器上."); 37 | response.end(); 38 | }else{ 39 | if(stats.isDirectory()){ 40 | realPath = path.join(realPath, "/", config.Welcome.file); 41 | pathHandle(realPath); 42 | }else{ 43 | //设定未知MIME类型 44 | var ext = path.extname(realPath); 45 | ext = ext ? ext.slice(1) : 'html'; 46 | var contentType = mime[ext] || "text/plain"; 47 | response.setHeader("Content-Type", contentType); 48 | 49 | //返回上次编辑的时间 50 | var lastModified = stats.mtime.toUTCString(); 51 | var ifModifiedSince = "If-Modified-Since".toLowerCase(); 52 | response.setHeader("Last-Modified", lastModified); 53 | 54 | //返回Expires请求头 55 | if(ext.match(config.Expires.fileMatch)){ 56 | var expires = new Date(); 57 | expires.setTime(expires.getTime() + config.Expires.maxAge * 1000); 58 | response.setHeader("Expires", expires.toUTCString()); 59 | response.setHeader("Cache-Control", "max-age=" + config.Expires.maxAge); 60 | } 61 | 62 | //读取文件前如果没有更改就让浏览器读取本地缓存 63 | //返回304状态 64 | if(request.headers[ifModifiedSince] && lastModified == request.headers[ifModifiedSince]){ 65 | response.writeHead(304, "Not Modified"); 66 | response.end(); 67 | }else{ 68 | //否则读取文件并进行gzip压缩然后返回 69 | var raw = fs.createReadStream(realPath); 70 | var acceptEncoding = request.headers['accept-encoding'] || ""; 71 | var matched = ext.match(config.Compress.match); 72 | 73 | if(matched && acceptEncoding.match(/\bgzip\b/)){ 74 | response.writeHead(200, "Ok", {'Content-Encoding': 'gzip'}); 75 | raw.pipe(zlib.createGzip()).pipe(response); 76 | }else if (matched && acceptEncoding.match(/\bdeflate\b/)) { 77 | response.writeHead(200, "Ok", {'Content-Encoding': 'deflate'}); 78 | raw.pipe(zlib.createDeflate()).pipe(response); 79 | } else { 80 | response.writeHead(200, "Ok"); 81 | raw.pipe(response); 82 | } 83 | } 84 | } 85 | } 86 | }); 87 | }; 88 | pathHandle(realPath); 89 | }).listen(9099); 90 | 91 | //控制台中输出信息 92 | console.log("Server is listening port 9099..."); 93 | -------------------------------------------------------------------------------- /start.js: -------------------------------------------------------------------------------- 1 | var io = require('socket.io').listen(8088); 2 | // 所有在线的用户 3 | var userList = {}; 4 | // 所有在聊天室的人 5 | var allChatter = {}; 6 | 7 | io.sockets.on('connection', function (socket) { 8 | var session = socket.id; 9 | userList[session] = socket; 10 | 11 | // 有新成员加入的时候 12 | socket.broadcast.emit('newMem',session); 13 | 14 | // 退出的时候发送退出消息 15 | socket.on('disconnect', function () { 16 | delete userList[session]; 17 | try{ 18 | delete allChatter[session]; 19 | }catch(err){ 20 | 21 | } 22 | socket.broadcast.emit('leave',session); 23 | session = null; 24 | }); 25 | 26 | // 把操作发送给其他所有成员 27 | socket.on('keyDown',function(data){ 28 | var msg = { 29 | key:data, 30 | id:session 31 | }; 32 | socket.broadcast.emit('keyDown',msg); 33 | }); 34 | 35 | socket.on('keyUp',function(data){ 36 | var msg = { 37 | key:data, 38 | id:session 39 | }; 40 | socket.broadcast.emit('keyUp',msg); 41 | }); 42 | 43 | // 登录聊天室时的消息 44 | socket.on('enterChatroom',function(data){ 45 | allChatter[session] = data.nickName; 46 | // 返回在线列表 47 | socket.emit('userList',allChatter); 48 | // 自己登录当作新添加的用户处理 49 | for(var i in allChatter){ 50 | console.log(i); 51 | userList[i].emit('enterChatroom',{ 52 | nickName : data.nickName, 53 | id : session 54 | }); 55 | } 56 | }); 57 | 58 | // 发送消息时的处理 59 | // 本应循环找出所有登录的用户发送消息,但是感觉开销比较大 60 | socket.on('chatMsg',function(data){ 61 | for(var i in allChatter){ 62 | userList[i].emit('newMsg',{ 63 | nickName : allChatter[session], 64 | content : data.content, 65 | privateMsg : false 66 | }); 67 | } 68 | }); 69 | 70 | // 私聊 71 | socket.on('privateChatMsg',function(data){ 72 | socket.emit('newMsg',{ 73 | nickName : allChatter[session], 74 | content : data.content, 75 | privateMsg : true 76 | }); 77 | userList[ data.toid ].emit('newMsg',{ 78 | nickName : allChatter[session], 79 | content : data.content, 80 | privateMsg : true 81 | }); 82 | }); 83 | 84 | //报告位置时发送消息 85 | socket.on('position',function(data){ 86 | //socket.broadcast.emit('position',data); 87 | data.id=session; 88 | userList[data.toid].emit('add',data); 89 | }); 90 | }); 91 | --------------------------------------------------------------------------------