Atrinik Server 2.5
include/define.h
Go to the documentation of this file.
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