1 | /* |
1 | /* |
2 | * CrossFire, A Multiplayer game |
2 | * This file is part of Crossfire TRT, the Multiplayer Online Role Playing Game. |
3 | * |
3 | * |
4 | * Copyright (C) 2005, 2006, 2007 Marc Lehmann & Crossfire+ Development Team |
4 | * Copyright (©) 2005,2006,2007 Marc Alexander Lehmann / Robin Redeker / the Crossfire TRT team |
5 | * Copyright (C) 2002 Mark Wedel & Crossfire Development Team |
5 | * Copyright (©) 2002,2007 Mark Wedel & Crossfire Development Team |
6 | * Copyright (C) 1992 Frank Tore Johansen |
6 | * Copyright (©) 1992,2007 Frank Tore Johansen |
7 | * |
7 | * |
8 | * This program is free software; you can redistribute it and/or modify |
8 | * Crossfire TRT is free software; you can redistribute it and/or modify it |
9 | * it under the terms of the GNU General Public License as published by |
9 | * under the terms of the GNU General Public License as published by the Free |
10 | * the Free Software Foundation; either version 2 of the License, or |
10 | * Software Foundation; either version 2 of the License, or (at your option) |
11 | * (at your option) any later version. |
11 | * any later version. |
12 | * |
12 | * |
13 | * This program is distributed in the hope that it will be useful, |
13 | * This program is distributed in the hope that it will be useful, but |
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
14 | * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY |
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
15 | * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
16 | * GNU General Public License for more details. |
16 | * for more details. |
17 | * |
17 | * |
18 | * You should have received a copy of the GNU General Public License |
18 | * You should have received a copy of the GNU General Public License along |
19 | * along with this program; if not, write to the Free Software |
19 | * with Crossfire TRT; if not, write to the Free Software Foundation, Inc. 51 |
20 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
20 | * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
21 | * |
21 | * |
22 | * The authors can be reached via e-mail at <crossfire@schmorp.de> |
22 | * The authors can be reached via e-mail to <crossfire@schmorp.de> |
23 | */ |
23 | */ |
24 | |
|
|
25 | |
24 | |
26 | /* This file contains code relevant to the BOOKS hack -- designed |
25 | /* This file contains code relevant to the BOOKS hack -- designed |
27 | * to allow randomly occuring messages in non-magical texts. |
26 | * to allow randomly occuring messages in non-magical texts. |
28 | */ |
27 | */ |
29 | |
28 | |
… | |
… | |
749 | if (did_init_mon_info) |
748 | if (did_init_mon_info) |
750 | return; |
749 | return; |
751 | |
750 | |
752 | did_init_mon_info = 1; |
751 | did_init_mon_info = 1; |
753 | |
752 | |
754 | |
753 | for_all_archetypes (at) |
755 | for (at = first_archetype; at != NULL; at = at->next) |
|
|
756 | { |
754 | { |
757 | if (QUERY_FLAG (&at->clone, FLAG_MONSTER) && (!QUERY_FLAG (&at->clone, FLAG_CHANGING) || QUERY_FLAG (&at->clone, FLAG_UNAGGRESSIVE))) |
755 | if (QUERY_FLAG (at, FLAG_MONSTER) && (!QUERY_FLAG (at, FLAG_CHANGING) || QUERY_FLAG (at, FLAG_UNAGGRESSIVE))) |
758 | { |
756 | { |
759 | objectlink *mon = new objectlink; |
757 | objectlink *mon = new objectlink; |
760 | |
758 | |
761 | mon->ob = &at->clone; |
759 | mon->ob = at; |
762 | mon->next = first_mon_info; |
760 | mon->next = first_mon_info; |
763 | first_mon_info = mon; |
761 | first_mon_info = mon; |
764 | nrofmon++; |
762 | nrofmon++; |
765 | } |
763 | } |
766 | } |
764 | } |
… | |
… | |
970 | t = get_empty_book (); |
968 | t = get_empty_book (); |
971 | t->name = book->name; |
969 | t->name = book->name; |
972 | t->authour = book->title; |
970 | t->authour = book->title; |
973 | t->size = strlen (book->msg); |
971 | t->size = strlen (book->msg); |
974 | t->msg_index = strtoint (book->msg); |
972 | t->msg_index = strtoint (book->msg); |
975 | t->archname = book->arch->name; |
973 | t->archname = book->arch->archname; |
976 | t->level = book->level; |
974 | t->level = book->level; |
977 | |
975 | |
978 | t->next = tl->first_book; |
976 | t->next = tl->first_book; |
979 | tl->first_book = t; |
977 | tl->first_book = t; |
980 | tl->number++; |
978 | tl->number++; |
… | |
… | |
1443 | if (path == -1) |
1441 | if (path == -1) |
1444 | strcat (retbuf, "having no known spell path.\n"); |
1442 | strcat (retbuf, "having no known spell path.\n"); |
1445 | else |
1443 | else |
1446 | sprintf (retbuf, "%sbelonging to the path of %s:\n", retbuf, spellpathnames[path]); |
1444 | sprintf (retbuf, "%sbelonging to the path of %s:\n", retbuf, spellpathnames[path]); |
1447 | |
1445 | |
1448 | for (at = first_archetype; at != NULL; at = at->next) |
1446 | for_all_archetypes (at) |
1449 | { |
1447 | { |
1450 | /* Determine if this is an appropriate spell. Must |
1448 | /* Determine if this is an appropriate spell. Must |
1451 | * be of matching path, must be of appropriate type (prayer |
1449 | * be of matching path, must be of appropriate type (prayer |
1452 | * or not), and must be within the valid level range. |
1450 | * or not), and must be within the valid level range. |
1453 | */ |
1451 | */ |
1454 | if (at->clone.type == SPELL && at->clone.path_attuned & pnum && |
1452 | if (at->type == SPELL && at->path_attuned & pnum && |
1455 | ((at->clone.stats.grace && prayers) || (at->clone.stats.sp && !prayers)) && (at->clone.level < (level * 8))) |
1453 | ((at->stats.grace && prayers) || (at->stats.sp && !prayers)) && (at->level < (level * 8))) |
1456 | { |
1454 | { |
1457 | assign (tmpbuf, at->clone.name); |
1455 | assign (tmpbuf, at->object::name); |
1458 | |
1456 | |
1459 | if (book_overflow (retbuf, tmpbuf, booksize)) |
1457 | if (book_overflow (retbuf, tmpbuf, booksize)) |
1460 | break; |
1458 | break; |
1461 | else |
1459 | else |
1462 | { |
1460 | { |
… | |
… | |
1536 | |
1534 | |
1537 | /* preamble */ |
1535 | /* preamble */ |
1538 | sprintf (retbuf, "Herein is described a project using %s: \n", formula->skill ? &formula->skill : "an unknown skill"); |
1536 | sprintf (retbuf, "Herein is described a project using %s: \n", formula->skill ? &formula->skill : "an unknown skill"); |
1539 | |
1537 | |
1540 | if ((at = archetype::find (op_name)) != (archetype *) NULL) |
1538 | if ((at = archetype::find (op_name)) != (archetype *) NULL) |
1541 | op_name = at->clone.name; |
1539 | op_name = at->object::name; |
1542 | else |
1540 | else |
1543 | LOG (llevError, "formula_msg() can't find arch %s for formula.\n", op_name); |
1541 | LOG (llevError, "formula_msg() can't find arch %s for formula.\n", op_name); |
1544 | |
1542 | |
1545 | /* item name */ |
1543 | /* item name */ |
1546 | if (strcmp (formula->title, "NONE")) |
1544 | if (strcmp (formula->title, "NONE")) |
… | |
… | |
1556 | } |
1554 | } |
1557 | else |
1555 | else |
1558 | { |
1556 | { |
1559 | sprintf (retbuf, "%sThe %s", retbuf, op_name); |
1557 | sprintf (retbuf, "%sThe %s", retbuf, op_name); |
1560 | sprintf (title, "%s: %s", formula_book_name[RANDOM () % (sizeof (formula_book_name) / sizeof (char *))], op_name); |
1558 | sprintf (title, "%s: %s", formula_book_name[RANDOM () % (sizeof (formula_book_name) / sizeof (char *))], op_name); |
1561 | if (at->clone.title) |
1559 | if (at->title) |
1562 | { |
1560 | { |
1563 | strcat (retbuf, " "); |
1561 | strcat (retbuf, " "); |
1564 | strcat (retbuf, at->clone.title); |
1562 | strcat (retbuf, at->title); |
1565 | strcat (title, " "); |
1563 | strcat (title, " "); |
1566 | strcat (title, at->clone.title); |
1564 | strcat (title, at->title); |
1567 | } |
1565 | } |
1568 | } |
1566 | } |
1569 | /* Lets name the book something meaningful ! */ |
1567 | /* Lets name the book something meaningful ! */ |
1570 | book->name = title; |
1568 | book->name = title; |
1571 | book->title = NULL; |
1569 | book->title = NULL; |
… | |
… | |
1577 | archetype *at; |
1575 | archetype *at; |
1578 | |
1576 | |
1579 | at = archetype::find (formula->cauldron); |
1577 | at = archetype::find (formula->cauldron); |
1580 | |
1578 | |
1581 | sprintf (retbuf + strlen (retbuf), |
1579 | sprintf (retbuf + strlen (retbuf), |
1582 | " may be made at %s using the following ingredients:\n", at ? query_name (&at->clone) : "an unknown place"); |
1580 | " may be made at %s using the following ingredients:\n", at ? query_name (at) : "an unknown place"); |
1583 | |
1581 | |
1584 | for (next = formula->ingred; next != NULL; next = next->next) |
1582 | for (next = formula->ingred; next != NULL; next = next->next) |
1585 | { |
1583 | { |
1586 | strcat (retbuf, next->name); |
1584 | strcat (retbuf, next->name); |
1587 | strcat (retbuf, "\n"); |
1585 | strcat (retbuf, "\n"); |