… | |
… | |
413 | printf (" -m9 Dumps out more alchemy information (formula checking).\n"); |
413 | printf (" -m9 Dumps out more alchemy information (formula checking).\n"); |
414 | printf (" -mt <name> Dumps out list of treasures for a monster.\n"); |
414 | printf (" -mt <name> Dumps out list of treasures for a monster.\n"); |
415 | exit (0); |
415 | exit (0); |
416 | } |
416 | } |
417 | |
417 | |
418 | void |
|
|
419 | init_beforeplay (void) |
|
|
420 | { |
|
|
421 | init_artifacts (); /* If not called before, reads all artifacts from file */ |
|
|
422 | init_races (); /* overwrite race designations using entries in lib/races file */ |
|
|
423 | init_gods (); /* init linked list of gods from archs */ |
|
|
424 | init_readable (); /* inits useful arrays for readable texts */ |
|
|
425 | init_formulae (); /* If not called before, reads formulae from file */ |
|
|
426 | } |
|
|
427 | |
|
|
428 | /* Signal handlers: */ |
418 | /* Signal handlers: */ |
429 | |
419 | |
430 | static void |
420 | static void |
431 | rec_sigabrt (int i) |
421 | rec_sigabrt (int i) |
432 | { |
422 | { |
… | |
… | |
499 | |
489 | |
500 | sa.sa_flags |= SA_ONSTACK; |
490 | sa.sa_flags |= SA_ONSTACK; |
501 | sa.sa_handler = rec_sigsegv; sigaction (SIGSEGV, &sa, 0); |
491 | sa.sa_handler = rec_sigsegv; sigaction (SIGSEGV, &sa, 0); |
502 | } |
492 | } |
503 | |
493 | |
|
|
494 | static racelink * |
|
|
495 | get_racelist () |
|
|
496 | { |
|
|
497 | racelink *list = new racelink; |
|
|
498 | |
|
|
499 | list->name = 0; |
|
|
500 | list->nrof = 0; |
|
|
501 | list->next = 0; |
|
|
502 | list->member = get_objectlink (); |
|
|
503 | |
|
|
504 | return list; |
|
|
505 | } |
|
|
506 | |
|
|
507 | racelink * |
|
|
508 | find_racelink (const char *name) |
|
|
509 | { |
|
|
510 | if (name) |
|
|
511 | for (racelink *link = first_race; link; link = link->next) |
|
|
512 | if (!link->name || !strcmp (name, link->name)) |
|
|
513 | return link; |
|
|
514 | |
|
|
515 | return 0; |
|
|
516 | } |
|
|
517 | |
|
|
518 | static void |
|
|
519 | add_to_racelist (const char *race_name, object *op) |
|
|
520 | { |
|
|
521 | racelink *race; |
|
|
522 | |
|
|
523 | if (!op || !race_name) |
|
|
524 | return; |
|
|
525 | |
|
|
526 | race = find_racelink (race_name); |
|
|
527 | |
|
|
528 | if (!race) |
|
|
529 | { /* add in a new race list */ |
|
|
530 | race = get_racelist (); |
|
|
531 | race->next = first_race; |
|
|
532 | first_race = race; |
|
|
533 | race->name = race_name; |
|
|
534 | } |
|
|
535 | |
|
|
536 | if (race->member->ob) |
|
|
537 | { |
|
|
538 | objectlink *tmp = get_objectlink (); |
|
|
539 | |
|
|
540 | tmp->next = race->member; |
|
|
541 | race->member = tmp; |
|
|
542 | } |
|
|
543 | |
|
|
544 | race->nrof++; |
|
|
545 | race->member->ob = op; |
|
|
546 | } |
|
|
547 | |
504 | /* init_races() - reads the races file in the lib/ directory, then |
548 | /* init_races() - reads the races file in the lib/ directory, then |
505 | * overwrites old 'race' entries. This routine allow us to quickly |
549 | * overwrites old 'race' entries. This routine allow us to quickly |
506 | * re-configure the 'alignment' of monsters, objects. Useful for |
550 | * re-configure the 'alignment' of monsters, objects. Useful for |
507 | * putting together lists of creatures, etc that belong to gods. |
551 | * putting together lists of creatures, etc that belong to gods. |
508 | */ |
552 | */ |
509 | void |
553 | static void |
510 | init_races (void) |
554 | init_races (void) |
511 | { |
555 | { |
512 | FILE *file; |
556 | FILE *file; |
513 | char race[MAX_BUF], fname[MAX_BUF], buf[MAX_BUF], *cp, variable[MAX_BUF]; |
557 | char race[MAX_BUF], fname[MAX_BUF], buf[MAX_BUF], *cp, variable[MAX_BUF]; |
514 | archetype *mon = NULL; |
558 | archetype *mon = NULL; |
… | |
… | |
589 | |
633 | |
590 | fclose (file); |
634 | fclose (file); |
591 | LOG (llevDebug, "done.\n"); |
635 | LOG (llevDebug, "done.\n"); |
592 | } |
636 | } |
593 | |
637 | |
594 | void |
638 | static void |
595 | dump_races (void) |
639 | dump_races (void) |
596 | { |
640 | { |
597 | racelink *list; |
641 | racelink *list; |
598 | objectlink *tmp; |
642 | objectlink *tmp; |
599 | |
643 | |
… | |
… | |
606 | |
650 | |
607 | fprintf (stderr, "\n"); |
651 | fprintf (stderr, "\n"); |
608 | } |
652 | } |
609 | |
653 | |
610 | void |
654 | void |
611 | add_to_racelist (const char *race_name, object *op) |
655 | init_beforeplay (void) |
612 | { |
656 | { |
613 | racelink *race; |
657 | init_artifacts (); /* If not called before, reads all artifacts from file */ |
614 | |
658 | init_races (); /* overwrite race designations using entries in lib/races file */ |
615 | if (!op || !race_name) |
659 | init_gods (); /* init linked list of gods from archs */ |
616 | return; |
660 | init_readable (); /* inits useful arrays for readable texts */ |
617 | |
661 | init_formulae (); /* If not called before, reads formulae from file */ |
618 | race = find_racelink (race_name); |
|
|
619 | |
|
|
620 | if (!race) |
|
|
621 | { /* add in a new race list */ |
|
|
622 | race = get_racelist (); |
|
|
623 | race->next = first_race; |
|
|
624 | first_race = race; |
|
|
625 | race->name = race_name; |
|
|
626 | } |
|
|
627 | |
|
|
628 | if (race->member->ob) |
|
|
629 | { |
|
|
630 | objectlink *tmp = get_objectlink (); |
|
|
631 | |
|
|
632 | tmp->next = race->member; |
|
|
633 | race->member = tmp; |
|
|
634 | } |
|
|
635 | |
|
|
636 | race->nrof++; |
|
|
637 | race->member->ob = op; |
|
|
638 | } |
662 | } |
639 | |
663 | |
640 | racelink * |
|
|
641 | get_racelist () |
|
|
642 | { |
|
|
643 | racelink *list = new racelink; |
|
|
644 | |
|
|
645 | list->name = 0; |
|
|
646 | list->nrof = 0; |
|
|
647 | list->next = 0; |
|
|
648 | list->member = get_objectlink (); |
|
|
649 | |
|
|
650 | return list; |
|
|
651 | } |
|
|
652 | |
|
|
653 | racelink * |
|
|
654 | find_racelink (const char *name) |
|
|
655 | { |
|
|
656 | if (name) |
|
|
657 | for (racelink *link = first_race; link; link = link->next) |
|
|
658 | if (!link->name || !strcmp (name, link->name)) |
|
|
659 | return link; |
|
|
660 | |
|
|
661 | return 0; |
|
|
662 | } |
|
|