"; } 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.

    Tepuy

    By Roberto Lavieri

     

    Introduction

    Tepuy : Mountain, in the indigenous Yanomami language. The Yanomamis are a tribe that inhabits the region to the north of Amazon river. TEPUY may be considered a variant of the territorial game Amazons, by Walter Zamkaukas, although with many differences. 

    The object of this game is CAPTURE the enemy King (only the Soldiers, the droppable pieces of this game, can take the enemy King), or STALEMATE the adversary. This may be possible if the enemy King can´t move or if the other player is not capable of doing any non-royal move in its PARTIAL-TURN.

    In this game, each turn of a player consists on two partial-turns. A non-Royal movement followed by a Royal movement. In its non-royal partial-turn, the player can move a GENERAL (moves without capturing like a Queen to an empty square, or one step orthogonally to take an enemy Soldier) and having made the move, the General MUST (it is obligatory) introduce a Soldier in the battle field. It is dropped at distance EXACTLY two squares orthogonally from the General's landing square. Or the player can move a SOLDIER (if any) ONE STEP orthogonally to an empty square or to a square occupied by a friend piece (Soldiers are cannibals), and after that introduce a new Soldier in the battle field in the same manner as the General: the new Soldier is dropped at distance exactly two, orthogonally to the Soldier landing square. After the non-royal partial turn is performed, the player MUST make a ROYAL movement, moving the King (Queen movement) to an empty square. If it is not possible, the game is over and the stalemated player loses the game. 

     

    Movement and general rules

     A turn in this game consists in two partial turns, a Non-Royal movement followed by a Royal movement. In the first partial turn, the player moves a non-royal piece (General or Soldier, if any) and DROPS a Soldier at distance exactly two squares from the destination square. If he can´t drop the Soldier, the player is stalemated and the game is finished, with a victory to the other side. After the Non-Royal movement, the player must make a Royal movement, moving the King if possible (if not, the player is stalemated and the game is over).

    There are three kinds of pieces in this game: Kings (Royal pieces), and Generals and Soldiers (Non-Royal pieces). At the beginning, there are no Soldiers in the setup. The Soldiers are dropped progressively into the game after successive non-Royal movements.

    You can win the game in three ways: 1. Capturing the enemy King; 2. If the enemy King is Stalemated in the Royal partial turn; or 3. If in it's Non-Royal partial turn, the adversary can´t make a complete move, usually the second part, that is, the drop of a Soldier at distance exactly two of the landing square of the Non-Royal piece.

    The Kings can´t capture anything in Tepuy. Generals can only capture enemy Soldiers. A General can capture a Soldier if orthogonally adjacent to the Soldier. Generals can´t capture the King. Finally, Soldiers are the only pieces capable of capturing the King. This is made with a single orthogonal step if the King is orthogonally adjacent to the Soldier. The Soldiers have another ability in this game: they are cannibal pieces. A Soldier can capture a friendly piece if it is orthogonally adjacent. This fact can be used in many situations in the game.

     

    Board and Set Up

     

    The Board is 9x9, initially each side is provided with one King and four Generals. The Soldiers are dropped progressively on the board in each partial Non-Royal turn.

     

    Pieces

     

     

    S

     

     

     

    Soldier: moves one Orthogonally. A Soldier can capture the enemy King. Soldiers are cannibals, can take friend pieces if orthogonally adjacent. After moving a Soldier, the player must complete the Non-Royal movement, dropping another Soldier at distance exactly two squares from the square where the Soldier moved to, in an orthogonal direction.

     

    G

     

    General: moves like a FIDE-Queen, and can only capture enemy Soldiers if orthogonally adjacent, by replacement after a single step. A General can´t capture the King or other Generals. After moving a General, the player must drop a Soldier at distance exactly two from the square where the General lands, in Orthogonal direction.

     

     K

     

    The King is the royal piece. The King moves like a FIDE-Queen and it can´t capture. After the Non-Royal partial turn, the player must move the King. If he can´t, he loses the game by Stalemate. If the King is captured (only the Soldiers can capture the King), the game is over and the kingless band loses the game.

     

     

    Rules

    Win condition: Checkmate the opposite King, or Stalemate the other player.

     

    Playing Tips

    Although it looks very simple at first view, this is a very complex game and strategy is not trivial. You can try to enclose the enemy King with your pieces and try to gain space for your own King, but you have to take some care, and avoid positions where the adversary can develop tactics for checkmate your King.

    It is desirable for your Generals to have space enough to move, but look for positions where they can reach the enemy King. The cannibal ability of the Soldiers is very useful when you are trapping the enemy King. 

     

    Computer Play

    Now you can play TEPUY if you have installed on your computer a registered version of ZILLIONS OF GAMES. You can Download the TEPUY ZRF and graphics at the link below. (Author: Roberto Lavieri.)

    Zillions is a weak player of this game (in essence, the best strategies are of a territorial nature, and usually Zillions is not well adapted for this kind of game), but if you are a novice, it can be a moderate challenge