ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/common/holy.C
Revision: 1.4
Committed: Sun Sep 3 00:18:39 2006 UTC (17 years, 9 months ago) by root
Content type: text/plain
Branch: MAIN
Changes since 1.3: +14 -16 lines
Log Message:
THIS CODE WILL NOT COMPILE
use the STABLE tag instead.

- major changes in object lifetime and memory management
- replaced manual refcounting by shstr class
- removed quest system
- many optimisations
- major changes

File Contents

# User Rev Content
1 elmex 1.1
2     /* Started file Sept 1996 - initialization of gods in form of a
3     * linked list -b.t.
4     */
5    
6     #include <global.h>
7     #include <living.h>
8     #include <spells.h>
9    
10 root 1.4 //TODO: make a constructor
11 elmex 1.1 static godlink *init_godslist(void) {
12 root 1.4 godlink *gl = new godlink;
13    
14     // name=NULL; /* how to describe the god to the player */
15     // arch=NULL; /* pointer to the archetype of this god */
16     // id=0; /* id of the god */
17     // pantheon=NULL; /* the group to which the god belongs (not implemented) */
18     // next=NULL; /* next god in this linked list */
19 elmex 1.1
20     return gl;
21     }
22    
23     /* init_gods() - this takes a look at all of the archetypes to find
24     * the objects which correspond to the GODS (type GOD) */
25    
26     void init_gods (void) {
27     archetype *at=NULL;
28    
29     LOG(llevDebug, "Initializing gods...");
30     for(at=first_archetype;at!=NULL;at=at->next)
31     if(at->clone.type==GOD) add_god_to_list(at);
32    
33     LOG(llevDebug,"done.\n");
34     }
35    
36     /* add_god_to_list()- called only from init_gods */
37     void add_god_to_list (archetype *god_arch) {
38     godlink *god;
39    
40     if(!god_arch) {
41     LOG(llevError,"ERROR: Tried to add null god to list!\n");
42     return;
43     }
44    
45     god = init_godslist();
46    
47     god->arch = god_arch;
48 root 1.4 god->name = god_arch->clone.name;
49 elmex 1.1 if(!first_god)
50     god->id = 1;
51     else {
52     god->id = first_god->id + 1;
53     god->next = first_god;
54     }
55     first_god = god;
56    
57     #ifdef DEBUG_GODS
58 root 1.4 LOG(llevDebug,"Adding god %s (%d) to list\n",&god->name,god->id);
59 elmex 1.1 #endif
60     }
61    
62     /* baptize_altar() - (cosmetically) change the name to that of the
63     * god in question, then set the title for later use. -b.t.
64     */
65    
66     int baptize_altar(object *op) {
67     char buf[MAX_BUF];
68    
69     /* if the title field is pre-set, then that altar is
70     * already dedicated. */
71     if(!op->title) {
72     godlink *god=get_rand_god();
73     if(!god||!god->name) {
74     LOG(llevError,"baptise_altar(): bizarre nameless god!\n");
75     return 0;
76     }
77     /* if the object name hasnt' been changed, we tack on the gods name */
78     if(!strcmp(op->name,op->arch->clone.name)) {
79 root 1.4 sprintf(buf,"%s of %s",&op->name,&god->name);
80     op->name = buf;
81 elmex 1.1 }
82 root 1.4 op->title = god->name;
83 elmex 1.1 return 1;
84     }
85     return 0;
86     }
87    
88     godlink * get_rand_god ( void ) {
89     godlink *god=first_god;
90     int i;
91    
92     if(god)
93     for(i=RANDOM()%(god->id)+1;god;god=god->next)
94     if(god->id==i) break;
95    
96     if(!god) LOG(llevError,"get_rand_god(): can't find a random god!\n");
97     return god;
98     }
99    
100     /* pntr_to_god_obj() - returns a pointer to the object
101     * We need to be VERY carefull about using this, as we
102     * are returning a pointer to the CLONE object. -b.t.
103     */
104     object *pntr_to_god_obj(godlink *godlnk) {
105     object *god=NULL;
106    
107     if(godlnk && godlnk->arch)
108     god=&godlnk->arch->clone;
109     return god;
110     }
111    
112     void free_all_god(void) {
113     godlink *god, *godnext;
114    
115     LOG(llevDebug,"Freeing god information\n");
116     for (god=first_god; god; god=godnext) {
117 root 1.2 godnext=god->next;
118 root 1.4 delete god;
119 elmex 1.1 }
120     }
121    
122