ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/server/swamp.c
Revision: 1.3
Committed: Sun Aug 13 17:16:05 2006 UTC (17 years, 9 months ago) by elmex
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Changes since 1.2: +0 -0 lines
State: FILE REMOVED
Log Message:
Made server compile with C++.
Removed cfanim plugin and crossedit.
C++ here we come.

File Contents

# Content
1 /*
2 * static char *rcsid_swamp_c =
3 * "$Id$";
4 */
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 new_draw_info_format(NDI_UNIQUE, 0, victim, "You are down to your knees in the %s.", op->name);
42 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 if (above->type == PLAYER && !(above->move_type & MOVE_FLYING) && above->stats.hp >= 0 && !QUERY_FLAG(above,FLAG_WIZ)) {
55 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 new_draw_info_format(NDI_UNIQUE, 0,above,
65 "You are down to your waist in the wet %s.", op->name);
66 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 new_draw_info_format(NDI_UNIQUE | NDI_RED, 0,above,
74 "You are down to your NECK in the dangerous %s.", op->name);
75 op->stats.food = 3;
76 sprintf(above->contr->killer,"drowning in a %s", op->name);
77 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 "%s disappeared into a %s.",above->name, op->name);
91 sprintf(above->contr->killer,"drowning in a %s", op->name);
92
93 above->stats.hp = -1;
94 kill_player(above); /* player dies in the swamp */
95 }
96 else {
97 op->stats.food = 2;
98 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 }
101 }
102 break;
103 }
104 } 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 if (rndm(0, 2) == 0) decrease_ob(above);
108 }
109 above = nabove;
110 }
111 }