ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/include/object.h
(Generate patch)

Comparing deliantra/server/include/object.h (file contents):
Revision 1.122 by root, Mon May 14 21:32:26 2007 UTC vs.
Revision 1.127 by root, Sun May 27 23:56:21 2007 UTC

59 59
60/* See common/item.c */ 60/* See common/item.c */
61 61
62typedef struct Body_Locations 62typedef struct Body_Locations
63{ 63{
64 const char *save_name; /* Name used to load/save it to disk */ 64 keyword save_name; /* Name used to load/save it to disk */
65 const char *use_name; /* Name used when describing an item we can use */ 65 const char *use_name; /* Name used when describing an item we can use */
66 const char *nonuse_name; /* Name to describe objects we can't use */ 66 const char *nonuse_name; /* Name to describe objects we can't use */
67} Body_Locations; 67} Body_Locations;
68 68
69extern Body_Locations body_locations[NUM_BODY_LOCATIONS]; 69extern Body_Locations body_locations[NUM_BODY_LOCATIONS];
106#define WILL_APPLY_HANDLE 0x01 106#define WILL_APPLY_HANDLE 0x01
107#define WILL_APPLY_TREASURE 0x02 107#define WILL_APPLY_TREASURE 0x02
108#define WILL_APPLY_EARTHWALL 0x04 108#define WILL_APPLY_EARTHWALL 0x04
109#define WILL_APPLY_DOOR 0x08 109#define WILL_APPLY_DOOR 0x08
110#define WILL_APPLY_FOOD 0x10 110#define WILL_APPLY_FOOD 0x10
111
112/* However, if you're keeping a pointer of some sort, you probably
113 * don't just want it copied, so you'll need to add to common/object.C,
114 * e.g. ->copy_to ()
115 */
116 111
117struct body_slot 112struct body_slot
118{ 113{
119 signed char info:4; /* body info as loaded from the file */ 114 signed char info:4; /* body info as loaded from the file */
120 signed char used:4; /* Calculated value based on items equipped */ 115 signed char used:4; /* Calculated value based on items equipped */
297 { 292 {
298 if (!flag [FLAG_REMOVED]) 293 if (!flag [FLAG_REMOVED])
299 do_remove (); 294 do_remove ();
300 } 295 }
301 296
302 // move this object to the top of its env's inventory to speed up
303 // searches for it.
304 MTH object *inv_splay ()
305 {
306 if (env && env->inv != this)
307 {
308 if (above) above->below = below;
309 if (below) below->above = above;
310
311 above = 0;
312 below = env->inv;
313 below->above = this;
314 env->inv = this;
315 }
316
317 return this;
318 }
319
320 static bool can_merge_slow (object *op1, object *op2); 297 static bool can_merge_slow (object *op1, object *op2);
321 298
322 // this is often used in time-critical code, so optimise 299 // this is often used in time-critical code, so optimise
323 MTH static bool can_merge (object *op1, object *op2) 300 MTH static bool can_merge (object *op1, object *op2)
324 { 301 {
328 } 305 }
329 306
330 MTH void set_owner (object *owner); 307 MTH void set_owner (object *owner);
331 MTH void set_speed (float speed); 308 MTH void set_speed (float speed);
332 MTH bool change_weapon (object *ob); 309 MTH bool change_weapon (object *ob);
310 MTH bool change_skill (object *ob);
333 311
334 MTH void open_container (object *new_container); 312 MTH void open_container (object *new_container);
335 MTH void close_container () 313 MTH void close_container ()
336 { 314 {
337 open_container (0); 315 open_container (0);
316 }
317
318 // overwrite the attachable should_invoke function with a version that also checks ev_want_type
319 bool should_invoke (event_type event)
320 {
321 return ev_want_event [event] || ev_want_type [type] || cb;
338 } 322 }
339 323
340 MTH void instantiate (); 324 MTH void instantiate ();
341 325
342 // recalculate all stats 326 // recalculate all stats
507 491
508 object (); 492 object ();
509 ~object (); 493 ~object ();
510}; 494};
511 495
496// move this object to the top of its env's inventory to speed up
497// searches for it.
498static object *
499splay (object *ob)
500{
501 if (ob->env && ob->env->inv != ob)
502 {
503 if (ob->above) ob->above->below = ob->below;
504 if (ob->below) ob->below->above = ob->above;
505
506 ob->above = 0;
507 ob->below = ob->env->inv;
508 ob->below->above = ob;
509 ob->env->inv = ob;
510 }
511
512 return ob;
513}
514
512typedef object_vector<object, &object::index > objectvec; 515typedef object_vector<object, &object::index > objectvec;
513typedef object_vector<object, &object::active> activevec; 516typedef object_vector<object, &object::active> activevec;
514 517
515extern objectvec objects; 518extern objectvec objects;
516extern activevec actives; 519extern activevec actives;
537} oblinkpt; 540} oblinkpt;
538 541
539object *find_skill_by_name (object *who, const char *name); 542object *find_skill_by_name (object *who, const char *name);
540object *find_skill_by_name (object *who, const shstr &sh); 543object *find_skill_by_name (object *who, const shstr &sh);
541object *find_skill_by_number (object *who, int skillno); 544object *find_skill_by_number (object *who, int skillno);
542int change_skill (object *who, object *new_skill, int flag);
543 545
544/* 546/*
545 * The archetype structure is a set of rules on how to generate and manipulate 547 * The archetype structure is a set of rules on how to generate and manipulate
546 * objects which point to archetypes. 548 * objects which point to archetypes.
547 * This probably belongs in arch.h, but there really doesn't appear to 549 * This probably belongs in arch.h, but there really doesn't appear to

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines