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, 8 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

# Content
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 //TODO: make a constructor
11 static godlink *init_godslist(void) {
12 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
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 god->name = god_arch->clone.name;
49 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 LOG(llevDebug,"Adding god %s (%d) to list\n",&god->name,god->id);
59 #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 sprintf(buf,"%s of %s",&op->name,&god->name);
80 op->name = buf;
81 }
82 op->title = god->name;
83 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 godnext=god->next;
118 delete god;
119 }
120 }
121
122