|
Atrinik Server 2.5
|
00001 /************************************************************************ 00002 * Atrinik, a Multiplayer Online Role Playing Game * 00003 * * 00004 * Copyright (C) 2009-2011 Alex Tokar and Atrinik Development Team * 00005 * * 00006 * Fork from Daimonin (Massive Multiplayer Online Role Playing Game) * 00007 * and Crossfire (Multiplayer game for X-windows). * 00008 * * 00009 * This program is free software; you can redistribute it and/or modify * 00010 * it under the terms of the GNU General Public License as published by * 00011 * the Free Software Foundation; either version 2 of the License, or * 00012 * (at your option) any later version. * 00013 * * 00014 * This program is distributed in the hope that it will be useful, * 00015 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 00016 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 00017 * GNU General Public License for more details. * 00018 * * 00019 * You should have received a copy of the GNU General Public License * 00020 * along with this program; if not, write to the Free Software * 00021 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * 00022 * * 00023 * The author can be reached at admin@atrinik.org * 00024 ************************************************************************/ 00025 00038 #ifndef DEFINE_H 00039 #define DEFINE_H 00040 00041 /* Crossfire requires ANSI-C, but some compilers "forget" to define it. 00042 * Thus the prototypes made by cextract don't get included correctly. */ 00043 #if !defined(__STDC__) 00044 # error "Your ANSI C compiler should be defining __STDC__"; 00045 #endif 00046 00047 /* Decstations have trouble with fabs()... */ 00048 #define FABS(x) ((x) < 0 ? -(x) : (x)) 00049 #define abs(x) ((x) < 0 ? -(x) : (x)) 00050 00051 #ifdef __NetBSD__ 00052 # include <sys/param.h> 00053 #endif 00054 00055 #ifndef MIN 00056 # define MIN(x, y) ((x) < (y) ? (x) : (y)) 00057 #endif 00058 #ifndef MAX 00059 # define MAX(x, y) ((x) > (y) ? (x) : (y)) 00060 #endif 00061 #ifndef SGN 00062 # define SGN(x) ((x) > 0 ? 1 : ((x) < 0 ? -1 : 0)) 00063 #endif 00064 00065 #ifndef NAME_MAX 00066 # define NAME_MAX 255 00067 #endif 00068 00070 #define MAX_STAT 30 00071 00072 #define MIN_STAT 1 00073 00078 #define MAX_BUF 256 00079 #define VERY_BIG_BUF 1024 00080 00081 #define HUGE_BUF 4096 00082 00083 #define MAX_NAME 16 00084 #define BIG_NAME 32 00085 #define MAX_EXT_TITLE 98 00086 00088 #define MAX_ANIMATIONS 256 00089 00095 #define IDENTIFY_NORMAL 0 00096 00097 #define IDENTIFY_ALL 1 00098 00099 #define IDENTIFY_MARKED 2 00100 00107 #define SPLIST_MODE_ADD 0 00108 00109 #define SPLIST_MODE_REMOVE 1 00110 00111 #define SPLIST_MODE_UPDATE 2 00112 00115 #define CHOSEN_SKILL_NO (99999) 00116 00118 #define PORTAL_DESTINATION_NAME "Town portal destination" 00119 #define PORTAL_ACTIVE_NAME "Existing town portal" 00120 00126 #define BLOCKED_LOS_VISIBLE 0x00 00127 00128 #define BLOCKED_LOS_IGNORE 0x01 00129 00130 #define BLOCKED_LOS_BLOCKSVIEW 0x02 00131 00132 #define BLOCKED_LOS_BLOCKED 0x04 00133 00134 #define BLOCKED_LOS_OUT_OF_MAP 0x08 00135 00158 #define PLAYER 1 00159 00161 #define BULLET 2 00162 00164 #define ROD 3 00165 00167 #define TREASURE 4 00168 00170 #define POTION 5 00171 00173 #define FOOD 6 00174 00176 #define POISON 7 00177 00179 #define BOOK 8 00180 00182 #define CLOCK 9 00183 00185 #define MATERIAL 10 00186 00188 #define DUPLICATOR 11 00189 00191 #define LIGHTNING 12 00192 00194 #define ARROW 13 00195 00197 #define BOW 14 00198 00200 #define WEAPON 15 00201 00203 #define ARMOUR 16 00204 00206 #define PEDESTAL 17 00207 00209 #define ALTAR 18 00210 00212 #define CONFUSION 19 00213 00215 #define DOOR 20 00216 00218 #define KEY 21 00219 #define MAP 22 00220 00222 #define MMISSILE 25 00223 00225 #define TIMED_GATE 26 00226 00228 #define TRIGGER 27 00229 00231 #define MAGIC_MIRROR 28 00232 00234 #define MAGIC_EAR 29 00235 00237 #define TRIGGER_BUTTON 30 00238 00240 #define TRIGGER_ALTAR 31 00241 00243 #define TRIGGER_PEDESTAL 32 00244 00246 #define SHIELD 33 00247 00249 #define HELMET 34 00250 00252 #define HORN 35 00253 00255 #define MONEY 36 00256 00258 #define CLASS 37 00259 00261 #define GRAVESTONE 38 00262 00264 #define AMULET 39 00265 00267 #define PLAYERMOVER 40 00268 00270 #define TELEPORTER 41 00271 00273 #define CREATOR 42 00274 00276 #define SKILL 43 00277 00279 #define EXPERIENCE 44 00280 00282 #define BOMB 47 00283 00285 #define THROWN_OBJ 48 00286 00288 #define BLINDNESS 49 00289 00291 #define GOD 50 00292 00295 #define DETECTOR 51 00296 00298 #define SKILL_ITEM 52 00299 00301 #define DEAD_OBJECT 53 00302 00304 #define DRINK 54 00305 00308 #define MARKER 55 00309 00311 #define HOLY_ALTAR 56 00312 00314 #define PEARL 59 00315 00317 #define GEM 60 00318 00320 #define FIREWALL 62 00321 00323 #define CHECK_INV 64 00324 00334 #define MOOD_FLOOR 65 00335 00337 #define EXIT 66 00338 00340 #define SHOP_FLOOR 68 00341 00343 #define SHOP_MAT 69 00344 00346 #define RING 70 00347 00349 #define FLOOR 71 00350 00352 #define FLESH 72 00353 00355 #define INORGANIC 73 00356 00358 #define LIGHT_APPLY 74 00359 00361 #define LIGHTER 75 00362 00364 #define WALL 77 00365 00367 #define LIGHT_SOURCE 78 00368 00371 #define MISC_OBJECT 79 00372 00374 #define MONSTER 80 00375 00377 #define SPAWN_POINT 81 00378 00380 #define LIGHT_REFILL 82 00381 00383 #define SPAWN_POINT_MOB 83 00384 00386 #define SPAWN_POINT_INFO 84 00387 00389 #define SPELLBOOK 85 00390 00392 #define ORGANIC 86 00393 00395 #define CLOAK 87 00396 00398 #define CONE 88 00399 00401 #define SPINNER 90 00402 00404 #define GATE 91 00405 00407 #define BUTTON 92 00408 00410 #define HANDLE 93 00411 00414 #define PIT 94 00415 00417 #define TRAPDOOR 95 00418 00420 #define WORD_OF_RECALL 96 00421 00423 #define SIGN 98 00424 00426 #define BOOTS 99 00427 00429 #define GLOVES 100 00430 00432 #define BASE_INFO 101 00433 00439 #define RANDOM_DROP 102 00440 00442 #define CONVERTER 103 00443 00445 #define BRACERS 104 00446 00448 #define POISONING 105 00449 00451 #define SAVEBED 106 00452 00454 #define WAND 109 00455 00457 #define ABILITY 110 00458 00460 #define SCROLL 111 00461 00463 #define DIRECTOR 112 00464 00466 #define GIRDLE 113 00467 00469 #define FORCE 114 00470 00472 #define POTION_EFFECT 115 00473 00475 #define JEWEL 116 00476 00478 #define NUGGET 117 00479 00481 #define EVENT_OBJECT 118 00482 00484 #define WAYPOINT_OBJECT 119 00485 00487 #define QUEST_CONTAINER 120 00488 00490 #define CLOSE_CON 121 00491 00493 #define CONTAINER 122 00494 00496 #define ARMOUR_IMPROVER 123 00497 00499 #define WEAPON_IMPROVER 124 00500 00503 #define WEALTH 125 00504 00506 #define BEACON 126 00507 00509 #define MAP_EVENT_OBJ 127 00510 00512 #define SKILLSCROLL 130 00513 00515 #define DEEP_SWAMP 138 00516 00518 #define IDENTIFY_ALTAR 139 00519 00521 #define COMPASS 151 00522 00524 #define MAP_INFO 152 00525 00527 #define SWARM_SPELL 153 00528 00530 #define RUNE 154 00531 00533 #define CLIENT_MAP_INFO 155 00534 00536 #define POWER_CRYSTAL 156 00537 00539 #define CORPSE 157 00540 00542 #define DISEASE 158 00543 00545 #define SYMPTOM 159 00546 00548 #define VOID_CONTAINER 255 00549 00561 #define ST1_MISSILE_BOW 1 00562 00563 #define ST1_MISSILE_CBOW 2 00564 00565 #define ST1_MISSILE_SSTONE 3 00566 00567 #define ST1_MISSILE_THROW 128 00568 00576 #define ST1_MISSILE_IMPACT (ST1_MISSILE_THROW | 0) 00577 00578 #define ST1_MISSILE_SLASH (ST1_MISSILE_THROW | 1) 00579 00580 #define ST1_MISSILE_PIERCE (ST1_MISSILE_THROW | 2) 00581 00582 #define ST1_MISSILE_CLEAVE (ST1_MISSILE_THROW | 3) 00583 00584 #define ST1_MISSILE_BOULDER (ST1_MISSILE_THROW | 4) 00585 00592 #define WEAP_1H_IMPACT 0 00593 00594 #define WEAP_1H_SLASH 1 00595 00596 #define WEAP_1H_PIERCE 2 00597 00598 #define WEAP_1H_CLEAVE 3 00599 00608 #define WEAP_2H_IMPACT 4 00609 00610 #define WEAP_2H_SLASH 5 00611 00612 #define WEAP_2H_PIERCE 6 00613 00614 #define WEAP_2H_CLEAVE 7 00615 00622 #define WEAP_POLE_IMPACT 8 00623 00624 #define WEAP_POLE_SLASH 9 00625 00626 #define WEAP_POLE_PIERCE 10 00627 00628 #define WEAP_POLE_CLEAVE 11 00629 00636 #define RANGE_WEAP_BOW 0 00637 00638 #define RANGE_WEAP_XBOWS 1 00639 00640 #define RANGE_WEAP_SLINGS 2 00641 00642 #define RANGE_WEAP_FIREARMS 3 00643 00651 #define ST1_SKILL_NORMAL 0 00652 00653 #define ST1_SKILL_USE 1 00654 00655 #define ST1_SKILL_INDIRECT 2 00656 00663 #define ST1_SPELLBOOK_CLERIC 1 00664 00665 #define ST1_SPELLBOOK_MAGE 2 00666 00682 #define ST1_CONTAINER_NORMAL 0 00683 00684 #define ST1_CONTAINER_CORPSE 1 00685 00686 #define ST1_CONTAINER_DEAD_PL 2 00687 00689 #define ST1_CONTAINER_NORMAL_player 64 00690 00691 #define ST1_CONTAINER_CORPSE_player 65 00692 00694 #define ST1_CONTAINER_NORMAL_party 128 00695 00696 #define ST1_CONTAINER_CORPSE_party 129 00697 00703 #define ST1_EXIT_SOUND_NO 0 00704 #define ST1_EXIT_SOUND 1 00705 00712 #define ST1_DOOR_NORMAL 0 00713 00714 #define ST1_DOOR_CURTAIN 1 00715 00722 #define ST_BD_REMOVE 1 00723 00724 #define ST_BD_BUILD 2 00725 00732 #define ST_MAT_FLOOR 1 00733 00734 #define ST_MAT_WALL 2 00735 00736 #define ST_MAT_ITEM 3 00737 00738 #define ST_MAT_WIN 4 00739 00746 #define CLIENT_MAP_LABEL 1 00747 00748 #define CLIENT_MAP_TOOLTIP 2 00749 00750 #define CLIENT_MAP_HIDE 3 00751 00754 00763 #define SIZEOFFREE1 8 00764 #define SIZEOFFREE2 24 00765 #define SIZEOFFREE 49 00766 00769 #define NROFREALSPELLS 52 00770 00771 #define NRSPELLPATHS 20 00772 00781 #define TERRAIN_NOTHING 0 00782 00783 #define TERRAIN_AIRBREATH 1 00784 00785 #define TERRAIN_WATERWALK 2 00786 00787 #define TERRAIN_WATERBREATH 4 00788 00789 #define TERRAIN_FIREWALK 8 00790 00791 #define TERRAIN_FIREBREATH 16 00792 00793 #define TERRAIN_CLOUDWALK 32 00794 00795 #define TERRAIN_ALL 0xffff 00796 00838 #define SET_FLAG(xyz, p) \ 00839 ((xyz)->flags[p / 32] |= (1U << (p % 32))) 00840 00845 #define CLEAR_FLAG(xyz, p) \ 00846 ((xyz)->flags[p / 32] &= ~(1U << (p % 32))) 00847 00852 #define QUERY_FLAG(xyz, p) \ 00853 ((xyz)->flags[p / 32] & (1U << (p % 32))) 00854 00864 #define SET_MULTI_FLAG(xyz, p) \ 00865 { \ 00866 object *_tos_; \ 00867 \ 00868 for (_tos_ = xyz; _tos_; _tos_ = _tos_->more) \ 00869 { \ 00870 ((_tos_)->flags[p / 32] |= (1U << (p % 32))); \ 00871 } \ 00872 } 00873 00874 #define CLEAR_MULTI_FLAG(xyz, p) \ 00875 { \ 00876 object *_tos_; \ 00877 \ 00878 for (_tos_ = xyz; _tos_; _tos_ = _tos_->more) \ 00879 { \ 00880 ((_tos_)->flags[p / 32] &= ~(1U << (p % 32))); \ 00881 } \ 00882 } 00883 00890 #define IS_WEAPON(op) (op->type == ARROW || op->type == BOW || op->type == WEAPON) 00891 00892 #define IS_ARMOR(op) (op->type == ARMOUR || op->type == SHIELD || op->type == HELMET || op->type == CLOAK || op->type == BOOTS || op->type == GLOVES || op->type == BRACERS || op->type == GIRDLE) 00893 00894 #define IS_LIVE(op) ((op)->type == PLAYER || QUERY_FLAG((op), FLAG_MONSTER) || QUERY_FLAG((op), FLAG_ALIVE)) 00895 00896 #define IS_ARROW(op) (op->type == ARROW || op->type == MMISSILE || op->type == BULLET) 00897 00898 #define IS_ATTACK_SPELL(op) ((op)->type == MMISSILE || (op)->type == BULLET || (op)->type == CONE || (op)->type == LIGHTNING) 00899 00919 #define FLAG_SLEEP 0 00920 00922 #define FLAG_CONFUSED 1 00923 00925 #define FLAG_PARALYZED 2 00926 00928 #define FLAG_SCARED 3 00929 00931 #define FLAG_BLIND 4 00932 00934 #define FLAG_IS_INVISIBLE 5 00935 00937 #define FLAG_IS_ETHEREAL 6 00938 00940 #define FLAG_IS_GOOD 7 00941 00943 #define FLAG_NO_PICK 8 00944 00946 #define FLAG_WALK_ON 9 00947 00949 #define FLAG_NO_PASS 10 00950 00952 #define FLAG_ANIMATE 11 00953 00955 #define FLAG_SLOW_MOVE 12 00956 00957 #define FLAG_FLYING 13 00958 00960 #define FLAG_MONSTER 14 00961 00963 #define FLAG_FRIENDLY 15 00964 00966 #define FLAG_REMOVED 16 00967 00969 #define FLAG_BEEN_APPLIED 17 00970 00972 #define FLAG_AUTO_APPLY 18 00973 00975 #define FLAG_IS_READY 19 00976 00978 #define FLAG_IS_NEUTRAL 20 00979 00981 #define FLAG_SEE_INVISIBLE 21 00982 00984 #define FLAG_CAN_ROLL 22 00985 00989 #define FLAG_CONNECT_RESET 23 00990 00992 #define FLAG_IS_TURNABLE 24 00993 00995 #define FLAG_WALK_OFF 25 00996 00998 #define FLAG_FLY_ON 26 00999 01001 #define FLAG_FLY_OFF 27 01002 01004 #define FLAG_IS_USED_UP 28 01005 01007 #define FLAG_IDENTIFIED 29 01008 01010 #define FLAG_REFLECTING 30 01011 01013 #define FLAG_CHANGING 31 01014 01015 /* Start of values in flags[1] */ 01016 01020 #define FLAG_SPLITTING 32 01021 01023 #define FLAG_HITBACK 33 01024 01026 #define FLAG_STARTEQUIP 34 01027 01029 #define FLAG_BLOCKSVIEW 35 01030 01032 #define FLAG_UNDEAD 36 01033 01035 #define FLAG_CAN_STACK 37 01036 01038 #define FLAG_UNAGGRESSIVE 38 01039 01041 #define FLAG_REFL_MISSILE 39 01042 01044 #define FLAG_REFL_SPELL 40 01045 01047 #define FLAG_NO_MAGIC 41 01048 01050 #define FLAG_NO_FIX_PLAYER 42 01051 01053 #define FLAG_IS_EVIL 43 01054 01057 #define FLAG_RUN_AWAY 45 01058 01061 #define FLAG_PASS_THRU 46 01062 01064 #define FLAG_CAN_PASS_THRU 47 01065 01067 #define FLAG_OUTDOOR 48 01068 01070 #define FLAG_UNIQUE 49 01071 01073 #define FLAG_NO_DROP 50 01074 01076 #define FLAG_INDESTRUCTIBLE 51 01077 01079 #define FLAG_CAST_SPELL 52 01080 01082 #define FLAG_USE_BOW 55 01083 01085 #define FLAG_USE_ARMOUR 56 01086 01088 #define FLAG_USE_WEAPON 57 01089 01091 #define FLAG_CONNECT_NO_PUSH 58 01092 01094 #define FLAG_CONNECT_NO_RELEASE 59 01095 01097 #define FLAG_READY_BOW 60 01098 01100 #define FLAG_XRAYS 61 01101 01103 #define FLAG_NO_APPLY 62 01104 01106 #define FLAG_IS_FLOOR 63 01107 01108 /* Start of values in flags[2] */ 01109 01112 #define FLAG_LIFESAVE 64 01113 01115 #define FLAG_IS_MAGICAL 65 01116 01118 #define FLAG_ALIVE 66 01119 01121 #define FLAG_STAND_STILL 67 01122 01124 #define FLAG_RANDOM_MOVE 68 01125 01127 #define FLAG_ONLY_ATTACK 69 01128 01130 #define FLAG_WIZ 70 01131 01134 #define FLAG_STEALTH 71 01135 01137 #define FLAG_WIZPASS 72 01138 01140 #define FLAG_IS_LINKED 73 01141 01143 #define FLAG_CURSED 74 01144 01146 #define FLAG_DAMNED 75 01147 01149 #define FLAG_IS_BUILDABLE 76 01150 01152 #define FLAG_NO_PVP 77 01153 01155 #define FLAG_IS_THROWN 80 01156 01158 #define FLAG_IS_MALE 83 01159 01161 #define FLAG_IS_FEMALE 84 01162 01164 #define FLAG_APPLIED 85 01165 01167 #define FLAG_INV_LOCKED 86 01168 01170 #define FLAG_READY_WEAPON 90 01171 01173 #define FLAG_NO_SKILL_IDENT 91 01174 01176 #define FLAG_WAS_WIZ 92 01177 01179 #define FLAG_SEE_IN_DARK 93 01180 01182 #define FLAG_IS_CAULDRON 94 01183 01185 #define FLAG_DUST 95 01186 01187 /* Start of values in flags[3] */ 01188 01191 #define FLAG_ONE_HIT 97 01192 01194 #define FLAG_DRAW_DOUBLE_ALWAYS 98 01195 01197 #define FLAG_BERSERK 99 01198 01200 #define FLAG_NO_ATTACK 100 01201 01203 #define FLAG_INVULNERABLE 101 01204 01206 #define FLAG_QUEST_ITEM 102 01207 01211 #define FLAG_IS_TRAPPED 103 01212 01214 #define FLAG_SYS_OBJECT 110 01215 01217 #define FLAG_USE_FIX_POS 111 01218 01220 #define FLAG_UNPAID 112 01221 01223 #define FLAG_HIDDEN 113 01224 01226 #define FLAG_MAKE_INVISIBLE 114 01227 01229 #define FLAG_MAKE_ETHEREAL 115 01230 01232 #define FLAG_IS_PLAYER 116 01233 01237 #define FLAG_IS_NAMED 117 01238 01241 #define FLAG_SPAWN_MOB 118 01242 01245 #define FLAG_NO_TELEPORT 119 01246 01248 #define FLAG_CORPSE 120 01249 01252 #define FLAG_CORPSE_FORCED 121 01253 01255 #define FLAG_PLAYER_ONLY 122 01256 01258 #define FLAG_NO_CLERIC 123 01259 01262 #define FLAG_ONE_DROP 124 01263 01265 #define FLAG_PERM_CURSED 125 01266 01268 #define FLAG_PERM_DAMNED 126 01269 01271 #define FLAG_DOOR_CLOSED 127 01272 01274 #define FLAG_IS_MISSILE 129 01275 01277 #define FLAG_DRAW_DIRECTION 130 01278 01280 #define FLAG_DRAW_DOUBLE 131 01281 01284 #define FLAG_IS_ASSASSINATION 132 01285 01287 #define FLAG_OBJECT_WAS_MOVED 133 01288 01290 #define FLAG_NO_SAVE 134 01291 01294 #define NUM_FLAGS 135 01295 01296 #define NUM_FLAGS_32 5 01297 01300 #define IS_SYS_INVISIBLE(__ob_) \ 01301 QUERY_FLAG(__ob_, FLAG_SYS_OBJECT) 01302 01303 #define IS_INVISIBLE(__ob_, __player_) \ 01304 (QUERY_FLAG(__ob_, FLAG_SYS_OBJECT) || (QUERY_FLAG(__ob_, FLAG_IS_INVISIBLE) && !QUERY_FLAG(__player_, FLAG_SEE_INVISIBLE))) 01305 01306 #define SLOW_PENALTY(xyz) ((xyz)->stats.exp) 01307 01308 #define EXIT_PATH(xyz) ((xyz)->slaying) 01309 #define EXIT_X(xyz) ((xyz)->stats.hp) 01310 #define EXIT_Y(xyz) ((xyz)->stats.sp) 01311 01317 #define COST_BUY 0 01318 01319 #define COST_SELL 1 01320 01321 #define COST_TRUE 2 01322 01324 #define DIRX(xyz) freearr_x[(xyz)->direction] 01325 #define DIRY(xyz) freearr_y[(xyz)->direction] 01326 01327 #define ARMOUR_SPEED(xyz) (xyz)->last_sp 01328 #define ARMOUR_SPELLS(xyz) (xyz)->last_heal 01329 01350 #define DISTATT 1 01351 01352 #define RUNATT 2 01353 01354 #define HITRUN 3 01355 01356 #define WAITATT 4 01357 01358 #define RUSH 5 01359 01360 #define ALLRUN 6 01361 01362 #define DISTHIT 7 01363 01364 #define WAIT2 8 01365 01366 #define UNUSED_MOVE 16 01367 01373 #define CIRCLE1 32 01374 01376 #define CIRCLE2 48 01377 01381 #define PACEH 64 01382 01388 #define PACEH2 80 01389 01394 #define RANDO 96 01395 01397 #define RANDO2 112 01398 01402 #define PACEV 128 01403 01409 #define PACEV2 144 01410 01412 #define WPOINT 176 01413 01414 /* bitmasks for upper and lower 4 bits from 8 bit fields */ 01415 #define LO4 15 01416 #define HI4 240 01417 01425 #define ST_PLAYING 0 01426 01427 #define ST_ROLL_STAT 1 01428 01429 #define ST_CHANGE_CLASS 2 01430 01431 #define ST_GET_NAME 3 01432 01433 #define ST_GET_PASSWORD 4 01434 01435 #define ST_CONFIRM_PASSWORD 5 01436 01438 #define BLANK_FACE_NAME "blank.111" 01439 #define NEXT_ITEM_FACE_NAME "next_item.101" 01440 #define PREVIOUS_ITEM_FACE_NAME "prev_item.101" 01441 01442 /* Socket defines */ 01443 #define SockList_AddChar(_sl_, _c_) (_sl_)->buf[(_sl_)->len++] = (_c_) 01444 #define SockList_AddShort(_sl_, _data_) \ 01445 (_sl_)->buf[(_sl_)->len++] = ((_data_) >> 8) & 0xff; \ 01446 (_sl_)->buf[(_sl_)->len++] = (_data_) & 0xff 01447 01452 #define SockList_AddInt(_sl_, _data_) \ 01453 (_sl_)->buf[(_sl_)->len++] = ((_data_) >> 24) & 0xff; \ 01454 (_sl_)->buf[(_sl_)->len++] = ((_data_) >> 16) & 0xff; \ 01455 (_sl_)->buf[(_sl_)->len++] = ((_data_) >> 8) & 0xff; \ 01456 (_sl_)->buf[(_sl_)->len++] = (_data_) & 0xff 01457 01462 #define SockList_AddInt64(_sl_, _data_) \ 01463 (_sl_)->buf[(_sl_)->len++] = (char) (((_data_) >> 56) & 0xff); \ 01464 (_sl_)->buf[(_sl_)->len++] = (char) (((_data_) >> 48) & 0xff); \ 01465 (_sl_)->buf[(_sl_)->len++] = (char) (((_data_) >> 40) & 0xff); \ 01466 (_sl_)->buf[(_sl_)->len++] = (char) (((_data_) >> 32) & 0xff); \ 01467 (_sl_)->buf[(_sl_)->len++] = (char) (((_data_) >> 24) & 0xff); \ 01468 (_sl_)->buf[(_sl_)->len++] = (char) (((_data_) >> 16) & 0xff); \ 01469 (_sl_)->buf[(_sl_)->len++] = (char) (((_data_) >> 8) & 0xff); \ 01470 (_sl_)->buf[(_sl_)->len++] = (char) ((_data_) & 0xff) 01471 01477 #define SockList_AddData(_sl_, _data_, _len_) \ 01478 memcpy((_sl_)->buf + (_sl_)->len, (_data_), (_len_)); \ 01479 (_sl_)->len += (_len_) 01480 01486 #define SockList_AddLen8Data(_sl_, _data_, _len_) \ 01487 SockList_AddChar((_sl_), (_len_)); \ 01488 SockList_AddData((_sl_), (_data_), (_len_)) 01489 01493 #define SockList_AddStringUnterm(_sl_, _data_) \ 01494 SockList_AddString((_sl_), (_data_)); \ 01495 (_sl_)->len--; 01496 01497 /* Basically does the reverse of SockList_AddInt, but on 01498 * strings instead. Same for the GetShort, but for 16 bits. */ 01499 #define GetInt_String(_data_) \ 01500 (((_data_)[0] << 24) + ((_data_)[1] << 16) + ((_data_)[2] << 8) + (_data_)[3]) 01501 #define GetShort_String(_data_) \ 01502 (((_data_)[0] << 8) + (_data_)[1]) 01503 01511 static inline void safe_strcat(char *dest, const char *orig, size_t *curlen, size_t maxlen) 01512 { 01513 if (*curlen == (maxlen - 1)) 01514 { 01515 return; 01516 } 01517 01518 strncpy(dest + *curlen, orig, maxlen - *curlen - 1); 01519 dest[maxlen - 1] = 0; 01520 *curlen += strlen(orig); 01521 01522 if (*curlen > (maxlen - 1)) 01523 { 01524 *curlen = maxlen - 1; 01525 } 01526 } 01527 01528 #define DESCRIBE_PATH(retbuf, variable, name) \ 01529 if (variable) \ 01530 { \ 01531 int i, j = 0; \ 01532 strcat(retbuf, "(" name ": "); \ 01533 \ 01534 for (i = 0; i < NRSPELLPATHS; i++) \ 01535 { \ 01536 if (variable & (1 << i)) \ 01537 { \ 01538 if (j) \ 01539 strcat(retbuf, ", "); \ 01540 else \ 01541 j = 1; \ 01542 \ 01543 strcat(retbuf, spellpathnames[i]); \ 01544 } \ 01545 } \ 01546 \ 01547 strcat(retbuf, ")"); \ 01548 } 01549 01550 #define DESCRIBE_PATH_SAFE(retbuf, variable, name, len, maxlen) \ 01551 if (variable) \ 01552 { \ 01553 int i, j = 0; \ 01554 safe_strcat(retbuf, "(" name ": ", len, maxlen); \ 01555 \ 01556 for (i = 0; i < NRSPELLPATHS; i++) \ 01557 { \ 01558 if (variable & (1 << i)) \ 01559 { \ 01560 if (j) \ 01561 safe_strcat(retbuf, ", ", len, maxlen); \ 01562 else \ 01563 j = 1; \ 01564 \ 01565 safe_strcat(retbuf, spellpathnames[i], len, maxlen); \ 01566 } \ 01567 } \ 01568 \ 01569 safe_strcat(retbuf, ")", len, maxlen); \ 01570 } 01571 01576 enum apply_flag 01577 { 01578 /* Basic flags, always use one of these */ 01579 AP_NULL = 0, 01580 AP_APPLY = 1, 01581 AP_UNAPPLY = 2, 01582 AP_BASIC_FLAGS = 15, 01583 /* Optional flags, for bitwise or with a basic flag */ 01584 AP_NO_MERGE = 16, 01585 AP_IGNORE_CURSE = 32, 01586 AP_NO_EVENT = 64 01587 }; 01588 01590 #define MIN_ACTIVE_SPEED 0.00001f 01591 01602 #define BRESENHAM_INIT(dx, dy, fraction, stepx, stepy, dx2, dy2) \ 01603 { \ 01604 (dx2) = (dx) << 1; \ 01605 (dy2) = (dy) << 1; \ 01606 \ 01607 if ((dy) < 0) \ 01608 { \ 01609 (dy2) = -(dy2); \ 01610 (stepy) = -1; \ 01611 } \ 01612 else \ 01613 { \ 01614 (stepy) = 1; \ 01615 } \ 01616 \ 01617 if ((dx) < 0) \ 01618 { \ 01619 (dx2) = -(dx2); \ 01620 (stepx) = -1; \ 01621 } \ 01622 else \ 01623 { \ 01624 (stepx) = 1; \ 01625 } \ 01626 \ 01627 if ((dx2) > (dy2)) \ 01628 (fraction) = (dy2) - (dx) * (stepx); \ 01629 else \ 01630 (fraction) = (dx2) - (dy) * (stepy); \ 01631 } 01632 01640 #define BRESENHAM_STEP(x, y, fraction, stepx, stepy, dx2, dy2) \ 01641 if ((dx2) > (dy2)) \ 01642 { \ 01643 if ((fraction) >= 0) \ 01644 { \ 01645 (y) += (stepy); \ 01646 (fraction) -= (dx2); \ 01647 } \ 01648 \ 01649 (x) += (stepx); \ 01650 (fraction) += (dy2); \ 01651 } \ 01652 else \ 01653 { \ 01654 if ((fraction) >= 0) \ 01655 { \ 01656 (x) += (stepx); \ 01657 (fraction) -= (dy2); \ 01658 } \ 01659 \ 01660 (y) += (stepy); \ 01661 (fraction) += (dx2); \ 01662 } 01663 01665 #ifdef HAVE_SRANDOM 01666 # define RANDOM() random() 01667 # define SRANDOM(xyz) srandom(xyz) 01668 #else 01669 # ifdef HAVE_SRAND48 01670 # define RANDOM() lrand48() 01671 # define SRANDOM(xyz) srand48(xyz) 01672 # else 01673 # ifdef HAVE_SRAND 01674 # define RANDOM() rand() 01675 # define SRANDOM(xyz) srand(xyz) 01676 # else 01677 # error "Could not find a usable random routine" 01678 # endif 01679 # endif 01680 #endif 01681 01688 #define DUMP_VALUE_MONSTERS 1 01689 01690 #define DUMP_VALUE_ABILITIES 2 01691 01692 #define DUMP_VALUE_ARTIFACTS 3 01693 01694 #define DUMP_VALUE_SPELLS 4 01695 01696 #define DUMP_VALUE_SKILLS 5 01697 01698 #define DUMP_VALUE_RACES 6 01699 01700 #define DUMP_VALUE_ALCHEMY 7 01701 01702 #define DUMP_VALUE_GODS 8 01703 01704 #define DUMP_VALUE_ALCHEMY_COSTS 9 01705 01706 #define DUMP_VALUE_ARCHETYPES 10 01707 01708 #define DUMP_VALUE_MONSTER_TREASURE 11 01709 01710 #define DUMP_VALUE_LEVEL_COLORS 12 01711 01714 #define QUEST_CONTAINER_ARCHETYPE "quest_container" 01715 01722 #define QUEST_STATUS_STARTED 0 01723 01724 #define QUEST_STATUS_COMPLETED 1 01725 01732 #define QUEST_TYPE_ITEM 0 01733 01734 #define QUEST_TYPE_KILL 1 01735 01736 #define QUEST_TYPE_KILL_ITEM 2 01737 01740 #define QUEST_TYPE_SPECIAL 3 01741 01742 #define QUEST_TYPE_MULTI 4 01743 01749 #define arraysize(arrayname) (sizeof(arrayname) / sizeof(*(arrayname))) 01750 01751 const char *object_flag_names[NUM_FLAGS + 1]; 01752 01753 #endif
1.7.4