--- deliantra/server/common/living.C 2007/08/07 22:36:18 1.75
+++ deliantra/server/common/living.C 2007/11/10 03:40:17 1.81
@@ -1,11 +1,11 @@
/*
- * This file is part of Crossfire TRT, the Roguelike Realtime MORPG.
+ * This file is part of Deliantra, the Roguelike Realtime MMORPG.
*
- * Copyright (©) 2005,2006,2007 Marc Alexander Lehmann / Robin Redeker / the Crossfire TRT team
+ * Copyright (©) 2005,2006,2007 Marc Alexander Lehmann / Robin Redeker / the Deliantra team
* Copyright (©) 2002,2007 Mark Wedel & Crossfire Development Team
* Copyright (©) 1992,2007 Frank Tore Johansen
*
- * Crossfire TRT is free software: you can redistribute it and/or modify
+ * Deliantra 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 3 of the License, or
* (at your option) any later version.
@@ -18,7 +18,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*
- * The authors can be reached via e-mail to
+ * The authors can be reached via e-mail to
*/
#include
@@ -916,8 +916,7 @@
continue;
for (int i = 0; i < NUM_STATS; i++)
- if (expect_false (tmp->stats.stat (i)))
- stat_sum [i] = clamp (stat_sum [i] + tmp->stats.stat (i), MIN_STAT, MAX_STAT);
+ stat_sum [i] = stat_sum [i] + tmp->stats.stat (i);
if (digest_types [tmp->type])
{
@@ -940,12 +939,8 @@
slot[i].used += tmp->slot[i].info;
if (tmp->type == SYMPTOM)
- {
- speed_reduce_from_disease = tmp->last_sp / 100.f;
-
- if (speed_reduce_from_disease == 0)
- speed_reduce_from_disease = 1;
- }
+ speed_reduce_from_disease =
+ min (speed_reduce_from_disease, tmp->last_sp ? tmp->last_sp / 100.f : 1.f);
/* Pos. and neg. protections are counted seperate (-> pro/vuln).
* (Negative protections are calculated exactly like positive.)
@@ -1357,20 +1352,22 @@
* weight limit, then player suffers a speed reduction based on how
* much above he is, and what is max carry is
*/
- f = (carrying / 1000) - max_carry[stats.Str];
- if (f > 0)
+ float f = (carrying / 1000) - max_carry[stats.Str];
+ if (f > 0.f)
speed = speed / (1.f + f / max_carry[stats.Str]);
}
speed += bonus_speed / 10.f; /* Not affected by limits */
+ speed *= speed_reduce_from_disease;
/* Put a lower limit on speed. Note with this speed, you move once every
- * 100 ticks or so. This amounts to once every 12 seconds of realtime.
+ * 25 ticks or so. This amounts to once every 3 seconds of realtime.
*/
- speed = speed * speed_reduce_from_disease;
+ if (speed < 0.04f && type == PLAYER)
+ speed = 0.04f;
- if (speed < 0.01f && type == PLAYER)
- speed = 0.01f;
+ if (speed != old_speed)
+ set_speed (speed);
if (type == PLAYER)
{
@@ -1412,9 +1409,6 @@
else if (move_type & (MOVE_FLY_LOW | MOVE_FLY_HIGH))
move_type &= ~MOVE_WALK;
- if (speed != old_speed)
- set_speed (speed);
-
/* It is quite possible that a player's spell costing might have changed,
* so we will check that now.
*/
@@ -1484,10 +1478,10 @@
if (atnr_is_dragon_enabled (abil->stats.exp) && abil->resist[abil->stats.exp] >= level)
atnr = abil->stats.exp;
- level = (int) (level / 5.);
+ level = (int) (level / 25.);
/* now set the new title */
- if (pl->contr != NULL)
+ if (pl->contr)
{
if (level == 0)
sprintf (pl->contr->title, "%s hatchling", attacks[atnr]);