1 | /* |
1 | /* |
2 | CrossFire, A Multiplayer game for X-windows |
2 | CrossFire, A Multiplayer game for X-windows |
3 | |
3 | |
|
|
4 | Copyright (C) 2005, 2006, 2007 Marc Lehmann & Crossfire+ Development Team |
4 | Copyright (C) 2001 Mark Wedel & Crossfire Development Team |
5 | Copyright (C) 2001 Mark Wedel & Crossfire Development Team |
5 | Copyright (C) 1992 Frank Tore Johansen |
6 | Copyright (C) 1992 Frank Tore Johansen |
6 | |
7 | |
7 | This program is free software; you can redistribute it and/or modify |
8 | This program is free software; you can redistribute it and/or modify |
8 | it under the terms of the GNU General Public License as published by |
9 | it under the terms of the GNU General Public License as published by |
… | |
… | |
240 | */ |
241 | */ |
241 | object *ACC (RW, more); /* Pointer to the rest of a large body of objects */ |
242 | object *ACC (RW, more); /* Pointer to the rest of a large body of objects */ |
242 | object *head; /* Points to the main object of a large body */ // NO ACC, perl semantics are different |
243 | object *head; /* Points to the main object of a large body */ // NO ACC, perl semantics are different |
243 | client_container *seen_by; // seen by which player/container currently? |
244 | client_container *seen_by; // seen by which player/container currently? |
244 | |
245 | |
245 | static vector active; // active objects, not yet used |
246 | //static vector active_list; // active objects, not yet used |
246 | static vector objects; // not used yet, use first->next->... |
247 | //static vector object_list; // not used yet, use first->next->... |
247 | static object *first; // will be replaced by "objects" |
248 | static object *first; // will be replaced by "objects" |
248 | |
249 | |
249 | MTH static object *create (); |
250 | MTH static object *create (); |
250 | MTH void copy_to (object *dst); |
251 | MTH void copy_to (object *dst); |
251 | MTH object *clone (); // create + copy_to |
252 | MTH object *clone (); // create + copy_to |
… | |
… | |
288 | MTH void drain_stat (); |
289 | MTH void drain_stat (); |
289 | MTH void drain_specific_stat (int deplete_stats); |
290 | MTH void drain_specific_stat (int deplete_stats); |
290 | MTH void change_luck (int value); |
291 | MTH void change_luck (int value); |
291 | |
292 | |
292 | // info must hold 256 * 3 bytes currently |
293 | // info must hold 256 * 3 bytes currently |
293 | MTH const char *debug_desc (char *info) const; |
294 | const char *debug_desc (char *info) const; |
294 | MTH const char *debug_desc () const; |
295 | MTH const char *debug_desc () const; |
|
|
296 | const char *flag_desc (char *desc, int len) const; |
295 | |
297 | |
296 | MTH bool is_weapon () const { return type == ARROW || type == BOW || type == WEAPON; } |
298 | MTH bool is_weapon () const { return type == ARROW || type == BOW || type == WEAPON; } |
297 | MTH bool is_armor () const { return type == ARMOUR || type == SHIELD || type == HELMET |
299 | MTH bool is_armor () const { return type == ARMOUR || type == SHIELD || type == HELMET |
298 | || type == CLOAK || type == BOOTS || type == GLOVES |
300 | || type == CLOAK || type == BOOTS || type == GLOVES |
299 | || type == BRACERS || type == GIRDLE; } |
301 | || type == BRACERS || type == GIRDLE; } |
… | |
… | |
303 | && !flag [FLAG_IS_A_TEMPLATE]; } |
305 | && !flag [FLAG_IS_A_TEMPLATE]; } |
304 | MTH bool is_arrow () const { return type == ARROW |
306 | MTH bool is_arrow () const { return type == ARROW |
305 | || (type == SPELL_EFFECT |
307 | || (type == SPELL_EFFECT |
306 | && (subtype == SP_BULLET || subtype == SP_MAGIC_MISSILE)); } |
308 | && (subtype == SP_BULLET || subtype == SP_MAGIC_MISSILE)); } |
307 | |
309 | |
|
|
310 | MTH bool has_active_speed () const { return FABS(speed) >= MIN_ACTIVE_SPEED; } |
|
|
311 | |
|
|
312 | // temporary: wether the object can be saved in a map file |
|
|
313 | // contr => is a player |
|
|
314 | // head => only save head of a multitile object |
|
|
315 | // owner => can not reference owner yet |
|
|
316 | MTH bool can_map_save () const { return !contr && !head && !owner; } |
|
|
317 | |
308 | /* This return true if object has still randomitems which |
318 | /* This return true if object has still randomitems which |
309 | * could be expanded. |
319 | * could be expanded. |
310 | */ |
320 | */ |
311 | MTH bool has_random_items () const { return randomitems && !flag [FLAG_IS_A_TEMPLATE]; } |
321 | MTH bool has_random_items () const { return randomitems && !flag [FLAG_IS_A_TEMPLATE]; } |
312 | |
322 | |
… | |
… | |
328 | |
338 | |
329 | // insert object at same map position as 'where' |
339 | // insert object at same map position as 'where' |
330 | // handles both inventory and map "positions" |
340 | // handles both inventory and map "positions" |
331 | MTH object *insert_at (object *where, object *originator = 0, int flags = 0); |
341 | MTH object *insert_at (object *where, object *originator = 0, int flags = 0); |
332 | |
342 | |
|
|
343 | MTH bool active () const; |
|
|
344 | MTH void activate (); |
|
|
345 | MTH void deactivate (); |
|
|
346 | MTH void activate_recursive (); |
|
|
347 | MTH void deactivate_recursive (); |
|
|
348 | |
|
|
349 | // set the givne flag on all objects in the inventory recursively |
|
|
350 | MTH void set_flag_inv (int flag, int value = 1); |
|
|
351 | |
|
|
352 | void enter_exit (object *exit);//PERL |
|
|
353 | MTH void enter_map (maptile *newmap, int x, int y); |
|
|
354 | |
333 | // returns the mapspace this object is in |
355 | // returns the mapspace this object is in |
334 | mapspace &ms () const; |
356 | mapspace &ms () const; |
335 | |
357 | |
336 | // fully recursive iterator |
358 | // fully recursive iterator |
337 | struct iterator_base |
359 | struct iterator_base |
… | |
… | |
346 | operator object *() const { return item; } |
368 | operator object *() const { return item; } |
347 | |
369 | |
348 | object *operator ->() const { return item; } |
370 | object *operator ->() const { return item; } |
349 | object &operator * () const { return *item; } |
371 | object &operator * () const { return *item; } |
350 | }; |
372 | }; |
|
|
373 | |
|
|
374 | MTH unsigned int random_seed () const |
|
|
375 | { |
|
|
376 | return (unsigned int)uuid.seq; |
|
|
377 | } |
351 | |
378 | |
352 | // depth-first recursive iterator |
379 | // depth-first recursive iterator |
353 | struct depth_iterator : iterator_base |
380 | struct depth_iterator : iterator_base |
354 | { |
381 | { |
355 | depth_iterator (object *container); |
382 | depth_iterator (object *container); |