ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/include/treasure.h
Revision: 1.20
Committed: Sun Jul 1 05:00:18 2007 UTC (16 years, 10 months ago) by root
Content type: text/plain
Branch: MAIN
CVS Tags: rel-2_2, rel-2_3
Changes since 1.19: +11 -12 lines
Log Message:
- upgrade crossfire trt to the GPL version 3 (hopefully correctly).
- add a single file covered by the GNU Affero General Public License
  (which is not yet released, so I used the current draft, which is
  legally a bit wavy, but its likely better than nothing as it expresses
  direct intent by the authors, and we can upgrade as soon as it has been
  released).
  * this should ensure availability of source code for the server at least
    and hopefully also archetypes and maps even when modified versions
    are not being distributed, in accordance of section 13 of the agplv3.

File Contents

# User Rev Content
1 root 1.1 /*
2 root 1.20 * This file is part of Crossfire TRT, the Roguelike Realtime MORPG.
3 pippijn 1.11 *
4 root 1.18 * Copyright (©) 2005,2006,2007 Marc Alexander Lehmann / Robin Redeker / the Crossfire TRT team
5     * Copyright (©) 2002,2007 Mark Wedel & Crossfire Development Team
6     * Copyright (©) 1992,2007 Frank Tore Johansen
7 pippijn 1.11 *
8 root 1.20 * Crossfire TRT is free software: you can redistribute it and/or modify
9     * it under the terms of the GNU General Public License as published by
10     * the Free Software Foundation, either version 3 of the License, or
11     * (at your option) any later version.
12 pippijn 1.11 *
13 root 1.20 * This program is distributed in the hope that it will be useful,
14     * but WITHOUT ANY WARRANTY; without even the implied warranty of
15     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16     * GNU General Public License for more details.
17 pippijn 1.11 *
18 root 1.20 * You should have received a copy of the GNU General Public License
19     * along with this program. If not, see <http://www.gnu.org/licenses/>.
20 root 1.18 *
21     * The authors can be reached via e-mail to <crossfire@schmorp.de>
22 pippijn 1.11 */
23 root 1.1
24     /*
25     * defines and variables used by the artifact generation routines
26     */
27    
28     #ifndef TREASURE_H
29     #define TREASURE_H
30    
31     #define MAGIC_VALUE 10000 /* Might need to increase later */
32     #define CHANCE_FOR_ARTIFACT 20
33    
34     #define STARTMAL 100
35     #define STEPMAL 10
36    
37     /* List, What type to clone_arch(), max magic, how many */
38    
39     #define MAXMAGIC 4
40    
41     #define DIFFLEVELS 31
42    
43     /*
44     * Flags to generate_treasures():
45     */
46 root 1.6 enum
47     {
48 root 1.15 GT_ENVIRONMENT = 0x0001, // put treasure at objetc, not into object
49     GT_INVISIBLE = 0x0002,
50     GT_STARTEQUIP = 0x0004,
51     GT_APPLY = 0x0008,
52     GT_ONLY_GOOD = 0x0010,
53     GT_UPDATE_INV = 0x0020,
54     GT_MINIMAL = 0x0040, // Do minimal adjustments
55 root 1.1 };
56    
57     /* when a treasure got cloned from archlist, we want perhaps change some default
58     * values. All values in this structure will override the default arch.
59     * TODO: It is a bad way to implement this with a special structure.
60     * Because the real arch list is a at runtime not changed, we can grap for example
61     * here a clone of the arch, store it in the treasure list and then run the original
62     * arch parser over this clone, using the treasure list as script until an END comes.
63     * This will allow ANY changes which is possible and we use ony one parser.
64     */
65    
66 root 1.6 typedef struct _change_arch
67     {
68 root 1.3 shstr name; /* is != NULL, copy this over the original arch name */
69     shstr title; /* is != NULL, copy this over the original arch name */
70     shstr slaying; /* is != NULL, copy this over the original arch name */
71 root 1.1 } _change_arch;
72    
73     /*
74     * treasure is one element in a linked list, which together consist of a
75     * complete treasure-list. Any arch can point to a treasure-list
76     * to get generated standard treasure when an archetype of that type
77     * is generated (from a generator)
78     */
79 root 1.7 struct treasure : zero_initialised
80 root 1.4 {
81 root 1.13 struct archetype *item; /* Which item this link can be */
82 root 1.3 shstr name; /* If non null, name of list to use
83 root 1.2 instead */
84 root 1.7 treasure *next; /* Next treasure-item in a linked list */
85     treasure *next_yes; /* If this item was generated, use */
86 root 1.2 /* this link instead of ->next */
87 root 1.7 treasure *next_no; /* If this item was not generated, */
88 root 1.2 /* then continue here */
89 root 1.1 struct _change_arch change_arch; /* override default arch values if set in treasure list */
90 root 1.17 uint16 chance; /* Percent chance for this item */
91 root 1.2 /* If the entry is a list transition,
92     * 'magic' contains the difficulty
93     * required to go to the new list
94 root 1.1 */
95     uint16 nrof; /* random 1 to nrof items are generated */
96 root 1.17 uint8 magic; /* Max magic bonus to item */
97 root 1.13
98     treasure ()
99     : chance (100)
100     { }
101 root 1.7 };
102 root 1.1
103 root 1.7 struct treasurelist : zero_initialised
104 root 1.4 {
105 root 1.3 shstr name; /* Usually monster-name/combination */
106 root 1.1 sint16 total_chance; /* If non-zero, only 1 item on this
107 root 1.2 * list should be generated. The
108     * total_chance contains the sum of
109     * the chance for this list.
110     */
111 root 1.7 treasurelist *next; /* Next treasure-item in linked list */
112     treasure *items; /* Items in this list, linked */
113 root 1.13
114 root 1.16 void create (object *op, int flag, int difficulty);
115    
116 root 1.14 static treasurelist *read (object_thawer &f);
117 root 1.13 static treasurelist *get (const char *name); // find or create
118     static treasurelist *find (const char *name);
119 root 1.7 };
120 root 1.1
121 root 1.19 inline void
122     object_freezer::put (keyword k, treasurelist *v)
123     {
124     put (k, v ? &v->name : (const char *)0);
125     }
126    
127 root 1.15 void create_treasure (treasurelist *t, object *op, int flag, int difficulty, int tries = 0);
128    
129 root 1.1 #endif
130 root 1.12