1 | /* |
1 | /* |
2 | * This file is part of Deliantra, the Roguelike Realtime MMORPG. |
2 | * This file is part of Deliantra, the Roguelike Realtime MMORPG. |
3 | * |
3 | * |
|
|
4 | * Copyright (©) 2017,2018 Marc Alexander Lehmann / the Deliantra team |
4 | * Copyright (©) 2005,2006,2007,2008,2009,2010,2011 Marc Alexander Lehmann / Robin Redeker / the Deliantra team |
5 | * Copyright (©) 2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016 Marc Alexander Lehmann / Robin Redeker / the Deliantra team |
5 | * Copyright (©) 2003-2005 Mark Wedel & Crossfire Development Team |
6 | * Copyright (©) 2003-2005 Mark Wedel & Crossfire Development Team |
6 | * Copyright (©) 1992 Frank Tore Johansen |
7 | * Copyright (©) 1992 Frank Tore Johansen |
7 | * |
8 | * |
8 | * Deliantra is free software: you can redistribute it and/or modify it under |
9 | * Deliantra is free software: you can redistribute it and/or modify it under |
9 | * the terms of the Affero GNU General Public License as published by the |
10 | * the terms of the Affero GNU General Public License as published by the |
10 | * Free Software Foundation, either version 3 of the License, or (at your |
11 | * Free Software Foundation, either version 3 of the License, or (at your |
11 | * option) any later version. |
12 | * option) any later version. |
12 | * |
13 | * |
13 | * This program is distributed in the hope that it will be useful, |
14 | * This program is distributed in the hope that it will be useful, |
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16 | * GNU General Public License for more details. |
17 | * GNU General Public License for more details. |
17 | * |
18 | * |
18 | * You should have received a copy of the Affero GNU General Public License |
19 | * You should have received a copy of the Affero GNU General Public License |
19 | * and the GNU General Public License along with this program. If not, see |
20 | * and the GNU General Public License along with this program. If not, see |
20 | * <http://www.gnu.org/licenses/>. |
21 | * <http://www.gnu.org/licenses/>. |
21 | * |
22 | * |
22 | * The authors can be reached via e-mail to <support@deliantra.net> |
23 | * The authors can be reached via e-mail to <support@deliantra.net> |
23 | */ |
24 | */ |
24 | |
25 | |
25 | /* This file is best viewed with a window width of about 100 character */ |
26 | /* This file is best viewed with a window width of about 100 character */ |
26 | |
27 | |
… | |
… | |
110 | #define LOCKED_DOOR 20 |
111 | #define LOCKED_DOOR 20 |
111 | #define SPECIAL_KEY 21 |
112 | #define SPECIAL_KEY 21 |
112 | #define MAP 22 |
113 | #define MAP 22 |
113 | #define DOOR 23 |
114 | #define DOOR 23 |
114 | #define KEY 24 |
115 | #define KEY 24 |
115 | //25 |
116 | #define PHYSICS 25 // deliantra: "things that move" |
116 | #define TIMED_GATE 26 |
117 | #define TIMED_GATE 26 |
117 | #define TRIGGER 27 |
118 | #define TRIGGER 27 |
118 | #define GRIMREAPER 28 |
119 | #define GRIMREAPER 28 |
119 | #define MAGIC_EAR 29 |
120 | #define MAGIC_EAR 29 |
120 | #define TRIGGER_BUTTON 30 |
121 | #define TRIGGER_BUTTON 30 |
… | |
… | |
161 | #define GEM 60 |
162 | #define GEM 60 |
162 | #define MENU 61 /* Mark Wedel (mark@pyramid.com) Shop inventories */ |
163 | #define MENU 61 /* Mark Wedel (mark@pyramid.com) Shop inventories */ |
163 | #define FIREWALL 62 |
164 | #define FIREWALL 62 |
164 | #define ANVIL 63 |
165 | #define ANVIL 63 |
165 | #define CHECK_INV 64 /* by b.t. thomas@nomad.astro.psu.edu */ |
166 | #define CHECK_INV 64 /* by b.t. thomas@nomad.astro.psu.edu */ |
166 | #define MOOD_FLOOR 65 /* |
167 | #define MOOD_FLOOR 65 /* |
167 | * values of last_sp set how to change: |
168 | * values of last_sp set how to change: |
168 | * 0 = furious, all monsters become aggressive |
169 | * 0 = furious, all monsters become aggressive |
169 | * 1 = angry, all but friendly become aggressive |
170 | * 1 = angry, all but friendly become aggressive |
170 | * 2 = calm, all aggressive monsters calm down |
171 | * 2 = calm, all aggressive monsters calm down |
171 | * 3 = sleep, all monsters fall asleep |
172 | * 3 = sleep, all monsters fall asleep |
… | |
… | |
246 | |
247 | |
247 | typedef std::bitset<NUM_TYPES> typeset; |
248 | typedef std::bitset<NUM_TYPES> typeset; |
248 | |
249 | |
249 | /* These are the items that currently can change digestion, regeneration, |
250 | /* These are the items that currently can change digestion, regeneration, |
250 | * spell point recovery and mana point recovery. Seems sort of an arbitary |
251 | * spell point recovery and mana point recovery. Seems sort of an arbitary |
251 | * list, but other items store other info into stats array. |
252 | * list, but other items store other info into stats array. |
252 | * As a special exception, bows use stats.sp for their own purposes. |
253 | * As a special exception, bows use stats.sp for their own purposes. |
253 | */ |
254 | */ |
254 | static const struct digest_types : typeset |
255 | static const struct digest_types : typeset |
255 | { |
256 | { |
256 | digest_types () |
257 | digest_types () |
… | |
… | |
283 | |
284 | |
284 | /* Subtypes for MATERIAL */ |
285 | /* Subtypes for MATERIAL */ |
285 | #define ST_MAT_FLOOR 1 /* Floor */ |
286 | #define ST_MAT_FLOOR 1 /* Floor */ |
286 | #define ST_MAT_WALL 2 /* Wall */ |
287 | #define ST_MAT_WALL 2 /* Wall */ |
287 | #define ST_MAT_ITEM 3 /* All other items, including doors & such */ |
288 | #define ST_MAT_ITEM 3 /* All other items, including doors & such */ |
|
|
289 | #define ST_MAT_QUAD 4 /* Quad build material */ |
288 | |
290 | |
289 | /* definitions for weapontypes */ |
291 | /* definitions for weapontypes */ |
290 | |
292 | |
291 | #define WEAP_HIT 0 /* the basic */ |
293 | #define WEAP_HIT 0 /* the basic */ |
292 | #define WEAP_SLASH 1 /* slash */ |
294 | #define WEAP_SLASH 1 /* slash */ |
… | |
… | |
354 | #define PU_FLESH 0x04000000 |
356 | #define PU_FLESH 0x04000000 |
355 | |
357 | |
356 | |
358 | |
357 | /* Instead of using arbitrary constants for indexing the |
359 | /* Instead of using arbitrary constants for indexing the |
358 | * freearr, add these values. <= SIZEOFFREE1 will get you |
360 | * freearr, add these values. <= SIZEOFFREE1 will get you |
359 | * within 1 space. <= SIZEOFFREE2 wll get you withing |
361 | * within 1 space. <= SIZEOFFREE2 wll get you withing |
360 | * 2 spaces, and the entire array (< SIZEOFFREE) is |
362 | * 2 spaces, and the entire array (< SIZEOFFREE) is |
361 | * three spaces |
363 | * three spaces |
362 | */ |
364 | */ |
363 | #define SIZEOFFREE0 0 |
365 | #define SIZEOFFREE0 0 |
364 | #define SIZEOFFREE1 8 |
366 | #define SIZEOFFREE1 8 |
365 | #define SIZEOFFREE2 24 |
367 | #define SIZEOFFREE2 24 |
366 | #define SIZEOFFREE3 48 |
368 | #define SIZEOFFREE3 48 |
367 | #define SIZEOFFREE 49 |
369 | #define SIZEOFFREE 49 |
368 | |
370 | |
369 | #define NROF_SOUNDS (23 + NROFREALSPELLS) /* Number of sounds */ |
371 | #define NROF_SOUNDS (23 + NROFREALSPELLS) /* Number of sounds */ |
370 | |
372 | |
371 | /* |
373 | /* |
372 | * If any FLAG's are added or changed, make sure the flag_names structure in |
374 | * If any FLAG's are added or changed, make sure the flag_names structure in |
373 | * common/loader.C is updated. |
375 | * common/loader.C is updated. |
374 | */ |
376 | */ |
375 | |
377 | |
376 | /* the flags */ |
378 | /* the flags */ |
… | |
… | |
382 | #define FLAG_WIZLOOK 4 /* disable los and lighting */ |
384 | #define FLAG_WIZLOOK 4 /* disable los and lighting */ |
383 | #define FLAG_APPLIED 5 /* Object is ready for use by living */ |
385 | #define FLAG_APPLIED 5 /* Object is ready for use by living */ |
384 | #define FLAG_UNPAID 6 /* Object hasn't been paid for yet */ |
386 | #define FLAG_UNPAID 6 /* Object hasn't been paid for yet */ |
385 | #define FLAG_USE_SHIELD 7 /* Can this creature use a shield? */ |
387 | #define FLAG_USE_SHIELD 7 /* Can this creature use a shield? */ |
386 | #define FLAG_NO_PICK 8 /* Object can't be picked up */ |
388 | #define FLAG_NO_PICK 8 /* Object can't be picked up */ |
387 | /*#define FLAG_WALK_ON 9*/ |
389 | #define FLAG_IS_TRANSPARENT_FLOOR 9 // floor shows things on lower z-level(s), CF: walk_on |
388 | /*#define FLAG_NO_PASS 10*//* Nothing can pass (wall() is true) */ |
390 | /*#define FLAG_NO_PASS 10*//* Nothing can pass (wall() is true) */ |
389 | #define FLAG_ANIMATE 11 /* The object looks at archetype for faces */ |
391 | #define FLAG_ANIMATE 11 /* The object looks at archetype for faces */ |
390 | /*#define FLAG_SLOW_MOVE 12*//* Uses the stats.exp/1000 to slow down */ |
392 | /*#define FLAG_SLOW_MOVE 12*//* Uses the stats.exp/1000 to slow down */ |
391 | /*#define FLAG_FLYING 13*//* Not affected by WALK_ON or SLOW_MOVE) */ |
393 | /*#define FLAG_FLYING 13*//* Not affected by WALK_ON or SLOW_MOVE) */ |
392 | #define FLAG_HIDDEN 13 /* hidden monster (not invisible), TODO: used how, what for? TODO: why not saved? */ |
394 | #define FLAG_HIDDEN 13 /* hidden monster (not invisible), TODO: used how, what for? TODO: why not saved? */ |
… | |
… | |
489 | * load_original_map() */ |
491 | * load_original_map() */ |
490 | #define FLAG_RANDOM_SPEED 104 /* speed_left should be randomised on instantiate */ |
492 | #define FLAG_RANDOM_SPEED 104 /* speed_left should be randomised on instantiate */ |
491 | #define FLAG_ACTIVATE_ON_PUSH 105 /* connected object is activated when 'pushed' */ |
493 | #define FLAG_ACTIVATE_ON_PUSH 105 /* connected object is activated when 'pushed' */ |
492 | #define FLAG_ACTIVATE_ON_RELEASE 106 /* connected object is activated when 'released' */ |
494 | #define FLAG_ACTIVATE_ON_RELEASE 106 /* connected object is activated when 'released' */ |
493 | #define FLAG_IS_WATER 107 /* apparently not used inside the server for anything */ |
495 | #define FLAG_IS_WATER 107 /* apparently not used inside the server for anything */ |
494 | #define FLAG_CONTENT_ON_GEN 108 |
496 | #define FLAG_CONTENT_ON_GEN 108 |
495 | #define FLAG_IS_A_TEMPLATE 109 /* Object has no ingame life until instanciated */ |
497 | #define FLAG_IS_A_TEMPLATE 109 /* Object has no ingame life until instanciated */ |
496 | #define FLAG_IS_BUILDABLE 110 /* Can build on item */ |
498 | #define FLAG_IS_BUILDABLE 110 /* Can build on item */ |
497 | #define FLAG_DESTROY_ON_DEATH 111 /* Object will be destroyed when env dies */ |
499 | #define FLAG_DESTROY_ON_DEATH 111 /* Object will be destroyed when env dies */ |
498 | #define FLAG_NO_MAP_SAVE 112 // item doesn't get saved with map |
500 | #define FLAG_NO_MAP_SAVE 112 // item doesn't get saved with map |
499 | #define FLAG_IS_QUAD 113 /* This is a destructible and buildable item |
501 | #define FLAG_IS_QUAD 113 /* This is a destructible and buildable item |
500 | * (for the quads world for instance) |
502 | * (for the quads world for instance) |
501 | */ |
503 | */ |
502 | |
504 | |
|
|
505 | // temporary assignments |
|
|
506 | #define FLAG_PHYSICS_QUEUE 114 // object queued for physics TODO: temporary allocation |
|
|
507 | |
503 | #define NUM_FLAGS 114 /* Should always be equal to the last |
508 | #define NUM_FLAGS 115 /* Should always be equal to the last |
504 | * defined flag + 1. If you change this, |
509 | * defined flag + 1. |
505 | * make sure you update the flag_links |
|
|
506 | * in common/loader.l |
|
|
507 | */ |
510 | */ |
508 | |
511 | |
509 | /* If you add new movement types, you may need to update |
512 | /* If you add new movement types, you may need to update |
510 | * describe_item() so properly describe those types. |
513 | * describe_item() so properly describe those types. |
511 | * change_abil() probably should be updated also. |
514 | * change_abil() probably should be updated also. |
… | |
… | |
533 | |
536 | |
534 | /* Basic macro to see if if ob1 can not move onto a space based |
537 | /* Basic macro to see if if ob1 can not move onto a space based |
535 | * on the 'type' move_block parameter |
538 | * on the 'type' move_block parameter |
536 | * Add check - if type is 0, don't stop anything from moving |
539 | * Add check - if type is 0, don't stop anything from moving |
537 | * onto it. |
540 | * onto it. |
538 | * |
541 | * |
539 | */ |
542 | */ |
540 | #define OB_TYPE_MOVE_BLOCK(ob1, type) \ |
543 | #define OB_TYPE_MOVE_BLOCK(ob1, type) \ |
541 | ((type) && (ob1->move_type & type) == ob1->move_type) |
544 | ((type) && (ob1->move_type & type) == ob1->move_type) |
542 | |
545 | |
543 | #define GENERATE_SPEED(xyz) ((xyz)->stats.maxsp) /* if(!RANDOM()%<speed>) */ |
546 | #define GENERATE_SPEED(xyz) ((xyz)->stats.maxsp) /* if(!RANDOM()%<speed>) */ |
… | |
… | |
571 | #define F_IDENTIFIED 8 /* flag to calculate value of identified item */ |
574 | #define F_IDENTIFIED 8 /* flag to calculate value of identified item */ |
572 | #define F_NOT_CURSED 16 /* flag to calculate value of uncursed item */ |
575 | #define F_NOT_CURSED 16 /* flag to calculate value of uncursed item */ |
573 | #define F_APPROX 32 /* flag to give a guess of item value */ |
576 | #define F_APPROX 32 /* flag to give a guess of item value */ |
574 | #define F_SHOP 64 /* consider the effect that the shop that the player is in has */ |
577 | #define F_SHOP 64 /* consider the effect that the shop that the player is in has */ |
575 | |
578 | |
576 | #define DIRX(xyz) freearr_x[(xyz)->direction] |
579 | #define DIRX(xyz) freearr_x[(xyz)] |
577 | #define DIRY(xyz) freearr_y[(xyz)->direction] |
580 | #define DIRY(xyz) freearr_y[(xyz)] |
578 | |
581 | |
579 | #define ARMOUR_SPEED(xyz) (xyz)->last_sp |
582 | #define ARMOUR_SPEED(xyz) (xyz)->last_sp |
580 | #define ARMOUR_SPELLS(xyz) (xyz)->gen_sp_armour |
583 | #define ARMOUR_SPELLS(xyz) (xyz)->gen_sp_armour |
581 | #define WEAPON_SPEED(xyz) (xyz)->last_sp |
584 | #define WEAPON_SPEED(xyz) (xyz)->last_sp |
582 | |
585 | |