ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/server/swamp.C
Revision: 1.22
Committed: Sat Nov 17 23:40:04 2018 UTC (5 years, 5 months ago) by root
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Changes since 1.21: +1 -0 lines
Log Message:
copyright update 2018

File Contents

# Content
1 /*
2 * This file is part of Deliantra, the Roguelike Realtime MMORPG.
3 *
4 * Copyright (©) 2017,2018 Marc Alexander Lehmann / the Deliantra team
5 * Copyright (©) 2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016 Marc Alexander Lehmann / Robin Redeker / the Deliantra team
6 * Copyright (©) 2005 Mark Wedel & Crossfire Development Team
7 * Copyright (©) 1992 Frank Tore Johansen
8 *
9 * Deliantra is free software: you can redistribute it and/or modify it under
10 * the terms of the Affero GNU General Public License as published by the
11 * Free Software Foundation, either version 3 of the License, or (at your
12 * option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the Affero GNU General Public License
20 * and the GNU General Public License along with this program. If not, see
21 * <http://www.gnu.org/licenses/>.
22 *
23 * The authors can be reached via e-mail to <support@deliantra.net>
24 */
25
26 #include <global.h>
27 #ifndef __CEXTRACT__
28 # include <sproto.h>
29 #endif
30
31 /* Note this code is very specialized for swamps, in terms of the messages
32 * as well as handling of move types.
33 */
34
35 void
36 walk_on_deep_swamp (object *op, object *victim)
37 {
38 if (victim->type == PLAYER && victim->stats.hp >= 0 && !(victim->move_type & MOVE_FLYING))
39 {
40 new_draw_info_format (NDI_UNIQUE, 0, victim, "You are down to your knees in the %s.", &op->name);
41 op->stats.food = 1;
42 victim->speed_left -= op->move_slow_penalty;
43 }
44 }
45
46 void
47 move_deep_swamp (object *op)
48 {
49 object *above = op->above;
50 object *nabove;
51
52 while (above)
53 {
54 nabove = above->above;
55 if (above->type == PLAYER && !(above->move_type & MOVE_FLYING) && above->stats.hp >= 0 && !above->flag [FLAG_WIZ])
56 {
57 if (op->stats.food < 1)
58 {
59 LOG (llevDebug, "move_deep_swamp(): player is here, but state is " "%d\n", op->stats.food);
60 op->stats.food = 1;
61 }
62
63 switch (op->stats.food)
64 {
65 case 1:
66 if (rndm (0, 2) == 0)
67 {
68 new_draw_info_format (NDI_UNIQUE, 0, above, "You are down to your waist in the wet %s.", &op->name);
69 op->stats.food = 2;
70 above->speed_left -= op->move_slow_penalty;
71 }
72 break;
73
74 case 2:
75 if (rndm (0, 2) == 0)
76 {
77 new_draw_info_format (NDI_UNIQUE | NDI_RED, 0, above, "You are down to your NECK in the dangerous %s.", &op->name);
78 op->stats.food = 3;
79 above->contr->killer = op;
80 above->stats.hp--;
81 above->speed_left -= op->move_slow_penalty;
82 }
83 break;
84
85 case 3:
86 if (rndm (0, 4) == 0)
87 {
88 object *woodsman = find_obj_by_type_subtype (above, SKILL, SK_WOODSMAN);
89
90 /* player is ready to drown - only woodsman skill can save him */
91 if (!woodsman)
92 {
93 op->stats.food = 0;
94 new_draw_info_format (NDI_UNIQUE | NDI_ALL, 1, NULL, "%s disappeared into a %s.", &above->name, &op->name);
95 above->contr->killer = op;
96
97 above->stats.hp = -1;
98 kill_player (above); /* player dies in the swamp */
99 }
100 else
101 {
102 op->stats.food = 2;
103 new_draw_info_format (NDI_UNIQUE, 0, above,
104 "You almost drowned in the %s! You survived due to your woodsman skill.", &op->name);
105 }
106 }
107 break;
108 }
109 }
110 else if (!above->flag [FLAG_ALIVE] && !(above->move_type & MOVE_FLYING) &&
111 !(above->flag [FLAG_IS_FLOOR]) && !(above->flag [FLAG_OVERLAY_FLOOR]) && !(above->flag [FLAG_NO_PICK]))
112 {
113 if (rndm (0, 2) == 0)
114 above->decrease ();
115 }
116
117 above = nabove;
118 }
119 }