Sophie

Sophie

distrib > Mageia > 5 > x86_64 > media > core-release > by-pkgid > 7252c12e981edcbf9247976fa3db7502 > files > 9

crossfire-client-1.71.0-3.mga5.x86_64.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
<meta name="generator" content="AsciiDoc 8.6.9" />
<title>Crossfire Client User Guide</title>
<style type="text/css">
/* Shared CSS for AsciiDoc xhtml11 and html5 backends */

/* Default font. */
body {
  font-family: Georgia,serif;
}

/* Title font. */
h1, h2, h3, h4, h5, h6,
div.title, caption.title,
thead, p.table.header,
#toctitle,
#author, #revnumber, #revdate, #revremark,
#footer {
  font-family: Arial,Helvetica,sans-serif;
}

body {
  margin: 1em 5% 1em 5%;
}

a {
  color: blue;
  text-decoration: underline;
}
a:visited {
  color: fuchsia;
}

em {
  font-style: italic;
  color: navy;
}

strong {
  font-weight: bold;
  color: #083194;
}

h1, h2, h3, h4, h5, h6 {
  color: #527bbd;
  margin-top: 1.2em;
  margin-bottom: 0.5em;
  line-height: 1.3;
}

h1, h2, h3 {
  border-bottom: 2px solid silver;
}
h2 {
  padding-top: 0.5em;
}
h3 {
  float: left;
}
h3 + * {
  clear: left;
}
h5 {
  font-size: 1.0em;
}

div.sectionbody {
  margin-left: 0;
}

hr {
  border: 1px solid silver;
}

p {
  margin-top: 0.5em;
  margin-bottom: 0.5em;
}

ul, ol, li > p {
  margin-top: 0;
}
ul > li     { color: #aaa; }
ul > li > * { color: black; }

.monospaced, code, pre {
  font-family: "Courier New", Courier, monospace;
  font-size: inherit;
  color: navy;
  padding: 0;
  margin: 0;
}
pre {
  white-space: pre-wrap;
}

#author {
  color: #527bbd;
  font-weight: bold;
  font-size: 1.1em;
}
#email {
}
#revnumber, #revdate, #revremark {
}

#footer {
  font-size: small;
  border-top: 2px solid silver;
  padding-top: 0.5em;
  margin-top: 4.0em;
}
#footer-text {
  float: left;
  padding-bottom: 0.5em;
}
#footer-badges {
  float: right;
  padding-bottom: 0.5em;
}

#preamble {
  margin-top: 1.5em;
  margin-bottom: 1.5em;
}
div.imageblock, div.exampleblock, div.verseblock,
div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
div.admonitionblock {
  margin-top: 1.0em;
  margin-bottom: 1.5em;
}
div.admonitionblock {
  margin-top: 2.0em;
  margin-bottom: 2.0em;
  margin-right: 10%;
  color: #606060;
}

div.content { /* Block element content. */
  padding: 0;
}

/* Block element titles. */
div.title, caption.title {
  color: #527bbd;
  font-weight: bold;
  text-align: left;
  margin-top: 1.0em;
  margin-bottom: 0.5em;
}
div.title + * {
  margin-top: 0;
}

td div.title:first-child {
  margin-top: 0.0em;
}
div.content div.title:first-child {
  margin-top: 0.0em;
}
div.content + div.title {
  margin-top: 0.0em;
}

div.sidebarblock > div.content {
  background: #ffffee;
  border: 1px solid #dddddd;
  border-left: 4px solid #f0f0f0;
  padding: 0.5em;
}

div.listingblock > div.content {
  border: 1px solid #dddddd;
  border-left: 5px solid #f0f0f0;
  background: #f8f8f8;
  padding: 0.5em;
}

div.quoteblock, div.verseblock {
  padding-left: 1.0em;
  margin-left: 1.0em;
  margin-right: 10%;
  border-left: 5px solid #f0f0f0;
  color: #888;
}

div.quoteblock > div.attribution {
  padding-top: 0.5em;
  text-align: right;
}

div.verseblock > pre.content {
  font-family: inherit;
  font-size: inherit;
}
div.verseblock > div.attribution {
  padding-top: 0.75em;
  text-align: left;
}
/* DEPRECATED: Pre version 8.2.7 verse style literal block. */
div.verseblock + div.attribution {
  text-align: left;
}

div.admonitionblock .icon {
  vertical-align: top;
  font-size: 1.1em;
  font-weight: bold;
  text-decoration: underline;
  color: #527bbd;
  padding-right: 0.5em;
}
div.admonitionblock td.content {
  padding-left: 0.5em;
  border-left: 3px solid #dddddd;
}

div.exampleblock > div.content {
  border-left: 3px solid #dddddd;
  padding-left: 0.5em;
}

div.imageblock div.content { padding-left: 0; }
span.image img { border-style: none; vertical-align: text-bottom; }
a.image:visited { color: white; }

dl {
  margin-top: 0.8em;
  margin-bottom: 0.8em;
}
dt {
  margin-top: 0.5em;
  margin-bottom: 0;
  font-style: normal;
  color: navy;
}
dd > *:first-child {
  margin-top: 0.1em;
}

ul, ol {
    list-style-position: outside;
}
ol.arabic {
  list-style-type: decimal;
}
ol.loweralpha {
  list-style-type: lower-alpha;
}
ol.upperalpha {
  list-style-type: upper-alpha;
}
ol.lowerroman {
  list-style-type: lower-roman;
}
ol.upperroman {
  list-style-type: upper-roman;
}

div.compact ul, div.compact ol,
div.compact p, div.compact p,
div.compact div, div.compact div {
  margin-top: 0.1em;
  margin-bottom: 0.1em;
}

tfoot {
  font-weight: bold;
}
td > div.verse {
  white-space: pre;
}

div.hdlist {
  margin-top: 0.8em;
  margin-bottom: 0.8em;
}
div.hdlist tr {
  padding-bottom: 15px;
}
dt.hdlist1.strong, td.hdlist1.strong {
  font-weight: bold;
}
td.hdlist1 {
  vertical-align: top;
  font-style: normal;
  padding-right: 0.8em;
  color: navy;
}
td.hdlist2 {
  vertical-align: top;
}
div.hdlist.compact tr {
  margin: 0;
  padding-bottom: 0;
}

.comment {
  background: yellow;
}

.footnote, .footnoteref {
  font-size: 0.8em;
}

span.footnote, span.footnoteref {
  vertical-align: super;
}

#footnotes {
  margin: 20px 0 20px 0;
  padding: 7px 0 0 0;
}

#footnotes div.footnote {
  margin: 0 0 5px 0;
}

#footnotes hr {
  border: none;
  border-top: 1px solid silver;
  height: 1px;
  text-align: left;
  margin-left: 0;
  width: 20%;
  min-width: 100px;
}

div.colist td {
  padding-right: 0.5em;
  padding-bottom: 0.3em;
  vertical-align: top;
}
div.colist td img {
  margin-top: 0.3em;
}

@media print {
  #footer-badges { display: none; }
}

#toc {
  margin-bottom: 2.5em;
}

#toctitle {
  color: #527bbd;
  font-size: 1.1em;
  font-weight: bold;
  margin-top: 1.0em;
  margin-bottom: 0.1em;
}

div.toclevel0, div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
  margin-top: 0;
  margin-bottom: 0;
}
div.toclevel2 {
  margin-left: 2em;
  font-size: 0.9em;
}
div.toclevel3 {
  margin-left: 4em;
  font-size: 0.9em;
}
div.toclevel4 {
  margin-left: 6em;
  font-size: 0.9em;
}

span.aqua { color: aqua; }
span.black { color: black; }
span.blue { color: blue; }
span.fuchsia { color: fuchsia; }
span.gray { color: gray; }
span.green { color: green; }
span.lime { color: lime; }
span.maroon { color: maroon; }
span.navy { color: navy; }
span.olive { color: olive; }
span.purple { color: purple; }
span.red { color: red; }
span.silver { color: silver; }
span.teal { color: teal; }
span.white { color: white; }
span.yellow { color: yellow; }

span.aqua-background { background: aqua; }
span.black-background { background: black; }
span.blue-background { background: blue; }
span.fuchsia-background { background: fuchsia; }
span.gray-background { background: gray; }
span.green-background { background: green; }
span.lime-background { background: lime; }
span.maroon-background { background: maroon; }
span.navy-background { background: navy; }
span.olive-background { background: olive; }
span.purple-background { background: purple; }
span.red-background { background: red; }
span.silver-background { background: silver; }
span.teal-background { background: teal; }
span.white-background { background: white; }
span.yellow-background { background: yellow; }

span.big { font-size: 2em; }
span.small { font-size: 0.6em; }

span.underline { text-decoration: underline; }
span.overline { text-decoration: overline; }
span.line-through { text-decoration: line-through; }

div.unbreakable { page-break-inside: avoid; }


/*
 * xhtml11 specific
 *
 * */

div.tableblock {
  margin-top: 1.0em;
  margin-bottom: 1.5em;
}
div.tableblock > table {
  border: 3px solid #527bbd;
}
thead, p.table.header {
  font-weight: bold;
  color: #527bbd;
}
p.table {
  margin-top: 0;
}
/* Because the table frame attribute is overriden by CSS in most browsers. */
div.tableblock > table[frame="void"] {
  border-style: none;
}
div.tableblock > table[frame="hsides"] {
  border-left-style: none;
  border-right-style: none;
}
div.tableblock > table[frame="vsides"] {
  border-top-style: none;
  border-bottom-style: none;
}


/*
 * html5 specific
 *
 * */

table.tableblock {
  margin-top: 1.0em;
  margin-bottom: 1.5em;
}
thead, p.tableblock.header {
  font-weight: bold;
  color: #527bbd;
}
p.tableblock {
  margin-top: 0;
}
table.tableblock {
  border-width: 3px;
  border-spacing: 0px;
  border-style: solid;
  border-color: #527bbd;
  border-collapse: collapse;
}
th.tableblock, td.tableblock {
  border-width: 1px;
  padding: 4px;
  border-style: solid;
  border-color: #527bbd;
}

table.tableblock.frame-topbot {
  border-left-style: hidden;
  border-right-style: hidden;
}
table.tableblock.frame-sides {
  border-top-style: hidden;
  border-bottom-style: hidden;
}
table.tableblock.frame-none {
  border-style: hidden;
}

th.tableblock.halign-left, td.tableblock.halign-left {
  text-align: left;
}
th.tableblock.halign-center, td.tableblock.halign-center {
  text-align: center;
}
th.tableblock.halign-right, td.tableblock.halign-right {
  text-align: right;
}

th.tableblock.valign-top, td.tableblock.valign-top {
  vertical-align: top;
}
th.tableblock.valign-middle, td.tableblock.valign-middle {
  vertical-align: middle;
}
th.tableblock.valign-bottom, td.tableblock.valign-bottom {
  vertical-align: bottom;
}


/*
 * manpage specific
 *
 * */

body.manpage h1 {
  padding-top: 0.5em;
  padding-bottom: 0.5em;
  border-top: 2px solid silver;
  border-bottom: 2px solid silver;
}
body.manpage h2 {
  border-style: none;
}
body.manpage div.sectionbody {
  margin-left: 3em;
}

@media print {
  body.manpage div#toc { display: none; }
}


</style>
<script type="text/javascript">
/*<![CDATA[*/
var asciidoc = {  // Namespace.

/////////////////////////////////////////////////////////////////////
// Table Of Contents generator
/////////////////////////////////////////////////////////////////////

/* Author: Mihai Bazon, September 2002
 * http://students.infoiasi.ro/~mishoo
 *
 * Table Of Content generator
 * Version: 0.4
 *
 * Feel free to use this script under the terms of the GNU General Public
 * License, as long as you do not remove or alter this notice.
 */

 /* modified by Troy D. Hanson, September 2006. License: GPL */
 /* modified by Stuart Rackham, 2006, 2009. License: GPL */

// toclevels = 1..4.
toc: function (toclevels) {

  function getText(el) {
    var text = "";
    for (var i = el.firstChild; i != null; i = i.nextSibling) {
      if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
        text += i.data;
      else if (i.firstChild != null)
        text += getText(i);
    }
    return text;
  }

  function TocEntry(el, text, toclevel) {
    this.element = el;
    this.text = text;
    this.toclevel = toclevel;
  }

  function tocEntries(el, toclevels) {
    var result = new Array;
    var re = new RegExp('[hH]([1-'+(toclevels+1)+'])');
    // Function that scans the DOM tree for header elements (the DOM2
    // nodeIterator API would be a better technique but not supported by all
    // browsers).
    var iterate = function (el) {
      for (var i = el.firstChild; i != null; i = i.nextSibling) {
        if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
          var mo = re.exec(i.tagName);
          if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {
            result[result.length] = new TocEntry(i, getText(i), mo[1]-1);
          }
          iterate(i);
        }
      }
    }
    iterate(el);
    return result;
  }

  var toc = document.getElementById("toc");
  if (!toc) {
    return;
  }

  // Delete existing TOC entries in case we're reloading the TOC.
  var tocEntriesToRemove = [];
  var i;
  for (i = 0; i < toc.childNodes.length; i++) {
    var entry = toc.childNodes[i];
    if (entry.nodeName.toLowerCase() == 'div'
     && entry.getAttribute("class")
     && entry.getAttribute("class").match(/^toclevel/))
      tocEntriesToRemove.push(entry);
  }
  for (i = 0; i < tocEntriesToRemove.length; i++) {
    toc.removeChild(tocEntriesToRemove[i]);
  }

  // Rebuild TOC entries.
  var entries = tocEntries(document.getElementById("content"), toclevels);
  for (var i = 0; i < entries.length; ++i) {
    var entry = entries[i];
    if (entry.element.id == "")
      entry.element.id = "_toc_" + i;
    var a = document.createElement("a");
    a.href = "#" + entry.element.id;
    a.appendChild(document.createTextNode(entry.text));
    var div = document.createElement("div");
    div.appendChild(a);
    div.className = "toclevel" + entry.toclevel;
    toc.appendChild(div);
  }
  if (entries.length == 0)
    toc.parentNode.removeChild(toc);
},


/////////////////////////////////////////////////////////////////////
// Footnotes generator
/////////////////////////////////////////////////////////////////////

/* Based on footnote generation code from:
 * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
 */

footnotes: function () {
  // Delete existing footnote entries in case we're reloading the footnodes.
  var i;
  var noteholder = document.getElementById("footnotes");
  if (!noteholder) {
    return;
  }
  var entriesToRemove = [];
  for (i = 0; i < noteholder.childNodes.length; i++) {
    var entry = noteholder.childNodes[i];
    if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") == "footnote")
      entriesToRemove.push(entry);
  }
  for (i = 0; i < entriesToRemove.length; i++) {
    noteholder.removeChild(entriesToRemove[i]);
  }

  // Rebuild footnote entries.
  var cont = document.getElementById("content");
  var spans = cont.getElementsByTagName("span");
  var refs = {};
  var n = 0;
  for (i=0; i<spans.length; i++) {
    if (spans[i].className == "footnote") {
      n++;
      var note = spans[i].getAttribute("data-note");
      if (!note) {
        // Use [\s\S] in place of . so multi-line matches work.
        // Because JavaScript has no s (dotall) regex flag.
        note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];
        spans[i].innerHTML =
          "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +
          "' title='View footnote' class='footnote'>" + n + "</a>]";
        spans[i].setAttribute("data-note", note);
      }
      noteholder.innerHTML +=
        "<div class='footnote' id='_footnote_" + n + "'>" +
        "<a href='#_footnoteref_" + n + "' title='Return to text'>" +
        n + "</a>. " + note + "</div>";
      var id =spans[i].getAttribute("id");
      if (id != null) refs["#"+id] = n;
    }
  }
  if (n == 0)
    noteholder.parentNode.removeChild(noteholder);
  else {
    // Process footnoterefs.
    for (i=0; i<spans.length; i++) {
      if (spans[i].className == "footnoteref") {
        var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");
        href = href.match(/#.*/)[0];  // Because IE return full URL.
        n = refs[href];
        spans[i].innerHTML =
          "[<a href='#_footnote_" + n +
          "' title='View footnote' class='footnote'>" + n + "</a>]";
      }
    }
  }
},

install: function(toclevels) {
  var timerId;

  function reinstall() {
    asciidoc.footnotes();
    if (toclevels) {
      asciidoc.toc(toclevels);
    }
  }

  function reinstallAndRemoveTimer() {
    clearInterval(timerId);
    reinstall();
  }

  timerId = setInterval(reinstall, 500);
  if (document.addEventListener)
    document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);
  else
    window.onload = reinstallAndRemoveTimer;
}

}
asciidoc.install(2);
/*]]>*/
</script>
</head>
<body class="article">
<div id="header">
<h1>Crossfire Client User Guide</h1>
<span id="author">Crossfire Development Team</span><br />
<span id="email"><code>&lt;<a href="mailto:crossfire@metalforge.org">crossfire@metalforge.org</a>&gt;</code></span><br />
<div id="toc">
  <div id="toctitle">Table of Contents</div>
  <noscript><p><b>JavaScript must be enabled in your browser to display the table of contents.</b></p></noscript>
</div>
</div>
<div id="content">
<div class="sect1">
<h2 id="_introduction">1. Introduction</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="_what_is_crossfire">1.1. What is Crossfire?</h3>
<div class="paragraph"><p>Crossfire is a free, open-source, cooperative multi-player RPG and adventure
game. Since its initial release, Crossfire has grown to encompass over 150
monsters, 3000 areas to explore, an elaborate magic system, 13 races, 15
character classes, and many powerful artifacts scattered far and wide. Set
in a fantastical medieval world, it blends the style of Gauntlet, NetHack,
Moria, and Angband.</p></div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_installation">2. Installation</h2>
<div class="sectionbody">
<div class="paragraph"><p>Please refer to the <a href="http://wiki.metalforge.net/doku.php/crossfire_client_compile_guide">client compilation guide</a> on the Crossfire Wiki.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_playing_crossfire">3. Playing Crossfire</h2>
<div class="sectionbody">
<div class="paragraph"><p>More information can be found on the
<a href="http://wiki.metalforge.net">Crossfire Wiki</a>.</p></div>
<div class="sect2">
<h3 id="_public_servers">3.1. Public Servers</h3>
<div class="paragraph"><p>The best way to find a server to play is to run the client.  It will contact
the metaserver and present a list to choose from.  You can also see a list
at <a href="http://crossfire.real-time.com/metaserver/">http://crossfire.real-time.com/metaserver/</a> or
<a href="http://crossfire.real-time.com/metaserver2/">http://crossfire.real-time.com/metaserver2/</a>.</p></div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_other_features">4. Other Features</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="_sound_support">4.1. Sound Support</h3>
<div class="admonitionblock">
<table><tr>
<td class="icon">
<div class="title">Warning</div>
</td>
<td class="content">This legacy documentation does not necessarily reflect the behavior
of the current version of the client.</td>
</tr></table>
</div>
<div class="paragraph"><p>If you want sound support (only useful if you have a system that has good
sound hardware), you will also need to get some sounds for the program.
You will need the raw sound files - the .au files no longer work with the
client.</p></div>
<div class="paragraph"><p>The sounds file determines what file is played for what sound.  The default
location for the sound files is <em>&lt;prefix&gt;/share/cfclient/sounds</em>. &lt;prefix&gt;
is the -prefix= option given when running configure, default of <em>/usr/local</em>.</p></div>
<div class="paragraph"><p>You can set this to another directory at the configure stage by using
--with-sound-dir=/some/directory.  This file is only used for compiled in
defaults.  If you have a <em>~/.crossfire/sounds</em> file (some format), that file
will be used instead of the built in defaults.</p></div>
<div class="paragraph"><p>Sound are now played by separate process invoked from crossfire client.
The process - called sound server - adjusts sounds' volume according to
relative position of player and sound source on map and mixes the sounds
together, so many sounds can be played simultaneously.</p></div>
<div class="sect3">
<h4 id="_configuration">4.1.1. Configuration</h4>
<div class="paragraph"><p>The config file <em>~/.crossfire/sndconfig</em> contains some configurable settings. If
there is no such file, one with default settings will be created.</p></div>
<div class="paragraph"><p>The file contains following fields:</p></div>
<div class="tableblock">
<table rules="all"
frame="border"
cellspacing="0" cellpadding="4">
<col />
<col />
<thead>
<tr>
<th align="left" valign="top">Option</th>
<th align="left" valign="top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left" valign="top"><p class="table">stereo</p></td>
<td align="left" valign="top"><p class="table">1 means stereo sound, 0 - mono</p></td>
</tr>
<tr>
<td align="left" valign="top"><p class="table">bits</p></td>
<td align="left" valign="top"><p class="table">bitrate of generated sound - 8 or 16 16 means better quality, especially when
more sounds are to be played simultaneously, but takes more memory</p></td>
</tr>
<tr>
<td align="left" valign="top"><p class="table">signed</p></td>
<td align="left" valign="top"><p class="table">if we should sent signed data to the sound card. 1 means yes.</p></td>
</tr>
<tr>
<td align="left" valign="top"><p class="table">frequency</p></td>
<td align="left" valign="top"><p class="table">speed of playing data. This should be 11025, or sound pitch will change</p></td>
</tr>
<tr>
<td align="left" valign="top"><p class="table">buffers</p></td>
<td align="left" valign="top"><p class="table">how many buffers to allocate</p></td>
</tr>
<tr>
<td align="left" valign="top"><p class="table">buflen</p></td>
<td align="left" valign="top"><p class="table">how big the buffers should be. buffers*buflen shouldn&#8217;t be smaller than the
longest sound to be played.</p></td>
</tr>
<tr>
<td align="left" valign="top"><p class="table">simultaneously</p></td>
<td align="left" valign="top"><p class="table">The number of sounds that can be played at the same time. When this setting
is larger, each sound volume will decrease.</p></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect3">
<h4 id="_how_does_it_work">4.1.2. How Does it Work?</h4>
<div class="paragraph"><p>The sound server gets information about sounds to be played on standard input.
The information is a line:
&lt;sound number&gt; &lt;sound type&gt; &lt;relative x&gt; &lt;relative y&gt;
All those numbers are hex.
The file ~/.crossfire/sounds contains description of sound numbers and types.
For example:
3 0 5 0
Means that normal sound SOUND_FUMBLE spell should be played as it&#8217;s source was
5 units to the right of player.</p></div>
<div class="paragraph"><p>Sounds are mixed in special buffers, which are in fact one buffer, which should
be big enough for the biggest sound to be played.</p></div>
<div class="paragraph"><p>The buffers, if contain anything, are sent one by one to the sound device.
Each buffer is cleaned after playing.</p></div>
<div class="paragraph"><p>Sounds data is multiplied by some ratio (&lt;1) evaluated from it&#8217;s position and
volume and added to the buffers, starting from the next after the one being
played.</p></div>
<div class="paragraph"><p>So bigger buffer means bigger delay, before the sound is actually played, but
the smaller buffer is, the bigger is possibility, we won&#8217;t succeed filling the
next buffer, before last is played.</p></div>
</div>
</div>
<div class="sect2">
<h3 id="_preloaded_bitmaps">4.2. Preloaded Bitmaps</h3>
<div class="admonitionblock">
<table><tr>
<td class="icon">
<div class="title">Warning</div>
</td>
<td class="content">This legacy documentation does not necessarily reflect the behavior
of the current version of the client.</td>
</tr></table>
</div>
<div class="paragraph"><p>The client will get any images that it is missing from the server.  This
can include the entire image set.</p></div>
<div class="paragraph"><p>To decrease bandwidth used when actually playing the sounds, it is suggested
you download the image archive and install it.  The default location
for the archive is <em>&lt;prefix&gt;/share/cfclient/</em>, where &lt;prefix&gt; is determined
by the -prefix= option given when running configure.</p></div>
<div class="paragraph"><p>The mechanism the client uses to find a matching image file when the
server tells it an image name is thus:</p></div>
<div class="olist arabic"><ol class="arabic">
<li>
<p>
Look in <em>~/.crossfire/gfx</em>.  If an image is found here, irrespective of the
set and checksum of the image on the server, it will be used.  The only
way images are placed into the gfx directory is by the user actually
copying them to that directory.  The gfx directory allows a user to override
images with versions he prefers.
</p>
</li>
<li>
<p>
Look in <em>~/.crossfire/image-cache</em> then <em>&lt;prefix&gt;/share/cfclient/crossfire-images</em>.
If the checksum matches the image from the respective directory is used.
Note that if the checksums match, it really doesn&#8217;t matter what image
location we use, as it is the same image.
</p>
</li>
<li>
<p>
Get the image from the server.  If -cache is set, a copy of it is put into
<em>~/.crossfire/image-cache.</em>
</p>
</li>
</ol></div>
</div>
<div class="sect2">
<h3 id="_client_scripting">4.3. Client Scripting</h3>
<div class="paragraph"><p>Client-side scripting is documented <a href="doc/Scripting.html">here</a> as well as
on the <a href="http://wiki.metalforge.net/doku.php/client_side_scripting:client_scripting_interface-basic_howto">Crossfire Wiki</a>.</p></div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_credits">5. Credits</h2>
<div class="sectionbody">
<div class="paragraph"><p>Mark Wedel &lt;<a href="mailto:mwedel@sonic.net">mwedel@sonic.net</a>&gt;
 - Client code, GTK, GTKv2, Xlib, OpenGL for GTKv2</p></div>
<div class="paragraph"><p>David Sundqvist &lt;<a href="mailto:azzie@netpolicy.com">azzie@netpolicy.com</a>&gt;
 - GTK+ port</p></div>
<div class="paragraph"><p>Raphael Quinet &lt;<a href="mailto:Raphael.Quinet@eed.ericsson.se">Raphael.Quinet@eed.ericsson.se</a>&gt;
 - Configure scripts and graphics</p></div>
<div class="paragraph"><p>Jacek Konieczny &lt;<a href="mailto:jajcus@zeus.polsl.gliwice.pl">jajcus@zeus.polsl.gliwice.pl</a>&gt;
 - New sound system</p></div>
<div class="paragraph"><p>Eric Anderson
 - Did a lot of initial work on the client.</p></div>
<div class="paragraph"><p>Scott MacFiggen &lt;<a href="mailto:smurf@csua.berkeley.edu">smurf@csua.berkeley.edu</a>&gt;
 - SDL support</p></div>
<div class="paragraph"><p>Kevin Bulgrien &lt;<a href="mailto:kbulgrien@att.net">kbulgrien@att.net</a>&gt;
 - libglade-2.0 conversion</p></div>
<div class="paragraph"><p>Nicolas Weeger &lt;<a href="mailto:nicolas.weeger@laposte.net">nicolas.weeger@laposte.net</a>&gt;</p></div>
<div class="paragraph"><p>Karla Stenger &lt;<a href="mailto:karla.stenger@gmail.com">karla.stenger@gmail.com</a>&gt;
 - Per-character keybindings</p></div>
<div class="paragraph"><p>Kevin Zheng &lt;<a href="mailto:kevinz5000@gmail.com">kevinz5000@gmail.com</a>&gt;
 - GtkBuilder migration, FreeBSD port maintainer, documentation updates</p></div>
</div>
</div>
</div>
<div id="footnotes"><hr /></div>
<div id="footer">
<div id="footer-text">
Last updated 2014-04-05 16:43:21 CDT
</div>
</div>
</body>
</html>