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.5 by root, Tue Nov 10 04:38:45 2009 UTC vs.
Revision 1.6 by root, Tue Nov 10 16:02:06 2009 UTC

59 description = shstr_unknown_material_description; 59 description = shstr_unknown_material_description;
60 material = 0; 60 material = 0;
61 61
62 for (int i = 0; i < NROFATTACKS; i++) 62 for (int i = 0; i < NROFATTACKS; i++)
63 { 63 {
64 save [i] = 10; 64 save [i] = 0;
65 mod [i] = 9; 65 mod [i] = 0;
66 } 66 }
67 67
68 chance = 0; 68 chance = 0;
69 difficulty = 0; 69 difficulty = 0;
70 magic = 0; 70 magic = 0;
89 89
90 // create a new material of the given name 90 // create a new material of the given name
91 materialtype_t *mt = new materialtype_t; 91 materialtype_t *mt = new materialtype_t;
92 mt->name = name; 92 mt->name = name;
93 93
94 mt->next = materialt; 94 // make it susceptible to attacks
95 materialt = mt; 95 for (int i = 0; i < NROFATTACKS; i++)
96 {
97 mt->save [i] = 10;
98 mt->mod [i] = 9;
99 }
100
101 mt->next = materialt; materialt = mt;
96 102
97 return mt; 103 return mt;
98} 104}
99 105
100/* when doing transmutation of objects, we have to recheck the resistances, 106/* when doing transmutation of objects, we have to recheck the resistances,
101 * as some that did not apply previously, may apply now. 107 * as some that did not apply previously, may apply now.
102 */ 108 */
103void 109void
104transmute_materialname (object *op, const object *change) 110transmute_materialname (object *op, const object *change)
105{ 111{
106 int j; 112 if (!op->is_armor ())
113 return;
114
115 if (op->material == &material_null)
116 return;
107 117
108 if (op->material != change->material) 118 if (op->material != change->material)
109 return; 119 return;
110 120
111 if (!op->is_armor ())
112 return;
113
114 materialtype_t *mt = op->material; 121 materialtype_t *mt = op->material;
115 122
116 for (j = 0; j < NROFATTACKS; j++) 123 for (int j = 0; j < NROFATTACKS; j++)
117 if (op->resist[j] == 0 && change->resist[j] != 0) 124 if (op->resist[j] == 0 && change->resist[j] != 0)
118 { 125 {
119 op->resist[j] += mt->mod[j]; 126 op->resist[j] += mt->mod[j];
120 127
121 if (op->resist[j] > 100) op->resist[j] = 100; 128 if (op->resist[j] > 100) op->resist[j] = 100;
191 198
192 sprintf (filename, "%s/materials", settings.datadir); 199 sprintf (filename, "%s/materials", settings.datadir);
193 LOG (llevDebug, "Reading material type data from %s...\n", filename); 200 LOG (llevDebug, "Reading material type data from %s...\n", filename);
194 201
195 //TODO: somehow free old materials, or update them in-place 202 //TODO: somehow free old materials, or update them in-place
196 material_null.next = 0; 203 material_null.next = 0; materialt = &material_null;
197 materialt = &material_null;
198 204
199 object_thawer thawer (filename); 205 object_thawer thawer (filename);
200 206
201 if (!thawer) 207 if (!thawer)
202 { 208 {
221 case KW_name: 227 case KW_name:
222 mt = new materialtype_t; 228 mt = new materialtype_t;
223 thawer.get (mt->name); 229 thawer.get (mt->name);
224 mt->description = mt->name; 230 mt->description = mt->name;
225 231
226 mt->next = materialt; 232 mt->next = materialt; materialt = mt;
227 materialt = mt;
228 break; 233 break;
229 234
230 case KW_description: 235 case KW_description:
231 thawer.get (mt->description); 236 thawer.get (mt->description);
232 break; 237 break;
301 306
302 thawer.next (); 307 thawer.next ();
303 } 308 }
304 309
305done: 310done:
306 if (!materialt)
307 materialt = new materialtype_t;
308
309 LOG (llevDebug, "Done.\n"); 311 LOG (llevDebug, "Done.\n");
310} 312}
311 313

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines