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

Comparing deliantra/server/server/disease.C (file contents):
Revision 1.55 by root, Fri Nov 6 13:03:34 2009 UTC vs.
Revision 1.60 by root, Sun Nov 29 17:41:08 2009 UTC

157 { 157 {
158 walk->level = disease->level; 158 walk->level = disease->level;
159 return 1; /* just update the existing immunity. */ 159 return 1; /* just update the existing immunity. */
160 } 160 }
161 161
162 immunity = get_archetype ("immunity"); 162 immunity = get_archetype (shstr_immunity);
163 163
164 immunity->name = disease->name; 164 immunity->name = disease->name;
165 immunity->level = disease->level; 165 immunity->level = disease->level;
166 immunity->move_block = 0; 166 immunity->move_block = 0;
167 167
292 for (tmp = victim->head_ ()->inv; tmp; tmp = tmp->below) 292 for (tmp = victim->head_ ()->inv; tmp; tmp = tmp->below)
293 if (tmp->type == SIGN) /* possibly an immunity, or diseased */ 293 if (tmp->type == SIGN) /* possibly an immunity, or diseased */
294 if (tmp->name == disease->name && tmp->level >= disease->level) 294 if (tmp->name == disease->name && tmp->level >= disease->level)
295 return 0; /* Immune! */ 295 return 0; /* Immune! */
296 296
297 object *new_symptom = get_archetype ("symptom"); 297 object *new_symptom = get_archetype (shstr_symptom);
298 298
299 /* Something special done with dam. We want diseases to be more 299 /* Something special done with dam. We want diseases to be more
300 * random in what they'll kill, so we'll make the damage they 300 * random in what they'll kill, so we'll make the damage they
301 * do random, note, this has a weird effect with progressive diseases. 301 * do random, note, this has a weird effect with progressive diseases.
302 */ 302 */
514/* make the symptom do the nasty things it does */ 514/* make the symptom do the nasty things it does */
515int 515int
516move_symptom (object *symptom) 516move_symptom (object *symptom)
517{ 517{
518 object *victim = symptom->env; 518 object *victim = symptom->env;
519 object *new_ob;
520 int sp_reduce;
521 519
522 if (!victim || !victim->map) 520 if (!victim || !victim->map)
523 { /* outside a monster/player, die immediately */ 521 { /* outside a monster/player, die immediately */
524 symptom->destroy (); 522 symptom->destroy ();
525 return 0; 523 return 0;
526 } 524 }
527
528 if (symptom->stats.dam > 0)
529 hit_player (victim, symptom->stats.dam, symptom, symptom->attacktype, 1);
530 else
531 hit_player (victim, max (1, -victim->stats.maxhp * symptom->stats.dam / 100), symptom, symptom->attacktype, 1);
532
533 if (symptom->stats.maxsp > 0)
534 sp_reduce = symptom->stats.maxsp;
535 else
536 sp_reduce = max (1, victim->stats.maxsp * symptom->stats.maxsp / 100);
537
538 victim->stats.sp = max (0, victim->stats.sp - sp_reduce);
539 525
540 /* create the symptom "other arch" object and drop it here 526 /* create the symptom "other arch" object and drop it here
541 * under every part of the monster 527 * under every part of the monster
542 * The victim may well have died. 528 * The victim may well have died.
543 */ 529 */
546 victim->play_sound (symptom->sound); 532 victim->play_sound (symptom->sound);
547 533
548 if (symptom->other_arch) 534 if (symptom->other_arch)
549 for (object *tmp = victim->head_ (); tmp; tmp = tmp->more) 535 for (object *tmp = victim->head_ (); tmp; tmp = tmp->more)
550 { 536 {
551 new_ob = arch_to_object (symptom->other_arch); 537 object *new_ob = symptom->other_arch->instance ();
552 new_ob->x = tmp->x; 538 new_ob->x = tmp->x;
553 new_ob->y = tmp->y; 539 new_ob->y = tmp->y;
554 new_ob->map = victim->map; 540 new_ob->map = victim->map;
555 insert_ob_in_map (new_ob, victim->map, victim, 0); 541 insert_ob_in_map (new_ob, victim->map, victim, 0);
556 } 542 }
557 } 543 }
558 544
545 int damage =
546 symptom->stats.dam > 0
547 ? symptom->stats.dam
548 : max (1, victim->stats.maxhp * -symptom->stats.dam / 100);
549
550 hit_player (victim, damage, symptom, symptom->attacktype, 1);
551
552 int sp_reduce =
553 symptom->stats.maxsp > 0
554 ? symptom->stats.maxsp
555 : max (1, victim->stats.maxsp * -symptom->stats.maxsp / 100);
556
557 victim->stats.sp = max (0, victim->stats.sp - sp_reduce);
558
559 new_draw_info (NDI_UNIQUE | NDI_RED, 0, victim, symptom->msg); 559 new_draw_info (NDI_UNIQUE | NDI_RED, 0, victim, symptom->msg);
560 560
561 return 1; 561 return 1;
562} 562}
563 563
570 for (object *disease = hitter->inv; disease; disease = disease->below) 570 for (object *disease = hitter->inv; disease; disease = disease->below)
571 if (disease->type == DISEASE) 571 if (disease->type == DISEASE)
572 infect_object (victim, disease, 0); 572 infect_object (victim, disease, 0);
573 573
574 return 1; 574 return 1;
575}
576
577// find a disease in someone
578static object *
579find_disease (object *victim)
580{
581 for (object *disease = victim->inv; disease; disease = disease->below)
582 if (disease->type == DISEASE)
583 return disease;
584
585 return 0;
586} 575}
587 576
588/* do the cure disease stuff, from the spell "cure disease" */ 577/* do the cure disease stuff, from the spell "cure disease" */
589int 578int
590cure_disease (object *sufferer, object *caster, object *spell) 579cure_disease (object *sufferer, object *caster, object *spell)
628 } 617 }
629 618
630 return 1; 619 return 1;
631} 620}
632 621
622#if 0 // unused, but seems interesting
633/* reduces disease progression: reduce_symptoms 623/* reduces disease progression: reduce_symptoms
634 * return true if we actually reduce a disease. 624 * return true if we actually reduce a disease.
635 */ 625 */
636static int 626static int
637reduce_symptoms (object *sufferer, int reduction) 627reduce_symptoms (object *sufferer, int reduction)
657 if (success) 647 if (success)
658 new_draw_info (NDI_UNIQUE, 0, sufferer, "Your illness seems less severe."); 648 new_draw_info (NDI_UNIQUE, 0, sufferer, "Your illness seems less severe.");
659 649
660 return success; 650 return success;
661} 651}
652#endif

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines