1 | /* |
1 | /* |
2 | * This file is part of Deliantra, the Roguelike Realtime MMORPG. |
2 | * This file is part of Deliantra, the Roguelike Realtime MMORPG. |
3 | * |
3 | * |
4 | * Copyright (©) 2005,2006,2007,2008 Marc Alexander Lehmann / Robin Redeker / the Deliantra team |
4 | * Copyright (©) 2005,2006,2007,2008,2009,2010 Marc Alexander Lehmann / Robin Redeker / the Deliantra team |
5 | * Copyright (©) 2002,2007 Mark Wedel & Crossfire Development Team |
5 | * Copyright (©) 2002 Mark Wedel & Crossfire Development Team |
6 | * Copyright (©) 1992,2007 Frank Tore Johansen |
6 | * Copyright (©) 1992 Frank Tore Johansen |
7 | * |
7 | * |
8 | * Deliantra is free software: you can redistribute it and/or modify it under |
8 | * Deliantra is free software: you can redistribute it and/or modify it under |
9 | * the terms of the Affero GNU General Public License as published by the |
9 | * the terms of the Affero GNU General Public License as published by the |
10 | * Free Software Foundation, either version 3 of the License, or (at your |
10 | * Free Software Foundation, either version 3 of the License, or (at your |
11 | * option) any later version. |
11 | * option) any later version. |
… | |
… | |
65 | #ifdef DEBUG_GODS |
65 | #ifdef DEBUG_GODS |
66 | LOG (llevDebug, "Adding god %s (%d) to list\n", &god->name, god->id); |
66 | LOG (llevDebug, "Adding god %s (%d) to list\n", &god->name, god->id); |
67 | #endif |
67 | #endif |
68 | } |
68 | } |
69 | |
69 | |
70 | /* baptize_altar() - (cosmetically) change the name to that of the |
|
|
71 | * god in question, then set the title for later use. -b.t. |
|
|
72 | */ |
|
|
73 | static int |
|
|
74 | baptize_altar (object *op) |
|
|
75 | { |
|
|
76 | char buf[MAX_BUF]; |
|
|
77 | |
|
|
78 | /* if the title field is pre-set, then that altar is |
|
|
79 | * already dedicated. */ |
|
|
80 | if (!op->title) |
|
|
81 | { |
|
|
82 | godlink *god = get_rand_god (); |
|
|
83 | |
|
|
84 | if (!god || !god->name) |
|
|
85 | { |
|
|
86 | LOG (llevError, "baptise_altar(): bizarre nameless god!\n"); |
|
|
87 | return 0; |
|
|
88 | } |
|
|
89 | /* if the object name hasnt' been changed, we tack on the gods name */ |
|
|
90 | if (op->name == op->arch->object::name) |
|
|
91 | { |
|
|
92 | sprintf (buf, "%s of %s", &op->name, &god->name); |
|
|
93 | op->name = buf; |
|
|
94 | } |
|
|
95 | op->title = god->name; |
|
|
96 | return 1; |
|
|
97 | } |
|
|
98 | return 0; |
|
|
99 | } |
|
|
100 | |
|
|
101 | godlink * |
70 | godlink * |
102 | get_rand_god (void) |
71 | get_rand_god () |
103 | { |
72 | { |
104 | godlink *god = first_god; |
73 | godlink *god = first_god; |
105 | int i; |
74 | int i; |
106 | |
75 | |
107 | if (god) |
76 | if (god) |
… | |
… | |
125 | return godlnk && godlnk->arch |
94 | return godlnk && godlnk->arch |
126 | ? godlnk->arch |
95 | ? godlnk->arch |
127 | : 0; |
96 | : 0; |
128 | } |
97 | } |
129 | |
98 | |
130 | void |
|
|
131 | free_all_god (void) |
|
|
132 | { |
|
|
133 | godlink *god, *godnext; |
|
|
134 | |
|
|
135 | LOG (llevDebug, "Freeing god information\n"); |
|
|
136 | for (god = first_god; god; god = godnext) |
|
|
137 | { |
|
|
138 | godnext = god->next; |
|
|
139 | delete god; |
|
|
140 | } |
|
|
141 | } |
|
|
142 | |
|
|
143 | /* init_gods() - this takes a look at all of the archetypes to find |
99 | /* init_gods() - this takes a look at all of the archetypes to find |
144 | * the objects which correspond to the GODS (type GOD) */ |
100 | * the objects which correspond to the GODS (type GOD) */ |
145 | void |
101 | void |
146 | init_gods (void) |
102 | init_gods () |
147 | { |
103 | { |
148 | LOG (llevDebug, "Initialising gods...\n"); |
104 | LOG (llevDebug, "Initialising gods...\n"); |
149 | |
105 | |
150 | for_all_archetypes (at) |
106 | for_all_archetypes (at) |
151 | if (at->type == GOD) |
107 | if (at->type == GOD) |