ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/common/material.C
(Generate patch)

Comparing deliantra/server/common/material.C (file contents):
Revision 1.1 by root, Wed Nov 4 00:02:48 2009 UTC vs.
Revision 1.2 by root, Wed Nov 4 00:08:44 2009 UTC

135 op->value = (op->value * lmt->value) / 100; 135 op->value = (op->value * lmt->value) / 100;
136 } 136 }
137 } 137 }
138} 138}
139 139
140//TODO: make this a constructor
141static materialtype_t *
142get_empty_mat (void)
143{
144 materialtype_t *mt;
145 int i;
146
147 mt = new materialtype_t;
148
149 mt->name = shstr_unknown;
150 mt->description = 0;
151
152 for (i = 0; i < NROFATTACKS; i++)
153 {
154 mt->save[i] = 0;
155 mt->mod[i] = 0;
156 }
157
158 mt->chance = 0;
159 mt->difficulty = 0;
160 mt->magic = 0;
161 mt->damage = 0;
162 mt->wc = 0;
163 mt->ac = 0;
164 mt->sp = 0;
165 mt->weight = 100;
166 mt->value = 100;
167 mt->density = 1;
168 mt->next = 0;
169
170 return mt;
171}
172
173void
174load_materials (void)
175{
176 char filename[MAX_BUF];
177
178 sprintf (filename, "%s/materials", settings.datadir);
179 LOG (llevDebug, "Reading material type data from %s...\n", filename);
180
181 //TODO: somehow free old materials, or update them in-place
182 materialt = 0;
183
184 object_thawer thawer (filename);
185
186 if (!thawer)
187 {
188 LOG (llevError, "Cannot open %s for reading\n", filename);
189 goto done;
190 }
191
192 while (thawer.kw != KW_name)
193 {
194 thawer.next ();
195
196 if (thawer.kw == KW_EOF)
197 goto done;
198 }
199
200 materialtype_t *mt;
201
202 for (;;)
203 {
204 switch (thawer.kw)
205 {
206 case KW_name:
207 mt = get_empty_mat ();
208 mt->next = materialt;
209 materialt = mt;
210
211 thawer.get (mt->name);
212 mt->description = mt->name;
213 break;
214
215 case KW_description:
216 thawer.get (mt->description);
217 break;
218
219 case KW_material:
220 thawer.get (mt->material);
221 break;
222
223 case KW_saves:
224 {
225 const char *cp = thawer.get_str () - 1;
226
227 for (int i = 0; i < NROFATTACKS; i++)
228 {
229 if (!cp)
230 {
231 mt->save[i] = 0;
232 continue;
233 }
234
235 int value;
236 ++cp;
237 sscanf (cp, "%d", &value);
238 mt->save[i] = (sint8) value;
239 cp = strchr (cp, ',');
240 }
241 }
242 break;
243
244 case KW_mods:
245 {
246 const char *cp = thawer.get_str () - 1;
247
248 for (int i = 0; i < NROFATTACKS; i++)
249 {
250 if (!cp)
251 {
252 mt->save[i] = 0;
253 continue;
254 }
255
256 ++cp;
257 int value;
258 sscanf (cp, "%d", &value);
259 mt->mod[i] = (sint8) value;
260 cp = strchr (cp, ',');
261 }
262 }
263 break;
264
265 case KW_chance: thawer.get (mt->chance); break;
266 case KW_difficulty: // cf+ alias, not original cf
267 case KW_diff: thawer.get (mt->difficulty); break;
268 case KW_magic: thawer.get (mt->magic); break;
269 case KW_dam: // cf+ alias, not original cf
270 case KW_damage: thawer.get (mt->damage); break;
271 case KW_wc: thawer.get (mt->wc); break;
272 case KW_ac: thawer.get (mt->ac); break;
273 case KW_sp: thawer.get (mt->sp); break;
274 case KW_weight: thawer.get (mt->weight); break;
275 case KW_value: thawer.get (mt->value); break;
276 case KW_density: thawer.get (mt->density); break;
277
278 case KW_EOF:
279 goto done;
280
281 default:
282 if (!thawer.parse_error ("materials file", "materials"))
283 goto done;
284 break;
285 }
286
287 thawer.next ();
288 }
289
290done:
291 if (!materialt)
292 materialt = get_empty_mat ();
293
294 LOG (llevDebug, "Done.\n");
295}
296

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines