├── 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 |
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 |
33 |
39 |
40 |
41 |
42 | |
43 |
44 |
47 | |
48 |
49 |
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 |
--------------------------------------------------------------------------------