ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/kgsueme/doc/protocol.html
Revision: 1.40
Committed: Sat Aug 16 21:39:37 2003 UTC (20 years, 9 months ago) by pcg
Content type: text/html
Branch: MAIN
Changes since 1.39: +678 -46 lines
Log Message:
*** empty log message ***

File Contents

# Content
1 <html>
2 <head>
3 <title>KGS Protocol Description</title>
4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5 <!--
6 Copyright (C) 2003 Marc Lehmannn &lt;pcg@goof.com&gt;
7
8 You can redistribute and/or modify this document under the terms of
9 the GNU General Public License as published by the Free Software
10 Foundation; either version 2 of the License, or (at your option) any
11 later version.
12
13 This document is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 -->
22 </head>
23 <body>
24
25 <h1>$Revision: 1.39 $</h1>
26
27 <h1>KGS Protocol Description</h1>
28
29 <p>This XML document describes the KGS protocol. It is also used
30 to automatically generate the perl parser for all the messages and
31 structures in the protocol. Adapting it to other languages should be
32 almost trivial.</p>
33
34 <p>
35 <b>Please note that wms has told me that he will change the
36 protocol in response to my efforts. No problems with changing the
37 protocol for good, but he does this just to make it more difficult
38 to reverse-engineer it, since his changes are neither required, nor
39 useful (they just make the protocol less robust, without adding added
40 value). He doesn't even care that this locks out some users who cannot
41 upgrade (cgoban2 isn't available for their platform anymore). It hurts
42 to see such a waste of time and efforts that could have been used to
43 fix bugs or improve the client...</b>
44 </p>
45
46 <p>If you feel you need to update the visual appearance of this
47 document, feel free to look <tt>doc/doc2html.xsl</tt> and improve
48 it.</p>
49
50 <p>The current version of this document can always be found at
51 <a href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/*checkout*/kgsueme/kgsueme/doc/protocol.xml?rev=HEAD&amp;content-type=text/xml">here</a>, while
52 the HTML version of it can be found
53 <a href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/*checkout*/kgsueme/kgsueme/doc/protocol.html?rev=HEAD&amp;content-type=text/html">here</a>.
54 (update: sourceforge is weeks behind on their anonymous cvs servers so the above might be out-of-date. sorry.)</p>
55
56 <h2>Structure and conventions of this document and the protocol</h2>
57
58 <p>"ORIGIN: CLIENT" means messages send from the client to the server,
59 while "ORIGIN: SERVER" means messages send by the server to the
60 client.</p>
61
62 <p>Everything on the wire is in little-endian format (what a shame).</p>
63
64 <p>Primitive types are mostly integers (signed
65 "<code>I</code>&lt;bits&gt;", unsigned "<code>U</code>&lt;bits&gt;"),
66 ascii strings ("<code>username</code>"), or zero-terminated
67 UCS2-Strings ("<code>STRING</code>"). Yes, I know java is supposed to
68 do UTF-16, but no implementation seems to care...</p>
69
70 <p>For the rest, go figure or bug me, <a href="mailto:pcg@goof.com">Marc Lehmann &lt;pcg@goof.com&gt;</a>
71 </p>
72
73 <h2>Stream and message structure.</h2>
74
75 <p>After connecting to the server, a handshake byte is sent. It's
76 the major version number of the protocol the client expects to
77 receive. Version 3 and 4 are mostly the same, except that Version 4
78 clients expect server messages to be compressed, version 3 clients
79 not.</p>
80
81 <p>The server sends back his protocol number, which is always 3 in
82 the current protocol. Most of the protocol variation is determined by
83 the server using the client version that is used in the initial login
84 message, not the initial handshake byte.</p>
85
86 <p>After the initial handshake, the client sends uncompressed
87 messages, while the server sends back a zlib-compressed
88 stream (<a href="http://rfc1950.x42.com/">rfc1950</a> and <a href="http://rfc1950.x42.com/">rfc1951</a>).</p>
89
90 <p>All messages have the same header:</p>
91
92 <h4>STRUCTURE message_header</h4>
93 <p>
94 </p>
95 <table border="1" width="100%">
96 <tr>
97 <th width="10%">NAME</th>
98 <th width="8%">TYPE</th>
99 <th width="4%">VALUE</th>
100 <th>DESCRIPTION</th>
101 <th width="10%">GUARD</th>
102 </tr>
103 <tr>
104 <td>_unknown</td>
105 <td>U16</td>
106 <td> </td>
107 <td>
108
109  
110 </td>
111 <td>
112 <b></b>
113  
114 </td>
115 </tr>
116 <tr>
117 <td>length</td>
118 <td>U16</td>
119 <td> </td>
120 <td>
121
122
123  
124 </td>
125 <td>
126 <b></b>
127  
128 </td>
129 </tr>
130 <tr>
131 <td>type</td>
132 <td>U16</td>
133 <td> </td>
134 <td>
135
136  
137 </td>
138 <td>
139 <b></b>
140  
141 </td>
142 </tr>
143 </table>
144
145 <h2>Primitive types used in the protocol.</h2>
146
147 <p>Apart from the basic types, I need to define some extra types to
148 deal with fixed-point values (based on integer types) or fixed-length
149 strings (either 7-bit-ascii or more limited (<code>A</code>), or UCS-2
150 based (<code>S</code>)).</p>
151
152 <h4>TYPE username</h4>
153 BASE TYPE A, LENGTH 10, MULTIPLIER <br />
154
155 <p>The basic user or login name, used throughout the protocol
156 as a handle to the user.</p>
157
158 <h4>TYPE roomname</h4>
159 BASE TYPE S, LENGTH 25, MULTIPLIER <br />
160 <!-- argh, how horribly broken -->
161
162 <p>Many strings in the protocol are fixed-width for no good reason
163 (maybe this is one reason for using compression in newer versions, as
164 the packets itself are wasting lots of space.</p>
165
166 <h4>TYPE realname</h4>
167 BASE TYPE S, LENGTH 50, MULTIPLIER <br />
168 <h4>TYPE email</h4>
169 BASE TYPE S, LENGTH 70, MULTIPLIER <br />
170 <h4>TYPE userinfo</h4>
171 BASE TYPE S, LENGTH 1000, MULTIPLIER <br />
172 <h4>TYPE url</h4>
173 BASE TYPE A, LENGTH 100, MULTIPLIER <br />
174
175 <p>Used in user_record.</p>
176
177 <h4>TYPE locale</h4>
178 BASE TYPE A, LENGTH 5, MULTIPLIER <br />
179
180 <p>A kind of locale specifier. It seems the general format seems to be
181 lowercase language, underscore, uppercase location, e.g. en_US. More
182 fancy specifications don't fit.</p>
183
184 <h4>TYPE flag</h4>
185 BASE TYPE U8, LENGTH , MULTIPLIER 1<br />
186
187 <p>Just a simple boolean value. 0 means false, and 1 generally true,
188 but I suggest accepting != 0 as true.</p>
189
190 <h4>TYPE komi16</h4>
191 BASE TYPE I16, LENGTH , MULTIPLIER 2<br />
192 <h4>TYPE komi32</h4>
193 BASE TYPE I32, LENGTH , MULTIPLIER 2<br />
194 <h4>TYPE komi324</h4>
195 BASE TYPE I32, LENGTH , MULTIPLIER 4<br />
196
197 <p>Komi values are multiplied by 2 to make them integer in the
198 protocol. Well, *most* of the time at least...</p>
199
200 <h4>TYPE result</h4>
201 BASE TYPE I32, LENGTH , MULTIPLIER 2<br />
202
203 <p>The game result is also multiplied by two to give it higher
204 resolution. There are also special values for wins by time etc., either
205 in result or in the score* types, or both :)</p>
206
207 <h4>TYPE score16</h4>
208 BASE TYPE I16, LENGTH , MULTIPLIER 4<br />
209 <h4>TYPE score32</h4>
210 BASE TYPE I32, LENGTH , MULTIPLIER 4<br />
211 <h4>TYPE score1000</h4>
212 BASE TYPE I32, LENGTH , MULTIPLIER 1000<br />
213
214 <p>A score value (used for displaying the score at the end of a game)
215 are multiplied by four for a change (the 0.25 resolution is not
216 used). In game structures it is encoded by dividing by two, though, so
217 watch out! And in some others, it's encoded by multiplying by 1000...
218 yuck!</p>
219
220 <h4>TYPE time</h4>
221 BASE TYPE U32, LENGTH , MULTIPLIER 1000<br />
222
223 <p>Time values are multiplied by 1000, giving them millisecond
224 accuracy.</p>
225
226 <h4>TYPE timestamp</h4>
227 BASE TYPE U64, LENGTH , MULTIPLIER 1000<br />
228
229 <p>64 bit timeval, milliseconds since posix epoch, e.g. <code>my
230 ($year, $month, $day) = (gmtime $date * 0.001)[5,4,3];</code>
231 </p>
232
233 <h4>TYPE password</h4>
234 BASE TYPE U64, LENGTH , MULTIPLIER <br />
235
236 <p>Password is a number calculated as follows (VERY insecure, basically
237 plaintext!): <code>password = 0; for char in characters do password ←
238 password * 1055 + ascii_code (char)</code>
239 </p>
240
241 <h2>Enumeration and set types used in the protocol.</h2>
242
243 <h4>enum: GAMETYPE</h4>
244 <p>
245 </p>
246 <table border="1" width="100%">
247 <tr>
248 <th width="10%">NAME</th>
249 <th width="8%">TYPE</th>
250 <th width="4%">VALUE</th>
251 <th>DESCRIPTION</th>
252 <th width="10%">GUARD</th>
253 </tr>
254 <tr>
255 <td>DEMONSTRATION</td>
256 <td></td>
257 <td>0 </td>
258 <td>
259
260  
261 </td>
262 <td>
263 <b></b>
264  
265 </td>
266 </tr>
267 <tr>
268 <td>TEACHING</td>
269 <td></td>
270 <td>1 </td>
271 <td>
272
273  
274 </td>
275 <td>
276 <b></b>
277  
278 </td>
279 </tr>
280 <tr>
281 <td>FREE</td>
282 <td></td>
283 <td>2 </td>
284 <td>
285
286  
287 </td>
288 <td>
289 <b></b>
290  
291 </td>
292 </tr>
293 <tr>
294 <td>RATED</td>
295 <td></td>
296 <td>3 </td>
297 <td>
298
299  
300 </td>
301 <td>
302 <b></b>
303  
304 </td>
305 </tr>
306 <tr>
307 <td>TYPE4</td>
308 <td></td>
309 <td>4 </td>
310 <td>
311 Probably not used, but the protocol has space for it it seems.
312
313  
314 </td>
315 <td>
316 <b></b>
317  
318 </td>
319 </tr>
320 </table>
321
322 <h4>enum: GAMEOPT</h4>
323 <p>
324 </p>
325 <table border="1" width="100%">
326 <tr>
327 <th width="10%">NAME</th>
328 <th width="8%">TYPE</th>
329 <th width="4%">VALUE</th>
330 <th>DESCRIPTION</th>
331 <th width="10%">GUARD</th>
332 </tr>
333 <tr>
334 <td>NONE</td>
335 <td></td>
336 <td>0 </td>
337 <td>
338
339  
340 </td>
341 <td>
342 <b></b>
343  
344 </td>
345 </tr>
346 <tr>
347 <td>LECTURE</td>
348 <td></td>
349 <td>1 </td>
350 <td>
351
352  
353 </td>
354 <td>
355 <b></b>
356  
357 </td>
358 </tr>
359 <tr>
360 <td>PRIVATE</td>
361 <td></td>
362 <td>2 </td>
363 <td>
364
365  
366 </td>
367 <td>
368 <b></b>
369  
370 </td>
371 </tr>
372 <tr>
373 <td>SIMUL</td>
374 <td></td>
375 <td>3 </td>
376 <td>
377
378  
379 </td>
380 <td>
381 <b></b>
382  
383 </td>
384 </tr>
385 </table>
386
387 <h4>set: GAMEFLAG</h4>
388 <p>
389 </p>
390 <table border="1" width="100%">
391 <tr>
392 <th width="10%">NAME</th>
393 <th width="8%">TYPE</th>
394 <th width="4%">VALUE</th>
395 <th>DESCRIPTION</th>
396 <th width="10%">GUARD</th>
397 </tr>
398 <tr>
399 <td>SCORED</td>
400 <td></td>
401 <td>1 </td>
402 <td>
403
404  
405 </td>
406 <td>
407 <b></b>
408  
409 </td>
410 </tr>
411 <tr>
412 <td>ADJOURNED</td>
413 <td></td>
414 <td>2 </td>
415 <td>
416
417  
418 </td>
419 <td>
420 <b></b>
421  
422 </td>
423 </tr>
424 <tr>
425 <td>UPLOADED</td>
426 <td></td>
427 <td>4 </td>
428 <td>
429
430  
431 </td>
432 <td>
433 <b></b>
434  
435 </td>
436 </tr>
437 </table>
438
439 <h4>set: ROOMFLAG</h4>
440 <p>
441 </p>
442 <table border="1" width="100%">
443 <tr>
444 <th width="10%">NAME</th>
445 <th width="8%">TYPE</th>
446 <th width="4%">VALUE</th>
447 <th>DESCRIPTION</th>
448 <th width="10%">GUARD</th>
449 </tr>
450 <tr>
451 <td>ADMIN</td>
452 <td></td>
453 <td>0x01 </td>
454 <td>
455
456  
457 </td>
458 <td>
459 <b></b>
460  
461 </td>
462 </tr>
463 <tr>
464 <td>DEFAULT</td>
465 <td></td>
466 <td>0x04 </td>
467 <td>
468
469  
470 </td>
471 <td>
472 <b></b>
473  
474 </td>
475 </tr>
476 <tr>
477 <td>PRIVATE</td>
478 <td></td>
479 <td>0x10 </td>
480 <td>
481
482  
483 </td>
484 <td>
485 <b></b>
486  
487 </td>
488 </tr>
489 </table>
490
491 <h4>set: GAMESTATUS</h4>
492 <p>
493 </p>
494 <table border="1" width="100%">
495 <tr>
496 <th width="10%">NAME</th>
497 <th width="8%">TYPE</th>
498 <th width="4%">VALUE</th>
499 <th>DESCRIPTION</th>
500 <th width="10%">GUARD</th>
501 </tr>
502 <tr>
503 <td>INPLAY</td>
504 <td></td>
505 <td>0x80 </td>
506 <td>
507
508  
509 </td>
510 <td>
511 <b></b>
512  
513 </td>
514 </tr>
515 </table>
516
517 <h4>enum: SCORE</h4>
518 <p>
519 <p>Special score values, in addition to numerical scores. Some are also used with their
520 negative value.</p>
521 </p>
522 <table border="1" width="100%">
523 <tr>
524 <th width="10%">NAME</th>
525 <th width="8%">TYPE</th>
526 <th width="4%">VALUE</th>
527 <th>DESCRIPTION</th>
528 <th width="10%">GUARD</th>
529 </tr>
530 <tr>
531 <td>TIMEOUT</td>
532 <td></td>
533 <td>16384 / 4 </td>
534 <td>
535 Also used negatively to score for white instead of black.
536
537
538  
539 </td>
540 <td>
541 <b></b>
542  
543 </td>
544 </tr>
545 <tr>
546 <td>RESIGN</td>
547 <td></td>
548 <td>16385 / 4 </td>
549 <td>
550 Also used negatively to score for white instead of black.
551
552
553  
554 </td>
555 <td>
556 <b></b>
557  
558 </td>
559 </tr>
560 <tr>
561 <td>FORFEIT</td>
562 <td></td>
563 <td> 0 / 4 </td>
564 <td>
565 Also used negatively to score for white instead of black.
566
567
568  
569 </td>
570 <td>
571 <b></b>
572  
573 </td>
574 </tr>
575 <tr>
576 <td>JIGO</td>
577 <td></td>
578 <td>16386 / 4 </td>
579 <td>
580
581
582  
583 </td>
584 <td>
585 <b></b>
586  
587 </td>
588 </tr>
589 <tr>
590 <td>NO_RESULT</td>
591 <td></td>
592 <td>16386 / 4 </td>
593 <td>
594
595  
596 </td>
597 <td>
598 <b></b>
599  
600 </td>
601 </tr>
602 <tr>
603 <td>ADJOURNED</td>
604 <td></td>
605 <td>16387 / 4 </td>
606 <td>
607
608  
609 </td>
610 <td>
611 <b></b>
612  
613 </td>
614 </tr>
615 <tr>
616 <td>UNKNOWN</td>
617 <td></td>
618 <td>16389 / 4 </td>
619 <td>
620
621  
622 </td>
623 <td>
624 <b></b>
625  
626 </td>
627 </tr>
628 </table>
629
630 <h4>enum: RULESET</h4>
631 <p>
632 </p>
633 <table border="1" width="100%">
634 <tr>
635 <th width="10%">NAME</th>
636 <th width="8%">TYPE</th>
637 <th width="4%">VALUE</th>
638 <th>DESCRIPTION</th>
639 <th width="10%">GUARD</th>
640 </tr>
641 <tr>
642 <td>JAPANESE</td>
643 <td></td>
644 <td>0 </td>
645 <td>
646
647  
648 </td>
649 <td>
650 <b></b>
651  
652 </td>
653 </tr>
654 <tr>
655 <td>CHINESE </td>
656 <td></td>
657 <td>1 </td>
658 <td>
659
660  
661 </td>
662 <td>
663 <b></b>
664  
665 </td>
666 </tr>
667 <tr>
668 <td>AGA</td>
669 <td></td>
670 <td>2 </td>
671 <td>
672
673  
674 </td>
675 <td>
676 <b></b>
677  
678 </td>
679 </tr>
680 <tr>
681 <td>NEW_ZEALAND</td>
682 <td></td>
683 <td>3 </td>
684 <td>
685
686  
687 </td>
688 <td>
689 <b></b>
690  
691 </td>
692 </tr>
693 </table>
694
695 <h4>enum: TIMESYS</h4>
696 <p>
697 </p>
698 <table border="1" width="100%">
699 <tr>
700 <th width="10%">NAME</th>
701 <th width="8%">TYPE</th>
702 <th width="4%">VALUE</th>
703 <th>DESCRIPTION</th>
704 <th width="10%">GUARD</th>
705 </tr>
706 <tr>
707 <td>NONE</td>
708 <td></td>
709 <td>0 </td>
710 <td>
711
712  
713 </td>
714 <td>
715 <b></b>
716  
717 </td>
718 </tr>
719 <tr>
720 <td>ABSOLUTE</td>
721 <td></td>
722 <td>1 </td>
723 <td>
724
725  
726 </td>
727 <td>
728 <b></b>
729  
730 </td>
731 </tr>
732 <tr>
733 <td>BYO_YOMI</td>
734 <td></td>
735 <td>2 </td>
736 <td>
737
738  
739 </td>
740 <td>
741 <b></b>
742  
743 </td>
744 </tr>
745 <tr>
746 <td>CANADIAN</td>
747 <td></td>
748 <td>3 </td>
749 <td>
750
751  
752 </td>
753 <td>
754 <b></b>
755  
756 </td>
757 </tr>
758 </table>
759
760 <h4>enum: COLOUR</h4>
761 <p>
762 <p>Convinience constants used in several places.</p>
763 </p>
764 <table border="1" width="100%">
765 <tr>
766 <th width="10%">NAME</th>
767 <th width="8%">TYPE</th>
768 <th width="4%">VALUE</th>
769 <th>DESCRIPTION</th>
770 <th width="10%">GUARD</th>
771 </tr>
772 <tr>
773 <td>BLACK</td>
774 <td></td>
775 <td>0 </td>
776 <td>
777
778  
779 </td>
780 <td>
781 <b></b>
782  
783 </td>
784 </tr>
785 <tr>
786 <td>WHITE</td>
787 <td></td>
788 <td>1 </td>
789 <td>
790
791  
792 </td>
793 <td>
794 <b></b>
795  
796 </td>
797 </tr>
798 </table>
799
800 <h2>Structs used in send &amp; receive messages</h2>
801
802 <h4>STRUCTURE user</h4>
803 CLASS: KGS::User<br />
804 <p>
805
806 <p>Almost everywhere a user + flags is required, even used in some places
807 where only a username is required. I see no general rule on when a
808 complete user and when a partial user is required.</p>
809 </p>
810 <table border="1" width="100%">
811 <tr>
812 <th width="10%">NAME</th>
813 <th width="8%">TYPE</th>
814 <th width="4%">VALUE</th>
815 <th>DESCRIPTION</th>
816 <th width="10%">GUARD</th>
817 </tr>
818 <tr>
819 <td>name</td>
820 <td>username</td>
821 <td> </td>
822 <td>
823
824  
825 </td>
826 <td>
827 <b></b>
828  
829 </td>
830 </tr>
831 <tr>
832 <td>flags</td>
833 <td>U32</td>
834 <td>1 </td>
835 <td>
836
837  
838 </td>
839 <td>
840 <b></b>
841  
842 </td>
843 </tr>
844 </table>
845
846 <h4>STRUCTURE rules</h4>
847 CLASS: KGS::Rules<br />
848 <p>
849
850 <p>This structure is used for challanges as well as in the special
851 TREE "subprotocol". It tightly encodes the game parameters.</p>
852 </p>
853 <table border="1" width="100%">
854 <tr>
855 <th width="10%">NAME</th>
856 <th width="8%">TYPE</th>
857 <th width="4%">VALUE</th>
858 <th>DESCRIPTION</th>
859 <th width="10%">GUARD</th>
860 </tr>
861 <tr>
862 <td>ruleset</td>
863 <td>U8</td>
864 <td> </td>
865 <td>
866
867  
868 </td>
869 <td>
870 <b></b>
871  
872 </td>
873 </tr>
874 <tr>
875 <td>size</td>
876 <td>U8</td>
877 <td> </td>
878 <td>
879
880  
881 </td>
882 <td>
883 <b></b>
884  
885 </td>
886 </tr>
887 <tr>
888 <td>handicap</td>
889 <td>U8</td>
890 <td> </td>
891 <td>
892
893  
894 </td>
895 <td>
896 <b></b>
897  
898 </td>
899 </tr>
900 <tr>
901 <td>komi</td>
902 <td>komi16</td>
903 <td> </td>
904 <td>
905
906  
907 </td>
908 <td>
909 <b></b>
910  
911 </td>
912 </tr>
913 <tr>
914 <td>timesys</td>
915 <td>U8</td>
916 <td> </td>
917 <td>
918
919  
920 </td>
921 <td>
922 <b></b>
923  
924 </td>
925 </tr>
926 <tr>
927 <td>time</td>
928 <td>U32</td>
929 <td> </td>
930 <td>
931
932  
933 </td>
934 <td>
935 <b></b>
936  
937 </td>
938 </tr>
939 <tr>
940 <td>interval</td>
941 <td>U32</td>
942 <td> </td>
943 <td>
944 byo-yomi time / canadian time
945
946  
947 </td>
948 <td>
949 <b></b>
950  
951 </td>
952 </tr>
953 <tr>
954 <td>count</td>
955 <td>U16</td>
956 <td> </td>
957 <td>
958 periods / moves
959
960  
961 </td>
962 <td>
963 <b></b>
964  
965 </td>
966 </tr>
967 </table>
968
969 <h2>Structs used in messages from the client</h2>
970
971 <h2>Client-generated messages</h2>
972
973 <h4>
974 <a name="C0000"></a>ORIGIN: CLIENT;
975 MESSAGE: login</h4>
976 NUMERIC TYPE (hex): 0000<p>
977
978 <p>Sent to login, usually the first message sent. The password needs to be set when the
979 guest flag is true.
980 Possible replies: <a href="#S0001">login(0001)</a>
981 <a href="#S0002">login(0002)</a>
982 <a href="#S0003">login(0003)</a>
983 <a href="#S0004">login(0004)</a>
984 <a href="#S0005">login(0005)</a>
985 <a href="#S0006">login(0006)</a>
986 <a href="#S0018">login(0018)</a>
987 <a href="#S001c">login(001c)</a>
988 <a href="#S0022">login(0022)</a>. Followed by: <a href="#S001b">timewarning_default(001b)</a> <a href="#S0411">chal_defaults(0411)</a>
989 </p>
990 </p>
991 <table border="1" width="100%">
992 <tr>
993 <th width="10%">NAME</th>
994 <th width="8%">TYPE</th>
995 <th width="4%">VALUE</th>
996 <th>DESCRIPTION</th>
997 <th width="10%">GUARD</th>
998 </tr>
999 <tr>
1000 <td>ver_major</td>
1001 <td>U32</td>
1002 <td>2 </td>
1003 <td>
1004
1005  
1006 </td>
1007 <td>
1008 <b></b>
1009  
1010 </td>
1011 </tr>
1012 <tr>
1013 <td>ver_minor</td>
1014 <td>U32</td>
1015 <td>5 </td>
1016 <td>
1017
1018  
1019 </td>
1020 <td>
1021 <b></b>
1022  
1023 </td>
1024 </tr>
1025 <tr>
1026 <td>ver_micro</td>
1027 <td>U32</td>
1028 <td>1 </td>
1029 <td>
1030
1031  
1032 </td>
1033 <td>
1034 <b></b>
1035  
1036 </td>
1037 </tr>
1038 <tr>
1039 <td>name</td>
1040 <td>username</td>
1041 <td> </td>
1042 <td>
1043
1044  
1045 </td>
1046 <td>
1047 <b></b>
1048  
1049 </td>
1050 </tr>
1051 <tr>
1052 <td>password</td>
1053 <td>password</td>
1054 <td>0 </td>
1055 <td>
1056
1057  
1058 </td>
1059 <td>
1060 <b></b>
1061  
1062 </td>
1063 </tr>
1064 <tr>
1065 <td>guest</td>
1066 <td>flag</td>
1067 <td>1 </td>
1068 <td>
1069
1070  
1071 </td>
1072 <td>
1073 <b></b>
1074  
1075 </td>
1076 </tr>
1077 <tr>
1078 <td>_unknown3</td>
1079 <td>U16</td>
1080 <td>0 </td>
1081 <td>
1082
1083  
1084 </td>
1085 <td>
1086 <b></b>
1087  
1088 </td>
1089 </tr>
1090 <tr>
1091 <td>locale</td>
1092 <td>locale</td>
1093 <td>"en_US" </td>
1094 <td>
1095
1096  
1097 </td>
1098 <td>
1099 <b></b>
1100  
1101 </td>
1102 </tr>
1103 <tr>
1104 <td>clientver</td>
1105 <td>DATA</td>
1106 <td>"1.4.1_01:Swing app:Sun Microsystems Inc." </td>
1107 <td>
1108 The "default" is the java vm version, not exactly he client version. However,
1109 you should always send a text like "Jonathan's C client bersion 0.6" or somesuch,
1110 so the server can, if necessary, block broken clients or client versions.
1111
1112  
1113 </td>
1114 <td>
1115 <b></b>
1116  
1117 </td>
1118 </tr>
1119 </table>
1120
1121 <h4>
1122 <a name="C0007"></a>ORIGIN: CLIENT;
1123 MESSAGE: req_userinfo</h4>
1124 NUMERIC TYPE (hex): 0007<p>
1125 <p>Request info about a certain user. Possible reply: <a href="#S0008">userinfo(0008)</a>
1126 </p>
1127 </p>
1128 <table border="1" width="100%">
1129 <tr>
1130 <th width="10%">NAME</th>
1131 <th width="8%">TYPE</th>
1132 <th width="4%">VALUE</th>
1133 <th>DESCRIPTION</th>
1134 <th width="10%">GUARD</th>
1135 </tr>
1136 <tr>
1137 <td>name</td>
1138 <td>username</td>
1139 <td> </td>
1140 <td>
1141
1142  
1143 </td>
1144 <td>
1145 <b></b>
1146  
1147 </td>
1148 </tr>
1149 </table>
1150
1151 <h4>
1152 <a name="C0007"></a>ORIGIN: CLIENT;
1153 MESSAGE: req_userinfo</h4>
1154 NUMERIC TYPE (hex): 0007<p>
1155 <p>Request userinfo(?). unverified...</p>
1156 </p>
1157 <table border="1" width="100%">
1158 <tr>
1159 <th width="10%">NAME</th>
1160 <th width="8%">TYPE</th>
1161 <th width="4%">VALUE</th>
1162 <th>DESCRIPTION</th>
1163 <th width="10%">GUARD</th>
1164 </tr>
1165 <tr>
1166 <td>name</td>
1167 <td>username</td>
1168 <td> </td>
1169 <td>
1170
1171  
1172 </td>
1173 <td>
1174 <b></b>
1175  
1176 </td>
1177 </tr>
1178 </table>
1179
1180 <h4>
1181 <a name="C0007"></a>ORIGIN: CLIENT;
1182 MESSAGE: update_userinfo</h4>
1183 NUMERIC TYPE (hex): 0007<p>
1184 <p>Update user info. Message structure is very similar
1185 to <a href="#S0008">userinfo(0008)</a>.</p>
1186 </p>
1187 <table border="1" width="100%">
1188 <tr>
1189 <th width="10%">NAME</th>
1190 <th width="8%">TYPE</th>
1191 <th width="4%">VALUE</th>
1192 <th>DESCRIPTION</th>
1193 <th width="10%">GUARD</th>
1194 </tr>
1195 <tr>
1196 <td>setpass</td>
1197 <td>flag</td>
1198 <td> </td>
1199 <td>
1200 Should the password be updated?
1201
1202  
1203 </td>
1204 <td>
1205 <b></b>
1206  
1207 </td>
1208 </tr>
1209 <tr>
1210 <td>password</td>
1211 <td>password</td>
1212 <td>0 </td>
1213 <td>
1214
1215  
1216 </td>
1217 <td>
1218 <b></b>
1219  
1220 </td>
1221 </tr>
1222 <tr>
1223 <td>realname</td>
1224 <td>realname</td>
1225 <td> </td>
1226 <td>
1227
1228  
1229 </td>
1230 <td>
1231 <b></b>
1232  
1233 </td>
1234 </tr>
1235 <tr>
1236 <td>email</td>
1237 <td>email</td>
1238 <td> </td>
1239 <td>
1240
1241  
1242 </td>
1243 <td>
1244 <b></b>
1245  
1246 </td>
1247 </tr>
1248 <tr>
1249 <td>info</td>
1250 <td>userinfo</td>
1251 <td> </td>
1252 <td>
1253
1254  
1255 </td>
1256 <td>
1257 <b></b>
1258  
1259 </td>
1260 </tr>
1261 <tr>
1262 <td>homepage</td>
1263 <td>url</td>
1264 <td> </td>
1265 <td>
1266
1267  
1268 </td>
1269 <td>
1270 <b></b>
1271  
1272 </td>
1273 </tr>
1274 <tr>
1275 <td>_unused</td>
1276 <td>U64</td>
1277 <td>0 </td>
1278 <td>
1279
1280  
1281 </td>
1282 <td>
1283 <b></b>
1284  
1285 </td>
1286 </tr>
1287 <tr>
1288 <td>_unused</td>
1289 <td>U64</td>
1290 <td>0 </td>
1291 <td>
1292
1293  
1294 </td>
1295 <td>
1296 <b></b>
1297  
1298 </td>
1299 </tr>
1300 </table>
1301
1302 <h4>
1303 <a name="C0013"></a>ORIGIN: CLIENT;
1304 MESSAGE: msg_chat</h4>
1305 NUMERIC TYPE (hex): 0013<p>
1306 <p>This message is sent to initiate or continue a private chat with
1307 a user. You'll always receive a copy of what you have sent back
1308 from the server (as usual).</p>
1309 </p>
1310 <table border="1" width="100%">
1311 <tr>
1312 <th width="10%">NAME</th>
1313 <th width="8%">TYPE</th>
1314 <th width="4%">VALUE</th>
1315 <th>DESCRIPTION</th>
1316 <th width="10%">GUARD</th>
1317 </tr>
1318 <tr>
1319 <td>name</td>
1320 <td>username</td>
1321 <td> </td>
1322 <td>
1323 Name of sender ("yourself").
1324
1325  
1326 </td>
1327 <td>
1328 <b></b>
1329  
1330 </td>
1331 </tr>
1332 <tr>
1333 <td>name2</td>
1334 <td>username</td>
1335 <td> </td>
1336 <td>
1337 Name of recipient.
1338
1339  
1340 </td>
1341 <td>
1342 <b></b>
1343  
1344 </td>
1345 </tr>
1346 <tr>
1347 <td>message</td>
1348 <td>STRING</td>
1349 <td> </td>
1350 <td>
1351 The message.
1352
1353  
1354 </td>
1355 <td>
1356 <b></b>
1357  
1358 </td>
1359 </tr>
1360 </table>
1361
1362 <h4>
1363 <a name="C0014"></a>ORIGIN: CLIENT;
1364 MESSAGE: req_stats</h4>
1365 NUMERIC TYPE (hex): 0014<p>
1366 <p>Request server statistics. Replied with <a href="#S0015">stats(0015)</a>
1367 </p>
1368 </p>
1369 <table border="1" width="100%">
1370 <tr>
1371 <th width="10%">NAME</th>
1372 <th width="8%">TYPE</th>
1373 <th width="4%">VALUE</th>
1374 <th>DESCRIPTION</th>
1375 <th width="10%">GUARD</th>
1376 </tr>
1377 </table>
1378
1379 <h4>
1380 <a name="C0016"></a>ORIGIN: CLIENT;
1381 MESSAGE: idle_reset</h4>
1382 NUMERIC TYPE (hex): 0016<p>
1383 <p>Send in response to <a href="#S0016">idle_warn(0016)</a> to keep the server from disconnecting.</p>
1384 </p>
1385 <table border="1" width="100%">
1386 <tr>
1387 <th width="10%">NAME</th>
1388 <th width="8%">TYPE</th>
1389 <th width="4%">VALUE</th>
1390 <th>DESCRIPTION</th>
1391 <th width="10%">GUARD</th>
1392 </tr>
1393 </table>
1394
1395 <h4>
1396 <a name="C001d"></a>ORIGIN: CLIENT;
1397 MESSAGE: ping</h4>
1398 NUMERIC TYPE (hex): 001d<p>
1399 <p>Wild guess, I send it in <a href="#S0016">idle_warn(0016)</a>.</p>
1400 </p>
1401 <table border="1" width="100%">
1402 <tr>
1403 <th width="10%">NAME</th>
1404 <th width="8%">TYPE</th>
1405 <th width="4%">VALUE</th>
1406 <th>DESCRIPTION</th>
1407 <th width="10%">GUARD</th>
1408 </tr>
1409 </table>
1410
1411 <h4>
1412 <a name="C001e"></a>ORIGIN: CLIENT;
1413 MESSAGE: req_usergraph</h4>
1414 NUMERIC TYPE (hex): 001e<p>
1415 <p>Request user graph data, replied with <a href="#S001e">usergraph(001e)</a>.</p>
1416 </p>
1417 <table border="1" width="100%">
1418 <tr>
1419 <th width="10%">NAME</th>
1420 <th width="8%">TYPE</th>
1421 <th width="4%">VALUE</th>
1422 <th>DESCRIPTION</th>
1423 <th width="10%">GUARD</th>
1424 </tr>
1425 <tr>
1426 <td>name</td>
1427 <td>username</td>
1428 <td> </td>
1429 <td>
1430
1431  
1432 </td>
1433 <td>
1434 <b></b>
1435  
1436 </td>
1437 </tr>
1438 </table>
1439
1440 <h4>
1441 <a name="C001f"></a>ORIGIN: CLIENT;
1442 MESSAGE: fetch_memos</h4>
1443 NUMERIC TYPE (hex): 001f<p>
1444 <p>Unclear. Fetch all outstanding memos? Replied with <a href="#S001f">memo(001f)</a>
1445 </p>
1446 </p>
1447 <table border="1" width="100%">
1448 <tr>
1449 <th width="10%">NAME</th>
1450 <th width="8%">TYPE</th>
1451 <th width="4%">VALUE</th>
1452 <th>DESCRIPTION</th>
1453 <th width="10%">GUARD</th>
1454 </tr>
1455 </table>
1456
1457 <h4>
1458 <a name="C0021"></a>ORIGIN: CLIENT;
1459 MESSAGE: req_pic</h4>
1460 NUMERIC TYPE (hex): 0021<p>
1461 <p>Request a user picture from the server. Results in a <a href="#S0021">userpic(0021)</a>
1462 or a timeout.</p>
1463 </p>
1464 <table border="1" width="100%">
1465 <tr>
1466 <th width="10%">NAME</th>
1467 <th width="8%">TYPE</th>
1468 <th width="4%">VALUE</th>
1469 <th>DESCRIPTION</th>
1470 <th width="10%">GUARD</th>
1471 </tr>
1472 <tr>
1473 <td>name</td>
1474 <td>username</td>
1475 <td> </td>
1476 <td>
1477
1478  
1479 </td>
1480 <td>
1481 <b></b>
1482  
1483 </td>
1484 </tr>
1485 </table>
1486
1487 <h4>
1488 <a name="C0021"></a>ORIGIN: CLIENT;
1489 MESSAGE: upload_pic</h4>
1490 NUMERIC TYPE (hex): 0021<p>
1491 Same code as pic_req, but with an additional data section that
1492 must contain a JPEG image that is &lt;=7KB. It must have 141×200 pixels.
1493 </p>
1494 <table border="1" width="100%">
1495 <tr>
1496 <th width="10%">NAME</th>
1497 <th width="8%">TYPE</th>
1498 <th width="4%">VALUE</th>
1499 <th>DESCRIPTION</th>
1500 <th width="10%">GUARD</th>
1501 </tr>
1502 <tr>
1503 <td>name</td>
1504 <td>username</td>
1505 <td> </td>
1506 <td>
1507
1508  
1509 </td>
1510 <td>
1511 <b></b>
1512  
1513 </td>
1514 </tr>
1515 <tr>
1516 <td>data</td>
1517 <td>DATA</td>
1518 <td> </td>
1519 <td>
1520
1521  
1522 </td>
1523 <td>
1524 <b></b>
1525  
1526 </td>
1527 </tr>
1528 </table>
1529
1530 <h4>
1531 <a name="C0023"></a>ORIGIN: CLIENT;
1532 MESSAGE: send_memo</h4>
1533 NUMERIC TYPE (hex): 0023<p>
1534 </p>
1535 <table border="1" width="100%">
1536 <tr>
1537 <th width="10%">NAME</th>
1538 <th width="8%">TYPE</th>
1539 <th width="4%">VALUE</th>
1540 <th>DESCRIPTION</th>
1541 <th width="10%">GUARD</th>
1542 </tr>
1543 <tr>
1544 <td>name</td>
1545 <td>username</td>
1546 <td> </td>
1547 <td>
1548
1549  
1550 </td>
1551 <td>
1552 <b></b>
1553  
1554 </td>
1555 </tr>
1556 <tr>
1557 <td>msg</td>
1558 <td>STRING</td>
1559 <td> </td>
1560 <td>
1561
1562  
1563 </td>
1564 <td>
1565 <b></b>
1566  
1567 </td>
1568 </tr>
1569 </table>
1570
1571 <h4>
1572 <a name="C0100"></a>ORIGIN: CLIENT;
1573 MESSAGE: gnotice</h4>
1574 NUMERIC TYPE (hex): 0100<p>
1575 <p>Send a global message. Maybe. Never tried, for obvious reasons :/. Results
1576 in a <a href="#S0100">gnotice(0100)</a> sent to all users.</p>
1577 </p>
1578 <table border="1" width="100%">
1579 <tr>
1580 <th width="10%">NAME</th>
1581 <th width="8%">TYPE</th>
1582 <th width="4%">VALUE</th>
1583 <th>DESCRIPTION</th>
1584 <th width="10%">GUARD</th>
1585 </tr>
1586 <tr>
1587 <td>notice</td>
1588 <td>STRING</td>
1589 <td> </td>
1590 <td>
1591
1592  
1593 </td>
1594 <td>
1595 <b></b>
1596  
1597 </td>
1598 </tr>
1599 </table>
1600
1601 <h4>
1602 <a name="C0200"></a>ORIGIN: CLIENT;
1603 MESSAGE: notify_add</h4>
1604 NUMERIC TYPE (hex): 0200<p>
1605
1606 <p>Probably setting a notifier on a username, to get informed about
1607 changes using messages. sending your own
1608 username gives you a disconnect, so don't do that at home, kids!</p>
1609 </p>
1610 <table border="1" width="100%">
1611 <tr>
1612 <th width="10%">NAME</th>
1613 <th width="8%">TYPE</th>
1614 <th width="4%">VALUE</th>
1615 <th>DESCRIPTION</th>
1616 <th width="10%">GUARD</th>
1617 </tr>
1618 <tr>
1619 <td>name</td>
1620 <td>username</td>
1621 <td> </td>
1622 <td>
1623
1624  
1625 </td>
1626 <td>
1627 <b></b>
1628  
1629 </td>
1630 </tr>
1631 </table>
1632
1633 <h4>
1634 <a name="C0201"></a>ORIGIN: CLIENT;
1635 MESSAGE: notify_del</h4>
1636 NUMERIC TYPE (hex): 0201<p>
1637
1638 <p>Probably remove the notifier again.</p>
1639 </p>
1640 <table border="1" width="100%">
1641 <tr>
1642 <th width="10%">NAME</th>
1643 <th width="8%">TYPE</th>
1644 <th width="4%">VALUE</th>
1645 <th>DESCRIPTION</th>
1646 <th width="10%">GUARD</th>
1647 </tr>
1648 <tr>
1649 <td>name</td>
1650 <td>username</td>
1651 <td> </td>
1652 <td>
1653
1654  
1655 </td>
1656 <td>
1657 <b></b>
1658  
1659 </td>
1660 </tr>
1661 </table>
1662
1663 <h4>
1664 <a name="C0318"></a>ORIGIN: CLIENT;
1665 MESSAGE: list_rooms</h4>
1666 NUMERIC TYPE (hex): 0318<p>
1667 <p>List the rooms in a specific group/category. Results in a <a href="#S0318">upd_rooms(0318)</a> message.</p>
1668 </p>
1669 <table border="1" width="100%">
1670 <tr>
1671 <th width="10%">NAME</th>
1672 <th width="8%">TYPE</th>
1673 <th width="4%">VALUE</th>
1674 <th>DESCRIPTION</th>
1675 <th width="10%">GUARD</th>
1676 </tr>
1677 <tr>
1678 <td>group</td>
1679 <td>U8</td>
1680 <td> </td>
1681 <td>
1682
1683  
1684 </td>
1685 <td>
1686 <b></b>
1687  
1688 </td>
1689 </tr>
1690 </table>
1691
1692 <h4>
1693 <a name="C031a"></a>ORIGIN: CLIENT;
1694 MESSAGE: new_room</h4>
1695 NUMERIC TYPE (hex): 031a<p>
1696 Create a new room. Not verified.
1697 </p>
1698 <table border="1" width="100%">
1699 <tr>
1700 <th width="10%">NAME</th>
1701 <th width="8%">TYPE</th>
1702 <th width="4%">VALUE</th>
1703 <th>DESCRIPTION</th>
1704 <th width="10%">GUARD</th>
1705 </tr>
1706 <tr>
1707 <td>name</td>
1708 <td>username</td>
1709 <td> </td>
1710 <td>
1711
1712  
1713 </td>
1714 <td>
1715 <b></b>
1716  
1717 </td>
1718 </tr>
1719 <tr>
1720 <td>i1</td>
1721 <td>U32</td>
1722 <td>0 </td>
1723 <td>
1724
1725  
1726 </td>
1727 <td>
1728 <b></b>
1729  
1730 </td>
1731 </tr>
1732 <tr>
1733 <td>b1</td>
1734 <td>U8</td>
1735 <td>0 </td>
1736 <td>
1737
1738  
1739 </td>
1740 <td>
1741 <b></b>
1742  
1743 </td>
1744 </tr>
1745 <tr>
1746 <td>b2</td>
1747 <td>U8</td>
1748 <td>255 </td>
1749 <td>
1750
1751  
1752 </td>
1753 <td>
1754 <b></b>
1755  
1756 </td>
1757 </tr>
1758 <tr>
1759 <td>b3</td>
1760 <td>U8</td>
1761 <td>255 </td>
1762 <td>
1763
1764  
1765 </td>
1766 <td>
1767 <b></b>
1768  
1769 </td>
1770 </tr>
1771 <tr>
1772 <td>group</td>
1773 <td>U8</td>
1774 <td>1 </td>
1775 <td>
1776
1777  
1778 </td>
1779 <td>
1780 <b></b>
1781  
1782 </td>
1783 </tr>
1784 <tr>
1785 <td>name</td>
1786 <td>STRING</td>
1787 <td> </td>
1788 <td>
1789
1790  
1791 </td>
1792 <td>
1793 <b></b>
1794  
1795 </td>
1796 </tr>
1797 <tr>
1798 <td>description</td>
1799 <td>STRING</td>
1800 <td> </td>
1801 <td>
1802
1803  
1804 </td>
1805 <td>
1806 <b></b>
1807  
1808 </td>
1809 </tr>
1810 <tr>
1811 <td>flags</td>
1812 <td>U8</td>
1813 <td> </td>
1814 <td>
1815 See ROOMFLAGs
1816
1817  
1818 </td>
1819 <td>
1820 <b></b>
1821  
1822 </td>
1823 </tr>
1824 </table>
1825
1826 <h4>
1827 <a name="C0413"></a>ORIGIN: CLIENT;
1828 MESSAGE: req_game_record</h4>
1829 NUMERIC TYPE (hex): 0413<p>
1830 <p>Requests part of the users game record to be sent. Results in a <a href="#S0414">game_record(0414)</a> or maybe a timeout.</p>
1831 </p>
1832 <table border="1" width="100%">
1833 <tr>
1834 <th width="10%">NAME</th>
1835 <th width="8%">TYPE</th>
1836 <th width="4%">VALUE</th>
1837 <th>DESCRIPTION</th>
1838 <th width="10%">GUARD</th>
1839 </tr>
1840 <tr>
1841 <td>name</td>
1842 <td>username</td>
1843 <td> </td>
1844 <td>
1845
1846  
1847 </td>
1848 <td>
1849 <b></b>
1850  
1851 </td>
1852 </tr>
1853 <tr>
1854 <td>timestamp</td>
1855 <td>timestamp</td>
1856 <td> </td>
1857 <td>
1858 If zero, start at the newest games, else only send games
1859 before the given timestap.
1860
1861  
1862 </td>
1863 <td>
1864 <b></b>
1865  
1866 </td>
1867 </tr>
1868 </table>
1869
1870 <h4>
1871 <a name="C4300"></a>ORIGIN: CLIENT;
1872 MESSAGE: join_room</h4>
1873 NUMERIC TYPE (hex): 4300<p>
1874 <p>Joins the given room. <a href="#S4300">join_room(4300)</a> messages for yourself
1875 and all users in that room, as well as the initial gamelist, are
1876 send if the room exists. If not, timeout...</p>
1877 </p>
1878 <table border="1" width="100%">
1879 <tr>
1880 <th width="10%">NAME</th>
1881 <th width="8%">TYPE</th>
1882 <th width="4%">VALUE</th>
1883 <th>DESCRIPTION</th>
1884 <th width="10%">GUARD</th>
1885 </tr>
1886 <tr>
1887 <td>channel</td>
1888 <td>U16</td>
1889 <td> </td>
1890 <td>
1891
1892  
1893 </td>
1894 <td>
1895 <b></b>
1896  
1897 </td>
1898 </tr>
1899 <tr>
1900 <td>user</td>
1901 <td>user</td>
1902 <td> </td>
1903 <td>
1904
1905  
1906 </td>
1907 <td>
1908 <b></b>
1909  
1910 </td>
1911 </tr>
1912 </table>
1913
1914 <h4>
1915 <a name="C4301"></a>ORIGIN: CLIENT;
1916 MESSAGE: msg_room</h4>
1917 NUMERIC TYPE (hex): 4301<p>
1918 Send a message to the room.
1919 </p>
1920 <table border="1" width="100%">
1921 <tr>
1922 <th width="10%">NAME</th>
1923 <th width="8%">TYPE</th>
1924 <th width="4%">VALUE</th>
1925 <th>DESCRIPTION</th>
1926 <th width="10%">GUARD</th>
1927 </tr>
1928 <tr>
1929 <td>channel</td>
1930 <td>U16</td>
1931 <td> </td>
1932 <td>
1933
1934  
1935 </td>
1936 <td>
1937 <b></b>
1938  
1939 </td>
1940 </tr>
1941 <tr>
1942 <td>name</td>
1943 <td>username</td>
1944 <td> </td>
1945 <td>
1946 Must be the login-name of the user.
1947
1948  
1949 </td>
1950 <td>
1951 <b></b>
1952  
1953 </td>
1954 </tr>
1955 <tr>
1956 <td>message</td>
1957 <td>STRING</td>
1958 <td> </td>
1959 <td>
1960
1961  
1962 </td>
1963 <td>
1964 <b></b>
1965  
1966 </td>
1967 </tr>
1968 </table>
1969
1970 <h4>
1971 <a name="C4302"></a>ORIGIN: CLIENT;
1972 MESSAGE: part_room</h4>
1973 NUMERIC TYPE (hex): 4302<p>
1974 Remove yourself (or maybe others as admin) from a room.
1975 </p>
1976 <table border="1" width="100%">
1977 <tr>
1978 <th width="10%">NAME</th>
1979 <th width="8%">TYPE</th>
1980 <th width="4%">VALUE</th>
1981 <th>DESCRIPTION</th>
1982 <th width="10%">GUARD</th>
1983 </tr>
1984 <tr>
1985 <td>channel</td>
1986 <td>U16</td>
1987 <td> </td>
1988 <td>
1989
1990  
1991 </td>
1992 <td>
1993 <b></b>
1994  
1995 </td>
1996 </tr>
1997 <tr>
1998 <td>name</td>
1999 <td>username</td>
2000 <td> </td>
2001 <td>
2002
2003  
2004 </td>
2005 <td>
2006 <b></b>
2007  
2008 </td>
2009 </tr>
2010 </table>
2011
2012 <h4>
2013 <a name="C4305"></a>ORIGIN: CLIENT;
2014 MESSAGE: new_game</h4>
2015 NUMERIC TYPE (hex): 4305<p>
2016 Unclear. Start a new game.
2017 </p>
2018 <table border="1" width="100%">
2019 <tr>
2020 <th width="10%">NAME</th>
2021 <th width="8%">TYPE</th>
2022 <th width="4%">VALUE</th>
2023 <th>DESCRIPTION</th>
2024 <th width="10%">GUARD</th>
2025 </tr>
2026 <tr>
2027 <td>channel</td>
2028 <td>U16</td>
2029 <td> </td>
2030 <td>
2031
2032  
2033 </td>
2034 <td>
2035 <b></b>
2036  
2037 </td>
2038 </tr>
2039 <tr>
2040 <td>id</td>
2041 <td>U16</td>
2042 <td> </td>
2043 <td>
2044
2045  
2046 </td>
2047 <td>
2048 <b></b>
2049  
2050 </td>
2051 </tr>
2052 <tr>
2053 <td>gametype</td>
2054 <td>U32</td>
2055 <td> </td>
2056 <td>
2057
2058  
2059 </td>
2060 <td>
2061 <b></b>
2062  
2063 </td>
2064 </tr>
2065 <tr>
2066 <td>rules</td>
2067 <td>rules</td>
2068 <td> </td>
2069 <td>
2070
2071  
2072 </td>
2073 <td>
2074 <b></b>
2075  
2076 </td>
2077 </tr>
2078 <tr>
2079 <td>notes</td>
2080 <td>STRING</td>
2081 <td> </td>
2082 <td>
2083
2084  
2085 </td>
2086 <td>
2087 <b></b>
2088  
2089 </td>
2090 </tr>
2091 </table>
2092
2093 <h4>
2094 <a name="C430a"></a>ORIGIN: CLIENT;
2095 MESSAGE: load_game</h4>
2096 NUMERIC TYPE (hex): 430a<p>
2097 Load an existing game into a room(?)
2098 There is no indication that a new game is there except
2099 for a upd_observers message with your name in it. Which means
2100 you have to watch upd_observers messages that are not for any
2101 currently open game and open one. Ugh.
2102 </p>
2103 <table border="1" width="100%">
2104 <tr>
2105 <th width="10%">NAME</th>
2106 <th width="8%">TYPE</th>
2107 <th width="4%">VALUE</th>
2108 <th>DESCRIPTION</th>
2109 <th width="10%">GUARD</th>
2110 </tr>
2111 <tr>
2112 <td>channel</td>
2113 <td>U16</td>
2114 <td> </td>
2115 <td>
2116 The room to load the game into.
2117
2118  
2119 </td>
2120 <td>
2121 <b></b>
2122  
2123 </td>
2124 </tr>
2125 <tr>
2126 <td>timestamp</td>
2127 <td>timestamp</td>
2128 <td> </td>
2129 <td>
2130 From the game record.
2131
2132  
2133 </td>
2134 <td>
2135 <b></b>
2136  
2137 </td>
2138 </tr>
2139 <tr>
2140 <td>user</td>
2141 <td>username</td>
2142 <td> </td>
2143 <td>
2144
2145  
2146 </td>
2147 <td>
2148 <b></b>
2149  
2150 </td>
2151 </tr>
2152 <tr>
2153 <td>flags</td>
2154 <td>U8</td>
2155 <td> </td>
2156 <td>
2157 0 == public, 2 == private
2158
2159  
2160 </td>
2161 <td>
2162 <b></b>
2163  
2164 </td>
2165 </tr>
2166 </table>
2167
2168 <h4>
2169 <a name="C430b"></a>ORIGIN: CLIENT;
2170 MESSAGE: req_games</h4>
2171 NUMERIC TYPE (hex): 430b<p>
2172 Request to update room game list (send this once per minute to get
2173 updated). Results in upd_games messages.
2174 </p>
2175 <table border="1" width="100%">
2176 <tr>
2177 <th width="10%">NAME</th>
2178 <th width="8%">TYPE</th>
2179 <th width="4%">VALUE</th>
2180 <th>DESCRIPTION</th>
2181 <th width="10%">GUARD</th>
2182 </tr>
2183 <tr>
2184 <td>channel</td>
2185 <td>U16</td>
2186 <td> </td>
2187 <td>
2188
2189  
2190 </td>
2191 <td>
2192 <b></b>
2193  
2194 </td>
2195 </tr>
2196 </table>
2197
2198 <h4>
2199 <a name="C4319"></a>ORIGIN: CLIENT;
2200 MESSAGE: req_desc</h4>
2201 NUMERIC TYPE (hex): 4319<p>
2202 Request room description.
2203 </p>
2204 <table border="1" width="100%">
2205 <tr>
2206 <th width="10%">NAME</th>
2207 <th width="8%">TYPE</th>
2208 <th width="4%">VALUE</th>
2209 <th>DESCRIPTION</th>
2210 <th width="10%">GUARD</th>
2211 </tr>
2212 <tr>
2213 <td>channel</td>
2214 <td>U16</td>
2215 <td> </td>
2216 <td>
2217
2218  
2219 </td>
2220 <td>
2221 <b></b>
2222  
2223 </td>
2224 </tr>
2225 </table>
2226
2227 <h4>
2228 <a name="C4400"></a>ORIGIN: CLIENT;
2229 MESSAGE: send_challenge</h4>
2230 NUMERIC TYPE (hex): 4400<p>
2231 Unclear.
2232 </p>
2233 <table border="1" width="100%">
2234 <tr>
2235 <th width="10%">NAME</th>
2236 <th width="8%">TYPE</th>
2237 <th width="4%">VALUE</th>
2238 <th>DESCRIPTION</th>
2239 <th width="10%">GUARD</th>
2240 </tr>
2241 <tr>
2242 <td>channel</td>
2243 <td>U16</td>
2244 <td> </td>
2245 <td>
2246
2247  
2248 </td>
2249 <td>
2250 <b></b>
2251  
2252 </td>
2253 </tr>
2254 <tr>
2255 <td>black</td>
2256 <td>username</td>
2257 <td> </td>
2258 <td>
2259
2260  
2261 </td>
2262 <td>
2263 <b></b>
2264  
2265 </td>
2266 </tr>
2267 <tr>
2268 <td>white</td>
2269 <td>username</td>
2270 <td> </td>
2271 <td>
2272 More following... TREE or challenge.
2273
2274  
2275 </td>
2276 <td>
2277 <b></b>
2278  
2279 </td>
2280 </tr>
2281 </table>
2282
2283 <h4>
2284 <a name="C4403"></a>ORIGIN: CLIENT;
2285 MESSAGE: join_game</h4>
2286 NUMERIC TYPE (hex): 4403<p>
2287 Join a game. See join_room.
2288 </p>
2289 <table border="1" width="100%">
2290 <tr>
2291 <th width="10%">NAME</th>
2292 <th width="8%">TYPE</th>
2293 <th width="4%">VALUE</th>
2294 <th>DESCRIPTION</th>
2295 <th width="10%">GUARD</th>
2296 </tr>
2297 <tr>
2298 <td>channel</td>
2299 <td>U16</td>
2300 <td> </td>
2301 <td>
2302
2303  
2304 </td>
2305 <td>
2306 <b></b>
2307  
2308 </td>
2309 </tr>
2310 <tr>
2311 <td>user</td>
2312 <td>user</td>
2313 <td> </td>
2314 <td>
2315
2316  
2317 </td>
2318 <td>
2319 <b></b>
2320  
2321 </td>
2322 </tr>
2323 </table>
2324
2325 <h4>
2326 <a name="C4404"></a>ORIGIN: CLIENT;
2327 MESSAGE: part_game</h4>
2328 NUMERIC TYPE (hex): 4404<p>
2329 Leave (or kick as admin?) a certain user from a game.
2330 </p>
2331 <table border="1" width="100%">
2332 <tr>
2333 <th width="10%">NAME</th>
2334 <th width="8%">TYPE</th>
2335 <th width="4%">VALUE</th>
2336 <th>DESCRIPTION</th>
2337 <th width="10%">GUARD</th>
2338 </tr>
2339 <tr>
2340 <td>channel</td>
2341 <td>U16</td>
2342 <td> </td>
2343 <td>
2344
2345  
2346 </td>
2347 <td>
2348 <b></b>
2349  
2350 </td>
2351 </tr>
2352 <tr>
2353 <td>name</td>
2354 <td>username</td>
2355 <td> </td>
2356 <td>
2357
2358  
2359 </td>
2360 <td>
2361 <b></b>
2362  
2363 </td>
2364 </tr>
2365 </table>
2366
2367 <h4>
2368 <a name="C4405"></a>ORIGIN: CLIENT;
2369 MESSAGE: set_tree</h4>
2370 NUMERIC TYPE (hex): 4405<p>
2371 Possibly upload an initial game to an empty room. Not tested.
2372
2373 </p>
2374 <table border="1" width="100%">
2375 <tr>
2376 <th width="10%">NAME</th>
2377 <th width="8%">TYPE</th>
2378 <th width="4%">VALUE</th>
2379 <th>DESCRIPTION</th>
2380 <th width="10%">GUARD</th>
2381 </tr>
2382 <tr>
2383 <td>channel</td>
2384 <td>U16</td>
2385 <td> </td>
2386 <td>
2387
2388  
2389 </td>
2390 <td>
2391 <b></b>
2392  
2393 </td>
2394 </tr>
2395 <tr>
2396 <td>tree</td>
2397 <td>TREE</td>
2398 <td> </td>
2399 <td>
2400
2401  
2402 </td>
2403 <td>
2404 <b></b>
2405  
2406 </td>
2407 </tr>
2408 </table>
2409
2410 <h4>
2411 <a name="C4406"></a>ORIGIN: CLIENT;
2412 MESSAGE: upd_tree</h4>
2413 NUMERIC TYPE (hex): 4406<p>
2414 Upload a partial game tree to the server. This is used to send moves
2415 and even in-game comments to the server. For the comments, the
2416 server prepends the username and rank.
2417
2418 </p>
2419 <table border="1" width="100%">
2420 <tr>
2421 <th width="10%">NAME</th>
2422 <th width="8%">TYPE</th>
2423 <th width="4%">VALUE</th>
2424 <th>DESCRIPTION</th>
2425 <th width="10%">GUARD</th>
2426 </tr>
2427 <tr>
2428 <td>channel</td>
2429 <td>U16</td>
2430 <td> </td>
2431 <td>
2432
2433  
2434 </td>
2435 <td>
2436 <b></b>
2437  
2438 </td>
2439 </tr>
2440 <tr>
2441 <td>tree</td>
2442 <td>TREE</td>
2443 <td> </td>
2444 <td>
2445
2446  
2447 </td>
2448 <td>
2449 <b></b>
2450  
2451 </td>
2452 </tr>
2453 </table>
2454
2455 <h4>
2456 <a name="C4408"></a>ORIGIN: CLIENT;
2457 MESSAGE: get_tree</h4>
2458 NUMERIC TYPE (hex): 4408<p>
2459 Request the game tree starting at a given node. This is used
2460 when the server only sends a partial tree (with end code "more").
2461 </p>
2462 <table border="1" width="100%">
2463 <tr>
2464 <th width="10%">NAME</th>
2465 <th width="8%">TYPE</th>
2466 <th width="4%">VALUE</th>
2467 <th>DESCRIPTION</th>
2468 <th width="10%">GUARD</th>
2469 </tr>
2470 <tr>
2471 <td>channel</td>
2472 <td>U16</td>
2473 <td> </td>
2474 <td>
2475
2476  
2477 </td>
2478 <td>
2479 <b></b>
2480  
2481 </td>
2482 </tr>
2483 <tr>
2484 <td>node</td>
2485 <td>U32</td>
2486 <td> </td>
2487 <td>
2488
2489  
2490 </td>
2491 <td>
2492 <b></b>
2493  
2494 </td>
2495 </tr>
2496 </table>
2497
2498 <h4>
2499 <a name="C440c"></a>ORIGIN: CLIENT;
2500 MESSAGE: claim_win</h4>
2501 NUMERIC TYPE (hex): 440c<p>
2502 Unclear.
2503 </p>
2504 <table border="1" width="100%">
2505 <tr>
2506 <th width="10%">NAME</th>
2507 <th width="8%">TYPE</th>
2508 <th width="4%">VALUE</th>
2509 <th>DESCRIPTION</th>
2510 <th width="10%">GUARD</th>
2511 </tr>
2512 <tr>
2513 <td>channel</td>
2514 <td>U16</td>
2515 <td> </td>
2516 <td>
2517
2518  
2519 </td>
2520 <td>
2521 <b></b>
2522  
2523 </td>
2524 </tr>
2525 <tr>
2526 <td>_byte</td>
2527 <td>U8 </td>
2528 <td> </td>
2529 <td>
2530 Player colour maybe? Unclear.
2531
2532  
2533 </td>
2534 <td>
2535 <b></b>
2536  
2537 </td>
2538 </tr>
2539 </table>
2540
2541 <h4>
2542 <a name="C440d"></a>ORIGIN: CLIENT;
2543 MESSAGE: add_time</h4>
2544 NUMERIC TYPE (hex): 440d<p>
2545 Not checked.
2546
2547 </p>
2548 <table border="1" width="100%">
2549 <tr>
2550 <th width="10%">NAME</th>
2551 <th width="8%">TYPE</th>
2552 <th width="4%">VALUE</th>
2553 <th>DESCRIPTION</th>
2554 <th width="10%">GUARD</th>
2555 </tr>
2556 <tr>
2557 <td>channel</td>
2558 <td>U16</td>
2559 <td> </td>
2560 <td>
2561
2562  
2563 </td>
2564 <td>
2565 <b></b>
2566  
2567 </td>
2568 </tr>
2569 <tr>
2570 <td>time</td>
2571 <td>U32</td>
2572 <td> </td>
2573 <td>
2574
2575  
2576 </td>
2577 <td>
2578 <b></b>
2579  
2580 </td>
2581 </tr>
2582 <tr>
2583 <td>player</td>
2584 <td>U8</td>
2585 <td> </td>
2586 <td>
2587
2588  
2589 </td>
2590 <td>
2591 <b></b>
2592  
2593 </td>
2594 </tr>
2595 </table>
2596
2597 <h4>
2598 <a name="C440f"></a>ORIGIN: CLIENT;
2599 MESSAGE: grant_undo</h4>
2600 NUMERIC TYPE (hex): 440f<p>
2601 Can be send after a req_undo message was received to grant the undo.
2602 </p>
2603 <table border="1" width="100%">
2604 <tr>
2605 <th width="10%">NAME</th>
2606 <th width="8%">TYPE</th>
2607 <th width="4%">VALUE</th>
2608 <th>DESCRIPTION</th>
2609 <th width="10%">GUARD</th>
2610 </tr>
2611 <tr>
2612 <td>channel</td>
2613 <td>U16</td>
2614 <td> </td>
2615 <td>
2616
2617  
2618 </td>
2619 <td>
2620 <b></b>
2621  
2622 </td>
2623 </tr>
2624 </table>
2625
2626 <h4>
2627 <a name="C4410"></a>ORIGIN: CLIENT;
2628 MESSAGE: resign_game</h4>
2629 NUMERIC TYPE (hex): 4410<p>
2630 Resign the game.
2631 </p>
2632 <table border="1" width="100%">
2633 <tr>
2634 <th width="10%">NAME</th>
2635 <th width="8%">TYPE</th>
2636 <th width="4%">VALUE</th>
2637 <th>DESCRIPTION</th>
2638 <th width="10%">GUARD</th>
2639 </tr>
2640 <tr>
2641 <td>channel</td>
2642 <td>U16</td>
2643 <td> </td>
2644 <td>
2645
2646  
2647 </td>
2648 <td>
2649 <b></b>
2650  
2651 </td>
2652 </tr>
2653 <tr>
2654 <td>player</td>
2655 <td>U8</td>
2656 <td> </td>
2657 <td>
2658
2659  
2660 </td>
2661 <td>
2662 <b></b>
2663  
2664 </td>
2665 </tr>
2666 </table>
2667
2668 <h4>
2669 <a name="C441a"></a>ORIGIN: CLIENT;
2670 MESSAGE: set_teacher</h4>
2671 NUMERIC TYPE (hex): 441a<p>
2672 Change the teacher to somebody else (or possibly yourself == take it).
2673 </p>
2674 <table border="1" width="100%">
2675 <tr>
2676 <th width="10%">NAME</th>
2677 <th width="8%">TYPE</th>
2678 <th width="4%">VALUE</th>
2679 <th>DESCRIPTION</th>
2680 <th width="10%">GUARD</th>
2681 </tr>
2682 <tr>
2683 <td>channel</td>
2684 <td>U16</td>
2685 <td> </td>
2686 <td>
2687
2688  
2689 </td>
2690 <td>
2691 <b></b>
2692  
2693 </td>
2694 </tr>
2695 <tr>
2696 <td>name</td>
2697 <td>username</td>
2698 <td> </td>
2699 <td>
2700
2701  
2702 </td>
2703 <td>
2704 <b></b>
2705  
2706 </td>
2707 </tr>
2708 </table>
2709
2710 <h4>
2711 <a name="C4422"></a>ORIGIN: CLIENT;
2712 MESSAGE: allow_user</h4>
2713 NUMERIC TYPE (hex): 4422<p>
2714 Unclear. Maybe allow users to talk? No idea, really.
2715
2716 </p>
2717 <table border="1" width="100%">
2718 <tr>
2719 <th width="10%">NAME</th>
2720 <th width="8%">TYPE</th>
2721 <th width="4%">VALUE</th>
2722 <th>DESCRIPTION</th>
2723 <th width="10%">GUARD</th>
2724 </tr>
2725 <tr>
2726 <td>channel</td>
2727 <td>U16</td>
2728 <td> </td>
2729 <td>
2730
2731  
2732 </td>
2733 <td>
2734 <b></b>
2735  
2736 </td>
2737 </tr>
2738 <tr>
2739 <td>othername</td>
2740 <td>username</td>
2741 <td> </td>
2742 <td>
2743
2744  
2745 </td>
2746 <td>
2747 <b></b>
2748  
2749 </td>
2750 </tr>
2751 <tr>
2752 <td>name</td>
2753 <td>username</td>
2754 <td> </td>
2755 <td>; # gives user access to the game (to what? ;)
2756
2757  
2758 </td>
2759 <td>
2760 <b></b>
2761  
2762 </td>
2763 </tr>
2764 </table>
2765
2766 <h4>
2767 <a name="C4423"></a>ORIGIN: CLIENT;
2768 MESSAGE: set_privacy</h4>
2769 NUMERIC TYPE (hex): 4423<p>
2770 Probably sets the "quiet" flag. Not checked.
2771 </p>
2772 <table border="1" width="100%">
2773 <tr>
2774 <th width="10%">NAME</th>
2775 <th width="8%">TYPE</th>
2776 <th width="4%">VALUE</th>
2777 <th>DESCRIPTION</th>
2778 <th width="10%">GUARD</th>
2779 </tr>
2780 <tr>
2781 <td>channel</td>
2782 <td>U16</td>
2783 <td> </td>
2784 <td>
2785
2786  
2787 </td>
2788 <td>
2789 <b></b>
2790  
2791 </td>
2792 </tr>
2793 <tr>
2794 <td>private</td>
2795 <td>U8</td>
2796 <td> </td>
2797 <td>
2798
2799  
2800 </td>
2801 <td>
2802 <b></b>
2803  
2804 </td>
2805 </tr>
2806 </table>
2807
2808 <h4>
2809 <a name="C4429"></a>ORIGIN: CLIENT;
2810 MESSAGE: reject_challenge</h4>
2811 NUMERIC TYPE (hex): 4429<p>
2812 Reject a challenge from a given user. Not checked.
2813
2814 </p>
2815 <table border="1" width="100%">
2816 <tr>
2817 <th width="10%">NAME</th>
2818 <th width="8%">TYPE</th>
2819 <th width="4%">VALUE</th>
2820 <th>DESCRIPTION</th>
2821 <th width="10%">GUARD</th>
2822 </tr>
2823 <tr>
2824 <td>channel</td>
2825 <td>U16</td>
2826 <td> </td>
2827 <td>
2828
2829  
2830 </td>
2831 <td>
2832 <b></b>
2833  
2834 </td>
2835 </tr>
2836 <tr>
2837 <td>name</td>
2838 <td>username</td>
2839 <td> </td>
2840 <td>
2841
2842  
2843 </td>
2844 <td>
2845 <b></b>
2846  
2847 </td>
2848 </tr>
2849 </table>
2850
2851 <h4>
2852 <a name="C4433"></a>ORIGIN: CLIENT;
2853 MESSAGE: req_result</h4>
2854 NUMERIC TYPE (hex): 4433<p>
2855 I forgot.
2856
2857 </p>
2858 <table border="1" width="100%">
2859 <tr>
2860 <th width="10%">NAME</th>
2861 <th width="8%">TYPE</th>
2862 <th width="4%">VALUE</th>
2863 <th>DESCRIPTION</th>
2864 <th width="10%">GUARD</th>
2865 </tr>
2866 <tr>
2867 <td>channel</td>
2868 <td>U16</td>
2869 <td> </td>
2870 <td>
2871
2872  
2873 </td>
2874 <td>
2875 <b></b>
2876  
2877 </td>
2878 </tr>
2879 </table>
2880
2881 <h4>
2882 <a name="C4436"></a>ORIGIN: CLIENT;
2883 MESSAGE: msg_game</h4>
2884 NUMERIC TYPE (hex): 4436<p>
2885 </p>
2886 <table border="1" width="100%">
2887 <tr>
2888 <th width="10%">NAME</th>
2889 <th width="8%">TYPE</th>
2890 <th width="4%">VALUE</th>
2891 <th>DESCRIPTION</th>
2892 <th width="10%">GUARD</th>
2893 </tr>
2894 <tr>
2895 <td>channel</td>
2896 <td>U16</td>
2897 <td> </td>
2898 <td>
2899
2900  
2901 </td>
2902 <td>
2903 <b></b>
2904  
2905 </td>
2906 </tr>
2907 <tr>
2908 <td>message</td>
2909 <td>STRING</td>
2910 <td> </td>
2911 <td>
2912
2913  
2914 </td>
2915 <td>
2916 <b></b>
2917  
2918 </td>
2919 </tr>
2920 </table>
2921
2922 <h4>
2923 <a name="Cffff"></a>ORIGIN: CLIENT;
2924 MESSAGE: quit</h4>
2925 NUMERIC TYPE (hex): ffff<p>
2926 <p>Sent by the client just before it logs out.</p>
2927 </p>
2928 <table border="1" width="100%">
2929 <tr>
2930 <th width="10%">NAME</th>
2931 <th width="8%">TYPE</th>
2932 <th width="4%">VALUE</th>
2933 <th>DESCRIPTION</th>
2934 <th width="10%">GUARD</th>
2935 </tr>
2936 </table>
2937
2938 <h2>Structs mainly used in messages send by the server</h2>
2939
2940 <h4>STRUCTURE challenge_defaults</h4>
2941 <p>
2942 Send soon after log-in to set the defaults for game challenges.
2943 </p>
2944 <table border="1" width="100%">
2945 <tr>
2946 <th width="10%">NAME</th>
2947 <th width="8%">TYPE</th>
2948 <th width="4%">VALUE</th>
2949 <th>DESCRIPTION</th>
2950 <th width="10%">GUARD</th>
2951 </tr>
2952 <tr>
2953 <td>gametype</td>
2954 <td>U32</td>
2955 <td> </td>
2956 <td>
2957
2958  
2959 </td>
2960 <td>
2961 <b></b>
2962  
2963 </td>
2964 </tr>
2965 <tr>
2966 <td>size</td>
2967 <td>U32</td>
2968 <td> </td>
2969 <td>
2970
2971  
2972 </td>
2973 <td>
2974 <b></b>
2975  
2976 </td>
2977 </tr>
2978 <tr>
2979 <td>timesys</td>
2980 <td>U32</td>
2981 <td> </td>
2982 <td>
2983
2984  
2985 </td>
2986 <td>
2987 <b></b>
2988  
2989 </td>
2990 </tr>
2991 <tr>
2992 <td>time</td>
2993 <td>U32</td>
2994 <td> </td>
2995 <td>
2996
2997  
2998 </td>
2999 <td>
3000 <b></b>
3001  
3002 </td>
3003 </tr>
3004 <tr>
3005 <td>byo_time</td>
3006 <td>U32</td>
3007 <td> </td>
3008 <td>
3009
3010  
3011 </td>
3012 <td>
3013 <b></b>
3014  
3015 </td>
3016 </tr>
3017 <tr>
3018 <td>byo_periods</td>
3019 <td>U32</td>
3020 <td> </td>
3021 <td>
3022
3023  
3024 </td>
3025 <td>
3026 <b></b>
3027  
3028 </td>
3029 </tr>
3030 <tr>
3031 <td>can_time</td>
3032 <td>U32</td>
3033 <td> </td>
3034 <td>
3035
3036  
3037 </td>
3038 <td>
3039 <b></b>
3040  
3041 </td>
3042 </tr>
3043 <tr>
3044 <td>can_stones</td>
3045 <td>U32</td>
3046 <td> </td>
3047 <td>
3048
3049  
3050 </td>
3051 <td>
3052 <b></b>
3053  
3054 </td>
3055 </tr>
3056 </table>
3057
3058 <h4>STRUCTURE challenge</h4>
3059 CLASS: KGS::Challenge<br />
3060 <p>
3061 A challenge.
3062
3063 </p>
3064 <table border="1" width="100%">
3065 <tr>
3066 <th width="10%">NAME</th>
3067 <th width="8%">TYPE</th>
3068 <th width="4%">VALUE</th>
3069 <th>DESCRIPTION</th>
3070 <th width="10%">GUARD</th>
3071 </tr>
3072 <tr>
3073 <td>user1</td>
3074 <td>user</td>
3075 <td> </td>
3076 <td>
3077
3078  
3079 </td>
3080 <td>
3081 <b></b>
3082  
3083 </td>
3084 </tr>
3085 <tr>
3086 <td>user2</td>
3087 <td>user</td>
3088 <td> </td>
3089 <td>
3090
3091  
3092 </td>
3093 <td>
3094 <b></b>
3095  
3096 </td>
3097 </tr>
3098 <tr>
3099 <td>gametype</td>
3100 <td>U32</td>
3101 <td> </td>
3102 <td>
3103
3104  
3105 </td>
3106 <td>
3107 <b></b>
3108  
3109 </td>
3110 </tr>
3111 <tr>
3112 <td>rules</td>
3113 <td>rules</td>
3114 <td> </td>
3115 <td>
3116 Maybe the rules" are in TREE format. I forgot.
3117
3118  
3119 </td>
3120 <td>
3121 <b></b>
3122  
3123 </td>
3124 </tr>
3125 </table>
3126
3127 <h4>STRUCTURE game</h4>
3128 CLASS: KGS::Game<br />
3129 <p>
3130 Basic information about a game. Used in rooms for the gamelist and
3131 in games to detect when a game is saved, changed type (e.g. R =&gt; D)
3132 etc.
3133
3134 </p>
3135 <table border="1" width="100%">
3136 <tr>
3137 <th width="10%">NAME</th>
3138 <th width="8%">TYPE</th>
3139 <th width="4%">VALUE</th>
3140 <th>DESCRIPTION</th>
3141 <th width="10%">GUARD</th>
3142 </tr>
3143 <tr>
3144 <td>channel</td>
3145 <td>U16</td>
3146 <td> </td>
3147 <td>
3148
3149  
3150 </td>
3151 <td>
3152 <b></b>
3153  
3154 </td>
3155 </tr>
3156 <tr>
3157 <td>type</td>
3158 <td>U8</td>
3159 <td> </td>
3160 <td>
3161
3162  
3163 </td>
3164 <td>
3165 <b></b>
3166  
3167 </td>
3168 </tr>
3169 <tr>
3170 <td>user1</td>
3171 <td>user</td>
3172 <td> </td>
3173 <td>
3174 White
3175
3176  
3177 </td>
3178 <td>
3179 <b></b>
3180  
3181 </td>
3182 </tr>
3183 <tr>
3184 <td>user2</td>
3185 <td>user</td>
3186 <td> </td>
3187 <td>
3188 Black
3189
3190  
3191 </td>
3192 <td>
3193 <b></b>
3194  
3195 </td>
3196 </tr>
3197 <tr>
3198 <td>user3</td>
3199 <td>user</td>
3200 <td> </td>
3201 <td>
3202 Owner
3203
3204  
3205 </td>
3206 <td>
3207 <b></b>
3208  
3209 </td>
3210 </tr>
3211 <tr>
3212 <td>size</td>
3213 <td>U8</td>
3214 <td> </td>
3215 <td>
3216
3217  
3218 </td>
3219 <td>
3220 <b></b>
3221  
3222 </td>
3223 </tr>
3224 <tr>
3225 <td>handicap</td>
3226 <td>I8</td>
3227 <td> </td>
3228 <td>
3229 &lt; 0 not fully setup
3230
3231  
3232 </td>
3233 <td>
3234 <b></b>
3235  
3236 </td>
3237 </tr>
3238 <tr>
3239 <td>komi</td>
3240 <td>komi16</td>
3241 <td> </td>
3242 <td>
3243
3244  
3245 </td>
3246 <td>
3247 <b></b>
3248  
3249 </td>
3250 </tr>
3251 <tr>
3252 <td>moves</td>
3253 <td>I16</td>
3254 <td> </td>
3255 <td>
3256 This field reflects either the movenum or the score, sorry, not even guards help, as
3257 the flags to determine that are _after_ the field. Arg. Divide by two to get the actual
3258 score (NOT score16!) (arg²).
3259
3260  
3261 </td>
3262 <td>
3263 <b></b>
3264  
3265 </td>
3266 </tr>
3267 <tr>
3268 <td>flags</td>
3269 <td>U16</td>
3270 <td> </td>
3271 <td>
3272
3273  
3274 </td>
3275 <td>
3276 <b></b>
3277  
3278 </td>
3279 </tr>
3280 <tr>
3281 <td>observers</td>
3282 <td>U32</td>
3283 <td> </td>
3284 <td>
3285
3286  
3287 </td>
3288 <td>
3289 <b></b>
3290  
3291 </td>
3292 </tr>
3293 <tr>
3294 <td>saved</td>
3295 <td>flag</td>
3296 <td> </td>
3297 <td>
3298
3299  
3300 </td>
3301 <td>
3302 <b></b>
3303  
3304 </td>
3305 </tr>
3306 <tr>
3307 <td>notes</td>
3308 <td>STRING</td>
3309 <td> </td>
3310 <td>
3311
3312  
3313 </td>
3314 <td>
3315 <b>handicap</b> &lt; 0
3316  
3317 </td>
3318 </tr>
3319 </table>
3320
3321 <h4>STRUCTURE room_obs</h4>
3322 <p>
3323 Obsolete.
3324
3325 </p>
3326 <table border="1" width="100%">
3327 <tr>
3328 <th width="10%">NAME</th>
3329 <th width="8%">TYPE</th>
3330 <th width="4%">VALUE</th>
3331 <th>DESCRIPTION</th>
3332 <th width="10%">GUARD</th>
3333 </tr>
3334 <tr>
3335 <td>name</td>
3336 <td>roomname</td>
3337 <td> </td>
3338 <td>
3339
3340  
3341 </td>
3342 <td>
3343 <b></b>
3344  
3345 </td>
3346 </tr>
3347 <tr>
3348 <td>channel</td>
3349 <td>U16</td>
3350 <td> </td>
3351 <td>
3352
3353  
3354 </td>
3355 <td>
3356 <b></b>
3357  
3358 </td>
3359 </tr>
3360 <tr>
3361 <td>flags</td>
3362 <td>U32</td>
3363 <td> </td>
3364 <td>
3365
3366  
3367 </td>
3368 <td>
3369 <b></b>
3370  
3371 </td>
3372 </tr>
3373 <tr>
3374 <td>users</td>
3375 <td>U32</td>
3376 <td> </td>
3377 <td>
3378
3379  
3380 </td>
3381 <td>
3382 <b></b>
3383  
3384 </td>
3385 </tr>
3386 </table>
3387
3388 <h4>STRUCTURE room</h4>
3389 CLASS: KGS::Room<br />
3390 <p>
3391 </p>
3392 <table border="1" width="100%">
3393 <tr>
3394 <th width="10%">NAME</th>
3395 <th width="8%">TYPE</th>
3396 <th width="4%">VALUE</th>
3397 <th>DESCRIPTION</th>
3398 <th width="10%">GUARD</th>
3399 </tr>
3400 <tr>
3401 <td>channel</td>
3402 <td>U16</td>
3403 <td> </td>
3404 <td>
3405
3406  
3407 </td>
3408 <td>
3409 <b></b>
3410  
3411 </td>
3412 </tr>
3413 <tr>
3414 <td>flags</td>
3415 <td>U8</td>
3416 <td> </td>
3417 <td>
3418
3419  
3420 </td>
3421 <td>
3422 <b></b>
3423  
3424 </td>
3425 </tr>
3426 <tr>
3427 <td>group</td>
3428 <td>U8</td>
3429 <td> </td>
3430 <td>
3431
3432  
3433 </td>
3434 <td>
3435 <b></b>
3436  
3437 </td>
3438 </tr>
3439 <tr>
3440 <td>users</td>
3441 <td>U16</td>
3442 <td> </td>
3443 <td>
3444
3445  
3446 </td>
3447 <td>
3448 <b></b>
3449  
3450 </td>
3451 </tr>
3452 <tr>
3453 <td>games</td>
3454 <td>U16</td>
3455 <td> </td>
3456 <td>
3457
3458  
3459 </td>
3460 <td>
3461 <b></b>
3462  
3463 </td>
3464 </tr>
3465 <tr>
3466 <td>name</td>
3467 <td>STRING</td>
3468 <td> </td>
3469 <td>
3470
3471  
3472 </td>
3473 <td>
3474 <b></b>
3475  
3476 </td>
3477 </tr>
3478 </table>
3479
3480 <h4>STRUCTURE scorevalues</h4>
3481 CLASS: KGS::Score<br />
3482 <p>
3483 </p>
3484 <table border="1" width="100%">
3485 <tr>
3486 <th width="10%">NAME</th>
3487 <th width="8%">TYPE</th>
3488 <th width="4%">VALUE</th>
3489 <th>DESCRIPTION</th>
3490 <th width="10%">GUARD</th>
3491 </tr>
3492 <tr>
3493 <td>score</td>
3494 <td>score32</td>
3495 <td> </td>
3496 <td>
3497
3498  
3499 </td>
3500 <td>
3501 <b></b>
3502  
3503 </td>
3504 </tr>
3505 <tr>
3506 <td>territory</td>
3507 <td>U32</td>
3508 <td> </td>
3509 <td>
3510
3511  
3512 </td>
3513 <td>
3514 <b></b>
3515  
3516 </td>
3517 </tr>
3518 <tr>
3519 <td>captures</td>
3520 <td>U32</td>
3521 <td> </td>
3522 <td>
3523
3524  
3525 </td>
3526 <td>
3527 <b></b>
3528  
3529 </td>
3530 </tr>
3531 <tr>
3532 <td>i3</td>
3533 <td>U32</td>
3534 <td> </td>
3535 <td>
3536
3537  
3538 </td>
3539 <td>
3540 <b></b>
3541  
3542 </td>
3543 </tr>
3544 <tr>
3545 <td>f2</td>
3546 <td>U32</td>
3547 <td> </td>
3548 <td>
3549
3550  
3551 </td>
3552 <td>
3553 <b></b>
3554  
3555 </td>
3556 </tr>
3557 <tr>
3558 <td>komi</td>
3559 <td>komi324</td>
3560 <td> </td>
3561 <td>
3562
3563  
3564 </td>
3565 <td>
3566 <b></b>
3567  
3568 </td>
3569 </tr>
3570 <tr>
3571 <td>i4</td>
3572 <td>U32</td>
3573 <td> </td>
3574 <td>
3575 Apparently the i3, f2, i4 are zero.
3576
3577  
3578 </td>
3579 <td>
3580 <b></b>
3581  
3582 </td>
3583 </tr>
3584 </table>
3585
3586 <h4>STRUCTURE game_record</h4>
3587 CLASS: KGS::GameRecord<br />
3588 <p>
3589 <p>A single game record entry, as seen in <a href="#S0008">userinfo(0008)</a>.</p>
3590 </p>
3591 <table border="1" width="100%">
3592 <tr>
3593 <th width="10%">NAME</th>
3594 <th width="8%">TYPE</th>
3595 <th width="4%">VALUE</th>
3596 <th>DESCRIPTION</th>
3597 <th width="10%">GUARD</th>
3598 </tr>
3599 <tr>
3600 <td>timestamp</td>
3601 <td>timestamp</td>
3602 <td> </td>
3603 <td>
3604 Time this game was played.
3605
3606  
3607 </td>
3608 <td>
3609 <b></b>
3610  
3611 </td>
3612 </tr>
3613 <tr>
3614 <td>type</td>
3615 <td>U8</td>
3616 <td> </td>
3617 <td>
3618
3619  
3620 </td>
3621 <td>
3622 <b></b>
3623  
3624 </td>
3625 </tr>
3626 <tr>
3627 <td>user1</td>
3628 <td>user</td>
3629 <td> </td>
3630 <td>
3631 White, flags contain low 8 bits of revision (bits 16-23).
3632
3633  
3634 </td>
3635 <td>
3636 <b></b>
3637  
3638 </td>
3639 </tr>
3640 <tr>
3641 <td>user2</td>
3642 <td>user</td>
3643 <td> </td>
3644 <td>
3645 Black, flags contain high 8 bits of revision (bits 16-23).
3646
3647  
3648 </td>
3649 <td>
3650 <b></b>
3651  
3652 </td>
3653 </tr>
3654 <tr>
3655 <td>user3</td>
3656 <td>user</td>
3657 <td> </td>
3658 <td>
3659
3660
3661  
3662 </td>
3663 <td>
3664 <b></b>
3665  
3666 </td>
3667 </tr>
3668 <tr>
3669 <td>komi</td>
3670 <td>komi16</td>
3671 <td> </td>
3672 <td>
3673
3674  
3675 </td>
3676 <td>
3677 <b></b>
3678  
3679 </td>
3680 </tr>
3681 <tr>
3682 <td>score</td>
3683 <td>score16</td>
3684 <td> </td>
3685 <td>
3686
3687  
3688 </td>
3689 <td>
3690 <b></b>
3691  
3692 </td>
3693 </tr>
3694 <tr>
3695 <td>status</td>
3696 <td>U8</td>
3697 <td> </td>
3698 <td>
3699
3700
3701  
3702 </td>
3703 <td>
3704 <b></b>
3705  
3706 </td>
3707 </tr>
3708 </table>
3709
3710 <h2>Server-generated messages</h2>
3711
3712 <h4>
3713 <a name="S0001"></a>ORIGIN: SERVER;
3714 MESSAGE: login</h4>
3715 NUMERIC TYPE (hex): 0001
3716 (possibly in response to
3717 <a href="#C0000">login(0000)</a>
3718 )
3719 <p>
3720 </p>
3721 <table border="1" width="100%">
3722 <tr>
3723 <th width="10%">NAME</th>
3724 <th width="8%">TYPE</th>
3725 <th width="4%">VALUE</th>
3726 <th>DESCRIPTION</th>
3727 <th width="10%">GUARD</th>
3728 </tr>
3729 <tr>
3730 <td>message</td>
3731 <td>CONSTANT</td>
3732 <td>login successful </td>
3733 <td>
3734
3735  
3736 </td>
3737 <td>
3738 <b></b>
3739  
3740 </td>
3741 </tr>
3742 <tr>
3743 <td>success</td>
3744 <td>CONSTANT</td>
3745 <td>1 </td>
3746 <td>
3747
3748  
3749 </td>
3750 <td>
3751 <b></b>
3752  
3753 </td>
3754 </tr>
3755 </table>
3756
3757 <h4>
3758 <a name="S0002"></a>ORIGIN: SERVER;
3759 MESSAGE: login</h4>
3760 NUMERIC TYPE (hex): 0002
3761 (possibly in response to
3762 <a href="#C0000">login(0000)</a>
3763 )
3764 <p>
3765 </p>
3766 <table border="1" width="100%">
3767 <tr>
3768 <th width="10%">NAME</th>
3769 <th width="8%">TYPE</th>
3770 <th width="4%">VALUE</th>
3771 <th>DESCRIPTION</th>
3772 <th width="10%">GUARD</th>
3773 </tr>
3774 <tr>
3775 <td>message</td>
3776 <td>CONSTANT</td>
3777 <td>login successful: client version is outdated. </td>
3778 <td>
3779
3780  
3781 </td>
3782 <td>
3783 <b></b>
3784  
3785 </td>
3786 </tr>
3787 <tr>
3788 <td>success</td>
3789 <td>CONSTANT</td>
3790 <td>1 </td>
3791 <td>
3792
3793  
3794 </td>
3795 <td>
3796 <b></b>
3797  
3798 </td>
3799 </tr>
3800 </table>
3801
3802 <h4>
3803 <a name="S0003"></a>ORIGIN: SERVER;
3804 MESSAGE: login</h4>
3805 NUMERIC TYPE (hex): 0003
3806 (possibly in response to
3807 <a href="#C0000">login(0000)</a>
3808 )
3809 <p>
3810 </p>
3811 <table border="1" width="100%">
3812 <tr>
3813 <th width="10%">NAME</th>
3814 <th width="8%">TYPE</th>
3815 <th width="4%">VALUE</th>
3816 <th>DESCRIPTION</th>
3817 <th width="10%">GUARD</th>
3818 </tr>
3819 <tr>
3820 <td>message</td>
3821 <td>CONSTANT</td>
3822 <td>login failed: client version out of date </td>
3823 <td>
3824 ** maybe more following? **
3825
3826  
3827 </td>
3828 <td>
3829 <b></b>
3830  
3831 </td>
3832 </tr>
3833 </table>
3834
3835 <h4>
3836 <a name="S0004"></a>ORIGIN: SERVER;
3837 MESSAGE: login</h4>
3838 NUMERIC TYPE (hex): 0004
3839 (possibly in response to
3840 <a href="#C0000">login(0000)</a>
3841 )
3842 <p>
3843 </p>
3844 <table border="1" width="100%">
3845 <tr>
3846 <th width="10%">NAME</th>
3847 <th width="8%">TYPE</th>
3848 <th width="4%">VALUE</th>
3849 <th>DESCRIPTION</th>
3850 <th width="10%">GUARD</th>
3851 </tr>
3852 <tr>
3853 <td>message</td>
3854 <td>CONSTANT</td>
3855 <td>login failed: wrong password </td>
3856 <td>
3857 ** maybe more following? **
3858
3859  
3860 </td>
3861 <td>
3862 <b></b>
3863  
3864 </td>
3865 </tr>
3866 </table>
3867
3868 <h4>
3869 <a name="S0005"></a>ORIGIN: SERVER;
3870 MESSAGE: login</h4>
3871 NUMERIC TYPE (hex): 0005
3872 (possibly in response to
3873 <a href="#C0000">login(0000)</a>
3874 )
3875 <p>
3876 </p>
3877 <table border="1" width="100%">
3878 <tr>
3879 <th width="10%">NAME</th>
3880 <th width="8%">TYPE</th>
3881 <th width="4%">VALUE</th>
3882 <th>DESCRIPTION</th>
3883 <th width="10%">GUARD</th>
3884 </tr>
3885 <tr>
3886 <td>message</td>
3887 <td>CONSTANT</td>
3888 <td>login failed: specified user does not exist </td>
3889 <td>
3890
3891  
3892 </td>
3893 <td>
3894 <b></b>
3895  
3896 </td>
3897 </tr>
3898 </table>
3899
3900 <h4>
3901 <a name="S0006"></a>ORIGIN: SERVER;
3902 MESSAGE: login</h4>
3903 NUMERIC TYPE (hex): 0006
3904 (possibly in response to
3905 <a href="#C0000">login(0000)</a>
3906 )
3907 <p>
3908 </p>
3909 <table border="1" width="100%">
3910 <tr>
3911 <th width="10%">NAME</th>
3912 <th width="8%">TYPE</th>
3913 <th width="4%">VALUE</th>
3914 <th>DESCRIPTION</th>
3915 <th width="10%">GUARD</th>
3916 </tr>
3917 <tr>
3918 <td>message</td>
3919 <td>CONSTANT</td>
3920 <td>login failed: registered user of same name exists </td>
3921 <td>
3922
3923  
3924 </td>
3925 <td>
3926 <b></b>
3927  
3928 </td>
3929 </tr>
3930 </table>
3931
3932 <h4>
3933 <a name="S0008"></a>ORIGIN: SERVER;
3934 MESSAGE: userinfo</h4>
3935 NUMERIC TYPE (hex): 0008
3936 (possibly in response to
3937 <a href="#C0007">req_userinfo(0007)</a>
3938 )
3939 <p>
3940 User info.
3941 </p>
3942 <table border="1" width="100%">
3943 <tr>
3944 <th width="10%">NAME</th>
3945 <th width="8%">TYPE</th>
3946 <th width="4%">VALUE</th>
3947 <th>DESCRIPTION</th>
3948 <th width="10%">GUARD</th>
3949 </tr>
3950 <tr>
3951 <td>_unused0</td>
3952 <td>flag</td>
3953 <td> </td>
3954 <td>
3955
3956  
3957 </td>
3958 <td>
3959 <b></b>
3960  
3961 </td>
3962 </tr>
3963 <tr>
3964 <td>user</td>
3965 <td>user</td>
3966 <td> </td>
3967 <td>
3968
3969  
3970 </td>
3971 <td>
3972 <b></b>
3973  
3974 </td>
3975 </tr>
3976 <tr>
3977 <td>_unused1</td>
3978 <td>U64</td>
3979 <td> </td>
3980 <td>
3981
3982  
3983 </td>
3984 <td>
3985 <b></b>
3986  
3987 </td>
3988 </tr>
3989 <tr>
3990 <td>realname</td>
3991 <td>realname</td>
3992 <td> </td>
3993 <td>
3994
3995  
3996 </td>
3997 <td>
3998 <b></b>
3999  
4000 </td>
4001 </tr>
4002 <tr>
4003 <td>email</td>
4004 <td>email</td>
4005 <td> </td>
4006 <td>
4007
4008  
4009 </td>
4010 <td>
4011 <b></b>
4012  
4013 </td>
4014 </tr>
4015 <tr>
4016 <td>info</td>
4017 <td>userinfo</td>
4018 <td> </td>
4019 <td>
4020
4021  
4022 </td>
4023 <td>
4024 <b></b>
4025  
4026 </td>
4027 </tr>
4028 <tr>
4029 <td>homepage</td>
4030 <td>url</td>
4031 <td> </td>
4032 <td>
4033
4034  
4035 </td>
4036 <td>
4037 <b></b>
4038  
4039 </td>
4040 </tr>
4041 <tr>
4042 <td>regdate</td>
4043 <td>timestamp</td>
4044 <td> </td>
4045 <td>
4046 When the user registered (0 == never registered).
4047
4048  
4049 </td>
4050 <td>
4051 <b></b>
4052  
4053 </td>
4054 </tr>
4055 <tr>
4056 <td>lastlogin</td>
4057 <td>timestamp</td>
4058 <td> </td>
4059 <td>
4060 When the user logged in for the last time.
4061
4062  
4063 </td>
4064 <td>
4065 <b></b>
4066  
4067 </td>
4068 </tr>
4069 </table>
4070
4071 <h4>
4072 <a name="S0009"></a>ORIGIN: SERVER;
4073 MESSAGE: upd_userinfo_result</h4>
4074 NUMERIC TYPE (hex): 0009<p>
4075 </p>
4076 <table border="1" width="100%">
4077 <tr>
4078 <th width="10%">NAME</th>
4079 <th width="8%">TYPE</th>
4080 <th width="4%">VALUE</th>
4081 <th>DESCRIPTION</th>
4082 <th width="10%">GUARD</th>
4083 </tr>
4084 <tr>
4085 <td>name</td>
4086 <td>username</td>
4087 <td> </td>
4088 <td>
4089
4090  
4091 </td>
4092 <td>
4093 <b></b>
4094  
4095 </td>
4096 </tr>
4097 <tr>
4098 <td>message</td>
4099 <td>CONSTANT</td>
4100 <td>Thanks for registering. </td>
4101 <td>
4102
4103  
4104 </td>
4105 <td>
4106 <b></b>
4107  
4108 </td>
4109 </tr>
4110 </table>
4111
4112 <h4>
4113 <a name="S000a"></a>ORIGIN: SERVER;
4114 MESSAGE: upd_userinfo_result</h4>
4115 NUMERIC TYPE (hex): 000a<p>
4116 </p>
4117 <table border="1" width="100%">
4118 <tr>
4119 <th width="10%">NAME</th>
4120 <th width="8%">TYPE</th>
4121 <th width="4%">VALUE</th>
4122 <th>DESCRIPTION</th>
4123 <th width="10%">GUARD</th>
4124 </tr>
4125 <tr>
4126 <td>name</td>
4127 <td>username</td>
4128 <td> </td>
4129 <td>
4130
4131  
4132 </td>
4133 <td>
4134 <b></b>
4135  
4136 </td>
4137 </tr>
4138 <tr>
4139 <td>message</td>
4140 <td>CONSTANT</td>
4141 <td>The user "%s" has been successfully updated. </td>
4142 <td>
4143
4144  
4145 </td>
4146 <td>
4147 <b></b>
4148  
4149 </td>
4150 </tr>
4151 </table>
4152
4153 <h4>
4154 <a name="S000b"></a>ORIGIN: SERVER;
4155 MESSAGE: upd_userinfo_result</h4>
4156 NUMERIC TYPE (hex): 000b<p>
4157 </p>
4158 <table border="1" width="100%">
4159 <tr>
4160 <th width="10%">NAME</th>
4161 <th width="8%">TYPE</th>
4162 <th width="4%">VALUE</th>
4163 <th>DESCRIPTION</th>
4164 <th width="10%">GUARD</th>
4165 </tr>
4166 <tr>
4167 <td>name</td>
4168 <td>username</td>
4169 <td> </td>
4170 <td>
4171
4172  
4173 </td>
4174 <td>
4175 <b></b>
4176  
4177 </td>
4178 </tr>
4179 <tr>
4180 <td>message</td>
4181 <td>CONSTANT</td>
4182 <td>There is no user "%s". Update failed. </td>
4183 <td>
4184
4185  
4186 </td>
4187 <td>
4188 <b></b>
4189  
4190 </td>
4191 </tr>
4192 </table>
4193
4194 <h4>
4195 <a name="S0012"></a>ORIGIN: SERVER;
4196 MESSAGE: userinfo_failed</h4>
4197 NUMERIC TYPE (hex): 0012<p>
4198 <p>Sent when no userinfo for the requested user could be found(?)</p>
4199 </p>
4200 <table border="1" width="100%">
4201 <tr>
4202 <th width="10%">NAME</th>
4203 <th width="8%">TYPE</th>
4204 <th width="4%">VALUE</th>
4205 <th>DESCRIPTION</th>
4206 <th width="10%">GUARD</th>
4207 </tr>
4208 <tr>
4209 <td>name</td>
4210 <td>username</td>
4211 <td> </td>
4212 <td>
4213
4214  
4215 </td>
4216 <td>
4217 <b></b>
4218  
4219 </td>
4220 </tr>
4221 </table>
4222
4223 <h4>
4224 <a name="S0013"></a>ORIGIN: SERVER;
4225 MESSAGE: msg_chat</h4>
4226 NUMERIC TYPE (hex): 0013<p>
4227 </p>
4228 <table border="1" width="100%">
4229 <tr>
4230 <th width="10%">NAME</th>
4231 <th width="8%">TYPE</th>
4232 <th width="4%">VALUE</th>
4233 <th>DESCRIPTION</th>
4234 <th width="10%">GUARD</th>
4235 </tr>
4236 <tr>
4237 <td>name</td>
4238 <td>username</td>
4239 <td> </td>
4240 <td>
4241 Name of sender (either yourself (echo) or other)
4242
4243  
4244 </td>
4245 <td>
4246 <b></b>
4247  
4248 </td>
4249 </tr>
4250 <tr>
4251 <td>name2</td>
4252 <td>username</td>
4253 <td> </td>
4254 <td>
4255 Name of recipient.
4256
4257  
4258 </td>
4259 <td>
4260 <b></b>
4261  
4262 </td>
4263 </tr>
4264 <tr>
4265 <td>message</td>
4266 <td>STRING</td>
4267 <td> </td>
4268 <td>
4269
4270  
4271 </td>
4272 <td>
4273 <b></b>
4274  
4275 </td>
4276 </tr>
4277 </table>
4278
4279 <h4>
4280 <a name="S0015"></a>ORIGIN: SERVER;
4281 MESSAGE: stats</h4>
4282 NUMERIC TYPE (hex): 0015
4283 (possibly in response to
4284 <a href="#C0014">req_stats(0014)</a>
4285 )
4286 <p>
4287 </p>
4288 <table border="1" width="100%">
4289 <tr>
4290 <th width="10%">NAME</th>
4291 <th width="8%">TYPE</th>
4292 <th width="4%">VALUE</th>
4293 <th>DESCRIPTION</th>
4294 <th width="10%">GUARD</th>
4295 </tr>
4296 <tr>
4297 <td>ver_major</td>
4298 <td>U16</td>
4299 <td> </td>
4300 <td>
4301
4302  
4303 </td>
4304 <td>
4305 <b></b>
4306  
4307 </td>
4308 </tr>
4309 <tr>
4310 <td>ver_minor</td>
4311 <td>U16</td>
4312 <td> </td>
4313 <td>
4314
4315  
4316 </td>
4317 <td>
4318 <b></b>
4319  
4320 </td>
4321 </tr>
4322 <tr>
4323 <td>ver_micro</td>
4324 <td>U16</td>
4325 <td> </td>
4326 <td>
4327
4328  
4329 </td>
4330 <td>
4331 <b></b>
4332  
4333 </td>
4334 </tr>
4335 <tr>
4336 <td>boot_time</td>
4337 <td>timestamp</td>
4338 <td> </td>
4339 <td>
4340
4341  
4342 </td>
4343 <td>
4344 <b></b>
4345  
4346 </td>
4347 </tr>
4348 <tr>
4349 <td>users_cur</td>
4350 <td>U32</td>
4351 <td> </td>
4352 <td>
4353
4354  
4355 </td>
4356 <td>
4357 <b></b>
4358  
4359 </td>
4360 </tr>
4361 <tr>
4362 <td>users_max</td>
4363 <td>U32</td>
4364 <td> </td>
4365 <td>
4366
4367  
4368 </td>
4369 <td>
4370 <b></b>
4371  
4372 </td>
4373 </tr>
4374 <tr>
4375 <td>users_lim</td>
4376 <td>U32</td>
4377 <td> </td>
4378 <td>
4379
4380  
4381 </td>
4382 <td>
4383 <b></b>
4384  
4385 </td>
4386 </tr>
4387 <tr>
4388 <td>accts_cur</td>
4389 <td>U32</td>
4390 <td> </td>
4391 <td>
4392
4393  
4394 </td>
4395 <td>
4396 <b></b>
4397  
4398 </td>
4399 </tr>
4400 <tr>
4401 <td>accts_max</td>
4402 <td>U32</td>
4403 <td> </td>
4404 <td>
4405
4406  
4407 </td>
4408 <td>
4409 <b></b>
4410  
4411 </td>
4412 </tr>
4413 <tr>
4414 <td>unknown1</td>
4415 <td>U32</td>
4416 <td> </td>
4417 <td>
4418
4419  
4420 </td>
4421 <td>
4422 <b></b>
4423  
4424 </td>
4425 </tr>
4426 <tr>
4427 <td>work_max</td>
4428 <td>U32</td>
4429 <td> </td>
4430 <td>
4431
4432  
4433 </td>
4434 <td>
4435 <b></b>
4436  
4437 </td>
4438 </tr>
4439 <tr>
4440 <td>rooms_cur</td>
4441 <td>U32</td>
4442 <td> </td>
4443 <td>
4444
4445  
4446 </td>
4447 <td>
4448 <b></b>
4449  
4450 </td>
4451 </tr>
4452 <tr>
4453 <td>rooms_max</td>
4454 <td>U32</td>
4455 <td> </td>
4456 <td>
4457
4458  
4459 </td>
4460 <td>
4461 <b></b>
4462  
4463 </td>
4464 </tr>
4465 <tr>
4466 <td>rooms_lim</td>
4467 <td>U32</td>
4468 <td> </td>
4469 <td>
4470
4471  
4472 </td>
4473 <td>
4474 <b></b>
4475  
4476 </td>
4477 </tr>
4478 <tr>
4479 <td>games_cur</td>
4480 <td>U32</td>
4481 <td> </td>
4482 <td>
4483
4484  
4485 </td>
4486 <td>
4487 <b></b>
4488  
4489 </td>
4490 </tr>
4491 <tr>
4492 <td>games_max</td>
4493 <td>U32</td>
4494 <td> </td>
4495 <td>
4496
4497  
4498 </td>
4499 <td>
4500 <b></b>
4501  
4502 </td>
4503 </tr>
4504 <tr>
4505 <td>games_lim</td>
4506 <td>U32</td>
4507 <td> </td>
4508 <td>
4509
4510  
4511 </td>
4512 <td>
4513 <b></b>
4514  
4515 </td>
4516 </tr>
4517 <tr>
4518 <td>results_cur</td>
4519 <td>U32</td>
4520 <td> </td>
4521 <td>
4522
4523  
4524 </td>
4525 <td>
4526 <b></b>
4527  
4528 </td>
4529 </tr>
4530 <tr>
4531 <td>results_max</td>
4532 <td>U32</td>
4533 <td> </td>
4534 <td>
4535
4536  
4537 </td>
4538 <td>
4539 <b></b>
4540  
4541 </td>
4542 </tr>
4543 <tr>
4544 <td>unknown2</td>
4545 <td>U32</td>
4546 <td> </td>
4547 <td>
4548
4549  
4550 </td>
4551 <td>
4552 <b></b>
4553  
4554 </td>
4555 </tr>
4556 <tr>
4557 <td>params_cur</td>
4558 <td>U32</td>
4559 <td> </td>
4560 <td>
4561
4562  
4563 </td>
4564 <td>
4565 <b></b>
4566  
4567 </td>
4568 </tr>
4569 <tr>
4570 <td>params_max</td>
4571 <td>U32</td>
4572 <td> </td>
4573 <td>
4574
4575  
4576 </td>
4577 <td>
4578 <b></b>
4579  
4580 </td>
4581 </tr>
4582 <tr>
4583 <td>bytes_in</td>
4584 <td>U64</td>
4585 <td> </td>
4586 <td>
4587
4588  
4589 </td>
4590 <td>
4591 <b></b>
4592  
4593 </td>
4594 </tr>
4595 <tr>
4596 <td>packets_in</td>
4597 <td>U64</td>
4598 <td> </td>
4599 <td>
4600
4601  
4602 </td>
4603 <td>
4604 <b></b>
4605  
4606 </td>
4607 </tr>
4608 <tr>
4609 <td>bytes_out</td>
4610 <td>U64</td>
4611 <td> </td>
4612 <td>
4613
4614  
4615 </td>
4616 <td>
4617 <b></b>
4618  
4619 </td>
4620 </tr>
4621 <tr>
4622 <td>packets_out</td>
4623 <td>U64</td>
4624 <td> </td>
4625 <td>
4626
4627  
4628 </td>
4629 <td>
4630 <b></b>
4631  
4632 </td>
4633 </tr>
4634 </table>
4635
4636 <h4>
4637 <a name="S0016"></a>ORIGIN: SERVER;
4638 MESSAGE: idle_warn</h4>
4639 NUMERIC TYPE (hex): 0016
4640 (possibly in response to
4641 <a href="#C0016">idle_reset(0016)</a>
4642 )
4643 <p>
4644 idle warning, autologout soon (10 minutes...)
4645 </p>
4646 <table border="1" width="100%">
4647 <tr>
4648 <th width="10%">NAME</th>
4649 <th width="8%">TYPE</th>
4650 <th width="4%">VALUE</th>
4651 <th>DESCRIPTION</th>
4652 <th width="10%">GUARD</th>
4653 </tr>
4654 </table>
4655
4656 <h4>
4657 <a name="S0018"></a>ORIGIN: SERVER;
4658 MESSAGE: login</h4>
4659 NUMERIC TYPE (hex): 0018
4660 (possibly in response to
4661 <a href="#C0000">login(0000)</a>
4662 )
4663 <p>
4664 </p>
4665 <table border="1" width="100%">
4666 <tr>
4667 <th width="10%">NAME</th>
4668 <th width="8%">TYPE</th>
4669 <th width="4%">VALUE</th>
4670 <th>DESCRIPTION</th>
4671 <th width="10%">GUARD</th>
4672 </tr>
4673 <tr>
4674 <td>message</td>
4675 <td>CONSTANT</td>
4676 <td>logged out: another client logged in with your username </td>
4677 <td>
4678
4679  
4680 </td>
4681 <td>
4682 <b></b>
4683  
4684 </td>
4685 </tr>
4686 </table>
4687
4688 <h4>
4689 <a name="S001c"></a>ORIGIN: SERVER;
4690 MESSAGE: login</h4>
4691 NUMERIC TYPE (hex): 001c
4692 (possibly in response to
4693 <a href="#C0000">login(0000)</a>
4694 )
4695 <p>
4696 </p>
4697 <table border="1" width="100%">
4698 <tr>
4699 <th width="10%">NAME</th>
4700 <th width="8%">TYPE</th>
4701 <th width="4%">VALUE</th>
4702 <th>DESCRIPTION</th>
4703 <th width="10%">GUARD</th>
4704 </tr>
4705 <tr>
4706 <td>message</td>
4707 <td>CONSTANT</td>
4708 <td>logged out: idle for too long </td>
4709 <td>
4710
4711  
4712 </td>
4713 <td>
4714 <b></b>
4715  
4716 </td>
4717 </tr>
4718 </table>
4719
4720 <h4>
4721 <a name="S0020"></a>ORIGIN: SERVER;
4722 MESSAGE: error</h4>
4723 NUMERIC TYPE (hex): 0020<p>
4724 </p>
4725 <table border="1" width="100%">
4726 <tr>
4727 <th width="10%">NAME</th>
4728 <th width="8%">TYPE</th>
4729 <th width="4%">VALUE</th>
4730 <th>DESCRIPTION</th>
4731 <th width="10%">GUARD</th>
4732 </tr>
4733 <tr>
4734 <td>message</td>
4735 <td>CONSTANT</td>
4736 <td>Sorry, you have too many unfinished games. You cannot turn on your rank. Please finish some of your games, then try again. </td>
4737 <td>
4738
4739  
4740 </td>
4741 <td>
4742 <b></b>
4743  
4744 </td>
4745 </tr>
4746 </table>
4747
4748 <h4>
4749 <a name="S0022"></a>ORIGIN: SERVER;
4750 MESSAGE: login</h4>
4751 NUMERIC TYPE (hex): 0022
4752 (possibly in response to
4753 <a href="#C0000">login(0000)</a>
4754 )
4755 <p>
4756 I was blocked sooo many times for developing this client that it was
4757 easy to figure out. The KGS admins sure need no extra nazi training
4758 :(
4759 </p>
4760 <table border="1" width="100%">
4761 <tr>
4762 <th width="10%">NAME</th>
4763 <th width="8%">TYPE</th>
4764 <th width="4%">VALUE</th>
4765 <th>DESCRIPTION</th>
4766 <th width="10%">GUARD</th>
4767 </tr>
4768 <tr>
4769 <td>reason</td>
4770 <td>STRING</td>
4771 <td> </td>
4772 <td>
4773
4774  
4775 </td>
4776 <td>
4777 <b></b>
4778  
4779 </td>
4780 </tr>
4781 <tr>
4782 <td>result</td>
4783 <td>CONSTANT</td>
4784 <td>user or ip blocked </td>
4785 <td>
4786
4787  
4788 </td>
4789 <td>
4790 <b></b>
4791  
4792 </td>
4793 </tr>
4794 </table>
4795
4796 <h4>
4797 <a name="S001b"></a>ORIGIN: SERVER;
4798 MESSAGE: timewarning_default</h4>
4799 NUMERIC TYPE (hex): 001b
4800 (possibly in response to
4801 <a href="#C0000">login(0000)</a>
4802 )
4803 <p>
4804 WILD guess
4805 </p>
4806 <table border="1" width="100%">
4807 <tr>
4808 <th width="10%">NAME</th>
4809 <th width="8%">TYPE</th>
4810 <th width="4%">VALUE</th>
4811 <th>DESCRIPTION</th>
4812 <th width="10%">GUARD</th>
4813 </tr>
4814 <tr>
4815 <td>channel</td>
4816 <td>U16</td>
4817 <td> </td>
4818 <td>
4819
4820  
4821 </td>
4822 <td>
4823 <b></b>
4824  
4825 </td>
4826 </tr>
4827 <tr>
4828 <td>time</td>
4829 <td>U16</td>
4830 <td> </td>
4831 <td>
4832
4833  
4834 </td>
4835 <td>
4836 <b></b>
4837  
4838 </td>
4839 </tr>
4840 </table>
4841
4842 <h4>
4843 <a name="S001c"></a>ORIGIN: SERVER;
4844 MESSAGE: idle_err</h4>
4845 NUMERIC TYPE (hex): 001c<p>
4846 autologout
4847 </p>
4848 <table border="1" width="100%">
4849 <tr>
4850 <th width="10%">NAME</th>
4851 <th width="8%">TYPE</th>
4852 <th width="4%">VALUE</th>
4853 <th>DESCRIPTION</th>
4854 <th width="10%">GUARD</th>
4855 </tr>
4856 </table>
4857
4858 <h4>
4859 <a name="S001d"></a>ORIGIN: SERVER;
4860 MESSAGE: ping</h4>
4861 NUMERIC TYPE (hex): 001d<p>
4862 Sent by the server regularly, but not answering them
4863 isn't valid. Strange form of keepalive?
4864 </p>
4865 <table border="1" width="100%">
4866 <tr>
4867 <th width="10%">NAME</th>
4868 <th width="8%">TYPE</th>
4869 <th width="4%">VALUE</th>
4870 <th>DESCRIPTION</th>
4871 <th width="10%">GUARD</th>
4872 </tr>
4873 </table>
4874
4875 <h4>
4876 <a name="S001e"></a>ORIGIN: SERVER;
4877 MESSAGE: usergraph</h4>
4878 NUMERIC TYPE (hex): 001e
4879 (possibly in response to
4880 <a href="#C001e">req_usergraph(001e)</a>
4881 )
4882 <p>
4883 User graph data.
4884 </p>
4885 <table border="1" width="100%">
4886 <tr>
4887 <th width="10%">NAME</th>
4888 <th width="8%">TYPE</th>
4889 <th width="4%">VALUE</th>
4890 <th>DESCRIPTION</th>
4891 <th width="10%">GUARD</th>
4892 </tr>
4893 <tr>
4894 <td>name</td>
4895 <td>username</td>
4896 <td> </td>
4897 <td>
4898
4899  
4900 </td>
4901 <td>
4902 <b></b>
4903  
4904 </td>
4905 </tr>
4906 <tr>
4907 <td>data</td>
4908 <td>I16</td>
4909 <td> </td>
4910 <td>
4911 If empty, no graph is available. The unit seems to
4912 be centi-kyu, with 1 dan == 0, 2 dan == 100, 1 kyu == -100.
4913 There is probably one entry per day, the newest one last.
4914
4915  
4916 </td>
4917 <td>
4918 <b></b>
4919  
4920 </td>
4921 </tr>
4922 </table>
4923
4924 <h4>
4925 <a name="S001f"></a>ORIGIN: SERVER;
4926 MESSAGE: memo</h4>
4927 NUMERIC TYPE (hex): 001f
4928 (possibly in response to
4929 <a href="#C001f">fetch_memos(001f)</a>
4930 )
4931 <p>
4932 Unclear. "Leave Message"?
4933 6 strings following.
4934 </p>
4935 <table border="1" width="100%">
4936 <tr>
4937 <th width="10%">NAME</th>
4938 <th width="8%">TYPE</th>
4939 <th width="4%">VALUE</th>
4940 <th>DESCRIPTION</th>
4941 <th width="10%">GUARD</th>
4942 </tr>
4943 <tr>
4944 <td>s1</td>
4945 <td>STRING</td>
4946 <td> </td>
4947 <td>
4948
4949  
4950 </td>
4951 <td>
4952 <b></b>
4953  
4954 </td>
4955 </tr>
4956 <tr>
4957 <td>s2</td>
4958 <td>STRING</td>
4959 <td> </td>
4960 <td>
4961
4962  
4963 </td>
4964 <td>
4965 <b></b>
4966  
4967 </td>
4968 </tr>
4969 <tr>
4970 <td>s3</td>
4971 <td>STRING</td>
4972 <td> </td>
4973 <td>
4974
4975  
4976 </td>
4977 <td>
4978 <b></b>
4979  
4980 </td>
4981 </tr>
4982 <tr>
4983 <td>s4</td>
4984 <td>STRING</td>
4985 <td> </td>
4986 <td>
4987
4988  
4989 </td>
4990 <td>
4991 <b></b>
4992  
4993 </td>
4994 </tr>
4995 <tr>
4996 <td>s5</td>
4997 <td>STRING</td>
4998 <td> </td>
4999 <td>
5000
5001  
5002 </td>
5003 <td>
5004 <b></b>
5005  
5006 </td>
5007 </tr>
5008 <tr>
5009 <td>s6</td>
5010 <td>STRING</td>
5011 <td> </td>
5012 <td>
5013
5014  
5015 </td>
5016 <td>
5017 <b></b>
5018  
5019 </td>
5020 </tr>
5021 </table>
5022
5023 <h4>
5024 <a name="S0021"></a>ORIGIN: SERVER;
5025 MESSAGE: userpic</h4>
5026 NUMERIC TYPE (hex): 0021
5027 (possibly in response to
5028 <a href="#C0021">req_pic(0021)</a>
5029 )
5030 <p>
5031 </p>
5032 <table border="1" width="100%">
5033 <tr>
5034 <th width="10%">NAME</th>
5035 <th width="8%">TYPE</th>
5036 <th width="4%">VALUE</th>
5037 <th>DESCRIPTION</th>
5038 <th width="10%">GUARD</th>
5039 </tr>
5040 <tr>
5041 <td>name</td>
5042 <td>username</td>
5043 <td> </td>
5044 <td>
5045 Reply to pic_req, contains an image in jpeg format.
5046
5047  
5048 </td>
5049 <td>
5050 <b></b>
5051  
5052 </td>
5053 </tr>
5054 <tr>
5055 <td>data</td>
5056 <td>DATA</td>
5057 <td> </td>
5058 <td>
5059
5060  
5061 </td>
5062 <td>
5063 <b></b>
5064  
5065 </td>
5066 </tr>
5067 </table>
5068
5069 <h4>
5070 <a name="S0100"></a>ORIGIN: SERVER;
5071 MESSAGE: gnotice</h4>
5072 NUMERIC TYPE (hex): 0100
5073 (possibly in response to
5074 <a href="#C0100">gnotice(0100)</a>
5075 )
5076 <p>
5077 global notice, sent to everybody
5078 </p>
5079 <table border="1" width="100%">
5080 <tr>
5081 <th width="10%">NAME</th>
5082 <th width="8%">TYPE</th>
5083 <th width="4%">VALUE</th>
5084 <th>DESCRIPTION</th>
5085 <th width="10%">GUARD</th>
5086 </tr>
5087 <tr>
5088 <td>notice</td>
5089 <td>STRING</td>
5090 <td> </td>
5091 <td>
5092
5093  
5094 </td>
5095 <td>
5096 <b></b>
5097  
5098 </td>
5099 </tr>
5100 </table>
5101
5102 <h4>
5103 <a name="S0202"></a>ORIGIN: SERVER;
5104 MESSAGE: notify_event</h4>
5105 NUMERIC TYPE (hex): 0202<p>
5106 # maybe soe notify? Totally unclear.
5107 # loc 0" type="userinfo, flags etc. loc 1 =&gt; gameinfo?, loc 2 =&gt; game result (more data)
5108 </p>
5109 <table border="1" width="100%">
5110 <tr>
5111 <th width="10%">NAME</th>
5112 <th width="8%">TYPE</th>
5113 <th width="4%">VALUE</th>
5114 <th>DESCRIPTION</th>
5115 <th width="10%">GUARD</th>
5116 </tr>
5117 <tr>
5118 <td>event</td>
5119 <td>U32</td>
5120 <td> </td>
5121 <td>
5122
5123  
5124 </td>
5125 <td>
5126 <b></b>
5127  
5128 </td>
5129 </tr>
5130 <tr>
5131 <td>user</td>
5132 <td>user</td>
5133 <td> </td>
5134 <td>
5135
5136  
5137 </td>
5138 <td>
5139 <b></b>
5140  
5141 </td>
5142 </tr>
5143 <tr>
5144 <td>gamerecord</td>
5145 <td>game_record</td>
5146 <td> </td>
5147 <td>
5148
5149  
5150 </td>
5151 <td>
5152 <b>event</b> == 2
5153  
5154 </td>
5155 </tr>
5156 </table>
5157
5158 <h4>
5159 <a name="S0310"></a>ORIGIN: SERVER;
5160 MESSAGE: priv_room</h4>
5161 NUMERIC TYPE (hex): 0310<p>
5162 "permission denied" when joining a room
5163 </p>
5164 <table border="1" width="100%">
5165 <tr>
5166 <th width="10%">NAME</th>
5167 <th width="8%">TYPE</th>
5168 <th width="4%">VALUE</th>
5169 <th>DESCRIPTION</th>
5170 <th width="10%">GUARD</th>
5171 </tr>
5172 <tr>
5173 <td>name</td>
5174 <td>STRING</td>
5175 <td> </td>
5176 <td>
5177
5178  
5179 </td>
5180 <td>
5181 <b></b>
5182  
5183 </td>
5184 </tr>
5185 </table>
5186
5187 <h4>
5188 <a name="S0318"></a>ORIGIN: SERVER;
5189 MESSAGE: upd_rooms</h4>
5190 NUMERIC TYPE (hex): 0318
5191 (possibly in response to
5192 <a href="#C0318">list_rooms(0318)</a>
5193 )
5194 <p>
5195 </p>
5196 <table border="1" width="100%">
5197 <tr>
5198 <th width="10%">NAME</th>
5199 <th width="8%">TYPE</th>
5200 <th width="4%">VALUE</th>
5201 <th>DESCRIPTION</th>
5202 <th width="10%">GUARD</th>
5203 </tr>
5204 <tr>
5205 <td>rooms</td>
5206 <td>room</td>
5207 <td> </td>
5208 <td>
5209
5210  
5211 </td>
5212 <td>
5213 <b></b>
5214  
5215 </td>
5216 </tr>
5217 </table>
5218
5219 <h4>
5220 <a name="S0411"></a>ORIGIN: SERVER;
5221 MESSAGE: chal_defaults</h4>
5222 NUMERIC TYPE (hex): 0411
5223 (possibly in response to
5224 <a href="#C0000">login(0000)</a>
5225 )
5226 <p>
5227 </p>
5228 <table border="1" width="100%">
5229 <tr>
5230 <th width="10%">NAME</th>
5231 <th width="8%">TYPE</th>
5232 <th width="4%">VALUE</th>
5233 <th>DESCRIPTION</th>
5234 <th width="10%">GUARD</th>
5235 </tr>
5236 <tr>
5237 <td>channel</td>
5238 <td>U16</td>
5239 <td> </td>
5240 <td>
5241
5242  
5243 </td>
5244 <td>
5245 <b></b>
5246  
5247 </td>
5248 </tr>
5249 <tr>
5250 <td>defaults</td>
5251 <td>challenge_defaults</td>
5252 <td> </td>
5253 <td>
5254
5255  
5256 </td>
5257 <td>
5258 <b></b>
5259  
5260 </td>
5261 </tr>
5262 </table>
5263
5264 <h4>
5265 <a name="S0412"></a>ORIGIN: SERVER;
5266 MESSAGE: game_error</h4>
5267 NUMERIC TYPE (hex): 0412<p>
5268 Unable to create challenge. The channel is be optional.
5269 </p>
5270 <table border="1" width="100%">
5271 <tr>
5272 <th width="10%">NAME</th>
5273 <th width="8%">TYPE</th>
5274 <th width="4%">VALUE</th>
5275 <th>DESCRIPTION</th>
5276 <th width="10%">GUARD</th>
5277 </tr>
5278 <tr>
5279 <td>message</td>
5280 <td>CONSTANT</td>
5281 <td>Sorry, you are already playing in one game, so you can't start playing in another. </td>
5282 <td>
5283
5284  
5285 </td>
5286 <td>
5287 <b></b>
5288  
5289 </td>
5290 </tr>
5291 <tr>
5292 <td>channel</td>
5293 <td>U16</td>
5294 <td> </td>
5295 <td>
5296
5297  
5298 </td>
5299 <td>
5300 <b></b>
5301  
5302 </td>
5303 </tr>
5304 </table>
5305
5306 <h4>
5307 <a name="S0414"></a>ORIGIN: SERVER;
5308 MESSAGE: game_record</h4>
5309 NUMERIC TYPE (hex): 0414
5310 (possibly in response to
5311 <a href="#C0413">req_game_record(0413)</a>
5312 )
5313 <p>
5314 The users game record.
5315 </p>
5316 <table border="1" width="100%">
5317 <tr>
5318 <th width="10%">NAME</th>
5319 <th width="8%">TYPE</th>
5320 <th width="4%">VALUE</th>
5321 <th>DESCRIPTION</th>
5322 <th width="10%">GUARD</th>
5323 </tr>
5324 <tr>
5325 <td>name</td>
5326 <td>username</td>
5327 <td> </td>
5328 <td>
5329
5330  
5331 </td>
5332 <td>
5333 <b></b>
5334  
5335 </td>
5336 </tr>
5337 <tr>
5338 <td>more</td>
5339 <td>flag</td>
5340 <td> </td>
5341 <td>
5342 Wether more games are available (must be requested manually)
5343
5344  
5345 </td>
5346 <td>
5347 <b></b>
5348  
5349 </td>
5350 </tr>
5351 <tr>
5352 <td>games</td>
5353 <td>game_record</td>
5354 <td> </td>
5355 <td>
5356
5357  
5358 </td>
5359 <td>
5360 <b></b>
5361  
5362 </td>
5363 </tr>
5364 </table>
5365
5366 <h4>
5367 <a name="S0417"></a>ORIGIN: SERVER;
5368 MESSAGE: error</h4>
5369 NUMERIC TYPE (hex): 0417<p>
5370 </p>
5371 <table border="1" width="100%">
5372 <tr>
5373 <th width="10%">NAME</th>
5374 <th width="8%">TYPE</th>
5375 <th width="4%">VALUE</th>
5376 <th>DESCRIPTION</th>
5377 <th width="10%">GUARD</th>
5378 </tr>
5379 <tr>
5380 <td>message</td>
5381 <td>CONSTANT</td>
5382 <td>Sorry, your opponent is currently not logged in, so you can't resume this game. </td>
5383 <td>
5384
5385  
5386 </td>
5387 <td>
5388 <b></b>
5389  
5390 </td>
5391 </tr>
5392 </table>
5393
5394 <h4>
5395 <a name="S0418"></a>ORIGIN: SERVER;
5396 MESSAGE: error</h4>
5397 NUMERIC TYPE (hex): 0418<p>
5398 </p>
5399 <table border="1" width="100%">
5400 <tr>
5401 <th width="10%">NAME</th>
5402 <th width="8%">TYPE</th>
5403 <th width="4%">VALUE</th>
5404 <th>DESCRIPTION</th>
5405 <th width="10%">GUARD</th>
5406 </tr>
5407 <tr>
5408 <td>message</td>
5409 <td>CONSTANT</td>
5410 <td>Sorry, your opponent is already playing in a game, so you cannot continue this one. </td>
5411 <td>
5412
5413  
5414 </td>
5415 <td>
5416 <b></b>
5417  
5418 </td>
5419 </tr>
5420 </table>
5421
5422 <h4>
5423 <a name="S0419"></a>ORIGIN: SERVER;
5424 MESSAGE: error</h4>
5425 NUMERIC TYPE (hex): 0419<p>
5426 </p>
5427 <table border="1" width="100%">
5428 <tr>
5429 <th width="10%">NAME</th>
5430 <th width="8%">TYPE</th>
5431 <th width="4%">VALUE</th>
5432 <th>DESCRIPTION</th>
5433 <th width="10%">GUARD</th>
5434 </tr>
5435 <tr>
5436 <td>message</td>
5437 <td>CONSTANT</td>
5438 <td>Sorry, the server is out of boards! Please wait a few minutes and try to start a game again. </td>
5439 <td>
5440
5441  
5442 </td>
5443 <td>
5444 <b></b>
5445  
5446 </td>
5447 </tr>
5448 </table>
5449
5450 <h4>
5451 <a name="S041c"></a>ORIGIN: SERVER;
5452 MESSAGE: upd_game2</h4>
5453 NUMERIC TYPE (hex): 041c<p>
5454 Unclear.
5455 </p>
5456 <table border="1" width="100%">
5457 <tr>
5458 <th width="10%">NAME</th>
5459 <th width="8%">TYPE</th>
5460 <th width="4%">VALUE</th>
5461 <th>DESCRIPTION</th>
5462 <th width="10%">GUARD</th>
5463 </tr>
5464 <tr>
5465 <td>channel_junk</td>
5466 <td>U16</td>
5467 <td> </td>
5468 <td>
5469
5470  
5471 </td>
5472 <td>
5473 <b></b>
5474  
5475 </td>
5476 </tr>
5477 <tr>
5478 <td>game</td>
5479 <td>game</td>
5480 <td> </td>
5481 <td>
5482
5483  
5484 </td>
5485 <td>
5486 <b></b>
5487  
5488 </td>
5489 </tr>
5490 </table>
5491
5492 <h4>
5493 <a name="S041f"></a>ORIGIN: SERVER;
5494 MESSAGE: error</h4>
5495 NUMERIC TYPE (hex): 041f<p>
5496 </p>
5497 <table border="1" width="100%">
5498 <tr>
5499 <th width="10%">NAME</th>
5500 <th width="8%">TYPE</th>
5501 <th width="4%">VALUE</th>
5502 <th>DESCRIPTION</th>
5503 <th width="10%">GUARD</th>
5504 </tr>
5505 <tr>
5506 <td>message</td>
5507 <td>CONSTANT</td>
5508 <td>Sorry, the game you tried to load was not correctly saved...probably caused by the server crashing. It cannot be recovered. </td>
5509 <td>
5510
5511  
5512 </td>
5513 <td>
5514 <b></b>
5515  
5516 </td>
5517 </tr>
5518 </table>
5519
5520 <h4>
5521 <a name="S0420"></a>ORIGIN: SERVER;
5522 MESSAGE: error</h4>
5523 NUMERIC TYPE (hex): 0420<p>
5524 </p>
5525 <table border="1" width="100%">
5526 <tr>
5527 <th width="10%">NAME</th>
5528 <th width="8%">TYPE</th>
5529 <th width="4%">VALUE</th>
5530 <th>DESCRIPTION</th>
5531 <th width="10%">GUARD</th>
5532 </tr>
5533 <tr>
5534 <td>message</td>
5535 <td>CONSTANT</td>
5536 <td>Sorry, user "%s" has left the game you are starting before you could challenge them. You will have to play against somebody else. </td>
5537 <td>
5538
5539  
5540 </td>
5541 <td>
5542 <b></b>
5543  
5544 </td>
5545 </tr>
5546 </table>
5547
5548 <h4>
5549 <a name="S0421"></a>ORIGIN: SERVER;
5550 MESSAGE: error</h4>
5551 NUMERIC TYPE (hex): 0421<p>
5552 </p>
5553 <table border="1" width="100%">
5554 <tr>
5555 <th width="10%">NAME</th>
5556 <th width="8%">TYPE</th>
5557 <th width="4%">VALUE</th>
5558 <th>DESCRIPTION</th>
5559 <th width="10%">GUARD</th>
5560 </tr>
5561 <tr>
5562 <td>message</td>
5563 <td>CONSTANT</td>
5564 <td>Sorry, this game is a private lesson. You will not be allowed to observe it. </td>
5565 <td>
5566
5567  
5568 </td>
5569 <td>
5570 <b></b>
5571  
5572 </td>
5573 </tr>
5574 </table>
5575
5576 <h3>Room messages</h3>
5577
5578 <p>Not all room messages are for rooms only, and rooms need to parse
5579 not only these messages. Orthogonality, what for?</p>
5580
5581 <h4>
5582 <a name="S4300"></a>ORIGIN: SERVER;
5583 MESSAGE: join_room</h4>
5584 NUMERIC TYPE (hex): 4300
5585 (possibly in response to
5586 <a href="#C4300">join_room(4300)</a>
5587 )
5588 <p>
5589 </p>
5590 <table border="1" width="100%">
5591 <tr>
5592 <th width="10%">NAME</th>
5593 <th width="8%">TYPE</th>
5594 <th width="4%">VALUE</th>
5595 <th>DESCRIPTION</th>
5596 <th width="10%">GUARD</th>
5597 </tr>
5598 <tr>
5599 <td>channel</td>
5600 <td>U16</td>
5601 <td> </td>
5602 <td>
5603
5604  
5605 </td>
5606 <td>
5607 <b></b>
5608  
5609 </td>
5610 </tr>
5611 <tr>
5612 <td>users</td>
5613 <td>user</td>
5614 <td> </td>
5615 <td>
5616
5617  
5618 </td>
5619 <td>
5620 <b></b>
5621  
5622 </td>
5623 </tr>
5624 </table>
5625
5626 <h4>
5627 <a name="S4301"></a>ORIGIN: SERVER;
5628 MESSAGE: msg_room</h4>
5629 NUMERIC TYPE (hex): 4301<p>
5630 </p>
5631 <table border="1" width="100%">
5632 <tr>
5633 <th width="10%">NAME</th>
5634 <th width="8%">TYPE</th>
5635 <th width="4%">VALUE</th>
5636 <th>DESCRIPTION</th>
5637 <th width="10%">GUARD</th>
5638 </tr>
5639 <tr>
5640 <td>channel</td>
5641 <td>U16</td>
5642 <td> </td>
5643 <td>
5644
5645  
5646 </td>
5647 <td>
5648 <b></b>
5649  
5650 </td>
5651 </tr>
5652 <tr>
5653 <td>name</td>
5654 <td>username</td>
5655 <td> </td>
5656 <td>
5657
5658  
5659 </td>
5660 <td>
5661 <b></b>
5662  
5663 </td>
5664 </tr>
5665 <tr>
5666 <td>message</td>
5667 <td>STRING</td>
5668 <td> </td>
5669 <td>
5670
5671  
5672 </td>
5673 <td>
5674 <b></b>
5675  
5676 </td>
5677 </tr>
5678 </table>
5679
5680 <h4>
5681 <a name="S4302"></a>ORIGIN: SERVER;
5682 MESSAGE: part_room</h4>
5683 NUMERIC TYPE (hex): 4302<p>
5684 </p>
5685 <table border="1" width="100%">
5686 <tr>
5687 <th width="10%">NAME</th>
5688 <th width="8%">TYPE</th>
5689 <th width="4%">VALUE</th>
5690 <th>DESCRIPTION</th>
5691 <th width="10%">GUARD</th>
5692 </tr>
5693 <tr>
5694 <td>channel</td>
5695 <td>U16</td>
5696 <td> </td>
5697 <td>
5698
5699  
5700 </td>
5701 <td>
5702 <b></b>
5703  
5704 </td>
5705 </tr>
5706 <tr>
5707 <td>user</td>
5708 <td>user</td>
5709 <td> </td>
5710 <td>
5711
5712  
5713 </td>
5714 <td>
5715 <b></b>
5716  
5717 </td>
5718 </tr>
5719 </table>
5720
5721 <h4>
5722 <a name="S4303"></a>ORIGIN: SERVER;
5723 MESSAGE: del_room</h4>
5724 NUMERIC TYPE (hex): 4303<p>
5725 </p>
5726 <table border="1" width="100%">
5727 <tr>
5728 <th width="10%">NAME</th>
5729 <th width="8%">TYPE</th>
5730 <th width="4%">VALUE</th>
5731 <th>DESCRIPTION</th>
5732 <th width="10%">GUARD</th>
5733 </tr>
5734 <tr>
5735 <td>channel</td>
5736 <td>U16</td>
5737 <td> </td>
5738 <td>
5739
5740  
5741 </td>
5742 <td>
5743 <b></b>
5744  
5745 </td>
5746 </tr>
5747 </table>
5748
5749 <h4>
5750 <a name="S4304"></a>ORIGIN: SERVER;
5751 MESSAGE: upd_games</h4>
5752 NUMERIC TYPE (hex): 4304<p>
5753 </p>
5754 <table border="1" width="100%">
5755 <tr>
5756 <th width="10%">NAME</th>
5757 <th width="8%">TYPE</th>
5758 <th width="4%">VALUE</th>
5759 <th>DESCRIPTION</th>
5760 <th width="10%">GUARD</th>
5761 </tr>
5762 <tr>
5763 <td>channel</td>
5764 <td>U16</td>
5765 <td> </td>
5766 <td>
5767
5768  
5769 </td>
5770 <td>
5771 <b></b>
5772  
5773 </td>
5774 </tr>
5775 <tr>
5776 <td>games</td>
5777 <td>game</td>
5778 <td> </td>
5779 <td>
5780
5781  
5782 </td>
5783 <td>
5784 <b></b>
5785  
5786 </td>
5787 </tr>
5788 </table>
5789
5790 <h4>
5791 <a name="S4319"></a>ORIGIN: SERVER;
5792 MESSAGE: desc_room</h4>
5793 NUMERIC TYPE (hex): 4319<p>
5794 </p>
5795 <table border="1" width="100%">
5796 <tr>
5797 <th width="10%">NAME</th>
5798 <th width="8%">TYPE</th>
5799 <th width="4%">VALUE</th>
5800 <th>DESCRIPTION</th>
5801 <th width="10%">GUARD</th>
5802 </tr>
5803 <tr>
5804 <td>channel</td>
5805 <td>U16</td>
5806 <td> </td>
5807 <td>
5808
5809  
5810 </td>
5811 <td>
5812 <b></b>
5813  
5814 </td>
5815 </tr>
5816 <tr>
5817 <td>owner</td>
5818 <td>username</td>
5819 <td> </td>
5820 <td>
5821
5822  
5823 </td>
5824 <td>
5825 <b></b>
5826  
5827 </td>
5828 </tr>
5829 <tr>
5830 <td>description</td>
5831 <td>STRING</td>
5832 <td> </td>
5833 <td>
5834
5835  
5836 </td>
5837 <td>
5838 <b></b>
5839  
5840 </td>
5841 </tr>
5842 </table>
5843
5844 <h3>Game messages</h3>
5845
5846 <h4>
5847 <a name="S4400"></a>ORIGIN: SERVER;
5848 MESSAGE: upd_challenge</h4>
5849 NUMERIC TYPE (hex): 4400<p>
5850 Unclear.
5851 </p>
5852 <table border="1" width="100%">
5853 <tr>
5854 <th width="10%">NAME</th>
5855 <th width="8%">TYPE</th>
5856 <th width="4%">VALUE</th>
5857 <th>DESCRIPTION</th>
5858 <th width="10%">GUARD</th>
5859 </tr>
5860 <tr>
5861 <td>channel</td>
5862 <td>U16</td>
5863 <td> </td>
5864 <td>
5865
5866  
5867 </td>
5868 <td>
5869 <b></b>
5870  
5871 </td>
5872 </tr>
5873 <tr>
5874 <td>challenge</td>
5875 <td>challenge</td>
5876 <td> </td>
5877 <td>
5878
5879  
5880 </td>
5881 <td>
5882 <b></b>
5883  
5884 </td>
5885 </tr>
5886 </table>
5887
5888 <h4>
5889 <a name="S4401"></a>ORIGIN: SERVER;
5890 MESSAGE: upd_game</h4>
5891 NUMERIC TYPE (hex): 4401<p>
5892 </p>
5893 <table border="1" width="100%">
5894 <tr>
5895 <th width="10%">NAME</th>
5896 <th width="8%">TYPE</th>
5897 <th width="4%">VALUE</th>
5898 <th>DESCRIPTION</th>
5899 <th width="10%">GUARD</th>
5900 </tr>
5901 <tr>
5902 <td>channel</td>
5903 <td>U16</td>
5904 <td> </td>
5905 <td>
5906
5907  
5908 </td>
5909 <td>
5910 <b></b>
5911  
5912 </td>
5913 </tr>
5914 <tr>
5915 <td>game</td>
5916 <td>game</td>
5917 <td> </td>
5918 <td>
5919
5920  
5921 </td>
5922 <td>
5923 <b></b>
5924  
5925 </td>
5926 </tr>
5927 </table>
5928
5929 <h4>
5930 <a name="S4402"></a>ORIGIN: SERVER;
5931 MESSAGE: del_game</h4>
5932 NUMERIC TYPE (hex): 4402<p>
5933 </p>
5934 <table border="1" width="100%">
5935 <tr>
5936 <th width="10%">NAME</th>
5937 <th width="8%">TYPE</th>
5938 <th width="4%">VALUE</th>
5939 <th>DESCRIPTION</th>
5940 <th width="10%">GUARD</th>
5941 </tr>
5942 <tr>
5943 <td>channel</td>
5944 <td>U16</td>
5945 <td> </td>
5946 <td>
5947
5948  
5949 </td>
5950 <td>
5951 <b></b>
5952  
5953 </td>
5954 </tr>
5955 </table>
5956
5957 <h4>
5958 <a name="S4403"></a>ORIGIN: SERVER;
5959 MESSAGE: upd_observers</h4>
5960 NUMERIC TYPE (hex): 4403<p>
5961 </p>
5962 <table border="1" width="100%">
5963 <tr>
5964 <th width="10%">NAME</th>
5965 <th width="8%">TYPE</th>
5966 <th width="4%">VALUE</th>
5967 <th>DESCRIPTION</th>
5968 <th width="10%">GUARD</th>
5969 </tr>
5970 <tr>
5971 <td>channel</td>
5972 <td>U16</td>
5973 <td> </td>
5974 <td>
5975
5976  
5977 </td>
5978 <td>
5979 <b></b>
5980  
5981 </td>
5982 </tr>
5983 <tr>
5984 <td>users</td>
5985 <td>user</td>
5986 <td> </td>
5987 <td>
5988
5989  
5990 </td>
5991 <td>
5992 <b></b>
5993  
5994 </td>
5995 </tr>
5996 </table>
5997
5998 <h4>
5999 <a name="S4404"></a>ORIGIN: SERVER;
6000 MESSAGE: del_observer</h4>
6001 NUMERIC TYPE (hex): 4404<p>
6002 </p>
6003 <table border="1" width="100%">
6004 <tr>
6005 <th width="10%">NAME</th>
6006 <th width="8%">TYPE</th>
6007 <th width="4%">VALUE</th>
6008 <th>DESCRIPTION</th>
6009 <th width="10%">GUARD</th>
6010 </tr>
6011 <tr>
6012 <td>channel</td>
6013 <td>U16</td>
6014 <td> </td>
6015 <td>
6016
6017  
6018 </td>
6019 <td>
6020 <b></b>
6021  
6022 </td>
6023 </tr>
6024 <tr>
6025 <td>name</td>
6026 <td>username</td>
6027 <td> </td>
6028 <td>
6029
6030  
6031 </td>
6032 <td>
6033 <b></b>
6034  
6035 </td>
6036 </tr>
6037 </table>
6038
6039 <h4>
6040 <a name="S4405"></a>ORIGIN: SERVER;
6041 MESSAGE: set_tree</h4>
6042 NUMERIC TYPE (hex): 4405<p>
6043 </p>
6044 <table border="1" width="100%">
6045 <tr>
6046 <th width="10%">NAME</th>
6047 <th width="8%">TYPE</th>
6048 <th width="4%">VALUE</th>
6049 <th>DESCRIPTION</th>
6050 <th width="10%">GUARD</th>
6051 </tr>
6052 <tr>
6053 <td>channel</td>
6054 <td>U16</td>
6055 <td> </td>
6056 <td>
6057
6058  
6059 </td>
6060 <td>
6061 <b></b>
6062  
6063 </td>
6064 </tr>
6065 <tr>
6066 <td>tree</td>
6067 <td>TREE</td>
6068 <td> </td>
6069 <td>
6070
6071  
6072 </td>
6073 <td>
6074 <b></b>
6075  
6076 </td>
6077 </tr>
6078 </table>
6079
6080 <h4>
6081 <a name="S4406"></a>ORIGIN: SERVER;
6082 MESSAGE: upd_tree</h4>
6083 NUMERIC TYPE (hex): 4406<p>
6084 </p>
6085 <table border="1" width="100%">
6086 <tr>
6087 <th width="10%">NAME</th>
6088 <th width="8%">TYPE</th>
6089 <th width="4%">VALUE</th>
6090 <th>DESCRIPTION</th>
6091 <th width="10%">GUARD</th>
6092 </tr>
6093 <tr>
6094 <td>channel</td>
6095 <td>U16</td>
6096 <td> </td>
6097 <td>
6098
6099  
6100 </td>
6101 <td>
6102 <b></b>
6103  
6104 </td>
6105 </tr>
6106 <tr>
6107 <td>tree</td>
6108 <td>TREE</td>
6109 <td> </td>
6110 <td>
6111
6112  
6113 </td>
6114 <td>
6115 <b></b>
6116  
6117 </td>
6118 </tr>
6119 </table>
6120
6121 <h4>
6122 <a name="S4409"></a>ORIGIN: SERVER;
6123 MESSAGE: superko</h4>
6124 NUMERIC TYPE (hex): 4409<p>
6125 Superko-warning.
6126 </p>
6127 <table border="1" width="100%">
6128 <tr>
6129 <th width="10%">NAME</th>
6130 <th width="8%">TYPE</th>
6131 <th width="4%">VALUE</th>
6132 <th>DESCRIPTION</th>
6133 <th width="10%">GUARD</th>
6134 </tr>
6135 <tr>
6136 <td>channel</td>
6137 <td>U16</td>
6138 <td> </td>
6139 <td>
6140
6141  
6142 </td>
6143 <td>
6144 <b></b>
6145  
6146 </td>
6147 </tr>
6148 </table>
6149
6150 <h4>
6151 <a name="S440b"></a>ORIGIN: SERVER;
6152 MESSAGE: final_result</h4>
6153 NUMERIC TYPE (hex): 440b<p>
6154 </p>
6155 <table border="1" width="100%">
6156 <tr>
6157 <th width="10%">NAME</th>
6158 <th width="8%">TYPE</th>
6159 <th width="4%">VALUE</th>
6160 <th>DESCRIPTION</th>
6161 <th width="10%">GUARD</th>
6162 </tr>
6163 <tr>
6164 <td>channel</td>
6165 <td>U16</td>
6166 <td> </td>
6167 <td>
6168
6169  
6170 </td>
6171 <td>
6172 <b></b>
6173  
6174 </td>
6175 </tr>
6176 <tr>
6177 <td>blackscore</td>
6178 <td>scorevalues</td>
6179 <td> </td>
6180 <td>
6181
6182  
6183 </td>
6184 <td>
6185 <b></b>
6186  
6187 </td>
6188 </tr>
6189 <tr>
6190 <td>whitescore</td>
6191 <td>scorevalues</td>
6192 <td> </td>
6193 <td>
6194
6195  
6196 </td>
6197 <td>
6198 <b></b>
6199  
6200 </td>
6201 </tr>
6202 </table>
6203
6204 <h4>
6205 <a name="S440e"></a>ORIGIN: SERVER;
6206 MESSAGE: req_undo</h4>
6207 NUMERIC TYPE (hex): 440e<p>
6208 </p>
6209 <table border="1" width="100%">
6210 <tr>
6211 <th width="10%">NAME</th>
6212 <th width="8%">TYPE</th>
6213 <th width="4%">VALUE</th>
6214 <th>DESCRIPTION</th>
6215 <th width="10%">GUARD</th>
6216 </tr>
6217 <tr>
6218 <td>channel</td>
6219 <td>U16</td>
6220 <td> </td>
6221 <td>
6222
6223
6224  
6225 </td>
6226 <td>
6227 <b></b>
6228  
6229 </td>
6230 </tr>
6231 </table>
6232
6233 <h4>
6234 <a name="S4410"></a>ORIGIN: SERVER;
6235 MESSAGE: resign_game</h4>
6236 NUMERIC TYPE (hex): 4410<p>
6237 </p>
6238 <table border="1" width="100%">
6239 <tr>
6240 <th width="10%">NAME</th>
6241 <th width="8%">TYPE</th>
6242 <th width="4%">VALUE</th>
6243 <th>DESCRIPTION</th>
6244 <th width="10%">GUARD</th>
6245 </tr>
6246 <tr>
6247 <td>channel</td>
6248 <td>U16</td>
6249 <td> </td>
6250 <td>
6251
6252  
6253 </td>
6254 <td>
6255 <b></b>
6256  
6257 </td>
6258 </tr>
6259 <tr>
6260 <td>player</td>
6261 <td>U8</td>
6262 <td> </td>
6263 <td>
6264
6265  
6266 </td>
6267 <td>
6268 <b></b>
6269  
6270 </td>
6271 </tr>
6272 </table>
6273
6274 <h4>
6275 <a name="S4415"></a>ORIGIN: SERVER;
6276 MESSAGE: game_error</h4>
6277 NUMERIC TYPE (hex): 4415<p>
6278 </p>
6279 <table border="1" width="100%">
6280 <tr>
6281 <th width="10%">NAME</th>
6282 <th width="8%">TYPE</th>
6283 <th width="4%">VALUE</th>
6284 <th>DESCRIPTION</th>
6285 <th width="10%">GUARD</th>
6286 </tr>
6287 <tr>
6288 <td>channel</td>
6289 <td>U16</td>
6290 <td> </td>
6291 <td>
6292
6293  
6294 </td>
6295 <td>
6296 <b></b>
6297  
6298 </td>
6299 </tr>
6300 <tr>
6301 <td>message</td>
6302 <td>CONSTANT</td>
6303 <td>Sorry, this is a lecture game. Only authorized players are allowed to make comments. </td>
6304 <td>
6305
6306  
6307 </td>
6308 <td>
6309 <b></b>
6310  
6311 </td>
6312 </tr>
6313 </table>
6314
6315 <h4>
6316 <a name="S441a"></a>ORIGIN: SERVER;
6317 MESSAGE: set_teacher</h4>
6318 NUMERIC TYPE (hex): 441a<p>
6319 </p>
6320 <table border="1" width="100%">
6321 <tr>
6322 <th width="10%">NAME</th>
6323 <th width="8%">TYPE</th>
6324 <th width="4%">VALUE</th>
6325 <th>DESCRIPTION</th>
6326 <th width="10%">GUARD</th>
6327 </tr>
6328 <tr>
6329 <td>channel</td>
6330 <td>U16</td>
6331 <td> </td>
6332 <td>
6333
6334  
6335 </td>
6336 <td>
6337 <b></b>
6338  
6339 </td>
6340 </tr>
6341 <tr>
6342 <td>name</td>
6343 <td>username</td>
6344 <td> </td>
6345 <td>
6346
6347  
6348 </td>
6349 <td>
6350 <b></b>
6351  
6352 </td>
6353 </tr>
6354 </table>
6355
6356 <h4>
6357 <a name="S441d"></a>ORIGIN: SERVER;
6358 MESSAGE: owner_left</h4>
6359 NUMERIC TYPE (hex): 441d<p>
6360 </p>
6361 <table border="1" width="100%">
6362 <tr>
6363 <th width="10%">NAME</th>
6364 <th width="8%">TYPE</th>
6365 <th width="4%">VALUE</th>
6366 <th>DESCRIPTION</th>
6367 <th width="10%">GUARD</th>
6368 </tr>
6369 <tr>
6370 <td>channel</td>
6371 <td>U16</td>
6372 <td> </td>
6373 <td>
6374
6375  
6376 </td>
6377 <td>
6378 <b></b>
6379  
6380 </td>
6381 </tr>
6382 <tr>
6383 <td>message</td>
6384 <td>CONSTANT</td>
6385 <td>Sorry, the owner of this game has left. Nobody will be allowed to edit it until the owner returns. </td>
6386 <td>
6387
6388  
6389 </td>
6390 <td>
6391 <b></b>
6392  
6393 </td>
6394 </tr>
6395 </table>
6396
6397 <h4>
6398 <a name="S441e"></a>ORIGIN: SERVER;
6399 MESSAGE: teacher_left</h4>
6400 NUMERIC TYPE (hex): 441e<p>
6401 Unclear.
6402 </p>
6403 <table border="1" width="100%">
6404 <tr>
6405 <th width="10%">NAME</th>
6406 <th width="8%">TYPE</th>
6407 <th width="4%">VALUE</th>
6408 <th>DESCRIPTION</th>
6409 <th width="10%">GUARD</th>
6410 </tr>
6411 <tr>
6412 <td>channel</td>
6413 <td>U16</td>
6414 <td> </td>
6415 <td>
6416
6417  
6418 </td>
6419 <td>
6420 <b></b>
6421  
6422 </td>
6423 </tr>
6424 </table>
6425
6426 <h4>
6427 <a name="S4422"></a>ORIGIN: SERVER;
6428 MESSAGE: allow_user_result</h4>
6429 NUMERIC TYPE (hex): 4422<p>
6430 </p>
6431 <table border="1" width="100%">
6432 <tr>
6433 <th width="10%">NAME</th>
6434 <th width="8%">TYPE</th>
6435 <th width="4%">VALUE</th>
6436 <th>DESCRIPTION</th>
6437 <th width="10%">GUARD</th>
6438 </tr>
6439 <tr>
6440 <td>message</td>
6441 <td>CONSTANT</td>
6442 <td>User "%s" will now be allowed full access to your game. </td>
6443 <td>
6444
6445  
6446 </td>
6447 <td>
6448 <b></b>
6449  
6450 </td>
6451 </tr>
6452 <tr>
6453 <td>channel</td>
6454 <td>U16</td>
6455 <td> </td>
6456 <td>
6457
6458  
6459 </td>
6460 <td>
6461 <b></b>
6462  
6463 </td>
6464 </tr>
6465 </table>
6466
6467 <h4>
6468 <a name="S4424"></a>ORIGIN: SERVER;
6469 MESSAGE: allow_user_result</h4>
6470 NUMERIC TYPE (hex): 4424<p>
6471 </p>
6472 <table border="1" width="100%">
6473 <tr>
6474 <th width="10%">NAME</th>
6475 <th width="8%">TYPE</th>
6476 <th width="4%">VALUE</th>
6477 <th>DESCRIPTION</th>
6478 <th width="10%">GUARD</th>
6479 </tr>
6480 <tr>
6481 <td>message</td>
6482 <td>CONSTANT</td>
6483 <td>Sorry, user "%s" is a guest and cannot be allowed full access to your game. </td>
6484 <td>
6485
6486  
6487 </td>
6488 <td>
6489 <b></b>
6490  
6491 </td>
6492 </tr>
6493 <tr>
6494 <td>channel</td>
6495 <td>U16</td>
6496 <td> </td>
6497 <td>
6498
6499  
6500 </td>
6501 <td>
6502 <b></b>
6503  
6504 </td>
6505 </tr>
6506 </table>
6507
6508 <h4>
6509 <a name="S4425"></a>ORIGIN: SERVER;
6510 MESSAGE: allow_user_result</h4>
6511 NUMERIC TYPE (hex): 4425<p>
6512 </p>
6513 <table border="1" width="100%">
6514 <tr>
6515 <th width="10%">NAME</th>
6516 <th width="8%">TYPE</th>
6517 <th width="4%">VALUE</th>
6518 <th>DESCRIPTION</th>
6519 <th width="10%">GUARD</th>
6520 </tr>
6521 <tr>
6522 <td>message</td>
6523 <td>CONSTANT</td>
6524 <td>Sorry, user "%s" does not seem to exist and cannot be allowed into your game. </td>
6525 <td>
6526
6527  
6528 </td>
6529 <td>
6530 <b></b>
6531  
6532 </td>
6533 </tr>
6534 <tr>
6535 <td>channel</td>
6536 <td>U16</td>
6537 <td> </td>
6538 <td>
6539
6540  
6541 </td>
6542 <td>
6543 <b></b>
6544  
6545 </td>
6546 </tr>
6547 </table>
6548
6549 <h4>
6550 <a name="S4428"></a>ORIGIN: SERVER;
6551 MESSAGE: add_tree</h4>
6552 NUMERIC TYPE (hex): 4428<p>
6553 <p>See <a href="#S4405">set_tree(4405)</a>. In addition, flags the tree as being
6554 uploaded completely.</p>
6555 </p>
6556 <table border="1" width="100%">
6557 <tr>
6558 <th width="10%">NAME</th>
6559 <th width="8%">TYPE</th>
6560 <th width="4%">VALUE</th>
6561 <th>DESCRIPTION</th>
6562 <th width="10%">GUARD</th>
6563 </tr>
6564 <tr>
6565 <td>channel</td>
6566 <td>U16</td>
6567 <td> </td>
6568 <td>
6569
6570  
6571 </td>
6572 <td>
6573 <b></b>
6574  
6575 </td>
6576 </tr>
6577 <tr>
6578 <td>tree</td>
6579 <td>TREE</td>
6580 <td> </td>
6581 <td>
6582
6583  
6584 </td>
6585 <td>
6586 <b></b>
6587  
6588 </td>
6589 </tr>
6590 </table>
6591
6592 <h4>
6593 <a name="S4429"></a>ORIGIN: SERVER;
6594 MESSAGE: reject_challenge</h4>
6595 NUMERIC TYPE (hex): 4429<p>
6596 Reject a challenge by a given user. Not checked.
6597
6598 </p>
6599 <table border="1" width="100%">
6600 <tr>
6601 <th width="10%">NAME</th>
6602 <th width="8%">TYPE</th>
6603 <th width="4%">VALUE</th>
6604 <th>DESCRIPTION</th>
6605 <th width="10%">GUARD</th>
6606 </tr>
6607 <tr>
6608 <td>channel</td>
6609 <td>U16</td>
6610 <td> </td>
6611 <td>
6612
6613  
6614 </td>
6615 <td>
6616 <b></b>
6617  
6618 </td>
6619 </tr>
6620 <tr>
6621 <td>name</td>
6622 <td>username</td>
6623 <td> </td>
6624 <td>
6625
6626  
6627 </td>
6628 <td>
6629 <b></b>
6630  
6631 </td>
6632 </tr>
6633 </table>
6634
6635 <h4>
6636 <a name="S4433"></a>ORIGIN: SERVER;
6637 MESSAGE: req_result</h4>
6638 NUMERIC TYPE (hex): 4433<p>
6639 Unclear.
6640 </p>
6641 <table border="1" width="100%">
6642 <tr>
6643 <th width="10%">NAME</th>
6644 <th width="8%">TYPE</th>
6645 <th width="4%">VALUE</th>
6646 <th>DESCRIPTION</th>
6647 <th width="10%">GUARD</th>
6648 </tr>
6649 <tr>
6650 <td>channel</td>
6651 <td>U16</td>
6652 <td> </td>
6653 <td>
6654 # # recv_result(?)
6655
6656  
6657 </td>
6658 <td>
6659 <b></b>
6660  
6661 </td>
6662 </tr>
6663 </table>
6664
6665 <h4>
6666 <a name="S4434"></a>ORIGIN: SERVER;
6667 MESSAGE: unknown4434</h4>
6668 NUMERIC TYPE (hex): 4434<p>
6669 </p>
6670 <table border="1" width="100%">
6671 <tr>
6672 <th width="10%">NAME</th>
6673 <th width="8%">TYPE</th>
6674 <th width="4%">VALUE</th>
6675 <th>DESCRIPTION</th>
6676 <th width="10%">GUARD</th>
6677 </tr>
6678 <tr>
6679 <td>channel</td>
6680 <td>U16</td>
6681 <td> </td>
6682 <td>
6683
6684  
6685 </td>
6686 <td>
6687 <b></b>
6688  
6689 </td>
6690 </tr>
6691 <tr>
6692 <td>b1</td>
6693 <td>U8</td>
6694 <td> </td>
6695 <td>
6696 ?? !demonstration game??
6697
6698  
6699 </td>
6700 <td>
6701 <b></b>
6702  
6703 </td>
6704 </tr>
6705 </table>
6706
6707 </body>
6708 </html>