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

Comparing deliantra/server/server/alchemy.C (file contents):
Revision 1.4 by root, Tue Aug 29 08:01:37 2006 UTC vs.
Revision 1.5 by root, Sun Sep 3 00:18:42 2006 UTC

1/* 1/*
2 * static char *rcsid_alchemy_c = 2 * static char *rcsid_alchemy_c =
3 * "$Id: alchemy.C,v 1.4 2006/08/29 08:01:37 root Exp $"; 3 * "$Id: alchemy.C,v 1.5 2006/09/03 00:18:42 root Exp $";
4 */ 4 */
5 5
6/* 6/*
7 CrossFire, A Multiplayer game for X-windows 7 CrossFire, A Multiplayer game for X-windows
8 8
224 224
225 while(tmp) { 225 while(tmp) {
226 tval=0; 226 tval=0;
227 strcpy(name, tmp->name); 227 strcpy(name, tmp->name);
228 if (tmp->title) 228 if (tmp->title)
229 sprintf(name, "%s %s", tmp->name, tmp->title); 229 sprintf (name, "%s %s", &tmp->name, &tmp->title);
230 tval = (strtoint(name) * (tmp->nrof?tmp->nrof:1)); 230 tval = (strtoint(name) * (tmp->nrof?tmp->nrof:1));
231#ifdef ALCHEMY_DEBUG 231#ifdef ALCHEMY_DEBUG
232 LOG(llevDebug,"Got ingredient %d %s(%d)\n", tmp->nrof?tmp->nrof:1, 232 LOG(llevDebug,"Got ingredient %d %s(%d)\n", tmp->nrof?tmp->nrof:1,
233 name, tval); 233 name, tval);
234#endif 234#endif
315 /* adj lvl, nrof on caster level */ 315 /* adj lvl, nrof on caster level */
316 adjust_product(item, ability, rp->yield?(rp->yield*batches):batches); 316 adjust_product(item, ability, rp->yield?(rp->yield*batches):batches);
317 if(!item->env && (item=insert_ob_in_ob(item,cauldron)) == NULL) { 317 if(!item->env && (item=insert_ob_in_ob(item,cauldron)) == NULL) {
318 new_draw_info(NDI_UNIQUE, 0,caster,"Nothing happened."); 318 new_draw_info(NDI_UNIQUE, 0,caster,"Nothing happened.");
319 /* new_draw_info_format(NDI_UNIQUE, 0,caster, 319 /* new_draw_info_format(NDI_UNIQUE, 0,caster,
320 "Your spell causes the %s to explode!",cauldron->name); */ 320 "Your spell causes the %s to explode!",&cauldron->name); */
321 /* kaboom_cauldron(); */ 321 /* kaboom_cauldron(); */
322 } else { 322 } else {
323 new_draw_info_format(NDI_UNIQUE, 0,caster, 323 new_draw_info_format(NDI_UNIQUE, 0,caster,
324 "The %s %s.",cauldron->name,cauldron_sound()); 324 "The %s %s.", &cauldron->name,cauldron_sound());
325 } 325 }
326 } 326 }
327 return item; 327 return item;
328} 328}
329 329
477 } 477 }
478 tmp = get_archetype("rock"); 478 tmp = get_archetype("rock");
479 tmp->weight=weight; 479 tmp->weight=weight;
480 tmp->value=0; 480 tmp->value=0;
481 tmp->material=material; 481 tmp->material=material;
482 tmp->materialname = add_string("stone"); 482 tmp->materialname = "stone";
483 free_string(tmp->name);
484 tmp->name=add_string("slag"); 483 tmp->name="slag";
485 if (tmp->name_pl) free_string(tmp->name_pl);
486 tmp->name_pl=add_string("slags"); 484 tmp->name_pl="slags";
487 item=insert_ob_in_ob(tmp,cauldron); 485 item=insert_ob_in_ob(tmp,cauldron);
488 CLEAR_FLAG(tmp,FLAG_CAN_ROLL); 486 CLEAR_FLAG(tmp,FLAG_CAN_ROLL);
489 CLEAR_FLAG(tmp,FLAG_NO_PICK); 487 CLEAR_FLAG(tmp,FLAG_NO_PICK);
490 tmp->move_block = 0; 488 tmp->move_block = 0;
491 } 489 }
492 remove_contents(cauldron->inv,item); 490 remove_contents(cauldron->inv,item);
493 new_draw_info_format(NDI_UNIQUE,0,op, 491 new_draw_info_format(NDI_UNIQUE,0,op,
494 "The %s %s.",cauldron->name,cauldron_sound()); 492 "The %s %s.", &cauldron->name,cauldron_sound());
495 return; 493 return;
496 } else if (level< 40) { /* MAKE TAINTED ITEM */ 494 } else if (level< 40) { /* MAKE TAINTED ITEM */
497 object *tmp=NULL; 495 object *tmp=NULL;
498 496
499 if (!rp) 497 if (!rp)
545 case 0: 543 case 0:
546 tmp=get_archetype("bomb"); 544 tmp=get_archetype("bomb");
547 tmp->stats.dam=random_roll(1, level, op, PREFER_LOW); 545 tmp->stats.dam=random_roll(1, level, op, PREFER_LOW);
548 tmp->stats.hp=random_roll(1, level, op, PREFER_LOW); 546 tmp->stats.hp=random_roll(1, level, op, PREFER_LOW);
549 new_draw_info_format(NDI_UNIQUE,0,op,"The %s creates a bomb!", 547 new_draw_info_format(NDI_UNIQUE,0,op,"The %s creates a bomb!",
550 cauldron->name); 548 &cauldron->name);
551 break; 549 break;
552 550
553 default: 551 default:
554 tmp=get_archetype("fireball"); 552 tmp=get_archetype("fireball");
555 tmp->stats.dam=random_roll(1, level, op, PREFER_LOW)/5+1; 553 tmp->stats.dam=random_roll(1, level, op, PREFER_LOW)/5+1;
556 tmp->stats.hp=random_roll(1, level, op, PREFER_LOW)/10+2; 554 tmp->stats.hp=random_roll(1, level, op, PREFER_LOW)/10+2;
557 new_draw_info_format(NDI_UNIQUE,0,op,"The %s erupts in flame!", 555 new_draw_info_format(NDI_UNIQUE,0,op,"The %s erupts in flame!",
558 cauldron->name); 556 &cauldron->name);
559 break; 557 break;
560 } 558 }
561 tmp->x=cauldron->x,tmp->y=cauldron->y; 559 tmp->x=cauldron->x,tmp->y=cauldron->y;
562 insert_ob_in_map(tmp,op->map,NULL,0); 560 insert_ob_in_map(tmp,op->map,NULL,0);
563 return; 561 return;
564 562
565 } else if (level<60) { /* CREATE MONSTER */ 563 } else if (level<60) { /* CREATE MONSTER */
566 new_draw_info_format(NDI_UNIQUE,0,op, 564 new_draw_info_format(NDI_UNIQUE,0,op,
567 "The %s %s.",cauldron->name,cauldron_sound()); 565 "The %s %s.",&cauldron->name,cauldron_sound());
568 remove_contents(cauldron->inv,NULL); 566 remove_contents(cauldron->inv,NULL);
569 return; 567 return;
570 } else if (level<80) { /* MAJOR FIRE */ 568 } else if (level<80) { /* MAJOR FIRE */
571 object *fb = get_archetype(SP_MED_FIREBALL); 569 object *fb = get_archetype(SP_MED_FIREBALL);
572 remove_contents(cauldron->inv,NULL); 570 remove_contents(cauldron->inv,NULL);
573 fire_arch_from_position(cauldron, cauldron,cauldron->x, cauldron->y, 571 fire_arch_from_position(cauldron, cauldron,cauldron->x, cauldron->y,
574 0, fb); 572 0, fb);
575 free_object(fb); 573 free_object(fb);
576 new_draw_info_format(NDI_UNIQUE,0,op,"The %s erupts in flame!", 574 new_draw_info_format(NDI_UNIQUE,0,op,"The %s erupts in flame!",
577 cauldron->name); 575 &cauldron->name);
578 return; 576 return;
579 577
580 } else if (level<100) { /* WHAMMY the CAULDRON */ 578 } else if (level<100) { /* WHAMMY the CAULDRON */
581 if(!QUERY_FLAG(cauldron,FLAG_CURSED)) 579 if(!QUERY_FLAG(cauldron,FLAG_CURSED))
582 SET_FLAG(cauldron,FLAG_CURSED); 580 SET_FLAG(cauldron,FLAG_CURSED);
584 cauldron->magic -= random_roll(0, 4, op, PREFER_LOW); 582 cauldron->magic -= random_roll(0, 4, op, PREFER_LOW);
585 if(rndm(0, 1)) { 583 if(rndm(0, 1)) {
586 remove_contents(cauldron->inv,NULL); 584 remove_contents(cauldron->inv,NULL);
587 new_draw_info_format(NDI_UNIQUE,0,op, 585 new_draw_info_format(NDI_UNIQUE,0,op,
588 "Your %s turns darker then makes a gulping sound!", 586 "Your %s turns darker then makes a gulping sound!",
589 cauldron->name); 587 &cauldron->name);
590 } else 588 } else
591 new_draw_info_format(NDI_UNIQUE,0,op, 589 new_draw_info_format(NDI_UNIQUE,0,op,
592 "Your %s becomes darker.",cauldron->name); 590 "Your %s becomes darker.",&cauldron->name);
593 return; 591 return;
594 592
595 } else if (level<110) { /* SUMMON EVIL MONSTERS */ 593 } else if (level<110) { /* SUMMON EVIL MONSTERS */
596 object *tmp=get_random_mon(level/5); 594 object *tmp=get_random_mon(level/5);
597 595
599 if(!tmp) 597 if(!tmp)
600 alchemy_failure_effect(op,cauldron,rp,level); 598 alchemy_failure_effect(op,cauldron,rp,level);
601 else if(summon_hostile_monsters(cauldron, random_roll(1, 10, op, PREFER_LOW), tmp->arch->name)) 599 else if(summon_hostile_monsters(cauldron, random_roll(1, 10, op, PREFER_LOW), tmp->arch->name))
602 new_draw_info_format(NDI_UNIQUE, 0,op, 600 new_draw_info_format(NDI_UNIQUE, 0,op,
603 "The %s %s and then pours forth monsters!", 601 "The %s %s and then pours forth monsters!",
604 cauldron->name,cauldron_sound()); 602 &cauldron->name,cauldron_sound());
605 return; 603 return;
606 604
607 } else if (level<150) { /* COMBO EFFECT */ 605 } else if (level<150) { /* COMBO EFFECT */
608 int roll = rndm(1, 3); 606 int roll = rndm(1, 3);
609 while(roll) { 607 while(roll) {
621 if(rp && (tmp=get_archetype(rp->arch_name[RANDOM()%rp->arch_names]))) { 619 if(rp && (tmp=get_archetype(rp->arch_name[RANDOM()%rp->arch_names]))) {
622 generate_artifact(tmp,random_roll(1, op->level/2+1, op, PREFER_HIGH)+1); 620 generate_artifact(tmp,random_roll(1, op->level/2+1, op, PREFER_HIGH)+1);
623 if((tmp=insert_ob_in_ob(tmp,cauldron))) { 621 if((tmp=insert_ob_in_ob(tmp,cauldron))) {
624 remove_contents(cauldron->inv,tmp); 622 remove_contents(cauldron->inv,tmp);
625 new_draw_info_format(NDI_UNIQUE, 0,op, 623 new_draw_info_format(NDI_UNIQUE, 0,op,
626 "The %s %s.",cauldron->name,cauldron_sound()); 624 "The %s %s.",&cauldron->name,cauldron_sound());
627 } 625 }
628 } 626 }
629 return; 627 return;
630 } else { /* MANA STORM - watch out!! */ 628 } else { /* MANA STORM - watch out!! */
631 object *tmp = get_archetype(LOOSE_MANA); 629 object *tmp = get_archetype(LOOSE_MANA);
688 * Thus the backfire is worse. Also, more ingredients 686 * Thus the backfire is worse. Also, more ingredients
689 * means we are attempting a more powerfull potion, 687 * means we are attempting a more powerfull potion,
690 * and thus the backfire will be worse. */ 688 * and thus the backfire will be worse. */
691 for(item=cauldron->inv;item;item=item->below) { 689 for(item=cauldron->inv;item;item=item->below) {
692 strcpy(name,item->name); 690 strcpy(name,item->name);
693 if(item->title) sprintf(name,"%s %s",item->name,item->title); 691 if(item->title) sprintf(name,"%s %s", &item->name, &item->title);
694 danger += (strtoint(name)/1000) + 3; 692 danger += (strtoint(name)/1000) + 3;
695 nrofi++; 693 nrofi++;
696 } 694 }
697 if (rp == NULL) 695 if (rp == NULL)
698 danger += 110; 696 danger += 110;
766 const char *name2; 764 const char *name2;
767 765
768 if(ob->title == NULL) 766 if(ob->title == NULL)
769 name2 = ob->name; 767 name2 = ob->name;
770 else { 768 else {
771 snprintf(name_ob, sizeof(name_ob), "%s %s", ob->name, ob->title); 769 snprintf(name_ob, sizeof(name_ob), "%s %s", &ob->name, &ob->title);
772 name2 = name_ob; 770 name2 = name_ob;
773 } 771 }
774 772
775 if(strcmp(name2, name) == 0) { 773 if(strcmp(name2, name) == 0) {
776 if(ob->nrof%nrof == 0) { 774 if(ob->nrof%nrof == 0) {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines