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

Comparing deliantra/server/common/readable.C (file contents):
Revision 1.5 by root, Sun Sep 10 16:00:23 2006 UTC vs.
Revision 1.12 by root, Tue Dec 12 20:53:02 2006 UTC

1
2/*
3 * static char *rcsid_readable_c =
4 * "$Id: readable.C,v 1.5 2006/09/10 16:00:23 root Exp $";
5 */
6
7/* 1/*
8 CrossFire, A Multiplayer game for X-windows 2 CrossFire, A Multiplayer game for X-windows
9 3
10 Copyright (C) 2002 Mark Wedel & Crossfire Development Team 4 Copyright (C) 2002 Mark Wedel & Crossfire Development Team
11 Copyright (C) 1992 Frank Tore Johansen 5 Copyright (C) 1992 Frank Tore Johansen
22 16
23 You should have received a copy of the GNU General Public License 17 You should have received a copy of the GNU General Public License
24 along with this program; if not, write to the Free Software 18 along with this program; if not, write to the Free Software
25 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
26 20
27 The authors can be reached via e-mail at crossfire-devel@real-time.com 21 The authors can be reached via e-mail at <crossfire@schmorp.de>
28*/ 22*/
29 23
30 24
31/* This file contains code relevant to the BOOKS hack -- designed 25/* This file contains code relevant to the BOOKS hack -- designed
32 * to allow randomly occuring messages in non-magical texts. 26 * to allow randomly occuring messages in non-magical texts.
80/* Moved these structures from struct.h to this file in 0.94.3 - they 74/* Moved these structures from struct.h to this file in 0.94.3 - they
81 * are not needed anyplace else, so why have them globally declared? 75 * are not needed anyplace else, so why have them globally declared?
82 */ 76 */
83 77
84/* 'title' and 'titlelist' are used by the readable code */ 78/* 'title' and 'titlelist' are used by the readable code */
85typedef struct titlestruct:zero_initialised 79struct title : zero_initialised
86{ 80{
87 shstr name; /* the name of the book */ 81 shstr name; /* the name of the book */
88 shstr authour; /* the name of the book authour */ 82 shstr authour; /* the name of the book authour */
89 shstr archname; /* the archetype name of the book */ 83 shstr archname; /* the archetype name of the book */
90 int level; /* level of difficulty of this message */ 84 int level; /* level of difficulty of this message */
91 int size; /* size of the book message */ 85 int size; /* size of the book message */
92 int msg_index; /* an index value derived from book message */ 86 int msg_index; /* an index value derived from book message */
93 struct titlestruct *next; 87 title *next;
94} title; 88};
95 89
96typedef struct titleliststruct:zero_initialised 90struct titlelist : zero_initialised
97{ 91{
98 int number; /* number of items in the list */ 92 int number; /* number of items in the list */
99 struct titlestruct *first_book; /* pointer to first book in this list */ 93 title *first_book; /* pointer to first book in this list */
100 struct titleliststruct *next; /* pointer to next book list */ 94 titlelist *next; /* pointer to next book list */
101} titlelist; 95};
102 96
103/* special structure, used only by art_name_array[] */ 97/* special structure, used only by art_name_array[] */
104 98struct arttypename
105typedef struct namebytype
106{ 99{
107 const char *name; /* generic name to call artifacts of this type */ 100 const char *name; /* generic name to call artifacts of this type */
108 int type; /* matching type */ 101 int type; /* matching type */
109} 102};
110arttypename;
111
112 103
113/* booklist is the buffer of books read in from the bookarch file */ 104/* booklist is the buffer of books read in from the bookarch file */
114static titlelist *booklist = NULL; 105static titlelist *booklist = NULL;
115 106
116static objectlink *first_mon_info = NULL; 107static objectlink *first_mon_info = NULL;
565 556
566 while (tl && number) 557 while (tl && number)
567 { 558 {
568 if (!tl->next) 559 if (!tl->next)
569 tl->next = get_empty_booklist (); 560 tl->next = get_empty_booklist ();
561
570 tl = tl->next; 562 tl = tl->next;
571 number--; 563 number--;
572 } 564 }
573 565
574 return tl; 566 return tl;
733 titlelist *bl = get_empty_booklist (); 725 titlelist *bl = get_empty_booklist ();
734 static int did_init_barch; 726 static int did_init_barch;
735 727
736 if (did_init_barch) 728 if (did_init_barch)
737 return; 729 return;
730
738 did_init_barch = 1; 731 did_init_barch = 1;
739 732
740 if (!booklist) 733 if (!booklist)
741 booklist = bl; 734 booklist = bl;
742 735
822 archetype *at; 815 archetype *at;
823 static int did_init_mon_info = 0; 816 static int did_init_mon_info = 0;
824 817
825 if (did_init_mon_info) 818 if (did_init_mon_info)
826 return; 819 return;
820
827 did_init_mon_info = 1; 821 did_init_mon_info = 1;
828 822
829 823
830 for (at = first_archetype; at != NULL; at = at->next) 824 for (at = first_archetype; at != NULL; at = at->next)
831 { 825 {
832 if (QUERY_FLAG (&at->clone, FLAG_MONSTER) && (!QUERY_FLAG (&at->clone, FLAG_CHANGING) || QUERY_FLAG (&at->clone, FLAG_UNAGGRESSIVE))) 826 if (QUERY_FLAG (&at->clone, FLAG_MONSTER) && (!QUERY_FLAG (&at->clone, FLAG_CHANGING) || QUERY_FLAG (&at->clone, FLAG_UNAGGRESSIVE)))
833 { 827 {
834 objectlink *mon = (objectlink *) malloc (sizeof (objectlink)); 828 objectlink *mon = new objectlink;
835 829
836 mon->ob = &at->clone; 830 mon->ob = &at->clone;
837 mon->id = nrofmon;
838 mon->next = first_mon_info; 831 mon->next = first_mon_info;
839 first_mon_info = mon; 832 first_mon_info = mon;
840 nrofmon++; 833 nrofmon++;
841 } 834 }
842 } 835 }
836
843 LOG (llevDebug, "init_mon_info() got %d monsters\n", nrofmon); 837 LOG (llevDebug, "init_mon_info() got %d monsters\n", nrofmon);
844} 838}
845 839
846 840
847/* init_readable() - initialize linked lists utilized by 841/* init_readable() - initialize linked lists utilized by
856{ 850{
857 static int did_this; 851 static int did_this;
858 852
859 if (did_this) 853 if (did_this)
860 return; 854 return;
855
861 did_this = 1; 856 did_this = 1;
862 857
863 LOG (llevDebug, "Initializing reading data..."); 858 LOG (llevDebug, "Initializing reading data...");
864 init_msgfile (); 859 init_msgfile ();
865 init_book_archive (); 860 init_book_archive ();
891 if (msgtype < 0) 886 if (msgtype < 0)
892 return (title *) NULL; 887 return (title *) NULL;
893 888
894 if (tl) 889 if (tl)
895 t = tl->first_book; 890 t = tl->first_book;
891
896 while (t) 892 while (t)
897 if (t->size == length && t->msg_index == index) 893 if (t->size == length && t->msg_index == index)
898 break; 894 break;
899 else 895 else
900 t = t->next; 896 t = t->next;
1104 /* alter book properties */ 1100 /* alter book properties */
1105 if ((tmpbook = get_archetype (t->archname)) != NULL) 1101 if ((tmpbook = get_archetype (t->archname)) != NULL)
1106 { 1102 {
1107 tmpbook->msg = book->msg; 1103 tmpbook->msg = book->msg;
1108 copy_object (tmpbook, book); 1104 copy_object (tmpbook, book);
1109 free_object (tmpbook); 1105 tmpbook->destroy (0);
1110 } 1106 }
1111 1107
1112 book->title = t->authour; 1108 book->title = t->authour;
1113 book->name = t->name; 1109 book->name = t->name;
1114 book->level = t->level; 1110 book->level = t->level;
1477 add_abilities (tmp, art->item); 1473 add_abilities (tmp, art->item);
1478 tmp->type = type; 1474 tmp->type = type;
1479 SET_FLAG (tmp, FLAG_IDENTIFIED); 1475 SET_FLAG (tmp, FLAG_IDENTIFIED);
1480 if ((ch = describe_item (tmp, NULL)) != NULL && strlen (ch) > 1) 1476 if ((ch = describe_item (tmp, NULL)) != NULL && strlen (ch) > 1)
1481 sprintf (buf, "%s Properties of this artifact include: \n %s \n", buf, ch); 1477 sprintf (buf, "%s Properties of this artifact include: \n %s \n", buf, ch);
1482 free_object (tmp); 1478 tmp->destroy (0);
1483 /* add the buf if it will fit */ 1479 /* add the buf if it will fit */
1484 if (!book_overflow (retbuf, buf, booksize)) 1480 if (!book_overflow (retbuf, buf, booksize))
1485 strcat (retbuf, buf); 1481 strcat (retbuf, buf);
1486 else 1482 else
1487 break; 1483 break;
1617 archetype *at; 1613 archetype *at;
1618 1614
1619 /* preamble */ 1615 /* preamble */
1620 sprintf (retbuf, "Herein is described a project using %s: \n", formula->skill ? &formula->skill : "an unknown skill"); 1616 sprintf (retbuf, "Herein is described a project using %s: \n", formula->skill ? &formula->skill : "an unknown skill");
1621 1617
1622 if ((at = find_archetype (op_name)) != (archetype *) NULL) 1618 if ((at = archetype::find (op_name)) != (archetype *) NULL)
1623 op_name = at->clone.name; 1619 op_name = at->clone.name;
1624 else 1620 else
1625 LOG (llevError, "formula_msg() can't find arch %s for formula.\n", op_name); 1621 LOG (llevError, "formula_msg() can't find arch %s for formula.\n", op_name);
1626 1622
1627 /* item name */ 1623 /* item name */
1656 if (formula->ingred != NULL) 1652 if (formula->ingred != NULL)
1657 { 1653 {
1658 linked_char *next; 1654 linked_char *next;
1659 archetype *at; 1655 archetype *at;
1660 1656
1661 at = find_archetype (formula->cauldron); 1657 at = archetype::find (formula->cauldron);
1662 1658
1663 sprintf (retbuf + strlen (retbuf), 1659 sprintf (retbuf + strlen (retbuf),
1664 " may be made at %s using the following ingredients:\n", at ? query_name (&at->clone) : "an unknown place"); 1660 " may be made at %s using the following ingredients:\n", at ? query_name (&at->clone) : "an unknown place");
1665 1661
1666 for (next = formula->ingred; next != NULL; next = next->next) 1662 for (next = formula->ingred; next != NULL; next = next->next)
1984 strcpy (msgbuf, msgfile_msg (level, book_buf_size)); 1980 strcpy (msgbuf, msgfile_msg (level, book_buf_size));
1985 break; 1981 break;
1986 } 1982 }
1987 1983
1988 strcat (msgbuf, "\n"); /* safety -- we get ugly map saves/crashes w/o this */ 1984 strcat (msgbuf, "\n"); /* safety -- we get ugly map saves/crashes w/o this */
1985
1989 if (strlen (msgbuf) > 1) 1986 if (strlen (msgbuf) > 1)
1990 { 1987 {
1991 book->msg = msgbuf; 1988 book->msg = msgbuf;
1992 /* lets give the "book" a new name, which may be a compound word */ 1989 /* lets give the "book" a new name, which may be a compound word */
1993 change_book (book, msg_type); 1990 change_book (book, msg_type);
2022 delete title1; 2019 delete title1;
2023 } 2020 }
2024 2021
2025 delete tlist; 2022 delete tlist;
2026 } 2023 }
2024
2027 for (lmsg = first_msg; lmsg; lmsg = nextmsg) 2025 for (lmsg = first_msg; lmsg; lmsg = nextmsg)
2028 { 2026 {
2029 nextmsg = lmsg->next; 2027 nextmsg = lmsg->next;
2030 delete lmsg; 2028 delete lmsg;
2031 } 2029 }
2030
2032 for (monlink = first_mon_info; monlink; monlink = nextmon) 2031 for (monlink = first_mon_info; monlink; monlink = nextmon)
2033 { 2032 {
2034 nextmon = monlink->next; 2033 nextmon = monlink->next;
2035 free (monlink); 2034 delete monlink;
2036 } 2035 }
2037} 2036}
2038 2037
2039 2038
2040/***************************************************************************** 2039/*****************************************************************************

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines