Kevin Zheng | 30 Nov 20:00 2014

Shop prices overhaul

Hi all,

At the moment, Crossfire's shops aren't particularly useful. For
medium-level players, prices seem unreasonable, while new players can't
afford to buy from shops at all. Old players with high charisma and
bargaining, on the other hand, don't notice a huge discrepancy.

The attached patch attempts to fix some of these issues:

Charisma and bargaining now only affect the shop buy price, with
multipliers ranging from 2x for new players to 0.5x for very advanced
players. This is consistent with rogue-style shopkeeper greed but still
better than the existing situation. Bargaining is now significantly less
useful; the hope is that in the near future it is replaced with
interactive "haggling".

The sell price is clamped down to 0.5x base price, subject to additional
shop specialization and greed. This sell price is mostly better than the
existing prices, and at the very least prevents high level players from
buying and selling for a profit.

Comments, questions, clarifications, or hate mail?

Kevin Zheng


Kevin Zheng
kevinz5000@... |
kevinz@... | PGP: 0xC22E1090
(Continue reading)

David Hurst | 11 Sep 14:54 2014

Wiki Changes

Hi Crossfire,

I have had an itch to tidy up the Wiki pages and today put my ideas into effect. I wanted to make the pages more clearly separated to (I hope) make it easier to find information. A lot of pages were dated around 2008 and appear to have drifted out of date or out of position. The changes I made weren't focused on removing any content but rather moving it, splitting it, or merging it to fit the new structure. 

The new structure as explained on the Crossfire Wiki start page is:

The Sworn book of Scorn This section is dedicated to the mechanics and implementation of crossfire as a game.
Help/Support This section focuses on guides and information that will assist in installing and running Crossfire servers and clients.
Community This section provides useful links for connecting with other crossfire fans.
Development This section is the communal edit/scratchpad to document and kick off new ideas, and in-game content. Everyone is welcome to contribute. Please remember that while the wiki is useful for brainstorming, archiving, and listing new ideas, always consult the mailing list before implementing any significant changes to the game.

For more detailed information on this structure you can visit the Crossfire Wiki:style guide

I also drew on the Google analytic report to try and identify which areas of the wiki were most heavily getting viewed. At present most visitors were apparently seeking assistance in installing crossfire, particularly the server, or were leaving after reading the FAQ. I suspect the FAQ is a little over due for review but didn't spend much time on it. It is currently very long and overlaps with a lot of content elsewhere on both the crossfire website and the wiki.

I welcome feedback on whether you like this new structure and any further changes that you think would be valuable. In particular I would love some help in adding various game mechanics to the Sworn book of Scorn. Please feel free to come talk Wiki with me in the IRC channel.


crossfire mailing list
David Hurst | 14 Aug 01:53 2014

Fwd: Review your Google Analytics website performance for July

Hi Team,

Just FYI I thought people might be interested in the latest analytics on the wiki page.


---------- Forwarded message ----------
From: Google Analytics <analytics-noreply <at>>
Date: Thu, Aug 14, 2014 at 2:54 AM
Subject: Review your Google Analytics website performance for July
To: davidnicholashurst <at>

Your Customer ID:
Sign in
A snapshot of your website in July.
Take a few minutes to review last month's website performance for We hope that these key metrics and our monthly tip will help you identify new opportunities for your business.
The total number of visits to your site this month
Your bounce rate shows how many people leave your site without visiting any other pages on your site
The average amount of time someone spends on your site in a single session
The average number of pages viewed in a single session
Did you know you had 312 visits this month?
Keep an eye on your All Traffic report to see exactly where your visitors come from so you can make tweaks to your marketing campaigns.
         Sign in         
Your Audience
United States
Your Location report tells you where your visitors live around the world. Make sure you’re promoting your business in all the right areas.
    View your Location report    
How people are finding you
crossfire wiki real time 3 Visits
crossfire game install cen ... 2 Visits
crossfire debian install 1 Visits ... 1 Visits
make server crossfire 1 Visits
0 AdWords Visitors
312 Non-AdWords Visitors
312 Total Visitors
Did you know you can attract more potential customers to your site with paid online ads? Learn more about how Google AdWords can help.
    Sign up for AdWords    
google / organic  
167 Visits / referral  
87 Visits
(direct) / (none)  
34 Visits
bing / organic  
6 Visits / referral  
4 Visits
What’s happening when users come to your site
/doku.php/linu ... /doku.php /doku.php/faq /doku.php/serv ... /doku.php/cros ...
  Pageviews   Page Exits
Did you know that 41 (13.1%) people exited your site at /doku.php/linux?
    View your Exit Pages    
Your Goals
Use goals to track customer interactions that matter to your business the most, such as purchases or number of pages viewed.
The percentage of people who start but do not complete one of your goals
Your goals completion sources
Looks like you don’t have any Goals set up yet. Use Goals to keep an eye on customer actions that matter to you, like clicks and sales.
    Set up Goals    
Thank you for reviewing our report. Please take a few minutes to provide feedback.
    Go to your account    
Join the Community Ask Experts Learn
© 2014 Google Inc. 1600 Amphitheatre Parkway, Mountain View, CA 94043

This email was sent to because you indicated that you'd like to receive updates and tips about your Google Analytics account. If you don't want to receive such emails in the future, please unsubscribe here. You can also change your preferences on your account's Google Analytics Email Communications page by logging into

crossfire mailing list
Tolga Dalman | 11 Aug 13:24 2014

[PATCH] Crossfire client linking fails in trunk


the attached patch fixes the client compilation on trunk. Thanks!

Best regards,
Tolga Dalman

crossfire mailing list
Rick Tanner | 14 Jun 01:35 2014

Development dialogue

It has been quite some time since Crossfire has seen so many code
tweaks and changes like we have seen the past couple of months.

Thank you to everyone who is and has been contributing to this.

Some recent discussion on IRC brought up some concerns with recent SVN
commits and their impact on existing code, server setup practices, and
performance gains or efficiency of such code changes.

I'm making this post to open dialogue on these concerns so they get
addressed, worked on, updated, etc.

If a code rewrite is necessary, or a revert or something else - it
should be made with some sort of agreement.

I ask that we keep the discussion positive and productive. If you have
an axe to grind, this is not the forum for that. ;-)

Thank you,

Rick Tanner

Kevin Zheng | 13 Jun 15:13 2014

Crossfire should use Git

Hi all,

Crossfire originally lived in the world of CVS, until a handful of brave
knights ventured to move it to SVN. Today I believe it is time to move
again, and this time to Git.

Git is a distributed version control system, which means that checking
out an old revision or reading the commit log does not require accessing
the sometimes painfully slow servers on the Internet. Each 'clone' of
the repository is a fully-functioning repository on its own. This means
that developers, even those who do not have commit access, can work on
projects at their own pace and submit them with tools such as `git
format-patch` and others.

Git makes branching easy. It makes maintaining them manageable. As an
example, several important fixes were made in 'trunk', which have yet to
be backported to 1.12.0. In addition, there are no release engineering
branches, which means that each release is simply cut from the next
'trunk' state in line. Even "trivial" fixes could benefit from topic
branches, but SVN does not make this easy, convenient, or fun. Using Git
branches would help create a more stable codebase by improving release
engineering and adopting intermediate "stable" branches that servers can
track. A recent autotools bug that wiped server configuration files, for
example, could have been prevented if changes on the bleeding edge were
evaluated by test servers first.

Git is not terribly difficult to use. Right now I access the SVN
repository through a local Git clone, but this is inadequate because I
cannot publish my topic branches (without considerably difficulty). A
migration that preserves tags, branches, and full revision history can
be made as fast as the revisions are pulled from SVN.

In summary, a few important benefits of using Git:

Contributors can work on the code easier, with revision control.
Distributed, so works without (slow) Internet access.
Encourages branching -> more stable codebase.
Easy to use and migrate to.
Full (all revision history) repository size: 21.7 MiB (server), 13.9
  MiB (client), 106.1 MiB (maps)

However, there are a few immediate problems:

Most projects using SVN make extensive use of the revision number
identifiers. Crossfire is no different. Git has revision (commit)
identifiers, but they are meaningless without the repository, whereas
SVN increments the number for each commit. I do not believe this is an
issue, because client compatibility is not determined by this
specifier, plugin versions are only checked to match, and other uses
of the identifier can be removed.

Of course, comments, questions, and hate mail are always welcome.

Kevin Zheng
Nicolas Weeger | 12 Jun 20:35 2014

Game change proposals


I'd like to change various things in the game, to make it funnier (IMO) in non 
combat aspects. So here are random proposals.

What about "mini-games"?

For instance, instead of a mere lockpicking, you actually have to use the 
picks in the right order in a limited time to pick a lock - if you fail, you 
trigger the traps, of course.

[bonus points to who knows the old game I'm getting inspiration from :)]

What about changing alchemy (including the jeweler etc. variants)?

For each formulae you start with a ~3% chance of success. You succeed? Get 3 
to 5 points. Failure? Get 0-1 point (failure is a valuable lesson, after all 
:)). Capped to ~90%. And maybe not giving global experience.

What about random (ie player-dependant) parameters? You have more success 
during certain hours, or outside vs inside, or...?

Then reduce the dropped items. I mean, so much junk!

Then, slowing (a lot) combat, making it more tactical. Instead of a zillion 
monsters, some hard to defeat monsters, where you can use all your skills and 
items, and attempt various combinations.

Then various effects on weapons: stun, knock back, confuse, slow, etc.

Reduce the zillion elemental attacks to a lower number (6? 8?), other things 
are side effects.

Thoughts? Flames? Ideas?


crossfire mailing list
Kevin Zheng | 8 May 03:25 2014

Update client GLib dependency

Hi there,

The GTKv2 client sources are split up into two parts, one for "common"
code that can be shared across different clients, and a "gtk-v2" part
that implements the GTK+ client itself.

GLib is a very useful library that provides portable data structures,
lexical scanners, threads, mutexes, timers, hook functions, and sockets.
Currently it is only used in the GTKv2 client because it is a dependency
of GTK+. I propose that GLib should be a dependency for the entire client.

1. There are lots of cool things that GLib will let us have that we
don't have now. Dynamically allocated strings, advanced data types, and
even a config file parser are all available from GLib.

2. GLib will make things more portable. I've been able to get the client
building on Windows again, but it's still very messy, particularly due
to excessive conditional compilation. GLib implements its own portable
sockets that can be used on multiple platforms.

3. GLib will make things less broken. Connecting to a server is a mess,
and sometimes freezes the client given the right circumstances.
Threading, callbacks, and parsing are messy, too.

4. GLib is already a dependency. Besides, on my system, the library and
all development files takes only 17 MB. Most people already have it
installed, because it is a dependency for Gtk, Qt, and more.

5. Even if somebody decides to write another client using SDL, OpenGL,
or maybe even Tcl, GLib can still be used and will still provide all of
its happy shiny benefits.

6. You probably don't care, since you're using the must shinier and
prettier and portable JXClient. So you should let me do whatever
satisfies my evil wishes.

Kevin Zheng
Tolga Dalman | 26 Apr 08:50 2014

[RFC] cfpython: raise minimum required version to Python 2.7


currently, Python 2.4 is required for the map scripts to work properly. I
propose to require version 2.7 as minimum Python version, which was released
in 2010 and is still widely used.

With Python 2.7, we have the opportunity to cleanup some very old Python
conditional stuff. This way we should be able to replace cjson by the
Python standard library JSON implementation. What do you think ?

Best regards
Tolga Dalman
Tolga Dalman | 19 Apr 10:46 2014

Crossfire server code cleanup/janitorial

Dear community,

first of all: thank you very much for your efforts in the development of
crossfire. I'm a keen player of this game since around 2002.

Recently, I noticed several cleanup and janitorial work in the trunk. I wonder
whether there should be done more. Looking through the code, I have to
say that the overall quality of the server sources is really good. However,
crossfire is a software that has evolved since at least 1995.

Hence, I would like to ask you, the developer community, a number of general
questions about the future of the crossfire (server) development:

1. What platforms are still relevant ? Beside Linux and BSD, I found references 
to these OSes:  win32, hurd, hpux, ultrix, osf1, sgi, sun, vax, ibm032.

2. What C standard is relevant ? Moving towards C99 or even C11 would allow
large portions of cleanups (standard functions, types, language constructs,

3. What about the use of C++ (2011) ? It is clearly possible to smoothly convert 
existing code to C++ which allows better maintenance of the code.

Please understand these questions as a constructive effort to further improve 
the quality of the current code basis.

Best regards
Tolga Dalman
Kari Pahula | 13 Apr 12:14 2014

Building crossfire 1.71.0 server fails without arches


Crossfire 1.71.0 server is unbuildable without the arch directory.
Here's what happens in lib/ directory (from make -d's output):

    Considering target file `smooth'.
      Considering target file `.collect-stamp'.
       File `.collect-stamp' does not exist.
       Finished prerequisites of target file `.collect-stamp'.
      Must remake target `.collect-stamp'.
touch .collect-stamp
Putting child 0x01251550 (.collect-stamp) PID 15874 on the chain.
Live child 0x01251550 (.collect-stamp) PID 15874 
Reaping winning child 0x01251550 PID 15874 
Removing child 0x01251550 PID 15874 from chain.
      Successfully remade target file `.collect-stamp'.
     Finished prerequisites of target file `smooth'.
     Prerequisite `.collect-stamp' is newer than target `smooth'.
    Must remake target `smooth'.
touch .collect-stamp
Putting child 0x012744c0 (smooth) PID 15875 on the chain.
Live child 0x012744c0 (smooth) PID 15875 
Reaping winning child 0x012744c0 PID 15875 
make collect


Considering target file `collect'.
 File `collect' does not exist.
 Finished prerequisites of target file `collect'.
Must remake target `collect'.
make[1]: Entering directory `/home/kaol/deb/crossfire/crossfire-1.71.0/lib'
/usr/bin/perl -I. ./arch
Putting child 0x013c6600 (collect) PID 15877 on the chain.
Live child 0x013c6600 (collect) PID 15877 looking ...
couldn't open ./arch at line 500.
Reaping losing child 0x013c6600 PID 15877 
make[1]: *** [collect] Error 2

Here's the relevant rules from lib/

	touch .collect-stamp

	$(PERL) -I$(srcdir) $(builddir)/arch
	$(PERL) $(srcdir)/adm/ -src $(srcdir) -png

archetypes faces animations bmaps.paths smooth: .collect-stamp
	touch .collect-stamp
	$(MAKE) collect

install-data-local: archetypes crossfire.0 faces animations smooth

In short, install-data-local requires smooth, which requires
.collect-stamp, which gets created with touch.  Then smooth's rule
decides that smooth needs to be regenerated since .collect-stamp is
fresher than smooth, making the build fail since there's no arch

This would work if there was a lib/.collect-stamp with a correct
timestamp included with the server package, but there isn't.  I could
suggest that it wouldn't be a dot file since it wouldn't get waylaid
so easily then.  But this part would, IMHO, work even better without
using a stamp file at all.  The script generates a fairly
limited set of files and you had listed them already in the file itself.  I'm not sure how make -jn friendly the
current code is, either.

I ran into this while packaging 1.71.0 for Debian.  I worked around it
by calling touch -t 197001010101 lib/.collect-stamp before building
the server.