"; } include (ROOT . "/ads/adlocale.php"); $ad["shogi"] = "\n"; $ad["xiangqi"] = "\n"; $ad["play"] = "\n"; $ad["hexchessglinski"] = "\n"; function showad ($itemid, $type, $linkid) { global $ad, $bot, $mobile, $adlocale; if ($bot) return; $linkid = strtolower($linkid); if (($linkid == "chessrules") && (!empty($ad["chessbooks"]))) weightad ("chessbooks", 15); if (isset($ad[$itemid])) weightad ($itemid, 15); elseif (isset($ad[$linkid])) weightad($linkid, 10); if ($type == "Game") { $ad["fav"] = "\n"; weightad ("fav", 5); } else weightad ("play", 5); if (!empty($itemid) && ($type == "override")) $key = $itemid; else $key = array_rand($ad); // echo "
"; // print_r($ad); // echo $linkid; // echo "
"; if ($mobile) printf ("
"); else printf ("
"); echo $ad[$key]; echo "
\n"; } if (!$googleokay) { } elseif ($mobile) { $ad["google"] = << AD; weightad("google", 6); } else { /* $ad["google"] = << AD; */ $ad["google"] = << ADZ; } $adtype = ($mobile) ? "mobile" : "banner"; // include_once ROOT . "/ads/staunton-{$adtype}-ads.php"; if ($itemid != "HomepageofTheChe") { if ($adlocale) { include_once ROOT . "/ads/{$localename[$adlocale]}-{$adtype}-ads.php"; } elseif ($googleokay) weightad ("google", 5); } echo ""; ?> id = $row["ItemID"]; $this->text = get_field("LinkText", "IndexEntry", "ItemID", $this->id); if (empty($this->text)) $this->text = $row["Summary"]; /* if (fnmatch("*.php*", $this->url)) $this->type = "script"; elseif ((substr($this->url, -1) == "/") || (substr($this->url, -11) == "/index.html")) $this->type = "index"; else */ $this->type = $row["Type"]; $this->membersubmitted = $row["IsMemberSubmitted"]; $this->locked = $row["IsLocked"]; $this->featured = $row["IsPrimary"]; $this->url = make_link_url($row, true); /* if ($this->membersubmitted) $this->url = "/index/msdisplay.php?itemid={$this->id}"; elseif (($this->type == "Zillions") && fnmatch("*.zip", $row["URL"])) $this->url = "/index/zillions.php?itemid={$this->id}"; elseif (fnmatch("https://*", $row["URL"])) $this->url = "/index/external.php?itemid={$this->id}"; else $this->url = $row["URL"]; */ if ($this->type == "Jocly") $this->text .= " with Jocly"; elseif ($this->type == "Zillions") $this->text .= " with Zillions-of-Games"; elseif ($this->type == "Game") $this->text = "Rules of " . $this->text; elseif (($this->type == "PBM") && empty($row["IsLink"])) $this->text .= " on Game Courier"; } else { $this->id = $id; $this->url = $u; $this->text = $txt; $this->type = $typ; $this->membersubmitted = 0; $this->locked = 0; } $this->icon = get_icon($this->type, $this->membersubmitted, $this->locked); } public function __toString () { $icon = "icon}\" ALIGN=\"LEFT\" WIDTH=16 HEIGHT=16>"; if (strncmp($this->url, "http", 4) == 0) return sprintf ("
  • %s %s
  • \n", $icon, $this->url, $this->text); elseif (strncmp($this->url, "play/", 5) == 0) return sprintf ("
  • %s %s
  • \n", $icon, substr($this->url, 5), $this->text); else return sprintf ("
  • %s %s
  • \n", $icon, $this->url, $this->text); } } function linkcmp ($a, $b) { $cmp = strcmp($a->type, $b->type); if ($cmp == 0) $cmp = strnatcmp($a->text, $b->text); return $cmp; } function maxlen ($ra) { $len = 0; foreach ($ra as $link) { $len = max($len, strlen($link->text)); } return $len; } class personlink { public $personid; public $dispname; public $lastname; public $firstname; public function __construct ($u) { if (is_array($u)) { //should always be an array? $row = $u; $this->personid = $row["PersonID"]; $this->lastname = $row["LastName"]; $this->firstname= $row["FirstName"]; $this->dispname = $this->firstname . " " . $this->lastname; if ($this->dispname ==" ") { $this->dispname = $this->personid; } } } public function __toString () { $icon = sprintf (""); return sprintf ("
  • %s %s
  • \n", $icon, $this->personid, $this->dispname); } } function personlinkcmp ($a, $b) { $cmp = strcasecmp($a->lastname, $b->lastname); if ($cmp == 0) { $cmp = strcasecmp($a->firstname, $b->firstname); if ($cmp == 0) { $cmp = strcasecmp($a->dispname, $b->dispname); } } return $cmp; } function personmaxlen ($ra) { $len = 0; foreach ($ra as $link) { $len = max($len, strlen($link->dispname)); } return $len; } $prime = $second = $followers = $remote = $cat = $external = $favorites = $favedby = array(); if ($itemid) { if ($row = table_row("Item", "ItemID", $itemid)) { $type = $row["Type"]; $chessv = $row["Chessv"]; $categories = $row["Categories"]; $authorid = $row["AuthorID"]; $inventorid = $row["InventorID"]; $authorid2 = $row["AuthorID2"]; $inventorid2= $row["InventorID2"]; $linkid = $row["LinkItemID"]; $linkid2 = $row["LinkItemID2"]; $summary = $row["Summary"]; $featured = $row["IsPrimary"]; $membersubmitted = $row["IsMemberSubmitted"]; $locked = $row["IsLocked"]; if ($linkid != "") { $stmt = $dbh->prepare("SELECT * FROM Item WHERE LinkItemID=:group"); $stmt->bindValue(":group", $linkid); if ($stmt->execute()) { while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { if (($row["ItemID"] != $itemid) && empty($row["IsDeleted"]) && empty($row["IsHidden"]) && empty($row["IsBrokenLink"])) { if (is_external($row["URL"])) $external[] = new link ($row); else $prime[] = new link ($row); } } usort ($prime, "linkcmp"); } $stmt = $dbh->prepare("SELECT * FROM Item WHERE LinkItemID2=:group"); $stmt->bindValue(":group", $linkid); if ($stmt->execute()) { while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { if (($row["ItemID"] != $itemid) && empty($row["IsDeleted"]) && empty($row["IsHidden"]) && empty($row["IsBrokenLink"])) { if (is_external($row["URL"])) $external[] = new link ($row); else $followers[] = new link ($row); } } usort ($followers, "linkcmp"); } } if ($linkid2 != "") { $stmt = $dbh->prepare("SELECT * FROM Item WHERE LinkItemID=:group"); $stmt->bindValue(":group", $linkid2); if ($stmt->execute()) { while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { if (($row["ItemID"] != $itemid) && empty($row["IsDeleted"]) && empty($row["IsHidden"]) && empty($row["IsBrokenLink"])) { if (is_external($row["URL"])) $external[] = new link ($row); else $second[] = new link ($row); } } usort ($second, "linkcmp"); } $stmt = $dbh->prepare("SELECT * FROM Item WHERE LinkItemID2 = :group2 AND LinkItemID != :group"); $stmt->bindValue(":group", $linkid); $stmt->bindValue(":group2", $linkid2); if ($stmt->execute()) { while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { if (($row["ItemID"] != $itemid) && empty($row["IsDeleted"]) && empty($row["IsHidden"]) && empty($row["IsBrokenLink"])) { if (is_external($row["URL"])) $external[] = new link ($row); else $remote[] = new link ($row); } } usort ($remote, "linkcmp"); } } /* if ($inventorid != "") { $stmt = $dbh->prepare("SELECT * FROM Item WHERE InventorID=? OR InventorID2=? ORDER BY Summary"); if ($stmt->execute(array($inventorid, $inventorid))) { while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { if (($row["IsDeleted"] == 0) && ($row["IsHidden"] == 0) && ($row["IsBrokenLink"] == 0) && ($row["Type"] == "Game") && ($row["ItemID"] != $itemid)) $inventions[] = new link ($row); } } // usort ($inventions, "linkcmp"); } if ($inventorid2 != "") { $stmt = $dbh->prepare("SELECT * FROM Item WHERE InventorID=? OR InventorID2=? ORDER BY Summary"); if ($stmt->execute(array($inventorid2, $inventorid2))) { while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { if (($row["IsDeleted"] == 0) && ($row["IsHidden"] == 0) && ($row["IsBrokenLink"] == 0) && ($row["Type"] == "Game") && ($row["ItemID"] != $itemid)) $inventions2[] = new link ($row); } } // usort ($inventions2, "linkcmp"); } */ if (!empty($categories)) { $catarray = explode(",", $categories); foreach ($catarray as $c) { $cat[] = new link ("index/mainquery.php?type=Any&category={$c}&orderby=LinkText&displayauthor=1&displayinventor=1", ucfirst($c), "script"); } } if (!empty($external)) usort ($external, "linkcmp"); } } else { $type = ""; } $fav = false; $stmt = $dbh->prepare("SELECT * FROM Item JOIN Favorites ON Item.ItemID = Favorites.ItemID WHERE Favorites.PersonID = :personid ORDER BY Summary"); $stmt->bindValue(":personid", $personid); if ($stmt->execute()) { while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { // if (($row["IsDeleted"] == 0) && ($row["IsHidden"] == 0) && ($row["IsBrokenLink"] == 0) && ($row["Type"] == "Game")) $favorites[] = new link ($row); if ($itemid == $row["ItemID"]) $fav = true; } } $stmt = $dbh->prepare("SELECT * FROM Person JOIN Favorites ON Person.PersonID = Favorites.PersonID WHERE Favorites.ItemID = :itemid ORDER BY LastName"); $stmt->bindValue(":itemid", $itemid); if ($stmt->execute()) { while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { $favedby[] = new personlink ($row); } } ?>
    The Chess Variant Pages
    Custom Search
    if (window.canShowAds === undefined) document.writeln("

    Ad Blocker Detected! Please check out our Advertising policy for reasons to unblock this site, and please check out our affiliate links to Amazon and eBay in the Shop menu below.

    "); TXT; echo "
    "; } ?> "; if (!isset($itemid)) showad("","",""); elseif (!isset($type)) showad($itemid, "", ""); elseif (!isset($linkid)) showad($itemid, $type, ""); else showad($itemid, $type, $linkid); } ?>


    Custom Search
    %s. ", $inventorid, personid2name($inventorid)); elseif ((($authorid == $inventorid) || ($authorid == $inventorid2)) && empty($authorid2) && !empty($inventorid2)) $byline = sprintf ("This page is written by one of the game's inventor, %s. ", $authorid, personid2name($authorid)); elseif ((($authorid == $inventorid) || ($authorid == $inventorid2)) && (($authorid2 == $inventorid) || ($authorid2 == $inventorid2))) $byline = sprintf ("This page is written by both of the game's inventors, %s and %s. ", $inventorid, personid2name($inventorid), $inventorid2, personid2name($inventorid2)); if (is_favorite($inventorid, $itemid)) { if (!empty($inventorid2)) { if (is_favorite($inventorid2, $itemid)) $byline .= "This game is a favorite of both of its inventors."; else $byline .= sprintf("This game is a favorite of one of its inventors, %s.", $inventorid, personid2name($inventorid)); } else $byline .= "This game is a favorite of its inventor."; } if (!empty($byline)) echo "
    {$byline}


    "; } elseif (!empty($type) && ($type == "Piececlopedia")) printf ("

    The Piececlopedia is intended as a scholarly reference concerning the history and naming conventions of pieces used in Chess variants. But it is not a set of standards concerning what you must call pieces in newly invented games.
    "); } $itemid = $originalid; // Change back for scripts that use $itemid if (!empty($featured) && ($type == "Game")) echo "

    This is one of our Featured Games. Click the link to check out our others.

    \n"; $ruri = getenv("REQUEST_URI"); if ((fnmatch("*/erf/*", $ruri) || fnmatch("*/coffeecc/*", $ruri))): ?>

    Recent versions of Chrome, Firefox, and Edge do not support Java. Internet Explorer and Safari should still support it. Besides that, recent versions of Java will block this script unless you add https://www.chessvariants.com to your Java exceptions list. You should find this in the Security tab of your Java control panel.

    Alfaerie Expansion Set 3

    Most of the images in this expansion set were designed and created by Michael Howe. They are marked with an asterisk (*). Download the expansion set in a single .zip file: alfaerie4.zip


    Zero

    One

    Two

    Three

    Four

    Five

    Six

    Seven

    Eight

    Nine

    1 Bishop

    1 Rook

    Circle

    Square 45

    Squire






    Wildebeest

    Wildebeest 2*

    Bat
       
       

    Cardinal 2*

    Cavalier*

    Crusader*

    Diplomat*

    Duchess*

    Empress 2*

    Envoy*

    Gorgona*

    Marshall 2*

    Medusa*

    Minister 2*

    Paladin 2*

    Viceroy*
       
       

    * designed by Michael Howe


    Written by David Howe. Graphics created by Michael Howe and David Howe.
    WWW page created: September 4, 2002.