<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://script.quakenet.org/wiki/index.php?action=history&amp;feed=atom&amp;title=Tictactoe</id>
	<title>Tictactoe - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://script.quakenet.org/wiki/index.php?action=history&amp;feed=atom&amp;title=Tictactoe"/>
	<link rel="alternate" type="text/html" href="https://script.quakenet.org/wiki/index.php?title=Tictactoe&amp;action=history"/>
	<updated>2026-05-31T02:52:25Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>https://script.quakenet.org/wiki/index.php?title=Tictactoe&amp;diff=4947&amp;oldid=prev</id>
		<title>Vliedel: DAMN BOLD CHARS</title>
		<link rel="alternate" type="text/html" href="https://script.quakenet.org/wiki/index.php?title=Tictactoe&amp;diff=4947&amp;oldid=prev"/>
		<updated>2010-09-27T22:40:29Z</updated>

		<summary type="html">&lt;p&gt;DAMN BOLD CHARS&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 22:40, 27 September 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l165&quot;&gt;Line 165:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 165:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;    var %win = $iif(($3 &amp;gt; 1) &amp;amp;&amp;amp; (1 // $3),$3,3)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;    var %win = $iif(($3 &amp;gt; 1) &amp;amp;&amp;amp; (1 // $3),$3,3)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;    set -u300 %tictactoe.req $nick %field %win&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;    set -u300 %tictactoe.req $nick %field %win&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;    echo -ag &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;�tictactoe� &lt;/del&gt;$nick wants to play a game of tictactoe with you. The field is $+(%field,x,%field) and you need to connect %win to win.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;    echo -ag &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;$+($chr(2),tictactoe,$chr(2)) &lt;/ins&gt;$nick wants to play a game of tictactoe with you. The field is $+(%field,x,%field) and you need to connect %win to win.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;    echo -ag &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;�tictactoe� &lt;/del&gt;Use /tictac $nick to accept the game.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;    echo -ag &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;$+($chr(2),tictactoe,$chr(2)) &lt;/ins&gt;Use /tictac $nick to accept the game.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Vliedel</name></author>
	</entry>
	<entry>
		<id>https://script.quakenet.org/wiki/index.php?title=Tictactoe&amp;diff=2771&amp;oldid=prev</id>
		<title>Vliedel: spellling!</title>
		<link rel="alternate" type="text/html" href="https://script.quakenet.org/wiki/index.php?title=Tictactoe&amp;diff=2771&amp;oldid=prev"/>
		<updated>2010-09-27T22:34:44Z</updated>

		<summary type="html">&lt;p&gt;spellling!&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 22:34, 27 September 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l3&quot;&gt;Line 3:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 3:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  This script is a joke, yet fully functional&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  This script is a joke, yet fully functional&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  You can play it over IRC, or at &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;the &lt;/del&gt;your own client&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  You can play it over IRC, or at your own client&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  Usage:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  Usage:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Vliedel</name></author>
	</entry>
	<entry>
		<id>https://script.quakenet.org/wiki/index.php?title=Tictactoe&amp;diff=2770&amp;oldid=prev</id>
		<title>Vliedel: category</title>
		<link rel="alternate" type="text/html" href="https://script.quakenet.org/wiki/index.php?title=Tictactoe&amp;diff=2770&amp;oldid=prev"/>
		<updated>2010-09-27T22:29:53Z</updated>

		<summary type="html">&lt;p&gt;category&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 22:29, 27 September 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l332&quot;&gt;Line 332:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 332:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;    }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;    }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:Script_Archive]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Vliedel</name></author>
	</entry>
	<entry>
		<id>https://script.quakenet.org/wiki/index.php?title=Tictactoe&amp;diff=2769&amp;oldid=prev</id>
		<title>Vliedel: pasted script</title>
		<link rel="alternate" type="text/html" href="https://script.quakenet.org/wiki/index.php?title=Tictactoe&amp;diff=2769&amp;oldid=prev"/>
		<updated>2010-09-27T22:28:40Z</updated>

		<summary type="html">&lt;p&gt;pasted script&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt; /*&lt;br /&gt;
 tic-tac-toe by Vliedel #help.script @ QuakeNet&lt;br /&gt;
 &lt;br /&gt;
 This script is a joke, yet fully functional&lt;br /&gt;
 You can play it over IRC, or at the your own client&lt;br /&gt;
 &lt;br /&gt;
 Usage:&lt;br /&gt;
 &lt;br /&gt;
 /tictac [nick] [N M]&lt;br /&gt;
 &lt;br /&gt;
 where:&lt;br /&gt;
 nick:  the nick on IRC you want to play against&lt;br /&gt;
 N:     field size of N x N (default 3)&lt;br /&gt;
 M:     number of crosses/circles you need to connect to win the game (default 3)&lt;br /&gt;
 &lt;br /&gt;
 Notes:&lt;br /&gt;
 -Yes it is slow, that was part of the joke: I draw each pixel seperately&lt;br /&gt;
 -Yes you can cheat, I didn&amp;#039;t include enough checks against cheating&lt;br /&gt;
 -The script does not keep up nickchanges or anything like that&lt;br /&gt;
 -If anyting gets stuck, or you want to stop, just: /hfree tictac&lt;br /&gt;
 -You can change the number of the first 4 aliases to change the sizes of the drawings&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 alias -l fontsize { return 15 }&lt;br /&gt;
 alias -l pix { return 300 }&lt;br /&gt;
 alias -l bordersize { return 10 }&lt;br /&gt;
 alias -l innersize { return 7 }&lt;br /&gt;
 &lt;br /&gt;
 alias tictac {&lt;br /&gt;
   ; if used as identifier, calculate and show the result&lt;br /&gt;
   if ($isid) {&lt;br /&gt;
     ; field size (square)&lt;br /&gt;
     var %field = $iif(($2 &amp;gt; 1) &amp;amp;&amp;amp; (1 // $1),$2,3)&lt;br /&gt;
     ; you need to connect %win to win the game&lt;br /&gt;
     var %win = $iif(($3 &amp;gt; 1) &amp;amp;&amp;amp; (1 // $1),$3,3)&lt;br /&gt;
 &lt;br /&gt;
     if ($len($1) !== $calc(%field ^2)) || ($calc($count($1,0) + $count($1,1) + $count($1,2)) &amp;lt; $v1) { return }&lt;br /&gt;
 &lt;br /&gt;
     ; check horizontal winnings&lt;br /&gt;
     var %h = $calc(%field - %win +1)&lt;br /&gt;
     while (%h) {&lt;br /&gt;
       var %i = $calc(%field * (%field - 1) + %h)&lt;br /&gt;
       while (%i &amp;gt; 0) {&lt;br /&gt;
         var %p = $mid($1,%i,1) , %w = %i&lt;br /&gt;
         if (%p) {&lt;br /&gt;
           var %j = $calc(%i + %win -1)&lt;br /&gt;
           while (%j &amp;gt; %i) {&lt;br /&gt;
             if ($mid($1,%j,1) !== %p) { var %p | break }&lt;br /&gt;
             var %w = %w %j&lt;br /&gt;
             dec %j&lt;br /&gt;
           }&lt;br /&gt;
           if (%p) { goto win }&lt;br /&gt;
         }&lt;br /&gt;
         dec %i %field&lt;br /&gt;
       }&lt;br /&gt;
       dec %h&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     ; check for vertical winnings&lt;br /&gt;
     var %h = $calc(%field - %win +1) , %i = $calc(%field * %h)&lt;br /&gt;
     while (%i) {&lt;br /&gt;
       var %p = $mid($1,%i,1) , %w = %i&lt;br /&gt;
       if (%p) {&lt;br /&gt;
         var %j = $calc(%i + %field * (%win -1))&lt;br /&gt;
         while (%j &amp;gt; %i) {&lt;br /&gt;
           if ($mid($1,%j,1) !== %p) { var %p | break }&lt;br /&gt;
           var %w = %w %j&lt;br /&gt;
           dec %j %field&lt;br /&gt;
         }&lt;br /&gt;
         if (%p) { goto win }&lt;br /&gt;
       }&lt;br /&gt;
       dec %i&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     ; check for diagonal winnings (up left to low right)&lt;br /&gt;
     var %h = $calc(%field - %win +1)&lt;br /&gt;
     while (%h) {&lt;br /&gt;
       var %i = $calc(%field * (%h -1) + %h)&lt;br /&gt;
       while (%i &amp;gt; 0) {&lt;br /&gt;
         var %p = $mid($1,%i,1) , %w = %i&lt;br /&gt;
         if (%p) {&lt;br /&gt;
           var %j = $calc(%i + (%win -1) * (%field +1))&lt;br /&gt;
           while (%j &amp;gt; %i) {&lt;br /&gt;
             if ($mid($1,%j,1) !== %p) { var %p | break }&lt;br /&gt;
             var %w = %w %j&lt;br /&gt;
             dec %j $calc(%field +1)&lt;br /&gt;
           }&lt;br /&gt;
           if (%p) { goto win }&lt;br /&gt;
         }&lt;br /&gt;
         dec %i %field&lt;br /&gt;
       }&lt;br /&gt;
       dec %h&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     ; check for diagonal winnings (up right to down left)&lt;br /&gt;
     var %h = $calc(%field - %win +1)&lt;br /&gt;
     while (%h) {&lt;br /&gt;
       var %i = $calc(%field * (%h -1) + %win + %h -1)&lt;br /&gt;
       while (%i &amp;gt; 0) {&lt;br /&gt;
         var %p = $mid($1,%i,1) , %w = %i&lt;br /&gt;
         if (%p) {&lt;br /&gt;
           var %j $calc(%i + (%win -1) * (%field -1))&lt;br /&gt;
           while (%j &amp;gt; %i) {&lt;br /&gt;
             if ($mid($1,%j,1) !== %p) { var %p | break }&lt;br /&gt;
             var %w = %w %j&lt;br /&gt;
             dec %j $calc(%field -1)&lt;br /&gt;
           }&lt;br /&gt;
           if (%p) { goto win }&lt;br /&gt;
         }&lt;br /&gt;
         dec %i %field&lt;br /&gt;
       }&lt;br /&gt;
       dec %h&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     ; no winner was found, return 0&lt;br /&gt;
     drawfield $1 %win&lt;br /&gt;
     return 0&lt;br /&gt;
 &lt;br /&gt;
     ; if a winning player has been found, we end up here with %p the winning player&lt;br /&gt;
     :win&lt;br /&gt;
     drawfield $1 %win %p %w&lt;br /&gt;
     return %p&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
     ; start a tictactoe game&lt;br /&gt;
     ; [$1 = nick]  [$2 = field size   $3 = number of crosses/circles you need to connect to win the game]&lt;br /&gt;
     var %vs&lt;br /&gt;
     if (($1 != $null) &amp;amp;&amp;amp; ($1 == $gettok(%tictactoe.req,1,32))) { tokenize 32 %tictactoe.req | var %vs = 1 | .notice $v2 -tictactoe accept }&lt;br /&gt;
     if ($comchan($1,1)) { var %nick = $iif($1 !== $me,$1) | tokenize 32 $2- }&lt;br /&gt;
     var %field = $iif(($1 &amp;gt; 1) &amp;amp;&amp;amp; (1 // $1),$1,3)&lt;br /&gt;
     var %win = $iif(($2 &amp;gt; 1) &amp;amp;&amp;amp; (1 // $2),$2,3)&lt;br /&gt;
     if (%win &amp;gt; %field) {&lt;br /&gt;
       echo -ag Usage: /tictac [nick] [N M]&lt;br /&gt;
       echo -ag nick: the nick on IRC you want to play against&lt;br /&gt;
       echo -ag N = field size of N x N (default 3)&lt;br /&gt;
       echo -ag M = number of crosses/circles you need to connect to win the game (default 3)&lt;br /&gt;
       return&lt;br /&gt;
     }&lt;br /&gt;
     if ($hget(tictac)) { hfree tictac }&lt;br /&gt;
     var %state = $str(0,$calc(%field ^2))&lt;br /&gt;
     hmake tictac&lt;br /&gt;
     hadd tictac turn 1&lt;br /&gt;
     if (%vs) { hadd tictac me 2 }&lt;br /&gt;
     elseif (%nick) { hadd tictac me 1 }&lt;br /&gt;
     hadd tictac field %field&lt;br /&gt;
     hadd tictac win %win&lt;br /&gt;
     hadd tictac state %state&lt;br /&gt;
     hadd tictac nick %nick&lt;br /&gt;
     if (!%vs) &amp;amp;&amp;amp; (%nick) { .notice %nick -tictactoe %field %win }&lt;br /&gt;
     else { drawfield %state %win }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 on ^*:NOTICE:-tictactoe state &amp;amp;:?:{&lt;br /&gt;
   if ($hget(tictac,nick) == $nick) &amp;amp;&amp;amp; ($sqrt($len($3)) == $hget(tictac,field))  {&lt;br /&gt;
     haltdef&lt;br /&gt;
     hadd tictac state $3&lt;br /&gt;
     noop $tictac($3,$hget(tictac,field),$hget(tictac,win))&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 on ^*:NOTICE:-tictactoe &amp;amp; &amp;amp;:?:{&lt;br /&gt;
   haltdef&lt;br /&gt;
   var %field = $iif(($2 &amp;gt; 1) &amp;amp;&amp;amp; (1 // $2),$2,3)&lt;br /&gt;
   var %win = $iif(($3 &amp;gt; 1) &amp;amp;&amp;amp; (1 // $3),$3,3)&lt;br /&gt;
   set -u300 %tictactoe.req $nick %field %win&lt;br /&gt;
   echo -ag �tictactoe� $nick wants to play a game of tictactoe with you. The field is $+(%field,x,%field) and you need to connect %win to win.&lt;br /&gt;
   echo -ag �tictactoe� Use /tictac $nick to accept the game.&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 on ^*:NOTICE:-tictactoe accept:?:{&lt;br /&gt;
   if ($hget(tictac,nick) == $nick) {&lt;br /&gt;
     haltdef&lt;br /&gt;
     drawfield $hget(tictac,state) $hget(tictac,win)&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 ; $1 = positions   $2 = %win   [$3 = winning player   $4- = winning fields]&lt;br /&gt;
 alias -l drawfield {&lt;br /&gt;
   var %field = $sqrt($len($1)) , %w = $+(@,tictactoe_,%field,_,$2)&lt;br /&gt;
   if ($window(%w)) { window -c %w }&lt;br /&gt;
   window -aBfp +d %w 50 50 $pix $calc($pix + $height(I,Lucida Console,$fontsize) + 10)&lt;br /&gt;
 &lt;br /&gt;
   ; draw border lines&lt;br /&gt;
   var %h = $bordersize - 1&lt;br /&gt;
   while (%h &amp;gt;= 0) {&lt;br /&gt;
     var %i = $calc($pix - %h -1) , %m = %i&lt;br /&gt;
     var %c = $rgb(255,$calc(255 - 128 / $int($bordersize /2) * %h),$calc(128 * ($bordersize - %h) / $bordersize))&lt;br /&gt;
     while (%i &amp;gt;= %h) {&lt;br /&gt;
       drawdot -r %w %c 1 %i %h %i %m %m %i %h %i&lt;br /&gt;
       dec %i&lt;br /&gt;
     }&lt;br /&gt;
     dec %h&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   ; fill field with the background color&lt;br /&gt;
   var %x = $bordersize - 1 , %xm = $calc($pix - $bordersize -1)&lt;br /&gt;
   var %ym = $calc($pix - $bordersize -1) , %c = $rgb(15,15,15)&lt;br /&gt;
   while (%x &amp;lt;= %xm) {&lt;br /&gt;
     var %y = %x&lt;br /&gt;
     while (%y &amp;lt;= %ym) {&lt;br /&gt;
       drawdot -r %w %c 1 %x %y %y %x&lt;br /&gt;
       inc %y&lt;br /&gt;
     }&lt;br /&gt;
     inc %x&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   ; draw inner lines (innersize must be odd?)&lt;br /&gt;
   var %h = %field - 1 , %innerpix = $calc($pix - 2 * $bordersize)&lt;br /&gt;
   var %tilepix = $calc((%innerpix - (%field -1) * $innersize) / %field)&lt;br /&gt;
   while (%h) {&lt;br /&gt;
     var %i = 0 - $int($calc($innersize / 2)) , %m = $int($calc($innersize / 2))&lt;br /&gt;
     while (%i &amp;lt;= %m) {&lt;br /&gt;
       var %y = $calc($pix - $bordersize -1) , %ym = $bordersize - 1&lt;br /&gt;
       var %x = $round($calc($bordersize -1 + %tilepix * %h + $innersize * (%h -1) + $ceil($calc($innersize /2)) + %i),0)&lt;br /&gt;
       var %c = $rgb($calc(128 - 128 / $int($innersize /2) * $abs(%i)),$calc(128 - 128 / $int($innersize /2) * $abs(%i)),255)&lt;br /&gt;
       while (%y &amp;gt;= %ym) {&lt;br /&gt;
         drawdot -r %w %c 1 %x %y %y %x&lt;br /&gt;
         dec %y&lt;br /&gt;
       }&lt;br /&gt;
       inc %i&lt;br /&gt;
     }&lt;br /&gt;
     dec %h&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   /*&lt;br /&gt;
   ; fill each tile with the background color&lt;br /&gt;
   var %h = %field , %c = $rgb(15,15,15)&lt;br /&gt;
   while (%h) {&lt;br /&gt;
     var %i = %field&lt;br /&gt;
     while (%i &amp;gt;= %h) {&lt;br /&gt;
       var %x = $round($calc($bordersize -1 + (%h -1) * (%tilepix + $innersize)),0) , %xm = $round($calc(%x + %tilepix),0)&lt;br /&gt;
       while (%x &amp;lt;= %xm) {&lt;br /&gt;
         var %y = $round($calc($bordersize -1 + (%i -1) * (%tilepix + $innersize)),0) , %ym = $round($calc(%y + %tilepix),0)&lt;br /&gt;
         while (%y &amp;lt;= %ym) {&lt;br /&gt;
           drawdot -r %w %c 1 %x %y %y %x&lt;br /&gt;
           inc %y&lt;br /&gt;
         }&lt;br /&gt;
         inc %x&lt;br /&gt;
       }&lt;br /&gt;
       dec %i&lt;br /&gt;
     }&lt;br /&gt;
     dec %h&lt;br /&gt;
   }&lt;br /&gt;
   */&lt;br /&gt;
 &lt;br /&gt;
   ; draw the crosses and circles&lt;br /&gt;
   var %h = %field&lt;br /&gt;
   while (%h) {&lt;br /&gt;
     var %i = %field&lt;br /&gt;
     while (%i) {&lt;br /&gt;
       var %pos = $calc((%h -1) * %field + %i) , %p = $mid($1,%pos,1)&lt;br /&gt;
       if (!%p) { dec %i | continue }&lt;br /&gt;
       var %xc = $round($calc($bordersize -1 + (%i -1) * (%tilepix + $innersize) + %tilepix / 2),0)&lt;br /&gt;
       var %yc = $round($calc($bordersize -1 + (%h -1) * (%tilepix + $innersize) + %tilepix / 2),0)&lt;br /&gt;
       if (%p == 1) {&lt;br /&gt;
         var %j = $round($calc(%tilepix * 0.4),0) , %c = $rgb(0,255,0)&lt;br /&gt;
         while (%j &amp;gt; -1) {&lt;br /&gt;
           drawdot -r %w %c 1 $calc(%xc + %j) $calc(%yc + %j) $calc(%xc - %j) $calc(%yc + %j) $calc(%xc + %j) $calc(%yc - %j) $calc(%xc - %j) $calc(%yc - %j)&lt;br /&gt;
           dec %j&lt;br /&gt;
         }&lt;br /&gt;
         if ($istok($4-,%pos,32)) {&lt;br /&gt;
           var %j = $round($calc(%tilepix * 0.3),0) , %c = $rgb(0,255,0)&lt;br /&gt;
           while (%j &amp;gt; -1) {&lt;br /&gt;
             drawdot -r %w %c 1 $calc(%xc + %j) %yc $calc(%xc - %j) %yc %xc $calc(%yc - %j) %xc $calc(%yc + %j)&lt;br /&gt;
             dec %j&lt;br /&gt;
           }&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
       elseif (%p == 2) {&lt;br /&gt;
         var %r = $round($calc(%tilepix * 0.4),0) , %c = $rgb(255,0,0) , %t = 360&lt;br /&gt;
         while (%t) {&lt;br /&gt;
           drawdot -r %w %c 1 $calc(%xc + %r * $cos(%t).deg) $calc(%yc + %r * $sin(%t).deg)&lt;br /&gt;
           dec %t&lt;br /&gt;
         }&lt;br /&gt;
         if ($istok($4-,%pos,32)) {&lt;br /&gt;
           var %r = $round($calc(%tilepix * 0.3),0) , %c = $rgb(255,0,0) , %t = 160&lt;br /&gt;
           while (%t &amp;gt;= 30) {&lt;br /&gt;
             drawdot -r %w %c 1 $calc(%xc + %r * $cos(%t).deg) $calc(%yc + %r * $sin(%t).deg)&lt;br /&gt;
             dec %t&lt;br /&gt;
           }&lt;br /&gt;
           var %r = $round($calc(%tilepix * 0.25),0)&lt;br /&gt;
           drawdot -r %w %c 3 $calc(%xc + %r * $cos(225).deg) $calc(%yc + %r * $sin(225).deg)&lt;br /&gt;
           drawdot -r %w %c 3 $calc(%xc + %r * $cos(315).deg) $calc(%yc + %r * $sin(315).deg)&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
 &lt;br /&gt;
       dec %i&lt;br /&gt;
     }&lt;br /&gt;
     dec %h&lt;br /&gt;
   }&lt;br /&gt;
   ;set turn to the correct value&lt;br /&gt;
   if ($hget(tictac)) { hadd tictac turn $iif($count($1,1) &amp;gt; $count($1,2),2,1) }&lt;br /&gt;
 &lt;br /&gt;
   ; display text&lt;br /&gt;
   if ($3) { var %t = Player $3 wins! | if ($hget(tictac)) { hfree tictac } }&lt;br /&gt;
   elseif (0 !isin $1) { var %t = Draw game! | if ($hget(tictac)) { hfree tictac } }&lt;br /&gt;
   elseif ($hget(tictac)) { var %t = Player $hget(tictac,turn) $+ &amp;#039;s turn }&lt;br /&gt;
   drawtext -r %w $rgb(255,128,0) &amp;quot;Lucida Console&amp;quot; $fontsize 5 $calc($pix +5) %t&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 menu @tictactoe_* {&lt;br /&gt;
   sclick:click $active $mouse.x $mouse.y&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 ; $1 = window   $2 = x   $3 = y&lt;br /&gt;
 alias -l click {&lt;br /&gt;
   if ($hget(tictac,me)) &amp;amp;&amp;amp; ($v1 !== $hget(tictac,turn)) { return }&lt;br /&gt;
   var %field = $gettok($1,2,95) , %win = $gettok($1,3,95)&lt;br /&gt;
   if (%field !== $hget(tictac,field)) || (%win !== $hget(tictac,win)) { return }&lt;br /&gt;
   var %h = %field , %state = $hget(tictac,state)&lt;br /&gt;
   var %innerpix = $calc($pix - 2 * $bordersize)&lt;br /&gt;
   var %tilepix = $calc((%innerpix - (%field -1) * $innersize) / %field)&lt;br /&gt;
   while (%h) {&lt;br /&gt;
     var %i = %field&lt;br /&gt;
     while (%i) {&lt;br /&gt;
       var %pos = $calc((%h -1) * %field + %i) , %p = $mid(%state,%pos,1)&lt;br /&gt;
       if (!%p) {&lt;br /&gt;
         var %x = $round($calc($bordersize -1 + (%i -1) * (%tilepix + $innersize)),0)&lt;br /&gt;
         var %y = $round($calc($bordersize -1 + (%h -1) * (%tilepix + $innersize)),0)&lt;br /&gt;
         if ($inrect($2,$3,%x,%y,%tilepix,%tilepix)) {&lt;br /&gt;
           var %state = $+($left(%state,$calc(%pos -1)),$hget(tictac,turn),$mid(%state,$calc(%pos +1)))&lt;br /&gt;
           hadd tictac state %state&lt;br /&gt;
           if ($hget(tictac,nick)) { .notice $v1 -tictactoe state %state }&lt;br /&gt;
           noop $tictac(%state,%field,%win)&lt;br /&gt;
           return&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
       dec %i&lt;br /&gt;
     }&lt;br /&gt;
     dec %h&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Vliedel</name></author>
	</entry>
</feed>