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

Comparing deliantra/server/include/define.h (file contents):
Revision 1.12 by root, Fri Sep 29 11:53:08 2006 UTC vs.
Revision 1.26 by elmex, Wed Dec 20 14:11:42 2006 UTC

16 16
17 You should have received a copy of the GNU General Public License 17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software 18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 20
21 The authors can be reached via e-mail at crossfire-devel@real-time.com 21 The authors can be reached via e-mail at crossfire@schmorp.de
22*/ 22*/
23 23
24/* This file is best viewed with a window width of about 100 character */ 24/* This file is best viewed with a window width of about 100 character */
25 25
26/* This file is really too large. With all the .h files 26/* This file is really too large. With all the .h files
43 * The following should still hopefully result in an error. 43 * The following should still hopefully result in an error.
44 */ 44 */
45error - Your ANSI C compiler should be defining __STDC__; 45error - Your ANSI C compiler should be defining __STDC__;
46#endif 46#endif
47 47
48#ifndef WIN32 /* ---win32 exclude unix configuration part */
49# include <autoconf.h> 48#include <autoconf.h>
50#endif
51 49
52#define FONTDIR "" 50#define FONTDIR ""
53#define FONTNAME "" 51#define FONTNAME ""
54 52
55/* Decstations have trouble with fabs()... */ 53/* Decstations have trouble with fabs()... */
114 * Additionally, when you add a new entry, include it in the table in item.c 112 * Additionally, when you add a new entry, include it in the table in item.c
115 */ 113 */
116 114
117/* type 0 will be undefined and shows a non valid type information */ 115/* type 0 will be undefined and shows a non valid type information */
118 116
119#define PLAYER 1 117#define PLAYER 1
120#define TRANSPORT 2 /* see doc/Developers/objects */ 118#define TRANSPORT 2 /* see pod/objects.pod */
121#define ROD 3 119#define ROD 3
122#define TREASURE 4 120#define TREASURE 4
123#define POTION 5 121#define POTION 5
124#define FOOD 6 122#define FOOD 6
125#define POISON 7 123#define POISON 7
126#define BOOK 8 124#define BOOK 8
127#define CLOCK 9 125#define CLOCK 9
128 126
129/*#define FBULLET 10 */ 127/*#define FBULLET 10 */
130
131/*#define FBALL 11 */ 128/*#define FBALL 11 */
132#define LIGHTNING 12 129
133#define ARROW 13 130/*#define LIGHTNING 12 */ // elmex: implemented by type 102 subtype 4
134#define BOW 14 131#define ARROW 13
132#define BOW 14
135#define WEAPON 15 133#define WEAPON 15
136#define ARMOUR 16 134#define ARMOUR 16
137#define PEDESTAL 17 135#define PEDESTAL 17
138#define ALTAR 18 136#define ALTAR 18
139 137
140/*#define CONFUSION 19 */ 138/*#define CONFUSION 19 */
139
141#define LOCKED_DOOR 20 140#define LOCKED_DOOR 20
142#define SPECIAL_KEY 21 141#define SPECIAL_KEY 21
143#define MAP 22 142#define MAP 22
144#define DOOR 23 143#define DOOR 23
145#define KEY 24 144#define KEY 24
146 145
147/*#define MMISSILE 25 */ 146/*#define MMISSILE 25 */
147
148#define TIMED_GATE 26 148#define TIMED_GATE 26
149#define TRIGGER 27 149#define TRIGGER 27
150#define GRIMREAPER 28 150#define GRIMREAPER 28
151#define MAGIC_EAR 29 151#define MAGIC_EAR 29
152#define TRIGGER_BUTTON 30 152#define TRIGGER_BUTTON 30
153#define TRIGGER_ALTAR 31 153#define TRIGGER_ALTAR 31
154#define TRIGGER_PEDESTAL 32 154#define TRIGGER_PEDESTAL 32
155#define SHIELD 33 155#define SHIELD 33
156#define HELMET 34 156#define HELMET 34
157#define HORN 35 157#define HORN 35
158#define MONEY 36 158#define MONEY 36
159#define CLASS 37 /* object for applying character class modifications to someone */ 159#define CLASS 37 /* object for applying character class modifications to someone */
160#define GRAVESTONE 38 160#define GRAVESTONE 38
161#define AMULET 39 161#define AMULET 39
162#define PLAYERMOVER 40 162#define PLAYERMOVER 40
163#define TELEPORTER 41 163#define TELEPORTER 41
164#define CREATOR 42 164#define CREATOR 42
165#define SKILL 43 /* also see SKILL_TOOL (74) below */ 165#define SKILL 43 /* also see SKILL_TOOL (74) below */
166
166#define EXPERIENCE 44 /* This is basically obsolete now. It used to contain */ 167/*#define EXPERIENCE 44*//* This is basically obsolete now. It used to contain
167 /* experience for broad skill categories. This value */ 168 * experience for broad skill categories. This value
168 /* is now automatically converteed at load time. */ 169 * is now automatically converteed at load time.
170 */
171
169#define EARTHWALL 45 172#define EARTHWALL 45
170#define GOLEM 46 173#define GOLEM 46
171 174
172/*#define BOMB 47 */ 175/*#define BOMB 47 */
173#define THROWN_OBJ 48 176#define THROWN_OBJ 48
174#define BLINDNESS 49 177#define BLINDNESS 49
175#define GOD 50 178#define GOD 50
176
177#define DETECTOR 51 /* peterm: detector is an object */ 179#define DETECTOR 51 /* peterm: detector is an object
178 /* which notices the presense of */ 180 * which notices the presense of
179 /* another object and is triggered */ 181 * another object and is triggered
180 /* like buttons. */ 182 * like buttons.
183 */
181#define TRIGGER_MARKER 52 /* inserts an invisible, weightless */ 184#define TRIGGER_MARKER 52 /* inserts an invisible, weightless
182 /* force into a player with a specified string WHEN TRIGGERED. */ 185 * force into a player with a specified string WHEN TRIGGERED.
186 */
183#define DEAD_OBJECT 53 187#define DEAD_OBJECT 53
184#define DRINK 54 188#define DRINK 54
185#define MARKER 55 /* inserts an invisible, weightless */ 189#define MARKER 55 /* inserts an invisible, weightless
186 /* force into a player with a specified string. */ 190 * force into a player with a specified string.
191 */
187#define HOLY_ALTAR 56 192#define HOLY_ALTAR 56
188#define PLAYER_CHANGER 57 193#define PLAYER_CHANGER 57
189#define BATTLEGROUND 58 /* battleground, by Andreas Vogl */ 194#define BATTLEGROUND 58 /* battleground, by Andreas Vogl */
190 195
191#define PEACEMAKER 59 /* Object owned by a player which can convert */ 196#define PEACEMAKER 59 /* Object owned by a player which can convert
192 /* a monster into a peaceful being incapable of attack. */ 197 * a monster into a peaceful being incapable of attack.
193#define GEM 60 198 */
199#define GEM 60
194 200
195 /*#define FIRECHEST 61*//* FIRECHEST folded into FIREWALL */ 201/*#define FIRECHEST 61*/ /* FIRECHEST folded into FIREWALL */
202
196#define FIREWALL 62 203#define FIREWALL 62
197#define ANVIL 63 204#define ANVIL 63
198#define CHECK_INV 64 /* by b.t. thomas@nomad.astro.psu.edu */ 205#define CHECK_INV 64 /* by b.t. thomas@nomad.astro.psu.edu */
199#define MOOD_FLOOR 65 /* by b.t. thomas@nomad.astro.psu.edu 206#define MOOD_FLOOR 65 /* by b.t. thomas@nomad.astro.psu.edu
200 * values of last_sp set how to change: 207 * values of last_sp set how to change:
201 * 0 = furious, all monsters become aggressive 208 * 0 = furious, all monsters become aggressive
202 * 1 = angry, all but friendly become aggressive 209 * 1 = angry, all but friendly become aggressive
203 * 2 = calm, all aggressive monsters calm down 210 * 2 = calm, all aggressive monsters calm down
204 * 3 = sleep, all monsters fall asleep 211 * 3 = sleep, all monsters fall asleep
205 * 4 = charm, monsters become pets */ 212 * 4 = charm, monsters become pets */
206#define EXIT 66 213#define EXIT 66
207#define ENCOUNTER 67 214#define ENCOUNTER 67
208#define SHOP_FLOOR 68 215#define SHOP_FLOOR 68
209#define SHOP_MAT 69 216#define SHOP_MAT 69
210#define RING 70 217#define RING 70
211#define FLOOR 71 /* this is a floor tile -> native layer 0 */ 218#define FLOOR 71 /* this is a floor tile -> native layer 0 */
212#define FLESH 72 /* animal 'body parts' -b.t. */ 219#define FLESH 72 /* animal 'body parts' -b.t. */
213#define INORGANIC 73 /* metals and minerals */ 220#define INORGANIC 73 /* metals and minerals */
214#define SKILL_TOOL 74 /* Allows the use of a skill */ 221#define SKILL_TOOL 74 /* Allows the use of a skill */
215#define LIGHTER 75 222#define LIGHTER 75
216 223
217/* The trap_part, wall, light_source, misc_object, monster, and spawn_generator 224/* random crossfire developer: The trap_part, wall, light_source,
218 * types are not used in any archetypes, and should perhaps be removed. 225 * misc_object, monster, and spawn_generator
226 * types are not used in any archetypes,
227 * and should perhaps be removed.
219 */ 228 *
229 * Wed Dec 20 13:35:24 CET 2006:
230 * elmex: haha, removed TRAP_PART, LIGHT_SOURCE, MONSTER and SPAWN_GENERATOR now.
231 * monsters are marked by FLAG_MONSTER and generator with FLAG_GENERATOR.
232 * renamed WALL to BUILDABLE_WALL.
233 */
234
220#define TRAP_PART 76 /* Needed by set traps skill -b.t. */ 235//#define TRAP_PART 76 /* Needed by set traps skill -b.t. */
221 236
222#define WALL 77 /* this is a wall. put it always in layer 1 if not set is_floor */ 237#define BUILDABLE_WALL 77 /* this is a buildable wall */
238
223#define LIGHT_SOURCE 78 /* torches, lamps, etc. */ 239//#define LIGHT_SOURCE 78 /* torches, lamps, etc. */
240
224#define MISC_OBJECT 79 /* misc. objects are for objects without a function 241#define MISC_OBJECT 79 /* misc. objects are for objects without a function
225 in the engine. Like statues, clocks, chairs,... 242 in the engine. Like statues, clocks, chairs,...
226 If perhaps we create a function where we can sit 243 If perhaps we create a function where we can sit
227 on chairs, we create a new type and remove all 244 on chairs, we create a new type and remove all
228 chairs from here. */ 245 chairs from here. */
229#define MONSTER 80 246//#define MONSTER 80 /* yes, thats a real, living creature */
230 /* yes, thats a real, living creature */ 247//#define SPAWN_GENERATOR 81 /* a spawn point or monster generator object */
231#define SPAWN_GENERATOR 81 248
232 /* a spawn point or monster generator object */ 249#define LAMP 82 /* a lamp */
233#define LAMP 82 /* a lamp */
234#define DUPLICATOR 83 /* duplicator/multiplier object */ 250#define DUPLICATOR 83 /* duplicator/multiplier object */
235#define TOOL 84 /* a tool for building objects */ 251#define TOOL 84 /* a tool for building objects */
236#define SPELLBOOK 85 252#define SPELLBOOK 85
237#define BUILDFAC 86 /* facilities for building objects */ 253#define BUILDFAC 86 /* facilities for building objects */
238#define CLOAK 87 254#define CLOAK 87
239 255
240/*#define CONE 88 */ 256/*#define CONE 88 */
257/*#define AURA 89 */ /* aura spell object */
241 258
242 /*#define AURA 89 *//* aura spell object */
243
244#define SPINNER 90 259#define SPINNER 90
245#define GATE 91 260#define GATE 91
246#define BUTTON 92 261#define BUTTON 92
247#define CF_HANDLE 93 262#define CF_HANDLE 93
248#define HOLE 94 263#define HOLE 94
249#define TRAPDOOR 95 264#define TRAPDOOR 95
250 265
251/*#define WORD_OF_RECALL 96 */ 266/*#define WORD_OF_RECALL 96 */
252
253/*#define PARAIMAGE 97 */ 267/*#define PARAIMAGE 97 */
254#define SIGN 98 268
255#define BOOTS 99 269#define SIGN 98
270#define BOOTS 99
256#define GLOVES 100 271#define GLOVES 100
257#define SPELL 101 272#define SPELL 101
258#define SPELL_EFFECT 102 273#define SPELL_EFFECT 102
259#define CONVERTER 103 274#define CONVERTER 103
260#define BRACERS 104 275#define BRACERS 104
261#define POISONING 105 276#define POISONING 105
262#define SAVEBED 106 277#define SAVEBED 106
278
263#define POISONCLOUD 107 279// #define POISONCLOUD 107
264#define FIREHOLES 108 280// #define FIREHOLES 108
265#define WAND 109
266 281
267/*#define ABILITY 110*/ 282#define WAND 109
283
284/*#define ABILITY 110*/
268#define SCROLL 111 285#define SCROLL 111
269#define DIRECTOR 112 286#define DIRECTOR 112
270#define GIRDLE 113 287#define GIRDLE 113
271#define FORCE 114 288#define FORCE 114
272#define POTION_EFFECT 115 /* a force, holding the effect of a potion */ 289#define POTION_EFFECT 115 /* a force, holding the effect of a potion */
273#define EVENT_CONNECTOR 116/* Lauwenmark: an invisible object holding a plugin event hook */ 290#define EVENT_CONNECTOR 116 /* Lauwenmark: an invisible object holding a plugin event hook */
291
274#define CLOSE_CON 121 /* Eneq(@csd.uu.se): Id for close_container archetype. */ 292#define CLOSE_CON 121 /* Eneq(@csd.uu.se): Id for close_container archetype. */
275#define CONTAINER 122 293#define CONTAINER 122
276#define ARMOUR_IMPROVER 123 294#define ARMOUR_IMPROVER 123
277#define WEAPON_IMPROVER 124 295#define WEAPON_IMPROVER 124
278 296
279/* unused: 125 - 129 297/* unused: 125 - 129
280 * type 125 was MONEY_CHANGER 298 * type 125 was MONEY_CHANGER
281 */ 299 */
300
282#define SKILLSCROLL 130 /* can add a skill to player's inventory -bt. */ 301#define SKILLSCROLL 130 /* can add a skill to player's inventory -bt. */
283#define DEEP_SWAMP 138 302#define DEEP_SWAMP 138
284#define IDENTIFY_ALTAR 139 303#define IDENTIFY_ALTAR 139
285 304
286 /*#define CANCELLATION 141*//* not used with new spell code */ 305/*#define CANCELLATION 141 */ /* not used with new spell code */
306
287#define MENU 150 /* Mark Wedel (mark@pyramid.com) Shop inventories */ 307#define MENU 150 /* Mark Wedel (mark@pyramid.com) Shop inventories */
288 308
289 /*#define BALL_LIGHTNING 151 *//* peterm: ball lightning and color spray */ 309/*#define BALL_LIGHTNING 151 */ /* peterm: ball lightning and color spray */
290
291/*#define SWARM_SPELL 153*/ 310/*#define SWARM_SPELL 153*/
292#define RUNE 154
293#define TRAP 155
294 311
312#define RUNE 154
313#define TRAP 155
314
295#define POWER_CRYSTAL 156 315#define POWER_CRYSTAL 156
296#define CORPSE 157 316#define CORPSE 157
297 317
298#define DISEASE 158 318#define DISEASE 158
299#define SYMPTOM 159 319#define SYMPTOM 159
300#define BUILDER 160 /* Generic item builder, see subtypes */ 320#define BUILDER 160 /* Generic item builder, see subtypes */
301#define MATERIAL 161/* Material for building */ 321#define MATERIAL 161 /* Material for building */
302 322
303/* #define GPS 162 Ground positionning system, moved to Python plugin */ 323/* #define GPS 162 Ground positionning system, moved to Python plugin */
304#define ITEM_TRANSFORMER 163/* Transforming one item with another */ 324#define ITEM_TRANSFORMER 163 /* Transforming one item with another */
325
305#define QUEST 164/* See below for subtypes */ 326/*#define QUEST 164 */ /* See below for subtypes */
327
306#define SAFE_GROUND 165 /* This is a safe ground, means that neither bombs, 328#define SAFE_GROUND 165 /* This is a safe ground, means that neither bombs,
307 potions, alchemy, or magic works here (elmex) */ 329 potions, alchemy, or magic works here (elmex) */
308 330
309/* END TYPE DEFINE */ 331/* END TYPE DEFINE */
310 332
311#define NUM_SUBTYPES 64 // maximum supported subtype number + 1, can be increased to 256 333#define NUM_SUBTYPES 64 // maximum supported subtype number + 1, can be increased to 256
312 334
382#define PU_READABLES 0x00400000 404#define PU_READABLES 0x00400000
383#define PU_MAGIC_DEVICE 0x00800000 405#define PU_MAGIC_DEVICE 0x00800000
384 406
385#define PU_NOT_CURSED 0x01000000 407#define PU_NOT_CURSED 0x01000000
386#define PU_JEWELS 0x02000000 408#define PU_JEWELS 0x02000000
409#define PU_FLESH 0x04000000
387 410
388 411
389/* Instead of using arbitrary constants for indexing the 412/* Instead of using arbitrary constants for indexing the
390 * freearr, add these values. <= SIZEOFFREE1 will get you 413 * freearr, add these values. <= SIZEOFFREE1 will get you
391 * within 1 space. <= SIZEOFFREE2 wll get you withing 414 * within 1 space. <= SIZEOFFREE2 wll get you withing
396#define SIZEOFFREE2 24 419#define SIZEOFFREE2 24
397#define SIZEOFFREE 49 420#define SIZEOFFREE 49
398 421
399#define NROF_SOUNDS (23 + NROFREALSPELLS) /* Number of sounds */ 422#define NROF_SOUNDS (23 + NROFREALSPELLS) /* Number of sounds */
400 423
401/* Flag structure now changed. 424/*
402 * Each flag is now a bit offset, starting at zero. The macros
403 * will update/read the appropriate flag element in the object
404 * structure.
405 *
406 * Hopefully, since these offsets are integer constants set at run time,
407 * the compiler will reduce the macros something as simple as the
408 * old system was.
409 *
410 * Flags now have FLAG as the prefix. This to be clearer, and also
411 * to make sure F_ names are not still being used anyplace.
412 *
413 * The macros below assume that the flag size for each element is 32
414 * bits. IF it is smaller, bad things will happen. See structs.h
415 * for more info.
416 *
417 * All functions should use the macros below. In process of converting
418 * to the new system, I find several files that did not use the previous
419 * macros.
420 *
421 * If any FLAG's are or changed, make sure the flag_names structure in 425 * If any FLAG's are added or changed, make sure the flag_names structure in
422 * common/loader.l is updated. 426 * common/loader.l is updated.
423 *
424 * flags[0] is 0 to 31
425 * flags[1] is 32 to 63
426 * flags[2] is 64 to 95
427 * flags[3] is 96 to 127
428 */ 427 */
429 428
430/* Basic routines to do above */ 429/* Basic routines to do above */
431#define SET_FLAG(xyz, p) \ 430#define SET_FLAG(obj, flag) (obj)->flags[flag] = 1
432 ((xyz)->flags[p/32] |= (1U << (p % 32))) 431#define CLEAR_FLAG(obj, flag) (obj)->flags[flag] = 0
433#define CLEAR_FLAG(xyz, p) \ 432#define QUERY_FLAG(obj, flag) (obj)->flags[flag]
434 ((xyz)->flags[p/32] &= ~(1U << (p % 32)))
435#define QUERY_FLAG(xyz, p) \
436 ((xyz)->flags[p/32] & (1U << (p % 32)))
437#define COMPARE_FLAGS(p,q) \
438 ( \
439 ((p)->flags[0] == (q)->flags[0]) && \
440 ((p)->flags[1] == (q)->flags[1]) && \
441 ((p)->flags[2] == (q)->flags[2]) && \
442 ((p)->flags[3] == (q)->flags[3]) \
443 )
444
445/* convenience macros to determine what kind of things we are dealing with */
446
447#define IS_WEAPON(op) \
448 (op->type == ARROW || op->type == BOW || op->type == WEAPON)
449
450#define IS_ARMOR(op) \
451 (op->type == ARMOUR || op->type == SHIELD || op->type == HELMET || \
452 op->type == CLOAK || op->type == BOOTS || op->type == GLOVES || \
453 op->type == BRACERS || op->type == GIRDLE)
454
455#define IS_LIVE(op) \
456 ((op->type == PLAYER || QUERY_FLAG(op, FLAG_MONSTER) || \
457 (QUERY_FLAG(op, FLAG_ALIVE) && !QUERY_FLAG(op, FLAG_GENERATOR) && \
458 !op->type == DOOR)) && (!QUERY_FLAG(op,FLAG_IS_A_TEMPLATE)))
459
460#define IS_ARROW(op) \
461 (op->type==ARROW || \
462 (op->type==SPELL_EFFECT && \
463 (op->subtype == SP_BULLET || op->subtype == SP_MAGIC_MISSILE)))
464
465/* This return TRUE if object has still randomitems which
466 * could be expanded.
467 */
468#define HAS_RANDOM_ITEMS(op) (op->randomitems && (!QUERY_FLAG(op,FLAG_IS_A_TEMPLATE)))
469 433
470/* the flags */ 434/* the flags */
471 435
472#define FLAG_ALIVE 0 /* Object can fight (or be fought) */ 436#define FLAG_ALIVE 0 /* Object can fight (or be fought) */
473#define FLAG_WIZ 1 /* Object has special privilegies */ 437#define FLAG_WIZ 1 /* Object has special privilegies */
494 458
495#define FLAG_GENERATOR 16 /* Will generate type ob->stats.food */ 459#define FLAG_GENERATOR 16 /* Will generate type ob->stats.food */
496#define FLAG_IS_THROWN 17 /* Object is designed to be thrown. */ 460#define FLAG_IS_THROWN 17 /* Object is designed to be thrown. */
497#define FLAG_AUTO_APPLY 18 461#define FLAG_AUTO_APPLY 18
498 /* Will be applied when created */ 462 /* Will be applied when created */
499#define FLAG_TREASURE 19 /* Will generate treasure when applied */ 463 // not used anywhere in the code // #define FLAG_TREASURE 19 /* Will generate treasure when applied */
500#define FLAG_PLAYER_SOLD 20 /* Object was sold to a shop by a player. */ 464#define FLAG_PLAYER_SOLD 20 /* Object was sold to a shop by a player. */
501#define FLAG_SEE_INVISIBLE 21 /* Will see invisible player */ 465#define FLAG_SEE_INVISIBLE 21 /* Will see invisible player */
502#define FLAG_CAN_ROLL 22 /* Object can be rolled */ 466#define FLAG_CAN_ROLL 22 /* Object can be rolled */
503#define FLAG_OVERLAY_FLOOR 23 /* Object is an overlay floor */ 467#define FLAG_OVERLAY_FLOOR 23 /* Object is an overlay floor */
504#define FLAG_IS_TURNABLE 24 /* Object can change face with direction */ 468#define FLAG_IS_TURNABLE 24 /* Object can change face with direction */
1031 * 995 *
1032 * 0.94.2 - you probably shouldn't need to change any of the rand stuff 996 * 0.94.2 - you probably shouldn't need to change any of the rand stuff
1033 * here. 997 * here.
1034 */ 998 */
1035 999
1036#ifdef HAVE_SRANDOM
1037# define RANDOM() random() 1000#define RANDOM() random()
1038# define SRANDOM(xyz) srandom(xyz) 1001#define SRANDOM(xyz) srandom(xyz)
1039#else
1040# ifdef HAVE_SRAND48
1041# define RANDOM() lrand48()
1042# define SRANDOM(xyz) srand48(xyz)
1043# else
1044# ifdef HAVE_SRAND
1045# define RANDOM() rand()
1046# define SRANDOM(xyz) srand(xyz)
1047# else
1048# error "Could not find a usable random routine"
1049# endif
1050# endif
1051#endif
1052 1002
1053/* Returns the weight of the given object. Note: it does not take the number of 1003/* Returns the weight of the given object. Note: it does not take the number of
1054 * items (nrof) into account. 1004 * items (nrof) into account.
1055 */ 1005 */
1056#define WEIGHT(op) (op->nrof?op->weight:op->weight+op->carrying) 1006#define WEIGHT(op) (op->nrof?op->weight:op->weight+op->carrying)

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines