This is an update to eahm's archival post. Even though random colors has been added so that you no longer need a script to give everyone a random color based on their nick/address/whatever, some people may still be scripting the random nick colors for reasons I mentioned in this other thread.

The choice of nick colors configured into the above script's palette needs to choose colors with 3 competing constraints.

* #1 Palette needs to have a high-enough group of colors to offer a decent chance that nicks will be randomly assigned different colors.

* #2 Colors need to contrast well against the background, and the built-in palette allows some low-contrast blue-on-black combos which may appear to contrast 'well enough' when your eyes are close to the monitor, the contrast deteriorates when eyes are at an arms-length distance.

* #3 Colors need to be contrasting against each other, so that nicks assigned to different colors look different-enough from each other.

These 3 goals are hard to achieve with the blues when using a blackground. The default color scheme has color indexes 2, 10, 11, 12 which are basically 4 shades of blue. When black is your background color only 11 - and to some degree 10 - contrast against black. While you can edit the RGB shade for index 2 and 12, it's hard to find color settings where 2 and 12 are hard to tell apart from 11 and 10 while still being able to be seen against the black.


In my earlier post, I'd suggested using $crc because it should be much faster than $md5 due to being a simpler calculation, so there's less overhead calculating a $crc on each channel message instead of doing the same with $md5.

However, in another thread I'd actually benchmarked $crc against $md5, and it had turned out that $crc was actually no faster than $md5.

However, along with $crc64 being added, $crc has now been sped-up so that it's several hundred percent faster than it formerly was. The new $crc64 has similar speed to the 32-bit $crc, faster than $md5, but it also fills the "seeded RNG" role of $crc in a way which produces 2^64 outcomes instead of 2^32.

$crc and $crc64 are NOT appropriate as a random number generator when the outcome needs to be unpredictable, such as scripting a card game. They're used here specifically to create a situation where the same nick is always colored the same way every time, just being colored (hopefully) different than most other nicks. And the optional 'secret string' is intended to make it harder for other people to intentionally choose nicks that they know will all be colored the same way by your script.

Because $calc has accuracy only to 53 bits, the above usage of $md5 was using only 13 digits of the MD5 string. In order to use $crc64 in the role currently performed by $crc, it will need to do the same thing, using 13 of the 16 hex digits of the 64-bit CRC.

In the above using of $crc, it has a color palette containing 26 different numbers, so the script using "% 26" is how it's choosing which of the 26 colors to use. If you change your palette to have fewer/more colors than 26, you MUST edit the 26 to be the new color-count. Leaving the number too small causes some of your colors to never be chosen. Leaving the number too large causes some nicks to not be colored at all. In addition to editing the 'secret' string, changing the number of colors in your color palette will also affect the color chosen for most nicks.

Your best color palette depends on your choice of background color, so having a black background means you have good color constrast against 8=yellow 9=light-green etc. If you have a white background, those 2 colors contrast poorly, so you would instead choose colors like 2 and 12 blues, which in exchange contrast poorly against black.

If your current script contains a line like:

var %col $gettok(2 3 4 5 6 8 9 10 11 12 13 40 41 42 43 44 45 46 47 49 50 51 52 59 61 72,$calc(1+$base($crc(secret $nick,0),16,10) % 26),32)

Using $crc64 should change it to look like:

var %col $gettok(2 3 4 5 6 8 9 10 11 12 13 40 41 42 43 44 45 46 47 49 50 51 52 59 61 72,$calc(1+$base($left($crc(secret $nick,0),13),16,10) % 26),32)

It doesn't matter whether you use $left or $mid or $right, just as long as you're using <= 13 of 16 hex digits, since 13*4= 52 bits.