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

Comparing deliantra/server/common/utils.C (file contents):
Revision 1.58 by root, Mon Jun 4 12:19:08 2007 UTC vs.
Revision 1.59 by root, Thu Jun 7 19:12:22 2007 UTC

202 else 202 else
203 total += rndm (size) + 1; 203 total += rndm (size) + 1;
204 } 204 }
205 205
206 return total; 206 return total;
207}
208
209/* decay and destroy perishable items in a map */
210void
211maptile::decay_objects ()
212{
213 if (!spaces)
214 return;
215
216 for (mapspace *ms = spaces + size (); ms-- > spaces; )
217 for (object *above, *op = ms->bot; op; op = above)
218 {
219 above = op->above;
220
221 bool destroy = 0;
222
223 // do not decay anything above unique floor tiles (yet :)
224 if (QUERY_FLAG (op, FLAG_IS_FLOOR) && QUERY_FLAG (op, FLAG_UNIQUE))
225 break;
226
227 if (QUERY_FLAG (op, FLAG_IS_FLOOR)
228 || QUERY_FLAG (op, FLAG_OBJ_ORIGINAL)
229 || QUERY_FLAG (op, FLAG_OBJ_SAVE_ON_OVL)
230 || QUERY_FLAG (op, FLAG_UNIQUE)
231 || QUERY_FLAG (op, FLAG_OVERLAY_FLOOR)
232 || QUERY_FLAG (op, FLAG_UNPAID)
233 || op->is_alive ())
234 ; // do not decay
235 else if (op->is_weapon ())
236 {
237 op->stats.dam--;
238 if (op->stats.dam < 0)
239 destroy = 1;
240 }
241 else if (op->is_armor ())
242 {
243 op->stats.ac--;
244 if (op->stats.ac < 0)
245 destroy = 1;
246 }
247 else if (op->type == FOOD)
248 {
249 op->stats.food -= rndm (5, 20);
250 if (op->stats.food < 0)
251 destroy = 1;
252 }
253 else
254 {
255 int mat = op->materials;
256
257 if (mat & M_PAPER
258 || mat & M_LEATHER
259 || mat & M_WOOD
260 || mat & M_ORGANIC
261 || mat & M_CLOTH
262 || mat & M_LIQUID
263 || (mat & M_IRON && rndm (1, 5) == 1)
264 || (mat & M_GLASS && rndm (1, 2) == 1)
265 || ((mat & M_STONE || mat & M_ADAMANT) && rndm (1, 10) == 1)
266 || ((mat & M_SOFT_METAL || mat & M_BONE) && rndm (1, 3) == 1)
267 || (mat & M_ICE && temp > 32))
268 destroy = 1;
269 }
270
271 /* adjust overall chance below */
272 if (destroy && rndm (0, 1))
273 op->destroy ();
274 }
275} 207}
276 208
277/* convert materialname to materialtype_t */ 209/* convert materialname to materialtype_t */
278 210
279materialtype_t * 211materialtype_t *

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines