ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/server/swamp.c
Revision: 1.2
Committed: Sun Apr 23 02:36:47 2006 UTC (18 years, 1 month ago) by pippijn
Content type: text/plain
Branch: MAIN
CVS Tags: LAST_C_VERSION, difficulty_fix_merge_060810_2300
Branch point for: difficulty_fix
Changes since 1.1: +15 -13 lines
Log Message:
Patching swamp code with patch from Crossfire upstream to say "you are up to you neck in wet <name of tile you are sinking in>" instead of "sinking in swamp"

File Contents

# User Rev Content
1 root 1.1 /*
2     * static char *rcsid_swamp_c =
3 pippijn 1.2 * "$Id$";
4 root 1.1 */
5    
6     /*
7     CrossFire, A Multiplayer game for X-windows
8    
9     Copyright (C) 2005 Mark Wedel & Crossfire Development Team
10     Copyright (C) 1992 Frank Tore Johansen
11    
12     This program is free software; you can redistribute it and/or modify
13     it under the terms of the GNU General Public License as published by
14     the Free Software Foundation; either version 2 of the License, or
15     (at your option) any later version.
16    
17     This program is distributed in the hope that it will be useful,
18     but WITHOUT ANY WARRANTY; without even the implied warranty of
19     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20     GNU General Public License for more details.
21    
22     You should have received a copy of the GNU General Public License
23     along with this program; if not, write to the Free Software
24     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25    
26     The authors can be reached via e-mail at crossfire-devel@real-time.com
27     */
28    
29     #include <global.h>
30     #ifndef __CEXTRACT__
31     #include <sproto.h>
32     #endif
33    
34     /* Note this code is very specialized for swamps, in terms of the messages
35     * as well as handling of move types.
36     */
37    
38     void walk_on_deep_swamp (object *op, object *victim)
39     {
40     if (victim->type == PLAYER && victim->stats.hp >= 0 && !(victim->move_type & MOVE_FLYING)) {
41 pippijn 1.2 new_draw_info_format(NDI_UNIQUE, 0, victim, "You are down to your knees in the %s.", op->name);
42 root 1.1 op->stats.food = 1;
43     victim->speed_left -= op->move_slow_penalty;
44     }
45     }
46    
47     void move_deep_swamp (object *op)
48     {
49     object *above = op->above;
50     object *nabove;
51    
52     while(above) {
53     nabove = above->above;
54 pippijn 1.2 if (above->type == PLAYER && !(above->move_type & MOVE_FLYING) && above->stats.hp >= 0 && !QUERY_FLAG(above,FLAG_WIZ)) {
55 root 1.1 if (op->stats.food < 1) {
56     LOG (llevDebug, "move_deep_swamp(): player is here, but state is "
57     "%d\n", op->stats.food);
58     op->stats.food = 1;
59     }
60    
61     switch(op->stats.food) {
62     case 1:
63     if (rndm(0, 2) == 0) {
64 pippijn 1.2 new_draw_info_format(NDI_UNIQUE, 0,above,
65     "You are down to your waist in the wet %s.", op->name);
66 root 1.1 op->stats.food = 2;
67     above->speed_left -= op->move_slow_penalty;
68     }
69     break;
70    
71     case 2:
72     if (rndm(0, 2) == 0) {
73 pippijn 1.2 new_draw_info_format(NDI_UNIQUE | NDI_RED, 0,above,
74     "You are down to your NECK in the dangerous %s.", op->name);
75 root 1.1 op->stats.food = 3;
76 pippijn 1.2 sprintf(above->contr->killer,"drowning in a %s", op->name);
77 root 1.1 above->stats.hp--;
78     above->speed_left -= op->move_slow_penalty;
79     }
80     break;
81    
82     case 3:
83     if (rndm(0, 4) == 0) {
84     object *woodsman = find_obj_by_type_subtype(above, SKILL, SK_WOODSMAN);
85    
86     /* player is ready to drown - only woodsman skill can save him */
87     if (!woodsman) {
88     op->stats.food = 0;
89     new_draw_info_format(NDI_UNIQUE | NDI_ALL, 1, NULL,
90 pippijn 1.2 "%s disappeared into a %s.",above->name, op->name);
91     sprintf(above->contr->killer,"drowning in a %s", op->name);
92 root 1.1
93     above->stats.hp = -1;
94     kill_player(above); /* player dies in the swamp */
95     }
96     else {
97     op->stats.food = 2;
98 pippijn 1.2 new_draw_info_format(NDI_UNIQUE, 0,above,
99     "You almost drowned in the %s! You survived due to your woodsman skill.", op->name);
100 root 1.1 }
101     }
102     break;
103     }
104 pippijn 1.2 } else if (!QUERY_FLAG(above, FLAG_ALIVE) && !(above->move_type & MOVE_FLYING) &&
105     !(QUERY_FLAG(above,FLAG_IS_FLOOR)) && !(QUERY_FLAG(above,FLAG_OVERLAY_FLOOR)) &&
106     !(QUERY_FLAG(above, FLAG_NO_PICK))) {
107 root 1.1 if (rndm(0, 2) == 0) decrease_ob(above);
108     }
109     above = nabove;
110     }
111     }