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.101 by root, Mon Nov 9 18:47:55 2009 UTC vs.
Revision 1.106 by root, Sat Jan 30 23:30:26 2010 UTC

607 { 607 {
608 tmp = present_arch_in_ob (at, this); 608 tmp = present_arch_in_ob (at, this);
609 609
610 if (!tmp) 610 if (!tmp)
611 { 611 {
612 tmp = arch_to_object (at); 612 tmp = at->instance ();
613 tmp = insert_ob_in_ob (tmp, this); 613 tmp = insert_ob_in_ob (tmp, this);
614 SET_FLAG (tmp, FLAG_APPLIED); 614 SET_FLAG (tmp, FLAG_APPLIED);
615 } 615 }
616 } 616 }
617 617
637 if (!tmp) 637 if (!tmp)
638 { 638 {
639 if (!value) 639 if (!value)
640 return; 640 return;
641 641
642 tmp = arch_to_object (at); 642 tmp = at->instance ();
643 tmp = insert_ob_in_ob (tmp, this); 643 tmp = insert_ob_in_ob (tmp, this);
644 SET_FLAG (tmp, FLAG_APPLIED); 644 SET_FLAG (tmp, FLAG_APPLIED);
645 } 645 }
646 646
647 if (value) 647 if (value)
767 int stat_sum [NUM_STATS]; 767 int stat_sum [NUM_STATS];
768 768
769 /* First task is to clear all the values back to their original values */ 769 /* First task is to clear all the values back to their original values */
770 if (type == PLAYER) 770 if (type == PLAYER)
771 { 771 {
772 contr->delayed_update = false;
773
772 for (int i = 0; i < NUM_STATS; i++) 774 for (int i = 0; i < NUM_STATS; i++)
773 stat_sum [i] = contr->orig_stats.stat (i); 775 stat_sum [i] = contr->orig_stats.stat (i);
774 776
775 if (settings.spell_encumbrance == TRUE) 777 if (settings.spell_encumbrance == TRUE)
776 contr->encumbrance = 0; 778 contr->encumbrance = 0;
909 && !tmp->flag [FLAG_CURSED] 911 && !tmp->flag [FLAG_CURSED]
910 && !tmp->flag [FLAG_DAMNED]) 912 && !tmp->flag [FLAG_DAMNED])
911 continue; 913 continue;
912 914
913 for (int i = 0; i < NUM_STATS; i++) 915 for (int i = 0; i < NUM_STATS; i++)
914 stat_sum [i] = stat_sum [i] + tmp->stats.stat (i); 916 stat_sum [i] += tmp->stats.stat (i);
915 917
916 if (digest_types [tmp->type]) 918 if (digest_types [tmp->type])
917 { 919 {
918 contr->digestion += tmp->stats.food; 920 contr->digestion += tmp->stats.food;
919 contr->gen_hp += tmp->stats.hp; 921 contr->gen_hp += tmp->stats.hp;
1172 1174
1173 if (type == PLAYER) 1175 if (type == PLAYER)
1174 { 1176 {
1175 // clamp various player stats 1177 // clamp various player stats
1176 for (int i = 0; i < NUM_STATS; ++i) 1178 for (int i = 0; i < NUM_STATS; ++i)
1177 stats.stat (i) = clamp (stat_sum [i], MIN_STAT, MAX_STAT); 1179 stats.stat (i) = stat_sum [i];
1180
1181 check_stat_bounds (&stats);
1178 1182
1179 contr->digestion = clamp (contr->digestion, MIN_DIGESTION, MAX_DIGESTION); 1183 contr->digestion = clamp (contr->digestion, MIN_DIGESTION, MAX_DIGESTION);
1180 1184
1181 /* Figure out the players sp/mana/hp totals. */ 1185 /* Figure out the players sp/mana/hp totals. */
1182 int pl_level; 1186 int pl_level;
1183 1187
1184 check_stat_bounds (&(stats));
1185 pl_level = level;
1186
1187 if (pl_level < 1)
1188 pl_level = 1; /* safety, we should always get 1 levels worth of hp! */ 1188 pl_level = max (1, level); /* safety, we should always get 1 levels worth of hp! */
1189 1189
1190 /* You basically get half a con bonus/level. But we do take into account rounding, 1190 /* You basically get half a con bonus/level. But we do take into account rounding,
1191 * so if your bonus is 7, you still get 7 worth of bonus every 2 levels. 1191 * so if your bonus is 7, you still get 7 worth of bonus every 2 levels.
1192 */ 1192 */
1193 stats.maxhp = 0; 1193 stats.maxhp = 0;
1356 speed *= speed_reduce_from_disease; 1356 speed *= speed_reduce_from_disease;
1357 1357
1358 /* Put a lower limit on speed. Note with this speed, you move once every 1358 /* Put a lower limit on speed. Note with this speed, you move once every
1359 * 25 ticks or so. This amounts to once every 3 seconds of realtime. 1359 * 25 ticks or so. This amounts to once every 3 seconds of realtime.
1360 */ 1360 */
1361 if (speed < 0.04f && type == PLAYER) 1361 max_it (speed, is_player () ? MIN_PLAYER_SPEED : MIN_ACTIVE_SPEED);
1362 speed = 0.04f;
1363 1362
1364 if (speed != old_speed) 1363 if (speed != old_speed)
1365 set_speed (speed); 1364 set_speed (speed);
1366 1365
1367 if (type == PLAYER) 1366 if (type == PLAYER)
1606 { 1605 {
1607 changed = true; 1606 changed = true;
1608 1607
1609 op->level++; 1608 op->level++;
1610 1609
1611 if (op && op == who && op->stats.exp > 1 && is_dragon_pl (who)) 1610 if (op && op == who && op->stats.exp > 1 && who->is_dragon ())
1612 dragon_level_gain (who); 1611 dragon_level_gain (who);
1613 1612
1614 /* Only roll these if it is the player (who) that gained the level */ 1613 /* Only roll these if it is the player (who) that gained the level */
1615 if (op == who && (who->level < 11) && who->type == PLAYER) 1614 if (op == who && (who->level < 11) && who->type == PLAYER)
1616 { 1615 {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines