ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/common/living.C
(Generate patch)

Comparing deliantra/server/common/living.C (file contents):
Revision 1.23 by pippijn, Wed Jan 3 00:21:35 2007 UTC vs.
Revision 1.31 by root, Thu Jan 18 19:42:09 2007 UTC

1/* 1/*
2 CrossFire, A Multiplayer game for X-windows 2 * CrossFire, A Multiplayer game for X-windows
3 3 *
4 * Copyright (C) 2005, 2006, 2007 Marc Lehmann & Crossfire+ Development Team
4 Copyright (C) 2002 Mark Wedel & Crossfire Development Team 5 * Copyright (C) 2002 Mark Wedel & Crossfire Development Team
5 Copyright (C) 1992 Frank Tore Johansen 6 * Copyright (C) 1992 Frank Tore Johansen
6 7 *
7 This program is free software; you can redistribute it and/or modify 8 * This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by 9 * it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or 10 * the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version. 11 * (at your option) any later version.
11 12 *
12 This program is distributed in the hope that it will be useful, 13 * This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details. 16 * GNU General Public License for more details.
16 17 *
17 You should have received a copy of the GNU General Public License 18 * You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software 19 * along with this program; if not, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 20 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 21 *
21 The authors can be reached via e-mail at <crossfire@schmorp.de> 22 * The authors can be reached via e-mail at <crossfire@schmorp.de>
22*/ 23 */
23 24
24#include <global.h> 25#include <global.h>
25#include <funcpoint.h> 26#include <funcpoint.h>
26 27
27/* Handy little macro that adds exp and keeps it within bounds. Since 28/* Handy little macro that adds exp and keeps it within bounds. Since
191static const char *const drain_msg[NUM_STATS] = { 192static const char *const drain_msg[NUM_STATS] = {
192 "Oh no! You are weakened!", 193 "Oh no! You are weakened!",
193 "You're feeling clumsy!", 194 "You're feeling clumsy!",
194 "You feel less healthy", 195 "You feel less healthy",
195 "You suddenly begin to lose your memory!", 196 "You suddenly begin to lose your memory!",
197 "Watch out, your mind is going!",
198 "Your spirit feels drained!",
196 "Your face gets distorted!", 199 "Your face gets distorted!",
197 "Watch out, your mind is going!",
198 "Your spirit feels drained!"
199}; 200};
200const char *const restore_msg[NUM_STATS] = { 201const char *const restore_msg[NUM_STATS] = {
201 "You feel your strength return.", 202 "You feel your strength return.",
202 "You feel your agility return.", 203 "You feel your agility return.",
203 "You feel your health return.", 204 "You feel your health return.",
205 "You feel your memory return.",
204 "You feel your wisdom return.", 206 "You feel your wisdom return.",
207 "You feel your spirits return.",
205 "You feel your charisma return.", 208 "You feel your charisma return.",
206 "You feel your memory return.",
207 "You feel your spirits return."
208}; 209};
209const char *const gain_msg[NUM_STATS] = { 210const char *const gain_msg[NUM_STATS] = {
210 "You feel stronger.", 211 "You feel stronger.",
211 "You feel more agile.", 212 "You feel more agile.",
212 "You feel healthy.", 213 "You feel healthy.",
214 "You feel smarter.",
213 "You feel wiser.", 215 "You feel wiser.",
216 "You feel more potent.",
214 "You seem to look better.", 217 "You seem to look better.",
215 "You feel smarter.",
216 "You feel more potent."
217}; 218};
218const char *const lose_msg[NUM_STATS] = { 219const char *const lose_msg[NUM_STATS] = {
219 "You feel weaker!", 220 "You feel weaker!",
220 "You feel clumsy!", 221 "You feel clumsy!",
221 "You feel less healthy!", 222 "You feel less healthy!",
223 "You feel stupid!",
222 "You lose some of your memory!", 224 "You lose some of your memory!",
225 "You feel less potent!",
223 "You look ugly!", 226 "You look ugly!",
224 "You feel stupid!",
225 "You feel less potent!"
226}; 227};
227 228
228const char *const statname[NUM_STATS] = { 229const char *const statname[NUM_STATS] = {
229 "strength", "dexterity", "constitution", "intelligence", "wisdom", "power", "charisma" 230 "strength", "dexterity", "constitution", "intelligence", "wisdom", "power", "charisma"
230}; 231};
754 return; 755 return;
755 756
756 /* Randomly change the players luck. Basically, we move it 757 /* Randomly change the players luck. Basically, we move it
757 * back neutral (if greater>0, subtract, otherwise add) 758 * back neutral (if greater>0, subtract, otherwise add)
758 */ 759 */
759 if (RANDOM () % (FABS (tmp->stats.luck)) >= RANDOM () % 30) 760 if (RANDOM () % (FABS (tmp->stats.luck)) >= rndm (30))
760 { 761 {
761 int diff = tmp->stats.luck > 0 ? -1 : 1; 762 int diff = tmp->stats.luck > 0 ? -1 : 1;
762 763
763 stats.luck += diff; 764 stats.luck += diff;
764 tmp->stats.luck += diff; 765 tmp->stats.luck += diff;
832 float f, max = 9, added_speed = 0, bonus_speed = 0, sp_tmp, speed_reduce_from_disease = 1; 833 float f, max = 9, added_speed = 0, bonus_speed = 0, sp_tmp, speed_reduce_from_disease = 1;
833 int weapon_weight = 0, weapon_speed = 0; 834 int weapon_weight = 0, weapon_speed = 0;
834 int best_wc = 0, best_ac = 0, wc = 0, ac = 0; 835 int best_wc = 0, best_ac = 0, wc = 0, ac = 0;
835 int prot[NROFATTACKS], vuln[NROFATTACKS], potion_resist[NROFATTACKS]; 836 int prot[NROFATTACKS], vuln[NROFATTACKS], potion_resist[NROFATTACKS];
836 object *grace_obj = NULL, *mana_obj = NULL, *wc_obj = NULL, *tmp; 837 object *grace_obj = NULL, *mana_obj = NULL, *wc_obj = NULL, *tmp;
838 float old_speed = speed;
837 839
838 /* First task is to clear all the values back to their original values */ 840 /* First task is to clear all the values back to their original values */
839 if (type == PLAYER) 841 if (type == PLAYER)
840 { 842 {
841 for (i = 0; i < NUM_STATS; i++) 843 for (i = 0; i < NUM_STATS; i++)
1502 if (move_type == 0) 1504 if (move_type == 0)
1503 move_type = MOVE_WALK; 1505 move_type = MOVE_WALK;
1504 else if (move_type & (MOVE_FLY_LOW | MOVE_FLY_HIGH)) 1506 else if (move_type & (MOVE_FLY_LOW | MOVE_FLY_HIGH))
1505 move_type &= ~MOVE_WALK; 1507 move_type &= ~MOVE_WALK;
1506 1508
1509 if (speed != old_speed)
1507 set_speed (speed); 1510 set_speed (speed);
1508 1511
1509 /* It is quite possible that a player's spell costing might have changed, 1512 /* It is quite possible that a player's spell costing might have changed,
1510 * so we will check that now. 1513 * so we will check that now.
1511 */ 1514 */
1512 if (type == PLAYER) 1515 if (type == PLAYER)
1606 object *skin = NULL; /* pointer to dragon skin force */ 1609 object *skin = NULL; /* pointer to dragon skin force */
1607 object *tmp = NULL; /* tmp. object */ 1610 object *tmp = NULL; /* tmp. object */
1608 char buf[MAX_BUF]; /* tmp. string buffer */ 1611 char buf[MAX_BUF]; /* tmp. string buffer */
1609 1612
1610 /* now grab the 'dragon_ability'-forces from the player's inventory */ 1613 /* now grab the 'dragon_ability'-forces from the player's inventory */
1614 shstr_cmp dragon_ability_force ("dragon_ability_force");
1615 shstr_cmp dragon_skin_force ("dragon_skin_force");
1616
1611 for (tmp = who->inv; tmp != NULL; tmp = tmp->below) 1617 for (tmp = who->inv; tmp; tmp = tmp->below)
1612 {
1613 if (tmp->type == FORCE) 1618 if (tmp->type == FORCE)
1614 {
1615 if (strcmp (tmp->arch->name, "dragon_ability_force") == 0) 1619 if (tmp->arch->name == dragon_ability_force)
1616 abil = tmp; 1620 abil = tmp;
1617 if (strcmp (tmp->arch->name, "dragon_skin_force") == 0) 1621 else if (tmp->arch->name == dragon_skin_force)
1618 skin = tmp; 1622 skin = tmp;
1619 } 1623
1620 }
1621 /* if the force is missing -> bail out */ 1624 /* if the force is missing -> bail out */
1622 if (abil == NULL) 1625 if (abil == NULL)
1623 return; 1626 return;
1624 1627
1625 /* The ability_force keeps track of maximum level ever achieved. 1628 /* The ability_force keeps track of maximum level ever achieved.
1676 */ 1679 */
1677 CLEAR_FLAG (skill_obj, FLAG_CAN_USE_SKILL); 1680 CLEAR_FLAG (skill_obj, FLAG_CAN_USE_SKILL);
1678 skill_obj->stats.exp = 0; 1681 skill_obj->stats.exp = 0;
1679 skill_obj->level = 1; 1682 skill_obj->level = 1;
1680 insert_ob_in_ob (skill_obj, op); 1683 insert_ob_in_ob (skill_obj, op);
1684
1681 if (op->contr) 1685 if (op->contr)
1682 { 1686 {
1683 op->contr->last_skill_ob[skill_obj->subtype] = skill_obj; 1687 op->contr->last_skill_ob [skill_obj->subtype] = skill_obj;
1684 op->contr->last_skill_exp[skill_obj->subtype] = -1; 1688 if (op->contr->ns)
1689 op->contr->ns->last_skill_exp[skill_obj->subtype] = -1;//TODO: should be made superfluous
1685 } 1690 }
1691
1686 return skill_obj; 1692 return skill_obj;
1687} 1693}
1688 1694
1689 1695
1690/* player_lvl_adj() - for the new exp system. we are concerned with 1696/* player_lvl_adj() - for the new exp system. we are concerned with

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines