-simple animation for warrior classes
51 lines of code changed in 31 files:
-missed setting the face - hmm, they all look to the right anyway..
what's up with that?
8 lines of code changed in 8 files:
Checking in a bunch of player animations - starting with some race
images.
63 lines of code changed in 52 files:
added one more groundtype to the weather code:
6 lines of code changed in 1 file:
Add new images by Oliver (oberdorf@earthlink.net) - made up new archetypes
for these tiled images.
MSW 2003-03-30
30 lines of code changed in 7 files:
Fix transperancies of firebolts as per Bernd Edlers comments. This doesn't
effect display on new clients, but may make things work better for
systems with old png libraries.
Update the old player archetypes to contain proper animation
information.
Update the elf arch to demonstrate a 4 direction animated elf
player - only one of the directions is actually animated.
MSW 2003-03-30
44 lines of code changed in 25 files:
fixed download url
mids 2003-03-24
2 lines of code changed in 1 file:
common/client.c: Add some usleeps() in negotiate_connection() - this reduces
cpu load when negotiating the connection (given 10 ms for data to actually
come in before checking for new data). Also, add a count and if we don't
get a response back from the server in the time frame, bail out.
MSW 2003-03-24
25 lines of code changed in 2 files:
common/glue.c, include/funcpoint.h: remove draw_func() pointer - no longer
needed, so code that sets up pointer removed.
lib/*: rebuilt - facings added to old player animation information.
ruined_temple archetype added.
server/init.c: remove set_draw() function
server/player.c: remove call to draw() - socket code takes care of this.
socket/info.c: remove draw() - instead, draw_client_map() can be used,
as that is most the only thing draw() did anyways.
socket/loop.c: Update draw() calls to draw_client_map()
socket/request.c: Remove special handling for darkness==4 cases (first
space that is in full darkness) - this is extra complications and causes
display problems. Update draw_client_map() to include the little bit
of logic that draw() had that this function did not have.
MSW 2003-03-24
15 lines of code changed in 4 files:
276 draw_info(" savewinpos - save window positions - ", NDI_BLACK);
277 draw_info(" split windows mode only", NDI_BLACK);
278 draw_info(" savedefaults save various defaults into", NDI_BLACK);
279 draw_info(" ~/.crossfire/defaults", NDI_BLACK);
280 draw_info(" show - determine what type of items", NDI_BLACK);
281 draw_info(" to show in inventory", NDI_BLACK);
317 void command_take (const char *command, char *cpnext)
318 {
319 /* If the player has specified optional data, or the player
320 * does not have a container open, just issue the command
321 * as normal
322 */
323 if (cpnext || cpl.container == NULL)
324 send_command(command, cpl.count, 0);
325 else {
326 if (cpl.container->inv == NULL)
327 draw_info("There is nothing in the container to move", NDI_BLACK);
328 else
329 cs_print_string(csocket.fd,"move %d %d %d", cpl.ob->tag,
330 cpl.container->inv->tag, cpl.count);
331 }
332 }
333
334
335 /* This is an extended command (ie, 'who, 'whatever, etc). In general,
336 * we just send the command to the server, but there are a few that
337 * we care about (bind, unbind)
338 *
339 * The command past to us can not be modified - if it is a keybinding,
340 * we get passed the string that is that binding - modifying it effectively
341 * changes the binding.
342 */
343
344 void extended_command(const char *ocommand) {
345 const char *cp = ocommand;
346 char *cpnext, command[MAX_BUF];
347
348 if ((cpnext = strchr(cp, ' '))!=NULL) {
349 int len = cpnext - ocommand;
350 if (len > (MAX_BUF -1 )) len = MAX_BUF-1;
351
352 strncpy(command, ocommand, len);
353 command[len] = '\0';
354 cp = command;
355 while (*cpnext == ' ')
356 cpnext++;
357 if (*cpnext == 0)
358 cpnext = NULL;
359 }
360
361 /* cp now contains the command (everything before first space),
362 * and cpnext contains everything after that first space. cpnext
363 * could be NULL.
364 */
365
366 /* I alphabetized the list of commands below to make it easier to
367 * find/see what the extended commands are and what they do.
368 */
369 if (!strcmp(cp,"autorepeat")) set_autorepeat(cpnext);
370 else if (!strcmp(cp, "bind")) bind_key(cpnext);
336 * we just send the command to the server, but there are a few that
337 * we care about (bind, unbind)
338 *
339 * The command past to us can not be modified - if it is a keybinding,
340 * we get passed the string that is that binding - modifying it effectively
341 * changes the binding.
342 */
343
344 void extended_command(const char *ocommand) {
345 const char *cp = ocommand;
346 char *cpnext, command[MAX_BUF];
347
348 if ((cpnext = strchr(cp, ' '))!=NULL) {
349 int len = cpnext - ocommand;
350 if (len > (MAX_BUF -1 )) len = MAX_BUF-1;
351
352 strncpy(command, ocommand, len);
353 command[len] = '\0';
354 cp = command;
355 while (*cpnext == ' ')
356 cpnext++;
357 if (*cpnext == 0)
358 cpnext = NULL;
359 }
360
361 /* cp now contains the command (everything before first space),
362 * and cpnext contains everything after that first space. cpnext
363 * could be NULL.
364 */
365
366 /* I alphabetized the list of commands below to make it easier to
367 * find/see what the extended commands are and what they do.
368 */
369 if (!strcmp(cp,"autorepeat")) set_autorepeat(cpnext);
370 else if (!strcmp(cp, "bind")) bind_key(cpnext);
371 else if (!strcmp(cp,"cwindow")) set_command_window(cpnext);
Jove (C) [image.c:3] "common/player.c" - /export/home/crossfire/client-CVS (23:25)
[hugin:/export/home/crossfire/client-CVS] (137) % l
CHANGES Makefile.in aclocal.m4 config.status* gmon.out macros/ x11/
COPYING NOTES autom4te-2.53.cache/ configure* gnome/ pixmaps/
CVS/ README autom4te.cache/ configure.in gtk/ sdl/
License README.rpm common/ crossfire-client.spec help/ sound-src/
Makefile TODO config.log cscope.out logfile utils/
[hugin:/export/home/crossfire/client-CVS] (138) % more README
Install Steps:
0) Prerequisites:
You will need the XPM library to compile the client.
If you want to run the gtk client, you will need to install the gtk
libraries.
If you want png support, you will need to install the png
library.
If you want sdl support ( recommended) you will need both gtk and png
as well as the main SDL library and the SDL_image library, both of
which can be found at http://www.libsdl.org if not already installed
on your system.
1) type './configure' to configure for your OS/system. Most options
normally understood by configure should be available.
The configure script will try to make all the right decisions. It will
search for the needed libraries and headers. You may need to give
hints on the locations of some files (png library, gtk library).
If configure finds gtk libraries, it will build the gcfclient in addition
to the cfclient. If you don't want this (only cfclient), use the
--disable-gtk (there is no way to disable the cfclient at this time -
if you are able to compile the gtk client, you also have all the tools for
for the cfclient).
If SDL libraries are found on your system, SDL support is automatically
compiled it (Note: only the gcfclient supports sdl). Use --disable-sdl
if you don't want this.
The system will use the new sound system if available (this is a seperate
sound daemon). If you want to use the builtin sound system, use
the --enable-old-sound. See sound notes further down.
To specify additional places to find header files, use the
--with-includes=value - this includes any -I or other options to provide
the compiler. Example:
./configure --with-includes="-I/usr/local/include -I/opt/xpm/include"
Similarly, there is a --with-ldflags option. Example:
./configure --with-ldflags="-L/usr/local/lib -R/usr/local/lib"
-R is used on many systems to specify run location for libraries so
you don't need to set LD_LIBRARY_PATH.
Generally, if you are setting --with-includes, your probably need to
set --with-ldflags, as if one is not in a standard place, the other
probably is not either.
The client works with the 0.5 version of the ALSA sound system.
If you are using a newer version and are having troubles compiling,
try running configure with the '--disable-alsa' option.
2) Type 'make depend; make' to compile the client. If you get link errors,
it may be because you have an older version of the gtk libraries. If
you get errors like 'can't find target client.c', your make program
isn't very good and use should get/use gnu make instead.
3) Type 'make install' to install the binaries.
4) The client can be run by typing 'cfclient' for the X11 version, gcfclient
for the gtk client, gcfclient -sdl for the SDL version.
------------------------------------------------------------------------------
Converting keybindings from old save files for use with the client:
1) You will need to get a copy of your character file.
2) Type "mkdir ~/.crossfire". This will automatically be done the first
time you run the client.
3) Type awk 'BEGIN {ORS=" "} /^key /
{for (i=2; i<=NF; i++) print $i;printf "\n"}'
infile > ~/.crossfire/keys
(Note that this should all be entered on one line, but is broken up
here to be more readable.)
'infile' is the name of the character file.
Note that the client use global keybindings, and not per character. This
means that the same keybindings will be for all characters you play with the
client.
The gtk client and x11 client both use the same keybindings file.
------------------------------------------------------------------------------
Sound support:
If you wnat 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.
The sounds file determines what file is played for what sound. The default
location for the sound files is <prefix>/share/cfclient/sounds. <prefix>
is the -prefix= option given when running configure, default of /usr/local.
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 ~/.crossfire/sounds file (some format), that file
will be used instead of the built in defaults.
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.
CONFIG FILE
The config file ~/.crossfire/sndconfig contains some configurable settings. If
there is no such file, one with default settings will be created.
The file contains following fields:
stereo: 1 means stereo sound, 0 - mono
bits: bitrate of generated sound - 8 or 16
16 means better quality, especially when more sounds
are to be played simultaneously, but takes more memory
signed: if we should sent signed data to the soundcard. 1 means yes.
frequency: speed of playing data. This should be 11025, or sound pitch
will change
buffers: how many buffers to allocate
buflen: how big the buffers should be. buffers*buflen shouldn't be
smaller than the longest sound to be played.
simultaneously: home many sound can be played at the same time. When this
setting is bigger, each sound volume will decrease.
HOW DOES IT WORK?
The sound server gets information about sounds to be played on standard input.
The information is a line:
<sound number> <sound type> <relative x> <relative y>
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's source was
5 units to the right of player.
Sounds are mixed in special buffers, which are in fact one buffer, which should
be big enough for the biggest sound to be played.
The buffers, if contain anything, are sent one by one to the sound device.
Each buffer is cleaned after playing.
Sounds data is multiplied by some ratio (<1) evaluated from it's position and
volume and added to the buffers, starting from the next after the one being
played.
So bigger buffer means bigger delay, before th sound is actually played, but
the smaller buffer is, the bigger is possibility, we won't succeed filling the
next buffer, before last is played.
------------------------------------------------------------------------------
IMAGES
The client will get any images that it is missing from the server. This
can include the entire image set.
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 <prefix>/share/cfclient/, where <prefix> is deteremined
by the -prefix= option given when running configure.
The mechanism the client uses to find a matching image file when the
server tells it an image name is thus:
1) Look in ~/.crossfire/gfx. 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.
2) Look in ~/.crossfire/crossfire-images then <prefix>/share/cfclient/crossfire-images.
If the checksum matches the image from the
respective directory is used. Note that if the checksums match, it really doesn't
matter what image location we use, as it is the same image.
4) Get the image from the server. If -cache is set, a copy of it is put into
~/.crossfire/crossfire-images.
------------------------------------------------------------------------------
Authors of the client:
Mark Wedel (mwedel@sonic.net) - general client source and Xlib client
David Sundqvist (azzie@netpolicy.com) - GTK+ port
Raphael Quinet (Raphael.Quinet@eed.ericsson.se) - Configure scripts and
graphics
Jacek Konieczny <jajcus@zeus.polsl.gliwice.pl> - New Sound System support.
Eric Anderson did a lot of initial work on the client.
Scott MacFiggen (smurf@CSUA.Berkeley.EDU) - SDL support
[hugin:/export/home/crossfire/client-CVS] (139) %
[hugin:/export/home/crossfire/client-CVS] (139) % ls
CHANGES Makefile.in aclocal.m4 config.status gmon.out macros x11
COPYING NOTES autom4te-2.53.cache configure gnome pixmaps
CVS README autom4te.cache configure.in gtk sdl
License README.rpm common crossfire-client.spec help sound-src
Makefile TODO config.log cscope.out logfile utils
[hugin:/export/home/crossfire/client-CVS] (140) % cvs update -dP
Warning: Remote host denied X11 forwarding.
? autom4te-2.53.cache
? autom4te.cache
? cscope.out
? gmon.out
? logfile
*/
dark0 = the_map.cells[mx][my].darkness;
if (y-1 < 0 || !the_map.cells[mx][my-1].have_darkness) dark1 = dark0;
else dark1 = the_map.cells[mx][my-1].darkness;
if (x+1 >= use_config[CONFIG_MAPWIDTH] || !the_map.cells[mx+1][my].have_darkness) dark2 =!
else dark2 = the_map.cells[mx+1][my].darkness;
if (y+1 >= use_config[CONFIG_MAPHEIGHT] || !the_map.cells[mx][my+1].have_darkness) dark3 !
else dark3 = the_map.cells[mx][my+1].darkness;
if (x-1 < 0 || !the_map.cells[mx-1][my].have_darkness) dark4 = dark0;
else dark4 = the_map.cells[mx-1][my].darkness;
/* If they are all the same, processing is easy */
if (dark0 == dark1 && dark0 == dark2 && dark0 == dark3 && dark0 == dark4) {
dst.x = x * map_image_size;
dst.y = y * map_image_size;
dst.w = map_image_size;
dst.h = map_image_size;
if (dark0 == 255) {
SDL_FillRect(mapsurface,&dst, SDL_MapRGB(mapsurface->format, 0, 0, 0));
} else if (the_map.cells[mx][my].darkness != 0) {
SDL_FillRect(lightmap,NULL, SDL_MapRGBA(lightmap->format, 0, 0, 0, the_map.cells[!
SDL_BlitSurface(lightmap, NULL, mapsurface, &dst);
}
return;
}
if (use_config[CONFIG_LIGHTING] == CFG_LT_PIXEL ) {
/* This almost works as well as the per pixel code below, but does have some various
* artifacts in the drawing. It uses the same logic as the per pixel code below,
* bit since SDL does the blit, the alpha handling ends up being different
Jove (C) [sdl.c:3] "sdl.c" - /export/home/crossfire/client-CVS/gtk (23:34)
[hugin:/export/home/crossfire/client-CVS/gtk] (145) %
[hugin:/export/home/crossfire/client-CVS/gtk] (145) % l
CVS/ config.o gcfclient.man gx11.h keys.c png.c sound.c
Makefile crossfire-client.desktop gtkproto.h gx11.o keys.o png.o sound.o
Makefile.in cscope.out gx11.c image.c map.c sdl.c
config.c gcfclient* gx11.c~ image.o map.o sdl.o
[hugin:/export/home/crossfire/client-CVS/gtk] (146) % l *.h
gtkproto.h gx11.h
[hugin:/export/home/crossfire/client-CVS/gtk] (147) % more gx11.h
/*
* static char *rcsid_gx11_h =
* "$Id: gx11.h,v 1.6 2002/05/22 04:58:26 mwedel Exp $";
*/
/*
Crossfire client, a client program for the crossfire program.
Copyright (C) 2001 Mark Wedel & Crossfire Development Team
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
The author can be reached via e-mail to crossfire-devel@real-time.com
*/
#ifndef GX11_H
#define GX11_H
#include "client-types.h"
#include "item.h"
extern int map_size, image_size, map_image_size, map_image_half_size;
extern uint8 map_did_scroll;
extern uint8 updatekeycodes, time_map_redraw,redraw_needed;
extern int updatelock;
/* Pixmap data. This is abstracted in the sense that the
/* Pixmap data. This is abstracted in the sense that the
* code here does not care what the data points to (hence the
* void). The module using this data should know whether it
* is these point to png data or image data of whatever form.
* The module is not required to use all these fileds -
* as png data includes transperancy, it will generally not
* use the mask fields and instead just put its data into the
* appropiate image fields.
*
* As images can now be of variable size (and potentially re-sized),
* the size information is stored here.
*/
#define DEFAULT_IMAGE_SIZE 32
#define MAXPIXMAPNUM 10000
typedef struct {
void *icon_mask, *icon_image;
uint16 icon_width, icon_height;
void *map_mask, *map_image;
uint16 map_width, map_height;
void *fog_mask, *fog_image;
} PixmapInfo;
extern PixmapInfo *pixmaps[MAXPIXMAPNUM];
/* Some global widgetws */
extern GtkWidget *gtkwin_root,*drawingarea,*run_label,*fire_label;
extern GtkWidget *gtkwin_info, *gtkwin_stats, *gtkwin_message;
extern GtkWidget *gtkwin_look, *gtkwin_inv, *gtkwin_config;
extern GtkWidget *entrytext, *counttext;
extern GdkPixmap *mapwindow,*dark;
extern GdkBitmap *dark1, *dark2, *dark3;
extern GdkGC *mapgc;
extern GtkWidget *ckentrytext, *ckeyentrytext, *cmodentrytext,*cnumentrytext, *cclist;
extern GtkTooltips *tooltips;
#define TYPE_LISTS 9
Jove (C) [gx11.h:3] "gx11.h" - /export/home/crossfire/client-CVS/gtk (23:39)
...skipping...
/* Pixmap data. This is abstracted in the sense that the
* code here does not care what the data points to (hence the
* void). The module using this data should know whether it
* is these point to png data or image data of whatever form.
* The module is not required to use all these fileds -
* as png data includes transperancy, it will generally not
* use the mask fields and instead just put its data into the
* appropiate image fields.
*
* As images can now be of variable size (and potentially re-sized),
* the size information is stored here.
*/
#define DEFAULT_IMAGE_SIZE 32
#define MAXPIXMAPNUM 10000
typedef struct {
void *icon_mask, *icon_image;
uint16 icon_width, icon_height;
void *map_mask, *map_image;
uint16 map_width, map_height;
void *fog_mask, *fog_image;
} PixmapInfo;
extern PixmapInfo *pixmaps[MAXPIXMAPNUM];
/* Some global widgetws */
extern GtkWidget *gtkwin_root,*drawingarea,*run_label,*fire_label;
extern GtkWidget *gtkwin_info, *gtkwin_stats, *gtkwin_message;
extern GtkWidget *gtkwin_look, *gtkwin_inv, *gtkwin_config;
extern GtkWidget *entrytext, *counttext;
extern GdkPixmap *mapwindow,*dark;
extern GdkBitmap *dark1, *dark2, *dark3;
extern GdkGC *mapgc;
extern GtkWidget *ckentrytext, *ckeyentrytext, *cmodentrytext,*cnumentrytext, *cclist;
extern GtkTooltips *tooltips;
#define TYPE_LISTS 9
/*
[hugin:/export/home/crossfire/client-CVS/gtk] (148) % man printf
<standard input>:45: a newline character is not allowed in an escape name
<standard input>:48: a newline character is not allowed in an escape name
<standard input>:57: cannot use newline as a starting delimiter
<standard input>:60: warning: numeric expression expected (got `N')
PRINTF(1) FSF PRINTF(1)
NAME
printf - format and print data
SYNOPSIS
printf FORMAT [ARGUMENT]...
printf OPTION
DESCRIPTION
Print ARGUMENT(s) according to FORMAT.
--help display this help and exit
--version
output version information and exit
FORMAT controls the output as in C printf. Interpreted sequences are:
double quote
NNN character with octal value NNN (0 to 3 digits)
b backslash
a
c.... alert (BEL)
k
s.TP produce no further output
p
a
form feed
e
new line
carriage return
horizontal tab
vertical tab
N character with hexadecimal value NNN (1 to 3 digits)
%% a single %
%b ARGUMENT as a string with `<B4> escapes interpreted
and all C format specifications ending with one of diouxXfeEgGcs, with ARGU<AD>
MENTs converted to proper type first. Variable widths are handled.
REPORTING BUGS
Report bugs to <bug-sh-utils@gnu.org>.
SEE ALSO
The full documentation for printf is maintained as a Texinfo manual. If the
info and printf programs are properly installed at your site, the command
info printf
should give you access to the complete manual.
COPYRIGHT
Copyright <A9> 1999 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
GNU sh-utils 2.0 July 2000 PRINTF(1)
PRINTF(3) Linux Programmer's Manual PRINTF(3)
NAME
printf, fprintf, sprintf, snprintf, vprintf, vfprintf, vsprintf, vsnprintf -
formatted output conversion
SYNOPSIS
#include <stdio.h>
int printf(const char *format, ...);
int fprintf(FILE *stream, const char *format, ...);
int sprintf(char *str, const char *format, ...);
int snprintf(char *str, size_t size, const char *format, ...);
#include <stdarg.h>
int vprintf(const char *format, va_list ap);
int vfprintf(FILE *stream, const char *format, va_list ap);
int vsprintf(char *str, const char *format, va_list ap);
int vsnprintf(char *str, size_t size, const char *format, va_list ap);
DESCRIPTION
The functions in the printf family produce output according to a format as
described below. The functions printf and vprintf write output to stdout, the
standard output stream; fprintf and vfprintf write output to the given output
stream; sprintf, snprintf, vsprintf and vsnprintf write to the character
string str.
The functions vprintf, vfprintf, vsprintf, vsnprintf are equivalent to the
functions printf, fprintf, sprintf, snprintf, respectively, except that they
are called with a va_list instead of a variable number of arguments. These
functions do not call the va_end macro. Consequently, the value of ap is unde<AD>
fined after the call. The application should call va_end(ap) itself after<AD>
wards.
These eight functions write the output under the control of a format string
that specifies how subsequent arguments (or arguments accessed via the vari<AD>
able-length argument facilities of stdarg(3)) are converted for output.
Return value
These functions return the number of characters printed (not including the
trailing '\0' used to end output to strings). The functions snprintf and
vsnprintf do not write more than size bytes (including the trailing '\0'). If
the output was truncated due to this limit then the return value is the number
of characters (not including the trailing '\0') which would have been written
to the final string if enough space had been available. Thus, a return value
of size or more means that the output was truncated. (See also below under
NOTES.)
Format of the format string
The format string is a character string, beginning and ending in its initial
shift state, if any. The format string is composed of zero or more direc<AD>
tives: ordinary characters (not %), which are copied unchanged to the output
stream; and conversion specifications, each of which results in fetching zero
or more subsequent arguments. Each conversion specification is introduced by
the character %, and ends with a conversion specifier. In between there may
be (in this order) zero or more flags, an optional minimum field width, an
optional precision and an optional length modifier.
The arguments must correspond properly (after type promotion) with the conver<AD>
sion specifier. By default, the arguments are used in the order given, where
each `*' and each conversion specifier asks for the next argument (and it is
an error if insufficiently many arguments are given). One can also specify
explicitly which argument is taken, at each place where an argument is
required, by writing `%m$' instead of `%' and `*m$' instead of `*', where the
decimal integer m denotes the position in the argument list of the desired
argument, indexed starting from 1. Thus,
printf("%*d", width, num);
and
printf("%2$*1$d", width, num);
are equivalent. The second style allows repeated references to the same argu<AD>
ment. The C99 standard does not include the style using `$', which comes from
the Single Unix Specification. If the style using `$' is used, it must be
used throughout for all conversions taking an argument and all width and pre<AD>
cision arguments, but it may be mixed with `%%' formats which do not consume
an argument. There may be no gaps in the numbers of arguments specified using
`$'; for example, if arguments 1 and 3 are specified, argument 2 must also be
specified somewhere in the format string.
For some numeric conversions a radix character (`decimal point') or thousands'
grouping character is used. The actual character used depends on the
LC_NUMERIC part of the locale. The POSIX locale uses `.' as radix character,
and does not have a grouping character. Thus,
printf("%'.2f", 1234567.89);
results in `1234567.89' in the POSIX locale, in `1234567,89' in the nl_NL
locale, and in `1.234.567,89' in the da_DK locale.
The flag characters
The character % is followed by zero or more of the following flags:
# The value should be converted to an ``alternate form''. For o conver<AD>
sions, the first character of the output string is made zero (by pre<AD>
fixing a 0 if it was not zero already). For x and X conversions, a
non-zero result has the string `0x' (or `0X' for X conversions)
prepended to it. For a, A, e, E, f, F, g, and G conversions, the
result will always contain a decimal point, even if no digits follow it
(normally, a decimal point appears in the results of those conversions
only if a digit follows). For g and G conversions, trailing zeros are
not removed from the result as they would otherwise be. For other con<AD>
versions, the result is undefined.
0 The value should be zero padded. For d, i, o, u, x, X, a, A, e, E, f,
F, g, and G conversions, the converted value is padded on the left with
zeros rather than blanks. If the 0 and - flags both appear, the 0 flag
is ignored. If a precision is given with a numeric conversion (d, i,
o, u, x, and X), the 0 flag is ignored. For other conversions, the
behavior is undefined.
- The converted value is to be left adjusted on the field boundary. (The
default is right justification.) Except for n conversions, the con<AD>
verted value is padded on the right with blanks, rather than on the
left with blanks or zeros. A - overrides a 0 if both are given.
' ' (a space) A blank should be left before a positive number (or empty
string) produced by a signed conversion.
+ A sign (+ or -) always be placed before a number produced by a signed
conversion. By default a sign is used only for negative numbers. A +
overrides a space if both are used.
The five flag characters above are defined in the C standard. The SUSv2 spec<AD>
ifies one further flag character.
' For decimal conversion (i, d, u, f, F, g, G) the output is to be
grouped with thousands' grouping characters if the locale information
indicates any. Note that many versions of gcc cannot parse this option
and will issue a warning. SUSv2 does not include %'F.
glibc 2.2 adds one further flag character.
I For decimal integer conversion (i, d, u) the output uses the locale's
alternative output digits, if any (for example, Arabic digits). How<AD>
ever, it does not include any locale definitions with such outdigits
defined.
The field width
An optional decimal digit string (with nonzero first digit) specifying a mini<AD>
mum field width. If the converted value has fewer characters than the field
width, it will be padded with spaces on the left (or right, if the left-
adjustment flag has been given). Instead of a decimal digit string one may
write `*' or `*m$' (for some decimal integer m) to specify that the field
width is given in the next argument, or in the m-th argument, respectively,
which must be of type int. A negative field width is taken as a `-' flag fol<AD>
lowed by a positive field width. In no case does a non-existent or small
field width cause truncation of a field; if the result of a conversion is
wider than the field width, the field is expanded to contain the conversion
result.
The precision
An optional precision, in the form of a period (`.') followed by an optional
decimal digit string. Instead of a decimal digit string one may write `*' or
`*m$' (for some decimal integer m) to specify that the precision is given in
the next argument, or in the m-th argument, respectively, which must be of
type int. If the precision is given as just `.', or the precision is nega<AD>
tive, the precision is taken to be zero. This gives the minimum number of
digits to appear for d, i, o, u, x, and X conversions, the number of digits to
appear after the radix character for a, A, e, E, f, and F conversions, the
maximum number of significant digits for g and G conversions, or the maximum
number of characters to be printed from a string for s and S conversions.
The length modifier
Here, `integer conversion' stands for d, i, o, u, x, or X conversion.
hh A following integer conversion corresponds to a signed char or unsigned
char argument, or a following n conversion corresponds to a pointer to
a signed char argument.
h A following integer conversion corresponds to a short int or unsigned
short int argument, or a following n conversion corresponds to a
pointer to a short int argument.
l (ell) A following integer conversion corresponds to a long int or
unsigned long int argument, or a following n conversion corresponds to
a pointer to a long int argument, or a following c conversion corre<AD>
sponds to a wint_t argument, or a following s conversion corresponds to
a pointer to wchar_t argument.
ll (ell-ell). A following integer conversion corresponds to a long long
int or unsigned long long int argument, or a following n conversion
corresponds to a pointer to a long long int argument.
L A following a, A, e, E, f, F, g, or G conversion corresponds to a long
double argument. (C99 allows %LF, but SUSv2 does not.)
q (`quad'. BSD 4.4 and Linux libc5 only. Don't use.) This is a synonym
for ll.
"$Id: CHANGES,v 1.97 2003/02/25 07:52:21 mwedel Exp $"
Top of CVS tree:
------------------------------------------------------------------------------
configure.in, configure: checks added for alsa9 sound - update for cfsndserv.c
should come shortly.
common/client.c: Fix setup problem - it was using FOGWAR setting when
determining if client wanted darkness - should have been using darkness
setting. This was resulting in darkness not being used if fog of war was
turned off.
x11/x11.c: Modify handling of mouse button press logic - rather than only
modifier being shift, do appropriate logic if the shift mask is set,
but does not have to be only modifier set.
--
The following bits changes how fog of war looks in SDL mode. Now, fog of
war spaces are drawn in greyscale, instead of half darkness. This makes
it clearer what the status of the space is (fog of war/darkness). This change
probably uses less cpu to draw, but uses more memory for the images (as it
now has to store a rendered greyscale image). If not using SDL, you'll still
have the old behaviour (dimmed spaces for fog of war), and no significant
amount of extra memory will be used.
--
gtk/gx11.h: Add fog_image pointer to PixmapInfo structure.
gtk/image.c: Add code to render greyscale image. Also add code to free
greyscale image.
gtk/sdl.c: Modify map draw code to use grey fog image if space is fog of
war space. Disable dimming of fog spaces - no longer necessary as
space now looks different.
MSW 2003-03-24
276 lines of code changed in 8 files:
bring forward some typos that were made in the small world maps to the big
world maps (library & beginners).
remove some excess floors from the tinytrade map.
MSW 2003-03-20
5 lines of code changed in 3 files:
server/spell_effect.c: Some code cleanuip to cast_change_attr - mostly
to combine the processing of the stat improving spells together.
The actual change to playability is that bless and holy possession
don't stack if cast multiple times.
server/spell_util.c: Modify create_aura so that player can't have more than
one aura (of the same type) active at a time.
MSW 2003-03-20
358 lines of code changed in 3 files:
server/apply.c: Change weapon improving code to only use up the number of
potions that it needs, and not all on the ground. Required adding
another arg to eat_item() which is the number of items to consume.
include/sproto.h: Rebuilt for new eat_item() (actually, a static, so no
longer shows up in this file)
MSW 2003-03-19
31 lines of code changed in 3 files:
server/attack.c: Change did_make_save to strip out magic attacktype when making
saves for objects - otherwise, things like poison cloud destroy objects.
server/time.c: deal with player animations special in process_object - need to
pass in the facing value, and not direction, since direction gets reset.
MSW 2003-03-19
23 lines of code changed in 3 files:
increase MAX_OBJECTS to 100,000. This value may still be too low, but
I have observed problems on a very active server (metalforge) where maps
are getting swapped out immediately as a player transfers to a new one -
this causes problems (crashes) in the caller that expects the map the
object just came from to still be in memory.
MSW 2003-03-18
1 lines of code changed in 1 file:
crossedit/Attr.c, server/main.c, server/time.c: Update calls to animate_object()
MSW 2003-03-18
2 lines of code changed in 2 files:
common/anim.c: Pass direction to animate_object() - needed for player
animations as player's facing may not match direction.
crossedit/Attr.c, server/main.c, server/time.c: Update calls to animate_object()
include/libproto.h: rebuilt
include/newserver.h, plugin_animator/animator_box.c, socket/init.c,
socket/request.c: Remove newanim field from socket structure - not needed -
how to animate is determined by object, not by socket.
server/move.c: Add check to P_OUT_OF_MAP in teleport function.
server/player.c: change move_player to call animate_object, so it gets full
power of functionality it supports instead of 4 way hardcode animation
information.
server/spell_effect.c: When altars are consecrated, don't look to arch name
for first portion of name - always call them Altar of %s - fixes problem
where altar is special god altar that has god's name in archetype, resulting
in altar of .. of ...
MSW 2003-03-18
41 lines of code changed in 11 files:
add 'facings' to all the player related arc's. Needed for it to
be compatible with normal object animation.
MSW 2003-03-18
26 lines of code changed in 26 files:
- dropping off some images for player animations
17 lines of code changed in 12 files:
orc and ogre cleaning - randomize anims
14 lines of code changed in 22 files:
- replaced windows CR/LF(^M) with LF
0 lines of code changed in 2 files:
- couldn't figure out what was wrong with my anim - the arc had it
backwards all along
12 lines of code changed in 13 files:
Made a 2.5D cyclops, reworked the classic ent, cleaned up some multipart
houses and added a ruined temple
102 lines of code changed in 63 files:
Forgot to update the type to 64 bit value for resurrection code.
MSW 2003-03-08
2 lines of code changed in 1 file:
Update a few printf/sprintf to use %lld for 64 bit exp values.
MSW 2003-03-08
3 lines of code changed in 3 files:
More fixes for random map sizes - move the check for minimum size up
higher in the code (before expand2x and symmetry are checked). At another
check after size adjustments for symmetry and expand2x are done to make
sure size meets minimum values - if not, reset them. Some layouts
don't work right if map size is too small.
MSW 2003-03-08
9 lines of code changed in 1 file:
Checked in the new weak wall (from Kevin R. Bulgrien),
a small correction to another weak wall type,
and the new DreadKnight & DShield for base set.
--AndreasV
4 lines of code changed in 77 files:
Patch for 64 bit experience total, as well as flexible number of levels.
Basically, max level is now dynamic, set in exp_table file. Experience
is now a 64 bit value, so much higher totals now allowed. To
allow for flexible levels, add new function - did_make_save() which is used
for players/monsters to see if they make their saving throw - this is
necessary because the savethrow[] array may not be as large as max level -
did_make_save takes this into account.
NOTE: If your updating a server, you will need to copy over/set up a
new exp_table file that has max_levels defined and at least one of the
tables uncommented. There are no longer any compiled in defaults
--
configure, configure.ac: Add AC_CHECK_SIZEOF calls for long and long long
so we can know which one to use for 64 bit support (other checks
may need to be added)
common/exp.c: Remove levels table, replace it with a 64 bit pointer.
Change init_experience to allocate appropriately sized table, have it
read max_level value from exp_table file. Replace atoi calls with
atoll to get 64 bit value. Update dump_experience to properly
print 64 bit values.
common/info.c: Update dump routines that dump exp to properly print
64 bit values.
common/init.c: Add initializing for settings.max_level value.
common/item.c: Update sprintf's to handle 64 bit output of exp (speed)
value in objects.
common/living.c: change MAX_EXP define, update MAX_EXP_IN_OBJ define,
add MAX_SAVE_LEVEL which corresponds to how large the savethrow
table is. Change MAXLEVEL to settings.max_level. Change level_exp()
to return 64 bit value, other updates in functions to use 64 bit
values. Add did_make_save() function.
common/loader.l, common/loader.c: Update load/save routins of exp to
deal with 64 bit values.
common/map.c: Update calculate_difficulty to use 64 bit values when
storing exp - unlikely to make a difference, since unlikely any map
will get to a point where it has that much exp on it.
common/porting.c: Remove dead code from save_long(), add save_long_long()
to save 64 bit values.
include/autoconf.h.in: SIZEOF_LONG and SIZEOF_LONG_LONG values added.
include/global.h: Add code to typedef sint64/uint64 types based on what
type gives us those values. Add max_level to settings array.
include/libproto.h: rebuilt.
include/living.h: Replace exp field with 64 bit value.
include/player.h: Update party kill log exp tracking to have 64 bit
values.
lib/exp_table: Udpate comments about max_level, uncomment what
was the default table so new installs have working table.
Add 5 levels to all the tables.
random_maps/monster.c: Update place_monsters to use 64 bit when storing
exp total for map/per square.
server/apply.c: Replace MAXLEVEL with settings.max_level, add
did_make_save calls where appropriate
server/c_misc.c: have statistics command properly print 64 bit
exp value.
server/c_wiz.c: Have stats command properly display 64 bit value.
server/hiscore.c: Replace exp values with 64 bit values, update to
properly load/display them.
server/player.c: replace savethrow[] reference with did_make_save()
server/skill_util.c: Update skills command to properly show 64 bit exp values.
server/spell_effect.c: replace savethrow[] reference with did_make_save(),
allow players to cast directors right beneath themselves, but other
walls must be on empty space.
MSW 2003-03-07
1015 lines of code changed in 26 files:
Minor changes to clean up some compiler warnings.
MSW 2003-03-07
3 lines of code changed in 1 file:
commit file that I thought was already updated - fix for missing /
in python search paths.
MSW 2003-03-07
1 lines of code changed in 1 file:
Add weidhg to archetype so that it actually works by default without
map maker having to set weight value.
MSW 2003-03-07
1 lines of code changed in 1 file:
Various bug fixes.
crossedit/Attr.c: Minor cleanup to eliminate some compile time warnings.
plugin/plugin_python.c: Remove some unused variables, thus fixing up some
compiler warnings.
random_maps/random_map.c, random_maps/random_map.h, random_maps/special.c:
Add MIN_RANDOM_MAP_SIZE values instead of hardcode constants.
server/monster.c: Fix communicate - odd bug can be map gets swapped out
just after player is transferred to another map, causing crashes as
map that was originally spoken on is no longer in memory.
server/rune.c: add missing free_object call when erasing runes.
server/skills.c: Change write_on_item to determine type of writing based
on content of mesage, or lack thereof, and not the marked object.
Fix problem of buf not being initalized.
MSW 2003-03-06
52 lines of code changed in 9 files:
Fix bug in rogue layout in that if it is a single room, the exits
aren't placed next to each other - normally not a problem, but if the
map is symmetric, exit may otherwise be placed in another room that
isn't properly connected (that's really a problem in connect_spirals)
MSW 2003-03-04
15 lines of code changed in 1 file:
Go back to old code that adds 1 to the random seed - this is necessary
because this data is used to make the next level, and if we constantly
use the same seed, the levels look pretty similar.
MSW 2003-03-01
4 lines of code changed in 1 file:
Various bug fixes.
Makefile.am, Makefile.in: Put crossedit as the last directory, so any build
errors for crossedit doesn't effect anything else.
README: Update ftp site listing.
TODO: More things aded.
aclocal.m4, configure: Add missing / when checking in /usr/local for
python headers.
common/map.c: Add some debugging in free_all_objects that checks to make sure
there are not objects remaining that belong to the map just freed -
only active if MANY_CORES is set.
random_maps/random_map.c: Increase minimum random map size to 10x10 - this
is need for square spirals to work properly I think.
server/spell_effect.c: Have perceive self tell dragon players what they are
currently focused on. Fix town portal to remove force objects from
players if destination is no longer available.
server/swap.c: Reset maps reset_time when loading them in in read_map_log() -
this is only used if recycle temp maps is on. Also, do sanity checking
on reset_time value - bogus values were observed on metalforge.
socket/request.c: Update map timeout in draw_client_map() - in this way,
we don't swap out a map within a players view only to swap it back
in.
MSW 2003-03-01
214 lines of code changed in 12 files: