You can subscribe to this list here.
| 2000 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(187) |
Dec
(318) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2001 |
Jan
(268) |
Feb
(231) |
Mar
(251) |
Apr
(372) |
May
(258) |
Jun
(197) |
Jul
(85) |
Aug
(175) |
Sep
(77) |
Oct
(213) |
Nov
(108) |
Dec
(53) |
| 2002 |
Jan
(38) |
Feb
(50) |
Mar
(32) |
Apr
(30) |
May
(34) |
Jun
(24) |
Jul
(42) |
Aug
(29) |
Sep
(58) |
Oct
(57) |
Nov
(73) |
Dec
(51) |
| 2003 |
Jan
(98) |
Feb
(64) |
Mar
(39) |
Apr
(38) |
May
(67) |
Jun
(39) |
Jul
(80) |
Aug
(21) |
Sep
(82) |
Oct
(85) |
Nov
(48) |
Dec
(30) |
| 2004 |
Jan
(29) |
Feb
(82) |
Mar
(43) |
Apr
(54) |
May
(60) |
Jun
(41) |
Jul
(23) |
Aug
(35) |
Sep
(55) |
Oct
(53) |
Nov
(18) |
Dec
(22) |
| 2005 |
Jan
(49) |
Feb
(28) |
Mar
(112) |
Apr
(60) |
May
(120) |
Jun
(67) |
Jul
(129) |
Aug
(67) |
Sep
(173) |
Oct
(221) |
Nov
(126) |
Dec
(198) |
| 2006 |
Jan
(172) |
Feb
(141) |
Mar
(54) |
Apr
(15) |
May
(60) |
Jun
(50) |
Jul
(79) |
Aug
(118) |
Sep
(114) |
Oct
(78) |
Nov
(56) |
Dec
(106) |
| 2007 |
Jan
(80) |
Feb
(268) |
Mar
(238) |
Apr
(222) |
May
(198) |
Jun
(178) |
Jul
(114) |
Aug
(234) |
Sep
(202) |
Oct
(141) |
Nov
(182) |
Dec
(446) |
| 2008 |
Jan
(260) |
Feb
(143) |
Mar
(210) |
Apr
(158) |
May
(342) |
Jun
(195) |
Jul
(309) |
Aug
(99) |
Sep
(154) |
Oct
(279) |
Nov
(555) |
Dec
(327) |
| 2009 |
Jan
(182) |
Feb
(289) |
Mar
(30) |
Apr
(51) |
May
(59) |
Jun
(304) |
Jul
(95) |
Aug
(50) |
Sep
(16) |
Oct
(44) |
Nov
(57) |
Dec
(27) |
| 2010 |
Jan
(59) |
Feb
(178) |
Mar
(220) |
Apr
(272) |
May
(297) |
Jun
(75) |
Jul
(104) |
Aug
(157) |
Sep
(247) |
Oct
(105) |
Nov
(100) |
Dec
(75) |
| 2011 |
Jan
(61) |
Feb
(32) |
Mar
(47) |
Apr
(79) |
May
(68) |
Jun
(247) |
Jul
(174) |
Aug
(98) |
Sep
(127) |
Oct
(198) |
Nov
(627) |
Dec
(421) |
| 2012 |
Jan
(521) |
Feb
(372) |
Mar
(489) |
Apr
(256) |
May
(143) |
Jun
(132) |
Jul
(74) |
Aug
(38) |
Sep
(42) |
Oct
(18) |
Nov
(58) |
Dec
(21) |
| 2013 |
Jan
(10) |
Feb
(10) |
Mar
(68) |
Apr
(50) |
May
(33) |
Jun
(17) |
Jul
(100) |
Aug
(111) |
Sep
(107) |
Oct
(21) |
Nov
(63) |
Dec
(53) |
| 2014 |
Jan
(29) |
Feb
(20) |
Mar
(39) |
Apr
(86) |
May
(122) |
Jun
(87) |
Jul
(7) |
Aug
(35) |
Sep
(40) |
Oct
(39) |
Nov
(21) |
Dec
(18) |
| 2015 |
Jan
(6) |
Feb
(56) |
Mar
(67) |
Apr
(24) |
May
(86) |
Jun
(5) |
Jul
(2) |
Aug
(17) |
Sep
(2) |
Oct
(14) |
Nov
(80) |
Dec
(97) |
| 2016 |
Jan
(9) |
Feb
(14) |
Mar
(3) |
Apr
(2) |
May
(45) |
Jun
(9) |
Jul
(5) |
Aug
(21) |
Sep
(1) |
Oct
(1) |
Nov
(2) |
Dec
(2) |
| 2017 |
Jan
(9) |
Feb
|
Mar
(7) |
Apr
|
May
(24) |
Jun
(35) |
Jul
(60) |
Aug
(44) |
Sep
(22) |
Oct
(1) |
Nov
(2) |
Dec
(2) |
| 2018 |
Jan
(21) |
Feb
(6) |
Mar
(1) |
Apr
(1) |
May
(11) |
Jun
(2) |
Jul
(1) |
Aug
(5) |
Sep
(11) |
Oct
(15) |
Nov
(4) |
Dec
(55) |
| 2019 |
Jan
(41) |
Feb
(9) |
Mar
(23) |
Apr
(25) |
May
(55) |
Jun
(82) |
Jul
(19) |
Aug
(81) |
Sep
(15) |
Oct
(11) |
Nov
(12) |
Dec
(37) |
| 2020 |
Jan
(11) |
Feb
(34) |
Mar
(77) |
Apr
(24) |
May
(6) |
Jun
(14) |
Jul
(4) |
Aug
(76) |
Sep
(141) |
Oct
(62) |
Nov
(46) |
Dec
(116) |
| 2021 |
Jan
(188) |
Feb
(134) |
Mar
(38) |
Apr
(55) |
May
(12) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
1
(4) |
2
(1) |
3
(8) |
4
(2) |
5
|
6
(1) |
7
|
|
8
(1) |
9
(6) |
10
|
11
(2) |
12
(2) |
13
(2) |
14
(1) |
|
15
(4) |
16
|
17
|
18
(5) |
19
|
20
(2) |
21
(2) |
|
22
(2) |
23
|
24
|
25
(1) |
26
|
27
(1) |
28
(1) |
|
29
|
30
|
31
(3) |
|
|
|
|
|
From: <cro...@li...> - 2002-12-31 13:36:56
|
Module Name: crossfire Committed By: tchize Date: Tue Dec 31 13:36:51 UTC 2002 Modified Files: crossfire: Makefile.am Makefile.in aclocal.m4 configure configure.ac crossfire/common: Makefile.in crossfire/crossedit: Makefile.in crossfire/crossedit/Cnv: Makefile.in crossfire/crossedit/bitmaps: Makefile.in crossfire/crossedit/doc: Makefile.in crossfire/crossedit/include: Makefile.in crossfire/doc: Makefile.in crossfire/doc/Developers: Makefile.in crossfire/doc/playbook: Makefile.in crossfire/doc/playbook-html: Makefile.in crossfire/doc/scripts: Makefile.in crossfire/doc/spell-docs: Makefile.in crossfire/doc/spoiler: Makefile.in crossfire/doc/spoiler-html: Makefile.in crossfire/include: Makefile.in crossfire/lib: Makefile.in crossfire/plugin: Makefile.in crossfire/random_maps: Makefile.in crossfire/server: Makefile.in crossfire/socket: Makefile.in crossfire/utils: Makefile.in config.guess config.sub ltmain.sh Added Files: crossfire/devel: Makefile Makefile.in Log Message: Added crossfire-config to the build list of the configure.ac and regenerated the Makefiles and configure.in to handle it The following files had too many changes to show the context diffs here: cvs rdiff -r1.26 -r1.27 crossfire/Makefile.in cvs rdiff -r1.4 -r1.5 crossfire/aclocal.m4 cvs rdiff -r1.32 -r1.33 crossfire/configure cvs rdiff -r1.10 -r1.11 crossfire/common/Makefile.in cvs rdiff -r1.11 -r1.12 crossfire/crossedit/Makefile.in cvs rdiff -r1.5 -r1.6 crossfire/crossedit/Cnv/Makefile.in cvs rdiff -r1.3 -r1.4 crossfire/crossedit/bitmaps/Makefile.in cvs rdiff -r1.3 -r1.4 crossfire/crossedit/doc/Makefile.in cvs rdiff -r1.3 -r1.4 crossfire/crossedit/include/Makefile.in cvs rdiff -r0 -r1.1 crossfire/devel/Makefile cvs rdiff -r1.16 -r1.17 crossfire/doc/Makefile.in cvs rdiff -r1.2 -r1.3 crossfire/doc/Developers/Makefile.in cvs rdiff -r1.7 -r1.8 crossfire/doc/playbook/Makefile.in cvs rdiff -r1.7 -r1.8 crossfire/doc/playbook-html/Makefile.in cvs rdiff -r1.3 -r1.4 crossfire/doc/scripts/Makefile.in cvs rdiff -r1.3 -r1.4 crossfire/doc/spell-docs/Makefile.in cvs rdiff -r1.6 -r1.7 crossfire/doc/spoiler/Makefile.in cvs rdiff -r1.9 -r1.10 crossfire/doc/spoiler-html/Makefile.in cvs rdiff -r1.8 -r1.9 crossfire/include/Makefile.in cvs rdiff -r1.40 -r1.41 crossfire/lib/Makefile.in cvs rdiff -r1.3 -r1.4 crossfire/plugin/Makefile.in cvs rdiff -r1.13 -r1.14 crossfire/random_maps/Makefile.in cvs rdiff -r1.15 -r1.16 crossfire/server/Makefile.in cvs rdiff -r1.7 -r1.8 crossfire/socket/Makefile.in cvs rdiff -r1.12 -r1.13 crossfire/utils/Makefile.in cvs rdiff -r1.2 -r1.3 crossfire/utils/config.guess cvs rdiff -r1.1 -r1.2 crossfire/utils/ltmain.sh Start of context diffs Index: crossfire/Makefile.am diff -c crossfire/Makefile.am:1.2 crossfire/Makefile.am:1.3 *** crossfire/Makefile.am:1.2 Sat Sep 14 21:56:36 2002 --- crossfire/Makefile.am Tue Dec 31 05:36:41 2002 *************** *** 1,5 **** ! SUBDIRS = common random_maps socket server include lib utils doc plugin crossedit EXTRA_DIST = AUTHORS ChangeLog COPYING DEVELOPERS autogen.sh run_win32.bat --- 1,5 ---- ! SUBDIRS = common random_maps socket server include lib utils doc plugin crossedit devel EXTRA_DIST = AUTHORS ChangeLog COPYING DEVELOPERS autogen.sh run_win32.bat Index: crossfire/configure.ac diff -c crossfire/configure.ac:1.3 crossfire/configure.ac:1.4 *** crossfire/configure.ac:1.3 Mon Oct 7 23:38:22 2002 --- crossfire/configure.ac Tue Dec 31 05:36:42 2002 *************** *** 1,6 **** dnl Process this file with autoconf to produce a configure script. ! AC_REVISION($Id: configure.ac,v 1.3 2002/10/08 06:38:22 mwedel Exp $) AC_INIT([crossfire], [1.4.0], [cro...@li...]) AC_CONFIG_AUX_DIR(utils) AC_CONFIG_SRCDIR([server/main.c]) --- 1,6 ---- dnl Process this file with autoconf to produce a configure script. ! AC_REVISION($Id: configure.ac,v 1.4 2002/12/31 13:36:42 tchize Exp $) AC_INIT([crossfire], [1.4.0], [cro...@li...]) AC_CONFIG_AUX_DIR(utils) AC_CONFIG_SRCDIR([server/main.c]) *************** *** 213,217 **** include/Makefile utils/Makefile lib/checkarch.pl lib/collect.pl utils/add_throw.perl utils/crossloop.tmpl utils/crossloop.pl.tmpl utils/metaserver.pl utils/crossloop.web ! common/Makefile plugin/Makefile ]) --- 213,217 ---- include/Makefile utils/Makefile lib/checkarch.pl lib/collect.pl utils/add_throw.perl utils/crossloop.tmpl utils/crossloop.pl.tmpl utils/metaserver.pl utils/crossloop.web ! common/Makefile plugin/Makefile devel/Makefile ]) |
|
From: <cro...@li...> - 2002-12-31 13:12:36
|
Module Name: crossfire Committed By: tchize Date: Tue Dec 31 13:12:35 UTC 2002 Added Files: crossfire/devel: Makefile.am devel.c Log Message: Small tool for easier plugin developpement. This tool is written to get informations about compiled server directories. compiled name is crossfire-config. Should make plugin configure script developpement easier. Start of context diffs Index: crossfire/devel/Makefile.am diff -c /dev/null crossfire/devel/Makefile.am:1.1 *** /dev/null Tue Dec 31 05:12:35 2002 --- crossfire/devel/Makefile.am Tue Dec 31 05:12:34 2002 *************** *** 0 **** --- 1,49 ---- + # + # Makefile for crossfire 0.95.0 and beyond + # + # This file will eventually be replaced by a configure script. But for + # now, this simple makefile should do the job. + # + # Copyright (C) 1992 Frank Tore Johansen + # Copyright (C) 2001 Mark Wedel + # + # 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 mw...@sc... + + + + # Makefile.am for crossfire-config (tc...@ma...) + + + bin_PROGRAMS = crossfire-config + + crossfire_config_SOURCES = \ + devel.c + + AM_CPPFLAGS = -I$(top_srcdir)/include -DDATADIR=\"$(pkgdatadir)\" -DCONFDIR=\"$(pkgconfdir)\" \ + -DLIBDIR=\"$(pkglibdir)\" -DLOCALDIR=\"$(pkgstatedir)\" \ + -DPLUGIN_SUFFIX=\".so\" + + #Perhaps should uncomment to be sure crossfire has been compiled but.... Why? + #crossfire_config_LDADD = ../common/libcross.a + #../common/libcross.a: + # ( cd ../common ; make libcross.a ) + + + # Check if everything is installed as it should + #installcheck-local: + # $(bindir)/crossfire -o + |
|
From: <cro...@li...> - 2002-12-31 07:19:10
|
Module Name: crossfire
Committed By: mwedel
Date: Tue Dec 31 07:19:08 UTC 2002
Modified Files:
crossfire: ChangeLog
crossfire/server: time.c
Log Message:
server/time.c: Fix bad code in stop_arrow that caused crashes/improper
freeing of data.
MSW 2002-12-30
Start of context diffs
Index: crossfire/ChangeLog
diff -c crossfire/ChangeLog:1.27 crossfire/ChangeLog:1.28
*** crossfire/ChangeLog:1.27 Fri Dec 27 00:37:40 2002
--- crossfire/ChangeLog Mon Dec 30 23:19:07 2002
***************
*** 17,22 ****
--- 17,26 ----
------------------------------------------------------------------------------
Changes for CVS:
+ server/time.c: Fix bad code in stop_arrow that caused crashes/improper
+ freeing of data.
+ MSW 2002-12-30
+
common/treasure.c: Fix initialization of treasure structs to use calloc.
server/player.c: Fix infinite loop.
socket/loop.c: Make sure we put in null terminator for socket data.
Index: crossfire/server/time.c
diff -c crossfire/server/time.c:1.47 crossfire/server/time.c:1.48
*** crossfire/server/time.c:1.47 Tue Dec 24 22:45:46 2002
--- crossfire/server/time.c Mon Dec 30 23:19:08 2002
***************
*** 1,6 ****
/*
* static char *rcsid_time_c =
! * "$Id: time.c,v 1.47 2002/12/25 06:45:46 garbled Exp $";
*/
/*
--- 1,6 ----
/*
* static char *rcsid_time_c =
! * "$Id: time.c,v 1.48 2002/12/31 07:19:08 mwedel Exp $";
*/
/*
***************
*** 536,544 ****
op->stats.dam= op->stats.hp;
op->attacktype = op->stats.grace;
if (op->slaying != NULL)
! free(op->slaying);
if (op->spellarg != NULL) {
! op->slaying = strdup(op->spellarg);
free(op->spellarg);
} else
op->slaying = NULL;
--- 536,544 ----
op->stats.dam= op->stats.hp;
op->attacktype = op->stats.grace;
if (op->slaying != NULL)
! free_string (op->slaying);
if (op->spellarg != NULL) {
! op->slaying = add_string(op->spellarg);
free(op->spellarg);
} else
op->slaying = NULL;
|
|
From: <cro...@li...> - 2002-12-28 06:35:26
|
Module Name: crossfire
Committed By: garbled
Date: Sat Dec 28 06:35:23 UTC 2002
Modified Files:
crossfire/server: spell_effect.c
Log Message:
Fix some stupidity in summon_pet that made it not work above level 25 or so.
Start of context diffs
Index: crossfire/server/spell_effect.c
diff -c crossfire/server/spell_effect.c:1.87 crossfire/server/spell_effect.c:1.88
*** crossfire/server/spell_effect.c:1.87 Sat Dec 21 00:02:34 2002
--- crossfire/server/spell_effect.c Fri Dec 27 22:35:23 2002
***************
*** 1,6 ****
/*
* static char *rcsid_spell_effect_c =
! * "$Id: spell_effect.c,v 1.87 2002/12/21 08:02:34 mwedel Exp $";
*/
--- 1,6 ----
/*
* static char *rcsid_spell_effect_c =
! * "$Id: spell_effect.c,v 1.88 2002/12/28 06:35:23 garbled Exp $";
*/
***************
*** 1754,1760 ****
int summon_pet(object *op, int dir, SpellTypeFrom item) {
int level, number, i;
treasurelist *trlist = NULL;
! treasure *tr, *prevtr = NULL;
level = ((op->head?op->head->level:SK_level(op)) / 4);
--- 1754,1760 ----
int summon_pet(object *op, int dir, SpellTypeFrom item) {
int level, number, i;
treasurelist *trlist = NULL;
! treasure *tr = NULL;
level = ((op->head?op->head->level:SK_level(op)) / 4);
***************
*** 1773,1792 ****
if (trlist == NULL)
return 0;
! for (i=0, tr=trlist->items; tr != NULL && i < level-1;
! prevtr = tr, tr = tr->next, i++);
! if(prevtr == NULL || prevtr->item == NULL) {
LOG(llevError,"Treasurelist Found NULL in summon_pet_monster()\n");
return 0;
}
! number = prevtr->nrof;
if (!dir)
! dir = find_free_spot(prevtr->item, op->map, op->x, op->y, 1, SIZEOFFREE);
! if ((dir==-1) || arch_blocked(prevtr->item, op->map,
op->x + freearr_x[dir], op->y+freearr_y[dir])) {
new_draw_info(NDI_UNIQUE, 0, op, "There is something in the way.");
return 0;
--- 1773,1792 ----
if (trlist == NULL)
return 0;
! for (i=0, tr=trlist->items; tr != NULL && i < level &&
! tr->next != NULL && tr->next->item != NULL; tr = tr->next, i++);
! if(tr == NULL || tr->item == NULL) {
LOG(llevError,"Treasurelist Found NULL in summon_pet_monster()\n");
return 0;
}
! number = tr->nrof;
if (!dir)
! dir = find_free_spot(tr->item, op->map, op->x, op->y, 1, SIZEOFFREE);
! if ((dir==-1) || arch_blocked(tr->item, op->map,
op->x + freearr_x[dir], op->y+freearr_y[dir])) {
new_draw_info(NDI_UNIQUE, 0, op, "There is something in the way.");
return 0;
***************
*** 1795,1806 ****
archetype *atmp;
object *prev = NULL, *head = NULL; /* We want to summon dragons *grin* */
! for(atmp = prevtr->item; atmp!=NULL; atmp = atmp->more) {
object *tmp;
tmp = arch_to_object(atmp);
/* if this is the head, set owner/friendly as needed */
! if (atmp == prevtr->item) {
set_owner(tmp, op);
SET_FLAG(tmp, FLAG_MONSTER);
if (op->type == PLAYER) {
--- 1795,1806 ----
archetype *atmp;
object *prev = NULL, *head = NULL; /* We want to summon dragons *grin* */
! for(atmp = tr->item; atmp!=NULL; atmp = atmp->more) {
object *tmp;
tmp = arch_to_object(atmp);
/* if this is the head, set owner/friendly as needed */
! if (atmp == tr->item) {
set_owner(tmp, op);
SET_FLAG(tmp, FLAG_MONSTER);
if (op->type == PLAYER) {
***************
*** 1844,1850 ****
SET_FLAG(tmp, FLAG_NO_DROP);
}
dir = absdir(dir + 1);
! if (arch_blocked(prevtr->item, op->map, op->x + freearr_x[dir], op->y + freearr_y[dir])) {
if (i < number) {
new_draw_info(NDI_UNIQUE, 0,op, "There is something in the way,");
new_draw_info(NDI_UNIQUE, 0,op, "no more pets for this casting.");
--- 1844,1850 ----
SET_FLAG(tmp, FLAG_NO_DROP);
}
dir = absdir(dir + 1);
! if (arch_blocked(tr->item, op->map, op->x + freearr_x[dir], op->y + freearr_y[dir])) {
if (i < number) {
new_draw_info(NDI_UNIQUE, 0,op, "There is something in the way,");
new_draw_info(NDI_UNIQUE, 0,op, "no more pets for this casting.");
|
|
From: <cro...@li...> - 2002-12-27 08:37:42
|
Module Name: crossfire
Committed By: mwedel
Date: Fri Dec 27 08:37:41 UTC 2002
Modified Files:
crossfire: ChangeLog
crossfire/common: treasure.c
crossfire/server: player.c
crossfire/socket: loop.c
Log Message:
common/treasure.c: Fix initialization of treasure structs to use calloc.
server/player.c: Fix infinite loop.
socket/loop.c: Make sure we put in null terminator for socket data.
MSW 2002-12-26
Start of context diffs
Index: crossfire/ChangeLog
diff -c crossfire/ChangeLog:1.26 crossfire/ChangeLog:1.27
*** crossfire/ChangeLog:1.26 Tue Dec 24 22:45:46 2002
--- crossfire/ChangeLog Fri Dec 27 00:37:40 2002
***************
*** 17,22 ****
--- 17,28 ----
------------------------------------------------------------------------------
Changes for CVS:
+ common/treasure.c: Fix initialization of treasure structs to use calloc.
+ server/player.c: Fix infinite loop.
+ socket/loop.c: Make sure we put in null terminator for socket data.
+ MSW 2002-12-26
+
+
New Arrow and Pet Code:
Add bowmode and petmode commands. Allowing the player to change the firing
style for bows to one of either threewide, or spreadshot.
Index: crossfire/common/treasure.c
diff -c crossfire/common/treasure.c:1.29 crossfire/common/treasure.c:1.30
*** crossfire/common/treasure.c:1.29 Mon Aug 26 00:14:10 2002
--- crossfire/common/treasure.c Fri Dec 27 00:37:41 2002
***************
*** 1,7 ****
/*
* static char *rcs_treasure_c =
! * "$Id: treasure.c,v 1.29 2002/08/26 07:14:10 mwedel Exp $";
*/
/*
--- 1,7 ----
/*
* static char *rcs_treasure_c =
! * "$Id: treasure.c,v 1.30 2002/12/27 08:37:41 mwedel Exp $";
*/
/*
***************
*** 83,89 ****
*/
static treasure *get_empty_treasure() {
! treasure *t = (treasure *) malloc(sizeof(treasure));
if(t==NULL)
fatal(OUT_OF_MEMORY);
t->item=NULL;
--- 83,89 ----
*/
static treasure *get_empty_treasure() {
! treasure *t = (treasure *) calloc(1,sizeof(treasure));
if(t==NULL)
fatal(OUT_OF_MEMORY);
t->item=NULL;
Index: crossfire/server/player.c
diff -c crossfire/server/player.c:1.112 crossfire/server/player.c:1.113
*** crossfire/server/player.c:1.112 Tue Dec 24 22:45:46 2002
--- crossfire/server/player.c Fri Dec 27 00:37:41 2002
***************
*** 1,6 ****
/*
* static char *rcsid_player_c =
! * "$Id: player.c,v 1.112 2002/12/25 06:45:46 garbled Exp $";
*/
/*
--- 1,6 ----
/*
* static char *rcsid_player_c =
! * "$Id: player.c,v 1.113 2002/12/27 08:37:41 mwedel Exp $";
*/
/*
***************
*** 1767,1773 ****
* on the space
*/
while (tmp!=NULL) {
! if (tmp == op) continue;
if (QUERY_FLAG(tmp,FLAG_ALIVE)) {
mon = tmp;
break;
--- 1767,1776 ----
* on the space
*/
while (tmp!=NULL) {
! if (tmp == op) {
! tmp=tmp->above;
! continue;
! }
if (QUERY_FLAG(tmp,FLAG_ALIVE)) {
mon = tmp;
break;
Index: crossfire/socket/loop.c
diff -c crossfire/socket/loop.c:1.20 crossfire/socket/loop.c:1.21
*** crossfire/socket/loop.c:1.20 Sun Oct 27 20:36:17 2002
--- crossfire/socket/loop.c Fri Dec 27 00:37:41 2002
***************
*** 1,7 ****
/*
* static char *rcsid_loop_c =
! * "$Id: loop.c,v 1.20 2002/10/28 04:36:17 garbled Exp $";
*/
/*
--- 1,7 ----
/*
* static char *rcsid_loop_c =
! * "$Id: loop.c,v 1.21 2002/12/27 08:37:41 mwedel Exp $";
*/
/*
***************
*** 187,192 ****
--- 187,194 ----
return;
}
} while (ns->inbuf.buf[ns->inbuf.len++]!='\n');
+
+ ns->inbuf.buf[ns->inbuf.len]=0;
cp = strchr(ns->inbuf.buf, ' ');
if (cp) {
|
|
From: <cro...@li...> - 2002-12-25 06:45:49
|
Module Name: crossfire
Committed By: garbled
Date: Wed Dec 25 06:45:47 UTC 2002
Modified Files:
crossfire: ChangeLog
crossfire/common: object.c
crossfire/include: global.h player.h sproto.h
crossfire/server: attack.c c_misc.c commands.c login.c pets.c player.c
spell_util.c time.c
Log Message:
New Arrow and Pet Code:
Add bowmode and petmode commands. Allowing the player to change the firing
style for bows to one of either threewide, or spreadshot.
Allow players to change the operating modes of his pet with petmode. Can
be either seek and destroy, defend, or normal historical behavior.
Change bows to impart speed to arrows based on damage and other magical
plusses. Damage decays over distance, to stop arrows from flying forever.
Very fast moving arrows will pierce multiple targets. An arrow moving at a
speed greater than 10.0 will go straight through a target, losing 1.0 of
speed in the process.
Change magic missile to use spell_find_dir instead of find_dir to stop it
from flying in a circle and hitting the caster, and to make it stop
flying into walls to hit creatures behind the walls.
The following files had too many changes to show the context diffs here:
cvs rdiff -r1.14 -r1.15 crossfire/server/pets.c
cvs rdiff -r1.111 -r1.112 crossfire/server/player.c
Start of context diffs
Index: crossfire/ChangeLog
diff -c crossfire/ChangeLog:1.25 crossfire/ChangeLog:1.26
*** crossfire/ChangeLog:1.25 Sat Dec 21 00:02:32 2002
--- crossfire/ChangeLog Tue Dec 24 22:45:46 2002
***************
*** 17,22 ****
--- 17,36 ----
------------------------------------------------------------------------------
Changes for CVS:
+ New Arrow and Pet Code:
+ Add bowmode and petmode commands. Allowing the player to change the firing
+ style for bows to one of either threewide, or spreadshot.
+ Allow players to change the operating modes of his pet with petmode. Can be
+ either seek and destroy, defend, or normal historical behavior.
+ Change bows to impart speed to arrows based on damage and other magical
+ plusses. Damage decays over distance, to stop arrows from flying forever.
+ Very fast moving arrows will pierce multiple targets. An arrow moving at a
+ speed greater than 10.0 will go straight through a target, losing 1.0 of
+ speed in the process.
+ Change magic missile to use spell_find_dir instead of find_dir to stop it
+ from flying in a circle and hitting the caster, and to make it stop
+ flying into walls to hit creatures behind the walls.
+
Various bug fixes:
common/living.c: Reset glow_radius for players, so they stop glowing
after they snuff out their torch or whatever.
Index: crossfire/common/object.c
diff -c crossfire/common/object.c:1.60 crossfire/common/object.c:1.61
*** crossfire/common/object.c:1.60 Sat Nov 30 19:46:25 2002
--- crossfire/common/object.c Tue Dec 24 22:45:46 2002
***************
*** 1,6 ****
/*
* static char *rcsid_object_c =
! * "$Id: object.c,v 1.60 2002/12/01 03:46:25 mwedel Exp $";
*/
/*
--- 1,6 ----
/*
* static char *rcsid_object_c =
! * "$Id: object.c,v 1.61 2002/12/25 06:45:46 garbled Exp $";
*/
/*
***************
*** 67,73 ****
int freedir[SIZEOFFREE]= {
0,1,2,3,4,5,6,7,8,1,2,2,2,3,4,4,4,5,6,6,6,7,8,8,8,
1,2,2,2,2,2,3,4,4,4,4,4,5,6,6,6,6,6,7,8,8,8,8,8};
!
/* Moved this out of define.h and in here, since this is the only file
* it is used in. Also, make it an inline function for cleaner
--- 67,76 ----
int freedir[SIZEOFFREE]= {
0,1,2,3,4,5,6,7,8,1,2,2,2,3,4,4,4,5,6,6,6,7,8,8,8,
1,2,2,2,2,2,3,4,4,4,4,4,5,6,6,6,6,6,7,8,8,8,8,8};
! int rightof_x[9]= {0, 1, -1, 0, -1, -1, 1, 0, 1};
! int rightof_y[9]= {0, 0, -1, -1, 1, 0, 1, 1, -1};
! int leftof_x[9] = {0, -1, 1, 0, 1, 1, -1, 0, -1};
! int leftof_y[9] = {0, 0, 1, 1, -1, 0, -1, -1, 1};
/* Moved this out of define.h and in here, since this is the only file
* it is used in. Also, make it an inline function for cleaner
Index: crossfire/include/global.h
diff -c crossfire/include/global.h:1.39 crossfire/include/global.h:1.40
*** crossfire/include/global.h:1.39 Tue Nov 12 21:49:04 2002
--- crossfire/include/global.h Tue Dec 24 22:45:46 2002
***************
*** 1,6 ****
/*
* static char *rcsid_global_h =
! * "$Id: global.h,v 1.39 2002/11/13 05:49:04 garbled Exp $";
*/
/*
--- 1,6 ----
/*
* static char *rcsid_global_h =
! * "$Id: global.h,v 1.40 2002/12/25 06:45:46 garbled Exp $";
*/
/*
***************
*** 206,211 ****
--- 206,213 ----
extern int freearr_x[SIZEOFFREE], freearr_y[SIZEOFFREE];
extern int maxfree[SIZEOFFREE], freedir[SIZEOFFREE];
+ extern int rightof_x[9], rightof_y[9];
+ extern int leftof_x[9], leftof_y[9];
extern New_Face *blank_face, *empty_face;
extern New_Face *dark_faces[];
Index: crossfire/include/player.h
diff -c crossfire/include/player.h:1.28 crossfire/include/player.h:1.29
*** crossfire/include/player.h:1.28 Fri Nov 29 20:17:41 2002
--- crossfire/include/player.h Tue Dec 24 22:45:46 2002
***************
*** 1,6 ****
/*
* static char *rcsid_player_h =
! * "$Id: player.h,v 1.28 2002/11/30 04:17:41 mwedel Exp $";
*/
/*
--- 1,6 ----
/*
* static char *rcsid_player_h =
! * "$Id: player.h,v 1.29 2002/12/25 06:45:46 garbled Exp $";
*/
/*
***************
*** 48,53 ****
--- 48,72 ----
range_size = 6
} rangetype;
+ typedef enum _bowtype {
+ bow_normal = 0,
+ bow_threewide = 1,
+ bow_spreadshot = 2,
+ bow_n = 3, /* must stay at 3 */
+ bow_ne = 4,
+ bow_e = 5,
+ bow_se = 6,
+ bow_s = 7,
+ bow_sw = 8,
+ bow_w = 9,
+ bow_nw = 10 /* must stay at 10 */
+ } bowtype_t;
+
+ typedef enum _petmode {
+ pet_normal = 0,
+ pet_sad = 1,
+ pet_defend = 2
+ } petmode_t;
typedef enum usekeytype {
key_inventory=0,
***************
*** 78,83 ****
--- 97,104 ----
sint16 known_spells[NROFREALSPELLS]; /* Spells known by the player */
uint16 nrofknownspells; /* Index in the above array */
rangetype shoottype; /* Which range-attack is being used by player */
+ bowtype_t bowtype; /* which firemode? */
+ petmode_t petmode; /* which petmode? */
object *ranges[range_size];/* object for each range. Set up in fix player. Note */
/* That not all are used, it is just nice to map this 1:1 */
/* With the range names */
Index: crossfire/include/sproto.h
diff -c crossfire/include/sproto.h:1.76 crossfire/include/sproto.h:1.77
*** crossfire/include/sproto.h:1.76 Wed Dec 18 08:39:56 2002
--- crossfire/include/sproto.h Tue Dec 24 22:45:46 2002
***************
*** 162,167 ****
--- 162,169 ----
int command_players(object *op, char *paramss);
int command_logs(object *op, char *params);
int command_applymode(object *op, char *params);
+ int command_bowmode(object *op, char *params);
+ int command_petmode(object *op, char *params);
int command_usekeys(object *op, char *params);
int command_resistances(object *op, char *params);
int command_help(object *op, char *params);
Index: crossfire/server/attack.c
diff -c crossfire/server/attack.c:1.78 crossfire/server/attack.c:1.79
*** crossfire/server/attack.c:1.78 Tue Nov 26 00:48:20 2002
--- crossfire/server/attack.c Tue Dec 24 22:45:46 2002
***************
*** 1,6 ****
/*
* static char *rcsid_attack_c =
! * "$Id: attack.c,v 1.78 2002/11/26 08:48:20 garbled Exp $";
*/
/*
CrossFire, A Multiplayer game for X-windows
--- 1,6 ----
/*
* static char *rcsid_attack_c =
! * "$Id: attack.c,v 1.79 2002/12/25 06:45:46 garbled Exp $";
*/
/*
CrossFire, A Multiplayer game for X-windows
***************
*** 865,871 ****
}
/* Missile hit victim */
! if (hit_something)
{
/* Stop arrow */
if (container == NULL) {
--- 865,873 ----
}
/* Missile hit victim */
! /* if the speed is > 10, then this is a fast moving arrow, we go straight
! through the target */
! if (hit_something && op->speed <= 10.0)
{
/* Stop arrow */
if (container == NULL) {
***************
*** 896,901 ****
--- 898,906 ----
}
return NULL;
}
+
+ if (hit_something && op->speed >= 10.0)
+ op->speed -= 1.0;
/* Missile missed victim - reassemble missile */
if (container) {
Index: crossfire/server/c_misc.c
diff -c crossfire/server/c_misc.c:1.26 crossfire/server/c_misc.c:1.27
*** crossfire/server/c_misc.c:1.26 Wed Dec 11 11:54:52 2002
--- crossfire/server/c_misc.c Tue Dec 24 22:45:46 2002
***************
*** 1,6 ****
/*
* static char *rcsid_c_misc_c =
! * "$Id: c_misc.c,v 1.26 2002/12/11 19:54:52 garbled Exp $";
*/
/*
--- 1,6 ----
/*
* static char *rcsid_c_misc_c =
! * "$Id: c_misc.c,v 1.27 2002/12/25 06:45:46 garbled Exp $";
*/
/*
***************
*** 333,338 ****
--- 333,356 ----
if (worldmap_to_weathermap(op->x, op->y, &wx, &wy, op->map->path) != 0)
return 1;
+ if (QUERY_FLAG(op, FLAG_WIZ)) {
+ /* dump the weather, Dm style! Yo! */
+ new_draw_info_format(NDI_UNIQUE, 0, op, "Real temp: %d",
+ real_world_temperature(op->x, op->y, op->map));
+ new_draw_info_format(NDI_UNIQUE, 0, op, "Base temp: %d",
+ weathermap[wx][wy].temp);
+ new_draw_info_format(NDI_UNIQUE, 0, op, "Humid: %d",
+ weathermap[wx][wy].humid);
+ new_draw_info_format(NDI_UNIQUE, 0, op, "Wind: dir=%d speed=%d",
+ weathermap[wx][wy].winddir, weathermap[wx][wy].windspeed);
+ new_draw_info_format(NDI_UNIQUE, 0, op, "Pressure: %d",
+ weathermap[wx][wy].pressure);
+ new_draw_info_format(NDI_UNIQUE, 0, op, "Avg Elevation: %d",
+ weathermap[wx][wy].avgelev);
+ new_draw_info_format(NDI_UNIQUE, 0, op, "Rainfall: %d Water: %d",
+ weathermap[wx][wy].rainfall, weathermap[wx][wy].water);
+ }
+
temp = real_world_temperature(op->x, op->y, op->map);
new_draw_info_format(NDI_UNIQUE, 0, op, "It's currently %d degrees "
"Centigrade out.", temp);
***************
*** 717,722 ****
--- 735,811 ----
new_draw_info_format(NDI_UNIQUE, 0, op, "Applymode %s set to %s",
(unapply==op->contr->usekeys?"":"now"),
types[op->contr->unapply]);
+ return 1;
+ }
+
+ int command_bowmode(object *op, char *params)
+ {
+ bowtype_t oldtype=op->contr->petmode;
+ static char *types[] =
+ {"normal", "threewide", "spreadshot", "firenorth",
+ "firene", "fireeast", "firese", "firesouth",
+ "firesw", "firewest", "firenw"};
+ char buf[MAX_BUF];
+ int i, found;
+
+ if (!params) {
+ new_draw_info_format(NDI_UNIQUE, 0, op, "bowmode is set to %s",
+ types[op->contr->bowtype]);
+ return 1;
+ }
+
+ for (i=0,found=0; i<=bow_nw; i++) {
+ if (!strcmp(params, types[i])) {
+ found++;
+ op->contr->bowtype=i;
+ break;
+ }
+ }
+ if (!found) {
+ sprintf(buf, "bowmode: Unknown options %s, valid options are:", params);
+ for (i=0; i<=bow_nw; i++) {
+ strcat(buf, " ");
+ strcat(buf, types[i]);
+ if (i < bow_nw)
+ strcat(buf, ",");
+ else
+ strcat(buf, ".");
+ }
+ new_draw_info_format(NDI_UNIQUE, 0, op, buf);
+ return 0;
+ }
+ new_draw_info_format(NDI_UNIQUE, 0, op, "bowmode %s set to %s",
+ (oldtype==op->contr->bowtype?"":"now"),
+ types[op->contr->bowtype]);
+ return 1;
+ }
+
+ int command_petmode(object *op, char *params)
+ {
+ petmode_t oldtype=op->contr->petmode;
+ static char *types[]={"normal", "sad", "defend"};
+
+ if (!params) {
+ new_draw_info_format(NDI_UNIQUE, 0, op, "petmode is set to %s",
+ types[op->contr->petmode]);
+ return 1;
+ }
+
+ if (!strcmp(params,"normal"))
+ op->contr->petmode=pet_normal;
+ else if (!strcmp(params,"sad"))
+ op->contr->petmode=pet_sad;
+ else if (!strcmp(params,"defend"))
+ op->contr->petmode=pet_defend;
+ else {
+ new_draw_info_format(NDI_UNIQUE, 0, op,
+ "petmode: Unknown options %s, valid options are normal,"
+ "sad (seek and destroy), defend", params);
+ return 0;
+ }
+ new_draw_info_format(NDI_UNIQUE, 0, op, "petmode %s set to %s",
+ (oldtype==op->contr->petmode?"":"now"),
+ types[op->contr->petmode]);
return 1;
}
Index: crossfire/server/commands.c
diff -c crossfire/server/commands.c:1.30 crossfire/server/commands.c:1.31
*** crossfire/server/commands.c:1.30 Wed Dec 18 08:39:58 2002
--- crossfire/server/commands.c Tue Dec 24 22:45:46 2002
***************
*** 1,6 ****
/*
* static char *rcsid_commands_c =
! * "$Id: commands.c,v 1.30 2002/12/18 16:39:58 garbled Exp $";
*/
/*
--- 1,6 ----
/*
* static char *rcsid_commands_c =
! * "$Id: commands.c,v 1.31 2002/12/25 06:45:46 garbled Exp $";
*/
/*
***************
*** 108,113 ****
--- 108,115 ----
{"weather", command_weather, 0.0},
{"title", command_title, 0.0},
{"usekeys", command_usekeys, 0.0},
+ {"bowmode", command_bowmode, 0.0},
+ {"petmode", command_petmode, 0.0},
{"version", command_version, 0.0},
{"wimpy", command_wimpy, 0.0},
{"who", command_who, 0.0},
Index: crossfire/server/login.c
diff -c crossfire/server/login.c:1.38 crossfire/server/login.c:1.39
*** crossfire/server/login.c:1.38 Tue Nov 26 00:48:20 2002
--- crossfire/server/login.c Tue Dec 24 22:45:46 2002
***************
*** 1,6 ****
/*
* static char *rcsid_login_c =
! * "$Id: login.c,v 1.38 2002/11/26 08:48:20 garbled Exp $";
*/
/*
--- 1,6 ----
/*
* static char *rcsid_login_c =
! * "$Id: login.c,v 1.39 2002/12/25 06:45:46 garbled Exp $";
*/
/*
***************
*** 278,283 ****
--- 278,285 ----
fprintf(fp,"listening %d\n",pl->listening);
fprintf(fp,"spell %d\n",pl->chosen_spell);
fprintf(fp,"shoottype %d\n",pl->shoottype);
+ fprintf(fp,"bowtype %d\n",pl->bowtype);
+ fprintf(fp,"petmode %d\n",pl->petmode);
fprintf(fp,"peaceful %d\n",pl->peaceful);
fprintf(fp,"digestion %d\n",pl->digestion);
fprintf(fp,"pickup %d\n", pl->mode);
***************
*** 514,519 ****
--- 516,525 ----
pl->gen_hp=value;
else if (!strcmp(buf,"shoottype"))
pl->shoottype=(rangetype)value;
+ else if (!strcmp(buf,"bowtype"))
+ pl->bowtype=(bowtype_t)value;
+ else if (!strcmp(buf,"petmode"))
+ pl->petmode=(petmode_t)value;
else if (!strcmp(buf,"gen_sp"))
pl->gen_sp=value;
else if (!strcmp(buf,"gen_grace"))
Index: crossfire/server/spell_util.c
diff -c crossfire/server/spell_util.c:1.70 crossfire/server/spell_util.c:1.71
*** crossfire/server/spell_util.c:1.70 Tue Nov 12 21:24:54 2002
--- crossfire/server/spell_util.c Tue Dec 24 22:45:46 2002
***************
*** 1,6 ****
/*
* static char *rcsid_spell_util_c =
! * "$Id: spell_util.c,v 1.70 2002/11/13 05:24:54 garbled Exp $";
*/
--- 1,6 ----
/*
* static char *rcsid_spell_util_c =
! * "$Id: spell_util.c,v 1.71 2002/12/25 06:45:46 garbled Exp $";
*/
***************
*** 1520,1526 ****
void move_missile(object *op) {
int i;
! object *owner;
sint16 new_x, new_y;
owner = get_owner(op);
--- 1520,1526 ----
void move_missile(object *op) {
int i;
! object *owner, *tmp;
sint16 new_x, new_y;
owner = get_owner(op);
***************
*** 1552,1559 ****
}
op->x = new_x;
op->y = new_y;
! i=find_dir(op->map,op->x,op->y,get_owner(op));
! if(i&&i!=op->direction){
op->direction=absdir(op->direction+((op->direction-i+8)%8<4?-1:1));
SET_ANIMATION(op, op->direction);
}
--- 1552,1559 ----
}
op->x = new_x;
op->y = new_y;
! i=spell_find_dir(op->map, op->x, op->y, get_owner(op));
! if(i > 0 && i != op->direction){
op->direction=absdir(op->direction+((op->direction-i+8)%8<4?-1:1));
SET_ANIMATION(op, op->direction);
}
Index: crossfire/server/time.c
diff -c crossfire/server/time.c:1.46 crossfire/server/time.c:1.47
*** crossfire/server/time.c:1.46 Thu Dec 12 21:09:49 2002
--- crossfire/server/time.c Tue Dec 24 22:45:46 2002
***************
*** 1,6 ****
/*
* static char *rcsid_time_c =
! * "$Id: time.c,v 1.46 2002/12/13 05:09:49 garbled Exp $";
*/
/*
--- 1,6 ----
/*
* static char *rcsid_time_c =
! * "$Id: time.c,v 1.47 2002/12/25 06:45:46 garbled Exp $";
*/
/*
***************
*** 625,630 ****
--- 625,637 ----
}
}
+ /* if the arrow is moving too slow.. stop it. 0.5 was chosen as lower
+ values look rediculous. */
+ if (op->speed < 0.5 && op->type==ARROW) {
+ stop_arrow(op);
+ return;
+ }
+
/* Calculate target map square */
new_x = op->x + DIRX(op);
new_y = op->y + DIRY(op);
***************
*** 733,738 ****
--- 740,749 ----
remove_ob (op);
op->x = new_x;
op->y = new_y;
+
+ /* decrease the speed as it flies. 0.05 means a standard bow will shoot
+ about 17 squares. Tune as needed. */
+ op->speed -= 0.05;
insert_ob_in_map (op, op->map, op,0);
}
|
|
From: <cro...@li...> - 2002-12-22 20:43:38
|
Module Name: crossfire
Committed By: temitchell
Date: Sun Dec 22 20:43:37 UTC 2002
Modified Files:
crossfire/server: weather.c
Log Message:
- modified weather table to use snow mountain transparancies
Start of context diffs
Index: crossfire/server/weather.c
diff -c crossfire/server/weather.c:1.21 crossfire/server/weather.c:1.22
*** crossfire/server/weather.c:1.21 Sat Dec 21 00:02:35 2002
--- crossfire/server/weather.c Sun Dec 22 12:43:37 2002
***************
*** 1,6 ****
/*
* static char *rcsid_weather_c =
! * "$Id: weather.c,v 1.21 2002/12/21 08:02:35 mwedel Exp $";
*/
/*
CrossFire, A Multiplayer game for X-windows
--- 1,6 ----
/*
* static char *rcsid_weather_c =
! * "$Id: weather.c,v 1.22 2002/12/22 20:43:37 temitchell Exp $";
*/
/*
CrossFire, A Multiplayer game for X-windows
***************
*** 131,144 ****
{"impossible_match2", "snow4", NULL, 0}, /* placeholders */
{"impossible_match3", "snow3", NULL, 0},
{"hills", "drifts", NULL, 0},
! {"grass", "snow3", NULL, 0},
! {"sand", "snow2", NULL, 0},
{"stones", "snow2", NULL, 0},
{"steppe", "snow2", NULL, 0},
! {"brush", "snow", NULL, 0},
! {"farmland", "snow", NULL, 0},
{"wasteland", "glacier", NULL, 0},
! {"mountain", "glacier", NULL, 1},
{"evergreens", "snow", "evergreens2", 1},
{"evergreen","snow", "tree5", 1},
{"tree", "snow", "tree3", 0},
--- 131,146 ----
{"impossible_match2", "snow4", NULL, 0}, /* placeholders */
{"impossible_match3", "snow3", NULL, 0},
{"hills", "drifts", NULL, 0},
! {"grass", "snow", NULL, 0},
! {"sand", "snow", NULL, 0},
{"stones", "snow2", NULL, 0},
{"steppe", "snow2", NULL, 0},
! {"brush", "snow2", NULL, 0},
! {"farmland", "snow3", NULL, 0},
{"wasteland", "glacier", NULL, 0},
! {"mountain", "mountain1_snow", NULL, 1},
! {"mountain2", "mountain2_snow", NULL, 1},
! {"mountain4", "mountain2_snow", NULL, 1},
{"evergreens", "snow", "evergreens2", 1},
{"evergreen","snow", "tree5", 1},
{"tree", "snow", "tree3", 0},
|
|
From: <cro...@li...> - 2002-12-22 20:32:57
|
Module Name: arch Committed By: temitchell Date: Sun Dec 22 20:32:56 UTC 2002 Modified Files: arch/ground/Weather: mountain1_rivlets.base.111.png mountain2_rivlets.base.111.png Added Files: arch/ground/Weather: mountain1_rivlets.clsc.111.png mountain1_snow.arc mountain1_snow.base.111.png mountain1_snow.clsc.111.png mountain2_rivlets.clsc.111.png mountain2_snow.arc mountain2_snow.base.111.png mountain2_snow.clsc.111.png mountain_foilage.arc mountain_foilage.base.111.png Log Message: - transparancies for mountain snow, standardized the rivlets colour table - added foilage along the same lines (?) - made clsc versions of these too Start of context diffs Index: arch/ground/Weather/mountain1_rivlets.base.111.png Index: arch/ground/Weather/mountain1_rivlets.clsc.111.png |
|
From: <cro...@li...> - 2002-12-21 20:33:37
|
Module Name: arch Committed By: temitchell Date: Sat Dec 21 20:33:36 UTC 2002 Modified Files: arch/ground/Winter: cforest3.base.111.png glacier.base.111.png Added Files: arch/ground/Winter: cforest1.clsc.111.png cforest2.clsc.111.png cforest3.clsc.111.png cforest4.arc cforest4.base.111.png cforest4.clsc.111.png cforest5.arc cforest5.base.111.png cforest5.clsc.111.png cforest6.arc cforest6.base.111.png cforest6.clsc.111.png glacier.base.111.png.bak glacier.clsc.111.png Log Message: - fixing up the snow forests adding in classic versions, adding in non floor versions - would like to add some snow on the trees for the base set, but that will have to wait. add in classic glacier image Start of context diffs Index: arch/ground/Winter/cforest1.clsc.111.png Index: arch/ground/Winter/cforest3.base.111.png Index: arch/ground/Winter/glacier.base.111.png |
|
From: <cro...@li...> - 2002-12-21 08:02:36
|
Module Name: crossfire
Committed By: mwedel
Date: Sat Dec 21 08:02:35 UTC 2002
Modified Files:
crossfire: ChangeLog
crossfire/common: living.c
crossfire/server: apply.c monster.c spell_effect.c weather.c
Log Message:
Various bug fixes:
common/living.c: Reset glow_radius for players, so they stop glowing
after they snuff out their torch or whatever.
server/apply.c: Fix message about improving armour so that it is now
accurate.
server/monster.c: Add some debug lines that may show cause of excess
monster hp.
server/spell_effect.c: fix compile warning in summon_pet(). Clean up
indentation of alchemy functions, but functional changes is to
insert gold nuggets below player (so more of the actions work),
as well as to reset the view position, so that it won't have the
'previous 50' object selection. Add suggested parens in
cast_detection.
server/weather.c: Fix crash in weather code if snow was only object
on space.
MSW 2002-12-20
The following files had too many changes to show the context diffs here:
cvs rdiff -r1.86 -r1.87 crossfire/server/spell_effect.c
Start of context diffs
Index: crossfire/ChangeLog
diff -c crossfire/ChangeLog:1.24 crossfire/ChangeLog:1.25
*** crossfire/ChangeLog:1.24 Sun Dec 8 20:59:38 2002
--- crossfire/ChangeLog Sat Dec 21 00:02:32 2002
***************
*** 17,22 ****
--- 17,40 ----
------------------------------------------------------------------------------
Changes for CVS:
+ Various bug fixes:
+ common/living.c: Reset glow_radius for players, so they stop glowing
+ after they snuff out their torch or whatever.
+ server/apply.c: Fix message about improving armour so that it is now
+ accurate.
+ server/monster.c: Add some debug lines that may show cause of excess
+ monster hp.
+ server/spell_effect.c: fix compile warning in summon_pet(). Clean up
+ indentation of alchemy functions, but functional changes is to
+ insert gold nuggets below player (so more of the actions work),
+ as well as to reset the view position, so that it won't have the
+ 'previous 50' object selection. Add suggested parens in
+ cast_detection.
+ server/weather.c: Fix crash in weather code if snow was only object
+ on space.
+ MSW 2002-12-20
+
+ +++
server/weather.c:
More weather routines:
***************
*** 38,43 ****
--- 56,62 ----
Some of the conditions for the various tiles really need to be looked at,
and fiddled with.
garbled 2002-12-08
+ +++
common/exp.c: Fix bug were drain attacks added exp.
MSW 2002-12-05
Index: crossfire/common/living.c
diff -c crossfire/common/living.c:1.45 crossfire/common/living.c:1.46
*** crossfire/common/living.c:1.45 Thu Dec 5 21:36:28 2002
--- crossfire/common/living.c Sat Dec 21 00:02:33 2002
***************
*** 1,6 ****
/*
* static char *rcsid_living_c =
! * "$Id: living.c,v 1.45 2002/12/06 05:36:28 mwedel Exp $";
*/
/*
--- 1,6 ----
/*
* static char *rcsid_living_c =
! * "$Id: living.c,v 1.46 2002/12/21 08:02:33 mwedel Exp $";
*/
/*
***************
*** 796,801 ****
--- 796,802 ----
op->path_attuned=op->arch->clone.path_attuned;
op->path_repelled=op->arch->clone.path_repelled;
op->path_denied=op->arch->clone.path_denied;
+ op->glow_radius=op->arch->clone.glow_radius;
/* initializing resistances from the values in player/monster's
* archetype clone
Index: crossfire/server/apply.c
diff -c crossfire/server/apply.c:1.72 crossfire/server/apply.c:1.73
*** crossfire/server/apply.c:1.72 Thu Dec 12 15:48:10 2002
--- crossfire/server/apply.c Sat Dec 21 00:02:33 2002
***************
*** 1,6 ****
/*
* static char *rcsid_apply_c =
! * "$Id: apply.c,v 1.72 2002/12/12 23:48:10 garbled Exp $";
*/
/*
CrossFire, A Multiplayer game for X-windows
--- 1,6 ----
/*
* static char *rcsid_apply_c =
! * "$Id: apply.c,v 1.73 2002/12/21 08:02:33 mwedel Exp $";
*/
/*
CrossFire, A Multiplayer game for X-windows
***************
*** 610,616 ****
{
int i;
! i = armour->magic * op->level;
if (i > new_armour) new_armour=i;
new_draw_info_format(NDI_UNIQUE, 0,op,"You need to be level %d", new_armour);
--- 610,616 ----
{
int i;
! i = armour->magic * 10;
if (i > new_armour) new_armour=i;
new_draw_info_format(NDI_UNIQUE, 0,op,"You need to be level %d", new_armour);
Index: crossfire/server/monster.c
diff -c crossfire/server/monster.c:1.55 crossfire/server/monster.c:1.56
*** crossfire/server/monster.c:1.55 Mon Dec 2 23:40:18 2002
--- crossfire/server/monster.c Sat Dec 21 00:02:34 2002
***************
*** 1,6 ****
/*
* static char *rcsid_monster_c =
! * "$Id: monster.c,v 1.55 2002/12/03 07:40:18 mwedel Exp $";
*/
/*
--- 1,6 ----
/*
* static char *rcsid_monster_c =
! * "$Id: monster.c,v 1.56 2002/12/21 08:02:34 mwedel Exp $";
*/
/*
***************
*** 348,353 ****
--- 348,359 ----
op->last_heal+= (int)((float)(8*op->stats.Con)/FABS(op->speed));
op->stats.hp+=op->last_heal/32; /* causes Con/4 hp/tick */
+
+ /* Try to track down bug of really high hp in mosnters */
+ if (op->stats.hp > op->stats.maxhp)
+ LOG(llevDebug,"Creatures hp exceeds in maxhp (%d > %d), last_heal=%d\n",
+ op->stats.hp, op->stats.maxhp, op->last_heal);
+
op->last_heal%=32;
/* So if the monster has gained enough HP that they are no longer afraid */
Index: crossfire/server/weather.c
diff -c crossfire/server/weather.c:1.20 crossfire/server/weather.c:1.21
*** crossfire/server/weather.c:1.20 Wed Dec 11 11:54:52 2002
--- crossfire/server/weather.c Sat Dec 21 00:02:35 2002
***************
*** 1,6 ****
/*
* static char *rcsid_weather_c =
! * "$Id: weather.c,v 1.20 2002/12/11 19:54:52 garbled Exp $";
*/
/*
CrossFire, A Multiplayer game for X-windows
--- 1,6 ----
/*
* static char *rcsid_weather_c =
! * "$Id: weather.c,v 1.21 2002/12/21 08:02:35 mwedel Exp $";
*/
/*
CrossFire, A Multiplayer game for X-windows
***************
*** 1622,1630 ****
if (!strcmp(oldsnow->arch->name, at->name))
at = NULL;
else {
- remove_ob(oldsnow);
- free_object(oldsnow);
tmp=GET_MAP_OB(m, x, y);
/* clean up the trees we put over the snow */
found = 0;
doublestack2 = NULL;
--- 1622,1629 ----
if (!strcmp(oldsnow->arch->name, at->name))
at = NULL;
else {
tmp=GET_MAP_OB(m, x, y);
+ remove_ob(oldsnow);
/* clean up the trees we put over the snow */
found = 0;
doublestack2 = NULL;
***************
*** 1645,1650 ****
--- 1644,1650 ----
break;
}
}
+ free_object(oldsnow);
if (tmp != NULL && doublestack2 != NULL)
if (strcmp(tmp->arch->name, doublestack2) == 0) {
remove_ob(tmp);
|
|
From: <cro...@li...> - 2002-12-20 05:44:15
|
Module Name: arch Committed By: temitchell Date: Fri Dec 20 05:44:15 UTC 2002 Modified Files: arch/monster/misc: deathtree.clsc.111.png deathtree.clsc.112.png deathtree.clsc.113.png deathtree.clsc.114.png deathtree.clsc.115.png Log Message: - new classic (oxymoron) image for the deathtrees Start of context diffs Index: arch/monster/misc/deathtree.clsc.111.png |
|
From: <cro...@li...> - 2002-12-20 05:42:37
|
Module Name: arch Committed By: temitchell Date: Fri Dec 20 05:42:36 UTC 2002 Modified Files: arch/ground/Winter: glacier.base.111.png Added Files: arch/ground/Mountain: mountain5.clsc.111.png s_mountain.clsc.111.png arch/ground/Wood: evergreens.clsc.111.png evergreens_2.clsc.111.png jungle_1.clsc.111.png jungle_2.clsc.111.png tree_1.clsc.111.png tree_3.clsc.111.png tree_4.clsc.111.png tree_5.clsc.111.png tree_6.clsc.111.png woods_1.clsc.111.png woods_3.clsc.111.png woods_4.clsc.111.png woods_5.clsc.111.png arch/ground/new: palm.clsc.111.png Log Message: added a bunch of new classic pics to enhance the set and to make the weather a bit less troubling players using that image set Start of context diffs Index: arch/ground/Mountain/mountain5.clsc.111.png Index: arch/ground/Winter/glacier.base.111.png Index: arch/ground/Wood/evergreens.clsc.111.png Index: arch/ground/new/palm.clsc.111.png |
|
From: <cro...@li...> - 2002-12-18 22:48:14
|
Module Name: CFJavaEditor
Committed By: avogl
Date: Wed Dec 18 22:48:14 UTC 2002
Added Files:
CFJavaEditor/src/cfeditor: MultiArchData.java MultiPositionData.java
Log Message:
Forgot to add these new classes with last commit
--AV
Start of context diffs
Index: CFJavaEditor/src/cfeditor/MultiArchData.java
diff -c /dev/null CFJavaEditor/src/cfeditor/MultiArchData.java:1.1
*** /dev/null Wed Dec 18 14:48:14 2002
--- CFJavaEditor/src/cfeditor/MultiArchData.java Wed Dec 18 14:48:14 2002
***************
*** 0 ****
--- 1,125 ----
+ /*
+ * Crossfire Java Editor.
+ * Copyright (C) 2000 Michael Toennies
+ *
+ * (code based on: Gridder. 2D grid based level editor. (C) 2000 Pasi Keränen)
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ */
+ package cfeditor;
+
+ /**
+ * Subclass of ArchObject to store multipart information.
+ * This data is only needed by multiparts. When the editor is running,
+ * usually a big number of ArchObjects exist - most of them single-tile
+ * objects. The encapsulation of this "multpart-only" data can save
+ * a little bit of memory.
+ *
+ * @author <a href="mailto:and...@gm...">Andreas Vogl</a>
+ */
+ public class MultiArchData {
+ private boolean refflag; // true: this arch is a part of the tail - NOT the head
+
+ private int refnr; // if != -1 - multi tile
+ // if refnr == nodenr
+ // then first tile
+ // else refnr==first tile
+ private int refx; // multi tile: offset pos from head
+ private int refy; // sic!
+ private int refcount; // head: number of parts (>0 means it's ahead)
+ private int refmaxx; // head: parts in x
+ private int refmaxy; // head: parts in y
+ private int refmaxxm; // head: parts in x to count minus ref
+ private int refmaxym; // head: parts in y sic
+ private int multiShapeID; // the ID of the multiPositionData (only for multiparts in isoView!)
+ private int multiPartNr; // the part number for this tile (only for multiparts in isoView!)
+ private boolean isLowestPart; // lowest part of all multi tiles (only for multiparts in isoView!)
+
+ private ArchObject head; // multi tile, this is the head
+ private ArchObject nextref; // next multi tile of this arch in map
+
+ /**
+ * Constructor: Initializing the data
+ */
+ public MultiArchData() {
+ refmaxx = refmaxy = 0;
+ refnr = -1;
+ refflag = false;
+ refcount = 0;
+ head = nextref = null;
+ isLowestPart = false;
+ refx=0;
+ refy=0;
+ }
+
+ /**
+ * @returns an identical copy of this MultiArchData object.
+ * The links are not copied though! A cloned multipart needs to
+ * be re-linked properly before it can be used!
+ */
+ public MultiArchData getClone() {
+ MultiArchData clone = new MultiArchData();
+
+ clone.refflag = refflag; // true: this arch is a multi tile part
+ // and NOT the head
+ clone.refnr = refnr; // if != -1 - multi tile; if refnr == nodenr then first tile
+ // else refnr==first tile; multi tile: offset pos from head
+ clone.refy = refy; // sic!
+ clone.refcount = refcount; // head: number of parts
+ clone.refmaxx = refmaxx; // head: parts in x
+ clone.refmaxy = refmaxy; // head: parts in y
+ clone.refmaxxm = refmaxxm; // head: parts in x to count minus ref
+ clone.refmaxym = refmaxym; // head: parts in y sic
+ clone.multiShapeID = multiShapeID; // ID for the multiPositionData
+ clone.multiPartNr = multiPartNr; // part number for the multiPositionData
+ clone.isLowestPart = isLowestPart; // lowest part of all multi tiles
+
+ return clone;
+ }
+
+ // --- GET/SET methods ---
+ public boolean getRefflag() {return refflag;}
+ public void setRefflag(boolean state) {refflag = state;}
+ public boolean isLowestPart() {return isLowestPart;}
+ public void setLowestPart(boolean state) {isLowestPart = state;}
+
+ public int getRefNr() {return refnr;}
+ public void setRefNr(int value) {refnr = value;}
+ public int getRefX() {return refx;}
+ public void setRefX(int value) {refx = value;}
+ public int getRefY() {return refy;}
+ public void setRefY(int value) {refy = value;}
+ public int getRefCount() {return refcount;}
+ public void setRefCount(int value) {refcount = value;}
+ public int getRefMaxx() {return refmaxx;}
+ public void setRefMaxx(int value) {refmaxx = value;}
+ public int getRefMaxxm() {return refmaxxm;}
+ public void setRefMaxxm(int value) {refmaxxm = value;}
+ public int getRefMaxy() {return refmaxy;}
+ public void setRefMaxy(int value) {refmaxy = value;}
+ public int getRefMaxym() {return refmaxym;}
+ public void setRefMaxym(int value) {refmaxym = value;}
+ public int getMultiShapeID() {return multiShapeID;}
+ public void setMultiShapeID(int value) {multiShapeID = value;}
+ public int getMultiPartNr() {return multiPartNr;}
+ public void setMultiPartNr(int value) {multiPartNr = value;}
+
+ public ArchObject getHead() {return head;}
+ public void setHead(ArchObject node) {head = node;}
+ public ArchObject getNext() {return nextref;}
+ public void setNext(ArchObject node) {nextref = node;}
+ }
|
|
From: <cro...@li...> - 2002-12-18 22:33:34
|
Module Name: CFJavaEditor
Committed By: avogl
Date: Wed Dec 18 22:33:32 UTC 2002
Modified Files:
CFJavaEditor: CFJavaEditor.jar
CFJavaEditor/resource/conf: archetypes crossfire.0 types.txt
CFJavaEditor/src/cfeditor: ArchObject.java ArchObjectParser.java
ArchObjectStack.java CAttribBitmask.java CAttribDialog.java
CFArchAttrib.java CFArchType.java CFArchTypeList.java
CFJavaEditor.java CFTreasureListTree.java CFileReader.java
CMainControl.java CMainView.java CMapControl.java CMapModel.java
CMapPropertiesDialog.java CMapTileList.java CMapViewBasic.java
CNewMapDialog.java IGUIConstants.java MapArchObject.java
Log Message:
CFJavaEditor update:
o Bitmasks and Lists (for the arch syntax) can now be
defined directly in "types.txt", rather than in the code.
This means it is now completely trivial to support new
bitmask or list fields on editor-side: Just add them in
"types.txt" and there you go...
o I've updated the "types.txt" file to take advantage of
the described new feature.
o All multipart-specific data has been removed from the
general ArchObject class and seperated to MultiArchData.
This data-"encapsulation" can save some memory, as most of the
objects are *not* multiparts and hence don't need those
extra-variables.
o Arches have been recollected so the editor has now all
new arches/images included.
--AndreasV
The following files had too many changes to show the context diffs here:
cvs rdiff -r1.6 -r1.7 CFJavaEditor/resource/conf/archetypes
cvs rdiff -r1.4 -r1.5 CFJavaEditor/resource/conf/types.txt
cvs rdiff -r1.4 -r1.5 CFJavaEditor/src/cfeditor/ArchObject.java
cvs rdiff -r1.5 -r1.6 CFJavaEditor/src/cfeditor/CAttribDialog.java
cvs rdiff -r1.3 -r1.4 CFJavaEditor/src/cfeditor/CFArchAttrib.java
Start of context diffs
Index: CFJavaEditor/CFJavaEditor.jar
Index: CFJavaEditor/src/cfeditor/ArchObjectParser.java
diff -c CFJavaEditor/src/cfeditor/ArchObjectParser.java:1.2 CFJavaEditor/src/cfeditor/ArchObjectParser.java:1.3
*** CFJavaEditor/src/cfeditor/ArchObjectParser.java:1.2 Mon Sep 9 10:49:29 2002
--- CFJavaEditor/src/cfeditor/ArchObjectParser.java Wed Dec 18 14:33:32 2002
***************
*** 235,244 ****
//System.out.println("Arch "+ arch.getArchName()+" has no type info!");
// we got full arch
parsearch = false; // we write this sucker
- archmore = false; // we assume this is last... but perhaps..
- // add arch here (ommiting the map arch)
- //if (!arch.getArchName().equals(STARTARCH_NAME)) {
arch.setRefNr(first_arch);
if(first_arch != -1) {
// add to head our x/y position so he can setup refmax
--- 235,241 ----
***************
*** 291,297 ****
}
postParseDefArch(arch);
m_control.addArchToList(arch);
! //}
arch = null;
} else {
if(thisLine.regionMatches(0,"msg", 0, 3)) {
--- 288,298 ----
}
postParseDefArch(arch);
m_control.addArchToList(arch);
!
! if (IGUIConstants.isoView && archmore)
! calcLowestMulti(arch);
! archmore = false; // we assume this is last... but perhaps..
!
arch = null;
} else {
if(thisLine.regionMatches(0,"msg", 0, 3)) {
***************
*** 347,352 ****
--- 348,374 ----
newCath = thisLine.substring(14).trim();
if (!newCath.equals(oldCath))
isNewCathegory = true; // this arch has a new cathegory
+ } else if (IGUIConstants.isoView && thisLine.startsWith("mpart_id ")) {
+ // shape ID for multiparts
+ try {
+ int i = Integer.parseInt(thisLine.substring(9).trim());
+ arch.setMultiShapeID(i);
+
+ if(i <= 0 || i >= MultiPositionData.Y_DIM)
+ System.out.println("WARNING: Arch "+ arch.getArchName()+" mpart_id number is '"+thisLine.substring(9)+"'");
+ } catch (Exception e) {
+ System.out.println("WARNING: Arch "+ arch.getArchName()+" has a invalid mpart_id ("+thisLine.substring(9)+")");
+ arch.addArchText(thisLine+"\n");
+ }
+ } else if (IGUIConstants.isoView && thisLine.startsWith("mpart_nr ")) {
+ // part nr for multiparts
+ try {
+ int i = Integer.parseInt(thisLine.substring(9).trim());
+ arch.setMultiPartNr(i);
+ } catch (Exception e) {
+ System.out.println("WARNING: Arch "+ arch.getArchName()+" has a invalid mpart_nr ("+thisLine.substring(9)+")");
+ arch.addArchText(thisLine+"\n");
+ }
} else
arch.addArchText(thisLine+"\n");
// System.out.println("add String: "+thisLine);
***************
*** 466,479 ****
if (arch.getArchTypNr() == ArchObject.TYPE_UNSET)
arch.setArchTypNr(defarch.getArchTypNr());
! arch.setRefCount(defarch.getRefCount());
! arch.setRefFlag(defarch.getRefFlag());
! arch.setRefMaxX(defarch.getRefMaxX());
! arch.setRefMaxY(defarch.getRefMaxY());
! arch.setRefMaxMX(defarch.getRefMaxMX());
! arch.setRefMaxMY(defarch.getRefMaxMY());
! arch.setRefX(defarch.getRefX());
! arch.setRefY(defarch.getRefY());
// arch.setEditType(defarch.getEditType());
// we don't handle anim yet, so attach then back to archtext
--- 488,515 ----
if (arch.getArchTypNr() == ArchObject.TYPE_UNSET)
arch.setArchTypNr(defarch.getArchTypNr());
! // if the type is still unset, then we take the default one
! if (IGUIConstants.isoView) {
! if (defarch.getMultiShapeID() > 0 && arch.getMultiShapeID() == 0)
! arch.setMultiShapeID(defarch.getMultiShapeID());
! if (defarch.getMultiPartNr() > 0 && arch.getMultiPartNr() == 0)
! arch.setMultiPartNr(defarch.getMultiPartNr());
! if (defarch.isLowestPart())
! arch.setLowestPart(true);
! }
!
! if (arch.isMulti() || defarch.isMulti()) {
! if (!arch.isMD()) arch.initMultiData(); // make sure the MultiArchData is initialized
!
! arch.setRefCount(defarch.getRefCount());
! arch.setRefFlag(defarch.getRefFlag());
! arch.setRefMaxX(defarch.getRefMaxX());
! arch.setRefMaxY(defarch.getRefMaxY());
! arch.setRefMaxMX(defarch.getRefMaxMX());
! arch.setRefMaxMY(defarch.getRefMaxMY());
! arch.setRefX(defarch.getRefX());
! arch.setRefY(defarch.getRefY());
! }
// arch.setEditType(defarch.getEditType());
// we don't handle anim yet, so attach then back to archtext
***************
*** 615,618 ****
--- 651,694 ----
return start;
}
+ /**
+ * Calculate the lowest part of this multi-arch. This lowest part is needed
+ * because in ISO view, the big image is drawn for it's lowest part, in order
+ * to get the overlappings correct.
+ *
+ * (TODO: This method is called repeatedly for each multipart. It would be
+ * better if it was called only once per multipart.)
+ *
+ * @param arch last tail part of this multi
+ */
+ private void calcLowestMulti(ArchObject arch) {
+ ArchObject tmp = arch;
+ int minYOffset = 10000; // minimal offset
+ int count = 0; // count number of tiles
+ int t; // tmp. storage
+
+ // 1.step: find the maximal y-offest
+ while (tmp.getRefCount() <= 0 && tmp.getNodeNr() > 0) {
+ t = MultiPositionData.getYOffset(tmp.getMultiShapeID(), tmp.getMultiPartNr());
+ if (t < minYOffset) minYOffset = t;
+
+ // get next multipart piece
+ tmp = m_control.getArch(tmp.getNodeNr()-1);
+ count++;
+ }
+ t = MultiPositionData.getYOffset(tmp.getMultiShapeID(), tmp.getMultiPartNr());
+ if (t < minYOffset) minYOffset = t;
+
+ // 2.step: set 'lowestPart' flag for all tiles with maximum offset
+ for (int i=0; count >= 0; count--, i++) {
+ t = MultiPositionData.getYOffset(tmp.getMultiShapeID(), tmp.getMultiPartNr());
+ if (t <= minYOffset) {
+ tmp.setLowestPart(true);
+ }
+ else
+ tmp.setLowestPart(false);
+ tmp = m_control.getArch(tmp.getNodeNr()+1);
+ }
+
+ }
};
Index: CFJavaEditor/src/cfeditor/ArchObjectStack.java
diff -c CFJavaEditor/src/cfeditor/ArchObjectStack.java:1.7 CFJavaEditor/src/cfeditor/ArchObjectStack.java:1.8
*** CFJavaEditor/src/cfeditor/ArchObjectStack.java:1.7 Sun Nov 3 08:43:18 2002
--- CFJavaEditor/src/cfeditor/ArchObjectStack.java Wed Dec 18 14:33:32 2002
***************
*** 1160,1165 ****
--- 1160,1169 ----
binFile.writeBytes("face "+arch.getFaceName()+"\n");
if(arch.getArchTypNr()>0)
binFile.writeBytes("type "+arch.getArchTypNr()+"\n");
+ if(arch.getMultiShapeID()>0)
+ binFile.writeBytes("mpart_id "+arch.getMultiShapeID()+"\n");
+ if(arch.getMultiPartNr()>0)
+ binFile.writeBytes("mpart_nr "+arch.getMultiPartNr()+"\n");
if(arch.getMsgText() != null) {
binFile.writeBytes("msg\n");
***************
*** 1203,1208 ****
--- 1207,1216 ----
binFile.writeBytes("face "+arch.getFaceName()+"\n");
if(arch.getArchTypNr()>0)
binFile.writeBytes("type "+arch.getArchTypNr()+"\n");
+ if(arch.getMultiShapeID()>0)
+ binFile.writeBytes("mpart_id "+arch.getMultiShapeID()+"\n");
+ if(arch.getMultiPartNr()>0)
+ binFile.writeBytes("mpart_nr "+arch.getMultiPartNr()+"\n");
if(arch.getMsgText() != null) {
binFile.writeBytes("msg\n");
Index: CFJavaEditor/src/cfeditor/CFileReader.java
diff -c CFJavaEditor/src/cfeditor/CFileReader.java:1.1 CFJavaEditor/src/cfeditor/CFileReader.java:1.2
*** CFJavaEditor/src/cfeditor/CFileReader.java:1.1 Fri Aug 16 11:48:35 2002
--- CFJavaEditor/src/cfeditor/CFileReader.java Wed Dec 18 14:33:32 2002
***************
*** 176,181 ****
--- 176,184 ----
int c; // character value, read from the stream
int t=0; // index
+ long count = 0; // counter (to realize when shooting past EOF)
+ long maxCount = 10000; // bail out when counter exceeds this value
+
do {
c = stream.read(); // read one character
r = r + String.valueOf((char)c); // add character 'c' to the string
***************
*** 183,192 ****
t++;
else
t=0;
! } while (t < tag.length() && c != -1);
// if we did not find the tag, an EOFException is thrown
! if (c == -1)
throw new EOFException();
else {
// cut 'tag' off, at the end of the string
--- 186,195 ----
t++;
else
t=0;
! } while (t < tag.length() && c != -1 && count++ < maxCount);
// if we did not find the tag, an EOFException is thrown
! if (c == -1 || count++ >= maxCount)
throw new EOFException();
else {
// cut 'tag' off, at the end of the string
Index: CFJavaEditor/src/cfeditor/CMainControl.java
diff -c CFJavaEditor/src/cfeditor/CMainControl.java:1.8 CFJavaEditor/src/cfeditor/CMainControl.java:1.9
*** CFJavaEditor/src/cfeditor/CMainControl.java:1.8 Sun Nov 3 08:43:19 2002
--- CFJavaEditor/src/cfeditor/CMainControl.java Wed Dec 18 14:33:32 2002
***************
*** 185,190 ****
--- 185,194 ----
if (getPlainFont() != null)
JFontChooser.setUIFont(getPlainFont());
+ // initialize & load
+ if (IGUIConstants.isoView)
+ MultiPositionData.init();
+
// Initialise the main view
m_view.init();
loadDefTiles();
***************
*** 741,747 ****
if (askConfirm(
"Do You Want To Save Changes?",
"Do you want to save changes to map "+
! level.getMapName()+"?" )) {
if (level.isPlainSaveEnabled()) {
level.save();
--- 745,751 ----
if (askConfirm(
"Do You Want To Save Changes?",
"Do you want to save changes to map "+
! level.getMapNameWithoutMusic()+"?" )) {
if (level.isPlainSaveEnabled()) {
level.save();
***************
*** 831,841 ****
try {
start = mapFileDecoder.decodeMapFile(file, this); // parse mapfile
maparch = mapFileDecoder.getMapArch(); // get map arch
! } catch (CGridderException e) {
// popup display
showMessage("Couldn't load Map", e.getMessage());
return;
}
// ok, we have it all!!
--- 835,854 ----
try {
start = mapFileDecoder.decodeMapFile(file, this); // parse mapfile
maparch = mapFileDecoder.getMapArch(); // get map arch
! }
! catch (CGridderException e) {
// popup display
showMessage("Couldn't load Map", e.getMessage());
return;
}
+ catch (OutOfMemoryError e) {
+ // out of memory!! - display error
+ showMessage("Out of Memory", "Not enough memory available to open more maps!\n"+
+ "You can increase the memory limit by using the '-mx' runtime flag.\n"+
+ "For example: 'java -mx128m -jar "+IGUIConstants.APP_NAME+".jar'",
+ JOptionPane.WARNING_MESSAGE);
+ return;
+ }
// ok, we have it all!!
***************
*** 1564,1574 ****
/**
* Shows the given message in the UI.
! *@param strTitle The title of the message.
! *@param strMessage The message to be shown.
*/
! public void showMessage( String strTitle, String strMessage ) {
! m_view.showMessage( strTitle, strMessage );
}
/**
--- 1577,1597 ----
/**
* Shows the given message in the UI.
! * @param strTitle The title of the message.
! * @param strMessage The message to be shown.
! */
! public void showMessage(String strTitle, String strMessage ) {
! m_view.showMessage(strTitle, strMessage );
! }
!
! /**
! * Shows the given message in the UI.
! * @param strTitle The title of the message.
! * @param strMessage The message to be shown.
! * @param messageType Type of message (see JOptionPane constants)
*/
! public void showMessage(String strTitle, String strMessage, int messageType) {
! m_view.showMessage(strTitle, strMessage, messageType);
}
/**
Index: CFJavaEditor/src/cfeditor/CMainView.java
diff -c CFJavaEditor/src/cfeditor/CMainView.java:1.6 CFJavaEditor/src/cfeditor/CMainView.java:1.7
*** CFJavaEditor/src/cfeditor/CMainView.java:1.6 Sun Nov 3 08:43:19 2002
--- CFJavaEditor/src/cfeditor/CMainView.java Wed Dec 18 14:33:32 2002
***************
*** 522,536 ****
/**
* Shows the given message in the UI.
! *@param strTitle The title of the message.
! *@param strMessage The message to be shown.
*/
! public void showMessage( String strTitle, String strMessage ) {
! JOptionPane.showMessageDialog(
! this,
! strMessage,
! strTitle,
! JOptionPane.INFORMATION_MESSAGE );
}
/**
--- 522,537 ----
/**
* Shows the given message in the UI.
! * @param strTitle The title of the message.
! * @param strMessage The message to be shown.
! * @param messageType Type of message (see JOptionPane constants), defines icon used
*/
! public void showMessage(String strTitle, String strMessage, int messageType) {
! JOptionPane.showMessageDialog(this, strMessage, strTitle, messageType);
! }
!
! public void showMessage(String strTitle, String strMessage) {
! JOptionPane.showMessageDialog(this, strMessage, strTitle, JOptionPane.INFORMATION_MESSAGE);
}
/**
|
|
From: <cro...@li...> - 2002-12-18 17:16:31
|
Module Name: crossfire Committed By: garbled Date: Wed Dec 18 17:16:30 UTC 2002 Modified Files: crossfire/lib: formulae Log Message: Formulae to go along with the new alchemy stuff. By Johnny Shelley, looked over and verified by myself. The following files had too many changes to show the context diffs here: cvs rdiff -r1.10 -r1.11 crossfire/lib/formulae |
|
From: <cro...@li...> - 2002-12-18 16:52:14
|
Module Name: crossfire
Committed By: garbled
Date: Wed Dec 18 16:52:13 UTC 2002
Modified Files:
crossfire/server: spell_effect.c
Log Message:
Don't allow players to alchemy cauldrons into gold nuggets.
Start of context diffs
Index: crossfire/server/spell_effect.c
diff -c crossfire/server/spell_effect.c:1.85 crossfire/server/spell_effect.c:1.86
*** crossfire/server/spell_effect.c:1.85 Wed Dec 18 08:39:59 2002
--- crossfire/server/spell_effect.c Wed Dec 18 08:52:12 2002
***************
*** 1,6 ****
/*
* static char *rcsid_spell_effect_c =
! * "$Id: spell_effect.c,v 1.85 2002/12/18 16:39:59 garbled Exp $";
*/
--- 1,6 ----
/*
* static char *rcsid_spell_effect_c =
! * "$Id: spell_effect.c,v 1.86 2002/12/18 16:52:12 garbled Exp $";
*/
***************
*** 2089,2095 ****
value=0;
else if (obj->type==MONEY || obj->type==GEM)
value /=3;
! else if (QUERY_FLAG(obj,FLAG_UNPAID)) value=0;
else
value *= 0.9;
--- 2089,2096 ----
value=0;
else if (obj->type==MONEY || obj->type==GEM)
value /=3;
! else if (QUERY_FLAG(obj, FLAG_UNPAID))
! value=0;
else
value *= 0.9;
***************
*** 2171,2183 ****
for(tmp=get_map_ob(op->map,x,y);tmp!=NULL;tmp=next) {
next=tmp->above;
! if (tmp->weight>0 && !QUERY_FLAG(tmp, FLAG_NO_PICK)
! && !QUERY_FLAG(tmp, FLAG_ALIVE)) {
if (tmp->inv) {
! object *next1,*tmp1;
for (tmp1 = tmp->inv; tmp1!=NULL; tmp1=next1) {
next1 = tmp1->below;
! if (tmp1->weight>0 && !QUERY_FLAG(tmp1, FLAG_NO_PICK) && !QUERY_FLAG(tmp1, FLAG_ALIVE))
alchemy_object(tmp1, &small_nuggets, &large_nuggets,
&weight);
}
--- 2172,2187 ----
for(tmp=get_map_ob(op->map,x,y);tmp!=NULL;tmp=next) {
next=tmp->above;
! if (tmp->weight>0 && !QUERY_FLAG(tmp, FLAG_NO_PICK) &&
! !QUERY_FLAG(tmp, FLAG_ALIVE) &&
! !QUERY_FLAG(tmp, FLAG_IS_CAULDRON)) {
if (tmp->inv) {
! object *next1, *tmp1;
for (tmp1 = tmp->inv; tmp1!=NULL; tmp1=next1) {
next1 = tmp1->below;
! if (tmp1->weight>0 && !QUERY_FLAG(tmp1, FLAG_NO_PICK) &&
! !QUERY_FLAG(tmp1, FLAG_ALIVE) &&
! !QUERY_FLAG(tmp1, FLAG_IS_CAULDRON))
alchemy_object(tmp1, &small_nuggets, &large_nuggets,
&weight);
}
|
|
From: <cro...@li...> - 2002-12-18 16:40:03
|
Module Name: crossfire
Committed By: garbled
Date: Wed Dec 18 16:40:00 UTC 2002
Modified Files:
crossfire/include: sproto.h
crossfire/server: c_wiz.c commands.c spell_effect.c
Added Files:
crossfire/lib/wizhelp: mon_aggr possess
Log Message:
Add new DM command "possess". This command allows a DM to possess the body
of a monster.
Also, fix a bug in the new implementation of summon_pet()
Start of context diffs
Index: crossfire/include/sproto.h
diff -c crossfire/include/sproto.h:1.75 crossfire/include/sproto.h:1.76
*** crossfire/include/sproto.h:1.75 Sun Dec 8 20:37:03 2002
--- crossfire/include/sproto.h Wed Dec 18 08:39:56 2002
***************
*** 256,261 ****
--- 256,263 ----
int command_skills(object *op, char *params);
int command_dump(object *op, char *params);
int command_patch(object *op, char *params);
+ int command_mon_aggr (object *op, char *params);
+ int command_possess (object *op, char *params);
int command_remove(object *op, char *params);
int command_free(object *op, char *params);
int command_addexp(object *op, char *params);
Index: crossfire/lib/wizhelp/mon_aggr
diff -c /dev/null crossfire/lib/wizhelp/mon_aggr:1.1
*** /dev/null Wed Dec 18 08:40:00 2002
--- crossfire/lib/wizhelp/mon_aggr Wed Dec 18 08:39:59 2002
***************
*** 0 ****
--- 1,6 ----
+ syntax: mon_aggr
+ notes: Toggles the aggression
+ of the monster you are currently
+ possessing. Not reccomended to
+ be flipped on yourself as a
+ player.
Index: crossfire/server/c_wiz.c
diff -c crossfire/server/c_wiz.c:1.27 crossfire/server/c_wiz.c:1.28
*** crossfire/server/c_wiz.c:1.27 Tue Nov 12 20:57:32 2002
--- crossfire/server/c_wiz.c Wed Dec 18 08:39:58 2002
***************
*** 1,6 ****
/*
* static char *rcsid_c_wiz_c =
! * "$Id: c_wiz.c,v 1.27 2002/11/13 04:57:32 garbled Exp $";
*/
/*
--- 1,6 ----
/*
* static char *rcsid_c_wiz_c =
! * "$Id: c_wiz.c,v 1.28 2002/12/18 16:39:58 garbled Exp $";
*/
/*
***************
*** 636,641 ****
--- 636,779 ----
new_draw_info(NDI_UNIQUE, 0, op, "Object is marked original");
return 1;
}
+
+ /* When DM is possessing a monster, flip aggression on and off, to allow
+ better motion */
+
+ int command_mon_aggr (object *op, char *params)
+ {
+ if (op->enemy || !QUERY_FLAG(op, FLAG_UNAGGRESSIVE)) {
+ op->enemy = NULL;
+ SET_FLAG(op, FLAG_UNAGGRESSIVE);
+ new_draw_info(NDI_UNIQUE, 0, op, "Agression turned OFF");
+ } else {
+ CLEAR_FLAG(op, FLAG_FRIENDLY);
+ CLEAR_FLAG(op, FLAG_UNAGGRESSIVE);
+ new_draw_info(NDI_UNIQUE, 0, op, "Agression turned ON");
+ }
+ }
+
+ /* DM can possess a monster. Basically, this tricks the client into thinking
+ a given monster, is actually the player it controls. This allows a DM
+ to inhabit a monster's body, and run around the game with it. */
+
+ int command_possess (object *op, char *params)
+ {
+ object *victim, *curinv, *nextinv, *tmp;
+ player *pl;
+ archetype *at;
+ int i;
+ char buf[MAX_BUF];
+
+ victim=NULL;
+ if (params != NULL) {
+ if (sscanf(params, "%d", &i))
+ victim=find_object(i);
+ else if (sscanf(params, "%s", buf))
+ victim=find_object_name(buf);
+ }
+ if (victim==NULL) {
+ new_draw_info(NDI_UNIQUE, 0, op, "Patch what object (nr)?");
+ return 1;
+ }
+ if (victim==op) {
+ new_draw_info(NDI_UNIQUE, 0, op, "As insane as you are, I cannot "
+ "allow you to posess yourself.");
+ return 1;
+ }
+
+ /* clear out the old inventory */
+ curinv = op->inv;
+ while (curinv != NULL) {
+ nextinv = curinv->below;
+ esrv_del_item(op->contr, curinv->count);
+ curinv = nextinv;
+ }
+ /* make the switch */
+ pl = op->contr;
+ victim->contr = pl;
+ pl->ob = victim;
+ victim->type = PLAYER;
+ SET_FLAG(victim, FLAG_WIZ);
+
+ /* exp objects */
+ at = find_archetype("experience_agility");
+ tmp = get_object();
+ copy_object(&at->clone, tmp);
+ tmp = insert_ob_in_ob(tmp, victim);
+ at = find_archetype("experience_charisma");
+ tmp = get_object();
+ copy_object(&at->clone, tmp);
+ tmp = insert_ob_in_ob(tmp, victim);
+ at = find_archetype("experience_mental");
+ tmp = get_object();
+ copy_object(&at->clone, tmp);
+ tmp = insert_ob_in_ob(tmp, victim);
+ at = find_archetype("experience_physical");
+ tmp = get_object();
+ copy_object(&at->clone, tmp);
+ tmp = insert_ob_in_ob(tmp, victim);
+ at = find_archetype("experience_power");
+ tmp = get_object();
+ copy_object(&at->clone, tmp);
+ tmp = insert_ob_in_ob(tmp, victim);
+ at = find_archetype("experience_wis");
+ tmp = get_object();
+ copy_object(&at->clone, tmp);
+ tmp = insert_ob_in_ob(tmp, victim);
+ /* need to add basic skills like melee, bows, set chosen skill */
+ at = find_archetype("skill_punching");
+ tmp = get_object();
+ copy_object(&at->clone, tmp);
+ tmp = insert_ob_in_ob(tmp, victim);
+ (void)link_player_skill(victim, tmp);
+ at = find_archetype("skill_melee_weapon");
+ tmp = get_object();
+ copy_object(&at->clone, tmp);
+ tmp = insert_ob_in_ob(tmp, victim);
+ (void)link_player_skill(victim, tmp);
+ at = find_archetype("skill_missile_weapon");
+ tmp = get_object();
+ copy_object(&at->clone, tmp);
+ tmp = insert_ob_in_ob(tmp, victim);
+ (void)link_player_skill(victim, tmp);
+ at = find_archetype("skill_use_magic_item");
+ tmp = get_object();
+ copy_object(&at->clone, tmp);
+ tmp = insert_ob_in_ob(tmp, victim);
+ (void)link_player_skill(victim, tmp);
+ at = find_archetype("skill_spellcasting");
+ tmp = get_object();
+ copy_object(&at->clone, tmp);
+ tmp = insert_ob_in_ob(tmp, victim);
+ (void)link_player_skill(victim, tmp);
+ at = find_archetype("skill_praying");
+ tmp = get_object();
+ copy_object(&at->clone, tmp);
+ tmp = insert_ob_in_ob(tmp, victim);
+ (void)link_player_skill(victim, tmp);
+ /* send the inventory to the client */
+ curinv = victim->inv;
+ while (curinv != NULL) {
+ nextinv = curinv->below;
+ esrv_send_item(victim, curinv);
+ curinv = nextinv;
+ }
+ /* basic patchup */
+ for (i=0; i<NUM_BODY_LOCATIONS; i++)
+ if (i == 1 || i == 6 || i == 8 || i == 9)
+ victim->body_info[i] = 2;
+ else
+ victim->body_info[i] = 1;
+
+ esrv_new_player(pl, 80); /* just pick a wieght, we don't care */
+ esrv_send_inventory(victim, victim);
+
+ fix_player(victim);
+
+ do_some_living(victim);
+ }
+
int command_patch (object *op, char *params)
{
Index: crossfire/server/commands.c
diff -c crossfire/server/commands.c:1.29 crossfire/server/commands.c:1.30
*** crossfire/server/commands.c:1.29 Tue Nov 12 21:24:53 2002
--- crossfire/server/commands.c Wed Dec 18 08:39:58 2002
***************
*** 1,6 ****
/*
* static char *rcsid_commands_c =
! * "$Id: commands.c,v 1.29 2002/11/13 05:24:53 garbled Exp $";
*/
/*
--- 1,6 ----
/*
* static char *rcsid_commands_c =
! * "$Id: commands.c,v 1.30 2002/12/18 16:39:58 garbled Exp $";
*/
/*
***************
*** 242,247 ****
--- 242,249 ----
{"teleport", command_teleport,0.0},
{"wizpass", command_wizpass,0.0},
{"overlay_save", command_save_overlay, 0.0},
+ {"possess", command_possess, 0.0},
+ {"mon_aggr", command_mon_aggr, 0.0},
};
const int WizCommandsSize =sizeof(WizCommands) / sizeof(CommArray_s);
Index: crossfire/server/spell_effect.c
diff -c crossfire/server/spell_effect.c:1.84 crossfire/server/spell_effect.c:1.85
*** crossfire/server/spell_effect.c:1.84 Fri Dec 13 23:04:32 2002
--- crossfire/server/spell_effect.c Wed Dec 18 08:39:59 2002
***************
*** 1,6 ****
/*
* static char *rcsid_spell_effect_c =
! * "$Id: spell_effect.c,v 1.84 2002/12/14 07:04:32 garbled Exp $";
*/
--- 1,6 ----
/*
* static char *rcsid_spell_effect_c =
! * "$Id: spell_effect.c,v 1.85 2002/12/18 16:39:59 garbled Exp $";
*/
***************
*** 1755,1761 ****
int level, number, i;
char *monster;
treasurelist *trlist = NULL;
! treasure *tr, *prevtr;
level = ((op->head?op->head->level:SK_level(op)) / 4);
--- 1755,1761 ----
int level, number, i;
char *monster;
treasurelist *trlist = NULL;
! treasure *tr, *prevtr = NULL;
level = ((op->head?op->head->level:SK_level(op)) / 4);
|
|
From: <cro...@li...> - 2002-12-15 20:32:48
|
Module Name: arch Committed By: temitchell Date: Sun Dec 15 20:32:47 UTC 2002 Added Files: arch/monster/human/Town: farmer.arc farmer.base.111.png farmer.base.112.png farmer.clsc.111.png farmer.clsc.112.png Log Message: -you kids get out of my tomatoes! Start of context diffs Index: arch/monster/human/Town/farmer.arc diff -c /dev/null arch/monster/human/Town/farmer.arc:1.1 *** /dev/null Sun Dec 15 12:32:47 2002 --- arch/monster/human/Town/farmer.arc Sun Dec 15 12:32:46 2002 *************** *** 0 **** --- 1,54 ---- + Object farmer + race human + name farmer + randomitems throw_stnd + face farmer.111 + anim + farmer.111 + farmer.112 + mina + sp 10 + maxsp 10 + Str 12 + Dex 10 + Int 10 + Pow 1 + monster 1 + unaggressive 1 + alive 1 + ac 8 + wc 10 + dam 2 + hp 18 + maxhp 18 + exp 25 + speed 0.15 + weight 50000 + level 3 + will_apply 2 + pick_up 24 + can_apply 25 + can_use_wand 1 + can_use_rod 1 + can_use_skill 1 + can_cast_spell 1 + can_use_bow 1 + can_use_ring 1 + can_use_shield 1 + can_use_armour 1 + can_use_weapon 1 + can_use_scroll 1 + editable 1 + color_fg black + body_skill 1 + body_finger 2 + body_torso 1 + body_head 1 + body_shoulder 1 + body_foot 1 + body_wrist 1 + body_hand 2 + body_waist 1 + body_arm 2 + body_range 1 + end |
|
From: <cro...@li...> - 2002-12-15 17:18:54
|
Module Name: arch Committed By: temitchell Date: Sun Dec 15 17:18:52 UTC 2002 Modified Files: arch/ground/Winter: cforest3.base.111.png Log Message: -forgot this winter forest image Start of context diffs Index: arch/ground/Winter/cforest3.base.111.png |
|
From: <cro...@li...> - 2002-12-15 16:51:06
|
Module Name: arch Committed By: temitchell Date: Sun Dec 15 16:51:05 UTC 2002 Modified Files: arch/ground/Mountain: mountain5.base.111.png s_mountain.base.111.png arch/ground/Winter: drifts.base.111.png ipond.base.111.png snow.base.111.png Log Message: - more graphic tweeking - snow, ipond, and drifts touched up by A.V, also an attempt to make the winter mountainn images nicer by me. Start of context diffs Index: arch/ground/Mountain/mountain5.base.111.png Index: arch/ground/Winter/drifts.base.111.png |
|
From: <cro...@li...> - 2002-12-15 16:48:22
|
Module Name: arch Committed By: temitchell Date: Sun Dec 15 16:48:21 UTC 2002 Modified Files: arch/weapon/bow: magic_bow.base.111.png magic_bow.base.112.png magic_bow.base.113.png magic_bow.base.114.png Log Message: -return of the magic bow - images by A.V. Start of context diffs Index: arch/weapon/bow/magic_bow.base.111.png |
|
From: <cro...@li...> - 2002-12-14 07:04:35
|
Module Name: crossfire
Committed By: garbled
Date: Sat Dec 14 07:04:32 UTC 2002
Modified Files:
crossfire/lib: treasures
crossfire/server: spell_effect.c
Log Message:
Per the comment above summon_pet, I have modified summon_pet() to use the
treasurelist, rather than the built-in compiled list.
Start of context diffs
Index: crossfire/lib/treasures
diff -c crossfire/lib/treasures:1.52 crossfire/lib/treasures:1.53
*** crossfire/lib/treasures:1.52 Thu Sep 12 23:32:12 2002
--- crossfire/lib/treasures Fri Dec 13 23:04:31 2002
***************
*** 1,6 ****
# This file contains various treasures, with generation rules.
#
! # $Id: treasures,v 1.52 2002/09/13 06:32:12 mwedel Exp $
#
# As of version 0.91.1, what this file was extended to handle list
# re-linking and generation of only 1 item on that list. This does away
--- 1,6 ----
# This file contains various treasures, with generation rules.
#
! # $Id: treasures,v 1.53 2002/12/14 07:04:31 garbled Exp $
#
# As of version 0.91.1, what this file was extended to handle list
# re-linking and generation of only 1 item on that list. This does away
***************
*** 440,445 ****
--- 440,500 ----
arch spelldirect_poison_cloud
more
arch poison_clawing
+ end
+ ##############################################################
+ #
+ # Pet Monsters -
+ #
+ treasure mage_pet_monster
+ arch bat
+ nrof 2
+ more
+ arch spider
+ nrof 1
+ more
+ arch stalker
+ nrof 1
+ more
+ arch beholder
+ nrof 2
+ more
+ arch dark_elf
+ nrof 3
+ more
+ end
+ treasure altern_pet_monster
+ arch bird
+ nrof 1
+ more
+ arch pixie
+ nrof 1
+ more
+ arch skeleton
+ nrof 2
+ more
+ arch skull
+ nrof 1
+ more
+ arch vampire
+ nrof 1
+ more
+ end
+ treasure priest_pet_monster
+ arch bee
+ nrof 3
+ more
+ arch killer_bee
+ nrof 2
+ more
+ arch devil
+ nrof 2
+ more
+ arch angel
+ nrof 2
+ more
+ arch panther
+ nrof 5
+ more
end
##############################################################
#
Index: crossfire/server/spell_effect.c
diff -c crossfire/server/spell_effect.c:1.83 crossfire/server/spell_effect.c:1.84
*** crossfire/server/spell_effect.c:1.83 Wed Dec 11 13:31:00 2002
--- crossfire/server/spell_effect.c Fri Dec 13 23:04:32 2002
***************
*** 1,6 ****
/*
* static char *rcsid_spell_effect_c =
! * "$Id: spell_effect.c,v 1.83 2002/12/11 21:31:00 garbled Exp $";
*/
--- 1,6 ----
/*
* static char *rcsid_spell_effect_c =
! * "$Id: spell_effect.c,v 1.84 2002/12/14 07:04:32 garbled Exp $";
*/
***************
*** 1741,1823 ****
}
! /* this pet monster stuff is total crap!
! * We should replace it with:
! * struct summoned_mon int foo {
! * char * mon_arch;
! * int num_summoned;
! * }
! * struct summoned_mon pets_summoned = {
! * { "bird", 5 },
! * { "vampire", 6},
! * { NULL, 0 } -* terminator *-
! * }
! *
* Or even better, use treasure lists for this,
* eg, mage_pet_monster treasure list, etc. Means
* that these could be changed without recompiling the server.
*/
- #define MAX_PET_MONSTERS 5
- char mage_pet_monsters [MAX_PET_MONSTERS][16] =
- {"bat","spider","stalker","beholder","dark_elf"};
- int mage_num_called [MAX_PET_MONSTERS] = {2,1,1,2,3};
- char priest_pet_monsters [MAX_PET_MONSTERS][16] =
- {"bee","killer_bee","devil","angel","panther"};
- int priest_num_called [MAX_PET_MONSTERS] = {3,2,2,2,5};
- char altern_pet_monsters [MAX_PET_MONSTERS][16] =
- {"bird","pixie","skeleton","skull","vampire"};
- int altern_num_called [MAX_PET_MONSTERS] = {1,1,2,1,1};
-
-
-
int summon_pet(object *op, int dir, SpellTypeFrom item) {
int level, number, i;
char *monster;
! archetype *at;
level = ((op->head?op->head->level:SK_level(op)) / 4);
- if (level >= MAX_PET_MONSTERS)
- level = MAX_PET_MONSTERS - 1;
switch(rndm(0, 2)) {
case 0:
! number = priest_num_called[level];
! monster = priest_pet_monsters[level];
break;
case 1:
! number = mage_num_called[level];
! monster = mage_pet_monsters[level];
break;
-
default:
! number = altern_num_called[level];
! monster = altern_pet_monsters[level];
break;
}
! at = find_archetype(monster);
! if(at == NULL) {
! LOG(llevError,"Unknown archetype in summon pet: %s\n",monster);
return 0;
}
if (!dir)
! dir = find_free_spot(at, op->map, op->x, op->y, 1, SIZEOFFREE);
! if((dir==-1) || arch_blocked(at,op->map, op->x + freearr_x[dir], op->y+freearr_y[dir])) {
! new_draw_info(NDI_UNIQUE, 0,op, "There is something in the way.");
return 0;
}
for (i = 1; i < number + 1; i++) {
archetype *atmp;
object *prev = NULL, *head = NULL; /* We want to summon dragons *grin* */
! for(atmp = at; atmp!=NULL; atmp = atmp->more) {
object *tmp;
tmp = arch_to_object(atmp);
/* if this is the head, set owner/friendly as needed */
! if (atmp == at) {
set_owner(tmp, op);
SET_FLAG(tmp, FLAG_MONSTER);
if (op->type == PLAYER) {
--- 1741,1807 ----
}
! /*
* Or even better, use treasure lists for this,
* eg, mage_pet_monster treasure list, etc. Means
* that these could be changed without recompiling the server.
+ *
+ * Garbled 2002-12-14
+ * Made summon_pet_monster use the treasurelist, as suggested above. Adding
+ * new lines to the treasures for these categories will automatically work.
*/
int summon_pet(object *op, int dir, SpellTypeFrom item) {
int level, number, i;
char *monster;
! treasurelist *trlist = NULL;
! treasure *tr, *prevtr;
level = ((op->head?op->head->level:SK_level(op)) / 4);
switch(rndm(0, 2)) {
case 0:
! trlist = find_treasurelist("mage_pet_monster");
break;
case 1:
! trlist = find_treasurelist("priest_pet_monster");
break;
default:
! trlist = find_treasurelist("altern_pet_monster");
break;
}
! if (trlist == NULL)
! return 0;
!
! for (i=0, tr=trlist->items; tr != NULL && i < level-1;
! prevtr = tr, tr = tr->next, i++);
!
! if(prevtr == NULL || prevtr->item == NULL) {
! LOG(llevError,"Treasurelist Found NULL in summon_pet_monster()\n");
return 0;
}
+
+ number = prevtr->nrof;
+
if (!dir)
! dir = find_free_spot(prevtr->item, op->map, op->x, op->y, 1, SIZEOFFREE);
! if ((dir==-1) || arch_blocked(prevtr->item, op->map,
! op->x + freearr_x[dir], op->y+freearr_y[dir])) {
! new_draw_info(NDI_UNIQUE, 0, op, "There is something in the way.");
return 0;
}
for (i = 1; i < number + 1; i++) {
archetype *atmp;
object *prev = NULL, *head = NULL; /* We want to summon dragons *grin* */
! for(atmp = prevtr->item; atmp!=NULL; atmp = atmp->more) {
object *tmp;
tmp = arch_to_object(atmp);
/* if this is the head, set owner/friendly as needed */
! if (atmp == prevtr->item) {
set_owner(tmp, op);
SET_FLAG(tmp, FLAG_MONSTER);
if (op->type == PLAYER) {
***************
*** 1861,1867 ****
SET_FLAG(tmp, FLAG_NO_DROP);
}
dir = absdir(dir + 1);
! if (arch_blocked(at,op->map, op->x + freearr_x[dir], op->y + freearr_y[dir])) {
if (i < number) {
new_draw_info(NDI_UNIQUE, 0,op, "There is something in the way,");
new_draw_info(NDI_UNIQUE, 0,op, "no more pets for this casting.");
--- 1845,1851 ----
SET_FLAG(tmp, FLAG_NO_DROP);
}
dir = absdir(dir + 1);
! if (arch_blocked(prevtr->item, op->map, op->x + freearr_x[dir], op->y + freearr_y[dir])) {
if (i < number) {
new_draw_info(NDI_UNIQUE, 0,op, "There is something in the way,");
new_draw_info(NDI_UNIQUE, 0,op, "no more pets for this casting.");
|
|
From: <cro...@li...> - 2002-12-13 07:23:01
|
Module Name: crossfire
Committed By: garbled
Date: Fri Dec 13 07:23:00 UTC 2002
Modified Files:
crossfire/server: player.c
Log Message:
Per Mark's suggestion, make it so attacktype is only transferred to arrows
that have AT_PHYSICAL only. To avoid fire/cold arrows and the like.
Start of context diffs
Index: crossfire/server/player.c
diff -c crossfire/server/player.c:1.110 crossfire/server/player.c:1.111
*** crossfire/server/player.c:1.110 Thu Dec 12 21:09:49 2002
--- crossfire/server/player.c Thu Dec 12 23:23:00 2002
***************
*** 1,6 ****
/*
* static char *rcsid_player_c =
! * "$Id: player.c,v 1.110 2002/12/13 05:09:49 garbled Exp $";
*/
/*
--- 1,6 ----
/*
* static char *rcsid_player_c =
! * "$Id: player.c,v 1.111 2002/12/13 07:23:00 garbled Exp $";
*/
/*
***************
*** 1376,1389 ****
dex_bonus[op->stats.Dex] - thaco_bonus[op->stats.Str] - arrow->stats.wc -
bow->stats.wc;
arrow->level = SK_level (op);
! arrow->attacktype |= bow->attacktype;
if (bow->slaying != NULL)
arrow->slaying = strdup(bow->slaying);
} else {
arrow->stats.wc= op->stats.wc - bow->magic - arrow->magic -
arrow->stats.wc;
arrow->level = op->level;
! arrow->attacktype |= bow->attacktype;
if (bow->slaying != NULL)
arrow->slaying = strdup(bow->slaying);
}
--- 1376,1391 ----
dex_bonus[op->stats.Dex] - thaco_bonus[op->stats.Str] - arrow->stats.wc -
bow->stats.wc;
arrow->level = SK_level (op);
! if (arrow->attacktype == AT_PHYSICAL)
! arrow->attacktype |= bow->attacktype;
if (bow->slaying != NULL)
arrow->slaying = strdup(bow->slaying);
} else {
arrow->stats.wc= op->stats.wc - bow->magic - arrow->magic -
arrow->stats.wc;
arrow->level = op->level;
! if (arrow->attacktype == AT_PHYSICAL)
! arrow->attacktype |= bow->attacktype;
if (bow->slaying != NULL)
arrow->slaying = strdup(bow->slaying);
}
|
|
From: <cro...@li...> - 2002-12-13 05:09:51
|
Module Name: crossfire
Committed By: garbled
Date: Fri Dec 13 05:09:49 UTC 2002
Modified Files:
crossfire/server: gods.c player.c time.c
Log Message:
Fix a typo in the attacktype bow->arrow transfer. Make it so gods can
now bless bows like they would any other weapon. Make slaying transfer
fom the bow to the arrow, so the god enchantment is not lost.
Start of context diffs
Index: crossfire/server/gods.c
diff -c crossfire/server/gods.c:1.34 crossfire/server/gods.c:1.35
*** crossfire/server/gods.c:1.34 Tue Nov 26 00:48:20 2002
--- crossfire/server/gods.c Thu Dec 12 21:09:49 2002
***************
*** 1,6 ****
/*
* static char *rcsid_gods_c =
! * "$Id: gods.c,v 1.34 2002/11/26 08:48:20 garbled Exp $";
*/
/*
--- 1,6 ----
/*
* static char *rcsid_gods_c =
! * "$Id: gods.c,v 1.35 2002/12/13 05:09:49 garbled Exp $";
*/
/*
***************
*** 542,548 ****
int tmp;
for (weapon = op->inv; weapon; weapon = weapon->below)
! if (weapon->type == WEAPON && QUERY_FLAG (weapon, FLAG_APPLIED))
break;
if (weapon == NULL || god_examines_item (god, weapon) <= 0)
return 0;
--- 542,549 ----
int tmp;
for (weapon = op->inv; weapon; weapon = weapon->below)
! if ((weapon->type == WEAPON || weapon->type == BOW)
! && QUERY_FLAG (weapon, FLAG_APPLIED))
break;
if (weapon == NULL || god_examines_item (god, weapon) <= 0)
return 0;
Index: crossfire/server/player.c
diff -c crossfire/server/player.c:1.109 crossfire/server/player.c:1.110
*** crossfire/server/player.c:1.109 Thu Dec 12 13:52:52 2002
--- crossfire/server/player.c Thu Dec 12 21:09:49 2002
***************
*** 1,6 ****
/*
* static char *rcsid_player_c =
! * "$Id: player.c,v 1.109 2002/12/12 21:52:52 garbled Exp $";
*/
/*
--- 1,6 ----
/*
* static char *rcsid_player_c =
! * "$Id: player.c,v 1.110 2002/12/13 05:09:49 garbled Exp $";
*/
/*
***************
*** 1361,1367 ****
SET_ANIMATION(arrow,dir);
arrow->stats.sp = arrow->stats.wc; /* save original wc and dam */
arrow->stats.hp = arrow->stats.dam;
! arrow->attacktype = arrow->stats.grace;
/* Note that this was different for monsters - they got their level
* added to the damage. I think the strength bonus is more proper.
*/
--- 1361,1369 ----
SET_ANIMATION(arrow,dir);
arrow->stats.sp = arrow->stats.wc; /* save original wc and dam */
arrow->stats.hp = arrow->stats.dam;
! arrow->stats.grace = arrow->attacktype;
! if (arrow->slaying != NULL)
! arrow->spellarg = strdup(arrow->slaying);
/* Note that this was different for monsters - they got their level
* added to the damage. I think the strength bonus is more proper.
*/
***************
*** 1375,1385 ****
--- 1377,1391 ----
bow->stats.wc;
arrow->level = SK_level (op);
arrow->attacktype |= bow->attacktype;
+ if (bow->slaying != NULL)
+ arrow->slaying = strdup(bow->slaying);
} else {
arrow->stats.wc= op->stats.wc - bow->magic - arrow->magic -
arrow->stats.wc;
arrow->level = op->level;
arrow->attacktype |= bow->attacktype;
+ if (bow->slaying != NULL)
+ arrow->slaying = strdup(bow->slaying);
}
arrow->map = op->map;
Index: crossfire/server/time.c
diff -c crossfire/server/time.c:1.45 crossfire/server/time.c:1.46
*** crossfire/server/time.c:1.45 Thu Dec 12 13:52:52 2002
--- crossfire/server/time.c Thu Dec 12 21:09:49 2002
***************
*** 1,6 ****
/*
* static char *rcsid_time_c =
! * "$Id: time.c,v 1.45 2002/12/12 21:52:52 garbled Exp $";
*/
/*
--- 1,6 ----
/*
* static char *rcsid_time_c =
! * "$Id: time.c,v 1.46 2002/12/13 05:09:49 garbled Exp $";
*/
/*
***************
*** 535,544 ****
--- 535,553 ----
op->stats.wc = op->stats.sp;
op->stats.dam= op->stats.hp;
op->attacktype = op->stats.grace;
+ if (op->slaying != NULL)
+ free(op->slaying);
+ if (op->spellarg != NULL) {
+ op->slaying = strdup(op->spellarg);
+ free(op->spellarg);
+ } else
+ op->slaying = NULL;
/* Reset these to zero, so that CAN_MERGE will work properly */
+ op->spellarg = NULL;
op->stats.sp = 0;
op->stats.hp = 0;
op->stats.grace = 0;
+ op->level = 0;
op->face=op->arch->clone.face;
op->owner=NULL; /* So that stopped arrows will be saved */
update_object (op,UP_OBJ_FACE);
|
|
From: <cro...@li...> - 2002-12-12 23:48:14
|
Module Name: crossfire
Committed By: garbled
Date: Thu Dec 12 23:48:11 UTC 2002
Modified Files:
crossfire/server: apply.c
Log Message:
Allow enchant weapon scrolls to be read against bows. Since bows and
swords can no longer be wielded together.. this isn't a problem anymore.
Start of context diffs
Index: crossfire/server/apply.c
diff -c crossfire/server/apply.c:1.71 crossfire/server/apply.c:1.72
*** crossfire/server/apply.c:1.71 Sat Nov 30 19:46:25 2002
--- crossfire/server/apply.c Thu Dec 12 15:48:10 2002
***************
*** 1,6 ****
/*
* static char *rcsid_apply_c =
! * "$Id: apply.c,v 1.71 2002/12/01 03:46:25 mwedel Exp $";
*/
/*
CrossFire, A Multiplayer game for X-windows
--- 1,6 ----
/*
* static char *rcsid_apply_c =
! * "$Id: apply.c,v 1.72 2002/12/12 23:48:10 garbled Exp $";
*/
/*
CrossFire, A Multiplayer game for X-windows
***************
*** 412,418 ****
*/
if (i<NROFATTACKS ||
weapon->stats.hp || /* regeneration */
! weapon->stats.sp || /* sp regeneration */
weapon->stats.exp || /* speed */
weapon->stats.ac) /* AC - only taifu's I think */
{
--- 412,418 ----
*/
if (i<NROFATTACKS ||
weapon->stats.hp || /* regeneration */
! (weapon->stats.sp && weapon->type == WEAPON) || /* sp regeneration */
weapon->stats.exp || /* speed */
weapon->stats.ac) /* AC - only taifu's I think */
{
***************
*** 574,581 ****
new_draw_info(NDI_UNIQUE, 0, op, "You need to mark a weapon object.");
return 0;
}
! if (otmp->type!=WEAPON) {
! new_draw_info(NDI_UNIQUE, 0,op,"Marked item is not a weapon");
return 0;
}
new_draw_info(NDI_UNIQUE, 0,op,"Applied weapon builder.");
--- 574,581 ----
new_draw_info(NDI_UNIQUE, 0, op, "You need to mark a weapon object.");
return 0;
}
! if (otmp->type != WEAPON && otmp->type != BOW) {
! new_draw_info(NDI_UNIQUE, 0,op,"Marked item is not a weapon or bow");
return 0;
}
new_draw_info(NDI_UNIQUE, 0,op,"Applied weapon builder.");
***************
*** 2946,2955 ****
SET_FLAG (who, FLAG_READY_SKILL);
break;
case WAND:
case ROD:
case HORN:
- case BOW:
/* check for skill, alter player status */
SET_FLAG(op, FLAG_APPLIED);
if(!check_skill_to_apply(who,op)) return 1;
--- 2946,2971 ----
SET_FLAG (who, FLAG_READY_SKILL);
break;
+ case BOW:
+ if (!check_weapon_power(who, op->last_eat)) {
+ new_draw_info(NDI_UNIQUE, 0, who,
+ "That item is too powerful for you to use.");
+ new_draw_info(NDI_UNIQUE, 0, who, "It would consume your soul!.");
+ if(tmp != NULL)
+ (void)insert_ob_in_ob(tmp,who);
+ return 1;
+ }
+ if( op->level && (strncmp(op->name,who->name,strlen(who->name)))) {
+ new_draw_info(NDI_UNIQUE, 0, who,
+ "The weapon does not recognize you as its owner.");
+ if(tmp != NULL)
+ (void)insert_ob_in_ob(tmp,who);
+ return 1;
+ }
+ /*FALLTHROUGH*/
case WAND:
case ROD:
case HORN:
/* check for skill, alter player status */
SET_FLAG(op, FLAG_APPLIED);
if(!check_skill_to_apply(who,op)) return 1;
***************
*** 2957,2962 ****
--- 2973,2979 ----
if(who->type==PLAYER) {
if (op->type == BOW) {
+ (void)change_abil(who, op);
new_draw_info_format (NDI_UNIQUE, 0, who,
"You will now fire %s with %s.",
op->race ? op->race : "nothing", query_name(op));
|