… | |
… | |
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 | */ |
103 | void |
109 | void |
104 | transmute_materialname (object *op, const object *change) |
110 | transmute_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 | |
305 | done: |
310 | done: |
306 | if (!materialt) |
|
|
307 | materialt = new materialtype_t; |
|
|
308 | |
|
|
309 | LOG (llevDebug, "Done.\n"); |
311 | LOG (llevDebug, "Done.\n"); |
310 | } |
312 | } |
311 | |
313 | |